diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index e44ad6a10a7..7d85083eafb 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -1147,6 +1147,8 @@ class CConfig { /*--- Multigrid options ---*/ unsigned short nMG_PreSmooth_p{0}, nMG_PostSmooth_p{0}, nMG_CorrecSmooth_p{0}; unsigned short *MG_PreSmooth_p{nullptr}, *MG_PostSmooth_p{nullptr}, *MG_CorrecSmooth_p{nullptr}; + unsigned short nMG_CflScaling_p{0}; + su2double *MG_CflScaling_p{nullptr}; ENUM_STREAMWISE_PERIODIC Kind_Streamwise_Periodic; /*!< \brief Kind of Streamwise periodic flow (pressure drop or massflow) */ bool Streamwise_Periodic_Temperature; /*!< \brief Use real periodicity for Energy equation or otherwise outlet source term. */ diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index 4c521c29239..0cc823bd879 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -1117,9 +1117,12 @@ struct CMGOptions { std::vector MG_PreSmooth; /*!< \brief Multigrid pre-smoothing iterations per level. */ std::vector MG_PostSmooth; /*!< \brief Multigrid post-smoothing iterations per level. */ std::vector MG_CorrecSmooth; /*!< \brief Multigrid Jacobi correction-smoothing per level. */ + std::vector MG_CflScaling; /*!< \brief Per-level CFL scaling factors relative to the previous (finer) level. Entry [i] scales level i+1 from level i. Size = nMGLevels. */ bool MG_Smooth_EarlyExit{false}; /*!< \brief Enable early exit for MG smoothing iterations. */ bool MG_Smooth_Output{false}; /*!< \brief Output compact per-cycle smoothing summary. */ + su2double MG_Smooth_StagnationTol{0.0}; /*!< \brief Stagnation early exit: stop if current_rms >= prev_rms * tol. 0 = disabled. */ bool MG_Implicit_Lines{false}; /*!< \brief Enable implicit-lines agglomeration from walls. */ + unsigned long MG_Implicit_Lines_MaxLength{20}; /*!< \brief Maximum nodes on a wall-normal implicit line (including wall seed). */ }; /*! diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index c168ced0830..72f54c5564a 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -1986,15 +1986,21 @@ void CConfig::SetConfig_Options() { /*!\brief MG_SMOOTH_EARLY_EXIT\n DESCRIPTION: Enable early exit for MG smoothing when RMS drops below threshold. DEFAULT: NO \ingroup Config*/ addBoolOption("MG_SMOOTH_EARLY_EXIT", MGOptions.MG_Smooth_EarlyExit, true); /*!\brief MG_SMOOTH_RES_THRESHOLD\n DESCRIPTION: Smoothing stops when current_rms < threshold * initial_rms. DEFAULT: 0.1 \ingroup Config*/ - addDoubleOption("MG_SMOOTH_RES_THRESHOLD", MGOptions.MG_Smooth_Res_Threshold, 0.5); + addDoubleOption("MG_SMOOTH_RES_THRESHOLD", MGOptions.MG_Smooth_Res_Threshold, 0.9); /*!\brief MG_SMOOTH_OUTPUT\n DESCRIPTION: Print compact per-cycle smoothing iteration summary. DEFAULT: NO \ingroup Config*/ addBoolOption("MG_SMOOTH_OUTPUT", MGOptions.MG_Smooth_Output, false); + /*!\brief MG_SMOOTH_STAGNATION_TOL\n DESCRIPTION: Early exit smoothing when step-to-step RMS ratio >= this value (0 = disabled). DEFAULT: 0.0 \ingroup Config*/ + addDoubleOption("MG_SMOOTH_STAGNATION_TOL", MGOptions.MG_Smooth_StagnationTol, 0.99); /*!\brief MG_SMOOTH_COEFF\n DESCRIPTION: Smoothing coefficient for the correction prolongation Jacobi smoother. DEFAULT: 1.25 \ingroup Config*/ addDoubleOption("MG_SMOOTH_COEFF", MGOptions.MG_Smooth_Coeff, 1.25); /*!\brief MG_MIN_MESHSIZE\n DESCRIPTION: Minimum number of CVs on the coarsest multigrid level. Levels that would produce fewer CVs are not created. DEFAULT: 50 \ingroup Config*/ addUnsignedLongOption("MG_MIN_MESHSIZE", MGOptions.MG_Min_MeshSize, 500); /*!\brief MG_IMPLICIT_LINES\n DESCRIPTION: Enable agglomeration along implicit lines from wall seeds. DEFAULT: NO \ingroup Config*/ addBoolOption("MG_IMPLICIT_LINES", MGOptions.MG_Implicit_Lines, false); + /*!\brief MG_IMPLICIT_LINES_MAX_LENGTH\n DESCRIPTION: Maximum number of nodes on a wall-normal implicit agglomeration line (including the wall seed node). DEFAULT: 20 \ingroup Config*/ + addUnsignedLongOption("MG_IMPLICIT_LINES_MAX_LENGTH", MGOptions.MG_Implicit_Lines_MaxLength, 20); + /*!\brief MG_CFL_SCALING\n DESCRIPTION: Per-level CFL scaling factors for coarse MG levels. Entry i is the ratio CFL(i+1)/CFL(i). If fewer values than nMGLevels are given, the last value is repeated. DEFAULT: 0.25 (i.e., 1/4 per level) \ingroup Config*/ + addDoubleListOption("MG_CFL_SCALING", nMG_CflScaling_p, MG_CflScaling_p); /*!\par CONFIG_CATEGORY: Spatial Discretization \ingroup Config*/ /*--- Options related to the spatial discretization ---*/ @@ -4789,6 +4795,16 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i [](unsigned short ) { return (unsigned short)0; }); fillSmooth(nMG_CorrecSmooth_p, MG_CorrecSmooth_p, MGOptions.MG_CorrecSmooth, [](unsigned short ) { return (unsigned short)0; }); + + /*--- Fill MG_CflScaling to size nMGLevels (one entry per coarse level transition). ---*/ + MGOptions.MG_CflScaling.resize(nMGLevels); + if (nMG_CflScaling_p != 0) { + for (unsigned short i = 0; i < nMGLevels; ++i) + MGOptions.MG_CflScaling[i] = (i < nMG_CflScaling_p) ? MG_CflScaling_p[i] : MG_CflScaling_p[nMG_CflScaling_p - 1]; + } else { + for (unsigned short i = 0; i < nMGLevels; ++i) + MGOptions.MG_CflScaling[i] = 0.25; + } } /*--- Override MG Smooth parameters ---*/ @@ -7534,10 +7550,12 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { MGTable.AddColumn("Presmooth", 10); MGTable.AddColumn("PostSmooth", 10); MGTable.AddColumn("CorrectSmooth", 10); + MGTable.AddColumn("CFL Scaling", 12); MGTable.SetAlign(PrintingToolbox::CTablePrinter::RIGHT); MGTable.PrintHeader(); for (unsigned short iLevel = 0; iLevel < nMGLevels+1; iLevel++) { - MGTable << iLevel << MGOptions.MG_PreSmooth[iLevel] << MGOptions.MG_PostSmooth[iLevel] << MGOptions.MG_CorrecSmooth[iLevel]; + const string cflStr = (iLevel == 0) ? "-" : std::to_string(MGOptions.MG_CflScaling[iLevel-1]).substr(0,6); + MGTable << iLevel << MGOptions.MG_PreSmooth[iLevel] << MGOptions.MG_PostSmooth[iLevel] << MGOptions.MG_CorrecSmooth[iLevel] << cflStr; } MGTable.PrintFooter(); } diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index d41d992d400..347a633e2a7 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -1280,24 +1280,28 @@ su2double CMultiGridGeometry::ComputeLocalCurvature(const CGeometry* fine_grid, void CMultiGridGeometry::AgglomerateImplicitLines(unsigned long& Index_CoarseCV, const CGeometry* fine_grid, const CConfig* config, CMultiGridQueue& MGQueue_InnerCV) { /*--- Parameters ---*/ - const su2double ANGLE_THRESHOLD_DEG = 20.0; /*!< Stop line if direction deviates more than this. */ - constexpr unsigned long MAX_LINE_LENGTH = 20; /*!< Max nodes on implicit line (including wall). */ + const su2double ANGLE_THRESHOLD_DEG = 20.0; /*!< Stop line if direction deviates more than this. */ + const unsigned long MAX_LINE_LENGTH = config->GetMGOptions().MG_Implicit_Lines_MaxLength; const su2double cos_threshold = cos(ANGLE_THRESHOLD_DEG * PI_NUMBER / 180.0); const unsigned long nPointFine = fine_grid->GetnPoint(); - /*--- Collect implicit lines starting at wall vertices. + /*--- Collect implicit lines starting at viscous (no-slip) wall vertices only. + * Seeding from non-wall boundaries (farfield, inlet, outlet, symmetry) would + * claim interior BL cells before the wall lines can reach them, leaving + * wall-seeded lines with length < 3 (discarded). Restricting to viscous walls + * ensures the boundary-layer cells are agglomerated wall-first. * Each line: [wall_node, interior_1, interior_2, ...]. * The wall node (index 0) is already agglomerated by boundary agglomeration; * only interior nodes (index >= 1) are paired into coarse CVs. ---*/ vector> lines; for (auto iMarker = 0u; iMarker < fine_grid->GetnMarker(); iMarker++) { - /*--- Skip non-physical markers ---*/ - if (config->GetMarker_All_KindBC(iMarker) == SEND_RECEIVE || - config->GetMarker_All_KindBC(iMarker) == INTERNAL_BOUNDARY || - config->GetMarker_All_KindBC(iMarker) == NEARFIELD_BOUNDARY) - continue; + /*--- Only seed lines from viscous (no-slip) wall markers. + * Non-wall boundaries (farfield, inlet, outlet, symmetry) must NOT seed + * lines because they would prematurely claim boundary-layer interior nodes. ---*/ + const auto bc = config->GetMarker_All_KindBC(iMarker); + if (bc != HEAT_FLUX && bc != ISOTHERMAL && bc != CHT_WALL_INTERFACE && bc != SMOLUCHOWSKI_MAXWELL) continue; for (auto iVertex = 0ul; iVertex < fine_grid->GetnVertex(iMarker); iVertex++) { const auto iPoint = fine_grid->vertex[iMarker][iVertex]->GetNode(); diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index 5f17525cabf..11ee53cb1e7 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -217,90 +217,45 @@ class CMultiGridIntegration final : public CIntegration { unsigned short RunTime_EqSystem, unsigned long Iteration, unsigned short iZone); /*! - * \brief Compute adaptive CFL for multigrid coarse levels. - * \param[in] config - Problem configuration. - * \param[in] solver_coarse - Coarse grid solver. - * \param[in] geometry_coarse - Coarse grid geometry. - * \param[in] iMesh - Current multigrid level. - * \param[in] CFL_fine - Fine grid CFL value (passive). - * \param[in] CFL_coarse_current - Current coarse grid CFL value (passive). - * \param[in] rms_res_coarse - Coarse-grid RMS residual (already MPI-reduced, from lastPreSmoothRMS). - * \return New CFL value for the coarse grid. - */ - passivedouble computeMultigridCFL(CConfig* config, unsigned short iMesh, - passivedouble CFL_fine, passivedouble CFL_coarse_current, - passivedouble rms_res_coarse); - - /*! - * \brief Adapt the residual restriction damping factor. - * - * Uses \c lastPreSmoothIters[] (filled by the previous multigrid cycle) to assess - * whether the pre-smoother is converging fast or slow on coarse levels, then adjusts - * \c Damp_Res_Restric in \p config accordingly. - * - * Signal logic: - * - any coarse level ran its full configured iterations: reduce damping - * - all coarse levels exited early: increase damping - * - mixed (some full, some partial): no change - * - * \param[in,out] config - Problem configuration. - */ - void adaptRestrictionDamping(CConfig* config); - - /*! - * \brief Adapt the correction prolongation damping factor. + * \brief Adapt both restriction and prolongation damping factors from the global-trend signal. * - * Uses \c lastCorrecSmoothIters[] (filled by the previous multigrid cycle) to assess - * whether the correction smoother is struggling or converging fast, - * then adjusts \c Damp_Correc_Prolong in \p config accordingly. + * Uses the cross-cycle EMA ratio (crossCycleRatio = fine_d0 / EMA(fine_d0)) to detect + * long-term convergence or divergence, then adjusts both \c Damp_Res_Restric and + * \c Damp_Correc_Prolong with a single shared signal. The EMA filters per-cycle noise; + * no per-level aggregation or floor counter is needed. * - * Signal logic: - * - any level ran its full correction-smooth iterations: reduce damping - * - all levels exited early: increase damping - * - mixed: no change - * - * \param[in,out] config - Problem configuration; \c SetDamp_Correc_Prolong is called to persist the result. + * \param[in,out] config - Problem configuration. + * \param[in] crossCycleRatio - Current fine_d0 divided by the EMA of fine_d0. */ - void adaptProlongationDamping(CConfig* config); + void adaptDampingFactors(CConfig* config, passivedouble crossCycleRatio); - /*--- CFL adaptation state variables. - * These must be passivedouble: AD::Reset() clears the tape between adjoint recordings, - * but class members survive. If these were su2double their stale AD indices would - * reference the cleared tape, causing invalid memory access during the backward pass. ---*/ static constexpr int MAX_MG_LEVELS = 10; - passivedouble current_avg[MAX_MG_LEVELS] = {}; - passivedouble prev_avg[MAX_MG_LEVELS] = {}; - passivedouble last_res[MAX_MG_LEVELS] = {}; - bool last_was_increase[MAX_MG_LEVELS] = {}; - int oscillation_count[MAX_MG_LEVELS] = {}; - unsigned long last_check_iter[MAX_MG_LEVELS] = {}; - unsigned long last_update_iter[MAX_MG_LEVELS] = {}; - unsigned long last_reset_iter = std::numeric_limits::max(); /*--- Early-exit smoothing state (shared across OMP threads via master write + barrier). ---*/ - bool mg_early_exit_flag = false; /*!< \brief Shared flag for early exit across OMP threads. */ - passivedouble mg_initial_smooth_rms = 0.0; /*!< \brief Initial RMS before current smoothing phase. */ - passivedouble mg_last_smooth_rms = 0.0; /*!< \brief Last computed RMS; cached to avoid redundant Allreduce. */ + bool mg_early_exit_flag = false; /*!< \brief Shared flag for early exit across OMP threads. */ + passivedouble mg_initial_smooth_rms = 0.0; /*!< \brief Initial RMS residual before current smoothing phase (FAS). */ + passivedouble mg_prev_smooth_rms = 0.0; /*!< \brief RMS residual from previous smoothing step; used for stagnation detection. */ + passivedouble mg_fine_rms_ema = 0.0; /*!< \brief EMA of fine-grid pre-smooth RMS across cycles; cross-cycle trend signal. */ + passivedouble last_crossCycleRatio = 1.0; /*!< \brief crossCycleRatio from the most recent cycle; stored for display only. */ /*--- Actual iteration counts per MG level, filled each cycle for the compact output summary. ---*/ unsigned short lastPreSmoothIters[MAX_MG_LEVELS+1] = {}; unsigned short lastPostSmoothIters[MAX_MG_LEVELS+1] = {}; unsigned short lastCorrecSmoothIters[MAX_MG_LEVELS+1] = {}; + /*--- Early-exit reason per level: 'T'=threshold, 'S'=stagnation, ' '=ran to completion. ---*/ + char lastPreSmoothExitReason[MAX_MG_LEVELS+1] = {}; + char lastPostSmoothExitReason[MAX_MG_LEVELS+1] = {}; - /*--- Per-level residual progress flags: true if the final RMS after that phase was lower - * than the initial RMS. Used by the adaptive damping routines to distinguish - * "hit max iters but still converging" from "hit max iters and stagnated". ---*/ - bool lastPreSmoothProgress[MAX_MG_LEVELS+1] = {}; - bool lastPostSmoothProgress[MAX_MG_LEVELS+1] = {}; - bool lastCorrecSmoothProgress[MAX_MG_LEVELS+1] = {}; - - /*--- Per-level start/end RMS for the compact output summary. - * [0] = initial RMS before smoothing, [1] = final RMS after smoothing. - * Filled unconditionally (early-exit path and exhaustion path). - * Must be passivedouble: class members survive tape resets; su2double would - * carry stale AD indices referencing a cleared tape. ---*/ + /*--- Per-level start/end RMS residual for adaptive damping. ---*/ passivedouble lastPreSmoothRMS[MAX_MG_LEVELS+1][2] = {}; passivedouble lastPostSmoothRMS[MAX_MG_LEVELS+1][2] = {}; passivedouble lastCorrecSmoothRMS[MAX_MG_LEVELS+1][2] = {}; + /*--- Per-level worst step-to-step amplification seen inside a smoothing phase. + * step==0 means no intra-smoother ratio was available (fewer than 2 sweeps). ---*/ + passivedouble lastPreSmoothWorstStepRatio[MAX_MG_LEVELS+1] = {}; + passivedouble lastPostSmoothWorstStepRatio[MAX_MG_LEVELS+1] = {}; + unsigned short lastPreSmoothWorstStep[MAX_MG_LEVELS+1] = {}; + unsigned short lastPostSmoothWorstStep[MAX_MG_LEVELS+1] = {}; + }; diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index 8689f42ab9f..63d48590098 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -813,6 +813,16 @@ void CDriver::InitializeGeometryFVM(CConfig *config, CGeometry **&geometry) { geometry[iMGlevel] = new CMultiGridGeometry(geometry[iMGlevel-1], config, iMGlevel); + /*--- Protect against the situation that we were not able to complete + the agglomeration for this level, i.e., there weren't enough points. + Check immediately so the expensive post-construction steps are skipped. ---*/ + + if (config->GetnMGLevels() != requestedMGlevels) { + delete geometry[iMGlevel]; + geometry[iMGlevel] = nullptr; + break; + } + /*--- Compute points surrounding points. ---*/ geometry[iMGlevel]->SetPoint_Connectivity(geometry[iMGlevel-1]); @@ -836,17 +846,6 @@ void CDriver::InitializeGeometryFVM(CConfig *config, CGeometry **&geometry) { geometry[iMGlevel]->SetMGLevel(iMGlevel); - /*--- Protect against the situation that we were not able to complete - the agglomeration for this level, i.e., there weren't enough points. - We need to check if we changed the total number of levels and delete - the incomplete CMultiGridGeometry object. ---*/ - - if (config->GetnMGLevels() != requestedMGlevels) { - delete geometry[iMGlevel]; - geometry[iMGlevel] = nullptr; - break; - } - } if (config->GetWrt_MultiGrid()) geometry[MESH_0]->ColorMGLevels(config->GetnMGLevels(), geometry); diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index cf1bcd3b1ca..f5dbf838a0a 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -25,214 +25,54 @@ * License along with SU2. If not, see . */ -#include "../../include/integration/ComputeLinSysResRMS.hpp" #include "../../include/integration/CMultiGridIntegration.hpp" #include "../../../Common/include/parallelization/omp_structure.hpp" #include "../../../Common/include/toolboxes/printing_toolbox.hpp" -/*!\cond PRIVATE Helper: shared logic for adapting a single MG damping factor. - * Inputs: - * performed[] - actual iteration counts per level from this cycle - * progress[] - whether residuals decreased per level - * getConfigured - returns the per-level configured maximum - * levelStart/End - level range to inspect - * getCurrent - returns the current damping factor from config - * setPersist - persists the updated factor back to config +namespace { + +/*!\cond PRIVATE + * Global-trend damping update. Uses the cross-cycle EMA ratio to detect + * long-term divergence or convergence and adjusts both damping factors + * from a single, smooth signal. + * + * crossCycleRatio < LO : SCALE_UP (residual below EMA trend) + * crossCycleRatio >= HI : SCALE_DOWN (residual above EMA trend) + * [LO, HI) : no change (neutral zone) \endcond */ -template -static void adaptMGDampingFactor(const unsigned short* performed, - const bool* progress, - GetCfg getConfigured, - unsigned short levelStart, unsigned short levelEnd, - GetCur getCurrent, SetPersist setPersist) { - int local_any_stagnant = 0; /*--- hit max iters AND residuals did not decrease: scale down. ---*/ - int local_all_early = 1; /*--- all levels exited before max iters: scale up. ---*/ - int local_inspected = 0; - - for (unsigned short lvl = levelStart; lvl <= levelEnd; ++lvl) { - const unsigned short configured = getConfigured(lvl); - if (configured == 0) continue; - ++local_inspected; - const bool hit_max = (performed[lvl] >= configured); - /*--- Scale-down signal: hit the cap AND residuals did not improve. - * Hitting the cap while still converging is not stagnation; no reduction needed. ---*/ - if (hit_max && !progress[lvl]) local_any_stagnant = 1; - /*--- Scale-up signal: requires early exit on every level. - * Making progress at max iters is good, but the damping is already doing useful work; - * do not increase it further until the smoother actually exits early. ---*/ - if (hit_max) local_all_early = 0; - } - if (local_inspected == 0) return; - - /*--- performed[] and progress[] are derived from MPI-reduced ComputeLinSysResRMS values, - * so local_any_stagnant and local_all_early are already identical on every rank. ---*/ - const su2double SCALE_DOWN = 0.99; - const su2double SCALE_UP = 1.01; - const su2double CLAMP_MIN = 0.1; - const su2double CLAMP_MAX = 0.95; - - su2double factor = getCurrent(); - if (local_any_stagnant) factor *= SCALE_DOWN; - else if (local_all_early) factor *= SCALE_UP; - /*--- else: hit max iters but still converging, or mixed — hold factor. ---*/ - factor = max(CLAMP_MIN, min(CLAMP_MAX, factor)); - setPersist(factor); +static su2double applyGlobalTrend(su2double factor, passivedouble crossCycleRatio) { + constexpr passivedouble SCALE_DOWN = 0.92; + constexpr passivedouble SCALE_UP = 1.02; + constexpr passivedouble CLAMP_MIN = 0.10; + constexpr passivedouble CLAMP_MAX = 0.90; + constexpr passivedouble LO = 0.95; // ratio below this: converging, increase damping + constexpr passivedouble HI = 1.05; // ratio above this: diverging, decrease damping + + if (crossCycleRatio >= HI) factor *= SCALE_DOWN; + else if (crossCycleRatio < LO) factor *= SCALE_UP; + return max(su2double{CLAMP_MIN}, min(su2double{CLAMP_MAX}, factor)); } -void CMultiGridIntegration::adaptRestrictionDamping(CConfig* config) { - SU2_ZONE_SCOPED - const auto& mgOpts = config->GetMGOptions(); - const unsigned short nMGLevels = config->GetnMGLevels(); - adaptMGDampingFactor( - lastPreSmoothIters, - lastPreSmoothProgress, - [&mgOpts](unsigned short lvl){ return mgOpts.MG_PreSmooth[lvl]; }, - /*levelStart=*/1, nMGLevels, - [config](){ return config->GetDamp_Res_Restric(); }, - [config](su2double v){ config->SetDamp_Res_Restric(v); }); +inline passivedouble ComputeLinSysResRMS(const CSolver* solver) { + passivedouble result = 0; + for (unsigned short iVar = 0; iVar < solver->GetnVar(); ++iVar) { + result += pow(SU2_TYPE::GetValue(solver->GetRes_RMS(iVar)), 2); + } + return sqrt(result); } -void CMultiGridIntegration::adaptProlongationDamping(CConfig* config) { - SU2_ZONE_SCOPED - /*--- Post-smoothing directly measures whether the corrected fine-grid solution - * is well-behaved after prolongation. If it exits early, increase damping. - * If it stagnates at max iters, decrease damping. ---*/ - const auto& mgOpts = config->GetMGOptions(); - const unsigned short nMGLevels = config->GetnMGLevels(); - if (nMGLevels == 0) return; - adaptMGDampingFactor( - lastPostSmoothIters, - lastPostSmoothProgress, - [&mgOpts](unsigned short lvl){ return mgOpts.MG_PostSmooth[lvl]; }, - /*levelStart=*/0, static_cast(nMGLevels - 1), - [config](){ return config->GetDamp_Correc_Prolong(); }, - [config](su2double v){ config->SetDamp_Correc_Prolong(v); }); -} +} // anonymous namespace -passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, unsigned short iMesh, - passivedouble CFL_fine, passivedouble CFL_coarse_current, - passivedouble rms_res_coarse) { +void CMultiGridIntegration::adaptDampingFactors(CConfig* config, passivedouble crossCycleRatio) { SU2_ZONE_SCOPED - - const bool wasActive = AD::BeginPassive(); - - passivedouble current_coeff = CFL_coarse_current / CFL_fine; - - /*--- Adaptive CFL using Exponential Moving Average (EMA) ---*/ - constexpr int AVG_WINDOW = 5; - - passivedouble CFL_coarse_new = CFL_coarse_current; // Default: keep current value - - /*--- Get global iteration count first ---*/ - unsigned long current_iter; - if (config->GetTime_Domain()) - current_iter = config->GetTimeIter(); - else - current_iter = config->GetInnerIter(); - - /*--- Reset state at the beginning of a new solve (iter 0 or 1) ---*/ - /*--- This ensures deterministic behavior across multiple runs ---*/ - if (current_iter <= 1 && last_reset_iter != current_iter) { - for (int i = 0; i < MAX_MG_LEVELS; i++) { - current_avg[i] = 0.0; - prev_avg[i] = 0.0; - last_res[i] = 0.0; - last_was_increase[i] = false; - oscillation_count[i] = 0; - last_check_iter[i] = 0; - last_update_iter[i] = 0; - } - last_reset_iter = current_iter; - } - - unsigned short lvl = min(iMesh, (unsigned short)(MAX_MG_LEVELS - 1)); - unsigned long iter = current_iter; - - /*--- rms_res_coarse is passed in (from lastPreSmoothRMS, already MPI-reduced). ---*/ - - /*--- Flip-flop detection: detect oscillating residuals (once per outer iteration) ---*/ - bool oscillation_detected = false; - if (iter != last_check_iter[lvl]) { - last_check_iter[lvl] = iter; - - if (last_res[lvl] > EPS) { - bool current_is_increase = (rms_res_coarse > last_res[lvl]); - if (current_is_increase != last_was_increase[lvl]) { - /*--- Direction changed, increment oscillation counter ---*/ - oscillation_count[lvl]++; - if (oscillation_count[lvl] >= 4) { - /*--- Detected 4 consecutive direction changes = oscillation ---*/ - oscillation_detected = true; - oscillation_count[lvl] = 0; // Reset counter after detecting - } - } else { - /*--- Same direction, reset counter ---*/ - oscillation_count[lvl] = 0; - } - last_was_increase[lvl] = current_is_increase; - } - last_res[lvl] = rms_res_coarse; - } - - /*--- Update exponential moving average ---*/ - if (current_avg[lvl] < EPS) { - current_avg[lvl] = rms_res_coarse; // Initialize with first value - } else { - current_avg[lvl] = (current_avg[lvl] * (AVG_WINDOW - 1) + rms_res_coarse) / AVG_WINDOW; - } - - /*--- Check if we should compare and adapt CFL ---*/ - passivedouble new_coeff = current_coeff; - const passivedouble MIN_REDUCTION_FACTOR = 0.98; // Require at least 2% reduction - const int UPDATE_INTERVAL = 5; // Update reference every N iterations - - /*--- Initialize prev_avg on first use ---*/ - if (prev_avg[lvl] < EPS) { - prev_avg[lvl] = current_avg[lvl]; - } - - /*--- Periodically update prev_avg to allow ratio to reflect accumulated decrease ---*/ - bool should_update = (iter - last_update_iter[lvl] >= UPDATE_INTERVAL); - - /*--- Asymmetric adaptation for robustness ---*/ - if (prev_avg[lvl] > EPS) { - passivedouble ratio = current_avg[lvl] / prev_avg[lvl]; - bool sufficient_decrease = (ratio < MIN_REDUCTION_FACTOR); - bool increasing_trend = (ratio >= 1.0); - - if (increasing_trend) { - /*--- Residual increasing: reduce CFL immediately for robustness ---*/ - new_coeff = current_coeff * 0.90; - /*--- Update reference since we're reacting immediately ---*/ - prev_avg[lvl] = current_avg[lvl]; - last_update_iter[lvl] = iter; - } else if (sufficient_decrease && should_update) { - /*--- Residual decreasing sufficiently: increase CFL ---*/ - new_coeff = current_coeff * 1.05; - /*--- Update reference only when we actually increase CFL ---*/ - prev_avg[lvl] = current_avg[lvl]; - last_update_iter[lvl] = iter; - } - } - - /*--- CFL reduction for oscillation detection ---*/ - if (oscillation_detected) { - new_coeff = current_coeff * 0.75; - /*--- Update reference after oscillation response ---*/ - prev_avg[lvl] = current_avg[lvl]; - last_update_iter[lvl] = iter; - } - - /*--- Clamp coefficient between 0.5 and 1.0 ---*/ - new_coeff = max(0.5, min(1.0, new_coeff)); - - /*--- Update coarse grid CFL ---*/ - CFL_coarse_new = max(0.5 * CFL_fine, min(CFL_fine, CFL_fine * new_coeff)); - - config->SetCFL(iMesh+1, CFL_coarse_new); - - AD::EndPassive(wasActive); - return CFL_coarse_new; + if (config->GetnMGLevels() == 0) return; + + /*--- Both factors share the same global-trend signal. The EMA already filters + * per-cycle noise; no per-level aggregation or floor counter needed. ---*/ + config->SetDamp_Res_Restric( + applyGlobalTrend(config->GetDamp_Res_Restric(), crossCycleRatio)); + config->SetDamp_Correc_Prolong( + applyGlobalTrend(config->GetDamp_Correc_Prolong(), crossCycleRatio)); } CMultiGridIntegration::CMultiGridIntegration() : CIntegration() { } @@ -279,7 +119,7 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, su2double monitor = 1.0; bool FullMG = false; - unsigned short RecursiveParam = static_cast(config[iZone]->GetMGCycle()); + auto RecursiveParam = static_cast(config[iZone]->GetMGCycle()); if (config[iZone]->GetMGCycle() == MG_CYCLE::FULL) { RecursiveParam = static_cast(MG_CYCLE::V); @@ -290,22 +130,24 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, unsigned short FinestMesh = config[iZone]->GetFinestMesh(); - /*--- Initialize per-level smoothing iteration counters to the configured maximum. - * If early exit never fires, the output will show actual == max. ---*/ + /*--- Initialize per-level smoothing diagnostics for the current cycle. ---*/ BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { const unsigned short nMGLevels = config[iZone]->GetnMGLevels(); const auto& mgOpts = config[iZone]->GetMGOptions(); for (unsigned short i = 0; i <= nMGLevels; ++i) { - lastPreSmoothIters[i] = mgOpts.MG_PreSmooth[i]; - lastPostSmoothIters[i] = mgOpts.MG_PostSmooth[i]; + lastPreSmoothIters[i] = 0; + lastPostSmoothIters[i] = 0; lastCorrecSmoothIters[i] = mgOpts.MG_CorrecSmooth[i]; - lastPreSmoothProgress[i] = false; - lastPostSmoothProgress[i] = false; - lastCorrecSmoothProgress[i] = false; + lastCorrecSmoothRMS[i][0] = lastCorrecSmoothRMS[i][1] = 0.0; lastPreSmoothRMS[i][0] = lastPreSmoothRMS[i][1] = 0.0; lastPostSmoothRMS[i][0] = lastPostSmoothRMS[i][1] = 0.0; - lastCorrecSmoothRMS[i][0] = lastCorrecSmoothRMS[i][1] = 0.0; + lastPreSmoothWorstStepRatio[i] = 0.0; + lastPostSmoothWorstStepRatio[i] = 0.0; + lastPreSmoothWorstStep[i] = 0; + lastPostSmoothWorstStep[i] = 0; + lastPreSmoothExitReason[i] = ' '; + lastPostSmoothExitReason[i] = ' '; } } END_SU2_OMP_SAFE_GLOBAL_ACCESS @@ -338,16 +180,30 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, MultiGrid_Cycle(geometry, solver_container, numerics_container, config, FinestMesh, RecursiveParam, RunTime_EqSystem, iZone, iInst); - /*--- Adapt coarse-grid CFL once per cycle using smoothing residuals gathered during the cycle. - * lastPreSmoothRMS[iMesh+1][1] is the final RMS after pre-smoothing at the coarse level ---*/ + /*--- Adapt coarse-grid CFL once per cycle using smoothing residuals gathered during the cycle. ---*/ const unsigned short nMGLevels = config[iZone]->GetnMGLevels(); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + /*--- Use the current finest-grid CFL as the base for deterministic + * coarse-level scaling. Fall back to config scalar when local CFL + * adaptation is disabled. ---*/ + passivedouble cfl_base = SU2_TYPE::GetValue( + solver_container[iZone][iInst][FinestMesh][Solver_Position]->GetAvg_CFL_Local()); + if (cfl_base < EPS) + cfl_base = SU2_TYPE::GetValue(config[iZone]->GetCFL(FinestMesh)); + + const auto& cflScaling = config[iZone]->GetMGOptions().MG_CflScaling; + + passivedouble CFL_local = cfl_base; for (unsigned short iMesh = FinestMesh; iMesh < nMGLevels; ++iMesh) { - const passivedouble CFL_fine_p = SU2_TYPE::GetValue(config[iZone]->GetCFL(iMesh)); - const passivedouble CFL_coarse_p = SU2_TYPE::GetValue(config[iZone]->GetCFL(iMesh+1)); - computeMultigridCFL(config[iZone], iMesh, CFL_fine_p, CFL_coarse_p, - lastPreSmoothRMS[iMesh+1][1]); + const unsigned short lvl = iMesh + 1; + /*--- Use per-level scaling factor; clamp to (0,1] to prevent coarse CFL from + * exceeding the fine CFL. Index into cflScaling is iMesh (0-based transition). ---*/ + const passivedouble scale = (iMesh < cflScaling.size()) + ? max(passivedouble{1e-6}, min(passivedouble{1.0}, SU2_TYPE::GetValue(cflScaling[iMesh]))) + : passivedouble{0.25}; + CFL_local *= scale; + config[iZone]->SetCFL(lvl, CFL_local); } } END_SU2_OMP_SAFE_GLOBAL_ACCESS @@ -381,10 +237,20 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, * and the signal would always point to "scale down"). ---*/ const auto& mgOptsZone = config[iZone]->GetMGOptions(); if (mgOptsZone.MG_Smooth_EarlyExit) { - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { - adaptRestrictionDamping(config[iZone]); - adaptProlongationDamping(config[iZone]); + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + constexpr passivedouble EMA_ALPHA = 0.02; + const passivedouble fine_d0 = lastPreSmoothRMS[FinestMesh][0]; + const bool ema_ready = (mg_fine_rms_ema >= EPS); + if (!ema_ready) + mg_fine_rms_ema = fine_d0; + else + mg_fine_rms_ema = (1.0 - EMA_ALPHA) * mg_fine_rms_ema + EMA_ALPHA * fine_d0; + const passivedouble crossCycleRatio = (mg_fine_rms_ema > EPS) ? fine_d0 / mg_fine_rms_ema : 1.0; + + /*--- Adapt both damping factors from the same global-trend signal. + * Skip on the first cycle while the EMA is still being seeded. ---*/ + if (ema_ready) adaptDampingFactors(config[iZone], crossCycleRatio); + last_crossCycleRatio = crossCycleRatio; } END_SU2_OMP_SAFE_GLOBAL_ACCESS } @@ -392,52 +258,81 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, /*--- Print compact smoothing summary when MG_SMOOTH_OUTPUT= YES. ---*/ if (mgOptsZone.MG_Smooth_Output) { BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { - if (SU2_MPI::GetRank() == MASTER_NODE) { - - /*--- Helper: format one cell as "act/max [init->final]". ---*/ - auto cellStr = [](unsigned short act, unsigned short mx, - su2double rms0, su2double rms1) -> std::string { - std::ostringstream ss; - ss << act << "/" << mx << " [" - << std::scientific << std::setprecision(2) - << rms0 << "->" << rms1 << "]"; - return ss.str(); - }; - - PrintingToolbox::CTablePrinter table(&std::cout); - table.AddColumn("Smoother", 13); - for (unsigned short i = 0; i <= nMGLevels; ++i) - table.AddColumn("Level " + std::to_string(i), 26); - table.PrintHeader(); - - /*--- Pre-smooth: defined on all levels 0..nMGLevels. ---*/ - table << "Pre-smooth"; - for (unsigned short i = 0; i <= nMGLevels; ++i) - table << cellStr(lastPreSmoothIters[i], mgOptsZone.MG_PreSmooth[i], - lastPreSmoothRMS[i][0], lastPreSmoothRMS[i][1]); - - /*--- Post-smooth: defined on levels 0..nMGLevels-1; coarsest has none. ---*/ - table << "Post-smooth"; - for (unsigned short i = 0; i < nMGLevels; ++i) - table << cellStr(lastPostSmoothIters[i], mgOptsZone.MG_PostSmooth[i], - lastPostSmoothRMS[i][0], lastPostSmoothRMS[i][1]); - table << "-"; - - /*--- Corr.-smooth: defined on levels 0..nMGLevels-1; coarsest has none. ---*/ - table << "Corr-smooth"; - for (unsigned short i = 0; i < nMGLevels; ++i) - table << cellStr(lastCorrecSmoothIters[i], mgOptsZone.MG_CorrecSmooth[i], - lastCorrecSmoothRMS[i][0], lastCorrecSmoothRMS[i][1]); - table << "-"; - - table.PrintFooter(); - - cout << std::fixed << std::setprecision(4) - << "Damping [restrict | prolong] : " << config[iZone]->GetDamp_Res_Restric() - << " | " << config[iZone]->GetDamp_Correc_Prolong() << "\n" - << std::defaultfloat << std::setprecision(6); + if (SU2_MPI::GetRank() == MASTER_NODE) { + + /*--- Helper: format one cell as "act/max [init->final]". ---*/ + auto cellStr = [](unsigned short act, unsigned short mx, char reason, + su2double d0, su2double d1, + passivedouble worstStepRatio, + unsigned short worstStep) -> std::string { + /*--- Show: steps taken / max + exit reason + initial defect scale + d1/d0 ratio. + * r=d1/d0 < 1 means smoother reduced the defect (good). + * r > 1 means smoother grew the defect. + * Exit reason: T=threshold, S=clean stagnation, A=amplifying stagnation, + * ' '=ran to completion. ---*/ + std::ostringstream ss; + ss << act << "/" << mx; + if (act < mx) ss << reason; /*--- only tag early exits ---*/ + ss << " [" << std::scientific << std::setprecision(2) << d0 << "]"; + if (d0 > 0.0) { + ss << std::fixed << std::setprecision(3) << " r=" << d1 / d0; + } + if (worstStep > 0) { + ss << " rw" << worstStep << "=" << std::fixed << std::setprecision(3) << worstStepRatio; + } + return ss.str(); + }; + + PrintingToolbox::CTablePrinter table(&std::cout); + table.AddColumn("Smoother", 13); + for (unsigned short i = 0; i <= nMGLevels; ++i) + table.AddColumn("Level " + std::to_string(i), 38); + table.PrintHeader(); + + /*--- Pre-smooth: defect [d0->d1] — what early exit and damping adaptation read. ---*/ + table << "Pre-smooth"; + for (unsigned short i = 0; i <= nMGLevels; ++i) + table << cellStr(lastPreSmoothIters[i], mgOptsZone.MG_PreSmooth[i], + lastPreSmoothExitReason[i], + lastPreSmoothRMS[i][0], lastPreSmoothRMS[i][1], + lastPreSmoothWorstStepRatio[i], lastPreSmoothWorstStep[i]); + + /*--- Post-smooth: defect [d0->d1] — what early exit and prolongation-damping read. ---*/ + table << "Post-smooth"; + for (unsigned short i = 0; i < nMGLevels; ++i) + table << cellStr(lastPostSmoothIters[i], mgOptsZone.MG_PostSmooth[i], + lastPostSmoothExitReason[i], + lastPostSmoothRMS[i][0], lastPostSmoothRMS[i][1], + lastPostSmoothWorstStepRatio[i], lastPostSmoothWorstStep[i]); + table << "-"; + + /*--- Corr.-smooth: defined on levels 0..nMGLevels-1; coarsest has none. ---*/ + table << "Corr-smooth"; + for (unsigned short i = 0; i < nMGLevels; ++i) + table << cellStr(lastCorrecSmoothIters[i], mgOptsZone.MG_CorrecSmooth[i], + ' ', lastCorrecSmoothRMS[i][0], lastCorrecSmoothRMS[i][1], + 0.0, 0); + table << "-"; + + table << "CFL"; + for (unsigned short i = 0; i <= nMGLevels; ++i) { + std::ostringstream ss; + ss << std::fixed << std::setprecision(4); + if (i == MESH_0) { + ss << SU2_TYPE::GetValue(solver_container[iZone][iInst][MESH_0][Solver_Position]->GetAvg_CFL_Local()); + } else { + ss << SU2_TYPE::GetValue(config[iZone]->GetCFL(i)); + } + table << ss.str(); } + + table.PrintFooter(); + + cout << std::fixed << std::setprecision(4) + << "Damping [restrict | prolong] : " << config[iZone]->GetDamp_Res_Restric() + << " | " << config[iZone]->GetDamp_Correc_Prolong() + << " cross-cycle: " << std::setprecision(3) << last_crossCycleRatio << "\n" + << std::defaultfloat << std::setprecision(6); } END_SU2_OMP_SAFE_GLOBAL_ACCESS } @@ -502,6 +397,12 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, NO_RK_ITER, RunTime_EqSystem); + /*--- LinSysRes = R(u_N) here, before tau is added by SetResidual_Term. ---*/ + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + lastPreSmoothRMS[iMesh][1] = ComputeLinSysResRMS(solver_fine); + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + SetResidual_Term(geometry_fine, solver_fine); /*--- Compute $r_(k+1) = F_(k+1)(I^(k+1)_k u_k)$ ---*/ @@ -572,6 +473,11 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, const unsigned short nPreSmooth = mgOpts.MG_PreSmooth[iMesh]; const unsigned long timeIter = config->GetTimeIter(); const bool early_exit = mgOpts.MG_Smooth_EarlyExit && (nPreSmooth > 1); + const bool need_per_step_rms = early_exit || mgOpts.MG_Smooth_Output; + /*--- Also capture initial RMS at MESH_0 for the cross-cycle EMA controller, even with nPreSmooth==1. ---*/ + const bool need_initial_rms = need_per_step_rms || (iMesh == MESH_0 && mgOpts.MG_Smooth_EarlyExit); + const passivedouble stag_tol = (mgOpts.MG_Smooth_StagnationTol > 0.0) + ? SU2_TYPE::GetValue(mgOpts.MG_Smooth_StagnationTol) : passivedouble(1.0); /*--- Reset the shared early-exit flag (master only). ---*/ SU2_OMP_SAFE_GLOBAL_ACCESS(mg_early_exit_flag = false;) @@ -596,59 +502,61 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, /*--- Space integration ---*/ Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); - /*--- Capture initial RMS after the very first residual evaluation. - * This is the earliest point where LinSysRes = R(u_current) (not stale). - * ComputeLinSysResRMS must be called by all threads (uses parallel dot). ---*/ - if (iPreSmooth == 0 && iRKStep == 0) { - const passivedouble initial_rms = ComputeLinSysResRMS(solver_fine); - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { - lastPreSmoothRMS[iMesh][0] = initial_rms; - if (early_exit) mg_initial_smooth_rms = initial_rms; + /*--- Time integration, update solution using the old solution plus the solution increment ---*/ + Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); + + /*--- At iRKStep==0 LinSysRes = R(u_k). ---*/ + if (iRKStep == 0 && need_initial_rms) { + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + const passivedouble defect = ComputeLinSysResRMS(solver_fine); + if (iPreSmooth == 0) { + mg_initial_smooth_rms = defect; + lastPreSmoothRMS[iMesh][0] = defect; + } else { + if (mg_prev_smooth_rms > EPS) { + const passivedouble step_ratio = defect / mg_prev_smooth_rms; + if (step_ratio > lastPreSmoothWorstStepRatio[iMesh]) { + lastPreSmoothWorstStepRatio[iMesh] = step_ratio; + lastPreSmoothWorstStep[iMesh] = iPreSmooth + 1; + } + } + + if (early_exit) { + if (defect < mgOpts.MG_Smooth_Res_Threshold * mg_initial_smooth_rms) { + lastPreSmoothExitReason[iMesh] = 'T'; + mg_early_exit_flag = true; + } else if (defect >= mg_prev_smooth_rms * stag_tol) { + /*--- 'A' = amplifying-stagnation (defect grew vs previous step). + * 'S' = clean stagnation (defect is not improving but also not growing). ---*/ + lastPreSmoothExitReason[iMesh] = (defect > mg_prev_smooth_rms) ? 'A' : 'S'; + mg_early_exit_flag = true; + } + } + } + mg_prev_smooth_rms = defect; } END_SU2_OMP_SAFE_GLOBAL_ACCESS + if (mg_early_exit_flag) break; } - /*--- Time integration, update solution using the old solution plus the solution increment ---*/ - Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); /*--- Send-Receive boundary conditions, and postprocessing ---*/ solver_fine->Postprocessing(geometry_fine, solver_container_fine, config, iMesh); } - - /*--- Early exit: check if RMS has dropped sufficiently. - * ComputeLinSysResRMS must be called by all threads. - * only master uses the result inside the safe block. ---*/ - if (early_exit) { - const passivedouble current_rms = ComputeLinSysResRMS(solver_fine); - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { - mg_last_smooth_rms = current_rms; - if (mg_last_smooth_rms < mgOpts.MG_Smooth_Res_Threshold * mg_initial_smooth_rms) { - lastPreSmoothIters[iMesh] = iPreSmooth + 1; - mg_early_exit_flag = true; - } - } - END_SU2_OMP_SAFE_GLOBAL_ACCESS - if (mg_early_exit_flag) break; - } + SU2_OMP_SAFE_GLOBAL_ACCESS(lastPreSmoothIters[iMesh] = iPreSmooth + 1;) + if (mg_early_exit_flag) break; } - /*--- Record final RMS and progress flag. - * In the early-exit path mg_last_smooth_rms already holds the current value; - * in the normal path we compute it once here. - * The condition is the same for all threads so they all agree on whether to call. ---*/ - passivedouble final_pre_rms = mg_last_smooth_rms; - if (!(early_exit && mg_early_exit_flag)) - final_pre_rms = ComputeLinSysResRMS(solver_fine); - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { - mg_last_smooth_rms = final_pre_rms; - lastPreSmoothRMS[iMesh][1] = final_pre_rms; - lastPreSmoothProgress[iMesh] = mg_early_exit_flag || - (final_pre_rms < lastPreSmoothRMS[iMesh][0]); + /*--- Record d_{N-1} as the final pre-smooth defect (the last value captured inside the loop). + * For non-coarsest levels MultiGrid_Cycle overwrites this with the exact d_N at zero + * additional cost in the restriction block (Space_Integration already runs there). + * Skip when nPreSmooth==0: lastPreSmoothDefect[iMesh] stays {0,0} (initialized). ---*/ + if (nPreSmooth > 0) { + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + lastPreSmoothRMS[iMesh][1] = mg_prev_smooth_rms; + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS } - END_SU2_OMP_SAFE_GLOBAL_ACCESS } @@ -667,6 +575,9 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, const unsigned short nPostSmooth = mgOpts.MG_PostSmooth[iMesh]; const unsigned long timeIter = config->GetTimeIter(); const bool early_exit = mgOpts.MG_Smooth_EarlyExit && (nPostSmooth > 1); + const bool need_per_step_rms = early_exit || mgOpts.MG_Smooth_Output; + const passivedouble stag_tol = (mgOpts.MG_Smooth_StagnationTol > 0.0) + ? SU2_TYPE::GetValue(mgOpts.MG_Smooth_StagnationTol) : passivedouble(1.0); /*--- Reset the shared early-exit flag (master only). ---*/ SU2_OMP_SAFE_GLOBAL_ACCESS(mg_early_exit_flag = false;) @@ -688,77 +599,76 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, /*--- Space integration ---*/ Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); - /*--- Capture initial RMS after the very first residual evaluation. - * Before this point, LinSysRes held the smoothed correction (from SmoothProlongated_Correction), - * NOT the spatial residual R(u). This is the first valid R(u) after applying the correction. - * ComputeLinSysResRMS must be called by all threads (uses parallel dot). ---*/ - if (iPostSmooth == 0 && iRKStep == 0) { - const passivedouble initial_rms = ComputeLinSysResRMS(solver_fine); - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { - lastPostSmoothRMS[iMesh][0] = initial_rms; - if (early_exit) mg_initial_smooth_rms = initial_rms; + /*--- Time integration, update solution using the old solution plus the solution increment ---*/ + Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); + + /*--- At iRKStep==0 LinSysRes = R(u_k) ---*/ + if (iRKStep == 0 && need_per_step_rms) { + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + const passivedouble defect = ComputeLinSysResRMS(solver_fine); + if (iPostSmooth == 0) { + mg_initial_smooth_rms = defect; + lastPostSmoothRMS[iMesh][0] = defect; + } else { + if (mg_prev_smooth_rms > EPS) { + const passivedouble step_ratio = defect / mg_prev_smooth_rms; + if (step_ratio > lastPostSmoothWorstStepRatio[iMesh]) { + lastPostSmoothWorstStepRatio[iMesh] = step_ratio; + lastPostSmoothWorstStep[iMesh] = iPostSmooth + 1; + } + } + + if (early_exit) { + if (defect < mgOpts.MG_Smooth_Res_Threshold * mg_initial_smooth_rms) { + lastPostSmoothExitReason[iMesh] = 'T'; + mg_early_exit_flag = true; + } else if (defect >= mg_prev_smooth_rms * stag_tol) { + /*--- 'A' = amplifying-stagnation (defect grew vs previous step). + * 'S' = clean stagnation (defect is not improving but also not growing). ---*/ + lastPostSmoothExitReason[iMesh] = (defect > mg_prev_smooth_rms) ? 'A' : 'S'; + mg_early_exit_flag = true; + } + } + } + mg_prev_smooth_rms = defect; } END_SU2_OMP_SAFE_GLOBAL_ACCESS + if (mg_early_exit_flag) break; } - /*--- Time integration, update solution using the old solution plus the solution increment ---*/ - Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); /*--- Send-Receive boundary conditions, and postprocessing ---*/ solver_fine->Postprocessing(geometry_fine, solver_container_fine, config, iMesh); } - - /*--- Early exit: check if RMS has dropped sufficiently. - * ComputeLinSysResRMS must be called by all threads (uses parallel dot). ---*/ - if (early_exit) { - const passivedouble current_rms = ComputeLinSysResRMS(solver_fine); - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { - mg_last_smooth_rms = current_rms; - if (mg_last_smooth_rms < mgOpts.MG_Smooth_Res_Threshold * mg_initial_smooth_rms) { - lastPostSmoothIters[iMesh] = iPostSmooth + 1; - mg_early_exit_flag = true; - } - } - END_SU2_OMP_SAFE_GLOBAL_ACCESS - if (mg_early_exit_flag) break; - } + SU2_OMP_SAFE_GLOBAL_ACCESS(lastPostSmoothIters[iMesh] = iPostSmooth + 1;) + if (mg_early_exit_flag) break; } - /*--- Record final RMS after post-smoothing. - * In the early-exit path mg_last_smooth_rms is already current; otherwise compute once. - * The condition is the same for all threads so they all agree on whether to call. ---*/ - passivedouble final_post_rms = mg_last_smooth_rms; - if (!(early_exit && mg_early_exit_flag)) - final_post_rms = ComputeLinSysResRMS(solver_fine); - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { - mg_last_smooth_rms = final_post_rms; - lastPostSmoothRMS[iMesh][1] = final_post_rms; - lastPostSmoothProgress[iMesh] = mg_early_exit_flag || - (final_post_rms < lastPostSmoothRMS[iMesh][0]); + /*--- Record d_{N-1} as the final post-smooth defect (display only). + * Skip when nPostSmooth==0: lastPostSmoothRMS[iMesh] stays {0,0} (initialized). ---*/ + if (nPostSmooth > 0) { + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + lastPostSmoothRMS[iMesh][1] = mg_prev_smooth_rms; + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS } - END_SU2_OMP_SAFE_GLOBAL_ACCESS } void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { SU2_ZONE_SCOPED - const su2double *Solution_Fine = nullptr, *Solution_Coarse = nullptr; const unsigned short nVar = sol_coarse->GetnVar(); - - auto *Solution = new su2double[nVar]; + su2activevector Solution(nVar); SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { su2double Area_Parent = geo_coarse->nodes->GetVolume(Point_Coarse); - for (auto iVar = 0u; iVar < nVar; iVar++) Solution[iVar] = 0.0; + Solution = su2double(0); /*--- Accumulate children contributions with stable ordering ---*/ /*--- Process all children in sequential order to ensure deterministic FP summation ---*/ @@ -766,24 +676,22 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS for (auto iChildren = 0u; iChildren < nChildren; iChildren++) { auto Point_Fine = geo_coarse->nodes->GetChildren_CV(Point_Coarse, iChildren); su2double Area_Children = geo_fine->nodes->GetVolume(Point_Fine); - Solution_Fine = sol_fine->GetNodes()->GetSolution(Point_Fine); + const auto* Solution_Fine = sol_fine->GetNodes()->GetSolution(Point_Fine); su2double weight = Area_Children / Area_Parent; for (auto iVar = 0u; iVar < nVar; iVar++) Solution[iVar] -= Solution_Fine[iVar] * weight; } - Solution_Coarse = sol_coarse->GetNodes()->GetSolution(Point_Coarse); + const auto* Solution_Coarse = sol_coarse->GetNodes()->GetSolution(Point_Coarse); for (auto iVar = 0u; iVar < nVar; iVar++) Solution[iVar] += Solution_Coarse[iVar]; for (auto iVar = 0u; iVar < nVar; iVar++) - sol_coarse->GetNodes()->SetSolution_Old(Point_Coarse,Solution); + sol_coarse->GetNodes()->SetSolution_Old(Point_Coarse, Solution.data()); } END_SU2_OMP_FOR - delete [] Solution; - /*--- Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ sol_coarse->MultigridProjectEulerWall(geo_coarse, config, true); @@ -831,24 +739,15 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ /*--- Check if there is work to do. ---*/ if (val_nSmooth == 0) return; - const su2double *Residual_Old, *Residual_Sum, *Residual_j; - const unsigned short nVar = solver->GetnVar(); SU2_OMP_FOR_STAT(roundUpDiv(geometry->GetnPoint(), omp_get_num_threads())) for (auto iPoint = 0ul; iPoint < geometry->GetnPoint(); iPoint++) { - Residual_Old = solver->LinSysRes.GetBlock(iPoint); - solver->GetNodes()->SetResidual_Old(iPoint,Residual_Old); + const auto* Residual_Old = solver->LinSysRes.GetBlock(iPoint); + solver->GetNodes()->SetResidual_Old(iPoint, Residual_Old); } END_SU2_OMP_FOR - /*--- Record initial correction norm for debugging output. - * ComputeLinSysResRMS must be called by all threads (uses parallel dot). ---*/ - { - const passivedouble initial_corr_rms = ComputeLinSysResRMS(solver); - SU2_OMP_SAFE_GLOBAL_ACCESS(lastCorrecSmoothRMS[iMesh][0] = initial_corr_rms;) - } - /*--- Jacobi iterations (no early exit — Jacobi targets high-frequency modes, * so the global RMS is not a meaningful convergence indicator). ---*/ @@ -863,7 +762,7 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ for (auto iNeigh = 0u; iNeigh < geometry->nodes->GetnPoint(iPoint); ++iNeigh) { auto jPoint = geometry->nodes->GetPoint(iPoint, iNeigh); - Residual_j = solver->LinSysRes.GetBlock(jPoint); + const auto* Residual_j = solver->LinSysRes.GetBlock(jPoint); solver->GetNodes()->AddResidual_Sum(iPoint, Residual_j); } @@ -877,8 +776,8 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ su2double factor = 1.0/(1.0+val_smooth_coeff*su2double(geometry->nodes->GetnPoint(iPoint))); - Residual_Sum = solver->GetNodes()->GetResidual_Sum(iPoint); - Residual_Old = solver->GetNodes()->GetResidual_Old(iPoint); + const auto* Residual_Sum = solver->GetNodes()->GetResidual_Sum(iPoint); + const auto* Residual_Old = solver->GetNodes()->GetResidual_Old(iPoint); for (auto iVar = 0u; iVar < nVar; iVar++) solver->LinSysRes(iPoint,iVar) = (Residual_Old[iVar] + val_smooth_coeff*Residual_Sum[iVar])*factor; @@ -895,7 +794,7 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ SU2_OMP_FOR_STAT(32) for (auto iVertex = 0ul; iVertex < geometry->GetnVertex(iMarker); iVertex++) { auto iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); - Residual_Old = solver->GetNodes()->GetResidual_Old(iPoint); + const auto* Residual_Old = solver->GetNodes()->GetResidual_Old(iPoint); solver->LinSysRes.SetBlock(iPoint, Residual_Old); } END_SU2_OMP_FOR @@ -904,33 +803,30 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ } - /*--- Record final correction norm for debugging output. - * ComputeLinSysResRMS must be called by all threads (uses parallel dot). ---*/ - const passivedouble final_corr_rms = ComputeLinSysResRMS(solver); - SU2_OMP_SAFE_GLOBAL_ACCESS(lastCorrecSmoothRMS[iMesh][1] = final_corr_rms;) - + /*--- Record final correction norm for debugging output. ---*/ + if (config->GetMGOptions().MG_Smooth_Output) { + const su2double res = sqrt(solver->LinSysRes.squaredNorm() / (nVar * geometry->GetGlobal_nPointDomain())); + SU2_OMP_SAFE_GLOBAL_ACCESS(lastCorrecSmoothRMS[iMesh][1] = SU2_TYPE::GetValue(res);) + } } void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeometry *geo_fine, CConfig *config, unsigned short iMesh) { SU2_ZONE_SCOPED - su2double *Solution_Fine, *Residual_Fine; const unsigned short nVar = sol_fine->GetnVar(); - /*--- Level-dependent damping: coarser prolongations produce noisier corrections - * due to larger cell-size jumps, so we reduce the factor progressively. - * iMesh=0: factor = base_damp * 1.0 (finest grid, full correction) - * iMesh=1: factor = base_damp * 0.75 - * iMesh=2: factor = base_damp * 0.5625, etc. ---*/ - const su2double base_damp = config->GetDamp_Correc_Prolong(); - const su2double level_factor = pow(0.75, static_cast(iMesh)); - const su2double factor = base_damp * level_factor; + /*--- Use the adaptive damping factor uniformly across all prolongation levels. + * A separate level-dependent attenuation (pow(0.75,iMesh)) was removed: + * when the controller has already driven base_damp to its minimum floor, + * stacking an additional level factor makes the correction negligibly small + * and prevents useful work from deeper coarse levels from reaching L0. ---*/ + const su2double factor = config->GetDamp_Correc_Prolong(); SU2_OMP_FOR_STAT(roundUpDiv(geo_fine->GetnPointDomain(), omp_get_num_threads())) for (auto Point_Fine = 0ul; Point_Fine < geo_fine->GetnPointDomain(); Point_Fine++) { - Residual_Fine = sol_fine->LinSysRes.GetBlock(Point_Fine); - Solution_Fine = sol_fine->GetNodes()->GetSolution(Point_Fine); + auto* Residual_Fine = sol_fine->LinSysRes.GetBlock(Point_Fine); + auto* Solution_Fine = sol_fine->GetNodes()->GetSolution(Point_Fine); for (auto iVar = 0u; iVar < nVar; iVar++) { /*--- Prevent a fine grid divergence due to a coarse grid divergence ---*/ if (Residual_Fine[iVar] != Residual_Fine[iVar]) @@ -972,26 +868,24 @@ void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coar const unsigned short nVar = sol_coarse->GetnVar(); const su2double factor = config->GetDamp_Res_Restric(); - auto *Residual = new su2double[nVar]; + su2activevector Residual(nVar); SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { sol_coarse->GetNodes()->SetRes_TruncErrorZero(Point_Coarse); - for (auto iVar = 0u; iVar < nVar; iVar++) Residual[iVar] = 0.0; + Residual = su2double(0); for (auto iChildren = 0u; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { auto Point_Fine = geo_coarse->nodes->GetChildren_CV(Point_Coarse, iChildren); Residual_Fine = sol_fine->LinSysRes.GetBlock(Point_Fine); for (auto iVar = 0u; iVar < nVar; iVar++) Residual[iVar] += factor * Residual_Fine[iVar]; } - sol_coarse->GetNodes()->AddRes_TruncError(Point_Coarse, Residual); + sol_coarse->GetNodes()->AddRes_TruncError(Point_Coarse, Residual.data()); } END_SU2_OMP_FOR - delete [] Residual; - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (config->GetViscous_Wall(iMarker)) { SU2_OMP_FOR_STAT(32) diff --git a/SU2_CFD/src/iteration/CFluidIteration.cpp b/SU2_CFD/src/iteration/CFluidIteration.cpp index 35e2905a7c5..55aba398ae8 100644 --- a/SU2_CFD/src/iteration/CFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFluidIteration.cpp @@ -130,9 +130,11 @@ void CFluidIteration::Iterate(COutput* output, CIntegration**** integration, CGe RUNTIME_RADIATION_SYS, val_iZone, val_iInst); } - /*--- Adapt the CFL number using an exponential progression with under-relaxation approach. ---*/ - - if ((config[val_iZone]->GetCFL_Adapt() == YES) && (!disc_adj)) { + /*--- Adapt the CFL number using an exponential progression with under-relaxation approach. + During Full-MG warmup (FinestMesh > MESH_0), skip adaptation entirely until the finest + mesh is active. ---*/ + if ((config[val_iZone]->GetCFL_Adapt() == YES) && (!disc_adj) && + (config[val_iZone]->GetFinestMesh() == MESH_0)) { SU2_OMP_PARALLEL solver[val_iZone][val_iInst][MESH_0][FLOW_SOL]->AdaptCFLNumber(geometry[val_iZone][val_iInst], solver[val_iZone][val_iInst], config[val_iZone]); @@ -245,12 +247,18 @@ bool CFluidIteration::Monitor(COutput* output, CIntegration**** integration, CGe if (config[val_iZone]->GetMUSCLRamp()) UpdateRamp(geometry, config, config[val_iZone]->GetInnerIter(), val_iZone, RAMP_TYPE::MUSCL); - output->SetHistoryOutput(geometry[val_iZone][val_iInst][MESH_0], solver[val_iZone][val_iInst][MESH_0], + /*--- During Full-MG startup FinestMesh > 0: read residuals from the active (coarse) level. ---*/ + const unsigned short finestMesh = config[val_iZone]->GetFinestMesh(); + output->SetHistoryOutput(geometry[val_iZone][val_iInst][finestMesh], solver[val_iZone][val_iInst][finestMesh], config[val_iZone], config[val_iZone]->GetTimeIter(), config[val_iZone]->GetOuterIter(), config[val_iZone]->GetInnerIter()); auto StopCalc = output->GetConvergence(); + /*--- During Full-MG warmup the convergence criterion is evaluated against coarse-mesh residuals. + * Never stop before the fine mesh is active. ---*/ + if (finestMesh != MESH_0) StopCalc = false; + /* --- Checking convergence of Fixed CL mode to target CL, and perform finite differencing if needed --*/ if (config[val_iZone]->GetFixed_CL_Mode()) { diff --git a/SU2_CFD/src/solvers/CSolver.cpp b/SU2_CFD/src/solvers/CSolver.cpp index 0efafa2b880..36a7d2283f0 100644 --- a/SU2_CFD/src/solvers/CSolver.cpp +++ b/SU2_CFD/src/solvers/CSolver.cpp @@ -1986,7 +1986,7 @@ void CSolver::AdaptCFLNumber(CGeometry **geometry, void CSolver::SetResidual_RMS(const CGeometry *geometry, const CConfig *config) { SU2_ZONE_SCOPED - if (geometry->GetMGLevel() != MESH_0) return; + if (geometry->GetMGLevel() != MESH_0 && !config->GetMGOptions().MG_Smooth_EarlyExit) return; BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { diff --git a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp index a6d2930a904..1675ada4966 100644 --- a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp @@ -231,8 +231,12 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** if (flame_front_ignition) prog_burnt = GetBurntProgressVariable(fluid_model_local, scalar_init, flamelet_config_options.Flame_T_ignition); prog_unburnt = config->GetSpecies_Init()[I_PROGVAR]; + /*--- Use the point count of the current mesh level, not the fine-grid nPoint. + * On coarser levels geometry[i_mesh]->GetnPoint() < nPoint; looping to + * nPoint would write past the end of the coarse-grid arrays (heap corruption). ---*/ + const auto nPoint_iMesh = geometry[i_mesh]->GetnPoint(); SU2_OMP_FOR_STAT(omp_chunk_size) - for (unsigned long i_point = 0; i_point < nPoint; i_point++) { + for (unsigned long i_point = 0; i_point < nPoint_iMesh; i_point++) { auto coords = geometry[i_mesh]->nodes->GetCoord(i_point); if (flame_front_ignition) { diff --git a/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref b/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref index f7e509e5e3c..6f26c9c89c3 100644 --- a/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref +++ b/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref @@ -1,39 +1,39 @@ VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP" - 0 , -7747.74 , 0.001 - 1 , -10948.1 , 0.001 - 2 , -8280.46 , 0.001 - 3 , -3802.21 , 0.001 - 4 , 658.085 , 0.001 - 5 , 4392.72 , 0.001 - 6 , 7268.92 , 0.001 - 7 , 9422.0 , 0.001 - 8 , 11077.6 , 0.001 - 9 , 12447.2 , 0.001 - 10 , 13660.8 , 0.001 - 11 , 14713.0 , 0.001 - 12 , 15397.1 , 0.001 - 13 , 15179.4 , 0.001 - 14 , 12887.9 , 0.001 - 15 , 5922.05 , 0.001 - 16 , -11571.8 , 0.001 - 17 , -51702.7 , 0.001 - 18 , -126889.0 , 0.001 - 19 , -21493.4 , 0.001 - 20 , -22571.2 , 0.001 - 21 , -16492.2 , 0.001 - 22 , -10533.8 , 0.001 - 23 , -6901.19 , 0.001 - 24 , -5763.06 , 0.001 - 25 , -6449.91 , 0.001 - 26 , -8061.2 , 0.001 - 27 , -9790.18 , 0.001 - 28 , -11077.2 , 0.001 - 29 , -11650.8 , 0.001 - 30 , -11500.7 , 0.001 - 31 , -10793.0 , 0.001 - 32 , -9652.1 , 0.001 - 33 , -7555.2 , 0.001 - 34 , -2031.11 , 0.001 - 35 , 12735.8 , 0.001 - 36 , 43905.7 , 0.001 - 37 , 85428.3 , 0.001 + 0 , -9031.62 , 0.001 + 1 , -12012.1 , 0.001 + 2 , -9069.4 , 0.001 + 3 , -4384.1 , 0.001 + 4 , 226.313 , 0.001 + 5 , 4094.64 , 0.001 + 6 , 7135.57 , 0.001 + 7 , 9534.04 , 0.001 + 8 , 11567.7 , 0.001 + 9 , 13502.9 , 0.001 + 10 , 15525.3 , 0.001 + 11 , 17677.6 , 0.001 + 12 , 19774.0 , 0.001 + 13 , 21231.7 , 0.001 + 14 , 20667.9 , 0.001 + 15 , 14910.9 , 0.001 + 16 , -3204.93 , 0.001 + 17 , -47800.8 , 0.001 + 18 , -127342.0 , 0.001 + 19 , -22401.2 , 0.001 + 20 , -22469.9 , 0.001 + 21 , -15796.2 , 0.001 + 22 , -9601.62 , 0.001 + 23 , -5984.92 , 0.001 + 24 , -5040.23 , 0.001 + 25 , -6061.17 , 0.001 + 26 , -8142.27 , 0.001 + 27 , -10495.3 , 0.001 + 28 , -12591.9 , 0.001 + 29 , -14189.4 , 0.001 + 30 , -15280.9 , 0.001 + 31 , -15978.6 , 0.001 + 32 , -16253.9 , 0.001 + 33 , -15289.0 , 0.001 + 34 , -10118.9 , 0.001 + 35 , 5881.72 , 0.001 + 36 , 40595.3 , 0.001 + 37 , 83547.0 , 0.001 diff --git a/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref b/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref index 0218e98d316..54b93ba1a83 100644 --- a/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref +++ b/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref @@ -1,4 +1,4 @@ VARIABLES="VARIABLE" , "DRAG" , "EFFICIENCY" , "FORCE_X" , "FORCE_Y" , "FORCE_Z" , "LIFT" , "MOMENT_X" , "MOMENT_Y" , "MOMENT_Z" , "SIDEFORCE" - 0 , 0.05240962543 , -27.33945591 , 0.08647516198 , -1.560629715 , 0.0 , -1.562144773 , 0.0 , 0.0 , 0.8858124377 , 0.0 - 1 , 0.2008795877 , -41.40890891 , 0.2463424389 , -2.081341632 , 0.0 , -2.086220261 , 0.0 , 0.0 , 0.737429107 , 0.0 - 2 , 0.371975273 , -55.04424867 , 0.4271103196 , -2.522745633 , 0.0 , -2.531462651 , 0.0 , 0.0 , 0.4069664819 , 0.0 + 0 , 0.3283027921 , -23.00124324 , 0.3601048051 , -1.453884254 , 0.0 , -1.461393914 , 0.0 , 0.0 , 0.3837075086 , 0.0 + 1 , 0.5529850442 , -38.57543344 , 0.6062515142 , -2.435135388 , 0.0 , -2.447781199 , 0.0 , 0.0 , 0.1364160306 , 0.0 + 2 , 0.7825703473 , -46.16887385 , 0.8428457563 , -2.753846031 , 0.0 , -2.771577273 , 0.0 , 0.0 , -0.1507632792 , 0.0 diff --git a/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref b/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref index 88d7794ce03..17f951cf4f5 100644 --- a/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref +++ b/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref @@ -1,5 +1,5 @@ -VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP" - 0 , 0.00701137 , 0.0001 - 1 , 0.00485473 , 0.0001 - 2 , 0.00244467 , 0.0001 - 3 , 0.000872557 , 0.0001 +VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP" + 0 , 0.00701908 , 0.0001 + 1 , 0.00485645 , 0.0001 + 2 , 0.002445 , 0.0001 + 3 , 0.000872591 , 0.0001 diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index e54011937ec..5f02581eeef 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -51,7 +51,7 @@ def main(): channel.cfg_dir = "euler/channel" channel.cfg_file = "inv_channel_RK.cfg" channel.test_iter = 20 - channel.test_vals = [-2.318252, 3.226111, 0.133426, 0.150359] + channel.test_vals = [-2.000215, 3.536936, 0.034212, 0.193725] test_list.append(channel) # NACA0012 @@ -59,7 +59,7 @@ def main(): naca0012.cfg_dir = "euler/naca0012" naca0012.cfg_file = "inv_NACA0012_Roe.cfg" naca0012.test_iter = 20 - naca0012.test_vals = [-4.252415, -3.789971, 0.306821, 0.024573] + naca0012.test_vals = [-4.492584, -3.930725, 0.297160, 0.025487] test_list.append(naca0012) # Supersonic wedge @@ -67,7 +67,7 @@ def main(): wedge.cfg_dir = "euler/wedge" wedge.cfg_file = "inv_wedge_HLLC.cfg" wedge.test_iter = 20 - wedge.test_vals = [-3.587150, 2.136260, -0.249533, 0.043953] + wedge.test_vals = [-3.689935, 2.034291, -0.249531, 0.043953] test_list.append(wedge) # ONERA M6 Wing @@ -83,7 +83,7 @@ def main(): fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012" fixedCL_naca0012.cfg_file = "inv_NACA0012.cfg" fixedCL_naca0012.test_iter = 10 - fixedCL_naca0012.test_vals = [-3.936884, 1.574653, 0.300864, 0.019462] + fixedCL_naca0012.test_vals = [-4.017883, 1.513039, 0.300961, 0.019472] test_list.append(fixedCL_naca0012) # HYPERSONIC FLOW PAST BLUNT BODY @@ -103,7 +103,7 @@ def main(): flatplate.cfg_dir = "navierstokes/flatplate" flatplate.cfg_file = "lam_flatplate.cfg" flatplate.test_iter = 100 - flatplate.test_vals = [-6.381351, -0.904240, 0.001313, 0.025285, 2.361500, -2.336300, 0, 0] + flatplate.test_vals = [-6.537258, -1.059050, 0.001198, 0.029303, 2.361500, -2.332200, 0.000000, 0.000000] test_list.append(flatplate) # Laminar cylinder (steady) @@ -111,7 +111,7 @@ def main(): cylinder.cfg_dir = "navierstokes/cylinder" cylinder.cfg_file = "lam_cylinder.cfg" cylinder.test_iter = 25 - cylinder.test_vals = [-8.460419, -2.972300, 0.271000, 1.701198, 0.000000] + cylinder.test_vals = [-8.463699, -2.981890, 0.045839, 1.659615, 0.000000] test_list.append(cylinder) # Laminar cylinder (low Mach correction) @@ -119,7 +119,7 @@ def main(): cylinder_lowmach.cfg_dir = "navierstokes/cylinder" cylinder_lowmach.cfg_file = "cylinder_lowmach.cfg" cylinder_lowmach.test_iter = 25 - cylinder_lowmach.test_vals = [-6.629113, -1.167336, -0.016421, -73.160843, 0.000000] + cylinder_lowmach.test_vals = [-6.473668, -1.011938, 0.275173, 71.130747, 0.000000] cylinder_lowmach.test_vals_aarch64 = [-6.830996, -1.368850, -0.143956, 73.963354, 0] test_list.append(cylinder_lowmach) @@ -136,7 +136,7 @@ def main(): poiseuille_profile.cfg_dir = "navierstokes/poiseuille" poiseuille_profile.cfg_file = "profile_poiseuille.cfg" poiseuille_profile.test_iter = 10 - poiseuille_profile.test_vals = [-12.005205, -7.539393, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.005129, -7.581821, -0.000000, 2.089953] poiseuille_profile.test_vals_aarch64 = [-12.009012, -7.262530, -0.000000, 2.089953] test_list.append(poiseuille_profile) @@ -157,7 +157,7 @@ def main(): rae2822_sa.cfg_dir = "rans/rae2822" rae2822_sa.cfg_file = "turb_SA_RAE2822.cfg" rae2822_sa.test_iter = 20 - rae2822_sa.test_vals = [-2.169314, -5.450577, 0.293838, 0.104752, 0.000000] + rae2822_sa.test_vals = [-2.193049, -5.312606, 0.388492, 0.077204, 0.000000] test_list.append(rae2822_sa) # RAE2822 SST @@ -165,7 +165,7 @@ def main(): rae2822_sst.cfg_dir = "rans/rae2822" rae2822_sst.cfg_file = "turb_SST_RAE2822.cfg" rae2822_sst.test_iter = 20 - rae2822_sst.test_vals = [-1.028401, 5.875380, 0.279522, 0.093893, 0.000000] + rae2822_sst.test_vals = [-1.028279, 5.869352, 0.357127, 0.074559, 0.000000] test_list.append(rae2822_sst) # RAE2822 SST_SUST @@ -173,7 +173,7 @@ def main(): rae2822_sst_sust.cfg_dir = "rans/rae2822" rae2822_sst_sust.cfg_file = "turb_SST_SUST_RAE2822.cfg" rae2822_sst_sust.test_iter = 20 - rae2822_sst_sust.test_vals = [-2.540329, 5.875369, 0.279522, 0.093893] + rae2822_sst_sust.test_vals = [-2.479273, 5.869341, 0.357127, 0.074559] test_list.append(rae2822_sst_sust) # Flat plate @@ -181,7 +181,7 @@ def main(): turb_flatplate.cfg_dir = "rans/flatplate" turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" turb_flatplate.test_iter = 20 - turb_flatplate.test_vals = [-4.938980, -7.469368, -0.187651, 0.015894] + turb_flatplate.test_vals = [-4.958138, -7.438030, -0.187473, 0.015060] test_list.append(turb_flatplate) # ONERA M6 Wing @@ -266,7 +266,7 @@ def main(): turb_naca0012_sst_restart_mg.cfg_file = "turb_NACA0012_sst_multigrid_restart.cfg" turb_naca0012_sst_restart_mg.test_iter = 20 turb_naca0012_sst_restart_mg.ntest_vals = 5 - turb_naca0012_sst_restart_mg.test_vals = [-6.538814, -5.057150, 0.830240, -0.008813, 0.078177] + turb_naca0012_sst_restart_mg.test_vals = [-6.589114, -5.057151, 0.830239, -0.008808, 0.078150] test_list.append(turb_naca0012_sst_restart_mg) ############################# @@ -347,7 +347,7 @@ def main(): inc_euler_naca0012.cfg_dir = "incomp_euler/naca0012" inc_euler_naca0012.cfg_file = "incomp_NACA0012.cfg" inc_euler_naca0012.test_iter = 20 - inc_euler_naca0012.test_vals = [-5.737092, -4.868827, 0.512333, 0.009264] + inc_euler_naca0012.test_vals = [-5.846118, -4.941076, 0.519913, 0.008955] test_list.append(inc_euler_naca0012) # C-D nozzle with pressure inlet and mass flow outlet @@ -355,7 +355,7 @@ def main(): inc_nozzle.cfg_dir = "incomp_euler/nozzle" inc_nozzle.cfg_file = "inv_nozzle.cfg" inc_nozzle.test_iter = 20 - inc_nozzle.test_vals = [-5.362338, -4.748247, -0.017498, 0.115865] + inc_nozzle.test_vals = [-6.171980, -5.419034, 0.009267, 0.127577] test_list.append(inc_nozzle) ############################# @@ -367,7 +367,7 @@ def main(): inc_lam_cylinder.cfg_dir = "incomp_navierstokes/cylinder" inc_lam_cylinder.cfg_file = "incomp_cylinder.cfg" inc_lam_cylinder.test_iter = 10 - inc_lam_cylinder.test_vals = [-4.168263, -3.611146, 0.013547, 4.538946] + inc_lam_cylinder.test_vals = [-4.159236, -3.569077, 0.017653, 4.934964] test_list.append(inc_lam_cylinder) # Buoyancy-driven cavity @@ -432,7 +432,7 @@ def main(): cavity.cfg_dir = "moving_wall/cavity" cavity.cfg_file = "lam_cavity.cfg" cavity.test_iter = 25 - cavity.test_vals = [-7.325788, -1.861524, 1.097830, 1.028368] + cavity.test_vals = [-7.938907, -2.490199, 0.013042, 0.004995] test_list.append(cavity) # Spinning cylinder @@ -440,7 +440,7 @@ def main(): spinning_cylinder.cfg_dir = "moving_wall/spinning_cylinder" spinning_cylinder.cfg_file = "spinning_cylinder.cfg" spinning_cylinder.test_iter = 25 - spinning_cylinder.test_vals = [-7.881383, -2.419298, 1.535192, 1.450905] + spinning_cylinder.test_vals = [-7.547526, -2.080576, 1.888705, 1.812327] spinning_cylinder.test_vals_aarch64 = [-8.008023, -2.611064, 1.497308, 1.487483] test_list.append(spinning_cylinder) @@ -462,7 +462,7 @@ def main(): sine_gust.cfg_dir = "gust" sine_gust.cfg_file = "inv_gust_NACA0012.cfg" sine_gust.test_iter = 5 - sine_gust.test_vals = [-1.977498, 3.481817, -0.009878, -0.005086] + sine_gust.test_vals = [-1.977498, 3.481817, -0.009944, -0.004266] sine_gust.unsteady = True test_list.append(sine_gust) @@ -471,7 +471,7 @@ def main(): cosine_gust.cfg_dir = "gust" cosine_gust.cfg_file = "cosine_gust_zdir.cfg" cosine_gust.test_iter = 79 - cosine_gust.test_vals = [-2.418805, 0.001775, -0.001245, 0.000411, -0.000593] + cosine_gust.test_vals = [-2.418805, 0.002211, -0.001258, 0.000438, -0.000592] cosine_gust.unsteady = True cosine_gust.enabled_with_tsan = False test_list.append(cosine_gust) @@ -491,7 +491,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [-1.876630, 4.021077, 0.078661, 0.027698, -0.001639, -0.000129, -1.056256] + aeroelastic.test_vals = [-1.876626, 4.021083, 0.081436, 0.027726, -0.001638, -0.000130, -1.056269] aeroelastic.unsteady = True aeroelastic.enabled_on_cpu_arch = ["x86_64"] # Requires AVX-capable architecture test_list.append(aeroelastic) @@ -519,7 +519,7 @@ def main(): unst_deforming_naca0012.cfg_dir = "disc_adj_euler/naca0012_pitching_def" unst_deforming_naca0012.cfg_file = "inv_NACA0012_pitching_deform.cfg" unst_deforming_naca0012.test_iter = 5 - unst_deforming_naca0012.test_vals = [-3.665243, -3.794042, -3.716822, -3.148495] + unst_deforming_naca0012.test_vals = [-3.665284, -3.794189, -3.716987, -3.148573] unst_deforming_naca0012.unsteady = True unst_deforming_naca0012.enabled_with_tsan = False test_list.append(unst_deforming_naca0012) @@ -532,8 +532,8 @@ def main(): edge_VW = TestCase('edge_VW') edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" - edge_VW.test_iter = 40 - edge_VW.test_vals = [-8.895442, -2.694280, -0.000009, 0.000000] + edge_VW.test_iter = 30 + edge_VW.test_vals = [-7.053408, -0.851910, -0.000009, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR @@ -541,7 +541,7 @@ def main(): edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" edge_PPR.test_iter = 20 - edge_PPR.test_vals = [-10.594993, -4.431993, -0.000034, 0.000000] + edge_PPR.test_vals = [-12.455039, -6.258168, -0.000034, 0.000000] edge_PPR.test_vals_aarch64 = [ -7.139211, -0.980821, -0.000034, 0.000000] test_list.append(edge_PPR) @@ -654,7 +654,7 @@ def main(): bars_SST_2D.cfg_dir = "sliding_interface/bars_SST_2D" bars_SST_2D.cfg_file = "bars.cfg" bars_SST_2D.test_iter = 13 - bars_SST_2D.test_vals = [13.000000, -0.473801, -1.563681] + bars_SST_2D.test_vals = [13.000000, -0.396746, -1.461254] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 4e1aa84e22c..df801edb10f 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -99,7 +99,7 @@ def main(): discadj_incomp_NACA0012.cfg_dir = "disc_adj_incomp_euler/naca0012" discadj_incomp_NACA0012.cfg_file = "incomp_NACA0012_disc.cfg" discadj_incomp_NACA0012.test_iter = 20 - discadj_incomp_NACA0012.test_vals = [20.000000, -3.338267, -2.490046, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -3.122291, -2.287328, 0.000000] test_list.append(discadj_incomp_NACA0012) ##################################### @@ -187,7 +187,7 @@ def main(): discadj_pitchingNACA0012.cfg_dir = "disc_adj_euler/naca0012_pitching" discadj_pitchingNACA0012.cfg_file = "inv_NACA0012_pitching.cfg" discadj_pitchingNACA0012.test_iter = 4 - discadj_pitchingNACA0012.test_vals = [-1.124927, -1.586220, -0.006032, 0.000009] + discadj_pitchingNACA0012.test_vals = [-1.041883, -1.512874, -0.006211, 0.000012] discadj_pitchingNACA0012.tol = 0.01 discadj_pitchingNACA0012.unsteady = True discadj_pitchingNACA0012.enabled_with_tsan = False diff --git a/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref b/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref index 8ab0b5b0fe7..45622cb6bd5 100644 --- a/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref +++ b/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref @@ -1,3 +1,3 @@ VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP" - 0 , 0.0456482 , 0.001 - 1 , -0.0881187 , 0.001 + 0 , 0.0525397 , 0.001 + 1 , -0.099502 , 0.001 diff --git a/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref b/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref index 9365cd9cd74..174226e7849 100644 --- a/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref +++ b/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref @@ -1,3 +1,3 @@ VARIABLES="VARIABLE" , "DRAG" , "EFFICIENCY" , "FORCE_X" , "FORCE_Y" , "FORCE_Z" , "LIFT" , "MOMENT_X" , "MOMENT_Y" , "MOMENT_Z" , "SIDEFORCE" - 0 , 0.04734305575 , -0.4824482295 , 0.04752721691 , -0.00792353334 , 0.0 , -0.008958448527 , 0.0 , 0.0 , 0.02636591979 , 0.0 - 1 , -0.09189465405 , 0.6527341405 , -0.09165316206 , -0.01206987592 , 0.0 , -0.01006760043 , 0.0 , 0.0 , 0.06097366677 , 0.0 + 0 , 0.05592643623 , -0.4243829941 , 0.05586792439 , 0.003291646374 , 0.0 , 0.002072110703 , 0.0 , 0.0 , 0.02964415677 , 0.0 + 1 , -0.1052916742 , 0.9115770745 , -0.1054405784 , 0.005675584425 , 0.0 , 0.007974407886 , 0.0 , 0.0 , 0.06727760621 , 0.0 diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index a138b9c374a..a6e77734224 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -228,7 +228,7 @@ def main(): channel.cfg_dir = "euler/channel" channel.cfg_file = "inv_channel_RK.cfg" channel.test_iter = 20 - channel.test_vals = [-2.305051, 3.237256, 0.125006, 0.154077] + channel.test_vals = [-1.988782, 3.546674, 0.032065, 0.194399] test_list.append(channel) # NACA0012 @@ -236,7 +236,7 @@ def main(): naca0012.cfg_dir = "euler/naca0012" naca0012.cfg_file = "inv_NACA0012_Roe.cfg" naca0012.test_iter = 20 - naca0012.test_vals = [-4.314738, -3.845428, 0.307738, 0.024670] + naca0012.test_vals = [-4.442633, -3.913184, 0.295834, 0.024405] test_list.append(naca0012) # Supersonic wedge @@ -244,7 +244,7 @@ def main(): wedge.cfg_dir = "euler/wedge" wedge.cfg_file = "inv_wedge_HLLC.cfg" wedge.test_iter = 20 - wedge.test_vals = [-3.573085, 2.150321, -0.249533, 0.043953] + wedge.test_vals = [-3.681969, 2.042532, -0.249531, 0.043953] test_list.append(wedge) # ONERA M6 Wing @@ -252,7 +252,7 @@ def main(): oneram6.cfg_dir = "euler/oneram6" oneram6.cfg_file = "inv_ONERAM6.cfg" oneram6.test_iter = 10 - oneram6.test_vals = [-11.525271, -10.995902, 0.280800, 0.008623] + oneram6.test_vals = [-11.530230, -11.006685, 0.280800, 0.008623] oneram6.timeout = 3200 test_list.append(oneram6) @@ -261,7 +261,7 @@ def main(): fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012" fixedCL_naca0012.cfg_file = "inv_NACA0012.cfg" fixedCL_naca0012.test_iter = 10 - fixedCL_naca0012.test_vals = [-3.919916, 1.592064, 0.300852, 0.019461] + fixedCL_naca0012.test_vals = [-4.006904, 1.523677, 0.300969, 0.019473] test_list.append(fixedCL_naca0012) # Polar sweep of the inviscid NACA0012 @@ -270,7 +270,7 @@ def main(): polar_naca0012.cfg_file = "inv_NACA0012.cfg" polar_naca0012.polar = True polar_naca0012.test_iter = 10 - polar_naca0012.test_vals = [-1.206973, 4.234604, 0.013410, 0.073285] + polar_naca0012.test_vals = [-1.285568, 4.161371, 0.003627, 0.083095] polar_naca0012.test_vals_aarch64 = [-1.083394, 4.386134, 0.001588, 0.033513] polar_naca0012.command = TestCase.Command(exec = "compute_polar.py", param = "-i 11") # flaky test on arm64 @@ -327,7 +327,7 @@ def main(): flatplate.cfg_dir = "navierstokes/flatplate" flatplate.cfg_file = "lam_flatplate.cfg" flatplate.test_iter = 100 - flatplate.test_vals = [-6.397042, -0.919335, 0.001321, 0.025064, 2.361500, -2.336500, 0.000000, 0.000000] + flatplate.test_vals = [-6.499563, -1.020731, 0.001223, 0.028373, 2.361500, -2.333200, 0.000000, 0.000000] test_list.append(flatplate) # Custom objective function @@ -352,7 +352,7 @@ def main(): cylinder.cfg_dir = "navierstokes/cylinder" cylinder.cfg_file = "lam_cylinder.cfg" cylinder.test_iter = 25 - cylinder.test_vals = [-8.529918, -3.059339, 0.189560, 1.746170, 0.000000] + cylinder.test_vals = [-8.411856, -2.937460, -0.002360, 1.643164, 0.000000] test_list.append(cylinder) # Laminar cylinder (low Mach correction) @@ -360,7 +360,8 @@ def main(): cylinder_lowmach.cfg_dir = "navierstokes/cylinder" cylinder_lowmach.cfg_file = "cylinder_lowmach.cfg" cylinder_lowmach.test_iter = 25 - cylinder_lowmach.test_vals = [-6.603373, -1.141590, -0.715787, -63.545748, 0.000000] + cylinder_lowmach.test_vals = [-6.469910, -1.008163, -0.381561, 78.514909, 0.000000] + test_list.append(cylinder_lowmach) # 2D Poiseuille flow (body force driven with periodic inlet / outlet) @@ -368,7 +369,7 @@ def main(): poiseuille.cfg_dir = "navierstokes/poiseuille" poiseuille.cfg_file = "lam_poiseuille.cfg" poiseuille.test_iter = 10 - poiseuille.test_vals = [-5.050889, 0.648196, 0.000199, 13.639173, 0.000000] + poiseuille.test_vals = [0.648196, 0.000199, 13.639173, 0.000000] poiseuille.tol = 0.001 test_list.append(poiseuille) @@ -377,7 +378,7 @@ def main(): poiseuille_profile.cfg_dir = "navierstokes/poiseuille" poiseuille_profile.cfg_file = "profile_poiseuille.cfg" poiseuille_profile.test_iter = 10 - poiseuille_profile.test_vals = [-12.004334, -7.534404, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.004278, -7.578183, -0.000000, 2.089953] poiseuille_profile.test_vals_aarch64 = [-12.007498, -7.226926, -0.000000, 2.089953] poiseuille_profile.tol = [0.001, 0.001, 1e-5, 1e-5, 1e-5] test_list.append(poiseuille_profile) @@ -391,7 +392,7 @@ def main(): rae2822_sa.cfg_dir = "rans/rae2822" rae2822_sa.cfg_file = "turb_SA_RAE2822.cfg" rae2822_sa.test_iter = 20 - rae2822_sa.test_vals = [-2.172705, -5.465982, 0.292927, 0.103369, 0.000000] + rae2822_sa.test_vals = [-2.190821, -5.317349, 0.391922, 0.075544, 0.000000] test_list.append(rae2822_sa) # RAE2822 SST @@ -399,7 +400,7 @@ def main(): rae2822_sst.cfg_dir = "rans/rae2822" rae2822_sst.cfg_file = "turb_SST_RAE2822.cfg" rae2822_sst.test_iter = 20 - rae2822_sst.test_vals = [-1.035662, 5.868036, 0.283073, 0.094756, 0.000000] + rae2822_sst.test_vals = [-1.035574, 5.863601, 0.358893, 0.074724, 0.000000] test_list.append(rae2822_sst) # RAE2822 SST_SUST @@ -407,7 +408,7 @@ def main(): rae2822_sst_sust.cfg_dir = "rans/rae2822" rae2822_sst_sust.cfg_file = "turb_SST_SUST_RAE2822.cfg" rae2822_sst_sust.test_iter = 20 - rae2822_sst_sust.test_vals = [-2.542992, 5.868021, 0.283073, 0.094756] + rae2822_sst_sust.test_vals = [-2.492136, 5.863586, 0.358893, 0.074724] test_list.append(rae2822_sst_sust) # Flat plate @@ -415,7 +416,7 @@ def main(): turb_flatplate.cfg_dir = "rans/flatplate" turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" turb_flatplate.test_iter = 20 - turb_flatplate.test_vals = [-4.879863, -7.464877, -0.187760, 0.016260] + turb_flatplate.test_vals = [-4.926218, -7.441083, -0.187477, 0.015330] test_list.append(turb_flatplate) # Flat plate (compressible) with species inlet @@ -423,7 +424,7 @@ def main(): turb_flatplate_species.cfg_dir = "rans/flatplate" turb_flatplate_species.cfg_file = "turb_SA_flatplate_species.cfg" turb_flatplate_species.test_iter = 20 - turb_flatplate_species.test_vals = [-4.548766, -1.476908, -1.980237, 0.937064, -3.573976, 3.000000, -0.475230, 2.000000, -1.511528, 3.000000, -0.699313, 0.999900, 0.999900] + turb_flatplate_species.test_vals = [-4.728172, -1.517257, -2.296200, 0.801649, -3.574284, 3.000000, -0.964853, 2.000000, -1.529003, 3.000000, -0.705161, 0.999933, 0.999933] test_list.append(turb_flatplate_species) # Flat plate SST compressibility correction Wilcox @@ -521,7 +522,7 @@ def main(): turb_naca0012_sst_2003_Vm.cfg_dir = "rans/naca0012" turb_naca0012_sst_2003_Vm.cfg_file = "turb_NACA0012_sst_2003-Vm.cfg" turb_naca0012_sst_2003_Vm.test_iter = 10 - turb_naca0012_sst_2003_Vm.test_vals = [-7.134118, -10.168739, -3.668709, 1.060563, 0.019147, -2.282800] + turb_naca0012_sst_2003_Vm.test_vals = [-10.168739, -3.668709, 1.060563, 0.019147, -2.282800] turb_naca0012_sst_2003_Vm.timeout = 3200 test_list.append(turb_naca0012_sst_2003_Vm) @@ -530,7 +531,7 @@ def main(): turb_naca0012_sst_1994_KLm.cfg_dir = "rans/naca0012" turb_naca0012_sst_1994_KLm.cfg_file = "turb_NACA0012_sst_1994-KLm.cfg" turb_naca0012_sst_1994_KLm.test_iter = 10 - turb_naca0012_sst_1994_KLm.test_vals = [-7.142696, -10.390871, -3.701584, 1.062164, 0.019076, -2.426123] + turb_naca0012_sst_1994_KLm.test_vals = [-10.390871, -3.701584, 1.062164, 0.019076, -2.426123] turb_naca0012_sst_1994_KLm.timeout = 3200 test_list.append(turb_naca0012_sst_1994_KLm) @@ -539,7 +540,7 @@ def main(): turb_naca0012_sst_fixedvalues.cfg_dir = "rans/naca0012" turb_naca0012_sst_fixedvalues.cfg_file = "turb_NACA0012_sst_fixedvalues.cfg" turb_naca0012_sst_fixedvalues.test_iter = 10 - turb_naca0012_sst_fixedvalues.test_vals = [-5.216551, -10.440018, 0.774146, 1.022363, 0.040546, -3.736444] + turb_naca0012_sst_fixedvalues.test_vals = [-10.440018, 0.774146, 1.022363, 0.040546, -3.736444] turb_naca0012_sst_fixedvalues.timeout = 3200 test_list.append(turb_naca0012_sst_fixedvalues) @@ -595,7 +596,7 @@ def main(): turb_naca0012_sst_restart_mg.cfg_file = "turb_NACA0012_sst_multigrid_restart.cfg" turb_naca0012_sst_restart_mg.test_iter = 20 turb_naca0012_sst_restart_mg.ntest_vals = 5 - turb_naca0012_sst_restart_mg.test_vals = [-6.538846, -5.057149, 0.830238, -0.008740, 0.078171] + turb_naca0012_sst_restart_mg.test_vals = [-6.566570, -5.057149, 0.830238, -0.008695, 0.078156] turb_naca0012_sst_restart_mg.timeout = 3200 turb_naca0012_sst_restart_mg.tol = 0.000001 test_list.append(turb_naca0012_sst_restart_mg) @@ -609,7 +610,7 @@ def main(): inc_euler_naca0012.cfg_dir = "incomp_euler/naca0012" inc_euler_naca0012.cfg_file = "incomp_NACA0012.cfg" inc_euler_naca0012.test_iter = 20 - inc_euler_naca0012.test_vals = [-5.984413, -5.104039, 0.523625, 0.008885] + inc_euler_naca0012.test_vals = [-6.058441, -5.126560, 0.525681, 0.008778] test_list.append(inc_euler_naca0012) # C-D nozzle with pressure inlet and mass flow outlet @@ -617,7 +618,7 @@ def main(): inc_nozzle.cfg_dir = "incomp_euler/nozzle" inc_nozzle.cfg_file = "inv_nozzle.cfg" inc_nozzle.test_iter = 20 - inc_nozzle.test_vals = [-5.594509, -4.878247, 0.005147, 0.139611] + inc_nozzle.test_vals = [-6.058643, -5.286249, 0.002391, 0.124107] test_list.append(inc_nozzle) # Laminar wall mounted cylinder, Euler walls, cylinder wall diagonally split @@ -637,7 +638,7 @@ def main(): inc_lam_cylinder.cfg_dir = "incomp_navierstokes/cylinder" inc_lam_cylinder.cfg_file = "incomp_cylinder.cfg" inc_lam_cylinder.test_iter = 10 - inc_lam_cylinder.test_vals = [-4.157264, -3.589125, -0.018681, 4.659302] + inc_lam_cylinder.test_vals = [-4.156152, -3.554127, -0.017923, 5.101126] test_list.append(inc_lam_cylinder) # Laminar sphere, Re=1. Last column: Cd=24/Re @@ -645,7 +646,7 @@ def main(): inc_lam_sphere.cfg_dir = "incomp_navierstokes/sphere" inc_lam_sphere.cfg_file = "sphere.cfg" inc_lam_sphere.test_iter = 5 - inc_lam_sphere.test_vals = [-8.166398, -8.947226, 0.121003, 25.782690] + inc_lam_sphere.test_vals = [-8.165744, -8.968003, 0.121003, 25.782691] test_list.append(inc_lam_sphere) # Buoyancy-driven cavity @@ -661,7 +662,7 @@ def main(): inc_poly_cylinder.cfg_dir = "incomp_navierstokes/cylinder" inc_poly_cylinder.cfg_file = "poly_cylinder.cfg" inc_poly_cylinder.test_iter = 20 - inc_poly_cylinder.test_vals = [-8.030976, -2.362995, 0.006829, 1.923532, -172.590000] + inc_poly_cylinder.test_vals = [-2.362995, 0.006829, 1.923532, -172.590000] test_list.append(inc_poly_cylinder) # X-coarse laminar bend as a mixed element CGNS test @@ -783,7 +784,7 @@ def main(): turbmod_sa_bsl_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_bsl_rae2822.cfg_file = "turb_SA_BSL_RAE2822.cfg" turbmod_sa_bsl_rae2822.test_iter = 20 - turbmod_sa_bsl_rae2822.test_vals = [-2.610446, 0.335724, -0.118510, -5.463071, 0.765741, 0.028251] + turbmod_sa_bsl_rae2822.test_vals = [-2.797759, 0.171338, -0.274795, -5.261510, 0.792586, 0.025577] test_list.append(turbmod_sa_bsl_rae2822) # SA Negative @@ -791,7 +792,7 @@ def main(): turbmod_sa_neg_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_neg_rae2822.cfg_file = "turb_SA_NEG_RAE2822.cfg" turbmod_sa_neg_rae2822.test_iter = 10 - turbmod_sa_neg_rae2822.test_vals = [-1.345556, 1.448390, 1.208561, -0.846814, 1.273854, 0.498380, 0.000000] + turbmod_sa_neg_rae2822.test_vals = [1.448390, 1.208561, -0.846814, 1.273854, 0.498380, 0.000000] turbmod_sa_neg_rae2822.test_vals_aarch64 = [-1.345593, 1.448310, 1.208721, -0.846597, 1.248410, 0.489117, 0.000000] test_list.append(turbmod_sa_neg_rae2822) @@ -800,7 +801,7 @@ def main(): turbmod_sa_comp_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_comp_rae2822.cfg_file = "turb_SA_COMP_RAE2822.cfg" turbmod_sa_comp_rae2822.test_iter = 20 - turbmod_sa_comp_rae2822.test_vals = [-2.610449, 0.335720, -0.118515, -5.468848, 0.765768, 0.028257] + turbmod_sa_comp_rae2822.test_vals = [-2.797713, 0.171400, -0.274750, -5.270451, 0.792619, 0.025579] test_list.append(turbmod_sa_comp_rae2822) # SA Edwards @@ -808,7 +809,7 @@ def main(): turbmod_sa_edw_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_edw_rae2822.cfg_file = "turb_SA_EDW_RAE2822.cfg" turbmod_sa_edw_rae2822.test_iter = 20 - turbmod_sa_edw_rae2822.test_vals = [-2.609968, 0.336105, -0.118179, -6.022707, 0.765928, 0.028192] + turbmod_sa_edw_rae2822.test_vals = [-2.798216, 0.171419, -0.274673, -5.950380, 0.793286, 0.025430] test_list.append(turbmod_sa_edw_rae2822) # SA Compressibility and Edwards @@ -816,7 +817,7 @@ def main(): turbmod_sa_comp_edw_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_comp_edw_rae2822.cfg_file = "turb_SA_COMP_EDW_RAE2822.cfg" turbmod_sa_comp_edw_rae2822.test_iter = 20 - turbmod_sa_comp_edw_rae2822.test_vals = [-2.610041, 0.336057, -0.118225, -6.023847, 0.765944, 0.028196] + turbmod_sa_comp_edw_rae2822.test_vals = [-2.804013, 0.164355, -0.281124, -5.949769, 0.793596, 0.025415] test_list.append(turbmod_sa_comp_edw_rae2822) # SA QCR @@ -824,7 +825,7 @@ def main(): turbmod_sa_qcr_rae2822.cfg_dir = "turbulence_models/sa/rae2822" turbmod_sa_qcr_rae2822.cfg_file = "turb_SA_QCR_RAE2822.cfg" turbmod_sa_qcr_rae2822.test_iter = 20 - turbmod_sa_qcr_rae2822.test_vals = [-2.320855, 0.512787, 0.108026, -5.449178, 0.770698, 0.026693] + turbmod_sa_qcr_rae2822.test_vals = [-2.818005, 0.149744, -0.284903, -5.229322, 0.793829, 0.025455] test_list.append(turbmod_sa_qcr_rae2822) ############################ @@ -848,7 +849,7 @@ def main(): contadj_naca0012.cfg_dir = "cont_adj_euler/naca0012" contadj_naca0012.cfg_file = "inv_NACA0012.cfg" contadj_naca0012.test_iter = 5 - contadj_naca0012.test_vals = [-9.520784, -15.101278, -0.726250, 0.020280] + contadj_naca0012.test_vals = [-9.526111, -15.089167, -0.726250, 0.020280] contadj_naca0012.test_vals_aarch64 = [-9.662546, -14.998818, -0.726250, 0.020280] test_list.append(contadj_naca0012) @@ -857,7 +858,7 @@ def main(): contadj_oneram6.cfg_dir = "cont_adj_euler/oneram6" contadj_oneram6.cfg_file = "inv_ONERAM6.cfg" contadj_oneram6.test_iter = 10 - contadj_oneram6.test_vals = [-12.069374, -12.632463, -1.086100, 0.007556] + contadj_oneram6.test_vals = [-12.086022, -12.648069, -1.086100, 0.007556] test_list.append(contadj_oneram6) # Inviscid WEDGE: tests averaged outflow total pressure adjoint @@ -873,7 +874,7 @@ def main(): contadj_fixed_CL_naca0012.cfg_dir = "fixed_cl/naca0012" contadj_fixed_CL_naca0012.cfg_file = "inv_NACA0012_ContAdj.cfg" contadj_fixed_CL_naca0012.test_iter = 100 - contadj_fixed_CL_naca0012.test_vals = [1.154889, -4.342907, -0.075177, -0.007496] + contadj_fixed_CL_naca0012.test_vals = [1.382576, -4.042295, -0.008696, 0.003238] test_list.append(contadj_fixed_CL_naca0012) ################################### @@ -885,7 +886,7 @@ def main(): contadj_ns_cylinder.cfg_dir = "cont_adj_navierstokes/cylinder" contadj_ns_cylinder.cfg_file = "lam_cylinder.cfg" contadj_ns_cylinder.test_iter = 20 - contadj_ns_cylinder.test_vals = [-3.589714, -9.027143, 2.056700, -0.000000] + contadj_ns_cylinder.test_vals = [-3.632833, -9.087692, 2.056700, -0.000000] test_list.append(contadj_ns_cylinder) # Adjoint laminar naca0012 subsonic @@ -929,7 +930,7 @@ def main(): contadj_rans_rae2822.cfg_dir = "cont_adj_rans/rae2822" contadj_rans_rae2822.cfg_file = "turb_SA_RAE2822.cfg" contadj_rans_rae2822.test_iter = 20 - contadj_rans_rae2822.test_vals = [-5.399633, -10.904666, -0.212470, 0.005448] + contadj_rans_rae2822.test_vals = [-5.399744, -10.904916, -0.212470, 0.005448] test_list.append(contadj_rans_rae2822) ############################# @@ -1009,7 +1010,7 @@ def main(): rot_naca0012.cfg_dir = "rotating/naca0012" rot_naca0012.cfg_file = "rot_NACA0012.cfg" rot_naca0012.test_iter = 25 - rot_naca0012.test_vals = [-1.302487, 4.220598, -0.002152, 0.124241] + rot_naca0012.test_vals = [-1.289907, 4.246244, -0.000518, 0.112723] test_list.append(rot_naca0012) # Lid-driven cavity @@ -1017,7 +1018,7 @@ def main(): cavity.cfg_dir = "moving_wall/cavity" cavity.cfg_file = "lam_cavity.cfg" cavity.test_iter = 25 - cavity.test_vals = [-8.194578, -2.735580, 0.005612, -0.019805] + cavity.test_vals = [-7.828480, -2.367075, 0.008928, 0.007370] test_list.append(cavity) # Spinning cylinder @@ -1025,7 +1026,7 @@ def main(): spinning_cylinder.cfg_dir = "moving_wall/spinning_cylinder" spinning_cylinder.cfg_file = "spinning_cylinder.cfg" spinning_cylinder.test_iter = 25 - spinning_cylinder.test_vals = [-7.716789, -2.257294, 2.054821, 1.660858] + spinning_cylinder.test_vals = [-7.383987, -1.919413, 2.601945, 1.976038] test_list.append(spinning_cylinder) ###################################### @@ -1046,7 +1047,7 @@ def main(): sine_gust.cfg_dir = "gust" sine_gust.cfg_file = "inv_gust_NACA0012.cfg" sine_gust.test_iter = 5 - sine_gust.test_vals = [-1.977498, 3.481817, -0.010372, -0.005217] + sine_gust.test_vals = [-1.977498, 3.481817, -0.010337, -0.004460] sine_gust.unsteady = True test_list.append(sine_gust) @@ -1084,7 +1085,7 @@ def main(): flatplate_unsteady.cfg_dir = "navierstokes/flatplate" flatplate_unsteady.cfg_file = "lam_flatplate_unst.cfg" flatplate_unsteady.test_iter = 3 - flatplate_unsteady.test_vals = [-8.875128, -8.250204, -6.305788, -5.469452, -3.398230, 0.002075, -0.325535] + flatplate_unsteady.test_vals = [0.000008, -8.875128, -8.250204, -6.305788, -5.469452, -3.398230, 0.002075, -0.325535] flatplate_unsteady.unsteady = True test_list.append(flatplate_unsteady) @@ -1097,15 +1098,15 @@ def main(): edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" edge_VW.test_iter = 25 - edge_VW.test_vals = [-3.178712, 3.023048, -0.000009, 0.000000] + edge_VW.test_vals = [-3.145553, 3.055761, -0.000009, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR edge_PPR = TestCase('edge_PPR') edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" - edge_PPR.test_iter = 25 - edge_PPR.test_vals = [-9.020461, -2.870274, -0.000034, 0.000000] + edge_PPR.test_iter = 20 + edge_PPR.test_vals = [-10.311364, -4.158193, -0.000034, 0.000000] test_list.append(edge_PPR) # Rarefaction Q1D nozzle, include CoolProp fluid model @@ -1252,7 +1253,7 @@ def main(): bars_SST_2D.cfg_dir = "sliding_interface/bars_SST_2D" bars_SST_2D.cfg_file = "bars.cfg" bars_SST_2D.test_iter = 13 - bars_SST_2D.test_vals = [13.000000, -0.472766, -1.559919] + bars_SST_2D.test_vals = [13.000000, -0.397743, -1.458724] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) @@ -1443,7 +1444,7 @@ def main(): pywrapper_naca0012.cfg_dir = "euler/naca0012" pywrapper_naca0012.cfg_file = "inv_NACA0012_Roe.cfg" pywrapper_naca0012.test_iter = 80 - pywrapper_naca0012.test_vals = [-7.755848, -7.082517, 0.335769, 0.023275] + pywrapper_naca0012.test_vals = [-6.754892, -6.158544, 0.335712, 0.023273] pywrapper_naca0012.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") test_list.append(pywrapper_naca0012) @@ -1473,7 +1474,7 @@ def main(): pywrapper_aeroelastic.cfg_dir = "aeroelastic" pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [-1.876634, 4.021068, 0.081002, 0.027610, -0.001642, -0.000127, -0.966944] + pywrapper_aeroelastic.test_vals = [-1.876633, 4.021069, 0.082654, 0.027642, -0.001643, -0.000126, -0.966946] pywrapper_aeroelastic.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") pywrapper_aeroelastic.unsteady = True test_list.append(pywrapper_aeroelastic) @@ -1514,7 +1515,7 @@ def main(): pywrapper_unsteadyCHT.cfg_dir = "py_wrapper/flatPlate_unsteady_CHT" pywrapper_unsteadyCHT.cfg_file = "unsteady_CHT_FlatPlate_Conf.cfg" pywrapper_unsteadyCHT.test_iter = 5 - pywrapper_unsteadyCHT.test_vals = [-1.614168, 2.259984, -0.005601, 0.129785] + pywrapper_unsteadyCHT.test_vals = [-1.614168, 2.259968, -0.010622, 0.171621] pywrapper_unsteadyCHT.command = TestCase.Command("mpirun -np 2", "python", "launch_unsteady_CHT_FlatPlate.py --parallel -f") pywrapper_unsteadyCHT.unsteady = True test_list.append(pywrapper_unsteadyCHT) diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index f4fa88dc75d..cc4b94931bf 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -104,7 +104,7 @@ def main(): discadj_incomp_NACA0012.cfg_dir = "disc_adj_incomp_euler/naca0012" discadj_incomp_NACA0012.cfg_file = "incomp_NACA0012_disc.cfg" discadj_incomp_NACA0012.test_iter = 20 - discadj_incomp_NACA0012.test_vals = [20.000000, -3.319959, -2.489110, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -3.095094, -2.322528, 0.000000] test_list.append(discadj_incomp_NACA0012) ##################################### @@ -217,7 +217,7 @@ def main(): discadj_pitchingNACA0012.cfg_dir = "disc_adj_euler/naca0012_pitching" discadj_pitchingNACA0012.cfg_file = "inv_NACA0012_pitching.cfg" discadj_pitchingNACA0012.test_iter = 4 - discadj_pitchingNACA0012.test_vals = [-1.126077, -1.582787, -0.005904, 0.000009] + discadj_pitchingNACA0012.test_vals = [-1.040215, -1.508864, -0.006076, 0.000012] discadj_pitchingNACA0012.tol = 0.01 discadj_pitchingNACA0012.unsteady = True test_list.append(discadj_pitchingNACA0012) @@ -231,7 +231,7 @@ def main(): discadj_trans_stator.cfg_dir = "disc_adj_turbomachinery/transonic_stator_2D" discadj_trans_stator.cfg_file = "transonic_stator.cfg" discadj_trans_stator.test_iter = 79 - discadj_trans_stator.test_vals = [79.000000, 2.599442, 2.336454, 2.140576, 0.786869] + discadj_trans_stator.test_vals = [79.000000, 2.555965, 2.327109, 2.115689, 0.745501] discadj_trans_stator.test_vals_aarch64 = [79.000000, 0.696755, 0.485950, 0.569475, -0.990065] test_list.append(discadj_trans_stator) diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index 696f6078c38..5d4e8e3e99e 100644 --- a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref +++ b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref @@ -1,200 +1,200 @@ -199, -0.97, -0.00, 0.00 +199, -0.96, -0.00, 0.00 0, -2.88, 19.83, 0.00 -1, -4.23, 29.14, 0.00 -2, -5.32, 36.73, 0.00 -3, -6.40, 44.31, 0.00 -4, -7.29, 50.60, 0.00 -5, -8.10, 56.42, 0.00 -6, -8.75, 61.21, 0.00 -7, -9.32, 65.49, 0.00 -8, -9.74, 68.79, 0.00 -9, -10.10, 71.74, 0.00 -10, -10.31, 73.69, 0.00 -11, -10.46, 75.35, 0.00 -12, -10.47, 76.00, 0.00 -13, -10.44, 76.40, 0.00 -14, -10.26, 75.71, 0.00 -15, -10.11, 75.29, 0.00 -16, -9.80, 73.70, 0.00 -17, -9.64, 73.29, 0.00 -18, -9.24, 70.95, 0.00 -19, -8.85, 68.73, 0.00 -20, -8.25, 64.81, 0.00 -21, -7.82, 62.19, 0.00 -22, -7.14, 57.56, 0.00 -23, -6.71, 54.74, 0.00 -24, -5.95, 49.24, 0.00 -25, -5.71, 47.88, 0.00 -26, -4.78, 40.72, 0.00 -27, -4.44, 38.38, 0.00 -28, -3.40, 29.82, 0.00 -29, -2.77, 24.72, 0.00 -30, -1.56, 14.15, 0.00 -31, -0.95, 8.74, 0.00 -32, 0.27, -2.57, 0.00 -33, 1.50, -14.37, 0.00 -34, 2.95, -28.80, 0.00 -35, 4.95, -49.22, 0.00 -36, 6.34, -64.46, 0.00 -37, 8.93, -92.82, 0.00 -38, 10.11, -107.58, 0.00 -39, 12.72, -138.81, 0.00 -40, 13.61, -152.47, 0.00 -41, 17.42, -200.74, 0.00 -42, 18.00, -213.73, 0.00 -43, 20.51, -251.51, 0.00 -44, 20.54, -260.85, 0.00 -45, 22.50, -296.71, 0.00 -46, 22.34, -306.87, 0.00 -47, 23.59, -338.75, 0.00 -48, 23.03, -347.38, 0.00 -49, 23.93, -380.83, 0.00 -50, 22.45, -379.32, 0.00 -51, 20.75, -374.79, 0.00 -52, 18.42, -358.59, 0.00 -53, 15.34, -325.29, 0.00 -54, 13.36, -312.48, 0.00 -55, 10.43, -273.29, 0.00 -56, 9.04, -271.47, 0.00 -57, 6.53, -231.40, 0.00 -58, 6.09, -266.47, 0.00 -59, 5.99, -346.96, 0.00 -60, 4.63, -406.68, 0.00 -61, 2.25, -429.96, 0.00 -62, -0.52, -423.85, 0.00 -63, -3.28, -409.29, 0.00 -64, -6.04, -398.86, 0.00 -65, -8.60, -380.50, 0.00 -66, -11.15, -366.37, 0.00 -67, -13.55, -350.18, 0.00 -68, -15.78, -333.45, 0.00 -69, -17.95, -317.94, 0.00 -70, -19.76, -299.23, 0.00 -71, -21.49, -282.21, 0.00 -72, -22.61, -260.41, 0.00 -73, -24.40, -248.66, 0.00 -74, -25.13, -228.22, 0.00 -75, -25.20, -205.09, 0.00 -76, -24.79, -181.60, 0.00 -77, -24.32, -160.97, 0.00 -78, -23.96, -143.67, 0.00 -79, -21.95, -119.46, 0.00 -80, -20.65, -102.16, 0.00 -81, -20.28, -91.26, 0.00 -82, -19.07, -78.04, 0.00 -83, -17.20, -63.96, 0.00 -84, -13.15, -44.35, 0.00 -85, -6.18, -18.88, 0.00 -86, 1.48, 4.08, 0.00 -87, 4.97, 12.30, 0.00 -88, 13.95, 30.78, 0.00 -89, 13.05, 25.52, 0.00 -90, 39.01, 66.93, 0.00 -91, 34.95, 51.96, 0.00 -92, 10.01, 12.67, 0.00 -93, 12.23, 12.90, 0.00 -94, 14.63, 12.43, 0.00 -95, 3.85, 2.51, 0.00 -96, -58.89, -26.99, 0.00 -97, -58.75, -15.90, 0.00 -98, -114.76, -15.40, 0.00 -99, 44.44, -0.00, 0.00 -100, -6.17, 0.83, 0.00 -101, 92.06, -24.91, 0.00 -102, 144.41, -66.19, 0.00 -103, 183.90, -119.78, 0.00 -104, 81.69, -69.39, 0.00 -105, 58.16, -61.33, 0.00 -106, 54.39, -68.88, 0.00 -107, 20.73, -30.81, 0.00 -108, 15.21, -26.10, 0.00 -109, -5.66, 11.08, 0.00 -110, -10.96, 24.19, 0.00 -111, -22.60, 55.88, 0.00 -112, -24.49, 67.42, 0.00 -113, -35.46, 108.24, 0.00 -114, -39.42, 132.94, 0.00 -115, -44.81, 166.57, 0.00 -116, -45.54, 186.33, 0.00 -117, -47.93, 215.64, 0.00 -118, -48.48, 239.82, 0.00 -119, -49.35, 268.61, 0.00 -120, -49.01, 293.88, 0.00 -121, -48.31, 319.72, 0.00 -122, -46.79, 342.80, 0.00 -123, -45.53, 370.47, 0.00 -124, -43.31, 393.24, 0.00 -125, -41.11, 418.88, 0.00 -126, -38.44, 442.69, 0.00 -127, -35.61, 467.64, 0.00 -128, -32.31, 489.28, 0.00 -129, -28.84, 510.98, 0.00 -130, -25.18, 532.04, 0.00 -131, -21.39, 553.10, 0.00 -132, -17.41, 571.76, 0.00 -133, -13.39, 592.26, 0.00 -134, -9.24, 610.35, 0.00 -135, -5.05, 629.44, 0.00 -136, -0.80, 646.65, 0.00 -137, 3.47, 663.79, 0.00 -138, 7.73, 678.32, 0.00 -139, 11.97, 693.15, 0.00 -140, 16.16, 706.43, 0.00 -141, 20.25, 717.98, 0.00 -142, 24.27, 728.83, 0.00 -143, 28.17, 738.33, 0.00 -144, 31.95, 747.06, 0.00 -145, 35.57, 754.00, 0.00 -146, 39.07, 760.46, 0.00 -147, 42.33, 764.49, 0.00 -148, 45.53, 769.28, 0.00 -149, 48.66, 774.52, 0.00 -150, 51.68, 779.40, 0.00 -151, 55.24, 793.46, 0.00 -152, 57.48, 789.62, 0.00 -153, 55.23, 728.32, 0.00 -154, 58.05, 737.21, 0.00 -155, 70.62, 866.19, 0.00 -156, 62.28, 739.59, 0.00 -157, 53.43, 615.64, 0.00 -158, 50.31, 563.60, 0.00 -159, 35.26, 384.74, 0.00 -160, 38.05, 404.94, 0.00 -161, 10.14, 105.39, 0.00 -162, 5.42, 55.09, 0.00 -163, -5.93, -59.00, 0.00 -164, -8.98, -87.52, 0.00 -165, -4.77, -45.59, 0.00 -166, -4.28, -40.14, 0.00 -167, -4.62, -42.60, 0.00 -168, -5.24, -47.52, 0.00 -169, -5.86, -52.28, 0.00 -170, -6.59, -57.83, 0.00 -171, -6.84, -59.11, 0.00 -172, -7.47, -63.60, 0.00 -173, -7.82, -65.59, 0.00 -174, -8.57, -70.89, 0.00 -175, -9.11, -74.38, 0.00 -176, -9.74, -78.44, 0.00 -177, -9.79, -77.88, 0.00 -178, -10.24, -80.44, 0.00 -179, -10.40, -80.83, 0.00 -180, -10.78, -82.78, 0.00 -181, -10.97, -83.35, 0.00 -182, -11.18, -84.12, 0.00 -183, -11.31, -84.24, 0.00 -184, -11.41, -84.21, 0.00 -185, -11.47, -83.91, 0.00 -186, -11.29, -81.91, 0.00 -187, -11.22, -80.81, 0.00 -188, -11.03, -78.90, 0.00 -189, -10.50, -74.56, 0.00 -190, -10.05, -70.94, 0.00 -191, -9.49, -66.66, 0.00 -192, -8.86, -61.95, 0.00 -193, -8.10, -56.41, 0.00 -194, -7.28, -50.51, 0.00 -195, -6.28, -43.47, 0.00 -196, -5.22, -36.04, 0.00 -197, -3.99, -27.53, 0.00 -198, -2.69, -18.50, 0.00 +1, -4.18, 28.79, 0.00 +2, -5.26, 36.27, 0.00 +3, -6.22, 43.06, 0.00 +4, -7.06, 48.99, 0.00 +5, -7.74, 53.91, 0.00 +6, -8.33, 58.23, 0.00 +7, -8.78, 61.68, 0.00 +8, -9.13, 64.48, 0.00 +9, -9.36, 66.46, 0.00 +10, -9.49, 67.87, 0.00 +11, -9.52, 68.60, 0.00 +12, -9.47, 68.72, 0.00 +13, -9.30, 68.08, 0.00 +14, -9.07, 66.93, 0.00 +15, -8.74, 65.11, 0.00 +16, -8.36, 62.92, 0.00 +17, -7.90, 60.05, 0.00 +18, -7.40, 56.86, 0.00 +19, -6.82, 53.00, 0.00 +20, -6.21, 48.82, 0.00 +21, -5.55, 44.16, 0.00 +22, -4.86, 39.18, 0.00 +23, -4.12, 33.67, 0.00 +24, -3.37, 27.85, 0.00 +25, -2.57, 21.54, 0.00 +26, -1.75, 14.91, 0.00 +27, -0.89, 7.67, 0.00 +28, -0.03, 0.29, 0.00 +29, 0.85, -7.59, 0.00 +30, 1.69, -15.34, 0.00 +31, 2.54, -23.41, 0.00 +32, 3.37, -31.59, 0.00 +33, 4.19, -40.08, 0.00 +34, 5.02, -48.92, 0.00 +35, 5.83, -57.97, 0.00 +36, 6.62, -67.30, 0.00 +37, 7.38, -76.73, 0.00 +38, 8.13, -86.51, 0.00 +39, 8.83, -96.39, 0.00 +40, 9.51, -106.58, 0.00 +41, 10.14, -116.85, 0.00 +42, 10.76, -127.75, 0.00 +43, 11.32, -138.90, 0.00 +44, 11.81, -149.97, 0.00 +45, 12.22, -161.13, 0.00 +46, 12.50, -171.78, 0.00 +47, 12.68, -182.09, 0.00 +48, 12.78, -192.81, 0.00 +49, 12.76, -203.07, 0.00 +50, 12.57, -212.38, 0.00 +51, 12.05, -217.67, 0.00 +52, 11.60, -225.88, 0.00 +53, 11.01, -233.43, 0.00 +54, 10.51, -245.81, 0.00 +55, 9.41, -246.68, 0.00 +56, 7.63, -229.29, 0.00 +57, 6.26, -221.94, 0.00 +58, 6.99, -305.64, 0.00 +59, 6.92, -400.58, 0.00 +60, 4.75, -416.91, 0.00 +61, 2.15, -411.19, 0.00 +62, -0.50, -401.81, 0.00 +63, -3.15, -392.75, 0.00 +64, -5.77, -381.55, 0.00 +65, -8.34, -369.11, 0.00 +66, -10.81, -355.18, 0.00 +67, -13.15, -340.07, 0.00 +68, -15.34, -324.16, 0.00 +69, -17.37, -307.70, 0.00 +70, -19.20, -290.73, 0.00 +71, -20.74, -272.38, 0.00 +72, -22.00, -253.37, 0.00 +73, -22.70, -231.35, 0.00 +74, -23.29, -211.45, 0.00 +75, -23.37, -190.20, 0.00 +76, -23.19, -169.88, 0.00 +77, -22.18, -146.81, 0.00 +78, -20.95, -125.64, 0.00 +79, -19.03, -103.59, 0.00 +80, -16.76, -82.89, 0.00 +81, -13.60, -61.19, 0.00 +82, -9.50, -38.86, 0.00 +83, -4.20, -15.60, 0.00 +84, 2.57, 8.67, 0.00 +85, 10.17, 31.06, 0.00 +86, 18.87, 51.96, 0.00 +87, 28.98, 71.65, 0.00 +88, 41.74, 92.13, 0.00 +89, 54.07, 105.75, 0.00 +90, 70.75, 121.39, 0.00 +91, 96.09, 142.85, 0.00 +92, 93.51, 118.43, 0.00 +93, 120.64, 127.20, 0.00 +94, 136.03, 115.56, 0.00 +95, 169.16, 110.18, 0.00 +96, 186.54, 85.50, 0.00 +97, 143.56, 38.86, 0.00 +98, 66.96, 8.98, 0.00 +99, 44.43, -0.00, 0.00 +100, 87.14, -11.69, 0.00 +101, 145.23, -39.31, 0.00 +102, 142.83, -65.47, 0.00 +103, 105.19, -68.51, 0.00 +104, 88.44, -75.13, 0.00 +105, 63.28, -66.72, 0.00 +106, 48.19, -61.02, 0.00 +107, 25.79, -38.34, 0.00 +108, 13.76, -23.61, 0.00 +109, -0.24, 0.48, 0.00 +110, -9.29, 20.51, 0.00 +111, -20.12, 49.76, 0.00 +112, -27.25, 75.02, 0.00 +113, -34.63, 105.71, 0.00 +114, -39.49, 133.20, 0.00 +115, -42.08, 156.42, 0.00 +116, -43.53, 178.10, 0.00 +117, -45.53, 204.86, 0.00 +118, -46.18, 228.44, 0.00 +119, -46.94, 255.49, 0.00 +120, -46.62, 279.57, 0.00 +121, -46.43, 307.28, 0.00 +122, -45.37, 332.37, 0.00 +123, -44.27, 360.19, 0.00 +124, -42.30, 384.11, 0.00 +125, -40.27, 410.38, 0.00 +126, -37.67, 433.86, 0.00 +127, -34.88, 458.06, 0.00 +128, -31.68, 479.72, 0.00 +129, -28.36, 502.38, 0.00 +130, -24.77, 523.30, 0.00 +131, -21.07, 544.83, 0.00 +132, -17.18, 564.29, 0.00 +133, -13.22, 584.83, 0.00 +134, -9.13, 602.95, 0.00 +135, -4.98, 621.40, 0.00 +136, -0.79, 638.19, 0.00 +137, 3.43, 654.80, 0.00 +138, 7.63, 669.17, 0.00 +139, 11.81, 684.02, 0.00 +140, 15.94, 697.09, 0.00 +141, 20.00, 708.97, 0.00 +142, 23.96, 719.61, 0.00 +143, 27.84, 729.78, 0.00 +144, 31.59, 738.57, 0.00 +145, 35.21, 746.32, 0.00 +146, 38.69, 753.11, 0.00 +147, 42.03, 758.96, 0.00 +148, 45.19, 763.53, 0.00 +149, 48.25, 767.89, 0.00 +150, 51.12, 770.97, 0.00 +151, 53.90, 774.14, 0.00 +152, 56.45, 775.45, 0.00 +153, 58.60, 772.82, 0.00 +154, 60.49, 768.26, 0.00 +155, 61.32, 752.19, 0.00 +156, 66.19, 786.01, 0.00 +157, 51.41, 592.36, 0.00 +158, 2.74, 30.66, 0.00 +159, -1.91, -20.81, 0.00 +160, -1.38, -14.70, 0.00 +161, -2.29, -23.78, 0.00 +162, -2.80, -28.43, 0.00 +163, -2.29, -22.77, 0.00 +164, -2.55, -24.89, 0.00 +165, -2.37, -22.65, 0.00 +166, -2.68, -25.18, 0.00 +167, -2.76, -25.43, 0.00 +168, -3.15, -28.54, 0.00 +169, -3.54, -31.56, 0.00 +170, -4.04, -35.47, 0.00 +171, -4.42, -38.18, 0.00 +172, -4.93, -41.95, 0.00 +173, -5.44, -45.65, 0.00 +174, -6.02, -49.76, 0.00 +175, -6.54, -53.35, 0.00 +176, -7.07, -56.96, 0.00 +177, -7.54, -59.96, 0.00 +178, -8.01, -62.95, 0.00 +179, -8.43, -65.45, 0.00 +180, -8.82, -67.79, 0.00 +181, -9.18, -69.80, 0.00 +182, -9.48, -71.32, 0.00 +183, -9.72, -72.39, 0.00 +184, -9.90, -73.09, 0.00 +185, -10.04, -73.44, 0.00 +186, -10.00, -72.60, 0.00 +187, -10.00, -71.99, 0.00 +188, -9.88, -70.65, 0.00 +189, -9.65, -68.59, 0.00 +190, -9.33, -65.89, 0.00 +191, -8.91, -62.56, 0.00 +192, -8.37, -58.52, 0.00 +193, -7.74, -53.89, 0.00 +194, -7.00, -48.56, 0.00 +195, -6.14, -42.46, 0.00 +196, -5.13, -35.44, 0.00 +197, -4.03, -27.78, 0.00 +198, -2.72, -18.69, 0.00 diff --git a/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg b/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg index 053828f96eb..31d50306867 100644 --- a/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg +++ b/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg @@ -50,7 +50,7 @@ VENKAT_LIMITER_COEFF= 0.1 % SOLUTION ACCELERATION % -CFL_NUMBER= 50 +CFL_NUMBER= 10 CFL_ADAPT= NO % MGLEVEL= 3 diff --git a/TestCases/py_wrapper/updated_moving_frame_NACA12/forces_0.csv.ref b/TestCases/py_wrapper/updated_moving_frame_NACA12/forces_0.csv.ref index 46d649f5175..e47d7e1ff73 100644 --- a/TestCases/py_wrapper/updated_moving_frame_NACA12/forces_0.csv.ref +++ b/TestCases/py_wrapper/updated_moving_frame_NACA12/forces_0.csv.ref @@ -1,200 +1,200 @@ 199, -0.97, -0.00, 0.00 -0, -2.85, 19.62, 0.00 -1, -4.08, 28.11, 0.00 -2, -5.17, 35.71, 0.00 -3, -6.11, 42.24, 0.00 -4, -6.94, 48.17, 0.00 -5, -7.57, 52.73, 0.00 -6, -8.15, 56.97, 0.00 -7, -8.53, 59.95, 0.00 -8, -8.87, 62.63, 0.00 -9, -8.99, 63.89, 0.00 -10, -9.11, 65.14, 0.00 -11, -9.01, 64.90, 0.00 -12, -8.93, 64.84, 0.00 -13, -8.60, 62.93, 0.00 -14, -8.34, 61.54, 0.00 -15, -7.81, 58.21, 0.00 -16, -7.40, 55.70, 0.00 -17, -6.70, 50.94, 0.00 -18, -6.14, 47.20, 0.00 -19, -5.32, 41.30, 0.00 -20, -4.67, 36.73, 0.00 -21, -3.69, 29.39, 0.00 -22, -2.98, 24.01, 0.00 -23, -1.95, 15.91, 0.00 -24, -1.21, 9.98, 0.00 -25, -0.16, 1.35, 0.00 -26, 0.63, -5.38, 0.00 -27, 1.68, -14.54, 0.00 -28, 2.49, -21.87, 0.00 -29, 3.57, -31.82, 0.00 -30, 4.36, -39.47, 0.00 -31, 5.42, -49.99, 0.00 -32, 6.16, -57.79, 0.00 -33, 7.10, -67.94, 0.00 -34, 7.75, -75.60, 0.00 -35, 8.60, -85.55, 0.00 -36, 9.16, -93.11, 0.00 -37, 9.88, -102.70, 0.00 -38, 10.30, -109.57, 0.00 -39, 10.67, -116.45, 0.00 -40, 10.97, -122.94, 0.00 -41, 10.85, -125.01, 0.00 -42, 10.97, -130.23, 0.00 -43, 10.59, -129.89, 0.00 -44, 10.72, -136.19, 0.00 -45, 10.25, -135.16, 0.00 -46, 10.25, -140.77, 0.00 -47, 9.09, -130.53, 0.00 -48, 8.67, -130.76, 0.00 -49, 6.09, -96.90, 0.00 -50, 5.92, -100.03, 0.00 -51, 5.90, -106.60, 0.00 -52, 6.79, -132.22, 0.00 -53, 20.46, -433.78, 0.00 -54, 27.67, -647.05, 0.00 -55, 21.99, -576.50, 0.00 -56, 18.31, -549.97, 0.00 -57, 15.75, -558.27, 0.00 -58, 12.65, -553.28, 0.00 -59, 9.40, -544.31, 0.00 -60, 6.08, -533.83, 0.00 -61, 2.74, -524.40, 0.00 -62, -0.63, -511.87, 0.00 -63, -4.01, -500.50, 0.00 -64, -7.36, -486.02, 0.00 -65, -10.72, -474.33, 0.00 -66, -13.96, -458.63, 0.00 -67, -17.17, -443.82, 0.00 -68, -20.18, -426.27, 0.00 -69, -23.14, -410.05, 0.00 -70, -25.82, -391.06, 0.00 -71, -28.45, -373.57, 0.00 -72, -30.70, -353.59, 0.00 -73, -33.29, -339.20, 0.00 -74, -35.07, -318.40, 0.00 -75, -36.82, -299.64, 0.00 -76, -37.96, -278.06, 0.00 -77, -39.56, -261.85, 0.00 -78, -40.14, -240.69, 0.00 -79, -41.29, -224.76, 0.00 -80, -41.06, -203.15, 0.00 -81, -42.40, -190.79, 0.00 -82, -41.79, -171.00, 0.00 -83, -42.95, -159.67, 0.00 -84, -42.40, -142.99, 0.00 -85, -45.26, -138.16, 0.00 -86, -45.31, -124.76, 0.00 -87, -48.24, -119.27, 0.00 -88, -50.85, -112.24, 0.00 -89, -59.21, -115.79, 0.00 -90, -58.88, -101.02, 0.00 -91, -81.20, -120.72, 0.00 -92, -82.96, -105.06, 0.00 -93, -107.96, -113.84, 0.00 -94, -139.30, -118.34, 0.00 -95, -41.52, -27.05, 0.00 -96, -37.01, -16.96, 0.00 -97, 39.35, 10.65, 0.00 -98, 37.44, 5.02, 0.00 -99, -65.44, 0.00, 0.00 -100, -86.45, 11.60, 0.00 -101, -161.88, 43.81, 0.00 -102, -143.44, 65.75, 0.00 -103, -113.80, 74.12, 0.00 -104, -114.52, 97.29, 0.00 -105, -107.02, 112.85, 0.00 -106, -135.53, 171.63, 0.00 -107, -84.72, 125.94, 0.00 -108, -68.44, 117.42, 0.00 -109, -43.03, 84.15, 0.00 -110, -50.65, 111.79, 0.00 -111, -47.20, 116.70, 0.00 -112, -49.20, 135.47, 0.00 -113, -45.81, 139.84, 0.00 -114, -49.98, 168.57, 0.00 -115, -49.99, 185.86, 0.00 -116, -51.63, 211.24, 0.00 -117, -50.46, 227.04, 0.00 -118, -51.05, 252.53, 0.00 -119, -49.65, 270.24, 0.00 -120, -49.56, 297.19, 0.00 -121, -47.48, 314.21, 0.00 -122, -46.22, 338.56, 0.00 -123, -44.23, 359.88, 0.00 -124, -42.11, 382.33, 0.00 -125, -39.68, 404.32, 0.00 -126, -37.10, 427.26, 0.00 -127, -34.16, 448.55, 0.00 -128, -31.03, 469.99, 0.00 -129, -27.69, 490.62, 0.00 -130, -24.20, 511.21, 0.00 -131, -20.49, 529.60, 0.00 -132, -16.71, 548.88, 0.00 -133, -12.79, 565.66, 0.00 -134, -8.83, 583.11, 0.00 -135, -4.79, 598.02, 0.00 -136, -0.76, 614.45, 0.00 -137, 3.29, 627.98, 0.00 -138, 7.32, 642.04, 0.00 -139, 11.29, 653.62, 0.00 -140, 15.24, 666.44, 0.00 -141, 19.08, 676.34, 0.00 -142, 22.88, 687.03, 0.00 -143, 26.54, 695.78, 0.00 -144, 30.12, 704.26, 0.00 -145, 33.47, 709.58, 0.00 -146, 36.77, 715.69, 0.00 -147, 39.75, 717.81, 0.00 -148, 42.73, 721.93, 0.00 -149, 45.49, 724.01, 0.00 -150, 48.31, 728.62, 0.00 -151, 51.12, 734.17, 0.00 -152, 55.50, 762.40, 0.00 -153, 39.08, 515.34, 0.00 -154, -2.39, -30.35, 0.00 -155, -1.02, -12.47, 0.00 -156, 3.53, 41.96, 0.00 -157, 4.67, 53.82, 0.00 -158, 4.83, 54.15, 0.00 -159, 5.42, 59.10, 0.00 -160, 5.72, 60.85, 0.00 -161, 5.71, 59.30, 0.00 -162, 5.61, 56.99, 0.00 -163, 5.18, 51.51, 0.00 -164, 4.87, 47.48, 0.00 -165, 4.24, 40.54, 0.00 -166, 3.76, 35.32, 0.00 -167, 3.00, 27.68, 0.00 -168, 2.43, 22.03, 0.00 -169, 1.62, 14.42, 0.00 -170, 0.98, 8.57, 0.00 -171, -0.06, -0.53, 0.00 -172, -0.78, -6.63, 0.00 -173, -1.76, -14.77, 0.00 -174, -2.46, -20.33, 0.00 -175, -3.34, -27.23, 0.00 -176, -4.02, -32.36, 0.00 -177, -4.96, -39.42, 0.00 -178, -5.61, -44.10, 0.00 -179, -6.39, -49.60, 0.00 -180, -6.94, -53.34, 0.00 -181, -7.60, -57.73, 0.00 -182, -8.02, -60.36, 0.00 -183, -8.51, -63.36, 0.00 -184, -8.81, -65.00, 0.00 -185, -9.15, -66.98, 0.00 -186, -9.27, -67.25, 0.00 -187, -9.42, -67.84, 0.00 -188, -9.34, -66.82, 0.00 -189, -9.25, -65.70, 0.00 -190, -8.98, -63.45, 0.00 -191, -8.67, -60.90, 0.00 -192, -8.19, -57.26, 0.00 -193, -7.63, -53.13, 0.00 -194, -6.92, -48.04, 0.00 -195, -6.09, -42.15, 0.00 -196, -5.12, -35.34, 0.00 -197, -4.03, -27.79, 0.00 -198, -2.78, -19.17, 0.00 +0, -2.88, 19.85, 0.00 +1, -4.05, 27.93, 0.00 +2, -5.07, 35.03, 0.00 +3, -5.96, 41.24, 0.00 +4, -6.74, 46.78, 0.00 +5, -7.39, 51.48, 0.00 +6, -7.92, 55.40, 0.00 +7, -8.36, 58.76, 0.00 +8, -8.64, 61.03, 0.00 +9, -8.84, 62.79, 0.00 +10, -8.89, 63.57, 0.00 +11, -8.86, 63.80, 0.00 +12, -8.73, 63.35, 0.00 +13, -8.52, 62.33, 0.00 +14, -8.24, 60.81, 0.00 +15, -7.91, 58.90, 0.00 +16, -7.49, 56.33, 0.00 +17, -7.04, 53.47, 0.00 +18, -6.48, 49.79, 0.00 +19, -5.90, 45.83, 0.00 +20, -5.25, 41.27, 0.00 +21, -4.60, 36.56, 0.00 +22, -3.89, 31.30, 0.00 +23, -3.18, 25.96, 0.00 +24, -2.42, 19.98, 0.00 +25, -1.68, 14.07, 0.00 +26, -0.87, 7.38, 0.00 +27, -0.09, 0.81, 0.00 +28, 0.74, -6.50, 0.00 +29, 1.54, -13.72, 0.00 +30, 2.37, -21.44, 0.00 +31, 3.13, -28.87, 0.00 +32, 3.94, -37.02, 0.00 +33, 4.69, -44.82, 0.00 +34, 5.49, -53.48, 0.00 +35, 6.20, -61.69, 0.00 +36, 6.97, -70.86, 0.00 +37, 7.67, -79.73, 0.00 +38, 8.38, -89.17, 0.00 +39, 9.03, -98.47, 0.00 +40, 9.61, -107.66, 0.00 +41, 10.12, -116.57, 0.00 +42, 10.52, -124.95, 0.00 +43, 10.83, -132.84, 0.00 +44, 11.03, -140.07, 0.00 +45, 11.07, -146.01, 0.00 +46, 10.87, -149.29, 0.00 +47, 10.24, -147.08, 0.00 +48, 9.85, -148.58, 0.00 +49, 9.23, -146.95, 0.00 +50, 8.03, -135.66, 0.00 +51, 5.02, -90.65, 0.00 +52, 8.44, -164.34, 0.00 +53, 24.61, -521.74, 0.00 +54, 25.24, -590.05, 0.00 +55, 21.35, -559.54, 0.00 +56, 18.43, -553.39, 0.00 +57, 15.47, -548.45, 0.00 +58, 12.34, -539.47, 0.00 +59, 9.16, -530.51, 0.00 +60, 5.93, -520.02, 0.00 +61, 2.66, -509.08, 0.00 +62, -0.61, -496.20, 0.00 +63, -3.87, -482.86, 0.00 +64, -7.09, -468.17, 0.00 +65, -10.23, -452.82, 0.00 +66, -13.28, -436.19, 0.00 +67, -16.22, -419.41, 0.00 +68, -19.00, -401.35, 0.00 +69, -21.63, -383.22, 0.00 +70, -24.05, -364.23, 0.00 +71, -26.30, -345.36, 0.00 +72, -28.26, -325.47, 0.00 +73, -30.06, -306.30, 0.00 +74, -31.47, -285.73, 0.00 +75, -32.68, -265.95, 0.00 +76, -33.54, -245.70, 0.00 +77, -34.32, -227.17, 0.00 +78, -34.48, -206.77, 0.00 +79, -34.55, -188.05, 0.00 +80, -33.88, -167.61, 0.00 +81, -33.34, -150.01, 0.00 +82, -31.79, -130.08, 0.00 +83, -30.47, -113.26, 0.00 +84, -27.83, -93.86, 0.00 +85, -26.36, -80.46, 0.00 +86, -22.80, -62.77, 0.00 +87, -20.38, -50.40, 0.00 +88, -16.48, -36.38, 0.00 +89, -13.50, -26.40, 0.00 +90, -8.89, -15.26, 0.00 +91, 2.07, 3.08, 0.00 +92, 9.08, 11.50, 0.00 +93, 13.77, 14.52, 0.00 +94, 20.38, 17.31, 0.00 +95, 38.32, 24.96, 0.00 +96, 51.52, 23.61, 0.00 +97, -11.06, -2.99, 0.00 +98, 9.27, 1.24, 0.00 +99, 56.99, -0.00, 0.00 +100, 121.78, -16.34, 0.00 +101, 216.03, -58.47, 0.00 +102, 204.05, -93.53, 0.00 +103, 153.71, -100.12, 0.00 +104, 131.85, -112.01, 0.00 +105, 83.63, -88.18, 0.00 +106, 65.02, -82.34, 0.00 +107, 36.90, -54.86, 0.00 +108, 24.12, -41.38, 0.00 +109, 3.60, -7.04, 0.00 +110, -5.15, 11.37, 0.00 +111, -17.47, 43.19, 0.00 +112, -23.69, 65.22, 0.00 +113, -32.00, 97.66, 0.00 +114, -36.22, 122.16, 0.00 +115, -40.69, 151.27, 0.00 +116, -42.86, 175.35, 0.00 +117, -45.56, 205.00, 0.00 +118, -46.38, 229.45, 0.00 +119, -47.11, 256.41, 0.00 +120, -46.83, 280.77, 0.00 +121, -46.29, 306.36, 0.00 +122, -45.08, 330.26, 0.00 +123, -43.57, 354.56, 0.00 +124, -41.55, 377.28, 0.00 +125, -39.29, 400.30, 0.00 +126, -36.74, 423.08, 0.00 +127, -33.87, 444.73, 0.00 +128, -30.79, 466.24, 0.00 +129, -27.45, 486.37, 0.00 +130, -23.98, 506.62, 0.00 +131, -20.34, 525.93, 0.00 +132, -16.59, 545.08, 0.00 +133, -12.73, 563.34, 0.00 +134, -8.79, 580.87, 0.00 +135, -4.79, 597.60, 0.00 +136, -0.76, 613.87, 0.00 +137, 3.29, 629.26, 0.00 +138, 7.33, 643.22, 0.00 +139, 11.34, 656.71, 0.00 +140, 15.31, 669.24, 0.00 +141, 19.20, 680.50, 0.00 +142, 23.00, 690.79, 0.00 +143, 26.72, 700.41, 0.00 +144, 30.30, 708.54, 0.00 +145, 33.76, 715.60, 0.00 +146, 37.07, 721.53, 0.00 +147, 40.24, 726.68, 0.00 +148, 43.22, 730.29, 0.00 +149, 46.10, 733.75, 0.00 +150, 48.72, 734.79, 0.00 +151, 51.06, 733.35, 0.00 +152, 54.83, 753.18, 0.00 +153, 51.89, 684.30, 0.00 +154, 8.03, 102.02, 0.00 +155, -1.05, -12.88, 0.00 +156, 3.20, 38.01, 0.00 +157, 3.99, 45.94, 0.00 +158, 4.27, 47.80, 0.00 +159, 4.38, 47.80, 0.00 +160, 4.41, 46.91, 0.00 +161, 4.21, 43.76, 0.00 +162, 3.97, 40.34, 0.00 +163, 3.55, 35.36, 0.00 +164, 3.12, 30.39, 0.00 +165, 2.57, 24.58, 0.00 +166, 2.00, 18.81, 0.00 +167, 1.36, 12.58, 0.00 +168, 0.72, 6.55, 0.00 +169, 0.01, 0.07, 0.00 +170, -0.70, -6.10, 0.00 +171, -1.46, -12.60, 0.00 +172, -2.18, -18.54, 0.00 +173, -2.95, -24.73, 0.00 +174, -3.66, -30.30, 0.00 +175, -4.40, -35.94, 0.00 +176, -5.09, -40.98, 0.00 +177, -5.78, -45.96, 0.00 +178, -6.39, -50.22, 0.00 +179, -7.01, -54.42, 0.00 +180, -7.54, -57.90, 0.00 +181, -8.04, -61.14, 0.00 +182, -8.47, -63.70, 0.00 +183, -8.82, -65.68, 0.00 +184, -9.10, -67.17, 0.00 +185, -9.28, -67.93, 0.00 +186, -9.39, -68.16, 0.00 +187, -9.41, -67.78, 0.00 +188, -9.32, -66.65, 0.00 +189, -9.21, -65.43, 0.00 +190, -8.95, -63.24, 0.00 +191, -8.66, -60.83, 0.00 +192, -8.20, -57.34, 0.00 +193, -7.65, -53.27, 0.00 +194, -6.97, -48.35, 0.00 +195, -6.12, -42.37, 0.00 +196, -5.16, -35.65, 0.00 +197, -4.06, -27.97, 0.00 +198, -2.82, -19.43, 0.00 diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 017aaca5bf0..d9968f91b91 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -93,7 +93,7 @@ def main(): channel.cfg_dir = "euler/channel" channel.cfg_file = "inv_channel_RK.cfg" channel.test_iter = 10 - channel.test_vals = [-2.215160, 3.327978, 0.064048, 0.163516] + channel.test_vals = [-1.969337, 3.565024, 0.000246, 0.160624] test_list.append(channel) # NACA0012 @@ -101,7 +101,7 @@ def main(): naca0012.cfg_dir = "euler/naca0012" naca0012.cfg_file = "inv_NACA0012_Roe.cfg" naca0012.test_iter = 20 - naca0012.test_vals = [-4.256408, -3.795038, 0.306510, 0.024657] + naca0012.test_vals = [-4.507695, -3.938772, 0.297705, 0.025422] test_list.append(naca0012) # Supersonic wedge @@ -109,7 +109,7 @@ def main(): wedge.cfg_dir = "euler/wedge" wedge.cfg_file = "inv_wedge_HLLC.cfg" wedge.test_iter = 20 - wedge.test_vals = [-3.609826, 2.113544, -0.249533, 0.043953] + wedge.test_vals = [-3.703839, 2.020469, -0.249531, 0.043953] test_list.append(wedge) # ONERA M6 Wing @@ -117,7 +117,7 @@ def main(): oneram6.cfg_dir = "euler/oneram6" oneram6.cfg_file = "inv_ONERAM6.cfg" oneram6.test_iter = 10 - oneram6.test_vals = [-11.512881, -10.980703, 0.280800, 0.008623] + oneram6.test_vals = [-11.513859, -10.984761, 0.280800, 0.008623] oneram6.timeout = 9600 test_list.append(oneram6) @@ -126,7 +126,7 @@ def main(): fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012" fixedCL_naca0012.cfg_file = "inv_NACA0012.cfg" fixedCL_naca0012.test_iter = 10 - fixedCL_naca0012.test_vals = [-3.920501, 1.594999, 0.300907, 0.019465] + fixedCL_naca0012.test_vals = [-3.962510, 1.570618, 0.301016, 0.019477] test_list.append(fixedCL_naca0012) # Polar sweep of the inviscid NACA0012 @@ -135,7 +135,7 @@ def main(): polar_naca0012.cfg_file = "inv_NACA0012.cfg" polar_naca0012.polar = True polar_naca0012.test_iter = 10 - polar_naca0012.test_vals = [-1.196985, 4.245790, 0.010492, 0.070124] + polar_naca0012.test_vals = [-1.278858, 4.165254, 0.004410, 0.083785] polar_naca0012.test_vals_aarch64 = [-1.063447, 4.401847, 0.000291, 0.031696] polar_naca0012.command = TestCase.Command(exec = "compute_polar.py", param = "-n 1 -i 11") # flaky test on arm64 @@ -166,7 +166,7 @@ def main(): flatplate.cfg_dir = "navierstokes/flatplate" flatplate.cfg_file = "lam_flatplate.cfg" flatplate.test_iter = 20 - flatplate.test_vals = [-5.448267, 0.027571, 0.002633, 0.015619, 2.361200, -2.345600, 0.000000, 0.000000] + flatplate.test_vals = [-5.492595, -0.012547, 0.002524, 0.011875, 2.361500, -2.349600, 0.000000, 0.000000] test_list.append(flatplate) # Laminar cylinder (steady) @@ -174,7 +174,7 @@ def main(): cylinder.cfg_dir = "navierstokes/cylinder" cylinder.cfg_file = "lam_cylinder.cfg" cylinder.test_iter = 25 - cylinder.test_vals = [-8.503813, -3.012051, 0.260768, 1.697376, 0.000000] + cylinder.test_vals = [-8.480930, -3.006218, -0.028387, 1.634020, 0.000000] test_list.append(cylinder) # Laminar cylinder (low Mach correction) @@ -182,7 +182,7 @@ def main(): cylinder_lowmach.cfg_dir = "navierstokes/cylinder" cylinder_lowmach.cfg_file = "cylinder_lowmach.cfg" cylinder_lowmach.test_iter = 25 - cylinder_lowmach.test_vals = [-6.604626, -1.142842, -0.080684, -80.137778, 0.000000] + cylinder_lowmach.test_vals = [-6.447834, -0.986069, 0.825992, 65.209800, 0.000000] test_list.append(cylinder_lowmach) # 2D Poiseuille flow (body force driven with periodic inlet / outlet) @@ -198,7 +198,7 @@ def main(): poiseuille_profile.cfg_dir = "navierstokes/poiseuille" poiseuille_profile.cfg_file = "profile_poiseuille.cfg" poiseuille_profile.test_iter = 10 - poiseuille_profile.test_vals = [-12.004417, -7.544595, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.003743, -7.573505, -0.000000, 2.089953] poiseuille_profile.test_vals_aarch64 = [-12.009012, -7.262299, -0.000000, 2.089953] #last 4 columns test_list.append(poiseuille_profile) @@ -218,7 +218,7 @@ def main(): rae2822_sa.cfg_dir = "rans/rae2822" rae2822_sa.cfg_file = "turb_SA_RAE2822.cfg" rae2822_sa.test_iter = 20 - rae2822_sa.test_vals = [-2.168944, -5.451519, 0.287676, 0.104861, 0.000000] + rae2822_sa.test_vals = [-2.187684, -5.308480, 0.389353, 0.077079, 0.000000] test_list.append(rae2822_sa) # RAE2822 SST @@ -226,7 +226,7 @@ def main(): rae2822_sst.cfg_dir = "rans/rae2822" rae2822_sst.cfg_file = "turb_SST_RAE2822.cfg" rae2822_sst.test_iter = 20 - rae2822_sst.test_vals = [-1.028398, 5.868068, 0.277703, 0.093381, 0.000000] + rae2822_sst.test_vals = [-1.028239, 5.864396, 0.357218, 0.074732, 0.000000] test_list.append(rae2822_sst) # RAE2822 SST_SUST @@ -234,7 +234,7 @@ def main(): rae2822_sst_sust.cfg_dir = "rans/rae2822" rae2822_sst_sust.cfg_file = "turb_SST_SUST_RAE2822.cfg" rae2822_sst_sust.test_iter = 20 - rae2822_sst_sust.test_vals = [-2.536320, 5.868058, 0.277703, 0.093381] + rae2822_sst_sust.test_vals = [-2.487553, 5.864385, 0.357218, 0.074732] test_list.append(rae2822_sst_sust) # Flat plate @@ -242,7 +242,7 @@ def main(): turb_flatplate.cfg_dir = "rans/flatplate" turb_flatplate.cfg_file = "turb_SA_flatplate.cfg" turb_flatplate.test_iter = 20 - turb_flatplate.test_vals = [-4.939159, -7.469363, -0.187651, 0.015894] + turb_flatplate.test_vals = [-4.958238, -7.438031, -0.187473, 0.015059] test_list.append(turb_flatplate) # FLAT PLATE, WALL FUNCTIONS, COMPRESSIBLE SST @@ -359,7 +359,7 @@ def main(): turb_naca0012_sst_restart_mg.cfg_file = "turb_NACA0012_sst_multigrid_restart.cfg" turb_naca0012_sst_restart_mg.test_iter = 50 turb_naca0012_sst_restart_mg.ntest_vals = 5 - turb_naca0012_sst_restart_mg.test_vals = [-6.575448, -5.081421, 0.810883, -0.008836, 0.077960] + turb_naca0012_sst_restart_mg.test_vals = [-6.610290, -5.081422, 0.810881, -0.008844, 0.077940] turb_naca0012_sst_restart_mg.timeout = 3200 turb_naca0012_sst_restart_mg.tol = 0.000001 test_list.append(turb_naca0012_sst_restart_mg) @@ -380,7 +380,7 @@ def main(): inc_euler_naca0012.cfg_dir = "incomp_euler/naca0012" inc_euler_naca0012.cfg_file = "incomp_NACA0012.cfg" inc_euler_naca0012.test_iter = 20 - inc_euler_naca0012.test_vals = [-5.930469, -4.994452, 0.519589, 0.008977] + inc_euler_naca0012.test_vals = [-5.968755, -5.003709, 0.522550, 0.008867] test_list.append(inc_euler_naca0012) # C-D nozzle with pressure inlet and mass flow outlet @@ -388,7 +388,7 @@ def main(): inc_nozzle.cfg_dir = "incomp_euler/nozzle" inc_nozzle.cfg_file = "inv_nozzle.cfg" inc_nozzle.test_iter = 20 - inc_nozzle.test_vals = [-5.550954, -4.854401, -0.027964, 0.120734] + inc_nozzle.test_vals = [-6.247282, -5.460332, -0.019426, 0.126862] test_list.append(inc_nozzle) ############################# @@ -407,7 +407,7 @@ def main(): inc_lam_cylinder.cfg_dir = "incomp_navierstokes/cylinder" inc_lam_cylinder.cfg_file = "incomp_cylinder.cfg" inc_lam_cylinder.test_iter = 10 - inc_lam_cylinder.test_vals = [-4.168180, -3.611108, 0.007850, 4.539924] + inc_lam_cylinder.test_vals = [-4.159153, -3.569142, 0.011445, 4.936802] test_list.append(inc_lam_cylinder) # Buoyancy-driven cavity @@ -586,7 +586,7 @@ def main(): contadj_naca0012.cfg_dir = "cont_adj_euler/naca0012" contadj_naca0012.cfg_file = "inv_NACA0012.cfg" contadj_naca0012.test_iter = 5 - contadj_naca0012.test_vals = [-9.525042, -15.101716, -0.726250, 0.020280] + contadj_naca0012.test_vals = [-9.531049, -15.087710, -0.726250, 0.020280] contadj_naca0012.tol = 0.001 test_list.append(contadj_naca0012) @@ -595,7 +595,7 @@ def main(): contadj_oneram6.cfg_dir = "cont_adj_euler/oneram6" contadj_oneram6.cfg_file = "inv_ONERAM6.cfg" contadj_oneram6.test_iter = 10 - contadj_oneram6.test_vals = [-12.062243, -12.621811, -1.086100, 0.007556] + contadj_oneram6.test_vals = [-12.080232, -12.641294, -1.086100, 0.007556] test_list.append(contadj_oneram6) # Inviscid WEDGE: tests averaged outflow total pressure adjoint @@ -611,7 +611,7 @@ def main(): contadj_fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012" contadj_fixedCL_naca0012.cfg_file = "inv_NACA0012_ContAdj.cfg" contadj_fixedCL_naca0012.test_iter = 100 - contadj_fixedCL_naca0012.test_vals = [1.165313, -4.338177, -0.068991, -0.007568] + contadj_fixedCL_naca0012.test_vals = [1.381080, -4.043374, -0.033478, 0.003350] test_list.append(contadj_fixedCL_naca0012) ################################### @@ -630,7 +630,7 @@ def main(): contadj_ns_cylinder.cfg_dir = "cont_adj_navierstokes/cylinder" contadj_ns_cylinder.cfg_file = "lam_cylinder.cfg" contadj_ns_cylinder.test_iter = 20 - contadj_ns_cylinder.test_vals = [-3.606048, -9.050787, 2.056700, -0.000000] + contadj_ns_cylinder.test_vals = [-3.628790, -9.082444, 2.056700, -0.000000] test_list.append(contadj_ns_cylinder) # Adjoint laminar naca0012 subsonic @@ -674,7 +674,7 @@ def main(): contadj_rans_rae2822.cfg_dir = "cont_adj_rans/rae2822" contadj_rans_rae2822.cfg_file = "turb_SA_RAE2822.cfg" contadj_rans_rae2822.test_iter = 20 - contadj_rans_rae2822.test_vals = [-5.399739, -10.904778, -0.212470, 0.005448] + contadj_rans_rae2822.test_vals = [-5.399819, -10.904997, -0.212470, 0.005448] test_list.append(contadj_rans_rae2822) ############################# @@ -752,7 +752,7 @@ def main(): rot_naca0012.cfg_dir = "rotating/naca0012" rot_naca0012.cfg_file = "rot_NACA0012.cfg" rot_naca0012.test_iter = 25 - rot_naca0012.test_vals = [-1.313205, 4.208222, -0.001635, 0.121312] + rot_naca0012.test_vals = [-1.290464, 4.245388, -0.000518, 0.112880] test_list.append(rot_naca0012) # Lid-driven cavity @@ -760,7 +760,7 @@ def main(): cavity.cfg_dir = "moving_wall/cavity" cavity.cfg_file = "lam_cavity.cfg" cavity.test_iter = 25 - cavity.test_vals = [-8.327173, -2.944600, 0.017813, 0.009045] + cavity.test_vals = [-8.144051, -2.746565, 0.014954, 0.007011] test_list.append(cavity) # Spinning cylinder @@ -768,7 +768,7 @@ def main(): spinning_cylinder.cfg_dir = "moving_wall/spinning_cylinder" spinning_cylinder.cfg_file = "spinning_cylinder.cfg" spinning_cylinder.test_iter = 25 - spinning_cylinder.test_vals = [-7.824549, -2.360413, 1.581109, 1.528894] + spinning_cylinder.test_vals = [-7.543538, -2.078580, 1.956630, 1.859963] test_list.append(spinning_cylinder) ###################################### @@ -789,7 +789,7 @@ def main(): sine_gust.cfg_dir = "gust" sine_gust.cfg_file = "inv_gust_NACA0012.cfg" sine_gust.test_iter = 5 - sine_gust.test_vals = [-1.977498, 3.481817, -0.009957, -0.005021] + sine_gust.test_vals = [-1.977498, 3.481817, -0.010134, -0.004283] sine_gust.unsteady = True test_list.append(sine_gust) @@ -798,7 +798,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [-1.876629, 4.021078, 0.079049, 0.027650, -0.001639, -0.000129, -1.140500] + aeroelastic.test_vals = [-1.876626, 4.021083, 0.081596, 0.027684, -0.001638, -0.000130, -1.140510] aeroelastic.unsteady = True test_list.append(aeroelastic) @@ -824,7 +824,7 @@ def main(): unst_pitching_naca64a010_rans.cfg_dir = "unsteady/pitching_naca64a010_rans" unst_pitching_naca64a010_rans.cfg_file = "turb_NACA64A010.cfg" unst_pitching_naca64a010_rans.test_iter = 2 - unst_pitching_naca64a010_rans.test_vals = [-1.299045, -3.951413, 0.012821, 0.008239] + unst_pitching_naca64a010_rans.test_vals = [-1.299045, -3.951366, 0.010128, 0.008245] unst_pitching_naca64a010_rans.unsteady = True test_list.append(unst_pitching_naca64a010_rans) # unsteady pitching NACA64A010, Euler @@ -832,7 +832,7 @@ def main(): unst_pitching_naca64a010_euler.cfg_dir = "unsteady/pitching_naca64a010_euler" unst_pitching_naca64a010_euler.cfg_file = "pitching_NACA64A010.cfg" unst_pitching_naca64a010_euler.test_iter = 2 - unst_pitching_naca64a010_euler.test_vals = [-1.186839, 4.280301, -0.043557, 0.000935] + unst_pitching_naca64a010_euler.test_vals = [-1.186839, 4.280301, -0.039488, 0.000918] unst_pitching_naca64a010_euler.unsteady = True test_list.append(unst_pitching_naca64a010_euler) # unsteady plunging NACA0012, Laminar NS @@ -840,7 +840,7 @@ def main(): unst_plunging_naca0012.cfg_dir = "unsteady/plunging_naca0012" unst_plunging_naca0012.cfg_file = "plunging_NACA0012.cfg" unst_plunging_naca0012.test_iter = 2 - unst_plunging_naca0012.test_vals = [-4.083462, 1.366757, -6.820746, -0.081557] + unst_plunging_naca0012.test_vals = [-4.083462, 1.366757, -6.470859, -0.078768] unst_plunging_naca0012.unsteady = True test_list.append(unst_plunging_naca0012) @@ -849,7 +849,7 @@ def main(): unst_deforming_naca0012.cfg_dir = "disc_adj_euler/naca0012_pitching_def" unst_deforming_naca0012.cfg_file = "inv_NACA0012_pitching_deform.cfg" unst_deforming_naca0012.test_iter = 5 - unst_deforming_naca0012.test_vals = [-3.665254, -3.794011, -3.716829, -3.148509] + unst_deforming_naca0012.test_vals = [-3.665263, -3.794184, -3.716978, -3.148551] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) @@ -862,7 +862,7 @@ def main(): ls89_sa.cfg_dir = "nicf/LS89" ls89_sa.cfg_file = "turb_SA_PR.cfg" ls89_sa.test_iter = 20 - ls89_sa.test_vals = [-5.241488, -13.580472, 0.188420, 0.414010] + ls89_sa.test_vals = [-5.069399, -13.403603, 0.180485, 0.429457] test_list.append(ls89_sa) # Rarefaction shock wave edge_VW @@ -870,7 +870,7 @@ def main(): edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" edge_VW.test_iter = 20 - edge_VW.test_vals = [-2.656646, 3.544572, -0.000020, 0.000000] + edge_VW.test_vals = [-2.851854, 3.349325, -0.000009, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR @@ -878,7 +878,7 @@ def main(): edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" edge_PPR.test_iter = 20 - edge_PPR.test_vals = [-12.155248, -5.996433, -0.000034, 0] + edge_PPR.test_vals = [-12.476580, -6.287745, -0.000034, 0.000000] test_list.append(edge_PPR) @@ -1011,7 +1011,7 @@ def main(): bars_SST_2D.cfg_dir = "sliding_interface/bars_SST_2D" bars_SST_2D.cfg_file = "bars.cfg" bars_SST_2D.test_iter = 13 - bars_SST_2D.test_vals = [13.000000, -0.473009, -1.562179] + bars_SST_2D.test_vals = [13.000000, -0.397243, -1.461873] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) @@ -1108,7 +1108,7 @@ def main(): airfoilRBF.cfg_dir = "fea_fsi/Airfoil_RBF" airfoilRBF.cfg_file = "config.cfg" airfoilRBF.test_iter = 1 - airfoilRBF.test_vals = [1.000000, 0.184123, -3.375352] + airfoilRBF.test_vals = [1.000000, 0.028165, -3.530075] airfoilRBF.tol = 0.0001 airfoilRBF.multizone = True test_list.append(airfoilRBF) @@ -1515,7 +1515,7 @@ def main(): opt_multiobj1surf_py.cfg_dir = "optimization_euler/multiobjective_wedge" opt_multiobj1surf_py.cfg_file = "inv_wedge_ROE_multiobj_1surf.cfg" opt_multiobj1surf_py.test_iter = 1 - opt_multiobj1surf_py.test_vals = [1.000000, 1.000000, 36.699910, 5.780304] + opt_multiobj1surf_py.test_vals = [1.000000, 1.000000, 36.670510, 5.750360] opt_multiobj1surf_py.command = TestCase.Command(exec = "shape_optimization.py", param = "-g CONTINUOUS_ADJOINT -f") opt_multiobj1surf_py.timeout = 1600 opt_multiobj1surf_py.tol = 0.00001 @@ -1545,7 +1545,7 @@ def main(): pywrapper_naca0012.cfg_dir = "euler/naca0012" pywrapper_naca0012.cfg_file = "inv_NACA0012_Roe.cfg" pywrapper_naca0012.test_iter = 20 - pywrapper_naca0012.test_vals = [-4.256408, -3.795038, 0.306510, 0.024657] + pywrapper_naca0012.test_vals = [-4.507695, -3.938772, 0.297705, 0.025422] pywrapper_naca0012.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_naca0012.timeout = 1600 pywrapper_naca0012.tol = 0.00001 @@ -1601,7 +1601,7 @@ def main(): pywrapper_unsteadyCHT.cfg_dir = "py_wrapper/flatPlate_unsteady_CHT" pywrapper_unsteadyCHT.cfg_file = "unsteady_CHT_FlatPlate_Conf.cfg" pywrapper_unsteadyCHT.test_iter = 5 - pywrapper_unsteadyCHT.test_vals = [-1.614168, 2.259972, 0.000757, 0.113614] + pywrapper_unsteadyCHT.test_vals = [-1.614168, 2.260078, -0.020704, 0.172871] pywrapper_unsteadyCHT.command = TestCase.Command(exec = "python", param = "launch_unsteady_CHT_FlatPlate.py -f") pywrapper_unsteadyCHT.timeout = 1600 pywrapper_unsteadyCHT.tol = 0.00001 diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 6d0d424251a..baa6e114700 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -108,7 +108,7 @@ def main(): discadj_incomp_NACA0012.cfg_dir = "disc_adj_incomp_euler/naca0012" discadj_incomp_NACA0012.cfg_file = "incomp_NACA0012_disc.cfg" discadj_incomp_NACA0012.test_iter = 20 - discadj_incomp_NACA0012.test_vals = [20.000000, -3.338269, -2.490047, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -3.122293, -2.287328, 0.000000] test_list.append(discadj_incomp_NACA0012) ##################################### @@ -158,7 +158,7 @@ def main(): discadj_pitchingNACA0012.cfg_dir = "disc_adj_euler/naca0012_pitching" discadj_pitchingNACA0012.cfg_file = "inv_NACA0012_pitching.cfg" discadj_pitchingNACA0012.test_iter = 4 - discadj_pitchingNACA0012.test_vals = [-1.130532, -1.575494, -0.005113, 0.000007] + discadj_pitchingNACA0012.test_vals = [-1.049761, -1.501951, -0.004853, 0.000013] discadj_pitchingNACA0012.unsteady = True test_list.append(discadj_pitchingNACA0012) @@ -167,7 +167,7 @@ def main(): unst_deforming_naca0012.cfg_dir = "disc_adj_euler/naca0012_pitching_def" unst_deforming_naca0012.cfg_file = "inv_NACA0012_pitching_deform_ad.cfg" unst_deforming_naca0012.test_iter = 4 - unst_deforming_naca0012.test_vals = [-1.885032, -1.775564, 3994.600000, 0.000002] + unst_deforming_naca0012.test_vals = [-1.885816, -1.781193, 3920.300000, 0.000003] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index 4ab5df41ed1..60680004487 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -175,7 +175,7 @@ def main(): tutorial_inv_bump.cfg_dir = "../Tutorials/compressible_flow/Inviscid_Bump" tutorial_inv_bump.cfg_file = "inv_channel.cfg" tutorial_inv_bump.test_iter = 0 - tutorial_inv_bump.test_vals = [-1.437425, 4.075857, 0.043691, 0.034241] + tutorial_inv_bump.test_vals = [-1.437425, 4.075857, 0.080374, 0.012019] test_list.append(tutorial_inv_bump) # Inviscid Wedge @@ -192,7 +192,7 @@ def main(): tutorial_inv_onera.cfg_dir = "../Tutorials/compressible_flow/Inviscid_ONERAM6" tutorial_inv_onera.cfg_file = "inv_ONERAM6.cfg" tutorial_inv_onera.test_iter = 0 - tutorial_inv_onera.test_vals = [-5.204928, -4.597762, 0.255680, 0.087977] + tutorial_inv_onera.test_vals = [-5.204928, -4.597762, 0.261167, 0.084096] tutorial_inv_onera.no_restart = True test_list.append(tutorial_inv_onera) @@ -201,7 +201,7 @@ def main(): tutorial_lam_cylinder.cfg_dir = "../Tutorials/compressible_flow/Laminar_Cylinder" tutorial_lam_cylinder.cfg_file = "lam_cylinder.cfg" tutorial_lam_cylinder.test_iter = 0 - tutorial_lam_cylinder.test_vals = [-6.162141, -0.699617, -0.047729, 43.442977] + tutorial_lam_cylinder.test_vals = [-6.162141, -0.699617, -0.124663, 31.721714] tutorial_lam_cylinder.no_restart = True test_list.append(tutorial_lam_cylinder) @@ -323,7 +323,7 @@ def main(): tutorial_design_inv_naca0012.cfg_dir = "../Tutorials/design/Inviscid_2D_Unconstrained_NACA0012" tutorial_design_inv_naca0012.cfg_file = "inv_NACA0012_basic.cfg" tutorial_design_inv_naca0012.test_iter = 0 - tutorial_design_inv_naca0012.test_vals = [-3.585391, -2.989014, 0.164248, 0.228824] + tutorial_design_inv_naca0012.test_vals = [-3.585391, -2.989014, 0.169747, 0.235619] tutorial_design_inv_naca0012.no_restart = True test_list.append(tutorial_design_inv_naca0012) diff --git a/config_template.cfg b/config_template.cfg index 6f6d5ee9bcc..889abb9f6b1 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -1682,10 +1682,10 @@ MG_POST_SMOOTH= ( 4, 4, 4, 4 ) MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) % % Damping factor for the residual restriction -MG_DAMP_RESTRICTION= 0.75 +MG_DAMP_RESTRICTION= 0.5 % % Damping factor for the correction prolongation -MG_DAMP_PROLONGATION= 0.75 +MG_DAMP_PROLONGATION= 0.5 % % Enable early exit from multigrid smoothing when the residual RMS drops % below MG_SMOOTH_RES_THRESHOLD * initial_rms (NO, YES) @@ -1693,7 +1693,7 @@ MG_SMOOTH_EARLY_EXIT= YES % % Relative RMS reduction threshold for the multigrid smoothing early exit. % Smoothing stops when current_rms < threshold * initial_rms (default 0.5) -MG_SMOOTH_RES_THRESHOLD= 0.5 +MG_SMOOTH_RES_THRESHOLD= 0.9 % % Smoothing coefficient for the Jacobi correction-prolongation smoother (default 1.25) MG_SMOOTH_COEFF= 1.25 @@ -1707,6 +1707,10 @@ MG_MIN_MESHSIZE= 500 % % Enable agglomeration along implicit lines seeded from viscous walls (NO, YES) MG_IMPLICIT_LINES= NO +% +% Maximum nodes on a wall-normal implicit agglomeration line, including the wall seed. +% Increase to extend the line deeper into the boundary layer (default 20). +MG_IMPLICIT_LINES_MAX_LENGTH= 20 % -------------------------- MESH SMOOTHING -----------------------------% %