6 #ifndef MYRAMATH_MULTIFRONTAL_SYMBOLIC_SCHURTREE_H 7 #define MYRAMATH_MULTIFRONTAL_SYMBOLIC_SCHURTREE_H 14 #include <myramath/MYRAMATH_EXPORT.h> 47 typedef std::pair<const int*,const int*>
Range;
79 void inspect(std::ostream& out)
const;
87 std::vector<WriteMapItem> items;
88 std::vector<int> strides;
101 const int* begin(
int j)
const;
102 const int* end(
int j)
const;
105 void inspect(std::ostream& out)
const;
116 std::vector<int> nodes;
117 std::vector<int> strides;
134 std::vector<int> i_pattern;
135 std::vector<int> j_pattern;
141 std::vector<int> i_blocking;
142 std::vector<int> j_blocking;
145 std::vector<int> i_striding;
146 std::vector<int> j_striding;
150 std::vector<Node*> children;
165 int parent_id()
const;
168 std::vector<int> children_ids()
const;
171 void inspect(std::ostream& out)
const;
176 Range p_pattern()
const 177 {
return Range(i_pattern.data(), i_pattern.data()+p); }
180 Range q_pattern()
const 181 {
return Range(i_pattern.data()+p, i_pattern.data()+p+q); }
184 Range p_blocking()
const 185 {
return Range(i_blocking.data(), i_blocking.data()+P); }
188 Range q_blocking()
const 189 {
return Range(i_blocking.data()+P, i_blocking.data()+P+Q); }
192 Range iblock_pattern(
int ib)
const 193 {
return Range(i_pattern.data()+i_striding[ib], i_pattern.data()+i_striding[ib+1]); }
196 Range jblock_pattern(
int jb)
const 197 {
return Range(j_pattern.data()+j_striding[jb], j_pattern.data()+j_striding[jb+1]); }
200 static bool j_intersects(
const Node& n1,
const Node& n2);
203 std::pair<int,int> j_find(
int j)
const;
208 std::pair<uint64_t,uint64_t> n_words()
const;
211 uint64_t n_work_solve()
const;
214 uint64_t n_work_rankk()
const;
217 static uint64_t n_work_gemm(
const Node& x,
const Node& y);
222 Range iblock_up(
int ib)
const;
225 Range iblock_down(
int ib,
int c)
const;
230 Range jblock_up(
int jb)
const;
233 Range jblock_down(
int jb,
int c)
const;
238 std::vector<int> iup_data;
243 std::vector<int> idown_data;
249 std::vector<int> iblock_up_finalize(
int b,
int blocksize)
const;
253 std::vector<int> iblock_down_finalize(
int b,
int c,
int blocksize)
const;
257 std::vector<int> imap(Range range)
const;
260 void ifinalize(
int blocksize);
263 std::vector<int> jup_data;
268 std::vector<int> jdown_data;
274 std::vector<int> jblock_up_finalize(
int jb,
int blocksize)
const;
278 std::vector<int> jblock_down_finalize(
int jb,
int c,
int blocksize)
const;
282 std::vector<int> jmap(Range range)
const;
285 void jfinalize(
int blocksize);
311 #ifdef MYRAMATH_ENABLE_CPP11 320 std::pair<int,int> size()
const;
326 const Node& node(
int n)
const;
329 std::vector<int> roots()
const;
332 std::vector<int> leaves()
const;
335 std::vector<int> postorder()
const;
336 std::vector<int> preorder()
const;
339 const std::vector<int>& s2a()
const;
342 std::map<int,int> a2s()
const;
350 std::pair<uint64_t,uint64_t> n_words()
const;
353 uint64_t n_work_solve()
const;
356 uint64_t n_work_rankk()
const;
373 void inspect(std::ostream& out)
const;
381 void postorder_detail(
int n, std::vector<int>& answer)
const;
382 void preorder_detail(
int n, std::vector<int>& answer)
const;
389 std::vector<Node*> nodes;
392 std::vector<int> schur2assembly;
403 std::ostream& operator<< (std::ostream& out,
const SchurTree::Node& stree);
404 std::ostream& operator<< (std::ostream& out,
const SchurTree& stree);
std::pair< const int *, const int * > Range
Useful typedefs.
Definition: SchurTree.h:47
Options pack for routines in /multifrontal.
Definition: Options.h:24
Symbolic analysis data structure for all multifrontal solvers.
Definition: AssemblyTree.h:38
Container of values, allows random (i) access.
Container of values, allows random (i,j) access.
Symbolic analysis data structure for multifrontal schur complement.
Definition: SchurTree.h:42
Definition: SchurTree.h:123
Represents an immutable view of a Pattern.
Definition: PatternRange.h:31
Abstraction layer, serializable objects write themselves to these.
Definition: Streams.h:39
Definition: SchurTree.h:51
Various utility functions/classes related to scalar Number types.
Describes data layout and job dependencies for symmetric-pattern multifrontal solvers.
Definition: SchurTree.h:93
Options pack for routines in /multifrontal.
Definition: SchurTree.h:61
Definition: AssemblyTree.h:47
Represents a const intRange.
Definition: intRange.h:142