43 #ifndef PANZER_MODEL_EVALUATOR_EPETRA_HPP
44 #define PANZER_MODEL_EVALUATOR_EPETRA_HPP
48 #include "Epetra_Map.h"
49 #include "Epetra_Vector.h"
50 #include "Epetra_Comm.h"
51 #include "Epetra_CrsGraph.h"
53 #include "Teuchos_RCP.hpp"
54 #include "Teuchos_AbstractFactory.hpp"
63 #include "Thyra_VectorBase.hpp"
71 class FieldManagerBuilder;
80 const std::vector<Teuchos::RCP<Teuchos::Array<std::string> > >& p_names,
81 const std::vector<Teuchos::RCP<Teuchos::Array<double> > >& p_values,
82 const Teuchos::RCP<panzer::GlobalData>& global_data,
83 bool build_transient_support);
88 const std::vector<Teuchos::RCP<Teuchos::Array<std::string> > >& p_names,
89 const std::vector<Teuchos::RCP<Teuchos::Array<double> > >& p_values,
90 const Teuchos::RCP<panzer::GlobalData>& global_data,
91 bool build_transient_support);
96 Teuchos::RCP<const Epetra_Map>
get_x_map()
const;
97 Teuchos::RCP<const Epetra_Map>
get_f_map()
const;
98 Teuchos::RCP<const Epetra_Vector>
get_x_init()
const;
101 Teuchos::RCP<Epetra_Operator>
create_W()
const;
102 Teuchos::RCP<const Epetra_Map>
get_p_map(
int l)
const;
103 Teuchos::RCP<const Teuchos::Array<std::string> >
get_p_names(
int l)
const;
104 Teuchos::RCP<const Epetra_Vector>
get_p_init(
int l)
const;
105 Teuchos::RCP<const Epetra_Map>
get_g_map(
int l)
const;
151 const Teuchos::RCP<Epetra_Map>& global_map,
152 const Teuchos::RCP<Epetra_Import>& importer,
153 const Teuchos::RCP<Epetra_Vector>& ghosted_vector);
170 template <
typename ResponseEvaluatorFactory_BuilderT>
172 const std::vector<WorksetDescriptor> & wkst_desc,
173 const ResponseEvaluatorFactory_BuilderT & builder);
179 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
182 const Teuchos::ParameterList& closure_models,
183 const Teuchos::ParameterList& user_data,
184 const bool write_graphviz_file=
false,
185 const std::string& graphviz_file_prefix=
"")
186 {
responseLibrary_->buildResponseEvaluators(physicsBlocks,eqset_factory,cm_factory,closure_models,user_data,write_graphviz_file,graphviz_file_prefix); }
192 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
194 const Teuchos::ParameterList& closure_models,
195 const Teuchos::ParameterList& user_data,
196 const bool write_graphviz_file=
false,
197 const std::string& graphviz_file_prefix=
"")
198 {
responseLibrary_->buildResponseEvaluators(physicsBlocks,cm_factory,closure_models,user_data,write_graphviz_file,graphviz_file_prefix); }
230 const std::vector<Teuchos::RCP<Teuchos::Array<double> > >& p_values,
231 const Teuchos::RCP<panzer::ParamLib>& parameter_library);
237 void evalModel_basic(
const InArgs& inArgs,
const OutArgs& outArgs )
const;
279 Teuchos::RCP<Epetra_Vector>
x0_;
286 Teuchos::RCP<panzer::FieldManagerBuilder>
fmb_;
291 std::vector<Teuchos::RCP<const Epetra_Map> >
g_map_;
295 std::vector<Teuchos::RCP<Epetra_Map> >
p_map_;
296 std::vector<Teuchos::RCP<Epetra_Vector> >
p_init_;
298 std::vector<Teuchos::RCP<Teuchos::Array<std::string> > >
p_names_;
318 Teuchos::RCP<panzer::LinearObjFactory<panzer::Traits> >
lof_;
328 template <
typename ResponseEvaluatorFactory_BuilderT>
331 const std::vector<WorksetDescriptor> & wkst_desc,
332 const ResponseEvaluatorFactory_BuilderT & builder)
335 TEUCHOS_TEST_FOR_EXCEPTION(
responseLibrary_->responseEvaluatorsBuilt(),std::logic_error,
336 "panzer::ModelEvaluator_Epetra::addResponse: Response with name \"" << responseName <<
"\" "
337 "cannot be added to the model evaluator because evalModel has already been called!");
343 TEUCHOS_TEST_FOR_EXCEPTION(std::find(
g_names_.begin(),
g_names_.end(),responseName)!=
g_names_.end(),std::logic_error,
344 "panzer::ModelEvaluator_Epetra::addResponse: Response with name \"" << responseName <<
"\" "
345 "has already been added to the model evaluator!");
351 TEUCHOS_TEST_FOR_EXCEPTION(respBase==Teuchos::null,std::logic_error,
352 "panzer::ModelEvaluator_Epetra::addResponse: Response with name \"" << responseName <<
"\" "
353 "has no residual type! Not sure what is going on!");
356 Teuchos::RCP<panzer::ResponseMESupportBase<panzer::Traits::Residual> > resp = Teuchos::rcp_dynamic_cast<panzer::ResponseMESupportBase<panzer::Traits::Residual> >(respBase);
357 TEUCHOS_TEST_FOR_EXCEPTION(resp==Teuchos::null,std::logic_error,
358 "panzer::ModelEvaluator_Epetra::addResponse: Response with name \"" << responseName <<
"\" "
359 "resulted in bad cast to panzer::ResponseMESupportBase<Residual>, the type of the response is incompatible!");
362 Teuchos::RCP<const Epetra_Map> eMap = resp->getMap();
371 if(respJacBase!=Teuchos::null) {
375 Teuchos::RCP<panzer::ResponseMESupportBase<RespEvalT> > resp = Teuchos::rcp_dynamic_cast<panzer::ResponseMESupportBase<RespEvalT> >(respJacBase);
376 TEUCHOS_TEST_FOR_EXCEPTION(resp==Teuchos::null,std::logic_error,
377 "panzer::ModelEvaluator_Epetra::addResponse: Response with name \"" << responseName <<
"\" "
378 "resulted in bad cast to panzer::ResponseMESupportBase<Jacobian>, the type of the response is incompatible!");
381 if(resp->supportsDerivative())
382 resp->setDerivative(resp->buildEpetraDerivative());
385 #ifdef Panzer_BUILD_HESSIAN_SUPPORT
388 std::cout <<
"******************************************************" << std::endl;
389 std::cout <<
"EPETRA DOING IT " << respHesBase << std::endl;
390 std::cout <<
"******************************************************" << std::endl;
391 if(respHesBase!=Teuchos::null) {
395 Teuchos::RCP<panzer::ResponseMESupportBase<RespEvalT> > resp = Teuchos::rcp_dynamic_cast<panzer::ResponseMESupportBase<RespEvalT> >(respHesBase);
396 TEUCHOS_TEST_FOR_EXCEPTION(resp==Teuchos::null,std::logic_error,
397 "panzer::ModelEvaluator_Epetra::addResponse: Response with name \"" << responseName <<
"\" "
398 "resulted in bad cast to panzer::ResponseMESupportBase<Hessian>, the type of the response is incompatible!");
401 if(resp->supportsDerivative())
402 resp->setDerivative(resp->buildDerivative());
415 Teuchos::RCP<ModelEvaluator_Epetra>
419 const std::vector<Teuchos::RCP<Teuchos::Array<std::string> > >& p_names,
420 const std::vector<Teuchos::RCP<Teuchos::Array<double> > >& p_values,
421 const Teuchos::RCP<panzer::GlobalData>& global_data,
422 bool build_transient_support);