22 #include "linear_matrix_solver.h"
32 using namespace Hermes::Algebra;
38 template<
typename Scalar>
39 LinearMatrixSolver<Scalar>::LinearMatrixSolver()
45 template<
typename Scalar>
46 LinearMatrixSolver<Scalar>::~LinearMatrixSolver()
52 template<
typename Scalar>
58 template<
typename Scalar>
64 template<
typename Scalar>
70 template<
typename Scalar>
76 template<
typename Scalar>
82 case Hermes::SOLVER_AZTECOO:
84 #if defined HAVE_AZTECOO && defined HAVE_EPETRA
85 if(rhs != NULL)
return new AztecOOSolver<Scalar>(
static_cast<EpetraMatrix<Scalar>*
>(matrix),
static_cast<EpetraVector<Scalar>*
>(rhs));
86 else return new AztecOOSolver<Scalar>(
static_cast<EpetraMatrix<Scalar>*
>(matrix),
static_cast<EpetraVector<Scalar>*
>(rhs_dummy));
92 case Hermes::SOLVER_AMESOS:
94 #if defined HAVE_AMESOS && defined HAVE_EPETRA
95 if(rhs != NULL)
return new AmesosSolver<Scalar>(
"Amesos_Klu",
static_cast<EpetraMatrix<Scalar>*
>(matrix),
static_cast<EpetraVector<Scalar>*
>(rhs));
96 else return new AmesosSolver<Scalar>(
"Amesos_Klu",
static_cast<EpetraMatrix<Scalar>*
>(matrix),
static_cast<EpetraVector<Scalar>*
>(rhs_dummy));
102 case Hermes::SOLVER_MUMPS:
105 if(rhs != NULL)
return new MumpsSolver<Scalar>(
static_cast<MumpsMatrix<Scalar>*
>(matrix),
static_cast<MumpsVector<Scalar>*
>(rhs));
106 else return new MumpsSolver<Scalar>(
static_cast<MumpsMatrix<Scalar>*
>(matrix),
static_cast<MumpsVector<Scalar>*
>(rhs_dummy));
112 case Hermes::SOLVER_PETSC:
115 if(rhs != NULL)
return new PetscLinearMatrixSolver<Scalar>(
static_cast<PetscMatrix<Scalar>*
>(matrix),
static_cast<PetscVector<Scalar>*
>(rhs));
116 else return new PetscLinearMatrixSolver<Scalar>(
static_cast<PetscMatrix<Scalar>*
>(matrix),
static_cast<PetscVector<Scalar>*
>(rhs_dummy));
122 case Hermes::SOLVER_UMFPACK:
125 if(rhs != NULL)
return new UMFPackLinearMatrixSolver<Scalar>(
static_cast<UMFPackMatrix<Scalar>*
>(matrix),
static_cast<UMFPackVector<Scalar>*
>(rhs));
126 else return new UMFPackLinearMatrixSolver<Scalar>(
static_cast<UMFPackMatrix<Scalar>*
>(matrix),
static_cast<UMFPackVector<Scalar>*
>(rhs_dummy));
132 case Hermes::SOLVER_SUPERLU:
135 if(rhs != NULL)
return new SuperLUSolver<Scalar>(
static_cast<SuperLUMatrix<Scalar>*
>(matrix),
static_cast<SuperLUVector<Scalar>*
>(rhs));
136 else return new SuperLUSolver<Scalar>(
static_cast<SuperLUMatrix<Scalar>*
>(matrix),
static_cast<SuperLUVector<Scalar>*
>(rhs_dummy));
148 template<
typename Scalar>
151 factorization_scheme = reuse_scheme;
154 template<
typename Scalar>
157 this->tolerance = tol;
160 template<
typename Scalar>
163 this->max_iters = iters;