43 #ifndef PANZER_STK_MODEL_EVALUATOR_FACTORY_HPP
44 #define PANZER_STK_MODEL_EVALUATOR_FACTORY_HPP
50 #include "Teuchos_RCP.hpp"
51 #include "Teuchos_Ptr.hpp"
52 #include "Teuchos_Comm.hpp"
53 #include "Teuchos_DefaultMpiComm.hpp"
54 #include "Teuchos_ParameterList.hpp"
55 #include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
57 #include "PanzerAdaptersSTK_config.hpp"
71 #include "Thyra_EpetraModelEvaluator.hpp"
73 #ifdef PANZER_HAVE_TEKO
74 #include "Teko_RequestHandler.hpp"
82 template<
typename ScalarT>
class ModelEvaluator;
83 template<
typename ScalarT>
class LinearOpWithSolveFactoryBase;
88 class UniqueGlobalIndexerBase;
89 template <
typename>
class LinearObjFactory;
91 template <
typename,
typename>
class BlockedDOFManager;
92 template <
typename,
typename>
class DOFManager;
93 template <
typename>
class ConnManagerBase;
98 template <
typename GO>
class STKConnManager;
99 class NOXObserverFactory;
100 class RythmosObserverFactory;
101 class WorksetFactory;
103 template<
typename ScalarT>
110 void setParameterList(Teuchos::RCP<Teuchos::ParameterList>
const& paramList);
122 void buildObjects(
const Teuchos::RCP<
const Teuchos::Comm<int> >& comm,
123 const Teuchos::RCP<panzer::GlobalData>& global_data,
124 const Teuchos::RCP<const panzer::EquationSetFactory>& eqset_factory,
127 bool meConstructionOn=
true);
134 void setNOXObserverFactory(
const Teuchos::RCP<const panzer_stk::NOXObserverFactory>& nox_observer_factory);
138 template <
typename BuilderT>
139 int addResponse(
const std::string & responseName,
const std::vector<panzer::WorksetDescriptor> & wkstDesc,
const BuilderT & builder);
142 const bool write_graphviz_file=
false,
143 const std::string& graphviz_file_prefix=
"");
147 Teuchos::RCP<Thyra::ModelEvaluator<ScalarT> >
149 const Teuchos::RCP<panzer::GlobalData>& global_data,
151 const Teuchos::Ptr<const panzer_stk::NOXObserverFactory> & in_nox_observer_factory=Teuchos::null,
152 const Teuchos::Ptr<const panzer_stk::RythmosObserverFactory> & in_rythmos_observer_factory=Teuchos::null);
161 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> > &
getPhysicsBlocks()
const;
164 Teuchos::RCP<panzer_stk::STK_Interface>
getMesh()
const
189 Teuchos::RCP<Thyra::ModelEvaluator<double> >
191 const Teuchos::RCP<Teuchos::ParameterList> & physics_block_plist,
192 const Teuchos::RCP<const panzer::EquationSetFactory>& eqset_factory,
195 bool is_transient,
bool is_explicit,
196 const Teuchos::Ptr<const Teuchos::ParameterList> & bc_list=Teuchos::null,
204 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
207 const Teuchos::ParameterList & closure_pl,
208 const Teuchos::ParameterList & initial_cond_pl,
209 const Teuchos::ParameterList & user_data_pl,
210 bool write_dot_files,
const std::string & dot_file_prefix)
const;
216 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
217 const Teuchos::RCP<panzer::WorksetContainer> & wc,
218 const Teuchos::RCP<const panzer::UniqueGlobalIndexerBase> & ugi,
220 const Teuchos::RCP<panzer_stk::STK_Interface> & mesh,
222 const Teuchos::ParameterList & closure_model_pl,
223 const Teuchos::ParameterList & user_data_pl,
224 int workset_size)
const;
228 Teuchos::RCP<Thyra::ModelEvaluatorDefaultBase<double> >
230 const Teuchos::RCP<panzer::FieldManagerBuilder> & fmb,
233 const std::vector<Teuchos::RCP<Teuchos::Array<std::string> > > & p_names,
234 const std::vector<Teuchos::RCP<Teuchos::Array<double> > > & p_values,
236 const Teuchos::RCP<panzer::GlobalData> & global_data,
237 bool is_transient,
double t_init)
const;
248 double getInitialTime(Teuchos::ParameterList& transient_ic_params,
251 Teuchos::RCP<Thyra::LinearOpWithSolveFactoryBase<double> >
253 const Teuchos::RCP<const panzer::UniqueGlobalIndexerBase> & globalIndexer,
255 const Teuchos::RCP<panzer_stk::STK_Interface> & mesh,
257 #ifdef PANZER_HAVE_TEKO
258 ,
const Teuchos::RCP<Teko::RequestHandler> & req_handler=Teuchos::null
270 Teuchos::RCP<STK_MeshFactory>
buildSTKMeshFactory(
const Teuchos::ParameterList & mesh_params)
const;
273 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> > & physicsBlocks,
279 Teuchos::RCP<panzer::FieldManagerBuilder>
281 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> >& physicsBlocks,
282 const std::vector<panzer::BC> & bcs,
287 const Teuchos::ParameterList& closure_models,
289 const Teuchos::ParameterList& user_data,
290 bool writeGraph,
const std::string & graphPrefix,
291 bool write_field_managers,
const std::string & field_manager_prefix)
const;
296 const Teuchos::RCP<panzer::WorksetContainer> & wc,
297 const Teuchos::RCP<const panzer::UniqueGlobalIndexerBase> & ugi,
299 const Teuchos::RCP<panzer_stk::STK_Interface> & mesh)
const;
304 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> > & physicsBlocks,
306 const Teuchos::ParameterList & closure_models,
307 int workset_size, Teuchos::ParameterList & user_data)
const;
313 Teuchos::RCP<Thyra::ModelEvaluator<ScalarT> >
m_rome_me;
318 Teuchos::RCP<panzer_stk::STK_Interface>
m_mesh;
336 template<
typename ScalarT>
337 template <
typename BuilderT>
339 addResponse(
const std::string & responseName,
const std::vector<panzer::WorksetDescriptor> & wkstDesc,
const BuilderT & builder)
343 Teuchos::RCP<Thyra::EpetraModelEvaluator> thyra_ep_me = Teuchos::rcp_dynamic_cast<Thyra::EpetraModelEvaluator>(m_physics_me);
344 Teuchos::RCP<PanzerME> panzer_me = Teuchos::rcp_dynamic_cast<PanzerME>(m_physics_me);
346 if(thyra_ep_me!=Teuchos::null && panzer_me==Teuchos::null) {
348 Teuchos::RCP<EpetraExt::ModelEvaluator> ep_me = Teuchos::rcp_const_cast<EpetraExt::ModelEvaluator>(thyra_ep_me->getEpetraModel());
349 Teuchos::RCP<panzer::ModelEvaluator_Epetra> ep_panzer_me = Teuchos::rcp_dynamic_cast<panzer::ModelEvaluator_Epetra>(ep_me);
351 return ep_panzer_me->addResponse(responseName,wkstDesc,builder);
353 else if(panzer_me!=Teuchos::null && thyra_ep_me==Teuchos::null) {
354 return panzer_me->addResponse(responseName,wkstDesc,builder);
357 TEUCHOS_ASSERT(
false);