54 unsigned short RunTime_EqSystem,
unsigned short iZone,
unsigned short iInst)
override;
62 const CConfig *config)
override;
82 unsigned short iMesh,
unsigned short mu,
unsigned short RunTime_EqSystem,
83 unsigned short iZone,
unsigned short iInst);
120 void SetRestricted_Gradient(
unsigned short RunTime_EqSystem,
CSolver *sol_fine,
CSolver *sol_coarse,
133 CConfig *config,
unsigned short FinestMesh,
unsigned short RunTime_EqSystem,
145 void SetProlongated_Solution(
unsigned short RunTime_EqSystem,
CSolver *sol_fine,
CSolver *sol_coarse,
160 void PostSmoothing(
unsigned short RunTime_EqSystem,
CSolver* solver_fine,
CNumerics** numerics_fine,
162 unsigned short iMesh,
unsigned short iRKLimit);
179 void PreSmoothing(
unsigned short RunTime_EqSystem,
CGeometry**** geometry,
CSolver***** solver_container,
182 unsigned short iMesh,
unsigned short iZone,
unsigned short iRKLimit);
192 void GetProlongated_Correction(
unsigned short RunTime_EqSystem,
CSolver *sol_fine,
CSolver *sol_coarse,
204 void SmoothProlongated_Correction(
unsigned short RunTime_EqSystem,
CSolver *solver,
CGeometry *geometry,
206 unsigned short iMesh);
217 void SetRestricted_Solution(
unsigned short RunTime_EqSystem,
CSolver *sol_fine,
CSolver *sol_coarse,
229 unsigned short RunTime_EqSystem,
unsigned long Iteration,
unsigned short iZone);
253 unsigned short RunTime_EqSystem,
unsigned short iZone,
unsigned short iInst,
254 unsigned short FinestMesh,
bool FullMG,
bool mesh0_ramp_window);
262 bool FullMG_Mesh0HasRamp(
const CConfig* config,
unsigned short FinestMesh,
bool FullMG)
const {
264 (mg_ramp_cfl_start > 0.0);
270 bool FullMG_Mesh0Ramping(
const CConfig* config,
unsigned short FinestMesh,
bool FullMG)
const {
271 return FullMG_Mesh0HasRamp(config, FinestMesh, FullMG) &&
278 bool FullMG_Mesh0RampRestore(
const CConfig* config,
unsigned short FinestMesh,
bool FullMG)
const {
279 return FullMG_Mesh0HasRamp(config, FinestMesh, FullMG) &&
286 bool FullMG_Mesh0RampWindow(
const CConfig* config,
unsigned short FinestMesh,
bool FullMG)
const {
287 return FullMG_Mesh0Ramping(config, FinestMesh, FullMG) ||
288 FullMG_Mesh0RampRestore(config, FinestMesh, FullMG);
316 void prePostEarlyExit(
unsigned short iSmooth,
unsigned short iMesh,
322 static constexpr int MAX_MG_LEVELS = 10;
326 static constexpr unsigned short MAXNVAR = 25;
327 static constexpr unsigned short MAXNDIM = 3;
330 bool mg_early_exit_flag =
false;
337 unsigned short lastPreSmoothIters[MAX_MG_LEVELS+1] = {};
338 unsigned short lastPostSmoothIters[MAX_MG_LEVELS+1] = {};
339 unsigned short lastCorrecSmoothIters[MAX_MG_LEVELS+1] = {};
341 char lastPreSmoothExitReason[MAX_MG_LEVELS+1] = {};
342 char lastPostSmoothExitReason[MAX_MG_LEVELS+1] = {};
351 passivedouble lastPreSmoothWorstStepRatio[MAX_MG_LEVELS+1] = {};
352 passivedouble lastPostSmoothWorstStepRatio[MAX_MG_LEVELS+1] = {};
353 unsigned short lastPreSmoothWorstStep[MAX_MG_LEVELS+1] = {};
354 unsigned short lastPostSmoothWorstStep[MAX_MG_LEVELS+1] = {};
358 unsigned short mg_ramp_last_FinestMesh = 0;
359 unsigned long mg_ramp_level_start_iter = 0;
361 bool mg_ramp_mesh0_active =
false;
363 su2double mg_damp_restric_initial = -1.0;
367 enum class MGStartupPromote {
NONE, BUDGET, CONVERGENCE, STAGNATION };
368 MGStartupPromote mg_startup_promote_reason = MGStartupPromote::NONE;
370 vector<passivedouble> mg_startup_conv_start;
371 vector<passivedouble> mg_startup_conv_prev;
372 unsigned long mg_startup_stall_count = 0;
Declaration of the main routines to orchestrate space and time integration.
Main class for defining the problem; basically this class reads the configuration file,...
Definition CConfig.hpp:64
unsigned long GetInnerIter(void) const
Get the current FSI iteration number.
Definition CConfig.hpp:3405
const CMGOptions & GetMGOptions() const
Get the multigrid options struct.
Definition CConfig.hpp:3900
Parent class for defining the geometry of the problem (complete geometry, multigrid agglomerated geom...
Definition CGeometry.hpp:75
Main class for doing the space integration, time integration, and monitoring of a system of Partial D...
Definition CIntegration.hpp:47
Class for time integration using a multigrid method.
Definition CMultiGridIntegration.hpp:36
CMultiGridIntegration()
Constructor of the class.
Definition CMultiGridIntegration.cpp:75
bool GetFullMG_CFLRamp() const override
Whether the Full-MG startup is still ramping the CFL of the finest grid.
Definition CMultiGridIntegration.hpp:64
void MonitorFullMG_Startup(const vector< pair< string, passivedouble > > &convFields, const CConfig *config) override
Record CONV_FIELD on the active Full-MG level and decide whether it is done.
Definition CMultiGridIntegration.cpp:77
unsigned long GetLevelStartIter() const override
InnerIter at which the currently active Full-MG level became active.
Definition CMultiGridIntegration.hpp:66
void MultiGrid_Iteration(CGeometry ****geometry, CSolver *****solver_container, CNumerics ******numerics_container, CConfig **config, unsigned short RunTime_EqSystem, unsigned short iZone, unsigned short iInst) override
This subroutine calls the MultiGrid_Cycle and also prepare the multigrid levels and the monitoring.
Definition CMultiGridIntegration.cpp:243
Class for defining the numerical methods.
Definition CNumerics.hpp:48
Definition CSolver.hpp:71
double passivedouble
Definition code_config.hpp:129
passivedouble su2double
Definition code_config.hpp:181
@ NONE
Definition option_structure.hpp:282
const unsigned int MESH_0
Definition of the finest grid level.
Definition option_structure.hpp:88
Structure containing multigrid options.
Definition option_structure.hpp:1225
unsigned long MG_Startup_Iter
Iterations per mesh during FMG startup, and the length of each level's CFL ramp. 0 = no iteration bud...
Definition option_structure.hpp:1237