12 #include "FEProblem.h"
13 #include "Conversion.h"
21 InputParameters params = validParams<Action>();
22 params.addClassDescription(
23 "Set up kernels for the rational function fit (RFF) phase field crystal model");
24 params.addRequiredParam<
unsigned int>(
25 "num_L",
"specifies the number of complex L variables will be solved for");
26 params.addRequiredParam<VariableName>(
"n_name",
"Variable name used for the n variable");
27 params.addRequiredParam<std::string>(
"L_name_base",
"Base name for the complex L variables");
28 params.addParam<MaterialPropertyName>(
"mob_name",
"M",
"The mobility used for n in this model");
29 MooseEnum log_options(
"tolerance cancelation expansion");
30 params.addRequiredParam<MooseEnum>(
31 "log_approach", log_options,
"Which approach will be used to handle the natural log");
32 params.addParam<Real>(
"tol", 1.0e-9,
"Tolerance used when the tolerance approach is chosen");
33 params.addParam<Real>(
34 "n_exp_terms", 4,
"Number of terms used in the Taylor expansion of the natural log term");
35 params.addParam<
bool>(
36 "use_displaced_mesh",
false,
"Whether to use displaced mesh in the kernels");
42 _num_L(getParam<unsigned int>(
"num_L")),
43 _L_name_base(getParam<std::string>(
"L_name_base")),
44 _n_name(getParam<VariableName>(
"n_name"))
52 for (
unsigned int l = 0; l <
_num_L; ++l)
58 std::string real_name = L_name +
"_real";
59 std::string imag_name = L_name +
"_imag";
66 InputParameters poly_params = _factory.getValidParams(
"Diffusion");
67 poly_params.set<NonlinearVariableName>(
"variable") = real_name;
68 poly_params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
69 _problem->addKernel(
"Diffusion",
"diff_" + real_name, poly_params);
72 poly_params = _factory.getValidParams(
"HHPFCRFF");
73 poly_params.set<NonlinearVariableName>(
"variable") = real_name;
74 poly_params.set<
bool>(
"positive") =
true;
75 poly_params.set<MaterialPropertyName>(
"prop_name") =
"alpha_R_" + Moose::stringify(l);
76 poly_params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
77 _problem->addKernel(
"HHPFCRFF",
"HH1_" + real_name, poly_params);
82 poly_params = _factory.getValidParams(
"HHPFCRFF");
83 poly_params.set<NonlinearVariableName>(
"variable") = real_name;
84 poly_params.set<
bool>(
"positive") =
false;
85 poly_params.set<std::vector<VariableName>>(
"coupled_var").push_back(imag_name);
86 poly_params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
87 poly_params.set<MaterialPropertyName>(
"prop_name") =
"alpha_I_" + Moose::stringify(l);
88 _problem->addKernel(
"HHPFCRFF",
"HH2_" + real_name, poly_params);
92 poly_params = _factory.getValidParams(
"HHPFCRFF");
93 poly_params.set<NonlinearVariableName>(
"variable") = real_name;
94 poly_params.set<
bool>(
"positive") =
false;
95 poly_params.set<std::vector<VariableName>>(
"coupled_var").push_back(
_n_name);
96 poly_params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
97 poly_params.set<MaterialPropertyName>(
"prop_name") =
"A_R_" + Moose::stringify(l);
98 _problem->addKernel(
"HHPFCRFF",
"HH3_" + real_name, poly_params);
106 InputParameters poly_params = _factory.getValidParams(
"Diffusion");
107 poly_params.set<NonlinearVariableName>(
"variable") = imag_name;
108 poly_params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
109 _problem->addKernel(
"Diffusion",
"diff_" + imag_name, poly_params);
112 poly_params = _factory.getValidParams(
"HHPFCRFF");
113 poly_params.set<NonlinearVariableName>(
"variable") = imag_name;
114 poly_params.set<
bool>(
"positive") =
true;
115 poly_params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
116 poly_params.set<MaterialPropertyName>(
"prop_name") =
"alpha_R_" + Moose::stringify(l);
117 _problem->addKernel(
"HHPFCRFF",
"HH1_" + imag_name, poly_params);
120 poly_params = _factory.getValidParams(
"HHPFCRFF");
121 poly_params.set<NonlinearVariableName>(
"variable") = imag_name;
122 poly_params.set<
bool>(
"positive") =
true;
123 poly_params.set<std::vector<VariableName>>(
"coupled_var").push_back(real_name);
124 poly_params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
125 poly_params.set<MaterialPropertyName>(
"prop_name") =
"alpha_I_" + Moose::stringify(l);
126 _problem->addKernel(
"HHPFCRFF",
"HH2_" + imag_name, poly_params);
129 poly_params = _factory.getValidParams(
"HHPFCRFF");
130 poly_params.set<NonlinearVariableName>(
"variable") = imag_name;
131 poly_params.set<
bool>(
"positive") =
false;
132 poly_params.set<std::vector<VariableName>>(
"coupled_var").push_back(
_n_name);
133 poly_params.set<
bool>(
"use_displaced_mesh") = getParam<bool>(
"use_displaced_mesh");
134 poly_params.set<MaterialPropertyName>(
"prop_name") =
"A_I_" + Moose::stringify(l);
135 _problem->addKernel(
"HHPFCRFF",
"HH3_" + imag_name, poly_params);