14 next_node = M->
i[index];
19 MARK(nodes, next_node);
20 pattern[nb_marked_nodes] = next_node;
22 next_node = etree[next_node];
25 while (nb_marked_nodes > 0)
29 pattern[start] = pattern[nb_marked_nodes];
33 for (index = start; index < M->
ncol; index++)
UNMARK(nodes, pattern[index]);
45 ladel_int start = sym->
ncol, index, next_node, nb_marked_nodes;
50 next_node = W->
i[index];
51 if (next_node >= maximum_row)
break;
54 while (next_node !=
NONE && !
IS_MARKED(nodes, next_node) && next_node < maximum_row)
56 MARK(nodes, next_node);
57 pattern[nb_marked_nodes] = next_node;
59 next_node = etree[next_node];
62 while (nb_marked_nodes > 0)
66 pattern[start] = pattern[nb_marked_nodes];
70 for (index = start; index < sym->
ncol; index++)
UNMARK(nodes, pattern[index]);
#define NONE
Indicates a root (a node without parent), or an untouched node.
#define LADEL_FOR(index, M, col)
Loop through a column of a sparse matrix.
#define UNMARK(nodes, k)
Unmark the k-th node.
#define MARK(nodes, k)
Mark the k-th node.
#define IS_MARKED(nodes, k)
Check whether the k-th node is marked.
Constants and macros used in LADEL.
Memory allocation routines.
ladel_int ladel_nonzero_pattern_of_row_in_L(ladel_sparse_matrix *M, ladel_symbolics *sym, ladel_int row)
Computes the pattern of the (next) row in L.
ladel_int ladel_etree_dfs(ladel_sparse_matrix *W, ladel_symbolics *sym, ladel_int col_in_W, ladel_int maximum_row)
Computes a depth-first search of the given pattern through the elimination tree.
Structures and types used in LADEL routines.
int64_t ladel_int
Type for integer numbers (default: int64_t)
Sparse matrix in compressed column storage.
ladel_int ncol
number of columns
ladel_int * i
row pointers (size nzmax)