// non-constant value, as this
// is the way Trilinos wants
// to have them.
- template <typename number>
inline
- void PreconditionBase::vmult (dealii::Vector<number> &dst,
- const dealii::Vector<number> &src) const
+ void PreconditionBase::vmult (dealii::Vector<double> &dst,
+ const dealii::Vector<double> &src) const
{
-
Epetra_Vector LHS (View, preconditioner->OperatorDomainMap(),
dst.begin());
Epetra_Vector RHS (View, preconditioner->OperatorRangeMap(),
// create a suitable operator B: in case
// we do not use a vector, all we need to
// do is to set the pointer. Otherwise,
- // we insert insert the data from B, but
+ // we insert the data from B, but
// multiply each row with the respective
// vector element.
Teuchos::RCP<Epetra_CrsMatrix> mod_B;
// use ML built-in method for performing
// the matrix-matrix product.
// create ML operators on top of the
- // Epetra matrix.
+ // Epetra matrices. if we use a
+ // transposed matrix, let ML know it
ML_Comm* comm;
ML_Comm_Create(&comm);
ML_Operator *A_ = ML_Operator_Create(comm);
ML_Operator_WrapEpetraCrsMatrix(&*mod_B,B_,false);
- // We do the multiplication by hand since
- // we can save some operations compared
- // to just calling
- // ml/src/Operator/ml_rap.c that
- // multiplies three matrices. This code
- // is still similar to the one found in
- // ml/src/Operator/ml_rap.c
+ // We implement the multiplication by
+ // hand in a similar way as is done in
+ // ml/src/Operator/ml_rap.c for a triple
+ // matrix product. This means that the
+ // code is very similar to the one found
+ // in ml/src/Operator/ml_rap.c
// import data if necessary
ML_Operator *Btmp, *Ctmp, *Ctmp2, *tptr;