83 std::map<Moose::CoordinateSystemType, std::vector<SubdomainName>> coord_map;
84 std::set<SubdomainID> subdomains;
86 if (isParamValid(
"block"))
88 Moose::out <<
"Restricting to blocks!" << std::endl;
89 std::vector<SubdomainName> block = getParam<std::vector<SubdomainName>>(
"block");
90 for (
unsigned int i = 0; i < block.size(); i++)
91 subdomains.insert(_problem->mesh().getSubdomainID(block[i]));
94 subdomains = _problem->mesh().meshSubdomains();
96 for (std::set<SubdomainID>::const_iterator it = subdomains.begin(); it != subdomains.end(); ++it)
98 SubdomainID sid = *it;
99 Moose::CoordinateSystemType coord_type = _problem->getCoordSystem(sid);
103 std::stringstream ss;
105 SubdomainName sname = ss.str();
107 coord_map[coord_type].push_back(sname);
110 for (std::map<Moose::CoordinateSystemType, std::vector<SubdomainName>>::iterator it =
112 it != coord_map.end();
115 Moose::CoordinateSystemType coord_type = (*it).first;
116 std::vector<SubdomainName> & blocks = (*it).second;
120 bool rspherical(
false);
122 std::vector<std::string> keys;
123 std::vector<VariableName> vars;
124 std::vector<std::vector<AuxVariableName>> save_in;
125 std::vector<std::vector<AuxVariableName>> diag_save_in;
126 std::string type(
"StressDivergence");
127 if (getParam<MooseEnum>(
"type") == 0)
129 type =
"StressDivergenceTruss";
131 else if (coord_type == Moose::COORD_RZ)
134 type =
"StressDivergenceRZ";
136 keys.push_back(
"disp_r");
137 keys.push_back(
"disp_z");
141 if (isParamValid(
"save_in_disp_r"))
142 save_in[0] = getParam<std::vector<AuxVariableName>>(
"save_in_disp_r");
144 if (isParamValid(
"save_in_disp_z"))
145 save_in[1] = getParam<std::vector<AuxVariableName>>(
"save_in_disp_z");
147 diag_save_in.resize(dim);
148 if (isParamValid(
"diag_save_in_disp_r"))
149 diag_save_in[0] = getParam<std::vector<AuxVariableName>>(
"diag_save_in_disp_r");
151 if (isParamValid(
"diag_save_in_disp_z"))
152 diag_save_in[1] = getParam<std::vector<AuxVariableName>>(
"diag_save_in_disp_z");
154 else if (coord_type == Moose::COORD_RSPHERICAL)
157 type =
"StressDivergenceRSpherical";
159 keys.push_back(
"disp_r");
162 if (isParamValid(
"save_in_disp_r"))
163 save_in[0] = getParam<std::vector<AuxVariableName>>(
"save_in_disp_r");
165 diag_save_in.resize(dim);
166 if (isParamValid(
"diag_save_in_disp_r"))
167 diag_save_in[0] = getParam<std::vector<AuxVariableName>>(
"diag_save_in_disp_r");
170 if (!rz && !rspherical &&
_disp_x ==
"")
172 mooseError(
"disp_x must be specified");
175 if (!rz && !rspherical)
177 keys.push_back(
"disp_x");
182 keys.push_back(
"disp_y");
187 keys.push_back(
"disp_z");
193 if (isParamValid(
"save_in_disp_x"))
194 save_in[0] = getParam<std::vector<AuxVariableName>>(
"save_in_disp_x");
196 if (isParamValid(
"save_in_disp_y"))
197 save_in[1] = getParam<std::vector<AuxVariableName>>(
"save_in_disp_y");
199 if (isParamValid(
"save_in_disp_z"))
200 save_in[2] = getParam<std::vector<AuxVariableName>>(
"save_in_disp_z");
202 diag_save_in.resize(dim);
203 if (isParamValid(
"diag_save_in_disp_x"))
204 diag_save_in[0] = getParam<std::vector<AuxVariableName>>(
"diag_save_in_disp_x");
206 if (isParamValid(
"diag_save_in_disp_y"))
207 diag_save_in[1] = getParam<std::vector<AuxVariableName>>(
"diag_save_in_disp_y");
209 if (isParamValid(
"diag_save_in_disp_z"))
210 diag_save_in[2] = getParam<std::vector<AuxVariableName>>(
"diag_save_in_disp_z");
213 unsigned int num_coupled(dim);
217 keys.push_back(
"temp");
218 vars.push_back(
_temp);
221 InputParameters params = _factory.getValidParams(type);
222 for (
unsigned j(0); j < num_coupled; ++j)
224 params.addCoupledVar(keys[j],
"");
225 params.set<std::vector<VariableName>>(keys[j]) = {vars[j]};
228 params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
229 params.set<std::string>(
"appended_property_name") =
230 getParam<std::string>(
"appended_property_name");
232 for (
unsigned int i(0); i < dim; ++i)
234 std::stringstream
name;
238 params.set<
unsigned int>(
"component") = i;
240 params.set<NonlinearVariableName>(
"variable") = vars[i];
241 params.set<std::vector<SubdomainName>>(
"block") = blocks;
242 params.set<std::vector<AuxVariableName>>(
"save_in") = save_in[i];
243 params.set<std::vector<AuxVariableName>>(
"diag_save_in") = diag_save_in[i];
244 params.set<Real>(
"zeta") =
_zeta;
245 params.set<Real>(
"alpha") =
_alpha;
246 params.set<
bool>(
"volumetric_locking_correction") =
247 getParam<bool>(
"volumetric_locking_correction");
248 if (isParamValid(
"extra_vector_tags"))
249 params.set<std::vector<TagName>>(
"extra_vector_tags") =
250 getParam<std::vector<TagName>>(
"extra_vector_tags");
251 _problem->addKernel(type,
name.str(), params);