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
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef LOCA_EPETRA_COMPACTWYOP_H
00043 #define LOCA_EPETRA_COMPACTWYOP_H
00044
00045 #include "Teuchos_RCP.hpp"
00046 #include "Teuchos_BLAS.hpp"
00047
00048 #include "Epetra_Operator.h"
00049 #include "Epetra_LocalMap.h"
00050 #include "Epetra_MultiVector.h"
00051 #include "NOX_Common.H"
00052 #include "NOX_Abstract_MultiVector.H"
00053
00054
00055 namespace LOCA {
00056 class GlobalData;
00057 }
00058
00059 namespace LOCA {
00060
00061 namespace Epetra {
00062
00073 class CompactWYOp : public Epetra_Operator {
00074
00075 public:
00076
00078
00089 CompactWYOp(
00090 const Teuchos::RCP<LOCA::GlobalData>& global_data,
00091 const Teuchos::RCP<const Epetra_Operator>& jacOperator,
00092 const Teuchos::RCP<const Epetra_MultiVector>& A_multiVec,
00093 const Teuchos::RCP<const Epetra_MultiVector>& Y_x_multiVec,
00094 const Teuchos::RCP<const NOX::Abstract::MultiVector::DenseMatrix>& Y_p_matrix,
00095 const Teuchos::RCP<const NOX::Abstract::MultiVector::DenseMatrix>& T_matrix);
00096
00098 virtual ~CompactWYOp();
00099
00101
00104 virtual int SetUseTranspose(bool UseTranspose);
00105
00110 virtual int Apply(const Epetra_MultiVector& Input,
00111 Epetra_MultiVector& Result) const;
00112
00116 virtual int ApplyInverse(const Epetra_MultiVector& X,
00117 Epetra_MultiVector& Y) const;
00118
00120
00125 virtual double NormInf() const;
00126
00128 virtual const char* Label () const;
00129
00131 virtual bool UseTranspose() const;
00132
00137 virtual bool HasNormInf() const;
00138
00143 virtual const Epetra_Comm & Comm() const;
00144
00149 virtual const Epetra_Map& OperatorDomainMap () const;
00150
00155 virtual const Epetra_Map& OperatorRangeMap () const;
00156
00162 void init(const Epetra_MultiVector& x);
00163
00168 void finish();
00169
00174 void applyCompactWY(const Epetra_MultiVector& x,
00175 Epetra_MultiVector& result_x,
00176 Epetra_MultiVector& result_p) const;
00177
00178 private:
00179
00181 CompactWYOp(const CompactWYOp&);
00182
00184 CompactWYOp& operator=(const CompactWYOp&);
00185
00186 protected:
00187
00189 Teuchos::RCP<LOCA::GlobalData> globalData;
00190
00192 string label;
00193
00195 Epetra_LocalMap localMap;
00196
00198 Teuchos::RCP<const Epetra_Operator> J;
00199
00201 Teuchos::RCP<const Epetra_MultiVector> A;
00202
00204 Teuchos::RCP<const Epetra_MultiVector> Y_x;
00205
00207 Epetra_MultiVector Y_p;
00208
00210 Epetra_MultiVector T;
00211
00213 Epetra_MultiVector* tmpMat1;
00214
00216 Epetra_MultiVector* tmpMV;
00217
00219 Teuchos::BLAS<int,double> dblas;
00220
00221 };
00222 }
00223 }
00224
00225 #endif