www.mooseframework.org
NSKernel.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"
12 #include "NSKernel.h"
13 
14 // FluidProperties includes
16 
17 // MOOSE includes
18 #include "MooseMesh.h"
19 
20 namespace nms = NS;
21 
24 {
26  params.addClassDescription("This class couples together all the variables for the compressible "
27  "Navier-Stokes equations to allow them to be used in derived Kernel "
28  "classes.");
29  params.addRequiredCoupledVar(nms::velocity_x, "x-velocity");
30  params.addCoupledVar(nms::velocity_y, "y-velocity"); // only required in 2D and 3D
31  params.addCoupledVar(nms::velocity_z, "z-velocity"); // only required in 3D
32  params.addRequiredCoupledVar(nms::density, "density");
33  params.addRequiredCoupledVar(nms::momentum_x, "x-momentum");
34  params.addCoupledVar(nms::momentum_y, "y-momentum"); // only required in 2D and 3D
35  params.addCoupledVar(nms::momentum_z, "z-momentum"); // only required in 3D
36  params.addRequiredCoupledVar(nms::total_energy_density, "total energy density");
37  params.addRequiredParam<UserObjectName>("fluid_properties",
38  "The name of the user object for fluid properties");
39  return params;
40 }
41 
43  : Kernel(parameters),
44  // Coupled variables
45  _u_vel(coupledValue(nms::velocity_x)),
46  _v_vel(_mesh.dimension() >= 2 ? coupledValue(nms::velocity_y) : _zero),
47  _w_vel(_mesh.dimension() == 3 ? coupledValue(nms::velocity_z) : _zero),
48 
49  _rho(coupledValue(nms::density)),
50  _rho_u(coupledValue(nms::momentum_x)),
51  _rho_v(_mesh.dimension() >= 2 ? coupledValue(nms::momentum_y) : _zero),
52  _rho_w(_mesh.dimension() == 3 ? coupledValue(nms::momentum_z) : _zero),
53  _rho_et(coupledValue(nms::total_energy_density)),
54 
55  // Gradients
56  _grad_rho(coupledGradient(nms::density)),
57  _grad_rho_u(coupledGradient(nms::momentum_x)),
58  _grad_rho_v(_mesh.dimension() >= 2 ? coupledGradient(nms::momentum_y) : _grad_zero),
59  _grad_rho_w(_mesh.dimension() == 3 ? coupledGradient(nms::momentum_z) : _grad_zero),
60  _grad_rho_et(coupledGradient(nms::total_energy_density)),
61 
62  // Variable numberings
63  _rho_var_number(coupled(nms::density)),
64  _rhou_var_number(coupled(nms::momentum_x)),
65  _rhov_var_number(_mesh.dimension() >= 2 ? coupled(nms::momentum_y) : libMesh::invalid_uint),
66  _rhow_var_number(_mesh.dimension() == 3 ? coupled(nms::momentum_z) : libMesh::invalid_uint),
67  _rho_et_var_number(coupled(nms::total_energy_density)),
68 
69  // Material properties
70  _dynamic_viscosity(getMaterialProperty<Real>("dynamic_viscosity")),
71  _viscous_stress_tensor(getMaterialProperty<RealTensorValue>("viscous_stress_tensor")),
72 
73  // FluidProperties UserObject
74  _fp(getUserObject<IdealGasFluidProperties>("fluid_properties"))
75 {
76 }
77 
78 bool
80 {
81  if (var == _rho_var_number || var == _rhou_var_number || var == _rhov_var_number ||
82  var == _rhow_var_number || var == _rho_et_var_number)
83  return true;
84  else
85  return false;
86 }
87 
88 unsigned
90 {
91  // Convert the Moose numbering to:
92  // 0 for rho
93  // 1 for rho*u
94  // 2 for rho*v
95  // 3 for rho*w
96  // 4 for rho*e
97  // regardless of the problem dimension, etc.
98  unsigned mapped_var_number = 99;
99 
100  if (var == _rho_var_number)
101  mapped_var_number = 0;
102  else if (var == _rhou_var_number)
103  mapped_var_number = 1;
104  else if (var == _rhov_var_number)
105  mapped_var_number = 2;
106  else if (var == _rhow_var_number)
107  mapped_var_number = 3;
108  else if (var == _rho_et_var_number)
109  mapped_var_number = 4;
110  else
111  mooseError("Invalid var!");
112 
113  return mapped_var_number;
114 }
static const std::string total_energy_density
Definition: NS.h:63
static const std::string momentum_x
Definition: NS.h:35
static InputParameters validParams()
const unsigned int invalid_uint
static const std::string velocity_z
Definition: NS.h:48
static const std::string density
Definition: NS.h:33
unsigned _rhov_var_number
Definition: NSKernel.h:54
unsigned _rho_var_number
Definition: NSKernel.h:52
static const std::string velocity_x
Definition: NS.h:46
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...
void addRequiredParam(const std::string &name, const std::string &doc_string)
TensorValue< Real > RealTensorValue
unsigned _rhow_var_number
Definition: NSKernel.h:55
bool isNSVariable(unsigned var)
Helper functions for mapping Moose variable numberings into the "canonical" numbering for the compres...
Definition: NSKernel.C:79
static const std::string velocity_y
Definition: NS.h:47
void addCoupledVar(const std::string &name, const std::string &doc_string)
static const std::string momentum_y
Definition: NS.h:36
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
unsigned _rho_et_var_number
Definition: NSKernel.h:56
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
static const std::string momentum_z
Definition: NS.h:37
Ideal gas fluid properties Default parameters are for air at atmospheric pressure and temperature...
static InputParameters validParams()
Definition: NSKernel.C:23
NSKernel(const InputParameters &parameters)
Definition: NSKernel.C:42
unsigned mapVarNumber(unsigned var)
Definition: NSKernel.C:89
unsigned _rhou_var_number
Definition: NSKernel.h:53