Thyra Version of the Day
Thyra_DefaultBlockedTriangularLinearOpWithSolveFactory_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 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Roscoe A. Bartlett (bartlettra@ornl.gov) 
00038 // 
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 #ifndef THYRA_DEFAULT_BLOCKED_TRIANGULAR_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
00043 #define THYRA_DEFAULT_BLOCKED_TRIANGULAR_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
00044 
00045 
00046 #include "Thyra_LinearOpWithSolveBase.hpp"
00047 #include "Thyra_DefaultBlockedLinearOp.hpp"
00048 #include "Thyra_LinearOpSourceBase.hpp"
00049 
00050 
00051 namespace Thyra {
00052 
00053 
00092 template<class Scalar>
00093 class DefaultBlockedTriangularLinearOpWithSolveFactory
00094   : virtual public LinearOpWithSolveFactoryBase<Scalar>
00095 {
00096 public:
00097 
00100   
00111   DefaultBlockedTriangularLinearOpWithSolveFactory(
00112     const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf
00113     );
00114 
00115   
00126   DefaultBlockedTriangularLinearOpWithSolveFactory(
00127     const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf
00128     );
00129 
00130   // 2007/10/02: rabartl: Add versions of constructor that accept an array of
00131   // LOWSFB objects when needed.  This will be needed for multi-physics
00132   // problems for instance!
00133 
00135   RCP<LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF();
00136 
00138   RCP<const LinearOpWithSolveFactoryBase<Scalar> > getUnderlyingLOWSF() const;
00139 
00141 
00144 
00146   std::string description() const;
00147 
00149 
00152 
00154   void setParameterList(RCP<ParameterList> const& paramList);
00156   RCP<ParameterList> getNonconstParameterList();
00158   RCP<ParameterList> unsetParameterList();
00160   RCP<const ParameterList> getParameterList() const;
00162   RCP<const ParameterList> getValidParameters() const;
00163 
00165 
00168   
00170   virtual bool acceptsPreconditionerFactory() const;
00171 
00173   virtual void setPreconditionerFactory(
00174     const RCP<PreconditionerFactoryBase<Scalar> > &precFactory,
00175     const std::string &precFactoryName
00176     );
00177 
00179   virtual RCP<PreconditionerFactoryBase<Scalar> >
00180   getPreconditionerFactory() const;
00181 
00183   virtual void unsetPreconditionerFactory(
00184     RCP<PreconditionerFactoryBase<Scalar> > *precFactory,
00185     std::string *precFactoryName
00186     );
00187 
00189   virtual bool isCompatible(
00190     const LinearOpSourceBase<Scalar> &fwdOpSrc
00191     ) const;
00192 
00194   virtual RCP<LinearOpWithSolveBase<Scalar> > createOp() const;
00195 
00197   virtual void initializeOp(
00198     const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00199     LinearOpWithSolveBase<Scalar> *Op,
00200     const ESupportSolveUse supportSolveUse
00201     ) const;
00202 
00204   virtual void initializeAndReuseOp(
00205     const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00206     LinearOpWithSolveBase<Scalar> *Op
00207     ) const;
00208 
00210   virtual void uninitializeOp(
00211     LinearOpWithSolveBase<Scalar> *Op,
00212     RCP<const LinearOpSourceBase<Scalar> > *fwdOpSrc,
00213     RCP<const PreconditionerBase<Scalar> > *prec,
00214     RCP<const LinearOpSourceBase<Scalar> > *approxFwdOpSrc,
00215     ESupportSolveUse *supportSolveUse
00216     ) const;
00217  
00219   virtual bool supportsPreconditionerInputType(
00220     const EPreconditionerInputType precOpType
00221     ) const;
00222 
00224   virtual void initializePreconditionedOp(
00225     const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00226     const RCP<const PreconditionerBase<Scalar> > &prec,
00227     LinearOpWithSolveBase<Scalar> *Op,
00228     const ESupportSolveUse supportSolveUse
00229     ) const;
00230 
00232   virtual void initializeApproxPreconditionedOp(
00233     const RCP<const LinearOpSourceBase<Scalar> > &fwdOpSrc,
00234     const RCP<const LinearOpSourceBase<Scalar> > &approxFwdOpSrc,
00235     LinearOpWithSolveBase<Scalar> *Op,
00236     const ESupportSolveUse supportSolveUse
00237     ) const;
00238 
00240 
00241 protected:
00242 
00245 
00247   void informUpdatedVerbosityState() const;
00248 
00250 
00251 private:
00252 
00253   typedef Teuchos::ConstNonconstObjectContainer<LinearOpWithSolveFactoryBase<Scalar> > LOWSF_t;
00254   
00255   LOWSF_t lowsf_;
00256 
00257   // Not defined and not to be called
00258   DefaultBlockedTriangularLinearOpWithSolveFactory();
00259 
00260 };
00261 
00262 
00267 template<class Scalar>
00268 RCP<DefaultBlockedTriangularLinearOpWithSolveFactory<Scalar> >
00269 defaultBlockedTriangularLinearOpWithSolveFactory(
00270   const RCP<LinearOpWithSolveFactoryBase<Scalar> > &lowsf
00271   )
00272 {
00273   return Teuchos::rcp(
00274     new DefaultBlockedTriangularLinearOpWithSolveFactory<Scalar>(lowsf)
00275     );
00276 }
00277 
00278 
00283 template<class Scalar>
00284 RCP<DefaultBlockedTriangularLinearOpWithSolveFactory<Scalar> >
00285 defaultBlockedTriangularLinearOpWithSolveFactory(
00286   const RCP<const LinearOpWithSolveFactoryBase<Scalar> > &lowsf
00287   )
00288 {
00289   return Teuchos::rcp(
00290     new DefaultBlockedTriangularLinearOpWithSolveFactory<Scalar>(lowsf)
00291     );
00292 }
00293 
00294 
00295 } // namespace Thyra
00296 
00297 
00298 #endif // THYRA_DEFAULT_BLOCKED_TRIANGULAR_LINEAR_OP_WITH_SOLVE_FACTORY_DECL_HPP
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines