43 #ifndef PANZER_PHYSICS_BLOCK_HPP 44 #define PANZER_PHYSICS_BLOCK_HPP 50 #include "Teuchos_RCP.hpp" 51 #include "Phalanx_FieldManager.hpp" 72 class IntegrationRule;
73 struct EquationSetFactory;
84 void buildPhysicsBlocks(
const std::map<std::string,std::string>& block_ids_to_physics_ids,
85 const std::map<std::string,Teuchos::RCP<const shards::CellTopology> >& block_ids_to_cell_topo,
86 const Teuchos::RCP<Teuchos::ParameterList>& physics_blocks_plist,
87 const int default_integration_order,
88 const std::size_t workset_size,
89 const Teuchos::RCP<const panzer::EquationSetFactory>& eqset_factory,
90 const Teuchos::RCP<panzer::GlobalData>&
global_data,
91 const bool build_transient_support,
92 std::vector<Teuchos::RCP<panzer::PhysicsBlock> > & physicsBlocks,
93 const std::vector<std::string>& tangent_param_names = std::vector<std::string>());
101 void readPhysicsBlocks(
const std::map<std::string,std::string>& block_ids_to_physics_ids,
102 const Teuchos::RCP<Teuchos::ParameterList>& physics_blocks_plist,
103 std::vector<Teuchos::RCP<panzer::PhysicsBlock> > & physicsBlocks);
112 Teuchos::RCP<panzer::PhysicsBlock> findPhysicsBlock(
const std::string element_block_id,
113 const std::vector<Teuchos::RCP<panzer::PhysicsBlock> > & physics_blocks,
114 bool throw_on_failure =
true);
123 { std::cout <<
"WARNING: Default constructor for panzer::PhysicsBlock is for testing purposes only!" << std::endl; }
127 PhysicsBlock(
const Teuchos::RCP<Teuchos::ParameterList>& physics_block_plist,
128 const std::string & element_block_id,
129 const int default_integration_order,
131 const Teuchos::RCP<const panzer::EquationSetFactory>& factory,
132 const Teuchos::RCP<panzer::GlobalData>&
global_data,
133 const bool build_transient_support,
134 const std::vector<std::string>& tangent_param_names = std::vector<std::string>());
141 PhysicsBlock(
const Teuchos::RCP<Teuchos::ParameterList>& physics_block_plist,
142 const std::string & element_block_id);
152 const std::string & physics_block_id,
153 const int integration_order,
155 const Teuchos::RCP<panzer::GlobalData>&
global_data,
156 const Teuchos::RCP<panzer::PureBasis> & fields);
161 void initialize(
const int default_integration_order,
162 const bool build_transient_support,
164 const Teuchos::RCP<const panzer::EquationSetFactory>& factory,
165 const Teuchos::RCP<panzer::GlobalData>&
global_data,
166 const std::vector<std::string>& tangent_param_names = std::vector<std::string>());
169 const Teuchos::ParameterList& user_data)
const;
173 const Teuchos::ParameterList& user_data)
const;
177 const Teuchos::ParameterList& user_data)
const;
181 const Teuchos::ParameterList& user_data)
const;
185 const Teuchos::ParameterList& models,
186 const Teuchos::ParameterList& user_data)
const;
190 const std::string& model_name,
191 const Teuchos::ParameterList& models,
193 const Teuchos::ParameterList& user_data)
const;
197 const std::string& model_name,
198 const Teuchos::ParameterList& models,
199 const Teuchos::ParameterList& user_data)
const;
201 template<
typename EvalT>
203 const Teuchos::ParameterList& user_data)
const;
205 template<
typename EvalT>
208 const Teuchos::ParameterList& user_data)
const;
210 template<
typename EvalT>
213 const Teuchos::ParameterList& user_data)
const;
215 template<
typename EvalT>
218 const Teuchos::ParameterList& user_data)
const;
220 template<
typename EvalT>
223 const Teuchos::ParameterList& models,
224 const Teuchos::ParameterList& user_data)
const;
226 template<
typename EvalT>
229 const std::string& model_name,
230 const Teuchos::ParameterList& models,
232 const Teuchos::ParameterList& user_data)
const;
234 const std::vector<std::string>&
getDOFNames()
const;
243 const std::map<std::string,Teuchos::RCP<panzer::PureBasis> >&
getBases()
const;
261 Teuchos::RCP<panzer::GlobalData>
globalData()
const;
274 void initialize(
const Teuchos::RCP<Teuchos::ParameterList>& input_parameters,
275 const int& default_integration_order,
276 const std::string & element_block_id,
278 const bool build_transient_support,
279 const std::vector<std::string>& tangent_param_names = std::vector<std::string>());
296 std::map<std::string,Teuchos::RCP<panzer::PureBasis> >
m_bases;
300 std::vector< Teuchos::RCP<panzer::EquationSet_TemplateManager<panzer::Traits> > >
m_equation_sets;
311 template<
typename EvalT>
313 const Teuchos::ParameterList& user_data)
const 320 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
332 template<
typename EvalT>
335 const Teuchos::ParameterList& user_data)
const 342 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
343 eq_set = m_equation_sets.begin();
344 for (;eq_set != m_equation_sets.end(); ++eq_set) {
348 const int di = eqstm.getAsObject<EvalT>()->setDetailsIndex(this->getDetailsIndex());
349 eqstm.getAsObject<EvalT>()->buildAndRegisterGatherAndOrientationEvaluators(fm,*m_field_lib,lof,user_data);
350 eqstm.getAsObject<EvalT>()->setDetailsIndex(di);
354 template<
typename EvalT>
357 const Teuchos::ParameterList& user_data)
const 364 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
365 eq_set = m_equation_sets.begin();
366 for (;eq_set != m_equation_sets.end(); ++eq_set) {
370 for (std::map<
int,Teuchos::RCP<panzer::IntegrationRule> >::const_iterator ir_iter = m_integration_rules.begin();
371 ir_iter != m_integration_rules.end(); ++ ir_iter) {
373 Teuchos::RCP<panzer::IntegrationRule> ir = ir_iter->second;
375 const int di = eqstm.getAsObject<EvalT>()->setDetailsIndex(this->getDetailsIndex());
376 eqstm.getAsObject<EvalT>()->buildAndRegisterDOFProjectionsToIPEvaluators(fm,*m_field_lib->buildFieldLayoutLibrary(*ir),ir,lof,user_data);
377 eqstm.getAsObject<EvalT>()->setDetailsIndex(di);
383 template<
typename EvalT>
386 const Teuchos::ParameterList& user_data)
const 393 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
394 eq_set = m_equation_sets.begin();
395 for (;eq_set != m_equation_sets.end(); ++eq_set) {
399 const int di = eqstm.getAsObject<EvalT>()->setDetailsIndex(this->getDetailsIndex());
400 eqstm.getAsObject<EvalT>()->buildAndRegisterScatterEvaluators(fm,*m_field_lib,lof,user_data);
401 eqstm.getAsObject<EvalT>()->setDetailsIndex(di);
405 template<
typename EvalT>
408 const Teuchos::ParameterList& models,
409 const Teuchos::ParameterList& user_data)
const 416 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
417 eq_set = m_equation_sets.begin();
418 for (;eq_set != m_equation_sets.end(); ++eq_set) {
423 for (std::map<
int,Teuchos::RCP<panzer::IntegrationRule> >::const_iterator ir_iter = m_integration_rules.begin();
424 ir_iter != m_integration_rules.end(); ++ ir_iter) {
426 Teuchos::RCP<panzer::IntegrationRule> ir = ir_iter->second;
428 const int di = eqstm.getAsObject<EvalT>()->setDetailsIndex(this->getDetailsIndex());
429 eqstm.getAsObject<EvalT>()->buildAndRegisterClosureModelEvaluators(fm,*m_field_lib->buildFieldLayoutLibrary(*ir),ir,factory,models,user_data);
430 eqstm.getAsObject<EvalT>()->setDetailsIndex(di);
436 template<
typename EvalT>
439 const std::string& model_name,
440 const Teuchos::ParameterList& models,
442 const Teuchos::ParameterList& user_data)
const 449 vector< RCP<EquationSet_TemplateManager<panzer::Traits> > >::const_iterator
450 eq_set = m_equation_sets.begin();
451 for (;eq_set != m_equation_sets.end(); ++eq_set) {
452 std::vector<StrBasisPair> providedDOFs;
456 const int di = eqstm.getAsObject<EvalT>()->setDetailsIndex(this->getDetailsIndex());
457 eqstm.getAsObject<EvalT>()->buildAndRegisterInitialConditionEvaluators(fm, *m_field_lib, factory, model_name, models, lof, user_data);
458 eqstm.getAsObject<EvalT>()->setDetailsIndex(di);
std::vector< StrPureBasisPair > m_provided_dofs
Teuchos::RCP< panzer::GlobalData > m_global_data
void buildAndRegisterDOFProjectionsToIPEvaluatorsForType(PHX::FieldManager< panzer::Traits > &fm, const Teuchos::Ptr< const panzer::LinearObjFactory< panzer::Traits > > &lof, const Teuchos::ParameterList &user_data) const
Object that contains information on the physics and discretization of a block of elements with the SA...
Teuchos::RCP< panzer::GlobalData > globalData() const
int getDetailsIndex() const
Get the WorksetDetails index.
Teuchos::RCP< PhysicsBlock > copyWithCellData(const panzer::CellData &cell_data) const
int setDetailsIndex(const int details_index)
Teuchos::RCP< const panzer::EquationSetFactory > m_eqset_factory
void buildAndRegisterClosureModelEvaluatorsForType(PHX::FieldManager< panzer::Traits > &fm, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &factory, const Teuchos::ParameterList &models, const Teuchos::ParameterList &user_data) const
std::string elementBlockID() const
void buildAndRegisterClosureModelEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &factory, const Teuchos::ParameterList &models, const Teuchos::ParameterList &user_data) const
void buildAndRegisterGatherAndOrientationEvaluatorsForType(PHX::FieldManager< panzer::Traits > &fm, const LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
void buildAndRegisterInitialConditionEvaluatorsForType(PHX::FieldManager< panzer::Traits > &fm, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &factory, const std::string &model_name, const Teuchos::ParameterList &models, const panzer::LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
const std::vector< std::string > & getDOFNames() const
PHX::MDField< ScalarT > vector
Teuchos::RCP< panzer::GlobalData > global_data
int m_default_integration_order
void buildAndRegisterScatterEvaluatorsForType(PHX::FieldManager< panzer::Traits > &fm, const LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
std::vector< Teuchos::RCP< panzer::EquationSet_TemplateManager< panzer::Traits > > > m_equation_sets
void buildAndRegisterInitialConditionEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::ClosureModelFactory_TemplateManager< panzer::Traits > &factory, const std::string &model_name, const Teuchos::ParameterList &models, const panzer::LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
std::vector< std::vector< std::string > > m_coordinate_dofs
Data for determining cell topology and dimensionality.
panzer::CellData m_cell_data
std::string physicsBlockID() const
void buildAndRegisterGatherAndOrientationEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
std::map< std::string, Teuchos::RCP< panzer::PureBasis > > m_bases
map of unique bases, key is the panzer::PureBasis::name() corresponding to its value ...
Teuchos::RCP< const FieldLibraryBase > getFieldLibraryBase() const
Teuchos::RCP< Teuchos::ParameterList > m_input_parameters
store the input parameter list for copy ctors
std::map< int, Teuchos::RCP< panzer::IntegrationRule > > m_integration_rules
map of unique integration rules, key is panzer::IntegrationRule::order() corresponding to its value ...
void buildAndRegisterDOFProjectionsToIPEvaluators(PHX::FieldManager< panzer::Traits > &fm, const Teuchos::Ptr< const panzer::LinearObjFactory< panzer::Traits > > &lof, const Teuchos::ParameterList &user_data) const
const std::vector< std::vector< std::string > > & getCoordinateDOFs() const
const panzer::CellData & cellData() const
Teuchos::RCP< const FieldLibrary > getFieldLibrary() const
void buildAndRegisterEquationSetEvaluators(PHX::FieldManager< panzer::Traits > &fm, const Teuchos::ParameterList &user_data) const
void buildAndRegisterEquationSetEvaluatorsForType(PHX::FieldManager< panzer::Traits > &fm, const Teuchos::ParameterList &user_data) const
const std::vector< StrPureBasisPair > & getProvidedDOFs() const
const std::map< std::string, Teuchos::RCP< panzer::PureBasis > > & getBases() const
Returns the unique set of bases, key is the unique panzer::PureBasis::name() of the basis...
void buildAndRegisterScatterEvaluators(PHX::FieldManager< panzer::Traits > &fm, const panzer::LinearObjFactory< panzer::Traits > &lof, const Teuchos::ParameterList &user_data) const
void initialize(const int default_integration_order, const bool build_transient_support, const panzer::CellData &cell_data, const Teuchos::RCP< const panzer::EquationSetFactory > &factory, const Teuchos::RCP< panzer::GlobalData > &global_data, const std::vector< std::string > &tangent_param_names=std::vector< std::string >())
bool m_build_transient_support
Teuchos::RCP< FieldLibrary > m_field_lib
std::string m_element_block_id
const std::vector< StrPureBasisPair > & getTangentFields() const
Returns list of tangent fields from DOFs and tangent param names.
std::vector< std::string > m_dof_names
const std::map< int, Teuchos::RCP< panzer::IntegrationRule > > & getIntegrationRules() const
Returns the unique set of point rules, key is the unique panzer::PointRule::name() ...
const shards::CellTopology getBaseCellTopology() const
std::vector< StrPureBasisPair > m_tangent_fields
Teuchos::RCP< const Teuchos::ParameterList > getParameterList() const