summaryrefslogtreecommitdiff
path: root/modules/sparse/macros/adj2sp.sci
blob: 7a2b660859a863ec3df5f891ef4e3ec29daafe8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) XXXX-2008 - INRIA
// Copyright (C) 2010 - DIGITEO - Michael Baudin
//
// This file must be used under the terms of the CeCILL.
// This source file is licensed as described in the file COPYING, which
// you should have received as part of this distribution.  The terms
// are also available at
// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt


function A=adj2sp(varargin)
    // adjacency to sparse conversion.
    // See adj2sp.xml for help.
    //
    // Check number of arguments
    [lhs, rhs] = argn()
    if ( and(rhs <> [3 4]) ) then
        lstr = gettext("%s: Wrong number of input arguments: %d to %d expected.\n")
        error ( msprintf(lstr,"adj2sp",3,4))
    end
    if ( and(lhs <> [0 1]) ) then
        lstr = gettext("%s: Wrong number of output arguments: %d to %d expected.\n")
        error ( msprintf(lstr,"adj2sp",0,1))
    end
    //
    // Get arguments
    xadj = varargin(1)
    iadj = varargin(2)
    v = varargin(3)
    //
    // Get size of the matrix
    if ( rhs == 3 ) then
        m = max(iadj)
        n = size(xadj,"*")-1
        mn = [m,n]
    else
        mn = varargin(4)
    end
    //
    // Check type of arguments
    if ( typeof(xadj) <> "constant" ) then
        lstr = gettext("%s: Wrong type for input argument #%d.\n")
        error ( msprintf(lstr,"adj2sp",1))
    end
    if ( typeof(iadj) <> "constant" ) then
        lstr = gettext("%s: Wrong type for input argument #%d.\n")
        error ( msprintf(lstr,"adj2sp",2))
    end
    if ( typeof(mn) <> "constant" ) then
        lstr = gettext("%s: Wrong type for input argument #%d.\n")
        error ( msprintf(lstr,"adj2sp",3))
    end
    //
    // Check size of arguments
    if ( size(mn,"*") <> 2 ) then
        lstr = gettext("%s: Wrong size for input argument #%d: %s has size %d, but %d is expected.\n")
        error ( msprintf(lstr,"adj2sp",4,"mn",size(mn,"*"),2))
    end
    //
    // Check content of arguments
    if ( mn(1) < 0 ) then
        lstr = gettext("%s: Wrong value for input argument #%d: %s=%d, but a positive value is expected.\n")
        error ( msprintf(lstr,"adj2sp",4,"mn(1)",mn(1)))
    end
    if ( mn(2) < 0 ) then
        lstr = gettext("%s: Wrong value for input argument #%d: %s=%d, but a positive value is expected.\n")
        error ( msprintf(lstr,"adj2sp",4,"mn(2)",mn(2)))
    end
    if ( int(mn(1)) <> mn(1) ) then
        lstr = gettext("%s: Wrong value for input argument #%d: %s=%s, but a floating point integer is expected.\n")
        error ( msprintf(lstr,"adj2sp",4,"mn(1)",string(mn(1))))
    end
    if ( int(mn(2)) <> mn(2) ) then
        lstr = gettext("%s: Wrong value for input argument #%d: %s=%s, but a floating point integer is expected.\n")
        error ( msprintf(lstr,"adj2sp",4,"mn(2)",string(mn(2))))
    end
    if ( mn(1) <> max(iadj) ) then
        lstr = gettext("%s: Wrong value for input argument #%d: %s=%d, which does not match %s: %d.\n")
        error ( msprintf(lstr,"adj2sp",4,"mn(1)",mn(1),"max(iadj)",max(iadj)))
    end
    if ( mn(2) <> size(xadj,"*")-1 ) then
        lstr = gettext("%s: Wrong value for input argument #%d: %s=%d, which does not match size of %s: %d.\n")
        error ( msprintf(lstr,"adj2sp",4,"mn(2)",mn(2),"xadj",size(xadj,"*")))
    end
    //
    // Make xadj, iadj, mn column matrices
    xadj = xadj(:)
    iadj = iadj(:)
    mn = mn(:)
    //
    // Proceed...
    nza = size(iadj,"*")
    j = fadj2sp(xadj,mn(2),nza)
    A = sparse([j,iadj],v,[mn(2),mn(1)])'
endfunction