12 #include "FEProblem.h"
14 #include "libmesh/string_to_enum.h"
26 InputParameters params = validParams<Action>();
27 params.addClassDescription(
"Set up variables, kernels, and materials for a the displacement "
28 "gradients and their elastic free energy derivatives for non-split "
29 "Cahn-Hilliard problems.");
30 params.addRequiredParam<std::vector<VariableName>>(
"displacements",
31 "Vector of displacement variables");
32 params.addRequiredParam<std::vector<VariableName>>(
"displacement_gradients",
33 "Vector of displacement gradient variables");
34 params.addParam<Real>(
35 "scaling", 1.0,
"Specifies a scaling factor to apply to the displacement gradient variables");
41 _displacements(getParam<std::vector<VariableName>>(
"displacements")),
42 _displacement_gradients(getParam<std::vector<VariableName>>(
"displacement_gradients"))
51 if (_current_task ==
"add_variable")
54 Real scaling = getParam<Real>(
"scaling");
55 for (
unsigned int i = 0; i < ngrad; ++i)
57 auto var_params = _factory.getValidParams(
"MooseVariable");
58 var_params.set<MooseEnum>(
"family") =
"LAGRANGE";
59 var_params.set<MooseEnum>(
"order") =
"FIRST";
60 var_params.set<std::vector<Real>>(
"scaling") = {scaling};
66 else if (_current_task ==
"add_material")
68 InputParameters params = _factory.getValidParams(
"StrainGradDispDerivatives");
70 params.set<std::vector<SubdomainName>>(
"block") = {
"0"};
71 _problem->addMaterial(
"StrainGradDispDerivatives",
"strain_grad_disp_derivatives", params);
73 else if (_current_task ==
"add_kernel")
76 if (ndisp * ndisp != ngrad)
77 paramError(
"displacement_gradients",
78 "Number of displacement gradient variables must be the square of the number of "
79 "displacement variables.");
83 for (
unsigned int j = 0; j < ndisp; ++j)
84 for (
unsigned int k = 0; k < ndisp; ++k)
86 InputParameters params = _factory.getValidParams(
"GradientComponent");
89 params.set<
unsigned int>(
"component") = k;
96 mooseError(
"Internal error.");