43 #ifndef PANZER_PHYSICS_BLOCK_HPP
44 #define PANZER_PHYSICS_BLOCK_HPP
50 #include "Teuchos_RCP.hpp"
51 #include "Phalanx_FieldManager.hpp"
71 class IntegrationRule;
72 struct EquationSetFactory;
84 const std::map<std::string,Teuchos::RCP<const shards::CellTopology> >& block_ids_to_cell_topo,
85 const Teuchos::RCP<Teuchos::ParameterList>& physics_blocks_plist,
86 const int default_integration_order,
87 const std::size_t workset_size,
88 const Teuchos::RCP<const panzer::EquationSetFactory>& eqset_factory,
89 const Teuchos::RCP<panzer::GlobalData>& global_data,
90 const bool build_transient_support,
91 std::vector<Teuchos::RCP<panzer::PhysicsBlock> > & physicsBlocks,
92 const std::vector<std::string>& tangent_param_names = std::vector<std::string>());
101 const Teuchos::RCP<Teuchos::ParameterList>& physics_blocks_plist,
102 std::vector<Teuchos::RCP<panzer::PhysicsBlock> > & physicsBlocks);
112 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> > & physics_blocks,
113 bool throw_on_failure =
true);
122 { std::cout <<
"WARNING: Default constructor for panzer::PhysicsBlock is for testing purposes only!" << std::endl; }
126 PhysicsBlock(
const Teuchos::RCP<Teuchos::ParameterList>& physics_block_plist,
127 const std::string & element_block_id,
128 const int default_integration_order,
130 const Teuchos::RCP<const panzer::EquationSetFactory>& factory,
131 const Teuchos::RCP<panzer::GlobalData>& global_data,
132 const bool build_transient_support,
133 const std::vector<std::string>& tangent_param_names = std::vector<std::string>());
140 PhysicsBlock(
const Teuchos::RCP<Teuchos::ParameterList>& physics_block_plist,
141 const std::string & element_block_id);
151 const std::string & physics_block_id,
152 const int integration_order,
154 const Teuchos::RCP<panzer::GlobalData>& global_data,
155 const Teuchos::RCP<panzer::PureBasis> & fields);
160 void initialize(
const int default_integration_order,
161 const bool build_transient_support,
163 const Teuchos::RCP<const panzer::EquationSetFactory>& factory,
164 const Teuchos::RCP<panzer::GlobalData>& global_data,
165 const std::vector<std::string>& tangent_param_names = std::vector<std::string>());
168 const Teuchos::ParameterList& user_data)
const;
172 const Teuchos::ParameterList& user_data)
const;
176 const Teuchos::ParameterList& user_data)
const;
180 const Teuchos::ParameterList& user_data)
const;
184 const Teuchos::ParameterList& models,
185 const Teuchos::ParameterList& user_data)
const;
189 const std::string& model_name,
190 const Teuchos::ParameterList& models,
192 const Teuchos::ParameterList& user_data)
const;
196 const std::string& model_name,
197 const Teuchos::ParameterList& models,
198 const Teuchos::ParameterList& user_data)
const;
200 template<
typename EvalT>
202 const Teuchos::ParameterList& user_data)
const;
204 template<
typename EvalT>
207 const Teuchos::ParameterList& user_data)
const;
209 template<
typename EvalT>
212 const Teuchos::ParameterList& user_data)
const;
214 template<
typename EvalT>
217 const Teuchos::ParameterList& user_data)
const;
219 template<
typename EvalT>
222 const Teuchos::ParameterList& models,
223 const Teuchos::ParameterList& user_data)
const;
225 template<
typename EvalT>
228 const std::string& model_name,
229 const Teuchos::ParameterList& models,
231 const Teuchos::ParameterList& user_data)
const;
233 const std::vector<std::string>&
getDOFNames()
const;
246 const std::map<std::string,Teuchos::RCP<panzer::PureBasis> >&
getBases()
const;
264 Teuchos::RCP<panzer::GlobalData>
globalData()
const;
277 void initialize(
const Teuchos::RCP<Teuchos::ParameterList>& input_parameters,
278 const int& default_integration_order,
279 const std::string & element_block_id,
281 const bool build_transient_support,
282 const std::vector<std::string>& tangent_param_names = std::vector<std::string>());
299 std::map<std::string,Teuchos::RCP<panzer::PureBasis> >
m_bases;
303 std::vector< Teuchos::RCP<panzer::EquationSet_TemplateManager<panzer::Traits> > >
m_equation_sets;
314 template<
typename EvalT>
316 const Teuchos::ParameterList& user_data)
const
323 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
335 template<
typename EvalT>
338 const Teuchos::ParameterList& user_data)
const
345 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
346 eq_set = m_equation_sets.begin();
347 for (;eq_set != m_equation_sets.end(); ++eq_set) {
351 const int di = eqstm.getAsObject<EvalT>()->setDetailsIndex(this->getDetailsIndex());
352 eqstm.getAsObject<EvalT>()->buildAndRegisterGatherAndOrientationEvaluators(fm,*m_field_lib,lof,user_data);
353 eqstm.getAsObject<EvalT>()->setDetailsIndex(di);
357 template<
typename EvalT>
360 const Teuchos::ParameterList& user_data)
const
367 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
368 eq_set = m_equation_sets.begin();
369 for (;eq_set != m_equation_sets.end(); ++eq_set) {
373 for (std::map<
int,Teuchos::RCP<panzer::IntegrationRule> >::const_iterator ir_iter = m_integration_rules.begin();
374 ir_iter != m_integration_rules.end(); ++ ir_iter) {
376 Teuchos::RCP<panzer::IntegrationRule> ir = ir_iter->second;
378 const int di = eqstm.getAsObject<EvalT>()->setDetailsIndex(this->getDetailsIndex());
379 eqstm.getAsObject<EvalT>()->buildAndRegisterDOFProjectionsToIPEvaluators(fm,*m_field_lib->buildFieldLayoutLibrary(*ir),ir,lof,user_data);
380 eqstm.getAsObject<EvalT>()->setDetailsIndex(di);
386 template<
typename EvalT>
389 const Teuchos::ParameterList& user_data)
const
396 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
397 eq_set = m_equation_sets.begin();
398 for (;eq_set != m_equation_sets.end(); ++eq_set) {
402 const int di = eqstm.getAsObject<EvalT>()->setDetailsIndex(this->getDetailsIndex());
403 eqstm.getAsObject<EvalT>()->buildAndRegisterScatterEvaluators(fm,*m_field_lib,lof,user_data);
404 eqstm.getAsObject<EvalT>()->setDetailsIndex(di);
408 template<
typename EvalT>
411 const Teuchos::ParameterList& models,
412 const Teuchos::ParameterList& user_data)
const
419 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
420 eq_set = m_equation_sets.begin();
421 for (;eq_set != m_equation_sets.end(); ++eq_set) {
426 for (std::map<
int,Teuchos::RCP<panzer::IntegrationRule> >::const_iterator ir_iter = m_integration_rules.begin();
427 ir_iter != m_integration_rules.end(); ++ ir_iter) {
429 Teuchos::RCP<panzer::IntegrationRule> ir = ir_iter->second;
431 const int di = eqstm.getAsObject<EvalT>()->setDetailsIndex(this->getDetailsIndex());
432 eqstm.getAsObject<EvalT>()->buildAndRegisterClosureModelEvaluators(fm,*m_field_lib->buildFieldLayoutLibrary(*ir),ir,factory,models,user_data);
433 eqstm.getAsObject<EvalT>()->setDetailsIndex(di);
439 template<
typename EvalT>
442 const std::string& model_name,
443 const Teuchos::ParameterList& models,
445 const Teuchos::ParameterList& user_data)
const
452 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
453 eq_set = m_equation_sets.begin();
454 for (;eq_set != m_equation_sets.end(); ++eq_set) {
455 std::vector<StrBasisPair> providedDOFs;
459 const int di = eqstm.getAsObject<EvalT>()->setDetailsIndex(this->getDetailsIndex());
460 eqstm.getAsObject<EvalT>()->buildAndRegisterInitialConditionEvaluators(fm, *m_field_lib, factory, model_name, models, lof, user_data);
461 eqstm.getAsObject<EvalT>()->setDetailsIndex(di);