MyraMath
multifrontal_schur_gemm1


Source: tests/multifrontal/detail/multifrontal_schur_gemm.cpp

1 // ========================================================================= //
2 // This file is part of MyraMath, copyright (c) 2014-2019 by Ryan A Chilton //
3 // and distributed by MyraCore, LLC. See LICENSE.txt for license terms. //
4 // ========================================================================= //
5 
11 // Containers.
17 
18 // Algorithms.
20 
21 // JobGraph under test.
24 #include <myramath/multifrontal/detail/schurgemm.h>
25 
26 // Reporting.
27 #include <tests/myratest.h>
28 
29 using namespace myra;
30 typedef multifrontal::Options Options;
31 
32 ADD_TEST("multifrontal_schur_gemm1","[multifrontal][jobgraph]")
33  {
34  // Construct AssemblyTree of a 3D laplacian.
35  int I = 32;
36  int J = 32;
37  int K = 32;
38  int N = I*J*K;
39  Pattern A_pattern = stencil3(I,J,K);
40  Permutation perm = bisect3(I,J,K);
41  AssemblyTree atree(A_pattern,perm);
42  // Construct SchurTree for k=0 plane.
43  Natural3D n(I,J,K);
44  PatternBuilder B_builder(N,I*J);
45  int b_next = 0;
46  for (int i = 0; i < I; ++i)
47  for (int j = 0; j < J; ++j)
48  B_builder.insert(n(i,j,0),b_next++);
49  Pattern B_pattern = B_builder.make_Pattern();
50  SchurTree btree(atree,B_pattern);
51  // Construct SchurTree for k=K-1 plane.
52  PatternBuilder C_builder(N,I*J);
53  int c_next = 0;
54  for (int i = 0; i < I; ++i)
55  for (int j = 0; j < J; ++j)
56  C_builder.insert(n(i,j,K-1),c_next++);
57  Pattern C_pattern = C_builder.make_Pattern();
58  SchurTree ctree(atree,C_pattern);
59  // Verify the JobGraph.
60  typedef ::multifrontal::detail::schurgemm::JobGraphBase1 Graph;
61  Graph graph(&atree,&btree,&ctree);
62  //REQUIRE( verify(graph) );
63  REQUIRE( verify(graph) );
64  // Save .dot file to disk?
65  //graphviz(graph,"graph.dot");
66  graphviz(graph,"graph2.dot");
67  }
68 
69 
70 ADD_TEST("multifrontal_schur_gemm2","[multifrontal]")
71  {
72  // Make diagonal Pattern for A.
73  int N = 10;
74  PatternBuilder A_builder(N,N);
75  for (int n = 0; n < N; ++n)
76  A_builder.insert(n,n);
77  Pattern A_pattern = A_builder.make_Pattern();
78  auto perm = Permutation::identity(N);
79  typedef multifrontal::Options Options;
80  Options options = Options::create().set_blocksize(1).set_globsize(1);
81  AssemblyTree atree(A_pattern,perm,options);
82  // Construct SchurTree for single-column SparseMatrix, containing [ 0 0 0 1 .. 1]
83  PatternBuilder B_builder(N,1);
84  for (int n = 3; n < N; n++)
85  B_builder.insert(n,0);
86  Pattern B_pattern = B_builder.make_Pattern();
87  SchurTree btree(atree,B_pattern,options);
88  // Construct SchurTree for single-column SparseMatrix, containing [ 1 .. 1 0 0 0 ]
89  PatternBuilder C_builder(N,1);
90  for (int n = 0; n < N-3; n++)
91  C_builder.insert(n,0);
92  Pattern C_pattern = C_builder.make_Pattern();
93  SchurTree ctree(atree,C_pattern,options);
94  // Verify the JobGraph.
95  typedef ::multifrontal::detail::schurgemm::JobGraphBase1 Graph;
96  Graph graph(&atree,&btree,&ctree);
97  REQUIRE( verify(graph) );
98  // Save .dot file to disk?
99  graphviz(graph,"graph2.dot");
100  }
101 
Options pack for routines in /multifrontal.
Definition: Options.h:24
Given a JobGraph G, verifies it has valid topology.
Represents a Permutation matrix, used to reorder rows/columns/etc of various numeric containers...
Definition: Permutation.h:34
Symbolic analysis data structure for all multifrontal solvers.
Definition: AssemblyTree.h:38
static Permutation identity(int N)
Generates an identity Matrix of specified size.
Definition: Permutation.cpp:181
A helper class that generates a natural ordering on a 3D structured grid of size IxJxK.
Definition: laplacian3.h:28
Convenience type for building Pattern&#39;s, uses coordinate/couplet format. Note that PatternBuilder may...
Symbolic analysis data structure for multifrontal schur complement.
Definition: SchurTree.h:42
Definition: syntax.dox:1
Describes data layout and job dependencies for symmetric-pattern multifrontal solvers.
Helper routines for reordering/filling 3D structured grids. Used by many unit tests.
Range/Iterator types associated with Pattern.
Holds the nonzero pattern of a sparse matrix.
Definition: Pattern.h:55
Like Pattern, but easier to populate via insert()/erase() methods.
Definition: PatternBuilder.h:51
Container class for a sparse nonzero pattern, used in reordering/symbolic analysis.
Given a JobGraph, produces a .dot file for visualization with graphviz.
Tabulates data layout and dependencies for multifrontal schur complement.


Results: [PASS]


Go back to Summary of /test programs.