https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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{
31public:
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; }
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
99protected:
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;
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
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;
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};
const InputParameters & parameters() const
Base class to hold common parameters and utilities between all the weakly compressible Navier Stokes-...
Base class for Physics which create the Navier Stokes flow equations.
virtual void addInitialConditions() override
std::map< BoundaryName, MooseEnum > _momentum_outlet_types
Momentum outlet boundary types.
const MooseEnum _velocity_interpolation
The velocity face interpolation method for advecting other quantities.
std::vector< std::vector< SubdomainName > > _friction_blocks
Subdomains where we want to have volumetric friction.
static InputParameters validParams()
virtual void addMomentumBoussinesqKernels()=0
std::map< BoundaryName, std::vector< MooseFunctorName > > _momentum_wall_functors
Functors describing the momentum for each wall boundary.
std::map< BoundaryName, MooseEnum > _momentum_inlet_types
Momentum inlet boundary types.
void addNonPorousMediumSpeedMaterial()
Add material to define the local speed with no porous medium treatment.
std::map< BoundaryName, MooseFunctorName > _pressure_functors
Functors describing the outlet pressure on each boundary.
std::vector< PostprocessorName > _flux_inlet_pps
Postprocessors describing the momentum inlet for each boundary. Indexing based on the number of flux ...
const MooseEnum _momentum_advection_interpolation
The momentum face interpolation method for being advected.
std::vector< std::vector< std::string > > _friction_types
The friction correlation types used for each block.
bool hasFlowEquations() const
Whether the physics is actually creating the flow equations.
const MooseEnum _compressibility
Compressibility type, can be compressible, incompressible or weakly-compressible.
const NonlinearVariableName & getPressureName() const
const std::vector< std::string > _velocity_names
Velocity names.
const MooseEnum _momentum_face_interpolation
The momentum face interpolation method for stress terms.
const std::vector< BoundaryName > _wall_boundaries
Boundaries which define a wall (slip/noslip/etc.)
MooseFunctorName _flow_porosity_functor_name
Name of the porosity functor for the flow equations (if smoothed)
void addAxisymmetricViscousSource()
Adds the cylindrical source kernel for the radial momentum equation when requested and valid.
const MooseEnum & compressibility() const
Return the compressibility of the flow equations selected.
virtual void addPostprocessors() override
virtual void actOnAdditionalTasks() override
virtual MooseFunctorName getLinearFrictionCoefName() const =0
Get the name of the linear friction coefficient. Returns an empty string if no friction.
const NonlinearVariableName _pressure_name
Pressure name.
const WCNSFVTurbulencePhysicsBase * getCoupledTurbulencePhysics() const
Find the turbulence physics.
const bool _has_flow_equations
Boolean to keep track of whether the flow equations should be created.
const std::vector< BoundaryName > & getWallBoundaries() const
Get the wall boundaries.
const std::vector< std::string > & getVelocityNames() const
To interface with other Physics.
virtual void addFVKernels() override=0
bool includeIsotropicStress() const
Whether to include the isotropic viscous stress contribution.
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...
virtual bool hasForchheimerFriction() const =0
Return whether a Forchheimer friction model is in use.
const NonlinearVariableName _fluid_temperature_name
Fluid temperature name.
std::vector< SubdomainName > getAxisymmetricRZBlocks() const
Return the set of blocks restricted to an RZ coordinate system.
virtual void addMomentumFrictionKernels()=0
RealVectorValue gravityVector() const
Return the gravity vector.
const NonlinearVariableName & getFluidTemperatureName() const
const MooseEnum & getVelocityFaceInterpolationMethod() const
Get the face interpolation method for velocity.
const bool _porous_medium_treatment
Whether to use the porous medium treatment.
std::map< BoundaryName, std::vector< MooseFunctorName > > _momentum_inlet_functors
Functors describing the momentum inlet for each boundary.
const MooseFunctorName & dynamicViscosityName() const
Return the name of the dynamic viscosity functor.
virtual void initializePhysicsAdditional() override
virtual void addUserObjects() override=0
const std::vector< BoundaryName > _outlet_boundaries
Boundaries with a flow outlet specified on them.
const UserObjectName & rhieChowUOName() const
Return the name of the Rhie Chow user object.
void addFluidPropertiesFunctorMaterial()
Function which adds the general functor fluid properties functor material to define fluid functor mat...
virtual void addSolverVariables() override=0
const std::vector< BoundaryName > & getOutletBoundaries() const
Get the outlet boundaries.
virtual void addInletBC()=0
Functions adding boundary conditions for the flow simulation.
std::vector< Point > _flux_inlet_directions
Direction of each flux inlet. Indexing based on the number of flux boundaries.
const MooseEnum & getMomentumFaceInterpolationMethod() const
Get the face interpolation method for momentum (mostly used in the stress terms)
const MooseFunctorName _dynamic_viscosity_name
Name of the dynamic viscosity material property.
std::map< BoundaryName, MooseEnum > _momentum_wall_types
Momentum wall boundary types.
VariableName getFlowVariableName(const std::string &default_name) const
Convenience routine to be able to retrieve the actual variable names from their default names.
virtual void addMomentumGravityKernels()=0
const std::vector< BoundaryName > _hydraulic_separators
Hydraulic separator boundaries.
const std::vector< BoundaryName > & getHydraulicSeparators() const
Get the hydraulic separator boundaries.
virtual void addMomentumPressureKernels()=0
const std::vector< BoundaryName > & getInletBoundaries() const
Get the inlet boundaries.
const bool _solve_for_dynamic_pressure
Whether we are solving for the total or dynamic pressure.
UserObjectName _rc_uo_name
name of the Rhie Chow user object
MooseFunctorName getPorosityFunctorName(const bool smoothed) const
const bool _add_rz_viscous_source
Whether to automatically add the cylindrical viscous source term.
const std::vector< PostprocessorName > & getFluxInletPPs() const
Get the inlet flux postprocessor if using a flux inlet.
virtual void addMaterials() override
virtual void addWallsBC()=0
virtual void addMomentumTimeKernels()=0
Functions adding kernels for the flow momentum equations If the material properties are not constant,...
bool hasTurbulencePhysics() const
Whether a turbulence Physics has been coupled in, to know which viscosity to pick on symmetry boundar...
const bool _include_isotropic_viscous_stress
Whether to include the isotropic viscous stress contribution.
virtual void addOutletBC()=0
bool addAxisymmetricViscousSourceEnabled() const
Whether the cylindrical viscous source helper is enabled.
const TagName _pressure_tag
Name of the vector to hold pressure momentum equation contributions.
const bool _include_symmetrized_viscous_stress
Whether to include the symmetrized viscous stress contribution.
const std::vector< Point > & getFluxInletDirections() const
Get the inlet direction if using a flux inlet.
const MooseFunctorName _density_name
Name of the density material property.
virtual void addFVBCs() override
const MooseFunctorName _porosity_name
Name of the porosity functor.
const WCNSFVTurbulencePhysicsBase * _turbulence_physics
Can be set to a coupled turbulence physics.
void addPorousMediumSpeedMaterial()
Add material to define the local speed in porous medium flows.
virtual void addSeparatorBC()=0
unsigned short getNumberAlgebraicGhostingLayersNeeded() const override
Return the number of algebraic ghosting layers needed.
std::vector< std::vector< std::string > > _friction_coeffs
The coefficients used for each item if friction type.
const std::vector< BoundaryName > _inlet_boundaries
Boundaries with a flow inlet specified on them.
const MooseFunctorName & densityName() const
Return the name of the density functor.
const MooseEnum & getMomentumAdvectionFaceInterpolationMethod() const
Get the face interpolation method for momentum in the advection term.
virtual void addRhieChowUserObjects()=0
Function which adds the RhieChow interpolator user objects for weakly and incompressible formulations...
bool includeSymmetrizedViscousStress() const
Whether to include the symmetrized contribution in the viscous stress.
bool porousMediumTreatment() const
Return whether a porous medium treatment is applied.
NS::MomentumInletTypes inletBoundaryType(const BoundaryName &boundary_name) const
Get the type of the inlet BC.
const MooseFunctorName _density_gravity_name
Name of the density material property used for gravity and Boussinesq terms.
Base class for a Physics that creates all the objects needed to add a turbulence model to an incompre...
bool hasTurbulenceModel() const
Whether a turbulence model is in use.
Creates all the objects needed to add a turbulence model to an incompressible / weakly-compressible N...
MomentumInletTypes
Definition NS.h:216