• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

Meros_LSCOperatorSource.h

Go to the documentation of this file.
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 //              Meros: Segregated Preconditioning Package
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 MEROS_LSC_OPERATOR_SOURCE_H
00030 #define MEROS_LSC_OPERATOR_SOURCE_H
00031 
00032 #include "Thyra_LinearOpSourceBase.hpp"
00033 #include "Thyra_VectorImpl.hpp" 
00034 #include "Thyra_VectorSpaceImpl.hpp" 
00035 #include "Thyra_LinearOperatorDecl.hpp"
00036 #include "Epetra_RowMatrix.h"
00037 #include "Teuchos_RCP.hpp"
00038 
00039 
00040 namespace Meros 
00041 {
00042 
00043   using namespace Thyra;
00044   
00049   //template <class double, class double = double>
00050   class LSCOperatorSource : virtual public LinearOpSourceBase<double>
00051     {
00052     public:
00053 
00056 
00059       LSCOperatorSource();
00060 
00061 
00064       LSCOperatorSource(ConstLinearOperator<double> op);
00065 
00068       LSCOperatorSource(ConstLinearOperator<double> op,
00069       ConstLinearOperator<double> Qu);
00070 
00073       LSCOperatorSource(Epetra_RowMatrix* S00,
00074       Epetra_RowMatrix* S01,
00075       Epetra_RowMatrix* S10,
00076       Epetra_RowMatrix* S11);
00077 
00078 
00081       LSCOperatorSource(Epetra_RowMatrix* S00,
00082       Epetra_RowMatrix* S01,
00083       Epetra_RowMatrix* S10,
00084       Epetra_RowMatrix* S11,
00085       Epetra_RowMatrix* Qu);
00086 
00087 
00088 
00089 /*       /\** \brief Initialize with saddle LinearOperator */
00090 /*        *\/ */
00091 /*       void initialize(ConstLinearOperator<double> op); */
00092 
00093 
00096       void initialize(ConstLinearOperator<double> op,
00097           ConstLinearOperator<double> Qu);
00098 
00099 
00106       void uninitialize();
00107       
00108       
00110       bool isOpConst() const;
00111 
00113       RCP<const LinearOpBase<double> > getOp() const;
00114 
00116       RCP<LinearOpBase<double> > getNonconstOp() ;
00117 
00119       ConstLinearOperator<double> getSaddleOp() const;
00120 
00122       ConstLinearOperator<double> getQu() const;
00123 
00124 
00125   
00126     private:
00127       
00128       Teuchos::ConstNonconstObjectContainer<LinearOpBase<double> >  op_;
00129       Teuchos::ConstNonconstObjectContainer<LinearOpBase<double> >  Qu_;
00130 
00131     };
00132 
00133 
00134 } // namespace Meros
00135 
00136 #endif // MEROS_LSC_OPERATOR_SOURCE_H