28 "Define the Navier Stokes weakly-compressible mass and momentum equations");
33 "time_derivative_contributes_to_RC_coefficients",
35 "Whether the time derivative term should contribute to the Rhie Chow coefficients. This adds "
36 "stabilization, but makes the solution dependent on the time step size");
37 params.
addParamNamesToGroup(
"time_derivative_contributes_to_RC_coefficients characteristic_speed",
42 "density_for_gravity_terms",
43 "If specified, replaces the 'density' for the Boussinesq and gravity momentum kernels");
51 "pressure_drop_sidesets");
59 params.
addParam<PhysicsName>(
"coupled_turbulence_physics",
60 "Turbulence Physics coupled with the flow");
67 "pressure_allow_expansion_on_bernoulli_faces");
76 "porosity_interface_pressure_treatment pressure_allow_expansion_on_bernoulli_faces "
77 "porosity_smoothing_layers use_friction_correction consistent_scaling "
78 "pressure_drop_sidesets pressure_drop_form_factors",
79 "Flow medium discontinuity treatment");
81 "pressure_face_interpolation mass_advection_interpolation mass_scaling momentum_scaling",
91 _porosity_smoothing_layers(isParamValid(
"porosity_smoothing_layers")
92 ? getParam<unsigned short>(
"porosity_smoothing_layers")
96 getParam<unsigned short>(
"porosity_smoothing_layers")
101 if (getParam<bool>(
"pin_pressure") &&
102 getParam<std::vector<MooseFunctorName>>(
"pressure_functors").size())
103 paramError(
"pin_pressure",
"Cannot pin the pressure if a pressure boundary exists");
108 if (getParam<bool>(
"pin_pressure"))
110 if ((std::string(getParam<MooseEnum>(
"pinned_pressure_type")).find(
"point") !=
111 std::string::npos) &&
114 "This parameter must be set to specify the pinned pressure point");
115 else if ((std::string(getParam<MooseEnum>(
"pinned_pressure_type")).find(
"point") ==
116 std::string::npos) &&
119 "This parameter should not be given by the user with the corresponding "
120 "pinned_pressure_type setting: " +
121 std::string(getParam<MooseEnum>(
"pinned_pressure_type")) +
".");
128 "porosity_interface_pressure_treatment");
129 if (getParam<MooseEnum>(
"porosity_interface_pressure_treatment") !=
"bernoulli")
132 {
"pressure_allow_expansion_on_bernoulli_faces",
133 "pressure_drop_sidesets",
134 "pressure_drop_form_factors"});
153 "The number of velocity variable names supplied to the NSFVAction is not " +
155 ((
dimension() == 3) ?
"" :
" or 3!") +
"\nVelocity variables " +
164 "momentum_face_interpolation",
165 "momentum_two_term_bc_expansion"},
166 "INSFVVelocityVariable");
169 std::string variable_type =
"INSFVVelocityVariable";
171 variable_type =
"PINSFVSuperficialVelocityVariable";
175 params.set<std::vector<Real>>(
"scaling") = {getParam<Real>(
"momentum_scaling")};
176 params.set<
MooseEnum>(
"face_interp_method") =
177 getParam<MooseEnum>(
"momentum_face_interpolation");
178 params.set<
bool>(
"two_term_boundary_expansion") =
179 getParam<bool>(
"momentum_two_term_bc_expansion");
187 ") supplied to the WCNSFVFlowPhysics does not exist!");
191 const bool using_bernouilli_pressure_var =
193 getParam<MooseEnum>(
"porosity_interface_pressure_treatment") !=
"automatic";
194 const auto pressure_type =
195 using_bernouilli_pressure_var ?
"BernoulliPressureVariable" :
"INSFVPressureVariable";
198 std::vector<std::string> potentially_missed = {
"system_names",
200 "pressure_face_interpolation",
201 "pressure_two_term_bc_expansion"};
202 if (using_bernouilli_pressure_var)
204 std::vector<std::string> other_missed = {
"pressure_allow_expansion_on_bernoulli_faces",
205 "pressure_drop_sidesets",
206 "pressure_drop_form_factors"};
207 potentially_missed.insert(potentially_missed.end(), other_missed.begin(), other_missed.end());
215 params.set<std::vector<Real>>(
"scaling") = {getParam<Real>(
"mass_scaling")};
216 params.set<
MooseEnum>(
"face_interp_method") =
217 getParam<MooseEnum>(
"pressure_face_interpolation");
218 params.set<
bool>(
"two_term_boundary_expansion") =
219 getParam<bool>(
"pressure_two_term_bc_expansion");
221 if (using_bernouilli_pressure_var)
230 params.set<
bool>(
"allow_two_term_expansion_on_bernoulli_faces") =
231 getParam<bool>(
"pressure_allow_expansion_on_bernoulli_faces");
232 params.set<std::vector<BoundaryName>>(
"pressure_drop_sidesets") =
233 getParam<std::vector<BoundaryName>>(
"pressure_drop_sidesets");
234 params.set<std::vector<Real>>(
"pressure_drop_form_factors") =
235 getParam<std::vector<Real>>(
"pressure_drop_form_factors");
243 ") supplied to the WCNSFVFlowPhysics does not exist!");
246 if (getParam<bool>(
"pin_pressure"))
248 auto type = getParam<MooseEnum>(
"pinned_pressure_type");
251 lm_params.set<
MooseEnum>(
"order") =
"first";
253 if ((
type ==
"point-value" ||
type ==
"average"))
255 if (!
_problem->hasScalarVariable(
"lambda"))
257 lm_params.set<SolverSystemName>(
"solver_sys") =
getSolverSystem(
"lambda");
281 if (getParam<bool>(
"pin_pressure"))
306 if (getParam<bool>(
"boussinesq_approximation"))
313 std::string mass_kernel_type =
"WCNSFVMassTimeDerivative";
314 std::string kernel_name =
prefix() +
"wcns_mass_time";
318 mass_kernel_type =
"PWCNSFVMassTimeDerivative";
319 kernel_name =
prefix() +
"pwcns_mass_time";
334 std::string kernel_type =
"INSFVMassAdvection";
335 std::string kernel_name =
prefix() +
"ins_mass_advection";
339 kernel_type =
"PINSFVMassAdvection";
340 kernel_name =
prefix() +
"pins_mass_advection";
350 getParam<MooseEnum>(
"mass_advection_interpolation");
358 const auto pin_type = getParam<MooseEnum>(
"pinned_pressure_type");
359 const auto object_type =
360 (pin_type ==
"average") ?
"FVIntegralValueConstraint" :
"FVPointValueConstraint";
362 if (pin_type !=
"point-value" && pin_type !=
"average")
366 params.
set<PostprocessorName>(
"phi0") = getParam<PostprocessorName>(
"pinned_pressure_value");
368 if (pin_type ==
"point-value")
369 params.
set<Point>(
"point") = getParam<Point>(
"pinned_pressure_point");
378 ?
"WCNSFVMomentumTimeDerivative"
379 :
"INSFVMomentumTimeDerivative";
380 std::string kernel_name =
prefix() +
387 kernel_type = (
_compressibility ==
"weakly-compressible") ?
"WCNSFVMomentumTimeDerivative"
388 :
"PINSFVMomentumTimeDerivative";
400 params.
set<
bool>(
"contribute_to_rc") =
401 getParam<bool>(
"time_derivative_contributes_to_RC_coefficients");
416 std::string kernel_type =
"INSFVMomentumAdvection";
417 std::string kernel_name =
prefix() +
"ins_momentum_advection_";
421 kernel_type =
"PINSFVMomentumAdvection";
422 kernel_name =
prefix() +
"pins_momentum_advection_";
447 std::string kernel_type =
"INSFVMomentumDiffusion";
448 std::string kernel_name =
prefix() +
"ins_momentum_diffusion_";
452 kernel_type =
"PINSFVMomentumDiffusion";
453 kernel_name =
prefix() +
"pins_momentum_diffusion_";
463 "Including the isotropic viscous stress is not supported with the porous medium "
464 "treatment. Ignoring the request.");
466 if (include_isotropic)
467 params.
set<
bool>(
"include_isotropic_viscous_stress") =
true;
468 params.
set<
MooseEnum>(
"mu_interp_method") = getParam<MooseEnum>(
"mu_interp_method");
470 getParam<MooseEnum>(
"momentum_face_interpolation");
475 "Including the symmetrized viscous stress is not supported with the porous "
476 "medium treatment. Ignoring the request.");
477 include_symmetric =
false;
479 if (include_symmetric || include_isotropic)
481 params.
set<
bool>(
"complete_expansion") =
true;
482 const std::string u_names[3] = {
"u",
"v",
"w"};
483 for (
unsigned int i = 0; i <
dimension(); ++i)
490 params.
set<
bool>(
"newton_solve") =
true;
502 const unsigned int radial_index)
513 prefix() +
"ins_momentum_viscous_source_rz_" +
521 std::string kernel_type =
"INSFVMomentumPressure";
522 std::string kernel_name =
prefix() +
"ins_momentum_pressure_";
526 kernel_type =
"PINSFVMomentumPressure";
527 kernel_name =
prefix() +
"pins_momentum_pressure_";
534 params.
set<
bool>(
"correct_skewness") =
535 getParam<MooseEnum>(
"pressure_face_interpolation") ==
"skewness-corrected";
552 std::string kernel_type =
"INSFVMomentumGravity";
553 std::string kernel_name =
prefix() +
"ins_momentum_gravity_";
557 kernel_type =
"PINSFVMomentumGravity";
558 kernel_name =
prefix() +
"pins_momentum_gravity_";
565 params.
set<RealVectorValue>(
"gravity") = getParam<RealVectorValue>(
"gravity");
571 if (getParam<RealVectorValue>(
"gravity")(
d) != 0)
587 "We cannot use boussinesq approximation while running in weakly-compressible mode!");
589 std::string kernel_type =
"INSFVMomentumBoussinesq";
590 std::string kernel_name =
prefix() +
"ins_momentum_boussinesq_";
594 kernel_type =
"PINSFVMomentumBoussinesq";
595 kernel_name =
prefix() +
"pins_momentum_boussinesq_";
603 params.
set<RealVectorValue>(
"gravity") = getParam<RealVectorValue>(
"gravity");
604 params.
set<Real>(
"ref_temperature") = getParam<Real>(
"ref_temperature");
605 params.
set<MooseFunctorName>(
"alpha_name") = getParam<MooseFunctorName>(
"thermal_expansion");
609 params.
set<
bool>(
"_override_constant_check") =
true;
613 if (getParam<RealVectorValue>(
"gravity")(
d) != 0)
627 unsigned int num_used_blocks = num_friction_blocks ? num_friction_blocks : 1;
629 const std::string kernel_type =
"PINSFVMomentumFriction";
635 params.
set<
bool>(
"standard_friction_formulation") =
636 getParam<bool>(
"standard_friction_formulation");
639 for (
const auto block_i : make_range(num_used_blocks))
641 std::string block_name =
"";
642 if (num_friction_blocks)
650 block_name = std::to_string(block_i);
657 for (
unsigned int type_i = 0; type_i <
_friction_types[block_i].size(); ++type_i)
660 if (upper_name ==
"DARCY")
665 else if (upper_name ==
"FORCHHEIMER")
674 "' is not implemented");
678 prefix() +
"momentum_friction_" + block_name +
"_" +
685 const std::string correction_kernel_type =
"PINSFVMomentumFrictionCorrection";
687 if (num_friction_blocks)
693 corr_params.
set<Real>(
"consistent_scaling") = getParam<Real>(
"consistent_scaling");
698 for (
unsigned int type_i = 0; type_i <
_friction_types[block_i].size(); ++type_i)
701 if (upper_name ==
"DARCY")
706 else if (upper_name ==
"FORCHHEIMER")
709 corr_params.
set<MooseFunctorName>(
"Forchheimer_name") =
715 prefix() +
"pins_momentum_friction_correction_" + block_name +
727 unsigned int num_velocity_functor_inlets = 0;
729 if (momentum_outlet_type ==
"fixed-velocity" || momentum_outlet_type ==
"fixed-pressure")
730 num_velocity_functor_inlets++;
735 ") is not the same as the number of entries in the momentum_inlet_types "
736 "subvector for fixed-velocities/pressures functors (size " +
737 std::to_string(num_velocity_functor_inlets) +
")");
739 unsigned int flux_bc_counter = 0;
740 unsigned int velocity_pressure_counter = 0;
743 if (momentum_inlet_type ==
"fixed-velocity")
745 const std::string bc_type =
"INSFVInletVelocityBC";
747 params.
set<std::vector<BoundaryName>>(
"boundary") = {inlet_bdy};
750 "More non-flux inlets than inlet functors (" +
755 if (momentum_functors.size() <
dimension())
757 "Subvector for boundary '" + inlet_bdy +
"' (size " +
758 std::to_string(momentum_functors.size()) +
759 ") is not the same size as the number of dimensions of the physics (" +
765 params.
set<MooseFunctorName>(
"functor") = momentum_functors[
d];
769 ++velocity_pressure_counter;
771 else if (momentum_inlet_type ==
"fixed-pressure")
773 const std::string bc_type =
"INSFVOutletPressureBC";
778 "More non-flux inlets than inlet functors (" +
781 params.
set<FunctionName>(
"function") =
783 params.
set<std::vector<BoundaryName>>(
"boundary") = {inlet_bdy};
786 ++velocity_pressure_counter;
788 else if (momentum_inlet_type ==
"flux-mass" || momentum_inlet_type ==
"flux-velocity")
791 const std::string bc_type =
799 params.
set<std::vector<BoundaryName>>(
"boundary") = {inlet_bdy};
805 "More inlet flux BCs than inlet flux pps (" +
808 if (momentum_inlet_type ==
"flux-mass")
811 params.
set<PostprocessorName>(
"area_pp") =
"area_pp_" + inlet_bdy;
828 const std::string bc_type =
"WCNSFVMassFluxBC";
832 params.
set<std::vector<BoundaryName>>(
"boundary") = {inlet_bdy};
837 if (momentum_inlet_type ==
"flux-mass")
840 params.
set<PostprocessorName>(
"area_pp") =
"area_pp_" + inlet_bdy;
861 unsigned int num_pressure_outlets = 0;
863 if (momentum_outlet_type ==
"fixed-pressure" ||
864 momentum_outlet_type ==
"fixed-pressure-zero-gradient")
865 num_pressure_outlets++;
870 ") is not the same as the number of pressure outlet boundaries in "
871 "'fixed-pressure/fixed-pressure-zero-gradient' (size " +
872 std::to_string(num_pressure_outlets) +
")");
874 const std::string u_names[3] = {
"u",
"v",
"w"};
877 if (momentum_outlet_type ==
"zero-gradient" ||
878 momentum_outlet_type ==
"fixed-pressure-zero-gradient")
882 :
"INSFVMomentumAdvectionOutflowBC";
884 params.
set<std::vector<BoundaryName>>(
"boundary") = {outlet_bdy};
890 for (
unsigned int i = 0; i <
dimension(); ++i)
903 if (momentum_outlet_type ==
"fixed-pressure" ||
904 momentum_outlet_type ==
"fixed-pressure-zero-gradient")
906 const std::string bc_type =
"INSFVOutletPressureBC";
910 params.
set<std::vector<BoundaryName>>(
"boundary") = {outlet_bdy};
914 else if (momentum_outlet_type ==
"zero-gradient")
916 const std::string bc_type =
"INSFVMassAdvectionOutflowBC";
920 params.
set<std::vector<BoundaryName>>(
"boundary") = {outlet_bdy};
933 const std::string u_names[3] = {
"u",
"v",
"w"};
936 unsigned int num_functor_walls = 0;
938 if (momentum_wall_type ==
"noslip")
942 "If any wall functors are specified, the number of boundaries requiring a momentum "
944 std::to_string(num_functor_walls) +
") and the number of functors specified (" +
947 if (wall_functors.second.size() !=
dimension())
949 "Number of wall functors (" + std::to_string(wall_functors.second.size()) +
950 ") must match dimension (" + std::to_string(
dimension()) +
951 ").\nFunctors currently specified:" +
Moose::stringify(wall_functors.second));
955 if (wall_type ==
"noslip")
957 const std::string bc_type =
"INSFVNoSlipWallBC";
959 params.
set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
965 params.
set<FunctionName>(
"function") =
"0";
972 else if (wall_type ==
"wallfunction")
974 const std::string bc_type =
"INSFVWallFunctionBC";
978 params.
set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
992 else if (wall_type ==
"slip")
994 const std::string bc_type =
"INSFVNaturalFreeSlipBC";
996 params.
set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
1007 else if (wall_type ==
"symmetry")
1010 std::string bc_type;
1012 bc_type =
"PINSFVSymmetryVelocityBC";
1014 bc_type =
"INSFVSymmetryVelocityBC";
1017 params.
set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
1022 params.
set<MooseFunctorName>(
NS::mu) = viscosity_name;
1037 const std::string bc_type =
"INSFVSymmetryPressureBC";
1040 params.
set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
1053 std::string bc_type =
"INSFVVelocityHydraulicSeparatorBC";
1065 bc_type =
"INSFVScalarFieldSeparatorBC";
1087 if (getParam<bool>(
"pin_pressure"))
1089 const auto pin_type = getParam<MooseEnum>(
"pinned_pressure_type");
1090 std::string object_type =
"NSPressurePin";
1093 if (pin_type ==
"point-value" || pin_type ==
"average")
1097 if (pin_type ==
"average-uo")
1103 params.
set<std::vector<OutputName>>(
"outputs") = {
"none"};
1108 if (pin_type ==
"point-value" || pin_type ==
"point-value-uo")
1113 params.
set<PostprocessorName>(
"phi0") = getParam<PostprocessorName>(
"pinned_pressure_value");
1115 if (pin_type ==
"point-value" || pin_type ==
"point-value-uo")
1116 params.
set<Point>(
"point") = getParam<Point>(
"pinned_pressure_point");
1117 else if (pin_type ==
"average-uo")
1118 params.
set<PostprocessorName>(
"pressure_average") =
"ns_pressure_average";
1139 ghost_layers = std::max(getParam<unsigned short>(
"porosity_smoothing_layers"), ghost_layers);
1141 getParam<MooseEnum>(
"porosity_interface_pressure_treatment") !=
"automatic") ||
1142 getParam<MooseEnum>(
"momentum_face_interpolation") ==
"skewness-corrected" ||
1143 getParam<MooseEnum>(
"pressure_face_interpolation") ==
"skewness-corrected")
1144 ghost_layers = std::max(ghost_layers, (
unsigned short)3);
1145 return ghost_layers;
1151 mooseAssert(
dimension(),
"0-dimension not supported");
1159 std::vector<UserObject *> objs;
1164 .condition<AttribThread>(0)
1166 bool have_matching_rc_uo =
false;
1167 for (
const auto & obj : objs)
1170 if (rc_obj->blocks() ==
_blocks || (rc_obj->blocks().size() == 0 ||
_blocks.size() == 0))
1172 have_matching_rc_uo =
true;
1177 if (have_matching_rc_uo)
1183 const std::string u_names[3] = {
"u",
"v",
"w"};
1184 const auto object_type =
1197 unsigned short smoothing_layers =
isParamValid(
"porosity_smoothing_layers")
1198 ? getParam<unsigned short>(
"porosity_smoothing_layers")
1200 params.set<
unsigned short>(
"smoothing_layers") = smoothing_layers;
1206 params.set<MooseFunctorName>(
"a_u") =
"ax";
1207 params.set<MooseFunctorName>(
"a_v") =
"ay";
1208 params.set<MooseFunctorName>(
"a_w") =
"az";
1215std::vector<UserObjectName>
1225 mooseError(
"Rhie Chow coefficient ax must be provided for advection by auxiliary velocities");
1227 mooseError(
"Rhie Chow coefficient ay must be provided for advection by auxiliary velocities");
1229 mooseError(
"Rhie Chow coefficient az must be provided for advection by auxiliary velocities");
1244 if (upper_name ==
"DARCY")
1252 bool linear_friction_factor_found =
false;
1253 MooseFunctorName linear_friction_factor;
1258 if (upper_name ==
"DARCY" && !linear_friction_factor_found)
1260 linear_friction_factor_found =
true;
1263 else if (upper_name ==
"DARCY" && !linear_friction_factor_found)
1265 mooseError(
"Multiple linear friction factor with different names have been specified. "
1266 "This is not currently supported as a single name should be retrievable. "
1267 "Use a PiecewiseByBlockFunctorMaterial to consolidate them.");
1269 if (linear_friction_factor_found)
1270 return linear_friction_factor;
std::vector< VariableName > CoupledName
registerWCNSFVFlowPhysicsBaseTasks("NavierStokesApp", WCNSFVFlowPhysics)
registerMooseAction("NavierStokesApp", WCNSFVFlowPhysics, "add_fv_kernel")
std::shared_ptr< FEProblemBase > & _problem
virtual std::vector< std::shared_ptr< UserObject > > addUserObject(const std::string &user_object_name, const std::string &name, InputParameters ¶meters)
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters ¶ms)
virtual void addFVBC(const std::string &fv_bc_name, const std::string &name, InputParameters ¶meters)
virtual void addPostprocessor(const std::string &pp_name, const std::string &name, InputParameters ¶meters)
TheWarehouse & theWarehouse() const
virtual void addFVKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
InputParameters getValidParams(const std::string &name) const
static InputParameters validParams()
static std::vector< std::string > listOfCommonParams()
This user-object gathers 'a' (on-diagonal velocity coefficients) data.
static std::vector< std::string > listOfCommonParams()
const InputParameters & parameters() const
const std::string & type() const
void paramWarning(const std::string ¶m, Args... args) const
void paramError(const std::string ¶m, Args... args) const
bool isParamSetByUser(const std::string &name) const
void mooseError(Args &&... args) const
const T & getParam(const std::string &name) const
bool isParamValid(const std::string &name) const
static InputParameters validParams()
bool _define_variables
Whether to define variables if they do not exist.
virtual FEProblemBase & getProblem()
void addUserObject(const std::string &uo_type, const std::string &uo_name, InputParameters ¶ms)
bool shouldCreateTimeDerivative(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_already_defined) const
void assignBlocks(InputParameters ¶ms, const std::vector< SubdomainName > &blocks) const
unsigned int dimension() const
void reportPotentiallyMissedParameters(const std::vector< std::string > ¶m_names, const std::string &object_type, const std::string &object_name="") const
void saveSolverVariableName(const VariableName &var_name)
std::string prefix() const
const SolverSystemName & getSolverSystem(unsigned int variable_index) const
bool shouldCreateVariable(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_aux)
std::vector< SubdomainName > _blocks
Base class for Physics which create the Navier Stokes flow equations.
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()
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.
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.
const MooseEnum _compressibility
Compressibility type, can be compressible, incompressible or weakly-compressible.
const std::vector< std::string > _velocity_names
Velocity names.
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 NonlinearVariableName _pressure_name
Pressure name.
const bool _has_flow_equations
Boolean to keep track of whether the flow equations should be created.
bool includeIsotropicStress() const
Whether to include the isotropic viscous stress contribution.
const NonlinearVariableName _fluid_temperature_name
Fluid temperature name.
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 UserObjectName & rhieChowUOName() const
Return the name of the Rhie Chow user object.
std::vector< Point > _flux_inlet_directions
Direction of each flux inlet. Indexing based on the number of flux boundaries.
const MooseFunctorName _dynamic_viscosity_name
Name of the dynamic viscosity material property.
std::map< BoundaryName, MooseEnum > _momentum_wall_types
Momentum wall boundary types.
const std::vector< BoundaryName > _hydraulic_separators
Hydraulic separator boundaries.
const bool _solve_for_dynamic_pressure
Whether we are solving for the total or dynamic pressure.
bool hasTurbulencePhysics() const
Whether a turbulence Physics has been coupled in, to know which viscosity to pick on symmetry boundar...
const MooseFunctorName _density_name
Name of the density material property.
const MooseFunctorName _porosity_name
Name of the porosity functor.
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.
bool includeSymmetrizedViscousStress() const
Whether to include the symmetrized contribution in the viscous stress.
const MooseFunctorName _density_gravity_name
Name of the density material property used for gravity and Boussinesq terms.
Creates all the objects needed to solve the Navier Stokes mass and momentum equations.
unsigned short getNumberAlgebraicGhostingLayersNeeded() const override
Return the number of algebraic ghosting layers needed.
void addAxisymmetricViscousSourceKernel(const std::vector< SubdomainName > &rz_blocks, unsigned int radial_index) override
Derived classes must override this hook to add the actual object that implements the axisymmetric vis...
void addMomentumBoussinesqKernels() override
void addMassKernels()
Function adding kernels for the incompressible continuity equation.
void addMomentumPressureKernels() override
virtual void addUserObjects() override
void addRhieChowUserObjects() override
Function which adds the RhieChow interpolator user objects for weakly and incompressible formulations...
void addMassTimeKernels()
Function adding kernels for the time derivative term of the weakly compressible continuity equation.
void addWallsBC() override
void addMomentumTimeKernels() override
Functions adding kernels for the incompressible momentum equation If the material properties are not ...
void addMomentumGravityKernels() override
void addSeparatorBC() override
virtual void addSolverVariables() override
void checkRhieChowFunctorsDefined() const
Checks that sufficient Rhie Chow coefficients have been defined for the given dimension,...
void addMomentumViscousDissipationKernels()
void addOutletBC() override
virtual std::vector< UserObjectName > getSuppliedUserObjects() const override
virtual void addCorrectors() override
static InputParameters validParams()
void addMomentumFrictionKernels() override
void addMomentumAdvectionKernels()
UserObjectName _rc_uo_name
Name of the user object in charge of computing the Rhie Chow coefficients.
WCNSFVFlowPhysics(const InputParameters ¶meters)
void addInletBC() override
Functions adding boundary conditions for the incompressible simulation.
void addPressurePinKernel()
Function adding the pressure constraint.
virtual void addFVKernels() override
virtual MooseFunctorName getLinearFrictionCoefName() const override
Get the name of the linear friction coefficient. Returns an empty string if no friction.
bool hasForchheimerFriction() const override
Return whether a Forchheimer friction model is in use.
std::string toUpper(std::string name)
std::string stringify(const T &t)
static const std::string density
static const std::string T_fluid
static const std::string mu
const std::string velocity_vector[3]
static const std::string smoothed_porosity
static const std::string porosity
static const std::string directions[3]
static const std::string speed
std::string time_deriv(const std::string &var)
static const std::string total_viscosity