92 PORD_INT *marker, *mergelink, *indices, *tmp, *xnzl, *xnzlsub, *nzlsub;
94 PORD_INT fast, len, k, p, e, i, istart, istop;
95
98
99
100
101
106 for (k = 0; k < neqs; k++)
107 marker[k] = mergelink[k] = -1;
108
109
110
111
113
117
118
119
120
121 xnzl[0] = 0;
123 for (k = 0; k < neqs; k++)
124 { indices[0] = k;
125 knz = 1;
126
127 if ((mergecol = mergelink[k]) != -1)
128 { mrk = marker[mergecol];
130 }
131 else
132 { mrk = k;
134 }
135
136
137
138
139 u = invp[k];
141 istop = G->
xadj[u+1];
142 for (i = istart; i < istop; i++)
144 if ((col = perm[v]) > k)
145 { indices[knz++] = col;
146 if (marker[col] != mrk) fast =
FALSE;
147 }
148 }
149
150
151
152
153 if ((fast) && (mergelink[mergecol] == -1))
154 { xnzlsub[k] = xnzlsub[mergecol] + 1;
155 knz = xnzl[mergecol+1] - xnzl[mergecol] - 1;
156 }
157 else
158 { for (i = 0; i < knz; i++)
159 marker[indices[i]] = k;
160 while (mergecol != -1)
161 { len = xnzl[mergecol+1] - xnzl[mergecol];
162 istart = xnzlsub[mergecol];
163 istop = istart + len;
164 for (i = istart; i < istop; i++)
165 { col = nzlsub[i];
166 if ((col > k) && (marker[col] != k))
167 { indices[knz++] = col;
168 marker[col] = k;
169 }
170 }
171 mergecol = mergelink[mergecol];
172 }
174
175
176
177
179 xnzlsub[k] = beg;
184 }
185 len = 0;
186 for (i = beg; i <
end; i++)
187 nzlsub[i] = indices[len++];
188 }
189
190
191
192
193 if (knz > 1)
194 { p = xnzlsub[k]+1;
195 e = nzlsub[p];
196 mergelink[k] = mergelink[e];
197 mergelink[e] = k;
198 }
199 xnzl[k+1] = xnzl[k] + knz;
200 }
201
202
203
204
205 free(marker); free(indices);
206 free(tmp); free(mergelink);
207
208
209
210
211 css->
nind = xnzlsub[neqs-1] + 1;
214 return(css);
215}
end[inform, rinform, sol, inst, schur, redrhs, pivnul_list, sym_perm, uns_perm, icntl, cntl, colsca_out, rowsca_out, keep_out, dkeep_out]
#define myrealloc(ptr, nr, type)
void qsortUpInts(PORD_INT, PORD_INT *, PORD_INT *)