13 #include "Conversion.h"
14 #include "FEProblem.h"
22 InputParameters params = validParams<Action>();
23 params.addClassDescription(
24 "Action for applying Allen-Cahn equations and SingleGrainRigidBodyMotion to grains");
25 params.addRequiredParam<
unsigned int>(
"op_num",
"specifies the number of grains to create");
26 params.addRequiredParam<std::string>(
"var_name_base",
"specifies the base name of the variables");
27 params.addParam<VariableName>(
"c",
"Name of coupled concentration variable");
28 params.addParam<MaterialPropertyName>(
"kappa_name",
"kappa_op",
"The kappa used with the kernel");
29 params.addParam<MaterialPropertyName>(
"mob_name",
"L",
"The mobility used with the kernel");
30 params.addParam<MaterialPropertyName>(
31 "f_name",
"Base name of the free energy function F defined in a DerivativeParsedMaterial");
32 params.addParam<std::string>(
"base_name",
33 "Optional parameter that allows the user to define "
34 "type of force density under consideration");
35 params.addParam<Real>(
36 "translation_constant", 500,
"constant value characterizing grain translation");
37 params.addParam<Real>(
"rotation_constant", 1.0,
"constant value characterizing grain rotation");
38 params.addRequiredParam<UserObjectName>(
39 "grain_force",
"userobject for getting force and torque acting on grains");
40 params.addRequiredParam<UserObjectName>(
"grain_tracker_object",
41 "The FeatureFloodCount UserObject to get values from.");
42 params.addRequiredParam<VectorPostprocessorName>(
"grain_volumes",
43 "The feature volume VectorPostprocessorValue.");
44 params.addParam<
bool>(
"implicit",
true,
"Whether kernels are implicit or not");
45 params.addParam<
bool>(
46 "use_displaced_mesh",
false,
"Whether to use displaced mesh in the kernels");
52 _op_num(getParam<unsigned int>(
"op_num")),
53 _var_name_base(getParam<std::string>(
"var_name_base")),
54 _implicit(getParam<bool>(
"implicit"))
61 for (
unsigned int op = 0; op <
_op_num; ++op)
73 std::vector<VariableName> arg;
76 if (isParamValid(
"c"))
78 VariableName c = getParam<VariableName>(
"c");
81 for (
unsigned int j = 0; j <
_op_num; ++j)
90 for (
unsigned int j = 0; j <
_op_num; ++j)
99 std::vector<VariableName> v(
_op_num);
100 for (
unsigned int j = 0; j <
_op_num; ++j)
108 InputParameters params = _factory.getValidParams(
"ACInterface");
109 params.set<NonlinearVariableName>(
"variable") = var_name;
110 params.set<
bool>(
"implicit") = getParam<bool>(
"implicit");
111 params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
112 params.set<MaterialPropertyName>(
"kappa_name") = getParam<MaterialPropertyName>(
"kappa_name");
113 params.set<MaterialPropertyName>(
"mob_name") = getParam<MaterialPropertyName>(
"mob_name");
115 std::string kernel_name =
"ACInt_" + var_name;
116 _problem->addKernel(
"ACInterface", kernel_name, params);
124 InputParameters params = _factory.getValidParams(
"AllenCahn");
125 params.set<NonlinearVariableName>(
"variable") = var_name;
126 params.set<std::vector<VariableName>>(
"args") = arg;
127 params.set<MaterialPropertyName>(
"mob_name") = getParam<MaterialPropertyName>(
"mob_name");
128 params.set<MaterialPropertyName>(
"f_name") = getParam<MaterialPropertyName>(
"f_name");
129 params.set<
bool>(
"implicit") =
_implicit;
130 params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
132 std::string kernel_name =
"AC_" + var_name;
133 _problem->addKernel(
"AllenCahn", kernel_name, params);
141 InputParameters params = _factory.getValidParams(
"SingleGrainRigidBodyMotion");
142 params.set<NonlinearVariableName>(
"variable") = var_name;
143 params.set<std::vector<VariableName>>(
"v") = v;
144 params.set<
unsigned int>(
"op_index") = op;
145 params.set<std::vector<VariableName>>(
"c") = {getParam<VariableName>(
"c")};
146 if (isParamValid(
"base_name"))
147 params.set<std::string>(
"base_name") = getParam<std::string>(
"base_name");
148 params.set<Real>(
"translation_constant") = getParam<Real>(
"translation_constant");
149 params.set<Real>(
"rotation_constant") = getParam<Real>(
"rotation_constant");
150 params.set<UserObjectName>(
"grain_force") = getParam<UserObjectName>(
"grain_force");
151 params.set<UserObjectName>(
"grain_tracker_object") =
152 getParam<UserObjectName>(
"grain_tracker_object");
153 params.set<VectorPostprocessorName>(
"grain_volumes") =
154 getParam<VectorPostprocessorName>(
"grain_volumes");
156 params.set<
bool>(
"implicit") =
_implicit;
157 params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
159 std::string kernel_name =
"RigidBody_" + var_name;
160 _problem->addKernel(
"SingleGrainRigidBodyMotion", kernel_name, params);
168 InputParameters params = _factory.getValidParams(
"TimeDerivative");
169 params.set<NonlinearVariableName>(
"variable") = var_name;
170 params.set<
bool>(
"implicit") =
true;
171 params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
173 std::string kernel_name =
"IE_" + var_name;
174 _problem->addKernel(
"TimeDerivative", kernel_name, params);