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->extent(0);
85 Teuchos::RCP<std::map<std::string,double>> varScaleFactors;
86 if (user_data.isParameter(
"Variable Scale Factors Map"))
88 varScaleFactors = user_data.get<Teuchos::RCP<std::map<std::string,double>>>(
"Variable Scale Factors Map");
92 BlockIdToFields::const_iterator cellAvgItr = blockIdToCellAvgFields_.find(block_id);
93 if(cellAvgItr!=blockIdToCellAvgFields_.end() ) {
94 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(cellAvgItr->second));
97 Teuchos::ParameterList pl;
100 pl.set(
"Field Names",fieldNames);
101 pl.set(
"Scatter Name", block_id+
"_Cell_Avg_Fields");
102 pl.set(
"Variable Scale Factors Map", varScaleFactors);
103 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
108 evaluators->push_back(eval);
110 blockIdEvaluated_[block_id] =
true;
114 BlockIdToFields::const_iterator cellAvgVecItr = blockIdToCellAvgVectors_.find(block_id);
115 if(cellAvgVecItr != blockIdToCellAvgVectors_.end() ) {
116 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(cellAvgVecItr->second));
119 Teuchos::ParameterList pl;
120 pl.set(
"Mesh",mesh_);
122 pl.set(
"Field Names",fieldNames);
123 pl.set(
"Scatter Name", block_id+
"_Cell_Avg_Vectors");
124 pl.set(
"Variable Scale Factors Map", varScaleFactors);
125 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
130 evaluators->push_back(eval);
132 blockIdEvaluated_[block_id] =
true;
136 BlockIdToFields::const_iterator cellItr = blockIdToCellFields_.find(block_id);
137 if(cellItr!=blockIdToCellFields_.end() ) {
138 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(cellItr->second));
141 Teuchos::ParameterList pl;
142 pl.set(
"Mesh",mesh_);
143 pl.set(
"Workset Size",worksetsize);
144 pl.set(
"Field Names",fieldNames);
145 pl.set(
"Scatter Name", block_id+
"_Cell_Fields");
146 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
151 evaluators->push_back(eval);
153 blockIdEvaluated_[block_id] =
true;
157 BlockIdToFields::const_iterator nodalItr = blockIdToNodalFields_.find(block_id);
158 if(nodalItr!=blockIdToNodalFields_.end() ) {
159 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(nodalItr->second));
161 Teuchos::RCP<const panzer::PureBasis> basis = Teuchos::rcp(
new panzer::PureBasis(
"HGrad",1,ir->workset_size,ir->topology));
164 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
169 evaluators->push_back(eval);
171 blockIdEvaluated_[block_id] =
true;
175 evaluators->insert(evaluators->end(),user_evals->begin(),user_evals->end());