13 #include "AddVariableAction.h"
14 #include "FEProblem.h"
15 #include "MooseMesh.h"
17 #include "libmesh/fe.h"
18 #include "libmesh/string_to_enum.h"
22 "add_navier_stokes_variables");
30 MooseEnum families(AddVariableAction::getNonlinearVariableFamilies(),
"LAGRANGE");
31 MooseEnum orders(AddVariableAction::getNonlinearVariableOrders(),
"FIRST");
32 params.addClassDescription(
"This class allows us to have a section of the input file like the "
33 "following which automatically adds all the required nonlinear "
34 "variables with the appropriate scaling.");
35 params.addParam<std::vector<SubdomainName>>(
36 "block",
"The list of block ids (SubdomainID) on which this action will be applied");
37 params.addParam<MooseEnum>(
38 "family", families,
"Specifies the family of FE shape functions to use for this variable");
39 params.addParam<MooseEnum>(
"order",
41 "Specifies the order of the FE shape function to use "
42 "for this variable (additional orders not listed are "
44 params.addRequiredParam<std::vector<Real>>(
45 "scaling",
"Specifies a scaling factor to apply to this variable");
52 _scaling(getParam<std::vector<Real>>(
"scaling")),
53 _blocks(getParam<std::vector<SubdomainName>>(
"block"))
67 mooseError(
"Must provide a scaling parameter for each variable.");
70 FEType fe_type(Utility::string_to_enum<Order>(getParam<MooseEnum>(
"order")),
71 Utility::string_to_enum<FEFamily>(getParam<MooseEnum>(
"family")));
73 std::set<SubdomainID> _block_ids;
74 for (
const auto & subdomain_name :
_blocks)
76 SubdomainID
id = _mesh->getSubdomainID(subdomain_name);
77 _block_ids.insert(
id);
80 auto var_type = AddVariableAction::determineType(fe_type, 1);
81 auto base_params = _factory.getValidParams(var_type);
82 base_params.set<MooseEnum>(
"order") = fe_type.order.get_order();
83 base_params.set<MooseEnum>(
"family") = Moose::stringify(fe_type.family);
84 if (_block_ids.size() != 0)
85 for (
const SubdomainID &
id : _block_ids)
86 base_params.set<std::vector<SubdomainName>>(
"block").push_back(Moose::stringify(
id));
89 for (
unsigned int i = 0; i <
_vars.size(); ++i)
91 InputParameters var_params(base_params);
92 var_params.set<std::vector<Real>>(
"scaling") = {
_scaling[i]};
93 _problem->addVariable(var_type,
_vars[i], var_params);
99 for (
const auto & aux_name :
_auxs)
100 _problem->addAuxVariable(var_type, aux_name, base_params);