https://mooseframework.inl.gov
LinearAssemblySegregatedSolve.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 
12 // Moose includes
13 #include "RhieChowMassFlux.h"
14 #include "SIMPLESolveBase.h"
15 #include "CHTHandler.h"
16 
24 {
25 public:
27 
29 
30  virtual void linkRhieChowUserObject() override;
31 
32  virtual void initialSetup() override;
33 
38  virtual bool solve() override;
39 
41  const std::vector<LinearSystem *> systemsToSolve() const { return _systems_to_solve; }
42 
43 protected:
44  virtual std::vector<std::pair<unsigned int, Real>> solveMomentumPredictor() override;
45  virtual std::pair<unsigned int, Real> solvePressureCorrector() override;
46 
52  virtual std::pair<unsigned int, Real> correctVelocity(const bool subtract_updated_pressure,
53  const bool recompute_face_mass_flux,
54  const SolverParams & solver_params);
55 
66  std::pair<unsigned int, Real>
67  solveAdvectedSystem(const unsigned int system_num,
68  LinearSystem & system,
69  const Real relaxation_factor,
70  libMesh::SolverConfiguration & solver_config,
71  const Real abs_tol,
72  const Real field_relaxation = 1.0,
73  const Real min_value_limiter = std::numeric_limits<Real>::min());
74 
77  {
79  std::vector<std::pair<unsigned int, Real>> ns_residuals;
81  std::vector<Real> ns_abs_tols;
83  std::vector<std::size_t> momentum_indices;
91  std::vector<std::size_t> active_scalar_indices;
93  std::vector<std::size_t> turbulence_indices;
95  std::vector<std::size_t> pm_radiation_indices;
98  bool converged = false;
99  };
100 
105 
107  std::pair<unsigned int, Real> solveSolidEnergy();
108 
110  std::vector<unsigned int> _momentum_system_numbers;
111 
113  std::vector<LinearSystem *> _momentum_systems;
114 
116  const unsigned int _pressure_sys_number;
117 
120 
122  const unsigned int _energy_sys_number;
123 
126 
128  const unsigned int _solid_energy_sys_number;
129 
132 
134  std::vector<LinearSystem *> _passive_scalar_systems;
135 
137  std::vector<LinearSystem *> _pm_radiation_systems;
138 
140  std::vector<LinearSystem *> _active_scalar_systems;
141 
143  std::vector<LinearSystem *> _turbulence_systems;
144 
147 
149  std::vector<LinearSystem *> _systems_to_solve;
150 
160 
161  // ************************ Active Scalar Variables ************************ //
162 
164  const std::vector<SolverSystemName> & _active_scalar_system_names;
165 
168 
169  // The number(s) of the system(s) corresponding to the active scalar equation(s)
170  std::vector<unsigned int> _active_scalar_system_numbers;
171 
173  const std::vector<Real> _active_scalar_equation_relaxation;
174 
177 
180 
184 
186  const std::vector<Real> _active_scalar_absolute_tolerance;
187 
189 
190  // Handler object for CHT problems
192 };
const std::vector< LinearSystem * > systemsToSolve() const
Return pointers to the systems which are solved for within this object.
const std::vector< Real > _active_scalar_equation_relaxation
The user-defined relaxation parameter(s) for the active scalar equation(s)
User object responsible for determining the face fluxes using the Rhie-Chow interpolation in a segreg...
This class provides an interface for managing conjugate heat transfer (CHT) between fluid and solid d...
Definition: CHTHandler.h:29
Common base class for segregated solvers for the Navier-Stokes equations with linear FV assembly rout...
std::vector< Real > ns_abs_tols
Absolute tolerances matching ns_residuals.
SIMPLESolverConfiguration _active_scalar_linear_control
Options for the linear solver of the active 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)
std::size_t solid_energy_index
Index of the solid energy equation in ns_residuals.
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...
Aggregated storage for residuals, tolerances, and indices used in convergence checks.
const bool _has_active_scalar_systems
Boolean for easy check if a active scalar systems shall be solved or not.
const Real _active_scalar_l_abs_tol
Absolute linear tolerance for the active scalar equation(s).
RhieChowMassFlux * _rc_uo
Pointer to the segregated RhieChow interpolation object.
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::size_t energy_index
Index of the energy equation in ns_residuals.
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)
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)
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.
ResidualStorage setupResidualStorage() const
Build residual/tolerance vectors and associated indices for all enabled systems.
virtual bool solve() override
Performs the momentum pressure coupling.
std::vector< std::size_t > momentum_indices
Indices of momentum equations in ns_residuals.
virtual void linkRhieChowUserObject() override
Fetch the Rhie Chow user object that is reponsible for determining face velocities and mass flux...
std::vector< LinearSystem * > _turbulence_systems
Pointer(s) to the system(s) corresponding to the turbulence equation(s)
Solver configuration class used with the linear solvers in a SIMPLE solver.
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.
std::vector< LinearSystem * > _systems_to_solve
Shortcut to every linear system that we solve for here.
virtual std::vector< std::pair< unsigned int, Real > > solveMomentumPredictor() override
Solve a momentum predictor step with a fixed pressure field.
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)
Solve class serving as a base class for the two SIMPLE solvers that operate with different assembly a...
const std::vector< Real > _active_scalar_absolute_tolerance
The user-defined absolute tolerance for determining the convergence in active scalars.
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.
std::vector< unsigned int > _active_scalar_system_numbers
std::vector< LinearSystem * > _momentum_systems
Pointer(s) to the system(s) corresponding to the momentum equation(s)
std::vector< std::size_t > active_scalar_indices
Indices of active scalar equations in ns_residuals.
std::vector< std::size_t > pm_radiation_indices
Indices of participating media radiation equations in ns_residuals.
std::vector< std::pair< unsigned int, Real > > ns_residuals
(linear iterations, normalized residual) entries in the order used by NS::FV::converged() ...
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) ...
constexpr std::size_t invalid_size_t
NS::FV::CHTHandler _cht
********************** Conjugate heat transfer variables ************** //
const unsigned int _pressure_sys_number
The number of the system corresponding to the pressure equation.