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_variable"); \
19  registerMooseAction(app_name, derived_name, "add_ic"); \
20  registerMooseAction(app_name, derived_name, "add_material"); \
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; }
38 
40  const std::vector<std::string> & getVelocityNames() const { return _velocity_names; }
41  const NonlinearVariableName & getPressureName() const { return _pressure_name; }
42  const NonlinearVariableName & getFluidTemperatureName() const { return _fluid_temperature_name; }
43  MooseFunctorName getPorosityFunctorName(const bool smoothed) const;
44 
45  // Getters to interact with other WCNSFVPhysics classes
47  const MooseEnum & compressibility() const { return _compressibility; }
51  RealVectorValue gravityVector() const { return getParam<RealVectorValue>("gravity"); }
53  const MooseFunctorName & densityName() const { return _density_name; }
55  const MooseFunctorName & dynamicViscosityName() const { return _dynamic_viscosity_name; }
60  {
62  }
65  {
67  }
69  const std::vector<BoundaryName> & getInletBoundaries() const { return _inlet_boundaries; }
71  const std::vector<BoundaryName> & getOutletBoundaries() const { return _outlet_boundaries; }
73  const std::vector<BoundaryName> & getWallBoundaries() const { return _wall_boundaries; }
75  const std::vector<BoundaryName> & getHydraulicSeparators() const { return _hydraulic_separators; }
77  const std::vector<Point> & getFluxInletDirections() const { return _flux_inlet_directions; }
79  const std::vector<PostprocessorName> & getFluxInletPPs() const { return _flux_inlet_pps; }
81  virtual MooseFunctorName getLinearFrictionCoefName() const = 0;
83  virtual UserObjectName rhieChowUOName() const = 0;
85  unsigned short getNumberAlgebraicGhostingLayersNeeded() const override;
86 
87 protected:
88  virtual void initializePhysicsAdditional() override;
89  virtual void actOnAdditionalTasks() override;
90  virtual void addSolverVariables() override = 0;
91  virtual void addInitialConditions() override;
92  virtual void addFVKernels() override = 0;
93  virtual void addFVBCs() override;
94  virtual void addMaterials() override;
95  virtual void addUserObjects() override = 0;
96  virtual void addPostprocessors() override;
97 
103  virtual void addMomentumTimeKernels() = 0;
104  virtual void addMomentumPressureKernels() = 0;
105  virtual void addMomentumGravityKernels() = 0;
106  virtual void addMomentumFrictionKernels() = 0;
107  virtual void addMomentumBoussinesqKernels() = 0;
108 
111  virtual void addInletBC() = 0;
112  virtual void addOutletBC() = 0;
113  virtual void addWallsBC() = 0;
114  virtual void addSeparatorBC() = 0;
115 
117  virtual bool hasForchheimerFriction() const = 0;
118 
123 
125  virtual void addRhieChowUserObjects() = 0;
126 
128  VariableName getFlowVariableName(const std::string & default_name) const;
129 
131  bool hasTurbulencePhysics() const
132  {
135  else
136  return false;
137  }
138 
141 
143  const TagName _pressure_tag = "p_tag";
144 
147 
152 
156  const MooseFunctorName _porosity_name;
158  MooseFunctorName _flow_porosity_functor_name;
159 
161  const std::vector<std::string> _velocity_names;
163  const NonlinearVariableName _pressure_name;
165  const NonlinearVariableName _fluid_temperature_name;
166 
168  const MooseFunctorName _density_name;
170  const MooseFunctorName _density_gravity_name;
172  const MooseFunctorName _dynamic_viscosity_name;
173 
180 
183 
185  std::vector<std::vector<SubdomainName>> _friction_blocks;
187  std::vector<std::vector<std::string>> _friction_types;
189  std::vector<std::vector<std::string>> _friction_coeffs;
190 
192  const std::vector<BoundaryName> _inlet_boundaries;
194  const std::vector<BoundaryName> _outlet_boundaries;
196  const std::vector<BoundaryName> _wall_boundaries;
198  const std::vector<BoundaryName> _hydraulic_separators;
199 
201  std::map<BoundaryName, MooseEnum> _momentum_inlet_types;
203  std::map<BoundaryName, MooseEnum> _momentum_outlet_types;
205  std::map<BoundaryName, MooseEnum> _momentum_wall_types;
206 
208  std::vector<PostprocessorName> _flux_inlet_pps;
210  std::vector<Point> _flux_inlet_directions;
211 
213  std::map<BoundaryName, std::vector<MooseFunctorName>> _momentum_inlet_functors;
215  std::map<BoundaryName, MooseFunctorName> _pressure_functors;
217  std::map<BoundaryName, std::vector<MooseFunctorName>> _momentum_wall_functors;
218 };
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.
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.
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
virtual void actOnAdditionalTasks() override
const WCNSFVTurbulencePhysics * _turbulence_physics
Can be set to a coupled turbulence physics.
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 porousMediumTreatment() const
Return whether a porous medium treatment is applied.
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...
virtual UserObjectName rhieChowUOName() const =0
Return the name of the Rhie Chow user object.
const MooseEnum & compressibility() const
Return the compressibility of the flow equations selected.
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.
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 WCNSFVTurbulencePhysics * getCoupledTurbulencePhysics() const
Find the turbulence physics.
const TagName _pressure_tag
Name of the vector to hold pressure momentum equation contributions.
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.
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 hasTurbulenceModel() const
Whether a turbulence model is in use.
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.
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
virtual void addFVBCs() override
const std::vector< BoundaryName > _hydraulic_separators
Hydraulic separator boundaries.
const InputParameters & parameters() const
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 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.
std::vector< std::vector< std::string > > _friction_coeffs
The coefficients used for each item if friction type.
const std::vector< BoundaryName > & getWallBoundaries() const
Get the wall boundaries.
const NonlinearVariableName & getPressureName() const