158 std::string ad_prepend =
"";
159 std::string ad_append =
"";
163 ad_append =
"<RESIDUAL>";
184 if (_current_task ==
"meta_action")
189 paramError(
"use_ad",
"AD not setup for use with PlaneStrain");
191 const std::string type =
"GeneralizedPlaneStrainAction";
192 auto action_params = _action_factory.getValidParams(type);
193 action_params.set<
bool>(
"_built_by_moose") =
true;
194 action_params.set<std::string>(
"registered_identifier") =
"(AutoBuilt)";
195 action_params.applyParameters(parameters(), {
"use_displaced_mesh"});
197 if (isParamValid(
"pressure_factor"))
198 action_params.set<Real>(
"factor") = getParam<Real>(
"pressure_factor");
200 auto action = MooseSharedNamespace::static_pointer_cast<MooseObjectAction>(
201 _action_factory.create(type,
name() +
"_gps", action_params));
202 _awh.addActionBlock(action);
203 if (isParamValid(
"extra_vector_tags"))
204 action_params.set<std::vector<TagName>>(
"extra_vector_tags") =
205 getParam<std::vector<TagName>>(
"extra_vector_tags");
212 else if (_current_task ==
"add_variable" && getParam<bool>(
"add_variables"))
214 auto params = _factory.getValidParams(
"MooseVariable");
216 const bool second = _problem->mesh().hasSecondOrderElements();
218 params.set<MooseEnum>(
"order") = second ?
"SECOND" :
"FIRST";
219 params.set<MooseEnum>(
"family") =
"LAGRANGE";
225 _problem->addVariable(
"MooseVariable", disp, params);
232 else if (_current_task ==
"add_material")
241 std::map<std::pair<Moose::CoordinateSystemType, StrainAndIncrement>, std::string> type_map = {
244 "ComputeIncrementalSmallStrain"},
248 "ComputeAxisymmetricRZIncrementalStrain"},
250 "ComputeAxisymmetricRZFiniteStrain"},
252 "ComputeRSphericalSmallStrain"},
254 "ComputeRSphericalIncrementalStrain"},
256 "ComputeRSphericalFiniteStrain"}};
259 if (type_it != type_map.end())
260 type = type_it->second;
262 mooseError(
"Unsupported strain formulation");
271 "AD not setup for use with WeakPlaneStress, PlaneStrain, or GeneralizedPlaneStrain");
273 std::map<std::pair<Moose::CoordinateSystemType, StrainAndIncrement>, std::string> type_map = {
276 "ComputePlaneIncrementalStrain"},
280 "ComputeAxisymmetric1DIncrementalStrain"},
282 "ComputeAxisymmetric1DFiniteStrain"}};
286 if (type_it != type_map.end())
287 type = type_it->second;
289 mooseError(
"Unsupported coordinate system for plane strain.");
292 mooseError(
"Unsupported planar formulation");
295 auto params = _factory.getValidParams(ad_prepend + type + ad_append);
296 params.applyParameters(parameters(),
298 "use_displaced_mesh",
299 "out_of_plane_strain",
300 "scalar_out_of_plane_strain"});
302 if (isParamValid(
"strain_base_name"))
303 params.set<std::string>(
"base_name") = getParam<std::string>(
"strain_base_name");
306 params.set<
bool>(
"use_displaced_mesh") =
false;
308 if (isParamValid(
"scalar_out_of_plane_strain"))
309 params.set<std::vector<VariableName>>(
"scalar_out_of_plane_strain") = {
310 getParam<VariableName>(
"scalar_out_of_plane_strain")};
312 if (isParamValid(
"out_of_plane_strain"))
313 params.set<std::vector<VariableName>>(
"out_of_plane_strain") = {
314 getParam<VariableName>(
"out_of_plane_strain")};
318 _problem->addADResidualMaterial(
319 ad_prepend + type +
"<RESIDUAL>",
name() +
"_strain" +
"_residual", params);
320 _problem->addADJacobianMaterial(
321 ad_prepend + type +
"<JACOBIAN>",
name() +
"_strain" +
"_jacobian", params);
322 _problem->haveADObjects(
true);
325 _problem->addMaterial(type,
name() +
"_strain", params);
331 else if (_current_task ==
"add_kernel")
333 for (
unsigned int i = 0; i <
_ndisp; ++i)
338 std::string kernel_name =
"TM_" +
name() + Moose::stringify(i);
347 params.set<
unsigned int>(
"component") = i;
349 params.set<NonlinearVariableName>(
"variable") =
_displacements[i];
352 params.set<std::vector<AuxVariableName>>(
"save_in") = {
_save_in[i]};
354 params.set<std::vector<AuxVariableName>>(
"diag_save_in") = {
_diag_save_in[i]};
355 if (isParamValid(
"out_of_plane_strain"))
356 params.set<std::vector<VariableName>>(
"out_of_plane_strain") = {
357 getParam<VariableName>(
"out_of_plane_strain")};
362 ad_prepend + tensor_kernel_type +
"<RESIDUAL>", kernel_name +
"_residual", params);
364 ad_prepend + tensor_kernel_type +
"<JACOBIAN>", kernel_name +
"_jacobian", params);
365 _problem->haveADObjects(
true);
368 _problem->addKernel(tensor_kernel_type, kernel_name, params);
374 std::string wps_kernel_name =
"TM_WPS_" +
name();
375 params.set<NonlinearVariableName>(
"variable") = getParam<VariableName>(
"out_of_plane_strain");
376 _problem->addKernel(
"WeakPlaneStress", wps_kernel_name, params);