19 "add_interpolation_method_physics");
25 params.
addClassDescription(
"Define the Navier Stokes weakly-compressible scalar field transport " 26 "equation(s) using the linear finite volume discretization");
27 params.
set<
MooseEnum>(
"passive_scalar_advection_interpolation") =
29 params.
addParam<InterpolationMethodName>(
30 "passive_scalar_advection_interpolation_method_name",
31 "Name of an externally defined FVInterpolationMethod to use for passive scalar advection. " 32 "When provided, this overrides 'passive_scalar_advection_interpolation'.");
33 params.
addParam<
bool>(
"use_nonorthogonal_correction",
35 "If the nonorthogonal correction should be used when computing the normal " 36 "gradient, notably in the diffusion term.");
55 "Porous media scalar advection is currently unimplemented");
83 "MooseLinearVariableFVReal");
89 params.set<std::vector<Real>>(
"scaling") = {
90 getParam<std::vector<Real>>(
"passive_scalar_scaling")[name_i]};
99 std::string kernel_type =
"LinearFVTimeDerivative";
105 params.
set<LinearVariableName>(
"variable") = vname;
114 const auto method_name =
115 isParamValid(
"passive_scalar_advection_interpolation_method_name")
116 ? getParam<InterpolationMethodName>(
"passive_scalar_advection_interpolation_method_name")
117 : InterpolationMethodName(
118 std::string(getParam<MooseEnum>(
"passive_scalar_advection_interpolation")));
120 const std::string kernel_type =
"LinearFVScalarAdvection";
125 params.
set<InterpolationMethodName>(
"advected_interp_method_name") = method_name;
130 params.
set<LinearVariableName>(
"variable") = vname;
139 const auto passive_scalar_diffusivities =
140 getParam<std::vector<MooseFunctorName>>(
"passive_scalar_diffusivity");
142 if (passive_scalar_diffusivities.size())
144 const std::string kernel_type =
"LinearFVDiffusion";
147 params.
set<
bool>(
"use_nonorthogonal_correction") =
148 getParam<bool>(
"use_nonorthogonal_correction");
152 params.
set<MooseFunctorName>(
"diffusion_coeff") =
163 const std::string kernel_type =
"LinearFVSource";
182 params.
set<MooseFunctorName>(
"source_density") =
189 "_coupled_source_" + std::to_string(i),
199 if (inlet_boundaries.empty())
207 "passive_scalar_inlet_types",
209 ") is not equal to the number of inlet boundaries (" +
210 std::to_string(inlet_boundaries.size()) +
") times the number of passive scalars (" +
214 "The number of groups of inlet functors (" +
216 ") is not equal to the number of passive scalars (" +
223 "The number of inlet boundary functors for scalar '" +
225 "' does not match the number of inlet boundaries (" +
228 unsigned int num_inlets = inlet_boundaries.size();
229 for (
unsigned int bc_ind = 0; bc_ind < num_inlets; ++bc_ind)
233 const std::string bc_type =
"LinearFVAdvectionDiffusionFunctorDirichletBC";
237 params.
set<std::vector<BoundaryName>>(
"boundary") = {inlet_boundaries[bc_ind]};
245 mooseError(
"Flux boundary conditions not supported at this time using the linear finite " 246 "volume discretization");
262 if (outlet_boundaries.empty())
265 for (
const auto & outlet_bdy : outlet_boundaries)
267 const std::string bc_type =
"LinearFVAdvectionDiffusionOutflowBC";
269 params.
set<std::vector<BoundaryName>>(
"boundary") = {outlet_bdy};
270 params.
set<
bool>(
"use_two_term_expansion") =
271 getParam<bool>(
"passive_scalar_two_term_bc_expansion");
std::string prefix() const
static InputParameters validParams()
void assignBlocks(InputParameters ¶ms, const std::vector< SubdomainName > &blocks) const
bool shouldCreateVariable(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_aux)
void paramError(const std::string ¶m, Args... args) const
const std::vector< BoundaryName > & getOutletBoundaries() const
Get the outlet boundaries.
void addRequiredPhysicsTask(const std::string &task)
const std::vector< BoundaryName > & getInletBoundaries() const
Get the inlet boundaries.
void addFVAdvectedInterpolationMethod(const MooseEnum &interpolation_method)
Add the FVInterpolationMethod object for an advected interpolation method if absent.
virtual void addScalarOutletBC() override
registerNavierStokesPhysicsBaseTasks("NavierStokesApp", WCNSLinearFVScalarTransportPhysics)
InputParameters getValidParams(const std::string &name) const
void reportPotentiallyMissedParameters(const std::vector< std::string > ¶m_names, const std::string &object_type, const std::string &object_name="") const
unsigned int size() const
Creates all the objects needed to solve the Navier Stokes scalar transport equations using the linear...
bool _has_turbulence_model
Because of the Modules/navierStokesFV syntax, a turbulence physics often exists without a model we sa...
std::vector< NonlinearVariableName > _passive_scalar_names
Names of the passive scalar variables.
bool shouldCreateTimeDerivative(const VariableName &var_name, const std::vector< SubdomainName > &blocks, const bool error_if_already_defined) const
std::vector< SubdomainName > _blocks
std::vector< std::vector< MooseFunctorName > > _passive_scalar_inlet_functors
Functors describing the inlet boundary values. See passive_scalar_inlet_types for what the functors a...
virtual FEProblemBase & getProblem()
virtual void addScalarInletBC() override
Functions adding boundary conditions for the incompressible simulation.
const SolverSystemName & getSolverSystem(unsigned int variable_index) const
std::vector< std::vector< Real > > _passive_scalar_sources_coef
Coefficients multiplying for the passive scalar sources. Inner indexing is scalar variable index...
virtual void addScalarTimeKernels() override
Functions adding kernels for the incompressible / weakly-compressible scalar transport equation If th...
virtual void addSolverVariables() override
const bool _porous_medium_treatment
Switch to show if porous medium treatment is requested or not.
std::vector< std::vector< MooseFunctorName > > _passive_scalar_coupled_sources
Functors for the passive scalar (coupled) sources. Inner indexing is scalar variable index...
virtual void addFVInterpolationMethods() override
virtual void addVariable(const std::string &var_type, const std::string &var_name, InputParameters ¶ms)
virtual void setSlipVelocityParams(InputParameters &) const
virtual void addLinearFVKernel(const std::string &kernel_name, const std::string &name, InputParameters ¶meters)
virtual void addScalarDiffusionKernels() override
MooseEnum fvAdvectedInterpolationMethods()
Enum of the advected interpolation methods supported by FVInterpolationMethod objects.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void addLinearFVBC(const std::string &fv_bc_name, const std::string &name, InputParameters ¶meters)
const UserObjectName & rhieChowUOName() const
Return the name of the Rhie Chow user object.
Creates all the objects needed to solve the Navier Stokes scalar transport equations.
void mooseError(Args &&... args) const
static InputParameters validParams()
std::vector< MooseFunctorName > _passive_scalar_sources
Functors for the passive scalar sources. Indexing is scalar variable index.
bool isParamValid(const std::string &name) const
WCNSLinearFVScalarTransportPhysics(const InputParameters ¶meters)
virtual unsigned short getNumberAlgebraicGhostingLayersNeeded() const override
Return the number of ghosting layers needed.
MultiMooseEnum _passive_scalar_inlet_types
Passive scalar inlet boundary types.
const bool _has_scalar_equation
A boolean to help compatibility with the old Modules/NavierStokesFV syntax or to deliberately skip ad...
registerMooseAction("NavierStokesApp", WCNSLinearFVScalarTransportPhysics, "add_interpolation_method_physics")
const WCNSFVFlowPhysicsBase * _flow_equations_physics
Flow physics.
auto index_range(const T &sizable)
registerWCNSFVScalarTransportBaseTasks("NavierStokesApp", WCNSLinearFVScalarTransportPhysics)
virtual void addScalarSourceKernels() override
Equivalent of NSFVAction addScalarCoupledSourceKernels.
virtual void addScalarAdvectionKernels() override