23 const Teuchos::ParameterList& models,
25 const Teuchos::RCP<panzer::IntegrationRule>& ir,
26 const Teuchos::ParameterList& default_params,
27 const Teuchos::ParameterList& user_data,
28 const Teuchos::RCP<panzer::GlobalData>& global_data,
33 using Teuchos::ParameterList;
37 RCP< std::vector< RCP<Evaluator<panzer::Traits> > > > user_evals =
38 userCMF_->buildClosureModels(model_id,models,fl,ir,default_params,user_data,global_data,fm);
41 RCP< std::vector< RCP<Evaluator<panzer::Traits> > > > evaluators =
42 rcp(
new std::vector< RCP<Evaluator<panzer::Traits> > > );
45 std::string block_id = default_params.get<std::string>(
"Block ID");
47 if(!blockIdEvaluated_[block_id]) {
48 typedef std::map<std::string,std::vector<std::string> > BlockIdToFields;
50 int worksetsize = ir->dl_scalar->extent(0);
53 Teuchos::RCP<std::map<std::string,double>> varScaleFactors;
54 if (user_data.isParameter(
"Variable Scale Factors Map"))
56 varScaleFactors = user_data.get<Teuchos::RCP<std::map<std::string,double>>>(
"Variable Scale Factors Map");
60 BlockIdToFields::const_iterator cellAvgItr = blockIdToCellAvgFields_.find(block_id);
61 if(cellAvgItr!=blockIdToCellAvgFields_.end() ) {
62 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(cellAvgItr->second));
65 Teuchos::ParameterList pl;
68 pl.set(
"Field Names",fieldNames);
69 pl.set(
"Scatter Name", block_id+
"_Cell_Avg_Fields");
70 pl.set(
"Variable Scale Factors Map", varScaleFactors);
71 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
76 evaluators->push_back(eval);
78 blockIdEvaluated_[block_id] =
true;
82 BlockIdToFields::const_iterator cellAvgVecItr = blockIdToCellAvgVectors_.find(block_id);
83 if(cellAvgVecItr != blockIdToCellAvgVectors_.end() ) {
84 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(cellAvgVecItr->second));
87 Teuchos::ParameterList pl;
90 pl.set(
"Field Names",fieldNames);
91 pl.set(
"Scatter Name", block_id+
"_Cell_Avg_Vectors");
92 pl.set(
"Variable Scale Factors Map", varScaleFactors);
93 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
98 evaluators->push_back(eval);
100 blockIdEvaluated_[block_id] =
true;
104 BlockIdToFields::const_iterator cellItr = blockIdToCellFields_.find(block_id);
105 if(cellItr!=blockIdToCellFields_.end() ) {
106 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(cellItr->second));
109 Teuchos::ParameterList pl;
110 pl.set(
"Mesh",mesh_);
111 pl.set(
"Workset Size",worksetsize);
112 pl.set(
"Field Names",fieldNames);
113 pl.set(
"Scatter Name", block_id+
"_Cell_Fields");
114 pl.set(
"Variable Scale Factors Map", varScaleFactors);
115 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
120 evaluators->push_back(eval);
122 blockIdEvaluated_[block_id] =
true;
126 BlockIdToFields::const_iterator nodalItr = blockIdToNodalFields_.find(block_id);
127 if(nodalItr!=blockIdToNodalFields_.end() ) {
128 Teuchos::RCP<std::vector<std::string> > fieldNames = Teuchos::rcp(
new std::vector<std::string>(nodalItr->second));
130 Teuchos::RCP<const panzer::PureBasis> basis = Teuchos::rcp(
new panzer::PureBasis(
"HGrad",1,ir->workset_size,ir->topology));
133 std::vector<double> scale_factors_(fieldNames->size(),1.0);
134 if (!varScaleFactors.is_null()) {
135 for(
size_t f=0; f < fieldNames->size(); ++f) {
136 std::map<std::string,double>::const_iterator f2s_itr = varScaleFactors->find((*fieldNames)[f]);
137 if(f2s_itr != varScaleFactors->end()) {
138 scale_factors_[f] = f2s_itr->second;
144 Teuchos::RCP<PHX::Evaluator<panzer::Traits> > eval
149 evaluators->push_back(eval);
151 blockIdEvaluated_[block_id] =
true;
155 evaluators->insert(evaluators->end(),user_evals->begin(),user_evals->end());