19 #include "libmesh/string_to_enum.h" 32 "Set up the variable(s) and the kernels needed for a conserved phase field variable." 33 " Note that for a direct solve, the element family and order are overwritten with hermite " 35 MooseEnum solves(
"DIRECT REVERSE_SPLIT FORWARD_SPLIT");
42 "Specifies the family of FE " 43 "shape functions to use for this variable");
46 "Specifies the order of the FE " 47 "shape function to use for this variable");
48 params.
addParam<
Real>(
"scaling", 1.0,
"Specifies a scaling factor to apply to this variable");
49 params.
addParam<
bool>(
"implicit",
true,
"Whether kernels are implicit or not");
51 "use_displaced_mesh",
false,
"Whether to use displaced mesh in the kernels");
53 params.
addRequiredParam<MaterialPropertyName>(
"mobility",
"The mobility used with the kernel");
54 params.
addCoupledVar(
"args",
"Vector of nonlinear variable arguments this kernel depends on");
58 "free_energy",
"Base name of the free energy function F defined in a free energy material");
59 params.
addRequiredParam<MaterialPropertyName>(
"kappa",
"The kappa used with the kernel");
60 params.
addParam<std::vector<SubdomainName>>(
61 "block", {},
"Block restriction for the variables and kernels");
69 _scaling(getParam<
Real>(
"scaling"))
75 Utility::string_to_enum<FEFamily>(
"HERMITE"));
76 if (!
parameters().isParamSetByAddParam(
"order") &&
78 mooseWarning(
"Order and family autoset to third and hermite in ConservedAction");
82 _fe_type =
FEType(Utility::string_to_enum<Order>(getParam<MooseEnum>(
"order")),
83 Utility::string_to_enum<FEFamily>(getParam<MooseEnum>(
"family")));
88 paramError(
"solve_type",
"Incorrect solve_type in ConservedAction");
104 var_params.set<std::vector<Real>>(
"scaling") = {
_scaling};
105 var_params.applySpecificParameters(
parameters(), {
"block"});
131 std::string kernel_type =
"TimeDerivative";
133 std::string kernel_name =
_var_name +
"_" + kernel_type;
135 params.
set<NonlinearVariableName>(
"variable") =
_var_name;
138 _problem->addKernel(kernel_type, kernel_name, params);
143 std::string kernel_type =
"CahnHilliard";
145 std::string kernel_name =
_var_name +
"_" + kernel_type;
147 params.
set<NonlinearVariableName>(
"variable") =
_var_name;
148 params.
set<MaterialPropertyName>(
"mob_name") = getParam<MaterialPropertyName>(
"mobility");
149 params.
set<MaterialPropertyName>(
"f_name") =
150 getParam<MaterialPropertyName>(
"free_energy");
153 _problem->addKernel(kernel_type, kernel_name, params);
158 std::string kernel_type =
"CHInterface";
160 std::string kernel_name =
_var_name +
"_" + kernel_type;
162 params.
set<NonlinearVariableName>(
"variable") =
_var_name;
163 params.
set<MaterialPropertyName>(
"mob_name") = getParam<MaterialPropertyName>(
"mobility");
164 params.
set<MaterialPropertyName>(
"kappa_name") = getParam<MaterialPropertyName>(
"kappa");
167 _problem->addKernel(kernel_type, kernel_name, params);
174 std::string kernel_type =
"CoupledTimeDerivative";
176 std::string kernel_name =
_var_name +
"_" + kernel_type;
179 params.
set<std::vector<VariableName>>(
"v") = {
_var_name};
182 _problem->addKernel(kernel_type, kernel_name, params);
187 std::string kernel_type =
"SplitCHWRes";
189 std::string kernel_name =
_var_name +
"_" + kernel_type;
192 params.
set<MaterialPropertyName>(
"mob_name") = getParam<MaterialPropertyName>(
"mobility");
195 _problem->addKernel(kernel_type, kernel_name, params);
200 std::string kernel_type =
"SplitCHParsed";
202 std::string kernel_name =
_var_name +
"_" + kernel_type;
204 params.
set<NonlinearVariableName>(
"variable") =
_var_name;
206 params.
set<MaterialPropertyName>(
"f_name") =
207 getParam<MaterialPropertyName>(
"free_energy");
208 params.
set<MaterialPropertyName>(
"kappa_name") = getParam<MaterialPropertyName>(
"kappa");
211 _problem->addKernel(kernel_type, kernel_name, params);
218 std::string kernel_type =
"TimeDerivative";
220 std::string kernel_name =
_var_name +
"_" + kernel_type;
222 params.
set<NonlinearVariableName>(
"variable") =
_var_name;
225 _problem->addKernel(kernel_type, kernel_name, params);
230 std::string kernel_type =
"MatDiffusion";
232 std::string kernel_name =
_var_name +
"_" + kernel_type;
234 params.
set<NonlinearVariableName>(
"variable") =
_var_name;
236 params.
set<MaterialPropertyName>(
"diffusivity") =
237 getParam<MaterialPropertyName>(
"mobility");
240 _problem->addKernel(kernel_type, kernel_name, params);
244 std::string kernel_type =
"MatDiffusion";
249 params.
set<std::vector<VariableName>>(
"v") = {
_var_name};
250 params.
set<MaterialPropertyName>(
"diffusivity") = getParam<MaterialPropertyName>(
"kappa");
253 _problem->addKernel(kernel_type, kernel_name, params);
258 std::string kernel_type =
"CoupledMaterialDerivative";
263 params.
set<std::vector<VariableName>>(
"v") = {
_var_name};
264 params.
set<MaterialPropertyName>(
"f_name") =
265 getParam<MaterialPropertyName>(
"free_energy");
268 _problem->addKernel(kernel_type, kernel_name, params);
273 std::string kernel_type =
"CoefReaction";
278 params.
set<
Real>(
"coefficient") = -1.0;
281 _problem->addKernel(kernel_type, kernel_name, params);
virtual void act() override
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...
void mooseWarning(Args &&... args) const
static MooseEnum getNonlinearVariableFamilies()
const Real _scaling
Scaling parameter.
static InputParameters validParams()
static MooseEnum getNonlinearVariableOrders()
registerMooseAction("PhaseFieldApp", ConservedAction, "add_variable")
static InputParameters validParams()
std::string _chempot_name
Name of chemical potential variable for split solves.
const NonlinearVariableName _var_name
Name of the variable being created.
const std::string & type() const
const std::string & _current_task
static std::string variableType(const libMesh::FEType &fe_type, const bool is_fv=false, const bool is_array=false)
void paramError(const std::string ¶m, Args... args) const
std::string stringify(const T &t)
const SolveType _solve_type
Type of solve to use used in the action.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
libMesh::FEType _fe_type
FEType for the variable being created.
std::shared_ptr< FEProblemBase > & _problem
const InputParameters & parameters() const
ConservedAction(const InputParameters ¶ms)