1 #ifndef _RHEOLEF_SOLVER_MUMPS_H
2 #define _RHEOLEF_SOLVER_MUMPS_H
26 #include "rheolef/config.h"
28 #ifdef _RHEOLEF_HAVE_MUMPS
30 #include "rheolef/solver.h"
38 template<
class T,
class M>
39 class solver_mumps_rep :
public solver_abstract_rep<T,M> {
43 typedef solver_abstract_rep<T,M> base;
45 typedef typename base::determinant_type determinant_type;
49 explicit solver_mumps_rep (
const csr<T,M>&
a,
const solver_option& opt = solver_option());
50 solver_abstract_rep<T,M>* clone()
const;
51 bool initialized()
const {
return true; }
52 void update_values (
const csr<T,M>&
a);
57 vec<T,M> trans_solve (
const vec<T,M>& rhs)
const;
58 vec<T,M>
solve (
const vec<T,M>& rhs)
const;
59 determinant_type det()
const {
return _det; }
63 bool _has_mumps_instance;
65 mutable DMUMPS_STRUC_C _mumps_par;
66 std::vector<MUMPS_INT> _row;
67 std::vector<MUMPS_INT> _col;
68 std::vector<double> _val;
70 determinant_type _det;
72 template <
class T,
class M>
74 solver_abstract_rep<T,M>*
75 solver_mumps_rep<T,M>::clone()
const
77 typedef solver_mumps_rep<T,M> rep;
78 return new_macro (rep(*
this));
field::size_type size_type
This file is part of Rheolef.
void solve(tiny_matrix< T > &a, tiny_vector< size_t > &piv, const tiny_vector< T > &b, tiny_vector< T > &x)