Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef TSFMLOPERATOR_HPP
00030 #define TSFMLOPERATOR_HPP
00031
00032
00033 #include "TSFEpetraMatrix.hpp"
00034 #include "TSFOpWithBackwardsCompatibleApply.hpp"
00035
00036 #include "ml_MultiLevelPreconditioner.h"
00037 #include "EpetraTSFOperator.hpp"
00038
00039 namespace TSFExtended
00040 {
00041
00042
00043
00044 class MLOperator :
00045 public OpWithBackwardsCompatibleApply<double>
00046 {
00047 public:
00048
00049 MLOperator(
00050 const LinearOperator<double>& op,
00051 const ParameterList& mlParams);
00052
00053
00054 void apply(
00055 const Thyra::EConj conj,
00056 const Thyra::MultiVectorBase<double> &X,
00057 Thyra::MultiVectorBase<double> *Y,
00058 const double alpha,
00059 const double beta
00060 ) const
00061 {
00062 Ptr<Thyra::MultiVectorBase<double> > yp(Y);
00063 OpWithBackwardsCompatibleApply<double>::apply(applyConjToTrans(conj),X,
00064 yp, alpha,beta);
00065 }
00066
00067
00068
00069 void applyTranspose(
00070 const Thyra::EConj conj,
00071 const Thyra::MultiVectorBase<double> &X,
00072 Thyra::MultiVectorBase<double> *Y,
00073 const double alpha,
00074 const double beta
00075 ) const
00076 {
00077 Ptr<Thyra::MultiVectorBase<double> > yp(Y);
00078 OpWithBackwardsCompatibleApply<double>::apply(applyTransposeConjToTrans(conj),X,yp,alpha,beta);
00079 }
00080
00081
00082
00083
00084
00085 virtual void generalApply(const Thyra::EOpTransp M_trans,
00086 const Thyra::VectorBase<double> &x,
00087 Thyra::VectorBase<double> *y,
00088 const double alpha=1.0,
00089 const double beta=0.0) const ;
00090
00091
00092
00093 virtual RCP< const Thyra::VectorSpaceBase<double> > domain() const {return domain_;}
00094
00095
00096 virtual RCP< const Thyra::VectorSpaceBase<double> > range() const {return range_;}
00097
00098
00099 private:
00100 RCP<ML_Epetra::MultiLevelPreconditioner> mlPrec_;
00101
00102 RCP<const Thyra::VectorSpaceBase<double> > domain_;
00103
00104 RCP<const Thyra::VectorSpaceBase<double> > range_;
00105 };
00106 }
00107
00108 #endif