00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef MEROS_PCD_OPERATOR_SOURCE_H
00030 #define MEROS_PCD_OPERATOR_SOURCE_H
00031
00032 #include "Thyra_LinearOpSourceBase.hpp"
00033 #include "Teuchos_ConstNonconstObjectContainer.hpp"
00034 #include "Thyra_VectorImpl.hpp"
00035 #include "Thyra_VectorSpaceImpl.hpp"
00036 #include "Thyra_LinearOperatorDecl.hpp"
00037 #include "Epetra_RowMatrix.h"
00038 #include "Teuchos_RCP.hpp"
00039
00040
00041 namespace Meros
00042 {
00043
00044 using namespace Thyra;
00045
00050
00051 class PCDOperatorSource : virtual public LinearOpSourceBase<double>
00052 {
00053 public:
00054
00057
00060 PCDOperatorSource();
00061
00062
00065 PCDOperatorSource(ConstLinearOperator<double> op,
00066 ConstLinearOperator<double> Fp,
00067 ConstLinearOperator<double> Ap);
00068
00071 PCDOperatorSource(ConstLinearOperator<double> op,
00072 ConstLinearOperator<double> Fp,
00073 ConstLinearOperator<double> Ap,
00074 ConstLinearOperator<double> Qp);
00075
00079 PCDOperatorSource(Epetra_RowMatrix* S00,
00080 Epetra_RowMatrix* S01,
00081 Epetra_RowMatrix* S10,
00082 Epetra_RowMatrix* S11,
00083 Epetra_RowMatrix* Fp,
00084 Epetra_RowMatrix* Ap);
00085
00086
00090 PCDOperatorSource(Epetra_RowMatrix* S00,
00091 Epetra_RowMatrix* S01,
00092 Epetra_RowMatrix* S10,
00093 Epetra_RowMatrix* S11,
00094 Epetra_RowMatrix* Fp,
00095 Epetra_RowMatrix* Ap,
00096 Epetra_RowMatrix* Qp);
00097
00098
00099
00100
00101
00102
00103
00104
00105
00108 void initialize(ConstLinearOperator<double> op,
00109 ConstLinearOperator<double> Fp,
00110 ConstLinearOperator<double> Ap,
00111 ConstLinearOperator<double> Qp);
00112
00113
00120 void uninitialize();
00121
00122
00124 bool isOpConst() const;
00125
00127 RCP<const LinearOpBase<double> > getOp() const;
00128
00130 RCP<LinearOpBase<double> > getNonconstOp() ;
00131
00133 ConstLinearOperator<double> getSaddleOp() const;
00134
00136 ConstLinearOperator<double> getFp() const;
00137
00139 ConstLinearOperator<double> getAp() const;
00140
00142 ConstLinearOperator<double> getQp() const;
00143
00144
00145 private:
00146
00147 Teuchos::ConstNonconstObjectContainer<LinearOpBase<double> > op_;
00148 Teuchos::ConstNonconstObjectContainer<LinearOpBase<double> > Fp_;
00149 Teuchos::ConstNonconstObjectContainer<LinearOpBase<double> > Ap_;
00150 Teuchos::ConstNonconstObjectContainer<LinearOpBase<double> > Qp_;
00151
00152 };
00153
00154
00155 }
00156
00157 #endif // MEROS_PCD_OPERATOR_SOURCE_H