21#define ICNTL(I) icntl[(I)-1]
24#define USE_COMM_WORLD -987654
36template <
class Scalar,
class SparseIndexInt=
int,
class DIL=
int>
37class MUMPSFactorization:
public Factorization<Scalar,SparseIndexInt>
50 std::vector<SparseIndexInt> & ridx,
51 std::vector<SparseIndexInt> & cidx,
52 std::vector<Scalar> & values,
55 : N(ridx.
size()), n(n_)
57 assert(cidx.size()==N && values.size()==N);
60 id = MPI::COMM_WORLD.Get_rank ( );
64 const char *s =
"UNKNOWN";
69 std::cout <<
"MUMPS" <<
" solver, n=" << n <<
", nnz=" << N <<
", matrix is " << s << std::endl;
86 std::unique_ptr<std::vector<SparseIndexInt>> ridx,
87 std::unique_ptr<std::vector<SparseIndexInt>> cidx,
88 std::unique_ptr<std::vector<Scalar>> values,
91 : N(ridx->
size()), n(n_)
93 assert(cidx->size()==N && values->size()==N);
95 id = MPI::COMM_WORLD.Get_rank ( );
104 std::cout <<
"MUMPS" <<
" solver, n=" << n <<
", nnz=" << N <<
", matrix is " << s << std::endl;
116 mumps_par.ICNTL(3) = 0;
117 dmumps_c(&mumps_par);
140 dmumps_c(&mumps_par);
142 mumps_par.ICNTL(3) = 0;
143 mumps_par.ICNTL(14) += 5;
146 void analyze(SparseIndexInt *irn, SparseIndexInt *jcn)
152 for (
int k=0; k<N; k++)
157 MPI_Barrier(MPI_COMM_WORLD);
160 dmumps_c(&mumps_par);
167 dmumps_c(&mumps_par);
174 void solve(std::vector<Scalar>
const& b, std::vector<Scalar>& x,
bool transpose=
false)
const
181 mumps_par.rhs = &x[0];
182 dmumps_c(&mumps_par);
189 void solve(std::vector<Scalar>& b)
const
192 mumps_par.rhs = &b[0];
193 dmumps_c(&mumps_par);
200 mutable DMUMPS_STRUC_C mumps_par;
Abstract base class for matrix factorizations.
void setVerbose(int verbose_)
void solve(std::vector< Scalar > const &b, std::vector< Scalar > &x, bool transpose=false) const
MUMPSFactorization(SparseIndexInt n_, std::unique_ptr< std::vector< SparseIndexInt > > ridx, std::unique_ptr< std::vector< SparseIndexInt > > cidx, std::unique_ptr< std::vector< Scalar > > values, MatrixProperties property=MatrixProperties::GENERAL, int verb=0)
Version of constructor, that destroys input data before factorization: more memory efficient.
void init(MatrixProperties property)
void solve(std::vector< Scalar > &b) const
void analyze(SparseIndexInt *irn, SparseIndexInt *jcn)
MUMPSFactorization(SparseIndexInt n_, std::vector< SparseIndexInt > &ridx, std::vector< SparseIndexInt > &cidx, std::vector< Scalar > &values, MatrixProperties property=MatrixProperties::GENERAL, int verb=0)
Version of constructor keeping input data in triplet format (aka coordinate format) constant.
size_t size() const
reports the dimension of the system
void analyze(MUMPS_INT *irn, MUMPS_INT *jcn)
void factorize(Scalar *a)
MatrixProperties
Characterizations of sparse matrix properties.