00001 /* @HEADER@ */ 00002 // 00003 /* @HEADER@ */ 00004 00005 #ifndef PLAYA_MLOPERATOR_HPP 00006 #define PLAYA_MLOPERATOR_HPP 00007 00008 00009 #include "PlayaEpetraMatrix.hpp" 00010 #include "PlayaLinearOpWithSpacesDecl.hpp" 00011 00012 #include "ml_MultiLevelPreconditioner.h" 00013 #include "EpetraPlayaOperator.hpp" 00014 00015 namespace Playa 00016 { 00017 /** 00018 * 00019 */ 00020 class MLOperator : 00021 public LinearOpWithSpaces<double> 00022 { 00023 public: 00024 /** */ 00025 MLOperator( 00026 const LinearOperator<double>& op, 00027 const ParameterList& mlParams); 00028 00029 /** 00030 * Apply the operator. 00031 * 00032 * \param applyType Indicates whether to apply the operator, its transpose, 00033 * or its conjugate transpose. 00034 * \param in The vector on which the operator is to act 00035 * \param out The vector into which the result of the operation 00036 * is to be written. This vector should already be initialized by the 00037 * appropriate space. 00038 **/ 00039 virtual void apply( 00040 Teuchos::ETransp applyType, 00041 const Vector<double>& in, 00042 Vector<double> out) const ; 00043 00044 00045 private: 00046 RCP<ML_Epetra::MultiLevelPreconditioner> mlPrec_; 00047 00048 }; 00049 } 00050 00051 #endif /* PlayaIFPACKOPERATOR_HPP */