www.mooseframework.org
AddNavierStokesBCsAction.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 
10 // Navier-Stokes includes
11 #include "NS.h"
13 
14 // MOOSE includes
15 #include "FEProblem.h"
16 #include "MooseMesh.h"
17 
18 registerMooseAction("NavierStokesApp", AddNavierStokesBCsAction, "add_navier_stokes_bcs");
19 
20 template <>
21 InputParameters
23 {
24  InputParameters params = validParams<MooseObjectAction>();
25  params.addClassDescription("This class allows us to have a section of the input file like the "
26  "following which adds BC objects for each requested boundary "
27  "condition.");
28  return params;
29 }
30 
32  : MooseObjectAction(parameters)
33 {
34 }
35 
37 
38 void
40 {
41  // The Mesh dimension tells us how many momentum BCs to add.
42  _dim = _mesh->dimension();
43 
44  if (_type == "NSWeakStagnationInletBC")
45  {
48  for (unsigned int component = 0; component < _dim; ++component)
50  }
51 
52  else if (_type == "NSNoPenetrationBC")
53  {
54  for (unsigned int component = 0; component < _dim; ++component)
56  }
57 
58  else if (_type == "NSStaticPressureOutletBC")
59  {
62  for (unsigned int component = 0; component < _dim; ++component)
64  }
65 }
66 
67 void
69 {
70  const std::string kernel_type = "NSMassWeakStagnationBC";
71  InputParameters params = _factory.getValidParams(kernel_type);
72  params.set<NonlinearVariableName>("variable") = NS::density;
73  setCommonParams(params);
74 
75  // Pick up values specific to this BC from the Action's params.
76  // This includes things like boundary, stagnation_pressure,
77  // stagnation_temperature, etc. This extra InputParameters object
78  // is provided by the MooseObjectAction base class.
79  params += _moose_object_pars;
80 
81  _problem->addBoundaryCondition(kernel_type, "weak_stagnation_mass_inflow", params);
82 }
83 
84 void
86 {
87  const std::string kernel_type = "NSEnergyWeakStagnationBC";
88  InputParameters params = _factory.getValidParams(kernel_type);
89  params.set<NonlinearVariableName>("variable") = NS::total_energy;
90  setCommonParams(params);
91  params += _moose_object_pars;
92  _problem->addBoundaryCondition(kernel_type, "weak_stagnation_energy_inflow", params);
93 }
94 
95 void
97 {
98  const static std::string momentums[3] = {NS::momentum_x, NS::momentum_y, NS::momentum_z};
99 
100  // Convective part
101  {
102  const std::string kernel_type = "NSMomentumConvectiveWeakStagnationBC";
103  InputParameters params = _factory.getValidParams(kernel_type);
104  params.set<NonlinearVariableName>("variable") = momentums[component];
105  setCommonParams(params);
106  params += _moose_object_pars;
107 
108  // Momentum Kernels also need the component.
109  params.set<unsigned int>("component") = component;
110 
111  _problem->addBoundaryCondition(kernel_type,
112  std::string("weak_stagnation_") + momentums[component] +
113  std::string("_convective_inflow"),
114  params);
115  }
116 
117  // Pressure part
118  {
119  const std::string kernel_type = "NSMomentumPressureWeakStagnationBC";
120  InputParameters params = _factory.getValidParams(kernel_type);
121  params.set<NonlinearVariableName>("variable") = momentums[component];
122  setCommonParams(params);
123  params += _moose_object_pars;
124 
125  // Momentum Kernels also need the component.
126  params.set<unsigned int>("component") = component;
127 
128  _problem->addBoundaryCondition(kernel_type,
129  std::string("weak_stagnation_") + momentums[component] +
130  std::string("_pressure_inflow"),
131  params);
132  }
133 }
134 
135 void
137 {
138  const static std::string momentums[3] = {NS::momentum_x, NS::momentum_y, NS::momentum_z};
139  const std::string kernel_type = "NSPressureNeumannBC";
140  InputParameters params = _factory.getValidParams(kernel_type);
141  params.set<NonlinearVariableName>("variable") = momentums[component];
142  setCommonParams(params);
143  params += _moose_object_pars;
144 
145  // These BCs also need the component and couping to the pressure.
146  params.set<unsigned int>("component") = component;
147  params.set<CoupledName>(NS::pressure) = {NS::pressure};
148 
149  _problem->addBoundaryCondition(
150  kernel_type, momentums[component] + std::string("_no_penetration"), params);
151 }
152 
153 void
155 {
156  const std::string kernel_type = "NSMassUnspecifiedNormalFlowBC";
157  InputParameters params = _factory.getValidParams(kernel_type);
158  params.set<NonlinearVariableName>("variable") = NS::density;
159  setCommonParams(params);
160  params += _moose_object_pars;
161  _problem->addBoundaryCondition(kernel_type, "mass_outflow", params);
162 }
163 
164 void
166 {
167  const static std::string momentums[3] = {NS::momentum_x, NS::momentum_y, NS::momentum_z};
168  const std::string kernel_type = "NSMomentumInviscidSpecifiedPressureBC";
169  InputParameters params = _factory.getValidParams(kernel_type);
170  params.set<NonlinearVariableName>("variable") = momentums[component];
171  setCommonParams(params);
172  params += _moose_object_pars;
173 
174  // These BCs also need the component.
175  params.set<unsigned int>("component") = component;
176 
177  _problem->addBoundaryCondition(
178  kernel_type, momentums[component] + std::string("_specified_pressure_outflow"), params);
179 }
180 
181 void
183 {
184  const std::string kernel_type = "NSEnergyInviscidSpecifiedPressureBC";
185  InputParameters params = _factory.getValidParams(kernel_type);
186  params.set<NonlinearVariableName>("variable") = NS::total_energy;
187  setCommonParams(params);
188  params += _moose_object_pars;
189  // This BC also requires the current value of the temperature.
191  _problem->addBoundaryCondition(kernel_type, "rhoE_specified_pressure_outflow", params);
192 }
193 
194 void
196 {
197  // coupled variables
198  params.set<CoupledName>(NS::density) = {NS::density};
200 
201  // Couple the appropriate number of velocities
202  coupleVelocities(params);
203  coupleMomentums(params);
204 }
205 
206 void
208 {
209  params.set<CoupledName>(NS::velocity_x) = {NS::velocity_x};
210 
211  if (_dim >= 2)
212  params.set<CoupledName>(NS::velocity_y) = {NS::velocity_y};
213 
214  if (_dim >= 3)
215  params.set<CoupledName>(NS::velocity_z) = {NS::velocity_z};
216 }
217 
218 void
220 {
221  params.set<CoupledName>(NS::momentum_x) = {NS::momentum_x};
222 
223  if (_dim >= 2)
224  params.set<CoupledName>(NS::momentum_y) = {NS::momentum_y};
225 
226  if (_dim >= 3)
227  params.set<CoupledName>(NS::momentum_z) = {NS::momentum_z};
228 }
NS::velocity_x
const std::string velocity_x
Definition: NS.h:22
AddNavierStokesBCsAction::addNoPenetrationBC
void addNoPenetrationBC(unsigned int component)
Definition: AddNavierStokesBCsAction.C:136
AddNavierStokesBCsAction::coupleVelocities
void coupleVelocities(InputParameters &params)
Definition: AddNavierStokesBCsAction.C:207
AddNavierStokesBCsAction::addNSEnergyInviscidSpecifiedPressureBC
void addNSEnergyInviscidSpecifiedPressureBC()
Definition: AddNavierStokesBCsAction.C:182
AddNavierStokesBCsAction::act
virtual void act()
Definition: AddNavierStokesBCsAction.C:39
NS::velocity_y
const std::string velocity_y
Definition: NS.h:23
AddNavierStokesBCsAction::addNSMassUnspecifiedNormalFlowBC
void addNSMassUnspecifiedNormalFlowBC()
Definition: AddNavierStokesBCsAction.C:154
AddNavierStokesBCsAction.h
NS::velocity_z
const std::string velocity_z
Definition: NS.h:24
NS::momentum_y
const std::string momentum_y
Definition: NS.h:18
AddNavierStokesBCsAction::addNSEnergyWeakStagnationBC
void addNSEnergyWeakStagnationBC()
Definition: AddNavierStokesBCsAction.C:85
AddNavierStokesBCsAction::setCommonParams
void setCommonParams(InputParameters &params)
Definition: AddNavierStokesBCsAction.C:195
AddNavierStokesBCsAction::~AddNavierStokesBCsAction
virtual ~AddNavierStokesBCsAction()
Definition: AddNavierStokesBCsAction.C:36
NS::density
const std::string density
Definition: NS.h:16
AddNavierStokesBCsAction::AddNavierStokesBCsAction
AddNavierStokesBCsAction(InputParameters parameters)
Definition: AddNavierStokesBCsAction.C:31
validParams< AddNavierStokesBCsAction >
InputParameters validParams< AddNavierStokesBCsAction >()
Definition: AddNavierStokesBCsAction.C:22
NS::momentum_z
const std::string momentum_z
Definition: NS.h:19
AddNavierStokesBCsAction::addNSMomentumInviscidSpecifiedPressureBC
void addNSMomentumInviscidSpecifiedPressureBC(unsigned int component)
Definition: AddNavierStokesBCsAction.C:165
MaterialTensorCalculatorTools::component
Real component(const SymmTensor &symm_tensor, unsigned int index)
Definition: MaterialTensorCalculatorTools.C:16
NS::momentum_x
const std::string momentum_x
Definition: NS.h:17
AddNavierStokesBCsAction
This class allows us to have a section of the input file like the following which adds BC objects for...
Definition: AddNavierStokesBCsAction.h:50
NS.h
registerMooseAction
registerMooseAction("NavierStokesApp", AddNavierStokesBCsAction, "add_navier_stokes_bcs")
NS::temperature
const std::string temperature
Definition: NS.h:26
AddNavierStokesBCsAction::coupleMomentums
void coupleMomentums(InputParameters &params)
Definition: AddNavierStokesBCsAction.C:219
AddNavierStokesBCsAction::_dim
unsigned int _dim
Definition: AddNavierStokesBCsAction.h:59
NS::total_energy
const std::string total_energy
Definition: NS.h:20
AddNavierStokesBCsAction::CoupledName
std::vector< VariableName > CoupledName
Definition: AddNavierStokesBCsAction.h:83
NS::pressure
const std::string pressure
Definition: NS.h:25
AddNavierStokesBCsAction::addNSMassWeakStagnationBC
void addNSMassWeakStagnationBC()
Definition: AddNavierStokesBCsAction.C:68
AddNavierStokesBCsAction::addNSMomentumWeakStagnationBC
void addNSMomentumWeakStagnationBC(unsigned int component)
Definition: AddNavierStokesBCsAction.C:96