Thyra Version of the Day
Thyra_DelayedLinearOpWithSolveFactory_decl.hpp
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 //    Thyra: Interfaces and Support for Abstract Numerical Algorithms
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 THYRA_DELAYED_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
00030 #define THYRA_DELAYED_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
00031 
00032 
00033 #include "Thyra_LinearOpWithSolveFactoryBase.hpp"
00034 #include "Thyra_LinearOpSourceBase.hpp"
00035 
00036 
00037 namespace Thyra {
00038 
00039 
00048 template<class Scalar>
00049 class DelayedLinearOpWithSolveFactory
00050   : virtual public LinearOpWithSolveFactoryBase<Scalar>
00051 {
00052 public:
00053 
00056   
00058   DelayedLinearOpWithSolveFactory(
00059     const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf
00060     );
00061 
00063   RCP<LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF();
00064 
00066   RCP<const LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF() const;
00067 
00069 
00072 
00074   std::string description() const;
00075 
00077 
00080 
00082   void setParameterList(RCP<ParameterList> const& paramList);
00084   RCP<ParameterList> getNonconstParameterList();
00086   RCP<ParameterList> unsetParameterList();
00088   RCP<const ParameterList> getParameterList() const;
00090   RCP<const ParameterList> getValidParameters() const;
00091 
00093 
00096   
00098   virtual bool acceptsPreconditionerFactory() const;
00099 
00101   virtual void setPreconditionerFactory(
00102     const RCP<PreconditionerFactoryBase<Scalar> > &precFactory,
00103     const std::string &precFactoryName
00104     );
00105 
00107   virtual RCP<PreconditionerFactoryBase<Scalar> >
00108   getPreconditionerFactory() const;
00109 
00111   virtual void unsetPreconditionerFactory(
00112     RCP<PreconditionerFactoryBase<Scalar> > *precFactory,
00113     std::string *precFactoryName
00114     );
00115 
00117   virtual bool isCompatible(
00118     const LinearOpSourceBase<Scalar> &fwdOpSrc
00119     ) const;
00120 
00122   virtual RCP<LinearOpWithSolveBase<Scalar> > createOp() const;
00123 
00125   virtual void initializeOp(
00126     const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00127     LinearOpWithSolveBase<Scalar> *Op,
00128     const ESupportSolveUse supportSolveUse
00129     ) const;
00130 
00132   virtual void initializeAndReuseOp(
00133     const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00134     LinearOpWithSolveBase<Scalar> *Op
00135     ) const;
00136 
00138   virtual void uninitializeOp(
00139     LinearOpWithSolveBase<Scalar> *Op,
00140     RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
00141     RCP<const PreconditionerBase<Scalar> > *prec,
00142     RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
00143     ESupportSolveUse *supportSolveUse
00144     ) const;
00145  
00147   virtual bool supportsPreconditionerInputType(
00148     const EPreconditionerInputType precOpType
00149     ) const;
00150 
00152   virtual void initializePreconditionedOp(
00153     const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00154     const RCP<const PreconditionerBase<Scalar> > &prec,
00155     LinearOpWithSolveBase<Scalar> *Op,
00156     const ESupportSolveUse supportSolveUse
00157     ) const;
00158 
00160   virtual void initializeApproxPreconditionedOp(
00161     const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00162     const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
00163     LinearOpWithSolveBase<Scalar> *Op,
00164     const ESupportSolveUse supportSolveUse
00165     ) const;
00166 
00168 
00169 protected:
00170 
00173 
00175   void informUpdatedVerbosityState() const;
00176 
00178 
00179 private:
00180 
00181   RCP<LinearOpWithSolveFactoryBase<Scalar> > lowsf_;
00182 
00183   // Not defined and not to be called
00184   DelayedLinearOpWithSolveFactory();
00185 
00186 };
00187 
00188 
00189 } // namespace Thyra
00190 
00191 
00192 #endif // THYRA_DELAYED_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines