www.mooseframework.org
AddNavierStokesKernelsAction.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
12 #include "NS.h"
13 
14 // MOOSE includes
15 #include "FEProblem.h"
16 
17 registerMooseAction("NavierStokesApp", AddNavierStokesKernelsAction, "add_navier_stokes_kernels");
18 
19 template <>
20 InputParameters
22 {
23  InputParameters params = validParams<NSAction>();
24  params.addClassDescription("This class allows us to have a section of the input file like the "
25  "following which automatically adds Kernels and AuxKernels for all "
26  "the required nonlinear and auxiliary variables.");
27  params.addRequiredParam<UserObjectName>("fluid_properties",
28  "The name of the user object for fluid properties");
29  return params;
30 }
31 
33  : NSAction(parameters), _fp_name(getParam<UserObjectName>("fluid_properties"))
34 {
35 }
36 
38 
39 void
41 {
42  // Call the base class's act() function to initialize the _vars and _auxs names.
43  NSAction::act();
44 
45  // Add time derivative Kernel for all the _vars
46  for (const auto & name : _vars)
47  {
48  const std::string kernel_type = "TimeDerivative";
49  InputParameters params = _factory.getValidParams(kernel_type);
50  params.set<NonlinearVariableName>("variable") = name;
51  _problem->addKernel(kernel_type, name + std::string("_time_deriv"), params);
52  }
53 
54  // Add all the inviscid flux Kernels.
57  for (unsigned int component = 0; component < _dim; ++component)
59 
60  // Add SUPG Kernels
61  addNSSUPGMass();
63  for (unsigned int component = 0; component < _dim; ++component)
65 
66  // Add AuxKernels.
67  addPressureOrTemperatureAux("NSPressureAux");
68  addPressureOrTemperatureAux("NSTemperatureAux");
70  addNSMachAux();
73  for (unsigned int component = 0; component < _dim; ++component)
75 }
76 
77 void
79 {
80  const std::string kernel_type = "NSSUPGMass";
81  InputParameters params = _factory.getValidParams(kernel_type);
82  params.set<NonlinearVariableName>("variable") = NS::density;
83  setCommonParams(params);
84 
85  // SUPG Kernels also need temperature and enthalpy currently.
87  params.set<CoupledName>(NS::enthalpy) = {NS::enthalpy};
88 
89  _problem->addKernel(kernel_type, "rho_supg", params);
90 }
91 
92 void
94 {
95  const static std::string momentums[3] = {NS::momentum_x, NS::momentum_y, NS::momentum_z};
96 
97  const std::string kernel_type = "NSSUPGMomentum";
98  InputParameters params = _factory.getValidParams(kernel_type);
99  params.set<NonlinearVariableName>("variable") = momentums[component];
100  setCommonParams(params);
101 
102  // SUPG Kernels also need temperature and enthalpy currently.
104  params.set<CoupledName>(NS::enthalpy) = {NS::enthalpy};
105 
106  // Momentum Kernels also need the component.
107  params.set<unsigned int>("component") = component;
108 
109  _problem->addKernel(kernel_type, momentums[component] + std::string("_supg"), params);
110 }
111 
112 void
114 {
115  const std::string kernel_type = "NSSUPGEnergy";
116  InputParameters params = _factory.getValidParams(kernel_type);
117  params.set<NonlinearVariableName>("variable") = NS::total_energy;
118  setCommonParams(params);
119 
120  // SUPG Kernels also need temperature and enthalpy currently.
122  params.set<CoupledName>(NS::enthalpy) = {NS::enthalpy};
123 
124  _problem->addKernel(kernel_type, "rhoE_supg", params);
125 }
126 
127 void
129 {
130  const std::string kernel_type = "ParsedAux";
131 
132  InputParameters params = _factory.getValidParams(kernel_type);
133  params.set<AuxVariableName>("variable") = NS::specific_volume;
134 
135  // arguments
136  params.set<CoupledName>("args") = {NS::density};
137 
138  // expression
139  std::string function = "if(" + NS::density + " = 0, 1e10, 1 / " + NS::density + ")";
140  params.set<std::string>("function") = function;
141 
142  _problem->addAuxKernel(kernel_type, "specific_volume_auxkernel", params);
143 }
144 
145 void
147 {
148  const std::string kernel_type = "NSInternalEnergyAux";
149 
150  InputParameters params = _factory.getValidParams(kernel_type);
151  params.set<AuxVariableName>("variable") = NS::internal_energy;
152 
153  // coupled variables
154  params.set<CoupledName>(NS::density) = {NS::density};
156 
157  // Couple the appropriate number of velocities
158  coupleVelocities(params);
159 
160  _problem->addAuxKernel(kernel_type, "internal_energy_auxkernel", params);
161 }
162 
163 void
165 {
166  const std::string kernel_type = "NSMachAux";
167 
168  InputParameters params = _factory.getValidParams(kernel_type);
169  params.set<AuxVariableName>("variable") = NS::mach_number;
170 
171  // coupled variables
174 
175  // Couple the appropriate number of velocities
176  coupleVelocities(params);
177 
178  params.set<UserObjectName>("fluid_properties") = _fp_name;
179 
180  _problem->addAuxKernel(kernel_type, "mach_auxkernel", params);
181 }
182 
183 void
185 {
186  const std::string kernel_type = "NSEnthalpyAux";
187 
188  InputParameters params = _factory.getValidParams(kernel_type);
189  params.set<AuxVariableName>("variable") = NS::enthalpy;
190 
191  // coupled variables
192  params.set<CoupledName>(NS::density) = {NS::density};
194  params.set<CoupledName>(NS::pressure) = {NS::pressure};
195 
196  _problem->addAuxKernel(kernel_type, "enthalpy_auxkernel", params);
197 }
198 
199 void
201 {
202  const std::string kernel_type = "NSVelocityAux";
203  const static std::string velocities[3] = {NS::velocity_x, NS::velocity_y, NS::velocity_z};
204  const static std::string momentums[3] = {NS::momentum_x, NS::momentum_y, NS::momentum_z};
205 
206  InputParameters params = _factory.getValidParams(kernel_type);
207  params.set<AuxVariableName>("variable") = velocities[component];
208 
209  // coupled variables
210  params.set<CoupledName>(NS::density) = {NS::density};
211  params.set<CoupledName>("momentum") = {momentums[component]};
212  params.set<UserObjectName>("fluid_properties") = _fp_name;
213 
214  _problem->addAuxKernel(kernel_type, velocities[component] + "_auxkernel", params);
215 }
216 
217 void
219 {
220  InputParameters params = _factory.getValidParams(kernel_type);
221  std::string var_name = (kernel_type == "NSPressureAux" ? NS::pressure : NS::temperature);
222  params.set<AuxVariableName>("variable") = var_name;
223 
224  // coupled variables
227  params.set<UserObjectName>("fluid_properties") = _fp_name;
228 
229  _problem->addAuxKernel(kernel_type, var_name + "_auxkernel", params);
230 }
231 
232 void
234 {
235  const std::string kernel_type = "NSMassInviscidFlux";
236  InputParameters params = _factory.getValidParams(kernel_type);
237  params.set<NonlinearVariableName>("variable") = NS::density;
238  setCommonParams(params);
239  _problem->addKernel(kernel_type, "rho_if", params);
240 }
241 
242 void
244 {
245  const static std::string momentums[3] = {NS::momentum_x, NS::momentum_y, NS::momentum_z};
246  const std::string kernel_type = "NSMomentumInviscidFlux";
247  InputParameters params = _factory.getValidParams(kernel_type);
248  params.set<NonlinearVariableName>("variable") = momentums[component];
249  setCommonParams(params);
250 
251  // Extra stuff needed by momentum Kernels
252  params.set<CoupledName>(NS::pressure) = {NS::pressure};
253  params.set<unsigned int>("component") = component;
254 
255  // Add the Kernel
256  _problem->addKernel(kernel_type, momentums[component] + std::string("if"), params);
257 }
258 
259 void
261 {
262  const std::string kernel_type = "NSEnergyInviscidFlux";
263  InputParameters params = _factory.getValidParams(kernel_type);
264  params.set<NonlinearVariableName>("variable") = NS::total_energy;
265  setCommonParams(params);
266 
267  // Extra stuff needed by energy equation
268  params.set<CoupledName>(NS::enthalpy) = {NS::enthalpy};
269 
270  // Add the Kernel
271  _problem->addKernel(kernel_type, "rhoE_if", params);
272 }
273 
274 void
276 {
277  // coupled variables
278  params.set<CoupledName>(NS::density) = {NS::density};
280 
281  // Couple the appropriate number of velocities
282  coupleVelocities(params);
283  coupleMomentums(params);
284 
285  // FluidProperties object
286  params.set<UserObjectName>("fluid_properties") = _fp_name;
287 }
288 
289 void
291 {
292  params.set<CoupledName>(NS::velocity_x) = {NS::velocity_x};
293 
294  if (_dim >= 2)
295  params.set<CoupledName>(NS::velocity_y) = {NS::velocity_y};
296 
297  if (_dim >= 3)
298  params.set<CoupledName>(NS::velocity_z) = {NS::velocity_z};
299 }
300 
301 void
303 {
304  params.set<CoupledName>(NS::momentum_x) = {NS::momentum_x};
305 
306  if (_dim >= 2)
307  params.set<CoupledName>(NS::momentum_y) = {NS::momentum_y};
308 
309  if (_dim >= 3)
310  params.set<CoupledName>(NS::momentum_z) = {NS::momentum_z};
311 }
AddNavierStokesKernelsAction::addNSMassInviscidFlux
void addNSMassInviscidFlux()
Definition: AddNavierStokesKernelsAction.C:233
NS::velocity_x
const std::string velocity_x
Definition: NS.h:22
AddNavierStokesKernelsAction::_fp_name
UserObjectName _fp_name
Definition: AddNavierStokesKernelsAction.h:65
registerMooseAction
registerMooseAction("NavierStokesApp", AddNavierStokesKernelsAction, "add_navier_stokes_kernels")
AddNavierStokesKernelsAction::addNSSUPGEnergy
void addNSSUPGEnergy()
Definition: AddNavierStokesKernelsAction.C:113
AddNavierStokesKernelsAction::addNSInternalEnergyAux
void addNSInternalEnergyAux()
Definition: AddNavierStokesKernelsAction.C:146
AddNavierStokesKernelsAction::addNSVelocityAux
void addNSVelocityAux(unsigned int component)
Definition: AddNavierStokesKernelsAction.C:200
AddNavierStokesKernelsAction::addNSSUPGMass
void addNSSUPGMass()
Definition: AddNavierStokesKernelsAction.C:78
NS::specific_volume
const std::string specific_volume
Definition: NS.h:30
AddNavierStokesKernelsAction
This class allows us to have a section of the input file like the following which automatically adds ...
Definition: AddNavierStokesKernelsAction.h:29
validParams< NSAction >
InputParameters validParams< NSAction >()
Definition: NSAction.C:19
AddNavierStokesKernelsAction::coupleVelocities
void coupleVelocities(InputParameters &params)
Definition: AddNavierStokesKernelsAction.C:290
NS::velocity_y
const std::string velocity_y
Definition: NS.h:23
AddNavierStokesKernelsAction::AddNavierStokesKernelsAction
AddNavierStokesKernelsAction(InputParameters parameters)
Definition: AddNavierStokesKernelsAction.C:32
AddNavierStokesKernelsAction::act
virtual void act()
Definition: AddNavierStokesKernelsAction.C:40
NS::velocity_z
const std::string velocity_z
Definition: NS.h:24
AddNavierStokesKernelsAction::coupleMomentums
void coupleMomentums(InputParameters &params)
Definition: AddNavierStokesKernelsAction.C:302
NSAction::_vars
std::vector< std::string > _vars
Definition: NSAction.h:34
NS::momentum_y
const std::string momentum_y
Definition: NS.h:18
NSAction::act
virtual void act()
Definition: NSAction.C:35
NS::mach_number
const std::string mach_number
Definition: NS.h:28
NSAction::CoupledName
std::vector< VariableName > CoupledName
Definition: NSAction.h:42
AddNavierStokesKernelsAction::addNSSUPGMomentum
void addNSSUPGMomentum(unsigned int component)
Definition: AddNavierStokesKernelsAction.C:93
NSAction::_dim
unsigned int _dim
Definition: NSAction.h:39
AddNavierStokesKernelsAction::setCommonParams
void setCommonParams(InputParameters &params)
Definition: AddNavierStokesKernelsAction.C:275
NSAction
This is a base Action class for the Navier-Stokes module which is responsible for building lists of n...
Definition: NSAction.h:25
AddNavierStokesKernelsAction::addNSEnergyInviscidFlux
void addNSEnergyInviscidFlux()
Definition: AddNavierStokesKernelsAction.C:260
NS::density
const std::string density
Definition: NS.h:16
NS::enthalpy
const std::string enthalpy
Definition: NS.h:27
AddNavierStokesKernelsAction::addNSMachAux
void addNSMachAux()
Definition: AddNavierStokesKernelsAction.C:164
name
const std::string name
Definition: Setup.h:21
NS::momentum_z
const std::string momentum_z
Definition: NS.h:19
AddNavierStokesKernelsAction::addNSEnthalpyAux
void addNSEnthalpyAux()
Definition: AddNavierStokesKernelsAction.C:184
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
NS::internal_energy
const std::string internal_energy
Definition: NS.h:29
AddNavierStokesKernelsAction::addSpecificVolumeComputation
void addSpecificVolumeComputation()
Definition: AddNavierStokesKernelsAction.C:128
NS.h
AddNavierStokesKernelsAction::addNSMomentumInviscidFlux
void addNSMomentumInviscidFlux(unsigned int component)
Definition: AddNavierStokesKernelsAction.C:243
AddNavierStokesKernelsAction.h
NS::temperature
const std::string temperature
Definition: NS.h:26
validParams< AddNavierStokesKernelsAction >
InputParameters validParams< AddNavierStokesKernelsAction >()
Definition: AddNavierStokesKernelsAction.C:21
AddNavierStokesKernelsAction::~AddNavierStokesKernelsAction
virtual ~AddNavierStokesKernelsAction()
Definition: AddNavierStokesKernelsAction.C:37
AddNavierStokesKernelsAction::addPressureOrTemperatureAux
void addPressureOrTemperatureAux(const std::string &kernel_type)
Definition: AddNavierStokesKernelsAction.C:218
NS::total_energy
const std::string total_energy
Definition: NS.h:20
NS::pressure
const std::string pressure
Definition: NS.h:25