TSFMLOperator.hpp
Go to the documentation of this file.
00001 /* @HEADER@ */
00002 /* ***********************************************************************
00003 // 
00004 //           TSFExtended: Trilinos Solver Framework Extended
00005 //                 Copyright (2004) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // This library is free software; you can redistribute it and/or modify
00011 // it under the terms of the GNU Lesser General Public License as
00012 // published by the Free Software Foundation; either version 2.1 of the
00013 // License, or (at your option) any later version.
00014 //  
00015 // This library is distributed in the hope that it will be useful, but
00016 // WITHOUT ANY WARRANTY; without even the implied warranty of
00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00018 // Lesser General Public License for more details.
00019 //  
00020 // You should have received a copy of the GNU Lesser General Public
00021 // License along with this library; if not, write to the Free Software
00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00023 // USA
00024 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 
00025 // 
00026 // **********************************************************************/
00027  /* @HEADER@ */
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    /** Thyra apply method */
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   /** Thyra apply transpose method */
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    * Apply operator to a vector in the domain space and return a vector
00083    * in the range space.
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   /** Return the domain of the operator */
00093   virtual RCP< const Thyra::VectorSpaceBase<double> > domain() const {return domain_;}
00094 
00095   /** Return the range of the operator */
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 /* TSFIFPACKOPERATOR_HPP */

Site Contact