23 params.
addParam<std::vector<SolverSystemName>>(
24 "active_scalar_systems", {},
"The solver system for each active scalar advection equation.");
29 params.
addParam<std::vector<Real>>(
"active_scalar_equation_relaxation",
31 "The relaxation which should be used for the active scalar " 32 "equations. (=1 for no relaxation, " 33 "diagonal dominance will still be enforced)");
37 "Singleton PETSc options for the active scalar equation(s)");
39 "active_scalar_petsc_options_iname",
41 "Names of PETSc name/value pairs for the active scalar equation(s)");
42 params.
addParam<std::vector<std::string>>(
43 "active_scalar_petsc_options_value",
44 "Values of PETSc name/value pairs (must correspond with \"petsc_options_iname\" for the " 45 "active scalar equation(s)");
47 "active_scalar_absolute_tolerance",
49 "The absolute tolerance(s) on the normalized residual(s) of the active scalar equation(s).");
52 "0.0<=active_scalar_l_tol & active_scalar_l_tol<1.0",
53 "The relative tolerance on the normalized residual in the " 54 "linear solver of the active scalar equation(s).");
57 "0.0<active_scalar_l_abs_tol",
58 "The absolute tolerance on the normalized residual in the " 59 "linear solver of the active scalar equation(s).");
61 "active_scalar_l_max_its",
63 "The maximum allowed iterations in the linear solver of the turbulence equation.");
66 "active_scalar_systems active_scalar_equation_relaxation active_scalar_petsc_options " 67 "active_scalar_petsc_options_iname " 68 "active_scalar_petsc_options_value active_scalar_petsc_options_value " 69 "active_scalar_absolute_tolerance " 70 "active_scalar_l_tol active_scalar_l_abs_tol active_scalar_l_max_its",
71 "Active Scalars Equations");
78 "should_solve_momentum",
true,
"Whether we should solve the momentum predictor/corrector.");
80 "should_solve_pressure",
true,
"Whether we should solve the pressure corrector.");
82 "should_solve_energy",
true,
"Whether we should solve the fluid energy equation.");
84 "should_solve_solid_energy",
true,
"Whether we should solve the solid energy equation.");
85 params.
addParam<
bool>(
"should_solve_turbulence",
87 "Whether we should solve the turbulence surrogate equations.");
89 "should_solve_passive_scalars",
true,
"Whether we should solve passive scalar equations.");
91 "should_solve_active_scalars",
true,
"Whether we should solve active scalar equations.");
92 params.
addParam<
bool>(
"should_solve_pm_radiation",
94 "Whether we should solve participating media radiation equations.");
96 "should_solve_solid_energy should_solve_turbulence " 97 "should_solve_passive_scalars should_solve_active_scalars",
110 _pressure_sys_number(_problem.linearSysNum(getParam<SolverSystemName>(
"pressure_system"))),
111 _pressure_system(_problem.getLinearSystem(_pressure_sys_number)),
112 _energy_sys_number(_has_energy_system
113 ? _problem.linearSysNum(getParam<SolverSystemName>(
"energy_system"))
115 _energy_system(_has_energy_system ? &_problem.getLinearSystem(_energy_sys_number) : nullptr),
116 _solid_energy_sys_number(
117 _has_solid_energy_system
118 ? _problem.linearSysNum(getParam<SolverSystemName>(
"solid_energy_system"))
120 _solid_energy_system(
121 _has_solid_energy_system ? &_problem.getLinearSystem(_solid_energy_sys_number) : nullptr),
122 _should_solve_momentum(getParam<bool>(
"should_solve_momentum")),
123 _should_solve_pressure(getParam<bool>(
"should_solve_pressure")),
124 _should_solve_energy(getParam<bool>(
"should_solve_energy")),
125 _should_solve_solid_energy(getParam<bool>(
"should_solve_solid_energy")),
126 _should_solve_turbulence(getParam<bool>(
"should_solve_turbulence")),
127 _should_solve_passive_scalars(getParam<bool>(
"should_solve_passive_scalars")),
128 _should_solve_active_scalars(getParam<bool>(
"should_solve_active_scalars")),
129 _should_solve_pm_radiation(getParam<bool>(
"should_solve_pm_radiation")),
130 _active_scalar_system_names(getParam<
std::vector<SolverSystemName>>(
"active_scalar_systems")),
131 _has_active_scalar_systems(!_active_scalar_system_names.empty()),
132 _active_scalar_equation_relaxation(
133 getParam<
std::vector<
Real>>(
"active_scalar_equation_relaxation")),
134 _active_scalar_l_abs_tol(getParam<
Real>(
"active_scalar_l_abs_tol")),
135 _active_scalar_absolute_tolerance(
136 getParam<
std::vector<
Real>>(
"active_scalar_absolute_tolerance")),
137 _cht(ex.parameters())
141 "Pressure correction requires solving the momentum equations.");
144 "Solving momentum without a pressure corrector is not supported.");
147 "Solid energy solve cannot be enabled when the fluid energy solve is disabled.");
209 const auto & active_scalar_petsc_options =
210 getParam<MultiMooseEnum>(
"active_scalar_petsc_options");
211 const auto & active_scalar_petsc_pair_options = getParam<MooseEnumItem, std::string>(
212 "active_scalar_petsc_options_iname",
"active_scalar_petsc_options_value");
222 getParam<Real>(
"active_scalar_l_tol");
224 getParam<Real>(
"active_scalar_l_abs_tol");
226 getParam<unsigned int>(
"active_scalar_l_max_its");
230 paramError(
"active_scalar_equation_relaxation",
231 "Should be the same size as the number of systems");
236 system->system().prefix_with_name(
false);
245 "Conjugate heat transfer requires solving the fluid energy equation.");
248 "Conjugate heat transfer requires solving the solid energy equation.");
264 const_cast<RhieChowMassFlux *
>(&getUserObject<RhieChowMassFlux>(
"rhie_chow_user_object"));
274 std::vector<std::pair<unsigned int, Real>>
279 std::vector<std::pair<unsigned int, Real>> its_normalized_residuals;
285 libMesh::cast_ref<PetscLinearSolver<Real> &>(*momentum_system_0.
get_linear_solver());
296 libMesh::cast_ref<LinearImplicitSystem &>(
_momentum_systems[system_i]->system());
317 LibmeshPetscCall(KSPSetNormType(momentum_solver.ksp(), KSP_NORM_UNPRECONDITIONED));
324 auto its_resid_pair = momentum_solver.solve(mmat, mmat, solution, rhs);
329 momentum_solver.reuse_preconditioner(
true);
332 its_normalized_residuals.push_back(
333 std::make_pair(its_resid_pair.first, momentum_solver.get_initial_residual() / norm_factor));
337 _console <<
" matrix when we solve " << std::endl;
339 _console <<
" rhs when we solve " << std::endl;
341 _console <<
" velocity solution component " << system_i << std::endl;
343 _console <<
"Norm factor " << norm_factor << std::endl;
350 ? std::string(
" Component ") + std::to_string(system_i + 1) + std::string(
" ")
352 << COLOR_GREEN << its_normalized_residuals[system_i].second << COLOR_DEFAULT
353 <<
" Linear its: " << its_normalized_residuals[system_i].first << std::endl;
359 libMesh::cast_ref<LinearImplicitSystem &>(
_momentum_systems[system_i]->system());
366 momentum_solver.reuse_preconditioner(
false);
368 return its_normalized_residuals;
381 std::pair<unsigned int, Real>
398 libMesh::cast_ref<PetscLinearSolver<Real> &>(*pressure_system.
get_linear_solver());
404 _console <<
"Pressure matrix" << std::endl;
412 LibmeshPetscCall(KSPSetNormType(pressure_solver.
ksp(), KSP_NORM_UNPRECONDITIONED));
422 auto its_res_pair = pressure_solver.
solve(mmat, mmat, solution, rhs);
427 _console <<
" rhs when we solve pressure " << std::endl;
429 _console <<
" Pressure " << std::endl;
431 _console <<
"Norm factor " << norm_factor << std::endl;
436 const auto residuals =
439 _console <<
" Pressure equation: " << COLOR_GREEN << residuals.second << COLOR_DEFAULT
440 <<
" Linear its: " << residuals.first << std::endl;
445 std::pair<unsigned int, Real>
468 _console <<
"Solid energy matrix" << std::endl;
476 LibmeshPetscCall(KSPSetNormType(solver.
ksp(), KSP_NORM_UNPRECONDITIONED));
482 auto its_res_pair = solver.
solve(mmat, mmat, solution, rhs);
487 _console <<
" rhs when we solve solid energy " << std::endl;
489 _console <<
" Solid energy " << std::endl;
491 _console <<
"Norm factor " << norm_factor << std::endl;
496 const auto residuals =
499 _console <<
" Solid energy equation: " << COLOR_GREEN << residuals.second << COLOR_DEFAULT
500 <<
" Linear its: " << residuals.first << std::endl;
505 std::pair<unsigned int, Real>
507 const bool recompute_face_mass_flux,
524 if (recompute_face_mass_flux)
535 pressure_old_solution = pressure_current_solution;
547 std::pair<unsigned int, Real>
550 const Real relaxation_factor,
552 const Real absolute_tol,
553 const Real field_relaxation,
554 const Real min_value_limiter)
582 _console << system.
name() <<
" system matrix" << std::endl;
590 LibmeshPetscCall(KSPSetNormType(linear_solver.
ksp(), KSP_NORM_UNPRECONDITIONED));
597 auto its_res_pair = linear_solver.
solve(mmat, mmat, solution, rhs);
602 _console <<
" rhs when we solve " << system.
name() << std::endl;
606 _console <<
" Norm factor " << norm_factor << std::endl;
610 if (min_value_limiter != std::numeric_limits<Real>::min())
614 if (field_relaxation != 1.0)
620 old_local_solution = current_local_solution;
625 const auto residuals =
628 _console <<
" Advected system: " << system.
name() <<
" " << COLOR_GREEN << residuals.second
629 << COLOR_DEFAULT <<
" Linear its: " << residuals.first << std::endl;
643 solver_params.
_type = Moose::SolveType::ST_LINEAR;
644 solver_params.
_line_search = Moose::LineSearchType::LS_NONE;
647 unsigned int simple_iteration_counter = 0;
655 const auto energy_index = residual_storage.
energy_index;
669 simple_iteration_counter++;
682 _console <<
"Iteration " << simple_iteration_counter <<
" Initial residual norms:" << std::endl;
688 for (
const auto system_i :
index_range(momentum_residual))
689 ns_residuals[momentum_indices[system_i]] = momentum_residual[system_i];
695 ns_residuals[pressure_index] =
correctVelocity(
true,
true, solver_params);
725 ns_residuals[pm_radiation_indices[i]] =
776 ns_residuals[active_scalar_indices[i]] =
793 ns_residuals[turbulence_indices[i]] =
817 bool passive_scalar_converged =
false;
818 unsigned int ps_iteration_counter = 0;
820 _console <<
"Passive scalar iteration " << ps_iteration_counter
821 <<
" Initial residual norms:" << std::endl;
823 while (ps_iteration_counter <
_num_iterations && !passive_scalar_converged)
825 ps_iteration_counter++;
826 std::vector<std::pair<unsigned int, Real>> scalar_residuals(
828 std::vector<Real> scalar_abs_tols;
830 scalar_abs_tols.push_back(scalar_tol);
MultiMooseEnum getCommonPetscKeys()
void relaxMatrix(SparseMatrix< Number > &matrix_in, const Real relaxation_parameter, NumericVector< Number > &diff_diagonal)
Relax the matrix to ensure diagonal dominance, we hold onto the difference in diagonals for later use...
const std::vector< Real > _active_scalar_equation_relaxation
The user-defined relaxation parameter(s) for the active scalar equation(s)
static InputParameters validParams()
SIMPLESolverConfiguration _momentum_linear_control
Options for the linear solver of the momentum equation.
void addPetscFlagsToPetscOptions(const MultiMooseEnum &petsc_flags, std::string prefix, const ParallelParamObject ¶m_object, PetscOptions &petsc_options)
SIMPLESolverConfiguration _turbulence_linear_control
Options for the linear solver of the turbulence equation(s)
const Real _energy_absolute_tolerance
The user-defined absolute tolerance for determining the convergence in energy.
void updateCHTBoundaryCouplingFields(const NS::CHTSide side)
Update the coupling fields for.
const unsigned int _num_iterations
The maximum number of momentum-pressure iterations.
User object responsible for determining the face fluxes using the Rhie-Chow interpolation in a segreg...
SIMPLESolverConfiguration _energy_linear_control
Options for the linear solver of the energy equation.
const unsigned int invalid_uint
std::vector< Real > ns_abs_tols
Absolute tolerances matching ns_residuals.
void paramError(const std::string ¶m, Args... args) const
const bool _print_fields
Debug parameter which allows printing the coupling and solution vectors/matrices. ...
Moose::PetscSupport::PetscOptions _turbulence_petsc_options
Options which hold the petsc settings for the turbulence equation(s)
SIMPLESolverConfiguration _pm_radiation_linear_control
Options for the linear solver of the participating media radiation equation(s)
const Real _solid_energy_l_abs_tol
Absolute linear tolerance for the energy equations.
const bool _has_energy_system
Boolean for easy check if a fluid energy system shall be solved or not.
Moose::LineSearchType _line_search
Real computeNormalizationFactor(const NumericVector< Number > &solution, const SparseMatrix< Number > &mat, const NumericVector< Number > &rhs)
Compute a normalization factor which is applied to the linear residual to determine convergence...
void addPetscPairsToPetscOptions(const std::vector< std::pair< MooseEnumItem, std::string >> &petsc_pair_options, const unsigned int mesh_dimension, std::string prefix, const ParallelParamObject ¶m_object, PetscOptions &petsc_options)
SIMPLESolverConfiguration _active_scalar_linear_control
Options for the linear solver of the active scalar equation(s)
std::vector< Real > _turbulence_field_relaxation
The user-defined relaxation parameter(s) for the turbulence field(s)
const Real _passive_scalar_l_abs_tol
Absolute linear tolerance for the passive scalar equation(s).
std::pair< unsigned int, Real > solveSolidEnergy()
Solve an equation which contains the solid energy conservation.
std::vector< LinearSystem * > _passive_scalar_systems
Pointer(s) to the system(s) corresponding to the passive scalar equation(s)
void resetIntegratedFluxes()
Reset the heat fluxes to 0.
Moose::PetscSupport::PetscOptions _solid_energy_petsc_options
Options which hold the petsc settings for the fluid energy equation.
const Real _momentum_equation_relaxation
The user-defined relaxation parameter for the momentum equation.
virtual std::unique_ptr< NumericVector< T > > zero_clone() const=0
const bool _has_turbulence_systems
Boolean for easy check if a turbulence scalar systems shall be solved or not.
void computeFaceMassFlux()
Update the values of the face velocities in the containers.
std::vector< unsigned int > _turbulence_system_numbers
std::size_t solid_energy_index
Index of the solid energy equation in ns_residuals.
static InputParameters validParams()
const bool _should_solve_passive_scalars
void printIntegratedFluxes() const
Print the integrated heat fluxes.
LinearSystem * _solid_energy_system
Pointer to the linear system corresponding to the solid energy equation.
std::pair< unsigned int, Real > solveAdvectedSystem(const unsigned int system_num, LinearSystem &system, const Real relaxation_factor, libMesh::SolverConfiguration &solver_config, const Real abs_tol, const Real field_relaxation=1.0, const Real min_value_limiter=std::numeric_limits< Real >::min())
Solve an equation which contains an advection term that depends on the solution of the segregated Nav...
NumericVector< Number > * rhs
const Real _momentum_l_abs_tol
Absolute linear tolerance for the momentum equation(s).
Aggregated storage for residuals, tolerances, and indices used in convergence checks.
void setSolution(const NumericVector< Number > &soln)
const bool _has_active_scalar_systems
Boolean for easy check if a active scalar systems shall be solved or not.
virtual std::pair< unsigned int, Real > solve(SparseMatrix< T > &matrix_in, NumericVector< T > &solution_in, NumericVector< T > &rhs_in, const std::optional< double > tol=std::nullopt, const std::optional< unsigned int > m_its=std::nullopt) override
const Real _active_scalar_l_abs_tol
Absolute linear tolerance for the active scalar equation(s).
virtual LinearSolver< Number > * get_linear_solver() const override
void initializeCHTCouplingFields()
Initialize the coupling fields for the conjugate heat transfer routines.
RhieChowMassFlux * _rc_uo
Pointer to the segregated RhieChow interpolation object.
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...
const bool _should_solve_pm_radiation
void relaxRightHandSide(NumericVector< Number > &rhs_in, const NumericVector< Number > &solution_in, const NumericVector< Number > &diff_diagonal)
Relax the right hand side of an equation, this needs to be called once and the system matrix has been...
std::map< std::string, Real > real_valued_data
void setupConjugateHeatTransferContainers()
Set up the boundary condition pairs, functor maps, and every other necessary structure for the conjug...
virtual std::pair< unsigned int, Real > correctVelocity(const bool subtract_updated_pressure, const bool recompute_face_mass_flux, const SolverParams &solver_params)
Computes new velocity field based on computed pressure gradients.
std::vector< unsigned int > _pm_radiation_system_numbers
void resetCHTConvergence()
Reset the convergence data.
bool converged(const std::vector< std::pair< unsigned int, Real >> &residuals, const std::vector< Real > &abs_tolerances)
Based on the residuals, determine if the iterative process converged or not.
const Real _pressure_absolute_tolerance
The user-defined absolute tolerance for determining the convergence in pressure.
const Real _pressure_variable_relaxation
The user-defined relaxation parameter for the pressure variable.
std::size_t energy_index
Index of the energy equation in ns_residuals.
virtual void computeLinearSystemSys(libMesh::LinearImplicitSystem &sys, libMesh::SparseMatrix< libMesh::Number > &system_matrix, NumericVector< libMesh::Number > &rhs, const bool compute_gradients=true)
const Real _momentum_absolute_tolerance
The user-defined absolute tolerance for determining the convergence in momentum.
const std::vector< SolverSystemName > & _pm_radiation_system_names
The names of the participating media radiation systems.
virtual const std::string & name() const
const std::vector< SolverSystemName > & _passive_scalar_system_names
The names of the passive scalar systems.
const unsigned int _solid_energy_sys_number
The number of the system corresponding to the solid energy equation.
std::vector< LinearSystem * > _active_scalar_systems
Pointer(s) to the system(s) corresponding to the active scalar equation(s)
SIMPLESolverConfiguration _passive_scalar_linear_control
Options for the linear solver of the passive scalar equation(s)
void computeHbyA(const bool with_updated_pressure, const bool verbose)
Computes the inverse of the diagonal (1/A) of the system matrix plus the H/A components for the press...
virtual void execute(const ExecFlagType &exec_type)
Moose::PetscSupport::PetscOptions _energy_petsc_options
Options which hold the petsc settings for the fluid energy equation.
std::vector< std::size_t > turbulence_indices
Indices of turbulence surrogate equations in ns_residuals.
LinearSystem & _pressure_system
Reference to the linear system corresponding to the pressure equation.
std::vector< unsigned int > _momentum_system_numbers
The number(s) of the system(s) corresponding to the momentum equation(s)
SIMPLESolverConfiguration _pressure_linear_control
Options for the linear solver of the pressure equation.
MultiMooseEnum getCommonPetscFlags()
void linkEnergySystems(SystemBase *solid_energy_system, SystemBase *fluid_energy_system, std::vector< SystemBase *> pm_radiation_systems)
Link energy systems.
LinearSystem * _energy_system
Pointer to the linear system corresponding to the fluid energy equation.
const unsigned int _energy_sys_number
The number of the system corresponding to the energy equation.
void incrementCHTIterators()
Increment CHT iterators in the loop.
const bool _has_pm_radiation_systems
Boolean for easy check if participating media radiation systems shall be solved or not...
Moose::PetscSupport::PetscOptions _passive_scalar_petsc_options
Options which hold the petsc settings for the passive scalar equation(s)
virtual unsigned int dimension() const
std::map< std::string, int > int_valued_data
bool converged() const
Check if CHT iteration converged.
const bool _should_solve_energy
ResidualStorage setupResidualStorage() const
Build residual/tolerance vectors and associated indices for all enabled systems.
virtual std::unique_ptr< SparseMatrix< T > > zero_clone() const=0
void linkMomentumPressureSystems(const std::vector< LinearSystem *> &momentum_systems, const LinearSystem &pressure_system, const std::vector< unsigned int > &momentum_system_numbers)
Update the momentum system-related information.
Moose::PetscSupport::PetscOptions _momentum_petsc_options
Options which hold the petsc settings for the momentum equation.
const Real _pressure_l_abs_tol
Absolute linear tolerance for the pressure equation.
const std::vector< Real > _passive_scalar_absolute_tolerance
The user-defined absolute tolerance for determining the convergence in passive scalars.
std::unique_ptr< NumericVector< Number > > solution
dof_id_type _pressure_pin_dof
The dof ID where the pressure needs to be pinned.
void computeCellVelocity()
Update the cell values of the velocity variables.
const std::vector< SolverSystemName > & _turbulence_system_names
The names of the turbulence systems.
const std::vector< Real > _pm_radiation_equation_relaxation
The user-defined relaxation parameter(s) for the participating media radiation equation(s) ...
virtual bool solve() override
Performs the momentum pressure coupling.
virtual void print(std::ostream &os=libMesh::out) const
const bool _pin_pressure
If the pressure needs to be pinned.
const Real _energy_l_abs_tol
Absolute linear tolerance for the energy equations.
const std::vector< Real > _pm_radiation_absolute_tolerance
The user-defined absolute tolerance for determining the convergence in participating media radiation...
std::string stringify(const T &t)
void petscSetOptions(const PetscOptions &po, const SolverParams &solver_params, FEProblemBase *const problem=nullptr)
std::vector< std::size_t > momentum_indices
Indices of momentum equations in ns_residuals.
void sumIntegratedFluxes()
Sum the integrated fluxes over all processors.
virtual void initialSetup() override
virtual void linkRhieChowUserObject() override
Fetch the Rhie Chow user object that is reponsible for determining face velocities and mass flux...
LinearSystem & getLinearSystem(unsigned int sys_num)
void set_solver_configuration(SolverConfiguration &solver_configuration)
const std::vector< Real > _turbulence_equation_relaxation
The user-defined relaxation parameter(s) for the turbulence equation(s)
const std::vector< SolverSystemName > & _momentum_system_names
The names of the momentum systems.
std::vector< LinearSystem * > _turbulence_systems
Pointer(s) to the system(s) corresponding to the turbulence equation(s)
LinearAssemblySegregatedSolve(Executioner &ex)
const ExecFlagType EXEC_NONLINEAR
const Real _pm_radiation_l_abs_tol
Absolute linear tolerance for the participating media radiation equation(s).
const std::vector< Real > _passive_scalar_equation_relaxation
The user-defined relaxation parameter(s) for the passive scalar equation(s)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const std::vector< SolverSystemName > & _active_scalar_system_names
The names of the active scalar systems.
Real get_initial_residual()
const Real _energy_equation_relaxation
The user-defined relaxation parameter for the energy equation.
SparseMatrix< Number > * matrix
void setCurrentLinearSystem(unsigned int sys_num)
std::vector< LinearSystem * > _systems_to_solve
Shortcut to every linear system that we solve for here.
const Real _pressure_pin_value
The value we want to enforce for pressure.
virtual std::vector< std::pair< unsigned int, Real > > solveMomentumPredictor() override
Solve a momentum predictor step with a fixed pressure field.
const Real _turbulence_l_abs_tol
Absolute linear tolerance for the turbulence equation(s).
virtual MooseMesh & mesh() override
unsigned int linearSysNum(const LinearSystemName &linear_sys_name) const override
void deduceCHTBoundaryCoupling()
Run error checks and make sure everything works.
virtual std::pair< unsigned int, Real > solvePressureCorrector() override
Solve a pressure corrector step.
Moose::PetscSupport::PetscOptions _active_scalar_petsc_options
Options which hold the petsc settings for the active scalar equation(s)
std::unique_ptr< NumericVector< Number > > current_local_solution
virtual const NumericVector< Number > * solutionPreviousNewton() const
Solve class serving as a base class for the two SIMPLE solvers that operate with different assembly a...
const bool _has_passive_scalar_systems
Boolean for easy check if a passive scalar systems shall be solved or not.
const std::vector< Real > _active_scalar_absolute_tolerance
The user-defined absolute tolerance for determining the convergence in active scalars.
virtual bool enabled() const override final
Check if CHT treatment is needed.
std::size_t pressure_index
Index of the pressure equation in ns_residuals.
bool converged
This will be an initial indicator if we have something to solve.
const ConsoleStream _console
static InputParameters validParams()
const Real _solid_energy_absolute_tolerance
The user-defined absolute tolerance for determining the convergence in solid energy.
std::vector< unsigned int > _active_scalar_system_numbers
SIMPLESolverConfiguration _solid_energy_linear_control
Options for the linear solver of the energy equation.
std::vector< LinearSystem * > _momentum_systems
Pointer(s) to the system(s) corresponding to the momentum equation(s)
const bool _continue_on_max_its
If solve should continue if maximum number of iterations is hit.
Moose::PetscSupport::PetscOptions _pm_radiation_petsc_options
Options which hold the petsc settings for the participating media radiation equation(s) ...
std::vector< std::size_t > active_scalar_indices
Indices of active scalar equations in ns_residuals.
std::vector< Real > _turbulence_field_min_limit
The user-defined lower limit for turbulent quantities e.g. k, eps/omega, etc..
void constrainSystem(SparseMatrix< Number > &mx, NumericVector< Number > &rhs, const Real desired_value, const dof_id_type dof_id)
Implicitly constrain the system by adding a factor*(u-u_desired) to it at a desired dof value...
std::vector< std::size_t > pm_radiation_indices
Indices of participating media radiation equations in ns_residuals.
void limitSolutionUpdate(NumericVector< Number > &solution, const Real min_limit=std::numeric_limits< Real >::epsilon(), const Real max_limit=1e10)
Limit a solution to its minimum and maximum bounds: $u = min(max(u, min_limit), max_limit)$.
bool isRecovering() const
void relaxSolutionUpdate(NumericVector< Number > &vec_new, const NumericVector< Number > &vec_old, const Real relaxation_factor)
Relax the update on a solution field using the following approach: $u = u_{old}+ (u - u_{old})$...
const bool _should_solve_active_scalars
std::vector< std::pair< unsigned int, Real > > ns_residuals
(linear iterations, normalized residual) entries in the order used by NS::FV::converged() ...
const std::vector< Real > _turbulence_absolute_tolerance
The user-defined absolute tolerance for determining the convergence turbulence variables.
const bool _should_solve_turbulence
const bool _should_solve_momentum
Flags controlling which systems are actively solved (can be used with restart to freeze flow) ...
std::vector< LinearSystem * > _pm_radiation_systems
Pointer(s) to the system(s) corresponding to the participting media radiation equation(s) ...
auto index_range(const T &sizable)
void print(std::ostream &os=libMesh::out, const bool sparse=false) const
std::vector< unsigned int > _passive_scalar_system_numbers
NS::FV::CHTHandler _cht
********************** Conjugate heat transfer variables ************** //
void initCouplingField()
Initialize the coupling fields (HbyA and Ainv)
Moose::PetscSupport::PetscOptions _pressure_petsc_options
Options which hold the petsc settings for the pressure equation.
virtual System & system() override
const bool _should_solve_solid_energy
const bool _has_solid_energy_system
Boolean for easy check if a solid energy system shall be solved or not.
void initFaceMassFlux()
Initialize the container for face velocities.
const bool _should_solve_pressure
const unsigned int _pressure_sys_number
The number of the system corresponding to the pressure equation.