~ubuntu-branches/ubuntu/oneiric/suitesparse/oneiric

« back to all changes in this revision

Viewing changes to KLU/Source/klu_sort.c

  • Committer: Bazaar Package Importer
  • Author(s): Nick Ellery
  • Date: 2009-06-14 19:15:52 UTC
  • mfrom: (7.2.2 sid)
  • Revision ID: james.westby@ubuntu.com-20090614191552-2hliya5q8n1quseu
Tags: 1:3.4.0-1ubuntu1
* Merge from debian unstable, remaining changes (LP: #387137):
  - debian/control:
    - demote libatlas-doc from recommends to suggests as it is not in main
    - drop recommends on doc-central as it is not in main

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
    /* count the number of entries in each row of L or U */ 
27
27
    for (i = 0 ; i < n ; i++)
28
28
    {
29
 
        W [i] = 0 ;
 
29
        W [i] = 0 ;
30
30
    }
31
31
    for (j = 0 ; j < n ; j++)
32
32
    {
33
 
        GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
34
 
        for (p = 0 ; p < len ; p++)
35
 
        {
36
 
            W [Xi [p]]++ ;
37
 
        }
 
33
        GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
 
34
        for (p = 0 ; p < len ; p++)
 
35
        {
 
36
            W [Xi [p]]++ ;
 
37
        }
38
38
    }
39
39
 
40
40
    /* construct the row pointers for T */
41
41
    nz = 0 ;
42
42
    for (i = 0 ; i < n ; i++)
43
43
    {
44
 
        Tp [i] = nz ;
45
 
        nz += W [i] ;
 
44
        Tp [i] = nz ;
 
45
        nz += W [i] ;
46
46
    }
47
47
    Tp [n] = nz ;
48
48
    for (i = 0 ; i < n ; i++)
49
49
    {
50
 
        W [i] = Tp [i] ;
 
50
        W [i] = Tp [i] ;
51
51
    }
52
52
 
53
53
    /* transpose the matrix into Tp, Ti, Tx */
54
54
    for (j = 0 ; j < n ; j++)
55
55
    {
56
 
        GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
57
 
        for (p = 0 ; p < len ; p++)
58
 
        {
59
 
            tp = W [Xi [p]]++ ;
60
 
            Tj [tp] = j ;
61
 
            Tx [tp] = Xx [p] ;
62
 
        }
 
56
        GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
 
57
        for (p = 0 ; p < len ; p++)
 
58
        {
 
59
            tp = W [Xi [p]]++ ;
 
60
            Tj [tp] = j ;
 
61
            Tx [tp] = Xx [p] ;
 
62
        }
63
63
    }
64
64
 
65
65
    /* transpose the matrix back into Xip, Xlen, Xi, Xx */
66
66
    for (j = 0 ; j < n ; j++)
67
67
    {
68
 
        W [j] = 0 ;
 
68
        W [j] = 0 ;
69
69
    }
70
70
    for (i = 0 ; i < n ; i++)
71
71
    {
72
 
        pend = Tp [i+1] ;
73
 
        for (p = Tp [i] ; p < pend ; p++)
74
 
        {
75
 
            j = Tj [p] ;
76
 
            GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
77
 
            xlen = W [j]++ ;
78
 
            Xi [xlen] = i ;
79
 
            Xx [xlen] = Tx [p] ;
80
 
        }
 
72
        pend = Tp [i+1] ;
 
73
        for (p = Tp [i] ; p < pend ; p++)
 
74
        {
 
75
            j = Tj [p] ;
 
76
            GET_POINTER (LU, Xip, Xlen, Xi, Xx, j, len) ;
 
77
            xlen = W [j]++ ;
 
78
            Xi [xlen] = i ;
 
79
            Xx [xlen] = Tx [p] ;
 
80
        }
81
81
    }
82
82
 
83
83
    ASSERT (KLU_valid_LU (n, FALSE, Xip, Xlen, LU)) ;
103
103
 
104
104
    if (Common == NULL)
105
105
    {
106
 
        return (FALSE) ;
 
106
        return (FALSE) ;
107
107
    }
108
108
    Common->status = KLU_OK ;
109
109
 
131
131
 
132
132
    if (Common->status == KLU_OK)
133
133
    {
134
 
        /* sort each block of L and U */
135
 
        for (block = 0 ; block < nblocks ; block++)
136
 
        {
137
 
            k1 = R [block] ;
138
 
            nk = R [block+1] - k1 ;
139
 
            if (nk > 1)
140
 
            {
141
 
                PRINTF (("\n-------------------block: %d nk %d\n", block, nk)) ;
142
 
                sort (nk, Lip + k1, Llen + k1, LUbx [block], Tp, Ti, Tx, W) ;
143
 
                sort (nk, Uip + k1, Ulen + k1, LUbx [block], Tp, Ti, Tx, W) ;
144
 
            }
145
 
        }
 
134
        /* sort each block of L and U */
 
135
        for (block = 0 ; block < nblocks ; block++)
 
136
        {
 
137
            k1 = R [block] ;
 
138
            nk = R [block+1] - k1 ;
 
139
            if (nk > 1)
 
140
            {
 
141
                PRINTF (("\n-------------------block: %d nk %d\n", block, nk)) ;
 
142
                sort (nk, Lip + k1, Llen + k1, LUbx [block], Tp, Ti, Tx, W) ;
 
143
                sort (nk, Uip + k1, Ulen + k1, LUbx [block], Tp, Ti, Tx, W) ;
 
144
            }
 
145
        }
146
146
    }
147
147
 
148
148
    PRINTF (("\n======================= sort done.\n")) ;