12 #include "FEProblem.h"
13 #include "Conversion.h"
14 #include "AddVariableAction.h"
16 #include "libmesh/string_to_enum.h"
24 InputParameters params = validParams<Action>();
25 MooseEnum familyEnum = AddVariableAction::getNonlinearVariableFamilies();
26 params.addParam<MooseEnum>(
29 "Specifies the family of FE shape functions to use for the L variables");
30 MooseEnum orderEnum = AddVariableAction::getNonlinearVariableOrders();
31 params.addParam<MooseEnum>(
34 "Specifies the order of the FE shape function to use for the L variables");
35 params.addParam<Real>(
"scaling", 1.0,
"Specifies a scaling factor to apply to the L variables");
36 params.addRequiredParam<
unsigned int>(
37 "num_L",
"specifies the number of complex L variables will be solved for");
38 params.addRequiredParam<std::string>(
"L_name_base",
"Base name for the complex L variables");
39 params.addRequiredParam<std::vector<FileName>>(
"sub_filenames",
40 "This is the filename of the sub.i file");
41 params.addRequiredParam<AuxVariableName>(
"n_name",
"Name of atomic density variable");
48 _num_L(getParam<unsigned int>(
"num_L")),
49 _L_name_base(getParam<std::string>(
"L_name_base")),
50 _sub_filenames(getParam<std::vector<FileName>>(
"sub_filenames")),
51 _n_name(getParam<AuxVariableName>(
"n_name"))
58 ExecFlagEnum execute_options = MooseUtils::getDefaultExecFlagEnum();
59 execute_options = EXEC_TIMESTEP_BEGIN;
62 InputParameters poly_params = _factory.getValidParams(
"TransientMultiApp");
63 poly_params.set<MooseEnum>(
"app_type") =
"PhaseFieldApp";
64 poly_params.set<ExecFlagEnum>(
"execute_on") = execute_options;
65 poly_params.set<std::vector<FileName>>(
"input_files") =
_sub_filenames;
66 poly_params.set<
unsigned int>(
"max_procs_per_app") = 1;
67 poly_params.set<std::vector<Point>>(
"positions") = {Point()};
68 _problem->addMultiApp(
"TransientMultiApp",
"HHEquationSolver", poly_params);
70 poly_params = _factory.getValidParams(
"MultiAppNearestNodeTransfer");
71 poly_params.set<MultiMooseEnum>(
"direction") =
"to_multiapp";
72 poly_params.set<ExecFlagEnum>(
"execute_on") = execute_options;
73 poly_params.set<std::vector<AuxVariableName>>(
"variable") = {
_n_name};
74 poly_params.set<std::vector<VariableName>>(
"source_variable") = {
_n_name};
75 poly_params.set<MultiAppName>(
"multi_app") =
"HHEquationSolver";
76 _problem->addTransfer(
"MultiAppNearestNodeTransfer",
_n_name +
"_trans", poly_params);
79 for (
unsigned int l = 0; l <
_num_L; ++l)
85 std::string real_name = L_name +
"_real";
87 _problem->addAuxVariable(
89 FEType(Utility::string_to_enum<Order>(getParam<MooseEnum>(
"order")),
90 Utility::string_to_enum<FEFamily>(getParam<MooseEnum>(
"family"))));
92 poly_params = _factory.getValidParams(
"MultiAppNearestNodeTransfer");
93 poly_params.set<MultiMooseEnum>(
"direction") =
"from_multiapp";
94 poly_params.set<std::vector<AuxVariableName>>(
"variable") = {real_name};
95 poly_params.set<std::vector<VariableName>>(
"source_variable") = {real_name};
96 poly_params.set<MultiAppName>(
"multi_app") =
"HHEquationSolver";
97 _problem->addTransfer(
"MultiAppNearestNodeTransfer", real_name +
"_trans", poly_params);
102 std::string imag_name = L_name +
"_imag";
104 _problem->addAuxVariable(
106 FEType(Utility::string_to_enum<Order>(getParam<MooseEnum>(
"order")),
107 Utility::string_to_enum<FEFamily>(getParam<MooseEnum>(
"family"))));
109 poly_params = _factory.getValidParams(
"MultiAppNearestNodeTransfer");
110 poly_params.set<MultiMooseEnum>(
"direction") =
"from_multiapp";
111 poly_params.set<std::vector<AuxVariableName>>(
"variable") = {imag_name};
112 poly_params.set<std::vector<VariableName>>(
"source_variable") = {imag_name};
113 poly_params.set<MultiAppName>(
"multi_app") =
"HHEquationSolver";
114 _problem->addTransfer(
"MultiAppNearestNodeTransfer", imag_name +
"_trans", poly_params);