6 #ifndef MYRAMATH_MULTIFRONTAL_SPARSEZLDLHSOLVER_H 7 #define MYRAMATH_MULTIFRONTAL_SPARSEZLDLHSOLVER_H 14 #include <myramath/MYRAMATH_EXPORT.h> 27 #include <myramath/multifrontal/detail/llt/LContainer.h> 36 template <
class Precision>
class ZLDLHKernel;
40 template<
class Number>
class SparseMatrix;
41 template<
class Number>
class SparseMatrixRange;
42 template<
class Number>
class CSparseMatrixRange;
45 template <
class Number>
class Matrix;
46 template <
class Number>
class MatrixRange;
47 template <
class Number>
class CMatrixRange;
48 template <
class Number>
class Vector;
49 template <
class Number>
class VectorRange;
50 template <
class Number>
class CVectorRange;
51 template <
class Number>
class LowerMatrix;
52 template <
class Number>
class LowerMatrixRange;
53 template <
class Number>
class CLowerMatrixRange;
65 typedef std::complex<Precision> Number;
72 typedef ::myra::multifrontal::Options
Options;
85 #ifdef MYRAMATH_ENABLE_CPP11 106 void factor(
const SRange& A, Options options = defaults());
107 JobGraph factor_jobgraph(
const SRange& A, Options options = defaults());
111 void factor(
const SRange& in_A,
const Permutation& P, Options options = defaults());
112 JobGraph factor_jobgraph(
const SRange& in_A,
const Permutation& P, Options options = defaults());
116 void factor(
const SRange& in_A,
const AssemblyTree& tree, Options options = defaults());
117 JobGraph factor_jobgraph(
const SRange& in_A,
const AssemblyTree& tree, Options options = defaults());
124 void solve(
const DRange& B,
char side =
'L',
char op =
'N', Options options = defaults())
const;
125 JobGraph solve_jobgraph(
const DRange& B,
char side =
'L',
char op =
'N', Options options = defaults())
const;
130 void solveL(
const DRange& B,
char side =
'L',
char op =
'N', Options options = defaults().set_nthreads(1))
const;
131 JobGraph solveL_jobgraph(
const DRange& B,
char side =
'L',
char op =
'N', Options options = defaults().set_nthreads(1))
const;
136 void solveD(
const DRange& B,
char side =
'L')
const;
145 std::vector<Precision> refine(
const DRange& B,
char side =
'L',
char op =
'N', Precision tolerance = default_tolerance(),
int iterations = default_iterations(), Options options = defaults())
const;
153 void schur_inplace(
const SRange& B,
const LRange& S, Options options = defaults())
const;
154 JobGraph schur_jobgraph(
const SRange& B,
const LRange& S, Options options = defaults())
const;
157 LowerMatrix<Number> schur(
const iRange& Bi,
const DRange& Bv, Options options = defaults())
const;
158 void schur_inplace(
const iRange& Bi,
const DRange& Bv,
const LRange& S, Options options = defaults())
const;
159 JobGraph schur_jobgraph(
const iRange& Bi,
const DRange& Bv,
const LRange& S, Options options = defaults())
const;
162 Matrix<Number> schur(
const SRange& B,
const SRange& C, Options options = defaults())
const;
163 void schur_inplace(
const SRange& B,
const SRange& C,
const DRange& S, Options options = defaults())
const;
164 JobGraph schur_jobgraph(
const SRange& B,
const SRange& C,
const DRange& S, Options options = defaults())
const;
167 Matrix<Number> schur(
const iRange& Bi,
const DRange& Bv,
const iRange& Ci,
const DRange& Cv, Options options = defaults())
const;
168 void schur_inplace(
const iRange& Bi,
const DRange& Bv,
const iRange& Ci,
const DRange& Cv,
const DRange& S, Options options = defaults())
const;
169 JobGraph schur_jobgraph(
const iRange& Bi,
const DRange& Bv,
const iRange& Ci,
const DRange& Cv,
const DRange& S, Options options = defaults())
const;
175 Number inverse(
int ij)
const;
178 Number inverse(
int i,
int j)
const;
181 Matrix<Number> inverse(
const iRange& i,
const iRange& j, Options options = defaults())
const;
182 void inverse_inplace(
const iRange& i,
const iRange& j,
const DRange& Z, Options options = defaults())
const;
183 JobGraph inverse_jobgraph(
const iRange& i,
const iRange& j,
const DRange& Z, Options options = defaults())
const;
187 void inverse_inplace(
const iRange& ij,
const LRange& Z, Options options = defaults())
const;
188 JobGraph inverse_jobgraph(
const iRange& ij,
const LRange& Z, Options options = defaults())
const;
196 Matrix<Number> partialsolve(
const iRange& i,
const iRange& j,
const CMatrixRange<Number>& B,
char side =
'L',
char op =
'N', Options options = defaults().set_nthreads(1))
const;
197 void partialsolve_inplace(
const iRange& i,
const iRange& j,
const CMatrixRange<Number>& B,
const MatrixRange<Number>& X,
char side =
'L',
char op =
'N', Options options = defaults().set_nthreads(1))
const;
206 std::pair<int,int> inertia()
const;
212 static Options defaults();
213 static Precision default_tolerance();
214 static int default_iterations();
220 typedef ::myra::multifrontal::detail::llt::LContainer<Kernel> LContainer;
227 {
public:
typedef std::complex<Precision> type; };
Pivot factorization for SparseZLDLHSolver.
Reflects Number trait for a Container, containers of Numbers (Matrix's, Vector's, etc) should special...
Definition: Number.h:55
Options pack for routines in /multifrontal.
Definition: Options.h:24
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
Represents a mutable LowerMatrixRange.
Definition: conjugate.h:28
Tabulates an IxJ matrix. Allows random access, has column major layout to be compatible with BLAS/LAP...
Definition: bdsqr.h:20
Factors A into L*L', presents solve methods.
Definition: Kernel.h:39
Sparse direct solver suitable for complex hermitian indefinite systems.
Definition: SparseZLDLHSolver.h:60
Type erasure class that wraps JobGraphBase, gives it value semantics.
Definition: JobGraph.h:64
Represents a const MatrixRange.
Definition: bothcat.h:22
Definition: SparseZLDLHSolver.cpp:334
Abstraction layer, serializable objects write themselves to these.
Definition: Streams.h:39
Abstraction for representing a directed acyclic graph of Job's.
Various utility functions/classes related to scalar Number types.
Represents a mutable MatrixRange.
Definition: conjugate.h:26
Represents a const SparseMatrixRange.
Definition: bothcat.h:24
Options pack for routines in /multifrontal.
Tabulates a vector of length N, allows random access.
Definition: conjugate.h:21
Represents a const VectorRange.
Definition: axpy.h:20
Stores a lower triangular matrix in rectangular packed format.
Definition: conjugate.h:22
Represents a const intRange.
Definition: intRange.h:142