00001 #ifndef EPETRAEXT_MULTIPOINTMODELEVALUATOR_H 00002 #define EPETRAEXT_MULTIPOINTMODELEVALUATOR_H 00003 00004 #include "EpetraExt_ModelEvaluator.h" 00005 #include "EpetraExt_BlockCrsMatrix.h" 00006 #include "EpetraExt_BlockVector.h" 00007 #include "EpetraExt_BlockMultiVector.h" 00008 #include "EpetraExt_MultiMpiComm.h" 00009 00019 namespace EpetraExt { 00020 class MultiPointModelEvaluator 00021 : public ModelEvaluator 00022 { 00023 public: 00024 00027 00029 MultiPointModelEvaluator( 00030 Teuchos::RefCountPtr<EpetraExt::ModelEvaluator> underlyingME_, 00031 const Teuchos::RefCountPtr<EpetraExt::MultiMpiComm> &globalComm_, 00032 const std::vector<Epetra_Vector*> initGuessVec, 00033 Teuchos::RefCountPtr<std::vector< Teuchos::RefCountPtr<Epetra_Vector> > > q_vec, 00034 Teuchos::RefCountPtr<std::vector< Teuchos::RefCountPtr<Epetra_Vector> > > matching_vec = Teuchos::null 00035 ); 00036 00038 00039 ~MultiPointModelEvaluator(); 00040 00041 00044 00046 Teuchos::RefCountPtr<const Epetra_Map> get_x_map() const; 00048 Teuchos::RefCountPtr<const Epetra_Map> get_f_map() const; 00050 Teuchos::RefCountPtr<const Epetra_Map> get_p_map(int l) const; 00052 Teuchos::RefCountPtr<const Epetra_Map> get_g_map(int j) const; 00054 Teuchos::RefCountPtr<const Epetra_Vector> get_x_init() const; 00056 Teuchos::RefCountPtr<const Epetra_Vector> get_p_init(int l) const; 00058 Teuchos::RefCountPtr<Epetra_Operator> create_W() const; 00060 InArgs createInArgs() const; 00062 OutArgs createOutArgs() const; 00064 void evalModel( const InArgs& inArgs, const OutArgs& outArgs ) const; 00065 00067 00068 private: 00069 00070 Teuchos::RefCountPtr<EpetraExt::ModelEvaluator> underlyingME; 00071 00073 Teuchos::RefCountPtr<EpetraExt::MultiMpiComm> globalComm; 00074 00076 Teuchos::RefCountPtr<std::vector< Teuchos::RefCountPtr<Epetra_Vector> > > q_vec; 00077 00079 Teuchos::RefCountPtr<Epetra_RowMatrix> split_W; 00080 00082 Teuchos::RefCountPtr<Epetra_Vector> split_x; 00083 00085 Teuchos::RefCountPtr<Epetra_Vector> split_f; 00086 00088 Teuchos::RefCountPtr<Epetra_Vector> split_g; 00089 00091 Teuchos::RefCountPtr<Epetra_MultiVector> split_DfDp; 00092 00094 Teuchos::RefCountPtr<Epetra_MultiVector> split_DgDx; 00095 Teuchos::RefCountPtr<Epetra_MultiVector> split_DgDp; 00096 00097 EpetraExt::ModelEvaluator::DerivativeMultiVector* derivMV_DfDp; 00098 EpetraExt::ModelEvaluator::Derivative* deriv_DfDp; 00099 EpetraExt::ModelEvaluator::DerivativeMultiVector* derivMV_DgDx; 00100 EpetraExt::ModelEvaluator::Derivative* deriv_DgDx; 00101 EpetraExt::ModelEvaluator::DerivativeMultiVector* derivMV_DgDp; 00102 EpetraExt::ModelEvaluator::Derivative* deriv_DgDp; 00103 00105 Teuchos::RefCountPtr<EpetraExt::BlockCrsMatrix> block_W; 00106 00108 EpetraExt::BlockVector* block_x; 00109 00111 EpetraExt::BlockVector* block_f; 00112 00114 EpetraExt::BlockMultiVector* block_DfDp; 00115 00117 EpetraExt::BlockMultiVector* block_DgDx; 00118 00120 Teuchos::RefCountPtr<EpetraExt::BlockVector> solution_init; 00121 00123 int underlyingNg; 00124 00126 int timeStepsOnTimeDomain; 00127 00129 int numTimeDomains; 00130 00132 int timeDomain; 00133 00140 std::vector< std::vector<int> >* rowStencil; 00141 00143 std::vector<int>* rowIndex; 00144 00146 EDerivativeMultiVectorOrientation orientation_DgDp; 00147 int num_dg0dp0; 00148 int num_g0; 00149 int num_p0; 00150 00152 Teuchos::RefCountPtr<std::vector< Teuchos::RefCountPtr<Epetra_Vector> > > matching_vec; 00153 bool matchingProblem; 00154 00155 }; 00156 } 00157 #endif
1.4.7