43 #include "PanzerAdaptersSTK_config.hpp" 45 #include "Panzer_STK_IOClosureModel_Factory.hpp" 46 #include "Panzer_STK_ScatterCellAvgQuantity.hpp" 47 #include "Panzer_STK_ScatterCellAvgVector.hpp" 48 #include "Panzer_STK_ScatterCellQuantity.hpp" 49 #include "Panzer_STK_ScatterFields.hpp" 52 Teuchos::RCP< std::vector< Teuchos::RCP<PHX::Evaluator<panzer::Traits> > > >
55 const Teuchos::ParameterList& models,
57 const Teuchos::RCP<panzer::IntegrationRule>& ir,
58 const Teuchos::ParameterList& default_params,
59 const Teuchos::ParameterList& user_data,
60 const Teuchos::RCP<panzer::GlobalData>&
global_data,
65 using Teuchos::ParameterList;
69 RCP< std::vector< RCP<Evaluator<panzer::Traits> > > > user_evals =
70 userCMF_->buildClosureModels(model_id,models,fl,ir,default_params,user_data,
global_data,fm);
73 RCP< std::vector< RCP<Evaluator<panzer::Traits> > > > evaluators =
74 rcp(
new std::vector< RCP<Evaluator<panzer::Traits> > > );
77 std::string block_id = default_params.get<std::string>(
"Block ID");
79 if(!blockIdEvaluated_[block_id]) {
80 typedef std::map<std::string,std::vector<std::string> > BlockIdToFields;
82 int worksetsize = ir->dl_scalar->dimension(0);
85 BlockIdToFields::const_iterator cellAvgItr = blockIdToCellAvgFields_.find(block_id);
86 if(cellAvgItr!=blockIdToCellAvgFields_.end() ) {
87 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(cellAvgItr->second));
90 Teuchos::ParameterList pl;
93 pl.set(
"Field Names",fieldNames);
94 pl.set(
"Scatter Name", block_id+
"_Cell_Avg_Fields");
95 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
96 = Teuchos::rcp(
new panzer_stk::ScatterCellAvgQuantity<panzer::Traits::Residual,panzer::Traits>(pl));
100 evaluators->push_back(eval);
102 blockIdEvaluated_[block_id] =
true;
106 BlockIdToFields::const_iterator cellAvgVecItr = blockIdToCellAvgVectors_.find(block_id);
107 if(cellAvgVecItr != blockIdToCellAvgVectors_.end() ) {
108 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(cellAvgVecItr->second));
111 Teuchos::ParameterList pl;
112 pl.set(
"Mesh",
mesh_);
114 pl.set(
"Field Names",fieldNames);
115 pl.set(
"Scatter Name", block_id+
"_Cell_Avg_Vectors");
116 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
117 = Teuchos::rcp(
new panzer_stk::ScatterCellAvgVector<panzer::Traits::Residual,panzer::Traits>(pl));
121 evaluators->push_back(eval);
123 blockIdEvaluated_[block_id] =
true;
127 BlockIdToFields::const_iterator cellItr = blockIdToCellFields_.find(block_id);
128 if(cellItr!=blockIdToCellFields_.end() ) {
129 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(cellItr->second));
132 Teuchos::ParameterList pl;
133 pl.set(
"Mesh",
mesh_);
134 pl.set(
"Workset Size",worksetsize);
135 pl.set(
"Field Names",fieldNames);
136 pl.set(
"Scatter Name", block_id+
"_Cell_Fields");
137 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
138 = Teuchos::rcp(
new panzer_stk::ScatterCellQuantity<panzer::Traits::Residual,panzer::Traits>(pl));
142 evaluators->push_back(eval);
144 blockIdEvaluated_[block_id] =
true;
148 BlockIdToFields::const_iterator nodalItr = blockIdToNodalFields_.find(block_id);
149 if(nodalItr!=blockIdToNodalFields_.end() ) {
150 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(nodalItr->second));
152 Teuchos::RCP<const panzer::PureBasis>
basis = Teuchos::rcp(
new panzer::PureBasis(
"HGrad",1,ir->workset_size,ir->topology));
155 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
160 evaluators->push_back(eval);
162 blockIdEvaluated_[block_id] =
true;
166 evaluators->insert(evaluators->end(),user_evals->begin(),user_evals->end());
171 #ifdef HAVE_PANZER_EXPLICIT_INSTANTIATION
Teuchos::RCP< std::vector< Teuchos::RCP< PHX::Evaluator< panzer::Traits > > > > buildClosureModels(const std::string &model_id, const Teuchos::ParameterList &models, const panzer::FieldLayoutLibrary &fl, const Teuchos::RCP< panzer::IntegrationRule > &ir, const Teuchos::ParameterList &default_params, const Teuchos::ParameterList &user_data, const Teuchos::RCP< panzer::GlobalData > &global_data, PHX::FieldManager< panzer::Traits > &fm) const
PHX::MDField< ScalarT > vector
Teuchos::RCP< panzer::GlobalData > global_data
#define PANZER_INSTANTIATE_TEMPLATE_CLASS_ONE_T(name)
Teuchos::RCP< STK_Interface > mesh_
Teuchos::RCP< const panzer::PureBasis > basis
Interpolates basis DOF values to IP DOF values.
Description and data layouts associated with a particular basis.