www.mooseframework.org
AddNavierStokesVariablesAction.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
11 
12 // MOOSE includes
13 #include "AddVariableAction.h"
14 #include "FEProblem.h"
15 #include "MooseMesh.h"
16 
17 #include "libmesh/fe.h"
18 #include "libmesh/string_to_enum.h"
19 
20 registerMooseAction("NavierStokesApp",
22  "add_navier_stokes_variables");
23 
24 template <>
25 InputParameters
27 {
28  InputParameters params = validParams<NSAction>();
29 
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",
40  orders,
41  "Specifies the order of the FE shape function to use "
42  "for this variable (additional orders not listed are "
43  "allowed)");
44  params.addRequiredParam<std::vector<Real>>(
45  "scaling", "Specifies a scaling factor to apply to this variable");
46 
47  return params;
48 }
49 
51  : NSAction(parameters),
52  _scaling(getParam<std::vector<Real>>("scaling")),
53  _blocks(getParam<std::vector<SubdomainName>>("block"))
54 {
55 }
56 
58 
59 void
61 {
62  // Call the base class's act() function to initialize the _vars and _auxs names.
63  NSAction::act();
64 
65  // Make sure the number of scaling parameters matches the number of variables
66  if (_scaling.size() != _vars.size())
67  mooseError("Must provide a scaling parameter for each variable.");
68 
69  // All variables have the same type
70  FEType fe_type(Utility::string_to_enum<Order>(getParam<MooseEnum>("order")),
71  Utility::string_to_enum<FEFamily>(getParam<MooseEnum>("family")));
72 
73  std::set<SubdomainID> _block_ids;
74  for (const auto & subdomain_name : _blocks)
75  {
76  SubdomainID id = _mesh->getSubdomainID(subdomain_name);
77  _block_ids.insert(id);
78  }
79 
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));
87 
88  // Add the variables to the FEProblemBase
89  for (unsigned int i = 0; i < _vars.size(); ++i)
90  {
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);
94  }
95 
96  // Add Aux variables. These are all required in order for the code
97  // to run, so they should not be independently selectable by the
98  // user.
99  for (const auto & aux_name : _auxs)
100  _problem->addAuxVariable(var_type, aux_name, base_params);
101 }
AddNavierStokesVariablesAction::_blocks
std::vector< SubdomainName > _blocks
Definition: AddNavierStokesVariablesAction.h:43
NSAction::_auxs
std::vector< std::string > _auxs
Definition: NSAction.h:35
validParams< AddNavierStokesVariablesAction >
InputParameters validParams< AddNavierStokesVariablesAction >()
Definition: AddNavierStokesVariablesAction.C:26
validParams< NSAction >
InputParameters validParams< NSAction >()
Definition: NSAction.C:19
AddNavierStokesVariablesAction::_scaling
std::vector< Real > _scaling
Definition: AddNavierStokesVariablesAction.h:42
NSAction::_vars
std::vector< std::string > _vars
Definition: NSAction.h:34
NSAction::act
virtual void act()
Definition: NSAction.C:35
AddNavierStokesVariablesAction::act
virtual void act()
Definition: AddNavierStokesVariablesAction.C:60
AddNavierStokesVariablesAction.h
AddNavierStokesVariablesAction::AddNavierStokesVariablesAction
AddNavierStokesVariablesAction(InputParameters parameters)
Definition: AddNavierStokesVariablesAction.C:50
AddNavierStokesVariablesAction
This class allows us to have a section of the input file like the following which automatically adds ...
Definition: AddNavierStokesVariablesAction.h:33
NSAction
This is a base Action class for the Navier-Stokes module which is responsible for building lists of n...
Definition: NSAction.h:25
AddNavierStokesVariablesAction::~AddNavierStokesVariablesAction
virtual ~AddNavierStokesVariablesAction()
Definition: AddNavierStokesVariablesAction.C:57
registerMooseAction
registerMooseAction("NavierStokesApp", AddNavierStokesVariablesAction, "add_navier_stokes_variables")