https://mooseframework.inl.gov
WCNSFVFlowPhysicsBase.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
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 #pragma once
11 
14 
15 #define registerWCNSFVFlowPhysicsBaseTasks(app_name, derived_name) \
16  registerPhysicsBaseTasks(app_name, derived_name); \
17  registerMooseAction(app_name, derived_name, "add_geometric_rm"); \
18  registerMooseAction(app_name, derived_name, "add_variables_physics"); \
19  registerMooseAction(app_name, derived_name, "add_ics_physics"); \
20  registerMooseAction(app_name, derived_name, "add_materials_physics"); \
21  registerMooseAction(app_name, derived_name, "add_user_object"); \
22  registerMooseAction(app_name, derived_name, "add_postprocessor"); \
23  registerMooseAction(app_name, derived_name, "add_corrector"); \
24  registerMooseAction(app_name, derived_name, "get_turbulence_physics")
25 
30 {
31 public:
33 
35 
37  bool hasFlowEquations() const { return _has_flow_equations; }
44 
46  const std::vector<std::string> & getVelocityNames() const { return _velocity_names; }
47  const NonlinearVariableName & getPressureName() const { return _pressure_name; }
48  const NonlinearVariableName & getFluidTemperatureName() const { return _fluid_temperature_name; }
49  MooseFunctorName getPorosityFunctorName(const bool smoothed) const;
50 
51  // Getters to interact with other WCNSFVPhysics classes
53  const MooseEnum & compressibility() const { return _compressibility; }
57  RealVectorValue gravityVector() const { return getParam<RealVectorValue>("gravity"); }
59  const MooseFunctorName & densityName() const { return _density_name; }
61  const MooseFunctorName & dynamicViscosityName() const { return _dynamic_viscosity_name; }
66  {
68  }
71  {
73  }
75  const std::vector<BoundaryName> & getInletBoundaries() const { return _inlet_boundaries; }
77  const std::vector<BoundaryName> & getOutletBoundaries() const { return _outlet_boundaries; }
79  const std::vector<BoundaryName> & getWallBoundaries() const { return _wall_boundaries; }
81  const std::vector<BoundaryName> & getHydraulicSeparators() const { return _hydraulic_separators; }
83  NS::MomentumInletTypes inletBoundaryType(const BoundaryName & boundary_name) const
84  {
86  static_cast<int>(libmesh_map_find(_momentum_inlet_types, boundary_name)));
87  }
89  const std::vector<Point> & getFluxInletDirections() const { return _flux_inlet_directions; }
91  const std::vector<PostprocessorName> & getFluxInletPPs() const { return _flux_inlet_pps; }
93  virtual MooseFunctorName getLinearFrictionCoefName() const = 0;
95  const UserObjectName & rhieChowUOName() const;
97  unsigned short getNumberAlgebraicGhostingLayersNeeded() const override;
98 
99 protected:
100  virtual void initializePhysicsAdditional() override;
101  virtual void actOnAdditionalTasks() override;
102  virtual void addSolverVariables() override = 0;
103  virtual void addInitialConditions() override;
104  virtual void addFVKernels() override = 0;
105  virtual void addFVBCs() override;
106  virtual void addMaterials() override;
107  virtual void addUserObjects() override = 0;
108  virtual void addPostprocessors() override;
109 
115  virtual void addMomentumTimeKernels() = 0;
116  virtual void addMomentumPressureKernels() = 0;
117  virtual void addMomentumGravityKernels() = 0;
118  virtual void addMomentumFrictionKernels() = 0;
119  virtual void addMomentumBoussinesqKernels() = 0;
127  virtual void addAxisymmetricViscousSourceKernel(const std::vector<SubdomainName> & /*rz_blocks*/,
128  unsigned int /*radial_index*/)
129  {
130  }
131 
134  virtual void addInletBC() = 0;
135  virtual void addOutletBC() = 0;
136  virtual void addWallsBC() = 0;
137  virtual void addSeparatorBC() = 0;
138 
140  virtual bool hasForchheimerFriction() const = 0;
141 
148 
150  virtual void addRhieChowUserObjects() = 0;
151 
153  VariableName getFlowVariableName(const std::string & default_name) const;
154 
156  bool hasTurbulencePhysics() const
157  {
160  else
161  return false;
162  }
163 
166 
168  std::vector<SubdomainName> getAxisymmetricRZBlocks() const;
169 
171  const TagName _pressure_tag = "p_tag";
172 
177 
182 
186  const MooseFunctorName _porosity_name;
188  MooseFunctorName _flow_porosity_functor_name;
189 
191  const std::vector<std::string> _velocity_names;
193  const NonlinearVariableName _pressure_name;
195  const NonlinearVariableName _fluid_temperature_name;
196 
198  const MooseFunctorName _density_name;
200  const MooseFunctorName _density_gravity_name;
202  const MooseFunctorName _dynamic_viscosity_name;
207 
209  UserObjectName _rc_uo_name;
216 
219 
221  std::vector<std::vector<SubdomainName>> _friction_blocks;
223  std::vector<std::vector<std::string>> _friction_types;
225  std::vector<std::vector<std::string>> _friction_coeffs;
226 
228  const std::vector<BoundaryName> _inlet_boundaries;
230  const std::vector<BoundaryName> _outlet_boundaries;
232  const std::vector<BoundaryName> _wall_boundaries;
234  const std::vector<BoundaryName> _hydraulic_separators;
235 
237  std::map<BoundaryName, MooseEnum> _momentum_inlet_types;
239  std::map<BoundaryName, MooseEnum> _momentum_outlet_types;
241  std::map<BoundaryName, MooseEnum> _momentum_wall_types;
242 
244  std::vector<PostprocessorName> _flux_inlet_pps;
246  std::vector<Point> _flux_inlet_directions;
247 
249  std::map<BoundaryName, std::vector<MooseFunctorName>> _momentum_inlet_functors;
251  std::map<BoundaryName, MooseFunctorName> _pressure_functors;
253  std::map<BoundaryName, std::vector<MooseFunctorName>> _momentum_wall_functors;
254 
256 };
bool hasFlowEquations() const
Whether the physics is actually creating the flow equations.
const bool _has_flow_equations
Boolean to keep track of whether the flow equations should be created.
unsigned short getNumberAlgebraicGhostingLayersNeeded() const override
Return the number of algebraic ghosting layers needed.
const std::vector< std::string > & getVelocityNames() const
To interface with other Physics.
Base class for a Physics that creates all the objects needed to add a turbulence model to an incompre...
Creates all the objects needed to add a turbulence model to an incompressible / weakly-compressible N...
const MooseFunctorName & dynamicViscosityName() const
Return the name of the dynamic viscosity functor.
MomentumInletTypes
Definition: NS.h:215
bool includeIsotropicStress() const
Whether to include the isotropic viscous stress contribution.
std::vector< std::vector< std::string > > _friction_types
The friction correlation types used for each block.
std::map< BoundaryName, MooseEnum > _momentum_inlet_types
Momentum inlet boundary types.
const std::vector< BoundaryName > _outlet_boundaries
Boundaries with a flow outlet specified on them.
virtual void addSeparatorBC()=0
const std::vector< BoundaryName > & getOutletBoundaries() const
Get the outlet boundaries.
virtual void initializePhysicsAdditional() override
virtual void addSolverVariables() override=0
const std::vector< BoundaryName > & getInletBoundaries() const
Get the inlet boundaries.
const MooseFunctorName _density_name
Name of the density material property.
const MooseFunctorName _density_gravity_name
Name of the density material property used for gravity and Boussinesq terms.
virtual void addMaterials() override
const InputParameters & parameters() const
virtual void actOnAdditionalTasks() override
virtual void addMomentumTimeKernels()=0
Functions adding kernels for the flow momentum equations If the material properties are not constant...
std::map< BoundaryName, std::vector< MooseFunctorName > > _momentum_inlet_functors
Functors describing the momentum inlet for each boundary.
virtual void addOutletBC()=0
const MooseEnum _momentum_advection_interpolation
The momentum face interpolation method for being advected.
virtual MooseFunctorName getLinearFrictionCoefName() const =0
Get the name of the linear friction coefficient. Returns an empty string if no friction.
std::map< BoundaryName, std::vector< MooseFunctorName > > _momentum_wall_functors
Functors describing the momentum for each wall boundary.
const NonlinearVariableName _pressure_name
Pressure name.
const MooseFunctorName _porosity_name
Name of the porosity functor.
virtual void addWallsBC()=0
static InputParameters validParams()
const bool _porous_medium_treatment
Whether to use the porous medium treatment.
const std::vector< BoundaryName > & getHydraulicSeparators() const
Get the hydraulic separator boundaries.
const std::vector< BoundaryName > _wall_boundaries
Boundaries which define a wall (slip/noslip/etc.)
virtual void addPostprocessors() override
const MooseFunctorName & densityName() const
Return the name of the density functor.
bool includeSymmetrizedViscousStress() const
Whether to include the symmetrized contribution in the viscous stress.
virtual void addAxisymmetricViscousSourceKernel(const std::vector< SubdomainName > &, unsigned int)
Derived classes must override this hook to add the actual object that implements the axisymmetric vis...
bool porousMediumTreatment() const
Return whether a porous medium treatment is applied.
bool hasTurbulenceModel() const
Whether a turbulence model is in use.
const MooseEnum & getMomentumAdvectionFaceInterpolationMethod() const
Get the face interpolation method for momentum in the advection term.
const MooseEnum & getVelocityFaceInterpolationMethod() const
Get the face interpolation method for velocity.
virtual void addRhieChowUserObjects()=0
Function which adds the RhieChow interpolator user objects for weakly and incompressible formulations...
const MooseEnum & compressibility() const
Return the compressibility of the flow equations selected.
const bool _include_symmetrized_viscous_stress
Whether to include the symmetrized viscous stress contribution.
RealVectorValue gravityVector() const
Return the gravity vector.
std::vector< std::vector< SubdomainName > > _friction_blocks
Subdomains where we want to have volumetric friction.
const NonlinearVariableName & getFluidTemperatureName() const
std::vector< PostprocessorName > _flux_inlet_pps
Postprocessors describing the momentum inlet for each boundary. Indexing based on the number of flux ...
virtual void addUserObjects() override=0
std::map< BoundaryName, MooseEnum > _momentum_outlet_types
Momentum outlet boundary types.
std::vector< SubdomainName > getAxisymmetricRZBlocks() const
Return the set of blocks restricted to an RZ coordinate system.
const std::vector< std::string > _velocity_names
Velocity names.
virtual void addInletBC()=0
Functions adding boundary conditions for the flow simulation.
MooseFunctorName getPorosityFunctorName(const bool smoothed) const
Base class for Physics which create the Navier Stokes flow equations.
const std::vector< PostprocessorName > & getFluxInletPPs() const
Get the inlet flux postprocessor if using a flux inlet.
const MooseEnum & getMomentumFaceInterpolationMethod() const
Get the face interpolation method for momentum (mostly used in the stress terms)
const TagName _pressure_tag
Name of the vector to hold pressure momentum equation contributions.
void addAxisymmetricViscousSource()
Adds the cylindrical source kernel for the radial momentum equation when requested and valid...
NS::MomentumInletTypes inletBoundaryType(const BoundaryName &boundary_name) const
Get the type of the inlet BC.
const MooseFunctorName _dynamic_viscosity_name
Name of the dynamic viscosity material property.
const bool _solve_for_dynamic_pressure
Whether we are solving for the total or dynamic pressure.
const MooseEnum _compressibility
Compressibility type, can be compressible, incompressible or weakly-compressible. ...
MooseFunctorName _flow_porosity_functor_name
Name of the porosity functor for the flow equations (if smoothed)
virtual void addMomentumBoussinesqKernels()=0
virtual void addFVKernels() override=0
void addPorousMediumSpeedMaterial()
Add material to define the local speed in porous medium flows.
UserObjectName _rc_uo_name
name of the Rhie Chow user object
std::map< BoundaryName, MooseEnum > _momentum_wall_types
Momentum wall boundary types.
const NonlinearVariableName _fluid_temperature_name
Fluid temperature name.
VariableName getFlowVariableName(const std::string &default_name) const
Convenience routine to be able to retrieve the actual variable names from their default names...
void addNonPorousMediumSpeedMaterial()
Add material to define the local speed with no porous medium treatment.
const MooseEnum _momentum_face_interpolation
The momentum face interpolation method for stress terms.
bool addAxisymmetricViscousSourceEnabled() const
Whether the cylindrical viscous source helper is enabled.
const bool _add_rz_viscous_source
Whether to automatically add the cylindrical viscous source term.
const MooseEnum _velocity_interpolation
The velocity face interpolation method for advecting other quantities.
virtual void addMomentumFrictionKernels()=0
std::map< BoundaryName, MooseFunctorName > _pressure_functors
Functors describing the outlet pressure on each boundary.
void addFluidPropertiesFunctorMaterial()
Function which adds the general functor fluid properties functor material to define fluid functor mat...
virtual bool hasForchheimerFriction() const =0
Return whether a Forchheimer friction model is in use.
bool hasTurbulencePhysics() const
Whether a turbulence Physics has been coupled in, to know which viscosity to pick on symmetry boundar...
virtual void addMomentumGravityKernels()=0
const UserObjectName & rhieChowUOName() const
Return the name of the Rhie Chow user object.
virtual void addFVBCs() override
const std::vector< BoundaryName > _hydraulic_separators
Hydraulic separator boundaries.
virtual void addInitialConditions() override
virtual void addMomentumPressureKernels()=0
WCNSFVFlowPhysicsBase(const InputParameters &parameters)
Base class to hold common parameters and utilities between all the weakly compressible Navier Stokes-...
const std::vector< BoundaryName > _inlet_boundaries
Boundaries with a flow inlet specified on them.
const WCNSFVTurbulencePhysicsBase * getCoupledTurbulencePhysics() const
Find the turbulence physics.
const std::vector< Point > & getFluxInletDirections() const
Get the inlet direction if using a flux inlet.
std::vector< Point > _flux_inlet_directions
Direction of each flux inlet. Indexing based on the number of flux boundaries.
const bool _include_isotropic_viscous_stress
Whether to include the isotropic viscous stress contribution.
std::vector< std::vector< std::string > > _friction_coeffs
The coefficients used for each item if friction type.
const WCNSFVTurbulencePhysicsBase * _turbulence_physics
Can be set to a coupled turbulence physics.
const std::vector< BoundaryName > & getWallBoundaries() const
Get the wall boundaries.
const NonlinearVariableName & getPressureName() const