24 namespace Preconditioners
26 template<
typename Scalar>
27 MlPrecond<Scalar>::MlPrecond(
const char *type)
33 if(strcmp(type,
"sa") == 0) ML_Epetra::SetDefaults(
"SA", mlist);
34 else if(strcmp(type,
"dd") == 0) ML_Epetra::SetDefaults(
"DD", mlist);
37 template<
typename Scalar>
38 MlPrecond<Scalar>::MlPrecond(ML_Epetra::MultiLevelPreconditioner *mpc)
45 template<
typename Scalar>
46 MlPrecond<Scalar>::~MlPrecond()
48 if(owner)
delete prec;
51 template<
typename Scalar>
52 void MlPrecond<Scalar>::set_param(
const char *name,
const char *value)
54 mlist.set(name, value);
57 template<
typename Scalar>
58 void MlPrecond<Scalar>::set_param(
const char *name,
int value)
60 mlist.set(name, value);
63 template<
typename Scalar>
64 void MlPrecond<Scalar>::set_param(
const char *name,
double value)
66 mlist.set(name, value);
69 template<
typename Scalar>
70 void MlPrecond<Scalar>::create(Matrix<Scalar> *m)
72 EpetraMatrix<Scalar> *mt =
static_cast<EpetraMatrix<Scalar> *
>(m);
76 prec =
new ML_Epetra::MultiLevelPreconditioner(*mat->mat, mlist,
false);
79 template<
typename Scalar>
80 void MlPrecond<Scalar>::destroy()
83 prec->DestroyPreconditioner();
86 template<
typename Scalar>
87 void MlPrecond<Scalar>::compute()
90 prec->ComputePreconditioner();
93 template<
typename Scalar>
94 void MlPrecond<Scalar>::print_unused()
100 template<
typename Scalar>
101 int MlPrecond<Scalar>::ApplyInverse(
const Epetra_MultiVector &r, Epetra_MultiVector &z)
const
103 assert(prec != NULL);
104 return prec->ApplyInverse(r, z);
107 template<
typename Scalar>
108 const Epetra_Comm &MlPrecond<Scalar>::Comm()
const
110 return mat->mat->Comm();
113 template<
typename Scalar>
114 const Epetra_Map &MlPrecond<Scalar>::OperatorDomainMap()
const
116 return mat->mat->OperatorDomainMap();
119 template<
typename Scalar>
120 const Epetra_Map &MlPrecond<Scalar>::OperatorRangeMap()
const
122 return mat->mat->OperatorRangeMap();
124 template class HERMES_API MlPrecond<double>;
125 template class HERMES_API MlPrecond<std::complex<double> >;