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";
174 params.
set<std::vector<Real>>(
"scaling") = {getParam<Real>(
"momentum_scaling")};
175 params.set<
MooseEnum>(
"face_interp_method") =
176 getParam<MooseEnum>(
"momentum_face_interpolation");
177 params.set<
bool>(
"two_term_boundary_expansion") =
178 getParam<bool>(
"momentum_two_term_bc_expansion");
186 ") supplied to the WCNSFVFlowPhysics does not exist!");
190 const bool using_bernouilli_pressure_var =
192 getParam<MooseEnum>(
"porosity_interface_pressure_treatment") !=
"automatic";
193 const auto pressure_type =
194 using_bernouilli_pressure_var ?
"BernoulliPressureVariable" :
"INSFVPressureVariable";
197 std::vector<std::string> potentially_missed = {
"system_names",
199 "pressure_face_interpolation",
200 "pressure_two_term_bc_expansion"};
201 if (using_bernouilli_pressure_var)
203 std::vector<std::string> other_missed = {
"pressure_allow_expansion_on_bernoulli_faces",
204 "pressure_drop_sidesets",
205 "pressure_drop_form_factors"};
206 potentially_missed.insert(potentially_missed.end(), other_missed.begin(), other_missed.end());
213 params.
set<std::vector<Real>>(
"scaling") = {getParam<Real>(
"mass_scaling")};
214 params.set<
MooseEnum>(
"face_interp_method") =
215 getParam<MooseEnum>(
"pressure_face_interpolation");
216 params.set<
bool>(
"two_term_boundary_expansion") =
217 getParam<bool>(
"pressure_two_term_bc_expansion");
219 if (using_bernouilli_pressure_var)
228 params.set<
bool>(
"allow_two_term_expansion_on_bernoulli_faces") =
229 getParam<bool>(
"pressure_allow_expansion_on_bernoulli_faces");
230 params.set<std::vector<BoundaryName>>(
"pressure_drop_sidesets") =
231 getParam<std::vector<BoundaryName>>(
"pressure_drop_sidesets");
232 params.set<std::vector<Real>>(
"pressure_drop_form_factors") =
233 getParam<std::vector<Real>>(
"pressure_drop_form_factors");
240 ") supplied to the WCNSFVFlowPhysics does not exist!");
243 if (getParam<bool>(
"pin_pressure"))
245 auto type = getParam<MooseEnum>(
"pinned_pressure_type");
248 lm_params.set<
MooseEnum>(
"order") =
"first";
250 if ((
type ==
"point-value" ||
type ==
"average"))
252 if (!
_problem->hasScalarVariable(
"lambda"))
254 lm_params.set<SolverSystemName>(
"solver_sys") =
getSolverSystem(
"lambda");
278 if (getParam<bool>(
"pin_pressure"))
303 if (getParam<bool>(
"boussinesq_approximation"))
310 std::string mass_kernel_type =
"WCNSFVMassTimeDerivative";
311 std::string kernel_name =
prefix() +
"wcns_mass_time";
315 mass_kernel_type =
"PWCNSFVMassTimeDerivative";
316 kernel_name =
prefix() +
"pwcns_mass_time";
331 std::string kernel_type =
"INSFVMassAdvection";
332 std::string kernel_name =
prefix() +
"ins_mass_advection";
336 kernel_type =
"PINSFVMassAdvection";
337 kernel_name =
prefix() +
"pins_mass_advection";
347 getParam<MooseEnum>(
"mass_advection_interpolation");
355 const auto pin_type = getParam<MooseEnum>(
"pinned_pressure_type");
356 const auto object_type =
357 (pin_type ==
"average") ?
"FVIntegralValueConstraint" :
"FVPointValueConstraint";
359 if (pin_type !=
"point-value" && pin_type !=
"average")
363 params.
set<PostprocessorName>(
"phi0") = getParam<PostprocessorName>(
"pinned_pressure_value");
365 if (pin_type ==
"point-value")
366 params.
set<Point>(
"point") = getParam<Point>(
"pinned_pressure_point");
375 ?
"WCNSFVMomentumTimeDerivative"
376 :
"INSFVMomentumTimeDerivative";
377 std::string kernel_name =
prefix() +
384 kernel_type = (
_compressibility ==
"weakly-compressible") ?
"WCNSFVMomentumTimeDerivative"
385 :
"PINSFVMomentumTimeDerivative";
397 params.
set<
bool>(
"contribute_to_rc") =
398 getParam<bool>(
"time_derivative_contributes_to_RC_coefficients");
413 std::string kernel_type =
"INSFVMomentumAdvection";
414 std::string kernel_name =
prefix() +
"ins_momentum_advection_";
418 kernel_type =
"PINSFVMomentumAdvection";
419 kernel_name =
prefix() +
"pins_momentum_advection_";
444 std::string kernel_type =
"INSFVMomentumDiffusion";
445 std::string kernel_name =
prefix() +
"ins_momentum_diffusion_";
449 kernel_type =
"PINSFVMomentumDiffusion";
450 kernel_name =
prefix() +
"pins_momentum_diffusion_";
460 "Including the isotropic viscous stress is not supported with the porous medium "
461 "treatment. Ignoring the request.");
463 if (include_isotropic)
464 params.
set<
bool>(
"include_isotropic_viscous_stress") =
true;
465 params.
set<
MooseEnum>(
"mu_interp_method") = getParam<MooseEnum>(
"mu_interp_method");
467 getParam<MooseEnum>(
"momentum_face_interpolation");
472 "Including the symmetrized viscous stress is not supported with the porous "
473 "medium treatment. Ignoring the request.");
474 include_symmetric =
false;
476 if (include_symmetric || include_isotropic)
478 params.
set<
bool>(
"complete_expansion") =
true;
479 const std::string u_names[3] = {
"u",
"v",
"w"};
480 for (
unsigned int i = 0; i <
dimension(); ++i)
487 params.
set<
bool>(
"newton_solve") =
true;
499 const unsigned int radial_index)
510 prefix() +
"ins_momentum_viscous_source_rz_" +
518 std::string kernel_type =
"INSFVMomentumPressure";
519 std::string kernel_name =
prefix() +
"ins_momentum_pressure_";
523 kernel_type =
"PINSFVMomentumPressure";
524 kernel_name =
prefix() +
"pins_momentum_pressure_";
531 params.
set<
bool>(
"correct_skewness") =
532 getParam<MooseEnum>(
"pressure_face_interpolation") ==
"skewness-corrected";
549 std::string kernel_type =
"INSFVMomentumGravity";
550 std::string kernel_name =
prefix() +
"ins_momentum_gravity_";
554 kernel_type =
"PINSFVMomentumGravity";
555 kernel_name =
prefix() +
"pins_momentum_gravity_";
562 params.
set<RealVectorValue>(
"gravity") = getParam<RealVectorValue>(
"gravity");
568 if (getParam<RealVectorValue>(
"gravity")(
d) != 0)
584 "We cannot use boussinesq approximation while running in weakly-compressible mode!");
586 std::string kernel_type =
"INSFVMomentumBoussinesq";
587 std::string kernel_name =
prefix() +
"ins_momentum_boussinesq_";
591 kernel_type =
"PINSFVMomentumBoussinesq";
592 kernel_name =
prefix() +
"pins_momentum_boussinesq_";
600 params.
set<RealVectorValue>(
"gravity") = getParam<RealVectorValue>(
"gravity");
601 params.
set<Real>(
"ref_temperature") = getParam<Real>(
"ref_temperature");
602 params.
set<MooseFunctorName>(
"alpha_name") = getParam<MooseFunctorName>(
"thermal_expansion");
606 params.
set<
bool>(
"_override_constant_check") =
true;
610 if (getParam<RealVectorValue>(
"gravity")(
d) != 0)
624 unsigned int num_used_blocks = num_friction_blocks ? num_friction_blocks : 1;
626 const std::string kernel_type =
"PINSFVMomentumFriction";
632 params.
set<
bool>(
"standard_friction_formulation") =
633 getParam<bool>(
"standard_friction_formulation");
636 for (
const auto block_i : make_range(num_used_blocks))
638 std::string block_name =
"";
639 if (num_friction_blocks)
647 block_name = std::to_string(block_i);
654 for (
unsigned int type_i = 0; type_i <
_friction_types[block_i].size(); ++type_i)
657 if (upper_name ==
"DARCY")
662 else if (upper_name ==
"FORCHHEIMER")
671 "' is not implemented");
675 prefix() +
"momentum_friction_" + block_name +
"_" +
682 const std::string correction_kernel_type =
"PINSFVMomentumFrictionCorrection";
684 if (num_friction_blocks)
690 corr_params.
set<Real>(
"consistent_scaling") = getParam<Real>(
"consistent_scaling");
695 for (
unsigned int type_i = 0; type_i <
_friction_types[block_i].size(); ++type_i)
698 if (upper_name ==
"DARCY")
703 else if (upper_name ==
"FORCHHEIMER")
706 corr_params.
set<MooseFunctorName>(
"Forchheimer_name") =
712 prefix() +
"pins_momentum_friction_correction_" + block_name +
724 unsigned int num_velocity_functor_inlets = 0;
726 if (momentum_outlet_type ==
"fixed-velocity" || momentum_outlet_type ==
"fixed-pressure")
727 num_velocity_functor_inlets++;
732 ") is not the same as the number of entries in the momentum_inlet_types "
733 "subvector for fixed-velocities/pressures functors (size " +
734 std::to_string(num_velocity_functor_inlets) +
")");
736 unsigned int flux_bc_counter = 0;
737 unsigned int velocity_pressure_counter = 0;
740 if (momentum_inlet_type ==
"fixed-velocity")
742 const std::string bc_type =
"INSFVInletVelocityBC";
744 params.
set<std::vector<BoundaryName>>(
"boundary") = {inlet_bdy};
747 "More non-flux inlets than inlet functors (" +
752 if (momentum_functors.size() <
dimension())
754 "Subvector for boundary '" + inlet_bdy +
"' (size " +
755 std::to_string(momentum_functors.size()) +
756 ") is not the same size as the number of dimensions of the physics (" +
762 params.
set<MooseFunctorName>(
"functor") = momentum_functors[
d];
766 ++velocity_pressure_counter;
768 else if (momentum_inlet_type ==
"fixed-pressure")
770 const std::string bc_type =
"INSFVOutletPressureBC";
775 "More non-flux inlets than inlet functors (" +
778 params.
set<FunctionName>(
"function") =
780 params.
set<std::vector<BoundaryName>>(
"boundary") = {inlet_bdy};
783 ++velocity_pressure_counter;
785 else if (momentum_inlet_type ==
"flux-mass" || momentum_inlet_type ==
"flux-velocity")
788 const std::string bc_type =
796 params.
set<std::vector<BoundaryName>>(
"boundary") = {inlet_bdy};
802 "More inlet flux BCs than inlet flux pps (" +
805 if (momentum_inlet_type ==
"flux-mass")
808 params.
set<PostprocessorName>(
"area_pp") =
"area_pp_" + inlet_bdy;
825 const std::string bc_type =
"WCNSFVMassFluxBC";
829 params.
set<std::vector<BoundaryName>>(
"boundary") = {inlet_bdy};
834 if (momentum_inlet_type ==
"flux-mass")
837 params.
set<PostprocessorName>(
"area_pp") =
"area_pp_" + inlet_bdy;
858 unsigned int num_pressure_outlets = 0;
860 if (momentum_outlet_type ==
"fixed-pressure" ||
861 momentum_outlet_type ==
"fixed-pressure-zero-gradient")
862 num_pressure_outlets++;
867 ") is not the same as the number of pressure outlet boundaries in "
868 "'fixed-pressure/fixed-pressure-zero-gradient' (size " +
869 std::to_string(num_pressure_outlets) +
")");
871 const std::string u_names[3] = {
"u",
"v",
"w"};
874 if (momentum_outlet_type ==
"zero-gradient" ||
875 momentum_outlet_type ==
"fixed-pressure-zero-gradient")
879 :
"INSFVMomentumAdvectionOutflowBC";
881 params.
set<std::vector<BoundaryName>>(
"boundary") = {outlet_bdy};
887 for (
unsigned int i = 0; i <
dimension(); ++i)
900 if (momentum_outlet_type ==
"fixed-pressure" ||
901 momentum_outlet_type ==
"fixed-pressure-zero-gradient")
903 const std::string bc_type =
"INSFVOutletPressureBC";
907 params.
set<std::vector<BoundaryName>>(
"boundary") = {outlet_bdy};
911 else if (momentum_outlet_type ==
"zero-gradient")
913 const std::string bc_type =
"INSFVMassAdvectionOutflowBC";
917 params.
set<std::vector<BoundaryName>>(
"boundary") = {outlet_bdy};
930 const std::string u_names[3] = {
"u",
"v",
"w"};
933 unsigned int num_functor_walls = 0;
935 if (momentum_wall_type ==
"noslip")
939 "If any wall functors are specified, the number of boundaries requiring a momentum "
941 std::to_string(num_functor_walls) +
") and the number of functors specified (" +
944 if (wall_functors.second.size() !=
dimension())
946 "Number of wall functors (" + std::to_string(wall_functors.second.size()) +
947 ") must match dimension (" + std::to_string(
dimension()) +
948 ").\nFunctors currently specified:" +
Moose::stringify(wall_functors.second));
952 if (wall_type ==
"noslip")
954 const std::string bc_type =
"INSFVNoSlipWallBC";
956 params.
set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
962 params.
set<FunctionName>(
"function") =
"0";
969 else if (wall_type ==
"wallfunction")
971 const std::string bc_type =
"INSFVWallFunctionBC";
975 params.
set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
989 else if (wall_type ==
"slip")
991 const std::string bc_type =
"INSFVNaturalFreeSlipBC";
993 params.
set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
1004 else if (wall_type ==
"symmetry")
1007 std::string bc_type;
1009 bc_type =
"PINSFVSymmetryVelocityBC";
1011 bc_type =
"INSFVSymmetryVelocityBC";
1014 params.
set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
1019 params.
set<MooseFunctorName>(
NS::mu) = viscosity_name;
1034 const std::string bc_type =
"INSFVSymmetryPressureBC";
1037 params.
set<std::vector<BoundaryName>>(
"boundary") = {boundary_name};
1050 std::string bc_type =
"INSFVVelocityHydraulicSeparatorBC";
1062 bc_type =
"INSFVScalarFieldSeparatorBC";
1084 if (getParam<bool>(
"pin_pressure"))
1086 const auto pin_type = getParam<MooseEnum>(
"pinned_pressure_type");
1087 std::string object_type =
"NSPressurePin";
1090 if (pin_type ==
"point-value" || pin_type ==
"average")
1094 if (pin_type ==
"average-uo")
1100 params.
set<std::vector<OutputName>>(
"outputs") = {
"none"};
1105 if (pin_type ==
"point-value" || pin_type ==
"point-value-uo")
1110 params.
set<PostprocessorName>(
"phi0") = getParam<PostprocessorName>(
"pinned_pressure_value");
1112 if (pin_type ==
"point-value" || pin_type ==
"point-value-uo")
1113 params.
set<Point>(
"point") = getParam<Point>(
"pinned_pressure_point");
1114 else if (pin_type ==
"average-uo")
1115 params.
set<PostprocessorName>(
"pressure_average") =
"ns_pressure_average";
1136 ghost_layers = std::max(getParam<unsigned short>(
"porosity_smoothing_layers"), ghost_layers);
1138 getParam<MooseEnum>(
"porosity_interface_pressure_treatment") !=
"automatic") ||
1139 getParam<MooseEnum>(
"momentum_face_interpolation") ==
"skewness-corrected" ||
1140 getParam<MooseEnum>(
"pressure_face_interpolation") ==
"skewness-corrected")
1141 ghost_layers = std::max(ghost_layers, (
unsigned short)3);
1142 return ghost_layers;
1148 mooseAssert(
dimension(),
"0-dimension not supported");
1156 std::vector<UserObject *> objs;
1161 .condition<AttribThread>(0)
1163 bool have_matching_rc_uo =
false;
1164 for (
const auto & obj : objs)
1167 if (rc_obj->blocks() ==
_blocks || (rc_obj->blocks().size() == 0 ||
_blocks.size() == 0))
1169 have_matching_rc_uo =
true;
1174 if (have_matching_rc_uo)
1180 const std::string u_names[3] = {
"u",
"v",
"w"};
1181 const auto object_type =
1194 unsigned short smoothing_layers =
isParamValid(
"porosity_smoothing_layers")
1195 ? getParam<unsigned short>(
"porosity_smoothing_layers")
1197 params.set<
unsigned short>(
"smoothing_layers") = smoothing_layers;
1203 params.set<MooseFunctorName>(
"a_u") =
"ax";
1204 params.set<MooseFunctorName>(
"a_v") =
"ay";
1205 params.set<MooseFunctorName>(
"a_w") =
"az";
1212std::vector<UserObjectName>
1222 mooseError(
"Rhie Chow coefficient ax must be provided for advection by auxiliary velocities");
1224 mooseError(
"Rhie Chow coefficient ay must be provided for advection by auxiliary velocities");
1226 mooseError(
"Rhie Chow coefficient az must be provided for advection by auxiliary velocities");
1241 if (upper_name ==
"DARCY")
1249 bool linear_friction_factor_found =
false;
1250 MooseFunctorName linear_friction_factor;
1255 if (upper_name ==
"DARCY" && !linear_friction_factor_found)
1257 linear_friction_factor_found =
true;
1260 else if (upper_name ==
"DARCY" && !linear_friction_factor_found)
1262 mooseError(
"Multiple linear friction factor with different names have been specified. "
1263 "This is not currently supported as a single name should be retrievable. "
1264 "Use a PiecewiseByBlockFunctorMaterial to consolidate them.");
1266 if (linear_friction_factor_found)
1267 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
void addSharedSolverVariable(const std::string &var_type, const VariableName &var_name, InputParameters params)
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