From 2a9524524ba2436883e82618671256414ad75d3a Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 11 Jan 2026 12:36:44 +0100 Subject: [PATCH 001/229] update tutorial regression --- TestCases/tutorials.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index dd0ae8dfc715..a4e1b5e409b9 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -345,6 +345,34 @@ def main(): tutorial_design_multiobj.no_restart = True test_list.append(tutorial_design_multiobj) + # custom source: turbulent flamespeed closure (Zimont model) for PSI testcase + pywrapper_psi = TestCase('psi_adiabatic') + pywrapper_psi.cfg_dir = "../Tutorials/TFC_python/adiabatic" + pywrapper_psi.cfg_file = "psi.cfg" + pywrapper_psi.test_iter = 0 + pywrapper_psi.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] + pywrapper_psi.command = TestCase.Command("mpirun -np 2", "python", "run.py") + test_list.append(pywrapper_psi) + + # custom source: including source term for enthalpy equations + pywrapper_psi_hl = TestCase('psi_enthalpy') + pywrapper_psi_hl.cfg_dir = "../Tutorials/TFC_python/enthalpy" + pywrapper_psi_hl.cfg_file = "psi.cfg" + pywrapper_psi_hl.test_iter = 0 + pywrapper_psi_hl.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] + pywrapper_psi_hl.command = TestCase.Command("mpirun -np 2", "python", "run.py") + test_list.append(pywrapper_psi_hl) + + # custom source: including custom BC and source term + pywrapper_psi_hl = TestCase('psi_quench') + pywrapper_psi_hl.cfg_dir = "../Tutorials/TFC_python/quench" + pywrapper_psi_hl.cfg_file = "psi.cfg" + pywrapper_psi_hl.test_iter = 0 + pywrapper_psi_hl.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] + pywrapper_psi_hl.command = TestCase.Command("mpirun -np 2", "python", "run.py") + test_list.append(pywrapper_psi_hl) + + ###################################### ### RUN TESTS ### ###################################### From 863cec297b56129cd1edb3034d672cd8248c7f78 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 11 Jan 2026 12:44:22 +0100 Subject: [PATCH 002/229] update tutorial regression --- TestCases/tutorials.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index a4e1b5e409b9..c614e1ee3337 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -364,13 +364,13 @@ def main(): test_list.append(pywrapper_psi_hl) # custom source: including custom BC and source term - pywrapper_psi_hl = TestCase('psi_quench') - pywrapper_psi_hl.cfg_dir = "../Tutorials/TFC_python/quench" - pywrapper_psi_hl.cfg_file = "psi.cfg" - pywrapper_psi_hl.test_iter = 0 - pywrapper_psi_hl.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] - pywrapper_psi_hl.command = TestCase.Command("mpirun -np 2", "python", "run.py") - test_list.append(pywrapper_psi_hl) + pywrapper_psi_quench = TestCase('psi_quench') + pywrapper_psi_quench.cfg_dir = "../Tutorials/TFC_python/quench" + pywrapper_psi_quench.cfg_file = "psi.cfg" + pywrapper_psi_quench.test_iter = 0 + pywrapper_psi_quench.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] + pywrapper_psi_quench.command = TestCase.Command("mpirun -np 2", "python", "run.py") + test_list.append(pywrapper_psi_quench) ###################################### From 4540d949a1bb4dd2454c061ed37c10034bc28f41 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 11 Jan 2026 14:11:45 +0100 Subject: [PATCH 003/229] update tutorial regression --- TestCases/tutorials.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index c614e1ee3337..9ccd48382657 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -347,7 +347,7 @@ def main(): # custom source: turbulent flamespeed closure (Zimont model) for PSI testcase pywrapper_psi = TestCase('psi_adiabatic') - pywrapper_psi.cfg_dir = "../Tutorials/TFC_python/adiabatic" + pywrapper_psi.cfg_dir = "../Tutorials/multiphysics/TFC_python/adiabatic" pywrapper_psi.cfg_file = "psi.cfg" pywrapper_psi.test_iter = 0 pywrapper_psi.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] @@ -356,7 +356,7 @@ def main(): # custom source: including source term for enthalpy equations pywrapper_psi_hl = TestCase('psi_enthalpy') - pywrapper_psi_hl.cfg_dir = "../Tutorials/TFC_python/enthalpy" + pywrapper_psi_hl.cfg_dir = "../Tutorials/multiphysics/TFC_python/enthalpy" pywrapper_psi_hl.cfg_file = "psi.cfg" pywrapper_psi_hl.test_iter = 0 pywrapper_psi_hl.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] @@ -365,7 +365,7 @@ def main(): # custom source: including custom BC and source term pywrapper_psi_quench = TestCase('psi_quench') - pywrapper_psi_quench.cfg_dir = "../Tutorials/TFC_python/quench" + pywrapper_psi_quench.cfg_dir = "../Tutorials/multiphysics/TFC_python/quench" pywrapper_psi_quench.cfg_file = "psi.cfg" pywrapper_psi_quench.test_iter = 0 pywrapper_psi_quench.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] From c5ecc58647f83fc53bdcde8983719f120fe90791 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 11 Jan 2026 15:47:44 +0100 Subject: [PATCH 004/229] update github workflow --- .github/workflows/regression.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index b7d4c3530d01..f0be2eb92e0f 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -211,7 +211,7 @@ jobs: uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: # -t -c - args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} + args: -b ${{github.ref}} -t TFC_python -c develop -s ${{matrix.testscript}} - name: Cleanup uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: From 1072f338616bf896633ab864d33e07e6672c7246 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 11 Jan 2026 16:21:23 +0100 Subject: [PATCH 005/229] update github workflow --- TestCases/tutorials.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index 9ccd48382657..267b1ab81263 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -349,7 +349,7 @@ def main(): pywrapper_psi = TestCase('psi_adiabatic') pywrapper_psi.cfg_dir = "../Tutorials/multiphysics/TFC_python/adiabatic" pywrapper_psi.cfg_file = "psi.cfg" - pywrapper_psi.test_iter = 0 + pywrapper_psi.test_iter = 5 pywrapper_psi.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] pywrapper_psi.command = TestCase.Command("mpirun -np 2", "python", "run.py") test_list.append(pywrapper_psi) @@ -358,8 +358,8 @@ def main(): pywrapper_psi_hl = TestCase('psi_enthalpy') pywrapper_psi_hl.cfg_dir = "../Tutorials/multiphysics/TFC_python/enthalpy" pywrapper_psi_hl.cfg_file = "psi.cfg" - pywrapper_psi_hl.test_iter = 0 - pywrapper_psi_hl.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] + pywrapper_psi_hl.test_iter = 5 + pywrapper_psi_hl.test_vals = [-6.211126, -4.025898, -5.405635, -3.743101, -1.314498, -3.948690] pywrapper_psi_hl.command = TestCase.Command("mpirun -np 2", "python", "run.py") test_list.append(pywrapper_psi_hl) @@ -367,8 +367,8 @@ def main(): pywrapper_psi_quench = TestCase('psi_quench') pywrapper_psi_quench.cfg_dir = "../Tutorials/multiphysics/TFC_python/quench" pywrapper_psi_quench.cfg_file = "psi.cfg" - pywrapper_psi_quench.test_iter = 0 - pywrapper_psi_quench.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] + pywrapper_psi_quench.test_iter = 5 + pywrapper_psi_quench.test_vals = [-7.370108, -6.688806, -7.839519, -4.086479, -1.223314, -4.022876] pywrapper_psi_quench.command = TestCase.Command("mpirun -np 2", "python", "run.py") test_list.append(pywrapper_psi_quench) From 1c8a579d1257d96a21949b0253483766174ac818 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 11 Jan 2026 17:29:54 +0100 Subject: [PATCH 006/229] update regression --- TestCases/tutorials.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index 267b1ab81263..7d77dbf252dc 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -349,7 +349,7 @@ def main(): pywrapper_psi = TestCase('psi_adiabatic') pywrapper_psi.cfg_dir = "../Tutorials/multiphysics/TFC_python/adiabatic" pywrapper_psi.cfg_file = "psi.cfg" - pywrapper_psi.test_iter = 5 + pywrapper_psi.test_iter = 0 pywrapper_psi.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] pywrapper_psi.command = TestCase.Command("mpirun -np 2", "python", "run.py") test_list.append(pywrapper_psi) @@ -358,7 +358,7 @@ def main(): pywrapper_psi_hl = TestCase('psi_enthalpy') pywrapper_psi_hl.cfg_dir = "../Tutorials/multiphysics/TFC_python/enthalpy" pywrapper_psi_hl.cfg_file = "psi.cfg" - pywrapper_psi_hl.test_iter = 5 + pywrapper_psi_hl.test_iter = 0 pywrapper_psi_hl.test_vals = [-6.211126, -4.025898, -5.405635, -3.743101, -1.314498, -3.948690] pywrapper_psi_hl.command = TestCase.Command("mpirun -np 2", "python", "run.py") test_list.append(pywrapper_psi_hl) @@ -367,7 +367,7 @@ def main(): pywrapper_psi_quench = TestCase('psi_quench') pywrapper_psi_quench.cfg_dir = "../Tutorials/multiphysics/TFC_python/quench" pywrapper_psi_quench.cfg_file = "psi.cfg" - pywrapper_psi_quench.test_iter = 5 + pywrapper_psi_quench.test_iter = 0 pywrapper_psi_quench.test_vals = [-7.370108, -6.688806, -7.839519, -4.086479, -1.223314, -4.022876] pywrapper_psi_quench.command = TestCase.Command("mpirun -np 2", "python", "run.py") test_list.append(pywrapper_psi_quench) From 840b6a5ca355ce88966c0c2f5e2bf113c9c97b17 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 11 Jan 2026 18:56:05 +0100 Subject: [PATCH 007/229] update regression --- TestCases/tutorials.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index 7d77dbf252dc..a9d875465dde 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -350,7 +350,7 @@ def main(): pywrapper_psi.cfg_dir = "../Tutorials/multiphysics/TFC_python/adiabatic" pywrapper_psi.cfg_file = "psi.cfg" pywrapper_psi.test_iter = 0 - pywrapper_psi.test_vals = [-3.415653, -2.221781, -3.107330, -2.569248, 0.531838, -3.796447] + pywrapper_psi.test_vals = [-2.682653, -0.994981, -2.221252, -2.401462, 3.597559, -3.369865] pywrapper_psi.command = TestCase.Command("mpirun -np 2", "python", "run.py") test_list.append(pywrapper_psi) From 45152c5ad3c110a99b294b4f0d4a39ff3c3f5cd9 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Thu, 15 Jan 2026 11:23:22 -0800 Subject: [PATCH 008/229] use the direct link --- meson_scripts/init.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/meson_scripts/init.py b/meson_scripts/init.py index 334c1950024d..74e42b601776 100755 --- a/meson_scripts/init.py +++ b/meson_scripts/init.py @@ -78,6 +78,11 @@ def init_submodules( github_repo_mlpcpp = "https://github.com/EvertBunschoten/MLPCpp" sha_version_eigen = "d71c30c47858effcbd39967097a2d99ee48db464" github_repo_eigen = "https://gitlab.com/libeigen/eigen.git" + # The download paths for gitlab are different than github so we need this ad-hoc fix. + # NOTE: Update the Eigen version in download_module when changing this. + download_eigen = ( + "https://gitlab.com/libeigen/eigen/-/archive/3.4/eigen-3.4.zip?ref_type=heads" + ) medi_name = "MeDiPack" codi_name = "CoDiPack" @@ -180,7 +185,11 @@ def init_submodules( ) if own_eigen: download_module( - eigen_name, alt_name_eigen, github_repo_eigen, sha_version_eigen + eigen_name, + alt_name_eigen, + github_repo_eigen, + sha_version_eigen, + download_eigen, ) @@ -260,7 +269,7 @@ def submodule_status(path, sha_commit): ) -def download_module(name, alt_name, git_repo, commit_sha): +def download_module(name, alt_name, git_repo, commit_sha, download_url=None): # ZipFile does not preserve file permissions. # This is a workaround for that problem: # https://stackoverflow.com/questions/39296101/python-zipfile-removes-execute-permissions-from-binaries @@ -296,7 +305,7 @@ def _extract_member(self, member, targetpath, pwd): alt_filename = name + "-" + filename alt_filepath = os.path.join(sys.path[0], alt_filename) - url = git_repo + "/archive/" + filename + url = download_url or (git_repo + "/archive/" + filename) if not os.path.exists(filepath) and not os.path.exists(alt_filepath): try: @@ -321,7 +330,13 @@ def _extract_member(self, member, targetpath, pwd): if os.path.exists(alt_name): os.rmdir(alt_name) - os.rename(os.path.join(target_dir, name + "-" + commit_sha), alt_name) + try: + os.rename(os.path.join(target_dir, name + "-" + commit_sha), alt_name) + except FileNotFoundError: + if "eigen" in url: + os.rename(os.path.join(target_dir, "eigen-3.4"), alt_name) + else: + raise # Delete zip file remove_file(filepath) From 77bfd6f1efefe28e1fd0c3fd3c44ca8e8e193dc2 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Thu, 15 Jan 2026 19:44:55 -0800 Subject: [PATCH 009/229] recompute sound speed --- SU2_CFD/include/numerics/CNumerics.hpp | 2 +- .../include/numerics/flow/convection/fvs.hpp | 22 +- SU2_CFD/src/numerics/flow/convection/fvs.cpp | 241 ++++++------------ 3 files changed, 85 insertions(+), 180 deletions(-) diff --git a/SU2_CFD/include/numerics/CNumerics.hpp b/SU2_CFD/include/numerics/CNumerics.hpp index 11044a241c9d..d574314cd5f4 100644 --- a/SU2_CFD/include/numerics/CNumerics.hpp +++ b/SU2_CFD/include/numerics/CNumerics.hpp @@ -46,7 +46,7 @@ class CFluidModel; */ class CNumerics { protected: - enum : size_t {MAXNDIM = 3}; /*!< \brief Max number of space dimensions, used in some static arrays. */ + static constexpr size_t MAXNDIM = 3; /*!< \brief Max number of space dimensions, used in some static arrays. */ unsigned short nDim, nVar; /*!< \brief Number of dimensions and variables. */ su2double Gamma; /*!< \brief Fluid's Gamma constant (ratio of specific heats). */ diff --git a/SU2_CFD/include/numerics/flow/convection/fvs.hpp b/SU2_CFD/include/numerics/flow/convection/fvs.hpp index 32952ee54fc7..9bff32bee3dd 100644 --- a/SU2_CFD/include/numerics/flow/convection/fvs.hpp +++ b/SU2_CFD/include/numerics/flow/convection/fvs.hpp @@ -38,15 +38,16 @@ */ class CUpwMSW_Flow final : public CNumerics { private: - bool implicit; - su2double *u_i, *u_j, *ust_i, *ust_j; - su2double *Fc_i, *Fc_j; - su2double *Lambda_i, *Lambda_j; - su2double *Vst_i, *Vst_j, *Velst_i, *Velst_j; - su2double **P_Tensor, **invP_Tensor; + static constexpr auto MAXNVAR = MAXNDIM + 2; - su2double** Jacobian_i; /*!< \brief The Jacobian w.r.t. point i after computation. */ - su2double** Jacobian_j; /*!< \brief The Jacobian w.r.t. point j after computation. */ + su2double buf_P_Tensor[MAXNVAR * MAXNVAR], buf_invP_Tensor[MAXNVAR * MAXNVAR]; + su2double *P_Tensor[MAXNVAR], *invP_Tensor[MAXNVAR]; + + su2double buf_Jacobian_i[MAXNVAR * MAXNVAR], buf_Jacobian_j[MAXNVAR * MAXNVAR]; + su2double* Jacobian_i[MAXNVAR]; /*!< \brief The Jacobian w.r.t. point i after computation. */ + su2double* Jacobian_j[MAXNVAR]; /*!< \brief The Jacobian w.r.t. point j after computation. */ + + su2double Fc[MAXNVAR]; public: /*! @@ -57,11 +58,6 @@ class CUpwMSW_Flow final : public CNumerics { */ CUpwMSW_Flow(unsigned short val_nDim, unsigned short val_nVar, const CConfig* config); - /*! - * \brief Destructor of the class. - */ - ~CUpwMSW_Flow(void) override; - /*! * \brief Compute the Roe's flux between two nodes i and j. * \param[in] config - Definition of the particular problem. diff --git a/SU2_CFD/src/numerics/flow/convection/fvs.cpp b/SU2_CFD/src/numerics/flow/convection/fvs.cpp index 110207b9592b..df0292535bc8 100644 --- a/SU2_CFD/src/numerics/flow/convection/fvs.cpp +++ b/SU2_CFD/src/numerics/flow/convection/fvs.cpp @@ -30,199 +30,124 @@ CUpwMSW_Flow::CUpwMSW_Flow(unsigned short val_nDim, unsigned short val_nVar, const CConfig* config) : CNumerics(val_nDim, val_nVar, config) { - if (config->GetDynamic_Grid() && (SU2_MPI::GetRank() == MASTER_NODE)) - cout << "WARNING: Grid velocities are NOT yet considered in the MSW scheme." << endl; - - /*--- Set booleans from CConfig settings ---*/ - implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT); - - /*--- Allocate arrays ---*/ - Fc_i = new su2double [nVar]; - Fc_j = new su2double [nVar]; - Lambda_i = new su2double [nVar]; - Lambda_j = new su2double [nVar]; - - u_i = new su2double [nDim]; - u_j = new su2double [nDim]; - ust_i = new su2double [nDim]; - ust_j = new su2double [nDim]; - Vst_i = new su2double [nDim+5]; - Vst_j = new su2double [nDim+5]; - - Velst_i = new su2double [nDim]; - Velst_j = new su2double [nDim]; - - P_Tensor = new su2double* [nVar]; - invP_Tensor= new su2double* [nVar]; - Jacobian_i = new su2double* [nVar]; - Jacobian_j = new su2double* [nVar]; - for (unsigned short iVar = 0; iVar < nVar; iVar++) { - P_Tensor[iVar] = new su2double [nVar]; - invP_Tensor[iVar] = new su2double [nVar]; - Jacobian_i[iVar] = new su2double [nVar]; - Jacobian_j[iVar] = new su2double [nVar]; + if (config->GetDynamic_Grid() && SU2_MPI::GetRank() == MASTER_NODE) { + std::cout << "WARNING: Grid velocities are NOT yet considered in the MSW scheme." << std::endl; } -} - -CUpwMSW_Flow::~CUpwMSW_Flow() { - - delete [] Fc_i; - delete [] Fc_j; - delete [] Lambda_i; - delete [] Lambda_j; - - delete [] u_i; - delete [] u_j; - delete [] ust_i; - delete [] ust_j; - delete [] Vst_i; - delete [] Vst_j; - delete [] Velst_i; - delete [] Velst_j; - + /*--- Allocate arrays ---*/ for (unsigned short iVar = 0; iVar < nVar; iVar++) { - delete [] P_Tensor[iVar]; - delete [] invP_Tensor[iVar]; - delete [] Jacobian_i[iVar]; - delete [] Jacobian_j[iVar]; + P_Tensor[iVar] = &buf_P_Tensor[iVar * MAXNVAR]; + invP_Tensor[iVar] =&buf_invP_Tensor[iVar * MAXNVAR]; + Jacobian_i[iVar] = &buf_Jacobian_i[iVar * MAXNVAR]; + Jacobian_j[iVar] = &buf_Jacobian_j[iVar * MAXNVAR]; } - delete [] P_Tensor; - delete [] invP_Tensor; - delete [] Jacobian_i; - delete [] Jacobian_j; - } CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { - implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); - - unsigned short iDim, iVar, jVar, kVar; - su2double rho_i, rho_j, P_i, P_j, H_i, H_j; - su2double ProjVel_i, ProjVel_j, ProjVelst_i, ProjVelst_j; - su2double sqvel_i, sqvel_j; - su2double alpha, w, dp, onemw; - su2double Proj_ModJac_Tensor_i, Proj_ModJac_Tensor_j; - /*--- Set parameters in the numerical method ---*/ - alpha = 6.0; + const su2double alpha = 6.0; /*--- Calculate supporting geometry parameters ---*/ - Area = GeometryToolbox::Norm(nDim, Normal); - - for (iDim = 0; iDim < nDim; iDim++) - UnitNormal[iDim] = Normal[iDim]/Area; + const su2double Area = GeometryToolbox::Norm(nDim, Normal); - /*--- Initialize flux & Jacobian vectors ---*/ - - for (iVar = 0; iVar < nVar; iVar++) { - Fc_i[iVar] = 0.0; - Fc_j[iVar] = 0.0; - } - if (implicit) { - for (iVar = 0; iVar < nVar; iVar++) { - for (jVar = 0; jVar < nVar; jVar++) { - Jacobian_i[iVar][jVar] = 0.0; - Jacobian_j[iVar][jVar] = 0.0; - } - } + for (auto iDim = 0u; iDim < nDim; ++iDim) { + UnitNormal[iDim] = Normal[iDim] / Area; } /*--- Load variables from nodes i & j ---*/ - for (iDim = 0; iDim < nDim; iDim++) { - u_i[iDim] = V_i[iDim+1]; - u_j[iDim] = V_j[iDim+1]; - } - P_i = V_i[nDim+1]; - P_j = V_j[nDim+1]; - rho_i = V_i[nDim+2]; - rho_j = V_j[nDim+2]; - H_i = V_i[nDim+3]; - H_j = V_j[nDim+3]; + const su2double P_i = V_i[nDim + 1]; + const su2double P_j = V_j[nDim + 1]; + const su2double rho_i = V_i[nDim + 2]; + const su2double rho_j = V_j[nDim + 2]; + const su2double H_i = V_i[nDim + 3]; + const su2double H_j = V_j[nDim + 3]; + const su2double sqvel_i = GeometryToolbox::SquaredNorm(nDim, V_i + 1); + const su2double sqvel_j = GeometryToolbox::SquaredNorm(nDim, V_j + 1); + const su2double c_i = sqrt(fmax((Gamma - 1) * (H_i - 0.5 * sqvel_i), EPS)); + const su2double c_j = sqrt(fmax((Gamma - 1) * (H_j - 0.5 * sqvel_j), EPS)); /*--- Recompute conservatives ---*/ - su2double U_i[5] = {0.0}, U_j[5] = {0.0}; - - U_i[0] = rho_i; U_j[0] = rho_j; - for (iDim = 0; iDim < nDim; iDim++) { - U_i[iDim+1] = rho_i*u_i[iDim]; - U_j[iDim+1] = rho_j*u_j[iDim]; - } - U_i[nDim+1] = rho_i*H_i - P_i; - U_j[nDim+1] = rho_j*H_j - P_j; - - /*--- Calculate supporting quantities ---*/ - - sqvel_i = 0.0; sqvel_j = 0.0; - ProjVel_i = 0.0; ProjVel_j = 0.0; - for (iDim = 0; iDim < nDim; iDim++) { - sqvel_i += u_i[iDim]*u_i[iDim]; - sqvel_j += u_j[iDim]*u_j[iDim]; - ProjVel_i += u_i[iDim]*UnitNormal[iDim]; - ProjVel_j += u_j[iDim]*UnitNormal[iDim]; + su2double U_i[MAXNVAR] = {}, U_j[MAXNVAR] = {}; + U_i[0] = rho_i; + U_j[0] = rho_j; + for (auto iDim = 0u; iDim < nDim; ++iDim) { + U_i[iDim + 1] = rho_i * V_i[iDim + 1]; + U_j[iDim + 1] = rho_j * V_j[iDim + 1]; } + U_i[nDim + 1] = rho_i * H_i - P_i; + U_j[nDim + 1] = rho_j * H_j - P_j; /*--- Calculate the state weighting function ---*/ - dp = fabs(P_j-P_i) / min(P_j, P_i); - w = 0.5 * (1.0/(pow(alpha*dp,2.0) +1.0)); - onemw = 1.0 - w; + const su2double dp = fabs(P_j - P_i) / fmin(P_j, P_i); + const su2double w = 0.5 * (1 / (pow(alpha * dp, 2) + 1)); + const su2double onemw = 1 - w; /*--- Calculate weighted state vector (*) for i & j ---*/ - for (iVar = 0; iVar < nDim+5; iVar++) { - Vst_i[iVar] = onemw*V_i[iVar] + w*V_j[iVar]; - Vst_j[iVar] = onemw*V_j[iVar] + w*V_i[iVar]; + su2double Vst_i[MAXNDIM + 5] = {}, Vst_j[MAXNDIM + 5] = {}; + for (auto iVar = 0; iVar < nDim + 4; ++iVar) { + Vst_i[iVar] = onemw * V_i[iVar] + w * V_j[iVar]; + Vst_j[iVar] = onemw * V_j[iVar] + w * V_i[iVar]; } - ProjVelst_i = onemw*ProjVel_i + w*ProjVel_j; - ProjVelst_j = onemw*ProjVel_j + w*ProjVel_i; + Vst_i[nDim + 4] = onemw * c_i + w * c_j; + Vst_j[nDim + 4] = onemw * c_j + w * c_i; - for (iDim = 0; iDim < nDim; iDim++) { - Velst_i[iDim] = Vst_i[iDim+1]; - Velst_j[iDim] = Vst_j[iDim+1]; + su2double Velst_i[MAXNDIM] = {}, Velst_j[MAXNDIM] = {}; + for (auto iDim = 0u; iDim < nDim; ++iDim) { + Velst_i[iDim] = Vst_i[iDim + 1]; + Velst_j[iDim] = Vst_j[iDim + 1]; } + const su2double ProjVelst_i = GeometryToolbox::DotProduct(MAXNDIM, Velst_i, UnitNormal); + const su2double ProjVelst_j = GeometryToolbox::DotProduct(MAXNDIM, Velst_j, UnitNormal); /*--- Flow eigenvalues at i (Lambda+) ---*/ - for (iDim = 0; iDim < nDim; iDim++) { - Lambda_i[iDim] = 0.5*(ProjVelst_i + fabs(ProjVelst_i)); + su2double Lambda[MAXNVAR] = {}; + for (auto iDim = 0u; iDim < nDim; ++iDim) { + Lambda[iDim] = fmax(ProjVelst_i, 0); } - - Lambda_i[nDim] = 0.5*( ProjVelst_i + Vst_i[nDim+4] + fabs(ProjVelst_i + Vst_i[nDim+4]) ); - Lambda_i[nDim+1] = 0.5*( ProjVelst_i - Vst_i[nDim+4] + fabs(ProjVelst_i - Vst_i[nDim+4]) ); + Lambda[nDim] = fmax(ProjVelst_i + Vst_i[nDim + 4], 0); + Lambda[nDim + 1] = fmax(ProjVelst_i - Vst_i[nDim + 4], 0); /*--- Compute projected P, invP, and Lambda ---*/ - GetPMatrix(&Vst_i[nDim+2], Velst_i, &Vst_i[nDim+4], UnitNormal, P_Tensor); - GetPMatrix_inv(&Vst_i[nDim+2], Velst_i, &Vst_i[nDim+4], UnitNormal, invP_Tensor); + GetPMatrix(&Vst_i[nDim + 2], Velst_i, &Vst_i[nDim + 4], UnitNormal, P_Tensor); + GetPMatrix_inv(&Vst_i[nDim + 2], Velst_i, &Vst_i[nDim + 4], UnitNormal, invP_Tensor); /*--- Projected flux (f+) at i ---*/ - for (iVar = 0; iVar < nVar; iVar++) { - for (jVar = 0; jVar < nVar; jVar++) { - Proj_ModJac_Tensor_i = 0.0; - - /*--- Compute Proj_ModJac_Tensor = P x Lambda+ x inverse P ---*/ - - for (kVar = 0; kVar < nVar; kVar++) - Proj_ModJac_Tensor_i += P_Tensor[iVar][kVar]*Lambda_i[kVar]*invP_Tensor[kVar][jVar]; - Fc_i[iVar] += Proj_ModJac_Tensor_i*U_i[jVar]*Area; - if (implicit) - Jacobian_i[iVar][jVar] += Proj_ModJac_Tensor_i*Area; - } + for (auto iVar = 0u; iVar < MAXNVAR; ++iVar) { + Fc[iVar] = 0; } + auto UpdateFlux = [&](const auto* U, auto* Jacobian) { + for (auto iVar = 0u; iVar < nVar; ++iVar) { + for (auto jVar = 0u; jVar < nVar; ++jVar) { + su2double Proj_ModJac_Tensor_i = 0.0; + + /*--- Compute Proj_ModJac_Tensor = P x Lambda+ x inverse P ---*/ + + for (auto kVar = 0u; kVar < nVar; ++kVar) { + Proj_ModJac_Tensor_i += P_Tensor[iVar][kVar] * Lambda[kVar] * invP_Tensor[kVar][jVar]; + } + Fc[iVar] += Proj_ModJac_Tensor_i * Area * U[jVar]; + Jacobian[iVar][jVar] = Proj_ModJac_Tensor_i * Area; + } + } + }; + UpdateFlux(U_i, Jacobian_i); /*--- Flow eigenvalues at j (Lambda-) ---*/ - for (iDim = 0; iDim < nDim; iDim++) { - Lambda_j[iDim] = 0.5*(ProjVelst_j - fabs(ProjVelst_j)); + for (auto iDim = 0u; iDim < nDim; ++iDim) { + Lambda[iDim] = fmin(ProjVelst_j, 0); } - Lambda_j[nDim] = 0.5*( ProjVelst_j + Vst_j[nDim+4] - fabs(ProjVelst_j + Vst_j[nDim+4]) ); - Lambda_j[nDim+1] = 0.5*( ProjVelst_j - Vst_j[nDim+4] - fabs(ProjVelst_j - Vst_j[nDim+4]) ); + Lambda[nDim] = fmin(ProjVelst_j + Vst_j[nDim + 4], 0); + Lambda[nDim + 1] = fmin(ProjVelst_j - Vst_j[nDim+4], 0); /*--- Compute projected P, invP, and Lambda ---*/ @@ -231,24 +156,8 @@ CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { /*--- Projected flux (f-) ---*/ - for (iVar = 0; iVar < nVar; iVar++) { - for (jVar = 0; jVar < nVar; jVar++) { - Proj_ModJac_Tensor_j = 0.0; - /*--- Compute Proj_ModJac_Tensor = P x Lambda- x inverse P ---*/ - for (kVar = 0; kVar < nVar; kVar++) - Proj_ModJac_Tensor_j += P_Tensor[iVar][kVar]*Lambda_j[kVar]*invP_Tensor[kVar][jVar]; - Fc_j[iVar] += Proj_ModJac_Tensor_j*U_j[jVar]*Area; - if (implicit) - Jacobian_j[iVar][jVar] += Proj_ModJac_Tensor_j*Area; - } - } - - /*--- Flux splitting, use the i flux as final output. ---*/ - - for (iVar = 0; iVar < nVar; iVar++) { - Fc_i[iVar] += Fc_j[iVar]; - } + UpdateFlux(U_j, Jacobian_j); - return ResidualType<>(Fc_i, Jacobian_i, Jacobian_j); + return ResidualType<>(Fc, Jacobian_i, Jacobian_j); } From 3fc191da3e229ed7d28bfcff2e25d8325b407366 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Thu, 15 Jan 2026 19:49:15 -0800 Subject: [PATCH 010/229] add preacc while at it --- SU2_CFD/src/numerics/flow/convection/fvs.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/SU2_CFD/src/numerics/flow/convection/fvs.cpp b/SU2_CFD/src/numerics/flow/convection/fvs.cpp index df0292535bc8..6781923e3747 100644 --- a/SU2_CFD/src/numerics/flow/convection/fvs.cpp +++ b/SU2_CFD/src/numerics/flow/convection/fvs.cpp @@ -45,6 +45,11 @@ CUpwMSW_Flow::CUpwMSW_Flow(unsigned short val_nDim, unsigned short val_nVar, con CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { + AD::StartPreacc(); + AD::SetPreaccIn(V_i, nDim + 4); + AD::SetPreaccIn(V_j, nDim + 4); + AD::SetPreaccIn(Normal, nDim); + /*--- Set parameters in the numerical method ---*/ const su2double alpha = 6.0; @@ -147,17 +152,20 @@ CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { Lambda[iDim] = fmin(ProjVelst_j, 0); } Lambda[nDim] = fmin(ProjVelst_j + Vst_j[nDim + 4], 0); - Lambda[nDim + 1] = fmin(ProjVelst_j - Vst_j[nDim+4], 0); + Lambda[nDim + 1] = fmin(ProjVelst_j - Vst_j[nDim + 4], 0); /*--- Compute projected P, invP, and Lambda ---*/ - GetPMatrix(&Vst_j[nDim+2], Velst_j, &Vst_j[nDim+4], UnitNormal, P_Tensor); - GetPMatrix_inv(&Vst_j[nDim+2], Velst_j, &Vst_j[nDim+4], UnitNormal, invP_Tensor); + GetPMatrix(&Vst_j[nDim + 2], Velst_j, &Vst_j[nDim + 4], UnitNormal, P_Tensor); + GetPMatrix_inv(&Vst_j[nDim + 2], Velst_j, &Vst_j[nDim + 4], UnitNormal, invP_Tensor); /*--- Projected flux (f-) ---*/ UpdateFlux(U_j, Jacobian_j); + AD::SetPreaccOut(Fc, nVar); + AD::EndPreacc(); + return ResidualType<>(Fc, Jacobian_i, Jacobian_j); } From 10f8639bef38ffdc4420cf888b3a6fdb5ef170e5 Mon Sep 17 00:00:00 2001 From: Nijso Date: Fri, 16 Jan 2026 22:02:51 +0100 Subject: [PATCH 011/229] Flame initialization allowed when restarting (#2710) * fix flame init --- SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp index 4247cea840a8..622a1a6b068f 100644 --- a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp @@ -154,14 +154,16 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** unsigned long ExtIter) { const bool restart = (config->GetRestart() || config->GetRestart_Flow()); - if ((!restart) && ExtIter == 0) { + bool flame_front_ignition = (flamelet_config_options.ignition_method == FLAMELET_INIT_TYPE::FLAME_FRONT); + + /*--- Also allow flame ignition when restarting. ---*/ + if (((!restart) && ExtIter == 0) || (restart && (flamelet_config_options.ignition_method != FLAMELET_INIT_TYPE::NONE))) { if (rank == MASTER_NODE) { cout << "Initializing progress variable and total enthalpy (using temperature)" << endl; } su2double flame_offset[3] = {0, 0, 0}, flame_normal[3] = {0, 0, 0}, flame_thickness = 0, flame_burnt_thickness = 0, flamenorm = 0; - bool flame_front_ignition = (flamelet_config_options.ignition_method == FLAMELET_INIT_TYPE::FLAME_FRONT); if (flame_front_ignition) { /*--- Collect flame front ignition parameters. ---*/ @@ -212,7 +214,6 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** for (unsigned long i_mesh = 0; i_mesh <= config->GetnMGLevels(); i_mesh++) { fluid_model_local = solver_container[i_mesh][FLOW_SOL]->GetFluidModel(); prog_burnt = GetBurntProgressVariable(fluid_model_local, scalar_init); - for (auto iVar = 0u; iVar < nVar; iVar++) scalar_init[iVar] = config->GetSpecies_Init()[iVar]; /*--- Set enthalpy based on initial temperature and scalars. ---*/ @@ -270,6 +271,7 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** solver_container[i_mesh][SPECIES_SOL]->GetNodes()->SetSolution(i_point, scalar_init); } + END_SU2_OMP_FOR solver_container[i_mesh][SPECIES_SOL]->InitiateComms(geometry[i_mesh], config, MPI_QUANTITIES::SOLUTION); solver_container[i_mesh][SPECIES_SOL]->CompleteComms(geometry[i_mesh], config, MPI_QUANTITIES::SOLUTION); @@ -279,7 +281,6 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** solver_container[i_mesh][FLOW_SOL]->Preprocessing(geometry[i_mesh], solver_container[i_mesh], config, i_mesh, NO_RK_ITER, RUNTIME_FLOW_SYS, false); - END_SU2_OMP_FOR } /* --- Sum up some global counters over processes. --- */ From 8ef8e5c0b97d997fcadfdab157d652a16339430f Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 17 Jan 2026 11:03:48 +0100 Subject: [PATCH 012/229] agglomeration only --- Common/include/CConfig.hpp | 8 + .../include/geometry/CMultiGridGeometry.hpp | 44 +- Common/src/geometry/CMultiGridGeometry.cpp | 984 +++++++++++++++--- 3 files changed, 859 insertions(+), 177 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index f198df434761..162ab6035450 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -501,6 +501,7 @@ class CConfig { unsigned short *MG_PreSmooth, /*!< \brief Multigrid Pre smoothing. */ *MG_PostSmooth, /*!< \brief Multigrid Post smoothing. */ *MG_CorrecSmooth; /*!< \brief Multigrid Jacobi implicit smoothing of the correction. */ + bool MG_DebugHaloCoordinates; /*!< \brief Enable halo CV coordinate validation for multigrid. */ su2double *LocationStations; /*!< \brief Airfoil sections in wing slicing subroutine. */ ENUM_MULTIZONE Kind_MZSolver; /*!< \brief Kind of multizone solver. */ @@ -3839,6 +3840,13 @@ class CConfig { return MG_CorrecSmooth[val_mesh]; } + /*!\ + * \brief Get whether halo CV coordinate validation is enabled for multigrid. + * \return True if halo coordinate validation is enabled. + */ + bool GetMG_DebugHaloCoordinates() const { return MG_DebugHaloCoordinates; } + + /*! * \brief plane of the FFD (I axis) that should be fixed. * \param[in] val_index - Index of the arrray with all the planes in the I direction that should be fixed. diff --git a/Common/include/geometry/CMultiGridGeometry.hpp b/Common/include/geometry/CMultiGridGeometry.hpp index 00faa8126c6f..9ae405cf0a9a 100644 --- a/Common/include/geometry/CMultiGridGeometry.hpp +++ b/Common/include/geometry/CMultiGridGeometry.hpp @@ -28,28 +28,29 @@ #pragma once #include "CGeometry.hpp" +class CMultiGridQueue; /*! * \class CMultiGridGeometry - * \brief Class for defining the multigrid geometry, the main delicated part is the + * \brief Class for defining the multigrid geometry, the main delegated part is the * agglomeration stage, which is done in the declaration. * \author F. Palacios */ class CMultiGridGeometry final : public CGeometry { private: /*! - * \brief Determine if a CVPoint van be agglomerated, if it have the same marker point as the seed. + * \brief Determine if a CVPoint can be agglomerated, if it has the same marker point as the seed. * \param[in] CVPoint - Control volume to be agglomerated. * \param[in] marker_seed - Marker of the seed. * \param[in] fine_grid - Geometrical definition of the problem. * \param[in] config - Definition of the particular problem. * \return TRUE or FALSE depending if the control volume can be agglomerated. */ - bool SetBoundAgglomeration(unsigned long CVPoint, short marker_seed, const CGeometry* fine_grid, + bool SetBoundAgglomeration(unsigned long CVPoint, vector marker_seed, const CGeometry* fine_grid, const CConfig* config) const; /*! - * \brief Determine if a can be agglomerated using geometrical criteria. + * \brief Determine if a Point can be agglomerated using geometrical criteria. * \param[in] iPoint - Seed point. * \param[in] fine_grid - Geometrical definition of the problem. * \param[in] config - Definition of the particular problem. @@ -57,7 +58,7 @@ class CMultiGridGeometry final : public CGeometry { bool GeometricalCheck(unsigned long iPoint, const CGeometry* fine_grid, const CConfig* config) const; /*! - * \brief Determine if a CVPoint van be agglomerated, if it have the same marker point as the seed. + * \brief Determine if a CVPoint can be agglomerated, if it has the same marker point as the seed. * \param[out] Suitable_Indirect_Neighbors - List of Indirect Neighbours that can be agglomerated. * \param[in] iPoint - Seed point. * \param[in] Index_CoarseCV - Index of agglomerated point. @@ -66,6 +67,32 @@ class CMultiGridGeometry final : public CGeometry { void SetSuitableNeighbors(vector& Suitable_Indirect_Neighbors, unsigned long iPoint, unsigned long Index_CoarseCV, const CGeometry* fine_grid) const; + /*! + * \brief Agglomerate high-aspect ratio interior cells along implicit lines starting from wall vertices. + * \param[in,out] Index_CoarseCV - Reference to the current coarse control volume index that will be + * incremented as new coarse CVs are created. + * \param[in] fine_grid - Geometrical definition of the problem (fine grid). + * \param[in] config - Definition of the particular problem. + * \param[in,out] MGQueue_InnerCV - Queue used for STEP 2; agglomerated points will be removed from it. + */ + void AgglomerateImplicitLines(unsigned long& Index_CoarseCV, const CGeometry* fine_grid, const CConfig* config, + CMultiGridQueue& MGQueue_InnerCV); + + /*! + * \brief Compute surface straightness for multigrid geometry. + * \param[in] config - Definition of the particular problem. + */ + void ComputeSurfStraightness(CConfig* config); + + /*! + * \brief Compute local curvature at a boundary vertex on Euler wall. + * \param[in] fine_grid - Fine grid geometry. + * \param[in] iPoint - Point index. + * \param[in] iMarker - Marker index. + * \return Maximum angle (in degrees) between this vertex normal and adjacent vertex normals. + */ + su2double ComputeLocalCurvature(const CGeometry* fine_grid, unsigned long iPoint, unsigned short iMarker) const; + public: /*--- This is to suppress Woverloaded-virtual, omitting it has no negative impact. ---*/ using CGeometry::SetBoundControlVolume; @@ -154,4 +181,11 @@ class CMultiGridGeometry final : public CGeometry { * \param[in] val_marker - Index of the boundary marker. */ void SetMultiGridWallTemperature(const CGeometry* fine_grid, unsigned short val_marker) override; + + /*! + * \brief Validate that halo CV coordinates match corresponding domain CVs on remote ranks (debug feature). + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Multigrid level for reporting. + */ + void ValidateHaloCoordinates(const CConfig* config, unsigned short iMesh) const; }; diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index a52d111237cb..e55c98905924 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -29,20 +29,38 @@ #include "../../include/geometry/CMultiGridQueue.hpp" #include "../../include/toolboxes/printing_toolbox.hpp" #include "../../../Common/include/toolboxes/geometry_toolbox.hpp" - +#include +#include +#include +#include +#include +#include +#include + +/*--- Nijso says: this could perhaps be replaced by metis partitioning? ---*/ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, unsigned short iMesh) : CGeometry() { + nDim = fine_grid->GetnDim(); // Write the number of dimensions of the coarse grid. - /*--- Create a queue system to do the agglomeration + /*--- Maximum agglomeration size in 2D is 4 nodes, in 3D is 8 nodes. ---*/ + const short int maxAgglomSize = (nDim == 2) ? 4 : 8; + + /*--- Inherit boundary properties from fine grid ---*/ + boundIsStraight = fine_grid->boundIsStraight; + + /*--- Agglomeration Scheme II (Nishikawa, Diskin, Thomas) + Create a queue system to do the agglomeration 1st) More than two markers ---> Vertices (never agglomerate) 2nd) Two markers ---> Edges (agglomerate if same BC, never agglomerate if different BC) 3rd) One marker ---> Surface (always agglomerate) 4th) No marker ---> Internal Volume (always agglomerate) ---*/ + //note that for MPI, we introduce interfaces and we can choose to have agglomeration over + //the interface or not. Nishikawa chooses not to agglomerate over interfaces. + /*--- Set a marker to indicate indirect agglomeration, for quads and hexs, i.e. consider up to neighbors of neighbors of neighbors. For other levels this information is propagated down during their construction. ---*/ - if (iMesh == MESH_1) { for (auto iPoint = 0ul; iPoint < fine_grid->GetnPoint(); iPoint++) fine_grid->nodes->SetAgglomerate_Indirect(iPoint, false); @@ -59,7 +77,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } /*--- Create the coarse grid structure using as baseline the fine grid ---*/ - CMultiGridQueue MGQueue_InnerCV(fine_grid->GetnPoint()); vector Suitable_Indirect_Neighbors; @@ -67,15 +84,27 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un unsigned long Index_CoarseCV = 0; - /*--- The first step is the boundary agglomeration. ---*/ + /*--- Statistics for Euler wall agglomeration ---*/ + map euler_wall_agglomerated, euler_wall_rejected_curvature, + euler_wall_rejected_straight; + for (unsigned short iMarker = 0; iMarker < fine_grid->GetnMarker(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + euler_wall_agglomerated[iMarker] = 0; + euler_wall_rejected_curvature[iMarker] = 0; + euler_wall_rejected_straight[iMarker] = 0; + } + } + /*--- STEP 1: The first step is the boundary agglomeration. ---*/ for (auto iMarker = 0u; iMarker < fine_grid->GetnMarker(); iMarker++) { + cout << "marker name = " << config->GetMarker_All_TagBound(iMarker) << endl; for (auto iVertex = 0ul; iVertex < fine_grid->GetnVertex(iMarker); iVertex++) { const auto iPoint = fine_grid->vertex[iMarker][iVertex]->GetNode(); /*--- If the element has not been previously agglomerated and it - belongs to this physical domain, and it meets the geometrical - criteria, the agglomeration is studied. ---*/ + belongs to this physical domain, and it meets the geometrical + criteria, the agglomeration is studied. ---*/ + vector marker_seed; if ((!fine_grid->nodes->GetAgglomerate(iPoint)) && (fine_grid->nodes->GetDomain(iPoint)) && (GeometricalCheck(iPoint, fine_grid, config))) { @@ -89,58 +118,131 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- We add the seed point (child) to the parent control volume ---*/ nodes->SetChildren_CV(Index_CoarseCV, 0, iPoint); - bool agglomerate_seed = true; + bool agglomerate_seed = false; auto counter = 0; unsigned short copy_marker[3] = {}; - const auto marker_seed = iMarker; + marker_seed.push_back(iMarker); /*--- For a particular point in the fine grid we save all the markers that are in that point ---*/ - for (auto jMarker = 0u; jMarker < fine_grid->GetnMarker() && counter < 3; jMarker++) { + for (auto jMarker = 0u; jMarker < fine_grid->GetnMarker(); jMarker++) { + const string Marker_Tag = config->GetMarker_All_TagBound(iMarker); // fine_grid->GetMarker_Tag(jMarker); if (fine_grid->nodes->GetVertex(iPoint, jMarker) != -1) { copy_marker[counter] = jMarker; counter++; + + if (jMarker != iMarker) { + marker_seed.push_back(jMarker); + } } } - /*--- To aglomerate a vertex it must have only one physical bc!! - This can be improved. If there is only a marker, it is a good + /*--- To agglomerate a vertex it must have only one physical bc!! + This can be improved. If there is only one marker, it is a good candidate for agglomeration ---*/ + /*--- 1 BC, so either an edge in 2D or the interior of a plane in 3D ---*/ + /*--- Valley -> Valley : conditionally allowed when both points are on the same marker. ---*/ + /*--- ! Note that in the case of MPI SEND_RECEIVE markers, we might need other conditions ---*/ if (counter == 1) { + cout << "we have exactly one marker at point " << iPoint << endl; + cout << " marker is " << marker_seed[0] + << ", marker name = " << config->GetMarker_All_TagBound(marker_seed[0]); + cout << ", marker type = " << config->GetMarker_All_KindBC(marker_seed[0]) << endl; + // The seed/parent is one valley, so we set this part to true + // if the child is only on this same valley, we set it to true as well. agglomerate_seed = true; - - /*--- Euler walls can be curved and agglomerating them leads to difficulties ---*/ - if (config->GetMarker_All_KindBC(marker_seed) == EULER_WALL) agglomerate_seed = false; + /*--- Euler walls: check curvature-based agglomeration criterion ---*/ + if (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL) { + /*--- Allow agglomeration if marker is straight OR local curvature is small ---*/ + if (!boundIsStraight[marker_seed[0]]) { + /*--- Compute local curvature at this point ---*/ + su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, marker_seed[0]); + // limit to 30 degrees + if (local_curvature >= 30.0) { + agglomerate_seed = false; // High curvature: do not agglomerate + euler_wall_rejected_curvature[marker_seed[0]]++; + } else { + euler_wall_agglomerated[marker_seed[0]]++; + } + } else { + /*--- Straight wall: agglomerate ---*/ + euler_wall_agglomerated[marker_seed[0]]++; + } + } + /*--- Note that if the marker is a SEND_RECEIVE, then the node is actually an interior point. + In that case it can only be agglomerated with another interior point. ---*/ + /*--- Temporarily don't agglomerate SEND_RECEIVE markers---*/ + if (config->GetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE) { + agglomerate_seed = false; + } } + /*--- If there are two markers, we will agglomerate if any of the markers is SEND_RECEIVE ---*/ + /*--- Note that in 2D, this is a corner and we do not agglomerate. ---*/ + /*--- In 3D, we agglomerate if the 2 markers are the same. ---*/ if (counter == 2) { - agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || - (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE); - /* --- Euler walls can also not be agglomerated when the point has 2 markers ---*/ - if ((config->GetMarker_All_KindBC(copy_marker[0]) == EULER_WALL) || - (config->GetMarker_All_KindBC(copy_marker[1]) == EULER_WALL)) { - agglomerate_seed = false; + /*--- Only agglomerate if one of the 2 markers are MPI markers. ---*/ + //agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || + // (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE); + /*--- Do not agglomerate if one of the 2 markers are MPI markers. ---*/ + agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) != SEND_RECEIVE) && + (config->GetMarker_All_KindBC(copy_marker[1]) != SEND_RECEIVE); + + /*--- Euler walls: check curvature-based agglomeration criterion for both markers ---*/ + bool euler_wall_rejected_here = false; + for (unsigned short i = 0; i < 2; i++) { + if (config->GetMarker_All_KindBC(copy_marker[i]) == EULER_WALL) { + if (!boundIsStraight[copy_marker[i]]) { + /*--- Compute local curvature at this point ---*/ + su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, copy_marker[i]); + // limit to 30 degrees + if (local_curvature >= 30.0) { + agglomerate_seed = false; // High curvature: do not agglomerate + euler_wall_rejected_curvature[copy_marker[i]]++; + euler_wall_rejected_here = true; + } + } + /*--- Track agglomeration if not rejected ---*/ + if (agglomerate_seed && !euler_wall_rejected_here) { + euler_wall_agglomerated[copy_marker[i]]++; + } + } } + + /*--- In 2D, corners are not agglomerated, but in 3D counter=2 means we are on the + edge of a 2D face. In that case, agglomerate if both nodes are the same. ---*/ + // if (nDim == 2) agglomerate_seed = false; } /*--- If there are more than 2 markers, the aglomeration will be discarded ---*/ if (counter > 2) agglomerate_seed = false; + // note that if one of the markers is SEND_RECEIVE, then we could allow agglomeration since + // the real number of markers is then 2. - /*--- If the seed can be agglomerated, we try to agglomerate more points ---*/ - + /*--- If the seed (parent) can be agglomerated, we try to agglomerate connected childs to the parent ---*/ + /*--- Note that in 2D we allow a maximum of 4 nodes to be agglomerated ---*/ if (agglomerate_seed) { + // cout << " seed can be agglomerated to more points." << endl; /*--- Now we do a sweep over all the nodes that surround the seed point ---*/ for (auto CVPoint : fine_grid->nodes->GetPoints(iPoint)) { - /*--- The new point can be agglomerated ---*/ + // cout << " checking child CVPoint = " + // << CVPoint + // << ", coord = " + // << fine_grid->nodes->GetCoord(CVPoint, 0) + // << " " + // << fine_grid->nodes->GetCoord(CVPoint, 1) + // << endl; + /*--- The new point can be agglomerated ---*/ if (SetBoundAgglomeration(CVPoint, marker_seed, fine_grid, config)) { + // cout << " agglomerate " << CVPoint << " with seed point "<< iPoint << endl; /*--- We set the value of the parent ---*/ fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); @@ -149,38 +251,53 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un nodes->SetChildren_CV(Index_CoarseCV, nChildren, CVPoint); nChildren++; + /*--- In 2D, we agglomerate exactly 2 nodes if the nodes are on the line edge. ---*/ + if ((nDim == 2) && (counter == 1)) break; + /*--- In 3D, we agglomerate exactly 2 nodes if the nodes are on the surface edge. ---*/ + if ((nDim == 3) && (counter == 2)) break; + /*--- Apply maxAgglomSize limit for 3D internal boundary face nodes (counter==1 in 3D). ---*/ + if (nChildren == maxAgglomSize) break; } } - Suitable_Indirect_Neighbors.clear(); - - if (fine_grid->nodes->GetAgglomerate_Indirect(iPoint)) - SetSuitableNeighbors(Suitable_Indirect_Neighbors, iPoint, Index_CoarseCV, fine_grid); - - /*--- Now we do a sweep over all the indirect nodes that can be added ---*/ - - for (auto CVPoint : Suitable_Indirect_Neighbors) { - /*--- The new point can be agglomerated ---*/ - - if (SetBoundAgglomeration(CVPoint, marker_seed, fine_grid, config)) { - /*--- We set the value of the parent ---*/ - - fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); - - /*--- We set the indirect agglomeration information of the corse point - based on its children in the fine grid. ---*/ - - if (fine_grid->nodes->GetAgglomerate_Indirect(CVPoint)) - nodes->SetAgglomerate_Indirect(Index_CoarseCV, true); - - /*--- We set the value of the child ---*/ - - nodes->SetChildren_CV(Index_CoarseCV, nChildren, CVPoint); - nChildren++; + /*--- Only take into account indirect neighbors for 3D faces, not 2D. ---*/ + if (nDim == 3) { + Suitable_Indirect_Neighbors.clear(); + + if (fine_grid->nodes->GetAgglomerate_Indirect(iPoint)) + SetSuitableNeighbors(Suitable_Indirect_Neighbors, iPoint, Index_CoarseCV, fine_grid); + + /*--- Now we do a sweep over all the indirect nodes that can be added ---*/ + for (auto CVPoint : Suitable_Indirect_Neighbors) { + // cout << " Boundary: checking indirect neighbors " << CVPoint + // << ", coord = " + // << fine_grid->nodes->GetCoord(CVPoint, 0) + // << " " + // << fine_grid->nodes->GetCoord(CVPoint, 1) + // << endl; + /*--- The new point can be agglomerated ---*/ + if (SetBoundAgglomeration(CVPoint, marker_seed, fine_grid, config)) { + // cout << " Boundary: indirect neighbor " << CVPoint << " can be agglomerated." << endl; + /*--- We set the value of the parent ---*/ + fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); + + /*--- We set the indirect agglomeration information of the corse point + based on its children in the fine grid. ---*/ + if (fine_grid->nodes->GetAgglomerate_Indirect(CVPoint)) + nodes->SetAgglomerate_Indirect(Index_CoarseCV, true); + + /*--- We set the value of the child ---*/ + nodes->SetChildren_CV(Index_CoarseCV, nChildren, CVPoint); + nChildren++; + /*--- Apply maxAgglomSize limit for 3D internal boundary face nodes. ---*/ + if (nChildren == maxAgglomSize) break; + } } } } + /*--- At this stage we can check if the node is an isolated node. ---*/ + /*--- Update the number of children of the coarse control volume. ---*/ nodes->SetnChildren_CV(Index_CoarseCV, nChildren); @@ -195,8 +312,10 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un for (auto iMarker = 0u; iMarker < fine_grid->GetnMarker(); iMarker++) { for (auto iVertex = 0ul; iVertex < fine_grid->GetnVertex(iMarker); iVertex++) { const auto iPoint = fine_grid->vertex[iMarker][iVertex]->GetNode(); - + // cout << "point " << iPoint << ", parent = " << fine_grid->nodes->GetParent_CV(iPoint) + // << " " << fine_grid->nodes->GetAgglomerate(iPoint) << endl; if ((!fine_grid->nodes->GetAgglomerate(iPoint)) && (fine_grid->nodes->GetDomain(iPoint))) { + // cout << " Boundary:mark left-over nodes " << endl; fine_grid->nodes->SetParent_CV(iPoint, Index_CoarseCV); nodes->SetChildren_CV(Index_CoarseCV, 0, iPoint); nodes->SetnChildren_CV(Index_CoarseCV, 1); @@ -223,8 +342,10 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } - /*--- Agglomerate the domain points. ---*/ + + /*--- STEP 2: Agglomerate the domain points. ---*/ + // cout << "*********** STEP 2 ***" << endl; auto iteration = 0ul; while (!MGQueue_InnerCV.EmptyQueue() && (iteration < fine_grid->GetnPoint())) { const auto iPoint = MGQueue_InnerCV.NextCV(); @@ -236,6 +357,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if ((!fine_grid->nodes->GetAgglomerate(iPoint)) && (fine_grid->nodes->GetDomain(iPoint)) && (GeometricalCheck(iPoint, fine_grid, config))) { unsigned short nChildren = 1; + // cout << "***** internal seed point " << iPoint << ", coord = " << fine_grid->nodes->GetCoord(iPoint, 0) << " " + // << fine_grid->nodes->GetCoord(iPoint, 1) << endl; /*--- We set an index for the parent control volume ---*/ @@ -258,7 +381,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if ((!fine_grid->nodes->GetAgglomerate(CVPoint)) && (fine_grid->nodes->GetDomain(CVPoint)) && (GeometricalCheck(CVPoint, fine_grid, config))) { /*--- We set the value of the parent ---*/ - + // cout << "agglomerate " << CVPoint << " to internal seed point " << iPoint << endl; fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); /*--- We set the value of the child ---*/ @@ -271,6 +394,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un MGQueue_InnerCV.Update(CVPoint, fine_grid); } + if (nChildren == maxAgglomSize) break; } /*--- Identify the indirect neighbors ---*/ @@ -282,11 +406,13 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Now we do a sweep over all the indirect nodes that can be added ---*/ for (auto CVPoint : Suitable_Indirect_Neighbors) { + // if we have reached the maximum, get out. + if (nChildren == maxAgglomSize) break; /*--- The new point can be agglomerated ---*/ - if ((!fine_grid->nodes->GetAgglomerate(CVPoint)) && (fine_grid->nodes->GetDomain(CVPoint))) { - /*--- We set the value of the parent ---*/ + // cout << "indirect agglomerate " << CVPoint << " to internal seed point " << iPoint << endl; + /*--- We set the value of the parent ---*/ fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); /*--- We set the indirect agglomeration information ---*/ @@ -321,6 +447,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un for (auto iPoint = 0ul; iPoint < fine_grid->GetnPoint(); iPoint++) { if ((!fine_grid->nodes->GetAgglomerate(iPoint)) && (fine_grid->nodes->GetDomain(iPoint))) { + cout << "!!! agglomerate isolated point " << iPoint << endl; fine_grid->nodes->SetParent_CV(iPoint, Index_CoarseCV); if (fine_grid->nodes->GetAgglomerate_Indirect(iPoint)) nodes->SetAgglomerate_Indirect(Index_CoarseCV, true); nodes->SetChildren_CV(Index_CoarseCV, 0, iPoint); @@ -340,16 +467,63 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un for (auto iCoarsePoint = 0ul; iCoarsePoint < nPointDomain; iCoarsePoint++) { if (nodes->GetnPoint(iCoarsePoint) == 1) { /*--- Find the neighbor of the isolated point. This neighbor is the right control volume ---*/ - + cout << "isolated point " << iCoarsePoint << endl; const auto iCoarsePoint_Complete = nodes->GetPoint(iCoarsePoint, 0); - /*--- Add the children to the connected control volume (and modify its parent indexing). - Identify the child CV from the finest grid and add it to the correct control volume. - Set the parent CV of iFinePoint. Instead of using the original one - (iCoarsePoint), use the new one (iCoarsePoint_Complete) ---*/ + /*--- Check if merging would exceed the maximum agglomeration size ---*/ + auto nChildren_Target = nodes->GetnChildren_CV(iCoarsePoint_Complete); + auto nChildren_Isolated = nodes->GetnChildren_CV(iCoarsePoint); + auto nChildren_Total = nChildren_Target + nChildren_Isolated; + + /*--- If the total would exceed maxAgglomSize, try to redistribute children to neighbors ---*/ + if (nChildren_Total > maxAgglomSize) { + cout << " Merging isolated point " << iCoarsePoint << " to point " << iCoarsePoint_Complete + << " would exceed limit (" << nChildren_Total << " > " << maxAgglomSize << ")" << endl; + + /*--- Find neighbors of the target coarse point that have room ---*/ + unsigned short nChildrenToRedistribute = nChildren_Total - maxAgglomSize; + + for (auto jCoarsePoint : nodes->GetPoints(iCoarsePoint_Complete)) { + if (nChildrenToRedistribute == 0) break; + + auto nChildren_Neighbor = nodes->GetnChildren_CV(jCoarsePoint); + if (nChildren_Neighbor < maxAgglomSize) { + unsigned short nCanTransfer = + min(nChildrenToRedistribute, static_cast(maxAgglomSize - nChildren_Neighbor)); + + cout << " Redistributing " << nCanTransfer << " children from point " << iCoarsePoint_Complete + << " to neighbor " << jCoarsePoint << endl; + + /*--- Transfer children from target to neighbor ---*/ + for (unsigned short iTransfer = 0; iTransfer < nCanTransfer; iTransfer++) { + /*--- Take from the end of the target's children list ---*/ + auto nChildren_Current = nodes->GetnChildren_CV(iCoarsePoint_Complete); + if (nChildren_Current > 0) { + auto iFinePoint = nodes->GetChildren_CV(iCoarsePoint_Complete, nChildren_Current - 1); + + /*--- Add to neighbor ---*/ + auto nChildren_Neighbor_Current = nodes->GetnChildren_CV(jCoarsePoint); + nodes->SetChildren_CV(jCoarsePoint, nChildren_Neighbor_Current, iFinePoint); + nodes->SetnChildren_CV(jCoarsePoint, nChildren_Neighbor_Current + 1); - auto nChildren = nodes->GetnChildren_CV(iCoarsePoint_Complete); + /*--- Update parent ---*/ + fine_grid->nodes->SetParent_CV(iFinePoint, jCoarsePoint); + /*--- Remove from target (by reducing count) ---*/ + nodes->SetnChildren_CV(iCoarsePoint_Complete, nChildren_Current - 1); + + nChildrenToRedistribute--; + } + } + } + } + + /*--- Update the target's child count after redistribution ---*/ + nChildren_Target = nodes->GetnChildren_CV(iCoarsePoint_Complete); + } + + /*--- Add the isolated point's children to the target control volume ---*/ + auto nChildren = nChildren_Target; for (auto iChildren = 0u; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { const auto iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); nodes->SetChildren_CV(iCoarsePoint_Complete, nChildren, iFinePoint); @@ -358,9 +532,10 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } /*--- Update the number of children control volumes ---*/ - nodes->SetnChildren_CV(iCoarsePoint_Complete, nChildren); nodes->SetnChildren_CV(iCoarsePoint, 0); + + cout << " Final: point " << iCoarsePoint_Complete << " has " << nChildren << " children" << endl; } } @@ -369,15 +544,28 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un nodes->ResetPoints(); #ifdef HAVE_MPI + /*--- Reset halo point parents before MPI agglomeration. + This is critical for multi-level multigrid: when creating level N from level N-1, + the fine grid (level N-1) already has Parent_CV set from when it was created from level N-2. + Those parent indices point to level N, but when creating level N+1, they would be + incorrectly interpreted as level N+1 indices. Resetting ensures clean agglomeration. ---*/ + + for (auto iPoint = fine_grid->GetnPointDomain(); iPoint < fine_grid->GetnPoint(); iPoint++) { + fine_grid->nodes->SetParent_CV(iPoint, ULONG_MAX); + } + /*--- Dealing with MPI parallelization, the objective is that the received nodes must be agglomerated in the same way as the donor (send) nodes. Send the node agglomeration information of the donor (parent and children). The agglomerated halos of this rank are set according to the rank where they are domain points. ---*/ for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + cout << " marker name = " << config->GetMarker_All_TagBound(iMarker) << endl; + cout << " marker type = " << config->GetMarker_All_KindBC(iMarker) << endl; + cout << " send/recv = " << config->GetMarker_All_SendRecv(iMarker) << endl; if ((config->GetMarker_All_KindBC(iMarker) == SEND_RECEIVE) && (config->GetMarker_All_SendRecv(iMarker) > 0)) { - const auto MarkerS = iMarker; - const auto MarkerR = iMarker + 1; + const auto MarkerS = iMarker; // sending marker + const auto MarkerR = iMarker + 1; // receiving marker const auto send_to = config->GetMarker_All_SendRecv(MarkerS) - 1; const auto receive_from = abs(config->GetMarker_All_SendRecv(MarkerR)) - 1; @@ -424,38 +612,260 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un vector Parent_Local(nVertexR); vector Children_Local(nVertexR); + /*--- First pass: Determine which parents will actually be used (have non-skipped children). + This prevents creating orphaned halo CVs that have coordinates (0,0,0). ---*/ + vector parent_used(Aux_Parent.size(), false); + vector parent_local_index(Aux_Parent.size(), ULONG_MAX); + for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { - /*--- We use the same sorting as in the donor domain, i.e. the local parents - are numbered according to their order in the remote rank. ---*/ + const auto iPoint_Fine = fine_grid->vertex[MarkerR][iVertex]->GetNode(); + auto existing_parent = fine_grid->nodes->GetParent_CV(iPoint_Fine); + /*--- Skip if already agglomerated (first-wins policy) ---*/ + if (existing_parent != ULONG_MAX) continue; + + /*--- Find which parent this vertex maps to ---*/ for (auto jVertex = 0ul; jVertex < Aux_Parent.size(); jVertex++) { if (Parent_Remote[iVertex] == Aux_Parent[jVertex]) { - Parent_Local[iVertex] = jVertex + Index_CoarseCV; + parent_used[jVertex] = true; break; } } + } + + /*--- Assign local indices only to used parents ---*/ + unsigned long nUsedParents = 0; + for (auto jVertex = 0ul; jVertex < Aux_Parent.size(); jVertex++) { + if (parent_used[jVertex]) { + parent_local_index[jVertex] = Index_CoarseCV + nUsedParents; + nUsedParents++; + } + } + + /*--- Now map each received vertex to its local parent ---*/ + for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { + Parent_Local[iVertex] = ULONG_MAX; + for (auto jVertex = 0ul; jVertex < Aux_Parent.size(); jVertex++) { + if (Parent_Remote[iVertex] == Aux_Parent[jVertex]) { + Parent_Local[iVertex] = parent_local_index[jVertex]; + break; + } + } + + /*--- Validate that parent mapping was found (only matters if not skipped later) ---*/ + if (Parent_Local[iVertex] == ULONG_MAX) { + SU2_MPI::Error(string("MPI agglomeration failed to map parent index ") + + to_string(Parent_Remote[iVertex]) + + string(" for vertex ") + to_string(iVertex), + CURRENT_FUNCTION); + } + Children_Local[iVertex] = fine_grid->vertex[MarkerR][iVertex]->GetNode(); } - Index_CoarseCV += Aux_Parent.size(); + /*--- Debug: Track state before updating Index_CoarseCV ---*/ + //auto Index_CoarseCV_Before = Index_CoarseCV; + + /*--- Only increment by the number of parents that will actually be used ---*/ + Index_CoarseCV += nUsedParents; - vector nChildren_MPI(Index_CoarseCV, 0); + /*--- Debug counters ---*/ + unsigned long nConflicts = 0, nSkipped = 0, nOutOfBounds = 0, nSuccess = 0; /*--- Create the final structure ---*/ for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { const auto iPoint_Coarse = Parent_Local[iVertex]; const auto iPoint_Fine = Children_Local[iVertex]; - /*--- Be careful, it is possible that a node changes the agglomeration configuration, - the priority is always when receiving the information. ---*/ + /*--- Debug: Check for out-of-bounds access ---*/ + if (iPoint_Coarse >= Index_CoarseCV) { + cout << "ERROR [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR + << "]: Out-of-bounds coarse CV index " << iPoint_Coarse + << " >= " << Index_CoarseCV + << " (vertex " << iVertex << ", fine point " << iPoint_Fine << ")" << endl; + nOutOfBounds++; + continue; + } + + /*--- Solution 1: Skip if this halo point was already agglomerated ---*/ + auto existing_parent = fine_grid->nodes->GetParent_CV(iPoint_Fine); + if (existing_parent != ULONG_MAX) { + if (existing_parent != iPoint_Coarse) { + /*--- Conflict detected: different parent from different interface ---*/ + nConflicts++; + + /*--- Only print detailed info for first few conflicts or if suspicious ---*/ + if (nConflicts <= 5 || existing_parent < nPointDomain) { + cout << "INFO [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR + << "]: Halo point " << iPoint_Fine + << " already agglomerated to parent " << existing_parent + << (existing_parent < nPointDomain ? " (DOMAIN CV!)" : " (halo CV)") + << ", skipping reassignment to " << iPoint_Coarse + << " (from rank " << receive_from << ")" << endl; + } + } else { + /*--- Same parent from different interface (duplicate) - just skip silently ---*/ + nSkipped++; + } + continue; // First-wins: keep existing assignment + } + + /*--- First assignment for this halo point - proceed with agglomeration ---*/ + + /*--- Critical fix: Append to existing children, don't overwrite ---*/ + auto existing_children_count = nodes->GetnChildren_CV(iPoint_Coarse); + fine_grid->nodes->SetParent_CV(iPoint_Fine, iPoint_Coarse); - nodes->SetChildren_CV(iPoint_Coarse, nChildren_MPI[iPoint_Coarse], iPoint_Fine); - nChildren_MPI[iPoint_Coarse]++; - nodes->SetnChildren_CV(iPoint_Coarse, nChildren_MPI[iPoint_Coarse]); + nodes->SetChildren_CV(iPoint_Coarse, existing_children_count, iPoint_Fine); + nodes->SetnChildren_CV(iPoint_Coarse, existing_children_count + 1); nodes->SetDomain(iPoint_Coarse, false); + nSuccess++; + } + + /*--- Debug: Report statistics for this marker pair ---*/ + cout << "MPI Agglomeration [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR + << " (rank " << send_to << " <-> " << receive_from << ")]: " + << nSuccess << " assigned, " << nSkipped << " duplicates, " + << nConflicts << " conflicts"; + if (nOutOfBounds > 0) { + cout << ", " << nOutOfBounds << " OUT-OF-BOUNDS (CRITICAL!)"; + } + cout << endl; + + if (nConflicts > 5) { + cout << " Note: Only first 5 conflicts shown in detail, total conflicts = " << nConflicts << endl; + } + + /*--- Debug: Validate buffer size assumption ---*/ + if (nVertexS != nVertexR) { + cout << "WARNING [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR + << "]: Asymmetric interface - nVertexS=" << nVertexS + << " != nVertexR=" << nVertexR << endl; + } + } + } + + /*--- Post-process: Check for orphaned coarse CVs (should be none with new logic) ---*/ + + if (size > SINGLE_NODE) { + unsigned long nOrphaned = 0; + + /*--- Count orphaned CVs for reporting ---*/ + for (auto iCoarse = nPointDomain; iCoarse < Index_CoarseCV; iCoarse++) { + if (nodes->GetnChildren_CV(iCoarse) == 0) { + nOrphaned++; + /*--- This shouldn't happen with the new parent prefiltering logic ---*/ + cout << "WARNING [Rank " << rank << "]: Orphaned halo CV " << iCoarse + << " detected (should not occur with current logic)" << endl; + } + } + + if (nOrphaned > 0) { + cout << "WARNING [Rank " << rank << "]: " << nOrphaned + << " orphaned halo coarse CVs found - this indicates a logic error!" << endl; + } + } + + /*--- Debug validation: Verify halo CV coordinates match domain CVs on remote ranks ---*/ + /*--- Note: This validation is deferred until after SetVertex() is called, as vertices ---*/ + /*--- are not yet initialized at the end of the constructor. The validation is performed ---*/ + /*--- by calling ValidateHaloCoordinates() after SetVertex() in the driver. ---*/ + + /*--- For now, we skip this validation in the constructor to avoid segfaults. ---*/ + /*--- TODO: Move this to a separate validation function called after SetVertex(). ---*/ + +#if 0 // Disabled - causes segfault as vertex array not yet initialized + if (size > SINGLE_NODE && config->GetMG_DebugHaloCoordinates()) { + + if (rank == MASTER_NODE) { + cout << "\n--- MG Halo Coordinate Validation (Level " << iMesh << ") ---" << endl; + } + + /*--- For each SEND_RECEIVE marker pair, exchange coordinates and validate ---*/ + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if ((config->GetMarker_All_KindBC(iMarker) == SEND_RECEIVE) && (config->GetMarker_All_SendRecv(iMarker) > 0)) { + const auto MarkerS = iMarker; + const auto MarkerR = iMarker + 1; + + const auto send_to = config->GetMarker_All_SendRecv(MarkerS) - 1; + const auto receive_from = abs(config->GetMarker_All_SendRecv(MarkerR)) - 1; + + const auto nVertexS = nVertex[MarkerS]; + const auto nVertexR = nVertex[MarkerR]; + + /*--- Allocate buffers for coordinate exchange ---*/ + vector Buffer_Send_Coord(nVertexS * nDim); + vector Buffer_Receive_Coord(nVertexR * nDim); + + /*--- Pack SEND coordinates (domain CVs being sent) ---*/ + for (auto iVertex = 0ul; iVertex < nVertexS; iVertex++) { + const auto iPoint = vertex[MarkerS][iVertex]->GetNode(); + const auto* Coord = nodes->GetCoord(iPoint); + for (auto iDim = 0u; iDim < nDim; iDim++) { + Buffer_Send_Coord[iVertex * nDim + iDim] = Coord[iDim]; + } + } + + /*--- Exchange coordinates ---*/ + SU2_MPI::Sendrecv(Buffer_Send_Coord.data(), nVertexS * nDim, MPI_DOUBLE, send_to, 0, + Buffer_Receive_Coord.data(), nVertexR * nDim, MPI_DOUBLE, receive_from, 0, + SU2_MPI::GetComm(), MPI_STATUS_IGNORE); + + /*--- Validate RECEIVE coordinates against local halo CVs ---*/ + unsigned long nMismatch = 0; + su2double maxError = 0.0; + su2double tolerance = 1e-10; + + for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { + const auto iPoint = vertex[MarkerR][iVertex]->GetNode(); + const auto* Coord_Local = nodes->GetCoord(iPoint); + + su2double error = 0.0; + for (auto iDim = 0u; iDim < nDim; iDim++) { + su2double coord_remote = Buffer_Receive_Coord[iVertex * nDim + iDim]; + su2double diff = fabs(Coord_Local[iDim] - coord_remote); + error += diff * diff; + } + error = sqrt(error); + + if (error > tolerance) { + nMismatch++; + maxError = max(maxError, error); + + if (nMismatch <= 5) { // Only print first 5 mismatches + cout << "COORD MISMATCH [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR + << ", Vertex " << iVertex << ", Point " << iPoint << "]: "; + cout << "Local=("; + for (auto iDim = 0u; iDim < nDim; iDim++) { + cout << Coord_Local[iDim]; + if (iDim < nDim - 1) cout << ", "; + } + cout << "), Remote=("; + for (auto iDim = 0u; iDim < nDim; iDim++) { + cout << Buffer_Receive_Coord[iVertex * nDim + iDim]; + if (iDim < nDim - 1) cout << ", "; + } + cout << "), Error=" << error << endl; + } + } + } + + if (nMismatch > 0) { + cout << "WARNING [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR + << "]: " << nMismatch << " coordinate mismatches detected (max error: " + << maxError << ")" << endl; + } else if (nVertexR > 0) { + cout << "INFO [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR + << "]: All " << nVertexR << " halo CV coordinates match (tol=" << tolerance << ")" << endl; + } } } + + if (rank == MASTER_NODE) { + cout << "--- End MG Halo Coordinate Validation ---\n" << endl; + } } +#endif // Disabled validation code #endif // HAVE_MPI /*--- Update the number of points after the MPI agglomeration ---*/ @@ -463,25 +873,27 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un nPoint = Index_CoarseCV; /*--- Console output with the summary of the agglomeration ---*/ - - unsigned long nPointFine = fine_grid->GetnPoint(); + // nijso: do not include halo points in the count + unsigned long nPointFine = fine_grid->GetnPointDomain(); unsigned long Global_nPointCoarse, Global_nPointFine; - SU2_MPI::Allreduce(&nPoint, &Global_nPointCoarse, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); + SU2_MPI::Allreduce(&nPointDomain, &Global_nPointCoarse, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); SU2_MPI::Allreduce(&nPointFine, &Global_nPointFine, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); SetGlobal_nPointDomain(Global_nPointCoarse); if (iMesh != MESH_0) { - const su2double factor = 1.5; - const su2double Coeff = pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); - const su2double CFL = factor * config->GetCFL(iMesh - 1) / Coeff; + // const su2double factor = 1.5; //nijso: too high + const su2double factor = 1.1; + // const su2double Coeff = pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); + const su2double CFL = factor * config->GetCFL(iMesh - 1); // / Coeff; config->SetCFL(iMesh, CFL); } const su2double ratio = su2double(Global_nPointFine) / su2double(Global_nPointCoarse); - - if (((nDim == 2) && (ratio < 2.5)) || ((nDim == 3) && (ratio < 2.5))) { + cout << "********** ratio = " << ratio << endl; + // lower value leads to more levels being accepted. + if (((nDim == 2) && (ratio < 1.5)) || ((nDim == 3) && (ratio < 1.5))) { config->SetMGLevels(iMesh - 1); } else if (rank == MASTER_NODE) { PrintingToolbox::CTablePrinter MGTable(&std::cout); @@ -503,11 +915,86 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } + /*--- Output Euler wall agglomeration statistics ---*/ + if (rank == MASTER_NODE) { + /*--- Gather global statistics for Euler walls ---*/ + bool has_euler_walls = false; + for (unsigned short iMarker = 0; iMarker < fine_grid->GetnMarker(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + has_euler_walls = true; + break; + } + } + + if (has_euler_walls) { + cout << endl; + cout << "Euler Wall Agglomeration Statistics (45° curvature threshold):" << endl; + cout << "----------------------------------------------------------------" << endl; + + for (unsigned short iMarker = 0; iMarker < fine_grid->GetnMarker(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + string marker_name = config->GetMarker_All_TagBound(iMarker); + unsigned long agglomerated = euler_wall_agglomerated[iMarker]; + unsigned long rejected = euler_wall_rejected_curvature[iMarker]; + unsigned long total = agglomerated + rejected; + + if (total > 0) { + su2double accept_rate = 100.0 * su2double(agglomerated) / su2double(total); + cout << " Marker: " << marker_name << endl; + cout << " Seeds agglomerated: " << agglomerated << " (" << std::setprecision(1) << std::fixed + << accept_rate << "%)" << endl; + cout << " Seeds rejected (>45° curv): " << rejected << " (" << std::setprecision(1) << std::fixed + << (100.0 - accept_rate) << "%)" << endl; + } + } + } + cout << "----------------------------------------------------------------" << endl; + } + } + edgeColorGroupSize = config->GetEdgeColoringGroupSize(); } -bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, short marker_seed, const CGeometry* fine_grid, - const CConfig* config) const { +bool CMultiGridGeometry::GeometricalCheck(unsigned long iPoint, const CGeometry* fine_grid, + const CConfig* config) const { + su2double max_dimension = 1.2; + + /*--- Evaluate the total size of the element ---*/ + + bool Volume = true; + su2double ratio = pow(fine_grid->nodes->GetVolume(iPoint), 1.0 / su2double(nDim)) * max_dimension; + su2double limit = pow(config->GetDomainVolume(), 1.0 / su2double(nDim)); + if (ratio > limit) { + Volume = false; + cout << "Volume limit reached!" << endl; + } + /*--- Evaluate the stretching of the element ---*/ + + bool Stretching = true; + + /* unsigned short iNode, iDim; + unsigned long jPoint; + su2double *Coord_i = fine_grid->nodes->GetCoord(iPoint); + su2double max_dist = 0.0 ; su2double min_dist = 1E20; + for (iNode = 0; iNode < fine_grid->nodes->GetnPoint(iPoint); iNode ++) { + jPoint = fine_grid->nodes->GetPoint(iPoint, iNode); + su2double *Coord_j = fine_grid->nodes->GetCoord(jPoint); + su2double distance = 0.0; + for (iDim = 0; iDim < nDim; iDim++) + distance += (Coord_j[iDim]-Coord_i[iDim])*(Coord_j[iDim]-Coord_i[iDim]); + distance = sqrt(distance); + max_dist = max(distance, max_dist); + min_dist = min(distance, min_dist); + } + if ( max_dist/min_dist > 100.0 ) Stretching = false;*/ + + return (Stretching && Volume); +} + +void CMultiGridGeometry::ComputeSurfStraightness(CConfig* config) { CGeometry::ComputeSurfStraightness(config, true); } + +bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vector marker_seed, + const CGeometry* fine_grid, const CConfig* config) const { bool agglomerate_CV = false; /*--- Basic condition, the point has not been previously agglomerated, it belongs to the domain, @@ -517,12 +1004,13 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, short mark (GeometricalCheck(CVPoint, fine_grid, config))) { /*--- If the point belongs to a boundary, its type must be compatible with the seed marker. ---*/ + int counter = 0; + unsigned short copy_marker[3] = {}; + if (fine_grid->nodes->GetBoundary(CVPoint)) { /*--- Identify the markers of the vertex that we want to agglomerate ---*/ // count number of markers on the agglomeration candidate - int counter = 0; - unsigned short copy_marker[3] = {}; for (auto jMarker = 0u; jMarker < fine_grid->GetnMarker() && counter < 3; jMarker++) { if (fine_grid->nodes->GetVertex(CVPoint, jMarker) != -1) { copy_marker[counter] = jMarker; @@ -530,94 +1018,80 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, short mark } } - /*--- The basic condition is that the aglomerated vertex must have the same physical marker, + /*--- The basic condition is that the agglomerated vertex must have the same physical marker, but eventually a send-receive condition ---*/ - /*--- Only one marker in the vertex that is going to be aglomerated ---*/ + /*--- Only one marker in the vertex that is going to be agglomerated ---*/ + /*--- Valley -> Valley: only if of the same type---*/ if (counter == 1) { /*--- We agglomerate if there is only one marker and it is the same marker as the seed marker ---*/ - // note that this should be the same marker id, not just the same marker type - if (copy_marker[0] == marker_seed) agglomerate_CV = true; - - /*--- If there is only one marker, but the marker is the SEND_RECEIVE ---*/ - - if (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) { - agglomerate_CV = true; + // So this is the case when in 2D we are on an edge, and in 3D we are in the interior of a surface. + // note that this should be the same marker id, not just the same marker type. + // also note that the seed point can have 2 markers, one of them may be a send-receive. + if ((marker_seed.size() == 1) && (copy_marker[0] == marker_seed[0])) agglomerate_CV = true; + if ((marker_seed.size() == 2) && (config->GetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE)) { + if (copy_marker[0] == marker_seed[1]) { + agglomerate_CV = true; + } } - - if ((config->GetMarker_All_KindBC(marker_seed) == SYMMETRY_PLANE) || - (config->GetMarker_All_KindBC(marker_seed) == EULER_WALL)) { - if (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) { - agglomerate_CV = false; + if ((marker_seed.size() == 2) && (config->GetMarker_All_KindBC(marker_seed[1]) == SEND_RECEIVE)) { + if (copy_marker[0] == marker_seed[0]) { + agglomerate_CV = true; } } + + /*--- Note: If there is only one marker, but the marker is the SEND_RECEIVE, then the point is actually an + interior point and we do not agglomerate. ---*/ + + // if ((config->GetMarker_All_KindBC(marker_seed[0]) == SYMMETRY_PLANE) || + // (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL)) { + // if (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) { + // agglomerate_CV = false; + // } + // } } /*--- If there are two markers in the vertex that is going to be aglomerated ---*/ if (counter == 2) { - /*--- First we verify that the seed is a physical boundary ---*/ + /*--- Both markers have to be the same. ---*/ - if (config->GetMarker_All_KindBC(marker_seed) != SEND_RECEIVE) { - /*--- Then we check that one of the markers is equal to the seed marker, and the other is send/receive ---*/ - - if (((copy_marker[0] == marker_seed) && (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)) || - ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) && (copy_marker[1] == marker_seed))) { + if (marker_seed.size() == 2) { + if (((copy_marker[0] == marker_seed[0]) && (copy_marker[1] == marker_seed[1])) || + ((copy_marker[0] == marker_seed[1]) && (copy_marker[1] == marker_seed[0]))) { agglomerate_CV = true; } } } } - /*--- If the element belongs to the domain, it is always agglomerated. ---*/ + /*--- If the element belongs to the domain, it is never agglomerated with a boundary node. ---*/ else { - agglomerate_CV = true; + agglomerate_CV = false; // actually, for symmetry (and possibly other cells) we only agglomerate cells that are on the marker // at this point, the seed was on the boundary and the CV was not. so we check if the seed is a symmetry - if ((config->GetMarker_All_KindBC(marker_seed) == SYMMETRY_PLANE) || - (config->GetMarker_All_KindBC(marker_seed) == EULER_WALL)) { - agglomerate_CV = false; - } + // if ((config->GetMarker_All_KindBC(marker_seed[0]) == SYMMETRY_PLANE) || + // (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL)) { + // agglomerate_CV = false; + // } } + + // /*--- Check for curved EULER_WALL ---*/ + // if (agglomerate_CV && fine_grid->nodes->GetBoundary(CVPoint)) { + // for (int i = 0; i < counter; i++) { + // if (config->GetMarker_All_KindBC(copy_marker[i]) == EULER_WALL && !boundIsStraight[copy_marker[i]]) { + // agglomerate_CV = false; + // break; + // } + // } + // } } return agglomerate_CV; } -bool CMultiGridGeometry::GeometricalCheck(unsigned long iPoint, const CGeometry* fine_grid, - const CConfig* config) const { - su2double max_dimension = 1.2; - - /*--- Evaluate the total size of the element ---*/ - - bool Volume = true; - su2double ratio = pow(fine_grid->nodes->GetVolume(iPoint), 1.0 / su2double(nDim)) * max_dimension; - su2double limit = pow(config->GetDomainVolume(), 1.0 / su2double(nDim)); - if (ratio > limit) Volume = false; - - /*--- Evaluate the stretching of the element ---*/ - - bool Stretching = true; - - /* unsigned short iNode, iDim; - unsigned long jPoint; - su2double *Coord_i = fine_grid->nodes->GetCoord(iPoint); - su2double max_dist = 0.0 ; su2double min_dist = 1E20; - for (iNode = 0; iNode < fine_grid->nodes->GetnPoint(iPoint); iNode ++) { - jPoint = fine_grid->nodes->GetPoint(iPoint, iNode); - su2double *Coord_j = fine_grid->nodes->GetCoord(jPoint); - su2double distance = 0.0; - for (iDim = 0; iDim < nDim; iDim++) - distance += (Coord_j[iDim]-Coord_i[iDim])*(Coord_j[iDim]-Coord_i[iDim]); - distance = sqrt(distance); - max_dist = max(distance, max_dist); - min_dist = min(distance, min_dist); - } - if ( max_dist/min_dist > 100.0 ) Stretching = false;*/ - - return (Stretching && Volume); -} +/*--- ---*/ void CMultiGridGeometry::SetSuitableNeighbors(vector& Suitable_Indirect_Neighbors, unsigned long iPoint, unsigned long Index_CoarseCV, const CGeometry* fine_grid) const { @@ -637,8 +1111,8 @@ void CMultiGridGeometry::SetSuitableNeighbors(vector& Suitable_In auto end = First_Neighbor_Points.end(); if (find(First_Neighbor_Points.begin(), end, kPoint) == end) { - Second_Neighbor_Points.push_back(kPoint); - Second_Origin_Points.push_back(jPoint); + Second_Neighbor_Points.push_back(kPoint); // neighbor of a neighbor, not connected to original ipoint + Second_Origin_Points.push_back(jPoint); // the neighbor that is connected to ipoint } } } @@ -673,48 +1147,49 @@ void CMultiGridGeometry::SetSuitableNeighbors(vector& Suitable_In /// TODO: This repeats the process above but I doubt it catches any more points. - vector Third_Neighbor_Points, Third_Origin_Points; + // vector Third_Neighbor_Points, Third_Origin_Points; - for (auto kPoint : Suitable_Second_Neighbors) { - for (auto lPoint : fine_grid->nodes->GetPoints(kPoint)) { - /*--- Check that the third neighbor does not belong to the first neighbors or the seed ---*/ + // for (auto kPoint : Suitable_Second_Neighbors) { + // for (auto lPoint : fine_grid->nodes->GetPoints(kPoint)) { + // /*--- Check that the third neighbor does not belong to the first neighbors or the seed ---*/ - auto end1 = First_Neighbor_Points.end(); - if (find(First_Neighbor_Points.begin(), end1, lPoint) != end1) continue; + // auto end1 = First_Neighbor_Points.end(); + // if (find(First_Neighbor_Points.begin(), end1, lPoint) != end1) continue; - /*--- Check that the third neighbor does not belong to the second neighbors ---*/ + // /*--- Check that the third neighbor does not belong to the second neighbors ---*/ - auto end2 = Suitable_Second_Neighbors.end(); - if (find(Suitable_Second_Neighbors.begin(), end2, lPoint) != end2) continue; + // auto end2 = Suitable_Second_Neighbors.end(); + // if (find(Suitable_Second_Neighbors.begin(), end2, lPoint) != end2) continue; - Third_Neighbor_Points.push_back(lPoint); - Third_Origin_Points.push_back(kPoint); - } - } + // Third_Neighbor_Points.push_back(lPoint); + // Third_Origin_Points.push_back(kPoint); + // } + // } /*--- Identify those third neighbors that are repeated (candidate to be added). ---*/ - for (auto iNeighbor = 0ul; iNeighbor < Third_Neighbor_Points.size(); iNeighbor++) { - for (auto jNeighbor = iNeighbor + 1; jNeighbor < Third_Neighbor_Points.size(); jNeighbor++) { - /*--- Repeated third neighbor with different origin ---*/ + // for (auto iNeighbor = 0ul; iNeighbor < Third_Neighbor_Points.size(); iNeighbor++) { + // for (auto jNeighbor = iNeighbor + 1; jNeighbor < Third_Neighbor_Points.size(); jNeighbor++) { + // /*--- Repeated third neighbor with different origin ---*/ - if ((Third_Neighbor_Points[iNeighbor] == Third_Neighbor_Points[jNeighbor]) && - (Third_Origin_Points[iNeighbor] != Third_Origin_Points[jNeighbor])) { - Suitable_Indirect_Neighbors.push_back(Third_Neighbor_Points[iNeighbor]); - } - } - } + // if ((Third_Neighbor_Points[iNeighbor] == Third_Neighbor_Points[jNeighbor]) && + // (Third_Origin_Points[iNeighbor] != Third_Origin_Points[jNeighbor])) { + // Suitable_Indirect_Neighbors.push_back(Third_Neighbor_Points[iNeighbor]); + // } + // } + // } /*--- Remove duplicates from the final list of Suitable Indirect Neighbors. ---*/ - sort(Suitable_Indirect_Neighbors.begin(), Suitable_Indirect_Neighbors.end()); - auto it2 = unique(Suitable_Indirect_Neighbors.begin(), Suitable_Indirect_Neighbors.end()); - Suitable_Indirect_Neighbors.resize(it2 - Suitable_Indirect_Neighbors.begin()); + // sort(Suitable_Indirect_Neighbors.begin(), Suitable_Indirect_Neighbors.end()); + // auto it2 = unique(Suitable_Indirect_Neighbors.begin(), Suitable_Indirect_Neighbors.end()); + // Suitable_Indirect_Neighbors.resize(it2 - Suitable_Indirect_Neighbors.begin()); } + void CMultiGridGeometry::SetPoint_Connectivity(const CGeometry* fine_grid) { /*--- Temporary, CPoint (nodes) then compresses this structure. ---*/ - vector > points(nPoint); + vector> points(nPoint); for (auto iCoarsePoint = 0ul; iCoarsePoint < nPoint; iCoarsePoint++) { /*--- For each child CV (of the fine grid), ---*/ @@ -1089,3 +1564,168 @@ void CMultiGridGeometry::FindNormal_Neighbor(const CConfig* config) { } } } + +su2double CMultiGridGeometry::ComputeLocalCurvature(const CGeometry* fine_grid, unsigned long iPoint, + unsigned short iMarker) const { + /*--- Compute local curvature (maximum angle between adjacent face normals) at a boundary vertex. + This is used to determine if agglomeration is safe based on a curvature threshold. ---*/ + + /*--- Get the vertex index for this point on this marker ---*/ + long iVertex = fine_grid->nodes->GetVertex(iPoint, iMarker); + if (iVertex < 0) return 0.0; // Point not on this marker + + /*--- Get the normal at this vertex ---*/ + su2double Normal_i[MAXNDIM] = {0.0}; + fine_grid->vertex[iMarker][iVertex]->GetNormal(Normal_i); + su2double Area_i = GeometryToolbox::Norm(int(nDim), Normal_i); + + if (Area_i < 1e-12) return 0.0; // Skip degenerate vertices + + /*--- Normalize the normal ---*/ + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + Normal_i[iDim] /= Area_i; + } + + /*--- Find maximum angle with neighboring vertices on the same marker ---*/ + su2double max_angle = 0.0; + + /*--- Loop over edges connected to this point ---*/ + for (unsigned short iEdge = 0; iEdge < fine_grid->nodes->GetnPoint(iPoint); iEdge++) { + unsigned long jPoint = fine_grid->nodes->GetPoint(iPoint, iEdge); + + /*--- Check if neighbor is also on this marker ---*/ + long jVertex = fine_grid->nodes->GetVertex(jPoint, iMarker); + if (jVertex < 0) continue; // Not on this marker + + /*--- Get normal at neighbor vertex ---*/ + su2double Normal_j[MAXNDIM] = {0.0}; + fine_grid->vertex[iMarker][jVertex]->GetNormal(Normal_j); + su2double Area_j = GeometryToolbox::Norm(int(nDim), Normal_j); + + if (Area_j < 1e-12) continue; // Skip degenerate neighbor + + /*--- Normalize the neighbor normal ---*/ + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + Normal_j[iDim] /= Area_j; + } + + /*--- Compute dot product: cos(angle) = n_i · n_j ---*/ + su2double dot_product = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + dot_product += Normal_i[iDim] * Normal_j[iDim]; + } + + /*--- Clamp to [-1, 1] to avoid numerical issues with acos ---*/ + dot_product = max(-1.0, min(1.0, dot_product)); + + /*--- Compute angle in degrees ---*/ + su2double angle_rad = acos(dot_product); + su2double angle_deg = angle_rad * 180.0 / PI_NUMBER; + + /*--- Track maximum angle ---*/ + max_angle = max(max_angle, angle_deg); + } + + return max_angle; +} + +void CMultiGridGeometry::ValidateHaloCoordinates(const CConfig* config, unsigned short iMesh) const { +#ifdef HAVE_MPI + + int size = SU2_MPI::GetSize(); + int rank = SU2_MPI::GetRank(); + + if (size == SINGLE_NODE || !config->GetMG_DebugHaloCoordinates()) { + return; // Skip if single-node or debug option disabled + } + + if (rank == MASTER_NODE) { + cout << "\n--- MG Halo Coordinate Validation (Level " << iMesh << ") ---" << endl; + } + + /*--- For each SEND_RECEIVE marker pair, exchange coordinates and validate ---*/ + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if ((config->GetMarker_All_KindBC(iMarker) == SEND_RECEIVE) && (config->GetMarker_All_SendRecv(iMarker) > 0)) { + const auto MarkerS = iMarker; + const auto MarkerR = iMarker + 1; + + const auto send_to = config->GetMarker_All_SendRecv(MarkerS) - 1; + const auto receive_from = abs(config->GetMarker_All_SendRecv(MarkerR)) - 1; + + const auto nVertexS = nVertex[MarkerS]; + const auto nVertexR = nVertex[MarkerR]; + + /*--- Allocate buffers for coordinate exchange ---*/ + vector Buffer_Send_Coord(nVertexS * nDim); + vector Buffer_Receive_Coord(nVertexR * nDim); + + /*--- Pack SEND coordinates (domain CVs being sent) ---*/ + for (auto iVertex = 0ul; iVertex < nVertexS; iVertex++) { + const auto iPoint = vertex[MarkerS][iVertex]->GetNode(); + const auto* Coord = nodes->GetCoord(iPoint); + for (auto iDim = 0u; iDim < nDim; iDim++) { + Buffer_Send_Coord[iVertex * nDim + iDim] = Coord[iDim]; + } + } + + /*--- Exchange coordinates ---*/ + SU2_MPI::Sendrecv(Buffer_Send_Coord.data(), nVertexS * nDim, MPI_DOUBLE, send_to, 0, + Buffer_Receive_Coord.data(), nVertexR * nDim, MPI_DOUBLE, receive_from, 0, + SU2_MPI::GetComm(), MPI_STATUS_IGNORE); + + /*--- Validate RECEIVE coordinates against local halo CVs ---*/ + unsigned long nMismatch = 0; + su2double maxError = 0.0; + su2double tolerance = 1e-10; + + for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { + const auto iPoint = vertex[MarkerR][iVertex]->GetNode(); + const auto* Coord_Local = nodes->GetCoord(iPoint); + + su2double error = 0.0; + for (auto iDim = 0u; iDim < nDim; iDim++) { + su2double coord_remote = Buffer_Receive_Coord[iVertex * nDim + iDim]; + su2double diff = fabs(Coord_Local[iDim] - coord_remote); + error += diff * diff; + } + error = sqrt(error); + + if (error > tolerance) { + nMismatch++; + maxError = max(maxError, error); + + if (nMismatch <= 5) { // Only print first 5 mismatches + cout << "COORD MISMATCH [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR + << ", Vertex " << iVertex << ", Point " << iPoint << "]: "; + cout << "Local=("; + for (auto iDim = 0u; iDim < nDim; iDim++) { + cout << Coord_Local[iDim]; + if (iDim < nDim - 1) cout << ", "; + } + cout << "), Remote=("; + for (auto iDim = 0u; iDim < nDim; iDim++) { + cout << Buffer_Receive_Coord[iVertex * nDim + iDim]; + if (iDim < nDim - 1) cout << ", "; + } + cout << "), Error=" << error << endl; + } + } + } + + if (nMismatch > 0) { + cout << "WARNING [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR + << "]: " << nMismatch << " coordinate mismatches detected (max error: " + << maxError << ")" << endl; + } else if (nVertexR > 0) { + cout << "INFO [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR + << "]: All " << nVertexR << " halo CV coordinates match (tol=" << tolerance << ")" << endl; + } + } + } + + if (rank == MASTER_NODE) { + cout << "--- End MG Halo Coordinate Validation ---\n" << endl; + } + +#endif // HAVE_MPI +} From 6bad76d49b7ef0fddeeb1977ebd3dca318ee8bd2 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 17 Jan 2026 09:16:26 -0800 Subject: [PATCH 013/229] cleanup and add regression --- Common/include/CConfig.hpp | 6 + Common/src/CConfig.cpp | 2 + SU2_CFD/include/numerics/CNumerics.hpp | 167 ++++++++++++++++-- .../include/numerics/flow/convection/fvs.hpp | 3 +- SU2_CFD/src/numerics/CNumerics.cpp | 156 +--------------- .../continuous_adjoint/adj_convection.cpp | 4 +- .../numerics/flow/convection/ausm_slau.cpp | 8 +- SU2_CFD/src/numerics/flow/convection/fvs.cpp | 18 +- SU2_CFD/src/numerics/flow/convection/roe.cpp | 8 +- TestCases/euler/ramp/inv_ramp_msw.cfg | 77 ++++++++ TestCases/parallel_regression.py | 21 ++- 11 files changed, 270 insertions(+), 200 deletions(-) create mode 100644 TestCases/euler/ramp/inv_ramp_msw.cfg diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index f198df434761..dc96c21ad3b7 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -651,6 +651,7 @@ class CConfig { unsigned long Linear_Solver_Prec_Threads; /*!< \brief Number of threads per rank for ILU and LU_SGS preconditioners. */ unsigned short Linear_Solver_ILU_n; /*!< \brief ILU fill=in level. */ su2double SemiSpan; /*!< \brief Wing Semi span. */ + su2double MSW_Alpha; /*!< \brief Coefficient for blending states in the MSW scheme. */ su2double Roe_Kappa; /*!< \brief Relaxation of the Roe scheme. */ su2double Relaxation_Factor_Adjoint; /*!< \brief Relaxation coefficient for variable updates of adjoint solvers. */ su2double Relaxation_Factor_CHT; /*!< \brief Relaxation coefficient for the update of conjugate heat variables. */ @@ -4432,6 +4433,11 @@ class CConfig { */ void SetNewtonKrylovRelaxation(const su2double& relaxation) { NK_Relaxation = relaxation; } + /*! + * \brief Returns the MSW alpha (coefficient of the state blending weight). + */ + su2double GetMSW_Alpha(void) const { return MSW_Alpha; } + /*! * \brief Returns the Roe kappa (multipler of the dissipation term). */ diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index a9ecb3a94b24..bf0e5863cbc6 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -1916,6 +1916,8 @@ void CConfig::SetConfig_Options() { addDoubleOption("RELAXATION_FACTOR_ADJOINT", Relaxation_Factor_Adjoint, 1.0); /* DESCRIPTION: Relaxation of the CHT coupling */ addDoubleOption("RELAXATION_FACTOR_CHT", Relaxation_Factor_CHT, 1.0); + /* DESCRIPTION: MSW alpha coefficient */ + addDoubleOption("MSW_ALPHA", MSW_Alpha, 6.0); /* DESCRIPTION: Roe coefficient */ addDoubleOption("ROE_KAPPA", Roe_Kappa, 0.5); /* DESCRIPTION: Roe-Turkel preconditioning for low Mach number flows */ diff --git a/SU2_CFD/include/numerics/CNumerics.hpp b/SU2_CFD/include/numerics/CNumerics.hpp index d574314cd5f4..6216c2102926 100644 --- a/SU2_CFD/include/numerics/CNumerics.hpp +++ b/SU2_CFD/include/numerics/CNumerics.hpp @@ -35,6 +35,7 @@ #include "../../../Common/include/CConfig.hpp" #include "../../../Common/include/linear_algebra/blas_structure.hpp" +#include "../../../Common/include/toolboxes/geometry_toolbox.hpp" class CElement; class CFluidModel; @@ -1146,15 +1147,77 @@ class CNumerics { /*! * \brief Computation of the matrix P, this matrix diagonalize the conservative Jacobians in * the form $P^{-1}(A.Normal)P=Lambda$. - * \param[in] val_density - Value of the density. - * \param[in] val_velocity - Value of the velocity. - * \param[in] val_soundspeed - Value of the sound speed. - * \param[in] val_normal - Normal vector, the norm of the vector is the area of the face. - * \param[out] val_p_tensor - Pointer to the P matrix. - */ - void GetPMatrix(const su2double *val_density, const su2double *val_velocity, - const su2double *val_soundspeed, const su2double *val_normal, - su2double **val_p_tensor) const; + * \param[in] density - Value of the density. + * \param[in] velocity - Velocity vector. + * \param[in] soundspeed - Value of the sound speed. + * \param[in] normal - Normal vector, the norm of the vector is the area of the face. + * \param[out] p_tensor - P matrix. + */ + template + void GetPMatrix(const su2double& density, const su2double* velocity, + const su2double& soundspeed, const su2double* normal, + Matrix& p_tensor) const { + const su2double rhooc = density / soundspeed; + const su2double rhoxc = density * soundspeed; + + if (nDim == 2) { + const su2double sqvel = GeometryToolbox::SquaredNorm(2, velocity); + const su2double projvel = GeometryToolbox::DotProduct(2, velocity, normal); + + p_tensor[0][0] = 1.0; + p_tensor[0][1] = 0.0; + p_tensor[0][2] = 0.5 * rhooc; + p_tensor[0][3] = 0.5 * rhooc; + + p_tensor[1][0] = velocity[0]; + p_tensor[1][1] = density * normal[1]; + p_tensor[1][2] = 0.5 * (velocity[0] * rhooc + normal[0] * density); + p_tensor[1][3] = 0.5 * (velocity[0] * rhooc - normal[0] * density); + + p_tensor[2][0] = velocity[1]; + p_tensor[2][1] = -density * normal[0]; + p_tensor[2][2] = 0.5 * (velocity[1] * rhooc + normal[1] * density); + p_tensor[2][3] = 0.5 * (velocity[1] * rhooc - normal[1] * density); + + p_tensor[3][0] = 0.5 * sqvel; + p_tensor[3][1] = density * (velocity[0] * normal[1] - velocity[1] * normal[0]); + p_tensor[3][2] = 0.5 * (0.5 * sqvel * rhooc + density * projvel + rhoxc / Gamma_Minus_One); + p_tensor[3][3] = 0.5 * (0.5 * sqvel * rhooc - density * projvel + rhoxc / Gamma_Minus_One); + } else { + const su2double sqvel = GeometryToolbox::SquaredNorm(3, velocity); + const su2double projvel = GeometryToolbox::DotProduct(3, velocity, normal); + + p_tensor[0][0] = normal[0]; + p_tensor[0][1] = normal[1]; + p_tensor[0][2] = normal[2]; + p_tensor[0][3] = 0.5 * rhooc; + p_tensor[0][4] = 0.5 * rhooc; + + p_tensor[1][0] = velocity[0] * normal[0]; + p_tensor[1][1] = velocity[0] * normal[1] - density * normal[2]; + p_tensor[1][2] = velocity[0] * normal[2] + density * normal[1]; + p_tensor[1][3] = 0.5 * (velocity[0] * rhooc + density * normal[0]); + p_tensor[1][4] = 0.5 * (velocity[0] * rhooc - density * normal[0]); + + p_tensor[2][0] = velocity[1] * normal[0] + density * normal[2]; + p_tensor[2][1] = velocity[1] * normal[1]; + p_tensor[2][2] = velocity[1] * normal[2] - density * normal[0]; + p_tensor[2][3] = 0.5 * (velocity[1] * rhooc + density * normal[1]); + p_tensor[2][4] = 0.5 * (velocity[1] * rhooc - density * normal[1]); + + p_tensor[3][0] = velocity[2] * normal[0] - density * normal[1]; + p_tensor[3][1] = velocity[2] * normal[1] + density * normal[0]; + p_tensor[3][2] = velocity[2] * normal[2]; + p_tensor[3][3] = 0.5 * (velocity[2] * rhooc + density * normal[2]); + p_tensor[3][4] = 0.5 * (velocity[2] * rhooc - density * normal[2]); + + p_tensor[4][0] = 0.5 * sqvel * normal[0] + density * (velocity[1] * normal[2] - velocity[2] * normal[1]); + p_tensor[4][1] = 0.5 * sqvel * normal[1] + density * (velocity[2] * normal[0] - velocity[0] * normal[2]); + p_tensor[4][2] = 0.5 * sqvel * normal[2] + density * (velocity[0] * normal[1] - velocity[1] * normal[0]); + p_tensor[4][3] = 0.5 * (0.5 * sqvel * rhooc + density * projvel + rhoxc / Gamma_Minus_One); + p_tensor[4][4] = 0.5 * (0.5 * sqvel * rhooc - density * projvel + rhoxc / Gamma_Minus_One); + } + } /*! * \brief Computation of the matrix Rinv*Pe. @@ -1261,15 +1324,83 @@ class CNumerics { /*! * \brief Computation of the matrix P^{-1}, this matrix diagonalize the conservative Jacobians * in the form $P^{-1}(A.Normal)P=Lambda$. - * \param[in] val_density - Value of the density. - * \param[in] val_velocity - Value of the velocity. - * \param[in] val_soundspeed - Value of the sound speed. - * \param[in] val_normal - Normal vector, the norm of the vector is the area of the face. - * \param[out] val_invp_tensor - Pointer to inverse of the P matrix. - */ - void GetPMatrix_inv(const su2double *val_density, const su2double *val_velocity, - const su2double *val_soundspeed, const su2double *val_normal, - su2double **val_invp_tensor) const; + * \param[in] density - Value of the density. + * \param[in] velocity - Velocity vector. + * \param[in] soundspeed - Value of the sound speed. + * \param[in] normal - Normal vector, the norm of the vector is the area of the face. + * \param[out] inv_p_tensor - Pointer to inverse of the P matrix. + */ + template + void GetPMatrix_inv(const su2double& density, const su2double* velocity, + const su2double& soundspeed, const su2double* normal, + Matrix& inv_p_tensor) const { + const su2double rhoxc = density * soundspeed; + const su2double c2 = pow(soundspeed, 2); + const su2double gm1 = Gamma_Minus_One; + const su2double k0orho = normal[0] / density; + const su2double k1orho = normal[1] / density; + const su2double gm1_o_c2 = gm1 / c2; + const su2double gm1_o_rhoxc = gm1 / rhoxc; + + if (nDim == 3) { + const su2double k2orho = normal[2] / density; + const su2double ke = 0.5 * GeometryToolbox::SquaredNorm(3, velocity); + const su2double projvel_o_rho = GeometryToolbox::DotProduct(3, velocity, normal) / density; + + inv_p_tensor[0][0] = normal[0] + k1orho * velocity[2] - k2orho * velocity[1] - normal[0] * gm1_o_c2 * ke; + inv_p_tensor[0][1] = normal[0] * gm1_o_c2 * velocity[0]; + inv_p_tensor[0][2] = k2orho + normal[0] * gm1_o_c2 * velocity[1]; + inv_p_tensor[0][3] = -k1orho + normal[0] * gm1_o_c2 * velocity[2]; + inv_p_tensor[0][4] = -normal[0] * gm1_o_c2; + + inv_p_tensor[1][0] = normal[1] + k2orho * velocity[0] - k0orho * velocity[2] - normal[1] * gm1_o_c2 * ke; + inv_p_tensor[1][1] = -k2orho + normal[1] * gm1_o_c2 * velocity[0]; + inv_p_tensor[1][2] = normal[1] * gm1_o_c2 * velocity[1]; + inv_p_tensor[1][3] = k0orho + normal[1] * gm1_o_c2 * velocity[2]; + inv_p_tensor[1][4] = -normal[1] * gm1_o_c2; + + inv_p_tensor[2][0] = normal[2] + k0orho * velocity[1] - k1orho * velocity[0] - normal[2] * gm1_o_c2 * ke; + inv_p_tensor[2][1] = k1orho + normal[2] * gm1_o_c2 * velocity[0]; + inv_p_tensor[2][2] = -k0orho + normal[2] * gm1_o_c2 * velocity[1]; + inv_p_tensor[2][3] = normal[2] * gm1_o_c2 * velocity[2]; + inv_p_tensor[2][4] = -normal[2] * gm1_o_c2; + + inv_p_tensor[3][0] = -projvel_o_rho + gm1_o_rhoxc * ke; + inv_p_tensor[3][1] = k0orho - gm1_o_rhoxc * velocity[0]; + inv_p_tensor[3][2] = k1orho - gm1_o_rhoxc * velocity[1]; + inv_p_tensor[3][3] = k2orho - gm1_o_rhoxc * velocity[2]; + inv_p_tensor[3][4] = gm1_o_rhoxc; + + inv_p_tensor[4][0] = projvel_o_rho + gm1_o_rhoxc * ke; + inv_p_tensor[4][1] = -k0orho - gm1_o_rhoxc * velocity[0]; + inv_p_tensor[4][2] = -k1orho - gm1_o_rhoxc * velocity[1]; + inv_p_tensor[4][3] = -k2orho - gm1_o_rhoxc * velocity[2]; + inv_p_tensor[4][4] = gm1_o_rhoxc; + } else { + const su2double ke = 0.5 * GeometryToolbox::SquaredNorm(2, velocity); + const su2double projvel_o_rho = GeometryToolbox::DotProduct(2, velocity, normal) / density; + + inv_p_tensor[0][0] = 1 - gm1_o_c2 * ke; + inv_p_tensor[0][1] = gm1_o_c2 * velocity[0]; + inv_p_tensor[0][2] = gm1_o_c2 * velocity[1]; + inv_p_tensor[0][3] = -gm1_o_c2; + + inv_p_tensor[1][0] = -k1orho * velocity[0] + k0orho * velocity[1]; + inv_p_tensor[1][1] = k1orho; + inv_p_tensor[1][2] = -k0orho; + inv_p_tensor[1][3] = 0; + + inv_p_tensor[2][0] = -projvel_o_rho + gm1_o_rhoxc * ke; + inv_p_tensor[2][1] = k0orho - gm1_o_rhoxc * velocity[0]; + inv_p_tensor[2][2] = k1orho - gm1_o_rhoxc * velocity[1]; + inv_p_tensor[2][3] = gm1_o_rhoxc; + + inv_p_tensor[3][0] = projvel_o_rho + gm1_o_rhoxc * ke; + inv_p_tensor[3][1] = -k0orho - gm1_o_rhoxc * velocity[0]; + inv_p_tensor[3][2] = -k1orho - gm1_o_rhoxc * velocity[1]; + inv_p_tensor[3][3] = gm1_o_rhoxc; + } + } /*! * \brief Compute viscous residual and jacobian. diff --git a/SU2_CFD/include/numerics/flow/convection/fvs.hpp b/SU2_CFD/include/numerics/flow/convection/fvs.hpp index 9bff32bee3dd..f55df36d2797 100644 --- a/SU2_CFD/include/numerics/flow/convection/fvs.hpp +++ b/SU2_CFD/include/numerics/flow/convection/fvs.hpp @@ -40,8 +40,7 @@ class CUpwMSW_Flow final : public CNumerics { private: static constexpr auto MAXNVAR = MAXNDIM + 2; - su2double buf_P_Tensor[MAXNVAR * MAXNVAR], buf_invP_Tensor[MAXNVAR * MAXNVAR]; - su2double *P_Tensor[MAXNVAR], *invP_Tensor[MAXNVAR]; + const su2double alpha; su2double buf_Jacobian_i[MAXNVAR * MAXNVAR], buf_Jacobian_j[MAXNVAR * MAXNVAR]; su2double* Jacobian_i[MAXNVAR]; /*!< \brief The Jacobian w.r.t. point i after computation. */ diff --git a/SU2_CFD/src/numerics/CNumerics.cpp b/SU2_CFD/src/numerics/CNumerics.cpp index f6dd575355ef..c1efac25a19e 100644 --- a/SU2_CFD/src/numerics/CNumerics.cpp +++ b/SU2_CFD/src/numerics/CNumerics.cpp @@ -249,8 +249,8 @@ void CNumerics::GetInviscidProjJac(const su2double *val_velocity, const su2doubl } void CNumerics::GetInviscidIncProjJac(const su2double *val_density, const su2double *val_velocity, - const su2double *val_betainc2, const su2double *val_enthalpy, - const su2double *val_dRhodh, const su2double *val_normal, + const su2double *val_betainc2, const su2double *val_enthalpy, + const su2double *val_dRhodh, const su2double *val_normal, su2double val_scale, su2double **val_Proj_Jac_Tensor) const { const bool wasActive = AD::BeginPassive(); unsigned short iDim; @@ -319,7 +319,7 @@ void CNumerics::GetInviscidIncProjJac(const su2double *val_density, const su2dou } void CNumerics::GetPreconditioner(const su2double *val_density, const su2double *val_velocity, - const su2double *val_betainc2, const su2double *val_enthalpy, + const su2double *val_betainc2, const su2double *val_enthalpy, const su2double *val_drhodh, su2double **val_Precon) const { unsigned short iDim, jDim; @@ -377,80 +377,6 @@ void CNumerics::GetPreconditionedProjJac(const su2double *val_density, const su2 } -void CNumerics::GetPMatrix(const su2double *val_density, const su2double *val_velocity, - const su2double *val_soundspeed, const su2double *val_normal, - su2double **val_p_tensor) const { - - su2double sqvel, rhooc, rhoxc; - //su2double c2; - - rhooc = *val_density / *val_soundspeed; - rhoxc = *val_density * *val_soundspeed; - //c2 = *val_soundspeed * *val_soundspeed; - - if (nDim == 2) { - - sqvel = val_velocity[0]*val_velocity[0]+val_velocity[1]*val_velocity[1]; - - val_p_tensor[0][0]=1.0; - val_p_tensor[0][1]=0.0; - val_p_tensor[0][2]=0.5*rhooc; - val_p_tensor[0][3]=0.5*rhooc; - - val_p_tensor[1][0]=val_velocity[0]; - val_p_tensor[1][1]=*val_density*val_normal[1]; - val_p_tensor[1][2]=0.5*(val_velocity[0]*rhooc+val_normal[0]**val_density); - val_p_tensor[1][3]=0.5*(val_velocity[0]*rhooc-val_normal[0]**val_density); - - val_p_tensor[2][0]=val_velocity[1]; - val_p_tensor[2][1]=-*val_density*val_normal[0]; - val_p_tensor[2][2]=0.5*(val_velocity[1]*rhooc+val_normal[1]**val_density); - val_p_tensor[2][3]=0.5*(val_velocity[1]*rhooc-val_normal[1]**val_density); - - val_p_tensor[3][0]=0.5*sqvel; - val_p_tensor[3][1]=*val_density*val_velocity[0]*val_normal[1]-*val_density*val_velocity[1]*val_normal[0]; - val_p_tensor[3][2]=0.5*(0.5*sqvel*rhooc+*val_density*val_velocity[0]*val_normal[0]+*val_density*val_velocity[1]*val_normal[1]+rhoxc/Gamma_Minus_One); - val_p_tensor[3][3]=0.5*(0.5*sqvel*rhooc-*val_density*val_velocity[0]*val_normal[0]-*val_density*val_velocity[1]*val_normal[1]+rhoxc/Gamma_Minus_One); - - } - else { - - sqvel = val_velocity[0]*val_velocity[0]+val_velocity[1]*val_velocity[1]+val_velocity[2]*val_velocity[2]; - - val_p_tensor[0][0]=val_normal[0]; - val_p_tensor[0][1]=val_normal[1]; - val_p_tensor[0][2]=val_normal[2]; - val_p_tensor[0][3]=0.5*rhooc; - val_p_tensor[0][4]=0.5*rhooc; - - val_p_tensor[1][0]=val_velocity[0]*val_normal[0]; - val_p_tensor[1][1]=val_velocity[0]*val_normal[1]-*val_density*val_normal[2]; - val_p_tensor[1][2]=val_velocity[0]*val_normal[2]+*val_density*val_normal[1]; - val_p_tensor[1][3]=0.5*(val_velocity[0]*rhooc+*val_density*val_normal[0]); - val_p_tensor[1][4]=0.5*(val_velocity[0]*rhooc-*val_density*val_normal[0]); - - val_p_tensor[2][0]=val_velocity[1]*val_normal[0]+*val_density*val_normal[2]; - val_p_tensor[2][1]=val_velocity[1]*val_normal[1]; - val_p_tensor[2][2]=val_velocity[1]*val_normal[2]-*val_density*val_normal[0]; - val_p_tensor[2][3]=0.5*(val_velocity[1]*rhooc+*val_density*val_normal[1]); - val_p_tensor[2][4]=0.5*(val_velocity[1]*rhooc-*val_density*val_normal[1]); - - val_p_tensor[3][0]=val_velocity[2]*val_normal[0]-*val_density*val_normal[1]; - val_p_tensor[3][1]=val_velocity[2]*val_normal[1]+*val_density*val_normal[0]; - val_p_tensor[3][2]=val_velocity[2]*val_normal[2]; - val_p_tensor[3][3]=0.5*(val_velocity[2]*rhooc+*val_density*val_normal[2]); - val_p_tensor[3][4]=0.5*(val_velocity[2]*rhooc-*val_density*val_normal[2]); - - val_p_tensor[4][0]=0.5*sqvel*val_normal[0]+*val_density*val_velocity[1]*val_normal[2]-*val_density*val_velocity[2]*val_normal[1]; - val_p_tensor[4][1]=0.5*sqvel*val_normal[1]-*val_density*val_velocity[0]*val_normal[2]+*val_density*val_velocity[2]*val_normal[0]; - val_p_tensor[4][2]=0.5*sqvel*val_normal[2]+*val_density*val_velocity[0]*val_normal[1]-*val_density*val_velocity[1]*val_normal[0]; - val_p_tensor[4][3]=0.5*(0.5*sqvel*rhooc+*val_density*(val_velocity[0]*val_normal[0]+val_velocity[1]*val_normal[1]+val_velocity[2]*val_normal[2])+rhoxc/Gamma_Minus_One); - val_p_tensor[4][4]=0.5*(0.5*sqvel*rhooc-*val_density*(val_velocity[0]*val_normal[0]+val_velocity[1]*val_normal[1]+val_velocity[2]*val_normal[2])+rhoxc/Gamma_Minus_One); - - } - -} - void CNumerics::GetPMatrix(const su2double *val_density, const su2double *val_velocity, const su2double *val_soundspeed, const su2double *val_enthalpy, const su2double *val_chi, const su2double *val_kappa, @@ -524,82 +450,6 @@ void CNumerics::GetPMatrix(const su2double *val_density, const su2double *val_ve } -void CNumerics::GetPMatrix_inv(const su2double *val_density, const su2double *val_velocity, - const su2double *val_soundspeed, const su2double *val_normal, - su2double **val_invp_tensor) const { - - su2double rhoxc, c2, gm1, k0orho, k1orho, gm1_o_c2, gm1_o_rhoxc, sqvel; - - rhoxc = *val_density * *val_soundspeed; - c2 = *val_soundspeed * *val_soundspeed; - gm1 = Gamma_Minus_One; - k0orho = val_normal[0] / *val_density; - k1orho = val_normal[1] / *val_density; - gm1_o_c2 = gm1/c2; - gm1_o_rhoxc = gm1/rhoxc; - - if (nDim == 3) { - - sqvel = val_velocity[0]*val_velocity[0]+val_velocity[1]*val_velocity[1]+val_velocity[2]*val_velocity[2]; - - val_invp_tensor[0][0]=val_normal[0]-val_normal[2]*val_velocity[1] / *val_density+val_normal[1]*val_velocity[2] / *val_density-val_normal[0]*0.5*gm1*sqvel/c2; - val_invp_tensor[0][1]=val_normal[0]*gm1*val_velocity[0]/c2; - val_invp_tensor[0][2]=val_normal[2] / *val_density+val_normal[0]*gm1*val_velocity[1]/c2; - val_invp_tensor[0][3]=-val_normal[1] / *val_density+val_normal[0]*gm1*val_velocity[2]/c2; - val_invp_tensor[0][4]=-val_normal[0]*gm1/c2; - - val_invp_tensor[1][0]=val_normal[1]+val_normal[2]*val_velocity[0] / *val_density-val_normal[0]*val_velocity[2] / *val_density-val_normal[1]*0.5*gm1*sqvel/c2; - val_invp_tensor[1][1]=-val_normal[2] / *val_density+val_normal[1]*gm1*val_velocity[0]/c2; - val_invp_tensor[1][2]=val_normal[1]*gm1*val_velocity[1]/c2; - val_invp_tensor[1][3]=val_normal[0] / *val_density+val_normal[1]*gm1*val_velocity[2]/c2; - val_invp_tensor[1][4]=-val_normal[1]*gm1/c2; - - val_invp_tensor[2][0]=val_normal[2]-val_normal[1]*val_velocity[0] / *val_density+val_normal[0]*val_velocity[1] / *val_density-val_normal[2]*0.5*gm1*sqvel/c2; - val_invp_tensor[2][1]=val_normal[1] / *val_density+val_normal[2]*gm1*val_velocity[0]/c2; - val_invp_tensor[2][2]=-val_normal[0] / *val_density+val_normal[2]*gm1*val_velocity[1]/c2; - val_invp_tensor[2][3]=val_normal[2]*gm1*val_velocity[2]/c2; - val_invp_tensor[2][4]=-val_normal[2]*gm1/c2; - - val_invp_tensor[3][0]=-(val_normal[0]*val_velocity[0]+val_normal[1]*val_velocity[1]+val_normal[2]*val_velocity[2]) / *val_density+0.5*gm1*sqvel/rhoxc; - val_invp_tensor[3][1]=val_normal[0] / *val_density-gm1*val_velocity[0]/rhoxc; - val_invp_tensor[3][2]=val_normal[1] / *val_density-gm1*val_velocity[1]/rhoxc; - val_invp_tensor[3][3]=val_normal[2] / *val_density-gm1*val_velocity[2]/rhoxc; - val_invp_tensor[3][4]=Gamma_Minus_One/rhoxc; - - val_invp_tensor[4][0]=(val_normal[0]*val_velocity[0]+val_normal[1]*val_velocity[1]+val_normal[2]*val_velocity[2]) / *val_density+0.5*gm1*sqvel/rhoxc; - val_invp_tensor[4][1]=-val_normal[0] / *val_density-gm1*val_velocity[0]/rhoxc; - val_invp_tensor[4][2]=-val_normal[1] / *val_density-gm1*val_velocity[1]/rhoxc; - val_invp_tensor[4][3]=-val_normal[2] / *val_density-gm1*val_velocity[2]/rhoxc; - val_invp_tensor[4][4]=Gamma_Minus_One/rhoxc; - - } - else { - - sqvel = val_velocity[0]*val_velocity[0]+val_velocity[1]*val_velocity[1]; - - val_invp_tensor[0][0] = 1.0-0.5*gm1_o_c2*sqvel; - val_invp_tensor[0][1]=gm1_o_c2*val_velocity[0]; - val_invp_tensor[0][2]=gm1_o_c2*val_velocity[1]; - val_invp_tensor[0][3]=-gm1_o_c2; - - val_invp_tensor[1][0]=-k1orho*val_velocity[0]+k0orho*val_velocity[1]; - val_invp_tensor[1][1]=k1orho; - val_invp_tensor[1][2]=-k0orho; - val_invp_tensor[1][3]=0.0; - - val_invp_tensor[2][0]=-k0orho*val_velocity[0]-k1orho*val_velocity[1]+0.5*gm1_o_rhoxc*sqvel; - val_invp_tensor[2][1]=k0orho-gm1_o_rhoxc*val_velocity[0]; - val_invp_tensor[2][2]=k1orho-gm1_o_rhoxc*val_velocity[1]; - val_invp_tensor[2][3]=gm1_o_rhoxc; - - val_invp_tensor[3][0]=k0orho*val_velocity[0]+k1orho*val_velocity[1]+0.5*gm1_o_rhoxc*sqvel; - val_invp_tensor[3][1]=-k0orho-gm1_o_rhoxc*val_velocity[0]; - val_invp_tensor[3][2]=-k1orho-gm1_o_rhoxc*val_velocity[1]; - val_invp_tensor[3][3]=gm1_o_rhoxc; - - } -} - void CNumerics::GetPMatrix_inv(su2double **val_invp_tensor, const su2double *val_density, const su2double *val_velocity, const su2double *val_soundspeed, const su2double *val_chi, const su2double *val_kappa, const su2double *val_normal) const { diff --git a/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp b/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp index b7f33705c786..faee679b5cb2 100644 --- a/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp +++ b/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp @@ -705,8 +705,8 @@ void CUpwRoe_AdjFlow::ComputeResidual (su2double *val_residual_i, su2double *val /*--- Compute P, inverse P, and store eigenvalues ---*/ - GetPMatrix_inv(&RoeDensity, RoeVelocity, &RoeSoundSpeed, UnitNormal, invP_Tensor); - GetPMatrix(&RoeDensity, RoeVelocity, &RoeSoundSpeed, UnitNormal, P_Tensor); + GetPMatrix_inv(RoeDensity, RoeVelocity, RoeSoundSpeed, UnitNormal, invP_Tensor); + GetPMatrix(RoeDensity, RoeVelocity, RoeSoundSpeed, UnitNormal, P_Tensor); /*--- Flow eigenvalues ---*/ diff --git a/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp b/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp index fb6e88234fc4..a9399a88b5b7 100644 --- a/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp +++ b/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp @@ -119,7 +119,7 @@ void CUpwAUSMPLUS_SLAU_Base_Flow::ApproximateJacobian(su2double **val_Jacobian_i /*--- Compute P and Lambda (do it with the Normal) ---*/ - GetPMatrix(&RoeDensity, RoeVelocity, &RoeSoundSpeed, UnitNormal, P_Tensor); + GetPMatrix(RoeDensity, RoeVelocity, RoeSoundSpeed, UnitNormal, P_Tensor); /*--- Flow eigenvalues and Entropy correctors ---*/ @@ -129,7 +129,7 @@ void CUpwAUSMPLUS_SLAU_Base_Flow::ApproximateJacobian(su2double **val_Jacobian_i Lambda[nVar-1] = ProjVelocity - RoeSoundSpeed; /*--- Compute inverse P ---*/ - GetPMatrix_inv(&RoeDensity, RoeVelocity, &RoeSoundSpeed, UnitNormal, invP_Tensor); + GetPMatrix_inv(RoeDensity, RoeVelocity, RoeSoundSpeed, UnitNormal, invP_Tensor); /*--- Jacobians of the inviscid flux, scale = 0.5 because val_residual ~ 0.5*(fc_i+fc_j)*Normal ---*/ GetInviscidProjJac(Velocity_i, &Energy_i, Normal, 0.5, val_Jacobian_i); @@ -928,7 +928,7 @@ CNumerics::ResidualType<> CUpwAUSM_Flow::ComputeResidual(const CConfig* config) RoeSoundSpeed = sqrt(fabs((Gamma-1)*(RoeEnthalpy-0.5*sq_vel))); /*--- Compute P and Lambda (do it with the Normal) ---*/ - GetPMatrix(&RoeDensity, RoeVelocity, &RoeSoundSpeed, UnitNormal, P_Tensor); + GetPMatrix(RoeDensity, RoeVelocity, RoeSoundSpeed, UnitNormal, P_Tensor); ProjVelocity = 0.0; ProjVelocity_i = 0.0; ProjVelocity_j = 0.0; for (iDim = 0; iDim < nDim; iDim++) { @@ -944,7 +944,7 @@ CNumerics::ResidualType<> CUpwAUSM_Flow::ComputeResidual(const CConfig* config) Lambda[nVar-1] = ProjVelocity - RoeSoundSpeed; /*--- Compute inverse P ---*/ - GetPMatrix_inv(&RoeDensity, RoeVelocity, &RoeSoundSpeed, UnitNormal, invP_Tensor); + GetPMatrix_inv(RoeDensity, RoeVelocity, RoeSoundSpeed, UnitNormal, invP_Tensor); /*--- Jacobias of the inviscid flux, scale = 0.5 because val_residual ~ 0.5*(fc_i+fc_j)*Normal ---*/ GetInviscidProjJac(Velocity_i, &Energy_i, Normal, 0.5, Jacobian_i); diff --git a/SU2_CFD/src/numerics/flow/convection/fvs.cpp b/SU2_CFD/src/numerics/flow/convection/fvs.cpp index 6781923e3747..8beb47653fdb 100644 --- a/SU2_CFD/src/numerics/flow/convection/fvs.cpp +++ b/SU2_CFD/src/numerics/flow/convection/fvs.cpp @@ -28,7 +28,8 @@ #include "../../../../include/numerics/flow/convection/fvs.hpp" #include "../../../../../Common/include/toolboxes/geometry_toolbox.hpp" -CUpwMSW_Flow::CUpwMSW_Flow(unsigned short val_nDim, unsigned short val_nVar, const CConfig* config) : CNumerics(val_nDim, val_nVar, config) { +CUpwMSW_Flow::CUpwMSW_Flow(unsigned short val_nDim, unsigned short val_nVar, const CConfig* config) : + CNumerics(val_nDim, val_nVar, config), alpha(config->GetMSW_Alpha()) { if (config->GetDynamic_Grid() && SU2_MPI::GetRank() == MASTER_NODE) { std::cout << "WARNING: Grid velocities are NOT yet considered in the MSW scheme." << std::endl; @@ -36,8 +37,6 @@ CUpwMSW_Flow::CUpwMSW_Flow(unsigned short val_nDim, unsigned short val_nVar, con /*--- Allocate arrays ---*/ for (unsigned short iVar = 0; iVar < nVar; iVar++) { - P_Tensor[iVar] = &buf_P_Tensor[iVar * MAXNVAR]; - invP_Tensor[iVar] =&buf_invP_Tensor[iVar * MAXNVAR]; Jacobian_i[iVar] = &buf_Jacobian_i[iVar * MAXNVAR]; Jacobian_j[iVar] = &buf_Jacobian_j[iVar * MAXNVAR]; } @@ -50,9 +49,6 @@ CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { AD::SetPreaccIn(V_j, nDim + 4); AD::SetPreaccIn(Normal, nDim); - /*--- Set parameters in the numerical method ---*/ - const su2double alpha = 6.0; - /*--- Calculate supporting geometry parameters ---*/ const su2double Area = GeometryToolbox::Norm(nDim, Normal); @@ -69,6 +65,7 @@ CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { const su2double rho_j = V_j[nDim + 2]; const su2double H_i = V_i[nDim + 3]; const su2double H_j = V_j[nDim + 3]; + /*--- Recompute the speed of sound because it is not MUSCL-reconstructed. ---*/ const su2double sqvel_i = GeometryToolbox::SquaredNorm(nDim, V_i + 1); const su2double sqvel_j = GeometryToolbox::SquaredNorm(nDim, V_j + 1); const su2double c_i = sqrt(fmax((Gamma - 1) * (H_i - 0.5 * sqvel_i), EPS)); @@ -121,8 +118,9 @@ CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { /*--- Compute projected P, invP, and Lambda ---*/ - GetPMatrix(&Vst_i[nDim + 2], Velst_i, &Vst_i[nDim + 4], UnitNormal, P_Tensor); - GetPMatrix_inv(&Vst_i[nDim + 2], Velst_i, &Vst_i[nDim + 4], UnitNormal, invP_Tensor); + su2double P_Tensor[MAXNVAR][MAXNVAR], invP_Tensor[MAXNVAR][MAXNVAR]; + GetPMatrix(Vst_i[nDim + 2], Velst_i, Vst_i[nDim + 4], UnitNormal, P_Tensor); + GetPMatrix_inv(Vst_i[nDim + 2], Velst_i, Vst_i[nDim + 4], UnitNormal, invP_Tensor); /*--- Projected flux (f+) at i ---*/ @@ -156,8 +154,8 @@ CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { /*--- Compute projected P, invP, and Lambda ---*/ - GetPMatrix(&Vst_j[nDim + 2], Velst_j, &Vst_j[nDim + 4], UnitNormal, P_Tensor); - GetPMatrix_inv(&Vst_j[nDim + 2], Velst_j, &Vst_j[nDim + 4], UnitNormal, invP_Tensor); + GetPMatrix(Vst_j[nDim + 2], Velst_j, Vst_j[nDim + 4], UnitNormal, P_Tensor); + GetPMatrix_inv(Vst_j[nDim + 2], Velst_j, Vst_j[nDim + 4], UnitNormal, invP_Tensor); /*--- Projected flux (f-) ---*/ diff --git a/SU2_CFD/src/numerics/flow/convection/roe.cpp b/SU2_CFD/src/numerics/flow/convection/roe.cpp index b8cc3c6923f4..f35b97cd6c50 100644 --- a/SU2_CFD/src/numerics/flow/convection/roe.cpp +++ b/SU2_CFD/src/numerics/flow/convection/roe.cpp @@ -170,7 +170,7 @@ CNumerics::ResidualType<> CUpwRoeBase_Flow::ComputeResidual(const CConfig* confi /*--- P tensor ---*/ - GetPMatrix(&RoeDensity, RoeVelocity, &RoeSoundSpeed, UnitNormal, P_Tensor); + GetPMatrix(RoeDensity, RoeVelocity, RoeSoundSpeed, UnitNormal, P_Tensor); /*--- Projected velocity adjusted for mesh motion ---*/ @@ -259,7 +259,7 @@ void CUpwRoe_Flow::FinalizeResidual(su2double *val_residual, su2double **val_Jac unsigned short iVar, jVar, kVar; /*--- Compute inverse P tensor ---*/ - GetPMatrix_inv(&RoeDensity, RoeVelocity, &RoeSoundSpeed, UnitNormal, invP_Tensor); + GetPMatrix_inv(RoeDensity, RoeVelocity, RoeSoundSpeed, UnitNormal, invP_Tensor); /*--- Diference between conservative variables at jPoint and iPoint ---*/ for (iVar = 0; iVar < nVar; iVar++) @@ -349,7 +349,7 @@ void CUpwL2Roe_Flow::FinalizeResidual(su2double *val_residual, su2double **val_J /*--- If implicit use the Jacobians of the standard Roe scheme as an approximation ---*/ - GetPMatrix_inv(&RoeDensity, RoeVelocity, &RoeSoundSpeed, UnitNormal, invP_Tensor); + GetPMatrix_inv(RoeDensity, RoeVelocity, RoeSoundSpeed, UnitNormal, invP_Tensor); for (iVar = 0; iVar < nVar; iVar++) { for (jVar = 0; jVar < nVar; jVar++) { @@ -422,7 +422,7 @@ void CUpwLMRoe_Flow::FinalizeResidual(su2double *val_residual, su2double **val_J /*--- If implicit use the Jacobians of the standard Roe scheme as an approximation ---*/ - GetPMatrix_inv(&RoeDensity, RoeVelocity, &RoeSoundSpeed, UnitNormal, invP_Tensor); + GetPMatrix_inv(RoeDensity, RoeVelocity, RoeSoundSpeed, UnitNormal, invP_Tensor); for (iVar = 0; iVar < nVar; iVar++) { for (jVar = 0; jVar < nVar; jVar++) { diff --git a/TestCases/euler/ramp/inv_ramp_msw.cfg b/TestCases/euler/ramp/inv_ramp_msw.cfg new file mode 100644 index 000000000000..ae900c6f6bbf --- /dev/null +++ b/TestCases/euler/ramp/inv_ramp_msw.cfg @@ -0,0 +1,77 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: Supersonic flow over a ramp in a channel (regression) % +% Author: Thomas D. Economon, Amit Sachdeva % +% Institution: Stanford University % +% Date: 2023.04.08 % +% File Version 8.4.0 "Harrier" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% +% +SOLVER= EULER +MATH_PROBLEM= DIRECT +RESTART_SOL= NO + +% ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------% +% +MACH_NUMBER= 2.0 +AOA= 0.0 +SIDESLIP_ANGLE= 0.0 +FREESTREAM_PRESSURE= 100000.0 +FREESTREAM_TEMPERATURE= 300.0 + +% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% +% +REF_ORIGIN_MOMENT_X = 0.25 +REF_ORIGIN_MOMENT_Y = 0.00 +REF_ORIGIN_MOMENT_Z = 0.00 +REF_LENGTH= 1.0 +REF_AREA= 1.0 + +% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% +% +MARKER_EULER= ( upper, lower ) +MARKER_SUPERSONIC_INLET= ( inlet, 300.0, 100000.0, 695.4290761824674, 0.0, 0.0 ) +MARKER_OUTLET= ( outlet, 10000.0 ) +MARKER_PLOTTING= ( lower ) +MARKER_MONITORING= ( upper, lower ) + +% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% +% +NUM_METHOD_GRAD= GREEN_GAUSS +CFL_NUMBER= 1.0 +CFL_ADAPT= YES +CFL_ADAPT_PARAM= ( 0.8, 1.2, 1.0, 250.0, 0.8 ) +ITER= 200 +LINEAR_SOLVER= FGMRES +LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_ERROR= 1e-6 +LINEAR_SOLVER_ITER= 3 +NEWTON_KRYLOV= YES +NEWTON_KRYLOV_IPARAM= (0, 0, 1) % n0, np, ft +NEWTON_KRYLOV_DPARAM= (0, 1e-20, -2.0, 1e-5, -1.0) % r0, tp, rf, e, nkr +MGLEVEL= 0 + +% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% +% +CONV_NUM_METHOD_FLOW= MSW +MUSCL_FLOW= YES +SLOPE_LIMITER_FLOW= NISHIKAWA_R5 +VENKAT_LIMITER_COEFF= 0.5 +TIME_DISCRE_FLOW= EULER_IMPLICIT + +% --------------------------- CONVERGENCE PARAMETERS --------------------------% +% +CONV_RESIDUAL_MINVAL= -13 +CONV_STARTITER= 10 + +% ------------------------- INPUT/OUTPUT INFORMATION --------------------------% +% +MESH_FILENAME= ramp_unst +VOLUME_FILENAME= flow +OUTPUT_WRT_FREQ= 250 +SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, RMS_ENERGY, LIFT, DRAG) + diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 37e3a5756dec..2f0ecbcd6d9a 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -294,6 +294,13 @@ def main(): ramp.test_vals_aarch64 = [-13.648406, -8.014579, -0.076277, 0.054839] test_list.append(ramp) + ramp_msw = TestCase('ramp_msw') + ramp_msw.cfg_dir = "euler/ramp" + ramp_msw.cfg_file = "inv_ramp_msw.cfg" + ramp_msw.test_iter = 100 + ramp_msw.test_vals = [-12.875776, -7.122734, -0.077832, 0.054528] + test_list.append(ramp_msw) + ########################## ### Compressible N-S ### ########################## @@ -1544,16 +1551,16 @@ def main(): test_list.append(pywrapper_zimont) - # Heat solver unsteady with source - pywrapper_Unst_Heat_Source = TestCase('pywrapper_Unst_Heat_Source') - pywrapper_Unst_Heat_Source.cfg_dir = "py_wrapper/custom_heat_source" - pywrapper_Unst_Heat_Source.cfg_file = "run.py" - pywrapper_Unst_Heat_Source.test_iter = 10 - pywrapper_Unst_Heat_Source.unsteady = True + # Heat solver unsteady with source + pywrapper_Unst_Heat_Source = TestCase('pywrapper_Unst_Heat_Source') + pywrapper_Unst_Heat_Source.cfg_dir = "py_wrapper/custom_heat_source" + pywrapper_Unst_Heat_Source.cfg_file = "run.py" + pywrapper_Unst_Heat_Source.test_iter = 10 + pywrapper_Unst_Heat_Source.unsteady = True pywrapper_Unst_Heat_Source.test_vals = [-5.235402, 300.010000, 300.000000] pywrapper_Unst_Heat_Source.command = TestCase.Command("mpirun -n 2", "python", "run.py") test_list.append(pywrapper_Unst_Heat_Source) - + ############################################## ### Method of Manufactured Solutions (MMS) ### ############################################## From 8a5573d7d8b7d3363bdbae84ba347f02e3507ec9 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 17 Jan 2026 09:24:28 -0800 Subject: [PATCH 014/229] config template --- config_template.cfg | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/config_template.cfg b/config_template.cfg index e519f5971aaf..b7f1c4dc9c01 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -1674,6 +1674,10 @@ USE_VECTORIZATION= YES % artificial dissipation) ENTROPY_FIX_COEFF= 0.0 % +% MSW coefficient for blending states based on pressure jump. +% Using 0 makes the scheme average left and right regardless of pressure. +MSW_ALPHA= 6.0 +% % Higher values than 1 (3 to 4) make the global Jacobian of central schemes (compressible flow % only) more diagonal dominant (but mathematically incorrect) so that higher CFL can be used. CENTRAL_JACOBIAN_FIX_FACTOR= 4.0 From eddaac0098882f4e8be944184c4d13ddf3fa16c7 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 17 Jan 2026 09:26:12 -0800 Subject: [PATCH 015/229] more cleaning --- SU2_CFD/include/numerics/CNumerics.hpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/SU2_CFD/include/numerics/CNumerics.hpp b/SU2_CFD/include/numerics/CNumerics.hpp index 6216c2102926..cc9194997478 100644 --- a/SU2_CFD/include/numerics/CNumerics.hpp +++ b/SU2_CFD/include/numerics/CNumerics.hpp @@ -1161,7 +1161,7 @@ class CNumerics { const su2double rhoxc = density * soundspeed; if (nDim == 2) { - const su2double sqvel = GeometryToolbox::SquaredNorm(2, velocity); + const su2double ke = 0.5 * GeometryToolbox::SquaredNorm(2, velocity); const su2double projvel = GeometryToolbox::DotProduct(2, velocity, normal); p_tensor[0][0] = 1.0; @@ -1179,12 +1179,12 @@ class CNumerics { p_tensor[2][2] = 0.5 * (velocity[1] * rhooc + normal[1] * density); p_tensor[2][3] = 0.5 * (velocity[1] * rhooc - normal[1] * density); - p_tensor[3][0] = 0.5 * sqvel; + p_tensor[3][0] = ke; p_tensor[3][1] = density * (velocity[0] * normal[1] - velocity[1] * normal[0]); - p_tensor[3][2] = 0.5 * (0.5 * sqvel * rhooc + density * projvel + rhoxc / Gamma_Minus_One); - p_tensor[3][3] = 0.5 * (0.5 * sqvel * rhooc - density * projvel + rhoxc / Gamma_Minus_One); + p_tensor[3][2] = 0.5 * (ke * rhooc + density * projvel + rhoxc / Gamma_Minus_One); + p_tensor[3][3] = 0.5 * (ke * rhooc - density * projvel + rhoxc / Gamma_Minus_One); } else { - const su2double sqvel = GeometryToolbox::SquaredNorm(3, velocity); + const su2double ke = 0.5 * GeometryToolbox::SquaredNorm(3, velocity); const su2double projvel = GeometryToolbox::DotProduct(3, velocity, normal); p_tensor[0][0] = normal[0]; @@ -1211,11 +1211,11 @@ class CNumerics { p_tensor[3][3] = 0.5 * (velocity[2] * rhooc + density * normal[2]); p_tensor[3][4] = 0.5 * (velocity[2] * rhooc - density * normal[2]); - p_tensor[4][0] = 0.5 * sqvel * normal[0] + density * (velocity[1] * normal[2] - velocity[2] * normal[1]); - p_tensor[4][1] = 0.5 * sqvel * normal[1] + density * (velocity[2] * normal[0] - velocity[0] * normal[2]); - p_tensor[4][2] = 0.5 * sqvel * normal[2] + density * (velocity[0] * normal[1] - velocity[1] * normal[0]); - p_tensor[4][3] = 0.5 * (0.5 * sqvel * rhooc + density * projvel + rhoxc / Gamma_Minus_One); - p_tensor[4][4] = 0.5 * (0.5 * sqvel * rhooc - density * projvel + rhoxc / Gamma_Minus_One); + p_tensor[4][0] = ke * normal[0] + density * (velocity[1] * normal[2] - velocity[2] * normal[1]); + p_tensor[4][1] = ke * normal[1] + density * (velocity[2] * normal[0] - velocity[0] * normal[2]); + p_tensor[4][2] = ke * normal[2] + density * (velocity[0] * normal[1] - velocity[1] * normal[0]); + p_tensor[4][3] = 0.5 * (ke * rhooc + density * projvel + rhoxc / Gamma_Minus_One); + p_tensor[4][4] = 0.5 * (ke * rhooc - density * projvel + rhoxc / Gamma_Minus_One); } } From 6e1f0adf95ca8d7ddae3e6df11f13181c3b5707d Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 17 Jan 2026 15:11:50 -0800 Subject: [PATCH 016/229] update tests --- TestCases/parallel_regression.py | 4 ++-- TestCases/parallel_regression_AD.py | 2 +- TestCases/serial_regression_AD.py | 2 +- TestCases/tutorials.py | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 2f0ecbcd6d9a..14ff9128eac4 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -298,7 +298,7 @@ def main(): ramp_msw.cfg_dir = "euler/ramp" ramp_msw.cfg_file = "inv_ramp_msw.cfg" ramp_msw.test_iter = 100 - ramp_msw.test_vals = [-12.875776, -7.122734, -0.077832, 0.054528] + ramp_msw.test_vals = [-12.374773, -6.696450, -0.077832, 0.054528] test_list.append(ramp_msw) ########################## @@ -773,7 +773,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.345531, 1.448387, 1.208638, -0.846585, 1.271362, 0.497475, 0.000000] + turbmod_sa_neg_rae2822.test_vals = [-1.345454, 1.448536, 1.208684, -0.846029, 1.257859, 0.492608, 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) diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index b3679519a97d..d5bc32cee107 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -276,7 +276,7 @@ def main(): discadj_fsi2.cfg_dir = "disc_adj_fsi/Airfoil_2d" discadj_fsi2.cfg_file = "config.cfg" discadj_fsi2.test_iter = 8 - discadj_fsi2.test_vals = [-4.772676, 0.917733, -3.863369, 0.295450, 3.839800] + discadj_fsi2.test_vals = [-4.772768, 0.916597, -3.863369, 0.295450, 3.839800] discadj_fsi2.test_vals_aarch64 = [-4.773008, 0.916312, -3.863369, 0.295450, 3.841200] discadj_fsi2.tol = 0.00001 test_list.append(discadj_fsi2) diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 9826e95cd1f4..50381c04724f 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -206,7 +206,7 @@ def main(): discadj_fsi.cfg_dir = "disc_adj_fsi" discadj_fsi.cfg_file = "config.cfg" discadj_fsi.test_iter = 6 - discadj_fsi.test_vals = [6, -8.932959, -10.054580, 3.1054e-11, -1.7612e-06] + discadj_fsi.test_vals = [6, -8.932038, -10.037735, 3.1052e-11, -1.7613e-06] discadj_fsi.test_vals_aarch64 = [6, -8.928861, -10.122430, 3.0979e-11, -1.7585e-06] test_list.append(discadj_fsi) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index dcfbc0a0f44c..af6ab212ed64 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -247,7 +247,7 @@ def main(): tutorial_trans_flatplate_T3Am.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A-" tutorial_trans_flatplate_T3Am.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3Am.test_iter = 20 - tutorial_trans_flatplate_T3Am.test_vals = [-5.538098, -1.681627, -2.877016, -0.055689, -3.695534, 3.413620, -2.385344, 1.103633] + tutorial_trans_flatplate_T3Am.test_vals = [-5.538130, -1.681627, -2.877088, -0.055717, -3.695534, 3.413620, -2.385344, 1.103633] tutorial_trans_flatplate_T3Am.test_vals_aarch64 = [-5.540938, -1.681627, -2.878831, -0.058224, -3.695533, 3.413628, -2.385345, 1.103633] tutorial_trans_flatplate_T3Am.no_restart = True test_list.append(tutorial_trans_flatplate_T3Am) From 7d13c33dca2946190382fa003ed67771b93ee727 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 17 Jan 2026 20:38:54 -0800 Subject: [PATCH 017/229] file diff --- TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref b/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref index 60e4d2cf956e..111b5c1cdc53 100644 --- a/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref +++ b/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref @@ -1,9 +1,9 @@ INDEX GRAD -0 -4.570880257851463e-04 -1 -2.401474161436175e-04 -2 -9.134742016285272e-05 -3 -1.628103644960537e-05 -4 -1.741046823504659e-05 -5 -9.462481396563234e-05 -6 -2.452469693841206e-04 -7 -4.635498187330369e-04 +0 -4.570880175564371e-04 +1 -2.401474104649833e-04 +2 -9.134741714239637e-05 +3 -1.628103592186675e-05 +4 -1.741046982337274e-05 +5 -9.462481735830197e-05 +6 -2.452469745130044e-04 +7 -4.635498256044697e-04 From ef5b3df80dea073563f06cf727e17c1ac47de97d Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 11:10:37 +0100 Subject: [PATCH 018/229] agglomeration on mpi --- Common/src/geometry/CMultiGridGeometry.cpp | 48 +++++++++++----------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index e55c98905924..d18ba4bbdac6 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -59,7 +59,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un //the interface or not. Nishikawa chooses not to agglomerate over interfaces. /*--- Set a marker to indicate indirect agglomeration, for quads and hexs, - i.e. consider up to neighbors of neighbors of neighbors. + i.e. consider up to neighbors of neighbors. For other levels this information is propagated down during their construction. ---*/ if (iMesh == MESH_1) { for (auto iPoint = 0ul; iPoint < fine_grid->GetnPoint(); iPoint++) @@ -127,7 +127,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un that are in that point ---*/ for (auto jMarker = 0u; jMarker < fine_grid->GetnMarker(); jMarker++) { - const string Marker_Tag = config->GetMarker_All_TagBound(iMarker); // fine_grid->GetMarker_Tag(jMarker); + const string Marker_Tag = config->GetMarker_All_TagBound(iMarker); if (fine_grid->nodes->GetVertex(iPoint, jMarker) != -1) { copy_marker[counter] = jMarker; counter++; @@ -138,7 +138,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } - /*--- To agglomerate a vertex it must have only one physical bc!! + /*--- To agglomerate a vertex it must have only one physical bc. This can be improved. If there is only one marker, it is a good candidate for agglomeration ---*/ @@ -151,7 +151,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un << ", marker name = " << config->GetMarker_All_TagBound(marker_seed[0]); cout << ", marker type = " << config->GetMarker_All_KindBC(marker_seed[0]) << endl; // The seed/parent is one valley, so we set this part to true - // if the child is only on this same valley, we set it to true as well. + // if the child is on the same valley, we set it to true as well. agglomerate_seed = true; /*--- Euler walls: check curvature-based agglomeration criterion ---*/ if (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL) { @@ -160,7 +160,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Compute local curvature at this point ---*/ su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, marker_seed[0]); // limit to 30 degrees - if (local_curvature >= 30.0) { + if (local_curvature >= 5.0) { agglomerate_seed = false; // High curvature: do not agglomerate euler_wall_rejected_curvature[marker_seed[0]]++; } else { @@ -171,37 +171,41 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un euler_wall_agglomerated[marker_seed[0]]++; } } - /*--- Note that if the marker is a SEND_RECEIVE, then the node is actually an interior point. + /*--- Note that if the (single) marker is a SEND_RECEIVE, then the node is actually an interior point. In that case it can only be agglomerated with another interior point. ---*/ - /*--- Temporarily don't agglomerate SEND_RECEIVE markers---*/ if (config->GetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE) { - agglomerate_seed = false; + agglomerate_seed = true; } } - /*--- If there are two markers, we will agglomerate if any of the - markers is SEND_RECEIVE ---*/ - - /*--- Note that in 2D, this is a corner and we do not agglomerate. ---*/ + /*--- Note that in 2D, this is a corner and we do not agglomerate unless they both are SEND_RECEIVE. ---*/ /*--- In 3D, we agglomerate if the 2 markers are the same. ---*/ if (counter == 2) { - /*--- Only agglomerate if one of the 2 markers are MPI markers. ---*/ - //agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || - // (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE); + /*--- agglomerate if one of the 2 markers are MPI markers. ---*/ + if (nDim==2) + agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || + (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE); + + /*--- agglomerate if both markers are the same. ---*/ + if (nDim==3) + agglomerate_seed = (copy_marker[0] == copy_marker[1]); + + /*--- Do not agglomerate if one of the 2 markers are MPI markers. ---*/ - agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) != SEND_RECEIVE) && - (config->GetMarker_All_KindBC(copy_marker[1]) != SEND_RECEIVE); + //agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) != SEND_RECEIVE) && + // (config->GetMarker_All_KindBC(copy_marker[1]) != SEND_RECEIVE); /*--- Euler walls: check curvature-based agglomeration criterion for both markers ---*/ + // only in 3d because in 2d it's a corner bool euler_wall_rejected_here = false; for (unsigned short i = 0; i < 2; i++) { - if (config->GetMarker_All_KindBC(copy_marker[i]) == EULER_WALL) { + if ((nDim == 3) && (config->GetMarker_All_KindBC(copy_marker[i]) == EULER_WALL)) { if (!boundIsStraight[copy_marker[i]]) { /*--- Compute local curvature at this point ---*/ su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, copy_marker[i]); // limit to 30 degrees - if (local_curvature >= 30.0) { + if (local_curvature >= 5.0) { agglomerate_seed = false; // High curvature: do not agglomerate euler_wall_rejected_curvature[copy_marker[i]]++; euler_wall_rejected_here = true; @@ -214,16 +218,10 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } - /*--- In 2D, corners are not agglomerated, but in 3D counter=2 means we are on the - edge of a 2D face. In that case, agglomerate if both nodes are the same. ---*/ - // if (nDim == 2) agglomerate_seed = false; } /*--- If there are more than 2 markers, the aglomeration will be discarded ---*/ - if (counter > 2) agglomerate_seed = false; - // note that if one of the markers is SEND_RECEIVE, then we could allow agglomeration since - // the real number of markers is then 2. /*--- If the seed (parent) can be agglomerated, we try to agglomerate connected childs to the parent ---*/ /*--- Note that in 2D we allow a maximum of 4 nodes to be agglomerated ---*/ From 76855888913c7c86bf11c9a39e2e51908286de5a Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 15:13:48 +0100 Subject: [PATCH 019/229] fix euler walls --- Common/src/geometry/CMultiGridGeometry.cpp | 4 +- .../integration/CMultiGridIntegration.hpp | 2 +- .../src/integration/CMultiGridIntegration.cpp | 318 +++++++++++++++++- 3 files changed, 319 insertions(+), 5 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index d18ba4bbdac6..a2e66bd3c334 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -160,7 +160,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Compute local curvature at this point ---*/ su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, marker_seed[0]); // limit to 30 degrees - if (local_curvature >= 5.0) { + if (local_curvature >= 45.0) { agglomerate_seed = false; // High curvature: do not agglomerate euler_wall_rejected_curvature[marker_seed[0]]++; } else { @@ -205,7 +205,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Compute local curvature at this point ---*/ su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, copy_marker[i]); // limit to 30 degrees - if (local_curvature >= 5.0) { + if (local_curvature >= 45.0) { agglomerate_seed = false; // High curvature: do not agglomerate euler_wall_rejected_curvature[copy_marker[i]]++; euler_wall_rejected_here = true; diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index eb2b7ded797c..39e99f27bd57 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -168,7 +168,7 @@ class CMultiGridIntegration final : public CIntegration { * \param[in] InclSharedDomain - Include the shared domain in the interpolation. */ void SetRestricted_Solution(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, - CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config); + CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config, unsigned short iMesh = 999); /*! * \brief Initialize the adjoint solution using the primal problem. diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index b616f0e66495..69e8487c7979 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -240,7 +240,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Compute $r_(k+1) = F_(k+1)(I^(k+1)_k u_k)$ ---*/ - SetRestricted_Solution(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config); + SetRestricted_Solution(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config, iMesh); solver_coarse->Preprocessing(geometry_coarse, solver_container_coarse, config, iMesh+1, NO_RK_ITER, RunTime_EqSystem, false); @@ -341,8 +341,145 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS } END_SU2_OMP_FOR + /*--- DIAGNOSTIC: Check corrections at Euler walls before BC enforcement ---*/ + + su2double max_correction_normal = 0.0, avg_correction_normal = 0.0; + su2double max_correction_pressure = 0.0, avg_correction_pressure = 0.0; + unsigned long count_euler_prolong = 0; + + for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + + for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + + /*--- Get coarse grid normal ---*/ + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < 1e-12) continue; + + /*--- Get correction (stored in Solution_Old) ---*/ + const auto* Correction = sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse); + + /*--- Compute normal component of momentum correction ---*/ + su2double corr_n = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + corr_n += Correction[iDim + 1] * Normal[iDim]; + } + corr_n /= Area; + + max_correction_normal = max(max_correction_normal, fabs(corr_n)); + avg_correction_normal += fabs(corr_n); + max_correction_pressure = max(max_correction_pressure, fabs(Correction[0])); + avg_correction_pressure += fabs(Correction[0]); + count_euler_prolong++; + } + } + } + + if (count_euler_prolong > 0) { + avg_correction_normal /= count_euler_prolong; + avg_correction_pressure /= count_euler_prolong; + cout << "[MG DIAGNOSTIC] Before prolongation: Euler wall corrections - " + << "Max normal momentum = " << max_correction_normal + << ", Avg normal momentum = " << avg_correction_normal + << ", Max pressure = " << max_correction_pressure + << ", Avg pressure = " << avg_correction_pressure << endl; + } + delete [] Solution; + /*--- OPTION C: Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ + + for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + + SU2_OMP_FOR_STAT(32) + for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + + /*--- Get coarse grid normal ---*/ + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < 1e-12) continue; + + /*--- Normalize normal vector ---*/ + su2double UnitNormal[3] = {0.0}; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + UnitNormal[iDim] = Normal[iDim] / Area; + } + + /*--- Get correction (stored in Solution_Old) ---*/ + auto* Correction = sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse); + + /*--- Compute normal component of momentum correction ---*/ + su2double corr_n = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + corr_n += Correction[iDim + 1] * UnitNormal[iDim]; + } + + /*--- Project correction to tangent plane: correction -= (correction·n)n ---*/ + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + Correction[iDim + 1] -= corr_n * UnitNormal[iDim]; + } + } + END_SU2_OMP_FOR + } + } + + /*--- DIAGNOSTIC: Verify correction projection worked ---*/ + + max_correction_normal = 0.0; + avg_correction_normal = 0.0; + count_euler_prolong = 0; + + for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + + for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < 1e-12) continue; + + const auto* Correction = sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse); + + su2double corr_n = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + corr_n += Correction[iDim + 1] * Normal[iDim]; + } + corr_n /= Area; + + max_correction_normal = max(max_correction_normal, fabs(corr_n)); + avg_correction_normal += fabs(corr_n); + count_euler_prolong++; + } + } + } + + if (count_euler_prolong > 0) { + avg_correction_normal /= count_euler_prolong; + cout << "[MG DIAGNOSTIC] After Option C enforcement: Euler wall corrections - " + << "Max normal momentum = " << max_correction_normal + << ", Avg normal momentum = " << avg_correction_normal << endl; + } + /*--- Remove any contributions from no-slip walls. ---*/ for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { @@ -528,6 +665,51 @@ void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coar } END_SU2_OMP_FOR + /*--- DIAGNOSTIC: Check truncation error normal component at Euler walls before zeroing ---*/ + + su2double max_trunc_normal = 0.0, avg_trunc_normal = 0.0; + unsigned long count_euler_forcing = 0; + + for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + + for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + + /*--- Get coarse grid normal ---*/ + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < 1e-12) continue; + + /*--- Get truncation error ---*/ + const auto* TruncError = sol_coarse->GetNodes()->GetResTruncError(Point_Coarse); + + /*--- Compute normal component ---*/ + su2double trunc_n = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + trunc_n += TruncError[iDim + 1] * Normal[iDim]; + } + trunc_n /= Area; + + max_trunc_normal = max(max_trunc_normal, fabs(trunc_n)); + avg_trunc_normal += fabs(trunc_n); + count_euler_forcing++; + } + } + } + + if (count_euler_forcing > 0) { + avg_trunc_normal /= count_euler_forcing; + cout << "[MG DIAGNOSTIC] Forcing term mesh " << iMesh + << ": Euler wall truncation error - Max normal = " << max_trunc_normal + << ", Avg normal = " << avg_trunc_normal << endl; + } + delete [] Residual; for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { @@ -561,7 +743,7 @@ void CMultiGridIntegration::SetResidual_Term(CGeometry *geometry, CSolver *solve } void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, - CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { + CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config, unsigned short iMesh) { const unsigned short Solver_Position = config->GetContainerPosition(RunTime_EqSystem); const bool grid_movement = config->GetGrid_Movement(); @@ -606,6 +788,138 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } } + /*--- DIAGNOSTIC: Check Euler wall BC violation after restriction ---*/ + + su2double max_normal_vel = 0.0, avg_normal_vel = 0.0; + unsigned long count_euler = 0; + + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + + for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + + /*--- Get coarse grid normal ---*/ + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < 1e-12) continue; + + /*--- Get velocity from restricted solution ---*/ + const auto* Solution = sol_coarse->GetNodes()->GetSolution(Point_Coarse); + + /*--- Compute v·n (should be zero for Euler wall) ---*/ + su2double vn = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + vn += Solution[iDim + 1] * Normal[iDim]; // Solution layout: [rho, rho*u, rho*v, (rho*w), E] + } + vn /= Area; // Normalize by area + + max_normal_vel = max(max_normal_vel, fabs(vn)); + avg_normal_vel += fabs(vn); + count_euler++; + } + } + } + + if (count_euler > 0) { + avg_normal_vel /= count_euler; + cout << "[MG DIAGNOSTIC] After restriction on mesh " << iMesh + << ": Euler wall BC violation - Max |v·n| = " << max_normal_vel + << ", Avg |v·n| = " << avg_normal_vel + << " (" << count_euler << " vertices)" << endl; + } + + /*--- OPTION B: Enforce Euler wall BC by projecting velocity to tangent plane ---*/ + + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + + SU2_OMP_FOR_STAT(32) + for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + + /*--- Get coarse grid normal ---*/ + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < 1e-12) continue; + + /*--- Normalize normal vector ---*/ + su2double UnitNormal[3] = {0.0}; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + UnitNormal[iDim] = Normal[iDim] / Area; + } + + /*--- Get current solution ---*/ + auto* Solution = sol_coarse->GetNodes()->GetSolution(Point_Coarse); + + /*--- Compute v·n ---*/ + su2double vn = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + vn += Solution[iDim + 1] * UnitNormal[iDim]; // Solution layout: [rho, rho*u, rho*v, (rho*w), E] + } + + /*--- Project velocity to tangent plane: v_new = v - (v·n)n ---*/ + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + Solution[iDim + 1] -= vn * UnitNormal[iDim]; + } + } + END_SU2_OMP_FOR + } + } + + /*--- DIAGNOSTIC: Verify BC enforcement worked ---*/ + + max_normal_vel = 0.0; + avg_normal_vel = 0.0; + count_euler = 0; + + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + + for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < 1e-12) continue; + + const auto* Solution = sol_coarse->GetNodes()->GetSolution(Point_Coarse); + + su2double vn = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + vn += Solution[iDim + 1] * Normal[iDim]; + } + vn /= Area; + + max_normal_vel = max(max_normal_vel, fabs(vn)); + avg_normal_vel += fabs(vn); + count_euler++; + } + } + } + + if (count_euler > 0) { + avg_normal_vel /= count_euler; + cout << "[MG DIAGNOSTIC] After Option B enforcement on mesh " << iMesh + << ": Euler wall BC - Max |v·n| = " << max_normal_vel + << ", Avg |v·n| = " << avg_normal_vel << endl; + } + /*--- MPI the new interpolated solution ---*/ sol_coarse->InitiateComms(geo_coarse, config, MPI_QUANTITIES::SOLUTION); From 3d5cb12f085b229859a17adf59d3c3722d141290 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 15:29:26 +0100 Subject: [PATCH 020/229] remove debugging stuff --- .../src/integration/CMultiGridIntegration.cpp | 228 ------------------ 1 file changed, 228 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 69e8487c7979..1617b968fa96 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -341,57 +341,6 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS } END_SU2_OMP_FOR - /*--- DIAGNOSTIC: Check corrections at Euler walls before BC enforcement ---*/ - - su2double max_correction_normal = 0.0, avg_correction_normal = 0.0; - su2double max_correction_pressure = 0.0, avg_correction_pressure = 0.0; - unsigned long count_euler_prolong = 0; - - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { - - for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - - /*--- Get coarse grid normal ---*/ - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < 1e-12) continue; - - /*--- Get correction (stored in Solution_Old) ---*/ - const auto* Correction = sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse); - - /*--- Compute normal component of momentum correction ---*/ - su2double corr_n = 0.0; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - corr_n += Correction[iDim + 1] * Normal[iDim]; - } - corr_n /= Area; - - max_correction_normal = max(max_correction_normal, fabs(corr_n)); - avg_correction_normal += fabs(corr_n); - max_correction_pressure = max(max_correction_pressure, fabs(Correction[0])); - avg_correction_pressure += fabs(Correction[0]); - count_euler_prolong++; - } - } - } - - if (count_euler_prolong > 0) { - avg_correction_normal /= count_euler_prolong; - avg_correction_pressure /= count_euler_prolong; - cout << "[MG DIAGNOSTIC] Before prolongation: Euler wall corrections - " - << "Max normal momentum = " << max_correction_normal - << ", Avg normal momentum = " << avg_correction_normal - << ", Max pressure = " << max_correction_pressure - << ", Avg pressure = " << avg_correction_pressure << endl; - } - delete [] Solution; /*--- OPTION C: Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ @@ -437,49 +386,6 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS } } - /*--- DIAGNOSTIC: Verify correction projection worked ---*/ - - max_correction_normal = 0.0; - avg_correction_normal = 0.0; - count_euler_prolong = 0; - - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { - - for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < 1e-12) continue; - - const auto* Correction = sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse); - - su2double corr_n = 0.0; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - corr_n += Correction[iDim + 1] * Normal[iDim]; - } - corr_n /= Area; - - max_correction_normal = max(max_correction_normal, fabs(corr_n)); - avg_correction_normal += fabs(corr_n); - count_euler_prolong++; - } - } - } - - if (count_euler_prolong > 0) { - avg_correction_normal /= count_euler_prolong; - cout << "[MG DIAGNOSTIC] After Option C enforcement: Euler wall corrections - " - << "Max normal momentum = " << max_correction_normal - << ", Avg normal momentum = " << avg_correction_normal << endl; - } - /*--- Remove any contributions from no-slip walls. ---*/ for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { @@ -665,51 +571,6 @@ void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coar } END_SU2_OMP_FOR - /*--- DIAGNOSTIC: Check truncation error normal component at Euler walls before zeroing ---*/ - - su2double max_trunc_normal = 0.0, avg_trunc_normal = 0.0; - unsigned long count_euler_forcing = 0; - - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { - - for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - - /*--- Get coarse grid normal ---*/ - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < 1e-12) continue; - - /*--- Get truncation error ---*/ - const auto* TruncError = sol_coarse->GetNodes()->GetResTruncError(Point_Coarse); - - /*--- Compute normal component ---*/ - su2double trunc_n = 0.0; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - trunc_n += TruncError[iDim + 1] * Normal[iDim]; - } - trunc_n /= Area; - - max_trunc_normal = max(max_trunc_normal, fabs(trunc_n)); - avg_trunc_normal += fabs(trunc_n); - count_euler_forcing++; - } - } - } - - if (count_euler_forcing > 0) { - avg_trunc_normal /= count_euler_forcing; - cout << "[MG DIAGNOSTIC] Forcing term mesh " << iMesh - << ": Euler wall truncation error - Max normal = " << max_trunc_normal - << ", Avg normal = " << avg_trunc_normal << endl; - } - delete [] Residual; for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { @@ -788,52 +649,6 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } } - /*--- DIAGNOSTIC: Check Euler wall BC violation after restriction ---*/ - - su2double max_normal_vel = 0.0, avg_normal_vel = 0.0; - unsigned long count_euler = 0; - - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { - - for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - - /*--- Get coarse grid normal ---*/ - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < 1e-12) continue; - - /*--- Get velocity from restricted solution ---*/ - const auto* Solution = sol_coarse->GetNodes()->GetSolution(Point_Coarse); - - /*--- Compute v·n (should be zero for Euler wall) ---*/ - su2double vn = 0.0; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - vn += Solution[iDim + 1] * Normal[iDim]; // Solution layout: [rho, rho*u, rho*v, (rho*w), E] - } - vn /= Area; // Normalize by area - - max_normal_vel = max(max_normal_vel, fabs(vn)); - avg_normal_vel += fabs(vn); - count_euler++; - } - } - } - - if (count_euler > 0) { - avg_normal_vel /= count_euler; - cout << "[MG DIAGNOSTIC] After restriction on mesh " << iMesh - << ": Euler wall BC violation - Max |v·n| = " << max_normal_vel - << ", Avg |v·n| = " << avg_normal_vel - << " (" << count_euler << " vertices)" << endl; - } - /*--- OPTION B: Enforce Euler wall BC by projecting velocity to tangent plane ---*/ for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { @@ -877,49 +692,6 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } } - /*--- DIAGNOSTIC: Verify BC enforcement worked ---*/ - - max_normal_vel = 0.0; - avg_normal_vel = 0.0; - count_euler = 0; - - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { - - for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < 1e-12) continue; - - const auto* Solution = sol_coarse->GetNodes()->GetSolution(Point_Coarse); - - su2double vn = 0.0; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - vn += Solution[iDim + 1] * Normal[iDim]; - } - vn /= Area; - - max_normal_vel = max(max_normal_vel, fabs(vn)); - avg_normal_vel += fabs(vn); - count_euler++; - } - } - } - - if (count_euler > 0) { - avg_normal_vel /= count_euler; - cout << "[MG DIAGNOSTIC] After Option B enforcement on mesh " << iMesh - << ": Euler wall BC - Max |v·n| = " << max_normal_vel - << ", Avg |v·n| = " << avg_normal_vel << endl; - } - /*--- MPI the new interpolated solution ---*/ sol_coarse->InitiateComms(geo_coarse, config, MPI_QUANTITIES::SOLUTION); From e18050bc8fb1b596748406224142e999ec1fcba6 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 15:52:51 +0100 Subject: [PATCH 021/229] helper function --- .../integration/CMultiGridIntegration.hpp | 10 ++ .../src/integration/CMultiGridIntegration.cpp | 132 +++++++----------- 2 files changed, 60 insertions(+), 82 deletions(-) diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index 39e99f27bd57..b63e56318719 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -181,4 +181,14 @@ class CMultiGridIntegration final : public CIntegration { void Adjoint_Setup(CGeometry ****geometry, CSolver *****solver_container, CConfig **config, unsigned short RunTime_EqSystem, unsigned long Iteration, unsigned short iZone); +private: + /*! + * \brief Enforce Euler wall BC by projecting momentum to tangent plane. + * \param[in] geo_coarse - Coarse grid geometry. + * \param[in] sol_coarse - Coarse grid solution. + * \param[in] config - Problem configuration. + * \param[in] use_solution - True to project Solution, false to project Solution_Old (corrections). + */ + void ProjectEulerWallVelocity(CGeometry *geo_coarse, CSolver *sol_coarse, const CConfig *config, bool use_solution); + }; diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 1617b968fa96..e1b570599990 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -344,47 +344,7 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; /*--- OPTION C: Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ - - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { - - SU2_OMP_FOR_STAT(32) - for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - - /*--- Get coarse grid normal ---*/ - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < 1e-12) continue; - - /*--- Normalize normal vector ---*/ - su2double UnitNormal[3] = {0.0}; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - UnitNormal[iDim] = Normal[iDim] / Area; - } - - /*--- Get correction (stored in Solution_Old) ---*/ - auto* Correction = sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse); - - /*--- Compute normal component of momentum correction ---*/ - su2double corr_n = 0.0; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - corr_n += Correction[iDim + 1] * UnitNormal[iDim]; - } - - /*--- Project correction to tangent plane: correction -= (correction·n)n ---*/ - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - Correction[iDim + 1] -= corr_n * UnitNormal[iDim]; - } - } - END_SU2_OMP_FOR - } - } + ProjectEulerWallVelocity(geo_coarse, sol_coarse, config, false); /*--- Remove any contributions from no-slip walls. ---*/ @@ -650,47 +610,7 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } /*--- OPTION B: Enforce Euler wall BC by projecting velocity to tangent plane ---*/ - - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { - - SU2_OMP_FOR_STAT(32) - for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - - /*--- Get coarse grid normal ---*/ - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < 1e-12) continue; - - /*--- Normalize normal vector ---*/ - su2double UnitNormal[3] = {0.0}; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - UnitNormal[iDim] = Normal[iDim] / Area; - } - - /*--- Get current solution ---*/ - auto* Solution = sol_coarse->GetNodes()->GetSolution(Point_Coarse); - - /*--- Compute v·n ---*/ - su2double vn = 0.0; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - vn += Solution[iDim + 1] * UnitNormal[iDim]; // Solution layout: [rho, rho*u, rho*v, (rho*w), E] - } - - /*--- Project velocity to tangent plane: v_new = v - (v·n)n ---*/ - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - Solution[iDim + 1] -= vn * UnitNormal[iDim]; - } - } - END_SU2_OMP_FOR - } - } + ProjectEulerWallVelocity(geo_coarse, sol_coarse, config, true); /*--- MPI the new interpolated solution ---*/ @@ -834,3 +754,51 @@ void CMultiGridIntegration::Adjoint_Setup(CGeometry ****geometry, CSolver *****s } } + +void CMultiGridIntegration::ProjectEulerWallVelocity(CGeometry *geo_coarse, CSolver *sol_coarse, + const CConfig *config, bool use_solution) { + /*--- Enforce Euler wall boundary condition by projecting velocity to tangent plane ---*/ + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + if (geo_coarse->nodes->GetDomain(Point_Coarse)) { + + /*--- Get coarse grid normal vector ---*/ + auto Normal = geo_coarse->vertex[iMarker][iVertex]->GetNormal(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + su2double UnitNormal[MAXNDIM] = {0.0}; + for (auto iDim = 0u; iDim < nDim; iDim++) + UnitNormal[iDim] = Normal[iDim] / Area; + + /*--- Get density from solution container ---*/ + const su2double *Sol = sol_coarse->GetNodes()->GetSolution(Point_Coarse); + su2double Density = Sol[0]; + + /*--- Get velocity vector from solution or corrections ---*/ + su2double Velocity[MAXNDIM] = {0.0}; + if (use_solution) { + for (auto iDim = 0u; iDim < nDim; iDim++) + Velocity[iDim] = Sol[iDim+1] / Density; + } else { + const su2double *SolOld = sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse); + for (auto iDim = 0u; iDim < nDim; iDim++) + Velocity[iDim] = (Sol[iDim+1] - SolOld[iDim+1]) / Density; + } + + /*--- Compute normal component and project to tangent plane ---*/ + su2double VelNormal = GeometryToolbox::DotProduct(nDim, Velocity, UnitNormal); + for (auto iDim = 0u; iDim < nDim; iDim++) + Velocity[iDim] -= VelNormal * UnitNormal[iDim]; + + /*--- Update momentum components in solution container ---*/ + su2double Solution_Proj[MAXNVAR] = {0.0}; + Solution_Proj[0] = Density; + for (auto iDim = 0u; iDim < nDim; iDim++) + Solution_Proj[iDim+1] = Velocity[iDim] * Density; + sol_coarse->GetNodes()->SetSolution(Point_Coarse, Solution_Proj); + } + } + } + } +} From 2a70b87bbd7afbdb9ad958a33589a357dbe0c870 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 16:40:17 +0100 Subject: [PATCH 022/229] before helper function --- .../integration/CMultiGridIntegration.hpp | 10 -- .../src/integration/CMultiGridIntegration.cpp | 132 +++++++++++------- 2 files changed, 82 insertions(+), 60 deletions(-) diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index b63e56318719..39e99f27bd57 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -181,14 +181,4 @@ class CMultiGridIntegration final : public CIntegration { void Adjoint_Setup(CGeometry ****geometry, CSolver *****solver_container, CConfig **config, unsigned short RunTime_EqSystem, unsigned long Iteration, unsigned short iZone); -private: - /*! - * \brief Enforce Euler wall BC by projecting momentum to tangent plane. - * \param[in] geo_coarse - Coarse grid geometry. - * \param[in] sol_coarse - Coarse grid solution. - * \param[in] config - Problem configuration. - * \param[in] use_solution - True to project Solution, false to project Solution_Old (corrections). - */ - void ProjectEulerWallVelocity(CGeometry *geo_coarse, CSolver *sol_coarse, const CConfig *config, bool use_solution); - }; diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index e1b570599990..1617b968fa96 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -344,7 +344,47 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; /*--- OPTION C: Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ - ProjectEulerWallVelocity(geo_coarse, sol_coarse, config, false); + + for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + + SU2_OMP_FOR_STAT(32) + for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + + /*--- Get coarse grid normal ---*/ + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < 1e-12) continue; + + /*--- Normalize normal vector ---*/ + su2double UnitNormal[3] = {0.0}; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + UnitNormal[iDim] = Normal[iDim] / Area; + } + + /*--- Get correction (stored in Solution_Old) ---*/ + auto* Correction = sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse); + + /*--- Compute normal component of momentum correction ---*/ + su2double corr_n = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + corr_n += Correction[iDim + 1] * UnitNormal[iDim]; + } + + /*--- Project correction to tangent plane: correction -= (correction·n)n ---*/ + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + Correction[iDim + 1] -= corr_n * UnitNormal[iDim]; + } + } + END_SU2_OMP_FOR + } + } /*--- Remove any contributions from no-slip walls. ---*/ @@ -610,7 +650,47 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } /*--- OPTION B: Enforce Euler wall BC by projecting velocity to tangent plane ---*/ - ProjectEulerWallVelocity(geo_coarse, sol_coarse, config, true); + + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + + SU2_OMP_FOR_STAT(32) + for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + + /*--- Get coarse grid normal ---*/ + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < 1e-12) continue; + + /*--- Normalize normal vector ---*/ + su2double UnitNormal[3] = {0.0}; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + UnitNormal[iDim] = Normal[iDim] / Area; + } + + /*--- Get current solution ---*/ + auto* Solution = sol_coarse->GetNodes()->GetSolution(Point_Coarse); + + /*--- Compute v·n ---*/ + su2double vn = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + vn += Solution[iDim + 1] * UnitNormal[iDim]; // Solution layout: [rho, rho*u, rho*v, (rho*w), E] + } + + /*--- Project velocity to tangent plane: v_new = v - (v·n)n ---*/ + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + Solution[iDim + 1] -= vn * UnitNormal[iDim]; + } + } + END_SU2_OMP_FOR + } + } /*--- MPI the new interpolated solution ---*/ @@ -754,51 +834,3 @@ void CMultiGridIntegration::Adjoint_Setup(CGeometry ****geometry, CSolver *****s } } - -void CMultiGridIntegration::ProjectEulerWallVelocity(CGeometry *geo_coarse, CSolver *sol_coarse, - const CConfig *config, bool use_solution) { - /*--- Enforce Euler wall boundary condition by projecting velocity to tangent plane ---*/ - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { - for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - if (geo_coarse->nodes->GetDomain(Point_Coarse)) { - - /*--- Get coarse grid normal vector ---*/ - auto Normal = geo_coarse->vertex[iMarker][iVertex]->GetNormal(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - su2double UnitNormal[MAXNDIM] = {0.0}; - for (auto iDim = 0u; iDim < nDim; iDim++) - UnitNormal[iDim] = Normal[iDim] / Area; - - /*--- Get density from solution container ---*/ - const su2double *Sol = sol_coarse->GetNodes()->GetSolution(Point_Coarse); - su2double Density = Sol[0]; - - /*--- Get velocity vector from solution or corrections ---*/ - su2double Velocity[MAXNDIM] = {0.0}; - if (use_solution) { - for (auto iDim = 0u; iDim < nDim; iDim++) - Velocity[iDim] = Sol[iDim+1] / Density; - } else { - const su2double *SolOld = sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse); - for (auto iDim = 0u; iDim < nDim; iDim++) - Velocity[iDim] = (Sol[iDim+1] - SolOld[iDim+1]) / Density; - } - - /*--- Compute normal component and project to tangent plane ---*/ - su2double VelNormal = GeometryToolbox::DotProduct(nDim, Velocity, UnitNormal); - for (auto iDim = 0u; iDim < nDim; iDim++) - Velocity[iDim] -= VelNormal * UnitNormal[iDim]; - - /*--- Update momentum components in solution container ---*/ - su2double Solution_Proj[MAXNVAR] = {0.0}; - Solution_Proj[0] = Density; - for (auto iDim = 0u; iDim < nDim; iDim++) - Solution_Proj[iDim+1] = Velocity[iDim] * Density; - sol_coarse->GetNodes()->SetSolution(Point_Coarse, Solution_Proj); - } - } - } - } -} From 69e5d5b692286161df817f4e864a281df03f8200 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 16:44:12 +0100 Subject: [PATCH 023/229] remove debug info --- Common/src/geometry/CMultiGridGeometry.cpp | 193 ------------------ .../src/integration/CMultiGridIntegration.cpp | 138 +++++-------- 2 files changed, 56 insertions(+), 275 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index a2e66bd3c334..0e448ff1f8a4 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -772,98 +772,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- For now, we skip this validation in the constructor to avoid segfaults. ---*/ /*--- TODO: Move this to a separate validation function called after SetVertex(). ---*/ -#if 0 // Disabled - causes segfault as vertex array not yet initialized - if (size > SINGLE_NODE && config->GetMG_DebugHaloCoordinates()) { - - if (rank == MASTER_NODE) { - cout << "\n--- MG Halo Coordinate Validation (Level " << iMesh << ") ---" << endl; - } - - /*--- For each SEND_RECEIVE marker pair, exchange coordinates and validate ---*/ - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - if ((config->GetMarker_All_KindBC(iMarker) == SEND_RECEIVE) && (config->GetMarker_All_SendRecv(iMarker) > 0)) { - const auto MarkerS = iMarker; - const auto MarkerR = iMarker + 1; - - const auto send_to = config->GetMarker_All_SendRecv(MarkerS) - 1; - const auto receive_from = abs(config->GetMarker_All_SendRecv(MarkerR)) - 1; - - const auto nVertexS = nVertex[MarkerS]; - const auto nVertexR = nVertex[MarkerR]; - - /*--- Allocate buffers for coordinate exchange ---*/ - vector Buffer_Send_Coord(nVertexS * nDim); - vector Buffer_Receive_Coord(nVertexR * nDim); - - /*--- Pack SEND coordinates (domain CVs being sent) ---*/ - for (auto iVertex = 0ul; iVertex < nVertexS; iVertex++) { - const auto iPoint = vertex[MarkerS][iVertex]->GetNode(); - const auto* Coord = nodes->GetCoord(iPoint); - for (auto iDim = 0u; iDim < nDim; iDim++) { - Buffer_Send_Coord[iVertex * nDim + iDim] = Coord[iDim]; - } - } - - /*--- Exchange coordinates ---*/ - SU2_MPI::Sendrecv(Buffer_Send_Coord.data(), nVertexS * nDim, MPI_DOUBLE, send_to, 0, - Buffer_Receive_Coord.data(), nVertexR * nDim, MPI_DOUBLE, receive_from, 0, - SU2_MPI::GetComm(), MPI_STATUS_IGNORE); - - /*--- Validate RECEIVE coordinates against local halo CVs ---*/ - unsigned long nMismatch = 0; - su2double maxError = 0.0; - su2double tolerance = 1e-10; - - for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { - const auto iPoint = vertex[MarkerR][iVertex]->GetNode(); - const auto* Coord_Local = nodes->GetCoord(iPoint); - - su2double error = 0.0; - for (auto iDim = 0u; iDim < nDim; iDim++) { - su2double coord_remote = Buffer_Receive_Coord[iVertex * nDim + iDim]; - su2double diff = fabs(Coord_Local[iDim] - coord_remote); - error += diff * diff; - } - error = sqrt(error); - - if (error > tolerance) { - nMismatch++; - maxError = max(maxError, error); - - if (nMismatch <= 5) { // Only print first 5 mismatches - cout << "COORD MISMATCH [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << ", Vertex " << iVertex << ", Point " << iPoint << "]: "; - cout << "Local=("; - for (auto iDim = 0u; iDim < nDim; iDim++) { - cout << Coord_Local[iDim]; - if (iDim < nDim - 1) cout << ", "; - } - cout << "), Remote=("; - for (auto iDim = 0u; iDim < nDim; iDim++) { - cout << Buffer_Receive_Coord[iVertex * nDim + iDim]; - if (iDim < nDim - 1) cout << ", "; - } - cout << "), Error=" << error << endl; - } - } - } - - if (nMismatch > 0) { - cout << "WARNING [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << "]: " << nMismatch << " coordinate mismatches detected (max error: " - << maxError << ")" << endl; - } else if (nVertexR > 0) { - cout << "INFO [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << "]: All " << nVertexR << " halo CV coordinates match (tol=" << tolerance << ")" << endl; - } - } - } - - if (rank == MASTER_NODE) { - cout << "--- End MG Halo Coordinate Validation ---\n" << endl; - } - } -#endif // Disabled validation code #endif // HAVE_MPI /*--- Update the number of points after the MPI agglomeration ---*/ @@ -1626,104 +1534,3 @@ su2double CMultiGridGeometry::ComputeLocalCurvature(const CGeometry* fine_grid, return max_angle; } - -void CMultiGridGeometry::ValidateHaloCoordinates(const CConfig* config, unsigned short iMesh) const { -#ifdef HAVE_MPI - - int size = SU2_MPI::GetSize(); - int rank = SU2_MPI::GetRank(); - - if (size == SINGLE_NODE || !config->GetMG_DebugHaloCoordinates()) { - return; // Skip if single-node or debug option disabled - } - - if (rank == MASTER_NODE) { - cout << "\n--- MG Halo Coordinate Validation (Level " << iMesh << ") ---" << endl; - } - - /*--- For each SEND_RECEIVE marker pair, exchange coordinates and validate ---*/ - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - if ((config->GetMarker_All_KindBC(iMarker) == SEND_RECEIVE) && (config->GetMarker_All_SendRecv(iMarker) > 0)) { - const auto MarkerS = iMarker; - const auto MarkerR = iMarker + 1; - - const auto send_to = config->GetMarker_All_SendRecv(MarkerS) - 1; - const auto receive_from = abs(config->GetMarker_All_SendRecv(MarkerR)) - 1; - - const auto nVertexS = nVertex[MarkerS]; - const auto nVertexR = nVertex[MarkerR]; - - /*--- Allocate buffers for coordinate exchange ---*/ - vector Buffer_Send_Coord(nVertexS * nDim); - vector Buffer_Receive_Coord(nVertexR * nDim); - - /*--- Pack SEND coordinates (domain CVs being sent) ---*/ - for (auto iVertex = 0ul; iVertex < nVertexS; iVertex++) { - const auto iPoint = vertex[MarkerS][iVertex]->GetNode(); - const auto* Coord = nodes->GetCoord(iPoint); - for (auto iDim = 0u; iDim < nDim; iDim++) { - Buffer_Send_Coord[iVertex * nDim + iDim] = Coord[iDim]; - } - } - - /*--- Exchange coordinates ---*/ - SU2_MPI::Sendrecv(Buffer_Send_Coord.data(), nVertexS * nDim, MPI_DOUBLE, send_to, 0, - Buffer_Receive_Coord.data(), nVertexR * nDim, MPI_DOUBLE, receive_from, 0, - SU2_MPI::GetComm(), MPI_STATUS_IGNORE); - - /*--- Validate RECEIVE coordinates against local halo CVs ---*/ - unsigned long nMismatch = 0; - su2double maxError = 0.0; - su2double tolerance = 1e-10; - - for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { - const auto iPoint = vertex[MarkerR][iVertex]->GetNode(); - const auto* Coord_Local = nodes->GetCoord(iPoint); - - su2double error = 0.0; - for (auto iDim = 0u; iDim < nDim; iDim++) { - su2double coord_remote = Buffer_Receive_Coord[iVertex * nDim + iDim]; - su2double diff = fabs(Coord_Local[iDim] - coord_remote); - error += diff * diff; - } - error = sqrt(error); - - if (error > tolerance) { - nMismatch++; - maxError = max(maxError, error); - - if (nMismatch <= 5) { // Only print first 5 mismatches - cout << "COORD MISMATCH [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << ", Vertex " << iVertex << ", Point " << iPoint << "]: "; - cout << "Local=("; - for (auto iDim = 0u; iDim < nDim; iDim++) { - cout << Coord_Local[iDim]; - if (iDim < nDim - 1) cout << ", "; - } - cout << "), Remote=("; - for (auto iDim = 0u; iDim < nDim; iDim++) { - cout << Buffer_Receive_Coord[iVertex * nDim + iDim]; - if (iDim < nDim - 1) cout << ", "; - } - cout << "), Error=" << error << endl; - } - } - } - - if (nMismatch > 0) { - cout << "WARNING [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << "]: " << nMismatch << " coordinate mismatches detected (max error: " - << maxError << ")" << endl; - } else if (nVertexR > 0) { - cout << "INFO [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << "]: All " << nVertexR << " halo CV coordinates match (tol=" << tolerance << ")" << endl; - } - } - } - - if (rank == MASTER_NODE) { - cout << "--- End MG Halo Coordinate Validation ---\n" << endl; - } - -#endif // HAVE_MPI -} diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 1617b968fa96..7d0e40fbbe02 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -28,6 +28,60 @@ #include "../../include/integration/CMultiGridIntegration.hpp" #include "../../../Common/include/parallelization/omp_structure.hpp" +namespace { +/*! + * \brief Helper function to enforce Euler wall BC by projecting momentum to tangent plane. + * \param[in] geo_coarse - Coarse grid geometry. + * \param[in] config - Problem configuration. + * \param[in,out] sol_coarse - Coarse grid solver (to access and modify solution/correction). + * \param[in] use_solution_old - If true, project Solution_Old (corrections); if false, project Solution. + */ +void ProjectEulerWallToTangentPlane(CGeometry* geo_coarse, const CConfig* config, CSolver* sol_coarse, + bool use_solution_old) { + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + + SU2_OMP_FOR_STAT(32) + for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + + /*--- Get coarse grid normal ---*/ + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < 1e-12) continue; + + /*--- Normalize normal vector ---*/ + su2double UnitNormal[3] = {0.0}; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + UnitNormal[iDim] = Normal[iDim] / Area; + } + + /*--- Get current solution or correction ---*/ + su2double* Data = use_solution_old ? + sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse) : + sol_coarse->GetNodes()->GetSolution(Point_Coarse); + + /*--- Compute normal component of momentum (v·n or correction·n) ---*/ + su2double momentum_n = 0.0; + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + momentum_n += Data[iDim + 1] * UnitNormal[iDim]; + } + + /*--- Project to tangent plane: Data -= (Data·n)n ---*/ + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + Data[iDim + 1] -= momentum_n * UnitNormal[iDim]; + } + } + END_SU2_OMP_FOR + } + } +} +} // anonymous namespace CMultiGridIntegration::CMultiGridIntegration() : CIntegration() { } @@ -344,47 +398,7 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; /*--- OPTION C: Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ - - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { - - SU2_OMP_FOR_STAT(32) - for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - - /*--- Get coarse grid normal ---*/ - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < 1e-12) continue; - - /*--- Normalize normal vector ---*/ - su2double UnitNormal[3] = {0.0}; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - UnitNormal[iDim] = Normal[iDim] / Area; - } - - /*--- Get correction (stored in Solution_Old) ---*/ - auto* Correction = sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse); - - /*--- Compute normal component of momentum correction ---*/ - su2double corr_n = 0.0; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - corr_n += Correction[iDim + 1] * UnitNormal[iDim]; - } - - /*--- Project correction to tangent plane: correction -= (correction·n)n ---*/ - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - Correction[iDim + 1] -= corr_n * UnitNormal[iDim]; - } - } - END_SU2_OMP_FOR - } - } + ProjectEulerWallToTangentPlane(geo_coarse, config, sol_coarse, true); /*--- Remove any contributions from no-slip walls. ---*/ @@ -650,47 +664,7 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } /*--- OPTION B: Enforce Euler wall BC by projecting velocity to tangent plane ---*/ - - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { - - SU2_OMP_FOR_STAT(32) - for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - - /*--- Get coarse grid normal ---*/ - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < 1e-12) continue; - - /*--- Normalize normal vector ---*/ - su2double UnitNormal[3] = {0.0}; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - UnitNormal[iDim] = Normal[iDim] / Area; - } - - /*--- Get current solution ---*/ - auto* Solution = sol_coarse->GetNodes()->GetSolution(Point_Coarse); - - /*--- Compute v·n ---*/ - su2double vn = 0.0; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - vn += Solution[iDim + 1] * UnitNormal[iDim]; // Solution layout: [rho, rho*u, rho*v, (rho*w), E] - } - - /*--- Project velocity to tangent plane: v_new = v - (v·n)n ---*/ - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - Solution[iDim + 1] -= vn * UnitNormal[iDim]; - } - } - END_SU2_OMP_FOR - } - } + ProjectEulerWallToTangentPlane(geo_coarse, config, sol_coarse, false); /*--- MPI the new interpolated solution ---*/ From 40b8638b2b95ced3d9a4e454e33f00e43e6ada22 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 16:44:54 +0100 Subject: [PATCH 024/229] precommit --- Common/src/geometry/CMultiGridGeometry.cpp | 54 ++++++++-------------- 1 file changed, 20 insertions(+), 34 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 0e448ff1f8a4..e69c346f58cd 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -39,7 +39,6 @@ /*--- Nijso says: this could perhaps be replaced by metis partitioning? ---*/ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, unsigned short iMesh) : CGeometry() { - nDim = fine_grid->GetnDim(); // Write the number of dimensions of the coarse grid. /*--- Maximum agglomeration size in 2D is 4 nodes, in 3D is 8 nodes. ---*/ @@ -55,8 +54,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un 3rd) One marker ---> Surface (always agglomerate) 4th) No marker ---> Internal Volume (always agglomerate) ---*/ - //note that for MPI, we introduce interfaces and we can choose to have agglomeration over - //the interface or not. Nishikawa chooses not to agglomerate over interfaces. + // note that for MPI, we introduce interfaces and we can choose to have agglomeration over + // the interface or not. Nishikawa chooses not to agglomerate over interfaces. /*--- Set a marker to indicate indirect agglomeration, for quads and hexs, i.e. consider up to neighbors of neighbors. @@ -181,20 +180,17 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note that in 2D, this is a corner and we do not agglomerate unless they both are SEND_RECEIVE. ---*/ /*--- In 3D, we agglomerate if the 2 markers are the same. ---*/ if (counter == 2) { - /*--- agglomerate if one of the 2 markers are MPI markers. ---*/ - if (nDim==2) + if (nDim == 2) agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE); /*--- agglomerate if both markers are the same. ---*/ - if (nDim==3) - agglomerate_seed = (copy_marker[0] == copy_marker[1]); - + if (nDim == 3) agglomerate_seed = (copy_marker[0] == copy_marker[1]); /*--- Do not agglomerate if one of the 2 markers are MPI markers. ---*/ - //agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) != SEND_RECEIVE) && - // (config->GetMarker_All_KindBC(copy_marker[1]) != SEND_RECEIVE); + // agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) != SEND_RECEIVE) && + // (config->GetMarker_All_KindBC(copy_marker[1]) != SEND_RECEIVE); /*--- Euler walls: check curvature-based agglomeration criterion for both markers ---*/ // only in 3d because in 2d it's a corner @@ -217,7 +213,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } } - } /*--- If there are more than 2 markers, the aglomeration will be discarded ---*/ @@ -340,8 +335,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } - - /*--- STEP 2: Agglomerate the domain points. ---*/ // cout << "*********** STEP 2 ***" << endl; auto iteration = 0ul; @@ -562,8 +555,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un cout << " marker type = " << config->GetMarker_All_KindBC(iMarker) << endl; cout << " send/recv = " << config->GetMarker_All_SendRecv(iMarker) << endl; if ((config->GetMarker_All_KindBC(iMarker) == SEND_RECEIVE) && (config->GetMarker_All_SendRecv(iMarker) > 0)) { - const auto MarkerS = iMarker; // sending marker - const auto MarkerR = iMarker + 1; // receiving marker + const auto MarkerS = iMarker; // sending marker + const auto MarkerR = iMarker + 1; // receiving marker const auto send_to = config->GetMarker_All_SendRecv(MarkerS) - 1; const auto receive_from = abs(config->GetMarker_All_SendRecv(MarkerR)) - 1; @@ -652,9 +645,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Validate that parent mapping was found (only matters if not skipped later) ---*/ if (Parent_Local[iVertex] == ULONG_MAX) { - SU2_MPI::Error(string("MPI agglomeration failed to map parent index ") + - to_string(Parent_Remote[iVertex]) + - string(" for vertex ") + to_string(iVertex), + SU2_MPI::Error(string("MPI agglomeration failed to map parent index ") + to_string(Parent_Remote[iVertex]) + + string(" for vertex ") + to_string(iVertex), CURRENT_FUNCTION); } @@ -662,7 +654,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } /*--- Debug: Track state before updating Index_CoarseCV ---*/ - //auto Index_CoarseCV_Before = Index_CoarseCV; + // auto Index_CoarseCV_Before = Index_CoarseCV; /*--- Only increment by the number of parents that will actually be used ---*/ Index_CoarseCV += nUsedParents; @@ -678,9 +670,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Debug: Check for out-of-bounds access ---*/ if (iPoint_Coarse >= Index_CoarseCV) { cout << "ERROR [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << "]: Out-of-bounds coarse CV index " << iPoint_Coarse - << " >= " << Index_CoarseCV - << " (vertex " << iVertex << ", fine point " << iPoint_Fine << ")" << endl; + << "]: Out-of-bounds coarse CV index " << iPoint_Coarse << " >= " << Index_CoarseCV << " (vertex " + << iVertex << ", fine point " << iPoint_Fine << ")" << endl; nOutOfBounds++; continue; } @@ -694,12 +685,10 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Only print detailed info for first few conflicts or if suspicious ---*/ if (nConflicts <= 5 || existing_parent < nPointDomain) { - cout << "INFO [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << "]: Halo point " << iPoint_Fine - << " already agglomerated to parent " << existing_parent - << (existing_parent < nPointDomain ? " (DOMAIN CV!)" : " (halo CV)") - << ", skipping reassignment to " << iPoint_Coarse - << " (from rank " << receive_from << ")" << endl; + cout << "INFO [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR << "]: Halo point " + << iPoint_Fine << " already agglomerated to parent " << existing_parent + << (existing_parent < nPointDomain ? " (DOMAIN CV!)" : " (halo CV)") << ", skipping reassignment to " + << iPoint_Coarse << " (from rank " << receive_from << ")" << endl; } } else { /*--- Same parent from different interface (duplicate) - just skip silently ---*/ @@ -721,9 +710,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } /*--- Debug: Report statistics for this marker pair ---*/ - cout << "MPI Agglomeration [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << " (rank " << send_to << " <-> " << receive_from << ")]: " - << nSuccess << " assigned, " << nSkipped << " duplicates, " + cout << "MPI Agglomeration [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR << " (rank " << send_to + << " <-> " << receive_from << ")]: " << nSuccess << " assigned, " << nSkipped << " duplicates, " << nConflicts << " conflicts"; if (nOutOfBounds > 0) { cout << ", " << nOutOfBounds << " OUT-OF-BOUNDS (CRITICAL!)"; @@ -737,8 +725,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Debug: Validate buffer size assumption ---*/ if (nVertexS != nVertexR) { cout << "WARNING [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << "]: Asymmetric interface - nVertexS=" << nVertexS - << " != nVertexR=" << nVertexR << endl; + << "]: Asymmetric interface - nVertexS=" << nVertexS << " != nVertexR=" << nVertexR << endl; } } } @@ -1092,7 +1079,6 @@ void CMultiGridGeometry::SetSuitableNeighbors(vector& Suitable_In // Suitable_Indirect_Neighbors.resize(it2 - Suitable_Indirect_Neighbors.begin()); } - void CMultiGridGeometry::SetPoint_Connectivity(const CGeometry* fine_grid) { /*--- Temporary, CPoint (nodes) then compresses this structure. ---*/ vector> points(nPoint); From bb3a25a85a08d930be563b33b4b593b7cfeedfe0 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 16:45:53 +0100 Subject: [PATCH 025/229] remove implicit lines --- Common/include/geometry/CMultiGridGeometry.hpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Common/include/geometry/CMultiGridGeometry.hpp b/Common/include/geometry/CMultiGridGeometry.hpp index 9ae405cf0a9a..c4cc50cf9a19 100644 --- a/Common/include/geometry/CMultiGridGeometry.hpp +++ b/Common/include/geometry/CMultiGridGeometry.hpp @@ -67,17 +67,6 @@ class CMultiGridGeometry final : public CGeometry { void SetSuitableNeighbors(vector& Suitable_Indirect_Neighbors, unsigned long iPoint, unsigned long Index_CoarseCV, const CGeometry* fine_grid) const; - /*! - * \brief Agglomerate high-aspect ratio interior cells along implicit lines starting from wall vertices. - * \param[in,out] Index_CoarseCV - Reference to the current coarse control volume index that will be - * incremented as new coarse CVs are created. - * \param[in] fine_grid - Geometrical definition of the problem (fine grid). - * \param[in] config - Definition of the particular problem. - * \param[in,out] MGQueue_InnerCV - Queue used for STEP 2; agglomerated points will be removed from it. - */ - void AgglomerateImplicitLines(unsigned long& Index_CoarseCV, const CGeometry* fine_grid, const CConfig* config, - CMultiGridQueue& MGQueue_InnerCV); - /*! * \brief Compute surface straightness for multigrid geometry. * \param[in] config - Definition of the particular problem. From 2082eccb64244a34aa4086325bfca0f48a3f659a Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 18 Jan 2026 08:48:25 -0800 Subject: [PATCH 026/229] add param to NEMO's MSW --- Common/src/CConfig.cpp | 2 +- SU2_CFD/include/numerics/NEMO/convection/msw.hpp | 2 ++ SU2_CFD/src/numerics/NEMO/convection/msw.cpp | 6 +++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index bf0e5863cbc6..8a95237ac3fb 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -1917,7 +1917,7 @@ void CConfig::SetConfig_Options() { /* DESCRIPTION: Relaxation of the CHT coupling */ addDoubleOption("RELAXATION_FACTOR_CHT", Relaxation_Factor_CHT, 1.0); /* DESCRIPTION: MSW alpha coefficient */ - addDoubleOption("MSW_ALPHA", MSW_Alpha, 6.0); + addDoubleOption("MSW_ALPHA", MSW_Alpha, 5.0); /* DESCRIPTION: Roe coefficient */ addDoubleOption("ROE_KAPPA", Roe_Kappa, 0.5); /* DESCRIPTION: Roe-Turkel preconditioning for low Mach number flows */ diff --git a/SU2_CFD/include/numerics/NEMO/convection/msw.hpp b/SU2_CFD/include/numerics/NEMO/convection/msw.hpp index 28e7b7e839d2..f968e63c17f6 100644 --- a/SU2_CFD/include/numerics/NEMO/convection/msw.hpp +++ b/SU2_CFD/include/numerics/NEMO/convection/msw.hpp @@ -38,6 +38,8 @@ */ class CUpwMSW_NEMO : public CNEMONumerics { private: + const su2double alpha; + su2double *Diff_U; su2double *ust_i, *ust_j; su2double *Fc_i, *Fc_j; diff --git a/SU2_CFD/src/numerics/NEMO/convection/msw.cpp b/SU2_CFD/src/numerics/NEMO/convection/msw.cpp index 6f7c40eecf06..638ba6947803 100644 --- a/SU2_CFD/src/numerics/NEMO/convection/msw.cpp +++ b/SU2_CFD/src/numerics/NEMO/convection/msw.cpp @@ -30,8 +30,9 @@ CUpwMSW_NEMO::CUpwMSW_NEMO(unsigned short val_nDim, unsigned short val_nVar, unsigned short val_nPrimVar, unsigned short val_nPrimVarGrad, - CConfig *config) : CNEMONumerics(val_nDim, val_nVar, val_nPrimVar, val_nPrimVarGrad, - config) { + CConfig *config) : + CNEMONumerics(val_nDim, val_nVar, val_nPrimVar, val_nPrimVarGrad, config), + alpha(config->GetMSW_Alpha()) { /*--- Allocate arrays ---*/ Diff_U = new su2double [nVar]; @@ -109,7 +110,6 @@ CUpwMSW_NEMO::~CUpwMSW_NEMO() { CNumerics::ResidualType<> CUpwMSW_NEMO::ComputeResidual(const CConfig *config) { /*--- Set parameters in the numerical method ---*/ - const su2double alpha = 5.0; const su2double epsilon = 0.0; /*--- Calculate supporting geometry parameters ---*/ From 9109f7c3520aa5bd4b514f8a89e9d62a07947be3 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 18 Jan 2026 08:58:14 -0800 Subject: [PATCH 027/229] add grid velocity --- SU2_CFD/include/numerics/flow/convection/fvs.hpp | 1 + SU2_CFD/src/numerics/flow/convection/fvs.cpp | 16 +++++++++------- config_template.cfg | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/SU2_CFD/include/numerics/flow/convection/fvs.hpp b/SU2_CFD/include/numerics/flow/convection/fvs.hpp index f55df36d2797..f3afb2dfb55c 100644 --- a/SU2_CFD/include/numerics/flow/convection/fvs.hpp +++ b/SU2_CFD/include/numerics/flow/convection/fvs.hpp @@ -41,6 +41,7 @@ class CUpwMSW_Flow final : public CNumerics { static constexpr auto MAXNVAR = MAXNDIM + 2; const su2double alpha; + const bool dynamic_grid; su2double buf_Jacobian_i[MAXNVAR * MAXNVAR], buf_Jacobian_j[MAXNVAR * MAXNVAR]; su2double* Jacobian_i[MAXNVAR]; /*!< \brief The Jacobian w.r.t. point i after computation. */ diff --git a/SU2_CFD/src/numerics/flow/convection/fvs.cpp b/SU2_CFD/src/numerics/flow/convection/fvs.cpp index 8beb47653fdb..a22e6d4400bc 100644 --- a/SU2_CFD/src/numerics/flow/convection/fvs.cpp +++ b/SU2_CFD/src/numerics/flow/convection/fvs.cpp @@ -29,11 +29,7 @@ #include "../../../../../Common/include/toolboxes/geometry_toolbox.hpp" CUpwMSW_Flow::CUpwMSW_Flow(unsigned short val_nDim, unsigned short val_nVar, const CConfig* config) : - CNumerics(val_nDim, val_nVar, config), alpha(config->GetMSW_Alpha()) { - - if (config->GetDynamic_Grid() && SU2_MPI::GetRank() == MASTER_NODE) { - std::cout << "WARNING: Grid velocities are NOT yet considered in the MSW scheme." << std::endl; - } + CNumerics(val_nDim, val_nVar, config), alpha(config->GetMSW_Alpha()), dynamic_grid(config->GetDynamic_Grid()) { /*--- Allocate arrays ---*/ for (unsigned short iVar = 0; iVar < nVar; iVar++) { @@ -48,6 +44,10 @@ CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { AD::SetPreaccIn(V_i, nDim + 4); AD::SetPreaccIn(V_j, nDim + 4); AD::SetPreaccIn(Normal, nDim); + if (dynamic_grid) { + AD::SetPreaccIn(GridVel_i, nDim); + AD::SetPreaccIn(GridVel_j, nDim); + } /*--- Calculate supporting geometry parameters ---*/ @@ -100,12 +100,14 @@ CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { Vst_j[nDim + 4] = onemw * c_j + w * c_i; su2double Velst_i[MAXNDIM] = {}, Velst_j[MAXNDIM] = {}; + su2double ProjVelst_i{}, ProjVelst_j{}; for (auto iDim = 0u; iDim < nDim; ++iDim) { Velst_i[iDim] = Vst_i[iDim + 1]; Velst_j[iDim] = Vst_j[iDim + 1]; + + ProjVelst_i += (Velst_i[iDim] - (dynamic_grid ? GridVel_i[iDim] : 0)) * UnitNormal[iDim]; + ProjVelst_j += (Velst_j[iDim] - (dynamic_grid ? GridVel_j[iDim] : 0)) * UnitNormal[iDim]; } - const su2double ProjVelst_i = GeometryToolbox::DotProduct(MAXNDIM, Velst_i, UnitNormal); - const su2double ProjVelst_j = GeometryToolbox::DotProduct(MAXNDIM, Velst_j, UnitNormal); /*--- Flow eigenvalues at i (Lambda+) ---*/ diff --git a/config_template.cfg b/config_template.cfg index b7f1c4dc9c01..99eb260e61ed 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -1676,7 +1676,7 @@ ENTROPY_FIX_COEFF= 0.0 % % MSW coefficient for blending states based on pressure jump. % Using 0 makes the scheme average left and right regardless of pressure. -MSW_ALPHA= 6.0 +MSW_ALPHA= 5.0 % % Higher values than 1 (3 to 4) make the global Jacobian of central schemes (compressible flow % only) more diagonal dominant (but mathematically incorrect) so that higher CFL can be used. From c58caf95ef2241501fafaacb885db71f4e36130c Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 18:48:15 +0100 Subject: [PATCH 028/229] cleanup commented stuff --- Common/src/geometry/CMultiGridGeometry.cpp | 138 ++------------------- 1 file changed, 10 insertions(+), 128 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index e69c346f58cd..96d4234b1ce8 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -96,7 +96,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- STEP 1: The first step is the boundary agglomeration. ---*/ for (auto iMarker = 0u; iMarker < fine_grid->GetnMarker(); iMarker++) { - cout << "marker name = " << config->GetMarker_All_TagBound(iMarker) << endl; for (auto iVertex = 0ul; iVertex < fine_grid->GetnVertex(iMarker); iVertex++) { const auto iPoint = fine_grid->vertex[iMarker][iVertex]->GetNode(); @@ -145,10 +144,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Valley -> Valley : conditionally allowed when both points are on the same marker. ---*/ /*--- ! Note that in the case of MPI SEND_RECEIVE markers, we might need other conditions ---*/ if (counter == 1) { - cout << "we have exactly one marker at point " << iPoint << endl; - cout << " marker is " << marker_seed[0] - << ", marker name = " << config->GetMarker_All_TagBound(marker_seed[0]); - cout << ", marker type = " << config->GetMarker_All_KindBC(marker_seed[0]) << endl; // The seed/parent is one valley, so we set this part to true // if the child is on the same valley, we set it to true as well. agglomerate_seed = true; @@ -158,7 +153,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if (!boundIsStraight[marker_seed[0]]) { /*--- Compute local curvature at this point ---*/ su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, marker_seed[0]); - // limit to 30 degrees + // limit to 45 degrees if (local_curvature >= 45.0) { agglomerate_seed = false; // High curvature: do not agglomerate euler_wall_rejected_curvature[marker_seed[0]]++; @@ -188,10 +183,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- agglomerate if both markers are the same. ---*/ if (nDim == 3) agglomerate_seed = (copy_marker[0] == copy_marker[1]); - /*--- Do not agglomerate if one of the 2 markers are MPI markers. ---*/ - // agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) != SEND_RECEIVE) && - // (config->GetMarker_All_KindBC(copy_marker[1]) != SEND_RECEIVE); - /*--- Euler walls: check curvature-based agglomeration criterion for both markers ---*/ // only in 3d because in 2d it's a corner bool euler_wall_rejected_here = false; @@ -200,7 +191,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if (!boundIsStraight[copy_marker[i]]) { /*--- Compute local curvature at this point ---*/ su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, copy_marker[i]); - // limit to 30 degrees + // limit to 45 degrees if (local_curvature >= 45.0) { agglomerate_seed = false; // High curvature: do not agglomerate euler_wall_rejected_curvature[copy_marker[i]]++; @@ -221,27 +212,17 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- If the seed (parent) can be agglomerated, we try to agglomerate connected childs to the parent ---*/ /*--- Note that in 2D we allow a maximum of 4 nodes to be agglomerated ---*/ if (agglomerate_seed) { - // cout << " seed can be agglomerated to more points." << endl; - /*--- Now we do a sweep over all the nodes that surround the seed point ---*/ + /*--- Now we do a sweep over all the nodes that surround the seed point ---*/ for (auto CVPoint : fine_grid->nodes->GetPoints(iPoint)) { - // cout << " checking child CVPoint = " - // << CVPoint - // << ", coord = " - // << fine_grid->nodes->GetCoord(CVPoint, 0) - // << " " - // << fine_grid->nodes->GetCoord(CVPoint, 1) - // << endl; /*--- The new point can be agglomerated ---*/ if (SetBoundAgglomeration(CVPoint, marker_seed, fine_grid, config)) { - // cout << " agglomerate " << CVPoint << " with seed point "<< iPoint << endl; - /*--- We set the value of the parent ---*/ + /*--- We set the value of the parent ---*/ fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); /*--- We set the value of the child ---*/ - nodes->SetChildren_CV(Index_CoarseCV, nChildren, CVPoint); nChildren++; /*--- In 2D, we agglomerate exactly 2 nodes if the nodes are on the line edge. ---*/ @@ -262,15 +243,10 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Now we do a sweep over all the indirect nodes that can be added ---*/ for (auto CVPoint : Suitable_Indirect_Neighbors) { - // cout << " Boundary: checking indirect neighbors " << CVPoint - // << ", coord = " - // << fine_grid->nodes->GetCoord(CVPoint, 0) - // << " " - // << fine_grid->nodes->GetCoord(CVPoint, 1) - // << endl; + /*--- The new point can be agglomerated ---*/ if (SetBoundAgglomeration(CVPoint, marker_seed, fine_grid, config)) { - // cout << " Boundary: indirect neighbor " << CVPoint << " can be agglomerated." << endl; + /*--- We set the value of the parent ---*/ fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); @@ -289,8 +265,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } - /*--- At this stage we can check if the node is an isolated node. ---*/ - /*--- Update the number of children of the coarse control volume. ---*/ nodes->SetnChildren_CV(Index_CoarseCV, nChildren); @@ -305,10 +279,9 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un for (auto iMarker = 0u; iMarker < fine_grid->GetnMarker(); iMarker++) { for (auto iVertex = 0ul; iVertex < fine_grid->GetnVertex(iMarker); iVertex++) { const auto iPoint = fine_grid->vertex[iMarker][iVertex]->GetNode(); - // cout << "point " << iPoint << ", parent = " << fine_grid->nodes->GetParent_CV(iPoint) - // << " " << fine_grid->nodes->GetAgglomerate(iPoint) << endl; + if ((!fine_grid->nodes->GetAgglomerate(iPoint)) && (fine_grid->nodes->GetDomain(iPoint))) { - // cout << " Boundary:mark left-over nodes " << endl; + fine_grid->nodes->SetParent_CV(iPoint, Index_CoarseCV); nodes->SetChildren_CV(Index_CoarseCV, 0, iPoint); nodes->SetnChildren_CV(Index_CoarseCV, 1); @@ -336,7 +309,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } /*--- STEP 2: Agglomerate the domain points. ---*/ - // cout << "*********** STEP 2 ***" << endl; auto iteration = 0ul; while (!MGQueue_InnerCV.EmptyQueue() && (iteration < fine_grid->GetnPoint())) { const auto iPoint = MGQueue_InnerCV.NextCV(); @@ -348,8 +320,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if ((!fine_grid->nodes->GetAgglomerate(iPoint)) && (fine_grid->nodes->GetDomain(iPoint)) && (GeometricalCheck(iPoint, fine_grid, config))) { unsigned short nChildren = 1; - // cout << "***** internal seed point " << iPoint << ", coord = " << fine_grid->nodes->GetCoord(iPoint, 0) << " " - // << fine_grid->nodes->GetCoord(iPoint, 1) << endl; /*--- We set an index for the parent control volume ---*/ @@ -372,7 +342,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if ((!fine_grid->nodes->GetAgglomerate(CVPoint)) && (fine_grid->nodes->GetDomain(CVPoint)) && (GeometricalCheck(CVPoint, fine_grid, config))) { /*--- We set the value of the parent ---*/ - // cout << "agglomerate " << CVPoint << " to internal seed point " << iPoint << endl; + fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); /*--- We set the value of the child ---*/ @@ -401,7 +371,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if (nChildren == maxAgglomSize) break; /*--- The new point can be agglomerated ---*/ if ((!fine_grid->nodes->GetAgglomerate(CVPoint)) && (fine_grid->nodes->GetDomain(CVPoint))) { - // cout << "indirect agglomerate " << CVPoint << " to internal seed point " << iPoint << endl; /*--- We set the value of the parent ---*/ fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); @@ -438,7 +407,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un for (auto iPoint = 0ul; iPoint < fine_grid->GetnPoint(); iPoint++) { if ((!fine_grid->nodes->GetAgglomerate(iPoint)) && (fine_grid->nodes->GetDomain(iPoint))) { - cout << "!!! agglomerate isolated point " << iPoint << endl; fine_grid->nodes->SetParent_CV(iPoint, Index_CoarseCV); if (fine_grid->nodes->GetAgglomerate_Indirect(iPoint)) nodes->SetAgglomerate_Indirect(Index_CoarseCV, true); nodes->SetChildren_CV(Index_CoarseCV, 0, iPoint); @@ -458,7 +426,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un for (auto iCoarsePoint = 0ul; iCoarsePoint < nPointDomain; iCoarsePoint++) { if (nodes->GetnPoint(iCoarsePoint) == 1) { /*--- Find the neighbor of the isolated point. This neighbor is the right control volume ---*/ - cout << "isolated point " << iCoarsePoint << endl; const auto iCoarsePoint_Complete = nodes->GetPoint(iCoarsePoint, 0); /*--- Check if merging would exceed the maximum agglomeration size ---*/ @@ -468,8 +435,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- If the total would exceed maxAgglomSize, try to redistribute children to neighbors ---*/ if (nChildren_Total > maxAgglomSize) { - cout << " Merging isolated point " << iCoarsePoint << " to point " << iCoarsePoint_Complete - << " would exceed limit (" << nChildren_Total << " > " << maxAgglomSize << ")" << endl; /*--- Find neighbors of the target coarse point that have room ---*/ unsigned short nChildrenToRedistribute = nChildren_Total - maxAgglomSize; @@ -482,9 +447,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un unsigned short nCanTransfer = min(nChildrenToRedistribute, static_cast(maxAgglomSize - nChildren_Neighbor)); - cout << " Redistributing " << nCanTransfer << " children from point " << iCoarsePoint_Complete - << " to neighbor " << jCoarsePoint << endl; - /*--- Transfer children from target to neighbor ---*/ for (unsigned short iTransfer = 0; iTransfer < nCanTransfer; iTransfer++) { /*--- Take from the end of the target's children list ---*/ @@ -526,7 +488,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un nodes->SetnChildren_CV(iCoarsePoint_Complete, nChildren); nodes->SetnChildren_CV(iCoarsePoint, 0); - cout << " Final: point " << iCoarsePoint_Complete << " has " << nChildren << " children" << endl; } } @@ -653,8 +614,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un Children_Local[iVertex] = fine_grid->vertex[MarkerR][iVertex]->GetNode(); } - /*--- Debug: Track state before updating Index_CoarseCV ---*/ - // auto Index_CoarseCV_Before = Index_CoarseCV; /*--- Only increment by the number of parents that will actually be used ---*/ Index_CoarseCV += nUsedParents; @@ -865,22 +824,6 @@ bool CMultiGridGeometry::GeometricalCheck(unsigned long iPoint, const CGeometry* bool Stretching = true; - /* unsigned short iNode, iDim; - unsigned long jPoint; - su2double *Coord_i = fine_grid->nodes->GetCoord(iPoint); - su2double max_dist = 0.0 ; su2double min_dist = 1E20; - for (iNode = 0; iNode < fine_grid->nodes->GetnPoint(iPoint); iNode ++) { - jPoint = fine_grid->nodes->GetPoint(iPoint, iNode); - su2double *Coord_j = fine_grid->nodes->GetCoord(jPoint); - su2double distance = 0.0; - for (iDim = 0; iDim < nDim; iDim++) - distance += (Coord_j[iDim]-Coord_i[iDim])*(Coord_j[iDim]-Coord_i[iDim]); - distance = sqrt(distance); - max_dist = max(distance, max_dist); - min_dist = min(distance, min_dist); - } - if ( max_dist/min_dist > 100.0 ) Stretching = false;*/ - return (Stretching && Volume); } @@ -937,12 +880,7 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vectorGetMarker_All_KindBC(marker_seed[0]) == SYMMETRY_PLANE) || - // (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL)) { - // if (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) { - // agglomerate_CV = false; - // } - // } + } /*--- If there are two markers in the vertex that is going to be aglomerated ---*/ @@ -962,23 +900,8 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vectorGetMarker_All_KindBC(marker_seed[0]) == SYMMETRY_PLANE) || - // (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL)) { - // agglomerate_CV = false; - // } } - // /*--- Check for curved EULER_WALL ---*/ - // if (agglomerate_CV && fine_grid->nodes->GetBoundary(CVPoint)) { - // for (int i = 0; i < counter; i++) { - // if (config->GetMarker_All_KindBC(copy_marker[i]) == EULER_WALL && !boundIsStraight[copy_marker[i]]) { - // agglomerate_CV = false; - // break; - // } - // } - // } } return agglomerate_CV; @@ -1036,47 +959,6 @@ void CMultiGridGeometry::SetSuitableNeighbors(vector& Suitable_In auto it1 = unique(Suitable_Second_Neighbors.begin(), Suitable_Second_Neighbors.end()); Suitable_Second_Neighbors.resize(it1 - Suitable_Second_Neighbors.begin()); - /*--- Create a list with the third neighbors, without first, second, and seed neighbors. ---*/ - - /// TODO: This repeats the process above but I doubt it catches any more points. - - // vector Third_Neighbor_Points, Third_Origin_Points; - - // for (auto kPoint : Suitable_Second_Neighbors) { - // for (auto lPoint : fine_grid->nodes->GetPoints(kPoint)) { - // /*--- Check that the third neighbor does not belong to the first neighbors or the seed ---*/ - - // auto end1 = First_Neighbor_Points.end(); - // if (find(First_Neighbor_Points.begin(), end1, lPoint) != end1) continue; - - // /*--- Check that the third neighbor does not belong to the second neighbors ---*/ - - // auto end2 = Suitable_Second_Neighbors.end(); - // if (find(Suitable_Second_Neighbors.begin(), end2, lPoint) != end2) continue; - - // Third_Neighbor_Points.push_back(lPoint); - // Third_Origin_Points.push_back(kPoint); - // } - // } - - /*--- Identify those third neighbors that are repeated (candidate to be added). ---*/ - - // for (auto iNeighbor = 0ul; iNeighbor < Third_Neighbor_Points.size(); iNeighbor++) { - // for (auto jNeighbor = iNeighbor + 1; jNeighbor < Third_Neighbor_Points.size(); jNeighbor++) { - // /*--- Repeated third neighbor with different origin ---*/ - - // if ((Third_Neighbor_Points[iNeighbor] == Third_Neighbor_Points[jNeighbor]) && - // (Third_Origin_Points[iNeighbor] != Third_Origin_Points[jNeighbor])) { - // Suitable_Indirect_Neighbors.push_back(Third_Neighbor_Points[iNeighbor]); - // } - // } - // } - - /*--- Remove duplicates from the final list of Suitable Indirect Neighbors. ---*/ - - // sort(Suitable_Indirect_Neighbors.begin(), Suitable_Indirect_Neighbors.end()); - // auto it2 = unique(Suitable_Indirect_Neighbors.begin(), Suitable_Indirect_Neighbors.end()); - // Suitable_Indirect_Neighbors.resize(it2 - Suitable_Indirect_Neighbors.begin()); } void CMultiGridGeometry::SetPoint_Connectivity(const CGeometry* fine_grid) { From ec0bf2e7de7bb8a84ae1653b35a939f41e2c8c16 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 18:54:36 +0100 Subject: [PATCH 029/229] precommit --- Common/src/geometry/CMultiGridGeometry.cpp | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 96d4234b1ce8..c0c7309d312c 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -212,13 +212,10 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- If the seed (parent) can be agglomerated, we try to agglomerate connected childs to the parent ---*/ /*--- Note that in 2D we allow a maximum of 4 nodes to be agglomerated ---*/ if (agglomerate_seed) { - /*--- Now we do a sweep over all the nodes that surround the seed point ---*/ for (auto CVPoint : fine_grid->nodes->GetPoints(iPoint)) { - /*--- The new point can be agglomerated ---*/ if (SetBoundAgglomeration(CVPoint, marker_seed, fine_grid, config)) { - /*--- We set the value of the parent ---*/ fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); @@ -243,10 +240,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Now we do a sweep over all the indirect nodes that can be added ---*/ for (auto CVPoint : Suitable_Indirect_Neighbors) { - /*--- The new point can be agglomerated ---*/ if (SetBoundAgglomeration(CVPoint, marker_seed, fine_grid, config)) { - /*--- We set the value of the parent ---*/ fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); @@ -281,7 +276,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un const auto iPoint = fine_grid->vertex[iMarker][iVertex]->GetNode(); if ((!fine_grid->nodes->GetAgglomerate(iPoint)) && (fine_grid->nodes->GetDomain(iPoint))) { - fine_grid->nodes->SetParent_CV(iPoint, Index_CoarseCV); nodes->SetChildren_CV(Index_CoarseCV, 0, iPoint); nodes->SetnChildren_CV(Index_CoarseCV, 1); @@ -371,7 +365,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if (nChildren == maxAgglomSize) break; /*--- The new point can be agglomerated ---*/ if ((!fine_grid->nodes->GetAgglomerate(CVPoint)) && (fine_grid->nodes->GetDomain(CVPoint))) { - /*--- We set the value of the parent ---*/ fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); @@ -435,7 +428,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- If the total would exceed maxAgglomSize, try to redistribute children to neighbors ---*/ if (nChildren_Total > maxAgglomSize) { - /*--- Find neighbors of the target coarse point that have room ---*/ unsigned short nChildrenToRedistribute = nChildren_Total - maxAgglomSize; @@ -487,7 +479,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Update the number of children control volumes ---*/ nodes->SetnChildren_CV(iCoarsePoint_Complete, nChildren); nodes->SetnChildren_CV(iCoarsePoint, 0); - } } @@ -614,7 +605,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un Children_Local[iVertex] = fine_grid->vertex[MarkerR][iVertex]->GetNode(); } - /*--- Only increment by the number of parents that will actually be used ---*/ Index_CoarseCV += nUsedParents; @@ -879,8 +869,6 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vector& Suitable_In sort(Suitable_Second_Neighbors.begin(), Suitable_Second_Neighbors.end()); auto it1 = unique(Suitable_Second_Neighbors.begin(), Suitable_Second_Neighbors.end()); Suitable_Second_Neighbors.resize(it1 - Suitable_Second_Neighbors.begin()); - } void CMultiGridGeometry::SetPoint_Connectivity(const CGeometry* fine_grid) { From 38ef4783d8df00f652e750c5bfc0490ad4bab03e Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 18 Jan 2026 12:12:35 -0800 Subject: [PATCH 030/229] update due to 6 -> 5 --- TestCases/parallel_regression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 14ff9128eac4..c6e8d055be09 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -298,7 +298,7 @@ def main(): ramp_msw.cfg_dir = "euler/ramp" ramp_msw.cfg_file = "inv_ramp_msw.cfg" ramp_msw.test_iter = 100 - ramp_msw.test_vals = [-12.374773, -6.696450, -0.077832, 0.054528] + ramp_msw.test_vals = [-12.081674, -6.281367, -0.077904, 0.054539] test_list.append(ramp_msw) ########################## From 7ab2ea96e290bd134e315c31f79b5c38440cd0b4 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 21:39:04 +0100 Subject: [PATCH 031/229] cleanup --- Common/src/geometry/CMultiGridGeometry.cpp | 9 --------- TestCases/euler/channel/inv_channel_RK.cfg | 16 ++++++++-------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index c0c7309d312c..be52eebbf2a4 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -37,7 +37,6 @@ #include #include -/*--- Nijso says: this could perhaps be replaced by metis partitioning? ---*/ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, unsigned short iMesh) : CGeometry() { nDim = fine_grid->GetnDim(); // Write the number of dimensions of the coarse grid. @@ -700,14 +699,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } - /*--- Debug validation: Verify halo CV coordinates match domain CVs on remote ranks ---*/ - /*--- Note: This validation is deferred until after SetVertex() is called, as vertices ---*/ - /*--- are not yet initialized at the end of the constructor. The validation is performed ---*/ - /*--- by calling ValidateHaloCoordinates() after SetVertex() in the driver. ---*/ - - /*--- For now, we skip this validation in the constructor to avoid segfaults. ---*/ - /*--- TODO: Move this to a separate validation function called after SetVertex(). ---*/ - #endif // HAVE_MPI /*--- Update the number of points after the MPI agglomeration ---*/ diff --git a/TestCases/euler/channel/inv_channel_RK.cfg b/TestCases/euler/channel/inv_channel_RK.cfg index a719b413d731..bf374054e770 100644 --- a/TestCases/euler/channel/inv_channel_RK.cfg +++ b/TestCases/euler/channel/inv_channel_RK.cfg @@ -44,24 +44,24 @@ MARKER_MONITORING= ( upper_wall, lower_wall ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 2.5 +CFL_NUMBER= 1.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER= 110 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 10 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.9 -MG_DAMP_PROLONGATION= 0.9 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 4, 4, 4, 4 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % From 6049a5971177c870dc7cf9dae7afaf2ca27646b3 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 21:40:18 +0100 Subject: [PATCH 032/229] cleanup --- Common/include/CConfig.hpp | 8 -------- Common/include/geometry/CMultiGridGeometry.hpp | 6 ------ 2 files changed, 14 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 162ab6035450..f198df434761 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -501,7 +501,6 @@ class CConfig { unsigned short *MG_PreSmooth, /*!< \brief Multigrid Pre smoothing. */ *MG_PostSmooth, /*!< \brief Multigrid Post smoothing. */ *MG_CorrecSmooth; /*!< \brief Multigrid Jacobi implicit smoothing of the correction. */ - bool MG_DebugHaloCoordinates; /*!< \brief Enable halo CV coordinate validation for multigrid. */ su2double *LocationStations; /*!< \brief Airfoil sections in wing slicing subroutine. */ ENUM_MULTIZONE Kind_MZSolver; /*!< \brief Kind of multizone solver. */ @@ -3840,13 +3839,6 @@ class CConfig { return MG_CorrecSmooth[val_mesh]; } - /*!\ - * \brief Get whether halo CV coordinate validation is enabled for multigrid. - * \return True if halo coordinate validation is enabled. - */ - bool GetMG_DebugHaloCoordinates() const { return MG_DebugHaloCoordinates; } - - /*! * \brief plane of the FFD (I axis) that should be fixed. * \param[in] val_index - Index of the arrray with all the planes in the I direction that should be fixed. diff --git a/Common/include/geometry/CMultiGridGeometry.hpp b/Common/include/geometry/CMultiGridGeometry.hpp index c4cc50cf9a19..b0a10e7bdf08 100644 --- a/Common/include/geometry/CMultiGridGeometry.hpp +++ b/Common/include/geometry/CMultiGridGeometry.hpp @@ -171,10 +171,4 @@ class CMultiGridGeometry final : public CGeometry { */ void SetMultiGridWallTemperature(const CGeometry* fine_grid, unsigned short val_marker) override; - /*! - * \brief Validate that halo CV coordinates match corresponding domain CVs on remote ranks (debug feature). - * \param[in] config - Definition of the particular problem. - * \param[in] iMesh - Multigrid level for reporting. - */ - void ValidateHaloCoordinates(const CConfig* config, unsigned short iMesh) const; }; From b60fe4ab8c0d0afb46d865039161c4b7fac28d2f Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 22:16:33 +0100 Subject: [PATCH 033/229] cleanup --- Common/src/geometry/CMultiGridGeometry.cpp | 130 ++++++++--------- .../src/integration/CMultiGridIntegration.cpp | 138 ++++++++---------- 2 files changed, 119 insertions(+), 149 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index be52eebbf2a4..e592e894587c 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -966,17 +966,15 @@ void CMultiGridGeometry::SetPoint_Connectivity(const CGeometry* fine_grid) { } void CMultiGridGeometry::SetVertex(const CGeometry* fine_grid, const CConfig* config) { - unsigned long iVertex, iFinePoint, iCoarsePoint; - unsigned short iMarker, iMarker_Tag, iChildren; nMarker = fine_grid->GetnMarker(); unsigned short nMarker_Max = config->GetnMarker_Max(); /*--- If any children node belong to the boundary then the entire control volume will belong to the boundary ---*/ - for (iCoarsePoint = 0; iCoarsePoint < nPoint; iCoarsePoint++) - for (iChildren = 0; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { - iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); + for (auto iCoarsePoint = 0ul; iCoarsePoint < nPoint; iCoarsePoint++) + for (auto iChildren = 0u; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { + auto iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); if (fine_grid->nodes->GetBoundary(iFinePoint)) { nodes->SetBoundary(iCoarsePoint, nMarker); break; @@ -987,20 +985,20 @@ void CMultiGridGeometry::SetVertex(const CGeometry* fine_grid, const CConfig* co nVertex = new unsigned long[nMarker]; Tag_to_Marker = new string[nMarker_Max]; - for (iMarker_Tag = 0; iMarker_Tag < nMarker_Max; iMarker_Tag++) + for (auto iMarker_Tag = 0u; iMarker_Tag < nMarker_Max; iMarker_Tag++) Tag_to_Marker[iMarker_Tag] = fine_grid->GetMarker_Tag(iMarker_Tag); /*--- Compute the number of vertices to do the dimensionalization ---*/ - for (iMarker = 0; iMarker < nMarker; iMarker++) nVertex[iMarker] = 0; + for (auto iMarker = 0u; iMarker < nMarker; iMarker++) nVertex[iMarker] = 0; - for (iCoarsePoint = 0; iCoarsePoint < nPoint; iCoarsePoint++) { + for (auto iCoarsePoint = 0ul; iCoarsePoint < nPoint; iCoarsePoint++) { if (nodes->GetBoundary(iCoarsePoint)) { - for (iChildren = 0; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { - iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); - for (iMarker = 0; iMarker < nMarker; iMarker++) { + for (auto iChildren = 0u; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { + auto iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); + for (auto iMarker = 0u; iMarker < nMarker; iMarker++) { if ((fine_grid->nodes->GetVertex(iFinePoint, iMarker) != -1) && (nodes->GetVertex(iCoarsePoint, iMarker) == -1)) { - iVertex = nVertex[iMarker]; + auto iVertex = nVertex[iMarker]; nodes->SetVertex(iCoarsePoint, iVertex, iMarker); nVertex[iMarker]++; } @@ -1009,25 +1007,25 @@ void CMultiGridGeometry::SetVertex(const CGeometry* fine_grid, const CConfig* co } } - for (iMarker = 0; iMarker < nMarker; iMarker++) { + for (auto iMarker = 0u; iMarker < nMarker; iMarker++) { vertex[iMarker] = new CVertex*[fine_grid->GetnVertex(iMarker) + 1]; nVertex[iMarker] = 0; } - for (iCoarsePoint = 0; iCoarsePoint < nPoint; iCoarsePoint++) + for (auto iCoarsePoint = 0ul; iCoarsePoint < nPoint; iCoarsePoint++) if (nodes->GetBoundary(iCoarsePoint)) - for (iMarker = 0; iMarker < nMarker; iMarker++) nodes->SetVertex(iCoarsePoint, -1, iMarker); + for (auto iMarker = 0u; iMarker < nMarker; iMarker++) nodes->SetVertex(iCoarsePoint, -1, iMarker); - for (iMarker = 0; iMarker < nMarker; iMarker++) nVertex[iMarker] = 0; + for (auto iMarker = 0u; iMarker < nMarker; iMarker++) nVertex[iMarker] = 0; - for (iCoarsePoint = 0; iCoarsePoint < nPoint; iCoarsePoint++) { + for (auto iCoarsePoint = 0ul; iCoarsePoint < nPoint; iCoarsePoint++) { if (nodes->GetBoundary(iCoarsePoint)) { - for (iChildren = 0; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { - iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); - for (iMarker = 0; iMarker < fine_grid->GetnMarker(); iMarker++) { + for (auto iChildren = 0u; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { + auto iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); + for (auto iMarker = 0u; iMarker < fine_grid->GetnMarker(); iMarker++) { if ((fine_grid->nodes->GetVertex(iFinePoint, iMarker) != -1) && (nodes->GetVertex(iCoarsePoint, iMarker) == -1)) { - iVertex = nVertex[iMarker]; + auto iVertex = nVertex[iMarker]; vertex[iMarker][iVertex] = new CVertex(iCoarsePoint, nDim); nodes->SetVertex(iCoarsePoint, iVertex, iMarker); @@ -1044,15 +1042,13 @@ void CMultiGridGeometry::SetVertex(const CGeometry* fine_grid, const CConfig* co } void CMultiGridGeometry::MatchActuator_Disk(const CConfig* config) { - unsigned short iMarker; - unsigned long iVertex, iPoint; int iProcessor = size; - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if ((config->GetMarker_All_KindBC(iMarker) == ACTDISK_INLET) || (config->GetMarker_All_KindBC(iMarker) == ACTDISK_OUTLET)) { - for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { - iPoint = vertex[iMarker][iVertex]->GetNode(); + for (auto iVertex = 0u; iVertex < nVertex[iMarker]; iVertex++) { + auto iPoint = vertex[iMarker][iVertex]->GetNode(); if (nodes->GetDomain(iPoint)) { vertex[iMarker][iVertex]->SetDonorPoint(iPoint, nodes->GetGlobalIndex(iPoint), iVertex, iMarker, iProcessor); } @@ -1062,20 +1058,18 @@ void CMultiGridGeometry::MatchActuator_Disk(const CConfig* config) { } void CMultiGridGeometry::MatchPeriodic(const CConfig* config, unsigned short val_periodic) { - unsigned short iMarker, iPeriodic, nPeriodic; - unsigned long iVertex, iPoint; int iProcessor = rank; /*--- Evaluate the number of periodic boundary conditions ---*/ - nPeriodic = config->GetnMarker_Periodic(); + auto nPeriodic = config->GetnMarker_Periodic(); - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY) { - iPeriodic = config->GetMarker_All_PerBound(iMarker); + auto iPeriodic = config->GetMarker_All_PerBound(iMarker); if ((iPeriodic == val_periodic) || (iPeriodic == val_periodic + nPeriodic / 2)) { - for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { - iPoint = vertex[iMarker][iVertex]->GetNode(); + for (auto iVertex = 0u; iVertex < nVertex[iMarker]; iVertex++) { + auto iPoint = vertex[iMarker][iVertex]->GetNode(); if (nodes->GetDomain(iPoint)) { vertex[iMarker][iVertex]->SetDonorPoint(iPoint, nodes->GetGlobalIndex(iPoint), iVertex, iMarker, iProcessor); @@ -1088,18 +1082,13 @@ void CMultiGridGeometry::MatchPeriodic(const CConfig* config, unsigned short val void CMultiGridGeometry::SetControlVolume(const CGeometry* fine_grid, unsigned short action) { BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { - unsigned long iFinePoint, iCoarsePoint, iEdge, iParent; - long FineEdge, CoarseEdge; - unsigned short iChildren; - bool change_face_orientation; - su2double Coarse_Volume, Area; /*--- Compute the area of the coarse volume ---*/ - for (iCoarsePoint = 0; iCoarsePoint < nPoint; iCoarsePoint++) { + for (auto iCoarsePoint = 0u; iCoarsePoint < nPoint; iCoarsePoint++) { nodes->SetVolume(iCoarsePoint, 0.0); - Coarse_Volume = 0.0; - for (iChildren = 0; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { - iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); + su2double Coarse_Volume = 0.0; + for (auto iChildren = 0u; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { + auto iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); Coarse_Volume += fine_grid->nodes->GetVolume(iFinePoint); } nodes->SetVolume(iCoarsePoint, Coarse_Volume); @@ -1110,19 +1099,19 @@ void CMultiGridGeometry::SetControlVolume(const CGeometry* fine_grid, unsigned s edges->SetZeroValues(); } - for (iCoarsePoint = 0; iCoarsePoint < nPoint; iCoarsePoint++) - for (iChildren = 0; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { - iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); + for (auto iCoarsePoint = 0u; iCoarsePoint < nPoint; iCoarsePoint++) + for (auto iChildren = 0u; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { + auto iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); for (auto iFinePoint_Neighbor : fine_grid->nodes->GetPoints(iFinePoint)) { - iParent = fine_grid->nodes->GetParent_CV(iFinePoint_Neighbor); + auto iParent = fine_grid->nodes->GetParent_CV(iFinePoint_Neighbor); if ((iParent != iCoarsePoint) && (iParent < iCoarsePoint)) { - FineEdge = fine_grid->FindEdge(iFinePoint, iFinePoint_Neighbor); + auto FineEdge = fine_grid->FindEdge(iFinePoint, iFinePoint_Neighbor); - change_face_orientation = false; + bool change_face_orientation = false; if (iFinePoint < iFinePoint_Neighbor) change_face_orientation = true; - CoarseEdge = FindEdge(iParent, iCoarsePoint); + auto CoarseEdge = FindEdge(iParent, iCoarsePoint); const auto Normal = fine_grid->edges->GetNormal(FineEdge); @@ -1137,9 +1126,9 @@ void CMultiGridGeometry::SetControlVolume(const CGeometry* fine_grid, unsigned s /*--- Check if there is a normal with null area ---*/ - for (iEdge = 0; iEdge < nEdge; iEdge++) { + for (auto iEdge = 0u; iEdge < nEdge; iEdge++) { const auto NormalFace = edges->GetNormal(iEdge); - Area = GeometryToolbox::Norm(nDim, NormalFace); + su2double Area = GeometryToolbox::Norm(nDim, NormalFace); if (Area == 0.0) { su2double DefaultNormal[3] = {EPS * EPS}; edges->SetNormal(iEdge, DefaultNormal); @@ -1151,24 +1140,23 @@ void CMultiGridGeometry::SetControlVolume(const CGeometry* fine_grid, unsigned s void CMultiGridGeometry::SetBoundControlVolume(const CGeometry* fine_grid, const CConfig* config, unsigned short action) { - unsigned long iCoarsePoint, iFinePoint, FineVertex, iVertex; - su2double Normal[MAXNDIM] = {0.0}, Area, *NormalFace = nullptr; + su2double Normal[MAXNDIM] = {0.0}, *NormalFace = nullptr; if (action != ALLOCATE) { SU2_OMP_FOR_DYN(1) - for (auto iMarker = 0; iMarker < nMarker; iMarker++) - for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) vertex[iMarker][iVertex]->SetZeroValues(); + for (auto iMarker = 0u; iMarker < nMarker; iMarker++) + for (auto iVertex = 0ul; iVertex < nVertex[iMarker]; iVertex++) vertex[iMarker][iVertex]->SetZeroValues(); END_SU2_OMP_FOR } SU2_OMP_FOR_DYN(1) - for (auto iMarker = 0; iMarker < nMarker; iMarker++) { - for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { - iCoarsePoint = vertex[iMarker][iVertex]->GetNode(); + for (auto iMarker = 0u; iMarker < nMarker; iMarker++) { + for (auto iVertex = 0ul; iVertex < nVertex[iMarker]; iVertex++) { + auto iCoarsePoint = vertex[iMarker][iVertex]->GetNode(); for (auto iChildren = 0; iChildren < nodes->GetnChildren_CV(iCoarsePoint); iChildren++) { - iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); + auto iFinePoint = nodes->GetChildren_CV(iCoarsePoint, iChildren); if (fine_grid->nodes->GetVertex(iFinePoint, iMarker) != -1) { - FineVertex = fine_grid->nodes->GetVertex(iFinePoint, iMarker); + auto FineVertex = fine_grid->nodes->GetVertex(iFinePoint, iMarker); fine_grid->vertex[iMarker][FineVertex]->GetNormal(Normal); vertex[iMarker][iVertex]->AddNormal(Normal); } @@ -1179,10 +1167,10 @@ void CMultiGridGeometry::SetBoundControlVolume(const CGeometry* fine_grid, const /*--- Check if there is a normal with null area ---*/ SU2_OMP_FOR_DYN(1) - for (auto iMarker = 0; iMarker < nMarker; iMarker++) { - for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { + for (auto iMarker = 0u; iMarker < nMarker; iMarker++) { + for (auto iVertex = 0ul; iVertex < nVertex[iMarker]; iVertex++) { NormalFace = vertex[iMarker][iVertex]->GetNormal(); - Area = GeometryToolbox::Norm(nDim, NormalFace); + su2double Area = GeometryToolbox::Norm(nDim, NormalFace); if (Area == 0.0) for (auto iDim = 0; iDim < nDim; iDim++) NormalFace[iDim] = EPS * EPS; } @@ -1271,15 +1259,13 @@ void CMultiGridGeometry::SetRestricted_GridVelocity(const CGeometry* fine_grid) } void CMultiGridGeometry::FindNormal_Neighbor(const CConfig* config) { - unsigned short iMarker, iDim; - unsigned long iPoint, iVertex; - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (config->GetMarker_All_KindBC(iMarker) != SEND_RECEIVE && config->GetMarker_All_KindBC(iMarker) != INTERNAL_BOUNDARY && config->GetMarker_All_KindBC(iMarker) != NEARFIELD_BOUNDARY) { - for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { - iPoint = vertex[iMarker][iVertex]->GetNode(); + for (auto iVertex = 0ul; iVertex < nVertex[iMarker]; iVertex++) { + auto iPoint = vertex[iMarker][iVertex]->GetNode(); /*--- If the node belong to the domain ---*/ if (nodes->GetDomain(iPoint)) { @@ -1292,7 +1278,7 @@ void CMultiGridGeometry::FindNormal_Neighbor(const CConfig* config) { scalar_prod = 0.0; norm_vect = 0.0; norm_Normal = 0.0; - for (iDim = 0; iDim < nDim; iDim++) { + for (auto iDim = 0u; iDim < nDim; iDim++) { diff_coord = nodes->GetCoord(jPoint, iDim) - nodes->GetCoord(iPoint, iDim); scalar_prod += diff_coord * Normal[iDim]; norm_vect += diff_coord * diff_coord; @@ -1304,7 +1290,7 @@ void CMultiGridGeometry::FindNormal_Neighbor(const CConfig* config) { /*--- Get maximum cosine (not minimum because normals are oriented inwards) ---*/ if (cos_alpha >= cos_max) { - Point_Normal = jPoint; + auto Point_Normal = jPoint; cos_max = cos_alpha; } } @@ -1329,7 +1315,7 @@ su2double CMultiGridGeometry::ComputeLocalCurvature(const CGeometry* fine_grid, fine_grid->vertex[iMarker][iVertex]->GetNormal(Normal_i); su2double Area_i = GeometryToolbox::Norm(int(nDim), Normal_i); - if (Area_i < 1e-12) return 0.0; // Skip degenerate vertices + if (Area_i < EPS) return 0.0; // Skip degenerate vertices /*--- Normalize the normal ---*/ for (unsigned short iDim = 0; iDim < nDim; iDim++) { @@ -1352,7 +1338,7 @@ su2double CMultiGridGeometry::ComputeLocalCurvature(const CGeometry* fine_grid, fine_grid->vertex[iMarker][jVertex]->GetNormal(Normal_j); su2double Area_j = GeometryToolbox::Norm(int(nDim), Normal_j); - if (Area_j < 1e-12) continue; // Skip degenerate neighbor + if (Area_j < EPS) continue; // Skip degenerate neighbor /*--- Normalize the neighbor normal ---*/ for (unsigned short iDim = 0; iDim < nDim; iDim++) { diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 7d0e40fbbe02..486bd744ab0a 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -53,28 +53,28 @@ void ProjectEulerWallToTangentPlane(CGeometry* geo_coarse, const CConfig* config const auto nDim = geo_coarse->GetnDim(); su2double Area = GeometryToolbox::Norm(nDim, Normal); - if (Area < 1e-12) continue; + if (Area < EPS) continue; /*--- Normalize normal vector ---*/ su2double UnitNormal[3] = {0.0}; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { + for (auto iDim = 0u; iDim < nDim; iDim++) { UnitNormal[iDim] = Normal[iDim] / Area; } /*--- Get current solution or correction ---*/ - su2double* Data = use_solution_old ? + su2double* solution_coarse = use_solution_old ? sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse) : sol_coarse->GetNodes()->GetSolution(Point_Coarse); /*--- Compute normal component of momentum (v·n or correction·n) ---*/ su2double momentum_n = 0.0; - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - momentum_n += Data[iDim + 1] * UnitNormal[iDim]; + for (auto iDim = 0u; iDim < nDim; iDim++) { + momentum_n += solution_coarse[iDim + 1] * UnitNormal[iDim]; } - /*--- Project to tangent plane: Data -= (Data·n)n ---*/ - for (unsigned short iDim = 0; iDim < nDim; iDim++) { - Data[iDim + 1] -= momentum_n * UnitNormal[iDim]; + /*--- Project to tangent plane: solution_coarse -= (solution_coarse·n)n ---*/ + for (auto iDim = 0u; iDim < nDim; iDim++) { + solution_coarse[iDim + 1] -= momentum_n * UnitNormal[iDim]; } } END_SU2_OMP_FOR @@ -361,9 +361,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { - unsigned long Point_Fine, Point_Coarse, iVertex; - unsigned short iMarker, iChildren, iVar; - su2double Area_Parent, Area_Children; const su2double *Solution_Fine = nullptr, *Solution_Coarse = nullptr; const unsigned short nVar = sol_coarse->GetnVar(); @@ -371,44 +368,43 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS auto *Solution = new su2double[nVar]; SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) - for (Point_Coarse = 0; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { + for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { - Area_Parent = geo_coarse->nodes->GetVolume(Point_Coarse); + su2double Area_Parent = geo_coarse->nodes->GetVolume(Point_Coarse); - for (iVar = 0; iVar < nVar; iVar++) Solution[iVar] = 0.0; + for (auto iVar = 0u; iVar < nVar; iVar++) Solution[iVar] = 0.0; - for (iChildren = 0; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { - Point_Fine = geo_coarse->nodes->GetChildren_CV(Point_Coarse, iChildren); - Area_Children = geo_fine->nodes->GetVolume(Point_Fine); + for (auto iChildren = 0u; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); 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); - for (iVar = 0; iVar < nVar; iVar++) + for (auto iVar = 0u; iVar < nVar; iVar++) Solution[iVar] -= Solution_Fine[iVar]*Area_Children/Area_Parent; } Solution_Coarse = sol_coarse->GetNodes()->GetSolution(Point_Coarse); - for (iVar = 0; iVar < nVar; iVar++) + for (auto iVar = 0u; iVar < nVar; iVar++) Solution[iVar] += Solution_Coarse[iVar]; - for (iVar = 0; iVar < nVar; iVar++) + for (auto iVar = 0u; iVar < nVar; iVar++) sol_coarse->GetNodes()->SetSolution_Old(Point_Coarse,Solution); } END_SU2_OMP_FOR delete [] Solution; - /*--- OPTION C: Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ + /*--- Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ ProjectEulerWallToTangentPlane(geo_coarse, config, sol_coarse, true); /*--- Remove any contributions from no-slip walls. ---*/ - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (config->GetViscous_Wall(iMarker)) { SU2_OMP_FOR_STAT(32) - for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - - Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); /*--- For dirichlet boundary condtions, set the correction to zero. Note that Solution_Old stores the correction not the actual value ---*/ @@ -427,9 +423,9 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS sol_coarse->CompleteComms(geo_coarse, config, MPI_QUANTITIES::SOLUTION_OLD); SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) - for (Point_Coarse = 0; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { - for (iChildren = 0; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { - Point_Fine = geo_coarse->nodes->GetChildren_CV(Point_Coarse, iChildren); + for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { + for (auto iChildren = 0u; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { + auto Point_Fine = geo_coarse->nodes->GetChildren_CV(Point_Coarse, iChildren); sol_fine->LinSysRes.SetBlock(Point_Fine, sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse)); } } @@ -444,13 +440,11 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ if (val_nSmooth == 0) return; const su2double *Residual_Old, *Residual_Sum, *Residual_j; - unsigned short iVar, iSmooth, iMarker, iNeigh; - unsigned long iPoint, jPoint, iVertex; const unsigned short nVar = solver->GetnVar(); SU2_OMP_FOR_STAT(roundUpDiv(geometry->GetnPoint(), omp_get_num_threads())) - for (iPoint = 0; iPoint < geometry->GetnPoint(); iPoint++) { + for (auto iPoint = 0ul; iPoint < geometry->GetnPoint(); iPoint++) { Residual_Old = solver->LinSysRes.GetBlock(iPoint); solver->GetNodes()->SetResidual_Old(iPoint,Residual_Old); } @@ -458,17 +452,17 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ /*--- Jacobi iterations. ---*/ - for (iSmooth = 0; iSmooth < val_nSmooth; iSmooth++) { + for (auto iSmooth = 0u; iSmooth < val_nSmooth; iSmooth++) { /*--- Loop over all mesh points (sum the residuals of direct neighbors). ---*/ SU2_OMP_FOR_STAT(roundUpDiv(geometry->GetnPoint(), omp_get_num_threads())) - for (iPoint = 0; iPoint < geometry->GetnPoint(); ++iPoint) { + for (auto iPoint = 0ul; iPoint < geometry->GetnPoint(); ++iPoint) { solver->GetNodes()->SetResidualSumZero(iPoint); - for (iNeigh = 0; iNeigh < geometry->nodes->GetnPoint(iPoint); ++iNeigh) { - jPoint = geometry->nodes->GetPoint(iPoint, iNeigh); + for (auto iNeigh = 0u; iNeigh < geometry->nodes->GetnPoint(iPoint); ++iNeigh) { + auto jPoint = geometry->nodes->GetPoint(iPoint, iNeigh); Residual_j = solver->LinSysRes.GetBlock(jPoint); solver->GetNodes()->AddResidual_Sum(iPoint, Residual_j); } @@ -479,28 +473,28 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ /*--- Loop over all mesh points (update residuals with the neighbor averages). ---*/ SU2_OMP_FOR_STAT(roundUpDiv(geometry->GetnPoint(), omp_get_num_threads())) - for (iPoint = 0; iPoint < geometry->GetnPoint(); ++iPoint) { + for (auto iPoint = 0ul; iPoint < geometry->GetnPoint(); ++iPoint) { 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); - for (iVar = 0; iVar < nVar; iVar++) + for (auto iVar = 0u; iVar < nVar; iVar++) solver->LinSysRes(iPoint,iVar) = (Residual_Old[iVar] + val_smooth_coeff*Residual_Sum[iVar])*factor; } END_SU2_OMP_FOR /*--- Restore original residuals (without average) at boundary points. ---*/ - for (iMarker = 0; iMarker < geometry->GetnMarker(); iMarker++) { + for (auto iMarker = 0u; iMarker < geometry->GetnMarker(); iMarker++) { if ((config->GetMarker_All_KindBC(iMarker) != INTERNAL_BOUNDARY) && (config->GetMarker_All_KindBC(iMarker) != NEARFIELD_BOUNDARY) && (config->GetMarker_All_KindBC(iMarker) != PERIODIC_BOUNDARY)) { SU2_OMP_FOR_STAT(32) - for (iVertex = 0; iVertex < geometry->GetnVertex(iMarker); iVertex++) { - iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); + for (auto iVertex = 0ul; iVertex < geometry->GetnVertex(iMarker); iVertex++) { + auto iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); Residual_Old = solver->GetNodes()->GetResidual_Old(iPoint); solver->LinSysRes.SetBlock(iPoint, Residual_Old); } @@ -514,18 +508,16 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeometry *geo_fine, CConfig *config, unsigned short iMesh) { - unsigned long Point_Fine; - unsigned short iVar; su2double *Solution_Fine, *Residual_Fine; const unsigned short nVar = sol_fine->GetnVar(); const su2double factor = config->GetDamp_Correc_Prolong(); SU2_OMP_FOR_STAT(roundUpDiv(geo_fine->GetnPointDomain(), omp_get_num_threads())) - for (Point_Fine = 0; Point_Fine < geo_fine->GetnPointDomain(); Point_Fine++) { + 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); - for (iVar = 0; iVar < nVar; iVar++) { + 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]) Residual_Fine[iVar] = 0.0; @@ -543,13 +535,11 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet void CMultiGridIntegration::SetProlongated_Solution(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { - unsigned long Point_Fine, Point_Coarse; - unsigned short iChildren; SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) - for (Point_Coarse = 0; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { - for (iChildren = 0; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { - Point_Fine = geo_coarse->nodes->GetChildren_CV(Point_Coarse, iChildren); + for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { + for (auto iChildren = 0u; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { + auto Point_Fine = geo_coarse->nodes->GetChildren_CV(Point_Coarse, iChildren); sol_fine->GetNodes()->SetSolution(Point_Fine, sol_coarse->GetNodes()->GetSolution(Point_Coarse)); } } @@ -559,8 +549,6 @@ void CMultiGridIntegration::SetProlongated_Solution(unsigned short RunTime_EqSys void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config, unsigned short iMesh) { - unsigned long Point_Fine, Point_Coarse, iVertex; - unsigned short iMarker, iVar, iChildren; const su2double *Residual_Fine; const unsigned short nVar = sol_coarse->GetnVar(); @@ -569,16 +557,15 @@ void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coar auto *Residual = new su2double[nVar]; SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) - for (Point_Coarse = 0; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { + for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { sol_coarse->GetNodes()->SetRes_TruncErrorZero(Point_Coarse); - for (iVar = 0; iVar < nVar; iVar++) Residual[iVar] = 0.0; - - for (iChildren = 0; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { - Point_Fine = geo_coarse->nodes->GetChildren_CV(Point_Coarse, iChildren); + for (auto iVar = 0u; iVar < nVar; iVar++) Residual[iVar] = 0.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 (iVar = 0; iVar < nVar; iVar++) + for (auto iVar = 0u; iVar < nVar; iVar++) Residual[iVar] += factor*Residual_Fine[iVar]; } sol_coarse->GetNodes()->AddRes_TruncError(Point_Coarse, Residual); @@ -587,11 +574,11 @@ void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coar delete [] Residual; - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (config->GetViscous_Wall(iMarker)) { SU2_OMP_FOR_STAT(32) - for (iVertex = 0; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); sol_coarse->GetNodes()->SetVel_ResTruncError_Zero(Point_Coarse); } END_SU2_OMP_FOR @@ -599,7 +586,7 @@ void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coar } SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) - for (Point_Coarse = 0; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { + for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { sol_coarse->GetNodes()->SubtractRes_TruncError(Point_Coarse, sol_coarse->LinSysRes.GetBlock(Point_Coarse)); } END_SU2_OMP_FOR @@ -610,7 +597,7 @@ void CMultiGridIntegration::SetResidual_Term(CGeometry *geometry, CSolver *solve AD::StartNoSharedReading(); SU2_OMP_FOR_STAT(roundUpDiv(geometry->GetnPointDomain(), omp_get_num_threads())) - for (unsigned long iPoint = 0; iPoint < geometry->GetnPointDomain(); iPoint++) + for (auto iPoint = 0ul; iPoint < geometry->GetnPointDomain(); iPoint++) solver->LinSysRes.AddBlock(iPoint, solver->GetNodes()->GetResTruncError(iPoint)); END_SU2_OMP_FOR AD::EndNoSharedReading(); @@ -663,7 +650,7 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } } - /*--- OPTION B: Enforce Euler wall BC by projecting velocity to tangent plane ---*/ + /*--- Enforce Euler wall BC by projecting velocity to tangent plane ---*/ ProjectEulerWallToTangentPlane(geo_coarse, config, sol_coarse, false); /*--- MPI the new interpolated solution ---*/ @@ -675,39 +662,36 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst void CMultiGridIntegration::SetRestricted_Gradient(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { - unsigned long Point_Fine, Point_Coarse; - unsigned short iVar, iDim, iChildren; - su2double Area_Parent, Area_Children; const unsigned short nDim = geo_coarse->GetnDim(); const unsigned short nVar = sol_coarse->GetnVar(); auto **Gradient = new su2double* [nVar]; - for (iVar = 0; iVar < nVar; iVar++) + for (auto iVar = 0u; iVar < nVar; iVar++) Gradient[iVar] = new su2double [nDim]; SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPoint(), omp_get_num_threads())) - for (Point_Coarse = 0; Point_Coarse < geo_coarse->GetnPoint(); Point_Coarse++) { - Area_Parent = geo_coarse->nodes->GetVolume(Point_Coarse); + for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPoint(); Point_Coarse++) { + su2double Area_Parent = geo_coarse->nodes->GetVolume(Point_Coarse); - for (iVar = 0; iVar < nVar; iVar++) - for (iDim = 0; iDim < nDim; iDim++) + for (auto iVar = 0u; iVar < nVar; iVar++) + for (auto iDim = 0u; iDim < nDim; iDim++) Gradient[iVar][iDim] = 0.0; - for (iChildren = 0; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { - Point_Fine = geo_coarse->nodes->GetChildren_CV(Point_Coarse, iChildren); - Area_Children = geo_fine->nodes->GetVolume(Point_Fine); + for (auto iChildren = 0u; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { + unsigned long Point_Fine = geo_coarse->nodes->GetChildren_CV(Point_Coarse, iChildren); + su2double Area_Children = geo_fine->nodes->GetVolume(Point_Fine); auto Gradient_fine = sol_fine->GetNodes()->GetGradient(Point_Fine); - for (iVar = 0; iVar < nVar; iVar++) - for (iDim = 0; iDim < nDim; iDim++) + for (auto iVar = 0u; iVar < nVar; iVar++) + for (auto iDim = 0u; iDim < nDim; iDim++) Gradient[iVar][iDim] += Gradient_fine[iVar][iDim]*Area_Children/Area_Parent; } sol_coarse->GetNodes()->SetGradient(Point_Coarse,Gradient); } END_SU2_OMP_FOR - for (iVar = 0; iVar < nVar; iVar++) + for (auto iVar = 0u; iVar < nVar; iVar++) delete [] Gradient[iVar]; delete [] Gradient; From 4bcc0490b1ca418fdd7516e4574865b1d7765b63 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 18 Jan 2026 22:17:06 +0100 Subject: [PATCH 034/229] precommit --- Common/include/geometry/CMultiGridGeometry.hpp | 1 - Common/src/geometry/CMultiGridGeometry.cpp | 3 --- 2 files changed, 4 deletions(-) diff --git a/Common/include/geometry/CMultiGridGeometry.hpp b/Common/include/geometry/CMultiGridGeometry.hpp index b0a10e7bdf08..692a85360d4f 100644 --- a/Common/include/geometry/CMultiGridGeometry.hpp +++ b/Common/include/geometry/CMultiGridGeometry.hpp @@ -170,5 +170,4 @@ class CMultiGridGeometry final : public CGeometry { * \param[in] val_marker - Index of the boundary marker. */ void SetMultiGridWallTemperature(const CGeometry* fine_grid, unsigned short val_marker) override; - }; diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index e592e894587c..fdd4c92e0a70 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -966,7 +966,6 @@ void CMultiGridGeometry::SetPoint_Connectivity(const CGeometry* fine_grid) { } void CMultiGridGeometry::SetVertex(const CGeometry* fine_grid, const CConfig* config) { - nMarker = fine_grid->GetnMarker(); unsigned short nMarker_Max = config->GetnMarker_Max(); @@ -1082,7 +1081,6 @@ void CMultiGridGeometry::MatchPeriodic(const CConfig* config, unsigned short val void CMultiGridGeometry::SetControlVolume(const CGeometry* fine_grid, unsigned short action) { BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { - /*--- Compute the area of the coarse volume ---*/ for (auto iCoarsePoint = 0u; iCoarsePoint < nPoint; iCoarsePoint++) { nodes->SetVolume(iCoarsePoint, 0.0); @@ -1259,7 +1257,6 @@ void CMultiGridGeometry::SetRestricted_GridVelocity(const CGeometry* fine_grid) } void CMultiGridGeometry::FindNormal_Neighbor(const CConfig* config) { - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (config->GetMarker_All_KindBC(iMarker) != SEND_RECEIVE && config->GetMarker_All_KindBC(iMarker) != INTERNAL_BOUNDARY && From 2424d6ef995d31ae6103ae826cd2f26b0ae60256 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 19 Jan 2026 08:27:12 +0100 Subject: [PATCH 035/229] cleanup --- Common/include/CConfig.hpp | 4 ++-- Common/include/geometry/CMultiGridQueue.hpp | 2 +- Common/src/geometry/CMultiGridGeometry.cpp | 15 +++++++-------- SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp | 2 +- SU2_CFD/src/drivers/CDriver.cpp | 2 +- SU2_CFD/src/solvers/CIncNSSolver.cpp | 1 + 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index f198df434761..2d7cd3ccb1a1 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -488,7 +488,7 @@ class CConfig { unsigned short **DegreeFFDBox; /*!< \brief Degree of the FFD boxes. */ string *FFDTag; /*!< \brief Parameters of the design variable. */ string *TagFFDBox; /*!< \brief Tag of the FFD box. */ - unsigned short GeometryMode; /*!< \brief Gemoetry mode (analysis or gradient computation). */ + unsigned short GeometryMode; /*!< \brief Geometry mode (analysis or gradient computation). */ unsigned short MGCycle; /*!< \brief Kind of multigrid cycle. */ unsigned short FinestMesh; /*!< \brief Finest mesh for the full multigrid approach. */ unsigned short nFFD_Fix_IDir, @@ -2911,7 +2911,7 @@ class CConfig { unsigned short GetFinestMesh(void) const { return FinestMesh; } /*! - * \brief Get the kind of multigrid (V or W). + * \brief Get the kind of multigrid (V, W or FULLMG). * \note This variable is used in a recursive way to perform the different kind of cycles * \return 0 or 1 depending of we are dealing with a V or W cycle. */ diff --git a/Common/include/geometry/CMultiGridQueue.hpp b/Common/include/geometry/CMultiGridQueue.hpp index 296d4e8f73d8..c16e23520e48 100644 --- a/Common/include/geometry/CMultiGridQueue.hpp +++ b/Common/include/geometry/CMultiGridQueue.hpp @@ -93,7 +93,7 @@ class CMultiGridQueue { void IncrPriorityCV(unsigned long incrPoint); /*! - * \brief Increase the priority of the CV. + * \brief Reduce the priority of the CV. * \param[in] redPoint - Index of the control volume. */ void RedPriorityCV(unsigned long redPoint); diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index fdd4c92e0a70..a1a0dc538a75 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -1267,27 +1267,26 @@ void CMultiGridGeometry::FindNormal_Neighbor(const CConfig* config) { /*--- If the node belong to the domain ---*/ if (nodes->GetDomain(iPoint)) { /*--- Compute closest normal neighbor ---*/ - su2double cos_max, scalar_prod, norm_vect, norm_Normal, cos_alpha, diff_coord; unsigned long Point_Normal = 0; su2double* Normal = vertex[iMarker][iVertex]->GetNormal(); - cos_max = -1.0; + su2double cos_max = -1.0; for (auto jPoint : nodes->GetPoints(iPoint)) { - scalar_prod = 0.0; - norm_vect = 0.0; - norm_Normal = 0.0; + su2double scalar_prod = 0.0; + su2double norm_vect = 0.0; + su2double norm_Normal = 0.0; for (auto iDim = 0u; iDim < nDim; iDim++) { - diff_coord = nodes->GetCoord(jPoint, iDim) - nodes->GetCoord(iPoint, iDim); + su2double diff_coord = nodes->GetCoord(jPoint, iDim) - nodes->GetCoord(iPoint, iDim); scalar_prod += diff_coord * Normal[iDim]; norm_vect += diff_coord * diff_coord; norm_Normal += Normal[iDim] * Normal[iDim]; } norm_vect = sqrt(norm_vect); norm_Normal = sqrt(norm_Normal); - cos_alpha = scalar_prod / (norm_vect * norm_Normal); + su2double cos_alpha = scalar_prod / (norm_vect * norm_Normal); /*--- Get maximum cosine (not minimum because normals are oriented inwards) ---*/ if (cos_alpha >= cos_max) { - auto Point_Normal = jPoint; + Point_Normal = jPoint; cos_max = cos_alpha; } } diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp index b61d3d61f33a..26c4f8be33c3 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp @@ -578,7 +578,7 @@ class CFVMFlowSolverBase : public CSolver { } - /*--- Recompute the unsteady time step for the dual time strategy if the unsteady CFL is diferent from 0. + /*--- Recompute the unsteady time step for the dual time strategy if the unsteady CFL is different from 0. * This is only done once because in dual time the time step cannot be variable. ---*/ if (dual_time && (Iteration == config->GetRestart_Iter()) && (config->GetUnst_CFL() != 0.0) && (iMesh == MESH_0)) { diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index 961ce04832ff..77c093f6c106 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -810,7 +810,7 @@ void CDriver::InitializeGeometryFVM(CConfig *config, CGeometry **&geometry) { geometry[MESH_0]->SetMGLevel(MESH_0); if ((config->GetnMGLevels() != 0) && (rank == MASTER_NODE)) - cout << "Setting the multigrid structure." << endl; + cout << "Setting the multigrid structure. NMG="<< config->GetnMGLevels() << endl; /*--- Loop over all the new grid ---*/ diff --git a/SU2_CFD/src/solvers/CIncNSSolver.cpp b/SU2_CFD/src/solvers/CIncNSSolver.cpp index 6477fa6f3619..7113ba92a51f 100644 --- a/SU2_CFD/src/solvers/CIncNSSolver.cpp +++ b/SU2_CFD/src/solvers/CIncNSSolver.cpp @@ -739,6 +739,7 @@ void CIncNSSolver::SetTau_Wall_WF(CGeometry *geometry, CSolver **solver_containe const auto iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); const auto Point_Normal = geometry->vertex[iMarker][iVertex]->GetNormal_Neighbor(); + /*--- On the finest mesh compute also on halo nodes to avoid communication of tau wall. ---*/ if ((!geometry->nodes->GetDomain(iPoint)) && !(MGLevel==MESH_0)) continue; From 626a2427e26c6326fa2fe68cf2d6379f26217506 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 19 Jan 2026 09:28:58 +0100 Subject: [PATCH 036/229] add damping based on mesh level --- .../src/integration/CMultiGridIntegration.cpp | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 486bd744ab0a..fcd33f63f2f8 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -300,6 +300,18 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, Space_Integration(geometry_coarse, solver_container_coarse, numerics_coarse, config, iMesh+1, NO_RK_ITER, RunTime_EqSystem); + /*--- Monitor coarse grid residual magnitude before forcing term ---*/ + if (SU2_MPI::GetRank() == 0) { + su2double max_res_coarse = 0.0; + for (unsigned long iPoint = 0; iPoint < geometry_coarse->GetnPointDomain(); iPoint++) { + const su2double* res = solver_coarse->LinSysRes.GetBlock(iPoint); + for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { + max_res_coarse = max(max_res_coarse, fabs(res[iVar])); + } + } + cout << " MG Level " << iMesh+1 << ": Max coarse residual before forcing = " << max_res_coarse << endl; + } + /*--- Compute $P_(k+1) = I^(k+1)_k(r_k) - r_(k+1) ---*/ SetForcing_Term(solver_fine, solver_coarse, geometry_fine, geometry_coarse, config, iMesh+1); @@ -511,7 +523,16 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet su2double *Solution_Fine, *Residual_Fine; const unsigned short nVar = sol_fine->GetnVar(); - const su2double factor = config->GetDamp_Correc_Prolong(); + //const su2double factor = config->GetDamp_Correc_Prolong(); + + /*--- Apply level-dependent damping: more aggressive damping on deeper coarse levels ---*/ + const su2double base_damp = config->GetDamp_Correc_Prolong(); + const su2double level_factor = pow(0.75, iMesh); // 0.75^iMesh reduces damping progressively + const su2double factor = base_damp * level_factor; + + /*--- Track maximum correction magnitude for monitoring ---*/ + su2double max_correction_local = 0.0; + su2double max_correction_global = 0.0; SU2_OMP_FOR_STAT(roundUpDiv(geo_fine->GetnPointDomain(), omp_get_num_threads())) for (auto Point_Fine = 0ul; Point_Fine < geo_fine->GetnPointDomain(); Point_Fine++) { @@ -521,11 +542,27 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet /*--- Prevent a fine grid divergence due to a coarse grid divergence ---*/ if (Residual_Fine[iVar] != Residual_Fine[iVar]) Residual_Fine[iVar] = 0.0; - Solution_Fine[iVar] += factor*Residual_Fine[iVar]; + + su2double correction = factor * Residual_Fine[iVar]; + Solution_Fine[iVar] += correction; + + /*--- Track maximum correction ---*/ + SU2_OMP_CRITICAL + max_correction_local = max(max_correction_local, fabs(correction)); } } END_SU2_OMP_FOR + /*--- Reduce maximum correction across all ranks ---*/ + SU2_MPI::Allreduce(&max_correction_local, &max_correction_global, 1, MPI_DOUBLE, MPI_MAX, SU2_MPI::GetComm()); + + /*--- Output correction magnitude for monitoring ---*/ + if (SU2_MPI::GetRank() == 0) { + cout << " MG Level " << iMesh << ": Max correction = " << max_correction_global + << ", Damping factor = " << factor << " (base=" << base_damp + << " × level_factor=" << level_factor << ")" << endl; + } + /*--- MPI the new interpolated solution ---*/ sol_fine->InitiateComms(geo_fine, config, MPI_QUANTITIES::SOLUTION); From 42fa32d9625822f5317762d8f6d8ab362d4ee44e Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 19 Jan 2026 10:39:33 +0100 Subject: [PATCH 037/229] small cleanup --- Common/src/geometry/CGeometry.cpp | 25 ++++++++++++------------ Common/src/geometry/dual_grid/CPoint.cpp | 3 ++- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index db26d86930a8..26b2df561b38 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -2590,17 +2590,14 @@ void CGeometry::ComputeSurfStraightness(const CConfig* config, bool print_on_scr su2double Area; string Local_TagBound, Global_TagBound; - vector Normal(nDim), UnitNormal(nDim), RefUnitNormal(nDim); - - /*--- Assume now that this boundary marker is straight. As soon as one - AreaElement is found that is not aligend with a Reference then it is - certain that the boundary marker is not straight and one can stop - searching. Another possibility is that this process doesn't own - any nodes of that boundary, in that case we also have to assume the - boundary is straight. - Any boundary type other than SYMMETRY_PLANE or EULER_WALL gets - the value false (or see cases specified in the conditional below) - which could be wrong. ---*/ + vector Normal(nDim), UnitNormal(nDim), RefUnitNormal(nDim); /*--- Assume now that this boundary marker is + straight. As soon as one AreaElement is found that is not aligned with a Reference then it is certain that the + boundary marker is not straight and one can stop searching. Another possibility is that this process doesn't own + any nodes of that boundary, in that case we also have to assume the + boundary is straight. + Any boundary type other than SYMMETRY_PLANE or EULER_WALL gets + the value false (or see cases specified in the conditional below) + which could be wrong. ---*/ boundIsStraight.resize(nMarker); fill(boundIsStraight.begin(), boundIsStraight.end(), true); @@ -3902,11 +3899,13 @@ void CGeometry::ColorMGLevels(unsigned short nMGLevels, const CGeometry* const* for (auto step = 0u; step < iMesh; ++step) { auto coarseMesh = geometry[iMesh - 1 - step]; if (step) - for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) + for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) { CoarseGridColor_(iPoint, step) = CoarseGridColor_(coarseMesh->nodes->GetParent_CV(iPoint), step - 1); + } else - for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) + for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) { CoarseGridColor_(iPoint, step) = color[coarseMesh->nodes->GetParent_CV(iPoint)]; + } } } } diff --git a/Common/src/geometry/dual_grid/CPoint.cpp b/Common/src/geometry/dual_grid/CPoint.cpp index 361792eac5ee..b5bc0dfdf35e 100644 --- a/Common/src/geometry/dual_grid/CPoint.cpp +++ b/Common/src/geometry/dual_grid/CPoint.cpp @@ -25,6 +25,7 @@ * License along with SU2. If not, see . */ +#include #include "../../../include/geometry/dual_grid/CPoint.hpp" #include "../../../include/CConfig.hpp" #include "../../../include/parallelization/omp_structure.hpp" @@ -73,7 +74,7 @@ void CPoint::FullAllocation(unsigned short imesh, const CConfig* config) { /*--- Multigrid structures. ---*/ if (config->GetnMGLevels() > 0) { - Parent_CV.resize(npoint) = 0; + Parent_CV.resize(npoint) = ULONG_MAX; // Initialize to ULONG_MAX to indicate unagglomerated Agglomerate.resize(npoint) = false; Agglomerate_Indirect.resize(npoint) = false; /*--- The finest grid does not have children CV's. ---*/ From 9845ff27ff5f721840b52a5d7327625cf3c679a7 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 19 Jan 2026 13:42:05 +0100 Subject: [PATCH 038/229] change CFL adjustment to safe value. --- Common/src/geometry/CGeometry.cpp | 17 +++++++++-------- Common/src/geometry/CMultiGridGeometry.cpp | 9 +++++---- .../src/integration/CMultiGridIntegration.cpp | 2 +- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index 26b2df561b38..68bab580fe19 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -2590,14 +2590,15 @@ void CGeometry::ComputeSurfStraightness(const CConfig* config, bool print_on_scr su2double Area; string Local_TagBound, Global_TagBound; - vector Normal(nDim), UnitNormal(nDim), RefUnitNormal(nDim); /*--- Assume now that this boundary marker is - straight. As soon as one AreaElement is found that is not aligned with a Reference then it is certain that the - boundary marker is not straight and one can stop searching. Another possibility is that this process doesn't own - any nodes of that boundary, in that case we also have to assume the - boundary is straight. - Any boundary type other than SYMMETRY_PLANE or EULER_WALL gets - the value false (or see cases specified in the conditional below) - which could be wrong. ---*/ + vector Normal(nDim), UnitNormal(nDim), RefUnitNormal(nDim); + /*--- Assume now that this boundary marker is straight. As soon as one + AreaElement is found that is not aligned with a Reference then it + is certain that the boundary marker is not straight and one can + stop searching. Another possibility is that this process doesn't own + any nodes of that boundary, in that case we also have to assume the + boundary is straight. Any boundary type other than SYMMETRY_PLANE or + EULER_WALL gets the value false (or see cases specified in the + conditional below) which could be wrong. ---*/ boundIsStraight.resize(nMarker); fill(boundIsStraight.begin(), boundIsStraight.end(), true); diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index a1a0dc538a75..a636268aa69f 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -716,10 +716,11 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un SetGlobal_nPointDomain(Global_nPointCoarse); if (iMesh != MESH_0) { - // const su2double factor = 1.5; //nijso: too high - const su2double factor = 1.1; - // const su2double Coeff = pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); - const su2double CFL = factor * config->GetCFL(iMesh - 1); // / Coeff; + /*--- Note: CFL at the coarse levels have a large impact on convergence, + this should be rewritten to use adaptive CFL. ---*/ + const su2double factor = 1.0; + const su2double Coeff = 1.1; //pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); + const su2double CFL = factor * config->GetCFL(iMesh - 1) / Coeff; config->SetCFL(iMesh, CFL); } diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index fcd33f63f2f8..51eb4545c8f8 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -528,7 +528,7 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet /*--- Apply level-dependent damping: more aggressive damping on deeper coarse levels ---*/ const su2double base_damp = config->GetDamp_Correc_Prolong(); const su2double level_factor = pow(0.75, iMesh); // 0.75^iMesh reduces damping progressively - const su2double factor = base_damp * level_factor; + const su2double factor = base_damp; // * level_factor; /*--- Track maximum correction magnitude for monitoring ---*/ su2double max_correction_local = 0.0; From fc1de163d0f808c85896bb6b19ee9334ce0b2a4e Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 19 Jan 2026 19:33:43 +0100 Subject: [PATCH 039/229] change CFL adjustment to safe value. --- .../src/integration/CMultiGridIntegration.cpp | 187 +++++++++++++++++- 1 file changed, 178 insertions(+), 9 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 51eb4545c8f8..2eba09125dfd 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -300,18 +300,21 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, Space_Integration(geometry_coarse, solver_container_coarse, numerics_coarse, config, iMesh+1, NO_RK_ITER, RunTime_EqSystem); - /*--- Monitor coarse grid residual magnitude before forcing term ---*/ - if (SU2_MPI::GetRank() == 0) { - su2double max_res_coarse = 0.0; - for (unsigned long iPoint = 0; iPoint < geometry_coarse->GetnPointDomain(); iPoint++) { - const su2double* res = solver_coarse->LinSysRes.GetBlock(iPoint); - for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { - max_res_coarse = max(max_res_coarse, fabs(res[iVar])); - } + /*--- Store initial coarse grid residual before MG cycle ---*/ + su2double max_res_coarse_before = 0.0; + for (unsigned long iPoint = 0; iPoint < geometry_coarse->GetnPointDomain(); iPoint++) { + const su2double* res = solver_coarse->LinSysRes.GetBlock(iPoint); + for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { + max_res_coarse_before = max(max_res_coarse_before, fabs(res[iVar])); } - cout << " MG Level " << iMesh+1 << ": Max coarse residual before forcing = " << max_res_coarse << endl; } +#ifdef HAVE_MPI + su2double global_max_res_coarse_before = 0.0; + SU2_MPI::Allreduce(&max_res_coarse_before, &global_max_res_coarse_before, 1, MPI_DOUBLE, MPI_MAX, SU2_MPI::GetComm()); + max_res_coarse_before = global_max_res_coarse_before; +#endif + /*--- Compute $P_(k+1) = I^(k+1)_k(r_k) - r_(k+1) ---*/ SetForcing_Term(solver_fine, solver_coarse, geometry_fine, geometry_coarse, config, iMesh+1); @@ -338,6 +341,172 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, GetProlongated_Correction(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config); + /*--- Measure coarse grid residual after MG cycle to assess convergence rate ---*/ + su2double max_res_coarse_after = 0.0; + for (unsigned long iPoint = 0; iPoint < geometry_coarse->GetnPointDomain(); iPoint++) { + const su2double* res = solver_coarse->LinSysRes.GetBlock(iPoint); + for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { + max_res_coarse_after = max(max_res_coarse_after, fabs(res[iVar])); + } + } + +#ifdef HAVE_MPI + su2double global_max_res_coarse_after = 0.0; + SU2_MPI::Allreduce(&max_res_coarse_after, &global_max_res_coarse_after, 1, MPI_DOUBLE, MPI_MAX, SU2_MPI::GetComm()); + max_res_coarse_after = global_max_res_coarse_after; +#endif + + /*--- Adaptive CFL based on coarse grid convergence rate ---*/ + if (max_res_coarse_before > 1e-16) { + su2double convergence_rate = max_res_coarse_after / max_res_coarse_before; + + /*--- Get current CFL values ---*/ + su2double CFL_fine = config->GetCFL(iMesh); + su2double CFL_coarse_current = config->GetCFL(iMesh+1); + su2double current_coeff = CFL_fine / CFL_coarse_current; + + /*--- Track convergence per MG level using simple counters ---*/ + constexpr int MAX_MG_LEVELS = 10; // Support up to 10 MG levels + static int consecutive_convergence[MAX_MG_LEVELS] = {}; // Counter of consecutive good iterations + static su2double avg_conv_rate[MAX_MG_LEVELS] = {}; // Exponential moving average + static su2double prev_fine_res[MAX_MG_LEVELS] = {}; // Previous fine grid residual + static su2double min_fine_res[MAX_MG_LEVELS] = {}; // Best (minimum) fine grid residual seen + static int iterations_since_improvement[MAX_MG_LEVELS] = {}; // Iterations since fine grid improved + static bool initialized = false; + + const unsigned short nMGLevels = config->GetnMGLevels(); + const unsigned short max_lvl = min(nMGLevels, (unsigned short)MAX_MG_LEVELS); + + if (!initialized) { + for (int lvl = 0; lvl < MAX_MG_LEVELS; lvl++) { + consecutive_convergence[lvl] = 0; + avg_conv_rate[lvl] = 0.5; // Initialize to good convergence + prev_fine_res[lvl] = 0.0; + min_fine_res[lvl] = 1e10; // Initialize to large value + iterations_since_improvement[lvl] = 0; + } + initialized = true; + } + + /*--- Update convergence tracking for this MG level ---*/ + unsigned short lvl = min(iMesh, (unsigned short)(max_lvl - 1)); // Cap at valid index + + /*--- Get RMS residual from fine grid solver (tracks actual convergence) ---*/ + su2double rms_res_fine = solver_fine->GetRes_RMS(0); // Primary residual (density for flow) + + /*--- Use light smoothing for fine grid residual to filter noise but preserve responsiveness ---*/ + static su2double smoothed_fine_res[MAX_MG_LEVELS] = {}; + if (smoothed_fine_res[lvl] < 1e-30) { + smoothed_fine_res[lvl] = rms_res_fine; // Initialize + min_fine_res[lvl] = rms_res_fine; + } else { + smoothed_fine_res[lvl] = 0.9 * rms_res_fine + 0.1 * smoothed_fine_res[lvl]; // Light smoothing + } + + /*--- Track if fine grid residual is making progress (decreasing) ---*/ + bool fine_grid_improving = false; + if (smoothed_fine_res[lvl] < 0.99 * min_fine_res[lvl]) { // 1% improvement threshold + min_fine_res[lvl] = smoothed_fine_res[lvl]; // Update best residual + iterations_since_improvement[lvl] = 0; + fine_grid_improving = true; + } else { + iterations_since_improvement[lvl]++; + } + + /*--- Detect stalled/diverging convergence using multiple criteria ---*/ + bool fine_grid_stalled = false; + bool fine_grid_diverging = false; + + // Case 1: Quick response - residual stopped improving for >10 iterations + if (iterations_since_improvement[lvl] > 10) { + fine_grid_stalled = true; + } + + // Case 2: Residual degraded significantly (>50%) from best value + if (smoothed_fine_res[lvl] > 1.5 * min_fine_res[lvl] && min_fine_res[lvl] > 1e-30) { + fine_grid_diverging = true; + } + + // Case 3: Short-term trend check - consistent increase over last few iterations + if (prev_fine_res[lvl] > 1e-30) { + su2double fine_trend = smoothed_fine_res[lvl] / prev_fine_res[lvl]; + if (fine_trend > 1.01) { // Increasing by >1% (smoothed, so represents persistent trend) + fine_grid_diverging = true; + } + } + prev_fine_res[lvl] = smoothed_fine_res[lvl]; // Store smoothed value + + /*--- Reset consecutive counter if fine grid is stalled or diverging ---*/ + if (fine_grid_stalled || fine_grid_diverging) { + consecutive_convergence[lvl] = 0; + } + + /*--- Increment consecutive counter only if coarse grid converging AND fine grid not stalled/diverging ---*/ + if (convergence_rate < 1.0 && !fine_grid_stalled && !fine_grid_diverging) { + consecutive_convergence[lvl] = min(consecutive_convergence[lvl] + 1, 10); // Cap at 10 + } else if (convergence_rate >= 1.0) { + consecutive_convergence[lvl] = 0; // Reset on coarse grid divergence + } + + /*--- Update exponential moving average (alpha = 0.3 for responsiveness) ---*/ + avg_conv_rate[lvl] = 0.3 * convergence_rate + 0.7 * avg_conv_rate[lvl]; + + /*--- Check if last iterations show sustained convergence ---*/ + bool sustained_convergence = (consecutive_convergence[lvl] >= 5 && avg_conv_rate[lvl] < 0.8); // Require 5 consecutive + good avg + + + /*--- Compact adaptive strategy using continuous functions ---*/ + su2double new_coeff = current_coeff; + + if (fine_grid_diverging) { + /*--- Fine grid actively diverging: drop coarse CFL by factor of 2 ---*/ + new_coeff = current_coeff * 2.0; // Double coefficient = halve CFL + } else if (fine_grid_stalled) { + /*--- Fine grid stalled: moderately reduce coarse CFL ---*/ + su2double increase_factor = 1.5; // 33% CFL reduction + new_coeff = current_coeff * increase_factor; + } else if (convergence_rate > 1.0) { + /*--- Coarse grid diverging: increase damping proportionally to severity ---*/ + su2double factor = 1.0 + 0.10 * min(convergence_rate - 1.0, 1.0); // Range: [1.01, 1.10] + new_coeff = current_coeff * factor; + } else if (sustained_convergence && avg_conv_rate[lvl] < 0.8) { + /*--- Good convergence: reduce damping very slowly proportionally to quality ---*/ + su2double factor = 0.98 + 0.015 * (avg_conv_rate[lvl] / 0.8); // Range: [0.98, 0.995] - slower increase + new_coeff = current_coeff * factor; + } + /*--- else: maintain current CFL ---*/ + + /*--- Clamp coefficient to safe range [1.0, 4.0], ensuring coarse CFL <= fine CFL ---*/ + new_coeff = min(4.0, max(1.0, new_coeff)); + + /*--- Ensure coarse grid CFL never exceeds 0.95 * fine mesh CFL ---*/ + su2double max_allowed_coarse_CFL = 0.95 * CFL_fine; + su2double min_safe_coeff = CFL_fine / max_allowed_coarse_CFL; // coeff >= 1.0526 + new_coeff = max(new_coeff, min_safe_coeff); + + /*--- Update coarse grid CFL if changed significantly ---*/ + su2double CFL_coarse_new = CFL_fine / new_coeff; + + if (fabs(CFL_coarse_new - CFL_coarse_current) > 1e-8) { + config->SetCFL(iMesh+1, CFL_coarse_new); + + /*--- Update LocalCFL at each coarse grid point ---*/ + SU2_OMP_FOR_STAT(roundUpDiv(geometry_coarse->GetnPoint(), omp_get_num_threads())) + for (auto iPoint = 0ul; iPoint < geometry_coarse->GetnPoint(); iPoint++) { + solver_coarse->GetNodes()->SetLocalCFL(iPoint, CFL_coarse_new); + } + END_SU2_OMP_FOR + } + + /*--- Output monitoring information periodically ---*/ + if (SU2_MPI::GetRank() == 0 && config->GetTimeIter() % 50 == 0) { + cout << " MG Level " << iMesh+1 << ": conv_rate = " << convergence_rate + << ", avg_ema = " << avg_conv_rate[lvl] << ", consecutive = " << consecutive_convergence[lvl] + << ", sustained = " << (sustained_convergence ? "YES" : "NO") + << ", coeff = " << new_coeff << ", CFL = " << CFL_coarse_new << endl; + } + } + SmoothProlongated_Correction(RunTime_EqSystem, solver_fine, geometry_fine, config->GetMG_CorrecSmooth(iMesh), 1.25, config); SetProlongated_Correction(solver_fine, geometry_fine, config, iMesh); From 457f160ab5b0eed2cce939983f963d471bc31bfd Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 19 Jan 2026 22:48:29 +0100 Subject: [PATCH 040/229] auto CFL adjustment for coarse meshes --- .../src/integration/CMultiGridIntegration.cpp | 124 ++++++------------ 1 file changed, 39 insertions(+), 85 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 2eba09125dfd..8378bde18d8c 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -365,13 +365,12 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, su2double CFL_coarse_current = config->GetCFL(iMesh+1); su2double current_coeff = CFL_fine / CFL_coarse_current; - /*--- Track convergence per MG level using simple counters ---*/ - constexpr int MAX_MG_LEVELS = 10; // Support up to 10 MG levels - static int consecutive_convergence[MAX_MG_LEVELS] = {}; // Counter of consecutive good iterations - static su2double avg_conv_rate[MAX_MG_LEVELS] = {}; // Exponential moving average - static su2double prev_fine_res[MAX_MG_LEVELS] = {}; // Previous fine grid residual - static su2double min_fine_res[MAX_MG_LEVELS] = {}; // Best (minimum) fine grid residual seen - static int iterations_since_improvement[MAX_MG_LEVELS] = {}; // Iterations since fine grid improved + /*--- Adaptive CFL for coarse multigrid levels ---*/ + constexpr int MAX_MG_LEVELS = 10; + static int consecutive_decreasing[MAX_MG_LEVELS] = {}; + static su2double prev_fine_res[MAX_MG_LEVELS] = {}; + static su2double min_fine_res[MAX_MG_LEVELS] = {}; + static int iterations_since_improvement[MAX_MG_LEVELS] = {}; static bool initialized = false; const unsigned short nMGLevels = config->GetnMGLevels(); @@ -379,109 +378,64 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, if (!initialized) { for (int lvl = 0; lvl < MAX_MG_LEVELS; lvl++) { - consecutive_convergence[lvl] = 0; - avg_conv_rate[lvl] = 0.5; // Initialize to good convergence + consecutive_decreasing[lvl] = 0; prev_fine_res[lvl] = 0.0; - min_fine_res[lvl] = 1e10; // Initialize to large value + min_fine_res[lvl] = 1e10; iterations_since_improvement[lvl] = 0; } initialized = true; } - /*--- Update convergence tracking for this MG level ---*/ - unsigned short lvl = min(iMesh, (unsigned short)(max_lvl - 1)); // Cap at valid index + unsigned short lvl = min(iMesh, (unsigned short)(max_lvl - 1)); - /*--- Get RMS residual from fine grid solver (tracks actual convergence) ---*/ - su2double rms_res_fine = solver_fine->GetRes_RMS(0); // Primary residual (density for flow) - - /*--- Use light smoothing for fine grid residual to filter noise but preserve responsiveness ---*/ + /*--- Track fine grid RMS residual ---*/ + su2double rms_res_fine = solver_fine->GetRes_RMS(0); static su2double smoothed_fine_res[MAX_MG_LEVELS] = {}; + if (smoothed_fine_res[lvl] < 1e-30) { - smoothed_fine_res[lvl] = rms_res_fine; // Initialize + smoothed_fine_res[lvl] = rms_res_fine; + prev_fine_res[lvl] = rms_res_fine; min_fine_res[lvl] = rms_res_fine; } else { - smoothed_fine_res[lvl] = 0.9 * rms_res_fine + 0.1 * smoothed_fine_res[lvl]; // Light smoothing + smoothed_fine_res[lvl] = 0.9 * rms_res_fine + 0.1 * smoothed_fine_res[lvl]; } - /*--- Track if fine grid residual is making progress (decreasing) ---*/ - bool fine_grid_improving = false; - if (smoothed_fine_res[lvl] < 0.99 * min_fine_res[lvl]) { // 1% improvement threshold - min_fine_res[lvl] = smoothed_fine_res[lvl]; // Update best residual - iterations_since_improvement[lvl] = 0; - fine_grid_improving = true; + /*--- Track consecutive decreasing iterations ---*/ + if (smoothed_fine_res[lvl] < prev_fine_res[lvl]) { + consecutive_decreasing[lvl] = min(consecutive_decreasing[lvl] + 1, 10); } else { - iterations_since_improvement[lvl]++; - } - - /*--- Detect stalled/diverging convergence using multiple criteria ---*/ - bool fine_grid_stalled = false; - bool fine_grid_diverging = false; - - // Case 1: Quick response - residual stopped improving for >10 iterations - if (iterations_since_improvement[lvl] > 10) { - fine_grid_stalled = true; + consecutive_decreasing[lvl] = 0; } + prev_fine_res[lvl] = smoothed_fine_res[lvl]; - // Case 2: Residual degraded significantly (>50%) from best value - if (smoothed_fine_res[lvl] > 1.5 * min_fine_res[lvl] && min_fine_res[lvl] > 1e-30) { - fine_grid_diverging = true; - } - - // Case 3: Short-term trend check - consistent increase over last few iterations - if (prev_fine_res[lvl] > 1e-30) { - su2double fine_trend = smoothed_fine_res[lvl] / prev_fine_res[lvl]; - if (fine_trend > 1.01) { // Increasing by >1% (smoothed, so represents persistent trend) - fine_grid_diverging = true; - } - } - prev_fine_res[lvl] = smoothed_fine_res[lvl]; // Store smoothed value - - /*--- Reset consecutive counter if fine grid is stalled or diverging ---*/ - if (fine_grid_stalled || fine_grid_diverging) { - consecutive_convergence[lvl] = 0; - } - - /*--- Increment consecutive counter only if coarse grid converging AND fine grid not stalled/diverging ---*/ - if (convergence_rate < 1.0 && !fine_grid_stalled && !fine_grid_diverging) { - consecutive_convergence[lvl] = min(consecutive_convergence[lvl] + 1, 10); // Cap at 10 - } else if (convergence_rate >= 1.0) { - consecutive_convergence[lvl] = 0; // Reset on coarse grid divergence + /*--- Track best residual for divergence detection only ---*/ + if (smoothed_fine_res[lvl] < min_fine_res[lvl]) { + min_fine_res[lvl] = smoothed_fine_res[lvl]; + iterations_since_improvement[lvl] = 0; + } else { + iterations_since_improvement[lvl]++; } - /*--- Update exponential moving average (alpha = 0.3 for responsiveness) ---*/ - avg_conv_rate[lvl] = 0.3 * convergence_rate + 0.7 * avg_conv_rate[lvl]; + /*--- Detect actual divergence (not stall during slow convergence) ---*/ + bool fine_grid_diverging = (smoothed_fine_res[lvl] > 1.5 * min_fine_res[lvl] && min_fine_res[lvl] > 1e-30); - /*--- Check if last iterations show sustained convergence ---*/ - bool sustained_convergence = (consecutive_convergence[lvl] >= 5 && avg_conv_rate[lvl] < 0.8); // Require 5 consecutive + good avg + /*--- Sustained convergence: residual decreasing for 5 consecutive iterations ---*/ + bool sustained_convergence = (consecutive_decreasing[lvl] >= 5); - - /*--- Compact adaptive strategy using continuous functions ---*/ + /*--- Adapt coefficient based on convergence state ---*/ su2double new_coeff = current_coeff; if (fine_grid_diverging) { - /*--- Fine grid actively diverging: drop coarse CFL by factor of 2 ---*/ - new_coeff = current_coeff * 2.0; // Double coefficient = halve CFL - } else if (fine_grid_stalled) { - /*--- Fine grid stalled: moderately reduce coarse CFL ---*/ - su2double increase_factor = 1.5; // 33% CFL reduction - new_coeff = current_coeff * increase_factor; + new_coeff = current_coeff * 1.1; } else if (convergence_rate > 1.0) { - /*--- Coarse grid diverging: increase damping proportionally to severity ---*/ - su2double factor = 1.0 + 0.10 * min(convergence_rate - 1.0, 1.0); // Range: [1.01, 1.10] - new_coeff = current_coeff * factor; - } else if (sustained_convergence && avg_conv_rate[lvl] < 0.8) { - /*--- Good convergence: reduce damping very slowly proportionally to quality ---*/ - su2double factor = 0.98 + 0.015 * (avg_conv_rate[lvl] / 0.8); // Range: [0.98, 0.995] - slower increase - new_coeff = current_coeff * factor; + new_coeff = current_coeff * (1.0 + 0.10 * min(convergence_rate - 1.0, 1.0)); + } else if (sustained_convergence) { + new_coeff = current_coeff * 0.99; } - /*--- else: maintain current CFL ---*/ - - /*--- Clamp coefficient to safe range [1.0, 4.0], ensuring coarse CFL <= fine CFL ---*/ - new_coeff = min(4.0, max(1.0, new_coeff)); - /*--- Ensure coarse grid CFL never exceeds 0.95 * fine mesh CFL ---*/ - su2double max_allowed_coarse_CFL = 0.95 * CFL_fine; - su2double min_safe_coeff = CFL_fine / max_allowed_coarse_CFL; // coeff >= 1.0526 + /*--- Clamp and enforce hierarchy ---*/ + new_coeff = min(3.0, max(1.0, new_coeff)); + su2double min_safe_coeff = CFL_fine / (0.95 * CFL_fine); new_coeff = max(new_coeff, min_safe_coeff); /*--- Update coarse grid CFL if changed significantly ---*/ @@ -501,7 +455,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Output monitoring information periodically ---*/ if (SU2_MPI::GetRank() == 0 && config->GetTimeIter() % 50 == 0) { cout << " MG Level " << iMesh+1 << ": conv_rate = " << convergence_rate - << ", avg_ema = " << avg_conv_rate[lvl] << ", consecutive = " << consecutive_convergence[lvl] + << ", consecutive = " << consecutive_decreasing[lvl] << ", sustained = " << (sustained_convergence ? "YES" : "NO") << ", coeff = " << new_coeff << ", CFL = " << CFL_coarse_new << endl; } From fd006de8f911a9236072dd50088c37d9ef882d11 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Mon, 19 Jan 2026 17:32:47 -0800 Subject: [PATCH 041/229] fix for start iteration > 0 --- SU2_CFD/src/iteration/CFluidIteration.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/SU2_CFD/src/iteration/CFluidIteration.cpp b/SU2_CFD/src/iteration/CFluidIteration.cpp index 399fa59ec7b1..7231e3f4b6cf 100644 --- a/SU2_CFD/src/iteration/CFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFluidIteration.cpp @@ -340,8 +340,11 @@ void CFluidIteration::UpdateRamp(CGeometry**** geometry_container, CConfig** con const long unsigned updateFreq = RampMUSCLParam.rampMUSCLCoeff[RAMP_COEFF::UPDATE_FREQ]; const long unsigned rampLength = RampMUSCLParam.rampMUSCLCoeff[RAMP_COEFF::FINAL_ITER]; auto iterFrac = (static_cast(iter - startIter)/static_cast((rampLength + startIter) - startIter)); - if (iter < startIter) return; - if ((iter == startIter) && (rank == MASTER_NODE)) cout << "Beginning to ramp MUSCL scheme..." << endl; + if (iter < startIter) { + config->SetMUSCLRampValue(0); + return; + } + if (iter == startIter && rank == MASTER_NODE) cout << "Beginning to ramp MUSCL scheme..." << endl; if ((iter % updateFreq == 0 && iter < (rampLength + startIter)) || (iter == (rampLength + startIter))) { switch (RampMUSCLParam.Kind_MUSCLRamp) { case MUSCL_RAMP_TYPE::ITERATION: From 53a6c2803d9534c92b2d56cd32d2f684b9ebf0bd Mon Sep 17 00:00:00 2001 From: bigfooted Date: Tue, 20 Jan 2026 11:38:28 +0100 Subject: [PATCH 042/229] precommit --- Common/src/geometry/CMultiGridGeometry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index a636268aa69f..1fccf3fd240e 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -719,7 +719,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note: CFL at the coarse levels have a large impact on convergence, this should be rewritten to use adaptive CFL. ---*/ const su2double factor = 1.0; - const su2double Coeff = 1.1; //pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); + const su2double Coeff = 1.1; // pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); const su2double CFL = factor * config->GetCFL(iMesh - 1) / Coeff; config->SetCFL(iMesh, CFL); } From cd46ff73b6a223ea0565fcb1cdc62c10073fb815 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Thu, 22 Jan 2026 22:20:34 +0100 Subject: [PATCH 043/229] fix omp --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 8378bde18d8c..44e6fbb07b06 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -657,7 +657,7 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet su2double max_correction_local = 0.0; su2double max_correction_global = 0.0; - SU2_OMP_FOR_STAT(roundUpDiv(geo_fine->GetnPointDomain(), omp_get_num_threads())) + SU2_OMP_FOR_(schedule(static, roundUpDiv(geo_fine->GetnPointDomain(), omp_get_num_threads())) reduction(max:max_correction_local)) 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); @@ -670,7 +670,6 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet Solution_Fine[iVar] += correction; /*--- Track maximum correction ---*/ - SU2_OMP_CRITICAL max_correction_local = max(max_correction_local, fabs(correction)); } } From 59043d7ebb9e8b99b3ce2038e3243cfaa9af502e Mon Sep 17 00:00:00 2001 From: bigfooted Date: Fri, 23 Jan 2026 09:05:14 +0100 Subject: [PATCH 044/229] reduce cfl complexity --- .../src/integration/CMultiGridIntegration.cpp | 193 +++++++----------- 1 file changed, 76 insertions(+), 117 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 44e6fbb07b06..da94cb224e67 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -300,21 +300,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, Space_Integration(geometry_coarse, solver_container_coarse, numerics_coarse, config, iMesh+1, NO_RK_ITER, RunTime_EqSystem); - /*--- Store initial coarse grid residual before MG cycle ---*/ - su2double max_res_coarse_before = 0.0; - for (unsigned long iPoint = 0; iPoint < geometry_coarse->GetnPointDomain(); iPoint++) { - const su2double* res = solver_coarse->LinSysRes.GetBlock(iPoint); - for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { - max_res_coarse_before = max(max_res_coarse_before, fabs(res[iVar])); - } - } - -#ifdef HAVE_MPI - su2double global_max_res_coarse_before = 0.0; - SU2_MPI::Allreduce(&max_res_coarse_before, &global_max_res_coarse_before, 1, MPI_DOUBLE, MPI_MAX, SU2_MPI::GetComm()); - max_res_coarse_before = global_max_res_coarse_before; -#endif - /*--- Compute $P_(k+1) = I^(k+1)_k(r_k) - r_(k+1) ---*/ SetForcing_Term(solver_fine, solver_coarse, geometry_fine, geometry_coarse, config, iMesh+1); @@ -341,124 +326,98 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, GetProlongated_Correction(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config); - /*--- Measure coarse grid residual after MG cycle to assess convergence rate ---*/ - su2double max_res_coarse_after = 0.0; - for (unsigned long iPoint = 0; iPoint < geometry_coarse->GetnPointDomain(); iPoint++) { - const su2double* res = solver_coarse->LinSysRes.GetBlock(iPoint); - for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { - max_res_coarse_after = max(max_res_coarse_after, fabs(res[iVar])); - } - } + /*--- Get current CFL values ---*/ + su2double CFL_fine = config->GetCFL(iMesh); + su2double CFL_coarse_current = config->GetCFL(iMesh+1); + su2double current_coeff = CFL_fine / CFL_coarse_current; -#ifdef HAVE_MPI - su2double global_max_res_coarse_after = 0.0; - SU2_MPI::Allreduce(&max_res_coarse_after, &global_max_res_coarse_after, 1, MPI_DOUBLE, MPI_MAX, SU2_MPI::GetComm()); - max_res_coarse_after = global_max_res_coarse_after; -#endif - - /*--- Adaptive CFL based on coarse grid convergence rate ---*/ - if (max_res_coarse_before > 1e-16) { - su2double convergence_rate = max_res_coarse_after / max_res_coarse_before; - - /*--- Get current CFL values ---*/ - su2double CFL_fine = config->GetCFL(iMesh); - su2double CFL_coarse_current = config->GetCFL(iMesh+1); - su2double current_coeff = CFL_fine / CFL_coarse_current; - - /*--- Adaptive CFL for coarse multigrid levels ---*/ - constexpr int MAX_MG_LEVELS = 10; - static int consecutive_decreasing[MAX_MG_LEVELS] = {}; - static su2double prev_fine_res[MAX_MG_LEVELS] = {}; - static su2double min_fine_res[MAX_MG_LEVELS] = {}; - static int iterations_since_improvement[MAX_MG_LEVELS] = {}; - static bool initialized = false; - - const unsigned short nMGLevels = config->GetnMGLevels(); - const unsigned short max_lvl = min(nMGLevels, (unsigned short)MAX_MG_LEVELS); - - if (!initialized) { - for (int lvl = 0; lvl < MAX_MG_LEVELS; lvl++) { - consecutive_decreasing[lvl] = 0; - prev_fine_res[lvl] = 0.0; - min_fine_res[lvl] = 1e10; - iterations_since_improvement[lvl] = 0; - } - initialized = true; - } - - unsigned short lvl = min(iMesh, (unsigned short)(max_lvl - 1)); - - /*--- Track fine grid RMS residual ---*/ - su2double rms_res_fine = solver_fine->GetRes_RMS(0); - static su2double smoothed_fine_res[MAX_MG_LEVELS] = {}; + /*--- Adaptive CFL for coarse multigrid levels ---*/ + constexpr int MAX_MG_LEVELS = 10; + static int consecutive_decreasing[MAX_MG_LEVELS] = {}; + static su2double prev_fine_res[MAX_MG_LEVELS] = {}; + static su2double min_fine_res[MAX_MG_LEVELS] = {}; + static int iterations_since_improvement[MAX_MG_LEVELS] = {}; + static bool initialized = false; - if (smoothed_fine_res[lvl] < 1e-30) { - smoothed_fine_res[lvl] = rms_res_fine; - prev_fine_res[lvl] = rms_res_fine; - min_fine_res[lvl] = rms_res_fine; - } else { - smoothed_fine_res[lvl] = 0.9 * rms_res_fine + 0.1 * smoothed_fine_res[lvl]; - } + const unsigned short nMGLevels = config->GetnMGLevels(); + const unsigned short max_lvl = min(nMGLevels, (unsigned short)MAX_MG_LEVELS); - /*--- Track consecutive decreasing iterations ---*/ - if (smoothed_fine_res[lvl] < prev_fine_res[lvl]) { - consecutive_decreasing[lvl] = min(consecutive_decreasing[lvl] + 1, 10); - } else { + if (!initialized) { + for (int lvl = 0; lvl < MAX_MG_LEVELS; lvl++) { consecutive_decreasing[lvl] = 0; - } - prev_fine_res[lvl] = smoothed_fine_res[lvl]; - - /*--- Track best residual for divergence detection only ---*/ - if (smoothed_fine_res[lvl] < min_fine_res[lvl]) { - min_fine_res[lvl] = smoothed_fine_res[lvl]; + prev_fine_res[lvl] = 0.0; + min_fine_res[lvl] = 1e10; iterations_since_improvement[lvl] = 0; - } else { - iterations_since_improvement[lvl]++; } + initialized = true; + } - /*--- Detect actual divergence (not stall during slow convergence) ---*/ - bool fine_grid_diverging = (smoothed_fine_res[lvl] > 1.5 * min_fine_res[lvl] && min_fine_res[lvl] > 1e-30); + unsigned short lvl = min(iMesh, (unsigned short)(max_lvl - 1)); - /*--- Sustained convergence: residual decreasing for 5 consecutive iterations ---*/ - bool sustained_convergence = (consecutive_decreasing[lvl] >= 5); + /*--- Track fine grid RMS residual ---*/ + su2double rms_res_fine = solver_fine->GetRes_RMS(0); + static su2double smoothed_fine_res[MAX_MG_LEVELS] = {}; - /*--- Adapt coefficient based on convergence state ---*/ - su2double new_coeff = current_coeff; + if (smoothed_fine_res[lvl] < EPS) { + smoothed_fine_res[lvl] = rms_res_fine; + prev_fine_res[lvl] = rms_res_fine; + min_fine_res[lvl] = rms_res_fine; + } else { + smoothed_fine_res[lvl] = 0.9 * rms_res_fine + 0.1 * smoothed_fine_res[lvl]; + } - if (fine_grid_diverging) { - new_coeff = current_coeff * 1.1; - } else if (convergence_rate > 1.0) { - new_coeff = current_coeff * (1.0 + 0.10 * min(convergence_rate - 1.0, 1.0)); - } else if (sustained_convergence) { - new_coeff = current_coeff * 0.99; - } + /*--- Track consecutive decreasing iterations ---*/ + if (smoothed_fine_res[lvl] < prev_fine_res[lvl]) { + consecutive_decreasing[lvl] = min(consecutive_decreasing[lvl] + 1, 10); + } else { + consecutive_decreasing[lvl] = 0; + } + prev_fine_res[lvl] = smoothed_fine_res[lvl]; + + /*--- Track best residual for divergence detection only ---*/ + if (smoothed_fine_res[lvl] < min_fine_res[lvl]) { + min_fine_res[lvl] = smoothed_fine_res[lvl]; + iterations_since_improvement[lvl] = 0; + } else { + iterations_since_improvement[lvl]++; + } - /*--- Clamp and enforce hierarchy ---*/ - new_coeff = min(3.0, max(1.0, new_coeff)); - su2double min_safe_coeff = CFL_fine / (0.95 * CFL_fine); - new_coeff = max(new_coeff, min_safe_coeff); + /*--- Sustained convergence: residual decreasing for 5 consecutive iterations ---*/ + bool sustained_convergence = (consecutive_decreasing[lvl] >= 5); - /*--- Update coarse grid CFL if changed significantly ---*/ - su2double CFL_coarse_new = CFL_fine / new_coeff; + /*--- Adapt coefficient based on convergence state ---*/ + su2double new_coeff = current_coeff; - if (fabs(CFL_coarse_new - CFL_coarse_current) > 1e-8) { - config->SetCFL(iMesh+1, CFL_coarse_new); + if (sustained_convergence) { + new_coeff = current_coeff * 0.99; + } else + new_coeff = current_coeff * 1.1; - /*--- Update LocalCFL at each coarse grid point ---*/ - SU2_OMP_FOR_STAT(roundUpDiv(geometry_coarse->GetnPoint(), omp_get_num_threads())) - for (auto iPoint = 0ul; iPoint < geometry_coarse->GetnPoint(); iPoint++) { - solver_coarse->GetNodes()->SetLocalCFL(iPoint, CFL_coarse_new); - } - END_SU2_OMP_FOR - } + /*--- Clamp and enforce hierarchy ---*/ + new_coeff = min(3.0, max(1.0, new_coeff)); + su2double min_safe_coeff = CFL_fine / (0.95 * CFL_fine); + new_coeff = max(new_coeff, min_safe_coeff); + + /*--- Update coarse grid CFL if changed significantly ---*/ + su2double CFL_coarse_new = CFL_fine / new_coeff; + + if (fabs(CFL_coarse_new - CFL_coarse_current) > EPS) { + config->SetCFL(iMesh+1, CFL_coarse_new); - /*--- Output monitoring information periodically ---*/ - if (SU2_MPI::GetRank() == 0 && config->GetTimeIter() % 50 == 0) { - cout << " MG Level " << iMesh+1 << ": conv_rate = " << convergence_rate - << ", consecutive = " << consecutive_decreasing[lvl] - << ", sustained = " << (sustained_convergence ? "YES" : "NO") - << ", coeff = " << new_coeff << ", CFL = " << CFL_coarse_new << endl; + /*--- Update LocalCFL at each coarse grid point ---*/ + SU2_OMP_FOR_STAT(roundUpDiv(geometry_coarse->GetnPoint(), omp_get_num_threads())) + for (auto iPoint = 0ul; iPoint < geometry_coarse->GetnPoint(); iPoint++) { + solver_coarse->GetNodes()->SetLocalCFL(iPoint, CFL_coarse_new); } + END_SU2_OMP_FOR + } + + /*--- Output monitoring information periodically ---*/ + if (SU2_MPI::GetRank() == 0 && config->GetTimeIter() % 50 == 0) { + cout << " MG Level " << iMesh+1 + << ", consecutive = " << consecutive_decreasing[lvl] + << ", sustained = " << (sustained_convergence ? "YES" : "NO") + << ", coeff = " << new_coeff << ", CFL = " << CFL_coarse_new << endl; } SmoothProlongated_Correction(RunTime_EqSystem, solver_fine, geometry_fine, config->GetMG_CorrecSmooth(iMesh), 1.25, config); From 41d0e18428e250c327e89692c755aa8599e56159 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 24 Jan 2026 10:59:39 +0100 Subject: [PATCH 045/229] constant but adaptive cfl for multigrid meshes --- Common/src/geometry/CMultiGridGeometry.cpp | 2 +- .../src/integration/CMultiGridIntegration.cpp | 201 +++++++++++------- 2 files changed, 124 insertions(+), 79 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 1fccf3fd240e..6a8ca19198e7 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -719,7 +719,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note: CFL at the coarse levels have a large impact on convergence, this should be rewritten to use adaptive CFL. ---*/ const su2double factor = 1.0; - const su2double Coeff = 1.1; // pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); + const su2double Coeff = 2.0; // pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); const su2double CFL = factor * config->GetCFL(iMesh - 1) / Coeff; config->SetCFL(iMesh, CFL); } diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index da94cb224e67..cb6beed659f0 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -331,93 +331,155 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, su2double CFL_coarse_current = config->GetCFL(iMesh+1); su2double current_coeff = CFL_fine / CFL_coarse_current; - /*--- Adaptive CFL for coarse multigrid levels ---*/ + /*--- Adaptive CFL using Exponential Moving Average (EMA) ---*/ + constexpr int AVG_WINDOW = 5; constexpr int MAX_MG_LEVELS = 10; - static int consecutive_decreasing[MAX_MG_LEVELS] = {}; - static su2double prev_fine_res[MAX_MG_LEVELS] = {}; - static su2double min_fine_res[MAX_MG_LEVELS] = {}; - static int iterations_since_improvement[MAX_MG_LEVELS] = {}; + static su2double current_avg[MAX_MG_LEVELS] = {}; + static su2double prev_avg[MAX_MG_LEVELS] = {}; + static su2double last_res[MAX_MG_LEVELS] = {}; + static bool last_was_increase[MAX_MG_LEVELS] = {}; + static int oscillation_count[MAX_MG_LEVELS] = {}; + static unsigned long last_check_iter[MAX_MG_LEVELS] = {}; static bool initialized = false; - const unsigned short nMGLevels = config->GetnMGLevels(); - const unsigned short max_lvl = min(nMGLevels, (unsigned short)MAX_MG_LEVELS); - if (!initialized) { - for (int lvl = 0; lvl < MAX_MG_LEVELS; lvl++) { - consecutive_decreasing[lvl] = 0; - prev_fine_res[lvl] = 0.0; - min_fine_res[lvl] = 1e10; - iterations_since_improvement[lvl] = 0; + 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; } initialized = true; } - unsigned short lvl = min(iMesh, (unsigned short)(max_lvl - 1)); + unsigned short lvl = min(iMesh, (unsigned short)(MAX_MG_LEVELS - 1)); - /*--- Track fine grid RMS residual ---*/ - su2double rms_res_fine = solver_fine->GetRes_RMS(0); - static su2double smoothed_fine_res[MAX_MG_LEVELS] = {}; + /*--- Use global iteration count ---*/ + unsigned long iter; + if (config->GetTime_Domain()) + iter = config->GetTimeIter(); + else + iter = config->GetInnerIter(); - if (smoothed_fine_res[lvl] < EPS) { - smoothed_fine_res[lvl] = rms_res_fine; - prev_fine_res[lvl] = rms_res_fine; - min_fine_res[lvl] = rms_res_fine; - } else { - smoothed_fine_res[lvl] = 0.9 * rms_res_fine + 0.1 * smoothed_fine_res[lvl]; + /*--- Get sum of all RMS residuals for all variables ---*/ + su2double rms_res_coarse = 0.0; + for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { + rms_res_coarse += solver_coarse->GetRes_RMS(iVar); } - /*--- Track consecutive decreasing iterations ---*/ - if (smoothed_fine_res[lvl] < prev_fine_res[lvl]) { - consecutive_decreasing[lvl] = min(consecutive_decreasing[lvl] + 1, 10); - } else { - consecutive_decreasing[lvl] = 0; + /*--- 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] >= 2) { + /*--- Detected 2 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; } - prev_fine_res[lvl] = smoothed_fine_res[lvl]; - /*--- Track best residual for divergence detection only ---*/ - if (smoothed_fine_res[lvl] < min_fine_res[lvl]) { - min_fine_res[lvl] = smoothed_fine_res[lvl]; - iterations_since_improvement[lvl] = 0; + /*--- Update exponential moving average ---*/ + if (current_avg[lvl] < EPS) { + current_avg[lvl] = rms_res_coarse; // Initialize with first value } else { - iterations_since_improvement[lvl]++; + current_avg[lvl] = (current_avg[lvl] * (AVG_WINDOW - 1) + rms_res_coarse) / AVG_WINDOW; } - /*--- Sustained convergence: residual decreasing for 5 consecutive iterations ---*/ - bool sustained_convergence = (consecutive_decreasing[lvl] >= 5); - - /*--- Adapt coefficient based on convergence state ---*/ + /*--- Check if we should compare and adapt CFL ---*/ su2double new_coeff = current_coeff; + constexpr su2double MIN_REDUCTION_FACTOR = 0.98; // Require at least 2% reduction + constexpr int UPDATE_INTERVAL = 10; // Update reference every N iterations - if (sustained_convergence) { - new_coeff = current_coeff * 0.99; - } else - new_coeff = current_coeff * 1.1; - - /*--- Clamp and enforce hierarchy ---*/ - new_coeff = min(3.0, max(1.0, new_coeff)); - su2double min_safe_coeff = CFL_fine / (0.95 * CFL_fine); - new_coeff = max(new_coeff, min_safe_coeff); + /*--- Initialize prev_avg on first use ---*/ + if (prev_avg[lvl] < EPS) { + prev_avg[lvl] = current_avg[lvl]; + } - /*--- Update coarse grid CFL if changed significantly ---*/ - su2double CFL_coarse_new = CFL_fine / new_coeff; + /*--- Periodically update prev_avg to allow ratio to reflect accumulated decrease ---*/ + static unsigned long last_update_iter[MAX_MG_LEVELS] = {}; + bool should_update = (iter - last_update_iter[lvl] >= UPDATE_INTERVAL); - if (fabs(CFL_coarse_new - CFL_coarse_current) > EPS) { - config->SetCFL(iMesh+1, CFL_coarse_new); + /*--- Calculate ratio before any updates for debug output ---*/ + su2double ratio_for_display = (prev_avg[lvl] > EPS) ? (current_avg[lvl] / prev_avg[lvl]) : 1.0; - /*--- Update LocalCFL at each coarse grid point ---*/ - SU2_OMP_FOR_STAT(roundUpDiv(geometry_coarse->GetnPoint(), omp_get_num_threads())) - for (auto iPoint = 0ul; iPoint < geometry_coarse->GetnPoint(); iPoint++) { - solver_coarse->GetNodes()->SetLocalCFL(iPoint, CFL_coarse_new); + /*--- Immediate CFL reduction for oscillation detection ---*/ + if (oscillation_detected) { + /*--- Oscillating residuals detected: reduce CFL aggressively ---*/ + new_coeff = current_coeff * 2.0; + prev_avg[lvl] = current_avg[lvl]; // Update reference + last_update_iter[lvl] = iter; + } + /*--- Asymmetric adaptation for robustness ---*/ + else if (prev_avg[lvl] > EPS) { + su2double 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 * 1.10; + prev_avg[lvl] = current_avg[lvl]; // Update reference immediately + last_update_iter[lvl] = iter; + } else if (sufficient_decrease && should_update) { + /*--- Residual decreasing sufficiently: increase CFL ---*/ + new_coeff = current_coeff * 0.99; + prev_avg[lvl] = current_avg[lvl]; // Update reference + last_update_iter[lvl] = iter; + } else if (should_update && !sufficient_decrease) { + /*--- Update reference even if not changing CFL ---*/ + prev_avg[lvl] = current_avg[lvl]; + last_update_iter[lvl] = iter; } - END_SU2_OMP_FOR + /*--- Else: wait for next update interval ---*/ } + /*--- Clamp coefficient between 1.0 and 2.0 ---*/ + new_coeff = min(2.0, max(1.0, new_coeff)); + + /*--- Update coarse grid CFL ---*/ + su2double CFL_coarse_new = max(CFL_fine / 2.0, min(CFL_fine/1.1, CFL_fine / new_coeff)); + config->SetCFL(iMesh+1, CFL_coarse_new); + + /*--- Update LocalCFL at each coarse grid point ---*/ + SU2_OMP_FOR_STAT(roundUpDiv(geometry_coarse->GetnPoint(), omp_get_num_threads())) + for (auto iPoint = 0ul; iPoint < geometry_coarse->GetnPoint(); iPoint++) { + solver_coarse->GetNodes()->SetLocalCFL(iPoint, CFL_coarse_new); + } + END_SU2_OMP_FOR + //} + /*--- Output monitoring information periodically ---*/ - if (SU2_MPI::GetRank() == 0 && config->GetTimeIter() % 50 == 0) { + if (SU2_MPI::GetRank() == 0 && iter % 1 == 0) { + bool cfl_increased = (new_coeff < current_coeff); // Lower coeff = higher CFL + bool cfl_decreased = (new_coeff > current_coeff); // Higher coeff = lower CFL + string action = "unchanged"; + if (cfl_increased) action = "increased"; + else if (cfl_decreased) action = "decreased"; + + su2double percent_reduction = (1.0 - ratio_for_display) * 100.0; + cout << " MG Level " << iMesh+1 - << ", consecutive = " << consecutive_decreasing[lvl] - << ", sustained = " << (sustained_convergence ? "YES" : "NO") - << ", coeff = " << new_coeff << ", CFL = " << CFL_coarse_new << endl; + << ", iter = " << iter + << ", percent reduction = " << percent_reduction + << ", action = " << action + << ", oscillation = " << (oscillation_detected ? "yes" : "no") + << ", coeff = " << new_coeff << " (was " << current_coeff << ")" + << ", CFL = " << CFL_coarse_new << endl; } SmoothProlongated_Correction(RunTime_EqSystem, solver_fine, geometry_fine, config->GetMG_CorrecSmooth(iMesh), 1.25, config); @@ -612,11 +674,7 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet const su2double level_factor = pow(0.75, iMesh); // 0.75^iMesh reduces damping progressively const su2double factor = base_damp; // * level_factor; - /*--- Track maximum correction magnitude for monitoring ---*/ - su2double max_correction_local = 0.0; - su2double max_correction_global = 0.0; - - SU2_OMP_FOR_(schedule(static, roundUpDiv(geo_fine->GetnPointDomain(), omp_get_num_threads())) reduction(max:max_correction_local)) + 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); @@ -627,23 +685,10 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet su2double correction = factor * Residual_Fine[iVar]; Solution_Fine[iVar] += correction; - - /*--- Track maximum correction ---*/ - max_correction_local = max(max_correction_local, fabs(correction)); } } END_SU2_OMP_FOR - /*--- Reduce maximum correction across all ranks ---*/ - SU2_MPI::Allreduce(&max_correction_local, &max_correction_global, 1, MPI_DOUBLE, MPI_MAX, SU2_MPI::GetComm()); - - /*--- Output correction magnitude for monitoring ---*/ - if (SU2_MPI::GetRank() == 0) { - cout << " MG Level " << iMesh << ": Max correction = " << max_correction_global - << ", Damping factor = " << factor << " (base=" << base_damp - << " × level_factor=" << level_factor << ")" << endl; - } - /*--- MPI the new interpolated solution ---*/ sol_fine->InitiateComms(geo_fine, config, MPI_QUANTITIES::SOLUTION); From ae206e3a4d35ad161599db5021306060125f565c Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 24 Jan 2026 16:30:50 +0100 Subject: [PATCH 046/229] fix multigrid with claude sonnet --- Common/src/geometry/CMultiGridGeometry.cpp | 3 - .../src/integration/CMultiGridIntegration.cpp | 61 +++++++++++--- .../src/integration/ComputeLinSysResRMS.hpp | 80 +++++++++++++++++++ 3 files changed, 130 insertions(+), 14 deletions(-) create mode 100644 SU2_CFD/src/integration/ComputeLinSysResRMS.hpp diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 6a8ca19198e7..17e2d0bd0fac 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -502,9 +502,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un they are domain points. ---*/ for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - cout << " marker name = " << config->GetMarker_All_TagBound(iMarker) << endl; - cout << " marker type = " << config->GetMarker_All_KindBC(iMarker) << endl; - cout << " send/recv = " << config->GetMarker_All_SendRecv(iMarker) << endl; if ((config->GetMarker_All_KindBC(iMarker) == SEND_RECEIVE) && (config->GetMarker_All_SendRecv(iMarker) > 0)) { const auto MarkerS = iMarker; // sending marker const auto MarkerR = iMarker + 1; // receiving marker diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index cb6beed659f0..51b1f42269a5 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -27,6 +27,7 @@ #include "../../include/integration/CMultiGridIntegration.hpp" #include "../../../Common/include/parallelization/omp_structure.hpp" +#include "ComputeLinSysResRMS.hpp" namespace { /*! @@ -265,6 +266,10 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, } + /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ + solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + } /*--- Compute Forcing Term $P_(k+1) = I^(k+1)_k(P_k+F_k(u_k))-F_(k+1)(I^(k+1)_k u_k)$ and update solution for multigrid ---*/ @@ -334,13 +339,16 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Adaptive CFL using Exponential Moving Average (EMA) ---*/ constexpr int AVG_WINDOW = 5; constexpr int MAX_MG_LEVELS = 10; - static su2double current_avg[MAX_MG_LEVELS] = {}; - static su2double prev_avg[MAX_MG_LEVELS] = {}; - static su2double last_res[MAX_MG_LEVELS] = {}; - static bool last_was_increase[MAX_MG_LEVELS] = {}; - static int oscillation_count[MAX_MG_LEVELS] = {}; - static unsigned long last_check_iter[MAX_MG_LEVELS] = {}; - static bool initialized = false; + + /*--- Use thread-local storage instead of static to avoid MPI rank conflicts ---*/ + /*--- Each MPI rank maintains its own independent adaptive CFL state ---*/ + thread_local su2double current_avg[MAX_MG_LEVELS] = {}; + thread_local su2double prev_avg[MAX_MG_LEVELS] = {}; + thread_local su2double last_res[MAX_MG_LEVELS] = {}; + thread_local bool last_was_increase[MAX_MG_LEVELS] = {}; + thread_local int oscillation_count[MAX_MG_LEVELS] = {}; + thread_local unsigned long last_check_iter[MAX_MG_LEVELS] = {}; + thread_local bool initialized = false; if (!initialized) { for (int i = 0; i < MAX_MG_LEVELS; i++) { @@ -363,12 +371,26 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, else iter = config->GetInnerIter(); - /*--- Get sum of all RMS residuals for all variables ---*/ - su2double rms_res_coarse = 0.0; + /*--- Get sum of all RMS residuals for all variables (local to this rank) ---*/ + su2double rms_res_coarse_local = 0.0; for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { - rms_res_coarse += solver_coarse->GetRes_RMS(iVar); + rms_res_coarse_local += solver_coarse->GetRes_RMS(iVar); } + /*--- MPI synchronization: ensure all ranks use the same global residual value ---*/ + /*--- This is critical for consistent CFL adaptation across all ranks ---*/ + su2double rms_res_coarse = rms_res_coarse_local; + +#ifdef HAVE_MPI + /*--- For coarse grids, residuals are not globally reduced by default ---*/ + /*--- We need to synchronize them for consistent adaptive CFL decisions ---*/ + if (geometry_coarse->GetMGLevel() > 0) { + su2double rms_global_sum = 0.0; + SU2_MPI::Allreduce(&rms_res_coarse_local, &rms_global_sum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + rms_res_coarse = rms_global_sum / static_cast(SU2_MPI::GetSize()); + } +#endif + /*--- Flip-flop detection: detect oscillating residuals (once per outer iteration) ---*/ bool oscillation_detected = false; if (iter != last_check_iter[lvl]) { @@ -411,7 +433,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, } /*--- Periodically update prev_avg to allow ratio to reflect accumulated decrease ---*/ - static unsigned long last_update_iter[MAX_MG_LEVELS] = {}; + thread_local unsigned long last_update_iter[MAX_MG_LEVELS] = {}; bool should_update = (iter - last_update_iter[lvl] >= UPDATE_INTERVAL); /*--- Calculate ratio before any updates for debug output ---*/ @@ -453,6 +475,13 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Update coarse grid CFL ---*/ su2double CFL_coarse_new = max(CFL_fine / 2.0, min(CFL_fine/1.1, CFL_fine / new_coeff)); + +#ifdef HAVE_MPI + /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ + /*--- This prevents rank drift when residual variations are small ---*/ + SU2_MPI::Bcast(&CFL_coarse_new, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); +#endif + config->SetCFL(iMesh+1, CFL_coarse_new); /*--- Update LocalCFL at each coarse grid point ---*/ @@ -464,6 +493,11 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, //} /*--- Output monitoring information periodically ---*/ +#ifdef HAVE_MPI + /*--- Synchronize all ranks before output to ensure consistent state ---*/ + SU2_MPI::Barrier(SU2_MPI::GetComm()); +#endif + if (SU2_MPI::GetRank() == 0 && iter % 1 == 0) { bool cfl_increased = (new_coeff < current_coeff); // Lower coeff = higher CFL bool cfl_decreased = (new_coeff > current_coeff); // Higher coeff = lower CFL @@ -510,6 +544,11 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, solver_fine->Postprocessing(geometry_fine, solver_container_fine, config, iMesh); } + + /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ + solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + } } diff --git a/SU2_CFD/src/integration/ComputeLinSysResRMS.hpp b/SU2_CFD/src/integration/ComputeLinSysResRMS.hpp new file mode 100644 index 000000000000..d16ab319769c --- /dev/null +++ b/SU2_CFD/src/integration/ComputeLinSysResRMS.hpp @@ -0,0 +1,80 @@ +/*! + * \file ComputeLinSysResRMS.hpp + * \brief Helper function to compute global RMS of linear system residual with MPI support. + * \version 8.4.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2026, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once + +#include "../../../Common/include/geometry/CGeometry.hpp" +#include "../../include/solvers/CSolver.hpp" +#include "../../../Common/include/CConfig.hpp" +#include +#include + +/*! + * \brief Compute the global RMS of the linear system residual with MPI consistency. + * \param[in] solver - Pointer to the solver containing the residual. + * \param[in] geometry - Pointer to the geometry for domain point count. + * \return Global RMS of the linear system residual across all MPI ranks. + * + * This function computes the RMS residual in an MPI-consistent manner by: + * 1. Computing local sum of squared residuals over domain points + * 2. Using MPI_Allreduce to sum across all ranks + * 3. Using MPI_Allreduce to count total domain points + * 4. Computing sqrt(globalSum / (globalPoints * nVar)) + * + * All ranks will compute the identical global RMS value. + */ +inline su2double ComputeLinSysResRMS(const CSolver* solver, const CGeometry* geometry) { + const unsigned short nVar = solver->GetnVar(); + const unsigned long nPointDomain = geometry->GetnPointDomain(); + + /*--- Compute local sum of squared residuals ---*/ + std::vector sumRes(nVar, 0.0); + su2double localSum = 0.0; + + for (unsigned long iPoint = 0; iPoint < nPointDomain; ++iPoint) { + const su2double* res = solver->LinSysRes.GetBlock(iPoint); + for (unsigned short iVar = 0; iVar < nVar; ++iVar) { + sumRes[iVar] += res[iVar] * res[iVar]; + } + } + + for (unsigned short iVar = 0; iVar < nVar; ++iVar) { + localSum += sumRes[iVar]; + } + + /*--- Global reduction of squared residuals ---*/ + su2double globalSum = 0.0; + SU2_MPI::Allreduce(&localSum, &globalSum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + + /*--- Global reduction of domain point count ---*/ + unsigned long globalNPointDomain = 0; + SU2_MPI::Allreduce(&nPointDomain, &globalNPointDomain, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); + + /*--- Compute global RMS ---*/ + if (globalNPointDomain == 0) return 0.0; + + return std::sqrt(globalSum / (static_cast(globalNPointDomain) * static_cast(nVar))); +} From d326b6881401462cb72aedd76ac042b18a281b5b Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 26 Jan 2026 07:56:57 +0100 Subject: [PATCH 047/229] small modification to coefficients --- Common/src/geometry/CMultiGridGeometry.cpp | 2 +- .../src/integration/CMultiGridIntegration.cpp | 54 ++++++------- .../src/integration/ComputeLinSysResRMS.hpp | 80 ------------------- 3 files changed, 25 insertions(+), 111 deletions(-) delete mode 100644 SU2_CFD/src/integration/ComputeLinSysResRMS.hpp diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 17e2d0bd0fac..16c619890f36 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -716,7 +716,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note: CFL at the coarse levels have a large impact on convergence, this should be rewritten to use adaptive CFL. ---*/ const su2double factor = 1.0; - const su2double Coeff = 2.0; // pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); + const su2double Coeff = 1.5; // pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); const su2double CFL = factor * config->GetCFL(iMesh - 1) / Coeff; config->SetCFL(iMesh, CFL); } diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 51b1f42269a5..5aad886275c5 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -27,7 +27,6 @@ #include "../../include/integration/CMultiGridIntegration.hpp" #include "../../../Common/include/parallelization/omp_structure.hpp" -#include "ComputeLinSysResRMS.hpp" namespace { /*! @@ -334,7 +333,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Get current CFL values ---*/ su2double CFL_fine = config->GetCFL(iMesh); su2double CFL_coarse_current = config->GetCFL(iMesh+1); - su2double current_coeff = CFL_fine / CFL_coarse_current; + su2double current_coeff = CFL_coarse_current / CFL_fine; /*--- Adaptive CFL using Exponential Moving Average (EMA) ---*/ constexpr int AVG_WINDOW = 5; @@ -401,8 +400,8 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, if (current_is_increase != last_was_increase[lvl]) { /*--- Direction changed, increment oscillation counter ---*/ oscillation_count[lvl]++; - if (oscillation_count[lvl] >= 2) { - /*--- Detected 2 consecutive direction changes = oscillation ---*/ + if (oscillation_count[lvl] >= 4) { + /*--- Detected 4 consecutive direction changes = oscillation ---*/ oscillation_detected = true; oscillation_count[lvl] = 0; // Reset counter after detecting } @@ -425,7 +424,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Check if we should compare and adapt CFL ---*/ su2double new_coeff = current_coeff; constexpr su2double MIN_REDUCTION_FACTOR = 0.98; // Require at least 2% reduction - constexpr int UPDATE_INTERVAL = 10; // Update reference every N iterations + constexpr int UPDATE_INTERVAL = 5; // Update reference every N iterations /*--- Initialize prev_avg on first use ---*/ if (prev_avg[lvl] < EPS) { @@ -439,42 +438,42 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Calculate ratio before any updates for debug output ---*/ su2double ratio_for_display = (prev_avg[lvl] > EPS) ? (current_avg[lvl] / prev_avg[lvl]) : 1.0; - /*--- Immediate CFL reduction for oscillation detection ---*/ - if (oscillation_detected) { - /*--- Oscillating residuals detected: reduce CFL aggressively ---*/ - new_coeff = current_coeff * 2.0; - prev_avg[lvl] = current_avg[lvl]; // Update reference - last_update_iter[lvl] = iter; - } + /*--- Asymmetric adaptation for robustness ---*/ - else if (prev_avg[lvl] > EPS) { + if (prev_avg[lvl] > EPS) { su2double 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 * 1.10; - prev_avg[lvl] = current_avg[lvl]; // Update reference immediately + 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 * 0.99; - prev_avg[lvl] = current_avg[lvl]; // Update reference - last_update_iter[lvl] = iter; - } else if (should_update && !sufficient_decrease) { - /*--- Update reference even if not changing 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; } - /*--- Else: wait for next update interval ---*/ } - /*--- Clamp coefficient between 1.0 and 2.0 ---*/ - new_coeff = min(2.0, max(1.0, new_coeff)); + /*--- 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 ---*/ - su2double CFL_coarse_new = max(CFL_fine / 2.0, min(CFL_fine/1.1, CFL_fine / new_coeff)); + su2double CFL_coarse_new = max(0.5 * CFL_fine, min(CFL_fine, CFL_fine * new_coeff)); + #ifdef HAVE_MPI /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ @@ -706,12 +705,7 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet su2double *Solution_Fine, *Residual_Fine; const unsigned short nVar = sol_fine->GetnVar(); - //const su2double factor = config->GetDamp_Correc_Prolong(); - - /*--- Apply level-dependent damping: more aggressive damping on deeper coarse levels ---*/ - const su2double base_damp = config->GetDamp_Correc_Prolong(); - const su2double level_factor = pow(0.75, iMesh); // 0.75^iMesh reduces damping progressively - const su2double factor = base_damp; // * level_factor; + 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++) { diff --git a/SU2_CFD/src/integration/ComputeLinSysResRMS.hpp b/SU2_CFD/src/integration/ComputeLinSysResRMS.hpp deleted file mode 100644 index d16ab319769c..000000000000 --- a/SU2_CFD/src/integration/ComputeLinSysResRMS.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/*! - * \file ComputeLinSysResRMS.hpp - * \brief Helper function to compute global RMS of linear system residual with MPI support. - * \version 8.4.0 "Harrier" - * - * SU2 Project Website: https://su2code.github.io - * - * The SU2 Project is maintained by the SU2 Foundation - * (http://su2foundation.org) - * - * Copyright 2012-2026, SU2 Contributors (cf. AUTHORS.md) - * - * SU2 is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * SU2 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with SU2. If not, see . - */ - -#pragma once - -#include "../../../Common/include/geometry/CGeometry.hpp" -#include "../../include/solvers/CSolver.hpp" -#include "../../../Common/include/CConfig.hpp" -#include -#include - -/*! - * \brief Compute the global RMS of the linear system residual with MPI consistency. - * \param[in] solver - Pointer to the solver containing the residual. - * \param[in] geometry - Pointer to the geometry for domain point count. - * \return Global RMS of the linear system residual across all MPI ranks. - * - * This function computes the RMS residual in an MPI-consistent manner by: - * 1. Computing local sum of squared residuals over domain points - * 2. Using MPI_Allreduce to sum across all ranks - * 3. Using MPI_Allreduce to count total domain points - * 4. Computing sqrt(globalSum / (globalPoints * nVar)) - * - * All ranks will compute the identical global RMS value. - */ -inline su2double ComputeLinSysResRMS(const CSolver* solver, const CGeometry* geometry) { - const unsigned short nVar = solver->GetnVar(); - const unsigned long nPointDomain = geometry->GetnPointDomain(); - - /*--- Compute local sum of squared residuals ---*/ - std::vector sumRes(nVar, 0.0); - su2double localSum = 0.0; - - for (unsigned long iPoint = 0; iPoint < nPointDomain; ++iPoint) { - const su2double* res = solver->LinSysRes.GetBlock(iPoint); - for (unsigned short iVar = 0; iVar < nVar; ++iVar) { - sumRes[iVar] += res[iVar] * res[iVar]; - } - } - - for (unsigned short iVar = 0; iVar < nVar; ++iVar) { - localSum += sumRes[iVar]; - } - - /*--- Global reduction of squared residuals ---*/ - su2double globalSum = 0.0; - SU2_MPI::Allreduce(&localSum, &globalSum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - - /*--- Global reduction of domain point count ---*/ - unsigned long globalNPointDomain = 0; - SU2_MPI::Allreduce(&nPointDomain, &globalNPointDomain, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); - - /*--- Compute global RMS ---*/ - if (globalNPointDomain == 0) return 0.0; - - return std::sqrt(globalSum / (static_cast(globalNPointDomain) * static_cast(nVar))); -} From 64a676b3258f87e2119eca01feaa6916f6ae0374 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 26 Jan 2026 08:16:35 +0100 Subject: [PATCH 048/229] remove unused function --- Common/include/geometry/CMultiGridGeometry.hpp | 6 ------ Common/src/geometry/CMultiGridGeometry.cpp | 2 -- 2 files changed, 8 deletions(-) diff --git a/Common/include/geometry/CMultiGridGeometry.hpp b/Common/include/geometry/CMultiGridGeometry.hpp index 692a85360d4f..84fe5723e15a 100644 --- a/Common/include/geometry/CMultiGridGeometry.hpp +++ b/Common/include/geometry/CMultiGridGeometry.hpp @@ -67,12 +67,6 @@ class CMultiGridGeometry final : public CGeometry { void SetSuitableNeighbors(vector& Suitable_Indirect_Neighbors, unsigned long iPoint, unsigned long Index_CoarseCV, const CGeometry* fine_grid) const; - /*! - * \brief Compute surface straightness for multigrid geometry. - * \param[in] config - Definition of the particular problem. - */ - void ComputeSurfStraightness(CConfig* config); - /*! * \brief Compute local curvature at a boundary vertex on Euler wall. * \param[in] fine_grid - Fine grid geometry. diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 16c619890f36..6c7e202daf38 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -806,8 +806,6 @@ bool CMultiGridGeometry::GeometricalCheck(unsigned long iPoint, const CGeometry* return (Stretching && Volume); } -void CMultiGridGeometry::ComputeSurfStraightness(CConfig* config) { CGeometry::ComputeSurfStraightness(config, true); } - bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vector marker_seed, const CGeometry* fine_grid, const CConfig* config) const { bool agglomerate_CV = false; From 96caa0eaef8f11b871d839143d5d37aefbe0d9b9 Mon Sep 17 00:00:00 2001 From: Nijso Date: Mon, 26 Jan 2026 14:02:53 +0100 Subject: [PATCH 049/229] Potential fix for code scanning alert no. 6152: Commented-out code Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 5aad886275c5..61a1c1abf045 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -489,7 +489,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, solver_coarse->GetNodes()->SetLocalCFL(iPoint, CFL_coarse_new); } END_SU2_OMP_FOR - //} /*--- Output monitoring information periodically ---*/ #ifdef HAVE_MPI From 336aeaedc9d39ae5af97acf30e0858a75fe083a0 Mon Sep 17 00:00:00 2001 From: Nijso Date: Mon, 26 Jan 2026 14:03:30 +0100 Subject: [PATCH 050/229] Potential fix for code scanning alert no. 6153: Commented-out code Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- Common/src/geometry/CMultiGridGeometry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 6c7e202daf38..46f58e809251 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -716,7 +716,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note: CFL at the coarse levels have a large impact on convergence, this should be rewritten to use adaptive CFL. ---*/ const su2double factor = 1.0; - const su2double Coeff = 1.5; // pow(su2double(Global_nPointFine) / Global_nPointCoarse, 1.0 / nDim); + const su2double Coeff = 1.5; const su2double CFL = factor * config->GetCFL(iMesh - 1) / Coeff; config->SetCFL(iMesh, CFL); } From 4ecbde57485f7c300c316475abc126c79c4bce30 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 26 Jan 2026 14:33:27 +0100 Subject: [PATCH 051/229] fix codi constexpr is not a literal --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 5aad886275c5..73a8f2cfdb0e 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -423,8 +423,8 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Check if we should compare and adapt CFL ---*/ su2double new_coeff = current_coeff; - constexpr su2double MIN_REDUCTION_FACTOR = 0.98; // Require at least 2% reduction - constexpr int UPDATE_INTERVAL = 5; // Update reference every N iterations + const su2double 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) { From 9bfcd7170939092385db4415a2385db6027ddf6f Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 26 Jan 2026 15:07:20 +0100 Subject: [PATCH 052/229] fix codi different type error --- Common/src/geometry/CMultiGridGeometry.cpp | 11 ++++++----- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 46f58e809251..46838bceb0da 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -167,7 +167,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note that if the (single) marker is a SEND_RECEIVE, then the node is actually an interior point. In that case it can only be agglomerated with another interior point. ---*/ if (config->GetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE) { - agglomerate_seed = true; + agglomerate_seed = false; } } @@ -176,8 +176,9 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if (counter == 2) { /*--- agglomerate if one of the 2 markers are MPI markers. ---*/ if (nDim == 2) - agglomerate_seed = (config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || - (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE); + if ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || + (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)) + agglomerate_seed = false; /*--- agglomerate if both markers are the same. ---*/ if (nDim == 3) agglomerate_seed = (copy_marker[0] == copy_marker[1]); @@ -845,12 +846,12 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vectorGetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE)) { if (copy_marker[0] == marker_seed[1]) { - agglomerate_CV = true; + agglomerate_CV = false; } } if ((marker_seed.size() == 2) && (config->GetMarker_All_KindBC(marker_seed[1]) == SEND_RECEIVE)) { if (copy_marker[0] == marker_seed[0]) { - agglomerate_CV = true; + agglomerate_CV = false; } } diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 198052cc7988..3d1b3bda8865 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -436,7 +436,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, bool should_update = (iter - last_update_iter[lvl] >= UPDATE_INTERVAL); /*--- Calculate ratio before any updates for debug output ---*/ - su2double ratio_for_display = (prev_avg[lvl] > EPS) ? (current_avg[lvl] / prev_avg[lvl]) : 1.0; + su2double ratio_for_display = (prev_avg[lvl] > EPS) ? (current_avg[lvl] / prev_avg[lvl]) : su2double(1.0); /*--- Asymmetric adaptation for robustness ---*/ From 7e0ccf195047d3073cff8ecfd544b5da8d2d3d87 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Tue, 27 Jan 2026 09:26:16 +0100 Subject: [PATCH 053/229] precommit --- Common/src/geometry/CMultiGridGeometry.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 46838bceb0da..2c4ccb6a3f06 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -177,8 +177,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- agglomerate if one of the 2 markers are MPI markers. ---*/ if (nDim == 2) if ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || - (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)) - agglomerate_seed = false; + (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)) + agglomerate_seed = false; /*--- agglomerate if both markers are the same. ---*/ if (nDim == 3) agglomerate_seed = (copy_marker[0] == copy_marker[1]); From b63a4285ce47007551fb60acadaa126345f8c639 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Tue, 27 Jan 2026 23:29:31 +0100 Subject: [PATCH 054/229] fix symmetry shared node --- Common/src/geometry/CGeometry.cpp | 57 +++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index db26d86930a8..cf3a6d16e566 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -2558,6 +2558,8 @@ void CGeometry::ComputeModifiedSymmetryNormals(const CConfig* config) { /*--- Loop over previous symmetries and if this point shares them, make this normal orthogonal to them. * It's ok if we normalize merged normals against themselves, we get 0 area and this becomes a no-op. ---*/ + std::vector parallelMarkers; // Track markers with nearly-parallel normals + for (size_t j = 0; j < i; ++j) { const auto jMarker = symMarkers[j]; const auto jVertex = nodes->GetVertex(iPoint, jMarker); @@ -2567,13 +2569,48 @@ void CGeometry::ComputeModifiedSymmetryNormals(const CConfig* config) { GetNormal(jMarker, jVertex, jNormal); const su2double proj = GeometryToolbox::DotProduct(int(MAXNDIM), jNormal.data(), iNormal.data()); + const su2double angleDiff = std::abs(1.0 - std::abs(proj)); + + // Check if normals are nearly parallel (within ~2.5 degrees) + // cos(2.5°) ≈ 0.999, so (1 - cos(2.5°)) ≈ 0.001 + constexpr su2double PARALLEL_TOLERANCE = 0.001; // ~2.5 degrees + if (angleDiff < PARALLEL_TOLERANCE) { + // These normals are nearly parallel - average them instead of orthogonalizing + parallelMarkers.push_back(j); + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) iNormal[iDim] += jNormal[iDim]; + continue; + } + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) iNormal[iDim] -= proj * jNormal[iDim]; } + /*--- If we found parallel markers, average and store the result for all involved markers ---*/ + if (!parallelMarkers.empty()) { + // Normalize the averaged normal + const su2double avgArea = GeometryToolbox::Norm(int(MAXNDIM), iNormal.data()); + if (avgArea > 1e-12) { + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) iNormal[iDim] /= avgArea; + + // Store the averaged normal for the current marker + symmetryNormals[iMarker][iVertex] = iNormal; + + // Also update all parallel markers with the same averaged normal + for (const auto j : parallelMarkers) { + const auto jMarker = symMarkers[j]; + const auto jVertex = nodes->GetVertex(iPoint, jMarker); + if (jVertex >= 0) { + symmetryNormals[jMarker][jVertex] = iNormal; + } + } + } + continue; // Skip the normal orthogonalization path below + } + /*--- Normalize. If the norm is close to zero it means the normal is a linear combination of previous * normals, in this case we don't need to store the corrected normal, using the original in the gradient * correction will have no effect since previous corrections will remove components in this direction). ---*/ const su2double area = GeometryToolbox::Norm(int(MAXNDIM), iNormal.data()); + if (area > 1e-12) { for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) iNormal[iDim] /= area; symmetryNormals[iMarker][iVertex] = iNormal; @@ -2591,16 +2628,14 @@ void CGeometry::ComputeSurfStraightness(const CConfig* config, bool print_on_scr string Local_TagBound, Global_TagBound; vector Normal(nDim), UnitNormal(nDim), RefUnitNormal(nDim); - /*--- Assume now that this boundary marker is straight. As soon as one - AreaElement is found that is not aligend with a Reference then it is - certain that the boundary marker is not straight and one can stop - searching. Another possibility is that this process doesn't own + AreaElement is found that is not aligned with a Reference then it + is certain that the boundary marker is not straight and one can + stop searching. Another possibility is that this process doesn't own any nodes of that boundary, in that case we also have to assume the - boundary is straight. - Any boundary type other than SYMMETRY_PLANE or EULER_WALL gets - the value false (or see cases specified in the conditional below) - which could be wrong. ---*/ + boundary is straight. Any boundary type other than SYMMETRY_PLANE or + EULER_WALL gets the value false (or see cases specified in the + conditional below) which could be wrong. ---*/ boundIsStraight.resize(nMarker); fill(boundIsStraight.begin(), boundIsStraight.end(), true); @@ -3902,11 +3937,13 @@ void CGeometry::ColorMGLevels(unsigned short nMGLevels, const CGeometry* const* for (auto step = 0u; step < iMesh; ++step) { auto coarseMesh = geometry[iMesh - 1 - step]; if (step) - for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) + for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) { CoarseGridColor_(iPoint, step) = CoarseGridColor_(coarseMesh->nodes->GetParent_CV(iPoint), step - 1); + } else - for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) + for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) { CoarseGridColor_(iPoint, step) = color[coarseMesh->nodes->GetParent_CV(iPoint)]; + } } } } From e86b74f650bb1ea9fa68e8b276897006e455d938 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Wed, 28 Jan 2026 08:04:17 +0100 Subject: [PATCH 055/229] fix constexpr --- Common/src/geometry/CGeometry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index cf3a6d16e566..4c19d4a40388 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -2573,7 +2573,7 @@ void CGeometry::ComputeModifiedSymmetryNormals(const CConfig* config) { // Check if normals are nearly parallel (within ~2.5 degrees) // cos(2.5°) ≈ 0.999, so (1 - cos(2.5°)) ≈ 0.001 - constexpr su2double PARALLEL_TOLERANCE = 0.001; // ~2.5 degrees + const su2double PARALLEL_TOLERANCE = 0.001; // ~2.5 degrees if (angleDiff < PARALLEL_TOLERANCE) { // These normals are nearly parallel - average them instead of orthogonalizing parallelMarkers.push_back(j); From f30060b9d08278e3fc82b34ae7b7e1905c8070d1 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Wed, 28 Jan 2026 08:22:07 +0100 Subject: [PATCH 056/229] cleanup --- Common/src/geometry/CMultiGridGeometry.cpp | 39 +++++++++++-------- .../src/integration/CMultiGridIntegration.cpp | 15 +++---- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 46838bceb0da..2a8304f6c5fc 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -167,7 +167,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note that if the (single) marker is a SEND_RECEIVE, then the node is actually an interior point. In that case it can only be agglomerated with another interior point. ---*/ if (config->GetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE) { - agglomerate_seed = false; + //cout << "agglomerating a SEND_RECEIVE point at iPoint = " << iPoint << endl; + agglomerate_seed = true; } } @@ -175,11 +176,11 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- In 3D, we agglomerate if the 2 markers are the same. ---*/ if (counter == 2) { /*--- agglomerate if one of the 2 markers are MPI markers. ---*/ - if (nDim == 2) - if ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || - (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)) - agglomerate_seed = false; + if (nDim == 2) { + //agglomerate_seed = ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || + // (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)); + } /*--- agglomerate if both markers are the same. ---*/ if (nDim == 3) agglomerate_seed = (copy_marker[0] == copy_marker[1]); @@ -842,18 +843,19 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vectorGetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE)) { - if (copy_marker[0] == marker_seed[1]) { - agglomerate_CV = false; - } - } - if ((marker_seed.size() == 2) && (config->GetMarker_All_KindBC(marker_seed[1]) == SEND_RECEIVE)) { - if (copy_marker[0] == marker_seed[0]) { - agglomerate_CV = false; - } - } + + // /*--- If seed has 2 markers and one is SEND_RECEIVE, do not agglomerate with physical boundary ---*/ + // if ((marker_seed.size() == 2) && (config->GetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE)) { + // if (copy_marker[0] == marker_seed[1]) { + // agglomerate_CV = false; + // } + // } + // if ((marker_seed.size() == 2) && (config->GetMarker_All_KindBC(marker_seed[1]) == SEND_RECEIVE)) { + // if (copy_marker[0] == marker_seed[0]) { + // agglomerate_CV = false; + // } + // } /*--- Note: If there is only one marker, but the marker is the SEND_RECEIVE, then the point is actually an interior point and we do not agglomerate. ---*/ @@ -862,6 +864,11 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vector= UPDATE_INTERVAL); /*--- Calculate ratio before any updates for debug output ---*/ - su2double ratio_for_display = (prev_avg[lvl] > EPS) ? (current_avg[lvl] / prev_avg[lvl]) : su2double(1.0); + //su2double ratio_for_display = (prev_avg[lvl] > EPS) ? (current_avg[lvl] / prev_avg[lvl]) : su2double(1.0); /*--- Asymmetric adaptation for robustness ---*/ @@ -491,11 +491,12 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, END_SU2_OMP_FOR /*--- Output monitoring information periodically ---*/ -#ifdef HAVE_MPI - /*--- Synchronize all ranks before output to ensure consistent state ---*/ - SU2_MPI::Barrier(SU2_MPI::GetComm()); -#endif - +// +////#ifdef HAVE_MPI +//// /*--- Synchronize all ranks before output to ensure consistent state ---*/ +//// SU2_MPI::Barrier(SU2_MPI::GetComm()); +////#endif +/* if (SU2_MPI::GetRank() == 0 && iter % 1 == 0) { bool cfl_increased = (new_coeff < current_coeff); // Lower coeff = higher CFL bool cfl_decreased = (new_coeff > current_coeff); // Higher coeff = lower CFL @@ -513,7 +514,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, << ", coeff = " << new_coeff << " (was " << current_coeff << ")" << ", CFL = " << CFL_coarse_new << endl; } - +*/ SmoothProlongated_Correction(RunTime_EqSystem, solver_fine, geometry_fine, config->GetMG_CorrecSmooth(iMesh), 1.25, config); SetProlongated_Correction(solver_fine, geometry_fine, config, iMesh); From e1523efc8badfdd34c8add7e127b00a3aa255ca8 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Wed, 28 Jan 2026 13:00:03 +0100 Subject: [PATCH 057/229] fix adjoint local cfl --- SU2_CFD/src/variables/CAdjEulerVariable.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SU2_CFD/src/variables/CAdjEulerVariable.cpp b/SU2_CFD/src/variables/CAdjEulerVariable.cpp index 565c80f8c774..b2ac36a5b8bb 100644 --- a/SU2_CFD/src/variables/CAdjEulerVariable.cpp +++ b/SU2_CFD/src/variables/CAdjEulerVariable.cpp @@ -95,6 +95,9 @@ CAdjEulerVariable::CAdjEulerVariable(su2double psirho, const su2double *phi, su2 if (config->GetTime_Marching() == TIME_MARCHING::HARMONIC_BALANCE) HB_Source.resize(nPoint,nVar) = su2double(0.0); + /*--- Allocate LocalCFL for multigrid support ---*/ + LocalCFL.resize(nPoint) = su2double(0.0); + if (config->GetMultizone_Problem()) Set_BGSSolution_k(); From 3269c081540fa2fd32e50a402980a20b365a2d0a Mon Sep 17 00:00:00 2001 From: bigfooted Date: Wed, 28 Jan 2026 14:34:40 +0100 Subject: [PATCH 058/229] precommit --- Common/src/geometry/CMultiGridGeometry.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 2a8304f6c5fc..2e353501af85 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -167,7 +167,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note that if the (single) marker is a SEND_RECEIVE, then the node is actually an interior point. In that case it can only be agglomerated with another interior point. ---*/ if (config->GetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE) { - //cout << "agglomerating a SEND_RECEIVE point at iPoint = " << iPoint << endl; + // cout << "agglomerating a SEND_RECEIVE point at iPoint = " << iPoint << endl; agglomerate_seed = true; } } @@ -177,9 +177,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if (counter == 2) { /*--- agglomerate if one of the 2 markers are MPI markers. ---*/ if (nDim == 2) { - //agglomerate_seed = ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || - // (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)); - + // agglomerate_seed = ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || + // (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)); } /*--- agglomerate if both markers are the same. ---*/ if (nDim == 3) agglomerate_seed = (copy_marker[0] == copy_marker[1]); @@ -864,9 +863,8 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vector Date: Wed, 28 Jan 2026 17:06:51 +0100 Subject: [PATCH 059/229] Potential fix for code scanning alert no. 6158: Commented-out code Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- Common/src/geometry/CMultiGridGeometry.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 2e353501af85..1bb2f5381a42 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -167,7 +167,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note that if the (single) marker is a SEND_RECEIVE, then the node is actually an interior point. In that case it can only be agglomerated with another interior point. ---*/ if (config->GetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE) { - // cout << "agglomerating a SEND_RECEIVE point at iPoint = " << iPoint << endl; agglomerate_seed = true; } } From b3c88fe8284336063803bc1990d5b99cb041e28c Mon Sep 17 00:00:00 2001 From: Nijso Date: Wed, 28 Jan 2026 17:07:47 +0100 Subject: [PATCH 060/229] Potential fix for code scanning alert no. 6157: Commented-out code Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 4dd2613bf4d6..c7fa57eed4c1 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -436,7 +436,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, bool should_update = (iter - last_update_iter[lvl] >= UPDATE_INTERVAL); /*--- Calculate ratio before any updates for debug output ---*/ - //su2double ratio_for_display = (prev_avg[lvl] > EPS) ? (current_avg[lvl] / prev_avg[lvl]) : su2double(1.0); /*--- Asymmetric adaptation for robustness ---*/ From cf8f7d1f68d3be0ae8a77bcf08e50040cb4a1ca6 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Wed, 28 Jan 2026 21:59:20 +0100 Subject: [PATCH 061/229] fix easy regression tests --- .../naca0012/of_grad_cd_disc.dat.ref | 76 +++++++++--------- .../naca0012/of_grad_directdiff.dat.ref | 6 +- .../wedge/of_grad_combo.dat.ref | 8 +- TestCases/hybrid_regression_AD.py | 6 +- .../multiple_ffd/naca0012/of_grad_cd.dat.ref | 4 +- .../naca0012/of_grad_directdiff.dat.ref | 4 +- TestCases/parallel_regression.py | 78 +++++++++---------- TestCases/serial_regression.py | 72 ++++++++--------- TestCases/serial_regression_AD.py | 8 +- TestCases/tutorials.py | 12 +-- 10 files changed, 137 insertions(+), 137 deletions(-) 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 8b2887947f5d..9a1f6b7d1e71 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 , 292.459 , 0.001 - 1 , -8318.5 , 0.001 - 2 , -16158.4 , 0.001 - 3 , -21277.2 , 0.001 - 4 , -23366.9 , 0.001 - 5 , -22727.6 , 0.001 - 6 , -19872.3 , 0.001 - 7 , -15278.1 , 0.001 - 8 , -9283.99 , 0.001 - 9 , -2179.87 , 0.001 - 10 , 5520.63 , 0.001 - 11 , 12726.0 , 0.001 - 12 , 17538.0 , 0.001 - 13 , 17441.1 , 0.001 - 14 , 10335.6 , 0.001 - 15 , -2686.37 , 0.001 - 16 , -10522.5 , 0.001 - 17 , 24712.2 , 0.001 - 18 , 166438.0 , 0.001 - 19 , -15618.6 , 0.001 - 20 , -14178.7 , 0.001 - 21 , -12765.5 , 0.001 - 22 , -12007.2 , 0.001 - 23 , -13597.5 , 0.001 - 24 , -19002.9 , 0.001 - 25 , -28729.6 , 0.001 - 26 , -41946.6 , 0.001 - 27 , -56289.3 , 0.001 - 28 , -67832.1 , 0.001 - 29 , -71484.0 , 0.001 - 30 , -62334.5 , 0.001 - 31 , -38478.2 , 0.001 - 32 , -4757.34 , 0.001 - 33 , 26448.5 , 0.001 - 34 , 45049.5 , 0.001 - 35 , 60960.9 , 0.001 - 36 , 83515.9 , 0.001 - 37 , 8837.4 , 0.001 + 0 , 17852.4 , 0.001 + 1 , 17762.2 , 0.001 + 2 , 13023.3 , 0.001 + 3 , 7235.23 , 0.001 + 4 , 2025.24 , 0.001 + 5 , -2173.83 , 0.001 + 6 , -5516.67 , 0.001 + 7 , -8317.99 , 0.001 + 8 , -10814.3 , 0.001 + 9 , -13092.8 , 0.001 + 10 , -15126.6 , 0.001 + 11 , -16823.4 , 0.001 + 12 , -17994.0 , 0.001 + 13 , -18196.9 , 0.001 + 14 , -16453.7 , 0.001 + 15 , -10589.4 , 0.001 + 16 , 4413.36 , 0.001 + 17 , 30522.9 , 0.001 + 18 , 5834.86 , 0.001 + 19 , -18131.9 , 0.001 + 20 , -21995.1 , 0.001 + 21 , -20862.7 , 0.001 + 22 , -18622.4 , 0.001 + 23 , -18164.8 , 0.001 + 24 , -20842.9 , 0.001 + 25 , -26432.9 , 0.001 + 26 , -33388.6 , 0.001 + 27 , -39214.0 , 0.001 + 28 , -40910.6 , 0.001 + 29 , -35624.7 , 0.001 + 30 , -21761.1 , 0.001 + 31 , -718.652 , 0.001 + 32 , 21422.9 , 0.001 + 33 , 34942.8 , 0.001 + 34 , 34300.9 , 0.001 + 35 , 28342.4 , 0.001 + 36 , 23237.9 , 0.001 + 37 , -20230.5 , 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 1a899cb06680..64fffa595ba6 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.24008251 , -117.3444057 , 0.2742430499 , -1.56293638 , 0.0 , -1.568547024 , 0.0 , 0.0 , 1.189018284 , 0.0 - 1 , 0.4064005433 , -189.77779 , 0.4586830911 , -2.391641926 , 0.0 , -2.401078899 , 0.0 , 0.0 , 1.030793484 , 0.0 - 2 , 0.5421052294 , -249.5397676 , 0.6095878335 , -3.086770277 , 0.0 , -3.099333798 , 0.0 , 0.0 , 0.6218682473 , 0.0 + 0 , 0.2000855462 , -50.31379686 , 0.2356436894 , -1.627423951 , 0.0 , -1.632177209 , 0.0 , 0.0 , 0.987584412 , 0.0 + 1 , 0.3003955622 , -70.66636166 , 0.348808693 , -2.215465435 , 0.0 , -2.222547435 , 0.0 , 0.0 , 0.9429020878 , 0.0 + 2 , 0.4098512262 , -88.09224197 , 0.4674108675 , -2.633450055 , 0.0 , -2.643019879 , 0.0 , 0.0 , 0.6725005135 , 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 eca2a7ba1835..9e7d23efcaa4 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.00765473 , 0.0001 - 1 , 0.00497838 , 0.0001 - 2 , 0.0024697 , 0.0001 - 3 , 0.00090216 , 0.0001 + 0 , 0.00770575 , 0.0001 + 1 , 0.00508228 , 0.0001 + 2 , 0.00250931 , 0.0001 + 3 , 0.000896287 , 0.0001 diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 21f86015e12d..9e84aec251a8 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -66,7 +66,7 @@ def main(): discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k" discadj_arina2k.cfg_file = "Arina2KRS.cfg" discadj_arina2k.test_iter = 20 - discadj_arina2k.test_vals = [-3.254503, -3.495599, 0.052373, 0.000000] + discadj_arina2k.test_vals = [-3.229402, -3.466984, 0.043984, 0.000000] test_list.append(discadj_arina2k) #################################### @@ -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, -4.091640, -2.655563, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -3.977753, -2.562520, 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.220333, -1.646832, -0.007539, 0.000013] + discadj_pitchingNACA0012.test_vals = [-1.222085, -1.652435, -0.004121, -0.000003] discadj_pitchingNACA0012.unsteady = True discadj_pitchingNACA0012.enabled_with_tsan = False test_list.append(discadj_pitchingNACA0012) diff --git a/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref b/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref index fce3c63c6760..383fee127a91 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.0790825 , 0.001 - 1 , -0.112974 , 0.001 + 0 , 0.0645833 , 0.001 + 1 , -0.118221 , 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 27fc6f627aec..48fe6fd25d99 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.05922508178 , -0.6082054907 , 0.05650610011 , 0.1252552372 , 0.0 , 0.1239927558 , 0.0 , 0.0 , 0.00502894879 , 0.0 - 1 , -0.07750209216 , 8.684127966 , -0.08326907905 , 0.2634518171 , 0.0 , 0.2652056281 , 0.0 , 0.0 , -0.006643227386 , 0.0 + 0 , 0.06218459594 , 0.1261488787 , 0.05968184702 , 0.1153777146 , 0.0 , 0.1140483052 , 0.0 , 0.0 , 0.01868706266 , 0.0 + 1 , -0.1116496871 , 6.293726662 , -0.1174209952 , 0.2632773471 , 0.0 , 0.2657762197 , 0.0 , 0.0 , 0.04765040929 , 0.0 diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index c6e8d055be09..e19aa7a87bc6 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -220,7 +220,7 @@ def main(): channel.cfg_dir = "euler/channel" channel.cfg_file = "inv_channel_RK.cfg" channel.test_iter = 20 - channel.test_vals = [-2.904401, 2.536139, 0.020924, 0.042340] + channel.test_vals = [-2.370377, 3.168384, 0.124246, 0.142878] test_list.append(channel) # NACA0012 @@ -228,7 +228,7 @@ def main(): naca0012.cfg_dir = "euler/naca0012" naca0012.cfg_file = "inv_NACA0012_Roe.cfg" naca0012.test_iter = 20 - naca0012.test_vals = [-4.607257, -4.138750, 0.327682, 0.022685] + naca0012.test_vals = [-5.024272, -4.487585, 0.332525, 0.023058] test_list.append(naca0012) # Supersonic wedge @@ -236,7 +236,7 @@ def main(): wedge.cfg_dir = "euler/wedge" wedge.cfg_file = "inv_wedge_HLLC.cfg" wedge.test_iter = 20 - wedge.test_vals = [-1.387215, 4.281574, -0.245443, 0.043264] + wedge.test_vals = [-1.308216, 4.363572, -0.237802, 0.041962] test_list.append(wedge) # ONERA M6 Wing @@ -244,7 +244,7 @@ def main(): oneram6.cfg_dir = "euler/oneram6" oneram6.cfg_file = "inv_ONERAM6.cfg" oneram6.test_iter = 10 - oneram6.test_vals = [-11.500303, -10.971884, 0.280800, 0.008623] + oneram6.test_vals = [-11.457168, -10.921423, 0.280800, 0.008623] oneram6.timeout = 3200 test_list.append(oneram6) @@ -253,7 +253,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.840915, 1.693979, 0.301144, 0.019489] + fixedCL_naca0012.test_vals = [-3.811341, 1.726020, 0.301248, 0.019495] test_list.append(fixedCL_naca0012) # Polar sweep of the inviscid NACA0012 @@ -262,7 +262,7 @@ def main(): polar_naca0012.cfg_file = "inv_NACA0012.cfg" polar_naca0012.polar = True polar_naca0012.test_iter = 10 - polar_naca0012.test_vals = [-1.096894, 4.372054, 0.002074, 0.031515] + polar_naca0012.test_vals = [-1.113609, 4.361071, 0.000427, 0.023153] 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 @@ -318,7 +318,7 @@ def main(): flatplate_udobj.cfg_dir = "user_defined_functions" flatplate_udobj.cfg_file = "lam_flatplate.cfg" flatplate_udobj.test_iter = 20 - flatplate_udobj.test_vals = [-6.760101, -1.283906, -0.745653, 0.000587, -0.000038, 0.000977, -0.001015, 596.450000, 299.550000, 296.900000, 21.318000, 0.586640, 36.553000, 2.188800] + flatplate_udobj.test_vals = [-7.488320, -2.009145, 0.001084, 0.036247, 2.361500, -2.325300, 0.000000, 0.000000] test_list.append(flatplate_udobj) # Probe performance test (11 probes, ADT path) @@ -335,7 +335,7 @@ def main(): cylinder.cfg_dir = "navierstokes/cylinder" cylinder.cfg_file = "lam_cylinder.cfg" cylinder.test_iter = 25 - cylinder.test_vals = [-8.422012, -2.930518, -0.003394, 1.608420, 0.000000] + cylinder.test_vals = [-8.484215, -2.995693, -0.007163, 1.601414, 0.000000] test_list.append(cylinder) # Laminar cylinder (low Mach correction) @@ -343,7 +343,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.841606, -1.379533, -1.266782, 76.118168, 0.000000] + cylinder_lowmach.test_vals = [-6.490398, -1.028528, -0.149830, -141.498221, 0.000000] test_list.append(cylinder_lowmach) # 2D Poiseuille flow (body force driven with periodic inlet / outlet) @@ -360,7 +360,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.007496, -7.227093, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.011853, -7.672985, -0.000000, 2.089953] poiseuille_profile.test_vals_aarch64 = [-12.007498, -7.226926, -0.000000, 2.089953] test_list.append(poiseuille_profile) @@ -373,7 +373,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.004689, -5.265730, 0.809462, 0.062011, 0.000000] + rae2822_sa.test_vals = [-1.813393, -5.141451, 0.685984, 0.032019, 0.000000] test_list.append(rae2822_sa) # RAE2822 SST @@ -381,7 +381,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 = [-0.510305, 5.386832, 0.813794, 0.062425, 0.000000] + rae2822_sst.test_vals = [-0.509972, 5.229105, 0.601704, 0.013220, 0.000000] test_list.append(rae2822_sst) # RAE2822 SST_SUST @@ -389,7 +389,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.644127, 5.386832, 0.813793, 0.062425] + rae2822_sst_sust.test_vals = [-2.473983, 5.229105, 0.601704, 0.013220] test_list.append(rae2822_sst_sust) # Flat plate @@ -397,7 +397,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.297192, -6.731227, -0.187632, 0.057700] + turb_flatplate.test_vals = [-3.966255, -6.830370, -0.198132, 0.022553] test_list.append(turb_flatplate) # Flat plate (compressible) with species inlet @@ -405,7 +405,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.249462, -0.634904, -1.716285, 1.223210, -3.307930, 9.000000, -6.633666, 5.000000, -6.986787, 10.000000, -6.255670, 0.999903, 0.9999033] + turb_flatplate_species.test_vals = [-3.946196, -1.084969, -1.496278, 1.527583, -3.293946, 9.000000, -6.133018, 5.000000, -6.620066, 10.000000, -5.669045, 0.999913, 0.999913] test_list.append(turb_flatplate_species) # Flat plate SST compressibility correction Wilcox @@ -577,7 +577,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.574959, -5.057159, 0.830274, -0.009283, 0.078035] + turb_naca0012_sst_restart_mg.test_vals = [-6.604004, -5.057159, 0.830274, -0.008167, 0.077889] turb_naca0012_sst_restart_mg.timeout = 3200 turb_naca0012_sst_restart_mg.tol = 0.000001 test_list.append(turb_naca0012_sst_restart_mg) @@ -591,7 +591,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 = [-7.154146, -6.507095, 0.532001, 0.008466] + inc_euler_naca0012.test_vals = [-7.156010, -6.592360, 0.531999, 0.008466] test_list.append(inc_euler_naca0012) # C-D nozzle with pressure inlet and mass flow outlet @@ -599,7 +599,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 = [-6.407323, -5.715668, -0.003225, 0.126214] + inc_nozzle.test_vals = [-4.692695, -4.147623, 0.005125, 0.159938] test_list.append(inc_nozzle) # Laminar wall mounted cylinder, Euler walls, cylinder wall diagonally split @@ -619,7 +619,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.004072, -3.194881, -0.076553, 7.780048] + inc_lam_cylinder.test_vals = [-3.995539, -3.270342, -0.100583, 6.567311] test_list.append(inc_lam_cylinder) # Laminar sphere, Re=1. Last column: Cd=24/Re @@ -627,7 +627,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.342048, -9.328063, 0.121003, 25.782687] + inc_lam_sphere.test_vals = [-8.373846, -9.382816, 0.121003, 25.782686] test_list.append(inc_lam_sphere) # Buoyancy-driven cavity @@ -765,7 +765,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.004689, 0.742307, 0.497308, -5.265730, 0.809462, 0.062011] + turbmod_sa_bsl_rae2822.test_vals = [-1.813393, 0.818366, 0.644951, -5.141451, 0.685984, 0.032019] test_list.append(turbmod_sa_bsl_rae2822) # SA Negative @@ -782,7 +782,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.004688, 0.742305, 0.497309, -5.266066, 0.809466, 0.062026] + turbmod_sa_comp_rae2822.test_vals = [-1.813396, 0.818361, 0.644949, -5.141555, 0.685988, 0.032021] test_list.append(turbmod_sa_comp_rae2822) # SA Edwards @@ -790,7 +790,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.004687, 0.742306, 0.497310, -5.290787, 0.809485, 0.062034] + turbmod_sa_edw_rae2822.test_vals = [-1.813370, 0.818386, 0.644973, -5.177642, 0.685990, 0.032017] test_list.append(turbmod_sa_edw_rae2822) # SA Compressibility and Edwards @@ -798,7 +798,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.004686, 0.742307, 0.497311, -5.290776, 0.809487, 0.062044] + turbmod_sa_comp_edw_rae2822.test_vals = [-1.813375, 0.818380, 0.644969, -5.177681, 0.685994, 0.032020] test_list.append(turbmod_sa_comp_edw_rae2822) # SA QCR @@ -806,7 +806,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.004794, 0.742354, 0.497315, -5.265910, 0.807835, 0.062022] + turbmod_sa_qcr_rae2822.test_vals = [-1.813960, 0.818091, 0.644509, -5.141963, 0.685849, 0.032055] test_list.append(turbmod_sa_qcr_rae2822) ############################ @@ -830,7 +830,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.662585, -14.998832, -0.726250, 0.020280] + contadj_naca0012.test_vals = [-9.586529, -15.036640, -0.726250, 0.020280] contadj_naca0012.test_vals_aarch64 = [-9.662546, -14.998818, -0.726250, 0.020280] test_list.append(contadj_naca0012) @@ -839,7 +839,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.032190, -12.587083, -1.086100, 0.007556] + contadj_oneram6.test_vals = [-11.981564, -12.514942, -1.086100, 0.007556] test_list.append(contadj_oneram6) # Inviscid WEDGE: tests averaged outflow total pressure adjoint @@ -855,7 +855,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 = [0.748407, -4.810872, -0.520110, -0.000291] + contadj_fixed_CL_naca0012.test_vals = [0.837601, -4.799651, -0.371420, -0.000601] test_list.append(contadj_fixed_CL_naca0012) ################################### @@ -867,7 +867,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.651430, -9.113079, 2.056700, -0.000000] + contadj_ns_cylinder.test_vals = [-3.600568, -9.041782, 2.056700, -0.000000] test_list.append(contadj_ns_cylinder) # Adjoint laminar naca0012 subsonic @@ -911,7 +911,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.372407, -10.874841, -0.212470, 0.005448] + contadj_rans_rae2822.test_vals = [-5.385804, -10.889762, -0.212470, 0.005448] test_list.append(contadj_rans_rae2822) ############################# @@ -999,7 +999,7 @@ def main(): cavity.cfg_dir = "moving_wall/cavity" cavity.cfg_file = "lam_cavity.cfg" cavity.test_iter = 25 - cavity.test_vals = [-5.610923, -0.146741, 1.115860, 1.490430] + cavity.test_vals = [-5.348408, 0.117949, -0.454913, -5.607752] test_list.append(cavity) # Spinning cylinder @@ -1007,7 +1007,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.806025, -2.364860, 1.685247, 1.518292] + spinning_cylinder.test_vals = [-7.710894, -2.258032, 1.684241, 1.582301] test_list.append(spinning_cylinder) ###################################### @@ -1028,7 +1028,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.010773, -0.008068] + sine_gust.test_vals = [-1.977318, 3.481877, -0.000142, -0.007861] sine_gust.unsteady = True test_list.append(sine_gust) @@ -1037,7 +1037,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.075023, 0.027483, -0.001643, -0.000126] + aeroelastic.test_vals = [0.069157, 0.027462, -0.001829, 0.000025] aeroelastic.unsteady = True test_list.append(aeroelastic) @@ -1077,7 +1077,7 @@ def main(): edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" edge_VW.test_iter = 50 - edge_VW.test_vals = [-9.057409, -2.833203, -0.000009, 0.000000] + edge_VW.test_vals = [-2.770557, 3.430361, -0.000009, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR @@ -1085,7 +1085,7 @@ def main(): edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" edge_PPR.test_iter = 50 - edge_PPR.test_vals = [-9.781896, -3.630892, -0.000034, 0.000000] + edge_PPR.test_vals = [-10.876684, -4.693540, -0.000034, 0.000000] test_list.append(edge_PPR) # Rarefaction Q1D nozzle, include CoolProp fluid model @@ -1434,7 +1434,7 @@ def main(): pywrapper_naca0012 = TestCase('pywrapper_naca0012') pywrapper_naca0012.cfg_dir = "euler/naca0012" pywrapper_naca0012.cfg_file = "inv_NACA0012_Roe.cfg" - pywrapper_naca0012.test_iter = 100 + pywrapper_naca0012.test_iter = 80 pywrapper_naca0012.test_vals = [-9.249009, -8.546597, 0.335769, 0.023275] pywrapper_naca0012.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") test_list.append(pywrapper_naca0012) @@ -1506,7 +1506,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.614167, 2.264219, -0.001386, 0.172978] + pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.263483, -0.007487, 0.100530] 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) @@ -1526,7 +1526,7 @@ def main(): pywrapper_deformingBump.cfg_dir = "py_wrapper/deforming_bump_in_channel" pywrapper_deformingBump.cfg_file = "config.cfg" pywrapper_deformingBump.test_iter = 1 - pywrapper_deformingBump.test_vals = [0.500000, 0.000000, -2.811520, -1.603562, -2.074259, 2.424289, 7.616891, -0.205655] + pywrapper_deformingBump.test_vals = [0.500000, 0.000000, -2.556309, -1.270839, -2.350590, 2.606851, 8.002480, -0.300272] pywrapper_deformingBump.command = TestCase.Command("mpirun -np 2", "python", "run.py") pywrapper_deformingBump.unsteady = True test_list.append(pywrapper_deformingBump) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index d648bb852c76..76005d82f455 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.691660, 2.781413, -0.009401, 0.011862] + channel.test_vals = [-2.262915, 3.282305, 0.084026, 0.157104] 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.766184, -4.287722, 0.326688, 0.022661] + naca0012.test_vals = [-5.063957, -4.497026, 0.333597, 0.023126] 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 = [-1.379426, 4.288828, -0.245341, 0.043244] + wedge.test_vals = [-1.315151, 4.355264, -0.239167, 0.042188] 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.498143, -10.969216, 0.280800, 0.008623] + oneram6.test_vals = [-11.428953, -10.889491, 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.837516, 1.700577, 0.301169, 0.019490] + fixedCL_naca0012.test_vals = [-3.751143, 1.788901, 0.301332, 0.019499] 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.077848, 4.386916, -0.000333, 0.029678] + polar_naca0012.test_vals = [-1.138311, 4.325266, 0.002828, 0.019184] 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.097199, 0.382306, 0.001326, 0.027904, 2.361500, -2.333600, 0.000000, 0.000000] + flatplate.test_vals = [-5.110155, 0.370560, 0.001251, 0.025767, 2.361500, -2.335800, 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.363897, -2.882485, -0.017777, 1.607978, 0.000000] + cylinder.test_vals = [-8.643645, -3.150468, -0.002769, 1.602063, 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.830989, -1.368842, -0.143868, 73.962350, 0.000000] + cylinder_lowmach.test_vals = [-6.504996, -1.043200, -0.119206, -136.159598, 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.009004, -7.262034, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.012568, -7.696994, -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.020123, -5.269264, 0.807147, 0.060494, 0.000000] + rae2822_sa.test_vals = [-1.806841, -5.123806, 0.685516, 0.029584, 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 = [-0.510321, 5.387978, 0.812737, 0.061080, 0.000000] + rae2822_sst.test_vals = [-0.510040, 5.230415, 0.612550, 0.009921, 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.645780, 5.387978, 0.812737, 0.061080] + rae2822_sst_sust.test_vals = [-2.457541, 5.230415, 0.612550, 0.009921] 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.316128, -6.738720, -0.187461, 0.057469] + turb_flatplate.test_vals = [-4.166987, -6.847620, -0.199569, 0.021651] 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.576830, -5.081440, 0.810957, -0.008626, 0.077900] + turb_naca0012_sst_restart_mg.test_vals = [-6.609250, -5.081439, 0.810958, -0.008778, 0.077715] 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 = [-7.140809, -6.485990, 0.531993, 0.008466] + inc_euler_naca0012.test_vals = [-7.127273, -6.574250, 0.531996, 0.008466] test_list.append(inc_euler_naca0012) # C-D nozzle with pressure inlet and mass flow outlet @@ -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.004277, -3.227956, 0.003852, 7.626578] + inc_lam_cylinder.test_vals = [-4.077094, -3.309090, 0.006632, 5.905895] 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.748339, -15.067997, -0.726250, 0.020280] + contadj_naca0012.test_vals = [-9.584244, -15.043117, -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.034680, -12.592674, -1.086100, 0.007556] + contadj_oneram6.test_vals = [-11.970149, -12.503534, -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 = [0.754936, -4.793625, -0.524550, -0.000227] + contadj_fixedCL_naca0012.test_vals = [0.888169, -4.738760, -0.372890, -0.000614] 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.665842, -9.132048, 2.056700, -0.000000] + contadj_ns_cylinder.test_vals = [-3.600653, -9.043319, 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.369688, -10.872211, -0.212470, 0.005448] + contadj_rans_rae2822.test_vals = [-5.387481, -10.891118, -0.212470, 0.005448] test_list.append(contadj_rans_rae2822) ############################# @@ -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 = [-5.627870, -0.164404, 0.054706, 2.545833] + cavity.test_vals = [-5.437082, 0.028919, -0.157082, -1.62953] 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.894513, -2.469083, 1.703823, 1.670412] + spinning_cylinder.test_vals = [-7.690469, -2.232131, 1.517075, 1.520828] 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.010657, -0.007976] + sine_gust.test_vals = [-1.977319, 3.481878, 0.001450, -0.007578] 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 = [0.074208, 0.027599, -0.001641, -0.000128] + aeroelastic.test_vals = [0.069270, 0.027429, -0.001828, 0.000019] aeroelastic.unsteady = True test_list.append(aeroelastic) @@ -825,7 +825,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.665152, -3.793306, -3.716483, -3.148336] + unst_deforming_naca0012.test_vals = [-3.658963, -3.761517, -3.698530, -3.138323] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) @@ -846,7 +846,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 = [-0.772250, 5.429879, -0.000470, 0.000000] + edge_VW.test_vals = [-0.557647, 5.644222, -0.006682, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR @@ -854,7 +854,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 = [-2.126694, 4.066051, -0.000013, 0.000000] + edge_PPR.test_vals = [-1.689532, 4.503673, 0.000353, 0.000000] test_list.append(edge_PPR) @@ -1092,7 +1092,7 @@ def main(): airfoilRBF.cfg_file = "config.cfg" airfoilRBF.test_iter = 1 - airfoilRBF.test_vals = [1.000000, 0.086004, -3.365759] + airfoilRBF.test_vals = [1.000000, 0.120839, -3.389864] airfoilRBF.tol = 0.0001 airfoilRBF.multizone = True test_list.append(airfoilRBF) @@ -1499,7 +1499,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.122920, 4.611743] + opt_multiobj1surf_py.test_vals = [1.000000, 1.000000, 36.117840, 3.758531] 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 @@ -1512,7 +1512,7 @@ def main(): opt_2surf1obj_py.cfg_dir = "optimization_euler/multiobjective_wedge" opt_2surf1obj_py.cfg_file = "inv_wedge_ROE_2surf_1obj.cfg" opt_2surf1obj_py.test_iter = 1 - opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 2.005099, 0.000383] + opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 2.005079, 0.000312] opt_2surf1obj_py.command = TestCase.Command(exec = "shape_optimization.py", param = "-g CONTINUOUS_ADJOINT -f") opt_2surf1obj_py.timeout = 1600 opt_2surf1obj_py.tol = 0.00001 @@ -1529,7 +1529,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.766184, -4.287722, 0.326688, 0.022661] + pywrapper_naca0012.test_vals = [-5.063957, -4.497026, 0.333597, 0.023126] pywrapper_naca0012.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_naca0012.timeout = 1600 pywrapper_naca0012.tol = 0.00001 @@ -1570,7 +1570,7 @@ def main(): pywrapper_aeroelastic.cfg_dir = "aeroelastic" pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [0.074208, 0.027599, -0.001641, -0.000128] + pywrapper_aeroelastic.test_vals = [0.069270, 0.027429, -0.001828, 0.000019] pywrapper_aeroelastic.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_aeroelastic.timeout = 1600 pywrapper_aeroelastic.tol = 0.00001 @@ -1599,7 +1599,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.614167, 2.264215, 0.000771, 0.172980] + pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.263544, -0.004139, 0.099061] pywrapper_unsteadyCHT.command = TestCase.Command(exec = "python", param = "launch_unsteady_CHT_FlatPlate.py -f") pywrapper_unsteadyCHT.timeout = 1600 pywrapper_unsteadyCHT.tol = 0.00001 @@ -1627,7 +1627,7 @@ def main(): pywrapper_custom_inlet.cfg_dir = "py_wrapper/custom_inlet" pywrapper_custom_inlet.cfg_file = "lam_flatplate.cfg" pywrapper_custom_inlet.test_iter = 20 - pywrapper_custom_inlet.test_vals = [-4.123206, -1.543215, -3.735006, 1.339481, -0.793478, 0.161210, -0.007009, 0.513560, -0.520570] + pywrapper_custom_inlet.test_vals = [-4.122866, -1.542850, -3.664440, 1.339854, -0.793567, 0.159301, -0.007466, 0.514290, -0.521750] pywrapper_custom_inlet.command = TestCase.Command(exec = "python", param = "run.py") pywrapper_custom_inlet.timeout = 1600 pywrapper_custom_inlet.tol = 0.0001 diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 50381c04724f..2d811a77c349 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -76,7 +76,7 @@ def main(): discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k" discadj_arina2k.cfg_file = "Arina2KRS.cfg" discadj_arina2k.test_iter = 20 - discadj_arina2k.test_vals = [-3.254490, -3.495569, 0.052370, 0.000000] + discadj_arina2k.test_vals = [-3.229386, -3.466956, 0.043983, 0.000000] test_list.append(discadj_arina2k) ####################################################### @@ -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, -4.091644, -2.655563, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -3.977751, -2.562520, 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.219518, -1.646199, -0.007607, 0.000013] + discadj_pitchingNACA0012.test_vals = [1.221535, -1.651330, -0.004201, -0.000004] 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.960419, -1.844186, 2970.700000, 0.000004] + unst_deforming_naca0012.test_vals = [-1.965271, -1.847913, 2944.900000, 0.000000] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index af6ab212ed64..283dc8d606d7 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.035200, 0.019230] + tutorial_inv_bump.test_vals = [-1.437425, 4.075857, 0.062355, 0.000402] test_list.append(tutorial_inv_bump) # Inviscid Wedge @@ -183,7 +183,7 @@ def main(): tutorial_inv_wedge.cfg_dir = "../Tutorials/compressible_flow/Inviscid_Wedge" tutorial_inv_wedge.cfg_file = "inv_wedge_HLLC.cfg" tutorial_inv_wedge.test_iter = 0 - tutorial_inv_wedge.test_vals = [-0.481460, 5.253008, -0.281099, 0.049535] + tutorial_inv_wedge.test_vals = [-0.481460, 5.253008, -0.290711, 0.051397] tutorial_inv_wedge.no_restart = True test_list.append(tutorial_inv_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.294332, 0.115223] + tutorial_inv_onera.test_vals = [-5.204928, -4.597762, 0.261695, 0.083515] 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.126007, 69.619462] + tutorial_lam_cylinder.test_vals = [-6.162141, -0.699617, 0.014753, 31.991973] tutorial_lam_cylinder.no_restart = True test_list.append(tutorial_lam_cylinder) @@ -292,7 +292,7 @@ def main(): tutorial_nicfd_nozzle_pinn.cfg_dir = "../Tutorials/compressible_flow/NICFD_nozzle/PhysicsInformed" tutorial_nicfd_nozzle_pinn.cfg_file = "config_NICFD_PINN.cfg" tutorial_nicfd_nozzle_pinn.test_iter = 20 - tutorial_nicfd_nozzle_pinn.test_vals = [-3.181747, -1.638856, -1.277037, 2.445964, -11.759632] + tutorial_nicfd_nozzle_pinn.test_vals = [-2.728179, -0.849337, -1.224542, 2.898995, -11.420290] tutorial_nicfd_nozzle_pinn.no_restart = True test_list.append(tutorial_nicfd_nozzle_pinn) @@ -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.169337, 0.235131] + tutorial_design_inv_naca0012.test_vals = [-3.585391, -2.989014, 0.166575, 0.241919] tutorial_design_inv_naca0012.no_restart = True test_list.append(tutorial_design_inv_naca0012) From f4f327c8dbac3ef3c7226489150a886c3ede0d40 Mon Sep 17 00:00:00 2001 From: Nijso Date: Thu, 29 Jan 2026 09:49:24 +0100 Subject: [PATCH 062/229] fix symmetry shared node (#2719) * fix symmetry shared node --- Common/src/geometry/CGeometry.cpp | 61 +++++++++++++++---- .../disc_adj_fsi/dyn_fsi/grad_dv.opt.ref | 16 ++--- TestCases/parallel_regression.py | 2 +- TestCases/parallel_regression_AD.py | 4 +- TestCases/tutorials.py | 2 +- 5 files changed, 62 insertions(+), 23 deletions(-) diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index db26d86930a8..770c68f6066a 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -2468,6 +2468,9 @@ su2double CGeometry::GetSurfaceArea(const CConfig* config, unsigned short val_ma } void CGeometry::ComputeModifiedSymmetryNormals(const CConfig* config) { + const su2double MIN_AREA = 1e-12; // minimum area to consider a normal valid + const su2double PARALLEL_TOLERANCE = 0.001; // min. angle between symm. planes to consider them non-parallel. + /* Check how many symmetry planes there are and use the first (lowest ID) as the basis to orthogonalize against. * All nodes that are shared by multiple symmetries have to get a corrected normal. */ @@ -2558,6 +2561,8 @@ void CGeometry::ComputeModifiedSymmetryNormals(const CConfig* config) { /*--- Loop over previous symmetries and if this point shares them, make this normal orthogonal to them. * It's ok if we normalize merged normals against themselves, we get 0 area and this becomes a no-op. ---*/ + std::vector parallelMarkers; // Track markers with nearly-parallel normals + for (size_t j = 0; j < i; ++j) { const auto jMarker = symMarkers[j]; const auto jVertex = nodes->GetVertex(iPoint, jMarker); @@ -2567,14 +2572,48 @@ void CGeometry::ComputeModifiedSymmetryNormals(const CConfig* config) { GetNormal(jMarker, jVertex, jNormal); const su2double proj = GeometryToolbox::DotProduct(int(MAXNDIM), jNormal.data(), iNormal.data()); + const su2double angleDiff = std::abs(1.0 - std::abs(proj)); + + // Check if normals are nearly parallel (within ~2.5 degrees) + // cos(2.5°) ≈ 0.999, so (1 - cos(2.5°)) ≈ 0.001 + if (angleDiff < PARALLEL_TOLERANCE) { + // These normals are nearly parallel - average them instead of orthogonalizing + parallelMarkers.push_back(j); + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) iNormal[iDim] += jNormal[iDim]; + continue; + } + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) iNormal[iDim] -= proj * jNormal[iDim]; } + /*--- If we found parallel markers, average and store the result for all involved markers ---*/ + if (!parallelMarkers.empty()) { + // Normalize the averaged normal + const su2double avgArea = GeometryToolbox::Norm(int(MAXNDIM), iNormal.data()); + if (avgArea > MIN_AREA) { + for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) iNormal[iDim] /= avgArea; + + // Store the averaged normal for the current marker + symmetryNormals[iMarker][iVertex] = iNormal; + + // Also update all parallel markers with the same averaged normal + for (const auto j : parallelMarkers) { + const auto jMarker = symMarkers[j]; + const auto jVertex = nodes->GetVertex(iPoint, jMarker); + if (jVertex >= 0) { + symmetryNormals[jMarker][jVertex] = iNormal; + } + } + } + continue; // Skip the normal orthogonalization path below + } + /*--- Normalize. If the norm is close to zero it means the normal is a linear combination of previous * normals, in this case we don't need to store the corrected normal, using the original in the gradient * correction will have no effect since previous corrections will remove components in this direction). ---*/ const su2double area = GeometryToolbox::Norm(int(MAXNDIM), iNormal.data()); - if (area > 1e-12) { + + if (area > MIN_AREA) { for (auto iDim = 0ul; iDim < MAXNDIM; ++iDim) iNormal[iDim] /= area; symmetryNormals[iMarker][iVertex] = iNormal; } @@ -2591,16 +2630,14 @@ void CGeometry::ComputeSurfStraightness(const CConfig* config, bool print_on_scr string Local_TagBound, Global_TagBound; vector Normal(nDim), UnitNormal(nDim), RefUnitNormal(nDim); - /*--- Assume now that this boundary marker is straight. As soon as one - AreaElement is found that is not aligend with a Reference then it is - certain that the boundary marker is not straight and one can stop - searching. Another possibility is that this process doesn't own + AreaElement is found that is not aligned with a Reference then it + is certain that the boundary marker is not straight and one can + stop searching. Another possibility is that this process doesn't own any nodes of that boundary, in that case we also have to assume the - boundary is straight. - Any boundary type other than SYMMETRY_PLANE or EULER_WALL gets - the value false (or see cases specified in the conditional below) - which could be wrong. ---*/ + boundary is straight. Any boundary type other than SYMMETRY_PLANE or + EULER_WALL gets the value false (or see cases specified in the + conditional below) which could be wrong. ---*/ boundIsStraight.resize(nMarker); fill(boundIsStraight.begin(), boundIsStraight.end(), true); @@ -3902,11 +3939,13 @@ void CGeometry::ColorMGLevels(unsigned short nMGLevels, const CGeometry* const* for (auto step = 0u; step < iMesh; ++step) { auto coarseMesh = geometry[iMesh - 1 - step]; if (step) - for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) + for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) { CoarseGridColor_(iPoint, step) = CoarseGridColor_(coarseMesh->nodes->GetParent_CV(iPoint), step - 1); + } else - for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) + for (auto iPoint = 0ul; iPoint < coarseMesh->GetnPoint(); ++iPoint) { CoarseGridColor_(iPoint, step) = color[coarseMesh->nodes->GetParent_CV(iPoint)]; + } } } } diff --git a/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref b/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref index 111b5c1cdc53..696fe46f76c1 100644 --- a/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref +++ b/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref @@ -1,9 +1,9 @@ INDEX GRAD -0 -4.570880175564371e-04 -1 -2.401474104649833e-04 -2 -9.134741714239637e-05 -3 -1.628103592186675e-05 -4 -1.741046982337274e-05 -5 -9.462481735830197e-05 -6 -2.452469745130044e-04 -7 -4.635498256044697e-04 +0 -4.570880019852262e-04 +1 -2.401473990776599e-04 +2 -9.134741024986813e-05 +3 -1.628103377709482e-05 +4 -1.741047267006423e-05 +5 -9.462482550045010e-05 +6 -2.452469883016078e-04 +7 -4.635498453796528e-04 diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index c6e8d055be09..0f78e0d83146 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -1526,7 +1526,7 @@ def main(): pywrapper_deformingBump.cfg_dir = "py_wrapper/deforming_bump_in_channel" pywrapper_deformingBump.cfg_file = "config.cfg" pywrapper_deformingBump.test_iter = 1 - pywrapper_deformingBump.test_vals = [0.500000, 0.000000, -2.811520, -1.603562, -2.074259, 2.424289, 7.616891, -0.205655] + pywrapper_deformingBump.test_vals = [0.500000, 0.000000, -2.556309, -1.270839, -2.350590, 2.606851, 8.002480, -0.300272] pywrapper_deformingBump.command = TestCase.Command("mpirun -np 2", "python", "run.py") pywrapper_deformingBump.unsteady = True test_list.append(pywrapper_deformingBump) diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index d5bc32cee107..b8b043dfe487 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -276,8 +276,8 @@ def main(): discadj_fsi2.cfg_dir = "disc_adj_fsi/Airfoil_2d" discadj_fsi2.cfg_file = "config.cfg" discadj_fsi2.test_iter = 8 - discadj_fsi2.test_vals = [-4.772768, 0.916597, -3.863369, 0.295450, 3.839800] - discadj_fsi2.test_vals_aarch64 = [-4.773008, 0.916312, -3.863369, 0.295450, 3.841200] + discadj_fsi2.test_vals = [-4.772641, 0.917601, -3.863369, 0.295450, 3.839800] + discadj_fsi2.test_vals_aarch64 = [-4.772641, 0.917601, -3.863369, 0.295450, 3.839800] discadj_fsi2.tol = 0.00001 test_list.append(discadj_fsi2) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index af6ab212ed64..b02e28e70639 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -292,7 +292,7 @@ def main(): tutorial_nicfd_nozzle_pinn.cfg_dir = "../Tutorials/compressible_flow/NICFD_nozzle/PhysicsInformed" tutorial_nicfd_nozzle_pinn.cfg_file = "config_NICFD_PINN.cfg" tutorial_nicfd_nozzle_pinn.test_iter = 20 - tutorial_nicfd_nozzle_pinn.test_vals = [-3.181747, -1.638856, -1.277037, 2.445964, -11.759632] + tutorial_nicfd_nozzle_pinn.test_vals = [-2.728179, -0.849337, -1.224542, 2.898995, -11.420290] tutorial_nicfd_nozzle_pinn.no_restart = True test_list.append(tutorial_nicfd_nozzle_pinn) From 2c65015f39825cd9ce6a2f882a8c2067b8b24bd7 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Fri, 30 Jan 2026 19:54:56 +0100 Subject: [PATCH 063/229] modify some OMP stuff --- .../src/integration/CMultiGridIntegration.cpp | 294 +++++++++++------- 1 file changed, 174 insertions(+), 120 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index bc00d65d6580..175fbc7d12ee 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -119,6 +119,17 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, const unsigned short Solver_Position = config[iZone]->GetContainerPosition(RunTime_EqSystem); /*--- Start an OpenMP parallel region covering the entire MG iteration, if the solver supports it. ---*/ + /*--- Set thread affinity for deterministic execution ---*/ + +#ifdef _OPENMP + /*--- Store original thread affinity settings ---*/ + static bool affinity_set = false; + if (!affinity_set) { + // This ensures threads are bound consistently across runs + omp_set_schedule(omp_sched_static, 0); + affinity_set = true; + } +#endif SU2_OMP_PARALLEL_(if(solver_container[iZone][iInst][MESH_0][Solver_Position]->GetHasHybridParallel())) { @@ -224,6 +235,9 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, for (unsigned short iPreSmooth = 0; iPreSmooth < config->GetMG_PreSmooth(iMesh); iPreSmooth++) { + /*--- Synchronize before each smoothing iteration ---*/ + SU2_OMP_BARRIER + /*--- Time and space integration ---*/ for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { @@ -269,6 +283,9 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + /*--- OpenMP memory fence to ensure all threads see consistent state ---*/ + SU2_OMP_BARRIER + } /*--- Compute Forcing Term $P_(k+1) = I^(k+1)_k(P_k+F_k(u_k))-F_(k+1)(I^(k+1)_k u_k)$ and update solution for multigrid ---*/ @@ -315,6 +332,8 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, } /*--- Recursive call to MultiGrid_Cycle (this routine). ---*/ + /*--- Execute multigrid cycles sequentially to ensure deterministic recursion order ---*/ + /*--- This prevents accumulation of floating-point variations across recursive calls ---*/ for (unsigned short imu = 0; imu <= RecursiveParam; imu++) { @@ -322,8 +341,20 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, if (iMesh == config->GetnMGLevels()-2) nextRecurseParam = 0; + /*--- Force sequential execution of recursive calls for determinism ---*/ + SU2_OMP_BARRIER + SU2_OMP_MASTER + { + // Empty - just ensures only one thread enters the recursion at a time + } + END_SU2_OMP_MASTER + SU2_OMP_BARRIER + MultiGrid_Cycle(geometry, solver_container, numerics_container, config_container, iMesh+1, nextRecurseParam, RunTime_EqSystem, iZone, iInst); + + /*--- Synchronize after each multigrid cycle ---*/ + SU2_OMP_BARRIER } /*--- Compute prolongated solution, and smooth the correction $u^(new)_k = u_k + Smooth(I^k_(k+1)(u_(k+1)-I^(k+1)_k u_k))$ ---*/ @@ -336,154 +367,162 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, su2double current_coeff = CFL_coarse_current / CFL_fine; /*--- Adaptive CFL using Exponential Moving Average (EMA) ---*/ + /*--- All operations performed in master thread for determinism ---*/ constexpr int AVG_WINDOW = 5; constexpr int MAX_MG_LEVELS = 10; - /*--- Use thread-local storage instead of static to avoid MPI rank conflicts ---*/ + /*--- Use static storage shared across all threads for deterministic CFL adaptation ---*/ /*--- Each MPI rank maintains its own independent adaptive CFL state ---*/ - thread_local su2double current_avg[MAX_MG_LEVELS] = {}; - thread_local su2double prev_avg[MAX_MG_LEVELS] = {}; - thread_local su2double last_res[MAX_MG_LEVELS] = {}; - thread_local bool last_was_increase[MAX_MG_LEVELS] = {}; - thread_local int oscillation_count[MAX_MG_LEVELS] = {}; - thread_local unsigned long last_check_iter[MAX_MG_LEVELS] = {}; - thread_local bool initialized = false; - - if (!initialized) { - 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; - } - initialized = true; - } + /*--- Note: MPI ranks do not share memory, so static is safe for MPI parallelism ---*/ + static su2double current_avg[MAX_MG_LEVELS] = {}; + static su2double prev_avg[MAX_MG_LEVELS] = {}; + static su2double last_res[MAX_MG_LEVELS] = {}; + static bool last_was_increase[MAX_MG_LEVELS] = {}; + static int oscillation_count[MAX_MG_LEVELS] = {}; + static unsigned long last_check_iter[MAX_MG_LEVELS] = {}; + static unsigned long last_update_iter[MAX_MG_LEVELS] = {}; + + /*--- Only master thread performs CFL adaptation to ensure deterministic behavior ---*/ + /*--- All adaptive CFL state and computation must be done by a single thread ---*/ + su2double CFL_coarse_new = CFL_coarse_current; // Default: keep current value - unsigned short lvl = min(iMesh, (unsigned short)(MAX_MG_LEVELS - 1)); + SU2_OMP_MASTER + { + /*--- 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 ---*/ + static unsigned long last_reset_iter = ULONG_MAX; + 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; + } - /*--- Use global iteration count ---*/ - unsigned long iter; - if (config->GetTime_Domain()) - iter = config->GetTimeIter(); - else - iter = config->GetInnerIter(); + unsigned short lvl = min(iMesh, (unsigned short)(MAX_MG_LEVELS - 1)); + unsigned long iter = current_iter; - /*--- Get sum of all RMS residuals for all variables (local to this rank) ---*/ - su2double rms_res_coarse_local = 0.0; - for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { - rms_res_coarse_local += solver_coarse->GetRes_RMS(iVar); - } + /*--- Get sum of all RMS residuals for all variables (local to this rank) ---*/ + su2double rms_res_coarse_local = 0.0; + for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { + rms_res_coarse_local += solver_coarse->GetRes_RMS(iVar); + } - /*--- MPI synchronization: ensure all ranks use the same global residual value ---*/ - /*--- This is critical for consistent CFL adaptation across all ranks ---*/ - su2double rms_res_coarse = rms_res_coarse_local; + /*--- MPI synchronization: ensure all ranks use the same global residual value ---*/ + /*--- This is critical for consistent CFL adaptation across all ranks ---*/ + su2double rms_res_coarse = rms_res_coarse_local; #ifdef HAVE_MPI - /*--- For coarse grids, residuals are not globally reduced by default ---*/ - /*--- We need to synchronize them for consistent adaptive CFL decisions ---*/ - if (geometry_coarse->GetMGLevel() > 0) { - su2double rms_global_sum = 0.0; - SU2_MPI::Allreduce(&rms_res_coarse_local, &rms_global_sum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - rms_res_coarse = rms_global_sum / static_cast(SU2_MPI::GetSize()); - } + /*--- For coarse grids, residuals are not globally reduced by default ---*/ + /*--- We need to synchronize them for consistent adaptive CFL decisions ---*/ + if (geometry_coarse->GetMGLevel() > 0) { + su2double rms_global_sum = 0.0; + SU2_MPI::Allreduce(&rms_res_coarse_local, &rms_global_sum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + rms_res_coarse = rms_global_sum / static_cast(SU2_MPI::GetSize()); + } #endif - /*--- 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 + /*--- 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; } - } else { - /*--- Same direction, reset counter ---*/ - oscillation_count[lvl] = 0; + last_was_increase[lvl] = current_is_increase; } - last_was_increase[lvl] = current_is_increase; + last_res[lvl] = rms_res_coarse; } - 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 ---*/ - su2double new_coeff = current_coeff; - const su2double 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 ---*/ - thread_local unsigned long last_update_iter[MAX_MG_LEVELS] = {}; - bool should_update = (iter - last_update_iter[lvl] >= UPDATE_INTERVAL); + /*--- 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; + } - /*--- Calculate ratio before any updates for debug output ---*/ + /*--- Check if we should compare and adapt CFL ---*/ + su2double new_coeff = current_coeff; + const su2double 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]; + } - /*--- Asymmetric adaptation for robustness ---*/ - if (prev_avg[lvl] > EPS) { - su2double ratio = current_avg[lvl] / prev_avg[lvl]; - bool sufficient_decrease = (ratio < MIN_REDUCTION_FACTOR); - bool increasing_trend = (ratio >= 1.0); + /*--- 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) { + su2double 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; + } + } - 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 ---*/ + /*--- 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; } - } - - /*--- 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 ---*/ - su2double CFL_coarse_new = max(0.5 * CFL_fine, min(CFL_fine, CFL_fine * new_coeff)); + /*--- 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)); #ifdef HAVE_MPI - /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ - /*--- This prevents rank drift when residual variations are small ---*/ - SU2_MPI::Bcast(&CFL_coarse_new, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); + /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ + SU2_MPI::Bcast(&CFL_coarse_new, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); #endif - /*--- Only one thread should update the shared config object ---*/ - SU2_OMP_MASTER - config->SetCFL(iMesh+1, CFL_coarse_new); + /*--- Update the shared config object ---*/ + config->SetCFL(iMesh+1, CFL_coarse_new); + } END_SU2_OMP_MASTER + /*--- Implicit barrier at end of master region ensures all threads see updated CFL ---*/ /*--- Update LocalCFL at each coarse grid point ---*/ SU2_OMP_FOR_STAT(roundUpDiv(geometry_coarse->GetnPoint(), omp_get_num_threads())) @@ -526,6 +565,9 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, for (unsigned short iPostSmooth = 0; iPostSmooth < config->GetMG_PostSmooth(iMesh); iPostSmooth++) { + /*--- Synchronize before each post-smoothing iteration ---*/ + SU2_OMP_BARRIER + for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); @@ -570,12 +612,16 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS for (auto iVar = 0u; iVar < nVar; iVar++) Solution[iVar] = 0.0; - for (auto iChildren = 0u; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { + /*--- Accumulate children contributions with stable ordering ---*/ + /*--- Process all children in sequential order to ensure deterministic FP summation ---*/ + auto nChildren = geo_coarse->nodes->GetnChildren_CV(Point_Coarse); + 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); + su2double weight = Area_Children / Area_Parent; for (auto iVar = 0u; iVar < nVar; iVar++) - Solution[iVar] -= Solution_Fine[iVar]*Area_Children/Area_Parent; + Solution[iVar] -= Solution_Fine[iVar] * weight; } Solution_Coarse = sol_coarse->GetNodes()->GetSolution(Point_Coarse); @@ -590,6 +636,9 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; + /*--- Ensure all threads complete before MPI communication ---*/ + SU2_OMP_BARRIER + /*--- Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ ProjectEulerWallToTangentPlane(geo_coarse, config, sol_coarse, true); @@ -618,6 +667,9 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS sol_coarse->InitiateComms(geo_coarse, config, MPI_QUANTITIES::SOLUTION_OLD); sol_coarse->CompleteComms(geo_coarse, config, MPI_QUANTITIES::SOLUTION_OLD); + /*--- Ensure MPI completion visible to all threads ---*/ + SU2_OMP_BARRIER + SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { for (auto iChildren = 0u; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { @@ -651,12 +703,14 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ for (auto iSmooth = 0u; iSmooth < val_nSmooth; iSmooth++) { /*--- Loop over all mesh points (sum the residuals of direct neighbors). ---*/ + /*--- Use static scheduling to ensure deterministic iteration order for reproducibility ---*/ SU2_OMP_FOR_STAT(roundUpDiv(geometry->GetnPoint(), omp_get_num_threads())) for (auto iPoint = 0ul; iPoint < geometry->GetnPoint(); ++iPoint) { solver->GetNodes()->SetResidualSumZero(iPoint); + /*--- Sum neighbor contributions in deterministic order ---*/ for (auto iNeigh = 0u; iNeigh < geometry->nodes->GetnPoint(iPoint); ++iNeigh) { auto jPoint = geometry->nodes->GetPoint(iPoint, iNeigh); Residual_j = solver->LinSysRes.GetBlock(jPoint); From 7813e17f3e4d4eee707c154452916af4a9b8d6cc Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 31 Jan 2026 15:56:27 -0800 Subject: [PATCH 064/229] use sensor --- .../include/solvers/CFVMFlowSolverBase.hpp | 18 ++++-- .../include/solvers/CFVMFlowSolverBase.inl | 3 +- SU2_CFD/src/numerics/flow/convection/fvs.cpp | 17 +++++- SU2_CFD/src/output/CFlowCompOutput.cpp | 8 +++ SU2_CFD/src/solvers/CEulerSolver.cpp | 22 ++++---- SU2_CFD/src/solvers/CSolver.cpp | 55 +++++++++++-------- 6 files changed, 80 insertions(+), 43 deletions(-) diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp index b61d3d61f33a..f42ef9a731e3 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp @@ -728,6 +728,7 @@ class CFVMFlowSolverBase : public CSolver { template FORCEINLINE void SetCentered_Dissipation_Sensor_impl(const SensVarFunc& sensVar, CGeometry *geometry, const CConfig *config) { + const bool msw = config->GetKind_Upwind_Flow() == UPWIND::MSW; /*--- We can access memory more efficiently if there are no periodic boundaries. ---*/ @@ -742,8 +743,8 @@ class CFVMFlowSolverBase : public CSolver { const su2double sensVar_i = sensVar(*nodes, iPoint); /*--- Initialize. ---*/ - iPoint_UndLapl[iPoint] = 0.0; - jPoint_UndLapl[iPoint] = 0.0; + iPoint_UndLapl[iPoint] = 0; + jPoint_UndLapl[iPoint] = msw ? 1 : 0; /*--- Loop over the neighbors of point i. ---*/ for (auto jPoint : geometry->nodes->GetPoints(iPoint)) @@ -755,9 +756,16 @@ class CFVMFlowSolverBase : public CSolver { su2double sensVar_j = sensVar(*nodes, jPoint); - /*--- Dissipation sensor, add variable difference and variable sum. ---*/ - iPoint_UndLapl[iPoint] += sensVar_j - sensVar_i; - jPoint_UndLapl[iPoint] += sensVar_j + sensVar_i; + if (msw) { + /*--- More conservative formulation (triggered by large gradient instead of large laplacian). + * From "Development of an Unstructured Navier-Stokes Solver For Hypersonic Nonequilibrium + * Aerothermodynamics". ---*/ + iPoint_UndLapl[iPoint] = fmax(iPoint_UndLapl[iPoint], fabs(sensVar_j - sensVar_i) / fmin(sensVar_j, sensVar_i)); + } else { + /*--- Jameson dissipation sensor, add variable difference and variable sum. ---*/ + iPoint_UndLapl[iPoint] += sensVar_j - sensVar_i; + jPoint_UndLapl[iPoint] += sensVar_j + sensVar_i; + } } if (!isPeriodic) { diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index 8e935770a89d..e60b1702e4b2 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -93,7 +93,8 @@ void CFVMFlowSolverBase::Allocate(const CConfig& config) { /*--- Define some auxiliar vector related with the undivided lapalacian computation ---*/ - if ((config.GetKind_ConvNumScheme_Flow() == SPACE_CENTERED) && (MGLevel == MESH_0)) { + if ((config.GetKind_ConvNumScheme_Flow() == SPACE_CENTERED && MGLevel == MESH_0) || + config.GetKind_Upwind_Flow() == UPWIND::MSW) { iPoint_UndLapl.resize(nPointDomain); jPoint_UndLapl.resize(nPointDomain); } diff --git a/SU2_CFD/src/numerics/flow/convection/fvs.cpp b/SU2_CFD/src/numerics/flow/convection/fvs.cpp index a22e6d4400bc..bfa04b5f3509 100644 --- a/SU2_CFD/src/numerics/flow/convection/fvs.cpp +++ b/SU2_CFD/src/numerics/flow/convection/fvs.cpp @@ -29,7 +29,9 @@ #include "../../../../../Common/include/toolboxes/geometry_toolbox.hpp" CUpwMSW_Flow::CUpwMSW_Flow(unsigned short val_nDim, unsigned short val_nVar, const CConfig* config) : - CNumerics(val_nDim, val_nVar, config), alpha(config->GetMSW_Alpha()), dynamic_grid(config->GetDynamic_Grid()) { + CNumerics(val_nDim, val_nVar, config), + alpha(config->GetMSW_Alpha()), + dynamic_grid(config->GetDynamic_Grid()) { /*--- Allocate arrays ---*/ for (unsigned short iVar = 0; iVar < nVar; iVar++) { @@ -43,6 +45,7 @@ CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { AD::StartPreacc(); AD::SetPreaccIn(V_i, nDim + 4); AD::SetPreaccIn(V_j, nDim + 4); + AD::SetPreaccIn(Sensor_i, Sensor_j); AD::SetPreaccIn(Normal, nDim); if (dynamic_grid) { AD::SetPreaccIn(GridVel_i, nDim); @@ -85,8 +88,16 @@ CNumerics::ResidualType<> CUpwMSW_Flow::ComputeResidual(const CConfig* config) { /*--- Calculate the state weighting function ---*/ - const su2double dp = fabs(P_j - P_i) / fmin(P_j, P_i); - const su2double w = 0.5 * (1 / (pow(alpha * dp, 2) + 1)); + /*--- For completeness, the original formulation for the switch to unmodified Steger-Warming is: + * dp = fabs(P_j - P_i) / fmin(P_j, P_i) + * w = 0.5 * (1 / (pow(alpha * dp, 2) + 1)) + * where alpha is a tuning constant to make the scheme switch sooner (large alpha). + * We're using a version of the switch based on the maximum "dp" over neighbors, from + * "Development of an Unstructured Navier-Stokes Solver For Hypersonic Nonequilibrium + * Aerothermodynamics". The 0.06 constant is to match our default alpha (5) to the threshold + * of 0.3 in the paper. ---*/ + const su2double dp = fmax(Sensor_i, Sensor_j) - alpha * 0.06; + const su2double w = 0.25 * (1 - (dp > 0 ? 1 : -1) * (1 - exp(-100 *fabs(dp)))); const su2double onemw = 1 - w; /*--- Calculate weighted state vector (*) for i & j ---*/ diff --git a/SU2_CFD/src/output/CFlowCompOutput.cpp b/SU2_CFD/src/output/CFlowCompOutput.cpp index 4429cdfd7a05..54a30d1b3a2b 100644 --- a/SU2_CFD/src/output/CFlowCompOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompOutput.cpp @@ -288,6 +288,10 @@ void CFlowCompOutput::SetVolumeOutputFields(CConfig *config){ AddVolumeOutput("LIMITER_ENTHALPY", "Limiter_Enthalpy", "LIMITER", "Limiter value of the enthalpy"); } + if (config->GetKind_Upwind_Flow() == UPWIND::MSW) { + AddVolumeOutput("MSW_SENSOR", "MSW_Sensor", "LIMITER", "Value of sensor used to switch from SW to MSW"); + } + SetVolumeOutputFieldsScalarLimiter(config); SetVolumeOutputFieldsScalarSource(config); @@ -378,6 +382,10 @@ void CFlowCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolv } } + if (config->GetKind_Upwind_Flow() == UPWIND::MSW) { + SetVolumeOutputValue("MSW_SENSOR", iPoint, Node_Flow->GetSensor(iPoint)); + } + if (config->GetKind_RoeLowDiss() != NO_ROELOWDISS){ SetVolumeOutputValue("ROE_DISSIPATION", iPoint, Node_Flow->GetRoe_Dissipation(iPoint)); } diff --git a/SU2_CFD/src/solvers/CEulerSolver.cpp b/SU2_CFD/src/solvers/CEulerSolver.cpp index 090024819f26..c97ab1178665 100644 --- a/SU2_CFD/src/solvers/CEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CEulerSolver.cpp @@ -1643,6 +1643,9 @@ void CEulerSolver::CommonPreprocessing(CGeometry *geometry, CSolver **solver_con if (!center_jst_ke) SetUndivided_Laplacian(geometry, config); } } + if (config->GetKind_Upwind_Flow() == UPWIND::MSW && !Output) { + SetCentered_Dissipation_Sensor(geometry, config); + } /*--- Roe Low Dissipation Sensor ---*/ @@ -1656,7 +1659,7 @@ void CEulerSolver::CommonPreprocessing(CGeometry *geometry, CSolver **solver_con /*--- Initialize the Jacobian matrix and residual, not needed for the reducer strategy * as we set blocks (including diagonal ones) and completely overwrite. ---*/ - if(!ReducerStrategy && !Output) { + if (!ReducerStrategy && !Output) { LinSysRes.SetValZero(); if (implicit) Jacobian.SetValZero(); else {SU2_OMP_BARRIER} // because of "nowait" in LinSysRes @@ -1800,6 +1803,7 @@ void CEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_contain const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); + const bool msw = (config->GetKind_Upwind_Flow() == UPWIND::MSW); const bool roe_turkel = (config->GetKind_Upwind_Flow() == UPWIND::TURKEL); const auto kind_dissipation = config->GetKind_RoeLowDiss(); @@ -1947,17 +1951,15 @@ void CEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_contain /*--- Roe Low Dissipation Scheme ---*/ if (kind_dissipation != NO_ROELOWDISS) { - numerics->SetDissipation(nodes->GetRoe_Dissipation(iPoint), nodes->GetRoe_Dissipation(jPoint)); - - if (kind_dissipation == FD_DUCROS || kind_dissipation == NTS_DUCROS){ - numerics->SetSensor(nodes->GetSensor(iPoint), - nodes->GetSensor(jPoint)); - } - if (kind_dissipation == NTS || kind_dissipation == NTS_DUCROS){ - numerics->SetCoord(Coord_i, Coord_j); - } + } + if (msw || kind_dissipation == FD_DUCROS || kind_dissipation == NTS_DUCROS){ + numerics->SetSensor(nodes->GetSensor(iPoint), + nodes->GetSensor(jPoint)); + } + if (kind_dissipation == NTS || kind_dissipation == NTS_DUCROS){ + numerics->SetCoord(Coord_i, Coord_j); } /*--- Compute the residual ---*/ diff --git a/SU2_CFD/src/solvers/CSolver.cpp b/SU2_CFD/src/solvers/CSolver.cpp index f544b694ba82..0d6fd898b9d3 100644 --- a/SU2_CFD/src/solvers/CSolver.cpp +++ b/SU2_CFD/src/solvers/CSolver.cpp @@ -667,44 +667,46 @@ void CSolver::InitiatePeriodicComms(CGeometry *geometry, break; - case PERIODIC_SENSOR: + case PERIODIC_SENSOR: { + const bool msw = config->GetKind_Upwind_Flow() == UPWIND::MSW; /*--- For the centered schemes, the sensor must be computed consistently using info from the entire control volume on both sides of the periodic face. ---*/ - Sensor_i = 0.0; Sensor_j = 0.0; + Sensor_i = 0; Sensor_j = 0; for (auto jPoint : geometry->nodes->GetPoints(iPoint)) { /*--- Avoid halos and boundary points so that we don't duplicate edges on both sides of the periodic BC. ---*/ - if (!geometry->nodes->GetPeriodicBoundary(jPoint)) { + if (geometry->nodes->GetPeriodicBoundary(jPoint)) continue; - /*--- Use density instead of pressure for incomp. flows. ---*/ + /*--- Use density instead of pressure for incomp. flows. ---*/ - if ((config->GetKind_Regime() == ENUM_REGIME::INCOMPRESSIBLE)) { - Pressure_i = base_nodes->GetDensity(iPoint); - Pressure_j = base_nodes->GetDensity(jPoint); - } else { - Pressure_i = base_nodes->GetPressure(iPoint); - Pressure_j = base_nodes->GetPressure(jPoint); - } + if (config->GetKind_Regime() == ENUM_REGIME::INCOMPRESSIBLE) { + Pressure_i = base_nodes->GetDensity(iPoint); + Pressure_j = base_nodes->GetDensity(jPoint); + } else { + Pressure_i = base_nodes->GetPressure(iPoint); + Pressure_j = base_nodes->GetPressure(jPoint); + } - boundary_i = geometry->nodes->GetPhysicalBoundary(iPoint); - boundary_j = geometry->nodes->GetPhysicalBoundary(jPoint); + boundary_i = geometry->nodes->GetPhysicalBoundary(iPoint); + boundary_j = geometry->nodes->GetPhysicalBoundary(jPoint); - /*--- Both points inside domain, or both on boundary ---*/ - /*--- iPoint inside the domain, jPoint on the boundary ---*/ + /*--- Both points inside domain, or both on boundary ---*/ + /*--- iPoint inside the domain, jPoint on the boundary ---*/ - if (!boundary_i || boundary_j) { - if (geometry->nodes->GetDomain(iPoint)) { - Sensor_i += (Pressure_j - Pressure_i); - Sensor_j += (Pressure_i + Pressure_j); - } + if ((!boundary_i || boundary_j) && geometry->nodes->GetDomain(iPoint)) { + if (msw) { + Sensor_i = fmax(Sensor_i, fabs(Pressure_j - Pressure_i)) / fmin(Pressure_i, Pressure_j); + } else { + Sensor_i += (Pressure_j - Pressure_i); + Sensor_j += (Pressure_i + Pressure_j); } - } + } /*--- Store the sensor increments to buffer. After summing @@ -714,7 +716,7 @@ void CSolver::InitiatePeriodicComms(CGeometry *geometry, buf_offset++; bufDSend[buf_offset] = Sensor_j; - break; + } break; case PERIODIC_SOL_GG: case PERIODIC_SOL_GG_R: @@ -1213,8 +1215,13 @@ void CSolver::CompletePeriodicComms(CGeometry *geometry, /*--- Simple accumulation of the sensors on periodic faces. ---*/ - iPoint_UndLapl[iPoint] += bufDRecv[buf_offset]; buf_offset++; - jPoint_UndLapl[iPoint] += bufDRecv[buf_offset]; + if (config->GetKind_Upwind_Flow() == UPWIND::MSW) { + iPoint_UndLapl[iPoint] = fmax(iPoint_UndLapl[iPoint], bufDRecv[buf_offset++]); + jPoint_UndLapl[iPoint] = 1; + } else { + iPoint_UndLapl[iPoint] += bufDRecv[buf_offset++]; + jPoint_UndLapl[iPoint] += bufDRecv[buf_offset]; + } break; From 0082b3e71d2545f8684cd65472132d6481b5e0ff Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 2 Feb 2026 22:10:31 +0100 Subject: [PATCH 065/229] cleanup some omp --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 175fbc7d12ee..d8a0223b8c8a 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -343,12 +343,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Force sequential execution of recursive calls for determinism ---*/ SU2_OMP_BARRIER - SU2_OMP_MASTER - { - // Empty - just ensures only one thread enters the recursion at a time - } - END_SU2_OMP_MASTER - SU2_OMP_BARRIER MultiGrid_Cycle(geometry, solver_container, numerics_container, config_container, iMesh+1, nextRecurseParam, RunTime_EqSystem, iZone, iInst); From 4491882025de6cb12bf1f4d2cacfde185e739969 Mon Sep 17 00:00:00 2001 From: Nijso Date: Tue, 3 Feb 2026 19:37:56 +0100 Subject: [PATCH 066/229] Update SU2_CFD/src/integration/CMultiGridIntegration.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Johannes Blühdorn <55186095+jblueh@users.noreply.github.com> --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index d8a0223b8c8a..2acca70f8391 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -341,7 +341,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, if (iMesh == config->GetnMGLevels()-2) nextRecurseParam = 0; - /*--- Force sequential execution of recursive calls for determinism ---*/ + /*--- Synchronize prior to recursive calls for determinism ---*/ SU2_OMP_BARRIER MultiGrid_Cycle(geometry, solver_container, numerics_container, config_container, From 15811bfc3741c64d031055ee5ea87b1ec83c09e3 Mon Sep 17 00:00:00 2001 From: Nijso Date: Tue, 3 Feb 2026 19:44:53 +0100 Subject: [PATCH 067/229] Update Common/src/geometry/CMultiGridGeometry.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> --- Common/src/geometry/CMultiGridGeometry.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 1bb2f5381a42..9937e7faef44 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -53,7 +53,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un 3rd) One marker ---> Surface (always agglomerate) 4th) No marker ---> Internal Volume (always agglomerate) ---*/ - // note that for MPI, we introduce interfaces and we can choose to have agglomeration over + // Note that for MPI, we introduce interfaces and we can choose to have agglomeration over // the interface or not. Nishikawa chooses not to agglomerate over interfaces. /*--- Set a marker to indicate indirect agglomeration, for quads and hexs, From 1bf97f7ddbcae0c696f88e2ad4df0c4fb236cc3c Mon Sep 17 00:00:00 2001 From: bigfooted Date: Tue, 3 Feb 2026 19:57:10 +0100 Subject: [PATCH 068/229] cleanup --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index d8a0223b8c8a..bdc4d40d4037 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -391,7 +391,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Reset state at the beginning of a new solve (iter 0 or 1) ---*/ /*--- This ensures deterministic behavior across multiple runs ---*/ - static unsigned long last_reset_iter = ULONG_MAX; + static unsigned long last_reset_iter = std::numeric_limits::max(); if (current_iter <= 1 && last_reset_iter != current_iter) { for (int i = 0; i < MAX_MG_LEVELS; i++) { current_avg[i] = 0.0; @@ -583,8 +583,9 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, } /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ - solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + // nijso: check if this can be removed now. + //solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + //solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); } } @@ -631,7 +632,8 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; /*--- Ensure all threads complete before MPI communication ---*/ - SU2_OMP_BARRIER + //nijso: check if this can be removed now. + //SU2_OMP_BARRIER /*--- Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ ProjectEulerWallToTangentPlane(geo_coarse, config, sol_coarse, true); @@ -662,7 +664,8 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS sol_coarse->CompleteComms(geo_coarse, config, MPI_QUANTITIES::SOLUTION_OLD); /*--- Ensure MPI completion visible to all threads ---*/ - SU2_OMP_BARRIER + // nijso: remove? + //SU2_OMP_BARRIER SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { From 1cad3dfef41681361c51056ca8f1680f9d2d6ba4 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 6 Feb 2026 09:28:41 +0100 Subject: [PATCH 069/229] Fix use of DESTDIR with PREFIX --- SU2_PY/pySU2/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SU2_PY/pySU2/install.sh b/SU2_PY/pySU2/install.sh index 67e684487f8a..5da0e3c6db75 100644 --- a/SU2_PY/pySU2/install.sh +++ b/SU2_PY/pySU2/install.sh @@ -1,2 +1,2 @@ #!/bin/sh -cp "$1/$2" "${MESON_INSTALL_PREFIX}/bin/$2" +cp "$1/$2" "${MESON_INSTALL_DESTDIR_PREFIX}/bin/$2" From 8d62659752a9b077a4b4cad1115898282f43bc95 Mon Sep 17 00:00:00 2001 From: Nijso Date: Sun, 8 Feb 2026 15:12:00 +0100 Subject: [PATCH 070/229] Update Common/src/geometry/CMultiGridGeometry.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> --- Common/src/geometry/CMultiGridGeometry.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 9937e7faef44..46976eeecaf5 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -715,7 +715,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un if (iMesh != MESH_0) { /*--- Note: CFL at the coarse levels have a large impact on convergence, this should be rewritten to use adaptive CFL. ---*/ - const su2double factor = 1.0; const su2double Coeff = 1.5; const su2double CFL = factor * config->GetCFL(iMesh - 1) / Coeff; config->SetCFL(iMesh, CFL); From 659376166d2a71458d9b633a41cc6350b60d4a49 Mon Sep 17 00:00:00 2001 From: Nijso Date: Sun, 8 Feb 2026 15:23:51 +0100 Subject: [PATCH 071/229] Update SU2_CFD/src/integration/CMultiGridIntegration.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 2acca70f8391..4792f12cf7f0 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -39,7 +39,7 @@ namespace { void ProjectEulerWallToTangentPlane(CGeometry* geo_coarse, const CConfig* config, CSolver* sol_coarse, bool use_solution_old) { for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == EULER_WALL) { + if (config->GetMarker_All_KindBC(iMarker) != EULER_WALL) continue; SU2_OMP_FOR_STAT(32) for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { From 5de0c2266c28df0f1e30134d57df2b29600fc8c6 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 8 Feb 2026 15:24:28 +0100 Subject: [PATCH 072/229] cleanup and implement review suggestions --- Common/include/geometry/CMultiGridGeometry.hpp | 2 +- Common/src/geometry/CMultiGridGeometry.cpp | 7 ++----- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 13 ------------- 3 files changed, 3 insertions(+), 19 deletions(-) diff --git a/Common/include/geometry/CMultiGridGeometry.hpp b/Common/include/geometry/CMultiGridGeometry.hpp index 84fe5723e15a..942895279b9d 100644 --- a/Common/include/geometry/CMultiGridGeometry.hpp +++ b/Common/include/geometry/CMultiGridGeometry.hpp @@ -32,7 +32,7 @@ class CMultiGridQueue; /*! * \class CMultiGridGeometry - * \brief Class for defining the multigrid geometry, the main delegated part is the + * \brief Class for defining the multigrid geometry, the main dedicated part is the * agglomeration stage, which is done in the declaration. * \author F. Palacios */ diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 9937e7faef44..b953fe6f65ea 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -623,7 +623,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Solution 1: Skip if this halo point was already agglomerated ---*/ auto existing_parent = fine_grid->nodes->GetParent_CV(iPoint_Fine); - if (existing_parent != ULONG_MAX) { + if (existing_parent != std::numeric_limits::max()) { if (existing_parent != iPoint_Coarse) { /*--- Conflict detected: different parent from different interface ---*/ nConflicts++; @@ -799,11 +799,8 @@ bool CMultiGridGeometry::GeometricalCheck(unsigned long iPoint, const CGeometry* Volume = false; cout << "Volume limit reached!" << endl; } - /*--- Evaluate the stretching of the element ---*/ - bool Stretching = true; - - return (Stretching && Volume); + return (Volume); } bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vector marker_seed, diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 1ad2d6d9b2a9..e762a25cfaac 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -118,19 +118,6 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, const unsigned short Solver_Position = config[iZone]->GetContainerPosition(RunTime_EqSystem); - /*--- Start an OpenMP parallel region covering the entire MG iteration, if the solver supports it. ---*/ - /*--- Set thread affinity for deterministic execution ---*/ - -#ifdef _OPENMP - /*--- Store original thread affinity settings ---*/ - static bool affinity_set = false; - if (!affinity_set) { - // This ensures threads are bound consistently across runs - omp_set_schedule(omp_sched_static, 0); - affinity_set = true; - } -#endif - SU2_OMP_PARALLEL_(if(solver_container[iZone][iInst][MESH_0][Solver_Position]->GetHasHybridParallel())) { From f8861f46965c59aa58b06887f3945eac4ef35482 Mon Sep 17 00:00:00 2001 From: Nijso Date: Sun, 8 Feb 2026 15:41:44 +0100 Subject: [PATCH 073/229] Update SU2_CFD/src/integration/CMultiGridIntegration.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 4792f12cf7f0..f9dc5e0d72e0 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -418,7 +418,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- This is critical for consistent CFL adaptation across all ranks ---*/ su2double rms_res_coarse = rms_res_coarse_local; -#ifdef HAVE_MPI /*--- For coarse grids, residuals are not globally reduced by default ---*/ /*--- We need to synchronize them for consistent adaptive CFL decisions ---*/ if (geometry_coarse->GetMGLevel() > 0) { From 2e42206bb1e8e7252a566b60af42eca3c3989c4f Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 8 Feb 2026 15:48:17 +0100 Subject: [PATCH 074/229] cleanup and implement review suggestions --- Common/src/geometry/CMultiGridGeometry.cpp | 12 ++-- .../src/integration/CMultiGridIntegration.cpp | 60 +++++++++---------- 2 files changed, 34 insertions(+), 38 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 5beec9c9bacd..6e0468cbea96 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -493,7 +493,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un incorrectly interpreted as level N+1 indices. Resetting ensures clean agglomeration. ---*/ for (auto iPoint = fine_grid->GetnPointDomain(); iPoint < fine_grid->GetnPoint(); iPoint++) { - fine_grid->nodes->SetParent_CV(iPoint, ULONG_MAX); + fine_grid->nodes->SetParent_CV(iPoint, std::numeric_limits::max()); } /*--- Dealing with MPI parallelization, the objective is that the received nodes must be agglomerated @@ -554,14 +554,14 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- First pass: Determine which parents will actually be used (have non-skipped children). This prevents creating orphaned halo CVs that have coordinates (0,0,0). ---*/ vector parent_used(Aux_Parent.size(), false); - vector parent_local_index(Aux_Parent.size(), ULONG_MAX); + vector parent_local_index(Aux_Parent.size(), std::numeric_limits::max()); for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { const auto iPoint_Fine = fine_grid->vertex[MarkerR][iVertex]->GetNode(); auto existing_parent = fine_grid->nodes->GetParent_CV(iPoint_Fine); /*--- Skip if already agglomerated (first-wins policy) ---*/ - if (existing_parent != ULONG_MAX) continue; + if (existing_parent != std::numeric_limits::max()) continue; /*--- Find which parent this vertex maps to ---*/ for (auto jVertex = 0ul; jVertex < Aux_Parent.size(); jVertex++) { @@ -583,7 +583,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Now map each received vertex to its local parent ---*/ for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { - Parent_Local[iVertex] = ULONG_MAX; + Parent_Local[iVertex] = std::numeric_limits::max(); for (auto jVertex = 0ul; jVertex < Aux_Parent.size(); jVertex++) { if (Parent_Remote[iVertex] == Aux_Parent[jVertex]) { Parent_Local[iVertex] = parent_local_index[jVertex]; @@ -592,7 +592,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } /*--- Validate that parent mapping was found (only matters if not skipped later) ---*/ - if (Parent_Local[iVertex] == ULONG_MAX) { + if (Parent_Local[iVertex] == std::numeric_limits::max()) { SU2_MPI::Error(string("MPI agglomeration failed to map parent index ") + to_string(Parent_Remote[iVertex]) + string(" for vertex ") + to_string(iVertex), CURRENT_FUNCTION); @@ -716,7 +716,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note: CFL at the coarse levels have a large impact on convergence, this should be rewritten to use adaptive CFL. ---*/ const su2double Coeff = 1.5; - const su2double CFL = factor * config->GetCFL(iMesh - 1) / Coeff; + const su2double CFL = config->GetCFL(iMesh - 1) / Coeff; config->SetCFL(iMesh, CFL); } diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index c99e90ad1aa6..2f22e0eb0106 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -41,44 +41,43 @@ void ProjectEulerWallToTangentPlane(CGeometry* geo_coarse, const CConfig* config for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (config->GetMarker_All_KindBC(iMarker) != EULER_WALL) continue; - SU2_OMP_FOR_STAT(32) - for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); + SU2_OMP_FOR_STAT(32) + for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { + const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; + if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - /*--- Get coarse grid normal ---*/ - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); + /*--- Get coarse grid normal ---*/ + su2double Normal[3] = {0.0}; + geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geo_coarse->GetnDim(); + su2double Area = GeometryToolbox::Norm(nDim, Normal); - if (Area < EPS) continue; + if (Area < EPS) continue; - /*--- Normalize normal vector ---*/ - su2double UnitNormal[3] = {0.0}; - for (auto iDim = 0u; iDim < nDim; iDim++) { - UnitNormal[iDim] = Normal[iDim] / Area; - } + /*--- Normalize normal vector ---*/ + su2double UnitNormal[3] = {0.0}; + for (auto iDim = 0u; iDim < nDim; iDim++) { + UnitNormal[iDim] = Normal[iDim] / Area; + } - /*--- Get current solution or correction ---*/ - su2double* solution_coarse = use_solution_old ? - sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse) : - sol_coarse->GetNodes()->GetSolution(Point_Coarse); + /*--- Get current solution or correction ---*/ + su2double* solution_coarse = use_solution_old ? + sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse) : + sol_coarse->GetNodes()->GetSolution(Point_Coarse); - /*--- Compute normal component of momentum (v·n or correction·n) ---*/ - su2double momentum_n = 0.0; - for (auto iDim = 0u; iDim < nDim; iDim++) { - momentum_n += solution_coarse[iDim + 1] * UnitNormal[iDim]; - } + /*--- Compute normal component of momentum (v·n or correction·n) ---*/ + su2double momentum_n = 0.0; + for (auto iDim = 0u; iDim < nDim; iDim++) { + momentum_n += solution_coarse[iDim + 1] * UnitNormal[iDim]; + } - /*--- Project to tangent plane: solution_coarse -= (solution_coarse·n)n ---*/ - for (auto iDim = 0u; iDim < nDim; iDim++) { - solution_coarse[iDim + 1] -= momentum_n * UnitNormal[iDim]; - } + /*--- Project to tangent plane: solution_coarse -= (solution_coarse·n)n ---*/ + for (auto iDim = 0u; iDim < nDim; iDim++) { + solution_coarse[iDim + 1] -= momentum_n * UnitNormal[iDim]; } - END_SU2_OMP_FOR } + END_SU2_OMP_FOR } } } // anonymous namespace @@ -270,9 +269,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - /*--- OpenMP memory fence to ensure all threads see consistent state ---*/ - SU2_OMP_BARRIER - } /*--- Compute Forcing Term $P_(k+1) = I^(k+1)_k(P_k+F_k(u_k))-F_(k+1)(I^(k+1)_k u_k)$ and update solution for multigrid ---*/ From 729796cf953d4eaa93629d191de4f1c7662c761c Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 8 Feb 2026 17:14:21 +0100 Subject: [PATCH 075/229] cleanup and implement review suggestions --- .../integration/CMultiGridIntegration.hpp | 24 ++ .../src/integration/CMultiGridIntegration.cpp | 309 +++++++++--------- 2 files changed, 176 insertions(+), 157 deletions(-) diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index 39e99f27bd57..c720235da622 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -181,4 +181,28 @@ class CMultiGridIntegration final : public CIntegration { void Adjoint_Setup(CGeometry ****geometry, CSolver *****solver_container, CConfig **config, 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. + * \param[in] CFL_coarse_current - Current coarse grid CFL value. + * \return New CFL value for the coarse grid. + */ + su2double computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, + unsigned short iMesh, su2double CFL_fine, su2double CFL_coarse_current); + + /*--- CFL adaptation state variables ---*/ + static constexpr int MAX_MG_LEVELS = 10; + su2double current_avg[MAX_MG_LEVELS] = {}; + su2double prev_avg[MAX_MG_LEVELS] = {}; + su2double 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(); + }; diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 73312368bcc6..4dade2b0ca0e 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -82,6 +82,156 @@ void ProjectEulerWallToTangentPlane(CGeometry* geo_coarse, const CConfig* config } } // anonymous namespace +su2double CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, + unsigned short iMesh, su2double CFL_fine, su2double CFL_coarse_current) { + su2double current_coeff = CFL_coarse_current / CFL_fine; + + /*--- Adaptive CFL using Exponential Moving Average (EMA) ---*/ + /*--- All operations performed in master thread for determinism ---*/ + constexpr int AVG_WINDOW = 5; + + /*--- Only master thread performs CFL adaptation to ensure deterministic behavior ---*/ + /*--- All adaptive CFL state and computation must be done by a single thread ---*/ + su2double CFL_coarse_new = CFL_coarse_current; // Default: keep current value + + SU2_OMP_MASTER + { + /*--- 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; + + /*--- Get sum of all RMS residuals for all variables (local to this rank) ---*/ + su2double rms_res_coarse_local = 0.0; + for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { + rms_res_coarse_local += solver_coarse->GetRes_RMS(iVar); + } + + /*--- MPI synchronization: ensure all ranks use the same global residual value ---*/ + /*--- This is critical for consistent CFL adaptation across all ranks ---*/ + su2double rms_res_coarse = rms_res_coarse_local; + + /*--- For coarse grids, residuals are not globally reduced by default ---*/ + /*--- We need to synchronize them for consistent adaptive CFL decisions ---*/ + if (geometry_coarse->GetMGLevel() > 0) { + su2double rms_global_sum = 0.0; + SU2_MPI::Allreduce(&rms_res_coarse_local, &rms_global_sum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + rms_res_coarse = rms_global_sum / static_cast(SU2_MPI::GetSize()); + } + + /*--- 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 ---*/ + su2double new_coeff = current_coeff; + const su2double 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) { + su2double 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)); + +#ifdef HAVE_MPI + /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ + SU2_MPI::Bcast(&CFL_coarse_new, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); +#endif + + /*--- Update the shared config object ---*/ + config->SetCFL(iMesh+1, CFL_coarse_new); + } + END_SU2_OMP_MASTER + /*--- Implicit barrier at end of master region ensures all threads see updated CFL ---*/ + + return CFL_coarse_new; +} + CMultiGridIntegration::CMultiGridIntegration() : CIntegration() { } void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, @@ -341,164 +491,9 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Get current CFL values ---*/ su2double CFL_fine = config->GetCFL(iMesh); su2double CFL_coarse_current = config->GetCFL(iMesh+1); - su2double current_coeff = CFL_coarse_current / CFL_fine; - - /*--- Adaptive CFL using Exponential Moving Average (EMA) ---*/ - /*--- All operations performed in master thread for determinism ---*/ - constexpr int AVG_WINDOW = 5; - constexpr int MAX_MG_LEVELS = 10; - - /*--- Use static storage shared across all threads for deterministic CFL adaptation ---*/ - /*--- Each MPI rank maintains its own independent adaptive CFL state ---*/ - /*--- Note: MPI ranks do not share memory, so static is safe for MPI parallelism ---*/ - static su2double current_avg[MAX_MG_LEVELS] = {}; - static su2double prev_avg[MAX_MG_LEVELS] = {}; - static su2double last_res[MAX_MG_LEVELS] = {}; - static bool last_was_increase[MAX_MG_LEVELS] = {}; - static int oscillation_count[MAX_MG_LEVELS] = {}; - static unsigned long last_check_iter[MAX_MG_LEVELS] = {}; - static unsigned long last_update_iter[MAX_MG_LEVELS] = {}; - - /*--- Only master thread performs CFL adaptation to ensure deterministic behavior ---*/ - /*--- All adaptive CFL state and computation must be done by a single thread ---*/ - su2double CFL_coarse_new = CFL_coarse_current; // Default: keep current value - - SU2_OMP_MASTER - { - /*--- 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 ---*/ - static unsigned long last_reset_iter = std::numeric_limits::max(); - 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; - - /*--- Get sum of all RMS residuals for all variables (local to this rank) ---*/ - su2double rms_res_coarse_local = 0.0; - for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { - rms_res_coarse_local += solver_coarse->GetRes_RMS(iVar); - } - - /*--- MPI synchronization: ensure all ranks use the same global residual value ---*/ - /*--- This is critical for consistent CFL adaptation across all ranks ---*/ - su2double rms_res_coarse = rms_res_coarse_local; - - /*--- For coarse grids, residuals are not globally reduced by default ---*/ - /*--- We need to synchronize them for consistent adaptive CFL decisions ---*/ - if (geometry_coarse->GetMGLevel() > 0) { - su2double rms_global_sum = 0.0; - SU2_MPI::Allreduce(&rms_res_coarse_local, &rms_global_sum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - rms_res_coarse = rms_global_sum / static_cast(SU2_MPI::GetSize()); - } -#endif - - /*--- 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 ---*/ - su2double new_coeff = current_coeff; - const su2double 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) { - su2double 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)); - -#ifdef HAVE_MPI - /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ - SU2_MPI::Bcast(&CFL_coarse_new, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); -#endif - - /*--- Update the shared config object ---*/ - config->SetCFL(iMesh+1, CFL_coarse_new); - } - END_SU2_OMP_MASTER - /*--- Implicit barrier at end of master region ensures all threads see updated CFL ---*/ + /*--- Compute adaptive CFL for coarse grid ---*/ + su2double CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine, CFL_coarse_current); /*--- Update LocalCFL at each coarse grid point ---*/ SU2_OMP_FOR_STAT(roundUpDiv(geometry_coarse->GetnPoint(), omp_get_num_threads())) From 128e2e97b93344db4ca40407f0eea35952fc25d1 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 8 Feb 2026 10:04:36 -0800 Subject: [PATCH 076/229] vectorization --- .../linear_algebra/vector_expressions.hpp | 1 + .../parallelization/special_vectorization.hpp | 2 + Common/src/CConfig.cpp | 2 +- .../include/numerics_simd/CNumericsSIMD.cpp | 5 +- .../flow/convection/{roe.hpp => upwind.hpp} | 262 +++++++++++++----- SU2_CFD/src/solvers/CEulerSolver.cpp | 8 +- SU2_CFD/src/variables/CEulerVariable.cpp | 4 +- 7 files changed, 209 insertions(+), 75 deletions(-) rename SU2_CFD/include/numerics_simd/flow/convection/{roe.hpp => upwind.hpp} (63%) diff --git a/Common/include/linear_algebra/vector_expressions.hpp b/Common/include/linear_algebra/vector_expressions.hpp index 75ac69bf7b38..aa240d433dea 100644 --- a/Common/include/linear_algebra/vector_expressions.hpp +++ b/Common/include/linear_algebra/vector_expressions.hpp @@ -138,6 +138,7 @@ namespace math = ::std; #define sign_impl(x) Scalar(1 - 2 * (x < 0)) MAKE_UNARY_FUN(operator-, minus_, -) MAKE_UNARY_FUN(abs, abs_, math::abs) +MAKE_UNARY_FUN(exp, exp_, math::exp) MAKE_UNARY_FUN(sqrt, sqrt_, math::sqrt) MAKE_UNARY_FUN(sign, sign_, sign_impl) #undef sign_impl diff --git a/Common/include/parallelization/special_vectorization.hpp b/Common/include/parallelization/special_vectorization.hpp index f44c5a0cdcbe..b4435b6c9f42 100644 --- a/Common/include/parallelization/special_vectorization.hpp +++ b/Common/include/parallelization/special_vectorization.hpp @@ -153,6 +153,8 @@ MAKE_BINARY_FUN(fmin, min_p) return res; \ } +MAKE_UNARY_FUN(exp, ::exp) + #undef MAKE_UNARY_FUN /*--- Functions of two arguments, with arrays and scalars. ---*/ diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 8a95237ac3fb..0b4c5706e95d 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -1994,7 +1994,7 @@ void CConfig::SetConfig_Options() { * \n DESCRIPTION: Numerical method for spatial gradients used only for upwind reconstruction \n OPTIONS: See \link Gradient_Map \endlink. \n DEFAULT: NO_GRADIENT. \ingroup Config*/ addEnumOption("NUM_METHOD_GRAD_RECON", Kind_Gradient_Method_Recon, Gradient_Map, NO_GRADIENT); /*!\brief VENKAT_LIMITER_COEFF - * \n DESCRIPTION: Coefficient for the limiter. DEFAULT value 0.5. Larger values decrease the extent of limiting, values approaching zero cause lower-order approximation to the solution. \ingroup Config */ + * \n DESCRIPTION: Coefficient for the limiter. DEFAULT value 0.05. Larger values decrease the extent of limiting, values approaching zero cause lower-order approximation to the solution. \ingroup Config */ addDoubleOption("VENKAT_LIMITER_COEFF", Venkat_LimiterCoeff, 0.05); /*!\brief ADJ_SHARP_LIMITER_COEFF * \n DESCRIPTION: Coefficient for detecting the limit of the sharp edges. DEFAULT value 3.0. Use with sharp edges limiter. \ingroup Config*/ diff --git a/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp b/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp index 09e71002f8ae..5da61a28279c 100644 --- a/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp +++ b/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp @@ -28,7 +28,7 @@ */ #include "CNumericsSIMD.hpp" -#include "flow/convection/roe.hpp" +#include "flow/convection/upwind.hpp" #include "flow/convection/centered.hpp" #include "flow/diffusion/viscous_fluxes.hpp" @@ -44,6 +44,9 @@ CNumericsSIMD* createUpwindIdealNumerics(const CConfig& config, int iMesh, const case UPWIND::ROE: obj = new CRoeScheme(config, iMesh, turbVars); break; + case UPWIND::MSW: + obj = new CMSWScheme(config, iMesh, turbVars); + break; default: break; } diff --git a/SU2_CFD/include/numerics_simd/flow/convection/roe.hpp b/SU2_CFD/include/numerics_simd/flow/convection/upwind.hpp similarity index 63% rename from SU2_CFD/include/numerics_simd/flow/convection/roe.hpp rename to SU2_CFD/include/numerics_simd/flow/convection/upwind.hpp index 8b2bc64ea1fa..da63d5e8b87e 100644 --- a/SU2_CFD/include/numerics_simd/flow/convection/roe.hpp +++ b/SU2_CFD/include/numerics_simd/flow/convection/upwind.hpp @@ -1,5 +1,5 @@ /*! - * \file roe.hpp + * \file upwind.hpp * \brief Roe-family of convective schemes. * \author P. Gomes, A. Bueno, F. Palacios * \version 8.4.0 "Harrier" @@ -35,29 +35,27 @@ #include "../../../../../Common/include/geometry/CGeometry.hpp" /*! - * \class CRoeBase + * \class CUpwindBase * \ingroup ConvDiscr - * \brief Base class for Roe schemes, derived classes implement - * the dissipation term in a const "finalizeFlux" method. + * \brief Base class for upwind schemes, derived classes implement + * details of the convective flux in a const "finalizeFlux" method. * A base class implementing "viscousTerms" is accepted as template parameter. * Similarly to derived, that method should update the flux and Jacobians, but - * whereas "finalizeFlux" is passed data prepared by CRoeBase, "viscousTerms" + * whereas "finalizeFlux" is passed data prepared by CUpwindBase, "viscousTerms" * takes the same input arguments as "ComputeFlux", i.e. it can fetch more * data from CVariable. Derived is meant to implement small details, * Base is meant to do heavy lifting. */ template -class CRoeBase : public Base { +class CUpwindBase : public Base { protected: using Base::nDim; static constexpr size_t nVar = CCompressibleConservatives::nVar; static constexpr size_t nPrimVarGrad = nDim+4; static constexpr size_t nPrimVar = Max(Base::nPrimVar, nPrimVarGrad); - const su2double kappa; const su2double gamma; const su2double gasConst; - const su2double entropyFix; const bool finestGrid; const bool dynamicGrid; const bool muscl; @@ -68,11 +66,9 @@ class CRoeBase : public Base { * \brief Constructor, store some constants and forward args to base. */ template - CRoeBase(const CConfig& config, unsigned iMesh, Ts&... args) : Base(config, iMesh, args...), - kappa(config.GetRoe_Kappa()), + CUpwindBase(const CConfig& config, unsigned iMesh, Ts&... args) : Base(config, iMesh, args...), gamma(config.GetGamma()), gasConst(config.GetGas_ConstantND()), - entropyFix(config.GetEntropyFix_Coeff()), finestGrid(iMesh == MESH_0), dynamicGrid(config.GetDynamic_Grid()), muscl(finestGrid && config.GetMUSCL_Flow()), @@ -131,14 +127,84 @@ class CRoeBase : public Base { U.i = compressibleConservatives(V.i); U.j = compressibleConservatives(V.j); - /*--- Roe averaged variables. ---*/ + /*--- Finalize in derived class (static polymorphism). ---*/ - auto roeAvg = roeAveragedVariables(gamma, V, unitNormal); + const auto derived = static_cast(this); + VectorDbl flux; + MatrixDbl jac_i, jac_j; + derived->finalizeFlux(flux, jac_i, jac_j, implicit, area, unitNormal, + normal, V, U, iPoint, jPoint, solution, geometry); - /*--- P tensor. ---*/ + /*--- Add the contributions from the base class (static decorator). ---*/ - auto pMat = pMatrix(gamma, roeAvg.density, roeAvg.velocity, - roeAvg.projVel, roeAvg.speedSound, unitNormal); + Base::viscousTerms(iEdge, iPoint, jPoint, V1st, solution_, vector_ij, geometry, + config, area, unitNormal, implicit, flux, jac_i, jac_j); + + /*--- Stop preaccumulation. ---*/ + + stopPreacc(flux); + + /*--- Update the vector and system matrix. ---*/ + + updateLinearSystem(iEdge, iPoint, jPoint, implicit, updateType, + updateMask, flux, jac_i, jac_j, vector, matrix); + } +}; + +/*! + * \class CRoeScheme + * \ingroup ConvDiscr + * \brief Classical Roe scheme. + */ +template +class CRoeScheme : public CUpwindBase, Decorator> { +private: + using Base = CUpwindBase, Decorator>; + using Base::nDim; + using Base::nVar; + using Base::nPrimVarGrad; + using Base::nPrimVar; + + const su2double kappa; + const su2double entropyFix; + const ENUM_ROELOWDISS typeDissip; + using Base::gamma; + using Base::gasConst; + using Base::dynamicGrid; + +public: + /*! + * \brief Constructor, store some constants and forward to base. + */ + template + CRoeScheme(const CConfig& config, Ts&... args) : Base(config, args...), + kappa(config.GetRoe_Kappa()), + entropyFix(config.GetEntropyFix_Coeff()), + typeDissip(static_cast(config.GetKind_RoeLowDiss())) { + } + + /*! + * \brief Updates flux and Jacobians with standard Roe dissipation. + * \note "Ts" is here just in case other schemes in the family need extra args. + */ + template + FORCEINLINE void finalizeFlux(VectorDbl& flux, + MatrixDbl& jac_i, + MatrixDbl& jac_j, + bool implicit, + Double area, + const VectorDbl& unitNormal, + const VectorDbl& normal, + const CPair& V, + const CPair& U, + Int iPoint, + Int jPoint, + const CEulerVariable& solution, + const CGeometry& geometry, + Ts&...) const { + /*--- Roe averaged variables. ---*/ + + auto roeAvg = roeAveragedVariables(gamma, V, unitNormal); /*--- Grid motion. ---*/ @@ -172,12 +238,9 @@ class CRoeBase : public Base { auto flux_i = inviscidProjFlux(V.i, U.i, normal); auto flux_j = inviscidProjFlux(V.j, U.j, normal); - VectorDbl flux; for (size_t iVar = 0; iVar < nVar; ++iVar) { flux(iVar) = 0.5 * (flux_i(iVar) + flux_j(iVar)); } - - MatrixDbl jac_i, jac_j; if (implicit) { jac_i = inviscidProjJac(gamma, V.i.velocity(), U.i.energy(), normal, kappa); jac_j = inviscidProjJac(gamma, V.j.velocity(), U.j.energy(), normal, kappa); @@ -197,56 +260,81 @@ class CRoeBase : public Base { } } - /*--- Finalize in derived class (static polymorphism). ---*/ + /*--- P tensor. ---*/ - const auto derived = static_cast(this); + auto pMat = pMatrix(gamma, roeAvg.density, roeAvg.velocity, + roeAvg.projVel, roeAvg.speedSound, unitNormal); + + /*--- Inverse P tensor. ---*/ - derived->finalizeFlux(flux, jac_i, jac_j, implicit, area, unitNormal, V, - U, roeAvg, lambda, pMat, iPoint, jPoint, solution); + auto pMatInv = pMatrixInv(gamma, roeAvg.density, roeAvg.velocity, + roeAvg.projVel, roeAvg.speedSound, unitNormal); - /*--- Add the contributions from the base class (static decorator). ---*/ + /*--- Diference between conservative variables at jPoint and iPoint. ---*/ - Base::viscousTerms(iEdge, iPoint, jPoint, V1st, solution_, vector_ij, geometry, - config, area, unitNormal, implicit, flux, jac_i, jac_j); + VectorDbl deltaU; + for (size_t iVar = 0; iVar < nVar; ++iVar) { + deltaU(iVar) = U.j.all(iVar) - U.i.all(iVar); + } - /*--- Stop preaccumulation. ---*/ + /*--- Dissipation terms. ---*/ - stopPreacc(flux); + Double dissipation = roeDissipation(iPoint, jPoint, typeDissip, solution); - /*--- Update the vector and system matrix. ---*/ + for (size_t iVar = 0; iVar < nVar; ++iVar) { + for (size_t jVar = 0; jVar < nVar; ++jVar) { + /*--- Compute |projModJacTensor| = P x |Lambda| x P^-1. ---*/ - updateLinearSystem(iEdge, iPoint, jPoint, implicit, updateType, - updateMask, flux, jac_i, jac_j, vector, matrix); + Double projModJacTensor = 0.0; + for (size_t kVar = 0; kVar < nVar; ++kVar) { + projModJacTensor += pMat(iVar,kVar) * lambda(kVar) * pMatInv(kVar,jVar); + } + + Double dDdU = projModJacTensor * (1-kappa) * area * dissipation; + + /*--- Update flux and Jacobians. ---*/ + + flux(iVar) -= dDdU * deltaU(jVar); + + if (implicit) { + jac_i(iVar,jVar) += dDdU; + jac_j(iVar,jVar) -= dDdU; + } + } + } } }; /*! - * \class CRoeScheme + * \class CMSWScheme * \ingroup ConvDiscr - * \brief Classical Roe scheme. + * \brief MSW scheme with switch to SW based on a pressure sensor. */ template -class CRoeScheme : public CRoeBase,Decorator> { -private: - using Base = CRoeBase,Decorator>; +class CMSWScheme : public CUpwindBase, Decorator> { +protected: + using Base = CUpwindBase, Decorator>; using Base::nDim; using Base::nVar; + using Base::nPrimVarGrad; + using Base::nPrimVar; + + const su2double alpha; using Base::gamma; - using Base::kappa; - const ENUM_ROELOWDISS typeDissip; + using Base::gasConst; + using Base::dynamicGrid; public: /*! - * \brief Constructor, store some constants and forward to base. + * \brief Constructor, store some constants and forward args to base. */ template - CRoeScheme(const CConfig& config, Ts&... args) : Base(config, args...), - typeDissip(static_cast(config.GetKind_RoeLowDiss())) { + CMSWScheme(const CConfig& config, unsigned iMesh, Ts&... args) : Base(config, iMesh, args...), + alpha(config.GetMSW_Alpha()) { } /*! - * \brief Updates flux and Jacobians with standard Roe dissipation. - * \note "Ts" is here just in case other schemes in the family need extra args. + * \brief Implementation of the flux. */ template FORCEINLINE void finalizeFlux(VectorDbl& flux, @@ -255,51 +343,87 @@ class CRoeScheme : public CRoeBase,Decorator> { bool implicit, Double area, const VectorDbl& unitNormal, + const VectorDbl& normal, const CPair& V, const CPair& U, - const CRoeVariables& roeAvg, - const VectorDbl& lambda, - const MatrixDbl& pMat, Int iPoint, Int jPoint, const CEulerVariable& solution, + const CGeometry& geometry, Ts&...) const { - /*--- Inverse P tensor. ---*/ - auto pMatInv = pMatrixInv(gamma, roeAvg.density, roeAvg.velocity, - roeAvg.projVel, roeAvg.speedSound, unitNormal); + /*--- Weighted states for flux-vector spliting (see the non-SIMD version in fvs.cpp for notes). ---*/ - /*--- Diference between conservative variables at jPoint and iPoint. ---*/ + const auto si = gatherVariables(iPoint, solution.GetSensor()); + const auto sj = gatherVariables(jPoint, solution.GetSensor()); - VectorDbl deltaU; - for (size_t iVar = 0; iVar < nVar; ++iVar) { - deltaU(iVar) = U.j.all(iVar) - U.i.all(iVar); - } + const Double dp = fmax(si, sj) - alpha * 0.06; + const Double w = 0.25 * (1 - sign(dp)) * (1 - exp(-100 * abs(dp))); + const Double onemw = 1 - w; - /*--- Dissipation terms. ---*/ + CPair> Vweighted; + for (size_t iVar = 0; iVar < nPrimVarGrad; ++iVar) { + Vweighted.i.all(iVar) = onemw * V.i.all(iVar) + w * V.j.all(iVar); + Vweighted.j.all(iVar) = onemw * V.j.all(iVar) + w * V.i.all(iVar); + } + const Double soundSpeed_i = sqrt(gamma * gasConst * Vweighted.i.temperature()); + const Double soundSpeed_j = sqrt(gamma * gasConst * Vweighted.j.temperature()); - Double dissipation = roeDissipation(iPoint, jPoint, typeDissip, solution); + Double projGridVel_i = 0.0, projGridVel_j = 0.0; + if (dynamicGrid) { + const auto& gridVel = geometry.nodes->GetGridVel(); + const Double vn_i = dot(gatherVariables(iPoint, gridVel), unitNormal); + const Double vn_j = dot(gatherVariables(jPoint, gridVel), unitNormal); + projGridVel_i = onemw * vn_i + w * vn_j; + projGridVel_j = onemw * vn_j + w * vn_i; + } + Double projVel_i = dot(Vweighted.i.velocity(), unitNormal) - projGridVel_i; + Double projVel_j = dot(Vweighted.j.velocity(), unitNormal) - projGridVel_j; - for (size_t iVar = 0; iVar < nVar; ++iVar) { - for (size_t jVar = 0; jVar < nVar; ++jVar) { - /*--- Compute |projModJacTensor| = P x |Lambda| x P^-1. ---*/ + /*--- Lambda+ ---*/ - Double projModJacTensor = 0.0; - for (size_t kVar = 0; kVar < nVar; ++kVar) { - projModJacTensor += pMat(iVar,kVar) * lambda(kVar) * pMatInv(kVar,jVar); - } + VectorDbl lambda; + for (size_t iDim = 0; iDim < nDim; ++iDim) { + lambda(iDim) = fmax(projVel_i, 0); + } + lambda(nDim) = fmax(projVel_i + soundSpeed_i, 0); + lambda(nDim+1) = fmax(projVel_i - soundSpeed_i, 0); - Double dDdU = projModJacTensor * (1-kappa) * area * dissipation; + auto pMat = pMatrix(gamma, Vweighted.i.density(), Vweighted.i.velocity(), + projVel_i, soundSpeed_i, unitNormal); + auto pMatInv = pMatrixInv(gamma, Vweighted.i.density(), Vweighted.i.velocity(), + projVel_i, soundSpeed_i, unitNormal); - /*--- Update flux and Jacobians. ---*/ + auto updateFlux = [&](const auto& u, auto& jac) { + for (size_t iVar = 0; iVar < nVar; ++iVar) { + for (size_t jVar = 0; jVar < nVar; ++jVar) { + /*--- Compute |projModJacTensor| = P x |Lambda| x P^-1. ---*/ - flux(iVar) -= dDdU * deltaU(jVar); + Double projModJacTensor = 0.0; + for (size_t kVar = 0; kVar < nVar; ++kVar) { + projModJacTensor += pMat(iVar,kVar) * lambda(kVar) * pMatInv(kVar,jVar); + } + Double dFdU = projModJacTensor * area; - if(implicit) { - jac_i(iVar,jVar) += dDdU; - jac_j(iVar,jVar) -= dDdU; + flux(iVar) += dFdU * u(jVar); + jac(iVar, jVar) = dFdU; } } + }; + updateFlux(U.i.all, jac_i); + + /*--- Lambda- ---*/ + + for (size_t iDim = 0; iDim < nDim; ++iDim) { + lambda(iDim) = fmin(projVel_j, 0); } + lambda(nDim) = fmin(projVel_j + soundSpeed_j, 0); + lambda(nDim+1) = fmin(projVel_j - soundSpeed_j, 0); + + pMat = pMatrix(gamma, Vweighted.j.density(), Vweighted.j.velocity(), + projVel_j, soundSpeed_j, unitNormal); + pMatInv = pMatrixInv(gamma, Vweighted.j.density(), Vweighted.j.velocity(), + projVel_j, soundSpeed_j, unitNormal); + updateFlux(U.j.all, jac_j); } }; diff --git a/SU2_CFD/src/solvers/CEulerSolver.cpp b/SU2_CFD/src/solvers/CEulerSolver.cpp index c97ab1178665..6ac5b7a162c7 100644 --- a/SU2_CFD/src/solvers/CEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CEulerSolver.cpp @@ -1796,9 +1796,11 @@ void CEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_contain const bool low_mach_corr = config->Low_Mach_Correction(); /*--- Use vectorization if the scheme supports it. ---*/ - if (config->GetKind_Upwind_Flow() == UPWIND::ROE && ideal_gas && !low_mach_corr) { - EdgeFluxResidual(geometry, solver_container, config); - return; + if (ideal_gas && !low_mach_corr) { + if (config->GetKind_Upwind_Flow() == UPWIND::ROE || config->GetKind_Upwind_Flow() == UPWIND::MSW) { + EdgeFluxResidual(geometry, solver_container, config); + return; + } } const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); diff --git a/SU2_CFD/src/variables/CEulerVariable.cpp b/SU2_CFD/src/variables/CEulerVariable.cpp index 4e88c9a467d6..f7b5d71f358d 100644 --- a/SU2_CFD/src/variables/CEulerVariable.cpp +++ b/SU2_CFD/src/variables/CEulerVariable.cpp @@ -34,7 +34,9 @@ unsigned long EulerNPrimVarGrad(const CConfig *config, unsigned long ndim) { const bool ideal_gas = config->GetKind_FluidModel() == STANDARD_AIR || config->GetKind_FluidModel() == IDEAL_GAS; - if (ideal_gas && config->GetKind_Upwind_Flow() == UPWIND::ROE && !config->Low_Mach_Correction()) { + const bool low_mach = config->Low_Mach_Correction(); + if (ideal_gas && !low_mach && + (config->GetKind_Upwind_Flow() == UPWIND::ROE || config->GetKind_Upwind_Flow() == UPWIND::MSW)) { // Based on CRoeBase (numerics_simd). return ndim + 2; } From fd6390f1707cf6bfca23ec4a08d97d607f7d6b47 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 8 Feb 2026 14:51:32 -0800 Subject: [PATCH 077/229] updates --- TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref | 16 ++++++++-------- TestCases/euler/ramp/inv_ramp_msw.cfg | 2 +- TestCases/parallel_regression.py | 2 +- TestCases/serial_regression_AD.py | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref b/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref index 111b5c1cdc53..e6641b705464 100644 --- a/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref +++ b/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref @@ -1,9 +1,9 @@ INDEX GRAD -0 -4.570880175564371e-04 -1 -2.401474104649833e-04 -2 -9.134741714239637e-05 -3 -1.628103592186675e-05 -4 -1.741046982337274e-05 -5 -9.462481735830197e-05 -6 -2.452469745130044e-04 -7 -4.635498256044697e-04 +0 -4.570880056076276e-04 +1 -2.401474032110094e-04 +2 -9.134741314806565e-05 +3 -1.628103414800329e-05 +4 -1.741046937496715e-05 +5 -9.462481743926707e-05 +6 -2.452469742444662e-04 +7 -4.635498236376295e-04 diff --git a/TestCases/euler/ramp/inv_ramp_msw.cfg b/TestCases/euler/ramp/inv_ramp_msw.cfg index ae900c6f6bbf..45c0c769a22e 100644 --- a/TestCases/euler/ramp/inv_ramp_msw.cfg +++ b/TestCases/euler/ramp/inv_ramp_msw.cfg @@ -42,7 +42,7 @@ MARKER_MONITORING= ( upper, lower ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= GREEN_GAUSS -CFL_NUMBER= 1.0 +CFL_NUMBER= 4.0 CFL_ADAPT= YES CFL_ADAPT_PARAM= ( 0.8, 1.2, 1.0, 250.0, 0.8 ) ITER= 200 diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index c6e8d055be09..a4d1b323adac 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -298,7 +298,7 @@ def main(): ramp_msw.cfg_dir = "euler/ramp" ramp_msw.cfg_file = "inv_ramp_msw.cfg" ramp_msw.test_iter = 100 - ramp_msw.test_vals = [-12.081674, -6.281367, -0.077904, 0.054539] + ramp_msw.test_vals = [-6.724754, -0.967468, -0.077520, 0.054427] test_list.append(ramp_msw) ########################## diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 50381c04724f..424c2a560c39 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -206,8 +206,8 @@ def main(): discadj_fsi.cfg_dir = "disc_adj_fsi" discadj_fsi.cfg_file = "config.cfg" discadj_fsi.test_iter = 6 - discadj_fsi.test_vals = [6, -8.932038, -10.037735, 3.1052e-11, -1.7613e-06] - discadj_fsi.test_vals_aarch64 = [6, -8.928861, -10.122430, 3.0979e-11, -1.7585e-06] + discadj_fsi.test_vals = [6, -8.928820, -10.067497, 3.1052e-11, -1.7613e-06] + discadj_fsi.test_vals_aarch64 = [6, -8.928820, -10.067497, 3.0979e-11, -1.7585e-06] test_list.append(discadj_fsi) ################################### From 210a7abe89896ca955391e6c1fff69f4e9eca703 Mon Sep 17 00:00:00 2001 From: Christian Perron Date: Sun, 8 Feb 2026 19:05:50 -0500 Subject: [PATCH 078/229] Fixing relaxation factor for conservative turbulent variables --- SU2_CFD/include/solvers/CScalarSolver.hpp | 6 +++--- SU2_CFD/include/solvers/CScalarSolver.inl | 2 +- SU2_CFD/include/solvers/CTurbSASolver.hpp | 2 +- SU2_CFD/include/solvers/CTurbSSTSolver.hpp | 2 +- SU2_CFD/include/solvers/CTurbSolver.hpp | 2 +- SU2_CFD/src/solvers/CTurbSASolver.cpp | 4 ++-- SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 4 ++-- SU2_CFD/src/solvers/CTurbSolver.cpp | 13 +++++++++---- 8 files changed, 20 insertions(+), 15 deletions(-) diff --git a/SU2_CFD/include/solvers/CScalarSolver.hpp b/SU2_CFD/include/solvers/CScalarSolver.hpp index db48c12f3bd8..8afeb67adba5 100644 --- a/SU2_CFD/include/solvers/CScalarSolver.hpp +++ b/SU2_CFD/include/solvers/CScalarSolver.hpp @@ -181,7 +181,7 @@ class CScalarSolver : public CSolver { numerics->SetScalarVar(nodes->GetSolution(iPoint), nodes->GetSolution(jPoint)); numerics->SetScalarVarGradient(nodes->GetGradient(iPoint), nodes->GetGradient(jPoint)); - return numerics->ComputeResidual(config); + return numerics->ComputeResidual(config); }; /*--- Compute fluxes and jacobians i->j ---*/ @@ -241,7 +241,7 @@ class CScalarSolver : public CSolver { } } } - + /*! * \brief Generic implementation of the fluid interface boundary condition for scalar solvers. * \tparam SolverSpecificNumericsFunc - lambda that implements solver specific contributions to viscous numerics. @@ -427,7 +427,7 @@ class CScalarSolver : public CSolver { * a nonlinear iteration for stability. Default value 1.0 set in ctor of CScalarVariable. * \param[in] config - Definition of the particular problem. */ - virtual void ComputeUnderRelaxationFactor(const CConfig* config) {} + virtual void ComputeUnderRelaxationFactor(CSolver** solver_container, const CConfig* config) {} public: /*! diff --git a/SU2_CFD/include/solvers/CScalarSolver.inl b/SU2_CFD/include/solvers/CScalarSolver.inl index bbd83679254f..50927ccbcc06 100644 --- a/SU2_CFD/include/solvers/CScalarSolver.inl +++ b/SU2_CFD/include/solvers/CScalarSolver.inl @@ -498,7 +498,7 @@ void CScalarSolver::PrepareImplicitIteration(CGeometry* geometry, template void CScalarSolver::CompleteImplicitIteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) { - ComputeUnderRelaxationFactor(config); + ComputeUnderRelaxationFactor(solver_container, config); /*--- Update solution (system written in terms of increments) ---*/ diff --git a/SU2_CFD/include/solvers/CTurbSASolver.hpp b/SU2_CFD/include/solvers/CTurbSASolver.hpp index dfc1362b003c..d4ebe49c8dab 100644 --- a/SU2_CFD/include/solvers/CTurbSASolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSASolver.hpp @@ -70,7 +70,7 @@ class CTurbSASolver final : public CTurbSolver { * a nonlinear iteration for stability. * \param[in] config - Definition of the particular problem. */ - void ComputeUnderRelaxationFactor(const CConfig *config) final; + void ComputeUnderRelaxationFactor(CSolver** solver_container, const CConfig *config) final; public: /*! diff --git a/SU2_CFD/include/solvers/CTurbSSTSolver.hpp b/SU2_CFD/include/solvers/CTurbSSTSolver.hpp index 5c8d9a0e7eac..8b935aeba994 100644 --- a/SU2_CFD/include/solvers/CTurbSSTSolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSSTSolver.hpp @@ -59,7 +59,7 @@ class CTurbSSTSolver final : public CTurbSolver { * a nonlinear iteration for stability. * \param[in] config - Definition of the particular problem. */ - void ComputeUnderRelaxationFactor(const CConfig *config) override; + void ComputeUnderRelaxationFactor(CSolver** solver_container, const CConfig *config) override; public: /*! diff --git a/SU2_CFD/include/solvers/CTurbSolver.hpp b/SU2_CFD/include/solvers/CTurbSolver.hpp index 56b7b96b3b26..59e83795b4b1 100644 --- a/SU2_CFD/include/solvers/CTurbSolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSolver.hpp @@ -153,5 +153,5 @@ class CTurbSolver : public CScalarSolver { * a nonlinear iteration for stability. * \param[in] allowableRatio - Maximum percentage update in variable per iteration. */ - void ComputeUnderRelaxationFactorHelper(su2double allowableRatio); + void ComputeUnderRelaxationFactorHelper(CSolver** solver_container, su2double allowableRatio); }; diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp index 5ea64882b0b7..635d52a067a7 100644 --- a/SU2_CFD/src/solvers/CTurbSASolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp @@ -1555,7 +1555,7 @@ void CTurbSASolver::SetUniformInlet(const CConfig* config, unsigned short iMarke } } -void CTurbSASolver::ComputeUnderRelaxationFactor(const CConfig *config) { +void CTurbSASolver::ComputeUnderRelaxationFactor(CSolver** solver_container, const CConfig *config) { /* Apply the turbulent under-relaxation to the SA variants. The SA_NEG model is more robust due to allowing for negative nu_tilde, @@ -1568,6 +1568,6 @@ void CTurbSASolver::ComputeUnderRelaxationFactor(const CConfig *config) { const su2double allowableRatio = config->GetMaxUpdateFractionSA(); - ComputeUnderRelaxationFactorHelper(allowableRatio); + ComputeUnderRelaxationFactorHelper(solver_container, allowableRatio); } diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index 3ce8b2e300a2..91e18e49001e 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -1046,9 +1046,9 @@ void CTurbSSTSolver::SetUniformInlet(const CConfig* config, unsigned short iMark } -void CTurbSSTSolver::ComputeUnderRelaxationFactor(const CConfig *config) { +void CTurbSSTSolver::ComputeUnderRelaxationFactor(CSolver** solver_container, const CConfig *config) { const su2double allowableRatio = config->GetMaxUpdateFractionSST(); - ComputeUnderRelaxationFactorHelper(allowableRatio); + ComputeUnderRelaxationFactorHelper(solver_container, allowableRatio); } \ No newline at end of file diff --git a/SU2_CFD/src/solvers/CTurbSolver.cpp b/SU2_CFD/src/solvers/CTurbSolver.cpp index f6aed2de8522..f74f2fdefad1 100644 --- a/SU2_CFD/src/solvers/CTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSolver.cpp @@ -247,7 +247,7 @@ unsigned long CTurbSolver::RegisterSolutionExtra(bool input, const CConfig* conf return 0; } -void CTurbSolver::ComputeUnderRelaxationFactorHelper(su2double allowableRatio) { +void CTurbSolver::ComputeUnderRelaxationFactorHelper(CSolver** solver_container, su2double allowableRatio) { /* Loop over the solution update given by relaxing the linear system for this nonlinear iteration. */ @@ -257,14 +257,19 @@ void CTurbSolver::ComputeUnderRelaxationFactorHelper(su2double allowableRatio) { su2double localUnderRelaxation = 1.0; for (unsigned short iVar = 0; iVar < nVar; iVar++) { - const unsigned long index = iPoint * nVar + iVar; - su2double ratio = fabs(LinSysSol[index])/(fabs(nodes->GetSolution(iPoint, iVar)) + EPS); + + su2double current_sol = nodes->GetSolution(iPoint, iVar); + if (Conservative) { + /* Need to multiply by density if this is a conservative variable */ + current_sol *= solver_container[FLOW_SOL]->GetNodes()->GetDensity(iPoint); + } + + su2double ratio = fabs(LinSysSol(iPoint, iVar) / (current_sol + EPS)); /* We impose a limit on the maximum percentage that the turbulence variables can change over a nonlinear iteration. */ if (ratio > allowableRatio) { localUnderRelaxation = min(allowableRatio / ratio, localUnderRelaxation); - } } From 6396cd871642b479d341709c15bf0db6debf3b92 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Mon, 9 Feb 2026 15:33:10 -0800 Subject: [PATCH 079/229] Apply suggestion from @pcarruscag --- TestCases/parallel_regression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 2c5883349d0f..8ceeded351d4 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -298,7 +298,7 @@ def main(): ramp_msw.cfg_dir = "euler/ramp" ramp_msw.cfg_file = "inv_ramp_msw.cfg" ramp_msw.test_iter = 100 - ramp_msw.test_vals = [-6.724754, -0.967468, -0.077520, 0.054427] + ramp_msw.test_vals = [-7.522451, -1.791193, -0.077520, 0.054427] test_list.append(ramp_msw) ########################## From e9ff1942a5c9a50757cbfde3f5e443768748acc7 Mon Sep 17 00:00:00 2001 From: Christian Perron Date: Mon, 9 Feb 2026 23:38:36 -0500 Subject: [PATCH 080/229] Updating tests values for #2728 --- TestCases/hybrid_regression.py | 22 +++--- .../chtPinArray_2d/of_grad_findiff.csv.ref | 2 +- TestCases/parallel_regression.py | 68 +++++++++---------- TestCases/parallel_regression_AD.py | 4 +- TestCases/serial_regression.py | 26 +++---- TestCases/tutorials.py | 12 ++-- TestCases/vandv.py | 2 +- 7 files changed, 68 insertions(+), 68 deletions(-) diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 04c8ccffa1a5..a2970e2782b9 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -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 = [-0.510339, 5.386831, 0.811983, 0.061600, 0.000000] + rae2822_sst.test_vals = [-0.510329, 6.062197, 0.811983, 0.061600, 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.643406, 5.386831, 0.811983, 0.061600] + rae2822_sst_sust.test_vals = [-2.589964, 6.062197, 0.811983, 0.061600] test_list.append(rae2822_sst_sust) # Flat plate @@ -224,7 +224,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.192389, -10.445226, 0.774100, 1.022534, 0.040529, -2.383436] + turb_naca0012_sst_fixedvalues.test_vals = [-5.192389, -10.448080, 0.773965, 1.022534, 0.040529, -2.383403] test_list.append(turb_naca0012_sst_fixedvalues) # NACA0012 (SST, explicit Euler for flow and turbulence equations) @@ -278,7 +278,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.979757, 1.345555, 0.450656, -0.030217] + turb_naca0012_1c.test_vals = [-4.979765, 1.343317, 0.445160, -0.028835] turb_naca0012_1c.test_vals_aarch64 = [-4.976620, 1.345983, 0.433171, -0.033685] test_list.append(turb_naca0012_1c) @@ -287,7 +287,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.482860, 1.263778, 0.403145, -0.043182] + turb_naca0012_2c.test_vals = [-5.482873, 1.260834, 0.398789, -0.041781] turb_naca0012_2c.test_vals_aarch64 = [-5.485484, 1.263406, 0.411442, -0.040859] test_list.append(turb_naca0012_2c) @@ -296,7 +296,7 @@ def main(): turb_naca0012_3c.cfg_dir = "rans_uq/naca0012" turb_naca0012_3c.cfg_file = "turb_NACA0012_uq_3c.cfg" turb_naca0012_3c.test_iter = 10 - turb_naca0012_3c.test_vals = [-5.583729, 1.232137, 0.384897, -0.047679] + turb_naca0012_3c.test_vals = [-5.583738, 1.228730, 0.381824, -0.046280] turb_naca0012_3c.test_vals_aarch64 = [-5.583737, 1.232005, 0.390258, -0.046305] test_list.append(turb_naca0012_3c) @@ -305,7 +305,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.133790, 1.285469, 0.551790, 0.009703] + turb_naca0012_p1c1.test_vals = [-5.133798, 1.283504, 0.548676, 0.010882] turb_naca0012_p1c1.test_vals_aarch64 = [-5.114189, 1.285037, 0.406851, -0.043003] test_list.append(turb_naca0012_p1c1) @@ -314,7 +314,7 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.553940, 1.237339, 0.427689, -0.034727] + turb_naca0012_p1c2.test_vals = [-5.553950, 1.234029, 0.424324, -0.033438] turb_naca0012_p1c2.test_vals_aarch64 = [-5.548245, 1.236384, 0.381821, -0.050337] test_list.append(turb_naca0012_p1c2) @@ -564,7 +564,7 @@ def main(): axial_stage2D.cfg_dir = "turbomachinery/axial_stage_2D" axial_stage2D.cfg_file = "Axial_stage2D.cfg" axial_stage2D.test_iter = 20 - axial_stage2D.test_vals = [1.065797, 1.519589, -2.928280, 2.573904, -2.526637, 3.017140, 106370.000000, 106370.000000, 5.726800, 64.383000] + axial_stage2D.test_vals = [1.167176, 1.598838, -2.928275, 2.573906, -2.526637, 3.017140, 106370.000000, 106370.000000, 5.726800, 64.383000] test_list.append(axial_stage2D) # 2D transonic stator restart @@ -572,7 +572,7 @@ def main(): transonic_stator_restart.cfg_dir = "turbomachinery/transonic_stator_2D" transonic_stator_restart.cfg_file = "transonic_stator_restart.cfg" transonic_stator_restart.test_iter = 20 - transonic_stator_restart.test_vals = [-4.442510, -2.561369, -2.165778, 1.652750, -1.355494, 3.172711, -471620.000000, 94.843000, -0.043825] + transonic_stator_restart.test_vals = [-4.367184, -2.487640, -2.079069, 1.728134, -1.464968, 3.224889, -471620.000000, 94.839000, -0.051073] transonic_stator_restart.test_vals_aarch64 = [-4.442510, -2.561369, -2.165778, 1.652750, -1.355494, 3.172712, -471620.000000, 94.843000, -0.043825] test_list.append(transonic_stator_restart) @@ -656,7 +656,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.621423, -1.660901] + bars_SST_2D.test_vals = [13.000000, -0.623154, -1.660901] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/of_grad_findiff.csv.ref b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/of_grad_findiff.csv.ref index 3e2b9a6332a8..9246266f98a3 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/of_grad_findiff.csv.ref +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/of_grad_findiff.csv.ref @@ -1,2 +1,2 @@ "VARIABLE" , "AVG_DENSITY[0]", "AVG_ENTHALPY[0]", "AVG_NORMALVEL[0]", "DRAG[0]" , "EFFICIENCY[0]" , "FORCE_X[0]" , "FORCE_Y[0]" , "FORCE_Z[0]" , "LIFT[0]" , "MOMENT_X[0]" , "MOMENT_Y[0]" , "MOMENT_Z[0]" , "SIDEFORCE[0]" , "SURFACE_MACH[0]", "SURFACE_MASSFLOW[0]", "SURFACE_MOM_DISTORTION[0]", "SURFACE_PRESSURE_DROP[0]", "SURFACE_SECONDARY[0]", "SURFACE_SECOND_OVER_UNIFORM[0]", "SURFACE_STATIC_PRESSURE[0]", "SURFACE_STATIC_TEMPERATURE[0]", "SURFACE_TOTAL_PRESSURE[0]", "SURFACE_TOTAL_TEMPERATURE[0]", "SURFACE_UNIFORMITY[0]", "AVG_TEMPERATURE[1]", "TOTAL_HEATFLUX[1]", "FINDIFF_STEP" -0 , 0.0 , -20000.000949949026, 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , -0.01000000082740371, 1.1100000001884e-08, -0.04000000330961484 , 0.0 , 0.01000000082740371 , 0.059999993862192014 , -9.999999406318238 , 0.0 , -69.99999868639861 , 0.0 , -0.09999998606957661 , -80.0000009348878 , -359.99998999614036, 1e-08 +0 , 0.0 , -850000.0054482371, -7.771600000104802e-08, 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , -0.5900000002445616, -2.4420000000008897e-07, -42.92999999933045 , 0.0 , 54.82000000056608 , 110.76999999470871 , 29899.9999984062 , -239.9999971203215 , 28910.000000337277 , -239.9999971203215 , -35.200000003676735 , -80.0000009348878 , -490.00000217347406, 1e-08 diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 37e3a5756dec..479fd270dd62 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -374,7 +374,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 = [-0.510305, 5.386832, 0.813794, 0.062425, 0.000000] + rae2822_sst.test_vals = [-0.510301, 6.055876, 0.813794, 0.062425, 0.000000] test_list.append(rae2822_sst) # RAE2822 SST_SUST @@ -382,7 +382,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.644127, 5.386832, 0.813793, 0.062425] + rae2822_sst_sust.test_vals = [-2.589038, 6.055876, 0.813793, 0.062425] test_list.append(rae2822_sst_sust) # Flat plate @@ -406,7 +406,7 @@ def main(): turb_flatplate_CC_Wilcox.cfg_dir = "rans/flatplate" turb_flatplate_CC_Wilcox.cfg_file = "turb_SST_flatplate_compressibility_Wilcox.cfg" turb_flatplate_CC_Wilcox.test_iter = 20 - turb_flatplate_CC_Wilcox.test_vals = [-1.195053, 2.089306, 1.529063, 5.164703, -3.700915, 8.162921] + turb_flatplate_CC_Wilcox.test_vals = [-1.169750, 2.167973, 1.488567, 5.244807, -3.795767, 9.699598] test_list.append(turb_flatplate_CC_Wilcox) # Flat plate SST compressibility correction Sarkar @@ -414,7 +414,7 @@ def main(): turb_flatplate_CC_Sarkar.cfg_dir = "rans/flatplate" turb_flatplate_CC_Sarkar.cfg_file = "turb_SST_flatplate_compressibility_Sarkar.cfg" turb_flatplate_CC_Sarkar.test_iter = 20 - turb_flatplate_CC_Sarkar.test_vals = [-1.195053, 2.089306, 1.529063, 5.164703, -3.700917, 8.162921] + turb_flatplate_CC_Sarkar.test_vals = [-1.169750, 2.167973, 1.488567, 5.244807, -3.795765, 9.699598] test_list.append(turb_flatplate_CC_Sarkar) # FLAT PLATE, ROUGHNESS BC KNOPP SST @@ -430,7 +430,7 @@ def main(): turb_flatplate_sst_roughBCAupoix.cfg_dir = "rans/flatplate/roughness/bc_aupoix" turb_flatplate_sst_roughBCAupoix.cfg_file = "turb_SST_flatplate_roughBCAupoix.cfg" turb_flatplate_sst_roughBCAupoix.test_iter = 10 - turb_flatplate_sst_roughBCAupoix.test_vals = [-5.278097, -2.297701, -2.883899, 0.228298, -1.375945, 3.209449, -0.188736, 0.007201] + turb_flatplate_sst_roughBCAupoix.test_vals = [-5.278728, -2.302982, -2.890419, 0.227585, -1.393786, 3.192601, -0.188729, 0.0071821] test_list.append(turb_flatplate_sst_roughBCAupoix) # ONERA M6 Wing @@ -514,7 +514,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.437140, 0.774285, 1.022363, 0.040546, -3.736455] + turb_naca0012_sst_fixedvalues.test_vals = [-5.216551, -10.440018, 0.774146, 1.022363, 0.040546, -3.736444] turb_naca0012_sst_fixedvalues.timeout = 3200 test_list.append(turb_naca0012_sst_fixedvalues) @@ -916,7 +916,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.975127, 1.346671, 0.677571, 0.011242] + turb_naca0012_1c.test_vals = [-4.975126, 1.344885, 0.670937, 0.011460] turb_naca0012_1c.test_vals_aarch64 = [-4.981036, 1.345868, 0.673232, 0.010091] test_list.append(turb_naca0012_1c) @@ -925,7 +925,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.482703, 1.265040, 0.500982, -0.033411] + turb_naca0012_2c.test_vals = [-5.482702, 1.262642, 0.496508, -0.032494] turb_naca0012_2c.test_vals_aarch64 = [-5.484365, 1.264701, 0.501741, -0.033109] test_list.append(turb_naca0012_2c) @@ -934,7 +934,7 @@ def main(): turb_naca0012_3c.cfg_dir = "rans_uq/naca0012" turb_naca0012_3c.cfg_file = "turb_NACA0012_uq_3c.cfg" turb_naca0012_3c.test_iter = 10 - turb_naca0012_3c.test_vals = [-5.583618, 1.232138, 0.466795, -0.036337] + turb_naca0012_3c.test_vals = [-5.583617, 1.229594, 0.463394, -0.035393] test_list.append(turb_naca0012_3c) # NACA0012 p1c1 @@ -942,7 +942,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.129515, 1.285213, 0.811512, 0.047455] + turb_naca0012_p1c1.test_vals = [-5.129515, 1.283834, 0.806734, 0.047571] turb_naca0012_p1c1.test_vals_aarch64 = [-5.122100, 1.284478, 0.608744, -0.008593] test_list.append(turb_naca0012_p1c1) @@ -951,7 +951,7 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.553988, 1.236535, 0.608219, -0.008951] + turb_naca0012_p1c2.test_vals = [-5.553987, 1.234480, 0.603750, -0.008508] test_list.append(turb_naca0012_p1c2) ###################################### @@ -1086,7 +1086,7 @@ def main(): coolprop_fluidModel.cfg_dir = "nicf/coolprop" coolprop_fluidModel.cfg_file = "fluidModel.cfg" coolprop_fluidModel.test_iter = 5 - coolprop_fluidModel.test_vals = [-4.665443, -0.172865, 4.497973, 0.000000, 0.000000] + coolprop_fluidModel.test_vals = [-4.666146, -0.172864, 4.492817, 0.000000, 0.000000] coolprop_fluidModel.enabled_on_cpu_arch = ["x86_64"] test_list.append(coolprop_fluidModel) @@ -1095,7 +1095,7 @@ def main(): coolprop_transportModel.cfg_dir = "nicf/coolprop" coolprop_transportModel.cfg_file = "transportModel.cfg" coolprop_transportModel.test_iter = 5 - coolprop_transportModel.test_vals = [-4.666163, -0.172865, 5.445413, 0.000000, 0.000000] + coolprop_transportModel.test_vals = [-4.667122, -0.172865, 4.687652, 0.000000, 0.000000] coolprop_transportModel.enabled_on_cpu_arch = ["x86_64"] test_list.append(coolprop_transportModel) @@ -1133,7 +1133,7 @@ def main(): axial_stage2D.cfg_dir = "turbomachinery/axial_stage_2D" axial_stage2D.cfg_file = "Axial_stage2D.cfg" axial_stage2D.test_iter = 20 - axial_stage2D.test_vals = [1.065803, 1.519598, -2.928278, 2.573906, -2.526640, 3.017138, 106370.000000, 106370.000000, 5.726800, 64.383000] + axial_stage2D.test_vals = [1.167155, 1.598851, -2.928273, 2.573908, -2.526641, 3.017138, 106370.000000, 106370.000000, 5.726800, 64.383000] test_list.append(axial_stage2D) # 2D transonic stator restart @@ -1141,7 +1141,7 @@ def main(): transonic_stator_restart.cfg_dir = "turbomachinery/transonic_stator_2D" transonic_stator_restart.cfg_file = "transonic_stator_restart.cfg" transonic_stator_restart.test_iter = 20 - transonic_stator_restart.test_vals = [-4.437809, -2.553049, -2.164729, 1.657542, -1.356823, 3.178788, -471620.000000, 94.842000, -0.040365] + transonic_stator_restart.test_vals = [-4.363703, -2.480017, -2.079311, 1.731709, -1.467573, 3.229965, -471620.000000, 94.838000, -0.046906] transonic_stator_restart.test_vals_aarch64 = [-4.437809, -2.553049, -2.164729, 1.657542, -1.356823, 3.178788, -471620.000000, 94.842000, -0.040365] test_list.append(transonic_stator_restart) @@ -1225,7 +1225,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.621423, -1.660901] + bars_SST_2D.test_vals = [13.000000, -0.623154, -1.660901] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) @@ -1405,7 +1405,7 @@ def main(): sp_pinArray_cht_2d_dp_hf.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" sp_pinArray_cht_2d_dp_hf.cfg_file = "configMaster.cfg" sp_pinArray_cht_2d_dp_hf.test_iter = 100 - sp_pinArray_cht_2d_dp_hf.test_vals = [0.353740, 2.436726, -1.270003, -0.615079, 208.023676, 350.100000, -0.000000, -0.615080, 0.615080] + sp_pinArray_cht_2d_dp_hf.test_vals = [0.691407, 2.834803, -1.205148, -0.677171, 208.023676, 350.080000, -0.000000, -0.677170, 0.677170] sp_pinArray_cht_2d_dp_hf.multizone = True test_list.append(sp_pinArray_cht_2d_dp_hf) @@ -1414,7 +1414,7 @@ def main(): sp_pinArray_3d_cht_mf_hf_tp.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_3d" sp_pinArray_3d_cht_mf_hf_tp.cfg_file = "configMaster.cfg" sp_pinArray_3d_cht_mf_hf_tp.test_iter = 30 - sp_pinArray_3d_cht_mf_hf_tp.test_vals = [-1.279608, 3.011923, -0.641797, -0.009777, 104.609505, 410.330000, 0.000000] + sp_pinArray_3d_cht_mf_hf_tp.test_vals = [-1.116268, 3.008626, -0.634287, -0.009805, 104.600487, 410.310000, 0.000000] sp_pinArray_3d_cht_mf_hf_tp.multizone = True test_list.append(sp_pinArray_3d_cht_mf_hf_tp) @@ -1499,7 +1499,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.614167, 2.264219, -0.001386, 0.172978] + pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.260964, -0.001386, 0.172980] 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) @@ -1509,7 +1509,7 @@ def main(): pywrapper_rigidMotion.cfg_dir = "py_wrapper/flatPlate_rigidMotion" pywrapper_rigidMotion.cfg_file = "flatPlate_rigidMotion_Conf.cfg" pywrapper_rigidMotion.test_iter = 5 - pywrapper_rigidMotion.test_vals = [-1.614166, 2.257995, 0.350194, 0.089496] + pywrapper_rigidMotion.test_vals = [-1.614166, 2.255135, 0.350194, 0.089496] pywrapper_rigidMotion.command = TestCase.Command("mpirun -np 2", "python", "launch_flatPlate_rigidMotion.py --parallel -f") pywrapper_rigidMotion.unsteady = True test_list.append(pywrapper_rigidMotion) @@ -1544,16 +1544,16 @@ def main(): test_list.append(pywrapper_zimont) - # Heat solver unsteady with source - pywrapper_Unst_Heat_Source = TestCase('pywrapper_Unst_Heat_Source') - pywrapper_Unst_Heat_Source.cfg_dir = "py_wrapper/custom_heat_source" - pywrapper_Unst_Heat_Source.cfg_file = "run.py" - pywrapper_Unst_Heat_Source.test_iter = 10 - pywrapper_Unst_Heat_Source.unsteady = True + # Heat solver unsteady with source + pywrapper_Unst_Heat_Source = TestCase('pywrapper_Unst_Heat_Source') + pywrapper_Unst_Heat_Source.cfg_dir = "py_wrapper/custom_heat_source" + pywrapper_Unst_Heat_Source.cfg_file = "run.py" + pywrapper_Unst_Heat_Source.test_iter = 10 + pywrapper_Unst_Heat_Source.unsteady = True pywrapper_Unst_Heat_Source.test_vals = [-5.235402, 300.010000, 300.000000] pywrapper_Unst_Heat_Source.command = TestCase.Command("mpirun -n 2", "python", "run.py") test_list.append(pywrapper_Unst_Heat_Source) - + ############################################## ### Method of Manufactured Solutions (MMS) ### ############################################## @@ -1630,7 +1630,7 @@ def main(): species2_primitiveVenturi_mixingmodel.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel.cfg_file = "species2_primitiveVenturi_mixingmodel.cfg" species2_primitiveVenturi_mixingmodel.test_iter = 50 - species2_primitiveVenturi_mixingmodel.test_vals = [ -5.737415, -4.566668, -4.671780, -5.777603, -0.066800, -5.583554, 5.000000, -1.373807, 5.000000, -4.869219, 5.000000, -1.453021, 0.000381, 0.000365, 0.000016, 0.000000] + species2_primitiveVenturi_mixingmodel.test_vals = [-5.735589, -4.564867, -4.669647, -5.794093, -0.067124, -5.583396, 5.000000, -1.375324, 5.000000, -4.869799, 5.000000, -1.453419, 0.000381, 0.000366, 0.000016, 0.000000] test_list.append(species2_primitiveVenturi_mixingmodel) # 2 species (1 eq) primitive venturi mixing using mixing model and bounded scalar transport @@ -1638,7 +1638,7 @@ def main(): species2_primitiveVenturi_mixingmodel_boundedscalar.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel_boundedscalar.cfg_file = "species2_primitiveVenturi_mixingmodel_boundedscalar.cfg" species2_primitiveVenturi_mixingmodel_boundedscalar.test_iter = 50 - species2_primitiveVenturi_mixingmodel_boundedscalar.test_vals = [-5.690396, -4.512158, -4.616488, -5.776093, -0.113176, -5.705291, 5.000000, -1.433234, 5.000000, -4.921121, 5.000000, -1.770744, 0.000318, 0.000318, 0.000000, 0.000000] + species2_primitiveVenturi_mixingmodel_boundedscalar.test_vals = [-5.689670, -4.511504, -4.615493, -5.795204, -0.113336, -5.704986, 5.000000, -1.433752, 5.000000, -4.921373, 5.000000, -1.771016, 0.000318, 0.000318, 0.000000, 0.000000] test_list.append(species2_primitiveVenturi_mixingmodel_boundedscalar) # 2 species (1 eq) primitive venturi mixing using mixing model including viscosity, thermal conductivity and inlet markers for SA turbulence model @@ -1654,7 +1654,7 @@ def main(): species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg_file = "species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg" species2_primitiveVenturi_mixingmodel_heatcapacity_H2.test_iter = 50 - species2_primitiveVenturi_mixingmodel_heatcapacity_H2.test_vals = [-5.824346, -4.632948, -4.560590, -6.765715, 2.076808, -5.480881, 30.000000, -7.315121, 12.000000, -8.059064, 8.000000, -8.896288, 2.092262, 1.000000, 0.600000, 0.492262] + species2_primitiveVenturi_mixingmodel_heatcapacity_H2.test_vals = [-5.815955, -4.624944, -4.555357, -6.656244, 2.075950, -5.479969, 30.000000, -7.342937, 12.000000, -8.030131, 8.000000, -8.931183, 2.092270, 1.000000, 0.600000, 0.492270] test_list.append(species2_primitiveVenturi_mixingmodel_heatcapacity_H2) # 2 species (1 eq) primitive venturi mixing using mixing model including heat capacity and mass diffusivity NonDimensional case @@ -1662,7 +1662,7 @@ def main(): species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg_file = "species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg" species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.test_iter = 50 - species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.test_vals = [-5.400769, -4.916015, -4.837449, -7.711760, 1.771402, -5.087077, 10.000000, -2.744436, 3.000000, -5.095706, 5.000000, -5.856784, 2.092358, 1.000000, 0.600000, 0.492358] + species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.test_vals = [-5.404273, -4.918833, -4.841423, -7.647725, 1.772604, -5.085765, 10.000000, -2.745490, 3.000000, -5.207707, 5.000000, -5.863162, 2.092298, 1.000000, 0.600000, 0.492298] test_list.append(species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND) # 2 species (1 eq) primitive venturi mixing using mixing model solving enthalpy equation using preconditioning + JST convective scheme @@ -1686,7 +1686,7 @@ def main(): species2_primitiveVenturi.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi.cfg_file = "species2_primitiveVenturi.cfg" species2_primitiveVenturi.test_iter = 50 - species2_primitiveVenturi.test_vals = [-5.557355, -4.528649, -4.567282, -5.392656, -0.920718, -5.677129, 5.000000, -0.597625, 5.000000, -2.601553, 5.000000, -0.550169, 0.000035, 0.000035, 0.000000, 0.000000] + species2_primitiveVenturi.test_vals = [-5.470699, -4.435379, -4.486544, -5.327925, -0.866369, -5.623281, 5.000000, -0.557915, 5.000000, -2.599732, 5.000000, -0.536608, 0.000037, 0.000037, 0.000000, 0.000000] test_list.append(species2_primitiveVenturi) # 2 species (1 eq) primitive venturi mixing with bounded scalar transport @@ -1694,7 +1694,7 @@ def main(): species_primitiveVenturi_boundedscalar.cfg_dir = "species_transport/venturi_primitive_3species" species_primitiveVenturi_boundedscalar.cfg_file = "species2_primitiveVenturi_boundedscalar.cfg" species_primitiveVenturi_boundedscalar.test_iter = 50 - species_primitiveVenturi_boundedscalar.test_vals = [-5.539052, -4.376789, -4.477172, -5.579444, -0.871003, -5.633907, 5.000000, -1.460377, 5.000000, -4.141552, 5.000000, -1.727113, 0.000438, 0.000438, 0.000000, 0.000000] + species_primitiveVenturi_boundedscalar.test_vals = [-5.537734, -4.375388, -4.475128, -5.597904, -0.870563, -5.633513, 5.000000, -1.461524, 5.000000, -4.142508, 5.000000, -1.727874, 0.000438, 0.000438, 0.000000, 0.000000] test_list.append(species_primitiveVenturi_boundedscalar) # 2 species (1 eq) primitive venturi mixing using mixing model including inlet markers for turbulent intensity and viscosity ratios @@ -1702,7 +1702,7 @@ def main(): species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg_dir = "species_transport/venturi_primitive_3species" species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg_file = "species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg" species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.test_iter = 50 - species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.test_vals = [-4.782077, -1.837073, -1.862970, -0.641171, 1.349304, -3.929006, 21.000000, -5.212393, 9.000000, -5.455072, 4.000000, -5.915343, 2.000000, 1.000000, 0.000000, 1.000000] + species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.test_vals = [-4.847447, -1.922191, -1.947568, -0.716575, 1.211626, -3.930420, 21.000000, -5.152536, 9.000000, -5.329555, 4.000000, -5.865224, 2.000000, 1.000000, 0.000000, 1.000000] test_list.append(species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS) # 3 species (2 eq) primitive venturi mixing with inlet files. diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index b3679519a97d..f4d5bc9ca967 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -298,7 +298,7 @@ def main(): da_sp_pinArray_cht_2d_dp_hf.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" da_sp_pinArray_cht_2d_dp_hf.cfg_file = "DA_configMaster.cfg" da_sp_pinArray_cht_2d_dp_hf.test_iter = 100 - da_sp_pinArray_cht_2d_dp_hf.test_vals = [-4.697305, -4.335384, -4.726171] + da_sp_pinArray_cht_2d_dp_hf.test_vals = [-2.508527, -3.227843, -2.608921] da_sp_pinArray_cht_2d_dp_hf.multizone = True test_list.append(da_sp_pinArray_cht_2d_dp_hf) @@ -307,7 +307,7 @@ def main(): da_sp_pinArray_cht_2d_mf.cfg_dir = "incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d" da_sp_pinArray_cht_2d_mf.cfg_file = "configMaster.cfg" da_sp_pinArray_cht_2d_mf.test_iter = 100 - da_sp_pinArray_cht_2d_mf.test_vals = [-4.512241, -1.154741, -1.436747, 0.148439, -5.675767, -15.727696, -50.4635702] + da_sp_pinArray_cht_2d_mf.test_vals = [-4.544489, -1.200740, -1.451677, -0.809551, -5.998322, -15.723654, -49.833480] da_sp_pinArray_cht_2d_mf.multizone = True test_list.append(da_sp_pinArray_cht_2d_mf) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index d648bb852c76..55fdf623942e 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -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 = [-0.510321, 5.387978, 0.812737, 0.061080, 0.000000] + rae2822_sst.test_vals = [-0.510318, 6.056300, 0.812738, 0.061080, 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.645780, 5.387978, 0.812737, 0.061080] + rae2822_sst_sust.test_vals = [-2.591046, 6.056300, 0.812737, 0.061080] test_list.append(rae2822_sst_sust) # Flat plate @@ -322,7 +322,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.206619, -10.433888, 0.774232, 1.021995, 0.040553, -3.477598] + turb_naca0012_sst_fixedvalues.test_vals = [-5.206619, -10.436764, 0.774095, 1.021995, 0.040553, -3.477596] turb_naca0012_sst_fixedvalues.timeout = 3200 test_list.append(turb_naca0012_sst_fixedvalues) @@ -686,7 +686,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.985486, 1.344249, 0.601107, 0.015762] + turb_naca0012_1c.test_vals = [-4.985495, 1.342937, 0.597198, 0.017227] turb_naca0012_1c.test_vals_aarch64 = [-4.992791, 1.342873, 0.557941, 0.003269] test_list.append(turb_naca0012_1c) @@ -695,7 +695,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.482877, 1.263877, 0.444556, -0.031131] + turb_naca0012_2c.test_vals = [-5.482890, 1.261919, 0.441153, -0.029540] test_list.append(turb_naca0012_2c) # NACA0012 3c @@ -703,7 +703,7 @@ def main(): turb_naca0012_3c.cfg_dir = "rans_uq/naca0012" turb_naca0012_3c.cfg_file = "turb_NACA0012_uq_3c.cfg" turb_naca0012_3c.test_iter = 10 - turb_naca0012_3c.test_vals = [-5.583759, 1.231949, 0.428507, -0.034739] + turb_naca0012_3c.test_vals = [-5.583768, 1.229824, 0.426251, -0.033154] test_list.append(turb_naca0012_3c) # NACA0012 p1c1 @@ -711,7 +711,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.127653, 1.286134, 0.782715, 0.085312] + turb_naca0012_p1c1.test_vals = [-5.127664, 1.284882, 0.779857, 0.086313] turb_naca0012_p1c1.test_vals_aarch64 = [-5.119942, 1.283920, 0.486264, -0.021518] test_list.append(turb_naca0012_p1c1) @@ -720,7 +720,7 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.553991, 1.237006, 0.523311, -0.006088] + turb_naca0012_p1c2.test_vals = [-5.554000, 1.234649, 0.503815, -0.016267] test_list.append(turb_naca0012_p1c2) ###################################### @@ -883,7 +883,7 @@ def main(): axial_stage2D.cfg_dir = "turbomachinery/axial_stage_2D" axial_stage2D.cfg_file = "Axial_stage2D.cfg" axial_stage2D.test_iter = 20 - axial_stage2D.test_vals = [1.065801, 1.519596, -2.928281, 2.573903, -2.526639, 3.017139, 106370.000000, 106370.000000, 5.726800, 64.383000] + axial_stage2D.test_vals = [1.167176, 1.598840, -2.928275, 2.573906, -2.526639, 3.017139, 106370.000000, 106370.000000, 5.726800, 64.383000] test_list.append(axial_stage2D) # 2D transonic stator restart @@ -891,7 +891,7 @@ def main(): transonic_stator_restart.cfg_dir = "turbomachinery/transonic_stator_2D" transonic_stator_restart.cfg_file = "transonic_stator_restart.cfg" transonic_stator_restart.test_iter = 20 - transonic_stator_restart.test_vals = [-4.443401, -2.566759, -2.169302, 1.651815, -1.356398, 3.172527, -471620.000000, 94.843000, -0.044669] + transonic_stator_restart.test_vals = [-4.367851, -2.492866, -2.082422, 1.727424, -1.466963, 3.224518, -471620.000000, 94.839000, -0.052025] transonic_stator_restart.test_vals_aarch64 = [-4.443401, -2.566759, -2.169302, 1.651815, -1.356398, 3.172527, -471620.000000, 94.843000, -0.044669] test_list.append(transonic_stator_restart) @@ -985,7 +985,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.621423, -1.660901] + bars_SST_2D.test_vals = [13.000000, -0.623154, -1.660901] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) @@ -1599,7 +1599,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.614167, 2.264215, 0.000771, 0.172980] + pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.260960, 0.000771, 0.172982] pywrapper_unsteadyCHT.command = TestCase.Command(exec = "python", param = "launch_unsteady_CHT_FlatPlate.py -f") pywrapper_unsteadyCHT.timeout = 1600 pywrapper_unsteadyCHT.tol = 0.00001 @@ -1613,7 +1613,7 @@ def main(): pywrapper_rigidMotion.cfg_dir = "py_wrapper/flatPlate_rigidMotion" pywrapper_rigidMotion.cfg_file = "flatPlate_rigidMotion_Conf.cfg" pywrapper_rigidMotion.test_iter = 5 - pywrapper_rigidMotion.test_vals = [-1.614166, 2.257995, 0.350208, 0.089496] + pywrapper_rigidMotion.test_vals = [-1.614166, 2.255135, 0.350208, 0.089496] pywrapper_rigidMotion.command = TestCase.Command(exec = "python", param = "launch_flatPlate_rigidMotion.py -f") pywrapper_rigidMotion.timeout = 1600 pywrapper_rigidMotion.tol = 0.00001 diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index dcfbc0a0f44c..9fb70b6a6d59 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -80,7 +80,7 @@ def main(): sp_pinArray_2d_mf_hf.cfg_dir = "../Tutorials/incompressible_flow/Inc_Streamwise_Periodic" sp_pinArray_2d_mf_hf.cfg_file = "sp_pinArray_2d_mf_hf.cfg" sp_pinArray_2d_mf_hf.test_iter = 25 - sp_pinArray_2d_mf_hf.test_vals = [-4.683630, 0.844679, -0.755570, 241.872160] + sp_pinArray_2d_mf_hf.test_vals = [-4.674156, 0.512176, -0.756308, 241.767693] sp_pinArray_2d_mf_hf.test_vals_aarch64 = [-4.683630, -0.755570, 241.872160] test_list.append(sp_pinArray_2d_mf_hf) @@ -89,7 +89,7 @@ def main(): sp_pinArray_2d_dp_hf_tp.cfg_dir = "../Tutorials/incompressible_flow/Inc_Streamwise_Periodic" sp_pinArray_2d_dp_hf_tp.cfg_file = "sp_pinArray_2d_dp_hf_tp.cfg" sp_pinArray_2d_dp_hf_tp.test_iter = 25 - sp_pinArray_2d_dp_hf_tp.test_vals = [-4.739709, 0.520033, -0.713547, 208.023676] + sp_pinArray_2d_dp_hf_tp.test_vals = [-4.727583, 0.453505, -0.714476, 208.023676] sp_pinArray_2d_dp_hf_tp.test_vals_aarch64 = [-4.739709, 0.520033, -0.713547, 208.023676] test_list.append(sp_pinArray_2d_dp_hf_tp) @@ -153,7 +153,7 @@ def main(): kenics_mixer_tutorial.cfg_dir = "../Tutorials/incompressible_flow/Inc_Species_Transport_Composition_Dependent_Model" kenics_mixer_tutorial.cfg_file = "kenics_mixer_tutorial.cfg" kenics_mixer_tutorial.test_iter = 10 - kenics_mixer_tutorial.test_vals = [-7.490472, -6.823803, -6.838373, -6.383764, -7.907928, -3.062404, -7.452184, 5.000000, -1.858094, 4.000000, -5.318066, 3.000000, -6.371967, 0.025661, 0.000000, 0.025661, 0.000000, 62.736000, 8.470600, 46.738000, 7.527900] + kenics_mixer_tutorial.test_vals = [-7.490438, -6.823937, -6.838581, -6.383852, -7.879414, -3.004710, -7.452189, 5.000000, -1.857319, 4.000000, -5.336948, 3.000000, -6.369478, 0.025670, 0.000000, 0.025670, 0.000000, 62.718000, 8.462700, 46.726000, 7.529400] kenics_mixer_tutorial.command = TestCase.Command("mpirun -n 2", "SU2_CFD") test_list.append(kenics_mixer_tutorial) @@ -237,7 +237,7 @@ def main(): tutorial_trans_flatplate_T3A.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A" tutorial_trans_flatplate_T3A.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3A.test_iter = 20 - tutorial_trans_flatplate_T3A.test_vals = [-5.808996, -2.070606, -3.969765, -0.277943, -1.953093, 1.708472, -3.514943, 0.357411] + tutorial_trans_flatplate_T3A.test_vals = [-5.790137, -2.054834, -3.894661, -0.255074, -1.747145, 5.119341, -3.493237, 0.393262] tutorial_trans_flatplate_T3A.test_vals_aarch64 = [-5.808996, -2.070606, -3.969765, -0.277943, -1.953289, 1.708472, -3.514943, 0.357411] tutorial_trans_flatplate_T3A.no_restart = True test_list.append(tutorial_trans_flatplate_T3A) @@ -247,7 +247,7 @@ def main(): tutorial_trans_flatplate_T3Am.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A-" tutorial_trans_flatplate_T3Am.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3Am.test_iter = 20 - tutorial_trans_flatplate_T3Am.test_vals = [-5.538098, -1.681627, -2.877016, -0.055689, -3.695534, 3.413620, -2.385344, 1.103633] + tutorial_trans_flatplate_T3Am.test_vals = [-5.590359, -1.700867, -3.099309, -0.105449, -3.750523, 3.287643, -2.394576, 1.119623] tutorial_trans_flatplate_T3Am.test_vals_aarch64 = [-5.540938, -1.681627, -2.878831, -0.058224, -3.695533, 3.413628, -2.385345, 1.103633] tutorial_trans_flatplate_T3Am.no_restart = True test_list.append(tutorial_trans_flatplate_T3Am) @@ -283,7 +283,7 @@ def main(): tutorial_nicfd_nozzle.cfg_dir = "../Tutorials/compressible_flow/NICFD_nozzle" tutorial_nicfd_nozzle.cfg_file = "NICFD_nozzle.cfg" tutorial_nicfd_nozzle.test_iter = 20 - tutorial_nicfd_nozzle.test_vals = [-1.799262, -11.343263, 4.631692, 0.000000, 0.000000] + tutorial_nicfd_nozzle.test_vals = [-1.799850, -6.002739, 4.635400, 0.000000, 0.000000] tutorial_nicfd_nozzle.no_restart = True test_list.append(tutorial_nicfd_nozzle) diff --git a/TestCases/vandv.py b/TestCases/vandv.py index b5a0ebdc3d78..a361b083a180 100644 --- a/TestCases/vandv.py +++ b/TestCases/vandv.py @@ -81,7 +81,7 @@ def main(): swbli_sst.cfg_dir = "vandv/rans/swbli" swbli_sst.cfg_file = "config_sst.cfg" swbli_sst.test_iter = 5 - swbli_sst.test_vals = [-11.569218, -10.909085, -11.607979, -10.431162, -11.407582, -2.637788, 0.001816, -1.305819, -3.514509, 13.399000] + swbli_sst.test_vals = [-11.569218, -10.909086, -11.607984, -10.431163, -11.407588, -2.637660, 0.001816, -1.305818, -3.514590, 13.399000] test_list.append(swbli_sst) # DSMA661 - SA From daef6c6a78e434953fb45c339bc6033c4c1b63d5 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 13 Feb 2026 13:04:55 +0530 Subject: [PATCH 081/229] Add functionality for unsteady restart handling in CSinglezoneDriver and CMultizoneDriver - Implemented WriteUnsteadyRestartPreviousStep method to manage writing of previous timestep data when stopping calculations. - Updated COutput to conditionally write only restart files. - Introduced SwapSolutionWithOld method in CVariable for swapping current and previous solutions. - Enhanced driver output methods to support second-order unsteady time stepping requirements. --- SU2_CFD/include/drivers/CDriver.hpp | 12 ++++++++++++ SU2_CFD/include/output/COutput.hpp | 3 ++- SU2_CFD/include/variables/CVariable.hpp | 5 +++++ SU2_CFD/src/drivers/CDriver.cpp | 20 ++++++++++++++++++++ SU2_CFD/src/drivers/CMultizoneDriver.cpp | 23 +++++++++++++++++++++++ SU2_CFD/src/drivers/CSinglezoneDriver.cpp | 21 +++++++++++++++++++++ SU2_CFD/src/output/COutput.cpp | 9 ++++++++- SU2_CFD/src/variables/CVariable.cpp | 6 ++++++ 8 files changed, 97 insertions(+), 2 deletions(-) diff --git a/SU2_CFD/include/drivers/CDriver.hpp b/SU2_CFD/include/drivers/CDriver.hpp index b01f560fa281..4916386bf415 100644 --- a/SU2_CFD/include/drivers/CDriver.hpp +++ b/SU2_CFD/include/drivers/CDriver.hpp @@ -166,6 +166,18 @@ class CDriver : public CDriverBase { */ void RestartSolver(CSolver*** solver, CGeometry** geometry, CConfig* config, bool update_geo); + /*! + * \brief Write restart files for the previous timestep (Solution_Old) when stopping at max_time + * or last iteration with second-order unsteady time stepping. + * \param[in] geometry - Geometrical definition of the problem. + * \param[in] config - Definition of the particular problem. + * \param[in] solver - Container vector with all the solutions. + * \param[in] output - Output instance for writing files. + * \param[in] TimeIter - Current time iteration (restart for TimeIter-1 is written). + */ + void WriteUnsteadyRestartPreviousStep(CGeometry* geometry, CConfig* config, CSolver** solver, + COutput* output, unsigned long TimeIter); + /*! * \brief Definition and allocation of all solution classes. * \param[in] solver - Container vector with all the solutions. diff --git a/SU2_CFD/include/output/COutput.hpp b/SU2_CFD/include/output/COutput.hpp index ce4e29ed2c17..9a5cd0e4d94a 100644 --- a/SU2_CFD/include/output/COutput.hpp +++ b/SU2_CFD/include/output/COutput.hpp @@ -591,10 +591,11 @@ class COutput { * \param[in] solver_container - Container vector with all the solutions. * \param[in] iter - The current time, outer or inner iteration index. * \param[in] force_writing - If , writing of output files is forced without checking the output frequency. + * \param[in] write_restart_only - If , only restart (and CSV restart) volume files are written. * \return if output files have been written to disk. */ bool SetResultFiles(CGeometry *geometry, CConfig *config, CSolver** solver_container, - unsigned long iter, bool force_writing = false); + unsigned long iter, bool force_writing = false, bool write_restart_only = false); /*! * \brief Get convergence time convergence of the specified windowed-time-averaged ouput of the problem. diff --git a/SU2_CFD/include/variables/CVariable.hpp b/SU2_CFD/include/variables/CVariable.hpp index bc4bc55e57c7..7c110e9670d9 100644 --- a/SU2_CFD/include/variables/CVariable.hpp +++ b/SU2_CFD/include/variables/CVariable.hpp @@ -281,6 +281,11 @@ class CVariable { */ void Set_Solution(); + /*! + * \brief Swap Solution and Solution_Old (e.g. for writing unsteady restart at previous timestep). + */ + void SwapSolutionWithOld(); + /*! * \brief Set the variable solution at time n. */ diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index 961ce04832ff..c30b2a26f1cc 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -1155,6 +1155,26 @@ void CDriver::RestartSolver(CSolver ***solver, CGeometry **geometry, } +void CDriver::WriteUnsteadyRestartPreviousStep(CGeometry* geometry, CConfig* config, CSolver** solver, + COutput* output, unsigned long TimeIter) { + + /*--- Swap Solution and Solution_Old so output writes the previous timestep. ---*/ + for (auto iSol = 0u; iSol < MAX_SOLS; ++iSol) { + auto* sol = solver[iSol]; + if (sol && !sol->GetAdjoint() && sol->GetNodes()) sol->GetNodes()->SwapSolutionWithOld(); + } + + config->SetTimeIter(TimeIter - 1); + output->SetResultFiles(geometry, config, solver, TimeIter - 1, true, true); + config->SetTimeIter(TimeIter); + + /*--- Swap back to restore current solution. ---*/ + for (auto iSol = 0u; iSol < MAX_SOLS; ++iSol) { + auto* sol = solver[iSol]; + if (sol && !sol->GetAdjoint() && sol->GetNodes()) sol->GetNodes()->SwapSolutionWithOld(); + } +} + void CDriver::FinalizeSolver(CSolver ****solver, CGeometry **geometry, CConfig *config, unsigned short val_iInst) { diff --git a/SU2_CFD/src/drivers/CMultizoneDriver.cpp b/SU2_CFD/src/drivers/CMultizoneDriver.cpp index 3843fe320370..77cca5dbdf64 100644 --- a/SU2_CFD/src/drivers/CMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CMultizoneDriver.cpp @@ -462,6 +462,29 @@ void CMultizoneDriver::Output(unsigned long TimeIter) { StartTime = SU2_MPI::Wtime(); + /*--- When stopping (max_time or last iteration), second-order unsteady restart needs both + * timestep N and N-1. Write the previous timestep (N-1) first if not already written. ---*/ + if (StopCalc && TimeIter > 0) { + for (iZone = 0; iZone < nZone; iZone++) { + auto* config = config_container[iZone]; + if (!config->GetTime_Domain() || config->GetTime_Marching() != TIME_MARCHING::DT_STEPPING_2ND) continue; + bool write_restart = false; + const auto* volFiles = config->GetVolumeOutputFiles(); + for (unsigned short iFile = 0; iFile < config->GetnVolumeOutputFiles(); iFile++) { + const auto fmt = volFiles[iFile]; + if (fmt == OUTPUT_TYPE::RESTART_ASCII || fmt == OUTPUT_TYPE::RESTART_BINARY || fmt == OUTPUT_TYPE::CSV) { + write_restart = true; + break; + } + } + if (write_restart) { + WriteUnsteadyRestartPreviousStep(geometry_container[iZone][INST_0][MESH_0], config, + solver_container[iZone][INST_0][MESH_0], + output_container[iZone], TimeIter); + } + } + } + bool wrote_files = false; for (iZone = 0; iZone < nZone; iZone++){ diff --git a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp index 23d6c790db6a..9c2b9eba4e16 100644 --- a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp +++ b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp @@ -195,6 +195,27 @@ void CSinglezoneDriver::Output(unsigned long TimeIter) { StartTime = SU2_MPI::Wtime(); + /*--- When stopping (max_time or last iteration), second-order unsteady restart needs both + * timestep N and N-1. Write the previous timestep (N-1) first if not already written. ---*/ + auto* config = config_container[ZONE_0]; + if (StopCalc && TimeIter > 0 && config->GetTime_Domain() && + config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND) { + bool write_restart = false; + const auto* volFiles = config->GetVolumeOutputFiles(); + for (unsigned short iFile = 0; iFile < config->GetnVolumeOutputFiles(); iFile++) { + const auto fmt = volFiles[iFile]; + if (fmt == OUTPUT_TYPE::RESTART_ASCII || fmt == OUTPUT_TYPE::RESTART_BINARY || fmt == OUTPUT_TYPE::CSV) { + write_restart = true; + break; + } + } + if (write_restart) { + WriteUnsteadyRestartPreviousStep(geometry_container[ZONE_0][INST_0][MESH_0], config, + solver_container[ZONE_0][INST_0][MESH_0], + output_container[ZONE_0], TimeIter); + } + } + bool wrote_files = output_container[ZONE_0]->SetResultFiles(geometry_container[ZONE_0][INST_0][MESH_0], config_container[ZONE_0], solver_container[ZONE_0][INST_0][MESH_0], diff --git a/SU2_CFD/src/output/COutput.cpp b/SU2_CFD/src/output/COutput.cpp index 0be8bfb759eb..fcb2c830e78f 100644 --- a/SU2_CFD/src/output/COutput.cpp +++ b/SU2_CFD/src/output/COutput.cpp @@ -805,7 +805,7 @@ bool COutput::GetCauchyCorrectedTimeConvergence(const CConfig *config){ } bool COutput::SetResultFiles(CGeometry *geometry, CConfig *config, CSolver** solver_container, - unsigned long iter, bool force_writing) { + unsigned long iter, bool force_writing, bool write_restart_only) { bool isFileWrite = false, dataIsLoaded = false; const auto nVolumeFiles = config->GetnVolumeOutputFiles(); @@ -816,6 +816,13 @@ bool COutput::SetResultFiles(CGeometry *geometry, CConfig *config, CSolver** sol for (unsigned short iFile = 0; iFile < nVolumeFiles; iFile++) { + /*--- When writing only restart files, skip non-restart volume output types. ---*/ + if (write_restart_only) { + const auto fmt = VolumeFiles[iFile]; + if (fmt != OUTPUT_TYPE::RESTART_ASCII && fmt != OUTPUT_TYPE::RESTART_BINARY && fmt != OUTPUT_TYPE::CSV) + continue; + } + /*--- Collect the volume data from the solvers. * If time-domain is enabled, we also load the data although we don't output it, * since we might want to do time-averaging. ---*/ diff --git a/SU2_CFD/src/variables/CVariable.cpp b/SU2_CFD/src/variables/CVariable.cpp index 7de950de6224..4db791bf575e 100644 --- a/SU2_CFD/src/variables/CVariable.cpp +++ b/SU2_CFD/src/variables/CVariable.cpp @@ -27,6 +27,7 @@ #include "../../include/variables/CVariable.hpp" #include "../../../Common/include/parallelization/omp_structure.hpp" +#include CVariable::CVariable(unsigned long npoint, unsigned long nvar, const CConfig *config) { @@ -91,6 +92,11 @@ void CVariable::Set_Solution() { parallelCopy(Solution_Old.size(), Solution_Old.data(), Solution.data()); } +void CVariable::SwapSolutionWithOld() { + assert(Solution.size() == Solution_Old.size()); + std::swap(Solution, Solution_Old); +} + void CVariable::Set_Solution_time_n() { assert(Solution_time_n.size() == Solution.size()); parallelCopy(Solution.size(), Solution.data(), Solution_time_n.data()); From 19fd3ce8589ca0a03e3810e3a0f89edbfdb4c188 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 14 Feb 2026 00:17:56 +0530 Subject: [PATCH 082/229] Refactor unsteady restart logic to detect max_time explicitly - Changed condition from generic StopCalc flag to specific max_time detection - CSinglezoneDriver: Detects final_time_reached = (cur_time >= max_time) - CMultizoneDriver: Applies same pattern for all zones - Maintains original functionality with clearer, more maintainable code - Specific to time-domain simulations with second-order time stepping This addresses maintainer feedback to use explicit time checks instead of generic stopping conditions, ensuring the fix properly generalizes to all problem types and follows SU2 monitoring patterns. --- SU2_CFD/src/drivers/CMultizoneDriver.cpp | 13 ++++++-- SU2_CFD/src/drivers/CSinglezoneDriver.cpp | 39 +++++++++++++---------- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/SU2_CFD/src/drivers/CMultizoneDriver.cpp b/SU2_CFD/src/drivers/CMultizoneDriver.cpp index 77cca5dbdf64..8a323f0380b0 100644 --- a/SU2_CFD/src/drivers/CMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CMultizoneDriver.cpp @@ -462,12 +462,19 @@ void CMultizoneDriver::Output(unsigned long TimeIter) { StartTime = SU2_MPI::Wtime(); - /*--- When stopping (max_time or last iteration), second-order unsteady restart needs both - * timestep N and N-1. Write the previous timestep (N-1) first if not already written. ---*/ - if (StopCalc && TimeIter > 0) { + /*--- When stopping due to max_time with second-order unsteady time stepping, we need to write + * both the previous timestep (N-1) and current timestep (N) for proper restart capability. ---*/ + if (TimeIter > 0) { for (iZone = 0; iZone < nZone; iZone++) { auto* config = config_container[iZone]; if (!config->GetTime_Domain() || config->GetTime_Marching() != TIME_MARCHING::DT_STEPPING_2ND) continue; + + const su2double cur_time = output_container[iZone]->GetHistoryFieldValue("CUR_TIME"); + const su2double max_time = config->GetMax_Time(); + const bool final_time_reached = cur_time >= max_time; + + if (!final_time_reached) continue; + bool write_restart = false; const auto* volFiles = config->GetVolumeOutputFiles(); for (unsigned short iFile = 0; iFile < config->GetnVolumeOutputFiles(); iFile++) { diff --git a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp index 9c2b9eba4e16..dae966c26296 100644 --- a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp +++ b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp @@ -195,24 +195,31 @@ void CSinglezoneDriver::Output(unsigned long TimeIter) { StartTime = SU2_MPI::Wtime(); - /*--- When stopping (max_time or last iteration), second-order unsteady restart needs both - * timestep N and N-1. Write the previous timestep (N-1) first if not already written. ---*/ + /*--- When stopping due to max_time with second-order unsteady time stepping, we need to write + * both the previous timestep (N-1) and current timestep (N) for proper restart capability. ---*/ auto* config = config_container[ZONE_0]; - if (StopCalc && TimeIter > 0 && config->GetTime_Domain() && - config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND) { - bool write_restart = false; - const auto* volFiles = config->GetVolumeOutputFiles(); - for (unsigned short iFile = 0; iFile < config->GetnVolumeOutputFiles(); iFile++) { - const auto fmt = volFiles[iFile]; - if (fmt == OUTPUT_TYPE::RESTART_ASCII || fmt == OUTPUT_TYPE::RESTART_BINARY || fmt == OUTPUT_TYPE::CSV) { - write_restart = true; - break; + const bool time_domain = config->GetTime_Domain(); + + if (time_domain && config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND && TimeIter > 0) { + const su2double cur_time = output_container[ZONE_0]->GetHistoryFieldValue("CUR_TIME"); + const su2double max_time = config->GetMax_Time(); + const bool final_time_reached = cur_time >= max_time; + + if (final_time_reached) { + bool write_restart = false; + const auto* volFiles = config->GetVolumeOutputFiles(); + for (unsigned short iFile = 0; iFile < config->GetnVolumeOutputFiles(); iFile++) { + const auto fmt = volFiles[iFile]; + if (fmt == OUTPUT_TYPE::RESTART_ASCII || fmt == OUTPUT_TYPE::RESTART_BINARY || fmt == OUTPUT_TYPE::CSV) { + write_restart = true; + break; + } + } + if (write_restart) { + WriteUnsteadyRestartPreviousStep(geometry_container[ZONE_0][INST_0][MESH_0], config, + solver_container[ZONE_0][INST_0][MESH_0], + output_container[ZONE_0], TimeIter); } - } - if (write_restart) { - WriteUnsteadyRestartPreviousStep(geometry_container[ZONE_0][INST_0][MESH_0], config, - solver_container[ZONE_0][INST_0][MESH_0], - output_container[ZONE_0], TimeIter); } } From ac924d180c9ad9ae4fcfcbf18d9872e1610bd761 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Sat, 14 Feb 2026 15:50:49 -0800 Subject: [PATCH 083/229] Apply suggestions from code review --- .github/workflows/regression.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 44645beb61f7..c1bebd3928ff 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -211,7 +211,7 @@ jobs: uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: # -t -c - args: -b ${{github.ref}} -t TFC_python -c develop -s ${{matrix.testscript}} + args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} - name: Cleanup uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: From 030cb83da66d31959ec82472f06e8f9706a64916 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 15 Feb 2026 21:19:21 +0100 Subject: [PATCH 084/229] cleanup and implement review suggestions --- Common/src/geometry/CMultiGridGeometry.cpp | 142 ++++++------------ .../integration/CMultiGridIntegration.hpp | 4 +- .../src/integration/CMultiGridIntegration.cpp | 4 +- 3 files changed, 51 insertions(+), 99 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 6e0468cbea96..1e402b884ed4 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -59,7 +59,8 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Set a marker to indicate indirect agglomeration, for quads and hexs, i.e. consider up to neighbors of neighbors. For other levels this information is propagated down during their construction. ---*/ - if (iMesh == MESH_1) { + + if (iMesh == MESH_1) { for (auto iPoint = 0ul; iPoint < fine_grid->GetnPoint(); iPoint++) fine_grid->nodes->SetAgglomerate_Indirect(iPoint, false); @@ -75,6 +76,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } /*--- Create the coarse grid structure using as baseline the fine grid ---*/ + CMultiGridQueue MGQueue_InnerCV(fine_grid->GetnPoint()); vector Suitable_Indirect_Neighbors; @@ -146,6 +148,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un // The seed/parent is one valley, so we set this part to true // if the child is on the same valley, we set it to true as well. agglomerate_seed = true; + /*--- Euler walls: check curvature-based agglomeration criterion ---*/ if (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL) { /*--- Allow agglomeration if marker is straight OR local curvature is small ---*/ @@ -171,13 +174,13 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } - /*--- Note that in 2D, this is a corner and we do not agglomerate unless they both are SEND_RECEIVE. ---*/ + /*--- Note that in 2D, this is a corner and we do not agglomerate unless one of them is SEND_RECEIVE. ---*/ /*--- In 3D, we agglomerate if the 2 markers are the same. ---*/ if (counter == 2) { - /*--- agglomerate if one of the 2 markers are MPI markers. ---*/ + if (nDim == 2) { - // agglomerate_seed = ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || - // (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)); + agglomerate_seed = ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || + (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)); } /*--- agglomerate if both markers are the same. ---*/ if (nDim == 3) agglomerate_seed = (copy_marker[0] == copy_marker[1]); @@ -206,19 +209,25 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } /*--- If there are more than 2 markers, the aglomeration will be discarded ---*/ + if (counter > 2) agglomerate_seed = false; /*--- If the seed (parent) can be agglomerated, we try to agglomerate connected childs to the parent ---*/ /*--- Note that in 2D we allow a maximum of 4 nodes to be agglomerated ---*/ + if (agglomerate_seed) { /*--- Now we do a sweep over all the nodes that surround the seed point ---*/ + for (auto CVPoint : fine_grid->nodes->GetPoints(iPoint)) { /*--- The new point can be agglomerated ---*/ + if (SetBoundAgglomeration(CVPoint, marker_seed, fine_grid, config)) { /*--- We set the value of the parent ---*/ + fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); /*--- We set the value of the child ---*/ + nodes->SetChildren_CV(Index_CoarseCV, nChildren, CVPoint); nChildren++; /*--- In 2D, we agglomerate exactly 2 nodes if the nodes are on the line edge. ---*/ @@ -238,18 +247,23 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un SetSuitableNeighbors(Suitable_Indirect_Neighbors, iPoint, Index_CoarseCV, fine_grid); /*--- Now we do a sweep over all the indirect nodes that can be added ---*/ + for (auto CVPoint : Suitable_Indirect_Neighbors) { /*--- The new point can be agglomerated ---*/ + if (SetBoundAgglomeration(CVPoint, marker_seed, fine_grid, config)) { /*--- We set the value of the parent ---*/ + fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); /*--- We set the indirect agglomeration information of the corse point based on its children in the fine grid. ---*/ + if (fine_grid->nodes->GetAgglomerate_Indirect(CVPoint)) nodes->SetAgglomerate_Indirect(Index_CoarseCV, true); /*--- We set the value of the child ---*/ + nodes->SetChildren_CV(Index_CoarseCV, nChildren, CVPoint); nChildren++; /*--- Apply maxAgglomSize limit for 3D internal boundary face nodes. ---*/ @@ -302,6 +316,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } /*--- STEP 2: Agglomerate the domain points. ---*/ + auto iteration = 0ul; while (!MGQueue_InnerCV.EmptyQueue() && (iteration < fine_grid->GetnPoint())) { const auto iPoint = MGQueue_InnerCV.NextCV(); @@ -363,8 +378,10 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un // if we have reached the maximum, get out. if (nChildren == maxAgglomSize) break; /*--- The new point can be agglomerated ---*/ + if ((!fine_grid->nodes->GetAgglomerate(CVPoint)) && (fine_grid->nodes->GetDomain(CVPoint))) { /*--- We set the value of the parent ---*/ + fine_grid->nodes->SetParent_CV(CVPoint, Index_CoarseCV); /*--- We set the indirect agglomeration information ---*/ @@ -418,6 +435,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un for (auto iCoarsePoint = 0ul; iCoarsePoint < nPointDomain; iCoarsePoint++) { if (nodes->GetnPoint(iCoarsePoint) == 1) { /*--- Find the neighbor of the isolated point. This neighbor is the right control volume ---*/ + const auto iCoarsePoint_Complete = nodes->GetPoint(iCoarsePoint, 0); /*--- Check if merging would exceed the maximum agglomeration size ---*/ @@ -476,6 +494,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } /*--- Update the number of children control volumes ---*/ + nodes->SetnChildren_CV(iCoarsePoint_Complete, nChildren); nodes->SetnChildren_CV(iCoarsePoint, 0); } @@ -563,6 +582,9 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Skip if already agglomerated (first-wins policy) ---*/ if (existing_parent != std::numeric_limits::max()) continue; + /*--- Skip if received parent is invalid (sending rank didn't agglomerate this point) ---*/ + if (Parent_Remote[iVertex] == std::numeric_limits::max()) continue; + /*--- Find which parent this vertex maps to ---*/ for (auto jVertex = 0ul; jVertex < Aux_Parent.size(); jVertex++) { if (Parent_Remote[iVertex] == Aux_Parent[jVertex]) { @@ -591,12 +613,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } - /*--- Validate that parent mapping was found (only matters if not skipped later) ---*/ - if (Parent_Local[iVertex] == std::numeric_limits::max()) { - SU2_MPI::Error(string("MPI agglomeration failed to map parent index ") + to_string(Parent_Remote[iVertex]) + - string(" for vertex ") + to_string(iVertex), - CURRENT_FUNCTION); - } Children_Local[iVertex] = fine_grid->vertex[MarkerR][iVertex]->GetNode(); } @@ -605,46 +621,29 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un Index_CoarseCV += nUsedParents; /*--- Debug counters ---*/ - unsigned long nConflicts = 0, nSkipped = 0, nOutOfBounds = 0, nSuccess = 0; + unsigned long nSkipped = 0, nSuccess = 0; /*--- Create the final structure ---*/ for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { - const auto iPoint_Coarse = Parent_Local[iVertex]; const auto iPoint_Fine = Children_Local[iVertex]; - /*--- Debug: Check for out-of-bounds access ---*/ - if (iPoint_Coarse >= Index_CoarseCV) { - cout << "ERROR [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << "]: Out-of-bounds coarse CV index " << iPoint_Coarse << " >= " << Index_CoarseCV << " (vertex " - << iVertex << ", fine point " << iPoint_Fine << ")" << endl; - nOutOfBounds++; - continue; - } - - /*--- Solution 1: Skip if this halo point was already agglomerated ---*/ + /*--- Skip if this halo point was already agglomerated (first-wins policy) ---*/ auto existing_parent = fine_grid->nodes->GetParent_CV(iPoint_Fine); if (existing_parent != std::numeric_limits::max()) { - if (existing_parent != iPoint_Coarse) { - /*--- Conflict detected: different parent from different interface ---*/ - nConflicts++; - - /*--- Only print detailed info for first few conflicts or if suspicious ---*/ - if (nConflicts <= 5 || existing_parent < nPointDomain) { - cout << "INFO [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR << "]: Halo point " - << iPoint_Fine << " already agglomerated to parent " << existing_parent - << (existing_parent < nPointDomain ? " (DOMAIN CV!)" : " (halo CV)") << ", skipping reassignment to " - << iPoint_Coarse << " (from rank " << receive_from << ")" << endl; - } - } else { - /*--- Same parent from different interface (duplicate) - just skip silently ---*/ - nSkipped++; - } + nSkipped++; continue; // First-wins: keep existing assignment } + /*--- Skip if parent mapping is invalid (sender didn't agglomerate) ---*/ + const auto iPoint_Coarse = Parent_Local[iVertex]; + if (iPoint_Coarse == std::numeric_limits::max()) { + nSkipped++; + continue; + } + /*--- First assignment for this halo point - proceed with agglomeration ---*/ - /*--- Critical fix: Append to existing children, don't overwrite ---*/ + /*--- Append to existing children, don't overwrite ---*/ auto existing_children_count = nodes->GetnChildren_CV(iPoint_Coarse); fine_grid->nodes->SetParent_CV(iPoint_Fine, iPoint_Coarse); @@ -654,45 +653,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un nSuccess++; } - /*--- Debug: Report statistics for this marker pair ---*/ - cout << "MPI Agglomeration [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR << " (rank " << send_to - << " <-> " << receive_from << ")]: " << nSuccess << " assigned, " << nSkipped << " duplicates, " - << nConflicts << " conflicts"; - if (nOutOfBounds > 0) { - cout << ", " << nOutOfBounds << " OUT-OF-BOUNDS (CRITICAL!)"; - } - cout << endl; - - if (nConflicts > 5) { - cout << " Note: Only first 5 conflicts shown in detail, total conflicts = " << nConflicts << endl; - } - - /*--- Debug: Validate buffer size assumption ---*/ - if (nVertexS != nVertexR) { - cout << "WARNING [Rank " << rank << ", Marker " << MarkerS << "/" << MarkerR - << "]: Asymmetric interface - nVertexS=" << nVertexS << " != nVertexR=" << nVertexR << endl; - } - } - } - - /*--- Post-process: Check for orphaned coarse CVs (should be none with new logic) ---*/ - - if (size > SINGLE_NODE) { - unsigned long nOrphaned = 0; - - /*--- Count orphaned CVs for reporting ---*/ - for (auto iCoarse = nPointDomain; iCoarse < Index_CoarseCV; iCoarse++) { - if (nodes->GetnChildren_CV(iCoarse) == 0) { - nOrphaned++; - /*--- This shouldn't happen with the new parent prefiltering logic ---*/ - cout << "WARNING [Rank " << rank << "]: Orphaned halo CV " << iCoarse - << " detected (should not occur with current logic)" << endl; - } - } - - if (nOrphaned > 0) { - cout << "WARNING [Rank " << rank << "]: " << nOrphaned - << " orphaned halo coarse CVs found - this indicates a logic error!" << endl; } } @@ -723,6 +683,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un const su2double ratio = su2double(Global_nPointFine) / su2double(Global_nPointCoarse); cout << "********** ratio = " << ratio << endl; // lower value leads to more levels being accepted. + if (((nDim == 2) && (ratio < 1.5)) || ((nDim == 3) && (ratio < 1.5))) { config->SetMGLevels(iMesh - 1); } else if (rank == MASTER_NODE) { @@ -839,31 +800,24 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vectorGetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE)) { - // if (copy_marker[0] == marker_seed[1]) { - // agglomerate_CV = false; - // } - // } - // if ((marker_seed.size() == 2) && (config->GetMarker_All_KindBC(marker_seed[1]) == SEND_RECEIVE)) { - // if (copy_marker[0] == marker_seed[0]) { - // agglomerate_CV = false; - // } - // } - - /*--- Note: If there is only one marker, but the marker is the SEND_RECEIVE, then the point is actually an - interior point and we do not agglomerate. ---*/ + // we also allow agglomeration if the seed has 2 markers, one of them is the same as the candidate, and the other is a send-receive marker. + if ((marker_seed.size() == 2) && ((copy_marker[0] == marker_seed[0]) || (copy_marker[0] == marker_seed[1]))) { + // check that the other marker is a send-receive marker + unsigned short other_marker = (copy_marker[0] == marker_seed[0]) ? marker_seed[1] : marker_seed[0]; + if (config->GetMarker_All_KindBC(other_marker) == SEND_RECEIVE) { + agglomerate_CV = true; + } + } + } /*--- If there are two markers in the vertex that is going to be aglomerated ---*/ - if (counter == 2) { /*--- In 2D this is a corner and we do not agglomerate ---*/ if (nDim == 2) { agglomerate_CV = false; } /*--- Both markers have to be the same. ---*/ - if (marker_seed.size() == 2) { if (((copy_marker[0] == marker_seed[0]) && (copy_marker[1] == marker_seed[1])) || ((copy_marker[0] == marker_seed[1]) && (copy_marker[1] == marker_seed[0]))) { diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index c720235da622..1e2dd10ecb3c 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -164,11 +164,9 @@ class CMultiGridIntegration final : public CIntegration { * \param[in] geo_fine - Geometrical definition of the fine grid. * \param[in] geo_coarse - Geometrical definition of the coarse grid. * \param[in] config - Definition of the particular problem. - * \param[in] iMesh - Index of the mesh in multigrid computations. - * \param[in] InclSharedDomain - Include the shared domain in the interpolation. */ void SetRestricted_Solution(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, - CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config, unsigned short iMesh = 999); + CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config); /*! * \brief Initialize the adjoint solution using the primal problem. diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 4dade2b0ca0e..2bfd6ffdac24 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -448,7 +448,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Compute $r_(k+1) = F_(k+1)(I^(k+1)_k u_k)$ ---*/ - SetRestricted_Solution(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config, iMesh); + SetRestricted_Solution(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config); solver_coarse->Preprocessing(geometry_coarse, solver_container_coarse, config, iMesh+1, NO_RK_ITER, RunTime_EqSystem, false); @@ -831,7 +831,7 @@ void CMultiGridIntegration::SetResidual_Term(CGeometry *geometry, CSolver *solve } void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, - CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config, unsigned short iMesh) { + CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { const unsigned short Solver_Position = config->GetContainerPosition(RunTime_EqSystem); const bool grid_movement = config->GetGrid_Movement(); From aa373bd0294b504705a8f8d5340b179cc32865b4 Mon Sep 17 00:00:00 2001 From: Nijso Date: Sun, 15 Feb 2026 21:22:44 +0100 Subject: [PATCH 085/229] Potential fix for code scanning alert no. 6155: Commented-out code Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- Common/src/geometry/CMultiGridGeometry.cpp | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 1e402b884ed4..936297889d76 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -839,18 +839,6 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vector& Suitable_Indirect_Neighbors, unsigned long iPoint, unsigned long Index_CoarseCV, const CGeometry* fine_grid) const { - /*--- Create a list with the first neighbors, including the seed. ---*/ - - vector First_Neighbor_Points; - First_Neighbor_Points.push_back(iPoint); - for (auto jPoint : fine_grid->nodes->GetPoints(iPoint)) First_Neighbor_Points.push_back(jPoint); - - /*--- Create a list with the second neighbors, without first, and seed neighbors. ---*/ - - vector Second_Neighbor_Points, Second_Origin_Points, Suitable_Second_Neighbors; - - for (auto jPoint : fine_grid->nodes->GetPoints(iPoint)) { - for (auto kPoint : fine_grid->nodes->GetPoints(jPoint)) { /*--- Check that the second neighbor does not belong to the first neighbors or the seed. ---*/ auto end = First_Neighbor_Points.end(); From 047c80ff07383791a727da1326a4b707f909c91d Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 15 Feb 2026 21:44:11 +0100 Subject: [PATCH 086/229] remove unused includes --- Common/src/geometry/CMultiGridGeometry.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 1e402b884ed4..97d09c7ded46 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -29,12 +29,9 @@ #include "../../include/geometry/CMultiGridQueue.hpp" #include "../../include/toolboxes/printing_toolbox.hpp" #include "../../../Common/include/toolboxes/geometry_toolbox.hpp" -#include -#include -#include +//#include #include #include -#include #include CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, unsigned short iMesh) : CGeometry() { From bd30d3ecb18746996401b82d992adf08eb715bfe Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 15 Feb 2026 18:09:48 -0800 Subject: [PATCH 087/229] option to duplicate markers --- Common/include/CConfig.hpp | 11 +++++++++- .../geometry/meshreader/CMeshReaderBase.hpp | 6 +++++ Common/include/linear_algebra/CSysMatrix.hpp | 2 +- Common/src/CConfig.cpp | 5 ++++- .../geometry/meshreader/CBoxMeshReaderFEM.cpp | 3 +++ .../geometry/meshreader/CBoxMeshReaderFVM.cpp | 3 +++ .../meshreader/CCGNSMeshReaderFEM.cpp | 3 +++ .../meshreader/CCGNSMeshReaderFVM.cpp | 3 +++ .../geometry/meshreader/CMeshReaderBase.cpp | 22 +++++++++++++++++++ .../meshreader/CRectangularMeshReaderFEM.cpp | 3 +++ .../meshreader/CRectangularMeshReaderFVM.cpp | 3 +++ .../meshreader/CSU2ASCIIMeshReaderFEM.cpp | 3 +++ .../meshreader/CSU2ASCIIMeshReaderFVM.cpp | 3 +++ .../fea_fsi/ThermalBeam_3d/configBeam_3d.cfg | 10 +++++---- config_template.cfg | 4 ++++ 15 files changed, 77 insertions(+), 7 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index dc96c21ad3b7..7c07dd8a0cc0 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -740,6 +740,7 @@ class CConfig { nMarker_ZoneInterface, /*!< \brief Number of markers in the zone interface. */ nMarker_Plotting, /*!< \brief Number of markers to plot. */ nMarker_Analyze, /*!< \brief Number of markers to analyze. */ + nMarker_Create_Copy, /*!< \brief Number of markers to duplicate. */ nMarker_Moving, /*!< \brief Number of markers in motion (DEFORMING, MOVING_WALL). */ nMarker_PyCustom, /*!< \brief Number of markers that are customizable in Python. */ nMarker_DV, /*!< \brief Number of markers affected by the design variables. */ @@ -751,6 +752,7 @@ class CConfig { *Marker_GeoEval, /*!< \brief Markers to evaluate geometry. */ *Marker_Plotting, /*!< \brief Markers to plot. */ *Marker_Analyze, /*!< \brief Markers to analyze. */ + *Marker_Create_Copy, /*!< \brief Markers to duplicate. */ *Marker_ZoneInterface, /*!< \brief Markers in the FSI interface. */ *Marker_Moving, /*!< \brief Markers in motion (DEFORMING, MOVING_WALL). */ *Marker_PyCustom, /*!< \brief Markers that are customizable in Python. */ @@ -3451,13 +3453,20 @@ class CConfig { */ string GetMarker_HeatFlux_TagBound(unsigned short val_marker) const { return Marker_HeatFlux[val_marker]; } + /*! + * \brief Get the list of markers for which to create copies. + */ + std::vector GetMarkerCreateCopy() const { + return { Marker_Create_Copy, Marker_Create_Copy + nMarker_Create_Copy }; + } + /*! * \brief Get the tag if the iMarker defined in the geometry file. * \param[in] val_tag - Value of the tag in which we are interested. * \return Value of the marker val_marker that is in the geometry file * for the surface that has the tag. */ - short GetMarker_All_TagBound(string val_tag) { + short GetMarker_All_TagBound(const string& val_tag) { for (unsigned short iMarker = 0; iMarker < nMarker_All; iMarker++) { if (val_tag == Marker_All_TagBound[iMarker]) return iMarker; } diff --git a/Common/include/geometry/meshreader/CMeshReaderBase.hpp b/Common/include/geometry/meshreader/CMeshReaderBase.hpp index f8cdc2799b06..74fdffb22f24 100644 --- a/Common/include/geometry/meshreader/CMeshReaderBase.hpp +++ b/Common/include/geometry/meshreader/CMeshReaderBase.hpp @@ -89,6 +89,12 @@ class CMeshReaderBase { void GetCornerPointsAllFaces(const unsigned long* elemInfo, unsigned short& numFaces, unsigned short nPointsPerFace[], unsigned long faceConn[6][4]); + /*! + * \brief Creates copies of some markers. + * \param[in] srcDstMarkers - List of marker names [src_1, dst_1, ..., src_n, dst_n]. + */ + void CopyMarkers(const std::vector& srcDstMarkers); + public: /*! * \brief Constructor of the CMeshReaderBase class. diff --git a/Common/include/linear_algebra/CSysMatrix.hpp b/Common/include/linear_algebra/CSysMatrix.hpp index 73ca2d5f568d..fc049aa078d1 100644 --- a/Common/include/linear_algebra/CSysMatrix.hpp +++ b/Common/include/linear_algebra/CSysMatrix.hpp @@ -148,7 +148,7 @@ class CSysMatrix { ScalarType* d_matrix; /*!< \brief Device Pointer to store the matrix values on the GPU. */ const unsigned long* d_row_ptr; /*!< \brief Device Pointers to the first element in each row. */ const unsigned long* d_col_ind; /*!< \brief Device Column index for each of the elements in val(). */ - bool useCuda; /*!< \brief Boolean that indicates whether user has enabled CUDA or not. + bool useCuda = false; /*!< \brief Boolean that indicates whether user has enabled CUDA or not. Mainly used to conditionally free GPU memory in the class destructor. */ ScalarType* ILU_matrix; /*!< \brief Entries of the ILU sparse matrix. */ diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 0b4c5706e95d..95f5754ef34a 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -869,7 +869,7 @@ void CConfig::SetPointersNull() { Marker_Designing = nullptr; Marker_GeoEval = nullptr; Marker_Plotting = nullptr; Marker_Analyze = nullptr; Marker_PyCustom = nullptr; Marker_WallFunctions = nullptr; Marker_CfgFile_KindBC = nullptr; Marker_All_KindBC = nullptr; Marker_SobolevBC = nullptr; - Marker_StrongBC = nullptr; + Marker_StrongBC = nullptr; Marker_Create_Copy = nullptr; Kind_WallFunctions = nullptr; IntInfo_WallFunctions = nullptr; @@ -1529,6 +1529,9 @@ void CConfig::SetConfig_Options() { /*!\brief MARKER_MONITORING\n DESCRIPTION: Marker(s) of the surface where evaluate the non-dimensional coefficients \ingroup Config*/ addStringListOption("MARKER_MONITORING", nMarker_Monitoring, Marker_Monitoring); + /*!\brief MARKER_CREATE_COPY\n DESCRIPTION: Marker(s) for which to create copies when reading the mesh \ingroup Config*/ + addStringListOption("MARKER_CREATE_COPY", nMarker_Create_Copy, Marker_Create_Copy); + /*!\brief MARKER_CONTROL_VOLUME\n DESCRIPTION: Marker(s) of the surface in the surface flow solution file \ingroup Config*/ addStringListOption("MARKER_ANALYZE", nMarker_Analyze, Marker_Analyze); /*!\brief MARKER_DESIGNING\n DESCRIPTION: Marker(s) of the surface where objective function (design problem) will be evaluated \ingroup Config*/ diff --git a/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp index 1759b21b2b76..93d4921fd38d 100644 --- a/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp +++ b/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp @@ -61,6 +61,9 @@ CBoxMeshReaderFEM::CBoxMeshReaderFEM(const CConfig* val_config, unsigned short v ComputeBoxVolumeConnectivity(); ComputeBoxPointCoordinates(); ComputeBoxSurfaceConnectivity(); + + /*--- Duplicate some markers if requested. ---*/ + CopyMarkers(val_config->GetMarkerCreateCopy()); } CBoxMeshReaderFEM::~CBoxMeshReaderFEM() = default; diff --git a/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp index 6b33705f0ad9..857d9f1eafcb 100644 --- a/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp @@ -61,6 +61,9 @@ CBoxMeshReaderFVM::CBoxMeshReaderFVM(const CConfig* val_config, unsigned short v ComputeBoxPointCoordinates(); ComputeBoxVolumeConnectivity(); ComputeBoxSurfaceConnectivity(); + + /*--- Duplicate some markers if requested. ---*/ + CopyMarkers(val_config->GetMarkerCreateCopy()); } CBoxMeshReaderFVM::~CBoxMeshReaderFVM() = default; diff --git a/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp index 776b2b554f4a..3f2a41de39de 100644 --- a/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp +++ b/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp @@ -58,6 +58,9 @@ CCGNSMeshReaderFEM::CCGNSMeshReaderFEM(const CConfig* val_config, unsigned short /*--- We have extracted all CGNS data. Close the CGNS file. ---*/ if (cg_close(cgnsFileID)) cg_error_exit(); + /*--- Duplicate some markers if requested. ---*/ + CopyMarkers(val_config->GetMarkerCreateCopy()); + #else SU2_MPI::Error(string(" SU2 built without CGNS support. \n") + string(" To use CGNS, build SU2 accordingly."), CURRENT_FUNCTION); diff --git a/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp index 916b1de4699e..bd21c3976953 100644 --- a/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp @@ -65,6 +65,9 @@ CCGNSMeshReaderFVM::CCGNSMeshReaderFVM(const CConfig* val_config, unsigned short ReformatCGNSVolumeConnectivity(); ReformatCGNSSurfaceConnectivity(); + /*--- Duplicate some markers if requested. ---*/ + CopyMarkers(val_config->GetMarkerCreateCopy()); + #else SU2_MPI::Error(string(" SU2 built without CGNS support. \n") + string(" To use CGNS, build SU2 accordingly."), CURRENT_FUNCTION); diff --git a/Common/src/geometry/meshreader/CMeshReaderBase.cpp b/Common/src/geometry/meshreader/CMeshReaderBase.cpp index 315ff00ac04e..99025d3e87a8 100644 --- a/Common/src/geometry/meshreader/CMeshReaderBase.cpp +++ b/Common/src/geometry/meshreader/CMeshReaderBase.cpp @@ -93,3 +93,25 @@ void CMeshReaderBase::GetCornerPointsAllFaces(const unsigned long* elemInfo, uns } } } + +void CMeshReaderBase::CopyMarkers(const std::vector& srcDstMarkers) { + for (size_t i = 0; i < srcDstMarkers.size(); i += 2) { + const auto& src = srcDstMarkers[i]; + const auto& dst = srcDstMarkers[i + 1]; + + if (const auto it = std::find(markerNames.begin(), markerNames.end(), src); it != markerNames.end()) { + const auto j = std::distance(markerNames.begin(), it); + + numberOfMarkers += 1; + markerNames.push_back(dst); + surfaceElementConnectivity.push_back(surfaceElementConnectivity[j]); + + /*--- Only the FEM readers populate this vector. ---*/ + if (!numberOfLocalSurfaceElements.empty()) { + numberOfLocalSurfaceElements.push_back(numberOfLocalSurfaceElements[j]); + } + } else if (rank == MASTER_NODE) { + std::cout << "WARNING: Not duplicating marker " << src << " because it was not found.\n"; + } + } +} diff --git a/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp index fec3284304e5..432894814459 100644 --- a/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp +++ b/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp @@ -59,6 +59,9 @@ CRectangularMeshReaderFEM::CRectangularMeshReaderFEM(const CConfig* val_config, ComputeRectangularVolumeConnectivity(); ComputeRectangularPointCoordinates(); ComputeRectangularSurfaceConnectivity(); + + /*--- Duplicate some markers if requested. ---*/ + CopyMarkers(val_config->GetMarkerCreateCopy()); } CRectangularMeshReaderFEM::~CRectangularMeshReaderFEM() = default; diff --git a/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp index 308330703974..1b32c0369d90 100644 --- a/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp @@ -59,6 +59,9 @@ CRectangularMeshReaderFVM::CRectangularMeshReaderFVM(const CConfig* val_config, ComputeRectangularPointCoordinates(); ComputeRectangularVolumeConnectivity(); ComputeRectangularSurfaceConnectivity(); + + /*--- Duplicate some markers if requested. ---*/ + CopyMarkers(val_config->GetMarkerCreateCopy()); } CRectangularMeshReaderFVM::~CRectangularMeshReaderFVM() = default; diff --git a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp index 3f00eeced979..8a9b66e0ea35 100644 --- a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp +++ b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp @@ -46,6 +46,9 @@ CSU2ASCIIMeshReaderFEM::CSU2ASCIIMeshReaderFEM(CConfig* val_config, unsigned sho /*--- Read the surface connectivity and store the surface elements whose corresponding volume element is stored on this MPI rank. ---*/ ReadSurfaceElementConnectivity({}); + + /*--- Duplicate some markers if requested. ---*/ + CopyMarkers(val_config->GetMarkerCreateCopy()); } CSU2ASCIIMeshReaderFEM::~CSU2ASCIIMeshReaderFEM() = default; diff --git a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp index 8daeec4c14df..5857e3ac0a98 100644 --- a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp @@ -69,6 +69,9 @@ CSU2ASCIIMeshReaderFVM::CSU2ASCIIMeshReaderFVM(CConfig* val_config, unsigned sho } } mesh_file.close(); + + /*--- Duplicate some markers if requested. ---*/ + CopyMarkers(val_config->GetMarkerCreateCopy()); } CSU2ASCIIMeshReaderFVM::~CSU2ASCIIMeshReaderFVM() = default; diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg index aad8f94ae7f5..e12523db2d75 100644 --- a/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg @@ -8,7 +8,7 @@ SOLVER= ELASTICITY MATH_PROBLEM= DIRECT GEOMETRIC_CONDITIONS= SMALL_DEFORMATIONS MATERIAL_MODEL= LINEAR_ELASTIC -MESH_FILENAME= meshBeam_3d.su2 +MESH_FILENAME= ../StatBeam_3d/meshBeam_3d.su2 ELASTICITY_MODULUS=3E7 POISSON_RATIO=0.3 MATERIAL_THERMAL_EXPANSION_COEFF= 2e-5 @@ -28,15 +28,17 @@ VOLUME_FILENAME= beam RESTART_FILENAME= restart_beam SOLUTION_FILENAME= restart_beam OUTPUT_WRT_FREQ= 1 -INNER_ITER=1 +INNER_ITER= 1 % Coupling with heat solver. WEAKLY_COUPLED_HEAT_EQUATION= YES FREESTREAM_TEMPERATURE= 300 SPECIFIC_HEAT_CP= 460 THERMAL_CONDUCTIVITY_CONSTANT= 45 -% NOTE: These markers a duplicates of "left" and "right" to allow specifying -% boundary conditions for both solvers. This is work in progress. + +% Copy markers to allow specifying boundary conditions for both solvers on the +% same markers. +MARKER_CREATE_COPY= ( left, left_heat, right, right_heat ) MARKER_ISOTHERMAL= ( left_heat, 400, right_heat, 300 ) NUM_METHOD_GRAD= GREEN_GAUSS diff --git a/config_template.cfg b/config_template.cfg index 99eb260e61ed..ec13046b3f95 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -1416,6 +1416,10 @@ MARKER_ANALYZE = ( airfoil ) % % Method to compute the average value in MARKER_ANALYZE (AREA, MASSFLUX). MARKER_ANALYZE_AVERAGE = MASSFLUX +% +% Duplicate markers while reading the mesh. Currently this is only used for thermoelastic simulations +% to allow specifying two boundary conditions (thermal and structural) on the same boundary. +MARKER_CREATE_COPY= ( original_1, copy_1, ..., original_n, copy_n ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % From c9f6b5b74726ab242e1b9eccd06be75127435c0a Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 15 Feb 2026 22:01:53 -0800 Subject: [PATCH 088/229] why did this one change? --- TestCases/parallel_regression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index bf5275d8fb39..3e8803f22f59 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -298,7 +298,7 @@ def main(): ramp_msw.cfg_dir = "euler/ramp" ramp_msw.cfg_file = "inv_ramp_msw.cfg" ramp_msw.test_iter = 100 - ramp_msw.test_vals = [-7.522451, -1.791193, -0.077520, 0.054427] + ramp_msw.test_vals = [-7.478332, -1.740068, -0.077520, 0.054427] test_list.append(ramp_msw) ########################## From e3a9cb7384d6333a375d6d9cf56a310d473dcae6 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Sun, 15 Feb 2026 23:31:37 -0800 Subject: [PATCH 089/229] Apply suggestion from @pcarruscag --- TestCases/parallel_regression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 3e8803f22f59..bf5275d8fb39 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -298,7 +298,7 @@ def main(): ramp_msw.cfg_dir = "euler/ramp" ramp_msw.cfg_file = "inv_ramp_msw.cfg" ramp_msw.test_iter = 100 - ramp_msw.test_vals = [-7.478332, -1.740068, -0.077520, 0.054427] + ramp_msw.test_vals = [-7.522451, -1.791193, -0.077520, 0.054427] test_list.append(ramp_msw) ########################## From aaab3ff16d1ca227549e6e8d3849acb338bad509 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 16 Feb 2026 21:29:06 +0100 Subject: [PATCH 090/229] add removed part --- Common/src/geometry/CMultiGridGeometry.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 3aad08e6362d..2cbdd9af42a5 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -29,7 +29,7 @@ #include "../../include/geometry/CMultiGridQueue.hpp" #include "../../include/toolboxes/printing_toolbox.hpp" #include "../../../Common/include/toolboxes/geometry_toolbox.hpp" -//#include +#include #include #include #include @@ -836,6 +836,18 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vector& Suitable_Indirect_Neighbors, unsigned long iPoint, unsigned long Index_CoarseCV, const CGeometry* fine_grid) const { + /*--- Create a list with the first neighbors, including the seed. ---*/ + + vector First_Neighbor_Points; + First_Neighbor_Points.push_back(iPoint); + for (auto jPoint : fine_grid->nodes->GetPoints(iPoint)) First_Neighbor_Points.push_back(jPoint); + + /*--- Create a list with the second neighbors, without first, and seed neighbors. ---*/ + + vector Second_Neighbor_Points, Second_Origin_Points, Suitable_Second_Neighbors; + + for (auto jPoint : fine_grid->nodes->GetPoints(iPoint)) { + for (auto kPoint : fine_grid->nodes->GetPoints(jPoint)) { /*--- Check that the second neighbor does not belong to the first neighbors or the seed. ---*/ auto end = First_Neighbor_Points.end(); From f0de4b7dde8d4e65f4fd6da4b1b8b248b6853c0f Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 16 Feb 2026 21:30:47 +0100 Subject: [PATCH 091/229] remove duplicate includes --- Common/src/geometry/CMultiGridGeometry.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 2cbdd9af42a5..fbafd2972ca7 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -29,10 +29,6 @@ #include "../../include/geometry/CMultiGridQueue.hpp" #include "../../include/toolboxes/printing_toolbox.hpp" #include "../../../Common/include/toolboxes/geometry_toolbox.hpp" -#include -#include -#include -#include CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, unsigned short iMesh) : CGeometry() { nDim = fine_grid->GetnDim(); // Write the number of dimensions of the coarse grid. From e5f745fc8e0c52309dc7b7b3c423aff997b696d3 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 16 Feb 2026 21:35:31 +0100 Subject: [PATCH 092/229] cleanup --- Common/src/geometry/CMultiGridGeometry.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index fbafd2972ca7..f1c28a686c28 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -499,10 +499,10 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un #ifdef HAVE_MPI /*--- Reset halo point parents before MPI agglomeration. - This is critical for multi-level multigrid: when creating level N from level N-1, - the fine grid (level N-1) already has Parent_CV set from when it was created from level N-2. + When creating level N from level N-1, the fine grid (level N-1) + already has Parent_CV set from when it was created from level N-2. Those parent indices point to level N, but when creating level N+1, they would be - incorrectly interpreted as level N+1 indices. Resetting ensures clean agglomeration. ---*/ + incorrectly interpreted as level N+1 indices. ---*/ for (auto iPoint = fine_grid->GetnPointDomain(); iPoint < fine_grid->GetnPoint(); iPoint++) { fine_grid->nodes->SetParent_CV(iPoint, std::numeric_limits::max()); @@ -606,7 +606,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } - Children_Local[iVertex] = fine_grid->vertex[MarkerR][iVertex]->GetNode(); } @@ -634,8 +633,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un continue; } - /*--- First assignment for this halo point - proceed with agglomeration ---*/ - /*--- Append to existing children, don't overwrite ---*/ auto existing_children_count = nodes->GetnChildren_CV(iPoint_Coarse); @@ -656,7 +653,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un nPoint = Index_CoarseCV; /*--- Console output with the summary of the agglomeration ---*/ - // nijso: do not include halo points in the count unsigned long nPointFine = fine_grid->GetnPointDomain(); unsigned long Global_nPointCoarse, Global_nPointFine; From a533687292189e5ae2aa8aa1f3849e65ce21b4d0 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Mon, 16 Feb 2026 14:27:32 -0800 Subject: [PATCH 093/229] iterate both solvers --- Common/src/CConfig.cpp | 7 +- SU2_CFD/src/iteration/CFEAIteration.cpp | 161 ++++++++---------- .../fea_fsi/ThermalBeam_3d/configBeam_3d.cfg | 16 +- 3 files changed, 82 insertions(+), 102 deletions(-) diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 95f5754ef34a..523d527c2087 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -4003,12 +4003,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i /*--- Set the number of external iterations to 1 for the steady state problem ---*/ - if (Kind_Solver == MAIN_SOLVER::FEM_ELASTICITY) { - nMGLevels = 0; - if (Kind_Struct_Solver == STRUCT_DEFORMATION::SMALL){ - MinLogResidual = log10(Linear_Solver_Error); - } - } + if (Kind_Solver == MAIN_SOLVER::FEM_ELASTICITY) nMGLevels = 0; Radiation = (Kind_Radiation != RADIATION_MODEL::NONE); diff --git a/SU2_CFD/src/iteration/CFEAIteration.cpp b/SU2_CFD/src/iteration/CFEAIteration.cpp index 13339acbcd37..e895864c75e6 100644 --- a/SU2_CFD/src/iteration/CFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CFEAIteration.cpp @@ -45,135 +45,116 @@ void CFEAIteration::Iterate(COutput* output, CIntegration**** integration, CGeom /*--- Loads applied in steps (not used for discrete adjoint). ---*/ const bool incremental_load = config[val_iZone]->GetIncrementalLoad() && !disc_adj_fem; + /*--- We need to restore the current inner iter in discrete adjoint cases because file output depends on it. ---*/ + const auto CurIter = config[val_iZone]->GetInnerIter(); + CIntegration* feaIntegration = integration[val_iZone][val_iInst][FEA_SOL]; CSolver* feaSolver = solver[val_iZone][val_iInst][MESH_0][FEA_SOL]; - /*--- Add heat solver integration step. ---*/ - if (config[val_iZone]->GetWeakly_Coupled_Heat()) { - config[val_iZone]->SetGlobalParam(MAIN_SOLVER::HEAT_EQUATION, RUNTIME_HEAT_SYS); - integration[val_iZone][val_iInst][HEAT_SOL]->SingleGrid_Iteration(geometry, solver, numerics, config, - RUNTIME_HEAT_SYS, val_iZone, val_iInst); - } - - /*--- FEA equations ---*/ - config[val_iZone]->SetGlobalParam(MAIN_SOLVER::FEM_ELASTICITY, RUNTIME_FEA_SYS); + auto Iterate = [&](unsigned long IntIter) { + config[val_iZone]->SetInnerIter(IntIter); - if (linear) { - /*--- Run the (one) iteration ---*/ - - config[val_iZone]->SetInnerIter(0); + /*--- Add heat solver integration step. ---*/ + if (config[val_iZone]->GetWeakly_Coupled_Heat()) { + config[val_iZone]->SetGlobalParam(MAIN_SOLVER::HEAT_EQUATION, RUNTIME_HEAT_SYS); + integration[val_iZone][val_iInst][HEAT_SOL]->SingleGrid_Iteration(geometry, solver, numerics, config, + RUNTIME_HEAT_SYS, val_iZone, val_iInst); + } + /*--- FEA equations ---*/ + config[val_iZone]->SetGlobalParam(MAIN_SOLVER::FEM_ELASTICITY, RUNTIME_FEA_SYS); feaIntegration->Structural_Iteration(geometry, solver, numerics, config, RUNTIME_FEA_SYS, val_iZone, val_iInst); - if (!disc_adj_fem) { - Monitor(output, integration, geometry, solver, numerics, config, surface_movement, grid_movement, FFDBox, - val_iZone, INST_0); + // TODO(pedro): Update the mesh coordinates for the heat solver. - /*--- Set the convergence monitor to true, to prevent the solver to stop in intermediate FSI subiterations ---*/ - output->SetConvergence(true); + if (!disc_adj_fem) { + StopCalc = Monitor(output, integration, geometry, solver, numerics, config, surface_movement, grid_movement, + FFDBox, val_iZone, INST_0); } + }; - } else if (nonlinear && !incremental_load) { - /*--- THIS IS THE DIRECT APPROACH (NO INCREMENTAL LOAD APPLIED) ---*/ - - /*--- Keep the current inner iter, we need to restore it in discrete adjoint cases - * because file output depends on it. ---*/ - const auto CurIter = config[val_iZone]->GetInnerIter(); + if (linear || (nonlinear && !incremental_load)) { + /*--- THIS IS THE DIRECT APPROACH (NO INCREMENTAL LOAD APPLIED) ---*/ /*--- Newton-Raphson subiterations ---*/ for (IntIter = 0; IntIter < config[val_iZone]->GetnInner_Iter(); IntIter++) { - config[val_iZone]->SetInnerIter(IntIter); - - feaIntegration->Structural_Iteration(geometry, solver, numerics, config, RUNTIME_FEA_SYS, val_iZone, val_iInst); + Iterate(IntIter); /*--- Limit to only one iteration for the discrete adjoint recording, restore inner iter (see above) ---*/ if (disc_adj_fem) { config[val_iZone]->SetInnerIter(CurIter); break; } - StopCalc = Monitor(output, integration, geometry, solver, numerics, config, surface_movement, grid_movement, - FFDBox, val_iZone, INST_0); - - if (StopCalc && (IntIter > 0)) break; + /*--- Linear elasticity without thermal effects only needs one iteration. ---*/ + if (linear && !config[val_iZone]->GetWeakly_Coupled_Heat()) { + output->SetConvergence(true); + break; + } + /*--- Normal stopping criteria. ---*/ + if (StopCalc && IntIter > 0) break; } + return; + } - } else { - /*--- THIS IS THE INCREMENTAL LOAD APPROACH (only makes sense for nonlinear) ---*/ - - /*--- Assume the initial load increment as 1.0 ---*/ + /*--- THIS IS THE INCREMENTAL LOAD APPROACH (only makes sense for nonlinear) ---*/ - feaSolver->SetLoad_Increment(0, 1.0); - feaSolver->SetForceCoeff(1.0); + /*--- Assume the initial load increment as 1.0 ---*/ + feaSolver->SetLoad_Increment(0, 1.0); + feaSolver->SetForceCoeff(1.0); - /*--- Run two nonlinear iterations to check if incremental loading can be skipped ---*/ + /*--- Run two nonlinear iterations to check if incremental loading can be skipped ---*/ + for (IntIter = 0; IntIter < 2; ++IntIter) { + Iterate(IntIter); + } - auto Iterate = [&](unsigned long IntIter) { - config[val_iZone]->SetInnerIter(IntIter); - feaIntegration->Structural_Iteration(geometry, solver, numerics, config, RUNTIME_FEA_SYS, val_iZone, val_iInst); + /*--- Early return if we already meet the convergence criteria. ---*/ + if (StopCalc) return; - StopCalc = Monitor(output, integration, geometry, solver, numerics, config, surface_movement, grid_movement, - FFDBox, val_iZone, INST_0); - }; + /*--- Check user-defined criteria to either increment loads or continue with NR iterations. ---*/ + bool meetCriteria = true; + for (int i = 0; i < 3; ++i) { + meetCriteria &= (log10(feaSolver->GetRes_FEM(i)) < config[val_iZone]->GetIncLoad_Criteria(i)); + } - for (IntIter = 0; IntIter < 2; ++IntIter) { + /*--- If the criteria is met, i.e. the load is not too large, continue the regular calculation. ---*/ + if (meetCriteria) { + for (IntIter = 2; IntIter < config[val_iZone]->GetnInner_Iter(); IntIter++) { Iterate(IntIter); + if (StopCalc) break; } + return; + } - /*--- Early return if we already meet the convergence criteria. ---*/ - if (StopCalc) return; - - /*--- Check user-defined criteria to either increment loads or continue with NR iterations. ---*/ - - bool meetCriteria = true; - for (int i = 0; i < 3; ++i) - meetCriteria &= (log10(feaSolver->GetRes_FEM(i)) < config[val_iZone]->GetIncLoad_Criteria(i)); - - /*--- If the criteria is met, i.e. the load is not too large, continue the regular calculation. ---*/ - - if (meetCriteria) { - /*--- Newton-Raphson subiterations ---*/ - - for (IntIter = 2; IntIter < config[val_iZone]->GetnInner_Iter(); IntIter++) { - Iterate(IntIter); - if (StopCalc) break; - } - - } - - /*--- If the criteria is not met, a whole set of subiterations for the different loads must be done. ---*/ - - else { - /*--- Restore solution to initial. Because we ramp the load from zero, in multizone cases it is not - * adequate to take "old values" as those will be for maximum loading on the previous outer iteration. ---*/ + /*--- If the criteria is not met, a whole set of subiterations for the different loads must be done. + * Restore solution to initial. Because we ramp the load from zero, in multizone cases it is not + * adequate to take "old values" as those will be for maximum loading on the previous outer iteration. ---*/ - feaSolver->SetInitialCondition(geometry[val_iZone][val_iInst], solver[val_iZone][val_iInst], config[val_iZone], - TimeIter); + feaSolver->SetInitialCondition(geometry[val_iZone][val_iInst], solver[val_iZone][val_iInst], config[val_iZone], + TimeIter); - /*--- For the number of increments ---*/ - for (auto iIncrement = 1ul; iIncrement <= nIncrements; iIncrement++) { - /*--- Set the load increment and the initial condition, and output the - * parameters of UTOL, RTOL, ETOL for the previous iteration ---*/ + /*--- For the number of increments ---*/ + for (auto iIncrement = 1ul; iIncrement <= nIncrements; iIncrement++) { + /*--- Set the load increment and the initial condition, and output the + * parameters of UTOL, RTOL, ETOL for the previous iteration ---*/ - su2double loadIncrement = su2double(iIncrement) / nIncrements; - feaSolver->SetLoad_Increment(iIncrement, loadIncrement); + su2double loadIncrement = su2double(iIncrement) / nIncrements; + feaSolver->SetLoad_Increment(iIncrement, loadIncrement); - /*--- Set the convergence monitor to false, to force the solver to converge every subiteration ---*/ - output->SetConvergence(false); + /*--- Set the convergence monitor to false, to force the solver to converge every subiteration. ---*/ + output->SetConvergence(false); - if (rank == MASTER_NODE) cout << "\nIncremental load: increment " << iIncrement << endl; + if (rank == MASTER_NODE) cout << "\nIncremental load: increment " << iIncrement << endl; - /*--- Newton-Raphson subiterations ---*/ + /*--- Newton-Raphson subiterations ---*/ - for (IntIter = 0; IntIter < config[val_iZone]->GetnInner_Iter(); IntIter++) { - Iterate(IntIter); - if (StopCalc && (IntIter > 0)) break; - } - } - /*--- Just to be sure, set default increment settings. ---*/ - feaSolver->SetLoad_Increment(0, 1.0); + for (IntIter = 0; IntIter < config[val_iZone]->GetnInner_Iter(); IntIter++) { + Iterate(IntIter); + if (StopCalc && IntIter > 0) break; } } + /*--- Just to be sure, set default increment settings. ---*/ + feaSolver->SetLoad_Increment(0, 1.0); } void CFEAIteration::Update(COutput* output, CIntegration**** integration, CGeometry**** geometry, CSolver***** solver, diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg index e12523db2d75..60afa90b837b 100644 --- a/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg @@ -9,18 +9,18 @@ MATH_PROBLEM= DIRECT GEOMETRIC_CONDITIONS= SMALL_DEFORMATIONS MATERIAL_MODEL= LINEAR_ELASTIC MESH_FILENAME= ../StatBeam_3d/meshBeam_3d.su2 -ELASTICITY_MODULUS=3E7 -POISSON_RATIO=0.3 +ELASTICITY_MODULUS= 3E7 +POISSON_RATIO= 0.3 MATERIAL_THERMAL_EXPANSION_COEFF= 2e-5 MATERIAL_REFERENCE_TEMPERATURE= 288.15 -MATERIAL_DENSITY=7854 +MATERIAL_DENSITY= 7854 MARKER_CLAMPED= ( left, right ) MARKER_PRESSURE= ( lower, 0, symleft, 0, symright, 0 ) MARKER_LOAD= ( upper, 1, 1000, 0, -1, 0 ) LINEAR_SOLVER= CONJUGATE_GRADIENT LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-8 -LINEAR_SOLVER_ITER= 1000 +LINEAR_SOLVER_ERROR= 1E-4 +LINEAR_SOLVER_ITER= 500 MESH_FORMAT= SU2 TABULAR_FORMAT= CSV CONV_FILENAME= history_beam @@ -28,7 +28,11 @@ VOLUME_FILENAME= beam RESTART_FILENAME= restart_beam SOLUTION_FILENAME= restart_beam OUTPUT_WRT_FREQ= 1 -INNER_ITER= 1 + +CONV_FIELD= REL_RMS_DISP_X, REL_RMS_DISP_Y, REL_RMS_DISP_Z, REL_RMS_TEMPERATURE +CONV_STARTITER= 0 +CONV_RESIDUAL_MINVAL= -4 +INNER_ITER= 10 % Coupling with heat solver. WEAKLY_COUPLED_HEAT_EQUATION= YES From ef82a9f0ae143d5926b44f60e9e4ba46a9241f1f Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Mon, 16 Feb 2026 21:59:44 -0800 Subject: [PATCH 094/229] nonlinear coupling and regression test --- SU2_CFD/src/iteration/CFEAIteration.cpp | 57 +++++++++++++++---- .../ThermalBeam_3d/configBeamNonlinear_3d.cfg | 56 ++++++++++++++++++ TestCases/parallel_regression.py | 14 ++++- 3 files changed, 114 insertions(+), 13 deletions(-) create mode 100644 TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg diff --git a/SU2_CFD/src/iteration/CFEAIteration.cpp b/SU2_CFD/src/iteration/CFEAIteration.cpp index e895864c75e6..0b373388bd4d 100644 --- a/SU2_CFD/src/iteration/CFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CFEAIteration.cpp @@ -40,6 +40,7 @@ void CFEAIteration::Iterate(COutput* output, CIntegration**** integration, CGeom const bool nonlinear = (config[val_iZone]->GetGeometricConditions() == STRUCT_DEFORMATION::LARGE); const bool linear = (config[val_iZone]->GetGeometricConditions() == STRUCT_DEFORMATION::SMALL); + const bool heat = config[val_iZone]->GetWeakly_Coupled_Heat(); const bool disc_adj_fem = config[val_iZone]->GetDiscrete_Adjoint(); /*--- Loads applied in steps (not used for discrete adjoint). ---*/ @@ -48,25 +49,61 @@ void CFEAIteration::Iterate(COutput* output, CIntegration**** integration, CGeom /*--- We need to restore the current inner iter in discrete adjoint cases because file output depends on it. ---*/ const auto CurIter = config[val_iZone]->GetInnerIter(); + CGeometry** geo = geometry[val_iZone][val_iInst]; CIntegration* feaIntegration = integration[val_iZone][val_iInst][FEA_SOL]; CSolver* feaSolver = solver[val_iZone][val_iInst][MESH_0][FEA_SOL]; + const auto nPoint = geo[MESH_0]->GetnPoint(); + const auto nDim = geo[MESH_0]->GetnDim(); + + su2activematrix Coords; + if (nonlinear && heat && Coords.empty()) { + /*--- Save the mesh coordinates to solve the heat equations in the deformed configuration + * and then restore the coordinates for the FEA solver. We could use CoordsOld of CPoint but + * that would require accounting for a lot of physics-specific logic in a geometry class. ---*/ + Coords = geo[MESH_0]->nodes->GetCoord(); + } + + auto IterateHeat = [&]() { + /*--- Update the FVM mesh for the heat solver based on the structural deformations. ---*/ + if (nonlinear) { + SU2_OMP_PARALLEL_(for schedule(static)) + for (auto iPoint = 0ul; iPoint < nPoint; ++iPoint) { + for (auto iDim = 0u; iDim < nDim; ++iDim) { + geo[MESH_0]->nodes->SetCoord(iPoint, iDim, Coords(iPoint, iDim) + feaSolver->GetNodes()->GetSolution(iPoint, iDim)); + } + } + END_SU2_OMP_PARALLEL + + CGeometry::UpdateGeometry(geo, config[val_iZone]); + } + + config[val_iZone]->SetGlobalParam(MAIN_SOLVER::HEAT_EQUATION, RUNTIME_HEAT_SYS); + integration[val_iZone][val_iInst][HEAT_SOL]->SingleGrid_Iteration(geometry, solver, numerics, config, + RUNTIME_HEAT_SYS, val_iZone, val_iInst); + + /*--- Restore the coordinates for the FEA solver. ---*/ + if (nonlinear) { + SU2_OMP_PARALLEL_(for schedule(static)) + for (auto iPoint = 0ul; iPoint < nPoint; ++iPoint) { + for (auto iDim = 0u; iDim < nDim; ++iDim) { + geo[MESH_0]->nodes->SetCoord(iPoint, iDim, Coords(iPoint, iDim)); + } + } + END_SU2_OMP_PARALLEL + } + }; + auto Iterate = [&](unsigned long IntIter) { config[val_iZone]->SetInnerIter(IntIter); - /*--- Add heat solver integration step. ---*/ - if (config[val_iZone]->GetWeakly_Coupled_Heat()) { - config[val_iZone]->SetGlobalParam(MAIN_SOLVER::HEAT_EQUATION, RUNTIME_HEAT_SYS); - integration[val_iZone][val_iInst][HEAT_SOL]->SingleGrid_Iteration(geometry, solver, numerics, config, - RUNTIME_HEAT_SYS, val_iZone, val_iInst); - } + /*--- Heat transfer equations. ---*/ + if (heat) IterateHeat(); - /*--- FEA equations ---*/ + /*--- FEA equations. ---*/ config[val_iZone]->SetGlobalParam(MAIN_SOLVER::FEM_ELASTICITY, RUNTIME_FEA_SYS); feaIntegration->Structural_Iteration(geometry, solver, numerics, config, RUNTIME_FEA_SYS, val_iZone, val_iInst); - // TODO(pedro): Update the mesh coordinates for the heat solver. - if (!disc_adj_fem) { StopCalc = Monitor(output, integration, geometry, solver, numerics, config, surface_movement, grid_movement, FFDBox, val_iZone, INST_0); @@ -87,7 +124,7 @@ void CFEAIteration::Iterate(COutput* output, CIntegration**** integration, CGeom break; } /*--- Linear elasticity without thermal effects only needs one iteration. ---*/ - if (linear && !config[val_iZone]->GetWeakly_Coupled_Heat()) { + if (linear && !heat) { output->SetConvergence(true); break; } diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg new file mode 100644 index 000000000000..cb04c9fba246 --- /dev/null +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg @@ -0,0 +1,56 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SU2 configuration file % +% Case description: 3D beam with thermal expansion % +% File Version 8.4.0 "Harrier" % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +SOLVER= ELASTICITY +MATH_PROBLEM= DIRECT +GEOMETRIC_CONDITIONS= LARGE_DEFORMATIONS +MATERIAL_MODEL= NEO_HOOKEAN +MESH_FILENAME= ../StatBeam_3d/meshBeam_3d.su2 +ELASTICITY_MODULUS= 3E7 +POISSON_RATIO= 0.3 +MATERIAL_THERMAL_EXPANSION_COEFF= 2e-5 +MATERIAL_REFERENCE_TEMPERATURE= 288.15 +MATERIAL_DENSITY= 7854 +MARKER_CLAMPED= ( left, right ) +MARKER_PRESSURE= ( lower, 0, symleft, 0, symright, 0 ) +MARKER_LOAD= ( upper, 1, 1000, 0, -1, 0 ) +LINEAR_SOLVER= FGCRODR +LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_ERROR= 1E-4 +LINEAR_SOLVER_ITER= 1000 +LINEAR_SOLVER_RESTART_FREQUENCY= 50 +LINEAR_SOLVER_RESTART_DEFLATION= 10 +MESH_FORMAT= SU2 +TABULAR_FORMAT= CSV +CONV_FILENAME= history_beam +VOLUME_FILENAME= beam +RESTART_FILENAME= restart_beam +SOLUTION_FILENAME= restart_beam +OUTPUT_WRT_FREQ= 1 + +CONV_FIELD= REL_RMS_RTOL, REL_RMS_TEMPERATURE +CONV_STARTITER= 0 +CONV_RESIDUAL_MINVAL= -5 +INNER_ITER= 10 + +% Coupling with heat solver. +WEAKLY_COUPLED_HEAT_EQUATION= YES +FREESTREAM_TEMPERATURE= 300 +SPECIFIC_HEAT_CP= 460 +THERMAL_CONDUCTIVITY_CONSTANT= 45 + +% Copy markers to allow specifying boundary conditions for both solvers on the +% same markers. +MARKER_CREATE_COPY= ( left, left_heat, right, right_heat ) +MARKER_ISOTHERMAL= ( left_heat, 400, right_heat, 300 ) + +NUM_METHOD_GRAD= GREEN_GAUSS +TIME_DISCRE_HEAT= EULER_IMPLICIT +CFL_NUMBER= 1e8 + +MARKER_MONITORING= ( left_heat ) +SCREEN_OUTPUT= INNER_ITER, RMS_RES, LINSOL, VMS, TOTAL_HEATFLUX + diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index bf5275d8fb39..092013190410 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -1276,12 +1276,20 @@ def main(): thermal_beam_3d = TestCase('thermal_beam_3d') thermal_beam_3d.cfg_dir = "fea_fsi/ThermalBeam_3d" thermal_beam_3d.cfg_file = "configBeam_3d.cfg" - thermal_beam_3d.test_iter = 0 - thermal_beam_3d.test_vals = [-6.140220, -5.842734, -5.972391, -8.091358, 262, -8.246755, 81, -8.298569, 135620, 144.65] - thermal_beam_3d.test_vals_aarch64 = [-6.131860, -5.845164, -5.964084, -8.091358, 262, -8.244325, 81, -8.298569, 135620, 144.65] + thermal_beam_3d.test_iter = 4 + thermal_beam_3d.test_vals = [-8.137623, -7.840833, -7.903285, -13.978110, 217, -4.093241, 39, -4.072614, 1.3676e+05, 75.0] thermal_beam_3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") test_list.append(thermal_beam_3d) + # Static beam, 3d with coupled temperature, nonlinear elasticity + thermal_beam_nl_3d = TestCase('thermal_beam_nl_3d') + thermal_beam_nl_3d.cfg_dir = "fea_fsi/ThermalBeam_3d" + thermal_beam_nl_3d.cfg_file = "configBeamNonlinear_3d.cfg" + thermal_beam_nl_3d.test_iter = 8 + thermal_beam_nl_3d.test_vals = [-7.586361, -3.000895, -12.259962, -14.077320, 50, -4.025641, 24, -4.210655, 1.3871e+05, 7.5233e+01] + thermal_beam_nl_3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") + test_list.append(thermal_beam_nl_3d) + # Rotating cylinder, 3d rotating_cylinder_fea = TestCase('rotating_cylinder_fea') rotating_cylinder_fea.cfg_dir = "fea_fsi/rotating_cylinder" From 6fffcc8c52fdb3710db1942147f99c77ad9386ba Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Tue, 17 Feb 2026 07:55:43 -0800 Subject: [PATCH 095/229] Apply suggestion from @pcarruscag --- TestCases/parallel_regression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 092013190410..f5bea2d55b8e 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -1286,7 +1286,7 @@ def main(): thermal_beam_nl_3d.cfg_dir = "fea_fsi/ThermalBeam_3d" thermal_beam_nl_3d.cfg_file = "configBeamNonlinear_3d.cfg" thermal_beam_nl_3d.test_iter = 8 - thermal_beam_nl_3d.test_vals = [-7.586361, -3.000895, -12.259962, -14.077320, 50, -4.025641, 24, -4.210655, 1.3871e+05, 7.5233e+01] + thermal_beam_nl_3d.test_vals = [-7.564309, -2.992893, -12.242503, -14.068322, 57, -4.017665, 24, -4.204804, 138710, 75.233] thermal_beam_nl_3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") test_list.append(thermal_beam_nl_3d) From d2d0bf28bab1f1a0325396cac8ff22b6bddcb7a8 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Tue, 17 Feb 2026 21:14:24 +0100 Subject: [PATCH 096/229] clanh --- Common/src/geometry/CMultiGridGeometry.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index f1c28a686c28..f6c99d4a4551 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -53,7 +53,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un i.e. consider up to neighbors of neighbors. For other levels this information is propagated down during their construction. ---*/ - if (iMesh == MESH_1) { + if (iMesh == MESH_1) { for (auto iPoint = 0ul; iPoint < fine_grid->GetnPoint(); iPoint++) fine_grid->nodes->SetAgglomerate_Indirect(iPoint, false); @@ -170,10 +170,9 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Note that in 2D, this is a corner and we do not agglomerate unless one of them is SEND_RECEIVE. ---*/ /*--- In 3D, we agglomerate if the 2 markers are the same. ---*/ if (counter == 2) { - if (nDim == 2) { - agglomerate_seed = ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || - (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)); + agglomerate_seed = ((config->GetMarker_All_KindBC(copy_marker[0]) == SEND_RECEIVE) || + (config->GetMarker_All_KindBC(copy_marker[1]) == SEND_RECEIVE)); } /*--- agglomerate if both markers are the same. ---*/ if (nDim == 3) agglomerate_seed = (copy_marker[0] == copy_marker[1]); @@ -642,7 +641,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un nodes->SetDomain(iPoint_Coarse, false); nSuccess++; } - } } @@ -789,7 +787,8 @@ bool CMultiGridGeometry::SetBoundAgglomeration(unsigned long CVPoint, vector Date: Wed, 18 Feb 2026 21:29:35 +0100 Subject: [PATCH 097/229] add OMP_BARRIER, possible fix for data race. --- .../src/integration/CMultiGridIntegration.cpp | 33 ++++--------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 2bfd6ffdac24..a3fdba3b404b 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -488,13 +488,19 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, GetProlongated_Correction(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config); - /*--- Get current CFL values ---*/ + /*--- Get current CFL values + Read in shared scope since all threads need the same values, but ensure thread safety ---*/ su2double CFL_fine = config->GetCFL(iMesh); su2double CFL_coarse_current = config->GetCFL(iMesh+1); /*--- Compute adaptive CFL for coarse grid ---*/ su2double CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine, CFL_coarse_current); + /*--- Explicit barrier to ensure all threads see the updated CFL from computeMultigridCFL + before proceeding. This prevents data races where threads at different recursion depths + might read stale CFL values during nested MultiGrid_Cycle calls. ---*/ + SU2_OMP_BARRIER + /*--- Update LocalCFL at each coarse grid point ---*/ SU2_OMP_FOR_STAT(roundUpDiv(geometry_coarse->GetnPoint(), omp_get_num_threads())) for (auto iPoint = 0ul; iPoint < geometry_coarse->GetnPoint(); iPoint++) { @@ -502,31 +508,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, } END_SU2_OMP_FOR - /*--- Output monitoring information periodically ---*/ -// -////#ifdef HAVE_MPI -//// /*--- Synchronize all ranks before output to ensure consistent state ---*/ -//// SU2_MPI::Barrier(SU2_MPI::GetComm()); -////#endif -/* - if (SU2_MPI::GetRank() == 0 && iter % 1 == 0) { - bool cfl_increased = (new_coeff < current_coeff); // Lower coeff = higher CFL - bool cfl_decreased = (new_coeff > current_coeff); // Higher coeff = lower CFL - string action = "unchanged"; - if (cfl_increased) action = "increased"; - else if (cfl_decreased) action = "decreased"; - - su2double percent_reduction = (1.0 - ratio_for_display) * 100.0; - - cout << " MG Level " << iMesh+1 - << ", iter = " << iter - << ", percent reduction = " << percent_reduction - << ", action = " << action - << ", oscillation = " << (oscillation_detected ? "yes" : "no") - << ", coeff = " << new_coeff << " (was " << current_coeff << ")" - << ", CFL = " << CFL_coarse_new << endl; - } -*/ SmoothProlongated_Correction(RunTime_EqSystem, solver_fine, geometry_fine, config->GetMG_CorrecSmooth(iMesh), 1.25, config); SetProlongated_Correction(solver_fine, geometry_fine, config, iMesh); From 50d25fadeb76eee00dcd4542e536892ceb8e6b57 Mon Sep 17 00:00:00 2001 From: Soumyadipta Banerjee Date: Wed, 18 Feb 2026 23:11:09 +0530 Subject: [PATCH 098/229] Refactor unsteady restart fix to use safer delay mechanism Implement max_time detection in GetCauchyCorrectedTimeConvergence() to delay convergence by one iteration, ensuring both current and previous timesteps are saved to unsteady restart files. This replaces the previous unsafe solution-swapping approach with a more robust pattern modeled after PR #1237. The delay mechanism leverages existing Cauchy convergence infrastructure and properly handles second-order time stepping. Fixes #2493 --- SU2_CFD/include/drivers/CDriver.hpp | 11 --------- SU2_CFD/include/output/COutput.hpp | 3 ++- SU2_CFD/include/variables/CVariable.hpp | 5 ---- SU2_CFD/src/drivers/CDriver.cpp | 20 --------------- SU2_CFD/src/drivers/CMultizoneDriver.cpp | 30 ----------------------- SU2_CFD/src/drivers/CSinglezoneDriver.cpp | 28 --------------------- SU2_CFD/src/output/COutput.cpp | 30 +++++++++++++++++------ SU2_CFD/src/variables/CVariable.cpp | 5 ---- 8 files changed, 24 insertions(+), 108 deletions(-) diff --git a/SU2_CFD/include/drivers/CDriver.hpp b/SU2_CFD/include/drivers/CDriver.hpp index 4916386bf415..f88e229349d7 100644 --- a/SU2_CFD/include/drivers/CDriver.hpp +++ b/SU2_CFD/include/drivers/CDriver.hpp @@ -167,17 +167,6 @@ class CDriver : public CDriverBase { void RestartSolver(CSolver*** solver, CGeometry** geometry, CConfig* config, bool update_geo); /*! - * \brief Write restart files for the previous timestep (Solution_Old) when stopping at max_time - * or last iteration with second-order unsteady time stepping. - * \param[in] geometry - Geometrical definition of the problem. - * \param[in] config - Definition of the particular problem. - * \param[in] solver - Container vector with all the solutions. - * \param[in] output - Output instance for writing files. - * \param[in] TimeIter - Current time iteration (restart for TimeIter-1 is written). - */ - void WriteUnsteadyRestartPreviousStep(CGeometry* geometry, CConfig* config, CSolver** solver, - COutput* output, unsigned long TimeIter); - /*! * \brief Definition and allocation of all solution classes. * \param[in] solver - Container vector with all the solutions. diff --git a/SU2_CFD/include/output/COutput.hpp b/SU2_CFD/include/output/COutput.hpp index 9a5cd0e4d94a..e33eb0d1baf0 100644 --- a/SU2_CFD/include/output/COutput.hpp +++ b/SU2_CFD/include/output/COutput.hpp @@ -95,6 +95,7 @@ class COutput { ofstream histFile; /*!< \brief Output file stream for the history */ bool cauchyTimeConverged; /*! \brief: Flag indicating that solver is already converged. Needed for writing restart files. */ + bool maxTimeDelayActive; /*! \brief: Flag for delaying stop at max_time with 2nd order time stepping. */ /** \brief Enum to identify the screen output format. */ enum class ScreenOutputFormat { @@ -595,7 +596,7 @@ class COutput { * \return if output files have been written to disk. */ bool SetResultFiles(CGeometry *geometry, CConfig *config, CSolver** solver_container, - unsigned long iter, bool force_writing = false, bool write_restart_only = false); + unsigned long iter, bool force_writing = false); /*! * \brief Get convergence time convergence of the specified windowed-time-averaged ouput of the problem. diff --git a/SU2_CFD/include/variables/CVariable.hpp b/SU2_CFD/include/variables/CVariable.hpp index 7c110e9670d9..bc4bc55e57c7 100644 --- a/SU2_CFD/include/variables/CVariable.hpp +++ b/SU2_CFD/include/variables/CVariable.hpp @@ -281,11 +281,6 @@ class CVariable { */ void Set_Solution(); - /*! - * \brief Swap Solution and Solution_Old (e.g. for writing unsteady restart at previous timestep). - */ - void SwapSolutionWithOld(); - /*! * \brief Set the variable solution at time n. */ diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index c30b2a26f1cc..961ce04832ff 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -1155,26 +1155,6 @@ void CDriver::RestartSolver(CSolver ***solver, CGeometry **geometry, } -void CDriver::WriteUnsteadyRestartPreviousStep(CGeometry* geometry, CConfig* config, CSolver** solver, - COutput* output, unsigned long TimeIter) { - - /*--- Swap Solution and Solution_Old so output writes the previous timestep. ---*/ - for (auto iSol = 0u; iSol < MAX_SOLS; ++iSol) { - auto* sol = solver[iSol]; - if (sol && !sol->GetAdjoint() && sol->GetNodes()) sol->GetNodes()->SwapSolutionWithOld(); - } - - config->SetTimeIter(TimeIter - 1); - output->SetResultFiles(geometry, config, solver, TimeIter - 1, true, true); - config->SetTimeIter(TimeIter); - - /*--- Swap back to restore current solution. ---*/ - for (auto iSol = 0u; iSol < MAX_SOLS; ++iSol) { - auto* sol = solver[iSol]; - if (sol && !sol->GetAdjoint() && sol->GetNodes()) sol->GetNodes()->SwapSolutionWithOld(); - } -} - void CDriver::FinalizeSolver(CSolver ****solver, CGeometry **geometry, CConfig *config, unsigned short val_iInst) { diff --git a/SU2_CFD/src/drivers/CMultizoneDriver.cpp b/SU2_CFD/src/drivers/CMultizoneDriver.cpp index 8a323f0380b0..3843fe320370 100644 --- a/SU2_CFD/src/drivers/CMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CMultizoneDriver.cpp @@ -462,36 +462,6 @@ void CMultizoneDriver::Output(unsigned long TimeIter) { StartTime = SU2_MPI::Wtime(); - /*--- When stopping due to max_time with second-order unsteady time stepping, we need to write - * both the previous timestep (N-1) and current timestep (N) for proper restart capability. ---*/ - if (TimeIter > 0) { - for (iZone = 0; iZone < nZone; iZone++) { - auto* config = config_container[iZone]; - if (!config->GetTime_Domain() || config->GetTime_Marching() != TIME_MARCHING::DT_STEPPING_2ND) continue; - - const su2double cur_time = output_container[iZone]->GetHistoryFieldValue("CUR_TIME"); - const su2double max_time = config->GetMax_Time(); - const bool final_time_reached = cur_time >= max_time; - - if (!final_time_reached) continue; - - bool write_restart = false; - const auto* volFiles = config->GetVolumeOutputFiles(); - for (unsigned short iFile = 0; iFile < config->GetnVolumeOutputFiles(); iFile++) { - const auto fmt = volFiles[iFile]; - if (fmt == OUTPUT_TYPE::RESTART_ASCII || fmt == OUTPUT_TYPE::RESTART_BINARY || fmt == OUTPUT_TYPE::CSV) { - write_restart = true; - break; - } - } - if (write_restart) { - WriteUnsteadyRestartPreviousStep(geometry_container[iZone][INST_0][MESH_0], config, - solver_container[iZone][INST_0][MESH_0], - output_container[iZone], TimeIter); - } - } - } - bool wrote_files = false; for (iZone = 0; iZone < nZone; iZone++){ diff --git a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp index dae966c26296..23d6c790db6a 100644 --- a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp +++ b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp @@ -195,34 +195,6 @@ void CSinglezoneDriver::Output(unsigned long TimeIter) { StartTime = SU2_MPI::Wtime(); - /*--- When stopping due to max_time with second-order unsteady time stepping, we need to write - * both the previous timestep (N-1) and current timestep (N) for proper restart capability. ---*/ - auto* config = config_container[ZONE_0]; - const bool time_domain = config->GetTime_Domain(); - - if (time_domain && config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND && TimeIter > 0) { - const su2double cur_time = output_container[ZONE_0]->GetHistoryFieldValue("CUR_TIME"); - const su2double max_time = config->GetMax_Time(); - const bool final_time_reached = cur_time >= max_time; - - if (final_time_reached) { - bool write_restart = false; - const auto* volFiles = config->GetVolumeOutputFiles(); - for (unsigned short iFile = 0; iFile < config->GetnVolumeOutputFiles(); iFile++) { - const auto fmt = volFiles[iFile]; - if (fmt == OUTPUT_TYPE::RESTART_ASCII || fmt == OUTPUT_TYPE::RESTART_BINARY || fmt == OUTPUT_TYPE::CSV) { - write_restart = true; - break; - } - } - if (write_restart) { - WriteUnsteadyRestartPreviousStep(geometry_container[ZONE_0][INST_0][MESH_0], config, - solver_container[ZONE_0][INST_0][MESH_0], - output_container[ZONE_0], TimeIter); - } - } - } - bool wrote_files = output_container[ZONE_0]->SetResultFiles(geometry_container[ZONE_0][INST_0][MESH_0], config_container[ZONE_0], solver_container[ZONE_0][INST_0][MESH_0], diff --git a/SU2_CFD/src/output/COutput.cpp b/SU2_CFD/src/output/COutput.cpp index fcb2c830e78f..fa7a00d4a8cd 100644 --- a/SU2_CFD/src/output/COutput.cpp +++ b/SU2_CFD/src/output/COutput.cpp @@ -70,6 +70,7 @@ COutput::COutput(const CConfig *config, unsigned short ndim, bool fem_output): us_units(config->GetSystemMeasurements() == US) { cauchyTimeConverged = false; + maxTimeDelayActive = false; convergenceTable = new PrintingToolbox::CTablePrinter(&std::cout); multiZoneHeaderTable = new PrintingToolbox::CTablePrinter(&std::cout); @@ -793,6 +794,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form } bool COutput::GetCauchyCorrectedTimeConvergence(const CConfig *config){ + // Handle Cauchy convergence delay for 2nd order time stepping if(!cauchyTimeConverged && TimeConvergence && config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND){ // Change flags for 2nd order Time stepping: In case of convergence, this iter and next iter gets written out. then solver stops cauchyTimeConverged = TimeConvergence; @@ -801,11 +803,30 @@ bool COutput::GetCauchyCorrectedTimeConvergence(const CConfig *config){ else if(cauchyTimeConverged){ TimeConvergence = cauchyTimeConverged; } + + // Handle max time delay for 2nd order time stepping + // Delay stopping at max_time to ensure both timestep N and N-1 are written for proper restart + if(config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND){ + const su2double cur_time = GetHistoryFieldValue("CUR_TIME"); + const su2double max_time = config->GetMax_Time(); + const bool final_time_reached = (cur_time >= max_time); + + // If max_time is reached on first detection, delay the stop + if(final_time_reached && !maxTimeDelayActive){ + maxTimeDelayActive = true; + TimeConvergence = false; // Delay stop to run one more iteration + } + else if(maxTimeDelayActive){ + TimeConvergence = true; // Now allow stop + maxTimeDelayActive = false; // Reset for next run + } + } + return TimeConvergence; } bool COutput::SetResultFiles(CGeometry *geometry, CConfig *config, CSolver** solver_container, - unsigned long iter, bool force_writing, bool write_restart_only) { + unsigned long iter, bool force_writing) { bool isFileWrite = false, dataIsLoaded = false; const auto nVolumeFiles = config->GetnVolumeOutputFiles(); @@ -816,13 +837,6 @@ bool COutput::SetResultFiles(CGeometry *geometry, CConfig *config, CSolver** sol for (unsigned short iFile = 0; iFile < nVolumeFiles; iFile++) { - /*--- When writing only restart files, skip non-restart volume output types. ---*/ - if (write_restart_only) { - const auto fmt = VolumeFiles[iFile]; - if (fmt != OUTPUT_TYPE::RESTART_ASCII && fmt != OUTPUT_TYPE::RESTART_BINARY && fmt != OUTPUT_TYPE::CSV) - continue; - } - /*--- Collect the volume data from the solvers. * If time-domain is enabled, we also load the data although we don't output it, * since we might want to do time-averaging. ---*/ diff --git a/SU2_CFD/src/variables/CVariable.cpp b/SU2_CFD/src/variables/CVariable.cpp index 4db791bf575e..86128255f149 100644 --- a/SU2_CFD/src/variables/CVariable.cpp +++ b/SU2_CFD/src/variables/CVariable.cpp @@ -92,11 +92,6 @@ void CVariable::Set_Solution() { parallelCopy(Solution_Old.size(), Solution_Old.data(), Solution.data()); } -void CVariable::SwapSolutionWithOld() { - assert(Solution.size() == Solution_Old.size()); - std::swap(Solution, Solution_Old); -} - void CVariable::Set_Solution_time_n() { assert(Solution_time_n.size() == Solution.size()); parallelCopy(Solution.size(), Solution.data(), Solution_time_n.data()); From fd7ce021e4574751e646b5a60b3177fcfd989d61 Mon Sep 17 00:00:00 2001 From: Soumyadipta Banerjee Date: Fri, 20 Feb 2026 01:49:54 +0530 Subject: [PATCH 099/229] Fix syntax: remove duplicate Doxygen marker and drop unused include --- SU2_CFD/include/drivers/CDriver.hpp | 1 - SU2_CFD/src/variables/CVariable.cpp | 1 - 2 files changed, 2 deletions(-) diff --git a/SU2_CFD/include/drivers/CDriver.hpp b/SU2_CFD/include/drivers/CDriver.hpp index f88e229349d7..b01f560fa281 100644 --- a/SU2_CFD/include/drivers/CDriver.hpp +++ b/SU2_CFD/include/drivers/CDriver.hpp @@ -166,7 +166,6 @@ class CDriver : public CDriverBase { */ void RestartSolver(CSolver*** solver, CGeometry** geometry, CConfig* config, bool update_geo); - /*! /*! * \brief Definition and allocation of all solution classes. * \param[in] solver - Container vector with all the solutions. diff --git a/SU2_CFD/src/variables/CVariable.cpp b/SU2_CFD/src/variables/CVariable.cpp index 86128255f149..7de950de6224 100644 --- a/SU2_CFD/src/variables/CVariable.cpp +++ b/SU2_CFD/src/variables/CVariable.cpp @@ -27,7 +27,6 @@ #include "../../include/variables/CVariable.hpp" #include "../../../Common/include/parallelization/omp_structure.hpp" -#include CVariable::CVariable(unsigned long npoint, unsigned long nvar, const CConfig *config) { From 9a0de2719a45661b9964d6945af2fa6eb225d48b Mon Sep 17 00:00:00 2001 From: bigfooted Date: Thu, 19 Feb 2026 22:15:25 +0100 Subject: [PATCH 100/229] use OMP_MASTER instead, possible fix for data race. --- .../src/integration/CMultiGridIntegration.cpp | 25 ++++++++++++------- TestCases/tutorials.py | 8 +++--- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index a3fdba3b404b..776782b125d1 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -488,17 +488,24 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, GetProlongated_Correction(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config); - /*--- Get current CFL values - Read in shared scope since all threads need the same values, but ensure thread safety ---*/ - su2double CFL_fine = config->GetCFL(iMesh); - su2double CFL_coarse_current = config->GetCFL(iMesh+1); + /*--- Get current CFL values - only master thread reads to avoid concurrent access races. + All other threads wait at barrier to get the same cached values. ---*/ + su2double CFL_fine = 0.0; + su2double CFL_coarse_current = 0.0; + su2double CFL_coarse_new = 0.0; - /*--- Compute adaptive CFL for coarse grid ---*/ - su2double CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine, CFL_coarse_current); + SU2_OMP_MASTER + { + CFL_fine = config->GetCFL(iMesh); + CFL_coarse_current = config->GetCFL(iMesh+1); + + /*--- Compute adaptive CFL for coarse grid (master thread only) ---*/ + CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine, CFL_coarse_current); + } + END_SU2_OMP_MASTER - /*--- Explicit barrier to ensure all threads see the updated CFL from computeMultigridCFL - before proceeding. This prevents data races where threads at different recursion depths - might read stale CFL values during nested MultiGrid_Cycle calls. ---*/ + /*--- Barrier ensures all threads see the CFL values read/written by master thread + before proceeding. This prevents data races during nested MultiGrid_Cycle calls. ---*/ SU2_OMP_BARRIER /*--- Update LocalCFL at each coarse grid point ---*/ diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index 6d4f3fef5174..f117b092c2a5 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.062355, 0.000402] + tutorial_inv_bump.test_vals = [-1.437425, 4.075857, 0.060602, -0.001097] test_list.append(tutorial_inv_bump) # Inviscid Wedge @@ -183,7 +183,7 @@ def main(): tutorial_inv_wedge.cfg_dir = "../Tutorials/compressible_flow/Inviscid_Wedge" tutorial_inv_wedge.cfg_file = "inv_wedge_HLLC.cfg" tutorial_inv_wedge.test_iter = 0 - tutorial_inv_wedge.test_vals = [-0.481460, 5.253008, -0.290711, 0.051397] + tutorial_inv_wedge.test_vals = [-0.481460, 5.253008, -0.290816, 0.051445] tutorial_inv_wedge.no_restart = True test_list.append(tutorial_inv_wedge) @@ -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.014753, 31.991973] + 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.166575, 0.241919] + tutorial_design_inv_naca0012.test_vals = [-3.585391, -2.989014, 0.165195, 0.238368] tutorial_design_inv_naca0012.no_restart = True test_list.append(tutorial_design_inv_naca0012) From 7f91e5d0cb07d0f918cda3ae52343f4d79d5b9e1 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Fri, 20 Feb 2026 09:47:52 +0100 Subject: [PATCH 101/229] revert OMP_MASTER implementation --- .../src/integration/CMultiGridIntegration.cpp | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 776782b125d1..f058faad927f 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -488,24 +488,18 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, GetProlongated_Correction(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config); - /*--- Get current CFL values - only master thread reads to avoid concurrent access races. - All other threads wait at barrier to get the same cached values. ---*/ - su2double CFL_fine = 0.0; - su2double CFL_coarse_current = 0.0; - su2double CFL_coarse_new = 0.0; + /*--- Get current CFL values + Read in shared scope since all threads need the same values, but ensure thread safety ---*/ + su2double CFL_fine = config->GetCFL(iMesh); + su2double CFL_coarse_current = config->GetCFL(iMesh+1); - SU2_OMP_MASTER - { - CFL_fine = config->GetCFL(iMesh); - CFL_coarse_current = config->GetCFL(iMesh+1); - /*--- Compute adaptive CFL for coarse grid (master thread only) ---*/ - CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine, CFL_coarse_current); - } - END_SU2_OMP_MASTER + /*--- Compute adaptive CFL for coarse grid ---*/ + su2double CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine, CFL_coarse_current); - /*--- Barrier ensures all threads see the CFL values read/written by master thread - before proceeding. This prevents data races during nested MultiGrid_Cycle calls. ---*/ + /*--- Explicit barrier to ensure all threads see the updated CFL from computeMultigridCFL + before proceeding. This prevents data races where threads at different recursion depths + might read stale CFL values during nested MultiGrid_Cycle calls. ---*/ SU2_OMP_BARRIER /*--- Update LocalCFL at each coarse grid point ---*/ From ae774f54f8d3cc690fa6af4ff69a4ccd6e344873 Mon Sep 17 00:00:00 2001 From: Evert Bunschoten <38651601+EvertBunschoten@users.noreply.github.com> Date: Fri, 20 Feb 2026 10:14:39 +0100 Subject: [PATCH 102/229] Improved initial guess for Newton solver in data-driven fluid model (#2734) * Moved options for initial guess of density and internal energy for data-driven fluid model to deprecated * Added initial guess function through a small thermodynamic table and prevent Newton solver processes from getting stuck on bounds of the lookup algorithm * Simplified expression for speed of sound --- Common/include/option_structure.hpp | 2 - Common/src/CConfig.cpp | 6 +- SU2_CFD/include/fluid/CDataDrivenFluid.hpp | 75 +++++++++-- SU2_CFD/src/fluid/CDataDrivenFluid.cpp | 150 +++++++++++++-------- config_template.cfg | 5 - 5 files changed, 155 insertions(+), 83 deletions(-) diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index 690350fae050..1361a12072da 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -1345,8 +1345,6 @@ inline LM_ParsedOptions ParseLMOptions(const LM_OPTIONS *LM_Options, unsigned sh * \brief Structure containing parsed options for data-driven fluid model. */ struct DataDrivenFluid_ParsedOptions { - su2double rho_init_custom = -1; /*!< \brief Optional initial guess for density in inverse look-up operations. */ - su2double e_init_custom = -1; /*!< \brief Optional initial guess for static energy in inverse look-up operations.*/ su2double Newton_relaxation = 1.0; /*!< \brief Relaxation factor for Newton solvers in data-driven fluid models. */ bool use_PINN = false; /*!< \brief Use physics-informed method for data-driven fluid modeling. */ ENUM_DATADRIVEN_METHOD interp_algorithm_type = ENUM_DATADRIVEN_METHOD::MLP; /*!< \brief Interpolation algorithm used for data-driven fluid model. */ diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 523d527c2087..18884a52a35b 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -1229,10 +1229,6 @@ void CConfig::SetConfig_Options() { addStringListOption("FILENAMES_INTERPOLATOR", datadriven_ParsedOptions.n_filenames, datadriven_ParsedOptions.datadriven_filenames); /*!\brief DATADRIVEN_NEWTON_RELAXATION \n DESCRIPTION: Relaxation factor for Newton solvers in data-driven fluid model. \n \ingroup Config*/ addDoubleOption("DATADRIVEN_NEWTON_RELAXATION", datadriven_ParsedOptions.Newton_relaxation, 1.0); - /*!\brief DATADRIVEN_INITIAL_DENSITY \n DESCRIPTION: Optional initial value for fluid density used for the Newton solver processes in the data-driven fluid model. */ - addDoubleOption("DATADRIVEN_INITIAL_DENSITY", datadriven_ParsedOptions.rho_init_custom, -1.0); - /*!\brief DATADRIVEN_INITIAL_ENERGY \n DESCRIPTION: Optional initial value for fluid static energy used for the Newton solver processes in the data-driven fluid model. */ - addDoubleOption("DATADRIVEN_INITIAL_ENERGY", datadriven_ParsedOptions.e_init_custom, -1.0); /*!\biref USE_PINN \n DESCRIPTION: Use physics-informed approach for the entropy-based fluid model. \n \ingroup Config*/ addBoolOption("USE_PINN",datadriven_ParsedOptions.use_PINN, false); @@ -3176,6 +3172,8 @@ void CConfig::SetConfig_Parsing(istream& config_buffer){ newString.append("RAMP_ROTATION_FRAME_COEFF is deprectaed. Use RAMP_MOTION_FRAME_COEFF instead"); else if (!option_name.compare("INC_INLET_USENORMAL")) newString.append("INC_INLET_USENORMAL is deprecated. Use INLET_USE_NORMAL instead (compatible with all solvers).\n\n"); + else if (!option_name.compare("DATADRIVEN_INITIAL_ENERGY") || !option_name.compare("DATADRIVEN_INITIAL_DENSITY")) + newString.append("DATADRIVEN_INITIAL_ENERGY and DATADRIVEN_INITIAL_DENSITY are deprecated, there are no replacements.\n\n"); else { /*--- Find the most likely candidate for the unrecognized option, based on the length of start and end character sequences shared by candidates and the option. ---*/ diff --git a/SU2_CFD/include/fluid/CDataDrivenFluid.hpp b/SU2_CFD/include/fluid/CDataDrivenFluid.hpp index 2298425802d1..45cd6f430625 100644 --- a/SU2_CFD/include/fluid/CDataDrivenFluid.hpp +++ b/SU2_CFD/include/fluid/CDataDrivenFluid.hpp @@ -37,6 +37,62 @@ #endif #include "CFluidModel.hpp" +/*! + * \class MiniTable2D + * \brief Simple 2D thermodynamic table used to identify the starting point for the Newton solver. + * \author: E.C.Bunschoten. + */ +class MiniTable2D { + size_t nP{5}, + n_vars; + su2activematrix TD_data; + su2vector TD_data_min,TD_data_max; + public: + MiniTable2D()=default; + + /*! + * \brief Set the number of table nodes + * \param[in] nP_in - Number of table nodes. + */ + void SetNPoints(const size_t nP_in) { nP=nP_in; } + + /*! + * \brief Set the number of thermodynamic variables in the table. + * \param[in] n_vars_in - Number of thermodynamic variables. + */ + void SetNVars(const size_t n_vars_in) { n_vars = n_vars_in; } + + /*! + * \brief Specify the thermodynamic data at a table node. + * \param[in] iVar - Variable index. + * \param[in] iX - Table node index. + * \param[in] val_var - Thermodynamic state value. + */ + void SetTableData(const size_t iVar, const size_t iX, const su2double val_var) { + TD_data[iVar][iX] = val_var; + } + + /*! + * \brief Size table data arrays. + */ + void SizeTable(); + + /*! + * \brief Normalize thermodynamic data for regularization. + */ + void ScaleTableData(); + + /*! + * \brief Find the node in the table closest to the query. + * \param[in] iX - Index of the first thermodynamic variable. + * \param[in] val_x - Query of the first thermodynamic variable. + * \param[in] iY - Index of the second thermodynamic variable. + * \param[in] val_y - Query of the second thermodynamic variable. + * \returns Nearest neighbor index. + */ + size_t FindNode(const size_t iX, const su2double val_x, const size_t iY, const su2double val_y) const; +}; + /*! * \class CDataDrivenFluid * \brief Template class for fluid model definition using multi-layer perceptrons for @@ -61,13 +117,6 @@ class CDataDrivenFluid final : public CFluidModel { Newton_Tolerance, /*!< \brief Normalized tolerance for Newton solvers. */ rho_min, rho_max, /*!< \brief Minimum and maximum density values in data set. */ e_min, e_max; /*!< \brief Minimum and maximum energy values in data set. */ - - bool custom_init_rho{false}, - custom_init_e{false}; - su2double val_custom_init_rho, - val_custom_init_e, - rho_median, - e_median; unsigned long MaxIter_Newton; /*!< \brief Maximum number of iterations for Newton solvers. */ @@ -77,13 +126,6 @@ class CDataDrivenFluid final : public CFluidModel { d2sdedrho, /*!< \brief Entropy second derivative w.r.t. density and static energy. */ d2sdrho2; /*!< \brief Entropy second derivative w.r.t. static density. */ - su2double R_idealgas, /*!< \brief Approximated ideal gas constant. */ - Cp_idealgas, /*!< \brief Approximated ideal gas specific heat at constant pressure. */ - gamma_idealgas, /*!< \brief Approximated ideal gas specific heat ratio. */ - Cv_idealgas, /*!< \brief Approximated ideal gas specific heat at constant volume. */ - P_middle, /*!< \brief Pressure computed from the centre of the data set. */ - T_middle; /*!< \brief Temperature computed from the centre of the data set. */ - su2double Enthalpy, /*!< \brief Fluid enthalpy value [J kg^-1] */ dhdrho_e, /*!< \brief Enthalpy derivative w.r.t. density. */ dhde_rho; /*!< \brief Enthalpy derivative w.r.t. static energy. */ @@ -99,6 +141,7 @@ class CDataDrivenFluid final : public CFluidModel { bool use_MLP_derivatives; /*!< \brief Use physics-informed model. */ + bool display_Newton_process{false}; /*--- Class variables for the multi-layer perceptron method ---*/ #ifdef USE_MLPCPP MLPToolbox::CLookUp_ANN* lookup_mlp; /*!< \brief Multi-layer perceptron collection. */ @@ -106,6 +149,10 @@ class CDataDrivenFluid final : public CFluidModel { #endif vector MLP_inputs; /*!< \brief Inputs for the multi-layer perceptron look-up operation. */ + MiniTable2D coarse_TD_table; /*!< \brief Small thermodynamic table used to identify the starting point of the Newton solver processes. */ + const size_t iRho{0},iE{1},iP{2},iT{3}; /*!< Indices of thermodynamic variables in the table. */ + su2vector vals_rho_table, vals_e_table; /*!< Density and static energy values of the table nodes. */ + CLookUpTable* lookup_table; /*!< \brief Look-up table regression object. */ unsigned long LUT_idx_s, LUT_idx_dsde_rho, diff --git a/SU2_CFD/src/fluid/CDataDrivenFluid.cpp b/SU2_CFD/src/fluid/CDataDrivenFluid.cpp index cea19c47c155..64fa394f74f9 100644 --- a/SU2_CFD/src/fluid/CDataDrivenFluid.cpp +++ b/SU2_CFD/src/fluid/CDataDrivenFluid.cpp @@ -43,13 +43,6 @@ CDataDrivenFluid::CDataDrivenFluid(const CConfig* config, bool display) : CFluid /*--- Use physics-informed approach ---*/ use_MLP_derivatives = datadriven_fluid_options.use_PINN; - /*--- Retrieve initial density and static energy values from config ---*/ - val_custom_init_e = datadriven_fluid_options.rho_init_custom; - val_custom_init_rho = datadriven_fluid_options.e_init_custom; - custom_init_e = (val_custom_init_e != -1.0); - custom_init_rho = (val_custom_init_rho != -1.0); - - /*--- Set up interpolation algorithm according to data-driven method. Currently only MLP's are supported. ---*/ switch (Kind_DataDriven_Method) { case ENUM_DATADRIVEN_METHOD::MLP: @@ -205,14 +198,11 @@ void CDataDrivenFluid::SetTDState_rhoe(su2double rho, su2double e) { dTdrho_e = -Temperature * Temperature * d2sdedrho; /*--- Compute speed of sound. ---*/ - const su2double blue_term = (dsdrho_e * (2 - Density * Temperature * d2sdedrho) + Density * d2sdrho2); - const su2double green_term = (-Temperature * d2sde2 * dsdrho_e + d2sdedrho); - - SoundSpeed2 = -Density * Temperature * (blue_term - Density * green_term * (dsdrho_e / dsde_rho)); - dPde_rho = -rho_2 * Temperature * (-Temperature * (d2sde2 * dsdrho_e) + d2sdedrho); dPdrho_e = - Density * Temperature * (dsdrho_e * (2 - Density * Temperature * d2sdedrho) + Density * d2sdrho2); + SoundSpeed2 = dPdrho_e - (dsdrho_e / dsde_rho) * dPde_rho; + /*--- Compute enthalpy and entropy derivatives required for Giles boundary conditions. ---*/ dhdrho_e = -Pressure * (1 / rho_2) + dPdrho_e / Density; dhde_rho = 1 + dPde_rho / Density; @@ -243,10 +233,10 @@ void CDataDrivenFluid::SetTDState_rhoe(su2double rho, su2double e) { } void CDataDrivenFluid::SetTDState_PT(su2double P, su2double T) { - - /*--- Approximate density and static energy with ideal gas law. ---*/ - rho_start = P / (R_idealgas * T); - e_start = Cv_idealgas * T; + /*--- Find nearest neighbor on pressure-temperature thermodynamic table ---*/ + const auto iNearest = coarse_TD_table.FindNode(iP, P, iT, T); + e_start = vals_e_table[iNearest]; + rho_start = vals_rho_table[iNearest]; /*--- Run 2D Newton solver for pressure and temperature ---*/ Run_Newton_Solver(P, T, Pressure, Temperature, dPdrho_e, dPde_rho, dTdrho_e, dTde_rho); @@ -258,42 +248,41 @@ void CDataDrivenFluid::SetTDState_Prho(su2double P, su2double rho) { } void CDataDrivenFluid::SetEnergy_Prho(su2double P, su2double rho) { - /*--- Run 1D Newton solver for pressure at constant density. ---*/ + /*--- Find nearest neighbor on pressure-density thermodynamic table ---*/ + const auto iNearest = coarse_TD_table.FindNode(iP, P, iRho, rho); + StaticEnergy = vals_e_table[iNearest]; Density = rho; - /*--- Approximate static energy through ideal gas law. ---*/ - StaticEnergy = Cv_idealgas * (P / (R_idealgas * rho)); - + /*--- Run 1D Newton solver for pressure at constant density. ---*/ Run_Newton_Solver(P, Pressure, StaticEnergy, dPde_rho); } void CDataDrivenFluid::SetTDState_rhoT(su2double rho, su2double T) { - /*--- Run 1D Newton solver for temperature at constant density. ---*/ + /*--- Find nearest neighbor on density-temperature thermodynamic table ---*/ + const auto iNearest = coarse_TD_table.FindNode(iRho, rho, iT, T); + StaticEnergy = vals_e_table[iNearest]; Density = rho; - /*--- Approximate static energy through ideal gas law. ---*/ - StaticEnergy = Cv_idealgas * T; - + /*--- Run 1D Newton solver for temperature at constant density. ---*/ Run_Newton_Solver(T, Temperature, StaticEnergy, dTde_rho); } void CDataDrivenFluid::SetTDState_hs(su2double h, su2double s) { - /*--- Run 2D Newton solver for enthalpy and entropy. ---*/ - + /*--- Initial values for density and static energy from previous thermodynamic call. ---*/ e_start = StaticEnergy; rho_start = Density; + /*--- Run 2D Newton solver for enthalpy and entropy. ---*/ Run_Newton_Solver(h, s, Enthalpy, Entropy, dhdrho_e, dhde_rho, dsdrho_e, dsde_rho); } void CDataDrivenFluid::SetTDState_Ps(su2double P, su2double s) { - /*--- Run 2D Newton solver for pressure and entropy ---*/ - + /*--- Initial values for density and static energy from previous thermodynamic call. ---*/ e_start = StaticEnergy; - rho_start = Density; + rho_start = Density; + /*--- Run 2D Newton solver for pressure and entropy ---*/ Run_Newton_Solver(P, s, Pressure, Entropy, dPdrho_e, dPde_rho, dsdrho_e, dsde_rho); } - void CDataDrivenFluid::ComputeDerivativeNRBC_Prho(su2double P, su2double rho) { SetTDState_Prho(P, rho); @@ -354,7 +343,7 @@ void CDataDrivenFluid::Run_Newton_Solver(const su2double Y1_target, const su2dou bool converged = false; unsigned long Iter = 0; - + su2double extra_relaxation{1.0}; /*--- Initiating Newton solver ---*/ while (!converged && (Iter < MaxIter_Newton)) { /*--- Determine thermodynamic state based on current density and energy. ---*/ @@ -363,7 +352,7 @@ void CDataDrivenFluid::Run_Newton_Solver(const su2double Y1_target, const su2dou /*--- Determine residuals. ---*/ const su2double delta_Y1 = Y1 - Y1_target; const su2double delta_Y2 = Y2 - Y2_target; - + /*--- Continue iterative process if residuals are outside tolerances. ---*/ if ((abs(delta_Y1 / Y1) < Newton_Tolerance) && (abs(delta_Y2 / Y2) < Newton_Tolerance)) { converged = true; @@ -373,9 +362,17 @@ void CDataDrivenFluid::Run_Newton_Solver(const su2double Y1_target, const su2dou const su2double delta_rho = (dY2de * delta_Y1 - dY1de * delta_Y2) / determinant; const su2double delta_e = (-dY2drho * delta_Y1 + dY1drho * delta_Y2) / determinant; + extra_relaxation = 1.0; + /*--- Check if updated values exceed the bounds. If so, apply extra relaxation. ---*/ + if (rho - delta_rho <= rho_min) extra_relaxation = min(extra_relaxation, 0.5*(rho - rho_min) / (Newton_Relaxation * delta_rho)); + if (rho - delta_rho >= rho_max) extra_relaxation = min(extra_relaxation, 0.5*(rho - rho_max) / (Newton_Relaxation * delta_rho)); + + if (e - delta_e <= e_min) extra_relaxation = min(extra_relaxation, 0.5*(e - e_min) / (Newton_Relaxation * delta_e)); + if (e - delta_e >= e_max) extra_relaxation = min(extra_relaxation, 0.5*(e - e_max) / (Newton_Relaxation * delta_e)); + /*--- Update density and energy values. ---*/ - rho -= Newton_Relaxation * delta_rho; - e -= Newton_Relaxation * delta_e; + rho -= extra_relaxation * Newton_Relaxation * delta_rho; + e -= extra_relaxation * Newton_Relaxation * delta_e; } Iter++; } @@ -426,9 +423,7 @@ void CDataDrivenFluid::Run_Newton_Solver(const su2double Y_target, const su2doub } void CDataDrivenFluid::ComputeIdealGasQuantities() { - /*--- Compute approximate ideal gas properties from the middle of the reference data set. These properties are used to approximate the initial condition of the Newton solvers using the ideal gas law. ---*/ - su2double rho_average = 1.0, e_average = 1.0; - + /*--- Obtain minimum and maximum density and static energy from data set. ---*/ switch (Kind_DataDriven_Method) { @@ -437,8 +432,6 @@ void CDataDrivenFluid::ComputeIdealGasQuantities() { e_min = *lookup_table->GetTableLimitsY().first; rho_max = *lookup_table->GetTableLimitsX().second; e_max = *lookup_table->GetTableLimitsY().second; - rho_average = 0.5*(*lookup_table->GetTableLimitsX().first + *lookup_table->GetTableLimitsX().second); - e_average = 0.5*(*lookup_table->GetTableLimitsY().first + *lookup_table->GetTableLimitsY().second); break; case ENUM_DATADRIVEN_METHOD::MLP: #ifdef USE_MLPCPP @@ -446,27 +439,68 @@ void CDataDrivenFluid::ComputeIdealGasQuantities() { e_min = lookup_mlp->GetInputNorm(iomap_rhoe, idx_e).first; rho_max = lookup_mlp->GetInputNorm(iomap_rhoe, idx_rho).second; e_max = lookup_mlp->GetInputNorm(iomap_rhoe, idx_e).second; - rho_average = lookup_mlp->GetInputOffset(iomap_rhoe, idx_rho); - e_average = lookup_mlp->GetInputOffset(iomap_rhoe, idx_e); #endif break; default: break; } - /*--- Compute thermodynamic state from middle of data set. ---*/ - - su2double rho_init = custom_init_rho ? val_custom_init_rho : rho_average; - su2double e_init = custom_init_e ? val_custom_init_e : e_average; - - SetTDState_rhoe(rho_init, e_init); - rho_median = rho_init; - e_median = e_init; - P_middle = Pressure; - T_middle = Temperature; - - R_idealgas = P_middle / (rho_init * T_middle); - Cv_idealgas = Cv; - Cp_idealgas = Cp; - - gamma_idealgas = (R_idealgas / Cv_idealgas) + 1; -} \ No newline at end of file + /*--- Create a five-by-five thermodynamic table used to provide initial guess for Newton solver ---*/ + coarse_TD_table = MiniTable2D(); + const size_t nTable_coarse{5}, + nP_table = nTable_coarse*nTable_coarse; + /*--- Variables included in table: density, static energy, pressure, temperature ---*/ + coarse_TD_table.SetNVars(4); + coarse_TD_table.SetNPoints(nP_table); + coarse_TD_table.SizeTable(); + /*--- Discretize thermodynamic space in terms of density and static energy ---*/ + vals_rho_table.resize(nP_table); + vals_e_table.resize(nP_table); + const su2double delta_rho = (rho_max - rho_min) / (nTable_coarse-1); + const su2double delta_e = (e_max - e_min) / (nTable_coarse-1); + /*--- Calculate thermodynamic states on the table nodes ---*/ + size_t kNode=0; + for (auto iNode=0u; iNode Date: Sun, 22 Feb 2026 14:28:08 +0100 Subject: [PATCH 103/229] using passivedouble --- .../integration/CMultiGridIntegration.hpp | 8 ++-- .../src/integration/CMultiGridIntegration.cpp | 40 ++++++++++++------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index 1e2dd10ecb3c..fbc568bd7fc1 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -185,12 +185,12 @@ class CMultiGridIntegration final : public CIntegration { * \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. - * \param[in] CFL_coarse_current - Current coarse grid CFL value. + * \param[in] CFL_fine - Fine grid CFL value (passive). + * \param[in] CFL_coarse_current - Current coarse grid CFL value (passive). * \return New CFL value for the coarse grid. */ - su2double computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, - unsigned short iMesh, su2double CFL_fine, su2double CFL_coarse_current); + passivedouble computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, + unsigned short iMesh, passivedouble CFL_fine, passivedouble CFL_coarse_current); /*--- CFL adaptation state variables ---*/ static constexpr int MAX_MG_LEVELS = 10; diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index f058faad927f..76e894eaddc3 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -82,9 +82,9 @@ void ProjectEulerWallToTangentPlane(CGeometry* geo_coarse, const CConfig* config } } // anonymous namespace -su2double CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, - unsigned short iMesh, su2double CFL_fine, su2double CFL_coarse_current) { - su2double current_coeff = CFL_coarse_current / CFL_fine; +passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, + unsigned short iMesh, passivedouble CFL_fine, passivedouble CFL_coarse_current) { + passivedouble current_coeff = CFL_coarse_current / CFL_fine; /*--- Adaptive CFL using Exponential Moving Average (EMA) ---*/ /*--- All operations performed in master thread for determinism ---*/ @@ -92,7 +92,7 @@ su2double CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolver* s /*--- Only master thread performs CFL adaptation to ensure deterministic behavior ---*/ /*--- All adaptive CFL state and computation must be done by a single thread ---*/ - su2double CFL_coarse_new = CFL_coarse_current; // Default: keep current value + passivedouble CFL_coarse_new = CFL_coarse_current; // Default: keep current value SU2_OMP_MASTER { @@ -171,8 +171,8 @@ su2double CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolver* s } /*--- Check if we should compare and adapt CFL ---*/ - su2double new_coeff = current_coeff; - const su2double MIN_REDUCTION_FACTOR = 0.98; // Require at least 2% reduction + 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 ---*/ @@ -223,8 +223,10 @@ su2double CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolver* s SU2_MPI::Bcast(&CFL_coarse_new, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); #endif - /*--- Update the shared config object ---*/ + /*--- Update the shared config object (wrapped to prevent tape recording) ---*/ + const bool wasActive = AD::BeginPassive(); config->SetCFL(iMesh+1, CFL_coarse_new); + AD::EndPassive(wasActive); } END_SU2_OMP_MASTER /*--- Implicit barrier at end of master region ensures all threads see updated CFL ---*/ @@ -474,7 +476,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, if (iMesh == config->GetnMGLevels()-2) nextRecurseParam = 0; - /*--- Synchronize prior to recursive calls for determinism ---*/ + /*--- Synchronize prior to recursive calls ---*/ SU2_OMP_BARRIER MultiGrid_Cycle(geometry, solver_container, numerics_container, config_container, @@ -488,14 +490,24 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, GetProlongated_Correction(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config); - /*--- Get current CFL values - Read in shared scope since all threads need the same values, but ensure thread safety ---*/ - su2double CFL_fine = config->GetCFL(iMesh); - su2double CFL_coarse_current = config->GetCFL(iMesh+1); + /*--- Synchronize before reading CFL to avoid race with concurrent writes from computeMultigridCFL ---*/ + SU2_OMP_BARRIER + + /*--- Read current CFL values in master thread to ensure thread-safe access. + Extract passive values to avoid AD tape recording in parallel region. ---*/ + passivedouble CFL_fine_passive = 0.0; + passivedouble CFL_coarse_current_passive = 0.0; + SU2_OMP_MASTER + { + CFL_fine_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh)); + CFL_coarse_current_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh+1)); + } + END_SU2_OMP_MASTER + /*--- Implicit barrier here ensures all threads see the CFL values before proceeding ---*/ - /*--- Compute adaptive CFL for coarse grid ---*/ - su2double CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine, CFL_coarse_current); + /*--- Compute adaptive CFL for coarse grid using passive values (no tape recording) ---*/ + passivedouble CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine_passive, CFL_coarse_current_passive); /*--- Explicit barrier to ensure all threads see the updated CFL from computeMultigridCFL before proceeding. This prevents data races where threads at different recursion depths From 89a0ca7e5abaa1d6c786e3817ab8b715f7f70f75 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 22 Feb 2026 16:19:24 +0100 Subject: [PATCH 104/229] using OMP_SAFE_GLOBAL_ACCESS --- .../src/integration/CMultiGridIntegration.cpp | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 76e894eaddc3..de020124d634 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -407,9 +407,14 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); - /*--- Time integration, update solution using the old solution plus the solution increment ---*/ - - Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); + /*--- Time integration, update solution using the old solution plus the solution increment. + Wrap in SAFE_GLOBAL_ACCESS so only the master thread enters the implicit linear solver. + This prevents a data race where all cooperative OMP threads simultaneously call + SU2_MPI::Error when FGMRES diverges (nestedParallel=false when omp_in_parallel()). ---*/ + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS /*--- Send-Receive boundary conditions, and postprocessing ---*/ @@ -417,10 +422,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, } - /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ - solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - } /*--- Compute Forcing Term $P_(k+1) = I^(k+1)_k(P_k+F_k(u_k))-F_(k+1)(I^(k+1)_k u_k)$ and update solution for multigrid ---*/ @@ -547,17 +548,16 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); - Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); + /*--- Same thread-safety guard as presmoothing: only master enters implicit linear solve. ---*/ + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS solver_fine->Postprocessing(geometry_fine, solver_container_fine, config, iMesh); } - /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ - // nijso: check if this can be removed now. - //solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - //solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - } } From ef5e251eb7aacf190ced44dbf5d6c53d837455ce Mon Sep 17 00:00:00 2001 From: Kanak Agarwal Date: Sun, 22 Feb 2026 23:31:58 +0530 Subject: [PATCH 105/229] Fix missing include in vendored CLI11 (GCC 14+) --- externals/CLI11/CLI11.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/externals/CLI11/CLI11.hpp b/externals/CLI11/CLI11.hpp index 5c880875042b..2b859cc3999c 100644 --- a/externals/CLI11/CLI11.hpp +++ b/externals/CLI11/CLI11.hpp @@ -62,6 +62,7 @@ #include #include #include +#include // Verbatim copy from CLI/Version.hpp: From 6f2631c30ca502fde37fca9384c8fe221797c598 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 22 Feb 2026 19:56:48 +0100 Subject: [PATCH 106/229] deactivate adaptive mg-cfl --- .../src/integration/CMultiGridIntegration.cpp | 49 +++++++------------ 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index de020124d634..697bef04d7b6 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -408,13 +408,11 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); /*--- Time integration, update solution using the old solution plus the solution increment. - Wrap in SAFE_GLOBAL_ACCESS so only the master thread enters the implicit linear solver. - This prevents a data race where all cooperative OMP threads simultaneously call - SU2_MPI::Error when FGMRES diverges (nestedParallel=false when omp_in_parallel()). ---*/ - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { - Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); - } - END_SU2_OMP_SAFE_GLOBAL_ACCESS + Must be called from ALL threads cooperatively: CSysSolve::Solve uses internal + SU2_OMP_BARRIER / SU2_OMP_FOR constructs that require participation of all threads. + Wrapping in SU2_OMP_MASTER would park non-master threads at the outer barrier, + starving the inner barriers and causing data races / deadlocks. ---*/ + Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); /*--- Send-Receive boundary conditions, and postprocessing ---*/ @@ -496,19 +494,21 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Read current CFL values in master thread to ensure thread-safe access. Extract passive values to avoid AD tape recording in parallel region. ---*/ - passivedouble CFL_fine_passive = 0.0; - passivedouble CFL_coarse_current_passive = 0.0; - - SU2_OMP_MASTER - { - CFL_fine_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh)); - CFL_coarse_current_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh+1)); - } - END_SU2_OMP_MASTER + // passivedouble CFL_fine_passive = 0.0; + // passivedouble CFL_coarse_current_passive = 0.0; + + // SU2_OMP_MASTER + // { + // CFL_fine_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh)); + // CFL_coarse_current_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh+1)); + // } + // END_SU2_OMP_MASTER /*--- Implicit barrier here ensures all threads see the CFL values before proceeding ---*/ /*--- Compute adaptive CFL for coarse grid using passive values (no tape recording) ---*/ - passivedouble CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine_passive, CFL_coarse_current_passive); + + //nijso: just put a fixed value to see if the omp problem is really here... + passivedouble CFL_coarse_new = 1.0; //computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine_passive, CFL_coarse_current_passive); /*--- Explicit barrier to ensure all threads see the updated CFL from computeMultigridCFL before proceeding. This prevents data races where threads at different recursion depths @@ -548,11 +548,8 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); - /*--- Same thread-safety guard as presmoothing: only master enters implicit linear solve. ---*/ - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { - Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); - } - END_SU2_OMP_SAFE_GLOBAL_ACCESS + /*--- Must be called cooperatively from all threads (see presmooth comment). ---*/ + Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); solver_fine->Postprocessing(geometry_fine, solver_container_fine, config, iMesh); @@ -602,10 +599,6 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; - /*--- Ensure all threads complete before MPI communication ---*/ - //nijso: check if this can be removed now. - //SU2_OMP_BARRIER - /*--- Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ ProjectEulerWallToTangentPlane(geo_coarse, config, sol_coarse, true); @@ -634,10 +627,6 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS sol_coarse->InitiateComms(geo_coarse, config, MPI_QUANTITIES::SOLUTION_OLD); sol_coarse->CompleteComms(geo_coarse, config, MPI_QUANTITIES::SOLUTION_OLD); - /*--- Ensure MPI completion visible to all threads ---*/ - // nijso: remove? - //SU2_OMP_BARRIER - SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { for (auto iChildren = 0u; iChildren < geo_coarse->nodes->GetnChildren_CV(Point_Coarse); iChildren++) { From 8f28750ec907138df21255dc86c65843c4880eee Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 22 Feb 2026 18:30:22 -0800 Subject: [PATCH 107/229] manage adjoint heat solver in the adj FEA iteration --- .../iteration/CDiscAdjFEAIteration.hpp | 5 +- .../include/output/CAdjElasticityOutput.hpp | 1 + SU2_CFD/include/output/CAdjHeatOutput.hpp | 12 +++- SU2_CFD/include/output/CElasticityOutput.hpp | 1 - SU2_CFD/include/output/COutput.hpp | 2 + SU2_CFD/include/solvers/CFEASolver.hpp | 6 +- SU2_CFD/src/drivers/CDriver.cpp | 27 ++++---- .../src/iteration/CDiscAdjFEAIteration.cpp | 64 +++++++++++++------ SU2_CFD/src/output/CAdjElasticityOutput.cpp | 41 ++++++++++++ SU2_CFD/src/output/CAdjHeatOutput.cpp | 33 ++++++---- SU2_CFD/src/output/CElasticityOutput.cpp | 4 -- SU2_CFD/src/solvers/CFEASolver.cpp | 2 +- SU2_CFD/src/solvers/CHeatSolver.cpp | 4 ++ SU2_CFD/src/solvers/CSolverFactory.cpp | 6 +- .../ThermalBeam_3d/configBeamNonlinear_3d.cfg | 2 - .../configBeamNonlinear_3d_ad.cfg | 55 ++++++++++++++++ .../fea_fsi/ThermalBeam_3d/configBeam_3d.cfg | 1 - TestCases/parallel_regression_AD.py | 9 +++ 18 files changed, 214 insertions(+), 61 deletions(-) create mode 100644 TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg diff --git a/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp b/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp index f2246f96cef3..12b4403f77dd 100644 --- a/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp +++ b/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp @@ -42,6 +42,9 @@ class CDiscAdjFEAIteration final : public CIteration { private: unsigned short CurrentRecording; /*!< \brief Stores the current status of the recording. */ + /*!< \brief Used for thermo elastic problems to avoid duplicating code. */ + CIteration* DiscAdjHeatIteration = nullptr; + /*! * \brief load solution for dynamic problems * \param[in] geometry - Geometrical definition of the problem. @@ -64,7 +67,7 @@ class CDiscAdjFEAIteration final : public CIteration { /*! * \brief Destructor of the class. */ - ~CDiscAdjFEAIteration(void) override; + ~CDiscAdjFEAIteration() override; /*! * \brief Preprocessing to prepare for an iteration of the physics. diff --git a/SU2_CFD/include/output/CAdjElasticityOutput.hpp b/SU2_CFD/include/output/CAdjElasticityOutput.hpp index 8a1d0559ca3e..c6872d5b3e2c 100644 --- a/SU2_CFD/include/output/CAdjElasticityOutput.hpp +++ b/SU2_CFD/include/output/CAdjElasticityOutput.hpp @@ -36,6 +36,7 @@ */ class CAdjElasticityOutput final : public COutput { private: + bool coupled_heat; //!< Boolean indicating a thermoelastic analysis unsigned short nVar_FEM; //!< Number of FEM variables public: diff --git a/SU2_CFD/include/output/CAdjHeatOutput.hpp b/SU2_CFD/include/output/CAdjHeatOutput.hpp index 72f8cffc931d..7c7a5a0bf865 100644 --- a/SU2_CFD/include/output/CAdjHeatOutput.hpp +++ b/SU2_CFD/include/output/CAdjHeatOutput.hpp @@ -46,7 +46,12 @@ class CAdjHeatOutput final: public COutput { /*! * \brief Destructor of the class. */ - ~CAdjHeatOutput(void) override; + ~CAdjHeatOutput() override; + + /*! + * \brief Set the history output field values in another output instance. + */ + static void LoadHistoryDataImpl(CConfig *config, CGeometry *geometry, CSolver **solver, COutput* output); /*! * \brief Load the history output field values @@ -54,6 +59,11 @@ class CAdjHeatOutput final: public COutput { */ void LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver) override; + /*! + * \brief Set the available history output fields in another output instance. + */ + static void SetHistoryOutputFieldsImpl(CConfig *config, COutput* output); + /*! * \brief Set the available history output fields * \param[in] config - Definition of the particular problem. diff --git a/SU2_CFD/include/output/CElasticityOutput.hpp b/SU2_CFD/include/output/CElasticityOutput.hpp index c3c189512b47..ecf054a631a1 100644 --- a/SU2_CFD/include/output/CElasticityOutput.hpp +++ b/SU2_CFD/include/output/CElasticityOutput.hpp @@ -37,7 +37,6 @@ class CElasticityOutput final: public COutput { protected: - unsigned short nVar_FEM; //!< Number of FEM variables bool linear_analysis, //!< Boolean indicating a linear analysis nonlinear_analysis, //!< Boolean indicating a nonlinear analysis coupled_heat, //!< Boolean indicating a thermoelastic analysis diff --git a/SU2_CFD/include/output/COutput.hpp b/SU2_CFD/include/output/COutput.hpp index ce4e29ed2c17..555890b29ff0 100644 --- a/SU2_CFD/include/output/COutput.hpp +++ b/SU2_CFD/include/output/COutput.hpp @@ -56,6 +56,7 @@ class CFileWriter; class CParallelDataSorter; class CConfig; class CHeatOutput; +class CAdjHeatOutput; using namespace std; @@ -67,6 +68,7 @@ using namespace std; class COutput { protected: friend class CHeatOutput; + friend class CAdjHeatOutput; /*----------------------------- General ----------------------------*/ diff --git a/SU2_CFD/include/solvers/CFEASolver.hpp b/SU2_CFD/include/solvers/CFEASolver.hpp index ce472e585750..631f729b04eb 100644 --- a/SU2_CFD/include/solvers/CFEASolver.hpp +++ b/SU2_CFD/include/solvers/CFEASolver.hpp @@ -550,7 +550,7 @@ class CFEASolver : public CFEASolverBase { * \param[in] config - Definition of the problem. * \param[in] solver - Container vector with all the solutions. */ - void Evaluate_ObjFunc(const CConfig *config, CSolver**) final { + void Evaluate_ObjFunc(const CConfig *config, CSolver** solver) final { Total_ComboObj = 0.0; switch (config->GetKind_ObjFunc()) { case REFERENCE_GEOMETRY: @@ -575,6 +575,10 @@ class CFEASolver : public CFEASolverBase { Total_ComboObj = Total_Custom_ObjFunc; break; } + if (config->GetWeakly_Coupled_Heat()) { + solver[HEAT_SOL]->Evaluate_ObjFunc(config, solver); + Total_ComboObj += solver[HEAT_SOL]->GetTotal_ComboObj(); + } } /*! diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index 961ce04832ff..f491caa39b35 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -2769,9 +2769,10 @@ void CDriver::PrintDirectResidual(RECORDING kind_recording) { /*--- Helper lambda func to return lenghty [iVar][iZone] string. ---*/ auto iVar_iZone2string = [&](unsigned short ivar, unsigned short izone) { - if (multizone) + if (multizone) { return "[" + std::to_string(ivar) + "][" + std::to_string(izone) + "]"; - return "[" + std::to_string(ivar) + "]"; + } + return "[" + std::to_string(ivar) + "]"; }; /*--- Print residuals in the first iteration ---*/ @@ -2827,37 +2828,33 @@ void CDriver::PrintDirectResidual(RECORDING kind_recording) { if (!addVals) RMSTable.AddColumn("rms_Rad" + iVar_iZone2string(0, iZone), fieldWidth); else RMSTable << log10(solvers[RAD_SOL]->GetRes_RMS(0)); } - - } - else if (configs->GetStructuralProblem()) { - + } else if (configs->GetStructuralProblem()) { if (configs->GetGeometricConditions() == STRUCT_DEFORMATION::LARGE){ if (!addVals) { RMSTable.AddColumn("UTOL-A", fieldWidth); RMSTable.AddColumn("RTOL-A", fieldWidth); RMSTable.AddColumn("ETOL-A", fieldWidth); - } - else { + } else { RMSTable << log10(solvers[FEA_SOL]->GetRes_FEM(0)) << log10(solvers[FEA_SOL]->GetRes_FEM(1)) << log10(solvers[FEA_SOL]->GetRes_FEM(2)); } - } - else{ + } else { if (!addVals) { RMSTable.AddColumn("log10[RMS Ux]", fieldWidth); RMSTable.AddColumn("log10[RMS Uy]", fieldWidth); if (nDim == 3) RMSTable.AddColumn("log10[RMS Uz]", fieldWidth); - } - else { + } else { RMSTable << log10(solvers[FEA_SOL]->GetRes_FEM(0)) << log10(solvers[FEA_SOL]->GetRes_FEM(1)); if (nDim == 3) RMSTable << log10(solvers[FEA_SOL]->GetRes_FEM(2)); } } - - } - else if (configs->GetHeatProblem()) { + if (configs->GetWeakly_Coupled_Heat()){ + if (!addVals) RMSTable.AddColumn("rms_Heat", fieldWidth); + else RMSTable << log10(solvers[HEAT_SOL]->GetRes_RMS(0)); + } + } else if (configs->GetHeatProblem()) { if (!addVals) RMSTable.AddColumn("rms_Heat" + iVar_iZone2string(0, iZone), fieldWidth); else RMSTable << log10(solvers[HEAT_SOL]->GetRes_RMS(0)); diff --git a/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp index a6c3bfaa014e..a1425be3b7ff 100644 --- a/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp @@ -26,13 +26,20 @@ */ #include "../../include/iteration/CDiscAdjFEAIteration.hpp" +#include "../../include/iteration/CDiscAdjHeatIteration.hpp" #include "../../include/iteration/CFEAIteration.hpp" #include "../../include/solvers/CFEASolver.hpp" #include "../../include/output/COutput.hpp" -CDiscAdjFEAIteration::CDiscAdjFEAIteration(const CConfig *config) : CIteration(config), CurrentRecording(NONE) {} +CDiscAdjFEAIteration::CDiscAdjFEAIteration(const CConfig *config) : CIteration(config), CurrentRecording(NONE) { + if (config->GetWeakly_Coupled_Heat()) { + DiscAdjHeatIteration = new CDiscAdjHeatIteration(config); + } +} -CDiscAdjFEAIteration::~CDiscAdjFEAIteration() {} +CDiscAdjFEAIteration::~CDiscAdjFEAIteration() { + delete DiscAdjHeatIteration; +} void CDiscAdjFEAIteration::Preprocess(COutput* output, CIntegration**** integration, CGeometry**** geometry, CSolver***** solver, CNumerics****** numerics, CConfig** config, @@ -90,6 +97,10 @@ void CDiscAdjFEAIteration::Preprocess(COutput* output, CIntegration**** integrat solvers0[ADJFEA_SOL]->Preprocessing(geometry0, solvers0, config[iZone], MESH_0, 0, RUNTIME_ADJFEA_SYS, false); + if (DiscAdjHeatIteration) { + DiscAdjHeatIteration->Preprocess(output, integration, geometry, solver, numerics, config, surface_movement, + grid_movement, FFDBox, iZone, iInst); + } } void CDiscAdjFEAIteration::LoadDynamic_Solution(CGeometry**** geometry, CSolver***** solver, CConfig** config, @@ -115,23 +126,23 @@ void CDiscAdjFEAIteration::IterateDiscAdj(CGeometry**** geometry, CSolver***** s unsigned short iZone, unsigned short iInst, bool CrossTerm) { /*--- Extract the adjoints of the conservative input variables and store them for the next iteration ---*/ - - solver[iZone][iInst][MESH_0][ADJFEA_SOL]->ExtractAdjoint_Solution(geometry[iZone][iInst][MESH_0], config[iZone], - CrossTerm); - - solver[iZone][iInst][MESH_0][ADJFEA_SOL]->ExtractAdjoint_Variables(geometry[iZone][iInst][MESH_0], config[iZone]); + for (const auto iSol : {ADJFEA_SOL, ADJHEAT_SOL}) { + if (auto* sol = solver[iZone][iInst][MESH_0][iSol]; sol != nullptr) { + sol->ExtractAdjoint_Solution(geometry[iZone][iInst][MESH_0], config[iZone], CrossTerm); + sol->ExtractAdjoint_Variables(geometry[iZone][iInst][MESH_0], config[iZone]); + } + } } void CDiscAdjFEAIteration::RegisterInput(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst, RECORDING kind_recording) { if (kind_recording != RECORDING::MESH_COORDS) { - /*--- Register structural displacements as input ---*/ - - solver[iZone][iInst][MESH_0][ADJFEA_SOL]->RegisterSolution(geometry[iZone][iInst][MESH_0], config[iZone]); - - /*--- Register variables as input ---*/ - - solver[iZone][iInst][MESH_0][ADJFEA_SOL]->RegisterVariables(geometry[iZone][iInst][MESH_0], config[iZone]); + for (const auto iSol : {ADJFEA_SOL, ADJHEAT_SOL}) { + if (auto* sol = solver[iZone][iInst][MESH_0][iSol]; sol != nullptr) { + sol->RegisterSolution(geometry[iZone][iInst][MESH_0], config[iZone]); + sol->RegisterVariables(geometry[iZone][iInst][MESH_0], config[iZone]); + } + } } else { /*--- Register topology optimization densities (note direct solver) ---*/ @@ -146,6 +157,10 @@ void CDiscAdjFEAIteration::RegisterInput(CSolver***** solver, CGeometry**** geom void CDiscAdjFEAIteration::SetDependencies(CSolver***** solver, CGeometry**** geometry, CNumerics****** numerics, CConfig** config, unsigned short iZone, unsigned short iInst, RECORDING kind_recording) { + if (DiscAdjHeatIteration) { + DiscAdjHeatIteration->SetDependencies(solver, geometry, numerics, config, iZone, iInst, kind_recording); + } + auto dir_solver = solver[iZone][iInst][MESH_0][FEA_SOL]; auto adj_solver = solver[iZone][iInst][MESH_0][ADJFEA_SOL]; auto structural_geometry = geometry[iZone][iInst][MESH_0]; @@ -263,18 +278,25 @@ void CDiscAdjFEAIteration::SetDependencies(CSolver***** solver, CGeometry**** ge void CDiscAdjFEAIteration::RegisterOutput(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst) { - /*--- Register conservative variables as output of the iteration ---*/ - - solver[iZone][iInst][MESH_0][ADJFEA_SOL]->RegisterOutput(geometry[iZone][iInst][MESH_0], config[iZone]); + /*--- Register solution variables as output of the iteration. ---*/ + for (const auto iSol : {ADJFEA_SOL, ADJHEAT_SOL}) { + if (auto* sol = solver[iZone][iInst][MESH_0][iSol]; sol != nullptr) { + sol->RegisterOutput(geometry[iZone][iInst][MESH_0], config[iZone]); + } + } } void CDiscAdjFEAIteration::InitializeAdjoint(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst) { - /*--- Initialize the adjoints the conservative variables ---*/ + /*--- Initialize the adjoints of the solution variables. ---*/ AD::ResizeAdjoints(); AD::BeginUseAdjoints(); - solver[iZone][iInst][MESH_0][ADJFEA_SOL]->SetAdjoint_Output(geometry[iZone][iInst][MESH_0], config[iZone]); + for (const auto iSol : {ADJFEA_SOL, ADJHEAT_SOL}) { + if (auto* sol = solver[iZone][iInst][MESH_0][iSol]; sol != nullptr) { + sol->SetAdjoint_Output(geometry[iZone][iInst][MESH_0], config[iZone]); + } + } AD::EndUseAdjoints(); } @@ -285,8 +307,8 @@ bool CDiscAdjFEAIteration::Monitor(COutput* output, CIntegration**** integration /*--- Write the convergence history (only screen output) ---*/ output->SetHistoryOutput(geometry[iZone][INST_0][MESH_0], solver[iZone][INST_0][MESH_0], config[iZone], - config[iZone]->GetTimeIter(), config[iZone]->GetOuterIter(), - config[iZone]->GetInnerIter()); + config[iZone]->GetTimeIter(), config[iZone]->GetOuterIter(), + config[iZone]->GetInnerIter()); return output->GetConvergence(); } diff --git a/SU2_CFD/src/output/CAdjElasticityOutput.cpp b/SU2_CFD/src/output/CAdjElasticityOutput.cpp index 2320cabf5a53..6fc59bf7384a 100644 --- a/SU2_CFD/src/output/CAdjElasticityOutput.cpp +++ b/SU2_CFD/src/output/CAdjElasticityOutput.cpp @@ -27,6 +27,7 @@ #include "../../include/output/CAdjElasticityOutput.hpp" +#include "../../include/output/CAdjHeatOutput.hpp" #include #include "../../../Common/include/geometry/CGeometry.hpp" @@ -34,6 +35,8 @@ CAdjElasticityOutput::CAdjElasticityOutput(CConfig *config, unsigned short nDim) : COutput(config, nDim, false) { + coupled_heat = config->GetWeakly_Coupled_Heat(); + /*--- Initialize number of variables ---*/ nVar_FEM = nDim; @@ -51,8 +54,10 @@ CAdjElasticityOutput::CAdjElasticityOutput(CConfig *config, unsigned short nDim) requestedScreenFields.emplace_back("INNER_ITER"); requestedScreenFields.emplace_back("ADJOINT_DISP_X"); requestedScreenFields.emplace_back("ADJOINT_DISP_Y"); + if (coupled_heat) requestedScreenFields.emplace_back("RMS_ADJ_TEMPERATURE"); requestedScreenFields.emplace_back("SENS_E_0"); requestedScreenFields.emplace_back("SENS_NU_0"); + if (coupled_heat) requestedScreenFields.emplace_back("SENS_GEO"); nRequestedScreenFields = requestedScreenFields.size(); } @@ -134,6 +139,12 @@ void CAdjElasticityOutput::SetHistoryOutputFields(CConfig *config){ AddHistoryOutput("BGS_ADJ_DISP_Z", "bgs[A_Uz]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of the adjoint Z displacement.", HistoryFieldType::RESIDUAL); } } + + if (coupled_heat) { + CAdjHeatOutput::SetHistoryOutputFieldsImpl(config, this); + AddHistoryOutput("LINSOL_ITER_HEAT", "LinSolIterHeat", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); + AddHistoryOutput("LINSOL_RESIDUAL_HEAT", "LinSolResHeat", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); + } } inline void CAdjElasticityOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver) { @@ -173,6 +184,13 @@ inline void CAdjElasticityOutput::LoadHistoryData(CConfig *config, CGeometry *ge } } + /*--- Add heat solver data if available. ---*/ + if (coupled_heat) { + CAdjHeatOutput::LoadHistoryDataImpl(config, geometry, solver, this); + SetHistoryOutputValue("LINSOL_ITER_HEAT", solver[ADJHEAT_SOL]->GetIterLinSolver()); + SetHistoryOutputValue("LINSOL_RESIDUAL_HEAT", log10(solver[ADJHEAT_SOL]->GetResLinSolver())); + } + ComputeSimpleCustomOutputs(config); } @@ -191,6 +209,11 @@ void CAdjElasticityOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, if (nVar_FEM == 3) SetVolumeOutputValue("ADJOINT-Z", iPoint, Node_Struc->GetSolution(iPoint, 2)); + if (coupled_heat) { + const auto* Node_Heat = solver[ADJHEAT_SOL]->GetNodes(); + SetVolumeOutputValue("ADJ_TEMPERATURE", iPoint, Node_Heat->GetSolution(iPoint, 0)); + } + SetVolumeOutputValue("SENSITIVITY-X", iPoint, Node_Struc->GetSensitivity(iPoint, 0)); SetVolumeOutputValue("SENSITIVITY-Y", iPoint, Node_Struc->GetSensitivity(iPoint, 1)); if (nDim == 3) @@ -212,6 +235,14 @@ void CAdjElasticityOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, SetVolumeOutputValue("SENS_ACCEL-Y", iPoint, Node_Struc->GetSolution_time_n(iPoint, 2 * nDim + 1)); if (nDim == 3) SetVolumeOutputValue("SENS_ACCEL-Z", iPoint, Node_Struc->GetSolution_time_n(iPoint, 8)); + + if (coupled_heat) { + const auto* Node_Heat = solver[ADJHEAT_SOL]->GetNodes(); + SetVolumeOutputValue("SENS_TEMP_N", iPoint, Node_Heat->GetSolution_time_n(iPoint, 0)); + if (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND) { + SetVolumeOutputValue("SENS_TEMP_N1", iPoint, Node_Heat->GetSolution_time_n1(iPoint, 0)); + } + } } void CAdjElasticityOutput::SetVolumeOutputFields(CConfig *config){ @@ -232,6 +263,10 @@ void CAdjElasticityOutput::SetVolumeOutputFields(CConfig *config){ AddVolumeOutput("ADJOINT-Z", "Adjoint_z", "SOLUTION", "adjoint of displacement in the z direction"); /// END_GROUP + if (coupled_heat) { + AddVolumeOutput("ADJ_TEMPERATURE", "Adjoint_Temperature", "SOLUTION", "Adjoint Temperature"); + } + /// BEGIN_GROUP: SENSITIVITY, DESCRIPTION: Geometrical sensitivities of the current objective function. /// DESCRIPTION: Sensitivity x-component. AddVolumeOutput("SENSITIVITY-X", "Sensitivity_x", "SENSITIVITY", "geometric sensitivity in the x direction"); @@ -261,4 +296,10 @@ void CAdjElasticityOutput::SetVolumeOutputFields(CConfig *config){ if (nDim == 3) AddVolumeOutput("SENS_ACCEL-Z", "SensitivityAccelN_z", "SENSITIVITY_N", "sensitivity to the previous z acceleration"); + if (coupled_heat) { + AddVolumeOutput("SENS_TEMP_N", "SensitivityTempN", "SENSITIVITY_N", "sensitivity to the previous temperature"); + if (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND) { + AddVolumeOutput("SENS_TEMP_N1", "SensitivityTempN1", "SENSITIVITY_N", "sensitivity to the previous-1 temperature"); + } + } } diff --git a/SU2_CFD/src/output/CAdjHeatOutput.cpp b/SU2_CFD/src/output/CAdjHeatOutput.cpp index 35875abe825a..66cf5a336f73 100644 --- a/SU2_CFD/src/output/CAdjHeatOutput.cpp +++ b/SU2_CFD/src/output/CAdjHeatOutput.cpp @@ -89,25 +89,30 @@ CAdjHeatOutput::CAdjHeatOutput(CConfig *config, unsigned short nDim) : COutput(c CAdjHeatOutput::~CAdjHeatOutput() = default; -void CAdjHeatOutput::SetHistoryOutputFields(CConfig *config){ +void CAdjHeatOutput::SetHistoryOutputFieldsImpl(CConfig *config, COutput* output) { /// BEGIN_GROUP: RMS_RES, DESCRIPTION: The root-mean-square residuals of the conservative variables. /// DESCRIPTION: Root-mean square residual of the adjoint temperature. - AddHistoryOutput("RMS_ADJ_TEMPERATURE", "rms[A_T]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of the adjoint temperature.", HistoryFieldType::RESIDUAL); + output->AddHistoryOutput("RMS_ADJ_TEMPERATURE", "rms[A_T]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of the adjoint temperature.", HistoryFieldType::RESIDUAL); /// END_GROUP /// BEGIN_GROUP: MAX_RES, DESCRIPTION: The maximum residuals of the conservative variables. /// DESCRIPTION: Maximum residual of the adjoint temperature. - AddHistoryOutput("MAX_ADJ_TEMPERATURE", "max[A_T]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the adjoint temperature.", HistoryFieldType::RESIDUAL); + output->AddHistoryOutput("MAX_ADJ_TEMPERATURE", "max[A_T]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the adjoint temperature.", HistoryFieldType::RESIDUAL); /// BEGIN_GROUP: MAX_RES, DESCRIPTION: The root-mean-square residuals of the conservative variables. /// DESCRIPTION: Root-mean-square residual of the adjoint temperature. - AddHistoryOutput("BGS_ADJ_TEMPERATURE", "bgs[A_T]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of the adjoint temperature.", HistoryFieldType::RESIDUAL); + output->AddHistoryOutput("BGS_ADJ_TEMPERATURE", "bgs[A_T]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of the adjoint temperature.", HistoryFieldType::RESIDUAL); /// BEGIN_GROUP: SENSITIVITY, DESCRIPTION: Sensitivities of different geometrical or boundary values. /// DESCRIPTION: Sum of the geometrical sensitivities on all markers set in MARKER_MONITORING. - AddHistoryOutput("SENS_GEO", "Sens_Geo", ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "Sum of the geometrical sensitivities on all markers set in MARKER_MONITORING.", HistoryFieldType::COEFFICIENT); + output->AddHistoryOutput("SENS_GEO", "Sens_Geo", ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "Sum of the geometrical sensitivities on all markers set in MARKER_MONITORING.", HistoryFieldType::COEFFICIENT); /// END_GROUP +} + +void CAdjHeatOutput::SetHistoryOutputFields(CConfig *config){ + + SetHistoryOutputFieldsImpl(config, this); AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); @@ -119,19 +124,23 @@ void CAdjHeatOutput::SetHistoryOutputFields(CConfig *config){ } -void CAdjHeatOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver) { +void CAdjHeatOutput::LoadHistoryDataImpl(CConfig *config, CGeometry *geometry, CSolver **solver, COutput* output) { CSolver* adjheat_solver = solver[ADJHEAT_SOL]; - SetHistoryOutputValue("RMS_ADJ_TEMPERATURE", log10(adjheat_solver->GetRes_RMS(0))); + output->SetHistoryOutputValue("RMS_ADJ_TEMPERATURE", log10(adjheat_solver->GetRes_RMS(0))); + output->SetHistoryOutputValue("MAX_ADJ_TEMPERATURE", log10(adjheat_solver->GetRes_Max(0))); + if (config->GetMultizone_Problem()) { + output->SetHistoryOutputValue("BGS_ADJ_TEMPERATURE", log10(adjheat_solver->GetRes_BGS(0))); + } + output->SetHistoryOutputValue("SENS_GEO", adjheat_solver->GetTotal_Sens_Geo()); +} - SetHistoryOutputValue("MAX_ADJ_TEMPERATURE", log10(adjheat_solver->GetRes_Max(0))); +void CAdjHeatOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver) { - if (multiZone) { - SetHistoryOutputValue("BGS_ADJ_TEMPERATURE", log10(adjheat_solver->GetRes_BGS(0))); - } + CSolver* adjheat_solver = solver[ADJHEAT_SOL]; - SetHistoryOutputValue("SENS_GEO", adjheat_solver->GetTotal_Sens_Geo()); + LoadHistoryDataImpl(config, geometry, solver, this); SetHistoryOutputValue("LINSOL_ITER", adjheat_solver->GetIterLinSolver()); SetHistoryOutputValue("LINSOL_RESIDUAL", log10(adjheat_solver->GetResLinSolver())); diff --git a/SU2_CFD/src/output/CElasticityOutput.cpp b/SU2_CFD/src/output/CElasticityOutput.cpp index cebd509656b0..5bf9bfb4d6ed 100644 --- a/SU2_CFD/src/output/CElasticityOutput.cpp +++ b/SU2_CFD/src/output/CElasticityOutput.cpp @@ -37,10 +37,6 @@ CElasticityOutput::CElasticityOutput(CConfig *config, unsigned short nDim) : COu coupled_heat = config->GetWeakly_Coupled_Heat(); dynamic = config->GetTime_Domain(); - /*--- Initialize number of variables ---*/ - if (linear_analysis) nVar_FEM = nDim; - if (nonlinear_analysis) nVar_FEM = 3; - /*--- Default fields for screen output ---*/ if (nRequestedHistoryFields == 0){ RequestCommonHistory(dynamic); diff --git a/SU2_CFD/src/solvers/CFEASolver.cpp b/SU2_CFD/src/solvers/CFEASolver.cpp index bce775187314..93184cd14075 100644 --- a/SU2_CFD/src/solvers/CFEASolver.cpp +++ b/SU2_CFD/src/solvers/CFEASolver.cpp @@ -3099,7 +3099,7 @@ void CFEASolver::Stiffness_Penalty(CGeometry *geometry, CNumerics **numerics, CC void CFEASolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { - const bool dynamic = (config->GetTime_Domain()); + const bool dynamic = config->GetTime_Domain(); const bool fluid_structure = config->GetFSI_Simulation(); const bool discrete_adjoint = config->GetDiscrete_Adjoint(); diff --git a/SU2_CFD/src/solvers/CHeatSolver.cpp b/SU2_CFD/src/solvers/CHeatSolver.cpp index 24b2eba6d6a0..f0eaf3562713 100644 --- a/SU2_CFD/src/solvers/CHeatSolver.cpp +++ b/SU2_CFD/src/solvers/CHeatSolver.cpp @@ -201,6 +201,10 @@ void CHeatSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig * // P, vx, vy (,vz) skipVars += 1 + nDim; } + if (config->GetStructuralProblem() && config->GetWeakly_Coupled_Heat()) { + skipVars += nDim; + if (config->GetTime_Domain()) skipVars += 2 * nDim; + } /*--- Read the restart data from either an ASCII or binary SU2 file. ---*/ diff --git a/SU2_CFD/src/solvers/CSolverFactory.cpp b/SU2_CFD/src/solvers/CSolverFactory.cpp index f6ceda06d84d..31a31495367a 100644 --- a/SU2_CFD/src/solvers/CSolverFactory.cpp +++ b/SU2_CFD/src/solvers/CSolverFactory.cpp @@ -178,8 +178,12 @@ CSolver** CSolverFactory::CreateSolverContainer(MAIN_SOLVER kindMainSolver, CCon } break; case MAIN_SOLVER::DISC_ADJ_FEM: - solver[FEA_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::FEA, solver, geometry, config, iMGLevel); + solver[FEA_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::FEA, solver, geometry, config, iMGLevel); solver[ADJFEA_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_FEA, solver, geometry, config, iMGLevel); + if (config->GetWeakly_Coupled_Heat()) { + solver[HEAT_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::HEAT, solver, geometry, config, iMGLevel); + solver[ADJHEAT_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DISC_ADJ_HEAT, solver, geometry, config, iMGLevel); + } break; case MAIN_SOLVER::FEM_EULER: solver[FLOW_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::DG_EULER, solver, geometry, config, iMGLevel); diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg index cb04c9fba246..d8978b0a2b10 100644 --- a/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg @@ -5,7 +5,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY -MATH_PROBLEM= DIRECT GEOMETRIC_CONDITIONS= LARGE_DEFORMATIONS MATERIAL_MODEL= NEO_HOOKEAN MESH_FILENAME= ../StatBeam_3d/meshBeam_3d.su2 @@ -29,7 +28,6 @@ CONV_FILENAME= history_beam VOLUME_FILENAME= beam RESTART_FILENAME= restart_beam SOLUTION_FILENAME= restart_beam -OUTPUT_WRT_FREQ= 1 CONV_FIELD= REL_RMS_RTOL, REL_RMS_TEMPERATURE CONV_STARTITER= 0 diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg new file mode 100644 index 000000000000..6aea42286ee6 --- /dev/null +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg @@ -0,0 +1,55 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% SU2 configuration file % +% Case description: 3D beam with thermal expansion % +% File Version 8.4.0 "Harrier" % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +SOLVER= ELASTICITY +GEOMETRIC_CONDITIONS= LARGE_DEFORMATIONS +MATERIAL_MODEL= NEO_HOOKEAN +MESH_FILENAME= ../StatBeam_3d/meshBeam_3d.su2 +ELASTICITY_MODULUS= 3E7 +POISSON_RATIO= 0.3 +MATERIAL_THERMAL_EXPANSION_COEFF= 2e-5 +MATERIAL_REFERENCE_TEMPERATURE= 288.15 +MATERIAL_DENSITY= 7854 +MARKER_CLAMPED= ( left, right ) +MARKER_PRESSURE= ( lower, 0, symleft, 0, symright, 0 ) +MARKER_LOAD= ( upper, 1, 1000, 0, -1, 0 ) +DISCADJ_LIN_SOLVER= FGCRODR +DISCADJ_LIN_PREC= ILU +LINEAR_SOLVER_ERROR= 1E-5 +LINEAR_SOLVER_ITER= 1000 +LINEAR_SOLVER_RESTART_FREQUENCY= 50 +LINEAR_SOLVER_RESTART_DEFLATION= 10 +MESH_FORMAT= SU2 +TABULAR_FORMAT= CSV +CONV_FILENAME= history_beam +VOLUME_FILENAME= beam +RESTART_FILENAME= restart_beam +SOLUTION_FILENAME= restart_beam + +CONV_FIELD= REL_ADJOINT_DISP_X, REL_RMS_ADJ_TEMPERATURE +CONV_STARTITER= 0 +CONV_RESIDUAL_MINVAL= -5 +INNER_ITER= 15 + +% Coupling with heat solver. +WEAKLY_COUPLED_HEAT_EQUATION= YES +FREESTREAM_TEMPERATURE= 300 +SPECIFIC_HEAT_CP= 460 +THERMAL_CONDUCTIVITY_CONSTANT= 45 + +% Copy markers to allow specifying boundary conditions for both solvers on the +% same markers. +MARKER_CREATE_COPY= ( left, left_heat, right, right_heat ) +MARKER_ISOTHERMAL= ( left_heat, 400, right_heat, 300 ) + +NUM_METHOD_GRAD= GREEN_GAUSS +TIME_DISCRE_HEAT= EULER_IMPLICIT +CFL_NUMBER= 1e8 + +MARKER_MONITORING= ( left_heat ) +SCREEN_OUTPUT= INNER_ITER, RMS_RES, LINSOL, SENSITIVITY + +OBJECTIVE_FUNCTION = TOTAL_HEATFLUX diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg index 60afa90b837b..c2f263d2108c 100644 --- a/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg @@ -5,7 +5,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY -MATH_PROBLEM= DIRECT GEOMETRIC_CONDITIONS= SMALL_DEFORMATIONS MATERIAL_MODEL= LINEAR_ELASTIC MESH_FILENAME= ../StatBeam_3d/meshBeam_3d.su2 diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index bf1547db62e4..df2722c24860 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -247,6 +247,15 @@ def main(): discadj_fea.test_vals_aarch64 = [-2.849646, -3.238577, -0.000364, -8.708700] #last 4 columns test_list.append(discadj_fea) + # Thermoelastic problem + # Derivative of heat flux wrt Poisson's ratio (due to increase in cross section) verified via finite differences. + discadj_thermoelastic = TestCase('discadj_thermoelastic') + discadj_thermoelastic.cfg_dir = "fea_fsi/ThermalBeam_3d" + discadj_thermoelastic.cfg_file = "configBeamNonlinear_3d_ad.cfg" + discadj_thermoelastic.test_iter = 10 + discadj_thermoelastic.test_vals = [-5.356611, -5.296001, -6.176339, -6.434689, 60, -5.010713, 31, -5.196657, 9.4147e-11, 1.9264e-01, 0] + test_list.append(discadj_thermoelastic) + ################################### ### Disc. adj. heat ### ################################### From 2bfe34a3c72d739763b574f4c01428e0da3aeb0e Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 22 Feb 2026 21:40:55 -0800 Subject: [PATCH 108/229] fix --- TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg | 2 +- TestCases/parallel_regression.py | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg index 6aea42286ee6..740729bd8405 100644 --- a/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg @@ -18,7 +18,7 @@ MARKER_PRESSURE= ( lower, 0, symleft, 0, symright, 0 ) MARKER_LOAD= ( upper, 1, 1000, 0, -1, 0 ) DISCADJ_LIN_SOLVER= FGCRODR DISCADJ_LIN_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-5 +LINEAR_SOLVER_ERROR= 1E-4 LINEAR_SOLVER_ITER= 1000 LINEAR_SOLVER_RESTART_FREQUENCY= 50 LINEAR_SOLVER_RESTART_DEFLATION= 10 diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index f5bea2d55b8e..6f367c68bdb8 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -1269,7 +1269,6 @@ def main(): statbeam3d.test_iter = 0 statbeam3d.test_vals = [-6.058758, -5.750933, -5.892188, 110190] statbeam3d.test_vals_aarch64 = [-6.062693, -5.769132, -5.891190, 110190] - statbeam3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") test_list.append(statbeam3d) # Static beam, 3d with coupled temperature @@ -1278,7 +1277,6 @@ def main(): thermal_beam_3d.cfg_file = "configBeam_3d.cfg" thermal_beam_3d.test_iter = 4 thermal_beam_3d.test_vals = [-8.137623, -7.840833, -7.903285, -13.978110, 217, -4.093241, 39, -4.072614, 1.3676e+05, 75.0] - thermal_beam_3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") test_list.append(thermal_beam_3d) # Static beam, 3d with coupled temperature, nonlinear elasticity @@ -1287,7 +1285,6 @@ def main(): thermal_beam_nl_3d.cfg_file = "configBeamNonlinear_3d.cfg" thermal_beam_nl_3d.test_iter = 8 thermal_beam_nl_3d.test_vals = [-7.564309, -2.992893, -12.242503, -14.068322, 57, -4.017665, 24, -4.204804, 138710, 75.233] - thermal_beam_nl_3d.command = TestCase.Command(exec = "parallel_computation_fsi.py", param = "-f") test_list.append(thermal_beam_nl_3d) # Rotating cylinder, 3d From 8aec5dfe18a06db476954a155e7d44c947083864 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 22 Feb 2026 22:36:07 -0800 Subject: [PATCH 109/229] update --- TestCases/parallel_regression_AD.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index df2722c24860..7b931c872a82 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -253,7 +253,7 @@ def main(): discadj_thermoelastic.cfg_dir = "fea_fsi/ThermalBeam_3d" discadj_thermoelastic.cfg_file = "configBeamNonlinear_3d_ad.cfg" discadj_thermoelastic.test_iter = 10 - discadj_thermoelastic.test_vals = [-5.356611, -5.296001, -6.176339, -6.434689, 60, -5.010713, 31, -5.196657, 9.4147e-11, 1.9264e-01, 0] + discadj_thermoelastic.test_vals = [-5.355510, -5.293378, -6.164317, -6.433862, 43, -4.049556, 27, -4.164192, 0, 0.192640, 0] test_list.append(discadj_thermoelastic) ################################### From 0a153ba6da9f914ca02e37e5ab10f01b7e24994a Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Sat, 28 Feb 2026 10:19:01 -0800 Subject: [PATCH 110/229] Apply suggestion from @pcarruscag --- SU2_CFD/include/output/COutput.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/SU2_CFD/include/output/COutput.hpp b/SU2_CFD/include/output/COutput.hpp index e33eb0d1baf0..260d984683a4 100644 --- a/SU2_CFD/include/output/COutput.hpp +++ b/SU2_CFD/include/output/COutput.hpp @@ -592,7 +592,6 @@ class COutput { * \param[in] solver_container - Container vector with all the solutions. * \param[in] iter - The current time, outer or inner iteration index. * \param[in] force_writing - If , writing of output files is forced without checking the output frequency. - * \param[in] write_restart_only - If , only restart (and CSV restart) volume files are written. * \return if output files have been written to disk. */ bool SetResultFiles(CGeometry *geometry, CConfig *config, CSolver** solver_container, From 384d95fddf9c47e580bb25befb80803a7d9af084 Mon Sep 17 00:00:00 2001 From: Sahil_Kumar Date: Sun, 8 Mar 2026 06:25:14 +0000 Subject: [PATCH 111/229] Fix: patch bundled Boost hash.hpp for C++17 std::unary_function removal In C++17, std::unary_function was removed. The bundled Boost headers in tecio (boost/container_hash/hash.hpp) use std::unary_function in hash_base under a guard (_HAS_AUTO_PTR_ETC) that only activates on MSVC. On MacOS clang and Linux GCC with C++17, the guard never triggers, causing a compilation error. Fix: replaced std::unary_function inheritance in the #else branch with explicit typedef declarations, identical to what the #if branch already does correctly. Fixes #2583 --- externals/tecio/boost.tar.gz | Bin 2328682 -> 2264645 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/externals/tecio/boost.tar.gz b/externals/tecio/boost.tar.gz index 9943d19de4262da5554f730ccc1ac447687dfd90..1c1d78fc2d3d529bdfd12f858b98eb2f68412e07 100644 GIT binary patch literal 2264645 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

59?;4d*3l5x$IfcI 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%0A2J-nnXdoEV266OwkOmUl_KV9)ym`sE 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 z zM*%}~v62P@3#`mttjTVJkYq}7#nMB16HxT#U*m8T4_6FF=jGrq>~~Sl?Fawoyhb1r z9OFK+2zvbLmEe3l{De`EgSC34xz?<1FKjmcfB&EV@8%|YP``WyjUC*C!yXLhyOr;P ze}=<;^iT`-Wo$K?H|d>Ckr^5bLi`Jd_uWr~v4hUlYNJtqwX(jx{*v6KO%1l>HBx@S z_%H=trdL z$G2S!ao-Q_xzPT746{A_29@@(xE&VA9p;VZDJ}4x=o0Vo2tWnYpm1Bd)XPmgPA-BQ zYQ7b5Kq@C%Iyb*6PJi@HU^1?|{YfeUTH7M_$%VLT&_mi9wYr${3#zKmUKb*+ciR7QKdEgmSHRYqpj^h4^Dua@Gg)s2x*%nIA9p$_4H}3}m#vRA z{7(ZgiT-FBDCNZ&RNJ&ZqKhiD`wxaJ!8Xj0QJs3HVp#YEeilal_ZZ3y`X#5vkIhsa z)MDWG)Q1N9V7_Og`wIRkjIlP#F3|^!>xO-B7X`U zF)AmP`Fo&)L1k2l2BdHsRX#SCq&Hxr`u{eo6#Nc8!`IX|eaV&r?b|A4r}3?rcfKB&P(r1&Q6ohnbFltP?>C-r7IhIX8tAfzj%u}_R}1QR`FKBw@6e5= zs`bZ`e5jR%J_gYc+o!v4agjbmW+l2DhQT={dI{czr~qG44IR8dPZeN3E12ITcmUR^ z!?-uWc}g5>wd3gODrxmu2Cpi1dd-oMB?u9`nnF0%U%-O2Fa>rJT!zRuK+Ehki=`o$ zePE{m69+flcCUN6!h*8ExUM6Lvx4DRut;a+Hf$RzAhRdh?h2>Ehh7X!(*XA0#{VT> zhwOa?rg2#N6b@@prna^iTAO~f8OuHuit8;ss?$wZ&lj*f;E3L`l&j5Wv->79<(R_{;lS%^s%|S zz66A1wbEE-R0!uE-u3ZKpSn*~hSk~@h=xnphdN1(FRm(y3%ZS57V}`LDB8|foI`5W z;HZgzFEc2q-0uHPBpYArRgmU(x9hOmhhvT@z)l1}&bq&C6P=)zYMich6jH}Np;m+c)H37%y#W$69Kxh5VhWrf##}}~`Y@|iAI`T$t;cUVaX-?x z$Y2PQg7i;q62)1u-7*RlEr2t{p?@-r>gP$Sd7uJrqGEYuda7xhVPZ`aMtVfiB}vy`@8+$YOof!zg0P!vA(oQ$OrYd8_jzCH~lsC_&?jXW{-Mj>2a;WxcJHP z%VMovTl@`9;l(uT%ty^6w+chDe-Uv119Y#p_}Z8UHW%#|+D%;5KeqtGCE(ykY$H{S z7W{K29&uv1sg4AT`2JshlvAHl#~5(>ybqp3Q}G#eXy3`)Sa59gP%w`|z`y?Z_7XP1 zJ)Xx07eJF)8_~-33YV_UQ#xsPhw>c8EXR)484zxwUh7idrOb#?Xnb&#z7 z`V0Jk|FU1zUw>PL|G$21uU4{(xcX~?g$ZkU`R)$4DB+~#AgQ!Iy;N~&LD*UB7Y zeiJOW;;WpSP%R8XQ{OfbMYLA`O+?OEB@b*%Kp_+{TWVyrL=M>X>M{$q(5FTl8>wIx zyh;PBER)YR7W9^D{wCtUP_zlVoD0fkCX{^&)bbJ_#NL}Ps}vq$t6pUQ*Rvt6FgJHr zd5hIq%LaZ~PH{%#YohTjnn3D;HSV9n^}?-h@JU=}bKNX5i)(qa$R-k(8Yd8=5)@fXyhi@{%gAHF4N{Wg59FLepE36_+VUNM5IF0-+j(=9dpscCh|ZjF0v7 zDut5ftYhWPbzZsgGPlyExi2zCza{apsZAc+bz9zAFGc$=bBn&>GsQ|an<-FSXtQ1b zZP=6&j#FqBfijyMhh8C3=>zg@fq%czK?X`_2Yi0v?`7&#dBUNJ~2dg-Y^_NC# zgkqcdAg!sjX|ToFd?|NyM!j`oqh>+5A)u^q*p|i6IlLQ!w5dVY*Is4g9W}O9UuQe{ z)uw8#@#6i7F{=x!bHrF{dYorRhcIig3T`D#~ zT@d*?$El4iKI3caYkXTYFdjI6S+B3@88gxkJIm{SGT2Cwi%oITY>K01ePe5rb-4Lb zkPhscujEGEPuiRM?rE$y))~q->YE!H(z6a|y*D_1WCG20Jsn8RrogQAEj$t#=s<1P z3beDX*eN1EtmzVZ8ZGc&z4D-H(qUs zL$uM@6zAxxhM=p>jji<}&A!xVz{b|ArkJ4mdR<`R%dH{}y%N*BzR9=ft98Y>W>#$o z-kF`!uj=(z*+fI&+InM?vB-dObsN)Y7+Vd#(9PyXGnc+lo3CCqIq#((01d?IA}y)I z>g9%DZC|YwgJRv_5gPTajItX#@!pW6cWq6aR0?9?%Ch*zO|?PfJ|o)1S*9#5eoKqlw^FZDd>1zAjx`tV?Cp*SF)?-%K}K%lt{&kzj{@FW#g4a&DqsZ z>SFRpYVbccg}UFkRW2ZhMgvU{jRqb`Q~>e?3Zl`VoDABuFZ?`0Xyaw-X0Wsr8V!W> z6b-m2Syl|y>r$Qdg7B|5vk$NXA%#*8tnKEexAApr7B{@jZx~=Sk*}Cm4#j!YWT2M> zF`pL{(aMXWzLwa`Wlu3tHby1%smq*hHFI0uiCfok=B0p2uv-GUwXGClre)ElsLhY? ztqm`Do5pgj`7vP2H+CSc-bydc!NaEV7JX%Izpc#_rk9sQaWcjKIPb&e<>gCFmXJbY zS!uLH(}Y-?d6>l;L!p`Dq+qrsFZMDU(M;Uo9V7pgBa8A`Z{*;X*oj=+VWXDatu-xS zbiJ|R$5thbHk(o(rdkt2e!1504q0hO8rpuQ#e3z)WD6EaC*LoqxR=7Ophcw+e01Y%x^dqB;kL+h516hEO0e z-dTx(nk-sS;GC*ETJL(@k6le;qaee|aNB6V`I1Wl>rJ6Md0B6~%#k^1g}C0v1b1D~ zhkEmscef~sbBzna3QgA6vUk3QBROYDn&{RgX%qy4P4BXtUQ^)QAdWkG&ubmfv z3o*aT#{AY_!vANBo8s)1?cr=QfW-uFG}iq)M9P{C)q+5o^#XF{1|wa~E$<9B8k1oc z%B~rtrdbrfP<+p5XU&gc&5e4VgsHKY4G7xw55W*KIZ%89ad|S~A>w`D)XP!A(n;f>sj4J=9;rKRdg+Jv_X5@xtc@iTN10acJzY-~JtkfgvD1VOVz8xiGju=Y6g`k4g**61Lq^evp0*7gJYKUZhjEUEH zz{50lNK4xH=)Q4!b*{B9AD59WCg>25SIo)+p9lHrsyr1_0UMz=HamuoZABYel^i$Y z5i@6J@6b(U81{Nmj{*rWj}#9Q;#RnfMj{)I^7uqI`Y>rRH~*c+US-gzT8oc!!Rw-d zS=qYSZ?izZO;5kg0{u3nr>j;uzP+YIOumYB0@%HV%bB%oYE6WO_lCoyza66yWpFs6 zj9n<~4OG4*wq{Fg9x}0QnXl0jpYJ6OQ8tc>vPlLsO*b^MhcaO0L(}j=!|BH^gK3#2 zN-Of21sM6mtb{3Uh4&ZGAnD(14HNTBvAk=Cn`$@LrA*O=lJ{Yq)YttT1H9CKN|J~zGna3>JUE!lSqo4>AbAZQa{t@n3TYau3 zKiNHx@4%n5J!8m$6&|NWzuiID(!)+=qXg0@a*gim(TOy77@om{uOVgZV2N87e05(4a-4=`0Y_`M#3%SV2L~G!p^)qOQQOFrV zG+{#~8m-*6v{*dyA5Shv@>>f%dWNk*52`{V!LBXWm1_c>&+R6f=G1)~A_+Gg zShdh&=8WPg&N+6*VL147IK;K#zjjn_daE}xt7D!aP1cZ!Jn>yBS!>eL!~?x((<+MT zjntT0f~(|xxr#Pb(WWZeOcmt_P6=M&&oqR*072+0&{PGQX~5xaopr$)(*f64`CLlN zc=YQFykIwpJhEz%$Nfpq1@^;>%AsUT8x(CiTWz{pZK_tiGb{kWvI?3d)x--moFxf^ z$r9PJu@P*QB)kzPsl-%{IK{{4R0kJ!Y}^3zBx9k5Ug%Z5nts2`KKQFQJ=L3fbt`bz zR}yea{U>H;kBZkK4QIFQwWly0DjA}!kU=iSa?pZIKi_O73snajUYW zrcJO1k2JR1rsF|njIl|CGrSoXw7OtZPJVD`$uI?%lFBw+cbu(Bw-Dv$MT?Mgo@G!R zJFMvS->P2*iKEtsX?DA)|ADX7I(_D*1uTn*KgXzHsiSrE=*icwD1k8*_|v| zDW-bK%^8vo<8>Nf?EM!Dkl#%0uZpNs{R6RzM*+BeP*DI<6qX_lD9iw!TJA50atiUO z^|7h5u_;7*0d1yhA_O>Xb_2_d@RD{Z_3;J&m}<=#Zq-)f`9n{r7(NN!Z}sh(qZrR+ zJt~56zr}(NbfN)X)Wj5H!90S~4uSHv1lMjFSaBXJ-IZvC-OBBzJ2&CK>h>`VQhF4b z0MkVr`l@PBi@$Z~KjVpF;hMBpof6krd<(t!bo18C9C0*2cl=qc5{%SXq>s&P1flu< z*vy@7^U%-%umTm0Z*>ZC%uY}}UXUP;q8srqo~cf;JusH>UI*7O7J%^FmHNfv`h0Sb@!*7lW)3F;Bx_w6l zdxME?_5fihoeFPdNBrjBm*p2MDL3TogB7QPYCd;d*P@RVzmxv~BzSdpePEQ|t&I&| z{$G5|_`mRVYwJIPjoE?VfBxq2fBoyv1ENkD`x&3?_|MH|W36e$e{O7T&GSD$$&-rz z98|)OVesb7+Zy9wfn$)L-gYmC;qamAj1gU@9D&W?+i-}Y&YS3F2n>HM*uPDHh3bU2 zHR5niB8;fo1Ex4xaW?akH!~df(G6|49TIH7U!d+;_+ zKE|UOT5xsnH2LsPXSK#U3vHc>CH*$;z<=Mz2mp(14KR$z!pxd6j1E1F@D`l%vr!He z_}B^i-z4}45Besi51T^chFmovO-&XN^8NVZ=>6I_@IZQ{sa>d4;_gFF>X>c7_DNA-{GiG%Eag%7N;8zTf_YL z*i-?vbFxBS!fmQS0t;P17b%U+7AdR|dp_)h_r!k|udjygn$fGSoELq)PflA0KmF8b zw7x$)YaO2)UmWkhJ^t^bv)0?=^9!w=ZofO~lH@aN^#G~&I7e12SUARnR&QaKL_Isn zH53cHk%D2OS{Bo2-C6LcR36oGz-W(0ly4ff!#@Xs(F4+1qK3%`!geDapb zKwRR)HIW|j(a^^H6FH%M}hD5RkffUVo*}bx)u$^r5hbFqpYTM{KQUyF!y>Gpgu(7 z7B~XfyukVK>%T5P{_%_0Y{Q7UX-6(r5K8{`nN_&N$feOr^3ab537pIezuZJ1PhwnD z++lD^{7@| z9azX{^Alpf{yr5ES%uUV_GJpecMWtZT3_ODk?KaL47qqUiCH-{6;|36WxRYo)eB7f z!U*xf>B+&-`-|58`T5b=MJ1?+1=`*wSa#^YdsPzmt@!%EyNDw4At;Gl9VGG^<)738nS)s@ydWkt z6ts#3az`9mS8$v|Ah&QV;k`%iK~(Er3CbmFjlz!xQkyc+zf)oyV( z{@|Ex%m#m_S=?@mdDGt2-qyiN?FDs=P~Tf& z4n*jlBkNYGPUx+=sw(;dZL8lk_!FIxs%p3-8r`Cv7T0UcTtWKr9iB#{jmJYH84m_% z0Kx>I{RAZ*todVibc1z9H(gAOfv-v93p@h__~*<8u6xXc5FXnTPPX+hw&nJ*th|W^u=zxfyM<7KHS))TNI1gNvl?q#)xPQ_@!^OBM}Wee*QqiL zV^-L(Dh8$~?9i)y*8V2jkX#5>+Px?oW_0fOuJqU1QG8L67i zJ(XvhN;67@S)-zy5HLR6XJZsz^I_9mqMIXQg~XbgZV6uABwdQ}DRKxplo}wS${v99 zhrzyZKw1D{z_<~_fWPxv(Y~RBm-faNx^8kw9vQH70Y8x2+bQl+8kXjIWZejN`Ub z>@S|%vT6PldHg0Fm+}1!Z2$1dw*PB1Hn!@v{a>TLKDYmSis$cT|2MbddmbykZ%=_r3F;+)p!amq+Pe!M5>YuK=f9BLGukZaWtFf!B;O7BiaJ;cj<4WjjN4^_ zF+=T9*uMt!g@(t(gTj9)ZD+{1?tskCn9&k9yaG6IIKzm?IP5WNIp*q0=5b-KJq8|M zSWrcP2EBMd<5mM(2~Oe>*-|N#S-@7iXmZA{&#^f?KDAE6UJ?_mcq@HA2=M|qIEHNl z1y;Pqf@HcyD=-Q_(rT!0L6|7dFRC8lP36LcFeGE8xcwMxdcEC+Bu%ki}@l|;mk*XxEb`Foe+yC(P;^?sT-G`F{;_#U~;WM3S z^;BxtW1=G~?Z?A#Kh)58H>P!E^du2?+=@hlZO@~U2*4?g@j&57rhy=iH2+0Wl z`@eam>!P$_O8^v66c&^*ZLNef0_a!wc8n1ikYI8AM}k5hG2gBAk=o_KBD4X$=MJeP z{3)WyWo!9Cl16(-%4?0EUKPEO+m`yJnJ_pi$quNJ>hASq2bpJm_*`q!HJ=L4GzfD! zKImy6vC8v}s=)^URt*R>>06&i9m|~1>&Mua0=tSJt%1UAdAh=sE4f@qWsqBfbQvCwaVn+d|p_)|0^`y<;`T{qI% z;rdAElOLFYt+9kp9%C7A!^#f1K>P0{Ba_{F&4~PRD0n4J6^smCrv-vnlqBhnYX-5` z>U-|cbdoKC7qBt0_O`dV7SZ_V)Tvr!NI#jL7*5SDJ^Dx^!tRcOzjC>v(~&GyDjDA; zuFj#`S_(`V?Y}pU{HI`&1x=0DcHLJz!UAh&>R)StHM08!EU*TRYk_B=BcF+eTlBQWWIurMC2fOb^ zcpG7cn@bGS*SjJkjf6SO{(b$o4>b2--N(9C%8zGldp2n?M&3hTYU^UNP?_L_^cEEJYsvF^GD_gJy-wE{By8Ke0qu?@>X&boiJJ`UANl) zws{Vy?n!d{8S=I0xdEPghdz#XC|e=JHI%k#zF(+Xue497TsI&CmJg@ff3u)Br9)W$ zQ@I{WQdE?fF1U1$InfDJC#s#a7LnQ88fwZiv+zWt*4R_m=z02`Vk768AD;e%Vz{!K zcGyp(lc7MW#Q8{G>CZYbj0u?GyqFVGbUx@eMJ9iWIpJcDYd$nU#M~606W*?KRua6y z_|s2`*he#%6XfLGPT~`p{?0_NDJAgdR%p$iQcqU=Pb7c$57X;_v-Q9At>)U6rT=X< zwwiPO?^8T~Fa7UamHS*#JdaNU6g$G5b7QwqIW(22*F z`0rIO4o8&b-O zAkM-rRJCOphsu_8Tg$ud=q9*dePFzA;%vx5du~8*U$gfE|L|Z0T`N1)6=?S%t!#V~ zje`4S0#b+31Da_PC^R#um|5PFT1lR0u=+Z%`gthY&qLvU8g@VD?(vW<$GvC9Kk;d? zJ4o0-KBaqbjD&jdt!Y*d4bcOWi(D$K?QI~jbky#5!of&|T*ckT&r?o9W^d+Jm`=FV zQJp5oQGhgsrl|%}iYRXT<}{d_2146LX*SSWYyW5C)qZ9kLk z0U%U2k6JrT7|4`B=Gn-ZwsGYE*KFo&C5fB#8E)2-%~h@swm~{IE3`6JaOGeEXw;Ri zhc>zl<}_F>i@7h?Le60RpIbcs%Rhec<`x*ZZc7R|Q}mIe|Jht`Y}opr&CSMK|ML{j z-%I~9xBvSSDUIHNyn4)!gJOCkyT)|ZfIND6u9cl-j`ugQ#xpck+F4OU13aFK0`Mrl z%JdR9jO_R?){etQO?;PDW)2H9QAU|YNl)~52qaStao1<^$Hx4(1Q&x7-lH!wd3eS_ z6t-^y@;q1kSG01yLW2apE9&)V*VO`%>w|KCBDaM@hi;UiVO&f-rk}fyrXkZhVe^tw zmK8INdrn(7eGGpUlQ(TlhEbRHep&;#R2N0<;B*+iSaY}{6F4`H`*MuqjP){X6yiWBP){B?ItXs|EzrLW*M1{ zljQ9nxy1-%?D*!=FbS-8aiN%O-yv@Q*!|drgSs1T2gl0MAH{cKzj$BFqYh+hCeN~O zqnnUETq3Us{3ix;qtI}Gt1w?99!~EuJOq zp3~t;+^4^6Uup^|dLwZIgXKJ6tV*$Z%c3kN!fs0$qJ!!AsZyUL+ENo zLAW>suIO8jy!MU1{n|6K^{k7}Kq$KU?sLlFh;7q%_X#&Sk;?=mP4gy&$9cMz25hqJ zQV`}sG_>gW|7siTPexpy0eK1#;lC^LeA(3bi@A=|^}f%2FYBre+ygyb5*M{xnX%Cg$B0Ry>Nj>ym!N`_D$6O=)V3PqDEiRyR0&RDdE+)&oW0% zc0-(^qI(6?cNs55gHA*2W!{T)W|fyWvf8f$AbQ`$!`raO@=J7aNZXX*iP{LPHW2lA zA_~mybQSk{@f|d~y|9dUIK*lRMOO_iT_`E}iKPT)9Hep99U!22uD~Z?N-=E|aJkTE zcO+V*OB1@G3HhEq!^NO7Nk9w3LnBdzt8oudn>NRLYaa9q1Wi~HBtYC6aD!-;4fhY1 z;#Q#CyQ6pC9-W=LMHJ2h6M!uOa7XsU9 zmBa*`KYMcQKkIei`Azsp#a<^9!SeBw}_CKO+12dpx@sq zp`dtUYW{Gia14X$zy_d=*|7J}H51lWqEBcqc7=k6wAVt0t(%OL7i&$pQuR8#(FJCW z$D^!4UtQo6+Q`z$@InbzLUS^7u%eJw)ly?IFJ@}NAR4mE8Wfn&HU@sn05LTdGYie< zq@;>Yhs$`OLC&u5PpC(A6ET>U$!ir|)tn`Q3XL=FlkFMJ4sI}>?wHsvj#)qwG&{RA zswCapZZ8}P5=I$?+1Hvv0G{v}?}AqrzK`$F(ywNhN2{|j;5)siDM4g0a-VAH*Y4m1 zj~1@Dr>+gyNEjKz=|#;BaPC$La_Q&NzHCz7T)S&d^W>TpRzV>Vjlons!9P>aay0xZ zkkU}s0{dbx{f3g3?D6X>GcFOMwmd<%k_7oJ7hP{L0ZSQMsZyrQn3zIa`eKX2tKDxc z!LBgx-&|#?RkPI;@TpqC3*%aojbDh0T5HVJ^z-X-6I@_AQxH*|6iE5Aj+Sf!#(W`4 zZe(Y>OuXfz>7z}yj83It9K+r1Z6Y3Os?tNOli@+%HLvNy4R>L$lx`h%wrsxQ70%@m zh(t`MZn7z816Vaqd=lKkA^Y1ZSX;pS>hesXY7fEPuse!)Y^u4!;b&I)R_&)MO{nd2 z1#~N_6D;m5ZkPN7s2}#_zpbmgTs7lUWPrVl?@gs;soH3+iWu3yo}v*wG|aTE%oHGp zb;h(R;py!|O0_WML^v+{vhXYHUB@8E-rOduAltUOm|lVf!YUd5z$MHc9$oAoztx&x zBDqV+&9=Wc^g5LhQnV=Q6-+CBwRz`GgK0hn&j63l-|t@>e6J6& z3;&MVH(6nz#F15VzrF~sF&}N(QXbuEEO}kans%I!d<0c(H&&|-mwU7fXgK^}JFqZd zM+1mQ8P8U7=*`K>(t$I)W_jgAD0Al`z)z~})GWxJf*FBBIo(RaGfPl3(l^!gyp`=d z5@3@|)XagJexA-A1DHwX#tq11*euQOrrBQ1^k-HZOap1MEjCMVkX@Q;cD{}8XAR0E zvobp{w7c2KXNBwG9s{IFW@onGSfLLmpCuKW_puybxPv0ZK zHxqiUn@>I-bW>oS4>Fri7tFK>@?@CN81^y6#Sbc8cnYE+4vxbi#-oZ_=Qa~Ze%L=d z-aol$9i4o5*LuHyw*T(DBD=Y$+8yk0ex0isG8%!pXL1SJtDMg)n$ z4$Hz-Cndj>QcB{m92|~T7OUiCDl(^HRWBh>b|%%&PtVwi4r^c=oRL*UkeG! zaXW|Nuc_ydiG^JT22>nTHev1GwXa#?{@9tE7u*l+|`)UKR&m*e&)~Q%DUox z2N9 zc23zY98hyUN&Xs%oQ|N8p+JpbpD zJahZ6IsgBZ{QtM7KTXQ_+f~b?2AQohXh~mA%>_W}x1QMt^jqaaS5ivQz3*l(9q=2@ zxyxsU%V)*y-&p;!d_e)jss*`UDEb6`lZF!u{ZIk?^}wjiH^uo$c^PGYCifL8^61Wz zmlHTkUKVhcynF^{$Yan_y8WAZOTsB8yG2f3QiK{7?4z9a|9 zKRYE;C%CiSKP5SPJf)B=m^`;kU*?&>qo8yjIr^WC^-Vke*ZO8-9{=k}p1J;KuK#&T z{m56|b~~rm5YF+aK?` zm|GDy;+PUnigzm-+|tbop+P>vd3)Ite(=lp96f808${d*) z8Uh_`1KEi>Y#L-puTjje+k1L-03B#Pn*^R-^d_Vfm@r>*wy?2yK`G`mU0hLF4jo^< z>=;`aRZCuo=HG|nZ1`{GX;+oHm&Y1qZsr-f%=m7eHCpU;zJkW7;jn5_kjWJkZ>hO6 zy)ow8Xm20MHMo@(tkT5FiZ2Pvzo@%^8{wZwz)LY6&&{>Z?wN#bDBDL){FmldBX$43 zwKdQG@+8k>^55#JUyxg$R03R|jRd%!D*+NuMB>jKMhhj03wV>uhv0M=!r6$K#IYgj z>n~6|~+3D7a(?w2R4b$kVc7dav(bo_k@O1pf?&z>UH= zP(u)qH|<>^i^zJIORvuzy?QFMWrxA?U)_K~tCu_g`rHbkb2_P0V*m|%UsojSOu6&1 zZJk|K&c&OuFGh5ElC>5H`B4>3ChdYPkm>|eK0WVN#0|f#ygES!-+~5Hb_G&>i zYL~Nckceb-8T7}umvr9*MU`7wP-)hJwOX*UvQiByAV+sWXz$X}eTw=hPWR9!j;J2z z`he3$Gm25`>)z<~PhVe;UX#rG)AC_CICTq*j()A?Gp+dbvVe636q?q+f}6lD)0=+W zUp^2ElU}t%I2T&);cOW9*-Fz~L|uxxed*wxJJIzpBE3ZF(=hBnuM2#y9o>hhoB&pS zKj=l*Vf%sYgPMuJ{Rrn3jv{OB6QyDhr-ae`Np9jhCW$g)if8UH0YvQe00EG~^&Wz8 z!gMRc=o-&nhR?TQdl;`c7HAlSo#nU>^~|LjClrI7RZOplLO``RY|;=_Vajy&1}pR! z+Yz9Yj8h9m@SH*)Sb#cEVWfgP+?fm9hzgkkY*91^Lr`?P7snqHHbn+1z`#l^ebZWc z0E`LwZ17Vrvuq!ETl!3kLf$DwR01Vj0w%OTC}zFDur6Jjz32J_Vz2dm839E{e5U1Q zhy>Wy1^fwNQiRc*>PED}j~kkT*Ua7yDPaWQ5!x_yDm17RG(^gR0lE@*L^EieH!4IT zSEves`v(k)F_6qto z_#aR5%;SH|HRw+t|KsiP$W>?vL7#;Z#u{2sNvnnDiX5UK$_O9QOG?HM=_RECh~P1#TPay{ zvlRFM$c!O^tu9GON<G+`TyxT|EK2p|3i+c6_;G|+}&194QdSKhRvoNb4O45bV_7@(R+ z`BYXO86AJ-3kDc;Au`T~y(IP+ZP*m??C8z$`Nh$hMh2lJ*hFSsz<9!#PjFPk!=3kg zaIBM8&%eeIbMWaw;VQQ^iTd&Q`UY`83=M&~iNa1aT&8nEBO!dAR-ye?m}p}}DzXBD zg5_hd!1=Qf1`Gt8$53C$N)q!JIoxDK)M4A3l?B8ba;)mt062Apn8f2D(VtF)HIvx-Fm2z>A24^FlsE>7!~&2O_I6w*yhS;A~xpzC1+FaU@z@ zoe93Prh>Dm7v3}HMRmmFZz`apz(#jwp-XsHH9~O(!eluq%gLBI{y+7`TEmk6H`bbS z`Tt3tx%@wu|DV)@=IzgKPERKHp-EStrN>MW{lLs5{^%aip&Jidf_cuX(Cup#3Uy)Y z2(n8{{rij*3RC7So}HHv%eW*GOJ-;!+zb}aH+F&iinPh5S2MU=(KJdsdPkDa;u+Jl z&~SEBlE3Ctm~fs=uPfTK%6JSIjTVJwD!Wa+R8FfBk8@yklq=eDF3ir7z6sX&VCNF$ zL;#fg%2m7c-C1dYQB|e1vDPiybj-J$Myo+HTb$d%PfsnDZDgr0;1c~x8(ZpSn4Gp0 zw0TkdhXW>_6wU?_Ce7w}WRPZS)vlvaWeHofOfj7p6?C;$P5NE1S!=@v?NV^IvjEjw zEeEG)wt(F#6s!d)eD{`49scHlynP|oh+_1z~8p>B*>-J{`N|c?3@A5Py=?AM%2=@umo+>sl@~Y?h#GV(_-0kD>mj&p~o+o+2)v&<^I7Z z&;Dm^Yt7RCt!*{t`G20|`Fq*_JE}F-gM9!l_;K9(*p2SG?ccFV2mT9$7W$qm4WCPC zn6iZ|rYv+;({xd{z$4>jnR>%+sQs~bR)^8Q#@%65OaV9wb9Hm2Tml?GU3I0tP@hDU z7JmAv(P({tc-A^TIlegFe|!AjWGirfp|wMXHe~lPY@r#zo?sFRDcs1^N4*Bzi+Yy6 zO&uLIifz*CMQvf0pvI}LPv50{6|@i$7)XU=EcyR>wv9R##zb-%i@r#(HVRRJ%A!|pOXChSj?K7)+ z8C}8huOtusc#r_CTKEMGC=k$hI7Kk_-xhv>svqS{uE;)Cq>5Q6ukD_c`@uQ;&3X6V z7C!6J=E9DYXGo4w6>5farxZ$6*7v5*)SJ{ww>Wf+Kh0y9V;ik;K5m(AkK76h zuosI-DfU}U*4tKn@V9?_UU2tekI~Z^mn>6#I_Jq4Z_f=@Z{;!q%29!1x3>ZmuToWj z5@&FW26?z%W8wXNXL!vgXreY8aVB6t!BZb={s<%n>yX2JNUzBtFdi@)JvcUp2{USo z*+I-~ZkD z4+qq(3n+y3_Og3Dj>ieKWbO&9$zWpZry3}-e5|5p0fVn447^Ml4ja(+w!JO}AyIv(W)$%iM9Ar~$H)vR9L$O2lc7`# z`7?=1i%gwGF-?V&Cwy+v>x+2&oGGa&aZQux8u$I9$^TpRrfvVTwz)Z%|DWWUo&5jg zp>Vm_+F{u}GXz_4UqeEzS416SFg*~%sLIOC=(blxNTnzoNKwv@-n=_HDQeN;tX3u- z>?#KA8F~yYm?28110rh@U%AV`nX%gSd_xK@Twc1#qqw_df$t3>J44%)!lJHA(p}|Y ze|Uf-_Jfm2mRgntas-(Gl0a?0Ckp!`=5B%2meNv0_p--7kq*W2o-sHf|4lOEP@~Jr zWcaE}JZ2Bv-p=mteh%0dG5ZL-dI1s>6xSV+b^i0D&1fFmz0-A>Ss8TU8yvd1yI zZanG2;&ga|p?<{Omk!oU%7TCH>r(4gH;PE>3I*9GpaUvK_TkIr;GRt$JJI z&1kQM$meTPOVLcr@O3a~)B?xbX1a5}f|9IN292r%m~^qG67#aydkn(H{G@EJB@_k4 zZlPeTGZF<1(*QySjZ5cDx;=$EtYnH47yHv>z;k=jZp%w{_+Gk*Wq0KX9VQ_#GhOFE zK|!~)HY{l*djxWd{MY{aO{j6|NIWwsi{7OCke%4oyf(LEeB+(6-l*6RiGAH`u@-_( zCM!(U@YQaByE4%3nYje)4@Af7%9~>cxOB^(STF)~HAfa#f}4(q>0$Q=A?1~7ye9!W zZS*HX$;KQdvzL`o<_U3irl`^&~EI4loU0^8% zpl1J(R_bMG)=25s|H5>66XlSaG+`C4ow!i1SZi{0vj6Sdqt^bx!O{77>+tB?4{zQ8 zdsNjrlZi@7%}Gh?8bHKzz*SV*0gh8xm4o$0b88zJ*iM(_A`YVa0ctq-E+N)7?2nA` zwcec{w0<}`gAojd;q`4O+N)sbg!Eh3dZ=a$wgc?0Dgk#XLDef}#bYWq{Nch);p-Sh zEh%_~!(sT)V){-YNTp@Ci#?wZz)YVn7}K5n@>?yq$mIEXIRfIhV3+;Yd39U~Gn7z> z9pQ>FDDkg|hyVGd`5UQQ1v3H21OwoHbZum{pv~WEiH4fyizzZnwikWKBmKJRZG= zXM(D+L{Bg&xO6cw7}%cGlnf=c;>vw2)FE`*F*pm*=zazzZBWN#`JYyI|igGM!d`68dg z<9EQg9iN`G-kcrnW6-RN@Apqy|9y0J+B*8_{n5e2(P2jQigCl#AGLO@#1&QLdNoP@ z7Ev{gSTr5D^Hl60U@C^d1p^&P#1<8q`=}9?z-1OWTWoNurf(AR7hjcUpi-5j(dFUM zcl#gS!cw%p`*3nV`mJiFZDOk*lMR}p7nLfel3`z81J}|^qT(&+cU8)Ak+VM37PtN^ zHDV1mi|M#+ag#rQxuKMaw14m*X!R?%EZTCSnc8*IX;kV`t%(2q-~8U{v*}H6g<^*P zAMP@%TePygmYBj&7j7_(?Ch|?JitArntw^0fnoh6u;h)E0$F|MtoJ{4E`}vm zR%Q4dq9Y-mTOIMwJss`b2!nT?RrZ4;&NQ>^zFO4gemBtZ!B;%J4!`{KH&I!eVAaO? z#s0P%ijC z+fY>+)~SbxJ#Ghis*{C3o@|sE)zt(zOufpF-eCu3YM?F5MlM6q_~|BI7|z;^E@kBPnU(j#Pwb@6kJmg$wV8P4<&Xs;{+W2>P^5Vbo zn1@qw0eSJ?nrZ*|2qj zZ+tZAz;FCRVuyW`F}7VX-$bQ?Vc)(F@4{|(%J6RD$b012ZerXt3p}WA!KiM$^p_IS zO^n15&rLw81t#OKNVeGUK0QQ9V^xU&e+HZbX5x!`OvX#K1sv&}Fto6fI2w?Ona zd;I+AP1J+U-;xZ?j|A(^IJ+u_Fr@?x$lqO zz6XxAq>|iKE7vhJ&wsLz->2Wpa^_y3c%$ zH5v*O#$dEm^{Au3=1_DrgM|hCDC#6E;GdBBcuas{1VR9CY#VXl`<2YyO3;0p{;bc zLlm{yVcv~GDOXn?u*DSqE0Zun{?;gNrBFE2aqTMXB~g~E+R5of>lkVsVH_TGg*ruN zwPVb&bb5Ape6oLW)H?t9{Nm_cmctrd-R*FgQL^#`W}{IS8PpD+kIacR938VG!jx|8V6 zWs|3WXFyq|c)rtvg+Jq0%W};8oYMV3U2)Xp1~9L?Jur$#nK+8h$#%>vWWnj4emPh{ z9keTQe2iIUQnGOINT0;%qZ@cB_&I9dEc}tNN|NZ!WTC88$~xdJu`t*UEY?NUN0girQ`7$)io;@0G3ZsvDvg{)w2oJ9#p%Fc*=M1a`|f9XSY zr*4PGYq;Y>Q`SH#K0*`#qXc4S!XhVQmeRp^q)Jlg1X0w%z0vN3svx~GMks`dNRsX) zux22_()H2E@TEbtA-C{UV~pLNmRJ~++A{LD=z)i>=q+UIC{s#sW62vEnSAGkCI@Bg zY`O3@Ko2?nPrR#Vq9Aoi_p{Xh_$65N=d>okx%R*HrltRD&g1_*(ewAR|CyWeJdY_) zK~1JhbD5)DD^lFdVOvyxC+!{!st3h&TPe_7Np{QBEDvTWEoM28v_wIB1y8s6h2Jwj zMR(0KedOkUZf>Q{|E>mDcO8Y+lT2eNpDc-aOEyGC-@fds?$%w^i|D85K`L zZ6~uR=65+-wr5V>irEtTQarouh@Zibc%IvNvd3aFKY<98tj@R(O7gt1;gkRIG3EaT z{L%Q2U}MH`IG?|{{O?@IZF$#}>Koiw-3R?;x;=jlz* z8BOkX&~A71ASrT*9Ojy?<+~oRZ&&1(febk1g9$8pkFo+30fg!xLhwlfOdK)|jMA|X zXsA$N2@j}AbOzuB0U+^?w^x%dM5|=nt>F6s`$yCdXr*cbHh@z#3(TNQ3?h{?XILKK z?Sdc>_E>c-^M|ObT8Xd3BshoUkf6^PNa=CP<|WTowQrNpx7-2(Bn~ta4Vml1bacFzP?ef8xV0uUu?n_Etv_Kp38x(_v0Q) z-+cEgGVW{_8)^wFB;Jd=6Dj^V1((zc<%=wSnZ-}!p5^>^(wcTJPNHyD>|Y-Lx3RgE zy8m0Nuh03vr+DW4-<I@5APzT z7UzibMKJb%M$v#N%0+IX8oB|-Lrl}fbpBC-R{&fsf=x1$UptqP-hPF;{yG@y_YSv= z@u&>V8y)GbV=cX4P{i-o1xmAcG&~e^OV!lxOw4Zq*P64}fF)c}ZkDQW*sHID&lzoz z+PzpyKmdnh)}G#A3M|=79w-(N-g;WcJZ}QOxZ_L4i}4s49(GV5Vy4&B;bfu0DrA&9Yq z@o)gOaiSTzh>2XW zBA=Qq?`YsevzJQUo#7nYT?t80r`72m3rc{G5hFfNXmqefQ}h2$mID33W+M5qCr|#{ z+N#^}-y3W5`0r2h%;mqi{P(Ex-?yhf6_osplGDh1g@eT~YRAq6Rx8n@s3Kuon3z;H zT8qv(zN1(mA^PA_XrfQZ+tAMnm2_Uu`i^UMb~vZPeOO4z51; z+MM<@=kC|a;7?Bsin*5tBY~zIr|E{y6t%?+RK6vgrF22?PM5MB)3KxauLT=>6(n!y zHq~uERIs*^$CX4#ub4TNR-6^2{~AW0hDfX$_dzN20r0Y7d=NSTtvyP>#L|AMVJvZ5 zXFWls0!=&^riX|VcGTiqyajZN88wQ)){?r|bulIo2}`5yr-(-+GA#=4g!v&X*MKsX zbD;?3zna}3#b*W@B-mccc8XhCTPw2a z?9(p!)^&RE(crHH|6fd{Je`b@XaCh)x8=WPV{?B0_ax6;{+r8xk1GEiA0C}t9AErg zPzX#H&z1!L{8wFBw+ILTVFaxhEF9^Ub4;EJtBB<>XV7~epKn;zIB%Xf!*Aa|m2FM5 zW8GlcS8fK-W$xTcU4?Nt+1Dv9!gxFQO>d>x^;Z!fd{|4;JF`M){;_o)2e`OzDUX)9GT+xA|dT@I`qwZVBV7XNaJI_CZ4mfqb zW}Sqy;xSA6e*-hOwl??weu^h+{V(yF4_IA7?Z7P%*l`Y# zyqF%z=MP;ptKS%9r1VUcP!ah(;WBgn8E1ErnM%maZ7kmYz|B_V3%PzW>9aEv$eBRq zR9$uZxYbDtbqeY9N)9MkX*}st1vpnGi!F zuc;g2;9JzwGiY~%DsMEcX-zFrO`GaHQ(yE$IyshFfDVZMsOU)&q-1!yvaD=odDV^a z`Y^q8UX_%w=1KSWKjCTz2(}q4RKyCEzIR&m%LV^BR?NF?UZ`^N;q6=Xr513lOr>te z4kaT_xl}lYraxP|%KYfqFJ=L2=j>%oUj}XQJnk)_J?;T!6?PC2Ur`US z@D+Cu5y!J96pQ3g;Km*Lv?71IFh&%iUsX*@j1M>cWab`ZCTntm27J4co*QL$jHwM2 zp&{GR*Gfz5&Ms;;mX&4{A51lRaC-6sRLA%;Ii-0{Q5`_aEQ;ThN}W-(E3}mEaJ{;H za3NdA4~^Gf^oBA<;oe55lh)Rr>+Z?soKciOQ4>A@fr$p1DJwkUlqMp}zg)nWwIqNPr(vNRk#_PShd z#59}SzP8au!%Bnhx-gz@%Rmepl3uc6Z>kqB^6GXXU)|+pSKTigDK)tXtwzvNrZtKu zU%L=mDD6D7sDW)Wp5=>+>5MX=Myez zMO)_7IU;t?i`}5_KBW0NEh!d=m6NP+AQ9gifB_Im$gm{Y3uOZ^R(3cB_$(t)&@aK& z2yy8T6TFlNShhh&at2S!S{Qk0Jey~=tg2W>zb>O^qYe8KIK0-)D5OnD8pvI0kMLcf0Ne3KC@v}gT9FJ1+AvN{S~s6cJ%GTMR7NwB}6Wf%v!Q(ELF8L zQ#IpxQ#F)UMbK9*gR-A7WVRiT%M^Ns@(wcw`p2Vx2EI&BFIZ-1dNb0l1K&+C$aH=2 zyfDbA2F;#O3gAz(fvP@Fv&Sh?xT@qqdV-9?SeDU7Cf+$+%NZ>}-;zDY3ThTdZmg^s zO)N3k>{S$0E?Wb+7ntvL3dkUX^&9uqXge)5xT-j6NyN`*1Tt##cwqT$utAsFVC;O% zTFHVt&ZiZH{^8`hYDwTte$CJ{z~(TZGe_*!x6-Lp(2&%B#1c)SxL%j_{{RHz*DBRL2fAsZ)S|nds*L)PtWa-HVmCwwBvfF!Obycf{ zeEMZHL<=Y;uNaspl+KLc0ECLG7dXLoH0wx1WYh!8YPot~=WJoH7&iM+(0KqH09wM# zjAW5CDspEy=HCq(qc30xa3mpoDC1^L`*v&ZE zs`6|6_0=vl`8s&x<(;B}hs*ThK}3pww*rz11^fJYZCFjmpCKavqktE8O`Rz<93&&kEn*?0Q~N0Yk#81<)4LZtg5#K7qZA3mA#aymzZLfqBNZ`e$p zkR6HE=yopX{=|{dz3h=y-2WnHteN0jP+3R2nu%=gK@|I1u3VaH$nT?KR^~^)a~jJt zA|nZ;#t-OJycIX=J{JN{3^I2p9&xlf|` z^BhkW|Hm%j5Rs<~0+*ZrWi6HeeXB8#|Mn!$JpS7}{@bI*f8!_5+5X9!qt?aG?~60W zR+Tg}oag(^a=oit{69gKcRlk~i9DV~ne!Z-r)0}DHfItBT^$^p-*Wja$v!FuQ$?Zu zYviSLde*{!em=TTI-aA$)_3s!;``%sg*J#IMk6)hwd`heR%&PX5<_UFvT;f+`Ct1>48M{*qbr}Izj<1%DZmTMis0tz;ook&Gn5fOa5Ei+Sr`Se^2rJ{p7z3Ok+mE&mHgy z`sD+^y#Qhi4Xslr?=*2Nu_Qb!RN%&AE^p3S-ps#7+J{jGKaP7Jfoyf#zkBYGipZ@e zr)Td_6AN-ju?XfF^*pi6SIJ~2ON52}l=ayRdsQX^8XiN%!kiV+5a!kzMs&iPfwU%w zy_Frpfc3Z_tE(lXHTlJ| zFSIT~bk-)_hWzAdL^Jd=9F^KR7Aaz+X$ybVrOWroEMeNR=rHGjYoTWjv@Ata>UA3X zoc;=a-+DU?JIg+3FTS(7^P`*sHM*x=JF{Q!0-D8ghL8unNj36TQZ}0gORa|RInP`P z=^-ckf6}=&yY)@ASt=WT&6C|uz-5uN3QPW)&cP*Tw=y)%jAbVky_6MoD^vX;9mHf) z>EvPgt(aD@>9(Af+0$eZlRZqGNz81imu zkCJ0`Fe`D|#lk(exHj{rL?)bx`^b_1x7O+#w*22{Y|Z8Wr+EH;^8Z{Oe~$a#_ov4v z7w6?Y|< zUhG|Xe-1pFiaD%uOv(G4W0v>}b_E>Iltm23jeCR@4=PFaaE~7V$!VaKUUsR6%H3p8MN6B}AKSSNzT^F<5@*xJtS3wfj zf{W9`({0RF24zAh+Xo`Rn;?bW7!82|lFKMq#Ct=rj*GO37Db{S`C8WAe|vFscCvqQ z{KFAzpRo(!a2P&N-7eiLidzJ%r6-4X1XL>;yV=d$Tdk(KcUoH?Yo8yZ*<|-E&pb1k z*LLtN@`yodgq%UNK&@zyEd_&gA}m(EVtq-)2_}$C2V(=MBU+S6K(b>97X^&(p<>{P zpw1O^R%EI7czU^@eG|1mqHoqp9^76SO=ry#UxIK>Ac_@O%ml>U9)<+u?NYP{wsdw26_}^-EgrL4j0h848@T#!y4R^ajYhyx z16RD^3e$7KyEMWRqT4@`-Q_(a;H4W1XTZ&LKfI+EFLK+m18{oVT3*g-%fezS{N+ri zYq{iXiKvY>h~CgU=@5=q>jq5|=%YFATOFBkOr-<6$bu;7f^(WYS={ZivQ$7uIjGBy zMDB2&Yq5};#4J@2V=EOr(9?zpSENM~I35MJaK@jUULd%{K=kAOGCNs;>42tgnKy|D z*q`OrO|Jx?TG5n8H@x7gl6VA+JoGA7BF)F4jPstdP41a0IE{^~s6qm_k%hOM?(x+M z3;Lj@b%A4+nV6BwR)Y5<-fbC;v4UHYZaC)-yW*DZjk|8bxEh9;lA>`c{oBk99c;ni zxrOLI@sp+hA-WNDxDnjsYM?y(kBv23|FgcnUZ3lKp5mFc{%2!0`k#$S^*N=~IG8uRqcYdc_3;;kG!;y_5h9ghyEBlw$Eghd69{qH5$c}|_Dke`=SGK*pv}`2* z6iUk$#~^+6VVw*68E93K2iQ)xB`bBhz{n(0JC$ueaT|_qW}wB&bo$|*8wBeWDyn)-D_qHY8rX6-I zeo~+9LxBoL>HrHU=y2r89FmIH3`KWn32R#06$PC;tw#}{NPbEH5*s?s=F;`M9b8HQ zmgE3d;|;jur#TAn?ZG5( zT0Nt<3bRs3c-YA27VZi>S@QqrE>@gl*qc}bkS+f=8e3bo|HlSYn9Ki9@yz2tO&kB| z;zx8MdXIqM2?6iCy?-7i?>?pi_2YZ_}OM z$ze5u-JqWFy$RnNR(kIIKmZF$WN{oJoQL#B>>>pdO7LXr0liQ(=}{cCZ(!CUY*ewb zWTp}Z+zGso>C0)AcVx0!KIljnUibD%rCNxd0WwWfryy^JskiWRG9 ztG46Md!#sW>Ry8W#o5NTVzOJ z=ISs4#ilj(WHj}nV`)CZSemmKOH+--wYbc*q&??csgt-qsXoq_ zyOc6cZ>;1v%`ui9-(H|4UMi>)w332+O-Mne=-@)leQlC(;(wAGulb`t7M>)q1!mp{IeBkv z_~<`ACjD=0HrLnwBiNWZB#!5APX8V25C5Ak-n;$eod3=Gmc9O48=KAf`TrEp-_QTQ zX#Bq#{&$o9yG8$fStueP0`YQsMyOZ>yLmW+r!zS}KRc)YWpH?U5u5`rJBDO-FpU34 z4^Nj_I2oWDR?&hW`Ld!pAb?2PPp&YGlg9e_c|U!4&rP@H&upGdT$@oJdHG)&8`k;X ztP}q?KmQ;9nVVInJoL3%V<%H!aqIC&a%hE}YC5SOB-~7$$w|+1HBJ3%?++16zuCmcqP; zSF}s1hANfjNkh$2{*|MJ!&v}PiVg$1l!29t+7zUP6L-W>jwCbp^wQB$ckBX?U`DCa z9j#32(h$nESh0L_CP!avPPnU9(LVJZSFFE0j~)&NyRqHzz@ay`;HQ zDq3-Yq$&L5dm%AAYB-XYcC67lgsy5qdXqS>Arr$d#?kqsxW`O$|7abD&&}t~ANP}^ zLYPS(dGg<8D*i`(vp(1VKFKqe|K|GNxfEDR3OqeNEF=eta(`t>5ZR4#(jYQIx;&WZ z0^zm9%fd2YKL(x%v4O8{)L*&le(VC5*bQlc@z?5i-Rm*1UGY^5u&i|id*(*7e?!E~ zto~y>>~&g*`4KMCIT_CX=YFdn-L;(Gwp%~GIe)qS2x2SDpC!18*A9UzbTOEhrhpn& zLNhJHW#!T#*J1~DMNP7mB5l=f%qWzSb-w^17vDF7f8dB{T$f*n$XiJPRxKj}hcx}K zd5~p{k^>ShuTDu{f$f=IKt^NL03=S2I*bTox6c zP+%5a{!K(?!8tqu|8MaD;*Xgc0OiDgXg1c@Z21pf&*i_Tc>Z4TAIr#p%U`6(H(L|x zx$yWz!lV2nLvS?8V3+4N@o>~0)A)qohMCuIq7V(<5$GgONaR`T9y8v?w81?J2N5YG z>ykx$Hy##lR?D(D`{*Jv-{x$^bPAPFQlux!F+>a!QA%bO5hl9lbB@C;wMdi>zR*Mh z`xf?F#bGL;9f?60imy@UU?YA;tQVR>l=!tjb9&S2bmCEKFpN9E;pg=PBo9*&b)!W4 zvqUJGa4_)Z4|bLxMq!E437!$f%U_N$J3;aCK*C4Lp0QAkUKEz;08fD-aNS-Hdy^GL?pyO14Y|fGX;=E+0zN8OBKxRf!%{Vu~_#k~WBw zQR@n3;0DCF@@piUxCzHeCmvp1P1eZ?mt!5Ss|hyXQuaqdx}*T8%*C6+9@2ZpD_ zR=NTT9fj?i;x&k{Cxy(KUA0P#rJJ-sydRaoKd6zAvseGw**P{{>b{l>y z0Z)G{V-a`D>{YB+>ddw3vVhP3nC2Aqn>V<<6H3l#ucvG$ zg^{$9LHA>sHDbAOOF%}*T#5oG54WvJsPHHr1Mw{}7U@_}yvn#=YLcP&zs4noz>*3o zR+v(;38^X}v8v6ov}LfxYU{0v!mHF!E)S>N>avPa_TW9g`}$BuhEU+ z|8rV}GM(hp>K!0x-t*;uXxjIG8}+UE z{ohkOe=qw_Xa2YB)NiFO4GY~DzMMgvq`7(Mmv+Nh~S{)5N1IxEbq`T8Ip_eatglM!Q0c_vIP9jUu-!eLEInnAXN zdp=7?mYJJ6z6_IYyT$4L4r_+j2CPkL#*%Bf;CU(n^Si!P)b?P%ZG*`;33hh0%nZR^ zP!Ikgi?6s)3NUSPv1)X=vtwr*6QNp_X=Z8~jRta~?*=b|MvX0v8E|)dn@wb#a4fB< z(Uy-qoU`^Ky$2PmiPBGt5PodP#{+%+eH)A?drNJ!%lKX>M19+>cs3fA0x71wnLcT||Eh?rodwg|{D2Iv!*6V-SrKzSgk9-TT!6OfCFdW0|v% zVeEiZ^$Dpsx{iLC30!(KaSC+ZAwKM%Uebg`m^0 z3m+);l`IzZJI+EcUUaowReu=Y_#wkU{|6i%aDrF}D-V}y>Im>{E~8*J-$%`)-r%Eb zZmrFzKA1Z))rzr2m%3@b(6dCwMl}kGCB6!KViV)@IeWE@EpIySWuqbui{YUwC%v0` zB+q-9k}ShI!W={^*DFD#5j3l{%382qzZn(-GKE ztW|IrRRf_7_y{hgStH*(14M(a8Ph>(IKXjJFULB3ZIUe6lS&h9sSNYG!^c7F*q|H) zj(^A}YUVs!TB-u`?IReUi|_SmvbN(6iiV7B^<|LJl1Yg+U3B8FDH#=E>n4`jiXlATqwL8WVTrCNs7NvY^O#Uyzwr z)O8PWeExp_;^2GzCZY@fj@maK-~Eg5x|UY@=(rkWrUKMU3jPk8q#%>>5iQfdO=^G-^KV-adnimQRD&uSUoT=Z8 z)`g8C^&ku6^digodOEXbOwH9<{w$qk&X0p#+~ItuSa)8)yYjsU$!xK1Z2T7p>qdTo z;Zt72L95>#|Mc!?o7oDmh%N93aMX0kj3%wzTMGXSF2^HeX@nFX;$3(9CRkp+?UCU^ zHsxo{ zL0o~%fyuq|50wFDH+L$=u*x4t*1UMf-C3pqq_7wwdH-BPe!-#*FH zqKtS*c1xuv6py#MXy4D^+^#4rV85J)*2-0HoZM8jcRWN$>r#D#aG@X@h`E_7%sC3yGL%)mdB3^S*nFXz3j=U zX~liXFBa0F$+paq8{KN5oV2k>RU57?b@-e*1P8!hvkf+#DxrWzz@b_cpFjqeT0@5n zP4ML@3|)m#wyv4Fu8H)Arr>RLqT|#fh}{$O!)W(+dU%Q_I=aon^!5RjK1IwL4G;Nv z-0K9F@DUf_E*y5CaX6ZX%%Cl{D9H{cWD$@LgUey~5w-JZ*w&6aq@-bHZZfMM*~FO% z`T|tl&4yKX(Zd~iR@Aib2(g3rqO$53nu`0t7iqer@jeArex({)M5?ZVgNCadMH69KC4-;Pe$L{Ec;fxpwLiK;nPfvoF zEF2|hZGa4buK`;qkb}%D*|{f13GIqVh=|7S`x~_|f)h+Fpki;-GGdEqCQ;`F+@?~l zOX%HTu@)@)D=CEy7Omu#q|J>*tGPvs10iW`9t?`Uhw|2ZGG=iqGnn8g2Qy*c;)d5R~;b95$sY}xt0>l@9v|Id>=GxYy?H531z znfl{w7V*c~ocrVaHT`kUe|S^KAIB^=x%16c*W={^ocXFA*u9Kb&ZltL4f~^25{p}( zx=B~M-}s91Q1XS!@_$=bcb&hkThQb#JcWIDCcQm?)0V2|UWZ}uhcCh+6CcYe(7Rdcl$_U=rSw5kMKG`Dzt8cz1@b;VJzN;_lvRtMt?t?AD_HwonIWb-tGTX zv2B(Nb+Q$zhHgc2H^J z(GApxaq{84KRf#2=;Q(hcW?#=%!hB!FODxhV2p4$o=25N)vciS0ubKYzz55L1;tH7 z$Nv+7(U4#~R8xj+i#r&wFpxX?UTi42WsOTE{*k6p6kv18zp$Z+PwbbYfuh^Bz->D2 zSbm%SoV%8Tr7jQXXZc;5yQ#$ZJsYc$+8uSmL=KR(m7Jv;p3?WtROv=W+s@L?wo^Ds zOL5#Q@_nWMdP9c4ag!BN4LsNC#qQ% z{Tjx;r)CYLe|8gphk5_>=w8~azm!G);ts7co6YTQ=7&+K(kE_sjhNsw^Pjba{}dN? zi|~I=bPH9%&*^I_5D|R{v9MHnO^WYPV-|$OpO>v{k)dx4vX|_<$^o~ z!mIhtG)d=npWbHN`$pEB*d@kV?Hy7G^p=NXT5)7A<4)(-#l4+D2wXtN+C5hPU(*ZY zTu58UBUOCu-hW;<8>pMR2h(My*n;oa9(=pVX-9#r^axu~=k<^K!0jB-n~u-!wj#3p*`(?q*`|)eZhecmX{w5KIs81A+!!B3ijUFP$nMx z$Ba*TycSPk{MIVC@Z8&83g5-^dBOcFbu;u_4n~Q>PA^1iW@+Q4_=w z)uov>TN7ADX%g5We~l{yOHPJDh+4P^AdCglAgQJ@BH{&5)Qj(e0UVTq))0;7#MuM?E|ossUMw9ps$OdWcVTh14BtpU>uu5DgM$sL z*JvoD`{UTghq5c%2d8EhNu9KQn9giy&ZxP95S)4Y&hFJAjtVBP7HBRo-tG<07jHLo zHl#68y{>Wh0ELvk4%y)<@ZMp^{oWCP%8A`+vBY^$<=U(3!8lSa>?uLU?|($ic#zWi zCMK#Ne&)`W)^hfgF_qkmrc4`ama9PaUYcUAU1+a=Q0SPy0}3D{Ycmfedk?e2NL|NL zV4jK@W=H&r{mcbAs!f334 z({nb(V%qmUjC1&5|Ll1G)1vt!vpI(MFi)CxjrW;GkTL>{c(w^JSReCs zO@LFO|2jTGOBJ)ZKQzr$=B5#abetD%ft9M)v|Z06Z_YH$mW2Z;6vT1rNXQ2$29r{D zfA+iEm)OM~Y|yuJF>Lj2>--(8Ek3=ocPyush6PhaV74*V3d1tBd)0(yCF(BfW1@?C z!njdMY+@Y@pHK9&1u-T3h|VLJhc6k#&;^EXoVUXs`3(OMwGpT{%oZ@o6R(7uFv}a0=O%2Ga<~bX-T#?B!miEl z*!a)uG;HjFT>00U!6FXBc|;}mSav^#U+$z06gj6eYMV6g5uAYY&N%CQvo71;X$z&4 zEXp2G-oKB~W93#s!(T{X7Jg*~G%r)YQy#Ql~ln6OZ{kGa!A z=J3XAqs7|k0AGbY_Nzjs075mzu9>SCw~Kyu@1tI_5_|`r72nRWiF8+25A=cA*+4B+ z8+ky`Nm)TxGixts-evH`djy-8g)vi(2S);8dq>HpD~`+q#qGi(2kjZ*#}C0sc+YK0v-$n#+qULEgX0(xPb1pfpY z{0aU{+>RY{|Byeef5^N2_wSF+3OI;p1+9!N-PrIj_(V+lj6Fp9aIEnlLhb?ydxLg!X%u*)V z%VQsf7I#HTaE6*tI%kQI}b`^@ObOmE5 zhyb)e2NX=ql=ai~GG|{4dFrS?XX2%keLI}R?Yd*#X|K*dU8lWxU{$`r`^$`+7`ekq z#p$bQMZHSU3xNga40j)j7-Deo`)e++xy92$f`hxNBcVzfP}L~=Z43Bf@IjYaP!g{) zMUq>f!aM1Td?lhyJA$cc%7jvss-grGW{uP#i;Z56&%?Lz{dsiV&=#1zX%<*=yy?Yz z)r>K<7*VFuiNba`5NG7hQQ$tN#;kPeGn(i zd1?%=x+7&Cf?gLQEz)2EfHjSgC1pDR1|^A6=pLZI$4lID6KHOP8vSm4$-b2A1K!LxPMy|r9%(h#R0n$^LE(^b3rkIweNs%;rhZ!UqQ^0ND!n&c822X+ADu#e zO`DkCxfA)b5nsQuGqB(9^)FF=DuXaOT2xz8n}>NfPH7u4b4yKaBPL#Z(Hk3JZyW|? zCNM73hT_{fa|ajPed3v+jhd>*I;y05{G!a*EX?&7wOOWYww0UjqZ8=0nc=~;HuP1(4|+Ahc3t~57c8g1E#pszm1&;si}0dMO)+KVg$TLP~oSKhvI z4H5h zqOc!a^+Hr;cIc)KX1IG5+{DA~?`Xx;ql@5A(Ga#SnkG?2=8s0hyW}2ec;iTs)OmF6 zfY@NXG)C`e)%mCE0~wp<0{MUSlSMm;uQY?F75W=vv4;b)ksQU;>o|!3>X?B$;7Wbb zPQrtI!!$79QXny;F)g1Ke*M?w$3K1%7gSIkn&`J9ehsz)Uw`|Yl>u9GkD-tVYMz;g zc+D)Ho{3!nmucCFb~$6z;oB>u9!K3!1f{jfPX<5T*!lc~1qMGxCG^ zV@Ts^gxous>W3pjJ)%0tDkBB?U zieSfX4(r{9Kq>Au>r0KZWPh=5Y0SNCk)0v(3oLq9+JuuA5#RC1K{B-iIJk%MN)Y!^ zMMwNbamzvp%IfL0} zdTQht`Fz3ZQt8DOcm8pI+e31SxUu`|Vq>LF(FTCXhP}9tAqV>LuZ#cKbH?_N8Z+0& z#htGXPY>``7&mtC{=>I#j}L-h7nfI8e_T6QT|K-wBx>4NX{@duo&35uK^MO+YGyfi zYh;rn?A2GH@l|XbIzo!sXsmQb80BS>q2LH8_JWBwEJA}meT|960gKSbpiSw~H0$*` zLO*%4+xNiXd~`P6c=hVlDt-1epEp@)bq_c8513Ik{Repn{Fn0)2gux@Xo=nk@-9+j zpWy7oN^lAkndA}i(2R#?BnBAT$Cd4L3x zHN8<;Rd|W82mf>)Q2OcX4KUl~AL+lq6==`~6~hj?s@LL(@;&>fcs&Enq$##$D2*fu zxC4L{m=6XUHwDxp76N~O|EQDO$=u4xtT~7&HJw?)ije5^+%Sf-8!U?Gi%3!Rkc;g1 zqUqMbpyX_<>A*qlROr9v2i9VRQ^9l{Q9%D;({O&{-R-2 zF|Hi`d{_w%Fi(XD3 z;N*HhXq&|A1)}x*?4%Wc)py)83%=YFokz417J?Fy-ducj1ss3tJ~*X6OcXN(kGiAY zL)m(WlKl8ZBM8BlSk>WY8~F)2S$v>L@M|8r%0cSbg_-lW$8tm@s3%tGEAL#cYR=7XO z-_Vd<;amZSBTsE~uHhd7&?K82GUwiU3mA z#24TS!u~@mzG6dlg_ZPmxxG!8-qJ$$rto!F!nMLo6C6PXnPq}3hqeihQY`YKT*nu? z+9t>gIqAky@i1&nfafWOg5E}4;;Hyn3_T}mnz7GI-4W-gX(&2AvhU0!5ybZA=$Sv=~VHXdAO7jdH^-{YF6rDxVISqKC-hOCI~PB#bMcS=yeO1>&MY@!^0{z03_VVz zf3e(hMOt7=;^O6jwg2Sxyv_g-@biC=t6gPcCjGZ~BmEe}2@wD|%5x%qrp$RoeX%Fb zuves>8f~U4GBPfFWmv$3)qTE2eojeEnMQ&JS8Y9Gz7c{&O%4uWv&EMrANgZmL0$dJh;# zMlag|!bv5#N!Env2w_+_6E5ExR7H(~WA@KMJl4G{h*GtbDaSKJU=Q9)WtKb9VC6X2 zql|x;<7PWpWVr}XLOsTWfwq&1Hkut6`!PtajT#@f9(8h%XJh=n(2QXpR7CXg#8ar| zPsUxt@g$zK1+76i%*_$Ny4J(|zdb%VI=?tOK6z7-5&z9DMB`cquq{vGk+S3)AcF}E z0ENgKva}<8c4JV}jnv>|Wr<-(8?y=a5vT$*Fc)A@BGZ`Gcdw=nBfJVKlh?(DuPJz5UduA2XV`OIB z^QIBQ#znRzsQ5b5+t8VaueNAi3}_Q+8IBt>bPwQ5H1$IBxZHXGo4{k6FR?2qEw2Ayfx`~ucA>{23VyO6omUoB1gsw~mW z!>m+r?UsW^)ob~|DQRu7*fdka?lftvC7ncR2+PZwp-r>5H}emry)AaNZiMZo_(}Ay zF^Mkmm39gP^im?BK|B0nR_)Pr(#LAe8mM(3PLZ}SBW0m| zK**k^%vI=5Q<#yZFz?t&5y0#@Cg*Z{PDRyJsyxM}`lRDjM_p-!h_jnhDROKN?>@l zB$ksy3o-UGzW0S1QKvj5(Q=&q&yVK-m=-;)2!gXaEYz?gcNya8+x~dh9kO$SZiM=r z?OM?*okX9=yAhdFzy{36*TJhT5Jov88ekl=;Fd0)E`eP~lV7|!(pwqbgd^coFpLuP z@&k59Dt781)ad^UR#sN3RV@cL;-X`CX~gTqEt=OIJ?4@wJ&_w1F7~RE6R!rFK-Cz(S zCmQ4B-(8ojY8S0b@zA`9I>WgCmDLH0iQ7_A=eM<>xmR)TNKb4n=G<6htKj3c>7Ufi1HY}R(C%}jpXPK)V0hN)u4aefi%tgpEms$f+4qK%u`(30 zp6Oiy`X_3Cku;D4C#_#aU_Y0l(4>C2Etqs>(7hDrE&TfNUf0;(%{?jU>2Vr`@W}&Xt8@+QK6lV1c!T)=T272T9kXQnHw3GvTan z!bQ^AywI*j%g$uEz8>s^xn*XM)T!wyq}M>Z7I95OratgaDK8Gw3iJsmP7moMG1GiH ziRp^RSfdY2Gl~CGEyS6<5wdgQ7DE2B6xydF8@RAuzZ1?VopH-K0qTp1!&f74TIx}ozGdVtH7OihNNbQjWs3nUSHI+B0G8n9CS1*cHcijn?MU3n(2eKE zPIOIFf80xZbzR!`}7iraT`PfdD zvO$wGxKYvT1v6)H%5ABJ7AxG6ZF$NL9@Hd*88)g?~Z>e z;0&EEKV5p);$DxYCmN~R%DYE-{MvM9rg9!=$0rxwHkm$el2*w$#M7>(k)6iH&(pf5 zO)ua2yAN+Kj(Rw+-|MbS}Ax&V9}<|^21C@FC9nq4JYn3_{f@2=-Qf#%P1K5qUG z!!6G&{7(-5x7plWU$goDwfa2%&yzfVFaFOJ|7Vt=f7WY-0{~Ijp^fR||D=GQ2mkpp z_};Ul{lfz6t}Ld-HfblL4pb@>`llD&V*qo?2Ivl{GKxP&{qFD4&=W&N#-v$gow!>8 zHe|JXl@ViTm7FxP3IJKi`ivf+S>Nd*AR{)-=w=w-wW51eE5iDF3PJT2yUJPRR}uLI zdFDc?E-ewwsBA1EjK=PpCTHxTUKExHjl>l@(Z9xFFGXvMVUl?t<}_GWPk*V>9_H0#)wmYpj5p zC_+==08Q%7FcKcEA&+ zD2sRb(Qle@%>C*1_@#y2Y{ivrGx6UNiuOd=?x=84pda3{t~?+gN5+LC?C|h9ssM2M zeIs7!$dYE_1sUbQn@u?$58HUdxd`WL@Qv+o&%VCcg)uJgwJ}bw9TQmfc5msqkUvYO6jw;+FMpUpM<%$de@QSf+pT#99PdcPe6I+$nsrP)m z=?^e~^h?n%yGzZ``ysbVE(i1S zDT+cT1S%h*fkEZn!}))`MNuIcy*WOwR*OYfGo5@Sf40M4;3Bk=2=8(6suO?iVS+bN zF2l`2-}r34ph9aD9Ew92gYD-Qq6lPAQuFyq1uJ4x7{RR z(;$;)q6j7uX0}!8u%H496IboFPS5N&Anygb)IwX2c{L{72A`SouiD1qJQ5u9>1EEN zx8wFrko4laXo#;tb{xf5E5Y~h0@|yIQq27UbLb5_c9SflnLuHZE|vMuAR3ap89LWp z0ewh3ZBo%bJRCyNC0`SSjJc+H3pHdM4yve1CTOW9#UrgQNEs$EPP1 z$4LZjtgv$i7pX=Yn08qPSS(h*RMNPZ>EOXGH8cWFz7tfO-6YK(JU@v`@_9 zTjS_{5Veu#`lj-YXPdAsiCD`LW0###vJstfN++MwVw1|`DvW=oo#NJ{vKde_B7;Xv zH}6&dynik+*`!WrVH}tuvs+?1OU&QoXm}CFXwCh=IkK!7(R35Xs5hc$v`F*Fv|MH| z7mis8S%#Cw0`=F-r5)y-oZ1&LPFrm)Sg+wZvnWhFyCVk2vY=XevedyaS{}qn7Xinc zf)Q@O8Zti^*HeDN`vpuCNkLQ=RojSW@V{lV1Mw9-OL>}B{KOY&7`3DBCyP7GiuWqd z0-nPx8n%FWiiV>|i}fqi_oTv!Ri^|Gmhn1Gm^zp*N%n9fYfdF|P&gGfBKyt;14%We zp9Qw%SNgUBWx*GSG4!Xte6XgC%$*fAm*MhHD?ilIlE7D~`-Xc;QA9+E-Xt25S z@C=Z}vD=!~u9b+;6-Y%v${W+#$m3E|?u?#Uk|VEC5Xrrn&6=|n!z&b-XE|2Wom5sp zwL3~>!^qjAtRx^{47pl1cJQ5F>|Y!owD!->kIpVC70WRvlP397+@@f4x%K4M7H&V8 z1qI3nRYBW0rg;{%qU&P^BNnBmQa7Dso&uxMzo#GFBZtAbEQd2)k00qA`gC+;q-$aj zNYCm%YD)oo+2x*_Xs)ihyAt1vCUIo**1ckpCUD*;fJHwZU*E7JhXp%&_y)d)y}R%s z;j?F{I}C7AD6pHFzElwqKIGKwphI8O63)<^Zfb=1qPj z+F-Y);$I`~u+-wnId>`#Uc3dLTh@^M_U&Vv<()u7j14U8X3yRhPI>C)Ib)3OY$%2Qo7d~N7DFqn~MHs%sJEMuV@Oysf zPq=+W@wBv5P*R$$Tq2jsj6L=jS}!qD-AC12x%8rjBI^dPptQ{R8NV@B{#7Hb7(?5SYriUonR;D(Rdcr%unTI?97_{D~sy$ z_zF7RXRitdOcMc{44hB#g0w9h(fRfK1NwJU-gc~kT_ME@{pq(IpCOj>LF~MVIZ5OU z&~#+E;kH}QZ4)MA2PNBS1OlVJfrWbUqHoE%=@#%2tLWZcj{Fc+AESj&WQR3NcW9!h z4>wF}abR^wyPTOY(J3g6G7_l9L=%7^%yFw8mIf-_ql@X7pMdnnAWSh7T+xW^wmU1jd z9aM#+duL(n>T48scvxornoXz=nO3Ai=@Y1>YRXtt)=%l0xH+ME$>xf`=9#QMKi|+f z+>QJq&B^9QbdZ`E(d@)i=DPc)ObM;uTer_~p0Vk=2@?iJ;nKesE_o}~Kz3rLL!;Kx zuWr>VdIwt`O~~6}UrUz;B|k;Me-q2|E~wl_A?g)7Rkp4a)~nkW)yY#i`0sa^c&ia? z1e_fX!W*xK0R$TcSqEnP;25MpD zcN|hyo@Lsw&uV>wfjUg%;EO!ItLk*4mQ|hNhbtv z@v8l`3*Q5_qrbsndJ}+h@B5Q zN5L2kkENZKQ-Xh#-}ZPAO%m^hc{$xARu|KPc}PhCot~CZ2VE%jFmketqKJ$rRH*F? zFO3Qib2xTtK)7|$(#0w0D=!b5#eg&zh)ek2hREuqMcQAtkWmxeedlrzDevg#sER+vI38DHwDWc4z{ ze&%b6(g5je1LsS6*!JSc$)_~KD(dr#py5!oFg%=AyJ81>_gU-ck7r{p2}#mOsL1jg zr@=3*<#10dK51C**t7Dq7RTgcSzm&7ZNuAA66(!2XZgCaBr=YHW znnMbonH*G~Q*TmNF8H`-BZF-Ffc|sM&C{IgY(M|W&T}J!m(Y-6syeBLqYG>F>z5hT zcoZhQ-^Y?__oDI*^}Mnq*SWHEwoDL~{=}mgoo%i~WHenviy8vT^#<+T4S_gfuqnD| zhZk5+HTNwg%0=ZJb8s1nq-?@RStKZ4p)ODZjji(pyVxi-lP+HqSNr@oBg;)eiQ_Br z{oB)@WNdj%PRpmIKw3V`#y8!G4XtTuaNXw5EbX(QqQ~cPPh*c>&{x5wFBIidd)0Ln zB;&ApPwVu~%hu;PwqPl>o?hRfZgK-jsK}DRVhDhWnQvM=OpTOv-(J$T1|JJsvJBV@ zE(vUmqRUapK)$#((V^(&`0))Y6~6(eeiAFZaGm zX+wOUksVkJh^$tczM+U78ks0dZLH(11O2s;VL@};hob_j0hwP%l-ZEErtdH#5FKtb z3q+RQzog|u;{u^z=diS=!_-(th%Av%&3I63wr9L``o9AL5~$xVpl=o%Cr zuEI{sD>Cs;$6fGNWm@)>BH+);LKwTnXw%@}p0n*%y8MPb4tqRTl0&xw45js%8(I2ETC;kBkNO*vkO!3N%Jt!8iqQC^@Xw$4l7 zkgb%s_JymMAUhd#Dr%aUW>!$FN{y>{f^jeI?r52rYg)01$L9*0kitpbw_xI7=3aHA2WzEM zui51tqjubf=T|(7=Gn_xXqfhfEIig(k1}V+X3mOZ>&{?m45WXydCA%b zIjCZ82yI3dC~w4lP&tYF%OHbP^R$L?W>9@d^Fd!7v!L{gq_klDq28LG@0nfNB8BW$ z$QIPKEam9l6hb8P$cH_BX5#nE7YpS!3`x7JLed5mkq@|v3WzuemDOhjEqK+{rkT^T zXo^teA(X&`j4b{sI?YQYDq=CIRtqK;6>Cr~yC_L|qG~BSFUCM>_FbM#qkBTwQVC@x zx@2c3PF)4s)>EHnkf})~hIrKcFYX}ixLPwy|C5*hv9Yzjk;?zMwK32C^AykDEC0_t z56;u)!NLFKr@;}Wa`Q)s)MOd?F9Z=Ac1I#r3!?e?8_c`ZSgtph>udPtM^uXUzd=<$ zYl!9F#wuDi`IX=T!%ef0@G$GF5W3V*#tG7?e#Ao@n^e_;N`j%OL#Q*l4M#UsTFqg^ zl)2Gx7!TP7fMp*hbj9lc1KoX+sP_qD&9ewg55ZlC+SRyPAT2eY)QtU~p1N*4L()%A zZvNkfmH)S~)!3Nle|wT=PXFih|MBR5Hr;aK|EGAe*Z*JRX!tO- zIG88@!EU$Kzu8>hoXdYt@ucOyV?+VqFObFfFI@kC93cXZ6#PpnjdlZtowdAN+N|4%f4Kkt;`Hpi^6mXaII}*!u4Dtab7I@j077Rj#7-B(181Nm#c(T9OGwQjq~M zFfbONKU=C8E9Wq^8AcsM+9+YShg@LL08rzh$w+0EQZ1P2p*|b2?4^YuHzS0#;&B-2 zues%vU6RZP{pHLN%68ct6s^VjaMj_rv`i=o?-&ILmZ@yFgW=LJ+8l02c{#{*ECV?o z3ZvZf&Ba-oYZ1$ZK^ff-dfj%Hf2*XXm^v}i0LT&*^+_y&yE=RG+K{>}#5bK@CETek zDlVKgtl8l^Cmyhw{x?G-9fg9VTjPVyYHvsDTGYG}!YN;|5)f6O*WhYJ%>cjNbQ#PU z7u^>(d|PnR!aHNWQ#izx1$BiiAXyN%(Ab}`6f3@nqS{1z=V1Zgbfb?b{Z(1N%07K&N6kC%8$5F!J7m z*cGzz71`=>q9*G2iaZ}{B6xW+(wHo0g7w%<_yHGne1|C&nDO#`}iwoO7OMX z*7S+P$a!E5sz7j&m1@O+{1fNhQuLw7 zcQ{(LCoYIP$^{sB;nrXb=@ly(tT=%9xeA(b+$S0wLHjk}BW7bX-*gHjw3=Pv+6rXc@&$oDbi>qZSwyC99K0@!uPo}9s zK_On~O;|+NuS7^!h9D=Wt%IL_YBXBkAD*=?KD>W>RK=hZzEVHzpB?WX9v`$WjsUgx zFOJTuI>S$>`^9nch0plZ&f6beCyb6AkG@GnG+drVl0sX9I5$+mb*KTBXy#Km?1r6g zTXOcvqYy)Y4uSNs0p1aLNKkgAIhFZRsLYJW3oZAoh>O$|J_3oE{G#Z|^#I>W<7$dh zfhN;D0a%6>ptdlXd>>@X_eiPEFAh0fT5!`P0)>+>6uKWtC6FP@JA`xWQ~A8vqBo~n zQ|$L+>4JYLlo4tvrCK6I7bM(1$S4}4+?rn))tH$K?jOBQjBJ83lN$$9UHROK>G|^{ zk5iFM+aMZ6!(=8GK-u>{&F1<>>i!3Q%o`MIa?kL@t&o39S^&sn_G$!%28u} zMdZ68dcS|R55JGj&hzhxtg^bu*X!PPM~UOw$G$i!crPSlX``*w0#v!BVhR4OW8&kI(0-E9y0Z zon5V=e`tSiWAr^dMfnNNYdXQ~R4hXQrdRBbZ_!Pv#ny`t9uDl=@V;89>S^mT8*jD4 zUc17JV6ZsxsV3^_<@GFcUT85kl>RQ2;L0_}de`6g)~E? z)vaN~18H@NVNf3S_*dWG->gv~qo;hla8z@mN9J%4R~(;GC?m$3g(m5BceGs4jOZ=Q z797w+b`rIR5kDuyk))kSnt-J*H9qjWdpo`jV1X_%=;c))Vej^Xe%wJNlC0eAo0Yr$ z+{(cro8;}FzOuFi-C1H;8oPBJy7;PfyemZkH_6=5H;R1~+oMU#x{j*UgB_#4ufGnO zOZp4g-dYzg8r6&>6UQe^wRC>5e{p=!dUt%%dbh71ZndDoV3OvUuAOS&l+nGP#vAl) zS09qu5ifon!9;4^=oXWDe;kJ$m9_qi%38*)w@GnXRL;$I+xZ$w>PZ58F{kzQk;QYA#m%NG5RYDyX~L zpag=H=CHFOr|FZh1*z!2u%QmNN;G{w9e2!=vzWW&a! z*3E4l4?2MImLq1&rV=)KGOFoWZvbjGWwDM0(X^Zd%7y-Ge$D$v@skVIOsMf1q}20;I~Q zm4Q~Ps}{#lLW~2-3kTHlsCyd;b6+A|%&DyN0OBHv*j&UJj4ylL_O|N|=t7vo;#82s z34LS-oH1y83Na&k1N!)>fyo#Vtje#Eq#u(xN~iRnc}}>OD3g8zKI$G)x8~N>ijZ!_;9IN-bO2fa;5{hzy(kFiLE_17d6f4fNOygfF0jEg0Xmx_vl1x}8=y zydGou$|8S*Fa_~&6%SfyPe)ByQ*&t+&1~C#%4PY?nUG4-;iX;a>bfQkyB`d@pMXYe z>kV1GSf5N?+%y7fu`R0$bARbwD+gMBP zR}f%r-=Riyp!9(@*CvKa+}&Wr!G(XivcH5&DK{I4f@vhDwl2@zz7p?T~te^dy(H8?se5)?u!safuc zIo`8_fQikR@YRU2!hlU1{7Y$?nGkp&5*~_}UJM!;5XzDZ4QD5oFGd!{)H@QBS}1Y= z1N~qIimLu~(AIfE z*;?i6wu~@^|L|swW}vdL@ZYUSX9(FgzvwbOkW|D2#Z$>nm-ko?%yp@nGT>Vp-EC2%ZtFig}cXEuhM@!vS+J zjKwD|UUT9ldt0brxaV%zWBaYjCD@xV32q}2prtd7zI6JUSB0mf9z07@2pK)AjUz_E z+z10=02A22NQs(5FXU&zi(!v^nnmmOOmMvgkX_FV_5*1=fDmw#uL@$BO4s6Y@gRg97#UL0yXqtrq2 z3`Yn`${9ow-_?F}*9v>RxJ?I|Gv?SWNY?b9q9Msr_~Um*QC>vCBZVe?h=*qjS2Lu9 zfylgF0a?yT`r&Hr6P$IO*5$(#jQ||~gAC*pO|Ts6Q#3#|6TszZ8sRFEX_^?t3xF-BSKo zS+W0$d2ki0MW^{{Ocj%2HLdu8Ii(5VTcfxXRKm4gP@=qQDgbS<8RPV%Rkof!XCkU= zse!?(uuNBD%sxEoP68j^gwcP>;hoxL-K0e-@d@zhQ#a{SjsV7Rmj_-oz*+SvnxNRy z#gNtA0G{nrRPSK&=y;kIxG>g|85bsnMBx3j4beUAH1&a9?ttjoQgpUVJIuO@|5F|e zY2cy$D&GiQ0kQwG%B!p1>e2lO_)Da)u9lb;CjV!G*#I&1V~cD#3T|~>gI}^QNsnMH zqq_+j5c_!og2uv+TMZx^?d75mk1qC)-?ol^dVh3wjA;V)-{N@=qgNrR3W8wN;johi zKnAuC+Bakpfbs>)X%+{UuunRea~=m^>uzaOEuqy(ggkXc|B-JWO`B^)=;6H^dLI$Q z3k9gCceQ+p2^ZTa1{uY4C07DV6H&CAc$|k9lAcO}4R4<1t)C>tkSRZFv)!+&$)J!d0Qr!;OX_%%?gJIl`k_6)hcNu&*Iw~Bk zT(8g&Fl5=)g93CxnR6h|$_sSc`sHx1`;km40&#Kdw>RR0UBKA!JhGVE&Nnp_mMDnO`fq_U9GJ6oz&97~Lcq_w@ zwpO^j98U2njD~Xzl+lRZL?eKf(2$3nim&Xi41esHc068_9;7M?0W)zP7P!Ie5ZL1G z5NdQs92JTB14?5yVf@Wh+FX6niTe?Sqo#(agN3jy5E%s9E8KNP-1gMy@sRWQ&N6}Sn9w+q-hKuyUcDTO|1oS3Ok}k?hm{>A^LZ~gP(OR-)j9GLm z3pyBc4UOUiWTT9kRQR_*_~&VfUlK6bV0N(>PObJ@Y=R?{*)C!W`T5&`-#DOlM#WfX z`K#F-2)2wSW~?ionR)>gZ6pk06tHjLMCsmkd(asNg&-Ef;tm_Pi9rG?(aq>a#MDCQ zoFt2BTPjrs2~N6!WYG6Q5^Fg=1#+p7ll@dCV6>mpdtShvWa+uScfaY0n8U{ z;y%kR{2o?@&DjMHT{(;v_>^{nUUW5D9>vR~6ZHg!6SpiP_!?WLgq^uU&w>g_dioGxc!sE*1OXm@b3y0t1j5K;I2@C z43mAh>W;5(-~4M$bKX_sG1ysVwWFcFD(Y@=5+wHqGvx~_*Ryp^FA8;WQiX>m>-=BVXdl+Cswg4l^2Hze9XGef4M~DA#!DEKv zRrk#@JB5mN>5mR+ghtgi5J9*jce^wNm0HFfYprTx9$6kYo{>5*8+1p%#Uqsp>+{JF zGzGXisBVG007RGZ{Z5J~rAm=5J6+D$?(H}pg5(MF#RhMJE>dhe+vvbaK-!9QrIbH) zcF)N}0wmJicdC)Sh4e3ypT!ncCL6{imRZd}71EbbMS_>z!Qb}|BcfCwQX+a7f0Lwj zHrI;I2*lApdm7Y>06m74CYvbn$7|=9dGB&7COhV?tZ7uU=IhI%g*7?!n(Tc~?e@eq zalUE6`a9EsV0Em)#OD@&7h5E{Y3jon`4nIoofU%*Jvts6EbPO#cvfYOh1_H=(0`cY zLAqr#6dE25LkxE&501US{^r;g*32a1OH!6`ZY&xa)1=Q%&EDb}v$GeZ+T~Mo1>_u9 zJ?`sf!Xj0mKn}an-44CpdtF))nb!}eb}gfmyhABlD#&O|$!J11Age?9VSLAYKaX{3ODMIp5eMX& zmbgO4OY?GCw2H+5$ZWN0PIhexH`|}l7EMKq*M>?$E0EosCVYyP*pFTPQz|S0nK>tw zYtFP&p_(=jGZFJ&7=5(bp|0aH6f1XuJG>kXwx2y-mfQih0w zIh`n8`gx_cr1-?ps3waNVmP+Utj>tp91TTJgz|eIS};qLK33A?K-Tw&qqxy$B!Oa6 z%KJ*Ozn|JLuzD@%;S^~B*5!CshH*TiHEe$baeFZ6JybYq5Jo@?SUWeMkln1B7g!DL zy&9DHUX7?yt-9c3-aaiB+5?um?J7jUELy$jQ-tH~^$c&X$0f@{_#~f;IW_(3P}4J9 zNQ0DGd^8o1spk6ES)1jr!gFV}F(NEUjlE&U;U-2FsV&#aZ4v2 zCo#HsT)PB~|7BY+g$6g>WO)zMg>ap0h1_AcWu)Uo`JviuEalfT}`EfE^ax!7QXh0bHMm7Rl z%8#a4AFI@ue>qR^nu)Ik&{Z>4U;(=%#y%2`YV|WX1!ZCza1-0V4tCcj(=t3W`ez)d z)1v5Y{0Vuz4D~}K9GEN(|CZ*iID3JUV8LfF05&S{YRO$V zsJK~zngxpfP2(rr4QXtH-H!Gtw;ANJ?E3g_mWcYu)RbeVR^3lbpNw(_mAH=)FttX> z;I#kEh;iuE32AH5hD&V4KPM5+=0RM64Fmt~#awG@_0@R)FnXEUmi9MRdRzOO%GuiZ ze3pMja5#BJUGPj(?fHp@rh^d1+s{QcipU95@J6%doQz;p${rY#qa43Eah|Of@_&uf z^VKeMbn#)hCBH+jSe$X?sBCfXp4XXeC~i-+7bP!@#9M&ktL|3-b{MCc{i4|ul^{p%Th(Nn7$PB=_0Q) z8dUsXsv-3$s{x%wOf{i@bc}1J?47^CiC8>;a~W)2s)ffnO?k`HpQyYcPW`-xYN}2e znTsEe_>?;!ktXIGkob5HNqod*MA_*o`q3AN#}E2H4LL?`5dh+q{{ zQ8^@eRy~ud=W3cXQ9sq3`j*>_sfe{3(!Xj=$v zV$(Ax9TW5mD=_-y=2y}yWPbH9;zdqkyWz>Tr*=!_^`~|Vxf)a+)i~rjJsu%b#DCGq z$tU4{j^u==(J}6WyuRlXC^lwqD#GgBg~Pr`Ds*AS*&t=+^%%wqR4<2OeAMIj}W`2Djk@wt?RL0R@VI|KgCl2@zw=qRD+LWyBbg zzVGfwN=q*7aBOimQ1w_9$0;J#3;|fVQIT%#+Y_sv$V#|w#5CEVTtRr!WDJq zX#eL!dq@0nr%|rHFEUMYXT3X+F{lKuIsSgN%h2(4@Ztq~<7h z4C9V=iXt@3u++xG7FxgrNW07Zz7}LgP#4+BDArt#oPEtV+FxX&9jIkL9j1*p^(~h! zDvl%#y=Hze`S@I;iL_kL%Xg6@lwj|qhoF1w@41!Typ7f`5XKg$ZP$o0#1u zj9B0^{LN7=VY>vwo#lW~lquz?oY9b$w*sFAk60yI3lq^sEvTy;jB~2V3cKSGzM7~7Nd6nvaU6u(MDLPSP{ zSJWI|ZN->35aSpUakF@bcUY!OV3C}*ktJ79tQB|j_0pNDVuVA8YRM9MZHz{^Z_u6U z)QYN4EoJcDpY6Le&X6}eJ(kiwE`$t6tj5g{qbXxlKh5jO5Ein4K(Yji=_7Sj$y_5y z=dkrcT34ISIU-ow2=qCF47MU{e?G!iBDOgsZc(zEhx2-*5}U~o;;hUlxc!(7dXn&5 zr|Fm+Uy(YfBqtQ&90F>mMC@?+G0ZYtE^c9#KDe<;$t4v(|1cB^9NZWbegHQ>$iGIq zp7MClxr_)8mz1A2L?44RySzGwyDats@&zGJh?s~vA|BTr3GIajDd8Nsv1+0mOdFuO zGWXF(2T0BcD2I0M{NRkkq{{4VofC56f86h4H}ceu6wC-HE$8P{T>d`nPxd)wLwPNU zPeHhGe(p$n;nLzFVO5<9Ra+OCtSS~)NvA4S5DBI#7N=BDP?(P7F_20TIven0kmBuV z?kt#^dN`%OsWAH@&V9vdY8C2NtlOJfm0H#G)u~lctx~OOVznq7y4-ARY4VE1fL%I$sRxWIG!2Cx(%b|RC(hAEQ0PDXf~ zGD?O+LCN)fUujq8V$|`PqC3Z&`k50!s7-WaV3$CI=Nw{~eo9iv$u6Ar8db)x#90gZ zmj(;O{F9}crwq(evfm^lN}zQvaGWY~0C@v6Z(_rG2xp}Uj%zKChjvDu z4?h!Q1lFxMCGq)XW^77UWUWCG#X02ak*R8Fsl>@%*3-?9t)Q|c_Eav2Ot6P@U7ZT)KonfcNLTxlXHX2 zjrs&^LZu}XsCmQW@LdICy_FRp{wUH&F7vg1S^Ue(UZ=mP)% zbP^QXLhL45f$5=)yie$mW5qF4Q0nKOp^6^jBJkO3y9a%Pq(DQ$@ldd}fJ#TSs?<6{ z!3K1#Ojn>_)}mXVOva$*Bvw(W3kV@U=nF$3ceFNmRX*r7Dl!+<0q9-Wj-i;V6A|s! zlQ~qzR1t=V_9vOXcu$Q*C=1^B`vV;X$o_73pyG}8!f>bt$=l?Y5AVS-uXW1)Jo_n* z!vomckDBZ-`@l+fPLALIjs2(9d3SWyK0JQg>U=nDy*qk)*lslRd-aRsiUhLA;MEx(!gqZ4XJtMZ4Oj(BvkNyEz-(x z4xE?DZmHo+Y{nnar3e@eOov5@$oXW(R5Zy9Xx+S$0+~o@lE#W-@)0h2N@Q*2L3|hHet7L?KF@> z++*T$y2fEyc(zSJNT6z!V~-9w@1Eq#Uv%L44>&#wU!yTK+R@1HoM@_c$vr2Eidq|C zd_!$A`T!l7exEDax1xQIj`s1`Lvto)(^IO@_SEQznEjkUtO6YVeo&7qE7)Fe-WjGb}#NJv() zD*7KDU)p?g;3^gI!xz7ARbI)#0x*xEZ-ai zW@Yv9*;pj!<#sZ*gA^YVQblw>U5hrzo`fd}MnDvdd@gfLGA`;`5HP9&30Oz0nSKRCCw|d#8YRu}}BTSH-e?9V5g2zLKLJOpcNtbd6GW z(doL$KI>@ZAYRFK!)e0Jn8fW7EaEbkc-0MkuvK7@`ZEg{1AFHUnRzwfnd^&;?azX# zmi3KHtN6Dd1oZ{tW$SL2u4;7>sfF=>PJ7_7?Snb&g~jiOS@(q67uw#CR8`N82T%2T z4x@C!OOuVS6o(}Rak|6|H$ z3^LIePA?#jis5v4Jpuq1p&=%mk&UR!7#GH3_3x#D{Y8?4!qphDt+8%+nO5v$$&72A zC0Zyyx>D}1l=~~?{vXUxAk1aJ`V??Hb_zy~r7bium|KUMUBb=eyq|Snm!9#}?ks3c zxaITgDku7yqHhg)wNlHRW;rewl}Y$pGP z?9q^0C2BC`KU^r#3qwAsevCNYA z7`Cn*DywMYRZM-$A=cQEMPViUp@ci+`iw61sNMCVbiEWH1 zq}Mm&`@jInX|t?S^)aF|6V@#r-!>@R>JRdi$4b)JoO*%C3qZ$^quo9e8s?IyT1Pr` zo#xRkIE2-QFpq|youkky>ta8{^8e~a%5k5kwaOqE4uryjO5%XRbzqAv=KebLMqJ5@cH8CU}B*^}gpVHSPwv;q%@^tJb6 zX*cGEDCvrK2LXco-I-nLVcO=+I!vx4$J@!WuAST*kR}fznPu=bMRE=G^m}N~+EdNmT4EnCQ=p>t7;yHZ9%R%Svz@qX znvq*A7%!?0JCqi);^0Yb1Y;*=$v;>^9|}n;s@52(US0fMb$oWV&JxFGnR*?S^E^hJ zp?0^1CTmp4lUJN~mJe1-lm>{*Rz;;QtU72tx7nsvTiu5Ux63j?RZBo>6C>@oKzs{h!HH3m z_3fIW8)BUD+0nb!>1#&u8Ilah*3eA9 z1kWc{_@98us1AoOdPl)#JGvTQ+%$4@l4E`LY+AKHHy!LRCsR~yI-|wDx6=NU6B|Ce zj5yp)`k%7&j!^~>`4~mLKt^&j0&$T>5=$bnrYRQYL9fd9I}L08Hul;^+=AUDfU8y-?X0Gi@=*`!+UGoeqqA&oSDEEpxyz zHjp%X?G0e(FNc4N+CQJ3{56V?U(+^S^MGKW>b_Vuvy8S)RT2NnzN33pjWMQGg^NQH z)YMvfSCJ8YnaxXGD)Nh#Jh~k6Tter-He+A5m5K)m7_$$1vj_{sg|J9?@6Q1{-V91N z6|d@eKMT60>!p20aBV0X2HX}+EP&c1i`X`!iFWHY5pm|oz^X4#eC5JeIQA!2FT=yP zHUQ(q>?Yj10(ia{OdYWA=%18N&S71|!N7BG$vHE-eY|IZ3uhxLMB>UAD$WD9 zhr$)|9SKhgi_%uuv<-F4vepS=F1#zBx(%3zi&@{Nb3=S7PQq^IKkT}B*yZ(~U&Dqs z)bI)jzCU;3t$tfoUDyrTYiRk>LW#UpoN&8_CL1HEZEDr3MHHK_#mLgt%i`AIkxtp65s-6~g0>%-MMp zRGCc4A^V{)Y&SlG0W^FxZQLbvHukP(Ww#whviB+^MykdhJBhKAPR^6g;4?F^DM$)l zPIJohg4d!s3si(wB2MAes!yQ;tMex!Q~s>b;_KrkVnvyxvnkU^V?mDSGBv6ez^ArA zI*+_I3dQRrxbdY<@nE(acZDH%J<->QXEOINCJl3LBvwIKklP9oJ47m(%6fQexljww zF^WoVqRn#oEz}2Y6k_FToQQ;tUp;oYr&@L7n(Osb)rdx9pXd*0R2FvTP5HhsD-GQp7Z^~*HXESV8)oYavt4eRO_094t zW%&jF_3c{n?T`r}9nRNvfSAudF7slL*0xi4GA!q=7ojtd#x<^XtlymyMMl-(&4QC! zv|-@!ZyI<)x6AMxkOK)rbC}=)pQLIC%p0qMy}W4fydmX(#9QfH4f{Q9hrW&|tc5)< zvOq%=_#ii}`^`5qgjmuTOw=*qh|QlINi{Cb`u?zqH?nFsg$PxS}S!*F)8{5_;#q?jnvTCN~i7Vd(E79)#@vrYXr>!4j z1bxlEXr%?WRyr1-bFj?f4Go%DfngW25FqAkzy-OJ@6k-g1dd%-*N4X2_E$~Y>3)PQ zp}+lI)81BI@kh4853yX!S`y1Tn~&W!(vE%?)D2yt-{@L-c`E!w9t&!D?AxDEQ=yi; zjfAVW;0~xQW2|VmMP(g}nntB?@gi)g(3@7>su`|hA&BT#znv-V*KWhAUa-W9pYh+7 zsPE2Q2t077-oZE#Y*7Ip`FY5X2J76A2ke_CPy!geO4i3mj54qR<&3_J4@8`)fHCme z-WDswD*YGZ4@bkv4c#@%)W}pqh;{ugG}G5Fe=#LWLvR zOKX2!WPW8T=E@aE9L9l;e)xE^@BUd~V(Or8&Ob41Dh_zrG z!59Cs+B(eY3oPQJG-Mc+nky`p(Z9+R$&eR8Z5Spt*TbCX*FC%z#w--I?64?$c?~6& zff3rmsfPHpEf-s4%o`rNQT~Rh^C6EG<1vgz{PKfr>v%*<&&>xIx6FWY+J(c(NLOl4 zfqCKyV<5l}u9{rqZ`{WWN%iZ!mm#9(8|tG#J9iS7i-5sJ)F<4Bi27$65v^M|@109| z88$ZjH3BNa(el5#6s{^y5q$wE@%MFd6JdDPn2?W02zxR%{F+8Qtj&J~u}qq_T56U=XT?Iag<8qqe{?%id1`hX{}{4^6jv*j1;))T%YbKM{QBV1f= z!X6Na5XSuAC8l=|R46@<-H?r=-Z0Gv-?0{wPg0M#PDX%#*A#xa%BFYnc|lz2 zk10%R^Z^cj@Nw9}t3jTX08=2q=O2c^U}AItili=&Z5}!zmxv2~5}!6KqXA(v0Ey;~ zaJvofaxMG=5{wJObmb#A-;!J}57UeML56Wh^ie^OM7A&t%DwZ0GY*UTzPEKw+Vm&x zH{p7S5w1~GJ|_-@pTKhWM*S?u&nW}{^^^bVXF&1zje-hhh+7wJf`C-QO>%irh7@V9 zbADg7aFtejS^iI0)(S7>b{>2EwNKYZMlZgMp)_#y)g5;4q3qn&1 zboZMIvx_vhQK^cW<$9Is^rB|Haut2{D_2shP`Qd&4Xi*Lg-v~ak+D4>XCHS8ZS@Sd z=1mIGKB7+<@uadK7fYSJJjv71MlZd{V7E#-0c@1~n+`6jkFmA$Cu~QPyrp6enn_`} z`47;K?{Z_WmhQw{j1n`%uwfr_>SPU?hm0NAUsXslHoPEhlcb81#I&~=X%rK`l1(27 zFf=$Iu%9fI+i)_5*o#6a+l)?xMC1bI$-pV*2{xREu$4}h$Xv3f;-|rsv4d;CPXvpq zKKbBKQVGvxik^a9sx0EKv);vJ`O~MkCPw6R6*YZpOPqnypv5?w&WE3$V7e7bG>Ru} zou@yJSPN+`_hJC5DczW`jT?JviH3a~F6wE)Gpz!JG z4Ld3_eN53m5}B6DB2sHlC|eJL=!HVprV1Ow~_8Xcnv@`1L5njk&Z5; z7RrjPCgQD8Hw5VLbBLTp<-pAWO06{_im{@yif+@K$;#&?%K2D_*fX} zqGgyV@sELlkBkt_o$PcyX%C-p|$n(ge_XpXca&yl4fb{K7o(^uR?OB%7Z=w18YUc9$b8TXk zH1E;vTQ`N?A8pqz{6q~LsAM0Y(v&&IWb*p^zq*kKxJb$3X0?)eSi5f;#60eFeY4G{ z$ewR-)*1VBOJ2ix-`rCQ#aXAm<^t)ayl*!+v1k8-RFdZN&+J}>G9iSn%O5cJ%dGa6GpxdAH*plIkEdlKo0=q>a61G^Q z7uhAmecHUbxjA6f*q`jw0POI^tT=6-wpyK^KYV!dm(}yIk9S#x(=)8*9QxR1&&wAt z;NRw}-EI9}{PX$q-M=)Szu0;Ha`)AX=P&=Vz0=%&_3|&#_8j^yeJ1%hVQ0r*^5iP( zcRo$7laaSv+4ryXkp%oFjsiqb7-0w64sp>(+2z$Zio0vk&UUl8!T$3yI_$9%_pg+* zBd#+r`g%w9Dg1w^N=yL za5Wy^yx!WnySv*&yx$y-F1M^IYe4ia20*I4w5#?1em#5-Vf=u6{Ri3iRVW#zq)GpB zIAYw=buP#$<#FCpX~mGJmXKl<$B0Omf~hlJIIxEJ zLhLhVh)RZodq=z_5vsH82AUExDigj)7L!#!h{sK(N*AwotYAM+pBjVR<8yQLj1A;i zwhO}=m+l&CUcIv^J7_?G8dGb|Ybf&WNCf;NAZ5O-x2#r%7a^E2?TnGuREB!lJAiYE z!UQ-3V=c9gkej%w`4N%wYg6JScGd?=g-*beBS2OeH^-6Yv)uML!8=KxtEeaG)@Zf>II+?doFH2ZSJ zqUlMam>6}k!NF2y1rtZ4HnS3w75iWfdQ&-^%osx!rTv6@ArFu0rb{`c8jseI!k zX^U8$=25|RCMOUKcOngU#FX&B!urLhJq0pwBPY5D4%O?BC=6dkC-|?7Cy8?+^q!Hl zNJgt^d0rPx5)l+M^phznTd69oGROI zY`FCI8>WkYAX~49#mS>0a{4V6j3{(JYK)9yq5d| z`FC7fNL3p^k_JLWs2o7~&S*Eatw!~rBeiwfJ6ZwW3YGA00Dw#V*l{p=&ly4^qG-=c z!1aoFj?f)&9HCHLUnkbP)K~3*;I~@4q1{wlVUzp6kLVAF&$6rTXjKWbpf3Hj#69IX zjPyMPw=Fyzn^5{=QFU`p+Xhd466rCb1N$A^Bis5OF*l6<tFf#?`i6?WQ!Rb+t<$nhekg{s?ry30M?~ ze6q&NYCGSMW{f?qT5Lqy4O_13r-RG!l@@kia6P)VK5(jjsdzsFIl}--RB1)uaA(w* zv{lC^owvXJ)@*iues|hw|N7y5i#+rKr9K{>9v!|rdfREYe);hJu-!Ua)0J8{tR<+O z%7t}C$vaCG*zxG#J7y_ZoKda>h?evBCH2HS&qQIc=nOV+TrLj7l++rqTv^q=|;hS3d#bp>0Flf^6E(+V6_V z3--n-5uo;=Mqmu}4HB4sdV!Z~c#YR^HD~48oyL=)ra*IbW((0(73h;(wGedp+7zgO z8uHTf7NjLKfes-)mLzobv`Yf>=1Z+UPQfG3OGBhji`Kl4%2cyBDlsiFE?pn`a{ViK zip+ZE)dyI4yxQFj*ni+-*?+J%yMKvx=LJB~^C!3eC|ZAZ^o)}G4*i49AxS317phkWFsN<~8QG{_#a=pHJvD(-*VbodYpbm4V2JL~Zl86k zifOH0XF4G5S#>6cAC!Y(Clwh38S;{7=ATM3l@4qXHl6sNP}NbomGl_F%=2MjdkVvD z`3E1Cg#RL{A#8gAvgV^?r6x{Cca$S*hCu<`c~eiU5u!%Vyi>;ziXkI6S4k4 zz!Z6BlRnYpjA2Ncpyw+(D+946;PdZ&Ln$Pkt>Z&Tzx=WFwtaHiIr-2&`sL{VJ8U1F z90ybot>50ZKEQWl9%wk;WhKX#Eh?eUNl;d)3LygM0c@_?cI}nH_XYIuN<++!TcP*H zgxllnax$FcOd#hX9HZwv*V7)TjK6R(n9WM-w-2q;qhDIb?ZfvBVZg$P@_VK|Vj9@= zag4~BYT3tlr@`=!F$mzZ4j?7uL&RE3@<4!p4QBKe$(M^w-lAR|hP2k=`90|KDGK z`Rn0nt8>_5`Ji?GMP%1Q99pne6eJ5W`F zveUU7Ogi1qpBb#|yc}IKc0es2*MQQZg2nOSK~#MJ9R~E<4CS|`_l*pW__8sOy<(?xH%e|0@I9>N1#xRj0GX#i%um`sw@&%w>ael1nNBi|(Ab0s z@ll-%qLGE46aXbx2TJEJ?G{7D<3M}F@s&+0WmsM!k$5O8x+$jEe^lr(8V&3+6EaXP zSjT-dbyI8`aS`)kyP6#`s=+@S#dC*u$Unkza)UAx_ zHH67W70R4QSHu8m(wFF?T%s&DSBPM?*U4Fn3UgC`4YX1E+y7{ck)b;>@5B2TZmRtx zkZ~jEq{~Y}+W4Df+`WpAqOEl#FzZ{aGW!7+vg~hXed)0YhES7lt@}l^^{urhkae{l zNFw_R-VT?5f>*xPVewyY6t9eNTMYHVzB!KG@Z0Qf_URV;P4w&;y;1fH_?0J|M@XmZ|$!i*sf9mw>RE$CN#l*WQknU!fKQx*#5FR0NF{q|S7*=;-XaciU z4?RG8fi$TRodht%JTLhL-3itV69iVE7p4o5eyGA-UuO^S=s>ODgstgydJPnHe#;iD zC)`N7TIF7}Pi!NodK31^${@v$9S)>$ZjuU-c%6-3c{pkB$^Mp%o7is!32 zi@FmZ58&!(YjPS62gdmb?X5QZ+7&*ZesksRC1~iCfeKWdfA)Ja$OhS%dk=M{BpXjo zJnc-4sQjr)OS(7rkDin;7$2UJ{3w^}$9l{4<8;dvATP#x>D0x8ic`~?nv|w^Y63Gd zU%K;S8QlR$YEqpaD^ne|C>&q;iWDJ8ko*9e8`P(i;82Fp*$EDcXe)w4$n#hT&a#)Q z3c=ah;^W}eJ?L12=ot8o?Vm(Lwn(fNUky@|wNL+6$-dvZPeZmrv*ERo2OboNEqPdq z!wvSwFfwiW2kBkp!HwbCn%2H3fD^*;Lt4_QalJikzx_Gh+}yM+?S))~)M2=$z@>Vp zt@h8SCw~nz*l8WVdt%|-?D+OLxW_4|cy->fgo>NHt}+$(5OMwPmDPe+(#U(VcTyD{ z?SQ=~w~8TqUTXY%Y+`!KKOON{iKYvs@AF!eIx?wFqaHvi<)eNabY&@0sXqA?iAk|U z>LD%IE+i0x80zs4@7Un^e*$CzziPkK`mn#v<`lfFl2|qPli-H(WsJu{$p`~w7DA#` zuS7~4byT5YT`7Yj;rP2H3c@Y$D4@;U|utvzVac;T*t<6%lq#{ulR6quP(+$|FN|G~6%`*WB?$39D9S+){Vh+(D>z8L{a=bc*?{ z)e)G+?$g*y)ZAiOGjmO|aW$oM=B#MJBp4(MUewZ5^OeL**5X@bW%VM^%sp7btL)pG z^IGkq4PYE5UTyclZ>ZGpgZ#!_NMX;!8!9k()2CCGSFo1yIKAOu%&8ikLue;gmAY5z z(dJXEE{kl)%4}Gjb;B)1(ULk{wm^FT=K4V_8`Aa}bX;wxRgjEbG}W`L1ZFJ`BKO=U zCftHY_fZ|G6`6L2VsLD7(K+q(V2&&TI|T+`U7HG5 zZZA2nrn+V?xYUN}@#rLPl{)g{S|v{4L#^?CkQvNtkGIM_bzQ3cv3S!5xBSQWW?@^s z!rT^YdwW)$d7oOJ>GwE*YnBg{u5Uk7xPT2|502p`Y%x=1A=vNZlnoi<2;EHbE7W(! zAET#FXV}&D4c;GpS9{0HIlhmK>H9JMu=dq&ZnX_Sz`s$b_Q0Dv3eERJY-&3^LCpkFCzpfBeU> z{`>9w!?QDZcffk#E(i;K{;LM%oTV4*1t-GueVks*O$tPQalLq#^HPJfZj~U=cE%27>C& zqJF3?r6^lh_C;E`LQbpimnOk1VHToYkKF25W&Ge#MaW{{?*xErQ-Ol zBaR1sVLRoqW~A#N+1v8e7QUvuZiFfPtJl0vKC|+ZfxN%dKjH_5GTS7i{zw^REnwNe2*c&?ag?!7QK$HJM51bf55#bl>Z;M zf<5%?BF2g)9*7B{Ph!~k57L}b+E0@_jagUJFJd+nxnV2KMn>=gbolv=%oI^8RRmb1 zYW9pZ!(eIAa34B~^4I&|0tMoKYnjPs>Z5-A_nqeM%T@gMWjqzvpD_!JJ;-`fMS(Al z|GxcV$65auFBrP4;=eE9apJ#I9vdEteX!BXuG2wIF<4dBUc`lLd{2RSL($yomYXAJpS?B1C9bfN{-c=6$9;#a$0N&cx6gs-wWzrds1Z^GBv*qd2 z-f`|e5H;k*5s0{w*0AlXmBbm2N@U>DIf>k0+;{_Rnl<;jRO%s45$au22#!8KDE88bO0% zsCL+}N>@k`*;<(rr-qCn&s1;)@kfvVj0~y}R9{Z9jpj0dJiUaV28*0rOQ;beECX8a zUqJ4iM-c!e0*(LCyVfZtGfR0EvWw_AInG6qbn|i(j1PFax|~X!(*-adU+~im(&4N~ zU^TwXmhI0v#`pn7r&;J2duaaW&;C^8|Ide$K`);&2UHpV|I+3En=hLy{(l)y9sZw? zV8!iM=k|X%`StkS*)+VqRx`}j8@m-(C+&4^*~C96lP@sI%kuqzI27UrB@za?LQ#S< zg`tM1n{YGq-R3Mgg8P^Vx{AS*QUb{j@XH1tRpeocRJW}3Z8{pqtavHsBd5@wI1AK0 zRgh1t&JL9@che5ZQsL@&=fHCi-Nu)iy4{_QTYEa{Fk1!lqz{rNt8A3N3+qvE%gq^t zpxfw(-yOI;qm-tSCaU?TCgrGOJ|e|=1=dTlUmPpG%xj-bvza7v5#I=@(mKOY$JiC( zn$ez1H@CNmY+p0M z38JvAiZX>p0rJUp=K?a43C++9~xs5_F8_;%uyU?yT(u)KRIbTb3{`tWW%!tbeNQ)9`A*1EQ-)Y3wAg(>`7=tyIaM# zPfV$Si(&48Am>3NUhsJCIOXVk7n!P<=&O((snU|V=`E_5j#7{jWOzBkOd+4~(CqE% zDS0Y#e}nOr$Shg^5~xJ}d;WZ9*OLEso3CE1zHX-9t(%mAGz*x^u>3FNT^Pex9JX^A?blL50 zUJfQ$<$QAa-&wz(Y~@$OyAJ!c*}crZ&wBg2|M{QW+eI~d>22B{-fUitulxToW``SU z3Rwk)XFJ>fduKa(vH5Cq2NT0btYQA?`S$aj9ro!zH@DqSFPcrP_1yim`@D&@n$D-@ zcJn2Eg1*%I7uzqeqyLQ^U1XmrD?NVMo21HeF-QaDcc_d!255>heOe3#>8O!i5{7QkbT{71cBhPbM~wI>=_I& zx*Lu@B_q&-Zhq@$-A>tt9bO-ec{WY0k63&XJ~Q&S_NShkRYGA!y7zlRi6%6*@h!4P z=?tJWL>nmj6#_=mA%TY>Am%nbtWePm>22_;SYrvZ*f~sQX?3{3V*an$WdF1Hzn3qzcUJu0GM;+&Kc6??j0P@_ojy7` z6e{^wOrt@qJ{&S~b#&Zrou0McwvSGZr(qrajZCB0=hxx(<~}HBi>(MdhAy)--x5lj zemb~hB!cuby#52(A88ujB0~{btPM(Er(_$<1GuKyp?*cC=fdJVY-uhRm%UI{=TYo* zBh1dZgZ}I2#}5c-bj_$%bdDkB!9hGqz+;o`ncGxd)j`2;Ft7*gBEC$PLM`eh1865_ zV}`~?8=M`5&5bQ!WUF7>-$d;zw)wh4h7IiB^z%(R0?IIEWC7a084b_bT;4Oza_}93 z#$8Amc;hJP_whC{1Guh-Y@c5A)6W@b;q*>7<+J_Zb{AyYZnDoY()Z7tKia%Nd!3D-iGVPed@oUX-A<+z8r&ilZzpR`iP$T zK9$}b1jppq$0#K~eQq|Qn;oA)m{5lDU;$L;Vl=!a73|*jK`cje)AZVul{L}So7mBs z5Dq}5C613Y#^((_2Jf6!_lHq)`CcBW)zDOx*DzI`%axGTAlG{u1Pee()w)!~Cm=A) z86{PMrDSlK@@N+B$b9%&))s=@5#heP)1?=X(G4nh02iH}X6gRZ09F2hU8)i?0EKKB zKH-tFW?w1sqWjTKFq}la4Y4jeJ!f3OfO=)GW8eE{&9$PfL)%CErEafwqCF?1g$c8{ z2vIiP)~7>*;7xJ0W}sU1ENT{3#mF66T_(ml3qaMJ!CNO~y( zcv?4(+E6`*K9nq_hgtT_Ug-RmUXB=S46W<6>v)hNOz_d{KH$h$fHHN^rUvTNMIVkr z+_|z5=6RNOQSVn7JhTF8^*rb^qn4;rA0_(Vot;;<|L3db&dUCKDNkMfFGqyx%HNfR zw?Tx@T0h}6)vWs8U_0}+7O2SJknt!hZ!w2LFKO|FTU)<#(*TDr%+r2~xf_^hbu&u4 zS)T3*GXnh#u3FBvP<4;^3YB!*SgpLLiHrU)8A~pQLaLr;mzU`%A~~y@^t%(7(Ov|q zDMVzD)xmc{b&G{_-mYM*i0#A;!@u}7(BG)cTX|aC}kTl-#KwQ4BP)V$6S+%2RkHa1Nd#qd6?6{zIpb98&LSq+P_FoTA zkB^Rj`i9})Dc^+egkUM|4~|-`7ROjnH;h5Y&uA-{hfq5{lLM=k!@ z_KRjoQXgj^Poptf$~OF;E|QV0H+0Hj{7J`}`{*FPX|A!kb6;<33M8ksF_@jlRxRD! z{0PG-`P+@wqAh}_sD}$*51Pq&-5yZS!dl$};7ygu>(^u>bC=x2;{n^u7mhNK=HFMD zf7xeWyq&@7I8`pF#)WHkj(e91Jbfy=<*&-aW(6tH+sSCeXpc11FC|RHM9FDS%$PXn zis&7M@#65=4PlTl*r!nP%^!7t^3@K_Quz$&GWRxJ)(9B14#mSziO*@fKoCrwG9B{u6&JG2{;$THZP`W)%ZxAm~_QM5faCT zlOtR1`1SbkBa=_K8N)-3#|m~Lc99-~Bd`nIwhDZ04x)^WVQw4EcVk+*-F(}|k+j4X zQsyJb-_hDeZ+~vR{l6en-;IVK5Ht4AFaUWgMUgg0BHyU+^_z4I5-4v&F|D(Mk+LUN>`~ME-NhETfkdthD}FEj zcpb4m;d09iO*-qnl1*%#IWaCrytjTe?nk1?*;18@7M^X@wqg0jhwQTG&cjQ(Lf0Oa zk0LyU7ajgP3yyE@n3i>C5ma+MwBGcO@>JCSgR^fZIiD^9WQqUZPV?1{6aRhZbMZp(0a?MUo& zm8hvLvyQQ&K>gT}dB4J$#xyoiCD-By+ijDv8@D@*)wl(}JNEN6{D=Lu6Y_SNADng) zup&TTzrJAo#2mJuE0zzqAWU}FE*C<1AbU9Kw(0jDY2V(Myn{VQ00zv6RzsxOTEb~= zVD&>&zSRRy)%-8I`iWujxK1E|GXMYWSI?dM|K}_JucbW2=l}WebDBfSyy3t=fry>K z$=2<#&m`NG>sO8JFS-~5S$U@n91v_L?6aja^R&I$^!^j1#4XT^vHy|RR*eRRx9O;# z+?&L~Xso_FnnqjZ9{FH>{YkVQ{nz;@V=D&!%@eq1XP5-oEJ7C=Xb!0qnuv?%JFMA^QsVwZ@29@M10YCyX|E$Z9!V|&_~zmnZq+n^v|k& zl;;0?WygPd`TXT7{?k&PV*c-JavdSD%nh?OaFY^<@LjGh%klDf^*zHG-tn)&b?TVB)4-!b{tmTMCfc?dZlNOUxi5F!d|QBBF!3 z$|UlYWfCzLZJfv0sTxa8KQecI=b>5c zNBPVk|6No}|5$qev-{k!|JmJM$$v|EW|sdhCL<kP73^Se)%7NoI3rZDYHG! z?2&9$7(2qa5DeT0%Q+mdqpVOUyqGqtj!+Fv(*K4v-O;;YVn zc<~h{Km74)%6(YhEVq6irTl;Mh3)_M{Kf8y|6j&aC;lHtf+)UX`*=jw{}5P$oO7c*WS^+ghu9Up z;RNiJ_%WbG%Bvl%PGc-6@RdJAR1}E5cAz8;nhdaGpDtRI881ZhE8yHssegeR#wTzQ zqrpm^0mV_3)}nQT{ennjX8bX4eG!t(42BjgS|QkyZ?b6s(iCWUlW5Puc3{Bxev05k zx}6jUx5$1GtriQS4=FR6!{c{gu-J%Vty|Vxm4H1qM0y+@C%6z_i>iy@$YuU$If3Qa zt~$j#d57ICDG}O$@0z7~!kp8;&VR*uyZ0hHIDR5hI*q zp)hUG{_ox0mH+Qjp6dR;`Q*BS z+wb;&Mn5u^ZP(`~v0kdd8Zbk9Sk9w*;iVmZ zE~Y&+Ia@t7pNjjNoqCs9t)$P|Q=0#yY5RY^Xs+~s%Xw<%|M)JC2o>n!gsTGc$>@R+ zn6(C|0x2`>7^L0jy@-EmMCrJ@(h1gL1b#U@{po0`{~oUIFd>C@HfD?kggK+yX%7uUhEX==*?D=wU-bNChym5RNsjp}J|?3q8H^!% z?4mW3x<*JG-89IBs3a8|P)8Z*O{ap2N0p7ESoIh#+3H=U6*QDGLkpiAxaCWe?o}sc z^|ib#H58V`6%4r6-l*IqLG7Gp@ye8P)Z*{j;5OvT z$e`;5{Wav=excMWICUYGwg_uVmOV5fzGkMvkH@;=C93WRp8n=nG2h{Buw9DwTpeC@ zmMhI;)0()sO~TgtImCtxPDHZ?x>Tn3QxI|$;ovL4o*?km?xLPqRJr>0nrfR@nRR&w zwEz^Hj_wtZv?nT2*%*v?k^N)bGxD36h=Imge)fL&38TNL^*D%jppE0<9b*W;1Gf7b zYCz|CL|NuBi`jK@&v?Y(q;XbK@{x>dXS9NG`Hb&`%-U(5N4lu-{lc$sbBMh!_+;Pa zn)AKx6sSOmV4*=7+*S9LzN^9{zVNO$MD;_JYTWr&8)f-L@VsVy4u_x`du5Xa70e-U zQEZ8Ovs@W#32Rih#TUg&w;BRSi}2xG7(0TRf3;*MK?`Mb@yp|ItTCZe-Xm8vL9hpg z_!r1XQyu^64@Se)OB+|Wwk+jw;r3DSJ~SI++f1~=Hgwvle`Bo>sU|YG3Xh;(-g9ql zuc;d>#&7a!L1EgbUXpgch{LFkAAC?Yhak8EKBgUTo2<3u#3wB05&x>LUiLD||tS8k%!ZGF$Qn|XGF1|BTvQj>xV{-9Y z;yIoSIYQ<&$cO5jny+~;vli|Qa-6*J1wOl-*XbC4;wrhmM>Vt0RY~0+IwKl7BpE{k8H@<5a3< z3pTh-`@@@hUfO!OnwPh(KxKGZ6A~2`s&m*B_EOl84N6giZ_n;?HdKFO+I4b{#cUY0 z)X|Cv&ogB43Bx~*GDod5EmpBM5r%>Xu=$KqP(~XEaHx8hk{4-2-s4vv&7Leu7ic`a zCAzgM=l7gVRx%o=d6o>|Y`&SC_p|QnGB@||eZ75^&lM}_=Nr~;W`Y=t0dwh^!>C-B zUq{y>rEqL~{GF0D5SVh7bd9ujI|zliM#lmUwBX?X9Ip`we(fXYIz*n?Zjz7ptcDI^ z4M+J(BQy~3$-c|p)?C34VmZP!*EU~&%r=^VHX_ZrXFju&d|u$}Kw{p9njLnY-ZBUY z*DXwxRf1fvcOy0&`ZWF4lnp$lO{rF2v!~^!nb@I>Mc`(#^F+h4O&Y!cFfd{MfR*i! z@ZCiiFatF~{fOU%krTctI3qCb#&n3utLhTlV?ap+OUu+`o)Bo}Enfb&d&A1})!^C%d6>A^9Dx5daf(G$5 zVtVl~4E#3MlNS~mF7x)sQfIMmzy0=`M1LX0zB~EtZ$Gt;JI5!T_UYkK`>b>Jq4oCY z@cq&McL-_3&NNAJJW8^0{-p8+x4C~%ND1yH5ZUZ(YsL;!?PIfT@Aiu9`&(W@v+JEd z=zPD!CSAY?WVc#38ZB7Bz)S;4ZL0{qER2y2D(QC9Jl~sn$RTFjf1p{@Gy8<&8=S>? zQ)JTsz(ZYP(RZ26%K4^TT~1qdnqg8rFniPcy@iPXx!xIiz1iT1eAl2kU*iq^&i}=O z)u*}QR#e;|<=e?1;TlI&?A=ERMwc94jfRuUE7VSY%YlU}>pv#edbySr*5Xn6N5NX_ zsO1Nvx-lw0Rh{G7x{j)P|Kuo*ANrPJ^(^Wsy8mOZl3DKk#8Vdk;e`|bt@&c*|GAuJ z8vBnwe!vFvhHR7!E(5u4*h#dNOg?wEu96%Nk8rWMA*dUXRqx=-w(A+u%Af4fbKGz+J6Wf7{Zf;zuL20gw>e7M~ z+hAbwOT*|R`iK;GoERY219FemWuruP|J`22sl{d{-Fw*Psty|VvY%CoZnoX!}B342QN zs(iG%wLB-jvF+SV=yDKNg`0lHDr|9$=j$>f{E+;o(J;v!fac{gQl!Xc4f0Y~eP>Ooop*DEaqB^BYmp>qU2? z&IY?9&92RnplsO6~+FlZo@{!|BNn z?_0mTj*<(;TBw$3Xj$IC0e_^x@pr;)F;B(~{<7r$mm_he5gd8l?em1xm@>z!xDj*}x%4E>Xaqjad zmaH1F9h9i$?HQ_)$o7uAm4ZizV(fA-XuZqW3}PQyj(zGbqu0Y*RB;ra8gozb!F!+N zk^=xhzLy-P!C-d#NuEarP#u`T&>564Nut&s=vRjqaeJ*{ zlt7!4;f2NuMzSY)0n3pAkrhxMcN3Edt~-2^zGn-UzGj4`-=_=@c?aj3?Q2S4t9^i0 z-~%*_7_Z!tdqYOsasLrnVO!&BNbye@Y7Wv7)DZ*>Hht3Xb6;lMg{mdozdgS|q_Noo z_qg)%N!vm|7(`6w>D?>F!mQ(VX+%0g3g$CPoAPSoc4?<(}4Ag^zz$O4I;|@DxVj9Z22d$`aN#wZ(l^S)+OMogoPO}`_J*|QV zU(My?x@Ti*8Mei3p>7^GqB*W6Z8x?^h|&SNA~qY1i|xSiTEWV~{J4#YHQn2*wx;9q zHSw=6>tI}GIjeTS4K+c!44-W#7c?4=(zNtwGwSf8DeR{x-y$5iXQ!H74;`~+cmDH=Ait?jE`768rIt23Pz!T6 z!Loi+w64*=|BWka7c!PsOYbE16r*c{%QQ+qchei(66p9PN|D&q{`vIeubtL!Z(AQg zL?R>H(PRMPK?fP*_*;#W9t^qfJ*tzwU6VIz6opPK8auGBCpnK(*JTGYn|M0Kvs^*3 zwe|Y-AiaxeP-|6JHJ%2wBI7vFxX2pV^wdP7HMFuSpfUfNB)t(ZZVyCeWdAElGjB>W z)6}kr&Eq9Do`qc&z475xU6L~blSF7c$SA{zIdd-{a|NGx+Kd}AtO@$2v4a3Iy zrrOT=;~p#_oSo)$DIwT(4xQjus(bSE?wKH-bvwm^waof3m!rk(^H0Xxno~JFF`af2 zABc;swAsut#RA%**_?u5vu1AE9aAbME@sonZddzerhPNTJbn#ZM-FSzyGPC6v>T{U z=vmC>!7f)4%pXRAnKx0Wi64I+aikUv!dZ-+`B@MlqBZjpA+m$?jkUgY2AD`uaBgV? zxL^wopOdtd8;%%7*p|QEv0rL}RIJhuZn$nS#pJyzT%*cNIy~+{a4Bo_OZfOHuKcePs9(D&G69zBBqBL{T*i&wojuF=S}GlYf* z_6*gZoUk{UnkHjvDr|3eYG{tDPZ$m^Fku1LLWR8VLg)xxyn_zP@vxql$X;@fbKLCYsF49Bl3EdDwEQ#*asi~054$$jiFYUj6O{>?&)q8tTN(X+|t(*d8 z=?Z-Xa#Za-xSzucn~F2y+0qqZddSJ}@6}l*!}Jq%4()mqGZfsrcX}9xlcny(D5WJG zYNLq0RKW5NvjKcQ{LDzLaDlY}73&8)NJR$jd{cSXOAEki^^t94^`)OP)}M{lK`WiD z+bqw)=GL<5#w)uVi01U7Bu?KDORBGsB&=#&6u^{C#clU_02L$26-Pmtb)GthyDJr z3ng-CZ_6f|`*M+qEe(WmZ8Rx+fqvOGl6vtDnJZ&gss~@40YhkVWrx_jBBXFhR2&Wv z)LjfTf{TIQ0grkP1KVzpC%fNSJTOLA#ZdLrCN`%2{5WW)5%2c`#m!jhPWAy_bFUO_tDb5C?0tB}Qu$QQWBUTJ$SkGC9HO zAeO0w-~k_UH=Uw*H+X*x*(RMG7wyo)uCTdq;*801>gVHGXkVCRA|fypc66*)cNr54ZNdHJdZ zaZxa$P~@%^`|_CB7YB$?N0IeAR9`{D`$h3G9Yy*Na{~Cd^T|2<(dni6cr?6EC9f@! zQpZJW*awkQJuu5UfQlB&zu34c`qqiVjxFt8MEj=ZAiUS{>ZeRF8vW&<`N#YQL!KlrT)q8~On(Pu0s_xwZuxMrr`r@J8qWL-6({OXsYoF*8Fs&T->=xGyX05t0 zA@L?cnS?LVjL-z%!d@MDqY%Sro;`|n??U#Mlums8)U?r;Q#Fk$MaIJx{+GkQML5VP zJ~Su5Ig6rXG9GqDDR6ZZo&m8H6Q597yPous`ArLwbVVIk)#oJijQ=FE&GO6m@qcPaiXZy}M z`iCWJ`gBIf4|+(EUWk#STTYIq7|h$XYJ_6uIjqq69I1`64XCc%si@N7l8ekh_yDS% zQ}`wnGNhQ(p(?v&I^{ySS3)kTp^hV}XZ;RH<-D>+GSr{NRfeP;;5@qaqqv$n$ctk~ z^WuvB@}%YFZ{p#w1$U}rY(ofsqwyME|KQriBW@X2)VH`D1(Q;CG?+j6YFK4NN(6c< zayF>^@VxuYYaVYaf8)s8o^iOZct?E0dA>iD*8uy4)v>-YPaMQxIDZ4bSD3v7%=X~) zlF(Vl)J5=9l8Uh3;SKh72t|o#qk;rqr_z0k97pbj}2(;@IaB)Vv{cCEZr}eR*N9if{8DuUf;SVa_Qk7emTG>`+;2xpQa^6 zRJRT#q8fDx5!I?nhp2QJ8KRZI4J0THe`g!yX;*}_uf@jSR8ljzS!tfELQ==}su?ru zvd6cL$m&V|TFc2olUm(YwT}W=)Q=T(9@%>0A{p9hXEYqb4J-V^qrh<=-od2b@7#<{ zEpgxuluSSOB&|>=*Dz42VdHQ^;!VRwh6D0Hy4BSs8qaS*V%joL%|^8D8LTpxULdWj zVzOF9SH3zjHx+^Na%U@o=nzDwvJOp!OI&XoR#%lTa;=4TFLdX$`Q4k|;Njq%08lRZ zPYqO@SalBK&`F_?)YQ&ubh?g@mvyB0&yWi3m}iLR&@h)X-qu50Y)5-h;Q^vukFv>v zJWat%;(<2L!ngq@crIvQsCc9zHmE=M0Napmh1OZ1pa4F>`l#UGQ9Ua?x=u@-nXcYf zQ~4J5YhIA~R^pp|-#Ut?`W2m~IUh^_7%lMlmW{Q@ z>!Vsy4>!{OLuXoeoKI2y54M;W*<}X}PG`vjR+9g#xwGx$|7h;)tnz;><5}hZD$oB# z`#`1JQn^8XIs5pQPQ3rP86}t3NyMNY05maN=&kubu_?ez4X>jYyUm?7AZ3iA^MLnK z-N^ulfbkF<3|(gj@H*|4Hrd>Hg-wEgK?bv&^dXHmMEK@Yjzl^cj75@6vqKAD_Q!TJ(Qs_xXzz{a?njqW|UeKfgGz3jyCiE8jnYb+o4s0BCe0S1;;@`;>K((d7j61Jm^7v{5*&bZ|Monqgpi{i2SB6UgpI>7J+Q$f&P6 zB8;99H~fYj-+XJdLG421BdAXo6$n{!&bDnlJK}_(&{~)hhMHIv0>o}++8L>ia=|Il znwS!b8u%E3LT{oH6oO_hisv;C9nbk+MBK>+e|8=Nm^|R|0{kC57XR050{^!=d)MX9 zpPc_IUw?*;pE~5eHKiO-%>Tc5_58(4YyDp|n=Af*DNix~f4YHY)!85$XGuQ-Q~*_e zk#O*8B^-24+o!Eo=fmOK|J!+c+B$5vDhmnzntov+yBx58I+Fop8J0pqfNM|sm%~vu zzPiqtSbqZx;Y|%6;PO@FbIdG0W#s{!(B$z}174|(0I)mf_nq`6&-y}uS+q--dWD1# z?nH9aRSXYx5l>WvsFsm{&$G+RG#_`;9wr=DJj7Z1uzmDa@D5-vCMyf07gxvj!|-!3 zE;E^Ku@XWXdv1gmvZE|RQ`|ZAX+-Q(Bhtt6lx@fB4$hX7!dx5Fo&RwbWk3*=rU=j(#LKp-+ZpyeJ1BUb^iH3%0EWgejM7nf9zQ_&7At;F(+LV{J^G&dE+g7C8_12#N6Lb=u34 z0sY-i;H`~|@EdULVl4hfp28eU5b1EU9zmP}g?^#kYI%BTvk`NM1+)aIAAev`jL<6Z z=&|evw<#0vI03vEuf3^K631*6t+GpjIDq(URD`E!za3TBZ$~y+tO^m$VL3c*U(qu; zoMu3RDFV&JvYEC2U)HtYX7$p+CyKe?mu-b|j6TrCJUBKPK zSII47Xp>$<3p`;%W}Ux=rkk75fH5wULB`%(_wSX|#3n-olz@WxoWa87uy)<6wEKx$ zm7TL$PDfBb?KPrw^Kz4Q#>9w-O~h?7VwlR-fk92DcMgBbh$65_eKQDM?rf@ZI#@6j z4AO+L?U$?%CY^oG6pU}hVn!%lz)UdQg-#PT6|zCTt^;jhd)aN)v(_~+LBi)^G`z;S z=IjWo`oj-65|u(zp+bDk1S=2^`)Qto@xkO8R|ghMLBop3HQ3MxoBwOVKIQ@y4hKWl zGj_rn(H9{0f?N)8~~ri^^{OE%aP=v9E;*OQ#GgkBAERttyIWiVY# z`fL@jRei@$i#C2jXnBJ9JRRSqtR2{iun6s+&Y(&*hGN)wo?U1CWF!Rj@$hD&H@q8Y zagsjuNSA<`B;0SJFKB9#V-$Rn_K8%|sIWi&7eg5s?Ir4>*Z}zoLVflpd;}Z=X&5$h z5?z7ic`TQYTBn86mrE|9Sg<2T6mbEdAvq(LY*7>TF4Y!LErDDzw&h_(d9;4E24eEq z(&1o!(TP+t=A{8BpnC-S7|sOPFFE5v@*L8_LLJ|N#zLtrn4{r>PykQpQ;rzaDzv+UWp<(nKH2}n|1@7=)om>J zoK^X}>--P@^ZfJfvz=(?^X@WZ>%wHOV(WgDv336dv2nfC6t7C6hs|26w}F1cDYaBp zsa!Ej1X>ir5__329tG^V#=v6|%VH>N_?Lpls>ejuI8M5VvxGr@PWzL?8Dm8%8Jchv zK!S~u2?ZTs6FO!PH&igT{fO0j6Dun=o~@QWMMXLCieU ziB$x4(^dqXnVs=qPd7<6()L(`uQ2FI?k%{n{A~)U>-W@mDx0Ob)`R7MN_f)gvO(<0 zMLvjO0NS89dWZQY)Ebo^y8t4CJt-@avxuK#{Tt^8{yoeHOSa$c`wJ%5iGapo{Y$`hMU2* z?IsU_^Tz!>2Dbc8h=Z)FUMg!L!zdF_Ag{{1avEejCkS+!ixG;2U?xMYfKmh9hwi{3 zC}o(`+w`lIinfUYEgP`o2M~W97bKvfQX3iS!f7Rln*e8Do4%MDwe@;(O_Lsj8dnsk z0^4g0l6%HvGf|R~9LH;RMHLiVpYM%`uI(ZbD_p@N3|H86EB9}Yx4GZ=M4Z%F-ob`r z*)YWDIg-6(x#-%7-75CNCT$e01*@Ri{n5=hsNaO`In)7Zu+o-#PHbTn{t|HjgD?Q0 ziEkJ!BL%pjpL1OQ&G?_We9wRGD}_-fP$l-nG~kDV8T&zWZ6A{qLG*^P5m+)7W8(>1 z8gj6hsHLH%`!XHFZ|iI`1`s^boTpM^0Q*iN?Qc>-A{kDgEN1{Co^2UEf+Q-FylO|H z&OG3v8wIVM13~b(y#XWqy%-$?G@7fey_ehIxOSlT#(HNWvDK~G68xZ7=w1jAkk{aa zAm4;^ORi)7b;nev*B%C{T=~YV0=jkg0q6fW#z0D=Rh4V(AxC1 zfl3*moOn}~qga)aGVd(CB&EsuWQ=XI-iDuijpP|BBnPOy8s@1u7TI=UJ9_|NiuQoKs63Sk~RGb6+bCEOS`?W6M5|c@s5HwPguxMYs!=IbjhidivCq zR@BTK#NlddaAj@GT%`kEk0PW6({eI>n9~etb-N(=HH(B7)CIFyeBV0!vGT??Jcogh5ZGcniBKig+0?`fEb*DHj3j-73by$5ea%CdQ9i;;Rf!MtK z{Zk}2!1NX46w;1J${J zoD9?vEFy3h!zjUn_NTXRH(qSMh|Hr3??y?MMPWN98SrGs921yWs_tXT>b)pM0 zBdDDg#52oESaK@YpKEKDzi(KH0!SSqlpj^pBJg;*NfMj3?^%ZU$uHH=z3+fz* zp*0{x)EF|(mb-GWnPgbg+dFVU*O5a=-!*Uqo<-tG8IF9h!s1wGMeDZ@t<$4lTF33f z_np@9`@_?pTAd&M)@gk>J9>X|Y;V!lpr4E`xh(+R_$G=TZ`!4gKxjBmy9p!@BN4-t zEznwojJJBxUr*bNuj*a_Q^c8IyFt7NPY3yAByM`i_=JPg9gf(Co8h1*F1tzaP?i@~ zdxZ69VF0)Yx-yhwGD`VwXl9Z~XoJTxsk=}Bx|9s>@ri~ZXfd`63>$3P!SHTvGdjCT z$aJ592$uHzsu@p8SKk=XfPj6xOGs*y`bVCk9zOzX=1L&jVXgk#ljCUSJfoB2YEW9pVB)^w|c zaV%+qNkbKyFlIn;dSWh3Zg0_P?>HQOZf{CXZ>Ds2RhT|q>O-p)d0(THtJ?dxNTI30 z?MbC48A+|VnX)1U=ejN%S;pFVuAQWS-9ZB%HbPAjY-mz-p#s>4`b7ejXI2{qq(znM zDUr)4*ECe?OOakf4`?da1DC?pcOWzGE&nwy5Cq@|h&;~E8MY2+H_ zL~CD4Cuya_F`o)LoT8!l4!^yr-~b&_dH-IV-#tjtG#uSGKvc!1(J(k+GlM6Zb5V^A6KG%o zoP%(j19qO@t9$4iUz$9B37;Y_6$>;|vU_0z#WSRkF*FTC)P|b_!56Fvl>w8l^UPAy z%`2&*N9>I@qO0K@TapnO`i|KCQIS@2mEWZjYwv|x*8#98)V;sNLkFtQU&Vi2fcDfL zW=;Q4m0MF@U92fm{X8>z(1vB%7)r}+9`M6|xgiS$914|p$m`dJk7Unry-@_f>bc?R zWzD!H(w%eseHXagY&VpVqCdfc*C|MWYj_3~f?CdH%08gY0y3ws;mq8p;v445a)t+M z&LquTL2t&9wei)AopZ%5mm6dSORZk?t!I8~RAJo$CYX-HIH^F5kOi@7N2i6Mp)k@P zHycq?LjyAn#kSsvHmdv@T_h@M7=-yB*7D>P#`o)GH(k-QXF71Uy(MRg_OUg?9EWps zZu{mP)_N4nR^@tFIJ(!30xwE6Q3_eP28TxU)B$H|(bs~{qNk;i7h!*cphmyxXW zzxZU1i-XWqCdP)Ib9`5bVH55FGcIfM8xExh7|*vURBviCmGkQhP9S`((#fGH26M zEgj!Bu*2xZj?;d1awgk*AvZ$PX|6h%)0^Ylq4~;b4>55BbG6OzuK1C(!a+s<)bcu@ z1mNjEQ^=tK`i^aRe~I4B;4I7y^Lfc+a4#4Uz!1=nkV~;+p`v=47xKeXcLVUT+MA#` z>n4Ebi}S{@zYH$`F7Tk*0&8^`1-$eJP(&bdS{(nAE%x*0*81oEi&vM3SntIKmaGG%PBQ{AFRxqBd6!_zVt|cuC^Pz_aNiJoaEJ4Q% zTNo=0h{(4-9-#~3UZ@K*_=GeADT;u=Ssl4KwDjbB86+QNnzx0!*Ba2R*}%F@Oz9{+ zXRAad_jD)^BD1zXfxQN;@a5LpXjpA%<}iAb?(!b?4|D~QcV*(kzR=txeWiMOE&GVg z&e_j3uGHZysR4}q^~MUWwiKKLg>We1%p*Vy9Qw2v!RKwhr~nhTSPYQVh|lrdQ9=di z)57=YEjXcZaP2I13j^a=sKb|nmsCihPu^@DHk>xS!HA|D4dP-%c(I7hC})12K$}aj zfN5FAgv^c^fq9s{VQu(qYu;vg1~y@f+MEq?6+Oy7LPuav^A;$LBHYyfOhamTnm1>U zTb_x|tT|9uz~1po5cE9o_2)!CuGHZXI;;$>qj?+!rpmO2kwe0C(J z)Yk9WMgR*{9|RI@=U5T5ygP_W>iBE3UgcF0Q+T*IC;puk!((nc!UJo>87cd4;uHcqePctZW%$3RA9Bhiu(K4BOb}WYPNukb4Rsf z{jS-XHtDhH-_bcB9*Z&e|XS6HU*Cm={95?8J$M! z21_Zahy5t)SS$4Vmk{)%K>G2o?>eWgA9dfPC@E`SPivfPnkC}3wUVBrr!tMgemNBC z=FaXX+K);AaePkJ!Ma%5qd3VV-~RSnv)MWQc=-O;7QoXwZ5_XDomCiy_F61d1@K*v ziy_wi1Z7g?*Z|4tR?pXL_tx-0V44;hNiX*OVaL8Uyu?l;0N?ZwtGBb1zit z+Pgupd+fnOykn2zRaTEhAy;6@-jt5LBC*pYHEh!%exH! zd!1e?$E*)ldmZ02^tsfUfMLnt-^RE&Y~x`k>GdFBV|>G?0yM1^10)CYglm2_fmamV zs(cjKCHm2TDRBI|(G37tyWC%-9AgdS6t!w%ry(Q>q%6s4;YZenj@5(tp{}uNe3ZU5 z;|n&t0M}h@mZ_Q-iwDYH+D9&m#mjttItATr+9blo~MU>$AA z%bg54MtcZlRkb|t+Ei)GIDFBJ$MHOT+y``w54!x7HHd$xRj)VdsTbR#yh~esz0)P` zew&`V%Ut1B*QN8mV`%T8HnZ+8zr_7qeMRT7p&xu97q>s{^|MVQEfdI!rjzw-C4*KY z4{e&XdY16iwEyF`RP(g|+kWw4*S7zAx!v4d+5au$sbT-esj|40W%3@Ht#^T!D6;W; zv9j^=k=l<(XGiUm(^+i%^d=k|KfYzR@DS2BuA8`96unHx#Rd4k%eEEd-C}w_2%*So zb^Gif#+VBaYdiQbW@NhQ66KM_Y=>S@W@G!pUp&9rX>hjKqIG4IeA1@)_Ri^>TIuU5~71rc#vU}GvLFq z%XAFZXZ5j6zSQ!VdlDHriyZT2h1NCg`%^7g*COK)hD#6V&+FkIAqVy30kCY^3jyC+ zACK0zEZ{}Nba9tMcVsd*SE-e;5iKCJgQ12>tIv1nib*E@if*~nn zqs2>e((iF0n#a97o))k@AyUy{xTjh^K4@r7`CV0cB~c72X@EbN^yYFN56!Wzo_Rhs z?Z4>!t0@2$%YV(CogMrBXZPjy&Px7U#xuwGZ-g7G@Ncu5hMlz!+p|S~(^~k$gmf!5 z#Ht^qg$G{o1hlcvWaS4kU1T_=nN`5OeywL|h@SE2)-^(A*`DN~0BXvAcI`o;qInJ2 zma$sY#Zu>+W72?ZiU>@+Xc%Wvs>{3n#UTB(;hpB`Do0 zlGG}a)GCtHDw5P=iX`>mz80F!>Y=rwf1anJ{@+RUUFQm*#Qy8~%a^;h|M&A3uU7j1 zWjvMi|9tg%WU@#i!O8}#x^DmM*B|i5yVhCz^yF`?chji%{f*SJxZ;97n0?_YF3Iky zg6`zx2K~9cmL!$5OQcV5NL9#+LzBt(0%z!u^_ zB*%W|HpY(4IkB>ETD_XSve-x?TE}LziYhlFjSL6on<*Z&(V84lY1^nGW)%GWIWy@j z31xrm*u4$Nj7i|&dU5@Aw*k?&Xkp`^4hV({N;IVvF;H1wiw8Ep@e}+xp8qxM|EF{Q z{Y$C+$E)p^cKn~`yE`lU|D`q|GsUzY?|MgJF9EI~ zXH}G$3~M*$wW14h3lKkNy$;}M})Q-NJ z46;Es&XRui-)S!bI?*Sa0&v@y1b0bjl}}mkifDI|=fg%Ri@@F|ur=w5v+81{p6JpJZHUWXu`+%}Z%usHGt?z?Y=qx=rbwixsm5LGBQ(K|dK? z!v2F%M8k_HA(tqWgZ_Hjj<}N@Owb@rdnxir(Gj=|ou}P|VI8@_kE=S|zaSo=D`$23YK3!e%Fh>fepoe+gu6fW-y-VJc!?o5^ zB0AMglM@lMSA|g5c7-+@mN%n8)t(BJE7ACBx>8rc+?!lq-wUd=yWtL0sLqz&Up40olO-Xw@m$5*T8lT`yKNv z;h)(FlrwavD;p%kK%SZm{; zm`p;ydO1ZXX@&VZ&trMFNbXtR!X@5XhvC5wW0|+s6`btj)JqMK9jdLg%4x+Y{wPPf z+<<#Ec3Puhxgy`3oM&X{wM;UNuo>CP7Q{Ern_VjBlK$YFTJXr>mzjia6%QNd&X@~< z4iRz)Pu9PEV>e@70<#k27od>`RJ^bcn_Qp^ksuloZx%wK15gJPMKeHo)ZKE*h;r3- zjWw;(K^ePeG|1-O_+5EjY%Z$Sp&(NH@L|f>8D@mez$l9=Z6e*UtQ&%Jfx4xqh`bhW z>qkS`DMs3~`wBRJy%l#*+CDnse9plWga*v1DKy4;()|?68Vt6ssx2x-*?7$ehv?UO zej}@HqOudLkH76E1JF9*RUUL0kseeQ6)I5K7XZ}BK(nDW$JkO{ZexQNc%$@|8J^{$ zqCJ)C*qCldzRruTy@_Ud*n#%T;oqY6&!;DUjba$#npl{Jjs&tY&i#Wub+2)!>7y+E z`%d$fZU6CV`{m01V;N7e{l^Dbc05?wOS~;OrwcK8*usSX@znWdp@qmQG`vAgKO7#N zP8AALRdnu&;S9q6Je*B$Fz_DP=8DJ}?9lglLsGOj6g53=e7voQq+P9mXf@WO%|#at zRbwrBP0hv^jCY_0;vDsUbl}P+#2=!S8&&m&BFm`;Zn%ch(~euK|MaVHw_R^LQY zh!@Siaolw1UQ1oYcT2FDa~XzfT6)za|O{Bo8;kJkQP4wl6D`!4_R#FmpYEB-jIv@MCH()+iI@^83@CfIX+%Flmc$uPD0uk8GP z`Fz`s|NH#q%a#AvQl3iZzeItR4_KvR|ES$M1%gpm!DrT+`e=8krSD|dtBK{U=&0{8 za$v-@Bbspn4EA2X=84-o$}B3ml>K(#=(!w@?oC}t#h_=p3%wnttSms8UU#~XVs7t# z&OpIb<^o;l{{dD|jp$o3b7*+qOGV>g8uJXAU<~8`f;l9pNRp4XQUFm;;Ok3R{E+faYS9rNSjg3xj0< zDUGc9V9n+KG;$5=WTKc!T4FM=pco$kQllBy@B;Nr{CNGs5Q16}D`bZq_0l6utY{%r zQ^M&+S%5&Z^1<=5MO@Upf ze33SnB&2_-D2OZPDPcn@Ws6!Oy2&a(v=sIAKIQU1P~&8@HA5dD}H*Vx>spr`-Fajz2sJFa-QA0fLfD1`ysNtrtv1i-ZCf zMd1BeBNPgHhNnHolcaakMvoB@&gzA)QQ==07LBF|k`#y^v*=qr^@{Ipzvk~$7u02> zg;QM~lx|{eX^t`)UNb>kMphU$B6RI4_vjO-<79PZn|A}-4JA8WB%rQ8S`bcjMA+L0 zc)yQMV+l4`L~WeL_<4hU4QAIZA4dWBrZ0sRbmAN3#wx(yI~AU%jp(#>_Urq0=Pd-{ z{-M?R_4w@Qr{mVUMiigQ@DM`a_f3+NEj-<{4F^|rZWZ6m7%HCCVlc)uP*@(VCJM&7 z?O<|8=LLpQ8L(Y4V1h*-eQ%y}UV)_s|Ir^P zI15ZNo{g=|%T2h;)!yTIhA~qb`dDs8!}A2pAM-2GvJN)Ypr9_z&FCYWBQ288Xn31( z+wSl3H2n_eOKY4pU_-{9;~_iyK8acECTuc>7twikiKX%gXY!OCn~msdc$eO$;Op~U zE-W=uib?|o*i>U|nDZ0^G7U%LwAbLhV7!?e*$irTGiu$Y*e3?gxuZz;4E~YKLJ2WU zGJJ=iQHU8RiR;u&`rQfaIo<;l5phNML`6HFaXr$ci&&wrHv0-(!%oy64sRGVKZZIlS6vL|e$Vf0U8vlK`baTE8m7G49_7D1ur%Tsnaw7myj~a+ETR$j2SV>Ri)^7)anu z3Tq&I{MInDJ!&gBYl$(DY_8!8}I2H_yurp@hVlg%p*Y zVNWAfx)BKy4;1yO2rXc~6jsEfU#*yC+?$Ead;ide%xOFyxVcR7#b~$$&8ojBql-H<*C429RV?O1}p#>SzaKlKM@{wi$^Ba)(C&J5J!p zVgE4JF1x&fAMmfXw=MLPZxmK<$01rKC*|+k|7d7fvu4-|7(1VX)Pdle``U(tpabkU zW8)p6*SST=V-Hvbo$#@C;9s{Jh5_}u(dRZXr`DLwz*spHI#3F9j<#A+>fE%apqMqh zY{tGdqc`l|JsaI2icJ=@B(1R871lZnuC;FtXi?d_*_OMk7hF?sFLhR1Uu$^CI#;&6 zXRPR&QS^6*f|;u?TX|DdP_BJu7W?9ZOU~?`zN^+k?bDW%wR}T0_RXF)a<@@yi+P6k z#ZQw29b(|vn?SV5KFNvjOb*)_(f4czyw-O}6-sv1uYleT5S2-rR&z$$cGX`i*!%7@ z{i$hzfw?gEds;_NpSqkyhC#m^yeiwz=JIO$sGwkYKdZlj_(XioUDg}h#|IO))uvW0 z>-$ZIc0(Vn+H{gtW34M~-k!zO9mHDYhTg8W4k0rD&eLoIPlE%ogC3!<$v7IgbLxOZ zJI+1Qg^1X?#@3eR!(1$FC|kTEjl3a;>DxDNj3PTeYNItHHL1omORV@yBP5S@M+F=B zhQdSlhG`B8G^sL(lrXA~BF_eB>&vwTN&hanhgj25`magS2mN1@B2aT}Y#xp8hFoQF z4R;W5vxafQhota8?NUSU0-{cf#;A1H8)|JD*?eYcd{6bNcc%Bj#rZBw^mBO&9~)MG=q>~3@@A%x zQc-Tg&~HWJQVmH-tn^;wlV*aPUKj*>xvFq?2D>GC5S*FGi8K`_65vw|0JJ&B;hGa< z6?Ql$YA`k`G2*lq{Vxl{-oOt3U%)r~6K?0S0bM0>R^>uwpMWcP69)Ejds;qfK^%!> zM%0~F2ktJ7TX~-3S~0PzzJ1O9$e0YHk1G6@T%A(JOO}+NGak&(uxOka!}KP%D3Etg z(0^zejY6+q+vojP$=iGtJdL#48p|lFDm49#zBdgSq`~3kki78`OMYBUMsQ=S zVXSk6=FrZLc5a#&R0fsXLxVSI@i^R!V#vfY)232gY)fwdyn6-e_8NGr_&!QLXJ7(? z4kNualWc1T#GVJ7a9nczU@4j?Don>q-gMu?IiSzrmwA)n5YerGWX(UTRQG_ydwWH& z3#&X1f?bo&6;NMjO)9U@{1I1#j7~dh&zfF-e6}o8kmxCI+F2!6mGpm<<#&xBh~TsZU_7I+Sz;ZCxcxPG2;F0go|W zE&Un@RCcb8fu;ox)!XsZ({R~|xMJNjH0xY7)VgbEdM+E9(_IOm$K7z0U1ne)FSGD% zVEE^3uyLJU4%>HR<5$DL zTVKLa)s~5J=6hXndULPMDrMYTYp6-3tR|Imkm#948qrz%^yK)bDCQvmDe;Ig@$!n9 zN7|t4VMlGk6$0*^gir}+U+5fWXRP9~jiK6XkEVYOD0HzQz;xG&Fl3Pt3c=FUcH znn`e~qVNkj#KiFY17a6 zu|egZvEkS$gkxvUaQLy3msglcPFnhBE2DVn1(ZIO#!XZMPkGB!X!_Q7Jgx88w_T_m z6j5!!eLI9$_yK#*I-mHL*fRiM3p<4^I6zju0`?MoxjTvSe`~?VNyjL?W*Z7T zS)Aq=<==6qO_vc+y*h&1v7wP)*_=z~T6EjG7HtOZMd5L;{6GVXc40&hpFWM`uN~L; z(X9`Uet76ghiKnC5dNP1!@W{OAPj~^G$G$Q+=7L%28LR5tj#rfppD2u@fw_)+*6!! z@E2og>+Jc?^TNK6L%U~56;_pA>yOfWQ1Wu52n~f0Yko9>XDaF|Yc(PSKArI#0(UupMq(zRCFP1y{7@Vi?DFIzSKV z9-ZUZt9$6_4@lLbQU?&Q2n&4`c8X>Q9%pro?y448R@KhNLx=Y`z4Y=R`ok@q?0MSr4D#RqF4pU?$Jf;UzNamp zeS1-R8bp-<@id^|fbQL+Sz{sP0m1(-*j7pgcxS(a zYx+q&JVA;LPqj&$*D*T75eg5`A8RgmD$S*rNYtH6_pP^BiBE&#dQ2e+6`{6hB%X~8 zS<5Y8!lm00njpPBY`^_E-rU>_8HE&RO7zb=>a+2k%NcXYw`^&Myy=zU+1fHn1|Z{E z#afhbcM%VSQfqOv{^9WK=xy;TbXv#nw5#)nNP$rrF6^NL*R7tpJeA`=(mzw>04d4; z(QIzp`G47ecUJKqm+{nz|5!8f<0|j3m!$H4ri$LE)vXm}uq=k_!BmHX2F*jG@#>lK zDaW0EO_Cm18Fi-)0bM`-^YiBR^Hu!kWjuA(f7%ex#pnO?=BpRG=K4S1-r0GzI{%mP zR67493QQLQdX*l`JU;*5uZQnW(G6@Kft{o<*uyi?P8DJs$TB`F2T-+pNl%LX5lCr@tZm74cCiz_}L0}s7gSE zH+uG^8G|Lv8YtmzG-T&UI7Y&v;v*Q>UecTEf?y>bJYmCGYWO1UY?_Ac zi{>$;xA0H6D})JVh5zY~D)7&s>tWDf#kGhH2M@5rIfdGEtz~^}{!_GRG%9e^xNj)5 z4TC{6jN%rYg}20bN$lLO`uB(ax{3W-J(XA6iFtQ=H3R1?REw+J4;NqH*w04Tra=v_ z=nim}hJ7XhCRV}qtbgO}nUhmyDHhtj`cD@av8glvC&2B0hJ#4ZfAOCx(Gy&UBFQd% zZJs|8@Rjq=*XaDS2v3ZaM^SP8l}FKheOuvqIL{yJ%DKAVPANxSYS=BiUb*os*NvwP z9I)M)+{_1{8sHfCumJBOdDiO=MtB%}wO&TFr?J!Ta!;pP79gy&@;#azjz6vM(I`ct z>f!?kKeQ9~d>$>XjKhJ0=7`$5OV==|qaZ=-VBx#3-lF*p2F)&RhBpL=N7$Pg;^s0T z{$gzt%cye!3$oPV%?0A6qR^MG(2=je*Nz5Dyx=^X?e4DN<}HrCF+1SrT&c=LvT`Ov z^ZNA&lFj9*Oqb4jXMZ~b8F9>Tu?%ys(E3mN=%HnH(eQY@(UuM?$FXu?k)DY8r$l`r zzbvnXzaJ(MaG5tnsWI93vg^q;xxwT_yCU=#$LL#|)syd|i${A;ICT|eTCS58gC9d*dNYEGU)HC%+Ia{sB| z@xwQq?(oB373%rxyMWf96!3)oSLe}hVAuOQ{^C6fkWUxemYch|2mapR` zasgVfH#wrQXM$>a%g@!x8lJk&T~j()PwimsKgw!O+B|)s;hEBzYf4|}sr{fmyQxSc z<7ZbJ(YI3Tc?}7lZ6g5v39_yx%gR5|WJSGP@((6`pk)yI-p_AMbUfoRl3|`($kh#>eAYV)dT}skD z6!&`9sgQ^;39{fCqi#RR^Y4TAgGXcE?cmW^<2#SWB6%_Ui?uc`Wd(mA=W?DJx!JH@ zlwI?=Ofyt;*i+xv@}_6F1GM0J8Vx7vg4Vcp?jlArjOCa72%b;)YaEl8Ux=d~NB$Lh1k}_OJu*p4;vB4*7J7Y`6`* zc3(NA?D!_8&6*cv2R?dT*@ms!Jm71WcatE`ZJyd%ojTUnxv!qIxIl( z`QLo`s%iOu@4S4$UaijmB|MeRf4=e&u6)E1q7Db}V#NXQgYx6i*-`uC^sICCfgO^E z@7a0TVkPS_0R@dL*k4$CBj`fFTX@b6K)RbTFfCmWHudHw5RVt^@fEK)7Keob~- zP(%J@<{KneWSN=nM&f9vpAKBTm-+p2e6^>rTBIK19q^k41EFJ&GQOd04C&z05F3MQ zE0h-JHN((&yw*Ta;~Vw|l}JZ1FWQJMz^<6gFXC;kc>iKRh2BsiHEFyS8;dKT7);gEqw6#s!wI35$<$+qoQtqyWqN4X9d3Fp4oUSb z%b*Psx>%3HSCQo7!sZvi%zZ%ea@)~H)SFyi-$!OHJM8$v_1M+0vU`gn+B1%6J8-6tG>~w+CJq)C;Vae468D&qN82Ny4*d z8mX(~Gwr(#7<`S5}<-X>_A37^9_{tz7bbw_r^@Ui$!(nfsZphV3L##{635BP;3s9)B%Nq^GU}g6}*c9SS4IXk&3YW z%MNOQfFoYP^v_rKBI$iM%Mza&3HHN;PK z&fbi&Ted8(^$49B2fc2v#;(SM)=|nLjMuwOyP#R1AHehNIVj(7cfmn);Ov1n8c2pb zg;43sVhBc&c2{=GWaXF{F~zbcdEd~HTx*O|9`o?(|lpu|7}0tUfusM zM8F2S8?B+oqKc)!r8Q!{#tFv>JNl%ps(2&s@|1-^*W#}8eNS!# zo%8!ndXs1U;h-d#Ia{4RM11dMuuO9a8Ncwb=WKo7QKU%DF{8^CDmJFmyjM`Nzr~J@ zSw9fRunoaSN!M;eFs=4K96i*~Y$R%t67{;hRfw^7Q* zp53NQvbjzB>svMhZ!7~FpcIBnw5o-E?V=IQrM;Udg@RHekid7LdWDnMjWo!IBw-bS zjbuMgTqBilnP@pW9#RHnb^vfJ5iY&#sJ1`3U85$1{QpeNis85=+A&BRxPqa?F_>JZ zqpaKMXV>gd-P3CxfFk2G2hJkAC;(9Z~{i(jmJ0Ew`s*YQ;+(~#ls**{!IOkzXQ9+eUSFWC@{f+CXzD;-0t zq_8M+k>oW@=SUj>nqlSfYL3a{`&Srz0{W}sjA;7Hg+tXFgSA1Q-1HI^iH#9lR|#$O zw-?w2o_Ic1&HepA)u+<8+|#-fu*X%Mg|?;s(-Tn5-E-Yg0DYT4WMOrWtvoTR>Mnq6 z?l5?{S?btj4|Mm z7HsSIq}@4UrO|1z^{(^d$!Vwk^U;~<)Yv}!snh=3hnA`rdtm^@-C`Ew%*=nb+;zat zHL(GcvCVnD&py0AYWpS{JJTjsNKg6FXT%tOz0?m_r6X8UA;pY_V+=C05@fzgL5BB~ zPtM_w4v(Lcj%o$YiJa=J7oU9V++L1G$^D+(C)3yrDGo~QwuA&Rk(XT6m51Thaln@AU-N&han&$-+( zxwy!>8E_yxj{$Ev?U{@{hE33>pI>7_4uoVf9!3%$k)4NE*SNCyenP>F*#A?;1JK2a z#vO##Gmr?g73!V{guW4Zq76bBZBEQUQeqIEC}GF1spOhxu*$eaUQgfk@A=oB8A4Vd znwH(-G96PQka*q9Z=rX^4!G89);Mdkw~;3o>G)p%e0VX&IJYAT3zcXS7@gnyIU593 z=BpqB{Nx_u?1O0y$)!D3K=0>#$Z&!C6i``|lsBWJ0e$Nx5JMGOM$P2i5Jc{Cv@>8^ zc7*!(O#=s6(WH-L1at(T6lb%@XLcuw;l64(O4n?Z%8_wI$q_PYq!C5?Vie+HsJEXD z+;KMG)t~`#gPNwhB&P`+G-wfFLhdm20N)5#34;%>>nWgc@>%al+G&-K4mQK}@D^4o zPp^{!!~a|WYTiVkK;kq^8H{_VQt4dBENYI z8_==iSQeK=f?>g6r@?7G4~!eiso~I&;zy@2QT(wHwK#F1IFe3Y22>=a-A_E&b*@Ld zuA~erj_>2c}~d1jBBUzz;+fkGILj<_zjz}pHYN) z_wdN07-NyEU?o(IA;KV42a?V5XhxN^ zM4<@B>L}5BpF6F`XQ~*B{2Zpm)abrVYAJp;+J{fQ40A zrig9#_#x+`sTqfkB9U_=$qLPR&X8C zwW5?_yvMr)+lv$B0*oCy9@4cS6|>d~_E?AdD(0o#kz!R1CY!6KRvB}ry3n-g?wEK< z?Tsq_?3poG!@>$ptHkFl?|=<*1#2xGBHof|*#49k(Fti?BW*sj(YJ#M<4L$#wZ}Ny zrn&1>am@#wyc^;}=C2l+8!NTGXpX zqZXvYB2b?2-MmbfI@AbiK6NW4*h&fJQ-XQNRneQSv~D=8!q!${MPu@1@7}j27^ZQ+ zdZ-FNeo=Wwd(`xKd5T^yzQa%r=_#&LPDIF8lv5eYIm%aZD(zTZl~_OzRy;`4Rsrsq zvAF3ACk`L}ujTqC2cc)2Hi~GzbeaQ*QN)BJHh-E$sf4yR(MD8M9#)zw&7`N3YD>1F zx9EWH<=^0&n&&vIdMx(vvX+2}Upn3y0v44(wzjIwc&(Z>hC6e^+vLt9XO}goJD9+G zBqw@%TnDTFPI5fVH@L{3U7&6Syt9Uk2k4Fs@#?QvV6UQFpJ;1?-#~9N0`-zq#PKyt z`Vl!Epri>>qTU=Bsj^Ktz9O9w-nIkS;~{&GJ~`KrCkwQG+?HW8Iva|-p~fhv8vtQQ z7Osg%>~xt8Fy#Sj6kYg+puGZqg*3ux(j^U}p+_V2XB(to5QMwq3B#^?1~B{2AWgxl z;ympppjeZJn^*$-vcbm}(tlwS6#n((Ts-k?PZhO59mWXu= z3Fl!o#%ZEl(YziY;VhSu&X^=)t)VDThuQ$8!hd8JL95-?Zy#ExM{qTI_`cIRet&rS zQ>*jC-#V=iXGiZ(j`eZ0C|oqG3AiF9ltC;Tf0yHG$yJp$t3Wl4r8s(WR%9cAFh#dT3_17eq%wcFr~tue(? zr99PU*VWF(nZ-^C>ondpBt=WvNXx1&H{hOy?oF+DN{)G1i4OSh?i~MvOu0;E%f=$( ziy%_+ErqCwwD`5isUMz z(h^pVed{q=Fl28p*l7g@q~dQ@I8DYdU*U8w>SkTvi$+&5-Bmh!u9&;>qodML6=&3w z&(i^@tDd@7q@f<9LWsMwR?K|(t%yBF-o}#U@u})mB67UVv~~HkB61asqsQ3Ao;w6c z6BWE#De&GWzUYYOrImM?nYhX{oQaXo5j$SpWBzjZn+jyX&`4hD+MWG4839LxHM6mC z0Zfy&Aqlp{!NG&JN?^cUWm%?t>TNxEzRY@TS=6Nb5MyK}crtm8w;V2=8HatF4JWyZ z>z55~CY-U#(=q6f;W9|$cRZ?g(_E+F*A+CBFnnOFAKkB;Euv$#@y0gu7P)5tKnr+T z(B9G>1^&|jajs7Ny-w0{jn*q3Y9f~3JW$ZQCnF<<&_ajiiYz*@23xq9RYM|KLwzNMpkrZXU$$yG0w%7b)qw6iqBX~DkZk)jU_ZFAfz9#hrUtr(#YMv@ zkgw=8cW#vVfy7ScW+QOZZJX)XrzF~(u|nwPVHeg5{>Z54r|XmrU0r;?)(glpi+9e? zBTC%E@s=NZpH*RW5itlX8T>LrI!gIX3TipV$tPh1ga&X!?Ml>b1?o!_vF1V6ij~hl zA}h4Met?JWM+#M7H>s9BdZy_x^r1&RV~HVq0HPw?PWGSc2c6*i2ey=4M;DyQ8m>iD5iW}^B5{OTJpl9qa==)+TK_JWo_B@4Ii?MoiIiuuD~c+9lPKr#wPg-#t+aK5K_c5L z%Ndca%xNz=zYBzDc}=l~q4XFGO1c%GeCu(<#a*4kHw@+P2vpHDzqJjJK}Go-Gq-^Jsz?uZy9rt(95bNghwF0N|M){?_Zl z{Nl3$SPkcEgZ9NU+n$Wn{z(TM!&r0@#l%Gs8|F9_rpy21pcf-eH$!lY%<$repJPCa z0!cLv(KO&RGP#?_?(+$+`YnUIAq*8bpRw`2R*!Y`~=9Wh4Dq$fn}s1Rm%hg2yeEQ zn!W@~7IayS3c6+rW`r;(qgi%g^e+3-J5)+v0?U3wTT#3A)5y1kDoX_L+NfsG2FXSC zIVh0=8Y06wLnr1uD48!L8Cty^8P;wf4%{W99xKsh95yZVLs-BWmcam_=GaQ}SY)(E z7sepk5YEc`OX=Hl!x|Dd`T~a;(p$~wUo-I086=qS`CeKA;1q7Ao1iWfXTC;W<>e6c zmrAL?>Lx*uJo;v6UC1tIvo30Ya4snL_z{>WT35PNRZ4tE7#_EP&C=LW$}ZFQ5{g7L zkEWw@Msfp&Z19P+T}5VyRLaz8S1}!=dMNT11@EbDmsv7~IwpKnD{Q>CGMt->;T%je z+MG2^i!OP&Tkc=g@LIOj3K{RQA}Erf2sa9^*`vKklqxnTGXyG>x9heJzY7HL!W$5H zs3m#B%Y($u_fpPOLc1Dh+mTkWty7A*=Jf3ESDDqa)lq$x%ZY5j7$z7b78Tp4RM;5k zqL=_#n3PVjAR#%;uY@pXUJbX7phhvY1#@u0PNzId&WE?;U@P{uasuWu85iLwiF{y| zgqs%V$56nlXZX!njn1t-sZz%)-W!_U03hatA-3Cy*8MHp2&86pkuu>_(x56O|D-XQ zCLoKruCGHMDx|r1T8EmWmk3(sYP>1Mg=6?BnQ+q0e`|Xr26*?JQ4vZcLAB{FNAd8> z3n9ZS8Hb5aDDyh`9pHFx3+K8AD5q9M4uJ-vodCP z8H}z5OPSS0WZy$9>#%jht7rYXMAep|KNgU{RAMz`9HRIn>)L9{*RsJ?kfMs zGM-BLKlsW|nE>R)DglU1^xn1Jx7w{~6M$&77n~Ri(Y0SG}|uBU1%+tSyQ!W=EBf}+f(Cw)uu5tY}iX*J^k|2sBa^% zu!+7L3`c2aG5~#Z+^;CoKJD8Wj@Hz*5xZPa+SOC}sUiQN)5{d;AIs#wS8o2t7cX~L^50UPO7b7MN3BG^d5C^*Pkud~I`yNf z{AdI}nLEw4M3m875qmmUX`dbVB8scqj^<%R=D0=z15YssN}c1?E6E}v_=TIyt>NB( z1#%*1;)tFKNQ^O>{%gVnM=uoS1)m41XdFt`tVI~1_A|I4i*MJAEBBCG?p+Gw;`m?* z3p2y;aj0`!8xxSGy)Zj9LEGfbLQA(hl@{b=6x=rR)S>9B{tzk@*1e`d!F5|{PQC`s ziAyI8j3ttxl`?fF_&&C)$^A7P`6zNU)^#Tod3!k0f*L`+HKclD_Rj^lnvfs19n`v# zx`cP?=u8%^jxbG@OLY>;=_D0tMA8&f&fGvs2FNF4<$DY%FtFp!g4GykqpQxUF2wdp z!AIBicUB~{GfFRDsd;?A;GMEUH!i3WS~!>jII!PDRGK>@QE!qB2_8Q zJbR|mrAmkqq>>I8A#b^{X3tg-VA%ldG3kwzO!LsP@SpLiqyG_kf6s@XYpH=s^gqvE zz1XqzKQEgvU#;{%%Xlj3e~4oe`M%lm%RpsQngr~w^g<39{Q2npyVKTj=ZBNurdAKx zZ9Ez+(SpnabdvPA1>8TmaH(5Q2q{rpyO2E2lEGU#SUVdnQmB|Gfh+V8`;M#n7A`S^2zk`VO+}+Mv6{~LRCC6cG^AziqHRA z_kTB27=Qky{Qi&qpMC%L;?;`(Tgp?>{xiKnE@;K>&F>oU!{4UA1>|-A@a!F1iIwT+ z>H^~rk`4_kr=M>aGGV$HepzyJA6Kv@i#+3Ar0oC=8(; z^THn-k?d+U(A;pe%VOuN^R1zJonG$Y?#n{#@qma6uwt#Rd#`+B64igI`;10T49>y` z$bRffCgY(gWQI}8SX8!%nggPk5;LTwyo74-UA-1njgTLXQ(}OlfnO47P|8pOne3Q` z^1VO)U`>nO8Hh^I&bBzL`y-$#wI$&~V$z=vG2zD0kBx=|HWDKrvwO}~^WPPv=eS8s ztmg^^Q{C{D7T)S=F7%aEZ7TSml_UtinUHU$sGySh|{*O{fG&jW!Q1SWyd}sHCegCt&y|c4A z|CjMpI{$Iyr#$svtxkP=JD;|GIr%ts^bf5z>wM7dPZ;Ukn~sk^C}=_^k;_Fp%A9)( z3HJpfbi9=ZVLr47qePoj;=3hYQc>5B;F`+I8dQ&@S^0YF0WY&2kfHiBT~w9U4F^e` z{+>l|Rerad-`XmK%bQ%qpK`?AsG*(tcm$XnbTH0zeJ`P@nL~q|5Hv#P5Z3sn@%u?^BDhV?XS^TNqF(tX#^=x-K`hAX@NC4;8-O|=5 z#dAJNlTTrfEgk*Hx$G{<$)}2^LdM1wmX&sHPVfB96TGd4uJS|zH}S%3W?D-JK3|fq zMZ+$mfov8ww6q^u9!+}^&52aal;Np88UaBk?RUJFmeDf@Gu`|a1%b|u(}j)BqV=9E z7i?NkV8I!%Q^Z5Q`SFk^ss1jP{ZSZX$U1+QLNai~I}AbqnN-yLK;#2AoeJyn_@v!> zEwYeYX9FiCI6E|&n2ThUErYMSD6imc{W)hNb_`zvg>f5Md$G=@d*by=iN_}n@FM48@HMUrHd_E1D>y{HMbEwT|L$9 zQ&%E7W0D7NwAY^gSQ&RFRh?(g!rhc9;|iTIJY0qg$3HfU{57UwfytBy1^y6P_@+@` z`U(>oT6AAkp~3MivTGU?P$D=gx0(t(#fda#Y)a!aOnrvYZb*^k*}=2wsI(ckr!Cj4 z`;m~5j|}+7m|$7D8RWX|9C>=3bW3_*eEL5G%xO0 zD>xPkS^ri|xA$yfB{1QnJw*0?QxC%NMPp$~bv+(g5=pAb6+y&eVuege&4)fC>F894 zs#H;H*>$j^=q?*y5mC*fZl6)5k)Xwn+Ev_Ck~HZBJ|J1TFmo8Bt0M6G$$*<}F;bXt zLXUrvlN^Wx;*!zV7TyLx%4Zlks)|5sLG8E#93Ug&A91w8Bz#{3X@5Uzx}sl^2xd05 zFR@+sPBqoSQg{8WM<7M%#%Qyu(n=yO)-LeRGXPW3OM`TG7R@9AHhs2}U`$kazBq5Z zO0j8Y%T_^GoVG>JRu!#UjcIc(k$ii+%a&*~)2Yd3Md(jCUo5mP;uj}SHlR@-+*hA$`NFoTsjpFcy9a7 zt=|MmyQ#1&>L^5Vppu@|UDv9aJJ?^_gQiUKY!+P8+R7{%5GF@cw~}==+BMDzy_&5k zgr_162IMnonswF)OsZul>`a$(d-?VAKB7Rk@seAS4 zT?=%pzC!xYOrVC7u?H$Od^xno<*%o?=sdK4SJ_i1|96&;lR-D_{A-eq>O_Jp_W#>` zxxH)We|x#RyYl~A%2O@=BVYL_{xleXE6n(c9T(&7X0#R|GOTjL%_lAR(OLWO_-(86 z|9)+qP8}Z7)5@a_4&e2;d&kkOjTf4Vg`JF##xgOuL5z5;t3a$qy**V?^D5#BP#K!f z+jvYzSM;etkig;8$&9Q;*E}K7C*+>!d#o4x-C|OT3MM)d8mGzJ)?Y!jWsf{;!wWBUV%znoVNRR)0ta{pHctmW+e75G6AB1T zM@^Q&VYR)g6uc!eJ8uA(Yqnev0s(D7Z5YI(`ngJzn^>6d$WUvItR2b~C})-B3;0S^WjboMb{>O!90Dx= z{Kimhl7@`sRg!no0bI_hw#%$I2$lBsJ-FuEY3634Eu4>W@))Ok-cLKCM4)3x%EW7_ z!#P7^Y`p!$B@vLIeWqTOE*M8xBN>BAmz5TS;7Oj)wMDOlSBdQZ(ar}nClp7K%|Vhg z2pMBfF!)B%!Svc}EMPXu4ZoS(*w50D-UYa~f%gO%qK;B_cyw9G^ZSShqdV_m+G4Ew z_Yo0~!Q?s}W!+9cyUv*8Y%Ie8?D@}YvAMBchqs__VfhikPV6kd^4>lf3blYWj{%p= zws+uU&{CN0`t6Wz%Pk=;ww%4BDQ~SU#Z_SqG)JM+%pyPQ^1Ye3zI?&_vG>Jn()A?n zN^@5${Z!ek33u3Lqjr^@K*rCTCZ~COtc(X2I1*gzS-^;65YzNVT));?etq`dSlLA- zyQ48#<~yMtGT*i>uU{kRf%(SPG|CSjWPUaJFd5|8<$!FI_4C|THW!Nf2!;OFa} z&>noiC{Ts5zgNK(9(QmB6kb4A06Jqc*?$Cj<5DK zbmW&tZ~P1;Qq8zLCPZ-r2o3#ZUG}CSsI^!0^+$QA7~BDxkKsR7KnIe%!&?gC@KWuy zO)fAS^7iA(1f?^($!Ns*Tri*MqTQry*dBkNgy;R6f;yU3!?t-#KI^`psu4{TpCR=WdIW(7 zwpc@QOI%)J+-dXT3Udx}$t+5b%gS#vSq!Z%h+MkriZIziA#cz6u84XA9Kua1cfhwX zeyWkBnOjIAi59lVQh3hSaN?zeEW31?aWOygoHp)+YQi^I`VK#V{0i2;ToH{X`i=*# zoWXB`#|vG{N`PbCjHzM5W>1oTqTm5?kqvzQQeWKrbPvWb@%>^l0^I@W8!7&UQcE&? z8NxIqj1J!ax8WdX3|kQP&48}u=~FNGpj{x!Gnx!A`L}GSSckH-2}^oCW5xg(lW_uU zG2sJ{EvKS~vS}$KEVZXG62p2dD$sR#)jx2Fi>r0d30O9W4u5#hmXRb~Q|zTQdS$JSbC`t+VgDO-q~)#>xwDeHu_JT?O- zlAkz-0ksi@2z3bfG8fM(TM&O}+P((a2E!|PFeUwb7~R2%b)JgqK0SH;T{-=Z4AOXb zxcjDwRz(g?vEdjJK>Wk^?bhk>Vf*M~EBe?vJv%x%X1G4d(+CvIVEi;rlO9YPpd%Uo z5__e$ax{+e6hdIIEe+F|-05)11%mHn|j$Fo+o|P`xb%+J#b!;5J^L3>6wpfqQ;RpBZ(OIYnfadmD`}^y~Eoj z#F{QcvP+5?aL0I^tKpsO9o=Ju`&RFpPWSZ!^wX<_4H9782CytVbaHEmm4i>D;iQx#g`tm)IIGmsL`lo*4x~7}&{vxA~ zN;+wy+qs#TVhE|HEV0Fd3^ebkkxzaohrL{=F8KoELD3!;u`dy&~!(B-Kv8;RX8SZT5 zOHnqsd8~4-WGG6Q=6UtSWcXVH$7rRP5j1%|t^8jatl@zYycxUdxb9)JeR(2G#)okzFXCjN_Be+uwd`Han*u58waV>YTQI zY@N1_-?q+lCBmr)Rt<4?o;}-sPO1c@VI;*ZdC~kLQUQg5i=Ik_%6=Ru!r8uINIf7` zu=~+)Q~WRmLv#38(0pZiml9Wtnk-#^PX2H5Md;$*g`xar#SO8h1NP;Oi{{)`(m!bj z_IztZ(rYH8bAqvH%c6<=$G^URzxG6_38l4)ZmA*$AXJ>O*WOqTSlSw!4Z~$|hwG@! zv%ue;yWzEl5orQu=kD;QF$W4x8C>%wS)P~nY6_BdX}-cIF5s|(b*zIhWOd0OZSNVYC~8}=P!0q35I_!4~|ZEGim zY~dNi74oTBb@~#x{dQG<6eUOpdM|Pu7yJ>X-LV-BxvIb#L3KQBSDZGtTX;b4OVI#8 z_d3bxl8Q?(z71tINMKPM;nZnFS8l*6em0vZ|MKDB}zk)cj zJoXt~C^Tf`SidU0(v}NZ8G(y0X20N6dyoC6n}C^syulZZO-3?qKEG&ZOd{i#kZgnB zaL+Qd@D3Y8t6|$B5;eqpqd@%PK=QYu=)OMKe@NwZ_zbLW0#%m;!Q4XU~dcDe)BB3ItXU!W;d=XDy&V1^ap*^+^H7*FH{! zWr5Avzy5$8B_M?&e_TT^Z?|tj3F-4xP=ikZnBk6Cdv&seaAJP>Z`cNg^{zOTCxG?+q7Gsh^ z8qE9#m`{jv#C37GPPaKmdgjnOXzMOG`Y@5^zFJ-^&E!|}^N_qG9{&(!T4mtz8G3+K zF%NiR8cpOe2djUNp;v+9Uel{^^WLze)i^kLfN)1T9Z**6I@nKA1$2uK>ILwu$H zKl#~52#~4N6+TasiC;&`vnzP^+rR&90nfIzyIcLL8~>Q#sStC{?6na&_ne4c0Tr05 z=nCsojJ;pvGwF$mRy`sbdLAKDDwl+o(BupZrmXDh%7{4#1+>~z*pV;7d_43#xLLVp zBCNPq3Pi8{E*Vr&^v3mCW4C9ZPV>_a*PUg2U7){ojjxochjW?{$6q$`T1`T7V|%b3 z0g(*%LKmt9h6ZYDirfS=f$a3fyvlIq+VLMvf`%Iwi)yKzp1#+;M0M4Y^j{0h@7Crgn%Z zvdt2(H^?eTH3kyB#~5f`LcBcJ3A*MXKk+$znP->nu){4wYj0I>zLIxu8N z2MyQ6f!_cOu&Ar^kr-9sN=6xpU&|;eGUtV|Shc#*x)NnD%K=s2IH23C>WP~}mdzf3 z2SXjw2Kh%6Lt4Z3Rojf))onF7Xlm`?>N&i84v-ZbDezi>a2?c%d&~c&F zs^o4X9<0^Q1IMa(=92w+I$b#Yfk+Ed zFgUkipgDyVe2W3cmuUbc@XbH#(}aDbQJa6&wNBoq#iT7(#oky>rLr!zUpcnK!V%UA6hB1#HU>U$1UT9*>r8~Uzz@IXLsktOI!cfY&KW=zhyj?^naA& zQ=-61-&aZBM;9l8u$ zN3g!}-1@57X8ePIbmL(0pnAH$F(oQt&0;|9VxJb*<=HbwnywA8azzWMCsd@CFi09e zY(X9XrU0+(0hP1JTkHMxt%h$bvcPD4E5JvCzFu^1#w}dbErs?{i$%q+E*Pl;Em1L* z5)AI^*H&@miYV0P5>_2VM^UcFmg9{V(Gk5!v5wkz|FNR6P*KFz^{%&HHytSJiNoU! zzhkM#xme7~-qh*M(Or7;f=vg2t}~{uo0`^C(|dlYdrrw9#iCt9FFfQHZ>RI8x;Mc~14!Q#tRIEbr1N|ypNpXRY<^;7O z+$ce4PUz=cfO3x^L5nqpw93h(!MQ24PtzTgg#h5$Io(W-3Lu34nkL)&sS#;&{(z@$ zLzzb&lj)%ubu|6UEIPQWAKJcC`@MF~o*q2WJtD+VzuAx9 zYx91p0sH$C4ajfeJ}xwa?2Es%B8?v%+~%}&&XYW3mA5+PXt_sY2qE`Bo{5Xs+^Lt*JQ8=I zer&uOB{w&zWu@u?%R>e%&a+yj2;O(bD?YDa1NfH+gM(jd>>lg{D4u@4VH25+L-md< zf}D-5mf(fGt7w^=jr6#8%m z1!oKYP8K79;`)B(vnCG{FWX0u_$QBR@q70SVX`hm_I$ioT>c<-?HP5Ok|JgKjixBi zA!O-y7&w&D6{bCprrcbjn~ei)Uc6_wL_WP>=-{qs_NE@xF^cILU zS>|jknRb7BelB|Gj()g_|89a?Due{*zc&s9$$lMetDdUd{|E2aT`-Mo5QQKs!iR>4 zAm)J~t3$PhYeDC58Ye5qMp|jqif%cs)rN3uPD)8$jpB8B>RqF4R{{s%^Sk6mjKt7Z zR-fdj^PgZ3RN@h{PHRwoeklvbe}M5V7`A;g74{hi3bpX|O93H=eLh!dW zLu&?gE|^%=BAkmyKOMuu+l_q<*z7@48r$i|q9H8^U#oQe=ux-K8Z&H>MD5nrG~(hf zOU>wZX7*N3wTP|N(<|0eCoWry7}U~L)N>(9_l*r+82w}vC~AS<7bJqq9P1-5+It-` z>?TaT8%>F~f$6~=h5IT4Q<=pm$ZYvSXUGW$rG0iq!)qsNn6ekGWs>bPe0*pt*+1@6 zZvQ<31L>_<`T#5MSG&6b`)_j+U8jGQ%NC*o7}h8K%i$;+UtQOU3G!;?Bft;4)3f&B zY3J?FtYE8i-1-fK=Xb4|t^x&(XdVM{r4C#_g6?pXZe^DP_D^RrfB?nZpTI6C359Ge z-%3B@lH%J$6cO5te)2RLl!iu?ZOgj@@uIY9X|$G7^b#fW@jWJ)DYx3XpM8#02n%VG-5j9}pQ_Q~~}1kk|^B>;V}f zdNzYv3ofQBDt4U>vg^sUq-I?OxK`26l zUw=^uuE5+7xB;`IDY3fZbQ$<3fhxnk;4{OX2tIs3{>8Jgoivwn4)`E3hARZc1 zUmfu^vJ$ZwldAZN{{;g0-SR6m}X>>l%AJVUi8ch}JL$ZT>po#|eLzYjE2Kn}ogt z0Y^IKIcK15!)nwy_f&6kS?o_D6uXHoI(AUFX}$m%Ogf}}i1us@!=w*ELZ(hrwc$FM zhL(TN{$WK0VGBy~16vm?CDP@b4?i0P*$D~nI;?aIt@0$7rWRDGB&pGu*D#5Y4FDs4 zNv_@7n`6>(T;aEMtn&||KMO2h8)DyyCO1M&8iRGGTVH23y^*~2!N6dMx^dPpdX>NI z1}O@+4&R=4T`k?50M6{i^|=L^ zo?{A5qa^o+yrUcMH4oyOChU9b-Oieamd9?z{e4eOwtcmiJDx6fu%LMnUc~BaDucIt z+1?7CXId%1!J;`!1L9ePR3IKPP~`gqh(F&>=H0lxoc8>y-D%-+VSoxh&EK<6B{O+D z^7*cqlesL%43_d5hMDX?BS~>0rYq_@dE*oD(`E}CoLjopAKd(mM#q1Qx27N(RC5dq!_{ zljs>p@oe8{%Mo$CQ=<^Q!t9ji)T<)Qn_P=etga!@o4it>F?**>ZhEjy=r+KWql{VI z3lMCNU~bi9=a#=JL>aXOe?Rf|c4AAt{;Gxwz@gwi)31aGf@aMmj*?+!#(PZCD`_C88w_mO7KbP^;vi~F`n9k;N6&Kpv-bcrv zW17m+Q>!`$OU_D$nGcg?PAiAIbg7BwC?|+^H9zc(QrZElWN=@#abZo9zOAi7?|oy~ z(u?2w)|?d6Aa6ZXB_#TtA|Ke|=&8-gF<3`>#6gV5LAHQq-RLQ2DkZX)==_hXSrGbX z20~(#-YN)zj%QUSfdffONyS+W4?WTJ6!9pos*r-sO(K6xmtXFEP?@vEM{udCbZ$wq{3#IoOnyza6YxYTdH z@i!z+qO{j>+KgYnrp$oZU@f*f@YK^21@bmF9JsQ9R$d=oVOSj6>5y-a(Tn_QIO+Fz zXdDz|heNXOt$H6P(;2F3I1_O58cwbd-N#k!1#DJ=)606e8x0xbNNMe~D?Y$&QO&vT zllLHc+OhBQi1Ddo9yAOdZKoi~q|XX$h4t`d#OS$`b8(#}eeLfa()kaeR@WN0Z^N>F zpL9-!c_kLjzmp*fbHnHobEXxKtjsLFidm$wYmHAPVOF`VLfg7w5X1vnThKYOBJEgo zS7{qPpY4|hfjr_FH6d>agi`qY*p8T~DowZL-j(>{ckBzAHnohO`N=QoOV<{LzM^e{H zQw!wEPFot;ik%D-Hk!FiNkKUdYACgxB$nFVOz?O%lts-uQlS{HXXA#(4Jfjywvyhq zy-2~lt!-TwbqU#28i)K0YC*BjnZp&9)qS#=X3OYyN1CGJYhsKzWUEB#(K_xRt)O1 zpHF^$|L*v^wwQ=Pde?!o6)eNRx)}a8uPWw_P6Y_!vtsaLTi}>;m&%ycc_LI)1*hP# zQ?0_ogMl5k-~JqLZf=G)go`Zomu9*>4$mBBzLzq#Zg?+h*GUO+z_Z$FOV!Zz28Gtx zJStd=mS)}$sQ#(x;-&4hj^8P`syJfup_DlQzT?NIrq*ipeM&8~#a5?ql6MuSpacQc z9BV}=c6!Z5<)R@o>t2&*e%@nc^gPKtY08|3*L$ep9XP`?V`+1>#1T?GROT2%!@Z%s znI%X7PydL1wH+d}CPgT5`40${52rXs5QOMSqUO|TbY_^gz3qnRpd{czSx|+FGraIi zfYOPbJJ!~`X!5NIrZqrnDx%0MYe^`uC*i7d)L1Jvk0v8G?6Vvse4^zjx}u^|<~2x_ zOC+iX=u>#jQ-JEmiU&vUp4TCD{9M&r0o7Kyn%}^8OVn6sj0^obtRN*-XCP>6<-S{zBliOHw+tGkS#J^N2LMd1cVXIvL}#}8)ZNc65d z+MF|CS-fTQd<&-ZonA6dHihmVOPLCOFpR$F5AWnVv>g=96kkW}d2YH~7hOk@Ky*Ea zn;&`QW0XM=!)mQ^!D9F zAEQY*GVx9qa((S-3lvg&dKH84dnUx^Z-~{pY#@&7ZsMH z`O{7JD3y25og_Iw?_?L9LE268JQ>~7v~$iPF!@BA11BBWgik@YT~#xqh7>`8E{`E1 zkL?#=kHiSiHJ{0;G9SgG6(JnfxY}gjtL*Hsv7uRwb9>J)Q^tDmeB*%|T+(WK*%yux z#iqrL5v7rZk5K1RJ?s*d^+`bX%dbEqU@8L~38e(Os528sp?v~TU3Ryl?$YrVg3E%t^H-84L4c&KJ|#Z1*@ zuezvqJv(54`&U5*mnwVGnX`haE!&Q&Pu+IIKiOl8bgKrVP5ca#)`;?9 z)MEw5s0Iqntng@p>i{$ssHOdZ4m!8?LTn0q0iQ}G1PH2;MB48d+igVa{+508Vd*vp z@B|UUv_0T0kVq1y&ukagA<&DWRUF#d^va{$8Y4Oe$6Z0cm z#&tPIXdUKudWaq?16fXfxf6h68C53Ce7Koq~DU zfVx9}l(J2`tP$NL2$C}0#oSDz;T=RGWD;#RnP3E6O?L~%yz0ir!?-TN#)rbo&ER^| z;FT5XVWwMHUCGy)cTbCPvuZ@B9~a(M0jIE8IYdt|y$1}P_ke-&79AFEv8=crFp(d~ z^_cM*Yba#~wWO#@i^X~GH?mdij3ny06V{hPC;?%nl4Z-Z_ zF3a)GG2$Wb;OI29u#PFbH{4rv5N(Gel#uU=t!J6e=#wpM-nn%hS7>f6ywyxdLm?Z{gL3PtFN2{s9H-Gs5&9QXV)HH;;R_quS| zho2~{#prFQu(=*(vxLWyYD7~7v6OXMC%wK^I{Gn$FoZk<5aSS#TBOMpF@22AtxiWN zY3>5?GDqBzN}(Wy%X(u+%pBs`g@A8maH8+a6o z+Emn)D2n=m^zTLt32@;pKKC9{0GY3sx}|BN?M)b{YnO}(qR*B_NuHj3l>%xcotjZQ zuIfmqac^wzR{Ox^1q_9fzMbCioK;0htCT~+Lep1iNopQC$IYo8wd@N2u( zX}xd#(mHORO_dES+|mM*gZVNyQ(Lv0VjGHyF;i9^jIX5Q+H@^U2F?&FHgZ0kKsr+< zHl%m8DiU1)rvARPk# zdH6ZYk&KDUb|J+k>;qeCD9py4=hXt4svHm$sZj!`;8It+dda|LsW;7%Su>PzNwlS! zV8k-*L*(VpdY+>Qk<%BV(uz!}Be4ZTLvMt)$V>VzbwhI;`>spPyUa0MF`Bo682DII zciUIG&4zQ!yAz0JW5X@qu;Di2&{D_H1%S4u$*6^G?G&`NquNr|O%!8UEhXsN1tu#L zj&*QNF=ww<<()wIZNE$s3_@JIJ!jmIzP;7Je9&lb;ttSC#rRl}uVH!DAi|`vgH8Y-i7jO&Mas^or&4s%C+Z2U?Ct+ELhk`N^FV2D| z($`|jPEN}xSYmNz%{N6YumiF@WoSw2PB!y9=HwcQ*|aO{z&RYkz=nx9z5`h;6rQ_I zY)2e6I2K^OH)B;*%t-S!4;N`PTxsFGk%eh7*(d(|uKf*~HVGJEwZ6`PP&u7$`Yq zhgVmWl`9e@gZsPW-s;XeF14mYD|j*8B34?l5{OvW{kfq~b%+#FTL4t=YaXDO2^q6N zHjajq@y$fr_6AeH(9ghJIUM8s2g_vbn{~cN0cRooV3#gKo@RKtn#~x8hs?dp;D%F1 zz>R@>`h7#WtY(6)%Q+R!%&CA|bjD|ER2i?&i$Wekifl%kMUL#(=!kNjG7)0TM)Kcm zvu%Ks3-DczhLfA9DN4XPWl0~)z=pJ2=CuTw&pqcU>d@2AHwkD0aAaxHy^4s?fOh=+ zo)tl>I#I{E?q+?kewuEsYZd6X61~<4n2}2Ljjy|%+TBsR-u)fy%=lrU_OpGPnrIn5 zsZb2_A}Ml7!5#Zn-{5bDxBbZJ(5Gm}K2a;OV-3b=kNt4l)0^;uEk8TJDl}GML(l+^ zVdOV^SXp=Bo{!U|U-ig==`lN()AZc>G^JyyuL4 z=a;jeL<}^>RCJEmC%j*3z3cpVa@uMCe00`nAO6&cVh7lDavnp~GYaryAt`f49C%_*5O`*5k-j>Tn`sr>ekL;zpYb#=S? zBnsm~WoAZm@dfclO<;~-jN$w$Cf#N| zsx9@#ThI{xnr0b4%M>bP@Jm{uO0E(v+!9YJz`aui?oc5E?j0NMV9+ZsPg9F)p$(z& zL-K|zm~(Z-(5x7m%C#RAL$h!;pu$pFYvRsx#kqT!!=#k7S0YvKGB#geC0T`3aWX`b z;#vE!ee_n3Ju2H0%)p9X&7EGsf;?IpCw9w<*g=VcOXA{--om?N-_5VTooXC8kyyEP zAuexK(u%lfV_7A_8$gt=i~<{Cnde@_z0WOR!gcY_s%{B*I5QoF5p$CB@JIdTDj(&@ z+uAyQa~%!zGd~$t3w}fwF{nh90}sk_znnzZfJ@tg@^Wkb+!M)p$`sz>+gsMa~ivUPs)j!m$u_Ypw*S6+^OONFE(S zA}QPUe2juF*{>1}t52@< zz#e2E$4AJyQT-KPny`_#+7Vk@MK+FzrhEFd>Q4Lk6*q*NJrlouv(M%~bjWLKAuaf| zj*h@y(u0mPTt32aA+K9tAS8-ZQp(O^>*}q)7<*T5SM_aPX)@+z33+r7al=Q;YNLV; zooi5I8v|-zxXFuaT~-+jYLXZqQSl+NR^j&rQ;4l~F&*n$7D?Dzhqd&)#(9MIF16TN zACK0zqz_0qgz^$|VR&8g>x5-#5YUC!3!dn^_CRI}B0OU}-o*ejWrW_v05iw*8+_*& zc;AyE<-X=RB;Rs51*!X2uhTt-*sjGiL{h?I9(T53zo7)Fh#Kk}*epIpBT3IY?FPC= zz~O3Ph6BNcYqI+U%^uE=$-w8<(dsm0l&io7Xl#a7QDf>nW~N2}%TPU!y=bhhmCvbU zILa6zCVgcpyMZw!v%$u7dOaN7W7gl~GUaM9IlpUqQ(zVOI=W`eJurNOAqAu_oq9mo zBm;f|qQiB}l`wvpVc2Xz1s>IwIoam>fU8W?&LMrnXJ({{@8z+i{XC6P`V_$Qy!e2Z4t(>yeg zT(TMs)y8?+AKroIKp%p{+&~OR#tVQ4haPamZR-fqh4WaX>1{fQM3NAQR5QTHZ5!Ci z1;eMvaJ!*og z*mZr|*@7q%lfW&HY`bCXw1&Q|zTyj_VhSXW2I2O>)`(G!Xq2Iu{Kb%+CU=x^37C;i zm#tr}Ea!`~5gJw7Q|n~vB&0f`dV_)v?&~0l%s#QYvswdtv`ST^&DPosz!keRf_s2Q zq@O-De(ufgG1&}&?k+U&X<3g=#{`q)_=p8v3)P(MlAx`+*sWX21U4`{{!Q%Juu{EL zZO6<@(c~MMW+(bsM`oe39)Q;I2{YW9>4fN|xlu~-Ly&gqa!}XHN*ky%IL~;zeeV?Z zZFb^yzVb|~uWx61q~jiwpsabR>Wmg9?=8f)KOONEJra6bNCwjD?(ndyQ1JErt7_bTiY;OSXQehlm`buF| z3!{!|FQxSVIivd){eS-ACck5r1q~9L; zuE0gGNTg41beP4E360|4Bx_j04{)yD9sP}1uT}-<|>|js`!;Dw%{s+ z6$tVMmc6krO|kMO!WF~!22C_btUN_hI*PCPZL}6V6aEo7ZpGvXeaY`4;-{!5vcQ?fU!DI7(%@@tTM7#4GXz2Nq^M7^LUnDxH+eaDy z-`uwO{}(TJR{Z}`o)Z2a*?)-v5n#ZI?XSf4|Jpu!f7Cu|opnAQwfdq zjaqI$%Zx}N7+k~%KT~Q}c>P+XHIsjZ3<`M-b&Epvtlt3^l~>jb(bS*CRffc2axY8m zM{zYwPjHXPAU;3y;dWqF}1Qf1;O z^IY=p(NjoE>yJ*)d)hQBLUDuHg$r=7^SR6VeYUT`423br31cWRhUF*)3@ep^P=*m=?;s99N~)Wh=hEj-*J%QLpw`Z*c8#eu2kJBOr_$m2*CgqUP&;pZklt6aU2ELv33Qu`vIK^F z&lbRK#3;jW0i1zgp}REsIo|Yb->uP^4t!2&(XZ;ObTRDN!IASR@);w8 z;XHSQqKhNH+vhLIXXTYC-em*v&fBZJ?VvreXSAVLj%?RM-iq??uh>vSt6)i}OkIo|N$Fy&i?Sr<`D$8T9{tD|M@~dtldBT~i zMW=e<=23z1ofS}7Rm$3FXk~p{M|~~WJZKMnh1M6@_{Ha(#Ud(GM8K z2PY)RL4YnqgW;W4JhTQ>Lac%v(7$*u2yTPOW@Usnt33|Ft}#vpgs0kcNIF-0Mr6%L zLyzYRv`?2|pokD&{vP>9 zz1N&x)$RF<$&B8Hm{Dc3S&b=m@c*Hy-|8tk{{>x{wU09Y&z&9H{PacCd@RQ(EA7M|-(?h|o*aJxA3Lh&3z z3~AS$UbV&i^cAG2kOO__{qSddis-*`CY!B~GWy?qVcY+Jkg=lw%Xn7u-*jZ0CrGYJ z$hG1n!kp>BISB(oO+G2^o(Ir+dvg5l2vot1sNMPv^E$6Z|Aq2^RZUC$?5k9j)7QrP z&=|gYik?FLUm900RR6#8YS-5P?Y!D)uIT?Vo|XQ8N;dxV@c8WgVf&N{BoLPF0 zwy4x|UFwn4PRBFhbwvI=b_@8iAwKd(LXqRGy02gBKEZ}}y5$KHTQ!9jL?#`*Wx^sA zIPJCFU!1MU@^LC7_XmAt&}-iDT^2qX@mh=}M9(NW6*`DG!`GUk+J?VMF-WMVOJOj% z1xK?HnJ;zD7bZ!D6`C9~4*USMHD^~kyj!XZG&VL})37d+J()vur2o#_H z&7Bv|9sl3mo$b~6zl^8&{6D)%AoMjqc?3RaTEK=3(+N>m;Cx55AUTDQ<}e#XU|N;t zV~X$*ZAAG^+GWjV|IH22(!p)oXB4T}lVl}!zVATX$HU{dtfm z!RSLQyy`@}nP)E-lMy2#`cTB1I=!%&2UL0DPLZvm*M{NwB>FZyi{_3gz_4dL0Rtn5 zX}&bn5fE5xUpwsPZ%(B2v@vr4wGH0hSU4H>=vIVEva70Eo(iQXBu2ESfx6dr9RTJ$ zM6)vyVL*d^v`Oe$GHA1%U=#JGK_GbTc`$ZH<%!U{n`tKWhUPRCVnf%S3WE|m< zX40~URPj3%Rq$R3KDM^r z{(N}+Q_E32%cQ54>n;ZP_A9-eDtE)tr(^^|p44tjH^`U(K0fKZ{q47A6JR_#WR$Yg zZZTmM=;fNz0bHkwwlD5_o$I7K8gfOraG3M}#lQ{$JW98+%K`hRGa10ulD}Mjm)!Wj zz+rQljsnVi##C$-rcZz~u0vW+aE+V{AS+%73cYaBX9dv@XLwPublU6i%+nkgg$We2 zrw8)wEu5VyQakJ!{371)CZTf14(v4P@y&iDs<5p@7vB)`k}XO)=-y*|35Xt#pb1}4 zUIW01zW@KT_vh_x9LM4)eE#OA7(4IJ0VHq%s3oB&=F$`;^B#%RC1EE%aW0-AFeK*) zz#tfaiyht1{#I4*J>9baAV^7=Cy|MnUaG6BtE;PP$)c8j-n4=8%!DW|A%&U8q}geu zn-zV!%GF@0xvSpbFpk(^zdSYh06KL4DJJd7cWb}F61s$CHR61=GXybj5Dm^Hrw!oE zI)5V)C8ujoHWzzcghG_opfRNU+!#bsJhI9`2({zM-JWtGpmsQ+nc^=qO!4U_^=7qz zz?mYW$(Y4x2=G75IKxqvb@qgv#v&_y1@m?jMOcCZXF*m31zFycznvd=J6chrESF44 zdB@~qSh+a!$q2;W4zejqxQwgsRf(Dy24jF%=2W$)2JD^8K4u(WWAf^F7*D*HS-;RE zs`C)L!uK6!SZPl@=iC})@`aeE6^dF+@N~MI^lGd%skUxtfqPT?=#iW97;^((Z^(8r zLoqf5Ofd=0<4YsOFM4nij*T6thP|7HTn_jrSL5WSlT4BScbFPAZxFFP2uc}zy@4fI zy5m?&2uujqJ75V^zGtie-eIa~)@jKB#f1Z66GA;y8c5!3#KEo{BTU5ogFj3r9asuk zf~o@bch?)N4TKqmQk8xl1XlW_C%G;Jzbxv-wh3EyXBhoEI}6rQ8zpH>D%c8RyOueA zF^4v90Ml#Bzj4NR!rSjs#&&nkW-teiekqA9@lsj`a#_5^`niT4Sx@(Bnj$Op;RcwI)MMfpLYR| zH3c}l3qZPrk%bn@*3P4Dh{pv5!#JY3fPXJ=a|KSgf8f74VHEq zWBi=8wckcSEQjMUfcg_&#**gtNYc%Dbe9Z!1hb@hq$Pu)1QFIxg~lD=CJ!+RRU{Ds zct&#^4K6acyolkj3LUchU}#}Pvwjh9!Q%DnK$nG}@{l7Ggz#y4MVY#5z(c7cKo-rW zmU<5O*r;W0xw=t7xHn`?abBaEgYY&UOb0Fw!;y;^p(Yxfl^{EZ)qwgkTmq_L zIf^$#eQd39#}F?6GuyC8As@p7;er&!%_y_LRiQbRdSTZ%KcBF)`RQPZNBp-r=zVpCkQK|?v` zQq@_FGnOZna7E3lf|iQU*(`&+bmNvn(4!!uwc5_;BVKlczuEWo3 zQ##F=+WuYf$6jE6%7NYPuUuE=K=vfE?QZRU55(aDC#jDfSn%j{H3ZKh@<97ty$mDcymp6VI6cxWZp8pRawhp+&^hG>Qq36ChU3u09pE$Ac zk~VA*MND=0TQ_){jBmnmuRRWNn+yB0B)@)kkXOk?Ho9Z0gRYMV_J8Uy6O`UnM z&AGxZ2%$<}loA!3EaY#Zj}j|UoPgm7`>`#qS!yKSN%N1L9h<^;B`|O<#1;4cF@g}H(@ETLV?&~H1#-7 z-ox66*j>ZHXDD{H$py>GVZWOv{g8fk*>l8Wq2rsm4e> zY}8QTDn&Bxp-1nIQ8O%b$T}(7GBDrz{4-i|Cp2bP_TkdhR%V-iuK5j8%eTd0i)p;m zV&>+Z{nK}6oZ$7NA#mhJOaF|FKcJztMg$x5X89D2CZ{tIG^ai|h;ps$RhXh79oZjZ ztL&;s-b6y{P!=8d=ss60hJl5L4CT+-6B)o7UCl1Wi1i5g>EEF_1GMkA;MD$XCEz*~!)LFHL2TdRx3*h8bdUJTO4qh)_zD5gV+Da z3du0*kUTLK#;tKON8IT~w)8Bq zXHwf(gK)WtTl|Oc;bJ^yy%{w#=pU)xvvMWns@0-gEy{&0%5O&2vKWbdKkeZwqerr`2^;q1EG=lMT}n^d_-J_@u4j zB+GTPnzlwkfsa=(4xS2A+N^-gmWf>Gz-v9N=dq0{hUM+n%kAm&ANu7f+GthH>m;}+q1;%&~ zAr+9EWkdivVd?6hAWmgSlsQ?5!7zgKio#?7OQGPw#24t>tPXcy;VO^D*M)M%qE?2J zUS0Gjj`C&cZ@<^m&6?R>pf)@&QLT26MbMVZ#}uhc#cnCNYs@OC=Ful-fKP*FIU-$@ zNwb{k8VQKT&NPD~m=mn0Pub|ovh}LVirp}>b;13iDy}AqY@_R!7O;>C4UE3xg=F2e zi&a(sLe|s5*O83!L6=nw3Au1BWF39S!%F2Y9(nmiPJ?_)!r>+F*4IlnTg!wPEqyev zxG9ud=1!(zM@!{9h!u3yu5~{f4k;w$3gX6Rf(hkmH8cBcG z7dm0r)a01px9k_qT(?2J1Ma;u!?YK4@Ht~xBl>XOfPYyV9!|@;t|flNJKz1EP*yvZ zbH}>Z(~PLL+PE?sSLrj;YUBEvHm-_CWp4*x&c^jLnDqiRbcg?1(DpUdFI5Y7FM0J5 z*tZ{MJH{pIVorg22lsvibQtV^lRIkWuBOCRI_pL4J#Kp?Z-y4R?RoB06`Ev=&bw46 zNcsmcww&u!d`j(pCFK%)>@d2Mgc&ftW+Rrd-kh6=wg2Vsz!yos&(=ksf~(UMQ^b4~ zfu7}=xCTO$LDHZmBIa)<*oF~+9-&!94zKZ{)Ga?S6IC>~84DfS$IQ(!YXo4SqQo3m zm}ea}-*&E1oR~HjoZ=;cmKIWPBV`RK}#C+zQNx3?FNX z0Dm04WhTo(NO?1sg<1o*B$Q>LbIz`WV=?!J_S8WW>6+HrZxs82j+@^nb?`0esaQRR`0Z`+^M8R+_H2@(HU}6BbSvV>XAeXV|JDh zRZGP4e5lx+eqEDDhN307wY%EcVZxdCVrQ#h7*S3H3L_fNXsG&5-^*OqyjX6We^5ST z=Ebxum_1WXX=1TN%&mNl>s*=Q^7aoLPFWX0u;>E*m-zX0qPqCKu?# zUXSM(pho_tl>k3Lz`xMj_FU=SjYeUadYxJbM z_f_kNa-{0jU43Sm9p8X;Cda2CDEm}oc3xEtKRB)fzOu}ZfbzRZS3ND+jB209J1scZ zBo~60iD)nd3wiP965&~$aVc2pL8Taq^89QDf9QLWCDc^XBM` z5`|){to?(-x~q~*5ejvV_TL;Gu+Uoj?ZdNr@Spz#zAoOJ{NvYmhsPkS{c`f(hi~dx zMmW308Pi1QCTAF5MO(IT^kb9F_K@BE@nyPK3*q1T#>R%=WauBw&o;%(6Dt$;k+Z>% z=|GPmV=$fz+pf%JspAM!gX?bE<-l+&FPY2^9+vZ*M;Dm=T@0~M zeY%JXqIo#i;`mVfjoz#HY-aOVlu}DEHsv>{y;r8SGN;X$(^lnQs z{sk-xH{CUQfNc%4x_2-PPIwuSwN!GU+s8Lp8RUtbgZ4WKFg^Ye{%?R--|;YKit)h>v_Y~pWmnp*7S#y zUk*EMjHUd({ii=2>u(R<@1LDn@7__NvR(K@acb&k*w>)3(onm*_+!@U<-5SA+7>%g z7x(u3c0YUa6S;hzY%X;axnj#=x+vPE^d)g*EfEme@QuWx2T|Gv^+fGYPd4WnfHsQH zbGK92#S++v?4?*@&YO~ARd!BQAk;Nx9|r;vs8GB1Y=md_*ueJuIs zqeb;{pKIo~V#&13^0zs1?!4R=Usk=`Cu`Oy8O79l?`3(jzxiabXW@WPX+baL&cs0x zeJp$J<5T8rK7TI@JkUSrsuW{cghC*HEcf-8y)0h!;Ob>T8i<0i_;nK1*nW^ZFBLQr zbIi-4^cViIEN6eY&qwuQYhf1O%e@|yWH0tn>8O2py5BzRY_(7RS}U*QVOs4!O^0}P zC|?b=R>K}_T=%H9(t0RojgU#HbQ%pPNF~M|mbYKCTNc{^e`mXCCKXniad2VL7S+(giDo7iyIt~GCLIpbc>=396=%x0 z)L!D$Rf`O68B?t|C+$*2QlU+EX#`WEw=bJ)Xn-9r@v!e-83}#G+-BiHT-6vv-phaf zE04YK8{8efbq0(uxPJvB>FY>(&C+j{%uF>O^pfG9C#=ebTiJ$q*NAP!fW81qvN?^1 zo^m+Oq9-4CtcbN-nPnKRBo$bIQSS?xIW-7?ayY3N$~k{}=ARnR3Mn~3WomyR(_}9& zK3RneYWY)^LAUM^Rbesd)xMBPQe&7QD!ON0Y{RC(NB4lZIzOuaAY~ zI^FttN4~GF;0Q8rA4BzW(J4U`qU9d~aT=ChImplCt}`Ntv7|2mO%|X6S#0ntl$AhP zcRrkz_dYMN9EoY--dgO+{wPqX%(7^UwQ#2nh2rwID(TIFOlx|-G?ZH4GsHScbA{do zEdCt)cB>$mtW44pQ84f&FWk$Oz2!NK%K9-b1$tT4?uFe!ju*aEw+%BR^>m|0S zd&9Umj(m}L_W(ckY;x}6tC_gJndsirRQM(#KN`-$xskuSM>RRw1!74so_Ua3xtSNm zV&|je3i(22#mBsyn{@7aS*g%y!Q z{i`1MAiVAHU<{Q8PEiVE zZ#0gt!%4Iw@aO<63zr9+AUE6|*;BB24Gy%}Gh{)ICtDS6jxlM?mbd{mf*%5aA{t8z zd7LFiBb!gAz$ypPAQ?T`wAJ%FJMf`966ST!)W2Jb zeK!Vqa1IXoRhZ&^3|T4R_;;yeVMva&LnMf1CtHQn$|6@N z8{JJfs)-nOj)F^HtKNt{_qu!w;|M(#`dRFnCPz-b#&%!((l0Tx;Mb|S@o&m;1Y7%= z&m6pQK2(&MQ8d0t#)H6QPc+G-Df(Lm&?<~fgVVv$RL-b^*o!&Qc*>)$EHf=YU0ys+ zeYT6ka#{?URm*iRSU$T(9ydFm?y`8SY_%n$NjxB$!A2c?+w#7bAA}dysK2uVv)tV^ z=0luZg5BVtVSKTi?HIsD3FYYT8raT`s|DEr4{xmP3967I#=HKR5UWwC&hPvu1$;k7_T}hHpj3lMUuJetS8rRhS(Z%-YcHC_0x8igl$g3 zqH)j6SQ>?A05ha^_3S4zN&k5ngzTJ`Rnvh=_5|y?mkc^#w+p+5O6Jpc}Ga9M1Zgxr|W2v#6GWi+boUnRB*;Prr;#@uE zfvIXV?kd@DGV34d-%R9GH2|QOrI)6dZ&)gSgl0N4~VN#gmf5D`yvW zz7(F+Q0qu8^M&#$*{Tws(AUi1TUjxx8gE$Mx&Lrq%*oPhBOzD_~zSEAt zt*MA4M{=&tPU>EtjiBctZ|{mUeiWvX%3PBukoRi6dhj=k0|q-vxy$2w`h&XL%%LJX zm~#)nr_4Su6Y}QT7lJ&b-3J$R_9|X}E8H;4`AqCqXMc8%SvC=~>1ge?CJEEQ7BL}l zm8BmX?YIE9#g#@SqX*=xum^2Mj56e8gAMXuEHev9F`U=%M^;PSkC z$@zt^5=bb;P$l&;f~UO~=u1niE8(U9IK6A4IIVO;;Kf$Yd1OwbY9`U}tQkwJ*@o%h zP!-L)gC6rH-+1R@vLzra37JkL2GVAvl~RnJ@!QgT-(uN1w+=rcd+9|oGC@xf+dZ># z+w5dfC+l*eY=sNBc|@6X5l7i{uC$@$Ol#7jd{Tn;9=j^A8KMn^E9taCzC* zeD*QfZK0$QOdcxo>|oLg#xLm%7B7#JQxqJ5D{_z7&buX^(p|OPd<7P5C{l=Lj%Bon= zNjNuX4KzpfmFT&JNoCk}-W$Sy=BFd;{<1=_kl8@g!B1f@?0zd#VwAMHsCeU+)ps!AM5a z^M2gjF=`qqceLv__2(;pdDD%jsI-0hwSMQ+l=Q;>n^V%HFXLBEEfs7_{#DqAs$>1; zt6fwTum}ckHtd4eT~Y|OmgC^A_+u~Qq+71O+2@|eKk=263%J=j+g^#j(49@m4anHJ z?|F1P0(yf@hL_V^09{IyLf%;6e3aqHP5|9-HS}v}_Z8fOfy(})Boi_ua~Uy|fY9Gr zz5%2TiEZ@A0VA-gAk8#mT@=!aPnT>gxe{TOVffE)?m^`Y<2+2`t_CF9lk%{&uNOlG z9@AkFE)WaZG@^jgNW?)M4qzV*r4)@(XK?>t0f(dW1;`r+&Ew;4e&8Mni*xQN9O`I% z{aA52nxjN6Dx&W0Y4X3sM&vIOan+XwzHCsBjH*)@oSfgUX-a7;=y|oaT(Fgn0ItwkF%Gt) zV##RG27GzJk3HQKhxPTrS0Z4osG6bm`9remlv^^y=sazDgJqU#bP+)w^9Jmkiuu~~ zgwQJ=JkOYMX9PMsewKj98MUpra6!Sm&|T<0YsT!t8WnEj{GkhwH7@WTF4K{D8E1A! zS7`ohsMZDA+L{*Y?ErZ^g?hudYZRLe<2~LaT+5gS;W%Pp*fy{ps~Zn5$H{ag?!<=4 z5MBMwqp>Q&GNRogfNdF>SA>q#O5BMOX#^1T^df6|KskJV>&m!tGD=(;T!q&WnOdfJ zsG%EJG{cm!=3?9sCRchD*O)9T2^Jd8Fp+RvJ2s5F?}MiGyS2AQO< z5SN`3Mg+L&70`fdT+5(?@8+e0?`pTNU*BbB^F6@aO)kgb=qm2gF`K+wK?)Mn`KTuF zR)N>gK;8$@4VHB{4DOaZJG*mE4mEBKsKZB^zdZ3zVWsm$&+J{fnY~@|%RXU^K(U*pf7#t+*X*OWpl>81?*e9*=_6WCLEXK~lsj9NC}Yp|hGaq2)S~%P1K{lQCeB z)O=_*iuP?dJwmI0didewm&472pZ1U69j^T;9(McFUKH$73!74++GI8H#YKFHw;LN* zqtTvzGI8E$yg7tp%KOeQ`=_V-zjl85_;KyO3LnA=U&MVVe{^to ze0JDrcD6Pqw-e>aIl&gLCX><5=H|`K%?8o^Ml!zKw5rs}hIWWXh02}%NEb9ds=4fU$)LO1%T6WtJ=*t?cm{@GX%j}$T1K#8Hh%SsBz7xP# z|1ufJldD0xwr26K;17+X33gz-q-Kpbj7z2JZLN&rdVR05+sj&y)v=hezHxY(*tciEi}XYXoKV^^biS6Yy% z!}o_D4v*WN#M z-^ZSqwjvxNt=pX)uIJe$l4-DpZT~-$uq|mwNIkR8N(Gb%2Lf#kR>g`n`hGOLoLudS zQJcXA&0*tq5~hpgYuKP;_;heEVUgjw_4VYb1)q=t1&OJ1#uVd81*u#@G5hb!LUxL{|PKWWofktNlh1c}=j=)Ni zveuHmj=nRvld){FV0+=zmZkclzvY|35sDX%_s5Fa<*jCk0%`SaVnE#M>g^!!QJ5&= znnymaDJ#mZ1=iY);OHq(^06*R2#VIZAR#jxjrw;rMvGkc1u#G>@|XK&*#M;GVuP0v zfWKFR)~v|GxezmW2!x69NH%VaOHgOqvE946J;qLRSb~_ZcEf%>oc8-H=0SPP7GsrR zbK>uSkUYV7~tE#j}^K zm$v@z#f#=j|F?`MU;lT8@tnhc06QssQS=ay$}5&iJ+g01H*&Rx&sSQ*&d1ZkH%ABi z?FyPhs|o<5)PsPIemuF`%jy(iKib6bxZ{aOrD*FMGbKD%0^w!KE8LR;Q6n;@L|mWy z2^eLmmKWEoYwLeI9deQTD1FQC*yNs{0!^nEag-VgM&o6z9_--dT14L&1I!N$7b83{6+p!CbsSy7r(PC5YG=m@@6L|W z0f-w-{GudcQ<$2m4Rmyo5|wDcfsPC&u%3nrRS-XjlIODIIhEw+p9N7U$0fgAOevt) zAJBz-e;vWX=$zjgk!1=zIa33h>4&4t`$;l|eIxVwCdS+`@~w+v z#9pP#*Wsm)h}a(1k;`Auw*6k4&&(&eJMt;J#3>V8u68MF%5vh{s|C*{Zm%cDXGd=i zPj}?SPA|X<@+h6`?$K@u;9tR?=!FVwYT53i(#xvLNh_}nu~-&_Hm z;CncUjwA*AhdRSQvGmc0kEbWUkP>GHlMjv8c_^IhvG9#D@uO*%S=l)w)_(zL8r8O>Nu1A912X z((nDs6dy%rCd*UPX92TVC9IS|JNRb*ou-PlIu>f#`xdZ#1K(A%y|W{CTV1k|-l&K@ zE*fOJ;K8eugD=Xi;dwvW)3qwxtcbQ9rd%oPUUG^C_q^i2uN$flkCUu$px8k1>bgh) zH6xNpXZv6{qTc66(RVH!-787zYcV4|bkM*qZ%GnqG;%IMV95nF=p%dUQP8U~)w&3n zGq3OT3ypWJg4ul6lnfv0y=%!|EzjgAjUSWrYL~4B)b-GFwejhq>|+?Af~badp~iwn z`Do@)AK{|rQ9oilhA|3w7B`3HVd*i9Q9-o0QR)Z3$1p|#&*Da?9bq5C0692|8=pFh zKZfCn{USTMg`TfDUX;{SUIkH3;9=r1dRj$LDp*1=|h+vwPauE8;~U9?b6RSK zg&xgOeYQiBN@cI364yzT1bRIR2DGE?`i2D(DwK zi?es_sPV3jwb?O_ezNcK9K}j#0=ZE}wUB8;o>N4L@2pm_kkziUBPl40hBB4bF)Uyj zpQ8)t6$Z=`H}Ti}x*cV;WQr!O;~vHe4^hDpZCq~X7e%~KhZU-AHMVY>jV2o6H*Z^w zR$b%^yNs_RCdVLjLdunRaEyS9iV9VaX9P|W6TkuaAe{Cm4<&3mR{ggnZRVWMOUW{> zITfouZ&K%;MxTmrk#k$r$Cp0gno@0!$;LL8IMo8=`>|v=CYuRB}{PP{FXoa=1*J?-+$%wasMydbo<^fRhI2E?}hKd#E~% zup2b%u!kT2vj6_*4RdL2Xzl{C84*4}$SZ9gy+E5O3SJ=0#G*+}#w-|V`5;EGB+D!q zR0-xGf?Z&}JO<()e5>@}*(_@qc*`+htVkONHdHQ*Y)~9l#0xDk>S#7*D)G_G$A=ig z*}{gv0>%2q;3nF~#F=$UnwvWd^v=|fl9|NZSgp#j_#?lVZJ6P2a_8Et=$dLXM$4!! zr@V+qmE0wK6Op%5xbW>NZ=-f?foNSgQt#XBX`x0qE>}3<80z3*y8ufPdCT$|%HQw9 zbmCs3EIAi4B62wPvB{GC9u;-6Yd1vofeMa{rC#ZfZLB@VG27_TtsV)S`VrQ!04j4( zVXq7JmpsJHhO8}$5x7)jm2gHw{e%}^_KDSl9Smj(bjuTu>o+xgH*a9ias9zi4;xME zYehYiHJrF-pB@_dTVFBq%hA2o0X{$caPPD04emDc9^{*M5)2maZfgNsabjIsD*4mK z{hB^EMRE^Ejs>1G7%N~^{+83G$u`s!$~SxpfiAKz8ff0lOd-u2HH3lxXr?5ANXlSz zu?VUtAcH*k8lr_|kxCgs!9^!!l)JLG1uY_9*mfEvGs}O?nnVo+G7xMJbAZzi{^d2j zeU+o&V9^e&GydV3dCFHH)$8|jdBX0X=3mm8rL4`1!7Ck0!M*v3`uh1>zHHgE&0}No zx#qu$M0N_`q_hZnm#U{dbLogS^EEhvKw3J1v@!%zZT{7Pdy(6A;rQ=sC)c~1XT#Qs zVrHRBQ)SGf1IjcrlO`zJOd&&q8ikb3Tb)JuBOtO@0`GRQ`lZxXFu4`(SRQrvUY)zu zpnhRcymDph+5*hQZz#xe zN9R)h=l~X}rjFOG>`0kpIZung6e%5`sdAZ-%8p+&>`s!jXiRLm@sLBskLvc_UN84- zA5}DU+M=506ld38lqnW(esPvrdFY?rLaPwV9vr#P040%`XY;jYVlBJ8EbO&ENuKJTt%jNiX0kqC|f<A1H_6_=|IG6{H_6 zNjmxac@7aRWE(G@X*GMqJ4)c?OA!t%KDIpBz(ob$nrM)N{DnvcP8@qMv`oR^z7nBX zX@W}Ue{v`L5qMJwohJiWe*Ul4R_o<6EC1Ja>-mdS{;y>`o2Bx9vD8h1EVOmj2)bdv zI|Uw)j8l~gEP@}?6jo+Dl$y9<6klGQCu5dOY%MQU*!DM_D(vX2y?=agSS?wYr&7tZ zUY-TN2iy3Q@78{Uo-fDAbR;vzi1Z_AaLi{{y{Y*aT7B)w=Im+1=uD-0xr~O zS(JF~@E;!!PmeIJ{{DMDsPl0QmEN&-F#20Zrh!rYT*ae}wKZ8Nl+?^J;!%DUqB_!| z|2fsP=Xx8#%@q=lSSvtHYXarzM$osRHf-u`yp>8Wf}3$T8o@**#AA5V zVvrok7zUL7l4*S4#X$m?jfXHWY6{92hma5PP%r%czmVNl+%UeyB_wdgmyo3O zGD}FSE0$2XL#!pGZMsezhUDj3nbRTBLxg)yw!XPK9pBkpF&ayKM205^T5#ugYLRWM znY3$B;)L=iLV;nT`sJ-kj*u#<Rm7=)O~G&7fS)mR zDZb&=o*U&g5e3$Y@k!(G7~c>-GPI8{w{j2pWf;%^qDeHSh2=Je)<=#iLvE!b){G?C z-AqYE%_jPU{m!_qX&|ko=xeqHwMc{KUO}f0bo_?+?w2iOextjGBG}SbsjzW=-^u6);W?z2zcoaCjRI(5>LN>u7uq!x^ldU&cE- z)Jsi7yC=vS0ez9!J5O%wJVxtzh(5WnJjNi`)If}y_9@`(Z?N0Sc9lf$667UTxfCaV zoAUOhE{_@I_ywrv%2B3A;4a{6S=ZwHqy?_>T}OJtHHjYynTVrV=-ljpAR~+JI;B$y zr}Jwe?9N&&hp7E_uXgD-RiMQs6M#K}|U`y*J61j;;%QRbSjz81f>wPEC3q6&oE=3LQMM;1uz@A>j znGI*3JGqU4)XAo23PiFl%-nt+hT}VVo5+Gf;A#WfX4LPn^@Bx_>i5k#WXz)?LHji` ze65!I?0SQjpsZ&i1Py!FNrFFI#6*qlv8YSQh`E{7>Sg<2A#67`0Pyi-gDo?DX=)t> zF&;DjqVUU_syEhhSKb^=camDYuzB-#`}m}D@Q;5qo1ORjAAWqZe>PL^|NK`;3>E>$ zc8V&@$D+evpC!>tE`lk3(KZBWn@V1w;&0A+lwl#zsm-V=wd7`ECYbrGOrUkwtRxwg z!n?f)g{>G6SqY|9&<}-S^Ro>VOG9TGf4_=`j?m0#{K_^-ZstKG)(AeWTft+d;~<4M zAavfu{XTLJSfm%pco6kA)?oj4^cqaUPZ65O87#nLi>J}uc3Q1knu3=_wUv+MipeCGRD1KS{DQKaVq_}`2eYR z&53j7Jzk(_G-(9S=hPyZZQA z4T|_Q`-xv!60+_M<3i1Zkp&79!uxkdxCmFg{bi&>mI(aMWRdn})U=_KxNF1io&@_G6ExyS#99@GD)`Qll#`Cq~F zMFZk`zH$E_*ZiM@7)^|IA>Lm_{$E?IXD>4TUriv1mH*cgo~-{@E&LP)@7}#{u)}t& zsm78pS1b4t2!}4xuEtS6Z3O#+6b^R1aKH}S#}T@dqYqfR;cH<$9VWs1 z5DVef6^>(Q=k1uepS$aPfbC(L{vNzf(oYFynoEW~^icizzc&a_7J2~Pziz^mdz`WB zhLdsFh1bat8+u0Vf6yG#QgRM6dV4170DPNp%0y*Acma*axJPYp#0;4W8#))WVtS_; z=Q!y8Jh}?|7kDIO&98lp4st)Y;ZXPE{^?<-{p-iWJoh+9$*gxAGN{gE9KsZAj-x?x z9d$^&aeKu%N>f09Xk5DdIJ$^{zPl0kqATSC2O^wS4%sWd$xQ(y*{_w1)E55qK}+$= zyh-#_;Uh134e4n_qQmQ%?`}>!ZSPkhK^MIjaxDJCvMa1v5+dO{BV1Z?<64fy=%B=h z=GcpUT>JlMoD7ml)IlP-9EbgR#ejnR58GSMUt0Tr>-pC9YX4uxv%vlTd1L;~@dI?( z50f>h13+ZN`RoS?j4Ep&y*~in94=3$I zI8?R|-<|HiFWk_a6%d@afP`Uk1Bc$QJBhF97U7EY)i~n8v_FaA9Ndjl7CH$QCC_8q zK6!Jp6Ua*OB*0B&?1SR?r1RnD_w6G%03RHk9i1FAP!3P^&9&Q)2QYE^j@V5nJ!o++ zy9dKAw#n{7oSP_qhN+1z{GWmG`ai}w75lMotH-ay=r-qT8vhPEEZ@dqj)U*G-Ab)2 z#_HL2jcMBKjz-8oISkBhAy>!{%$Duv;jn}pgQ>ZI_CwUUGcH|NUT5irg~bIxRe49O znl~r^`1Rf4F=COa^ox}E=C-rORQb?sxGwD|=n70&z2Pc32dc;U#HA9FC?KV)wOuJc zF%e6uf&0Nx`c|P%DZEUSQszXgF7i1k87-c4u-COeNbCSGFPOE5Y!a&h^ZMUuD&P$c ze%e3n{CLz3o)E;zMXg;g5CwTRyKOi@ji)?q`i`OgW5m2$bG2UI;{eV`(QbmiI;<;^7%U(y-o!x9Y7Jh_QHfc6iIk=vV^yGpLKf(96^k z`Q5P|MP!S54U-V|`~9Sgy4l?3qFeZp;@=%H!cH=x(I3iBZT=;7(1s}kdwOBFfrhM` zm75C&j2hU;lP%IOgp28sGor98@upDaY-TTOX6QnVr;4&h+;h`32aFN1S4Pj-){0nx z{CzZG%6jYd;jm|Zp=)afoxtCkmfnsruu0PChhw1Kf&&~4mG;M7(Th0Jbf;rDTTMFb zXjAU4$8!d(NhYEswPnKJtk z(`LUfK3$S73G*?)nz%ugiNzDiqWj;|c+AXA(843VqD`uwBqMTO!ZyNwKS1dv;MqA- z=N`~-Q=y9j{RD{nhEd!2A*+jPCN$4wZ4irx4H|Z^Pf;{tNuHS9LR%EBQOL+~lA?BP zh%%{i(z*Z)F&n*M0&luNMsckCq_0b_hD!l4NZz(-~u ze1tqHiV_}7_*hR+JOtQTNKVfHih%%lz2NXV-J=W(CXP7ne!P>}J?s*>qux;Tj0f`T7|-}A zMavokPgH&^A6W}O^OoC*_)E&)5p*oMo(#U(2ySqWC3M%qQRaIR6~5mPv@6z427Je$ zgEV6E&RXMhgrx6)02}xoCGGDyu8uCaRUR<9(t-!e^1|kY3*CIy{+xQw^Fo;3-IK<@ z7?_lr=!bNMNP&(NR8?RRUKzN?LUw~6jsS|OKLtK(#EyiTrOzVc(Gct=yUMGr)WrYE33L)mQT4$knnI-<157KZSVO1yI9)BAq zlgQ0oXpruegBG4t9go;?kK#{>V9E9*|FnPBd4F>Jj{eaz=4AU9%h2xJct4J`Ua5^t z&#BfmOdiyw=B$Z6Jl_BD{UI;Frg9uf=rsGmywk6Dfx=0cmYP=f=QQG{fg?_;*)m7z zk=T&*qqNwi9OvjR5OwN0@&iqxGHZv6+aacVraoBCXH6|(bR}NeU0K4jPqf(CQAh1P zd4dz-_l&1!E+@Sa8QDlwMvo~vpa!F)A9wHQBuzBnw?jMe$2x=Xj^c-!9{H8HqM7%^jKYZceQnMn-Pvci2_B=aV#6#qaX+0Q5FdaR~xs<>t zrVd&;5(2m>Lm)AJ%+?}VW2h6b=vrCJW8W-mB5irK^9T=_=eS8=`UwGzMh$3R%`{V*75i^bacp6+hg6yMGZYN zL8Nbhoa*X(9{rCOMmMbD(V)s_vSoln4B7zB)XqA#Q(8Afd8jO5flt1+ib&Z51gLna zI=iRA4bNMWkUJ2iITdXnNlSfvZtBB>LX11T2##O0^648i!Mdlb2Q(s+qN7fIjKw;hu+S-vlm@*4F zi)1#Z46aAha}XtW+~e|}jQ#gJ=8)SZm&CJhBU)L_Z3XO zvZUcrka)ElCeGT8yr#2fcm2K;6(x?@)NfUa%^vfu9-Zb&4{fftdKUb+>_3Oec!0N> zQ70V%_k=SgDOf~O`pQXx3iAK7o^QRd>_4Bs+N>^MR|YRR->3Q=;abk zM;GLwQKp$F>IeH*1N4IoQ?jJO2HqvfC5-fJIv6m;#zE4H0!o|&I|ghNgU4XrdVF&F zVgLQn{~UJCKK^ugdUEszwt$0^lhZdx$3^Ll$~WN8Uery-(I#FbjXjo-X31_*HYDO~ zgK%;+yY~jx4yqYAavR12$vl~P)i~_M;gH$%xkL}Uy!`MpNZx5fT)G_ody1AEF7h8@Q^>5or+Z%`zgU;a_3Q4N}Ee*s|uNv#`Ln0+=D}46ji`f zK7+JywEbdhqY9o%uwbi)=3lDyP{4iNo&2?0ANdT@-NkydBMm5)#`U94% zTh{H2sR}isTL2BTC#$NqW;pYm24%e6Q?z0PsZp;nV4cZ^f^~$R!Ug4EE+b*D zORk=o)c68vK9sI5PH#5+V)9NjR0&uhsCMu}u=xZkJ=v@We|WbUMmmLX?D8S-4P`E< zX!&9(#mC_loEi#9+hFLGnRDLhp4}@H>1Qn(F1MXB_zk)ojT2@GyyL)?wJ#``roKIc zS&=w5M)UfH$bJBnElfLngl{Yfxf+bd*1eTq>BUO#@@kyDig(g^WE^L_QR?c(w(H0$!=k-|x4N+CRTJ^ei;ql4G5* zn|j&TENhEb%}}=jKZlGM6e(2e8(@^7^Ad0{l5#8QJ-QDym+G&F*oZg_9TB0OFTS3zpp8<{rRSOLUkL`2gffc`q4~ z_#_zWd$Av9yuy8He@bcTNERwO^vx_L*^f_b5~>lQ3@JQ?iUuv8G&W|l7o`}HEJBf` z#x2|-zDua=zFEwg9Jm6W%dc0pGK|%_Av!x|5e_JkHxKgPXIqrM(p6d$**Y8mCeUU# zl1-8Cxd4QMpT-l+ofJeHmm9S8iOMV@2Vc&>mUyg6d?VpaHy$5HxlhKS7<$gR{y`Rb zRgw#Tj|V6vncD+zp3e};`vKkdH3InOUk^Lm01eRTKK^^Zv&?amnPUP#%&&tecAb;9 zS7Y_;2|70BgL#{>bT$gjl(oo-A68PJ=9cG#ycI9*_=~$W9^tUpZ~pbK&*4<^Ap)U= z1#gfJvKakj4RfST`(e6?QfQI&&XuMuG^Ez>Jaw%qwW7@RvtsA@>qj7Ru?wf{iZSl~QMt$!G&9m? z(K&f$JWAWuS%zQ9fvk(aU)f*JwXf$o8#8$sFN@s-f0Mt}?Cq#Bd#Ynq5~LaNRw>xBUNJyx3a#|1ITNWd4UQ)RXVA zI@|qt@{jo)?p%#5!s*U(r^_!_#-VtrE_q9{%Coqp9p6x#m5LDLIhw0_W;)oJE&i|( z(+)@2&Yr{SnqN9DmWWN^gG&zL%2M2fI;_W3xLeST$6d5Itf6KExLrTf2pdVnsI(p= zmX5|dF2DVV$HuE=RWfZt%GuR6;Us7C_gvgiLIEDlU3b%H02QM_6vm#UFyB2)t>bDX zt5&v$m8X7V1A3gC=YDLZv=ys*D{V$(n|S6jzgbPL^0|N+!L)qiUiDeUk!$Vv*H~e@ z2C;f!HE(p>ZUK2ti(i)jV+$r)pm1WZuchef)#b~&xsr@WP$7Q*P^NL1?+iKSBeaog zVs04<->Vr1T?ig;+s$dEg(aP%uv!5h!rRhqYo%RnFUd~NItI?Z^cJ}sOSM&YiB6Es_t8~`|)k9y3enXGzx(*J|y%@K%s)2qzPyYS? zR_pmz%ewz>Hn(1`?*EtZWbXexcl-0->X*KY{{X8%RKGa|zQ$^HnfygAtZ~X(=b3iX z>G}Ug-HA|#yKn0o*xoPNjeSr%i(n94ln@YeK`B&0Ba*Apx8J7ybTc_2hW{;%ktxLBOG$$TaV3 zEPqqTM>kCoyfC;JM@r(}2#zL{+o2y_OajG>>h&4>=)C?bWHXln%s`?O8099 zDa&=;zhn6&cxBdk7Bc)MaE1VgyCxRs+Ha4rxmm`{!Fb8Uhu{yW%W(bn=dh~M zYrZAnY`RuM>9xMq2(-7@2HrnaY|4OvUn3OAG3E+=XbwK#l#hd7*5*$7Pcmz_gSL#tcb-g#Jr;CMgyC+(5%VU3)`FV82eBPtIK?~t?#>RY zxO;#pds%smRrc9v=L)D08!FolFV7nCgcAHQx!qe6hHd$ruJ$9EBrr2IIH%h_PO?eL zXid3>cCmGyUr4=u<*ufBVs%vo(FBc6Pc5ik5N^oTl!mW97-+C7q4?#lBd5TKNLf=G z_+>QNg*|s`uZE}yUcV*?FoBw`smNAnR;ti6dH|q`%QwyPq{5g}S5a=6Jv8^8|8a2# z@*7*w*&m;R{6BcyxAuQ{wY}Q^m+>sl{(tKw+W)tLA7SH#jrv`5H3o6K5$q3AIN-tI zpK|;L$8cx4-Cm}x;D=yLNreS)L2O$KG9Jdb*1^f~!QscYu<@)3pfl|rFt*_UKG01( z&7%q}%NoE_51#UIbh=?W*|kQxSBnjELbo+xe$)+IY{Qu8F*y|BP@#(ysu|!n%33Zs zD3eb}RXSwHDv>f6=-M%d{N#lbDM_m=bsFvCQMa_!f+)JJmxnmbCp>R^Xg6?wx70l6-Wv-ydH&?l{ zG}{C%YibrUDRd7vhC^0nZmP{kwK=fY2tiP@mqtGRzT?f4Fz>=%W|RM-5adG5Jz^zS zo<0w|pKA3AB6S~xD2cCFNYt~S9=kR%|6|;X$5EHvfmfS`Y}L|plC5e|Frmm-$T4sE z;%&AeA>Vr8kYetPbWsxnSCldPf_c2NRy1Fwr)q|o+PkkQDnCcveiV+;bc3DH*&$oT z@jaTLiA5SP9l_2HmEPT(kdO_Uy|dHNeuOfoMJRi&H=JJGW|xU(x?Y#MGU4E zPdEcQ*9=lHGzi(Bj3e4a*;!KEM3^JVY?~D+JRYJ31kg8(ZX|h!EE51KSD95zE^0I8 z7Xrf3G`;E|RnCWR*^G{JpRKHW`H&jP*o3SEN`H8etcKu_Pgvcm90ezJcAT>M^C6TI zRuMMy1w@5Opd5PZ$07&XfkIig;-Vi%1K6x}`5T0afnwAp$W|<`xkxh^Whir2VFp_e zsA9;mMd@HYXfi~(^oOQa{rIGF@Q;5qo1N2N_TT?}*f~9Xdw6;X{Qk_T20WVRBp_d( zOef|Sy377KjXoguTa`pjc@Q7e5y4dm&>nVA4la0GbgHGY1orUpavNEDZsd32ZL@ zJ}cY8`Bl139$Um$6?k>Jkd%B@UNBC=PblArX2gO_7kc*8HH=C|hIgrR=c~{N06Zg) z_h?Nf!FQ6C!rX}(Ia*HhYQqw05fbK_h9t;9pvkm4Tsq{_9#pkR%X1$;C{09f5#fLZM} zbf)6EKI&B!ZSR*~43pvd7soS9)pplr9kX8vifh1`mu@^!0-T!mjO_E&%|d8c9i5SM z6(`{|#Sq6-xs%H0Bt}g9&K%@CD>;3vO?chbEHbZhBOC z@3l%oLd~!%bP@A9nGPq^fx5-kN*U=Q+?}u%{C9fv4+atAeeDHXfi1MogQ3!!Fkwv( z5#-!EnVgr|J4Iztx7-#=BeoJ+R^3W7+bMzaO8+*)t~&S5${Sd~?#f%5Z->?J|w!b;dFaTy$l&c(C~1;*m7W4T#+X zqKdA=G~LlyKdf^P6S00pfMu<`93lo()`Im4(=!4Zj^3lGD%zQZmvUuvFj&lGGQKlS z)<}J*R8EeM8Pl{(3G(5H#*Q!Yx=5oc{3u7Nc$RMW7Tu0ufbqnMfSRiOL(o-|xTD$< zlP0ZVYh4~W^$*V8Tn$5W$%y^=x+dvN_GYO2Osze&Z0~#Oy5NZfOzG+^hWrF~ID-Kf zK=>r6dDL2!n|k_m-nLXrHK2r2Z5ctq)r>w-llaP~eKR??3n0PGjP>Tyjf?Hj--f!% z`dr{&!+BAWn~gFVe`rUDZ}f5b|6GM>XBZAOKe+jvfeQS8pFQ7tY5D)OUOs!V^8Z=J z^T^_VEG{|7SL=)O)BaiKc>h@QMJ#m8@l?^AE4m;tK?4rg49l0}qMraJhnF1^bIQ4M zkbGUnokMen?Zt3NN_h;T3iXszN~R7vJ#VI?s2hj^dvwRk?!4MU;PMFkEHTK4rZyw>7?h^gJB?!?vYn!EwU{YRTp%daX(e;$`Y{B9O@x{PjMbI0y0Y0va{CWe|@%m`;55+?M4;bceTqqMSP znISH?Z}>cRK~_q0t^q@|7YfW$q->I~#u~&US|bi)eo`hV=7v#noyY;(0TKkqa2kY2 zPU2lX^T!47Y^4t^#?Ab=#t(E-0jHjgh z|1vASzfXGb@5cmP`8U2^ar^A>{oz3y{`3F*jD~t0`1#@RxScC+`|3Dk(ougi_PD9j zx1q-m8b5|P-;@h?kwl*YD=a0)JEiRWI76J14B!jwFCclRQAHtJD~B!Wk%+W?@nAY0 zYf`~+bgS&?px<5xubTt}9cv&ye`+Nc+Pe^TCodh~Z`NXG;_-j>H$;F+gWcPSYRKJ^ z5bQ^|>t1xap1oS_zBsuh_gsA-ZtG2Dv6-D#X9a&}U1M6`yx(I*b0@Fb;E)G8Iwo1?(0Bg-tjP6;dT@5al`TP=!B_)#VM*0U2=v1le@Ug}&>#)I#`lm-@4Afo8 zS!poz7NJicf__k#4WGyB%{>RDSwbqYzGBg}Kz8+QOAjrBte%H^a&~RUem`3u1@iy) z%ht9f|HEG^{r^&)hmHT`YUVGznelX(1n)yE2@LyVIF6yQw_`Lza98{*tM~y3cAEYU z=ackPGQo4ou$K%Q!O#C)Dc;z#GSS7JEitedV1Q);vgQjt896`xbAcIDp&NeC*TIJndgU7T>hw zRC}DqE3#xm@r7HneTXLEy0{$SB9O2T#C`(akEWRm43Qf%BHbjSkCq;kSy;RXGC(-<7Acgr~UOu<=zuT=< z{P(3i%d`Jj8E)X!(aCY=?a}d3`>?Y8hPUQDm~6}-i@1%(9LnjERv1e#!T=^W;Y{ux zjWNEn%`sSymPN)r-4DCC_`_WjYY6|Au8X}Z_o12pfBEvi4bFkeJM3a={yqx!|L4!P zw(R_GtN8CrdKRbuX+B#gLE$VMOrw7ACOQYkK7@Vz-8dR1WaK2YHx<+{&&#M`o;Q{& zo~%?c%T1m4;m4!n!_Lv$61nq?qRyM~i=^*~*nw;_gNV=vHWR5l|{ z@cPx-HIR2Q-p$;$ZS6U(;P3*D4fIu}QMDD4ki~O$!+*m5O?a2?qP<{8yAoAsbTsCG z&=5)x>sgqaKA0P`R^BRE*^8~2D`U^1ni9Lvsdd_Cd5<)-$v=30$&c?d4xH37kYCu} z)luItT2v7$e*;;KXveL56ojlR(!{%#Wpt{AYZ4S94Mz3%)|tTNz(t_yy1PADoVP_% zseJi|f&JWTXXJIe+7NhO8By4>D=8^<>$Q+K&S(STguEXP&U@i5q1vTCw4ZkVXT9l8 z%Wps8ZpEZylAwD5xzb z!(JttZ0+tfj0KW~1v{V73Zf`^ry(LdwEX?hPu~51*zZpJ#8Kxn04TEmefcbF|GV8> zo&T2ctnU9;_y4Oyr~iI!|NX(w@AoO$b0q@+SG{WH-1FwW@8bqp08$iq+C!=vJBQfB!j^T%Fh=`!^4g*(lgPnDg zA-%@b@eQ*!3pmaV8EiWWJY>T=L=CB(Q_)Bzy9vP!^rMS-rypGo)Ii$sE^}vYZTX%{ zaydNTxxr_SjyTx0Vel9RcD}3aB&YlFEhYbtj9FY|xWc7ht;z9H}3a&XT zOQ)kzGNuK?1788Lw*(kyB;)jIFuQfef_4rxO9H}>Ca;j!vc@8c4vg@tCye~h+l!`~ zh1r9+_MJTW&$WYGB;!sLcCQu{0Ho;tr@57}|J{1Ivj1Jm^X-_Za`fAi)6U`k z!B17pU3_(Xxq>&x(Z8qhI4X)UqHI!S^50F8xjOu389SG-*XywGcj$mu%~++Pp^88L z0orf85n(i}p9dI1w82bNj?x1Pkf@Z^f}y9Kv>Og#efuq6PDU=%my;1Ue39i$jCi(s z4vD!xel%=6_^!xJQX1G33#EpVyroB%A2uZ51eFNsAhEG$M9#oRCKt$}LWeCYJ~&KU z@R40Tb;uOftYp4(wAe~n%?zcXA)#DwjCrUbgFjy1{w55roc?e$*XKDp9g^h;uv7H@if*U;5gSt<5uR<96$=_ws6>K$vY~UVjR=C!( zm?zq;9&c7el4iehX!~A1V0X@&6W_M{&?4;W znd5PZI6%SCxD%!wnOE>$<3F}qFYWVR>*b4QtMlJ7p4Itpb^g20^B?RKho`W)cHSJF z9v+Zhs_6LVsZ!vwzz%Z6x(beQ*Ku@{!kLkjv*-P&gD)x`N!PsyZxm5=_bx3d}E0?czR@2o<-B9yie>42uDB^J+5Ia*CmSg(RkjT z8FCk;+w>5`L$l7W;_=x3k1$ev=Ng!9I7i?&{uJ#0FSfQ@_Wu8TtF_wym+>rm|9`%i z{r~x_`~UMr*?+7Y559TX<>2JQ$J4{Jv(7L3r$_t8?K18M*$Qr}4>DTrOcK9KK)#;> zOmSXl!2Fnk`MwCbF$Z(K98}Oj*H>op?*7hq8u8!G#Z9lW#Y#yP`Y)^tDFsc3@xOT@ zla!f#WGtu+Oa6=rEEjeKR!?~^HZQm5~uu#Mf_^M7VDm(@%gX2hB&2^kqzDQ((A z?Agjy)t1ARVbA?lCVnZG+b2jpo~&{5<`M_k}Rg!WDo=mR!8 z0UYm*nMWb>r;9dZ^@DgA4*(SsOiX2T7xWTgKL!h@pWMJN%jydEmEd7pu}oWW{|1H-9K>43B?@au9@)MX0VB|G_!bDk_7(?G9Vw5v|XFS5s7!WODb6M zXQn%uM$k`&mwS@tOq+Yn;mDA^clF|$n-LX?dZnCKCChUGYR7g1KI{9K zXXuZoCm&AQhn=_YPxjkK$L~5HPmW5Qq;smxbtgxMO%f7+1hPe2Phjr^K1J)4Xtx1^Pze9ERR$FzbMB~{^alf z&F0o~JN{qm*^5>DpQSttjQ=zD)<4UxUt+`mD)-gOj)`uMM2AK7MSNLZuWW6zu8@O8 zRi;BAlxR2+oAWaKAs--nO-@8Y?$#)`J@^D9peO)?$-O^;EeHQGc3QrPp>n4~|7g43 zpCVzFDN4s&P4|j#b6#Ym1vyv9o(zlLb##^Ka&c*&N>jG)$xM#^bvt%uN?egEwjPJUHyjD=5|78Tr|g%XVFTm4{LFyy1mPC9BcQ%p^Pl- zH}kg<eBLw5nL6{n^~Fs-hLBtQ?0Yg2Xh9n!#vU^n zFd304z%rs=jiMf)&g%jWI}z7qD}`^gnpIgrHa`68ckF7EU7QI!9$ z)y(LBx1O!y|1ITN-T$ucfA3RIz5nJ7x>&>eqqm)dLM^qUc>aCwqONcOogA!?dpQ9r zhU{)PEi?=ideb9jeu&W)qHw6fB84&j09-cm*1p3a1;0Y!FeS0o?*(M zXaot84EklEiqcUG--bX=qNR2w`kl~J;()Kh>xe03(V~&mWmE(O_;ct=Hp6g$)Tl5r zjxM4xhWF(O{)P#Rllo&idY)K0PRSmw4+HGq1u@VG2#Yju0h!$b~T`-bdD2} zMu?;d1&fHqbWv5U@1Jp0F)W&mWJAUUAX7eIV(@beGY1?by48M{G3(?(8xmj0id_+$ zBGA3}Wnvv_&>44JkIA8j|Gv}W@>$U_N@SX@8byN+FJ1ThytClk5~gFRKlEn!4L&aU z4;Jt+g%vbdkON>*{I}Ngm$v-(;^oT!Zz<2p|8M30w~}4mvTOTv|M=|f$?1pE4uI|& zZV6U$+57W|EAPZ3bNG--3_~%0`1n3xNjRhw5Z#hrgP7eA!)ResA&4>LnFjJLeqb?) zbl)2i9?%a-`8wczI?67j8b;X_-(YIM7@E`Tfyf4eTp-Z}^gT_5>?WFGkZKTab;lez2#v;Lt z>Z)=|93udi_Ty+6yf!d343(bSMgp@O$@-=l8vWq}3|HZ5Y)|TMshsQsE=zQEi-T!c=4utKx z6`;@x(Esb@%S`+i3<Hk+}sQZnfB4dRf?4Okhp^`1HosGKbqz4$+k4uOi z5JoZwsD5+{cc2&*hIrZO0D&O+@oyH((q2f>eb%B*;TI{Gv)h7kOe z++d`UhVeQ`qiDc#tU~KN&j`~Jlc995i5CncLz4M&*pGi_+Ki2$jqw#OSUwV@tN~_& z__>ZH5{r5y{bt%yBsJh`K zxu~($Ho6_?q=urRGN{*z3JZK~YId!m@|Nn->>jIsc4j&>LQj`cwih}0XIB;D|E~QX z>1HvR-`SJD|37a&-?H_;P=2-lFXdV3e|`D?8eG8(|Nf;^E zAM9TZ!d?Rv6u6;a1MiaL5=MG99Sou|zBquxGvN#UgF#*ztOTy53tS)e+dmabS+bBW zS|Qul#i)Kf0P1!4*HOG(m^AoLXF5b{0*@mewzx@~ayXo%>MxIfA(rMsN=Inn(#?wz zSrWt-cdXjxX32`Kz%$k{fT<33K>rVJhS)@xW0zWdTb%+i_uW82@e zY=?u;z|!{yhyLSPX`l$E2G&>(VET{em7pXb8(51VEduo%7cEHYsynUgKAeEY+HW}R zL}NEJ@vvUgsj0y#10<|c8MGC{l0&|tL;t9Cbt<<7GEB?W&5FZaZ;!hnDodgB)Ol!X z^K+6K1Xi=t;_$D*@6i~eeY9)Ygh?#M_bw~)w_u(9-eKd;zw7yZa4>8Vo0Gz zN9Xp?0A>^&G*JMJ-_oo2VzL3!#Af&D)Aft+-|KKnk2Z(V&3O#Ge=_L*317DUy3u@T z4^gg4LcUBd6~baL-<-pncCA@2N;I`#(&ae52=S8DM6v5rO`X$s0`>)94*vMeYTRO= z$k^SgMpceRJb1bmSm87E*$Cx%JIK(|;8S z8x*aERA>LSXj-l{9H1aB-k^9{$U0mYM_xjCr}lCQrW$e7%gwPikM2L~5^eeXK*OFJ zZ#WS}OVV;as=O-iD1fGGVfwk)Xw+WY(d-rgJ_SFeSu~K z5itDVhaUp>xAVHMKiH3sE?^GeD13DMmX65h_=BQxY_X%YX76wwf!rf49*o>&ytQ+T zPj(ftjXfnbKyrQ^C)2clM~ZBky+&}w43e%0)6DMMg$QD4jC%RL7Od;o6VL8zCK>Rv zUxyuUMb&7O#vmpDt9ZgEaD%tjfW~x0i@yvluycxZx>a@k6s#w2Z|hmx1&Qi($$8WH zo#abRoj_ZKMnv@1YBI(^DeBTEXqiYSB=X9nO z?&V9n)z}gT#le>r0v4|P?`i~9y^bp_4E6w9`9w;)r;EPr(SGOPs#0)lAaG7uxmGMq z-s7xem}O%ZTk!l>+?O&?-6tt9@Mhgc_;>%DvlU%t&X+8&bZ+9wRfjWl>S8At!PyUx zYK+F}&B_^&iQdGZ6>y?vU=UJ}Dg#QT98?FLVDkxEW*GlK(E`8%lE64g?6{e2j(l!c zH}fHxpMLG2TCf40qv0X9H%zB!e2BJ=>A%Mq_)4!YLvO{XJKxbi!I2BAR zl>Oi)8Gi~%6Hc^{CNTEx*7`Y|feCl4UuYp5Uruo%^hVI0LO@M^j8{?j6W)-iSa=|?o-+%IQJ8YCN?E6bM9${AfJH0R z>6Fc=Tl^)W-`V}d!wX&uMSr2f+bZaB-6bfSD`scs-_tmnbdJO0niC>jYiQd{aK@xF zB{N(f=TYRU>OiO$FaulclktV=ncMM%zFfy_DdV5hN{7 z64?wh%`!~4h^ePM&Jyy+5E)~?zmZuW`P-Sk^0UEstT5yFD0!c88NngQ+KCg2;Aw^c zxIC$9ko2bgWI+Ozp|`~st$9T(*zU%W$q0qJ2|!+}6Gbgh=CUaQI}t*S#RC;n&2czIhhoU%0~P7Q$y&AT_g* zV=t5-4Pe0C&TXelL-}~r2wG1*9trHA687WKW~&i&r{ghn#xAf3D{_vGKWkvHQRap8|?IOOM5y!}X~msfZ)PT{Y9k7P4t6Mqxl5rDODJ*=ZXZV=w0<}Ac}hQp6% z99!#q!4`fEpTIj-{%Oys0zb7{P`*d%J^E0mTJD@Kx?Zi?tvq3_94+WVl7|p9(-`Xx z8mjR7b>{|Bk#zD8D8`U7cgOjI^WM#F*|d8!N#5c=N5Nb8%LUS@a6^@T*5n$HQHZi~ zT+RaebYEeyQhQ4HipH6iSO-Ndu~J4$iaDSX2?@sQpTXeZXk$%T<`x<3xegM1IJN5x zPnaZar;|EEo)cva=kVQw+7%6n|7P0CG~+@8A9)otTw5arx;d&qH=f~$(qcF)@K_GX zFM0xlUEVjWk>GEoA;sQff7+R+W7kJ{7IXv`G zyn*4re$AjhVu_QJ3mLO8btPDFHv*eI_D&7)5>SPtI6f;Iz78ynqKk{T8%JaeqLQevLq1n;1eMVxuz zi*LMFs}hji9zmL8ox31_f+t9EWwc=)+@W{sBf*{q$};f>iz0)+{IgUcc6Dy2Ek8*f z<%E1iP1f8wg#B4T(r{i5D1DNO!LpAPB2x(0Tw)lJ zNH9_IKu4B|hx1p)r*z1AtWlXKyuQIYp~w^XhY**!SrOq&CW*9gL|rUhgs)|=#m`ra z#DAfGp`ysP5@~gb0@lQlt1aJiC245Cwu-$!#fLAC{D$qQ#!WdSvO(8)RJ*80y3-zqc9$?*|((C=Zar@+S7zL zu*Jp^&Uxb|84I2={U*3z?lc?7%WiiQPWh;{7$@ibXu!=f&UvN+6v`$%R1;T#>vyg! z=WHJ^9&qW60$Y4I`{f|$B@v6m#Dg$VqwtZesPLbSjg2gsX!GM{8|a=|ZX2|(RmzaH z#RuZcA#E{Sld==6H-p+Rx&)HDj_QqIE2yFSFZ>1XM@bsf``l4EsSeE@urtrdeBQ_g zqudjo$W7sdtT`v+yR8zVM}-@&%20L2RqtrCYklUON{=ZlGiILY0NzbF?lB>u+fPz}(FQI!(Q=0TSseOs z(&T6FDi7OTYK^jaX5-lhY?rv(Vx2!z-qvj#Fiv2#AbWL^j@*C`R0D<}gmOo8j*HipX$ppFOe?-8S@_2lA$UEHS)HfA~1V%lKyn~E$nXtk|RK3~3L zVE9q+&-G`|8^N>Z{}MLa8oOspoyqIm9v&|{1|epw8NVWi_3vpiVTW{1(fn)hnj0P9 z9(jv*+1oF+#GR9<1cfg8NiwdfYMa4dw}Pi!3YHvBd|iKypP$&hvS>{Rb_QTo_sMJR zw95yRa=BWT!T?H)M74Lq2n^Oy_bRAOhb%Z#O+ZnH$=m+fJ}DCIZT-9>$TR>V$0^1? zyRU-taTI=fWtMJgrMt59dg?CSQl-~b+w0l3xq4TXR&58eZA2n9yZtji%L>$J0a2dVd>y_ga|NE8GwuPhT@T0S1fsB@WUCpF1Tv z1<5`PE@5{Sr@cZ!f!0fh3d4%Mtp|qwiks^MzXK+ko9$Zjg_vsw`fCU1oM&&n(y`PI z?j*sZY;s#yl=*wG4gv!Fb601!J17pFBliNpSvWBu+B=3aY~~KPY}l{$iaWubTw&Dz zEqW~Arhdo15x$(;!YJwA0e?m#x)|%R8=s#NV1461QzERZgz-SMCOCO>vJ-^8J_Zhh zu0KTMOKK)n`$@_+6n;KVH$e&r#c7!$HDN>X2JEup<`5*xcu3b-818GswV58b^#J-4 zb`Qne1o>nh!y%f0?nHceHF%ZFSM_!P<(KiWbm?f=6TJAi&52%;r%^ISHU`Dnr(Tkw z7ZL?ti$9*g6g&-{tgputK|=WN%@qbht3hM1UIF8G)e_daqBo1_BI$?4kH-WSU=QI9f+^_N|r@NjQnbg zuYv=%;*R+$*n&mygjEOR)~NK;r**LkIda$6kJ0xxv!vOgdxG%c)HvJG7CWC2d(jmf zBSskbsPv)0bLY`+VmpPG9GXiY6gTJytE=l4OI1lx&*qM+D&y!qbQsT>p9<0CX6_?D z{%f=KytQq`f8B1r*jmMZUB>h6#eXjw|Fu-i*ZHHpmWt833ZuI0Fsf&V?+*{!oe%is z)5kQ0kGhJ?U zshvzOG@qU(Hz?L#>5+Oe(u}Y?X9$7;Q_iY5+aKrAgwa^}U zU#w$KkNOzb=*W#t(T&ChvvJ|+mV+8am_m^lzU-zXbE2go#p)n4dvV-Pd73UH2PV-1 z^)!%lxZNZW12dm#P)VjkWS^jBd|=Dny;5*Zx!#m*^jbT=2J`Xpv?YI)WpZ?-Z) z>|h;QWN$wPJoj_(9sJF%G%)EzkaWA#G2UR$W)lLKA{Xl!1DYF*BT>1A6IpV+M^-s z(IT_3bnLtmkKPvsH5hH3Ef|)ahJ(+fWLAfv9^jX4vB@Mz1j08EQpJUh$#2ktmG`3@ z2H9G80pcayW9b90oJt;qSu1b6(!rL=AJ1>=;^An@?%^_C{mfWiSfR7&*2vgIPde>h zVPFP0OMUprgC%2}iXn?4ftKrmvRvnPbuuH5QZB{JINoIsFIXB2PLrh3aKjvrMSM>2 zX)G@u5u-2@1D2ae80{17NGD@sht>NnrQ8W#(*=|MZkxZeIiMv<>Z~r$K-FVqP~N81 z)atdjb?XC~*LikxN4E_=dWW)}88wqE!sGz*+KYdWl8aiqRS)*$4-p+UTODQzq_l}H zr9mU#$x+oj#urUKT-ydC&?1Q1by{W}d6$#{3dyoV?y;|B!+yt9A1JT$yjd++I4Btk z(lceo7oDz$d>mM8xalirqm?i1LxA2;HVjL-3Cb#?%S}?YUfU7Kq1`fGIhRT?PJQF! z#E|W_5>|!yZ8wtb5g%h&xo=8bh;SeSA16X8kHC_N%MGOTx^WMt^a@%Oj$DLPmB$vc zRkq3KjMXWa&#CHo<-5k&zq{p%zbb0&i;$p8AR`TUuk|MkW8D*xM3 zo^Mb8ztW>GQ;$wb#1Gqtr=9k%9}hbxZws~P?iyJoy3j%plS~oUJ8XYNVhIB|T6Vl8E8!YLUtQYEG*GKfrUcpR|G<4j{6I!I4IY#c4m6!faD*+$ zT|ToN`ObrU|2C&-XUCc+kBraY$cQ3V<&p;pPahrt{dBm?pxSG=nqi#{C!O79QGuCxY2Js}-2qm|demIaB~ONk=`(tKIjH?MIoE;w=7<$SUzwIB7$Ajw{c zMal>rw6LteZxN(>&^pkiN1CHQ&Pc`uqOqHYKeVi~da{ot{{zbf_Iw$`_O`e_P{@Dz z{JBs5$H$can=fB%z4))-`QkwEKi|0g@1OthatNQ|?)-#MdH!2XI1{ese;H4S`9GiH zioZiXL0BMW^0`+;;Nkgzs6(lS^IRq zefaL^@T{}{?ifBD9dv&D`R!W}hTa^VwfBz?4m+9<)Ow{h6--_?~B0CT_K-Lpgh{pf<(_TUd%mi!KX z5QRf_C!g&KbzZ{nAR3Rx5!$F;h1cxF-;2l0iU`)}Z~s33^vBviucDAVV-J}T#lP16 z>E9gwrHY?SC!^^EUi|;!!DW`foLkFic&W8O%ebE=|62R)N$^h?!Y4^e8%psZF`jO4 z(&ZhzWUL#^oxROH--j{Ppv!XVBH%2qh7=Owp_NCmp%4JYBSFjnQoXjboHhOW0FB znB4tFgbk?Gv9$CTWNo9HpYZd-I?@I6JCp}{j3Et??KNbK&GjZB6(*)nMnz4YK!twl zs6)K)T*|rWhz$rSWI!_mjhtaUz^7VHWLCqQ(Lo?P2d(`aC^#a~yX%J^1UB)f9~Me^ zb*mPY`~$W+E+Fw0dK33C$wSz^@=@OZ4Pi70dE+SfPdts^wzQCs9MjZIZ0;W1pN%VSEj+7=H<&B>@`9hjT2Ze zsgIO+-8%)3n*tto7R|Ychvu9Gn?Vzfvm0vRW=(4|JIUH;9AD##WE;A%ya@bPj`y75 zI#sn|c6WBT06mYL!we^ohd$7*o=Q&%{SVzmb%5ubC%2ey8l`|r79j=tpXV={w*Tjg z?bgcwb1Bct{$pkTu|!4K$CIPucIW80^W(`sIzK|0qc^#Jm6h7a=%~W+IP{o;`1E34 zH5XL?1cDG#rerrs#yzs62a#p~bAo!5{CY}zu?fe2fUTgs#;d!SR5I!TcP?KCH6QV? ziqg(>`Q&njsmWuF;yalItBZ$5`5uKCZ-#Rg7Ouxrx%|LSh_2k`bTIwybib~hLd>6P0v~2TXS>@{SPrhD!KPs92gfkO5_25-#Dbio^vt4S9aEpXFt7#y6zTdr4(dY4g(tzk$+v?jWO0?of{ z^`c8SHgrSG(n`)r$lcD)-iqKm!6@#2;<_yyFxNy;)Vr~0FP=;hw`sz3qKW8FRTCl8 zMijl!9iZnUcN-MHe@t$*UvFs60q+KBD{Cc(wB&VQk+M3LLPPNJH8Aj$vb0c|0=det zzA^}rEp*e)B)r@O2z9FtVbQ^qKSEKdS+IEN(@-jL_ep46hFwW+9l7cbD0>?0ddU>k zHZUdKPZ)5p9uNb@siLO1W8g)6fo_{a5wb9djkMc`u$Jz)v#Rpi=6b{Thi}_#B5SXk zb?R3n{?u^V2%hf+=OeX<)M-)0 zphkvGbKa%MO=$;sc?9U_k-z9(?Hq~de59Qw&qx1!_AkuIHu~q*zcft+O^00Fv_9px z?2JkxdSwsIRFk-LB6I;kF^4cJ*em$YZtxub^Yp2Y=}79}szKTN2BRNNGBBhVqZ<8- z{rRuD$(oSAea9D)i1^63BIk!@DmW7ajd$r9MDcvqSe?!5OpPNuKAT5lzE9zqIsecM zi&ZSmisxsq`0^m~{|xv4Rj>bx&VMhqGxi@Zx1spz{I`T>b^rem_x}sK{wukkCmI*0?XwnGe8im`OC@fyF6 zt5-1^n9FA1D=--d9X12uoJIq4*$jk=dI}8&WXWU1pg?u-t3z4H{wUTK z+I9r@|nEbs6rS8%S)|uD<1TUh8`;oWp1_<&}uf-U9_LF zDg*^6wK+YsDD+J})#U&FUFRldnF1>u1B(2A;RImYe?H%Ct>ph@Jde))v$>r;0K89n zzazuOT9uM`Y&Ym&LjS&?e_xhK>#<$tB(qBG@rX}YvmCJA|JwQc(eaz3<99Qkv#ciE znLjXS`MB^f#jHq6*_wi2LU~k6mQAaiLe-|isxD!qTB}bRl@;nBlanb6rR=v=*utPJ zt!HwuO;?mHNf|>DuE=En>1-Q@BzK&WO*4|ax^3i9eMf=)!Bxl}E=#wtChSG{q*9%o zfE$X~i!IB(^VV6>N>?_eYWSI>PuCGqG|UN zGYl=&N51~2wf!P%|J`b?;=e8BS(N?-pGiy8IlnrucLnw@bt zyo?s3aMCsiVHhT~F|&=wYCldkd+GJ&%^00C87SiZX+hc^v7ODJ??C}gBt*oApO?-C zXt#d@D{+K|{&0f9gn`0+l3CghK{Nzt0v6~!_@0ly_q}S2yBQd=?9n8+q9k%8L9WZ= zhFEBDvd1e)Q5udPx`gXAb{03QrYNA@ zZYp~Q)0fn6PwWR`{F=e2umyKDZQ4?YBhx_;4lXtOT|;)k6iS*$qvjY0?BqB?<4oY4 zWZ66#Cpd{LcchutFAqL`k`J(Q2#fG_Ew>mShu^iEEJ5;`s6ByGK&lzbGQY>qugp^l z{c!jVTN)Abz3s~4DEA&vcEGZ38j!zcc^vw}+*N-HR3hqxBN&UWaA7EM2ei-cKs*IQ z^8m;|H@{ZlC&@x(XXgEy`j`7=nDeQf12uFaNg^S_1WxYgfCxl2i3dDcueQddSBFl` zLQ@fdm>~I!tbYn+QV(Fpej3 zH^T6YklT;=(~urEAgXgI_-Xie!2!E+%;A4W3(vbcPbMKnaFH{OuuWGHDIdJ4ch7C>k2=u#hp(-|p+6 zWrt6wBAI6}4Gq)yFc=LCx1K4H4bLEv)lH_8V0Rb9UGg9jkO$x6OOW$f%j@O31nE4OWaXt5h)P1pe|%!xEs zQ9mS?DL&#?)ec$yp}>*0S7kD?lYoHvi*rfZv=8lO+v$we{x4R-M8lg~L0Rr5im3b7oAgSF>dh=`5BS z_#jyS` z@JKA2RNF^@E5Wi#`6>2oZ=0J=(OvI&CNk1>_I65RvUjHYwX8zuD@I8PSbAr$EOIQS?$|A)V7~apAFDB#=yLTeUaTD$vr^jP=uda^-eHuecbx;d zPM*cmfJZh}!MyA>j5j2j%|wbp8rVSs&(l&dNM~`wva4iT z05zKHT-R#pC=TP~#p~G-90?8;k5iVbgrpnB&|nNmdJVf0ur_uH683MxyA;zOPDDTn ztY9)MXlMwly=6y2)Cae5F;0e)T74szJy>>sR(3}_3g?pD>mYBuSw75UEI$^qHOfe0xKE;#BM?$nT%e$vqq}u&Rf7~1 zvACKy$@r5zYnVLL*O;tJ_9R^YUi;hM+yap;KauzX1>Gf} z0B)=HYg@R{fANzQ)XeB7KEGOXg)s0~t{q{3Ax?`|>Z(T%zT~tqQxTpr`h9hYBx5|_ zeT>SY)S!?_0iPDdk{KJ|wsQ#0P1NtNe;Ot?!{80;WBnuVLx<0>cf)$xEsgOpqu`{1 z>s-Q95i8^Xm{t}|_11m^GKs8!R#O&>GmZLE&J>NUXB(p+7)-g%;#jEwLBEC5$rT`h z+W;V^=a=~nx`5tHKDUXBYvpgURgTJgj*~D32d&?tiN$jCC%;IB3EY{S{ z8XTMXeQ|^qd7t7@)QdyXf8(#sQ(#Erb!$F4vPG@_&CN|~qlXuy(|&&=>~2gyZ5|w* zoxa-~jT5~5PB%}JyRg501RQL$7r{w(vp3qfnhg4Dvl#Z-(<@E(>}v!qzLRXGx)$81 zDk1SGKjkVdXJ?xkiuk&xRNEb|ws=N)*7VR`s7M>kF4YDFdQUBYm25BTSE~hHbzKhR zUMl!*FAVUr_XhbB$tRPKNVZ#e=OJ!73&<=7q(*UnCX^t?vDs%6o;P*+WeY}*?V$Nh zsk1-D0$0*NN1xdY_e7$!t*Cfh}lQQN@5PhK2ud`YM~otz*n@T@_2?@Q5Wc1 zEgN%JHLc8pJ@+$vf$d80QFn$mL1(ZnB7{*{%bT7VJN)Aq`6}$cOj{ zV@sZ@Ly39#5hoApn-I*=QpEG=9Yx9>E9czHXwpIB)M!8fdvsCB6=g=jB?Nxm@`c?= z$QOZ@Ad!D0^H0(N^A|eIblvpIc+KGrF4=#1C4Q{aVXx_)Rn$QZm9#1xuvU+3U6|mk z#$%iWT{(HU6o_})T+NNiakui#IGrXpblr_=aHi=*tF|%7uNYMncr&%Fm#xw3$xX5j z(#j>p7ak|D1cDF;0=p*OPLKFq_Xt*(kpe}t&SONw^45NeMr2Mhhz7~{ZX@{7Rmy0G z?EY{erI?i*V|@o7&VD(lGpHp{JTnjlHt*tz#AxJ#HeB2!ag?YuzN8(juCQZJIFV3? z-IiysC0=}SAM|fyy`Vb-)#v~q~ zWhmvH#%bN zk|?WyCLz#qvlR%|6@-15q#j=I^)d1{kFu^~jZq07X@eRsMJ8VShR1lFF}5#ye&LgjlN&)38lEgO$)Am}GILVp0~mnnL6@LxVP>CD@s zbPP@>TDD(L0eu(c`C^#I&?3d?OZ(Pz)(Ip%we#{b>1aIgtt$9F;?j_^9{P%+QHL2QLMz{x`swq9eBi) zF|->K=&Q26M@AS!Ja24J5?EBFq>feDJkC*XLFSzEKka(Dm;xP+nLifzcbd0w$eH4t*uoj4R z?KixO)HENx-v4gEXg9-g_bSH7Dx0mX=3lm6Y&V}9We4H-(-4G@WVkU+H&L&)x%HRL zR*Rp_jVK`+i4flvN~p}$828{~7l?)~*G>;3rd_M&B@LrbNho5g<1Q6Do;{O?z%i^p z*d9e6d|Rz>;im}A zHl(OwGQdqPBnKm40H|Qa=*v1(+$e$iI!7B_bS-7FKs*=$ZzLa&s}P{X+*`n89FX7v z3i+r|AfG3b2}%kH{BN{@2d%M6GlF0#aP(%RMUeEIyIoI)z|tfGA$yVt$HR0C7cpk= z<<5hDda>2~YsM*$9Pnt7(vQ;|-NABiwi~iUesK&M}*O7uu$EvPla8!0KN|2J&xEHxfa2lZ~8< z^lY4Vr3BqIh+Hr>^*!%`-q@#Om&sT5c3HJ-na1K{cCYavQ9!_NC<4oNn3aIcezM>F z0!3a~zU=hk<|yT1IxkPJsXMMIwj(On&GW~PNZ}~JYlr#lYCVep>pfyc4f0u~<*g3) zXynPP^|?O7VW11m0C`6-nSv61HpDNY)68rcN7(zDEpunces_4Q76r@OWjnmfae9wq zC>qxU`Zk!@Eq^lZtxZ#fSr(1gb+1ZF5~Zb%bqQD4mxviapCJ9@G9Bu4E zf&t>3YgZkv?=os-*IbFo(HeIsPDc&TB>420b8myT@-s6*y05D4iO$KMJEZe!#Nf3G zz_0t5lvOLc_d3}2-&|g6r&pSO-tbruKrS%~zvU-T*LDVQ5H1vMX{AjyDDWCKmBAB3 z6N;so6D#|-RY%|Vts-qF>|>|VAi3tg)u>12XAe4X0Ht(4v4|uyDJ4L$~& zbtBU4%WnQvaW`}CtAQ*Ks7cJOysLeapLV>(6ku@LH6{iI8ZX+c=-kesQ46* zxWtBnuFuw3!XsM35h-Za*B$T8_GuY0T_UXKWE5qWQ()sJ|6q(`-!*4kG1A{7O$kWo z5U)6U0&#e#T?i2(*%Sp&o!DL1Z~n<|3mfP~X?Gl-lS2?k5?yWJa%YO|IE51f-GmQ7 zI3~WET=24bdzbNbl=9FQZB7ebr?vbqe1Nk&vI_JCe)`A`AM6EEN&2|sR$%3o+soBhMe88KC;4A zzA?FOWmPSQ*{s@fepf85=rss-tp>Du1@Zfx148wNrsBIpICIxax8&VN9y58$dz+ukEc?CjRsG%k7o@|1zFM+y6hCH~-hxUwAX)=`ac2 zqsG36?ohawHiEZf7V*zj@vp4n2O!{S`g`y`Nk1hMOddAuCBsJW^MBuizriX>^jGh5 z@aFLC{?G5*urGf2xPQ9;vNjv>Krd-9gT{E5d07B&Y#dOG$ zzR-9m-wX56B=H%A*KF5;sHE&Eq?4rZG}mnB8K#7|i;b^S;~2e|E+Nx+G7SaM08LSB z6LvBo((XsY%gI$ExFKOwLV-2^J>G=>plw#v6}RRvf>@8C*=1` zep&x)5X?JHe@|9mSL;=F)}XU5NRG}_AhXGLC8_VB_oLOb+^0CadqrW-@#M>Y&1cUt z{-4{=n=e-K-!h&>%YSob{t)ut^I7G;=ehEqGv6$$R*-boRr49Ec@_?)Q9pPSox_eb z1X$kz0utc$3fwAkXQOnE64w7p1pWF&(Anh8GQuS#q$T;t?MR8=Q3LM(%IqLLZk*S! zY{Q}aZ|CBsSIQUG_FXNPki@!Rn>m$}OQ+lo*2j4V-awmIm zIqxVD-<5kauSUzZX5!L&RqXgs;W;PRB)`W|=0ao^F{(}H>y~HuGUAGyjTzISy2g|# z=s~P?D9TW#i){JYTMpIQ5NV;V7C0%{kXroI=yR^KnrGX`FZ-uQ`^W9h;qlKOI(R(% zaHhgFw(A~G^0izHs8MN%y01^jvsStb{l z$O@C?N>G<+!=7j*7Qq7fHCX1t5t%TB$>Lntkw=G*2U-#i0ZomGI1=YnK>#Cs)0g`v z)Od(Y0sI;=kbSpUK#Afqyd4(RY4KGH*qrMzKY5ybz6M<{cC4r;u}ouJCPxX)!4*b`D{{5P6PVhB4%0MuhOYPM7)DVb2(*^ML9yd45p2=Ly*0tD{?2Qml z^JCh=3iiURISa>O`Tfvt!rUJDY1l55-6czHlB~Af*aK{q8j+XSFo~X5o8~vUX?o6O z;^;NQh2vLn%UEy-%fD{)$OKRXZwd27gB^PUvLxzOEU0bM-hl5#kHPLc8N{<{J{Edg z`mJ1z`gNi)Y%AlG`NGX{`S)Li_Ft{-trzzF-&SjN|F@JUbN}bO+iSkSyO@_nS4|6y zuKE?<=A0eA`)~+??$L4k@bv8P0F9JOUg>zNmb)OCgqNwx*6z3n(jt&9EIOvnN37yp zhi{o7wON307Wx9DJo3K|^~`0eK_kRVsO3ir(z_J)EF~(S&@A(39Gtbo%K*^944SM; zGJ6LJ45|{3AOqdDQIO#8J6-jD&23pk-D$g|-O_8m|5;{5+ARz2jEpSckiq>#Iv>v7 zNujJ}2zM0Jt`Quc0I5KQLnNBRH=Va9r=9jsM`xY(uOAPM3XOn{&*?6Kx~Cif>Q1Rn z&RmYYzA^9f2UO1`|A*$HU+z=wHg&c>3itmPnf?F8%V(?oe;LmL?SIH{XL|<2otM1g zoQ6YxWz7`Xf3FN!9?phZx@c9im^P|aFl|;Ix}g#jU~}$9S4kg})Y2V44`vak6u^ba zsYY5UpoJ*H)`S8=X1b#YPCO6&eHJhvaFH3n={$DHq zua)dl%J{aT)va4ClTowGnd!x&-I>9*)2Y0Xw;q4EPXB+nF9zh@LBKb7RJ8c4A*FGq zmi|(|QTV8?5_C(?g{wq_d>}O;3NVBRz{n^?N{!vlvba3JvjCTY7lS}5m>(;+rKlyF zvXN0Cx9nk3r=)v+HHrP_DjViq%}k8czA?K7<&gW@Z7s50idNC&k!3V(YNkw! zhv@MYI!NV^eac#`lfYfSm0Mp2fHhF!?iQi)T;F1cu9UuZc|QKv?yr2{uQMUDS!u&W z-K^B|Rcg5_{R~^+m=YEEFPHCKC;jo{=(tUqY4lP3@#vVMx45;`9A6xP4UQ`QUl*tT z?AKFgeF_$l|1%>BJhY(idHmu8##-yd!;56@17Lyw=hlnum-hLu_2T*J{I`r}(dWNv z`9Hnqzt*hhzt&3s`v}iaXGd=iJ4eTFPs-kN8|C$MoP%(3r5}gzS~s5D(Lw5h+kEwE zR?BY=fBgBKacfu){_~&w(x)ds{(ROxK0G_Cul)%F_3{p5z{5BSG5IHtzg0mUeFiv3 zF%;&CEZq*CHCrz+JOs3a6CCz~=$6bD`D|0TI@HPPqk~QMp!3V&DF8MahnIs;v{%Cb zklD9DLMY1zI{|iAmw;<`?gu2}N|wJ9qyscQW}@#6Q2vNW21D#anKY=aHyc}xW*r5k zu36VkD8i#T%I`Ib8I8X}6mGT}fqK!R7sj41Kc3sAQKCL_Z4&#ixLhy-uEt5?|) zT?Y$e@Eweq`+GD_YOeg4R5dpxrgI2e6$3rH$CzoQ`aom4 zq?pv)QLnjKsv2bQH`jP}T=1EJiYW#yHU`J1@iao*QSf<|D@-I6qG-YxZ2j-2Z5Bxu zHw@7Lnz8cy0L?}d8TWc~y;(0sb`;VS+s_}VV{lL0$bT)uW14B3B!4dUQbwAKJ8K>M)V=kB2Rns~B6MygUezJ!J?g^4MKAlv>?`s$e~EE>7)3 znFTtCqDekdFxMjaz6>a%5~kJ==6Ll0A#G3`Z5WVuC|fWL1YN#p?$u_PMYi=+WLhRA zWiYcf8!;7wQmY8dcR7p6Xym(s0oA>8jesW?9U$#I_*oul43wNs2Pi&ZH0kg>wRnjM zD?U#hMRi#ww`{X~vyw|_QG~_(BgC(R?Yz_g*;&Q6h!BuaVRxU6!u|&T-_h3DJswCj z$VoWsMdwrB0ygr$Sd19nd>?#o;9D=mNh+^YvrJQRx-y^5gf*Y#(Zn7gPpOxYI$0uw zn{XuQts(nVt6+1JXYt@i5~?){`uw{aSON=C`F zpLlE{Rt_g+v~T~sZ+hus^Myqj8gOpowKFL84-wb0qNV%r3|aYtyvn^x zaswXGJG@S0nK#KQn|GC|K`7C4qxxL!|m-4Lc|5o>Z_b-7!jrQru z(VLPYh*8|Q{)3Yn)OMInRFqw2Pw;fDBnhR=MKH0GN1tZ*? z^MxbPTc8Ojg%T1qE2Ja|FTK@mtGv=ugIySoqHY}akFg@twB!~>vo ziW?&Ts#2e2BlFmtNoV*RJ1`o%-vF$kGz~maqlDOH1?Fj}&;U!sz46eF9?i__!<(0M zOU(L$HlAD+4}$It>()9cPY=x|8wR4 zxzb&fiCr;Y(!ZHA{VhAa-&YWAb0InX+|e{2I(y&3<5JF=VzNpf1^z#+?d{C||KjB; z{^L@f1>XNZNIJ4daaNo=HEh+Cu&bdw5u@t?Y#NBWY_r(*^w3k>v89x za>h!>r*aCgN02nEa-Lyd{;+~M&7!kf)+#xKRVuNHYbl#@;GU=IaU>Wk800F~*ury- ztykrxmYXY=Wm*ay&UO zoTq?Zc50>4V!6z+G>25~O2hPUCqz9n(*ll{i&TmiXw4p4wfaRodHR2t-q9r8oVyRy z^1pok+;{(vk8S_;to7`_g69huU*YqO>;Fs4zpw%A@Hdq$KnmhkLA^OSX^>e)#+YE-B0dY8@jQAxrYCAro(9( z^(wfunywt2QXuO zOEtXhZJ4EN>)%}_7;=SYiK`cmgB9#(-KLp-h0u(X*nx?^N_y;Isz;!Jwc2G-D$oJr zuI7tKfq<8PgK$?B}!ncZW55ZQ4;w z40_tx;bddQKyk+{woXcT(B#ag?3pQ#lRmUGvU-;Nl#u^ZT)gqc-F?ab&q4IJ<^Si+ zmHfYyXC?oyX23ntsi7FcF;IJebJ0`3Dm{3kwchs+`Yw{c0x_6|v28W|3GDL(q;HC_x75 zvVnPdbHP{Hmdml%SZ+h2gQ!<{ba3|^^ipwj$ebN`*j^<8I`FuUQs4)Y3HNeN7g{mj zK|>M11)d|g$SAH;#ATgcBQw~G2?od;!=JExSdEf~SQ>mj`>Vie*%HSy!07i?@kOU3 zAUK3L1u1)Q4jswS6D>sJT^-%o3pRX=ZsDx4+bmmfYtK7$%%91EOj@Hh&k@Y)GSf=U z*?&!}^PL@9d1s8!g+YcO++9wfJZ%d9&t5j%rhPstJh=A6Jt9lYvL_CY*UeI;p z-fd-$kNPn;xQWpdM3|do&X7T{9-M~5%gFiVWI7p5Cr5mHa2C1fC*edgkl;G(Pa|tE z>Lh&KY_P!@m#y%=1+oF`!DUXJyVlBRX!IiE<>obj$JW`-tTvZ+o>`-@IIaG`i3!MB zurm6vYtokMOk3$tTj@;elnx$R!hYOO32_AE%5dhhA3jC#zwmGK{P*nnD*w-No^R{? z=L~I;4NUPq>HUr@4EtUk8Xx@7xPN-MKkI=pQ}+wID?;XL9>?fSzPGE>e3M-p?L+Ow zT^Y%9OyTX0gqG?_bD_O5mqdQe1!E9O_OyeU<(*~lag&mG z5Tr)N^2=ny7&1;>>F9P`R(LP_;omV@MjsAdZey;$pPn4Q>zp38e?C2?+<2Xnx1Ifu zAK(A#EZ(4j_ni}?|9o)F(!^ImticxV4YSN&--lWN+D-Bvn(v1FKFT)6-55$y4lkpM zmve5dN7iA=rT56XnpqcX_H9)^I2X5CTy>#t*rX0auY)Xcj*GB!|6N$IF2W-p6d91I zEuJfLv^Q)7E^WmO@(SSQ$KF2KcdL_ZIzwq{I=B2ve0dXvGIz#%0jjf=ytV% znwpPe|7gv1z+A%qp>y!&!)+d|)$Xy{Jv(Q)_+!nriM%;F`?%je_(?0@i{ZbM?v*FN z_*;xDiCJbfl_`aeG~XSB=_In=Wdpj>O|byb3Ky&PsNr3Oc7$w;7NT9w&RpjYA`d zhZGJn?nmpBco4BWExrIK;O_8_6aBilomkWDhuC$7`vzhm)Ey7|c+)`g6JfSi=hzbC zg9WQ&T=lATru8A44!VplIC&OEm-)=BD$1HwNOn=tyuxuER{8#SMtAf|eH7gPKYRW> zbN~PB`Re|EDbFhZ<0}8-%66fY?ShOkJfro3v;G6bE-A`RZGWeuI_wKT+nfAkHkb87 znb0Y6^I>9|5eTJBeSYOqzJeC3rBtvM5W^~^&CE_wTMjNW$-%Fs;OVx zrL(kNMWr=h`wsoP#}#^+*8cOK$_)aiUQBbS70?=U>WhnXur&|jT$;lM5cd%oI62LCwBE$+P}NNuCcZc&08O)JaM(mIA)> z%ASOLxwVA+qsuxbR{kk<30>-=>r&Vwc9CUklm0C$e67zY zeaRi}b>Ne@bevZfoz~}&ofax56%)5E64AueP%x^HAEBYpIh!MM-rhc+^wY4#i6uKf zJJr1pech9Ja_|2{jE9+`KB}i6{!i=KOFRBg>&5d`{Kus{EC1is9okav&}1Np(zj+t zjeEJ2q5GH2LAXs-NMK97Or1GYjQ^Cm!kh^BVkX`fA!6enOtuv9YcVGd)E=tu1@u0$kfpZf}dG^<}3lejG z$QF_8)WL6GYc6Az^8x{RS!9~Cz|eeO@y>m8+&(-#J3MF~ogA0kx-(UB zHgB>~Q4UKp8hH3?j6go?#uT~(_brpDv3;$ePrHR)JZ9A^)|*UWUnNlL#3D zWJ-kcmD9LaXxgKn5J8d#aXB2$2&<}(9e2*}Ixx54@UmY-2Rg{3E96mOe?}No{WL8! zP*QW6oWs5`j8aL69gIVl=%HcCOQ4!{H7N~~DR2)V)qIZ!i{T_>nT$f2zEdBrvasfw z5@bJ66tJp&%8}pDzPX%4C*HTL_eUByE~)R7F!m7RN}Z`UQGsNsYu;kS9 z;YWYmN?#6YR>>PQ%62YyHieDA0tj*CnqP-qkX} z62wmFpOhpyLm!3u|1I19=h^o5D*pdco^MP4zsmpg1*sn19KPNE`F)$^GGTGTN@^f{ zHOn1qErwU+D5ss|J{ZOzG8L^BM1hRFpszrbY6R01%it7o?kk0nH8cOyZ^H!6J?$$k zi7mrQO0`)pOpjknang|p;>k1=6afSSGQF?_BD(EI!^_E4Be($yQ|WbyeEvP&g#W{0 z0+Qn8g0O!R-r=_?K!gTwaK6k-N+r*8j*W$Y*a@^ZDislTNnea?4%aVxLID?wY%x0 z2elnaTHA}Ys=+|nEnc%d7CWzARB}z@txzEd83DJud}{;Q&J0EdvMzhw14$(Ar@=vp z*H;0Wp2uN7{+%nR*2z2|(`0ZF4&pwr19S+=Em#Ahp^j-)0Z|V0^1XNf6e+Yy>>cxD zmHH}Sf^Z<4KBJb=PN3OnIl9Do%dP6JXHr#4|6sEE>3Eqf-h&<%>d%Hi6r|()uP?IvK9&E;A%Wektx(NHo)Q(Tu9Zb!A z_~G!lefXvWE4$PF>FBKU@#N^ZO;NDUjCu`WL~i@B$WlCXO~!mvDevSeP#U~N*@2ks z>7lpqxt^SxF{zK7R}jpX|DM67ZQFl7YpvqHEazFY{P%n@^564W<-g~PivRMwjHSu* zRrr^$U368>P8DTXPeqq7tGxnw?@E6mbVFg^A<_<~16-iYRG%=m*$vY|0XXbmCgXT= zHQ+}6zQ8Z40+o&?(3SeLpblB~z^p}Sk%bMF9EZI)9CpfAP{LhDig4x4K8!uBFp>>U zNdLV4KUKYFjnprnI?9)Z#p zde6pPO@4fnP8?#XDUBX;AvB{W+~Y@}w@Ut$0Bd+jh4F7z(b(SOos(a#9{x`@R0DuT znw~V7j=R9N-rx`5ov>B317`1Gdjw~F^<1;HOW1(sRQ7b^yXIB(cGvp0CzZg;izvpP7>Kg=28Rr&ik~hB_cU3 zX#j=^ZovGy08j(_KG{1lu;?q)m zY{AOJ_@HI*XB@9vCN=>!je7l9Z5n88`SFUB7G2<0cpWik$%ayIq$DLq|DJ~Z24`SQ z0G0Zn(6Iesx-_-7cBty^M}mQ3V#uO~uOx~SHH4J>cnfB@!W3U7Os?%kmt&9z;SCcR zNYca%yZ1M@T7kDg*z3hiAY&{W#7-o@_&SEY9cBAze-cZ->t1VIk~SK7j89X^;OIMC zTDrbo4Aqlic=f$|jm_ z8DUpRo`oQ zFH{0`}FDEXOJYlezbwfa0iqAMmO9xdQY3EJSWsy=g-$dkIfFud9cjPA7IY`zez#F69g&Rp-5EFjKBfxZ^&~#?amp*i3 z!@G(>MkZOM!KRNCXe667f-(Le+DB0iNRq?Mq$c=ZH-%G`=*nogrmZw45~ibmJRxt{ zM2j6WnILlOs%|?Nci_0uVZgi&#;=S|-6VB=((62V9l(zo{m|Eine%B34=V%mR{cdaB$uWH+xYZI;!=d1faKmpKBdOaS%LX zOb1~ucm@luc>-rqYaVIgCK>m88#hV+0tDd=ScseN#!)yqh{s)Y*qRLbp2Z6XjNx?* z>vs@toTKd5A8n$*j)MBIM~XaT5b_Udi{;5#%g`9Za)$hHrX8R3I-IuXN8P4SSp>;M z6mgQD)*!XVFz%y3y)-uMF5S}TRfq5MT3ISAMP3F;ksKsR2kA)CR|^Q~7HQ}X|M|T< z{j~0T&p43q8jKURZEpV9t62(prF^F>Nu8gMkJ_EHk3Sur9@ce0+b3^Mc7hN4zy5d_ zoE*RZH8^?;?*jNm^$y?sO`|s!dlmyWZ9YM}$N-KS!7xJAbvOp3;k#P1{<`@D815}h z{cZ3xxP$-R!GC{;|Nd^F>E~fQVe1>iHNnwVCMJut*my9?nmTJU;VC>%YvW*@0$K)p zLA%zB)?d_p;Rm_gL)Y?lxF!w?-rY@-ULupfXoSkbQ8A9j7eojLx>gOwd}|T4QI;)- z5ZBA^1#;LzDOux`iz4a;paB^{AsQBnhwWJhfA3PDdqumJ8l!hwTD~Qv;a%|5oY}~m zIb3RESWjE9tUPNekH&*d=-CPzo0()b(bi{eY2M#jSdqih$br`SqR8PM?-@{>XuVM~ zW`M$SgGt1AGT45j$O`tf#$Drg9zRH!7eZ^=Hpad^yr%uaJZiF2SIZEa?@vQyDiwul zCHKsZaVW!7r^#lWlo;CECVvZiemOP!?D*178jl5OzQfPGV6MvY*>*3V#<*YsJ<>(8 zy`=fxuD(bznn!%9%)e3!E^z@p7KHj1(9*G5adBmq4=yX;p7k($6BZ!PyrYYNVB}xp zl#Yn~J9cLkO!f1gW$I7&So-!q(`we}%#;H84!9iR{y2r0(Nbq4$_Vr}_1v`4jZ6_EOp_-v_J-F_^j{+N(r9871xkK@u#+TNahJUlqs ze}D8p`xwpS%&?KveX__1LbrpVg^^NtQjcd;gMDW2_z#H-{##LY1C|)MUv-mF9Q9n2 zNTib2nES`0qfb-W9srUjU|xX(u~8qZ4~L$^f~&H$$0&Q8FlhE+`8 zeU4x8`k)Y*{CmdmLXGx5u(`{|wx_*eW85PXgO(4wwh_p#Fiju|;3iselvc(y$1qxa zF|2<@xR#jBVt;mAGs8Fo(JoB0M%MQ@e&ZnsACDGMIYhZl|0{>6&i0IC$y!+7<0SaF zk(EPL^B~JXSEUxPcJi_`od5XsfAWx+@y3OBtyyrE(QF{PG|5QEUbCV1)ylzFDLv<` zJB*DluF`t^7|WxuQc5oe#+Ex`U0HJ!gyHdVe(0bEtEco+It=0*eH7(?X>Dcmzin@=;(sjT$;AI~ z#`Y)|B=swf0#Q8%X@%IMc02>z6-tFbNGpUo!{uB)K7ze(mI{-={gDRnr863X;FA^& zL$8*?4jEyh;)uB*h}f&HKyUGdyJ5r}8kWVAbdzUya2LD|G1G|rZ|CBsH&5D*8G^lf z1G?(5ThV8d*)^l5u8Q{p%St9d&kIT>YFLrKWZvJ`*%)6^bjpTjb>v&+X=<@$J7TMn z=GY?nW&iYO|G3>bJpTDZ=i~nA{)e-gvSO?^vf#Nu+2wKypSYa1+x5MM))X6pGM~1G zhmYyfCgD+)kX|vIn3G^L_7m<*4YJuPBVmqv*<=v>gPCqXk%lN`&q#(qoT!%6lcADX z&}q_Q4w99;ij9`e9Z>?~Jky{Yw8KSGL#mCw^3H(<&!FY~hx;fz9gj7-KaOrEaw33% z_JEa+Bf&~LuDHqO3B-X+eLh)tnYk2Bq42dM)^lN=8ogbF+u!aGzH05d8|G^PFtoE1 zUv#=28Zs02l$?HJV2*tC9xBXkX3nbqek=4Z9s^h2k~wrs0a>i%BRK2E8=S8-trAU> zI*QsSLvedgge*^m4qM}j9Df1qeGz==5wdwVktq1|8QIw>$0p_UzYGW8pSY^}qp+nH()vDCMYDtA< zb_khGAs9{v=g}C4p#@XS+~j9#wo25TB>71t%*3I&Ngw>*Fr@>t^~*|fKudJ6b7`l{ z&i!rd+F+8s=pH3#hGj^BCe75jcFO0jrEucMN?=zM=VG@zVOQ^aviCcYvsil(4A|V> z%7nept?uTK1wHHZM$tLR|6$PC>TETv7ft&`D|=Yi3pDK}nsyV-q9$5)6D_-mR;Oiq z?-T0wceff_do_WUI=ao{pkC<(n%M$Pqd+TLp!Le`sG04kX>`=gcGNUFYGylXIy!1) zJ8BsnwXz+xjE-8_j#{Fl&qeg2lbgUlYe)jRBk8cFfBHiN_3$@dr$V$4O8ER}Z7sxq zr*nz%oT9N7=`}wprd=T$BU2G+w+V<=&ONVOMOwT_lNZs;j9Rzw6GF|A~jJ zpSr2}mD$6c)k8C{ho+~8rqzS&B1f5?iQp(xzIP|u3J_taTApy=6AF1~N1!2e=2y8h zf-U-j@_0$V#_0>B6<${|V(E>z85~W5qchm?(=e0o=`-irwbVwFzqG%ueTK8SvUqg6mh*A*(R#+n3N~56CM)P12`kuQ1zW73+7}D? z`fTHpt>1$TMe@#qWvFNHzZqnxdnaw{#r7g--Fi{bW+~#gUlg>tZMV5?x4CV%x!u{$ zG+9x!D-i7R#X9wQJNtRNwA5E1^W{r?>T?E$rUM3_Kv*CS<_m-Ba|VW%1BUG^4BHwE z+gTX4H5j(DFl=iuY-eHE7BCd^wWW%b^T~UTBHO%3%N7Y|m!>L-Q^sPPUHXJ^Jn^i& zr|ur2~lx1(!#T} zW(A5lS#6MzQchAh{CN@IMm;S>`w+xu4CJBdnaXI@L?3vT`#-I}hz|Zw>#yISZcNTo zo_efMvU9fL5g%tekr+}L-e)B&MTdjVqA}iC4Mxxk9=RyS-=sw{U7Dbsye?{onacQZ-&cF@>aQd)=T~F zD`gNw?v|2v!+yo> zriq1a9nMvq>C(5NS;6wFnU#MC9xWinB_&pvYtiYY?;5#<N#39?=AUi4_FmX%-B-s7TN`9~=dE>YU5_IpXnf7m6Ehp>i4$0b%mLAiK08=VW}!g6K$tc@cV*TV<=7*&-qUPsL2AZB)C|+G5I_d2#tcn7+9K z7COM;(SPm%oQz7yZ3eX47V04Wy{Boy?O_E^v?OIld3iG`WVK~U8Gy&mIGNZ7Rko5U za96Ects5V|b@%F9;gpiG>I(M&>Lcy8d0S=P0W6EOG)*_qOygYZ0=PNepTMW?Gp8kJW5AB7pdLHU2=l?U(mr~_uF!}yJ&FyCEndSfU{Q36E z|7R)BqWynbi}C+y&FcTtD)j$ZIng|<6U|3``>j(g?3H!#{CpcL<8 zVJay8%fYi|>*WqgEWMatqeZtPkS|j{nIy}E!-vh(5Wp!3V&X?^Waqj7jS2t|9f z(KNlvz6A;i@p^A3!0zfYapR2cB&N57stW`M8v$Dv$&d^ptrCDr=v9PMeB4qQ3HV;eQSbln1Xyhf+I|yg+oEIC!i+D2!T3JCX)o# z*v%CZIB$~*urIW75=?h@|5pR-8=2DZvA$+GU9=Bp&>y>Bmz`DEa#_M%%a77H?%G&A;%WbHO-qVZwVb{=A{w``Xo_8Piz z8;xdbHC1C7w;<8jo!j~|+gQsDSxYt6H1n7;4vZ2NEP^afQa4IcY>Ca9jh0mQZ6St# zaAL)%WMW2jb!QsTdfIFG+iUsYYsvO3>{OyQM50nXvYk4pJw@_=I&uyeM%GL@RDtt`EvrRZQVdnd@ zpa$m^INPXI`1jzZhtvWy6|Cc2zA`?cPaI4ee!A0%4Tq6pz1oN>!i3a=O{du}yDfuW z>URA*s!y%M>=o6&(+zkrBeRs8eL0y~FI={+u_P<;uwF}n6{UApLS`Bb6}H~rW#51H zEoNeaBpIYS8Yc|HC_n?A4Gd2hhUwFt@d%c5MpoXBiP5f+rqK2S3>l3@`9Pqiq zeqhEB*R74MOesDiRO(KZ$`Q%990ZUx5QYYJh5ulFG=XMg*4RPFH)R-eg`WzC!QDE` zIVOGm`6G9ZfjL!%ZN78w7&y0%fwhHdZ8c?ES!ZUFNw5pUVBX(W%h^`T30F(DrSBXZ zLuxxVkrbrU?iDaF;8!tmg)|5+!`OqoJ3sR7oXER#BJZvMd6`;G*;Z!XrMH4H`!JYk zu;m1D1see)wHrgWf2cY z(~QO60 zX~KV3^4~I^Z%_U!8UOcXnfSji8}kPM&Lq}aMgLuv;95d*JvjOBasTwNq>QSUc3LH= zS0WEo*msDWnB$5?+jGmV_H~su z9Fp`XIqjCqJxL3e)0V+<`VA;8evCcNQ~h8!80*ec93&oE@xh?lb3#Rd9y^m{@nGpt zd4M9rDIKU;9qcma7e)~ufhBhDa!x2YpAM4gaH4XjaT@FNlVs$_)knNJF+womiz1w{ zT5>w0i%El5l(Xu(Gc6M+iCUJylBh95o!!OWC?b<+0&SHf6838N-MZx~(`PHMPqs7V zbUNmCKgKN+^V%bNO>13-CDv5kclE@{%$U2tdfd5w90X)P5?;%OjuDPs8t}m;n*l!7 zESvE8EdK%tE6N{^0h?&nM2PzeV&2t~vm|!SHmo}K?;KyzMXVru_1Fss#EBE43Y0xC zOLv30&ZQ)H5ru8&g-pxTZK{OY?UC#XCeKru#k@?=;X3D8%MFv~8TE4b8=E4> z&hE{4UTSI_Q($wU_2xYm z1fJ%w5=A*zx0j^!GX&2*T2+FyDaY{=tI`kuAJOSE#6Z+J#iLvnLfYWXS& z(Mzq5Ob$Rsm+a8{;p6+x{@K~#Dg1f%PR@X7AFp{hi0AmE-8q8FhaV1)+lOyDZ%tp{V7fX-;aiulPjJ^bf(*Y z0{f3=FJ3;k^#9LZHeamt|I2t5t^a?v82$gVS@r+V7N!4xR!0B-YytZJRRX}rZM*X3 z@a;Y(Dt>=>{I30zp0>F7KEPi$qxk0ep~ZhY7dO39>V2m=zCf*xm_#q+4)1KP{C4@( zq;Z1T*G%es06FPjN4jL{k^#l4$VhX>PG*T>c@7*>@bn}Ow{@Bl09T6beggDsd677B zu$wYkX5=oka0JhX6$ED|(;pr|9i`PsSs=Pu6TrJ0uaY=DutjTaa!guRb0~{sXw;nN zN-60r6>K>)>PK%tU^lu-`aR%)J3E~{n@H9w5saV-W;ljbx$)SCXcDfAJ4l}75eQRg z%y=*^24*12u?B>782iZHQCzO~tTg6(3`i3Kf5G`Ex+LQ$<$T%=aeL#7KxymFlHev{ zzD^m3tBv3YcyxRj9J83ebV8(UZ<}&Y`9KgqTr*79=3NjRpC#ABV$8Apo5%v> zKfnC1{+!nYsKEZ``O8fFpVsrORs5f&Jl~f6kE2@iW!3`cebW0Kl{?sXwL=4f@Rw32 z2P!%L>EV|+O#wB~{oA`V{*;W8X+QCtAXc_WU-Usl`?K8X!>UlyvOT=4Vh9iT3JcBw zdgUnb8iH9Bd z&rG#xQFlN}=v?%D?m4BKpzynMw1G>eGl(aZ*o?E0g+M}$0H5ge;_FI8muZfSCpz7D z44d}c&7}XHR^yU(Gq{3iA>-ygOFM$KcS2yL;pI%Q$TrTy^eO^u_oB&QwuzTb-H^LF z@OE|-oTaVGoL;NSd44C2E-^9JtZP#21f9_xoSiR|aad#wT(%ibK#PM5o0`A5aq_>E zRhNOc$hJD+e4x!alVXP!?ab1~Y>T&{Y>s_Rv&TY16ib>~{KW1r1eS??nyHu;5)yE^6L7ldEJN-20W&8*(psvfp|C2>wW_FrIcS6Gn{-i5nRq#bPtX8AVJd>Z8(`roQ{rtaoTo9= z5q4mhSK$CLJdSQ=XhfH#QCO@t(b;Ayo_Aag%tETNoirYd`mh;wddc*%kLSZ^+WjPG zuiQ4w@6%N%j>U#pO5{^{trcrV!ZDZDC=fv37W=K*D*z-oi_4qZkrZ z8QU$Yo$31^HG1b2vsnR3!J;=tJymK=!j==CE;EIV-0#q&Rlpdn=17NLbeYE8UU=ph z^V@(D9#=k^s2pf$L3-US^~dkYX+IT4Tjn92)sH_#%s&q8M8h%r8xIzj7!im4L`@m} zS*q=F7|SAm*(kFox6HF-oTYP9SUFVL4yp3D+Sj}UR|$twZCeU6#aNk@itY_9im2`% zFN^mSF7ggGsx*XqaF(k(7`el1xVrP~&JLFe7Uevv3yKeX{wrtcHD4bE=l@pgWy`kz zZf?I^o&T5dEbjc@e6dc})cFVEN*2xW5-pm);zR7=@h^w(Pd=6nVrUdEKFBUAE}!5x z#>;94KfWQUrb-|B&{t8NNHE}p_Z*^%S&8ZSdk_WW`!%=g5p~eerBt(}*OYW?S^MnK z8Ev!fU6w%2?xLUld!<1B&Q8wOI+G)mNth4KIlqpltjYR3eH7~dx9$8Nt!K|y@t>FS ztn~jY{r^h;pA+Wjm%~%oDS!O6bOdOl!s;GijyTO?|C#GDKs7V#g@6Xg>QZ2JDX_W} z2v(N@@>yL9JiPXMbt$mA6nKD30ZlGgTvSa{dc6PhUr7(_Iif!n=l^`M_0o?2_-wnm zI{z=@S@ik;d8PAzh4c9H2Hi1~IhE7#^~Ky55v!|%v(6E)-qW+g0}P8@E%c$U=9-?g z`ltP04m%(A+ownWfPDe0A05A|YX?q5Auw#2zS@yeslt)dp^86ao+PI@Z*mX2fVm~M zM_U`)!1RK_I5`Kt(HV!YC>{IBn-j|LC?cDUsqJ1cOm1+xzaNL+``b9@nM=+wY&`5w zlQ`_hzel}SJSI3rQZpc`sr_q5uTi6&lLwRkyygpKe>A*EjKr3B*$}{~Ildg$@T1CP zd6C$m>9y`q+L4(R@R3-7FIaa&p(#`5+%9u2(_MNXGmyt23>$&#_4%w&djM6ip|G&I zsjD4W#5{IX$DkzKHECVnKG#@$yt8P6$ybeym1VfVjkUovcfwoCD215v+$B*6a_uh3 zNzl$lS=XGr^*ke8Oa{Uz8yMA)Mcm`D{6uY@nuE<2UjsWBh~=E6N>wFO;)a5NF}o`; zQj((pGOA8PFzfuY^)H5VgYb8a!KpT7X%YRAwWvg6zQl6SV5})ZKy6E|BzEJq2m#N> z6(4N>_sf4O^wPY26vh93{xakL@%-h={$nZ60_{Iq)#HDE<}dbE^W)EN z-IHI4Mt}+u*vsLw(}Df*X9w_B_=2_WMyEOQy{RRfazqsO!QP zvmO9lZQ^pJZ3BQsAb5(XQ8XSQ|3y2Bv7izG)J`yBP>os}y!$j#y)sB>Q;54Ii{#cTXpkI@SlR;|F8FZZPcp6@7lF$@(KO>bRC{u_&@a5tSb<1Yw@TaJgJTF zB@-wU%wQ69`$_lHO$=j7#=U5~BWqm4X2wxZBa$CR%^eG6uwp2?AG(*~X3ufg+->dw zq)@b}z>G&b4q-qw-YVI6Yj=w`4rm4OX3e?sFn&ckMTpQz;GhDc}~5Sj>(a4fw@d7om#Td4&xEV4&_; z)P=ulBXLK~TB!#i zLl0+AAXixPAi$#r^z#;LAnFNU|AzS%d5iUmMNR{vv)&_C9IuIHt#`oDy5TkKM>kK{b<(;!hDRV6z!CehyIA*$+onqn8P^ zh+!DlO3(T8FRWu$a;|_I?O6-PNypv2P zu%WFvqjM|OF5e^E6!Ky!S1sc?%*N3LX2^g&b_9^q%|>XO zn>Vn8%9sHgKKvP7qj(BOpcGpPh^pj!q#?NkVz!PC>CzTk5?}tDYW6xzK{|rlnf*T}IuW=3oL|N$lK+}7vhv@HRs5f& zJl~f5_ozj=l7g6iMIFOmCd;#i_W94=bM+J89 znl>csh;^>|W)y)3OmR$VAX#dI<~-(XsHkUsD~T+*=G3Q+j^4AU*H+GT9Q@KS}5WLME_ zbXcK8VWDFyS^PY?EiTGK)D{=iV#WpwOl2om$3t&>tA{^+`A^R#G+!SD^564kt!(^< zXU|vi-!h(z{O7*gFLZQ#w3+I@VzK1S(b@lfa&%le8MR)#SbJrEr|Yf>=>az5w3EV4 z@Nh1SKt28BlDrgp@c^USCzXPX}_8t=eSnZp{=Pq!HDtf?C4HUO|LgxtGIH@sEqPdI~o1| z+56Y^HjX4w6rJCCigK^L)qn(&K#>$}ie!JXM9Z9(C2f&zPp@__d67gzh*F#RK=Hx++FWh*ucy6Q+Z-D-wyHDe7E)Nk|aU>Emz zVJOoP2Ab%jhLS1$=ysx5DpEbZHf6)ofQNfaEt`E0_m&ECsIrS%w`1t=o%Z$z%v00| z!FmnqKBYS9uNv1?8g0!lP4&pD&W29bATo2>G?3+Ur(;8o+rh|frtvc%qG!@VT#ADp zkwL5tU;c<`{(luV+@rx2LBV2!XZY&#R6`YQ z%4#4-4bs_J-`)ah)fJH>>Q-1xG7urLR-TQjMy5>4H_#+Hoz4YP`JWZ7`s#~o4+BCN z#55mgL(=e&v*-j!SAv)!|EW|-%{Z27jCaN9ByW|CaV3fP$nFP2axIrO?sKKiTP_7@ zAeu(aw4>;YLEh38G(rZ87fEH7P~EUmyH3^guPgI6GyI^LP2x*9&>g)x{IDAxT})?i z$fkSFoNkUIZ7IQKuz zfKtQgdq;M&nK^{_b~lJ?tB=TW#jqZ+Z1I*Lx3y)`i?f+D2Fb zk2*!udAjQD1O4J(G8{qurV2>)OPLUu`2%zW3x;K&*9`?#7UroJ4C_=@D-PB&C)fEb zC)@cFntVn8Y|3d8p5JB`IK5b7^G(N|2F+2Pi;f|Yg+T-;PRwkLPE<^6sj8h2$NC#t zOGkVbw0~Q&Hz*v1i7KMTGG0#MA7=$o5wrYEwB{!(0|&MpHc^dHqAsD7gT2p5RyIE6 z6D`WEZn8h)tU81C&a6|a?(9~BU&##fW>tiJcVpkHyG0+!J}6;6yi5Db5Yn7a<-4^X zQgF=V|LMkSL8sm`kTbJs#*d~T^mIG)cLGbar+&ur=Rmz3#AUSfQaT_o|Cm5<9c@vC zqxM*oQ#*i9&wUlEIitWxQVGx^7?0U*Bts(g+$c%0ijbtuk=aF>_0y=8O&OB+_cbh= z(GPxg7P5>4#8f3rqECyt>DEy=^$H*)w7BjwJ7OZrI4NR3NGF8dPWb)s(w&HJ+lk)oJ26-VCI+=T0aWAZLwtKY zRCeK$imqWUdZfGO!Eec2eG3GJEB`)F-$TreW5nF}((5UzoV-W6mOM4`MP8^=r1;co z>v66W(``xa%NW)t8QALs8I!0pc0wxkfx$ZI4jz+F57!Ow>eGPeQ~u}!6OcHiFo2CtBXryoLlyD|ed_f! zx~)+=HfqOuZ2>RBtu~3R4^TA1-F6T^R|~8j^8_aRyml4F>VRd|ufiD9pkXUm1zWMD z8Aeyo2jVnLt+77=tKNvuE>sWaW#jCBd3`ZKV$wgrg;@V zWB)>Bp*@R!(x0Vt`!XUs!#UA!uMI~W@rO>yqSnAuYoON}=(RSUxD#Z17qdaw8WDV` z_b|{tY=6A9F7>hFD;8VD^nR2#?xgF`krh!)Tbl`l-2Y>slD8kj#x0yt7O_@%twQ-2|OI!paD38 zhgslsj=0CQ+nh6+EU;tFOvl8fVvy5Wc8PYZtKgJDrnW2#{k^clOoyoWmv|E|1yOZK z@jmgUF+_K*c05bW&sdqk!^?MXUmm_c;V%BIs3q=mcXwZ6C5}cV6SX6agqMO5GZ4hD$M2f_T9|H-|Gmg&DPFSA zQt2xlanmC+P|SFoU+G|U@9tdPLZ~=F9gHG0NCvcpOKN9ip7f0N2Az+|Z>1BNobAJ`m1r*#Z;)e-1_~#@iJRxp}XdEGs&Y3gf@hXizQfdMU`E;I&7`kZvNbE+3Dkp%4 zLM_rcv$MeXyDaBHL8hG%boOE~KaVbw8!U)^`I3G{CIbcDM-BCX0}Og$)@v*qt7aUo z8T)DyPwY?9fA?uW!3zVL9i2-X*hR{LHu@;B@}Jlz@l(@zpd|fOEtbv!Qt|_Po|zcP z_)drOk`Ct&9lqu}k#$X?cL5E5#GcoZZLNzL?7&XnuF~roTbr3EK|CHrx&>V=Z$-lr z!wqng@V}E@DQ?Q}ll02)^6CI{3hrA4 z;GQ3iP;(f*XJ+34<8X$l9A^uzIwYCbE%lV1jr_Q}O+k zsuaRF^zf$_AKo6leZ9;2gQO$RuA@9H@Q8d46vOiaz&Se^5Nr6@XVxY1_;VF5gamd3PGp&hQZFHA{ zzVNL!-dl8$G>tDk@uh0l)2GDG;0$(#jn*?(QQheUJKDRWj&>_LYF(~WQWzHU$vFO= za#E2{`>F8j`*GQwBMepzy>h#c5$B1=4xB>ZmX^o8}02! zuC}1=ek)ZxeKmcfWS+Dd&x{{uo(;BMv%G0fvt|#x&BlRd)#L!XP^F_at;gjxNx`vJ zyR_a;Qq_(tGddKDPs539%su=R+;k#kv%G0fvt|#x&6ZANq9b^qBbY#z*Bq#ctW#QV zXHeD7r$@de&g3N~5EM!aj*3>M8V|7)e%;6K`Rqa{c0mvGNgs2aPV*w8>q;iU54#}- z<`df|bl2jCRLv3t5C_z^q@-^ShYUfA1CXkDuCCOOAc38>1m^al9tt61`0!^NjX>o0 zgJ@I#4u94@(lk1IczY?QcR%XYZPj2{9WzBL9i^AlJU%*L?JcQvSnT#>jqsuN!46MqL3|$nR@P0SYBL47C z0Xi*`bp2 z;B6KW){#CuT+RsZAEAnP=2LM^ zR|7(Y=|l|(RXU2AAj(e1H9(NUQQb+^sY2tdIml*{T?Zm3t;(y=N=c4Je*dx?HS6Cr z@QVN`eXP3&ObuPV6RM4{R8Gl)5{|vvv^KJ7gjn}}<}+gVT)2Ar9i=PpvIz1mM53m6 z?yVHh10Bz{)NsdmHeAo^NgCL)VC6oC=`x3N`*A}xh=-dn2ETiS18->z^#kpDL<4%i z&UP)st=1|)yP4rzYZj2swd>4NujO#BponAC9~kuqHunqGmp;mBFRd>Ip{HtkW*#*~3G-JtYKXXOF~UooxZw!wDC#}?MXbH}Ko^`x%sfMcP9R@|8XhvT z>%ki$;XNZ=pG6my=_e}~5+KcIHGVUz@s%+!C%uEEpmIwHgIXJWDTG>m5H@6VEw1k0 z>eh6w>8PSw3`C-A4fpy&eu0yNZBe%3+bW|i&t+nTF-O^&^%+|P#U@=?Dv_1=-fhl7 ziTOjt?kWZ@_Ef-z*ijACdt65>1emM2C0DPx`_LpGv^0G4R@)tOi91f#%rrg&vQ3i_ z#UkNG66qN2;4whSAd8Z-Bx7zV%$_~gyp1-5UuHImD2^YZ_#*k33ImN%3jAw?vp|_6 z0nN<(B+O+Su}qsC`&cNmg$Yr34W7nijv8yyd}{EyB_UVvzKGAviXr0&?g;X&`b-o5 z*f_sA4=NrP?#+Kg&;kRi0A1>Q(Uzb&J`@i!ZfISr1wF8Yt|xY_Q0+aye=SjN7#U)c zp37iMEp75~=m8YXcoR1sWaVcl@wh`wt*%%)Ah@!$>tCwGF1!7V3Gd3Fnh2h%ILPeZ_x zaoIuS9N0@OkjIg>Fdoy5g$=ZkjOh`HtykH!b1SHvwyamnKn+~XJ(kxeHU=8V!bU-1 zpXwU*nhxVyjLxI?C?TMWycD8f?*+0QCsSGFHqkav{s=pHhXgLBGiE!BDL61?G233u zFKXglsYy+rM{3iwyZmmXkq|A#tgvI`XBlS5=Ic(!TQ2|e@y5aN#ueiY$(qgPx88xH z_INAj_m0O~f1;b8v`i;0CxC?F8Nw~f<{k31hT$TL=;}Ph++6C!HqKHK_SIny_zY}m zTFi0f{Ub$p+h3_oeeFe8v$=L`aLqPc=YPKwgu~p?&B#?BRC=mc9i+kxfW8KqfTV!{ zBaq((jkp8%SV~th27DTvJuAk}A@Nuoeo&rO=%<99NeOXnN~m&&X+R0(;REVXf`?Vm z*C4yV$Do8VDZ!{+l;mq;2tn@J29lSnE^!_*`S(lGH_lQbIW82#8_q%kOE z5`#KSqD)0M$!8$5+~DP4ZJ`CK9p@J8;+&$SL2X%Cn1eF| zxcrp4ZwqLJ`SSQ;L`Sr0ySBdNF^9+ju#s&H4%4q6RT z+CoOYK$GkaDF0Y-HE)rVMnH|D#0j18=MNHRMdM*)#3zlGcir$QUKEQ~d>kg5HoT65 z3b(k9qo&u?U*3t7CMnG0rSw(-^*!ac3iwDv4RpyoU5v*!D(C_a=ioU!w$U04wiFh{ zk%uf9UnMsMI(3iMy&c9I7vnxh&QCsR_}S@q z;HTd~8T}4Q=y%|!-$5Du4$A3wplEiW(Qk>GCq%#Emukn5kl2oGbwe~n=$>JgzkNcCw#eh;I)29}tm)_ll-cYbNPB5qAJeiC1$QWvFz1!{fqFwd_ zA3dT7M=L{OGAKA=;gqg7S!w?<%l}2Gz6=@_FTJ#i$3QEXgn}Y)I!tO=StFgw#$?@k z7TSTjv1cled)HCah2K4V5!35U_}`XMDCWO^Ta(X$AKjd0agf;CHcVE}?D4L*WQ-*@ z?UDc?+QYBWUz}mL5R>$kA|5*5cj@~9tF4VkeUBsCU1^s?J*a@XR}S@dE76i6O-mOh zGxlr)81~vX!BR;zNat5+3aj%fj}ln2X`v@}nCDSzt@kx*&A;yc)4N`&5_IhJREk$J zy}Fhym6D(DG5PPHr8+G8Sh7%66SQ2}hx257+Mi}ZiVa~G7vE3k+3?(lSW1!U^($*B z>j`c+;Xxv0u*WO%#RYPEVM6!_`QI#;tflgnKlB-LUX>E~v(xJI>} zQOyVkL6tiaj9$zHR|s$i<<)rn9ekbmJJpNUqTqN2am}jMnB30FvIng-(VQ)GFvX0+?+lc!RwRqB;h zlCxsua*}x}RVtY0k1)gKqfejY(winj6>Srw13dz!Q;v%eLL>u7{|h7&5Unv9Eamrk zefaK&!;=qx?;oFhcyV(0`snZ&-@X3u;{EqWFZ)MtPYypEAHF;}diS>f{rmTi{_79& z5au=n;x;(Kv$WVy8Adk*r(ZvxPM2r{g|%l}TljBpXS=Kai$AyG_}PE;Hn-x3jwU z+)ni3qJX74N-jEdN_d;%MaejUgTp$(p)?IMR|o59vPxQX7)lHr){NC5B_ zLjQUlYy3cEh6#)GG_?A`ON!di&<0wQV=U-XXa>{6@RncZlld$gEYL-O7t@>nTUHdw z4D--@cT;2^^J%^q=P)2NNl#Hi!Fw9kN)2c)00Yrai}A-Sy~>8a_`x8YAMr}yLK`AE zqu~-H==cH;VGBxLgF+l)mF6%y&QIr8sD68s4but0L3n=yzKNB3>)rLJb({i9hQs_~ znoMp`up!L9IeK~c_V}>h>vz}Z*Yk*?1y66HWR4Kd=kw|A#>Umv)jF|@^?Y`=VO41( z&&^IJcui4@t8QKsTb&HYAdg0S7B3s-vvkACK8YOcprQ(s zWBY)mv?%IUSn!hJqWq?=*nsKGZ_-(xE2}G7kku|=EmFrC)`NX`K2Ikw*Ht|%X2pis zkSoiojY8iYN;>4t6BuoA8+9CprRcrCyzN&!brw_EstCs7}HsPkptb3 zCIZmMWUe|j1IhoYM#z64hM0JFeZ#9*l1}uiCi_UC=U2U)j8m=`m39hHbmPfakA5CN zW2ez8abDDOZ=uVtnkOR%AF?Es7Vu|4%`9I`BQ?Q~exB33npdOZFS-@r`KfqzF@8`~ z6{U!Ha;~Kq1g@BlWf?0|V#MF;Xn*wR=YJ1A{`%-2=P9gF;C96R#zp?mM?XJ_{sG5> zj}m|Dv-C8DtqTY_8K32|Y<_-GNPVgN(ckRjMMz%-f*06p(FKWk-!5+g)*Aj#lBb!+ z@t==AJ$kb7NMFePwiwPMd!5Mh#BStYgW7?^j%?B>0jD2?cfS54si7+jWojT@AU@WueX1^jI7qS9nEL8ZU8XdiCyq{{H&#ZU5~%aq5BN&-=rd zM=#zS{qGm3mO9p@yL5I5N4x?BxmrR(Kp-gJ_+iKAJM=s`+f&dh6p(u%7Bz6>Kx*)}8@DM6Edxq&A;#{O>W#QNm`oSWt-ml; zz;A-DA*#QWWl09F7;H&0l3T9NUqf5HS9+CSSH>W$6T$7LwG+wfViG|EGfdy~8Gh76 z+~M;fBw)ee_ZU;3V-QU3rzv%GG{R@!&A&t22ZctK<&Z#G6_V>~iM_LfDYFnzogLRW!U z9l;f3%60n7(diNhjtxrHl(-hMB^a{aKAfOB=!NZ{tbO~yQ128`lSZ%Hnd6AK<(%Da zwyL>`bJ@U8gMhBx-R!h)fOb#J$^it&yyxmiP8=170Yltfu(kYu1&A?Yh6=e9+ae`*OAukZ zv01aia7&P<0XAM9taH;tqdkpU##DuFH_6AEkRkkbeNKD|oH@NgsIi19Y|#VIx!@7J zJ8E)uRB?A?IjR_1=8%5R*4#N2L#jJIT(9QNTzD0lx)R}6JR!EBE6zSWYN{d&YsiGO zUqeCGP(P+0z*czvU*d?>xQzDR4Pt+IHe&xnA0OrQFB(8no~8SIH|(S ziKz5psWx7!<}mH4d045Rd!?FN^6!74ie3K?zEmxlspevRSd?GJqO?WV-|@2aDUwVl z2wROrjuL$NvNO*Q@89%a93LNkfS<>&=|f94$u9!lzB}n3LBYcx4&R;}zUqJX?nD3N z`=jIj$=}}}%EFzfg}o>&KMbakYd<%P829`=+vBp0FxoW~+VY&Rx0tZlCm5RngIF*l z+$z|N8#e+S*90wSsuA!l4*XMv&T4m8o^KkfudE~M=T>_>Jp8E_{~-l>IlZ|v`!D!r z+kbU8AM}6s@zmA-QA~v@CEzNxfLwz&iWZX*kIwDa@kN)KelMu4TNF@gW6Y|opU*GG zP2&|DzCAwr?(a*4E6^&IsOpr@@dk@0xG~I8F5rGK{dr!?|J((`IDNlBXZX4y5Xw|# z!T1WJ>;m~jK51C*F5)t{c4)OC87Mw?YcsT35dtpYOMeQodnPrPEA#bdW5JS!uRpyO ziuGLgyAd(Y)*HC=qkF!HQZFQ17WS8gtC}R^@y&W2xBm5e_Uq?U&HwFh*b% zqu-NPKl5E&+P3c={L0C1Li0&^K^g6YgG{w;8P%8Wv|a9qAz$=52E+(mZW(B0K11iF z{``EF7U%hRRMS942fMq=IXuovzK{&R#KyzJJ}OR+$`9D*g2F9m+_Pb@n%2)?<-4`n zVLFdJZk$t=Sb>!+MQBwH2eXwLNgV7UnWj00U5~FO`;O!(EW3<9sAWx%S+pREM%w`xQbf2oKhB1~-%Nb9GQKh5j@b4as z?RoU{Y1WY-o-!CADs#2xzh^P=3Yy=&Sx7ul2#N#I;d^DaDY1qZ5 zNVzMhHk1w<_BvXXwabh5^y10fF7AfkD(a5#pP;? z=?0>Th`Gh>Y-*#B?O*G>MB8I>Rx?uP>f#net}ZKJV^-n~%A_^jq-^iLeIvQNeH+WK z7jIs_`*3vf{SU{+sqrq)|FzCGDG>WOpUSAY4HZEZ`k(Ect=Q84Z13zm`2XF@vqJyB z2iLzZ+TiT)?cWaHynBDxKR$eo*C)+2SzZW@R9b?OY-o(6kupohb-bfkmZF18seo4M z#keXxkQmV&IUs6xL#xz5h@HmLMJ(ZvsPbGjQeK4N+^H_Z4X~lT_%^>TRbA zkAbGH{i+HMY1->+sUqOyzy)6(>_mOzF)Tb$zIf}?xDlk-7uU0;z{i!lJppR; z$Ba>X)F@ zeg-sFff7@|b~H4CN{Pt!R6h<{YDOsYHtGqqscht~V}k0f4ixq(UR|%21_f)aNpY8+ z1QFFfp8Z~3gA_4)wgQ2l--nM-$x%^m$*c?(nHH>H|IIc_yTr4c^5C6@Ls0NOX%A~ z%l|n6xdRC4#VMdDdcpV8sQ1nFHD)oUlUQ*Mi=+3=cGr9Z%jJhOT@+aQn{OWdJjp?H zcrgZWi?egeCtT#wRXQH8eVpW16UGZnM8FccOo7Xs<@snAkPs!~aWqVdw4lQ5exrCq z>4gXRVoq-{b6x~|<8R#XaXmVkL>Iut7#sR?(T1~DF?YZKI!BW~?qn`^{a(oF*U?SER)8RT$(mYFNvt(lei0wUNMnrniVwkPZ)8YAAG8>*}m+AT> zoo~Egzv&|o)OrELGahI2bZwGcZUEcdTIsg@GQ;zWYz|aD zOOttjn9YCz^?^9%%%Ul3p~Rn}utXSb8^Dkk458;|i`fExTx`6YPU(M|mL-|ZGl021 zJ)dq2w|l+qa*(GBIKria{AL|{noX&nr?YJG5vFAdsJqP0sM>>Wk{XDC@|6i4l$o(hYT>m4g zabA9ScYNH3GB5wyfB)|2?MeUJcmHz>txg!8qo#p<=rlX?t8n1kFr9+ra-I%9mPBi5 z9MQMJ<)wDI&-%_W%C7rP@{WQ?Uzs)YR(U%4R213BWZ@?YBw}}k~k(wLl-*kX?FYWC_{cU_G5QQ zZ8Lk=HwMOvxv{Z9XFu#PEWD7TmVYjT`ZFL3@u}4|eJWPu&}ExEdC$Z zmwI%}xR8kCajet1{e)8t9ZS|#izK{o4$OILKj#N*WIbWarBd|kU)|)4eCOER_0n4Z zj2$|HW8Tw%D_;lJg@%SUk>N)ZT93LhmoGFpO+?U7;*Rvja^ja&C0DKaJ=MgDw9P11 zRH!zW8I`Wuvl&Ne2FF{ByMs+h*0fu_8A{?csIx{>>Y_x`aT|+|cjVWQqO=xH?+9~u zhp4;2%Sw^3>Y?8gA=JJ3xEuCyAM5BYcu;kM(EG$vJ*e~ZOzm{fjRxc}?O8YKNDpqa zki5p-^<05iWx0%IfaQ`|;C8|S&}thu75BQQxOYd7OwwHGRzpyc5)1?2J0%G}O&Epz zyeP0twSfpm<_e33w@1y3H4Q=uMX7^+EfG;(mWkPQDKbC-{?VI^>U|?wUCOzdu0r&x z;-b`hpbFS+TlA}CZAHOcrEjHq?D**1lfqRJZX9@2l@@)q{*Ml@7nVMlM_$D6!^m>get3 z8dtA1fiyO%FS1dCYe98|7Gw-7yv@Q(k!)h$W&K2NQJDx-fYZAua5i}tqS<1M;gv~OS70r83={D)yeR~h`v}H`}SdH@_1Nj+z2OBh8={m?@E#*1L ztFFLt@JsL;WTW|AyA4(j!S))gtnj&<2AfYtb&cCjM(6^&eqSwDx5|3rp029g7w<1v zn=qr5_zTuw2VQr<+6e!HdJAd-?dLw3-OsbU{~umi*75$U_WygfY=lrKbdvN`GaQ(Ymk3DT4dhpkK@Yj3r*K6Xh#}|+0tw&Ioa@U*I zch|d>i=OP9AdNfqCUlHA{q9&5v8C||$Ct*ZEXFiGHJuf|&98f=xn~@5Rtz~QRv57= zE5`;di~(cUUUlLzvx0N1CDd?z+w!iCd>P!MqhoNM$`1dml8pv-vd3?lS0gW{y@~%5 z936ut8WUJWMK7U=r_5(khZ}U6bSBcYf)_B#JSI8GR{Bd?kJo*Y(F@W@L-$GR@vw$z zi8tlS8>{8I`5)@J$?0L0ew!TR9eZthIbnU*yC&oAMB2jR_XHJ!k)XEKdv5Aoxt-JA zoni1U5q4MjSurwJkAiz7j9Yqh-ioCxg(KN>yN7Z*_;&s~@$|ey4E{%Wc}5#g#G5A@ zUy93TIR{zR?Q_|Eir_YN{Jaf~_=#kBw@+&*g7Y~-?;phV^PZ2!%X^NNErYr~mhy)p zg1hh=736;3DPQj+Y;EXbWkvUY&F+6MMV5s|7T{I(-#eR|mi_m$-u8q2_q{w{g#Gtc zZTs(s)IN7|Dg3u1U^Q<~{@(lo*r@rRZ38ZJnEGX#aN|ou2H!xKm`g{bry*nF?ayqw ztx?eAtXQAqNwR*HUv9kr@!RA6o1Wzluyhz33$zj0*^2X69A1-9#Kcfp5`6ZqQ z*64bDn6EEBZWO~=hS$|^lKC5$1DOtpa_SfW((C*zovdRnaWS6XwWWBCLD;t9HL83rYw=~Kq)wgNPD)4-)}+7Y zQNB)1c9yME@{6|{Z$PH2u^ex*F1)tm4bcACt;eC@Pib^PM~7qtM*vA)Yvb&rCikIX z5ZP7vt&KX-U_oNNw3Q+mh06>e;V>2lM*vK52xo%JEEzxgY+3_D8n1Q!s~sL>N#AdL zD$f7$PHgA@-P+mQdN}{z$MbOhe>nfY>>nS!I$YWb+^&3!=tK37@KtAcglV1MU!qkx zAdy?YVhLvIDww`7dL5(1tUP#()6+SY6Qx=QQMcWR7+LD?_vk&$t$fpMmxdUUr-l#m zoKMGlgzAe{)Zoxx7L4Z}oR95zE)D#9o%6+QVEN;|7=FRd*)HJvTR*-_cioPjKV3E)_wO>&OB@1@9Lx4b;^H)LNXt#FAwW{`{%T|GKqf?f;vb5BLA~^Q_YU z+uc>);78L$ZP!8;e|Dy@$A88e8u9yiw}n{no9+;R+%s`G>hfjXVE?`bIQ3{wGkU|L_lZz_s`p+Kj1?JP ztVOSqNd{-8bQ1mdafd(?g2~_6=+Js}yqH~rJa`#xc3bgg+}@3z_5OeVpa1W(XJ|e0 z^)~?Q<#{q213JH3|1SD#GMl6z`@E1o%yge2LlJh6%l3#b6u=mg*>!eFOkp}Y-RSkY z->h$KZGBDV8)47spPxi^oTo`ppye4`PSZ44$6>k*EU*UrpLEMI1=ZC!TNm>Y%3;5N z=w^_QUP0Kp5;>WU%LgEP;uY3Cd2Vxw7?}JqAQFx*gLHnC0!7WQ^5|m*r*4PZTLp~@ zL!qZr=D9zKF4qCG^8Lr?|3oo;N&ozR;^9N+79}H z<~AaT_u&LDfnmd&ro#-D_c_!VBPBt<$TW%{i;6%iI;{QZ6lhN*klfffPRFS-Jtp)~ z|Iv^K7ZA}HUBeaWywaLn$TXI7G+ophcb~gD?En$0h}gc;__)U3qA}N&yUgobb8Chf zowNJKUA@18u=<3;MBvqRZI{F5hYLW*?rwJ4A69gn7w5rL_FSU~jr{dTwkOs#V2f?L z%$rB}mxWB+OVJ`cQlJbS=)?!FE2sF#N^@Gf=qK@WBHrTP3z$?OefW0{TnzU$>S(B9 zYFE@`gJ7L0RMP73V6OG5^5*JS8CpFQf{z%OtjCQ7Tq3Gr&V)~i&=u z?^z42MOZ)fx(BLK+pU(yEiQoV?%D#_9viX_z^y-pb^%JX0VfSA-U6Yz9jy^;Zw1xQ zd5ZveN)2VV(3E4E02>Cr;L4U>N0YFFJL{pYz|gloBgK>cNcRpzbH^Upub-G{MYV5@ z$qm`QgWNf__{k}38bF5j#`L^2Q?TTcd$O5eo?yM7_y`)szO-EOORq6tQomSSpq|Z{ zD=AzCOP~`;TJ)#0>>}-7z@CV4nDmlDC1iMCX+1L>kYIagxy#93MeK_njlo1RJ~~*2 zK@G=t0T>*L8V2}vB-QANfg>LYJ$37)SkHNzFlZ)Dtxf^gIXaC%ddp@*5(9GbQW~2K zJUfkAA=F3zH^?IU`%%xFt6!b2>yq0XAQSz~I9j*@)t{H9UrQoD8U~O+YJN zw`j|Fo@l!u<1o|A2*c1St?ZfCvf_Hb$`Di1=9<&tWKgtVx_t=2*|dveyexBsSlKhL z__%Y6kHqtuq<_1}C$lr3jKA=xRY5|s2_obY$lO}Z?#CxPwK-dj`iiqdd599hRRk;O zuW34Efvga>Ws6B)10gzA0fUSP*|sIK;^j?a;OJ6-CPLH>gk$A}i2{3)FcQU%ur1HZ zAH;h*?S*_i1LcDuPiW6kTNXNznh|tFL0kb}IZFm5%5i}L4@x@IUK<@8+3#4FcTBp} z9343{DFhi>FQ?Cb(W1^S90*pWPQxAT@aL30h>U(&3_`YV6f&Ys^>uZSSd#uJv4BWo z(jb`UbFB<_X*mdUJ>LWK)vc=lEN^x>rBoRxX~&whRC}yA_-gA4TwezA?@nzc|F9Do<6mit@$g=D!d$_ z4vA}A7|XP*rLDZg{R^D)e;5-j!F<(`%W-4d<(&i)>B?iWzZ^bp33d?yKP>L#G8e{;N3ysKaDYP~KxPhE_Y0 z6OIsaG|<&<{@L9;@;JI+#~(U;;+4Z3mM%~ia9ve#{fmopE$+k=Li)zlsi6YrvaY%^ z!rOga5iJzYUT7`9`lG^IJOHbX@AxtihFy)yxB0bk-6^woi?w0Kb7D=a5YgVCPvR+w z6Rm}*;(ZEg9=_Eg1L9*vc5XUKuTN}v)O!*b!my5xcykr5+Oj=doqLdG&1!D-iYAS- zsPY%b)u3u)a6m*9A$===NgI(f9N}BOw9(V4Ne=G zHrg1+d4GcpI@UK<f z|8pz*NFcQrQ2blKyRzt@k42-Dj-H6RR!~0(-y4CZ%>cE_l2G^wGCP0iQzCk z!CP+r!9JS#!Yc1#*qMubp7u}2IdpAu#ttN!6k&_fvYCR6XZyCQ%p-t=Y}Bj~l$S#B zCs3j)&yh6n)V??ge!k%BRQ7Q*oC<}Gl)ld`|JlkpQkH<0pHv6&5ea4VujUzuhGJs* z51(c$Jf(KR8EZ<5TTH0~`j%75=d@O8ERChzRZ1+NF4zyw^HC90TD(b%;t;K9G9@)AM;zZ^-m0lTI4+TygqSA4G)z44a;5As%VyIgyioCaK$&pWcL{~+%c|Pr< z2l~>LNlaU+_8_0n^NZzM=k=)rHJ3n{y67HMMM_O%so+Eb?`L?c*1BJ*OTmr34 z4X<{w^zL`Wq9=0U2Zml=E=r3k97x3)9V~P{qupd^3(y{ee^XG5!uwe*a{Kc^3l=jh zO1Z$)V$lg-Ct^<%e#Ti}h-mo|p=tEg(Ggp%>U9{O#`d^MoUAA>ve_)3wOIL5wkC^& z+1IzcNF9D*l`UsZqHrY-)C)3p!x@dJ;3Yba1Q>i>=B$sf-VpRh4nymwt=X;0On3W8 z!5eg`?Nxo6{*8gWb3rn%8y;A{wRAPHkM<0v>GrGRewS&*8uwXCclOzP@A+hN?OTj* z>1fXW0fPv~`8mF;K~DOy_gMeq+o}w0VS?)rD1?B+*saBkLy6Y}q+joFI-w2E%Woeo zjR7NDUvpe&)juOv?3l{;iZ^c@8E7SA#m)18b53$h&R(3aOz4fQCO&X#zkh!LGS)jTU~cTqai_?N{Vq zLTO1<9PU~=W=laV_)<c>=yS+|GWr#6gD+mS0Q8+?FsVpO>yN>q}(mYe);ei1OjA ze1;~>7umnb44X`#e5<-+vZ%LL-66%?CeQJgLrirT%kAh4d5j29qJ>xTW|r`qWYtTs zD6iiP!x`O|9r6jxtHh5iU0j|?fBnShDHzW zV@t*VUM}o+xd{>TjH=~7Ro^2EqbwzpezOXTqIP^y>8@Yt1=S#WX(N|5zoAc^ngK(f zA9z_3Pig`pSv(Shkr1H0EET56Gx z7kc7bj7S3o*6$;reKjNx)XM0~U&?6PcuJfQf5^iFG*k8d4#+gy|RM!@|(FE$C|pTMGE+ zc_{q@X@PySD~lYlKJs}eElO4|j^&E^+3}{6pMSs+d$p{pmjZ(<;F?-=tYO}Q@wUW! z&v;nt9tPrYF&81iZxUHzQuNu8fTF8WzkDWDp~nQ#yFCcei}?1vXas^`aGlSW!P+%r zA}S@k0zXf3ngn+>>Z77;LMf&}DG)D8qbeyvP`n52!^2S9rxkv)~BG~g!v$Nng z)VlPCs1orP0ikLmJN17f$s1S{5Z(q)Tu>__)MwXHsz6h9<1P_XuCEM}$}Ppubp=-~ zeVR~>Dj4SpMfRFB=*Wr!KsCoeS@fuCy|Bmz2xoAN*7|$U_?B0lz{rv@29Oq-s$|?( zO1k=(;g&5rUaBiyq_8|J)%>Z49lkpJ_Q%&c57SszxS1^97!{WrSHOz|F8D=zfa|_G zJb7{SrvKguIw9HR4=?@)IO^g1;}E;8Sv~4?yLwNSA8!W3ou$cz8dzQZbOZNmO+$Sw z%APJJ=srkc&qP_SoQAzsMjqBOhr$2LK*r)YBhyu3OiO}O`Hy(qW7$U#EfNp~V9i6fF7dkZY7Sjveu(SkiP2t?N|q_- zWeze6KI!WvA`%rj2{A?Qi$|0WO$%B5=;s3Di=rZ3k5PlzD7S5{>RnEk`3QWE{TC92G{Uo2)Sk%(s)^x zHtHn^d1)a%CNHK7f#D(h!f~rzV!*)@6-_J11h!foJ}bl$XSrkJnXNpEe#0aB*Gl_1 z+tthT(f>UJ6sQ-h{|;jb_}rhhNw`fmgoZf~D(2A*cdnUOviepvZRlFY1gWXB%c~Lg z!k^-r`gAQAD!b`pedK-G-Ca!ZTuA>7M7V2FpZ8Re1CdLikjWH!{Er$cGFdm)>(*1R ziM$P}=CoEl%?Gxua4;5iz*^j!@C^g>#P~W}-Fjx1>6B93uvM6eIWOj2ddDtbiE&}rU0(pHz9vNG= z*!Xeq4OFT%rq<)WSv6UvJ-CYbpxatFitv)MPG&4o%*}blw^CkzoKGr?By(RrEPQ~L zOseKDoi@t8CUY~`MhV(Vaj^H&dyg@JjY&#;easa}YXO8Oz7#t8Fx=~hiWZ%uKs;}U zl%n=E6v;xEZo`!eLOEeLNC&F`+rVwOY=Sa}#55yURl`Yc6yB)rWF{n6f*%_j(_X#R z$?C?Eqfy~wHam48NDYcaHNmPNy4V=M`(;K8pB zMUr^kIflX86Uem%IB#cLIGo23aB~mVST4$G23V6B&j4;qyQHPOVO!B&wANdXx1UV2 z_QnR0EuNj$;+?Lx8kRUG>qw#pxOMDfj+fg9+@3UC8WtpQRt;u5B8l?kueA5luy4iLBD(~JQ% zWX%n^F)O|)if>}^e=kyus845<>1MEMUEbZ)ss*qitX2%$74^#H-NKec;#U}m{Ckm1 z=Gi<;#p&i&y{a^+33g2MXVsl>yHeeUS<3!ivM)?QsLfI>M6gQq+^W)KhFv6O zw6WD|Cm^YhFvHDAG>X540!HD_Q>wN)L@W}$Q~#Q7h+ilB%){yA*(4V3}5xaz;Q|; z$0p>m!gwY&Aa9mJ-ZUYX6^5^EOZF#}98mv5LO;vxd6i6s5ND3YDk6`zZGAVn%^qp) zj|T@oPq;2zo))A*;ulq=;0DmGDJr1{H!Mk{o?w>F zKc^-OV#5SHon`aINZb1`6Hz+aQzh9tI4}u#30>1(^|8r(O0-9$k`HT&oXn$5)J(V1 zD(UJeLV7#c>!o{aRBYLeP+D$1buH`Bu-itd-2M{FFJJlL>x^xsvic#T;S6Y>Q?|XL z!gY&AJj|_MkB_hiLZ78}-Uz|%?^_0$v4|KvUO@ZD`Q+9TyuWg7Q-x(jwzUV>HtzCABZb;=z<8G9K-K;sfPv#PZMH*&bzx@_s6SP!mmNAz*2~r?|=r7{- zoh{iP#Jz^tik$n68V71i+;OEH9ZUDjlbiuI9ULm#Fq0pW$}d0xOkYd%3nKSlqF%Hc zt@V7m-m=ris2513&FDplW;_R|ut zxtulHBq{68*w(9*g5r`tZc|Z8SyiR;t2CYPg9y{3!lc*LnU`(-C<^!dOdjVkzK?mV z+Wk!}2pKJr=UEG8Lrt7Vg~Pd+cE~}-*7I?$GF4gwlGAXL<{59-_iNKS0uiot{GYF)HD4))=i|iL>F;-*IU<>Nl5|oufiWlzTL>BI- zZNzzDmhAm>oL)fRc?tH?uX_<)6nnS^U|ni7xmgMJ)0uIqxK~oKcVK5-xHWIU$6Vv@ zg}vQ{CEwJLXz-~a|1u6&Z!4M3@_(_sw791X^P@iVZKQ+e8#lbL2J0vWIVQEL5D>A4o&w) zCbRstb(6M|Q?R*KlDH=syx1-{L#8`LliSBNxPAFX7~=NS4TQgjU3wl^&#_w1P=VHS zy!!PViv=Bf)Hn53V=NYQy!?We-Pl~ZA8ZB3J!3(`pG_BZY%l1z(SnXY$AXT($ORqO zU(j{+NuLbS==CBkim2#qMXlra-yeQBdimmw!n_u_Q^-VUlE1s_#<9T1Zc zf;$v8@nmC~N@c8jsCEDyurq?j1o&+~@(B8=@jDF>yi}~0iXE9tSPtl=IC^z4z5KwS znSPT*uA74Ecf_VNU2JY41Jj(N8P}X{Qd$w{di@?qcRFexN|d!rQaY3o?O|J+b{Xtj zLfjSq19dhGh`?v*{pObS9@((|W|h1cT4SsSQCEj)6+)E4G1sdgTIkhlVc&eJuj!&6 zrz1K#E)RofyBS&d#l9R0pX^v2_&bTQ5 zy_8wJSI^+;6FBxa^=?&}Os%@Bf$mpnT+g;7Ju2xr*?R8a{D-YgSyG4@{Q|bglok`? zyf%l`9qDj8jmFtUHn%}vY^qMo($Qj=j{4(ta%Q8LmLsm;7ItO>>$OQGJ!ze7xwI?I zd5!mCK?4|N?~BI1Xy|L{18F(of7etsjDPM}JlZDlr3>8R9VT-)uo>BJzuD|#-?=D3 zq4g^rY_+P~?s0&9<8wPZ8$zTh_40j7QNH((5MBZN`c|!$+J_9cGs&jvjkX4E0g%H> z0+zP5fShf$Byo<~<)*v!l-Znox%OHRvkR~R#F+p#t6vKiE~|wrxVBM)$v)JP&}BGv zL0*VyzX*zFZly_j)vqCSIThK(ZaRlGHq0>aN~`y*E$_=lL|cD9&~x14!A8i)+--h>eBXxA1sivA1SD zQX2*cj?4DQ0Me{|DYot}8IfVxKJ$jlduyK>K4Ay}5c-gizLGTH^76-zjeXExKp+hO zb-g8c7oR?j_LfD?Di3{vz-p{!`&7Rb5ColbIQnIpXW}h>CJvuO(R{ic$@3_IsCC4I zsvzrORnKk=C7KGm!qIq3^EAfaevPY))8TFVPcZB)ZULs?8e1BVXuxf{I=(?zKvkzo z0JQ_y@J%mGT5pMSfsPX6)aIbaqLBFZjd{*I9$B`|L9ArL>m01=Y7eT8y`gTbcku|k z6}m*8ZuO^Q@|RfRRHvB!+Fh}(Yvs5peq*_r~&p;|+$CqeZWl%IMvTqO{RP4w_TGe7leP^X3dYM7sTsrD68 z?*pJ;u~{|ADco?y7&91VKKGY5xI|$5oh6~Z3!1348Qmed z+$sh2mqJPRkb!!M@RId1G&9-S&C%=)KDny&(>f;g^wYs%svcP5T`IMr0*U{b$W>Z6`YT+!;5%tfzMV=ROaYyhI-8^87E| zcxQ9l%Kx(6>ptXvzL)3A$^X1lJOA^}L;mNx$p8G}?W=cxKm4#{9%#LG<3z(MP4DWn z?0(5fcJDA*ZdqR2)#jGR~))7N1Q{$G+UD478_&63H+ZTA@5kQ8Pdy5&vlM+7FqB_} zN6!nCq!lTE+VL54nEp zM&zyw7ndWUoQ4>9wgP@arPDbk9F#xn*BRw=-1|n0>ZE_#2CDKo-c343p*ED;Gk065 zpAXWr!{5x$6F_d#py$Ou$^17lp{SHc*$ z_aeE0{hHF~VXDIhhs}Zyh(&;dxFe4q#6`UCiJg4EPNja7J#!fRudm{&oK z3Z~)1G<~uxN>~J8hAyj<2xAyYL&=u$*IslnYWv9l6)z#w44%0|1j;mdyCLetQY`^Z zp5wJXnCaW}FD;*L>f1qwe!?12b$ujWf`KDzHQo<3x-h z@wJesF(keQlIk%eattLcr~=_8N(O=cy=1iuHQTN6HJXpN%Q|INm_dbE;z=JgMmiI0 zi{Ik2CFLv~qthl!lYECkEuxqhTs}cBJ;t0nC)30Doa(R$94C%BF);BA^i{gpMZC$o}|yIR3!q z#AF8Iw~XN_z^tJRy{!s(Q|Mi!-#9qvBgLr0A#~-i{|ARn_uSrLr?V+)0a2qlYc%$3 zGF@<-vr_Xy3yPx;L-g}J!958b%e8)XsOty-JBme!#8?Rg!u#a3k1y>$03F~~rZuWz zmX7rZQEk_o>gSg6<^RZEJI4FpBpb!o)7~C){1ibwQu^~?8uON>J(5ZGUv;1gaFG2j zy^XzZH`&{+c>9XpZt=1kafiPRY2C|G#VXajSU~%clEwEN{djm&Ty5IeV18Gr=(l=c zceNu&WX1#1EOqQQ0_jZo?i)@M*eDw=SwYDW{pxI*VUauXJYjEqWfoa)luo`{^$7bH z{QXJZW|X9xTrRDw#LQ~b%7(MbhLXwxeZ$EfHX105S{w>CH4gNuRhnC(5%QhVW{lDo zk#q1o6@)0=jOxP9xo*SW#`!N}xW*Ky}2ZvWG${I|oGC+|K)m+%oJ zG$5Zq@5PcA@qV?#~e2s3Xm(J?}h7rR^rbE+-@5ABAk00Jf zq}qcKL{FjQljss;xf}V%jcWMGhJoZuln^dpS!ZxKM2ROI=U34cAPD4!))a%{4#qca zpu9Ck08x=g#d*FMV_8O%o=GcU$A?L~iLQh&1p`gSP}i(s&RTTYiLN?o4SC%4#pJFngn^mxnN8*j_uTNN0=ZwS9>%;jHhU z1x|OcAuKLZ76c1L$nF}KR)x7mNM3$FUpsgYaNo}(Mv1--CDftrbL*Sq`iRe`N}SWW z*D-fxVlGfkV*siwU%EGaTAert0}WC#;xdZTlCh?=6JBkM8#4{+CO2yO|f}QsdG*7xd9-rrApX4ITyz_XLf}>+T7+MOx5V?soHz1kLvN#6BA- zr4NY|sApIJna{>IECCJ_S!4e-4BP?YAjJ}@qsAPB`x~&24?1WHs6O|!JvmfMbgl9> zXfP9&>)mP=U}!)A4EKkwsNq5bF1O3XNW zo6N<>F=l*|kA6W-2v%)o$=SjGKBNCOa5DORns)vnEGS`9Is9-8TMTS>jZG$<$~8?S zO=HFM8to-HLo6$;*_?4BOKyDD=YLih+WG1W_g@1-JxfNkCc4Nb$)wU`QrTECk!~X? zD7z(zGgan+!P*&2^0jFf*Z>GqGIIPa2V#~A)mx>RDVZgrcC(@pDhKlJMLtjaxLKaf zl5w3n!sOA?1vaoTRhu*{+~hNwex?)PZ}~J8%AaLmuxZUEn4j;ae+8rhEM^%%BF+2919I#)HLum!a##6F)-4TaJ9H?BU;H?Dv; zhz|0ghbuD%)+dS*?a&6=x-x~hs$RMrx z#kkb1Gw7!&jXC%N5sS3&`dQkm$FV-4axz+leiv&h2i#($3Nv1}0y-VHu2SoSG!#Nk z?P(et@h&#(KP0CS6KclZaLqx~0h+Ch-Cc!D&ZsKx+6}H?9zGBbxi~tqim44xkgszl=D60(B7E^#5bkm` zYmg`IN>op0Il#N03Mn2{OovL~rsSwEWKNtR zc<03_RXsP=fNwEByfGnH>I|3fUanQ7fUktn%00?olrZ9a3hh;X7}W&#Qd(2lw-9WA zA8=>}H44GV5FSyo(>i9}A$TW_pF1vc6x1l|N?Jv$R##b|2rql&2ceN|qh-9;?`)V6 zM?Y!lW`HK5HDr&j`w8ZU#ebegqZ{@Y{Nug7uWEEqyU_t_bif)Nuto>oMr)X2@)_>A zuVO{UD7{7e+?+5o%g1bg>qr2a%as5iZ_7$Y#^AO%IH-;o?GPqAJojIJmUs;+?qYm{ zit)L_8#Ec;fW|kV@eS1Y2JKr;pm#9-p@@DLB7&T`rew^&>)@B0j=>qEGZFq#jto>V z3atk>%vTJATd`swlaUs@hMm4_Fh5RFX*kKR0F~J#rE4PX>lAnix_OM&qwg{5JlX`p z_Yu0Yp`viIxL`g~8#csII>}KZ1>e@ukqy)2qEa*ChP33^#tz72U`xps>5~JAcWB-C zU>y@*93LNkIBC(~*0r{Q5nvu2J5Qb~Us`&eJ#(_ExF9|@Q$oWpi64jc?u&~#DuOW) zlVZMSz&PN;kw98)%X-e&q&E25G-}|mPP5m2@w#3!qw6|QZ<<2Av8TG=Sy0%jrJN|8 z2ww2@&_+XB7p{Z4KyGD&N}M7GEjf2=pOJ$x7Kn}Cf+uS+y4?FLUB0Q&W#K`rTN>cA z(hWtbcbo5+6m;0c$c=XHsp2jvSpEiR&(I1ISAH73rwxC$B(10G!Rwk(M){kU(8%>(%5rgHI+1O z>NEjZRc%$kQgc?j#b%Xt+$;b?jS3W z<|2+`hUSV@#1yqKv(aENr+q#d!-0Hs!zCS9?BnbsGs(8*!yz$(S2e{_+EsGtpnc1! zmJ((im|DjzDNM=7&r6DM5mOa0BsRH>E4~jZPyVkoM);HV`vVC|>Nsqkb{T`jpaQd^ zKU<8`)+;4<;_%d;cn*-A)JqM_Qt;N(=AVgu%0}Up zbveQ=%lF9Ll)r}zkDzWi_cUa*^y7`1Cyfq9NmF?8IDzB7y3t@km)V5E@);!?qX62cmH;2SBOvij~9sZf4ANe3*q@oqgR_ zku#{$0g=aM*Lx-pSK>MgUwSB$I69oDE`T$RF=_{#P-KtRqLX*8-ofF8yro9`FoX6P znD&b)Uj7nR(qOoCPLAMlzSoFo8xjKakes2C+@;URjsC|yV2=44>%NtJ&`gpQo!_bFm@p4=RWuM~` zSg}=jV8U`f$M%-Nv{5hLy?uH3{zNFFFpD)a?b_Xai2yi?6tizf+JajOM$BMHAWSXi z$~(-&O8nc`Osx!`R&`3vcp;EU+&V1{=MukdFQh>|NE$yG#HPn$OY00AEfv79Um?4{ zsncySmHP7+xd2A#85+wHv+dA{$t}IBN@vBts2R7AS0616c<7hr`#^uLbH$ZwG9i=C zdQhk4qt^~ZPFogW+_pVQc|U<=U`N}b`5~jRmH|5bfnqN

?*3j$ebIuC}VcC6Y5xv;>RviuA*dWqW=qaRVf<;!6-iyB1X%VQ{Pn zFSt^?BN^QEt#09rBM_mau%!3je)FTm1vIb$Rb7jSSdCdh7cvxU7ahGOIa)>lZy_dFR!vK*oR7={gwlwm$JQ7lpyo^cH6 zcDkPXD?`He7t!U#I=6`xIAgn^x;W*wIdU?!)$8xDUVUI!*T`^SSNGl~QJkA9eoS#% zr%5(Le}!>}6dEk~mG-SEG^JGN=qiQh?hU7BhJfN>_9}0-DY}Z#Akf+_c9l93Rg)Qd zVhB?P7Fh+&3CzHRbu)9Qw5jKQpHhR*GrVb3C^xv(7h;kcu;uwfcL+{tjxHi2P6SI#H5JE z$?Qx`V1YZ)%>eI_abC>8TgKo6*zEmIvFT-)mc~Kgh@}Kh3#J3H`cTel;MU zXjR%W07Vmmkwr!tixj2Vn$?Trj%$~O`8*X#`=BVUyDmZS+}5+xv}GyiQLKCUzuH2) zeBB3IYTE}zUl*z>7++mbUI}$MP}e?ze%W4Cg7PY^8&tAY%KBBX*Uq&6!}06ZS7F6; zC;HPMR}l;g9(Hr`XNniAw92DDS%*m!^0dzi0NqJR0#3$P$&E1KNr%aT@;gv^h6(db z)L8*M2#Me9;1!-*wU$i@C#kD*=Mm{YrhO#$mPHcL!M-!KOsifRN3gcWzqIwl zZ9S=IJ!ccWu36pN2mLB9z@zpp@^DEH@kaL(A%pAdBo5I1om!MEv7Mx2m|Go*4SYTVCMa z+eNG`CV1{-!yK^kvQ~RmdFSc}+xYsm1T3+2Ltw!dVGiGjy>XnwalEg1<(?4EBr&0E z=GECq8m(6ExJ6NI75Wr=pafZ4Bc57&$N>$We;f_46Z+&EGFiiV#~hNay>nM3SC@Bq z*{Z$))vFr5qpYqfZzH9ZjcZo;agtw6)Pb^$BY!@Yiy*@s7r)*;!(D=}Qn#Z#=}Vp` z-&Au?8da1J%*yn}F;Q`x#po#FO;a#B-3u@^vd-U*Bo_ zD)48(>KzPto!0jH`qxGUVR643?X1Q7+n!H@-RSGJ?fp&t)1ZfP@i-rn*nG7Ndve-gv~t#W*4N|GS?BczyiV)u_4Vz*tjB9R`)h$|-(LF~kk@S9 zzh2vEZveTh^>FG2>1nQ!dqX1F=CEQf5mnFs&f3>de{;X*oxAF(k9qxPSU)*M|CRxI z92NfgpK5g`>0 zfw)6NYqWKc1;Hf8vtK8|I7G=H*DQVXt-%0;SKhc+AQ;$0G+l(;rJ3m|YDnWUIa z8gq|p#a_O9dwlfj@WU=vK)mwuA{Pz2C81lD4%g=1{F$sTWEPvb4li9lTgP(DT4R4d z>Y?9eH);X6qxTWdJ|ZZ>;_E;t~Lok;FuL%d~j57a~Q;XL>s= zd7c!w0SvJ0n+UTe8jO7s6^r3HbEel&I21{JE@0X7e27{n*$SvZSqYE!Pj7d#X1hIayYoEMYGkQ9 z<9b640`v^DS3S_U-au8WRl{`JG)Ac~y9Z0*@ngkS;O{otJ*W}~(WX%X{%-3lgy4xu zK*6@vrlhviTlP1DD9Vrstry}if<~`PS*jwt%BQq)F>W5aHzw4`?E=F?xbIDCy3m!C zJP9%%7tvCai)ex2j>K(8^5>3ZwM`&$40jk_JAw{7j5Mkb`|Lc(MMtIbxw}KZx+3SN z=g)q`HP537|ESOo`GsCdJSAs? zXW_HKptm7U_gm}hTSmzbTvwn)M=^Q^xeb3&?Og<<+KxR$RS#p7G)T@eG0Pb zd^$4VEHsp0suUR?P{r_@Cugn&zZH(wjaTc2qGb*Uo_uU~kUPaV`FXwk4udOHQLPBo*8KfhqmIiS2pt7rj_v$!Tiu<9 z{BQU1tSWm4_a{7E72In*%(lmO^h2J9Zp6vyDb{`Ypuv6X3X>QXwKV3=S%lVzOiAv6njdfTy&%21{lNza)Y1$J^1+Rqko*I2`1Eu4zClCs?vWx z`iHdx{Zo~Bx0p{C_~QS{F3w!CP@C3ta;8-ywg5x@=cAvWME?K`e3ZnoPGMout!G_j zk6Y(d#-Z-?QKspu=EPLBCj`dY_myLlWb3$K#mQ2o=#!4fppeou5&HMo? z!#rrOUhxFNS?j(1wUHq&h4_27hQKIZdBU$g%#t3NTB*#1crFodN2{SxsqF2wW6>xV+Ol9g zW*`>}yg4i@VMxl|OOK+_sdr=qPtZA{xtpRDK0P!6c z{O7+~sbzo3E*4CbU+RomasH3vo_+q`+}V2eaQ?rKXNBkgXDo4hdDismROf%o(7+Q< z@ZV)c_A#I4i*f#tIDI8*h!_9+=!YLqzHh94(CbyG9h54e_EEgzB+l87em_+^^DR3n zsVtelB0p|o1M%67Ak<#L@t`T)OU)r3HMM*Q?^0q0R=!W^boIG8;UDv9l$U*wUoRsB zl<)t&o$fPx|KHkqw*9dG-^a7M{lB||`~P+${l5>)*Bs1j0f&<}36_MN`8|jP0PMRN zox{BqzhM=B00LeVzeI2H;$sd+@i+NolutU*kAG$N4Wy`~?HBVI>9PWsTwv2iKqSpj zOFw8*K|wpTA@{J7oeIHcm9olvGRB2>*3>b#%u&iyGodv%PTnY){JFp%XR~B_4in1f z5kX;CxN$bvfC+DRtg-dJ`G&^U`Mg)sJlwI~EESA_c;8cFMx81%wxT+K}CNgc>)2~7qWT6cI&@e(7~_&+4q>_b5H zz`U&v6aduFu^)S?vTota2dt*^cRT2P@2L0v!!9wv=>($xXvc@+6Et}-X@!)2)WWVs zKBUuGVT0OS>5aNmNDWI@Q}WZGjAYT3aO;y9X);Wp3(PthQTRw|2)%TWQDMn(eua>* zJh=cz*VotL8VG$p=vtC4gs{kIK86b9vN}6kke$yi?H+1|o>Dx#KD_AYGq26HiC*+r z%;vx_`dBYao_NGLsUSuwqg08a8^&v`Pv-j&F>0lvVb=^CEY*^%DYVcxjq`zCy|~d= zt*KDoctY`m`L}3I2QDE!*=U!q^)DW)T39g`H~RtPl;CDxM~>m?P_{rd=n5sc#$KMM z!;jw2ub@f#DwnOoHCwg62M+68^fk}5Ax6VmG(O9VMj(a0mM^I6nv&iAOOr+pVt02j zK?$1v>jPy*+NNPA=xT}nU0lN0W8LToAUu#V7PEZA)YOZ_EP{La7+Hnem>IhIlM!S< zQ91l`KxB+0tau0Ovb=)?Do3WfZxFxilo`MP2EyaYVin>E>|W&RJO?rPY@EaXkj+)_ z*km(4hM12(&m=UtLw-s*E|rVSk^=zdjd$so@X#5GDk9+38H4+WK&!q7xpb@P^G9PEV>56fa|VUfE_($t&HC z3G0B1AQp?$YUmPC$G@i^R7*-h5$INZvjwM4c!#w6C=|<1mkpUtv2x%kq+vc@41{?{ z$5c(fSN0?F-M9I5hco|RSW54wm-%8ceLZ)1#s75W6Y|opU*GG%`W|49lkw2`tI+I@B8(7 zC0G5*(`epKAGyI`31v(L_hun$!MpxP-M_Oze%>x^=|MaV}W z9n`T{fD((=iR-V>#8hed8cis)mQXdSmfkdU@Z~Maoz8@I-e#p zSgy8pEq||P>2`cKm4js+?@EDf{%?QF@UOfP12f$#Z`#5k^7dxI+=FsAbcJV&!7nIo zs>lfJn>ulIIv!IJ%By_#k(})@ zQV*Q`$J&ZAg11VWJnf}U_Lz;H#|`CZhau_M;8-u_=@ihwM%|)Y1y3n-bj6ZtOca8^ z!Dxn-HqmqVcMq`pJbL;xgZYl0vf3eh!EmM{BGxWiltfP$i5O)JvZc~g#!BSN;}rqd zkqAnRi0Jre8HUlL6IeS()N~{+m|Gbk!tx{y;8&|Q@m1rUD(R6vb)G(rEP#PdC8Lqx z2_vye?T#?wdxy~-CMhsb$`OfESC|+^-IK<M6^x<5eU>fqKilB1+ zPuzRqsqlHN=|m;rq#zlN^Qp}G(8Li7h;r6I zRjI=9HBk(+ga_QWSJN%8Oc{yY!eW{tl5A-)M9mejj&mwO$uWf*5`M90IAa(W)5VG0 zm!d@L01nNaNG8^l@Av3^K2dMraD7{?rmkEJyZUpzqEIW^;!@Z#fNAA~&XDBubc)%Q zWi6X|~r%s+?bpCi-UahIQ9csiqDM=zlDjjJ(P zVQxdk50u()VE}XAXzBeDgJt!!?i*tX{~=q#KFWxC{^O8X-ku1^Zcqlr3q*`RE!vr> zEA|(qI7QBWdDpaY}|QF&&?-s~&QV2#dTq9!IDM)HERL7}IOUlFU+HMMdl~sy10zPi9aq%kswbX`&tRpc&B7y9f=qV?XFTKm1{-Ql!& zuUMJqYJ}eCU0}SE=PK&y_ag75Z__k}zvLes)k^eO<8_WVpMeRkDZVB>^L(#+U}#~y zWp8-d9xGd3xVY|VpnFxYi<_PXy}I~ytU-^fp~o8ZSns@nd#-;+q+kncIEv?`MG+?m zeGNxYUUZ6Juj>GvBGelJ)3c4iXF2Ds(KT#7HyvyM|8wK<;&F9&njpHTcR}qV;%Rwp zzj&kmZ@eSUN71uSU)<8Y!{uo&L%Bakqs7I=jpI?P8rZWCV07ew?yRsWU;qS3?GSf~ zU9xJ$4C62^wPRqF{C+^MQSfjA~GC@;mBO5#s|C+ zb@?!RqBbK!=uU+puc z7Dk@YIdk>p+B!6yhQqOM3fcJ@z+k}GNG-|sa}+NrXEc+XTTI-|XE$vdPBytrupe`7 zn>V}};#p}5d+K7&m85VqM+GPodS%dvbqkaY`H0Ef=%Son)A@eFV#OxoD4osn8Bd~( z%3w@zY1cm;=g|J-Y;DTzY7jT9M;+21Vm9y@*%Ri`Me>mc%+T%EHE1e3IJ@zFgOV8NL{}-V4Tpjo4uSe{5f!;wL9{?aU?@C4Kh|K>;Pg5h3Y9E@rCi-65rQQ*j9_fsWp^O6%*a_%$Yk%9AR&X5w1>{a7X4$kiXl@ zOw4L0MRi+AL?Mx=L=FjM18yQ_R2mjK=6$_Do&oK=R}CZ%0EwFb3BcGa%Xq+z2msBy zyV+@fXv~Xi<;aWkOAtrrXSkP^7&}&(SB5*VG^lEj;<4wk<4j5^h@iD*0RE=8;O%Ta zgBdUI>XR)@CN!)aunZL)w$yRCtQ};Up^`%|%`Ia~6J+3HCCSi75=xXoCsL+4fqlCV zU6)sQdVIZT-+-#9R}|i}C;PzX8~ylkjjHkTRX0Udui|IViu%Ll@Y4j7uZS`Rq7I@1 zVzZ%K9|an&`p@X~r_qGjDV+y+-uxE^eQw%42CWi?TBFG`j9wc_vHm{r)QL zf0n(=Zqi1D|KH~JrtSZ?{cQ6g|Kq(pE6o4!kow_EHZ?kY`?te4@7^Ewj}Kq}aQL=) z3Q8}4W+o?`k8ISliLug2)G>t-Ei^G2Qfyzh8d{YVjOfuSvR4THE8W#F;U7T?III~b zM0^q3ksPqL=B7q}Yp!bQq{zWBD8}2Ef+Vn5Ki(vD9!09Oo{(EhK9SptBXIdoD&4^S zo9V9Qmt#r#a^4t$e|q6_3mb!|&#Lo(H?#k5Vvk?T68|2J@c%H9 zqn1qY!@D2hzqd$Ut^nL`_VUk`k33i-%Qvn*&hdW@v!$&vaXGQ`bo7~Wmus#6VbYiL zMBa_^m$Oax_n5$3q+#V*+wJt_G%!5P%(6>FiuWQso_yd6`^r1L2M|6{Z;3(NmjTq9=geqDB3&BM%hZY`7y0h{HgN zY~lyv&7bXYdk-lyPINtndF}1H>ON5k2l}Mj*RH(Lkx?XRS6AP{bw70J4fQWmx@BUA zQt@4T8C}AZE9f<1ptR0yXGSqb6G-H?1?r_za;g+35VTa}+p z`{;&Ot8{bFbbt#L=S+q!>zG)Mq8$9?3u|v8LuD?y^`=;DaiWE`Dls~6;Ap&|#G1g= zf0kMiSQZ3T)&suVWwtHt+dR~|SZ~>6Vab$m`2AI9qmqV$xs8Th}Pao@iA=P%%*%OLgR0c zc-FhmONvtCC_weO9Hz!dNx9@8K{5k?9?Ma3`Q6|5pwuYp+UGewE69tmTWI-OAxeyS9n`U~MPC7Q2E09#qN#@8V7|MwtpuT|HvFAAo zQ4$+c8cEDt5?%q++I$+wqi>l}y6$tL%b(h3$^|7jPD}q_?M`8TSo&=FzkU^cpzlnU zn`Y^dM^9@BsiN)amsSp)a@C(9Z(O!YQ!aAhiC*->y^e82AaA^Lbq&MSRI3i=0%pr|zd~0*+1UjC=`SXzb69Z@BlH22IU+xE zD5K>=qAR!1%?J(jnZo&I4%?E$QK>3{!JWGq>mtdWb^9q+aF)M!L0xm22Hxi zC&Cmw6n)-PG=yswLzNEVurN1<(`jGfhZ_U0I8c%v#~o*gf+uZ6FHp)Ildg>icGV)e z6QyIK*96r)$SW|R%qh?AeKh|w-m{?unPH3MHo zKnUQ<$o`<;W_aQEy?x zqgJv4!D8zsS+v=3*n&Dfd2w>|Qbf4+IAELz`#7Pn;YS7@Iz&^l4sb)=k6wQN;zR%2 zqZ2xu{*vaWtrLE73f80pEw4`hY>2Cspcj_TmZ^_)Y7uWVExggF@tvp@S~Om^dhKX$ zPxa_IqBZ_M^6y7ngNiqgSdBGe!oBEU6#n;P;VkQ?+7@Xcphm~8S=evJg{i&9Zxk!L z-J$kd7X|$q7cEirSAIH_D)T@mWGVrecKh6Cb^;3Y7if(NYvv&8Mt=z!HG1o}WCP)6 zmw@l@^V>7-?cHYr0Zlw?vTayp)ot6Yhao1{01?$Ky-J|F7SJ^ulTs9*So*`8H__Tb zbR2cNKl}jydGkhoX7i?k(c>hV0B|lDh5^$D2Nq$n*BeC1T9vV?vc@1hp(5gNj{jv= z60Ov3L<6)?YBl zQL--3v94CBr)-y(9gDK#a9Iq^)Z&1j@>CznYR))}mysS| z0TA_+^{aO6E?|plKVcQkFmIfC$-`05>fUW=wIOAq_A`>mL8Z0$9nyPJR~LQsnpecQ z$B8k}vEP1^)Ww^CUymOP^4t^DW!K?k&>zDYW` z$4L^JO6X}~1~~MXw_i;EmW-LkmTpHW{0)z1#XidTmlsof@4pVT#Egh7Yg&7WE@Gp| z{zEo-{S%NmTDsw(c@#*=f*wF%2iotU_S;E{MM_RIx_C0685=&K7)daTMK;ea^#nN4PpLel{cABg zODQ_m6T}15QdeV(0*MhPTDdj(S(hg4dB1~98YRd?f}dMSl^D&RCnYcj?K&M9j!HW+ zTtP?lR5WU@g*k`S1(k5)By5iys^ZTs7T9A2)&eEEzSqx}&^C#>Y`&dqDpO6QC8T2d zB9W1b=9j;N*~A-T{)av-RwbGXQEsSL8tK**$zWaI$Dl18(6E4YU^prPM$I4+em%;7+lI8%zsihY3u&2uNKlF7*0sFLc!#A9Mr@(6Nyg>^v83 zdtoq~n(Oi}&SuJ@wy&9C+ws|Tieecks!paTOaD;WSfG=L7V=+F;z zXaHp;Z%oICmop&U*`HzR7vpp{0_IhuDFq%-XBfQuYP;~wRGppx+b6E0JwE=(+W6o! zbO^;^Jpp2s$_%_ke6!1=CY`jbjga;+{8+LPQK)`qsD?ZRcXi-WWYxe@CCR9^xJ#iW z{dk;?Z744a*aJ9gx>1Y~cM1RvC_K+c!rW~@32VpfAZi1Wi}m9qznb6{A%V5MouXWf zmuP!2wL`Gt*lyTXgF7O6?_K2v*A{kqYq%$ka=cr^b`huzOYB&)bbJ%>1PX#Ld0_gi zG=~^wPV>CM$0aa+dCh!l$m@dcvC&);_~NkVSWDIg&|?5%zrM{08YM$`v2J&4E*z3Z z>;;!JSaHdnEIFWN`~fQ}yy}u`VqG2N?8uoa*B**C@5vbxs2plPh2@rPjPNYORyhFD z-@%$U38%#>HDG@Dw;S3s=-UndR%hR{KO3IWd$p2pl8Kwt^9!xt){}lSnMI zvngq{Wd@awjDBrJM#hNc=%Gwum03ra(oSS@;gHxTq0+&?x2N+C*_U-B7j291un6># z)ekON&44c=m!#yrT;KRHVEb79?|%>Uep~ilN3`s|!kp+z1*&;_Eq&BR=Z)m*!a7Aa_v2b2 z*j)Kq5I;7>k1g?I+dzV)DY6wwY&W0)?-ULGJmp0T5Ux;uo2TO&y)+MpPre6NDT@xE zq#d68fbp(1#=Cl*E=p5ty|&3Ka%QV#S?v@El^yiSq@O8nqE?y|Hyu`^h@P0tlk+jD zX_`Ly_tV*vB5Gl}s3;x7mWBgyMF^>Bwe&>BY`UDovxQWt(VFt4PE>>HO1M+fiGsxD z=R(d~*B4h1kvD&jrWk0T49H|O?xvamM+@MSq3dV_N}LgG_eS1k(7{oFv_1$^Fd{S= zAKfZ+pppm%WoJKJexS2H1_R-8uRI?1_Lh-uKT8}~pBeRS?f>go__9M%hNq=5ET>ss z;AKeB7s5-GFGxlF*Jr&QEB@x~u9HRiXH;!* zTAJr)>&ftfC<)}Md@+O5)W&PJwu;y3MFDueD6-3q>72Hk^9192!C%<~|6U(H`gwv` z8(!sU5xsqPLIzhb>e&pCF=p|{*!{-4w}5+0_GAa(mg{oJ=8Yvj+;B03Hp5DSM0V;{%f2wx z`qZKff@T4pXseFM^Df`f36OM>pp=a{74-bJVdP3iNRj#|L6&zA^jhn7& zq+Sg@aWJB$MjJh&4I{rVh1@_qt`ixCZn(4}7{m$*^0}t~BUsGN+eKUU`HgYA;aPpy zGw7aGR&|O4{A!;U5A}~Mv0JU1-rD?ztYNRaYuCLt0&ZQy%WHah(_OpiwcB`|$6K!o zD#Ci9En(>ISMFOowut-7#t${`oI{Zb7)DF3PJpQzT5MU072;b6;zG(90i0cp^C}%z zOU|oY!dU&0wU%J^xsN}8_@_bqZ?=aN|6agBqfrR(s`LNmGbjGT=0pCM`+1f-{|Cc= zZ#6ys{~->&JSYw0h{ylWk1swPE*nJKfuS8!hsAsZ5IrFbDE?7ZcmvlnziF`R6&-q2 z1Z(Zk`;tYhP9nyD$S&qWMww;~HwiZ@Sw50A$*9Z3vSz(vS|hR>;DNZV$Z|+!ULI#G z2sNcSPSMgs0W-o}tAniO-$|kc%_ieY7F2VTim+HrzJ}5~qcOz^IAxbu zX!OJ5k0le)DvONmh1I^lc-i`f(;#HFu}}TpqGq$s>!DZqA7=DyeT?FSzhpq{iipcv2BMidRFQPC&o$r3Uglh(W9zXqV^^=m&} zvi8#z)b{pVHxYO_&I>qMYF0G?!ZBXME(UFSqe@psK4uM<1wQ6mCEv5zw#YQtVt9Qc zI`wUdSZwFZ5ppfHmrlc>_``Bgt0U;brVH7|x|YeT6Y8;e?4XR|UoF0_mqcrYf&9F2 zARTe}bDy`qw5QJbUsBg}mg6x@j}}&^jf(h>ygdzg2nvUo+_BR-K@eTlbuA?7?>7bED6O|Ng_f|2}+qa`=kx zFHLnhrGR`GI*sM0tel<%@EE5mZufg-K$_)O=nWc5w)a@AiPW`q@8Mq+u=X3zgiH|)g{CeL$?%)hL%reF%og*#m#xS zE>ZJ)mJrxcMxufHJTvb;=6ll0r^pd8-Ay}sFX!XY&&dJ`%`gn{bk5nhjHf9^tSP5} zA#S{w4bQX7R4tf3u8qhVHJd0 z0b}>knwH91))Yab*cq$yo|!5$8=oWQp?s{V8I$Nw%r_mCjJvyvn*Y>c5kQTjBOo*< zXKqR@MAcR8$P#B2^|Xpyx|J9Ip5Z=mD-$BQ^5rVD&4?sAJcdM%o@_Ks9d6kSN&M|c z3SUmXWobiXp+(O&&b10B(rujEkrW`VVB9*2o{-{pfYD}Q6-hsRIl@8!At6P2vWnhQ!?A{yT;MUOyK%#Rot zS@}2@*-+L)4ghw_Cez|Y_yJH{+o0Xmu4tt%V!-xQ3|RKq`OuY3mpoOAv14K(mhyXd zmzfNht%ZS#$JL&gkH<31`X~|LDa3WB+82hUUq3w$x>?l0GFRcKgiRK@_c#!%uGSl$ z;wNOoG!0reP2+$Hhr)dKWwQD{c_##VW#m+J4EY)jEo6Cz55<~xwr`cDW#V0YV&M=+ zrO3uQz`%0S2Lh*tbPSx_B61%^+MRdFP9k*A89wRl-5LsyO2lDTR4xc-=^R9-Q^U4S zANzN7AOYcZlHrEn4BV)Se;FwT6{IIdlP_dI?te^oLEO6TOmE--H|_1BEmY^GhkwNQ zN8GuIVFS@C{|ycs?>kgWZ@jo;_ZnUb^kbH^kT)5KVftvOq zu4!&f(X4ZTV%B%>nOj~5uR&Fe1)@pMq~R?oOxg`O^Rk286}xaXYnZbZUBY(KQENz> zMcuiI&NHoP+=(tVWxuBcKr1iM(;Cxnlbl48HA-EXrDQQFJ&4`Ku(NeNHl^&M!3dZx z3J)&pYpdGmkw{NFv|;acWKx8xUbI&p*+Ux9nM!k9P2Rw%q0YosXD&URiLo=opowF+ zE3wfPomNQ*#jph!@qz+1zIgizdvkz)7x^y!{%T+Ia|;YWTbkOW2~%huvgp!`IHuiA z394bEc1;wWAz8#&60!Bf*v?;`L`e52&i7%-VPx+S941;XWgs@F4{O5sJFo-u-eCn` zZCK9m@U!o^-o6v6oWJ*v-ygm_dhzDyf4@LCykq_R$%QREYWjv_irgJnM3;FF=E>Qf zC5YP+dq>p*smV0+mu3Y3N2w3E)c_Y!*giwoGfVYV7s2%3$8r#w#Mxjl9R!C^a6r5E zaipXoY|vsHu2954{>sc@Z#OsU2-$RKa-Q(UjBP7P_!vsN7;2RLr|&f@hcE1Br zXHbNFsuSzLl(Ouu8y_`M$wYuY1BScDt!Yf+923^5W^c1JLZb*^q<%|k*wRnhXyCbd zjy8?It+M?1(O{UI;RWo(E$}VLdGB`l<7u2lR}wsE89v}dPPS+Ac6^4vSG*y|ZL6$`)}=Y#vf! zrK=4wVdpts%`j~Yi;qF3k0^#`<7`e!p<6|w<`A}6ML*b zgxQl}O8fHY!^=0f^j_0o{NcRUkbS~&Y4+uKu9f#_-Stc(5D(sIrgK(9?=-%P{yx3a zxC4jjp67a}u`#;lBVR>gQJ|g!4;MVFuBpz1V$2AMA{s@L#l--|qVA&wi8D$bMcii& zse)=qFh~j)7)u??!)$MMI7kdWj2@U|iG?m$$e}lx#zkgP)yLA(v)VEk`_VUA4irq) zO7B}O_IWSbTwtid%>{g;S1MWS3S4RUnD5+`MsrZ9;b_B;Yxv(U-Ic~UOxAPtoIPe$p%jwGa&eIhgX9QHUql;3!`V#+K=Y z@VaEyQX_jBjQ8T6lW{SrYuvwk$Ek`QQLNm|2nf%jm9h_eMjg`-$OjGt(Nh4%p>CLE zTAVj&m$)VjOf1mVT0jnKu)K^4z(0F}&%qy0pLU?;+CDWNy54rkK=+mQaKRs$$(%xh%l}8%{pR0ay~i`tC-$KBcarrk4AWF6>JEjxQMx z<=qh&`su}ow_*5MzH#+&j{oBw;VB|k<#wd>K>Sqf90~DO40;j`^%pWlX4gOM3$QSb**|U-% zPUCt(Ml9LTtt5K=IATXakmWpCFtmvglhUhs;4C|NxtSJp`SUf`c}0I_CdkE~)wQZO zVZ!CK*VhB3_At2y|AV2qGUoz<&;zGR5IqeQNK74RiJru6Ppnud zFEE`Y%dc{Q`-spPMhtzF+$Wu1rRk)iZA_52AH|hjWTRwQf69j4hC>-tudaF{s^0Lb zH?pd%tFKdDahy)h=I62JK#6{AE$q@0>ey3i1AiNa+6G8C9Zms~eSX>yt?2cblcQL} zP9!AxrDIJrbp$(wjky7lta?4O-i@j!E26PATZ4N#FAN<_72Da<$1d9G5NpwTVKWSk zE%2rPH1Zpd%Yxd;Py)8B#aB51t@G$|u-pK`Cfc^)h_MT}+}~jQp}^AF)MDrLHi2~J z?gQ}d4!454{mj{f25ua_!PK|yWZ`XRF!k*>nQy=Gv2{j27WHeqJUWPijzAhex0Jtf zM`G&-`#2bB{M$}h>*?5FY89$(4Vz(HG}xNj=(0^!1nc-sKXF6;N;%w<3tb3_|@xA!0!s(Uhb0ywt>vZo(sTzkvu zx6JxxfcXRFdi#P>z3~uMi59{N56+`}JUyq?i(7}XN0b#f*FcK@A;Fyo77Q*SS>Qu@ znH4-NK9}Y|WEw?dwj4VS-$9P_=x0qJM8TAqNRi=Jga(NnN*~9J$%c5JKcd(4eUQ)3 zVfoD%;)^Bn&i#QB&k3pE_mpl9A6RP0QrRGYr+!S+Da)#aXcVQaEOCLu45_oIP^zmw z+}v~c82RS}_RPbXa19pCw%laZyP`c`^0{BNR8{wrPEL093ri^{`_(9|9CW8~Ub)8@ zDyLy$xyN?ax9U7`kL|Q?b*fy)4Rgyq#_&L;$>j_zx1!b!g*gEfJSIf!Va%ZDx8LAH z&;Ag%t^9281p^N4VH_h2I}}q^Hx_v)#@i1B!hS!+uSVta)OLK4XzAVLGLINC^hCc=)*DK$Z_yA{_B7W37!?IV$ixjl1up<~L4aNRLV zuNknc>s=P=`YH3fp(Jsqr@rHi?2`n0U}B=WPd&3w@zQ=r_+Zx1mmqExYE!j=YK z7y3y_Ezugw8cx0Uu(FLsjq6!o$gI~spC84`be5=v@(biHFhZV->m#WWD1*QI>$#1OU5v8E)3L5_^?bu`3UF#B-0Ij&ul5$SzA+EQoLn$zkK>?KxQ zxZ~~a+O_0?I~(rq4zdY~SNfW8EwQLyzPBDjwUA~LA2ZAl(N{QVdI>UgqE;qrb^y(9 z<&Nb>Nw417?Cp$+NH5=k1oZx-|Kj-g@WY9%OX6v7irrmu6enGu8jw;!QrCE=4%(5% z_*dOZY_y_VdC5c|b{-Hdy@yu3^(MvGc(7neZ%ILX=?39detmP6PTC51AX23=hH*Z)HVT^uz6c?#y;rm-_n0++_DCa#73%ma%(xfo<;i+q8( zYQ|%mvnjh;b8~Wds`r=@M1)%%pKw@+NFmN&M(lpxub$rW$DgmsyNxvHEPu)bBv1eC z{l>jf#mBl@GA?KCBQU%f1>QZ$*u`sxf9KVg4$AFanVwMZT1eRHzIQaTlOf-$tChui z*8%=obC}`a?n|J*oZ{X3jV2@*68#=JdW(qW8WXP9(mjPUFDGhW0Q06aEyI^rM=zJ- zv_jW5Yf{!N32nY~Wb@_bu_~;&l<{RdEq{3OV-{gM`-NZ0kl|MO2Gfw=HeC~67VmA? zdms0$xnGwijxb2D0i(VZtG?~beHONT-<`gFQVRR+7t5+2nPhs4r9m*7C87wdliPNp zf~_x~u|nhP%}I)s-P$W=O=_EaIZu`SSKPJizv8W} z-h=(uy*#V-|7sThJ!lQKy{!M&cB%cBFKpQ+tM&qV82z*uf6UUWZ1@Y-8~uV7=GcK| zk?PU+r1y;eyHm%C>>2i8X9cEY&KMr-$i757GTa-F-Y#V}W>sxsC05%jPF^?F5BxUF zFH@kK{@|v59q!&#!^&)u&o1!DpZ1F>kV~G8l5t%K{K42a>Ns&Bkq9Q z4~yC@H6+1BnqV^fzp;eFo^L>V^wB4iYpyX4FnLh{xW33H;mE}FlvhtY@pJ;!MR#R= z%u3&+eLsNYI&fwb@X=+24;8&bc(>^-2Y_PgP>d0s_J*=Sqi>HT&d?%@!Fe9+H~^)< z@L4_sE_sO@YN{VWG^$XP|3De{K^c4!5B3$2_$j06%qaG}juC(3mEe8anFU=qr=O2|5w`LdDohqv$ESy=h)#^XxK>B+~?}B$I+0JdyF5 z6b;~*p2Kle8?s9QSZ<%M6@A0u7k7&ZI}GoM71GkEoY9wM3yO4y8WW&CM zCGG(S^f4Ku&S3x;{E;%N$}iJ=oXqegk(kPx+=p{L=^4;?36Ya)l~9FVvg-zgustPI zbvq_JajWUsXSG_k_|^$aOeHoY-hSFL+e-RsOMA}S@;(bAPG<;)P^yHB10JX1crlO( z#pNA`x|?%eaf?a6pd0@5lJa+HcYD}Lad`qm%copKDwA!LonK!rMa$f;uNIaqE7UW) z7Nwod8}I%t>%0PIShrQTCtnB#R1o)bgXMmuBcJy}J2Z$|(#FjzJlXD25&&>Dg{8J% z^0Hl^npdu98K+_SrsX8+PrV=!l{=6$PjLxRhvUkN&Vtb&MNGa3#e9Sqj=5tm4ZWnY zYSii6K#T8C^Chr=>UF-SH>V@a0%HGt(1bylT%qCN(6)y!#lmf{jbf^;doVT{c172S zGuEA1&CRSB-EUC8dIUd&^ z!(7S92XXt1l~$fg>8V~8nd*<7y)pwJAk$owv>D21c?T&iweSjW(m9be`xp(OlXG+r zhkXJT6w}xR;wiAJ$%3%}+2T-(jsP6tzhT>vIuMHfts0Ybvrbad(VRCAi{9=5NQC$z zN)zU+eVJbKv|{U2k2T61>PG~P(w|>|w3@Y1iGphyW4z)D=dUpz#u+do*19Ff-d_)Tq9n57`ERr$oH9Q*y z@pR6e#`#q=SzHVNSbi#)*@oa(I+UYRlbPWT#u86+vxUuQN^S$Kbp32ybhwCm@wRqr z2Y_%m`6Ly&He^;^X5mnPU^GS+Dwx4YuY00}qRB|=h5_vACDvp`Xqva7H$uan@b1Bo zp?lFFL3Rz`HaP}D0J{Q1B>=zaMhf7T0I0M~8jol6faWEP^`k*li`~qy+hMKnfq7#) zOtW#zvjap=bo$!hl-X_@_ed=>(53*EKxw~kp=;DBKXPWCV-h(^_c{Et$AH1lr%yZ3{u+xl8Ct?TyM-C1 zl4phVC55ze9X|nl6|F>%CMqEGB!pf$gd&@`5WL9@eQ9@fS^J1g*=Ck1}E zz57pin&)y zLPG3RTqQn)WBA?PZ~i@)_3o#mx37-gzOHe@Sr10lb>=)dt4!jv%#~vxF;A^n4wCO< zJYzINg2^T&&;7-NxPzR^HIgdxoh_OzNENFr0^Pg1^)D~wvdMROwqn$$W_X2&z!R}x zvq>?{W{gR}`ky7hG4z!s-r?ekT5n#zf79mhV9~=epOdzE#xpV}r%)c2`Usdkpq=7# z@`T941e07sqkMS9XH1EF-x-mWJt?OvJ5DI9E|m1mHReXwqY^5psM17)+?l_W9LxBX zsU$0NEOU(EWe1#H%%c@9C7^ixrcQsPR=nuX^TqJoNVcqHXC3CFw56->Ot{*yO#+Jk z5_Re3m70t8_u32KH$7`i^md&@i=7)~zr=9KjSKcL+ z<~b0c(j_L;^IWFmd}_Uq{I9*)oC6Rr(y8;Q70Qe2=~)1PdET!xM37kiMTZ!(gZ|gv zAqF5|51mg^COZfp z|D)@$P&>>(d% z(d+L|h-JMw{O;uV=+z;f=I}SYq|f-)0jLg!XX0ddwt%x_>*U?5cWwU!KH)<+sGdg? z(xOf{h0Ar@zZf)C00ooqB)a18VAO@=kVzYZ}F}p5NaP~yb>-u$!Wditln}`mzdK!Q)-_$_!ZprTC;((HiJNwqNmkCtkkFyn^j`{!iDnZIo47_^0~T6W{7?BxQU2Cm-{$136irwVgh=tJo}N zS&n~uo_~9;uSD>U6uIjz_a#<)^Ti%s>wLzT&a}33pXE}EZ5{~9&aR!`hK915@VA@pP zdaUELRK>E}UZc12x>k@$SyT5q{~gQ$vKSWP;6HH!LMdaE%U{?)XsLiW71wObMGE=S zXyz8{Rs?YPeUQ)ZU@n$jzrU}EaKdb;W$F#&5nSHQ(>T?$U-;bSNe|B*KXvRtWGq}Q zlNlrQdMTl*@;`0&woLoK&F)tBA^yj`JS(*Sqr^>HOC)X*6>ph1>Kg{8EdNsj)4{De zhJsu79B<^oQ1EjGLhP{B#n}WfT$Twk5D$H&7Igw|+hG}s2sSa5l|ogK{7S0G6V16jA$MyLNz!LSOz*vR#HZP; z5C+0}Da3{{BL=*TWT?s}cEp;AY&aV?H*ys=t^xLGM&YSP41xd{mHA9qOT4dfBf>Mk zSxcUWv*GUUAe*4%qc14eOZmOz%AKIWD?Y;LRT;;9dcMqHb!wO2?P2VxUg^4ox|@o< zlQ7xjK0hB>~dC%-z1RVjpy-?*x>U%+Tq87sV}51M z6Lol%?M3i5htt+SAN_-T6kcla4H{#9^tYu{&)0SlAD^-x8OIZaLG^s}({(Bc}UBaH^w(TYOhBp*dY zoC5d}p6K(Op9A#hbec55U&BmGk%Bu^eEHju4E9veE%hYDvnD(99^ZX26!4rK-i@LTEH^vbX5JquRQ+&RR%%{>X4fGda3dR^!@r+bYY8 zWI=D4YkGw%0Oiy^YPRK~tA}lK0sLymNwtrX+ENQFiN>uOi-w&NWE=UKleDILqss`lWeKQ${7=k-Wts1H~WR(l91zX)!x*QRX1NDUl`kdWYSUN@i_E! z0DQc*1aK!j{Z?H4_7nP<=?&=_rd;`AuP5PXoIb@ zDd@KGm#B!qqE2YGOAMG-ML8b&V5+T}8Kbx|QBMb@p`QP0oaxJpy$TCD)touFx+9U@ z*M_8EE;|z07jNq>rLP8`I<;$DH)OWjJUdm$YEH6|RhY;%y|4e=wmi!`OWJ=m$^cc7 z|LNIQw`<3L+l;p!?7!~gS+)IFysZ7#tpmp~`>(jt{_DYp>PxesT7~7*@84eP3pAH9 z4K#ulAQeU*JzFA*eIo6Nev=?GRLf}ZGDG#$aSRn^M#Em2Rg|!W>iH~`hH;&$v9Btc zVhu6L{B{^Lx>$fs??ifP~2{Uo7|XX?%v?0_T6rH&hPDh*YP7~{aE20Z}=Mbc1xk+ zHdJz_z>R1lKGxVUr&n#6Q(8a%QjBgC8e1L{m9X86K?;@DGCg4~<9dfLGtH9TN_hC{ zZE0$=ze_|jQl&0gEgulAl*ml589dBqpT7Vo-~t2CRaYUxX6m-Q+7Hmq~mR_>6E zHk`hCEOph!4<)l%-}XWKX`=U5#t(+c!++lG{qOb8ew9z1`+qoMCyg%rt*89{zY9N~ zS@-{&aj*Mu|9>CP7nlESc{73<_y4|pb2}@{H`gG?+%w8Cw}SXF4_W4Z7lscnJ{-Pi zZ0R5?xyA<|Ol)MQ+<0JPBWQDwkaj%>lFjdiu61W4>Nh>`rl&{x`& zpv5BtQ#xNtqd>@e5d62^Ko}w@ZoGB6@MjOR;t*J;FF8It+N61$A`m<;n1Ck1^3xM_ z$w@_4EG}BX#6+k(64X*Grqi7E7tB5ozasK6FKF!>VA*HbG!I(ZMYhPVrsq4+dTN~W zpp{xV-t8D>mL5nC=9zxxgwCh zFoF|jQQDTgr(p|?&EQbqv#c|CJ1uAk+h{{0t(!P{3XQh4az;xnT>~rp$Y_M!UTOyq9&o=WUM<%Dn>&^t$Io03VN) zV6b{`^4H3r{A7T4yXzb`iPH?ZfJu12y(sC!n(xf7#C<>^)glk~$^o ze|0SLRp^ySoVx?1k`&KB_bGn)r>6f0&riuSL)HuXE1#Ye@&>YZ0d$Nx>vfX9cge>hw|B(NWduKpPo^AW(*l_aPY$>uj67Zq-;wE;(f zONO=$G~BumhnD)jIOQcl$f#9r3EdOb<5y=jIqCk} za+$v3w|o_6Umd1A!gec;u--~l$7L%Bb9rHV6py2MhB1Vfs+Kfw4TJtxp2{uNtrlmK zyt=K=&uas!P^0PCH#KFvakkc+=4DxXxY4jb?fPA_D!Srr$?Q{0%iBUuUU2&BnjR6p z{sg?t?xsJz%KlIQ>!rHnp@i}dslSZK-z*?^jeaKA_ufxEbhxLV6tUZj^@IHYbp*7G zJd8Kd#~P8Xsa|AEf=aL%3l$Oq#)4f@g|dm=70b58 zz7MeJpksbEwhi->3;}BFQSPf(Vyl0otY$pN)qVyY4DVldKi?`e0PdCc*-&Rk3mcrQIgfBVgSSJH5DU8i9v#Twq@XsX*Vcl7{)wZ$t& zPa^9j3z=nsOO#%9O`~~(h40V zYIJ)h5=y!vCt#n0a=N0Rx?S4|l&B&5M$O?(LR)h}+Rws%d! z(iC>pJ$Ina+1QxK5@uL?r|o*_rF=Zrqpi%2z7X$Xe=gmgd8-H``qg5EYrW?hcdG$U zjY7fG_!)t7;OX0@YTn*Z6(F{&u5?fJFiT?7D`b+^7UE^&cg9hDi@#?te)0T4nW2Oq zVv2Wm*6H{-WNr4i%u&Q;lJq)oQGN=mJJqM$pArgh1Kz$nIoxFzKo`jkMm<2R20u1~76;Dl8SS26_(O+JS20@lZdGwz5UkdLN(FF99ucMhgI!5*VmA`yuDtw5!eap`Fp%i-qg*U98Dg=D5=Dpt8|oJBarZ@_arbYp$0zaC>O5Us?`5BYgTi(G}W=v z=tTS6skD2P=v<{WthsAMpPaQG1{1n ziY>J+V3W<-D3#-~o1C$9nfx_O{mmH&;k@lrtt~NnI66XaFJK}s(}FE@+9}{jO)LUV zu7G;%33_Kt;FNm;Tp)$EnS_NrA;oo`MB@xmtZ>a^{UR`SX*gj^86^8XWG9;robc6FwD&|0BF_mp7oPPvoIl z?>bwX>L>bBV)#Mk^ruEA{Udo8%8iY$M0iCC;)=2{i?C?uN2nO{9M$RX#3Y>#kv&=3 zrPpYM3FoFUTb5$cawcMOHf$liMjAl!V@G(^-|KuL0j=z8R&eorZCDluda=78zlNy5Jr}%^Rn5CL;&y?>wG-dMBmI zgpuATcu6US@Hirz^#OspGv%+Iqduuv`tzJ;ppMu@ic$*TwFJLh!7;O8wkvKRG;J+A zOnablT+r|v!wV}|Y*R@#EUsgzZz!o9;9OxwRP__ z$z@Y3r1Nsl5RhRV*Y>L_fOZ(2H zA%;n9jnGa4{__;ud4i*<0EoA+MtU>x?3?@$fY}WugQ8_EV*8p^cK5(&D6~MVqXv%> zE`fZtAAv-mw-Fi@-fQGDI-cztEk_#?h2|}0!6&q1O($X!ajGD;-HJU~v1e4g302f> zJp^xCpDv2?{va8CWZXn6?k!XGomi0*`b%A>hIQm`nfWU+Yh(M+-Wy15=^r?Ems9QK z*y=i#&B_y#*klJ?6_&HfT2bKmMz8PQ?%wb36kVNb6u*b3^pfxbc%^opFUGKEkFS!O zf&`Xy2wja(hGDp$upjOtKEF1)2@p&v*SZ#TgQHUuA-=Yka+ z)K|PUNnq71&X8@aBcSh>MJ894IqH(AmdQgfwhRAY8$gughT!s5|8$(g_sLmb77P)9kMigGj+%cIGLTy25!CM}9X)EXGxrwISVV+mBlitzbj+TmOpn2?hKccLd~ z-&k$h<*W^DWpLvzQY>F&vspfCvGQU1sQUix{d|`S=cd7wmdy&&aitV9b3#Lcs+mHe zww+FOcXfH^SpVZ&e^P~p1L_b|1csy9ZM?!t(=2evzb-xaaN31s=MB{_Oqx&pV^zC9 z-D}|4Y5`dW2`%-UPA7huS1b>c*_37$)AZ>kO7tnwMZShPB+6#N zPAhTS#SSsYX}9ZTV5z#nSTg-e4U^=D=N_Lr_di1*!x^0F`pIQFOU}}! zxnL^tzie+i_dna)JH3bdpZj{J1+olFwk1}c+5So!Xn?j_hUrTXFlyWm6>3)j5F%z9VMKxgLl^P7ZBUoiaiDd zSi0lX6UXrPMhNo#idjO53&%LV4LdoeIV3;({SVGYA#m{3CE2bdBPX{?&8ZwUdF!3!x5n zRt+LDl>!K^2NH=NY-w<0*pBkEfkDIp0Q~<*lKH6BlV-EVU9JSpg@gC^W z?2~CZtal1Srj*26yv#;vpANn)H9oDnWkeW=bz*%s!baSwOE14k@kR@IiT(FxiwT`> z8Cx(9hHT+rGvn-Is$N;m&^zs7O9q0skF|nh2$Y$JSkKj%?7!y39?FEFANDIULX@U@ zkX(56*&e)`@#mJ`Z~HXx|1EIAVF48TR%rj%-PzuB?EjuU*#F(jv)uV_Mee_Ulyd+# z-#tEhbw~w{UVneGtOKwMq}Fi&{RuY6Juw;gPZtx4{!?t6PDxtJPH$>O?O#GduNCP3 zGkFWwDUV!FoD^2?TwLZ}jFFxMyN$3LAXJl+9@iHaQH#8Km@Lq~h3D}x0I%2z6<&qL^`ie)j;^eR`AFQ# zIag$+KjZ{GH67$|_Py8K zksLkZ$NBIhXEv>IdP-X)+wAkxHuF1XJjhJ%mt8PVL3FUC`58s6(RHVp!=E4l&F@bT zOC!%e8&1!Fqxbte=;qTm%xuhtajAM}=m?8}J(#>wS!@Fw3 zq1XW!5%3gqbfPqNl?pE`^!gM52lzTc?&Oh!ULAh><7*+a{Pg0(Tl2;fPrYzTpGSLp z(Vq^{RuDrjaNOyNGUWA4H5UEJS+-DFVfpIgTum^+h5rkch}%A3f8ssZWi@$s;1~55 z#M<$5aR$|Enz!~Tj;7D^TO{LPpzA3AtOyocg9Uj2 zIXRus+)*3rHneYH9-v1Y2nBp7K4w#3Q5{_PI0Y0LgqfbruW}mzf#uUA$O@r!1^Ixy z;US&%5-d*gJ}czKpVx1fLeer0zs|NGwaLhRg|>`#fb$_^6N~@@YNWF%&NdR`3^i{2 z_(2@8H5^`*bAl-{wKZ7h8yqFi%ZnrL0@k2P*CChbwUaF1@#9dme$T2e+7FmxG0q^A!!`V-S@6J0XW_f? z6?XLmUj0ua`w!p@=P4YR;81zdAPQhb{?{%#`yY#O~)JAssCGPmRP$mimZLq zQq7Bvtmt1VONu%cA+U9%vkN%7OzMTD{2V4Bwbakvp4Hb7W8MKc0qjOs=jnv}{+KwN zYUTeVy7ecDIfwxX=NWvYRf2z==T{UO@oYE*i6*;D3v%7axS$KCjKLTa60~4qPZzYP z=m;mMM%~u0H#2Xkv~OXdp`?lwHU*L#B6M>?*`ZunEll@uJOVm{2rLD}IME8=<2)ZR z;}C$4{FJ0Kx3xKoil>=eknW9?C87o3OfuM&SwlLzTUCW3z9W?IWH7_hp9%nWr~>}J zuVL%aqo0!njAVwJ0fmz!CLaAsq81}IqCFyp;rx>rqe9fbT^;r&eB6}(w-sUOct`zT`_E8~k9oIYml)Q> zSn#Q=2DPAvKpr#LHFoXB;&^NOo9%B@t*zd(uj6mFVB8Vzlpj~Ii`OB7=muM|J-i3S#JfZcsGktPI)%g z@rR)8mUxQ`r3KRIW+$2~#$*0pbw-6^00t8!oaX&xHcM_=Jy?xYp$F0#7LYp)`)-{1 z;|?EqhY!5N2j1ZW@9=?lXy6?hct;<&7<`8hzQYIKp}}`(@Cr-O#i+O`Xsn~`g7?UL zm$Do;tv_G?xzp|Rx}9}l>94^FRJn1gXpPgd9W9bEn+HXFbZ(FnqSQ0TC!d*SI-W$H z>&GXOq`hA`-M1OPsbDr+z!I>Zn_FSdvh{3do7UmZ=5~;?bie7sBHiw8e!WR-sJjEj zzuAnt-^A?@TY<)7Sl!RM@m7y@;%hiQeDgKb+ujLsmC{-vrb3mrzIhfy$!9w|vfi^U zbaS(}xw-in7>go=5^AX+5(T5hs^aS{_!nFH2L6S&SUHLr4|={TCZw(DaxT<~;_Xfp zbCzUPvv^Z|b|m3ge5srjb&!t%5#b*ij4f*D8~g$V*0D$@{_@yXRAtKTGvQX!=f1a) zKNyxY^fr}tj$bt19G;>j$V`h~o|wk!sS#48lf zSZo6FBQM&htymXz566Xs%de{Rd}&%(acL?_EsD#B`Bg42oiN6Fg14^;UInSkZ~LZQ zPKvl@osM^Rv(x@CaLLY#@q?}tJ&awe^ISmz>({ayeYZhhRqL$jl=njsPatTG@mbQC zw^%TRnq_4WENh|7F-x#xbUbhDicnaF8ip@|xde0zcx8NTc_Y|8!Z!LzTv6b<;`>dt zJ3~?J&wx*dcc^8z(`x$)Ue_#lQ(ErVYUhZ;@Q&~p3fT?~in|3uT?IK+1HTcqHlZTxMVn8c^;UDBz@xRq58isu z4MP!R-27gea(U?b5GQ7#L*48S8^*aWSSD90_ED3#XO}-{iSXXNcDrQJFt9hx!1ii_ zg*k27+qh0|n}O}s1WN?ziG-#Us-6ZY*jHTc^rK$;=~;a%rD#J(Q5K<#G@0AthAKFZ$RwggiPK+w$G$x))(ae;F#8Hm zbjiUfD5k@nb@CJFyEDJNl_tvkoDP1TyV=ier*T(LBm1AL6wL(EQJ*JPt7!mK;s4j$ ze70lT|7>nP`2XF@vqJly8um9O)taUaU8xyQ=fRHWk7md7(;*s09=__oIeh#2CyJofvQ#@ro@P(`p&#(ZYP{=BpTzZwyKC&n%{LD(1Bf2MsDj{N9 zV86{w2fl%68roeBuyvxTN_}Y)^{6viV|vWaPvLwg_3wt{wU5>D>Ug;I9S@!OmKNz7 zPLP44MQK$zD(AGpl@hWRS4nua(LzJ!rA`0H47g^`HO-qKMq`}(4oD-wdsKwWmICT< zV_cfQls+h)XfB{Ja;l9s{Ppa(OWH#3*tn>z5|x;3rWo~2IoFCBpKO)rS0U#yoesDr z)F98tj{~l&dc}6Tk;>3Lp%N7WKRjyNGlt~-B+m1zVE}dTV>7C(^K&@2g`0n6r&~SJhEBh(cH)TT2=1RpYAG&&<|2+I2n#>sQRi zdcc{{oIGD>y%p(dE0nd!N)st}gH%mQ+630Irli%RUY%Cn+WFj86OD~^N&Wq{e)Kh4 zo)buY(B>|4K>yrow=d?Y4t#X`HY(zO$J?>3|Lw)w5B{I`^8B&le?RD7Kac*EoYCuP zSY^?A;oM*=Emo{2L&j$n(=UjX=i3Q6K?)ngY(mab3Du9JSq{ycYzJm7(G6RR8=#2` zMBHP5;I5 z@!<#fdHh<+7pDA4hm8)N>H0@d;Sdvpz&8EeyAKpUp?~uC_lHJ>PSnEQ6?@dx10`s- zD@B&D2tw1nq9_cKct1B=ulfg71ae7lyHH($_1lF4b(E3nQ_@ zt=F)VqItFa8}rY)7dU$H*e-6X6Uwu&?P{AZL%5!^zGluekD^0zFsaR`o0pBN=vZgu zTm9q2|ED7m_TKhiynWSw`R;FrA3y^9*5HFEAHIC|!+Tf=-@Z94 zf!Jy`o_5>JEqEIM{2JSd|#Rw|lsTn4ML zOeV_)SnjLClNU#C>Y79Z@v84QVTPxdT7qB5ZVZdQkMnA*FOW8qX5~%xF|9)@4pQxb zIR$PrCQU&td+D_z@Ns%i;t)QMUc%y&eurDI=wvUj4f7b+cujtiPhVvhJ>x>&D>TXZ z?j0CDrwT~i07xu=lx)})hkA9OFFnj3f}D(}`D0mJ9_1C96lVCzz8%c{D#@c~-_zjB zxPs^LimH4k>camECZ{~Bsun>2+;WSrqt9ZE5$K#7x-Tm(KZxKi<6(b3yz3+Ag-4)3 zXf=7QTTVlh5%fHBP=a?KolRx0 z=z@8#>QYtHM0{?2)x)#er{w;3dd?!)Z``&G)bj3ZZ-?%G@p1IOnEz{g6$7k#{^0uG zI`ePq(weqWs{ilx;yAYFe`{xF`$7MIA5UHVf1M=RPOWEn0si&F)xk=x(BFT5_~Gc~ zi#PovI9Po+K75HXLETIBaAi#|E`5GhbW2bx^&6F(C1?`euU|pC_HW?A#BI&#%v;q= zuyzI$b)9lU@5VrwF*UzHSq{W3m0@Zd1YWM~dZpDF&hnz@^8`rstBvw`^GY)BN=21Z zC1aZifgyDp z7*C>q#Y~Bo0aO%$5bu?@oh!}FX~#TSv4xgSm?D@uI)*U6aNX9P4E>0W;eLJeKDtP5 z(2YZKQ0~f6T%cVzb9*BxVL}1cDWe(_Q80EGbK>YkWLHiJD}kHODSI5SFn~q5zoP%Q zm#%#S^`lcXKL_Gu_UXw4;anucbKI=cX_1XFAUpY<(cZ@cT=tqbbG zAw`qPC%9H-6l{cghtg20x&)iW8IK0e^7LVLB`Pw@=QLmtsJ`h&qx39FSQ5I2lMwbqN)dYvfhMZGrl4#5Jz8#rVJp%1%bi0e7UoB=LUcZJSfs+g1@gN+|@FG?eK+FTKn50vP`I(3p z0y|SQ>KGw~=aeTapRmnmD1-JF>qO&>LXe!1d%--TkH$En>|6z5wznRA;H~leYqJz6 zyg<*Z^g0=e^sN*>J(-+g;?<-OgCIhP*P~ZFf8adAbdcG6G2%Jr^q#`%YPAX9*LdGL zgI1?=8K#a-G5#rrqDVyE1|J02UIylISC0fJB7k2<`ZsZj1qu(XC4TYj2wte<`(3>%Yt%vI^&D==-q@9 zyxb33S)1j|MDi+Fl3rqSz`fw7+z!^mw|r~W=`9z0oe;DtZ*agOM8p<#ieVD8zVW(cdy#UtK(}to^j~eRfoB~gR8-tDyV-X= zW(X2jTzE3>i%TNxdYqzq!Em=_wc=o{Q1DxPgu@k~^7-v>sZX}mQ}3;r_vY2IBR~oX zgK)^jF_Ws8+VBMVI%i^zTSZxfFFp&xU5;iA^2Fms6-8nhjSA~hpY1McnRDDJEtQgu zF=o44L={GfYCRXwTIfNwFeyfJaSHugid zZ8}?_gs;xzmD{4fC}G6;6xtsBFsuQklf{K06miCSI!?~ubel~xewPfQLbpSIC$P+V z>Sru}4%FL0Ea?NYf^nsi(GKcW#1SB0%*WZKxH|5eQb>TvRJQ38GN_avcqoz&I0M@2 zzftn{&5^MHgFUlQ8Z6gRqLzpifHJ%jEgjzVN#Dj|nH$jp6e(B7=H!Fxxvyd?fPg&F zws=gADFY=Si0&rxRV-c&$|DV6K#pw6NMwIsqmde+a!=m9dbb-frL{Op&8_V4PCXX3 zWnahQy2KTV#(j2l<`&{Dm!7S-6Q7K~(lH3zotRz7vC0U}8|a6BxC`?L&NfJXCf;TaSWeco?Lrt+ShmY0~?%q~iNP3vUx( zzI^yvTq8fL;S0jtlqm)UEf2v)ql8oh1B0E?A4+&|xlHg=?D?dhIE@bX8eJvFX zSh?L@wvCygaadH8IxNf|bW-6|VIusvQR7^e?hfJ(iZ}ajohxpd@Zk zg|Ul4!&b10kuaVMLyT~s548T-(LPtR8ALw3@S_NMjad~ zfeR?hbhtv?UXQ-duSCKrL4ob)3TsdPJZF^%|H;Gzhqpd6l--$Hw@Bys^NMLXQLm0_ z_~au~%1Tu(Gfzp!>pHBXNjA?&sjKTTq5hOdJ7cMNp_8QGW(s9gK7vU0K7SP%b8l}z z`u+prnflz)S0FP0dHL?`%ft64+*H3s*?;NQdUy9F!s6tkm}pxM(zFzen89$FA!&A_ z95t^ozY)j{|q>COSc%`X5_2(M;*b70}T|DnT4}3(QnBH@@vwGy%JyxX?ZFbCHum{m) zI@}x?ZSyxG;Y#l^bl92a;;6%`z`m;QkQSi05ui8-XwaxfgK&=qje0cDdt@#TqQ3ql z{Wl9hi0TO~N+3Scc!PcwzWAVuVF6Kye!zbxsqBM6U-T)q20+Sa`~c&=#6@%2cBu+= zQgDPqy@)|qEVgC!LY0SkQi#cxI=o9AtpV#`gDn^lGgV0-%x-0R8xNx0geWvEI>Yi8 z31I;r_Y7FAOhDCtmqSjrqRTy6OEVts4~~c+Tt<*laUHD1MrxyM7VQSG4CW zhjBXTnIr(P88kFbnZj8qf%yzN1=Jia)N6Yg3F1eoD-5Rtm(ca7ctfB zMTfc+Og>jZ+iKD&lOeiU!U1U?1{nSJTV#Cci7!>_&S2*VvW}upp|@gxu0%|%BPI?a zred=+5z`AIrneMgdi4@KbUp;*f_ok4l)A!PS8$EXUP#`uEF7 z_1POf@}euiWsQzD;j&FS+I)jTAC^gvHYv@W#om&QjmT1fvGqRZi)x+@&nIZSFuq|z zAv10)GGy*Ralqc^{4>jLK%F;qmGqbv)GY7)ztG%RXcO5cf`rV4&2<;Z_elCs;UXg| zWZ*T&$KM5(iGY`xfE4!8Qj@hrouds#myveK{x@l3gTJB~cJEV&dm=FyCjs_HGJrDy zpAU?)8Y{%j%MZa3% zdJC`A-RKdD4|Sx|6&v>Hs~$7($t!-8pq+EfthVPlH>WrFY)ivWTQE_!hFTdhR<_pu z;))}U(LLyhI5*}MmWG@a;k&0zVWc038{@l*jhe^*fp$_K#4b;@v}{RFQA6S>4zq{% zp~ZPVo2zr7_e@GBuDyLG&DT7TDy4&(!%;F%TEXe5!mdPv=Kxx-Mc%5XMf`)B^|olM zMZ{yM@>J<)P3vrV%>+-fYqd-3?Icz0d~)76G>1>a=?ikRDrO`{+;sY6i@a4&i}**< z3$<7}eTk0NfsR({YzkT?Rd&7_YY3h>&(oh z)vX{$sxt6a2~mxoKRP|$T(ZYLe3f;5p4acVAIg zwfd)^nlod~im(XCtewBo5LPd29S|~&8#{3EL@XsNfL0-kH#wvVDO!kQ+68Bw>U6gE zNZxEc*8q@d`=yD4j=)>xO(mLI3)H)|_vIcE_TxGtiHDoR1iyQwp>T0dMBeY{e2T6a z+GP0lXDYNVEw*j8m{rPeM*V@!kh4lzl@*J0QmoVeaEcH~zl1aEA*0&R};0=RmYwulWX zYJ`=nOd=|}sw|jT!O$LHJ~gai>q05Dm#qVZFsQl$4AXp5k9!i{rAa>i(YWn_({@eH zO>`vc&^qn)YYp9NerDSkGw2*_u2unGC|@nDBXU$k*lXF4M-k_Y=r47yMAf~iNz*M! z!zRC`@gB6ae(=7vJ0_u5`pGW2dTkEjTg^-q3?aUbu{mv(jdiJ2OK#)IAbzs3EOd7% zy3Z;g$18;FF8rPYdwc7szFX?I!3N%<*TD>+@I7S^apn!F4Pds zn}Vz%r{4;sU;J)7@YRb0F39+{AWPk^J4=C7J}Tmf$d2Z>?B$Au2^S>SH!ly8k<8;L zoBG5k39^x3VhKB5(6@m(SP{&Cp7XI(*qJaD^JYlPrli}`c(v|T;Q}vOwvtjn@Htmi z?wC|r;aG!_O-U=&du|C2d0sG+M#DZ`m{_v#fIOO>2;D>R(3y2cKt|AogAufw3 zSq%Pxyqi2pZapJufQcoIG9!Um$MbO$28`^C3TjG~fju@6po4 zeAl);2C3a2UVeZfR}6NKJ$`-SA*u#%R&7pg#w(pOk;v$SVe^^m^9QX<&ZNq&3O@Sw z*!vEA^cTa2aq%ee(N~*On^_zmWCf*>5;+J$Z(dSsav8W2!jO-`si?G!_cl9?u}RId zrBpDxzV7vAXq6VraWOc~3lh)n?^|0j%q`*Cj`geD9I)6%3m-`Q2x#XapuJiINDBNm znE1NpCYAPbq+%ZGOJFMR1Xq@3+NCg6?TEMlowTddN$Js-A(;C>g99ND!&q|*x{ZQQ z5RwE9-}PX`-00opZ7M?~%#bIQp#qc|o)|LD2<=SB0S%7=3T{)<`!a-4Ozr(re8FW}x;VAFN7>Rx*{(jy z5>(wUMb$0<3$a1i|I5sN=$rj*bM`|z`~50x;eq!@|0sR4zirNb*seaxJm&YnJWU5l zPoj1tE-t1MoG?-;QtmCRy3^xeQZd?jT~G*5ssg}JbP#zX@MsKNnsgSt zMgzvbC7Cb^XFg^43X&l7`qAt*iY98b1`b2BCf}4$o{`qxK+pb0M!4DfN3gjc{Ebk3 z`ybL}6U1|PH;w=C&BsEU%+=sZefD+PFnziZ-!a~I4Dgrdo&M)$U z6nWt|z7iP&vOidEbG&j!yIe@EF+G7Ya1O#n7@HEHB-{dOg-0BdIee%%iY_rG1I;`L zp%_{yhIw{Hy(99M+6lIJHeLPMR6C@5GAf{VVUTU?AN)Cui+l5Ik4z8tg8bE1YH$lK zB$thcShLykynA`(y*&4JFWO2FtPP-1Q3>r>_0A=~SooY`9kOP%DlYfnzZ+X?3>{n_ z%#R{O+F?fzb|_Jl$coO@6)D_DWXc6H)uTEuPvVx_y35Vqav7U`V;!qLZDg%&5@5L0 z`~{}*8~5UFi^VOT(yP49SGiV~u6LIy0~6#-jjn&^E|>sKAML%rDmgbM%k${>*%(w- zE53{Cb_LG9O6o31+BCU@a?6aCRpk9!7>RthbZTjxH;Mnw7Ww<|@lE(cwjw(Y#B1o-bOT zgJ3&=MmHln7$o$zPA03R_jt!yvJEAln z>MG03_*!sQ65sTnH@JE>=}1CiTk)QYWa=7{2ec&KFfti>y~Vn~WF zG@_?DN8FT6d1XjZI}BJ&%kEu+np5r0Sk*T|=qnjn(rjUtpT)+7dIg#Yrle*HQ5t8H z&TtdhnulsQaQ01$@kBA60=#IMt zD){JVLu|$PGnKhm4h>|>zXUQ)ZTT6s7Pt;mA3^B_jlH8XiOeX)@tuGI z*6g%fwM}fzTv$>uOhuC1l(>1BZ*3t4>+b}1GCFv4N9TMANMAcfN5r@NwJ$h;-^Z5| zSQkfUfBEb8ozvdwS?{8Ie$efF|JUBdhtA>g!O8LeJ?I{vonELJ>7(=}9z+=?p5O2s zaRSkw$e{r@a#RdzG8Z?NiSr|;a&R<&YMmy-nIT7FabH?@_^6;cW`Ibmr&pD04kOp9W7!7;s&pexjX%PG_3$No*@6&u7 zrp|Ij-+!YIrgS1C(B%9nsD+=x;QQ}SfMrd90tD*{PU3zVrg!zVHB#*`nch*GyV{^0 zw8=bflK-@Wx8z_u8InrZX#}aR4#wn&nGVA-&3bhj!HIN4&Y0vBxyI9uT*f1E5DURg zlW>n1v~qXBSsD(=YjW}=fL}GC@O%6`U`bO3W*1&HcqIaV3j!p-sr-^ak0IY^llFTu zOXL20Mzw`oG?}Yt^nmm<_<2716i2u5;FktQSBS2|(IuRbDRk`jM{w#JEBz5}Aqbr* z5wm&!pM(cv9$7Ma#C33yT+VJGS;7h7vJ(Oa;Qd6nHB@Rfx0^xjA|hiLK+4!~atBHV z#L&s{VdwOs(`)s%o3qbo_6Rr#!Wlrgp3SB^TU)ocw@qBu%_P0rGOE<2+N%tIzPNaY zZ29-30^ChksRJ!d2BZ0qY_=%?GNQkmhCDU*ihm)RK!C!++&}a*E zt_6^>+%!$b$t>!j0Rfo|dJ#~jrYDzbQSVeX91o*{mYhtRhaBVkeXpNTmR85rGZm9NOHYPWRyWL;*l8V>}0_ z?*1Cyb4p1Gdd+SvYr-I96ps5tFgK7UD$!_GV2)wbZkx69Z+(o~X63rnavst&+c3HW zST)ZdRlA8G#dcN)b~c~HGm)@vO=$qHHR)*Jx+lqM^as0pkhbWb>1SSc1IseRScUJ* z!dX1=7XAg(ZcSvv?*6sa{9Zp|~} z9cx<~->v<l<9Ab2?a2DKN$AfEO7EPoj)ZHJ(DM%i|`;*ZExN^$HO}!N^MXB0; zuw8FR=LPY87vCon`DVMm_II-Rq{)1$sN&cDKAVOqky*@ZH}+oLd)C0{yZE|=-PrA~ z4Mt&>c^D!v(doQDBJ$ym=LE{P4#(-!z95kM46EOxr&EW4oVzHR4_KdS9y0+q3^V+d zH6*^Pides}t@gz50=erJj>26OM`3;PjlvD1L=Z3C=vDpUvq%hqAJwGYDq0-~vp~2$ z{vdu78X&j@Ds2n2<6Dc`9-*oij@)h;{!rNl75X>f4>(%#e`g71II-q<7nr>?GB2y2 zxIF;f8p$dIS_rcq6>KqSwrZg2sV??!y>_cyZMN?@8+Uo0xEi->x60L~jXT>e*|f7| zhcN>;k@g6CLdGj0+BqH}!l#T1Ap9jB (lp*HgMzuT`~y=a;G-`B5NkNV$-cvh(YeFgg8 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

eevTlIW^2g93f8FvlnP#dsqPRchxFqSy{ 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

xiG8<8c3@rQxvLO@~|x#Jkj_+S%MefKjeq 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 =USy`NRvmq^; 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 (^l_;&)-Skel$(UU=5AJCz>OW*HpCc;;$6s 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

NDC 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 ~qeB!#G6?&2bG=xfPMGbT5{sVPN= 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

  • yjD)d=hM$+;D%sDE$3CE62&x)^`n~(cT?y_u^vw7twyXtbvH~ww> z)9@nHzjBKh1|r~J>2u3(xw~TZccGsFAKs3hPL3c2RQ!{CfSb=Rn^vKT<-1v{p)|Y6 z(ZxHj_dXjfcCxJg*JCtxU+T!TzgeZL=O=f1qAod7CMrgb8W#5g3# zJU}w2+;aD!`T?)#NvV5^BOu70G9M2F*x5>52I$0ID*umr@n+x$eh2&)ZE|)RFcly$ zg?W*!%B-gz>LUiMOoYMB$_40@hKIeKZ8Ts*~FoXGK0g(i=jzn0-MU{ z%w#kGA9tYtC66a@!Qeq=6gaoCW*vSJ&;*zRTKt$+J`2d43P3z@C)=eicasY#G8YlY zoSAMqLTh1bOR^+tBrHAmEQRI{Ymg~P`)jB^C>y60GS@_dqVHQsH``^V@r*$%c z@e9mU-B_5Lxr^58?G-UV(eq8c60d*_X~AY(vK_lUE%@B;@Kb+9cWu?8iMb7VU;1@) zwMF29@wUH*UK%;{6b2nhiJCnL<$~ZefAi%_-K>C^9I6hG3%UywHXPFOC}foiJT}OL ztsVU3Al$YcmGkruShVRzy$G}w3JK_9@z}C&=x0h z-Td>9$<5Tgc2tiX7RA;T_TVQux!iZxN8vX-az{{80ddB;#J#JZ#g1UuSxj|_p*jF6 zkdlZE)?X+vK$c|18`c_(??%}Qy=_KK42Y_JqhMv2q?+-s_ghOpA1Ey>$nA9tkG6f? zIwlR*cqH`Nft}laZ=x~&xsxCfngW*H%O)FEZe`;L3e$!n2%ky`!5ibTyIO6w!Hgbu zVa8d$ybdO!4Fj4laNxdXxXgljY)hXr#+_izwVjC*bR4j~HAwn!0W$mr@HoK~#ZDHt@p)ci7 zU3*DTL=f*@AP1O!jY}0G%$yH&e4p+L9Rk`V;E2872Al|5UlEMS)hIHgV`XoC(Yd4YrCF~$9UPC@t!NHmF!rDXsUx7v)0SW{n84zku zptnh9bsnHIsG-_0)$6oH5J5ehf3F@{*-ux@5Cev3DvvmKZ}aLrw&JObIm*UJ4!u-j zn$%xR(BpuzZ(Qd+8T{yuuvF=w=7I^Crwx^HFzOX5P?|@14^s(x@y1&@5!APs1S7K% zL0cDL=^`S$&iCa*trzrcomG5V!*BmL536@Shhckd@r?B1ngs~x&Z(TYV5s)BCux~Rd8!Y=nmI@+M4 z@6P)rO)kElwTA)tVr}k{Sqm^55^Y*<;#mLTgUJg9qQ$S+N?ry0T^#$k{y*qEkV|+0 ze&} z_@%{Pqip|-x}R5a=k3;+f!^MK4YU1vcVI?Hz?3hMj0ORppAAp1ucKvzun10Wr9OXp z07+PY0hXFal)do=haghzO8l{4S4x*dL~P&US%|y?w#EJo54L zvAv&>-?cuL(Cz}o`NhcRWb`V6;b}}Dy9}+*Pef2Usa&_?E?whrkFr%QHj!#HD{1(2 z=^N_!pFVa58AVm2&d$Rpe}`%i#)d>Z z{gbdQ>^?#T#=5#cM!96cv**2UgkngF#TFS_m+To30=Kq%?mcb^RnGFsS((Z5v1N-s|3JrDsKQ3QD0<0=96N-zG4JX${~yt7TJ zbj_mGna>RR}znA_cAk7)_Uvz6`Vw$^&~lBHPNO9VF_1i_klNQ7E@Dhotsj+ z@{Xbxy~?uBPN-s;34xp4z?~p8O)uk}HQy@I$-wDVt5_j@wj+FBx=X30PYHP`A6dMP z?cLvZlZ+iI^dXwV>+XRsb8&?-0WM^!G+^6XX&fP%)K`7_c?ubYdY#k}?~bmm{r@X~ z-W)QB_Db3$^T#-R$b+Q$RNNJS`~2Gfbn^(w`FE#Vz~}{`fja~rYWkpi64C6?i3u$`LnuCSqwc!LU z?1((ovn!#ReVHOu0qmbg2XD<_eZ#Jq!!Adkaw28Lr5Qrrn>wRXNLGuW;5jwxSMsoM z?7Ecp*EA?Qy7sesb%WvgKQjy{AFA%dVSgatZjklyM&aR#0qqkX@T1NzkKw1Y))hRc z@FH3TeiQNjKa-eoz%`r4NM_Z;hKt9j3|SaZf$GzO0O-KcoNe^gt&|6xI`ZoH=uQN! zOJmZ3Dw^afxRB8G0b`ZF#E?9VK4ocOLZ#y?j`MUs7LudsJI4l+=RNnBnxBb=%ly7t z>Q*<_;06Q8ZI}-KOEX9TNPR%PReaWi&Npk z>)k&%ld^wPNTLb^kWkdzc;Fc+_b3;8|N9XwCi6Q9p#|-O;7X7%6}y_~iwXKW7BY@K z`2!Dh9MHI6^(~rN&h3scK zv%eL@Ic0@=Nlgo)z{Ht*lIAk3ID=8vNG?Ntg0~l1x=-^=A$Jq-^JE zx;~3%iJPi!)C!gR(%|_YT~(EqL1MDCxf6-_kAwsw{662PnfBWH1Y;C{^}BS?prB|h zR5`|tn@5p{{l9qlUlQQDhH#utUY_Kd_k1tLTcnrO&chFJoPFeCB+pyHwVW9$;BJ8y zXYV}0uV*eEs6LAhD}!K^*8B;B#59j*%aHSXtK=K#4R0H;#11xn684z>@Wo&?u`qQtYL+u3@tfo2$9l!vzi&MMmX6!;9++zo#HR4ZZJ^O- zZOoMi4z1iMrAvio*GGp2{~PdQtp9|D^QVdb_z0aqkEPZ@p1lIot`}54O#+){mpPF* z3=-zTC<~h?eI|q@pQrIudVNc9rtnF&-lW?(igakt-{CIRD8m4)9&LgGMdHvQi1z+# z{5l-*$P+PX9T(KMCLe&bZgs{=bqpTM~(h+1;qGSk82;PgH|Lx_C`n3iB3=pu9)AJ9h)@*5d z-Zns;TD$$c{T3v~(yVj5`quwe_*Em>QHXuVYf>+*U7TN?17^e$I z7R3ZPn=C@qO7{HR1^imX=c4|Ni?nA&7URTL@!JEhtIz{a{ejai)`cc;gg8r;i2AEE zn3%Gl%2suGqRO=SHate|2A4P%CM?vL&jvcGaWe34AKS|wLBJWufo84B!u{%sPHDpkhq`0I(w*l zkC|B}@MBrqJ+4<=2#D*qANi@c+MiESVB++qO?Im14=#o;TWzLnc~s(XZ*ibo?NF-e zoq=0e;vG;Qy+3+;`RpJc+p>_yesP6T{SRXgkS0_R`Exo1w?h{^Hj)9;^#jXs;t~CG z4t66X6=88vI7~Mg9Z%maCOr7x%^JQJ0GPhzX8>&7`p7&wFUICt%Id3#Nq@wJ`8xWUe!O6M#GS^B`P^B3tQU^tz2Yz~ zd$Omk(B!k}Zfou=26^#A8~&Q3U-R()!`C?nM-sOEI?l$~*xA^&xv_2A8{4*R+qP{d z8{4+#WZ!eX^VL^%>ip3?Q`22fP4~=HPv6h|yDm)rHi4YYdOPH6I z?iEbyD~+nAjU#21GP%?~PQ^!daJ0u3)kX7}5AIt~)W;^1_A*nlopOfIx8$d}jK(sWi3;j%+MjXx~G2(tHo;rujYO4Qp43DL-vcWGb1cHnNK?V_ZT-J%K=(RdVoMTBR&>h1fAqw^H3#&*SSC21*ac#)>Ss>K<= z*JWZ$Dt1U9AhVddOg_qP4W126=YE9+!Bth3%VRY2Klay3^ZZsbSUv0%awdBt9`@1n zdO$zT2)H%qRlEXhmD;lQ-)?JW7=P8IaZ6$XcxFCy?}p+~BxOK^?p4PbWqk?MbTavl^yHO{G zv(fFDyV7xzO=vt<86*pn|Uc3g2o0)x+TN8h9*TpiNlTVwEz(&Fi#6h-0WP zi-T~V(j{+Ozqd78Xyt?;CVvYv&C+}nWPc~_ElobArql6(s)O)#RdF14=W5c?hWWa$ zHZQ`e;f@|n2Dpos`dO|+z$_zD|E}(41ZZL2$jx{jx;g**2O1I|VeF=wwfRb~r#|ja zXQ+_i7K_~UK!!>Ts1S!~ia@qLxwW7fc!U}wwR-8*-$eRO9k8l41bmao5IZNJNh8l7 z>ACE<8(5lDwBvZ(ttW^0z8?Bdn{jgO^+9UNOEC(Ee$5vuPRSSHNR`+YVgu=~wJNap zHbdvLBJvc&4GHwfILiE7DhdfD}To3wO4QdZLi`r2Dp1cF32;!<`mNZMHOO59U zof#^!nv)Spx7%;fcY1XfUY*dQ_5*!13*0L{X^tO~WYdId-O!&3#~Z8pr2Da?#*Z6B z^Wr8}(kWCw2~8(|fFh@w4{`+sF6vp;b7c@<5Qqhn{Xn4hGmV~gvY*RZSeD^ z1!D?sA_$2<(`c4SWHg;f6zfNu2ra)UW^ExTcQ_0E{>@hB{WV6ur9S!n;?kpbGyyRLyAxi(K3*J_e^m`oqXH?MFh{ z@zZVh3SHd8heJ#!>Er6wDgDqF_QS|b+Pmo#16@PIa^LOmLzN~V@M~R={X8EBBD5a9 ziPHhj9upWpd(V(RFm!u=i>SuSA#G3Ir~prK zb%OTy>|asH?hW^SGPYi4EqsYiOql4I-|Ngr9bLYaS+OQH$U$h2VP?=FD3 zJqC;jl9yA2Qj@(=)Pb)?pJRC6==X4MA)=2Y@N<8HD&dv0_PYOm9Ar*y`+<@@tWnUd zQWIaj^*bq^3VqP~L^sW>7?Od_cWu}sq0@+U3orL?j|P;*Jds{fE=Bdp(-icw_G_Jv zt~&CrMbMRu6F93fKrTct!&nOO(N~jXE2UKux!#(?rMRW7xoav~&Xuhd-^c=}8~TEB zx|0hnrqrZcLW9ea%W^6T=;T-l+%TP`Bje}!JA3ybE9=r9R9gR67dxsCWV6*P`cGm` zsmTprw8Q5D@>(bbl$RAae|Z#w4cUAexhDR?=_HnS2(mh7fcgG@iSmof@xqa4Vqs~I zp9w+(kygp6YJmBvLDkfyY>q`dmQsAEvU7rW9BOl{%D2EnuZ3s_^&7G$!12LK1wAM; zKXe_T@q^Y&0wm%Xv%U#N3naz?FlS}W$h*&ZbM8{l22Ad$&)?@Lb9a@MvLiz5TWZ}~umwaf+L%}@kp7eqy+sK`x;xQVrr zeQOtOAUJ8O(!FXV3(KL#9OkNu0?c#Ka;FM`-HH2Xi5l*e5LSkV>&e=PkZ+~(&dbM* zWx=>_37P zNnS2m;fA^h;@%C~bj_}##;;KAqV5&W5^U%dH7X-y#|@89^1Iczh~b7J!uV>@@*)s; z=H%RjL%1Re(W<%GJP$m5a(WV7Ya7iHuAuC70R`_|@qSn%{nY$P`sq70&MNTj~o9JvalS!QuiX%NOT(~(p$T)Vo=N2C=qfIKMU3ZscnKg8r+ zx09G=X$j~DcL(s4f+SV_{E=^-FDZfgfKevv4N}MRufjFrs)c|hGt#sk`lQKiSYW`c zB7+rWGkyzl@~g_~N&P;4DwoAtiP_Wes1yL@C*cuI6y~Q_t9iZh3EDea^q>+*qO_(x zf^Z#;6-Y&XZjGa8dWNFQVYDYDy@4pI65N`|njIkMH}a~VnzVq|b7 z52c!$#}dmO)G`{60S-JI_i~`|9Wu}KE*s7Bcfo&?0R^M@HR~QY#$w~P+I20!t(bdS zu76RyZLrB4BnkFpmk$YDv+r(@{{d)JcJee`oM-Lo&qEz`;be1K+ZWh(z71nAc~PpJ zn3eyhLAriz<5jdJl~aeKV$u9tlB!fX<>pt?o)XoILhF8u0+eU<=JQV3xlGwtRJjNqMcGdmpV(1!N+@5&_qqa$G5A1 z{!}F3#g9PPh9;)A=;o%a-Qj(Zk?!t%ME=M72aW5YI}lb0AJ{{CE`+VP=x~<33x^WA z!gCPB&p@tGn;?q2Cipr-u!}YX^=|-CT=Rx~sc)#ro1AVxX6^fnY72k~qHL1V!|+B` z1Q^+D8JRij3o*B6I3UWxjvzzi8BI0?gbs2Y*XtCXEHT^aWakV9`ZK(cOx50r-(I|) z&z)mhuA^)yt~SyBBMcU23(OMQ5owp=)^Sfk1OkdH4WqQNg?6(GCfu4qT0tsyQ7S)# z46K{D*M)EllN1CG(k$OkrP~Ie<^As0^DF;s{mLd1p6fKW0!MCqT1?#7IOyW)tt5ge zvNN2Cdgi_IfPt5h=^^QA=Qpoo3v0l84_k9f^T4x@E$jF@-?y9V^mW_l8n89yV}`Cn z1oiB*|7b2~eyzcUcX_s^ve}h;mgcn<K5rFo@d-hx=*UU7_C+EpblctZ)^=@be+z-#_yk<~da5jn&M z+4?eM@ax*iJQVC!0)UYf8e3FS*c!PrVNOufi|1vYOZET1Dg#C9Zn>FH=QxxInS_Z_Wv? znO1MiWaYemF{dUbd4gDIn`ce>xG%F@CCN-b`O&dlZ=gGcg1%$8l{a?nulnv4IJM*hAm2F0vZ z2(pI>#_UUH{Ks^%UvNv^QTrj$h&);&|5idP6|au}50|R#?$b3AhF;)Wc7C?*T-(og z{*U>7U#WtMUfC0Rm4uy$gDf>Tz1SAE*(+BMTi1ntb;DvE5Vh~}KAgzR1;|thUUvjy zasu1)*gn3!tWGi)ZqQzftQX#9vTnr4djvz0x=k5%2_t8cEt)aq9J~Si5+Cp)2scXs zsHD@b>|c^~0OkzMM|bwGn(j93bsv*k z>Y`6mgJU1V1D}Hk!{Iu241H<3@QJK9290y^p;HpF?$E8SkQLLTE*K`B))-{?E`}O2 zusk2j{>e!-!EXG(?#XAS0{-O6X!W$FHL_SBa{Ot34M#O;9n?>B@G5uRh6l~L0)}?R ze5kX1Rhi^jm|{N30yZ?V9fGZ6dZb4b#}_#23A}+D0{+cmzPA!In8it&SP3@H& zX6KnhwzfhW`>Ts%Y+U*}`gnSiJwZe6RFdkCu(@9m z&TSv}$50h4-+jwEy~|8R6Z@c(Y_O&@Yt>9gMdSi$M9Df)wueGu)Tp**&>jP=N5iM40c!z;upS%Ui<^OaS(dtb>Lpu(yL;In`TcX~yvQu7+X zU}C|N@=Ha}URCM=v)MeD<+14a*6!FyjCJn`-jw8W{E;LKLpmWL!(`l1lnLxnI=Met zNQ)b!JsR&sztmO>b4nmJP6B)c%wo&w80(CB{giA-)y(++MvNYhF>s8*gpXYJCEAXb zXa$8i@5W4We|Q6YII{pdRIL7DoPxxd(bG3Ab<5c!u3iYKHi&FJpJnfsnmlF~cE`rdhj6OhF?DZ6Ks=1tm7RwSgj?N9 zaxXfpOkNKodpv5}FuTt+9r1z?9<}G$Y{w$DbKm*&^0D(kj$$ig(dp=oo`#fP3(!ag~WoM3+W8SSFTdBU?MIJ0Aquh8^2~+W}l6s7tqVc4= zA`1^O?QyY%^LyF0>-p{!;FSQr_F|k=>n_P;T5Hmi!t}w=2D|b zH*7~mrQu9_$2h)Vf~9D40uutgO$~iG#IxFUen&0C6D8OFl`?rVGm%{zoZ0xMF4e68F;O- zjpEq;M)6mgTaLxyYROky?E9j9M!4)5>*EaB_uk8+Df$`dP8Vq{W!~+JI2L73f09#+y(Q4 z?%WFwthgP<0mRa&l?dIk#JA`^3U~jm-YtT!JvUBi086wPg(E;Y+bH^y{Torphvbs= zRJxKq9iNwSzZb7plVRF7PR-S>Xvg*1@iqu5%w`4m1B+T!1lXK>&?|)oLp9Rn)aZG z&zpyRL-h#(p-m;OZY+Rkxv=8Ez5d9e5ZiSdT0YDRG-8RUU(Nq7SLC&0Ir0`3M{$cV zzbD8d${~Z|fL$~b1}%`Hrzc3l6N8htTV1U>*cQb|RRJsVCbT9cyV;%@fAlDbGSCxT zwY}PAZ7GmF_9EdbOlhLQwGHz|vD{&K2UP)19Q?k+cpHfzQ2TX|wzQp7!((T(9A)+5 z*UlU`QZO43adfp!g=%kJr**v6R{*0J8`@J~qOZ|wOdBs-|0|#6)YSjc*6Z>&LWXi? zIF4kBuw&^}-_Yf;DHB+n5RkGa(as@6`?=tM$i8!jsKrz;S+B|H84A+j7b2gY^ipVL z4cBvclOs{D*0j0irz1$<45@ry%V|63kA6C= zVTHsKtI^c${*!HCY7XZUD=~Cka^s4*kIqiDbkS8Ykx+TNnj=+Zua2EU?bLfE*CFeq z3s;1El0{EHC+e=7E`7uNCC<%!DllU!UhXc)-|lk3ukV1G5-QWi%9(jKeu#**i4YPv zLH|jfpT$g;R&dQHPHS_L&`};opyd|;jVh^d62+aqJxOxS?Rxws=)V5+sB=c1GL1+J za=N{fR(N&)0#~_{KacMuWpNJr@Ty74B3a~c8e~o^DHG99d`-6;W_w08v92h)Q2ub< zB!gtzfQnTC$EFDsGxFiZGOjYREs2|#$!<=svyO`3v*L;58E1*ejj`9m_nCLLZ(J0! zq)@e-dRZR+O=!&*`db%l16K4|dBfh5!|VR>jx1wa-|A^pRab<7IoBZyf~XxC*a>8& zF(f&xWF^_+3uv#H&!p4bT%56_v8WKT78s4nN$Tdlk+L0!`0tLyuuKT%t1P6Koy?^T-fp>6gzfTGIV! zadH`8l}j8zp+VRCu9yo9pPJ6n1BVXljwk;+}u zu&3s~xFSp`E_>9keEbiJFLPV@Gl2ztN`TkQReWLbZO%{a2NJ8JR#_ zXgB`TQCDWTreH`O)&`=pc|$3B+dQ5VhbWXM8!&8REl*`BDHE7j(wQ-54;!`Mh0JxtomtGt%lIGH#(iqVm< z94kdp=1pXzR-4vwdSr3evm2ITCmO$#-rn3X%-H?zkVX9v3h^REz_=GFW;e5|(hMj8D{?@^glpk~)48s1aB=nHRIUrXq{| z*2STAbbvba;^v{=?#(N=lp_|oxdeDN-)Zqzf5=SPVOPxA2vzQ6iE;zq@PQF+6_$nw z+G?p)eAo{uy9KHxeH`lkoG_FD#TZ9*;F^HadNjBrV@%Lqc)zdVA0@m7SGleCX4}Ho%#*FPx>(CfLrd1FjmyMmDPISlsCxH(7D0Jh?M8>hu9W6>fm4R z)`{K*^^g6jDSl2ix)H3oRNyZ|xY27(oSALIDASEda6`Bg9o~EZ?!Ld3k)l*p`g+#r z*gz`n-!Gpui6s$bStQfWXmtsk1!2;Tc%E5mE9xFu?VH11Jz+7D8E${NS^BTZU=OTB z+wYqx(e>5SQ^sB10*ncSPbp$Gk+~%NH}lhk`b&{N;0+Lf`z2UK|D6rs}X(o3cZlqr6GeZaF>Tl3=Um z5cp=5Mu%nuk9zOF-iQC4 zl+>udLDA6Q2usKs1cC(kFr^RUaB6X+tQ|8tW9JxBGGr0qU1uRQMOS0J`K;FA!Lj&% zStYkYAk=r&{&3LKzo$)Pkc@b{Kbx;U`m*oV}e|ASUChXm%WvDRr{BfADwlYJvA zL81R_$_zizP+Td-k5C2a%!iw$4Z_8#H$bHhSPXBln7a||-TREjQ|}0qUtpy?iXUL~ zQPcg+$oTWxb7CBm_m1Dv%Q9(}iuYkHBzxU|{N%$!$NxbR~t!LWGTuubkQ0*L|3(zfInoS7Rlo*z?8-BR!LW&D%v5 z@NpdlfvXe=V+r(qpe-$g-z#j*qK}-Rd!@r3vBfehUrkpW+?{_er%753EtpVq0@b(f z+rb&Ndey-fdx`B>PbWweGX0_J`?&AQ4^cHh>FZjfZv#6VTFh_pov*n?=)um*+C4(to008YAexhXf?JCJ0cB7H)nB3%RP< z4%L{29p(A=|IM~=^^0UQM_M5U;F%}(Ah2>F5F`qg+?)8wevQ=vK*#JVDuQow9oPI2 z3k12n`ndKMQ2m)-d)7)J4*??94h@|EOVSzpaX?nxvkzt{r;}#t{4jgRP((w3F1$ua zNKgN>Y*kGNdZb^r7r58gzJ7Lv@UVp|H%os)T7n{`jS|8oZ@si-9!kiIKIC%@#ld~D zt{B$J+wb=i6gne$jS$GHdsb#T4vC&$_^vgWCy!kftb=;5xU9!#WDHriim$L;m+i+l zn4Ba&pG-a4j@=|ow!zu=;t2qHWbLz^JS?Ur!1DROGvAPT=QH`~6Iz-8-X+&sD-0Q2 z=i{5qz6ynkym?DQJ*2`HcpDVA6vX!0?_0?AH2cgUR_z-8bHyk4GpE{#mCYyn9~1%e z7EoqwoATlFon*QL+&=s8%9q&OtIhp!c7VL(G0S@?me$bSX$jsk^<-}#PNmqE-lU|5 zz5lQQMz=3FZ=sW&NlajR3UCA7E+78EMvWl{vf)a9rl_hD{G;7CSCe}AM)Rx<+o@wn z--naioZ%Q#uPk2{MGDaC2!?KgbP>qOOeOJ6UVcbMg22RG^w+{P6NMm;A&p~{%_!+7P(>I!$l6khMvrI zkteZV`mG8y#1CHZZ=&4RGZ|dGUt|d%F86dOi$Ds8028$@Htfgwe_yDDBmkkj=`2tu z4zb}WkZ#P#3W&iv`J*qPyRR6ytRS)-Bu))XD9KR~+~9X{vF&i*qdpUG|C?{(6X5(E z@=71OCqDfCs26yEgzHonA$y|&DXzeO+2$p_zs}$cuK8Rj=wjGxPz1hs@g5^EH1gP9 zy}aOKPS_#ut&KaC6qKs?z;5$-A|3j4wbjk7q8#ugS~9bqe~SvGvW=4fw$SasV&%}jNI8R=rlXhVmp}=O_qVb^ob1UV%$>k*SAa2r zXnuQv-Uj$=;k}U`DJP|f*^`P27i?K*ZXB?CuL!M7@(AJTaGt(h0o2 z9TiZgxbx+cT!Q4!(afS4+Je}6s-S_4uO;U6z=%d~LkFcRS)2knLRz`OK<-8MMShgk z%Kguvk$Sqdb3o;eZ$f}7$4a0e?<$0wXi3Qi(ct|QRg|SGD(H{%Xkq!z7}RSz&popi zCvPy}znmSVoiA{DuLW48O$yteUbRS`#=XurU(jFfw;3>N_!Tz+10Rq|h~YIg9ybZk z2Yl(qcN2J&HI#I2NfxDw6Wsg+=@DTFOCF=*;P1KoL^S6xK5(PMPs#5@=?40e z@;V@52k4u)bdhYzSH~Rk@|#Bslxuho0wttpv)(&Oq&1k!&FJvaM~K9Bxf2V!?@yoz z$q@LC{`Jkl{>W2Weao>jBAVTJy{bpF$!`^&6i2@d2|@HkR}31v9E-6%2{hGu_OC?h zY5XOFI`-&15Lg@17TlB#o4pPAqo_~RkxQKq5yKjFRl=70cK50L2FYkudv1ymqD=qM zao~PO&8VH*-}iC$LuniNI`%_h4!={`o>c!-zZ4&Ylc-X+ZOsb-@vWYe(EzrgR3(?~*<0!CpYWax)(4rA~sFP&~UDe10!i}9OD z7u7~CBpsUU&gkH=G;fOeGbq8n6^Cbj++$89=wt+Bm5Y%2AQ`G(ec zFF@I!j-cV6C!3EYyiZe4rP zuf&a8bBB?6fu--m)?V7FlvU@u<_Wf&d<0d0$^Cn~Hdr5E^ zn5nv?3ot$Hm*oDa@Et@R6sw&pdyTDUl_XGw=FnGaK)0t|#w#Q99IKJ=R=%UE8NR!x z`g6!@)AD4jr=4)1RSkG!-dGu{bX_48nVBn1#DD2;`KHXTz!E$l4bp>VDX6z8^X(2WJ2$K`6$xe}mLy@+DtY1NUsBV9%jo-zGYFm^|U-fvNUa*zNBkH@bSpA;Iawk+s9IrXjl%bq1aD zSck-x@*VBJw^^M#&B8HqcGQSlk)beh#+^3xoF@7BHK<+g0^Ol>jp9CMjNLFe{|%~9F=BsVbvJH#AsNt*=BIt>Y+b|l zvK@1WH?;MFUn9=5p(J`y(N~l#>`Pc}QOT!48(wpJiPuNj+FgGx%fQB&#XQ%esap61y+&@rx;kSK8jK!s#uY z01^+XwZ9Acwh`wDuZe9L$LHF<9pYV`T@aF2D)ucU1Dj~8o9`42Y%^mWKpqM0E*@~n z7vI&gn4B(}@|9W-)mf@nmtlx5sJ)da82|F0ccfA|4h|kw-hn{{ zdKuZIfc>t4n)geu!!?A%gvY!W9n*xmX_Ih(f)KDA5On{wSTZ{;L3DNkPFIp1*2QL6eH zQ0(~{5qLYlIiMu`V~ADMc?b?RkLfJvyKA{?Gf*SU9cGVn3rn>Q`|3XTtK94& zc)W)`mQ%k%;{OTGAk1`}+y$-ltaRLGAJ}|+?C9uVkqEFXcIv__2O$jiZ-HFm&)i@y zoG*(PsnQ|SW!}fa{0~2)(3o{JXp0OVt_oSVSX={i*5?0>&p6xLk<-~YVQrgJ64o8T z;Xn10<_}t^#4`-&6?Z!58oY?x=IYemYZ87Ro=pQD4i&?seRrDU<>ax_ZWPkG79FmD zSqzkc#5G*}o~Mbvbj-^_=%*Scya9!U7{UH5UH^9Qdcou(ATBJ_G$f)V9Z(9j1v;Ou7?(mr4CY355syn# zK6rhBCuIYFR_f&+6k(#rJr~Md{l7RN_@V#Rf6914gRaP+H?C+^fj0TJv^`&-P+obZ zn&JOCflz~o;<;P~0$XXY)`e(@UZ2*&z_4vES)-C0rZBT%N0me3BHKdtKCX*i?!%-e zCm3$XHoJ&V(1TrFD0E0icW3LyQXQ<|f)47WY@AL@FD}=H!%5;}7ZO-(|8S3i?&_nl z6aCFhOCDY3YXT3{dtwztd5QwZj;n}33l!r`cmRK|tGPI}R- zml%bX{4Nive?SuBwp3!POST%dw^B1=y4HxwtM7RZ@`jfS{W^z_* zjTnAP6lQ#fJrnG}fzjkn2+w*zXpoZn=YR;&u&z!7`)i}Xo=CJQS|x{j$)`IhN{>r8 zbdQg!jgif3(u$*_k&ZHy{;%P(*A@Ks?UF(wi7+Uy*ZcS_G-YGb^?b{)Z0OW|R+?&x z>+72NHDX;C7l#J|d2e6Zzah$Z&)bDaA2)8c2(IgrdjL;u&}^}9fuaT+)rZWAdg=1N zBr;RgF%9%@`H(q+e`ay*&g# z*iFHO9xc?CE*f5JdA5sCej|SIz7Sxk<`GJI;`tvgVqT_IA|eB{Qp9DdV@XA2+t!W# z2vV2b1#q~kBo}f~$-b*tYfAZu-44F^)!&g2+yyU}I^C&yDa#ZIQJqXzY`EDCe!1#F ziwY`oZ2=E{?YVjP^dONvTDSY)6Zrl-!GvJarx>38&V-|NwA1u-o|iF!x-GJ3D2pLG zGY#@m{R^y7z1SNg1bGqGyQ@lR8*U=e5=M1rU;Cx*>6-cMmzEtvqS2yEatMnB7l<(#DaMQfuMCfnl;WMSNd_{?%PJ0#u0awaZL2$ty5Z4s-!Z;249S zan5{TKm4S}a(@^kZv;Oxw2HfkYKBd=m<2^>;d@M6D|}JCrc!$;+qqMx3@Ok>^b zu8Rs3aT-HQE0O?;5ZW2TgUZj(XU0r%0xe#gz3q423h1-IgV@Pwma(gi=aMg#8<{t9 zZ%q1!i;-}jpKqW52Odz^O(A|9u7*0F*hitt)1Bof7Wo?1CtB*=cdPNBVLzlH%_*xp zQ$eWGFoLwyK)fQTII1*ckfJSzOU@pGaDms!=0_zG^JvQd1YS;Em)_M=8X{fukP^T* zLyMUfy_GMt&0R1EFL?e|K$Aa^2BO~V9gjKcAAtTnqM{>b!>~OP+w7D^Z>*lk{|0MG>ATWW)5OK&wVGU!e^~;1Ris7(9 zScF>8#cEz11LCArOWy3uh#a1z33!KL(0RtCfpB23qCf{oftt9#GNn<}h zmQn0UsW8n`L68|Etjzi&ZkSFL($CuE)UeHKHA1=GzwIfjTV+!DKJO6gN@q*j`Zzjr zh%q&3KqHA5IV{^%!cSU+?V%DWGCl(Z$6InMHwu1PjUENgZ} zNXX5A=TzDu#utwC0qbKN(mQ&M{YX0{5YF~{N1X9xb}&Rr(56Et{kb>Pe?W*6aoAS? zc@2_V$4#e+72)HiL#iEq=%(K0K7L6Bh;)@ zmz8^K1~e{pCXCd>ypG6XopLyKC|$PS^=O5I7S>=OSQx#FHWPVW0EPn=-TQ>F(h$LC zP8w34m^%AZZ!QW#9)~u2PVe@0dXPQZ^?nv4qLCazxEDRbJ@BtgGExCdiDMW#H8qLI zalW^);HiBn7NZ%AJui12Q^;A4m@v~kYySREAT?hi24Io~1v~?JMk4KBkP^j3FoXHO z)EkfUuGc~zT<@}@jHdnK)<$F00w+bF4|+!;!7Qi+O^DGQ^o-K)=+WR#4Wt?Ua~md8 z0%mmKcYV;u$I9k8w^V7@kI}`OO=Edl`B9}X*d{*n9bqno81XGIkW+p&qJgCViyigU zlRKw!Blo6bvJ&#lSp9(mi_hMS{$1Y;G11*DWywHK(O;Js+Np~owKapEG@qbG>UZ2% zQrLyA065jtYmxe!8?~0M2vw*vR1+W%pxoo44E z5k;5%%BH@o(+`g_!)ir(SQ-heC1&9Uw>&>T7@X3~w()cza@Fmr23ohTN7y!Q${yGv zb4*+DRIM#xvxP>0kKzaKm|WAH%hu_MIeP`aao048-FJy9pq+o5c2S>!y^G-N4 z50*nGJ$H=pK&@SCJa*syF_B$2cu>NsO=$xYf9wevI%~C#dkmKPU42xW<lyqG0NZBL3t(7LyLGDGG#XO*YP?YBGkI~CpQwfQ^fkitvIF z17NOg8EmJOIrX_YtCRS^>`qvmqqA|~@2{i~$RH9cBWc9V{U;`k74fq_t1!y8K#h2g8IwnWQb z+gfW1xy>ou#L31v|Eto)06sUF2Mb<$qK=~(XrI+{rz-ZF|2qp9h<&VswkC*usd)mb zlE(;*QVc?@5(j%qS#AS4e|p%HYAb~}8W~C?8cHL7Cv^Oow%+}w4WpD|vhNQr^b>sr zAJwU-MMB>el@z*=%D27p$6j+}*p#w)JTDDJgA!*m@g7a?3D}0AA$|JVz44s3ZgE&D z7+*TI^k%#&ZBI|BN`#@~mWzrsPJx2qn-x8l{inK#7TOKW_^6TOb#7-8`btmU1AIK~ z?@ zV1sd+j)fpQ)wM!syKj;UMPjv6k>%$8pDM|NxFVlTqB|vV`HkZfBQ{Jd$KC0@CWS@f zi?*i3Zr6$92sTL-Rn7w*8CKQrEMgr4hvU{eWQ*7dmLb9tJQ6I(4fWb)G*y@snUM@* zJVBrW-O&5ztjOcm0M~`T$Ftl@mlV9d;nM)OS$?#y4%3zkTUGRRL;M6B?R@mCNb?nP z)^T7pX3)*=)5AVhndw!8W;sVq`6#Z(J{8!8d+k$oEL!orme>@%Ry&pFQa4k;%oX-w zl=kFvj`{I(c40IAUf6V$P0wpDPhP&|11sQ45n6~9f`^oz77Row$@5E~lL!LRsb- zq=E1)$PtbNp0V_oo2Y^Q_$SpjjnK#g=CXwCI#2q73?eDvG*%rWaBKBJx{B)b2eLS+ z(6P7*+O(_vsxcucCga@t7JG%#&4}2GQQ7X8I!dm6+0DM0F9SW9Dqd8ud)Vfdeff1HJQ#2eb~MaUd<8`T zK?lZ&Ev$>Y9n}ZjoPuapaD(<=M&7xn5sjcDHF~8x-YtU7r zR`%X!?Tqnw_R&;2v}0qN8<7X-f_w6fuk3C^)pqE%#ufVUa>zYWQXbpupNpIz99`s- zs$YMFwcB>?7P7z&A}!d(R&TI*EBP6PqdFdhQQKZuWd;%_iHtRM*2Ep2_Q;%3jRVD> zx#bYSO!;IjYC2MoE#32qCPx4`%UVwSrOHEcJnAXVNv72b$I0uW-x)ZyyAIaERj^1_ z?0ZB?%2T)%=OhXaG_F=om>=U!DKyLzwP3oRmfq#)9-=x!{n6KtGQ^YBt~W2-AfdBciL-(i;^y62+W@?=^<$sppTuSy6)O*6^DL^mx76S zL@EjDj+2!vy&0vugl91F+9S=lv80?d+QG{L)T?^^gPq=WOI#^g<|0&62|1`ey59sS z8cUD@oaP`t>z(FQx-+x;U;goD11vr-Lhi&}Pbw=LC^Su3o1GlYs8(?0Fe7)P+MStj zqSyWhhxRl@q~Z3z?KxIo|IEx-kN9HNghWzqBF&(G!T$ds+F+}VNpIX5B$EJ0xa%k6=vm)$;{_m|G9#iaFghik+I zf9Z=G;1^Jp_CJ}sS8s2do10igeJl&@Ita>sRgB=a2<7T;k5NLDS(N6B7JLbG>3`r5 z%m3r4NGh|9h3S&z#nK?_mP%-Z$VKCeb*QRYXIrO9)bMHkI^#(G%8K@nO&sde?`)m3 zwl63PIX*v(OwtYCR^qxkL#?0y zeu-*x7FWALz3(LX@}ctawX`S`=emgp*a)68oy=8mFXH2on(!Fp8YA`Q43n1HzWC9O zCXKdf+iJyczY2KH7F5i#)?m5A#MG+tk4j0GMWyC2iRT-g;f zfL$sl#4@V_QSma3gQ*>96au`VK8tq=Tx%_#9?Y@pGZ(CtfU2P{&(~kigZxzLvYHIs zXnxJ8nUP=mA639gY7zN^&=6Bg^`cAI91BW7XK7V;X~H%n)z|+5kw9+0H`vP3_x05m zwcr=qF_ez1%9Zvft#Kv3-6bpUUtX<{iqjuf#kc(xZif%N?Q~dGH-_Sid8ggN^djd2 zbqt4W(ow^-B35YlKK_Q;yVI_0L?BKR4Ud50v=OhY&dMI@gV8Ua$%tIz9U<`>|bbWEgn%ODp2hF+GoeJMOt3I*@SM z473vQP47|X#w)Ey!__0c!YRjIpomvO2iO5KB9Ch!FG*4%X(Uw@!=!2>f7!*c3sPC> z!^+*=#nnn%S_z&uWkG=2b2Mw3<4-IlO<_R(&W9;2R$Lu)_LTJUy}EvIr2Odf(QNi8sHgDh%D2IY`IIA zhG=vM+?(_s`pCz3I6c1Sc+13Z7_lTDRj!7PGG##wDZ~|EYhgznH`C91_bA-2AyTv? z`XF{}0f6a=ca{^&0s{+ThF(R-v)f1p5*fMF10dU=ym0%e&t1^J3^r+~5U&!@%)*0= zncrBY5}!(dtAKJTs)6)X-@GL+Hde`tdgPO*hmseK$VaYm)}wq}p6 zY>jGgBwDkv3yKs8s;jITD1NuPIkF=yQf<~+LH^3HS6!tp5-)0jV#Fj3X5%oT9exC&X1J6!;_C6+rVV@yb9G^WbKYN8+9i{8po`* zWLg)!HUss>j#kgk=>m-k2tt*Ce~Yj|&Y?yY>b(Vgu?Rn5#W=WC4t<251h|to$QR9tupMDWgTyKFqqt=ka7zzY zigP38%Q?aBHII@L}70 zQhYqX>HG-vd2PD-W>@d&xVH}ueL6d@#O;-9>W|x-E${ZrMKTioli7Yr2pyy4OF~}( zG?aw?s0m#ilpGy7`k-6V`D3PY(<;dvNL9B>GJniueqYi#egrg>bpB}QoEj7{l^f0J zW@}C=iRUJ1Z-*Q{TU;f<3tsBdRB*`$%^gEi)0btTWhlT|3quxiJCM2>)JOj1KmkvK zus;GX6!J5ODHWIaAY;OTM2wbJiK14C|ENRsAw%BwW4+{y%g+}}yG2pEMY$A~ZYc!w z3d9OC^fpbCWvon!DB}&4l57DbnXTPBS8Q>XD|g{nZYjjrv`pOiUao>AS_N5lV~uh* z_Gngbp50h!rCN$5TnaKaEz{hMl}lkMmO_TzSfkvHJ&xs@WjA(L>Y-#gR&FW8*tASz zH&(6!LY89{p&h2)kTaWWjS49P7+avv)nf8s{!gzXie;m>53|7G2N zJyHu?ZbE-bcIYHK!sx0b^hZtTPbnlfiKC~5=i#Z;T`mA#|W%e^n3cRp6h-+$++QQ!Jl zjevvm2MEoE7~8*nh*xkgT~4by{lQ3Bjo^qt&*27$@7YINC(Fk?X$y^ zy?+7y?VTK*w$9oLs4!nz$Di9fv|{dR^{r|YA5qY?dk053xQ-cof$QNiUuHV8Z>rBg z`RQ5cS2{E)>4V~Z4U8B5_({9E|H<1!lB)-z5Aen`yvs}LUl|X;Q@Yw3K}L%#WMDdY zCzfH}tws9k>b81iXuG7jy-}|wfGVf4qfc!ZZuJ>r3pNESdn-&IRr-CU&$LneU45H6 zc)TGDxS-yt_;o#aCUe2wD{>HIu@o_|;|9d_$rbVzdyR8wE^zvGcd$mU3$sD6(JT10 z!JCo2-c=oS{d-;AvF+N{i^k6F`&)ahUfX=p_?fqGZo=H1pSP)lunn_E?_VMsN|ZNO z4-Wbi(<{%=E4WWxBLI|+dz~4|N02D=K0vLnJEZ#nFxF1%hX zK&ti{Ip_sP0o)Zv*SAA74O3=Q?V$4M^aOU{FwQ&OFv!T(Nc-a{g|dBqO2-#&(z|_) zw@sjla0{2Lg^#Ceh#pW#@QOpk7_mkGdB?OYt>YLEtI!&4i>|5%tchLf14oERTt{JOXfy%v!-OB)aoKnK>Q7so-FTee;W5^-I}84Z~u$5jhlFmNYJRJ!Iy zHqs72?$YqNj+f!xY4jdF7#%G72dw{nz;0QjSN;W13P`gV8r@n*N$mPR8-F4;Va(Kj z1Go_Oa(AQAoASge9mBl3f>*k;Mq1sjj*zMbqWKOl>Z2^jWkF;QSr5=H4&OGTP+=!H z*MpxN0?WFOMFA1eJ;KX1As!px>RQWu-yU9Yh$^%~0bxuu#=eo4O?$g}pFJaM4tPqi z>o`Rxtyt0Oiqy(WD8EW-RqvMX%m$y>%LP*`Icz|&CmjZzlT@; z5*OP6SnoSG*T9za&J6&~_Eo4SVQs={ui+)O79~0urPT+?h`0_k#BM%C+aDi?3xx|Q z<$~_DtvDdz8eP;QJjVuaJGA4;^ZS^BLQ^CaPG!EmP(#+M~n2>}{2 z-pOrZx)D#<%cF^TinqZ=?zr?T;gfh`#D*scnDT4NPaXd8{t5_%VAq^HcXy*l0JlNY zy5Hn-#$quRJi&mh8Tw2`7A)N}!Qx~arQKb&JKEh9j2G{M-FnMz5D<;kB4NoBiQt{V zV2ccN-r-NVkQ8Xn^->{zluk_ClWBC7Ti9Q`FNWT*^;$r)HzXIBs-U6>F+d!Gh`_G+ zgYXLZ6Blb*5TR=w?^pA$+%f%Vr%22&9yuNRCX&VW7{(2$M5Bexu%VI4^Hlu->eK&_ zm!2lSD)$VjlE3~5;~Xmb2unFg5Yc{emY<5o^xm5y5uKb(l7?pPr8qGX`g@inbXkOk z#&rRmA`x9qmWpQY>^d*(*{<@-Tj7k&)J&U%@<3HtMa zLPcHo1`l`YLmGj`&4(*5$IT!!3+v(J*hVtFbfRp-v>1WFe=<;5H$-97wS?5SyqD^= zstyA;FDF2P#*4W`937gp&44)#^K*x`lXl7y`e2P?azf5Gqw`8_9 zp&ghch9u_IU_4>ee21X zaf=Og-kYN(wBrU4T^e$;8*(SG7#H7?JF!77wkbDmm=m()mQwd=+j8%qvw#sXqO4Pu z*MD2ua;IU-UASqOx4QBKY`Mamk7LUfNr!G_qofn;DMDSPEq4Lf#x(3JLDDE@U%8Kv z3$^9K>&|^)qD;20%t_dkw%ln_4I1ShEzy*=+$mAb{W6hFFw-Im4Es*^x zbvSf`*F_*2vJ>*q^CGLI`qL6bWeIGRDWnpBJ*wBBqqNK4G3;HMMZ z*KRcfY3wJP9I1m5W>NmdG)6EL8?9BcvsQ=yBcDgAr9zv~S&K$FlM|0DcX_97->5~N zf`X`z`ebOCsNTW)t{@}>?G95Gxi4*EV%9o0*8$Okk-Q>jnu?1JB^74GpzV`CM{1Wc7?;S*0leL6zPZvJ zK=x?RRrxJQ{xAM@w&thnpisX1z;Xn^ zlwqF(7#(K(dBE&Mm?nf13RBB?UL@Wr4AAVTe!dQXjiw6%JQ|t`u(BnV#-nB&Dl9>-oZRfa=Edj7>8xf z$dAZdQk)dc2&;LPSj#1}e-3W!aaRvC{GRiZeELYr-lAOf>m$c`GdFn^0`H*R@{o%7 zQQ*@PeEXA3hQo?qFL1v8>EFP>;-0d9`-2|M0kT-YvcP3Vyqhz4JxT6{0M?UqW8{Y{ z0w(*7{Z~wk5R14#e-XZoUD2enjD^+RW1+@E$0|ik1y%v=%Nf_xAK}FWUorBYR3eJ< z-l753(t#>aFuc`(E=pep^-+A>TIOlTJ7Xbmge#gJ5XC^f+?JPZtqPyl!Cm8cf>V}`efb8ByZ`mdfhuROx&n|2KveWrc?9(9K!Ukuk0*Z`SBe2-`n!I9y@MX^9pH$iAZm z34RoUA2YIDx^v)?CWrZ+)q9F~zM(K+Rnq=@7{6f2WJYvyZF|r>TV|FN1Gs>YJ40DJD`z)v~ z*KmT8*BF}WCYHcLvO^l%aRkAne3H5}XrNe_ej-!p`cwJI9akKA!X#mYPmMRmQHJ(& zBbWP(o%r^HuUATVCgXz6?0!FnRS9#r@p5)ob56BL4K-=cGD<6rU_dDj=zO}WiJ!nR zTtHj3lFJ9Q%TRqab1RB5w{-8z#qO{ymAS;5x+%@vR3>g}^ES;fO9r+QeQpxP9{lQ6G8=jdVM2d@ zn1jCMK9b3B7IPYT788B~<2m>^_jCZkCT zd@!3$>b$i;KMx2kx2fv$5X3$A%rY~Ay-t_MJImR(lgi~|QYx3IbUkNhq1nGaWP)Xd zX~HvrIFB^pX%lLyBUft6#N6T$>2Ft^e0dF?uw<#?#L#$-rc51Ro?qH>;FM)o;JtRNKIp(x>)Lti0L;-)^-kO?hjMvgYl^`5A$x!^$orkMmgJwHGp! zl(BA3H)d2Ev9yGS3g2}n&Fh|Z?yVa%kFEJFCUbMCa-5$>isXYgfnfqZ>9HFA&$grT$y>p$5(zuQ``&$7mzCn#)y-trzbdRM;&X}(_I*9?#kpB6 zfK|`?Ojup;snmL)*ePMXeD6tkxfs;Wn!s^GQM+|G=`)>#GI zvoJdfH{(O;L7yJfSvVde4P_;y5n^IahiX+@CHOP25eofewcyXf25t8a#+{Zy?9ux0 z6re+66kZCrE+)fm9}!53L2E1HVJF~PlG)p7$m`z{6ydmUrE#8|pS$2mwrZjTI6~q@ zqzC)<6~MQ&G85I z1|q*j9n^)jVLNcGr+ZK05%{V-EY|x8J>cg@I@cEj4(3i1X7l~QC*J?3SUNr|`uu-N zC&$H||Iad>&Gi2%l50`!Bf}gFc|{2=b4c3KkX*>35M8E{-H#}^I6{1g7?0Dz=H@Z# zA%RMKN0KE&!Z;PYps9MYXHcyQOzm^6#Ljbr^e8YpurTyXuWyCP8w= zPSdj1e>@G$r;m94Upgw4j(q&TSUx%4@&9E!o5}ynz3WT zYgU0ZbJZJQ&v(^!<7>SY4F$B%BK5M+Pny^Vf`%!}{Uitgk07fZu=4_Nr32>X{^9~e zM6Kq*(wn$jEP<-|*q*#)2?Cv=JYL7RtK0z#%!1fYAIT9Y)WswWI-@1}Kpo3nj0ga% z_erE-0@)?YvBIu|bqgRih7QVE3Kw*4M(5}uG6MLIR)m=u>Y@zn1N-MSjCoC`%jvK{ zu2hsrs_t&l4p*p%%;#F?pTq-z$-trd^I3a* zES0$H%O=u9+ zH@d?6_oSz(LjqO@{a!f1q1E2MFO^s{JQQmQ)USzF&}qDFqzBBxiU^K#UZ(lka+x2kKH#|YPgf;T*6 zz^VarrhOZaXl0xZbJB+V3u}H4Nu6CCpahR?ifqKVPTc*mHjoaSsE2m6cQYtEji`7^ zq53ynmfsZhS;0nO4O!6?Nk>z^iKaMpf-O>fF{ENmXtx_b>$lZkL4-G|E%U4WJ4}Yc zB-`KP1!k*#51LG!QG%<@P@ak=7Ow59o9buo{!9DeOS@(2G;Oz7Fr|TxA^b<6TC#|z zxYT+w-?znpPU!?x-ZQGh>Y&8J!YuTaF;!tzMaF(rLC4nzb(&;D?Cw|fVPRkl z(78G;R4RqTc>E#UsJOXdj~M0vFXoOV8N?W4L!MVq!2FA&${4R0+$bK&jTTeHs(0<& zBu~N`fcLJzyI!o{eW9A;{CY@MyIk#M>X>elM=3TJzqae#ee)7@ASRfdPgghh)i(DF zeDoCXRYJD@@goT>58qH!|4w)3(<)P**Jf5u-@8W)0~RY2kX819>S?+)S!LP}<)8%d zz$*$SW0Q22e1RXvE0w6KUp;X3yURxP4pwBlc5UMmz_=7aSrF)DI{jtXQDxm^ddYKo zSqGV1!+m`(@^4!;l$(syou4QmOO;|V7Fwsx+)(c$;dMnp)<>cM^KL;(Kjlq@+Kfa? zP6{QKzrtn~R8=ud>)8%E%hPDIAZ%ubBkz@sDV9ML$|ygeS%1)ccQXn5WzHT7=Rm;W zs5o;#@e3rAW>V!xGSloR4!C9_D#jExn6o;D4?uIiEC;R;RI92JexVjD{=u&OF!B_$$J89 z=N$pf9{#jm-!|^0`ure8%{em?NRg06O(jl4+i=cNkl;K$1Z?DpMEz<%jvKJx{98u+uo;N~O^ z#cQRM3dbj?OPe+-$*H5f?PmlF8Q4NsM=jVqzsE>ZOy$KjYu@3dR+O^;UDVV96R*$I z8t#Z-7ilbf5$cHw)zc}HpjtZGVC+Dgs?DfYdVu3ivlq-d#|{GnP~){1u%;&2dTB!4Ntq zm8|kmobB0{%cqBj<>P`H&RjX7rciVM zy-?za=L6yNl)y253i1aeyl@6#(mhN8GrLEsE`bE6Mx;Z2U`(gy9}jd5?%_O2y%+L= zIoi-zH_6I&%wa^UgbhD*+=ZX=DRzQGtEP0j2|bNi^l7f!nfyKrhZ9@L?X9)EkU~8TU4YFq4Cm1CUt(wSFFfXvdKg=%gStBIFoVXgi^C4+ zr>MBb#1c9=EX^a9P)JU@utUa>c%T>Umd6B*DcH>CXLpRYBQXZ31vu0YRD60`#t!u>n{8zg^j&*7jOXAk8~Vh!@E79-7K3 zDX9!i*8<*Xp<5Yi{V7xcM?y#vrpQ6X=C1eVTuO|a?q>!oyb3f2 z3T`fdf|q^SX{~8kTN4_##NkHVq+0746;?N+u~)J(UBD{25*yJips2h`5&B86o#=#0 z8Jbvx_K}YALxTJ)DsD$w>JGc-mx0WMXfppkF$w*}5Y5zQ!X$epH7A9wZzTZcNLLOn z9y9Bjuirg?+32)uCKmPpyxEu7QUgaWjxqufg0_+}Oe}b6OidY?f-5a2`o&^J;%lP_ zdKS`^1EoPkE8iC+qvNS$83Ccv(#TekL$=vnNzBmYPA+D1jhS4W`zOzbiK>}%70ilN#?Bzh&oYaty$bfqj3<7qy!;%NrLSw;x3ZKNCM_%)NwQbNaVBi&41 zDdEf%w039H(g!cbyk?tr#=yHf`<6ZnqmmWdw@V3n_j+yIMNq|h+qmn%Mz)G1=4DM!KxiGh!NpNLZ+m+sa_xxqkoPJGaUv@i>&R0Yk z&WYC?C}Zc*>3rNsieRT*lR)Y9IPF?B``9XS*m-pNvAzfoE7!D4?O`?Xh;>>LJv!mF zkd7djhgDjM@iZSA;-XZI8 z?zL(zvSlQ(^X~K`KHA$VtFKj%9Hw=(3MB_LZP|x7cdM@7-zvTAc$$;c*m-!a9qrgX zzhctauoI1qp`FQVCZ28Z^jx%>q8hK>*4++g&kZJ&RolI<+uw6T31i)D-*w<7TSgW; zug}DDp;#YqUR{V?=$){`Rgx|vtBZ+SKIfujT+auYuB4M_qG4jFS(0$ zD^K3OB`FFv^LeieWn81jmDJ5b(Rul=o+kLO_C-b1Bq88?8mu4iTg_5+UjC}d%d;aH zbZOEx3S^kLM8}HGfRq%2)>g*Dj;KwsR!wSs^Cq4Qa&PUvo$j*e!=53++E}|mHj@S! zzE0=4dj7_Sk+Sp=FNjdj;3e7rmN(R)B^5@TC^z+m=bsW@Bjm--F&$O=zsiSZ6Au11BS5! zhRy@)yt6mr1YS1^gVAWFK8o-hS1R~#>Ex*B{uiIh(Mj=#(qW~1czkqHIfQcMa=BRg zffVO7#@J^Ji&7)x2b~{CGWTsf+QYsV+SUcAeVbKY=0m3UUuy#lf*c7>G)arMwI#=R~ z1!H2M5-6yn7g(NHX=U?N~%g% z6JJP69P;`=1byb+!H);;-eBq9Y43z261CZSdm!m#Ao4hD#u#++yFh#u$XEyD7%GfG zc@i~Xx1#YZii*XIsTtCfRbbJ8fRTzE`H7c7G$ZrYDS*g(6qJu)Oyr``{-pt9zk1+m zRru=VAU`w6rl<*>DuO)jisW3-jV`qF$@MC1{lf@*QXestRFaOD)1~jCo~F3%NMTOE zCyEgVA=lLw_t30 z&kx`ikyyi$wRcE$Eu=M_jQDOBd%)=WIsx;5@bFFp4Pq<<%es1?y%t!95>gm|X#hoH zgMea@JWIxaoEG;1@2E)v0s-=_3MwM3;^%=R3<$ys1WZ*3QYzyjEghR((&`ozu&87x zMc?&#tpg-qphO*_(6$`~mZFbigEkdSj}}zBziYMYj}J}mzR7;T_bzCQP=m8p&_`lp z?E_OXqLg!UMYJ0KQ@_9Bu5RwDZSHIJ=1V>Af-@Ajb2g>6Iy?=O=|G`Fuoa7RBe}f) za&c2nJrp*_iyDg?m}v%cbAR_a>xg6(XmGK^3V`JqTY54-M-c&xsf|XN?+d>BZ^Sjm z$mT4?e|{}80MoS_+OWFk{J7H8A#@b9YTBw_h~{Wn+WTA5gTDh-37c8d8Zp`V*%{;E zXJ>8!a!#QL6!DIN!DhZCpK`QMnAiDO60t@>yi{Jb-e)~wVp<*PTwf44UK`G=`{NU< z|Cdh6Cx>O1{(l7ef9bGvveW;U@oc32U;H<@7Ue$foDGJ&qJ-KAhomhH$%QNm(Pb*x z?FirE2(cl6y+KJ(C4EYrsY8Nk;cTiAi@6q(4Fud@_*|=T)#hym;~=_L8p8lTfPNdU z+`BiK(y0IG?F#q4SDNwwqS)7XnPXaRnkugQ_`T=bQnUwirQ@CgtK+JIaHqrqMJ2S+5iLs&ez2Ab(<78LyJQHmk!5!k zne~g>o?VyMNppxyy{T9;fOPhBf;OcrePd+zbWBF_SVv+)iyJ5lMah7dd;5$AtR#$2 zOsMDy^OR|_SZ2?r%j-S%@5LS~cJ0)-D0utiWnDEb2-daLquIozQ}vQo z%~fG3@Ur|u{-3>n?{eEl62{^D?N7l;&Ss=cyIUZ2b!^Y+*qx+zeOtTjnR#~d>gd9D zYonGly0~r6=J(lO00c;Y1PSmeN?kmOn-ob9s2i#ZRRwH5&zH;J*|2c$Hmu1{7=a^V zk`TR;H)wT#$4rc;%<1N|N%`>d?=LTe*9b_zxSmJpM{9Gl+|8#1#@^$710w=`S)Zhcwqu$8~CHoMh|ytTmd&8<6~5kgvCUvKaSFd;~2 z6;yfUYLmFwBb6nQ*Or(J6eK8F<_Rq$`R2jx=y$A-3j&?AO>}a_LQuK}XnZ;DANxDh zEh=eDME*MU-8{kH_|d2d3dz}K$W~&WFsSKPwP@%VW!Umpn@uu`aK}IW7SyK30G`IWrJzuXwJShsPI#+8x%5 z92=AN_I4Et9~chtU*6y0(7)M`*85coB~c{L-@P2ZyE=b+)%cJ9!EOK6l-~LlJ^JV3 zTluFs7D1n_|M(w1g5OT?1smIM`03zLEaC{scvB^N+M9Rf7O~8tEt2n(#^@u;W^s#@ zhS}VQCE$drjBgHmc0Hcd{^03+|6e%UjOvd1(u7?{1=+3I8i2V6pFH6Y%Pr5gTYBRDD_&g4E&tCAT|>GVZK;U5Ue4#sJED}^lG;m^M`GU0$R!>g zF(F8&PThZDMfEp@e8log#K3?252NKM1aUX8=xPYtR}rch)2WSV z@x~yHLKI7%^%uEmJ3??Ulfg{JUMhYjQ}tZCHPacbiy(<3wm);W?2-w)d>5uTp#F9SNL?>42 z@`sbTJJO5TOmUAwKU?9RnWO>JoR{-=LoY;p=!JzhQ-wjJ62qWT-Y{rn5C(19mJpN8 zQ^gAos74S_4FT2r52#jB_n}8tk8_4r)7+P@?t1yq0}n|Zacq*ly;0~}<4VG=%ZR&% zz-uMPdOXU~>LtE-8VmxWvhzm9nTnq3LgWgI&mLPDBjSkAVQIS!!8nTvk1H`;yB6`< z;PGJFJxU^!`wmE(J%1m_fo>&LDsPYWZk`xbu|q& z1yM)8z@z3%37ZE|#|{v6_d?XwHLMyt?57#Vb4~4?;W1foJzqW{NYY%9RtM+rHbr7YMcAvN7NVDuTGV|bO z$yCl17XAskk3c^;`r3kQHw)(8+RVLByy-}!VoAlDKq`V%wC=rBly~TiRdMmJS`F8G zMx)@ehCsjd#&EwRd0C}HQ%Z7@zzdRGZVM#&p-XbmZx2)|mQ|b-q#{VgdoL9||1aMU zJ&OZ4RWX-ez4v}iSIosOv6zdUx0s84P{mwqDCPpiT%eeXcNDDm+*Df3fRypqL9}q(esfL1d&uF_+Mtdob6<>)(eu{gqwJ#e)nKb1{M{ z6mx;8^FB=0P1s>@mx6mz-9vaZx(E+FgJ0kZC1$T}$I zQfpaPYB3j(b?g9HcQ0fe6ga4}s4KOY3y3;)fT+6{q7I6=)LPb+TFeDx9XmkQ9iOa& zVlEXHb5X|R$Hw79F&9Yds&lgI?(_C0(rkvZ1*i*oT`>6`%;XE%u16vk%d6%BViCmR zeHV)cqi=K`X<&Km9}r6`XpTmYgRMEL=Wa?o%OR4kTP&jrLHh{gLZ7Bd!f5uCuO z3c5V^-g}PU!=HPngbTRZ~md_B3DZQTh5qHDc%uiZ6$?d51e(u(jCpL!3^X)nF=x0dUr5Py5(wL|-1 zoja$UQwKLmKR?@kAw44b$mAO%;TzwcQV3mocd;n9#`ERm_l-4n=gT_+gPYMOmxvw$ z2G;ep`*F6x$hTIb*?L26l2pefet^M}(xEr9%Y`>Vk*8Lp&4zx5Jw`FHn35LGsE`Z3 ze?mS@KDk>=my;c-4dG5nT^&q(Bhv9lq;b*~?j~;iW;Dk#;_bFcAWUmmcx_v=4TJP- zJa;il*0-bi{L6{;X*QzIEq1qK4CJXrYf#)Q=cKO<_w?f_=K3ZDDrts1x?8P;FWF5Z z@L4MxQaML#;ckY-{%B$S`PV;Nlu_tofBug@djg();MZ1@qyLe0v)!&9ot@o`*3-Mu z+8ysco-WrP&+Hazowa&rt?t=qefw~RX?fv3#E^QpaVMDDHfO1d7WGRkTGY>5w5V@T zv?!`zr7JbmKb}%U(KW(P=~e}$9#mF4D4OV7Mai62NZ<2BI-aPpmh>zB=YRgg{w;O# zWGk#nB)xI<^3B_eUp(@9dw%)qis=C=1tYA7SSqdJk(X@vy`&k)szhbROm#(?G_;4HQllS1*w&9rbcHfhS1nmWr}WT~ZA^UumJtW*oe`XnjoDjhwB z|H6v7Ud_gxfBEv<`qtxyZ!6*7ds&Xj#K(bExZx-2E#L#Hcv7-rMMFS~CO(azHUw$T zPAY2=t_g8EUp{%l0D;ftc4u2w7)etX=`5ihl9Qtz5*` zo0&?&lEOZ4=RW;-$nX?9Y0^n%ak zT*Eh;obs*S7rJi0ccCh+^YiiL5~}k0d}%`Ue#9`{XJLh*pIKO`W0uAstUy@#tsR-L z+JDul`z)+@QK>A#N?A?HZxDnP2&It`3-`s0$Fu*vTFZz zpYF4;;$@w(2rFehC%-`uRv@enTUbHirW}QvQYY;Q$u|#T2DH6dyQArlBD!JFZ?DgU zH@&C+^h6r%aP7`VpT%9{Vv-piJ>uyV!|UCA&N_ex{6}n8N&Nq4USd~O^N!W{_FL=G zqeniQcwPL1;DIDhY*wQQiSZzN*o1#&Tik?y#yqguiuhFF@%5W`!(T9uQhdI7GrWBD z?8W=%7te$Bf%Sv+e1^4x*?315Nq37WOMd!^(1!JHdA%k4XT6wB+{Ffqoe%DMLjq9HY3r1{ z-5|+uqX`X@T6`hF1=pA-tQVKhE?&L67@}e8bo+UWxzCy`S6?u>lb2ZX)ZN|PDWyT0 zIu&{avmEW-GyEE!K5n*FW74$jR%>AW>drsn9*%BqM~j8(8RS@3vs>$@xjTt}rfr=s zuuk{IdgtDbHaG4k{M6ZlvmgFMp8h8tg=LvA2kYq7&1_@cU_t4Uu`ciniw&vHfhUR` zmJ_q>%-zrwMv@ozhUCG$d4}&#e#bn1O219ACKn{@Dv8 zq^#~@^2M7GF~`!R#$Pc(ej-tZo8_%bqaHB>;8}CEo!!p9dXutsJHnsDy1?(&$lAE> zEq;0ag;*m*>sd}o-pZWH01RsKwFguY@jtj-V`?Y2$0Wn`e@XT$xmbSOVMbYx7Lyy- z8!>K<0B(8BvQgd7?qo;0aO$CZ=5^&}w8Cu@P~#8IY1S+iTc=(kt=A z^v@gm`-ydTGn?G_IkSr;X`1lu8f%}+>r{M{8MMnWYj`XFGCejiQ#wVSQo(+50Fl*=J? z0;o~GBvq;=Bkx5LAw!F4rc1aS&F@BEHbasIJiK1JBxjS6#Fl)MAR`mmTU&F~}E1Q5Zn%?HiViM8z_&c<2D)~-B zDrCD`u)I_fkN1>WN!IsP(nDc26qAkHY!U^vwKMAI{7%``@1!uQn)EfMr*v*Gw!1__ zG_`eQ4v563RJ@Go(j0n>&zq^hH;W}o&n&FW5{cC>_O0r|p*U1}91-LzEZg&0eZirz z|7>jeh3vmpw*&THCC5S9e+Ze_e-E=6cp~*DnRQclG9P(r7cXJLUnNTBl&Ej+?T%FW zU|+zR^v1x-d-3|&f4zDA`b7%cF6NaK_FD3j^V#C}J=k?j&E;TadMyU~W@BwIExA*w zbcUvJq6qw8-O^i32lWc3JPLHQ&#O79vJ(d8vln8!4Y`~KYj`xBMihxa`-?XC|A{R| zUkttZ{NlyM6~^7q?_WK;x_terA-*k~d!hH=3tNTg-~XP~m07Nz#5eVaN^KX%6Lklx zp^@BxIG8!!`RB$(0@&|8F5GK;rz5kYjh-q4^&NJFq zKawd4{}f9=Tf7ihO7Cwrw{NU=FxhOUxQ(b9kjDj_{G_-xYVy3`z!&!l^fQU5|zdfSJP|UgnU`<))+rCvZ8Z( z+VqsEmxLDBpnY4wmjSn<6)_g1d|X6`og;K=z-*En%{l3 z{$u_36RPq`cP6*1JMR|$N4hg!xDPFK?f-^Yn^zthPACYTy?IYSg@-Zm>?8~eLfoWt zbPd2uSpN2!6@UDetsr<P&CYE=6=G>P@eGQ)u|_sHC(B=f1^1&}K+ixbscQ&d2B8 z*DU7R+%0BgK=UuOJ|(5r`J7f)^oDgEC5=<-9bLlVAD~0Q6O2bqYy=%|0G@3`2SFD$ zFgbqfzqO6L)@e!O_7Jln;Pxyg7pv#nFLWu!>y=k-_0}s-hT%!3d#n%OxyxJ9B;x4Q zL-tQ!wwMaYC`s+jJ3M;XaYZI1x3Nt#r~SnI zjt!ILl!yz?_#VAsc#LUnwza$Ay(TcS$S6-ZA(Qurg>x2ce?l}SkM1^v9kFy?&&a&b zma^OtQ3eRrd+T_Z<<3ZfYf)9;MDNKV*Tv|#o_!|Y+ED?5Rj?g?7>f&wc5nU3t0Z@~ z9<3gZ)>O=Gu%fddb{XRWAL~TMld0Hhyjo&Zk^!vT$qdVK?~J`=aGOoDEox?FW@d(% z8Dox_nJH$Hnc0pZPRx{;nVBhOW*K8H zFVN<#>HvEql5Mr&cf0Py{q|M&qc5L(I&vj7PQ15A{ar>Xd(|xK->rbVZ?Tcj?#~^|P^IE5 zce2V}mE^I7$uQ!kkWvgVr{-GGZE*(|dkMi>Y!ai2)pA(`CdJ~{(UmDcvyEKQCrYE; z4KMTEjVDjdwDy+s&WNw;xHx~D$W?bY1}ScE+;+B|o4t)|Jx}xE0L}+9ww22t2ioQ9 z)v+D#IB)u=sa<*dp~SQ`zRQ4vyX`ejMf6cEDaI)K0UB#E8OA8l9mXM6UZ+|5EO(Nx znKUE}E@}s=ftQ%*M4$z&&A1Y4FF?Js*&Z#{>Sr{_4uE_eD!8`9>2Z3X&GlAZVzZVz z5odWJZ+znH3%A55AV8fWJo?Yrk!C7)VfUr_qb{RPUVvBzHbwXQ1V|~lagX5-VN+y@ z3j}U?196Ov-V<%MxjaMlqy~}3_vz#C-^spI605Q6A-x{vV+xckfs&3Rjl>|j(~4NX zFC@FzY;xq3hL`xpedFP&LoFkcZfu$_)!pVxBJ3G$-othx^$%l0tPvRSTXp06KLc^o zxs`jXl&{rhX;wj4X=H6RR9-4`3~rw|7L__p-p>2Dju{^Vj{2qY8Gw4Qv7gfCl%vGe z2ip*FJSpzKqJ`vVIOLaw{c>|hfVn4RKtfX2(vOyG05K=XQ`0g8eFD5b?sin<<-T`i z+lQckYweA?VY@0o!h6DCxnjh78m{eyM-I@_E&>}mcTjn7#o+5X)V6LzFMlL#H-R1U zDb6@-x0^y7j)m?HwcHdQqiIOZC~UXL4I0apFFecD7<7&J^=M-+Kio17%T-AM!#NbW z+CNsBdONIWK7;O#l9XEe0YN@J*pg9O`%fFQM@Uje`vT7Q<*J*Z>a$tN;@yZY*C29# zhQ?a_TO0*xE!MqfF)=@yKJ^w|_(RfHPLsDozaV~t4Zk?A=v4jFTThKME_sex=;x$o zD3Opmk7Bv~&X8KV`&`fZHGf&^-+EFMzfKu`ZBDPF##PHJVsv^dL*1-0$%#Vu4JlbQ z1m-TBw7A)B)odB`l%h^GD4|R>+(sU*;)WltVtg+{nCb|b5k{Drz>@QVF7TC!Ib0ZH<94kMi{8R-~N@>T;go$o(w5BT5l z8^-ZF>fsA~qo}hK5vIZr7;9l3@qWM$W^xHnM_zSWm=T0sbrMHsKp~!!E`}dL_TggX z(*N2S-u0dCYRN4_oj%PZ$X%W$&Rwpd5UxSr^^LviWDGx&@G;KNt^dXM$)!E>Sa^u1 z_hM1x6FXs{9z1-X?`mW5FFFAiq&{EHdOY*^^gdrrqu^N{gW%c5_#I&cwnBKA!*ekX zm!tsb5Z^7x5Z{|#X0=aTu!o;7%PwhoWj3j8Ot@t1pl^c}*@R|R?%+eN$JdH=%2y=Wre(9YGPWM~qTRb+=}*PXVd@<`W5 zE$7H$Kk7GWYYb&?Sv)!1l6Qm|ZuoI`vzo(CB^y~uUn-SE%tv-b9v(S{bz#l>9b^=AZPol_Yh(dw-qjl5b$zlqgn?>M zwmxmZa$Py*eh-TbdowrX)#2yiD{eH`0~_R1S69mw zJ0d(}?gWm*FZCuIkiG$83)1k=+XYKRD9n8&fCdXt=fLyl#e-9w%SbWMxvzX_;8D!^ z9Xn8!jqY}Hp^0pd&@(p2m+7t8+(mfwbX5*2q^xm30uVEPeR%%N&ORMg0}icyt~QYz zxLT+kVvbPQUdY1-1++1!Zj4{1UYR}=5Y(`!zi#b{(YGg;kTYkyV)b^qh_aquA%vIr zJ|6^Z6r_NvjEP}y$n#p%MlL9mL0?F+@QJ3shlU4=zJ%W|-Cp~7aJO%onypKgpR`nUVT9?x3FpNyz#P08 zK=<3o+(c9NJ(LMv-i9Ea>UOUFCI7{}v-1?*QrWCu^M=zgi=?DQ9b(LSHlVIq>D0OH zW7EO8(b)V6T*RQtp)25Vm+*YeGV=Z=yQ6PDTCBu0M3mf#Z)tHJez3V1D<$Y{docNp zn(0saz}(LE9%y~`;jog2s7QG0@8FG?D9n4!E9xu)X(h;0@ifJCt-XTY>QN8dJ>NI9|QOH8dSoGzEo_f2?Po%!>acc25$^umgTo?g=Ks3i2-P*Tdz{c~l4MU@S#sz2G-K$k=C~&We+1irrkvk;*s_Z=r1|q* zh)&_v4}!bNYbY$|(TsCV-amEvy}t|zVeNo+f#-`?M=dobXxm0zT>?9nrc4Y_Ws=B=T=R0jG(Fji7z$#n;H0>Ly@bUxKio z^w*`RZGLjsN1y0!<1Vu9)~DBlhFkmro1@F>l@(4wO`U;zXU+nahBm#6LrsUejkzar zB z&mG=bYQ%%%#>V`k962--1-Liw^$~b*o+-LyngqPssV%Qb(x#C&w$dBL;hYLQLloL9 zt#1YwPbVXHn>S5r0;rgOB-lYxQCv@Qt!n&7B5yP-)k1V*78AL+)VjO zX|7Zyp+LppOAHJdh6szcl%p?^xhrVOmcQkXYE|Bnu8`qYo!lsQ_BZ(=D+J&OmwqIL zYUwi7H8{7g))oE|xp&KjIq~E^@!aZcKw^|qJ_AUF-W^0bhXHq4wwhkt>@2U=^*U>0 zP_u3Bn}nM(d>;@K((v@;+BEoB8@@etxE{rgRbbWy2wE(L9^$?u=>c@-I=MJ+o;$kB zSTnvQUmXw&w{8wM1z67M{GH~%2#{%S_A2X$DYG(ld{@B}plik7zg=R@g|->o<{kJt zYFqcyH^>L+_$$`}s{fJ!0U_&E*w;eN?JBtn+yy7-g*s!!ZvYm3h3o-+F4 zzNxvF`VF%$@Y5bka+y?OPi%18z&KB#*Z8Q(oK~Fgy+1YVo?WhJ?!LF)ilCcn6=afg z%x?y|-=!=64i$?n->4TnXK%K}0VKXq%7_F;Ox6=b_6xI%-4#`TRy1+2CXzPTYe99y zDhz+ZQ)r~!MKrP?u2i4VrbVq<{Js2cTdpW?wmVi>xW!J{s>bo~GQN+<$wd z3jCgXoq>~QT9xc_EHrdkdZzP7=Q=)^e&~GQ;Ds{qm6Ddwp?gqMr~I|wS zdZdU|D9x@*4+4Kp(3Jau3OSbci$Fiq;1jYoaruq3kjj=|AcmJ2iwJ6P=f@f4m)7!q z8>2#Mqsv1wsp<@G`izdBFisn@i96f0vANIG?uhiWuas0*LWN#3uv-kOf8C;VFU|Qs zreLOVpV9Ijge9aR>vn2jX7+8haaql<9_u(FM7#a`fN6RQs8;H#=?pQo&R$&u9<_RH zX{)xP>$TBXrQfbyOdaDz+qHCtRa1wSzs$rR@fWg-#s(k$f+9*{tj#lby^`>?EqzDv zE4LdYKAg|Tlm-0N$MjJ@OTPL#4#&wPFICqSOHJlsUdJtzo5&|+KtpSd`XgEQ^GPAK zXgl`lYx=yBxaG%>MBf13em|t#+sj5SI#&bXtkV%xu zh4k@TEpyAF;qnN-X1XSM6MrDKNCf@8(Qy6(3-{rA=9JVKICvvO(uIA&r5OtY_vFA( zzY5Tc7yGj$XQ!Vo#JH`vt`s1Ts#bxGtUFzELa3q(hdliwa$A)b>zlbk!mEQg}=% z{x1v}*tl0^lM2(dR0WorNDtVjv(zOq@+(<;kstRnN2rn_-dtZI<0$+=Um0^T$>Q|Q z|LA?=p+6N8q}QD@{c&S38m=TN&MUAvnDd*HJfkhgVwADb8}iA$Wn@;v79=Ua1~-O< z8_|(dVHH`3m9H;A_ziv4HuGx}>A(Z6$3~+YH0&E<7+;5%VhgAFaCUCl_RH25$E|QxARhmPo?)>lBd7KFm4kPYbJhO zc(o-KJF zD&)V`HDMxAOuAo7W^GfFG1L``#=j0`AIdTO(B1AfsE#R7GPE`TqEJ=Fvo0IFm7m^6 zviUlBEgS3JYM=0;>+e<@l-7+oSX+cHJjeT0*)H(v2@SwmF*^Q*|9=_velfGf!x^{OV?SnzJ?_YvQKkuY*%C0!)mKuUj@!Bq97P zqsCi9Bk~k8J3UU!k}n1;<$P#V{(MX4j#6E2gS@rIABp5Q6eEoj^H*1oOa@WR-k*iu z#$Y*-&6n;};5bj;hgVGqXK|hdos>0g1AVqrhz>|nU>#WC6v!080~`7-0IK&aWUDV^CW)Qw9I#$d zyPiTX!W%&@vtqiWt5;=W0WMQ`4d*kOmbj1|P~Gg?zM?C#=I}X7kJ}cwbML}#I>j)5 z?q;b|*%QUCvP3=_XB~NRKG#%6&3trJ91T2PvYEUChf1S(scCt_zq+g;ClMxnmBS0J zqVL=3qA!}-v4JvuBM7qI4ceM}{QL87s)O6d<&$SlO^=Ch|>ENDzR5~UPfhdQA;U1zjt~{bFe&xi_Id8XHnNd+EBvhms!=u>Fzm3 zAh*GXw1$yyDY9R?cU4%h+^Mlhj^0>o#3*wa=94ypJA(!1a4H8G*&p2%a&wLN##n2` z+eA=WeACrKQ$L$&c^hK(5QG8`VE{h!@>pLxFBZn}Vs5Vu7 zK%|6%W%@EE%Pt25os`QGfFy`$UG~YPVK&}0%R+J@gG^|q2JWc>&c7+m^MKP((St$v zw>zTVS4v%$z2Y5Iwsm3D=YS74g`(@KZ8`p;Ar4#Uo-4cOj?=wpsFnWlVMmpwbREFf z*34)?q4w-mZ%I=dEo5lWO)oI+z}N&k4C!=(=euni?X%HcdNMp~bx0MHV`GYp(+LL+ zKPc`_W@g!C^L)zPZ~W!$3|utWS-9S~rkOz4WXymC)9thQwetv%zz!PvME?sRpUuYK zfyK3-lhH%6`mLm&oe{oOZ6>Y2+->PQYICzQd7amDQPS-6Morr{($R7X+t6_mx7K{i z7|O3!VPCNeJXNu~>nSVbE&sVoixthLzZ3<}V>oa+jM$`TH-i}X0}%Y{M;hjJ>3k*p zhk|!kDcr$%>;gZfQ$mjqQR%kJG;3F9cPVBn4*=@?utIa<#nV>~8~<25Gi?lQz)Xay zFRzihxM?-i+>HxJ{;*(mQkrX~wS7Uy-}-#Mr1Ya#)xyA0w(A(hy9^O7gR&)xvEiY? z4sBij*Fkc$hWbcd4t;7+5l1Qvvz#5pPhEns_0jh++pZ5FvM)AttT5?D;BnIq`v@>+ zqrd*m6_4%x(m#8D7lBbUio3?n1gDHy!T?$;aDr5Qh z@-eqLA*Lf&CF%yNi8^;Ou%lpiWghdIAjyWj%N&Y&`rfdYpXVOX?u8t2)1zJi{k;8+ z1brV$yt11qRXZfn`|nZNgh^*T#ZgT)a4y^;mq+y_AwbBGT-Ky6s*1K`a*kK`8k2n2 zK{R%s3GcM8%I-34iMrdaaeSe-@{xrZEF*w^fq2}+DCYP1>RDxvi4TY7a{$cL@L1ls4s?^P_|0i zM0p)wugaOkSb&^M_LF!(NU`UH^$h6T?h(VBps(Bh&Sl|46tEZjYjuN~+R;7WzVSN7 z&-j5K;=1hYogV|`T1uHLh6l}|D6|6$U!&{`Zh`9&zwwa>)7)-wB2#&XmR5}>^-ip3 zj&FBRsb+N9o?~2~sD=I(eiFD|fZn00l z-sXkI$nCR{L8dhAOTxfIUW#R_r;U!$XS`+U*#Er&8Oc8~lt+gXiVjO9-@0i1M5Nps zM}MJN!gOhz^>G#nDkM>spRpGUS$~AFn|Jw10(u1ez7yTbzA8cu%T3OdlGG-^B>iT_ z+`Yq21XC`=d*K`f3ZL$8=Kkxg?ep z@)nY~1<1QLmoyRN(OwHuqLnjuYsu|yHMm5G?HFo@ul@PLx5~OBW@acl$(%3w^2c3T zxP13lB.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%0Da?v*oho3hLdaF1*4(s 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

    j<@q#z|I9Ji1U*tenol8IW7-MZ}7EVnE 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�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

    5Pp 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

    W=reVpg#RaSPMOIo{7 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

    71+%~JO}IF`|BZ2} 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

      X9D1?PE%wa-DiB4*5 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�KgfsvFN8xoQI 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

      fkAsMeB8qZ^L^(n6;1^*FLQOOqRIwa5HTW7P1 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 T2Z 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

      Ug>&^q46cfedD?tG^1tvm!tfGhBeHgd(A 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

      FMkf*SSP#0f*bZVvsiL|5l7HOx^&oYX?bN1 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≤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

      2q-B+N=yDQ>ks#-TgDRlad6{-;1(E1NyK8b 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

      xn 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≥hl%{(yJYrrd}@XGz6kVNGzCmhtGM`GsK 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

      bKl_c&+1~0Y?&XDO&(d71V4Q^k)5r()u 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źe0lo5>I#MHqyjsR=t()dE8}$= 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.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≶d({i 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

      J4ld%OUgOU4uIl8-fvFHd(jL4W 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%0D@hDgBMl7KKG5&I``_?*CIiS=054`! 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

      fkjaV3m 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%0DNiiV;+|Q=I+YM1Kg(-&9U7hVsL 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%0A9naYzQ+hNnb{*AfO=29+6gj>yA2S$_HECe;F7pj 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

      8|7IgR7Bx!1%!4;j+=TT)w)D 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�b;LdhnPlQkua6y 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≫XTnlslvo~im54>Xp2a~ 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 I6 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 Y5r$=s_ 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
        0UUh+Bf$}eT3ihvU8BB`k=rl!q!bk%fX~tZ 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 From f470da1f4a85b975735f619188ec973a704daa9e Mon Sep 17 00:00:00 2001 From: Evert Bunschoten <38651601+EvertBunschoten@users.noreply.github.com> Date: Mon, 9 Mar 2026 09:37:48 +0100 Subject: [PATCH 112/229] Update mlpcpp (#2746) * update MLPCpp submodule * Made data-driven fluid model classes compatible with newer version of MLPCpp * Burnt progress variable is only calculated when using flame front ignition * Added unit test for differentiability of MLP inference * MLP unit test compatible with new version * Include MLPCpp submodule in AD build --- .github/workflows/regression.yml | 2 +- SU2_CFD/include/fluid/CDataDrivenFluid.hpp | 14 +-- SU2_CFD/src/fluid/CDataDrivenFluid.cpp | 118 +++++++---------- SU2_CFD/src/fluid/CFluidFlamelet.cpp | 29 ++--- .../src/solvers/CSpeciesFlameletSolver.cpp | 5 +- .../laminar_premixed_h2_flame_cfd.cfg | 2 +- .../CLookUp_ANN_tests.cpp | 77 +++++++----- .../MLP_Jacobian_tests.cpp | 119 ++++++++++++++++++ UnitTests/meson.build | 7 +- meson_scripts/init.py | 2 +- subprojects/MLPCpp | 2 +- 11 files changed, 231 insertions(+), 146 deletions(-) create mode 100644 UnitTests/Common/toolboxes/multilayer_perceptron/MLP_Jacobian_tests.cpp diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index c1bebd3928ff..cb7d6cca23ce 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -28,7 +28,7 @@ jobs: - config_set: BaseMPI flags: '-Denable-pywrapper=true -Denable-coolprop=true -Denable-mpp=true -Dinstall-mpp=true -Denable-mlpcpp=true -Denable-tests=true --warnlevel=2' - config_set: ReverseMPI - flags: '-Denable-autodiff=true -Denable-normal=false -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror' + flags: '-Denable-autodiff=true -Denable-normal=false -Denable-pywrapper=true -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' - config_set: ForwardMPI flags: '-Denable-directdiff=true -Denable-normal=false -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' - config_set: BaseNoMPI diff --git a/SU2_CFD/include/fluid/CDataDrivenFluid.hpp b/SU2_CFD/include/fluid/CDataDrivenFluid.hpp index 45cd6f430625..47092a51f260 100644 --- a/SU2_CFD/include/fluid/CDataDrivenFluid.hpp +++ b/SU2_CFD/include/fluid/CDataDrivenFluid.hpp @@ -107,13 +107,12 @@ class CDataDrivenFluid final : public CFluidModel { string varname_rho, /*!< \brief Controlling variable name for density. */ varname_e; /*!< \brief Controlling variable name for static energy. */ - - size_t idx_rho, /*!< \brief Interpolator index for density input. */ - idx_e; /*!< \brief Interpolator index for energy input. */ su2double Newton_Relaxation, /*!< \brief Relaxation factor for Newton solvers. */ rho_start, /*!< \brief Starting value for the density in Newton solver processes. */ e_start, /*!< \brief Starting value for the energy in Newton solver processes. */ + rho_query, + e_query, Newton_Tolerance, /*!< \brief Normalized tolerance for Newton solvers. */ rho_min, rho_max, /*!< \brief Minimum and maximum density values in data set. */ e_min, e_max; /*!< \brief Minimum and maximum energy values in data set. */ @@ -130,10 +129,7 @@ class CDataDrivenFluid final : public CFluidModel { dhdrho_e, /*!< \brief Enthalpy derivative w.r.t. density. */ dhde_rho; /*!< \brief Enthalpy derivative w.r.t. static energy. */ - vector input_names_rhoe, /*!< \brief Data-driven method input variable names of the independent variables - (density, energy). */ - output_names_rhoe; /*!< \brief Output variable names listed in the data-driven method input file name. */ - + vector output_names_rhoe; /*!< \brief Output variable names listed in the data-driven method input file name. */ vector outputs_rhoe; /*!< \brief Pointers to output variables. */ vector> dsdrhoe; /*!< \brief Entropy Jacobian terms. */ @@ -144,8 +140,8 @@ class CDataDrivenFluid final : public CFluidModel { bool display_Newton_process{false}; /*--- Class variables for the multi-layer perceptron method ---*/ #ifdef USE_MLPCPP - MLPToolbox::CLookUp_ANN* lookup_mlp; /*!< \brief Multi-layer perceptron collection. */ - MLPToolbox::CIOMap* iomap_rhoe; /*!< \brief Input-output map. */ + MLPToolbox::CLookUp_ANN *lookup_mlp; /*!< \brief Multi-layer perceptron collection. */ + MLPToolbox::CIOMap iomap_rhoe; /*!< \brief Input-output map. */ #endif vector MLP_inputs; /*!< \brief Inputs for the multi-layer perceptron look-up operation. */ diff --git a/SU2_CFD/src/fluid/CDataDrivenFluid.cpp b/SU2_CFD/src/fluid/CDataDrivenFluid.cpp index 64fa394f74f9..8b4f2c20859f 100644 --- a/SU2_CFD/src/fluid/CDataDrivenFluid.cpp +++ b/SU2_CFD/src/fluid/CDataDrivenFluid.cpp @@ -79,7 +79,6 @@ CDataDrivenFluid::~CDataDrivenFluid() { switch (Kind_DataDriven_Method) { case ENUM_DATADRIVEN_METHOD::MLP: #ifdef USE_MLPCPP - delete iomap_rhoe; delete lookup_mlp; #endif break; @@ -92,82 +91,55 @@ CDataDrivenFluid::~CDataDrivenFluid() { } void CDataDrivenFluid::MapInputs_to_Outputs() { /*--- Inputs of the data-driven method are density and internal energy. ---*/ - input_names_rhoe.resize(2); - idx_rho = 0; - idx_e = 1; - input_names_rhoe[idx_rho] = varname_rho; - input_names_rhoe[idx_e] = varname_e; /*--- Required outputs for the interpolation method are entropy and its partial derivatives with respect to energy and * density. ---*/ - size_t n_outputs, idx_s,idx_dsde_rho = 1, idx_dsdrho_e = 2, idx_d2sde2 = 3, idx_d2sdedrho = 4, idx_d2sdrho2 = 5; - if (use_MLP_derivatives) { - n_outputs = 1; - idx_s = 0; - - outputs_rhoe.resize(n_outputs); - output_names_rhoe.resize(n_outputs); - output_names_rhoe[idx_s] = "s"; - outputs_rhoe[idx_s] = &Entropy; - - dsdrhoe.resize(n_outputs); - d2sdrhoe2.resize(n_outputs); - dsdrhoe[0].resize(2); - dsdrhoe[0][idx_rho] = &dsdrho_e; - dsdrhoe[0][idx_e] = &dsde_rho; - - d2sdrhoe2[0].resize(2); - d2sdrhoe2[0][idx_rho].resize(2); - d2sdrhoe2[0][idx_e].resize(2); - d2sdrhoe2[0][idx_rho][idx_rho] = &d2sdrho2; - d2sdrhoe2[0][idx_rho][idx_e] = &d2sdedrho; - d2sdrhoe2[0][idx_e][idx_rho] = &d2sdedrho; - d2sdrhoe2[0][idx_e][idx_e] = &d2sde2; - } else { - n_outputs = 6; - idx_s = 0; - idx_dsde_rho = 1, idx_dsdrho_e = 2, idx_d2sde2 = 3, idx_d2sdedrho = 4, idx_d2sdrho2 = 5; - - outputs_rhoe.resize(n_outputs); - output_names_rhoe.resize(n_outputs); - output_names_rhoe[idx_s] = "s"; - outputs_rhoe[idx_s] = &Entropy; - output_names_rhoe[idx_dsde_rho] = "dsde_rho"; - outputs_rhoe[idx_dsde_rho] = &dsde_rho; - output_names_rhoe[idx_dsdrho_e] = "dsdrho_e"; - outputs_rhoe[idx_dsdrho_e] = &dsdrho_e; - output_names_rhoe[idx_d2sde2] = "d2sde2"; - outputs_rhoe[idx_d2sde2] = &d2sde2; - output_names_rhoe[idx_d2sdedrho] = "d2sdedrho"; - outputs_rhoe[idx_d2sdedrho] = &d2sdedrho; - output_names_rhoe[idx_d2sdrho2] = "d2sdrho2"; - outputs_rhoe[idx_d2sdrho2] = &d2sdrho2; - } - + const string name_entropy{"s"}, name_dsdrho{"dsdrho_e"}, name_dsde{"dsde"}, name_d2sdrho2{"d2sdrho2"}, name_d2sdedrho{"d2sdedrho"}, name_d2sde2{"d2sde2"}; + - /*--- Further preprocessing of input and output variables. ---*/ if (Kind_DataDriven_Method == ENUM_DATADRIVEN_METHOD::MLP) { -/*--- Map MLP inputs to outputs. ---*/ -#ifdef USE_MLPCPP - iomap_rhoe = new MLPToolbox::CIOMap(input_names_rhoe, output_names_rhoe); - lookup_mlp->PairVariableswithMLPs(*iomap_rhoe); - MLP_inputs.resize(2); -#endif + #ifdef USE_MLPCPP + iomap_rhoe = MLPToolbox::CIOMap(); + iomap_rhoe.AddQueryInput(varname_rho, &rho_query); + iomap_rhoe.AddQueryInput(varname_e, &e_query); + iomap_rhoe.AddQueryOutput(name_entropy, &Entropy); + + if (use_MLP_derivatives) { + iomap_rhoe.AddQueryJacobian(name_entropy, varname_rho, &dsdrho_e); + iomap_rhoe.AddQueryJacobian(name_entropy, varname_e, &dsde_rho); + iomap_rhoe.AddQueryHessian(name_entropy, varname_rho, varname_rho, &d2sdrho2); + iomap_rhoe.AddQueryHessian(name_entropy, varname_e, varname_rho, &d2sdedrho); + iomap_rhoe.AddQueryHessian(name_entropy, varname_e, varname_e, &d2sde2); + } else { + iomap_rhoe.AddQueryOutput(name_dsdrho, &dsdrho_e); + iomap_rhoe.AddQueryOutput(name_dsde, &dsde_rho); + iomap_rhoe.AddQueryOutput(name_d2sdrho2, &d2sdrho2); + iomap_rhoe.AddQueryOutput(name_d2sde2, &d2sde2); + iomap_rhoe.AddQueryOutput(name_d2sdedrho, &d2sdedrho); + } + + lookup_mlp->PairVariableswithMLPs(iomap_rhoe); + #endif } else { - /*--- Retrieve column indices of LUT output variables ---*/ - LUT_idx_s = lookup_table->GetIndexOfVar(output_names_rhoe[idx_s]); - LUT_idx_dsdrho_e = lookup_table->GetIndexOfVar(output_names_rhoe[idx_dsdrho_e]); - LUT_idx_dsde_rho = lookup_table->GetIndexOfVar(output_names_rhoe[idx_dsde_rho]); - LUT_idx_d2sde2 = lookup_table->GetIndexOfVar(output_names_rhoe[idx_d2sde2]); - LUT_idx_d2sdedrho= lookup_table->GetIndexOfVar(output_names_rhoe[idx_d2sdedrho]); - LUT_idx_d2sdrho2 = lookup_table->GetIndexOfVar(output_names_rhoe[idx_d2sdrho2]); + LUT_idx_s = lookup_table->GetIndexOfVar(name_entropy); + LUT_idx_dsdrho_e = lookup_table->GetIndexOfVar(name_dsdrho); + LUT_idx_dsde_rho = lookup_table->GetIndexOfVar(name_dsde); + LUT_idx_d2sde2 = lookup_table->GetIndexOfVar(name_d2sde2); + LUT_idx_d2sdedrho= lookup_table->GetIndexOfVar(name_d2sdedrho); + LUT_idx_d2sdrho2 = lookup_table->GetIndexOfVar(name_d2sdrho2); LUT_lookup_indices.push_back(LUT_idx_s); + outputs_rhoe.push_back(&Entropy); LUT_lookup_indices.push_back(LUT_idx_dsde_rho); + outputs_rhoe.push_back(&dsde_rho); LUT_lookup_indices.push_back(LUT_idx_dsdrho_e); + outputs_rhoe.push_back(&dsdrho_e); LUT_lookup_indices.push_back(LUT_idx_d2sde2); + outputs_rhoe.push_back(&d2sde2); LUT_lookup_indices.push_back(LUT_idx_d2sdedrho); + outputs_rhoe.push_back(&d2sdedrho); LUT_lookup_indices.push_back(LUT_idx_d2sdrho2); + outputs_rhoe.push_back(&d2sdrho2); } } @@ -297,13 +269,9 @@ unsigned long CDataDrivenFluid::Predict_MLP(su2double rho, su2double e) { unsigned long exit_code = 0; /*--- Evaluate MLP collection for the given values for density and energy. ---*/ #ifdef USE_MLPCPP - MLP_inputs[idx_rho] = rho; - MLP_inputs[idx_e] = e; - if (use_MLP_derivatives){ - exit_code = lookup_mlp->PredictANN(iomap_rhoe, MLP_inputs, outputs_rhoe, &dsdrhoe, &d2sdrhoe2); - } else { - exit_code = lookup_mlp->PredictANN(iomap_rhoe, MLP_inputs, outputs_rhoe); - } + rho_query = rho; + e_query = e; + if(!lookup_mlp->Predict(iomap_rhoe)) exit_code=1; #endif return exit_code; @@ -435,10 +403,10 @@ void CDataDrivenFluid::ComputeIdealGasQuantities() { break; case ENUM_DATADRIVEN_METHOD::MLP: #ifdef USE_MLPCPP - rho_min = lookup_mlp->GetInputNorm(iomap_rhoe, idx_rho).first; - e_min = lookup_mlp->GetInputNorm(iomap_rhoe, idx_e).first; - rho_max = lookup_mlp->GetInputNorm(iomap_rhoe, idx_rho).second; - e_max = lookup_mlp->GetInputNorm(iomap_rhoe, idx_e).second; + rho_min = iomap_rhoe.GetInputNorm(varname_rho).first; + e_min = iomap_rhoe.GetInputNorm(varname_e).first; + rho_max = iomap_rhoe.GetInputNorm(varname_rho).second; + e_max = iomap_rhoe.GetInputNorm(varname_e).second; #endif break; default: diff --git a/SU2_CFD/src/fluid/CFluidFlamelet.cpp b/SU2_CFD/src/fluid/CFluidFlamelet.cpp index e0d30ce4092e..d84a4b83a745 100644 --- a/SU2_CFD/src/fluid/CFluidFlamelet.cpp +++ b/SU2_CFD/src/fluid/CFluidFlamelet.cpp @@ -224,23 +224,6 @@ void CFluidFlamelet::PreprocessLookUp(CConfig* config) { val_vars_PD[FLAMELET_PREF_DIFF_SCALARS::I_BETA_MIXFRAC] = beta_mixfrac; preferential_diffusion = flamelet_options.preferential_diffusion; - switch (Kind_DataDriven_Method) { - case ENUM_DATADRIVEN_METHOD::LUT: - preferential_diffusion = look_up_table->CheckForVariables(varnames_PD); - break; - case ENUM_DATADRIVEN_METHOD::MLP: -#ifdef USE_MLPCPP - n_betas = 0; - for (auto iMLP = 0u; iMLP < datadriven_fluid_options.n_filenames; iMLP++) { - auto outputMap = lookup_mlp->FindVariableIndices(iMLP, varnames_PD, false); - n_betas += outputMap.size(); - } - preferential_diffusion = (n_betas == varnames_PD.size()); -#endif - break; - default: - break; - } if (!preferential_diffusion && flamelet_options.preferential_diffusion) SU2_MPI::Error("Preferential diffusion scalars not included in flamelet manifold.", CURRENT_FUNCTION); @@ -252,7 +235,8 @@ void CFluidFlamelet::PreprocessLookUp(CConfig* config) { iomap_LookUp = new MLPToolbox::CIOMap(controlling_variable_names, varnames_LookUp); lookup_mlp->PairVariableswithMLPs(*iomap_TD); lookup_mlp->PairVariableswithMLPs(*iomap_Sources); - lookup_mlp->PairVariableswithMLPs(*iomap_LookUp); + if (n_lookups > 1) + lookup_mlp->PairVariableswithMLPs(*iomap_LookUp); if (preferential_diffusion) { iomap_PD = new MLPToolbox::CIOMap(controlling_variable_names, varnames_PD); lookup_mlp->PairVariableswithMLPs(*iomap_PD); @@ -329,7 +313,7 @@ unsigned long CFluidFlamelet::EvaluateDataSet(const vector& input_sca /*--- Add all quantities and their names to the look up vectors. ---*/ - bool inside; + bool inside{true}; switch (Kind_DataDriven_Method) { case ENUM_DATADRIVEN_METHOD::LUT: if (output_refs.size() != LUT_idx.size()) @@ -339,19 +323,20 @@ unsigned long CFluidFlamelet::EvaluateDataSet(const vector& input_sca } else { inside = look_up_table->LookUp_XY(LUT_idx, output_refs, val_prog, val_enth); } - if (inside) extrapolation = 0; - else extrapolation = 1; + break; case ENUM_DATADRIVEN_METHOD::MLP: refs_vars.resize(output_refs.size()); for (auto iVar = 0u; iVar < output_refs.size(); iVar++) refs_vars[iVar] = &output_refs[iVar]; #ifdef USE_MLPCPP - extrapolation = lookup_mlp->PredictANN(iomap_Current, input_scalar, refs_vars); + inside=lookup_mlp->Predict(*iomap_Current, input_scalar, refs_vars); #endif break; default: break; } + if (inside) extrapolation = 0; + else extrapolation = 1; for (auto iVar = 0u; iVar < output_refs.size(); iVar++) AD::SetPreaccOut(output_refs[iVar]); AD::EndPreacc(); return extrapolation; diff --git a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp index 622a1a6b068f..afc8ed5e2e52 100644 --- a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp @@ -213,7 +213,8 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** for (unsigned long i_mesh = 0; i_mesh <= config->GetnMGLevels(); i_mesh++) { fluid_model_local = solver_container[i_mesh][FLOW_SOL]->GetFluidModel(); - prog_burnt = GetBurntProgressVariable(fluid_model_local, scalar_init); + if (flame_front_ignition) prog_burnt = GetBurntProgressVariable(fluid_model_local, scalar_init); + for (auto iVar = 0u; iVar < nVar; iVar++) scalar_init[iVar] = config->GetSpecies_Init()[iVar]; /*--- Set enthalpy based on initial temperature and scalars. ---*/ @@ -797,7 +798,7 @@ su2double CSpeciesFlameletSolver::GetBurntProgressVariable(CFluidModel* fluid_mo bool outside = false; while (!outside) { fluid_model->SetTDState_T(300, scalars); - if (fluid_model->GetExtrapolation() == 1) outside = true; + if (fluid_model->GetExtrapolation() == 1 || (fluid_model->GetTemperature()>1000.)) outside = true; scalars[I_PROGVAR] += delta; } su2double pv_burnt = scalars[I_PROGVAR] - delta; diff --git a/TestCases/flamelet/07_laminar_premixed_h2_flame_cfd/laminar_premixed_h2_flame_cfd.cfg b/TestCases/flamelet/07_laminar_premixed_h2_flame_cfd/laminar_premixed_h2_flame_cfd.cfg index 93328224dc0b..974505d809bf 100644 --- a/TestCases/flamelet/07_laminar_premixed_h2_flame_cfd/laminar_premixed_h2_flame_cfd.cfg +++ b/TestCases/flamelet/07_laminar_premixed_h2_flame_cfd/laminar_premixed_h2_flame_cfd.cfg @@ -31,7 +31,7 @@ CONDUCTIVITY_MODEL= FLAMELET DIFFUSIVITY_MODEL= FLAMELET KIND_SCALAR_MODEL= FLAMELET INTERPOLATION_METHOD= MLP -FILENAMES_INTERPOLATOR= (MLP_TD.mlp, MLP_PD.mlp, MLP_PPV.mlp, MLP_null.mlp) +FILENAMES_INTERPOLATOR= (MLP_TD.mlp, MLP_PD.mlp, MLP_PPV.mlp) PREFERENTIAL_DIFFUSION= YES % -------------------- SCALAR TRANSPORT ---------------------------------------% diff --git a/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp b/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp index 2d255f8ca5cb..7f6dc38ad614 100644 --- a/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp +++ b/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp @@ -28,6 +28,7 @@ #include "catch.hpp" #include "../../../../Common/include/CConfig.hpp" #if defined(HAVE_MLPCPP) +#define MLP_CUSTOM_TYPE su2double #include "../../../../subprojects/MLPCpp/include/CLookUp_ANN.hpp" #define USE_MLPCPP #endif @@ -35,43 +36,59 @@ #ifdef USE_MLPCPP TEST_CASE("LookUp ANN test", "[LookUpANN]") { - std::string MLP_input_files[] = {"src/SU2/UnitTests/Common/toolboxes/multilayer_perceptron/simple_mlp.mlp"}; - unsigned short n_MLPs = 1; - MLPToolbox::CLookUp_ANN ANN(n_MLPs, MLP_input_files); - std::vector MLP_input_names, MLP_output_names; - std::vector MLP_inputs; - std::vector MLP_outputs; - su2double x, y, z; + MLPToolbox::CLookUp_ANN ANN; + MLPToolbox::CNeuralNetwork mlp = + MLPToolbox::CNeuralNetwork("src/SU2/UnitTests/Common/toolboxes/multilayer_perceptron/simple_mlp.mlp"); - /*--- Define MLP inputs and outputs ---*/ - MLP_input_names.resize(2); - MLP_input_names[0] = "x"; - MLP_input_names[1] = "y"; - MLP_inputs.resize(2); + ANN.AddNetwork(&mlp); + su2double x, y, z, z_alt; - MLP_outputs.resize(1); - MLP_output_names.resize(1); - MLP_output_names[0] = "z"; - MLP_outputs[0] = &z; + /*--- Create a query where the value of z is calculated from x and y ---*/ + MLPToolbox::CIOMap iomap_ref; + iomap_ref.AddQueryInput("x", &x); + iomap_ref.AddQueryInput("y", &y); + iomap_ref.AddQueryOutput("z", &z); - /*--- Generate input-output map ---*/ - MLPToolbox::CIOMap iomap(MLP_input_names, MLP_output_names); - ANN.PairVariableswithMLPs(iomap); - /*--- MLP evaluation on point in the middle of the training data range ---*/ + ANN.PairVariableswithMLPs(iomap_ref); + + MLPToolbox::CIOMap iomap_vec; + std::vector input_names = {"x", "y"}, output_names = {"z"}; + std::vector output_refs = {&z_alt}; + std::vector mlp_inputs; + + iomap_vec.SetQueryInput(input_names); + iomap_vec.SetQueryOutput(output_names); + ANN.PairVariableswithMLPs(iomap_vec); + + /*--- MLP evaluation on two points in the middle of the training data range ---*/ x = 1.0; y = -0.5; - MLP_inputs[0] = x; - MLP_inputs[1] = y; - ANN.PredictANN(&iomap, MLP_inputs, MLP_outputs); + bool inside = ANN.Predict(iomap_ref); CHECK(z == Approx(0.344829)); + CHECK(inside); + + mlp_inputs.resize(2); + mlp_inputs[0] = x; + mlp_inputs[1] = y; + ANN.Predict(iomap_vec, mlp_inputs, output_refs); + CHECK(z == z_alt); + + x = 0.5; + y = -0.23; + inside = ANN.Predict(iomap_ref); + + CHECK(z == Approx(0.224986)); + CHECK(inside); + + mlp_inputs[0] = x; + mlp_inputs[1] = y; + ANN.Predict(iomap_vec, mlp_inputs, output_refs); - /*--- MLP evaluation on point outside the training data range ---*/ - x = 3.0; - y = -10; - MLP_inputs[0] = x; - MLP_inputs[1] = y; - ANN.PredictANN(&iomap, MLP_inputs, MLP_outputs); - CHECK(z == Approx(0.012737)); + /*--- */ + x = 10.0; + y = -20.0; + inside = ANN.Predict(iomap_ref); + CHECK(!inside); } #endif diff --git a/UnitTests/Common/toolboxes/multilayer_perceptron/MLP_Jacobian_tests.cpp b/UnitTests/Common/toolboxes/multilayer_perceptron/MLP_Jacobian_tests.cpp new file mode 100644 index 000000000000..b2277d7d1b5b --- /dev/null +++ b/UnitTests/Common/toolboxes/multilayer_perceptron/MLP_Jacobian_tests.cpp @@ -0,0 +1,119 @@ +/*! + * \file MLP_Jacobian_tests.cpp + * \brief Check if MLP is differentiable + * \author E.C.Bunschoten + * \version 8.4.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2026, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#include "catch.hpp" +#include "../../../../Common/include/CConfig.hpp" +#if defined(HAVE_MLPCPP) +#define MLP_CUSTOM_TYPE su2double +#include "../../../../subprojects/MLPCpp/include/CLookUp_ANN.hpp" +#define USE_MLPCPP +#endif +#include + +#ifdef USE_MLPCPP +TEST_CASE("MLP Jacobian test", "[LookUpANN]") { + /* Create network with random weights */ + std::vector NN = {3, 10, 10, 1}; + MLPToolbox::CNeuralNetwork mlp = MLPToolbox::CNeuralNetwork(NN); + mlp.SetActivationFunction("gelu"); + mlp.RandomWeights(); + + /* Enable Jacobian and Hessian computation */ + mlp.CalcJacobian(true); + mlp.CalcHessian(true); + + /* Network input values */ + su2double val_in_1, val_in_2, val_in_3; + val_in_1 = 0.2; + val_in_2 = 0.3; + val_in_3 = 0.9; + + /* Calculate Jacobians with AD */ + AD::Reset(); + AD::StartRecording(); + AD::RegisterInput(val_in_1); + AD::RegisterInput(val_in_2); + AD::RegisterInput(val_in_3); + + mlp.SetInput(0, val_in_1); + mlp.SetInput(1, val_in_2); + mlp.SetInput(2, val_in_3); + mlp.Predict(); + + su2double val_out = mlp.GetOutput(0); + + AD::RegisterOutput(val_out); + AD::StopRecording(); + SU2_TYPE::SetDerivative(val_out, 1.0); + AD::ComputeAdjoint(); + const su2double jacobian_AD_1 = SU2_TYPE::GetDerivative(val_in_1); + const su2double jacobian_AD_2 = SU2_TYPE::GetDerivative(val_in_2); + const su2double jacobian_AD_3 = SU2_TYPE::GetDerivative(val_in_3); + + /* Retrieve analytical Jacobians */ + const su2double jacobian_ref_1 = mlp.GetJacobian(0, 0); + const su2double jacobian_ref_2 = mlp.GetJacobian(0, 1); + const su2double jacobian_ref_3 = mlp.GetJacobian(0, 2); + + /* Unit tests for Jacobians */ + CHECK(SU2_TYPE::GetValue(jacobian_AD_1) == Approx(SU2_TYPE::GetValue(jacobian_ref_1))); + CHECK(SU2_TYPE::GetValue(jacobian_AD_2) == Approx(SU2_TYPE::GetValue(jacobian_ref_2))); + CHECK(SU2_TYPE::GetValue(jacobian_AD_3) == Approx(SU2_TYPE::GetValue(jacobian_ref_3))); + + /* Calculate Hessians with AD */ + AD::Reset(); + AD::StartRecording(); + AD::RegisterInput(val_in_1); + AD::RegisterInput(val_in_2); + AD::RegisterInput(val_in_3); + + mlp.SetInput(0, val_in_1); + mlp.SetInput(1, val_in_2); + mlp.SetInput(2, val_in_3); + mlp.Predict(); + + su2double jacobian_analytical = mlp.GetJacobian(0, 0); + + AD::RegisterOutput(jacobian_analytical); + AD::StopRecording(); + SU2_TYPE::SetDerivative(jacobian_analytical, 1.0); + AD::ComputeAdjoint(); + const su2double hessian_AD_1 = SU2_TYPE::GetDerivative(val_in_1); + const su2double hessian_AD_2 = SU2_TYPE::GetDerivative(val_in_2); + const su2double hessian_AD_3 = SU2_TYPE::GetDerivative(val_in_3); + + /* Retrieve analytical Hessians */ + const su2double hessian_ref_1 = mlp.GetHessian(0, 0, 0); + const su2double hessian_ref_2 = mlp.GetHessian(0, 0, 1); + const su2double hessian_ref_3 = mlp.GetHessian(0, 0, 2); + + /* Unit tests on Hessians */ + CHECK(SU2_TYPE::GetValue(hessian_AD_1) == Approx(SU2_TYPE::GetValue(hessian_ref_1))); + CHECK(SU2_TYPE::GetValue(hessian_AD_2) == Approx(SU2_TYPE::GetValue(hessian_ref_2))); + CHECK(SU2_TYPE::GetValue(hessian_AD_3) == Approx(SU2_TYPE::GetValue(hessian_ref_3))); +} +#endif diff --git a/UnitTests/meson.build b/UnitTests/meson.build index 3e64cfb9aa3d..40b54cf69717 100644 --- a/UnitTests/meson.build +++ b/UnitTests/meson.build @@ -19,10 +19,9 @@ su2_cfd_tests = files(['Common/geometry/primal_grid/CPrimalGrid_tests.cpp', 'SU2_CFD/windowing.cpp']) # Reverse-mode (algorithmic differentiation) tests: -su2_cfd_tests_ad = files(['Common/simple_ad_test.cpp']) -if get_option('enable-mlpcpp') - su2_cfd_tests_ad = su2_cfd_tests_ad + files(['SU2_CFD/fluid/CFluidModel_tests_AD.cpp']) -endif +su2_cfd_tests_ad = files(['Common/simple_ad_test.cpp', + 'SU2_CFD/fluid/CFluidModel_tests_AD.cpp', + 'Common/toolboxes/multilayer_perceptron/MLP_Jacobian_tests.cpp']) # Forward-mode (direct differentiation) tests: su2_cfd_tests_dd = files(['Common/simple_directdiff_test.cpp']) diff --git a/meson_scripts/init.py b/meson_scripts/init.py index 74e42b601776..8f54fd3b9594 100755 --- a/meson_scripts/init.py +++ b/meson_scripts/init.py @@ -74,7 +74,7 @@ def init_submodules( github_repo_mel = "https://github.com/pcarruscag/MEL" sha_version_fado = "ce7ee018e4e699af5028d69baa1939fea290e18a" github_repo_fado = "https://github.com/pcarruscag/FADO" - sha_version_mlpcpp = "ff57e0cf9e60127196d3f1be71e711d47ff646ef" + sha_version_mlpcpp = "02f2cb9dde791074858e11ac091f7c4df9c6af65" github_repo_mlpcpp = "https://github.com/EvertBunschoten/MLPCpp" sha_version_eigen = "d71c30c47858effcbd39967097a2d99ee48db464" github_repo_eigen = "https://gitlab.com/libeigen/eigen.git" diff --git a/subprojects/MLPCpp b/subprojects/MLPCpp index e19ca0cafb28..02f2cb9dde79 160000 --- a/subprojects/MLPCpp +++ b/subprojects/MLPCpp @@ -1 +1 @@ -Subproject commit e19ca0cafb28c4b7ba5b8cffef42883259b00dc0 +Subproject commit 02f2cb9dde791074858e11ac091f7c4df9c6af65 From dcb421da65c7a2658e87120a390e9cb7d9fe9271 Mon Sep 17 00:00:00 2001 From: mima619 Date: Mon, 9 Mar 2026 11:21:40 +0100 Subject: [PATCH 113/229] Engine mass-flow rate coupling flag Added flag to allow mass-flow rate coupling between all exhaust boundaries towards the engine inlet. --- Common/include/CConfig.hpp | 7 +++++++ Common/src/CConfig.cpp | 2 ++ SU2_CFD/src/solvers/CEulerSolver.cpp | 11 +++++++++++ config_template.cfg | 3 +++ 4 files changed, 23 insertions(+) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 7c07dd8a0cc0..d5d118aa1de4 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -932,6 +932,7 @@ class CConfig { Pressure_Thermodynamic, /*!< \brief Thermodynamic pressure of the fluid. */ Temperature_FreeStream, /*!< \brief Total temperature of the fluid. */ Temperature_ve_FreeStream; /*!< \brief Total vibrational-electronic temperature of the fluid. */ + bool out2in_mdot_engine; /*!< \brief Flag to use engine outlet mass flow as engine inlet mass flow. */ unsigned short wallModel_MaxIter; /*!< \brief maximum number of iterations for the Newton method for the wall model */ su2double wallModel_Kappa, /*!< \brief von Karman constant kappa for turbulence wall modeling */ wallModel_B, /*!< \brief constant B for turbulence wall modeling */ @@ -2118,6 +2119,12 @@ class CConfig { */ su2double GetNuFactor_Engine(void) const { return NuFactor_Engine; } + /*! + * \brief Get the flag to use exhaust mass flow as inlet mass flow. + * \return TRUE if exhaust mass flow is used as inlet mass flow. + */ + bool GetExhaustToInlet_Engine(void) const { return out2in_mdot_engine; } + /*! * \brief Get the value of the non-dimensionalized actuator disk turbulence intensity. * \return Non-dimensionalized actuator disk intensity. diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 18884a52a35b..79fe6d6aab1e 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -1793,6 +1793,8 @@ void CConfig::SetConfig_Options() { addEnumOption("ENGINE_INFLOW_TYPE", Kind_Engine_Inflow, Engine_Inflow_Map, FAN_FACE_MACH); /* DESCRIPTION: Evaluate a problem with engines */ addBoolOption("ENGINE", Engine, false); + /* DESCRIPTION: Use exhaust mass flow as inlet mass flow. */ + addBoolOption("ENGINE_EXHAUST_TO_INLET", out2in_mdot_engine, false); /* DESCRIPTION: Sharpness coefficient for the buffet sensor */ addDoubleOption("BUFFET_K", Buffet_k, 10.0); diff --git a/SU2_CFD/src/solvers/CEulerSolver.cpp b/SU2_CFD/src/solvers/CEulerSolver.cpp index 6ac5b7a162c7..3f8d642e9c6e 100644 --- a/SU2_CFD/src/solvers/CEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CEulerSolver.cpp @@ -7622,6 +7622,17 @@ void CEulerSolver::BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_contai Target_Inflow_MassFlow = config->GetEngineInflow_Target(Marker_Tag) / (config->GetDensity_Ref() * config->GetVelocity_Ref()); + if (config->GetExhaustToInlet_Engine()) { + su2double Outlet_MF = 0.0; + unsigned short nMarker_Global = config->GetnMarker_CfgFile(); + for (unsigned short iMarker_Global = 0; iMarker_Global < nMarker_Global; iMarker_Global++) { + if (config->GetMarker_CfgFile_KindBC(config->GetMarker_CfgFile_TagBound(iMarker_Global)) == ENGINE_EXHAUST) { + Outlet_MF = Outlet_MF + config->GetExhaust_MassFlow(config->GetMarker_CfgFile_TagBound(iMarker_Global)); + } + } + Target_Inflow_MassFlow = Outlet_MF; + } + if (config->GetSystemMeasurements() == US) Target_Inflow_MassFlow /= 32.174; if (Engine_HalfModel) Target_Inflow_MassFlow /= 2.0; diff --git a/config_template.cfg b/config_template.cfg index aa22fc177719..0dd67764bdf1 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -1183,6 +1183,9 @@ MARKER_ENGINE_INFLOW= ( NONE ) % Format: (engine exhaust marker, total nozzle temp, total nozzle pressure, ... ) MARKER_ENGINE_EXHAUST= ( NONE ) % +% Flag to allow mass-flow rate coupling between all exhaust surfaces and the engine inlet (YES, NO) +ENGINE_EXHAUST_TO_INLET= NO +% % Displacement boundary marker(s) (NONE = no marker) % Format: ( displacement marker, displacement value normal to the surface, ... ) MARKER_NORMAL_DISPL= ( NONE ) From f34d00c6f3e570ad87f5f4b252ada7d0400c8189 Mon Sep 17 00:00:00 2001 From: mima619 Date: Wed, 11 Mar 2026 17:22:04 +0100 Subject: [PATCH 114/229] Added test-case --- .../turbofan_MFR_coupling/MFR_coupling.cfg | 685 ++++++++++++++++++ 1 file changed, 685 insertions(+) create mode 100644 TestCases/turbofan_MFR_coupling/MFR_coupling.cfg diff --git a/TestCases/turbofan_MFR_coupling/MFR_coupling.cfg b/TestCases/turbofan_MFR_coupling/MFR_coupling.cfg new file mode 100644 index 000000000000..06517496d82c --- /dev/null +++ b/TestCases/turbofan_MFR_coupling/MFR_coupling.cfg @@ -0,0 +1,685 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: _________________________________________________________ % +% Author: ___________________________________________________________________ % +% Institution: ______________________________________________________________ % +% Date: __________ % +% File Version 7.2.0 "Blackbird" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% +% +% Solver type (EULER, NAVIER_STOKES, RANS, +% INC_EULER, INC_NAVIER_STOKES, INC_RANS, +% NEMO_EULER, NEMO_NAVIER_STOKES, +% FEM_EULER, FEM_NAVIER_STOKES, FEM_RANS, FEM_LES, +% HEAT_EQUATION_FVM, ELASTICITY) +SOLVER= RANS +% +% Specify turbulence model (NONE, SA, SA_NEG, SST, SA_E, SA_COMP, SA_E_COMP, SST_SUST) +KIND_TURB_MODEL= SA +% +% Specify versions/corrections of the SST model (V2003m, V1994m, VORTICITY, KATO_LAUNDER, UQ, SUSTAINING) +SST_OPTIONS= V2003m +% +% Specify versions/corrections of the SA model (NEGATIVE, EDWARDS, WITHFT2, QCR2000, COMPRESSIBILITY, ROTATION, BCM, EXPERIMENTAL) +SA_OPTIONS= NEGATIVE, WITHFT2 +% +% Specify subgrid scale model(NONE, IMPLICIT_LES, SMAGORINSKY, WALE, VREMAN) +KIND_SGS_MODEL= NONE +% +% Specify the verification solution(NO_VERIFICATION_SOLUTION, INVISCID_VORTEX, +% RINGLEB, NS_UNIT_QUAD, TAYLOR_GREEN_VORTEX, +% MMS_NS_UNIT_QUAD, MMS_NS_UNIT_QUAD_WALL_BC, +% MMS_NS_TWO_HALF_CIRCLES, MMS_NS_TWO_HALF_SPHERES, +% MMS_INC_EULER, MMS_INC_NS, INC_TAYLOR_GREEN_VORTEX, +% USER_DEFINED_SOLUTION) +KIND_VERIFICATION_SOLUTION= NO_VERIFICATION_SOLUTION +% +% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT, DISCRETE_ADJOINT) +MATH_PROBLEM= DIRECT +% +% Axisymmetric simulation, only compressible flows (NO, YES) +AXISYMMETRIC= NO +% +% Restart solution (NO, YES) +RESTART_SOL= NO +% +% Discard the data storaged in the solution and geometry files +% e.g. AOA, dCL/dAoA, dCD/dCL, iter, etc. +% Note that AoA in the solution and geometry files is critical +% to aero design using AoA as a variable. (NO, YES) +DISCARD_INFILES= YES +% +% System of measurements (SI, US) +% International system of units (SI): ( meters, kilograms, Kelvins, +% Newtons = kg m/s^2, Pascals = N/m^2, +% Density = kg/m^3, Speed = m/s, +% Equiv. Area = m^2 ) +% United States customary units (US): ( inches, slug, Rankines, lbf = slug ft/s^2, +% psf = lbf/ft^2, Density = slug/ft^3, +% Speed = ft/s, Equiv. Area = ft^2 ) +SYSTEM_MEASUREMENTS= SI +% +% +% ------------------------------- SOLVER CONTROL ------------------------------% +% +% Maximum number of inner iterations +INNER_ITER= 1000000 +% +% Maximum number of outer iterations (only for multizone problems) +OUTER_ITER= 1 +% +% Maximum number of time iterations +TIME_ITER= 1 +% +% Convergence field +CONV_FIELD= RMS_DENSITY +% +% Min value of the residual (log10 of the residual) +CONV_RESIDUAL_MINVAL= -15 +% +% Start convergence criteria at iteration number +CONV_STARTITER= 10 +% +% Number of elements to apply the criteria +CONV_CAUCHY_ELEMS= 100 +% +% Epsilon to control the series convergence +CONV_CAUCHY_EPS= 1E-10 +% +% Iteration number to begin unsteady restarts +RESTART_ITER= 208 +% +%% Time convergence monitoring +WINDOW_CAUCHY_CRIT = NO +% +% List of time convergence fields +CONV_WINDOW_FIELD = (TAVG_DRAG, TAVG_LIFT) +% +% Time Convergence Monitoring starts at Iteration WINDOW_START_ITER + CONV_WINDOW_STARTITER +CONV_WINDOW_STARTITER = 0 +% +% Epsilon to control the series convergence +CONV_WINDOW_CAUCHY_EPS = 1E-3 +% +% Number of elements to apply the criteria +CONV_WINDOW_CAUCHY_ELEMS = 10 +% +% -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------% +% +% Mach number (non-dimensional, based on the free-stream values) +MACH_NUMBER= 0.16719966920674 +% +% Angle of attack (degrees, only for compressible flows) +AOA= 0.0 +% +% Side-slip angle (degrees, only for compressible flows) +SIDESLIP_ANGLE= 0.0 +% +% Init option to choose between Reynolds (default) or thermodynamics quantities +% for initializing the solution (REYNOLDS, TD_CONDITIONS) +INIT_OPTION= TD_CONDITIONS +% +% Free-stream option to choose between density and temperature (default) for +% initializing the solution (TEMPERATURE_FS, DENSITY_FS) +FREESTREAM_OPTION= DENSITY_FS +% +% Free-stream pressure (101325.0 N/m^2, 2116.216 psf by default) +FREESTREAM_PRESSURE= 101325.0 +% +% Free-stream temperature (288.15 K, 518.67 R by default) +FREESTREAM_TEMPERATURE= 288.15 +% +% Free-stream VIBRATIONAL temperature (288.15 K, 518.67 R by default) +FREESTREAM_TEMPERATURE_VE= 288.15 +% +% Reynolds number (non-dimensional, based on the free-stream values) +REYNOLDS_NUMBER= 3.8951057985067e+6 +% +% Reynolds length (1 m, 1 inch by default) +REYNOLDS_LENGTH= 1.0 +% +% Free-stream density (1.2886 Kg/m^3, 0.0025 slug/ft^3 by default) +FREESTREAM_DENSITY= 1.225 +% +% Free-stream velocity (1.0 m/s, 1.0 ft/s by default) +FREESTREAM_VELOCITY= ( 56.897550640000, 0.0, 0.0 ) +% +% Free-stream viscosity (1.853E-5 N s/m^2, 3.87E-7 lbf s/ft^2 by default) +FREESTREAM_VISCOSITY= 1.78938027807758E-05 +% +% Compressible flow non-dimensionalization (DIMENSIONAL, FREESTREAM_PRESS_EQ_ONE, +% FREESTREAM_VEL_EQ_MACH, FREESTREAM_VEL_EQ_ONE) +REF_DIMENSIONALIZATION= DIMENSIONAL +% +% Free-stream Turbulence Intensity +FREESTREAM_TURBULENCEINTENSITY = 0.001 +% +% Free-stream Turbulent to Laminar viscosity ratio +FREESTREAM_TURB2LAMVISCRATIO = 10 +% +FREESTREAM_NU_FACTOR= 3.0 +% +% ----------------------------- CL DRIVER DEFINITION ---------------------------% +% +% Activate fixed lift mode (specify a CL instead of AoA, NO/YES) +FIXED_CL_MODE= NO +% +% Target coefficient of lift for fixed lift mode (0.80 by default) +TARGET_CL= 0.58 +% +% Estimation of dCL/dAlpha (0.2 per degree by default) +DCL_DALPHA= 0.11 +% +% Maximum number of iterations between AoA updates +UPDATE_AOA_ITER_LIMIT= 2500 +% +% Number of iterations to evaluate dCL_dAlpha by using finite differences (500 by default) +ITER_DCL_DALPHA= 500 + +% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% +% +% Reference origin for moment computation (m or in) +REF_ORIGIN_MOMENT_X = 0.00 +REF_ORIGIN_MOMENT_Y = 0.00 +REF_ORIGIN_MOMENT_Z = 0.00 +% +% Reference length for moment non-dimensional coefficients (m or in) +REF_LENGTH= 1.0 +% +% Reference area for non-dimensional force coefficients (0 implies automatic +% calculation) (m^2 or in^2) +REF_AREA= 1.0 +% +% Aircraft semi-span (0 implies automatic calculation) (m or in) +SEMI_SPAN= 1.0 + +% ---- NONEQUILIBRIUM GAS, IDEAL GAS, POLYTROPIC, VAN DER WAALS AND PENG ROBINSON CONSTANTS -------% +% +% Fluid model (STANDARD_AIR, IDEAL_GAS, VW_GAS, PR_GAS, +% CONSTANT_DENSITY, INC_IDEAL_GAS, INC_IDEAL_GAS_POLY, MUTATIONPP, USER_DEFINED_NONEQ) +FLUID_MODEL= STANDARD_AIR +% +% Ratio of specific heats (1.4 default and the value is hardcoded +% for the model STANDARD_AIR, compressible only) +GAMMA_VALUE= 1.4 +% +% Specific gas constant (287.058 J/kg*K default and this value is hardcoded +% for the model STANDARD_AIR, compressible only) +GAS_CONSTANT= 287.058 +% +% Critical Temperature (131.00 K by default) +CRITICAL_TEMPERATURE= 131.00 +% +% Critical Pressure (3588550.0 N/m^2 by default) +CRITICAL_PRESSURE= 3588550.0 +% +% Acentri factor (0.035 (air)) +ACENTRIC_FACTOR= 0.035 +% +% Specific heat at constant pressure, Cp (1004.703 J/kg*K (air)). +% Incompressible fluids with energy eqn. only (CONSTANT_DENSITY, INC_IDEAL_GAS). +SPECIFIC_HEAT_CP= 1004.703 +% +% Thermal expansion coefficient (0.00347 K^-1 (air)) +% Used with Boussinesq approx. (incompressible, BOUSSINESQ density model only) +THERMAL_EXPANSION_COEFF= 0.00347 +% +% Molecular weight for an incompressible ideal gas (28.96 g/mol (air) default) +MOLECULAR_WEIGHT= 28.96 +% +% Temperature polynomial coefficients (up to quartic) for specific heat Cp. +% Format -> Cp(T) : b0 + b1*T + b2*T^2 + b3*T^3 + b4*T^4 +CP_POLYCOEFFS= (0.0, 0.0, 0.0, 0.0, 0.0) + +% --------------------------- VISCOSITY MODEL ---------------------------------% +% +% Viscosity model (SUTHERLAND, CONSTANT_VISCOSITY, POLYNOMIAL_VISCOSITY). +VISCOSITY_MODEL= SUTHERLAND +% +% Molecular Viscosity that would be constant (1.716E-5 by default) +MU_CONSTANT= 1.716E-5 +% +% Sutherland Viscosity Ref (1.716E-5 default value for AIR SI) +MU_REF= 1.716E-5 +% +% Sutherland Temperature Ref (273.15 K default value for AIR SI) +MU_T_REF= 273.15 +% +% Sutherland constant (110.4 default value for AIR SI) +SUTHERLAND_CONSTANT= 110.4 +% +% Temperature polynomial coefficients (up to quartic) for viscosity. +% Format -> Mu(T) : b0 + b1*T + b2*T^2 + b3*T^3 + b4*T^4 +MU_POLYCOEFFS= (0.0, 0.0, 0.0, 0.0, 0.0) + +% --------------------------- THERMAL CONDUCTIVITY MODEL ----------------------% +% +% Laminar Conductivity model (CONSTANT_CONDUCTIVITY, CONSTANT_PRANDTL, +% POLYNOMIAL_CONDUCTIVITY). +CONDUCTIVITY_MODEL= CONSTANT_PRANDTL +% +% Molecular Thermal Conductivity that would be constant (0.0257 by default) +THERMAL_CONDUCTIVITY_CONSTANT= 0.0257 +% +% Laminar Prandtl number (0.72 (air), only for CONSTANT_PRANDTL) +PRANDTL_LAM= 0.72 +% +% Temperature polynomial coefficients (up to quartic) for conductivity. +% Format -> Kt(T) : b0 + b1*T + b2*T^2 + b3*T^3 + b4*T^4 +KT_POLYCOEFFS= (0.0, 0.0, 0.0, 0.0, 0.0) +% +% Definition of the turbulent thermal conductivity model for RANS +% (CONSTANT_PRANDTL_TURB by default, NONE). +TURBULENT_CONDUCTIVITY_MODEL= CONSTANT_PRANDTL_TURB +% +% Turbulent Prandtl number (0.9 (air) by default) +PRANDTL_TURB= 0.90 +% ----------------------- DYNAMIC MESH DEFINITION -----------------------------% +% +% Type of dynamic mesh (NONE, RIGID_MOTION, ROTATING_FRAME, +% STEADY_TRANSLATION, GUST) +% ROTATING_FRAME: This option considers both parameters ROTATION_RATE and +% TRANSLATION_RATE, which allows to simulate a free-flying aircraft (in a flight +% mechanical sense) which moves and rotates in all six degrees of freedom about +% the center of gravity. In this context, the farfield MACH number is set to +% zero and MACH_MOTION is used instead to compute force coefficients. +% STEADY_TRANSLATION: This option considers only the parameter TRANSLATION_RATE. +% +GRID_MOVEMENT= NONE +% +% Motion mach number (non-dimensional). Used for initializing a viscous flow +% with the Reynolds number and for computing force coeffs. with dynamic meshes. +MACH_MOTION= 0.16719966920674 +% +% Coordinates of the motion origin +MOTION_ORIGIN= 0.0 0.0 0.0 +% +% Angular velocity vector (rad/s) about the motion origin +ROTATION_RATE = 0.0 0.0 0.0 +% +% Pitching angular freq. (rad/s) about the motion origin +PITCHING_OMEGA= 0.0 0.0 0.0 +% +% Pitching amplitude (degrees) about the motion origin +PITCHING_AMPL= 0.0 0.0 0.0 +% +% Pitching phase offset (degrees) about the motion origin +PITCHING_PHASE= 0.0 0.0 0.0 +% +% Translational velocity (m/s or ft/s) in the x, y, & z directions +TRANSLATION_RATE = 0.0 0.0 0.0 +% +% Plunging angular freq. (rad/s) in x, y, & z directions +PLUNGING_OMEGA= 0.0 0.0 0.0 +% +% Plunging amplitude (m or ft) in x, y, & z directions +PLUNGING_AMPL= 0.0 0.1 0.0 +% +% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% +% +% Navier-Stokes (no-slip), constant heat flux wall marker(s) (NONE = no marker) +% Format: ( marker name, constant heat flux (J/m^2), ... ) +MARKER_HEATFLUX= ( INTAKE, 0.0, NOZZLE_TE, 0.0, PLUG_TE, 0.0, PLUG, 0.0, NACELLE_TE, 0.0, SPINNER, 0.0, LIP, 0.0, NOZZLE_INNER, 0.0, NOZZLE, 0.0, NACELLE_INNER, 0.0, COWL, 0.0 ) +% +% Far-field boundary marker(s) (NONE = no marker) +MARKER_FAR= ( FF ) +% +% Outlet boundary marker(s) (NONE = no marker) +% Compressible: ( outlet marker, back pressure (static thermodynamic), ... ) +% Inc. Pressure: ( outlet marker, back pressure (static gauge in Pa), ... ) +% Inc. Mass Flow: ( outlet marker, mass flow target (kg/s), ... ) +%MARKER_OUTLET= ( OUT, 101325.0 ) +% +% Symmetry boundary marker(s) (NONE = no marker) +%MARKER_SYM= ( SYM ) +% +% Engine Inflow boundary type (FAN_FACE_MACH, FAN_FACE_PRESSURE, FAN_FACE_MDOT) +ENGINE_INFLOW_TYPE= FAN_FACE_MDOT +ENGINE_EXHAUST_TO_INLET= YES +% +% Damping factor for the engine inflow. +DAMP_ENGINE_INFLOW= 0.01 +% +% Engine inflow boundary marker(s) (NONE = no marker) +% Format: (engine inflow marker, fan face Mach, ... ) +MARKER_ENGINE_INFLOW= ( FAN_IN, 140.0 ) +% +% Engine exhaust boundary marker(s) with the following formats (NONE = no marker) +% Format: (engine exhaust marker, total nozzle temp, total nozzle pressure, ... ) +MARKER_ENGINE_EXHAUST= ( FAN_OUT, 289.761088684333, 103321.726628227, CORE_OUT, 289.761088684333, 103321.726628227 ) +% +% Engine nu factor (SA model). +ENGINE_NU_FACTOR= 3.0 +% +% ------------------------ SURFACES IDENTIFICATION ----------------------------% +% +% Marker(s) of the surface in the surface flow solution file +MARKER_PLOTTING = ( NOZZLE_TE, PLUG_TE, PLUG, NACELLE_TE, SPINNER, LIP, INTAKE, NOZZLE_INNER, NOZZLE, NACELLE_INNER, COWL, FAN_IN, FAN_OUT, CORE_OUT ) +% +% Marker(s) of the surface where the non-dimensional coefficients are evaluated. +MARKER_MONITORING = ( NACELLE_TE, LIP, COWL ) +% +% Marker(s) of the surface that is going to be analyzed in detail (massflow, average pressure, distortion, etc) +MARKER_ANALYZE = ( FAN_IN, FAN_OUT, CORE_OUT ) +% +% Method to compute the average value in MARKER_ANALYZE (AREA, MASSFLUX). +MARKER_ANALYZE_AVERAGE = MASSFLUX +% +% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% +% +% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES) +NUM_METHOD_GRAD= GREEN_GAUSS + +% Numerical method for spatial gradients to be used for MUSCL reconstruction +% Options are (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES, LEAST_SQUARES). Default value is +% NONE and the method specified in NUM_METHOD_GRAD is used. +NUM_METHOD_GRAD_RECON = GREEN_GAUSS +% +% CFL number (initial value for the adaptive CFL number) +CFL_NUMBER= 1.0 +% +% Adaptive CFL number (NO, YES) +CFL_ADAPT= NO +% +% Parameters of the adaptive CFL number (factor down, factor up, CFL min value, +% CFL max value ) +CFL_ADAPT_PARAM= ( 0.1, 2.0, 0.1, 1.0 ) +% +% Maximum Delta Time in local time stepping simulations +MAX_DELTA_TIME= 1E6 +% +% Runge-Kutta alpha coefficients +RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) +% +% Objective function in gradient evaluation (DRAG, LIFT, SIDEFORCE, MOMENT_X, +% MOMENT_Y, MOMENT_Z, EFFICIENCY, BUFFET, +% EQUIVALENT_AREA, NEARFIELD_PRESSURE, +% FORCE_X, FORCE_Y, FORCE_Z, THRUST, +% TORQUE, TOTAL_HEATFLUX, +% MAXIMUM_HEATFLUX, INVERSE_DESIGN_PRESSURE, +% INVERSE_DESIGN_HEATFLUX, SURFACE_TOTAL_PRESSURE, +% SURFACE_MASSFLOW, SURFACE_STATIC_PRESSURE, SURFACE_MACH) +% For a weighted sum of objectives: separate by commas, add OBJECTIVE_WEIGHT and MARKER_MONITORING in matching order. +OBJECTIVE_FUNCTION= DRAG +% +% List of weighting values when using more than one OBJECTIVE_FUNCTION. Separate by commas and match with MARKER_MONITORING. +OBJECTIVE_WEIGHT = 1.0 + +% ----------- SLOPE LIMITER AND DISSIPATION SENSOR DEFINITION -----------------% +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_FLOW= NO +% +% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG, +% BARTH_JESPERSEN, VAN_ALBADA_EDGE) +SLOPE_LIMITER_FLOW= VENKATAKRISHNAN +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_TURB= YES +% +% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG, +% BARTH_JESPERSEN, VAN_ALBADA_EDGE) +SLOPE_LIMITER_TURB= VENKATAKRISHNAN +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the adjoint flow equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_ADJFLOW= YES +% +% Slope limiter (NONE, VENKATAKRISHNAN, BARTH_JESPERSEN, VAN_ALBADA_EDGE, +% SHARP_EDGES, WALL_DISTANCE) +SLOPE_LIMITER_ADJFLOW= VENKATAKRISHNAN +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence adjoint equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_ADJTURB= NO +% +% Slope limiter (NONE, VENKATAKRISHNAN, BARTH_JESPERSEN, VAN_ALBADA_EDGE) +SLOPE_LIMITER_ADJTURB= VENKATAKRISHNAN +% +% Coefficient for the Venkat's limiter (upwind scheme). A larger values decrease +% the extent of limiting, values approaching zero cause +% lower-order approximation to the solution (0.05 by default) +VENKAT_LIMITER_COEFF= 0.05 +% +% Reference coefficient for detecting sharp edges (3.0 by default). +REF_SHARP_EDGES = 3.0 +% +% Coefficient for the adjoint sharp edges limiter (3.0 by default). +ADJ_SHARP_LIMITER_COEFF= 3.0 +% +% Remove sharp edges from the sensitivity evaluation (NO, YES) +SENS_REMOVE_SHARP = NO +% +% Freeze the value of the limiter after a number of iterations +LIMITER_ITER= 999999 +% +% 1st order artificial dissipation coefficients for +% the Lax–Friedrichs method ( 0.15 by default ) +LAX_SENSOR_COEFF= 0.15 +% +% 2nd and 4th order artificial dissipation coefficients for +% the JST method ( 0.5, 0.02 by default ) +JST_SENSOR_COEFF= ( 0.5, 0.02 ) +% +% 1st order artificial dissipation coefficients for +% the adjoint Lax–Friedrichs method ( 0.15 by default ) +ADJ_LAX_SENSOR_COEFF= 0.15 +% +% 2nd, and 4th order artificial dissipation coefficients for +% the adjoint JST method ( 0.5, 0.02 by default ) +ADJ_JST_SENSOR_COEFF= ( 0.5, 0.02 ) + +% ------------------------ LINEAR SOLVER DEFINITION ---------------------------% +% +% Linear solver or smoother for implicit formulations: +% BCGSTAB, FGMRES, RESTARTED_FGMRES, CONJUGATE_GRADIENT (self-adjoint problems only), SMOOTHER. +LINEAR_SOLVER= FGMRES +% +% Same for discrete adjoint (smoothers not supported) +DISCADJ_LIN_SOLVER= FGMRES +% +% Preconditioner of the Krylov linear solver or type of smoother (ILU, LU_SGS, LINELET, JACOBI) +LINEAR_SOLVER_PREC= ILU +% +% Same for discrete adjoint (JACOBI or ILU) +DISCADJ_LIN_PREC= ILU +% +% Linael solver ILU preconditioner fill-in level (0 by default) +LINEAR_SOLVER_ILU_FILL_IN= 0 +% +% Minimum error of the linear solver for implicit formulations +LINEAR_SOLVER_ERROR= 1E-6 +% +% Max number of iterations of the linear solver for the implicit formulation +LINEAR_SOLVER_ITER= 5 +% +% Restart frequency for RESTARTED_FGMRES +LINEAR_SOLVER_RESTART_FREQUENCY= 10 +% +% Relaxation factor for smoother-type solvers (LINEAR_SOLVER= SMOOTHER) +LINEAR_SOLVER_SMOOTHER_RELAXATION= 1.0 + +% -------------------------- MULTIGRID PARAMETERS -----------------------------% +% +% Multi-grid levels (0 = no multi-grid) +MGLEVEL= 0 +% +% Multi-grid cycle (V_CYCLE, W_CYCLE, FULLMG_CYCLE) +MGCYCLE= V_CYCLE +% +% Multi-grid pre-smoothing level +MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) +% +% Multi-grid post-smoothing level +MG_POST_SMOOTH= ( 0, 0, 0, 0 ) +% +% Jacobi implicit smoothing of the correction +MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +% +% Damping factor for the residual restriction +MG_DAMP_RESTRICTION= 0.75 +% +% Damping factor for the correction prolongation +MG_DAMP_PROLONGATION= 0.75 + +% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% +% +% Convective numerical method (JST, JST_KE, JST_MAT, LAX-FRIEDRICH, CUSP, ROE, AUSM, +% AUSMPLUSUP, AUSMPLUSUP2, AUSMPWPLUS, HLLC, TURKEL_PREC, +% SW, MSW, FDS, SLAU, SLAU2, L2ROE, LMROE) +CONV_NUM_METHOD_FLOW= JST +% +% Roe Low Dissipation function for Hybrid RANS/LES simulations (FD, NTS, NTS_DUCROS) +ROE_LOW_DISSIPATION= NONE +% +% Post-reconstruction correction for low Mach number flows (NO, YES) +LOW_MACH_CORR= NO +% +% Roe-Turkel preconditioning for low Mach number flows (NO, YES) +LOW_MACH_PREC= YES +% +% Use numerically computed Jacobians for AUSM+up(2) and SLAU(2) +% Slower per iteration but potentialy more stable and capable of higher CFL +USE_ACCURATE_FLUX_JACOBIANS= NO +% +% Use the vectorized version of the selected numerical method (available for JST family and Roe). +% SU2 should be compiled for an AVX or AVX512 architecture for best performance. +USE_VECTORIZATION= NO +% +% Entropy fix coefficient (0.0 implies no entropy fixing, 1.0 implies scalar +% artificial dissipation) +ENTROPY_FIX_COEFF= 0.001 +% +% Higher values than 1 (3 to 4) make the global Jacobian of central schemes (compressible flow +% only) more diagonal dominant (but mathematically incorrect) so that higher CFL can be used. +CENTRAL_JACOBIAN_FIX_FACTOR= 4.0 +% +% Time discretization (RUNGE-KUTTA_EXPLICIT, EULER_IMPLICIT, EULER_EXPLICIT) +TIME_DISCRE_FLOW= EULER_IMPLICIT +% +% -------------------- TURBULENT NUMERICAL METHOD DEFINITION ------------------% +% +% Convective numerical method (SCALAR_UPWIND) +CONV_NUM_METHOD_TURB= SCALAR_UPWIND +% +% Time discretization (EULER_IMPLICIT) +TIME_DISCRE_TURB= EULER_IMPLICIT +% +% Reduction factor of the CFL coefficient in the turbulence problem +CFL_REDUCTION_TURB= 1.0 + +% --------------------- HEAT NUMERICAL METHOD DEFINITION ----------------------% +% +% Value of the thermal diffusivity +%THERMAL_DIFFUSIVITY= 1.0 + +% ------------------------- SCREEN/HISTORY VOLUME OUTPUT --------------------------% +% +% Screen output fields (use 'SU2_CFD -d ' to view list of available fields) +SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, LIFT, DRAG) +% +% History output groups (use 'SU2_CFD -d ' to view list of available fields) +HISTORY_OUTPUT= (ITER, AERO_COEFF, RMS_RES, AOA, NONPHYSICAL_POINTS, SURFACE_MASSFLOW, SURFACE_STATIC_PRESSURE) +% +% Volume output fields/groups (use 'SU2_CFD -d ' to view list of available fields) +VOLUME_OUTPUT= (COORDINATES, SOLUTION, PRIMITIVE) +% +% Writing frequency for screen output +SCREEN_WRT_FREQ_INNER= 1 +% +SCREEN_WRT_FREQ_OUTER= 1 +% +SCREEN_WRT_FREQ_TIME= 1 +% +% Writing frequency for history output +HISTORY_WRT_FREQ_INNER= 1 +% +HISTORY_WRT_FREQ_OUTER= 1 +% +HISTORY_WRT_FREQ_TIME= 1 +% +% list of writing frequencies corresponding to the list in OUTPUT_FILES +OUTPUT_WRT_FREQ= 1000 +% +% Output the performance summary to the console at the end of SU2_CFD +WRT_PERFORMANCE= NO +% +% Overwrite or append iteration number to the restart files when saving +WRT_RESTART_OVERWRITE= YES +% +% Overwrite or append iteration number to the surface files when saving +WRT_SURFACE_OVERWRITE= YES +% +% Overwrite or append iteration number to the volume files when saving +WRT_VOLUME_OVERWRITE= YES +% +WRT_FORCES_BREAKDOWN= YES +% +% ------------------------- INPUT/OUTPUT FILE INFORMATION --------------------------% +% +% Mesh input file +MESH_FILENAME= engine-alone.cgns +% +% Mesh input file format (SU2, CGNS) +MESH_FORMAT= CGNS +% +% Mesh output file +MESH_OUT_FILENAME= mesh_out.su2 +% +% Restart flow input file +SOLUTION_FILENAME= solution_flow.dat +% +% Restart adjoint input file +SOLUTION_ADJ_FILENAME= solution_adj.dat +% +% Output tabular file format (TECPLOT, CSV) +TABULAR_FORMAT= TECPLOT +% +% Files to output +% Possible formats : (TECPLOT_ASCII, TECPLOT, SURFACE_TECPLOT_ASCII, +% SURFACE_TECPLOT, CSV, SURFACE_CSV, PARAVIEW_ASCII, PARAVIEW_LEGACY, SURFACE_PARAVIEW_ASCII, +% SURFACE_PARAVIEW_LEGACY, PARAVIEW, SURFACE_PARAVIEW, RESTART_ASCII, RESTART, CGNS, SURFACE_CGNS, STL_ASCII, STL_BINARY) +% default : (RESTART, PARAVIEW, SURFACE_PARAVIEW) +OUTPUT_FILES= (RESTART, TECPLOT, SURFACE_TECPLOT) +% +% Output file convergence history (w/o extension) +CONV_FILENAME= history +% +% Output file with the forces breakdown +BREAKDOWN_FILENAME= forces_breakdown.dat +% +% Output file restart flow +RESTART_FILENAME= restart_flow.dat +% +% Output file restart adjoint +RESTART_ADJ_FILENAME= restart_adj.dat +% +% Output file flow (w/o extension) variables +VOLUME_FILENAME= flow +% +% Output file adjoint (w/o extension) variables +VOLUME_ADJ_FILENAME= adjoint +% +% Output Objective function +VALUE_OBJFUNC_FILENAME= of_eval.dat +% +% Output objective function gradient (using continuous adjoint) +GRAD_OBJFUNC_FILENAME= of_grad.dat +% +% Output file surface flow coefficient (w/o extension) +SURFACE_FILENAME= surface_flow +% +% Output file surface adjoint coefficient (w/o extension) +SURFACE_ADJ_FILENAME= surface_adjoint +% +% Read binary restart files (YES, NO) +READ_BINARY_RESTART= YES +% +% Reorient elements based on potential negative volumes (YES/NO) +REORIENT_ELEMENTS= YES From b83bde8ffc43bc3fa473a7ac1ab0f75bbd9f18b6 Mon Sep 17 00:00:00 2001 From: Sahil_Kumar Date: Wed, 11 Mar 2026 21:39:15 +0000 Subject: [PATCH 115/229] Fix unsteady testcase configs and add regression tests - Add TIME_DOMAIN=YES and TIME_ITER=100 to three unsteady configs that were silent running as single steady iterations - Fix SOLVER=RANS in turb_NACA64A010.cfg - Remove deprecated EXT_ITER from all three configs - Add SCREEN_OUTPUT to all three configs for regression output - Register pitching_naca64a010_rans, pitching_naca64a010_euler, and plunging_naca0012 in serial_regression.py Fixes #2524 --- TestCases/serial_regression.py | 24 +++++++++++++++++++ .../pitching_NACA64A010.cfg | 4 +++- .../turb_NACA64A010.cfg | 6 +++-- .../plunging_naca0012/plunging_NACA0012.cfg | 4 +++- 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 55fdf623942e..8828ba5cf495 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -819,6 +819,30 @@ def main(): unst_inc_turb_naca0015_sa.test_vals = [-3.007635, -6.879816, 1.445300, 0.419281] unst_inc_turb_naca0015_sa.unsteady = True test_list.append(unst_inc_turb_naca0015_sa) + # unsteady pitching NACA64A010, RANS, SA + unst_pitching_naca64a010_rans = TestCase('unst_pitching_naca64a010_rans') + 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 = 1 + unst_pitching_naca64a010_rans.test_vals = [-3.904127, -6.717585, 0.030913, 0.054788] + unst_pitching_naca64a010_rans.unsteady = True + test_list.append(unst_pitching_naca64a010_rans) + # unsteady pitching NACA64A010, Euler + unst_pitching_naca64a010_euler = TestCase('unst_pitching_naca64a010_euler') + 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 = 1 + unst_pitching_naca64a010_euler.test_vals = [-5.383725, -0.104475, 0.032842, 0.031044] + unst_pitching_naca64a010_euler.unsteady = True + test_list.append(unst_pitching_naca64a010_euler) + # unsteady plunging NACA0012, Laminar NS + unst_plunging_naca0012 = TestCase('unst_plunging_naca0012') + unst_plunging_naca0012.cfg_dir = "unsteady/plunging_naca0012" + unst_plunging_naca0012.cfg_file = "plunging_NACA0012.cfg" + unst_plunging_naca0012.test_iter = 1 + unst_plunging_naca0012.test_vals = [-5.248321, 0.372499, 2.100860, 6.212394] + unst_plunging_naca0012.unsteady = True + test_list.append(unst_plunging_naca0012) # unsteady pitching NACA0012, Euler, Deforming unst_deforming_naca0012 = TestCase('unst_deforming_naca0012') diff --git a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg index 3db0541e9a88..2dbcc82a85dd 100644 --- a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg +++ b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg @@ -26,6 +26,8 @@ TIME_STEP= 0.0023555025613149587 MAX_TIME= 0.59 % 10 periods: 0.5888756403287397 % +TIME_DOMAIN= YES +TIME_ITER= 100 INNER_ITER= 110 UNST_ADJOINT_ITER= 251 @@ -71,7 +73,6 @@ CFL_NUMBER= 10.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) -EXT_ITER= 99999 % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% % @@ -142,6 +143,7 @@ VOLUME_ADJ_FILENAME= adjoint GRAD_OBJFUNC_FILENAME= of_grad SURFACE_FILENAME= surface_flow SURFACE_ADJ_FILENAME= surface_adjoint +SCREEN_OUTPUT= (TIME_ITER, INNER_ITER, RMS_DENSITY, RMS_ENERGY, LIFT, DRAG) OUTPUT_WRT_FREQ= 250 % --------------------- OPTIMAL SHAPE DESIGN DEFINITION -----------------------% diff --git a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg index ae230679efdd..9bd3a5d02297 100644 --- a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg +++ b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg @@ -11,7 +11,7 @@ % ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% % -SOLVER= NAVIER_STOKES +SOLVER= RANS KIND_TURB_MODEL= SA MATH_PROBLEM= DIRECT RESTART_SOL= NO @@ -27,6 +27,8 @@ TIME_STEP= 0.0023555025613149587 MAX_TIME= 0.59 % 10 periods: 0.5888756403287397 % +TIME_DOMAIN= YES +TIME_ITER= 100 INNER_ITER= 2000 UNST_ADJOINT_ITER= 251 GRID_MOVEMENT= RIGID_MOTION @@ -69,7 +71,6 @@ CFL_NUMBER= 4.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) -EXT_ITER= 99999 % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% % @@ -150,6 +151,7 @@ VOLUME_ADJ_FILENAME= adjoint GRAD_OBJFUNC_FILENAME= of_grad SURFACE_FILENAME= surface_flow SURFACE_ADJ_FILENAME= surface_adjoint +SCREEN_OUTPUT= (TIME_ITER, INNER_ITER, RMS_DENSITY, RMS_NU_TILDE, LIFT, DRAG) OUTPUT_WRT_FREQ= 1 % --------------------- OPTIMAL SHAPE DESIGN DEFINITION -----------------------% diff --git a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg index 6e4bc39ea5dd..d1d60b9e0e25 100644 --- a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg +++ b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg @@ -20,6 +20,8 @@ RESTART_SOL= NO % TIME_MARCHING= DUAL_TIME_STEPPING-2ND_ORDER TIME_STEP= 0.0023555025613149587 +TIME_DOMAIN= YES +TIME_ITER= 100 % 24 steps per period: 0.0024536485013697488 % 25 steps per period: 0.0023555025613149587 % @@ -62,7 +64,6 @@ CFL_NUMBER= 1.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) -EXT_ITER= 99999 % ----------------------- SLOPE LIMITER DEFINITION ----------------------------% % @@ -118,4 +119,5 @@ VOLUME_ADJ_FILENAME= adjoint GRAD_OBJFUNC_FILENAME= of_grad SURFACE_FILENAME= surface_flow SURFACE_ADJ_FILENAME= surface_adjoint +SCREEN_OUTPUT= (TIME_ITER, INNER_ITER, RMS_DENSITY, RMS_ENERGY, LIFT, DRAG) OUTPUT_WRT_FREQ= 1 From ed28e64f37d3b84cf72ec53a5ede3af0317cfddf Mon Sep 17 00:00:00 2001 From: mima619 Date: Thu, 12 Mar 2026 15:48:28 +0100 Subject: [PATCH 116/229] Modified test-case cfg file for Euler simulation --- TestCases/turbofan_MFR_coupling/MFR_coupling.cfg | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/TestCases/turbofan_MFR_coupling/MFR_coupling.cfg b/TestCases/turbofan_MFR_coupling/MFR_coupling.cfg index 06517496d82c..c8bf739b3f8f 100644 --- a/TestCases/turbofan_MFR_coupling/MFR_coupling.cfg +++ b/TestCases/turbofan_MFR_coupling/MFR_coupling.cfg @@ -16,10 +16,10 @@ % NEMO_EULER, NEMO_NAVIER_STOKES, % FEM_EULER, FEM_NAVIER_STOKES, FEM_RANS, FEM_LES, % HEAT_EQUATION_FVM, ELASTICITY) -SOLVER= RANS +SOLVER= EULER % % Specify turbulence model (NONE, SA, SA_NEG, SST, SA_E, SA_COMP, SA_E_COMP, SST_SUST) -KIND_TURB_MODEL= SA +KIND_TURB_MODEL= NONE % % Specify versions/corrections of the SST model (V2003m, V1994m, VORTICITY, KATO_LAUNDER, UQ, SUSTAINING) SST_OPTIONS= V2003m @@ -67,7 +67,7 @@ SYSTEM_MEASUREMENTS= SI % ------------------------------- SOLVER CONTROL ------------------------------% % % Maximum number of inner iterations -INNER_ITER= 1000000 +INNER_ITER= 10000 % % Maximum number of outer iterations (only for multizone problems) OUTER_ITER= 1 @@ -323,7 +323,8 @@ PLUNGING_AMPL= 0.0 0.1 0.0 % % Navier-Stokes (no-slip), constant heat flux wall marker(s) (NONE = no marker) % Format: ( marker name, constant heat flux (J/m^2), ... ) -MARKER_HEATFLUX= ( INTAKE, 0.0, NOZZLE_TE, 0.0, PLUG_TE, 0.0, PLUG, 0.0, NACELLE_TE, 0.0, SPINNER, 0.0, LIP, 0.0, NOZZLE_INNER, 0.0, NOZZLE, 0.0, NACELLE_INNER, 0.0, COWL, 0.0 ) +%MARKER_HEATFLUX= ( INTAKE, 0.0, NOZZLE_TE, 0.0, PLUG_TE, 0.0, PLUG, 0.0, NACELLE_TE, 0.0, SPINNER, 0.0, LIP, 0.0, NOZZLE_INNER, 0.0, NOZZLE, 0.0, NACELLE_INNER, 0.0, COWL, 0.0 ) +MARKER_EULER= ( INTAKE, NOZZLE_TE, PLUG_TE, PLUG, NACELLE_TE, SPINNER, LIP, NOZZLE_INNER, NOZZLE, NACELLE_INNER, COWL ) % % Far-field boundary marker(s) (NONE = no marker) MARKER_FAR= ( FF ) From c63807848f484493fb866f4262e97db8529918b0 Mon Sep 17 00:00:00 2001 From: mima619 Date: Thu, 12 Mar 2026 17:53:50 +0100 Subject: [PATCH 117/229] Moved MFR test-case and updated regression file --- .../{ => euler}/turbofan_MFR_coupling/MFR_coupling.cfg | 4 ++-- TestCases/parallel_regression.py | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) rename TestCases/{ => euler}/turbofan_MFR_coupling/MFR_coupling.cfg (99%) diff --git a/TestCases/turbofan_MFR_coupling/MFR_coupling.cfg b/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg similarity index 99% rename from TestCases/turbofan_MFR_coupling/MFR_coupling.cfg rename to TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg index c8bf739b3f8f..476f310ef2f3 100644 --- a/TestCases/turbofan_MFR_coupling/MFR_coupling.cfg +++ b/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg @@ -67,7 +67,7 @@ SYSTEM_MEASUREMENTS= SI % ------------------------------- SOLVER CONTROL ------------------------------% % % Maximum number of inner iterations -INNER_ITER= 10000 +ITER= 10000 % % Maximum number of outer iterations (only for multizone problems) OUTER_ITER= 1 @@ -583,7 +583,7 @@ CFL_REDUCTION_TURB= 1.0 % ------------------------- SCREEN/HISTORY VOLUME OUTPUT --------------------------% % % Screen output fields (use 'SU2_CFD -d ' to view list of available fields) -SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, LIFT, DRAG) +SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, LIFT, DRAG, SURFACE_MASSFLOW) % % History output groups (use 'SU2_CFD -d ' to view list of available fields) HISTORY_OUTPUT= (ITER, AERO_COEFF, RMS_RES, AOA, NONPHYSICAL_POINTS, SURFACE_MASSFLOW, SURFACE_STATIC_PRESSURE) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 6f367c68bdb8..c514bf5e02af 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -301,6 +301,14 @@ def main(): ramp_msw.test_vals = [-7.522451, -1.791193, -0.077520, 0.054427] test_list.append(ramp_msw) + # MFR_coupling + MFR_coupling = TestCase('MFR_coupling') + MFR_coupling.cfg_dir = "euler/turbofan_MFR_coupling" + MFR_coupling.cfg_file = "MFR_coupling.cfg" + MFR_coupling.test_iter = 100 + MFR_coupling.test_vals = [-2.2369e+02, 1.5532e+02, 1.9851e+01] + test_list.append(MFR_coupling) + ########################## ### Compressible N-S ### ########################## From 6b67bdd63316c27f78c249f9b5ec56660a80b1b4 Mon Sep 17 00:00:00 2001 From: mima619 Date: Fri, 13 Mar 2026 10:21:16 +0100 Subject: [PATCH 118/229] Modified regression values and workflow --- .github/workflows/regression.yml | 2 +- TestCases/parallel_regression.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index cb7d6cca23ce..3fbf05edc0ec 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -211,7 +211,7 @@ jobs: uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: # -t -c - args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} + args: -b ${{github.ref}} -t develop -c m-minervino:develop -s ${{matrix.testscript}} - name: Cleanup uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index c514bf5e02af..e13ae7bc9bf5 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -306,7 +306,7 @@ def main(): MFR_coupling.cfg_dir = "euler/turbofan_MFR_coupling" MFR_coupling.cfg_file = "MFR_coupling.cfg" MFR_coupling.test_iter = 100 - MFR_coupling.test_vals = [-2.2369e+02, 1.5532e+02, 1.9851e+01] + MFR_coupling.test_vals = [-2.1124e+02, 1.5003e+02, 2.0151e+01] test_list.append(MFR_coupling) ########################## From 1fc39e7e8a78701ffa41cdc089d6f865623fc0c8 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 14 Mar 2026 10:41:58 +0100 Subject: [PATCH 119/229] change back for regression --- .../src/integration/CMultiGridIntegration.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 697bef04d7b6..5f6accd0b196 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -494,21 +494,21 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Read current CFL values in master thread to ensure thread-safe access. Extract passive values to avoid AD tape recording in parallel region. ---*/ - // passivedouble CFL_fine_passive = 0.0; - // passivedouble CFL_coarse_current_passive = 0.0; - - // SU2_OMP_MASTER - // { - // CFL_fine_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh)); - // CFL_coarse_current_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh+1)); - // } - // END_SU2_OMP_MASTER + passivedouble CFL_fine_passive = 0.0; + passivedouble CFL_coarse_current_passive = 0.0; + + SU2_OMP_MASTER + { + CFL_fine_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh)); + CFL_coarse_current_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh+1)); + } + END_SU2_OMP_MASTER /*--- Implicit barrier here ensures all threads see the CFL values before proceeding ---*/ /*--- Compute adaptive CFL for coarse grid using passive values (no tape recording) ---*/ //nijso: just put a fixed value to see if the omp problem is really here... - passivedouble CFL_coarse_new = 1.0; //computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine_passive, CFL_coarse_current_passive); + passivedouble CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine_passive, CFL_coarse_current_passive); /*--- Explicit barrier to ensure all threads see the updated CFL from computeMultigridCFL before proceeding. This prevents data races where threads at different recursion depths From 1ddb4e761a9f1b1258e7cdf5b27d170c161448c5 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 14 Mar 2026 11:46:19 +0100 Subject: [PATCH 120/229] cleanup the SU2_OMP_BARRIER stuff --- .../src/integration/CMultiGridIntegration.cpp | 38 +++++-------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 5f6accd0b196..38f46a3fa589 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -84,17 +84,15 @@ void ProjectEulerWallToTangentPlane(CGeometry* geo_coarse, const CConfig* config passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, unsigned short iMesh, passivedouble CFL_fine, passivedouble CFL_coarse_current) { + /*--- Must be called from a single-thread context (e.g. inside BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS). ---*/ + passivedouble current_coeff = CFL_coarse_current / CFL_fine; /*--- Adaptive CFL using Exponential Moving Average (EMA) ---*/ - /*--- All operations performed in master thread for determinism ---*/ constexpr int AVG_WINDOW = 5; - /*--- Only master thread performs CFL adaptation to ensure deterministic behavior ---*/ - /*--- All adaptive CFL state and computation must be done by a single thread ---*/ passivedouble CFL_coarse_new = CFL_coarse_current; // Default: keep current value - SU2_OMP_MASTER { /*--- Get global iteration count first ---*/ unsigned long current_iter; @@ -228,8 +226,6 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve config->SetCFL(iMesh+1, CFL_coarse_new); AD::EndPassive(wasActive); } - END_SU2_OMP_MASTER - /*--- Implicit barrier at end of master region ensures all threads see updated CFL ---*/ return CFL_coarse_new; } @@ -489,31 +485,17 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, GetProlongated_Correction(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config); - /*--- Synchronize before reading CFL to avoid race with concurrent writes from computeMultigridCFL ---*/ - SU2_OMP_BARRIER - - /*--- Read current CFL values in master thread to ensure thread-safe access. - Extract passive values to avoid AD tape recording in parallel region. ---*/ - passivedouble CFL_fine_passive = 0.0; - passivedouble CFL_coarse_current_passive = 0.0; - - SU2_OMP_MASTER + /*--- Compute adaptive CFL for coarse grid (master only, with barriers for synchronization) ---*/ + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { - CFL_fine_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh)); - CFL_coarse_current_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh+1)); + passivedouble CFL_fine_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh)); + passivedouble CFL_coarse_current_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh+1)); + computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine_passive, CFL_coarse_current_passive); } - END_SU2_OMP_MASTER - /*--- Implicit barrier here ensures all threads see the CFL values before proceeding ---*/ - - /*--- Compute adaptive CFL for coarse grid using passive values (no tape recording) ---*/ - - //nijso: just put a fixed value to see if the omp problem is really here... - passivedouble CFL_coarse_new = computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine_passive, CFL_coarse_current_passive); + END_SU2_OMP_SAFE_GLOBAL_ACCESS - /*--- Explicit barrier to ensure all threads see the updated CFL from computeMultigridCFL - before proceeding. This prevents data races where threads at different recursion depths - might read stale CFL values during nested MultiGrid_Cycle calls. ---*/ - SU2_OMP_BARRIER + /*--- All threads read the CFL updated by master (safe after trailing barrier above) ---*/ + const passivedouble CFL_coarse_new = SU2_TYPE::GetValue(config->GetCFL(iMesh+1)); /*--- Update LocalCFL at each coarse grid point ---*/ SU2_OMP_FOR_STAT(roundUpDiv(geometry_coarse->GetnPoint(), omp_get_num_threads())) From edb889910079d5474eeba82c691186029733f75e Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 14 Mar 2026 15:02:50 +0100 Subject: [PATCH 121/229] fix some rotating frame issue and update residuals --- .../src/integration/CMultiGridIntegration.cpp | 17 +++++- .../naca0012/of_grad_directdiff.dat.ref | 6 +- TestCases/hybrid_regression.py | 50 ++++++++-------- .../multiple_ffd/naca0012/of_grad_cd.dat.ref | 4 +- .../naca0012/of_grad_directdiff.dat.ref | 4 +- TestCases/rotating/naca0012/rot_NACA0012.cfg | 9 +-- TestCases/serial_regression.py | 58 +++++++++---------- TestCases/serial_regression_AD.py | 2 +- subprojects/MLPCpp | 2 +- 9 files changed, 83 insertions(+), 69 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 38f46a3fa589..b68f4df3d4e4 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -38,6 +38,8 @@ namespace { */ void ProjectEulerWallToTangentPlane(CGeometry* geo_coarse, const CConfig* config, CSolver* sol_coarse, bool use_solution_old) { + const bool grid_movement = config->GetGrid_Movement(); + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (config->GetMarker_All_KindBC(iMarker) != EULER_WALL) continue; @@ -66,13 +68,24 @@ void ProjectEulerWallToTangentPlane(CGeometry* geo_coarse, const CConfig* config sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse) : sol_coarse->GetNodes()->GetSolution(Point_Coarse); - /*--- Compute normal component of momentum (v·n or correction·n) ---*/ + /*--- Compute normal component of momentum. + * For grid movement (e.g. rotating frame) and when projecting the solution + * (not corrections), compute the normal component of the RELATIVE momentum + * (rho*v - rho*v_grid).n to enforce (v - v_grid).n = 0. + * This matches the fine-grid Euler/symmetry BC (BC_Sym_Plane). ---*/ su2double momentum_n = 0.0; for (auto iDim = 0u; iDim < nDim; iDim++) { momentum_n += solution_coarse[iDim + 1] * UnitNormal[iDim]; } + if (grid_movement && !use_solution_old) { + const su2double* GridVel = geo_coarse->nodes->GetGridVel(Point_Coarse); + su2double rho = solution_coarse[0]; + for (auto iDim = 0u; iDim < nDim; iDim++) { + momentum_n -= rho * GridVel[iDim] * UnitNormal[iDim]; + } + } - /*--- Project to tangent plane: solution_coarse -= (solution_coarse·n)n ---*/ + /*--- Project to tangent plane: solution_coarse -= (momentum_n) * n ---*/ for (auto iDim = 0u; iDim < nDim; iDim++) { solution_coarse[iDim + 1] -= momentum_n * UnitNormal[iDim]; } 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 64fffa595ba6..366ba74b7047 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.2000855462 , -50.31379686 , 0.2356436894 , -1.627423951 , 0.0 , -1.632177209 , 0.0 , 0.0 , 0.987584412 , 0.0 - 1 , 0.3003955622 , -70.66636166 , 0.348808693 , -2.215465435 , 0.0 , -2.222547435 , 0.0 , 0.0 , 0.9429020878 , 0.0 - 2 , 0.4098512262 , -88.09224197 , 0.4674108675 , -2.633450055 , 0.0 , -2.643019879 , 0.0 , 0.0 , 0.6725005135 , 0.0 + 0 , 0.1875371398 , -46.4529905 , 0.2229292755 , -1.619952826 , 0.0 , -1.624430497 , 0.0 , 0.0 , 0.9817393925 , 0.0 + 1 , 0.2883063943 , -65.16223458 , 0.3360834125 , -2.186444684 , 0.0 , -2.193255991 , 0.0 , 0.0 , 0.9308579056 , 0.0 + 2 , 0.4016718294 , -81.51255705 , 0.4583979297 , -2.595338639 , 0.0 , -2.604720916 , 0.0 , 0.0 , 0.6566891255 , 0.0 diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index a2970e2782b9..f2a6259d5d45 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.965642, 2.459171, 0.016012, 0.042270] + channel.test_vals = [-2.356739, 3.185311, 0.135404, 0.143482] 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.766168, -4.287699, 0.326688, 0.022661] + naca0012.test_vals = [-4.968156, -4.396643, 0.331958, 0.023010] 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 = [-1.379426, 4.288828, -0.245341, 0.043244] + wedge.test_vals = [-1.301825, 4.369535, -0.236575, 0.041741] 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.896832, 1.637749, 0.301084, 0.019485] + fixedCL_naca0012.test_vals = [-3.786753, 1.752735, 0.301271, 0.019497] 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 = [-7.680046, -2.207922, 0.001084, 0.036233, 2.361500, -2.325300, 0.000000, 0.000000] + flatplate.test_vals = [-7.466885, -1.982938, 0.001084, 0.036236, 2.361500, -2.325300, 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.266602, -2.784028, -0.019899, 1.615655, 0.000000] + cylinder.test_vals = [-8.433648, -2.945868, -0.009392, 1.603197, 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.830997, -1.368850, -0.143986, 73.963289, 0.000000] + cylinder_lowmach.test_vals = [-6.412671, -0.950845, 0.039507, -134.197077, 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.008997, -7.262292, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.012587, -7.691028, -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.020123, -5.269264, 0.807147, 0.060494, 0.000000] + rae2822_sa.test_vals = [-1.846052, -5.109587, 0.571411, 0.040773, 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 = [-0.510329, 6.062197, 0.811983, 0.061600, 0.000000] + rae2822_sst.test_vals = [-0.509927, 5.868873, 0.580652, 0.014294, 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.589964, 6.062197, 0.811983, 0.061600] + rae2822_sst_sust.test_vals = [-2.446013, 5.868873, 0.580652, 0.014294] 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.316127, -6.738720, -0.187461, 0.057469] + turb_flatplate.test_vals = [-4.075879, -6.829935, -0.200296, 0.022692] 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.586046, -5.057159, 0.830274, -0.008747, 0.078023] + turb_naca0012_sst_restart_mg.test_vals = [-6.613316, -5.057159, 0.830274, -0.008869, 0.077835] 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 = [-7.127256, -6.466554, 0.531991, 0.008466] + inc_euler_naca0012.test_vals = [-7.118160, -6.555943, 0.531994, 0.008466] 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 = [-6.593521, -5.830706, -0.009062, 0.126050] + inc_nozzle.test_vals = [-4.395589, -4.054885, 0.035472, 0.090901] 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.004277, -3.227956, 0.003851, 7.626583] + inc_lam_cylinder.test_vals = [-4.059218, -3.311865, 0.006311, 6.172389] 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 = [-5.627869, -0.164403, 0.054734, 2.545857] + cavity.test_vals = [-5.515304, -0.049093, -0.114942, -7.135967] 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 = [-8.008023, -2.611064, 1.497308, 1.487483] + spinning_cylinder.test_vals = [-7.756180, -2.301600, 1.422425, 1.431645] 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.481818, -0.010484, -0.008178] + sine_gust.test_vals = [-1.977314, 3.481879, 0.001273, -0.007689] 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.001949, -0.001254, 0.000425, -0.000593] + cosine_gust.test_vals = [-2.418805, 0.001303, -0.001302, 0.000326, -0.000598] cosine_gust.unsteady = True cosine_gust.enabled_with_tsan = False test_list.append(cosine_gust) @@ -481,7 +481,7 @@ def main(): gust_mesh_defo.cfg_dir = "gust" gust_mesh_defo.cfg_file = "gust_with_mesh_deformation.cfg" gust_mesh_defo.test_iter = 6 - gust_mesh_defo.test_vals = [-1.844761, 0.001095, -0.000273] + gust_mesh_defo.test_vals = [-1.844746, -0.003360, -0.000926] gust_mesh_defo.unsteady = True gust_mesh_defo.enabled_with_tsan = False test_list.append(gust_mesh_defo) @@ -491,7 +491,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.074052, 0.027623, -0.001641, -0.000128] + aeroelastic.test_vals = [0.068866, 0.027461, -0.001829, 0.000020] aeroelastic.test_vals_aarch64 = [0.074170, 0.027590, -0.001579, -0.000160] aeroelastic.unsteady = True aeroelastic.enabled_on_cpu_arch = ["x86_64"] # Requires AVX-capable architecture @@ -521,7 +521,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.665168, -3.793307, -3.716526, -3.148348] + unst_deforming_naca0012.test_vals = [-3.658932, -3.761569, -3.698510, -3.138295] unst_deforming_naca0012.unsteady = True unst_deforming_naca0012.enabled_with_tsan = False test_list.append(unst_deforming_naca0012) @@ -535,7 +535,7 @@ def main(): edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" edge_VW.test_iter = 40 - edge_VW.test_vals = [-5.681149, 0.463233, -0.000009, 0.000000] + edge_VW.test_vals = [-2.013020, 4.187730, -0.000009, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR @@ -543,7 +543,7 @@ def main(): edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" edge_PPR.test_iter = 40 - edge_PPR.test_vals = [-7.139177, -0.980792, -0.000034, 0.000000] + edge_PPR.test_vals = [-7.126741, -0.965306, -0.000034, 0.000000] edge_PPR.test_vals_aarch64 = [-7.139211, -0.980821, -0.000034, 0.000000] test_list.append(edge_PPR) diff --git a/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref b/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref index 383fee127a91..ef515d96e63a 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.0645833 , 0.001 - 1 , -0.118221 , 0.001 + 0 , 0.0640875 , 0.001 + 1 , -0.117451 , 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 48fe6fd25d99..ee79d7042026 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.06218459594 , 0.1261488787 , 0.05968184702 , 0.1153777146 , 0.0 , 0.1140483052 , 0.0 , 0.0 , 0.01868706266 , 0.0 - 1 , -0.1116496871 , 6.293726662 , -0.1174209952 , 0.2632773471 , 0.0 , 0.2657762197 , 0.0 , 0.0 , 0.04765040929 , 0.0 + 0 , 0.06256609456 , 0.1370690627 , 0.06008351486 , 0.1144575341 , 0.0 , 0.1131195813 , 0.0 , 0.0 , 0.01961797646 , 0.0 + 1 , -0.1125985507 , 6.125966015 , -0.1182541873 , 0.2579658454 , 0.0 , 0.260484158 , 0.0 , 0.0 , 0.04918268702 , 0.0 diff --git a/TestCases/rotating/naca0012/rot_NACA0012.cfg b/TestCases/rotating/naca0012/rot_NACA0012.cfg index 847ac151b32e..fec91316e14b 100644 --- a/TestCases/rotating/naca0012/rot_NACA0012.cfg +++ b/TestCases/rotating/naca0012/rot_NACA0012.cfg @@ -52,7 +52,7 @@ MARKER_DESIGNING = ( airfoil ) % ------------- COMMON PARAMETERS TO DEFINE THE NUMERICAL METHOD --------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 100 +CFL_NUMBER= 5 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) @@ -62,7 +62,7 @@ ITER= 9999 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-6 +LINEAR_SOLVER_ERROR= 1E-1 LINEAR_SOLVER_ITER= 5 % -------------------------- MULTIGRID PARAMETERS -----------------------------% @@ -72,8 +72,9 @@ MGCYCLE= W_CYCLE MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) MG_POST_SMOOTH= ( 0, 0, 0, 0 ) MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_DAMP_RESTRICTION= 0.5 +% lower damping, to keep from fast oscillations in residuals +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index a445aa7006d7..4dcc1dddee2e 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.262915, 3.282305, 0.084026, 0.157104] + channel.test_vals = [-2.244274, 3.300113, 0.075814, 0.159961] 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 = [-5.063957, -4.497026, 0.333597, 0.023126] + naca0012.test_vals = [-4.968082, -4.396602, 0.331959, 0.023010] 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 = [-1.315151, 4.355264, -0.239167, 0.042188] + wedge.test_vals = [-1.301825, 4.369535, -0.236575, 0.041741] 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.428953, -10.889491, 0.280800, 0.008623] + oneram6.test_vals = [-11.428634, -10.889247, 0.280800, 0.008623] oneram6.timeout = 9600 test_list.append(oneram6) @@ -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.138311, 4.325266, 0.002828, 0.019184] + polar_naca0012.test_vals = [-1.119642, 4.342860, 0.002338, 0.020591] 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.110155, 0.370560, 0.001251, 0.025767, 2.361500, -2.335800, 0.000000, 0.000000] + flatplate.test_vals = [-5.099346, 0.381614, 0.001277, 0.024994, 2.361500, -2.336500, 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.643645, -3.150468, -0.002769, 1.602063, 0.000000] + cylinder.test_vals = [-8.631691, -3.138513, -0.003331, 1.602087, 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.504996, -1.043200, -0.119206, -136.159598, 0.000000] + cylinder_lowmach.test_vals = [-6.412653, -0.950827, 0.038557, -134.198785, 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.012568, -7.696994, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.012574, -7.691705, -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 = [-1.806841, -5.123806, 0.685516, 0.029584, 0.000000] + rae2822_sa.test_vals = [-1.846052, -5.109587, 0.571411, 0.040773, 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 = [-0.510040, 5.230415, 0.612550, 0.009921, 0.000000] + rae2822_sst.test_vals = [-0.509931, 5.862083, 0.583382, 0.013958, 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.457541, 5.230415, 0.612550, 0.009921] + rae2822_sst_sust.test_vals = [-2.446759, 5.862083, 0.583382, 0.013958] 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.166987, -6.847620, -0.199569, 0.021651] + turb_flatplate.test_vals = [-4.075879, -6.829935, -0.200296, 0.022692] 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.609250, -5.081439, 0.810958, -0.008778, 0.077715] + turb_naca0012_sst_restart_mg.test_vals = [-6.606238, -5.081439, 0.810958, -0.008789, 0.077730] 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 = [-7.127273, -6.574250, 0.531996, 0.008466] + inc_euler_naca0012.test_vals = [-7.126959, -6.573716, 0.531996, 0.008466] 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.394788, -4.869896, -0.021578, 0.125704] + inc_nozzle.test_vals = [-4.372228, -4.068732, -0.031530, 0.142087] 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.077094, -3.309090, 0.006632, 5.905895] + inc_lam_cylinder.test_vals = [-4.059218, -3.311865, 0.006311, 6.172388] test_list.append(inc_lam_cylinder) # Buoyancy-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 = [-5.437082, 0.028919, -0.157082, -1.62953] + cavity.test_vals = [-5.515303, -0.049093, -0.114925, -7.135945] 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.690469, -2.232131, 1.517075, 1.520828] + spinning_cylinder.test_vals = [-7.699257, -2.240779, 1.471969, 1.496512] 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.977319, 3.481878, 0.001450, -0.007578] + sine_gust.test_vals = [-1.977321, 3.481877, 0.001061, -0.007623] 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 = [0.069270, 0.027429, -0.001828, 0.000019] + aeroelastic.test_vals = [0.069117, 0.027439, -0.001827, 0.000019] aeroelastic.unsteady = True test_list.append(aeroelastic) @@ -825,7 +825,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.658963, -3.761517, -3.698530, -3.138323] + unst_deforming_naca0012.test_vals = [-3.659044, -3.761890, -3.698754, -3.138451] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) @@ -846,7 +846,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 = [-0.557647, 5.644222, -0.006682, 0.000000] + edge_VW.test_vals = [-0.577419, 5.624333, -0.016050, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR @@ -854,7 +854,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 = [-1.689532, 4.503673, 0.000353, 0.000000] + edge_PPR.test_vals = [-1.542990, 4.650149, 0.001487, 0.000000] test_list.append(edge_PPR) @@ -1092,7 +1092,7 @@ def main(): airfoilRBF.cfg_file = "config.cfg" airfoilRBF.test_iter = 1 - airfoilRBF.test_vals = [1.000000, 0.120839, -3.389864] + airfoilRBF.test_vals = [1.000000, 0.109856, -3.384244] airfoilRBF.tol = 0.0001 airfoilRBF.multizone = True test_list.append(airfoilRBF) @@ -1512,7 +1512,7 @@ def main(): opt_2surf1obj_py.cfg_dir = "optimization_euler/multiobjective_wedge" opt_2surf1obj_py.cfg_file = "inv_wedge_ROE_2surf_1obj.cfg" opt_2surf1obj_py.test_iter = 1 - opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 2.005079, 0.000312] + opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 36.178490, 3.891506] opt_2surf1obj_py.command = TestCase.Command(exec = "shape_optimization.py", param = "-g CONTINUOUS_ADJOINT -f") opt_2surf1obj_py.timeout = 1600 opt_2surf1obj_py.tol = 0.00001 @@ -1529,7 +1529,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 = [-5.063957, -4.497026, 0.333597, 0.023126] + pywrapper_naca0012.test_vals = [-4.968082, -4.396602, 0.331959, 0.023010] pywrapper_naca0012.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_naca0012.timeout = 1600 pywrapper_naca0012.tol = 0.00001 @@ -1570,7 +1570,7 @@ def main(): pywrapper_aeroelastic.cfg_dir = "aeroelastic" pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [0.069270, 0.027429, -0.001828, 0.000019] + pywrapper_aeroelastic.test_vals = [0.069117, 0.027439, -0.001827, 0.000019] pywrapper_aeroelastic.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_aeroelastic.timeout = 1600 pywrapper_aeroelastic.tol = 0.00001 @@ -1599,7 +1599,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.614167, 2.263544, -0.004139, 0.099061] + pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.260153, -0.003880, 0.099289] 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 91962d2b9a8b..1e022bf2c0d4 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -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.221535, -1.651330, -0.004201, -0.000004] + discadj_pitchingNACA0012.test_vals = [-1.221535, -1.651330, -0.004201, -0.000004] discadj_pitchingNACA0012.unsteady = True test_list.append(discadj_pitchingNACA0012) diff --git a/subprojects/MLPCpp b/subprojects/MLPCpp index 02f2cb9dde79..e19ca0cafb28 160000 --- a/subprojects/MLPCpp +++ b/subprojects/MLPCpp @@ -1 +1 @@ -Subproject commit 02f2cb9dde791074858e11ac091f7c4df9c6af65 +Subproject commit e19ca0cafb28c4b7ba5b8cffef42883259b00dc0 From cb2a1d10591cd2ecc124317e1e5c7a3a3b42e085 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 14 Mar 2026 17:27:56 +0100 Subject: [PATCH 122/229] Update MLPCpp submodule to match develop --- subprojects/MLPCpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/MLPCpp b/subprojects/MLPCpp index e19ca0cafb28..02f2cb9dde79 160000 --- a/subprojects/MLPCpp +++ b/subprojects/MLPCpp @@ -1 +1 @@ -Subproject commit e19ca0cafb28c4b7ba5b8cffef42883259b00dc0 +Subproject commit 02f2cb9dde791074858e11ac091f7c4df9c6af65 From 8fb06d16d345b6b90f2afad0ca0b1d9ec4a2e87b Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 14 Mar 2026 19:29:33 +0100 Subject: [PATCH 123/229] Update more regressions --- TestCases/hybrid_regression.py | 10 +++++----- TestCases/hybrid_regression_AD.py | 2 +- TestCases/parallel_regression.py | 14 +++++++------- TestCases/serial_regression_AD.py | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index f2a6259d5d45..532757f111db 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -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.977314, 3.481879, 0.001273, -0.007689] + sine_gust.test_vals = [-1.977498, 3.481817, -0.010140, -0.007833] 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.001303, -0.001302, 0.000326, -0.000598] + cosine_gust.test_vals = [-2.418805, 0.001919, -0.001262, 0.000418, -0.000592] cosine_gust.unsteady = True cosine_gust.enabled_with_tsan = False test_list.append(cosine_gust) @@ -481,7 +481,7 @@ def main(): gust_mesh_defo.cfg_dir = "gust" gust_mesh_defo.cfg_file = "gust_with_mesh_deformation.cfg" gust_mesh_defo.test_iter = 6 - gust_mesh_defo.test_vals = [-1.844746, -0.003360, -0.000926] + gust_mesh_defo.test_vals = [-1.844761, 0.001077, -0.000263] gust_mesh_defo.unsteady = True gust_mesh_defo.enabled_with_tsan = False test_list.append(gust_mesh_defo) @@ -491,7 +491,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.068866, 0.027461, -0.001829, 0.000020] + aeroelastic.test_vals = [0.075093, 0.027559, -0.001640, -0.000129] aeroelastic.test_vals_aarch64 = [0.074170, 0.027590, -0.001579, -0.000160] aeroelastic.unsteady = True aeroelastic.enabled_on_cpu_arch = ["x86_64"] # Requires AVX-capable architecture @@ -521,7 +521,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.658932, -3.761569, -3.698510, -3.138295] + unst_deforming_naca0012.test_vals = [-3.665129, -3.793418, -3.716491, -3.148323] unst_deforming_naca0012.unsteady = True unst_deforming_naca0012.enabled_with_tsan = False test_list.append(unst_deforming_naca0012) diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 9e84aec251a8..73636ba77353 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -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.222085, -1.652435, -0.004121, -0.000003] + discadj_pitchingNACA0012.test_vals = [-1.224273, -1.654253, -0.004099, -0.000003] discadj_pitchingNACA0012.unsteady = True discadj_pitchingNACA0012.enabled_with_tsan = False test_list.append(discadj_pitchingNACA0012) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 83f56353072b..2423d362419a 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -1028,7 +1028,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.977318, 3.481877, -0.000142, -0.007861] + sine_gust.test_vals = [-1.977498, 3.481817, -0.010227, -0.007902] sine_gust.unsteady = True test_list.append(sine_gust) @@ -1037,7 +1037,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.069157, 0.027462, -0.001829, 0.000025] + aeroelastic.test_vals = [0.075680, 0.027563, -0.001642, -0.000127] aeroelastic.unsteady = True test_list.append(aeroelastic) @@ -1077,7 +1077,7 @@ def main(): edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" edge_VW.test_iter = 50 - edge_VW.test_vals = [-2.770557, 3.430361, -0.000009, 0.000000] + edge_VW.test_vals = [-2.386376, 3.814463, -0.000009, 0.000000] test_list.append(edge_VW) # Rarefaction shock wave edge_PPR @@ -1085,7 +1085,7 @@ def main(): edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" edge_PPR.test_iter = 50 - edge_PPR.test_vals = [-10.876684, -4.693540, -0.000034, 0.000000] + edge_PPR.test_vals = [-12.063759, -5.873111, -0.000034, 0.000000] test_list.append(edge_PPR) # Rarefaction Q1D nozzle, include CoolProp fluid model @@ -1440,7 +1440,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 = [-9.249009, -8.546597, 0.335769, 0.023275] + pywrapper_naca0012.test_vals = [-9.980225, -9.402767, 0.335769, 0.023275] pywrapper_naca0012.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") test_list.append(pywrapper_naca0012) @@ -1470,7 +1470,7 @@ def main(): pywrapper_aeroelastic.cfg_dir = "aeroelastic" pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [0.075023, 0.027483, -0.001643, -0.000126] + pywrapper_aeroelastic.test_vals = [0.075680, 0.027563, -0.001642, -0.000127] pywrapper_aeroelastic.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") pywrapper_aeroelastic.unsteady = True test_list.append(pywrapper_aeroelastic) @@ -1511,7 +1511,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.614167, 2.263483, -0.007487, 0.100530] + pywrapper_unsteadyCHT.test_vals = [-1.614167, 2.260123, -0.002469, 0.100260] 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/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 1e022bf2c0d4..8e9ade16ea0c 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -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.221535, -1.651330, -0.004201, -0.000004] + discadj_pitchingNACA0012.test_vals = [-1.223517, -1.653450, -0.004178, -0.000004] 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.965271, -1.847913, 2944.900000, 0.000000] + unst_deforming_naca0012.test_vals = [1.965747, -1.848881, 2961.700000, 0.000000] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) From abf1eaa7892e1b46fd976dc16aaf092e384587a4 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 14 Mar 2026 19:52:30 +0100 Subject: [PATCH 124/229] Update hybrid_regression_AD --- TestCases/hybrid_regression_AD.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 73636ba77353..e5a751d41d9c 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -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.224273, -1.654253, -0.004099, -0.000003] + discadj_pitchingNACA0012.test_vals = [-1.223973, -1.654688, -0.004097, -0.000003] discadj_pitchingNACA0012.unsteady = True discadj_pitchingNACA0012.enabled_with_tsan = False test_list.append(discadj_pitchingNACA0012) From 644bf23e1b741a545d526100458591c4ce4b2cd8 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 14 Mar 2026 20:40:59 +0100 Subject: [PATCH 125/229] Update ref files --- .../translating_NACA0012/forces_0.csv.ref | 400 +++++++++--------- .../forces_0.csv.ref | 398 ++++++++--------- TestCases/serial_regression_AD.py | 2 +- 3 files changed, 400 insertions(+), 400 deletions(-) diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index d9998aced7cb..3151e051c6ca 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.95, -0.00, 0.00 -0, -2.89, 19.93, 0.00 -1, -4.16, 28.63, 0.00 -2, -5.19, 35.84, 0.00 -3, -6.11, 42.27, 0.00 -4, -6.89, 47.83, 0.00 -5, -7.53, 52.42, 0.00 -6, -8.06, 56.37, 0.00 -7, -8.47, 59.49, 0.00 -8, -8.76, 61.87, 0.00 -9, -8.94, 63.52, 0.00 -10, -9.02, 64.50, 0.00 -11, -9.01, 64.87, 0.00 -12, -8.90, 64.57, 0.00 -13, -8.70, 63.67, 0.00 -14, -8.42, 62.15, 0.00 -15, -8.06, 60.06, 0.00 -16, -7.64, 57.51, 0.00 -17, -7.16, 54.41, 0.00 -18, -6.62, 50.82, 0.00 -19, -6.02, 46.77, 0.00 -20, -5.38, 42.25, 0.00 -21, -4.69, 37.33, 0.00 -22, -3.97, 31.98, 0.00 -23, -3.21, 26.23, 0.00 -24, -2.43, 20.13, 0.00 -25, -1.63, 13.66, 0.00 -26, -0.80, 6.84, 0.00 -27, 0.03, -0.29, 0.00 -28, 0.88, -7.75, 0.00 -29, 1.74, -15.50, 0.00 -30, 2.60, -23.53, 0.00 -31, 3.45, -31.83, 0.00 -32, 4.31, -40.43, 0.00 -33, 5.15, -49.28, 0.00 -34, 5.98, -58.35, 0.00 -35, 6.80, -67.68, 0.00 -36, 7.60, -77.26, 0.00 -37, 8.37, -87.01, 0.00 -38, 9.12, -97.01, 0.00 -39, 9.83, -107.21, 0.00 -40, 10.49, -117.56, 0.00 -41, 11.11, -128.08, 0.00 -42, 11.69, -138.80, 0.00 -43, 12.20, -149.69, 0.00 -44, 12.65, -160.70, 0.00 -45, 13.03, -171.78, 0.00 -46, 13.32, -182.92, 0.00 -47, 13.52, -194.12, 0.00 -48, 13.61, -205.31, 0.00 -49, 13.60, -216.52, 0.00 -50, 13.47, -227.51, 0.00 -51, 13.18, -238.10, 0.00 -52, 12.75, -248.28, 0.00 -53, 12.23, -259.17, 0.00 -54, 11.51, -269.17, 0.00 -55, 10.25, -268.73, 0.00 -56, 8.38, -251.80, 0.00 -57, 7.08, -251.06, 0.00 -58, 7.58, -331.40, 0.00 -59, 7.34, -425.09, 0.00 -60, 5.05, -443.58, 0.00 -61, 2.27, -434.14, 0.00 -62, -0.52, -424.59, 0.00 -63, -3.33, -414.88, 0.00 -64, -6.11, -403.87, 0.00 -65, -8.85, -391.44, 0.00 -66, -11.50, -377.71, 0.00 -67, -14.04, -363.05, 0.00 -68, -16.44, -347.37, 0.00 -69, -18.68, -330.91, 0.00 -70, -20.72, -313.80, 0.00 -71, -22.54, -296.04, 0.00 -72, -24.12, -277.82, 0.00 -73, -25.43, -259.16, 0.00 -74, -26.46, -240.22, 0.00 -75, -27.16, -221.02, 0.00 -76, -27.48, -201.33, 0.00 -77, -27.42, -181.48, 0.00 -78, -26.96, -161.64, 0.00 -79, -26.03, -141.69, 0.00 -80, -24.63, -121.84, 0.00 -81, -22.68, -102.06, 0.00 -82, -20.15, -82.45, 0.00 -83, -16.97, -63.10, 0.00 -84, -13.07, -44.09, 0.00 -85, -8.36, -25.53, 0.00 -86, -2.73, -7.52, 0.00 -87, 3.97, 9.81, 0.00 -88, 11.89, 26.25, 0.00 -89, 21.22, 41.51, 0.00 -90, 32.12, 55.12, 0.00 -91, 44.88, 66.72, 0.00 -92, 59.51, 75.37, 0.00 -93, 76.12, 80.27, 0.00 -94, 94.45, 80.24, 0.00 -95, 113.03, 73.62, 0.00 -96, 129.92, 59.55, 0.00 -97, 142.64, 38.61, 0.00 -98, 108.56, 14.57, 0.00 -99, 69.98, -0.00, 0.00 -100, 103.93, -13.95, 0.00 -101, 125.25, -33.90, 0.00 -102, 102.02, -46.76, 0.00 -103, 77.51, -50.49, 0.00 -104, 53.83, -45.73, 0.00 -105, 32.59, -34.37, 0.00 -106, 14.60, -18.48, 0.00 -107, -0.30, 0.44, 0.00 -108, -12.53, 21.51, 0.00 -109, -22.47, 43.94, 0.00 -110, -30.49, 67.29, 0.00 -111, -36.85, 91.11, 0.00 -112, -41.91, 115.39, 0.00 -113, -45.81, 139.82, 0.00 -114, -48.77, 164.48, 0.00 -115, -50.93, 189.36, 0.00 -116, -52.38, 214.32, 0.00 -117, -53.20, 239.37, 0.00 -118, -53.43, 264.32, 0.00 -119, -53.12, 289.11, 0.00 -120, -52.35, 313.88, 0.00 -121, -51.12, 338.31, 0.00 -122, -49.52, 362.75, 0.00 -123, -47.56, 387.00, 0.00 -124, -45.22, 410.58, 0.00 -125, -42.59, 434.00, 0.00 -126, -39.71, 457.30, 0.00 -127, -36.56, 480.08, 0.00 -128, -33.16, 502.25, 0.00 -129, -29.56, 523.72, 0.00 -130, -25.78, 544.66, 0.00 -131, -21.86, 565.07, 0.00 -132, -17.80, 584.72, 0.00 -133, -13.65, 603.83, 0.00 -134, -9.41, 621.93, 0.00 -135, -5.12, 639.20, 0.00 -136, -0.81, 656.06, 0.00 -137, 3.51, 671.80, 0.00 -138, 7.82, 686.38, 0.00 -139, 12.10, 700.45, 0.00 -140, 16.32, 713.56, 0.00 -141, 20.46, 725.19, 0.00 -142, 24.51, 736.06, 0.00 -143, 28.46, 746.15, 0.00 -144, 32.29, 754.94, 0.00 -145, 35.97, 762.42, 0.00 -146, 39.51, 769.08, 0.00 -147, 42.90, 774.72, 0.00 -148, 46.11, 779.11, 0.00 -149, 49.18, 782.75, 0.00 -150, 52.06, 785.17, 0.00 -151, 54.77, 786.61, 0.00 -152, 57.30, 787.12, 0.00 -153, 59.67, 786.85, 0.00 -154, 61.83, 785.26, 0.00 -155, 63.48, 778.68, 0.00 -156, 67.01, 795.78, 0.00 -157, 59.18, 681.93, 0.00 -158, 2.62, 29.33, 0.00 -159, -2.31, -25.18, 0.00 -160, 0.55, 5.86, 0.00 -161, 0.34, 3.53, 0.00 -162, 0.33, 3.30, 0.00 -163, 0.29, 2.87, 0.00 -164, 0.12, 1.20, 0.00 -165, -0.13, -1.27, 0.00 -166, -0.46, -4.36, 0.00 -167, -0.86, -7.92, 0.00 -168, -1.30, -11.82, 0.00 -169, -1.79, -15.99, 0.00 -170, -2.32, -20.31, 0.00 -171, -2.86, -24.72, 0.00 -172, -3.42, -29.14, 0.00 -173, -4.00, -33.56, 0.00 -174, -4.58, -37.85, 0.00 -175, -5.15, -41.99, 0.00 -176, -5.71, -46.00, 0.00 -177, -6.25, -49.75, 0.00 -178, -6.77, -53.23, 0.00 -179, -7.26, -56.43, 0.00 -180, -7.72, -59.27, 0.00 -181, -8.13, -61.77, 0.00 -182, -8.49, -63.87, 0.00 -183, -8.79, -65.51, 0.00 -184, -9.04, -66.76, 0.00 -185, -9.23, -67.51, 0.00 -186, -9.33, -67.71, 0.00 -187, -9.36, -67.37, 0.00 -188, -9.29, -66.42, 0.00 -189, -9.14, -64.91, 0.00 -190, -8.89, -62.78, 0.00 -191, -8.54, -59.98, 0.00 -192, -8.08, -56.48, 0.00 -193, -7.50, -52.21, 0.00 -194, -6.82, -47.34, 0.00 -195, -6.01, -41.55, 0.00 -196, -5.06, -34.95, 0.00 -197, -4.01, -27.61, 0.00 -198, -2.73, -18.81, 0.00 +199, -0.88, -0.00, 0.00 +0, -2.71, 18.66, 0.00 +1, -3.86, 26.57, 0.00 +2, -4.80, 33.11, 0.00 +3, -5.62, 38.86, 0.00 +4, -6.32, 43.81, 0.00 +5, -6.90, 48.06, 0.00 +6, -7.37, 51.53, 0.00 +7, -7.73, 54.32, 0.00 +8, -7.96, 56.24, 0.00 +9, -8.12, 57.72, 0.00 +10, -8.15, 58.28, 0.00 +11, -8.09, 58.28, 0.00 +12, -7.92, 57.49, 0.00 +13, -7.73, 56.53, 0.00 +14, -7.39, 54.53, 0.00 +15, -6.97, 51.92, 0.00 +16, -6.51, 49.01, 0.00 +17, -6.02, 45.79, 0.00 +18, -5.42, 41.63, 0.00 +19, -4.77, 37.09, 0.00 +20, -4.09, 32.15, 0.00 +21, -3.36, 26.73, 0.00 +22, -2.58, 20.79, 0.00 +23, -1.79, 14.58, 0.00 +24, -0.97, 8.03, 0.00 +25, -0.07, 0.56, 0.00 +26, 0.79, -6.72, 0.00 +27, 1.63, -14.10, 0.00 +28, 2.48, -21.75, 0.00 +29, 3.35, -29.89, 0.00 +30, 4.19, -38.01, 0.00 +31, 5.08, -46.84, 0.00 +32, 5.96, -55.91, 0.00 +33, 6.92, -66.20, 0.00 +34, 7.78, -75.86, 0.00 +35, 8.66, -86.15, 0.00 +36, 9.47, -96.30, 0.00 +37, 10.34, -107.47, 0.00 +38, 11.06, -117.71, 0.00 +39, 11.80, -128.75, 0.00 +40, 12.49, -139.94, 0.00 +41, 13.54, -155.97, 0.00 +42, 14.18, -168.40, 0.00 +43, 14.97, -183.61, 0.00 +44, 15.45, -196.23, 0.00 +45, 16.40, -216.32, 0.00 +46, 16.67, -228.99, 0.00 +47, 17.18, -246.82, 0.00 +48, 16.93, -255.36, 0.00 +49, 17.02, -270.90, 0.00 +50, 16.40, -277.14, 0.00 +51, 15.89, -286.97, 0.00 +52, 15.14, -294.64, 0.00 +53, 14.45, -306.42, 0.00 +54, 13.16, -307.67, 0.00 +55, 11.49, -301.17, 0.00 +56, 9.49, -284.88, 0.00 +57, 6.89, -244.24, 0.00 +58, 6.39, -279.56, 0.00 +59, 6.36, -368.07, 0.00 +60, 4.82, -422.88, 0.00 +61, 2.33, -444.54, 0.00 +62, -0.54, -440.79, 0.00 +63, -3.51, -437.25, 0.00 +64, -6.50, -429.63, 0.00 +65, -9.50, -420.22, 0.00 +66, -12.45, -408.79, 0.00 +67, -15.32, -396.01, 0.00 +68, -18.07, -381.73, 0.00 +69, -20.77, -368.01, 0.00 +70, -23.28, -352.48, 0.00 +71, -25.74, -337.96, 0.00 +72, -27.22, -313.53, 0.00 +73, -29.68, -302.45, 0.00 +74, -31.40, -285.07, 0.00 +75, -33.05, -268.92, 0.00 +76, -33.65, -246.51, 0.00 +77, -35.60, -235.59, 0.00 +78, -35.65, -213.78, 0.00 +79, -35.65, -194.05, 0.00 +80, -34.22, -169.31, 0.00 +81, -37.22, -167.47, 0.00 +82, -34.76, -142.23, 0.00 +83, -34.51, -128.31, 0.00 +84, -29.69, -100.14, 0.00 +85, -29.57, -90.27, 0.00 +86, -23.83, -65.62, 0.00 +87, -22.14, -54.75, 0.00 +88, -12.87, -28.41, 0.00 +89, -14.66, -28.66, 0.00 +90, -5.66, -9.72, 0.00 +91, -18.30, -27.20, 0.00 +92, -12.65, -16.02, 0.00 +93, -25.35, -26.73, 0.00 +94, -20.20, -17.16, 0.00 +95, -0.68, -0.44, 0.00 +96, 8.45, 3.87, 0.00 +97, 65.07, 17.61, 0.00 +98, 68.49, 9.19, 0.00 +99, 36.97, -0.00, 0.00 +100, 47.84, -6.42, 0.00 +101, 13.76, -3.72, 0.00 +102, -36.44, 16.70, 0.00 +103, -6.34, 4.13, 0.00 +104, -25.51, 21.67, 0.00 +105, -10.51, 11.09, 0.00 +106, -26.82, 33.96, 0.00 +107, -35.34, 52.54, 0.00 +108, -46.90, 80.48, 0.00 +109, -45.33, 88.66, 0.00 +110, -54.15, 119.51, 0.00 +111, -56.93, 140.77, 0.00 +112, -62.40, 171.81, 0.00 +113, -58.31, 178.00, 0.00 +114, -61.87, 208.66, 0.00 +115, -62.35, 231.79, 0.00 +116, -63.16, 258.42, 0.00 +117, -61.96, 278.79, 0.00 +118, -62.87, 311.05, 0.00 +119, -61.58, 335.20, 0.00 +120, -60.20, 360.99, 0.00 +121, -57.08, 377.80, 0.00 +122, -55.22, 404.50, 0.00 +123, -52.22, 424.95, 0.00 +124, -49.44, 448.92, 0.00 +125, -45.84, 467.05, 0.00 +126, -42.55, 490.04, 0.00 +127, -38.95, 511.56, 0.00 +128, -35.26, 534.04, 0.00 +129, -31.20, 552.85, 0.00 +130, -27.18, 574.24, 0.00 +131, -22.98, 593.99, 0.00 +132, -18.69, 613.95, 0.00 +133, -14.23, 629.58, 0.00 +134, -9.80, 647.63, 0.00 +135, -5.32, 663.19, 0.00 +136, -0.84, 680.20, 0.00 +137, 3.63, 693.76, 0.00 +138, 8.08, 708.67, 0.00 +139, 12.47, 721.74, 0.00 +140, 16.81, 735.00, 0.00 +141, 21.03, 745.51, 0.00 +142, 25.19, 756.59, 0.00 +143, 29.25, 766.64, 0.00 +144, 33.18, 775.81, 0.00 +145, 36.95, 783.28, 0.00 +146, 40.57, 789.70, 0.00 +147, 44.02, 794.92, 0.00 +148, 47.30, 799.22, 0.00 +149, 50.45, 802.94, 0.00 +150, 53.37, 804.92, 0.00 +151, 56.01, 804.40, 0.00 +152, 58.61, 805.20, 0.00 +153, 61.56, 811.80, 0.00 +154, 63.83, 810.68, 0.00 +155, 65.72, 806.13, 0.00 +156, 67.55, 802.24, 0.00 +157, 26.15, 301.34, 0.00 +158, -17.39, -194.80, 0.00 +159, -0.44, -4.85, 0.00 +160, 14.16, 150.66, 0.00 +161, 8.61, 89.49, 0.00 +162, 7.78, 79.12, 0.00 +163, 5.96, 59.30, 0.00 +164, 5.85, 57.06, 0.00 +165, 4.10, 39.20, 0.00 +166, 3.74, 35.15, 0.00 +167, 2.87, 26.47, 0.00 +168, 2.37, 21.47, 0.00 +169, 1.46, 13.02, 0.00 +170, 0.94, 8.23, 0.00 +171, 0.07, 0.62, 0.00 +172, -0.60, -5.09, 0.00 +173, -1.46, -12.23, 0.00 +174, -2.07, -17.12, 0.00 +175, -2.82, -23.01, 0.00 +176, -3.48, -28.02, 0.00 +177, -4.19, -33.32, 0.00 +178, -4.74, -37.26, 0.00 +179, -5.38, -41.79, 0.00 +180, -5.93, -45.55, 0.00 +181, -6.41, -48.74, 0.00 +182, -6.87, -51.68, 0.00 +183, -7.27, -54.13, 0.00 +184, -7.63, -56.29, 0.00 +185, -7.84, -57.36, 0.00 +186, -8.08, -58.63, 0.00 +187, -8.16, -58.76, 0.00 +188, -8.17, -58.43, 0.00 +189, -8.11, -57.61, 0.00 +190, -7.95, -56.12, 0.00 +191, -7.67, -53.88, 0.00 +192, -7.30, -51.00, 0.00 +193, -6.77, -47.14, 0.00 +194, -6.19, -42.94, 0.00 +195, -5.47, -37.84, 0.00 +196, -4.64, -32.00, 0.00 +197, -3.69, -25.42, 0.00 +198, -2.55, -17.52, 0.00 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 4eacedc90eff..dac852963b51 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.96, -0.00, 0.00 -0, -2.92, 20.12, 0.00 -1, -4.12, 28.38, 0.00 -2, -5.19, 35.79, 0.00 -3, -6.11, 42.26, 0.00 -4, -6.91, 47.93, 0.00 -5, -7.55, 52.59, 0.00 -6, -8.09, 56.59, 0.00 -7, -8.51, 59.77, 0.00 -8, -8.81, 62.19, 0.00 -9, -8.99, 63.88, 0.00 -10, -9.08, 64.90, 0.00 -11, -9.07, 65.31, 0.00 -12, -8.96, 65.04, 0.00 -13, -8.77, 64.16, 0.00 -14, -8.49, 62.66, 0.00 -15, -8.13, 60.58, 0.00 -16, -7.71, 58.02, 0.00 -17, -7.23, 54.91, 0.00 -18, -6.68, 51.30, 0.00 -19, -6.08, 47.23, 0.00 -20, -5.43, 42.67, 0.00 -21, -4.74, 37.69, 0.00 +199, -0.94, -0.00, 0.00 +0, -2.61, 17.95, 0.00 +1, -3.60, 24.79, 0.00 +2, -4.53, 31.28, 0.00 +3, -5.37, 37.13, 0.00 +4, -6.11, 42.38, 0.00 +5, -6.69, 46.55, 0.00 +6, -7.18, 50.22, 0.00 +7, -7.61, 53.46, 0.00 +8, -7.89, 55.75, 0.00 +9, -8.11, 57.59, 0.00 +10, -8.26, 59.10, 0.00 +11, -8.33, 59.98, 0.00 +12, -8.28, 60.10, 0.00 +13, -8.11, 59.36, 0.00 +14, -7.90, 58.35, 0.00 +15, -7.64, 56.91, 0.00 +16, -7.24, 54.48, 0.00 +17, -6.78, 51.53, 0.00 +18, -6.36, 48.85, 0.00 +19, -5.88, 45.64, 0.00 +20, -5.26, 41.32, 0.00 +21, -4.65, 36.98, 0.00 22, -4.01, 32.30, 0.00 -23, -3.24, 26.47, 0.00 -24, -2.46, 20.31, 0.00 -25, -1.64, 13.76, 0.00 -26, -0.81, 6.86, 0.00 -27, 0.04, -0.35, 0.00 -28, 0.90, -7.89, 0.00 -29, 1.76, -15.72, 0.00 -30, 2.63, -23.81, 0.00 -31, 3.49, -32.17, 0.00 -32, 4.35, -40.81, 0.00 -33, 5.19, -49.67, 0.00 -34, 6.02, -58.71, 0.00 -35, 6.83, -67.98, 0.00 -36, 7.62, -77.42, 0.00 -37, 8.37, -86.96, 0.00 -38, 9.08, -96.64, 0.00 -39, 9.75, -106.37, 0.00 -40, 10.36, -116.07, 0.00 -41, 10.91, -125.70, 0.00 -42, 11.38, -135.20, 0.00 -43, 11.77, -144.41, 0.00 -44, 12.06, -153.14, 0.00 -45, 12.22, -161.12, 0.00 -46, 12.23, -168.00, 0.00 -47, 12.04, -172.93, 0.00 -48, 11.64, -175.62, 0.00 -49, 11.16, -177.56, 0.00 -50, 10.14, -171.34, 0.00 -51, 7.30, -131.80, 0.00 -52, 6.53, -127.05, 0.00 -53, 19.34, -410.00, 0.00 -54, 25.58, -598.18, 0.00 -55, 21.94, -575.15, 0.00 -56, 18.63, -559.59, 0.00 -57, 15.63, -554.21, 0.00 -58, 12.51, -546.77, 0.00 -59, 9.28, -537.48, 0.00 -60, 6.01, -527.06, 0.00 -61, 2.70, -515.82, 0.00 -62, -0.62, -503.27, 0.00 -63, -3.92, -489.49, 0.00 -64, -7.19, -475.06, 0.00 -65, -10.39, -459.70, 0.00 -66, -13.50, -443.27, 0.00 -67, -16.48, -426.16, 0.00 -68, -19.32, -408.24, 0.00 -69, -22.00, -389.76, 0.00 -70, -24.49, -370.83, 0.00 -71, -26.76, -351.38, 0.00 -72, -28.78, -331.47, 0.00 -73, -30.53, -311.04, 0.00 -74, -31.98, -290.35, 0.00 -75, -33.11, -269.46, 0.00 -76, -33.87, -248.14, 0.00 -77, -34.25, -226.70, 0.00 -78, -34.24, -205.31, 0.00 -79, -33.76, -183.76, 0.00 -80, -32.81, -162.32, 0.00 -81, -31.32, -140.93, 0.00 -82, -29.24, -119.65, 0.00 -83, -26.52, -98.60, 0.00 -84, -23.07, -77.82, 0.00 -85, -18.81, -57.42, 0.00 -86, -13.61, -37.46, 0.00 -87, -7.31, -18.07, 0.00 -88, 0.25, 0.55, 0.00 -89, 9.28, 18.15, 0.00 -90, 20.00, 34.31, 0.00 -91, 32.69, 48.60, 0.00 -92, 47.51, 60.17, 0.00 -93, 64.67, 68.19, 0.00 -94, 84.00, 71.35, 0.00 -95, 104.26, 67.91, 0.00 -96, 123.59, 56.65, 0.00 -97, 139.79, 37.83, 0.00 -98, 109.03, 14.63, 0.00 -99, 71.37, -0.00, 0.00 -100, 106.71, -14.32, 0.00 -101, 131.85, -35.68, 0.00 -102, 110.88, -50.82, 0.00 -103, 88.07, -57.36, 0.00 -104, 65.47, -55.62, 0.00 -105, 44.83, -47.26, 0.00 -106, 27.03, -34.23, 0.00 -107, 12.07, -17.95, 0.00 -108, -0.39, 0.67, 0.00 -109, -10.68, 20.88, 0.00 -110, -19.12, 42.19, 0.00 -111, -25.97, 64.20, 0.00 -112, -31.53, 86.81, 0.00 -113, -35.96, 109.75, 0.00 -114, -39.44, 133.01, 0.00 -115, -42.10, 156.51, 0.00 -116, -44.03, 180.14, 0.00 -117, -45.33, 203.94, 0.00 -118, -46.04, 227.76, 0.00 -119, -46.21, 251.54, 0.00 -120, -45.93, 275.39, 0.00 -121, -45.17, 298.97, 0.00 -122, -44.03, 322.56, 0.00 -123, -42.51, 345.93, 0.00 -124, -40.61, 368.71, 0.00 -125, -38.41, 391.41, 0.00 -126, -35.95, 414.07, 0.00 -127, -33.22, 436.26, 0.00 -128, -30.23, 457.86, 0.00 -129, -27.02, 478.79, 0.00 -130, -23.63, 499.23, 0.00 -131, -20.08, 519.16, 0.00 -132, -16.39, 538.35, 0.00 -133, -12.59, 557.00, 0.00 -134, -8.70, 574.66, 0.00 -135, -4.74, 591.49, 0.00 -136, -0.75, 607.88, 0.00 -137, 3.26, 623.17, 0.00 -138, 7.26, 637.30, 0.00 -139, 11.24, 650.91, 0.00 -140, 15.18, 663.54, 0.00 -141, 19.03, 674.74, 0.00 -142, 22.82, 685.17, 0.00 -143, 26.50, 694.80, 0.00 -144, 30.07, 703.15, 0.00 -145, 33.50, 710.22, 0.00 -146, 36.80, 716.44, 0.00 -147, 39.96, 721.63, 0.00 -148, 42.95, 725.58, 0.00 -149, 45.78, 728.71, 0.00 -150, 48.38, 729.69, 0.00 -151, 50.59, 726.67, 0.00 -152, 54.68, 751.14, 0.00 -153, 51.25, 675.81, 0.00 -154, 6.97, 88.47, 0.00 -155, -0.21, -2.53, 0.00 -156, 3.40, 40.39, 0.00 -157, 3.83, 44.10, 0.00 -158, 4.05, 45.38, 0.00 -159, 4.28, 46.69, 0.00 -160, 4.30, 45.78, 0.00 -161, 4.17, 43.39, 0.00 -162, 3.93, 39.96, 0.00 -163, 3.59, 35.69, 0.00 -164, 3.16, 30.80, 0.00 -165, 2.66, 25.45, 0.00 -166, 2.10, 19.75, 0.00 -167, 1.50, 13.82, 0.00 -168, 0.86, 7.76, 0.00 -169, 0.18, 1.63, 0.00 -170, -0.51, -4.49, 0.00 -171, -1.22, -10.54, 0.00 -172, -1.93, -16.46, 0.00 -173, -2.65, -22.24, 0.00 -174, -3.36, -27.80, 0.00 -175, -4.05, -33.09, 0.00 -176, -4.73, -38.14, 0.00 -177, -5.39, -42.85, 0.00 -178, -6.01, -47.20, 0.00 -179, -6.59, -51.20, 0.00 -180, -7.13, -54.76, 0.00 -181, -7.62, -57.91, 0.00 -182, -8.06, -60.60, 0.00 -183, -8.43, -62.77, 0.00 -184, -8.74, -64.50, 0.00 -185, -8.98, -65.68, 0.00 -186, -9.13, -66.26, 0.00 -187, -9.20, -66.26, 0.00 -188, -9.17, -65.60, 0.00 -189, -9.06, -64.36, 0.00 -190, -8.84, -62.46, 0.00 -191, -8.52, -59.85, 0.00 -192, -8.08, -56.52, 0.00 -193, -7.52, -52.37, 0.00 -194, -6.86, -47.59, 0.00 -195, -6.05, -41.82, 0.00 -196, -5.11, -35.27, 0.00 -197, -4.04, -27.82, 0.00 -198, -2.82, -19.44, 0.00 +23, -3.30, 26.95, 0.00 +24, -2.52, 20.83, 0.00 +25, -1.83, 15.38, 0.00 +26, -1.10, 9.32, 0.00 +27, -0.30, 2.58, 0.00 +28, 0.54, -4.74, 0.00 +29, 1.27, -11.31, 0.00 +30, 2.07, -18.77, 0.00 +31, 2.78, -25.66, 0.00 +32, 3.64, -34.16, 0.00 +33, 4.24, -40.58, 0.00 +34, 5.02, -48.92, 0.00 +35, 5.62, -55.89, 0.00 +36, 6.45, -65.57, 0.00 +37, 6.88, -71.46, 0.00 +38, 7.68, -81.68, 0.00 +39, 8.23, -89.75, 0.00 +40, 8.88, -99.49, 0.00 +41, 8.38, -96.54, 0.00 +42, 8.92, -105.98, 0.00 +43, 8.75, -107.36, 0.00 +44, 9.24, -117.31, 0.00 +45, 8.45, -111.46, 0.00 +46, 9.71, -133.35, 0.00 +47, 12.07, -173.37, 0.00 +48, 13.95, -210.42, 0.00 +49, 19.53, -310.77, 0.00 +50, 19.52, -329.71, 0.00 +51, 20.99, -379.06, 0.00 +52, 18.74, -364.80, 0.00 +53, 22.24, -471.43, 0.00 +54, 28.85, -674.62, 0.00 +55, 24.25, -635.67, 0.00 +56, 20.07, -602.76, 0.00 +57, 16.22, -574.81, 0.00 +58, 12.92, -564.73, 0.00 +59, 9.64, -558.28, 0.00 +60, 6.24, -548.02, 0.00 +61, 2.80, -535.77, 0.00 +62, -0.65, -523.48, 0.00 +63, -4.08, -508.54, 0.00 +64, -7.48, -494.06, 0.00 +65, -10.81, -478.47, 0.00 +66, -14.10, -463.25, 0.00 +67, -17.28, -446.69, 0.00 +68, -20.30, -428.95, 0.00 +69, -23.11, -409.38, 0.00 +70, -25.77, -390.19, 0.00 +71, -28.01, -367.85, 0.00 +72, -30.08, -346.39, 0.00 +73, -32.00, -326.06, 0.00 +74, -34.11, -309.68, 0.00 +75, -35.55, -289.25, 0.00 +76, -36.49, -267.32, 0.00 +77, -36.76, -243.26, 0.00 +78, -37.46, -224.62, 0.00 +79, -36.25, -197.32, 0.00 +80, -35.86, -177.39, 0.00 +81, -36.96, -166.28, 0.00 +82, -36.72, -150.24, 0.00 +83, -34.67, -128.90, 0.00 +84, -32.48, -109.54, 0.00 +85, -27.16, -82.89, 0.00 +86, -22.61, -62.24, 0.00 +87, -17.42, -43.08, 0.00 +88, -11.00, -24.27, 0.00 +89, -5.33, -10.42, 0.00 +90, -1.40, -2.40, 0.00 +91, 4.47, 6.64, 0.00 +92, 0.11, 0.15, 0.00 +93, 23.59, 24.88, 0.00 +94, 15.05, 12.78, 0.00 +95, -33.88, -22.07, 0.00 +96, 16.22, 7.43, 0.00 +97, 104.26, 28.22, 0.00 +98, 96.39, 12.93, 0.00 +99, 33.50, -0.00, 0.00 +100, 61.89, -8.30, 0.00 +101, 72.89, -19.73, 0.00 +102, 64.87, -29.73, 0.00 +103, 13.49, -8.79, 0.00 +104, 6.35, -5.39, 0.00 +105, -10.34, 10.91, 0.00 +106, -19.33, 24.49, 0.00 +107, -26.88, 39.96, 0.00 +108, -36.46, 62.56, 0.00 +109, -34.87, 68.19, 0.00 +110, -43.46, 95.93, 0.00 +111, -48.25, 119.30, 0.00 +112, -49.74, 136.95, 0.00 +113, -48.73, 148.75, 0.00 +114, -53.22, 179.49, 0.00 +115, -53.35, 198.34, 0.00 +116, -53.66, 219.53, 0.00 +117, -54.24, 244.03, 0.00 +118, -54.40, 269.12, 0.00 +119, -53.64, 291.96, 0.00 +120, -52.19, 312.97, 0.00 +121, -51.03, 337.70, 0.00 +122, -49.40, 361.90, 0.00 +123, -47.02, 382.61, 0.00 +124, -44.47, 403.79, 0.00 +125, -41.74, 425.36, 0.00 +126, -38.82, 447.08, 0.00 +127, -35.53, 466.63, 0.00 +128, -32.16, 486.97, 0.00 +129, -28.61, 506.96, 0.00 +130, -24.95, 526.99, 0.00 +131, -21.13, 546.28, 0.00 +132, -17.19, 564.47, 0.00 +133, -13.21, 584.56, 0.00 +134, -9.08, 600.23, 0.00 +135, -4.95, 617.31, 0.00 +136, -0.78, 632.76, 0.00 +137, 3.39, 648.55, 0.00 +138, 7.53, 661.02, 0.00 +139, 11.67, 675.68, 0.00 +140, 15.72, 687.51, 0.00 +141, 19.71, 698.75, 0.00 +142, 23.57, 707.97, 0.00 +143, 27.34, 716.80, 0.00 +144, 31.03, 725.58, 0.00 +145, 34.59, 733.25, 0.00 +146, 37.91, 737.95, 0.00 +147, 41.39, 747.43, 0.00 +148, 44.18, 746.40, 0.00 +149, 44.85, 713.79, 0.00 +150, 47.45, 715.64, 0.00 +151, 54.53, 783.26, 0.00 +152, 62.30, 855.77, 0.00 +153, 50.66, 668.02, 0.00 +154, 36.44, 462.76, 0.00 +155, 26.23, 321.75, 0.00 +156, 18.84, 223.73, 0.00 +157, 6.30, 72.62, 0.00 +158, 3.96, 44.33, 0.00 +159, 3.58, 39.11, 0.00 +160, 3.38, 35.98, 0.00 +161, 3.70, 38.41, 0.00 +162, 3.02, 30.74, 0.00 +163, 2.56, 25.51, 0.00 +164, 1.90, 18.49, 0.00 +165, 1.74, 16.60, 0.00 +166, 0.98, 9.20, 0.00 +167, 0.36, 3.29, 0.00 +168, -0.32, -2.94, 0.00 +169, -0.78, -6.95, 0.00 +170, -1.58, -13.87, 0.00 +171, -2.13, -18.40, 0.00 +172, -2.81, -23.91, 0.00 +173, -3.22, -27.00, 0.00 +174, -3.97, -32.80, 0.00 +175, -4.54, -37.06, 0.00 +176, -5.07, -40.84, 0.00 +177, -5.53, -43.98, 0.00 +178, -6.21, -48.83, 0.00 +179, -6.66, -51.70, 0.00 +180, -7.10, -54.54, 0.00 +181, -7.49, -56.91, 0.00 +182, -7.87, -59.20, 0.00 +183, -8.09, -60.30, 0.00 +184, -8.29, -61.19, 0.00 +185, -8.35, -61.09, 0.00 +186, -8.55, -62.05, 0.00 +187, -8.49, -61.15, 0.00 +188, -8.48, -60.67, 0.00 +189, -8.34, -59.27, 0.00 +190, -8.10, -57.23, 0.00 +191, -7.72, -54.20, 0.00 +192, -7.23, -50.53, 0.00 +193, -6.70, -46.65, 0.00 +194, -6.06, -42.04, 0.00 +195, -5.28, -36.52, 0.00 +196, -4.45, -30.73, 0.00 +197, -3.54, -24.42, 0.00 +198, -2.50, -17.21, 0.00 diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 8e9ade16ea0c..1feaa7cfa105 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -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.965747, -1.848881, 2961.700000, 0.000000] + unst_deforming_naca0012.test_vals = [-1.965747, -1.848881, 2961.700000, 0.000000] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) From 6de8a52142c813f5b4ffd4ab8f07f4871b2e8c1f Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 14 Mar 2026 22:38:38 +0100 Subject: [PATCH 126/229] Update regression tests --- .../wedge/of_grad_combo.dat.ref | 8 +-- TestCases/hybrid_regression_AD.py | 3 +- TestCases/parallel_regression.py | 56 +++++++++---------- TestCases/serial_regression.py | 18 +++--- 4 files changed, 43 insertions(+), 42 deletions(-) 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 9e7d23efcaa4..c861e4fbd810 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.00770575 , 0.0001 - 1 , 0.00508228 , 0.0001 - 2 , 0.00250931 , 0.0001 - 3 , 0.000896287 , 0.0001 + 0 , 0.00763648 , 0.0001 + 1 , 0.00504898 , 0.0001 + 2 , 0.00249639 , 0.0001 + 3 , 0.000890798 , 0.0001 diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index e5a751d41d9c..756c32db7379 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -187,7 +187,8 @@ 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.223973, -1.654688, -0.004097, -0.000003] + discadj_pitchingNACA0012.tol = 0.005 + discadj_pitchingNACA0012.test_vals = [-1.224157, -1.651618, -0.004097, -0.000003] discadj_pitchingNACA0012.unsteady = True discadj_pitchingNACA0012.enabled_with_tsan = False test_list.append(discadj_pitchingNACA0012) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 2423d362419a..4301672cc6ec 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -236,7 +236,7 @@ def main(): wedge.cfg_dir = "euler/wedge" wedge.cfg_file = "inv_wedge_HLLC.cfg" wedge.test_iter = 20 - wedge.test_vals = [-1.308216, 4.363572, -0.237802, 0.041962] + wedge.test_vals = [-1.296189, 4.375714, -0.235637, 0.041589] test_list.append(wedge) # ONERA M6 Wing @@ -262,7 +262,7 @@ def main(): polar_naca0012.cfg_file = "inv_NACA0012.cfg" polar_naca0012.polar = True polar_naca0012.test_iter = 10 - polar_naca0012.test_vals = [-1.113609, 4.361071, 0.000427, 0.023153] + polar_naca0012.test_vals = [-1.107467, 4.365654, 0.006796, 0.025216] 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 @@ -310,7 +310,7 @@ def main(): flatplate.cfg_dir = "navierstokes/flatplate" flatplate.cfg_file = "lam_flatplate.cfg" flatplate.test_iter = 100 - flatplate.test_vals = [-7.613292, -2.141207, 0.001084, 0.036230, 2.361500, -2.325300, 0.000000, 0.000000] + flatplate.test_vals = [-7.436411, -1.956557, 0.001084, 0.036232, 2.361500, -2.325300, 0.000000, 0.000000] test_list.append(flatplate) # Custom objective function @@ -318,7 +318,7 @@ def main(): flatplate_udobj.cfg_dir = "user_defined_functions" flatplate_udobj.cfg_file = "lam_flatplate.cfg" flatplate_udobj.test_iter = 20 - flatplate_udobj.test_vals = [-7.488320, -2.009145, 0.001084, 0.036247, 2.361500, -2.325300, 0.000000, 0.000000] + flatplate_udobj.test_vals = [-0.001015, 596.450000, 299.550000, 296.900000, 21.318000, 0.586640, 36.553000, 2.188800] test_list.append(flatplate_udobj) # Probe performance test (11 probes, ADT path) @@ -335,7 +335,7 @@ def main(): cylinder.cfg_dir = "navierstokes/cylinder" cylinder.cfg_file = "lam_cylinder.cfg" cylinder.test_iter = 25 - cylinder.test_vals = [-8.484215, -2.995693, -0.007163, 1.601414, 0.000000] + cylinder.test_vals = [-8.486555, -2.997719, -0.006044, 1.601479, 0.000000] test_list.append(cylinder) # Laminar cylinder (low Mach correction) @@ -343,7 +343,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.490398, -1.028528, -0.149830, -141.498221, 0.000000] + cylinder_lowmach.test_vals = [-6.388898, -0.927029, -0.590968, -132.145318, 0.000000] test_list.append(cylinder_lowmach) # 2D Poiseuille flow (body force driven with periodic inlet / outlet) @@ -360,7 +360,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.011853, -7.672985, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.011758, -7.669453, -0.000000, 2.089953] poiseuille_profile.test_vals_aarch64 = [-12.007498, -7.226926, -0.000000, 2.089953] test_list.append(poiseuille_profile) @@ -373,7 +373,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 = [-1.813393, -5.141451, 0.685984, 0.032019, 0.000000] + rae2822_sa.test_vals = [-1.850422, -5.131788, 0.571589, 0.042386, 0.000000] test_list.append(rae2822_sa) # RAE2822 SST @@ -381,7 +381,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 = [-0.509972, 5.229105, 0.601704, 0.013220, 0.000000] + rae2822_sst.test_vals = [-0.509872, 5.867970, 0.575399, 0.016441, 0.000000] test_list.append(rae2822_sst) # RAE2822 SST_SUST @@ -389,7 +389,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.473983, 5.229105, 0.601704, 0.013220] + rae2822_sst_sust.test_vals = [-2.464677, 5.867970, 0.575399, 0.016441] test_list.append(rae2822_sst_sust) # Flat plate @@ -397,7 +397,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 = [-3.966255, -6.830370, -0.198132, 0.022553] + turb_flatplate.test_vals = [-3.944613, -6.827069, -0.192592, 0.023549] test_list.append(turb_flatplate) # Flat plate (compressible) with species inlet @@ -405,7 +405,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 = [-3.946196, -1.084969, -1.496278, 1.527583, -3.293946, 9.000000, -6.133018, 5.000000, -6.620066, 10.000000, -5.669045, 0.999913, 0.999913] + turb_flatplate_species.test_vals = [-3.901196, -1.030304, -1.390862, 1.596603, -3.294825, 9.000000, -6.033863, 5.000000, -6.604787, 10.000000, -5.749978, 0.999917, 0.999917] test_list.append(turb_flatplate_species) # Flat plate SST compressibility correction Wilcox @@ -577,7 +577,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.604004, -5.057159, 0.830274, -0.008167, 0.077889] + turb_naca0012_sst_restart_mg.test_vals = [-6.605858, -5.057159, 0.830274, -0.008419, 0.077910] turb_naca0012_sst_restart_mg.timeout = 3200 turb_naca0012_sst_restart_mg.tol = 0.000001 test_list.append(turb_naca0012_sst_restart_mg) @@ -591,7 +591,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 = [-7.156010, -6.592360, 0.531999, 0.008466] + inc_euler_naca0012.test_vals = [-7.155691, -6.591881, 0.531999, 0.008466] test_list.append(inc_euler_naca0012) # C-D nozzle with pressure inlet and mass flow outlet @@ -599,7 +599,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 = [-4.692695, -4.147623, 0.005125, 0.159938] + inc_nozzle.test_vals = [-4.867594, -4.435604, -0.006083, 0.131415] test_list.append(inc_nozzle) # Laminar wall mounted cylinder, Euler walls, cylinder wall diagonally split @@ -619,7 +619,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 = [-3.995539, -3.270342, -0.100583, 6.567311] + inc_lam_cylinder.test_vals = [-3.959383, -3.272502, -0.087725, 6.769520] test_list.append(inc_lam_cylinder) # Laminar sphere, Re=1. Last column: Cd=24/Re @@ -627,7 +627,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.373846, -9.382816, 0.121003, 25.782686] + inc_lam_sphere.test_vals = [-8.377082, -9.393391, 0.121003, 25.782686] test_list.append(inc_lam_sphere) # Buoyancy-driven cavity @@ -765,7 +765,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 = [-1.813393, 0.818366, 0.644951, -5.141451, 0.685984, 0.032019] + turbmod_sa_bsl_rae2822.test_vals = [-1.850422, 0.801378, 0.576701, -5.131788, 0.571589, 0.042386] test_list.append(turbmod_sa_bsl_rae2822) # SA Negative @@ -782,7 +782,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 = [-1.813396, 0.818361, 0.644949, -5.141555, 0.685988, 0.032021] + turbmod_sa_comp_rae2822.test_vals = [-1.850425, 0.801375, 0.576699, -5.131880, 0.571592, 0.042388] test_list.append(turbmod_sa_comp_rae2822) # SA Edwards @@ -790,7 +790,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 = [-1.813370, 0.818386, 0.644973, -5.177642, 0.685990, 0.032017] + turbmod_sa_edw_rae2822.test_vals = [-1.850407, 0.801397, 0.576716, -5.168509, 0.571594, 0.042384] test_list.append(turbmod_sa_edw_rae2822) # SA Compressibility and Edwards @@ -798,7 +798,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 = [-1.813375, 0.818380, 0.644969, -5.177681, 0.685994, 0.032020] + turbmod_sa_comp_edw_rae2822.test_vals = [-1.850411, 0.801392, 0.576713, -5.168535, 0.571597, 0.042387] test_list.append(turbmod_sa_comp_edw_rae2822) # SA QCR @@ -806,7 +806,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 = [-1.813960, 0.818091, 0.644509, -5.141963, 0.685849, 0.032055] + turbmod_sa_qcr_rae2822.test_vals = [-1.848614, 0.801975, 0.578549, -5.131053, 0.571093, 0.042439] test_list.append(turbmod_sa_qcr_rae2822) ############################ @@ -830,7 +830,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.586529, -15.036640, -0.726250, 0.020280] + contadj_naca0012.test_vals = [-9.587467, -15.030897, -0.726250, 0.020280] contadj_naca0012.test_vals_aarch64 = [-9.662546, -14.998818, -0.726250, 0.020280] test_list.append(contadj_naca0012) @@ -855,7 +855,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 = [0.837601, -4.799651, -0.371420, -0.000601] + contadj_fixed_CL_naca0012.test_vals = [0.838162, -4.799384, -0.379430, -0.000628] test_list.append(contadj_fixed_CL_naca0012) ################################### @@ -867,7 +867,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.600568, -9.041782, 2.056700, -0.000000] + contadj_ns_cylinder.test_vals = [-3.600450, -9.041799, 2.056700, -0.000000] test_list.append(contadj_ns_cylinder) # Adjoint laminar naca0012 subsonic @@ -991,7 +991,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 = [-2.603551, 2.924633, -0.081272, 0.002162] + rot_naca0012.test_vals = [-1.412607, 4.090722, -0.021973, 0.057457] test_list.append(rot_naca0012) # Lid-driven cavity @@ -999,7 +999,7 @@ def main(): cavity.cfg_dir = "moving_wall/cavity" cavity.cfg_file = "lam_cavity.cfg" cavity.test_iter = 25 - cavity.test_vals = [-5.348408, 0.117949, -0.454913, -5.607752] + cavity.test_vals = [-5.450215, 0.015635, 0.011950, -9.224629] test_list.append(cavity) # Spinning cylinder @@ -1007,7 +1007,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.710894, -2.258032, 1.684241, 1.582301] + spinning_cylinder.test_vals = [-7.707122, -2.253704, 1.633997, 1.546081] test_list.append(spinning_cylinder) ###################################### diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 4dcc1dddee2e..462315568ead 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -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.751143, 1.788901, 0.301332, 0.019499] + fixedCL_naca0012.test_vals = [-3.751251, 1.788794, 0.301332, 0.019499] test_list.append(fixedCL_naca0012) # Polar sweep of the inviscid NACA0012 @@ -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 = [-2.610126, 2.922809, -0.080488, 0.002170] + rot_naca0012.test_vals = [-1.413477, 4.090702, -0.024889, 0.056654] test_list.append(rot_naca0012) # Lid-driven cavity @@ -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.977321, 3.481877, 0.001061, -0.007623] + sine_gust.test_vals = [-1.977498, 3.481817, -0.010233, -0.007786] 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 = [0.069117, 0.027439, -0.001827, 0.000019] + aeroelastic.test_vals = [0.075274, 0.027537, -0.001640, -0.000129] aeroelastic.unsteady = True test_list.append(aeroelastic) @@ -825,7 +825,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.659044, -3.761890, -3.698754, -3.138451] + unst_deforming_naca0012.test_vals = [-3.665164, -3.793367, -3.716518, -3.148356] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) @@ -1499,7 +1499,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.117840, 3.758531] + opt_multiobj1surf_py.test_vals = [1.000000, 1.000000, 36.178490, 3.891506] 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 @@ -1512,7 +1512,7 @@ def main(): opt_2surf1obj_py.cfg_dir = "optimization_euler/multiobjective_wedge" opt_2surf1obj_py.cfg_file = "inv_wedge_ROE_2surf_1obj.cfg" opt_2surf1obj_py.test_iter = 1 - opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 36.178490, 3.891506] + opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 2.005074, 0.000323] opt_2surf1obj_py.command = TestCase.Command(exec = "shape_optimization.py", param = "-g CONTINUOUS_ADJOINT -f") opt_2surf1obj_py.timeout = 1600 opt_2surf1obj_py.tol = 0.00001 @@ -1570,10 +1570,10 @@ def main(): pywrapper_aeroelastic.cfg_dir = "aeroelastic" pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [0.069117, 0.027439, -0.001827, 0.000019] + pywrapper_aeroelastic.test_vals = [0.075274, 0.027537, -0.001640, -0.000129] pywrapper_aeroelastic.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_aeroelastic.timeout = 1600 - pywrapper_aeroelastic.tol = 0.00001 + pywrapper_aeroelastic.tol = 0.01 pywrapper_aeroelastic.unsteady = True pywrapper_aeroelastic.enabled_with_asan = False test_list.append(pywrapper_aeroelastic) From 1947d57ae82c734c97f5d341cbf1bd05d825a494 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 14 Mar 2026 23:51:09 +0100 Subject: [PATCH 127/229] change the mg adaptive cfl to passivedouble --- .../integration/CMultiGridIntegration.hpp | 11 +- .../src/integration/CMultiGridIntegration.cpp | 15 +- TestCases/hybrid_regression_AD.py | 2 +- TestCases/parallel_regression.py | 6 +- .../translating_NACA0012/forces_0.csv.ref | 400 +++++++++--------- .../forces_0.csv.ref | 398 ++++++++--------- 6 files changed, 420 insertions(+), 412 deletions(-) diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index fbc568bd7fc1..fee75c797f40 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -192,11 +192,14 @@ class CMultiGridIntegration final : public CIntegration { passivedouble computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, unsigned short iMesh, passivedouble CFL_fine, passivedouble CFL_coarse_current); - /*--- CFL adaptation state variables ---*/ + /*--- 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; - su2double current_avg[MAX_MG_LEVELS] = {}; - su2double prev_avg[MAX_MG_LEVELS] = {}; - su2double last_res[MAX_MG_LEVELS] = {}; + 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] = {}; diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index b68f4df3d4e4..a46d6fdbdc38 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -133,21 +133,23 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve unsigned long iter = current_iter; /*--- Get sum of all RMS residuals for all variables (local to this rank) ---*/ + /*--- Use su2double for MPI buffers (MeDiPack requires sizeof(su2double) per element ---*/ + /*--- when MPI_DOUBLE is used, since convertDatatype maps it to AMPI_ADOUBLE). ---*/ su2double rms_res_coarse_local = 0.0; for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { - rms_res_coarse_local += solver_coarse->GetRes_RMS(iVar); + rms_res_coarse_local += SU2_TYPE::GetValue(solver_coarse->GetRes_RMS(iVar)); } /*--- MPI synchronization: ensure all ranks use the same global residual value ---*/ /*--- This is critical for consistent CFL adaptation across all ranks ---*/ - su2double rms_res_coarse = rms_res_coarse_local; + passivedouble rms_res_coarse = SU2_TYPE::GetValue(rms_res_coarse_local); /*--- For coarse grids, residuals are not globally reduced by default ---*/ /*--- We need to synchronize them for consistent adaptive CFL decisions ---*/ if (geometry_coarse->GetMGLevel() > 0) { su2double rms_global_sum = 0.0; SU2_MPI::Allreduce(&rms_res_coarse_local, &rms_global_sum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - rms_res_coarse = rms_global_sum / static_cast(SU2_MPI::GetSize()); + rms_res_coarse = SU2_TYPE::GetValue(rms_global_sum) / static_cast(SU2_MPI::GetSize()); } /*--- Flip-flop detection: detect oscillating residuals (once per outer iteration) ---*/ @@ -196,7 +198,7 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve /*--- Asymmetric adaptation for robustness ---*/ if (prev_avg[lvl] > EPS) { - su2double ratio = current_avg[lvl] / prev_avg[lvl]; + passivedouble ratio = current_avg[lvl] / prev_avg[lvl]; bool sufficient_decrease = (ratio < MIN_REDUCTION_FACTOR); bool increasing_trend = (ratio >= 1.0); @@ -231,7 +233,10 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve #ifdef HAVE_MPI /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ - SU2_MPI::Bcast(&CFL_coarse_new, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); + /*--- Use su2double buffer for MeDiPack compatibility. ---*/ + su2double CFL_bcast = CFL_coarse_new; + SU2_MPI::Bcast(&CFL_bcast, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); + CFL_coarse_new = SU2_TYPE::GetValue(CFL_bcast); #endif /*--- Update the shared config object (wrapped to prevent tape recording) ---*/ diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 756c32db7379..49d56cf8675b 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -187,8 +187,8 @@ 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.tol = 0.005 discadj_pitchingNACA0012.test_vals = [-1.224157, -1.651618, -0.004097, -0.000003] + discadj_pitchingNACA0012.tol = 0.01 discadj_pitchingNACA0012.unsteady = True discadj_pitchingNACA0012.enabled_with_tsan = False test_list.append(discadj_pitchingNACA0012) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 4301672cc6ec..75201c13cae1 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -220,7 +220,7 @@ def main(): channel.cfg_dir = "euler/channel" channel.cfg_file = "inv_channel_RK.cfg" channel.test_iter = 20 - channel.test_vals = [-2.370377, 3.168384, 0.124246, 0.142878] + channel.test_vals = [-2.343552, 3.197189, 0.123534, 0.148052] test_list.append(channel) # NACA0012 @@ -228,7 +228,7 @@ def main(): naca0012.cfg_dir = "euler/naca0012" naca0012.cfg_file = "inv_NACA0012_Roe.cfg" naca0012.test_iter = 20 - naca0012.test_vals = [-5.024272, -4.487585, 0.332525, 0.023058] + naca0012.test_vals = [-4.877597, -4.355615, 0.331699, 0.022976] test_list.append(naca0012) # Supersonic wedge @@ -253,7 +253,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.811341, 1.726020, 0.301248, 0.019495] + fixedCL_naca0012.test_vals = [-3.802419, 1.735767, 0.301252, 0.019495] test_list.append(fixedCL_naca0012) # Polar sweep of the inviscid NACA0012 diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index 3151e051c6ca..f93cf1204d2a 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.88, -0.00, 0.00 -0, -2.71, 18.66, 0.00 -1, -3.86, 26.57, 0.00 -2, -4.80, 33.11, 0.00 -3, -5.62, 38.86, 0.00 -4, -6.32, 43.81, 0.00 -5, -6.90, 48.06, 0.00 -6, -7.37, 51.53, 0.00 -7, -7.73, 54.32, 0.00 -8, -7.96, 56.24, 0.00 -9, -8.12, 57.72, 0.00 -10, -8.15, 58.28, 0.00 -11, -8.09, 58.28, 0.00 -12, -7.92, 57.49, 0.00 -13, -7.73, 56.53, 0.00 -14, -7.39, 54.53, 0.00 -15, -6.97, 51.92, 0.00 -16, -6.51, 49.01, 0.00 -17, -6.02, 45.79, 0.00 -18, -5.42, 41.63, 0.00 -19, -4.77, 37.09, 0.00 -20, -4.09, 32.15, 0.00 -21, -3.36, 26.73, 0.00 -22, -2.58, 20.79, 0.00 -23, -1.79, 14.58, 0.00 -24, -0.97, 8.03, 0.00 -25, -0.07, 0.56, 0.00 -26, 0.79, -6.72, 0.00 -27, 1.63, -14.10, 0.00 -28, 2.48, -21.75, 0.00 -29, 3.35, -29.89, 0.00 -30, 4.19, -38.01, 0.00 -31, 5.08, -46.84, 0.00 -32, 5.96, -55.91, 0.00 -33, 6.92, -66.20, 0.00 -34, 7.78, -75.86, 0.00 -35, 8.66, -86.15, 0.00 -36, 9.47, -96.30, 0.00 -37, 10.34, -107.47, 0.00 -38, 11.06, -117.71, 0.00 -39, 11.80, -128.75, 0.00 -40, 12.49, -139.94, 0.00 -41, 13.54, -155.97, 0.00 -42, 14.18, -168.40, 0.00 -43, 14.97, -183.61, 0.00 -44, 15.45, -196.23, 0.00 -45, 16.40, -216.32, 0.00 -46, 16.67, -228.99, 0.00 -47, 17.18, -246.82, 0.00 -48, 16.93, -255.36, 0.00 -49, 17.02, -270.90, 0.00 -50, 16.40, -277.14, 0.00 -51, 15.89, -286.97, 0.00 -52, 15.14, -294.64, 0.00 -53, 14.45, -306.42, 0.00 -54, 13.16, -307.67, 0.00 -55, 11.49, -301.17, 0.00 -56, 9.49, -284.88, 0.00 -57, 6.89, -244.24, 0.00 -58, 6.39, -279.56, 0.00 -59, 6.36, -368.07, 0.00 -60, 4.82, -422.88, 0.00 -61, 2.33, -444.54, 0.00 -62, -0.54, -440.79, 0.00 -63, -3.51, -437.25, 0.00 -64, -6.50, -429.63, 0.00 -65, -9.50, -420.22, 0.00 -66, -12.45, -408.79, 0.00 -67, -15.32, -396.01, 0.00 -68, -18.07, -381.73, 0.00 -69, -20.77, -368.01, 0.00 -70, -23.28, -352.48, 0.00 -71, -25.74, -337.96, 0.00 -72, -27.22, -313.53, 0.00 -73, -29.68, -302.45, 0.00 -74, -31.40, -285.07, 0.00 -75, -33.05, -268.92, 0.00 -76, -33.65, -246.51, 0.00 -77, -35.60, -235.59, 0.00 -78, -35.65, -213.78, 0.00 -79, -35.65, -194.05, 0.00 -80, -34.22, -169.31, 0.00 -81, -37.22, -167.47, 0.00 -82, -34.76, -142.23, 0.00 -83, -34.51, -128.31, 0.00 -84, -29.69, -100.14, 0.00 -85, -29.57, -90.27, 0.00 -86, -23.83, -65.62, 0.00 -87, -22.14, -54.75, 0.00 -88, -12.87, -28.41, 0.00 -89, -14.66, -28.66, 0.00 -90, -5.66, -9.72, 0.00 -91, -18.30, -27.20, 0.00 -92, -12.65, -16.02, 0.00 -93, -25.35, -26.73, 0.00 -94, -20.20, -17.16, 0.00 -95, -0.68, -0.44, 0.00 -96, 8.45, 3.87, 0.00 -97, 65.07, 17.61, 0.00 -98, 68.49, 9.19, 0.00 -99, 36.97, -0.00, 0.00 -100, 47.84, -6.42, 0.00 -101, 13.76, -3.72, 0.00 -102, -36.44, 16.70, 0.00 -103, -6.34, 4.13, 0.00 -104, -25.51, 21.67, 0.00 -105, -10.51, 11.09, 0.00 -106, -26.82, 33.96, 0.00 -107, -35.34, 52.54, 0.00 -108, -46.90, 80.48, 0.00 -109, -45.33, 88.66, 0.00 -110, -54.15, 119.51, 0.00 -111, -56.93, 140.77, 0.00 -112, -62.40, 171.81, 0.00 -113, -58.31, 178.00, 0.00 -114, -61.87, 208.66, 0.00 -115, -62.35, 231.79, 0.00 -116, -63.16, 258.42, 0.00 -117, -61.96, 278.79, 0.00 -118, -62.87, 311.05, 0.00 -119, -61.58, 335.20, 0.00 -120, -60.20, 360.99, 0.00 -121, -57.08, 377.80, 0.00 -122, -55.22, 404.50, 0.00 -123, -52.22, 424.95, 0.00 -124, -49.44, 448.92, 0.00 -125, -45.84, 467.05, 0.00 -126, -42.55, 490.04, 0.00 -127, -38.95, 511.56, 0.00 -128, -35.26, 534.04, 0.00 -129, -31.20, 552.85, 0.00 -130, -27.18, 574.24, 0.00 -131, -22.98, 593.99, 0.00 -132, -18.69, 613.95, 0.00 -133, -14.23, 629.58, 0.00 -134, -9.80, 647.63, 0.00 -135, -5.32, 663.19, 0.00 -136, -0.84, 680.20, 0.00 -137, 3.63, 693.76, 0.00 -138, 8.08, 708.67, 0.00 -139, 12.47, 721.74, 0.00 -140, 16.81, 735.00, 0.00 -141, 21.03, 745.51, 0.00 -142, 25.19, 756.59, 0.00 -143, 29.25, 766.64, 0.00 -144, 33.18, 775.81, 0.00 -145, 36.95, 783.28, 0.00 -146, 40.57, 789.70, 0.00 -147, 44.02, 794.92, 0.00 -148, 47.30, 799.22, 0.00 -149, 50.45, 802.94, 0.00 -150, 53.37, 804.92, 0.00 -151, 56.01, 804.40, 0.00 -152, 58.61, 805.20, 0.00 -153, 61.56, 811.80, 0.00 -154, 63.83, 810.68, 0.00 -155, 65.72, 806.13, 0.00 -156, 67.55, 802.24, 0.00 -157, 26.15, 301.34, 0.00 -158, -17.39, -194.80, 0.00 -159, -0.44, -4.85, 0.00 -160, 14.16, 150.66, 0.00 -161, 8.61, 89.49, 0.00 -162, 7.78, 79.12, 0.00 -163, 5.96, 59.30, 0.00 -164, 5.85, 57.06, 0.00 -165, 4.10, 39.20, 0.00 -166, 3.74, 35.15, 0.00 -167, 2.87, 26.47, 0.00 -168, 2.37, 21.47, 0.00 -169, 1.46, 13.02, 0.00 -170, 0.94, 8.23, 0.00 -171, 0.07, 0.62, 0.00 -172, -0.60, -5.09, 0.00 -173, -1.46, -12.23, 0.00 -174, -2.07, -17.12, 0.00 -175, -2.82, -23.01, 0.00 -176, -3.48, -28.02, 0.00 -177, -4.19, -33.32, 0.00 -178, -4.74, -37.26, 0.00 -179, -5.38, -41.79, 0.00 -180, -5.93, -45.55, 0.00 -181, -6.41, -48.74, 0.00 -182, -6.87, -51.68, 0.00 -183, -7.27, -54.13, 0.00 -184, -7.63, -56.29, 0.00 -185, -7.84, -57.36, 0.00 -186, -8.08, -58.63, 0.00 -187, -8.16, -58.76, 0.00 -188, -8.17, -58.43, 0.00 -189, -8.11, -57.61, 0.00 -190, -7.95, -56.12, 0.00 -191, -7.67, -53.88, 0.00 -192, -7.30, -51.00, 0.00 -193, -6.77, -47.14, 0.00 -194, -6.19, -42.94, 0.00 -195, -5.47, -37.84, 0.00 -196, -4.64, -32.00, 0.00 -197, -3.69, -25.42, 0.00 -198, -2.55, -17.52, 0.00 +199, -0.91, -0.00, 0.00 +0, -2.74, 18.89, 0.00 +1, -3.93, 27.09, 0.00 +2, -4.93, 34.02, 0.00 +3, -5.79, 40.08, 0.00 +4, -6.55, 45.45, 0.00 +5, -7.17, 49.89, 0.00 +6, -7.69, 53.77, 0.00 +7, -8.09, 56.82, 0.00 +8, -8.38, 59.18, 0.00 +9, -8.56, 60.85, 0.00 +10, -8.65, 61.82, 0.00 +11, -8.62, 62.09, 0.00 +12, -8.51, 61.74, 0.00 +13, -8.31, 60.81, 0.00 +14, -8.02, 59.21, 0.00 +15, -7.64, 56.88, 0.00 +16, -7.22, 54.31, 0.00 +17, -6.72, 51.09, 0.00 +18, -6.15, 47.26, 0.00 +19, -5.53, 42.94, 0.00 +20, -4.87, 38.30, 0.00 +21, -4.14, 32.91, 0.00 +22, -3.39, 27.29, 0.00 +23, -2.62, 21.40, 0.00 +24, -1.82, 15.07, 0.00 +25, -0.92, 7.68, 0.00 +26, -0.09, 0.75, 0.00 +27, 0.71, -6.17, 0.00 +28, 1.56, -13.70, 0.00 +29, 2.47, -22.03, 0.00 +30, 3.33, -30.22, 0.00 +31, 4.23, -39.01, 0.00 +32, 5.11, -48.00, 0.00 +33, 6.08, -58.16, 0.00 +34, 6.92, -67.48, 0.00 +35, 7.78, -77.43, 0.00 +36, 8.58, -87.17, 0.00 +37, 9.43, -97.99, 0.00 +38, 10.13, -107.83, 0.00 +39, 10.87, -118.63, 0.00 +40, 11.55, -129.43, 0.00 +41, 12.59, -145.08, 0.00 +42, 13.18, -156.48, 0.00 +43, 13.92, -170.68, 0.00 +44, 14.34, -182.18, 0.00 +45, 15.32, -201.98, 0.00 +46, 15.48, -212.70, 0.00 +47, 15.78, -226.70, 0.00 +48, 15.35, -231.55, 0.00 +49, 15.10, -240.31, 0.00 +50, 14.34, -242.24, 0.00 +51, 13.44, -242.75, 0.00 +52, 12.57, -244.71, 0.00 +53, 11.26, -238.67, 0.00 +54, 10.25, -239.73, 0.00 +55, 8.75, -229.42, 0.00 +56, 7.50, -225.38, 0.00 +57, 5.92, -209.82, 0.00 +58, 6.05, -264.66, 0.00 +59, 6.24, -361.05, 0.00 +60, 4.60, -403.57, 0.00 +61, 2.18, -416.34, 0.00 +62, -0.50, -408.93, 0.00 +63, -3.26, -406.38, 0.00 +64, -6.02, -397.52, 0.00 +65, -8.81, -390.00, 0.00 +66, -11.49, -377.49, 0.00 +67, -14.15, -365.86, 0.00 +68, -16.63, -351.35, 0.00 +69, -19.07, -337.95, 0.00 +70, -21.26, -322.02, 0.00 +71, -23.50, -308.57, 0.00 +72, -25.02, -288.10, 0.00 +73, -26.60, -271.06, 0.00 +74, -27.96, -253.91, 0.00 +75, -29.40, -239.25, 0.00 +76, -30.14, -220.80, 0.00 +77, -31.03, -205.35, 0.00 +78, -31.47, -188.72, 0.00 +79, -32.07, -174.58, 0.00 +80, -31.52, -155.94, 0.00 +81, -30.60, -137.66, 0.00 +82, -27.77, -113.62, 0.00 +83, -25.68, -95.47, 0.00 +84, -22.10, -74.55, 0.00 +85, -19.36, -59.10, 0.00 +86, -14.79, -40.72, 0.00 +87, -11.57, -28.60, 0.00 +88, -5.93, -13.09, 0.00 +89, -5.78, -11.30, 0.00 +90, 10.04, 17.22, 0.00 +91, 8.11, 12.05, 0.00 +92, 24.84, 31.45, 0.00 +93, 15.61, 16.46, 0.00 +94, 41.46, 35.22, 0.00 +95, 107.47, 70.00, 0.00 +96, 123.94, 56.81, 0.00 +97, 96.06, 26.00, 0.00 +98, 64.50, 8.66, 0.00 +99, 41.97, -0.00, 0.00 +100, 53.05, -7.12, 0.00 +101, 47.69, -12.91, 0.00 +102, 7.13, -3.27, 0.00 +103, 0.17, -0.11, 0.00 +104, -23.31, 19.80, 0.00 +105, -1.56, 1.64, 0.00 +106, -19.78, 25.05, 0.00 +107, -22.42, 33.33, 0.00 +108, -35.46, 60.84, 0.00 +109, -36.05, 70.50, 0.00 +110, -44.36, 97.90, 0.00 +111, -48.57, 120.08, 0.00 +112, -54.59, 150.30, 0.00 +113, -53.32, 162.74, 0.00 +114, -57.67, 194.49, 0.00 +115, -58.29, 216.69, 0.00 +116, -59.24, 242.39, 0.00 +117, -58.18, 261.79, 0.00 +118, -58.92, 291.51, 0.00 +119, -58.05, 315.99, 0.00 +120, -57.33, 343.75, 0.00 +121, -54.66, 361.75, 0.00 +122, -53.39, 391.09, 0.00 +123, -50.64, 412.03, 0.00 +124, -48.03, 436.14, 0.00 +125, -44.60, 454.44, 0.00 +126, -41.43, 477.17, 0.00 +127, -37.94, 498.18, 0.00 +128, -34.33, 519.97, 0.00 +129, -30.44, 539.30, 0.00 +130, -26.55, 560.91, 0.00 +131, -22.48, 581.17, 0.00 +132, -18.30, 601.21, 0.00 +133, -13.96, 617.52, 0.00 +134, -9.63, 635.95, 0.00 +135, -5.23, 652.43, 0.00 +136, -0.83, 669.37, 0.00 +137, 3.57, 682.91, 0.00 +138, 7.95, 697.68, 0.00 +139, 12.29, 711.49, 0.00 +140, 16.58, 724.74, 0.00 +141, 20.75, 735.52, 0.00 +142, 24.86, 746.64, 0.00 +143, 28.87, 756.87, 0.00 +144, 32.77, 766.13, 0.00 +145, 36.47, 773.03, 0.00 +146, 40.04, 779.33, 0.00 +147, 43.45, 784.66, 0.00 +148, 46.70, 789.00, 0.00 +149, 49.80, 792.55, 0.00 +150, 52.69, 794.66, 0.00 +151, 55.33, 794.71, 0.00 +152, 57.98, 796.42, 0.00 +153, 60.11, 792.71, 0.00 +154, 62.14, 789.23, 0.00 +155, 61.89, 759.10, 0.00 +156, 64.12, 761.46, 0.00 +157, 29.92, 344.78, 0.00 +158, -20.86, -233.68, 0.00 +159, -13.07, -142.62, 0.00 +160, 4.50, 47.87, 0.00 +161, 4.96, 51.57, 0.00 +162, 5.21, 52.99, 0.00 +163, 3.75, 37.28, 0.00 +164, 4.00, 39.00, 0.00 +165, 2.43, 23.23, 0.00 +166, 2.14, 20.06, 0.00 +167, 1.39, 12.85, 0.00 +168, 0.96, 8.72, 0.00 +169, 0.13, 1.19, 0.00 +170, -0.34, -2.97, 0.00 +171, -1.06, -9.17, 0.00 +172, -1.65, -14.08, 0.00 +173, -2.51, -21.02, 0.00 +174, -3.06, -25.32, 0.00 +175, -3.73, -30.45, 0.00 +176, -4.34, -34.94, 0.00 +177, -4.99, -39.67, 0.00 +178, -5.49, -43.14, 0.00 +179, -6.08, -47.27, 0.00 +180, -6.59, -50.62, 0.00 +181, -7.07, -53.74, 0.00 +182, -7.49, -56.36, 0.00 +183, -7.87, -58.61, 0.00 +184, -8.19, -60.45, 0.00 +185, -8.39, -61.39, 0.00 +186, -8.58, -62.28, 0.00 +187, -8.64, -62.21, 0.00 +188, -8.61, -61.60, 0.00 +189, -8.53, -60.57, 0.00 +190, -8.33, -58.81, 0.00 +191, -8.02, -56.34, 0.00 +192, -7.60, -53.16, 0.00 +193, -7.05, -49.06, 0.00 +194, -6.42, -44.55, 0.00 +195, -5.67, -39.20, 0.00 +196, -4.78, -33.02, 0.00 +197, -3.79, -26.13, 0.00 +198, -2.60, -17.88, 0.00 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 dac852963b51..52756ca11feb 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.94, -0.00, 0.00 -0, -2.61, 17.95, 0.00 -1, -3.60, 24.79, 0.00 -2, -4.53, 31.28, 0.00 -3, -5.37, 37.13, 0.00 -4, -6.11, 42.38, 0.00 -5, -6.69, 46.55, 0.00 -6, -7.18, 50.22, 0.00 -7, -7.61, 53.46, 0.00 -8, -7.89, 55.75, 0.00 -9, -8.11, 57.59, 0.00 -10, -8.26, 59.10, 0.00 -11, -8.33, 59.98, 0.00 -12, -8.28, 60.10, 0.00 -13, -8.11, 59.36, 0.00 -14, -7.90, 58.35, 0.00 -15, -7.64, 56.91, 0.00 -16, -7.24, 54.48, 0.00 -17, -6.78, 51.53, 0.00 -18, -6.36, 48.85, 0.00 -19, -5.88, 45.64, 0.00 -20, -5.26, 41.32, 0.00 -21, -4.65, 36.98, 0.00 -22, -4.01, 32.30, 0.00 -23, -3.30, 26.95, 0.00 -24, -2.52, 20.83, 0.00 -25, -1.83, 15.38, 0.00 -26, -1.10, 9.32, 0.00 -27, -0.30, 2.58, 0.00 -28, 0.54, -4.74, 0.00 -29, 1.27, -11.31, 0.00 -30, 2.07, -18.77, 0.00 -31, 2.78, -25.66, 0.00 -32, 3.64, -34.16, 0.00 -33, 4.24, -40.58, 0.00 -34, 5.02, -48.92, 0.00 -35, 5.62, -55.89, 0.00 -36, 6.45, -65.57, 0.00 -37, 6.88, -71.46, 0.00 -38, 7.68, -81.68, 0.00 -39, 8.23, -89.75, 0.00 -40, 8.88, -99.49, 0.00 -41, 8.38, -96.54, 0.00 -42, 8.92, -105.98, 0.00 -43, 8.75, -107.36, 0.00 -44, 9.24, -117.31, 0.00 -45, 8.45, -111.46, 0.00 -46, 9.71, -133.35, 0.00 -47, 12.07, -173.37, 0.00 -48, 13.95, -210.42, 0.00 -49, 19.53, -310.77, 0.00 -50, 19.52, -329.71, 0.00 -51, 20.99, -379.06, 0.00 -52, 18.74, -364.80, 0.00 -53, 22.24, -471.43, 0.00 -54, 28.85, -674.62, 0.00 -55, 24.25, -635.67, 0.00 -56, 20.07, -602.76, 0.00 -57, 16.22, -574.81, 0.00 -58, 12.92, -564.73, 0.00 -59, 9.64, -558.28, 0.00 -60, 6.24, -548.02, 0.00 -61, 2.80, -535.77, 0.00 -62, -0.65, -523.48, 0.00 -63, -4.08, -508.54, 0.00 -64, -7.48, -494.06, 0.00 -65, -10.81, -478.47, 0.00 -66, -14.10, -463.25, 0.00 -67, -17.28, -446.69, 0.00 -68, -20.30, -428.95, 0.00 -69, -23.11, -409.38, 0.00 -70, -25.77, -390.19, 0.00 -71, -28.01, -367.85, 0.00 -72, -30.08, -346.39, 0.00 -73, -32.00, -326.06, 0.00 -74, -34.11, -309.68, 0.00 -75, -35.55, -289.25, 0.00 -76, -36.49, -267.32, 0.00 -77, -36.76, -243.26, 0.00 -78, -37.46, -224.62, 0.00 -79, -36.25, -197.32, 0.00 -80, -35.86, -177.39, 0.00 -81, -36.96, -166.28, 0.00 -82, -36.72, -150.24, 0.00 -83, -34.67, -128.90, 0.00 -84, -32.48, -109.54, 0.00 -85, -27.16, -82.89, 0.00 -86, -22.61, -62.24, 0.00 -87, -17.42, -43.08, 0.00 -88, -11.00, -24.27, 0.00 -89, -5.33, -10.42, 0.00 -90, -1.40, -2.40, 0.00 -91, 4.47, 6.64, 0.00 -92, 0.11, 0.15, 0.00 -93, 23.59, 24.88, 0.00 -94, 15.05, 12.78, 0.00 -95, -33.88, -22.07, 0.00 -96, 16.22, 7.43, 0.00 -97, 104.26, 28.22, 0.00 -98, 96.39, 12.93, 0.00 -99, 33.50, -0.00, 0.00 -100, 61.89, -8.30, 0.00 -101, 72.89, -19.73, 0.00 -102, 64.87, -29.73, 0.00 -103, 13.49, -8.79, 0.00 -104, 6.35, -5.39, 0.00 -105, -10.34, 10.91, 0.00 -106, -19.33, 24.49, 0.00 -107, -26.88, 39.96, 0.00 -108, -36.46, 62.56, 0.00 -109, -34.87, 68.19, 0.00 -110, -43.46, 95.93, 0.00 -111, -48.25, 119.30, 0.00 -112, -49.74, 136.95, 0.00 -113, -48.73, 148.75, 0.00 -114, -53.22, 179.49, 0.00 -115, -53.35, 198.34, 0.00 -116, -53.66, 219.53, 0.00 -117, -54.24, 244.03, 0.00 -118, -54.40, 269.12, 0.00 -119, -53.64, 291.96, 0.00 -120, -52.19, 312.97, 0.00 -121, -51.03, 337.70, 0.00 -122, -49.40, 361.90, 0.00 -123, -47.02, 382.61, 0.00 -124, -44.47, 403.79, 0.00 -125, -41.74, 425.36, 0.00 -126, -38.82, 447.08, 0.00 -127, -35.53, 466.63, 0.00 -128, -32.16, 486.97, 0.00 -129, -28.61, 506.96, 0.00 -130, -24.95, 526.99, 0.00 -131, -21.13, 546.28, 0.00 -132, -17.19, 564.47, 0.00 -133, -13.21, 584.56, 0.00 -134, -9.08, 600.23, 0.00 -135, -4.95, 617.31, 0.00 -136, -0.78, 632.76, 0.00 -137, 3.39, 648.55, 0.00 -138, 7.53, 661.02, 0.00 -139, 11.67, 675.68, 0.00 -140, 15.72, 687.51, 0.00 -141, 19.71, 698.75, 0.00 -142, 23.57, 707.97, 0.00 -143, 27.34, 716.80, 0.00 -144, 31.03, 725.58, 0.00 -145, 34.59, 733.25, 0.00 -146, 37.91, 737.95, 0.00 -147, 41.39, 747.43, 0.00 -148, 44.18, 746.40, 0.00 -149, 44.85, 713.79, 0.00 -150, 47.45, 715.64, 0.00 -151, 54.53, 783.26, 0.00 -152, 62.30, 855.77, 0.00 -153, 50.66, 668.02, 0.00 -154, 36.44, 462.76, 0.00 -155, 26.23, 321.75, 0.00 -156, 18.84, 223.73, 0.00 -157, 6.30, 72.62, 0.00 -158, 3.96, 44.33, 0.00 -159, 3.58, 39.11, 0.00 -160, 3.38, 35.98, 0.00 -161, 3.70, 38.41, 0.00 -162, 3.02, 30.74, 0.00 -163, 2.56, 25.51, 0.00 -164, 1.90, 18.49, 0.00 -165, 1.74, 16.60, 0.00 -166, 0.98, 9.20, 0.00 -167, 0.36, 3.29, 0.00 -168, -0.32, -2.94, 0.00 -169, -0.78, -6.95, 0.00 -170, -1.58, -13.87, 0.00 -171, -2.13, -18.40, 0.00 -172, -2.81, -23.91, 0.00 -173, -3.22, -27.00, 0.00 -174, -3.97, -32.80, 0.00 -175, -4.54, -37.06, 0.00 -176, -5.07, -40.84, 0.00 -177, -5.53, -43.98, 0.00 -178, -6.21, -48.83, 0.00 -179, -6.66, -51.70, 0.00 -180, -7.10, -54.54, 0.00 -181, -7.49, -56.91, 0.00 -182, -7.87, -59.20, 0.00 -183, -8.09, -60.30, 0.00 -184, -8.29, -61.19, 0.00 -185, -8.35, -61.09, 0.00 -186, -8.55, -62.05, 0.00 -187, -8.49, -61.15, 0.00 -188, -8.48, -60.67, 0.00 -189, -8.34, -59.27, 0.00 -190, -8.10, -57.23, 0.00 -191, -7.72, -54.20, 0.00 -192, -7.23, -50.53, 0.00 -193, -6.70, -46.65, 0.00 -194, -6.06, -42.04, 0.00 -195, -5.28, -36.52, 0.00 -196, -4.45, -30.73, 0.00 -197, -3.54, -24.42, 0.00 -198, -2.50, -17.21, 0.00 +0, -2.77, 19.04, 0.00 +1, -3.82, 26.31, 0.00 +2, -4.90, 33.79, 0.00 +3, -5.83, 40.33, 0.00 +4, -6.72, 46.62, 0.00 +5, -7.40, 51.55, 0.00 +6, -8.08, 56.49, 0.00 +7, -8.56, 60.10, 0.00 +8, -9.01, 63.63, 0.00 +9, -9.28, 65.94, 0.00 +10, -9.53, 68.14, 0.00 +11, -9.58, 69.03, 0.00 +12, -9.66, 70.13, 0.00 +13, -9.48, 69.39, 0.00 +14, -9.39, 69.33, 0.00 +15, -9.13, 68.00, 0.00 +16, -8.85, 66.57, 0.00 +17, -8.38, 63.67, 0.00 +18, -7.95, 61.06, 0.00 +19, -7.39, 57.44, 0.00 +20, -6.85, 53.85, 0.00 +21, -6.11, 48.62, 0.00 +22, -5.50, 44.34, 0.00 +23, -4.79, 39.13, 0.00 +24, -4.08, 33.74, 0.00 +25, -3.16, 26.52, 0.00 +26, -2.41, 20.50, 0.00 +27, -1.65, 14.25, 0.00 +28, -0.83, 7.24, 0.00 +29, 0.15, -1.35, 0.00 +30, 1.08, -9.77, 0.00 +31, 2.04, -18.85, 0.00 +32, 2.91, -27.35, 0.00 +33, 4.12, -39.36, 0.00 +34, 4.84, -47.17, 0.00 +35, 5.56, -55.30, 0.00 +36, 6.21, -63.07, 0.00 +37, 6.98, -72.54, 0.00 +38, 7.58, -80.64, 0.00 +39, 8.28, -90.36, 0.00 +40, 8.82, -98.82, 0.00 +41, 9.85, -113.49, 0.00 +42, 10.03, -119.07, 0.00 +43, 10.20, -125.07, 0.00 +44, 10.25, -130.12, 0.00 +45, 10.32, -136.09, 0.00 +46, 10.05, -138.09, 0.00 +47, 9.50, -136.45, 0.00 +48, 9.10, -137.22, 0.00 +49, 8.01, -127.49, 0.00 +50, 6.33, -106.99, 0.00 +51, 0.64, -11.55, 0.00 +52, -2.01, 39.22, 0.00 +53, -1.79, 37.99, 0.00 +54, 7.57, -176.97, 0.00 +55, 11.68, -306.21, 0.00 +56, 11.24, -337.67, 0.00 +57, 12.00, -425.38, 0.00 +58, 9.83, -429.73, 0.00 +59, 7.56, -437.67, 0.00 +60, 4.89, -429.43, 0.00 +61, 2.24, -427.92, 0.00 +62, -0.52, -417.68, 0.00 +63, -3.27, -408.38, 0.00 +64, -5.97, -394.43, 0.00 +65, -8.63, -381.71, 0.00 +66, -11.38, -373.85, 0.00 +67, -13.92, -359.74, 0.00 +68, -16.30, -344.39, 0.00 +69, -18.59, -329.29, 0.00 +70, -20.59, -311.80, 0.00 +71, -22.49, -295.35, 0.00 +72, -23.37, -269.18, 0.00 +73, -24.89, -253.61, 0.00 +74, -26.60, -241.57, 0.00 +75, -28.33, -230.54, 0.00 +76, -28.12, -206.00, 0.00 +77, -25.23, -166.99, 0.00 +78, -23.75, -142.42, 0.00 +79, -21.52, -117.15, 0.00 +80, -21.36, -105.66, 0.00 +81, -19.05, -85.72, 0.00 +82, -13.88, -56.77, 0.00 +83, -8.95, -33.26, 0.00 +84, -3.94, -13.28, 0.00 +85, 3.68, 11.23, 0.00 +86, 13.46, 37.07, 0.00 +87, 16.97, 41.95, 0.00 +88, 22.46, 49.58, 0.00 +89, 29.06, 56.83, 0.00 +90, 31.84, 54.64, 0.00 +91, 35.71, 53.08, 0.00 +92, 58.67, 74.29, 0.00 +93, 45.30, 47.76, 0.00 +94, 21.16, 17.97, 0.00 +95, 36.02, 23.46, 0.00 +96, 34.28, 15.71, 0.00 +97, 167.86, 45.43, 0.00 +98, -37.68, -5.06, 0.00 +99, -44.95, 0.00, 0.00 +100, 21.40, -2.87, 0.00 +101, -8.23, 2.23, 0.00 +102, 21.75, -9.97, 0.00 +103, 17.57, -11.45, 0.00 +104, 24.83, -21.09, 0.00 +105, 20.31, -21.41, 0.00 +106, 22.40, -28.36, 0.00 +107, 10.82, -16.08, 0.00 +108, 6.44, -11.05, 0.00 +109, -5.43, 10.62, 0.00 +110, -12.05, 26.58, 0.00 +111, -16.29, 40.28, 0.00 +112, -19.02, 52.37, 0.00 +113, -23.88, 72.90, 0.00 +114, -28.36, 95.64, 0.00 +115, -32.94, 122.46, 0.00 +116, -34.97, 143.06, 0.00 +117, -36.81, 165.61, 0.00 +118, -38.03, 188.15, 0.00 +119, -39.13, 213.01, 0.00 +120, -39.40, 236.25, 0.00 +121, -39.61, 262.16, 0.00 +122, -38.96, 285.38, 0.00 +123, -38.09, 309.97, 0.00 +124, -36.56, 332.00, 0.00 +125, -34.95, 356.11, 0.00 +126, -32.52, 374.47, 0.00 +127, -30.04, 394.46, 0.00 +128, -27.39, 414.79, 0.00 +129, -25.03, 443.37, 0.00 +130, -21.79, 460.28, 0.00 +131, -18.54, 479.35, 0.00 +132, -15.10, 496.09, 0.00 +133, -11.72, 518.74, 0.00 +134, -8.14, 537.76, 0.00 +135, -4.46, 556.85, 0.00 +136, -0.71, 574.70, 0.00 +137, 3.07, 586.32, 0.00 +138, 6.85, 601.19, 0.00 +139, 10.66, 617.05, 0.00 +140, 14.41, 629.85, 0.00 +141, 18.07, 640.49, 0.00 +142, 21.68, 651.22, 0.00 +143, 25.23, 661.45, 0.00 +144, 28.70, 670.97, 0.00 +145, 31.06, 658.53, 0.00 +146, 34.12, 664.18, 0.00 +147, 37.07, 669.41, 0.00 +148, 39.90, 674.08, 0.00 +149, 41.12, 654.43, 0.00 +150, 43.59, 657.44, 0.00 +151, 46.03, 661.11, 0.00 +152, 48.98, 672.80, 0.00 +153, 37.71, 497.29, 0.00 +154, 33.20, 421.64, 0.00 +155, 10.52, 128.98, 0.00 +156, -30.84, -366.25, 0.00 +157, -26.28, -302.89, 0.00 +158, -15.42, -172.74, 0.00 +159, -5.79, -63.20, 0.00 +160, -3.86, -41.05, 0.00 +161, -1.55, -16.16, 0.00 +162, -0.43, -4.33, 0.00 +163, 0.72, 7.19, 0.00 +164, 1.27, 12.35, 0.00 +165, 0.10, 0.94, 0.00 +166, 0.02, 0.17, 0.00 +167, -0.42, -3.86, 0.00 +168, -0.73, -6.60, 0.00 +169, -1.80, -16.01, 0.00 +170, -2.30, -20.22, 0.00 +171, -2.88, -24.90, 0.00 +172, -3.35, -28.48, 0.00 +173, -4.32, -36.26, 0.00 +174, -4.89, -40.46, 0.00 +175, -5.39, -43.99, 0.00 +176, -5.90, -47.51, 0.00 +177, -6.63, -52.74, 0.00 +178, -7.18, -56.47, 0.00 +179, -7.73, -60.04, 0.00 +180, -8.13, -62.46, 0.00 +181, -8.64, -65.68, 0.00 +182, -8.97, -67.49, 0.00 +183, -9.30, -69.30, 0.00 +184, -9.50, -70.10, 0.00 +185, -9.73, -71.22, 0.00 +186, -9.71, -70.48, 0.00 +187, -9.79, -70.52, 0.00 +188, -9.61, -68.70, 0.00 +189, -9.32, -66.22, 0.00 +190, -8.98, -63.42, 0.00 +191, -8.60, -60.39, 0.00 +192, -8.07, -56.42, 0.00 +193, -7.44, -51.79, 0.00 +194, -6.72, -46.64, 0.00 +195, -5.86, -40.54, 0.00 +196, -4.86, -33.51, 0.00 +197, -3.83, -26.36, 0.00 +198, -2.78, -19.12, 0.00 From e98ba936e30be0951843ec104ae209ab4747729e Mon Sep 17 00:00:00 2001 From: riddhi1228 <24ume036@lnmiit.ac.in> Date: Sun, 15 Mar 2026 06:27:51 +0000 Subject: [PATCH 128/229] fix(SU2_PY): replace deprecated optparse with argparse in 3 core scripts - discrete_adjoint.py - shape_optimization.py - finite_differences.py optparse has been deprecated since Python 3.2 and will be removed in a future Python version. argparse is the recommended replacement. Part of ongoing Python 3 modernization of SU2_PY scripts. --- SU2_PY/discrete_adjoint.py | 18 +++++++++--------- SU2_PY/finite_differences.py | 14 +++++++------- SU2_PY/shape_optimization.py | 20 ++++++++++---------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/SU2_PY/discrete_adjoint.py b/SU2_PY/discrete_adjoint.py index 8e274a67ee77..aeb5e40a30da 100755 --- a/SU2_PY/discrete_adjoint.py +++ b/SU2_PY/discrete_adjoint.py @@ -26,7 +26,7 @@ # License along with SU2. If not, see . import os, sys, copy -from optparse import OptionParser +import argparse sys.path.append(os.environ["SU2_RUN"]) import SU2 @@ -39,11 +39,11 @@ def main(): # Command Line Options - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser(description="SU2 discrete adjoint computation.") + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -51,7 +51,7 @@ def main(): help="number of PARTITIONS", metavar="PARTITIONS", ) - parser.add_option( + parser.add_argument( "-s", "--step", dest="step", @@ -59,7 +59,7 @@ def main(): help="DOT finite difference STEP", metavar="STEP", ) - parser.add_option( + parser.add_argument( "-v", "--validate", dest="validate", @@ -67,7 +67,7 @@ def main(): help="Validate the gradient using direct diff. mode", metavar="VALIDATION", ) - parser.add_option( + parser.add_argument( "-z", "--zones", dest="nzones", @@ -75,7 +75,7 @@ def main(): help="Number of Zones", metavar="ZONES", ) - parser.add_option( + parser.add_argument( "-m", "--mode", dest="mode", @@ -84,7 +84,7 @@ def main(): metavar="MODE", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.partitions = int(options.partitions) options.step = float(options.step) options.validate = options.validate.upper() == "TRUE" diff --git a/SU2_PY/finite_differences.py b/SU2_PY/finite_differences.py index 8df97948c9bc..fbca3581fd03 100755 --- a/SU2_PY/finite_differences.py +++ b/SU2_PY/finite_differences.py @@ -26,7 +26,7 @@ # License along with SU2. If not, see . import os, sys -from optparse import OptionParser +import argparse sys.path.append(os.environ["SU2_RUN"]) import SU2 @@ -38,11 +38,11 @@ def main(): - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser(description="SU2 finite differences computation.") + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -50,7 +50,7 @@ def main(): help="number of PARTITIONS", metavar="PARTITIONS", ) - parser.add_option( + parser.add_argument( "-q", "--quiet", dest="quiet", @@ -58,7 +58,7 @@ def main(): help="output QUIET to log files", metavar="QUIET", ) - parser.add_option( + parser.add_argument( "-z", "--zones", dest="nzones", @@ -67,7 +67,7 @@ def main(): metavar="ZONES", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.partitions = int(options.partitions) options.quiet = options.quiet.upper() == "TRUE" options.nzones = int(options.nzones) diff --git a/SU2_PY/shape_optimization.py b/SU2_PY/shape_optimization.py index 8a68f0ea61cd..0f29a25c123f 100755 --- a/SU2_PY/shape_optimization.py +++ b/SU2_PY/shape_optimization.py @@ -26,7 +26,7 @@ # License along with SU2. If not, see . import os, sys, shutil -from optparse import OptionParser +import argparse sys.path.append(os.environ["SU2_RUN"]) import SU2 @@ -38,11 +38,11 @@ def main(): - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser(description="SU2 shape optimization.") + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "-r", "--name", dest="projectname", @@ -50,7 +50,7 @@ def main(): help="try to restart from project file NAME", metavar="NAME", ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -58,7 +58,7 @@ def main(): help="number of PARTITIONS", metavar="PARTITIONS", ) - parser.add_option( + parser.add_argument( "-g", "--gradient", dest="gradient", @@ -66,7 +66,7 @@ def main(): help="Method for computing the GRADIENT (CONTINUOUS_ADJOINT, DISCRETE_ADJOINT, FINDIFF, NONE)", metavar="GRADIENT", ) - parser.add_option( + parser.add_argument( "-o", "--optimization", dest="optimization", @@ -74,7 +74,7 @@ def main(): help="OPTIMIZATION techique (SLSQP, CG, BFGS, POWELL)", metavar="OPTIMIZATION", ) - parser.add_option( + parser.add_argument( "-q", "--quiet", dest="quiet", @@ -82,7 +82,7 @@ def main(): help="True/False Quiet all SU2 output (optimizer output only)", metavar="QUIET", ) - parser.add_option( + parser.add_argument( "-z", "--zones", dest="nzones", @@ -91,7 +91,7 @@ def main(): metavar="ZONES", ) - (options, args) = parser.parse_args() + options = parser.parse_args() # process inputs options.partitions = int(options.partitions) From 8e1fa21e6c1dceb1a41810d366cea01e0c5917bf Mon Sep 17 00:00:00 2001 From: riddhi1228 <24ume036@lnmiit.ac.in> Date: Sun, 15 Mar 2026 06:36:47 +0000 Subject: [PATCH 129/229] fix(SU2_PY): replace deprecated optparse with argparse in remaining 13 scripts Completes the optparse removal started in the previous commit. All 16 SU2_PY scripts now use argparse instead of the deprecated optparse. --- SU2_PY/SU2_CFD.py | 26 +++++++++++++------------- SU2_PY/change_version_number.py | 12 ++++++------ SU2_PY/compute_polar.py | 18 +++++++++--------- SU2_PY/compute_uncertainty.py | 14 +++++++------- SU2_PY/continuous_adjoint.py | 16 ++++++++-------- SU2_PY/direct_differentiation.py | 14 +++++++------- SU2_PY/fsi_computation.py | 10 +++++----- SU2_PY/merge_solution.py | 10 +++++----- SU2_PY/mesh_deformation.py | 10 +++++----- SU2_PY/parallel_computation.py | 12 ++++++------ SU2_PY/parallel_computation_fsi.py | 12 ++++++------ SU2_PY/profiling.py | 8 ++++---- SU2_PY/set_ffd_design_var.py | 22 +++++++++++----------- 13 files changed, 92 insertions(+), 92 deletions(-) diff --git a/SU2_PY/SU2_CFD.py b/SU2_PY/SU2_CFD.py index c652bfb729b4..7de10b7f7a6a 100755 --- a/SU2_PY/SU2_CFD.py +++ b/SU2_PY/SU2_CFD.py @@ -30,7 +30,7 @@ # ---------------------------------------------------------------------- from __future__ import division, print_function, absolute_import -from optparse import OptionParser # use a parser for configuration +import argparse # use a parser for configuration import SU2 # imports SU2 python tools import pysu2 # imports the SU2 wrapped module @@ -42,67 +42,67 @@ def main(): # Command line options - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser() + parser.add_argument( "-f", "--file", dest="filename", help="Read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "--nDim", dest="nDim", default=2, help="Define the number of DIMENSIONS", metavar="DIMENSIONS", ) - parser.add_option( + parser.add_argument( "--nZone", dest="nZone", default=1, help="Define the number of ZONES", metavar="NZONE", ) - parser.add_option( + parser.add_argument( "--parallel", action="iframe.php?url=https%3A%2F%2Fgithub.com%2Fstore_true", help="Specify if we need to initialize MPI", dest="with_MPI", default=False, ) - parser.add_option( + parser.add_argument( "--fsi", dest="fsi", default="False", help="Launch the FSI driver", metavar="FSI", ) - parser.add_option( + parser.add_argument( "--fem", dest="fem", default="False", help="Launch the FEM driver (General driver)", metavar="FEM", ) - parser.add_option( + parser.add_argument( "--harmonic_balance", dest="harmonic_balance", default="False", help="Launch the Harmonic Balance (HB) driver", metavar="HB", ) - parser.add_option( + parser.add_argument( "--poisson_equation", dest="poisson_equation", default="False", help="Launch the poisson equation driver (General driver)", metavar="POIS_EQ", ) - parser.add_option( + parser.add_argument( "--wave_equation", dest="wave_equation", default="False", help="Launch the wave equation driver (General driver)", metavar="WAVE_EQ", ) - parser.add_option( + parser.add_argument( "--heat_equation", dest="heat_equation", default="False", @@ -110,7 +110,7 @@ def main(): metavar="HEAT_EQ", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.nDim = int(options.nDim) options.nZone = int(options.nZone) options.fsi = options.fsi.upper() == "TRUE" diff --git a/SU2_PY/change_version_number.py b/SU2_PY/change_version_number.py index a868f88205ab..49b82da680d4 100755 --- a/SU2_PY/change_version_number.py +++ b/SU2_PY/change_version_number.py @@ -27,30 +27,30 @@ # make print(*args) function available in PY2.6+, does'nt work on PY < 2.6 from __future__ import print_function -from optparse import OptionParser +import argparse # Run the script from the base directory (ie $SU2HOME). Grep will search directories recursively for matches in version number import os, sys -parser = OptionParser() -parser.add_option( +parser = argparse.ArgumentParser() +parser.add_argument( "-v", "--version", dest="version", help="the new version number", metavar="VERSION" ) -parser.add_option( +parser.add_argument( "-r", "--releasename", dest="releasename", help="Name of the new release", metavar="RELEASENAME", ) -parser.add_option( +parser.add_argument( "-y", action="iframe.php?url=https%3A%2F%2Fgithub.com%2Fstore_true", dest="yes", help="Answer yes to all questions", metavar="YES", ) -(options, args) = parser.parse_args() +options = parser.parse_args() if not options.version: parser.error("new version number must be provided with -v option") diff --git a/SU2_PY/compute_polar.py b/SU2_PY/compute_polar.py index b7daac33799a..d696c1d5e6ea 100755 --- a/SU2_PY/compute_polar.py +++ b/SU2_PY/compute_polar.py @@ -41,7 +41,7 @@ # imports import os, sys, shutil -from optparse import OptionParser +import argparse sys.path.append(os.environ["SU2_RUN"]) import SU2 @@ -52,8 +52,8 @@ def main(): # Command Line Options - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser() + parser.add_argument( "-c", "--ctrl", dest="ctrlFile", @@ -61,7 +61,7 @@ def main(): metavar="FILE", default="polarCtrl.in", ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -69,7 +69,7 @@ def main(): help="number of PARTITIONS", metavar="PARTITIONS", ) - parser.add_option( + parser.add_argument( "-i", "--iterations", dest="iterations", @@ -77,7 +77,7 @@ def main(): help="number of ITERATIONS", metavar="ITERATIONS", ) - parser.add_option( + parser.add_argument( "-d", "--dimension", dest="geomDim", @@ -85,7 +85,7 @@ def main(): help="Geometry dimension (2 or 3)", metavar="geomDim", ) - parser.add_option( + parser.add_argument( "-w", "--Wind", action="iframe.php?url=https%3A%2F%2Fgithub.com%2Fstore_true", @@ -93,7 +93,7 @@ def main(): default=False, help=" Wind system (default is body system)", ) - parser.add_option( + parser.add_argument( "-v", "--Verbose", action="iframe.php?url=https%3A%2F%2Fgithub.com%2Fstore_true", @@ -102,7 +102,7 @@ def main(): help=" Verbose printout (if activated)", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.partitions = int(options.partitions) options.iterations = int(options.iterations) options.geomDim = int(options.geomDim) diff --git a/SU2_PY/compute_uncertainty.py b/SU2_PY/compute_uncertainty.py index beac7a3f6d06..845d0f1b96b6 100755 --- a/SU2_PY/compute_uncertainty.py +++ b/SU2_PY/compute_uncertainty.py @@ -26,7 +26,7 @@ # License along with SU2. If not, see . # imports import numpy as np -from optparse import OptionParser +import argparse import os import sys import shutil @@ -39,11 +39,11 @@ def main(): # Command Line Options - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser() + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -51,7 +51,7 @@ def main(): help="number of PARTITIONS", metavar="PARTITIONS", ) - parser.add_option( + parser.add_argument( "-u", "--underRelaxation", dest="uq_urlx", @@ -59,7 +59,7 @@ def main(): help="under relaxation factor", metavar="UQ_URLX", ) - parser.add_option( + parser.add_argument( "-b", "--deltaB", dest="uq_delta_b", @@ -68,7 +68,7 @@ def main(): metavar="UQ_DELTA_B", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.partitions = int(options.partitions) # check the typecasting options.beta_delta = float(options.uq_delta_b) diff --git a/SU2_PY/continuous_adjoint.py b/SU2_PY/continuous_adjoint.py index 9f43034b0d99..26d42039ccca 100755 --- a/SU2_PY/continuous_adjoint.py +++ b/SU2_PY/continuous_adjoint.py @@ -26,7 +26,7 @@ # License along with SU2. If not, see . import os, sys -from optparse import OptionParser +import argparse sys.path.append(os.environ["SU2_RUN"]) import SU2 @@ -39,11 +39,11 @@ def main(): # Command Line Options - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser() + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -51,7 +51,7 @@ def main(): help="number of PARTITIONS", metavar="PARTITIONS", ) - parser.add_option( + parser.add_argument( "-c", "--compute", dest="compute", @@ -59,7 +59,7 @@ def main(): help="COMPUTE direct and adjoint problem", metavar="COMPUTE", ) - parser.add_option( + parser.add_argument( "-s", "--step", dest="step", @@ -67,7 +67,7 @@ def main(): help="DOT finite difference STEP", metavar="STEP", ) - parser.add_option( + parser.add_argument( "-z", "--zones", dest="nzones", @@ -76,7 +76,7 @@ def main(): metavar="ZONES", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.partitions = int(options.partitions) options.step = float(options.step) options.compute = options.compute.upper() == "TRUE" diff --git a/SU2_PY/direct_differentiation.py b/SU2_PY/direct_differentiation.py index 56de022474b4..513ee265067e 100755 --- a/SU2_PY/direct_differentiation.py +++ b/SU2_PY/direct_differentiation.py @@ -27,7 +27,7 @@ from __future__ import division, print_function, absolute_import import os, sys, shutil -from optparse import OptionParser +import argparse sys.path.append(os.environ["SU2_RUN"]) import SU2 @@ -39,11 +39,11 @@ def main(): - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser() + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -51,7 +51,7 @@ def main(): help="number of PARTITIONS", metavar="PARTITIONS", ) - parser.add_option( + parser.add_argument( "-q", "--quiet", dest="quiet", @@ -59,7 +59,7 @@ def main(): help="output QUIET to log files", metavar="QUIET", ) - parser.add_option( + parser.add_argument( "-z", "--zones", dest="nzones", @@ -68,7 +68,7 @@ def main(): metavar="ZONES", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.partitions = int(options.partitions) options.quiet = options.quiet.upper() == "TRUE" options.nzones = int(options.nzones) diff --git a/SU2_PY/fsi_computation.py b/SU2_PY/fsi_computation.py index 9fbb3b212209..49eceeb5c263 100755 --- a/SU2_PY/fsi_computation.py +++ b/SU2_PY/fsi_computation.py @@ -35,7 +35,7 @@ import copy import time as timer from math import * # use mathematical expressions -from optparse import OptionParser # use a parser for configuration +import argparse # use a parser for configuration # imports the CFD (SU2) module for FSI computation import pysu2 @@ -49,11 +49,11 @@ def main(): # --- Get the FSI conig file name form the command line options --- # - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser() + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "--parallel", action="iframe.php?url=https%3A%2F%2Fgithub.com%2Fstore_true", help="Specify if we need to initialize MPI", @@ -61,7 +61,7 @@ def main(): default=False, ) - (options, args) = parser.parse_args() + options = parser.parse_args() if options.with_MPI: from mpi4py import ( diff --git a/SU2_PY/merge_solution.py b/SU2_PY/merge_solution.py index 2cdc6746cfdd..40a5738a5bf2 100755 --- a/SU2_PY/merge_solution.py +++ b/SU2_PY/merge_solution.py @@ -25,7 +25,7 @@ # You should have received a copy of the GNU Lesser General Public # License along with SU2. If not, see . -from optparse import OptionParser +import argparse import SU2 # ------------------------------------------------------------------- @@ -35,11 +35,11 @@ def main(): - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser() + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -48,7 +48,7 @@ def main(): metavar="PARTITIONS", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.partitions = int(options.partitions) merge_solution(options.filename, options.partitions) diff --git a/SU2_PY/mesh_deformation.py b/SU2_PY/mesh_deformation.py index f92692d12c43..ce4c261ba9a9 100755 --- a/SU2_PY/mesh_deformation.py +++ b/SU2_PY/mesh_deformation.py @@ -26,7 +26,7 @@ # License along with SU2. If not, see . import os, sys -from optparse import OptionParser +import argparse sys.path.append(os.environ["SU2_RUN"]) import SU2 @@ -39,11 +39,11 @@ def main(): # Command Line Options - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser() + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -52,7 +52,7 @@ def main(): metavar="PARTITIONS", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.partitions = int(options.partitions) # Run Parallel Comutation diff --git a/SU2_PY/parallel_computation.py b/SU2_PY/parallel_computation.py index f102fe945664..66cdfffdbcbd 100755 --- a/SU2_PY/parallel_computation.py +++ b/SU2_PY/parallel_computation.py @@ -26,7 +26,7 @@ # License along with SU2. If not, see . import os, sys -from optparse import OptionParser +import argparse sys.path.append(os.environ["SU2_RUN"]) import SU2 @@ -39,11 +39,11 @@ def main(): # Command Line Options - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser() + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -51,7 +51,7 @@ def main(): help="number of PARTITIONS", metavar="PARTITIONS", ) - parser.add_option( + parser.add_argument( "-c", "--compute", dest="compute", @@ -60,7 +60,7 @@ def main(): metavar="COMPUTE", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.partitions = int(options.partitions) options.compute = options.compute.upper() == "TRUE" diff --git a/SU2_PY/parallel_computation_fsi.py b/SU2_PY/parallel_computation_fsi.py index 0fb6b459b696..dab33ad21e40 100755 --- a/SU2_PY/parallel_computation_fsi.py +++ b/SU2_PY/parallel_computation_fsi.py @@ -26,7 +26,7 @@ # License along with SU2. If not, see . import os, sys, shutil, copy -from optparse import OptionParser +import argparse sys.path.append(os.environ["SU2_RUN"]) import SU2 @@ -39,11 +39,11 @@ def main(): # Command Line Options - parser = OptionParser() - parser.add_option( + parser = argparse.ArgumentParser() + parser.add_argument( "-f", "--file", dest="filename", help="read config from FILE", metavar="FILE" ) - parser.add_option( + parser.add_argument( "-n", "--partitions", dest="partitions", @@ -51,7 +51,7 @@ def main(): help="number of PARTITIONS", metavar="PARTITIONS", ) - parser.add_option( + parser.add_argument( "-c", "--compute", dest="compute", @@ -60,7 +60,7 @@ def main(): metavar="COMPUTE", ) - (options, args) = parser.parse_args() + options = parser.parse_args() options.partitions = int(options.partitions) options.compute = options.compute.upper() == "TRUE" diff --git a/SU2_PY/profiling.py b/SU2_PY/profiling.py index 5786bb0e629e..acd22b5494a7 100755 --- a/SU2_PY/profiling.py +++ b/SU2_PY/profiling.py @@ -25,17 +25,17 @@ # You should have received a copy of the GNU Lesser General Public # License along with SU2. If not, see . -from optparse import OptionParser +import argparse from pylab import * from numpy import * from matplotlib import pyplot as plt from matplotlib import mlab -parser = OptionParser() -parser.add_option( +parser = argparse.ArgumentParser() +parser.add_argument( "-f", "--file", dest="file", help="profiling CSV file", metavar="FILE" ) -(options, args) = parser.parse_args() +options = parser.parse_args() # Store the file name filename = options.file diff --git a/SU2_PY/set_ffd_design_var.py b/SU2_PY/set_ffd_design_var.py index acee5722daf7..bf8d98a6b357 100755 --- a/SU2_PY/set_ffd_design_var.py +++ b/SU2_PY/set_ffd_design_var.py @@ -28,11 +28,11 @@ # make print(*args) function available in PY2.6+, does'nt work on PY < 2.6 from __future__ import print_function -from optparse import OptionParser +import argparse from numpy import * -parser = OptionParser() -parser.add_option( +parser = argparse.ArgumentParser() +parser.add_argument( "-i", "--iDegree", dest="iDegree", @@ -40,7 +40,7 @@ help="i degree of the FFD box", metavar="IDEGREE", ) -parser.add_option( +parser.add_argument( "-j", "--jDegree", dest="jDegree", @@ -48,7 +48,7 @@ help="j degree of the FFD box", metavar="JDEGREE", ) -parser.add_option( +parser.add_argument( "-k", "--kDegree", dest="kDegree", @@ -56,7 +56,7 @@ help="k degree of the FFD box", metavar="KDEGREE", ) -parser.add_option( +parser.add_argument( "-b", "--ffdid", dest="ffd_id", @@ -64,21 +64,21 @@ help="ID of the FFD box", metavar="FFD_ID", ) -parser.add_option( +parser.add_argument( "-m", "--marker", dest="marker", help="marker name of the design surface", metavar="MARKER", ) -parser.add_option( +parser.add_argument( "-a", "--axis", dest="axis", help="axis to define twist 'x_Orig, y_Orig, z_Orig, x_End, y_End, z_End'", metavar="AXIS", ) -parser.add_option( +parser.add_argument( "-s", "--scale", dest="scale", @@ -86,7 +86,7 @@ help="scale factor for the bump functions", metavar="SCALE", ) -parser.add_option( +parser.add_argument( "-d", "--dimension", dest="dimension", @@ -95,7 +95,7 @@ metavar="DIMENSION", ) -(options, args) = parser.parse_args() +options = parser.parse_args() # Process options options.iOrder = int(options.iDegree) + 1 From d725f12b7b9cb44c668768d896421feb04ee2196 Mon Sep 17 00:00:00 2001 From: mima619 Date: Sun, 15 Mar 2026 09:31:26 +0100 Subject: [PATCH 130/229] Modified regression workflow --- .github/workflows/regression.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 3fbf05edc0ec..2cebec15446e 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -211,7 +211,7 @@ jobs: uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: # -t -c - args: -b ${{github.ref}} -t develop -c m-minervino:develop -s ${{matrix.testscript}} + args: -b ${{github.ref}} -t develop -c m-minervino/TestCases:develop -s ${{matrix.testscript}} - name: Cleanup uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: From 0f77be8b1659130741b589f7f9fc3e6bdbc532b0 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 15 Mar 2026 10:41:11 +0100 Subject: [PATCH 131/229] change tolerances --- TestCases/hybrid_regression.py | 4 ++-- TestCases/hybrid_regression_AD.py | 5 +++-- TestCases/parallel_regression_AD.py | 3 ++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 532757f111db..f217ff98a4a5 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -765,7 +765,7 @@ def main(): pywrapper_translating_naca0012.reference_file = "forces_0.csv.ref" pywrapper_translating_naca0012.reference_file_aarch64 = "forces_0_aarch64.csv.ref" pywrapper_translating_naca0012.test_file = "forces_0.csv" - pywrapper_translating_naca0012.tol_file_percent = 0.1 + pywrapper_translating_naca0012.tol_file_percent = 5.0 pywrapper_translating_naca0012.enabled_on_cpu_arch = ["x86_64"] pywrapper_translating_naca0012.enabled_with_tsan = False file_diff_list.append(pywrapper_translating_naca0012) @@ -779,7 +779,7 @@ def main(): pywrapper_updated_moving_frame_naca0012.reference_file = "forces_0.csv.ref" pywrapper_updated_moving_frame_naca0012.reference_file_aarch64 = "forces_0_aarch64.csv.ref" pywrapper_updated_moving_frame_naca0012.test_file = "forces_0.csv" - pywrapper_updated_moving_frame_naca0012.tol_file_percent = 0.1 + pywrapper_updated_moving_frame_naca0012.tol_file_percent = 5.0 pywrapper_updated_moving_frame_naca0012.enabled_on_cpu_arch = ["x86_64"] pywrapper_updated_moving_frame_naca0012.enabled_with_tsan = False file_diff_list.append(pywrapper_updated_moving_frame_naca0012) diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 49d56cf8675b..3393182ad6ff 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -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.224157, -1.651618, -0.004097, -0.000003] + discadj_pitchingNACA0012.test_vals = [-1.224189, -1.654687, -0.004097, -0.000003] discadj_pitchingNACA0012.tol = 0.01 discadj_pitchingNACA0012.unsteady = True discadj_pitchingNACA0012.enabled_with_tsan = False @@ -213,7 +213,8 @@ def main(): for test in test_list: test.command = TestCase.Command(exec = "SU2_CFD_AD", param = "-t 2") test.timeout = 600 - test.tol = 1e-4 + if test.tol == 0.0: + test.tol = 1.0e-4 #end pass_list = [ test.run_test(args.tsan) for test in test_list ] diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index 7b931c872a82..49ad0550465d 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -217,7 +217,8 @@ 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.226212, -1.647429, -0.007557, 0.000012] + discadj_pitchingNACA0012.test_vals = [-1.226498, -1.653107, -0.003489, -0.000000] + discadj_pitchingNACA0012.tol = 0.01 discadj_pitchingNACA0012.unsteady = True test_list.append(discadj_pitchingNACA0012) From 5583ebc59e789465d78bd8d20255f81be51562b6 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 15 Mar 2026 14:08:08 +0100 Subject: [PATCH 132/229] put presmoothing and postsmoothing in separate functions --- Common/include/CConfig.hpp | 22 ++- .../integration/CMultiGridIntegration.hpp | 24 +++ .../src/integration/CMultiGridIntegration.cpp | 157 +++++++++--------- TestCases/parallel_regression_AD.py | 4 +- 4 files changed, 123 insertions(+), 84 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index b9efe9edff4a..d25b92745209 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -3057,7 +3057,27 @@ class CConfig { * \brief Get the number of Runge-Kutta steps. * \return Number of Runge-Kutta steps. */ - unsigned short GetnRKStep(void) const { return nRKStep; } + unsigned short GetnRKStep(void) const { + + unsigned short iRKLimit = 1; + + switch (GetKind_TimeIntScheme()) { + case RUNGE_KUTTA_EXPLICIT: + iRKLimit = GetnRKStep(); + break; + case CLASSICAL_RK4_EXPLICIT: + iRKLimit = 4; + break; + case EULER_EXPLICIT: + case EULER_IMPLICIT: + iRKLimit = 1; + break; + default: + iRKLimit = 1; + break; + } + return iRKLimit; + } /*! * \brief Get the number of time levels for time accurate local time stepping. diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index fee75c797f40..54068ea01cdc 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -121,6 +121,30 @@ class CMultiGridIntegration final : public CIntegration { CConfig *config, unsigned short FinestMesh, unsigned short RunTime_EqSystem, su2double *monitor); + +void PostSmoothing(unsigned short RunTime_EqSystem, + CSolver* solver_fine, + CNumerics** numerics_fine, + CGeometry* geometry_fine, + CSolver** solver_container_fine, + CConfig *config, + unsigned short iMesh, + unsigned short iRKLimit); + + void PreSmoothing(unsigned short RunTime_EqSystem, + CGeometry**** geometry, + CSolver***** solver_container, + CConfig **config_container, + CSolver* solver_fine, + CNumerics** numerics_fine, + CGeometry* geometry_fine, + CSolver** solver_container_fine, + CConfig *config, + unsigned short iMesh, + unsigned short iZone, + unsigned short iRKLimit); + + /*! * \brief Compute the fine solution from a coarse solution. * \param[in] RunTime_EqSystem - System of equations which is going to be solved. diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index a46d6fdbdc38..34f3a5c0c88a 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -368,73 +368,12 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, /*--- Number of RK steps. ---*/ - unsigned short iRKLimit = 1; - - switch (config->GetKind_TimeIntScheme()) { - case RUNGE_KUTTA_EXPLICIT: - iRKLimit = config->GetnRKStep(); - break; - case CLASSICAL_RK4_EXPLICIT: - iRKLimit = 4; - break; - case EULER_EXPLICIT: - case EULER_IMPLICIT: - iRKLimit = 1; - break; - } + unsigned short iRKLimit = config->GetnRKStep(); /*--- Do a presmoothing on the grid iMesh to be restricted to the grid iMesh+1 ---*/ - for (unsigned short iPreSmooth = 0; iPreSmooth < config->GetMG_PreSmooth(iMesh); iPreSmooth++) { - - /*--- Synchronize before each smoothing iteration ---*/ - SU2_OMP_BARRIER - - /*--- Time and space integration ---*/ - - for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { - - /*--- Send-Receive boundary conditions, and preprocessing ---*/ - - solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); - - - if (iRKStep == 0) { - - /*--- Set the old solution ---*/ - - solver_fine->Set_OldSolution(); - - if (classical_rk4) solver_fine->Set_NewSolution(); - - /*--- Compute time step, max eigenvalue, and integration scheme (steady and unsteady problems) ---*/ - - solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, config->GetTimeIter()); - - /*--- Restrict the solution and gradient for the adjoint problem ---*/ - - Adjoint_Setup(geometry, solver_container, config_container, RunTime_EqSystem, config->GetTimeIter(), iZone); - - } - - /*--- Space integration ---*/ - - Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); - - /*--- Time integration, update solution using the old solution plus the solution increment. - Must be called from ALL threads cooperatively: CSysSolve::Solve uses internal - SU2_OMP_BARRIER / SU2_OMP_FOR constructs that require participation of all threads. - Wrapping in SU2_OMP_MASTER would park non-master threads at the outer barrier, - starving the inner barriers and causing data races / deadlocks. ---*/ - 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); - - } - - } + PreSmoothing(RunTime_EqSystem, geometry, solver_container, config_container, solver_fine, numerics_fine, + geometry_fine, solver_container_fine, config, iMesh, iZone, iRKLimit); /*--- Compute Forcing Term $P_(k+1) = I^(k+1)_k(P_k+F_k(u_k))-F_(k+1)(I^(k+1)_k u_k)$ and update solution for multigrid ---*/ @@ -526,40 +465,96 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, SetProlongated_Correction(solver_fine, geometry_fine, config, iMesh); - /*--- Solution post-smoothing in the prolongated grid. ---*/ - for (unsigned short iPostSmooth = 0; iPostSmooth < config->GetMG_PostSmooth(iMesh); iPostSmooth++) { + PostSmoothing(RunTime_EqSystem, solver_fine, numerics_fine, geometry_fine, solver_container_fine, + config, iMesh, iRKLimit); + } - /*--- Synchronize before each post-smoothing iteration ---*/ - SU2_OMP_BARRIER +} - for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { +void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, +CGeometry**** geometry, +CSolver***** solver_container, +CConfig **config_container, +CSolver* solver_fine, +CNumerics** numerics_fine, +CGeometry* geometry_fine, +CSolver** solver_container_fine, +CConfig *config, +unsigned short iMesh, +unsigned short iZone, +unsigned short iRKLimit) { + const bool classical_rk4 = (config->GetKind_TimeIntScheme() == CLASSICAL_RK4_EXPLICIT); + const unsigned short nPreSmooth = config->GetMG_PreSmooth(iMesh); + const unsigned long timeIter = config->GetTimeIter(); - solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); + /*--- Do a presmoothing on the grid iMesh to be restricted to the grid iMesh+1 ---*/ + for (unsigned short iPreSmooth = 0; iPreSmooth < nPreSmooth; iPreSmooth++) { - if (iRKStep == 0) { - solver_fine->Set_OldSolution(); + /*--- Synchronize before each smoothing iteration ---*/ + SU2_OMP_BARRIER - if (classical_rk4) solver_fine->Set_NewSolution(); + /*--- Time and space integration ---*/ + for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { + /*--- Send-Receive boundary conditions, and preprocessing ---*/ + solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); + if (iRKStep == 0) { + /*--- Set the old solution ---*/ + solver_fine->Set_OldSolution(); + if (classical_rk4) solver_fine->Set_NewSolution(); + solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, timeIter); + Adjoint_Setup(geometry, solver_container, config_container, RunTime_EqSystem, timeIter, iZone); + } + /*--- Space integration ---*/ + Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); + /*--- 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); + } - solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, config->GetTimeIter()); - } + /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ + solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); + } +} - /*--- Must be called cooperatively from all threads (see presmooth comment). ---*/ - Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); - solver_fine->Postprocessing(geometry_fine, solver_container_fine, config, iMesh); +void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, CSolver* solver_fine,CNumerics** numerics_fine, CGeometry* geometry_fine, CSolver** solver_container_fine, CConfig *config, unsigned short iMesh,unsigned short iRKLimit) +{ + const bool classical_rk4 = (config->GetKind_TimeIntScheme() == CLASSICAL_RK4_EXPLICIT); + const unsigned short nPostSmooth = config->GetMG_PostSmooth(iMesh); + const unsigned long timeIter = config->GetTimeIter(); + /*--- Do a postsmoothing on the grid iMesh after prolongation from the grid iMesh+1 ---*/ + for (unsigned short iPostSmooth = 0; iPostSmooth < nPostSmooth; iPostSmooth++) { + /*--- Synchronize before each post-smoothing iteration ---*/ + SU2_OMP_BARRIER + for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { + solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); + if (iRKStep == 0) { + /*--- Set the old solution ---*/ + solver_fine->Set_OldSolution(); + if (classical_rk4) solver_fine->Set_NewSolution(); + solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, timeIter); } - + /*--- Space integration ---*/ + Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); + /*--- 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); } - } + /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ + solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + } } + void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { const su2double *Solution_Fine = nullptr, *Solution_Coarse = nullptr; diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index 49ad0550465d..cb127ed7d2e3 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -63,7 +63,7 @@ def main(): discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k" discadj_arina2k.cfg_file = "Arina2KRS.cfg" discadj_arina2k.test_iter = 20 - discadj_arina2k.test_vals = [-3.254894, -3.550776, 0.053099, 0.000000] + discadj_arina2k.test_vals = [-3.259547, -3.544519, 0.044517, 0.000000] test_list.append(discadj_arina2k) # Equivalent area NACA64-206 @@ -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, -4.096681, -2.686537, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -3.949889, -2.567232, 0.000000] test_list.append(discadj_incomp_NACA0012) ##################################### From 567258bf69abd843015bd412b7c0a141fc964404 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 15 Mar 2026 14:16:41 +0100 Subject: [PATCH 133/229] remove unused variable --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 34f3a5c0c88a..6164dc2aedb8 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -356,7 +356,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, CConfig* config = config_container[iZone]; const unsigned short Solver_Position = config->GetContainerPosition(RunTime_EqSystem); - const bool classical_rk4 = (config->GetKind_TimeIntScheme() == CLASSICAL_RK4_EXPLICIT); const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); /*--- Shorter names to refer to fine grid entities. ---*/ From 7546f8f5c6dabfd05f053b7a23b20a306a26604d Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 15 Mar 2026 19:09:18 +0100 Subject: [PATCH 134/229] change getnRKstep --- SU2_CFD/src/integration/CFEM_DG_Integration.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/SU2_CFD/src/integration/CFEM_DG_Integration.cpp b/SU2_CFD/src/integration/CFEM_DG_Integration.cpp index acf9f9552ca4..5cc3ca0284c7 100644 --- a/SU2_CFD/src/integration/CFEM_DG_Integration.cpp +++ b/SU2_CFD/src/integration/CFEM_DG_Integration.cpp @@ -60,12 +60,8 @@ void CFEM_DG_Integration::SingleGrid_Iteration(CGeometry ****geometry, complicated algorithm must be used to facilitate time accurate local time stepping. Note that we are currently hard-coding the classical RK4 scheme. ---*/ - bool useADER = false; - switch (config[iZone]->GetKind_TimeIntScheme()) { - case RUNGE_KUTTA_EXPLICIT: iLimit = config[iZone]->GetnRKStep(); break; - case CLASSICAL_RK4_EXPLICIT: iLimit = 4; break; - case ADER_DG: iLimit = 1; useADER = true; break; - case EULER_EXPLICIT: case EULER_IMPLICIT: iLimit = 1; break; } + unsigned short iLimit = config[iZone]->GetnRKStep(); + /*--- In case an unsteady simulation is carried out, it is possible that a synchronization time step is specified. If so, set the boolean @@ -101,7 +97,7 @@ void CFEM_DG_Integration::SingleGrid_Iteration(CGeometry ****geometry, space and time integration are tightly coupled and cannot be treated segregatedly. Therefore a different function is called for ADER to carry out the space and time integration. ---*/ - if( useADER ) { + if( config[iZone]->GetKind_TimeIntScheme() == ADER_DG ) { solver_container[iZone][iInst][iMesh][SolContainer_Position]->ADER_SpaceTimeIntegration(geometry[iZone][iInst][iMesh], solver_container[iZone][iInst][iMesh], numerics_container[iZone][iInst][iMesh][SolContainer_Position], config[iZone], iMesh, RunTime_EqSystem); From 89fa69ff4065a39deeca70945128657438e58b9c Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 15 Mar 2026 20:23:17 +0100 Subject: [PATCH 135/229] remove unused variable --- SU2_CFD/src/integration/CFEM_DG_Integration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SU2_CFD/src/integration/CFEM_DG_Integration.cpp b/SU2_CFD/src/integration/CFEM_DG_Integration.cpp index 5cc3ca0284c7..7236558f5d13 100644 --- a/SU2_CFD/src/integration/CFEM_DG_Integration.cpp +++ b/SU2_CFD/src/integration/CFEM_DG_Integration.cpp @@ -38,7 +38,7 @@ void CFEM_DG_Integration::SingleGrid_Iteration(CGeometry ****geometry, unsigned short iZone, unsigned short iInst) { - unsigned short iMesh, iStep, iLimit = 1; + unsigned short iMesh, iStep; unsigned short SolContainer_Position = config[iZone]->GetContainerPosition(RunTime_EqSystem); unsigned short FinestMesh = config[iZone]->GetFinestMesh(); From b4a2559ffb8bca9ae5be36b6c483ebddca4d2c0a Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 15 Mar 2026 21:59:53 -0700 Subject: [PATCH 136/229] pastix 6 --- .../include/linear_algebra/CPastixWrapper.hpp | 106 +++++------ Common/src/linear_algebra/CPastixWrapper.cpp | 168 +++++++++--------- TestCases/pastix_support/readme.txt | 91 +++------- meson.build | 24 +-- meson_options.txt | 2 - 5 files changed, 158 insertions(+), 233 deletions(-) diff --git a/Common/include/linear_algebra/CPastixWrapper.hpp b/Common/include/linear_algebra/CPastixWrapper.hpp index 8b22a15cd4a3..61f0cb7edfc9 100644 --- a/Common/include/linear_algebra/CPastixWrapper.hpp +++ b/Common/include/linear_algebra/CPastixWrapper.hpp @@ -34,11 +34,8 @@ #error Cannot use PaStiX with forward mode AD #endif -namespace PaStiX { -extern "C" { #include -} -} // namespace PaStiX +#include #include using namespace std; @@ -55,17 +52,18 @@ class CGeometry; template class CPastixWrapper { private: - PaStiX::pastix_data_t* state; /*!< \brief Internal state of the solver. */ - PaStiX::pastix_int_t nCols; /*!< \brief Local number of columns. */ - vector colptr; /*!< \brief Equiv. to our "row_ptr". */ - vector rowidx; /*!< \brief Equiv. to our "col_ind". */ - vector values; /*!< \brief Equiv. to our "matrix". */ - vector loc2glb; /*!< \brief Global index of the columns held by this rank. */ - vector perm; /*!< \brief Ordering computed by PaStiX. */ - vector workvec; /*!< \brief RHS vector which then becomes the solution. */ - - PaStiX::pastix_int_t iparm[PaStiX::IPARM_SIZE]; /*!< \brief Integer parameters for PaStiX. */ - passivedouble dparm[PaStiX::DPARM_SIZE]; /*!< \brief Floating point parameters for PaStiX. */ + pastix_data_t* state{}; /*!< \brief Internal state of the solver. */ + spmatrix_t spm; /*!< \brief Matrix format used by the solver. */ + pastix_int_t nCols; /*!< \brief Local number of columns. */ + vector colptr; /*!< \brief Equiv. to our "row_ptr". */ + vector rowidx; /*!< \brief Equiv. to our "col_ind". */ + vector values; /*!< \brief Equiv. to our "matrix". */ + vector loc2glb; /*!< \brief Global index of the columns held by this rank. */ + vector perm; /*!< \brief Ordering computed by PaStiX. */ + vector workvec; /*!< \brief RHS vector which then becomes the solution. */ + + pastix_int_t iparm[IPARM_SIZE]; /*!< \brief Integer parameters for PaStiX. */ + passivedouble dparm[DPARM_SIZE]; /*!< \brief Floating point parameters for PaStiX. */ struct { unsigned long nVar = 0; @@ -78,35 +76,31 @@ class CPastixWrapper { unsigned long size_rhs() const { return nPointDomain * nVar; } } matrix; /*!< \brief Pointers and sizes of the input matrix. */ - bool issetup; /*!< \brief Signals that the matrix data has been provided. */ - bool isinitialized; /*!< \brief Signals that the sparsity pattern has been set. */ - bool isfactorized; /*!< \brief Signals that a factorization has been computed. */ - unsigned long iter; /*!< \brief Number of times a factorization has been requested. */ - unsigned short verb; /*!< \brief Verbosity level. */ - const int mpi_size, mpi_rank; + bool issetup{}; /*!< \brief Signals that the matrix data has been provided. */ + bool isinitialized{}; /*!< \brief Signals that the sparsity pattern has been set. */ + bool isfactorized{}; /*!< \brief Signals that a factorization has been computed. */ + unsigned long iter{}; /*!< \brief Number of times a factorization has been requested. */ + unsigned short verb{}; /*!< \brief Verbosity level. */ + const int mpi_size = SU2_MPI::GetSize(); + const int mpi_rank = SU2_MPI::GetRank(); - vector sort_rows; /*!< \brief List of rows with halo points. */ - vector > sort_order; /*!< \brief How each of those rows needs to be sorted. */ - - /*! - * \brief Run the external solver for the task it is currently setup to execute. - */ - void Run() { - dpastix(&state, SU2_MPI::GetComm(), nCols, colptr.data(), rowidx.data(), values.data(), loc2glb.data(), perm.data(), - NULL, workvec.data(), 1, iparm, dparm); - } + vector sort_rows; /*!< \brief List of rows with halo points. */ + vector> sort_order; /*!< \brief How each of those rows needs to be sorted. */ /*! * \brief Run the "clean" task, releases all memory, leaves object in unusable state. */ void Clean() { - using namespace PaStiX; - if (isfactorized) { - iparm[IPARM_VERBOSE] = (verb > 0) ? API_VERBOSE_NO : API_VERBOSE_NOT; - iparm[IPARM_START_TASK] = API_TASK_CLEAN; - iparm[IPARM_END_TASK] = API_TASK_CLEAN; - Run(); + if (isinitialized) { + iparm[IPARM_VERBOSE] = (verb > 0) ? PastixVerboseNo : PastixVerboseNot; + pastixFinalize(&state); + spm.colptr = nullptr; + spm.rowptr = nullptr; + spm.values = nullptr; + if (mpi_size > 1) spm.loc2glob = nullptr; + spmExit(&spm); isfactorized = false; + isinitialized = false; } } @@ -116,18 +110,7 @@ class CPastixWrapper { void Initialize(CGeometry* geometry, const CConfig* config); public: - /*! - * \brief Class constructor. - */ - CPastixWrapper() - : state(nullptr), - issetup(false), - isinitialized(false), - isfactorized(false), - iter(0), - verb(0), - mpi_size(SU2_MPI::GetSize()), - mpi_rank(SU2_MPI::GetRank()) {} + CPastixWrapper() = default; /*--- Move or copy is not allowed. ---*/ CPastixWrapper(CPastixWrapper&&) = delete; @@ -174,9 +157,10 @@ class CPastixWrapper { * \param[in] transposed - Yes or no. */ void SetTransposedSolve(bool transposed = true) { - using namespace PaStiX; - if (iparm[IPARM_SYM] == API_SYM_NO) - iparm[IPARM_TRANSPOSE_SOLVE] = pastix_int_t(!transposed); // negated due to CSR to CSC copy + if (iparm[IPARM_MTX_TYPE] == PastixGeneral) { + /*--- Inverted logic due to CSR to CSC copy. ---*/ + iparm[IPARM_TRANSPOSE_SOLVE] = transposed ? PastixNoTrans : PastixTrans; + } } /*! @@ -186,20 +170,14 @@ class CPastixWrapper { */ template void Solve(const T& rhs, T& sol) { - using namespace PaStiX; - if (!isfactorized) SU2_MPI::Error("The factorization has not been computed yet.", CURRENT_FUNCTION); - unsigned long i; - - for (i = 0; i < matrix.size_rhs(); ++i) workvec[i] = rhs[i]; - - iparm[IPARM_VERBOSE] = API_VERBOSE_NOT; - iparm[IPARM_START_TASK] = API_TASK_SOLVE; - iparm[IPARM_END_TASK] = API_TASK_SOLVE; - Run(); - - for (i = 0; i < matrix.size_rhs(); ++i) sol[i] = workvec[i]; + for (auto i = 0ul; i < matrix.size_rhs(); ++i) workvec[i] = rhs[i]; + iparm[IPARM_VERBOSE] = PastixVerboseNot; + if (pastix_task_solve(state, matrix.size_rhs(), 1, workvec.data(), matrix.size_rhs()) != PASTIX_SUCCESS) { + SU2_MPI::Error("Error solving linear system.", CURRENT_FUNCTION); + } + for (auto i = 0ul; i < matrix.size_rhs(); ++i) sol[i] = workvec[i]; } }; #endif diff --git a/Common/src/linear_algebra/CPastixWrapper.cpp b/Common/src/linear_algebra/CPastixWrapper.cpp index b871ac989771..c8e33ba57038 100644 --- a/Common/src/linear_algebra/CPastixWrapper.cpp +++ b/Common/src/linear_algebra/CPastixWrapper.cpp @@ -38,18 +38,15 @@ template void CPastixWrapper::Initialize(CGeometry* geometry, const CConfig* config) { - using namespace PaStiX; - if (isinitialized) return; // only need to do this once - unsigned long nVar = matrix.nVar, nPoint = matrix.nPoint, nPointDomain = matrix.nPointDomain; + const unsigned long nVar = matrix.nVar, nPoint = matrix.nPoint, nPointDomain = matrix.nPointDomain; const unsigned long *row_ptr = matrix.rowptr, *col_ind = matrix.colidx; - - unsigned long iPoint, offset = 0, nNonZero = row_ptr[nPointDomain]; + const unsigned long nNonZero = row_ptr[nPointDomain]; /*--- Allocate ---*/ - nCols = pastix_int_t(nPointDomain); + nCols = static_cast(nPointDomain); colptr.resize(nPointDomain + 1); rowidx.clear(); rowidx.reserve(nNonZero); @@ -60,53 +57,42 @@ void CPastixWrapper::Initialize(CGeometry* geometry, const CConfig* /*--- Set default parameter values ---*/ - pastix_int_t incomplete = iparm[IPARM_INCOMPLETE]; - - iparm[IPARM_MODIFY_PARAMETER] = API_NO; - Run(); + const auto incomplete = iparm[IPARM_INCOMPLETE]; + const auto mtx_type = iparm[IPARM_MTX_TYPE]; + pastixInitParam(iparm, dparm); /*--- Customize important parameters ---*/ switch (verb) { case 1: - iparm[IPARM_VERBOSE] = API_VERBOSE_NO; + iparm[IPARM_VERBOSE] = PastixVerboseNo; break; case 2: - iparm[IPARM_VERBOSE] = API_VERBOSE_YES; + iparm[IPARM_VERBOSE] = PastixVerboseYes; break; default: - iparm[IPARM_VERBOSE] = API_VERBOSE_NOT; + iparm[IPARM_VERBOSE] = PastixVerboseNot; break; } - iparm[IPARM_DOF_NBR] = pastix_int_t(nVar); - iparm[IPARM_MATRIX_VERIFICATION] = API_NO; - iparm[IPARM_FREE_CSCPASTIX] = API_CSC_FREE; - iparm[IPARM_CSCD_CORRECT] = API_NO; - iparm[IPARM_RHSD_CHECK] = API_NO; - iparm[IPARM_ORDERING] = API_ORDER_PTSCOTCH; + iparm[IPARM_ORDERING] = PastixOrderPtScotch; iparm[IPARM_INCOMPLETE] = incomplete; - iparm[IPARM_LEVEL_OF_FILL] = pastix_int_t(config->GetPastixFillLvl()); + iparm[IPARM_LEVEL_OF_FILL] = static_cast(config->GetPastixFillLvl()); iparm[IPARM_THREAD_NBR] = omp_get_max_threads(); -#if defined(HAVE_MPI) && defined(HAVE_OMP) - int comm_mode = MPI_THREAD_SINGLE; - MPI_Query_thread(&comm_mode); - if (comm_mode == MPI_THREAD_MULTIPLE) - iparm[IPARM_THREAD_COMM_MODE] = API_THREAD_MULTIPLE; - else - iparm[IPARM_THREAD_COMM_MODE] = API_THREAD_FUNNELED; -#endif + iparm[IPARM_MTX_TYPE] = mtx_type; - /*--- Prepare sparsity structure ---*/ + pastixInit(&state, SU2_MPI::GetComm(), iparm, dparm); - /*--- We need it in global coordinates, i.e. shifted according to the position - of the current rank in the linear partitioning space, and "unpacked" halo part. - The latter forces us to re-sort the column indices of rows with halo points, which - in turn requires blocks to be swapped accordingly. Moreover we need "pointer" and - indices in Fortran-style numbering (start at 1), effectively the matrix is copied. - Here we prepare the pointer and index part, and map the required swaps. ---*/ + /*--- Prepare sparsity structure ---*/ - /*--- 1 - Determine position in the linear partitioning ---*/ + /*--- We need it in global coordinates, i.e. shifted according to the position + of the current rank in the linear partitioning space, and "unpacked" halo part. + The latter forces us to re-sort the column indices of rows with halo points, which + in turn requires blocks to be swapped accordingly. Effectively the matrix is copied. + Here we prepare the pointer and index part, and map the required swaps. ---*/ + /*--- 1 - Determine position in the linear partitioning ---*/ + + unsigned long offset = 0; #ifdef HAVE_MPI vector domain_sizes(mpi_size); MPI_Allgather(&nPointDomain, 1, MPI_UNSIGNED_LONG, domain_sizes.data(), 1, MPI_UNSIGNED_LONG, SU2_MPI::GetComm()); @@ -151,54 +137,74 @@ void CPastixWrapper::Initialize(CGeometry* geometry, const CConfig* /*--- 3 - Copy, map the sparsity, and put it in Fortran numbering ---*/ - for (iPoint = 0; iPoint < nPointDomain; ++iPoint) { - colptr[iPoint] = pastix_int_t(row_ptr[iPoint] + 1); + for (auto iPoint = 0ul; iPoint < nPointDomain; ++iPoint) { + colptr[iPoint] = static_cast(row_ptr[iPoint] + 1); - unsigned long begin = row_ptr[iPoint], end = row_ptr[iPoint + 1], j; + const unsigned long begin = row_ptr[iPoint], end = row_ptr[iPoint + 1]; /*--- If last point of row is halo ---*/ - bool sort_required = (col_ind[end - 1] >= nPointDomain); + const bool sort_required = (col_ind[end - 1] >= nPointDomain); if (sort_required) { - unsigned long nnz_row = end - begin; + const unsigned long nnz_row = end - begin; sort_rows.push_back(iPoint); - sort_order.push_back(vector(nnz_row)); + sort_order.emplace_back(nnz_row); /*--- Sort mapped indices ("first") and keep track of source ("second") for when we later need to swap blocks for these rows. ---*/ vector > aux(nnz_row); - for (j = begin; j < end; ++j) { - if (col_ind[j] < nPointDomain) - aux[j - begin].first = pastix_int_t(offset + col_ind[j] + 1); - else - aux[j - begin].first = pastix_int_t(map[col_ind[j] - nPointDomain] + 1); + for (auto j = begin; j < end; ++j) { + if (col_ind[j] < nPointDomain) { + aux[j - begin].first = static_cast(offset + col_ind[j] + 1); + } else { + aux[j - begin].first = static_cast(map[col_ind[j] - nPointDomain] + 1); + } aux[j - begin].second = j; } sort(aux.begin(), aux.end()); - for (j = 0; j < nnz_row; ++j) { + for (auto j = 0ul; j < nnz_row; ++j) { rowidx.push_back(aux[j].first); sort_order.back()[j] = aux[j].second; } } else { /*--- These are all internal, no need to go through map. ---*/ - for (j = begin; j < end; ++j) rowidx.push_back(pastix_int_t(offset + col_ind[j] + 1)); + for (auto j = begin; j < end; ++j) rowidx.push_back(static_cast(offset + col_ind[j] + 1)); } } - colptr[nPointDomain] = pastix_int_t(nNonZero + 1); + colptr[nPointDomain] = static_cast(nNonZero + 1); if (rowidx.size() != nNonZero) SU2_MPI::Error("Error during preparation of PaStiX data", CURRENT_FUNCTION); /*--- 4 - Perform ordering, symbolic factorization, and analysis steps ---*/ + spmInitDist(&spm, SU2_MPI::GetComm()); + spm.mtxtype = static_cast(mtx_type); + spm.flttype = SpmDouble; + spm.fmttype = SpmCSC; + spm.layout = SpmColMajor; + spm.baseval = 1; + + spm.n = nCols; + spm.nnz = nNonZero; + spm.dof = nVar; + + spm.colptr = colptr.data(); + spm.rowptr = rowidx.data(); + spm.values = values.data(); + + spm.replicated = static_cast(mpi_size == 1); + spm.loc2glob = mpi_size > 1 ? loc2glb.data() : nullptr; + spmUpdateComputedFields(&spm); + if (mpi_rank == MASTER_NODE && verb > 0) cout << endl; - iparm[IPARM_START_TASK] = API_TASK_ORDERING; - iparm[IPARM_END_TASK] = API_TASK_ANALYSE; - Run(); + if (const auto rc = pastix_task_analyze(state, &spm); rc != PASTIX_SUCCESS) { + SU2_MPI::Error("Error analyzing matrix: " + std::to_string(rc), CURRENT_FUNCTION); + } if (mpi_rank == MASTER_NODE && verb > 0) cout << " +--------------------------------------------------------------------+" << endl; @@ -208,17 +214,16 @@ void CPastixWrapper::Initialize(CGeometry* geometry, const CConfig* template void CPastixWrapper::Factorize(CGeometry* geometry, const CConfig* config, unsigned short kind_fact) { - using namespace PaStiX; - /*--- Detect a possible change of settings between direct and adjoint that requires a reset ---*/ - if (isinitialized) - if ((kind_fact == PASTIX_ILU) != (iparm[IPARM_INCOMPLETE] == API_YES)) { + if (isinitialized) { + if ((kind_fact == PASTIX_ILU) != (iparm[IPARM_INCOMPLETE] == 1)) { Clean(); - isinitialized = false; iter = 0; } - + } verb = config->GetPastixVerbLvl(); + const bool sym = kind_fact == PASTIX_LDLT || kind_fact == PASTIX_LDLT_P; + iparm[IPARM_MTX_TYPE] = sym ? PastixSymmetric : PastixGeneral; iparm[IPARM_INCOMPLETE] = (kind_fact == PASTIX_ILU); Initialize(geometry, config); @@ -227,20 +232,21 @@ void CPastixWrapper::Factorize(CGeometry* geometry, const CConfig* c switch (verb) { case 1: - iparm[IPARM_VERBOSE] = API_VERBOSE_NO; + iparm[IPARM_VERBOSE] = PastixVerboseNo; break; case 2: - iparm[IPARM_VERBOSE] = API_VERBOSE_YES; + iparm[IPARM_VERBOSE] = PastixVerboseYes; break; default: - iparm[IPARM_VERBOSE] = API_VERBOSE_NOT; + iparm[IPARM_VERBOSE] = PastixVerboseNot; break; } - if (kind_fact == PASTIX_LDLT || kind_fact == PASTIX_LDLT_P) - iparm[IPARM_TRANSPOSE_SOLVE] = API_NO; // symmetric so no need for slower transp. solve - else - iparm[IPARM_TRANSPOSE_SOLVE] = API_YES; // negated due to CSR to CSC copy + if (kind_fact == PASTIX_LDLT || kind_fact == PASTIX_LDLT_P) { + iparm[IPARM_TRANSPOSE_SOLVE] = PastixNoTrans; // symmetric so no need for slower transp. solve + } else { + iparm[IPARM_TRANSPOSE_SOLVE] = PastixTrans; // inverted logic due to CSR to CSC copy + } /*--- Is factorizing needed on this iteration? ---*/ @@ -260,21 +266,21 @@ void CPastixWrapper::Factorize(CGeometry* geometry, const CConfig* c cout << " +--------------------------------------------------------------------+" << endl; } - unsigned long i, j, k, iRow, begin, target, source, szBlk = matrix.nVar * matrix.nVar, nNonZero = values.size(); + const unsigned long szBlk = matrix.nVar * matrix.nVar, nNonZero = values.size(); /*--- Copy matrix values and swap blocks as required ---*/ - for (i = 0; i < nNonZero; ++i) values[i] = SU2_TYPE::GetValue(matrix.values[i]); + for (auto i = 0ul; i < nNonZero; ++i) values[i] = SU2_TYPE::GetValue(matrix.values[i]); - for (i = 0; i < sort_rows.size(); ++i) { - iRow = sort_rows[i]; - begin = matrix.rowptr[iRow]; + for (auto i = 0ul; i < sort_rows.size(); ++i) { + const auto iRow = sort_rows[i]; + const auto begin = matrix.rowptr[iRow]; - for (j = 0; j < sort_order[i].size(); ++j) { - target = (begin + j) * szBlk; - source = sort_order[i][j] * szBlk; + for (auto j = 0ul; j < sort_order[i].size(); ++j) { + const auto target = (begin + j) * szBlk; + const auto source = sort_order[i][j] * szBlk; - for (k = 0; k < szBlk; ++k) values[target + k] = SU2_TYPE::GetValue(matrix.values[source + k]); + for (auto k = 0ul; k < szBlk; ++k) values[target + k] = SU2_TYPE::GetValue(matrix.values[source + k]); } } @@ -283,14 +289,12 @@ void CPastixWrapper::Factorize(CGeometry* geometry, const CConfig* c switch (kind_fact) { case PASTIX_LDLT: case PASTIX_LDLT_P: - iparm[IPARM_SYM] = API_SYM_YES; - iparm[IPARM_FACTORIZATION] = API_FACT_LDLT; + iparm[IPARM_FACTORIZATION] = PastixFactLDLT; break; case PASTIX_LU: case PASTIX_LU_P: case PASTIX_ILU: - iparm[IPARM_SYM] = API_SYM_NO; - iparm[IPARM_FACTORIZATION] = API_FACT_LU; + iparm[IPARM_FACTORIZATION] = PastixFactLU; break; default: SU2_MPI::Error("Unknown type of PaStiX factorization.", CURRENT_FUNCTION); @@ -299,9 +303,9 @@ void CPastixWrapper::Factorize(CGeometry* geometry, const CConfig* c /*--- Compute factorization ---*/ - iparm[IPARM_START_TASK] = API_TASK_NUMFACT; - iparm[IPARM_END_TASK] = API_TASK_NUMFACT; - Run(); + if (const auto rc = pastix_task_numfact(state, &spm); rc != PASTIX_SUCCESS) { + SU2_MPI::Error("Error factorizing matrix: " + std::to_string(rc), CURRENT_FUNCTION); + } if (mpi_rank == MASTER_NODE && verb > 0) cout << " +--------------------------------------------------------------------+" << endl << endl; diff --git a/TestCases/pastix_support/readme.txt b/TestCases/pastix_support/readme.txt index 5b3d30968696..3e22cdc65c47 100644 --- a/TestCases/pastix_support/readme.txt +++ b/TestCases/pastix_support/readme.txt @@ -5,81 +5,32 @@ % File Version 8.4.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -% 1 - Download -% Get PaStiX 5.2.3 from https://gforge.inria.fr/frs/?group_id=186 -% Get Scotch 6.0.6 from https://gforge.inria.fr/projects/scotch -% Note: These two versions were tested on a number of platforms, some -% issues were encountered with more recent version of Scotch, and PaStiX -% 6.0.X is not compatible with SU2 as it does not support MPI yet. -% -% 2 - Build Scotch -% Extract the tarball downloaded in 1 into "externals" -% Rename the directory as "scotch" -% cd scotch/src && cp Make.inc/Makefile.inc.x86-64_pc_linux2.XXXX Makefile.inc -% (choose the XXXX that matches your compiler) -% Edit Makefile.inc and delete the cflag -DSCOTCH_PTHREAD (see why in 3-ii) -% "make ptscotch" -% -% Note: If you build SU2 (7.0.1+) with OpenMP support (-Dwith-omp=true), -% AND your system supports MPI_THREAD_MULTIPLE, you do not need to -% delete the -DSCOTCH_PTHREAD flag (but doing so does no harm). -% -% 3 - Build PaStiX -% Extract the tarball downloaded in 1 into "externals" -% Rename the directory as "pastix" -% cd pastix/src && cp config/LINUX-XXXX.in config.in -% (again choose the XXXX that matches your compiler) -% Edit config.in -% i - Uncomment the lines for "VERSIONINT = _int32" -% ii - Uncomment the lines for "VERSIONSMP = _nosmp", -% SU2 does not currently support MPI+Threads. -% iii - Set SCOTCH_HOME as SCOTCH_HOME ?= ${PWD}/../../scotch/ -% iv - Comment out the lines for "Hardware Locality", this may only be -% important for an MPI+Threads build (usually it is not). -% v - Optionally look at the BLAS section (only required by "make examples") -% "make all" -% -% Note: If you build SU2 (7.0.1+) with OpenMP support (-Dwith-omp=true), -% skip 3-ii, note however that this may not work well with SU2_CFD_AD. -% If you do use MPI+Threads, it is important for good performance that your -% system supports MPI_THREAD_MULTIPLE (SU2_CFD --thread_multiple ...) -% Furthermore, if MPI_THREAD_MULTIPLE is NOT supported, you need to -% uncomment the line with "-DPASTIX_FUNNELED" in config.in. -% Finally, if you just use threads (no MPI) this is not important. +% 1 - Build and install dependencies +% - A BLAS library with LAPACKE support (e.g. OpenBLAS). +% - Scotch and PT-Scotch. +% - HWLOC (recommended for PaStiX). +% If you use your OS package manager for these, the PaStiX and SU2 build +% systems should be able to find them automatically. +% If you build them from source and install in a custom location, you will +% need to use CPATH, LIBRARY_PATH, and LD_LIBRARY_PATH for the build +% systems to find them. +% +% 2 - Build PaStiX +% Get PaStiX 6.X.X from https://gitlab.inria.fr/solverstack/pastix.git +% Follow their build instructions, make sure to compile it with support +% for MPI and PT-Scotch (see the cmake flags). +% You may need to adjust the integer type from 64 to 32 bits depending +% on how your version of Scotch was built. % % 4 - Build SU2 % Follow the normal meson build instructions, add -Denable-pastix=true, % this requires you to compile with MKL (-Denable-mkl=true) or OpenBLAS % (-Denable-openblas=true) support in your call to meson.py. -% If you did not build PaStiX and Scotch in the externals folders you must -% use -Dpastix_root="some path" and -Dscotch_root="another path" to -% indicate where they are RELATIVE to the SU2 directory. -% You need sequential versions of BLAS. But when using MPI+Threads beware that -% OpenBLAS needs to have parallel support otherwise the solver will crash, if -% you get poor performance see 5.4 below. -% -% 5 - Common problems and known issues -% - OpenMPI 4 does not work with PaStiX 5, downgrade to 3.1.4. -% - Very early versions of OpenMPI 3 may have problems with MPI types. -% - OpenBLAS build fails when linking executables. Old versions (e.g. -% 0.2.18) did not provide LAPACK support, rebuild or upgrade. -% - Very bad performance with OpenBLAS on some systems (observed on Ubuntu -% 16.04) try "export OMP_NUM_THREADS=1" before running SU2, check that -% you only see N SU2 processes running at 100% (mpirun -n N SU2_XXX). -% - Cannot find BLAS dependency: -% i - On some OS the package has a different name (e.g. Ubuntu 16.04 -% blas-openblas instead of openblas), use -Dblas-name="right name" in -% call to meson.py -% ii - The name is right but meson cannot find it. Set env variable -% PKG_CONFIG_PATH=$PKG_CONFIG_PATH:"directory with someblas.pc file" -% - MKL is not in its standard directory (/opt/intel/mkl), use option -% -Dmkl_root="non standard directory" in call to meson.py (headers are -% expected in "include" and libraries in "lib/intel64"). +% The reliable way for meson to find PaStiX is use PKG_CONFIG_PATH to +% make the pastix.pc.in file discoverable. For the other dependencies, +% see #1. % % 6 - Tested platforms -% - Ubuntu 18.04, gcc 7.4, ompi 3.1.4, mkl 2017, openblas 0.2.20 and 0.3.2.dev -% - Ubuntu 16.04, gcc 5.4, ompi 3.1.4, mkl 2017 and 2019 -% - CentOS 7.6.1810, gcc 5.4, ompi 3.1.4, mkl 2017 -% - CentOS 7.6.1810, gcc 5.4, impi 2018, mkl 2019 -% - CentOS 7.6.1810, gcc 8.2, impi 2018, mkl 2019 +% - Ubuntu 24.04, gcc 13, ompi 5.0.6, default OpenBLAS, Scotch, PT-Scotch, +% and HWLOC. % diff --git a/meson.build b/meson.build index 8ceab579b765..b5cb2d9b414e 100644 --- a/meson.build +++ b/meson.build @@ -208,18 +208,10 @@ if get_option('enable-pastix') 'PaStiX support requires either mkl or openblas') su2_cpp_args += '-DHAVE_PASTIX' - - pastix_dep = dependency('pastix', required: false) - - if not pastix_dep.found() - pastix_root = get_option('pastix_root')+'/install' - scotch_root = get_option('scotch_root')+'/lib' - pastix_dep = declare_dependency(include_directories: pastix_root, - link_args: [ '-L../'+pastix_root, '-L../'+scotch_root, - '-lpastix', '-lscotch', '-lptscotch', '-lptscotcherr', - '-lm', '-lrt', '-lpthread']) - endif - su2_deps += pastix_dep + su2_deps += dependency('pastix') + su2_deps += meson.get_compiler('cpp').find_library('scotch', required: true) + su2_deps += meson.get_compiler('cpp').find_library('scotcherr', required: true) + su2_deps += meson.get_compiler('cpp').find_library('ptscotch', required: true) endif # CUDA dependencies @@ -250,9 +242,11 @@ elif get_option('enable-openblas') su2_cpp_args += '-DHAVE_BLAS' su2_cpp_args += '-DHAVE_LAPACK' - blas_dep = dependency(get_option('blas-name')) - su2_deps += blas_dep - + su2_deps += dependency(get_option('blas-name')) + su2_deps += dependency('lapack') + if get_option('enable-pastix') + su2_deps += dependency('lapacke') + endif endif if get_option('enable-librom') diff --git a/meson_options.txt b/meson_options.txt index dcecd404204a..66cd441cccd6 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -12,8 +12,6 @@ option('enable-openblas', type : 'boolean', value : false, description: 'enable option('enable-cuda', type : 'boolean', value : false, description: 'enable GPU acceleration using CUDA') option('blas-name', type : 'string', value : 'openblas', description: 'name of the BLAS/LAPACK dependency') option('enable-pastix', type : 'boolean', value : false, description: 'enable PaStiX support') -option('pastix_root', type : 'string', value : 'externals/pastix/', description: 'PaStiX base directory') -option('scotch_root', type : 'string', value : 'externals/scotch/', description: 'Scotch base directory') option('custom-mpi', type : 'boolean', value : false, description: 'enable MPI assuming the compiler and/or env vars give the correct include dirs and linker args.') option('enable-tests', type : 'boolean', value : false, description: 'compile Unit Tests') option('enable-mixedprec', type : 'boolean', value : false, description: 'use single precision floating point arithmetic for sparse algebra') From a11f9a742e0631d4c296280618293058ceb1f898 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 16 Mar 2026 09:44:08 +0100 Subject: [PATCH 137/229] fix nrkstep --- Common/include/CConfig.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index d25b92745209..0e2d424d984e 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -3063,7 +3063,7 @@ class CConfig { switch (GetKind_TimeIntScheme()) { case RUNGE_KUTTA_EXPLICIT: - iRKLimit = GetnRKStep(); + iRKLimit = nRKStep; break; case CLASSICAL_RK4_EXPLICIT: iRKLimit = 4; From 7b128d21549df99bb6e05a5db50ce8f41b2b307a Mon Sep 17 00:00:00 2001 From: mima619 Date: Mon, 16 Mar 2026 10:09:26 +0100 Subject: [PATCH 138/229] Simplified test-case cfg file and restored regression.yml --- .github/workflows/regression.yml | 2 +- .../turbofan_MFR_coupling/MFR_coupling.cfg | 596 +----------------- 2 files changed, 9 insertions(+), 589 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 2cebec15446e..cb7d6cca23ce 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -211,7 +211,7 @@ jobs: uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: # -t -c - args: -b ${{github.ref}} -t develop -c m-minervino/TestCases:develop -s ${{matrix.testscript}} + args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} - name: Cleanup uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: diff --git a/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg b/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg index 476f310ef2f3..e35c2d1772a4 100644 --- a/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg +++ b/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg @@ -1,686 +1,106 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % SU2 configuration file % -% Case description: _________________________________________________________ % -% Author: ___________________________________________________________________ % -% Institution: ______________________________________________________________ % -% Date: __________ % -% File Version 7.2.0 "Blackbird" % +% Case description: Turbofan with outlets-to-inlet mass-flow rate coupling___ % +% Author: Angelo Passarello and Mauro Minervino______________________________ % +% Institution: Italian Aerospace Research Centre (CIRA)______________________ % +% Date: 16/03/2026 % +% File Version 8.4.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% % -% Solver type (EULER, NAVIER_STOKES, RANS, -% INC_EULER, INC_NAVIER_STOKES, INC_RANS, -% NEMO_EULER, NEMO_NAVIER_STOKES, -% FEM_EULER, FEM_NAVIER_STOKES, FEM_RANS, FEM_LES, -% HEAT_EQUATION_FVM, ELASTICITY) SOLVER= EULER -% -% Specify turbulence model (NONE, SA, SA_NEG, SST, SA_E, SA_COMP, SA_E_COMP, SST_SUST) -KIND_TURB_MODEL= NONE -% -% Specify versions/corrections of the SST model (V2003m, V1994m, VORTICITY, KATO_LAUNDER, UQ, SUSTAINING) -SST_OPTIONS= V2003m -% -% Specify versions/corrections of the SA model (NEGATIVE, EDWARDS, WITHFT2, QCR2000, COMPRESSIBILITY, ROTATION, BCM, EXPERIMENTAL) -SA_OPTIONS= NEGATIVE, WITHFT2 -% -% Specify subgrid scale model(NONE, IMPLICIT_LES, SMAGORINSKY, WALE, VREMAN) -KIND_SGS_MODEL= NONE -% -% Specify the verification solution(NO_VERIFICATION_SOLUTION, INVISCID_VORTEX, -% RINGLEB, NS_UNIT_QUAD, TAYLOR_GREEN_VORTEX, -% MMS_NS_UNIT_QUAD, MMS_NS_UNIT_QUAD_WALL_BC, -% MMS_NS_TWO_HALF_CIRCLES, MMS_NS_TWO_HALF_SPHERES, -% MMS_INC_EULER, MMS_INC_NS, INC_TAYLOR_GREEN_VORTEX, -% USER_DEFINED_SOLUTION) -KIND_VERIFICATION_SOLUTION= NO_VERIFICATION_SOLUTION -% -% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT, DISCRETE_ADJOINT) MATH_PROBLEM= DIRECT -% -% Axisymmetric simulation, only compressible flows (NO, YES) -AXISYMMETRIC= NO -% -% Restart solution (NO, YES) RESTART_SOL= NO % -% Discard the data storaged in the solution and geometry files -% e.g. AOA, dCL/dAoA, dCD/dCL, iter, etc. -% Note that AoA in the solution and geometry files is critical -% to aero design using AoA as a variable. (NO, YES) -DISCARD_INFILES= YES -% -% System of measurements (SI, US) -% International system of units (SI): ( meters, kilograms, Kelvins, -% Newtons = kg m/s^2, Pascals = N/m^2, -% Density = kg/m^3, Speed = m/s, -% Equiv. Area = m^2 ) -% United States customary units (US): ( inches, slug, Rankines, lbf = slug ft/s^2, -% psf = lbf/ft^2, Density = slug/ft^3, -% Speed = ft/s, Equiv. Area = ft^2 ) -SYSTEM_MEASUREMENTS= SI -% -% % ------------------------------- SOLVER CONTROL ------------------------------% % -% Maximum number of inner iterations ITER= 10000 -% -% Maximum number of outer iterations (only for multizone problems) -OUTER_ITER= 1 -% -% Maximum number of time iterations -TIME_ITER= 1 -% -% Convergence field CONV_FIELD= RMS_DENSITY -% -% Min value of the residual (log10 of the residual) CONV_RESIDUAL_MINVAL= -15 -% -% Start convergence criteria at iteration number CONV_STARTITER= 10 % -% Number of elements to apply the criteria -CONV_CAUCHY_ELEMS= 100 -% -% Epsilon to control the series convergence -CONV_CAUCHY_EPS= 1E-10 -% -% Iteration number to begin unsteady restarts -RESTART_ITER= 208 -% -%% Time convergence monitoring -WINDOW_CAUCHY_CRIT = NO -% -% List of time convergence fields -CONV_WINDOW_FIELD = (TAVG_DRAG, TAVG_LIFT) -% -% Time Convergence Monitoring starts at Iteration WINDOW_START_ITER + CONV_WINDOW_STARTITER -CONV_WINDOW_STARTITER = 0 -% -% Epsilon to control the series convergence -CONV_WINDOW_CAUCHY_EPS = 1E-3 -% -% Number of elements to apply the criteria -CONV_WINDOW_CAUCHY_ELEMS = 10 -% % -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------% % -% Mach number (non-dimensional, based on the free-stream values) MACH_NUMBER= 0.16719966920674 -% -% Angle of attack (degrees, only for compressible flows) AOA= 0.0 -% -% Side-slip angle (degrees, only for compressible flows) -SIDESLIP_ANGLE= 0.0 -% -% Init option to choose between Reynolds (default) or thermodynamics quantities -% for initializing the solution (REYNOLDS, TD_CONDITIONS) INIT_OPTION= TD_CONDITIONS -% -% Free-stream option to choose between density and temperature (default) for -% initializing the solution (TEMPERATURE_FS, DENSITY_FS) FREESTREAM_OPTION= DENSITY_FS -% -% Free-stream pressure (101325.0 N/m^2, 2116.216 psf by default) FREESTREAM_PRESSURE= 101325.0 -% -% Free-stream temperature (288.15 K, 518.67 R by default) FREESTREAM_TEMPERATURE= 288.15 -% -% Free-stream VIBRATIONAL temperature (288.15 K, 518.67 R by default) -FREESTREAM_TEMPERATURE_VE= 288.15 -% -% Reynolds number (non-dimensional, based on the free-stream values) REYNOLDS_NUMBER= 3.8951057985067e+6 -% -% Reynolds length (1 m, 1 inch by default) -REYNOLDS_LENGTH= 1.0 -% -% Free-stream density (1.2886 Kg/m^3, 0.0025 slug/ft^3 by default) FREESTREAM_DENSITY= 1.225 -% -% Free-stream velocity (1.0 m/s, 1.0 ft/s by default) FREESTREAM_VELOCITY= ( 56.897550640000, 0.0, 0.0 ) -% -% Free-stream viscosity (1.853E-5 N s/m^2, 3.87E-7 lbf s/ft^2 by default) FREESTREAM_VISCOSITY= 1.78938027807758E-05 -% -% Compressible flow non-dimensionalization (DIMENSIONAL, FREESTREAM_PRESS_EQ_ONE, -% FREESTREAM_VEL_EQ_MACH, FREESTREAM_VEL_EQ_ONE) REF_DIMENSIONALIZATION= DIMENSIONAL % -% Free-stream Turbulence Intensity -FREESTREAM_TURBULENCEINTENSITY = 0.001 -% -% Free-stream Turbulent to Laminar viscosity ratio -FREESTREAM_TURB2LAMVISCRATIO = 10 -% -FREESTREAM_NU_FACTOR= 3.0 -% -% ----------------------------- CL DRIVER DEFINITION ---------------------------% -% -% Activate fixed lift mode (specify a CL instead of AoA, NO/YES) -FIXED_CL_MODE= NO -% -% Target coefficient of lift for fixed lift mode (0.80 by default) -TARGET_CL= 0.58 -% -% Estimation of dCL/dAlpha (0.2 per degree by default) -DCL_DALPHA= 0.11 -% -% Maximum number of iterations between AoA updates -UPDATE_AOA_ITER_LIMIT= 2500 -% -% Number of iterations to evaluate dCL_dAlpha by using finite differences (500 by default) -ITER_DCL_DALPHA= 500 - % ---------------------- REFERENCE VALUE DEFINITION ---------------------------% % % Reference origin for moment computation (m or in) REF_ORIGIN_MOMENT_X = 0.00 REF_ORIGIN_MOMENT_Y = 0.00 REF_ORIGIN_MOMENT_Z = 0.00 -% -% Reference length for moment non-dimensional coefficients (m or in) REF_LENGTH= 1.0 -% -% Reference area for non-dimensional force coefficients (0 implies automatic -% calculation) (m^2 or in^2) REF_AREA= 1.0 -% -% Aircraft semi-span (0 implies automatic calculation) (m or in) SEMI_SPAN= 1.0 - -% ---- NONEQUILIBRIUM GAS, IDEAL GAS, POLYTROPIC, VAN DER WAALS AND PENG ROBINSON CONSTANTS -------% -% -% Fluid model (STANDARD_AIR, IDEAL_GAS, VW_GAS, PR_GAS, -% CONSTANT_DENSITY, INC_IDEAL_GAS, INC_IDEAL_GAS_POLY, MUTATIONPP, USER_DEFINED_NONEQ) -FLUID_MODEL= STANDARD_AIR -% -% Ratio of specific heats (1.4 default and the value is hardcoded -% for the model STANDARD_AIR, compressible only) -GAMMA_VALUE= 1.4 -% -% Specific gas constant (287.058 J/kg*K default and this value is hardcoded -% for the model STANDARD_AIR, compressible only) -GAS_CONSTANT= 287.058 -% -% Critical Temperature (131.00 K by default) -CRITICAL_TEMPERATURE= 131.00 -% -% Critical Pressure (3588550.0 N/m^2 by default) -CRITICAL_PRESSURE= 3588550.0 -% -% Acentri factor (0.035 (air)) -ACENTRIC_FACTOR= 0.035 -% -% Specific heat at constant pressure, Cp (1004.703 J/kg*K (air)). -% Incompressible fluids with energy eqn. only (CONSTANT_DENSITY, INC_IDEAL_GAS). -SPECIFIC_HEAT_CP= 1004.703 -% -% Thermal expansion coefficient (0.00347 K^-1 (air)) -% Used with Boussinesq approx. (incompressible, BOUSSINESQ density model only) -THERMAL_EXPANSION_COEFF= 0.00347 -% -% Molecular weight for an incompressible ideal gas (28.96 g/mol (air) default) -MOLECULAR_WEIGHT= 28.96 -% -% Temperature polynomial coefficients (up to quartic) for specific heat Cp. -% Format -> Cp(T) : b0 + b1*T + b2*T^2 + b3*T^3 + b4*T^4 -CP_POLYCOEFFS= (0.0, 0.0, 0.0, 0.0, 0.0) - -% --------------------------- VISCOSITY MODEL ---------------------------------% -% -% Viscosity model (SUTHERLAND, CONSTANT_VISCOSITY, POLYNOMIAL_VISCOSITY). -VISCOSITY_MODEL= SUTHERLAND -% -% Molecular Viscosity that would be constant (1.716E-5 by default) -MU_CONSTANT= 1.716E-5 -% -% Sutherland Viscosity Ref (1.716E-5 default value for AIR SI) -MU_REF= 1.716E-5 -% -% Sutherland Temperature Ref (273.15 K default value for AIR SI) -MU_T_REF= 273.15 -% -% Sutherland constant (110.4 default value for AIR SI) -SUTHERLAND_CONSTANT= 110.4 -% -% Temperature polynomial coefficients (up to quartic) for viscosity. -% Format -> Mu(T) : b0 + b1*T + b2*T^2 + b3*T^3 + b4*T^4 -MU_POLYCOEFFS= (0.0, 0.0, 0.0, 0.0, 0.0) - -% --------------------------- THERMAL CONDUCTIVITY MODEL ----------------------% -% -% Laminar Conductivity model (CONSTANT_CONDUCTIVITY, CONSTANT_PRANDTL, -% POLYNOMIAL_CONDUCTIVITY). -CONDUCTIVITY_MODEL= CONSTANT_PRANDTL -% -% Molecular Thermal Conductivity that would be constant (0.0257 by default) -THERMAL_CONDUCTIVITY_CONSTANT= 0.0257 -% -% Laminar Prandtl number (0.72 (air), only for CONSTANT_PRANDTL) -PRANDTL_LAM= 0.72 -% -% Temperature polynomial coefficients (up to quartic) for conductivity. -% Format -> Kt(T) : b0 + b1*T + b2*T^2 + b3*T^3 + b4*T^4 -KT_POLYCOEFFS= (0.0, 0.0, 0.0, 0.0, 0.0) -% -% Definition of the turbulent thermal conductivity model for RANS -% (CONSTANT_PRANDTL_TURB by default, NONE). -TURBULENT_CONDUCTIVITY_MODEL= CONSTANT_PRANDTL_TURB -% -% Turbulent Prandtl number (0.9 (air) by default) -PRANDTL_TURB= 0.90 -% ----------------------- DYNAMIC MESH DEFINITION -----------------------------% -% -% Type of dynamic mesh (NONE, RIGID_MOTION, ROTATING_FRAME, -% STEADY_TRANSLATION, GUST) -% ROTATING_FRAME: This option considers both parameters ROTATION_RATE and -% TRANSLATION_RATE, which allows to simulate a free-flying aircraft (in a flight -% mechanical sense) which moves and rotates in all six degrees of freedom about -% the center of gravity. In this context, the farfield MACH number is set to -% zero and MACH_MOTION is used instead to compute force coefficients. -% STEADY_TRANSLATION: This option considers only the parameter TRANSLATION_RATE. -% -GRID_MOVEMENT= NONE -% -% Motion mach number (non-dimensional). Used for initializing a viscous flow -% with the Reynolds number and for computing force coeffs. with dynamic meshes. -MACH_MOTION= 0.16719966920674 -% -% Coordinates of the motion origin -MOTION_ORIGIN= 0.0 0.0 0.0 -% -% Angular velocity vector (rad/s) about the motion origin -ROTATION_RATE = 0.0 0.0 0.0 -% -% Pitching angular freq. (rad/s) about the motion origin -PITCHING_OMEGA= 0.0 0.0 0.0 -% -% Pitching amplitude (degrees) about the motion origin -PITCHING_AMPL= 0.0 0.0 0.0 -% -% Pitching phase offset (degrees) about the motion origin -PITCHING_PHASE= 0.0 0.0 0.0 -% -% Translational velocity (m/s or ft/s) in the x, y, & z directions -TRANSLATION_RATE = 0.0 0.0 0.0 -% -% Plunging angular freq. (rad/s) in x, y, & z directions -PLUNGING_OMEGA= 0.0 0.0 0.0 -% -% Plunging amplitude (m or ft) in x, y, & z directions -PLUNGING_AMPL= 0.0 0.1 0.0 % % -------------------- BOUNDARY CONDITION DEFINITION --------------------------% % -% Navier-Stokes (no-slip), constant heat flux wall marker(s) (NONE = no marker) -% Format: ( marker name, constant heat flux (J/m^2), ... ) -%MARKER_HEATFLUX= ( INTAKE, 0.0, NOZZLE_TE, 0.0, PLUG_TE, 0.0, PLUG, 0.0, NACELLE_TE, 0.0, SPINNER, 0.0, LIP, 0.0, NOZZLE_INNER, 0.0, NOZZLE, 0.0, NACELLE_INNER, 0.0, COWL, 0.0 ) MARKER_EULER= ( INTAKE, NOZZLE_TE, PLUG_TE, PLUG, NACELLE_TE, SPINNER, LIP, NOZZLE_INNER, NOZZLE, NACELLE_INNER, COWL ) -% -% Far-field boundary marker(s) (NONE = no marker) MARKER_FAR= ( FF ) -% -% Outlet boundary marker(s) (NONE = no marker) -% Compressible: ( outlet marker, back pressure (static thermodynamic), ... ) -% Inc. Pressure: ( outlet marker, back pressure (static gauge in Pa), ... ) -% Inc. Mass Flow: ( outlet marker, mass flow target (kg/s), ... ) -%MARKER_OUTLET= ( OUT, 101325.0 ) -% -% Symmetry boundary marker(s) (NONE = no marker) -%MARKER_SYM= ( SYM ) -% -% Engine Inflow boundary type (FAN_FACE_MACH, FAN_FACE_PRESSURE, FAN_FACE_MDOT) ENGINE_INFLOW_TYPE= FAN_FACE_MDOT ENGINE_EXHAUST_TO_INLET= YES -% -% Damping factor for the engine inflow. DAMP_ENGINE_INFLOW= 0.01 -% -% Engine inflow boundary marker(s) (NONE = no marker) -% Format: (engine inflow marker, fan face Mach, ... ) MARKER_ENGINE_INFLOW= ( FAN_IN, 140.0 ) -% -% Engine exhaust boundary marker(s) with the following formats (NONE = no marker) -% Format: (engine exhaust marker, total nozzle temp, total nozzle pressure, ... ) MARKER_ENGINE_EXHAUST= ( FAN_OUT, 289.761088684333, 103321.726628227, CORE_OUT, 289.761088684333, 103321.726628227 ) % -% Engine nu factor (SA model). -ENGINE_NU_FACTOR= 3.0 -% % ------------------------ SURFACES IDENTIFICATION ----------------------------% % -% Marker(s) of the surface in the surface flow solution file MARKER_PLOTTING = ( NOZZLE_TE, PLUG_TE, PLUG, NACELLE_TE, SPINNER, LIP, INTAKE, NOZZLE_INNER, NOZZLE, NACELLE_INNER, COWL, FAN_IN, FAN_OUT, CORE_OUT ) -% -% Marker(s) of the surface where the non-dimensional coefficients are evaluated. MARKER_MONITORING = ( NACELLE_TE, LIP, COWL ) -% -% Marker(s) of the surface that is going to be analyzed in detail (massflow, average pressure, distortion, etc) MARKER_ANALYZE = ( FAN_IN, FAN_OUT, CORE_OUT ) -% -% Method to compute the average value in MARKER_ANALYZE (AREA, MASSFLUX). MARKER_ANALYZE_AVERAGE = MASSFLUX % % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % -% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES) NUM_METHOD_GRAD= GREEN_GAUSS - -% Numerical method for spatial gradients to be used for MUSCL reconstruction -% Options are (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES, LEAST_SQUARES). Default value is -% NONE and the method specified in NUM_METHOD_GRAD is used. NUM_METHOD_GRAD_RECON = GREEN_GAUSS -% -% CFL number (initial value for the adaptive CFL number) CFL_NUMBER= 1.0 % -% Adaptive CFL number (NO, YES) -CFL_ADAPT= NO -% -% Parameters of the adaptive CFL number (factor down, factor up, CFL min value, -% CFL max value ) -CFL_ADAPT_PARAM= ( 0.1, 2.0, 0.1, 1.0 ) -% -% Maximum Delta Time in local time stepping simulations -MAX_DELTA_TIME= 1E6 -% -% Runge-Kutta alpha coefficients -RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) -% -% Objective function in gradient evaluation (DRAG, LIFT, SIDEFORCE, MOMENT_X, -% MOMENT_Y, MOMENT_Z, EFFICIENCY, BUFFET, -% EQUIVALENT_AREA, NEARFIELD_PRESSURE, -% FORCE_X, FORCE_Y, FORCE_Z, THRUST, -% TORQUE, TOTAL_HEATFLUX, -% MAXIMUM_HEATFLUX, INVERSE_DESIGN_PRESSURE, -% INVERSE_DESIGN_HEATFLUX, SURFACE_TOTAL_PRESSURE, -% SURFACE_MASSFLOW, SURFACE_STATIC_PRESSURE, SURFACE_MACH) -% For a weighted sum of objectives: separate by commas, add OBJECTIVE_WEIGHT and MARKER_MONITORING in matching order. -OBJECTIVE_FUNCTION= DRAG -% -% List of weighting values when using more than one OBJECTIVE_FUNCTION. Separate by commas and match with MARKER_MONITORING. -OBJECTIVE_WEIGHT = 1.0 - % ----------- SLOPE LIMITER AND DISSIPATION SENSOR DEFINITION -----------------% % -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations. -% Required for 2nd order upwind schemes (NO, YES) MUSCL_FLOW= NO -% -% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG, -% BARTH_JESPERSEN, VAN_ALBADA_EDGE) -SLOPE_LIMITER_FLOW= VENKATAKRISHNAN -% -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations. -% Required for 2nd order upwind schemes (NO, YES) MUSCL_TURB= YES % -% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG, -% BARTH_JESPERSEN, VAN_ALBADA_EDGE) -SLOPE_LIMITER_TURB= VENKATAKRISHNAN -% -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the adjoint flow equations. -% Required for 2nd order upwind schemes (NO, YES) -MUSCL_ADJFLOW= YES -% -% Slope limiter (NONE, VENKATAKRISHNAN, BARTH_JESPERSEN, VAN_ALBADA_EDGE, -% SHARP_EDGES, WALL_DISTANCE) -SLOPE_LIMITER_ADJFLOW= VENKATAKRISHNAN -% -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence adjoint equations. -% Required for 2nd order upwind schemes (NO, YES) -MUSCL_ADJTURB= NO -% -% Slope limiter (NONE, VENKATAKRISHNAN, BARTH_JESPERSEN, VAN_ALBADA_EDGE) -SLOPE_LIMITER_ADJTURB= VENKATAKRISHNAN -% -% Coefficient for the Venkat's limiter (upwind scheme). A larger values decrease -% the extent of limiting, values approaching zero cause -% lower-order approximation to the solution (0.05 by default) -VENKAT_LIMITER_COEFF= 0.05 -% -% Reference coefficient for detecting sharp edges (3.0 by default). -REF_SHARP_EDGES = 3.0 -% -% Coefficient for the adjoint sharp edges limiter (3.0 by default). -ADJ_SHARP_LIMITER_COEFF= 3.0 -% -% Remove sharp edges from the sensitivity evaluation (NO, YES) -SENS_REMOVE_SHARP = NO -% -% Freeze the value of the limiter after a number of iterations -LIMITER_ITER= 999999 -% -% 1st order artificial dissipation coefficients for -% the Lax–Friedrichs method ( 0.15 by default ) -LAX_SENSOR_COEFF= 0.15 -% -% 2nd and 4th order artificial dissipation coefficients for -% the JST method ( 0.5, 0.02 by default ) -JST_SENSOR_COEFF= ( 0.5, 0.02 ) -% -% 1st order artificial dissipation coefficients for -% the adjoint Lax–Friedrichs method ( 0.15 by default ) -ADJ_LAX_SENSOR_COEFF= 0.15 -% -% 2nd, and 4th order artificial dissipation coefficients for -% the adjoint JST method ( 0.5, 0.02 by default ) -ADJ_JST_SENSOR_COEFF= ( 0.5, 0.02 ) - % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% % -% Linear solver or smoother for implicit formulations: -% BCGSTAB, FGMRES, RESTARTED_FGMRES, CONJUGATE_GRADIENT (self-adjoint problems only), SMOOTHER. LINEAR_SOLVER= FGMRES -% -% Same for discrete adjoint (smoothers not supported) -DISCADJ_LIN_SOLVER= FGMRES -% -% Preconditioner of the Krylov linear solver or type of smoother (ILU, LU_SGS, LINELET, JACOBI) -LINEAR_SOLVER_PREC= ILU -% -% Same for discrete adjoint (JACOBI or ILU) -DISCADJ_LIN_PREC= ILU -% -% Linael solver ILU preconditioner fill-in level (0 by default) -LINEAR_SOLVER_ILU_FILL_IN= 0 -% -% Minimum error of the linear solver for implicit formulations -LINEAR_SOLVER_ERROR= 1E-6 -% -% Max number of iterations of the linear solver for the implicit formulation LINEAR_SOLVER_ITER= 5 % -% Restart frequency for RESTARTED_FGMRES -LINEAR_SOLVER_RESTART_FREQUENCY= 10 -% -% Relaxation factor for smoother-type solvers (LINEAR_SOLVER= SMOOTHER) -LINEAR_SOLVER_SMOOTHER_RELAXATION= 1.0 - -% -------------------------- MULTIGRID PARAMETERS -----------------------------% -% -% Multi-grid levels (0 = no multi-grid) -MGLEVEL= 0 -% -% Multi-grid cycle (V_CYCLE, W_CYCLE, FULLMG_CYCLE) -MGCYCLE= V_CYCLE -% -% Multi-grid pre-smoothing level -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -% -% Multi-grid post-smoothing level -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -% -% Jacobi implicit smoothing of the correction -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -% -% Damping factor for the residual restriction -MG_DAMP_RESTRICTION= 0.75 -% -% Damping factor for the correction prolongation -MG_DAMP_PROLONGATION= 0.75 - % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % -% Convective numerical method (JST, JST_KE, JST_MAT, LAX-FRIEDRICH, CUSP, ROE, AUSM, -% AUSMPLUSUP, AUSMPLUSUP2, AUSMPWPLUS, HLLC, TURKEL_PREC, -% SW, MSW, FDS, SLAU, SLAU2, L2ROE, LMROE) CONV_NUM_METHOD_FLOW= JST -% -% Roe Low Dissipation function for Hybrid RANS/LES simulations (FD, NTS, NTS_DUCROS) -ROE_LOW_DISSIPATION= NONE -% -% Post-reconstruction correction for low Mach number flows (NO, YES) -LOW_MACH_CORR= NO -% -% Roe-Turkel preconditioning for low Mach number flows (NO, YES) LOW_MACH_PREC= YES -% -% Use numerically computed Jacobians for AUSM+up(2) and SLAU(2) -% Slower per iteration but potentialy more stable and capable of higher CFL -USE_ACCURATE_FLUX_JACOBIANS= NO -% -% Use the vectorized version of the selected numerical method (available for JST family and Roe). -% SU2 should be compiled for an AVX or AVX512 architecture for best performance. -USE_VECTORIZATION= NO -% -% Entropy fix coefficient (0.0 implies no entropy fixing, 1.0 implies scalar -% artificial dissipation) ENTROPY_FIX_COEFF= 0.001 % -% Higher values than 1 (3 to 4) make the global Jacobian of central schemes (compressible flow -% only) more diagonal dominant (but mathematically incorrect) so that higher CFL can be used. -CENTRAL_JACOBIAN_FIX_FACTOR= 4.0 -% -% Time discretization (RUNGE-KUTTA_EXPLICIT, EULER_IMPLICIT, EULER_EXPLICIT) -TIME_DISCRE_FLOW= EULER_IMPLICIT -% -% -------------------- TURBULENT NUMERICAL METHOD DEFINITION ------------------% -% -% Convective numerical method (SCALAR_UPWIND) -CONV_NUM_METHOD_TURB= SCALAR_UPWIND -% -% Time discretization (EULER_IMPLICIT) -TIME_DISCRE_TURB= EULER_IMPLICIT -% -% Reduction factor of the CFL coefficient in the turbulence problem -CFL_REDUCTION_TURB= 1.0 - -% --------------------- HEAT NUMERICAL METHOD DEFINITION ----------------------% -% -% Value of the thermal diffusivity -%THERMAL_DIFFUSIVITY= 1.0 - % ------------------------- SCREEN/HISTORY VOLUME OUTPUT --------------------------% % -% Screen output fields (use 'SU2_CFD -d ' to view list of available fields) SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, LIFT, DRAG, SURFACE_MASSFLOW) -% -% History output groups (use 'SU2_CFD -d ' to view list of available fields) HISTORY_OUTPUT= (ITER, AERO_COEFF, RMS_RES, AOA, NONPHYSICAL_POINTS, SURFACE_MASSFLOW, SURFACE_STATIC_PRESSURE) -% -% Volume output fields/groups (use 'SU2_CFD -d ' to view list of available fields) VOLUME_OUTPUT= (COORDINATES, SOLUTION, PRIMITIVE) -% -% Writing frequency for screen output -SCREEN_WRT_FREQ_INNER= 1 -% -SCREEN_WRT_FREQ_OUTER= 1 -% -SCREEN_WRT_FREQ_TIME= 1 -% -% Writing frequency for history output -HISTORY_WRT_FREQ_INNER= 1 -% -HISTORY_WRT_FREQ_OUTER= 1 -% -HISTORY_WRT_FREQ_TIME= 1 -% -% list of writing frequencies corresponding to the list in OUTPUT_FILES OUTPUT_WRT_FREQ= 1000 -% -% Output the performance summary to the console at the end of SU2_CFD -WRT_PERFORMANCE= NO -% -% Overwrite or append iteration number to the restart files when saving -WRT_RESTART_OVERWRITE= YES -% -% Overwrite or append iteration number to the surface files when saving -WRT_SURFACE_OVERWRITE= YES -% -% Overwrite or append iteration number to the volume files when saving -WRT_VOLUME_OVERWRITE= YES -% WRT_FORCES_BREAKDOWN= YES % % ------------------------- INPUT/OUTPUT FILE INFORMATION --------------------------% % -% Mesh input file +SURFACE_FILENAME= surface_flow +VOLUME_FILENAME= flow +RESTART_FILENAME= restart_flow.dat MESH_FILENAME= engine-alone.cgns -% -% Mesh input file format (SU2, CGNS) MESH_FORMAT= CGNS -% -% Mesh output file -MESH_OUT_FILENAME= mesh_out.su2 -% -% Restart flow input file -SOLUTION_FILENAME= solution_flow.dat -% -% Restart adjoint input file -SOLUTION_ADJ_FILENAME= solution_adj.dat -% -% Output tabular file format (TECPLOT, CSV) TABULAR_FORMAT= TECPLOT -% -% Files to output -% Possible formats : (TECPLOT_ASCII, TECPLOT, SURFACE_TECPLOT_ASCII, -% SURFACE_TECPLOT, CSV, SURFACE_CSV, PARAVIEW_ASCII, PARAVIEW_LEGACY, SURFACE_PARAVIEW_ASCII, -% SURFACE_PARAVIEW_LEGACY, PARAVIEW, SURFACE_PARAVIEW, RESTART_ASCII, RESTART, CGNS, SURFACE_CGNS, STL_ASCII, STL_BINARY) -% default : (RESTART, PARAVIEW, SURFACE_PARAVIEW) OUTPUT_FILES= (RESTART, TECPLOT, SURFACE_TECPLOT) -% -% Output file convergence history (w/o extension) -CONV_FILENAME= history -% -% Output file with the forces breakdown -BREAKDOWN_FILENAME= forces_breakdown.dat -% -% Output file restart flow -RESTART_FILENAME= restart_flow.dat -% -% Output file restart adjoint -RESTART_ADJ_FILENAME= restart_adj.dat -% -% Output file flow (w/o extension) variables -VOLUME_FILENAME= flow -% -% Output file adjoint (w/o extension) variables -VOLUME_ADJ_FILENAME= adjoint -% -% Output Objective function -VALUE_OBJFUNC_FILENAME= of_eval.dat -% -% Output objective function gradient (using continuous adjoint) -GRAD_OBJFUNC_FILENAME= of_grad.dat -% -% Output file surface flow coefficient (w/o extension) -SURFACE_FILENAME= surface_flow -% -% Output file surface adjoint coefficient (w/o extension) -SURFACE_ADJ_FILENAME= surface_adjoint -% -% Read binary restart files (YES, NO) READ_BINARY_RESTART= YES -% -% Reorient elements based on potential negative volumes (YES/NO) REORIENT_ELEMENTS= YES From 446c81cfee4ef44207f334b9ac3c9f72cb2a001c Mon Sep 17 00:00:00 2001 From: mima619 Date: Mon, 16 Mar 2026 18:27:10 +0100 Subject: [PATCH 139/229] Corrected name in test-case cfg header --- TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg b/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg index e35c2d1772a4..c580bf01003f 100644 --- a/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg +++ b/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Turbofan with outlets-to-inlet mass-flow rate coupling___ % -% Author: Angelo Passarello and Mauro Minervino______________________________ % +% Author: Angelo Passariello and Mauro Minervino_____________________________ % % Institution: Italian Aerospace Research Centre (CIRA)______________________ % % Date: 16/03/2026 % % File Version 8.4.0 "Harrier" % From 096dfb6785ae60485a087e1c4f7c9c5420d673e1 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 16 Mar 2026 22:26:12 +0100 Subject: [PATCH 140/229] add briefs, use numerics_limits --- Common/src/geometry/dual_grid/CPoint.cpp | 2 +- .../integration/CMultiGridIntegration.hpp | 65 ++++++++++++++----- 2 files changed, 48 insertions(+), 19 deletions(-) diff --git a/Common/src/geometry/dual_grid/CPoint.cpp b/Common/src/geometry/dual_grid/CPoint.cpp index b5bc0dfdf35e..410a5c31bfdc 100644 --- a/Common/src/geometry/dual_grid/CPoint.cpp +++ b/Common/src/geometry/dual_grid/CPoint.cpp @@ -74,7 +74,7 @@ void CPoint::FullAllocation(unsigned short imesh, const CConfig* config) { /*--- Multigrid structures. ---*/ if (config->GetnMGLevels() > 0) { - Parent_CV.resize(npoint) = ULONG_MAX; // Initialize to ULONG_MAX to indicate unagglomerated + Parent_CV.resize(npoint) = numeric_limits::max(); Agglomerate.resize(npoint) = false; Agglomerate_Indirect.resize(npoint) = false; /*--- The finest grid does not have children CV's. ---*/ diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index 54068ea01cdc..1c86e600f6a4 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -68,7 +68,8 @@ class CMultiGridIntegration final : public CIntegration { void MultiGrid_Cycle(CGeometry ****geometry, CSolver *****solver_container, CNumerics ******numerics_container, CConfig **config, unsigned short iMesh, unsigned short mu, unsigned short RunTime_EqSystem, - unsigned short iZone, unsigned short iInst); + unsigned short iZone, unsigned short iInst, + unsigned short *lastPreSmoothIters); /*! * \brief Compute the forcing term. @@ -79,7 +80,8 @@ class CMultiGridIntegration final : public CIntegration { * \param[in] config - Definition of the particular problem. */ void SetForcing_Term(CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, - CGeometry *geo_coarse, CConfig *config, unsigned short iMesh); + CGeometry *geo_coarse, CConfig *config, unsigned short iMesh, + su2double val_factor = -1.0); /*! * \brief Add the truncation error to the residual. @@ -121,8 +123,31 @@ class CMultiGridIntegration final : public CIntegration { CConfig *config, unsigned short FinestMesh, unsigned short RunTime_EqSystem, su2double *monitor); + /*! + * \brief Compute the fine solution from a coarse solution. + * \param[in] RunTime_EqSystem - System of equations which is going to be solved. + * \param[out] sol_fine - Pointer to the solution on the fine grid. + * \param[in] sol_coarse - Pointer to the solution on the coarse grid. + * \param[in] geo_fine - Geometrical definition of the fine grid. + * \param[in] geo_coarse - Geometrical definition of the coarse grid. + * \param[in] config - Definition of the particular problem. + */ + void SetProlongated_Solution(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, + CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config); + -void PostSmoothing(unsigned short RunTime_EqSystem, + /*! + * \brief Apply post-smoothing iterations on the fine grid after prolongation. + * \param[in] RunTime_EqSystem - System of equations which is going to be solved. + * \param[in] solver_fine - Pointer to the solver on the fine grid. + * \param[in] numerics_fine - Description of the numerical method on the fine grid. + * \param[in] geometry_fine - Geometrical definition of the fine grid. + * \param[in] solver_container_fine - Container with all solvers on the fine grid. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + * \param[in] iRKLimit - Number of Runge-Kutta steps. + */ + void PostSmoothing(unsigned short RunTime_EqSystem, CSolver* solver_fine, CNumerics** numerics_fine, CGeometry* geometry_fine, @@ -131,6 +156,22 @@ void PostSmoothing(unsigned short RunTime_EqSystem, unsigned short iMesh, unsigned short iRKLimit); + /*! + * \brief Apply pre-smoothing iterations on the fine grid before restriction. + * \param[in] RunTime_EqSystem - System of equations which is going to be solved. + * \param[in] geometry - Geometrical definition of the problem (all levels). + * \param[in] solver_container - Container vector with all the solutions. + * \param[in] config_container - Definition of the particular problems. + * \param[in] solver_fine - Pointer to the solver on the fine grid. + * \param[in] numerics_fine - Description of the numerical method on the fine grid. + * \param[in] geometry_fine - Geometrical definition of the fine grid. + * \param[in] solver_container_fine - Container with all solvers on the fine grid. + * \param[in] config - Definition of the particular problem. + * \param[in] iMesh - Index of the mesh in multigrid computations. + * \param[in] iZone - Index of the zone. + * \param[in] iRKLimit - Number of Runge-Kutta steps. + * \param[out] lastPreSmoothIters - Number of pre-smoothing iterations performed. + */ void PreSmoothing(unsigned short RunTime_EqSystem, CGeometry**** geometry, CSolver***** solver_container, @@ -142,20 +183,8 @@ void PostSmoothing(unsigned short RunTime_EqSystem, CConfig *config, unsigned short iMesh, unsigned short iZone, - unsigned short iRKLimit); - - - /*! - * \brief Compute the fine solution from a coarse solution. - * \param[in] RunTime_EqSystem - System of equations which is going to be solved. - * \param[out] sol_fine - Pointer to the solution on the fine grid. - * \param[in] sol_coarse - Pointer to the solution on the coarse grid. - * \param[in] geo_fine - Geometrical definition of the fine grid. - * \param[in] geo_coarse - Geometrical definition of the coarse grid. - * \param[in] config - Definition of the particular problem. - */ - void SetProlongated_Solution(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, - CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config); + unsigned short iRKLimit, + unsigned short *lastPreSmoothIters); /*! * \brief Compute the fine grid correction from the coarse solution. @@ -178,7 +207,7 @@ void PostSmoothing(unsigned short RunTime_EqSystem, * \param[in] config - Definition of the particular problem. */ void SmoothProlongated_Correction(unsigned short RunTime_EqSystem, CSolver *solver, CGeometry *geometry, - unsigned short val_nSmooth, su2double val_smooth_coeff, CConfig *config); + unsigned short val_nSmooth, su2double val_smooth_coeff, CConfig *config, unsigned short iMesh); /*! * \brief Restrict solution from fine grid to a coarse grid. From cc53635428138dbd8459b8d53cfe715fe07677e1 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Tue, 17 Mar 2026 18:55:22 +0100 Subject: [PATCH 141/229] remove stuff intended for part 2 --- .../include/integration/CMultiGridIntegration.hpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index 1c86e600f6a4..eff1c2cb499b 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -68,8 +68,7 @@ class CMultiGridIntegration final : public CIntegration { void MultiGrid_Cycle(CGeometry ****geometry, CSolver *****solver_container, CNumerics ******numerics_container, CConfig **config, unsigned short iMesh, unsigned short mu, unsigned short RunTime_EqSystem, - unsigned short iZone, unsigned short iInst, - unsigned short *lastPreSmoothIters); + unsigned short iZone, unsigned short iInst); /*! * \brief Compute the forcing term. @@ -80,8 +79,7 @@ class CMultiGridIntegration final : public CIntegration { * \param[in] config - Definition of the particular problem. */ void SetForcing_Term(CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, - CGeometry *geo_coarse, CConfig *config, unsigned short iMesh, - su2double val_factor = -1.0); + CGeometry *geo_coarse, CConfig *config, unsigned short iMesh); /*! * \brief Add the truncation error to the residual. @@ -170,7 +168,6 @@ class CMultiGridIntegration final : public CIntegration { * \param[in] iMesh - Index of the mesh in multigrid computations. * \param[in] iZone - Index of the zone. * \param[in] iRKLimit - Number of Runge-Kutta steps. - * \param[out] lastPreSmoothIters - Number of pre-smoothing iterations performed. */ void PreSmoothing(unsigned short RunTime_EqSystem, CGeometry**** geometry, @@ -183,8 +180,7 @@ class CMultiGridIntegration final : public CIntegration { CConfig *config, unsigned short iMesh, unsigned short iZone, - unsigned short iRKLimit, - unsigned short *lastPreSmoothIters); + unsigned short iRKLimit); /*! * \brief Compute the fine grid correction from the coarse solution. @@ -207,7 +203,7 @@ class CMultiGridIntegration final : public CIntegration { * \param[in] config - Definition of the particular problem. */ void SmoothProlongated_Correction(unsigned short RunTime_EqSystem, CSolver *solver, CGeometry *geometry, - unsigned short val_nSmooth, su2double val_smooth_coeff, CConfig *config, unsigned short iMesh); + unsigned short val_nSmooth, su2double val_smooth_coeff, CConfig *config); /*! * \brief Restrict solution from fine grid to a coarse grid. From a282e2247469cf5bed4ae3bc502a0fd0b4704739 Mon Sep 17 00:00:00 2001 From: riddhi1228 <24ume036@lnmiit.ac.in> Date: Tue, 17 Mar 2026 19:06:22 +0000 Subject: [PATCH 142/229] fix: add CUSTOM_OBJFUNC to historyMap.py and CFlowOutput.cpp - Add if (false) AddHistoryOutput for CUSTOM_OBJFUNC in CFlowOutput.cpp so the generator can pick it up in future - Manually add CUSTOM_OBJFUNC entry to historyMap.py Fixes #2586 --- SU2_CFD/src/output/CFlowOutput.cpp | 3 +++ SU2_PY/SU2/io/historyMap.py | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index d9216b7bdc2f..446db73dc13f 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -1789,6 +1789,9 @@ void CFlowOutput::AddAerodynamicCoefficients(const CConfig* config) { AddHistoryOutput("AOA", "AoA", ScreenOutputFormat::FIXED, "AOA", "Angle of attack"); AddHistoryOutput("COMBO", "ComboObj", ScreenOutputFormat::SCIENTIFIC, "COMBO", "Combined obj. function value.", HistoryFieldType::COEFFICIENT); + // CUSTOM_OBJFUNC is added here so historyMap.py knows how to get its + // value, the actual output is COMBO. + if (false) AddHistoryOutput("CUSTOM_OBJFUNC", "ComboObj", ScreenOutputFormat::SCIENTIFIC, "COMBO", "Custom obj. function value.", HistoryFieldType::COEFFICIENT); } void CFlowOutput::SetAerodynamicCoefficients(const CConfig* config, const CSolver* flow_solver){ diff --git a/SU2_PY/SU2/io/historyMap.py b/SU2_PY/SU2/io/historyMap.py index 93a49a2ce0f5..76fdefbe5e63 100644 --- a/SU2_PY/SU2/io/historyMap.py +++ b/SU2_PY/SU2/io/historyMap.py @@ -310,6 +310,12 @@ "HEADER": "ComboObj", "TYPE": "COEFFICIENT", }, + "CUSTOM_OBJFUNC": { + "DESCRIPTION": "Custom obj. function value.", + "GROUP": "COMBO", + "HEADER": "ComboObj", + "TYPE": "COEFFICIENT", + }, "DEFORM_ITER": { "DESCRIPTION": "Linear solver iterations for the mesh " "deformation", "GROUP": "DEFORM", From 13cddd2ee396b21272f5581aea5605935d0cb541 Mon Sep 17 00:00:00 2001 From: riddhi1228 <24ume036@lnmiit.ac.in> Date: Wed, 18 Mar 2026 05:48:29 +0000 Subject: [PATCH 143/229] fix: use unique header for CUSTOM_OBJFUNC to avoid collision with COMBO Both COMBO and CUSTOM_OBJFUNC had HEADER='ComboObj', causing the history parser to overwrite COMBO with CUSTOM_OBJFUNC in state[FUNCTIONS], resulting in KeyError: 'COMBO' in multi-objective optimization tests. --- SU2_PY/SU2/io/historyMap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SU2_PY/SU2/io/historyMap.py b/SU2_PY/SU2/io/historyMap.py index 76fdefbe5e63..57392eb82073 100644 --- a/SU2_PY/SU2/io/historyMap.py +++ b/SU2_PY/SU2/io/historyMap.py @@ -313,7 +313,7 @@ "CUSTOM_OBJFUNC": { "DESCRIPTION": "Custom obj. function value.", "GROUP": "COMBO", - "HEADER": "ComboObj", + "HEADER": "CustomObj", "TYPE": "COEFFICIENT", }, "DEFORM_ITER": { From 9dc1ad22ed8e35231101d2885b9a436c9469c4d4 Mon Sep 17 00:00:00 2001 From: riddhi1228 <24ume036@lnmiit.ac.in> Date: Thu, 19 Mar 2026 13:56:12 +0000 Subject: [PATCH 144/229] fix(SU2_PY): replace Python 2 string.join() with str.join() in polarSweepLib.py string.join() was removed in Python 3. Replace with the equivalent ''.join() syntax. Also removes the now-unused 'import string' statement. Fixes AttributeError: module 'string' has no attribute 'join' when running polar sweep analysis on Python 3. --- SU2_PY/SU2/util/polarSweepLib.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SU2_PY/SU2/util/polarSweepLib.py b/SU2_PY/SU2/util/polarSweepLib.py index 72137e58185f..73d2c3a241e8 100755 --- a/SU2_PY/SU2/util/polarSweepLib.py +++ b/SU2_PY/SU2/util/polarSweepLib.py @@ -147,7 +147,6 @@ def readParameter(dataFile, nLines, keyWord, iDoNot, verbose): def setContribution(dataFile, nLines, keyWord, iDoNot, verbose): from numpy import size - import string # # default values @@ -176,7 +175,7 @@ def setContribution(dataFile, nLines, keyWord, iDoNot, verbose): # now find out where the standard text ends iBF = firstPart.lower().index("family") + 6 - nameText = string.join(firstPart[iBF:].split(), "") + nameText = "".join(firstPart[iBF:].split()) # component name located. Now check about its contribution try: From bf7167bdaddda5de0e948c76de3d3ba71e302ea8 Mon Sep 17 00:00:00 2001 From: Nijso Date: Fri, 20 Mar 2026 15:30:24 +0100 Subject: [PATCH 145/229] Update Common/include/CConfig.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> --- Common/include/CConfig.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 0e2d424d984e..22796c0de226 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -3076,7 +3076,7 @@ class CConfig { iRKLimit = 1; break; } - return iRKLimit; + return iRKLimit; } /*! From 170590ce9694a58a33c95c8c15090e353f808d8d Mon Sep 17 00:00:00 2001 From: bigfooted Date: Fri, 20 Mar 2026 16:43:18 +0100 Subject: [PATCH 146/229] review suggestions - easy stuff --- .../include/geometry/CMultiGridGeometry.hpp | 1 - .../integration/CMultiGridIntegration.hpp | 27 ++----- .../src/integration/CMultiGridIntegration.cpp | 73 +++++++++++-------- 3 files changed, 51 insertions(+), 50 deletions(-) diff --git a/Common/include/geometry/CMultiGridGeometry.hpp b/Common/include/geometry/CMultiGridGeometry.hpp index 942895279b9d..f6036be227f8 100644 --- a/Common/include/geometry/CMultiGridGeometry.hpp +++ b/Common/include/geometry/CMultiGridGeometry.hpp @@ -28,7 +28,6 @@ #pragma once #include "CGeometry.hpp" -class CMultiGridQueue; /*! * \class CMultiGridGeometry diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index eff1c2cb499b..eb4ba00afd84 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -145,14 +145,9 @@ class CMultiGridIntegration final : public CIntegration { * \param[in] iMesh - Index of the mesh in multigrid computations. * \param[in] iRKLimit - Number of Runge-Kutta steps. */ - void PostSmoothing(unsigned short RunTime_EqSystem, - CSolver* solver_fine, - CNumerics** numerics_fine, - CGeometry* geometry_fine, - CSolver** solver_container_fine, - CConfig *config, - unsigned short iMesh, - unsigned short iRKLimit); + void PostSmoothing(unsigned short RunTime_EqSystem, CSolver* solver_fine, CNumerics** numerics_fine, + CGeometry* geometry_fine, CSolver** solver_container_fine, CConfig *config, + unsigned short iMesh, unsigned short iRKLimit); /*! * \brief Apply pre-smoothing iterations on the fine grid before restriction. @@ -169,18 +164,10 @@ class CMultiGridIntegration final : public CIntegration { * \param[in] iZone - Index of the zone. * \param[in] iRKLimit - Number of Runge-Kutta steps. */ - void PreSmoothing(unsigned short RunTime_EqSystem, - CGeometry**** geometry, - CSolver***** solver_container, - CConfig **config_container, - CSolver* solver_fine, - CNumerics** numerics_fine, - CGeometry* geometry_fine, - CSolver** solver_container_fine, - CConfig *config, - unsigned short iMesh, - unsigned short iZone, - unsigned short iRKLimit); + void PreSmoothing(unsigned short RunTime_EqSystem, CGeometry**** geometry, CSolver***** solver_container, + CConfig **config_container, CSolver* solver_fine, CNumerics** numerics_fine, + CGeometry* geometry_fine, CSolver** solver_container_fine, CConfig *config, + unsigned short iMesh, unsigned short iZone, unsigned short iRKLimit); /*! * \brief Compute the fine grid correction from the coarse solution. diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 6164dc2aedb8..c9b4dbe29798 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -283,6 +283,8 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, const unsigned short Solver_Position = config[iZone]->GetContainerPosition(RunTime_EqSystem); + /*--- Start an OpenMP parallel region covering the entire MG iteration, if the solver supports it. ---*/ + SU2_OMP_PARALLEL_(if(solver_container[iZone][iInst][MESH_0][Solver_Position]->GetHasHybridParallel())) { @@ -473,17 +475,18 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, } void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, -CGeometry**** geometry, -CSolver***** solver_container, -CConfig **config_container, -CSolver* solver_fine, -CNumerics** numerics_fine, -CGeometry* geometry_fine, -CSolver** solver_container_fine, -CConfig *config, -unsigned short iMesh, -unsigned short iZone, -unsigned short iRKLimit) { + CGeometry**** geometry, + CSolver***** solver_container, + CConfig **config_container, + CSolver* solver_fine, + CNumerics** numerics_fine, + CGeometry* geometry_fine, + CSolver** solver_container_fine, + CConfig *config, + unsigned short iMesh, + unsigned short iZone, + unsigned short iRKLimit) { + const bool classical_rk4 = (config->GetKind_TimeIntScheme() == CLASSICAL_RK4_EXPLICIT); const unsigned short nPreSmooth = config->GetMG_PreSmooth(iMesh); const unsigned long timeIter = config->GetTimeIter(); @@ -521,32 +524,44 @@ unsigned short iRKLimit) { } -void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, CSolver* solver_fine,CNumerics** numerics_fine, CGeometry* geometry_fine, CSolver** solver_container_fine, CConfig *config, unsigned short iMesh,unsigned short iRKLimit) -{ +void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, + CSolver* solver_fine, + CNumerics** numerics_fine, + CGeometry* geometry_fine, + CSolver** solver_container_fine, + CConfig *config, + unsigned short iMesh, + unsigned short iRKLimit) { + const bool classical_rk4 = (config->GetKind_TimeIntScheme() == CLASSICAL_RK4_EXPLICIT); const unsigned short nPostSmooth = config->GetMG_PostSmooth(iMesh); const unsigned long timeIter = config->GetTimeIter(); /*--- Do a postsmoothing on the grid iMesh after prolongation from the grid iMesh+1 ---*/ for (unsigned short iPostSmooth = 0; iPostSmooth < nPostSmooth; iPostSmooth++) { - /*--- Synchronize before each post-smoothing iteration ---*/ - SU2_OMP_BARRIER - for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { - solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); - if (iRKStep == 0) { - /*--- Set the old solution ---*/ - solver_fine->Set_OldSolution(); - if (classical_rk4) solver_fine->Set_NewSolution(); - solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, timeIter); - } - /*--- Space integration ---*/ - Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); - /*--- 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); + + /*--- Synchronize before each post-smoothing iteration ---*/ + SU2_OMP_BARRIER + for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { + solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); + if (iRKStep == 0) { + /*--- Set the old solution ---*/ + solver_fine->Set_OldSolution(); + if (classical_rk4) solver_fine->Set_NewSolution(); + solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, timeIter); } + /*--- Space integration ---*/ + Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); + + /*--- 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); + + } + /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); From 2e5fe28dd1f01cc94a20138251f4e4c9a80a57e7 Mon Sep 17 00:00:00 2001 From: Nijso Date: Fri, 20 Mar 2026 16:44:42 +0100 Subject: [PATCH 147/229] Update SU2_CFD/src/integration/CMultiGridIntegration.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index c9b4dbe29798..184de6f5e40a 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -231,13 +231,6 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve /*--- Update coarse grid CFL ---*/ CFL_coarse_new = max(0.5 * CFL_fine, min(CFL_fine, CFL_fine * new_coeff)); -#ifdef HAVE_MPI - /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ - /*--- Use su2double buffer for MeDiPack compatibility. ---*/ - su2double CFL_bcast = CFL_coarse_new; - SU2_MPI::Bcast(&CFL_bcast, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); - CFL_coarse_new = SU2_TYPE::GetValue(CFL_bcast); -#endif /*--- Update the shared config object (wrapped to prevent tape recording) ---*/ const bool wasActive = AD::BeginPassive(); From 35a8445a6d3ff32cf9e73d8f6626a70484e883b3 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Fri, 20 Mar 2026 17:30:54 +0100 Subject: [PATCH 148/229] review suggestions - move functions --- .../include/solvers/CFVMFlowSolverBase.hpp | 2 + .../include/solvers/CFVMFlowSolverBase.inl | 45 ++++++++ SU2_CFD/include/solvers/CSolver.hpp | 10 ++ .../src/integration/CMultiGridIntegration.cpp | 105 ++++-------------- 4 files changed, 76 insertions(+), 86 deletions(-) diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp index 55f9ff3c32a0..034acc522339 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp @@ -1140,6 +1140,8 @@ class CFVMFlowSolverBase : public CSolver { BC_Sym_Plane(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker); } + void MultigridProjectEulerWall(CGeometry* geometry, const CConfig* config, bool use_solution_old) override; + /*! * \author T. Kattmann * \brief Impose the symmetry boundary condition using the residual. diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index e60b1702e4b2..b4ef6e692a36 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -3004,3 +3004,48 @@ void CFVMFlowSolverBase::ComputeAxisymmetricAuxGradients(CGeometr SetAuxVar_Gradient_LS(geometry, config); } } + +template +void CFVMFlowSolverBase::MultigridProjectEulerWall(CGeometry* geometry, const CConfig* config, + bool use_solution_old) { + const auto iVel = prim_idx.Velocity(); + const bool grid_movement = config->GetGrid_Movement(); + + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) != EULER_WALL) continue; + + SU2_OMP_FOR_STAT(32) + for (auto iVertex = 0ul; iVertex < geometry->nVertex[iMarker]; iVertex++) { + const auto iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); + + if (!geometry->nodes->GetDomain(iPoint)) continue; + + su2double Normal[MAXNDIM] = {0.0}; + geometry->vertex[iMarker][iVertex]->GetNormal(Normal); + const auto nDim = geometry->GetnDim(); + const su2double Area = GeometryToolbox::Norm(nDim, Normal); + + if (Area < EPS) continue; + + su2double UnitNormal[MAXNDIM] = {0.0}; + for (auto iDim = 0u; iDim < nDim; iDim++) UnitNormal[iDim] = Normal[iDim] / Area; + + su2double* sol = use_solution_old ? nodes->GetSolution_Old(iPoint) : nodes->GetSolution(iPoint); + + /*--- Compute normal component of momentum. + * For grid movement, subtract rho*v_grid to enforce (v - v_grid).n = 0. ---*/ + su2double momentum_n = 0.0; + for (auto iDim = 0u; iDim < nDim; iDim++) momentum_n += sol[iVel + iDim] * UnitNormal[iDim]; + + if (grid_movement && !use_solution_old) { + const su2double* GridVel = geometry->nodes->GetGridVel(iPoint); + const su2double rho = sol[0]; + for (auto iDim = 0u; iDim < nDim; iDim++) momentum_n -= rho * GridVel[iDim] * UnitNormal[iDim]; + } + + /*--- Project to tangent plane. ---*/ + for (auto iDim = 0u; iDim < nDim; iDim++) sol[iVel + iDim] -= momentum_n * UnitNormal[iDim]; + } + END_SU2_OMP_FOR + } +} diff --git a/SU2_CFD/include/solvers/CSolver.hpp b/SU2_CFD/include/solvers/CSolver.hpp index 67a8bb8112c3..eba2e5cc07d7 100644 --- a/SU2_CFD/include/solvers/CSolver.hpp +++ b/SU2_CFD/include/solvers/CSolver.hpp @@ -804,6 +804,16 @@ class CSolver { CConfig *config, unsigned short val_marker) { } + /*! + * \brief Enforce Euler wall BC on a restricted or prolongated multigrid solution by + * projecting the momentum to the tangent plane of the wall. + * \param[in] geometry - Coarse grid geometry. + * \param[in] config - Definition of the particular problem. + * \param[in] use_solution_old - If true, project Solution_Old (corrections); if false, project Solution. + */ + inline virtual void MultigridProjectEulerWall(CGeometry* /*geometry*/, const CConfig* /*config*/, + bool /*use_solution_old*/) {} + /*! * \brief A virtual member. * \param[in] geometry - Geometrical definition of the problem. diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index c9b4dbe29798..5a649dc6ecd2 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -28,77 +28,12 @@ #include "../../include/integration/CMultiGridIntegration.hpp" #include "../../../Common/include/parallelization/omp_structure.hpp" -namespace { -/*! - * \brief Helper function to enforce Euler wall BC by projecting momentum to tangent plane. - * \param[in] geo_coarse - Coarse grid geometry. - * \param[in] config - Problem configuration. - * \param[in,out] sol_coarse - Coarse grid solver (to access and modify solution/correction). - * \param[in] use_solution_old - If true, project Solution_Old (corrections); if false, project Solution. - */ -void ProjectEulerWallToTangentPlane(CGeometry* geo_coarse, const CConfig* config, CSolver* sol_coarse, - bool use_solution_old) { - const bool grid_movement = config->GetGrid_Movement(); - - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) != EULER_WALL) continue; - - SU2_OMP_FOR_STAT(32) - for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { - const auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - - if (!geo_coarse->nodes->GetDomain(Point_Coarse)) continue; - - /*--- Get coarse grid normal ---*/ - su2double Normal[3] = {0.0}; - geo_coarse->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geo_coarse->GetnDim(); - su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < EPS) continue; - - /*--- Normalize normal vector ---*/ - su2double UnitNormal[3] = {0.0}; - for (auto iDim = 0u; iDim < nDim; iDim++) { - UnitNormal[iDim] = Normal[iDim] / Area; - } - - /*--- Get current solution or correction ---*/ - su2double* solution_coarse = use_solution_old ? - sol_coarse->GetNodes()->GetSolution_Old(Point_Coarse) : - sol_coarse->GetNodes()->GetSolution(Point_Coarse); - - /*--- Compute normal component of momentum. - * For grid movement (e.g. rotating frame) and when projecting the solution - * (not corrections), compute the normal component of the RELATIVE momentum - * (rho*v - rho*v_grid).n to enforce (v - v_grid).n = 0. - * This matches the fine-grid Euler/symmetry BC (BC_Sym_Plane). ---*/ - su2double momentum_n = 0.0; - for (auto iDim = 0u; iDim < nDim; iDim++) { - momentum_n += solution_coarse[iDim + 1] * UnitNormal[iDim]; - } - if (grid_movement && !use_solution_old) { - const su2double* GridVel = geo_coarse->nodes->GetGridVel(Point_Coarse); - su2double rho = solution_coarse[0]; - for (auto iDim = 0u; iDim < nDim; iDim++) { - momentum_n -= rho * GridVel[iDim] * UnitNormal[iDim]; - } - } - - /*--- Project to tangent plane: solution_coarse -= (momentum_n) * n ---*/ - for (auto iDim = 0u; iDim < nDim; iDim++) { - solution_coarse[iDim + 1] -= momentum_n * UnitNormal[iDim]; - } - } - END_SU2_OMP_FOR - } -} -} // anonymous namespace - passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, unsigned short iMesh, passivedouble CFL_fine, passivedouble CFL_coarse_current) { /*--- Must be called from a single-thread context (e.g. inside BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS). ---*/ + const bool wasActive = AD::BeginPassive(); + passivedouble current_coeff = CFL_coarse_current / CFL_fine; /*--- Adaptive CFL using Exponential Moving Average (EMA) ---*/ @@ -239,12 +174,10 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve CFL_coarse_new = SU2_TYPE::GetValue(CFL_bcast); #endif - /*--- Update the shared config object (wrapped to prevent tape recording) ---*/ - const bool wasActive = AD::BeginPassive(); config->SetCFL(iMesh+1, CFL_coarse_new); - AD::EndPassive(wasActive); } + AD::EndPassive(wasActive); return CFL_coarse_new; } @@ -543,24 +476,24 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, /*--- Synchronize before each post-smoothing iteration ---*/ SU2_OMP_BARRIER for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { - solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); - if (iRKStep == 0) { - /*--- Set the old solution ---*/ - solver_fine->Set_OldSolution(); - if (classical_rk4) solver_fine->Set_NewSolution(); - solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, timeIter); - } + solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); + if (iRKStep == 0) { + /*--- Set the old solution ---*/ + solver_fine->Set_OldSolution(); + if (classical_rk4) solver_fine->Set_NewSolution(); + solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, timeIter); + } - /*--- Space integration ---*/ - Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); + /*--- Space integration ---*/ + Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); - /*--- Time integration, update solution using the old solution plus the solution increment ---*/ - Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); + /*--- 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); + /*--- Send-Receive boundary conditions, and postprocessing ---*/ + solver_fine->Postprocessing(geometry_fine, solver_container_fine, config, iMesh); - } + } /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); @@ -609,7 +542,7 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; /*--- Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ - ProjectEulerWallToTangentPlane(geo_coarse, config, sol_coarse, true); + sol_coarse->MultigridProjectEulerWall(geo_coarse, config, true); /*--- Remove any contributions from no-slip walls. ---*/ @@ -869,7 +802,7 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } /*--- Enforce Euler wall BC by projecting velocity to tangent plane ---*/ - ProjectEulerWallToTangentPlane(geo_coarse, config, sol_coarse, false); + sol_coarse->MultigridProjectEulerWall(geo_coarse, config, false); /*--- MPI the new interpolated solution ---*/ From 8376cfd4c0328b4ce7d22c68df6eac3531a9cd1e Mon Sep 17 00:00:00 2001 From: bigfooted Date: Fri, 20 Mar 2026 20:30:44 +0100 Subject: [PATCH 149/229] remove redundant comms --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 98ec2f3af334..56a77f767005 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -442,10 +442,6 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, solver_fine->Postprocessing(geometry_fine, solver_container_fine, config, iMesh); } - /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ - solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - } } @@ -488,9 +484,6 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, } - /*--- MPI sync after RK stage to ensure halos have updated solution for next smoothing iteration ---*/ - solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); } } From eabcdf3d1694ea44dcd6a823fc69f5761a032149 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Fri, 20 Mar 2026 22:15:46 +0100 Subject: [PATCH 150/229] add redundant comms again --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 15 ++++++++++++--- TestCases/serial_regression.py | 6 +++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 56a77f767005..7d024845fdb2 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -355,9 +355,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, if (iMesh == config->GetnMGLevels()-2) nextRecurseParam = 0; - /*--- Synchronize prior to recursive calls ---*/ - SU2_OMP_BARRIER - MultiGrid_Cycle(geometry, solver_container, numerics_container, config_container, iMesh+1, nextRecurseParam, RunTime_EqSystem, iZone, iInst); @@ -442,6 +439,12 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, solver_fine->Postprocessing(geometry_fine, solver_container_fine, config, iMesh); } + /*--- TODO/FIXME: This SOLUTION comms is likely redundant because Time_Integration + * (Explicit_Iteration_impl / CompleteImplicitIteration_impl) already syncs SOLUTION halos. + * Kept for testing; remove once verified. ---*/ + solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + } } @@ -484,6 +487,12 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, } + /*--- TODO/FIXME: This SOLUTION comms is likely redundant because Time_Integration + * (Explicit_Iteration_impl / CompleteImplicitIteration_impl) already syncs SOLUTION halos. + * Kept for testing; remove once verified. ---*/ + solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + } } diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 462315568ead..156fabe51768 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -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.584244, -15.043117, -0.726250, 0.020280] + contadj_naca0012.test_vals = [-9.578867, -15.048458, -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 = [-11.970149, -12.503534, -1.086100, 0.007556] + contadj_oneram6.test_vals = [-11.969828, -12.503366, -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 = [0.888169, -4.738760, -0.372890, -0.000614] + contadj_fixedCL_naca0012.test_vals = [0.887003, -4.740585, -0.358290, -0.000626] test_list.append(contadj_fixedCL_naca0012) ################################### From a0a4cbedf470bb7008be5127137a192046b2d44c Mon Sep 17 00:00:00 2001 From: bigfooted Date: Fri, 20 Mar 2026 23:14:32 +0100 Subject: [PATCH 151/229] remove barrier from pre and post --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 4 ++-- TestCases/parallel_regression.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 7d024845fdb2..0233b48b673e 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -418,7 +418,7 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, for (unsigned short iPreSmooth = 0; iPreSmooth < nPreSmooth; iPreSmooth++) { /*--- Synchronize before each smoothing iteration ---*/ - SU2_OMP_BARRIER + //SU2_OMP_BARRIER /*--- Time and space integration ---*/ for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { @@ -466,7 +466,7 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, for (unsigned short iPostSmooth = 0; iPostSmooth < nPostSmooth; iPostSmooth++) { /*--- Synchronize before each post-smoothing iteration ---*/ - SU2_OMP_BARRIER + //SU2_OMP_BARRIER for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); if (iRKStep == 0) { diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 4b74eb28ef7d..b38d1cfe9e12 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -838,7 +838,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.587467, -15.030897, -0.726250, 0.020280] + contadj_naca0012.test_vals = [9.583470, -15.035052, -0.726250, 0.020280] contadj_naca0012.test_vals_aarch64 = [-9.662546, -14.998818, -0.726250, 0.020280] test_list.append(contadj_naca0012) @@ -847,7 +847,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 = [-11.981564, -12.514942, -1.086100, 0.007556] + contadj_oneram6.test_vals = [-11.981260, -12.515067, -1.086100, 0.007556] test_list.append(contadj_oneram6) # Inviscid WEDGE: tests averaged outflow total pressure adjoint @@ -863,7 +863,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 = [0.838162, -4.799384, -0.379430, -0.000628] + contadj_fixed_CL_naca0012.test_vals = [0.838756, -4.799730, -0.372690, -0.000630] test_list.append(contadj_fixed_CL_naca0012) ################################### From 7c0b269a67f41fc10948de13ba195b54f466ac29 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 21 Mar 2026 07:06:00 +0100 Subject: [PATCH 152/229] remove barrier after multigrid_cycle --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 0233b48b673e..acdea9630653 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -30,8 +30,8 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, unsigned short iMesh, passivedouble CFL_fine, passivedouble CFL_coarse_current) { - /*--- Must be called from a single-thread context (e.g. inside BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS). ---*/ + /*--- Must be called from a single-thread context (e.g. inside BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS). ---*/ const bool wasActive = AD::BeginPassive(); passivedouble current_coeff = CFL_coarse_current / CFL_fine; @@ -68,19 +68,15 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve unsigned long iter = current_iter; /*--- Get sum of all RMS residuals for all variables (local to this rank) ---*/ - /*--- Use su2double for MPI buffers (MeDiPack requires sizeof(su2double) per element ---*/ - /*--- when MPI_DOUBLE is used, since convertDatatype maps it to AMPI_ADOUBLE). ---*/ su2double rms_res_coarse_local = 0.0; for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { rms_res_coarse_local += SU2_TYPE::GetValue(solver_coarse->GetRes_RMS(iVar)); } /*--- MPI synchronization: ensure all ranks use the same global residual value ---*/ - /*--- This is critical for consistent CFL adaptation across all ranks ---*/ passivedouble rms_res_coarse = SU2_TYPE::GetValue(rms_res_coarse_local); /*--- For coarse grids, residuals are not globally reduced by default ---*/ - /*--- We need to synchronize them for consistent adaptive CFL decisions ---*/ if (geometry_coarse->GetMGLevel() > 0) { su2double rms_global_sum = 0.0; SU2_MPI::Allreduce(&rms_res_coarse_local, &rms_global_sum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); @@ -359,7 +355,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, iMesh+1, nextRecurseParam, RunTime_EqSystem, iZone, iInst); /*--- Synchronize after each multigrid cycle ---*/ - SU2_OMP_BARRIER + //SU2_OMP_BARRIER } /*--- Compute prolongated solution, and smooth the correction $u^(new)_k = u_k + Smooth(I^k_(k+1)(u_(k+1)-I^(k+1)_k u_k))$ ---*/ From bee7601405fbd5a040dfe6c7e62d306d7a6e6e9a Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 21 Mar 2026 14:05:34 -0700 Subject: [PATCH 153/229] mpi fix and doc --- .../include/linear_algebra/CPastixWrapper.hpp | 17 ++++++++++------- Common/src/linear_algebra/CPastixWrapper.cpp | 12 +----------- TestCases/pastix_support/config.cfg | 2 +- TestCases/pastix_support/readme.txt | 19 +++++++++++++++---- 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/Common/include/linear_algebra/CPastixWrapper.hpp b/Common/include/linear_algebra/CPastixWrapper.hpp index 61f0cb7edfc9..38d3e394f9cf 100644 --- a/Common/include/linear_algebra/CPastixWrapper.hpp +++ b/Common/include/linear_algebra/CPastixWrapper.hpp @@ -79,6 +79,7 @@ class CPastixWrapper { bool issetup{}; /*!< \brief Signals that the matrix data has been provided. */ bool isinitialized{}; /*!< \brief Signals that the sparsity pattern has been set. */ bool isfactorized{}; /*!< \brief Signals that a factorization has been computed. */ + bool transpose{}; /*!< \brief Solve A^T x = b instead of A x = b. */ unsigned long iter{}; /*!< \brief Number of times a factorization has been requested. */ unsigned short verb{}; /*!< \brief Verbosity level. */ const int mpi_size = SU2_MPI::GetSize(); @@ -156,12 +157,7 @@ class CPastixWrapper { * \brief Request solves with the transposed matrix. * \param[in] transposed - Yes or no. */ - void SetTransposedSolve(bool transposed = true) { - if (iparm[IPARM_MTX_TYPE] == PastixGeneral) { - /*--- Inverted logic due to CSR to CSC copy. ---*/ - iparm[IPARM_TRANSPOSE_SOLVE] = transposed ? PastixNoTrans : PastixTrans; - } - } + void SetTransposedSolve(bool transposed = true) { transpose = transposed; } /*! * \brief Runs the "solve" task for any rhs/sol with operator [] @@ -172,8 +168,15 @@ class CPastixWrapper { void Solve(const T& rhs, T& sol) { if (!isfactorized) SU2_MPI::Error("The factorization has not been computed yet.", CURRENT_FUNCTION); - for (auto i = 0ul; i < matrix.size_rhs(); ++i) workvec[i] = rhs[i]; + /*--- Inverted logic due to CSR to CSC direct copy (PaStiX's A is our A^T). ---*/ + if (iparm[IPARM_FACTORIZATION] == PastixFactLDLT || transpose) { + iparm[IPARM_TRANSPOSE_SOLVE] = PastixNoTrans; + } else { + iparm[IPARM_TRANSPOSE_SOLVE] = PastixTrans; + } iparm[IPARM_VERBOSE] = PastixVerboseNot; + + for (auto i = 0ul; i < matrix.size_rhs(); ++i) workvec[i] = rhs[i]; if (pastix_task_solve(state, matrix.size_rhs(), 1, workvec.data(), matrix.size_rhs()) != PASTIX_SUCCESS) { SU2_MPI::Error("Error solving linear system.", CURRENT_FUNCTION); } diff --git a/Common/src/linear_algebra/CPastixWrapper.cpp b/Common/src/linear_algebra/CPastixWrapper.cpp index c8e33ba57038..c603a492805f 100644 --- a/Common/src/linear_algebra/CPastixWrapper.cpp +++ b/Common/src/linear_algebra/CPastixWrapper.cpp @@ -58,7 +58,6 @@ void CPastixWrapper::Initialize(CGeometry* geometry, const CConfig* /*--- Set default parameter values ---*/ const auto incomplete = iparm[IPARM_INCOMPLETE]; - const auto mtx_type = iparm[IPARM_MTX_TYPE]; pastixInitParam(iparm, dparm); /*--- Customize important parameters ---*/ @@ -78,7 +77,6 @@ void CPastixWrapper::Initialize(CGeometry* geometry, const CConfig* iparm[IPARM_INCOMPLETE] = incomplete; iparm[IPARM_LEVEL_OF_FILL] = static_cast(config->GetPastixFillLvl()); iparm[IPARM_THREAD_NBR] = omp_get_max_threads(); - iparm[IPARM_MTX_TYPE] = mtx_type; pastixInit(&state, SU2_MPI::GetComm(), iparm, dparm); @@ -182,7 +180,7 @@ void CPastixWrapper::Initialize(CGeometry* geometry, const CConfig* /*--- 4 - Perform ordering, symbolic factorization, and analysis steps ---*/ spmInitDist(&spm, SU2_MPI::GetComm()); - spm.mtxtype = static_cast(mtx_type); + spm.mtxtype = SpmGeneral; // Despite being symmetric, we store the entire matrix. spm.flttype = SpmDouble; spm.fmttype = SpmCSC; spm.layout = SpmColMajor; @@ -222,8 +220,6 @@ void CPastixWrapper::Factorize(CGeometry* geometry, const CConfig* c } } verb = config->GetPastixVerbLvl(); - const bool sym = kind_fact == PASTIX_LDLT || kind_fact == PASTIX_LDLT_P; - iparm[IPARM_MTX_TYPE] = sym ? PastixSymmetric : PastixGeneral; iparm[IPARM_INCOMPLETE] = (kind_fact == PASTIX_ILU); Initialize(geometry, config); @@ -242,12 +238,6 @@ void CPastixWrapper::Factorize(CGeometry* geometry, const CConfig* c break; } - if (kind_fact == PASTIX_LDLT || kind_fact == PASTIX_LDLT_P) { - iparm[IPARM_TRANSPOSE_SOLVE] = PastixNoTrans; // symmetric so no need for slower transp. solve - } else { - iparm[IPARM_TRANSPOSE_SOLVE] = PastixTrans; // inverted logic due to CSR to CSC copy - } - /*--- Is factorizing needed on this iteration? ---*/ bool factorize = false; diff --git a/TestCases/pastix_support/config.cfg b/TestCases/pastix_support/config.cfg index 83b9c95b8a95..b13c1f09e641 100644 --- a/TestCases/pastix_support/config.cfg +++ b/TestCases/pastix_support/config.cfg @@ -1,6 +1,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SU2 configuration file % -% PaStiX options (http://pastix.gforge.inria.fr/files/README-txt.html) % +% PaStiX options (https://solverstack.gitlabpages.inria.fr/pastix/) % % Institution: Imperial College London % % File Version 8.4.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/pastix_support/readme.txt b/TestCases/pastix_support/readme.txt index 3e22cdc65c47..43c195c463c5 100644 --- a/TestCases/pastix_support/readme.txt +++ b/TestCases/pastix_support/readme.txt @@ -6,7 +6,8 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 1 - Build and install dependencies -% - A BLAS library with LAPACKE support (e.g. OpenBLAS). +% - A BLAS library with LAPACK and LAPACKE support (e.g. OpenBLAS), +% sequential versions are required (threading is managed by the solver). % - Scotch and PT-Scotch. % - HWLOC (recommended for PaStiX). % If you use your OS package manager for these, the PaStiX and SU2 build @@ -28,9 +29,19 @@ % (-Denable-openblas=true) support in your call to meson.py. % The reliable way for meson to find PaStiX is use PKG_CONFIG_PATH to % make the pastix.pc.in file discoverable. For the other dependencies, -% see #1. +% see #1. You should build with OpenMP to get the best performance, +% using only MPI with PaStiX is not efficient. +% +% 5 - Running SU2 +% When running with MPI + OpenMP you need to pay attention to core and +% thread binding to get the best performance. For example, to use 2 ranks +% with 8 threads each (effectively) you may need something like: +% mpirun -n 2 --map-by NUMA:PE=8 SU2_CFD -t 8 --thread_multiple config.cfg +% otherwise the MPI implementation may not let each rank use the requested +% threads, or PaStiX/HWLOC may bind the threads of different ranks to the +% same core. Different MPI versions may have other arguments. % % 6 - Tested platforms -% - Ubuntu 24.04, gcc 13, ompi 5.0.6, default OpenBLAS, Scotch, PT-Scotch, -% and HWLOC. +% - Ubuntu 24.04 (gcc 13), ompi 5.0.6, default OpenBLAS, Scotch, PT-Scotch, +% and HWLOC (i.e. from apt install ...). % From 198f213013223afeea1307c0fab4b2d23c000705 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 21 Mar 2026 22:57:21 +0100 Subject: [PATCH 154/229] add barrier --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index acdea9630653..1fe268d00c49 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -162,6 +162,14 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve /*--- Update coarse grid CFL ---*/ CFL_coarse_new = max(0.5 * CFL_fine, min(CFL_fine, CFL_fine * new_coeff)); + // nijso: TODO FIXME + #ifdef HAVE_MPI + /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ + /*--- Use su2double buffer for MeDiPack compatibility. ---*/ + su2double CFL_bcast = CFL_coarse_new; + SU2_MPI::Bcast(&CFL_bcast, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); + CFL_coarse_new = SU2_TYPE::GetValue(CFL_bcast); + #endif config->SetCFL(iMesh+1, CFL_coarse_new); } @@ -414,7 +422,8 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, for (unsigned short iPreSmooth = 0; iPreSmooth < nPreSmooth; iPreSmooth++) { /*--- Synchronize before each smoothing iteration ---*/ - //SU2_OMP_BARRIER + // nijso TODO FIXME + SU2_OMP_BARRIER /*--- Time and space integration ---*/ for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { @@ -462,7 +471,8 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, for (unsigned short iPostSmooth = 0; iPostSmooth < nPostSmooth; iPostSmooth++) { /*--- Synchronize before each post-smoothing iteration ---*/ - //SU2_OMP_BARRIER + // nijso TODO FIXME + SU2_OMP_BARRIER for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); if (iRKStep == 0) { From d1f5809f61cbf936c00b4e99ec76863a824f9b06 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 22 Mar 2026 11:18:53 +0100 Subject: [PATCH 155/229] fix the hybrid python test by adding mpi bcast again --- .../src/integration/CMultiGridIntegration.cpp | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 1fe268d00c49..e37b8d4ced80 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -163,13 +163,13 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve CFL_coarse_new = max(0.5 * CFL_fine, min(CFL_fine, CFL_fine * new_coeff)); // nijso: TODO FIXME - #ifdef HAVE_MPI - /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ - /*--- Use su2double buffer for MeDiPack compatibility. ---*/ - su2double CFL_bcast = CFL_coarse_new; - SU2_MPI::Bcast(&CFL_bcast, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); - CFL_coarse_new = SU2_TYPE::GetValue(CFL_bcast); - #endif +#ifdef HAVE_MPI + /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ + /*--- Use su2double buffer for MeDiPack compatibility. ---*/ + su2double CFL_bcast = CFL_coarse_new; + SU2_MPI::Bcast(&CFL_bcast, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); + CFL_coarse_new = SU2_TYPE::GetValue(CFL_bcast); +#endif config->SetCFL(iMesh+1, CFL_coarse_new); } @@ -423,7 +423,7 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, /*--- Synchronize before each smoothing iteration ---*/ // nijso TODO FIXME - SU2_OMP_BARRIER + //SU2_OMP_BARRIER /*--- Time and space integration ---*/ for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { @@ -447,8 +447,8 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, /*--- TODO/FIXME: This SOLUTION comms is likely redundant because Time_Integration * (Explicit_Iteration_impl / CompleteImplicitIteration_impl) already syncs SOLUTION halos. * Kept for testing; remove once verified. ---*/ - solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + //solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + //solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); } } @@ -472,7 +472,7 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, /*--- Synchronize before each post-smoothing iteration ---*/ // nijso TODO FIXME - SU2_OMP_BARRIER + //SU2_OMP_BARRIER for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); if (iRKStep == 0) { @@ -496,7 +496,7 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, /*--- TODO/FIXME: This SOLUTION comms is likely redundant because Time_Integration * (Explicit_Iteration_impl / CompleteImplicitIteration_impl) already syncs SOLUTION halos. * Kept for testing; remove once verified. ---*/ - solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + //solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); } From 60a9ca9690bb75f639e1c91ddf4ace77c758607d Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 22 Mar 2026 11:42:48 +0100 Subject: [PATCH 156/229] remove mpi bcase, problem was in allreduce --- .../src/integration/CMultiGridIntegration.cpp | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index e37b8d4ced80..4f2e4ccf5289 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -73,15 +73,11 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve rms_res_coarse_local += SU2_TYPE::GetValue(solver_coarse->GetRes_RMS(iVar)); } - /*--- MPI synchronization: ensure all ranks use the same global residual value ---*/ - passivedouble rms_res_coarse = SU2_TYPE::GetValue(rms_res_coarse_local); - - /*--- For coarse grids, residuals are not globally reduced by default ---*/ - if (geometry_coarse->GetMGLevel() > 0) { - su2double rms_global_sum = 0.0; - SU2_MPI::Allreduce(&rms_res_coarse_local, &rms_global_sum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - rms_res_coarse = SU2_TYPE::GetValue(rms_global_sum) / static_cast(SU2_MPI::GetSize()); - } + /*--- MPI synchronization: ensure all ranks use the same global residual value. ---*/ + /*--- Always reduce across ranks so all subsequent CFL logic is deterministic. ---*/ + su2double rms_global_sum = 0.0; + SU2_MPI::Allreduce(&rms_res_coarse_local, &rms_global_sum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + passivedouble rms_res_coarse = SU2_TYPE::GetValue(rms_global_sum) / static_cast(SU2_MPI::GetSize()); /*--- Flip-flop detection: detect oscillating residuals (once per outer iteration) ---*/ bool oscillation_detected = false; @@ -162,15 +158,6 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve /*--- Update coarse grid CFL ---*/ CFL_coarse_new = max(0.5 * CFL_fine, min(CFL_fine, CFL_fine * new_coeff)); - // nijso: TODO FIXME -#ifdef HAVE_MPI - /*--- Ensure all ranks use the same CFL value (broadcast from rank 0) ---*/ - /*--- Use su2double buffer for MeDiPack compatibility. ---*/ - su2double CFL_bcast = CFL_coarse_new; - SU2_MPI::Bcast(&CFL_bcast, 1, MPI_DOUBLE, 0, SU2_MPI::GetComm()); - CFL_coarse_new = SU2_TYPE::GetValue(CFL_bcast); -#endif - config->SetCFL(iMesh+1, CFL_coarse_new); } From 6df29bd4abbcabb125150b49dff1000c3fa0bde9 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 22 Mar 2026 15:48:19 +0100 Subject: [PATCH 157/229] update regressions again --- TestCases/parallel_regression.py | 2 +- .../translating_NACA0012/forces_0.csv.ref | 400 ++++++++--------- .../forces_0.csv.ref | 401 +++++++++--------- 3 files changed, 402 insertions(+), 401 deletions(-) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index b38d1cfe9e12..eb695a4ac2a0 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -838,7 +838,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.583470, -15.035052, -0.726250, 0.020280] + contadj_naca0012.test_vals = [-9.583470, -15.035052, -0.726250, 0.020280] contadj_naca0012.test_vals_aarch64 = [-9.662546, -14.998818, -0.726250, 0.020280] test_list.append(contadj_naca0012) diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index f93cf1204d2a..11c6fcc7dcce 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.91, -0.00, 0.00 -0, -2.74, 18.89, 0.00 -1, -3.93, 27.09, 0.00 -2, -4.93, 34.02, 0.00 -3, -5.79, 40.08, 0.00 -4, -6.55, 45.45, 0.00 -5, -7.17, 49.89, 0.00 -6, -7.69, 53.77, 0.00 -7, -8.09, 56.82, 0.00 -8, -8.38, 59.18, 0.00 -9, -8.56, 60.85, 0.00 -10, -8.65, 61.82, 0.00 -11, -8.62, 62.09, 0.00 -12, -8.51, 61.74, 0.00 -13, -8.31, 60.81, 0.00 -14, -8.02, 59.21, 0.00 -15, -7.64, 56.88, 0.00 -16, -7.22, 54.31, 0.00 -17, -6.72, 51.09, 0.00 -18, -6.15, 47.26, 0.00 -19, -5.53, 42.94, 0.00 -20, -4.87, 38.30, 0.00 -21, -4.14, 32.91, 0.00 -22, -3.39, 27.29, 0.00 -23, -2.62, 21.40, 0.00 -24, -1.82, 15.07, 0.00 -25, -0.92, 7.68, 0.00 -26, -0.09, 0.75, 0.00 -27, 0.71, -6.17, 0.00 -28, 1.56, -13.70, 0.00 -29, 2.47, -22.03, 0.00 -30, 3.33, -30.22, 0.00 -31, 4.23, -39.01, 0.00 -32, 5.11, -48.00, 0.00 -33, 6.08, -58.16, 0.00 -34, 6.92, -67.48, 0.00 -35, 7.78, -77.43, 0.00 -36, 8.58, -87.17, 0.00 -37, 9.43, -97.99, 0.00 -38, 10.13, -107.83, 0.00 -39, 10.87, -118.63, 0.00 -40, 11.55, -129.43, 0.00 -41, 12.59, -145.08, 0.00 -42, 13.18, -156.48, 0.00 -43, 13.92, -170.68, 0.00 -44, 14.34, -182.18, 0.00 -45, 15.32, -201.98, 0.00 -46, 15.48, -212.70, 0.00 -47, 15.78, -226.70, 0.00 -48, 15.35, -231.55, 0.00 -49, 15.10, -240.31, 0.00 -50, 14.34, -242.24, 0.00 -51, 13.44, -242.75, 0.00 -52, 12.57, -244.71, 0.00 -53, 11.26, -238.67, 0.00 -54, 10.25, -239.73, 0.00 -55, 8.75, -229.42, 0.00 -56, 7.50, -225.38, 0.00 -57, 5.92, -209.82, 0.00 -58, 6.05, -264.66, 0.00 -59, 6.24, -361.05, 0.00 -60, 4.60, -403.57, 0.00 -61, 2.18, -416.34, 0.00 -62, -0.50, -408.93, 0.00 -63, -3.26, -406.38, 0.00 -64, -6.02, -397.52, 0.00 -65, -8.81, -390.00, 0.00 -66, -11.49, -377.49, 0.00 -67, -14.15, -365.86, 0.00 -68, -16.63, -351.35, 0.00 -69, -19.07, -337.95, 0.00 -70, -21.26, -322.02, 0.00 -71, -23.50, -308.57, 0.00 -72, -25.02, -288.10, 0.00 -73, -26.60, -271.06, 0.00 -74, -27.96, -253.91, 0.00 -75, -29.40, -239.25, 0.00 -76, -30.14, -220.80, 0.00 -77, -31.03, -205.35, 0.00 -78, -31.47, -188.72, 0.00 -79, -32.07, -174.58, 0.00 -80, -31.52, -155.94, 0.00 -81, -30.60, -137.66, 0.00 -82, -27.77, -113.62, 0.00 -83, -25.68, -95.47, 0.00 -84, -22.10, -74.55, 0.00 -85, -19.36, -59.10, 0.00 -86, -14.79, -40.72, 0.00 -87, -11.57, -28.60, 0.00 -88, -5.93, -13.09, 0.00 -89, -5.78, -11.30, 0.00 -90, 10.04, 17.22, 0.00 -91, 8.11, 12.05, 0.00 -92, 24.84, 31.45, 0.00 -93, 15.61, 16.46, 0.00 -94, 41.46, 35.22, 0.00 -95, 107.47, 70.00, 0.00 -96, 123.94, 56.81, 0.00 -97, 96.06, 26.00, 0.00 -98, 64.50, 8.66, 0.00 -99, 41.97, -0.00, 0.00 -100, 53.05, -7.12, 0.00 -101, 47.69, -12.91, 0.00 -102, 7.13, -3.27, 0.00 -103, 0.17, -0.11, 0.00 -104, -23.31, 19.80, 0.00 -105, -1.56, 1.64, 0.00 -106, -19.78, 25.05, 0.00 -107, -22.42, 33.33, 0.00 -108, -35.46, 60.84, 0.00 -109, -36.05, 70.50, 0.00 -110, -44.36, 97.90, 0.00 -111, -48.57, 120.08, 0.00 -112, -54.59, 150.30, 0.00 -113, -53.32, 162.74, 0.00 -114, -57.67, 194.49, 0.00 -115, -58.29, 216.69, 0.00 -116, -59.24, 242.39, 0.00 -117, -58.18, 261.79, 0.00 -118, -58.92, 291.51, 0.00 -119, -58.05, 315.99, 0.00 -120, -57.33, 343.75, 0.00 -121, -54.66, 361.75, 0.00 -122, -53.39, 391.09, 0.00 -123, -50.64, 412.03, 0.00 -124, -48.03, 436.14, 0.00 -125, -44.60, 454.44, 0.00 -126, -41.43, 477.17, 0.00 -127, -37.94, 498.18, 0.00 -128, -34.33, 519.97, 0.00 -129, -30.44, 539.30, 0.00 -130, -26.55, 560.91, 0.00 -131, -22.48, 581.17, 0.00 -132, -18.30, 601.21, 0.00 -133, -13.96, 617.52, 0.00 -134, -9.63, 635.95, 0.00 -135, -5.23, 652.43, 0.00 -136, -0.83, 669.37, 0.00 -137, 3.57, 682.91, 0.00 -138, 7.95, 697.68, 0.00 -139, 12.29, 711.49, 0.00 -140, 16.58, 724.74, 0.00 -141, 20.75, 735.52, 0.00 -142, 24.86, 746.64, 0.00 -143, 28.87, 756.87, 0.00 -144, 32.77, 766.13, 0.00 -145, 36.47, 773.03, 0.00 -146, 40.04, 779.33, 0.00 -147, 43.45, 784.66, 0.00 -148, 46.70, 789.00, 0.00 -149, 49.80, 792.55, 0.00 -150, 52.69, 794.66, 0.00 -151, 55.33, 794.71, 0.00 -152, 57.98, 796.42, 0.00 -153, 60.11, 792.71, 0.00 -154, 62.14, 789.23, 0.00 -155, 61.89, 759.10, 0.00 -156, 64.12, 761.46, 0.00 -157, 29.92, 344.78, 0.00 -158, -20.86, -233.68, 0.00 -159, -13.07, -142.62, 0.00 -160, 4.50, 47.87, 0.00 -161, 4.96, 51.57, 0.00 -162, 5.21, 52.99, 0.00 -163, 3.75, 37.28, 0.00 -164, 4.00, 39.00, 0.00 -165, 2.43, 23.23, 0.00 -166, 2.14, 20.06, 0.00 -167, 1.39, 12.85, 0.00 -168, 0.96, 8.72, 0.00 -169, 0.13, 1.19, 0.00 -170, -0.34, -2.97, 0.00 -171, -1.06, -9.17, 0.00 -172, -1.65, -14.08, 0.00 -173, -2.51, -21.02, 0.00 -174, -3.06, -25.32, 0.00 -175, -3.73, -30.45, 0.00 -176, -4.34, -34.94, 0.00 -177, -4.99, -39.67, 0.00 -178, -5.49, -43.14, 0.00 -179, -6.08, -47.27, 0.00 -180, -6.59, -50.62, 0.00 -181, -7.07, -53.74, 0.00 -182, -7.49, -56.36, 0.00 -183, -7.87, -58.61, 0.00 -184, -8.19, -60.45, 0.00 -185, -8.39, -61.39, 0.00 -186, -8.58, -62.28, 0.00 -187, -8.64, -62.21, 0.00 -188, -8.61, -61.60, 0.00 -189, -8.53, -60.57, 0.00 -190, -8.33, -58.81, 0.00 -191, -8.02, -56.34, 0.00 -192, -7.60, -53.16, 0.00 -193, -7.05, -49.06, 0.00 -194, -6.42, -44.55, 0.00 -195, -5.67, -39.20, 0.00 -196, -4.78, -33.02, 0.00 -197, -3.79, -26.13, 0.00 -198, -2.60, -17.88, 0.00 +199, -0.90, -0.00, 0.00 +0, -2.70, 18.56, 0.00 +1, -3.88, 26.76, 0.00 +2, -4.85, 33.51, 0.00 +3, -5.75, 39.81, 0.00 +4, -6.53, 45.28, 0.00 +5, -7.16, 49.86, 0.00 +6, -7.71, 53.87, 0.00 +7, -8.14, 57.19, 0.00 +8, -8.47, 59.83, 0.00 +9, -8.70, 61.80, 0.00 +10, -8.82, 63.09, 0.00 +11, -8.88, 63.93, 0.00 +12, -8.83, 64.05, 0.00 +13, -8.66, 63.38, 0.00 +14, -8.44, 62.30, 0.00 +15, -8.15, 60.75, 0.00 +16, -7.78, 58.55, 0.00 +17, -7.34, 55.82, 0.00 +18, -6.87, 52.76, 0.00 +19, -6.34, 49.28, 0.00 +20, -5.74, 45.14, 0.00 +21, -5.12, 40.69, 0.00 +22, -4.44, 35.79, 0.00 +23, -3.72, 30.35, 0.00 +24, -2.97, 24.60, 0.00 +25, -2.22, 18.59, 0.00 +26, -1.42, 12.05, 0.00 +27, -0.60, 5.18, 0.00 +28, 0.25, -2.16, 0.00 +29, 1.09, -9.73, 0.00 +30, 1.94, -17.61, 0.00 +31, 2.77, -25.55, 0.00 +32, 3.59, -33.74, 0.00 +33, 4.39, -42.02, 0.00 +34, 5.21, -50.80, 0.00 +35, 5.98, -59.51, 0.00 +36, 6.77, -68.82, 0.00 +37, 7.47, -77.62, 0.00 +38, 8.25, -87.84, 0.00 +39, 8.93, -97.45, 0.00 +40, 9.62, -107.79, 0.00 +41, 10.04, -115.71, 0.00 +42, 10.62, -126.15, 0.00 +43, 10.98, -134.68, 0.00 +44, 11.44, -145.35, 0.00 +45, 11.41, -150.49, 0.00 +46, 11.74, -161.34, 0.00 +47, 11.66, -167.50, 0.00 +48, 12.23, -184.47, 0.00 +49, 12.60, -200.56, 0.00 +50, 13.29, -224.59, 0.00 +51, 14.02, -253.14, 0.00 +52, 14.07, -273.82, 0.00 +53, 14.42, -305.70, 0.00 +54, 13.73, -321.04, 0.00 +55, 12.97, -339.90, 0.00 +56, 11.23, -337.32, 0.00 +57, 9.63, -341.27, 0.00 +58, 7.64, -333.94, 0.00 +59, 6.52, -377.33, 0.00 +60, 5.07, -445.30, 0.00 +61, 2.40, -458.13, 0.00 +62, -0.56, -450.06, 0.00 +63, -3.46, -431.58, 0.00 +64, -6.35, -419.64, 0.00 +65, -9.13, -404.08, 0.00 +66, -11.88, -390.28, 0.00 +67, -14.53, -375.65, 0.00 +68, -17.11, -361.40, 0.00 +69, -19.47, -345.03, 0.00 +70, -21.76, -329.50, 0.00 +71, -23.82, -312.83, 0.00 +72, -25.54, -294.09, 0.00 +73, -27.11, -276.25, 0.00 +74, -28.98, -263.12, 0.00 +75, -30.15, -245.32, 0.00 +76, -30.61, -224.24, 0.00 +77, -30.96, -204.88, 0.00 +78, -31.72, -190.22, 0.00 +79, -31.11, -169.32, 0.00 +80, -30.20, -149.42, 0.00 +81, -29.46, -132.56, 0.00 +82, -27.94, -114.30, 0.00 +83, -26.09, -96.99, 0.00 +84, -23.32, -78.64, 0.00 +85, -20.97, -64.00, 0.00 +86, -16.66, -45.86, 0.00 +87, -11.05, -27.33, 0.00 +88, -7.37, -16.26, 0.00 +89, -7.53, -14.73, 0.00 +90, -10.78, -18.49, 0.00 +91, 0.04, 0.07, 0.00 +92, 14.35, 18.18, 0.00 +93, -11.03, -11.63, 0.00 +94, -36.85, -31.31, 0.00 +95, -111.90, -72.88, 0.00 +96, -71.47, -32.76, 0.00 +97, 43.99, 11.91, 0.00 +98, 46.79, 6.28, 0.00 +99, 26.05, -0.00, 0.00 +100, 19.50, -2.62, 0.00 +101, 40.78, -11.04, 0.00 +102, 4.31, -1.98, 0.00 +103, 14.87, -9.69, 0.00 +104, 5.50, -4.67, 0.00 +105, 9.60, -10.12, 0.00 +106, 0.18, -0.22, 0.00 +107, -12.03, 17.89, 0.00 +108, -20.61, 35.36, 0.00 +109, -34.02, 66.53, 0.00 +110, -40.48, 89.34, 0.00 +111, -44.68, 110.48, 0.00 +112, -46.52, 128.07, 0.00 +113, -51.71, 157.83, 0.00 +114, -54.14, 182.61, 0.00 +115, -56.81, 211.20, 0.00 +116, -57.01, 233.24, 0.00 +117, -57.98, 260.88, 0.00 +118, -57.54, 284.67, 0.00 +119, -57.12, 310.88, 0.00 +120, -55.53, 332.99, 0.00 +121, -54.08, 357.90, 0.00 +122, -51.87, 380.01, 0.00 +123, -49.70, 404.39, 0.00 +124, -46.95, 426.30, 0.00 +125, -44.17, 450.11, 0.00 +126, -41.03, 472.49, 0.00 +127, -37.67, 494.75, 0.00 +128, -34.08, 516.12, 0.00 +129, -30.33, 537.28, 0.00 +130, -26.39, 557.53, 0.00 +131, -22.34, 577.46, 0.00 +132, -18.16, 596.46, 0.00 +133, -13.92, 616.05, 0.00 +134, -9.59, 633.76, 0.00 +135, -5.22, 651.27, 0.00 +136, -0.82, 667.78, 0.00 +137, 3.58, 684.14, 0.00 +138, 7.96, 698.30, 0.00 +139, 12.32, 713.25, 0.00 +140, 16.61, 726.33, 0.00 +141, 20.82, 738.19, 0.00 +142, 24.93, 748.66, 0.00 +143, 28.92, 758.17, 0.00 +144, 32.78, 766.46, 0.00 +145, 36.50, 773.66, 0.00 +146, 40.08, 780.11, 0.00 +147, 43.50, 785.57, 0.00 +148, 46.75, 789.79, 0.00 +149, 49.83, 793.09, 0.00 +150, 52.75, 795.64, 0.00 +151, 55.54, 797.76, 0.00 +152, 58.11, 798.33, 0.00 +153, 60.54, 798.36, 0.00 +154, 62.84, 798.09, 0.00 +155, 62.45, 766.01, 0.00 +156, 66.87, 794.07, 0.00 +157, 83.10, 957.62, 0.00 +158, 50.09, 561.18, 0.00 +159, 18.09, 197.41, 0.00 +160, 8.53, 90.82, 0.00 +161, 2.36, 24.56, 0.00 +162, 1.55, 15.72, 0.00 +163, 0.35, 3.46, 0.00 +164, -0.78, -7.57, 0.00 +165, -1.00, -9.57, 0.00 +166, -1.63, -15.31, 0.00 +167, -2.08, -19.14, 0.00 +168, -2.60, -23.58, 0.00 +169, -2.86, -25.52, 0.00 +170, -3.43, -30.12, 0.00 +171, -3.88, -33.49, 0.00 +172, -4.40, -37.44, 0.00 +173, -4.74, -39.78, 0.00 +174, -5.32, -43.98, 0.00 +175, -5.82, -47.50, 0.00 +176, -6.37, -51.32, 0.00 +177, -6.79, -54.04, 0.00 +178, -7.29, -57.29, 0.00 +179, -7.70, -59.80, 0.00 +180, -8.10, -62.22, 0.00 +181, -8.42, -63.97, 0.00 +182, -8.72, -65.60, 0.00 +183, -8.96, -66.77, 0.00 +184, -9.15, -67.50, 0.00 +185, -9.27, -67.80, 0.00 +186, -9.29, -67.39, 0.00 +187, -9.27, -66.73, 0.00 +188, -9.16, -65.52, 0.00 +189, -8.94, -63.53, 0.00 +190, -8.66, -61.17, 0.00 +191, -8.27, -58.09, 0.00 +192, -7.79, -54.48, 0.00 +193, -7.21, -50.17, 0.00 +194, -6.53, -45.30, 0.00 +195, -5.72, -39.55, 0.00 +196, -4.81, -33.18, 0.00 +197, -3.80, -26.18, 0.00 +198, -2.61, -17.96, 0.00 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 52756ca11feb..844299f3310e 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,201 @@ -199, -0.94, -0.00, 0.00 -0, -2.77, 19.04, 0.00 -1, -3.82, 26.31, 0.00 -2, -4.90, 33.79, 0.00 -3, -5.83, 40.33, 0.00 -4, -6.72, 46.62, 0.00 -5, -7.40, 51.55, 0.00 -6, -8.08, 56.49, 0.00 -7, -8.56, 60.10, 0.00 -8, -9.01, 63.63, 0.00 -9, -9.28, 65.94, 0.00 -10, -9.53, 68.14, 0.00 -11, -9.58, 69.03, 0.00 -12, -9.66, 70.13, 0.00 -13, -9.48, 69.39, 0.00 -14, -9.39, 69.33, 0.00 -15, -9.13, 68.00, 0.00 -16, -8.85, 66.57, 0.00 -17, -8.38, 63.67, 0.00 -18, -7.95, 61.06, 0.00 -19, -7.39, 57.44, 0.00 -20, -6.85, 53.85, 0.00 -21, -6.11, 48.62, 0.00 -22, -5.50, 44.34, 0.00 -23, -4.79, 39.13, 0.00 -24, -4.08, 33.74, 0.00 -25, -3.16, 26.52, 0.00 -26, -2.41, 20.50, 0.00 -27, -1.65, 14.25, 0.00 -28, -0.83, 7.24, 0.00 -29, 0.15, -1.35, 0.00 -30, 1.08, -9.77, 0.00 -31, 2.04, -18.85, 0.00 -32, 2.91, -27.35, 0.00 -33, 4.12, -39.36, 0.00 -34, 4.84, -47.17, 0.00 -35, 5.56, -55.30, 0.00 -36, 6.21, -63.07, 0.00 -37, 6.98, -72.54, 0.00 -38, 7.58, -80.64, 0.00 -39, 8.28, -90.36, 0.00 -40, 8.82, -98.82, 0.00 -41, 9.85, -113.49, 0.00 -42, 10.03, -119.07, 0.00 -43, 10.20, -125.07, 0.00 -44, 10.25, -130.12, 0.00 -45, 10.32, -136.09, 0.00 -46, 10.05, -138.09, 0.00 -47, 9.50, -136.45, 0.00 -48, 9.10, -137.22, 0.00 -49, 8.01, -127.49, 0.00 -50, 6.33, -106.99, 0.00 -51, 0.64, -11.55, 0.00 -52, -2.01, 39.22, 0.00 -53, -1.79, 37.99, 0.00 -54, 7.57, -176.97, 0.00 -55, 11.68, -306.21, 0.00 -56, 11.24, -337.67, 0.00 -57, 12.00, -425.38, 0.00 -58, 9.83, -429.73, 0.00 -59, 7.56, -437.67, 0.00 -60, 4.89, -429.43, 0.00 -61, 2.24, -427.92, 0.00 -62, -0.52, -417.68, 0.00 -63, -3.27, -408.38, 0.00 -64, -5.97, -394.43, 0.00 -65, -8.63, -381.71, 0.00 -66, -11.38, -373.85, 0.00 -67, -13.92, -359.74, 0.00 -68, -16.30, -344.39, 0.00 -69, -18.59, -329.29, 0.00 -70, -20.59, -311.80, 0.00 -71, -22.49, -295.35, 0.00 -72, -23.37, -269.18, 0.00 -73, -24.89, -253.61, 0.00 -74, -26.60, -241.57, 0.00 -75, -28.33, -230.54, 0.00 -76, -28.12, -206.00, 0.00 -77, -25.23, -166.99, 0.00 -78, -23.75, -142.42, 0.00 -79, -21.52, -117.15, 0.00 -80, -21.36, -105.66, 0.00 -81, -19.05, -85.72, 0.00 -82, -13.88, -56.77, 0.00 -83, -8.95, -33.26, 0.00 -84, -3.94, -13.28, 0.00 -85, 3.68, 11.23, 0.00 -86, 13.46, 37.07, 0.00 -87, 16.97, 41.95, 0.00 -88, 22.46, 49.58, 0.00 -89, 29.06, 56.83, 0.00 -90, 31.84, 54.64, 0.00 -91, 35.71, 53.08, 0.00 -92, 58.67, 74.29, 0.00 -93, 45.30, 47.76, 0.00 -94, 21.16, 17.97, 0.00 -95, 36.02, 23.46, 0.00 -96, 34.28, 15.71, 0.00 -97, 167.86, 45.43, 0.00 -98, -37.68, -5.06, 0.00 -99, -44.95, 0.00, 0.00 -100, 21.40, -2.87, 0.00 -101, -8.23, 2.23, 0.00 -102, 21.75, -9.97, 0.00 -103, 17.57, -11.45, 0.00 -104, 24.83, -21.09, 0.00 -105, 20.31, -21.41, 0.00 -106, 22.40, -28.36, 0.00 -107, 10.82, -16.08, 0.00 -108, 6.44, -11.05, 0.00 -109, -5.43, 10.62, 0.00 -110, -12.05, 26.58, 0.00 -111, -16.29, 40.28, 0.00 -112, -19.02, 52.37, 0.00 -113, -23.88, 72.90, 0.00 -114, -28.36, 95.64, 0.00 -115, -32.94, 122.46, 0.00 -116, -34.97, 143.06, 0.00 -117, -36.81, 165.61, 0.00 -118, -38.03, 188.15, 0.00 -119, -39.13, 213.01, 0.00 -120, -39.40, 236.25, 0.00 -121, -39.61, 262.16, 0.00 -122, -38.96, 285.38, 0.00 -123, -38.09, 309.97, 0.00 -124, -36.56, 332.00, 0.00 -125, -34.95, 356.11, 0.00 -126, -32.52, 374.47, 0.00 -127, -30.04, 394.46, 0.00 -128, -27.39, 414.79, 0.00 -129, -25.03, 443.37, 0.00 -130, -21.79, 460.28, 0.00 -131, -18.54, 479.35, 0.00 -132, -15.10, 496.09, 0.00 -133, -11.72, 518.74, 0.00 -134, -8.14, 537.76, 0.00 -135, -4.46, 556.85, 0.00 -136, -0.71, 574.70, 0.00 -137, 3.07, 586.32, 0.00 -138, 6.85, 601.19, 0.00 -139, 10.66, 617.05, 0.00 -140, 14.41, 629.85, 0.00 -141, 18.07, 640.49, 0.00 -142, 21.68, 651.22, 0.00 -143, 25.23, 661.45, 0.00 -144, 28.70, 670.97, 0.00 -145, 31.06, 658.53, 0.00 -146, 34.12, 664.18, 0.00 -147, 37.07, 669.41, 0.00 -148, 39.90, 674.08, 0.00 -149, 41.12, 654.43, 0.00 -150, 43.59, 657.44, 0.00 -151, 46.03, 661.11, 0.00 -152, 48.98, 672.80, 0.00 -153, 37.71, 497.29, 0.00 -154, 33.20, 421.64, 0.00 -155, 10.52, 128.98, 0.00 -156, -30.84, -366.25, 0.00 -157, -26.28, -302.89, 0.00 -158, -15.42, -172.74, 0.00 -159, -5.79, -63.20, 0.00 -160, -3.86, -41.05, 0.00 -161, -1.55, -16.16, 0.00 -162, -0.43, -4.33, 0.00 -163, 0.72, 7.19, 0.00 -164, 1.27, 12.35, 0.00 -165, 0.10, 0.94, 0.00 -166, 0.02, 0.17, 0.00 -167, -0.42, -3.86, 0.00 -168, -0.73, -6.60, 0.00 -169, -1.80, -16.01, 0.00 -170, -2.30, -20.22, 0.00 -171, -2.88, -24.90, 0.00 -172, -3.35, -28.48, 0.00 -173, -4.32, -36.26, 0.00 -174, -4.89, -40.46, 0.00 -175, -5.39, -43.99, 0.00 -176, -5.90, -47.51, 0.00 -177, -6.63, -52.74, 0.00 -178, -7.18, -56.47, 0.00 -179, -7.73, -60.04, 0.00 -180, -8.13, -62.46, 0.00 -181, -8.64, -65.68, 0.00 -182, -8.97, -67.49, 0.00 -183, -9.30, -69.30, 0.00 -184, -9.50, -70.10, 0.00 -185, -9.73, -71.22, 0.00 -186, -9.71, -70.48, 0.00 -187, -9.79, -70.52, 0.00 -188, -9.61, -68.70, 0.00 -189, -9.32, -66.22, 0.00 -190, -8.98, -63.42, 0.00 -191, -8.60, -60.39, 0.00 -192, -8.07, -56.42, 0.00 -193, -7.44, -51.79, 0.00 -194, -6.72, -46.64, 0.00 -195, -5.86, -40.54, 0.00 -196, -4.86, -33.51, 0.00 -197, -3.83, -26.36, 0.00 -198, -2.78, -19.12, 0.00 +199, -1.00, -0.00, 0.00 +0, -2.64, 18.17, 0.00 +1, -3.78, 26.02, 0.00 +2, -4.77, 32.94, 0.00 +3, -5.65, 39.09, 0.00 +4, -6.42, 44.56, 0.00 +5, -7.03, 48.94, 0.00 +6, -7.56, 52.82, 0.00 +7, -7.99, 56.13, 0.00 +8, -8.30, 58.59, 0.00 +9, -8.52, 60.55, 0.00 +10, -8.67, 61.97, 0.00 +11, -8.72, 62.82, 0.00 +12, -8.66, 62.88, 0.00 +13, -8.50, 62.23, 0.00 +14, -8.28, 61.13, 0.00 +15, -7.99, 59.55, 0.00 +16, -7.62, 57.32, 0.00 +17, -7.17, 54.49, 0.00 +18, -6.71, 51.54, 0.00 +19, -6.20, 48.16, 0.00 +20, -5.58, 43.86, 0.00 +21, -4.94, 39.28, 0.00 +22, -4.27, 34.40, 0.00 +23, -3.53, 28.82, 0.00 +24, -2.76, 22.80, 0.00 +25, -2.02, 16.94, 0.00 +26, -1.24, 10.57, 0.00 +27, -0.42, 3.61, 0.00 +28, 0.43, -3.74, 0.00 +29, 1.23, -10.94, 0.00 +30, 2.05, -18.59, 0.00 +31, 2.85, -26.25, 0.00 +32, 3.71, -34.80, 0.00 +33, 4.39, -42.01, 0.00 +34, 5.21, -50.81, 0.00 +35, 5.93, -59.05, 0.00 +36, 6.78, -68.95, 0.00 +37, 7.40, -76.94, 0.00 +38, 8.15, -86.68, 0.00 +39, 8.73, -95.26, 0.00 +40, 9.39, -105.25, 0.00 +41, 9.53, -109.79, 0.00 +42, 10.21, -121.24, 0.00 +43, 10.64, -130.48, 0.00 +44, 11.29, -143.38, 0.00 +45, 11.58, -152.67, 0.00 +46, 11.87, -163.00, 0.00 +47, 11.62, -166.89, 0.00 +48, 10.95, -165.11, 0.00 +49, 9.98, -158.89, 0.00 +50, 10.53, -177.85, 0.00 +51, 12.85, -232.04, 0.00 +52, 11.84, -230.57, 0.00 +53, 17.68, -374.71, 0.00 +54, 28.16, -658.41, 0.00 +55, 23.75, -622.62, 0.00 +56, 19.13, -574.54, 0.00 +57, 15.80, -560.14, 0.00 +58, 12.67, -554.15, 0.00 +59, 9.41, -544.78, 0.00 +60, 6.07, -532.95, 0.00 +61, 2.72, -520.90, 0.00 +62, -0.63, -508.17, 0.00 +63, -3.96, -493.63, 0.00 +64, -7.22, -477.35, 0.00 +65, -10.41, -460.70, 0.00 +66, -13.58, -445.93, 0.00 +67, -16.65, -430.33, 0.00 +68, -19.45, -410.92, 0.00 +69, -22.10, -391.56, 0.00 +70, -24.60, -372.51, 0.00 +71, -26.81, -352.02, 0.00 +72, -28.57, -329.02, 0.00 +73, -30.26, -308.33, 0.00 +74, -32.31, -293.36, 0.00 +75, -33.66, -273.93, 0.00 +76, -33.91, -248.45, 0.00 +77, -33.37, -220.87, 0.00 +78, -33.65, -201.75, 0.00 +79, -33.28, -181.13, 0.00 +80, -33.65, -166.45, 0.00 +81, -32.32, -145.41, 0.00 +82, -30.98, -126.77, 0.00 +83, -27.67, -102.86, 0.00 +84, -25.19, -84.97, 0.00 +85, -17.98, -54.87, 0.00 +86, -12.22, -33.65, 0.00 +87, -5.44, -13.46, 0.00 +88, 2.81, 6.20, 0.00 +89, 25.61, 50.08, 0.00 +90, 34.75, 59.62, 0.00 +91, 59.49, 88.44, 0.00 +92, 74.40, 94.21, 0.00 +93, 98.91, 104.29, 0.00 +94, 128.78, 109.40, 0.00 +95, 197.27, 128.49, 0.00 +96, 167.86, 76.94, 0.00 +97, 215.03, 58.20, 0.00 +98, 98.23, 13.18, 0.00 +99, 39.92, -0.00, 0.00 +100, 38.55, -5.17, 0.00 +101, 111.93, -30.29, 0.00 +102, 105.62, -48.41, 0.00 +103, 71.27, -46.42, 0.00 +104, 47.70, -40.52, 0.00 +105, 33.09, -34.89, 0.00 +106, 12.18, -15.42, 0.00 +107, -6.33, 9.41, 0.00 +108, -15.15, 26.00, 0.00 +109, -21.38, 41.82, 0.00 +110, -31.33, 69.16, 0.00 +111, -37.85, 93.59, 0.00 +112, -41.16, 113.33, 0.00 +113, -42.82, 130.69, 0.00 +114, -48.07, 162.12, 0.00 +115, -50.44, 187.51, 0.00 +116, -51.28, 209.82, 0.00 +117, -51.46, 231.52, 0.00 +118, -53.20, 263.21, 0.00 +119, -53.66, 292.07, 0.00 +120, -52.32, 313.72, 0.00 +121, -49.22, 325.73, 0.00 +122, -48.52, 355.46, 0.00 +123, -46.38, 377.37, 0.00 +124, -43.86, 398.27, 0.00 +125, -40.68, 414.51, 0.00 +126, -38.07, 438.47, 0.00 +127, -34.79, 456.90, 0.00 +128, -31.33, 474.46, 0.00 +129, -27.76, 491.75, 0.00 +130, -24.47, 517.00, 0.00 +131, -20.76, 536.60, 0.00 +132, -16.86, 553.95, 0.00 +133, -12.96, 573.31, 0.00 +134, -8.94, 590.73, 0.00 +135, -4.88, 608.38, 0.00 +136, -0.77, 622.80, 0.00 +137, 3.34, 639.01, 0.00 +138, 7.43, 652.16, 0.00 +139, 11.51, 666.46, 0.00 +140, 15.52, 678.54, 0.00 +141, 19.46, 690.00, 0.00 +142, 23.30, 699.69, 0.00 +143, 27.06, 709.49, 0.00 +144, 30.69, 717.48, 0.00 +145, 34.16, 724.22, 0.00 +146, 37.46, 729.11, 0.00 +147, 40.70, 735.10, 0.00 +148, 43.72, 738.64, 0.00 +149, 46.43, 738.93, 0.00 +150, 49.13, 740.92, 0.00 +151, 51.01, 732.67, 0.00 +152, 52.99, 727.93, 0.00 +153, 60.59, 799.05, 0.00 +154, 41.53, 527.40, 0.00 +155, 6.57, 80.58, 0.00 +156, 6.52, 77.48, 0.00 +157, 6.39, 73.60, 0.00 +158, 5.37, 60.18, 0.00 +159, 3.89, 42.49, 0.00 +160, 3.36, 35.73, 0.00 +161, 3.25, 33.78, 0.00 +162, 2.69, 27.29, 0.00 +163, 2.25, 22.39, 0.00 +164, 1.68, 16.39, 0.00 +165, 1.46, 13.98, 0.00 +166, 0.81, 7.64, 0.00 +167, 0.24, 2.17, 0.00 +168, -0.42, -3.77, 0.00 +169, -0.96, -8.53, 0.00 +170, -1.69, -14.79, 0.00 +171, -2.28, -19.67, 0.00 +172, -2.97, -25.27, 0.00 +173, -3.46, -29.03, 0.00 +174, -4.13, -34.19, 0.00 +175, -4.74, -38.71, 0.00 +176, -5.35, -43.13, 0.00 +177, -5.85, -46.53, 0.00 +178, -6.46, -50.75, 0.00 +179, -6.93, -53.80, 0.00 +180, -7.39, -56.75, 0.00 +181, -7.80, -59.32, 0.00 +182, -8.20, -61.66, 0.00 +183, -8.45, -62.97, 0.00 +184, -8.68, -64.05, 0.00 +185, -8.75, -63.99, 0.00 +186, -8.91, -64.64, 0.00 +187, -8.88, -63.93, 0.00 +188, -8.84, -63.20, 0.00 +189, -8.70, -61.82, 0.00 +190, -8.47, -59.83, 0.00 +191, -8.08, -56.79, 0.00 +192, -7.62, -53.25, 0.00 +193, -7.07, -49.21, 0.00 +194, -6.41, -44.48, 0.00 +195, -5.60, -38.74, 0.00 +196, -4.74, -32.69, 0.00 +197, -3.75, -25.87, 0.00 +198, -2.59, -17.84, 0.00 + From dfa47c01d6e6f9436fa3cea56ac2934fba74d97d Mon Sep 17 00:00:00 2001 From: Nijso Date: Sun, 22 Mar 2026 15:51:49 +0100 Subject: [PATCH 158/229] Potential fix for code scanning alert no. 6189: Commented-out code Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com> --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 4f2e4ccf5289..e5c3ac720ccc 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -434,8 +434,8 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, /*--- TODO/FIXME: This SOLUTION comms is likely redundant because Time_Integration * (Explicit_Iteration_impl / CompleteImplicitIteration_impl) already syncs SOLUTION halos. * Kept for testing; remove once verified. ---*/ - //solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - //solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); + + } } From 8abd6c6f0ba8ad960bcd4fec349c6a454189f8ae Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sun, 22 Mar 2026 15:55:12 +0100 Subject: [PATCH 159/229] remove commented code --- .../src/integration/CMultiGridIntegration.cpp | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index e5c3ac720ccc..47b65b481827 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -408,35 +408,31 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, /*--- Do a presmoothing on the grid iMesh to be restricted to the grid iMesh+1 ---*/ for (unsigned short iPreSmooth = 0; iPreSmooth < nPreSmooth; iPreSmooth++) { - /*--- Synchronize before each smoothing iteration ---*/ - // nijso TODO FIXME - //SU2_OMP_BARRIER - /*--- Time and space integration ---*/ for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { + /*--- Send-Receive boundary conditions, and preprocessing ---*/ solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); + if (iRKStep == 0) { + /*--- Set the old solution ---*/ solver_fine->Set_OldSolution(); + if (classical_rk4) solver_fine->Set_NewSolution(); solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, timeIter); Adjoint_Setup(geometry, solver_container, config_container, RunTime_EqSystem, timeIter, iZone); } + /*--- Space integration ---*/ Space_Integration(geometry_fine, solver_container_fine, numerics_fine, config, iMesh, iRKStep, RunTime_EqSystem); + /*--- 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); } - - /*--- TODO/FIXME: This SOLUTION comms is likely redundant because Time_Integration - * (Explicit_Iteration_impl / CompleteImplicitIteration_impl) already syncs SOLUTION halos. - * Kept for testing; remove once verified. ---*/ - - - } } @@ -457,14 +453,13 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, /*--- Do a postsmoothing on the grid iMesh after prolongation from the grid iMesh+1 ---*/ for (unsigned short iPostSmooth = 0; iPostSmooth < nPostSmooth; iPostSmooth++) { - /*--- Synchronize before each post-smoothing iteration ---*/ - // nijso TODO FIXME - //SU2_OMP_BARRIER for (unsigned short iRKStep = 0; iRKStep < iRKLimit; iRKStep++) { solver_fine->Preprocessing(geometry_fine, solver_container_fine, config, iMesh, iRKStep, RunTime_EqSystem, false); if (iRKStep == 0) { + /*--- Set the old solution ---*/ solver_fine->Set_OldSolution(); + if (classical_rk4) solver_fine->Set_NewSolution(); solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, timeIter); } @@ -479,13 +474,6 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, solver_fine->Postprocessing(geometry_fine, solver_container_fine, config, iMesh); } - - /*--- TODO/FIXME: This SOLUTION comms is likely redundant because Time_Integration - * (Explicit_Iteration_impl / CompleteImplicitIteration_impl) already syncs SOLUTION halos. - * Kept for testing; remove once verified. ---*/ - //solver_fine->InitiateComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - solver_fine->CompleteComms(geometry_fine, config, MPI_QUANTITIES::SOLUTION); - } } From 28ef199b69336332e8956e649ac08088b716cebe Mon Sep 17 00:00:00 2001 From: Sahil_Kumar Date: Mon, 16 Mar 2026 18:57:05 +0000 Subject: [PATCH 160/229] Tune inner iteration settings for unsteady test cases - Reduce INNER_ITER from 2000/110/1000 to 30/20/50 for RANS/Euler/Plunging - Switch LINEAR_SOLVER_PREC from LU_SGS to ILU for faster convergence - Raise CFL from 4/10 to 200 for RANS and Euler cases - These settings achieve ~2 orders residual drop in 20 inner iterations for RANS and Euler, consistent with pcarruscag review feedback --- .../pitching_naca64a010_euler/pitching_NACA64A010.cfg | 6 +++--- .../unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg | 6 +++--- TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg index 2dbcc82a85dd..2ec7c7c9e8ee 100644 --- a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg +++ b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg @@ -28,7 +28,7 @@ MAX_TIME= 0.59 % TIME_DOMAIN= YES TIME_ITER= 100 -INNER_ITER= 110 +INNER_ITER= 20 UNST_ADJOINT_ITER= 251 % ----------------------- DYNAMIC MESH DEFINITION -----------------------------% @@ -69,7 +69,7 @@ MARKER_DESIGNING = ( airfoil ) % ------------- COMMON PARAMETERS TO DEFINE THE NUMERICAL METHOD --------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 10.0 +CFL_NUMBER= 200.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) @@ -77,7 +77,7 @@ RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% % LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_PREC= LU_SGS +LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ERROR= 1E-6 LINEAR_SOLVER_ITER= 5 diff --git a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg index 9bd3a5d02297..0a14191cdafa 100644 --- a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg +++ b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg @@ -29,7 +29,7 @@ MAX_TIME= 0.59 % TIME_DOMAIN= YES TIME_ITER= 100 -INNER_ITER= 2000 +INNER_ITER= 30 UNST_ADJOINT_ITER= 251 GRID_MOVEMENT= RIGID_MOTION MACH_MOTION= 0.796 @@ -67,7 +67,7 @@ MARKER_DESIGNING = ( airfoil ) % ------------- COMMON PARAMETERS TO DEFINE THE NUMERICAL METHOD --------------% % NUM_METHOD_GRAD= GREEN_GAUSS -CFL_NUMBER= 4.0 +CFL_NUMBER= 200.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) @@ -75,7 +75,7 @@ RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% % LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_PREC= LU_SGS +LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ERROR= 1E-6 LINEAR_SOLVER_ITER= 5 diff --git a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg index d1d60b9e0e25..71a0c53c5a95 100644 --- a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg +++ b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg @@ -28,7 +28,7 @@ TIME_ITER= 100 MAX_TIME= 0.5888756403287397 % 10 periods: 0.5888756403287397 % -INNER_ITER= 1000 +INNER_ITER= 50 % ----------------------- DYNAMIC MESH DEFINITION -----------------------------% % @@ -75,7 +75,7 @@ SENS_REMOVE_SHARP= NO % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% % LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_PREC= LU_SGS +LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ERROR= 1E-4 LINEAR_SOLVER_ITER= 5 From b8027b6116efd9880555800a77d29476a5bb32a6 Mon Sep 17 00:00:00 2001 From: Sahil_Kumar Date: Sun, 22 Mar 2026 19:45:24 +0000 Subject: [PATCH 161/229] Update regression test_vals for new solver settings - RANS: CFL=200, INNER_ITER=30 - Euler: CFL=200, INNER_ITER=20 - Plunging: CFL=1.0, INNER_ITER=50 - test_vals regenerated from clean run with new settings --- TestCases/serial_regression.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 8828ba5cf495..b32130c74645 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -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 = 1 - unst_pitching_naca64a010_rans.test_vals = [-3.904127, -6.717585, 0.030913, 0.054788] + unst_pitching_naca64a010_rans.test_vals = [-4.625245, -6.168469, 0.030704, 0.039347] 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 = 1 - unst_pitching_naca64a010_euler.test_vals = [-5.383725, -0.104475, 0.032842, 0.031044] + unst_pitching_naca64a010_euler.test_vals = [-4.389394, 0.963226, 0.032802, 0.031042] 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 = 1 - unst_plunging_naca0012.test_vals = [-5.248321, 0.372499, 2.100860, 6.212394] + unst_plunging_naca0012.test_vals = [-5.248317, 0.372503, 2.100901, 6.212456] unst_plunging_naca0012.unsteady = True test_list.append(unst_plunging_naca0012) From 08962ff67aaf7dce2cf06d7584b3c05e0fe953c1 Mon Sep 17 00:00:00 2001 From: Sahil_Kumar Date: Sun, 22 Mar 2026 21:23:32 +0000 Subject: [PATCH 162/229] Fix plunging preconditioner and update test_vals to CI build values - Revert plunging LINEAR_SOLVER_PREC to LU_SGS (ILU caused divergence on CI) - RANS and Euler test_vals updated to CI Docker computed values - RANS CI values: [-2.474001, -6.039495, 0.031041, 0.053671] - Euler CI values: [-1.864773, 3.545935, 0.035685, 0.035843] - Plunging LU_SGS values: [-5.248321, 0.372499, 2.100860, 6.212394] --- TestCases/serial_regression.py | 6 +++--- TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index b32130c74645..5965cc9fd534 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -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 = 1 - unst_pitching_naca64a010_rans.test_vals = [-4.625245, -6.168469, 0.030704, 0.039347] + unst_pitching_naca64a010_rans.test_vals = [-2.474001, -6.039495, 0.031041, 0.053671] 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 = 1 - unst_pitching_naca64a010_euler.test_vals = [-4.389394, 0.963226, 0.032802, 0.031042] + unst_pitching_naca64a010_euler.test_vals = [-1.864773, 3.545935, 0.035685, 0.035843] 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 = 1 - unst_plunging_naca0012.test_vals = [-5.248317, 0.372503, 2.100901, 6.212456] + unst_plunging_naca0012.test_vals = [-5.248321, 0.372499, 2.100860, 6.212394] unst_plunging_naca0012.unsteady = True test_list.append(unst_plunging_naca0012) diff --git a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg index 71a0c53c5a95..a364dadd7630 100644 --- a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg +++ b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg @@ -75,7 +75,7 @@ SENS_REMOVE_SHARP= NO % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% % LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_PREC= LU_SGS LINEAR_SOLVER_ERROR= 1E-4 LINEAR_SOLVER_ITER= 5 From e4ac622bb72acf148006a99188e41f70f51bf96d Mon Sep 17 00:00:00 2001 From: bigfooted Date: Mon, 23 Mar 2026 23:39:54 +0100 Subject: [PATCH 163/229] switch off eulerwall projection correction --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 47b65b481827..8cbc95fe3c53 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -518,7 +518,7 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; /*--- Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ - sol_coarse->MultigridProjectEulerWall(geo_coarse, config, true); + //sol_coarse->MultigridProjectEulerWall(geo_coarse, config, true); /*--- Remove any contributions from no-slip walls. ---*/ @@ -778,7 +778,7 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } /*--- Enforce Euler wall BC by projecting velocity to tangent plane ---*/ - sol_coarse->MultigridProjectEulerWall(geo_coarse, config, false); + //sol_coarse->MultigridProjectEulerWall(geo_coarse, config, false); /*--- MPI the new interpolated solution ---*/ From f8849e1770c1acac77c1dd862530493fd4fb3de7 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Tue, 24 Mar 2026 19:39:23 +0100 Subject: [PATCH 164/229] add barriers to testcase --- SU2_CFD/src/integration/CMultiGridIntegration.cpp | 2 -- TestCases/py_wrapper/translating_NACA0012/run_su2.py | 4 ++++ TestCases/py_wrapper/updated_moving_frame_NACA12/run_su2.py | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 8cbc95fe3c53..362dc36a900d 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -349,8 +349,6 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, MultiGrid_Cycle(geometry, solver_container, numerics_container, config_container, iMesh+1, nextRecurseParam, RunTime_EqSystem, iZone, iInst); - /*--- Synchronize after each multigrid cycle ---*/ - //SU2_OMP_BARRIER } /*--- Compute prolongated solution, and smooth the correction $u^(new)_k = u_k + Smooth(I^k_(k+1)(u_(k+1)-I^(k+1)_k u_k))$ ---*/ diff --git a/TestCases/py_wrapper/translating_NACA0012/run_su2.py b/TestCases/py_wrapper/translating_NACA0012/run_su2.py index f6fffc21c550..27ea2b880fcb 100644 --- a/TestCases/py_wrapper/translating_NACA0012/run_su2.py +++ b/TestCases/py_wrapper/translating_NACA0012/run_su2.py @@ -27,10 +27,14 @@ def run_solver(self): self.comm.barrier() # run solver self.FluidSolver.Preprocess(0) + self.comm.barrier() self.FluidSolver.Run() + self.comm.barrier() self.FluidSolver.Postprocess() + self.comm.barrier() # write outputs self.FluidSolver.Monitor(0) + self.comm.barrier() self.FluidSolver.Output(0) self.comm.barrier() diff --git a/TestCases/py_wrapper/updated_moving_frame_NACA12/run_su2.py b/TestCases/py_wrapper/updated_moving_frame_NACA12/run_su2.py index bb0e5379830c..cd4c2b2bae55 100644 --- a/TestCases/py_wrapper/updated_moving_frame_NACA12/run_su2.py +++ b/TestCases/py_wrapper/updated_moving_frame_NACA12/run_su2.py @@ -40,10 +40,14 @@ def run_solver(self): self.comm.barrier() # run solver self.FluidSolver.Preprocess(0) + self.comm.barrier() self.FluidSolver.Run() + self.comm.barrier() self.FluidSolver.Postprocess() + self.comm.barrier() # write outputs self.FluidSolver.Monitor(0) + self.comm.barrier() self.FluidSolver.Output(0) self.comm.barrier() From a50f117cceb9da19face6dd3e6fe2d50fa370d5a Mon Sep 17 00:00:00 2001 From: bigfooted Date: Tue, 24 Mar 2026 20:22:46 +0100 Subject: [PATCH 165/229] fix for projecteulerwall --- .../include/solvers/CFVMFlowSolverBase.inl | 25 +++++++++++++------ .../src/integration/CMultiGridIntegration.cpp | 4 +-- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index b4ef6e692a36..78ac7ea1c536 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -3009,6 +3009,7 @@ template void CFVMFlowSolverBase::MultigridProjectEulerWall(CGeometry* geometry, const CConfig* config, bool use_solution_old) { const auto iVel = prim_idx.Velocity(); + const auto nDim = geometry->GetnDim(); const bool grid_movement = config->GetGrid_Movement(); for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { @@ -3020,15 +3021,23 @@ void CFVMFlowSolverBase::MultigridProjectEulerWall(CGeometry* geo if (!geometry->nodes->GetDomain(iPoint)) continue; - su2double Normal[MAXNDIM] = {0.0}; + /*--- For nodes shared by multiple Euler-wall (or symmetry) markers, + * geometry->symmetryNormals stores a Gram-Schmidt corrected normal, + * exactly as used by BC_Sym_Plane at runtime. For nodes on a single + * wall the map is empty and we fall back to the raw marker normal. + * The Gram-Schmidt orthogonalization guarantees that projecting + * sequentially through all markers (n̂₁ then n̂₂' = n̂₂ - (n̂₂·n̂₁)n̂₁) + * is correct and does not corrupt the earlier constraint. ---*/ + su2double Normal[MAXNDIM] = {0.0}, UnitNormal[MAXNDIM] = {0.0}; geometry->vertex[iMarker][iVertex]->GetNormal(Normal); - const auto nDim = geometry->GetnDim(); - const su2double Area = GeometryToolbox::Norm(nDim, Normal); - - if (Area < EPS) continue; - - su2double UnitNormal[MAXNDIM] = {0.0}; - for (auto iDim = 0u; iDim < nDim; iDim++) UnitNormal[iDim] = Normal[iDim] / Area; + const auto it = geometry->symmetryNormals[iMarker].find(iVertex); + if (it != geometry->symmetryNormals[iMarker].end()) { + for (auto iDim = 0u; iDim < nDim; iDim++) UnitNormal[iDim] = it->second[iDim]; + } else { + const su2double Area = GeometryToolbox::Norm(nDim, Normal); + if (Area < EPS) continue; + for (auto iDim = 0u; iDim < nDim; iDim++) UnitNormal[iDim] = Normal[iDim] / Area; + } su2double* sol = use_solution_old ? nodes->GetSolution_Old(iPoint) : nodes->GetSolution(iPoint); diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 362dc36a900d..1cb6a5d0c3fe 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -516,7 +516,7 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; /*--- Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ - //sol_coarse->MultigridProjectEulerWall(geo_coarse, config, true); + sol_coarse->MultigridProjectEulerWall(geo_coarse, config, true); /*--- Remove any contributions from no-slip walls. ---*/ @@ -776,7 +776,7 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } /*--- Enforce Euler wall BC by projecting velocity to tangent plane ---*/ - //sol_coarse->MultigridProjectEulerWall(geo_coarse, config, false); + sol_coarse->MultigridProjectEulerWall(geo_coarse, config, false); /*--- MPI the new interpolated solution ---*/ From 5f732495ca813bef643afbb0cb32e7a8d729ce4f Mon Sep 17 00:00:00 2001 From: bigfooted Date: Tue, 24 Mar 2026 21:24:54 +0100 Subject: [PATCH 166/229] fix for projecteulerwall --- .../include/solvers/CFVMFlowSolverBase.inl | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index 78ac7ea1c536..a8d3f25ca9db 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -3010,7 +3010,6 @@ void CFVMFlowSolverBase::MultigridProjectEulerWall(CGeometry* geo bool use_solution_old) { const auto iVel = prim_idx.Velocity(); const auto nDim = geometry->GetnDim(); - const bool grid_movement = config->GetGrid_Movement(); for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (config->GetMarker_All_KindBC(iMarker) != EULER_WALL) continue; @@ -3021,19 +3020,15 @@ void CFVMFlowSolverBase::MultigridProjectEulerWall(CGeometry* geo if (!geometry->nodes->GetDomain(iPoint)) continue; - /*--- For nodes shared by multiple Euler-wall (or symmetry) markers, - * geometry->symmetryNormals stores a Gram-Schmidt corrected normal, - * exactly as used by BC_Sym_Plane at runtime. For nodes on a single - * wall the map is empty and we fall back to the raw marker normal. - * The Gram-Schmidt orthogonalization guarantees that projecting - * sequentially through all markers (n̂₁ then n̂₂' = n̂₂ - (n̂₂·n̂₁)n̂₁) - * is correct and does not corrupt the earlier constraint. ---*/ - su2double Normal[MAXNDIM] = {0.0}, UnitNormal[MAXNDIM] = {0.0}; - geometry->vertex[iMarker][iVertex]->GetNormal(Normal); + /*--- Use the Gram-Schmidt corrected normal for nodes on intersecting walls, + * consistent with BC_Sym_Plane. Fall back to the raw marker normal otherwise. ---*/ + su2double UnitNormal[MAXNDIM] = {0.0}; const auto it = geometry->symmetryNormals[iMarker].find(iVertex); if (it != geometry->symmetryNormals[iMarker].end()) { for (auto iDim = 0u; iDim < nDim; iDim++) UnitNormal[iDim] = it->second[iDim]; } else { + su2double Normal[MAXNDIM] = {0.0}; + geometry->vertex[iMarker][iVertex]->GetNormal(Normal); const su2double Area = GeometryToolbox::Norm(nDim, Normal); if (Area < EPS) continue; for (auto iDim = 0u; iDim < nDim; iDim++) UnitNormal[iDim] = Normal[iDim] / Area; @@ -3041,17 +3036,23 @@ void CFVMFlowSolverBase::MultigridProjectEulerWall(CGeometry* geo su2double* sol = use_solution_old ? nodes->GetSolution_Old(iPoint) : nodes->GetSolution(iPoint); - /*--- Compute normal component of momentum. - * For grid movement, subtract rho*v_grid to enforce (v - v_grid).n = 0. ---*/ - su2double momentum_n = 0.0; - for (auto iDim = 0u; iDim < nDim; iDim++) momentum_n += sol[iVel + iDim] * UnitNormal[iDim]; - - if (grid_movement && !use_solution_old) { - const su2double* GridVel = geometry->nodes->GetGridVel(iPoint); - const su2double rho = sol[0]; - for (auto iDim = 0u; iDim < nDim; iDim++) momentum_n -= rho * GridVel[iDim] * UnitNormal[iDim]; + /*--- Compute normal component of the velocity / momentum vector. + * For dynamic grids subtract the grid velocity to enforce (v - v_grid).n = 0, + * multiplying by density for compressible flow (conservative variables). ---*/ + su2double gridVel[MAXNDIM] = {}; + if (dynamic_grid && !use_solution_old) { + for (auto iDim = 0u; iDim < nDim; iDim++) + gridVel[iDim] = geometry->nodes->GetGridVel(iPoint)[iDim]; + if constexpr (FlowRegime == ENUM_REGIME::COMPRESSIBLE) { + for (auto iDim = 0u; iDim < nDim; iDim++) + gridVel[iDim] *= nodes->GetDensity(iPoint); + } } + su2double momentum_n = 0.0; + for (auto iDim = 0u; iDim < nDim; iDim++) + momentum_n += (sol[iVel + iDim] - gridVel[iDim]) * UnitNormal[iDim]; + /*--- Project to tangent plane. ---*/ for (auto iDim = 0u; iDim < nDim; iDim++) sol[iVel + iDim] -= momentum_n * UnitNormal[iDim]; } From 0f91dd2312d74d2baf04ef8f313fae34b0020faf Mon Sep 17 00:00:00 2001 From: bigfooted Date: Tue, 24 Mar 2026 23:07:19 +0100 Subject: [PATCH 167/229] fix regressions --- .../multiple_ffd/naca0012/of_grad_cd.dat.ref | 4 +- .../naca0012/of_grad_directdiff.dat.ref | 4 +- TestCases/parallel_regression.py | 2 +- .../translating_NACA0012/forces_0.csv.ref | 400 +++++++++--------- .../forces_0.csv.ref | 1 - TestCases/serial_regression.py | 2 +- TestCases/tutorials.py | 2 +- 7 files changed, 207 insertions(+), 208 deletions(-) diff --git a/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref b/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref index ef515d96e63a..dcfbdc3dc263 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.0640875 , 0.001 - 1 , -0.117451 , 0.001 + 0 , 0.0640697 , 0.001 + 1 , -0.117493 , 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 ee79d7042026..d09e8e3fb047 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.06256609456 , 0.1370690627 , 0.06008351486 , 0.1144575341 , 0.0 , 0.1131195813 , 0.0 , 0.0 , 0.01961797646 , 0.0 - 1 , -0.1125985507 , 6.125966015 , -0.1182541873 , 0.2579658454 , 0.0 , 0.260484158 , 0.0 , 0.0 , 0.04918268702 , 0.0 + 0 , 0.06254154103 , 0.1373280567 , 0.06005900872 , 0.1144550943 , 0.0 , 0.1131176767 , 0.0 , 0.0 , 0.01961712845 , 0.0 + 1 , -0.1126451148 , 6.126522734 , -0.1183006714 , 0.2579616726 , 0.0 , 0.2604810003 , 0.0 , 0.0 , 0.04918121089 , 0.0 diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index eb695a4ac2a0..5dbfde3f381e 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -1093,7 +1093,7 @@ def main(): edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" edge_PPR.test_iter = 50 - edge_PPR.test_vals = [-12.063759, -5.873111, -0.000034, 0.000000] + edge_PPR.test_vals = [-12.063546, -5.872923, -0.000034, 0.000000] test_list.append(edge_PPR) # Rarefaction Q1D nozzle, include CoolProp fluid model diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index 11c6fcc7dcce..6e057e7480b8 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.90, -0.00, 0.00 -0, -2.70, 18.56, 0.00 -1, -3.88, 26.76, 0.00 -2, -4.85, 33.51, 0.00 -3, -5.75, 39.81, 0.00 -4, -6.53, 45.28, 0.00 -5, -7.16, 49.86, 0.00 -6, -7.71, 53.87, 0.00 -7, -8.14, 57.19, 0.00 -8, -8.47, 59.83, 0.00 -9, -8.70, 61.80, 0.00 -10, -8.82, 63.09, 0.00 -11, -8.88, 63.93, 0.00 -12, -8.83, 64.05, 0.00 -13, -8.66, 63.38, 0.00 -14, -8.44, 62.30, 0.00 -15, -8.15, 60.75, 0.00 -16, -7.78, 58.55, 0.00 -17, -7.34, 55.82, 0.00 -18, -6.87, 52.76, 0.00 -19, -6.34, 49.28, 0.00 -20, -5.74, 45.14, 0.00 -21, -5.12, 40.69, 0.00 -22, -4.44, 35.79, 0.00 -23, -3.72, 30.35, 0.00 -24, -2.97, 24.60, 0.00 -25, -2.22, 18.59, 0.00 -26, -1.42, 12.05, 0.00 -27, -0.60, 5.18, 0.00 -28, 0.25, -2.16, 0.00 -29, 1.09, -9.73, 0.00 -30, 1.94, -17.61, 0.00 -31, 2.77, -25.55, 0.00 -32, 3.59, -33.74, 0.00 -33, 4.39, -42.02, 0.00 -34, 5.21, -50.80, 0.00 -35, 5.98, -59.51, 0.00 -36, 6.77, -68.82, 0.00 -37, 7.47, -77.62, 0.00 -38, 8.25, -87.84, 0.00 -39, 8.93, -97.45, 0.00 -40, 9.62, -107.79, 0.00 -41, 10.04, -115.71, 0.00 -42, 10.62, -126.15, 0.00 -43, 10.98, -134.68, 0.00 -44, 11.44, -145.35, 0.00 -45, 11.41, -150.49, 0.00 -46, 11.74, -161.34, 0.00 -47, 11.66, -167.50, 0.00 -48, 12.23, -184.47, 0.00 -49, 12.60, -200.56, 0.00 -50, 13.29, -224.59, 0.00 -51, 14.02, -253.14, 0.00 -52, 14.07, -273.82, 0.00 -53, 14.42, -305.70, 0.00 -54, 13.73, -321.04, 0.00 -55, 12.97, -339.90, 0.00 -56, 11.23, -337.32, 0.00 -57, 9.63, -341.27, 0.00 -58, 7.64, -333.94, 0.00 -59, 6.52, -377.33, 0.00 -60, 5.07, -445.30, 0.00 -61, 2.40, -458.13, 0.00 -62, -0.56, -450.06, 0.00 -63, -3.46, -431.58, 0.00 -64, -6.35, -419.64, 0.00 -65, -9.13, -404.08, 0.00 -66, -11.88, -390.28, 0.00 -67, -14.53, -375.65, 0.00 -68, -17.11, -361.40, 0.00 -69, -19.47, -345.03, 0.00 -70, -21.76, -329.50, 0.00 -71, -23.82, -312.83, 0.00 -72, -25.54, -294.09, 0.00 -73, -27.11, -276.25, 0.00 -74, -28.98, -263.12, 0.00 -75, -30.15, -245.32, 0.00 -76, -30.61, -224.24, 0.00 -77, -30.96, -204.88, 0.00 -78, -31.72, -190.22, 0.00 -79, -31.11, -169.32, 0.00 -80, -30.20, -149.42, 0.00 -81, -29.46, -132.56, 0.00 -82, -27.94, -114.30, 0.00 -83, -26.09, -96.99, 0.00 -84, -23.32, -78.64, 0.00 -85, -20.97, -64.00, 0.00 -86, -16.66, -45.86, 0.00 -87, -11.05, -27.33, 0.00 -88, -7.37, -16.26, 0.00 -89, -7.53, -14.73, 0.00 -90, -10.78, -18.49, 0.00 -91, 0.04, 0.07, 0.00 -92, 14.35, 18.18, 0.00 -93, -11.03, -11.63, 0.00 -94, -36.85, -31.31, 0.00 -95, -111.90, -72.88, 0.00 -96, -71.47, -32.76, 0.00 -97, 43.99, 11.91, 0.00 -98, 46.79, 6.28, 0.00 -99, 26.05, -0.00, 0.00 -100, 19.50, -2.62, 0.00 -101, 40.78, -11.04, 0.00 -102, 4.31, -1.98, 0.00 -103, 14.87, -9.69, 0.00 -104, 5.50, -4.67, 0.00 -105, 9.60, -10.12, 0.00 -106, 0.18, -0.22, 0.00 -107, -12.03, 17.89, 0.00 -108, -20.61, 35.36, 0.00 -109, -34.02, 66.53, 0.00 -110, -40.48, 89.34, 0.00 -111, -44.68, 110.48, 0.00 -112, -46.52, 128.07, 0.00 -113, -51.71, 157.83, 0.00 -114, -54.14, 182.61, 0.00 -115, -56.81, 211.20, 0.00 -116, -57.01, 233.24, 0.00 -117, -57.98, 260.88, 0.00 -118, -57.54, 284.67, 0.00 -119, -57.12, 310.88, 0.00 -120, -55.53, 332.99, 0.00 -121, -54.08, 357.90, 0.00 -122, -51.87, 380.01, 0.00 -123, -49.70, 404.39, 0.00 -124, -46.95, 426.30, 0.00 -125, -44.17, 450.11, 0.00 -126, -41.03, 472.49, 0.00 -127, -37.67, 494.75, 0.00 -128, -34.08, 516.12, 0.00 -129, -30.33, 537.28, 0.00 -130, -26.39, 557.53, 0.00 -131, -22.34, 577.46, 0.00 -132, -18.16, 596.46, 0.00 -133, -13.92, 616.05, 0.00 -134, -9.59, 633.76, 0.00 -135, -5.22, 651.27, 0.00 -136, -0.82, 667.78, 0.00 -137, 3.58, 684.14, 0.00 -138, 7.96, 698.30, 0.00 -139, 12.32, 713.25, 0.00 -140, 16.61, 726.33, 0.00 -141, 20.82, 738.19, 0.00 -142, 24.93, 748.66, 0.00 -143, 28.92, 758.17, 0.00 -144, 32.78, 766.46, 0.00 -145, 36.50, 773.66, 0.00 -146, 40.08, 780.11, 0.00 -147, 43.50, 785.57, 0.00 -148, 46.75, 789.79, 0.00 -149, 49.83, 793.09, 0.00 -150, 52.75, 795.64, 0.00 -151, 55.54, 797.76, 0.00 -152, 58.11, 798.33, 0.00 -153, 60.54, 798.36, 0.00 -154, 62.84, 798.09, 0.00 -155, 62.45, 766.01, 0.00 -156, 66.87, 794.07, 0.00 -157, 83.10, 957.62, 0.00 -158, 50.09, 561.18, 0.00 -159, 18.09, 197.41, 0.00 -160, 8.53, 90.82, 0.00 -161, 2.36, 24.56, 0.00 -162, 1.55, 15.72, 0.00 -163, 0.35, 3.46, 0.00 -164, -0.78, -7.57, 0.00 -165, -1.00, -9.57, 0.00 -166, -1.63, -15.31, 0.00 -167, -2.08, -19.14, 0.00 -168, -2.60, -23.58, 0.00 -169, -2.86, -25.52, 0.00 -170, -3.43, -30.12, 0.00 -171, -3.88, -33.49, 0.00 -172, -4.40, -37.44, 0.00 -173, -4.74, -39.78, 0.00 -174, -5.32, -43.98, 0.00 -175, -5.82, -47.50, 0.00 -176, -6.37, -51.32, 0.00 -177, -6.79, -54.04, 0.00 -178, -7.29, -57.29, 0.00 -179, -7.70, -59.80, 0.00 -180, -8.10, -62.22, 0.00 -181, -8.42, -63.97, 0.00 -182, -8.72, -65.60, 0.00 -183, -8.96, -66.77, 0.00 -184, -9.15, -67.50, 0.00 -185, -9.27, -67.80, 0.00 -186, -9.29, -67.39, 0.00 -187, -9.27, -66.73, 0.00 -188, -9.16, -65.52, 0.00 -189, -8.94, -63.53, 0.00 -190, -8.66, -61.17, 0.00 -191, -8.27, -58.09, 0.00 -192, -7.79, -54.48, 0.00 -193, -7.21, -50.17, 0.00 -194, -6.53, -45.30, 0.00 -195, -5.72, -39.55, 0.00 -196, -4.81, -33.18, 0.00 -197, -3.80, -26.18, 0.00 -198, -2.61, -17.96, 0.00 +199, -0.88, -0.00, 0.00 +0, -2.64, 18.20, 0.00 +1, -3.78, 26.06, 0.00 +2, -4.71, 32.48, 0.00 +3, -5.55, 38.41, 0.00 +4, -6.27, 43.50, 0.00 +5, -6.86, 47.77, 0.00 +6, -7.36, 51.43, 0.00 +7, -7.76, 54.53, 0.00 +8, -8.04, 56.75, 0.00 +9, -8.21, 58.35, 0.00 +10, -8.28, 59.23, 0.00 +11, -8.31, 59.88, 0.00 +12, -8.20, 59.51, 0.00 +13, -8.03, 58.73, 0.00 +14, -7.76, 57.31, 0.00 +15, -7.45, 55.51, 0.00 +16, -7.04, 52.95, 0.00 +17, -6.61, 50.20, 0.00 +18, -6.07, 46.66, 0.00 +19, -5.52, 42.85, 0.00 +20, -4.88, 38.37, 0.00 +21, -4.23, 33.62, 0.00 +22, -3.50, 28.17, 0.00 +23, -2.75, 22.49, 0.00 +24, -1.98, 16.34, 0.00 +25, -1.22, 10.23, 0.00 +26, -0.38, 3.22, 0.00 +27, 0.45, -3.91, 0.00 +28, 1.32, -11.62, 0.00 +29, 2.14, -19.07, 0.00 +30, 2.98, -26.97, 0.00 +31, 3.82, -35.18, 0.00 +32, 4.67, -43.85, 0.00 +33, 5.43, -51.95, 0.00 +34, 6.29, -61.31, 0.00 +35, 7.12, -70.86, 0.00 +36, 7.97, -80.96, 0.00 +37, 8.71, -90.49, 0.00 +38, 9.53, -101.44, 0.00 +39, 10.27, -112.07, 0.00 +40, 10.97, -122.90, 0.00 +41, 11.45, -131.99, 0.00 +42, 12.12, -143.99, 0.00 +43, 12.65, -155.22, 0.00 +44, 13.16, -167.14, 0.00 +45, 13.35, -176.02, 0.00 +46, 13.74, -188.70, 0.00 +47, 14.17, -203.59, 0.00 +48, 14.89, -224.56, 0.00 +49, 15.95, -253.82, 0.00 +50, 16.33, -275.90, 0.00 +51, 16.78, -303.12, 0.00 +52, 16.25, -316.39, 0.00 +53, 16.09, -341.12, 0.00 +54, 14.86, -347.52, 0.00 +55, 13.58, -356.07, 0.00 +56, 11.70, -351.44, 0.00 +57, 9.42, -333.86, 0.00 +58, 7.10, -310.59, 0.00 +59, 5.48, -317.17, 0.00 +60, 4.37, -383.45, 0.00 +61, 2.26, -431.88, 0.00 +62, -0.54, -439.32, 0.00 +63, -3.45, -430.50, 0.00 +64, -6.39, -422.09, 0.00 +65, -9.10, -402.45, 0.00 +66, -11.86, -389.58, 0.00 +67, -14.53, -375.67, 0.00 +68, -17.13, -361.99, 0.00 +69, -19.52, -345.92, 0.00 +70, -21.94, -332.19, 0.00 +71, -24.12, -316.75, 0.00 +72, -25.56, -294.35, 0.00 +73, -26.57, -270.70, 0.00 +74, -28.63, -259.96, 0.00 +75, -29.92, -243.48, 0.00 +76, -30.10, -220.54, 0.00 +77, -30.85, -204.20, 0.00 +78, -31.82, -190.81, 0.00 +79, -31.07, -169.13, 0.00 +80, -29.96, -148.22, 0.00 +81, -31.28, -140.74, 0.00 +82, -30.64, -125.36, 0.00 +83, -29.47, -109.56, 0.00 +84, -26.28, -88.63, 0.00 +85, -21.05, -64.25, 0.00 +86, -15.68, -43.16, 0.00 +87, -13.45, -33.25, 0.00 +88, -6.20, -13.68, 0.00 +89, 5.71, 11.16, 0.00 +90, 9.06, 15.54, 0.00 +91, 17.22, 25.60, 0.00 +92, 24.40, 30.90, 0.00 +93, 27.19, 28.67, 0.00 +94, 46.96, 39.89, 0.00 +95, 44.13, 28.75, 0.00 +96, 60.86, 27.90, 0.00 +97, -29.71, -8.04, 0.00 +98, -9.82, -1.32, 0.00 +99, -11.98, 0.00, 0.00 +100, -54.39, 7.30, 0.00 +101, 58.60, -15.86, 0.00 +102, 22.56, -10.34, 0.00 +103, -9.64, 6.28, 0.00 +104, -23.10, 19.63, 0.00 +105, -20.84, 21.97, 0.00 +106, -37.60, 47.62, 0.00 +107, -41.76, 62.08, 0.00 +108, -52.55, 90.16, 0.00 +109, -52.03, 101.76, 0.00 +110, -55.27, 121.98, 0.00 +111, -58.04, 143.50, 0.00 +112, -58.56, 161.24, 0.00 +113, -59.32, 181.07, 0.00 +114, -61.86, 208.64, 0.00 +115, -63.16, 234.80, 0.00 +116, -62.65, 256.34, 0.00 +117, -61.98, 278.86, 0.00 +118, -61.63, 304.87, 0.00 +119, -60.75, 330.64, 0.00 +120, -59.20, 354.99, 0.00 +121, -56.96, 376.96, 0.00 +122, -54.92, 402.29, 0.00 +123, -52.19, 424.64, 0.00 +124, -49.25, 447.14, 0.00 +125, -46.03, 469.03, 0.00 +126, -42.60, 490.65, 0.00 +127, -38.98, 511.86, 0.00 +128, -35.24, 533.61, 0.00 +129, -31.36, 555.55, 0.00 +130, -27.26, 575.85, 0.00 +131, -23.03, 595.40, 0.00 +132, -18.70, 614.30, 0.00 +133, -14.30, 632.66, 0.00 +134, -9.83, 649.73, 0.00 +135, -5.34, 666.00, 0.00 +136, -0.84, 682.01, 0.00 +137, 3.65, 698.18, 0.00 +138, 8.11, 712.12, 0.00 +139, 12.55, 726.75, 0.00 +140, 16.91, 739.41, 0.00 +141, 21.17, 750.34, 0.00 +142, 25.33, 760.67, 0.00 +143, 29.37, 769.86, 0.00 +144, 33.29, 778.46, 0.00 +145, 37.10, 786.48, 0.00 +146, 40.72, 792.62, 0.00 +147, 44.17, 797.77, 0.00 +148, 47.46, 801.91, 0.00 +149, 50.64, 806.05, 0.00 +150, 53.59, 808.20, 0.00 +151, 56.40, 810.08, 0.00 +152, 58.95, 809.80, 0.00 +153, 61.47, 810.66, 0.00 +154, 63.53, 806.82, 0.00 +155, 63.70, 781.30, 0.00 +156, 68.96, 818.90, 0.00 +157, 83.23, 959.06, 0.00 +158, 34.53, 386.82, 0.00 +159, 19.02, 207.51, 0.00 +160, 16.91, 179.97, 0.00 +161, 8.60, 89.43, 0.00 +162, 7.79, 79.14, 0.00 +163, 6.07, 60.40, 0.00 +164, 5.17, 50.40, 0.00 +165, 3.42, 32.67, 0.00 +166, 2.70, 25.34, 0.00 +167, 1.63, 15.03, 0.00 +168, 0.94, 8.54, 0.00 +169, 0.21, 1.91, 0.00 +170, -0.51, -4.49, 0.00 +171, -1.29, -11.16, 0.00 +172, -1.99, -16.91, 0.00 +173, -2.51, -21.03, 0.00 +174, -3.16, -26.17, 0.00 +175, -3.77, -30.78, 0.00 +176, -4.41, -35.57, 0.00 +177, -4.94, -39.31, 0.00 +178, -5.52, -43.38, 0.00 +179, -6.01, -46.68, 0.00 +180, -6.52, -50.10, 0.00 +181, -6.90, -52.43, 0.00 +182, -7.30, -54.88, 0.00 +183, -7.62, -56.74, 0.00 +184, -7.92, -58.49, 0.00 +185, -8.09, -59.17, 0.00 +186, -8.25, -59.85, 0.00 +187, -8.28, -59.64, 0.00 +188, -8.28, -59.20, 0.00 +189, -8.19, -58.17, 0.00 +190, -8.01, -56.55, 0.00 +191, -7.70, -54.11, 0.00 +192, -7.31, -51.11, 0.00 +193, -6.80, -47.31, 0.00 +194, -6.20, -43.02, 0.00 +195, -5.46, -37.79, 0.00 +196, -4.63, -31.97, 0.00 +197, -3.69, -25.46, 0.00 +198, -2.57, -17.71, 0.00 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 844299f3310e..eafe528ad58f 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 @@ -198,4 +198,3 @@ 196, -4.74, -32.69, 0.00 197, -3.75, -25.87, 0.00 198, -2.59, -17.84, 0.00 - diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 156fabe51768..088dc2086ac1 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -1092,7 +1092,7 @@ def main(): airfoilRBF.cfg_file = "config.cfg" airfoilRBF.test_iter = 1 - airfoilRBF.test_vals = [1.000000, 0.109856, -3.384244] + airfoilRBF.test_vals = [1.000000, 0.112689, -3.382129] airfoilRBF.tol = 0.0001 airfoilRBF.multizone = True test_list.append(airfoilRBF) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index f117b092c2a5..9b275dd808de 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -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.261695, 0.083515] + tutorial_inv_onera.test_vals = [-5.204928, -4.597762, 0.262596, 0.084044] tutorial_inv_onera.no_restart = True test_list.append(tutorial_inv_onera) From 5bf1969de488116c1109a9b1771d312a22b87cdd Mon Sep 17 00:00:00 2001 From: bigfooted Date: Wed, 25 Mar 2026 07:48:18 +0100 Subject: [PATCH 168/229] lower CFL --- .../py_wrapper/updated_moving_frame_NACA12/config.cfg | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg b/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg index 7417a173e403..5806f25e7d0a 100644 --- a/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg +++ b/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg @@ -50,16 +50,16 @@ VENKAT_LIMITER_COEFF= 0.1 % SOLUTION ACCELERATION % -CFL_NUMBER= 1e3 +CFL_NUMBER= 100 CFL_ADAPT= NO % MGLEVEL= 3 MGCYCLE= V_CYCLE MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.7 -MG_DAMP_PROLONGATION= 0.7 +MG_POST_SMOOTH= ( 1, 1, 1, 1 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU From 4cb43e55c55b3e0280415f851adce38e72685e04 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 28 Mar 2026 00:12:47 +0100 Subject: [PATCH 169/229] cleanup --- Common/src/geometry/CMultiGridGeometry.cpp | 15 +++------------ SU2_CFD/src/integration/CMultiGridIntegration.cpp | 2 -- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index f6c99d4a4551..6887a4521559 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -160,6 +160,7 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un euler_wall_agglomerated[marker_seed[0]]++; } } + /*--- Note that if the (single) marker is a SEND_RECEIVE, then the node is actually an interior point. In that case it can only be agglomerated with another interior point. ---*/ if (config->GetMarker_All_KindBC(marker_seed[0]) == SEND_RECEIVE) { @@ -611,26 +612,17 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Only increment by the number of parents that will actually be used ---*/ Index_CoarseCV += nUsedParents; - /*--- Debug counters ---*/ - unsigned long nSkipped = 0, nSuccess = 0; - /*--- Create the final structure ---*/ for (auto iVertex = 0ul; iVertex < nVertexR; iVertex++) { const auto iPoint_Fine = Children_Local[iVertex]; /*--- Skip if this halo point was already agglomerated (first-wins policy) ---*/ auto existing_parent = fine_grid->nodes->GetParent_CV(iPoint_Fine); - if (existing_parent != std::numeric_limits::max()) { - nSkipped++; - continue; // First-wins: keep existing assignment - } + if (existing_parent != std::numeric_limits::max()) continue; /*--- Skip if parent mapping is invalid (sender didn't agglomerate) ---*/ const auto iPoint_Coarse = Parent_Local[iVertex]; - if (iPoint_Coarse == std::numeric_limits::max()) { - nSkipped++; - continue; - } + if (iPoint_Coarse == std::numeric_limits::max()) continue; /*--- Append to existing children, don't overwrite ---*/ auto existing_children_count = nodes->GetnChildren_CV(iPoint_Coarse); @@ -639,7 +631,6 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un nodes->SetChildren_CV(iPoint_Coarse, existing_children_count, iPoint_Fine); nodes->SetnChildren_CV(iPoint_Coarse, existing_children_count + 1); nodes->SetDomain(iPoint_Coarse, false); - nSuccess++; } } } diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 1cb6a5d0c3fe..93960cd58f6a 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -576,14 +576,12 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ for (auto iSmooth = 0u; iSmooth < val_nSmooth; iSmooth++) { /*--- Loop over all mesh points (sum the residuals of direct neighbors). ---*/ - /*--- Use static scheduling to ensure deterministic iteration order for reproducibility ---*/ SU2_OMP_FOR_STAT(roundUpDiv(geometry->GetnPoint(), omp_get_num_threads())) for (auto iPoint = 0ul; iPoint < geometry->GetnPoint(); ++iPoint) { solver->GetNodes()->SetResidualSumZero(iPoint); - /*--- Sum neighbor contributions in deterministic order ---*/ for (auto iNeigh = 0u; iNeigh < geometry->nodes->GetnPoint(iPoint); ++iNeigh) { auto jPoint = geometry->nodes->GetPoint(iPoint, iNeigh); Residual_j = solver->LinSysRes.GetBlock(jPoint); From 07993dd4c71b54866b0f75781ee715c095af6ab3 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 28 Mar 2026 00:15:42 +0100 Subject: [PATCH 170/229] temporarily comment euler wall curvature agglomeration --- Common/src/geometry/CMultiGridGeometry.cpp | 29 ++++++++++--------- .../src/integration/CMultiGridIntegration.cpp | 4 +-- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 6887a4521559..76dd4a106e7c 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -145,20 +145,21 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Euler walls: check curvature-based agglomeration criterion ---*/ if (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL) { /*--- Allow agglomeration if marker is straight OR local curvature is small ---*/ - if (!boundIsStraight[marker_seed[0]]) { - /*--- Compute local curvature at this point ---*/ - su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, marker_seed[0]); - // limit to 45 degrees - if (local_curvature >= 45.0) { - agglomerate_seed = false; // High curvature: do not agglomerate - euler_wall_rejected_curvature[marker_seed[0]]++; - } else { - euler_wall_agglomerated[marker_seed[0]]++; - } - } else { - /*--- Straight wall: agglomerate ---*/ - euler_wall_agglomerated[marker_seed[0]]++; - } + //if (!boundIsStraight[marker_seed[0]]) { + // /*--- Compute local curvature at this point ---*/ + // su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, marker_seed[0]); + // // limit to 45 degrees + // if (local_curvature >= 45.0) { + // agglomerate_seed = false; // High curvature: do not agglomerate + // euler_wall_rejected_curvature[marker_seed[0]]++; + // } else { + // euler_wall_agglomerated[marker_seed[0]]++; + // } + //} else { + // /*--- Straight wall: agglomerate ---*/ + // euler_wall_agglomerated[marker_seed[0]]++; + //} + agglomerate_seed = false; } /*--- Note that if the (single) marker is a SEND_RECEIVE, then the node is actually an interior point. diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 93960cd58f6a..fedd27b3f7b9 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -516,7 +516,7 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; /*--- Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ - sol_coarse->MultigridProjectEulerWall(geo_coarse, config, true); + //sol_coarse->MultigridProjectEulerWall(geo_coarse, config, true); /*--- Remove any contributions from no-slip walls. ---*/ @@ -774,7 +774,7 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } /*--- Enforce Euler wall BC by projecting velocity to tangent plane ---*/ - sol_coarse->MultigridProjectEulerWall(geo_coarse, config, false); + //sol_coarse->MultigridProjectEulerWall(geo_coarse, config, false); /*--- MPI the new interpolated solution ---*/ From 46c7b62be4bed4aa853c7c9f1085223d198a2bf6 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Fri, 27 Mar 2026 22:39:57 -0700 Subject: [PATCH 171/229] ordered reduction for dot products --- Common/include/linear_algebra/CSysVector.hpp | 35 ++++++++++++-------- Common/src/linear_algebra/CSysVector.cpp | 4 +++ 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Common/include/linear_algebra/CSysVector.hpp b/Common/include/linear_algebra/CSysVector.hpp index 4d7768971be9..1639d053c087 100644 --- a/Common/include/linear_algebra/CSysVector.hpp +++ b/Common/include/linear_algebra/CSysVector.hpp @@ -28,6 +28,8 @@ #pragma once +#include + #include "../parallelization/mpi_structure.hpp" #include "../parallelization/omp_structure.hpp" #include "../parallelization/vectorization.hpp" @@ -75,6 +77,13 @@ class CSysVector : public VecExpr::CVecExpr, ScalarType> ScalarType* d_vec_val = nullptr; /*!< \brief Device Pointer to store the vector values on the GPU. */ +#ifdef HAVE_OMP + mutable std::unique_ptr + dot_scratch; /*!< \brief Stores partial sums for ordered reduction over OMP threads. */ +#else + mutable std::array dot_scratch; +#endif + /*! * \brief Generic initialization from a scalar or array. * \note If val==nullptr vec_val is not initialized, only allocated. @@ -166,6 +175,7 @@ class CSysVector : public VecExpr::CVecExpr, ScalarType> std::swap(nElm, other.nElm); std::swap(nElmDomain, other.nElmDomain); std::swap(nVar, other.nVar); + std::swap(dot_scratch, other.dot_scratch); } /*! @@ -333,9 +343,8 @@ class CSysVector : public VecExpr::CVecExpr, ScalarType> */ template ScalarType dot(const VecExpr::CVecExpr& expr) const { - static ScalarType dotRes; - /*--- All threads get the same "view" of the vectors and shared variable. ---*/ - SU2_OMP_SAFE_GLOBAL_ACCESS(dotRes = 0.0;) + /*--- All threads get the same "view" of the vectors. ---*/ + SU2_OMP_BARRIER /*--- Local dot product for each thread. ---*/ ScalarType sum = 0.0; @@ -346,23 +355,21 @@ class CSysVector : public VecExpr::CVecExpr, ScalarType> } END_CSYSVEC_PARFOR - /*--- Update shared variable with "our" partial sum. ---*/ - atomicAdd(sum, dotRes); + dot_scratch[omp_get_thread_num()] = sum; -#ifdef HAVE_MPI - /*--- Reduce across all mpi ranks, only master thread communicates. ---*/ BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { - sum = dotRes; + /*--- Reduce over all threads in an ordered way to ensure a deterministic result. ---*/ + for (int i = 1; i < omp_get_num_threads(); ++i) sum += dot_scratch[i]; +#ifdef HAVE_MPI + /*--- Reduce across all mpi ranks, only the master thread communicates. ---*/ const auto mpi_type = (sizeof(ScalarType) < sizeof(double)) ? MPI_FLOAT : MPI_DOUBLE; - SelectMPIWrapper::W::Allreduce(&sum, &dotRes, 1, mpi_type, MPI_SUM, SU2_MPI::GetComm()); + SelectMPIWrapper::W::Allreduce(&sum, &dot_scratch[0], 1, mpi_type, MPI_SUM, SU2_MPI::GetComm()); +#endif } - END_SU2_OMP_SAFE_GLOBAL_ACCESS -#else /*--- Make view of result consistent across threads. ---*/ - SU2_OMP_BARRIER -#endif + END_SU2_OMP_SAFE_GLOBAL_ACCESS - return dotRes; + return dot_scratch[0]; } /*! diff --git a/Common/src/linear_algebra/CSysVector.cpp b/Common/src/linear_algebra/CSysVector.cpp index f3f682d54fe5..d14a63b52bf2 100644 --- a/Common/src/linear_algebra/CSysVector.cpp +++ b/Common/src/linear_algebra/CSysVector.cpp @@ -54,6 +54,10 @@ void CSysVector::Initialize(unsigned long numBlk, unsigned long numB d_vec_val = GPUMemoryAllocation::gpu_alloc(nElm * sizeof(ScalarType)); +#ifdef HAVE_OMP + dot_scratch.reset(new ScalarType[omp_get_max_threads()]); +#endif + if (val != nullptr) { if (!valIsArray) { for (auto i = 0ul; i < nElm; i++) vec_val[i] = *val; From 91dec2f1d145c0967d2779530cd0e034a7278b77 Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 28 Mar 2026 08:41:43 +0100 Subject: [PATCH 172/229] uncomment euler wall agglomeration --- Common/src/geometry/CMultiGridGeometry.cpp | 29 +++++++++---------- .../src/integration/CMultiGridIntegration.cpp | 4 +-- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 76dd4a106e7c..6887a4521559 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -145,21 +145,20 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- Euler walls: check curvature-based agglomeration criterion ---*/ if (config->GetMarker_All_KindBC(marker_seed[0]) == EULER_WALL) { /*--- Allow agglomeration if marker is straight OR local curvature is small ---*/ - //if (!boundIsStraight[marker_seed[0]]) { - // /*--- Compute local curvature at this point ---*/ - // su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, marker_seed[0]); - // // limit to 45 degrees - // if (local_curvature >= 45.0) { - // agglomerate_seed = false; // High curvature: do not agglomerate - // euler_wall_rejected_curvature[marker_seed[0]]++; - // } else { - // euler_wall_agglomerated[marker_seed[0]]++; - // } - //} else { - // /*--- Straight wall: agglomerate ---*/ - // euler_wall_agglomerated[marker_seed[0]]++; - //} - agglomerate_seed = false; + if (!boundIsStraight[marker_seed[0]]) { + /*--- Compute local curvature at this point ---*/ + su2double local_curvature = ComputeLocalCurvature(fine_grid, iPoint, marker_seed[0]); + // limit to 45 degrees + if (local_curvature >= 45.0) { + agglomerate_seed = false; // High curvature: do not agglomerate + euler_wall_rejected_curvature[marker_seed[0]]++; + } else { + euler_wall_agglomerated[marker_seed[0]]++; + } + } else { + /*--- Straight wall: agglomerate ---*/ + euler_wall_agglomerated[marker_seed[0]]++; + } } /*--- Note that if the (single) marker is a SEND_RECEIVE, then the node is actually an interior point. diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index fedd27b3f7b9..93960cd58f6a 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -516,7 +516,7 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS delete [] Solution; /*--- Enforce Euler wall BC on corrections by projecting to tangent plane ---*/ - //sol_coarse->MultigridProjectEulerWall(geo_coarse, config, true); + sol_coarse->MultigridProjectEulerWall(geo_coarse, config, true); /*--- Remove any contributions from no-slip walls. ---*/ @@ -774,7 +774,7 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst } /*--- Enforce Euler wall BC by projecting velocity to tangent plane ---*/ - //sol_coarse->MultigridProjectEulerWall(geo_coarse, config, false); + sol_coarse->MultigridProjectEulerWall(geo_coarse, config, false); /*--- MPI the new interpolated solution ---*/ From f707230ac5630513465941a6faf5fdc18ac12b6d Mon Sep 17 00:00:00 2001 From: bigfooted Date: Sat, 28 Mar 2026 13:18:34 +0100 Subject: [PATCH 173/229] update regression --- .../translating_NACA0012/forces_0.csv.ref | 398 ++++++++--------- .../forces_0.csv.ref | 400 +++++++++--------- 2 files changed, 399 insertions(+), 399 deletions(-) diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index 6e057e7480b8..542d13f1d126 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.88, -0.00, 0.00 -0, -2.64, 18.20, 0.00 -1, -3.78, 26.06, 0.00 -2, -4.71, 32.48, 0.00 -3, -5.55, 38.41, 0.00 -4, -6.27, 43.50, 0.00 -5, -6.86, 47.77, 0.00 -6, -7.36, 51.43, 0.00 -7, -7.76, 54.53, 0.00 -8, -8.04, 56.75, 0.00 -9, -8.21, 58.35, 0.00 -10, -8.28, 59.23, 0.00 -11, -8.31, 59.88, 0.00 -12, -8.20, 59.51, 0.00 -13, -8.03, 58.73, 0.00 -14, -7.76, 57.31, 0.00 -15, -7.45, 55.51, 0.00 -16, -7.04, 52.95, 0.00 -17, -6.61, 50.20, 0.00 -18, -6.07, 46.66, 0.00 -19, -5.52, 42.85, 0.00 -20, -4.88, 38.37, 0.00 -21, -4.23, 33.62, 0.00 -22, -3.50, 28.17, 0.00 -23, -2.75, 22.49, 0.00 -24, -1.98, 16.34, 0.00 -25, -1.22, 10.23, 0.00 -26, -0.38, 3.22, 0.00 -27, 0.45, -3.91, 0.00 -28, 1.32, -11.62, 0.00 -29, 2.14, -19.07, 0.00 -30, 2.98, -26.97, 0.00 -31, 3.82, -35.18, 0.00 -32, 4.67, -43.85, 0.00 -33, 5.43, -51.95, 0.00 -34, 6.29, -61.31, 0.00 -35, 7.12, -70.86, 0.00 -36, 7.97, -80.96, 0.00 -37, 8.71, -90.49, 0.00 -38, 9.53, -101.44, 0.00 -39, 10.27, -112.07, 0.00 -40, 10.97, -122.90, 0.00 -41, 11.45, -131.99, 0.00 -42, 12.12, -143.99, 0.00 -43, 12.65, -155.22, 0.00 -44, 13.16, -167.14, 0.00 -45, 13.35, -176.02, 0.00 -46, 13.74, -188.70, 0.00 -47, 14.17, -203.59, 0.00 -48, 14.89, -224.56, 0.00 -49, 15.95, -253.82, 0.00 -50, 16.33, -275.90, 0.00 -51, 16.78, -303.12, 0.00 -52, 16.25, -316.39, 0.00 -53, 16.09, -341.12, 0.00 -54, 14.86, -347.52, 0.00 -55, 13.58, -356.07, 0.00 -56, 11.70, -351.44, 0.00 -57, 9.42, -333.86, 0.00 -58, 7.10, -310.59, 0.00 -59, 5.48, -317.17, 0.00 -60, 4.37, -383.45, 0.00 -61, 2.26, -431.88, 0.00 -62, -0.54, -439.32, 0.00 -63, -3.45, -430.50, 0.00 -64, -6.39, -422.09, 0.00 -65, -9.10, -402.45, 0.00 -66, -11.86, -389.58, 0.00 -67, -14.53, -375.67, 0.00 -68, -17.13, -361.99, 0.00 -69, -19.52, -345.92, 0.00 -70, -21.94, -332.19, 0.00 -71, -24.12, -316.75, 0.00 -72, -25.56, -294.35, 0.00 -73, -26.57, -270.70, 0.00 -74, -28.63, -259.96, 0.00 -75, -29.92, -243.48, 0.00 -76, -30.10, -220.54, 0.00 -77, -30.85, -204.20, 0.00 -78, -31.82, -190.81, 0.00 -79, -31.07, -169.13, 0.00 -80, -29.96, -148.22, 0.00 -81, -31.28, -140.74, 0.00 -82, -30.64, -125.36, 0.00 -83, -29.47, -109.56, 0.00 -84, -26.28, -88.63, 0.00 -85, -21.05, -64.25, 0.00 -86, -15.68, -43.16, 0.00 -87, -13.45, -33.25, 0.00 -88, -6.20, -13.68, 0.00 -89, 5.71, 11.16, 0.00 -90, 9.06, 15.54, 0.00 -91, 17.22, 25.60, 0.00 -92, 24.40, 30.90, 0.00 -93, 27.19, 28.67, 0.00 -94, 46.96, 39.89, 0.00 -95, 44.13, 28.75, 0.00 -96, 60.86, 27.90, 0.00 -97, -29.71, -8.04, 0.00 -98, -9.82, -1.32, 0.00 -99, -11.98, 0.00, 0.00 -100, -54.39, 7.30, 0.00 -101, 58.60, -15.86, 0.00 -102, 22.56, -10.34, 0.00 -103, -9.64, 6.28, 0.00 -104, -23.10, 19.63, 0.00 -105, -20.84, 21.97, 0.00 -106, -37.60, 47.62, 0.00 -107, -41.76, 62.08, 0.00 -108, -52.55, 90.16, 0.00 -109, -52.03, 101.76, 0.00 -110, -55.27, 121.98, 0.00 -111, -58.04, 143.50, 0.00 -112, -58.56, 161.24, 0.00 -113, -59.32, 181.07, 0.00 -114, -61.86, 208.64, 0.00 -115, -63.16, 234.80, 0.00 -116, -62.65, 256.34, 0.00 -117, -61.98, 278.86, 0.00 -118, -61.63, 304.87, 0.00 -119, -60.75, 330.64, 0.00 -120, -59.20, 354.99, 0.00 -121, -56.96, 376.96, 0.00 -122, -54.92, 402.29, 0.00 -123, -52.19, 424.64, 0.00 -124, -49.25, 447.14, 0.00 -125, -46.03, 469.03, 0.00 -126, -42.60, 490.65, 0.00 -127, -38.98, 511.86, 0.00 -128, -35.24, 533.61, 0.00 -129, -31.36, 555.55, 0.00 -130, -27.26, 575.85, 0.00 -131, -23.03, 595.40, 0.00 -132, -18.70, 614.30, 0.00 -133, -14.30, 632.66, 0.00 -134, -9.83, 649.73, 0.00 -135, -5.34, 666.00, 0.00 -136, -0.84, 682.01, 0.00 -137, 3.65, 698.18, 0.00 -138, 8.11, 712.12, 0.00 -139, 12.55, 726.75, 0.00 -140, 16.91, 739.41, 0.00 -141, 21.17, 750.34, 0.00 -142, 25.33, 760.67, 0.00 -143, 29.37, 769.86, 0.00 -144, 33.29, 778.46, 0.00 -145, 37.10, 786.48, 0.00 -146, 40.72, 792.62, 0.00 -147, 44.17, 797.77, 0.00 -148, 47.46, 801.91, 0.00 -149, 50.64, 806.05, 0.00 -150, 53.59, 808.20, 0.00 -151, 56.40, 810.08, 0.00 -152, 58.95, 809.80, 0.00 -153, 61.47, 810.66, 0.00 -154, 63.53, 806.82, 0.00 -155, 63.70, 781.30, 0.00 -156, 68.96, 818.90, 0.00 -157, 83.23, 959.06, 0.00 -158, 34.53, 386.82, 0.00 -159, 19.02, 207.51, 0.00 -160, 16.91, 179.97, 0.00 -161, 8.60, 89.43, 0.00 -162, 7.79, 79.14, 0.00 -163, 6.07, 60.40, 0.00 -164, 5.17, 50.40, 0.00 -165, 3.42, 32.67, 0.00 -166, 2.70, 25.34, 0.00 -167, 1.63, 15.03, 0.00 -168, 0.94, 8.54, 0.00 -169, 0.21, 1.91, 0.00 -170, -0.51, -4.49, 0.00 -171, -1.29, -11.16, 0.00 -172, -1.99, -16.91, 0.00 -173, -2.51, -21.03, 0.00 -174, -3.16, -26.17, 0.00 -175, -3.77, -30.78, 0.00 -176, -4.41, -35.57, 0.00 -177, -4.94, -39.31, 0.00 -178, -5.52, -43.38, 0.00 -179, -6.01, -46.68, 0.00 -180, -6.52, -50.10, 0.00 -181, -6.90, -52.43, 0.00 -182, -7.30, -54.88, 0.00 -183, -7.62, -56.74, 0.00 -184, -7.92, -58.49, 0.00 -185, -8.09, -59.17, 0.00 -186, -8.25, -59.85, 0.00 -187, -8.28, -59.64, 0.00 -188, -8.28, -59.20, 0.00 -189, -8.19, -58.17, 0.00 -190, -8.01, -56.55, 0.00 -191, -7.70, -54.11, 0.00 -192, -7.31, -51.11, 0.00 -193, -6.80, -47.31, 0.00 -194, -6.20, -43.02, 0.00 -195, -5.46, -37.79, 0.00 -196, -4.63, -31.97, 0.00 -197, -3.69, -25.46, 0.00 -198, -2.57, -17.71, 0.00 +0, -2.67, 18.39, 0.00 +1, -3.79, 26.10, 0.00 +2, -4.70, 32.45, 0.00 +3, -5.54, 38.34, 0.00 +4, -6.26, 43.40, 0.00 +5, -6.83, 47.52, 0.00 +6, -7.31, 51.12, 0.00 +7, -7.71, 54.13, 0.00 +8, -7.98, 56.36, 0.00 +9, -8.14, 57.85, 0.00 +10, -8.21, 58.69, 0.00 +11, -8.24, 59.34, 0.00 +12, -8.13, 59.02, 0.00 +13, -7.94, 58.09, 0.00 +14, -7.68, 56.68, 0.00 +15, -7.37, 54.90, 0.00 +16, -6.96, 52.39, 0.00 +17, -6.52, 49.56, 0.00 +18, -5.99, 46.04, 0.00 +19, -5.45, 42.32, 0.00 +20, -4.83, 37.98, 0.00 +21, -4.18, 33.24, 0.00 +22, -3.46, 27.88, 0.00 +23, -2.72, 22.22, 0.00 +24, -1.96, 16.24, 0.00 +25, -1.22, 10.20, 0.00 +26, -0.37, 3.17, 0.00 +27, 0.46, -3.95, 0.00 +28, 1.32, -11.54, 0.00 +29, 2.11, -18.78, 0.00 +30, 2.93, -26.51, 0.00 +31, 3.74, -34.50, 0.00 +32, 4.58, -42.97, 0.00 +33, 5.31, -50.75, 0.00 +34, 6.16, -60.02, 0.00 +35, 6.96, -69.23, 0.00 +36, 7.79, -79.18, 0.00 +37, 8.49, -88.24, 0.00 +38, 9.31, -99.04, 0.00 +39, 10.00, -109.14, 0.00 +40, 10.71, -119.95, 0.00 +41, 11.15, -128.44, 0.00 +42, 11.87, -141.00, 0.00 +43, 12.46, -152.82, 0.00 +44, 13.05, -165.68, 0.00 +45, 13.36, -176.13, 0.00 +46, 13.74, -188.72, 0.00 +47, 14.04, -201.70, 0.00 +48, 14.40, -217.16, 0.00 +49, 14.62, -232.68, 0.00 +50, 14.76, -249.30, 0.00 +51, 14.87, -268.47, 0.00 +52, 14.58, -283.81, 0.00 +53, 14.45, -306.34, 0.00 +54, 13.71, -320.59, 0.00 +55, 12.92, -338.59, 0.00 +56, 11.24, -337.52, 0.00 +57, 9.40, -333.11, 0.00 +58, 7.49, -327.34, 0.00 +59, 6.54, -378.95, 0.00 +60, 5.15, -451.70, 0.00 +61, 2.42, -462.33, 0.00 +62, -0.56, -454.47, 0.00 +63, -3.51, -437.34, 0.00 +64, -6.46, -426.71, 0.00 +65, -9.20, -407.04, 0.00 +66, -11.99, -393.94, 0.00 +67, -14.66, -379.06, 0.00 +68, -17.19, -363.19, 0.00 +69, -19.48, -345.11, 0.00 +70, -21.73, -329.12, 0.00 +71, -23.63, -310.27, 0.00 +72, -25.13, -289.40, 0.00 +73, -26.10, -265.91, 0.00 +74, -27.83, -252.70, 0.00 +75, -28.86, -234.86, 0.00 +76, -29.42, -215.52, 0.00 +77, -28.58, -189.15, 0.00 +78, -29.03, -174.07, 0.00 +79, -28.32, -154.17, 0.00 +80, -27.54, -136.23, 0.00 +81, -26.12, -117.53, 0.00 +82, -25.36, -103.75, 0.00 +83, -24.89, -92.52, 0.00 +84, -23.34, -78.71, 0.00 +85, -21.24, -64.82, 0.00 +86, -14.20, -39.11, 0.00 +87, -11.57, -28.61, 0.00 +88, -2.44, -5.38, 0.00 +89, 7.65, 14.96, 0.00 +90, 12.16, 20.85, 0.00 +91, 23.73, 35.28, 0.00 +92, 23.23, 29.42, 0.00 +93, 36.16, 38.12, 0.00 +94, 49.31, 41.89, 0.00 +95, 30.26, 19.71, 0.00 +96, 48.43, 22.20, 0.00 +97, 40.70, 11.01, 0.00 +98, 11.92, 1.60, 0.00 +99, 30.54, -0.00, 0.00 +100, 24.05, -3.23, 0.00 +101, 54.99, -14.88, 0.00 +102, 15.54, -7.12, 0.00 +103, -17.50, 11.40, 0.00 +104, -24.54, 20.85, 0.00 +105, -24.69, 26.03, 0.00 +106, -41.95, 53.13, 0.00 +107, -47.40, 70.46, 0.00 +108, -56.86, 97.56, 0.00 +109, -51.67, 101.05, 0.00 +110, -56.97, 125.74, 0.00 +111, -56.02, 138.50, 0.00 +112, -54.86, 151.04, 0.00 +113, -55.26, 168.69, 0.00 +114, -59.25, 199.83, 0.00 +115, -60.58, 225.21, 0.00 +116, -60.47, 247.41, 0.00 +117, -59.92, 269.58, 0.00 +118, -59.43, 294.00, 0.00 +119, -58.44, 318.08, 0.00 +120, -56.74, 340.20, 0.00 +121, -55.10, 364.65, 0.00 +122, -52.85, 387.19, 0.00 +123, -50.28, 409.17, 0.00 +124, -47.47, 430.99, 0.00 +125, -44.69, 455.36, 0.00 +126, -41.46, 477.47, 0.00 +127, -38.06, 499.80, 0.00 +128, -34.43, 521.44, 0.00 +129, -30.72, 544.23, 0.00 +130, -26.73, 564.60, 0.00 +131, -22.61, 584.47, 0.00 +132, -18.37, 603.28, 0.00 +133, -14.09, 623.31, 0.00 +134, -9.69, 640.38, 0.00 +135, -5.27, 657.77, 0.00 +136, -0.83, 673.72, 0.00 +137, 3.62, 691.31, 0.00 +138, 8.04, 705.16, 0.00 +139, 12.44, 720.48, 0.00 +140, 16.77, 733.03, 0.00 +141, 21.01, 744.66, 0.00 +142, 25.13, 754.73, 0.00 +143, 29.14, 763.81, 0.00 +144, 33.02, 771.98, 0.00 +145, 36.80, 780.20, 0.00 +146, 40.40, 786.36, 0.00 +147, 43.83, 791.56, 0.00 +148, 47.08, 795.50, 0.00 +149, 50.26, 799.95, 0.00 +150, 53.19, 802.25, 0.00 +151, 56.05, 805.05, 0.00 +152, 58.58, 804.66, 0.00 +153, 60.89, 803.02, 0.00 +154, 62.81, 797.64, 0.00 +155, 63.58, 779.88, 0.00 +156, 70.83, 841.11, 0.00 +157, 73.83, 850.73, 0.00 +158, 26.45, 296.32, 0.00 +159, 20.38, 222.34, 0.00 +160, 18.50, 196.84, 0.00 +161, 8.19, 85.12, 0.00 +162, 6.54, 66.45, 0.00 +163, 4.60, 45.80, 0.00 +164, 3.51, 34.20, 0.00 +165, 2.46, 23.51, 0.00 +166, 1.74, 16.30, 0.00 +167, 0.83, 7.65, 0.00 +168, 0.12, 1.08, 0.00 +169, -0.46, -4.14, 0.00 +170, -1.22, -10.66, 0.00 +171, -1.90, -16.42, 0.00 +172, -2.60, -22.10, 0.00 +173, -3.04, -25.51, 0.00 +174, -3.69, -30.53, 0.00 +175, -4.27, -34.83, 0.00 +176, -4.93, -39.70, 0.00 +177, -5.37, -42.70, 0.00 +178, -5.93, -46.60, 0.00 +179, -6.37, -49.51, 0.00 +180, -6.88, -52.82, 0.00 +181, -7.24, -55.06, 0.00 +182, -7.61, -57.23, 0.00 +183, -7.90, -58.87, 0.00 +184, -8.18, -60.37, 0.00 +185, -8.31, -60.83, 0.00 +186, -8.44, -61.22, 0.00 +187, -8.44, -60.79, 0.00 +188, -8.43, -60.25, 0.00 +189, -8.31, -59.05, 0.00 +190, -8.10, -57.18, 0.00 +191, -7.75, -54.46, 0.00 +192, -7.33, -51.26, 0.00 +193, -6.81, -47.41, 0.00 +194, -6.19, -42.96, 0.00 +195, -5.43, -37.58, 0.00 +196, -4.59, -31.65, 0.00 +197, -3.64, -25.11, 0.00 +198, -2.52, -17.37, 0.00 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 eafe528ad58f..5f1ec6e4b041 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, -1.00, -0.00, 0.00 -0, -2.64, 18.17, 0.00 -1, -3.78, 26.02, 0.00 -2, -4.77, 32.94, 0.00 -3, -5.65, 39.09, 0.00 -4, -6.42, 44.56, 0.00 -5, -7.03, 48.94, 0.00 -6, -7.56, 52.82, 0.00 -7, -7.99, 56.13, 0.00 -8, -8.30, 58.59, 0.00 -9, -8.52, 60.55, 0.00 -10, -8.67, 61.97, 0.00 -11, -8.72, 62.82, 0.00 -12, -8.66, 62.88, 0.00 -13, -8.50, 62.23, 0.00 -14, -8.28, 61.13, 0.00 -15, -7.99, 59.55, 0.00 -16, -7.62, 57.32, 0.00 -17, -7.17, 54.49, 0.00 -18, -6.71, 51.54, 0.00 -19, -6.20, 48.16, 0.00 -20, -5.58, 43.86, 0.00 -21, -4.94, 39.28, 0.00 -22, -4.27, 34.40, 0.00 -23, -3.53, 28.82, 0.00 -24, -2.76, 22.80, 0.00 -25, -2.02, 16.94, 0.00 -26, -1.24, 10.57, 0.00 -27, -0.42, 3.61, 0.00 -28, 0.43, -3.74, 0.00 -29, 1.23, -10.94, 0.00 -30, 2.05, -18.59, 0.00 -31, 2.85, -26.25, 0.00 -32, 3.71, -34.80, 0.00 -33, 4.39, -42.01, 0.00 -34, 5.21, -50.81, 0.00 -35, 5.93, -59.05, 0.00 -36, 6.78, -68.95, 0.00 -37, 7.40, -76.94, 0.00 -38, 8.15, -86.68, 0.00 -39, 8.73, -95.26, 0.00 -40, 9.39, -105.25, 0.00 -41, 9.53, -109.79, 0.00 -42, 10.21, -121.24, 0.00 -43, 10.64, -130.48, 0.00 -44, 11.29, -143.38, 0.00 -45, 11.58, -152.67, 0.00 -46, 11.87, -163.00, 0.00 -47, 11.62, -166.89, 0.00 -48, 10.95, -165.11, 0.00 -49, 9.98, -158.89, 0.00 -50, 10.53, -177.85, 0.00 -51, 12.85, -232.04, 0.00 -52, 11.84, -230.57, 0.00 -53, 17.68, -374.71, 0.00 -54, 28.16, -658.41, 0.00 -55, 23.75, -622.62, 0.00 -56, 19.13, -574.54, 0.00 -57, 15.80, -560.14, 0.00 -58, 12.67, -554.15, 0.00 -59, 9.41, -544.78, 0.00 -60, 6.07, -532.95, 0.00 -61, 2.72, -520.90, 0.00 -62, -0.63, -508.17, 0.00 -63, -3.96, -493.63, 0.00 -64, -7.22, -477.35, 0.00 -65, -10.41, -460.70, 0.00 -66, -13.58, -445.93, 0.00 -67, -16.65, -430.33, 0.00 -68, -19.45, -410.92, 0.00 -69, -22.10, -391.56, 0.00 -70, -24.60, -372.51, 0.00 -71, -26.81, -352.02, 0.00 -72, -28.57, -329.02, 0.00 -73, -30.26, -308.33, 0.00 -74, -32.31, -293.36, 0.00 -75, -33.66, -273.93, 0.00 -76, -33.91, -248.45, 0.00 -77, -33.37, -220.87, 0.00 -78, -33.65, -201.75, 0.00 -79, -33.28, -181.13, 0.00 -80, -33.65, -166.45, 0.00 -81, -32.32, -145.41, 0.00 -82, -30.98, -126.77, 0.00 -83, -27.67, -102.86, 0.00 -84, -25.19, -84.97, 0.00 -85, -17.98, -54.87, 0.00 -86, -12.22, -33.65, 0.00 -87, -5.44, -13.46, 0.00 -88, 2.81, 6.20, 0.00 -89, 25.61, 50.08, 0.00 -90, 34.75, 59.62, 0.00 -91, 59.49, 88.44, 0.00 -92, 74.40, 94.21, 0.00 -93, 98.91, 104.29, 0.00 -94, 128.78, 109.40, 0.00 -95, 197.27, 128.49, 0.00 -96, 167.86, 76.94, 0.00 -97, 215.03, 58.20, 0.00 -98, 98.23, 13.18, 0.00 -99, 39.92, -0.00, 0.00 -100, 38.55, -5.17, 0.00 -101, 111.93, -30.29, 0.00 -102, 105.62, -48.41, 0.00 -103, 71.27, -46.42, 0.00 -104, 47.70, -40.52, 0.00 -105, 33.09, -34.89, 0.00 -106, 12.18, -15.42, 0.00 -107, -6.33, 9.41, 0.00 -108, -15.15, 26.00, 0.00 -109, -21.38, 41.82, 0.00 -110, -31.33, 69.16, 0.00 -111, -37.85, 93.59, 0.00 -112, -41.16, 113.33, 0.00 -113, -42.82, 130.69, 0.00 -114, -48.07, 162.12, 0.00 -115, -50.44, 187.51, 0.00 -116, -51.28, 209.82, 0.00 -117, -51.46, 231.52, 0.00 -118, -53.20, 263.21, 0.00 -119, -53.66, 292.07, 0.00 -120, -52.32, 313.72, 0.00 -121, -49.22, 325.73, 0.00 -122, -48.52, 355.46, 0.00 -123, -46.38, 377.37, 0.00 -124, -43.86, 398.27, 0.00 -125, -40.68, 414.51, 0.00 -126, -38.07, 438.47, 0.00 -127, -34.79, 456.90, 0.00 -128, -31.33, 474.46, 0.00 -129, -27.76, 491.75, 0.00 -130, -24.47, 517.00, 0.00 -131, -20.76, 536.60, 0.00 -132, -16.86, 553.95, 0.00 -133, -12.96, 573.31, 0.00 -134, -8.94, 590.73, 0.00 -135, -4.88, 608.38, 0.00 -136, -0.77, 622.80, 0.00 -137, 3.34, 639.01, 0.00 -138, 7.43, 652.16, 0.00 -139, 11.51, 666.46, 0.00 -140, 15.52, 678.54, 0.00 -141, 19.46, 690.00, 0.00 -142, 23.30, 699.69, 0.00 -143, 27.06, 709.49, 0.00 -144, 30.69, 717.48, 0.00 -145, 34.16, 724.22, 0.00 -146, 37.46, 729.11, 0.00 -147, 40.70, 735.10, 0.00 -148, 43.72, 738.64, 0.00 -149, 46.43, 738.93, 0.00 -150, 49.13, 740.92, 0.00 -151, 51.01, 732.67, 0.00 -152, 52.99, 727.93, 0.00 -153, 60.59, 799.05, 0.00 -154, 41.53, 527.40, 0.00 -155, 6.57, 80.58, 0.00 -156, 6.52, 77.48, 0.00 -157, 6.39, 73.60, 0.00 -158, 5.37, 60.18, 0.00 -159, 3.89, 42.49, 0.00 -160, 3.36, 35.73, 0.00 -161, 3.25, 33.78, 0.00 -162, 2.69, 27.29, 0.00 -163, 2.25, 22.39, 0.00 -164, 1.68, 16.39, 0.00 -165, 1.46, 13.98, 0.00 -166, 0.81, 7.64, 0.00 -167, 0.24, 2.17, 0.00 -168, -0.42, -3.77, 0.00 -169, -0.96, -8.53, 0.00 -170, -1.69, -14.79, 0.00 -171, -2.28, -19.67, 0.00 -172, -2.97, -25.27, 0.00 -173, -3.46, -29.03, 0.00 -174, -4.13, -34.19, 0.00 -175, -4.74, -38.71, 0.00 -176, -5.35, -43.13, 0.00 -177, -5.85, -46.53, 0.00 -178, -6.46, -50.75, 0.00 -179, -6.93, -53.80, 0.00 -180, -7.39, -56.75, 0.00 -181, -7.80, -59.32, 0.00 -182, -8.20, -61.66, 0.00 -183, -8.45, -62.97, 0.00 -184, -8.68, -64.05, 0.00 -185, -8.75, -63.99, 0.00 -186, -8.91, -64.64, 0.00 -187, -8.88, -63.93, 0.00 -188, -8.84, -63.20, 0.00 -189, -8.70, -61.82, 0.00 -190, -8.47, -59.83, 0.00 -191, -8.08, -56.79, 0.00 -192, -7.62, -53.25, 0.00 -193, -7.07, -49.21, 0.00 -194, -6.41, -44.48, 0.00 -195, -5.60, -38.74, 0.00 -196, -4.74, -32.69, 0.00 -197, -3.75, -25.87, 0.00 -198, -2.59, -17.84, 0.00 +199, -0.97, -0.00, 0.00 +0, -2.86, 19.71, 0.00 +1, -4.10, 28.25, 0.00 +2, -5.21, 35.95, 0.00 +3, -6.19, 42.79, 0.00 +4, -7.06, 48.95, 0.00 +5, -7.76, 54.03, 0.00 +6, -8.38, 58.59, 0.00 +7, -8.86, 62.22, 0.00 +8, -9.24, 65.25, 0.00 +9, -9.49, 67.40, 0.00 +10, -9.65, 69.03, 0.00 +11, -9.70, 69.89, 0.00 +12, -9.68, 70.22, 0.00 +13, -9.53, 69.76, 0.00 +14, -9.32, 68.83, 0.00 +15, -9.00, 67.08, 0.00 +16, -8.64, 64.99, 0.00 +17, -8.18, 62.19, 0.00 +18, -7.69, 59.07, 0.00 +19, -7.11, 55.21, 0.00 +20, -6.49, 51.01, 0.00 +21, -5.80, 46.18, 0.00 +22, -5.10, 41.07, 0.00 +23, -4.33, 35.30, 0.00 +24, -3.55, 29.37, 0.00 +25, -2.73, 22.90, 0.00 +26, -1.90, 16.21, 0.00 +27, -1.06, 9.19, 0.00 +28, -0.22, 1.97, 0.00 +29, 0.66, -5.88, 0.00 +30, 1.54, -13.99, 0.00 +31, 2.44, -22.51, 0.00 +32, 3.29, -30.89, 0.00 +33, 4.14, -39.60, 0.00 +34, 4.95, -48.22, 0.00 +35, 5.76, -57.27, 0.00 +36, 6.50, -66.07, 0.00 +37, 7.24, -75.26, 0.00 +38, 7.90, -84.06, 0.00 +39, 8.54, -93.22, 0.00 +40, 9.09, -101.81, 0.00 +41, 9.52, -109.76, 0.00 +42, 9.88, -117.33, 0.00 +43, 10.13, -124.25, 0.00 +44, 10.36, -131.59, 0.00 +45, 10.46, -137.98, 0.00 +46, 10.42, -143.13, 0.00 +47, 9.88, -141.91, 0.00 +48, 9.21, -138.94, 0.00 +49, 7.72, -122.90, 0.00 +50, 6.88, -116.25, 0.00 +51, 5.67, -102.42, 0.00 +52, 7.31, -142.26, 0.00 +53, 19.42, -411.71, 0.00 +54, 25.10, -586.85, 0.00 +55, 21.04, -551.60, 0.00 +56, 17.73, -532.36, 0.00 +57, 15.09, -534.95, 0.00 +58, 12.09, -528.53, 0.00 +59, 8.96, -518.77, 0.00 +60, 5.78, -507.56, 0.00 +61, 2.60, -496.51, 0.00 +62, -0.60, -483.30, 0.00 +63, -3.77, -469.73, 0.00 +64, -6.88, -454.52, 0.00 +65, -9.94, -439.65, 0.00 +66, -12.87, -422.69, 0.00 +67, -15.69, -405.66, 0.00 +68, -18.31, -386.86, 0.00 +69, -20.80, -368.44, 0.00 +70, -23.01, -348.42, 0.00 +71, -25.02, -328.52, 0.00 +72, -26.69, -307.34, 0.00 +73, -28.28, -288.18, 0.00 +74, -29.30, -266.00, 0.00 +75, -29.97, -243.86, 0.00 +76, -30.15, -220.85, 0.00 +77, -30.19, -199.81, 0.00 +78, -29.56, -177.25, 0.00 +79, -28.60, -155.66, 0.00 +80, -26.92, -133.16, 0.00 +81, -25.00, -112.47, 0.00 +82, -21.80, -89.21, 0.00 +83, -18.54, -68.92, 0.00 +84, -13.74, -46.35, 0.00 +85, -8.89, -27.14, 0.00 +86, -1.64, -4.52, 0.00 +87, 4.39, 10.85, 0.00 +88, 13.83, 30.52, 0.00 +89, 21.16, 41.38, 0.00 +90, 34.57, 59.31, 0.00 +91, 45.05, 66.97, 0.00 +92, 66.65, 84.41, 0.00 +93, 69.69, 73.48, 0.00 +94, 93.94, 79.80, 0.00 +95, 148.33, 96.61, 0.00 +96, 164.88, 75.58, 0.00 +97, 208.90, 56.54, 0.00 +98, 167.16, 22.43, 0.00 +99, 113.32, -0.00, 0.00 +100, 159.48, -21.40, 0.00 +101, 172.64, -46.73, 0.00 +102, 133.23, -61.07, 0.00 +103, 107.21, -69.83, 0.00 +104, 74.94, -63.66, 0.00 +105, 61.84, -65.20, 0.00 +106, 40.24, -50.96, 0.00 +107, 27.30, -40.58, 0.00 +108, 12.76, -21.89, 0.00 +109, 1.07, -2.08, 0.00 +110, -7.69, 16.96, 0.00 +111, -15.74, 38.92, 0.00 +112, -22.53, 62.04, 0.00 +113, -27.90, 85.18, 0.00 +114, -32.82, 110.68, 0.00 +115, -36.02, 133.90, 0.00 +116, -38.83, 158.85, 0.00 +117, -40.54, 182.41, 0.00 +118, -42.01, 207.84, 0.00 +119, -42.60, 231.87, 0.00 +120, -42.81, 256.72, 0.00 +121, -42.14, 278.89, 0.00 +122, -41.42, 303.42, 0.00 +123, -40.14, 326.64, 0.00 +124, -38.55, 350.04, 0.00 +125, -36.44, 371.36, 0.00 +126, -34.25, 394.45, 0.00 +127, -31.75, 416.96, 0.00 +128, -29.00, 439.11, 0.00 +129, -25.94, 459.63, 0.00 +130, -22.75, 480.66, 0.00 +131, -19.36, 500.47, 0.00 +132, -15.84, 520.18, 0.00 +133, -12.17, 538.40, 0.00 +134, -8.43, 556.78, 0.00 +135, -4.60, 573.59, 0.00 +136, -0.73, 590.67, 0.00 +137, 3.17, 605.92, 0.00 +138, 7.07, 620.55, 0.00 +139, 10.95, 634.10, 0.00 +140, 14.80, 647.26, 0.00 +141, 18.58, 658.55, 0.00 +142, 22.30, 669.55, 0.00 +143, 25.92, 679.48, 0.00 +144, 29.44, 688.36, 0.00 +145, 32.77, 694.62, 0.00 +146, 36.03, 701.29, 0.00 +147, 39.11, 706.33, 0.00 +148, 42.09, 711.15, 0.00 +149, 44.92, 714.94, 0.00 +150, 47.50, 716.43, 0.00 +151, 48.94, 702.88, 0.00 +152, 53.10, 729.38, 0.00 +153, 51.97, 685.39, 0.00 +154, 17.10, 217.16, 0.00 +155, -5.11, -62.69, 0.00 +156, -5.62, -66.74, 0.00 +157, -1.38, -15.85, 0.00 +158, -0.02, -0.22, 0.00 +159, 1.17, 12.77, 0.00 +160, 1.40, 14.95, 0.00 +161, 1.65, 17.10, 0.00 +162, 1.59, 16.14, 0.00 +163, 1.45, 14.39, 0.00 +164, 1.14, 11.11, 0.00 +165, 0.76, 7.29, 0.00 +166, 0.29, 2.71, 0.00 +167, -0.23, -2.16, 0.00 +168, -0.81, -7.32, 0.00 +169, -1.42, -12.61, 0.00 +170, -2.05, -17.96, 0.00 +171, -2.72, -23.48, 0.00 +172, -3.40, -28.92, 0.00 +173, -4.11, -34.50, 0.00 +174, -4.78, -39.56, 0.00 +175, -5.44, -44.39, 0.00 +176, -6.07, -48.93, 0.00 +177, -6.71, -53.35, 0.00 +178, -7.28, -57.23, 0.00 +179, -7.85, -60.97, 0.00 +180, -8.33, -64.03, 0.00 +181, -8.80, -66.87, 0.00 +182, -9.17, -68.95, 0.00 +183, -9.49, -70.71, 0.00 +184, -9.72, -71.77, 0.00 +185, -9.93, -72.64, 0.00 +186, -9.98, -72.43, 0.00 +187, -10.00, -72.02, 0.00 +188, -9.86, -70.53, 0.00 +189, -9.66, -68.65, 0.00 +190, -9.35, -66.05, 0.00 +191, -8.96, -62.96, 0.00 +192, -8.44, -58.99, 0.00 +193, -7.81, -54.38, 0.00 +194, -7.06, -48.99, 0.00 +195, -6.18, -42.77, 0.00 +196, -5.17, -35.72, 0.00 +197, -4.05, -27.93, 0.00 +198, -2.79, -19.19, 0.00 From f331024b3bcd376f6cf14e3f28529cf2f5996171 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 28 Mar 2026 12:24:09 -0700 Subject: [PATCH 174/229] cleanup cleanup --- Common/include/containers/C2DContainer.hpp | 2 +- .../containers/CPyWrapperMatrixView.hpp | 6 +- Common/include/linear_algebra/CSysMatrix.hpp | 7 +- Common/include/linear_algebra/CSysVector.hpp | 3 +- .../include/parallelization/omp_structure.hpp | 51 ++++++++++ Common/include/toolboxes/graph_toolbox.hpp | 10 +- .../src/grid_movement/CLinearElasticity.cpp | 93 ++++++++----------- .../CIsoparametric.cpp | 9 +- .../CNearestNeighbor.cpp | 9 +- .../CRadialBasisFunction.cpp | 13 +-- Common/src/linear_algebra/CSysMatrix.cpp | 5 +- SU2_CFD/include/limiters/CLimiterDetails.hpp | 6 +- .../numerics_simd/flow/convection/common.hpp | 2 +- .../flow/diffusion/viscous_fluxes.hpp | 2 +- .../include/solvers/CFVMFlowSolverBase.hpp | 24 ++--- .../include/solvers/CFVMFlowSolverBase.inl | 12 +-- SU2_CFD/include/solvers/CNEMOEulerSolver.hpp | 3 - SU2_CFD/include/solvers/CScalarSolver.inl | 7 +- .../include/variables/CPrimitiveIndices.hpp | 2 +- SU2_CFD/src/interfaces/CInterface.cpp | 10 +- SU2_CFD/src/output/CFlowOutput.cpp | 8 +- SU2_CFD/src/solvers/CAdjEulerSolver.cpp | 19 ++-- SU2_CFD/src/solvers/CAdjNSSolver.cpp | 13 +-- SU2_CFD/src/solvers/CAdjTurbSolver.cpp | 20 ++-- SU2_CFD/src/solvers/CFEASolver.cpp | 4 +- SU2_CFD/src/solvers/CHeatSolver.cpp | 16 +--- SU2_CFD/src/solvers/CIncEulerSolver.cpp | 14 +-- SU2_CFD/src/solvers/CIncNSSolver.cpp | 6 +- SU2_CFD/src/solvers/CMeshSolver.cpp | 19 ++-- SU2_CFD/src/solvers/CNEMONSSolver.cpp | 11 +-- SU2_CFD/src/solvers/CNSSolver.cpp | 6 +- SU2_CFD/src/solvers/CRadP1Solver.cpp | 19 ++-- SU2_CFD/src/solvers/CSolver.cpp | 15 +-- .../src/solvers/CSpeciesFlameletSolver.cpp | 5 +- SU2_CFD/src/solvers/CSpeciesSolver.cpp | 11 +-- SU2_CFD/src/solvers/CTurbSASolver.cpp | 6 +- SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 8 +- SU2_CFD/src/solvers/CTurbSolver.cpp | 2 +- 38 files changed, 216 insertions(+), 262 deletions(-) diff --git a/Common/include/containers/C2DContainer.hpp b/Common/include/containers/C2DContainer.hpp index 24d2609bece3..ac45d182d563 100644 --- a/Common/include/containers/C2DContainer.hpp +++ b/Common/include/containers/C2DContainer.hpp @@ -421,7 +421,7 @@ class C2DContainer template class CInnerIterGather { private: - static_assert(std::is_integral::value, ""); + static_assert(std::is_integral::value); enum { Size = IndexSIMD_t::Size }; IndexSIMD_t m_offsets; const Index m_increment; diff --git a/Common/include/containers/CPyWrapperMatrixView.hpp b/Common/include/containers/CPyWrapperMatrixView.hpp index 86836f3a30fd..1b9ef2223fc2 100644 --- a/Common/include/containers/CPyWrapperMatrixView.hpp +++ b/Common/include/containers/CPyWrapperMatrixView.hpp @@ -84,7 +84,7 @@ */ class CPyWrapperMatrixView { protected: - static_assert(su2activematrix::IsRowMajor, ""); + static_assert(su2activematrix::IsRowMajor); su2double* data_ = nullptr; unsigned long rows_ = 0, cols_ = 0; std::string name_; @@ -124,7 +124,7 @@ class CPyWrapperMatrixView { */ class CPyWrapperMarkerMatrixView { private: - static_assert(su2activematrix::IsRowMajor, ""); + static_assert(su2activematrix::IsRowMajor); su2double* data_ = nullptr; const CVertex* const* vertices_ = nullptr; unsigned long rows_ = 0, cols_ = 0; @@ -175,7 +175,7 @@ class CPyWrapperMarkerMatrixView { */ class CPyWrapper3DMatrixView { protected: - static_assert(su2activematrix::IsRowMajor, ""); + static_assert(su2activematrix::IsRowMajor); su2double* data_ = nullptr; unsigned long rows_ = 0, cols_ = 0, dims_ = 0; std::string name_; diff --git a/Common/include/linear_algebra/CSysMatrix.hpp b/Common/include/linear_algebra/CSysMatrix.hpp index fc049aa078d1..823f15a51fcf 100644 --- a/Common/include/linear_algebra/CSysMatrix.hpp +++ b/Common/include/linear_algebra/CSysMatrix.hpp @@ -816,10 +816,11 @@ class CSysMatrix { } /*! - * \brief Deletes the values of the row i of the sparse matrix. - * \param[in] i - Index of the row. + * \brief Deletes the values of a row of the sparse matrix. + * \param[in] block_i - Index of the block. + * \param[in] row - Row within the block. */ - void DeleteValsRowi(unsigned long i); + void DeleteValsRowi(unsigned long block_i, unsigned long row); /*! * \brief Modifies this matrix (A) and a rhs vector (b) such that (A^-1 * b)_i = x_i. diff --git a/Common/include/linear_algebra/CSysVector.hpp b/Common/include/linear_algebra/CSysVector.hpp index 1639d053c087..f300c01e091b 100644 --- a/Common/include/linear_algebra/CSysVector.hpp +++ b/Common/include/linear_algebra/CSysVector.hpp @@ -360,11 +360,10 @@ class CSysVector : public VecExpr::CVecExpr, ScalarType> BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { /*--- Reduce over all threads in an ordered way to ensure a deterministic result. ---*/ for (int i = 1; i < omp_get_num_threads(); ++i) sum += dot_scratch[i]; -#ifdef HAVE_MPI + /*--- Reduce across all mpi ranks, only the master thread communicates. ---*/ const auto mpi_type = (sizeof(ScalarType) < sizeof(double)) ? MPI_FLOAT : MPI_DOUBLE; SelectMPIWrapper::W::Allreduce(&sum, &dot_scratch[0], 1, mpi_type, MPI_SUM, SU2_MPI::GetComm()); -#endif } /*--- Make view of result consistent across threads. ---*/ END_SU2_OMP_SAFE_GLOBAL_ACCESS diff --git a/Common/include/parallelization/omp_structure.hpp b/Common/include/parallelization/omp_structure.hpp index 9b4f1461419c..8066c3d9e4ae 100644 --- a/Common/include/parallelization/omp_structure.hpp +++ b/Common/include/parallelization/omp_structure.hpp @@ -39,6 +39,7 @@ #pragma once #include +#include #include "../code_config.hpp" @@ -274,3 +275,53 @@ inline void atomicAdd(T rhs, T& lhs) { SU2_OMP_ATOMIC lhs += rhs; } + +/*--- GCC supported atomic compare (for min/max) before the official date. ---*/ +#ifdef __GNUC__ +#define ATOMIC_COMPARE_SINCE 201511 +#else +#define ATOMIC_COMPARE_SINCE 202011 +#endif + +/*--- By default the min/max fallback to critical is required for all types. ---*/ +#define ATOMIC_COMPARE_FALLBACK + +/*--- Atomic max, shared = max(shared, local). ---*/ +#ifdef _OPENMP +#if _OPENMP >= ATOMIC_COMPARE_SINCE +/*--- Atomic min/max are supported for arithmetic types. ---*/ +template ::value> = 0> +inline void atomicMax(const T& local, T& shared) { +#pragma omp atomic compare + shared = shared < local ? local : shared; +} + +/*--- Redefine the fallback for non arithmetic types. ---*/ +#undef ATOMIC_COMPARE_FALLBACK +#define ATOMIC_COMPARE_FALLBACK , su2enable_if::value> = 0 +#endif +#endif +template +inline void atomicMax(const T& local, T& shared) { + SU2_OMP_CRITICAL + shared = std::max(local, shared); + END_SU2_OMP_CRITICAL +} + +/*--- Atomic min, shared = min(shared, local). ---*/ +#ifdef _OPENMP +#if _OPENMP >= ATOMIC_COMPARE_SINCE +template ::value> = 0> +inline void atomicMin(const T& local, T& shared) { +#pragma omp atomic compare + shared = shared > local ? local : shared; +} +#endif +#endif +template +inline void atomicMin(const T& local, T& shared) { + SU2_OMP_CRITICAL + shared = std::min(local, shared); + END_SU2_OMP_CRITICAL +} +#undef ATOMIC_COMPARE_FALLBACK diff --git a/Common/include/toolboxes/graph_toolbox.hpp b/Common/include/toolboxes/graph_toolbox.hpp index f6ec27861a6f..accfa9431ae8 100644 --- a/Common/include/toolboxes/graph_toolbox.hpp +++ b/Common/include/toolboxes/graph_toolbox.hpp @@ -56,7 +56,7 @@ enum class ConnectivityType { FiniteVolume = 0, FiniteElement = 1 }; */ template class CCompressedSparsePattern { - static_assert(std::is_integral::value, ""); + static_assert(std::is_integral::value); private: su2vector m_outerPtr; /*!< \brief Start positions of the inner indices for each outer index. */ @@ -490,8 +490,8 @@ T createNaturalColoring(Index_t numInnerIndexes) { template T colorSparsePattern(const T& pattern, size_t groupSize = 1, bool includeOuterIdx = false, bool balanceColors = false, std::vector* indexColor = nullptr) { - static_assert(std::is_integral::value, ""); - static_assert(std::numeric_limits::max() >= MaxColors, ""); + static_assert(std::is_integral::value); + static_assert(std::numeric_limits::max() >= MaxColors); using Index_t = typename T::IndexType; @@ -607,7 +607,7 @@ T colorSparsePattern(const T& pattern, size_t groupSize = 1, bool includeOuterId */ template struct GridColor { - static_assert(std::is_integral::value, ""); + static_assert(std::is_integral::value); const T size; T groupSize; @@ -625,7 +625,7 @@ struct GridColor { */ template struct DummyGridColor { - static_assert(std::is_integral::value, ""); + static_assert(std::is_integral::value); T size; struct { diff --git a/Common/src/grid_movement/CLinearElasticity.cpp b/Common/src/grid_movement/CLinearElasticity.cpp index 2450cadf0e68..462d14a624f4 100644 --- a/Common/src/grid_movement/CLinearElasticity.cpp +++ b/Common/src/grid_movement/CLinearElasticity.cpp @@ -164,17 +164,12 @@ particular, the linear elasticity equations hold only for small deformations. -- } void CLinearElasticity::UpdateGridCoord(CGeometry* geometry, CConfig* config) { - unsigned short iDim; - unsigned long iPoint, total_index; - su2double new_coord; - /*--- Update the grid coordinates using the solution of the linear system after grid deformation (LinSysSol contains the x, y, z displacements). ---*/ - for (iPoint = 0; iPoint < nPoint; iPoint++) - for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - new_coord = geometry->nodes->GetCoord(iPoint, iDim) + LinSysSol[total_index]; + for (auto iPoint = 0ul; iPoint < nPoint; iPoint++) + for (auto iDim = 0ul; iDim < nDim; iDim++) { + su2double new_coord = geometry->nodes->GetCoord(iPoint, iDim) + LinSysSol(iPoint, iDim); if (fabs(new_coord) < EPS * EPS) new_coord = 0.0; geometry->nodes->SetCoord(iPoint, iDim, new_coord); } @@ -190,7 +185,7 @@ void CLinearElasticity::UpdateGridCoord(CGeometry* geometry, CConfig* config) { void CLinearElasticity::UpdateGridCoord_Derivatives(CGeometry* geometry, CConfig* config, bool ForwardProjectionDerivative) { unsigned short iDim, iMarker; - unsigned long iPoint, total_index, iVertex; + unsigned long iPoint, iVertex; SU2_COMPONENT Kind_SU2 = config->GetKind_SU2(); @@ -200,9 +195,8 @@ void CLinearElasticity::UpdateGridCoord_Derivatives(CGeometry* geometry, CConfig for (iPoint = 0; iPoint < geometry->GetnPoint(); iPoint++) { su2double new_coord[3] = {}; for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; new_coord[iDim] = geometry->nodes->GetCoord(iPoint, iDim); - SU2_TYPE::SetDerivative(new_coord[iDim], SU2_TYPE::GetValue(LinSysSol[total_index])); + SU2_TYPE::SetDerivative(new_coord[iDim], SU2_TYPE::GetValue(LinSysSol(iPoint, iDim))); } geometry->nodes->SetCoord(iPoint, new_coord); } @@ -211,7 +205,6 @@ void CLinearElasticity::UpdateGridCoord_Derivatives(CGeometry* geometry, CConfig if (config->GetSmoothGradient()) { for (iPoint = 0; iPoint < geometry->GetnPoint(); iPoint++) { for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; geometry->SetSensitivity(iPoint, iDim, 0.0); } } @@ -222,8 +215,7 @@ void CLinearElasticity::UpdateGridCoord_Derivatives(CGeometry* geometry, CConfig iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); if (geometry->nodes->GetDomain(iPoint)) { for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - geometry->SetSensitivity(iPoint, iDim, LinSysSol[total_index]); + geometry->SetSensitivity(iPoint, iDim, LinSysSol(iPoint, iDim)); } } } @@ -232,8 +224,7 @@ void CLinearElasticity::UpdateGridCoord_Derivatives(CGeometry* geometry, CConfig } else if (config->GetSmoothGradient() && ForwardProjectionDerivative) { for (iPoint = 0; iPoint < geometry->GetnPoint(); iPoint++) { for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - geometry->SetSensitivity(iPoint, iDim, LinSysSol[total_index]); + geometry->SetSensitivity(iPoint, iDim, LinSysSol(iPoint, iDim)); } } } @@ -1247,7 +1238,7 @@ su2double CLinearElasticity::ShapeFunc_Hexa(su2double Xi, su2double Eta, su2doub void CLinearElasticity::SetDomainDisplacements(CGeometry* geometry, CConfig* config) { unsigned short iDim, nDim = geometry->GetnDim(); - unsigned long iPoint, total_index; + unsigned long iPoint; if (config->GetHold_GridFixed()) { auto MinCoordValues = config->GetHold_GridFixed_Coord(); @@ -1260,10 +1251,9 @@ void CLinearElasticity::SetDomainDisplacements(CGeometry* geometry, CConfig* con auto Coord = geometry->nodes->GetCoord(iPoint); for (iDim = 0; iDim < nDim; iDim++) { if ((Coord[iDim] < MinCoordValues[iDim]) || (Coord[iDim] > MaxCoordValues[iDim])) { - total_index = iPoint * nDim + iDim; - LinSysRes[total_index] = 0.0; - LinSysSol[total_index] = 0.0; - StiffMatrix.DeleteValsRowi(total_index); + LinSysRes(iPoint, iDim) = 0.0; + LinSysSol(iPoint, iDim) = 0.0; + StiffMatrix.DeleteValsRowi(iPoint, iDim); } } } @@ -1276,10 +1266,9 @@ void CLinearElasticity::SetDomainDisplacements(CGeometry* geometry, CConfig* con for (iPoint = 0; iPoint < nPoint; iPoint++) { if (geometry->nodes->GetWall_Distance(iPoint) >= config->GetDeform_Limit()) { for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - LinSysRes[total_index] = 0.0; - LinSysSol[total_index] = 0.0; - StiffMatrix.DeleteValsRowi(total_index); + LinSysRes(iPoint, iDim) = 0.0; + LinSysSol(iPoint, iDim) = 0.0; + StiffMatrix.DeleteValsRowi(iPoint, iDim); } } } @@ -1288,7 +1277,7 @@ void CLinearElasticity::SetDomainDisplacements(CGeometry* geometry, CConfig* con void CLinearElasticity::SetBoundaryDisplacements(CGeometry* geometry, CConfig* config) { unsigned short iDim, nDim = geometry->GetnDim(), iMarker, axis = 0; - unsigned long iPoint, total_index, iVertex; + unsigned long iPoint, iVertex; su2double *VarCoord, MeanCoord[3] = {0.0, 0.0, 0.0}, VarIncrement = 1.0; /*--- If requested (no by default) impose the surface deflections in @@ -1307,10 +1296,9 @@ void CLinearElasticity::SetBoundaryDisplacements(CGeometry* geometry, CConfig* c for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) { iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - LinSysRes[total_index] = 0.0; - LinSysSol[total_index] = 0.0; - StiffMatrix.DeleteValsRowi(total_index); + LinSysRes(iPoint, iDim) = 0.0; + LinSysSol(iPoint, iDim) = 0.0; + StiffMatrix.DeleteValsRowi(iPoint, iDim); } } } @@ -1327,10 +1315,9 @@ void CLinearElasticity::SetBoundaryDisplacements(CGeometry* geometry, CConfig* c VarCoord = geometry->vertex[iMarker][iVertex]->GetVarCoord(); for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - LinSysRes[total_index] = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); - LinSysSol[total_index] = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); - StiffMatrix.DeleteValsRowi(total_index); + LinSysRes(iPoint, iDim) = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); + LinSysSol(iPoint, iDim) = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); + StiffMatrix.DeleteValsRowi(iPoint, iDim); } } } @@ -1367,10 +1354,9 @@ void CLinearElasticity::SetBoundaryDisplacements(CGeometry* geometry, CConfig* c for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) { iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); - total_index = iPoint * nDim + axis; - LinSysRes[total_index] = 0.0; - LinSysSol[total_index] = 0.0; - StiffMatrix.DeleteValsRowi(total_index); + LinSysRes(iPoint, axis) = 0.0; + LinSysSol(iPoint, axis) = 0.0; + StiffMatrix.DeleteValsRowi(iPoint, axis); } } } @@ -1382,10 +1368,9 @@ void CLinearElasticity::SetBoundaryDisplacements(CGeometry* geometry, CConfig* c for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) { iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - LinSysRes[total_index] = 0.0; - LinSysSol[total_index] = 0.0; - StiffMatrix.DeleteValsRowi(total_index); + LinSysRes(iPoint, axis) = 0.0; + LinSysSol(iPoint, axis) = 0.0; + StiffMatrix.DeleteValsRowi(iPoint, axis); } } } @@ -1399,10 +1384,9 @@ void CLinearElasticity::SetBoundaryDisplacements(CGeometry* geometry, CConfig* c iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); VarCoord = geometry->vertex[iMarker][iVertex]->GetVarCoord(); for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - LinSysRes[total_index] = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); - LinSysSol[total_index] = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); - StiffMatrix.DeleteValsRowi(total_index); + LinSysRes(iPoint, axis) = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); + LinSysSol(iPoint, axis) = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); + StiffMatrix.DeleteValsRowi(iPoint, axis); } } } @@ -1411,7 +1395,7 @@ void CLinearElasticity::SetBoundaryDisplacements(CGeometry* geometry, CConfig* c void CLinearElasticity::SetBoundaryDerivatives(CGeometry* geometry, CConfig* config, bool ForwardProjectionDerivative) { unsigned short iDim, iMarker; - unsigned long iPoint, total_index, iVertex; + unsigned long iPoint, iVertex; su2double* VarCoord; SU2_COMPONENT Kind_SU2 = config->GetKind_SU2(); @@ -1422,9 +1406,8 @@ void CLinearElasticity::SetBoundaryDerivatives(CGeometry* geometry, CConfig* con iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); VarCoord = geometry->vertex[iMarker][iVertex]->GetVarCoord(); for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - LinSysRes[total_index] = SU2_TYPE::GetDerivative(VarCoord[iDim]); - LinSysSol[total_index] = SU2_TYPE::GetDerivative(VarCoord[iDim]); + LinSysRes(iPoint, iDim) = SU2_TYPE::GetDerivative(VarCoord[iDim]); + LinSysSol(iPoint, iDim) = SU2_TYPE::GetDerivative(VarCoord[iDim]); } } } @@ -1433,9 +1416,8 @@ void CLinearElasticity::SetBoundaryDerivatives(CGeometry* geometry, CConfig* con } else if ((Kind_SU2 == SU2_COMPONENT::SU2_DOT) && !ForwardProjectionDerivative) { for (iPoint = 0; iPoint < nPoint; iPoint++) { for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - LinSysRes[total_index] = SU2_TYPE::GetValue(geometry->GetSensitivity(iPoint, iDim)); - LinSysSol[total_index] = SU2_TYPE::GetValue(geometry->GetSensitivity(iPoint, iDim)); + LinSysRes(iPoint, iDim) = SU2_TYPE::GetValue(geometry->GetSensitivity(iPoint, iDim)); + LinSysSol(iPoint, iDim) = SU2_TYPE::GetValue(geometry->GetSensitivity(iPoint, iDim)); } } } else if (config->GetSmoothGradient() && ForwardProjectionDerivative) { @@ -1444,9 +1426,8 @@ void CLinearElasticity::SetBoundaryDerivatives(CGeometry* geometry, CConfig* con for (iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) { iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); for (iDim = 0; iDim < nDim; iDim++) { - total_index = iPoint * nDim + iDim; - LinSysRes[total_index] = SU2_TYPE::GetValue(geometry->GetSensitivity(iPoint, iDim)); - LinSysSol[total_index] = SU2_TYPE::GetValue(geometry->GetSensitivity(iPoint, iDim)); + LinSysRes(iPoint, iDim) = SU2_TYPE::GetValue(geometry->GetSensitivity(iPoint, iDim)); + LinSysSol(iPoint, iDim) = SU2_TYPE::GetValue(geometry->GetSensitivity(iPoint, iDim)); } } } diff --git a/Common/src/interface_interpolation/CIsoparametric.cpp b/Common/src/interface_interpolation/CIsoparametric.cpp index 1874c48abe59..51feca37cb80 100644 --- a/Common/src/interface_interpolation/CIsoparametric.cpp +++ b/Common/src/interface_interpolation/CIsoparametric.cpp @@ -245,12 +245,9 @@ void CIsoparametric::SetTransferCoeff(const CConfig* const* config) { } } END_SU2_OMP_FOR - SU2_OMP_CRITICAL { - MaxDistance = max(MaxDistance, maxDist); - ErrorCounter += errorCount; - nGlobalVertexTarget += totalCount; - } - END_SU2_OMP_CRITICAL + atomicMax(maxDist, MaxDistance); + atomicAdd(errorCount, ErrorCounter); + atomicAdd(totalCount, nGlobalVertexTarget); } END_SU2_OMP_PARALLEL diff --git a/Common/src/interface_interpolation/CNearestNeighbor.cpp b/Common/src/interface_interpolation/CNearestNeighbor.cpp index 20a7aacf3406..302669b1fdb5 100644 --- a/Common/src/interface_interpolation/CNearestNeighbor.cpp +++ b/Common/src/interface_interpolation/CNearestNeighbor.cpp @@ -153,12 +153,9 @@ void CNearestNeighbor::SetTransferCoeff(const CConfig* const* config) { } } END_SU2_OMP_FOR - SU2_OMP_CRITICAL { - totalTargetPoints += numTarget; - AvgDistance += avgDist; - MaxDistance = max(MaxDistance, maxDist); - } - END_SU2_OMP_CRITICAL + atomicAdd(numTarget, totalTargetPoints); + atomicAdd(avgDist, AvgDistance); + atomicMax(maxDist, MaxDistance); } END_SU2_OMP_PARALLEL } diff --git a/Common/src/interface_interpolation/CRadialBasisFunction.cpp b/Common/src/interface_interpolation/CRadialBasisFunction.cpp index a974fe326ddb..219685c5a248 100644 --- a/Common/src/interface_interpolation/CRadialBasisFunction.cpp +++ b/Common/src/interface_interpolation/CRadialBasisFunction.cpp @@ -373,14 +373,11 @@ void CRadialBasisFunction::SetTransferCoeff(const CConfig* const* config) { } } // end target vertex loop END_SU2_OMP_FOR - SU2_OMP_CRITICAL { - totalDonorPoints += totalDonors; - MinDonors = min(MinDonors, minDonors); - MaxDonors = max(MaxDonors, maxDonors); - AvgCorrection += sumCorr; - MaxCorrection = max(MaxCorrection, maxCorr); - } - END_SU2_OMP_CRITICAL + atomicAdd(totalDonors, totalDonorPoints); + atomicMin(minDonors, MinDonors); + atomicMax(maxDonors, MaxDonors); + atomicAdd(sumCorr, AvgCorrection); + atomicMax(maxCorr, MaxCorrection); } END_SU2_OMP_PARALLEL diff --git a/Common/src/linear_algebra/CSysMatrix.cpp b/Common/src/linear_algebra/CSysMatrix.cpp index aea87b05cf77..1873128def23 100644 --- a/Common/src/linear_algebra/CSysMatrix.cpp +++ b/Common/src/linear_algebra/CSysMatrix.cpp @@ -601,10 +601,7 @@ void CSysMatrix::MatrixInverse(ScalarType* matrix, ScalarType* inver } template -void CSysMatrix::DeleteValsRowi(unsigned long i) { - const auto block_i = i / nVar; - const auto row = i % nVar; - +void CSysMatrix::DeleteValsRowi(unsigned long block_i, unsigned long row) { for (auto index = row_ptr[block_i]; index < row_ptr[block_i + 1]; index++) { for (auto iVar = 0u; iVar < nVar; iVar++) matrix[index * nVar * nVar + row * nVar + iVar] = 0.0; // Delete row values in the block diff --git a/SU2_CFD/include/limiters/CLimiterDetails.hpp b/SU2_CFD/include/limiters/CLimiterDetails.hpp index 1c0b12db5576..c330e9719cf9 100644 --- a/SU2_CFD/include/limiters/CLimiterDetails.hpp +++ b/SU2_CFD/include/limiters/CLimiterDetails.hpp @@ -369,13 +369,11 @@ struct CLimiterDetails /*--- Per rank reduction. ---*/ - SU2_OMP_CRITICAL for(size_t iVar = varBegin; iVar < varEnd; ++iVar) { - sharedMin(iVar) = min(sharedMin(iVar), localMin(iVar)); - sharedMax(iVar) = max(sharedMax(iVar), localMax(iVar)); + atomicMin(localMin(iVar), sharedMin(iVar)); + atomicMax(localMax(iVar), sharedMax(iVar)); } - END_SU2_OMP_CRITICAL /*--- Global reduction. ---*/ diff --git a/SU2_CFD/include/numerics_simd/flow/convection/common.hpp b/SU2_CFD/include/numerics_simd/flow/convection/common.hpp index 951555b734ac..9548414c3218 100644 --- a/SU2_CFD/include/numerics_simd/flow/convection/common.hpp +++ b/SU2_CFD/include/numerics_simd/flow/convection/common.hpp @@ -406,7 +406,7 @@ template FORCEINLINE VectorDbl inviscidProjFlux(const PrimVarType& V, const ConsVarType& U, const VectorDbl& normal) { - static_assert(ConsVarType::nVar == nDim+2,""); + static_assert(ConsVarType::nVar == nDim+2); Double mdot = dot(U.momentum(), normal); VectorDbl flux; flux(0) = mdot; diff --git a/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp b/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp index 62b10487782b..22ea755f9af1 100644 --- a/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp +++ b/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp @@ -127,7 +127,7 @@ class CCompressibleViscousFluxBase : public CNumericsSIMD { MatrixDbl& jac_i, MatrixDbl& jac_j) const { - static_assert(PrimVarType::nVar <= Derived::nPrimVar,""); + static_assert(PrimVarType::nVar <= Derived::nPrimVar); /*--- Pointer on which to call the "compile-time virtual" methods. ---*/ diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp index 034acc522339..9f04b0cbaf69 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp @@ -524,14 +524,10 @@ class CFVMFlowSolverBase : public CSolver { } } END_SU2_OMP_FOR + /*--- Min/max over threads. ---*/ - SU2_OMP_CRITICAL - { - Min_Delta_Time = min(Min_Delta_Time, minDt); - Max_Delta_Time = max(Max_Delta_Time, maxDt); - Global_Delta_Time = Min_Delta_Time; - } - END_SU2_OMP_CRITICAL + atomicMin(minDt, Min_Delta_Time); + atomicMax(maxDt, Max_Delta_Time); } /*--- Compute the min/max dt (in parallel, now over mpi ranks). ---*/ @@ -545,6 +541,7 @@ class CFVMFlowSolverBase : public CSolver { SU2_MPI::Allreduce(&Max_Delta_Time, &rbuf_time, 1, MPI_DOUBLE, MPI_MAX, SU2_MPI::GetComm()); Max_Delta_Time = rbuf_time; } + Global_Delta_Time = Min_Delta_Time; } END_SU2_OMP_SAFE_GLOBAL_ACCESS /*--- For exact time solution use the minimum delta time of the whole mesh. ---*/ @@ -591,9 +588,7 @@ class CFVMFlowSolverBase : public CSolver { glbDtND = min(glbDtND, config->GetUnst_CFL()*Global_Delta_Time / nodes->GetLocalCFL(iPoint)); } END_SU2_OMP_FOR - SU2_OMP_CRITICAL - Global_Delta_UnstTimeND = min(Global_Delta_UnstTimeND, glbDtND); - END_SU2_OMP_CRITICAL + atomicMin(glbDtND, Global_Delta_UnstTimeND); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -811,7 +806,7 @@ class CFVMFlowSolverBase : public CSolver { static_assert(IntegrationType == CLASSICAL_RK4_EXPLICIT || IntegrationType == RUNGE_KUTTA_EXPLICIT || - IntegrationType == EULER_EXPLICIT, ""); + IntegrationType == EULER_EXPLICIT); const bool adjoint = config->GetContinuous_Adjoint(); @@ -968,12 +963,11 @@ class CFVMFlowSolverBase : public CSolver { } for (unsigned short iVar = 0; iVar < nVar; iVar++) { - unsigned long total_index = iPoint*nVar + iVar; - LinSysRes[total_index] = - (LinSysRes[total_index] + local_Res_TruncError[iVar]); - LinSysSol[total_index] = 0.0; + LinSysRes(iPoint, iVar) = -(LinSysRes(iPoint, iVar) + local_Res_TruncError[iVar]); + LinSysSol(iPoint, iVar) = 0.0; /*--- "Add" residual at (iPoint,iVar) to local residual variables. ---*/ - ResidualReductions_PerThread(iPoint, iVar, LinSysRes[total_index], resRMS, resMax, idxMax); + ResidualReductions_PerThread(iPoint, iVar, LinSysRes(iPoint, iVar), resRMS, resMax, idxMax); } } END_SU2_OMP_FOR diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index a8d3f25ca9db..cc2fa9a9e5ab 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -684,11 +684,8 @@ void CFVMFlowSolverBase::ComputeVorticityAndStrainMag(const CConfig& confi END_SU2_OMP_FOR if ((iMesh == MESH_0) && (config.GetComm_Level() == COMM_FULL)) { - SU2_OMP_CRITICAL { - StrainMag_Max = max(StrainMag_Max, strainMax); - Omega_Max = max(Omega_Max, omegaMax); - } - END_SU2_OMP_CRITICAL + atomicMax(strainMax, StrainMag_Max); + atomicMax(omegaMax, Omega_Max); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -1458,7 +1455,7 @@ void CFVMFlowSolverBase::BC_Custom(CGeometry* geometry, CSolver** solver_c if (VerificationSolution) { unsigned short iVar; - unsigned long iVertex, iPoint, total_index; + unsigned long iVertex, iPoint; bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -1500,8 +1497,7 @@ void CFVMFlowSolverBase::BC_Custom(CGeometry* geometry, CSolver** solver_c if (implicit) { for (iVar = 0; iVar < nVar; iVar++) { - total_index = iPoint * nVar + iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } } diff --git a/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp b/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp index 35d2492f0727..75bd963f7563 100644 --- a/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp +++ b/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp @@ -56,9 +56,6 @@ class CNEMOEulerSolver : public CFVMFlowSolverBase::PrepareImplicitIteration(CGeometry* geometry, /*--- Right hand side of the system (-Residual) and initial guess (x = 0) ---*/ for (unsigned short iVar = 0; iVar < nVar; iVar++) { - unsigned long total_index = iPoint * nVar + iVar; - LinSysRes[total_index] = -LinSysRes[total_index]; - LinSysSol[total_index] = 0.0; + LinSysRes(iPoint, iVar) = -LinSysRes(iPoint, iVar); + LinSysSol(iPoint, iVar) = 0.0; /*--- "Add" residual at (iPoint,iVar) to local residual variables. ---*/ - ResidualReductions_PerThread(iPoint, iVar, LinSysRes[total_index], resRMS, resMax, idxMax); + ResidualReductions_PerThread(iPoint, iVar, LinSysRes(iPoint, iVar), resRMS, resMax, idxMax); } } END_SU2_OMP_FOR diff --git a/SU2_CFD/include/variables/CPrimitiveIndices.hpp b/SU2_CFD/include/variables/CPrimitiveIndices.hpp index 2472fa849c9d..a1951ae02a55 100644 --- a/SU2_CFD/include/variables/CPrimitiveIndices.hpp +++ b/SU2_CFD/include/variables/CPrimitiveIndices.hpp @@ -90,7 +90,7 @@ struct CPrimitiveIndices { template void Construct(IndexType nDim, IndexType nSpecies) { /*--- Build the indices object in the static buffer owned by this class. ---*/ - static_assert(sizeof(ConcreteIndices) <= 2 * sizeof(IndexType), ""); + static_assert(sizeof(ConcreteIndices) <= 2 * sizeof(IndexType)); new(data_) ConcreteIndices(nDim, nSpecies); } diff --git a/SU2_CFD/src/interfaces/CInterface.cpp b/SU2_CFD/src/interfaces/CInterface.cpp index dce1ceb66561..299b90a90907 100644 --- a/SU2_CFD/src/interfaces/CInterface.cpp +++ b/SU2_CFD/src/interfaces/CInterface.cpp @@ -63,7 +63,7 @@ void CInterface::BroadcastData(const CInterpolator& interpolator, CSolver *donor_solution, CSolver *target_solution, CGeometry *donor_geometry, CGeometry *target_geometry, const CConfig *donor_config, const CConfig *target_config) { - static_assert(su2activematrix::Storage == StorageType::RowMajor,""); + static_assert(su2activematrix::Storage == StorageType::RowMajor); GetPhysical_Constants(donor_solution, target_solution, donor_geometry, target_geometry, donor_config, target_config); @@ -110,7 +110,7 @@ void CInterface::BroadcastData(const CInterpolator& interpolator, if (markDonor >= 0) { /*--- Apply contact resistance if specified. ---*/ - + SetContactResistance(donor_config->GetContactResistance(iMarkerInt)); for (auto iVertex = 0ul, iSend = 0ul; iVertex < donor_geometry->GetnVertex(markDonor); iVertex++) { @@ -235,7 +235,7 @@ void CInterface::PreprocessAverage(CGeometry *donor_geometry, CGeometry *target_ /*--- If the tag hasn't matched any tag within the donor markers ---*/ Marker_Donor = -1; Donor_Flag = -1; - + } #ifdef HAVE_MPI @@ -423,7 +423,7 @@ void CInterface::AllgatherAverage(CSolver *donor_solution, CSolver *target_solut } /*--- If the tag hasn't matched any tag within the donor markers ---*/ Marker_Donor = -1; - + } /*--- Here we want to make available the quantities for all the processors and collect them in a buffer * for each span of the donor the span-wise height vector also so @@ -538,7 +538,7 @@ void CInterface::AllgatherAverage(CSolver *donor_solution, CSolver *target_solut } /*--- If the tag hasn't matched any tag within the Flow markers ---*/ Marker_Target = -1; - + } diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index 446db73dc13f..54bdc18d7830 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -979,12 +979,8 @@ void CFlowOutput::SetCustomOutputs(const CSolver* const* solver, const CGeometry } END_SU2_OMP_FOR } - - SU2_OMP_CRITICAL { - integral[0] += local_integral[0]; - integral[1] += local_integral[1]; - } - END_SU2_OMP_CRITICAL + atomicAdd(local_integral[0], integral[0]); + atomicAdd(local_integral[1], integral[1]); } END_SU2_OMP_PARALLEL diff --git a/SU2_CFD/src/solvers/CAdjEulerSolver.cpp b/SU2_CFD/src/solvers/CAdjEulerSolver.cpp index 67ef904d1d4a..a96a131f553f 100644 --- a/SU2_CFD/src/solvers/CAdjEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjEulerSolver.cpp @@ -1422,7 +1422,7 @@ void CAdjEulerSolver::ExplicitEuler_Iteration(CGeometry *geometry, CSolver **sol void CAdjEulerSolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { unsigned short iVar; - unsigned long iPoint, total_index; + unsigned long iPoint; su2double Delta, *local_Res_TruncError, Vol; /*--- Set maximum residual to zero ---*/ @@ -1450,8 +1450,7 @@ void CAdjEulerSolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **sol else { Jacobian.SetVal2Diag(iPoint, 1.0); for (iVar = 0; iVar < nVar; iVar++) { - total_index = iPoint*nVar + iVar; - LinSysRes[total_index] = 0.0; + LinSysRes(iPoint, iVar) = 0.0; local_Res_TruncError[iVar] = 0.0; } } @@ -1459,11 +1458,10 @@ void CAdjEulerSolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **sol /*--- Right hand side of the system (-Residual) and initial guess (x = 0) ---*/ for (iVar = 0; iVar < nVar; iVar++) { - total_index = iPoint*nVar+iVar; - LinSysRes[total_index] = -(LinSysRes[total_index] + local_Res_TruncError[iVar]); - LinSysSol[total_index] = 0.0; - Residual_RMS[iVar] += LinSysRes[total_index]*LinSysRes[total_index]; - AddRes_Max(iVar, fabs(LinSysRes[total_index]), geometry->nodes->GetGlobalIndex(iPoint), geometry->nodes->GetCoord(iPoint)); + LinSysRes(iPoint, iVar) = -(LinSysRes(iPoint, iVar) + local_Res_TruncError[iVar]); + LinSysSol(iPoint, iVar) = 0.0; + Residual_RMS[iVar] += LinSysRes(iPoint, iVar)*LinSysRes(iPoint, iVar); + AddRes_Max(iVar, fabs(LinSysRes(iPoint, iVar)), geometry->nodes->GetGlobalIndex(iPoint), geometry->nodes->GetCoord(iPoint)); } } @@ -1472,9 +1470,8 @@ void CAdjEulerSolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **sol for (iPoint = nPointDomain; iPoint < nPoint; iPoint++) { for (iVar = 0; iVar < nVar; iVar++) { - total_index = iPoint*nVar + iVar; - LinSysRes[total_index] = 0.0; - LinSysSol[total_index] = 0.0; + LinSysRes(iPoint, iVar) = 0.0; + LinSysSol(iPoint, iVar) = 0.0; } } diff --git a/SU2_CFD/src/solvers/CAdjNSSolver.cpp b/SU2_CFD/src/solvers/CAdjNSSolver.cpp index f6d9ac366f0b..f2ad14257e46 100644 --- a/SU2_CFD/src/solvers/CAdjNSSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjNSSolver.cpp @@ -1165,7 +1165,7 @@ void CAdjNSSolver::Viscous_Sensitivity(CGeometry *geometry, CSolver **solver_con void CAdjNSSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { unsigned short iDim, iVar, jVar, jDim; - unsigned long iVertex, iPoint, total_index, Point_Normal; + unsigned long iVertex, iPoint, Point_Normal; su2double *d, l1psi, vartheta, Sigma_5, phi[3] = {}; su2double sq_vel, ProjGridVel, Enthalpy = 0.0, *GridVel; @@ -1501,8 +1501,7 @@ void CAdjNSSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_contai if (implicit) { Jacobian.SubtractBlock2Diag(iPoint, Jacobian_ii); for (iVar = 1; iVar <= nDim; iVar++) { - total_index = iPoint*nVar+iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } @@ -1527,7 +1526,7 @@ void CAdjNSSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_contai void CAdjNSSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { - unsigned long iVertex, iPoint, total_index; + unsigned long iVertex, iPoint; unsigned short iDim, iVar, jVar, jDim; su2double *d, q, *U, dVisc_T, rho, pressure, div_phi, force_stress, Sigma_5, phi[3] = {0.0,0.0,0.0}; @@ -1632,8 +1631,7 @@ void CAdjNSSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_cont nodes->SetSolution_Old(iPoint,iDim+1, phi[iDim]); if (implicit) { for (iVar = 1; iVar <= nDim; iVar++) { - total_index = iPoint*nVar+iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } @@ -1673,8 +1671,7 @@ void CAdjNSSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_cont nodes->SetSolution_Old(iPoint,nDim+1, q); if (implicit) { iVar = nDim+1; - total_index = iPoint*nVar+iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } /*--- Additional contributions to adjoint density (weak imposition) ---*/ diff --git a/SU2_CFD/src/solvers/CAdjTurbSolver.cpp b/SU2_CFD/src/solvers/CAdjTurbSolver.cpp index f680ea1ad6cd..bd5bfe3000ed 100644 --- a/SU2_CFD/src/solvers/CAdjTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjTurbSolver.cpp @@ -184,7 +184,7 @@ void CAdjTurbSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont LinSysRes.SetBlock_Zero(iPoint); /*--- Change rows of the Jacobian (includes 1 in the diagonal) ---*/ - Jacobian.DeleteValsRowi(iPoint); + Jacobian.DeleteValsRowi(iPoint, 0); } } @@ -208,7 +208,7 @@ void CAdjTurbSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_co LinSysRes.SetBlock_Zero(iPoint); /*--- Change rows of the Jacobian (includes 1 in the diagonal) ---*/ - Jacobian.DeleteValsRowi(iPoint); + Jacobian.DeleteValsRowi(iPoint, 0); } } @@ -455,7 +455,7 @@ void CAdjTurbSolver::Source_Residual(CGeometry *geometry, CSolver **solver_conta void CAdjTurbSolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { unsigned short iVar; - unsigned long iPoint, total_index; + unsigned long iPoint; su2double Delta, Vol; /*--- Set maximum residual to zero ---*/ @@ -479,11 +479,10 @@ void CAdjTurbSolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solv /*--- Right hand side of the system (-Residual) and initial guess (x = 0) ---*/ for (iVar = 0; iVar < nVar; iVar++) { - total_index = iPoint*nVar+iVar; - LinSysRes[total_index] = -LinSysRes[total_index]; - LinSysSol[total_index] = 0.0; - Residual_RMS[iVar] += LinSysRes[total_index]*LinSysRes[total_index]; - AddRes_Max(iVar, fabs(LinSysRes[total_index]), geometry->nodes->GetGlobalIndex(iPoint), geometry->nodes->GetCoord(iPoint)); + LinSysRes(iPoint, iVar) = -LinSysRes(iPoint, iVar); + LinSysSol(iPoint, iVar) = 0.0; + Residual_RMS[iVar] += LinSysRes(iPoint, iVar)*LinSysRes(iPoint, iVar); + AddRes_Max(iVar, fabs(LinSysRes(iPoint, iVar)), geometry->nodes->GetGlobalIndex(iPoint), geometry->nodes->GetCoord(iPoint)); } } @@ -492,9 +491,8 @@ void CAdjTurbSolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solv for (iPoint = nPointDomain; iPoint < nPoint; iPoint++) { for (iVar = 0; iVar < nVar; iVar++) { - total_index = iPoint*nVar + iVar; - LinSysRes[total_index] = 0.0; - LinSysSol[total_index] = 0.0; + LinSysRes(iPoint, iVar) = 0.0; + LinSysSol(iPoint, iVar) = 0.0; } } diff --git a/SU2_CFD/src/solvers/CFEASolver.cpp b/SU2_CFD/src/solvers/CFEASolver.cpp index 93184cd14075..eb13264f6225 100644 --- a/SU2_CFD/src/solvers/CFEASolver.cpp +++ b/SU2_CFD/src/solvers/CFEASolver.cpp @@ -1296,9 +1296,7 @@ void CFEASolver::Compute_NodalStress(CGeometry *geometry, CNumerics **numerics, maxVonMises = max(maxVonMises, vms); } END_SU2_OMP_FOR - SU2_OMP_CRITICAL - MaxVonMises_Stress = max(MaxVonMises_Stress, maxVonMises); - END_SU2_OMP_CRITICAL + atomicMax(maxVonMises, MaxVonMises_Stress); AD::EndPassive(wasActive); diff --git a/SU2_CFD/src/solvers/CHeatSolver.cpp b/SU2_CFD/src/solvers/CHeatSolver.cpp index f0eaf3562713..c4c19244fc79 100644 --- a/SU2_CFD/src/solvers/CHeatSolver.cpp +++ b/SU2_CFD/src/solvers/CHeatSolver.cpp @@ -566,7 +566,7 @@ void CHeatSolver::BC_ConjugateHeat_Interface(CGeometry *geometry, CSolver **solv LinSysRes(iPoint, 0) = 0.0; nodes->SetRes_TruncErrorZero(iPoint); - if (implicit) Jacobian.DeleteValsRowi(iPoint); + if (implicit) Jacobian.DeleteValsRowi(iPoint, 0); } } END_SU2_OMP_FOR @@ -848,13 +848,8 @@ void CHeatSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, } END_SU2_OMP_FOR /*--- Min/max over threads. ---*/ - SU2_OMP_CRITICAL - { - Min_Delta_Time = min(Min_Delta_Time, minDt); - Max_Delta_Time = max(Max_Delta_Time, maxDt); - Global_Delta_Time = Min_Delta_Time; - } - END_SU2_OMP_CRITICAL + atomicMin(minDt, Min_Delta_Time); + atomicMax(maxDt, Max_Delta_Time); } /*--- Compute the min/max dt (in parallel, now over mpi ranks). ---*/ @@ -868,6 +863,7 @@ void CHeatSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, SU2_MPI::Allreduce(&Max_Delta_Time, &rbuf_time, 1, MPI_DOUBLE, MPI_MAX, SU2_MPI::GetComm()); Max_Delta_Time = rbuf_time; } + Global_Delta_Time = Min_Delta_Time; } END_SU2_OMP_SAFE_GLOBAL_ACCESS /*--- For exact time solution use the minimum delta time of the whole mesh. ---*/ @@ -914,9 +910,7 @@ void CHeatSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, glbDtND = min(glbDtND, config->GetUnst_CFL()*Global_Delta_Time / nodes->GetLocalCFL(iPoint)); } END_SU2_OMP_FOR - SU2_OMP_CRITICAL - Global_Delta_UnstTimeND = min(Global_Delta_UnstTimeND, glbDtND); - END_SU2_OMP_CRITICAL + atomicMin(glbDtND, Global_Delta_UnstTimeND); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { diff --git a/SU2_CFD/src/solvers/CIncEulerSolver.cpp b/SU2_CFD/src/solvers/CIncEulerSolver.cpp index c99f87896c2d..5ba375e74896 100644 --- a/SU2_CFD/src/solvers/CIncEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CIncEulerSolver.cpp @@ -2006,9 +2006,7 @@ void CIncEulerSolver::SetBeta_Parameter(CGeometry *geometry, CSolver **solver_co maxVel2 = max(maxVel2, nodes->GetVelocity2(iPoint)); END_SU2_OMP_FOR - SU2_OMP_CRITICAL - MaxVel2 = max(MaxVel2, maxVel2); - END_SU2_OMP_CRITICAL + atomicMax(maxVel2, MaxVel2); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -2051,14 +2049,10 @@ void CIncEulerSolver::SetRangePressure(CGeometry *geometry, CSolver **solver_con } END_SU2_OMP_FOR - SU2_OMP_CRITICAL { - MinP = min(MinP, minP); - MaxP = max(MaxP, maxP); - } - END_SU2_OMP_CRITICAL + atomicMin(minP, MinP); + atomicMax(maxP, MaxP); - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { minP = MinP; SU2_MPI::Allreduce(&minP, &MinP, 1, MPI_DOUBLE, MPI_MAX, SU2_MPI::GetComm()); maxP = MaxP; diff --git a/SU2_CFD/src/solvers/CIncNSSolver.cpp b/SU2_CFD/src/solvers/CIncNSSolver.cpp index 7113ba92a51f..182fb133bb9a 100644 --- a/SU2_CFD/src/solvers/CIncNSSolver.cpp +++ b/SU2_CFD/src/solvers/CIncNSSolver.cpp @@ -492,7 +492,7 @@ void CIncNSSolver::BC_Wall_Generic(const CGeometry *geometry, const CConfig *con if (implicit) { for (unsigned short iVar = 1; iVar <= nDim; iVar++) - Jacobian.DeleteValsRowi(iPoint*nVar+iVar); + Jacobian.DeleteValsRowi(iPoint, iVar); } if (!energy) continue; @@ -644,8 +644,8 @@ void CIncNSSolver::BC_ConjugateHeat_Interface(CGeometry *geometry, CSolver **sol if (implicit) { for (unsigned short iVar = 1; iVar <= nDim; iVar++) - Jacobian.DeleteValsRowi(iPoint*nVar+iVar); - if (energy) Jacobian.DeleteValsRowi(iPoint*nVar+nDim+1); + Jacobian.DeleteValsRowi(iPoint, iVar); + if (energy) Jacobian.DeleteValsRowi(iPoint, nDim + 1); } if (!energy) continue; diff --git a/SU2_CFD/src/solvers/CMeshSolver.cpp b/SU2_CFD/src/solvers/CMeshSolver.cpp index 603b2e57d150..94792e9c1831 100644 --- a/SU2_CFD/src/solvers/CMeshSolver.cpp +++ b/SU2_CFD/src/solvers/CMeshSolver.cpp @@ -232,13 +232,9 @@ void CMeshSolver::SetMinMaxVolume(CGeometry *geometry, CConfig *config, bool upd if (ElemVolume <= 0.0) elCount++; } END_SU2_OMP_FOR - SU2_OMP_CRITICAL - { - MaxVolume = max(MaxVolume, maxVol); - MinVolume = min(MinVolume, minVol); - ElemCounter += elCount; - } - END_SU2_OMP_CRITICAL + atomicMax(maxVol, MaxVolume); + atomicMin(minVol, MinVolume); + atomicAdd(elCount, ElemCounter); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -367,12 +363,9 @@ void CMeshSolver::SetWallDistance(CGeometry *geometry, CConfig *config) { } END_SU2_OMP_FOR - SU2_OMP_CRITICAL - { - MaxDistance = max(MaxDistance, MaxDistance_Local); - MinDistance = min(MinDistance, MinDistance_Local); - } - END_SU2_OMP_CRITICAL + + atomicMax(MaxDistance_Local, MaxDistance); + atomicMin(MinDistance_Local, MinDistance); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { diff --git a/SU2_CFD/src/solvers/CNEMONSSolver.cpp b/SU2_CFD/src/solvers/CNEMONSSolver.cpp index ac4619145f52..44ede662420f 100644 --- a/SU2_CFD/src/solvers/CNEMONSSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMONSSolver.cpp @@ -313,8 +313,7 @@ void CNEMONSSolver::BC_HeatFluxNonCatalytic_Wall(CGeometry *geometry, if (implicit) { /*--- Enforce the no-slip boundary condition in a strong way ---*/ for (int iVar = nSpecies; iVar < nSpecies+nDim; iVar++) { - auto total_index = iPoint*nVar+iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } @@ -349,7 +348,7 @@ void CNEMONSSolver::BC_HeatFluxCatalytic_Wall(CGeometry *geometry, SU2_MPI::Error("BC_HEATFLUX with catalytic wall: Not operational in NEMO.", CURRENT_FUNCTION); //TODO: SCALE WITH EDDY VISC /*--- Local variables ---*/ - unsigned long iPoint, total_index; + unsigned long iPoint; su2double rho, Ys; su2double *Normal, Area; su2double *Ds, *dYdn, SdYdn; @@ -493,8 +492,7 @@ void CNEMONSSolver::BC_HeatFluxCatalytic_Wall(CGeometry *geometry, if (implicit) { /*--- Enforce the no-slip boundary condition in a strong way ---*/ for (auto iVar = nSpecies; iVar < nSpecies+nDim; iVar++) { - total_index = iPoint*nVar+iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } @@ -632,8 +630,7 @@ void CNEMONSSolver::BC_IsothermalNonCatalytic_Wall(CGeometry *geometry, Jacobian.SubtractBlock2Diag(iPoint, Jacobian_i); for (auto iVar = 1u; iVar <= nDim; iVar++) { - auto total_index = iPoint*nVar+iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } } diff --git a/SU2_CFD/src/solvers/CNSSolver.cpp b/SU2_CFD/src/solvers/CNSSolver.cpp index 7a1309027a65..bb2dfc268d21 100644 --- a/SU2_CFD/src/solvers/CNSSolver.cpp +++ b/SU2_CFD/src/solvers/CNSSolver.cpp @@ -563,8 +563,7 @@ void CNSSolver::BC_HeatFlux_Wall_Generic(const CGeometry* geometry, const CConfi } for (auto iVar = 1u; iVar <= nDim; iVar++) { - auto total_index = iPoint*nVar+iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } } @@ -755,8 +754,7 @@ void CNSSolver::BC_Isothermal_Wall_Generic(CGeometry *geometry, CSolver **solver Jacobian.AddBlock2Diag(iPoint, Jacobian_i); for (auto iVar = 1u; iVar <= nDim; iVar++) { - auto total_index = iPoint*nVar+iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } } diff --git a/SU2_CFD/src/solvers/CRadP1Solver.cpp b/SU2_CFD/src/solvers/CRadP1Solver.cpp index 14eac91f2d65..dacf863afc13 100644 --- a/SU2_CFD/src/solvers/CRadP1Solver.cpp +++ b/SU2_CFD/src/solvers/CRadP1Solver.cpp @@ -491,7 +491,7 @@ void CRadP1Solver::BC_Marshak(CGeometry *geometry, CSolver **solver_container, C void CRadP1Solver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { unsigned short iVar; - unsigned long iPoint, total_index, IterLinSol = 0; + unsigned long iPoint, IterLinSol = 0; su2double Vol; su2double Delta; @@ -516,19 +516,17 @@ void CRadP1Solver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver else { Jacobian.SetVal2Diag(iPoint, 1.0); for (iVar = 0; iVar < nVar; iVar++) { - total_index = iPoint*nVar + iVar; - LinSysRes[total_index] = 0.0; + LinSysRes(iPoint, iVar) = 0.0; } } /*--- Right hand side of the system (-Residual) and initial guess (x = 0) ---*/ for (iVar = 0; iVar < nVar; iVar++) { - total_index = iPoint*nVar+iVar; - LinSysRes[total_index] = - (LinSysRes[total_index]); - LinSysSol[total_index] = 0.0; - Residual_RMS[iVar] += LinSysRes[total_index]*LinSysRes[total_index]; - AddRes_Max(iVar, fabs(LinSysRes[total_index]), geometry->nodes->GetGlobalIndex(iPoint), geometry->nodes->GetCoord(iPoint)); + LinSysRes(iPoint, iVar) = -LinSysRes(iPoint, iVar); + LinSysSol(iPoint, iVar) = 0.0; + Residual_RMS[iVar] += LinSysRes(iPoint, iVar)*LinSysRes(iPoint, iVar); + AddRes_Max(iVar, fabs(LinSysRes(iPoint, iVar)), geometry->nodes->GetGlobalIndex(iPoint), geometry->nodes->GetCoord(iPoint)); } } @@ -536,9 +534,8 @@ void CRadP1Solver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver for (iPoint = nPointDomain; iPoint < nPoint; iPoint++) { for (iVar = 0; iVar < nVar; iVar++) { - total_index = iPoint*nVar + iVar; - LinSysRes[total_index] = 0.0; - LinSysSol[total_index] = 0.0; + LinSysRes(iPoint, iVar) = 0.0; + LinSysSol(iPoint, iVar) = 0.0; } } diff --git a/SU2_CFD/src/solvers/CSolver.cpp b/SU2_CFD/src/solvers/CSolver.cpp index 0d6fd898b9d3..58f8c90e2bc3 100644 --- a/SU2_CFD/src/solvers/CSolver.cpp +++ b/SU2_CFD/src/solvers/CSolver.cpp @@ -1014,7 +1014,7 @@ void CSolver::CompletePeriodicComms(CGeometry *geometry, unsigned short nPeriodic = config->GetnMarker_Periodic(); unsigned short iDim, jDim, iVar, jVar, iPeriodic, nNeighbor; - unsigned long iPoint, iRecv, nRecv, msg_offset, buf_offset, total_index; + unsigned long iPoint, iRecv, nRecv, msg_offset, buf_offset; int source, iMessage, jRecv; @@ -1159,8 +1159,7 @@ void CSolver::CompletePeriodicComms(CGeometry *geometry, if (iPeriodic == val_periodic_index + nPeriodic/2) { for (iVar = 0; iVar < nVar; iVar++) { LinSysRes(iPoint, iVar) = 0.0; - total_index = iPoint*nVar+iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } @@ -1932,13 +1931,9 @@ void CSolver::AdaptCFLNumber(CGeometry **geometry, /* Reduce the min/max/avg local CFL numbers. */ if ((iMesh == MESH_0) && fullComms) { - SU2_OMP_CRITICAL - { /* OpenMP reduction. */ - Min_CFL_Local = min(Min_CFL_Local,myCFLMin); - Max_CFL_Local = max(Max_CFL_Local,myCFLMax); - Avg_CFL_Local += myCFLSum; - } - END_SU2_OMP_CRITICAL + atomicMin(myCFLMin, Min_CFL_Local); + atomicMax(myCFLMax, Max_CFL_Local); + atomicAdd(myCFLSum, Avg_CFL_Local); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { /* MPI reduction. */ diff --git a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp index afc8ed5e2e52..d2143ba8d1d8 100644 --- a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp @@ -214,7 +214,7 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** for (unsigned long i_mesh = 0; i_mesh <= config->GetnMGLevels(); i_mesh++) { fluid_model_local = solver_container[i_mesh][FLOW_SOL]->GetFluidModel(); if (flame_front_ignition) prog_burnt = GetBurntProgressVariable(fluid_model_local, scalar_init); - + for (auto iVar = 0u; iVar < nVar; iVar++) scalar_init[iVar] = config->GetSpecies_Init()[iVar]; /*--- Set enthalpy based on initial temperature and scalars. ---*/ @@ -460,8 +460,7 @@ void CSpeciesFlameletSolver::BC_Isothermal_Wall_Generic(CGeometry* geometry, CSo nodes->SetVal_ResTruncError_Zero(iPoint, I_ENTH); if (implicit) { - unsigned long total_index = iPoint * nVar + I_ENTH; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, I_ENTH); } } else { /*--- Weak BC formulation. ---*/ diff --git a/SU2_CFD/src/solvers/CSpeciesSolver.cpp b/SU2_CFD/src/solvers/CSpeciesSolver.cpp index e1b65c56f823..8966ca3da319 100644 --- a/SU2_CFD/src/solvers/CSpeciesSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesSolver.cpp @@ -357,15 +357,14 @@ void CSpeciesSolver::BC_Inlet(CGeometry* geometry, CSolver** solver_container, C if (!geometry->nodes->GetDomain(iPoint)) continue; - if (config->GetMarker_StrongBC(Marker_Tag)==true) { + if (config->GetMarker_StrongBC(Marker_Tag)) { nodes->SetSolution_Old(iPoint, Inlet_SpeciesVars[val_marker][iVertex]); LinSysRes.SetBlock_Zero(iPoint); /*--- Includes 1 in the diagonal ---*/ for (auto iVar = 0u; iVar < nVar; iVar++) { - auto total_index = iPoint * nVar + iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } else { // weak BC /*--- Normal vector for this vertex (negate for outward convention) ---*/ @@ -473,8 +472,7 @@ void CSpeciesSolver::BC_Wall_Generic(CGeometry* geometry, CSolver** solver_conta nodes->SetSolution_Old(iPoint, iVar, WallSpecies); LinSysRes(iPoint, iVar) = 0.0; if (implicit) { - unsigned long total_index = iPoint * nVar + iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } break; } @@ -547,8 +545,7 @@ void CSpeciesSolver::BC_Outlet(CGeometry* geometry, CSolver** solver_container, /*--- Includes 1 on the diagonal ---*/ for (auto iVar = 0u; iVar < nVar; iVar++) { - auto total_index = iPoint * nVar + iVar; - Jacobian.DeleteValsRowi(total_index); + Jacobian.DeleteValsRowi(iPoint, iVar); } } else { // weak BC diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp index 635d52a067a7..7e0ebaed9d81 100644 --- a/SU2_CFD/src/solvers/CTurbSASolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp @@ -301,7 +301,7 @@ void CTurbSASolver::Viscous_Residual(const unsigned long iEdge, const CGeometry* /*--- Roughness heights. ---*/ numerics->SetRoughness(geometry->nodes->GetRoughnessHeight(iPoint), geometry->nodes->GetRoughnessHeight(jPoint)); }; - + /*--- Now instantiate the generic non-conservative implementation with the functor above. ---*/ Viscous_Residual_NonCons(iEdge, geometry, solver_container, numerics, config, SolverSpecificNumerics); @@ -479,7 +479,7 @@ void CTurbSASolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_conta /*--- Includes 1 in the diagonal ---*/ - if (implicit) Jacobian.DeleteValsRowi(iPoint); + if (implicit) Jacobian.DeleteValsRowi(iPoint, 0); } else { /*--- For rough walls, the boundary condition is given by * (\frac{\partial \nu}{\partial n})_wall = \frac{\nu}{0.03*k_s} @@ -1342,7 +1342,7 @@ void CTurbSASolver::SetTurbVars_WF(CGeometry *geometry, CSolver **solver_contain /*--- includes 1 in the diagonal ---*/ - if (implicit) Jacobian.DeleteValsRowi(iPoint_Neighbor); + if (implicit) Jacobian.DeleteValsRowi(iPoint_Neighbor, 0); } } } diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index 91e18e49001e..e5e845abf7a0 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -505,8 +505,8 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont if (implicit) { /*--- Change rows of the Jacobian (includes 1 in the diagonal) ---*/ - Jacobian.DeleteValsRowi(iPoint*nVar); - Jacobian.DeleteValsRowi(iPoint*nVar+1); + Jacobian.DeleteValsRowi(iPoint, 0); + Jacobian.DeleteValsRowi(iPoint, 1); } } END_SU2_OMP_FOR @@ -568,8 +568,8 @@ void CTurbSSTSolver::SetTurbVars_WF(CGeometry *geometry, CSolver **solver_contai if (implicit) { /*--- includes 1 in the diagonal ---*/ - Jacobian.DeleteValsRowi(iPoint_Neighbor*nVar); - Jacobian.DeleteValsRowi(iPoint_Neighbor*nVar+1); + Jacobian.DeleteValsRowi(iPoint_Neighbor, 0); + Jacobian.DeleteValsRowi(iPoint_Neighbor, 1); } } } diff --git a/SU2_CFD/src/solvers/CTurbSolver.cpp b/SU2_CFD/src/solvers/CTurbSolver.cpp index f74f2fdefad1..609bc3daaeed 100644 --- a/SU2_CFD/src/solvers/CTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSolver.cpp @@ -229,7 +229,7 @@ void CTurbSolver::Impose_Fixed_Values(const CGeometry *geometry, const CConfig * if (implicit) { /*--- Change rows of the Jacobian (includes 1 in the diagonal) ---*/ for(unsigned long iVar=0; iVar Date: Sat, 28 Mar 2026 18:19:12 -0700 Subject: [PATCH 175/229] [skip ci] --- Common/src/grid_movement/CLinearElasticity.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Common/src/grid_movement/CLinearElasticity.cpp b/Common/src/grid_movement/CLinearElasticity.cpp index 462d14a624f4..6ce11a65422a 100644 --- a/Common/src/grid_movement/CLinearElasticity.cpp +++ b/Common/src/grid_movement/CLinearElasticity.cpp @@ -1384,9 +1384,9 @@ void CLinearElasticity::SetBoundaryDisplacements(CGeometry* geometry, CConfig* c iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); VarCoord = geometry->vertex[iMarker][iVertex]->GetVarCoord(); for (iDim = 0; iDim < nDim; iDim++) { - LinSysRes(iPoint, axis) = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); - LinSysSol(iPoint, axis) = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); - StiffMatrix.DeleteValsRowi(iPoint, axis); + LinSysRes(iPoint, iDim) = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); + LinSysSol(iPoint, iDim) = SU2_TYPE::GetValue(VarCoord[iDim] * VarIncrement); + StiffMatrix.DeleteValsRowi(iPoint, iDim); } } } From c30d84a64fe858d3d07d2879a73ebc11af54213f Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 28 Mar 2026 18:22:29 -0700 Subject: [PATCH 176/229] fix --- Common/include/parallelization/omp_structure.hpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Common/include/parallelization/omp_structure.hpp b/Common/include/parallelization/omp_structure.hpp index 8066c3d9e4ae..52ffe77a7892 100644 --- a/Common/include/parallelization/omp_structure.hpp +++ b/Common/include/parallelization/omp_structure.hpp @@ -276,11 +276,13 @@ inline void atomicAdd(T rhs, T& lhs) { lhs += rhs; } -/*--- GCC supported atomic compare (for min/max) before the official date. ---*/ +/*--- GCC supported atomic compare (for min/max) before it was fully 5.1 compliant. ---*/ +#define ATOMIC_COMPARE_SINCE 202011 #ifdef __GNUC__ +#if __GNUC__ > 11 +#undef ATOMIC_COMPARE_SINCE #define ATOMIC_COMPARE_SINCE 201511 -#else -#define ATOMIC_COMPARE_SINCE 202011 +#endif #endif /*--- By default the min/max fallback to critical is required for all types. ---*/ From f75561347a9c35a9cd2f659dd2a211f725884672 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 28 Mar 2026 22:03:29 -0700 Subject: [PATCH 177/229] fix --- .../include/parallelization/mpi_structure.cpp | 29 ++++++++++++++----- .../include/parallelization/mpi_structure.hpp | 25 +++++++++++----- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/Common/include/parallelization/mpi_structure.cpp b/Common/include/parallelization/mpi_structure.cpp index d491e6a77a3a..9b7a1b95d3b6 100644 --- a/Common/include/parallelization/mpi_structure.cpp +++ b/Common/include/parallelization/mpi_structure.cpp @@ -29,14 +29,18 @@ #include // memcpy /* Initialise the MPI Communicator Rank and Size */ -int CBaseMPIWrapper::Rank = 0; -int CBaseMPIWrapper::Size = 1; +template +int CBaseMPIWrapper::Rank = 0; + +template +int CBaseMPIWrapper::Size = 1; /* Set the default MPI Communicator */ #ifdef HAVE_MPI CBaseMPIWrapper::Comm CBaseMPIWrapper::currentComm = MPI_COMM_WORLD; #else -CBaseMPIWrapper::Comm CBaseMPIWrapper::currentComm = 0; // dummy value +template +typename CBaseMPIWrapper::Comm CBaseMPIWrapper::currentComm = 0; // dummy value #endif #ifdef HAVE_MPI @@ -122,7 +126,8 @@ void CBaseMPIWrapper::CopyData(const void* sendbuf, void* recvbuf, int size, Dat } #else // HAVE_MPI -void CBaseMPIWrapper::Error(std::string ErrorMsg, std::string FunctionName) { +template +void CBaseMPIWrapper::Error(const std::string& ErrorMsg, const std::string& FunctionName) { if (Rank == 0) { std::cout << std::endl << std::endl; std::cout << "Error in \"" << FunctionName << "\": " << std::endl; @@ -134,12 +139,13 @@ void CBaseMPIWrapper::Error(std::string ErrorMsg, std::string FunctionName) { Abort(currentComm, 0); } -void CBaseMPIWrapper::CopyData(const void* sendbuf, void* recvbuf, int size, Datatype datatype, int recvshift, - int sendshift) { +template +void CBaseMPIWrapper::CopyData(const void* sendbuf, void* recvbuf, int size, Datatype datatype, + int recvshift, int sendshift) { switch (datatype) { case MPI_DOUBLE: for (int i = 0; i < size; i++) { - static_cast(recvbuf)[i + recvshift] = static_cast(sendbuf)[i + sendshift]; + static_cast(recvbuf)[i + recvshift] = static_cast(sendbuf)[i + sendshift]; } break; case MPI_UNSIGNED_LONG: @@ -178,7 +184,16 @@ void CBaseMPIWrapper::CopyData(const void* sendbuf, void* recvbuf, int size, Dat break; }; } + +template class CBaseMPIWrapper; +#if defined CODI_REVERSE_TYPE +template class CBaseMPIWrapper; #endif +#if defined USE_MIXED_PRECISION +template class CBaseMPIWrapper; +#endif + +#endif // HAVE_MPI #ifdef HAVE_MPI #if defined CODI_REVERSE_TYPE || defined CODI_FORWARD_TYPE diff --git a/Common/include/parallelization/mpi_structure.hpp b/Common/include/parallelization/mpi_structure.hpp index f6d09423daee..b4da055bb0d8 100644 --- a/Common/include/parallelization/mpi_structure.hpp +++ b/Common/include/parallelization/mpi_structure.hpp @@ -489,6 +489,7 @@ class CMediMPIWrapper : public CBaseMPIWrapper { * \class CMPIWrapper * \brief Version for when there is no MPI. */ +template class CBaseMPIWrapper { public: typedef int Comm; @@ -510,7 +511,7 @@ class CBaseMPIWrapper { static void CopyData(const void* sendbuf, void* recvbuf, int size, Datatype datatype, int recvshift = 0, int sendshift = 0); - static void Error(std::string ErrorMsg, std::string FunctionName); + static void Error(const std::string& ErrorMsg, const std::string& FunctionName); static inline int GetRank() { return Rank; } @@ -607,27 +608,37 @@ class CBaseMPIWrapper { static inline passivedouble Wtime(void) { return omp_get_wtime(); } }; -typedef int SU2_Comm; -typedef CBaseMPIWrapper SU2_MPI; +using SU2_Comm = int; +using SU2_MPI = CBaseMPIWrapper; #endif /*--- Select the appropriate MPI wrapper based on datatype, to use in templated classes. ---*/ template struct SelectMPIWrapper { - typedef SU2_MPI W; + using W = SU2_MPI; }; /*--- In AD we specialize for the passive wrapper. ---*/ #if defined CODI_REVERSE_TYPE template <> struct SelectMPIWrapper { - typedef CBaseMPIWrapper W; +#if HAVE_MPI + using W = CBaseMPIWrapper; +#else + using W = CBaseMPIWrapper; +#endif }; +#endif + +/*--- Specialize for the low precision type. ---*/ #if defined USE_MIXED_PRECISION template <> struct SelectMPIWrapper { - typedef CBaseMPIWrapper W; -}; +#if HAVE_MPI + using W = CBaseMPIWrapper; +#else + using W = CBaseMPIWrapper; #endif +}; #endif From 09e6632d6da6d609eeef17232c2700ba4cfdab69 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 29 Mar 2026 17:06:31 -0700 Subject: [PATCH 178/229] fix --- Common/include/parallelization/mpi_structure.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Common/include/parallelization/mpi_structure.cpp b/Common/include/parallelization/mpi_structure.cpp index 9b7a1b95d3b6..ae9a0ee25aef 100644 --- a/Common/include/parallelization/mpi_structure.cpp +++ b/Common/include/parallelization/mpi_structure.cpp @@ -28,17 +28,18 @@ #include "mpi_structure.hpp" #include // memcpy -/* Initialise the MPI Communicator Rank and Size */ +/* Initialise the MPI Communicator Rank, Size, and default MPI Communicator */ +#ifdef HAVE_MPI +int CBaseMPIWrapper::Rank = 0; +int CBaseMPIWrapper::Size = 1; +CBaseMPIWrapper::Comm CBaseMPIWrapper::currentComm = MPI_COMM_WORLD; +#else template int CBaseMPIWrapper::Rank = 0; template int CBaseMPIWrapper::Size = 1; -/* Set the default MPI Communicator */ -#ifdef HAVE_MPI -CBaseMPIWrapper::Comm CBaseMPIWrapper::currentComm = MPI_COMM_WORLD; -#else template typename CBaseMPIWrapper::Comm CBaseMPIWrapper::currentComm = 0; // dummy value #endif From 5cb9bce5521657c76f0a6afbc30b6edcaf60ba08 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 29 Mar 2026 17:12:10 -0700 Subject: [PATCH 179/229] 24.04 containers --- .github/workflows/regression.yml | 48 ++++++++++++------------ .github/workflows/release-management.yml | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index cb7d6cca23ce..ecaa137cb4e5 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -54,12 +54,12 @@ jobs: key: ${{ matrix.config_set }}-${{ github.sha }} restore-keys: ${{ matrix.config_set }} - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/build-su2:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Build - uses: docker://ghcr.io/su2code/su2/build-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/build-su2:260329-0132 with: args: -b ${{github.ref}} -f "${{matrix.flags}}" - name: Compress binaries @@ -70,7 +70,7 @@ jobs: name: ${{ matrix.config_set }} path: install_bin.tgz - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/build-su2:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -97,12 +97,12 @@ jobs: key: ${{ matrix.config_set }}-${{ github.sha }} restore-keys: ${{ matrix.config_set }} - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-tsan:250717-1402 + uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Build - uses: docker://ghcr.io/su2code/su2/build-su2-tsan:250717-1402 + uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260329-0132 with: args: -b ${{github.ref}} -f "${{matrix.flags}}" - name: Compress binaries @@ -113,7 +113,7 @@ jobs: name: ${{ matrix.config_set }} path: install_bin.tgz - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-tsan:250717-1402 + uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -137,12 +137,12 @@ jobs: key: ${{ matrix.config_set }}-${{ github.sha }} restore-keys: ${{ matrix.config_set }} - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-asan:250717-1402 + uses: docker://ghcr.io/su2code/su2/build-su2-asan:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Build - run: docker run --rm --cap-add SYS_PTRACE -v $(pwd):${{ github.workspace }} -w ${{ github.workspace }} ghcr.io/su2code/su2/build-su2-asan:250717-1402 -b ${{github.ref}} -f "${{matrix.flags}}" + run: docker run --rm --cap-add SYS_PTRACE -v $(pwd):${{ github.workspace }} -w ${{ github.workspace }} ghcr.io/su2code/su2/build-su2-asan:260329-0132 -b ${{github.ref}} -f "${{matrix.flags}}" - name: Compress binaries run: tar -zcvf install_bin.tgz install/* - name: Upload Binaries @@ -151,7 +151,7 @@ jobs: name: ${{ matrix.config_set }} path: install_bin.tgz - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-asan:250717-1402 + uses: docker://ghcr.io/su2code/su2/build-su2-asan:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -182,7 +182,7 @@ jobs: tag: OMP steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -208,12 +208,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -231,7 +231,7 @@ jobs: tag: TagNoMPI steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -257,12 +257,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--tapetests" - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -277,7 +277,7 @@ jobs: testscript: ['hybrid_regression.py', 'hybrid_regression_AD.py'] steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-tsan:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -303,12 +303,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2-tsan:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260329-0132 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--tsan" - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-tsan:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -322,7 +322,7 @@ jobs: testscript: ['serial_regression.py', 'serial_regression_AD.py'] steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-asan:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2-asan:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -348,12 +348,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2-asan:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2-asan:260329-0132 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--asan" - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-asan:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2-asan:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -374,7 +374,7 @@ jobs: tag: MPI steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -435,11 +435,11 @@ jobs: echo $PWD ls -lahR - name: Run Unit Tests - uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 with: entrypoint: install/bin/${{matrix.testdriver}} - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 + uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} diff --git a/.github/workflows/release-management.yml b/.github/workflows/release-management.yml index b018716a3697..6f6ae7b0176f 100644 --- a/.github/workflows/release-management.yml +++ b/.github/workflows/release-management.yml @@ -35,7 +35,7 @@ jobs: key: ${{ matrix.os_bin }}-${{ github.sha }} restore-keys: ${{ matrix.os_bin }} - name: Build - uses: docker://ghcr.io/su2code/su2/build-su2-cross:250717-1402 + uses: docker://ghcr.io/su2code/su2/build-su2-cross:260329-0132 with: args: -b ${{ github.sha }} -f "${{matrix.flags}}" - name: Create Archive From b62c0402ac1136f6c87f936a62e55515a4b43a4a Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 29 Mar 2026 17:34:33 -0700 Subject: [PATCH 180/229] fix --- Common/include/parallelization/mpi_structure.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Common/include/parallelization/mpi_structure.hpp b/Common/include/parallelization/mpi_structure.hpp index b4da055bb0d8..d19cfe8c2372 100644 --- a/Common/include/parallelization/mpi_structure.hpp +++ b/Common/include/parallelization/mpi_structure.hpp @@ -623,7 +623,7 @@ struct SelectMPIWrapper { #if defined CODI_REVERSE_TYPE template <> struct SelectMPIWrapper { -#if HAVE_MPI +#if defined HAVE_MPI using W = CBaseMPIWrapper; #else using W = CBaseMPIWrapper; @@ -635,7 +635,7 @@ struct SelectMPIWrapper { #if defined USE_MIXED_PRECISION template <> struct SelectMPIWrapper { -#if HAVE_MPI +#if defined HAVE_MPI using W = CBaseMPIWrapper; #else using W = CBaseMPIWrapper; From c461519d1f11f654fff4f6ec4590f6e3b2bee2ee Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 29 Mar 2026 17:42:21 -0700 Subject: [PATCH 181/229] disable error for cgns --- externals/cgns/hdf5/meson.build | 3 ++- externals/cgns/meson.build | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/externals/cgns/hdf5/meson.build b/externals/cgns/hdf5/meson.build index 782e1771a289..04c23a39f158 100644 --- a/externals/cgns/hdf5/meson.build +++ b/externals/cgns/hdf5/meson.build @@ -16,7 +16,8 @@ if target_machine.system() != 'windows' and cc.get_id() != 'intel' '-Wno-pedantic', '-Wno-error=stringop-truncation', '-Wno-error=cast-function-type', - '-Wno-stringop-truncation'] + '-Wno-stringop-truncation', + '-Wno-dangling-pointer] foreach flag : desired_warnings if cc.has_argument(flag) hdf5_default_warnings += flag diff --git a/externals/cgns/meson.build b/externals/cgns/meson.build index 6444e810eb78..66c271f964f2 100644 --- a/externals/cgns/meson.build +++ b/externals/cgns/meson.build @@ -11,7 +11,8 @@ if build_machine.system() != 'windows' and meson.get_compiler('c').get_id() != ' '-Wno-error=stringop-truncation', '-Wno-stringop-truncation', '-Wno-error=absolute-value', - '-Wno-error=class-memaccess'] + '-Wno-error=class-memaccess', + '-Wno-dangling-pointer] foreach flag : desired_warnings if meson.get_compiler('c').has_argument(flag) cgns_default_warnings += flag From e727aaf30e55e0106be89936531ee38bf14b0cc3 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 29 Mar 2026 18:09:07 -0700 Subject: [PATCH 182/229] fix --- externals/cgns/hdf5/meson.build | 2 +- externals/cgns/meson.build | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/externals/cgns/hdf5/meson.build b/externals/cgns/hdf5/meson.build index 04c23a39f158..7336776640d7 100644 --- a/externals/cgns/hdf5/meson.build +++ b/externals/cgns/hdf5/meson.build @@ -17,7 +17,7 @@ if target_machine.system() != 'windows' and cc.get_id() != 'intel' '-Wno-error=stringop-truncation', '-Wno-error=cast-function-type', '-Wno-stringop-truncation', - '-Wno-dangling-pointer] + '-Wno-dangling-pointer'] foreach flag : desired_warnings if cc.has_argument(flag) hdf5_default_warnings += flag diff --git a/externals/cgns/meson.build b/externals/cgns/meson.build index 66c271f964f2..5dddfd70a20d 100644 --- a/externals/cgns/meson.build +++ b/externals/cgns/meson.build @@ -12,7 +12,7 @@ if build_machine.system() != 'windows' and meson.get_compiler('c').get_id() != ' '-Wno-stringop-truncation', '-Wno-error=absolute-value', '-Wno-error=class-memaccess', - '-Wno-dangling-pointer] + '-Wno-dangling-pointer'] foreach flag : desired_warnings if meson.get_compiler('c').has_argument(flag) cgns_default_warnings += flag From 88c6946f1804a5f2342bb0200914a4d389c03630 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 29 Mar 2026 19:35:19 -0700 Subject: [PATCH 183/229] ignore "some" warnings --- Common/include/code_config.hpp | 16 ++++++++++++++++ Common/include/containers/C2DContainer.hpp | 3 +++ Common/include/parallelization/omp_structure.hpp | 6 ------ Common/src/linear_algebra/CSysSolve.cpp | 10 ++++++---- externals/cgns/hdf5/meson.build | 3 ++- externals/cgns/meson.build | 7 ++++++- externals/tecio/meson.build | 6 +++--- externals/tecio/teciompisrc/meson.build | 7 ++++--- externals/tecio/teciosrc/meson.build | 3 ++- 9 files changed, 42 insertions(+), 19 deletions(-) diff --git a/Common/include/code_config.hpp b/Common/include/code_config.hpp index eafaa844d8f9..2585283d34d7 100644 --- a/Common/include/code_config.hpp +++ b/Common/include/code_config.hpp @@ -28,6 +28,12 @@ #include +#if defined(_MSC_VER) +#define PRAGMIZE(X) __pragma(X) +#else +#define PRAGMIZE(X) _Pragma(#X) +#endif + #if defined(_MSC_VER) #define FORCEINLINE __forceinline #elif defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) @@ -151,3 +157,13 @@ using su2mixedfloat = passivedouble; #define HAVE_OMPT #endif #endif + +#ifdef __GNUC__ +#define SU2_IGNORE_WARNING(WARNING) \ + PRAGMIZE(GCC diagnostic push) \ + PRAGMIZE(GCC diagnostic ignored WARNING) +#define SU2_RESTORE_WARNING PRAGMIZE(GCC diagnostic pop) +#else +#define SU2_IGNORE_WARNING(WARNING) +#define SU2_RESTORE_WARNING +#endif diff --git a/Common/include/containers/C2DContainer.hpp b/Common/include/containers/C2DContainer.hpp index ac45d182d563..b7489f767d7c 100644 --- a/Common/include/containers/C2DContainer.hpp +++ b/Common/include/containers/C2DContainer.hpp @@ -545,7 +545,10 @@ class C2DContainer * \brief Set value of all entries to "value". */ void setConstant(const Scalar_t& value) noexcept { + // GCC 13 has a false-positive about overflow of memcpy due to size being uint64_t, and its memcpy just int64_t. + SU2_IGNORE_WARNING("-Wstringop-overflow") for (size_t i = 0; i < size(); ++i) m_data[i] = value; + SU2_RESTORE_WARNING } /*! diff --git a/Common/include/parallelization/omp_structure.hpp b/Common/include/parallelization/omp_structure.hpp index 52ffe77a7892..3c9e5bca9816 100644 --- a/Common/include/parallelization/omp_structure.hpp +++ b/Common/include/parallelization/omp_structure.hpp @@ -43,12 +43,6 @@ #include "../code_config.hpp" -#if defined(_MSC_VER) -#define PRAGMIZE(X) __pragma(X) -#else -#define PRAGMIZE(X) _Pragma(#X) -#endif - #if defined(HAVE_OMP) #include diff --git a/Common/src/linear_algebra/CSysSolve.cpp b/Common/src/linear_algebra/CSysSolve.cpp index ae01000cf7f2..ce4543265464 100644 --- a/Common/src/linear_algebra/CSysSolve.cpp +++ b/Common/src/linear_algebra/CSysSolve.cpp @@ -25,10 +25,6 @@ * License along with SU2. If not, see . */ -#include "Eigen/Core" -#include "Eigen/Dense" -#include "Eigen/Eigenvalues" - #include "../../include/linear_algebra/CSysSolve.hpp" #include "../../include/linear_algebra/CSysSolve_b.hpp" #include "../../include/parallelization/omp_structure.hpp" @@ -38,6 +34,12 @@ #include "../../include/linear_algebra/CMatrixVectorProduct.hpp" #include "../../include/linear_algebra/CPreconditioner.hpp" +SU2_IGNORE_WARNING("-Wmaybe-uninitialized") +#include "Eigen/Core" +#include "Eigen/Dense" +#include "Eigen/Eigenvalues" +SU2_RESTORE_WARNING + #include #include #include diff --git a/externals/cgns/hdf5/meson.build b/externals/cgns/hdf5/meson.build index 7336776640d7..8b34eeebe708 100644 --- a/externals/cgns/hdf5/meson.build +++ b/externals/cgns/hdf5/meson.build @@ -17,7 +17,8 @@ if target_machine.system() != 'windows' and cc.get_id() != 'intel' '-Wno-error=stringop-truncation', '-Wno-error=cast-function-type', '-Wno-stringop-truncation', - '-Wno-dangling-pointer'] + '-Wno-dangling-pointer', + '-Wno-format-truncation'] foreach flag : desired_warnings if cc.has_argument(flag) hdf5_default_warnings += flag diff --git a/externals/cgns/meson.build b/externals/cgns/meson.build index 5dddfd70a20d..47885e893d7b 100644 --- a/externals/cgns/meson.build +++ b/externals/cgns/meson.build @@ -12,7 +12,12 @@ if build_machine.system() != 'windows' and meson.get_compiler('c').get_id() != ' '-Wno-stringop-truncation', '-Wno-error=absolute-value', '-Wno-error=class-memaccess', - '-Wno-dangling-pointer'] + '-Wno-dangling-pointer', + '-Wno-format-truncation', + '-Wno-maybe-uninitialized', + '-Wno-array-bounds', + '-Wno-array-parameter', + '-Wno-stringop-overflow'] foreach flag : desired_warnings if meson.get_compiler('c').has_argument(flag) cgns_default_warnings += flag diff --git a/externals/tecio/meson.build b/externals/tecio/meson.build index 3ff0218ff039..693984be4d2d 100644 --- a/externals/tecio/meson.build +++ b/externals/tecio/meson.build @@ -1,11 +1,11 @@ -check_dir = run_command(python, +check_dir = run_command(python, script_path / 'check_dir.py', 'boost') if check_dir.returncode() != 0 message('Extracting boost ...') - extract_boost = run_command(python, + extract_boost = run_command(python, script_path / 'extract_file.py', - 'boost.tar.gz', + 'boost.tar.gz', meson.current_source_dir(), check: true) else message('Boost sources found.') diff --git a/externals/tecio/teciompisrc/meson.build b/externals/tecio/teciompisrc/meson.build index 420447098369..2ec69f62545a 100644 --- a/externals/tecio/teciompisrc/meson.build +++ b/externals/tecio/teciompisrc/meson.build @@ -22,7 +22,8 @@ if build_machine.system() != 'windows' and meson.get_compiler('cpp').get_id() != '-Wno-error=deprecated-copy', '-Wno-deprecated-copy', '-Wno-error=cast-function-type', - '-Wno-cast-function-type'] + '-Wno-cast-function-type', + '-Wno-free-nonheap-object'] foreach flag : desired_warnings if meson.get_compiler('cpp').has_argument(flag) tec_cxx_flags += flag @@ -103,9 +104,9 @@ teciompi = static_library('teciompi', 'TecioSZL.cpp', 'exportSubzonePlt.cpp', install : false, - dependencies: [mpi_dep], + dependencies: [mpi_dep], cpp_args: [default_warning_flags, tec_cxx_flags], - include_directories: + include_directories: teciompi_include) teciompi_dep = declare_dependency(link_with: teciompi, diff --git a/externals/tecio/teciosrc/meson.build b/externals/tecio/teciosrc/meson.build index ab7e985549bf..1ee440754ce1 100644 --- a/externals/tecio/teciosrc/meson.build +++ b/externals/tecio/teciosrc/meson.build @@ -17,7 +17,8 @@ if build_machine.system() != 'windows' and meson.get_compiler('cpp').get_id() != '-Wno-uninitialized', '-Wno-placement-new', '-Wno-pedantic', - '-Wno-error=deprecated-copy'] + '-Wno-error=deprecated-copy', + '-Wno-free-nonheap-object'] foreach flag : desired_warnings if meson.get_compiler('cpp').has_argument(flag) tecio_cpp_flags += flag From b22a5ccf8156d026c96aa4d919f3fd852524456c Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 29 Mar 2026 21:10:49 -0700 Subject: [PATCH 184/229] one more for tecio and boost --- externals/tecio/teciompisrc/meson.build | 3 ++- externals/tecio/teciosrc/meson.build | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/externals/tecio/teciompisrc/meson.build b/externals/tecio/teciompisrc/meson.build index 2ec69f62545a..b3cd5d639806 100644 --- a/externals/tecio/teciompisrc/meson.build +++ b/externals/tecio/teciompisrc/meson.build @@ -23,7 +23,8 @@ if build_machine.system() != 'windows' and meson.get_compiler('cpp').get_id() != '-Wno-deprecated-copy', '-Wno-error=cast-function-type', '-Wno-cast-function-type', - '-Wno-free-nonheap-object'] + '-Wno-free-nonheap-object', + '-Wno-deprecated-copy'] foreach flag : desired_warnings if meson.get_compiler('cpp').has_argument(flag) tec_cxx_flags += flag diff --git a/externals/tecio/teciosrc/meson.build b/externals/tecio/teciosrc/meson.build index 1ee440754ce1..2a799e4baacc 100644 --- a/externals/tecio/teciosrc/meson.build +++ b/externals/tecio/teciosrc/meson.build @@ -18,7 +18,8 @@ if build_machine.system() != 'windows' and meson.get_compiler('cpp').get_id() != '-Wno-placement-new', '-Wno-pedantic', '-Wno-error=deprecated-copy', - '-Wno-free-nonheap-object'] + '-Wno-free-nonheap-object', + '-Wno-deprecated-copy'] foreach flag : desired_warnings if meson.get_compiler('cpp').has_argument(flag) tecio_cpp_flags += flag From c673a3fde1271b3474cd95a085f33148891d51d3 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 29 Mar 2026 21:22:41 -0700 Subject: [PATCH 185/229] tecplot writes good code --- externals/tecio/teciompisrc/meson.build | 3 ++- externals/tecio/teciosrc/meson.build | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/externals/tecio/teciompisrc/meson.build b/externals/tecio/teciompisrc/meson.build index b3cd5d639806..2598f078b8a3 100644 --- a/externals/tecio/teciompisrc/meson.build +++ b/externals/tecio/teciompisrc/meson.build @@ -24,7 +24,8 @@ if build_machine.system() != 'windows' and meson.get_compiler('cpp').get_id() != '-Wno-error=cast-function-type', '-Wno-cast-function-type', '-Wno-free-nonheap-object', - '-Wno-deprecated-copy'] + '-Wno-deprecated-copy', + '-Wno-array-bounds'] foreach flag : desired_warnings if meson.get_compiler('cpp').has_argument(flag) tec_cxx_flags += flag diff --git a/externals/tecio/teciosrc/meson.build b/externals/tecio/teciosrc/meson.build index 2a799e4baacc..caed8227519c 100644 --- a/externals/tecio/teciosrc/meson.build +++ b/externals/tecio/teciosrc/meson.build @@ -19,7 +19,8 @@ if build_machine.system() != 'windows' and meson.get_compiler('cpp').get_id() != '-Wno-pedantic', '-Wno-error=deprecated-copy', '-Wno-free-nonheap-object', - '-Wno-deprecated-copy'] + '-Wno-deprecated-copy', + '-Wno-array-bounds'] foreach flag : desired_warnings if meson.get_compiler('cpp').has_argument(flag) tecio_cpp_flags += flag From d5f73c895805c0543696fc25b3281c5042775aea Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 29 Mar 2026 21:44:52 -0700 Subject: [PATCH 186/229] damn gcc... --- meson.build | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index b5cb2d9b414e..16edb96eba74 100644 --- a/meson.build +++ b/meson.build @@ -40,7 +40,10 @@ if build_machine.system() != 'windows' '-Wno-error=missing-field-initializers', '-Wno-missing-field-initializers', '-Wno-error=class-memaccess', - '-Wno-class-memaccess'] + '-Wno-class-memaccess', + '-Wno-overloaded-virtual', + '-Wno-array-bounds', + '-Wno-dangling-pointer'] foreach flag : desired_warnings if meson.get_compiler('cpp').has_argument(flag) default_warning_flags += flag From 68526a84ef27d24e3f866075e3a3473e7a7ba0fa Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Mon, 30 Mar 2026 21:09:54 -0700 Subject: [PATCH 187/229] fix --- SU2_CFD/src/solvers/CSolver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SU2_CFD/src/solvers/CSolver.cpp b/SU2_CFD/src/solvers/CSolver.cpp index 58f8c90e2bc3..0ff0f125c1a1 100644 --- a/SU2_CFD/src/solvers/CSolver.cpp +++ b/SU2_CFD/src/solvers/CSolver.cpp @@ -4045,7 +4045,7 @@ void CSolver::ComputeVertexTractions(CGeometry *geometry, const CConfig *config) // Calculate tn in the fluid nodes for the viscous term if (viscous_flow) { const su2double Viscosity = base_nodes->GetLaminarViscosity(iPoint); - su2double Tau[3][3]; + su2double Tau[3][3] = {{}}; CNumerics::ComputeStressTensor(nDim, Tau, base_nodes->GetVelocityGradient(iPoint), Viscosity); for (unsigned short iDim = 0; iDim < nDim; iDim++) { auxForce[iDim] += GeometryToolbox::DotProduct(nDim, Tau[iDim], Normal); From e819eefee83f6255e5f72ff3731ff2cc925ad219 Mon Sep 17 00:00:00 2001 From: Soumyadipta Banerjee Date: Tue, 31 Mar 2026 19:09:53 +0530 Subject: [PATCH 188/229] Feature: Add ITER_TIME diagnostic field to terminal and history outputs --- SU2_CFD/include/output/COutput.hpp | 2 ++ SU2_CFD/src/output/COutput.cpp | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/SU2_CFD/include/output/COutput.hpp b/SU2_CFD/include/output/COutput.hpp index ce9e87379368..cf12c495e1a4 100644 --- a/SU2_CFD/include/output/COutput.hpp +++ b/SU2_CFD/include/output/COutput.hpp @@ -93,6 +93,8 @@ class COutput { curOuterIter, /*!< \brief Current value of the outer iteration index */ curInnerIter; /*!< \brief Current value of the inner iteration index */ + su2double PrevStopTime; /*!< \brief Previous stop time for iteration timing. */ + string historyFilename; /*!< \brief The history filename*/ ofstream histFile; /*!< \brief Output file stream for the history */ diff --git a/SU2_CFD/src/output/COutput.cpp b/SU2_CFD/src/output/COutput.cpp index fa7a00d4a8cd..a44073a788ee 100644 --- a/SU2_CFD/src/output/COutput.cpp +++ b/SU2_CFD/src/output/COutput.cpp @@ -71,6 +71,7 @@ COutput::COutput(const CConfig *config, unsigned short ndim, bool fem_output): cauchyTimeConverged = false; maxTimeDelayActive = false; + PrevStopTime = 0.0; convergenceTable = new PrintingToolbox::CTablePrinter(&std::cout); multiZoneHeaderTable = new PrintingToolbox::CTablePrinter(&std::cout); @@ -2087,6 +2088,8 @@ void COutput::SetCommonHistoryFields() { AddHistoryOutput("OUTER_ITER", "Outer_Iter", ScreenOutputFormat::INTEGER, "ITER", "Outer iteration index"); /// DESCRIPTION: The inner iteration index. AddHistoryOutput("INNER_ITER", "Inner_Iter", ScreenOutputFormat::INTEGER, "ITER", "Inner iteration index"); + /// DESCRIPTION: The current iteration calculation time. + AddHistoryOutput("ITER_TIME", "Time(s)", ScreenOutputFormat::FIXED, "ITER", "Time per iteration (s)"); /// END_GROUP /// BEGIN_GROUP: TIME_DOMAIN, DESCRIPTION: Time integration information @@ -2288,13 +2291,21 @@ void COutput::LoadCommonHistoryData(const CConfig *config) { SetHistoryOutputValue("INNER_ITER", curInnerIter); SetHistoryOutputValue("OUTER_ITER", curOuterIter); - su2double StopTime, UsedTime; + su2double StopTime, UsedTime, IterTime; StopTime = SU2_MPI::Wtime(); UsedTime = (StopTime - config->Get_StartTime())/(curInnerIter+1); + if (curInnerIter == 0) { + IterTime = StopTime - config->Get_StartTime(); // First iteration measured from start + } else { + IterTime = StopTime - PrevStopTime; + } + PrevStopTime = StopTime; + SetHistoryOutputValue("WALL_TIME", UsedTime); + SetHistoryOutputValue("ITER_TIME", IterTime); SetHistoryOutputValue("NONPHYSICAL_POINTS", config->GetNonphysical_Points()); } From 38fcab262fb4698c960ccb0bbb1675955b04d9a7 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Tue, 31 Mar 2026 13:06:10 -0700 Subject: [PATCH 189/229] one more maybe uninit --- SU2_CFD/include/numerics/CNumerics.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SU2_CFD/include/numerics/CNumerics.hpp b/SU2_CFD/include/numerics/CNumerics.hpp index cc9194997478..2531f01317ca 100644 --- a/SU2_CFD/include/numerics/CNumerics.hpp +++ b/SU2_CFD/include/numerics/CNumerics.hpp @@ -563,7 +563,7 @@ class CNumerics { NEVERINLINE static void ComputePerturbedRSM(size_t nDim, size_t uq_eigval_comp, bool uq_permute, su2double uq_delta_b, su2double uq_urlx, const Mat1& velgrad, Scalar density, Scalar viscosity, Scalar turb_ke, Mat2& MeanPerturbedRSM) { - Scalar MeanReynoldsStress[3][3]; + Scalar MeanReynoldsStress[3][3] = {{}}; ComputeStressTensor(nDim, MeanReynoldsStress, velgrad, viscosity, density, turb_ke, true); for (size_t iDim = 0; iDim < 3; iDim++) for (size_t jDim = 0; jDim < 3; jDim++) From e48ae87acdcdffbe9ede30027c70fcf1adb0ef60 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Thu, 2 Apr 2026 21:41:41 -0700 Subject: [PATCH 190/229] debug --- TestCases/hybrid_regression.py | 4 ++++ TestCases/parallel_regression.py | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index f217ff98a4a5..eddb1890a54c 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -28,6 +28,10 @@ # make print(*args) function available in PY2.6+, does'nt work on PY < 2.6 from __future__ import print_function +import os +os.environ["OMPI_MCA_osc"] = "pt2pt" +os.environ["OMPI_MCA_btl"] = "self,tcp" + import sys from TestCase import TestCase from TestCase import parse_args diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 5dbfde3f381e..fc6c4c6c025b 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -28,6 +28,10 @@ # make print(*args) function available in PY2.6+, does'nt work on PY < 2.6 from __future__ import print_function +import os +os.environ["OMPI_MCA_osc"] = "pt2pt" +os.environ["OMPI_MCA_btl"] = "self,tcp" + import sys from TestCase import TestCase From 87ea86b05e33473a62c82b4f6cfa79745ff31af5 Mon Sep 17 00:00:00 2001 From: Soumyadipta Banerjee Date: Tue, 31 Mar 2026 19:37:42 +0530 Subject: [PATCH 191/229] Feature: Add Iteration-level Wall-Clock Timing (ITER_TIME) --- SU2_CFD/src/output/COutput.cpp | 6 ++++-- config_template.cfg | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/SU2_CFD/src/output/COutput.cpp b/SU2_CFD/src/output/COutput.cpp index a44073a788ee..5702673118ad 100644 --- a/SU2_CFD/src/output/COutput.cpp +++ b/SU2_CFD/src/output/COutput.cpp @@ -2088,8 +2088,6 @@ void COutput::SetCommonHistoryFields() { AddHistoryOutput("OUTER_ITER", "Outer_Iter", ScreenOutputFormat::INTEGER, "ITER", "Outer iteration index"); /// DESCRIPTION: The inner iteration index. AddHistoryOutput("INNER_ITER", "Inner_Iter", ScreenOutputFormat::INTEGER, "ITER", "Inner iteration index"); - /// DESCRIPTION: The current iteration calculation time. - AddHistoryOutput("ITER_TIME", "Time(s)", ScreenOutputFormat::FIXED, "ITER", "Time per iteration (s)"); /// END_GROUP /// BEGIN_GROUP: TIME_DOMAIN, DESCRIPTION: Time integration information @@ -2098,8 +2096,12 @@ void COutput::SetCommonHistoryFields() { /// Description: The current time step AddHistoryOutput("TIME_STEP", "Time_Step", ScreenOutputFormat::SCIENTIFIC, "TIME_DOMAIN", "Current time step (s)"); + /// BEGIN_GROUP: WALL_TIME, DESCRIPTION: Wall-clock timing information. + /// DESCRIPTION: The current iteration wall-clock time. + AddHistoryOutput("ITER_TIME", "Time(sec)", ScreenOutputFormat::FIXED, "WALL_TIME", "Time per iteration (s)"); /// DESCRIPTION: Currently used wall-clock time. AddHistoryOutput("WALL_TIME", "Time(sec)", ScreenOutputFormat::SCIENTIFIC, "WALL_TIME", "Average wall-clock time since the start of inner iterations."); + /// END_GROUP AddHistoryOutput("NONPHYSICAL_POINTS", "Nonphysical_Points", ScreenOutputFormat::INTEGER, "NONPHYSICAL_POINTS", "The number of non-physical points in the solution"); diff --git a/config_template.cfg b/config_template.cfg index 0dd67764bdf1..47b1ee28375a 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -2366,7 +2366,7 @@ GRAD_LINEAR_SOLVER_ERROR= 1E-14 % ------------------------- SCREEN/HISTORY VOLUME OUTPUT --------------------------% % % Screen output fields (use 'SU2_CFD -d ' to view list of available fields) -SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, RMS_MOMENTUM-X, RMS_MOMENTUM-Y, RMS_ENERGY) +SCREEN_OUTPUT= (INNER_ITER, ITER_TIME, RMS_DENSITY, RMS_MOMENTUM-X, RMS_MOMENTUM-Y, RMS_ENERGY) % % History output groups (use 'SU2_CFD -d ' to view list of available fields) HISTORY_OUTPUT= (ITER, RMS_RES) From de430a3c8060160bc05491260ceba8d9b91b72c7 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Fri, 3 Apr 2026 15:53:18 -0700 Subject: [PATCH 192/229] debug more --- TestCases/parallel_regression.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index fc6c4c6c025b..a040225d5a13 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -30,16 +30,20 @@ import os os.environ["OMPI_MCA_osc"] = "pt2pt" -os.environ["OMPI_MCA_btl"] = "self,tcp" +os.environ["OMPI_MCA_btl"] = "self,vader,tcp" import sys from TestCase import TestCase +import subprocess + def main(): '''This program runs SU2 and ensures that the output matches specified values. This will be used to do checks when code is pushed to github to make sure nothing is broken. ''' + subprocess.run(['df', '-h', '/dev/shm']) + test_list = [] ####################### From f6f87dd609be6f2b0e0bedcb307f286fae630251 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Fri, 3 Apr 2026 16:22:00 -0700 Subject: [PATCH 193/229] debug more --- TestCases/parallel_regression.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index a040225d5a13..d037ea646818 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -42,7 +42,19 @@ def main(): This will be used to do checks when code is pushed to github to make sure nothing is broken. ''' - subprocess.run(['df', '-h', '/dev/shm']) + result = subprocess.run( + ['df', '-h', '/dev/shm'], + capture_output=True, + text=True + ) + + print("STDOUT:") + print(result.stdout) + + print("STDERR:") + print(result.stderr) + + print("Return code:", result.returncode) test_list = [] From b0d6a948664e291a46cb38b3a0b503ff8ad29d82 Mon Sep 17 00:00:00 2001 From: Sahil_Kumar Date: Sat, 4 Apr 2026 06:35:27 +0000 Subject: [PATCH 194/229] Add restart file support and update test_vals from developed flow - Add RESTART_SOL=YES, SOLUTION_FILENAME=solution_flow, READ_BINARY_RESTART=NO, RESTART_ITER=2 to all three configs - Update regression test_vals extracted from restart at developed periodic flow RANS (t=90): [-4.799603, -7.374477, -0.005421, 0.008293] Euler (t=98): [-4.240073, 1.280267, -0.040141, 0.000887] Plunging (t=98): [-5.829829, -0.258459, 0.888444, -0.124558] - Solution files submitted via separate PR to SU2/TestCases repo --- TestCases/serial_regression.py | 6 +++--- .../pitching_naca64a010_euler/pitching_NACA64A010.cfg | 6 ++++-- .../unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg | 6 ++++-- TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg | 4 +++- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 5965cc9fd534..e4962da31d55 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -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 = 1 - unst_pitching_naca64a010_rans.test_vals = [-2.474001, -6.039495, 0.031041, 0.053671] + unst_pitching_naca64a010_rans.test_vals = [-4.799603, -7.374477, -0.005421, 0.008293] 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 = 1 - unst_pitching_naca64a010_euler.test_vals = [-1.864773, 3.545935, 0.035685, 0.035843] + unst_pitching_naca64a010_euler.test_vals = [-4.240073, 1.280267, -0.040141, 0.000887] 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 = 1 - unst_plunging_naca0012.test_vals = [-5.248321, 0.372499, 2.100860, 6.212394] + unst_plunging_naca0012.test_vals = [-5.829829, -0.258459, 0.888444, -0.124558] unst_plunging_naca0012.unsteady = True test_list.append(unst_plunging_naca0012) diff --git a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg index 2ec7c7c9e8ee..6b1e3e7192b5 100644 --- a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg +++ b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg @@ -14,7 +14,7 @@ SOLVER= EULER KIND_TURB_MODEL= NONE MATH_PROBLEM= DIRECT -RESTART_SOL= NO +RESTART_SOL= YES % ------------------------- UNSTEADY SIMULATION -------------------------------% % @@ -132,7 +132,7 @@ CONV_CAUCHY_EPS= 1E-6 MESH_FILENAME= mesh_NACA64A010_inv.su2 MESH_FORMAT= SU2 MESH_OUT_FILENAME= mesh_out -SOLUTION_FILENAME= restart_flow +SOLUTION_FILENAME= solution_flow SOLUTION_ADJ_FILENAME= solution_adj TABULAR_FORMAT= CSV CONV_FILENAME= history @@ -151,3 +151,5 @@ OUTPUT_WRT_FREQ= 250 OPT_OBJECTIVE= DRAG * 0.001 OPT_CONSTRAINT= ( LIFT = 0.0 ) * 0.001; ( AREA > 0.0660957 ) * 0.001 DEFINITION_DV= ( 30, 1.0 | airfoil | 0, 0.961538461538 ); ( 30, 1.0 | airfoil | 0, 0.923076923077 ); ( 30, 1.0 | airfoil | 0, 0.884615384615 ); ( 30, 1.0 | airfoil | 0, 0.846153846154 ); ( 30, 1.0 | airfoil | 0, 0.807692307692 ); ( 30, 1.0 | airfoil | 0, 0.769230769231 ); ( 30, 1.0 | airfoil | 0, 0.730769230769 ); ( 30, 1.0 | airfoil | 0, 0.692307692308 ); ( 30, 1.0 | airfoil | 0, 0.653846153846 ); ( 30, 1.0 | airfoil | 0, 0.615384615385 ); ( 30, 1.0 | airfoil | 0, 0.576923076923 ); ( 30, 1.0 | airfoil | 0, 0.538461538462 ); ( 30, 1.0 | airfoil | 0, 0.5 ); ( 30, 1.0 | airfoil | 0, 0.461538461538 ); ( 30, 1.0 | airfoil | 0, 0.423076923077 ); ( 30, 1.0 | airfoil | 0, 0.384615384615 ); ( 30, 1.0 | airfoil | 0, 0.346153846154 ); ( 30, 1.0 | airfoil | 0, 0.307692307692 ); ( 30, 1.0 | airfoil | 0, 0.269230769231 ); ( 30, 1.0 | airfoil | 0, 0.230769230769 ); ( 30, 1.0 | airfoil | 0, 0.192307692308 ); ( 30, 1.0 | airfoil | 0, 0.153846153846 ); ( 30, 1.0 | airfoil | 0, 0.115384615385 ); ( 30, 1.0 | airfoil | 0, 0.0769230769231 ); ( 30, 1.0 | airfoil | 0, 0.0384615384615 ); ( 30, 1.0 | airfoil | 1, 0.0384615384615 ); ( 30, 1.0 | airfoil | 1, 0.0769230769231 ); ( 30, 1.0 | airfoil | 1, 0.115384615385 ); ( 30, 1.0 | airfoil | 1, 0.153846153846 ); ( 30, 1.0 | airfoil | 1, 0.192307692308 ); ( 30, 1.0 | airfoil | 1, 0.230769230769 ); ( 30, 1.0 | airfoil | 1, 0.269230769231 ); ( 30, 1.0 | airfoil | 1, 0.307692307692 ); ( 30, 1.0 | airfoil | 1, 0.346153846154 ); ( 30, 1.0 | airfoil | 1, 0.384615384615 ); ( 30, 1.0 | airfoil | 1, 0.423076923077 ); ( 30, 1.0 | airfoil | 1, 0.461538461538 ); ( 30, 1.0 | airfoil | 1, 0.5 ); ( 30, 1.0 | airfoil | 1, 0.538461538462 ); ( 30, 1.0 | airfoil | 1, 0.576923076923 ); ( 30, 1.0 | airfoil | 1, 0.615384615385 ); ( 30, 1.0 | airfoil | 1, 0.653846153846 ); ( 30, 1.0 | airfoil | 1, 0.692307692308 ); ( 30, 1.0 | airfoil | 1, 0.730769230769 ); ( 30, 1.0 | airfoil | 1, 0.769230769231 ); ( 30, 1.0 | airfoil | 1, 0.807692307692 ); ( 30, 1.0 | airfoil | 1, 0.846153846154 ); ( 30, 1.0 | airfoil | 1, 0.884615384615 ); ( 30, 1.0 | airfoil | 1, 0.923076923077 ); ( 30, 1.0 | airfoil | 1, 0.961538461538 ) +READ_BINARY_RESTART= NO +RESTART_ITER= 2 diff --git a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg index 0a14191cdafa..8a4e536d4eb0 100644 --- a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg +++ b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg @@ -14,7 +14,7 @@ SOLVER= RANS KIND_TURB_MODEL= SA MATH_PROBLEM= DIRECT -RESTART_SOL= NO +RESTART_SOL= YES % ------------------------- UNSTEADY SIMULATION -------------------------------% % @@ -140,7 +140,7 @@ CONV_CAUCHY_EPS= 1E-5 MESH_FILENAME= mesh_NACA64A010_turb.su2 MESH_FORMAT= SU2 MESH_OUT_FILENAME= mesh_out -SOLUTION_FILENAME= restart_flow +SOLUTION_FILENAME= solution_flow SOLUTION_ADJ_FILENAME= restart_adj TABULAR_FORMAT= CSV CONV_FILENAME= history @@ -159,3 +159,5 @@ OUTPUT_WRT_FREQ= 1 OPT_OBJECTIVE= DRAG * 0.001 OPT_CONSTRAINT= ( AREA > 0.0661121 ) * 0.001 DEFINITION_DV= ( 30, 1.0 | airfoil | 0, 0.961538461538 ); ( 30, 1.0 | airfoil | 0, 0.923076923077 ); ( 30, 1.0 | airfoil | 0, 0.884615384615 ); ( 30, 1.0 | airfoil | 0, 0.846153846154 ); ( 30, 1.0 | airfoil | 0, 0.807692307692 ); ( 30, 1.0 | airfoil | 0, 0.769230769231 ); ( 30, 1.0 | airfoil | 0, 0.730769230769 ); ( 30, 1.0 | airfoil | 0, 0.692307692308 ); ( 30, 1.0 | airfoil | 0, 0.653846153846 ); ( 30, 1.0 | airfoil | 0, 0.615384615385 ); ( 30, 1.0 | airfoil | 0, 0.576923076923 ); ( 30, 1.0 | airfoil | 0, 0.538461538462 ); ( 30, 1.0 | airfoil | 0, 0.5 ); ( 30, 1.0 | airfoil | 0, 0.461538461538 ); ( 30, 1.0 | airfoil | 0, 0.423076923077 ); ( 30, 1.0 | airfoil | 0, 0.384615384615 ); ( 30, 1.0 | airfoil | 0, 0.346153846154 ); ( 30, 1.0 | airfoil | 0, 0.307692307692 ); ( 30, 1.0 | airfoil | 0, 0.269230769231 ); ( 30, 1.0 | airfoil | 0, 0.230769230769 ); ( 30, 1.0 | airfoil | 0, 0.192307692308 ); ( 30, 1.0 | airfoil | 0, 0.153846153846 ); ( 30, 1.0 | airfoil | 0, 0.115384615385 ); ( 30, 1.0 | airfoil | 0, 0.0769230769231 ); ( 30, 1.0 | airfoil | 0, 0.0384615384615 ); ( 30, 1.0 | airfoil | 1, 0.0384615384615 ); ( 30, 1.0 | airfoil | 1, 0.0769230769231 ); ( 30, 1.0 | airfoil | 1, 0.115384615385 ); ( 30, 1.0 | airfoil | 1, 0.153846153846 ); ( 30, 1.0 | airfoil | 1, 0.192307692308 ); ( 30, 1.0 | airfoil | 1, 0.230769230769 ); ( 30, 1.0 | airfoil | 1, 0.269230769231 ); ( 30, 1.0 | airfoil | 1, 0.307692307692 ); ( 30, 1.0 | airfoil | 1, 0.346153846154 ); ( 30, 1.0 | airfoil | 1, 0.384615384615 ); ( 30, 1.0 | airfoil | 1, 0.423076923077 ); ( 30, 1.0 | airfoil | 1, 0.461538461538 ); ( 30, 1.0 | airfoil | 1, 0.5 ); ( 30, 1.0 | airfoil | 1, 0.538461538462 ); ( 30, 1.0 | airfoil | 1, 0.576923076923 ); ( 30, 1.0 | airfoil | 1, 0.615384615385 ); ( 30, 1.0 | airfoil | 1, 0.653846153846 ); ( 30, 1.0 | airfoil | 1, 0.692307692308 ); ( 30, 1.0 | airfoil | 1, 0.730769230769 ); ( 30, 1.0 | airfoil | 1, 0.769230769231 ); ( 30, 1.0 | airfoil | 1, 0.807692307692 ); ( 30, 1.0 | airfoil | 1, 0.846153846154 ); ( 30, 1.0 | airfoil | 1, 0.884615384615 ); ( 30, 1.0 | airfoil | 1, 0.923076923077 ); ( 30, 1.0 | airfoil | 1, 0.961538461538 ) +READ_BINARY_RESTART= NO +RESTART_ITER= 2 diff --git a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg index a364dadd7630..b1ce80b506fe 100644 --- a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg +++ b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg @@ -14,7 +14,7 @@ SOLVER= NAVIER_STOKES KIND_TURB_MODEL= NONE MATH_PROBLEM= DIRECT -RESTART_SOL= NO +RESTART_SOL= YES % ------------------------- UNSTEADY SIMULATION -------------------------------% % @@ -121,3 +121,5 @@ SURFACE_FILENAME= surface_flow SURFACE_ADJ_FILENAME= surface_adjoint SCREEN_OUTPUT= (TIME_ITER, INNER_ITER, RMS_DENSITY, RMS_ENERGY, LIFT, DRAG) OUTPUT_WRT_FREQ= 1 +READ_BINARY_RESTART= NO +RESTART_ITER= 2 From 623175946c126feb2fda0b5b73aef0457694c397 Mon Sep 17 00:00:00 2001 From: Sahil_Kumar Date: Sat, 4 Apr 2026 11:31:35 +0000 Subject: [PATCH 195/229] Fix test_iter to satisfy TIME_ITER > RESTART_ITER constraint - CI autotest sets TIME_ITER = test_iter + 1 - With test_iter=1, TIME_ITER=2 = RESTART_ITER=2, violating the constraint TIME_ITER > RESTART_ITER in SetPostprocessing - Fix: set test_iter=2 so TIME_ITER=3 > RESTART_ITER=2 - test_vals at Time_Iter=2 are unchanged --- TestCases/serial_regression.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index a21dcee44a16..d831b67e721c 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -823,7 +823,7 @@ def main(): unst_pitching_naca64a010_rans = TestCase('unst_pitching_naca64a010_rans') 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 = 1 + unst_pitching_naca64a010_rans.test_iter = 2 unst_pitching_naca64a010_rans.test_vals = [-4.799603, -7.374477, -0.005421, 0.008293] unst_pitching_naca64a010_rans.unsteady = True test_list.append(unst_pitching_naca64a010_rans) @@ -831,7 +831,7 @@ def main(): unst_pitching_naca64a010_euler = TestCase('unst_pitching_naca64a010_euler') 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 = 1 + unst_pitching_naca64a010_euler.test_iter = 2 unst_pitching_naca64a010_euler.test_vals = [-4.240073, 1.280267, -0.040141, 0.000887] unst_pitching_naca64a010_euler.unsteady = True test_list.append(unst_pitching_naca64a010_euler) @@ -839,7 +839,7 @@ def main(): unst_plunging_naca0012 = TestCase('unst_plunging_naca0012') unst_plunging_naca0012.cfg_dir = "unsteady/plunging_naca0012" unst_plunging_naca0012.cfg_file = "plunging_NACA0012.cfg" - unst_plunging_naca0012.test_iter = 1 + unst_plunging_naca0012.test_iter = 2 unst_plunging_naca0012.test_vals = [-5.829829, -0.258459, 0.888444, -0.124558] unst_plunging_naca0012.unsteady = True test_list.append(unst_plunging_naca0012) From 60195592d5798cd936c73ffc9be4696af6d6e16a Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 4 Apr 2026 10:50:01 -0700 Subject: [PATCH 196/229] new/delete, share some code --- Common/include/geometry/elements/CElement.hpp | 6 +- .../include/linear_algebra/CPastixWrapper.hpp | 4 +- Common/src/linear_algebra/CPastixWrapper.cpp | 2 +- .../numerics/elasticity/CFEAElasticity.hpp | 47 ++- .../elasticity/CFEALinearElasticity.hpp | 10 - .../elasticity/CFEANonlinearElasticity.hpp | 74 ++-- .../numerics/elasticity/nonlinear_models.hpp | 20 - SU2_CFD/src/iteration/CFEAIteration.cpp | 4 +- .../numerics/elasticity/CFEAElasticity.cpp | 82 +--- .../elasticity/CFEALinearElasticity.cpp | 189 ++------- .../elasticity/CFEANonlinearElasticity.cpp | 379 ++++-------------- .../numerics/elasticity/nonlinear_models.cpp | 34 +- .../nonlinear_plane_stress_2d.cfg | 4 +- 13 files changed, 234 insertions(+), 621 deletions(-) diff --git a/Common/include/geometry/elements/CElement.hpp b/Common/include/geometry/elements/CElement.hpp index 2d04c90ed719..e2e436f8169c 100644 --- a/Common/include/geometry/elements/CElement.hpp +++ b/Common/include/geometry/elements/CElement.hpp @@ -249,7 +249,8 @@ class CElement { * \param[in] nodeB - index of Node b. * \param[in] val_Kab - value of the matrix K. */ - inline void Add_Kab(unsigned short nodeA, unsigned short nodeB, su2double** val_Kab) { + template + inline void Add_Kab(unsigned short nodeA, unsigned short nodeB, Matrix& val_Kab) { for (unsigned short iDim = 0; iDim < nDim; iDim++) for (unsigned short jDim = 0; jDim < nDim; jDim++) Kab[nodeA](nodeB, iDim * nDim + jDim) += val_Kab[iDim][jDim]; } @@ -259,7 +260,8 @@ class CElement { * transpose) \param[in] nodeA - index of Node a. \param[in] nodeB - index of Node b. \param[in] val_Kab - value of * the matrix K. */ - inline void Add_Kab_T(unsigned short nodeA, unsigned short nodeB, su2double** val_Kab) { + template + inline void Add_Kab_T(unsigned short nodeA, unsigned short nodeB, Matrix& val_Kab) { for (unsigned short iDim = 0; iDim < nDim; iDim++) for (unsigned short jDim = 0; jDim < nDim; jDim++) Kab[nodeA](nodeB, iDim * nDim + jDim) += val_Kab[jDim][iDim]; } diff --git a/Common/include/linear_algebra/CPastixWrapper.hpp b/Common/include/linear_algebra/CPastixWrapper.hpp index 38d3e394f9cf..b3dfc4714ca9 100644 --- a/Common/include/linear_algebra/CPastixWrapper.hpp +++ b/Common/include/linear_algebra/CPastixWrapper.hpp @@ -57,10 +57,10 @@ class CPastixWrapper { pastix_int_t nCols; /*!< \brief Local number of columns. */ vector colptr; /*!< \brief Equiv. to our "row_ptr". */ vector rowidx; /*!< \brief Equiv. to our "col_ind". */ - vector values; /*!< \brief Equiv. to our "matrix". */ + vector values; /*!< \brief Equiv. to our "matrix". */ vector loc2glb; /*!< \brief Global index of the columns held by this rank. */ vector perm; /*!< \brief Ordering computed by PaStiX. */ - vector workvec; /*!< \brief RHS vector which then becomes the solution. */ + vector workvec; /*!< \brief RHS vector which then becomes the solution. */ pastix_int_t iparm[IPARM_SIZE]; /*!< \brief Integer parameters for PaStiX. */ passivedouble dparm[DPARM_SIZE]; /*!< \brief Floating point parameters for PaStiX. */ diff --git a/Common/src/linear_algebra/CPastixWrapper.cpp b/Common/src/linear_algebra/CPastixWrapper.cpp index c603a492805f..51325275b5fd 100644 --- a/Common/src/linear_algebra/CPastixWrapper.cpp +++ b/Common/src/linear_algebra/CPastixWrapper.cpp @@ -181,7 +181,7 @@ void CPastixWrapper::Initialize(CGeometry* geometry, const CConfig* spmInitDist(&spm, SU2_MPI::GetComm()); spm.mtxtype = SpmGeneral; // Despite being symmetric, we store the entire matrix. - spm.flttype = SpmDouble; + spm.flttype = std::is_same_v ? SpmDouble : SpmFloat; spm.fmttype = SpmCSC; spm.layout = SpmColMajor; spm.baseval = 1; diff --git a/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp b/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp index c3a13b058e4f..7e98680a40bc 100644 --- a/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp +++ b/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp @@ -27,6 +27,7 @@ #pragma once +#include #include "../CNumerics.hpp" #include "../../../../Common/include/geometry/elements/CElement.hpp" @@ -61,23 +62,17 @@ class CFEAElasticity : public CNumerics { su2double Kappa = 0.0; /*!< \brief Aux. variable, Compressibility constant. */ su2double ThermalStressTerm = 0.0; /*!< \brief Aux. variable, Relationship between stress and delta T. */ - su2double *E_i = nullptr; /*!< \brief Young's modulus of elasticity. */ - su2double *Nu_i = nullptr; /*!< \brief Poisson's ratio. */ - su2double *Rho_s_i = nullptr; /*!< \brief Structural density. */ - su2double *Rho_s_DL_i = nullptr; /*!< \brief Structural density (for dead loads). */ - su2double *Alpha_i = nullptr; /*!< \brief Thermal expansion coefficient. */ + std::unique_ptr E_i; /*!< \brief Young's modulus of elasticity. */ + std::unique_ptr Nu_i; /*!< \brief Poisson's ratio. */ + std::unique_ptr Rho_s_i; /*!< \brief Structural density. */ + std::unique_ptr Rho_s_DL_i; /*!< \brief Structural density (for dead loads). */ + std::unique_ptr Alpha_i; /*!< \brief Thermal expansion coefficient. */ su2double ReferenceTemperature = 0.0; /*!< \brief Reference temperature for thermal expansion. */ - su2double **Ba_Mat = nullptr; /*!< \brief Matrix B for node a - Auxiliary. */ - su2double **Bb_Mat = nullptr; /*!< \brief Matrix B for node b - Auxiliary. */ - su2double *Ni_Vec = nullptr; /*!< \brief Vector of shape functions - Auxiliary. */ - su2double **D_Mat = nullptr; /*!< \brief Constitutive matrix - Auxiliary. */ - su2double **KAux_ab = nullptr; /*!< \brief Node ab stiffness matrix - Auxiliary. */ - su2double **GradNi_Ref_Mat = nullptr; /*!< \brief Gradients of Ni - Auxiliary. */ - su2double **GradNi_Curr_Mat = nullptr; /*!< \brief Gradients of Ni - Auxiliary. */ + su2double D_Mat[DIM_STRAIN_3D][DIM_STRAIN_3D]; /*!< \brief Constitutive matrix - Auxiliary. */ - su2double *DV_Val = nullptr; /*!< \brief For optimization cases, value of the design variables. */ + std::unique_ptr DV_Val; /*!< \brief For optimization cases, value of the design variables. */ unsigned short n_DV = 0; /*!< \brief For optimization cases, number of design variables. */ bool plane_stress = false; /*!< \brief Checks if we are solving a plane stress case. */ @@ -97,11 +92,6 @@ class CFEAElasticity : public CNumerics { */ CFEAElasticity(unsigned short val_nDim, unsigned short val_nVar, const CConfig *config); - /*! - * \brief Destructor of the class. - */ - ~CFEAElasticity(void) override; - /*! * \brief Set elasticity modulus and Poisson ratio. * \param[in] iVal - Index of the property. @@ -245,4 +235,25 @@ class CFEAElasticity : public CNumerics { return static_cast(iVar == jVar); } + template + void FillBMat(unsigned short iNode, const Mat1& GradNi_Mat, Mat2& B_Mat) const { + if (nDim == 2) { + B_Mat[0][0] = GradNi_Mat[iNode][0]; + B_Mat[1][1] = GradNi_Mat[iNode][1]; + B_Mat[2][0] = GradNi_Mat[iNode][1]; + B_Mat[2][1] = GradNi_Mat[iNode][0]; + } + else { + B_Mat[0][0] = GradNi_Mat[iNode][0]; + B_Mat[1][1] = GradNi_Mat[iNode][1]; + B_Mat[2][2] = GradNi_Mat[iNode][2]; + B_Mat[3][0] = GradNi_Mat[iNode][1]; + B_Mat[3][1] = GradNi_Mat[iNode][0]; + B_Mat[4][0] = GradNi_Mat[iNode][2]; + B_Mat[4][2] = GradNi_Mat[iNode][0]; + B_Mat[5][1] = GradNi_Mat[iNode][2]; + B_Mat[5][2] = GradNi_Mat[iNode][1]; + } + } + }; diff --git a/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp b/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp index 8eae5ee49e68..62d27a17a87c 100644 --- a/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp +++ b/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp @@ -55,11 +55,6 @@ class CFEALinearElasticity : public CFEAElasticity { */ CFEALinearElasticity(unsigned short val_nDim, unsigned short val_nVar, const CConfig *config); - /*! - * \brief Destructor of the class. - */ - ~CFEALinearElasticity(void) override = default; - /*! * \brief Build the tangent stiffness matrix of an element. * \param[in,out] element_container - Element whose tangent matrix is being built. @@ -110,11 +105,6 @@ class CFEAMeshElasticity final : public CFEALinearElasticity { */ CFEAMeshElasticity(unsigned short val_nDim, unsigned short val_nVar, unsigned long val_nElem, const CConfig *config); - /*! - * \brief Destructor of the class. - */ - ~CFEAMeshElasticity(void) override = default; - /*! * \brief Set the element-based local Young's modulus in mesh problems * \param[in] iElem - Element index. diff --git a/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp b/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp index ed97b3e28255..bad33c51b345 100644 --- a/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp +++ b/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp @@ -43,15 +43,9 @@ class CFEANonlinearElasticity : public CFEAElasticity { protected: - su2double **F_Mat; /*!< \brief Deformation gradient. */ - su2double **b_Mat; /*!< \brief Left Cauchy-Green Tensor. */ - su2double **currentCoord; /*!< \brief Current coordinates. */ - su2double **Stress_Tensor; /*!< \brief Cauchy stress tensor */ - - su2double **FmT_Mat; /*!< \brief Deformation gradient inverse and transpose. */ - - su2double **KAux_P_ab; /*!< \brief Auxiliar matrix for the pressure term */ - su2double *KAux_t_a; /*!< \brief Auxiliar matrix for the pressure term */ + su2double F_Mat[MAXNDIM][MAXNDIM]; /*!< \brief Deformation gradient. */ + su2double b_Mat[MAXNDIM][MAXNDIM]; /*!< \brief Left Cauchy-Green Tensor. */ + su2double Stress_Tensor[MAXNDIM][MAXNDIM]; su2double J_F; /*!< \brief Jacobian of the transformation (determinant of F) */ @@ -59,23 +53,19 @@ class CFEANonlinearElasticity : public CFEAElasticity { bool nearly_incompressible; /*!< \brief Boolean to consider nearly_incompressible effects */ - su2double **F_Mat_Iso; /*!< \brief Isocoric component of the deformation gradient. */ - su2double **b_Mat_Iso; /*!< \brief Isocoric component of the left Cauchy-Green tensor. */ - - su2double C10, D1; /*!< \brief C10 = Mu/2. D1 = Kappa/2. */ - su2double J_F_Iso; /*!< \brief J_F_Iso: det(F)^-1/3. */ + su2double b_Mat_Iso[MAXNDIM][MAXNDIM]; /*!< \brief Isocoric component of the left Cauchy-Green tensor. */ su2double cijkl[3][3][3][3]; /*!< \brief Constitutive tensor i,j,k,l (defined only for incompressibility - near inc.). */ bool maxwell_stress; /*!< \brief Consider the effects of the dielectric loads */ - su2double *EField_Ref_Unit, /*!< \brief Electric Field, unitary, in the reference configuration. */ - *EField_Ref_Mod; /*!< \brief Electric Field, modulus, in the reference configuration. */ - su2double *EField_Curr_Unit; /*!< \brief Auxiliary vector for the unitary Electric Field in the current configuration. */ + std::unique_ptr EField_Ref_Unit; /*!< \brief Electric Field, unitary, in the reference configuration. */ + std::unique_ptr EField_Ref_Mod; /*!< \brief Electric Field, modulus, in the reference configuration. */ + std::unique_ptr EField_Curr_Unit; /*!< \brief Auxiliary vector for the unitary Electric Field in the current configuration. */ unsigned short nElectric_Field, nDim_Electric_Field; - su2double *ke_DE_i; /*!< \brief Electric Constant for Dielectric Elastomers. */ + std::unique_ptr ke_DE_i; /*!< \brief Electric Constant for Dielectric Elastomers. */ su2double ke_DE; /*!< \brief Electric Constant for Dielectric Elastomers. */ su2double EFieldMod_Ref; /*!< \brief Modulus of the electric field in the reference configuration. */ @@ -94,11 +84,6 @@ class CFEANonlinearElasticity : public CFEAElasticity { */ CFEANonlinearElasticity(unsigned short val_nDim, unsigned short val_nVar, const CConfig *config); - /*! - * \brief Destructor of the class. - */ - ~CFEANonlinearElasticity(void) override; - /*! * \brief Set element electric field. * \param[in] i_DV - Index of the variable. @@ -161,9 +146,48 @@ class CFEANonlinearElasticity : public CFEAElasticity { void SetElectric_Properties(const CElement *element_container, const CConfig *config); /*! - * \brief TODO: Describe what this does. + * \brief Computes b_Mat. + */ + void ComputeLeftCauchyGreenTensor() { + for (unsigned short iVar = 0; iVar < MAXNDIM; iVar++) { + for (unsigned short jVar = 0; jVar < MAXNDIM; jVar++) { + b_Mat[iVar][jVar] = 0; + for (unsigned short kVar = 0; kVar < MAXNDIM; kVar++) { + b_Mat[iVar][jVar] += F_Mat[iVar][kVar]*F_Mat[jVar][kVar]; + } + } + } + } + + /*! + * \brief Computes the determinant of the deformation gradient. + */ + void ComputeJ_F() { + J_F = F_Mat[0][0]*F_Mat[1][1]*F_Mat[2][2]+ + F_Mat[0][1]*F_Mat[1][2]*F_Mat[2][0]+ + F_Mat[0][2]*F_Mat[1][0]*F_Mat[2][1]- + F_Mat[0][2]*F_Mat[1][1]*F_Mat[2][0]- + F_Mat[1][2]*F_Mat[2][1]*F_Mat[0][0]- + F_Mat[2][2]*F_Mat[0][1]*F_Mat[1][0]; + } + + /*! + * \brief Computes the deformation gradient transpose inverse. */ - void Compute_FmT_Mat(void); + template + void Compute_FmT_Mat(const Mat& F_Mat, const su2double& J_F, Mat& FmT_Mat) const { + FmT_Mat[0][0] = (F_Mat[1][1]*F_Mat[2][2] - F_Mat[1][2]*F_Mat[2][1]) / J_F; + FmT_Mat[0][1] = (F_Mat[1][2]*F_Mat[2][0] - F_Mat[2][2]*F_Mat[1][0]) / J_F; + FmT_Mat[0][2] = (F_Mat[1][0]*F_Mat[2][1] - F_Mat[1][1]*F_Mat[2][0]) / J_F; + + FmT_Mat[1][0] = (F_Mat[0][2]*F_Mat[2][1] - F_Mat[0][1]*F_Mat[2][2]) / J_F; + FmT_Mat[1][1] = (F_Mat[0][0]*F_Mat[2][2] - F_Mat[2][0]*F_Mat[0][2]) / J_F; + FmT_Mat[1][2] = (F_Mat[0][1]*F_Mat[2][1] - F_Mat[0][0]*F_Mat[2][0]) / J_F; + + FmT_Mat[2][0] = (F_Mat[0][1]*F_Mat[1][2] - F_Mat[0][2]*F_Mat[1][1]) / J_F; + FmT_Mat[2][1] = (F_Mat[0][2]*F_Mat[1][0] - F_Mat[0][0]*F_Mat[1][2]) / J_F; + FmT_Mat[2][2] = (F_Mat[0][0]*F_Mat[1][1] - F_Mat[0][1]*F_Mat[1][0]) / J_F; + } /*! * \brief TODO: Describe what this does. diff --git a/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp b/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp index e57521cea0f8..3cea87dcac5a 100644 --- a/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp +++ b/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp @@ -48,11 +48,6 @@ class CFEM_NeoHookean_Comp final : public CFEANonlinearElasticity { */ CFEM_NeoHookean_Comp(unsigned short val_nDim, unsigned short val_nVar, const CConfig *config); - /*! - * \brief Destructor of the class. - */ - ~CFEM_NeoHookean_Comp(void) override = default; - private: /*! * \brief Compute the plane stress term. @@ -100,11 +95,6 @@ class CFEM_Knowles_NearInc final : public CFEANonlinearElasticity { */ CFEM_Knowles_NearInc(unsigned short val_nDim, unsigned short val_nVar, const CConfig *config); - /*! - * \brief Destructor of the class. - */ - ~CFEM_Knowles_NearInc(void) override = default; - private: /*! * \brief Compute the plane stress term. @@ -150,11 +140,6 @@ class CFEM_DielectricElastomer final : public CFEANonlinearElasticity { */ CFEM_DielectricElastomer(unsigned short val_nDim, unsigned short val_nVar, const CConfig *config); - /*! - * \brief Destructor of the class. - */ - ~CFEM_DielectricElastomer(void) override = default; - private: /*! * \brief Compute the plane stress term. @@ -202,11 +187,6 @@ class CFEM_IdealDE final : public CFEANonlinearElasticity { */ CFEM_IdealDE(unsigned short val_nDim, unsigned short val_nVar, const CConfig *config); - /*! - * \brief Destructor of the class. - */ - ~CFEM_IdealDE(void) override = default; - private: /*! * \brief Compute the plane stress term. diff --git a/SU2_CFD/src/iteration/CFEAIteration.cpp b/SU2_CFD/src/iteration/CFEAIteration.cpp index 0b373388bd4d..42e8e485f71e 100644 --- a/SU2_CFD/src/iteration/CFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CFEAIteration.cpp @@ -123,11 +123,13 @@ void CFEAIteration::Iterate(COutput* output, CIntegration**** integration, CGeom config[val_iZone]->SetInnerIter(CurIter); break; } - /*--- Linear elasticity without thermal effects only needs one iteration. ---*/ + /*--- Linear elasticity without thermal effects and double precision only needs one iteration. ---*/ +#ifndef USE_MIXED_PRECISION if (linear && !heat) { output->SetConvergence(true); break; } +#endif /*--- Normal stopping criteria. ---*/ if (StopCalc && IntIter > 0) break; } diff --git a/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp b/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp index 9b9c6af005fa..51f21633ff48 100644 --- a/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp +++ b/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp @@ -43,11 +43,11 @@ CFEAElasticity::CFEAElasticity(unsigned short val_nDim, unsigned short val_nVar, /*--- Initialize vector structures for multiple material definition ---*/ const auto nProp = config->GetnElasticityMat(); - E_i = new su2double[nProp]; - Nu_i = new su2double[nProp]; - Rho_s_i = new su2double[nProp]; // For inertial effects - Rho_s_DL_i = new su2double[nProp]; // For dead loads - Alpha_i = new su2double[nProp]; + E_i.reset(new su2double[nProp]); + Nu_i.reset(new su2double[nProp]); + Rho_s_i.reset(new su2double[nProp]); // For inertial effects + Rho_s_DL_i.reset(new su2double[nProp]); // For dead loads + Alpha_i.reset(new su2double[nProp]); for (iVar = 0; iVar < nProp; iVar++) { E_i[iVar] = config->GetElasticyMod(iVar); Nu_i[iVar] = config->GetPoissonRatio(iVar); @@ -69,32 +69,7 @@ CFEAElasticity::CFEAElasticity(unsigned short val_nDim, unsigned short val_nVar, Compute_Lame_Parameters(); - KAux_ab = new su2double* [nDim]; - for (iVar = 0; iVar < nDim; iVar++) { - KAux_ab[iVar] = new su2double[nDim]; - } - - unsigned short nStrain = (nDim==2) ? DIM_STRAIN_2D : DIM_STRAIN_3D; - unsigned short nNodes = (nDim==2) ? NNODES_2D : NNODES_3D; - - Ba_Mat = new su2double* [nStrain]; - Bb_Mat = new su2double* [nStrain]; - D_Mat = new su2double* [nStrain]; - Ni_Vec = new su2double [nNodes]; - GradNi_Ref_Mat = new su2double* [nNodes]; - GradNi_Curr_Mat = new su2double* [nNodes]; - for (iVar = 0; iVar < nStrain; iVar++) { - Ba_Mat[iVar] = new su2double[nDim]; - Bb_Mat[iVar] = new su2double[nDim]; - D_Mat[iVar] = new su2double[nStrain]; - } - for (iVar = 0; iVar < nNodes; iVar++) { - GradNi_Ref_Mat[iVar] = new su2double[nDim]; - GradNi_Curr_Mat[iVar] = new su2double[nDim]; - } - - DV_Val = nullptr; - n_DV = 0; + n_DV = 0; switch (config->GetDV_FEA()) { case YOUNG_MODULUS: case POISSON_RATIO: @@ -131,44 +106,6 @@ CFEAElasticity::CFEAElasticity(unsigned short val_nDim, unsigned short val_nVar, } } -CFEAElasticity::~CFEAElasticity() { - - unsigned short iVar; - unsigned short nStrain = (nDim==2) ? DIM_STRAIN_2D : DIM_STRAIN_3D; - unsigned short nNodes = (nDim==2) ? NNODES_2D : NNODES_3D; - - for (iVar = 0; iVar < nDim; iVar++) { - delete [] KAux_ab[iVar]; - } - - for (iVar = 0; iVar < nStrain; iVar++) { - delete [] Ba_Mat[iVar]; - delete [] Bb_Mat[iVar]; - delete [] D_Mat[iVar]; - } - for (iVar = 0; iVar < nNodes; iVar++) { - delete [] GradNi_Ref_Mat[iVar]; - delete [] GradNi_Curr_Mat[iVar]; - } - - delete [] KAux_ab; - delete [] Ba_Mat; - delete [] Bb_Mat; - delete [] D_Mat; - delete [] GradNi_Ref_Mat; - delete [] GradNi_Curr_Mat; - - delete[] DV_Val; - - delete [] E_i; - delete [] Nu_i; - delete [] Rho_s_i; - delete [] Rho_s_DL_i; - delete [] Alpha_i; - delete [] Ni_Vec; -} - - void CFEAElasticity::Compute_Mass_Matrix(CElement *element, const CConfig *config) { /*--- Initialize values for the material model considered ---*/ @@ -198,6 +135,7 @@ void CFEAElasticity::Compute_Mass_Matrix(CElement *element, const CConfig *confi /*--- Retrieve the values of the shape functions for each node ---*/ /*--- This avoids repeated operations ---*/ + su2double Ni_Vec[NNODES_3D] = {}; for (iNode = 0; iNode < nNode; iNode++) { Ni_Vec[iNode] = element->GetNi(iNode,iGauss); } @@ -383,8 +321,8 @@ void CFEAElasticity::ReadDV(const CConfig *config) { if (master_node) cout << "There is no design variable file." << endl; - n_DV = 1; - DV_Val = new su2double[n_DV]; + n_DV = 1; + DV_Val.reset(new su2double[n_DV]); for (unsigned short iDV = 0; iDV < n_DV; iDV++) DV_Val[iDV] = 1.0; @@ -408,7 +346,7 @@ void CFEAElasticity::ReadDV(const CConfig *config) { properties_file.close(); n_DV = iDV; - DV_Val = new su2double[n_DV]; + DV_Val.reset(new su2double[n_DV]); /*--- Reopen the file (TODO: improve this) ---*/ diff --git a/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp b/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp index f9273ba0e43a..1e0bf29e0345 100644 --- a/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp +++ b/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp @@ -39,14 +39,12 @@ CFEALinearElasticity::CFEALinearElasticity(unsigned short val_nDim, unsigned sho void CFEALinearElasticity::Compute_Tangent_Matrix(CElement *element, const CConfig *config) { unsigned short iVar, jVar, kVar; - unsigned short iGauss, nGauss; - unsigned short iNode, jNode, nNode; + unsigned short iGauss; + unsigned short iNode, jNode; unsigned short iDim; - unsigned short bDim; - su2double Weight, Jac_X; - - su2double AuxMatrix[3][6], *res_aux = new su2double[nVar]; + su2double AuxMatrix[MAXNDIM][DIM_STRAIN_3D] = {}; + su2double Ba_Mat[DIM_STRAIN_3D][MAXNDIM] = {}, Bb_Mat[DIM_STRAIN_3D][MAXNDIM] = {}; /*--- Set element properties and recompute the constitutive matrix, this is needed for multiple material cases and for correct differentiation ---*/ @@ -62,35 +60,21 @@ void CFEALinearElasticity::Compute_Tangent_Matrix(CElement *element, const CConf Compute_Constitutive_Matrix(element, config); - /*--- Initialize auxiliary matrices ---*/ - - bDim = (nDim == 2) ? DIM_STRAIN_2D : DIM_STRAIN_3D; - - for (iVar = 0; iVar < bDim; iVar++) { - for (jVar = 0; jVar < nDim; jVar++) { - Ba_Mat[iVar][jVar] = 0.0; - Bb_Mat[iVar][jVar] = 0.0; - } - } - - for (iVar = 0; iVar < 3; iVar++) { - for (jVar = 0; jVar < 6; jVar++) { - AuxMatrix[iVar][jVar] = 0.0; - } - } - - element->ClearElement(); /*--- Restarts the element: avoids adding over previous results in other elements --*/ + /*--- Restart the element: avoids adding over previous results in other elements --*/ + element->ClearElement(); element->ComputeGrad_Linear(); - nNode = element->GetnNodes(); - nGauss = element->GetnGaussPoints(); + const auto nNode = element->GetnNodes(); + const auto nGauss = element->GetnGaussPoints(); + const auto bDim = (nDim == 2) ? DIM_STRAIN_2D : DIM_STRAIN_3D; for (iGauss = 0; iGauss < nGauss; iGauss++) { - Weight = element->GetWeight(iGauss); - Jac_X = element->GetJ_X(iGauss); + const su2double Weight = element->GetWeight(iGauss); + const su2double Jac_X = element->GetJ_X(iGauss); /*--- Retrieve the values of the gradients of the shape functions for each node ---*/ /*--- This avoids repeated operations ---*/ + su2double GradNi_Ref_Mat[NNODES_3D][MAXNDIM] = {}; for (iNode = 0; iNode < nNode; iNode++) { for (iDim = 0; iDim < nDim; iDim++) { GradNi_Ref_Mat[iNode][iDim] = element->GetGradNi_X(iNode,iGauss,iDim); @@ -101,29 +85,13 @@ void CFEALinearElasticity::Compute_Tangent_Matrix(CElement *element, const CConf for (iNode = 0; iNode < nNode; iNode++) { - su2double KAux_t_a[3] = {0.0}; + su2double KAux_t_a[MAXNDIM] = {}; for (iVar = 0; iVar < nDim; iVar++) { KAux_t_a[iVar] += Weight * thermalStress * GradNi_Ref_Mat[iNode][iVar] * Jac_X; } element->Add_Kt_a(iNode, KAux_t_a); - if (nDim == 2) { - Ba_Mat[0][0] = GradNi_Ref_Mat[iNode][0]; - Ba_Mat[1][1] = GradNi_Ref_Mat[iNode][1]; - Ba_Mat[2][0] = GradNi_Ref_Mat[iNode][1]; - Ba_Mat[2][1] = GradNi_Ref_Mat[iNode][0]; - } - else { - Ba_Mat[0][0] = GradNi_Ref_Mat[iNode][0]; - Ba_Mat[1][1] = GradNi_Ref_Mat[iNode][1]; - Ba_Mat[2][2] = GradNi_Ref_Mat[iNode][2]; - Ba_Mat[3][0] = GradNi_Ref_Mat[iNode][1]; - Ba_Mat[3][1] = GradNi_Ref_Mat[iNode][0]; - Ba_Mat[4][0] = GradNi_Ref_Mat[iNode][2]; - Ba_Mat[4][2] = GradNi_Ref_Mat[iNode][0]; - Ba_Mat[5][1] = GradNi_Ref_Mat[iNode][2]; - Ba_Mat[5][2] = GradNi_Ref_Mat[iNode][1]; - } + FillBMat(iNode, GradNi_Ref_Mat, Ba_Mat); /*--- Compute the BT.D Matrix ---*/ @@ -138,27 +106,11 @@ void CFEALinearElasticity::Compute_Tangent_Matrix(CElement *element, const CConf /*--- Assumming symmetry ---*/ for (jNode = iNode; jNode < nNode; jNode++) { - if (nDim == 2) { - Bb_Mat[0][0] = GradNi_Ref_Mat[jNode][0]; - Bb_Mat[1][1] = GradNi_Ref_Mat[jNode][1]; - Bb_Mat[2][0] = GradNi_Ref_Mat[jNode][1]; - Bb_Mat[2][1] = GradNi_Ref_Mat[jNode][0]; - } - else { - Bb_Mat[0][0] = GradNi_Ref_Mat[jNode][0]; - Bb_Mat[1][1] = GradNi_Ref_Mat[jNode][1]; - Bb_Mat[2][2] = GradNi_Ref_Mat[jNode][2]; - Bb_Mat[3][0] = GradNi_Ref_Mat[jNode][1]; - Bb_Mat[3][1] = GradNi_Ref_Mat[jNode][0]; - Bb_Mat[4][0] = GradNi_Ref_Mat[jNode][2]; - Bb_Mat[4][2] = GradNi_Ref_Mat[jNode][0]; - Bb_Mat[5][1] = GradNi_Ref_Mat[jNode][2]; - Bb_Mat[5][2] = GradNi_Ref_Mat[jNode][1]; - } + FillBMat(jNode, GradNi_Ref_Mat, Bb_Mat); + su2double KAux_ab[MAXNDIM][MAXNDIM] = {}; for (iVar = 0; iVar < nDim; iVar++) { for (jVar = 0; jVar < nDim; jVar++) { - KAux_ab[iVar][jVar] = 0.0; for (kVar = 0; kVar < bDim; kVar++) { KAux_ab[iVar][jVar] += Weight * AuxMatrix[iVar][kVar] * Bb_Mat[kVar][jVar] * Jac_X; } @@ -178,17 +130,16 @@ void CFEALinearElasticity::Compute_Tangent_Matrix(CElement *element, const CConf } /*--- Compute residual ---*/ - for(iNode = 0; iNodeGet_Kab(iNode,jNode); + su2double res_aux[MAXNDIM] = {}; for (iVar = 0; iVar < nVar; iVar++) { - res_aux[iVar] = 0.0; - for (jVar = 0; jVar < nVar; jVar++) - res_aux[iVar] += Kab[iVar*nVar+jVar]* - (element->GetCurr_Coord(jNode,jVar)-element->GetRef_Coord(jNode,jVar)); + for (jVar = 0; jVar < nVar; jVar++) { + res_aux[iVar] += Kab[iVar*nVar+jVar] * + (element->GetCurr_Coord(jNode,jVar) - element->GetRef_Coord(jNode,jVar)); + } } element->Add_Kt_a(iNode, res_aux); } @@ -197,8 +148,6 @@ void CFEALinearElasticity::Compute_Tangent_Matrix(CElement *element, const CConf /*--- Register the stress residual as preaccumulation output ---*/ element->SetPreaccOut_Kt_a(); AD::EndPreacc(); - - delete[] res_aux; } @@ -234,11 +183,12 @@ void CFEALinearElasticity::Compute_Constitutive_Matrix(CElement *element_contain su2double CFEALinearElasticity::Compute_Averaged_NodalStress(CElement *element, const CConfig *config) { unsigned short iVar, jVar; - unsigned short iGauss, nGauss; - unsigned short iNode, nNode; - unsigned short iDim, bDim; + unsigned short iGauss; + unsigned short iNode; + unsigned short iDim; - su2double avgStress[DIM_STRAIN_3D] = {0.0}; + su2double avgStress[DIM_STRAIN_3D] = {}; + su2double Ba_Mat[DIM_STRAIN_3D][MAXNDIM] = {}; /*--- Set element properties and recompute the constitutive matrix, this is needed for multiple material cases and for correct differentiation ---*/ @@ -254,25 +204,19 @@ su2double CFEALinearElasticity::Compute_Averaged_NodalStress(CElement *element, Compute_Constitutive_Matrix(element, config); - /*--- Initialize auxiliary matrices ---*/ - - bDim = (nDim == 2) ? DIM_STRAIN_2D : DIM_STRAIN_3D; - - for (iVar = 0; iVar < bDim; iVar++) { - for (jVar = 0; jVar < nDim; jVar++) { - Ba_Mat[iVar][jVar] = 0.0; - } - } - - element->ClearStress(); /*--- Clears the stress in the element to avoid adding over previous results. --*/ + /*--- Clears the stress in the element to avoid adding over previous results. --*/ + element->ClearStress(); element->ComputeGrad_Linear(); - nNode = element->GetnNodes(); - nGauss = element->GetnGaussPoints(); + + const auto nNode = element->GetnNodes(); + const auto nGauss = element->GetnGaussPoints(); + const auto bDim = (nDim == 2) ? DIM_STRAIN_2D : DIM_STRAIN_3D; for (iGauss = 0; iGauss < nGauss; iGauss++) { /*--- Retrieve the values of the gradients of the shape functions for each node ---*/ /*--- This avoids repeated operations ---*/ + su2double GradNi_Ref_Mat[NNODES_3D][MAXNDIM] = {}; for (iNode = 0; iNode < nNode; iNode++) { for (iDim = 0; iDim < nDim; iDim++) { GradNi_Ref_Mat[iNode][iDim] = element->GetGradNi_X(iNode,iGauss,iDim); @@ -280,37 +224,17 @@ su2double CFEALinearElasticity::Compute_Averaged_NodalStress(CElement *element, } } - su2double Strain[DIM_STRAIN_3D] = {0.0}; + /*--- Compute the Strain Vector as B*u ---*/ + su2double Strain[DIM_STRAIN_3D] = {}; for (iNode = 0; iNode < nNode; iNode++) { - - /*--- Set matrix B ---*/ - if (nDim == 2) { - Ba_Mat[0][0] = GradNi_Ref_Mat[iNode][0]; - Ba_Mat[1][1] = GradNi_Ref_Mat[iNode][1]; - Ba_Mat[2][0] = GradNi_Ref_Mat[iNode][1]; - Ba_Mat[2][1] = GradNi_Ref_Mat[iNode][0]; - } - else { - Ba_Mat[0][0] = GradNi_Ref_Mat[iNode][0]; - Ba_Mat[1][1] = GradNi_Ref_Mat[iNode][1]; - Ba_Mat[2][2] = GradNi_Ref_Mat[iNode][2]; - Ba_Mat[3][0] = GradNi_Ref_Mat[iNode][1]; - Ba_Mat[3][1] = GradNi_Ref_Mat[iNode][0]; - Ba_Mat[4][0] = GradNi_Ref_Mat[iNode][2]; - Ba_Mat[4][2] = GradNi_Ref_Mat[iNode][0]; - Ba_Mat[5][1] = GradNi_Ref_Mat[iNode][2]; - Ba_Mat[5][2] = GradNi_Ref_Mat[iNode][1]; - } - - /*--- Compute the Strain Vector as B*u ---*/ + FillBMat(iNode, GradNi_Ref_Mat, Ba_Mat); for (iVar = 0; iVar < bDim; iVar++) { for (jVar = 0; jVar < nDim; jVar++) { Strain[iVar] += Ba_Mat[iVar][jVar]*nodalDisplacement[iNode][jVar]; } } - } /*--- Compute the Stress Vector as D*epsilon + thermal stress ---*/ @@ -361,17 +285,9 @@ su2double CFEALinearElasticity::Compute_Averaged_NodalStress(CElement *element, CFEAMeshElasticity::CFEAMeshElasticity(unsigned short val_nDim, unsigned short val_nVar, unsigned long val_nElem, const CConfig *config) : CFEALinearElasticity() { - DV_Val = nullptr; - Rho_s_i = nullptr; - Rho_s_DL_i = nullptr; - Nu_i = nullptr; - Alpha_i = nullptr; - nDim = val_nDim; nVar = val_nVar; - unsigned long iVar; - E = 1.0; Nu = config->GetDeform_PoissonRatio(); Compute_Lame_Parameters(); @@ -386,36 +302,11 @@ CFEAMeshElasticity::CFEAMeshElasticity(unsigned short val_nDim, unsigned short v break; } - E_i = nullptr; if (element_based){ - E_i = new su2double[val_nElem]; - for (iVar = 0; iVar < val_nElem; iVar++){ + E_i.reset(new su2double[val_nElem]); + for (unsigned long iVar = 0; iVar < val_nElem; iVar++){ E_i[iVar] = E; } } - KAux_ab = new su2double* [nDim]; - for (iVar = 0; iVar < nDim; iVar++) { - KAux_ab[iVar] = new su2double[nDim]; - } - - unsigned short nStrain = (nDim==2) ? DIM_STRAIN_2D : DIM_STRAIN_3D; - unsigned short nNodes = (nDim==2) ? NNODES_2D : NNODES_3D; - - Ba_Mat = new su2double* [nStrain]; - Bb_Mat = new su2double* [nStrain]; - D_Mat = new su2double* [nStrain]; - Ni_Vec = new su2double [nNodes]; - GradNi_Ref_Mat = new su2double* [nNodes]; - GradNi_Curr_Mat = new su2double* [nNodes]; - for (iVar = 0; iVar < nStrain; iVar++) { - Ba_Mat[iVar] = new su2double[nDim]; - Bb_Mat[iVar] = new su2double[nDim]; - D_Mat[iVar] = new su2double[nStrain]; - } - for (iVar = 0; iVar < nNodes; iVar++) { - GradNi_Ref_Mat[iVar] = new su2double[nDim]; - GradNi_Curr_Mat[iVar] = new su2double[nDim]; - } - } diff --git a/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp b/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp index ecda59f65d75..783a4522a10b 100644 --- a/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp +++ b/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp @@ -34,58 +34,15 @@ CFEANonlinearElasticity::CFEANonlinearElasticity(unsigned short val_nDim, unsign nearly_incompressible = (config->GetMaterialCompressibility() == STRUCT_COMPRESS::NEARLY_INCOMP); - unsigned short iVar; - - F_Mat = new su2double *[3]; - b_Mat = new su2double *[3]; - FmT_Mat = new su2double *[3]; - Stress_Tensor = new su2double *[3]; - for (iVar = 0; iVar < 3; iVar++) { - F_Mat[iVar] = new su2double [3]; - b_Mat[iVar] = new su2double [3]; - FmT_Mat[iVar] = new su2double [3]; - Stress_Tensor[iVar] = new su2double [3]; - } - - KAux_t_a = new su2double [nDim]; - - KAux_P_ab = new su2double* [nDim]; - for (iVar = 0; iVar < nDim; iVar++) { - KAux_P_ab[iVar] = new su2double[nDim]; - } - - unsigned short nNodes = (nDim==2) ? NNODES_2D : NNODES_3D; - - currentCoord = new su2double* [nNodes]; - for (iVar = 0; iVar < nNodes; iVar++) - currentCoord[iVar] = new su2double[nDim]; - - J_F = 1.0; J_F_Iso = 1.0; + J_F = 1.0; f33 = 1.0; - C10 = Mu/2.0; - D1 = 2.0/Kappa; - - F_Mat_Iso = nullptr; - b_Mat_Iso = nullptr; - - F_Mat_Iso = new su2double *[3]; - b_Mat_Iso = new su2double *[3]; - for (iVar = 0; iVar < 3; iVar++){ - F_Mat_Iso[iVar] = new su2double [3]; - b_Mat_Iso[iVar] = new su2double [3]; - } - maxwell_stress = config->GetDE_Effects(); - ke_DE = 0.0; - nElectric_Field = 0; + ke_DE = 0.0; + nElectric_Field = 0; nDim_Electric_Field = 0; - EField_Ref_Unit = nullptr; - EField_Ref_Mod = nullptr; - EField_Curr_Unit = nullptr; - if (maxwell_stress) { const su2double *Electric_Field_Dir = config->Get_Electric_Field_Dir(); @@ -120,26 +77,26 @@ CFEANonlinearElasticity::CFEANonlinearElasticity(unsigned short val_nDim, unsign } /*--- Initialize pointer for the electric field ---*/ - EField_Ref_Unit = new su2double[nDim_Electric_Field]; + EField_Ref_Unit.reset(new su2double[nDim_Electric_Field]); /*--- Assign values to the auxiliary Electric_Field structure ---*/ for (iDim = 0; iDim < nDim_Electric_Field; iDim++) { EField_Ref_Unit[iDim] = Electric_Field_Dir[iDim]/ref_Efield_mod; } /*--- Auxiliary vector for hosting the electric field modulus in the reference configuration ---*/ - EField_Ref_Mod = new su2double[nElectric_Field]; + EField_Ref_Mod.reset(new su2double[nElectric_Field]); for (iVar = 0; iVar < nElectric_Field; iVar++) EField_Ref_Mod[iVar] = config->Get_Electric_Field_Mod(iVar); /*--- Auxiliary vector for computing the electric field in the current configuration ---*/ - EField_Curr_Unit = new su2double[nDim_Electric_Field]; + EField_Curr_Unit.reset(new su2double[nDim_Electric_Field]); for (iDim = 0; iDim < nDim_Electric_Field; iDim++) { EField_Curr_Unit[iDim] = 0.0; } /*--- Auxiliary vector for storing the electric field constant ---*/ unsigned short nElectric_Constant = config->GetnElectric_Constant(); - ke_DE_i = new su2double[nElectric_Field]; + ke_DE_i.reset(new su2double[nElectric_Field]); if (nElectric_Constant == nElectric_Field) for (iVar = 0; iVar < nElectric_Field; iVar++) ke_DE_i[iVar] = config->GetElectric_Constant(iVar); @@ -163,76 +120,19 @@ CFEANonlinearElasticity::CFEANonlinearElasticity(unsigned short val_nDim, unsign } break; } - } - } -CFEANonlinearElasticity::~CFEANonlinearElasticity() { - - unsigned short iVar; - - for (iVar = 0; iVar < 3; iVar++) { - delete [] F_Mat[iVar]; - delete [] b_Mat[iVar]; - delete [] FmT_Mat[iVar]; - delete [] Stress_Tensor[iVar]; - } - - for (iVar = 0; iVar < nDim; iVar++) { - delete [] KAux_P_ab[iVar]; - } - - unsigned short nNodes = (nDim==2) ? NNODES_2D : NNODES_3D; - - for (iVar = 0; iVar < nNodes; iVar++) { - delete [] currentCoord[iVar]; - } - - delete [] F_Mat; - delete [] b_Mat; - delete [] FmT_Mat; - delete [] Stress_Tensor; - delete [] KAux_t_a; - delete [] KAux_P_ab; - delete [] currentCoord; - - if (F_Mat_Iso != nullptr) { - for (iVar = 0; iVar < 3; iVar++){ - if (F_Mat_Iso[iVar] != nullptr) delete [] F_Mat_Iso[iVar]; - } - delete [] F_Mat_Iso; - } - if (b_Mat_Iso != nullptr){ - for (iVar = 0; iVar < 3; iVar++){ - if (b_Mat_Iso[iVar] != nullptr) delete [] b_Mat_Iso[iVar]; - } - delete [] b_Mat_Iso; - } - - delete [] EField_Ref_Unit; - delete [] EField_Ref_Mod; - delete [] EField_Curr_Unit; - - if (maxwell_stress) { - delete [] ke_DE_i; - } -} - - void CFEANonlinearElasticity::Compute_Tangent_Matrix(CElement *element, const CConfig *config) { unsigned short iVar, jVar, kVar; - unsigned short iGauss, nGauss; - unsigned short iNode, jNode, nNode; - unsigned short iDim, bDim; - - su2double Ks_Aux_ab; - - su2double Weight, Jac_x; + unsigned short iGauss; + unsigned short iNode, jNode; + unsigned short iDim; - su2double AuxMatrixKc[3][6]; - su2double AuxMatrixKs[3]; + su2double AuxMatrixKc[MAXNDIM][DIM_STRAIN_3D] = {}; + su2double AuxMatrixKs[MAXNDIM] = {}; + su2double Ba_Mat[DIM_STRAIN_3D][MAXNDIM] = {}, Bb_Mat[DIM_STRAIN_3D][MAXNDIM] = {}; /*--- TODO: Initialize values for the material model considered ---*/ // cout << "PROPERTY: " << element->Get_iProp() << " and DV " << element->Get_iDV() << endl; @@ -251,55 +151,37 @@ void CFEANonlinearElasticity::Compute_Tangent_Matrix(CElement *element, const CC /*--- Recompute Lame parameters as they depend on the material properties ---*/ Compute_Lame_Parameters(); - /*-----------------------------------------------------------*/ - - /*--- Initialize auxiliary matrices ---*/ - - bDim = (nDim == 2) ? DIM_STRAIN_2D : DIM_STRAIN_3D; - - for (iVar = 0; iVar < bDim; iVar++) { - for (jVar = 0; jVar < nDim; jVar++) { - Ba_Mat[iVar][jVar] = 0.0; - Bb_Mat[iVar][jVar] = 0.0; - } - } - - for (iVar = 0; iVar < 3; iVar++) { - for (jVar = 0; jVar < 6; jVar++) { - AuxMatrixKc[iVar][jVar] = 0.0; - } - } - - for (iVar = 0; iVar < 3; iVar++) { - AuxMatrixKs[iVar] = 0.0; - } - - element->ClearElement(); /*--- Restarts the element to avoid adding over previous results. --*/ + /*--- Restarts the element to avoid adding over previous results. --*/ + element->ClearElement(); element->ComputeGrad_Linear(); element->ComputeGrad_NonLinear(); - nNode = element->GetnNodes(); - nGauss = element->GetnGaussPoints(); + const auto nNode = element->GetnNodes(); + const auto nGauss = element->GetnGaussPoints(); + const auto bDim = (nDim == 2) ? DIM_STRAIN_2D : DIM_STRAIN_3D; /*--- Full integration of the constitutive and stress term ---*/ for (iGauss = 0; iGauss < nGauss; iGauss++) { - Weight = element->GetWeight(iGauss); - Jac_x = element->GetJ_x(iGauss); + const su2double Weight = element->GetWeight(iGauss); + const su2double Jac_x = element->GetJ_x(iGauss); /*--- Initialize the deformation gradient for each Gauss Point ---*/ - for (iVar = 0; iVar < 3; iVar++) { - for (jVar = 0; jVar < 3; jVar++) { - F_Mat[iVar][jVar] = 0.0; - b_Mat[iVar][jVar] = 0.0; + for (iVar = 0; iVar < MAXNDIM; iVar++) { + for (jVar = 0; jVar < MAXNDIM; jVar++) { + F_Mat[iVar][jVar] = 0; } } /*--- Retrieve the values of the gradients of the shape functions for each node ---*/ /*--- This avoids repeated operations ---*/ + su2double GradNi_Ref_Mat[NNODES_3D][MAXNDIM] = {}; + su2double GradNi_Curr_Mat[NNODES_3D][MAXNDIM] = {}; + su2double currentCoord[NNODES_3D][MAXNDIM] = {}; + for (iNode = 0; iNode < nNode; iNode++) { for (iDim = 0; iDim < nDim; iDim++) { @@ -330,22 +212,11 @@ void CFEANonlinearElasticity::Compute_Tangent_Matrix(CElement *element, const CC /*--- Determinant of F --> Jacobian of the transformation ---*/ - J_F = F_Mat[0][0]*F_Mat[1][1]*F_Mat[2][2]+ - F_Mat[0][1]*F_Mat[1][2]*F_Mat[2][0]+ - F_Mat[0][2]*F_Mat[1][0]*F_Mat[2][1]- - F_Mat[0][2]*F_Mat[1][1]*F_Mat[2][0]- - F_Mat[1][2]*F_Mat[2][1]*F_Mat[0][0]- - F_Mat[2][2]*F_Mat[0][1]*F_Mat[1][0]; + ComputeJ_F(); /*--- Compute the left Cauchy deformation tensor ---*/ - for (iVar = 0; iVar < 3; iVar++) { - for (jVar = 0; jVar < 3; jVar++) { - for (kVar = 0; kVar < 3; kVar++) { - b_Mat[iVar][jVar] += F_Mat[iVar][kVar]*F_Mat[jVar][kVar]; - } - } - } + ComputeLeftCauchyGreenTensor(); /*--- Compute the constitutive matrix ---*/ @@ -362,8 +233,8 @@ void CFEANonlinearElasticity::Compute_Tangent_Matrix(CElement *element, const CC /*--- Compute the nodal stress term for each gaussian point and for each node, ---*/ /*--- and add it to the element structure to be retrieved from the solver ---*/ + su2double KAux_t_a[MAXNDIM] = {}; for (iVar = 0; iVar < nDim; iVar++) { - KAux_t_a[iVar] = 0.0; for (jVar = 0; jVar < nDim; jVar++) { KAux_t_a[iVar] += Weight * Stress_Tensor[iVar][jVar] * GradNi_Curr_Mat[iNode][jVar] * Jac_x; } @@ -375,25 +246,9 @@ void CFEANonlinearElasticity::Compute_Tangent_Matrix(CElement *element, const CC /*----------------------- CONSTITUTIVE AND STRESS TERM ---------------------------*/ /*--------------------------------------------------------------------------------*/ - if (nDim == 2) { - Ba_Mat[0][0] = GradNi_Curr_Mat[iNode][0]; - Ba_Mat[1][1] = GradNi_Curr_Mat[iNode][1]; - Ba_Mat[2][0] = GradNi_Curr_Mat[iNode][1]; - Ba_Mat[2][1] = GradNi_Curr_Mat[iNode][0]; - } - else if (nDim ==3) { - Ba_Mat[0][0] = GradNi_Curr_Mat[iNode][0]; - Ba_Mat[1][1] = GradNi_Curr_Mat[iNode][1]; - Ba_Mat[2][2] = GradNi_Curr_Mat[iNode][2]; - Ba_Mat[3][0] = GradNi_Curr_Mat[iNode][1]; - Ba_Mat[3][1] = GradNi_Curr_Mat[iNode][0]; - Ba_Mat[4][0] = GradNi_Curr_Mat[iNode][2]; - Ba_Mat[4][2] = GradNi_Curr_Mat[iNode][0]; - Ba_Mat[5][1] = GradNi_Curr_Mat[iNode][2]; - Ba_Mat[5][2] = GradNi_Curr_Mat[iNode][1]; - } + FillBMat(iNode, GradNi_Curr_Mat, Ba_Mat); - /*--- Compute the BT.D Matrix ---*/ + /*--- Compute the BT.D Matrix ---*/ for (iVar = 0; iVar < nDim; iVar++) { for (jVar = 0; jVar < bDim; jVar++) { @@ -415,28 +270,12 @@ void CFEANonlinearElasticity::Compute_Tangent_Matrix(CElement *element, const CC /*--- Assumming symmetry ---*/ for (jNode = iNode; jNode < nNode; jNode++) { - if (nDim == 2) { - Bb_Mat[0][0] = GradNi_Curr_Mat[jNode][0]; - Bb_Mat[1][1] = GradNi_Curr_Mat[jNode][1]; - Bb_Mat[2][0] = GradNi_Curr_Mat[jNode][1]; - Bb_Mat[2][1] = GradNi_Curr_Mat[jNode][0]; - } - else if (nDim ==3) { - Bb_Mat[0][0] = GradNi_Curr_Mat[jNode][0]; - Bb_Mat[1][1] = GradNi_Curr_Mat[jNode][1]; - Bb_Mat[2][2] = GradNi_Curr_Mat[jNode][2]; - Bb_Mat[3][0] = GradNi_Curr_Mat[jNode][1]; - Bb_Mat[3][1] = GradNi_Curr_Mat[jNode][0]; - Bb_Mat[4][0] = GradNi_Curr_Mat[jNode][2]; - Bb_Mat[4][2] = GradNi_Curr_Mat[jNode][0]; - Bb_Mat[5][1] = GradNi_Curr_Mat[jNode][2]; - Bb_Mat[5][2] = GradNi_Curr_Mat[jNode][1]; - } + FillBMat(jNode, GradNi_Curr_Mat, Bb_Mat); /*--- KAux_ab is the term for the constitutive part of the tangent matrix ---*/ + su2double KAux_ab[MAXNDIM][MAXNDIM] = {}; for (iVar = 0; iVar < nDim; iVar++) { for (jVar = 0; jVar < nDim; jVar++) { - KAux_ab[iVar][jVar] = 0.0; for (kVar = 0; kVar < bDim; kVar++) { KAux_ab[iVar][jVar] += Weight * AuxMatrixKc[iVar][kVar] * Bb_Mat[kVar][jVar] * Jac_x; } @@ -444,7 +283,7 @@ void CFEANonlinearElasticity::Compute_Tangent_Matrix(CElement *element, const CC } /*--- Ks_Aux_ab is the term for the constitutive part of the tangent matrix ---*/ - Ks_Aux_ab = 0.0; + su2double Ks_Aux_ab = 0.0; for (iVar = 0; iVar < nDim; iVar++) { Ks_Aux_ab += Weight * AuxMatrixKs[iVar] * GradNi_Curr_Mat[jNode][iVar] * Jac_x; } @@ -471,9 +310,9 @@ void CFEANonlinearElasticity::Compute_Tangent_Matrix(CElement *element, const CC void CFEANonlinearElasticity::Compute_NodalStress_Term(CElement *element, const CConfig *config) { - unsigned short iVar, jVar, kVar; - unsigned short iGauss, nGauss; - unsigned short iNode, nNode; + unsigned short iVar, jVar; + unsigned short iGauss; + unsigned short iNode; unsigned short iDim; /*--- TODO: Initialize values for the material model considered ---*/ @@ -494,34 +333,35 @@ void CFEANonlinearElasticity::Compute_NodalStress_Term(CElement *element, const /*-----------------------------------------------------------*/ - su2double Weight, Jac_x; - element->ClearElement(); /*--- Restarts the element to avoid adding over previous results. --*/ element->ComputeGrad_Linear(); /*--- TODO: Check if we can take this out so we don't have to do it twice. ---*/ element->ComputeGrad_NonLinear(); - nNode = element->GetnNodes(); - nGauss = element->GetnGaussPoints(); + const auto nNode = element->GetnNodes(); + const auto nGauss = element->GetnGaussPoints(); /*--- Full integration of the nodal stress ---*/ for (iGauss = 0; iGauss < nGauss; iGauss++) { - Weight = element->GetWeight(iGauss); - Jac_x = element->GetJ_x(iGauss); + const su2double Weight = element->GetWeight(iGauss); + const su2double Jac_x = element->GetJ_x(iGauss); /*--- Initialize the deformation gradient for each Gauss Point ---*/ - for (iVar = 0; iVar < 3; iVar++) { - for (jVar = 0; jVar < 3; jVar++) { - F_Mat[iVar][jVar] = 0.0; - b_Mat[iVar][jVar] = 0.0; + for (iVar = 0; iVar < MAXNDIM; iVar++) { + for (jVar = 0; jVar < MAXNDIM; jVar++) { + F_Mat[iVar][jVar] = 0; } } /*--- Retrieve the values of the gradients of the shape functions for each node ---*/ /*--- This avoids repeated operations ---*/ + su2double GradNi_Ref_Mat[NNODES_3D][MAXNDIM] = {}; + su2double GradNi_Curr_Mat[NNODES_3D][MAXNDIM] = {}; + su2double currentCoord[NNODES_3D][MAXNDIM] = {}; + for (iNode = 0; iNode < nNode; iNode++) { for (iDim = 0; iDim < nDim; iDim++) { @@ -552,22 +392,11 @@ void CFEANonlinearElasticity::Compute_NodalStress_Term(CElement *element, const /*--- Determinant of F --> Jacobian of the transformation ---*/ - J_F = F_Mat[0][0]*F_Mat[1][1]*F_Mat[2][2]+ - F_Mat[0][1]*F_Mat[1][2]*F_Mat[2][0]+ - F_Mat[0][2]*F_Mat[1][0]*F_Mat[2][1]- - F_Mat[0][2]*F_Mat[1][1]*F_Mat[2][0]- - F_Mat[1][2]*F_Mat[2][1]*F_Mat[0][0]- - F_Mat[2][2]*F_Mat[0][1]*F_Mat[1][0]; + ComputeJ_F(); /*--- Compute the left Cauchy deformation tensor ---*/ - for (iVar = 0; iVar < 3; iVar++) { - for (jVar = 0; jVar < 3; jVar++) { - for (kVar = 0; kVar < 3; kVar++) { - b_Mat[iVar][jVar] += F_Mat[iVar][kVar]*F_Mat[jVar][kVar]; - } - } - } + ComputeLeftCauchyGreenTensor(); /*--- Compute the stress tensor ---*/ @@ -576,11 +405,11 @@ void CFEANonlinearElasticity::Compute_NodalStress_Term(CElement *element, const for (iNode = 0; iNode < nNode; iNode++) { - /*--- Compute the nodal stress term for each gaussian point and for each node, ---*/ - /*--- and add it to the element structure to be retrieved from the solver ---*/ + /*--- Compute the nodal stress term for each gaussian point and for each node, ---*/ + /*--- and add it to the element structure to be retrieved from the solver ---*/ + su2double KAux_t_a[MAXNDIM] = {}; for (iVar = 0; iVar < nDim; iVar++) { - KAux_t_a[iVar] = 0.0; for (jVar = 0; jVar < nDim; jVar++) { KAux_t_a[iVar] += Weight * Stress_Tensor[iVar][jVar] * GradNi_Curr_Mat[iNode][jVar] * Jac_x; } @@ -600,19 +429,18 @@ void CFEANonlinearElasticity::Compute_NodalStress_Term(CElement *element, const void CFEANonlinearElasticity::Add_MaxwellStress(CElement *element, const CConfig *config) { -// Adds the Maxwell stress to the output of the stress Sxx, Syy, Szz, SVM... - - unsigned short iDim, jDim; + // Adds the Maxwell stress to the output of the stress Sxx, Syy, Szz, SVM... su2double E0 = 0.0, E1 = 0.0, E2 = 0.0; su2double E0_2 = 0.0, E1_2 = 0.0, E2_2 = 0.0; su2double E_2 = 0.0; - Compute_FmT_Mat(); + su2double FmT_Mat[MAXNDIM][MAXNDIM] = {}; + Compute_FmT_Mat(F_Mat, J_F, FmT_Mat); - for (iDim = 0; iDim < nDim; iDim++){ + for (unsigned short iDim = 0; iDim < nDim; iDim++){ EField_Curr_Unit[iDim] = 0.0; - for (jDim = 0; jDim < nDim; jDim++){ + for (unsigned short jDim = 0; jDim < nDim; jDim++){ EField_Curr_Unit[iDim] += FmT_Mat[iDim][jDim] * EField_Ref_Unit[jDim]; } } @@ -645,41 +473,23 @@ void CFEANonlinearElasticity::SetElectric_Properties(const CElement *element, co } -void CFEANonlinearElasticity::Compute_FmT_Mat() { - - FmT_Mat[0][0] = (F_Mat[1][1]*F_Mat[2][2] - F_Mat[1][2]*F_Mat[2][1]) / J_F; - FmT_Mat[0][1] = (F_Mat[1][2]*F_Mat[2][0] - F_Mat[2][2]*F_Mat[1][0]) / J_F; - FmT_Mat[0][2] = (F_Mat[1][0]*F_Mat[2][1] - F_Mat[1][1]*F_Mat[2][0]) / J_F; - - FmT_Mat[1][0] = (F_Mat[0][2]*F_Mat[2][1] - F_Mat[0][1]*F_Mat[2][2]) / J_F; - FmT_Mat[1][1] = (F_Mat[0][0]*F_Mat[2][2] - F_Mat[2][0]*F_Mat[0][2]) / J_F; - FmT_Mat[1][2] = (F_Mat[0][1]*F_Mat[2][1] - F_Mat[0][0]*F_Mat[2][0]) / J_F; - - FmT_Mat[2][0] = (F_Mat[0][1]*F_Mat[1][2] - F_Mat[0][2]*F_Mat[1][1]) / J_F; - FmT_Mat[2][1] = (F_Mat[0][2]*F_Mat[1][0] - F_Mat[0][0]*F_Mat[1][2]) / J_F; - FmT_Mat[2][2] = (F_Mat[0][0]*F_Mat[1][1] - F_Mat[0][1]*F_Mat[1][0]) / J_F; - -} - void CFEANonlinearElasticity::Compute_Isochoric_F_b() { - unsigned short iVar, jVar, kVar; - - J_F_Iso = pow(J_F,-0.333333333333333); + const su2double J_F_Iso = pow(J_F,-0.333333333333333); // Isochoric deformation tensor - for (iVar = 0; iVar < 3; iVar++){ - for (jVar = 0; jVar < 3; jVar++){ + su2double F_Mat_Iso[MAXNDIM][MAXNDIM]; + for (unsigned short iVar = 0; iVar < MAXNDIM; iVar++) { + for (unsigned short jVar = 0; jVar < MAXNDIM; jVar++) { F_Mat_Iso[iVar][jVar] = F_Mat[iVar][jVar] * J_F_Iso; } } // Isochoric left Cauchy-Green tensor - - for (iVar = 0; iVar < 3; iVar++){ - for (jVar = 0; jVar < 3; jVar++){ + for (unsigned short iVar = 0; iVar < MAXNDIM; iVar++) { + for (unsigned short jVar = 0; jVar < MAXNDIM; jVar++) { b_Mat_Iso[iVar][jVar] = 0.0; - for (kVar = 0; kVar < 3; kVar++){ + for (unsigned short kVar = 0; kVar < MAXNDIM; kVar++) { b_Mat_Iso[iVar][jVar] += F_Mat_Iso[iVar][kVar]*F_Mat_Iso[jVar][kVar]; } } @@ -689,9 +499,7 @@ void CFEANonlinearElasticity::Compute_Isochoric_F_b() { void CFEANonlinearElasticity::Assign_cijkl_D_Mat() { - unsigned short iVar, jVar; - - if (nDim == 2){ + if (nDim == 2) { D_Mat[0][0] = cijkl[0][0][0][0]; D_Mat[1][1] = cijkl[1][1][1][1]; @@ -705,8 +513,7 @@ void CFEANonlinearElasticity::Assign_cijkl_D_Mat() { D_Mat[2][1] = cijkl[1][0][1][1]; D_Mat[2][2] = cijkl[0][1][0][1]; - } - else{ + } else { D_Mat[0][0] = cijkl[0][0][0][0]; D_Mat[1][1] = cijkl[1][1][1][1]; D_Mat[2][2] = cijkl[2][2][2][2]; @@ -734,8 +541,8 @@ void CFEANonlinearElasticity::Assign_cijkl_D_Mat() { D_Mat[4][5] = cijkl[0][2][1][2]; - for (jVar = 0; jVar < 6; jVar++){ - for (iVar = 0; iVar < jVar; iVar++){ + for (unsigned short jVar = 0; jVar < 6; jVar++){ + for (unsigned short iVar = 0; iVar < jVar; iVar++){ D_Mat[jVar][iVar] = D_Mat[iVar][jVar]; } } @@ -746,11 +553,11 @@ void CFEANonlinearElasticity::Assign_cijkl_D_Mat() { su2double CFEANonlinearElasticity::Compute_Averaged_NodalStress(CElement *element, const CConfig *config) { - unsigned short iVar, jVar, kVar; - unsigned short iGauss, nGauss; - unsigned short iDim, iNode, nNode; + unsigned short iVar, jVar; + unsigned short iGauss; + unsigned short iDim, iNode; - su2double avgStress[DIM_STRAIN_3D] = {0.0}; + su2double avgStress[DIM_STRAIN_3D] = {}; /*--- TODO: Initialize values for the material model considered ---*/ SetElement_Properties(element, config); @@ -772,35 +579,36 @@ su2double CFEANonlinearElasticity::Compute_Averaged_NodalStress(CElement *elemen /*--- Recompute Lame parameters as they depend on the material properties ---*/ Compute_Lame_Parameters(); - su2double Weight, Jac_x; - element->ClearStress(); element->ClearElement(); /*--- Restarts the element to avoid adding over previous results. ---*/ element->ComputeGrad_Linear(); element->ComputeGrad_NonLinear(); - nNode = element->GetnNodes(); - nGauss = element->GetnGaussPoints(); + const auto nNode = element->GetnNodes(); + const auto nGauss = element->GetnGaussPoints(); /*--- Computation of the deformation gradient ---*/ for (iGauss = 0; iGauss < nGauss; iGauss++) { - Weight = element->GetWeight(iGauss); - Jac_x = element->GetJ_x(iGauss); + const su2double Weight = element->GetWeight(iGauss); + const su2double Jac_x = element->GetJ_x(iGauss); /*--- Initialize the deformation gradient for each Gauss Point ---*/ - for (iVar = 0; iVar < 3; iVar++) { - for (jVar = 0; jVar < 3; jVar++) { - F_Mat[iVar][jVar] = 0.0; - b_Mat[iVar][jVar] = 0.0; + for (iVar = 0; iVar < MAXNDIM; iVar++) { + for (jVar = 0; jVar < MAXNDIM; jVar++) { + F_Mat[iVar][jVar] = 0; } } /*--- Retrieve the values of the gradients of the shape functions for each node ---*/ /*--- This avoids repeated operations ---*/ + su2double GradNi_Ref_Mat[NNODES_3D][MAXNDIM] = {}; + su2double GradNi_Curr_Mat[NNODES_3D][MAXNDIM] = {}; + su2double currentCoord[NNODES_3D][MAXNDIM] = {}; + for (iNode = 0; iNode < nNode; iNode++) { for (iDim = 0; iDim < nDim; iDim++) { @@ -831,22 +639,11 @@ su2double CFEANonlinearElasticity::Compute_Averaged_NodalStress(CElement *elemen /*--- Determinant of F --> Jacobian of the transformation ---*/ - J_F = F_Mat[0][0]*F_Mat[1][1]*F_Mat[2][2]+ - F_Mat[0][1]*F_Mat[1][2]*F_Mat[2][0]+ - F_Mat[0][2]*F_Mat[1][0]*F_Mat[2][1]- - F_Mat[0][2]*F_Mat[1][1]*F_Mat[2][0]- - F_Mat[1][2]*F_Mat[2][1]*F_Mat[0][0]- - F_Mat[2][2]*F_Mat[0][1]*F_Mat[1][0]; + ComputeJ_F(); /*--- Compute the left Cauchy deformation tensor ---*/ - for (iVar = 0; iVar < 3; iVar++) { - for (jVar = 0; jVar < 3; jVar++) { - for (kVar = 0; kVar < 3; kVar++) { - b_Mat[iVar][jVar] += F_Mat[iVar][kVar]*F_Mat[jVar][kVar]; - } - } - } + ComputeLeftCauchyGreenTensor(); /*--- Compute the stress tensor ---*/ @@ -867,8 +664,8 @@ su2double CFEANonlinearElasticity::Compute_Averaged_NodalStress(CElement *elemen /*--- Compute the nodal stress term for each gaussian point and for each node, ---*/ /*--- and add it to the element structure to be retrieved from the solver ---*/ + su2double KAux_t_a[MAXNDIM] = {}; for (iVar = 0; iVar < nDim; iVar++) { - KAux_t_a[iVar] = 0.0; for (jVar = 0; jVar < nDim; jVar++) { KAux_t_a[iVar] += Weight * Stress_Tensor[iVar][jVar] * GradNi_Curr_Mat[iNode][jVar] * Jac_x; } diff --git a/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp b/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp index 65bb63418093..90e23c38536d 100644 --- a/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp +++ b/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp @@ -181,7 +181,7 @@ void CFEM_Knowles_NearInc::Compute_Constitutive_Matrix(CElement *element, const void CFEM_Knowles_NearInc::Compute_Stress_Tensor(CElement *element, const CConfig *config, unsigned short iGauss) { - /* -- Suchocki (2011) (full reference in class constructor). ---*/ + /*--- Suchocki (2011) (full reference in class constructor). ---*/ unsigned short iVar, jVar; @@ -208,9 +208,7 @@ void CFEM_Knowles_NearInc::Compute_Stress_Tensor(CElement *element, const CConfi } CFEM_DielectricElastomer::CFEM_DielectricElastomer(unsigned short val_nDim, unsigned short val_nVar, const CConfig *config) : - CFEANonlinearElasticity(val_nDim, val_nVar, config) { - -} + CFEANonlinearElasticity(val_nDim, val_nVar, config) {} void CFEM_DielectricElastomer::Compute_Constitutive_Matrix(CElement *element, const CConfig *config) { @@ -230,36 +228,16 @@ void CFEM_DielectricElastomer::Compute_Constitutive_Matrix(CElement *element, co D_Mat[5][0] = 0.0; D_Mat[5][1] = 0.0; D_Mat[5][2] = 0.0; D_Mat[5][3] = 0.0; D_Mat[5][4] = 0.0; D_Mat[5][5] = 0.0; } - } void CFEM_DielectricElastomer::Compute_Stress_Tensor(CElement *element, const CConfig *config, unsigned short iGauss) { - unsigned short iDim, jDim; - - su2double E0 = 0.0, E1 = 0.0, E2 = 0.0; - su2double E0_2 = 0.0, E1_2 = 0.0, E2_2 = 0.0; - su2double E_2 = 0.0; - - Compute_FmT_Mat(); - - for (iDim = 0; iDim < nDim; iDim++){ - EField_Curr_Unit[iDim] = 0.0; - for (jDim = 0; jDim < nDim; jDim++){ - EField_Curr_Unit[iDim] += FmT_Mat[iDim][jDim] * EField_Ref_Unit[jDim]; + for (unsigned short iDim = 0; iDim < MAXNDIM; ++iDim) { + for (unsigned short jDim = 0; jDim < MAXNDIM; ++jDim) { + Stress_Tensor[iDim][jDim] = 0; } } - - E0 = EFieldMod_Ref*EField_Curr_Unit[0]; E0_2 = pow(E0,2); - E1 = EFieldMod_Ref*EField_Curr_Unit[1]; E1_2 = pow(E1,2); - if (nDim == 3) {E2 = EFieldMod_Ref*EField_Curr_Unit[2]; E2_2 = pow(E2,2);} - - E_2 = E0_2+E1_2+E2_2; - - Stress_Tensor[0][0] = ke_DE*(E0_2-0.5*E_2); Stress_Tensor[0][1] = ke_DE*E0*E1; Stress_Tensor[0][2] = ke_DE*E0*E2; - Stress_Tensor[1][0] = ke_DE*E1*E0; Stress_Tensor[1][1] = ke_DE*(E1_2-0.5*E_2); Stress_Tensor[1][2] = ke_DE*E1*E2; - Stress_Tensor[2][0] = ke_DE*E2*E0; Stress_Tensor[2][1] = ke_DE*E2*E1; Stress_Tensor[2][2] = ke_DE*(E2_2-0.5*E_2); - + Add_MaxwellStress(element, config); } CFEM_IdealDE::CFEM_IdealDE(unsigned short val_nDim, unsigned short val_nVar, diff --git a/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg b/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg index 64c652a4f53d..0ec411b35c5f 100644 --- a/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg +++ b/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg @@ -22,8 +22,8 @@ MARKER_PRESSURE= ( y_minus, 0, y_plus, 0 ) % MARKER_PRESSURE= ( y_minus, 0, y_plus, 0, z_minus, 0, z_plus, 0 ) MARKER_LOAD= ( x_plus, 1, 1000, 0, -1, 0 ) -LINEAR_SOLVER= FGCRODR -LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER= PASTIX_LDLT +LINEAR_SOLVER_PREC= LU_SGS LINEAR_SOLVER_ERROR= 1E-4 LINEAR_SOLVER_ITER= 100 LINEAR_SOLVER_RESTART_FREQUENCY= 100 From 3ab1311bbd2ed53f3c1397ca841c892cc1ec4084 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 4 Apr 2026 10:57:00 -0700 Subject: [PATCH 197/229] revert test --- .../fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg b/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg index 0ec411b35c5f..64c652a4f53d 100644 --- a/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg +++ b/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg @@ -22,8 +22,8 @@ MARKER_PRESSURE= ( y_minus, 0, y_plus, 0 ) % MARKER_PRESSURE= ( y_minus, 0, y_plus, 0, z_minus, 0, z_plus, 0 ) MARKER_LOAD= ( x_plus, 1, 1000, 0, -1, 0 ) -LINEAR_SOLVER= PASTIX_LDLT -LINEAR_SOLVER_PREC= LU_SGS +LINEAR_SOLVER= FGCRODR +LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ERROR= 1E-4 LINEAR_SOLVER_ITER= 100 LINEAR_SOLVER_RESTART_FREQUENCY= 100 From 9e0cdc53ee67816f7dacc9c5e14f8465dc7fa29a Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 4 Apr 2026 10:59:47 -0700 Subject: [PATCH 198/229] remove debug --- .github/workflows/regression.yml | 48 ++++++++++++------------ .github/workflows/release-management.yml | 2 +- TestCases/hybrid_regression.py | 4 -- TestCases/parallel_regression.py | 20 ---------- 4 files changed, 25 insertions(+), 49 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index ecaa137cb4e5..242e6a96ad61 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -54,12 +54,12 @@ jobs: key: ${{ matrix.config_set }}-${{ github.sha }} restore-keys: ${{ matrix.config_set }} - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/build-su2:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Build - uses: docker://ghcr.io/su2code/su2/build-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/build-su2:260404-0039 with: args: -b ${{github.ref}} -f "${{matrix.flags}}" - name: Compress binaries @@ -70,7 +70,7 @@ jobs: name: ${{ matrix.config_set }} path: install_bin.tgz - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/build-su2:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -97,12 +97,12 @@ jobs: key: ${{ matrix.config_set }}-${{ github.sha }} restore-keys: ${{ matrix.config_set }} - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260329-0132 + uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Build - uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260329-0132 + uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260404-0039 with: args: -b ${{github.ref}} -f "${{matrix.flags}}" - name: Compress binaries @@ -113,7 +113,7 @@ jobs: name: ${{ matrix.config_set }} path: install_bin.tgz - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260329-0132 + uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -137,12 +137,12 @@ jobs: key: ${{ matrix.config_set }}-${{ github.sha }} restore-keys: ${{ matrix.config_set }} - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-asan:260329-0132 + uses: docker://ghcr.io/su2code/su2/build-su2-asan:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Build - run: docker run --rm --cap-add SYS_PTRACE -v $(pwd):${{ github.workspace }} -w ${{ github.workspace }} ghcr.io/su2code/su2/build-su2-asan:260329-0132 -b ${{github.ref}} -f "${{matrix.flags}}" + run: docker run --rm --cap-add SYS_PTRACE -v $(pwd):${{ github.workspace }} -w ${{ github.workspace }} ghcr.io/su2code/su2/build-su2-asan:260404-0039 -b ${{github.ref}} -f "${{matrix.flags}}" - name: Compress binaries run: tar -zcvf install_bin.tgz install/* - name: Upload Binaries @@ -151,7 +151,7 @@ jobs: name: ${{ matrix.config_set }} path: install_bin.tgz - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-asan:260329-0132 + uses: docker://ghcr.io/su2code/su2/build-su2-asan:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -182,7 +182,7 @@ jobs: tag: OMP steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -208,12 +208,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -231,7 +231,7 @@ jobs: tag: TagNoMPI steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -257,12 +257,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--tapetests" - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -277,7 +277,7 @@ jobs: testscript: ['hybrid_regression.py', 'hybrid_regression_AD.py'] steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -303,12 +303,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260404-0039 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--tsan" - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -322,7 +322,7 @@ jobs: testscript: ['serial_regression.py', 'serial_regression_AD.py'] steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-asan:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2-asan:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -348,12 +348,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2-asan:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2-asan:260404-0039 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--asan" - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-asan:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2-asan:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -374,7 +374,7 @@ jobs: tag: MPI steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -435,11 +435,11 @@ jobs: echo $PWD ls -lahR - name: Run Unit Tests - uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 with: entrypoint: install/bin/${{matrix.testdriver}} - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260329-0132 + uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} diff --git a/.github/workflows/release-management.yml b/.github/workflows/release-management.yml index 6f6ae7b0176f..f9c0c6c92f02 100644 --- a/.github/workflows/release-management.yml +++ b/.github/workflows/release-management.yml @@ -35,7 +35,7 @@ jobs: key: ${{ matrix.os_bin }}-${{ github.sha }} restore-keys: ${{ matrix.os_bin }} - name: Build - uses: docker://ghcr.io/su2code/su2/build-su2-cross:260329-0132 + uses: docker://ghcr.io/su2code/su2/build-su2-cross:260404-0039 with: args: -b ${{ github.sha }} -f "${{matrix.flags}}" - name: Create Archive diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index eddb1890a54c..f217ff98a4a5 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -28,10 +28,6 @@ # make print(*args) function available in PY2.6+, does'nt work on PY < 2.6 from __future__ import print_function -import os -os.environ["OMPI_MCA_osc"] = "pt2pt" -os.environ["OMPI_MCA_btl"] = "self,tcp" - import sys from TestCase import TestCase from TestCase import parse_args diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index d037ea646818..5dbfde3f381e 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -28,34 +28,14 @@ # make print(*args) function available in PY2.6+, does'nt work on PY < 2.6 from __future__ import print_function -import os -os.environ["OMPI_MCA_osc"] = "pt2pt" -os.environ["OMPI_MCA_btl"] = "self,vader,tcp" - import sys from TestCase import TestCase -import subprocess - def main(): '''This program runs SU2 and ensures that the output matches specified values. This will be used to do checks when code is pushed to github to make sure nothing is broken. ''' - result = subprocess.run( - ['df', '-h', '/dev/shm'], - capture_output=True, - text=True - ) - - print("STDOUT:") - print(result.stdout) - - print("STDERR:") - print(result.stderr) - - print("Return code:", result.returncode) - test_list = [] ####################### From f5f8f4bf3556be217583e95eef2349e3034c2465 Mon Sep 17 00:00:00 2001 From: Sahil_Kumar Date: Sat, 4 Apr 2026 18:06:24 +0000 Subject: [PATCH 199/229] Re-trigger CI after TestCase#190 merged From d9f841810cbc275838f88f33fd7ee238a5f5061d Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 4 Apr 2026 12:34:41 -0700 Subject: [PATCH 200/229] almost --- .github/workflows/regression.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 242e6a96ad61..453f7a577a8b 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -304,6 +304,8 @@ jobs: ls -lahR $BIN_FOLDER - name: Run Tests in Container uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260404-0039 + env: + PMIX_MCA_gds: hash with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--tsan" @@ -436,6 +438,8 @@ jobs: ls -lahR - name: Run Unit Tests uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 + env: + OMPI_MCA_osc: pt2pt with: entrypoint: install/bin/${{matrix.testdriver}} - name: Post Cleanup From a53f40d8402c9a71f29e765e83b5d675b2c316ed Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 4 Apr 2026 13:02:51 -0700 Subject: [PATCH 201/229] tol per value --- TestCases/TestCase.py | 11 ++++++++--- TestCases/parallel_regression.py | 3 ++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/TestCases/TestCase.py b/TestCases/TestCase.py index 006271bea714..1ea3019b6880 100644 --- a/TestCases/TestCase.py +++ b/TestCases/TestCase.py @@ -232,9 +232,14 @@ def run_test(self, with_tsan=False, with_asan=False, with_tapetests=False): for j in range(len(data)): sim_vals.append( float(data[j]) ) delta_vals.append( abs(float(data[j])-self.test_vals[j]) ) - if delta_vals[j] > self.tol: - exceed_tol = True - passed = False + if isintance(self.tol, list): + if delta_vals[j] > self.tol[j]: + exceed_tol = True + passed = False + else: + if delta_vals[j] > self.tol: + exceed_tol = True + passed = False break else: iter_missing = True diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 5dbfde3f381e..14363d25ef7d 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -298,7 +298,8 @@ def main(): ramp_msw.cfg_dir = "euler/ramp" ramp_msw.cfg_file = "inv_ramp_msw.cfg" ramp_msw.test_iter = 100 - ramp_msw.test_vals = [-7.522451, -1.791193, -0.077520, 0.054427] + ramp_msw.test_vals = [-7.5, -1.765, -0.077520, 0.054427] + ramp_msw.tol = [0.03, 0.03, 0.00001, 0.00001] test_list.append(ramp_msw) # MFR_coupling From d0ce7731203d66bf5cb2edde90332af45b4924aa Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 4 Apr 2026 13:29:32 -0700 Subject: [PATCH 202/229] update regressions --- TestCases/hybrid_regression.py | 4 ++-- TestCases/parallel_regression.py | 4 ++-- TestCases/serial_regression.py | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index f217ff98a4a5..18ea54aeb92a 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -215,7 +215,7 @@ def main(): turb_naca0012_sst_sust.cfg_dir = "rans/naca0012" turb_naca0012_sst_sust.cfg_file = "turb_NACA0012_sst_sust.cfg" turb_naca0012_sst_sust.test_iter = 10 - turb_naca0012_sst_sust.test_vals = [-12.080740, -14.837176, -5.732917, 1.000893, 0.019109, -2.120257] + turb_naca0012_sst_sust.test_vals = [-12.080804, -14.837176, -5.732917, 1.000893, 0.019109, -2.120148] turb_naca0012_sst_sust.test_vals_aarch64 = [-12.073210, -14.836724, -5.732627, 1.000050, 0.019144, -2.629689] test_list.append(turb_naca0012_sst_sust) @@ -252,7 +252,7 @@ def main(): axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.066676, -7.446616, -8.813770, -3.730662, 0] + axi_rans_air_nozzle_restart.test_vals = [-12.066674, -7.446485, -8.813457, -3.730648, 0] axi_rans_air_nozzle_restart.test_vals_aarch64 = [-14.140441, -9.154674, -10.886121, -5.806594, 0.000000] test_list.append(axi_rans_air_nozzle_restart) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 5dbfde3f381e..cadbede988e3 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -491,7 +491,7 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.094699, -15.251093, -5.906365, 1.070413, 0.015775, -2.376178, 0.000000] + turb_naca0012_sst.test_vals = [-12.094710, -15.251093, -5.906365, 1.070413, 0.015775, -2.376172, 0.000000] turb_naca0012_sst.test_vals_aarch64 = [-12.075620, -15.246688, -5.861276, 1.070036, 0.015841, -1.991001, 0.000000] turb_naca0012_sst.timeout = 3200 test_list.append(turb_naca0012_sst) @@ -1457,7 +1457,7 @@ def main(): pywrapper_turb_naca0012_sst.cfg_dir = "rans/naca0012" pywrapper_turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" pywrapper_turb_naca0012_sst.test_iter = 10 - pywrapper_turb_naca0012_sst.test_vals = [-12.094699, -15.251093, -5.906365, 1.070413, 0.015775, -2.376178, 0.000000] + pywrapper_turb_naca0012_sst.test_vals = [-12.094710, -15.251093, -5.906365, 1.070413, 0.015775, -2.376172, 0] pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.075620, -15.246688, -5.861276, 1.070036, 0.015841, -1.991001, 0.000000] pywrapper_turb_naca0012_sst.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") pywrapper_turb_naca0012_sst.timeout = 3200 diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 088dc2086ac1..9e23c0304f46 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -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 = [-4.372228, -4.068732, -0.031530, 0.142087] + inc_nozzle.test_vals = [-3.991840, -3.514388, -0.030614, 0.085106] test_list.append(inc_nozzle) ############################# From 1ab8cad40f9bea2426626c635296f3f1c4434929 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 4 Apr 2026 13:33:25 -0700 Subject: [PATCH 203/229] fix --- TestCases/TestCase.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/TestCase.py b/TestCases/TestCase.py index 1ea3019b6880..651193244522 100644 --- a/TestCases/TestCase.py +++ b/TestCases/TestCase.py @@ -232,7 +232,7 @@ def run_test(self, with_tsan=False, with_asan=False, with_tapetests=False): for j in range(len(data)): sim_vals.append( float(data[j]) ) delta_vals.append( abs(float(data[j])-self.test_vals[j]) ) - if isintance(self.tol, list): + if isinstance(self.tol, list): if delta_vals[j] > self.tol[j]: exceed_tol = True passed = False From 99c1203bfad6fb394114d0b94f3912329fe23f7d Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 4 Apr 2026 15:30:03 -0700 Subject: [PATCH 204/229] try to fix windows build --- .../include/output/filewriter/CTecplotBinaryFileWriter.hpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp b/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp index da9d09979c6a..29be9e12d2f0 100644 --- a/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp @@ -27,9 +27,11 @@ #pragma once +#include +#include + #include "CFileWriter.hpp" -#include class CTecplotBinaryFileWriter final: public CFileWriter{ From ebade0434f5062f0a1126218e660cde1b7dc02ec Mon Sep 17 00:00:00 2001 From: Sahil_Kumar Date: Sun, 5 Apr 2026 11:09:44 +0000 Subject: [PATCH 205/229] Update test_vals to CI computed values at Time_Iter=2, Inner_Iter=0 --- TestCases/serial_regression.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index d831b67e721c..ed1a74ca42a0 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -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 = [-4.799603, -7.374477, -0.005421, 0.008293] + unst_pitching_naca64a010_rans.test_vals = [-1.299045, -3.951372, 0.010139, 0.008244] 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 = [-4.240073, 1.280267, -0.040141, 0.000887] + unst_pitching_naca64a010_euler.test_vals = [-1.186839, 4.280301, -0.038811, 0.000913] 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 = [-5.829829, -0.258459, 0.888444, -0.124558] + unst_plunging_naca0012.test_vals = [-4.083462, 1.366757, -3.718481, -0.066605] unst_plunging_naca0012.unsteady = True test_list.append(unst_plunging_naca0012) From f42ec2143964b605b23796d75c4b225e4efcb38b Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 5 Apr 2026 09:28:48 -0700 Subject: [PATCH 206/229] update docker for MacOS cross build --- .github/workflows/regression.yml | 48 ++++++++++++------------ .github/workflows/release-management.yml | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 453f7a577a8b..899b2cc50155 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -54,12 +54,12 @@ jobs: key: ${{ matrix.config_set }}-${{ github.sha }} restore-keys: ${{ matrix.config_set }} - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/build-su2:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Build - uses: docker://ghcr.io/su2code/su2/build-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/build-su2:260405-0054 with: args: -b ${{github.ref}} -f "${{matrix.flags}}" - name: Compress binaries @@ -70,7 +70,7 @@ jobs: name: ${{ matrix.config_set }} path: install_bin.tgz - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/build-su2:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -97,12 +97,12 @@ jobs: key: ${{ matrix.config_set }}-${{ github.sha }} restore-keys: ${{ matrix.config_set }} - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260404-0039 + uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Build - uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260404-0039 + uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260405-0054 with: args: -b ${{github.ref}} -f "${{matrix.flags}}" - name: Compress binaries @@ -113,7 +113,7 @@ jobs: name: ${{ matrix.config_set }} path: install_bin.tgz - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260404-0039 + uses: docker://ghcr.io/su2code/su2/build-su2-tsan:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -137,12 +137,12 @@ jobs: key: ${{ matrix.config_set }}-${{ github.sha }} restore-keys: ${{ matrix.config_set }} - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-asan:260404-0039 + uses: docker://ghcr.io/su2code/su2/build-su2-asan:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Build - run: docker run --rm --cap-add SYS_PTRACE -v $(pwd):${{ github.workspace }} -w ${{ github.workspace }} ghcr.io/su2code/su2/build-su2-asan:260404-0039 -b ${{github.ref}} -f "${{matrix.flags}}" + run: docker run --rm --cap-add SYS_PTRACE -v $(pwd):${{ github.workspace }} -w ${{ github.workspace }} ghcr.io/su2code/su2/build-su2-asan:260405-0054 -b ${{github.ref}} -f "${{matrix.flags}}" - name: Compress binaries run: tar -zcvf install_bin.tgz install/* - name: Upload Binaries @@ -151,7 +151,7 @@ jobs: name: ${{ matrix.config_set }} path: install_bin.tgz - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/build-su2-asan:260404-0039 + uses: docker://ghcr.io/su2code/su2/build-su2-asan:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -182,7 +182,7 @@ jobs: tag: OMP steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -208,12 +208,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2:260405-0054 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -231,7 +231,7 @@ jobs: tag: TagNoMPI steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -257,12 +257,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2:260405-0054 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--tapetests" - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -277,7 +277,7 @@ jobs: testscript: ['hybrid_regression.py', 'hybrid_regression_AD.py'] steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -303,14 +303,14 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260405-0054 env: PMIX_MCA_gds: hash with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--tsan" - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2-tsan:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -324,7 +324,7 @@ jobs: testscript: ['serial_regression.py', 'serial_regression_AD.py'] steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-asan:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2-asan:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -350,12 +350,12 @@ jobs: chmod a+x $BIN_FOLDER/* ls -lahR $BIN_FOLDER - name: Run Tests in Container - uses: docker://ghcr.io/su2code/su2/test-su2-asan:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2-asan:260405-0054 with: # -t -c args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--asan" - name: Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2-asan:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2-asan:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -376,7 +376,7 @@ jobs: tag: MPI steps: - name: Pre Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} @@ -437,13 +437,13 @@ jobs: echo $PWD ls -lahR - name: Run Unit Tests - uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2:260405-0054 env: OMPI_MCA_osc: pt2pt with: entrypoint: install/bin/${{matrix.testdriver}} - name: Post Cleanup - uses: docker://ghcr.io/su2code/su2/test-su2:260404-0039 + uses: docker://ghcr.io/su2code/su2/test-su2:260405-0054 with: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} diff --git a/.github/workflows/release-management.yml b/.github/workflows/release-management.yml index f9c0c6c92f02..55b34d16f2f3 100644 --- a/.github/workflows/release-management.yml +++ b/.github/workflows/release-management.yml @@ -35,7 +35,7 @@ jobs: key: ${{ matrix.os_bin }}-${{ github.sha }} restore-keys: ${{ matrix.os_bin }} - name: Build - uses: docker://ghcr.io/su2code/su2/build-su2-cross:260404-0039 + uses: docker://ghcr.io/su2code/su2/build-su2-cross:260405-0054 with: args: -b ${{ github.sha }} -f "${{matrix.flags}}" - name: Create Archive From 31a36ea56c08711cabd04269a162f32388c3603c Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sun, 5 Apr 2026 10:25:39 -0700 Subject: [PATCH 207/229] omp instead of sequential binaries --- .github/workflows/release-management.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release-management.yml b/.github/workflows/release-management.yml index 55b34d16f2f3..b2e393d58245 100644 --- a/.github/workflows/release-management.yml +++ b/.github/workflows/release-management.yml @@ -12,18 +12,18 @@ jobs: strategy: fail-fast: false matrix: - os_bin: [macos64, macos64-mpi, linux64, linux64-mpi, win64, win64-mpi] + os_bin: [macos64-omp, macos64-mpi, linux64-omp, linux64-mpi, win64-omp, win64-mpi] include: - - os_bin: win64 - flags: '-Dwith-mpi=disabled --cross-file=/hostfiles/hostfile_windows' + - os_bin: win64-omp + flags: '-Dwith-omp=true -Dwith-mpi=disabled --cross-file=/hostfiles/hostfile_windows' - os_bin: win64-mpi flags: '-Dcustom-mpi=true --cross-file=/hostfiles/hostfile_windows_mpi' - - os_bin: macos64 - flags: '-Dwith-mpi=disabled --cross-file=/hostfiles/hostfile_darwin' + - os_bin: macos64-omp + flags: '-Dwith-omp=true -Dwith-mpi=disabled --cross-file=/hostfiles/hostfile_darwin' - os_bin: macos64-mpi flags: '-Dcustom-mpi=true --cross-file=/hostfiles/hostfile_darwin_mpi' - - os_bin: linux64 - flags: '-Dwith-mpi=disabled -Dstatic-cgns-deps=true --cross-file=/hostfiles/hostfile_linux' + - os_bin: linux64-omp + flags: '-Dwith-omp=true -Dwith-mpi=disabled -Dstatic-cgns-deps=true --cross-file=/hostfiles/hostfile_linux' - os_bin: linux64-mpi flags: '-Dcustom-mpi=true --cross-file=/hostfiles/hostfile_linux_mpi' runs-on: ubuntu-latest From b475855ec7b1be22eb96cfb973c143c6c9811668 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Tue, 7 Apr 2026 11:28:14 -0700 Subject: [PATCH 208/229] Use better compiler optimization options by default (#2779) * use good defaults * swig fix * more warnings * more warnings * one more warning, no arch in tsan tests * not all runner are equal I guess * start updating tests, consistent flags for different Eigen's * [skip ci] * file diffs * try again --- .github/workflows/regression.yml | 30 +- .github/workflows/release-management.yml | 16 +- SU2_CFD/include/solvers/CHeatSolver.hpp | 4 +- .../src/solvers/CGradientSmoothingSolver.cpp | 24 +- SU2_CFD/src/solvers/CHeatSolver.cpp | 4 +- SU2_CFD/src/solvers/CTurbSASolver.cpp | 5 +- SU2_PY/pySU2/meson.build | 13 +- .../disc_adj_fsi/dyn_fsi/grad_dv.opt.ref | 16 +- TestCases/fea_topology/grad_ref_node.dat.ref | 2 +- TestCases/grad_smooth/oneram6/of_hess.dat.ref | 2 +- TestCases/hybrid_regression.py | 28 +- TestCases/hybrid_regression_AD.py | 2 +- TestCases/parallel_regression.py | 58 +-- TestCases/parallel_regression_AD.py | 10 +- .../translating_NACA0012/forces_0.csv.ref | 400 +++++++++--------- .../forces_0.csv.ref | 400 +++++++++--------- TestCases/serial_regression.py | 38 +- TestCases/serial_regression_AD.py | 4 +- TestCases/tutorials.py | 10 +- TestCases/vandv.py | 8 +- meson.build | 20 +- meson_options.txt | 19 +- 22 files changed, 563 insertions(+), 550 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 899b2cc50155..31aaed6f6930 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -26,25 +26,25 @@ jobs: config_set: [BaseMPI, ReverseMPI, ForwardMPI, BaseNoMPI, ReverseNoMPI, ForwardNoMPI, ReverseTagNoMPI, BaseOMP, ReverseOMP, ForwardOMP] include: - config_set: BaseMPI - flags: '-Denable-pywrapper=true -Denable-coolprop=true -Denable-mpp=true -Dinstall-mpp=true -Denable-mlpcpp=true -Denable-tests=true --warnlevel=2' + flags: '-Dcpu-arch=skylake -Denable-pywrapper=true -Denable-coolprop=true -Denable-mpp=true -Dinstall-mpp=true -Denable-mlpcpp=true -Denable-tests=true --warnlevel=2' - config_set: ReverseMPI - flags: '-Denable-autodiff=true -Denable-normal=false -Denable-pywrapper=true -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' + flags: '-Dcpu-arch=skylake -Denable-autodiff=true -Denable-normal=false -Denable-pywrapper=true -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' - config_set: ForwardMPI - flags: '-Denable-directdiff=true -Denable-normal=false -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' + flags: '-Dcpu-arch=skylake -Denable-directdiff=true -Denable-normal=false -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' - config_set: BaseNoMPI - flags: '-Denable-pywrapper=true -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true -Denable-tests=true --warnlevel=3 --werror' + flags: '-Dcpu-arch=skylake -Denable-pywrapper=true -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true -Denable-tests=true --warnlevel=3 --werror' - config_set: ReverseNoMPI - flags: '-Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror' + flags: '-Dcpu-arch=skylake -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror' - config_set: ForwardNoMPI - flags: '-Denable-directdiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-tests=true --warnlevel=3 --werror' + flags: '-Dcpu-arch=skylake -Denable-directdiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-tests=true --warnlevel=3 --werror' - config_set: ReverseTagNoMPI - flags: '-Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror -Dcodi-tape=Tag' + flags: '-Dcpu-arch=skylake -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror -Dcodi-tape=Tag' - config_set: BaseOMP - flags: '-Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + flags: '-Dcpu-arch=skylake -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' - config_set: ReverseOMP - flags: '-Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + flags: '-Dcpu-arch=skylake -Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' - config_set: ForwardOMP - flags: '-Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + flags: '-Dcpu-arch=skylake -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files @@ -83,11 +83,11 @@ jobs: config_set: [BaseOMP-tsan, ReverseOMP-tsan] #ForwardOMP-tsan include: - config_set: BaseOMP-tsan - flags: '--buildtype=debugoptimized -Dwith-omp=true -Denable-mixedprec=true -Denable-tecio=false --warnlevel=3' + flags: '--buildtype=debugoptimized -Dcpu-arch=skylake -Dwith-omp=true -Denable-mixedprec=true -Denable-tecio=false --warnlevel=3' - config_set: ReverseOMP-tsan - flags: '--buildtype=debugoptimized -Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-tecio=false --warnlevel=3' + flags: '--buildtype=debugoptimized -Dcpu-arch=skylake -Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-tecio=false --warnlevel=3' #- config_set: ForwardOMP-tsan - # flags: '--buildtype=debug -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + # flags: '--buildtype=debug -Dcpu-arch=skylake -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files @@ -125,9 +125,9 @@ jobs: config_set: [BaseNoMPI-asan, ReverseNoMPI-asan] include: - config_set: BaseNoMPI-asan - flags: '--buildtype=debugoptimized -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true --warnlevel=3 --werror' + flags: '--buildtype=debugoptimized -Dcpu-arch=skylake -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true --warnlevel=3 --werror' - config_set: ReverseNoMPI-asan - flags: '--buildtype=debugoptimized --optimization=1 -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled --warnlevel=3 --werror' + flags: '--buildtype=debugoptimized -Dcpu-arch=skylake --optimization=1 -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled --warnlevel=3 --werror' runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files diff --git a/.github/workflows/release-management.yml b/.github/workflows/release-management.yml index b2e393d58245..cb9dd60b98e0 100644 --- a/.github/workflows/release-management.yml +++ b/.github/workflows/release-management.yml @@ -12,20 +12,20 @@ jobs: strategy: fail-fast: false matrix: - os_bin: [macos64-omp, macos64-mpi, linux64-omp, linux64-mpi, win64-omp, win64-mpi] + os_bin: [macos64, macos64-mpi, linux64-omp, linux64-mpi, win64-omp, win64-mpi] include: - os_bin: win64-omp - flags: '-Dwith-omp=true -Dwith-mpi=disabled --cross-file=/hostfiles/hostfile_windows' + flags: '-Dcpu-arch=haswell -Dwith-omp=true -Dwith-mpi=disabled --cross-file=/hostfiles/hostfile_windows' - os_bin: win64-mpi - flags: '-Dcustom-mpi=true --cross-file=/hostfiles/hostfile_windows_mpi' - - os_bin: macos64-omp - flags: '-Dwith-omp=true -Dwith-mpi=disabled --cross-file=/hostfiles/hostfile_darwin' + flags: '-Dcpu-arch=haswell -Dcustom-mpi=true --cross-file=/hostfiles/hostfile_windows_mpi' + - os_bin: macos64 + flags: '-Dcpu-arch= -Dwith-mpi=disabled --cross-file=/hostfiles/hostfile_darwin' - os_bin: macos64-mpi - flags: '-Dcustom-mpi=true --cross-file=/hostfiles/hostfile_darwin_mpi' + flags: '-Dcpu-arch= -Dcustom-mpi=true --cross-file=/hostfiles/hostfile_darwin_mpi' - os_bin: linux64-omp - flags: '-Dwith-omp=true -Dwith-mpi=disabled -Dstatic-cgns-deps=true --cross-file=/hostfiles/hostfile_linux' + flags: '-Dcpu-arch=haswell -Dwith-omp=true -Dwith-mpi=disabled -Dstatic-cgns-deps=true --cross-file=/hostfiles/hostfile_linux' - os_bin: linux64-mpi - flags: '-Dcustom-mpi=true --cross-file=/hostfiles/hostfile_linux_mpi' + flags: '-Dcpu-arch=haswell -Dcustom-mpi=true --cross-file=/hostfiles/hostfile_linux_mpi' runs-on: ubuntu-latest steps: - name: Cache Object Files diff --git a/SU2_CFD/include/solvers/CHeatSolver.hpp b/SU2_CFD/include/solvers/CHeatSolver.hpp index 7607114dff4c..077d058b9498 100644 --- a/SU2_CFD/include/solvers/CHeatSolver.hpp +++ b/SU2_CFD/include/solvers/CHeatSolver.hpp @@ -88,8 +88,8 @@ class CHeatSolver final : public CScalarSolver { LinSysRes(iPoint, 0) -= thermal_diffusivity * dTdn * Area; if (implicit) { - su2double Jacobian_i[] = {-thermal_diffusivity / dist_ij * Area}; - Jacobian.SubtractBlock2Diag(iPoint, &Jacobian_i); + su2double Jacobian_i[1][1] = {{-thermal_diffusivity / dist_ij * Area}}; + Jacobian.SubtractBlock2Diag(iPoint, Jacobian_i); } } diff --git a/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp b/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp index 44f3bbb59818..644cd029d6e8 100644 --- a/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp +++ b/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp @@ -550,8 +550,6 @@ void CGradientSmoothingSolver::Compute_Surface_Residual(CGeometry* geometry, con int EL_KIND = 0; std::array indexNode; std::array indexVertex; - su2double Weight, Jac_X, norm, val_Coord, normalSens = 0.0, Residual=0.0; - su2double normal[MAXNDIM]; for (iElem = 0; iElem < geometry->GetnElem_Bound(val_marker); iElem++) { /*--- Identify the kind of boundary element ---*/ @@ -562,7 +560,7 @@ void CGradientSmoothingSolver::Compute_Surface_Residual(CGeometry* geometry, con indexNode[iNode] = geometry->bound[val_marker][iElem]->GetNode(iNode); for (iDim = 0; iDim < nDim; iDim++) { - val_Coord = Get_ValCoord(geometry, indexNode[iNode], iDim); + const su2double val_Coord = Get_ValCoord(geometry, indexNode[iNode], iDim); element_container[GRAD_TERM][EL_KIND]->SetRef_Coord(iNode, iDim, val_Coord); } } @@ -575,31 +573,27 @@ void CGradientSmoothingSolver::Compute_Surface_Residual(CGeometry* geometry, con } } - element_container[GRAD_TERM][EL_KIND] - ->ClearElement(); /*--- Restarts the element: avoids adding over previous results in other elements --*/ + /*--- Restarts the element: avoids adding over previous results in other elements --*/ + element_container[GRAD_TERM][EL_KIND]->ClearElement(); element_container[GRAD_TERM][EL_KIND]->ComputeGrad_SurfaceEmbedded(); unsigned int nGauss = element_container[GRAD_TERM][EL_KIND]->GetnGaussPoints(); for (unsigned int iGauss = 0; iGauss < nGauss; iGauss++) { - Weight = element_container[GRAD_TERM][EL_KIND]->GetWeight(iGauss); - Jac_X = element_container[GRAD_TERM][EL_KIND]->GetJ_X(iGauss); + const su2double Weight = element_container[GRAD_TERM][EL_KIND]->GetWeight(iGauss); + const su2double Jac_X = element_container[GRAD_TERM][EL_KIND]->GetJ_X(iGauss); for (unsigned int iNode = 0; iNode < nNodes; iNode++) { + su2double normal[MAXNDIM] = {}; geometry->vertex[val_marker][indexVertex[iNode]]->GetNormal(normal); - norm = GeometryToolbox::Norm(nDim, normal); + const su2double norm = GeometryToolbox::Norm(nDim, normal); for (iDim = 0; iDim < nDim; iDim++) { normal[iDim] = normal[iDim] / norm; } - + su2double normalSens = 0; for (iDim = 0; iDim < nDim; iDim++) { normalSens += normal[iDim] * nodes->GetSensitivity(indexNode[iNode], iDim); } - - Residual += Weight * Jac_X * element_container[GRAD_TERM][EL_KIND]->GetNi(iNode, iGauss) * normalSens; - LinSysRes.AddBlock(indexNode[iNode], &Residual); - - Residual = 0; - normalSens = 0; + LinSysRes(indexNode[iNode], 0) += Weight * Jac_X * element_container[GRAD_TERM][EL_KIND]->GetNi(iNode, iGauss) * normalSens; } } } diff --git a/SU2_CFD/src/solvers/CHeatSolver.cpp b/SU2_CFD/src/solvers/CHeatSolver.cpp index c4c19244fc79..6e127a984485 100644 --- a/SU2_CFD/src/solvers/CHeatSolver.cpp +++ b/SU2_CFD/src/solvers/CHeatSolver.cpp @@ -594,8 +594,8 @@ void CHeatSolver::BC_ConjugateHeat_Interface(CGeometry *geometry, CSolver **solv HeatFlux = HeatFluxDensity * Area; if (implicit) { - su2double Jacobian_i[] = {-thermal_diffusivity*Area}; - Jacobian.SubtractBlock2Diag(iPoint, &Jacobian_i); + su2double Jacobian_i[1][1] = {{-thermal_diffusivity*Area}}; + Jacobian.SubtractBlock2Diag(iPoint, Jacobian_i); } } else { diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp index 7e0ebaed9d81..00d3009faa75 100644 --- a/SU2_CFD/src/solvers/CTurbSASolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp @@ -503,9 +503,8 @@ void CTurbSASolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_conta su2double coeff = (nu_total/sigma); su2double RoughWallBC = nodes->GetSolution(iPoint,0)/(0.03*Roughness_Height); - su2double Res_Wall;// = new su2double [nVar]; - Res_Wall = coeff*RoughWallBC*Area; - LinSysRes.SubtractBlock(iPoint, &Res_Wall); + su2double Res_Wall = coeff*RoughWallBC*Area; + LinSysRes(iPoint, 0) -= Res_Wall; su2double Jacobian_i = (laminar_viscosity /density *Area)/(0.03*Roughness_Height*sigma); Jacobian_i += 2.0*RoughWallBC*Area/sigma; diff --git a/SU2_PY/pySU2/meson.build b/SU2_PY/pySU2/meson.build index 3d9abc747ec5..436eb4b0d56a 100644 --- a/SU2_PY/pySU2/meson.build +++ b/SU2_PY/pySU2/meson.build @@ -19,10 +19,17 @@ else mpi4py_include = '' endif +su2_swig_args = [] +foreach arg : su2_cpp_args + if not arg.startswith('-f') and not arg.startswith('-m') + su2_swig_args += arg + endif +endforeach + swig_gen = generator( swig, output: ['@BASENAME@.cxx'], - arguments: su2_cpp_args + + arguments: su2_swig_args + [ '-c++', '-python', '-I'+mpi4py_include, '-outdir', meson.current_build_dir(), '-o', './@OUTPUT@', '@INPUT@'], depfile: '@BASENAME@.d', ) @@ -43,7 +50,7 @@ if get_option('enable-normal') ], install: true, include_directories : mpi4py_include, - cpp_args : [default_warning_flags,su2_cpp_args], + cpp_args : [default_warning_flags, su2_swig_args], name_prefix : '', install_dir: 'bin' ) @@ -62,7 +69,7 @@ if get_option('enable-autodiff') ], install: true, include_directories : mpi4py_include, - cpp_args : [default_warning_flags, su2_cpp_args, codi_rev_args], + cpp_args : [default_warning_flags, su2_swig_args, codi_rev_args], name_prefix : '', install_dir: 'bin' ) diff --git a/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref b/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref index e6641b705464..aeefa8f67249 100644 --- a/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref +++ b/TestCases/disc_adj_fsi/dyn_fsi/grad_dv.opt.ref @@ -1,9 +1,9 @@ INDEX GRAD -0 -4.570880056076276e-04 -1 -2.401474032110094e-04 -2 -9.134741314806565e-05 -3 -1.628103414800329e-05 -4 -1.741046937496715e-05 -5 -9.462481743926707e-05 -6 -2.452469742444662e-04 -7 -4.635498236376295e-04 +0 -4.570880237875418e-04 +1 -2.401474145411196e-04 +2 -9.134741927897237e-05 +3 -1.628103641919142e-05 +4 -1.741046901352254e-05 +5 -9.462481564764888e-05 +6 -2.452469723327466e-04 +7 -4.635498231799566e-04 diff --git a/TestCases/fea_topology/grad_ref_node.dat.ref b/TestCases/fea_topology/grad_ref_node.dat.ref index 15afff813c19..6f3a4d4a6854 100644 --- a/TestCases/fea_topology/grad_ref_node.dat.ref +++ b/TestCases/fea_topology/grad_ref_node.dat.ref @@ -6157,7 +6157,7 @@ -9.57383e-11 -2.60763e-10 -2.54078e-10 --1.57599e-10 +-1.57598e-10 -8.68931e-12 -4.26927e-13 0 diff --git a/TestCases/grad_smooth/oneram6/of_hess.dat.ref b/TestCases/grad_smooth/oneram6/of_hess.dat.ref index 02ba06109cbc..682bd0f2a1e0 100644 --- a/TestCases/grad_smooth/oneram6/of_hess.dat.ref +++ b/TestCases/grad_smooth/oneram6/of_hess.dat.ref @@ -15,7 +15,7 @@ -0.006467631847, 0.01474899148, 0.0307974965, 0.03133667011, 0.02135868557, 0.009195956631, 0.0005679148628, -0.002979438869, -0.002888704019, -0.001484322831, -0.0003805028717, -0.009749017792, 0.01377275078, 0.03561910891, 0.04068759244, 0.0320229057, 0.01832378646, 0.006777110935, 0.0003821410305, -0.001496252596, -0.001086366199, -0.0003216351645, -0.01012802391, 0.007372771691, 0.02569386609, 0.03132552458, 0.02570124608, 0.01539133323, 0.006215280913, 0.0008558831252, -0.0009273533675, -0.0007809529487, -0.0002425068128, -0.007928394398, 0.002070266239, 0.01378665724, 0.01798985944, 0.01513337149, 0.009153182312, 0.003674859753, 0.0004413598218, -0.0006244703773, -0.0005081859495, -0.0001571494848, -0.00493051489, -0.0002396568334, 0.005968682259, 0.008479468465, 0.007312783546, 0.004440065636, 0.001738824884, 0.0001397731457, -0.0003689708236, -0.0002823875978, -8.620744834e-05, -0.002478600059, -0.0006748885187, 0.002066013325, 0.00329433432, 0.002922916564, 0.001777630095, 0.000670671817, 1.535797359e-05, -0.0001827231234, -0.0001317267916, -3.964414261e-05, -0.0009841254633, -0.0004506363067, 0.0005147597333, 0.0009923057147, 0.0009141133046, 0.0005556425743, 0.0001975206881, -1.383923076e-05, -7.288723647e-05, -4.94869802e-05, -1.465635953e-05, -0.0002831321015, -0.0001786709401, 6.58272751e-05, 0.0002003390218, 0.0001961592109, 0.0001186688731, 3.753024261e-05, -9.935156589e-06, -2.138473898e-05, -1.360348147e-05, -3.950343144e-06, -4.554004401e-05, -3.672960965e-05, -3.041622561e-06, 1.799427418e-05, 2.027636727e-05, 1.203767729e-05, 2.649508268e-06, -2.70794393e-06, -3.56862514e-06, -2.10310099e-06, -5.947698304e-07, -0.005601649597, 0.003663315053, 0.008855155937, 0.008270418905, 0.005211846044, 0.002051209138, -0.0001730054338, -0.001205865676, -0.001233422859, -0.0007264792759, -0.0002174226404, -0.007611210873, 0.003301523038, 0.01118961161, 0.01201887408, 0.008994275876, 0.005067326541, 0.001833086624, -9.887411615e-05, -0.0007523705682, -0.0005808730526, -0.0001951220177, -0.007441046689, 0.001266593828, 0.008546193153, 0.009942656219, 0.007784066575, 0.004587745773, 0.001826453307, 0.0001135955779, -0.0005216994588, -0.0004414338999, -0.0001526936251, -0.00566661019, -0.0002874917326, 0.004841980873, 0.006139790065, 0.004941019791, 0.002931034371, 0.001147951918, 3.99276224e-05, -0.0003614638394, -0.0002968331893, -0.0001015819715, -0.003509714631, -0.0007811220973, 0.002197881102, 0.003108937626, 0.002572038857, 0.001525852968, 0.0005747115186, -1.373152539e-05, -0.000217106601, -0.0001698282856, -5.711344335e-05, -0.001781565969, -0.0006509595582, 0.0007793958023, 0.001287368927, 0.001099822422, 0.0006508662134, 0.0002316669047, -2.598766996e-05, -0.0001095788854, -8.151575035e-05, -2.690163744e-05, -0.0007189181431, -0.0003579820769, 0.0001868971594, 0.0004081475535, 0.000364234654, 0.0002142863145, 6.953286088e-05, -1.862504208e-05, -4.465908933e-05, -3.149481547e-05, -1.01801397e-05, -0.0002107020059, -0.0001331894618, 1.56490951e-05, 8.471984511e-05, 8.140117857e-05, 4.72137792e-05, 1.254545578e-05, -8.249903837e-06, -1.340571874e-05, -8.898200035e-06, -2.806655401e-06, -3.452670376e-05, -2.680888144e-05, -4.675239333e-06, 7.211143304e-06, 8.385674347e-06, 4.644500619e-06, 4.785389695e-07, -1.936902476e-06, -2.29051854e-06, -1.412826127e-06, -4.319034967e-07 -0.00418760099, 0.003164939048, 0.01686793413, 0.02679089038, 0.02741825725, 0.01985460031, 0.009261368916, 0.0008577314648, -0.002885697698, -0.002698422059, -0.001034333935, -0.005893646974, 0.001358321342, 0.01786175342, 0.0320229057, 0.03605854345, 0.02956944193, 0.01763318488, 0.006508745883, 1.535739201e-05, -0.001671934291, -0.0008468199082, -0.005842296384, -0.001372995249, 0.01139007538, 0.0233103281, 0.02769196454, 0.02359158545, 0.01466512077, 0.00586859374, 0.0004649327871, -0.001142965089, -0.0006355786285, -0.004443360253, -0.002568527442, 0.004976334012, 0.01255500631, 0.01578204326, 0.01379058138, 0.008663801363, 0.003434228438, 0.0001824184137, -0.000766154093, -0.0004152490589, -0.002720813517, -0.002223407514, 0.001469849657, 0.005458152309, 0.007364170805, 0.006606937245, 0.004173466333, 0.001606282661, 1.302051153e-06, -0.0004428899124, -0.0002300480739, -0.001357785599, -0.00135052352, 0.0001523202354, 0.001901908621, 0.002824336773, 0.002613207731, 0.001656887003, 0.0006101845972, -4.613409803e-05, -0.0002145347863, -0.0001068251748, -0.0005374507601, -0.0006149211624, -0.0001325918779, 0.000480019629, 0.0008346787878, 0.0008052744253, 0.0005117203452, 0.0001753724531, -3.56282835e-05, -8.36777944e-05, -3.988970627e-05, -0.0001544528154, -0.0001985035547, -9.03814922e-05, 6.387161394e-05, 0.0001626042288, 0.0001684732315, 0.0001070018665, 3.161302023e-05, -1.548965707e-05, -2.394938367e-05, -1.087091282e-05, -2.482684585e-05, -3.550562621e-05, -2.321071949e-05, -2.098772021e-06, 1.315056181e-05, 1.639844586e-05, 1.030443163e-05, 1.767206972e-06, -3.477078918e-06, -3.879505205e-06, -1.658464571e-06, -0.002332386684, 0.0001731063128, 0.004156773864, 0.006700696045, 0.006975098395, 0.005319517708, 0.002597905565, -5.337653038e-05, -0.001581482699, -0.001597395865, -0.0006987381646, -0.003217682667, -0.0004937642035, 0.004858098239, 0.008991340113, 0.01035025827, 0.008980809821, 0.005801567361, 0.002223062703, -0.0003254417609, -0.001118357965, -0.0006066660815, -0.003175450391, -0.001311369598, 0.003216991658, 0.007015501908, 0.008527140965, 0.007646060766, 0.005113396083, 0.002135316235, -5.664233672e-05, -0.0008146858677, -0.0004693986212, -0.002443739799, -0.001535685769, 0.001405278873, 0.004041864154, 0.005209590155, 0.004766305172, 0.003193478799, 0.001302274629, -8.810153125e-05, -0.0005534997008, -0.000311742948, -0.001533684497, -0.001219118062, 0.0003620943734, 0.001874099921, 0.002603869995, 0.002434314603, 0.001625550092, 0.0006316182562, -9.413097892e-05, -0.0003222779581, -0.0001752139621, -0.0007904665151, -0.0007365990626, -3.314496397e-05, 0.0006861381042, 0.001061324463, 0.00102003623, 0.0006779220326, 0.0002458588143, -6.713443329e-05, -0.0001574809661, -8.252286937e-05, -0.0003242514253, -0.0003428550827, -9.66628515e-05, 0.0001753122948, 0.0003287895655, 0.0003295666681, 0.0002176299511, 7.045310021e-05, -3.524440465e-05, -6.204457248e-05, -3.124617503e-05, -9.66489852e-05, -0.0001143430224, -5.399518557e-05, 1.974863887e-05, 6.521110548e-05, 7.09006824e-05, 4.629322104e-05, 1.157616121e-05, -1.308835212e-05, -1.794621429e-05, -8.630616542e-06, -1.610454588e-05, -2.121832512e-05, -1.359809775e-05, -2.743865465e-06, 4.722924621e-06, 6.674976952e-06, 4.212310826e-06, 1.286530318e-07, -2.717102838e-06, -2.937567447e-06, -1.333576142e-06 -0.002130269292, -0.0009470248424, 0.006198968944, 0.01650667643, 0.0242776469, 0.02510692083, 0.01866511639, 0.008598949539, 3.066027671e-05, -0.003585882953, -0.002415614232, -0.002873002519, -0.002360072921, 0.005497126651, 0.01832378646, 0.02956944193, 0.03324963907, 0.02771776374, 0.01632591269, 0.005021183573, -0.00136192865, -0.001904990318, -0.002763511045, -0.00326365331, 0.002176842328, 0.01216954461, 0.02163728519, 0.02553859047, 0.02208188166, 0.01355252933, 0.004596807657, -0.0007380980325, -0.001422981608, -0.002058984672, -0.003004041845, -0.0002345506762, 0.005678043385, 0.01168083116, 0.01453075018, 0.01289175512, 0.007990537832, 0.002644759726, -0.0005765236419, -0.0009397935261, -0.001244150507, -0.002064054463, -0.0009529820605, 0.001939655982, 0.005087711266, 0.006762775544, 0.006166774863, 0.003839572126, 0.001202466122, -0.0003930505741, -0.0005271495476, -0.0006155379537, -0.001114242331, -0.0007749195492, 0.0004004800683, 0.001775710074, 0.002583203131, 0.00243322122, 0.0015187114, 0.0004377670186, -0.0002169140172, -0.0002477113511, -0.0002421627681, -0.0004695369247, -0.0004065268476, -3.024935204e-05, 0.0004486222037, 0.0007578387235, 0.0007464496678, 0.0004660052955, 0.0001165863637, -9.453997177e-05, -9.360915074e-05, -6.925851305e-05, -0.0001427748728, -0.0001439851029, -6.003664253e-05, 5.957467067e-05, 0.0001452298563, 0.0001546509558, 9.611782424e-05, 1.722891546e-05, -3.001319127e-05, -2.584398217e-05, -1.108514438e-05, -2.426182197e-05, -2.766914936e-05, -1.822466935e-05, -2.063701419e-06, 1.107754621e-05, 1.463543492e-05, 8.896110651e-06, -1.337865412e-07, -5.394843993e-06, -4.003366888e-06, -0.0008961637852, -0.0006318362772, 0.001265848706, 0.004065775474, 0.006615816591, 0.00772020146, 0.006549029486, 0.003285793928, -0.0005144192803, -0.002619112791, -0.001899826304, -0.001237307202, -0.001144112402, 0.001198131022, 0.00506698014, 0.008983044508, 0.01127134701, 0.01064330558, 0.007030351153, 0.002114940086, -0.001347897805, -0.001590974548, -0.001222654803, -0.001439427558, 0.0003233341816, 0.003555143319, 0.00699087439, 0.009153298412, 0.008891319035, 0.0060806853, 0.002065905007, -0.0008764269721, -0.001218031963, -0.000943828967, -0.001309683533, -0.0003284733114, 0.001723559563, 0.004003074319, 0.005503526376, 0.005443375014, 0.00372535344, 0.001211192105, -0.0006306497244, -0.0008097825114, -0.0005952893392, -0.000922588182, -0.0004887007143, 0.0005894353338, 0.001844725347, 0.002706044331, 0.002731195401, 0.001859718564, 0.0005543160343, -0.0003948358104, -0.0004562345055, -0.0003087129688, -0.0005193158905, -0.0003723620957, 9.625265565e-05, 0.0006720964148, 0.001085047454, 0.001125361861, 0.0007609981511, 0.0001989179733, -0.0002058654276, -0.0002153916015, -0.0001274946781, -0.0002297719152, -0.0001984490251, -3.887294326e-05, 0.0001712579124, 0.0003301061973, 0.0003576340951, 0.0002395963219, 4.923527571e-05, -8.627232957e-05, -8.178924288e-05, -3.826847211e-05, -7.352251721e-05, -7.298808994e-05, -3.539178282e-05, 1.938963243e-05, 6.377702276e-05, 7.55296883e-05, 4.97977011e-05, 4.870135848e-06, -2.660491312e-05, -2.26852285e-05, -6.421053274e-06, -1.314939389e-05, -1.467832248e-05, -1.027237718e-05, -2.604807932e-06, 4.263335781e-06, 6.899978488e-06, 4.341053853e-06, -1.025171358e-06, -4.675195282e-06, -3.528138143e-06 --0.0009194723854, -0.00151188807, 0.0006785118074, 0.006878870864, 0.01548300253, 0.02250961605, 0.02385746086, 0.01795751975, 0.007232852953, -0.002506096839, -0.00492027402, -0.001200449871, -0.002315962107, -0.0003127143132, 0.006777110935, 0.01763318488, 0.02771776374, 0.03167775197, 0.0266401318, 0.01446817599, 0.001660550464, -0.003684116049, -0.001127395713, -0.002499038125, -0.001607517431, 0.003428789439, 0.0119086742, 0.02037223604, 0.0243928221, 0.02127467655, 0.012084934, 0.001848892289, -0.002730733078, -0.0008254641523, -0.002020555424, -0.00197471335, 0.0006677780142, 0.005685548809, 0.01104205114, 0.0139288644, 0.01247441309, 0.007127675556, 0.0009298370812, -0.001829329973, -0.0004926986346, -0.001290382847, -0.001533427374, -0.000426009673, 0.002026914899, 0.004831855958, 0.006510409503, 0.005998181189, 0.003420986136, 0.0003126434026, -0.001042502943, -0.000241579101, -0.0006646142371, -0.0008864110522, -0.000522540032, 0.0004722857031, 0.001695451617, 0.002498205923, 0.002379926524, 0.001349188806, 5.170490287e-05, -0.0004970883464, -9.434934994e-05, -0.0002703361475, -0.0003917160444, -0.0003105960361, 6.614310016e-06, 0.0004313722813, 0.000736591389, 0.0007346404414, 0.000411324883, -1.726046648e-05, -0.0001905630072, -2.680669821e-05, -7.975468264e-05, -0.0001237967997, -0.0001176334718, -4.744790859e-05, 5.814707256e-05, 0.0001420488021, 0.0001534039817, 8.355448033e-05, -1.610533148e-05, -5.343149652e-05, -4.262872608e-06, -1.317446976e-05, -2.178325842e-05, -2.366395623e-05, -1.592339722e-05, -1.780757659e-06, 1.096995205e-05, 1.471970969e-05, 7.362398796e-06, -4.628824149e-06, -8.428700767e-06, -0.0003196345825, -0.0005491602195, -4.420644074e-05, 0.001677068774, 0.004627769947, 0.007988843742, 0.01000450135, 0.008714133733, 0.003623122184, -0.002590835523, -0.004398319472, -0.000439288785, -0.0008433726809, -0.0003316461397, 0.001836300625, 0.005808425866, 0.01064988607, 0.01416111641, 0.01368955308, 0.008141857626, 0.0002286407359, -0.003513205016, -0.0004326969064, -0.0009333805399, -0.0007233874422, 0.0008921528996, 0.004106633202, 0.008190616147, 0.01133153106, 0.01128068905, 0.007001657995, 0.0005751065378, -0.002657191594, -0.0003335522058, -0.0007858047181, -0.0008218277649, 5.996991719e-05, 0.002028620818, 0.004639058756, 0.006728549851, 0.00682914596, 0.004227124212, 0.0002140956921, -0.001774432295, -0.0002104144685, -0.0005279248986, -0.0006465234253, -0.0002655246717, 0.0007315096934, 0.002118491489, 0.003271774969, 0.003392173197, 0.002074949316, -6.185624458e-06, -0.001005734161, -0.0001092319184, -0.0002876395163, -0.0003893507636, -0.0002641123818, 0.0001534241879, 0.0007684123984, 0.001301011896, 0.001386844258, 0.0008341565713, -6.342482166e-05, -0.0004774478702, -4.516803105e-05, -0.0001240015452, -0.0001810210676, -0.0001560350856, -1.974927265e-05, 0.0001971196294, 0.0003944597625, 0.0004390147895, 0.0002574579703, -4.871563613e-05, -0.0001823611564, -1.357247914e-05, -3.876415008e-05, -6.037553359e-05, -6.08599144e-05, -3.058893676e-05, 2.384513571e-05, 7.6846757e-05, 9.312886239e-05, 5.207943827e-05, -2.151376195e-05, -5.095077691e-05, -2.278941453e-06, -6.777500225e-06, -1.121758959e-05, -1.274962751e-05, -9.583457423e-06, -2.325633557e-06, 5.516554517e-06, 8.804223533e-06, 4.267115521e-06, -4.928847632e-06, -8.005343201e-06 +-0.0009194723854, -0.00151188807, 0.0006785118074, 0.006878870864, 0.01548300253, 0.02250961605, 0.02385746086, 0.01795751975, 0.007232852953, -0.002506096839, -0.00492027402, -0.001200449871, -0.002315962107, -0.0003127143132, 0.006777110935, 0.01763318488, 0.02771776374, 0.03167775197, 0.0266401318, 0.01446817599, 0.001660550464, -0.003684116049, -0.001127395713, -0.002499038125, -0.001607517431, 0.003428789439, 0.0119086742, 0.02037223604, 0.0243928221, 0.02127467655, 0.012084934, 0.001848892289, -0.002730733078, -0.0008254641523, -0.002020555424, -0.00197471335, 0.0006677780142, 0.005685548809, 0.01104205114, 0.0139288644, 0.01247441309, 0.007127675556, 0.0009298370812, -0.001829329973, -0.0004926986346, -0.001290382847, -0.001533427374, -0.000426009673, 0.002026914899, 0.004831855958, 0.006510409503, 0.005998181189, 0.003420986136, 0.0003126434026, -0.001042502943, -0.000241579101, -0.0006646142371, -0.0008864110522, -0.000522540032, 0.0004722857031, 0.001695451617, 0.002498205923, 0.002379926524, 0.001349188806, 5.170490287e-05, -0.0004970883464, -9.434934994e-05, -0.0002703361475, -0.0003917160444, -0.0003105960361, 6.614310016e-06, 0.0004313722813, 0.000736591389, 0.0007346404414, 0.000411324883, -1.726046648e-05, -0.0001905630072, -2.680669821e-05, -7.975468264e-05, -0.0001237967997, -0.0001176334718, -4.744790859e-05, 5.814707256e-05, 0.0001420488021, 0.0001534039817, 8.355448033e-05, -1.610533148e-05, -5.343149652e-05, -4.262872608e-06, -1.317446976e-05, -2.178325842e-05, -2.366395623e-05, -1.592339722e-05, -1.780757659e-06, 1.096995205e-05, 1.471970969e-05, 7.362398796e-06, -4.628824149e-06, -8.428700767e-06, -0.0003196345825, -0.0005491602195, -4.420644074e-05, 0.001677068774, 0.004627769947, 0.007988843742, 0.01000450135, 0.008714133733, 0.003623122184, -0.002590835523, -0.004398319472, -0.000439288785, -0.000843372681, -0.0003316461397, 0.001836300625, 0.005808425866, 0.01064988607, 0.01416111641, 0.01368955308, 0.008141857626, 0.0002286407359, -0.003513205016, -0.0004326969064, -0.0009333805399, -0.0007233874422, 0.0008921528996, 0.004106633202, 0.008190616147, 0.01133153106, 0.01128068905, 0.007001657995, 0.0005751065378, -0.002657191594, -0.0003335522058, -0.0007858047181, -0.0008218277649, 5.996991719e-05, 0.002028620818, 0.004639058756, 0.006728549851, 0.00682914596, 0.004227124212, 0.0002140956921, -0.001774432295, -0.0002104144685, -0.0005279248986, -0.0006465234253, -0.0002655246717, 0.0007315096934, 0.002118491489, 0.003271774969, 0.003392173197, 0.002074949316, -6.185624458e-06, -0.001005734161, -0.0001092319184, -0.0002876395163, -0.0003893507636, -0.0002641123818, 0.0001534241879, 0.0007684123984, 0.001301011896, 0.001386844258, 0.0008341565713, -6.342482166e-05, -0.0004774478702, -4.516803105e-05, -0.0001240015452, -0.0001810210676, -0.0001560350856, -1.974927265e-05, 0.0001971196294, 0.0003944597625, 0.0004390147895, 0.0002574579703, -4.871563613e-05, -0.0001823611564, -1.357247914e-05, -3.876415008e-05, -6.037553359e-05, -6.08599144e-05, -3.058893676e-05, 2.384513571e-05, 7.6846757e-05, 9.312886239e-05, 5.207943827e-05, -2.151376195e-05, -5.095077691e-05, -2.278941453e-06, -6.777500225e-06, -1.121758959e-05, -1.274962751e-05, -9.583457423e-06, -2.325633557e-06, 5.516554517e-06, 8.804223533e-06, 4.267115521e-06, -4.928847632e-06, -8.005343201e-06 -0.000332406675, -0.0009751414679, -0.001011325471, 0.00108303197, 0.006354573024, 0.01414496246, 0.02155870137, 0.02414496474, 0.01788009288, 0.003158003625, -0.008088545279, -0.0004228284638, -0.001333515417, -0.00170531222, 0.0003821410305, 0.006508745883, 0.01632591269, 0.0266401318, 0.03193311942, 0.02660943827, 0.009891837894, -0.005394668765, -0.0003893208294, -0.001318292995, -0.002033083352, -0.0009423762749, 0.003425356039, 0.01107661426, 0.01965947857, 0.02470867841, 0.02136901927, 0.00848174129, -0.003901388198, -0.0002808430928, -0.001005284547, -0.001752118178, -0.001500740791, 0.0007914979483, 0.005308045005, 0.01072136847, 0.01423961239, 0.01262986959, 0.004891331195, -0.002684957159, -0.0001658160762, -0.0006179878797, -0.001163699492, -0.001259525423, -0.0003006089289, 0.001900889012, 0.004729031473, 0.006732582414, 0.006128348482, 0.002258750871, -0.001576070467, -8.063434211e-05, -0.000309902587, -0.0006156404184, -0.0007567105896, -0.0004435816409, 0.0004455091174, 0.001676016175, 0.002618783685, 0.002455503175, 0.0008422490177, -0.0007713025575, -3.127235825e-05, -0.0001233880456, -0.0002557888453, -0.0003430295368, -0.0002746454663, 6.839749098e-06, 0.0004328558328, 0.0007861406334, 0.0007668009792, 0.0002339538592, -0.0003031109467, -8.826644306e-06, -3.570742307e-05, -7.690879937e-05, -0.0001106079136, -0.0001062313091, -4.479602684e-05, 6.059049262e-05, 0.000156259558, 0.000162818494, 3.873178304e-05, -8.726800847e-05, -1.394138483e-06, -5.787555166e-06, -1.294200917e-05, -1.980976667e-05, -2.1685802e-05, -1.51250928e-05, -1.136466793e-06, 1.31506817e-05, 1.618315884e-05, 1.168733738e-06, -1.42006883e-05, -0.0001036313013, -0.0003153157545, -0.0004126006321, 0.0001205000102, 0.002006507005, 0.005711108611, 0.01056057453, 0.01391211912, 0.01148885884, 0.001127604191, -0.008005536767, -0.0001410328392, -0.0004524158732, -0.0006621241967, -9.435486086e-05, 0.00223251727, 0.007043195616, 0.0136999121, 0.01907968483, 0.01777234372, 0.006339332434, -0.005807751173, -0.0001378435203, -0.0004704185682, -0.0007938080293, -0.000543537641, 0.001133468381, 0.004920899052, 0.01041011122, 0.01511764382, 0.01454462819, 0.005616446238, -0.004289800734, -0.0001056624185, -0.0003788780062, -0.0007054335704, -0.000720048938, 0.0001525850414, 0.002405187769, 0.005845772812, 0.008932209965, 0.008755207352, 0.003245513982, -0.002904526167, -6.639894632e-05, -0.0002468996939, -0.0004896878735, -0.0005968206007, -0.0002440047602, 0.000861909237, 0.002654252444, 0.004332501487, 0.004327249968, 0.001488532326, -0.001673919072, -3.437113185e-05, -0.0001314852752, -0.0002726636864, -0.0003679897768, -0.0002641965162, 0.0001839265272, 0.0009629686583, 0.001725426381, 0.001763264689, 0.0005444704303, -0.0008066439465, -1.417601938e-05, -5.559678902e-05, -0.0001195497072, -0.0001734005669, -0.0001588999505, -1.81533723e-05, 0.0002508998385, 0.0005282837273, 0.0005583014377, 0.0001437108265, -0.0003127703327, -4.247982583e-06, -1.706808637e-05, -3.794401822e-05, -5.838467352e-05, -6.227748151e-05, -3.268450615e-05, 3.328946692e-05, 0.0001062333226, 0.0001194778658, 1.983134952e-05, -8.892718743e-05, -7.109442177e-07, -2.930206376e-06, -6.735699715e-06, -1.093618079e-05, -1.305622226e-05, -1.029974137e-05, -1.758426815e-06, 8.762700387e-06, 1.174619874e-05, -7.877723272e-07, -1.429114974e-05 -9.573144147e-05, -0.0004193987586, -0.0008874204343, -0.0009222384053, 0.0005899383351, 0.004906653823, 0.01253055361, 0.02168069672, 0.02592343965, 0.01470154691, -0.006718605375, -0.000119182369, -0.0005425621065, -0.001220383624, -0.001496252596, 1.535739201e-05, 0.005021183573, 0.01446817599, 0.02660943827, 0.03397909979, 0.02349575137, -0.001666883827, -0.0001079254225, -0.0005115791315, -0.001233868867, -0.00180054378, -0.001085742141, 0.002410553775, 0.009697381766, 0.01964745624, 0.02634825762, 0.01895339641, -0.0007176117448, -7.686549691e-05, -0.0003767524364, -0.0009594794226, -0.00156848079, -0.001497098699, 0.000272339201, 0.004531796804, 0.01075474221, 0.01527808394, 0.01109357876, -0.0008206071416, -4.495501999e-05, -0.0002260353957, -0.0005983764135, -0.001049881085, -0.001212231479, -0.0005148758468, 0.00153834558, 0.004766063683, 0.00727564042, 0.005302058477, -0.0006900594921, -2.17022937e-05, -0.0001113416768, -0.0003034513204, -0.0005589176745, -0.0007178212346, -0.0005146547716, 0.0003029461894, 0.001696984897, 0.00285115865, 0.002080241431, -0.0004255420333, -8.364115454e-06, -4.367811268e-05, -0.0001220047854, -0.0002335356076, -0.0003229973719, -0.0002917320665, -3.819575833e-05, 0.0004402321068, 0.0008633302375, 0.0006291035303, -0.0001995032275, -2.346509237e-06, -1.246634874e-05, -3.563705758e-05, -7.059996163e-05, -0.0001036876487, -0.0001083519618, -5.500824789e-05, 6.194201633e-05, 0.0001738907321, 0.0001259398364, -6.711078364e-05, -3.682533313e-07, -1.992187764e-06, -5.831179943e-06, -1.194536208e-05, -1.851511546e-05, -2.158957014e-05, -1.636416048e-05, -1.126570534e-06, 1.515105522e-05, 1.068706349e-05, -1.270865963e-05, -2.905262831e-05, -0.0001380988818, -0.000344535128, -0.0004956131234, -5.989779894e-05, 0.001987925967, 0.006796054729, 0.01411467366, 0.01900863273, 0.01080192366, -0.007611802676, -3.890384449e-05, -0.0001890485356, -0.0004852210787, -0.0007489552665, -0.0003173462395, 0.002129003274, 0.008159779044, 0.01778681444, 0.02546414123, 0.01830003941, -0.003100015592, -3.753362749e-05, -0.0001880859778, -0.0005071291456, -0.0008800966145, -0.0007836933603, 0.0008865767082, 0.005522447818, 0.01333070536, 0.01997659391, 0.0149283658, -0.001877634612, -2.847592633e-05, -0.0001463971686, -0.0004104333245, -0.0007725321398, -0.0009154056356, -0.000120663826, 0.002567865214, 0.007401633633, 0.01171233043, 0.008773457375, -0.001502630222, -1.77505325e-05, -9.299649422e-05, -0.0002677872265, -0.0005300567539, -0.0007192575844, -0.0004449457049, 0.0008379171059, 0.003323757749, 0.005638469025, 0.004202398189, -0.001018832025, -9.127237647e-06, -4.852870816e-05, -0.0001424961044, -0.0002918269254, -0.0004286048872, -0.0003750121263, 0.0001279388357, 0.001193432959, 0.002229958508, 0.001647718428, -0.0005571258415, -3.741497216e-06, -2.015698103e-05, -6.017555007e-05, -0.0001266016808, -0.0001966822581, -0.000205455505, -5.41382689e-05, 0.0003081693632, 0.0006790709751, 0.0004948028187, -0.0002411957946, -1.114368204e-06, -6.083887898e-06, -1.845737697e-05, -3.979450246e-05, -6.475095387e-05, -7.614433299e-05, -4.649684091e-05, 4.073345998e-05, 0.0001364149187, 9.667116899e-05, -7.644734189e-05, -1.852919823e-07, -1.026578244e-06, -3.168931561e-06, -7.00315716e-06, -1.188864592e-05, -1.532571722e-05, -1.30435833e-05, -2.017055732e-06, 1.146756318e-05, 7.399052492e-06, -1.380453085e-05 -1.976281487e-05, -0.000119929093, -0.0003832317689, -0.0008193276355, -0.001184576568, -0.000740606229, 0.001961864464, 0.00880360968, 0.01944650149, 0.02479784472, 0.01200569583, -2.41636591e-05, -0.0001498393743, -0.0004910437387, -0.001086366199, -0.001671934291, -0.00136192865, 0.001660550464, 0.009891837894, 0.02349575137, 0.03230169181, 0.01894189611, -2.157285826e-05, -0.0001370104018, -0.0004636476867, -0.001077337876, -0.00182128211, -0.002019958297, -0.0001747726612, 0.005913673255, 0.01679240411, 0.02477770546, 0.01546958561, -1.51959815e-05, -9.853332103e-05, -0.0003427302948, -0.0008290247177, -0.001501974056, -0.001969962858, -0.001274182347, 0.002091133007, 0.008739029065, 0.014170093, 0.009269111611, -8.814446886e-06, -5.810388986e-05, -0.0002064144178, -0.0005141192066, -0.000975399129, -0.001403490265, -0.001288489574, 0.0002223894141, 0.003591394987, 0.00663714058, 0.00457052095, -4.228198699e-06, -2.825019022e-05, -0.0001020603328, -0.0002599601627, -0.0005098159877, -0.0007783998722, -0.0008397601999, -0.0002928267357, 0.001127670534, 0.002547498897, 0.001867767062, -1.620566333e-06, -1.095995703e-05, -4.018747145e-05, -0.0001043462284, -0.0002102637114, -0.0003357718436, -0.0004010398187, -0.0002552688171, 0.000219010407, 0.0007485325543, 0.0005990304751, -4.52176023e-07, -3.094993405e-06, -1.151330776e-05, -3.044287345e-05, -6.288356728e-05, -0.0001043688862, -0.0001346378767, -0.0001125350289, -6.900924322e-07, 0.0001426219445, 0.0001327264159, -7.054494777e-08, -4.890572217e-07, -1.846924846e-06, -4.975286507e-06, -1.05325287e-05, -1.812654831e-05, -2.496375626e-05, -2.480700587e-05, -1.102285939e-05, 1.047560949e-05, 1.445443851e-05, -6.294720089e-06, -4.339846478e-05, -0.0001648983392, -0.0004348211352, -0.000819086322, -0.0009119433482, 0.0005010665138, 0.005548985328, 0.01489762049, 0.02074136497, 0.01020373633, -8.24785923e-06, -5.713853778e-05, -0.0002179637437, -0.0005793094034, -0.001113968774, -0.001338258044, 0.0002456231312, 0.006362574438, 0.01832049119, 0.02752447735, 0.01674280098, -7.81877121e-06, -5.482721266e-05, -0.0002125436378, -0.0005806128242, -0.001181183719, -0.001671938736, -0.0008540754457, 0.003586544332, 0.01306187944, 0.0211768986, 0.01376219692, -5.846614997e-06, -4.143030057e-05, -0.0001628460099, -0.000455112021, -0.0009672305076, -0.00152275495, -0.00137925936, 0.0009948730236, 0.006716564564, 0.01210330506, 0.008257678788, -3.60140989e-06, -2.57079602e-05, -0.0001019878945, -0.0002893732362, -0.0006325919265, -0.001059786331, -0.001187281677, -0.0001710278609, 0.002694728905, 0.005657245287, 0.004074931592, -1.833143152e-06, -1.315671913e-05, -5.2533706e-05, -0.0001506203341, -0.0003356709453, -0.0005854183767, -0.0007340161974, -0.0003929497448, 0.0008012009728, 0.00216127672, 0.001665575678, -7.445226858e-07, -5.370044831e-06, -2.156184434e-05, -6.235365998e-05, -0.0001411081033, -0.0002537120655, -0.0003430243538, -0.0002656238753, 0.0001274185119, 0.0006280902136, 0.0005333980672, -2.197559377e-07, -1.593728528e-06, -6.43714209e-06, -1.877384749e-05, -4.309381387e-05, -7.956706732e-05, -0.0001141411126, -0.0001083557871, -1.766414735e-05, 0.0001161438671, 0.0001175004506, -3.620122712e-08, -2.643286359e-07, -1.075362355e-06, -3.166445643e-06, -7.376669711e-06, -1.397399547e-05, -2.111271192e-05, -2.307371212e-05, -1.235250468e-05, 7.441673776e-06, 1.255415275e-05 diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 18ea54aeb92a..378cf419ff48 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -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.012587, -7.691028, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.012575, -7.696236, -0.000000, 2.089953] poiseuille_profile.test_vals_aarch64 = [-12.009012, -7.262530, -0.000000, 2.089953] test_list.append(poiseuille_profile) @@ -197,7 +197,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-12.038066, -16.332090, 1.080346, 0.018385, 20.000000, -2.873343, 0.000000, -14.250271, 0.000000] + turb_naca0012_sa.test_vals = [-12.038153, -16.332090, 1.080346, 0.018385, 20, -2.872824, 0, -14.250271, 0] turb_naca0012_sa.test_vals_aarch64 = [-12.038091, -16.332090, 1.080346, 0.018385, 20.000000, -2.873236, 0.000000, -14.250271, 0.000000] test_list.append(turb_naca0012_sa) @@ -206,8 +206,8 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.093897, -15.251080, -5.906326, 1.070413, 0.015775, -2.855557, 0] - turb_naca0012_sst.test_vals_aarch64 = [-12.075928, -15.246732, -5.861249, 1.070036, 0.015841, -2.835263, 0.000000] + turb_naca0012_sst.test_vals = [-12.093892, -15.251078, -5.906327, 1.070413, 0.015775, -2.855348, 0] + turb_naca0012_sst.test_vals_aarch64 = [-12.075928, -15.246732, -5.861249, 1.070036, 0.015841, -2.835263, 0] test_list.append(turb_naca0012_sst) # NACA0012 (SST_SUST, FUN3D finest grid results: CL=1.0840, CD=0.01253) @@ -215,7 +215,7 @@ def main(): turb_naca0012_sst_sust.cfg_dir = "rans/naca0012" turb_naca0012_sst_sust.cfg_file = "turb_NACA0012_sst_sust.cfg" turb_naca0012_sst_sust.test_iter = 10 - turb_naca0012_sst_sust.test_vals = [-12.080804, -14.837176, -5.732917, 1.000893, 0.019109, -2.120148] + turb_naca0012_sst_sust.test_vals = [-12.080757, -14.837176, -5.732917, 1.000893, 0.019109, -2.120437] turb_naca0012_sst_sust.test_vals_aarch64 = [-12.073210, -14.836724, -5.732627, 1.000050, 0.019144, -2.629689] test_list.append(turb_naca0012_sst_sust) @@ -252,7 +252,7 @@ def main(): axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.066674, -7.446485, -8.813457, -3.730648, 0] + axi_rans_air_nozzle_restart.test_vals = [-12.066224, -7.425808, -8.815859, -3.732773, 0] axi_rans_air_nozzle_restart.test_vals_aarch64 = [-14.140441, -9.154674, -10.886121, -5.806594, 0.000000] test_list.append(axi_rans_air_nozzle_restart) @@ -278,7 +278,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.979765, 1.343317, 0.445160, -0.028835] + turb_naca0012_1c.test_vals = [-4.976782, 1.343831, 0.443889, -0.029247] turb_naca0012_1c.test_vals_aarch64 = [-4.976620, 1.345983, 0.433171, -0.033685] test_list.append(turb_naca0012_1c) @@ -287,7 +287,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.482873, 1.260834, 0.398789, -0.041781] + turb_naca0012_2c.test_vals = [-5.482862, 1.260869, 0.405097, -0.040169] turb_naca0012_2c.test_vals_aarch64 = [-5.485484, 1.263406, 0.411442, -0.040859] test_list.append(turb_naca0012_2c) @@ -305,7 +305,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.133798, 1.283504, 0.548676, 0.010882] + turb_naca0012_p1c1.test_vals = [-5.133998, 1.283519, 0.548341, 0.010772] turb_naca0012_p1c1.test_vals_aarch64 = [-5.114189, 1.285037, 0.406851, -0.043003] test_list.append(turb_naca0012_p1c1) @@ -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 = [-4.395589, -4.054885, 0.035472, 0.090901] + inc_nozzle.test_vals = [-4.177986, -3.716749, 0.151721, 0.152945] test_list.append(inc_nozzle) ############################# @@ -404,7 +404,7 @@ def main(): inc_turb_naca0012.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012.cfg_file = "naca0012.cfg" inc_turb_naca0012.test_iter = 20 - inc_turb_naca0012.test_vals = [-4.758063, -10.974497, -0.000004, -0.028654, 4, -5.405154, 2, -5.032677] + inc_turb_naca0012.test_vals = [-4.758063, -10.974497, -0.000004, -0.028654, 4, -5.402309, 2, -5.032668] test_list.append(inc_turb_naca0012) # NACA0012, SST_SUST @@ -420,7 +420,7 @@ def main(): inc_weakly_coupled.cfg_dir = "disc_adj_heat" inc_weakly_coupled.cfg_file = "primal.cfg" inc_weakly_coupled.test_iter = 10 - inc_weakly_coupled.test_vals = [-18.204006, -16.304263, -16.482688, -15.007166, -17.858118, -14.025082, 5.609100] + inc_weakly_coupled.test_vals = [-18.121422, -16.304159, -16.482315, -15.007167, -17.858118, -14.024885, 5.609100] test_list.append(inc_weakly_coupled) ###################################### @@ -614,7 +614,7 @@ def main(): channel_3D.cfg_dir = "sliding_interface/channel_3D" channel_3D.cfg_file = "channel_3D_WA.cfg" channel_3D.test_iter = 2 - channel_3D.test_vals = [2.000000, 0.000000, 0.629106, 0.524897, 0.422366] + channel_3D.test_vals = [2.000000, 0.000000, 0.629091, 0.524932, 0.422527] channel_3D.test_vals_aarch64 = [2.000000, 0.000000, 0.629112, 0.524948, 0.422396] channel_3D.unsteady = True channel_3D.multizone = True @@ -679,7 +679,7 @@ def main(): statbeam3d.cfg_dir = "fea_fsi/StatBeam_3d" statbeam3d.cfg_file = "configBeam_3d.cfg" statbeam3d.test_iter = 0 - statbeam3d.test_vals = [-2.787802, -1.721974, -2.438436, 110350] + statbeam3d.test_vals = [-2.777602, -1.710976, -2.445072, 110350] statbeam3d.test_vals_aarch64 = [-2.777602, -1.710976, -2.445072, 110350] test_list.append(statbeam3d) diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 3393182ad6ff..7a6abd83c225 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -202,7 +202,7 @@ def main(): discadj_fea.cfg_dir = "disc_adj_fea" discadj_fea.cfg_file = "configAD_fem.cfg" discadj_fea.test_iter = 4 - discadj_fea.test_vals = [1.774569, 1.928023, -0.000364, -8.690300] + discadj_fea.test_vals = [2.149620, 2.014985, -0.000364, -8.767900] discadj_fea.test_vals_aarch64 = [1.794371, 2.005865, -0.000365, -8.718100] test_list.append(discadj_fea) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index cbbf7dad1f74..f55b4a1e15e4 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -87,7 +87,7 @@ def main(): thermalbath.cfg_dir = "nonequilibrium/thermalbath/finitechemistry" thermalbath.cfg_file = "thermalbath.cfg" thermalbath.test_iter = 10 - thermalbath.test_vals = [0.945997, 0.945997, -12.039262, -12.171767, -32.000000, 10.013239] + thermalbath.test_vals = [0.945997, 0.945997, -11.860991, -11.857906, -32.000000, 10.013239] test_list.append(thermalbath) # Adiabatic thermal bath @@ -95,7 +95,7 @@ def main(): ionized.cfg_dir = "nonequilibrium/thermalbath/finitechemistry" ionized.cfg_file = "weakly_ionized.cfg" ionized.test_iter = 10 - ionized.test_vals = [-29.806157, -11.130797, -11.337264, -17.235059, -17.578729, -15.190274, -25.013626, -32.000000, -5.174887, 0.000000, 0.000000] + ionized.test_vals = [-28.173855, -10.350260, -11.719875, -16.100105, -16.850783, -13.485322, -23.431375, -32.000000, -4.558277, 0.000000, 0.000000] ionized.test_vals_aarch64 = [-29.816386, -10.729986, -11.720016, -17.484469, -18.237891, -15.241605, -24.956918, -32.000000, -5.727244, 0.000000, 0.000000] test_list.append(ionized) @@ -104,7 +104,7 @@ def main(): thermalbath_frozen.cfg_dir = "nonequilibrium/thermalbath/frozen" thermalbath_frozen.cfg_file = "thermalbath_frozen.cfg" thermalbath_frozen.test_iter = 10 - thermalbath_frozen.test_vals = [-32.000000, -32.000000, -11.962477, -11.962477, -32.000000, 10.013545] + thermalbath_frozen.test_vals = [-32.000000, -32.000000, -11.818647, -11.857909, -32.000000, 10.013545] test_list.append(thermalbath_frozen) # Inviscid single wedge, ausm, implicit @@ -112,7 +112,7 @@ def main(): invwedge_a.cfg_dir = "nonequilibrium/invwedge" invwedge_a.cfg_file = "invwedge_ausm.cfg" invwedge_a.test_iter = 10 - invwedge_a.test_vals = [-1.069675, -1.594438, -18.299923, -18.627316, -18.573325, 2.245721, 1.874105, 5.290285, 0.847729] + invwedge_a.test_vals = [-1.069669, -1.594432, -18.299010, -18.626399, -18.572410, 2.245727, 1.874088, 5.290291, 0.847735] invwedge_a.test_vals_aarch64 = [-1.069675, -1.594438, -18.299736, -18.627126, -18.573137, 2.245721, 1.874105, 5.290285, 0.847729] test_list.append(invwedge_a) @@ -130,7 +130,7 @@ def main(): invwedge_msw.cfg_dir = "nonequilibrium/invwedge" invwedge_msw.cfg_file = "invwedge_msw.cfg" invwedge_msw.test_iter = 10 - invwedge_msw.test_vals = [-1.212335, -1.737098, -18.299220, -18.626618, -18.572623, 2.106171, 1.651949, 5.143958, 0.704444] + invwedge_msw.test_vals = [-1.212335, -1.737098, -18.299375, -18.626782, -18.572771, 2.106171, 1.651949, 5.143958, 0.704444] invwedge_msw.test_vals_aarch64 = [-1.212335, -1.737098, -18.299279, -18.626656, -18.572683, 2.106171, 1.651949, 5.143958, 0.704444] test_list.append(invwedge_msw) @@ -139,7 +139,7 @@ def main(): invwedge_roe.cfg_dir = "nonequilibrium/invwedge" invwedge_roe.cfg_file = "invwedge_roe.cfg" invwedge_roe.test_iter = 10 - invwedge_roe.test_vals = [-1.063535, -1.588299, -17.208084, -17.537836, -17.481214, 2.254713, 1.854802, 5.292805, 0.890122] + invwedge_roe.test_vals = [-1.054108, -1.578871, -17.782421, -18.111535, -18.055538, 2.264661, 1.841727, 5.302630, 0.897714] invwedge_roe.test_vals_aarch64 = [-1.052398, -1.577160, -17.794015, -18.122997, -18.067131, 2.266042, 1.849686, 5.304700, 0.899584] test_list.append(invwedge_roe) @@ -175,7 +175,7 @@ def main(): visc_cone.cfg_dir = "nonequilibrium/visc_wedge" visc_cone.cfg_file = "axi_visccone.cfg" visc_cone.test_iter = 10 - visc_cone.test_vals = [-5.222270, -5.746525, -20.560278, -20.510152, -20.409102, 1.255758, -3.208382, -0.016014, 0.093462, 32619.000000] + visc_cone.test_vals = [-5.222269, -5.746523, -20.560216, -20.510119, -20.409089, 1.255762, -3.208384, -0.016011, 0.093461, 32619] visc_cone.test_vals_aarch64 = [-5.222270, -5.746525, -20.560286, -20.510152, -20.409101, 1.255758, -3.208382, -0.016014, 0.093462, 32619.000000] test_list.append(visc_cone) @@ -290,7 +290,7 @@ def main(): ramp.cfg_dir = "euler/ramp" ramp.cfg_file = "inv_ramp.cfg" ramp.test_iter = 10 - ramp.test_vals = [-13.649760, -8.012144, -0.076277, 0.054839] + ramp.test_vals = [-13.646937, -8.006398, -0.076277, 0.054839] ramp.test_vals_aarch64 = [-13.648406, -8.014579, -0.076277, 0.054839] test_list.append(ramp) @@ -369,7 +369,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.011758, -7.669453, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.011765, -7.670052, -0.000000, 2.089953] poiseuille_profile.test_vals_aarch64 = [-12.007498, -7.226926, -0.000000, 2.089953] test_list.append(poiseuille_profile) @@ -482,7 +482,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-12.037442, -16.376949, 1.080346, 0.018385, 20.000000, -1.564214, 20.000000, -4.180956, 0.000000] + turb_naca0012_sa.test_vals = [-12.037476, -16.376950, 1.080346, 0.018385, 20, -1.564171, 20, -4.180937, 0] turb_naca0012_sa.test_vals_aarch64 = [-12.037489, -16.376949, 1.080346, 0.018385, 20.000000, -1.564143, 20.000000, -4.180945, 0.000000] turb_naca0012_sa.timeout = 3200 test_list.append(turb_naca0012_sa) @@ -492,7 +492,7 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.094710, -15.251093, -5.906365, 1.070413, 0.015775, -2.376172, 0.000000] + turb_naca0012_sst.test_vals = [-12.094714, -15.251093, -5.906365, 1.070413, 0.015775, -2.376111, 0] turb_naca0012_sst.test_vals_aarch64 = [-12.075620, -15.246688, -5.861276, 1.070036, 0.015841, -1.991001, 0.000000] turb_naca0012_sst.timeout = 3200 test_list.append(turb_naca0012_sst) @@ -502,7 +502,7 @@ def main(): turb_naca0012_sst_sust.cfg_dir = "rans/naca0012" turb_naca0012_sst_sust.cfg_file = "turb_NACA0012_sst_sust.cfg" turb_naca0012_sst_sust.test_iter = 10 - turb_naca0012_sst_sust.test_vals = [-12.082096, -14.837177, -5.733436, 1.000893, 0.019109, -2.240955] + turb_naca0012_sst_sust.test_vals = [-12.082149, -14.837177, -5.733436, 1.000893, 0.019109, -2.240949] turb_naca0012_sst_sust.test_vals_aarch64 = [-12.073964, -14.836726, -5.732390, 1.000050, 0.019144, -2.229074] turb_naca0012_sst_sust.timeout = 3200 test_list.append(turb_naca0012_sst_sust) @@ -571,7 +571,7 @@ def main(): axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.069728, -7.537071, -8.812516, -3.731961, 0.000000] + axi_rans_air_nozzle_restart.test_vals = [-12.069349, -7.508309, -8.813361, -3.732852, 0] axi_rans_air_nozzle_restart.test_vals_aarch64 = [-14.143310, -9.163287, -10.858232, -5.787715, 0.000000] axi_rans_air_nozzle_restart.tol = 0.0001 test_list.append(axi_rans_air_nozzle_restart) @@ -782,7 +782,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.345454, 1.448536, 1.208684, -0.846029, 1.257859, 0.492608, 0.000000] + turbmod_sa_neg_rae2822.test_vals = [-1.345560, 1.448328, 1.208614, -0.846773, 1.277698, 0.499718, 0] 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) @@ -839,7 +839,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.583470, -15.035052, -0.726250, 0.020280] + contadj_naca0012.test_vals = [-9.583496, -15.034977, -0.726250, 0.020280] contadj_naca0012.test_vals_aarch64 = [-9.662546, -14.998818, -0.726250, 0.020280] test_list.append(contadj_naca0012) @@ -932,7 +932,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.975126, 1.344885, 0.670937, 0.011460] + turb_naca0012_1c.test_vals = [-4.982630, 1.343638, 0.664182, 0.009490] turb_naca0012_1c.test_vals_aarch64 = [-4.981036, 1.345868, 0.673232, 0.010091] test_list.append(turb_naca0012_1c) @@ -941,7 +941,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.482702, 1.262642, 0.496508, -0.032494] + turb_naca0012_2c.test_vals = [-5.482693, 1.262634, 0.495712, -0.032734] turb_naca0012_2c.test_vals_aarch64 = [-5.484365, 1.264701, 0.501741, -0.033109] test_list.append(turb_naca0012_2c) @@ -958,7 +958,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.129515, 1.283834, 0.806734, 0.047571] + turb_naca0012_p1c1.test_vals = [-5.129475, 1.283940, 0.807012, 0.047519] turb_naca0012_p1c1.test_vals_aarch64 = [-5.122100, 1.284478, 0.608744, -0.008593] test_list.append(turb_naca0012_p1c1) @@ -967,7 +967,7 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.553987, 1.234480, 0.603750, -0.008508] + turb_naca0012_p1c2.test_vals = [-5.553963, 1.234481, 0.604361, -0.008431] test_list.append(turb_naca0012_p1c2) ###################################### @@ -1094,7 +1094,7 @@ def main(): edge_PPR.cfg_dir = "nicf/edge" edge_PPR.cfg_file = "edge_PPR.cfg" edge_PPR.test_iter = 50 - edge_PPR.test_vals = [-12.063546, -5.872923, -0.000034, 0.000000] + edge_PPR.test_vals = [-12.063410, -5.872787, -0.000034, 0.000000] test_list.append(edge_PPR) # Rarefaction Q1D nozzle, include CoolProp fluid model @@ -1200,7 +1200,7 @@ def main(): channel_3D.cfg_dir = "sliding_interface/channel_3D" channel_3D.cfg_file = "channel_3D_WA.cfg" channel_3D.test_iter = 2 - channel_3D.test_vals = [2.000000, 0.000000, 0.629113, 0.524906, 0.422425] + channel_3D.test_vals = [2.000000, 0.000000, 0.629098, 0.524941, 0.422526] channel_3D.test_vals_aarch64 = [2.000000, 0.000000, 0.629119, 0.524959, 0.422390] channel_3D.unsteady = True channel_3D.multizone = True @@ -1276,7 +1276,7 @@ def main(): statbeam3d.cfg_dir = "fea_fsi/StatBeam_3d" statbeam3d.cfg_file = "configBeam_3d.cfg" statbeam3d.test_iter = 0 - statbeam3d.test_vals = [-6.058758, -5.750933, -5.892188, 110190] + statbeam3d.test_vals = [-6.047457, -5.730708, -5.926093, 110190] statbeam3d.test_vals_aarch64 = [-6.062693, -5.769132, -5.891190, 110190] test_list.append(statbeam3d) @@ -1285,7 +1285,7 @@ def main(): thermal_beam_3d.cfg_dir = "fea_fsi/ThermalBeam_3d" thermal_beam_3d.cfg_file = "configBeam_3d.cfg" thermal_beam_3d.test_iter = 4 - thermal_beam_3d.test_vals = [-8.137623, -7.840833, -7.903285, -13.978110, 217, -4.093241, 39, -4.072614, 1.3676e+05, 75.0] + thermal_beam_3d.test_vals = [-8.147213, -7.841446, -7.904153, -13.978110, 217, -4.095071, 39, -4.072614, 136760, 75] test_list.append(thermal_beam_3d) # Static beam, 3d with coupled temperature, nonlinear elasticity @@ -1313,7 +1313,7 @@ def main(): linear_plane_strain.cfg_dir = "fea_fsi/VonMissesVerif" linear_plane_strain.cfg_file = "linear_plane_strain_2d.cfg" linear_plane_strain.test_iter = 0 - linear_plane_strain.test_vals = [-6.157686, -6.051735, 0, 120140, 325, -8.105017] + linear_plane_strain.test_vals = [-6.036048, -6.001905, 0, 120140, 325, -8.025024] test_list.append(linear_plane_strain) # 2D beam in plain stress with thermal expansion. This tests fixes to the 2D von Mises stress calculation, @@ -1322,7 +1322,7 @@ def main(): nonlinear_plane_stress.cfg_dir = "fea_fsi/VonMissesVerif" nonlinear_plane_stress.cfg_file = "nonlinear_plane_stress_2d.cfg" nonlinear_plane_stress.test_iter = 19 - nonlinear_plane_stress.test_vals = [-7.433102, -3.355151, -13.983258, 162480, 43, -4.071408] + nonlinear_plane_stress.test_vals = [-7.432129, -3.354513, -13.982310, 162480, 43, -4.072960] test_list.append(nonlinear_plane_stress) # Dynamic beam, 2d @@ -1395,7 +1395,7 @@ def main(): solid_periodic_pins.cfg_dir = "solid_heat_conduction/periodic_pins" solid_periodic_pins.cfg_file = "configSolid.cfg" solid_periodic_pins.test_iter = 750 - solid_periodic_pins.test_vals = [-15.878977, -14.569206, 300.900000, 425.320000, 5.000000, -1.672737] + solid_periodic_pins.test_vals = [-15.878973, -14.569206, 300.900000, 425.320000, 5.000000, -1.672670] solid_periodic_pins.test_vals_aarch64 = [-15.879016, -14.569206, 300.900000, 425.320000, 5.000000, -1.672666] test_list.append(solid_periodic_pins) @@ -1458,7 +1458,7 @@ def main(): pywrapper_turb_naca0012_sst.cfg_dir = "rans/naca0012" pywrapper_turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" pywrapper_turb_naca0012_sst.test_iter = 10 - pywrapper_turb_naca0012_sst.test_vals = [-12.094710, -15.251093, -5.906365, 1.070413, 0.015775, -2.376172, 0] + pywrapper_turb_naca0012_sst.test_vals = [-12.094714, -15.251093, -5.906365, 1.070413, 0.015775, -2.376111, 0] pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.075620, -15.246688, -5.861276, 1.070036, 0.015841, -1.991001, 0.000000] pywrapper_turb_naca0012_sst.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") pywrapper_turb_naca0012_sst.timeout = 3200 @@ -1489,7 +1489,7 @@ def main(): pywrapper_custom_fea_load.cfg_dir = "py_wrapper/custom_load_fea" pywrapper_custom_fea_load.cfg_file = "config.cfg" pywrapper_custom_fea_load.test_iter = 13 - pywrapper_custom_fea_load.test_vals = [-7.262040, -4.945686, -14.163208, 34, -6.009642, 362.23] + pywrapper_custom_fea_load.test_vals = [-7.262040, -4.945686, -14.163208, 34, -6.029883, 362.230000] pywrapper_custom_fea_load.command = TestCase.Command("mpirun -np 2", "python", "run.py") test_list.append(pywrapper_custom_fea_load) @@ -1748,7 +1748,7 @@ def main(): species_passive_val.cfg_dir = "species_transport/passive_transport_validation" species_passive_val.cfg_file = "passive_transport.cfg" species_passive_val.test_iter = 50 - species_passive_val.test_vals = [-16.602539, -16.343775, -16.937083, -4.257599, 10, -4.277976, 8, -5.193350, 0.186610, 0] + species_passive_val.test_vals = [-16.590103, -16.350880, -16.915685, -4.257599, 10, -4.296538, 8, -5.193350, 0.186610, 0] species_passive_val.test_vals_aarch64 = [-16.517744, -16.282420, -16.871663, -4.257599, 10.000000, -4.278151, 8.000000, -5.193350, 0.186610, 0.000000] test_list.append(species_passive_val) diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index cb127ed7d2e3..5a6bbef85a62 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -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, 0.667037, 0.483920, 0.518405, -1.013536] + discadj_trans_stator.test_vals = [79.000000, 0.697136, 0.459036, 0.536525, -0.995531] discadj_trans_stator.test_vals_aarch64 = [79.000000, 0.696755, 0.485950, 0.569475, -0.990065] test_list.append(discadj_trans_stator) @@ -244,7 +244,7 @@ def main(): discadj_fea.cfg_dir = "disc_adj_fea" discadj_fea.cfg_file = "configAD_fem.cfg" discadj_fea.test_iter = 4 - discadj_fea.test_vals = [-2.849453, -3.238429, -0.000364, -8.708700] #last 4 columns + discadj_fea.test_vals = [-2.849687, -3.238608, -0.000364, -8.708700] #last 4 columns discadj_fea.test_vals_aarch64 = [-2.849646, -3.238577, -0.000364, -8.708700] #last 4 columns test_list.append(discadj_fea) @@ -254,7 +254,7 @@ def main(): discadj_thermoelastic.cfg_dir = "fea_fsi/ThermalBeam_3d" discadj_thermoelastic.cfg_file = "configBeamNonlinear_3d_ad.cfg" discadj_thermoelastic.test_iter = 10 - discadj_thermoelastic.test_vals = [-5.355510, -5.293378, -6.164317, -6.433862, 43, -4.049556, 27, -4.164192, 0, 0.192640, 0] + discadj_thermoelastic.test_vals = [-5.355531, -5.293380, -6.164482, -6.433863, 43, -4.049760, 27, -4.164183, 0, 0.192640, 0] test_list.append(discadj_thermoelastic) ################################### @@ -286,7 +286,7 @@ def main(): discadj_fsi2.cfg_dir = "disc_adj_fsi/Airfoil_2d" discadj_fsi2.cfg_file = "config.cfg" discadj_fsi2.test_iter = 8 - discadj_fsi2.test_vals = [-4.772641, 0.917601, -3.863369, 0.295450, 3.839800] + discadj_fsi2.test_vals = [-4.773024, 0.915849, -3.863369, 0.295450, 3.839800] discadj_fsi2.test_vals_aarch64 = [-4.772641, 0.917601, -3.863369, 0.295450, 3.839800] discadj_fsi2.tol = 0.00001 test_list.append(discadj_fsi2) @@ -308,7 +308,7 @@ def main(): da_sp_pinArray_cht_2d_dp_hf.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" da_sp_pinArray_cht_2d_dp_hf.cfg_file = "DA_configMaster.cfg" da_sp_pinArray_cht_2d_dp_hf.test_iter = 100 - da_sp_pinArray_cht_2d_dp_hf.test_vals = [-2.508527, -3.227843, -2.608921] + da_sp_pinArray_cht_2d_dp_hf.test_vals = [-2.687303, -3.218852, -2.653738] da_sp_pinArray_cht_2d_dp_hf.multizone = True test_list.append(da_sp_pinArray_cht_2d_dp_hf) diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index 542d13f1d126..d715ec6cdcc1 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.88, -0.00, 0.00 -0, -2.67, 18.39, 0.00 -1, -3.79, 26.10, 0.00 -2, -4.70, 32.45, 0.00 -3, -5.54, 38.34, 0.00 -4, -6.26, 43.40, 0.00 -5, -6.83, 47.52, 0.00 -6, -7.31, 51.12, 0.00 -7, -7.71, 54.13, 0.00 -8, -7.98, 56.36, 0.00 -9, -8.14, 57.85, 0.00 -10, -8.21, 58.69, 0.00 -11, -8.24, 59.34, 0.00 -12, -8.13, 59.02, 0.00 -13, -7.94, 58.09, 0.00 -14, -7.68, 56.68, 0.00 -15, -7.37, 54.90, 0.00 -16, -6.96, 52.39, 0.00 -17, -6.52, 49.56, 0.00 -18, -5.99, 46.04, 0.00 -19, -5.45, 42.32, 0.00 -20, -4.83, 37.98, 0.00 -21, -4.18, 33.24, 0.00 -22, -3.46, 27.88, 0.00 -23, -2.72, 22.22, 0.00 -24, -1.96, 16.24, 0.00 -25, -1.22, 10.20, 0.00 -26, -0.37, 3.17, 0.00 -27, 0.46, -3.95, 0.00 -28, 1.32, -11.54, 0.00 -29, 2.11, -18.78, 0.00 -30, 2.93, -26.51, 0.00 -31, 3.74, -34.50, 0.00 -32, 4.58, -42.97, 0.00 -33, 5.31, -50.75, 0.00 -34, 6.16, -60.02, 0.00 -35, 6.96, -69.23, 0.00 -36, 7.79, -79.18, 0.00 -37, 8.49, -88.24, 0.00 -38, 9.31, -99.04, 0.00 -39, 10.00, -109.14, 0.00 -40, 10.71, -119.95, 0.00 -41, 11.15, -128.44, 0.00 -42, 11.87, -141.00, 0.00 -43, 12.46, -152.82, 0.00 -44, 13.05, -165.68, 0.00 -45, 13.36, -176.13, 0.00 -46, 13.74, -188.72, 0.00 -47, 14.04, -201.70, 0.00 -48, 14.40, -217.16, 0.00 -49, 14.62, -232.68, 0.00 -50, 14.76, -249.30, 0.00 -51, 14.87, -268.47, 0.00 -52, 14.58, -283.81, 0.00 -53, 14.45, -306.34, 0.00 -54, 13.71, -320.59, 0.00 -55, 12.92, -338.59, 0.00 -56, 11.24, -337.52, 0.00 -57, 9.40, -333.11, 0.00 -58, 7.49, -327.34, 0.00 -59, 6.54, -378.95, 0.00 -60, 5.15, -451.70, 0.00 -61, 2.42, -462.33, 0.00 -62, -0.56, -454.47, 0.00 -63, -3.51, -437.34, 0.00 -64, -6.46, -426.71, 0.00 -65, -9.20, -407.04, 0.00 -66, -11.99, -393.94, 0.00 -67, -14.66, -379.06, 0.00 -68, -17.19, -363.19, 0.00 -69, -19.48, -345.11, 0.00 -70, -21.73, -329.12, 0.00 -71, -23.63, -310.27, 0.00 -72, -25.13, -289.40, 0.00 -73, -26.10, -265.91, 0.00 -74, -27.83, -252.70, 0.00 -75, -28.86, -234.86, 0.00 -76, -29.42, -215.52, 0.00 -77, -28.58, -189.15, 0.00 -78, -29.03, -174.07, 0.00 -79, -28.32, -154.17, 0.00 -80, -27.54, -136.23, 0.00 -81, -26.12, -117.53, 0.00 -82, -25.36, -103.75, 0.00 -83, -24.89, -92.52, 0.00 -84, -23.34, -78.71, 0.00 -85, -21.24, -64.82, 0.00 -86, -14.20, -39.11, 0.00 -87, -11.57, -28.61, 0.00 -88, -2.44, -5.38, 0.00 -89, 7.65, 14.96, 0.00 -90, 12.16, 20.85, 0.00 -91, 23.73, 35.28, 0.00 -92, 23.23, 29.42, 0.00 -93, 36.16, 38.12, 0.00 -94, 49.31, 41.89, 0.00 -95, 30.26, 19.71, 0.00 -96, 48.43, 22.20, 0.00 -97, 40.70, 11.01, 0.00 -98, 11.92, 1.60, 0.00 -99, 30.54, -0.00, 0.00 -100, 24.05, -3.23, 0.00 -101, 54.99, -14.88, 0.00 -102, 15.54, -7.12, 0.00 -103, -17.50, 11.40, 0.00 -104, -24.54, 20.85, 0.00 -105, -24.69, 26.03, 0.00 -106, -41.95, 53.13, 0.00 -107, -47.40, 70.46, 0.00 -108, -56.86, 97.56, 0.00 -109, -51.67, 101.05, 0.00 -110, -56.97, 125.74, 0.00 -111, -56.02, 138.50, 0.00 -112, -54.86, 151.04, 0.00 -113, -55.26, 168.69, 0.00 -114, -59.25, 199.83, 0.00 -115, -60.58, 225.21, 0.00 -116, -60.47, 247.41, 0.00 -117, -59.92, 269.58, 0.00 -118, -59.43, 294.00, 0.00 -119, -58.44, 318.08, 0.00 -120, -56.74, 340.20, 0.00 -121, -55.10, 364.65, 0.00 -122, -52.85, 387.19, 0.00 -123, -50.28, 409.17, 0.00 -124, -47.47, 430.99, 0.00 -125, -44.69, 455.36, 0.00 -126, -41.46, 477.47, 0.00 -127, -38.06, 499.80, 0.00 -128, -34.43, 521.44, 0.00 -129, -30.72, 544.23, 0.00 -130, -26.73, 564.60, 0.00 -131, -22.61, 584.47, 0.00 -132, -18.37, 603.28, 0.00 -133, -14.09, 623.31, 0.00 -134, -9.69, 640.38, 0.00 -135, -5.27, 657.77, 0.00 -136, -0.83, 673.72, 0.00 -137, 3.62, 691.31, 0.00 -138, 8.04, 705.16, 0.00 -139, 12.44, 720.48, 0.00 -140, 16.77, 733.03, 0.00 -141, 21.01, 744.66, 0.00 -142, 25.13, 754.73, 0.00 -143, 29.14, 763.81, 0.00 -144, 33.02, 771.98, 0.00 -145, 36.80, 780.20, 0.00 -146, 40.40, 786.36, 0.00 -147, 43.83, 791.56, 0.00 -148, 47.08, 795.50, 0.00 -149, 50.26, 799.95, 0.00 -150, 53.19, 802.25, 0.00 -151, 56.05, 805.05, 0.00 -152, 58.58, 804.66, 0.00 -153, 60.89, 803.02, 0.00 -154, 62.81, 797.64, 0.00 -155, 63.58, 779.88, 0.00 -156, 70.83, 841.11, 0.00 -157, 73.83, 850.73, 0.00 -158, 26.45, 296.32, 0.00 -159, 20.38, 222.34, 0.00 -160, 18.50, 196.84, 0.00 -161, 8.19, 85.12, 0.00 -162, 6.54, 66.45, 0.00 -163, 4.60, 45.80, 0.00 -164, 3.51, 34.20, 0.00 -165, 2.46, 23.51, 0.00 -166, 1.74, 16.30, 0.00 -167, 0.83, 7.65, 0.00 -168, 0.12, 1.08, 0.00 -169, -0.46, -4.14, 0.00 -170, -1.22, -10.66, 0.00 -171, -1.90, -16.42, 0.00 -172, -2.60, -22.10, 0.00 -173, -3.04, -25.51, 0.00 -174, -3.69, -30.53, 0.00 -175, -4.27, -34.83, 0.00 -176, -4.93, -39.70, 0.00 -177, -5.37, -42.70, 0.00 -178, -5.93, -46.60, 0.00 -179, -6.37, -49.51, 0.00 -180, -6.88, -52.82, 0.00 -181, -7.24, -55.06, 0.00 -182, -7.61, -57.23, 0.00 -183, -7.90, -58.87, 0.00 -184, -8.18, -60.37, 0.00 -185, -8.31, -60.83, 0.00 -186, -8.44, -61.22, 0.00 -187, -8.44, -60.79, 0.00 -188, -8.43, -60.25, 0.00 -189, -8.31, -59.05, 0.00 -190, -8.10, -57.18, 0.00 -191, -7.75, -54.46, 0.00 -192, -7.33, -51.26, 0.00 -193, -6.81, -47.41, 0.00 -194, -6.19, -42.96, 0.00 -195, -5.43, -37.58, 0.00 -196, -4.59, -31.65, 0.00 -197, -3.64, -25.11, 0.00 -198, -2.52, -17.37, 0.00 +199, -0.86, -0.00, 0.00 +0, -2.65, 18.23, 0.00 +1, -3.76, 25.89, 0.00 +2, -4.65, 32.09, 0.00 +3, -5.46, 37.74, 0.00 +4, -6.13, 42.56, 0.00 +5, -6.71, 46.69, 0.00 +6, -7.16, 50.07, 0.00 +7, -7.53, 52.90, 0.00 +8, -7.76, 54.82, 0.00 +9, -7.90, 56.13, 0.00 +10, -7.93, 56.70, 0.00 +11, -7.90, 56.91, 0.00 +12, -7.75, 56.22, 0.00 +13, -7.57, 55.39, 0.00 +14, -7.26, 53.59, 0.00 +15, -6.89, 51.30, 0.00 +16, -6.44, 48.47, 0.00 +17, -5.99, 45.51, 0.00 +18, -5.40, 41.51, 0.00 +19, -4.79, 37.20, 0.00 +20, -4.13, 32.43, 0.00 +21, -3.45, 27.41, 0.00 +22, -2.67, 21.54, 0.00 +23, -1.89, 15.41, 0.00 +24, -1.09, 9.05, 0.00 +25, -0.31, 2.56, 0.00 +26, 0.57, -4.88, 0.00 +27, 1.43, -12.39, 0.00 +28, 2.29, -20.08, 0.00 +29, 3.06, -27.24, 0.00 +30, 3.89, -35.25, 0.00 +31, 4.75, -43.77, 0.00 +32, 5.63, -52.86, 0.00 +33, 6.43, -61.46, 0.00 +34, 7.32, -71.39, 0.00 +35, 8.22, -81.78, 0.00 +36, 9.08, -92.31, 0.00 +37, 9.89, -102.78, 0.00 +38, 10.69, -113.72, 0.00 +39, 11.47, -125.13, 0.00 +40, 12.18, -136.48, 0.00 +41, 12.94, -149.09, 0.00 +42, 13.63, -161.87, 0.00 +43, 14.33, -175.75, 0.00 +44, 14.84, -188.45, 0.00 +45, 15.37, -202.73, 0.00 +46, 15.64, -214.91, 0.00 +47, 16.02, -230.07, 0.00 +48, 16.07, -242.38, 0.00 +49, 16.04, -255.31, 0.00 +50, 15.75, -266.07, 0.00 +51, 15.41, -278.35, 0.00 +52, 14.99, -291.85, 0.00 +53, 14.69, -311.51, 0.00 +54, 14.03, -328.05, 0.00 +55, 13.22, -346.63, 0.00 +56, 11.58, -347.88, 0.00 +57, 9.48, -336.06, 0.00 +58, 7.63, -333.70, 0.00 +59, 6.69, -387.45, 0.00 +60, 5.25, -460.90, 0.00 +61, 2.49, -475.82, 0.00 +62, -0.58, -468.44, 0.00 +63, -3.64, -454.65, 0.00 +64, -6.73, -444.52, 0.00 +65, -9.62, -425.48, 0.00 +66, -12.57, -412.95, 0.00 +67, -15.42, -398.58, 0.00 +68, -18.20, -384.41, 0.00 +69, -20.74, -367.51, 0.00 +70, -23.30, -352.80, 0.00 +71, -25.57, -335.76, 0.00 +72, -27.15, -312.68, 0.00 +73, -28.23, -287.64, 0.00 +74, -30.47, -276.68, 0.00 +75, -32.56, -264.93, 0.00 +76, -32.95, -241.41, 0.00 +77, -33.96, -224.77, 0.00 +78, -35.35, -211.94, 0.00 +79, -35.57, -193.60, 0.00 +80, -33.74, -166.92, 0.00 +81, -37.96, -170.78, 0.00 +82, -35.41, -144.86, 0.00 +83, -35.53, -132.10, 0.00 +84, -30.07, -101.42, 0.00 +85, -26.51, -80.93, 0.00 +86, -20.60, -56.73, 0.00 +87, -16.53, -40.87, 0.00 +88, -10.32, -22.78, 0.00 +89, -1.78, -3.49, 0.00 +90, 5.56, 9.54, 0.00 +91, 13.08, 19.45, 0.00 +92, 20.82, 26.37, 0.00 +93, 41.34, 43.59, 0.00 +94, 56.70, 48.17, 0.00 +95, 86.67, 56.45, 0.00 +96, 94.24, 43.20, 0.00 +97, 124.52, 33.70, 0.00 +98, 95.89, 12.87, 0.00 +99, 56.96, -0.00, 0.00 +100, 87.55, -11.75, 0.00 +101, 76.99, -20.84, 0.00 +102, 46.64, -21.38, 0.00 +103, 27.47, -17.89, 0.00 +104, 9.68, -8.22, 0.00 +105, -19.36, 20.42, 0.00 +106, -24.54, 31.07, 0.00 +107, -36.12, 53.70, 0.00 +108, -39.92, 68.49, 0.00 +109, -46.04, 90.04, 0.00 +110, -50.48, 111.42, 0.00 +111, -53.58, 132.47, 0.00 +112, -55.98, 154.13, 0.00 +113, -58.11, 177.39, 0.00 +114, -61.20, 206.40, 0.00 +115, -62.47, 232.26, 0.00 +116, -62.39, 255.28, 0.00 +117, -62.07, 279.29, 0.00 +118, -61.73, 305.38, 0.00 +119, -60.90, 331.50, 0.00 +120, -59.52, 356.86, 0.00 +121, -57.20, 378.58, 0.00 +122, -54.90, 402.16, 0.00 +123, -52.07, 423.70, 0.00 +124, -49.20, 446.69, 0.00 +125, -45.88, 467.53, 0.00 +126, -42.63, 490.92, 0.00 +127, -39.04, 512.69, 0.00 +128, -35.26, 534.03, 0.00 +129, -31.36, 555.63, 0.00 +130, -27.27, 576.05, 0.00 +131, -23.01, 594.86, 0.00 +132, -18.68, 613.47, 0.00 +133, -14.28, 631.83, 0.00 +134, -9.82, 648.99, 0.00 +135, -5.33, 665.19, 0.00 +136, -0.84, 680.91, 0.00 +137, 3.65, 697.90, 0.00 +138, 8.11, 711.95, 0.00 +139, 12.54, 725.96, 0.00 +140, 16.89, 738.46, 0.00 +141, 21.14, 749.55, 0.00 +142, 25.30, 759.68, 0.00 +143, 29.32, 768.68, 0.00 +144, 33.23, 776.92, 0.00 +145, 37.07, 785.93, 0.00 +146, 40.69, 791.99, 0.00 +147, 44.12, 796.75, 0.00 +148, 47.39, 800.59, 0.00 +149, 50.60, 805.39, 0.00 +150, 53.53, 807.33, 0.00 +151, 56.24, 807.80, 0.00 +152, 58.72, 806.69, 0.00 +153, 61.82, 815.20, 0.00 +154, 64.19, 815.25, 0.00 +155, 67.21, 824.40, 0.00 +156, 71.43, 848.24, 0.00 +157, 39.92, 460.00, 0.00 +158, 4.29, 48.09, 0.00 +159, 17.77, 193.92, 0.00 +160, 21.23, 225.97, 0.00 +161, 10.74, 111.65, 0.00 +162, 9.33, 94.79, 0.00 +163, 6.98, 69.42, 0.00 +164, 6.08, 59.32, 0.00 +165, 4.35, 41.60, 0.00 +166, 3.64, 34.13, 0.00 +167, 2.62, 24.13, 0.00 +168, 1.95, 17.64, 0.00 +169, 1.16, 10.32, 0.00 +170, 0.46, 4.05, 0.00 +171, -0.36, -3.14, 0.00 +172, -1.08, -9.18, 0.00 +173, -1.74, -14.63, 0.00 +174, -2.38, -19.72, 0.00 +175, -3.04, -24.84, 0.00 +176, -3.71, -29.86, 0.00 +177, -4.30, -34.19, 0.00 +178, -4.90, -38.47, 0.00 +179, -5.43, -42.17, 0.00 +180, -5.99, -46.01, 0.00 +181, -6.42, -48.81, 0.00 +182, -6.86, -51.59, 0.00 +183, -7.19, -53.60, 0.00 +184, -7.54, -55.68, 0.00 +185, -7.71, -56.39, 0.00 +186, -7.94, -57.63, 0.00 +187, -7.98, -57.50, 0.00 +188, -8.00, -57.19, 0.00 +189, -7.94, -56.41, 0.00 +190, -7.77, -54.88, 0.00 +191, -7.47, -52.50, 0.00 +192, -7.09, -49.57, 0.00 +193, -6.59, -45.88, 0.00 +194, -6.01, -41.72, 0.00 +195, -5.29, -36.63, 0.00 +196, -4.48, -30.94, 0.00 +197, -3.58, -24.65, 0.00 +198, -2.49, -17.12, 0.00 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 5f1ec6e4b041..4e95fa24a0e5 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.86, 19.71, 0.00 -1, -4.10, 28.25, 0.00 -2, -5.21, 35.95, 0.00 -3, -6.19, 42.79, 0.00 -4, -7.06, 48.95, 0.00 -5, -7.76, 54.03, 0.00 -6, -8.38, 58.59, 0.00 -7, -8.86, 62.22, 0.00 -8, -9.24, 65.25, 0.00 -9, -9.49, 67.40, 0.00 -10, -9.65, 69.03, 0.00 -11, -9.70, 69.89, 0.00 -12, -9.68, 70.22, 0.00 -13, -9.53, 69.76, 0.00 -14, -9.32, 68.83, 0.00 -15, -9.00, 67.08, 0.00 -16, -8.64, 64.99, 0.00 -17, -8.18, 62.19, 0.00 -18, -7.69, 59.07, 0.00 -19, -7.11, 55.21, 0.00 -20, -6.49, 51.01, 0.00 -21, -5.80, 46.18, 0.00 -22, -5.10, 41.07, 0.00 -23, -4.33, 35.30, 0.00 -24, -3.55, 29.37, 0.00 -25, -2.73, 22.90, 0.00 -26, -1.90, 16.21, 0.00 -27, -1.06, 9.19, 0.00 -28, -0.22, 1.97, 0.00 -29, 0.66, -5.88, 0.00 -30, 1.54, -13.99, 0.00 -31, 2.44, -22.51, 0.00 -32, 3.29, -30.89, 0.00 -33, 4.14, -39.60, 0.00 -34, 4.95, -48.22, 0.00 -35, 5.76, -57.27, 0.00 -36, 6.50, -66.07, 0.00 -37, 7.24, -75.26, 0.00 -38, 7.90, -84.06, 0.00 -39, 8.54, -93.22, 0.00 -40, 9.09, -101.81, 0.00 -41, 9.52, -109.76, 0.00 -42, 9.88, -117.33, 0.00 -43, 10.13, -124.25, 0.00 -44, 10.36, -131.59, 0.00 -45, 10.46, -137.98, 0.00 -46, 10.42, -143.13, 0.00 -47, 9.88, -141.91, 0.00 -48, 9.21, -138.94, 0.00 -49, 7.72, -122.90, 0.00 -50, 6.88, -116.25, 0.00 -51, 5.67, -102.42, 0.00 -52, 7.31, -142.26, 0.00 -53, 19.42, -411.71, 0.00 -54, 25.10, -586.85, 0.00 -55, 21.04, -551.60, 0.00 -56, 17.73, -532.36, 0.00 -57, 15.09, -534.95, 0.00 -58, 12.09, -528.53, 0.00 -59, 8.96, -518.77, 0.00 -60, 5.78, -507.56, 0.00 -61, 2.60, -496.51, 0.00 -62, -0.60, -483.30, 0.00 -63, -3.77, -469.73, 0.00 -64, -6.88, -454.52, 0.00 -65, -9.94, -439.65, 0.00 -66, -12.87, -422.69, 0.00 -67, -15.69, -405.66, 0.00 -68, -18.31, -386.86, 0.00 -69, -20.80, -368.44, 0.00 -70, -23.01, -348.42, 0.00 -71, -25.02, -328.52, 0.00 -72, -26.69, -307.34, 0.00 -73, -28.28, -288.18, 0.00 -74, -29.30, -266.00, 0.00 -75, -29.97, -243.86, 0.00 -76, -30.15, -220.85, 0.00 -77, -30.19, -199.81, 0.00 -78, -29.56, -177.25, 0.00 -79, -28.60, -155.66, 0.00 -80, -26.92, -133.16, 0.00 -81, -25.00, -112.47, 0.00 -82, -21.80, -89.21, 0.00 -83, -18.54, -68.92, 0.00 -84, -13.74, -46.35, 0.00 -85, -8.89, -27.14, 0.00 -86, -1.64, -4.52, 0.00 -87, 4.39, 10.85, 0.00 -88, 13.83, 30.52, 0.00 -89, 21.16, 41.38, 0.00 -90, 34.57, 59.31, 0.00 -91, 45.05, 66.97, 0.00 -92, 66.65, 84.41, 0.00 -93, 69.69, 73.48, 0.00 -94, 93.94, 79.80, 0.00 -95, 148.33, 96.61, 0.00 -96, 164.88, 75.58, 0.00 -97, 208.90, 56.54, 0.00 -98, 167.16, 22.43, 0.00 -99, 113.32, -0.00, 0.00 -100, 159.48, -21.40, 0.00 -101, 172.64, -46.73, 0.00 -102, 133.23, -61.07, 0.00 -103, 107.21, -69.83, 0.00 -104, 74.94, -63.66, 0.00 -105, 61.84, -65.20, 0.00 -106, 40.24, -50.96, 0.00 -107, 27.30, -40.58, 0.00 -108, 12.76, -21.89, 0.00 -109, 1.07, -2.08, 0.00 -110, -7.69, 16.96, 0.00 -111, -15.74, 38.92, 0.00 -112, -22.53, 62.04, 0.00 -113, -27.90, 85.18, 0.00 -114, -32.82, 110.68, 0.00 -115, -36.02, 133.90, 0.00 -116, -38.83, 158.85, 0.00 -117, -40.54, 182.41, 0.00 -118, -42.01, 207.84, 0.00 -119, -42.60, 231.87, 0.00 -120, -42.81, 256.72, 0.00 -121, -42.14, 278.89, 0.00 -122, -41.42, 303.42, 0.00 -123, -40.14, 326.64, 0.00 -124, -38.55, 350.04, 0.00 -125, -36.44, 371.36, 0.00 -126, -34.25, 394.45, 0.00 -127, -31.75, 416.96, 0.00 -128, -29.00, 439.11, 0.00 -129, -25.94, 459.63, 0.00 -130, -22.75, 480.66, 0.00 -131, -19.36, 500.47, 0.00 -132, -15.84, 520.18, 0.00 -133, -12.17, 538.40, 0.00 -134, -8.43, 556.78, 0.00 -135, -4.60, 573.59, 0.00 -136, -0.73, 590.67, 0.00 -137, 3.17, 605.92, 0.00 -138, 7.07, 620.55, 0.00 -139, 10.95, 634.10, 0.00 -140, 14.80, 647.26, 0.00 -141, 18.58, 658.55, 0.00 -142, 22.30, 669.55, 0.00 -143, 25.92, 679.48, 0.00 -144, 29.44, 688.36, 0.00 -145, 32.77, 694.62, 0.00 -146, 36.03, 701.29, 0.00 -147, 39.11, 706.33, 0.00 -148, 42.09, 711.15, 0.00 -149, 44.92, 714.94, 0.00 -150, 47.50, 716.43, 0.00 -151, 48.94, 702.88, 0.00 -152, 53.10, 729.38, 0.00 -153, 51.97, 685.39, 0.00 -154, 17.10, 217.16, 0.00 -155, -5.11, -62.69, 0.00 -156, -5.62, -66.74, 0.00 -157, -1.38, -15.85, 0.00 -158, -0.02, -0.22, 0.00 -159, 1.17, 12.77, 0.00 -160, 1.40, 14.95, 0.00 -161, 1.65, 17.10, 0.00 -162, 1.59, 16.14, 0.00 -163, 1.45, 14.39, 0.00 -164, 1.14, 11.11, 0.00 -165, 0.76, 7.29, 0.00 -166, 0.29, 2.71, 0.00 -167, -0.23, -2.16, 0.00 -168, -0.81, -7.32, 0.00 -169, -1.42, -12.61, 0.00 -170, -2.05, -17.96, 0.00 -171, -2.72, -23.48, 0.00 -172, -3.40, -28.92, 0.00 -173, -4.11, -34.50, 0.00 -174, -4.78, -39.56, 0.00 -175, -5.44, -44.39, 0.00 -176, -6.07, -48.93, 0.00 -177, -6.71, -53.35, 0.00 -178, -7.28, -57.23, 0.00 -179, -7.85, -60.97, 0.00 -180, -8.33, -64.03, 0.00 -181, -8.80, -66.87, 0.00 -182, -9.17, -68.95, 0.00 -183, -9.49, -70.71, 0.00 -184, -9.72, -71.77, 0.00 -185, -9.93, -72.64, 0.00 -186, -9.98, -72.43, 0.00 -187, -10.00, -72.02, 0.00 -188, -9.86, -70.53, 0.00 -189, -9.66, -68.65, 0.00 -190, -9.35, -66.05, 0.00 -191, -8.96, -62.96, 0.00 -192, -8.44, -58.99, 0.00 -193, -7.81, -54.38, 0.00 -194, -7.06, -48.99, 0.00 -195, -6.18, -42.77, 0.00 -196, -5.17, -35.72, 0.00 -197, -4.05, -27.93, 0.00 -198, -2.79, -19.19, 0.00 +199, -0.86, -0.00, 0.00 +0, -2.63, 18.11, 0.00 +1, -3.63, 25.00, 0.00 +2, -4.49, 31.01, 0.00 +3, -5.27, 36.45, 0.00 +4, -5.94, 41.20, 0.00 +5, -6.49, 45.19, 0.00 +6, -6.94, 48.51, 0.00 +7, -7.30, 51.25, 0.00 +8, -7.53, 53.19, 0.00 +9, -7.69, 54.61, 0.00 +10, -7.73, 55.29, 0.00 +11, -7.72, 55.60, 0.00 +12, -7.59, 55.07, 0.00 +13, -7.40, 54.17, 0.00 +14, -7.11, 52.49, 0.00 +15, -6.79, 50.55, 0.00 +16, -6.37, 47.90, 0.00 +17, -5.91, 44.92, 0.00 +18, -5.36, 41.14, 0.00 +19, -4.80, 37.28, 0.00 +20, -4.15, 32.62, 0.00 +21, -3.50, 27.86, 0.00 +22, -2.78, 22.37, 0.00 +23, -2.06, 16.81, 0.00 +24, -1.27, 10.52, 0.00 +25, -0.50, 4.21, 0.00 +26, 0.33, -2.80, 0.00 +27, 1.15, -9.97, 0.00 +28, 2.04, -17.86, 0.00 +29, 2.85, -25.42, 0.00 +30, 3.69, -33.44, 0.00 +31, 4.48, -41.33, 0.00 +32, 5.36, -50.31, 0.00 +33, 6.18, -59.06, 0.00 +34, 7.05, -68.72, 0.00 +35, 7.84, -78.03, 0.00 +36, 8.69, -88.33, 0.00 +37, 9.43, -98.01, 0.00 +38, 10.23, -108.84, 0.00 +39, 10.92, -119.14, 0.00 +40, 11.63, -130.32, 0.00 +41, 12.28, -141.50, 0.00 +42, 12.91, -153.33, 0.00 +43, 13.43, -164.72, 0.00 +44, 13.81, -175.34, 0.00 +45, 14.01, -184.69, 0.00 +46, 14.17, -194.64, 0.00 +47, 14.35, -206.11, 0.00 +48, 14.35, -216.45, 0.00 +49, 14.66, -233.35, 0.00 +50, 14.44, -243.91, 0.00 +51, 13.23, -239.01, 0.00 +52, 9.28, -180.73, 0.00 +53, 10.93, -231.67, 0.00 +54, 22.42, -524.14, 0.00 +55, 23.41, -613.61, 0.00 +56, 19.80, -594.50, 0.00 +57, 16.27, -576.89, 0.00 +58, 13.02, -569.14, 0.00 +59, 9.66, -559.58, 0.00 +60, 6.26, -549.57, 0.00 +61, 2.81, -536.89, 0.00 +62, -0.65, -524.68, 0.00 +63, -4.08, -509.47, 0.00 +64, -7.50, -495.51, 0.00 +65, -10.82, -478.63, 0.00 +66, -14.09, -462.77, 0.00 +67, -17.20, -444.59, 0.00 +68, -20.22, -427.15, 0.00 +69, -22.98, -407.10, 0.00 +70, -25.67, -388.75, 0.00 +71, -27.98, -367.48, 0.00 +72, -30.23, -348.11, 0.00 +73, -31.93, -325.35, 0.00 +74, -33.71, -306.06, 0.00 +75, -34.92, -284.17, 0.00 +76, -36.03, -263.97, 0.00 +77, -36.59, -242.17, 0.00 +78, -37.19, -222.97, 0.00 +79, -36.76, -200.07, 0.00 +80, -36.54, -180.76, 0.00 +81, -35.69, -160.58, 0.00 +82, -34.73, -142.08, 0.00 +83, -32.59, -121.17, 0.00 +84, -30.29, -102.16, 0.00 +85, -26.60, -81.19, 0.00 +86, -22.96, -63.22, 0.00 +87, -15.77, -38.98, 0.00 +88, -10.68, -23.57, 0.00 +89, -2.62, -5.11, 0.00 +90, 2.96, 5.08, 0.00 +91, 10.30, 15.31, 0.00 +92, 19.77, 25.04, 0.00 +93, 17.81, 18.78, 0.00 +94, 23.65, 20.09, 0.00 +95, 12.09, 7.87, 0.00 +96, 11.10, 5.09, 0.00 +97, 33.12, 8.96, 0.00 +98, 30.07, 4.03, 0.00 +99, 6.42, -0.00, 0.00 +100, 26.15, -3.51, 0.00 +101, 36.45, -9.86, 0.00 +102, 30.00, -13.75, 0.00 +103, 31.67, -20.63, 0.00 +104, 13.92, -11.83, 0.00 +105, 11.86, -12.50, 0.00 +106, -3.05, 3.86, 0.00 +107, -9.48, 14.09, 0.00 +108, -15.43, 26.47, 0.00 +109, -23.77, 46.48, 0.00 +110, -29.37, 64.83, 0.00 +111, -36.14, 89.36, 0.00 +112, -39.14, 107.77, 0.00 +113, -43.76, 133.57, 0.00 +114, -46.73, 157.62, 0.00 +115, -48.66, 180.91, 0.00 +116, -49.42, 202.21, 0.00 +117, -50.43, 226.88, 0.00 +118, -50.47, 249.70, 0.00 +119, -50.38, 274.24, 0.00 +120, -49.39, 296.15, 0.00 +121, -48.36, 320.09, 0.00 +122, -46.69, 342.06, 0.00 +123, -44.98, 365.99, 0.00 +124, -42.69, 387.65, 0.00 +125, -40.38, 411.42, 0.00 +126, -37.70, 434.15, 0.00 +127, -34.80, 457.05, 0.00 +128, -31.59, 478.33, 0.00 +129, -28.21, 499.82, 0.00 +130, -24.60, 519.72, 0.00 +131, -20.90, 540.34, 0.00 +132, -17.01, 558.78, 0.00 +133, -13.08, 578.82, 0.00 +134, -9.02, 595.64, 0.00 +135, -4.92, 613.62, 0.00 +136, -0.78, 629.39, 0.00 +137, 3.38, 645.30, 0.00 +138, 7.51, 658.91, 0.00 +139, 11.63, 673.17, 0.00 +140, 15.67, 685.03, 0.00 +141, 19.64, 696.34, 0.00 +142, 23.51, 705.94, 0.00 +143, 27.29, 715.50, 0.00 +144, 30.93, 723.09, 0.00 +145, 34.51, 731.63, 0.00 +146, 37.87, 737.15, 0.00 +147, 41.12, 742.64, 0.00 +148, 44.13, 745.57, 0.00 +149, 47.11, 749.74, 0.00 +150, 49.67, 749.17, 0.00 +151, 52.81, 758.54, 0.00 +152, 56.11, 770.82, 0.00 +153, 31.65, 417.42, 0.00 +154, 3.15, 40.06, 0.00 +155, 10.66, 130.75, 0.00 +156, 12.98, 154.17, 0.00 +157, 9.56, 110.13, 0.00 +158, 8.57, 96.03, 0.00 +159, 7.81, 85.17, 0.00 +160, 7.42, 78.98, 0.00 +161, 6.93, 72.03, 0.00 +162, 6.41, 65.19, 0.00 +163, 5.87, 58.43, 0.00 +164, 5.27, 51.40, 0.00 +165, 4.67, 44.62, 0.00 +166, 3.99, 37.44, 0.00 +167, 3.31, 30.56, 0.00 +168, 2.58, 23.38, 0.00 +169, 1.85, 16.52, 0.00 +170, 1.09, 9.54, 0.00 +171, 0.38, 3.32, 0.00 +172, -0.36, -3.08, 0.00 +173, -1.06, -8.86, 0.00 +174, -1.80, -14.86, 0.00 +175, -2.49, -20.35, 0.00 +176, -3.20, -25.78, 0.00 +177, -3.83, -30.43, 0.00 +178, -4.46, -35.04, 0.00 +179, -5.01, -38.95, 0.00 +180, -5.56, -42.75, 0.00 +181, -6.03, -45.86, 0.00 +182, -6.49, -48.84, 0.00 +183, -6.85, -51.00, 0.00 +184, -7.19, -53.04, 0.00 +185, -7.40, -54.18, 0.00 +186, -7.60, -55.14, 0.00 +187, -7.66, -55.16, 0.00 +188, -7.69, -54.99, 0.00 +189, -7.63, -54.19, 0.00 +190, -7.48, -52.85, 0.00 +191, -7.21, -50.64, 0.00 +192, -6.86, -47.97, 0.00 +193, -6.39, -44.48, 0.00 +194, -5.85, -40.57, 0.00 +195, -5.16, -35.70, 0.00 +196, -4.39, -30.33, 0.00 +197, -3.53, -24.31, 0.00 +198, -2.53, -17.43, 0.00 diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 59caea21e66d..ca83cca21ef4 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -48,7 +48,7 @@ def main(): thermalbath.cfg_dir = "nonequilibrium/thermalbath/finitechemistry" thermalbath.cfg_file = "thermalbath.cfg" thermalbath.test_iter = 10 - thermalbath.test_vals = [0.945997, 0.945997, -12.018025, -12.217291, -32.000000, 10.013239] + thermalbath.test_vals = [0.945997, 0.945997, -11.897761, -11.867806, -32.000000, 10.013239] test_list.append(thermalbath) # Adiabatic frozen thermal bath @@ -56,7 +56,7 @@ def main(): thermalbath_frozen.cfg_dir = "nonequilibrium/thermalbath/frozen" thermalbath_frozen.cfg_file = "thermalbath_frozen.cfg" thermalbath_frozen.test_iter = 10 - thermalbath_frozen.test_vals = [-32.000000, -32.000000, -12.018022, -11.978730, -32.000000, 10.013545] + thermalbath_frozen.test_vals = [-32.000000, -32.000000, -11.810719, -11.867806, -32.000000, 10.013545] test_list.append(thermalbath_frozen) # Inviscid single wedge, implicit @@ -64,7 +64,7 @@ def main(): invwedge.cfg_dir = "nonequilibrium/invwedge" invwedge.cfg_file = "invwedge_ausm.cfg" invwedge.test_iter = 10 - invwedge.test_vals = [-1.073699, -1.598462, -18.299911, -18.627322, -18.573334, 2.241760, 1.868575, 5.286072, 0.843741] + invwedge.test_vals = [-1.073693, -1.598456, -18.298997, -18.626405, -18.572419, 2.241766, 1.868557, 5.286079, 0.843747] invwedge.test_vals_aarch64 = [-1.073699, -1.598462, -18.299723, -18.627132, -18.573146, 2.241760, 1.868575, 5.286072, 0.843741] test_list.append(invwedge) @@ -73,7 +73,7 @@ def main(): visc_cone.cfg_dir = "nonequilibrium/visc_wedge" visc_cone.cfg_file = "axi_visccone.cfg" visc_cone.test_iter = 10 - visc_cone.test_vals = [-5.215239, -5.739373, -20.560910, -20.517094, -20.406632, 1.262779, -3.205484, -0.015695, 0.093205, 32641.000000] + visc_cone.test_vals = [-5.215230, -5.739367, -20.560781, -20.516922, -20.406516, 1.262782, -3.205476, -0.015696, 0.093206, 32641] visc_cone.test_vals_aarch64 = [-5.215250, -5.739384, -20.560917, -20.517096, -20.406630, 1.262772, -3.205492, -0.015695, 0.093205, 32641.000000] test_list.append(visc_cone) @@ -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.012574, -7.691705, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.012556, -7.696221, -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) @@ -283,7 +283,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-12.037386, -16.384158, 1.080346, 0.018385, 20.000000, -3.455861, 20.000000, -4.641245, 0.000000] + turb_naca0012_sa.test_vals = [-12.037240, -16.384159, 1.080346, 0.018385, 20, -3.455187, 20, -4.641267, 0] turb_naca0012_sa.test_vals_aarch64 = [-12.037297, -16.384158, 1.080346, 0.018385, 20.000000, -3.455886, 20.000000, -4.641247, 0.000000] turb_naca0012_sa.timeout = 3200 test_list.append(turb_naca0012_sa) @@ -293,7 +293,7 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.094423, -15.251083, -5.906366, 1.070413, 0.015775, -3.178803, 0.000000] + turb_naca0012_sst.test_vals = [-12.094475, -15.251083, -5.906366, 1.070413, 0.015775, -3.178930, 0] turb_naca0012_sst.test_vals_aarch64 = [-12.076068, -15.246740, -5.861280, 1.070036, 0.015841, -3.297854, 0.000000] turb_naca0012_sst.timeout = 3200 test_list.append(turb_naca0012_sst) @@ -312,7 +312,7 @@ def main(): turb_naca0012_sst_sust_restart.cfg_dir = "rans/naca0012" turb_naca0012_sst_sust_restart.cfg_file = "turb_NACA0012_sst_sust.cfg" turb_naca0012_sst_sust_restart.test_iter = 10 - turb_naca0012_sst_sust_restart.test_vals = [-12.080463, -14.837169, -5.733461, 1.000893, 0.019109, -2.634206] + turb_naca0012_sst_sust_restart.test_vals = [-12.080392, -14.837169, -5.733461, 1.000893, 0.019109, -2.634226] turb_naca0012_sst_sust_restart.test_vals_aarch64 = [-12.074189, -14.836725, -5.732398, 1.000050, 0.019144, -3.315560] turb_naca0012_sst_sust_restart.timeout = 3200 test_list.append(turb_naca0012_sst_sust_restart) @@ -344,7 +344,7 @@ def main(): axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.067967, -7.554256, -8.815999, -3.734660, 0.000000] + axi_rans_air_nozzle_restart.test_vals = [-12.067609, -7.525629, -8.817136, -3.735731, 0] axi_rans_air_nozzle_restart.test_vals_aarch64 = [-14.143715, -9.170705, -10.848554, -5.776746, 0.000000] axi_rans_air_nozzle_restart.tol = 0.0001 test_list.append(axi_rans_air_nozzle_restart) @@ -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 = [-3.991840, -3.514388, -0.030614, 0.085106] + inc_nozzle.test_vals = [-3.936023, -3.470470, -0.012281, 0.120981] test_list.append(inc_nozzle) ############################# @@ -686,7 +686,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.985495, 1.342937, 0.597198, 0.017227] + turb_naca0012_1c.test_vals = [-4.979967, 1.343850, 0.597508, 0.017311] turb_naca0012_1c.test_vals_aarch64 = [-4.992791, 1.342873, 0.557941, 0.003269] test_list.append(turb_naca0012_1c) @@ -695,7 +695,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.482890, 1.261919, 0.441153, -0.029540] + turb_naca0012_2c.test_vals = [-5.482898, 1.261918, 0.440874, -0.029636] test_list.append(turb_naca0012_2c) # NACA0012 3c @@ -711,7 +711,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.127664, 1.284882, 0.779857, 0.086313] + turb_naca0012_p1c1.test_vals = [-5.127708, 1.284871, 0.779462, 0.086168] turb_naca0012_p1c1.test_vals_aarch64 = [-5.119942, 1.283920, 0.486264, -0.021518] test_list.append(turb_naca0012_p1c1) @@ -720,7 +720,7 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.554000, 1.234649, 0.503815, -0.016267] + turb_naca0012_p1c2.test_vals = [-5.554059, 1.235065, 0.521498, -0.004382] test_list.append(turb_naca0012_p1c2) ###################################### @@ -945,7 +945,7 @@ def main(): uniform_flow.cfg_dir = "sliding_interface/uniform_flow" uniform_flow.cfg_file = "uniform_NN.cfg" uniform_flow.test_iter = 2 - uniform_flow.test_vals = [2.000000, 0.000000, -0.230641, -13.245776] + uniform_flow.test_vals = [2.000000, 0.000000, -0.230641, -13.250662] uniform_flow.test_vals_aarch64 = [2.000000, 0.000000, -0.230641, -13.249000] uniform_flow.tol = 0.000001 uniform_flow.unsteady = True @@ -968,7 +968,7 @@ def main(): channel_3D.cfg_dir = "sliding_interface/channel_3D" channel_3D.cfg_file = "channel_3D_WA.cfg" channel_3D.test_iter = 1 - channel_3D.test_vals = [1.000000, 0.000000, 0.611989, 0.798999, 0.702438] + channel_3D.test_vals = [1.000000, 0.000000, 0.611998, 0.798899, 0.702676] channel_3D.test_vals_aarch64 = [1.000000, 0.000000, 0.611996, 0.798988, 0.702357] channel_3D.unsteady = True channel_3D.multizone = True @@ -1049,7 +1049,7 @@ def main(): statbeam3d.cfg_dir = "fea_fsi/StatBeam_3d" statbeam3d.cfg_file = "configBeam_3d.cfg" statbeam3d.test_iter = 0 - statbeam3d.test_vals = [-6.168640, -5.939035, -6.071159, 110190] + statbeam3d.test_vals = [-6.175086, -5.939313, -6.084188, 110190] statbeam3d.test_vals_aarch64 = [-6.166287, -5.938291, -6.069768, 110190] #last 4 columns test_list.append(statbeam3d) @@ -1058,7 +1058,7 @@ def main(): knowlesbeam.cfg_dir = "fea_fsi/MixElemsKnowles" knowlesbeam.cfg_file = "config.cfg" knowlesbeam.test_iter = 0 - knowlesbeam.test_vals = [-14.513598, -13.577350, -28.126416, 0.445030, 9.730600] + knowlesbeam.test_vals = [-14.472698, -13.540078, -28.049079, 0.445030, 9.730600] knowlesbeam.test_vals_aarch64 = [-14.475326, -13.54641, -28.057487, 0.44503, 9.7306] #last 5 columns knowlesbeam.tol = 0.0001 test_list.append(knowlesbeam) @@ -1566,7 +1566,7 @@ def main(): pywrapper_turb_naca0012_sst.cfg_dir = "rans/naca0012" pywrapper_turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" pywrapper_turb_naca0012_sst.test_iter = 10 - pywrapper_turb_naca0012_sst.test_vals = [-12.094423, -15.251083, -5.906366, 1.070413, 0.015775, -3.178803, 0.000000] + pywrapper_turb_naca0012_sst.test_vals = [-12.094475, -15.251083, -5.906366, 1.070413, 0.015775, -3.178930, 0] pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.076068, -15.246740, -5.861280, 1.070036, 0.015841, -3.297854, 0.000000] pywrapper_turb_naca0012_sst.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_turb_naca0012_sst.timeout = 3200 diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 1feaa7cfa105..13b7984ab1d7 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -180,7 +180,7 @@ def main(): discadj_fea.cfg_dir = "disc_adj_fea" discadj_fea.cfg_file = "configAD_fem.cfg" discadj_fea.test_iter = 4 - discadj_fea.test_vals = [-2.849844, -3.238713, -0.000364, -8.708700] + discadj_fea.test_vals = [-2.849719, -3.238637, -0.000364, -8.708700] discadj_fea.test_vals_aarch64 = [-2.849588, -3.238523, -0.000364, -8.708700] discadj_fea.tol = 0.00007 test_list.append(discadj_fea) @@ -206,7 +206,7 @@ def main(): discadj_fsi.cfg_dir = "disc_adj_fsi" discadj_fsi.cfg_file = "config.cfg" discadj_fsi.test_iter = 6 - discadj_fsi.test_vals = [6, -8.928820, -10.067497, 3.1052e-11, -1.7613e-06] + discadj_fsi.test_vals = [6, -8.929655, -10.097091, 3.0939e-11, -1.7573e-06] discadj_fsi.test_vals_aarch64 = [6, -8.928820, -10.067497, 3.0979e-11, -1.7585e-06] test_list.append(discadj_fsi) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index 9b275dd808de..cf0968e2a9de 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -237,7 +237,7 @@ def main(): tutorial_trans_flatplate_T3A.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A" tutorial_trans_flatplate_T3A.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3A.test_iter = 20 - tutorial_trans_flatplate_T3A.test_vals = [-5.790137, -2.054834, -3.894661, -0.255074, -1.747145, 5.119341, -3.493237, 0.393262] + tutorial_trans_flatplate_T3A.test_vals = [-5.790137, -2.054834, -3.894661, -0.255074, -1.747007, 5.119341, -3.493237, 0.393262] tutorial_trans_flatplate_T3A.test_vals_aarch64 = [-5.808996, -2.070606, -3.969765, -0.277943, -1.953289, 1.708472, -3.514943, 0.357411] tutorial_trans_flatplate_T3A.no_restart = True test_list.append(tutorial_trans_flatplate_T3A) @@ -247,7 +247,7 @@ def main(): tutorial_trans_flatplate_T3Am.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A-" tutorial_trans_flatplate_T3Am.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3Am.test_iter = 20 - tutorial_trans_flatplate_T3Am.test_vals = [-5.590359, -1.700867, -3.099309, -0.105449, -3.750523, 3.287643, -2.394576, 1.119623] + tutorial_trans_flatplate_T3Am.test_vals = [-5.591088, -1.700867, -3.100341, -0.106090, -3.750523, 3.287643, -2.394576, 1.119623] tutorial_trans_flatplate_T3Am.test_vals_aarch64 = [-5.540938, -1.681627, -2.878831, -0.058224, -3.695533, 3.413628, -2.385345, 1.103633] tutorial_trans_flatplate_T3Am.no_restart = True test_list.append(tutorial_trans_flatplate_T3Am) @@ -302,7 +302,7 @@ def main(): tutorial_unst_naca0012.cfg_dir = "../Tutorials/compressible_flow/Unsteady_NACA0012" tutorial_unst_naca0012.cfg_file = "unsteady_naca0012.cfg" tutorial_unst_naca0012.test_iter = 520 - tutorial_unst_naca0012.test_vals = [520, 0, -5.298821, 0, 0.269405, 0.724098, 0.002630, 0.015827] + tutorial_unst_naca0012.test_vals = [520, 0, -5.293168, 0, 0.301651, 0.772998, 0.002171, 0.012763] tutorial_unst_naca0012.test_vals_aarch64 = [520, 0, -5.292359, 0, 0.284720, 0.766329, 0.000954, 0.007565] tutorial_unst_naca0012.unsteady = True test_list.append(tutorial_unst_naca0012) @@ -354,7 +354,7 @@ def main(): pywrapper_psi.command = TestCase.Command("mpirun -np 2", "python", "run.py") test_list.append(pywrapper_psi) - # custom source: including source term for enthalpy equations + # custom source: including source term for enthalpy equations pywrapper_psi_hl = TestCase('psi_enthalpy') pywrapper_psi_hl.cfg_dir = "../Tutorials/multiphysics/TFC_python/enthalpy" pywrapper_psi_hl.cfg_file = "psi.cfg" @@ -363,7 +363,7 @@ def main(): pywrapper_psi_hl.command = TestCase.Command("mpirun -np 2", "python", "run.py") test_list.append(pywrapper_psi_hl) - # custom source: including custom BC and source term + # custom source: including custom BC and source term pywrapper_psi_quench = TestCase('psi_quench') pywrapper_psi_quench.cfg_dir = "../Tutorials/multiphysics/TFC_python/quench" pywrapper_psi_quench.cfg_file = "psi.cfg" diff --git a/TestCases/vandv.py b/TestCases/vandv.py index a361b083a180..d207912bbfa9 100644 --- a/TestCases/vandv.py +++ b/TestCases/vandv.py @@ -53,7 +53,7 @@ def main(): flatplate_sst1994m.cfg_dir = "vandv/rans/flatplate" flatplate_sst1994m.cfg_file = "turb_flatplate_sst.cfg" flatplate_sst1994m.test_iter = 5 - flatplate_sst1994m.test_vals = [-13.041770, -10.137183, -10.939993, -7.992281, -10.323862, -4.732832, 0.002801] + flatplate_sst1994m.test_vals = [-13.040613, -10.136941, -10.940824, -7.982363, -10.323879, -4.732619, 0.002801] flatplate_sst1994m.test_vals_aarch64 = [-13.021715, -9.534786, -10.401912, -7.501836, -9.750800, -4.850665, 0.002807] test_list.append(flatplate_sst1994m) @@ -62,7 +62,7 @@ def main(): bump_sst1994m.cfg_dir = "vandv/rans/bump_in_channel" bump_sst1994m.cfg_file = "turb_bump_sst.cfg" bump_sst1994m.test_iter = 5 - bump_sst1994m.test_vals = [-13.025922, -11.014048, -10.634022, -7.540700, -11.769195, -6.978039, 0.004931] + bump_sst1994m.test_vals = [-11.928363, -10.095978, -9.513649, -6.445700, -11.773659, -6.990340, 0.004931] bump_sst1994m.test_vals_aarch64 = [-13.042689, -10.812982, -10.604523, -7.655547, -10.816257, -5.308083, 0.004911] test_list.append(bump_sst1994m) @@ -89,7 +89,7 @@ def main(): dsma661_sa.cfg_dir = "vandv/rans/dsma661" dsma661_sa.cfg_file = "dsma661_sa_config.cfg" dsma661_sa.test_iter = 5 - dsma661_sa.test_vals = [-11.230903, -8.242025, -9.022553, -5.871551, -10.737683, 0.155687, 0.024232] + dsma661_sa.test_vals = [-11.230865, -8.242970, -8.982056, -5.877960, -10.737687, 0.155687, 0.024232] dsma661_sa.test_vals_aarch64 = [-11.293183, -8.241775, -9.083761, -6.011398, -10.737680, 0.155687, 0.024232] test_list.append(dsma661_sa) @@ -98,7 +98,7 @@ def main(): dsma661_sst.cfg_dir = "vandv/rans/dsma661" dsma661_sst.cfg_file = "dsma661_sst_config.cfg" dsma661_sst.test_iter = 5 - dsma661_sst.test_vals = [-11.017795, -8.156464, -9.007731, -5.893887, -10.650405, -7.860166, 0.155882, 0.023344] + dsma661_sst.test_vals = [-11.017110, -8.156868, -9.048400, -5.895204, -10.649930, -7.839740, 0.155882, 0.023344] dsma661_sst.test_vals_aarch64 = [-10.977195, -8.403731, -8.747068, -5.808899, -10.522786, -7.369851, 0.155875, 0.023353] test_list.append(dsma661_sst) diff --git a/meson.build b/meson.build index 16edb96eba74..5a46b12431f5 100644 --- a/meson.build +++ b/meson.build @@ -27,10 +27,8 @@ su2_deps = [declare_dependency(include_directories: 'externals/CLI11')] default_warning_flags = [] if build_machine.system() != 'windows' - if meson.get_compiler('cpp').get_id() != 'intel' - default_warning_flags += ['-Wno-empty-body'] - endif - desired_warnings = ['-Wno-ignored-qualifiers', + desired_warnings = ['-Wno-empty-body', + '-Wno-ignored-qualifiers', '-Wno-unused-parameter', '-Wno-deprecated-declarations', '-Wno-error=cast-function-type', @@ -55,6 +53,15 @@ if build_machine.system() != 'windows' endif endif +if get_option('cpu-arch') != '' + su2_cpp_args += ['-march=' + get_option('cpu-arch')] +endif + +# Fast math to allow pow(x, 2) -> x * x. +if meson.get_compiler('cpp').has_argument('-fno-finite-math-only') + su2_cpp_args += ['-ffast-math', '-fno-finite-math-only'] +endif + # Handle assertions: default is b_ndebug=true (assertions disabled) # but for debug builds, we want to enable assertions if get_option('buildtype') == 'debug' @@ -306,6 +313,11 @@ if get_option('enable-coolprop') if build_machine.cpu_family() == 'x86' or build_machine.cpu_family() == 'x86_64' cmake = import('cmake') cmake_opts = cmake.subproject_options() + if get_option('cpu-arch') != '' + cmake_opts.add_cmake_defines({ + 'CMAKE_CXX_FLAGS': '-march=' + get_option('cpu-arch') + }) + endif cmake_opts.set_override_option('warning_level', '0') cmake_opts.add_cmake_defines({ 'COOLPROP_STATIC_LIBRARY': true, diff --git a/meson_options.txt b/meson_options.txt index 66cd441cccd6..f460f6b1e139 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,11 +1,12 @@ -option('with-mpi', type : 'feature', value : 'auto', description: 'enable MPI support') -option('with-omp', type : 'boolean', value : false, description: 'enable OpenMP support') +option('with-mpi', type : 'feature', value : 'auto', description: 'enable MPI support') +option('with-omp', type : 'boolean', value : false, description: 'enable OpenMP support') +option('cpu-arch', type : 'string', value : 'native', description: 'CPU architecture optimization, important for vectorization') option('enable-tecio', type : 'boolean', value : true, description: 'enable TECIO support') -option('enable-cgns', type : 'boolean', value : true, description: 'enable CGNS support') -option('enable-autodiff', type : 'boolean', value : false, description: 'enable AD (reverse) support') -option('enable-directdiff', type : 'boolean', value : false, description: 'enable AD (forward) support') -option('enable-pywrapper', type : 'boolean', value : false, description: 'enable Python wrapper support') -option('enable-normal', type : 'boolean', value : true, description: 'enable normal build') +option('enable-cgns', type : 'boolean', value : true, description: 'enable CGNS support') +option('enable-autodiff', type : 'boolean', value : false, description: 'enable AD (reverse) support') +option('enable-directdiff', type : 'boolean', value : false, description: 'enable AD (forward) support') +option('enable-pywrapper', type : 'boolean', value : false, description: 'enable Python wrapper support') +option('enable-normal', type : 'boolean', value : true, description: 'enable normal build') option('enable-mkl', type : 'boolean', value : false, description: 'enable Intel-MKL support') option('mkl_root', type : 'string', value : '/opt/intel/mkl', description: 'root of Intel-MKL installation (only for non-intel compilers)') option('enable-openblas', type : 'boolean', value : false, description: 'enable BLAS and LAPACK support via OpenBLAS') @@ -16,9 +17,9 @@ option('custom-mpi', type : 'boolean', value : false, description: 'enable MPI option('enable-tests', type : 'boolean', value : false, description: 'compile Unit Tests') option('enable-mixedprec', type : 'boolean', value : false, description: 'use single precision floating point arithmetic for sparse algebra') option('extra-deps', type : 'string', value : '', description: 'comma-separated list of extra (custom) dependencies to add for compilation') -option('enable-mpp', type : 'boolean', value : false, description: 'enable Mutation++ support') +option('enable-mpp', type : 'boolean', value : false, description: 'enable Mutation++ support') option('install-mpp', type : 'boolean', value : false, description: 'install Mutation++ in the directory defined with --prefix') -option('enable-coolprop', type : 'boolean', value : false, description: 'enable CoolProp support') +option('enable-coolprop', type : 'boolean', value : false, description: 'enable CoolProp support') option('enable-mlpcpp', type : 'boolean', value : false, description: 'enable MLPCpp support') option('enable-gprof', type : 'boolean', value : false, description: 'enable profiling through gprof') option('opdi-backend', type : 'combo', choices : ['auto', 'macro', 'ompt'], value : 'auto', description: 'OpDiLib backend choice') From 62b5aa838d7a96a879669d0a98344f51ef1f8425 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Tue, 7 Apr 2026 14:41:15 -0700 Subject: [PATCH 209/229] 7.2.0 --- meson_scripts/init.py | 2 +- subprojects/CoolProp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meson_scripts/init.py b/meson_scripts/init.py index 8f54fd3b9594..858456015f13 100755 --- a/meson_scripts/init.py +++ b/meson_scripts/init.py @@ -68,7 +68,7 @@ def init_submodules( github_repo_ninja = "https://github.com/ninja-build/ninja" sha_version_mpp = "5ff579f43781cae07411e5ab46291c9971536be6" github_repo_mpp = "https://github.com/mutationpp/Mutationpp" - sha_version_coolprop = "bafdea1f39ee873a6bb9833e3a21fe41f90b85e8" + sha_version_coolprop = "98b3523d5daa98454618d381d2ae53f7471d216b" github_repo_coolprop = "https://github.com/CoolProp/CoolProp" sha_version_mel = "46205ab019e5224559091375a6d71aabae6bc5b9" github_repo_mel = "https://github.com/pcarruscag/MEL" diff --git a/subprojects/CoolProp b/subprojects/CoolProp index bafdea1f39ee..98b3523d5daa 160000 --- a/subprojects/CoolProp +++ b/subprojects/CoolProp @@ -1 +1 @@ -Subproject commit bafdea1f39ee873a6bb9833e3a21fe41f90b85e8 +Subproject commit 98b3523d5daa98454618d381d2ae53f7471d216b From 5f80d7db61d9fdb245ae08a355e3242498c16244 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Tue, 7 Apr 2026 15:48:11 -0700 Subject: [PATCH 210/229] weird update --- TestCases/parallel_regression.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index f55b4a1e15e4..2925725d1eb1 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -1322,7 +1322,7 @@ def main(): nonlinear_plane_stress.cfg_dir = "fea_fsi/VonMissesVerif" nonlinear_plane_stress.cfg_file = "nonlinear_plane_stress_2d.cfg" nonlinear_plane_stress.test_iter = 19 - nonlinear_plane_stress.test_vals = [-7.432129, -3.354513, -13.982310, 162480, 43, -4.072960] + nonlinear_plane_stress.test_vals = [-7.433449, -3.355607, -13.983863, 162480, 43, -4.070373] test_list.append(nonlinear_plane_stress) # Dynamic beam, 2d From 83175fcf4f37bc6769629a92af9601d1324e5f42 Mon Sep 17 00:00:00 2001 From: Nijso Date: Fri, 10 Apr 2026 21:13:57 +0200 Subject: [PATCH 211/229] Optimization of multigrid settings (#2772) --- Common/include/CConfig.hpp | 59 +- Common/include/geometry/CGeometry.hpp | 13 +- .../include/geometry/CMultiGridGeometry.hpp | 19 +- Common/include/geometry/CPhysicalGeometry.hpp | 13 - Common/include/linear_algebra/CSysSolve.hpp | 2 +- Common/include/option_structure.hpp | 31 +- Common/src/CConfig.cpp | 177 ++---- Common/src/geometry/CGeometry.cpp | 324 ++++++++++ Common/src/geometry/CMultiGridGeometry.cpp | 265 ++++++++- Common/src/geometry/CPhysicalGeometry.cpp | 386 ------------ Common/src/linear_algebra/CSysSolve.cpp | 45 +- .../integration/CMultiGridIntegration.hpp | 67 ++- .../integration/ComputeLinSysResRMS.hpp | 63 ++ SU2_CFD/src/drivers/CDriver.cpp | 5 - SU2_CFD/src/integration/CIntegration.cpp | 15 +- .../src/integration/CMultiGridIntegration.cpp | 562 +++++++++++++----- SU2_CFD/src/solvers/CIncNSSolver.cpp | 2 - SU2_CFD/src/solvers/CSpeciesSolver.cpp | 2 +- SU2_CFD/src/solvers/CTurbSASolver.cpp | 2 +- SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 2 +- SU2_CFD/src/solvers/CTurbSolver.cpp | 30 + SU2_CFD/src/variables/CAdjEulerVariable.cpp | 2 +- SU2_CFD/src/variables/CFlowVariable.cpp | 2 +- SU2_CFD/src/variables/CHeatVariable.cpp | 2 +- .../cont_adj_euler/naca0012/inv_NACA0012.cfg | 12 +- .../naca0012/of_grad_cd_disc.dat.ref | 76 +-- .../naca0012/of_grad_directdiff.dat.ref | 6 +- .../cont_adj_euler/wedge/inv_wedge_ROE.cfg | 16 +- .../wedge/inv_wedge_ROE_multiobj.cfg | 16 +- .../wedge/of_grad_combo.dat.ref | 8 +- .../cylinder/lam_cylinder.cfg | 20 +- .../cont_adj_rans/oneram6/turb_ONERAM6.cfg | 16 +- .../cont_adj_rans/rae2822/turb_SA_RAE2822.cfg | 14 +- .../disc_adj_euler/arina2k/Arina2KRS.cfg | 16 +- .../inv_NACA0012_pitching.cfg | 16 +- .../inv_NACA0012_pitching_deform.cfg | 20 +- .../inv_NACA0012_pitching_deform_ad.cfg | 20 +- .../transonic_stator_2D/transonic_stator.cfg | 17 +- TestCases/euler/CRM/inv_CRM_JST.cfg | 16 +- TestCases/euler/biparabolic/BIPARABOLIC.cfg | 10 +- TestCases/euler/channel/inv_channel.cfg | 14 +- TestCases/euler/naca0012/inv_NACA0012_Roe.cfg | 6 +- TestCases/euler/wedge/inv_wedge_HLLC.cfg | 18 +- TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg | 12 +- TestCases/fixed_cl/naca0012/inv_NACA0012.cfg | 14 +- .../naca0012/inv_NACA0012_ContAdj.cfg | 14 +- TestCases/gust/inv_gust_NACA0012.cfg | 10 +- TestCases/hybrid_regression.py | 54 +- TestCases/hybrid_regression_AD.py | 6 +- .../incomp_euler/naca0012/incomp_NACA0012.cfg | 16 +- TestCases/incomp_euler/nozzle/inv_nozzle.cfg | 14 +- .../cylinder/incomp_cylinder.cfg | 10 +- .../incomp_navierstokes/sphere/sphere.cfg | 18 +- TestCases/moving_wall/cavity/lam_cavity.cfg | 18 +- .../spinning_cylinder/spinning_cylinder.cfg | 12 +- .../naca0012/inv_NACA0012_ffd.cfg | 18 +- .../multiple_ffd/naca0012/of_grad_cd.dat.ref | 4 +- .../naca0012/of_grad_directdiff.dat.ref | 4 +- .../cylinder/cylinder_lowmach.cfg | 16 +- .../navierstokes/cylinder/lam_cylinder.cfg | 16 +- .../navierstokes/flatplate/lam_flatplate.cfg | 12 +- .../navierstokes/naca0012/lam_NACA0012.cfg | 18 +- .../poiseuille/profile_poiseuille.cfg | 14 +- TestCases/nicf/LS89/turb_SA_PR.cfg | 14 +- TestCases/nicf/edge/edge_PPR.cfg | 10 +- TestCases/nicf/edge/edge_VW.cfg | 14 +- .../inv_wedge_ROE_2surf_1obj.cfg | 16 +- .../inv_wedge_ROE_multiobj.cfg | 16 +- .../inv_wedge_ROE_multiobj_1surf.cfg | 16 +- .../inv_wedge_ROE_multiobj_combo.cfg | 16 +- .../pitching_oneram6/pitching_ONERAM6.cfg | 16 +- .../steady_naca0012/inv_NACA0012_adv.cfg | 16 +- .../steady_naca0012/inv_NACA0012_basic.cfg | 16 +- .../steady_oneram6/turb_ONERAM6.cfg | 16 +- .../steady_rae2822/turb_SA_RAE2822.cfg | 16 +- TestCases/parallel_regression.py | 88 +-- TestCases/parallel_regression_AD.py | 8 +- .../py_wrapper/custom_inlet/lam_flatplate.cfg | 11 +- .../rotating_cylinder/spinning_cylinder.cfg | 12 +- .../translating_NACA0012/config.cfg | 20 +- .../translating_NACA0012/forces_0.csv.ref | 400 ++++++------- .../updated_moving_frame_NACA12/config.cfg | 10 +- .../forces_0.csv.ref | 400 ++++++------- .../rans/flatplate/turb_SA_flatplate.cfg | 12 +- .../flatplate/turb_SA_flatplate_species.cfg | 21 +- .../rans/flatplate/turb_SST_flatplate.cfg | 10 +- .../turb_NACA0012_sst_multigrid_restart.cfg | 14 +- TestCases/rans/rae2822/turb_SA_RAE2822.cfg | 16 +- TestCases/rans/rae2822/turb_SST_RAE2822.cfg | 16 +- .../rans/rae2822/turb_SST_SUST_RAE2822.cfg | 16 +- TestCases/rotating/naca0012/rot_NACA0012.cfg | 12 +- TestCases/serial_regression.py | 89 ++- TestCases/serial_regression_AD.py | 8 +- .../sliding_interface/bars_SST_2D/bars.cfg | 15 +- .../sa/rae2822/turb_SA_BSL_RAE2822.cfg | 16 +- .../sa/rae2822/turb_SA_COMP_EDW_RAE2822.cfg | 16 +- .../sa/rae2822/turb_SA_COMP_RAE2822.cfg | 16 +- .../sa/rae2822/turb_SA_EDW_RAE2822.cfg | 16 +- .../sa/rae2822/turb_SA_QCR_RAE2822.cfg | 18 +- TestCases/tutorials.py | 10 +- .../plunging_naca0012/plunging_NACA0012.cfg | 14 +- config_template.cfg | 33 +- 102 files changed, 2395 insertions(+), 1831 deletions(-) create mode 100644 SU2_CFD/include/integration/ComputeLinSysResRMS.hpp diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 7405a527eac7..8d5e4f377899 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -472,7 +472,7 @@ class CConfig { string CustomObjFunc; /*!< \brief User-defined objective function. */ string CustomOutputs; /*!< \brief User-defined functions for outputs. */ unsigned short nDV, /*!< \brief Number of design variables. */ - nObj, nObjW; /*! \brief Number of objective functions. */ + nObj, nObjW; /*!< \brief Number of objective functions. */ unsigned short* nDV_Value; /*!< \brief Number of values for each design variable (might be different than 1 if we allow arbitrary movement). */ unsigned short nFFDBox; /*!< \brief Number of ffd boxes. */ unsigned short nTurboMachineryKind; /*!< \brief Number turbomachinery types specified. */ @@ -489,20 +489,14 @@ class CConfig { string *FFDTag; /*!< \brief Parameters of the design variable. */ string *TagFFDBox; /*!< \brief Tag of the FFD box. */ unsigned short GeometryMode; /*!< \brief Geometry mode (analysis or gradient computation). */ - unsigned short MGCycle; /*!< \brief Kind of multigrid cycle. */ unsigned short FinestMesh; /*!< \brief Finest mesh for the full multigrid approach. */ unsigned short nFFD_Fix_IDir, nFFD_Fix_JDir, nFFD_Fix_KDir; /*!< \brief Number of planes fixed in the FFD. */ - unsigned short nMG_PreSmooth, /*!< \brief Number of MG pre-smooth parameters found in config file. */ - nMG_PostSmooth, /*!< \brief Number of MG post-smooth parameters found in config file. */ - nMG_CorrecSmooth; /*!< \brief Number of MG correct-smooth parameters found in config file. */ short *FFD_Fix_IDir, *FFD_Fix_JDir, *FFD_Fix_KDir; /*!< \brief Exact sections. */ - unsigned short *MG_PreSmooth, /*!< \brief Multigrid Pre smoothing. */ - *MG_PostSmooth, /*!< \brief Multigrid Post smoothing. */ - *MG_CorrecSmooth; /*!< \brief Multigrid Jacobi implicit smoothing of the correction. */ su2double *LocationStations; /*!< \brief Airfoil sections in wing slicing subroutine. */ + MG_CYCLE Kind_MGCycle; /*!< \brief Kind of multigrid cycle. */ ENUM_MULTIZONE Kind_MZSolver; /*!< \brief Kind of multizone solver. */ INC_DENSITYMODEL Kind_DensityModel; /*!< \brief Kind of the density model for incompressible flows. */ CHT_COUPLING Kind_CHT_Coupling; /*!< \brief Kind of coupling method used at CHT interfaces. */ @@ -1132,6 +1126,10 @@ class CConfig { unsigned long rampMUSCLCoeff[3]; /*!< \brief ramp MUSCL value coefficients for the COption class. */ } RampMUSCLParam; su2double rampMUSCLValue; /*!< \brief Current value of the MUSCL ramp */ + CMGOptions MGOptions; + /*--- 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}; 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. */ @@ -2908,7 +2906,7 @@ class CConfig { */ void SetMGLevels(unsigned short val_nMGLevels) { nMGLevels = val_nMGLevels; - if (MGCycle == FULLMG_CYCLE) { + if (Kind_MGCycle == MG_CYCLE::FULL) { SetFinestMesh(val_nMGLevels); } } @@ -2925,7 +2923,7 @@ class CConfig { * \note This variable is used in a recursive way to perform the different kind of cycles * \return 0 or 1 depending of we are dealing with a V or W cycle. */ - unsigned short GetMGCycle(void) const { return MGCycle; } + MG_CYCLE GetMGCycle(void) const { return Kind_MGCycle; } /*! * \brief Get the king of evaluation in the geometrical module. @@ -3847,34 +3845,9 @@ class CConfig { su2double GetNacelleLocation(unsigned short val_index) const { return nacelle_location[val_index]; } /*! - * \brief Get the number of pre-smoothings in a multigrid strategy. - * \param[in] val_mesh - Index of the grid. - * \return Number of smoothing iterations. + * \brief Get the multigrid options struct. */ - unsigned short GetMG_PreSmooth(unsigned short val_mesh) const { - if (nMG_PreSmooth == 0) return 1; - return MG_PreSmooth[val_mesh]; - } - - /*! - * \brief Get the number of post-smoothings in a multigrid strategy. - * \param[in] val_mesh - Index of the grid. - * \return Number of smoothing iterations. - */ - unsigned short GetMG_PostSmooth(unsigned short val_mesh) const { - if (nMG_PostSmooth == 0) return 0; - return MG_PostSmooth[val_mesh]; - } - - /*! - * \brief Get the number of implicit Jacobi smoothings of the correction in a multigrid strategy. - * \param[in] val_mesh - Index of the grid. - * \return Number of implicit smoothing iterations. - */ - unsigned short GetMG_CorrecSmooth(unsigned short val_mesh) const { - if (nMG_CorrecSmooth == 0) return 0; - return MG_CorrecSmooth[val_mesh]; - } + const CMGOptions& GetMGOptions() const { return MGOptions; } /*! * \brief plane of the FFD (I axis) that should be fixed. @@ -6833,12 +6806,24 @@ class CConfig { */ su2double GetDamp_Res_Restric(void) const { return Damp_Res_Restric; } + /*! + * \brief Set the damping factor for the residual restriction (used by adaptive MG damping). + * \param[in] val - New damping factor value. + */ + void SetDamp_Res_Restric(su2double val) { Damp_Res_Restric = val; } + /*! * \brief Value of the damping factor for the correction prolongation. * \return Value of the damping factor. */ su2double GetDamp_Correc_Prolong(void) const { return Damp_Correc_Prolong; } + /*! + * \brief Set the damping factor for the correction prolongation (used by adaptive MG damping). + * \param[in] val - New damping factor value. + */ + void SetDamp_Correc_Prolong(su2double val) { Damp_Correc_Prolong = val; } + /*! * \brief Value of the position of the Near Field (y coordinate for 2D, and z coordinate for 3D). * \return Value of the Near Field position. diff --git a/Common/include/geometry/CGeometry.hpp b/Common/include/geometry/CGeometry.hpp index 563674def668..62600b089588 100644 --- a/Common/include/geometry/CGeometry.hpp +++ b/Common/include/geometry/CGeometry.hpp @@ -811,10 +811,13 @@ class CGeometry { inline virtual void MatchActuator_Disk(const CConfig* config) {} /*! - * \brief A virtual member. + * \brief Match periodic boundary points using coordinate-based matching. + * \details Gathers coordinates from all ranks via MPI, applies the rotation/translation + * for the periodic pair, and finds the nearest neighbor. Works on both fine and coarse grids. * \param[in] config - Definition of the particular problem. + * \param[in] val_periodic - Index of the periodic marker pair. */ - inline virtual void MatchPeriodic(const CConfig* config, unsigned short val_periodic) {} + virtual void MatchPeriodic(const CConfig* config, unsigned short val_periodic); /*! * \brief A virtual member. @@ -1609,12 +1612,6 @@ class CGeometry { return AverageGridVel[val_marker][val_span]; } - /*! - * \brief A virtual member. - * \param config - Config - */ - inline virtual void Check_Periodicity(CConfig* config) {} - /*! * \brief Get the value of the customized temperature at a specified vertex on a specified marker. * \param[in] val_marker - Marker value diff --git a/Common/include/geometry/CMultiGridGeometry.hpp b/Common/include/geometry/CMultiGridGeometry.hpp index f6036be227f8..f155ec7c2c88 100644 --- a/Common/include/geometry/CMultiGridGeometry.hpp +++ b/Common/include/geometry/CMultiGridGeometry.hpp @@ -29,6 +29,8 @@ #include "CGeometry.hpp" +class CMultiGridQueue; + /*! * \class CMultiGridGeometry * \brief Class for defining the multigrid geometry, the main dedicated part is the @@ -75,6 +77,16 @@ class CMultiGridGeometry final : public CGeometry { */ su2double ComputeLocalCurvature(const CGeometry* fine_grid, unsigned long iPoint, unsigned short iMarker) const; + /*! + * \brief Agglomerate high-aspect-ratio interior cells along implicit lines from wall vertices. + * \param[in,out] Index_CoarseCV - Current coarse CV index, incremented as new coarse CVs are created. + * \param[in] fine_grid - Fine grid geometry. + * \param[in] config - Configuration. + * \param[in,out] MGQueue_InnerCV - Queue for domain agglomeration; processed points are removed. + */ + void AgglomerateImplicitLines(unsigned long& Index_CoarseCV, const CGeometry* fine_grid, const CConfig* config, + CMultiGridQueue& MGQueue_InnerCV); + public: /*--- This is to suppress Woverloaded-virtual, omitting it has no negative impact. ---*/ using CGeometry::SetBoundControlVolume; @@ -143,13 +155,6 @@ class CMultiGridGeometry final : public CGeometry { */ void MatchActuator_Disk(const CConfig* config) override; - /*! - * \brief Mach the periodic boundary conditions. - * \param[in] config - Definition of the particular problem. - * \param[in] val_periodic - Index of the first periodic face in a pair. - */ - void MatchPeriodic(const CConfig* config, unsigned short val_periodic) override; - /*! * \brief Set a representative wall normal heat flux of the agglomerated control volume on a particular boundary * marker. \param[in] fine_grid - Geometrical definition of the problem. \param[in] val_marker - Index of the boundary diff --git a/Common/include/geometry/CPhysicalGeometry.hpp b/Common/include/geometry/CPhysicalGeometry.hpp index be0863584d48..89176d996033 100644 --- a/Common/include/geometry/CPhysicalGeometry.hpp +++ b/Common/include/geometry/CPhysicalGeometry.hpp @@ -438,13 +438,6 @@ class CPhysicalGeometry final : public CGeometry { */ void MatchActuator_Disk(const CConfig* config) override; - /*! - * \brief Mach the periodic boundary conditions. - * \param[in] config - Definition of the particular problem. - * \param[in] val_periodic - Index of the first periodic face in a pair. - */ - void MatchPeriodic(const CConfig* config, unsigned short val_periodic) override; - /*! * \brief Set boundary vertex structure of the control volume. * \param[in] config - Definition of the particular problem. @@ -779,12 +772,6 @@ class CPhysicalGeometry final : public CGeometry { Sensitivity(iPoint, iDim) = val; } - /*! - * \brief Check the mesh for periodicity and deactivate multigrid if periodicity is found. - * \param[in] config - Definition of the particular problem. - */ - void Check_Periodicity(CConfig* config) override; - /*! * \brief Compute an ADT including the coordinates of all viscous markers * \param[in] config - Definition of the particular problem. diff --git a/Common/include/linear_algebra/CSysSolve.hpp b/Common/include/linear_algebra/CSysSolve.hpp index 611223b657b9..11623f7bdb26 100644 --- a/Common/include/linear_algebra/CSysSolve.hpp +++ b/Common/include/linear_algebra/CSysSolve.hpp @@ -196,7 +196,7 @@ class CSysSolve { * vector is kept in nrm0 and updated after operating with each vector * */ - void ModGramSchmidt(bool shared_hsbg, int i, su2matrix& Hsbg, std::vector& w) const; + bool ModGramSchmidt(bool shared_hsbg, int i, su2matrix& Hsbg, std::vector& w) const; /*! * \brief writes header information for a CSysSolve residual history diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index 1361a12072da..b3d2478cf5f2 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -1101,6 +1101,21 @@ inline SST_ParsedOptions ParseSSTOptions(const SST_OPTIONS *SST_Options, unsigne return SSTParsedOptions; } +/*! + * \brief Structure containing multigrid options. + */ +struct CMGOptions { + su2double MG_Smooth_Res_Threshold{0.0}; /*!< \brief RMS reduction threshold for MG smoothing early exit. */ + su2double MG_Smooth_Coeff{0.0}; /*!< \brief Jacobi smoother coefficient for coarse-grid correction. */ + unsigned long MG_Min_MeshSize{0}; /*!< \brief Minimum CVs on coarsest MG level. */ + 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. */ + 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. */ + bool MG_Implicit_Lines{false}; /*!< \brief Enable implicit-lines agglomeration from walls. */ +}; + /*! * \brief SST rough-wall boundary conditions Options */ @@ -2281,17 +2296,17 @@ static const MapType Jump_Map = { /*! * \brief Type of multigrid cycle */ -enum MG_CYCLE { - V_CYCLE = 0, /*!< \brief V cycle. */ - W_CYCLE = 1, /*!< \brief W cycle. */ - FULLMG_CYCLE = 2 /*!< \brief FullMG cycle. */ +enum class MG_CYCLE { + V, /*!< \brief V-cycle multigrid solver. */ + W, /*!< \brief W-cycle multigrid solver. */ + FULL, /*!< \brief Full multigrid (FMG) solver. */ }; + static const MapType MG_Cycle_Map = { - MakePair("V_CYCLE", V_CYCLE) - MakePair("W_CYCLE", W_CYCLE) - MakePair("FULLMG_CYCLE", FULLMG_CYCLE) + MakePair("V_CYCLE", MG_CYCLE::V) + MakePair("W_CYCLE", MG_CYCLE::W) + MakePair("FULLMG_CYCLE", MG_CYCLE::FULL) }; - /*! * \brief Types of design parameterizations */ diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 79fe6d6aab1e..65a84ed437d5 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -993,9 +993,6 @@ void CConfig::SetPointersNull() { TimeIntegrationADER_DG = nullptr; WeightsIntegrationADER_DG = nullptr; RK_Alpha_Step = nullptr; - MG_CorrecSmooth = nullptr; - MG_PreSmooth = nullptr; - MG_PostSmooth = nullptr; Int_Coeffs = nullptr; Kind_Inc_Inlet = nullptr; @@ -1973,17 +1970,29 @@ void CConfig::SetConfig_Options() { /*!\brief MGLEVEL\n DESCRIPTION: Multi-grid Levels. DEFAULT: 0 \ingroup Config*/ addUnsignedShortOption("MGLEVEL", nMGLevels, 0); /*!\brief MGCYCLE\n DESCRIPTION: Multi-grid cycle. OPTIONS: See \link MG_Cycle_Map \endlink. Defualt V_CYCLE \ingroup Config*/ - addEnumOption("MGCYCLE", MGCycle, MG_Cycle_Map, V_CYCLE); + addEnumOption("MGCYCLE", Kind_MGCycle, MG_Cycle_Map, MG_CYCLE::V); /*!\brief MG_PRE_SMOOTH\n DESCRIPTION: Multi-grid pre-smoothing level \ingroup Config*/ - addUShortListOption("MG_PRE_SMOOTH", nMG_PreSmooth, MG_PreSmooth); + addUShortListOption("MG_PRE_SMOOTH", nMG_PreSmooth_p, MG_PreSmooth_p); /*!\brief MG_POST_SMOOTH\n DESCRIPTION: Multi-grid post-smoothing level \ingroup Config*/ - addUShortListOption("MG_POST_SMOOTH", nMG_PostSmooth, MG_PostSmooth); + addUShortListOption("MG_POST_SMOOTH", nMG_PostSmooth_p, MG_PostSmooth_p); /*!\brief MG_CORRECTION_SMOOTH\n DESCRIPTION: Jacobi implicit smoothing of the correction \ingroup Config*/ - addUShortListOption("MG_CORRECTION_SMOOTH", nMG_CorrecSmooth, MG_CorrecSmooth); + addUShortListOption("MG_CORRECTION_SMOOTH", nMG_CorrecSmooth_p, MG_CorrecSmooth_p); /*!\brief MG_DAMP_RESTRICTION\n DESCRIPTION: Damping factor for the residual restriction. DEFAULT: 0.75 \ingroup Config*/ - addDoubleOption("MG_DAMP_RESTRICTION", Damp_Res_Restric, 0.75); + addDoubleOption("MG_DAMP_RESTRICTION", Damp_Res_Restric, 0.5); /*!\brief MG_DAMP_PROLONGATION\n DESCRIPTION: Damping factor for the correction prolongation. DEFAULT 0.75 \ingroup Config*/ - addDoubleOption("MG_DAMP_PROLONGATION", Damp_Correc_Prolong, 0.75); + addDoubleOption("MG_DAMP_PROLONGATION", Damp_Correc_Prolong, 0.5); + /*!\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); + /*!\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_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); /*!\par CONFIG_CATEGORY: Spatial Discretization \ingroup Config*/ /*--- Options related to the spatial discretization ---*/ @@ -4692,7 +4701,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i } FinestMesh = MESH_0; - if (MGCycle == FULLMG_CYCLE) FinestMesh = nMGLevels; + if (Kind_MGCycle == MG_CYCLE::FULL) FinestMesh = nMGLevels; if ((Kind_Solver == MAIN_SOLVER::NAVIER_STOKES) && (Kind_Turb_Model != TURB_MODEL::NONE)) @@ -4713,128 +4722,36 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i Kappa_2nd_AdjFlow = jst_adj_coeff[0]; Kappa_4th_AdjFlow = jst_adj_coeff[1]; - /*--- Make the MG_PreSmooth, MG_PostSmooth, and MG_CorrecSmooth - arrays consistent with nMGLevels ---*/ + /*--- Fill MG smooth vectors to size nMGLevels+1. + Use parsed values (truncating or extending by repeat) or defaults if not set. ---*/ - auto * tmp_smooth = new unsigned short[nMGLevels+1]; - - if ((nMG_PreSmooth != nMGLevels+1) && (nMG_PreSmooth != 0)) { - if (nMG_PreSmooth > nMGLevels+1) { - - /*--- Truncate by removing unnecessary elements at the end ---*/ - - for (unsigned int i = 0; i <= nMGLevels; i++) - tmp_smooth[i] = MG_PreSmooth[i]; - delete [] MG_PreSmooth; - MG_PreSmooth=nullptr; - } - else { - - /*--- Add additional elements equal to last element ---*/ - - for (unsigned int i = 0; i < nMG_PreSmooth; i++) - tmp_smooth[i] = MG_PreSmooth[i]; - for (unsigned int i = nMG_PreSmooth; i <= nMGLevels; i++) - tmp_smooth[i] = MG_PreSmooth[nMG_PreSmooth-1]; - delete [] MG_PreSmooth; - MG_PreSmooth=nullptr; - } - - nMG_PreSmooth = nMGLevels+1; - MG_PreSmooth = new unsigned short[nMG_PreSmooth]; - for (unsigned int i = 0; i < nMG_PreSmooth; i++) - MG_PreSmooth[i] = tmp_smooth[i]; - } - if ((nMGLevels != 0) && (nMG_PreSmooth == 0)) { - delete [] MG_PreSmooth; - nMG_PreSmooth = nMGLevels+1; - MG_PreSmooth = new unsigned short[nMG_PreSmooth]; - for (unsigned int i = 0; i < nMG_PreSmooth; i++) - MG_PreSmooth[i] = i+1; - } - - if ((nMG_PostSmooth != nMGLevels+1) && (nMG_PostSmooth != 0)) { - if (nMG_PostSmooth > nMGLevels+1) { - - /*--- Truncate by removing unnecessary elements at the end ---*/ - - for (unsigned int i = 0; i <= nMGLevels; i++) - tmp_smooth[i] = MG_PostSmooth[i]; - delete [] MG_PostSmooth; - MG_PostSmooth=nullptr; - } - else { - - /*--- Add additional elements equal to last element ---*/ - - for (unsigned int i = 0; i < nMG_PostSmooth; i++) - tmp_smooth[i] = MG_PostSmooth[i]; - for (unsigned int i = nMG_PostSmooth; i <= nMGLevels; i++) - tmp_smooth[i] = MG_PostSmooth[nMG_PostSmooth-1]; - delete [] MG_PostSmooth; - MG_PostSmooth=nullptr; - } - - nMG_PostSmooth = nMGLevels+1; - MG_PostSmooth = new unsigned short[nMG_PostSmooth]; - for (unsigned int i = 0; i < nMG_PostSmooth; i++) - MG_PostSmooth[i] = tmp_smooth[i]; - - } - - if ((nMGLevels != 0) && (nMG_PostSmooth == 0)) { - delete [] MG_PostSmooth; - nMG_PostSmooth = nMGLevels+1; - MG_PostSmooth = new unsigned short[nMG_PostSmooth]; - for (unsigned int i = 0; i < nMG_PostSmooth; i++) - MG_PostSmooth[i] = 0; - } - - if ((nMG_CorrecSmooth != nMGLevels+1) && (nMG_CorrecSmooth != 0)) { - if (nMG_CorrecSmooth > nMGLevels+1) { - - /*--- Truncate by removing unnecessary elements at the end ---*/ - - for (unsigned int i = 0; i <= nMGLevels; i++) - tmp_smooth[i] = MG_CorrecSmooth[i]; - delete [] MG_CorrecSmooth; - MG_CorrecSmooth = nullptr; - } - else { - - /*--- Add additional elements equal to last element ---*/ - - for (unsigned int i = 0; i < nMG_CorrecSmooth; i++) - tmp_smooth[i] = MG_CorrecSmooth[i]; - for (unsigned int i = nMG_CorrecSmooth; i <= nMGLevels; i++) - tmp_smooth[i] = MG_CorrecSmooth[nMG_CorrecSmooth-1]; - delete [] MG_CorrecSmooth; - MG_CorrecSmooth = nullptr; - } - nMG_CorrecSmooth = nMGLevels+1; - MG_CorrecSmooth = new unsigned short[nMG_CorrecSmooth]; - for (unsigned int i = 0; i < nMG_CorrecSmooth; i++) - MG_CorrecSmooth[i] = tmp_smooth[i]; - } + { + auto fillSmooth = [&](unsigned short n, unsigned short* buf, + std::vector& vec, auto getDefault) { + const unsigned short nNew = nMGLevels + 1; + vec.resize(nNew); + if (n != 0) + for (unsigned short i = 0; i < nNew; i++) vec[i] = (i < n) ? buf[i] : buf[n - 1]; + else + for (unsigned short i = 0; i < nNew; i++) vec[i] = getDefault(i); + }; - if ((nMGLevels != 0) && (nMG_CorrecSmooth == 0)) { - delete [] MG_CorrecSmooth; - nMG_CorrecSmooth = nMGLevels+1; - MG_CorrecSmooth = new unsigned short[nMG_CorrecSmooth]; - for (unsigned int i = 0; i < nMG_CorrecSmooth; i++) - MG_CorrecSmooth[i] = 0; + fillSmooth(nMG_PreSmooth_p, MG_PreSmooth_p, MGOptions.MG_PreSmooth, + [](unsigned short i) { return static_cast(i + 1); }); + fillSmooth(nMG_PostSmooth_p, MG_PostSmooth_p, MGOptions.MG_PostSmooth, + [](unsigned short ) { return (unsigned short)0; }); + fillSmooth(nMG_CorrecSmooth_p, MG_CorrecSmooth_p, MGOptions.MG_CorrecSmooth, + [](unsigned short ) { return (unsigned short)0; }); } /*--- Override MG Smooth parameters ---*/ - if (nMG_PreSmooth != 0) MG_PreSmooth[MESH_0] = 1; - if (nMG_PostSmooth != 0) { - MG_PostSmooth[MESH_0] = 0; - MG_PostSmooth[nMGLevels] = 0; - } - if (nMG_CorrecSmooth != 0) MG_CorrecSmooth[nMGLevels] = 0; + MGOptions.MG_PreSmooth[MESH_0] = 1; + MGOptions.MG_PostSmooth[MESH_0] = 0; + MGOptions.MG_PostSmooth[nMGLevels] = 0; + MGOptions.MG_CorrecSmooth[nMGLevels] = 0; - if (Restart) MGCycle = V_CYCLE; + if (Restart) Kind_MGCycle = MG_CYCLE::V; if (ContinuousAdjoint) { if (Kind_Solver == MAIN_SOLVER::EULER) Kind_Solver = MAIN_SOLVER::ADJ_EULER; @@ -5154,8 +5071,6 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i } #endif - delete [] tmp_smooth; - /*--- Make sure that implicit time integration is disabled for the FEM fluid solver (numerics). ---*/ if ((Kind_Solver == MAIN_SOLVER::FEM_EULER) || @@ -7466,9 +7381,9 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { if (nMGLevels !=0) { - if (MGCycle == V_CYCLE) cout << "V Multigrid Cycle, with " << nMGLevels << " multigrid levels."<< endl; - if (MGCycle == W_CYCLE) cout << "W Multigrid Cycle, with " << nMGLevels << " multigrid levels."<< endl; - if (MGCycle == FULLMG_CYCLE) cout << "Full Multigrid Cycle, with " << nMGLevels << " multigrid levels."<< endl; + if (Kind_MGCycle == MG_CYCLE::V) cout << "V Multigrid Cycle, with " << nMGLevels << " multigrid levels."<< endl; + if (Kind_MGCycle == MG_CYCLE::W) cout << "W Multigrid Cycle, with " << nMGLevels << " multigrid levels."<< endl; + if (Kind_MGCycle == MG_CYCLE::FULL) cout << "Full Multigrid Cycle, with " << nMGLevels << " multigrid levels."<< endl; cout << "Damping factor for the residual restriction: " << Damp_Res_Restric <<"."<< endl; cout << "Damping factor for the correction prolongation: " << Damp_Correc_Prolong <<"."<< endl; @@ -7492,7 +7407,7 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { MGTable.SetAlign(PrintingToolbox::CTablePrinter::RIGHT); MGTable.PrintHeader(); for (unsigned short iLevel = 0; iLevel < nMGLevels+1; iLevel++) { - MGTable << iLevel << MG_PreSmooth[iLevel] << MG_PostSmooth[iLevel] << MG_CorrecSmooth[iLevel]; + MGTable << iLevel << MGOptions.MG_PreSmooth[iLevel] << MGOptions.MG_PostSmooth[iLevel] << MGOptions.MG_CorrecSmooth[iLevel]; } MGTable.PrintFooter(); } diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index 770c68f6066a..2b8dfe3c6361 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -768,6 +768,330 @@ void CGeometry::CompleteComms(CGeometry* geometry, const CConfig* config, MPI_QU #endif } +void CGeometry::MatchPeriodic(const CConfig* config, unsigned short val_periodic) { + unsigned short iMarker, iDim, jMarker, pMarker = 0; + unsigned short iPeriodic, nPeriodic; + + unsigned long iVertex, iPoint, iPointGlobal, index; + unsigned long jVertex, jVertex_, jPoint, jPointGlobal; + unsigned long pVertex = 0, pPoint = 0, pPointGlobal = 0; + unsigned long nLocalVertex_Periodic = 0, MaxLocalVertex_Periodic = 0; + unsigned long nPointMatch = 0; + + int iProcessor, pProcessor = 0, nProcessor = size; + + bool isBadMatch = false; + + string Marker_Tag; + + su2double Coord_j[3], dist, mindist, maxdist_local, maxdist_global; + const su2double *center, *angles, *trans; + su2double translation[3] = {0.0, 0.0, 0.0}, dx, dy, dz; + su2double rotMatrix[3][3] = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}; + su2double rotCoord[3] = {0.0, 0.0, 0.0}; + + bool pointOnAxis = false; + bool chkSamePoint = false; + su2double distToAxis = 0.0; + + /*--- Tolerance for distance-based match to report warning. ---*/ + + su2double epsilon = 1e-6; + + /*--- Evaluate the number of periodic boundary conditions ---*/ + + nPeriodic = config->GetnMarker_Periodic(); + + /*--- Send an initial message to the console. ---*/ + + if (rank == MASTER_NODE) { + cout << "Matching the periodic boundary points for marker pair "; + cout << val_periodic << "." << endl; + } + + /*--- Compute the total number of vertices that sit on a periodic + boundary on our local rank. We only include our "owned" nodes. ---*/ + + nLocalVertex_Periodic = 0; + for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY) { + iPeriodic = config->GetMarker_All_PerBound(iMarker); + if ((iPeriodic == val_periodic) || (iPeriodic == val_periodic + nPeriodic / 2)) { + for (iVertex = 0; iVertex < GetnVertex(iMarker); iVertex++) { + iPoint = vertex[iMarker][iVertex]->GetNode(); + if (nodes->GetDomain(iPoint)) nLocalVertex_Periodic++; + } + } + } + } + + /*--- Communicate our local periodic point count globally + and receive the counts of periodic points from all other ranks.---*/ + + auto* Buffer_Send_nVertex = new unsigned long[1]; + auto* Buffer_Recv_nVertex = new unsigned long[nProcessor]; + + Buffer_Send_nVertex[0] = nLocalVertex_Periodic; + + /*--- Copy our own count in serial or use collective comms with MPI. ---*/ + + SU2_MPI::Allreduce(&nLocalVertex_Periodic, &MaxLocalVertex_Periodic, 1, MPI_UNSIGNED_LONG, MPI_MAX, + SU2_MPI::GetComm()); + SU2_MPI::Allgather(Buffer_Send_nVertex, 1, MPI_UNSIGNED_LONG, Buffer_Recv_nVertex, 1, MPI_UNSIGNED_LONG, + SU2_MPI::GetComm()); + + /*--- Prepare buffers to send the information for each + periodic point to all ranks so that we can match pairs. ---*/ + + auto* Buffer_Send_Coord = new su2double[MaxLocalVertex_Periodic * nDim]; + auto* Buffer_Send_Point = new unsigned long[MaxLocalVertex_Periodic]; + auto* Buffer_Send_GlobalIndex = new unsigned long[MaxLocalVertex_Periodic]; + auto* Buffer_Send_Vertex = new unsigned long[MaxLocalVertex_Periodic]; + auto* Buffer_Send_Marker = new unsigned long[MaxLocalVertex_Periodic]; + + auto* Buffer_Recv_Coord = new su2double[nProcessor * MaxLocalVertex_Periodic * nDim]; + auto* Buffer_Recv_Point = new unsigned long[nProcessor * MaxLocalVertex_Periodic]; + auto* Buffer_Recv_GlobalIndex = new unsigned long[nProcessor * MaxLocalVertex_Periodic]; + auto* Buffer_Recv_Vertex = new unsigned long[nProcessor * MaxLocalVertex_Periodic]; + auto* Buffer_Recv_Marker = new unsigned long[nProcessor * MaxLocalVertex_Periodic]; + + unsigned long nBuffer_Coord = MaxLocalVertex_Periodic * nDim; + unsigned long nBuffer_Point = MaxLocalVertex_Periodic; + unsigned long nBuffer_GlobalIndex = MaxLocalVertex_Periodic; + unsigned long nBuffer_Vertex = MaxLocalVertex_Periodic; + unsigned long nBuffer_Marker = MaxLocalVertex_Periodic; + + for (iVertex = 0; iVertex < MaxLocalVertex_Periodic; iVertex++) { + Buffer_Send_Point[iVertex] = 0; + Buffer_Send_GlobalIndex[iVertex] = 0; + Buffer_Send_Vertex[iVertex] = 0; + Buffer_Send_Marker[iVertex] = 0; + for (iDim = 0; iDim < nDim; iDim++) Buffer_Send_Coord[iVertex * nDim + iDim] = 0.0; + } + + /*--- Store the local index, global index, local boundary index, + marker index, and point coordinates in the buffers for sending. + Note again that this is only for the current pair of periodic + markers and for only the "owned" points on each rank. ---*/ + + nLocalVertex_Periodic = 0; + for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY) { + iPeriodic = config->GetMarker_All_PerBound(iMarker); + if ((iPeriodic == val_periodic) || (iPeriodic == val_periodic + nPeriodic / 2)) { + for (iVertex = 0; iVertex < GetnVertex(iMarker); iVertex++) { + iPoint = vertex[iMarker][iVertex]->GetNode(); + iPointGlobal = nodes->GetGlobalIndex(iPoint); + if (nodes->GetDomain(iPoint)) { + Buffer_Send_Point[nLocalVertex_Periodic] = iPoint; + Buffer_Send_GlobalIndex[nLocalVertex_Periodic] = iPointGlobal; + Buffer_Send_Vertex[nLocalVertex_Periodic] = iVertex; + Buffer_Send_Marker[nLocalVertex_Periodic] = iMarker; + for (iDim = 0; iDim < nDim; iDim++) + Buffer_Send_Coord[nLocalVertex_Periodic * nDim + iDim] = nodes->GetCoord(iPoint, iDim); + nLocalVertex_Periodic++; + } + } + } + } + } + + /*--- Gather the data for all points on each rank with MPI. ---*/ + + SU2_MPI::Allgather(Buffer_Send_Coord, nBuffer_Coord, MPI_DOUBLE, Buffer_Recv_Coord, nBuffer_Coord, MPI_DOUBLE, + SU2_MPI::GetComm()); + SU2_MPI::Allgather(Buffer_Send_Point, nBuffer_Point, MPI_UNSIGNED_LONG, Buffer_Recv_Point, nBuffer_Point, + MPI_UNSIGNED_LONG, SU2_MPI::GetComm()); + SU2_MPI::Allgather(Buffer_Send_GlobalIndex, nBuffer_GlobalIndex, MPI_UNSIGNED_LONG, Buffer_Recv_GlobalIndex, + nBuffer_GlobalIndex, MPI_UNSIGNED_LONG, SU2_MPI::GetComm()); + SU2_MPI::Allgather(Buffer_Send_Vertex, nBuffer_Vertex, MPI_UNSIGNED_LONG, Buffer_Recv_Vertex, nBuffer_Vertex, + MPI_UNSIGNED_LONG, SU2_MPI::GetComm()); + SU2_MPI::Allgather(Buffer_Send_Marker, nBuffer_Marker, MPI_UNSIGNED_LONG, Buffer_Recv_Marker, nBuffer_Marker, + MPI_UNSIGNED_LONG, SU2_MPI::GetComm()); + + /*--- Now that all ranks have the data for all periodic points for + this pair of periodic markers, we match the individual points + based on the translation / rotation specified for the marker pair. ---*/ + + maxdist_local = 0.0; + for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY) { + iPeriodic = config->GetMarker_All_PerBound(iMarker); + if ((iPeriodic == val_periodic) || (iPeriodic == val_periodic + nPeriodic / 2)) { + /*--- Retrieve the supplied periodic information. ---*/ + + Marker_Tag = config->GetMarker_All_TagBound(iMarker); + center = config->GetPeriodicRotCenter(Marker_Tag); + angles = config->GetPeriodicRotAngles(Marker_Tag); + trans = config->GetPeriodicTranslation(Marker_Tag); + + /*--- Store (center+trans) as it is constant and will be added. ---*/ + + translation[0] = center[0] + trans[0]; + translation[1] = center[1] + trans[1]; + translation[2] = center[2] + trans[2]; + + /*--- Store angles separately for clarity. Compute sines/cosines. ---*/ + + const su2double Theta = angles[0]; + const su2double Phi = angles[1]; + const su2double Psi = angles[2]; + const su2double cosTheta = cos(Theta), sinTheta = sin(Theta); + const su2double cosPhi = cos(Phi), sinPhi = sin(Phi); + const su2double cosPsi = cos(Psi), sinPsi = sin(Psi); + + /*--- Compute the rotation matrix. Note that the implicit + ordering is rotation about the x-axis, y-axis, then z-axis. ---*/ + + rotMatrix[0][0] = cosPhi * cosPsi; + rotMatrix[1][0] = cosPhi * sinPsi; + rotMatrix[2][0] = -sinPhi; + + rotMatrix[0][1] = sinTheta * sinPhi * cosPsi - cosTheta * sinPsi; + rotMatrix[1][1] = sinTheta * sinPhi * sinPsi + cosTheta * cosPsi; + rotMatrix[2][1] = sinTheta * cosPhi; + + rotMatrix[0][2] = cosTheta * sinPhi * cosPsi + sinTheta * sinPsi; + rotMatrix[1][2] = cosTheta * sinPhi * sinPsi - sinTheta * cosPsi; + rotMatrix[2][2] = cosTheta * cosPhi; + + /*--- Loop over each point on the periodic marker that this rank + holds locally and find the matching point from the donor marker. ---*/ + + for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { + iPoint = vertex[iMarker][iVertex]->GetNode(); + iPointGlobal = nodes->GetGlobalIndex(iPoint); + + if (nodes->GetDomain(iPoint)) { + /*--- Coordinates of the current boundary point ---*/ + + const su2double* Coord_i = nodes->GetCoord(iPoint); + + /*--- Get the position vector from rotation center to point. ---*/ + + dx = Coord_i[0] - center[0]; + dy = Coord_i[1] - center[1]; + dz = su2double(0.0); + if (nDim == 3) dz = Coord_i[2] - center[2]; + + /*--- Compute transformed point coordinates. ---*/ + + rotCoord[0] = rotMatrix[0][0] * dx + rotMatrix[0][1] * dy + rotMatrix[0][2] * dz + translation[0]; + rotCoord[1] = rotMatrix[1][0] * dx + rotMatrix[1][1] * dy + rotMatrix[1][2] * dz + translation[1]; + rotCoord[2] = rotMatrix[2][0] * dx + rotMatrix[2][1] * dy + rotMatrix[2][2] * dz + translation[2]; + + /*--- Check if the point lies on the axis of rotation. ---*/ + + pointOnAxis = false; + distToAxis = 0.0; + for (iDim = 0; iDim < nDim; iDim++) + distToAxis += (rotCoord[iDim] - Coord_i[iDim]) * (rotCoord[iDim] - Coord_i[iDim]); + distToAxis = sqrt(distToAxis); + + if (distToAxis < epsilon) pointOnAxis = true; + + /*--- Initialize the distance to a large value. ---*/ + + mindist = 1E6; + pProcessor = 0; + pPoint = 0; + + /*--- Loop over all of the periodic data that was gathered from + all ranks in order to find the matching periodic point. ---*/ + + for (iProcessor = 0; iProcessor < nProcessor; iProcessor++) + for (jVertex = 0; jVertex < Buffer_Recv_nVertex[iProcessor]; jVertex++) { + index = iProcessor * MaxLocalVertex_Periodic + jVertex; + + jPoint = Buffer_Recv_Point[index]; + jPointGlobal = Buffer_Recv_GlobalIndex[index]; + jVertex_ = Buffer_Recv_Vertex[index]; + jMarker = Buffer_Recv_Marker[index]; + + /*--- Avoid matching the point to itself. Use local point + index + processor rather than global index, because global + indices are not set on coarse multigrid levels. ---*/ + + if ((iProcessor != rank || jPoint != iPoint) || (pointOnAxis)) { + dist = 0.0; + for (iDim = 0; iDim < nDim; iDim++) { + Coord_j[iDim] = Buffer_Recv_Coord[index * nDim + iDim]; + dist += pow(Coord_j[iDim] - rotCoord[iDim], 2.0); + } + dist = sqrt(dist); + + chkSamePoint = (((dist < mindist) && (iProcessor != rank)) || + ((dist < mindist) && (iProcessor == rank) && (jPoint != iPoint))); + + if (chkSamePoint || ((dist < mindist) && (pointOnAxis))) { + mindist = dist; + pProcessor = iProcessor; + pPoint = jPoint; + pPointGlobal = jPointGlobal; + pVertex = jVertex_; + pMarker = jMarker; + } + } + } + + /*--- Store the data for the best match found. ---*/ + + vertex[iMarker][iVertex]->SetDonorPoint(pPoint, pPointGlobal, pVertex, pMarker, pProcessor); + maxdist_local = max(maxdist_local, mindist); + nPointMatch++; + + if (mindist > epsilon) { + cout.precision(10); + cout << endl; + cout << " Bad match for point " << iPointGlobal << ".\tNearest"; + cout << " donor distance: " << scientific << mindist << "."; + maxdist_local = min(maxdist_local, 0.0); + isBadMatch = true; + } + } + } + } + } + } + + /*--- Communicate the final count of matched points and max distance. ---*/ + + unsigned long nPointMatch_Local = nPointMatch; + SU2_MPI::Reduce(&nPointMatch_Local, &nPointMatch, 1, MPI_UNSIGNED_LONG, MPI_SUM, MASTER_NODE, SU2_MPI::GetComm()); + SU2_MPI::Reduce(&maxdist_local, &maxdist_global, 1, MPI_DOUBLE, MPI_MAX, MASTER_NODE, SU2_MPI::GetComm()); + + if (rank == MASTER_NODE) { + if (nPointMatch > 0) { + cout << " Matched " << nPointMatch << " points with a max distance of: "; + cout << maxdist_global << "." << endl; + } else { + cout << " No matching points for periodic marker pair "; + cout << val_periodic << " in current zone." << endl; + } + + if (isBadMatch) { + cout << endl; + cout << "\n !!! Warning !!!" << endl; + cout << "Bad matches found. Computation will continue, but be cautious.\n"; + } + } + + /*--- Free local memory for communications. ---*/ + + delete[] Buffer_Send_Coord; + delete[] Buffer_Send_Point; + delete[] Buffer_Recv_Coord; + delete[] Buffer_Recv_Point; + delete[] Buffer_Send_nVertex; + delete[] Buffer_Recv_nVertex; + delete[] Buffer_Send_GlobalIndex; + delete[] Buffer_Send_Vertex; + delete[] Buffer_Send_Marker; + delete[] Buffer_Recv_GlobalIndex; + delete[] Buffer_Recv_Vertex; + delete[] Buffer_Recv_Marker; +} + void CGeometry::PreprocessPeriodicComms(CGeometry* geometry, CConfig* config) { /*--- We start with the send and receive lists already available in the form of stored periodic point-donor pairs. We will loop through diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 6887a4521559..37601860caca 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -90,6 +90,9 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un /*--- STEP 1: The first step is the boundary agglomeration. ---*/ for (auto iMarker = 0u; iMarker < fine_grid->GetnMarker(); iMarker++) { + /*--- Skip periodic boundaries: do not agglomerate on periodic markers. ---*/ + if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY) continue; + for (auto iVertex = 0ul; iVertex < fine_grid->GetnVertex(iMarker); iVertex++) { const auto iPoint = fine_grid->vertex[iMarker][iVertex]->GetNode(); @@ -308,6 +311,11 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } } + /*--- Agglomerate high-aspect-ratio interior nodes along implicit lines from walls. ---*/ + if (config->GetMGOptions().MG_Implicit_Lines) { + AgglomerateImplicitLines(Index_CoarseCV, fine_grid, config, MGQueue_InnerCV); + } + /*--- STEP 2: Agglomerate the domain points. ---*/ auto iteration = 0ul; @@ -659,10 +667,12 @@ CMultiGridGeometry::CMultiGridGeometry(CGeometry* fine_grid, CConfig* config, un } const su2double ratio = su2double(Global_nPointFine) / su2double(Global_nPointCoarse); - cout << "********** ratio = " << ratio << endl; - // lower value leads to more levels being accepted. - if (((nDim == 2) && (ratio < 1.5)) || ((nDim == 3) && (ratio < 1.5))) { + if (Global_nPointCoarse < config->GetMGOptions().MG_Min_MeshSize) { + if (rank == MASTER_NODE) + cout << "MG level " << iMesh << " has only " << Global_nPointCoarse + << " CVs (< MG_MIN_MESHSIZE=" << config->GetMGOptions().MG_Min_MeshSize << "). Reducing MG levels to " + << iMesh - 1 << "." << endl; config->SetMGLevels(iMesh - 1); } else if (rank == MASTER_NODE) { PrintingToolbox::CTablePrinter MGTable(&std::cout); @@ -985,29 +995,6 @@ void CMultiGridGeometry::MatchActuator_Disk(const CConfig* config) { } } -void CMultiGridGeometry::MatchPeriodic(const CConfig* config, unsigned short val_periodic) { - int iProcessor = rank; - - /*--- Evaluate the number of periodic boundary conditions ---*/ - - auto nPeriodic = config->GetnMarker_Periodic(); - - for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY) { - auto iPeriodic = config->GetMarker_All_PerBound(iMarker); - if ((iPeriodic == val_periodic) || (iPeriodic == val_periodic + nPeriodic / 2)) { - for (auto iVertex = 0u; iVertex < nVertex[iMarker]; iVertex++) { - auto iPoint = vertex[iMarker][iVertex]->GetNode(); - if (nodes->GetDomain(iPoint)) { - vertex[iMarker][iVertex]->SetDonorPoint(iPoint, nodes->GetGlobalIndex(iPoint), iVertex, iMarker, - iProcessor); - } - } - } - } - } -} - void CMultiGridGeometry::SetControlVolume(const CGeometry* fine_grid, unsigned short action) { BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { /*--- Compute the area of the coarse volume ---*/ @@ -1289,3 +1276,229 @@ su2double CMultiGridGeometry::ComputeLocalCurvature(const CGeometry* fine_grid, return max_angle; } + +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 cos_threshold = cos(ANGLE_THRESHOLD_DEG * PI_NUMBER / 180.0); + + const unsigned long nPointFine = fine_grid->GetnPoint(); + + /*--- Collect implicit lines starting at wall vertices. + * 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; + + for (auto iVertex = 0ul; iVertex < fine_grid->GetnVertex(iMarker); iVertex++) { + const auto iPoint = fine_grid->vertex[iMarker][iVertex]->GetNode(); + + /*--- Get vertex normal to seed the line direction ---*/ + const long ChildVertex = fine_grid->nodes->GetVertex(iPoint, iMarker); + if (ChildVertex == -1) continue; + su2double Normal[MAXNDIM] = {0.0}; + fine_grid->vertex[iMarker][ChildVertex]->GetNormal(Normal); + + /*--- Normalize the direction ---*/ + su2double prev_dir[MAXNDIM] = {0.0}; + su2double norm_prev = 0.0; + for (unsigned short d = 0; d < nDim; ++d) { + prev_dir[d] = Normal[d]; + norm_prev += Normal[d] * Normal[d]; + } + if (norm_prev <= 0.0) continue; + norm_prev = sqrt(norm_prev); + for (unsigned short d = 0; d < nDim; ++d) prev_dir[d] /= norm_prev; + + /*--- Build the implicit line by following the best-aligned interior neighbor ---*/ + vector L; + L.push_back(iPoint); + auto current = iPoint; + + while (L.size() < MAX_LINE_LENGTH) { + su2double best_dot = -2.0; + unsigned long best_neighbor = ULONG_MAX; + + for (auto jPoint : fine_grid->nodes->GetPoints(current)) { + if (jPoint == current) continue; + if (!fine_grid->nodes->GetDomain(jPoint)) continue; + if (fine_grid->nodes->GetBoundary(jPoint)) continue; + if (fine_grid->nodes->GetAgglomerate(jPoint)) continue; + + /*--- Compute normalized direction to candidate ---*/ + su2double vec[MAXNDIM] = {0.0}; + GeometryToolbox::Distance(nDim, fine_grid->nodes->GetCoord(jPoint), fine_grid->nodes->GetCoord(current), vec); + const su2double len = GeometryToolbox::Norm(nDim, vec); + if (len <= 0.0) continue; + for (unsigned short d = 0; d < nDim; ++d) vec[d] /= len; + + /*--- Alignment with previous direction ---*/ + const su2double dot = GeometryToolbox::DotProduct(nDim, vec, prev_dir); + if (dot > best_dot) { + best_dot = dot; + best_neighbor = jPoint; + } + } + + if (best_neighbor == ULONG_MAX || best_dot < cos_threshold) break; + + L.push_back(best_neighbor); + + /*--- Update direction for next step ---*/ + GeometryToolbox::Distance(nDim, fine_grid->nodes->GetCoord(best_neighbor), fine_grid->nodes->GetCoord(current), + prev_dir); + const su2double len = GeometryToolbox::Norm(nDim, prev_dir); + if (len <= 0.0) break; + for (unsigned short d = 0; d < nDim; ++d) prev_dir[d] /= len; + + current = best_neighbor; + } + + /*--- Accept only lines with at least 2 interior nodes (length >= 3 including wall) ---*/ + if (L.size() >= 3) { + lines.push_back(std::move(L)); + } + } + } + + if (lines.empty()) return; + + if (rank == MASTER_NODE) { + cout << "Implicit line agglomeration: detected " << lines.size() << " lines." << endl; + } + + /*--- Advancing-front greedy pairing with cross-line merging. + * For each pair stage k, process interior positions (1+2k, 1+2k+1). + * When two lines share the same wall-node parent CV, merge their pairs + * into a single 4-child coarse CV. Otherwise create 2-child coarse CVs. ---*/ + vector reserved(nPointFine, 0); + unsigned pair_idx = 0; + + while (true) { + bool any_work = false; + + /*--- Build map: wall parent CV -> list of line indices ---*/ + unordered_map> parent_to_lines; + parent_to_lines.reserve(lines.size()); + for (unsigned long li = 0; li < lines.size(); ++li) { + const auto& L = lines[li]; + if (L.empty()) continue; + const auto idx2 = 1 + 2 * pair_idx + 1; + if (L.size() <= idx2) continue; // no pair at this stage + const auto pW = fine_grid->nodes->GetParent_CV(L[0]); + parent_to_lines[pW].push_back(li); + } + + vector line_processed(lines.size(), 0); + + /*--- A) Cross-line merges: parents with multiple lines ---*/ + for (auto& [parent, line_ids] : parent_to_lines) { + if (line_ids.size() < 2) continue; + + for (size_t k = 0; k + 1 < line_ids.size(); k += 2) { + const auto li1 = line_ids[k]; + const auto li2 = line_ids[k + 1]; + if (line_processed[li1] || line_processed[li2]) continue; + + const auto& L1 = lines[li1]; + const auto& L2 = lines[li2]; + const auto idx1 = 1 + 2 * pair_idx; + const auto idx2 = idx1 + 1; + if (L1.size() <= idx2 || L2.size() <= idx2) continue; + + const auto a = L1[idx1], b = L1[idx2]; + const auto c = L2[idx1], d = L2[idx2]; + + /*--- Skip if any node is already claimed ---*/ + if (fine_grid->nodes->GetAgglomerate(a) || fine_grid->nodes->GetAgglomerate(b) || + fine_grid->nodes->GetAgglomerate(c) || fine_grid->nodes->GetAgglomerate(d)) + continue; + if (reserved[a] || reserved[b] || reserved[c] || reserved[d]) continue; + + /*--- Geometrical quality check ---*/ + if (!GeometricalCheck(a, fine_grid, config) || !GeometricalCheck(b, fine_grid, config) || + !GeometricalCheck(c, fine_grid, config) || !GeometricalCheck(d, fine_grid, config)) + continue; + + /*--- Guard against duplicate indices ---*/ + if (a == b || a == c || a == d || b == c || b == d || c == d) { + for (auto other_li : line_ids) line_processed[other_li] = 1; + continue; + } + + /*--- Create 4-child coarse CV ---*/ + fine_grid->nodes->SetParent_CV(a, Index_CoarseCV); + nodes->SetChildren_CV(Index_CoarseCV, 0, a); + fine_grid->nodes->SetParent_CV(b, Index_CoarseCV); + nodes->SetChildren_CV(Index_CoarseCV, 1, b); + fine_grid->nodes->SetParent_CV(c, Index_CoarseCV); + nodes->SetChildren_CV(Index_CoarseCV, 2, c); + fine_grid->nodes->SetParent_CV(d, Index_CoarseCV); + nodes->SetChildren_CV(Index_CoarseCV, 3, d); + nodes->SetnChildren_CV(Index_CoarseCV, 4); + + reserved[a] = reserved[b] = reserved[c] = reserved[d] = 1; + MGQueue_InnerCV.RemoveCV(a); + MGQueue_InnerCV.RemoveCV(b); + MGQueue_InnerCV.RemoveCV(c); + MGQueue_InnerCV.RemoveCV(d); + + Index_CoarseCV++; + line_processed[li1] = line_processed[li2] = 1; + for (auto other_li : line_ids) + if (other_li != li1 && other_li != li2) line_processed[other_li] = 1; + any_work = true; + } + } + + /*--- B) Single-line 2-child merges for remaining lines ---*/ + for (unsigned long li = 0; li < lines.size(); ++li) { + if (line_processed[li]) continue; + const auto& L = lines[li]; + const auto idx1 = 1 + 2 * pair_idx; + const auto idx2 = idx1 + 1; + if (L.size() <= idx2) continue; + + const auto a = L[idx1], b = L[idx2]; + if (fine_grid->nodes->GetAgglomerate(a) || fine_grid->nodes->GetAgglomerate(b)) continue; + if (reserved[a] || reserved[b]) continue; + if (!GeometricalCheck(a, fine_grid, config) || !GeometricalCheck(b, fine_grid, config)) continue; + + /*--- Create 2-child coarse CV ---*/ + fine_grid->nodes->SetParent_CV(a, Index_CoarseCV); + nodes->SetChildren_CV(Index_CoarseCV, 0, a); + fine_grid->nodes->SetParent_CV(b, Index_CoarseCV); + nodes->SetChildren_CV(Index_CoarseCV, 1, b); + nodes->SetnChildren_CV(Index_CoarseCV, 2); + + reserved[a] = reserved[b] = 1; + MGQueue_InnerCV.RemoveCV(a); + MGQueue_InnerCV.RemoveCV(b); + + Index_CoarseCV++; + any_work = true; + } + + pair_idx++; + if (!any_work) break; + + /*--- Check if any line still has pairs at the next stage ---*/ + bool any_more = false; + for (const auto& L : lines) { + if (L.size() > 1 + 2 * pair_idx + 1) { + any_more = true; + break; + } + } + if (!any_more) break; + } +} diff --git a/Common/src/geometry/CPhysicalGeometry.cpp b/Common/src/geometry/CPhysicalGeometry.cpp index db711b9f85a7..8ed3f5c6103e 100644 --- a/Common/src/geometry/CPhysicalGeometry.cpp +++ b/Common/src/geometry/CPhysicalGeometry.cpp @@ -6592,382 +6592,6 @@ void CPhysicalGeometry::MatchActuator_Disk(const CConfig* config) { } } -void CPhysicalGeometry::MatchPeriodic(const CConfig* config, unsigned short val_periodic) { - unsigned short iMarker, iDim, jMarker, pMarker = 0; - unsigned short iPeriodic, nPeriodic; - - unsigned long iVertex, iPoint, iPointGlobal, index; - unsigned long jVertex, jVertex_, jPoint, jPointGlobal; - unsigned long pVertex = 0, pPoint = 0, pPointGlobal = 0; - unsigned long nLocalVertex_Periodic = 0, MaxLocalVertex_Periodic = 0; - unsigned long nPointMatch = 0; - - int iProcessor, pProcessor = 0, nProcessor = size; - - bool isBadMatch = false; - - string Marker_Tag; - - su2double *Coord_i, Coord_j[3], dist, mindist, maxdist_local, maxdist_global; - const su2double *center, *angles, *trans; - su2double translation[3] = {0.0, 0.0, 0.0}, dx, dy, dz; - su2double rotMatrix[3][3] = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}; - su2double Theta, Phi, Psi, cosTheta, sinTheta, cosPhi, sinPhi, cosPsi, sinPsi; - su2double rotCoord[3] = {0.0, 0.0, 0.0}; - - bool pointOnAxis = false; - - bool chkSamePoint = false; - - su2double distToAxis = 0.0; - - /*--- Tolerance for distance-based match to report warning. ---*/ - - su2double epsilon = 1e-6; - - /*--- Evaluate the number of periodic boundary conditions ---*/ - - nPeriodic = config->GetnMarker_Periodic(); - - /*--- Send an initial message to the console. ---*/ - - if (rank == MASTER_NODE) { - cout << "Matching the periodic boundary points for marker pair "; - cout << val_periodic << "." << endl; - } - - /*--- Compute the total number of vertices that sit on a periodic - boundary on our local rank. We only include our "owned" nodes. ---*/ - - nLocalVertex_Periodic = 0; - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY) { - iPeriodic = config->GetMarker_All_PerBound(iMarker); - if ((iPeriodic == val_periodic) || (iPeriodic == val_periodic + nPeriodic / 2)) { - for (iVertex = 0; iVertex < GetnVertex(iMarker); iVertex++) { - iPoint = vertex[iMarker][iVertex]->GetNode(); - if (nodes->GetDomain(iPoint)) nLocalVertex_Periodic++; - } - } - } - } - - /*--- Communicate our local periodic point count globally - and receive the counts of periodic points from all other ranks.---*/ - - auto* Buffer_Send_nVertex = new unsigned long[1]; - auto* Buffer_Recv_nVertex = new unsigned long[nProcessor]; - - Buffer_Send_nVertex[0] = nLocalVertex_Periodic; - - /*--- Copy our own count in serial or use collective comms with MPI. ---*/ - - SU2_MPI::Allreduce(&nLocalVertex_Periodic, &MaxLocalVertex_Periodic, 1, MPI_UNSIGNED_LONG, MPI_MAX, - SU2_MPI::GetComm()); - SU2_MPI::Allgather(Buffer_Send_nVertex, 1, MPI_UNSIGNED_LONG, Buffer_Recv_nVertex, 1, MPI_UNSIGNED_LONG, - SU2_MPI::GetComm()); - - /*--- Prepare buffers to send the information for each - periodic point to all ranks so that we can match pairs. ---*/ - - auto* Buffer_Send_Coord = new su2double[MaxLocalVertex_Periodic * nDim]; - auto* Buffer_Send_Point = new unsigned long[MaxLocalVertex_Periodic]; - auto* Buffer_Send_GlobalIndex = new unsigned long[MaxLocalVertex_Periodic]; - auto* Buffer_Send_Vertex = new unsigned long[MaxLocalVertex_Periodic]; - auto* Buffer_Send_Marker = new unsigned long[MaxLocalVertex_Periodic]; - - auto* Buffer_Recv_Coord = new su2double[nProcessor * MaxLocalVertex_Periodic * nDim]; - auto* Buffer_Recv_Point = new unsigned long[nProcessor * MaxLocalVertex_Periodic]; - auto* Buffer_Recv_GlobalIndex = new unsigned long[nProcessor * MaxLocalVertex_Periodic]; - auto* Buffer_Recv_Vertex = new unsigned long[nProcessor * MaxLocalVertex_Periodic]; - auto* Buffer_Recv_Marker = new unsigned long[nProcessor * MaxLocalVertex_Periodic]; - - unsigned long nBuffer_Coord = MaxLocalVertex_Periodic * nDim; - unsigned long nBuffer_Point = MaxLocalVertex_Periodic; - unsigned long nBuffer_GlobalIndex = MaxLocalVertex_Periodic; - unsigned long nBuffer_Vertex = MaxLocalVertex_Periodic; - unsigned long nBuffer_Marker = MaxLocalVertex_Periodic; - - for (iVertex = 0; iVertex < MaxLocalVertex_Periodic; iVertex++) { - Buffer_Send_Point[iVertex] = 0; - Buffer_Send_GlobalIndex[iVertex] = 0; - Buffer_Send_Vertex[iVertex] = 0; - Buffer_Send_Marker[iVertex] = 0; - for (iDim = 0; iDim < nDim; iDim++) Buffer_Send_Coord[iVertex * nDim + iDim] = 0.0; - } - - /*--- Store the local index, global index, local boundary index, - marker index, and point coordinates in the buffers for sending. - Note again that this is only for the current pair of periodic - markers and for only the "owned" points on each rank. ---*/ - - nLocalVertex_Periodic = 0; - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY) { - iPeriodic = config->GetMarker_All_PerBound(iMarker); - if ((iPeriodic == val_periodic) || (iPeriodic == val_periodic + nPeriodic / 2)) { - for (iVertex = 0; iVertex < GetnVertex(iMarker); iVertex++) { - iPoint = vertex[iMarker][iVertex]->GetNode(); - iPointGlobal = nodes->GetGlobalIndex(iPoint); - if (nodes->GetDomain(iPoint)) { - Buffer_Send_Point[nLocalVertex_Periodic] = iPoint; - Buffer_Send_GlobalIndex[nLocalVertex_Periodic] = iPointGlobal; - Buffer_Send_Vertex[nLocalVertex_Periodic] = iVertex; - Buffer_Send_Marker[nLocalVertex_Periodic] = iMarker; - for (iDim = 0; iDim < nDim; iDim++) - Buffer_Send_Coord[nLocalVertex_Periodic * nDim + iDim] = nodes->GetCoord(iPoint, iDim); - nLocalVertex_Periodic++; - } - } - } - } - } - - /*--- Copy our own data in serial or use collective comms to gather - the data for all points on each rank with MPI. Note that, since the - periodic point count should be small relative to the volume grid - and we are only storing one periodic marker pair at a time, - repeating the data for each pair on all ranks should be manageable. ---*/ - - SU2_MPI::Allgather(Buffer_Send_Coord, nBuffer_Coord, MPI_DOUBLE, Buffer_Recv_Coord, nBuffer_Coord, MPI_DOUBLE, - SU2_MPI::GetComm()); - SU2_MPI::Allgather(Buffer_Send_Point, nBuffer_Point, MPI_UNSIGNED_LONG, Buffer_Recv_Point, nBuffer_Point, - MPI_UNSIGNED_LONG, SU2_MPI::GetComm()); - SU2_MPI::Allgather(Buffer_Send_GlobalIndex, nBuffer_GlobalIndex, MPI_UNSIGNED_LONG, Buffer_Recv_GlobalIndex, - nBuffer_GlobalIndex, MPI_UNSIGNED_LONG, SU2_MPI::GetComm()); - SU2_MPI::Allgather(Buffer_Send_Vertex, nBuffer_Vertex, MPI_UNSIGNED_LONG, Buffer_Recv_Vertex, nBuffer_Vertex, - MPI_UNSIGNED_LONG, SU2_MPI::GetComm()); - SU2_MPI::Allgather(Buffer_Send_Marker, nBuffer_Marker, MPI_UNSIGNED_LONG, Buffer_Recv_Marker, nBuffer_Marker, - MPI_UNSIGNED_LONG, SU2_MPI::GetComm()); - - /*--- Now that all ranks have the data for all periodic points for - this pair of periodic markers, we match the individual points - based on the translation / rotation specified for the marker pair. ---*/ - - maxdist_local = 0.0; - for (iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { - if (config->GetMarker_All_KindBC(iMarker) == PERIODIC_BOUNDARY) { - iPeriodic = config->GetMarker_All_PerBound(iMarker); - if ((iPeriodic == val_periodic) || (iPeriodic == val_periodic + nPeriodic / 2)) { - /*--- Retrieve the supplied periodic information. ---*/ - - Marker_Tag = config->GetMarker_All_TagBound(iMarker); - center = config->GetPeriodicRotCenter(Marker_Tag); - angles = config->GetPeriodicRotAngles(Marker_Tag); - trans = config->GetPeriodicTranslation(Marker_Tag); - - /*--- Store (center+trans) as it is constant and will be added. ---*/ - - translation[0] = center[0] + trans[0]; - translation[1] = center[1] + trans[1]; - translation[2] = center[2] + trans[2]; - - /*--- Store angles separately for clarity. Compute sines/cosines. ---*/ - - Theta = angles[0]; - Phi = angles[1]; - Psi = angles[2]; - cosTheta = cos(Theta); - cosPhi = cos(Phi); - cosPsi = cos(Psi); - sinTheta = sin(Theta); - sinPhi = sin(Phi); - sinPsi = sin(Psi); - - /*--- Compute the rotation matrix. Note that the implicit - ordering is rotation about the x-axis, y-axis, then z-axis. ---*/ - - rotMatrix[0][0] = cosPhi * cosPsi; - rotMatrix[1][0] = cosPhi * sinPsi; - rotMatrix[2][0] = -sinPhi; - - rotMatrix[0][1] = sinTheta * sinPhi * cosPsi - cosTheta * sinPsi; - rotMatrix[1][1] = sinTheta * sinPhi * sinPsi + cosTheta * cosPsi; - rotMatrix[2][1] = sinTheta * cosPhi; - - rotMatrix[0][2] = cosTheta * sinPhi * cosPsi + sinTheta * sinPsi; - rotMatrix[1][2] = cosTheta * sinPhi * sinPsi - sinTheta * cosPsi; - rotMatrix[2][2] = cosTheta * cosPhi; - - /*--- Loop over each point on the periodic marker that this rank - holds locally and find the matching point from the donor marker. ---*/ - - for (iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { - /*--- Local and global index for the owned periodic point. ---*/ - - iPoint = vertex[iMarker][iVertex]->GetNode(); - iPointGlobal = nodes->GetGlobalIndex(iPoint); - - /*--- If this is not a ghost, find the periodic match. ---*/ - - if (nodes->GetDomain(iPoint)) { - /*--- Coordinates of the current boundary point ---*/ - - Coord_i = nodes->GetCoord(iPoint); - - /*--- Get the position vector from rotation center to point. ---*/ - - dx = Coord_i[0] - center[0]; - dy = Coord_i[1] - center[1]; - if (nDim == 3) - dz = Coord_i[2] - center[2]; - else - dz = 0.0; - - /*--- Compute transformed point coordinates. ---*/ - - rotCoord[0] = (rotMatrix[0][0] * dx + rotMatrix[0][1] * dy + rotMatrix[0][2] * dz + translation[0]); - - rotCoord[1] = (rotMatrix[1][0] * dx + rotMatrix[1][1] * dy + rotMatrix[1][2] * dz + translation[1]); - - rotCoord[2] = (rotMatrix[2][0] * dx + rotMatrix[2][1] * dy + rotMatrix[2][2] * dz + translation[2]); - - /*--- Check if the point lies on the axis of rotation. If it does, - the rotated coordinate and the original coordinate are the same. ---*/ - - pointOnAxis = false; - distToAxis = 0.0; - for (iDim = 0; iDim < nDim; iDim++) - distToAxis = (rotCoord[iDim] - Coord_i[iDim]) * (rotCoord[iDim] - Coord_i[iDim]); - distToAxis = sqrt(distToAxis); - - if (distToAxis < epsilon) pointOnAxis = true; - - /*--- Our search is based on the minimum distance, so we - initialize the distance to a large value. ---*/ - - mindist = 1E6; - pProcessor = 0; - pPoint = 0; - - /*--- Loop over all of the periodic data that was gathered from - all ranks in order to find the matching periodic point. ---*/ - - for (iProcessor = 0; iProcessor < nProcessor; iProcessor++) - for (jVertex = 0; jVertex < Buffer_Recv_nVertex[iProcessor]; jVertex++) { - /*--- Store the loop index more easily. ---*/ - - index = iProcessor * MaxLocalVertex_Periodic + jVertex; - - /*--- For each candidate, we have the local and global index, - along with the boundary vertex and marker index. ---*/ - - jPoint = Buffer_Recv_Point[index]; - jPointGlobal = Buffer_Recv_GlobalIndex[index]; - jVertex_ = Buffer_Recv_Vertex[index]; - jMarker = Buffer_Recv_Marker[index]; - - /*--- The gathered data will also include the current - "owned" periodic point that we are matching, so first make - sure that we avoid the original point by checking that the - global index values are not the same. ---*/ - - if ((jPointGlobal != iPointGlobal) || (pointOnAxis)) { - /*--- Compute the distance between the candidate periodic - point and the transformed coordinates of the owned point. ---*/ - - dist = 0.0; - for (iDim = 0; iDim < nDim; iDim++) { - Coord_j[iDim] = Buffer_Recv_Coord[index * nDim + iDim]; - dist += pow(Coord_j[iDim] - rotCoord[iDim], 2.0); - } - dist = sqrt(dist); - - /*--- Compare the distance against the existing minimum - and also perform checks just to be sure that this is an - independent periodic point (even if on the same rank), - unless it lies on the axis of rotation. ---*/ - - chkSamePoint = false; - chkSamePoint = (((dist < mindist) && (iProcessor != rank)) || - ((dist < mindist) && (iProcessor == rank) && (jPoint != iPoint))); - - if (chkSamePoint || ((dist < mindist) && (pointOnAxis))) { - /*--- We have found an intermediate match. Store the - data for this point before continuing the search. ---*/ - - mindist = dist; - pProcessor = iProcessor; - pPoint = jPoint; - pPointGlobal = jPointGlobal; - pVertex = jVertex_; - pMarker = jMarker; - } - } - } - - /*--- Store the data for the best match found for the - owned periodic point. ---*/ - - vertex[iMarker][iVertex]->SetDonorPoint(pPoint, pPointGlobal, pVertex, pMarker, pProcessor); - maxdist_local = max(maxdist_local, mindist); - nPointMatch++; - - /*--- If the distance to the closest point is larger than our - tolerance, then throw a warning for this point. ---*/ - - if (mindist > epsilon) { - cout.precision(10); - cout << endl; - cout << " Bad match for point " << iPointGlobal << ".\tNearest"; - cout << " donor distance: " << scientific << mindist << "."; - maxdist_local = min(maxdist_local, 0.0); - isBadMatch = true; - } - } - } - } - } - } - - /*--- Communicate the final count of number of matched points - for the periodic boundary pair and the max distance for all - pairs of points. ---*/ - - unsigned long nPointMatch_Local = nPointMatch; - SU2_MPI::Reduce(&nPointMatch_Local, &nPointMatch, 1, MPI_UNSIGNED_LONG, MPI_SUM, MASTER_NODE, SU2_MPI::GetComm()); - SU2_MPI::Reduce(&maxdist_local, &maxdist_global, 1, MPI_DOUBLE, MPI_MAX, MASTER_NODE, SU2_MPI::GetComm()); - - /*--- Output some information about the matching process. ---*/ - - if (rank == MASTER_NODE) { - if (nPointMatch > 0) { - cout << " Matched " << nPointMatch << " points with a max distance of: "; - cout << maxdist_global << "." << endl; - } else { - cout << " No matching points for periodic marker pair "; - cout << val_periodic << " in current zone." << endl; - } - - /*--- Print final warning when finding bad matches. ---*/ - - if (isBadMatch) { - cout << endl; - cout << "\n !!! Warning !!!" << endl; - cout << "Bad matches found. Computation will continue, but be cautious.\n"; - } - } - - /*--- Free local memory for communications. ---*/ - - delete[] Buffer_Send_Coord; - delete[] Buffer_Send_Point; - - delete[] Buffer_Recv_Coord; - delete[] Buffer_Recv_Point; - - delete[] Buffer_Send_nVertex; - delete[] Buffer_Recv_nVertex; - - delete[] Buffer_Send_GlobalIndex; - delete[] Buffer_Send_Vertex; - delete[] Buffer_Send_Marker; - - delete[] Buffer_Recv_GlobalIndex; - delete[] Buffer_Recv_Vertex; - delete[] Buffer_Recv_Marker; -} - void CPhysicalGeometry::FindUniqueNode_PeriodicBound(const CConfig* config) { /*-------------------------------------------------------------------------------------------*/ /*--- Find reference node on the 'inlet' streamwise periodic marker for the computation ---*/ @@ -8844,16 +8468,6 @@ void CPhysicalGeometry::ReadUnorderedSensitivity(CConfig* config) { } } -void CPhysicalGeometry::Check_Periodicity(CConfig* config) { - /*--- Check for the presence of any periodic BCs and disable multigrid - for now if found. ---*/ - - if ((config->GetnMarker_Periodic() != 0) && (config->GetnMGLevels() > 0)) { - if (rank == MASTER_NODE) cout << "WARNING: Periodicity has been detected. Disabling multigrid. " << endl; - config->SetMGLevels(0); - } -} - su2double CPhysicalGeometry::Compute_MaxThickness(su2double* Plane_P0, su2double* Plane_Normal, CConfig* config, vector& Xcoord_Airfoil, vector& Ycoord_Airfoil, vector& Zcoord_Airfoil) { diff --git a/Common/src/linear_algebra/CSysSolve.cpp b/Common/src/linear_algebra/CSysSolve.cpp index ce4543265464..178e2b3ba0d1 100644 --- a/Common/src/linear_algebra/CSysSolve.cpp +++ b/Common/src/linear_algebra/CSysSolve.cpp @@ -178,7 +178,7 @@ void CSysSolve::SolveReduced(int n, const su2matrix& Hsb } template -void CSysSolve::ModGramSchmidt(bool shared_hsbg, int i, su2matrix& Hsbg, +bool CSysSolve::ModGramSchmidt(bool shared_hsbg, int i, su2matrix& Hsbg, vector>& w) const { const auto thread = omp_get_thread_num(); @@ -201,11 +201,13 @@ void CSysSolve::ModGramSchmidt(bool shared_hsbg, int i, su2matrix::ModGramSchmidt(bool shared_hsbg, int i, su2matrix @@ -543,13 +552,23 @@ unsigned long CSysSolve::FGMRES_LinSolver(const CSysVector::FGCRODR_LinSolverImpl(const CSysVector::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. */ + + /*--- 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] = {}; + + /*--- 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. ---*/ + passivedouble lastPreSmoothRMS[MAX_MG_LEVELS+1][2] = {}; + passivedouble lastPostSmoothRMS[MAX_MG_LEVELS+1][2] = {}; + passivedouble lastCorrecSmoothRMS[MAX_MG_LEVELS+1][2] = {}; + }; diff --git a/SU2_CFD/include/integration/ComputeLinSysResRMS.hpp b/SU2_CFD/include/integration/ComputeLinSysResRMS.hpp new file mode 100644 index 000000000000..9471557d4020 --- /dev/null +++ b/SU2_CFD/include/integration/ComputeLinSysResRMS.hpp @@ -0,0 +1,63 @@ +/*! + * \file ComputeLinSysResRMS.hpp + * \brief Helper to compute the global RMS of LinSysRes across all variables and domain points. + * \author Nijso Beishuizen + * \version 8.4.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2026, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once +#include "../../include/solvers/CSolver.hpp" +#include "../../../Common/include/parallelization/omp_structure.hpp" +#include + +/*! + * \brief Compute the global (MPI-reduced) RMS of LinSysRes over all variables and domain points. + * + * \note Thread-safety: This function MUST be called by ALL threads in the current + * OpenMP parallel region, because squaredNorm() uses parallel for + barriers + * internally. Do NOT call from inside BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS. + * The return value is correct only on the master thread (thread 0). + * + * \param[in] solver - Solver whose LinSysRes is evaluated. + * \return Global RMS value (valid on master thread; other threads return 0). + */ +inline passivedouble ComputeLinSysResRMS(const CSolver* solver) { + + /*--- squaredNorm() -> dot() uses OMP parallel for + barriers internally, + * so all threads must participate. ---*/ + const su2double sqNorm = solver->LinSysRes.squaredNorm(); + + /*--- The MPI reduction for nElmDomain must be single-threaded. ---*/ + passivedouble result = 0.0; + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS + { + unsigned long nElmDomain = solver->LinSysRes.GetNElmDomain(); + unsigned long globalNElmDomain = 0; + SU2_MPI::Allreduce(&nElmDomain, &globalNElmDomain, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); + if (globalNElmDomain > 0) + result = std::sqrt(SU2_TYPE::GetValue(sqNorm) / static_cast(globalNElmDomain)); + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + + return result; +} diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index 45042a022b1f..c3620a548997 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -795,11 +795,6 @@ void CDriver::InitializeGeometryFVM(CConfig *config, CGeometry **&geometry) { geometry[MESH_0]->ComputeSurfaceAreaCfgFile(config); - /*--- Check for periodicity and disable MG if necessary. ---*/ - - if (rank == MASTER_NODE) cout << "Checking for periodicity." << endl; - geometry[MESH_0]->Check_Periodicity(config); - /*--- Compute mesh quality statistics on the fine grid. ---*/ if (!fea) { diff --git a/SU2_CFD/src/integration/CIntegration.cpp b/SU2_CFD/src/integration/CIntegration.cpp index edb4248d8c13..b3cfdfbfb0b3 100644 --- a/SU2_CFD/src/integration/CIntegration.cpp +++ b/SU2_CFD/src/integration/CIntegration.cpp @@ -81,16 +81,17 @@ void CIntegration::Space_Integration(CGeometry *geometry, solver_container[MainSolver]->BC_Fluid_Interface(geometry, solver_container, conv_bound_numerics, visc_bound_numerics, config); - /*--- Compute Fourier Transformations for markers where NRBC_BOUNDARY is applied---*/ + /*--- Compute Fourier Transformations for markers where NRBC_BOUNDARY is applied. + Turbomachinery span-wise data structures are only initialized on the fine grid. ---*/ - if (config->GetBoolGiles() && config->GetSpatialFourier()){ + if (iMesh == MESH_0 && config->GetBoolGiles() && config->GetSpatialFourier()){ solver_container[MainSolver]->PreprocessBC_Giles(geometry, config, conv_bound_numerics, INFLOW); solver_container[MainSolver]->PreprocessBC_Giles(geometry, config, conv_bound_numerics, OUTFLOW); } BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { - if (config->GetBoolTurbomachinery()){ + if (iMesh == MESH_0 && config->GetBoolTurbomachinery()){ /*--- Average quantities at the inflow and outflow boundaries ---*/ solver_container[MainSolver]->TurboAverageProcess(solver_container, geometry,config,INFLOW); solver_container[MainSolver]->TurboAverageProcess(solver_container, geometry, config, OUTFLOW); @@ -128,10 +129,14 @@ void CIntegration::Space_Integration(CGeometry *geometry, solver_container[MainSolver]->BC_Supersonic_Outlet(geometry, solver_container, conv_bound_numerics, visc_bound_numerics, config, iMarker); break; case GILES_BOUNDARY: - solver_container[MainSolver]->BC_Giles(geometry, solver_container, conv_bound_numerics, visc_bound_numerics, config, iMarker); + /*--- Giles BC uses turbo geometry data only available on the fine grid. ---*/ + if (iMesh == MESH_0) { + solver_container[MainSolver]->BC_Giles(geometry, solver_container, conv_bound_numerics, visc_bound_numerics, config, iMarker); + } break; case RIEMANN_BOUNDARY: - if (config->GetBoolTurbomachinery()){ + /*--- TurboRiemann uses turbo geometry data only available on the fine grid. ---*/ + if (config->GetBoolTurbomachinery() && iMesh == MESH_0){ solver_container[MainSolver]->BC_TurboRiemann(geometry, solver_container, conv_bound_numerics, visc_bound_numerics, config, iMarker); } else{ diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 93960cd58f6a..d721e74c0e7a 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -25,13 +25,92 @@ * 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 + \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); +} -passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolver* solver_coarse, CGeometry* geometry_coarse, - unsigned short iMesh, passivedouble CFL_fine, passivedouble CFL_coarse_current) { +void CMultiGridIntegration::adaptRestrictionDamping(CConfig* config) { + 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); }); +} + +void CMultiGridIntegration::adaptProlongationDamping(CConfig* config) { + /*--- 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); }); +} + +passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, unsigned short iMesh, + passivedouble CFL_fine, passivedouble CFL_coarse_current, + passivedouble rms_res_coarse) { - /*--- Must be called from a single-thread context (e.g. inside BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS). ---*/ const bool wasActive = AD::BeginPassive(); passivedouble current_coeff = CFL_coarse_current / CFL_fine; @@ -41,116 +120,105 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve 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; - - /*--- Get sum of all RMS residuals for all variables (local to this rank) ---*/ - su2double rms_res_coarse_local = 0.0; - for (unsigned short iVar = 0; iVar < solver_coarse->GetnVar(); iVar++) { - rms_res_coarse_local += SU2_TYPE::GetValue(solver_coarse->GetRes_RMS(iVar)); + /*--- 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; + } - /*--- MPI synchronization: ensure all ranks use the same global residual value. ---*/ - /*--- Always reduce across ranks so all subsequent CFL logic is deterministic. ---*/ - su2double rms_global_sum = 0.0; - SU2_MPI::Allreduce(&rms_res_coarse_local, &rms_global_sum, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - passivedouble rms_res_coarse = SU2_TYPE::GetValue(rms_global_sum) / static_cast(SU2_MPI::GetSize()); - - /*--- 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; + 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 } - last_was_increase[lvl] = current_is_increase; + } else { + /*--- Same direction, reset counter ---*/ + oscillation_count[lvl] = 0; } - last_res[lvl] = rms_res_coarse; + 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; - } + /*--- 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 + /*--- 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]; - } + /*--- 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; - } - } + /*--- 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); - /*--- CFL reduction for oscillation detection ---*/ - if (oscillation_detected) { - new_coeff = current_coeff * 0.75; - /*--- Update reference after oscillation response ---*/ + 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)); @@ -159,7 +227,6 @@ passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, CSolve 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; @@ -208,10 +275,10 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, su2double monitor = 1.0; bool FullMG = false; - unsigned short RecursiveParam = config[iZone]->GetMGCycle(); + unsigned short RecursiveParam = static_cast(config[iZone]->GetMGCycle()); - if (config[iZone]->GetMGCycle() == FULLMG_CYCLE) { - RecursiveParam = V_CYCLE; + if (config[iZone]->GetMGCycle() == MG_CYCLE::FULL) { + RecursiveParam = static_cast(MG_CYCLE::V); FullMG = true; } @@ -219,8 +286,32 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, unsigned short FinestMesh = config[iZone]->GetFinestMesh(); - /// TODO: This was always false. - const bool Convergence_FullMG = false; + /*--- Initialize per-level smoothing iteration counters to the configured maximum. + * If early exit never fires, the output will show actual == max. ---*/ + 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]; + lastCorrecSmoothIters[i] = mgOpts.MG_CorrecSmooth[i]; + lastPreSmoothProgress[i] = false; + lastPostSmoothProgress[i] = false; + lastCorrecSmoothProgress[i] = false; + lastPreSmoothRMS[i][0] = lastPreSmoothRMS[i][1] = 0.0; + lastPostSmoothRMS[i][0] = lastPostSmoothRMS[i][1] = 0.0; + lastCorrecSmoothRMS[i][0] = lastCorrecSmoothRMS[i][1] = 0.0; + } + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + + /*--- Full MG: advance to the next finer grid after a fixed number of + * outer iterations on the current coarsest active level. + * We use 100 iterations per level (nMGLevels levels total) ---*/ + const bool Convergence_FullMG = + FullMG && (FinestMesh != MESH_0) && + (config[iZone]->GetInnerIter() % 100 == 99); if (!config[iZone]->GetRestart() && FullMG && direct && ( Convergence_FullMG && (FinestMesh != MESH_0 ))) { @@ -243,6 +334,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 ---*/ + const unsigned short nMGLevels = config[iZone]->GetnMGLevels(); + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS + { + 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]); + } + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + + /*--- Propagate the updated coarse-grid CFL to every coarse-grid point (all threads). ---*/ + for (unsigned short iMesh = FinestMesh; iMesh < nMGLevels; ++iMesh) { + const passivedouble CFL_coarse_new = SU2_TYPE::GetValue(config[iZone]->GetCFL(iMesh+1)); + CGeometry* geo_c = geometry[iZone][iInst][iMesh+1]; + CSolver* sol_c = solver_container[iZone][iInst][iMesh+1][Solver_Position]; + SU2_OMP_FOR_STAT(roundUpDiv(geo_c->GetnPoint(), omp_get_num_threads())) + for (auto iPoint = 0ul; iPoint < geo_c->GetnPoint(); iPoint++) + sol_c->GetNodes()->SetLocalCFL(iPoint, CFL_coarse_new); + END_SU2_OMP_FOR + } /*--- Computes primitive variables and gradients in the finest mesh (useful for the next solver (turbulence) and output ---*/ @@ -257,6 +372,72 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, numerics_container[iZone][iInst], config[iZone], FinestMesh, RunTime_EqSystem, &monitor); + /*--- Adapt restriction damping based on coarse-level pre-smoothing workload from this cycle. + * Only effective when MG_SMOOTH_EARLY_EXIT= YES (otherwise all levels always run to completion + * 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]); + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + } + + /*--- 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); + } + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + } + } END_SU2_OMP_PARALLEL @@ -348,33 +529,14 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, MultiGrid_Cycle(geometry, solver_container, numerics_container, config_container, iMesh+1, nextRecurseParam, RunTime_EqSystem, iZone, iInst); - } /*--- Compute prolongated solution, and smooth the correction $u^(new)_k = u_k + Smooth(I^k_(k+1)(u_(k+1)-I^(k+1)_k u_k))$ ---*/ GetProlongated_Correction(RunTime_EqSystem, solver_fine, solver_coarse, geometry_fine, geometry_coarse, config); - /*--- Compute adaptive CFL for coarse grid (master only, with barriers for synchronization) ---*/ - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { - passivedouble CFL_fine_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh)); - passivedouble CFL_coarse_current_passive = SU2_TYPE::GetValue(config->GetCFL(iMesh+1)); - computeMultigridCFL(config, solver_coarse, geometry_coarse, iMesh, CFL_fine_passive, CFL_coarse_current_passive); - } - END_SU2_OMP_SAFE_GLOBAL_ACCESS - - /*--- All threads read the CFL updated by master (safe after trailing barrier above) ---*/ - const passivedouble CFL_coarse_new = SU2_TYPE::GetValue(config->GetCFL(iMesh+1)); - - /*--- Update LocalCFL at each coarse grid point ---*/ - SU2_OMP_FOR_STAT(roundUpDiv(geometry_coarse->GetnPoint(), omp_get_num_threads())) - for (auto iPoint = 0ul; iPoint < geometry_coarse->GetnPoint(); iPoint++) { - solver_coarse->GetNodes()->SetLocalCFL(iPoint, CFL_coarse_new); - } - END_SU2_OMP_FOR - - SmoothProlongated_Correction(RunTime_EqSystem, solver_fine, geometry_fine, config->GetMG_CorrecSmooth(iMesh), 1.25, config); + const auto& mgOpts = config->GetMGOptions(); + SmoothProlongated_Correction(RunTime_EqSystem, solver_fine, geometry_fine, mgOpts.MG_CorrecSmooth[iMesh], mgOpts.MG_Smooth_Coeff, config, iMesh); SetProlongated_Correction(solver_fine, geometry_fine, config, iMesh); @@ -399,11 +561,14 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, unsigned short iZone, unsigned short iRKLimit) { + const auto& mgOpts = config->GetMGOptions(); const bool classical_rk4 = (config->GetKind_TimeIntScheme() == CLASSICAL_RK4_EXPLICIT); - const unsigned short nPreSmooth = config->GetMG_PreSmooth(iMesh); + const unsigned short nPreSmooth = mgOpts.MG_PreSmooth[iMesh]; const unsigned long timeIter = config->GetTimeIter(); + const bool early_exit = mgOpts.MG_Smooth_EarlyExit && (nPreSmooth > 1); - /*--- Do a presmoothing on the grid iMesh to be restricted to the grid iMesh+1 ---*/ + /*--- Reset the shared early-exit flag (master only). ---*/ + SU2_OMP_SAFE_GLOBAL_ACCESS(mg_early_exit_flag = false;) for (unsigned short iPreSmooth = 0; iPreSmooth < nPreSmooth; iPreSmooth++) { /*--- Time and space integration ---*/ @@ -425,13 +590,59 @@ 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; + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + } + /*--- 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; + } } + + /*--- 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]); + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS } @@ -444,9 +655,14 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, unsigned short iMesh, unsigned short iRKLimit) { + const auto& mgOpts = config->GetMGOptions(); const bool classical_rk4 = (config->GetKind_TimeIntScheme() == CLASSICAL_RK4_EXPLICIT); - const unsigned short nPostSmooth = config->GetMG_PostSmooth(iMesh); + const unsigned short nPostSmooth = mgOpts.MG_PostSmooth[iMesh]; const unsigned long timeIter = config->GetTimeIter(); + const bool early_exit = mgOpts.MG_Smooth_EarlyExit && (nPostSmooth > 1); + + /*--- Reset the shared early-exit flag (master only). ---*/ + SU2_OMP_SAFE_GLOBAL_ACCESS(mg_early_exit_flag = false;) /*--- Do a postsmoothing on the grid iMesh after prolongation from the grid iMesh+1 ---*/ for (unsigned short iPostSmooth = 0; iPostSmooth < nPostSmooth; iPostSmooth++) { @@ -459,12 +675,26 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, solver_fine->Set_OldSolution(); if (classical_rk4) solver_fine->Set_NewSolution(); - solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, timeIter); + solver_fine->SetTime_Step(geometry_fine, solver_container_fine, config, iMesh, timeIter); } /*--- 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; + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + } + /*--- Time integration, update solution using the old solution plus the solution increment ---*/ Time_Integration(geometry_fine, solver_container_fine, config, iRKStep, RunTime_EqSystem); @@ -472,7 +702,38 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, 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; + } + } + + /*--- 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]); } + END_SU2_OMP_SAFE_GLOBAL_ACCESS } @@ -527,7 +788,7 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS for (auto iVertex = 0ul; iVertex < geo_coarse->nVertex[iMarker]; iVertex++) { auto Point_Coarse = geo_coarse->vertex[iMarker][iVertex]->GetNode(); - /*--- For dirichlet boundary condtions, set the correction to zero. + /*--- For dirichlet boundary conditions, set the correction to zero. Note that Solution_Old stores the correction not the actual value ---*/ su2double zero[3] = {0.0}; @@ -555,7 +816,8 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS } void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_EqSystem, CSolver *solver, CGeometry *geometry, - unsigned short val_nSmooth, su2double val_smooth_coeff, CConfig *config) { + unsigned short val_nSmooth, su2double val_smooth_coeff, CConfig *config, + unsigned short iMesh) { /*--- Check if there is work to do. ---*/ if (val_nSmooth == 0) return; @@ -571,7 +833,15 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ } END_SU2_OMP_FOR - /*--- Jacobi iterations. ---*/ + /*--- 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). ---*/ for (auto iSmooth = 0u; iSmooth < val_nSmooth; iSmooth++) { @@ -625,6 +895,11 @@ 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;) + } void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeometry *geo_fine, @@ -632,7 +907,15 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet su2double *Solution_Fine, *Residual_Fine; const unsigned short nVar = sol_fine->GetnVar(); - const su2double factor = config->GetDamp_Correc_Prolong(); + + /*--- 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; SU2_OMP_FOR_STAT(roundUpDiv(geo_fine->GetnPointDomain(), omp_get_num_threads())) for (auto Point_Fine = 0ul; Point_Fine < geo_fine->GetnPointDomain(); Point_Fine++) { @@ -675,7 +958,7 @@ void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coar const su2double *Residual_Fine; const unsigned short nVar = sol_coarse->GetnVar(); - su2double factor = config->GetDamp_Res_Restric(); + const su2double factor = config->GetDamp_Res_Restric(); auto *Residual = new su2double[nVar]; @@ -689,7 +972,7 @@ void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coar 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]; + Residual[iVar] += factor * Residual_Fine[iVar]; } sol_coarse->GetNodes()->AddRes_TruncError(Point_Coarse, Residual); } @@ -835,8 +1118,9 @@ void CMultiGridIntegration::NonDimensional_Parameters(CGeometry **geometry, CSol solver_container[FinestMesh][FLOW_SOL]->Momentum_Forces(geometry[FinestMesh], config); solver_container[FinestMesh][FLOW_SOL]->Friction_Forces(geometry[FinestMesh], config); - /*--- Calculate the turbo performance ---*/ - if (config->GetBoolTurbomachinery()){ + /*--- Calculate the turbo performance (only on the fine grid; turbo + * geometry data is only available on MESH_0). ---*/ + if (config->GetBoolTurbomachinery() && FinestMesh == MESH_0){ /*--- Average quantities at the inflow and outflow boundaries ---*/ diff --git a/SU2_CFD/src/solvers/CIncNSSolver.cpp b/SU2_CFD/src/solvers/CIncNSSolver.cpp index 182fb133bb9a..dc02968fda4f 100644 --- a/SU2_CFD/src/solvers/CIncNSSolver.cpp +++ b/SU2_CFD/src/solvers/CIncNSSolver.cpp @@ -108,8 +108,6 @@ void CIncNSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container if (wall_functions) { SU2_OMP_SAFE_GLOBAL_ACCESS(SetTau_Wall_WF(geometry, solver_container, config);) - // nijso: we have to set this as well?? - // seteddyviscfirstpoint } /*--- Compute recovered pressure and temperature for streamwise periodic flow ---*/ diff --git a/SU2_CFD/src/solvers/CSpeciesSolver.cpp b/SU2_CFD/src/solvers/CSpeciesSolver.cpp index 8966ca3da319..2857bdc7fd54 100644 --- a/SU2_CFD/src/solvers/CSpeciesSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesSolver.cpp @@ -113,7 +113,7 @@ void CSpeciesSolver::Initialize(CGeometry* geometry, CConfig* config, unsigned s AllocVectorOfMatrices( nVertex, nVar,CustomBoundaryScalar); - if (iMesh == MESH_0 || config->GetMGCycle() == FULLMG_CYCLE) { + if (iMesh == MESH_0 || config->GetMGCycle() == MG_CYCLE::FULL) { /*--- Define some auxiliary vector related with the residual ---*/ diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp index 00d3009faa75..232373707623 100644 --- a/SU2_CFD/src/solvers/CTurbSASolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp @@ -56,7 +56,7 @@ CTurbSASolver::CTurbSASolver(CGeometry *geometry, CConfig *config, unsigned shor /*--- Single grid simulation ---*/ - if (iMesh == MESH_0 || config->GetMGCycle() == FULLMG_CYCLE) { + if (iMesh == MESH_0 || config->GetMGCycle() == MG_CYCLE::FULL) { /*--- Define some auxiliar vector related with the residual ---*/ diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index e5e845abf7a0..7cd7c2505213 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -58,7 +58,7 @@ CTurbSSTSolver::CTurbSSTSolver(CGeometry *geometry, CConfig *config, unsigned sh /*--- Single grid simulation ---*/ - if (iMesh == MESH_0 || config->GetMGCycle() == FULLMG_CYCLE) { + if (iMesh == MESH_0 || config->GetMGCycle() == MG_CYCLE::FULL) { /*--- Define some auxiliary vector related with the residual ---*/ diff --git a/SU2_CFD/src/solvers/CTurbSolver.cpp b/SU2_CFD/src/solvers/CTurbSolver.cpp index 609bc3daaeed..121c004c104d 100644 --- a/SU2_CFD/src/solvers/CTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSolver.cpp @@ -191,6 +191,36 @@ void CTurbSolver::LoadRestart(CGeometry** geometry, CSolver*** solver, CConfig* false); solver[iMesh][TURB_SOL]->Postprocessing(geometry[iMesh], solver[iMesh], config, iMesh); } + + /*--- Overwrite coarse-level eddy viscosity to ensure restart reproducibility. ---*/ + SU2_OMP_FOR_STAT(roundUpDiv(geometry[iMesh]->GetnPointDomain(), omp_get_num_threads())) + for (auto iPoint = 0ul; iPoint < geometry[iMesh]->GetnPointDomain(); iPoint++) { + su2double Area_Parent = geometry[iMesh]->nodes->GetVolume(iPoint); + su2double EddyVisc = 0.0; + for (auto iChildren = 0u; iChildren < geometry[iMesh]->nodes->GetnChildren_CV(iPoint); iChildren++) { + auto Point_Fine = geometry[iMesh]->nodes->GetChildren_CV(iPoint, iChildren); + su2double Area_Children = geometry[iMesh - 1]->nodes->GetVolume(Point_Fine); + EddyVisc += solver[iMesh - 1][TURB_SOL]->GetNodes()->GetmuT(Point_Fine) * Area_Children / Area_Parent; + } + solver[iMesh][TURB_SOL]->GetNodes()->SetmuT(iPoint, EddyVisc); + } + END_SU2_OMP_FOR + + /*--- Zero eddy viscosity at viscous walls. ---*/ + for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { + if (config->GetViscous_Wall(iMarker)) { + SU2_OMP_FOR_STAT(32) + for (auto iVertex = 0ul; iVertex < geometry[iMesh]->nVertex[iMarker]; iVertex++) { + auto Point_Coarse = geometry[iMesh]->vertex[iMarker][iVertex]->GetNode(); + solver[iMesh][TURB_SOL]->GetNodes()->SetmuT(Point_Coarse, 0.0); + } + END_SU2_OMP_FOR + } + } + + /*--- Communicate the restricted eddy viscosity. ---*/ + solver[iMesh][TURB_SOL]->InitiateComms(geometry[iMesh], config, MPI_QUANTITIES::SOLUTION_EDDY); + solver[iMesh][TURB_SOL]->CompleteComms(geometry[iMesh], config, MPI_QUANTITIES::SOLUTION_EDDY); } /*--- Go back to single threaded execution. ---*/ diff --git a/SU2_CFD/src/variables/CAdjEulerVariable.cpp b/SU2_CFD/src/variables/CAdjEulerVariable.cpp index b2ac36a5b8bb..67a33bbe18b8 100644 --- a/SU2_CFD/src/variables/CAdjEulerVariable.cpp +++ b/SU2_CFD/src/variables/CAdjEulerVariable.cpp @@ -40,7 +40,7 @@ CAdjEulerVariable::CAdjEulerVariable(su2double psirho, const su2double *phi, su2 /*--- Only for residual smoothing (multigrid) ---*/ for (unsigned long iMesh = 0; iMesh <= config->GetnMGLevels(); iMesh++) { - if (config->GetMG_CorrecSmooth(iMesh) > 0) { + if (config->GetMGOptions().MG_CorrecSmooth[iMesh] > 0) { Residual_Sum.resize(nPoint,nVar); Residual_Old.resize(nPoint,nVar); break; diff --git a/SU2_CFD/src/variables/CFlowVariable.cpp b/SU2_CFD/src/variables/CFlowVariable.cpp index 422118245f98..06f90656450c 100644 --- a/SU2_CFD/src/variables/CFlowVariable.cpp +++ b/SU2_CFD/src/variables/CFlowVariable.cpp @@ -39,7 +39,7 @@ CFlowVariable::CFlowVariable(unsigned long npoint, unsigned long ndim, unsigned Res_TruncError.resize(nPoint, nVar) = su2double(0.0); for (unsigned long iMesh = 0; iMesh <= config->GetnMGLevels(); iMesh++) { - if (config->GetMG_CorrecSmooth(iMesh) > 0) { + if (config->GetMGOptions().MG_CorrecSmooth[iMesh] > 0) { Residual_Sum.resize(nPoint, nVar); Residual_Old.resize(nPoint, nVar); break; diff --git a/SU2_CFD/src/variables/CHeatVariable.cpp b/SU2_CFD/src/variables/CHeatVariable.cpp index cc41d69b25b4..ae2b294d38a9 100644 --- a/SU2_CFD/src/variables/CHeatVariable.cpp +++ b/SU2_CFD/src/variables/CHeatVariable.cpp @@ -45,7 +45,7 @@ CHeatVariable::CHeatVariable(su2double heat, unsigned long npoint, unsigned long /*--- Only for residual smoothing (multigrid) ---*/ for (unsigned long iMesh = 0; iMesh <= config->GetnMGLevels(); iMesh++) { - if (config->GetMG_CorrecSmooth(iMesh) > 0) { + if (config->GetMGOptions().MG_CorrecSmooth[iMesh] > 0) { Residual_Sum.resize(nPoint, nVar); Residual_Old.resize(nPoint, nVar); break; diff --git a/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg b/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg index a4aa2b728985..bc5ee7bb83ca 100644 --- a/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg +++ b/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg @@ -53,19 +53,19 @@ ITER= 150 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 LINEAR_SOLVER_ILU_FILL_IN= 0 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 2 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 2, 2 ) -MG_POST_SMOOTH= ( 1, 1, 1, 1 ) +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) -MG_DAMP_RESTRICTION= 1.0 -MG_DAMP_PROLONGATION= 1.0 +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % 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 9a1f6b7d1e71..f7e509e5e3cb 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 , 17852.4 , 0.001 - 1 , 17762.2 , 0.001 - 2 , 13023.3 , 0.001 - 3 , 7235.23 , 0.001 - 4 , 2025.24 , 0.001 - 5 , -2173.83 , 0.001 - 6 , -5516.67 , 0.001 - 7 , -8317.99 , 0.001 - 8 , -10814.3 , 0.001 - 9 , -13092.8 , 0.001 - 10 , -15126.6 , 0.001 - 11 , -16823.4 , 0.001 - 12 , -17994.0 , 0.001 - 13 , -18196.9 , 0.001 - 14 , -16453.7 , 0.001 - 15 , -10589.4 , 0.001 - 16 , 4413.36 , 0.001 - 17 , 30522.9 , 0.001 - 18 , 5834.86 , 0.001 - 19 , -18131.9 , 0.001 - 20 , -21995.1 , 0.001 - 21 , -20862.7 , 0.001 - 22 , -18622.4 , 0.001 - 23 , -18164.8 , 0.001 - 24 , -20842.9 , 0.001 - 25 , -26432.9 , 0.001 - 26 , -33388.6 , 0.001 - 27 , -39214.0 , 0.001 - 28 , -40910.6 , 0.001 - 29 , -35624.7 , 0.001 - 30 , -21761.1 , 0.001 - 31 , -718.652 , 0.001 - 32 , 21422.9 , 0.001 - 33 , 34942.8 , 0.001 - 34 , 34300.9 , 0.001 - 35 , 28342.4 , 0.001 - 36 , 23237.9 , 0.001 - 37 , -20230.5 , 0.001 + 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 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 366ba74b7047..0218e98d3169 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.1875371398 , -46.4529905 , 0.2229292755 , -1.619952826 , 0.0 , -1.624430497 , 0.0 , 0.0 , 0.9817393925 , 0.0 - 1 , 0.2883063943 , -65.16223458 , 0.3360834125 , -2.186444684 , 0.0 , -2.193255991 , 0.0 , 0.0 , 0.9308579056 , 0.0 - 2 , 0.4016718294 , -81.51255705 , 0.4583979297 , -2.595338639 , 0.0 , -2.604720916 , 0.0 , 0.0 , 0.6566891255 , 0.0 + 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 diff --git a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg index 22ef8c5a87ce..08ab48f4f13d 100644 --- a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg +++ b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg @@ -49,18 +49,18 @@ CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER=100 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg index 2e862e21b084..c204b3405507 100644 --- a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg +++ b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg @@ -51,20 +51,20 @@ CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER=1000 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ILU_FILL_IN= 0 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % 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 c861e4fbd810..88d7794ce033 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.00763648 , 0.0001 - 1 , 0.00504898 , 0.0001 - 2 , 0.00249639 , 0.0001 - 3 , 0.000890798 , 0.0001 + 0 , 0.00701137 , 0.0001 + 1 , 0.00485473 , 0.0001 + 2 , 0.00244467 , 0.0001 + 3 , 0.000872557 , 0.0001 diff --git a/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg b/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg index d37132998558..e247fa9f3759 100644 --- a/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg +++ b/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg @@ -44,27 +44,27 @@ MARKER_MONITORING= ( cylinder ) % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES OBJECTIVE_FUNCTION= DRAG -CFL_NUMBER= 5.0 +CFL_NUMBER= 10.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) -ITER= 150 +ITER= 1000 % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% % LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-8 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 1 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg b/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg index b651703583aa..16c80e3534dd 100644 --- a/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg +++ b/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg @@ -54,18 +54,18 @@ EXT_ITER= 10 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-5 -LINEAR_SOLVER_ITER= 10 +LINEAR_SOLVER_ERROR= 1E-3 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.7 -MG_DAMP_PROLONGATION= 0.7 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg b/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg index 6a9d3c21d923..e5a16f081b61 100644 --- a/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg +++ b/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg @@ -48,18 +48,18 @@ CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) ITER= 150 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg b/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg index be55f7956df7..8c4a46b26825 100644 --- a/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg +++ b/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg @@ -102,18 +102,18 @@ JST_SENSOR_COEFF= ( 0.5, 0.02 ) LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS LINEAR_SOLVER_ILU_FILL_IN= 0 -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 20 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.75 -MG_DAMP_PROLONGATION= 0.75 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/disc_adj_euler/naca0012_pitching/inv_NACA0012_pitching.cfg b/TestCases/disc_adj_euler/naca0012_pitching/inv_NACA0012_pitching.cfg index df699f723019..84bd700d9821 100644 --- a/TestCases/disc_adj_euler/naca0012_pitching/inv_NACA0012_pitching.cfg +++ b/TestCases/disc_adj_euler/naca0012_pitching/inv_NACA0012_pitching.cfg @@ -67,18 +67,18 @@ RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 1.0 -MG_DAMP_PROLONGATION= 1.0 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % --------------------- FLOW NUMERICAL METHOD DEFINITION ----------------------% % diff --git a/TestCases/disc_adj_euler/naca0012_pitching_def/inv_NACA0012_pitching_deform.cfg b/TestCases/disc_adj_euler/naca0012_pitching_def/inv_NACA0012_pitching_deform.cfg index 02e9e6fd0199..3df91b6f3674 100644 --- a/TestCases/disc_adj_euler/naca0012_pitching_def/inv_NACA0012_pitching_deform.cfg +++ b/TestCases/disc_adj_euler/naca0012_pitching_def/inv_NACA0012_pitching_deform.cfg @@ -51,17 +51,17 @@ RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 1.0 -MG_DAMP_PROLONGATION= 1.0 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % --------------------- FLOW NUMERICAL METHOD DEFINITION ----------------------% CONV_NUM_METHOD_FLOW= JST @@ -71,7 +71,7 @@ TIME_DISCRE_FLOW= EULER_IMPLICIT % ---------------- ADJOINT-FLOW NUMERICAL METHOD DEFINITION -------------------% OBJECTIVE_FUNCTION= EFFICIENCY -OPT_OBJECTIVE= EFFICIENCY * 1.0 +OPT_OBJECTIVE= EFFICIENCY * 1.0 CONV_NUM_METHOD_ADJFLOW= JST SLOPE_LIMITER_ADJFLOW= VENKATAKRISHNAN ADJ_JST_SENSOR_COEFF= ( 0.0, 0.02 ) @@ -89,7 +89,7 @@ FFD_CONTINUITY= 2ND_DERIVATIVE % ----------------------- DESIGN VARIABLE PARAMETERS --------------------------% DV_KIND= FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT DV_MARKER= ( airfoil ) -DV_PARAM= ( airfoil_box, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 2.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 3.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 4.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 5.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 6.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 7.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 8.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 9.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 10.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 2.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 3.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 4.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 5.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 6.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 7.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 8.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 9.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 10.0, 1.0, 0.0, 0.0, 1.0, 0.0) +DV_PARAM= ( airfoil_box, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 2.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 3.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 4.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 5.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 6.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 7.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 8.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 9.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 10.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 2.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 3.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 4.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 5.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 6.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 7.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 8.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 9.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 10.0, 1.0, 0.0, 0.0, 1.0, 0.0) DV_VALUE= 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001 % ------------------------ GRID DEFORMATION PARAMETERS ------------------------% diff --git a/TestCases/disc_adj_euler/naca0012_pitching_def/inv_NACA0012_pitching_deform_ad.cfg b/TestCases/disc_adj_euler/naca0012_pitching_def/inv_NACA0012_pitching_deform_ad.cfg index 775a824e1345..2a377323c522 100644 --- a/TestCases/disc_adj_euler/naca0012_pitching_def/inv_NACA0012_pitching_deform_ad.cfg +++ b/TestCases/disc_adj_euler/naca0012_pitching_def/inv_NACA0012_pitching_deform_ad.cfg @@ -51,17 +51,17 @@ RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 1.0 -MG_DAMP_PROLONGATION= 1.0 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % --------------------- FLOW NUMERICAL METHOD DEFINITION ----------------------% CONV_NUM_METHOD_FLOW= JST @@ -71,7 +71,7 @@ TIME_DISCRE_FLOW= EULER_IMPLICIT % ---------------- ADJOINT-FLOW NUMERICAL METHOD DEFINITION -------------------% OBJECTIVE_FUNCTION= EFFICIENCY -OPT_OBJECTIVE= EFFICIENCY * 1.0 +OPT_OBJECTIVE= EFFICIENCY * 1.0 CONV_NUM_METHOD_ADJFLOW= JST SLOPE_LIMITER_ADJFLOW= VENKATAKRISHNAN ADJ_JST_SENSOR_COEFF= ( 0.0, 0.02 ) @@ -89,7 +89,7 @@ FFD_CONTINUITY= 2ND_DERIVATIVE % ----------------------- DESIGN VARIABLE PARAMETERS --------------------------% DV_KIND= FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT, FFD_CONTROL_POINT DV_MARKER= ( airfoil ) -DV_PARAM= ( airfoil_box, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 2.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 3.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 4.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 5.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 6.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 7.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 8.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 9.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 10.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 2.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 3.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 4.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 5.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 6.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 7.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 8.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 9.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 10.0, 1.0, 0.0, 0.0, 1.0, 0.0) +DV_PARAM= ( airfoil_box, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 2.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 3.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 4.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 5.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 6.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 7.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 8.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 9.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 10.0, 0.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 2.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 3.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 4.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 5.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 6.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 7.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 8.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 9.0, 1.0, 0.0, 0.0, 1.0, 0.0) ; ( airfoil_box, 10.0, 1.0, 0.0, 0.0, 1.0, 0.0) DV_VALUE= 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001 % ------------------------ GRID DEFORMATION PARAMETERS ------------------------% diff --git a/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg b/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg index ed7563e85435..2278d0ca3934 100644 --- a/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg +++ b/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg @@ -92,7 +92,7 @@ MARKER_ANALYZE= (outflow, inflow) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 40.0 +CFL_NUMBER= 50.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.3, 1.2, 1.0, 10.0) @@ -100,13 +100,18 @@ CFL_ADAPT_PARAM= ( 1.3, 1.2, 1.0, 10.0) % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -% ----------- NOT WORKING WITH PERIODIC BOUNDARY CONDITIONS !!!!! -------------% -% +MGLEVEL= 1 +MGCYCLE= V_CYCLE +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % ----------------------- SLOPE LIMITER DEFINITION ----------------------------% % @@ -116,7 +121,7 @@ LIMITER_ITER= 999999 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % CONV_NUM_METHOD_FLOW= ROE -MUSCL_FLOW= YES +MUSCL_FLOW= NO SLOPE_LIMITER_FLOW= VENKATAKRISHNAN ENTROPY_FIX_COEFF= 0.03 JST_SENSOR_COEFF= ( 0.5, 0.02 ) diff --git a/TestCases/euler/CRM/inv_CRM_JST.cfg b/TestCases/euler/CRM/inv_CRM_JST.cfg index 60083baeb8a9..3245925c773f 100644 --- a/TestCases/euler/CRM/inv_CRM_JST.cfg +++ b/TestCases/euler/CRM/inv_CRM_JST.cfg @@ -49,18 +49,18 @@ CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) EXT_ITER= 99999 LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.9 -MG_DAMP_PROLONGATION= 0.9 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/euler/biparabolic/BIPARABOLIC.cfg b/TestCases/euler/biparabolic/BIPARABOLIC.cfg index 8bd845b430ee..e3e381dccd0e 100644 --- a/TestCases/euler/biparabolic/BIPARABOLIC.cfg +++ b/TestCases/euler/biparabolic/BIPARABOLIC.cfg @@ -56,11 +56,11 @@ EXT_ITER= 99999999 % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/euler/channel/inv_channel.cfg b/TestCases/euler/channel/inv_channel.cfg index cfac9e17d95e..a73818a9d89b 100644 --- a/TestCases/euler/channel/inv_channel.cfg +++ b/TestCases/euler/channel/inv_channel.cfg @@ -57,18 +57,18 @@ EXT_ITER= 999999 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 10 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.9 -MG_DAMP_PROLONGATION= 0.9 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg b/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg index 63932da5629b..3639613c54ef 100644 --- a/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg +++ b/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg @@ -41,14 +41,14 @@ MARKER_MONITORING= ( airfoil ) % ------------- COMMON PARAMETERS TO DEFINE THE NUMERICAL METHOD --------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 20.0 +CFL_NUMBER= 30.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER= 1000 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % diff --git a/TestCases/euler/wedge/inv_wedge_HLLC.cfg b/TestCases/euler/wedge/inv_wedge_HLLC.cfg index 5c86e82487b7..4af702aab8d3 100644 --- a/TestCases/euler/wedge/inv_wedge_HLLC.cfg +++ b/TestCases/euler/wedge/inv_wedge_HLLC.cfg @@ -42,24 +42,24 @@ MARKER_MONITORING= ( upper, lower ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 4.0 +CFL_NUMBER= 100.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER= 11000 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg b/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg index 3011b3a22ade..794813944708 100644 --- a/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg +++ b/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg @@ -77,13 +77,13 @@ NUM_METHOD_GRAD= GREEN_GAUSS CFL_NUMBER= 10.0 % % Multigrid ------------------------------------------------------------ % -MGLEVEL= 1 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.75 -MG_DAMP_PROLONGATION= 0.75 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % % Grid deformation ----------------------------------------------------- % DEFORM_MESH= YES diff --git a/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg b/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg index d089c8622c8a..d797f2e5d5fe 100644 --- a/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg +++ b/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg @@ -62,18 +62,18 @@ ITER= 1000 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 1.0 -MG_DAMP_PROLONGATION= 1.0 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg b/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg index e803c70bf495..c7db611e3d6e 100644 --- a/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg +++ b/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg @@ -63,18 +63,18 @@ ITER= 500 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 1.0 -MG_DAMP_PROLONGATION= 1.0 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/gust/inv_gust_NACA0012.cfg b/TestCases/gust/inv_gust_NACA0012.cfg index 1d73d4005350..e4b596afbdbf 100644 --- a/TestCases/gust/inv_gust_NACA0012.cfg +++ b/TestCases/gust/inv_gust_NACA0012.cfg @@ -72,7 +72,7 @@ MARKER_MONITORING = ( airfoil ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= GREEN_GAUSS -CFL_NUMBER= 10.0 +CFL_NUMBER= 100.0 % ----------------------- SLOPE LIMITER DEFINITION ----------------------------% % @@ -86,16 +86,16 @@ SENS_REMOVE_SHARP= NO % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +MG_POST_SMOOTH= ( 1, 1, 1, 1 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) MG_DAMP_RESTRICTION= 0.75 MG_DAMP_PROLONGATION= 0.75 diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 378cf419ff48..b8e39bc9fbaa 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.356739, 3.185311, 0.135404, 0.143482] + channel.test_vals = [-2.318252, 3.226111, 0.133426, 0.150359] 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.968156, -4.396643, 0.331958, 0.023010] + naca0012.test_vals = [-4.252415, -3.789971, 0.306821, 0.024573] 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 = [-1.301825, 4.369535, -0.236575, 0.041741] + wedge.test_vals = [-3.587150, 2.136260, -0.249533, 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.786753, 1.752735, 0.301271, 0.019497] + fixedCL_naca0012.test_vals = [-3.936884, 1.574653, 0.300864, 0.019462] 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 = [-7.466885, -1.982938, 0.001084, 0.036236, 2.361500, -2.325300, 0.000000, 0.000000] + flatplate.test_vals = [-6.382489, -0.905413, 0.001313, 0.025294, 2.361500, -2.336200, 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.433648, -2.945868, -0.009392, 1.603197, 0.000000] + cylinder.test_vals = [-8.460419, -2.972300, 0.271000, 1.701198, 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.412671, -0.950845, 0.039507, -134.197077, 0.000000] + cylinder_lowmach.test_vals = [-6.629113, -1.167336, -0.016421, -73.160843, 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.012575, -7.696236, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.005215, -7.539613, -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 = [-1.846052, -5.109587, 0.571411, 0.040773, 0.000000] + rae2822_sa.test_vals = [-2.169314, -5.450577, 0.293838, 0.104752, 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 = [-0.509927, 5.868873, 0.580652, 0.014294, 0.000000] + rae2822_sst.test_vals = [-1.028401, 5.875380, 0.279522, 0.093893, 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.446013, 5.868873, 0.580652, 0.014294] + rae2822_sst_sust.test_vals = [-2.540329, 5.875369, 0.279522, 0.093893] 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.075879, -6.829935, -0.200296, 0.022692] + turb_flatplate.test_vals = [-4.938980, -7.469368, -0.187651, 0.015894] 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.613316, -5.057159, 0.830274, -0.008869, 0.077835] + turb_naca0012_sst_restart_mg.test_vals = [-6.538814, -5.057150, 0.830240, -0.008813, 0.078177] 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 = [-7.118160, -6.555943, 0.531994, 0.008466] + inc_euler_naca0012.test_vals = [-5.737092, -4.868827, 0.512333, 0.009264] 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 = [-4.177986, -3.716749, 0.151721, 0.152945] + inc_nozzle.test_vals = [-5.362338, -4.748247, -0.017498, 0.115865] 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.059218, -3.311865, 0.006311, 6.172389] + inc_lam_cylinder.test_vals = [-4.168263, -3.611146, 0.013547, 4.538946] 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 = [-5.515304, -0.049093, -0.114942, -7.135967] + cavity.test_vals = [-7.325788, -1.861524, 1.097830, 1.028368] 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.756180, -2.301600, 1.422425, 1.431645] + spinning_cylinder.test_vals = [-7.881383, -2.419298, 1.535192, 1.450905] 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.010140, -0.007833] + sine_gust.test_vals = [-1.977498, 3.481817, -0.009878, -0.005086] 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.001919, -0.001262, 0.000418, -0.000592] + cosine_gust.test_vals = [-2.418805, 0.001521, -0.001239, 0.000394, -0.000593] 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 = [0.075093, 0.027559, -0.001640, -0.000129] + aeroelastic.test_vals = [0.073776, 0.027464, -0.001638, -0.000129] aeroelastic.test_vals_aarch64 = [0.074170, 0.027590, -0.001579, -0.000160] aeroelastic.unsteady = True aeroelastic.enabled_on_cpu_arch = ["x86_64"] # Requires AVX-capable architecture @@ -521,7 +521,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.665129, -3.793418, -3.716491, -3.148323] + unst_deforming_naca0012.test_vals = [-3.665243, -3.794042, -3.716822, -3.148495] unst_deforming_naca0012.unsteady = True unst_deforming_naca0012.enabled_with_tsan = False test_list.append(unst_deforming_naca0012) @@ -535,16 +535,16 @@ def main(): edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" edge_VW.test_iter = 40 - edge_VW.test_vals = [-2.013020, 4.187730, -0.000009, 0.000000] + edge_VW.test_vals = [-8.895442, -2.694280, -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 = 40 - edge_PPR.test_vals = [-7.126741, -0.965306, -0.000034, 0.000000] - edge_PPR.test_vals_aarch64 = [-7.139211, -0.980821, -0.000034, 0.000000] + edge_PPR.test_iter = 20 + edge_PPR.test_vals = [-10.590427, -4.427866, -0.000034, 0.000000] + edge_PPR.test_vals_aarch64 = [ -7.139211, -0.980821, -0.000034, 0.000000] test_list.append(edge_PPR) ###################################### @@ -656,7 +656,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.623154, -1.660901] + bars_SST_2D.test_vals = [13.000000, -0.473801, -1.563681] 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 7a6abd83c225..63fd98baf120 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -66,7 +66,7 @@ def main(): discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k" discadj_arina2k.cfg_file = "Arina2KRS.cfg" discadj_arina2k.test_iter = 20 - discadj_arina2k.test_vals = [-3.229402, -3.466984, 0.043984, 0.000000] + discadj_arina2k.test_vals = [-2.928012, -3.351754, 0.073361, 0.000000] test_list.append(discadj_arina2k) #################################### @@ -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.977753, -2.562520, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -3.338267, -2.490046, 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.224189, -1.654687, -0.004097, -0.000003] + discadj_pitchingNACA0012.test_vals = [-1.124927, -1.586220, -0.006032, 0.000009] discadj_pitchingNACA0012.tol = 0.01 discadj_pitchingNACA0012.unsteady = True discadj_pitchingNACA0012.enabled_with_tsan = False diff --git a/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg b/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg index a8bf56c8d2b3..0daddefc19a6 100644 --- a/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg +++ b/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg @@ -49,15 +49,23 @@ CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER= 9999 +% ------------------------ LINEAR SOLVER DEFINITION ---------------------------% +% +LINEAR_SOLVER= FGMRES +LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_ILU_FILL_IN= 0 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 + % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 1, 1, 1, 1 ) +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) -MG_DAMP_RESTRICTION= 0.9 -MG_DAMP_PROLONGATION= 0.9 +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/incomp_euler/nozzle/inv_nozzle.cfg b/TestCases/incomp_euler/nozzle/inv_nozzle.cfg index 1205675bb954..b4521656a3e4 100644 --- a/TestCases/incomp_euler/nozzle/inv_nozzle.cfg +++ b/TestCases/incomp_euler/nozzle/inv_nozzle.cfg @@ -53,18 +53,18 @@ CFL_NUMBER= 500 LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ILU_FILL_IN= 0 -LINEAR_SOLVER_ERROR= 1E-15 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 1, 1, 1, 0 ) -MG_CORRECTION_SMOOTH= ( 1, 1, 1, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % ----------- SLOPE LIMITER AND DISSIPATION SENSOR DEFINITION -----------------% % diff --git a/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg b/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg index 8283abd2531a..badb9cdd0fa6 100644 --- a/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg +++ b/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg @@ -44,7 +44,7 @@ MARKER_MONITORING= ( cylinder ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= GREEN_GAUSS -CFL_NUMBER= 10.0 +CFL_NUMBER= 100.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) @@ -55,11 +55,11 @@ VENKAT_LIMITER_COEFF= 0.01 % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 1, 1, 1, 1 ) +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) -MG_DAMP_RESTRICTION= 0.75 -MG_DAMP_PROLONGATION= 0.75 +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/incomp_navierstokes/sphere/sphere.cfg b/TestCases/incomp_navierstokes/sphere/sphere.cfg index e558dc3c3df4..0c37afb18732 100644 --- a/TestCases/incomp_navierstokes/sphere/sphere.cfg +++ b/TestCases/incomp_navierstokes/sphere/sphere.cfg @@ -50,8 +50,8 @@ MARKER_MONITORING= ( wall ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % -NUM_METHOD_GRAD= GREEN_GAUSS -CFL_NUMBER= 10.0 +NUM_METHOD_GRAD= GREEN_GAUSS +CFL_NUMBER= 100.0 CFL_ADAPT= NO ITER=50000 VENKAT_LIMITER_COEFF= 0.01 @@ -60,18 +60,18 @@ VENKAT_LIMITER_COEFF= 0.01 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-05 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-01 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 1 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 1, 1, 1, 1 ) +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) -MG_DAMP_RESTRICTION= 0.6 -MG_DAMP_PROLONGATION= 0.6 +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/moving_wall/cavity/lam_cavity.cfg b/TestCases/moving_wall/cavity/lam_cavity.cfg index 9f70ebd2257b..3f838cc38929 100644 --- a/TestCases/moving_wall/cavity/lam_cavity.cfg +++ b/TestCases/moving_wall/cavity/lam_cavity.cfg @@ -49,7 +49,7 @@ MARKER_MONITORING= ( upper, left, right, lower ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 2.0 +CFL_NUMBER= 100 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) ITER= 99999 @@ -58,18 +58,18 @@ ITER= 99999 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 2 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.9 -MG_DAMP_PROLONGATION= 0.9 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 1, 1, 1, 1 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % @@ -103,4 +103,4 @@ GRAD_OBJFUNC_FILENAME= of_grad SURFACE_FILENAME= surface_flow SURFACE_ADJ_FILENAME= surface_adjoint OUTPUT_WRT_FREQ= 250 -SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, RMS_ENERGY, LIFT, DRAG) \ No newline at end of file +SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, RMS_ENERGY, LIFT, DRAG) diff --git a/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg b/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg index 921f445e012a..8f282ed5b169 100644 --- a/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg +++ b/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg @@ -30,7 +30,7 @@ REYNOLDS_LENGTH= 1.0 SURFACE_MOVEMENT= MOVING_WALL MACH_MOTION= 0.1 MARKER_MOVING= ( cylinder ) -SURFACE_MOTION_ORIGIN= 0.5 0.0 0.0 +SURFACE_MOTION_ORIGIN= 0.5 0.0 0.0 SURFACE_ROTATION_RATE = 0.0 0.0 -199.0738 % ---------------------- REFERENCE VALUE DEFINITION ---------------------------% @@ -67,16 +67,16 @@ SENS_REMOVE_SHARP= NO % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 1, 1, 1 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) MG_DAMP_RESTRICTION= 0.5 MG_DAMP_PROLONGATION= 0.5 diff --git a/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg b/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg index ecf2a35c3874..df6d8152c6cf 100644 --- a/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg +++ b/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg @@ -55,18 +55,18 @@ ITER= 10 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 10 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 1.0 -MG_DAMP_PROLONGATION= 1.0 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % --------------------- FLOW NUMERICAL METHOD DEFINITION ----------------------% % @@ -130,7 +130,7 @@ MESH_FORMAT= SU2 MESH_OUT_FILENAME= mesh_out SOLUTION_FILENAME= solution_flow SOLUTION_ADJ_FILENAME= solution_adj -TABULAR_FORMAT= TECPLOT +TABULAR_FORMAT= TECPLOT CONV_FILENAME= history RESTART_FILENAME= restart_flow RESTART_ADJ_FILENAME= restart_adj diff --git a/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref b/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref index dcfbdc3dc263..8ab0b5b0fe70 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.0640697 , 0.001 - 1 , -0.117493 , 0.001 + 0 , 0.0456482 , 0.001 + 1 , -0.0881187 , 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 d09e8e3fb047..9365cd9cd74a 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.06254154103 , 0.1373280567 , 0.06005900872 , 0.1144550943 , 0.0 , 0.1131176767 , 0.0 , 0.0 , 0.01961712845 , 0.0 - 1 , -0.1126451148 , 6.126522734 , -0.1183006714 , 0.2579616726 , 0.0 , 0.2604810003 , 0.0 , 0.0 , 0.04918121089 , 0.0 + 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 diff --git a/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg b/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg index 7a282c5fee84..03125dc00c90 100644 --- a/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg +++ b/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg @@ -52,18 +52,18 @@ ITER= 99999 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/navierstokes/cylinder/lam_cylinder.cfg b/TestCases/navierstokes/cylinder/lam_cylinder.cfg index 17d3d8c567b0..140957069afd 100644 --- a/TestCases/navierstokes/cylinder/lam_cylinder.cfg +++ b/TestCases/navierstokes/cylinder/lam_cylinder.cfg @@ -52,18 +52,18 @@ ITER= 99999 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/navierstokes/flatplate/lam_flatplate.cfg b/TestCases/navierstokes/flatplate/lam_flatplate.cfg index 949fcc0df287..a1b95f54aabb 100644 --- a/TestCases/navierstokes/flatplate/lam_flatplate.cfg +++ b/TestCases/navierstokes/flatplate/lam_flatplate.cfg @@ -53,18 +53,18 @@ CFL_ADAPT= NO % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 0.05 +LINEAR_SOLVER_ERROR= 1.0E-01 LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 0 ) -MG_POST_SMOOTH= ( 1, 1, 1, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/navierstokes/naca0012/lam_NACA0012.cfg b/TestCases/navierstokes/naca0012/lam_NACA0012.cfg index 6c1c5b79037e..217add418fd0 100644 --- a/TestCases/navierstokes/naca0012/lam_NACA0012.cfg +++ b/TestCases/navierstokes/naca0012/lam_NACA0012.cfg @@ -10,7 +10,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% -% +% SOLVER= NAVIER_STOKES KIND_TURB_MODEL= NONE MATH_PROBLEM= DIRECT @@ -48,18 +48,18 @@ CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) EXT_ITER= 99999 LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 2, 2 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.85 -MG_DAMP_PROLONGATION= 0.85 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg b/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg index 917a53b98d2b..62cb94bb1431 100644 --- a/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg +++ b/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg @@ -79,18 +79,18 @@ ITER= 99999 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 1, 1, 1 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/nicf/LS89/turb_SA_PR.cfg b/TestCases/nicf/LS89/turb_SA_PR.cfg index 1e6ba192fc37..35703485f50a 100644 --- a/TestCases/nicf/LS89/turb_SA_PR.cfg +++ b/TestCases/nicf/LS89/turb_SA_PR.cfg @@ -78,18 +78,18 @@ CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) ITER= 5000 LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 20 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.75 -MG_DAMP_PROLONGATION= 0.75 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/nicf/edge/edge_PPR.cfg b/TestCases/nicf/edge/edge_PPR.cfg index 7effeebc6130..a757641e6a13 100644 --- a/TestCases/nicf/edge/edge_PPR.cfg +++ b/TestCases/nicf/edge/edge_PPR.cfg @@ -50,7 +50,7 @@ MARKER_MONITORING= ( WALL1 ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= GREEN_GAUSS -CFL_NUMBER= 2.5 +CFL_NUMBER= 100 CFL_ADAPT= YES CFL_ADAPT_PARAM= ( 0.9, 1.1, 1.0, 200.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) @@ -60,16 +60,16 @@ ITER= 51 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 10 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +MG_POST_SMOOTH= ( 1, 1, 1, 1 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) MG_DAMP_RESTRICTION= 0.9 MG_DAMP_PROLONGATION= 0.9 diff --git a/TestCases/nicf/edge/edge_VW.cfg b/TestCases/nicf/edge/edge_VW.cfg index 8d6eb4a13f1e..bf6d02e44d2c 100644 --- a/TestCases/nicf/edge/edge_VW.cfg +++ b/TestCases/nicf/edge/edge_VW.cfg @@ -51,7 +51,7 @@ MARKER_MONITORING= ( WALL1 ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= GREEN_GAUSS -CFL_NUMBER= 2.0 +CFL_NUMBER= 100 CFL_ADAPT= YES CFL_ADAPT_PARAM= ( 0.9, 1.1, 1.0, 200.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) @@ -61,18 +61,18 @@ ITER= 500 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 10 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) MG_POST_SMOOTH= ( 1, 1, 1, 1 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.85 -MG_DAMP_PROLONGATION= 0.85 +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg index 62728da55a69..d30538b6cdde 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg @@ -51,20 +51,20 @@ CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER=1 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ILU_FILL_IN= 0 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg index 435729bcf38b..9720823cc3c8 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg @@ -52,8 +52,8 @@ CFL_ADAPT_PARAM= ( 0.1, 2.0, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER=1 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ILU_FILL_IN= 0 @@ -61,13 +61,13 @@ LINEAR_SOLVER_ILU_FILL_IN= 0 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg index 5e9d114473d7..229c1c99488b 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg @@ -52,20 +52,20 @@ CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER=1 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ILU_FILL_IN= 0 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg index 0f62bc8e5312..3bd6868099d6 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg @@ -54,20 +54,20 @@ CFL_ADAPT_PARAM= ( 0.1, 2.0, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER=1 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ILU_FILL_IN= 0 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg b/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg index e5a075994811..149ecaecf91b 100644 --- a/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg +++ b/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg @@ -74,18 +74,18 @@ CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) ITER= 99999 LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.9 -MG_DAMP_PROLONGATION= 0.9 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg index 5931802d7c07..6adf74ba02e0 100644 --- a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg +++ b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg @@ -55,18 +55,18 @@ ITER= 250 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 10 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 1.0 -MG_DAMP_PROLONGATION= 1.0 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % --------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg index c5514bff6f7e..616ccf3f3b83 100644 --- a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg +++ b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg @@ -53,18 +53,18 @@ ITER= 1000 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 1.0 -MG_DAMP_PROLONGATION= 1.0 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % --------------------- FLOW NUMERICAL METHOD DEFINITION ----------------------% % diff --git a/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg b/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg index 448fc73964db..f1af00397697 100644 --- a/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg +++ b/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg @@ -54,18 +54,18 @@ EXT_ITER= 10000 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-5 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.7 -MG_DAMP_PROLONGATION= 0.7 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg b/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg index 191e7219f518..19d1737885f1 100644 --- a/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg +++ b/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg @@ -47,18 +47,18 @@ CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) ITER= 10000 LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 2925725d1eb1..c729da516dec 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -220,7 +220,7 @@ def main(): channel.cfg_dir = "euler/channel" channel.cfg_file = "inv_channel_RK.cfg" channel.test_iter = 20 - channel.test_vals = [-2.343552, 3.197189, 0.123534, 0.148052] + channel.test_vals = [-2.305051, 3.237256, 0.125006, 0.154077] test_list.append(channel) # NACA0012 @@ -228,7 +228,7 @@ def main(): naca0012.cfg_dir = "euler/naca0012" naca0012.cfg_file = "inv_NACA0012_Roe.cfg" naca0012.test_iter = 20 - naca0012.test_vals = [-4.877597, -4.355615, 0.331699, 0.022976] + naca0012.test_vals = [-4.314738, -3.845428, 0.307738, 0.024670] test_list.append(naca0012) # Supersonic wedge @@ -236,7 +236,7 @@ def main(): wedge.cfg_dir = "euler/wedge" wedge.cfg_file = "inv_wedge_HLLC.cfg" wedge.test_iter = 20 - wedge.test_vals = [-1.296189, 4.375714, -0.235637, 0.041589] + wedge.test_vals = [-3.573085, 2.150321, -0.249533, 0.043953] test_list.append(wedge) # ONERA M6 Wing @@ -244,7 +244,7 @@ def main(): oneram6.cfg_dir = "euler/oneram6" oneram6.cfg_file = "inv_ONERAM6.cfg" oneram6.test_iter = 10 - oneram6.test_vals = [-11.457168, -10.921423, 0.280800, 0.008623] + oneram6.test_vals = [-11.525271, -10.995902, 0.280800, 0.008623] oneram6.timeout = 3200 test_list.append(oneram6) @@ -253,7 +253,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.802419, 1.735767, 0.301252, 0.019495] + fixedCL_naca0012.test_vals = [-3.919916, 1.592064, 0.300852, 0.019461] test_list.append(fixedCL_naca0012) # Polar sweep of the inviscid NACA0012 @@ -262,7 +262,7 @@ def main(): polar_naca0012.cfg_file = "inv_NACA0012.cfg" polar_naca0012.polar = True polar_naca0012.test_iter = 10 - polar_naca0012.test_vals = [-1.107467, 4.365654, 0.006796, 0.025216] + polar_naca0012.test_vals = [-1.206973, 4.234604, 0.013410, 0.073285] 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 @@ -319,7 +319,7 @@ def main(): flatplate.cfg_dir = "navierstokes/flatplate" flatplate.cfg_file = "lam_flatplate.cfg" flatplate.test_iter = 100 - flatplate.test_vals = [-7.436411, -1.956557, 0.001084, 0.036232, 2.361500, -2.325300, 0.000000, 0.000000] + flatplate.test_vals = [-6.397042, -0.919335, 0.001321, 0.025064, 2.361500, -2.336500, 0.000000, 0.000000] test_list.append(flatplate) # Custom objective function @@ -344,7 +344,7 @@ def main(): cylinder.cfg_dir = "navierstokes/cylinder" cylinder.cfg_file = "lam_cylinder.cfg" cylinder.test_iter = 25 - cylinder.test_vals = [-8.486555, -2.997719, -0.006044, 1.601479, 0.000000] + cylinder.test_vals = [-8.529918, -3.059339, 0.189560, 1.746170, 0.000000] test_list.append(cylinder) # Laminar cylinder (low Mach correction) @@ -352,7 +352,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.388898, -0.927029, -0.590968, -132.145318, 0.000000] + cylinder_lowmach.test_vals = [-6.603373, -1.141590, -0.715787, -63.545748, 0.000000] test_list.append(cylinder_lowmach) # 2D Poiseuille flow (body force driven with periodic inlet / outlet) @@ -369,7 +369,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.011765, -7.670052, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.004334, -7.534404, -0.000000, 2.089953] poiseuille_profile.test_vals_aarch64 = [-12.007498, -7.226926, -0.000000, 2.089953] test_list.append(poiseuille_profile) @@ -382,7 +382,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 = [-1.850422, -5.131788, 0.571589, 0.042386, 0.000000] + rae2822_sa.test_vals = [-2.172705, -5.465982, 0.292927, 0.103369, 0.000000] test_list.append(rae2822_sa) # RAE2822 SST @@ -390,7 +390,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 = [-0.509872, 5.867970, 0.575399, 0.016441, 0.000000] + rae2822_sst.test_vals = [-1.035662, 5.868036, 0.283073, 0.094756, 0.000000] test_list.append(rae2822_sst) # RAE2822 SST_SUST @@ -398,7 +398,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.464677, 5.867970, 0.575399, 0.016441] + rae2822_sst_sust.test_vals = [-2.542992, 5.868021, 0.283073, 0.094756] test_list.append(rae2822_sst_sust) # Flat plate @@ -406,7 +406,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 = [-3.944613, -6.827069, -0.192592, 0.023549] + turb_flatplate.test_vals = [-4.879863, -7.464877, -0.187760, 0.016260] test_list.append(turb_flatplate) # Flat plate (compressible) with species inlet @@ -414,7 +414,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 = [-3.901196, -1.030304, -1.390862, 1.596603, -3.294825, 9.000000, -6.033863, 5.000000, -6.604787, 10.000000, -5.749978, 0.999917, 0.999917] + 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] test_list.append(turb_flatplate_species) # Flat plate SST compressibility correction Wilcox @@ -586,7 +586,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.605858, -5.057159, 0.830274, -0.008419, 0.077910] + turb_naca0012_sst_restart_mg.test_vals = [-6.538846, -5.057149, 0.830238, -0.008740, 0.078171] turb_naca0012_sst_restart_mg.timeout = 3200 turb_naca0012_sst_restart_mg.tol = 0.000001 test_list.append(turb_naca0012_sst_restart_mg) @@ -600,7 +600,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 = [-7.155691, -6.591881, 0.531999, 0.008466] + inc_euler_naca0012.test_vals = [-5.984413, -5.104039, 0.523625, 0.008885] test_list.append(inc_euler_naca0012) # C-D nozzle with pressure inlet and mass flow outlet @@ -608,7 +608,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 = [-4.867594, -4.435604, -0.006083, 0.131415] + inc_nozzle.test_vals = [-5.594509, -4.878247, 0.005147, 0.139611] test_list.append(inc_nozzle) # Laminar wall mounted cylinder, Euler walls, cylinder wall diagonally split @@ -628,7 +628,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 = [-3.959383, -3.272502, -0.087725, 6.769520] + inc_lam_cylinder.test_vals = [-4.157264, -3.589125, -0.018681, 4.659302] test_list.append(inc_lam_cylinder) # Laminar sphere, Re=1. Last column: Cd=24/Re @@ -636,7 +636,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.377082, -9.393391, 0.121003, 25.782686] + inc_lam_sphere.test_vals = [-8.166398, -8.947226, 0.121003, 25.782690] test_list.append(inc_lam_sphere) # Buoyancy-driven cavity @@ -774,7 +774,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 = [-1.850422, 0.801378, 0.576701, -5.131788, 0.571589, 0.042386] + turbmod_sa_bsl_rae2822.test_vals = [-2.610446, 0.335724, -0.118510, -5.463071, 0.765741, 0.028251] test_list.append(turbmod_sa_bsl_rae2822) # SA Negative @@ -791,7 +791,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 = [-1.850425, 0.801375, 0.576699, -5.131880, 0.571592, 0.042388] + turbmod_sa_comp_rae2822.test_vals = [-2.610449, 0.335720, -0.118515, -5.468848, 0.765768, 0.028257] test_list.append(turbmod_sa_comp_rae2822) # SA Edwards @@ -799,7 +799,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 = [-1.850407, 0.801397, 0.576716, -5.168509, 0.571594, 0.042384] + turbmod_sa_edw_rae2822.test_vals = [-2.609968, 0.336105, -0.118179, -6.022707, 0.765928, 0.028192] test_list.append(turbmod_sa_edw_rae2822) # SA Compressibility and Edwards @@ -807,7 +807,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 = [-1.850411, 0.801392, 0.576713, -5.168535, 0.571597, 0.042387] + turbmod_sa_comp_edw_rae2822.test_vals = [-2.610041, 0.336057, -0.118225, -6.023847, 0.765944, 0.028196] test_list.append(turbmod_sa_comp_edw_rae2822) # SA QCR @@ -815,7 +815,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 = [-1.848614, 0.801975, 0.578549, -5.131053, 0.571093, 0.042439] + turbmod_sa_qcr_rae2822.test_vals = [-2.320855, 0.512787, 0.108026, -5.449178, 0.770698, 0.026693] test_list.append(turbmod_sa_qcr_rae2822) ############################ @@ -839,7 +839,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.583496, -15.034977, -0.726250, 0.020280] + contadj_naca0012.test_vals = [-9.520784, -15.101278, -0.726250, 0.020280] contadj_naca0012.test_vals_aarch64 = [-9.662546, -14.998818, -0.726250, 0.020280] test_list.append(contadj_naca0012) @@ -848,7 +848,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 = [-11.981260, -12.515067, -1.086100, 0.007556] + contadj_oneram6.test_vals = [-12.069374, -12.632463, -1.086100, 0.007556] test_list.append(contadj_oneram6) # Inviscid WEDGE: tests averaged outflow total pressure adjoint @@ -864,7 +864,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 = [0.838756, -4.799730, -0.372690, -0.000630] + contadj_fixed_CL_naca0012.test_vals = [1.154889, -4.342907, -0.075177, -0.007496] test_list.append(contadj_fixed_CL_naca0012) ################################### @@ -876,7 +876,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.600450, -9.041799, 2.056700, -0.000000] + contadj_ns_cylinder.test_vals = [-3.589714, -9.027143, 2.056700, -0.000000] test_list.append(contadj_ns_cylinder) # Adjoint laminar naca0012 subsonic @@ -920,7 +920,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.385804, -10.889762, -0.212470, 0.005448] + contadj_rans_rae2822.test_vals = [-5.399633, -10.904666, -0.212470, 0.005448] test_list.append(contadj_rans_rae2822) ############################# @@ -1000,7 +1000,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.412607, 4.090722, -0.021973, 0.057457] + rot_naca0012.test_vals = [-1.302487, 4.220598, -0.002152, 0.124241] test_list.append(rot_naca0012) # Lid-driven cavity @@ -1008,7 +1008,7 @@ def main(): cavity.cfg_dir = "moving_wall/cavity" cavity.cfg_file = "lam_cavity.cfg" cavity.test_iter = 25 - cavity.test_vals = [-5.450215, 0.015635, 0.011950, -9.224629] + cavity.test_vals = [-8.194578, -2.735580, 0.005612, -0.019805] test_list.append(cavity) # Spinning cylinder @@ -1016,7 +1016,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.707122, -2.253704, 1.633997, 1.546081] + spinning_cylinder.test_vals = [-7.716789, -2.257294, 2.054821, 1.660858] test_list.append(spinning_cylinder) ###################################### @@ -1037,7 +1037,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.010227, -0.007902] + sine_gust.test_vals = [-1.977498, 3.481817, -0.010372, -0.005217] sine_gust.unsteady = True test_list.append(sine_gust) @@ -1046,7 +1046,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.075680, 0.027563, -0.001642, -0.000127] + aeroelastic.test_vals = [0.073686, 0.027423, -0.001644, -0.000125] aeroelastic.unsteady = True test_list.append(aeroelastic) @@ -1085,16 +1085,16 @@ def main(): edge_VW = TestCase('edge_VW') edge_VW.cfg_dir = "nicf/edge" edge_VW.cfg_file = "edge_VW.cfg" - edge_VW.test_iter = 50 - edge_VW.test_vals = [-2.386376, 3.814463, -0.000009, 0.000000] + edge_VW.test_iter = 25 + edge_VW.test_vals = [-3.178712, 3.023048, -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 = 50 - edge_PPR.test_vals = [-12.063410, -5.872787, -0.000034, 0.000000] + edge_PPR.test_iter = 25 + edge_PPR.test_vals = [-9.020461, -2.870274, -0.000034, 0.000000] test_list.append(edge_PPR) # Rarefaction Q1D nozzle, include CoolProp fluid model @@ -1241,7 +1241,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.623154, -1.660901] + bars_SST_2D.test_vals = [13.000000, -0.472766, -1.559919] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) @@ -1322,7 +1322,7 @@ def main(): nonlinear_plane_stress.cfg_dir = "fea_fsi/VonMissesVerif" nonlinear_plane_stress.cfg_file = "nonlinear_plane_stress_2d.cfg" nonlinear_plane_stress.test_iter = 19 - nonlinear_plane_stress.test_vals = [-7.433449, -3.355607, -13.983863, 162480, 43, -4.070373] + nonlinear_plane_stress.test_vals = [-7.433449, -3.355607, -13.983863, 162480.000000, 43.000000, -4.070373] test_list.append(nonlinear_plane_stress) # Dynamic beam, 2d @@ -1449,7 +1449,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 = [-9.980225, -9.402767, 0.335769, 0.023275] + pywrapper_naca0012.test_vals = [-7.755848, -7.082517, 0.335769, 0.023275] pywrapper_naca0012.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") test_list.append(pywrapper_naca0012) @@ -1479,7 +1479,7 @@ def main(): pywrapper_aeroelastic.cfg_dir = "aeroelastic" pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [0.075680, 0.027563, -0.001642, -0.000127] + pywrapper_aeroelastic.test_vals = [0.073686, 0.027423, -0.001644, -0.000125] pywrapper_aeroelastic.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") pywrapper_aeroelastic.unsteady = True test_list.append(pywrapper_aeroelastic) @@ -1520,7 +1520,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.614167, 2.260123, -0.002469, 0.100260] + pywrapper_unsteadyCHT.test_vals = [-1.614168, 2.259984, -0.005601, 0.129785] 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 5a6bbef85a62..9e4863cc42ba 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -63,7 +63,7 @@ def main(): discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k" discadj_arina2k.cfg_file = "Arina2KRS.cfg" discadj_arina2k.test_iter = 20 - discadj_arina2k.test_vals = [-3.259547, -3.544519, 0.044517, 0.000000] + discadj_arina2k.test_vals = [-2.931649, -3.356322, 0.073332, 0.000000] test_list.append(discadj_arina2k) # Equivalent area NACA64-206 @@ -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.949889, -2.567232, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -3.319959, -2.489110, 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.226498, -1.653107, -0.003489, -0.000000] + discadj_pitchingNACA0012.test_vals = [-1.126077, -1.582787, -0.005904, 0.000009] 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, 0.697136, 0.459036, 0.536525, -0.995531] + discadj_trans_stator.test_vals = [79.000000, 2.599437, 2.336310, 2.141020, 0.786888] 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/custom_inlet/lam_flatplate.cfg b/TestCases/py_wrapper/custom_inlet/lam_flatplate.cfg index bc9ea1fc61f0..3660dd1d6e1c 100644 --- a/TestCases/py_wrapper/custom_inlet/lam_flatplate.cfg +++ b/TestCases/py_wrapper/custom_inlet/lam_flatplate.cfg @@ -60,10 +60,11 @@ CFL_NUMBER= 1e3 CFL_ADAPT= NO TIME_DISCRE_FLOW= EULER_IMPLICIT % -MGLEVEL= 2 +MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 1, 1 ) -MG_POST_SMOOTH= ( 0, 0, 0 ) +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) MG_DAMP_RESTRICTION= 0.5 MG_DAMP_PROLONGATION= 0.5 @@ -71,8 +72,8 @@ MG_DAMP_PROLONGATION= 0.5 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 0.2 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/py_wrapper/rotating_cylinder/spinning_cylinder.cfg b/TestCases/py_wrapper/rotating_cylinder/spinning_cylinder.cfg index 5e2bcaa06928..73c0fe931be0 100644 --- a/TestCases/py_wrapper/rotating_cylinder/spinning_cylinder.cfg +++ b/TestCases/py_wrapper/rotating_cylinder/spinning_cylinder.cfg @@ -30,7 +30,7 @@ REYNOLDS_LENGTH= 1.0 SURFACE_MOVEMENT= MOVING_WALL MACH_MOTION= 0.1 MARKER_MOVING= ( cylinder ) -SURFACE_MOTION_ORIGIN= 0.5 0.0 0.0 +SURFACE_MOTION_ORIGIN= 0.5 0.0 0.0 SURFACE_ROTATION_RATE = 0.0 0.0 -199.0738 % ---------------------- REFERENCE VALUE DEFINITION ---------------------------% @@ -67,16 +67,16 @@ SENS_REMOVE_SHARP= NO % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 1, 1, 1 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) MG_DAMP_RESTRICTION= 0.5 MG_DAMP_PROLONGATION= 0.5 diff --git a/TestCases/py_wrapper/translating_NACA0012/config.cfg b/TestCases/py_wrapper/translating_NACA0012/config.cfg index 3deaf8fc1b62..adfce41ed713 100644 --- a/TestCases/py_wrapper/translating_NACA0012/config.cfg +++ b/TestCases/py_wrapper/translating_NACA0012/config.cfg @@ -9,12 +9,12 @@ RESTART_SOL= NO % % We are translating the domain instead of having farfield velocity. % Note: The rotating frame is intended for 3D cases. To use the feature in a 2D case, -% care must be taken with respect to the axes, e.g. to obtain a pitching motion, a +% care must be taken with respect to the axes, e.g. to obtain a pitching motion, a % rotation about the z-axis can be used. GRID_MOVEMENT= ROTATING_FRAME MOTION_ORIGIN= 0.0, 0.0, 0.0 -ROTATION_RATE= 0.0, 0.0, 0.5 -TRANSLATION_RATE= -264.994, -5.78219, 0.0 +ROTATION_RATE= 0.0, 0.0, 0.5 +TRANSLATION_RATE= -264.994, -5.78219, 0.0 MACH_NUMBER= 0.0 FREESTREAM_PRESSURE= 101325.0 FREESTREAM_TEMPERATURE= 273.15 @@ -55,17 +55,17 @@ CFL_ADAPT= NO % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.7 -MG_DAMP_PROLONGATION= 0.7 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 0.1 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % CONVERGENCE PARAMETERS % diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index d715ec6cdcc1..782f0d2d8060 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.86, -0.00, 0.00 -0, -2.65, 18.23, 0.00 -1, -3.76, 25.89, 0.00 -2, -4.65, 32.09, 0.00 -3, -5.46, 37.74, 0.00 -4, -6.13, 42.56, 0.00 -5, -6.71, 46.69, 0.00 -6, -7.16, 50.07, 0.00 -7, -7.53, 52.90, 0.00 -8, -7.76, 54.82, 0.00 -9, -7.90, 56.13, 0.00 -10, -7.93, 56.70, 0.00 -11, -7.90, 56.91, 0.00 -12, -7.75, 56.22, 0.00 -13, -7.57, 55.39, 0.00 -14, -7.26, 53.59, 0.00 -15, -6.89, 51.30, 0.00 -16, -6.44, 48.47, 0.00 -17, -5.99, 45.51, 0.00 -18, -5.40, 41.51, 0.00 -19, -4.79, 37.20, 0.00 -20, -4.13, 32.43, 0.00 -21, -3.45, 27.41, 0.00 -22, -2.67, 21.54, 0.00 -23, -1.89, 15.41, 0.00 -24, -1.09, 9.05, 0.00 -25, -0.31, 2.56, 0.00 -26, 0.57, -4.88, 0.00 -27, 1.43, -12.39, 0.00 -28, 2.29, -20.08, 0.00 -29, 3.06, -27.24, 0.00 -30, 3.89, -35.25, 0.00 -31, 4.75, -43.77, 0.00 -32, 5.63, -52.86, 0.00 -33, 6.43, -61.46, 0.00 -34, 7.32, -71.39, 0.00 -35, 8.22, -81.78, 0.00 -36, 9.08, -92.31, 0.00 -37, 9.89, -102.78, 0.00 -38, 10.69, -113.72, 0.00 -39, 11.47, -125.13, 0.00 -40, 12.18, -136.48, 0.00 -41, 12.94, -149.09, 0.00 -42, 13.63, -161.87, 0.00 -43, 14.33, -175.75, 0.00 -44, 14.84, -188.45, 0.00 -45, 15.37, -202.73, 0.00 -46, 15.64, -214.91, 0.00 -47, 16.02, -230.07, 0.00 -48, 16.07, -242.38, 0.00 -49, 16.04, -255.31, 0.00 -50, 15.75, -266.07, 0.00 -51, 15.41, -278.35, 0.00 -52, 14.99, -291.85, 0.00 -53, 14.69, -311.51, 0.00 -54, 14.03, -328.05, 0.00 -55, 13.22, -346.63, 0.00 -56, 11.58, -347.88, 0.00 -57, 9.48, -336.06, 0.00 -58, 7.63, -333.70, 0.00 -59, 6.69, -387.45, 0.00 -60, 5.25, -460.90, 0.00 -61, 2.49, -475.82, 0.00 -62, -0.58, -468.44, 0.00 -63, -3.64, -454.65, 0.00 -64, -6.73, -444.52, 0.00 -65, -9.62, -425.48, 0.00 -66, -12.57, -412.95, 0.00 -67, -15.42, -398.58, 0.00 -68, -18.20, -384.41, 0.00 -69, -20.74, -367.51, 0.00 -70, -23.30, -352.80, 0.00 -71, -25.57, -335.76, 0.00 -72, -27.15, -312.68, 0.00 -73, -28.23, -287.64, 0.00 -74, -30.47, -276.68, 0.00 -75, -32.56, -264.93, 0.00 -76, -32.95, -241.41, 0.00 -77, -33.96, -224.77, 0.00 -78, -35.35, -211.94, 0.00 -79, -35.57, -193.60, 0.00 -80, -33.74, -166.92, 0.00 -81, -37.96, -170.78, 0.00 -82, -35.41, -144.86, 0.00 -83, -35.53, -132.10, 0.00 -84, -30.07, -101.42, 0.00 -85, -26.51, -80.93, 0.00 -86, -20.60, -56.73, 0.00 -87, -16.53, -40.87, 0.00 -88, -10.32, -22.78, 0.00 -89, -1.78, -3.49, 0.00 -90, 5.56, 9.54, 0.00 -91, 13.08, 19.45, 0.00 -92, 20.82, 26.37, 0.00 -93, 41.34, 43.59, 0.00 -94, 56.70, 48.17, 0.00 -95, 86.67, 56.45, 0.00 -96, 94.24, 43.20, 0.00 -97, 124.52, 33.70, 0.00 -98, 95.89, 12.87, 0.00 -99, 56.96, -0.00, 0.00 -100, 87.55, -11.75, 0.00 -101, 76.99, -20.84, 0.00 -102, 46.64, -21.38, 0.00 -103, 27.47, -17.89, 0.00 -104, 9.68, -8.22, 0.00 -105, -19.36, 20.42, 0.00 -106, -24.54, 31.07, 0.00 -107, -36.12, 53.70, 0.00 -108, -39.92, 68.49, 0.00 -109, -46.04, 90.04, 0.00 -110, -50.48, 111.42, 0.00 -111, -53.58, 132.47, 0.00 -112, -55.98, 154.13, 0.00 -113, -58.11, 177.39, 0.00 -114, -61.20, 206.40, 0.00 -115, -62.47, 232.26, 0.00 -116, -62.39, 255.28, 0.00 -117, -62.07, 279.29, 0.00 -118, -61.73, 305.38, 0.00 -119, -60.90, 331.50, 0.00 -120, -59.52, 356.86, 0.00 -121, -57.20, 378.58, 0.00 -122, -54.90, 402.16, 0.00 -123, -52.07, 423.70, 0.00 -124, -49.20, 446.69, 0.00 -125, -45.88, 467.53, 0.00 -126, -42.63, 490.92, 0.00 -127, -39.04, 512.69, 0.00 -128, -35.26, 534.03, 0.00 -129, -31.36, 555.63, 0.00 -130, -27.27, 576.05, 0.00 -131, -23.01, 594.86, 0.00 -132, -18.68, 613.47, 0.00 -133, -14.28, 631.83, 0.00 -134, -9.82, 648.99, 0.00 -135, -5.33, 665.19, 0.00 -136, -0.84, 680.91, 0.00 -137, 3.65, 697.90, 0.00 -138, 8.11, 711.95, 0.00 -139, 12.54, 725.96, 0.00 -140, 16.89, 738.46, 0.00 -141, 21.14, 749.55, 0.00 -142, 25.30, 759.68, 0.00 -143, 29.32, 768.68, 0.00 -144, 33.23, 776.92, 0.00 -145, 37.07, 785.93, 0.00 -146, 40.69, 791.99, 0.00 -147, 44.12, 796.75, 0.00 -148, 47.39, 800.59, 0.00 -149, 50.60, 805.39, 0.00 -150, 53.53, 807.33, 0.00 -151, 56.24, 807.80, 0.00 -152, 58.72, 806.69, 0.00 -153, 61.82, 815.20, 0.00 -154, 64.19, 815.25, 0.00 -155, 67.21, 824.40, 0.00 -156, 71.43, 848.24, 0.00 -157, 39.92, 460.00, 0.00 -158, 4.29, 48.09, 0.00 -159, 17.77, 193.92, 0.00 -160, 21.23, 225.97, 0.00 -161, 10.74, 111.65, 0.00 -162, 9.33, 94.79, 0.00 -163, 6.98, 69.42, 0.00 -164, 6.08, 59.32, 0.00 -165, 4.35, 41.60, 0.00 -166, 3.64, 34.13, 0.00 -167, 2.62, 24.13, 0.00 -168, 1.95, 17.64, 0.00 -169, 1.16, 10.32, 0.00 -170, 0.46, 4.05, 0.00 -171, -0.36, -3.14, 0.00 -172, -1.08, -9.18, 0.00 -173, -1.74, -14.63, 0.00 -174, -2.38, -19.72, 0.00 -175, -3.04, -24.84, 0.00 -176, -3.71, -29.86, 0.00 -177, -4.30, -34.19, 0.00 -178, -4.90, -38.47, 0.00 -179, -5.43, -42.17, 0.00 -180, -5.99, -46.01, 0.00 -181, -6.42, -48.81, 0.00 -182, -6.86, -51.59, 0.00 -183, -7.19, -53.60, 0.00 -184, -7.54, -55.68, 0.00 -185, -7.71, -56.39, 0.00 -186, -7.94, -57.63, 0.00 -187, -7.98, -57.50, 0.00 -188, -8.00, -57.19, 0.00 -189, -7.94, -56.41, 0.00 -190, -7.77, -54.88, 0.00 -191, -7.47, -52.50, 0.00 -192, -7.09, -49.57, 0.00 -193, -6.59, -45.88, 0.00 -194, -6.01, -41.72, 0.00 -195, -5.29, -36.63, 0.00 -196, -4.48, -30.94, 0.00 -197, -3.58, -24.65, 0.00 -198, -2.49, -17.12, 0.00 +199, -0.88, -0.00, 0.00 +0, -2.74, 18.87, 0.00 +1, -4.00, 27.56, 0.00 +2, -4.94, 34.10, 0.00 +3, -5.93, 41.01, 0.00 +4, -6.68, 46.33, 0.00 +5, -7.33, 51.03, 0.00 +6, -7.86, 54.95, 0.00 +7, -8.30, 58.28, 0.00 +8, -8.60, 60.75, 0.00 +9, -8.85, 62.89, 0.00 +10, -8.96, 64.06, 0.00 +11, -9.01, 64.88, 0.00 +12, -8.93, 64.80, 0.00 +13, -8.77, 64.14, 0.00 +14, -8.51, 62.83, 0.00 +15, -8.19, 61.03, 0.00 +16, -7.81, 58.73, 0.00 +17, -7.52, 57.17, 0.00 +18, -6.97, 53.51, 0.00 +19, -6.23, 48.37, 0.00 +20, -5.59, 43.91, 0.00 +21, -4.89, 38.89, 0.00 +22, -4.16, 33.52, 0.00 +23, -3.27, 26.73, 0.00 +24, -2.44, 20.19, 0.00 +25, -1.23, 10.28, 0.00 +26, -0.37, 3.17, 0.00 +27, 0.97, -8.37, 0.00 +28, 1.86, -16.27, 0.00 +29, 3.20, -28.55, 0.00 +30, 3.94, -35.67, 0.00 +31, 5.22, -48.09, 0.00 +32, 6.02, -56.52, 0.00 +33, 7.59, -72.59, 0.00 +34, 8.24, -80.30, 0.00 +35, 9.39, -93.40, 0.00 +36, 9.92, -100.86, 0.00 +37, 10.54, -109.58, 0.00 +38, 11.01, -117.21, 0.00 +39, 10.95, -119.48, 0.00 +40, 11.48, -128.65, 0.00 +41, 10.97, -126.35, 0.00 +42, 11.91, -141.43, 0.00 +43, 12.30, -150.90, 0.00 +44, 13.37, -169.77, 0.00 +45, 14.68, -193.53, 0.00 +46, 15.80, -217.03, 0.00 +47, 19.25, -276.51, 0.00 +48, 19.53, -294.59, 0.00 +49, 22.26, -354.30, 0.00 +50, 20.96, -354.19, 0.00 +51, 20.16, -364.14, 0.00 +52, 18.40, -358.18, 0.00 +53, 16.69, -353.80, 0.00 +54, 15.07, -352.32, 0.00 +55, 12.98, -340.39, 0.00 +56, 11.19, -336.20, 0.00 +57, 8.60, -304.96, 0.00 +58, 7.16, -313.01, 0.00 +59, 6.01, -347.70, 0.00 +60, 4.70, -412.79, 0.00 +61, 2.33, -445.52, 0.00 +62, -0.55, -443.29, 0.00 +63, -3.42, -427.14, 0.00 +64, -6.31, -417.03, 0.00 +65, -8.94, -395.68, 0.00 +66, -11.64, -382.49, 0.00 +67, -14.13, -365.39, 0.00 +68, -16.51, -348.88, 0.00 +69, -18.69, -331.14, 0.00 +70, -20.72, -313.74, 0.00 +71, -22.32, -293.09, 0.00 +72, -23.72, -273.12, 0.00 +73, -24.63, -251.02, 0.00 +74, -25.83, -234.51, 0.00 +75, -26.33, -214.23, 0.00 +76, -26.92, -197.22, 0.00 +77, -26.80, -177.38, 0.00 +78, -26.94, -161.54, 0.00 +79, -26.13, -142.24, 0.00 +80, -25.19, -124.64, 0.00 +81, -22.82, -102.67, 0.00 +82, -21.57, -88.23, 0.00 +83, -19.26, -71.61, 0.00 +84, -17.97, -60.61, 0.00 +85, -15.93, -48.61, 0.00 +86, -12.97, -35.71, 0.00 +87, -8.42, -20.82, 0.00 +88, -5.98, -13.21, 0.00 +89, -8.03, -15.71, 0.00 +90, 4.80, 8.23, 0.00 +91, 4.36, 6.47, 0.00 +92, 11.84, 14.99, 0.00 +93, 0.32, 0.34, 0.00 +94, 11.38, 9.67, 0.00 +95, 45.23, 29.46, 0.00 +96, 48.26, 22.12, 0.00 +97, -197.68, -53.50, 0.00 +98, -125.90, -16.89, 0.00 +99, 14.92, -0.00, 0.00 +100, 79.73, -10.70, 0.00 +101, 186.44, -50.46, 0.00 +102, 187.22, -85.81, 0.00 +103, 135.06, -87.97, 0.00 +104, 119.91, -101.86, 0.00 +105, 79.10, -83.40, 0.00 +106, 59.63, -75.52, 0.00 +107, 30.90, -45.94, 0.00 +108, 22.56, -38.71, 0.00 +109, -4.56, 8.92, 0.00 +110, -9.71, 21.43, 0.00 +111, -21.99, 54.38, 0.00 +112, -24.51, 67.48, 0.00 +113, -34.81, 106.26, 0.00 +114, -39.06, 131.73, 0.00 +115, -43.87, 163.08, 0.00 +116, -44.80, 183.28, 0.00 +117, -47.81, 215.10, 0.00 +118, -48.21, 238.52, 0.00 +119, -49.89, 271.53, 0.00 +120, -49.93, 299.38, 0.00 +121, -49.00, 324.32, 0.00 +122, -47.34, 346.82, 0.00 +123, -45.93, 373.77, 0.00 +124, -43.73, 397.06, 0.00 +125, -41.62, 424.09, 0.00 +126, -38.87, 447.69, 0.00 +127, -36.04, 473.29, 0.00 +128, -32.71, 495.38, 0.00 +129, -29.18, 517.04, 0.00 +130, -25.50, 538.64, 0.00 +131, -21.67, 560.11, 0.00 +132, -17.65, 579.80, 0.00 +133, -13.60, 601.56, 0.00 +134, -9.38, 619.71, 0.00 +135, -5.13, 640.08, 0.00 +136, -0.81, 656.70, 0.00 +137, 3.53, 674.34, 0.00 +138, 7.85, 688.58, 0.00 +139, 12.18, 704.99, 0.00 +140, 16.41, 717.64, 0.00 +141, 20.57, 729.02, 0.00 +142, 24.63, 739.65, 0.00 +143, 28.56, 748.77, 0.00 +144, 32.40, 757.51, 0.00 +145, 36.12, 765.59, 0.00 +146, 39.66, 772.06, 0.00 +147, 43.13, 778.88, 0.00 +148, 46.36, 783.25, 0.00 +149, 49.60, 789.39, 0.00 +150, 52.48, 791.53, 0.00 +151, 55.47, 796.64, 0.00 +152, 57.83, 794.45, 0.00 +153, 57.34, 756.10, 0.00 +154, 59.99, 761.83, 0.00 +155, 69.07, 847.19, 0.00 +156, 69.33, 823.32, 0.00 +157, 53.10, 611.85, 0.00 +158, 40.29, 451.37, 0.00 +159, 43.59, 475.55, 0.00 +160, 49.17, 523.27, 0.00 +161, 18.54, 192.66, 0.00 +162, 14.94, 151.89, 0.00 +163, 8.48, 84.34, 0.00 +164, 7.58, 73.94, 0.00 +165, 3.72, 35.56, 0.00 +166, 2.83, 26.52, 0.00 +167, 1.26, 11.65, 0.00 +168, 0.55, 5.03, 0.00 +169, -0.64, -5.72, 0.00 +170, -1.47, -12.88, 0.00 +171, -2.41, -20.82, 0.00 +172, -3.12, -26.59, 0.00 +173, -3.82, -32.02, 0.00 +174, -4.48, -37.03, 0.00 +175, -5.61, -45.76, 0.00 +176, -6.31, -50.81, 0.00 +177, -6.84, -54.39, 0.00 +178, -7.42, -58.32, 0.00 +179, -7.79, -60.51, 0.00 +180, -8.26, -63.45, 0.00 +181, -8.73, -66.31, 0.00 +182, -9.08, -68.30, 0.00 +183, -9.46, -70.51, 0.00 +184, -9.69, -71.54, 0.00 +185, -9.74, -71.24, 0.00 +186, -9.78, -70.95, 0.00 +187, -9.85, -70.97, 0.00 +188, -9.79, -70.04, 0.00 +189, -9.43, -66.99, 0.00 +190, -9.12, -64.44, 0.00 +191, -8.61, -60.49, 0.00 +192, -8.09, -56.58, 0.00 +193, -7.41, -51.57, 0.00 +194, -6.72, -46.59, 0.00 +195, -5.79, -40.06, 0.00 +196, -4.88, -33.67, 0.00 +197, -3.73, -25.71, 0.00 +198, -2.60, -17.88, 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 5806f25e7d0a..053828f96eb3 100644 --- a/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg +++ b/TestCases/py_wrapper/updated_moving_frame_NACA12/config.cfg @@ -9,7 +9,7 @@ RESTART_SOL= NO % % We are translating the domain instead of having farfield velocity. % Note: The rotating frame is intended for 3D cases. To use the feature in a 2D case, -% care must be taken with respect to the axes, e.g. to obtain a pitching motion, a +% care must be taken with respect to the axes, e.g. to obtain a pitching motion, a % rotation about the z-axis can be used. GRID_MOVEMENT= ROTATING_FRAME MOTION_ORIGIN= 0.0, 0.0, 0.0 @@ -50,13 +50,13 @@ VENKAT_LIMITER_COEFF= 0.1 % SOLUTION ACCELERATION % -CFL_NUMBER= 100 +CFL_NUMBER= 50 CFL_ADAPT= NO % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 1, 1, 1, 1 ) +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) MG_DAMP_RESTRICTION= 0.5 MG_DAMP_PROLONGATION= 0.5 @@ -64,7 +64,7 @@ MG_DAMP_PROLONGATION= 0.5 LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ERROR= 0.1 -LINEAR_SOLVER_ITER= 10 +LINEAR_SOLVER_ITER= 3 % CONVERGENCE PARAMETERS % 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 4e95fa24a0e5..1e7ab436b72a 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.86, -0.00, 0.00 -0, -2.63, 18.11, 0.00 -1, -3.63, 25.00, 0.00 -2, -4.49, 31.01, 0.00 -3, -5.27, 36.45, 0.00 -4, -5.94, 41.20, 0.00 -5, -6.49, 45.19, 0.00 -6, -6.94, 48.51, 0.00 -7, -7.30, 51.25, 0.00 -8, -7.53, 53.19, 0.00 -9, -7.69, 54.61, 0.00 -10, -7.73, 55.29, 0.00 -11, -7.72, 55.60, 0.00 -12, -7.59, 55.07, 0.00 -13, -7.40, 54.17, 0.00 -14, -7.11, 52.49, 0.00 -15, -6.79, 50.55, 0.00 -16, -6.37, 47.90, 0.00 -17, -5.91, 44.92, 0.00 -18, -5.36, 41.14, 0.00 -19, -4.80, 37.28, 0.00 -20, -4.15, 32.62, 0.00 -21, -3.50, 27.86, 0.00 -22, -2.78, 22.37, 0.00 -23, -2.06, 16.81, 0.00 -24, -1.27, 10.52, 0.00 -25, -0.50, 4.21, 0.00 -26, 0.33, -2.80, 0.00 -27, 1.15, -9.97, 0.00 -28, 2.04, -17.86, 0.00 -29, 2.85, -25.42, 0.00 -30, 3.69, -33.44, 0.00 -31, 4.48, -41.33, 0.00 -32, 5.36, -50.31, 0.00 -33, 6.18, -59.06, 0.00 -34, 7.05, -68.72, 0.00 -35, 7.84, -78.03, 0.00 -36, 8.69, -88.33, 0.00 -37, 9.43, -98.01, 0.00 -38, 10.23, -108.84, 0.00 -39, 10.92, -119.14, 0.00 -40, 11.63, -130.32, 0.00 -41, 12.28, -141.50, 0.00 -42, 12.91, -153.33, 0.00 -43, 13.43, -164.72, 0.00 -44, 13.81, -175.34, 0.00 -45, 14.01, -184.69, 0.00 -46, 14.17, -194.64, 0.00 -47, 14.35, -206.11, 0.00 -48, 14.35, -216.45, 0.00 -49, 14.66, -233.35, 0.00 -50, 14.44, -243.91, 0.00 -51, 13.23, -239.01, 0.00 -52, 9.28, -180.73, 0.00 -53, 10.93, -231.67, 0.00 -54, 22.42, -524.14, 0.00 -55, 23.41, -613.61, 0.00 -56, 19.80, -594.50, 0.00 -57, 16.27, -576.89, 0.00 -58, 13.02, -569.14, 0.00 -59, 9.66, -559.58, 0.00 -60, 6.26, -549.57, 0.00 -61, 2.81, -536.89, 0.00 -62, -0.65, -524.68, 0.00 -63, -4.08, -509.47, 0.00 -64, -7.50, -495.51, 0.00 -65, -10.82, -478.63, 0.00 -66, -14.09, -462.77, 0.00 -67, -17.20, -444.59, 0.00 -68, -20.22, -427.15, 0.00 -69, -22.98, -407.10, 0.00 -70, -25.67, -388.75, 0.00 -71, -27.98, -367.48, 0.00 -72, -30.23, -348.11, 0.00 -73, -31.93, -325.35, 0.00 -74, -33.71, -306.06, 0.00 -75, -34.92, -284.17, 0.00 -76, -36.03, -263.97, 0.00 -77, -36.59, -242.17, 0.00 -78, -37.19, -222.97, 0.00 -79, -36.76, -200.07, 0.00 -80, -36.54, -180.76, 0.00 -81, -35.69, -160.58, 0.00 -82, -34.73, -142.08, 0.00 -83, -32.59, -121.17, 0.00 -84, -30.29, -102.16, 0.00 -85, -26.60, -81.19, 0.00 -86, -22.96, -63.22, 0.00 -87, -15.77, -38.98, 0.00 -88, -10.68, -23.57, 0.00 -89, -2.62, -5.11, 0.00 -90, 2.96, 5.08, 0.00 -91, 10.30, 15.31, 0.00 -92, 19.77, 25.04, 0.00 -93, 17.81, 18.78, 0.00 -94, 23.65, 20.09, 0.00 -95, 12.09, 7.87, 0.00 -96, 11.10, 5.09, 0.00 -97, 33.12, 8.96, 0.00 -98, 30.07, 4.03, 0.00 -99, 6.42, -0.00, 0.00 -100, 26.15, -3.51, 0.00 -101, 36.45, -9.86, 0.00 -102, 30.00, -13.75, 0.00 -103, 31.67, -20.63, 0.00 -104, 13.92, -11.83, 0.00 -105, 11.86, -12.50, 0.00 -106, -3.05, 3.86, 0.00 -107, -9.48, 14.09, 0.00 -108, -15.43, 26.47, 0.00 -109, -23.77, 46.48, 0.00 -110, -29.37, 64.83, 0.00 -111, -36.14, 89.36, 0.00 -112, -39.14, 107.77, 0.00 -113, -43.76, 133.57, 0.00 -114, -46.73, 157.62, 0.00 -115, -48.66, 180.91, 0.00 -116, -49.42, 202.21, 0.00 -117, -50.43, 226.88, 0.00 -118, -50.47, 249.70, 0.00 -119, -50.38, 274.24, 0.00 -120, -49.39, 296.15, 0.00 -121, -48.36, 320.09, 0.00 -122, -46.69, 342.06, 0.00 -123, -44.98, 365.99, 0.00 -124, -42.69, 387.65, 0.00 -125, -40.38, 411.42, 0.00 -126, -37.70, 434.15, 0.00 -127, -34.80, 457.05, 0.00 -128, -31.59, 478.33, 0.00 -129, -28.21, 499.82, 0.00 -130, -24.60, 519.72, 0.00 -131, -20.90, 540.34, 0.00 -132, -17.01, 558.78, 0.00 -133, -13.08, 578.82, 0.00 -134, -9.02, 595.64, 0.00 -135, -4.92, 613.62, 0.00 -136, -0.78, 629.39, 0.00 -137, 3.38, 645.30, 0.00 -138, 7.51, 658.91, 0.00 -139, 11.63, 673.17, 0.00 -140, 15.67, 685.03, 0.00 -141, 19.64, 696.34, 0.00 -142, 23.51, 705.94, 0.00 -143, 27.29, 715.50, 0.00 -144, 30.93, 723.09, 0.00 -145, 34.51, 731.63, 0.00 -146, 37.87, 737.15, 0.00 -147, 41.12, 742.64, 0.00 -148, 44.13, 745.57, 0.00 -149, 47.11, 749.74, 0.00 -150, 49.67, 749.17, 0.00 -151, 52.81, 758.54, 0.00 -152, 56.11, 770.82, 0.00 -153, 31.65, 417.42, 0.00 -154, 3.15, 40.06, 0.00 -155, 10.66, 130.75, 0.00 -156, 12.98, 154.17, 0.00 -157, 9.56, 110.13, 0.00 -158, 8.57, 96.03, 0.00 -159, 7.81, 85.17, 0.00 -160, 7.42, 78.98, 0.00 -161, 6.93, 72.03, 0.00 -162, 6.41, 65.19, 0.00 -163, 5.87, 58.43, 0.00 -164, 5.27, 51.40, 0.00 -165, 4.67, 44.62, 0.00 -166, 3.99, 37.44, 0.00 -167, 3.31, 30.56, 0.00 -168, 2.58, 23.38, 0.00 -169, 1.85, 16.52, 0.00 -170, 1.09, 9.54, 0.00 -171, 0.38, 3.32, 0.00 -172, -0.36, -3.08, 0.00 -173, -1.06, -8.86, 0.00 -174, -1.80, -14.86, 0.00 -175, -2.49, -20.35, 0.00 -176, -3.20, -25.78, 0.00 -177, -3.83, -30.43, 0.00 -178, -4.46, -35.04, 0.00 -179, -5.01, -38.95, 0.00 -180, -5.56, -42.75, 0.00 -181, -6.03, -45.86, 0.00 -182, -6.49, -48.84, 0.00 -183, -6.85, -51.00, 0.00 -184, -7.19, -53.04, 0.00 -185, -7.40, -54.18, 0.00 -186, -7.60, -55.14, 0.00 -187, -7.66, -55.16, 0.00 -188, -7.69, -54.99, 0.00 -189, -7.63, -54.19, 0.00 -190, -7.48, -52.85, 0.00 -191, -7.21, -50.64, 0.00 -192, -6.86, -47.97, 0.00 -193, -6.39, -44.48, 0.00 -194, -5.85, -40.57, 0.00 -195, -5.16, -35.70, 0.00 -196, -4.39, -30.33, 0.00 -197, -3.53, -24.31, 0.00 -198, -2.53, -17.43, 0.00 +199, -0.92, -0.00, 0.00 +0, -2.82, 19.44, 0.00 +1, -3.96, 27.26, 0.00 +2, -4.94, 34.13, 0.00 +3, -5.83, 40.30, 0.00 +4, -6.56, 45.50, 0.00 +5, -7.20, 50.13, 0.00 +6, -7.69, 53.74, 0.00 +7, -8.11, 56.96, 0.00 +8, -8.36, 59.03, 0.00 +9, -8.58, 60.93, 0.00 +10, -8.62, 61.61, 0.00 +11, -8.64, 62.26, 0.00 +12, -8.50, 61.68, 0.00 +13, -8.38, 61.34, 0.00 +14, -8.07, 59.56, 0.00 +15, -7.78, 57.97, 0.00 +16, -7.34, 55.18, 0.00 +17, -6.93, 52.67, 0.00 +18, -6.35, 48.76, 0.00 +19, -5.80, 45.05, 0.00 +20, -5.13, 40.31, 0.00 +21, -4.50, 35.79, 0.00 +22, -3.74, 30.16, 0.00 +23, -2.98, 24.34, 0.00 +24, -2.17, 17.93, 0.00 +25, -1.32, 11.04, 0.00 +26, -0.49, 4.21, 0.00 +27, 0.41, -3.51, 0.00 +28, 1.27, -11.10, 0.00 +29, 2.10, -18.72, 0.00 +30, 2.92, -26.44, 0.00 +31, 3.77, -34.73, 0.00 +32, 4.60, -43.16, 0.00 +33, 5.42, -51.86, 0.00 +34, 6.20, -60.46, 0.00 +35, 6.96, -69.21, 0.00 +36, 7.70, -78.27, 0.00 +37, 8.36, -86.87, 0.00 +38, 9.02, -96.02, 0.00 +39, 9.56, -104.28, 0.00 +40, 10.12, -113.40, 0.00 +41, 10.55, -121.56, 0.00 +42, 10.95, -130.05, 0.00 +43, 11.05, -135.56, 0.00 +44, 11.34, -144.01, 0.00 +45, 11.40, -150.32, 0.00 +46, 11.65, -160.10, 0.00 +47, 12.24, -175.82, 0.00 +48, 11.59, -174.80, 0.00 +49, 10.49, -166.97, 0.00 +50, 8.68, -146.70, 0.00 +51, 4.59, -82.88, 0.00 +52, 7.31, -142.21, 0.00 +53, 21.25, -450.45, 0.00 +54, 25.14, -587.71, 0.00 +55, 21.48, -563.18, 0.00 +56, 17.96, -539.23, 0.00 +57, 15.76, -558.72, 0.00 +58, 12.71, -555.72, 0.00 +59, 9.40, -544.46, 0.00 +60, 6.08, -533.76, 0.00 +61, 2.72, -520.75, 0.00 +62, -0.63, -508.27, 0.00 +63, -3.95, -492.77, 0.00 +64, -7.24, -478.52, 0.00 +65, -10.39, -459.48, 0.00 +66, -13.50, -443.36, 0.00 +67, -16.41, -424.23, 0.00 +68, -19.24, -406.47, 0.00 +69, -21.77, -385.65, 0.00 +70, -24.22, -366.85, 0.00 +71, -26.21, -344.18, 0.00 +72, -28.12, -323.80, 0.00 +73, -29.28, -298.39, 0.00 +74, -30.70, -278.72, 0.00 +75, -31.20, -253.86, 0.00 +76, -31.79, -232.87, 0.00 +77, -31.78, -210.36, 0.00 +78, -31.81, -190.72, 0.00 +79, -29.96, -163.09, 0.00 +80, -28.81, -142.51, 0.00 +81, -25.70, -115.63, 0.00 +82, -23.36, -95.56, 0.00 +83, -17.92, -66.64, 0.00 +84, -15.19, -51.24, 0.00 +85, -4.65, -14.18, 0.00 +86, -0.26, -0.71, 0.00 +87, 9.41, 23.25, 0.00 +88, 14.47, 31.93, 0.00 +89, 23.43, 45.83, 0.00 +90, 37.69, 64.67, 0.00 +91, 42.67, 63.43, 0.00 +92, 56.09, 71.03, 0.00 +93, 53.23, 56.12, 0.00 +94, 77.35, 65.70, 0.00 +95, 42.42, 27.63, 0.00 +96, 10.74, 4.92, 0.00 +97, 47.56, 12.87, 0.00 +98, 75.03, 10.07, 0.00 +99, 0.36, -0.00, 0.00 +100, 97.48, -13.08, 0.00 +101, 172.16, -46.60, 0.00 +102, 148.56, -68.09, 0.00 +103, 130.04, -84.70, 0.00 +104, 110.88, -94.19, 0.00 +105, 98.92, -104.31, 0.00 +106, 84.16, -106.58, 0.00 +107, 53.49, -79.51, 0.00 +108, 45.94, -78.83, 0.00 +109, 17.03, -33.31, 0.00 +110, 11.56, -25.52, 0.00 +111, -7.53, 18.62, 0.00 +112, -14.11, 38.85, 0.00 +113, -26.43, 80.67, 0.00 +114, -31.15, 105.06, 0.00 +115, -36.24, 134.73, 0.00 +116, -38.44, 157.29, 0.00 +117, -41.50, 186.70, 0.00 +118, -42.29, 209.23, 0.00 +119, -43.71, 237.89, 0.00 +120, -43.36, 259.97, 0.00 +121, -43.38, 287.09, 0.00 +122, -42.21, 309.23, 0.00 +123, -41.30, 336.04, 0.00 +124, -39.47, 358.43, 0.00 +125, -37.83, 385.46, 0.00 +126, -35.45, 408.28, 0.00 +127, -32.92, 432.34, 0.00 +128, -29.95, 453.52, 0.00 +129, -26.87, 476.13, 0.00 +130, -23.51, 496.73, 0.00 +131, -20.04, 517.96, 0.00 +132, -16.35, 536.89, 0.00 +133, -12.60, 557.35, 0.00 +134, -8.70, 574.79, 0.00 +135, -4.75, 592.92, 0.00 +136, -0.75, 609.08, 0.00 +137, 3.27, 625.75, 0.00 +138, 7.29, 639.56, 0.00 +139, 11.30, 654.52, 0.00 +140, 15.25, 666.62, 0.00 +141, 19.14, 678.33, 0.00 +142, 22.92, 688.27, 0.00 +143, 26.63, 698.04, 0.00 +144, 30.19, 705.88, 0.00 +145, 33.68, 713.98, 0.00 +146, 36.96, 719.54, 0.00 +147, 40.03, 723.00, 0.00 +148, 42.96, 725.82, 0.00 +149, 45.50, 724.25, 0.00 +150, 48.43, 730.47, 0.00 +151, 51.10, 733.97, 0.00 +152, 53.48, 734.72, 0.00 +153, 39.59, 522.09, 0.00 +154, -0.60, -7.66, 0.00 +155, -3.05, -37.45, 0.00 +156, 5.42, 64.40, 0.00 +157, 6.68, 76.94, 0.00 +158, 6.61, 74.08, 0.00 +159, 5.30, 57.82, 0.00 +160, 5.37, 57.13, 0.00 +161, 4.93, 51.25, 0.00 +162, 4.64, 47.15, 0.00 +163, 4.21, 41.93, 0.00 +164, 3.81, 37.17, 0.00 +165, 3.32, 31.75, 0.00 +166, 2.81, 26.41, 0.00 +167, 2.22, 20.44, 0.00 +168, 1.62, 14.65, 0.00 +169, 0.93, 8.33, 0.00 +170, 0.25, 2.23, 0.00 +171, -0.51, -4.42, 0.00 +172, -1.24, -10.52, 0.00 +173, -1.95, -16.35, 0.00 +174, -2.66, -22.04, 0.00 +175, -3.38, -27.60, 0.00 +176, -4.10, -33.06, 0.00 +177, -4.70, -37.37, 0.00 +178, -5.35, -42.05, 0.00 +179, -5.86, -45.51, 0.00 +180, -6.43, -49.40, 0.00 +181, -6.84, -51.98, 0.00 +182, -7.31, -55.02, 0.00 +183, -7.65, -57.00, 0.00 +184, -8.01, -59.13, 0.00 +185, -8.18, -59.86, 0.00 +186, -8.41, -61.04, 0.00 +187, -8.44, -60.78, 0.00 +188, -8.49, -60.71, 0.00 +189, -8.38, -59.56, 0.00 +190, -8.23, -58.15, 0.00 +191, -7.93, -55.68, 0.00 +192, -7.56, -52.84, 0.00 +193, -7.02, -48.89, 0.00 +194, -6.43, -44.64, 0.00 +195, -5.67, -39.23, 0.00 +196, -4.82, -33.30, 0.00 +197, -3.83, -26.41, 0.00 +198, -2.73, -18.78, 0.00 diff --git a/TestCases/rans/flatplate/turb_SA_flatplate.cfg b/TestCases/rans/flatplate/turb_SA_flatplate.cfg index c90b5c2bef3c..36d65f3b0892 100644 --- a/TestCases/rans/flatplate/turb_SA_flatplate.cfg +++ b/TestCases/rans/flatplate/turb_SA_flatplate.cfg @@ -45,7 +45,7 @@ MARKER_MONITORING= ( wall ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= GREEN_GAUSS -CFL_NUMBER= 10.0 +CFL_NUMBER= 100.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) @@ -62,11 +62,11 @@ SENS_REMOVE_SHARP= NO % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 2, 2, 2, 2) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg b/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg index c364ddd07ace..d0bb2dfb7cd4 100644 --- a/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg +++ b/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg @@ -42,7 +42,7 @@ MOLECULAR_WEIGHT= 28.960 SPECIFIC_HEAT_CP = 1009.39 % CONDUCTIVITY_MODEL= CONSTANT_CONDUCTIVITY -THERMAL_CONDUCTIVITY_CONSTANT= 0.0258 +THERMAL_CONDUCTIVITY_CONSTANT= 0.0258 % PRANDTL_LAM= 0.72 TURBULENT_CONDUCTIVITY_MODEL= CONSTANT_PRANDTL_TURB @@ -78,7 +78,7 @@ SPECIES_CLIPPING_MAX= 1.0 % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= GREEN_GAUSS -CFL_NUMBER= 10.0 +CFL_NUMBER= 100.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) @@ -90,15 +90,22 @@ ADJ_SHARP_LIMITER_COEFF= 3.0 REF_SHARP_EDGES= 3.0 SENS_REMOVE_SHARP= NO +% ------------------------ LINEAR SOLVER DEFINITION ---------------------------% +% +LINEAR_SOLVER= FGMRES +LINEAR_SOLVER_PREC= LU_SGS +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 + % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 2, 2, 2, 2) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/rans/flatplate/turb_SST_flatplate.cfg b/TestCases/rans/flatplate/turb_SST_flatplate.cfg index 0e3ee25f4e0b..61446ecab7f3 100644 --- a/TestCases/rans/flatplate/turb_SST_flatplate.cfg +++ b/TestCases/rans/flatplate/turb_SST_flatplate.cfg @@ -62,11 +62,11 @@ SENS_REMOVE_SHARP= NO % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 2, 2, 2, 2) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_multigrid_restart.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_multigrid_restart.cfg index 7e22bf6979ce..cc0b26363819 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_multigrid_restart.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_multigrid_restart.cfg @@ -86,18 +86,18 @@ SENS_REMOVE_SHARP= NO % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 1, 1, 1 ) -MG_POST_SMOOTH= ( 1, 1, 1, 1 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.8 -MG_DAMP_PROLONGATION= 0.8 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/rans/rae2822/turb_SA_RAE2822.cfg b/TestCases/rans/rae2822/turb_SA_RAE2822.cfg index 68071ae47dad..36146c4ac329 100644 --- a/TestCases/rans/rae2822/turb_SA_RAE2822.cfg +++ b/TestCases/rans/rae2822/turb_SA_RAE2822.cfg @@ -41,23 +41,23 @@ MARKER_MONITORING= ( AIRFOIL ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 2.5 +CFL_NUMBER= 10.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) ITER= 99999 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 20 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/rans/rae2822/turb_SST_RAE2822.cfg b/TestCases/rans/rae2822/turb_SST_RAE2822.cfg index 097ebd6c42ea..5614fc349e4e 100644 --- a/TestCases/rans/rae2822/turb_SST_RAE2822.cfg +++ b/TestCases/rans/rae2822/turb_SST_RAE2822.cfg @@ -44,24 +44,24 @@ MARKER_MONITORING= ( AIRFOIL ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 2.5 +CFL_NUMBER= 10.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) ITER= 99999 LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg b/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg index db88f0e394ec..d89be6514294 100644 --- a/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg +++ b/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg @@ -45,24 +45,24 @@ MARKER_MONITORING= ( AIRFOIL ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 2.5 +CFL_NUMBER= 10.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) ITER= 99999 LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/rotating/naca0012/rot_NACA0012.cfg b/TestCases/rotating/naca0012/rot_NACA0012.cfg index fec91316e14b..8bce2a0fb307 100644 --- a/TestCases/rotating/naca0012/rot_NACA0012.cfg +++ b/TestCases/rotating/naca0012/rot_NACA0012.cfg @@ -52,7 +52,7 @@ MARKER_DESIGNING = ( airfoil ) % ------------- COMMON PARAMETERS TO DEFINE THE NUMERICAL METHOD --------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 5 +CFL_NUMBER= 2.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) @@ -63,15 +63,15 @@ ITER= 9999 LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS LINEAR_SOLVER_ERROR= 1E-1 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 -MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +MGCYCLE= V_CYCLE +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) MG_DAMP_RESTRICTION= 0.5 % lower damping, to keep from fast oscillations in residuals MG_DAMP_PROLONGATION= 0.5 diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index ca83cca21ef4..9d7c6b857b14 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.244274, 3.300113, 0.075814, 0.159961] + channel.test_vals = [-2.215160, 3.327978, 0.064048, 0.163516] 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.968082, -4.396602, 0.331959, 0.023010] + naca0012.test_vals = [-4.256408, -3.795038, 0.306510, 0.024657] 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 = [-1.301825, 4.369535, -0.236575, 0.041741] + wedge.test_vals = [-3.609826, 2.113544, -0.249533, 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.428634, -10.889247, 0.280800, 0.008623] + oneram6.test_vals = [-11.512881, -10.980703, 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.751251, 1.788794, 0.301332, 0.019499] + fixedCL_naca0012.test_vals = [-3.920501, 1.594999, 0.300907, 0.019465] 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.119642, 4.342860, 0.002338, 0.020591] + polar_naca0012.test_vals = [-1.196985, 4.245790, 0.010492, 0.070124] 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.099346, 0.381614, 0.001277, 0.024994, 2.361500, -2.336500, 0.000000, 0.000000] + flatplate.test_vals = [-5.448267, 0.027571, 0.002633, 0.015619, 2.361200, -2.345600, 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.631691, -3.138513, -0.003331, 1.602087, 0.000000] + cylinder.test_vals = [-8.503813, -3.012051, 0.260768, 1.697376, 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.412653, -0.950827, 0.038557, -134.198785, 0.000000] + cylinder_lowmach.test_vals = [-6.604626, -1.142842, -0.080684, -80.137778, 0.000000] test_list.append(cylinder_lowmach) # 2D Poiseuille flow (body force driven with periodic inlet / outlet) @@ -190,7 +190,7 @@ def main(): poiseuille.cfg_dir = "navierstokes/poiseuille" poiseuille.cfg_file = "lam_poiseuille.cfg" poiseuille.test_iter = 10 - poiseuille.test_vals = [-5.050753, 0.648333, 0.012273, 13.643141, 0] + poiseuille.test_vals = [-5.050753, 0.648333, 0.012273, 13.643141, 0.000000] test_list.append(poiseuille) # 2D Poiseuille flow (inlet profile file) @@ -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.012556, -7.696221, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.004412, -7.544478, -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 = [-1.846052, -5.109587, 0.571411, 0.040773, 0.000000] + rae2822_sa.test_vals = [-2.168944, -5.451519, 0.287676, 0.104861, 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 = [-0.509931, 5.862083, 0.583382, 0.013958, 0.000000] + rae2822_sst.test_vals = [-1.028398, 5.868068, 0.277703, 0.093381, 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.446759, 5.862083, 0.583382, 0.013958] + rae2822_sst_sust.test_vals = [-2.536320, 5.868058, 0.277703, 0.093381] 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.075879, -6.829935, -0.200296, 0.022692] + turb_flatplate.test_vals = [-4.939159, -7.469363, -0.187651, 0.015894] 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.606238, -5.081439, 0.810958, -0.008789, 0.077730] + turb_naca0012_sst_restart_mg.test_vals = [-6.575448, -5.081421, 0.810883, -0.008836, 0.077960] 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 = [-7.126959, -6.573716, 0.531996, 0.008466] + inc_euler_naca0012.test_vals = [-5.930469, -4.994452, 0.519589, 0.008977] 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 = [-3.936023, -3.470470, -0.012281, 0.120981] + inc_nozzle.test_vals = [-5.550954, -4.854401, -0.027964, 0.120734] 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.059218, -3.311865, 0.006311, 6.172388] + inc_lam_cylinder.test_vals = [-4.168180, -3.611108, 0.007850, 4.539924] 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.578867, -15.048458, -0.726250, 0.020280] + contadj_naca0012.test_vals = [-9.525042, -15.101716, -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 = [-11.969828, -12.503366, -1.086100, 0.007556] + contadj_oneram6.test_vals = [-12.062243, -12.621811, -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 = [0.887003, -4.740585, -0.358290, -0.000626] + contadj_fixedCL_naca0012.test_vals = [1.165313, -4.338177, -0.068991, -0.007568] 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.600653, -9.043319, 2.056700, -0.000000] + contadj_ns_cylinder.test_vals = [-3.606048, -9.050787, 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.387481, -10.891118, -0.212470, 0.005448] + contadj_rans_rae2822.test_vals = [-5.399739, -10.904778, -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.413477, 4.090702, -0.024889, 0.056654] + rot_naca0012.test_vals = [-1.313205, 4.208222, -0.001635, 0.121312] 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 = [-5.515303, -0.049093, -0.114925, -7.135945] + cavity.test_vals = [-8.327173, -2.944600, 0.017813, 0.009045] 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.699257, -2.240779, 1.471969, 1.496512] + spinning_cylinder.test_vals = [-7.824549, -2.360413, 1.581109, 1.528894] 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.010233, -0.007786] + sine_gust.test_vals = [-1.977498, 3.481817, -0.009957, -0.005021] 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 = [0.075274, 0.027537, -0.001640, -0.000129] + aeroelastic.test_vals = [0.073896, 0.027450, -0.001638, -0.000130] 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.951372, 0.010139, 0.008244] + unst_pitching_naca64a010_rans.test_vals = [-1.299045, -3.951413, 0.012821, 0.008239] 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.038811, 0.000913] + unst_pitching_naca64a010_euler.test_vals = [-1.186839, 4.280301, -0.043557, 0.000935] 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, -3.718481, -0.066605] + unst_plunging_naca0012.test_vals = [-4.083462, 1.366757, -6.820746, -0.081557] 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.665164, -3.793367, -3.716518, -3.148356] + unst_deforming_naca0012.test_vals = [-3.665254, -3.794011, -3.716829, -3.148509] 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.050483, -13.371795, 0.174939, 0.430757] + ls89_sa.test_vals = [-5.241488, -13.580472, 0.188420, 0.414010] 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 = [-0.577419, 5.624333, -0.016050, 0.000000] + edge_VW.test_vals = [-2.656646, 3.544572, -0.000020, 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 = [-1.542990, 4.650149, 0.001487, 0.000000] + edge_PPR.test_vals = [-12.154112, -5.995257, -0.000034, 0.000000] test_list.append(edge_PPR) @@ -1009,7 +1009,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.623154, -1.660901] + bars_SST_2D.test_vals = [13.000000, -0.473009, -1.562179] bars_SST_2D.multizone = True test_list.append(bars_SST_2D) @@ -1115,15 +1115,14 @@ def main(): airfoilRBF.cfg_dir = "fea_fsi/Airfoil_RBF" airfoilRBF.cfg_file = "config.cfg" airfoilRBF.test_iter = 1 - - airfoilRBF.test_vals = [1.000000, 0.112689, -3.382129] + airfoilRBF.test_vals = [1.000000, 0.184123, -3.375352] airfoilRBF.tol = 0.0001 airfoilRBF.multizone = True test_list.append(airfoilRBF) # ############################### # ### Radiative Heat Transfer ### - # ############################### + # ###############################] # Radiative heat transfer p1rad = TestCase('p1rad') @@ -1523,7 +1522,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.178490, 3.891506] + opt_multiobj1surf_py.test_vals = [1.000000, 1.000000, 36.699910, 5.780304] 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 @@ -1536,7 +1535,7 @@ def main(): opt_2surf1obj_py.cfg_dir = "optimization_euler/multiobjective_wedge" opt_2surf1obj_py.cfg_file = "inv_wedge_ROE_2surf_1obj.cfg" opt_2surf1obj_py.test_iter = 1 - opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 2.005074, 0.000323] + opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 2.005030, 0.000476] opt_2surf1obj_py.command = TestCase.Command(exec = "shape_optimization.py", param = "-g CONTINUOUS_ADJOINT -f") opt_2surf1obj_py.timeout = 1600 opt_2surf1obj_py.tol = 0.00001 @@ -1553,7 +1552,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.968082, -4.396602, 0.331959, 0.023010] + pywrapper_naca0012.test_vals = [-4.256408, -3.795038, 0.306510, 0.024657] pywrapper_naca0012.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_naca0012.timeout = 1600 pywrapper_naca0012.tol = 0.00001 @@ -1623,7 +1622,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.614167, 2.260153, -0.003880, 0.099289] + pywrapper_unsteadyCHT.test_vals = [-1.614168, 2.259972, 0.000757, 0.113614] pywrapper_unsteadyCHT.command = TestCase.Command(exec = "python", param = "launch_unsteady_CHT_FlatPlate.py -f") pywrapper_unsteadyCHT.timeout = 1600 pywrapper_unsteadyCHT.tol = 0.00001 @@ -1651,7 +1650,7 @@ def main(): pywrapper_custom_inlet.cfg_dir = "py_wrapper/custom_inlet" pywrapper_custom_inlet.cfg_file = "lam_flatplate.cfg" pywrapper_custom_inlet.test_iter = 20 - pywrapper_custom_inlet.test_vals = [-4.122866, -1.542850, -3.664440, 1.339854, -0.793567, 0.159301, -0.007466, 0.514290, -0.521750] + pywrapper_custom_inlet.test_vals = [-4.123921, -1.544230, -3.886906, 1.338713, -0.688132, 0.160844, -0.009845, 0.520880, -0.530730] pywrapper_custom_inlet.command = TestCase.Command(exec = "python", param = "run.py") pywrapper_custom_inlet.timeout = 1600 pywrapper_custom_inlet.tol = 0.0001 diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 13b7984ab1d7..f673baabd18b 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -76,7 +76,7 @@ def main(): discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k" discadj_arina2k.cfg_file = "Arina2KRS.cfg" discadj_arina2k.test_iter = 20 - discadj_arina2k.test_vals = [-3.229386, -3.466956, 0.043983, 0.000000] + discadj_arina2k.test_vals = [-2.928012, -3.351813, 0.073362, 0.000000] test_list.append(discadj_arina2k) ####################################################### @@ -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.977751, -2.562520, 0.000000] + discadj_incomp_NACA0012.test_vals = [20.000000, -3.338269, -2.490047, 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.223517, -1.653450, -0.004178, -0.000004] + discadj_pitchingNACA0012.test_vals = [-1.130532, -1.575494, -0.005113, 0.000007] 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.965747, -1.848881, 2961.700000, 0.000000] + unst_deforming_naca0012.test_vals = [-1.885032, -1.775564, 3994.600000, 0.000002] unst_deforming_naca0012.unsteady = True test_list.append(unst_deforming_naca0012) diff --git a/TestCases/sliding_interface/bars_SST_2D/bars.cfg b/TestCases/sliding_interface/bars_SST_2D/bars.cfg index c1eeb710783d..2b2b569306f0 100644 --- a/TestCases/sliding_interface/bars_SST_2D/bars.cfg +++ b/TestCases/sliding_interface/bars_SST_2D/bars.cfg @@ -87,17 +87,18 @@ CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 0.3,20.0 ) LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 20 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.75 -MG_DAMP_PROLONGATION= 0.75 +MGCYCLE= V_CYCLE +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/turbulence_models/sa/rae2822/turb_SA_BSL_RAE2822.cfg b/TestCases/turbulence_models/sa/rae2822/turb_SA_BSL_RAE2822.cfg index 50604b60db70..cdc080aca0fc 100644 --- a/TestCases/turbulence_models/sa/rae2822/turb_SA_BSL_RAE2822.cfg +++ b/TestCases/turbulence_models/sa/rae2822/turb_SA_BSL_RAE2822.cfg @@ -30,22 +30,22 @@ MARKER_MONITORING= ( AIRFOIL ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 2.5 +CFL_NUMBER= 100 CFL_ADAPT= NO ITER= 99999 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 20 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/turbulence_models/sa/rae2822/turb_SA_COMP_EDW_RAE2822.cfg b/TestCases/turbulence_models/sa/rae2822/turb_SA_COMP_EDW_RAE2822.cfg index ba6787239985..ff13edb71455 100644 --- a/TestCases/turbulence_models/sa/rae2822/turb_SA_COMP_EDW_RAE2822.cfg +++ b/TestCases/turbulence_models/sa/rae2822/turb_SA_COMP_EDW_RAE2822.cfg @@ -30,22 +30,22 @@ MARKER_MONITORING= ( AIRFOIL ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 2.5 +CFL_NUMBER= 100.0 CFL_ADAPT= NO ITER= 99999 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 20 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/turbulence_models/sa/rae2822/turb_SA_COMP_RAE2822.cfg b/TestCases/turbulence_models/sa/rae2822/turb_SA_COMP_RAE2822.cfg index 8f783b5d7fc0..70f6f0cf4aa2 100644 --- a/TestCases/turbulence_models/sa/rae2822/turb_SA_COMP_RAE2822.cfg +++ b/TestCases/turbulence_models/sa/rae2822/turb_SA_COMP_RAE2822.cfg @@ -31,22 +31,22 @@ MARKER_MONITORING= ( AIRFOIL ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 2.5 +CFL_NUMBER= 100.0 CFL_ADAPT= NO ITER= 99999 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 20 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/turbulence_models/sa/rae2822/turb_SA_EDW_RAE2822.cfg b/TestCases/turbulence_models/sa/rae2822/turb_SA_EDW_RAE2822.cfg index 3eefc408141e..a4dc42ff4ee7 100644 --- a/TestCases/turbulence_models/sa/rae2822/turb_SA_EDW_RAE2822.cfg +++ b/TestCases/turbulence_models/sa/rae2822/turb_SA_EDW_RAE2822.cfg @@ -31,22 +31,22 @@ MARKER_MONITORING= ( AIRFOIL ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 2.5 +CFL_NUMBER= 100.0 CFL_ADAPT= NO ITER= 99999 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 20 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/TestCases/turbulence_models/sa/rae2822/turb_SA_QCR_RAE2822.cfg b/TestCases/turbulence_models/sa/rae2822/turb_SA_QCR_RAE2822.cfg index d038f5ff7e60..20d46b10b9b1 100644 --- a/TestCases/turbulence_models/sa/rae2822/turb_SA_QCR_RAE2822.cfg +++ b/TestCases/turbulence_models/sa/rae2822/turb_SA_QCR_RAE2822.cfg @@ -31,22 +31,22 @@ MARKER_MONITORING= ( AIRFOIL ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -CFL_NUMBER= 2.5 +CFL_NUMBER= 100.0 CFL_ADAPT= NO ITER= 99999 LINEAR_SOLVER= BCGSTAB -LINEAR_SOLVER_ERROR= 1E-6 -LINEAR_SOLVER_ITER= 20 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= W_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.95 -MG_DAMP_PROLONGATION= 0.95 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % @@ -61,7 +61,7 @@ TIME_DISCRE_TURB= EULER_IMPLICIT % --------------------------- CONVERGENCE PARAMETERS --------------------------% % -CONV_RESIDUAL_MINVAL= -8 +CONV_RESIDUAL_MINVAL= -10 CONV_STARTITER= 10 CONV_CAUCHY_ELEMS= 100 CONV_CAUCHY_EPS= 1E-6 diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index cf0968e2a9de..bef1f3c1fdeb 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.060602, -0.001097] + tutorial_inv_bump.test_vals = [-1.437425, 4.075857, 0.043691, 0.034241] test_list.append(tutorial_inv_bump) # Inviscid Wedge @@ -183,7 +183,7 @@ def main(): tutorial_inv_wedge.cfg_dir = "../Tutorials/compressible_flow/Inviscid_Wedge" tutorial_inv_wedge.cfg_file = "inv_wedge_HLLC.cfg" tutorial_inv_wedge.test_iter = 0 - tutorial_inv_wedge.test_vals = [-0.481460, 5.253008, -0.290816, 0.051445] + tutorial_inv_wedge.test_vals = [-0.481460, 5.253008, -0.253048, 0.044501] tutorial_inv_wedge.no_restart = True test_list.append(tutorial_inv_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.262596, 0.084044] + tutorial_inv_onera.test_vals = [-5.204928, -4.597762, 0.255680, 0.087977] 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.124663, 31.721714] + tutorial_lam_cylinder.test_vals = [-6.162141, -0.699617, -0.047729, 43.442977] 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.165195, 0.238368] + tutorial_design_inv_naca0012.test_vals = [-3.585391, -2.989014, 0.164248, 0.228824] tutorial_design_inv_naca0012.no_restart = True test_list.append(tutorial_design_inv_naca0012) diff --git a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg index b1ce80b506fe..9ac2fbaaea39 100644 --- a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg +++ b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg @@ -76,18 +76,18 @@ SENS_REMOVE_SHARP= NO % LINEAR_SOLVER= FGMRES LINEAR_SOLVER_PREC= LU_SGS -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 5 +LINEAR_SOLVER_ERROR= 1E-1 +LINEAR_SOLVER_ITER= 3 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % MGLEVEL= 3 MGCYCLE= V_CYCLE -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) -MG_POST_SMOOTH= ( 2, 2, 2, 2 ) -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -MG_DAMP_RESTRICTION= 0.7 -MG_DAMP_PROLONGATION= 0.7 +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) +MG_DAMP_RESTRICTION= 0.5 +MG_DAMP_PROLONGATION= 0.5 % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % diff --git a/config_template.cfg b/config_template.cfg index 47b1ee28375a..ab8175bb6802 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -1612,26 +1612,47 @@ LINEAR_SOLVER_SMOOTHER_RELAXATION= 1.0 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % -% Multi-grid levels (0 = no multi-grid) +% Max. number of multi-grid levels (0 = no multi-grid) MGLEVEL= 0 % % Multi-grid cycle (V_CYCLE, W_CYCLE, FULLMG_CYCLE) MGCYCLE= V_CYCLE % -% Multi-grid pre-smoothing level -MG_PRE_SMOOTH= ( 1, 2, 3, 3 ) +% Max. iterations for multi-grid pre-smoothing level +MG_PRE_SMOOTH= ( 4, 4, 4, 4 ) % -% Multi-grid post-smoothing level -MG_POST_SMOOTH= ( 0, 0, 0, 0 ) +% Max. iterations for multi-grid post-smoothing level +MG_POST_SMOOTH= ( 4, 4, 4, 4 ) % % Jacobi implicit smoothing of the correction -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +MG_CORRECTION_SMOOTH= ( 1, 1, 1, 1 ) % % Damping factor for the residual restriction MG_DAMP_RESTRICTION= 0.75 % % Damping factor for the correction prolongation MG_DAMP_PROLONGATION= 0.75 +% +% Enable early exit from multigrid smoothing when the residual RMS drops +% below MG_SMOOTH_RES_THRESHOLD * initial_rms (NO, YES) +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 +% +% Smoothing coefficient for the Jacobi correction-prolongation smoother (default 1.25) +MG_SMOOTH_COEFF= 1.25 +% +% Print a compact per-cycle summary of smoothing iterations and residuals (NO, YES) +MG_SMOOTH_OUTPUT= NO +% +% Minimum number of control volumes on the coarsest multigrid level. +% Effectively limits the number of multigrid levels. +MG_MIN_MESHSIZE= 500 +% +% Enable agglomeration along implicit lines seeded from viscous walls (NO, YES) +MG_IMPLICIT_LINES= NO % -------------------------- MESH SMOOTHING -----------------------------% % From c5963e328eaf472bc3553b4edc827e4151eddf31 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Sun, 12 Apr 2026 17:42:39 +0100 Subject: [PATCH 212/229] Use FGCRODR instead of GMRES for "Newton-Krylov" adjoint (#2782) * checkpoint * optimize product * nested parallel improvements * add test, non flexible mode for FGCRODR * fix the VkWk optimization * simplify settings * update --- Common/include/linear_algebra/CSysSolve.hpp | 23 ++- Common/include/linear_algebra/CSysVector.hpp | 13 ++ Common/src/linear_algebra/CSysSolve.cpp | 149 +++++++++++------- Common/src/linear_algebra/CSysVector.cpp | 67 +++++++- .../src/drivers/CDiscAdjMultizoneDriver.cpp | 8 +- .../disc_adj_fsi/Airfoil_2d/configFlow.cfg | 10 +- TestCases/disc_adj_fsi/dyn_fsi/configFlow.cfg | 5 +- TestCases/parallel_regression.py | 3 +- TestCases/parallel_regression_AD.py | 6 +- TestCases/vandv.py | 15 +- TestCases/vandv/rans/30p30n/config_ad.cfg | 103 ++++++++++++ 11 files changed, 324 insertions(+), 78 deletions(-) create mode 100644 TestCases/vandv/rans/30p30n/config_ad.cfg diff --git a/Common/include/linear_algebra/CSysSolve.hpp b/Common/include/linear_algebra/CSysSolve.hpp index 11623f7bdb26..ddee4f0abc84 100644 --- a/Common/include/linear_algebra/CSysSolve.hpp +++ b/Common/include/linear_algebra/CSysSolve.hpp @@ -41,6 +41,11 @@ #include "CSysVector.hpp" #include "../option_structure.hpp" +SU2_IGNORE_WARNING("-Wmaybe-uninitialized") +#include "Eigen/Core" +#include "Eigen/Dense" +SU2_RESTORE_WARNING + class CConfig; class CGeometry; template @@ -110,6 +115,7 @@ class CSysSolve { mutable unsigned long k = 0; mutable std::vector Z, V; /*!< \brief Large matrices used by FGMRES, v^i+1 = A * z^i. */ mutable std::vector W, T; /*!< \brief Large matrices used by FGCRODR for deflation vectors. */ + mutable Eigen::Matrix VkWk; /*!< \brief Temporary used when it is necessary to interface between active and passive types. */ VectorType LinSysSol_tmp; @@ -292,8 +298,8 @@ class CSysSolve { template unsigned long FGCRODR_LinSolverImpl(const VectorType& b, VectorType& x, const ProductType& mat_vec, const PrecondType& precond, ScalarType tol, unsigned long max_iter, - ScalarType& residual, bool monitoring, const CConfig* config, - FgcrodrMode mode) const; + ScalarType& residual, bool monitoring, const CConfig* config, FgcrodrMode mode, + unsigned long custom_m) const; /*! * \brief Creates the inner solver for nested preconditioning if the settings allow it. @@ -316,7 +322,7 @@ class CSysSolve { * \param[in] tol - tolerance with which to solve the system * \param[in] m - maximum size of the search subspace * \param[out] residual - final normalized residual - * \param[in] monitoring - turn on priting residuals from solver to screen. + * \param[in] monitoring - turn on priting residuals from solver to screen * \param[in] config - Definition of the particular problem. */ unsigned long CG_LinSolver(const VectorType& b, VectorType& x, const ProductType& mat_vec, const PrecondType& precond, @@ -332,7 +338,7 @@ class CSysSolve { * \param[in] tol - tolerance with which to solve the system * \param[in] m - maximum size of the search subspace * \param[out] residual - final normalized residual - * \param[in] monitoring - turn on priting residuals from solver to screen. + * \param[in] monitoring - turn on priting residuals from solver to screen * \param[in] config - Definition of the particular problem. */ unsigned long FGMRES_LinSolver(const VectorType& b, VectorType& x, const ProductType& mat_vec, @@ -355,14 +361,15 @@ class CSysSolve { * \param[in] tol - tolerance with which to solve the system * \param[in] max_iter - maximum number of iterations * \param[out] residual - final normalized residual - * \param[in] monitoring - turn on priting residuals from solver to screen. + * \param[in] monitoring - turn on priting residuals from solver to screen * \param[in] config - Definition of the particular problem. * \param[in] mode - See FgcrodrMode. + * \param[in] custom_m - alternative maximum size of the search subspace, overrides the config value if != 0. */ unsigned long FGCRODR_LinSolver(const VectorType& b, VectorType& x, const ProductType& mat_vec, const PrecondType& precond, ScalarType tol, unsigned long max_iter, ScalarType& residual, bool monitoring, const CConfig* config, - FgcrodrMode mode = FgcrodrMode::NORMAL) const; + FgcrodrMode mode = FgcrodrMode::NORMAL, unsigned long custom_m = 0) const; /*! * \brief Biconjugate Gradient Stabilized Method (BCGSTAB) @@ -373,7 +380,7 @@ class CSysSolve { * \param[in] tol - tolerance with which to solve the system * \param[in] m - maximum size of the search subspace * \param[out] residual - final normalized residual - * \param[in] monitoring - turn on priting residuals from solver to screen. + * \param[in] monitoring - turn on priting residuals from solver to screen * \param[in] config - Definition of the particular problem. */ unsigned long BCGSTAB_LinSolver(const VectorType& b, VectorType& x, const ProductType& mat_vec, @@ -389,7 +396,7 @@ class CSysSolve { * \param[in] tol - tolerance with which to solve the system * \param[in] m - maximum number of iterations * \param[out] residual - final normalized residual - * \param[in] monitoring - turn on priting residuals from solver to screen. + * \param[in] monitoring - turn on priting residuals from solver to screen * \param[in] config - Definition of the particular problem. */ unsigned long Smoother_LinSolver(const VectorType& b, VectorType& x, const ProductType& mat_vec, diff --git a/Common/include/linear_algebra/CSysVector.hpp b/Common/include/linear_algebra/CSysVector.hpp index f300c01e091b..c0ab789d4ffb 100644 --- a/Common/include/linear_algebra/CSysVector.hpp +++ b/Common/include/linear_algebra/CSysVector.hpp @@ -29,6 +29,7 @@ #pragma once #include +#include #include "../parallelization/mpi_structure.hpp" #include "../parallelization/omp_structure.hpp" @@ -371,6 +372,18 @@ class CSysVector : public VecExpr::CVecExpr, ScalarType> return dot_scratch[0]; } + /*! + * \brief Computes the product of V^T W efficiencly, where V and W are tall matrices stored as vectors of CSysVector. + * \param[in] V - Tall matrix. + * \param[in] i0 - First column of V to consider. + * \param[in] n - Number of columns to consider from V starting at i0. + * \param[in] W - Tall matrix. + * \param[in] m - Number of columns to consider from W. + * \return n by m matrix with the result of the product. + */ + static const su2matrix& multiDot(const std::vector& V, size_t i0, size_t n, + const std::vector& W, size_t m); + /*! * \brief Squared L2 norm of the vector (via dot with self). * \return Squared L2 norm. diff --git a/Common/src/linear_algebra/CSysSolve.cpp b/Common/src/linear_algebra/CSysSolve.cpp index 178e2b3ba0d1..04497a80c79e 100644 --- a/Common/src/linear_algebra/CSysSolve.cpp +++ b/Common/src/linear_algebra/CSysSolve.cpp @@ -35,8 +35,6 @@ #include "../../include/linear_algebra/CPreconditioner.hpp" SU2_IGNORE_WARNING("-Wmaybe-uninitialized") -#include "Eigen/Core" -#include "Eigen/Dense" #include "Eigen/Eigenvalues" SU2_RESTORE_WARNING @@ -62,8 +60,8 @@ constexpr float linSolEpsilon() { /*--- Computes v = vs * ws or v += vs * ws with unrolling of up to 4 iterations. ---*/ template -void LinearCombination(const unsigned long n, const Vectors& vs, const Weights& ws, CSysVector& v, - bool inc = false) { +void LinearCombinationImpl(const unsigned long n, const Vectors& vs, const Weights& ws, CSysVector& v, + bool inc = false) { if (n == 0) { if (!inc) v = ScalarType{}; return; @@ -105,19 +103,32 @@ void LinearCombination(const unsigned long n, const Vectors& vs, const Weights& /*--- Overload to handle a vector of CSysVector directly. ---*/ template -void LinearCombination(const unsigned long n, const std::vector>& vs, const Weights& ws, - CSysVector& v, bool inc = false) { - LinearCombination( +void LinearCombinationImpl(const unsigned long n, const std::vector>& vs, const Weights& ws, + CSysVector& v, bool inc = false) { + LinearCombinationImpl( n, [&vs](auto i) -> auto& { return vs[i]; }, ws, v, inc); } /*--- Overload to handle a std::vector of weights directly. ---*/ template -void LinearCombination(const unsigned long n, const Vectors& vs, const std::vector& ws, - CSysVector& v, bool inc = false) { - LinearCombination( +void LinearCombinationImpl(const unsigned long n, const Vectors& vs, const std::vector& ws, + CSysVector& v, bool inc = false) { + LinearCombinationImpl( n, vs, [&ws](auto i) { return ws[i]; }, v, inc); } + +/*--- Wrapper around LinearCombinationImpl. ---*/ +template +void LinearCombination(bool parallel, Ts&&... args) { + if (parallel) { + SU2_OMP_PARALLEL + LinearCombinationImpl(std::forward(args)...); + END_SU2_OMP_PARALLEL + } else { + LinearCombinationImpl(std::forward(args)...); + } +} + } // namespace template @@ -597,13 +608,7 @@ unsigned long CSysSolve::FGMRES_LinSolver(const CSysVector::FGCRODR_LinSolverImpl(const CSysVector& mat_vec, const CPreconditioner& precond, ScalarType tol, unsigned long max_iter, ScalarType& residual, - bool monitoring, const CConfig* config, - FgcrodrMode mode) const { + bool monitoring, const CConfig* config, FgcrodrMode mode, + unsigned long custom_m) const { using EigenMatrix = Eigen::Matrix; using EigenVector = Eigen::Matrix; - auto m = min(config->GetLinear_Solver_Restart_Frequency(), max_iter); + auto m = min(custom_m != 0 ? custom_m : config->GetLinear_Solver_Restart_Frequency(), max_iter); const auto deflation = min(config->GetLinear_Solver_Restart_Deflation(), m - 1); - const bool masterRank = (SU2_MPI::GetRank() == MASTER_NODE); + const bool flexible = !precond.IsIdentity(); + const bool same_mat = mode == FgcrodrMode::SAME_MAT; + const bool masterRank = SU2_MPI::GetRank() == MASTER_NODE; /*--- If we call the solver outside of a parallel region, but the number of threads allows, * we still want to parallelize some of the expensive operations. ---*/ const bool nestedParallel = !omp_in_parallel() && omp_get_max_threads() > 1; @@ -697,8 +704,10 @@ unsigned long CSysSolve::FGCRODR_LinSolverImpl(const CSysVector::FGCRODR_LinSolverImpl(const CSysVector auto& { return i < k ? W[i] : V[i]; }; + + /*--- With an identity preconditioner Z = W. ---*/ + auto GetZ = [&](auto i) -> auto& { + if (flexible) return Z[i]; + return GetW(i); + }; + /*--- Rebuild Z, V, and W for the new matrix if necessary. * Q * R = A * Z * V = Q = A * (Z * R^-1) @@ -734,10 +752,10 @@ unsigned long CSysSolve::FGCRODR_LinSolverImpl(const CSysVector::FGCRODR_LinSolverImpl(const CSysVector().solve(EigenMatrix::Identity(k, k)); for (auto j = k - 1;; --j) { for (auto* basis : {&W, &Z}) { auto reversed = [&](auto i) -> const auto& { return (*basis)[j - i]; }; LinearCombination( - j + 1, reversed, [&](auto i) { return invR(j - i, j); }, (*basis)[j]); + nestedParallel, j + 1, reversed, [&](auto i) { return invR(j - i, j); }, (*basis)[j]); + if (!flexible) break; // skip Z. } if (j == 0) break; // j is unsigned, avoid underflow. } } - LinearCombination(k, Z, vr, x, true); + LinearCombination(nestedParallel, k, GetZ, vr, x, true); } ScalarType rNorm = r.norm(); auto iter = k; @@ -812,8 +831,12 @@ unsigned long CSysSolve::FGCRODR_LinSolverImpl(const CSysVector::FGCRODR_LinSolverImpl(const CSysVector::FGCRODR_LinSolverImpl(const CSysVector 0) VW.topLeftCorner(k, k) = VkWk; + + /*--- Rest of VW. Either V[k] * Wk or the entire V * Wk depending on the mode. + * When the matrix stays constant, V[k+1:m+1] are orthogonal to Wk, but when it changes, + * we need to compute that part of the product. Since m >> k, there is less benefit in + * avoiding the cost of V[0:k] * Wk and we opt to make the code a little simpler. ---*/ + const su2matrix* VWk = nullptr; + const auto i0 = same_mat ? k : 0; + const auto n = same_mat ? 1 : m + 1; + if (nestedParallel) { + SU2_OMP_PARALLEL + VWk = &CSysVector::multiDot(V, i0, n, W, k); + END_SU2_OMP_PARALLEL + } else { + VWk = &CSysVector::multiDot(V, i0, n, W, k); + } + for (auto i = 0ul; i < n; ++i) { + for (auto j = 0ul; j < k; ++j) { + VW(i0 + i, j) = (*VWk)(i, j); + } } } const auto Hm = Heigen.topLeftCorner(m + 1, m); @@ -948,13 +986,15 @@ unsigned long CSysSolve::FGCRODR_LinSolverImpl(const CSysVector auto& { return i < k ? W[i] : V[i]; }); + modify(PinvR, GetW); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + /*--- Apply the V and W modifications to the left and right of the current VW, respectively. ---*/ + if (same_mat) VkWk.noalias() = Q.transpose() * (VW * PinvR); + /*--- T and W are the same size, so we can swap them. ---*/ std::swap(T, W); k = k_new; @@ -969,11 +1009,13 @@ unsigned long CSysSolve::FGCRODR_LinSolverImpl(const CSysVector::FGCRODR_LinSolverImpl(const CSysVector tol * 10) { if (masterRank) { @@ -1010,9 +1052,10 @@ unsigned long CSysSolve::FGCRODR_LinSolver(const CSysVector& mat_vec, const CPreconditioner& precond, ScalarType tol, unsigned long max_iter, ScalarType& residual, bool monitoring, - const CConfig* config, [[maybe_unused]] FgcrodrMode mode) const { + const CConfig* config, [[maybe_unused]] FgcrodrMode mode, + [[maybe_unused]] unsigned long custom_m) const { if constexpr (std::is_same_v || std::is_same_v) { - return FGCRODR_LinSolverImpl<>(b, x, mat_vec, precond, tol, max_iter, residual, monitoring, config, mode); + return FGCRODR_LinSolverImpl<>(b, x, mat_vec, precond, tol, max_iter, residual, monitoring, config, mode, custom_m); } else { return RFGMRES_LinSolver(b, x, mat_vec, precond, tol, max_iter, residual, monitoring, config); } diff --git a/Common/src/linear_algebra/CSysVector.cpp b/Common/src/linear_algebra/CSysVector.cpp index d14a63b52bf2..8f767f44ab4c 100644 --- a/Common/src/linear_algebra/CSysVector.cpp +++ b/Common/src/linear_algebra/CSysVector.cpp @@ -67,10 +67,75 @@ void CSysVector::Initialize(unsigned long numBlk, unsigned long numB } } +template +const su2matrix& CSysVector::multiDot(const std::vector>& V, + const size_t i0, const size_t n, + const std::vector>& W, + const size_t m) { + static constexpr size_t BLOCK_SIZE = 1024; + static su2matrix shared; + + if (n == 0 || m == 0) return shared; + + SU2_OMP_BARRIER + const auto size = V[0].nElmDomain; + + su2matrix local(n, m); + local.setConstant(0); + + SU2_OMP_FOR_(schedule(static) SU2_NOWAIT) + for (size_t offset = 0; offset < size; offset += BLOCK_SIZE) { + const auto limit = std::min(offset + BLOCK_SIZE, size); + for (size_t i = 0; i < n; ++i) { + const auto& vi = V[i0 + i]; + for (size_t j = 0; j < m; ++j) { + const auto& wj = W[j]; + ScalarType sum = 0.0; + SU2_OMP_SIMD + for (auto k = offset; k < limit; ++k) { + sum += vi[k] * wj[k]; + } + local(i, j) += sum; + } + } + } + END_SU2_OMP_FOR + + /*--- Reduce over all threads in an ordered way to ensure a deterministic result. ---*/ + for (size_t i = 0; i < n; ++i) { + for (size_t j = 0; j < m; ++j) { + W[j].dot_scratch[omp_get_thread_num()] = local(i, j); + } + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS + for (size_t j = 0; j < m; ++j) { + for (int t = 1; t < omp_get_num_threads(); ++t) { + local(i, j) += W[j].dot_scratch[t]; + } + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + } + + /*--- Single AllReduce of the result, only the master thread communicates. ---*/ + SU2_OMP_MASTER { + shared.resize(n, m); + + const auto mpi_type = (sizeof(ScalarType) < sizeof(double)) ? MPI_FLOAT : MPI_DOUBLE; + SelectMPIWrapper::W::Allreduce(local.data(), shared.data(), n * m, mpi_type, MPI_SUM, + SU2_MPI::GetComm()); + } + END_SU2_OMP_MASTER + + /*--- All threads have the same view of the result. ---*/ + SU2_OMP_BARRIER + + return shared; +} + template CSysVector::~CSysVector() { - if (!std::is_trivial::value) + if constexpr (!std::is_trivial_v) { for (auto i = 0ul; i < nElm; i++) vec_val[i].~ScalarType(); + } MemoryAllocation::aligned_free(vec_val); GPUMemoryAllocation::gpu_free(d_vec_val); diff --git a/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp b/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp index 392abeebe9fb..c41544a8f3a4 100644 --- a/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp @@ -380,8 +380,9 @@ void CDiscAdjMultizoneDriver::KrylovInnerIters(unsigned short iZone) { Scalar eps_l = 0.0; Scalar tol_l = KrylovTol / eps; auto iter = min(totalIter-2ul, config_container[iZone]->GetnQuasiNewtonSamples()-2ul); - iter = LinSolver[iZone].FGMRES_LinSolver(AdjRHS[iZone], AdjSol[iZone], product, Identity(), - tol_l, iter, eps_l, monitor, config_container[iZone]); + iter = LinSolver[iZone].FGCRODR_LinSolver(AdjRHS[iZone], AdjSol[iZone], product, Identity(), + tol_l, iter, eps_l, monitor, config_container[iZone], + FgcrodrMode::SAME_MAT, iter); totalIter -= iter+1; eps *= eps_l; } @@ -415,7 +416,7 @@ void CDiscAdjMultizoneDriver::Run() { /*--- Temporary warning because we need to test writing intermediate output to file (requires re-recording). ---*/ for(iZone = 0; iZone < nZone; iZone++) { for (auto iVolumeFreq = 0; iVolumeFreq < config_container[iZone]->GetnVolumeOutputFrequencies(); iVolumeFreq++){ - if (config_container[iZone]->GetVolumeOutputFrequency(iVolumeFreq) < nOuterIter) { + if (!time_domain && config_container[iZone]->GetVolumeOutputFrequency(iVolumeFreq) < nOuterIter) { if (rank == MASTER_NODE) { cout << "\nWARNING (iZone = " << iZone << "): " @@ -573,6 +574,7 @@ void CDiscAdjMultizoneDriver::Run() { } if (time_domain) { + for (const auto& ls : LinSolver) ls.ResetDeflation(); EvaluateSensitivities(TimeIter, (TimeIter+1) == driver_config->GetnTime_Iter()); } diff --git a/TestCases/disc_adj_fsi/Airfoil_2d/configFlow.cfg b/TestCases/disc_adj_fsi/Airfoil_2d/configFlow.cfg index 1c62889d0b6c..96fe4fb04192 100755 --- a/TestCases/disc_adj_fsi/Airfoil_2d/configFlow.cfg +++ b/TestCases/disc_adj_fsi/Airfoil_2d/configFlow.cfg @@ -49,13 +49,13 @@ JST_SENSOR_COEFF= ( 0.5, 0.02 ) TIME_DISCRE_FLOW= EULER_IMPLICIT % Linear solvers ------------------------------------------------------- % -LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 50 DISCADJ_LIN_SOLVER= FGMRES DISCADJ_LIN_PREC= ILU +LINEAR_SOLVER_ERROR= 1e-4 +LINEAR_SOLVER_ITER= 50 +% NEWTON_KRYLOV= YES +LINEAR_SOLVER_RESTART_DEFLATION= 8 QUASI_NEWTON_NUM_SAMPLES= 999 % DEFORM_LINEAR_SOLVER= CONJUGATE_GRADIENT @@ -71,7 +71,7 @@ TIME_ITER= 1 BGS_RELAXATION= FIXED_PARAMETER STAT_RELAX_PARAMETER= 1.0 % fluid -INNER_ITER= 51 +INNER_ITER= 41 CONV_STARTITER= 0 CONV_RESIDUAL_MINVAL= -9 diff --git a/TestCases/disc_adj_fsi/dyn_fsi/configFlow.cfg b/TestCases/disc_adj_fsi/dyn_fsi/configFlow.cfg index f5c233ec9ccc..edcd5c2dc31b 100644 --- a/TestCases/disc_adj_fsi/dyn_fsi/configFlow.cfg +++ b/TestCases/disc_adj_fsi/dyn_fsi/configFlow.cfg @@ -54,9 +54,7 @@ ENTROPY_FIX_COEFF= 0.01 TIME_DISCRE_FLOW= EULER_IMPLICIT % Linear solvers ------------------------------------------------------- % -LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_PREC= ILU -LINEAR_SOLVER_ERROR= 1E-6 +LINEAR_SOLVER_ERROR= 1E-30 LINEAR_SOLVER_ITER= 25 DISCADJ_LIN_SOLVER= SMOOTHER DISCADJ_LIN_PREC= ILU @@ -64,6 +62,7 @@ LINEAR_SOLVER_SMOOTHER_RELAXATION= 0.7 MGLEVEL= 0 NEWTON_KRYLOV= YES QUASI_NEWTON_NUM_SAMPLES= 999 +LINEAR_SOLVER_RESTART_DEFLATION= 5 % DEFORM_LINEAR_SOLVER= CONJUGATE_GRADIENT DEFORM_LINEAR_SOLVER_PREC= ILU diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index c729da516dec..1c25e4942d22 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -1322,7 +1322,8 @@ def main(): nonlinear_plane_stress.cfg_dir = "fea_fsi/VonMissesVerif" nonlinear_plane_stress.cfg_file = "nonlinear_plane_stress_2d.cfg" nonlinear_plane_stress.test_iter = 19 - nonlinear_plane_stress.test_vals = [-7.433449, -3.355607, -13.983863, 162480.000000, 43.000000, -4.070373] + nonlinear_plane_stress.test_vals = [-7.433449, -3.355607, -13.983863, 162480, 43, -4.070373] + nonlinear_plane_stress.tol = [2e-4, 2e-4, 2e-4, 1e-5, 1e-5, 4e-4] test_list.append(nonlinear_plane_stress) # Dynamic beam, 2d diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index 9e4863cc42ba..2c2369c6e9e4 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -286,8 +286,8 @@ def main(): discadj_fsi2.cfg_dir = "disc_adj_fsi/Airfoil_2d" discadj_fsi2.cfg_file = "config.cfg" discadj_fsi2.test_iter = 8 - discadj_fsi2.test_vals = [-4.773024, 0.915849, -3.863369, 0.295450, 3.839800] - discadj_fsi2.test_vals_aarch64 = [-4.772641, 0.917601, -3.863369, 0.295450, 3.839800] + discadj_fsi2.test_vals = [-3.824870, 1.979160, -3.863368, 0.295450, 3.839800] + discadj_fsi2.test_vals_aarch64 = [-3.824870, 1.979160, -3.863368, 0.295450, 3.839800] discadj_fsi2.tol = 0.00001 test_list.append(discadj_fsi2) @@ -559,6 +559,8 @@ def main(): dyn_discadj_fsi.reference_file = "grad_dv.opt.ref" dyn_discadj_fsi.reference_file_aarch64 = "grad_dv_aarch64.opt.ref" dyn_discadj_fsi.test_file = "grad_young.opt" + dyn_discadj_fsi.comp_threshold = 1e-6 + dyn_discadj_fsi.tol_file_percent = 0.1 dyn_discadj_fsi.unsteady = True pass_list.append(dyn_discadj_fsi.run_filediff()) test_list.append(dyn_discadj_fsi) diff --git a/TestCases/vandv.py b/TestCases/vandv.py index d207912bbfa9..ea6855b661d0 100644 --- a/TestCases/vandv.py +++ b/TestCases/vandv.py @@ -28,7 +28,7 @@ # You should have received a copy of the GNU Lesser General Public # License along with SU2. If not, see . -import sys +import sys, shutil from TestCase import TestCase def main(): @@ -48,6 +48,16 @@ def main(): p30n30.test_vals = [-11.267106, -11.168215, -11.182822, -10.949673, -14.233489, 0.052235, 2.830394, 1.318894, -1.210648, 1, 1.2763e+01] test_list.append(p30n30) + # This is not part of the V&V cases yet, its tested in this script because it is a relatively long test (~1 min). + shutil.copy("vandv/rans/30p30n/solution.dat", "vandv/rans/30p30n/solution_0.dat") + p30n30_ad = TestCase('30P30N_ad') + p30n30_ad.cfg_dir = "vandv/rans/30p30n" + p30n30_ad.cfg_file = "config_ad.cfg" + p30n30_ad.test_iter = 9 + p30n30_ad.test_vals = [-7.283709, -6.072615, -5.995304, -7.197048, -4.568373, -1.167146, -2.316777, 1.1791e-01, 3.4123e+01] + p30n30_ad.command = TestCase.Command("mpirun -n 2", "SU2_CFD_AD") + test_list.append(p30n30_ad) + # flat plate - sst-v1994m flatplate_sst1994m = TestCase('flatplate_sst1994m') flatplate_sst1994m.cfg_dir = "vandv/rans/flatplate" @@ -120,7 +130,8 @@ def main(): ################# for test in test_list: - test.command = TestCase.Command("mpirun -n 2", "SU2_CFD") + if test.command.empty(): + test.command = TestCase.Command("mpirun -n 2", "SU2_CFD") test.timeout = 300 test.tol = 1e-5 #end diff --git a/TestCases/vandv/rans/30p30n/config_ad.cfg b/TestCases/vandv/rans/30p30n/config_ad.cfg new file mode 100644 index 000000000000..5892f8d5520a --- /dev/null +++ b/TestCases/vandv/rans/30p30n/config_ad.cfg @@ -0,0 +1,103 @@ +% ------------------------------- SOLVER -------------------------------- % +% +SOLVER= RANS +KIND_TURB_MODEL= SA +REF_DIMENSIONALIZATION= FREESTREAM_VEL_EQ_MACH +% +OBJECTIVE_FUNCTION= LIFT +% +% ----------------------------- FREESTREAM ------------------------------ % +% +MACH_NUMBER= 0.17 +AOA= 5.5 +INIT_OPTION= REYNOLDS +FREESTREAM_OPTION= TEMPERATURE_FS +FREESTREAM_TEMPERATURE= 295.56 +REYNOLDS_NUMBER= 1.71E6 +REYNOLDS_LENGTH= 0.4572 +% +% -------------------------- REFERENCE VALUES --------------------------- % +% +REF_AREA= 0.4572 +REF_LENGTH= 0.4572 +REF_ORIGIN_MOMENT_X= 0.0 +REF_ORIGIN_MOMENT_Y= 0.0 +REF_ORIGIN_MOMENT_Z= 0.0 +% +% ------------------------- BOUNDARY CONDITIONS ------------------------- % +% +MARKER_HEATFLUX= ( wall, 0.0 ) +MARKER_FAR= ( farfield ) +MARKER_PLOTTING= ( wall ) +MARKER_MONITORING= ( wall ) +% +% ---------------------------- FLUID MODELS ----------------------------- % +% +FLUID_MODEL= STANDARD_AIR +GAMMA_VALUE= 1.4 +GAS_CONSTANT= 287.058 +% +VISCOSITY_MODEL= SUTHERLAND +MU_REF= 1.716E-5 +MU_T_REF= 273.15 +SUTHERLAND_CONSTANT= 110.4 +% +CONDUCTIVITY_MODEL= CONSTANT_PRANDTL +PRANDTL_LAM= 0.72 +PRANDTL_TURB= 0.90 +% +% ----------------------- SPATIAL DISCRETIZATION ------------------------ % +% +NUM_METHOD_GRAD= GREEN_GAUSS +CONV_NUM_METHOD_FLOW= ROE +ENTROPY_FIX_COEFF= 1e-5 +MUSCL_FLOW= YES +SLOPE_LIMITER_FLOW= VAN_ALBADA_EDGE +% +CONV_NUM_METHOD_TURB= SCALAR_UPWIND +MUSCL_TURB= NO +% +% ---------- PSEUDOTIME INTEGRATION / CONVERGENCE ACCELERATION ---------- % +% +TIME_DISCRE_FLOW= EULER_IMPLICIT +TIME_DISCRE_TURB= EULER_IMPLICIT +% +CFL_NUMBER= 2500 +CFL_REDUCTION_TURB= 1 +CFL_ADAPT= NO +% +DISCADJ_LIN_SOLVER= SMOOTHER +DISCADJ_LIN_PREC= ILU +LINEAR_SOLVER_ERROR= 1e-30 +LINEAR_SOLVER_ITER= 20 +LINEAR_SOLVER_SMOOTHER_RELAXATION= 0.6 +% +MGLEVEL= 0 +% +% Adjoint GMRES settings. +MULTIZONE= YES +NEWTON_KRYLOV= YES +QUASI_NEWTON_NUM_SAMPLES= 999 +% Acts as the restart frequency. +INNER_ITER= 30 +% This should be ~1/4 of the restart frequency. After the first outer +% iteration, the solver does "frequency - deflation" inner iterations. +LINEAR_SOLVER_RESTART_DEFLATION= 5 +% +% ------------------------ CONVERGENCE CRITERIA ------------------------- % +% +OUTER_ITER= 10 +CONV_RESIDUAL_MINVAL= -8 +% +% --------------------------- INPUT / OUTPUT ---------------------------- % +% +MESH_FILENAME= 2D_L1_coarse_r1.su2 +MESH_FORMAT= SU2 +RESTART_SOL= NO +OUTPUT_WRT_FREQ= 1000 +SCREEN_WRT_FREQ_INNER= 1 +WRT_AD_STATISTICS= NO +WRT_ZONE_CONV= NO +WRT_ZONE_HIST= YES +HISTORY_OUTPUT= ( ITER, RMS_RES, LINSOL, SENSITIVITY ) +SCREEN_OUTPUT= ( OUTER_ITER, ITER_TIME, RMS_RES[0], LINSOL_RESIDUAL[0], LINSOL_RESIDUAL_TURB[0], SENS_AOA[0], SENS_MACH[0] ) From 536a63981e65adcdcf1cefcf89d0d7759de7303a Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Sun, 12 Apr 2026 22:31:21 +0100 Subject: [PATCH 213/229] Make the Tracy integration functional (#2785) * fix tracy integration and start making it do something usefull * annotate drivers * annotate integration classes * annotate iteration classes * annotate solvers * some solver inlines * annotate linear algebra * cleanup unused profiling stuff * fix --- Common/include/CConfig.hpp | 20 +- Common/include/linear_algebra/CSysSolve.hpp | 2 + Common/include/tracy_structure.hpp | 12 +- Common/src/CConfig.cpp | 192 ------------------ Common/src/linear_algebra/CSysMatrix.cpp | 28 +++ Common/src/linear_algebra/CSysSolve.cpp | 15 ++ Common/src/linear_algebra/CSysVector.cpp | 3 +- .../include/solvers/CFVMFlowSolverBase.hpp | 3 +- .../include/solvers/CFVMFlowSolverBase.inl | 46 +++++ SU2_CFD/include/solvers/CScalarSolver.inl | 24 ++- SU2_CFD/src/SU2_CFD.cpp | 3 + .../src/drivers/CDiscAdjMultizoneDriver.cpp | 26 +++ .../src/drivers/CDiscAdjSinglezoneDriver.cpp | 10 + SU2_CFD/src/drivers/CDriver.cpp | 46 +++-- SU2_CFD/src/drivers/CDriverBase.cpp | 1 + SU2_CFD/src/drivers/CDummyDriver.cpp | 2 + SU2_CFD/src/drivers/CMultizoneDriver.cpp | 20 +- SU2_CFD/src/drivers/CSinglezoneDriver.cpp | 9 + .../src/integration/CFEM_DG_Integration.cpp | 3 + SU2_CFD/src/integration/CIntegration.cpp | 6 + .../src/integration/CIntegrationFactory.cpp | 2 + .../src/integration/CMultiGridIntegration.cpp | 17 ++ .../src/integration/CNewtonIntegration.cpp | 8 + .../integration/CSingleGridIntegration.cpp | 4 + .../integration/CStructuralIntegration.cpp | 4 + SU2_CFD/src/iteration/CAdjFluidIteration.cpp | 3 + .../src/iteration/CDiscAdjFEAIteration.cpp | 11 + .../src/iteration/CDiscAdjFluidIteration.cpp | 8 + .../src/iteration/CDiscAdjHeatIteration.cpp | 8 + SU2_CFD/src/iteration/CFEAIteration.cpp | 6 + SU2_CFD/src/iteration/CFEMFluidIteration.cpp | 2 + SU2_CFD/src/iteration/CFluidIteration.cpp | 28 ++- SU2_CFD/src/iteration/CHeatIteration.cpp | 2 + SU2_CFD/src/iteration/CIteration.cpp | 6 +- SU2_CFD/src/iteration/CIterationFactory.cpp | 1 + SU2_CFD/src/iteration/CTurboIteration.cpp | 3 + SU2_CFD/src/solvers/CAdjEulerSolver.cpp | 34 ++++ SU2_CFD/src/solvers/CAdjNSSolver.cpp | 8 + SU2_CFD/src/solvers/CAdjTurbSolver.cpp | 22 +- SU2_CFD/src/solvers/CBaselineSolver.cpp | 6 + SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp | 3 + SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp | 12 ++ SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp | 8 + SU2_CFD/src/solvers/CDiscAdjSolver.cpp | 13 ++ SU2_CFD/src/solvers/CEulerSolver.cpp | 58 ++++++ SU2_CFD/src/solvers/CFEASolver.cpp | 48 +++++ SU2_CFD/src/solvers/CFEASolverBase.cpp | 4 + SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp | 60 ++++++ SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp | 33 +++ .../src/solvers/CGradientSmoothingSolver.cpp | 25 +++ SU2_CFD/src/solvers/CHeatSolver.cpp | 16 ++ SU2_CFD/src/solvers/CIncEulerSolver.cpp | 35 ++++ SU2_CFD/src/solvers/CIncNSSolver.cpp | 13 ++ SU2_CFD/src/solvers/CMeshSolver.cpp | 17 ++ SU2_CFD/src/solvers/CNEMOEulerSolver.cpp | 28 +++ SU2_CFD/src/solvers/CNEMONSSolver.cpp | 13 ++ SU2_CFD/src/solvers/CNSSolver.cpp | 16 ++ SU2_CFD/src/solvers/CRadP1Solver.cpp | 12 ++ SU2_CFD/src/solvers/CRadSolver.cpp | 4 + SU2_CFD/src/solvers/CSolver.cpp | 40 ++++ .../src/solvers/CSpeciesFlameletSolver.cpp | 15 ++ SU2_CFD/src/solvers/CSpeciesSolver.cpp | 15 ++ SU2_CFD/src/solvers/CTransLMSolver.cpp | 11 + SU2_CFD/src/solvers/CTurbSASolver.cpp | 23 +++ SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 17 ++ SU2_CFD/src/solvers/CTurbSolver.cpp | 9 + meson.build | 6 +- meson_options.txt | 2 +- subprojects/tracy.wrap | 2 +- 69 files changed, 954 insertions(+), 258 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 8d5e4f377899..bbb2cf12bf8d 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -46,6 +46,7 @@ #include "option_structure.hpp" #include "containers/container_decorators.hpp" #include "toolboxes/printing_toolbox.hpp" +#include "tracy_structure.hpp" #ifdef HAVE_CGNS #include "cgnslib.h" @@ -9097,25 +9098,6 @@ class CConfig { */ unsigned long GetNonphysical_Reconstr(void) const { return Nonphys_Reconstr; } - /*! - * \brief Start the timer for profiling subroutines. - * \param[in] val_start_time - the value of the start time. - */ - void Tick(double *val_start_time); - - /*! - * \brief Stop the timer for profiling subroutines and store results. - * \param[in] val_start_time - the value of the start time. - * \param[in] val_function_name - string for the name of the profiled subroutine. - * \param[in] val_group_id - string for the name of the profiled subroutine. - */ - void Tock(double val_start_time, const string& val_function_name, int val_group_id); - - /*! - * \brief Write a CSV file containing the results of the profiling. - */ - void SetProfilingCSV(void); - /*! * \brief Start the timer for profiling subroutines. * \param[in] val_start_time - the value of the start time. diff --git a/Common/include/linear_algebra/CSysSolve.hpp b/Common/include/linear_algebra/CSysSolve.hpp index ddee4f0abc84..9abe78396783 100644 --- a/Common/include/linear_algebra/CSysSolve.hpp +++ b/Common/include/linear_algebra/CSysSolve.hpp @@ -246,6 +246,7 @@ class CSysSolve { */ template void HandleTemporariesIn(const CSysVector& LinSysRes, CSysVector& LinSysSol) { + SU2_ZONE_SCOPED if constexpr (std::is_same_v) { /*--- Same type specialization, temporary variables are not required. ---*/ BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -273,6 +274,7 @@ class CSysSolve { */ template void HandleTemporariesOut(CSysVector& LinSysSol) { + SU2_ZONE_SCOPED if constexpr (std::is_same_v) { /*--- Same type specialization, temporary variables are not required. ---*/ BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { diff --git a/Common/include/tracy_structure.hpp b/Common/include/tracy_structure.hpp index 043f9eb06a43..338830845062 100644 --- a/Common/include/tracy_structure.hpp +++ b/Common/include/tracy_structure.hpp @@ -6,7 +6,6 @@ * they can be completely "disabled" when compiling without tracy. * \note Do not include tracy headers explicitly anywhere, use this header instead. * \note To enable tracy, define the TRACY_ENABLE macro during compilation. - * \author Divyaprakash * \version 8.4.0 "Harrier" * * SU2 Project Website: https://su2code.github.io @@ -32,11 +31,16 @@ #pragma once -#ifdef HAVE_TRACY +#ifdef TRACY_ENABLE #include "tracy/Tracy.hpp" -#define SU2_ZONE_SCOPED ZoneScoped -#define SU2_ZONE_SCOPED_N(name) ZoneScopedN(name) +#define SU2_ZONE_SCOPED ZoneScoped; +#define SU2_ZONE_SCOPED_N(name) ZoneScopedN(name); #else #define SU2_ZONE_SCOPED #define SU2_ZONE_SCOPED_N(name) #endif + +#define BEGIN_SU2_ZONE_N(name) \ + { \ + SU2_ZONE_SCOPED_N(name) +#define END_SU2_ZONE } diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 65a84ed437d5..2ba453b197b0 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -46,11 +46,6 @@ using namespace PrintingToolbox; #endif #endif -vector Profile_Function_tp; /*!< \brief Vector of string names for profiled functions. */ -vector Profile_Time_tp; /*!< \brief Vector of elapsed time for profiled functions. */ -vector Profile_ID_tp; /*!< \brief Vector of group ID number for profiled functions. */ -map > Profile_Map_tp; /*!< \brief Map containing the final results for profiled functions. */ - map GEMM_Profile_MNK; /*!< \brief Map, which maps the GEMM size to the index where the data for this GEMM is stored in several vectors. */ vector GEMM_Profile_NCalls; /*!< \brief Vector, which stores the number of calls to this @@ -59,8 +54,6 @@ vector GEMM_Profile_TotTime; /*!< \brief Total time spent for this vector GEMM_Profile_MinTime; /*!< \brief Minimum time spent for this GEMM size. */ vector GEMM_Profile_MaxTime; /*!< \brief Maximum time spent for this GEMM size. */ -//#pragma omp threadprivate(Profile_Function_tp, Profile_Time_tp, Profile_ID_tp, Profile_Map_tp) - CConfig::CConfig(char case_filename[MAX_STRING_SIZE], SU2_COMPONENT val_software, bool verb_high) { @@ -9953,191 +9946,6 @@ short CConfig::FindInterfaceMarker(unsigned short iInterface) const { return -1; } -void CConfig::Tick(double *val_start_time) { - -#ifdef PROFILE - *val_start_time = SU2_MPI::Wtime(); -#endif - -} - -void CConfig::Tock(double val_start_time, const string& val_function_name, int val_group_id) { - -#ifdef PROFILE - - double val_stop_time = 0.0, val_elapsed_time = 0.0; - - val_stop_time = SU2_MPI::Wtime(); - - /*--- Compute the elapsed time for this subroutine ---*/ - val_elapsed_time = val_stop_time - val_start_time; - - /*--- Store the subroutine name and the elapsed time ---*/ - Profile_Function_tp.push_back(val_function_name); - Profile_Time_tp.push_back(val_elapsed_time); - Profile_ID_tp.push_back(val_group_id); - -#endif - -} - -void CConfig::SetProfilingCSV() { - -#ifdef PROFILE - - int rank = MASTER_NODE; - int size = SINGLE_NODE; -#ifdef HAVE_MPI - SU2_MPI::Comm_rank(SU2_MPI::GetComm(), &rank); - SU2_MPI::Comm_size(SU2_MPI::GetComm(), &size); -#endif - - /*--- Each rank has the same stack trace, so the they have the same - function calls and ordering in the vectors. We're going to reduce - the timings from each rank and extract the avg, min, and max timings. ---*/ - - /*--- First, create a local mapping, so that we can extract the - min and max values for each function. ---*/ - - for (unsigned int i = 0; i < Profile_Function_tp.size(); i++) { - - /*--- Add the function and initialize if not already stored (the ID - only needs to be stored the first time).---*/ - if (Profile_Map_tp.find(Profile_Function_tp[i]) == Profile_Map_tp.end()) { - - vector profile; profile.push_back(i); - Profile_Map_tp.insert(pair >(Profile_Function_tp[i],profile)); - - } else { - - /*--- This function has already been added, so simply increment the - number of calls and total time for this function. ---*/ - - Profile_Map_tp[Profile_Function_tp[i]].push_back(i); - - } - } - - /*--- We now have everything gathered by function name, so we can loop over - each function and store the min/max times. ---*/ - - int map_size = 0; - for (map >::iterator it=Profile_Map_tp.begin(); it!=Profile_Map_tp.end(); ++it) { - map_size++; - } - - /*--- Allocate and initialize memory ---*/ - - double *l_min_red = nullptr, *l_max_red = nullptr, *l_tot_red = nullptr, *l_avg_red = nullptr; - int *n_calls_red = nullptr; - double* l_min = new double[map_size]; - double* l_max = new double[map_size]; - double* l_tot = new double[map_size]; - double* l_avg = new double[map_size]; - int* n_calls = new int[map_size]; - for (int i = 0; i < map_size; i++) - { - l_min[i] = 1e10; - l_max[i] = 0.0; - l_tot[i] = 0.0; - l_avg[i] = 0.0; - n_calls[i] = 0; - } - - /*--- Collect the info for each function from the current rank ---*/ - - int func_counter = 0; - for (map >::iterator it=Profile_Map_tp.begin(); it!=Profile_Map_tp.end(); ++it) { - - for (unsigned int i = 0; i < (it->second).size(); i++) { - n_calls[func_counter]++; - l_tot[func_counter] += Profile_Time_tp[(it->second)[i]]; - if (Profile_Time_tp[(it->second)[i]] < l_min[func_counter]) - l_min[func_counter] = Profile_Time_tp[(it->second)[i]]; - if (Profile_Time_tp[(it->second)[i]] > l_max[func_counter]) - l_max[func_counter] = Profile_Time_tp[(it->second)[i]]; - - } - l_avg[func_counter] = l_tot[func_counter]/((double)n_calls[func_counter]); - func_counter++; - } - - /*--- Now reduce the data ---*/ - - if (rank == MASTER_NODE) { - l_min_red = new double[map_size]; - l_max_red = new double[map_size]; - l_tot_red = new double[map_size]; - l_avg_red = new double[map_size]; - n_calls_red = new int[map_size]; - } - -#ifdef HAVE_MPI - MPI_Reduce(n_calls, n_calls_red, map_size, MPI_INT, MPI_SUM, MASTER_NODE, SU2_MPI::GetComm()); - MPI_Reduce(l_tot, l_tot_red, map_size, MPI_DOUBLE, MPI_SUM, MASTER_NODE, SU2_MPI::GetComm()); - MPI_Reduce(l_avg, l_avg_red, map_size, MPI_DOUBLE, MPI_SUM, MASTER_NODE, SU2_MPI::GetComm()); - MPI_Reduce(l_min, l_min_red, map_size, MPI_DOUBLE, MPI_MIN, MASTER_NODE, SU2_MPI::GetComm()); - MPI_Reduce(l_max, l_max_red, map_size, MPI_DOUBLE, MPI_MAX, MASTER_NODE, SU2_MPI::GetComm()); -#else - memcpy(n_calls_red, n_calls, map_size*sizeof(int)); - memcpy(l_tot_red, l_tot, map_size*sizeof(double)); - memcpy(l_avg_red, l_avg, map_size*sizeof(double)); - memcpy(l_min_red, l_min, map_size*sizeof(double)); - memcpy(l_max_red, l_max, map_size*sizeof(double)); -#endif - - /*--- The master rank will write the file ---*/ - - if (rank == MASTER_NODE) { - - /*--- Take averages over all ranks on the master ---*/ - - for (int i = 0; i < map_size; i++) { - l_tot_red[i] = l_tot_red[i]/(double)size; - l_avg_red[i] = l_avg_red[i]/(double)size; - n_calls_red[i] = n_calls_red[i]/size; - } - - /*--- Now write a CSV file with the processed results ---*/ - - ofstream Profile_File; - Profile_File.precision(15); - Profile_File.open("profiling.csv"); - - /*--- Create the CSV header ---*/ - - Profile_File << "\"Function_Name\", \"N_Calls\", \"Avg_Total_Time\", \"Avg_Time\", \"Min_Time\", \"Max_Time\", \"Function_ID\"" << endl; - - /*--- Loop through the map and write the results to the file ---*/ - - func_counter = 0; - for (map >::iterator it=Profile_Map_tp.begin(); it!=Profile_Map_tp.end(); ++it) { - - Profile_File << scientific << it->first << ", " << n_calls_red[func_counter] << ", " << l_tot_red[func_counter] << ", " << l_avg_red[func_counter] << ", " << l_min_red[func_counter] << ", " << l_max_red[func_counter] << ", " << (int)Profile_ID_tp[(it->second)[0]] << endl; - func_counter++; - } - - Profile_File.close(); - - } - - delete [] l_min; - delete [] l_max; - delete [] l_avg; - delete [] l_tot; - delete [] n_calls; - if (rank == MASTER_NODE) { - delete [] l_min_red; - delete [] l_max_red; - delete [] l_avg_red; - delete [] l_tot_red; - delete [] n_calls_red; - } - -#endif - -} - void CConfig::GEMM_Tick(double *val_start_time) const { #ifdef PROFILE diff --git a/Common/src/linear_algebra/CSysMatrix.cpp b/Common/src/linear_algebra/CSysMatrix.cpp index 1873128def23..5552f6fc801b 100644 --- a/Common/src/linear_algebra/CSysMatrix.cpp +++ b/Common/src/linear_algebra/CSysMatrix.cpp @@ -34,6 +34,8 @@ template CSysMatrix::CSysMatrix() : rank(SU2_MPI::GetRank()), size(SU2_MPI::GetSize()) { + SU2_ZONE_SCOPED + nPoint = nPointDomain = nVar = nEqn = 0; nnz = nnz_ilu = 0; ilu_fill_in = 0; @@ -63,6 +65,8 @@ CSysMatrix::CSysMatrix() : rank(SU2_MPI::GetRank()), size(SU2_MPI::G template CSysMatrix::~CSysMatrix() { + SU2_ZONE_SCOPED + delete[] omp_partitions; MemoryAllocation::aligned_free(ILU_matrix); MemoryAllocation::aligned_free(matrix); @@ -86,6 +90,7 @@ template void CSysMatrix::Initialize(unsigned long npoint, unsigned long npointdomain, unsigned short nvar, unsigned short neqn, bool EdgeConnect, CGeometry* geometry, const CConfig* config, bool needTranspPtr, bool grad_mode) { + SU2_ZONE_SCOPED assert(omp_get_thread_num() == 0 && "Only the master thread is allowed to initialize the matrix."); if (npoint == 0) return; @@ -250,6 +255,7 @@ void CSysMatrix::Initialize(unsigned long npoint, unsigned long npoi template void CSysMatrixComms::Initiate(const CSysVector& x, CGeometry* geometry, const CConfig* config, MPI_QUANTITIES commType) { + SU2_ZONE_SCOPED if (geometry->nP2PSend == 0) return; /*--- Local variables ---*/ @@ -365,6 +371,7 @@ void CSysMatrixComms::Initiate(const CSysVector& x, CGeometry* geometry, cons template void CSysMatrixComms::Complete(CSysVector& x, CGeometry* geometry, const CConfig* config, MPI_QUANTITIES commType) { + SU2_ZONE_SCOPED if (geometry->nP2PRecv == 0) return; /*--- Local variables ---*/ @@ -478,6 +485,7 @@ void CSysMatrixComms::Complete(CSysVector& x, CGeometry* geometry, const CCon template void CSysMatrix::SetValZero() { + SU2_ZONE_SCOPED const auto size = nnz * nVar * nEqn; const auto chunk = roundUpDiv(size, omp_get_num_threads()); const auto begin = chunk * omp_get_thread_num(); @@ -488,6 +496,7 @@ void CSysMatrix::SetValZero() { template void CSysMatrix::SetValDiagonalZero() { + SU2_ZONE_SCOPED SU2_OMP_FOR_STAT(omp_heavy_size) for (auto iPoint = 0ul; iPoint < nPointDomain; ++iPoint) for (auto index = 0ul; index < nVar * nEqn; ++index) matrix[dia_ptr[iPoint] * nVar * nEqn + index] = 0.0; @@ -602,6 +611,7 @@ void CSysMatrix::MatrixInverse(ScalarType* matrix, ScalarType* inver template void CSysMatrix::DeleteValsRowi(unsigned long block_i, unsigned long row) { + SU2_ZONE_SCOPED for (auto index = row_ptr[block_i]; index < row_ptr[block_i + 1]; index++) { for (auto iVar = 0u; iVar < nVar; iVar++) matrix[index * nVar * nVar + row * nVar + iVar] = 0.0; // Delete row values in the block @@ -613,6 +623,7 @@ void CSysMatrix::DeleteValsRowi(unsigned long block_i, unsigned long template void CSysMatrix::MatrixVectorProduct(const CSysVector& vec, CSysVector& prod, CGeometry* geometry, const CConfig* config) const { + SU2_ZONE_SCOPED /*--- Some checks for consistency between CSysMatrix and the CSysVectors ---*/ #ifndef NDEBUG if ((nEqn != vec.GetNVar()) || (nVar != prod.GetNVar())) { @@ -643,6 +654,7 @@ void CSysMatrix::MatrixVectorProduct(const CSysVector& v template void CSysMatrix::BuildJacobiPreconditioner() { + SU2_ZONE_SCOPED /*--- Build Jacobi preconditioner (M = D), compute and store the inverses of the diagonal blocks. ---*/ SU2_OMP_FOR_DYN(omp_heavy_size) for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) @@ -654,6 +666,7 @@ template void CSysMatrix::ComputeJacobiPreconditioner(const CSysVector& vec, CSysVector& prod, CGeometry* geometry, const CConfig* config) const { + SU2_ZONE_SCOPED /*--- Apply Jacobi preconditioner, y = D^{-1} * x, the inverse of the diagonal is already known. ---*/ SU2_OMP_BARRIER SU2_OMP_FOR_DYN(omp_heavy_size) @@ -668,6 +681,7 @@ void CSysMatrix::ComputeJacobiPreconditioner(const CSysVector void CSysMatrix::BuildILUPreconditioner() { + SU2_ZONE_SCOPED /*--- Copy block matrix to compute factorization in-place. ---*/ if (ilu_fill_in == 0) { @@ -766,6 +780,7 @@ void CSysMatrix::BuildILUPreconditioner() { template void CSysMatrix::ComputeILUPreconditioner(const CSysVector& vec, CSysVector& prod, CGeometry* geometry, const CConfig* config) const { + SU2_ZONE_SCOPED /*--- Coherent view of vectors. ---*/ SU2_OMP_BARRIER @@ -823,6 +838,7 @@ template void CSysMatrix::ComputeLU_SGSPreconditioner(const CSysVector& vec, CSysVector& prod, CGeometry* geometry, const CConfig* config) const { + SU2_ZONE_SCOPED /*--- First part of the symmetric iteration: (D+L).x* = b ---*/ /*--- Coherent view of vectors. ---*/ @@ -886,6 +902,7 @@ void CSysMatrix::ComputeLU_SGSPreconditioner(const CSysVector void CSysMatrix::BuildLineletPreconditioner(const CGeometry* geometry, const CConfig* config) { + SU2_ZONE_SCOPED BuildJacobiPreconditioner(); /*--- Allocate working vectors if not done yet. ---*/ @@ -917,6 +934,7 @@ template void CSysMatrix::ComputeLineletPreconditioner(const CSysVector& vec, CSysVector& prod, CGeometry* geometry, const CConfig* config) const { + SU2_ZONE_SCOPED /*--- Coherent view of vectors. ---*/ SU2_OMP_BARRIER @@ -1021,6 +1039,7 @@ void CSysMatrix::ComputeLineletPreconditioner(const CSysVector void CSysMatrix::ComputeResidual(const CSysVector& sol, const CSysVector& f, CSysVector& res) const { + SU2_ZONE_SCOPED SU2_OMP_BARRIER SU2_OMP_FOR_DYN(omp_heavy_size) for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { @@ -1035,6 +1054,7 @@ template template void CSysMatrix::EnforceSolutionAtNode(const unsigned long node_i, const OtherType* x_i, CSysVector& b) { + SU2_ZONE_SCOPED /*--- Eliminate the row associated with node i (Block_ii = I and all other Block_ij = 0). * To preserve eventual symmetry, also attempt to eliminate the column, if the sparse pattern is not * symmetric the entire column may not be eliminated, the result (matrix and vector) is still correct. @@ -1076,6 +1096,8 @@ void CSysMatrix::EnforceSolutionAtNode(const unsigned long node_i, c template template void CSysMatrix::EnforceZeroProjection(unsigned long node_i, const OtherType* n, CSysVector& b) { + SU2_ZONE_SCOPED + for (auto index = row_ptr[node_i]; index < row_ptr[node_i + 1]; ++index) { const auto node_j = col_ind[index]; @@ -1132,6 +1154,8 @@ void CSysMatrix::EnforceZeroProjection(unsigned long node_i, const O template void CSysMatrix::SetDiagonalAsColumnSum() { + SU2_ZONE_SCOPED + SU2_OMP_FOR_DYN(omp_heavy_size) for (auto iPoint = 0ul; iPoint < nPoint; ++iPoint) { auto block_ii = &matrix[dia_ptr[iPoint] * nVar * nEqn]; @@ -1148,6 +1172,7 @@ void CSysMatrix::SetDiagonalAsColumnSum() { template void CSysMatrix::TransposeInPlace() { + SU2_ZONE_SCOPED assert(nVar == nEqn && "Cannot transpose with nVar != nEqn."); auto swapAndTransp = [](unsigned long n, ScalarType* a, ScalarType* b) { @@ -1223,6 +1248,7 @@ void CSysMatrix::TransposeInPlace() { template void CSysMatrix::MatrixMatrixAddition(ScalarType alpha, const CSysMatrix& B) { + SU2_ZONE_SCOPED /*--- Check that the sparse structure is shared between the two matrices, * comparing pointers is ok as they are obtained from CGeometry. ---*/ bool ok = (row_ptr == B.row_ptr) && (col_ind == B.col_ind) && (nVar == B.nVar) && (nEqn == B.nEqn) && (nnz == B.nnz); @@ -1239,6 +1265,7 @@ void CSysMatrix::MatrixMatrixAddition(ScalarType alpha, const CSysMa template void CSysMatrix::BuildPastixPreconditioner(CGeometry* geometry, const CConfig* config, unsigned short kind_fact) { + SU2_ZONE_SCOPED #ifdef HAVE_PASTIX /*--- Pastix will launch nested threads. ---*/ BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -1255,6 +1282,7 @@ template void CSysMatrix::ComputePastixPreconditioner(const CSysVector& vec, CSysVector& prod, CGeometry* geometry, const CConfig* config) const { + SU2_ZONE_SCOPED #ifdef HAVE_PASTIX SU2_OMP_SAFE_GLOBAL_ACCESS(pastix_wrapper.Solve(vec, prod);) diff --git a/Common/src/linear_algebra/CSysSolve.cpp b/Common/src/linear_algebra/CSysSolve.cpp index 04497a80c79e..d4e1bc95289c 100644 --- a/Common/src/linear_algebra/CSysSolve.cpp +++ b/Common/src/linear_algebra/CSysSolve.cpp @@ -62,6 +62,8 @@ constexpr float linSolEpsilon() { template void LinearCombinationImpl(const unsigned long n, const Vectors& vs, const Weights& ws, CSysVector& v, bool inc = false) { + SU2_ZONE_SCOPED + if (n == 0) { if (!inc) v = ScalarType{}; return; @@ -191,6 +193,7 @@ void CSysSolve::SolveReduced(int n, const su2matrix& Hsb template bool CSysSolve::ModGramSchmidt(bool shared_hsbg, int i, su2matrix& Hsbg, vector>& w) const { + SU2_ZONE_SCOPED const auto thread = omp_get_thread_num(); /*--- If Hsbg is shared by multiple threads calling this function, only one @@ -293,6 +296,8 @@ unsigned long CSysSolve::CG_LinSolver(const CSysVector& const CPreconditioner& precond, ScalarType tol, unsigned long m, ScalarType& residual, bool monitoring, const CConfig* config) const { + SU2_ZONE_SCOPED + const bool masterRank = (SU2_MPI::GetRank() == MASTER_NODE); ScalarType norm_r = 0.0, norm0 = 0.0; unsigned long i = 0; @@ -442,6 +447,8 @@ unsigned long CSysSolve::FGMRES_LinSolver(const CSysVector& precond, ScalarType tol, unsigned long m, ScalarType& residual, bool monitoring, const CConfig* config) const { + SU2_ZONE_SCOPED + const bool masterRank = (SU2_MPI::GetRank() == MASTER_NODE); const bool flexible = !precond.IsIdentity(); /*--- If we call the solver outside of a parallel region, but the number of threads allows, @@ -671,6 +678,7 @@ unsigned long CSysSolve::FGCRODR_LinSolverImpl(const CSysVector; using EigenVector = Eigen::Matrix; @@ -1067,6 +1075,8 @@ unsigned long CSysSolve::BCGSTAB_LinSolver(const CSysVector& precond, ScalarType tol, unsigned long m, ScalarType& residual, bool monitoring, const CConfig* config) const { + SU2_ZONE_SCOPED + const bool masterRank = (SU2_MPI::GetRank() == MASTER_NODE); ScalarType norm_r = 0.0, norm0 = 0.0; unsigned long i = 0; @@ -1240,6 +1250,8 @@ unsigned long CSysSolve::Smoother_LinSolver(const CSysVector& precond, ScalarType tol, unsigned long m, ScalarType& residual, bool monitoring, const CConfig* config) const { + SU2_ZONE_SCOPED + const bool masterRank = (SU2_MPI::GetRank() == MASTER_NODE); const bool fix_iter_mode = tol < eps; ScalarType norm_r = 0.0, norm0 = 0.0; @@ -1394,6 +1406,7 @@ template unsigned long CSysSolve::Solve(CSysMatrix& Jacobian, const CSysVector& LinSysRes, CSysVector& LinSysSol, CGeometry* geometry, const CConfig* config) { + SU2_ZONE_SCOPED /*--- A word about the templated types. It is assumed that the residual and solution vectors are always of su2doubles, meaning that they are active in the discrete adjoint. The same assumption is made in SetExternalSolve. @@ -1610,6 +1623,8 @@ template unsigned long CSysSolve::Solve_b(CSysMatrix& Jacobian, const CSysVector& LinSysRes, CSysVector& LinSysSol, CGeometry* geometry, const CConfig* config, const bool directCall) { + SU2_ZONE_SCOPED + unsigned short KindSolver, KindPrecond; unsigned long MaxIter, IterLinSol = 0; ScalarType SolverTol; diff --git a/Common/src/linear_algebra/CSysVector.cpp b/Common/src/linear_algebra/CSysVector.cpp index 8f767f44ab4c..2a31026a232a 100644 --- a/Common/src/linear_algebra/CSysVector.cpp +++ b/Common/src/linear_algebra/CSysVector.cpp @@ -72,13 +72,14 @@ const su2matrix& CSysVector::multiDot(const std::vector< const size_t i0, const size_t n, const std::vector>& W, const size_t m) { + SU2_ZONE_SCOPED static constexpr size_t BLOCK_SIZE = 1024; static su2matrix shared; if (n == 0 || m == 0) return shared; SU2_OMP_BARRIER - const auto size = V[0].nElmDomain; + const size_t size = V[0].nElmDomain; su2matrix local(n, m); local.setConstant(0); diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp index 9f04b0cbaf69..74b240707153 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp @@ -287,6 +287,7 @@ class CFVMFlowSolverBase : public CSolver { */ inline void FinalizeResidualComputation(const CGeometry *geometry, bool pausePreacc, unsigned long localCounter, CConfig* config) { + SU2_ZONE_SCOPED /*--- Restore preaccumulation and adjoint evaluation state. ---*/ AD::ResumePreaccumulation(pausePreacc); @@ -2434,7 +2435,7 @@ class CFVMFlowSolverBase : public CSolver { return UTau[val_marker][val_vertex]; } - /*! + /*! * \brief Get the eddy viscosity at the wall (wall functions). * \param[in] val_marker - Surface marker where the coefficient is computed. * \param[in] val_vertex - Vertex of the marker val_marker where the coefficient is evaluated. diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index cc2fa9a9e5ab..2d30f315ba2d 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -84,6 +84,8 @@ void CFVMFlowSolverBase::AeroCoeffsArray::setZero(int i) { template void CFVMFlowSolverBase::Allocate(const CConfig& config) { + SU2_ZONE_SCOPED + /*--- Define some auxiliar vector related with the residual ---*/ Residual_RMS.resize(nVar,0.0); @@ -216,6 +218,8 @@ void CFVMFlowSolverBase::Allocate(const CConfig& config) { template void CFVMFlowSolverBase::AllocateTerribleLegacyTemporaryVariables() { + SU2_ZONE_SCOPED + /*--- Define some auxiliary vectors related to the residual ---*/ Residual = new su2double[nVar](); @@ -247,6 +251,8 @@ void CFVMFlowSolverBase::AllocateTerribleLegacyTemporaryVariables() { template void CFVMFlowSolverBase::CommunicateInitialState(CGeometry* geometry, const CConfig* config) { + SU2_ZONE_SCOPED + /*--- Define solver parameters needed for execution of destructor ---*/ space_centered = (config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED); @@ -283,6 +289,8 @@ void CFVMFlowSolverBase::CommunicateInitialState(CGeometry* geometry, cons template void CFVMFlowSolverBase::HybridParallelInitialization(const CConfig& config, CGeometry& geometry) { + SU2_ZONE_SCOPED + #ifdef HAVE_OMP /*--- Get the edge coloring. If the expected parallel efficiency becomes too low setup the * reducer strategy. Where one loop is performed over edges followed by a point loop to @@ -370,6 +378,7 @@ void CFVMFlowSolverBase::HybridParallelInitialization(const CConfig& confi template CFVMFlowSolverBase::~CFVMFlowSolverBase() { + SU2_ZONE_SCOPED for (auto& mat : SlidingState) { for (auto ptr : mat) delete [] ptr; @@ -382,6 +391,8 @@ CFVMFlowSolverBase::~CFVMFlowSolverBase() { template void CFVMFlowSolverBase::SetPrimitive_Gradient_GG(CGeometry* geometry, const CConfig* config, bool reconstruction) { + SU2_ZONE_SCOPED + const auto& primitives = nodes->GetPrimitive(); auto& gradient = reconstruction ? nodes->GetGradient_Reconstruction() : nodes->GetGradient_Primitive(); const auto comm = reconstruction? MPI_QUANTITIES::PRIMITIVE_GRAD_REC : MPI_QUANTITIES::PRIMITIVE_GRADIENT; @@ -393,6 +404,8 @@ void CFVMFlowSolverBase::SetPrimitive_Gradient_GG(CGeometry* geometry, con template void CFVMFlowSolverBase::SetPrimitive_Gradient_LS(CGeometry* geometry, const CConfig* config, bool reconstruction) { + SU2_ZONE_SCOPED + /*--- Set a flag for unweighted or weighted least-squares. ---*/ bool weighted; PERIODIC_QUANTITIES commPer; @@ -417,6 +430,8 @@ void CFVMFlowSolverBase::SetPrimitive_Gradient_LS(CGeometry* geometry, con template void CFVMFlowSolverBase::SetPrimitive_Limiter(CGeometry* geometry, const CConfig* config) { + SU2_ZONE_SCOPED + const auto kindLimiter = config->GetKind_SlopeLimit_Flow(); const auto umusclKappa = config->GetMUSCL_Kappa_Flow(); const auto& primitives = nodes->GetPrimitive(); @@ -432,6 +447,7 @@ void CFVMFlowSolverBase::SetPrimitive_Limiter(CGeometry* geometry, const C template void CFVMFlowSolverBase::Viscous_Residual_impl(unsigned long iEdge, CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool tkeNeeded = (config->GetKind_Turb_Model() == TURB_MODEL::SST); @@ -494,6 +510,7 @@ void CFVMFlowSolverBase::Viscous_Residual_impl(unsigned long iEdge, CGeome template void CFVMFlowSolverBase::ComputeVerificationError(CGeometry* geometry, CConfig* config) { + SU2_ZONE_SCOPED /*--- The errors only need to be computed on the finest grid. ---*/ if (MGLevel != MESH_0) return; @@ -557,6 +574,8 @@ void CFVMFlowSolverBase::ComputeVerificationError(CGeometry* geometry, CCo template void CFVMFlowSolverBase::ComputeUnderRelaxationFactor(const CConfig* config) { + SU2_ZONE_SCOPED + /* Loop over the solution update given by relaxing the linear system for this nonlinear iteration. */ @@ -594,6 +613,7 @@ void CFVMFlowSolverBase::ComputeUnderRelaxationFactor(const CConfig* confi template void CFVMFlowSolverBase::ImplicitEuler_Iteration(CGeometry *geometry, CSolver**, CConfig *config) { + SU2_ZONE_SCOPED PrepareImplicitIteration(geometry, nullptr, config); @@ -619,6 +639,7 @@ void CFVMFlowSolverBase::ImplicitEuler_Iteration(CGeometry *geometry, CSol template void CFVMFlowSolverBase::ComputeVorticityAndStrainMag(const CConfig& config, const CGeometry *geometry, unsigned short iMesh) { + SU2_ZONE_SCOPED auto& StrainMag = nodes->GetStrainMag(); @@ -703,6 +724,8 @@ void CFVMFlowSolverBase::ComputeVorticityAndStrainMag(const CConfig& confi template void CFVMFlowSolverBase::SetInletAtVertex(const su2double* val_inlet, unsigned short iMarker, unsigned long iVertex) { + SU2_ZONE_SCOPED + /*--- Alias positions within inlet file for readability ---*/ unsigned short T_position = nDim; @@ -724,6 +747,8 @@ void CFVMFlowSolverBase::SetInletAtVertex(const su2double* val_inlet, unsi template su2double CFVMFlowSolverBase::GetInletAtVertex(unsigned short iMarker, unsigned long iVertex, const CGeometry* geometry, su2double* val_inlet) const { + SU2_ZONE_SCOPED + const auto T_position = nDim; const auto P_position = nDim + 1; const auto FlowDir_position = nDim + 2; @@ -742,6 +767,8 @@ su2double CFVMFlowSolverBase::GetInletAtVertex(unsigned short iMarker, uns template void CFVMFlowSolverBase::SetUniformInlet(const CConfig* config, unsigned short iMarker) { + SU2_ZONE_SCOPED + if (config->GetMarker_All_KindBC(iMarker) == INLET_FLOW) { const string Marker_Tag = config->GetMarker_All_TagBound(iMarker); const su2double p_total = config->GetInletPtotal(Marker_Tag); @@ -778,6 +805,8 @@ void CFVMFlowSolverBase::SetUniformInlet(const CConfig* config, unsigned s template void CFVMFlowSolverBase::UpdateCustomBoundaryConditions( CGeometry** geometry_container, CSolver*** solver_container, CConfig *config) { + SU2_ZONE_SCOPED + struct { const CSolver* fine_solver{nullptr}; CSolver* coarse_solver{nullptr}; @@ -822,6 +851,8 @@ template void CFVMFlowSolverBase::LoadRestart_impl(CGeometry **geometry, CSolver ***solver, CConfig *config, int iter, bool update_geo, su2double* SolutionRestart, unsigned short nVar_Restart) { + SU2_ZONE_SCOPED + /*--- Restart the solution from file information ---*/ string restart_filename = config->GetSolution_FileName(); @@ -1007,12 +1038,14 @@ void CFVMFlowSolverBase::LoadRestart_impl(CGeometry **geometry, CSolver ** template void CFVMFlowSolverBase::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int iter, bool update_geo) { + SU2_ZONE_SCOPED LoadRestart_impl(geometry, solver, config, iter, update_geo); } template void CFVMFlowSolverBase::SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long TimeIter) { + SU2_ZONE_SCOPED const bool restart = (config->GetRestart() || config->GetRestart_Flow()); const bool rans = (config->GetKind_Turb_Model() != TURB_MODEL::NONE); @@ -1064,6 +1097,8 @@ template void CFVMFlowSolverBase::PushSolutionBackInTime(unsigned long TimeIter, bool restart, bool rans, CSolver*** solver_container, CGeometry** geometry, CConfig* config) { + SU2_ZONE_SCOPED + /*--- Push back the initial condition to previous solution containers for a 1st-order restart or when simply initializing to freestream. ---*/ @@ -1111,6 +1146,8 @@ void CFVMFlowSolverBase::PushSolutionBackInTime(unsigned long TimeIter, bo template void CFVMFlowSolverBase::BC_Sym_Plane(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED + const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const auto iVel = prim_idx.Velocity(); @@ -1272,6 +1309,8 @@ void CFVMFlowSolverBase::BC_Sym_Plane(CGeometry* geometry, CSolve template void CFVMFlowSolverBase::BC_Periodic(CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, CConfig* config) { + SU2_ZONE_SCOPED + /*--- Complete residuals for periodic boundary conditions. We loop over the periodic BCs in matching pairs so that, in the event that there are adjacent periodic markers, the repeated points will have their residuals @@ -1288,6 +1327,8 @@ template void CFVMFlowSolverBase::BC_Fluid_Interface(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config) { + SU2_ZONE_SCOPED + unsigned long iVertex, jVertex, iPoint, Point_Normal = 0; unsigned short iDim, iVar, jVar, iMarker, nDonorVertex; @@ -1451,6 +1492,8 @@ void CFVMFlowSolverBase::BC_Fluid_Interface(CGeometry* geometry, template void CFVMFlowSolverBase::BC_Custom(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED + /* Check for a verification solution. */ if (VerificationSolution) { @@ -1514,6 +1557,8 @@ template void CFVMFlowSolverBase::EdgeFluxResidual(const CGeometry *geometry, const CSolver* const* solvers, CConfig *config) { + SU2_ZONE_SCOPED + if (!edgeNumerics) { if (!ReducerStrategy && (omp_get_max_threads() > 1) && (config->GetEdgeColoringGroupSize() % Double::Size != 0)) { @@ -1571,6 +1616,7 @@ void CFVMFlowSolverBase::EdgeFluxResidual(const CGeometry *geometry, template void CFVMFlowSolverBase::SumEdgeFluxes(const CGeometry* geometry) { + SU2_ZONE_SCOPED SU2_OMP_FOR_STAT(omp_chunk_size) for (unsigned long iPoint = 0; iPoint < nPoint; ++iPoint) { diff --git a/SU2_CFD/include/solvers/CScalarSolver.inl b/SU2_CFD/include/solvers/CScalarSolver.inl index b02cfacf064c..81f6cdbb55cb 100644 --- a/SU2_CFD/include/solvers/CScalarSolver.inl +++ b/SU2_CFD/include/solvers/CScalarSolver.inl @@ -34,6 +34,8 @@ CScalarSolver::CScalarSolver(CGeometry* geometry, CConfig* config, : CSolver(), Conservative(conservative), prim_idx(config->GetKind_Regime() == ENUM_REGIME::INCOMPRESSIBLE, config->GetNEMOProblem(), geometry->GetnDim(), config->GetnSpecies()) { + SU2_ZONE_SCOPED + nMarker = config->GetnMarker_All(); /*--- Store the number of vertices on each marker for deallocation later ---*/ @@ -89,6 +91,8 @@ CScalarSolver::~CScalarSolver() { template void CScalarSolver::CommonPreprocessing(CGeometry *geometry, const CConfig *config, const bool Output) { + SU2_ZONE_SCOPED + /*--- Define booleans that are solver specific through CConfig's GlobalParams which have to be set in CFluidIteration * before calling these solver functions. ---*/ const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -129,6 +133,8 @@ template void CScalarSolver::Upwind_Residual(CGeometry* geometry, CSolver** solver_container, CNumerics** numerics_container, CConfig* config, unsigned short iMesh) { + SU2_ZONE_SCOPED + /*--- Define booleans that are solver specific through CConfig's GlobalParams which have to be set in CFluidIteration * before calling these solver functions. ---*/ const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -343,6 +349,8 @@ void CScalarSolver::Upwind_Residual(CGeometry* geometry, CSolver** template void CScalarSolver::SumEdgeFluxes(CGeometry* geometry) { + SU2_ZONE_SCOPED + const bool nonConservative = EdgeFluxesDiff.GetLocSize() > 0; SU2_OMP_FOR_STAT(omp_chunk_size) @@ -366,6 +374,7 @@ void CScalarSolver::SumEdgeFluxes(CGeometry* geometry) { template void CScalarSolver::BC_Periodic(CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, CConfig* config) { + SU2_ZONE_SCOPED /*--- Complete residuals for periodic boundary conditions. We loop over the periodic BCs in matching pairs so that, in the event that there are adjacent periodic markers, the repeated points will have their residuals @@ -382,7 +391,7 @@ template void CScalarSolver::BC_Far_Field(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics*, CConfig *config, unsigned short val_marker) { - + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); SU2_OMP_FOR_STAT(OMP_MIN_SIZE) @@ -442,6 +451,8 @@ void CScalarSolver::BC_Far_Field(CGeometry* geometry, CSolver** so template void CScalarSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned long Iteration) { + SU2_ZONE_SCOPED + const auto flowNodes = solver_container[FLOW_SOL]->GetNodes(); SU2_OMP_FOR_STAT(omp_chunk_size) @@ -455,6 +466,8 @@ void CScalarSolver::SetTime_Step(CGeometry *geometry, CSolver **so template void CScalarSolver::PrepareImplicitIteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) { + SU2_ZONE_SCOPED + /*--- Set shared residual variables to 0 and declare * local ones for current thread to work on. ---*/ @@ -497,6 +510,8 @@ void CScalarSolver::PrepareImplicitIteration(CGeometry* geometry, template void CScalarSolver::CompleteImplicitIteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) { + SU2_ZONE_SCOPED + ComputeUnderRelaxationFactor(solver_container, config); /*--- Update solution (system written in terms of increments) ---*/ @@ -544,6 +559,8 @@ void CScalarSolver::CompleteImplicitIteration(CGeometry* geometry, template void CScalarSolver::ImplicitEuler_Iteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) { + SU2_ZONE_SCOPED + PrepareImplicitIteration(geometry, solver_container, config); /*--- Solve or smooth the linear system. ---*/ @@ -569,6 +586,8 @@ void CScalarSolver::ImplicitEuler_Iteration(CGeometry* geometry, C template void CScalarSolver::ExplicitEuler_Iteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) { + SU2_ZONE_SCOPED + /*--- Local residual variables for current thread ---*/ su2double resMax[MAXNVAR] = {0.0}, resRMS[MAXNVAR] = {0.0}; unsigned long idxMax[MAXNVAR] = {0}; @@ -598,6 +617,8 @@ template void CScalarSolver::SetResidual_DualTime(CGeometry* geometry, CSolver** solver_container, CConfig* config, unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED + const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool first_order = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST); const bool second_order = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND); @@ -839,6 +860,7 @@ template void CScalarSolver::PushSolutionBackInTime(unsigned long TimeIter, bool restart,CSolver*** solver_container, CGeometry** geometry, CConfig* config) { + SU2_ZONE_SCOPED const bool dual_time = config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST || config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND; const bool isRestartIter = restart && TimeIter == config->GetRestart_Iter(); diff --git a/SU2_CFD/src/SU2_CFD.cpp b/SU2_CFD/src/SU2_CFD.cpp index e0179ff9333e..a8ebd1884a5c 100644 --- a/SU2_CFD/src/SU2_CFD.cpp +++ b/SU2_CFD/src/SU2_CFD.cpp @@ -26,6 +26,7 @@ */ #include "../include/SU2_CFD.hpp" +#include "../../Common/include/tracy_structure.hpp" /* Include file, needed for the runtime NaN catching. You also have to include feenableexcept(...) below. */ //#include @@ -95,6 +96,7 @@ int main(int argc, char *argv[]) { const bool multizone = config.GetMultizone_Problem(); const bool harmonic_balance = (config.GetTime_Marching() == TIME_MARCHING::HARMONIC_BALANCE); + BEGIN_SU2_ZONE_N("Preprocessing") if (dry_run) { /*--- Dry Run. ---*/ @@ -133,6 +135,7 @@ int main(int argc, char *argv[]) { driver = new CHBDriver(config_file_name, nZone, MPICommunicator); } + END_SU2_ZONE /*--- Launch the main external loop of the solver. ---*/ diff --git a/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp b/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp index c41544a8f3a4..f192d8ef9f98 100644 --- a/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp @@ -36,6 +36,7 @@ CDiscAdjMultizoneDriver::CDiscAdjMultizoneDriver(char* confFile, SU2_Comm MPICommunicator) : CMultizoneDriver(confFile, val_nZone, MPICommunicator) { + SU2_ZONE_SCOPED direct_nInst.resize(nZone,1); nInnerIter.resize(nZone); @@ -110,6 +111,7 @@ CDiscAdjMultizoneDriver::CDiscAdjMultizoneDriver(char* confFile, } CDiscAdjMultizoneDriver::~CDiscAdjMultizoneDriver(){ + SU2_ZONE_SCOPED for (iZone = 0; iZone < nZone; iZone++){ for (iInst = 0; iInst < direct_nInst[iZone]; iInst++){ @@ -125,6 +127,7 @@ CDiscAdjMultizoneDriver::~CDiscAdjMultizoneDriver(){ } void CDiscAdjMultizoneDriver::Preprocess(unsigned long TimeIter) { + SU2_ZONE_SCOPED const bool time_domain = driver_config->GetTime_Domain(); @@ -158,6 +161,7 @@ void CDiscAdjMultizoneDriver::Preprocess(unsigned long TimeIter) { } void CDiscAdjMultizoneDriver::StartSolver() { + SU2_ZONE_SCOPED /*--- Start the debug recording mode for the discrete adjoint solver. ---*/ @@ -230,6 +234,7 @@ void CDiscAdjMultizoneDriver::StartSolver() { } void CDiscAdjMultizoneDriver::TapeTest() { + SU2_ZONE_SCOPED if (rank == MASTER_NODE) { cout <<"\n---------------------------- Start Debug Run ----------------------------" << endl; @@ -300,6 +305,7 @@ void CDiscAdjMultizoneDriver::TapeTest() { } int CDiscAdjMultizoneDriver::TapeTestGatherErrors(AD::ErrorReport& error_report) const { + SU2_ZONE_SCOPED int num_errors = AD::GetErrorCount(error_report); int total_errors = 0; @@ -320,6 +326,7 @@ int CDiscAdjMultizoneDriver::TapeTestGatherErrors(AD::ErrorReport& error_report) } bool CDiscAdjMultizoneDriver::Iterate(unsigned short iZone, unsigned long iInnerIter, bool KrylovMode) { + SU2_ZONE_SCOPED config_container[iZone]->SetInnerIter(iInnerIter); @@ -356,6 +363,7 @@ bool CDiscAdjMultizoneDriver::Iterate(unsigned short iZone, unsigned long iInner } void CDiscAdjMultizoneDriver::KrylovInnerIters(unsigned short iZone) { + SU2_ZONE_SCOPED /*--- Use FGMRES to solve the adjoint system, the RHS is -External, * the solution are the iZone adjoint variables + External, @@ -408,6 +416,7 @@ void CDiscAdjMultizoneDriver::KrylovInnerIters(unsigned short iZone) { } void CDiscAdjMultizoneDriver::Run() { + SU2_ZONE_SCOPED const unsigned long nOuterIter = driver_config->GetnOuter_Iter(); const bool time_domain = driver_config->GetTime_Domain(); @@ -581,6 +590,7 @@ void CDiscAdjMultizoneDriver::Run() { } bool CDiscAdjMultizoneDriver::EvaluateObjectiveFunctionGradient() { + SU2_ZONE_SCOPED /*--- Evaluate the objective function gradient w.r.t. the solutions of all zones. ---*/ @@ -614,6 +624,7 @@ bool CDiscAdjMultizoneDriver::EvaluateObjectiveFunctionGradient() { } void CDiscAdjMultizoneDriver::EvaluateSensitivities(unsigned long Iter, bool force_writing) { + SU2_ZONE_SCOPED /*--- SetRecording stores the computational graph on one iteration of the direct problem. Calling it with NONE * as argument ensures that all information from a previous recording is removed. ---*/ @@ -686,6 +697,7 @@ void CDiscAdjMultizoneDriver::EvaluateSensitivities(unsigned long Iter, bool for } void CDiscAdjMultizoneDriver::SetRecording(RECORDING kind_recording, Kind_Tape tape_type, unsigned short record_zone) { + SU2_ZONE_SCOPED AD::Reset(); @@ -802,6 +814,7 @@ void CDiscAdjMultizoneDriver::SetRecording(RECORDING kind_recording, Kind_Tape t } void CDiscAdjMultizoneDriver::DirectIteration(unsigned short iZone, RECORDING kind_recording) { + SU2_ZONE_SCOPED /*--- Do one iteration of the direct solver ---*/ direct_iteration[iZone][INST_0]->Preprocess(output_container[iZone], integration_container, geometry_container, @@ -816,6 +829,7 @@ void CDiscAdjMultizoneDriver::DirectIteration(unsigned short iZone, RECORDING ki } void CDiscAdjMultizoneDriver::SetObjFunction(RECORDING kind_recording) { + SU2_ZONE_SCOPED ObjFunc = 0.0; @@ -875,6 +889,7 @@ void CDiscAdjMultizoneDriver::SetObjFunction(RECORDING kind_recording) { } void CDiscAdjMultizoneDriver::SetAdjObjFunction() { + SU2_ZONE_SCOPED su2double seeding = 1.0; if (config_container[ZONE_0]->GetTime_Domain()) { @@ -899,6 +914,7 @@ void CDiscAdjMultizoneDriver::SetAdjObjFunction() { } void CDiscAdjMultizoneDriver::ComputeAdjoints(unsigned short iZone, bool eval_transfer) { + SU2_ZONE_SCOPED #if defined(CODI_INDEX_REUSE) if (nZone > 1 && rank == MASTER_NODE) { @@ -935,6 +951,7 @@ void CDiscAdjMultizoneDriver::ComputeAdjoints(unsigned short iZone, bool eval_tr } void CDiscAdjMultizoneDriver::InitializeCrossTerms() { + SU2_ZONE_SCOPED if (Cross_Terms.empty()) { Cross_Terms.resize(nZone, vector >(nZone)); @@ -965,6 +982,7 @@ void CDiscAdjMultizoneDriver::InitializeCrossTerms() { } void CDiscAdjMultizoneDriver::HandleDataTransfer() { + SU2_ZONE_SCOPED for(iZone = 0; iZone < nZone; iZone++) { @@ -988,6 +1006,7 @@ void CDiscAdjMultizoneDriver::HandleDataTransfer() { } void CDiscAdjMultizoneDriver::AddSolutionToExternal(unsigned short iZone) { + SU2_ZONE_SCOPED for (unsigned short iSol=0; iSol < MAX_SOLS; iSol++) { auto solver = solver_container[iZone][INST_0][MESH_0][iSol]; @@ -997,6 +1016,7 @@ void CDiscAdjMultizoneDriver::AddSolutionToExternal(unsigned short iZone) { } void CDiscAdjMultizoneDriver::SetExternalToDualTimeDer() { + SU2_ZONE_SCOPED for (unsigned short iZone = 0; iZone < nZone; iZone++) { for (unsigned short iSol=0; iSol < MAX_SOLS; iSol++) { @@ -1008,6 +1028,7 @@ void CDiscAdjMultizoneDriver::SetExternalToDualTimeDer() { } void CDiscAdjMultizoneDriver::AddExternalToSolution(unsigned short iZone) { + SU2_ZONE_SCOPED for (unsigned short iSol=0; iSol < MAX_SOLS; iSol++) { auto solver = solver_container[iZone][INST_0][MESH_0][iSol]; @@ -1017,6 +1038,7 @@ void CDiscAdjMultizoneDriver::AddExternalToSolution(unsigned short iZone) { } void CDiscAdjMultizoneDriver::SetSolutionOldToSolution(unsigned short iZone) { + SU2_ZONE_SCOPED for (unsigned short iSol=0; iSol < MAX_SOLS; iSol++) { auto solver = solver_container[iZone][INST_0][MESH_0][iSol]; @@ -1026,6 +1048,7 @@ void CDiscAdjMultizoneDriver::SetSolutionOldToSolution(unsigned short iZone) { } void CDiscAdjMultizoneDriver::UpdateCrossTerm(unsigned short iZone, unsigned short jZone) { + SU2_ZONE_SCOPED for (unsigned short iSol=0; iSol < MAX_SOLS; iSol++) { auto solver = solver_container[jZone][INST_0][MESH_0][iSol]; @@ -1035,6 +1058,7 @@ void CDiscAdjMultizoneDriver::UpdateCrossTerm(unsigned short iZone, unsigned sho } void CDiscAdjMultizoneDriver::Set_Solution_To_BGSSolution_k(unsigned short iZone) { + SU2_ZONE_SCOPED for (unsigned short iSol=0; iSol < MAX_SOLS; iSol++) { auto solver = solver_container[iZone][INST_0][MESH_0][iSol]; @@ -1044,6 +1068,7 @@ void CDiscAdjMultizoneDriver::Set_Solution_To_BGSSolution_k(unsigned short iZone } void CDiscAdjMultizoneDriver::Set_BGSSolution_k_To_Solution(unsigned short iZone) { + SU2_ZONE_SCOPED for (unsigned short iSol=0; iSol < MAX_SOLS; iSol++) { auto solver = solver_container[iZone][INST_0][MESH_0][iSol]; @@ -1053,6 +1078,7 @@ void CDiscAdjMultizoneDriver::Set_BGSSolution_k_To_Solution(unsigned short iZone } void CDiscAdjMultizoneDriver::SetResidual_BGS(unsigned short iZone) { + SU2_ZONE_SCOPED for (unsigned short iSol=0; iSol < MAX_SOLS; iSol++) { auto solver = solver_container[iZone][INST_0][MESH_0][iSol]; diff --git a/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp b/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp index ad7255e235f8..d22d842e0f53 100644 --- a/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp +++ b/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp @@ -121,6 +121,7 @@ CDiscAdjSinglezoneDriver::CDiscAdjSinglezoneDriver(char* confFile, } CDiscAdjSinglezoneDriver::~CDiscAdjSinglezoneDriver() { + SU2_ZONE_SCOPED delete direct_iteration; delete direct_output; @@ -128,6 +129,7 @@ CDiscAdjSinglezoneDriver::~CDiscAdjSinglezoneDriver() { } void CDiscAdjSinglezoneDriver::Preprocess(unsigned long TimeIter) { + SU2_ZONE_SCOPED /*--- Set the current time iteration in the config and also in the driver * because the python interface doesn't offer an explicit way of doing it. ---*/ @@ -152,6 +154,7 @@ void CDiscAdjSinglezoneDriver::Preprocess(unsigned long TimeIter) { } void CDiscAdjSinglezoneDriver::Run() { + SU2_ZONE_SCOPED CQuasiNewtonInvLeastSquares fixPtCorrector; if (config->GetnQuasiNewtonSamples() > 1) { @@ -217,6 +220,7 @@ void CDiscAdjSinglezoneDriver::Run() { } void CDiscAdjSinglezoneDriver::Postprocess() { + SU2_ZONE_SCOPED switch(config->GetKind_Solver()) { @@ -246,6 +250,7 @@ void CDiscAdjSinglezoneDriver::Postprocess() { } void CDiscAdjSinglezoneDriver::SetRecording(RECORDING kind_recording){ + SU2_ZONE_SCOPED AD::Reset(); @@ -313,6 +318,7 @@ void CDiscAdjSinglezoneDriver::SetRecording(RECORDING kind_recording){ } void CDiscAdjSinglezoneDriver::SetAdjObjFunction(){ + SU2_ZONE_SCOPED su2double seeding = 1.0; if (config->GetTime_Domain()) { @@ -335,6 +341,7 @@ void CDiscAdjSinglezoneDriver::SetAdjObjFunction(){ } void CDiscAdjSinglezoneDriver::SetObjFunction(){ + SU2_ZONE_SCOPED ObjFunc = 0.0; @@ -377,6 +384,7 @@ void CDiscAdjSinglezoneDriver::SetObjFunction(){ } void CDiscAdjSinglezoneDriver::DirectRun(RECORDING kind_recording){ + SU2_ZONE_SCOPED /*--- Mesh movement ---*/ @@ -401,6 +409,7 @@ void CDiscAdjSinglezoneDriver::DirectRun(RECORDING kind_recording){ } void CDiscAdjSinglezoneDriver::MainRecording(){ + SU2_ZONE_SCOPED /*--- SetRecording stores the computational graph on one iteration of the direct problem. Calling it with * RECORDING::CLEAR_INDICES as argument ensures that all information from a previous recording is removed. ---*/ @@ -413,6 +422,7 @@ void CDiscAdjSinglezoneDriver::MainRecording(){ } void CDiscAdjSinglezoneDriver::SecondaryRecording(){ + SU2_ZONE_SCOPED /*--- SetRecording stores the computational graph on one iteration of the direct problem. Calling it with * RECORDING::CLEAR_INDICES as argument ensures that all information from a previous recording is removed. ---*/ diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index c3620a548997..e87c02d94212 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -95,18 +95,15 @@ #include "../../include/iteration/CIterationFactory.hpp" #include "../../../Common/include/parallelization/omp_structure.hpp" - #include "../../../Common/include/grid_movement/CVolumetricMovementFactory.hpp" #include -#ifdef VTUNEPROF -#include -#endif #include CDriver::CDriver(char* confFile, unsigned short val_nZone, SU2_Comm MPICommunicator, bool dummy_geo) : CDriverBase(confFile, val_nZone, MPICommunicator), StopCalc(false), fsi(false), fem_solver(false), dry_run(dummy_geo) { + SU2_ZONE_SCOPED /*--- Start timer to track preprocessing for benchmarking. ---*/ @@ -297,6 +294,7 @@ CDriverBase(confFile, val_nZone, MPICommunicator), StopCalc(false), fsi(false), } void CDriver::InitializeContainers(){ + SU2_ZONE_SCOPED /*--- Create pointers to all of the classes that may be used throughout the SU2_CFD code. In general, the pointers are instantiated down a @@ -345,6 +343,7 @@ void CDriver::InitializeContainers(){ void CDriver::Finalize() { + SU2_ZONE_SCOPED const bool wrt_perf = config_container[ZONE_0]->GetWrt_Performance(); @@ -457,10 +456,6 @@ void CDriver::Finalize() { if (rank == MASTER_NODE) cout << "Deleted CVolumetricMovement class." << endl; /*--- Output profiling information ---*/ - // Note that for now this is called only by a single thread, but all - // necessary variables have been made thread private for safety (tick/tock)!! - - config_container[ZONE_0]->SetProfilingCSV(); config_container[ZONE_0]->GEMMProfilingCSV(); /*--- Deallocate config container ---*/ @@ -548,6 +543,7 @@ void CDriver::Finalize() { void CDriver::PreprocessInput(CConfig **&config, CConfig *&driver_config) { + SU2_ZONE_SCOPED char zone_file_name[MAX_STRING_SIZE]; @@ -600,6 +596,7 @@ void CDriver::PreprocessInput(CConfig **&config, CConfig *&driver_config) { } void CDriver::InitializeGeometry(CConfig* config, CGeometry **&geometry, bool dummy){ + SU2_ZONE_SCOPED if (!dummy){ if (rank == MASTER_NODE) @@ -687,6 +684,7 @@ void CDriver::InitializeGeometry(CConfig* config, CGeometry **&geometry, bool du } void CDriver::InitializeGeometryFVM(CConfig *config, CGeometry **&geometry) { + SU2_ZONE_SCOPED unsigned short iZone = config->GetiZone(), iMGlevel; unsigned short requestedMGlevels = config->GetnMGLevels(); @@ -902,6 +900,7 @@ void CDriver::InitializeGeometryFVM(CConfig *config, CGeometry **&geometry) { } void CDriver::InitializeGeometryDGFEM(CConfig* config, CGeometry **&geometry) { + SU2_ZONE_SCOPED /*--- Definition of the geometry class to store the primal grid in the partitioning process. ---*/ /*--- All ranks process the grid and call ParMETIS for partitioning ---*/ @@ -994,6 +993,7 @@ void CDriver::InitializeGeometryDGFEM(CConfig* config, CGeometry **&geometry) { } void CDriver::InitializeSolver(CConfig* config, CGeometry** geometry, CSolver ***&solver) { + SU2_ZONE_SCOPED MAIN_SOLVER kindSolver = config->GetKind_Solver(); @@ -1025,6 +1025,7 @@ void CDriver::InitializeSolver(CConfig* config, CGeometry** geometry, CSolver ** } void CDriver::PreprocessInlet(CSolver ***solver, CGeometry **geometry, CConfig *config) const { + SU2_ZONE_SCOPED /*--- Adjust iteration number for unsteady restarts. ---*/ @@ -1166,6 +1167,7 @@ void CDriver::FinalizeSolver(CSolver ****solver, CGeometry **geometry, } void CDriver::InitializeIntegration(CConfig *config, CSolver **solver, CIntegration **&integration) const { + SU2_ZONE_SCOPED if (rank == MASTER_NODE) cout << endl <<"----------------- Integration Preprocessing ( Zone " << config->GetiZone() <<" ) ------------------" << endl; @@ -1177,6 +1179,7 @@ void CDriver::InitializeIntegration(CConfig *config, CSolver **solver, CIntegrat } void CDriver::FinalizeIntegration(CIntegration ***integration, CGeometry **geometry, CConfig *config, unsigned short val_iInst) { + SU2_ZONE_SCOPED for (unsigned int iSol = 0; iSol < MAX_SOLS; iSol++){ delete integration[val_iInst][iSol]; @@ -1427,6 +1430,7 @@ template void CDriver::InstantiateSpeciesNumericsGetiZone() <<" ) -------------------" << endl; @@ -2352,6 +2356,7 @@ void CDriver::FinalizeNumerics(CNumerics *****numerics, CSolver***, CGeometry**, } void CDriver::PreprocessIteration(CConfig* config, CIteration *&iteration) const { + SU2_ZONE_SCOPED if (rank == MASTER_NODE) cout << endl <<"------------------- Iteration Preprocessing ( Zone " << config->GetiZone() <<" ) ------------------" << endl; @@ -2542,6 +2547,7 @@ void CDriver::InitializeInterface(CConfig **config, CSolver***** solver, CGeomet } void CDriver::PreprocessStaticMesh(const CConfig *config, CGeometry** geometry){ + SU2_ZONE_SCOPED unsigned short iMGlevel, iMGfine; @@ -2587,6 +2593,7 @@ void CDriver::PreprocessStaticMesh(const CConfig *config, CGeometry** geometry){ } void CDriver::PreprocessOutput(CConfig **config, CConfig *driver_config, COutput **&output, COutput *&driver_output){ + SU2_ZONE_SCOPED /*--- Definition of the output class (one for each zone). The output class manages the writing of all restart, volume solution, surface solution, @@ -2757,6 +2764,7 @@ void CDriver::PreprocessTurbomachinery(CConfig** config, CGeometry**** geometry, CDriver::~CDriver() = default; void CDriver::PrintDirectResidual(RECORDING kind_recording) { + SU2_ZONE_SCOPED if (rank != MASTER_NODE || kind_recording != RECORDING::SOLUTION_VARIABLES) return; @@ -2869,16 +2877,14 @@ void CDriver::PrintDirectResidual(RECORDING kind_recording) { CFluidDriver::CFluidDriver(char* confFile, unsigned short val_nZone, SU2_Comm MPICommunicator) : CDriver(confFile, val_nZone, MPICommunicator, false) { + SU2_ZONE_SCOPED Max_Iter = config_container[ZONE_0]->GetnInner_Iter(); } CFluidDriver::~CFluidDriver() = default; void CFluidDriver::StartSolver(){ - -#ifdef VTUNEPROF - __itt_resume(); -#endif + SU2_ZONE_SCOPED /*--- Main external loop of the solver. Within this loop, each iteration ---*/ @@ -2927,13 +2933,11 @@ void CFluidDriver::StartSolver(){ Iter++; } -#ifdef VTUNEPROF - __itt_pause(); -#endif } void CFluidDriver::Preprocess(unsigned long Iter) { + SU2_ZONE_SCOPED /*--- Set the value of the external iteration and physical time. ---*/ @@ -2961,6 +2965,7 @@ void CFluidDriver::Preprocess(unsigned long Iter) { } void CFluidDriver::Run() { + SU2_ZONE_SCOPED unsigned short iZone, jZone; unsigned long IntIter, nIntIter; @@ -3020,6 +3025,7 @@ void CFluidDriver::Run() { } void CFluidDriver::TransferData(unsigned short donorZone, unsigned short targetZone) { + SU2_ZONE_SCOPED auto BroadcastData = [&](unsigned int solIdx) { interface_container[donorZone][targetZone]->BroadcastData(*interpolator_container[donorZone][targetZone].get(), @@ -3038,6 +3044,7 @@ void CFluidDriver::TransferData(unsigned short donorZone, unsigned short targetZ } void CFluidDriver::Update() { + SU2_ZONE_SCOPED for(iZone = 0; iZone < nZone; iZone++) iteration_container[iZone][INST_0]->Update(output_container[iZone], integration_container, geometry_container, @@ -3046,6 +3053,7 @@ void CFluidDriver::Update() { } void CFluidDriver::DynamicMeshUpdate(unsigned long TimeIter) { + SU2_ZONE_SCOPED bool harmonic_balance; @@ -3060,6 +3068,7 @@ void CFluidDriver::DynamicMeshUpdate(unsigned long TimeIter) { } bool CFluidDriver::Monitor(unsigned long ExtIter) { + SU2_ZONE_SCOPED /*--- Synchronization point after a single solver iteration. Compute the wall clock time required. ---*/ @@ -3083,6 +3092,7 @@ bool CFluidDriver::Monitor(unsigned long ExtIter) { } void CFluidDriver::Output(unsigned long InnerIter) { + SU2_ZONE_SCOPED for (iZone = 0; iZone < nZone; iZone++) { const auto inst = config_container[iZone]->GetiInst(); @@ -3114,6 +3124,7 @@ CHBDriver::CHBDriver(char* confFile, } CHBDriver::~CHBDriver() { + SU2_ZONE_SCOPED unsigned short kInst; @@ -3124,6 +3135,7 @@ CHBDriver::~CHBDriver() { void CHBDriver::Run() { + SU2_ZONE_SCOPED /*--- Run a single iteration of a Harmonic Balance problem. Preprocess all all zones before beginning the iteration. ---*/ @@ -3146,6 +3158,7 @@ void CHBDriver::Run() { } void CHBDriver::Update() { + SU2_ZONE_SCOPED for (iInst = 0; iInst < nInstHB; iInst++) { /*--- Compute the harmonic balance terms across all zones ---*/ @@ -3171,6 +3184,7 @@ void CHBDriver::Update() { } void CHBDriver::SetHarmonicBalance(unsigned short iInst) { + SU2_ZONE_SCOPED unsigned short iVar, jInst, iMGlevel; unsigned short nVar = solver_container[ZONE_0][INST_0][MESH_0][FLOW_SOL]->GetnVar(); @@ -3294,6 +3308,7 @@ void CHBDriver::SetHarmonicBalance(unsigned short iInst) { } void CHBDriver::StabilizeHarmonicBalance() { + SU2_ZONE_SCOPED unsigned short i, j, k, iVar, iInst, jInst, iMGlevel; unsigned short nVar = solver_container[ZONE_0][INST_0][MESH_0][FLOW_SOL]->GetnVar(); @@ -3454,6 +3469,7 @@ void CHBDriver::StabilizeHarmonicBalance() { } void CHBDriver::ComputeHBOperator() { + SU2_ZONE_SCOPED const complex J(0.0,1.0); unsigned short i, j, k, iInst; diff --git a/SU2_CFD/src/drivers/CDriverBase.cpp b/SU2_CFD/src/drivers/CDriverBase.cpp index 00f604669040..9691d4feedad 100644 --- a/SU2_CFD/src/drivers/CDriverBase.cpp +++ b/SU2_CFD/src/drivers/CDriverBase.cpp @@ -85,6 +85,7 @@ void CDriverBase::InitializeContainers() { } void CDriverBase::CommonFinalize() { + SU2_ZONE_SCOPED if (numerics_container != nullptr) { for (iZone = 0; iZone < nZone; iZone++) { diff --git a/SU2_CFD/src/drivers/CDummyDriver.cpp b/SU2_CFD/src/drivers/CDummyDriver.cpp index 6e8e66a48299..dd39bfd44516 100644 --- a/SU2_CFD/src/drivers/CDummyDriver.cpp +++ b/SU2_CFD/src/drivers/CDummyDriver.cpp @@ -37,6 +37,8 @@ CDummyDriver::CDummyDriver(char* confFile, } void CDummyDriver::StartSolver(){ + SU2_ZONE_SCOPED + if (rank == MASTER_NODE){ cout << endl <<"------------------------------ Begin Solver -----------------------------" << endl; cout << endl; diff --git a/SU2_CFD/src/drivers/CMultizoneDriver.cpp b/SU2_CFD/src/drivers/CMultizoneDriver.cpp index 3843fe320370..69aa314e88ae 100644 --- a/SU2_CFD/src/drivers/CMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CMultizoneDriver.cpp @@ -33,6 +33,7 @@ CMultizoneDriver::CMultizoneDriver(char* confFile, unsigned short val_nZone, SU2_Comm MPICommunicator) : CDriver(confFile, val_nZone, MPICommunicator, false) { + SU2_ZONE_SCOPED /*--- Initialize the counter for TimeIter ---*/ TimeIter = 0; @@ -118,6 +119,7 @@ CMultizoneDriver::CMultizoneDriver(char* confFile, unsigned short val_nZone, SU2 } CMultizoneDriver::~CMultizoneDriver() { + SU2_ZONE_SCOPED for (iZone = 0; iZone < nZone; iZone++){ delete [] init_res[iZone]; @@ -135,6 +137,7 @@ CMultizoneDriver::~CMultizoneDriver() { } void CMultizoneDriver::StartSolver() { + SU2_ZONE_SCOPED /*--- Find out the minimum of all references times and then set each zone to this (same) value. To ensure that all zones run synchronously in time, be it a dimensional or non-dimensionalized one. ---*/ @@ -206,6 +209,7 @@ void CMultizoneDriver::StartSolver() { } void CMultizoneDriver::Preprocess(unsigned long TimeIter) { + SU2_ZONE_SCOPED /*--- Set the current time iteration in the config ---*/ driver_config->SetTimeIter(TimeIter); @@ -278,6 +282,7 @@ void CMultizoneDriver::Preprocess(unsigned long TimeIter) { } void CMultizoneDriver::RunGaussSeidel() { + SU2_ZONE_SCOPED unsigned short UpdateMesh; bool DeformMesh = false; @@ -328,6 +333,7 @@ void CMultizoneDriver::RunGaussSeidel() { } void CMultizoneDriver::RunJacobi() { + SU2_ZONE_SCOPED unsigned short UpdateMesh; bool DeformMesh = false; @@ -388,6 +394,7 @@ void CMultizoneDriver::RunJacobi() { } void CMultizoneDriver::Corrector(unsigned short val_iZone) { + SU2_ZONE_SCOPED if (config_container[val_iZone]->GetRelaxation()) iteration_container[val_iZone][INST_0]->Relaxation(output_container[ZONE_0], integration_container, @@ -396,6 +403,7 @@ void CMultizoneDriver::Corrector(unsigned short val_iZone) { } bool CMultizoneDriver::OuterConvergence(unsigned long OuterIter) { + SU2_ZONE_SCOPED /*--- Update the residual for the all the zones. ---*/ @@ -428,6 +436,7 @@ bool CMultizoneDriver::OuterConvergence(unsigned long OuterIter) { } void CMultizoneDriver::Update() { + SU2_ZONE_SCOPED /*--- For enabling a consistent restart, we need to update the mesh with the interface information that introduces displacements --*/ /*--- Loop over the number of zones (IZONE) ---*/ @@ -453,6 +462,7 @@ void CMultizoneDriver::Update() { } void CMultizoneDriver::Output(unsigned long TimeIter) { + SU2_ZONE_SCOPED /*--- Time the output for performance benchmarking. ---*/ @@ -486,6 +496,7 @@ void CMultizoneDriver::Output(unsigned long TimeIter) { } void CMultizoneDriver::DynamicMeshUpdate(unsigned long TimeIter) { + SU2_ZONE_SCOPED bool AnyDeformMesh = false; @@ -506,6 +517,7 @@ void CMultizoneDriver::DynamicMeshUpdate(unsigned long TimeIter) { } void CMultizoneDriver::DynamicMeshUpdate(unsigned short val_iZone, unsigned long TimeIter) { + SU2_ZONE_SCOPED auto iteration = iteration_container[val_iZone][INST_0]; @@ -531,6 +543,7 @@ void CMultizoneDriver::DynamicMeshUpdate(unsigned short val_iZone, unsigned long } bool CMultizoneDriver::TransferData(unsigned short donorZone, unsigned short targetZone) { + SU2_ZONE_SCOPED bool UpdateMesh = false; @@ -599,10 +612,10 @@ bool CMultizoneDriver::TransferData(unsigned short donorZone, unsigned short tar /*--- Set average value donorZone->targetZone ---*/ interface_container[donorZone][targetZone]->SetAverageValues(solver_container[donorZone][INST_0][MESH_0][FLOW_SOL],solver_container[targetZone][INST_0][MESH_0][FLOW_SOL], donorZone); - + /*--- Set average geometrical properties FROM donorZone IN targetZone ---*/ geometry_container[targetZone][INST_0][MESH_0]->SetAvgTurboGeoValues(config_container[iZone],geometry_container[iZone][INST_0][MESH_0], iZone); - + break; } case NO_TRANSFER: @@ -622,6 +635,7 @@ bool CMultizoneDriver::TransferData(unsigned short donorZone, unsigned short tar void CMultizoneDriver::SetTurboPerformance() { + SU2_ZONE_SCOPED for (auto donorZone = 1u; donorZone < nZone; donorZone++) { interface_container[donorZone][ZONE_0]->SetAverageValues(solver_container[donorZone][INST_0][MESH_0][FLOW_SOL], solver_container[ZONE_0][INST_0][MESH_0][FLOW_SOL], @@ -630,6 +644,7 @@ void CMultizoneDriver::SetTurboPerformance() { } bool CMultizoneDriver::Monitor(unsigned long TimeIter) { + SU2_ZONE_SCOPED /*--- Check whether the inner solver has converged --- */ @@ -675,5 +690,6 @@ bool CMultizoneDriver::Monitor(unsigned long TimeIter) { } bool CMultizoneDriver::GetTimeConvergence() const{ + SU2_ZONE_SCOPED return output_container[ZONE_0]->GetCauchyCorrectedTimeConvergence(config_container[ZONE_0]); } diff --git a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp index 23d6c790db6a..07a65738e07b 100644 --- a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp +++ b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp @@ -44,6 +44,7 @@ CSinglezoneDriver::CSinglezoneDriver(char* confFile, CSinglezoneDriver::~CSinglezoneDriver() = default; void CSinglezoneDriver::StartSolver() { + SU2_ZONE_SCOPED StartTime = SU2_MPI::Wtime(); @@ -103,6 +104,7 @@ void CSinglezoneDriver::StartSolver() { } void CSinglezoneDriver::Preprocess(unsigned long TimeIter) { + SU2_ZONE_SCOPED /*--- Set the current time iteration in the config and also in the driver * because the python interface doesn't offer an explicit way of doing it. ---*/ @@ -154,6 +156,7 @@ void CSinglezoneDriver::Preprocess(unsigned long TimeIter) { } void CSinglezoneDriver::Run() { + SU2_ZONE_SCOPED unsigned long OuterIter = 0; config_container[ZONE_0]->SetOuterIter(OuterIter); @@ -165,6 +168,7 @@ void CSinglezoneDriver::Run() { } void CSinglezoneDriver::Postprocess() { + SU2_ZONE_SCOPED iteration_container[ZONE_0][INST_0]->Postprocess(output_container[ZONE_0], integration_container, geometry_container, solver_container, numerics_container, config_container, surface_movement, grid_movement, FFDBox, ZONE_0, INST_0); @@ -178,6 +182,7 @@ void CSinglezoneDriver::Postprocess() { } void CSinglezoneDriver::Update() { + SU2_ZONE_SCOPED iteration_container[ZONE_0][INST_0]->Update(output_container[ZONE_0], integration_container, geometry_container, solver_container, numerics_container, config_container, @@ -186,6 +191,7 @@ void CSinglezoneDriver::Update() { } void CSinglezoneDriver::Output(unsigned long TimeIter) { + SU2_ZONE_SCOPED /*--- Time the output for performance benchmarking. ---*/ @@ -222,6 +228,7 @@ void CSinglezoneDriver::Output(unsigned long TimeIter) { } void CSinglezoneDriver::DynamicMeshUpdate(unsigned long TimeIter) { + SU2_ZONE_SCOPED auto iteration = iteration_container[ZONE_0][INST_0]; @@ -247,6 +254,7 @@ void CSinglezoneDriver::DynamicMeshUpdate(unsigned long TimeIter) { } bool CSinglezoneDriver::Monitor(unsigned long TimeIter){ + SU2_ZONE_SCOPED unsigned long nInnerIter, InnerIter, nTimeIter; su2double MaxTime, CurTime; @@ -310,5 +318,6 @@ bool CSinglezoneDriver::Monitor(unsigned long TimeIter){ } bool CSinglezoneDriver::GetTimeConvergence() const{ + SU2_ZONE_SCOPED return output_container[ZONE_0]->GetCauchyCorrectedTimeConvergence(config_container[ZONE_0]); } diff --git a/SU2_CFD/src/integration/CFEM_DG_Integration.cpp b/SU2_CFD/src/integration/CFEM_DG_Integration.cpp index 7236558f5d13..bee2fbbf52d9 100644 --- a/SU2_CFD/src/integration/CFEM_DG_Integration.cpp +++ b/SU2_CFD/src/integration/CFEM_DG_Integration.cpp @@ -37,6 +37,7 @@ void CFEM_DG_Integration::SingleGrid_Iteration(CGeometry ****geometry, unsigned short RunTime_EqSystem, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED unsigned short iMesh, iStep; unsigned short SolContainer_Position = config[iZone]->GetContainerPosition(RunTime_EqSystem); @@ -143,6 +144,7 @@ void CFEM_DG_Integration::Space_Integration(CGeometry *geometry, CConfig *config, unsigned short iMesh, unsigned short iStep, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED unsigned short MainSolver = config->GetContainerPosition(RunTime_EqSystem); @@ -163,6 +165,7 @@ void CFEM_DG_Integration::Space_Integration(CGeometry *geometry, void CFEM_DG_Integration::Time_Integration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iStep, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED unsigned short MainSolver = config->GetContainerPosition(RunTime_EqSystem); diff --git a/SU2_CFD/src/integration/CIntegration.cpp b/SU2_CFD/src/integration/CIntegration.cpp index b3cfdfbfb0b3..436d81a3d810 100644 --- a/SU2_CFD/src/integration/CIntegration.cpp +++ b/SU2_CFD/src/integration/CIntegration.cpp @@ -30,6 +30,7 @@ CIntegration::CIntegration() { + SU2_ZONE_SCOPED rank = SU2_MPI::GetRank(); size = SU2_MPI::GetSize(); } @@ -40,6 +41,8 @@ void CIntegration::Space_Integration(CGeometry *geometry, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED + unsigned short iMarker, KindBC; unsigned short MainSolver = config->GetContainerPosition(RunTime_EqSystem); @@ -207,6 +210,7 @@ void CIntegration::Space_Integration(CGeometry *geometry, void CIntegration::Time_Integration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED unsigned short MainSolver = config->GetContainerPosition(RunTime_EqSystem); @@ -228,6 +232,7 @@ void CIntegration::Time_Integration(CGeometry *geometry, CSolver **solver_contai } void CIntegration::SetDualTime_Geometry(CGeometry *geometry, CSolver *mesh_solver, const CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED SU2_OMP_PARALLEL { @@ -247,6 +252,7 @@ void CIntegration::SetDualTime_Geometry(CGeometry *geometry, CSolver *mesh_solve } void CIntegration::SetDualTime_Solver(const CGeometry *geometry, CSolver *solver, const CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED SU2_OMP_PARALLEL { diff --git a/SU2_CFD/src/integration/CIntegrationFactory.cpp b/SU2_CFD/src/integration/CIntegrationFactory.cpp index d665c5b2889f..8df00fb873d4 100644 --- a/SU2_CFD/src/integration/CIntegrationFactory.cpp +++ b/SU2_CFD/src/integration/CIntegrationFactory.cpp @@ -34,6 +34,7 @@ CIntegration** CIntegrationFactory::CreateIntegrationContainer(MAIN_SOLVER kindMainSolver, const CSolver* const* solver_container){ + SU2_ZONE_SCOPED auto **integration = new CIntegration* [MAX_SOLS](); @@ -48,6 +49,7 @@ CIntegration** CIntegrationFactory::CreateIntegrationContainer(MAIN_SOLVER kindM } CIntegration* CIntegrationFactory::CreateIntegration(INTEGRATION_TYPE integrationType){ + SU2_ZONE_SCOPED CIntegration *integration = nullptr; diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index d721e74c0e7a..35eb24e3aa7b 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -80,6 +80,7 @@ static void adaptMGDampingFactor(const unsigned short* performed, } void CMultiGridIntegration::adaptRestrictionDamping(CConfig* config) { + SU2_ZONE_SCOPED const auto& mgOpts = config->GetMGOptions(); const unsigned short nMGLevels = config->GetnMGLevels(); adaptMGDampingFactor( @@ -92,6 +93,7 @@ void CMultiGridIntegration::adaptRestrictionDamping(CConfig* config) { } 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. ---*/ @@ -110,6 +112,7 @@ void CMultiGridIntegration::adaptProlongationDamping(CConfig* config) { passivedouble CMultiGridIntegration::computeMultigridCFL(CConfig* config, unsigned short iMesh, passivedouble CFL_fine, passivedouble CFL_coarse_current, passivedouble rms_res_coarse) { + SU2_ZONE_SCOPED const bool wasActive = AD::BeginPassive(); @@ -241,6 +244,7 @@ void CMultiGridIntegration::MultiGrid_Iteration(CGeometry ****geometry, unsigned short RunTime_EqSystem, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED bool direct; switch (config[iZone]->GetKind_Solver()) { @@ -452,6 +456,7 @@ void CMultiGridIntegration::MultiGrid_Cycle(CGeometry ****geometry, unsigned short RunTime_EqSystem, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED CConfig* config = config_container[iZone]; @@ -560,6 +565,7 @@ void CMultiGridIntegration::PreSmoothing(unsigned short RunTime_EqSystem, unsigned short iMesh, unsigned short iZone, unsigned short iRKLimit) { + SU2_ZONE_SCOPED const auto& mgOpts = config->GetMGOptions(); const bool classical_rk4 = (config->GetKind_TimeIntScheme() == CLASSICAL_RK4_EXPLICIT); @@ -654,6 +660,7 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, CConfig *config, unsigned short iMesh, unsigned short iRKLimit) { + SU2_ZONE_SCOPED const auto& mgOpts = config->GetMGOptions(); const bool classical_rk4 = (config->GetKind_TimeIntScheme() == CLASSICAL_RK4_EXPLICIT); @@ -739,6 +746,7 @@ void CMultiGridIntegration::PostSmoothing(unsigned short RunTime_EqSystem, 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(); @@ -818,6 +826,7 @@ void CMultiGridIntegration::GetProlongated_Correction(unsigned short RunTime_EqS void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_EqSystem, CSolver *solver, CGeometry *geometry, unsigned short val_nSmooth, su2double val_smooth_coeff, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED /*--- Check if there is work to do. ---*/ if (val_nSmooth == 0) return; @@ -904,6 +913,7 @@ void CMultiGridIntegration::SmoothProlongated_Correction(unsigned short RunTime_ 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(); @@ -941,6 +951,7 @@ void CMultiGridIntegration::SetProlongated_Correction(CSolver *sol_fine, CGeomet void CMultiGridIntegration::SetProlongated_Solution(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { + SU2_ZONE_SCOPED SU2_OMP_FOR_STAT(roundUpDiv(geo_coarse->GetnPointDomain(), omp_get_num_threads())) for (auto Point_Coarse = 0ul; Point_Coarse < geo_coarse->GetnPointDomain(); Point_Coarse++) { @@ -954,6 +965,7 @@ void CMultiGridIntegration::SetProlongated_Solution(unsigned short RunTime_EqSys void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED const su2double *Residual_Fine; @@ -1000,6 +1012,7 @@ void CMultiGridIntegration::SetForcing_Term(CSolver *sol_fine, CSolver *sol_coar } void CMultiGridIntegration::SetResidual_Term(CGeometry *geometry, CSolver *solver) { + SU2_ZONE_SCOPED AD::StartNoSharedReading(); SU2_OMP_FOR_STAT(roundUpDiv(geometry->GetnPointDomain(), omp_get_num_threads())) @@ -1012,6 +1025,7 @@ void CMultiGridIntegration::SetResidual_Term(CGeometry *geometry, CSolver *solve void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { + SU2_ZONE_SCOPED const unsigned short Solver_Position = config->GetContainerPosition(RunTime_EqSystem); const bool grid_movement = config->GetGrid_Movement(); @@ -1068,6 +1082,7 @@ void CMultiGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSyst void CMultiGridIntegration::SetRestricted_Gradient(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { + SU2_ZONE_SCOPED const unsigned short nDim = geo_coarse->GetnDim(); const unsigned short nVar = sol_coarse->GetnVar(); @@ -1107,6 +1122,7 @@ void CMultiGridIntegration::NonDimensional_Parameters(CGeometry **geometry, CSol CNumerics ****numerics_container, CConfig *config, unsigned short FinestMesh, unsigned short RunTime_EqSystem, su2double *monitor) { + SU2_ZONE_SCOPED BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS switch (RunTime_EqSystem) { @@ -1157,6 +1173,7 @@ void CMultiGridIntegration::NonDimensional_Parameters(CGeometry **geometry, CSol void CMultiGridIntegration::Adjoint_Setup(CGeometry ****geometry, CSolver *****solver_container, CConfig **config, unsigned short RunTime_EqSystem, unsigned long Iteration, unsigned short iZone) { + SU2_ZONE_SCOPED if ((RunTime_EqSystem != RUNTIME_ADJFLOW_SYS) || (Iteration != 0)) return; diff --git a/SU2_CFD/src/integration/CNewtonIntegration.cpp b/SU2_CFD/src/integration/CNewtonIntegration.cpp index bf15a7b6ddff..50bd1d3db2b6 100644 --- a/SU2_CFD/src/integration/CNewtonIntegration.cpp +++ b/SU2_CFD/src/integration/CNewtonIntegration.cpp @@ -62,6 +62,7 @@ class CPreconditionerWrapper final : public CPreconditioner { CNewtonIntegration::~CNewtonIntegration() { delete preconditioner; } void CNewtonIntegration::Setup() { + SU2_ZONE_SCOPED auto iparam = config->GetNewtonKrylovIntParam(); auto dparam = config->GetNewtonKrylovDblParam(); @@ -115,6 +116,7 @@ void CNewtonIntegration::Setup() { } void CNewtonIntegration::PerturbSolution(const CSysVector& dir, Scalar mag) { + SU2_ZONE_SCOPED SU2_OMP_FOR_STAT(omp_chunk_size) for (auto iPoint = 0ul; iPoint < geometry->GetnPoint(); ++iPoint) { @@ -126,6 +128,7 @@ void CNewtonIntegration::PerturbSolution(const CSysVector& dir, Scalar m } void CNewtonIntegration::ComputeResiduals(ResEvalType type) { + SU2_ZONE_SCOPED /*--- Save the default integration scheme, and force to explicit if required. ---*/ auto TimeIntScheme = config->GetKind_TimeIntScheme(); @@ -149,6 +152,7 @@ void CNewtonIntegration::ComputeResiduals(ResEvalType type) { } void CNewtonIntegration::ComputeFinDiffStep() { + SU2_ZONE_SCOPED static su2double rmsSol; su2double rmsSol_loc = 0.0; @@ -177,6 +181,8 @@ void CNewtonIntegration::ComputeFinDiffStep() { void CNewtonIntegration::MultiGrid_Iteration(CGeometry ****geometry_, CSolver *****solvers_, CNumerics ******numerics_, CConfig **config_, unsigned short EqSystem, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED + config = config_[iZone]; solvers = solvers_[iZone][iInst][MESH_0]; geometry = geometry_[iZone][iInst][MESH_0]; @@ -328,6 +334,7 @@ void CNewtonIntegration::MultiGrid_Iteration(CGeometry ****geometry_, CSolver ** } void CNewtonIntegration::MatrixFreeProduct(const CSysVector& u, CSysVector& v) { + SU2_ZONE_SCOPED Scalar factor = finDiffStep / u.norm(); @@ -360,6 +367,7 @@ void CNewtonIntegration::MatrixFreeProduct(const CSysVector& u, CSysVect } void CNewtonIntegration::Preconditioner(const CSysVector& u, CSysVector& v) const { + SU2_ZONE_SCOPED if (preconditioner) { Scalar eps = SU2_TYPE::GetValue(precondTol); diff --git a/SU2_CFD/src/integration/CSingleGridIntegration.cpp b/SU2_CFD/src/integration/CSingleGridIntegration.cpp index 7f588fe5352e..8dd21b0d682d 100644 --- a/SU2_CFD/src/integration/CSingleGridIntegration.cpp +++ b/SU2_CFD/src/integration/CSingleGridIntegration.cpp @@ -35,6 +35,7 @@ void CSingleGridIntegration::SingleGrid_Iteration(CGeometry ****geometry, CSolve CNumerics ******numerics_container, CConfig **config, unsigned short RunTime_EqSystem, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED const unsigned short Solver_Position = config[iZone]->GetContainerPosition(RunTime_EqSystem); @@ -109,6 +110,8 @@ void CSingleGridIntegration::SingleGrid_Iteration(CGeometry ****geometry, CSolve void CSingleGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { + SU2_ZONE_SCOPED + CSolver::MultigridRestriction(*geo_fine, sol_fine->GetNodes()->GetSolution(), *geo_coarse, sol_coarse->GetNodes()->GetSolution()); sol_coarse->InitiateComms(geo_coarse, config, MPI_QUANTITIES::SOLUTION); @@ -117,6 +120,7 @@ void CSingleGridIntegration::SetRestricted_Solution(unsigned short RunTime_EqSys void CSingleGridIntegration::SetRestricted_EddyVisc(unsigned short RunTime_EqSystem, CSolver *sol_fine, CSolver *sol_coarse, CGeometry *geo_fine, CGeometry *geo_coarse, CConfig *config) { + SU2_ZONE_SCOPED unsigned long iVertex, Point_Fine, Point_Coarse; unsigned short iMarker, iChildren; diff --git a/SU2_CFD/src/integration/CStructuralIntegration.cpp b/SU2_CFD/src/integration/CStructuralIntegration.cpp index c550a11b37c3..9ed44fc8501f 100644 --- a/SU2_CFD/src/integration/CStructuralIntegration.cpp +++ b/SU2_CFD/src/integration/CStructuralIntegration.cpp @@ -34,6 +34,7 @@ void CStructuralIntegration::Structural_Iteration(CGeometry ****geometry, CSolve CNumerics ******numerics_container, CConfig **config, unsigned short RunTime_EqSystem, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED unsigned short SolContainer_Position = config[iZone]->GetContainerPosition(RunTime_EqSystem); @@ -69,6 +70,7 @@ void CStructuralIntegration::Structural_Iteration(CGeometry ****geometry, CSolve void CStructuralIntegration::Space_Integration_FEM(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED const bool first_iter = (config->GetInnerIter() == 0); const bool linear_analysis = (config->GetGeometricConditions() == STRUCT_DEFORMATION::SMALL); const auto IterativeScheme = config->GetKind_SpaceIteScheme_FEA(); @@ -127,6 +129,7 @@ void CStructuralIntegration::Space_Integration_FEM(CGeometry *geometry, CSolver void CStructuralIntegration::Time_Integration_FEM(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED unsigned short iMarker; unsigned short MainSolver = config->GetContainerPosition(RunTime_EqSystem); @@ -186,6 +189,7 @@ void CStructuralIntegration::Time_Integration_FEM(CGeometry *geometry, CSolver * } void CStructuralIntegration::SetDualTime_Solver(const CGeometry *geometry, CSolver *solver, const CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED const bool fsi = config->GetFSI_Simulation(); diff --git a/SU2_CFD/src/iteration/CAdjFluidIteration.cpp b/SU2_CFD/src/iteration/CAdjFluidIteration.cpp index 1c8b4cfb9a10..735330bd5953 100644 --- a/SU2_CFD/src/iteration/CAdjFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CAdjFluidIteration.cpp @@ -32,6 +32,7 @@ void CAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integratio CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED unsigned short iMesh; bool harmonic_balance = (config[ZONE_0]->GetTime_Marching() == TIME_MARCHING::HARMONIC_BALANCE); bool dynamic_mesh = config[ZONE_0]->GetGrid_Movement(); @@ -132,6 +133,7 @@ void CAdjFluidIteration::Iterate(COutput* output, CIntegration**** integration, CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED const auto kind_solver = config[val_iZone]->GetKind_Solver(); switch (kind_solver) { case MAIN_SOLVER::ADJ_EULER: @@ -162,6 +164,7 @@ void CAdjFluidIteration::Update(COutput* output, CIntegration**** integration, C CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED /*--- Dual time stepping strategy ---*/ if ((config[val_iZone]->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || diff --git a/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp index a1425be3b7ff..395ea6bbae29 100644 --- a/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp @@ -32,12 +32,14 @@ #include "../../include/output/COutput.hpp" CDiscAdjFEAIteration::CDiscAdjFEAIteration(const CConfig *config) : CIteration(config), CurrentRecording(NONE) { + SU2_ZONE_SCOPED if (config->GetWeakly_Coupled_Heat()) { DiscAdjHeatIteration = new CDiscAdjHeatIteration(config); } } CDiscAdjFEAIteration::~CDiscAdjFEAIteration() { + SU2_ZONE_SCOPED delete DiscAdjHeatIteration; } @@ -45,6 +47,7 @@ void CDiscAdjFEAIteration::Preprocess(COutput* output, CIntegration**** integrat CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED auto solvers0 = solver[iZone][iInst][MESH_0]; auto geometry0 = geometry[iZone][iInst][MESH_0]; auto dirNodes = solvers0[FEA_SOL]->GetNodes(); @@ -106,6 +109,7 @@ void CDiscAdjFEAIteration::Preprocess(COutput* output, CIntegration**** integrat void CDiscAdjFEAIteration::LoadDynamic_Solution(CGeometry**** geometry, CSolver***** solver, CConfig** config, unsigned short iZone, unsigned short iInst, int val_DirectIter) { + SU2_ZONE_SCOPED /*--- Set to false to prevent updating Solution_time_n when loading primal solutions of unsteady cases. ---*/ const bool update_geo = false; auto*** solvers = solver[iZone][iInst]; @@ -124,6 +128,7 @@ void CDiscAdjFEAIteration::LoadDynamic_Solution(CGeometry**** geometry, CSolver* void CDiscAdjFEAIteration::IterateDiscAdj(CGeometry**** geometry, CSolver***** solver, CConfig** config, unsigned short iZone, unsigned short iInst, bool CrossTerm) { + SU2_ZONE_SCOPED /*--- Extract the adjoints of the conservative input variables and store them for the next iteration ---*/ for (const auto iSol : {ADJFEA_SOL, ADJHEAT_SOL}) { @@ -136,6 +141,7 @@ void CDiscAdjFEAIteration::IterateDiscAdj(CGeometry**** geometry, CSolver***** s void CDiscAdjFEAIteration::RegisterInput(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst, RECORDING kind_recording) { + SU2_ZONE_SCOPED if (kind_recording != RECORDING::MESH_COORDS) { for (const auto iSol : {ADJFEA_SOL, ADJHEAT_SOL}) { if (auto* sol = solver[iZone][iInst][MESH_0][iSol]; sol != nullptr) { @@ -157,6 +163,7 @@ void CDiscAdjFEAIteration::RegisterInput(CSolver***** solver, CGeometry**** geom void CDiscAdjFEAIteration::SetDependencies(CSolver***** solver, CGeometry**** geometry, CNumerics****** numerics, CConfig** config, unsigned short iZone, unsigned short iInst, RECORDING kind_recording) { + SU2_ZONE_SCOPED if (DiscAdjHeatIteration) { DiscAdjHeatIteration->SetDependencies(solver, geometry, numerics, config, iZone, iInst, kind_recording); } @@ -278,6 +285,7 @@ void CDiscAdjFEAIteration::SetDependencies(CSolver***** solver, CGeometry**** ge void CDiscAdjFEAIteration::RegisterOutput(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED /*--- Register solution variables as output of the iteration. ---*/ for (const auto iSol : {ADJFEA_SOL, ADJHEAT_SOL}) { if (auto* sol = solver[iZone][iInst][MESH_0][iSol]; sol != nullptr) { @@ -288,6 +296,7 @@ void CDiscAdjFEAIteration::RegisterOutput(CSolver***** solver, CGeometry**** geo void CDiscAdjFEAIteration::InitializeAdjoint(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED /*--- Initialize the adjoints of the solution variables. ---*/ AD::ResizeAdjoints(); @@ -304,6 +313,7 @@ bool CDiscAdjFEAIteration::Monitor(COutput* output, CIntegration**** integration CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED /*--- Write the convergence history (only screen output) ---*/ output->SetHistoryOutput(geometry[iZone][INST_0][MESH_0], solver[iZone][INST_0][MESH_0], config[iZone], @@ -317,6 +327,7 @@ void CDiscAdjFEAIteration::Postprocess(COutput* output, CIntegration**** integra CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED auto solvers0 = solver[iZone][iInst][MESH_0]; // TEST: for implementation of python framework in standalone structural problems diff --git a/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp index a10f7c4505f9..fa3b5242713d 100644 --- a/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp @@ -32,6 +32,7 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED StartTime = SU2_MPI::Wtime(); const auto TimeIter = config[iZone]->GetTimeIter(); @@ -277,6 +278,7 @@ void CDiscAdjFluidIteration::Preprocess(COutput* output, CIntegration**** integr void CDiscAdjFluidIteration::LoadUnsteady_Solution(CGeometry**** geometry, CSolver***** solver, CConfig** config, unsigned short iZone, unsigned short iInst, int DirectIter) { + SU2_ZONE_SCOPED auto solvers = solver[iZone][iInst]; auto geometries = geometry[iZone][iInst]; @@ -324,6 +326,7 @@ void CDiscAdjFluidIteration::LoadUnsteady_Solution(CGeometry**** geometry, CSolv void CDiscAdjFluidIteration::IterateDiscAdj(CGeometry**** geometry, CSolver***** solver, CConfig** config, unsigned short iZone, unsigned short iInst, bool CrossTerm) { + SU2_ZONE_SCOPED auto solvers0 = solver[iZone][iInst][MESH_0]; auto geometry0 = geometry[iZone][iInst][MESH_0]; @@ -357,6 +360,7 @@ void CDiscAdjFluidIteration::IterateDiscAdj(CGeometry**** geometry, CSolver***** void CDiscAdjFluidIteration::InitializeAdjoint(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED auto solvers0 = solver[iZone][iInst][MESH_0]; auto geometry0 = geometry[iZone][iInst][MESH_0]; @@ -399,6 +403,7 @@ void CDiscAdjFluidIteration::InitializeAdjoint(CSolver***** solver, CGeometry*** void CDiscAdjFluidIteration::RegisterInput(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst, RECORDING kind_recording) { + SU2_ZONE_SCOPED auto solvers0 = solver[iZone][iInst][MESH_0]; auto geometry0 = geometry[iZone][iInst][MESH_0]; @@ -458,6 +463,7 @@ void CDiscAdjFluidIteration::RegisterInput(CSolver***** solver, CGeometry**** ge void CDiscAdjFluidIteration::SetDependencies(CSolver***** solver, CGeometry**** geometry, CNumerics****** numerics, CConfig** config, unsigned short iZone, unsigned short iInst, RECORDING kind_recording) { + SU2_ZONE_SCOPED auto solvers0 = solver[iZone][iInst][MESH_0]; auto geometry0 = geometry[iZone][iInst][MESH_0]; @@ -515,6 +521,7 @@ void CDiscAdjFluidIteration::SetDependencies(CSolver***** solver, CGeometry**** void CDiscAdjFluidIteration::RegisterOutput(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED auto solvers0 = solver[iZone][iInst][MESH_0]; auto geometry0 = geometry[iZone][iInst][MESH_0]; @@ -549,6 +556,7 @@ bool CDiscAdjFluidIteration::Monitor(COutput* output, CIntegration**** integrati CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED StopTime = SU2_MPI::Wtime(); UsedTime = StopTime - StartTime; diff --git a/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp index 39ff006857de..cbf7d9718d83 100644 --- a/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp @@ -32,6 +32,7 @@ void CDiscAdjHeatIteration::Preprocess(COutput* output, CIntegration**** integra CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED const auto TimeIter = config[val_iZone]->GetTimeIter(); const bool dual_time_1st = (config[val_iZone]->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST); @@ -125,6 +126,7 @@ void CDiscAdjHeatIteration::Preprocess(COutput* output, CIntegration**** integra void CDiscAdjHeatIteration::LoadUnsteady_Solution(CGeometry**** geometry, CSolver***** solver, CConfig** config, unsigned short val_iZone, unsigned short val_iInst, int val_DirectIter) { + SU2_ZONE_SCOPED auto solvers = solver[val_iZone][val_iInst]; auto geometries = geometry[val_iZone][val_iInst]; @@ -148,6 +150,7 @@ void CDiscAdjHeatIteration::LoadUnsteady_Solution(CGeometry**** geometry, CSolve void CDiscAdjHeatIteration::IterateDiscAdj(CGeometry**** geometry, CSolver***** solver, CConfig** config, unsigned short val_iZone, unsigned short val_iInst, bool CrossTerm) { + SU2_ZONE_SCOPED solver[val_iZone][val_iInst][MESH_0][ADJHEAT_SOL]->ExtractAdjoint_Solution(geometry[val_iZone][val_iInst][MESH_0], config[val_iZone], CrossTerm); @@ -155,6 +158,7 @@ void CDiscAdjHeatIteration::IterateDiscAdj(CGeometry**** geometry, CSolver***** void CDiscAdjHeatIteration::InitializeAdjoint(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED /*--- Initialize the adjoints the solution variables ---*/ @@ -166,6 +170,7 @@ void CDiscAdjHeatIteration::InitializeAdjoint(CSolver***** solver, CGeometry**** void CDiscAdjHeatIteration::RegisterInput(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst, RECORDING kind_recording) { + SU2_ZONE_SCOPED auto solvers0 = solver[iZone][iInst][MESH_0]; auto geometry0 = geometry[iZone][iInst][MESH_0]; @@ -194,6 +199,7 @@ void CDiscAdjHeatIteration::RegisterInput(CSolver***** solver, CGeometry**** geo void CDiscAdjHeatIteration::SetDependencies(CSolver***** solver, CGeometry**** geometry, CNumerics****** numerics, CConfig** config, unsigned short iZone, unsigned short iInst, RECORDING kind_recording) { + SU2_ZONE_SCOPED auto solvers0 = solver[iZone][iInst][MESH_0]; auto geometries = geometry[iZone][iInst]; @@ -219,6 +225,7 @@ void CDiscAdjHeatIteration::SetDependencies(CSolver***** solver, CGeometry**** g void CDiscAdjHeatIteration::RegisterOutput(CSolver***** solver, CGeometry**** geometry, CConfig** config, unsigned short iZone, unsigned short iInst) { + SU2_ZONE_SCOPED solver[iZone][iInst][MESH_0][ADJHEAT_SOL]->RegisterOutput(geometry[iZone][iInst][MESH_0], config[iZone]); } @@ -227,6 +234,7 @@ bool CDiscAdjHeatIteration::Monitor(COutput* output, CIntegration**** integratio CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED output->SetHistoryOutput(geometry[val_iZone][INST_0][MESH_0], solver[val_iZone][INST_0][MESH_0], config[val_iZone], config[val_iZone]->GetTimeIter(), config[val_iZone]->GetOuterIter(), diff --git a/SU2_CFD/src/iteration/CFEAIteration.cpp b/SU2_CFD/src/iteration/CFEAIteration.cpp index 42e8e485f71e..03280fdd4b95 100644 --- a/SU2_CFD/src/iteration/CFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CFEAIteration.cpp @@ -32,6 +32,7 @@ void CFEAIteration::Iterate(COutput* output, CIntegration**** integration, CGeom CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED bool StopCalc = false; unsigned long IntIter = 0; @@ -200,6 +201,7 @@ void CFEAIteration::Update(COutput* output, CIntegration**** integration, CGeome CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED CSolver* feaSolver = solver[val_iZone][val_iInst][MESH_0][FEA_SOL]; /*----------------- Update structural solver ----------------------*/ @@ -220,6 +222,7 @@ void CFEAIteration::Predictor(COutput* output, CIntegration**** integration, CGe CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED CSolver* feaSolver = solver[val_iZone][val_iInst][MESH_0][FEA_SOL]; feaSolver->PredictStruct_Displacement(geometry[val_iZone][val_iInst][MESH_0], config[val_iZone]); @@ -229,6 +232,7 @@ void CFEAIteration::Relaxation(COutput* output, CIntegration**** integration, CG CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED CSolver* feaSolver = solver[val_iZone][val_iInst][MESH_0][FEA_SOL]; /*-------------------- Aitken's relaxation ------------------------*/ @@ -247,6 +251,7 @@ bool CFEAIteration::Monitor(COutput* output, CIntegration**** integration, CGeom CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED StopTime = SU2_MPI::Wtime(); UsedTime = StopTime - StartTime; @@ -262,6 +267,7 @@ void CFEAIteration::Solve(COutput* output, CIntegration**** integration, CGeomet CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED /*------------------ Structural subiteration ----------------------*/ Iterate(output, integration, geometry, solver, numerics, config, surface_movement, grid_movement, FFDBox, val_iZone, val_iInst); diff --git a/SU2_CFD/src/iteration/CFEMFluidIteration.cpp b/SU2_CFD/src/iteration/CFEMFluidIteration.cpp index d2bf2845cb5d..711d86a12151 100644 --- a/SU2_CFD/src/iteration/CFEMFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFEMFluidIteration.cpp @@ -32,6 +32,7 @@ void CFEMFluidIteration::Preprocess(COutput* output, CIntegration**** integratio CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED unsigned long TimeIter = config[ZONE_0]->GetTimeIter(); const bool restart = (config[ZONE_0]->GetRestart() || config[ZONE_0]->GetRestart_Flow()); @@ -45,6 +46,7 @@ void CFEMFluidIteration::Iterate(COutput* output, CIntegration**** integration, CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED /*--- Update global parameters ---*/ const auto kind_solver = config[val_iZone]->GetKind_Solver(); diff --git a/SU2_CFD/src/iteration/CFluidIteration.cpp b/SU2_CFD/src/iteration/CFluidIteration.cpp index 7231e3f4b6cf..91cb81d55041 100644 --- a/SU2_CFD/src/iteration/CFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFluidIteration.cpp @@ -32,6 +32,8 @@ void CFluidIteration::Preprocess(COutput* output, CIntegration**** integration, CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED + unsigned long TimeIter = config[val_iZone]->GetTimeIter(); bool fsi = config[val_iZone]->GetFSI_Simulation(); @@ -56,6 +58,7 @@ void CFluidIteration::Iterate(COutput* output, CIntegration**** integration, CGe CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED const bool unsteady = (config[val_iZone]->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || (config[val_iZone]->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND); @@ -155,7 +158,7 @@ void CFluidIteration::Update(COutput* output, CIntegration**** integration, CGeo CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { - unsigned short iMesh; + SU2_ZONE_SCOPED /*--- Dual time stepping strategy ---*/ @@ -163,7 +166,7 @@ void CFluidIteration::Update(COutput* output, CIntegration**** integration, CGeo (config[val_iZone]->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND)) { /*--- Update dual time solver on all mesh levels ---*/ - for (iMesh = 0; iMesh <= config[val_iZone]->GetnMGLevels(); iMesh++) { + for (unsigned short iMesh = 0; iMesh <= config[val_iZone]->GetnMGLevels(); iMesh++) { integration[val_iZone][val_iInst][FLOW_SOL]->SetDualTime_Solver(geometry[val_iZone][val_iInst][iMesh], solver[val_iZone][val_iInst][iMesh][FLOW_SOL], config[val_iZone], iMesh); @@ -216,14 +219,12 @@ bool CFluidIteration::Monitor(COutput* output, CIntegration**** integration, CGe CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { - bool StopCalc = false; + SU2_ZONE_SCOPED StopTime = SU2_MPI::Wtime(); - UsedTime = StopTime - StartTime; - - /*--- Turbomachinery Specific Montior ---*/ + /*--- Turbomachinery Specific Montior ---*/ if (config[ZONE_0]->GetBoolTurbomachinery()){ if (val_iZone == config[ZONE_0]->GetnZone()-1) { ComputeTurboPerformance(solver, geometry, config, config[val_iZone]->GetnInner_Iter()); @@ -248,7 +249,7 @@ bool CFluidIteration::Monitor(COutput* output, CIntegration**** integration, CGe config[val_iZone], config[val_iZone]->GetTimeIter(), config[val_iZone]->GetOuterIter(), config[val_iZone]->GetInnerIter()); - StopCalc = output->GetConvergence(); + auto StopCalc = output->GetConvergence(); /* --- Checking convergence of Fixed CL mode to target CL, and perform finite differencing if needed --*/ @@ -261,6 +262,8 @@ bool CFluidIteration::Monitor(COutput* output, CIntegration**** integration, CGe } void CFluidIteration::UpdateRamp(CGeometry**** geometry_container, CConfig** config_container, unsigned long iter, unsigned short iZone, RAMP_TYPE ramp_flag) { + SU2_ZONE_SCOPED + /*--- Generic function for handling ramps ---*/ // Grid updates (i.e. rotation/translation) handled seperately to boundary (i.e. pressure/mass flow) updates auto* config = config_container[iZone]; @@ -362,6 +365,8 @@ void CFluidIteration::UpdateRamp(CGeometry**** geometry_container, CConfig** con } void CFluidIteration::ComputeTurboPerformance(CSolver***** solver, CGeometry**** geometry_container, CConfig** config_container, unsigned long ExtIter) { + SU2_ZONE_SCOPED + unsigned short nDim = geometry_container[ZONE_0][INST_0][MESH_0]->GetnDim(); unsigned short nBladesRow = config_container[ZONE_0]->GetnMarker_Turbomachinery(); unsigned short iBlade=0, iSpan; @@ -398,6 +403,7 @@ void CFluidIteration::Postprocess(COutput* output, CIntegration**** integration, CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED /*--- Temporary: enable only for single-zone driver. This should be removed eventually when generalized. ---*/ if (!config[val_iZone]->GetMultizone_Problem()) { @@ -412,6 +418,8 @@ void CFluidIteration::Solve(COutput* output, CIntegration**** integration, CGeom CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED + /*--- Boolean to determine if we are running a static or dynamic case ---*/ bool steady = !config[val_iZone]->GetTime_Domain(); @@ -457,6 +465,8 @@ void CFluidIteration::Solve(COutput* output, CIntegration**** integration, CGeom } void CFluidIteration::SetWind_GustField(CConfig* config, CGeometry** geometry, CSolver*** solver) { + SU2_ZONE_SCOPED + // The gust is imposed on the flow field via the grid velocities. This method called the Field Velocity Method is // described in the NASA TM–2012-217771 - Development, Verification and Use of Gust Modeling in the NASA Computational // Fluid Dynamics Code FUN3D the desired gust is prescribed as the negative of the grid velocity. @@ -604,6 +614,8 @@ void CFluidIteration::SetWind_GustField(CConfig* config, CGeometry** geometry, C void CFluidIteration::InitializeVortexDistribution(unsigned long& nVortex, vector& x0, vector& y0, vector& vort_strength, vector& r_core) { + SU2_ZONE_SCOPED + /*--- Read in Vortex Distribution ---*/ std::string line; std::ifstream file; @@ -637,6 +649,7 @@ void CFluidIteration::InitializeVortexDistribution(unsigned long& nVortex, vecto } bool CFluidIteration::MonitorFixed_CL(COutput *output, CGeometry *geometry, CSolver **solver, CConfig *config) { + SU2_ZONE_SCOPED CSolver* flow_solver= solver[FLOW_SOL]; @@ -661,6 +674,7 @@ bool CFluidIteration::MonitorFixed_CL(COutput *output, CGeometry *geometry, CSol } void CFluidIteration::SetDualTime_Aeroelastic(CConfig* config) const { + SU2_ZONE_SCOPED /*--- Store old aeroelastic solutions ---*/ diff --git a/SU2_CFD/src/iteration/CHeatIteration.cpp b/SU2_CFD/src/iteration/CHeatIteration.cpp index e1f83c557140..df2b30b6cbef 100644 --- a/SU2_CFD/src/iteration/CHeatIteration.cpp +++ b/SU2_CFD/src/iteration/CHeatIteration.cpp @@ -32,6 +32,7 @@ void CHeatIteration::Iterate(COutput* output, CIntegration**** integration, CGeo CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED /*--- Update global parameters ---*/ @@ -45,6 +46,7 @@ void CHeatIteration::Update(COutput* output, CIntegration**** integration, CGeom CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED /*--- Update dual time solver ---*/ if ((config[val_iZone]->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || diff --git a/SU2_CFD/src/iteration/CIteration.cpp b/SU2_CFD/src/iteration/CIteration.cpp index 2726872258c2..bbb35c27a7be 100644 --- a/SU2_CFD/src/iteration/CIteration.cpp +++ b/SU2_CFD/src/iteration/CIteration.cpp @@ -33,6 +33,8 @@ void CIteration::SetGrid_Movement(CGeometry** geometry, CSurfaceMovement* surface_movement, CVolumetricMovement* grid_movement, CSolver*** solver, CConfig* config, unsigned long IntIter, unsigned long TimeIter) { + SU2_ZONE_SCOPED + unsigned short Kind_Grid_Movement = config->GetKind_GridMovement(); bool adjoint = config->GetContinuous_Adjoint(); @@ -92,7 +94,7 @@ void CIteration::SetGrid_Movement(CGeometry** geometry, CSurfaceMovement* surfac if (config->GetSurface_Movement(AEROELASTIC) || config->GetSurface_Movement(AEROELASTIC_RIGID_MOTION) || config->GetSurface_Movement(MOVING_WALL)) { /*--- Apply rigid mesh transformation to entire grid first, if necessary ---*/ - + if (IntIter == 0) { if (Kind_Grid_Movement == AEROELASTIC_RIGID_MOTION) { @@ -181,6 +183,7 @@ void CIteration::SetGrid_Movement(CGeometry** geometry, CSurfaceMovement* surfac void CIteration::SetMesh_Deformation(CGeometry** geometry, CSolver** solver, CNumerics*** numerics, CConfig* config, RECORDING kind_recording) { + SU2_ZONE_SCOPED if (!config->GetDeform_Mesh()) return; /*--- Perform the elasticity mesh movement ---*/ @@ -206,6 +209,7 @@ void CIteration::SetMesh_Deformation(CGeometry** geometry, CSolver** solver, CNu void CIteration::Output(COutput* output, CGeometry**** geometry, CSolver***** solver, CConfig** config, unsigned long InnerIter, bool StopCalc, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED output->SetResultFiles(geometry[val_iZone][INST_0][MESH_0], config[val_iZone], solver[val_iZone][INST_0][MESH_0], InnerIter); } diff --git a/SU2_CFD/src/iteration/CIterationFactory.cpp b/SU2_CFD/src/iteration/CIterationFactory.cpp index f691dde4328f..827f4937af94 100644 --- a/SU2_CFD/src/iteration/CIterationFactory.cpp +++ b/SU2_CFD/src/iteration/CIterationFactory.cpp @@ -38,6 +38,7 @@ #include "../../include/iteration/CFEAIteration.hpp" CIteration* CIterationFactory::CreateIteration(MAIN_SOLVER kindSolver, const CConfig* config){ + SU2_ZONE_SCOPED CIteration *iteration = nullptr; diff --git a/SU2_CFD/src/iteration/CTurboIteration.cpp b/SU2_CFD/src/iteration/CTurboIteration.cpp index 3d95b895ed8f..caca932b2c73 100644 --- a/SU2_CFD/src/iteration/CTurboIteration.cpp +++ b/SU2_CFD/src/iteration/CTurboIteration.cpp @@ -33,6 +33,7 @@ void CTurboIteration::Preprocess(COutput* output, CIntegration**** integration, CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED /*--- Average quantities at the inflow and outflow boundaries ---*/ solver[val_iZone][val_iInst][MESH_0][FLOW_SOL]->TurboAverageProcess( solver[val_iZone][val_iInst][MESH_0], geometry[val_iZone][val_iInst][MESH_0], config[val_iZone], INFLOW); @@ -49,6 +50,7 @@ void CTurboIteration::Postprocess(COutput* output, CIntegration**** integration, CSolver***** solver, CNumerics****** numerics, CConfig** config, CSurfaceMovement** surface_movement, CVolumetricMovement*** grid_movement, CFreeFormDefBox*** FFDBox, unsigned short val_iZone, unsigned short val_iInst) { + SU2_ZONE_SCOPED /*--- Average quantities at the inflow and outflow boundaries ---*/ solver[val_iZone][val_iInst][MESH_0][FLOW_SOL]->TurboAverageProcess( solver[val_iZone][val_iInst][MESH_0], geometry[val_iZone][val_iInst][MESH_0], config[val_iZone], INFLOW); @@ -61,6 +63,7 @@ void CTurboIteration::Postprocess(COutput* output, CIntegration**** integration, } void CTurboIteration::InitTurboPerformance(CGeometry* geometry, CConfig** config, CFluidModel* fluid) { + SU2_ZONE_SCOPED TurbomachineryPerformance = std::make_shared(config, *geometry, *fluid); TurbomachineryStagePerformance = std::make_shared(*fluid); } \ No newline at end of file diff --git a/SU2_CFD/src/solvers/CAdjEulerSolver.cpp b/SU2_CFD/src/solvers/CAdjEulerSolver.cpp index a96a131f553f..bfe558952e84 100644 --- a/SU2_CFD/src/solvers/CAdjEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjEulerSolver.cpp @@ -30,6 +30,7 @@ #include "../../../Common/include/toolboxes/geometry_toolbox.hpp" CAdjEulerSolver::CAdjEulerSolver() : CSolver() { + SU2_ZONE_SCOPED /*--- Array initialization ---*/ Phi_Inf = nullptr; @@ -47,6 +48,7 @@ CAdjEulerSolver::CAdjEulerSolver() : CSolver() { } CAdjEulerSolver::CAdjEulerSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CSolver() { + SU2_ZONE_SCOPED unsigned long iPoint, iVertex, iMarker, jMarker; string text_line, mesh_filename; unsigned short iDim, iVar; @@ -335,6 +337,7 @@ CAdjEulerSolver::CAdjEulerSolver(CGeometry *geometry, CConfig *config, unsigned } CAdjEulerSolver::~CAdjEulerSolver() { + SU2_ZONE_SCOPED unsigned short iVar, iMarker; delete [] Phi_Inf; @@ -364,6 +367,7 @@ CAdjEulerSolver::~CAdjEulerSolver() { void CAdjEulerSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned long Iteration) { + SU2_ZONE_SCOPED /*--- Use the flow solution to update the time step * The time step depends on the characteristic velocity, which is the same @@ -372,6 +376,7 @@ void CAdjEulerSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_contain } void CAdjEulerSolver::Set_MPI_ActDisk(CSolver **solver_container, CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED unsigned long iter, iPoint, iVertex, jVertex, iPointTotal, Buffer_Send_nPointTotal = 0, iGlobalIndex, iGlobal; @@ -654,6 +659,7 @@ void CAdjEulerSolver::Set_MPI_ActDisk(CSolver **solver_container, CGeometry *geo } void CAdjEulerSolver::SetForceProj_Vector(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + SU2_ZONE_SCOPED su2double *ForceProj_Vector, x = 0.0, y = 0.0, z = 0.0, *Normal, CD, CL, Cp, CpTarget, CT, CQ, x_origin, y_origin, z_origin, WDrag, Area, invCD, CLCD2, invCQ, CTRCQ2; @@ -877,6 +883,7 @@ void CAdjEulerSolver::SetForceProj_Vector(CGeometry *geometry, CSolver **solver_ } void CAdjEulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long TimeIter) { + SU2_ZONE_SCOPED const bool restart = config->GetRestart(); const bool dual_time = ((config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || @@ -904,6 +911,7 @@ void CAdjEulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solve } void CAdjEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED unsigned long iPoint, nonPhysicalPoints = 0; su2double SharpEdge_Distance; @@ -993,6 +1001,7 @@ void CAdjEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_contai void CAdjEulerSolver::Centered_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[CONV_TERM]; @@ -1067,6 +1076,7 @@ void CAdjEulerSolver::Centered_Residual(CGeometry *geometry, CSolver **solver_co void CAdjEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[CONV_TERM]; @@ -1207,6 +1217,7 @@ void CAdjEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_cont void CAdjEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[SOURCE_FIRST_TERM]; @@ -1312,9 +1323,11 @@ void CAdjEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont void CAdjEulerSolver::Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED } void CAdjEulerSolver::SetCentered_Dissipation_Sensor(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED unsigned long iPoint; su2double SharpEdge_Distance, eps, ds, scale, Sensor, Param_Kappa_2, Param_Kappa_4; @@ -1350,6 +1363,7 @@ void CAdjEulerSolver::SetCentered_Dissipation_Sensor(CGeometry *geometry, CConfi void CAdjEulerSolver::ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep) { + SU2_ZONE_SCOPED su2double *Residual, *Res_TruncError, Vol, Delta, Res; unsigned short iVar; unsigned long iPoint; @@ -1386,6 +1400,7 @@ void CAdjEulerSolver::ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver } void CAdjEulerSolver::ExplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + SU2_ZONE_SCOPED su2double *local_Residual, *local_Res_TruncError, Vol, Delta, Res; unsigned short iVar; unsigned long iPoint; @@ -1420,6 +1435,7 @@ void CAdjEulerSolver::ExplicitEuler_Iteration(CGeometry *geometry, CSolver **sol } void CAdjEulerSolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + SU2_ZONE_SCOPED unsigned short iVar; unsigned long iPoint; @@ -1498,6 +1514,7 @@ void CAdjEulerSolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **sol } void CAdjEulerSolver::Inviscid_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config) { + SU2_ZONE_SCOPED unsigned long iVertex, iPoint, Neigh; unsigned short iPos, jPos; @@ -1967,6 +1984,7 @@ void CAdjEulerSolver::Inviscid_Sensitivity(CGeometry *geometry, CSolver **solver } void CAdjEulerSolver::Smooth_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config) { + SU2_ZONE_SCOPED unsigned short iMarker; unsigned long iVertex, jVertex, nVertex, iPoint; su2double **A, *b, Sens, *ArchLength, *Coord_begin, *Coord_end, dist; @@ -2099,6 +2117,7 @@ void CAdjEulerSolver::Smooth_Sensitivity(CGeometry *geometry, CSolver **solver_c void CAdjEulerSolver::SetFarfield_AoA(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, bool Output) { + SU2_ZONE_SCOPED unsigned long Iter_Fixed_CL = config->GetUpdate_AoA_Iter_Limit(); unsigned long InnerIter = config->GetInnerIter(); @@ -2209,6 +2228,7 @@ void CAdjEulerSolver::BC_Euler_Wall(CGeometry *geometry, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned long iVertex, iPoint; su2double *d = nullptr, *Normal, *U, *Psi_Aux, ProjVel = 0.0, bcn, vn = 0.0, Area, *UnitNormal; @@ -2348,6 +2368,7 @@ void CAdjEulerSolver::BC_Euler_Wall(CGeometry *geometry, void CAdjEulerSolver::BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned long iVertex, iPoint; su2double *Normal, ProjVel = 0.0, vn = 0.0, Area, *UnitNormal, @@ -2505,6 +2526,7 @@ void CAdjEulerSolver::BC_Sym_Plane(CGeometry *geometry, CSolver **solver_contain } void CAdjEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned long iVertex, iPoint, Point_Normal; unsigned short iVar, iDim; @@ -2613,6 +2635,7 @@ void CAdjEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_contain void CAdjEulerSolver::BC_Supersonic_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iVar, iDim; unsigned long iVertex, iPoint, Point_Normal; su2double *V_inlet, *V_domain, *Normal, *Psi_domain, *Psi_inlet; @@ -2731,6 +2754,7 @@ void CAdjEulerSolver::BC_Supersonic_Inlet(CGeometry *geometry, CSolver **solver_ void CAdjEulerSolver::BC_Supersonic_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iVar, iDim; unsigned long iVertex, iPoint, Point_Normal; su2double *V_outlet, *V_domain, *Normal, *Psi_domain, *Psi_outlet; @@ -2848,6 +2872,7 @@ void CAdjEulerSolver::BC_Supersonic_Outlet(CGeometry *geometry, CSolver **solver } void CAdjEulerSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iVar, iDim; unsigned long iVertex, iPoint, Point_Normal; @@ -3027,6 +3052,7 @@ void CAdjEulerSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, } void CAdjEulerSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iVar, iDim; unsigned long iVertex, iPoint, Point_Normal; @@ -3317,6 +3343,7 @@ void CAdjEulerSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, } void CAdjEulerSolver::BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED su2double *Normal, *V_domain, *V_inflow, *Psi_domain, *Psi_inflow, P_Fan, Velocity[3], Velocity2, Density, Vn, UnitNormal[3], Area, a1; @@ -3439,6 +3466,7 @@ void CAdjEulerSolver::BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_con } void CAdjEulerSolver::BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned long iVertex, iPoint, Point_Normal; su2double *Normal, *V_domain, *V_exhaust, *Psi_domain, *Psi_exhaust; @@ -3516,6 +3544,7 @@ void CAdjEulerSolver::BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_co } void CAdjEulerSolver::BC_ActDisk_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED su2double *Normal, *V_domain, *V_inlet, *Psi_domain, *Psi_inlet; unsigned short iVar, iDim; @@ -3646,6 +3675,7 @@ void CAdjEulerSolver::BC_ActDisk_Inlet(CGeometry *geometry, CSolver **solver_con } void CAdjEulerSolver::BC_ActDisk_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned long iVertex, iPoint, GlobalIndex_inlet, GlobalIndex; su2double *Normal, *V_domain, *V_outlet, *Psi_domain, *Psi_outlet; @@ -3736,11 +3766,13 @@ void CAdjEulerSolver::BC_ActDisk_Outlet(CGeometry *geometry, CSolver **solver_co void CAdjEulerSolver::BC_ActDisk(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker, bool val_inlet_surface) { + SU2_ZONE_SCOPED } void CAdjEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED unsigned short iVar, jVar; unsigned long iPoint; su2double *U_time_nM1, *U_time_n, *U_time_nP1, Volume_nM1, Volume_n, Volume_nP1, TimeStep; @@ -3800,6 +3832,7 @@ void CAdjEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver } void CAdjEulerSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Restart the solution from file information ---*/ unsigned short iDim, iVar, iMesh; @@ -3901,6 +3934,7 @@ void CAdjEulerSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConf } void CAdjEulerSolver::SetAuxVar_Surface_Gradient(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED unsigned short iDim, jDim, iNeigh, iMarker; unsigned short nDim = geometry->GetnDim(); diff --git a/SU2_CFD/src/solvers/CAdjNSSolver.cpp b/SU2_CFD/src/solvers/CAdjNSSolver.cpp index f2ad14257e46..3305ebff89f6 100644 --- a/SU2_CFD/src/solvers/CAdjNSSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjNSSolver.cpp @@ -33,6 +33,7 @@ CAdjNSSolver::CAdjNSSolver() : CAdjEulerSolver() { } CAdjNSSolver::CAdjNSSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CAdjEulerSolver() { + SU2_ZONE_SCOPED unsigned long iPoint, iVertex; string text_line, mesh_filename; unsigned short iDim, iVar, iMarker; @@ -291,6 +292,7 @@ CAdjNSSolver::~CAdjNSSolver() = default; void CAdjNSSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned long Iteration) { + SU2_ZONE_SCOPED /*--- Use the flow solution to update the time step * The time step depends on the characteristic velocity, which is the same @@ -300,6 +302,7 @@ void CAdjNSSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, } void CAdjNSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED unsigned long iPoint, nonPhysicalPoints = 0; su2double SharpEdge_Distance; @@ -390,6 +393,7 @@ void CAdjNSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container void CAdjNSSolver::Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[VISC_TERM]; @@ -440,6 +444,7 @@ void CAdjNSSolver::Viscous_Residual(CGeometry *geometry, CSolver **solver_contai void CAdjNSSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[SOURCE_FIRST_TERM]; CNumerics* second_numerics = numerics_container[SOURCE_SECOND_TERM]; @@ -581,6 +586,7 @@ void CAdjNSSolver::Source_Residual(CGeometry *geometry, CSolver **solver_contain } void CAdjNSSolver::Viscous_Sensitivity(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config) { + SU2_ZONE_SCOPED unsigned long iVertex, iPoint; unsigned short iDim, jDim, iMarker, iPos, jPos; @@ -1163,6 +1169,7 @@ void CAdjNSSolver::Viscous_Sensitivity(CGeometry *geometry, CSolver **solver_con } void CAdjNSSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim, iVar, jVar, jDim; unsigned long iVertex, iPoint, Point_Normal; @@ -1525,6 +1532,7 @@ void CAdjNSSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_contai void CAdjNSSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned long iVertex, iPoint; unsigned short iDim, iVar, jVar, jDim; diff --git a/SU2_CFD/src/solvers/CAdjTurbSolver.cpp b/SU2_CFD/src/solvers/CAdjTurbSolver.cpp index bd5bfe3000ed..4e331049c020 100644 --- a/SU2_CFD/src/solvers/CAdjTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjTurbSolver.cpp @@ -31,6 +31,7 @@ CAdjTurbSolver::CAdjTurbSolver() : CSolver() {} CAdjTurbSolver::CAdjTurbSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CSolver() { + SU2_ZONE_SCOPED adjoint = true; @@ -164,10 +165,12 @@ CAdjTurbSolver::CAdjTurbSolver(CGeometry *geometry, CConfig *config, unsigned sh } CAdjTurbSolver::~CAdjTurbSolver() { + SU2_ZONE_SCOPED delete nodes; } void CAdjTurbSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned long iPoint, iVertex; @@ -192,6 +195,7 @@ void CAdjTurbSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont } void CAdjTurbSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned long iPoint, iVertex; @@ -216,6 +220,7 @@ void CAdjTurbSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_co } void CAdjTurbSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned long iPoint, iVertex; for (iVertex = 0; iVertex < geometry->nVertex[val_marker]; iVertex++) { @@ -243,17 +248,10 @@ void CAdjTurbSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_containe } void CAdjTurbSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { - unsigned long iPoint; - - for (iPoint = 0; iPoint < nPoint; iPoint++) { - - /*--- Initialize the residual vector ---*/ - LinSysRes.SetBlock_Zero(iPoint); - - } - + SU2_ZONE_SCOPED - /*--- Initialize the Jacobian matrices ---*/ + LinSysRes.SetValZero(); + /*--- Initialize the Jacobian matrices ---*/ Jacobian.SetValZero(); /*--- Gradient of the adjoint turbulent variables ---*/ @@ -268,6 +266,7 @@ void CAdjTurbSolver::Preprocessing(CGeometry *geometry, CSolver **solver_contain void CAdjTurbSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[CONV_TERM]; @@ -317,6 +316,7 @@ void CAdjTurbSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_conta void CAdjTurbSolver::Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[VISC_TERM]; @@ -366,6 +366,7 @@ void CAdjTurbSolver::Viscous_Residual(CGeometry *geometry, CSolver **solver_cont void CAdjTurbSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[SOURCE_FIRST_TERM]; //CNumerics* second_numerics = numerics_container[SOURCE_SECOND_TERM]; @@ -453,6 +454,7 @@ void CAdjTurbSolver::Source_Residual(CGeometry *geometry, CSolver **solver_conta } void CAdjTurbSolver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + SU2_ZONE_SCOPED unsigned short iVar; unsigned long iPoint; diff --git a/SU2_CFD/src/solvers/CBaselineSolver.cpp b/SU2_CFD/src/solvers/CBaselineSolver.cpp index 642b77c599f8..35057edba4ef 100644 --- a/SU2_CFD/src/solvers/CBaselineSolver.cpp +++ b/SU2_CFD/src/solvers/CBaselineSolver.cpp @@ -34,6 +34,7 @@ CBaselineSolver::CBaselineSolver() : CSolver() { } CBaselineSolver::CBaselineSolver(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED nPoint = geometry->GetnPoint(); @@ -57,6 +58,7 @@ CBaselineSolver::CBaselineSolver(CGeometry *geometry, CConfig *config) { } CBaselineSolver::CBaselineSolver(CGeometry *geometry, CConfig *config, unsigned short val_nvar, vector field_names) { + SU2_ZONE_SCOPED /*--- Define geometry constants in the solver structure ---*/ @@ -75,6 +77,7 @@ CBaselineSolver::CBaselineSolver(CGeometry *geometry, CConfig *config, unsigned } void CBaselineSolver::SetOutputVariables(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED /*--- Open the restart file and extract the nVar and field names. ---*/ @@ -350,6 +353,7 @@ void CBaselineSolver::SetOutputVariables(CGeometry *geometry, CConfig *config) { } void CBaselineSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Restart the solution from file information ---*/ @@ -485,6 +489,7 @@ void CBaselineSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConf } void CBaselineSolver::LoadRestart_FSI(CGeometry *geometry, CConfig *config, int val_iter) { + SU2_ZONE_SCOPED /*--- Restart the solution from file information ---*/ string filename; @@ -553,5 +558,6 @@ void CBaselineSolver::LoadRestart_FSI(CGeometry *geometry, CConfig *config, int } CBaselineSolver::~CBaselineSolver() { + SU2_ZONE_SCOPED delete nodes; } diff --git a/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp b/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp index 82b5abd052af..5990270c85d4 100644 --- a/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp +++ b/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp @@ -32,6 +32,7 @@ CBaselineSolver_FEM::CBaselineSolver_FEM() : CSolver() { } CBaselineSolver_FEM::CBaselineSolver_FEM(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED /*--- Define geometry constants in the solver structure ---*/ @@ -86,6 +87,7 @@ CBaselineSolver_FEM::CBaselineSolver_FEM(CGeometry *geometry, CConfig *config) { } void CBaselineSolver_FEM::SetOutputVariables(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED /*--- Open the restart file and extract the nVar and field names. ---*/ @@ -311,6 +313,7 @@ void CBaselineSolver_FEM::SetOutputVariables(CGeometry *geometry, CConfig *confi } void CBaselineSolver_FEM::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Restart the solution from file information ---*/ unsigned short iVar; diff --git a/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp b/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp index db83d25257ea..d7177bbb50ce 100644 --- a/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp @@ -29,6 +29,7 @@ CDiscAdjFEASolver::CDiscAdjFEASolver(CGeometry *geometry, CConfig *config, CSolver *direct_solver, unsigned short Kind_Solver, unsigned short iMesh) : CSolver() { + SU2_ZONE_SCOPED adjoint = true; @@ -123,6 +124,7 @@ CDiscAdjFEASolver::CDiscAdjFEASolver(CGeometry *geometry, CConfig *config, CSolv CDiscAdjFEASolver::~CDiscAdjFEASolver() { delete nodes; } void CDiscAdjFEASolver::SetRecording(CGeometry* geometry, CConfig *config){ + SU2_ZONE_SCOPED /*--- Reset the solution to the initial (converged) solution ---*/ @@ -146,6 +148,7 @@ void CDiscAdjFEASolver::SetRecording(CGeometry* geometry, CConfig *config){ } void CDiscAdjFEASolver::RegisterSolution(CGeometry *geometry, CConfig *config){ + SU2_ZONE_SCOPED const bool input = true; const bool dynamic = config->GetTime_Domain(); @@ -164,6 +167,7 @@ void CDiscAdjFEASolver::RegisterSolution(CGeometry *geometry, CConfig *config){ } void CDiscAdjFEASolver::RegisterVariables(CGeometry *geometry, CConfig *config, bool reset){ + SU2_ZONE_SCOPED /*--- Register element-based values as input ---*/ @@ -213,6 +217,7 @@ void CDiscAdjFEASolver::RegisterVariables(CGeometry *geometry, CConfig *config, } void CDiscAdjFEASolver::RegisterOutput(CGeometry *geometry, CConfig *config){ + SU2_ZONE_SCOPED const bool input = false; @@ -223,6 +228,7 @@ void CDiscAdjFEASolver::RegisterOutput(CGeometry *geometry, CConfig *config){ } void CDiscAdjFEASolver::ExtractAdjoint_Solution(CGeometry *geometry, CConfig *config, bool CrossTerm) { + SU2_ZONE_SCOPED /*--- Set the old solution, for multi-zone problems this is done after computing the * residuals, otherwise the per-zone-residuals do not make sense, as on entry Solution @@ -279,6 +285,7 @@ void CDiscAdjFEASolver::ExtractAdjoint_Solution(CGeometry *geometry, CConfig *co } void CDiscAdjFEASolver::ExtractAdjoint_Variables(CGeometry *geometry, CConfig *config){ + SU2_ZONE_SCOPED if (KindDirect_Solver != RUNTIME_FEA_SYS) return; @@ -305,6 +312,7 @@ void CDiscAdjFEASolver::ExtractAdjoint_Variables(CGeometry *geometry, CConfig *c } void CDiscAdjFEASolver::SetAdjoint_Output(CGeometry *geometry, CConfig *config){ + SU2_ZONE_SCOPED const bool dynamic = config->GetTime_Domain(); const bool deform_mesh = (config->GetnMarker_Deform_Mesh() > 0); @@ -338,6 +346,7 @@ void CDiscAdjFEASolver::SetAdjoint_Output(CGeometry *geometry, CConfig *config){ } void CDiscAdjFEASolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config_container, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output){ + SU2_ZONE_SCOPED if (config_container->GetTime_Domain()) { for (auto iPoint = 0ul; iPoint < nPoint; iPoint++) @@ -347,6 +356,7 @@ void CDiscAdjFEASolver::Preprocessing(CGeometry *geometry, CSolver **solver_cont } void CDiscAdjFEASolver::SetSensitivity(CGeometry *geometry, CConfig *config, CSolver*){ + SU2_ZONE_SCOPED const bool time_domain = config->GetTime_Domain(); @@ -390,6 +400,7 @@ void CDiscAdjFEASolver::SetSensitivity(CGeometry *geometry, CConfig *config, CSo } void CDiscAdjFEASolver::ReadDV(const CConfig *config) { + SU2_ZONE_SCOPED string filename; ifstream properties_file; @@ -458,6 +469,7 @@ void CDiscAdjFEASolver::ReadDV(const CConfig *config) { } void CDiscAdjFEASolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Restart the solution from file information ---*/ diff --git a/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp b/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp index a7c37f0ece02..cdfade30aa55 100644 --- a/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp @@ -29,6 +29,7 @@ #include "../../include/variables/CDiscAdjMeshBoundVariable.hpp" CDiscAdjMeshSolver::CDiscAdjMeshSolver(CGeometry *geometry, CConfig *config, CSolver *direct_solver) : CSolver() { + SU2_ZONE_SCOPED nVar = geometry->GetnDim(); nDim = geometry->GetnDim(); @@ -86,6 +87,7 @@ CDiscAdjMeshSolver::CDiscAdjMeshSolver(CGeometry *geometry, CConfig *config, CSo CDiscAdjMeshSolver::~CDiscAdjMeshSolver() { delete nodes; } void CDiscAdjMeshSolver::SetRecording(CGeometry* geometry, CConfig *config){ + SU2_ZONE_SCOPED /*--- Reset the solution to the initial (converged) solution ---*/ @@ -98,6 +100,7 @@ void CDiscAdjMeshSolver::SetRecording(CGeometry* geometry, CConfig *config){ } void CDiscAdjMeshSolver::RegisterSolution(CGeometry *geometry, CConfig *config){ + SU2_ZONE_SCOPED /*--- Register reference mesh coordinates ---*/ direct_solver->GetNodes()->Register_MeshCoord(); @@ -105,6 +108,7 @@ void CDiscAdjMeshSolver::RegisterSolution(CGeometry *geometry, CConfig *config){ } void CDiscAdjMeshSolver::RegisterVariables(CGeometry *geometry, CConfig *config, bool reset){ + SU2_ZONE_SCOPED /*--- Register boundary displacements as input. * Except for FSI, where they are determined by the FEA solver. ---*/ @@ -115,6 +119,7 @@ void CDiscAdjMeshSolver::RegisterVariables(CGeometry *geometry, CConfig *config, } void CDiscAdjMeshSolver::ExtractAdjoint_Solution(CGeometry *geometry, CConfig *config, bool CrossTerm){ + SU2_ZONE_SCOPED /*--- Extract the sensitivities of the mesh coordinates ---*/ @@ -136,6 +141,7 @@ void CDiscAdjMeshSolver::ExtractAdjoint_Solution(CGeometry *geometry, CConfig *c } void CDiscAdjMeshSolver::ExtractAdjoint_Variables(CGeometry *geometry, CConfig *config){ + SU2_ZONE_SCOPED /*--- Extract the sensitivities of the boundary displacements, except for FSI. ---*/ @@ -155,6 +161,7 @@ void CDiscAdjMeshSolver::ExtractAdjoint_Variables(CGeometry *geometry, CConfig * } void CDiscAdjMeshSolver::SetSensitivity(CGeometry *geometry, CConfig *config, CSolver *solver) { + SU2_ZONE_SCOPED SU2_OMP_PARALLEL { @@ -200,5 +207,6 @@ void CDiscAdjMeshSolver::SetSensitivity(CGeometry *geometry, CConfig *config, CS } void CDiscAdjMeshSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED } diff --git a/SU2_CFD/src/solvers/CDiscAdjSolver.cpp b/SU2_CFD/src/solvers/CDiscAdjSolver.cpp index 5f6d8beecac9..b6eda0fe729e 100644 --- a/SU2_CFD/src/solvers/CDiscAdjSolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjSolver.cpp @@ -31,6 +31,7 @@ CDiscAdjSolver::CDiscAdjSolver(CGeometry *geometry, CConfig *config, CSolver *direct_sol, unsigned short Kind_Solver, unsigned short iMesh) : CSolver() { + SU2_ZONE_SCOPED /*-- Store some information about direct solver ---*/ @@ -115,6 +116,7 @@ CDiscAdjSolver::CDiscAdjSolver(CGeometry *geometry, CConfig *config, CSolver *di CDiscAdjSolver::~CDiscAdjSolver() { delete nodes; } void CDiscAdjSolver::SetRecording(CGeometry* geometry, CConfig *config){ + SU2_ZONE_SCOPED const bool time_n1_needed = config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND; const bool time_n_needed = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || time_n1_needed; @@ -153,6 +155,7 @@ void CDiscAdjSolver::SetRecording(CGeometry* geometry, CConfig *config){ } void CDiscAdjSolver::RegisterSolution(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED const bool time_n1_needed = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND); const bool time_n_needed = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || time_n1_needed; @@ -173,6 +176,7 @@ void CDiscAdjSolver::RegisterSolution(CGeometry *geometry, CConfig *config) { } void CDiscAdjSolver::RegisterVariables(CGeometry *geometry, CConfig *config, bool reset) { + SU2_ZONE_SCOPED BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -296,6 +300,7 @@ void CDiscAdjSolver::RegisterVariables(CGeometry *geometry, CConfig *config, boo } void CDiscAdjSolver::RegisterOutput(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED /*--- Register variables as output of the solver iteration. Boolean false indicates that an output is registered ---*/ @@ -305,6 +310,7 @@ void CDiscAdjSolver::RegisterOutput(CGeometry *geometry, CConfig *config) { } void CDiscAdjSolver::ExtractAdjoint_Solution(CGeometry *geometry, CConfig *config, bool CrossTerm) { + SU2_ZONE_SCOPED const bool time_n1_needed = config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND; const bool time_n_needed = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || time_n1_needed; @@ -392,6 +398,7 @@ void CDiscAdjSolver::ExtractAdjoint_Solution(CGeometry *geometry, CConfig *confi } void CDiscAdjSolver::ExtractAdjoint_Variables(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -460,6 +467,7 @@ void CDiscAdjSolver::ExtractAdjoint_Variables(CGeometry *geometry, CConfig *conf } void CDiscAdjSolver::SetAdjoint_Output(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED const bool dual_time = (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST || config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND); @@ -493,6 +501,7 @@ void CDiscAdjSolver::SetAdjoint_Output(CGeometry *geometry, CConfig *config) { } void CDiscAdjSolver::SetSensitivity(CGeometry *geometry, CConfig *config, CSolver*) { + SU2_ZONE_SCOPED AD::BeginUseAdjoints(); @@ -534,6 +543,7 @@ void CDiscAdjSolver::SetSensitivity(CGeometry *geometry, CConfig *config, CSolve } void CDiscAdjSolver::SetSurface_Sensitivity(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED SU2_OMP_MASTER for (auto& x : Sens_Geo) x = 0.0; @@ -596,6 +606,8 @@ void CDiscAdjSolver::SetSurface_Sensitivity(CGeometry *geometry, CConfig *config void CDiscAdjSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED + SU2_OMP_MASTER config->SetGlobalParam(config->GetKind_Solver(), RunTime_EqSystem); END_SU2_OMP_MASTER @@ -619,6 +631,7 @@ void CDiscAdjSolver::Preprocessing(CGeometry *geometry, CSolver **solver_contain } void CDiscAdjSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Restart the solution from file information ---*/ diff --git a/SU2_CFD/src/solvers/CEulerSolver.cpp b/SU2_CFD/src/solvers/CEulerSolver.cpp index 3f8d642e9c6e..fb3d4f744584 100644 --- a/SU2_CFD/src/solvers/CEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CEulerSolver.cpp @@ -41,6 +41,7 @@ CEulerSolver::CEulerSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh, const bool navier_stokes) : CFVMFlowSolverBase(*geometry, *config) { + SU2_ZONE_SCOPED /*--- Based on the navier_stokes boolean, determine if this constructor is * being called by itself, or by its derived class CNSSolver. ---*/ @@ -358,11 +359,13 @@ CEulerSolver::CEulerSolver(CGeometry *geometry, CConfig *config, } CEulerSolver::~CEulerSolver() { + SU2_ZONE_SCOPED for(auto& model : FluidModel) delete model; } void CEulerSolver::InstantiateEdgeNumerics(const CSolver* const* solver_container, const CConfig* config) { + SU2_ZONE_SCOPED BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -384,6 +387,7 @@ void CEulerSolver::InstantiateEdgeNumerics(const CSolver* const* solver_containe } void CEulerSolver::InitTurboContainers(CGeometry *geometry, CConfig *config){ + SU2_ZONE_SCOPED /*--- Initialize quantities for the average process for internal flow ---*/ @@ -458,6 +462,7 @@ void CEulerSolver::InitTurboContainers(CGeometry *geometry, CConfig *config){ } void CEulerSolver::Set_MPI_ActDisk(CSolver **solver_container, CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED unsigned long iter, iPoint, iVertex, jVertex, iPointTotal, Buffer_Send_nPointTotal = 0; @@ -782,6 +787,7 @@ void CEulerSolver::Set_MPI_ActDisk(CSolver **solver_container, CGeometry *geomet } void CEulerSolver::SetNondimensionalization(CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED su2double Temperature_FreeStream = 0.0, Mach2Vel_FreeStream = 0.0, ModVel_FreeStream = 0.0, Energy_FreeStream = 0.0, ModVel_FreeStreamND = 0.0, Velocity_Reynolds = 0.0, @@ -1427,6 +1433,7 @@ void CEulerSolver::SetNondimensionalization(CConfig *config, unsigned short iMes } void CEulerSolver::SetReferenceValues(const CConfig& config) { + SU2_ZONE_SCOPED /*--- Evaluate reference values for non-dimensionalization. For dynamic meshes, use the motion Mach number as a reference value for computing the force coefficients. @@ -1455,6 +1462,7 @@ void CEulerSolver::SetReferenceValues(const CConfig& config) { } void CEulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long TimeIter) { + SU2_ZONE_SCOPED const bool restart = (config->GetRestart() || config->GetRestart_Flow()); const bool SubsonicEngine = config->GetSubsonicEngine(); @@ -1580,6 +1588,7 @@ void CEulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_c void CEulerSolver::CommonPreprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED bool cont_adjoint = config->GetContinuous_Adjoint(); bool disc_adjoint = config->GetDiscrete_Adjoint(); @@ -1669,6 +1678,7 @@ void CEulerSolver::CommonPreprocessing(CGeometry *geometry, CSolver **solver_con void CEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED const auto InnerIter = config->GetInnerIter(); const bool muscl = config->GetMUSCL_Flow() && (iMesh == MESH_0); const bool center = (config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED); @@ -1701,6 +1711,7 @@ void CEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container } unsigned long CEulerSolver::SetPrimitive_Variables(CSolver **solver_container, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Number of non-physical points, local to the thread, needs * further reduction if function is called in parallel ---*/ @@ -1729,6 +1740,7 @@ unsigned long CEulerSolver::SetPrimitive_Variables(CSolver **solver_container, c void CEulerSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned long Iteration) { + SU2_ZONE_SCOPED /*--- Define an object to compute the speed of sound. ---*/ struct SoundSpeed { @@ -1784,12 +1796,14 @@ void CEulerSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, void CEulerSolver::Centered_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep) { + SU2_ZONE_SCOPED EdgeFluxResidual(geometry, solver_container, config); } void CEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED const bool ideal_gas = (config->GetKind_FluidModel() == STANDARD_AIR) || (config->GetKind_FluidModel() == IDEAL_GAS); @@ -2004,6 +2018,7 @@ void CEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_contain void CEulerSolver::ComputeConsistentExtrapolation(CFluidModel *fluidModel, unsigned short nDim, su2double *primitive, su2double *secondary) { + SU2_ZONE_SCOPED const CEulerVariable::CIndices prim_idx(nDim, 0); const su2double density = primitive[prim_idx.Density()]; const su2double pressure = primitive[prim_idx.Pressure()]; @@ -2021,6 +2036,7 @@ void CEulerSolver::ComputeConsistentExtrapolation(CFluidModel *fluidModel, unsig void CEulerSolver::LowMachPrimitiveCorrection(CFluidModel *fluidModel, unsigned short nDim, su2double *primitive_i, su2double *primitive_j) { + SU2_ZONE_SCOPED unsigned short iDim; su2double velocity2_i = 0.0; @@ -2059,6 +2075,7 @@ void CEulerSolver::LowMachPrimitiveCorrection(CFluidModel *fluidModel, unsigned void CEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED const bool implicit = config->GetKind_TimeIntScheme() == EULER_IMPLICIT; const bool viscous = config->GetViscous(); @@ -2311,6 +2328,7 @@ void CEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_contain void CEulerSolver::Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED /* This method should be used to call any new source terms for a particular problem*/ /* This method calls the new child class in CNumerics, where the new source term should be implemented. */ @@ -2324,6 +2342,7 @@ void CEulerSolver::Source_Template(CGeometry *geometry, CSolver **solver_contain } void CEulerSolver::SetMax_Eigenvalue(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Define an object to compute the speed of sound. ---*/ struct SoundSpeed { @@ -2344,6 +2363,7 @@ void CEulerSolver::SetMax_Eigenvalue(CGeometry *geometry, const CConfig *config) } void CEulerSolver::SetUndivided_Laplacian(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Loop domain points. ---*/ @@ -2391,6 +2411,7 @@ void CEulerSolver::SetUndivided_Laplacian(CGeometry *geometry, const CConfig *co } void CEulerSolver::SetCentered_Dissipation_Sensor(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Define an object for the sensor variable, pressure. ---*/ struct SensVar { @@ -2404,6 +2425,7 @@ void CEulerSolver::SetCentered_Dissipation_Sensor(CGeometry *geometry, const CCo } void CEulerSolver::SetUpwind_Ducros_Sensor(CGeometry *geometry, CConfig *config){ + SU2_ZONE_SCOPED SU2_OMP_FOR_STAT(omp_chunk_size) for (unsigned long iPoint = 0; iPoint < geometry->GetnPoint(); iPoint++) { @@ -2456,22 +2478,26 @@ void CEulerSolver::SetUpwind_Ducros_Sensor(CGeometry *geometry, CConfig *config) void CEulerSolver::ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep) { + SU2_ZONE_SCOPED Explicit_Iteration(geometry, solver_container, config, iRKStep); } void CEulerSolver::ClassicalRK4_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep) { + SU2_ZONE_SCOPED Explicit_Iteration(geometry, solver_container, config, iRKStep); } void CEulerSolver::ExplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + SU2_ZONE_SCOPED Explicit_Iteration(geometry, solver_container, config, 0); } void CEulerSolver::PrepareImplicitIteration(CGeometry *geometry, CSolver**, CConfig *config) { + SU2_ZONE_SCOPED struct LowMachPrec { const CEulerSolver* solver; @@ -2493,12 +2519,14 @@ void CEulerSolver::PrepareImplicitIteration(CGeometry *geometry, CSolver**, CCon } void CEulerSolver::CompleteImplicitIteration(CGeometry *geometry, CSolver**, CConfig *config) { + SU2_ZONE_SCOPED CompleteImplicitIteration_impl(geometry, config); } void CEulerSolver::SetPreconditioner(const CConfig *config, unsigned long iPoint, su2double delta, su2activematrix& preconditioner) const { + SU2_ZONE_SCOPED unsigned short iDim, jDim, iVar, jVar; su2double local_Mach, rho, enthalpy, soundspeed, sq_vel; @@ -2555,6 +2583,7 @@ void CEulerSolver::SetPreconditioner(const CConfig *config, unsigned long iPoint } void CEulerSolver::GetPower_Properties(CGeometry *geometry, CConfig *config, unsigned short iMesh, bool Output) { + SU2_ZONE_SCOPED unsigned short iDim, iMarker, jMarker; unsigned long iVertex, iPoint; @@ -3485,6 +3514,7 @@ void CEulerSolver::GetPower_Properties(CGeometry *geometry, CConfig *config, uns void CEulerSolver::SetActDisk_BCThrust(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, bool Output) { + SU2_ZONE_SCOPED su2double Massflow = 0.0 , Target_Massflow = 0.0, DragMinusThrust = 0.0 , Target_DragMinusThrust = 0.0, Target_NetThrust = 0.0, BCThrust = 0.0, BCThrust_inc = 0.0; @@ -3932,6 +3962,7 @@ void CEulerSolver::SetActDisk_BCThrust(CGeometry *geometry, CSolver **solver_con void CEulerSolver::ReadActDisk_InputFile(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, bool Output) { + SU2_ZONE_SCOPED /*--- Input file provides force coefficients distributions along disk radius. Initialization necessary only at initial iteration. ---*/ @@ -4132,6 +4163,7 @@ void CEulerSolver::ReadActDisk_InputFile(CGeometry *geometry, CSolver **solver_c void CEulerSolver::SetActDisk_BEM_VLAD(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, bool Output) { + SU2_ZONE_SCOPED /*! * \function SetActDisk_BEM_VLAD @@ -4558,6 +4590,7 @@ void CEulerSolver::SetActDisk_BEM_VLAD(CGeometry *geometry, CSolver **solver_con void CEulerSolver::SetFarfield_AoA(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, bool Output) { + SU2_ZONE_SCOPED const auto InnerIter = config->GetInnerIter(); /* --- Initialize values at first iteration --- */ @@ -4603,6 +4636,7 @@ void CEulerSolver::SetFarfield_AoA(CGeometry *geometry, CSolver **solver_contain } bool CEulerSolver::FixedCL_Convergence(CConfig* config, bool convergence) { + SU2_ZONE_SCOPED const su2double Target_CL = config->GetTarget_CL(); const auto curr_iter = config->GetInnerIter(); const auto Iter_dCL_dAlpha = config->GetIter_dCL_dAlpha(); @@ -4704,6 +4738,7 @@ bool CEulerSolver::FixedCL_Convergence(CConfig* config, bool convergence) { } void CEulerSolver::SetCoefficient_Gradients(CConfig *config) const{ + SU2_ZONE_SCOPED const su2double AoA = config->GetAoA(); @@ -4728,6 +4763,7 @@ void CEulerSolver::SetCoefficient_Gradients(CConfig *config) const{ } void CEulerSolver::Evaluate_ObjFunc(const CConfig *config, CSolver**) { + SU2_ZONE_SCOPED unsigned short iMarker_Monitoring, Kind_ObjFunc; su2double Weight_ObjFunc; @@ -4783,6 +4819,7 @@ void CEulerSolver::Evaluate_ObjFunc(const CConfig *config, CSolver**) { void CEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim; unsigned long iVertex, iPoint, Point_Normal; @@ -5040,6 +5077,7 @@ void CEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container, void CEulerSolver::BC_Riemann(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const string Marker_Tag = config->GetMarker_All_TagBound(val_marker); const bool viscous = config->GetViscous(), @@ -5468,6 +5506,7 @@ void CEulerSolver::BC_Riemann(CGeometry *geometry, CSolver **solver_container, void CEulerSolver::BC_TurboRiemann(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim, iVar, jVar, kVar, iSpan; unsigned long iPoint, Point_Normal, oldVertex, iVertex; @@ -5982,6 +6021,7 @@ void CEulerSolver::BC_TurboRiemann(CGeometry *geometry, CSolver **solver_contain } void CEulerSolver::PreprocessBC_Giles(CGeometry *geometry, CConfig *config, CNumerics *conv_numerics, unsigned short marker_flag) { + SU2_ZONE_SCOPED /* Implementation of Fuorier Transformations for non-regfelcting BC will come soon */ su2double cj_inf,cj_out1, cj_out2, Density_i, Pressure_i, *turboNormal, *turboVelocity, *Velocity_i, AverageSoundSpeed; su2double *deltaprim, *cj, TwoPiThetaFreq_Pitch, pitch, theta, deltaTheta; @@ -6149,6 +6189,7 @@ void CEulerSolver::PreprocessBC_Giles(CGeometry *geometry, CConfig *config, CNum void CEulerSolver::BC_Giles(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim, iVar, jVar, iSpan; unsigned long iPoint, Point_Normal, oldVertex, k, kend, kend_max, iVertex; @@ -6906,6 +6947,7 @@ void CEulerSolver::BC_Giles(CGeometry *geometry, CSolver **solver_container, CNu void CEulerSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim; su2double P_Total, T_Total, Velocity[MAXNDIM], Velocity2, H_Total, Temperature, Riemann, Pressure, Density, Energy, Flow_Dir[MAXNDIM], Mach2, SoundSpeed2, SoundSpeed_Total2, Vel_Mag, @@ -7195,6 +7237,7 @@ void CEulerSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, void CEulerSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iVar, iDim; unsigned long iVertex, iPoint; su2double Pressure, P_Exit, Velocity[3], @@ -7369,6 +7412,7 @@ void CEulerSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, void CEulerSolver::BC_Supersonic_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const su2double Gas_Constant = config->GetGas_ConstantND(); const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const auto Marker_Tag = config->GetMarker_All_TagBound(val_marker); @@ -7457,6 +7501,7 @@ void CEulerSolver::BC_Supersonic_Inlet(CGeometry *geometry, CSolver **solver_con void CEulerSolver::BC_Supersonic_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim; unsigned long iVertex, iPoint; su2double *V_outlet, *V_domain; @@ -7576,6 +7621,7 @@ void CEulerSolver::BC_Supersonic_Outlet(CGeometry *geometry, CSolver **solver_co } void CEulerSolver::BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim; unsigned long iVertex, iPoint; @@ -7806,6 +7852,7 @@ void CEulerSolver::BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_contai } void CEulerSolver::BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim; unsigned long iVertex, iPoint; @@ -8058,6 +8105,7 @@ void CEulerSolver::BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_conta void CEulerSolver::BC_ActDisk_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short Kind_ActDisk = config->GetKind_ActDisk(); @@ -8072,6 +8120,7 @@ void CEulerSolver::BC_ActDisk_Inlet(CGeometry *geometry, CSolver **solver_contai void CEulerSolver::BC_ActDisk_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short Kind_ActDisk = config->GetKind_ActDisk(); @@ -8086,6 +8135,7 @@ void CEulerSolver::BC_ActDisk_Outlet(CGeometry *geometry, CSolver **solver_conta void CEulerSolver::BC_ActDisk(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker, bool val_inlet_surface) { + SU2_ZONE_SCOPED unsigned short iDim; unsigned long iVertex, iPoint, GlobalIndex_donor, GlobalIndex; @@ -8497,6 +8547,7 @@ void CEulerSolver::BC_ActDisk(CGeometry *geometry, CSolver **solver_container, C void CEulerSolver::BC_ActDisk_VariableLoad(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker, bool val_inlet_surface) { + SU2_ZONE_SCOPED /*! * \function BC_ActDisk_VariableLoad @@ -8737,6 +8788,7 @@ void CEulerSolver::BC_ActDisk_VariableLoad(CGeometry *geometry, CSolver **solver } void CEulerSolver::PrintVerificationError(const CConfig *config) const { + SU2_ZONE_SCOPED if ((rank != MASTER_NODE) || (MGLevel != MESH_0)) return; @@ -8775,6 +8827,7 @@ void CEulerSolver::PrintVerificationError(const CConfig *config) const { } void CEulerSolver::SetFreeStream_Solution(const CConfig *config) { + SU2_ZONE_SCOPED SU2_OMP_FOR_STAT(omp_chunk_size) for (auto iPoint = 0u; iPoint < nPoint; iPoint++) { nodes->SetSolution(iPoint,0, Density_Inf); @@ -8787,6 +8840,7 @@ void CEulerSolver::SetFreeStream_Solution(const CConfig *config) { } void CEulerSolver::SetFreeStream_TurboSolution(CConfig *config) { + SU2_ZONE_SCOPED const su2double Alpha = config->GetAoA()*PI_NUMBER/180.0; const auto Mach = config->GetMach(); @@ -8818,6 +8872,7 @@ void CEulerSolver::SetFreeStream_TurboSolution(CConfig *config) { } void CEulerSolver::PreprocessAverage(CSolver **solver, CGeometry *geometry, CConfig *config, unsigned short marker_flag) { + SU2_ZONE_SCOPED const auto nSpanWiseSections = config->GetnSpanWiseSections(); const auto iZone = config->GetiZone(); @@ -8955,6 +9010,7 @@ void CEulerSolver::PreprocessAverage(CSolver **solver, CGeometry *geometry, CCon void CEulerSolver::TurboAverageProcess(CSolver **solver, CGeometry *geometry, CConfig *config, unsigned short marker_flag) { + SU2_ZONE_SCOPED const auto average_process = config->GetKind_AverageProcess(); const auto performance_average_process = config->GetKind_PerformanceAverageProcess(); @@ -9333,6 +9389,7 @@ void CEulerSolver::TurboAverageProcess(CSolver **solver, CGeometry *geometry, CC void CEulerSolver::MixedOut_Average(CConfig *config, su2double val_init_pressure, const su2double *val_Averaged_Flux, const su2double *val_normal, su2double& pressure_mix, su2double& density_mix) { + SU2_ZONE_SCOPED const auto relax_factor = config->GetMixedout_Coeff(0); const auto toll = config->GetMixedout_Coeff(1); @@ -9377,6 +9434,7 @@ void CEulerSolver::MixedOut_Average(CConfig *config, su2double val_init_pressure } void CEulerSolver::GatherInOutAverageValues(CConfig *config, CGeometry *geometry){ + SU2_ZONE_SCOPED unsigned short iMarker, iMarkerTP; unsigned short iSpan; diff --git a/SU2_CFD/src/solvers/CFEASolver.cpp b/SU2_CFD/src/solvers/CFEASolver.cpp index eb13264f6225..a683d90e4e41 100644 --- a/SU2_CFD/src/solvers/CFEASolver.cpp +++ b/SU2_CFD/src/solvers/CFEASolver.cpp @@ -37,6 +37,7 @@ using namespace GeometryToolbox; CFEASolver::CFEASolver(LINEAR_SOLVER_MODE mesh_deform_mode) : CFEASolverBase(mesh_deform_mode) { + SU2_ZONE_SCOPED Total_CFEA = 0.0; WAitken_Dyn = 0.0; @@ -49,6 +50,7 @@ CFEASolver::CFEASolver(LINEAR_SOLVER_MODE mesh_deform_mode) : CFEASolverBase(mes } CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(geometry, config) { + SU2_ZONE_SCOPED bool dynamic = config->GetTime_Domain(); config->SetDelta_UnstTimeND(config->GetDelta_UnstTime()); @@ -220,6 +222,7 @@ CFEASolver::CFEASolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(ge } CFEASolver::~CFEASolver() { + SU2_ZONE_SCOPED if (element_properties != nullptr) { for (unsigned long iElem = 0; iElem < nElement; iElem++) @@ -238,6 +241,7 @@ CFEASolver::~CFEASolver() { } void CFEASolver::HybridParallelInitialization(CGeometry* geometry) { + SU2_ZONE_SCOPED #ifdef HAVE_OMP /*--- Get the element coloring. ---*/ @@ -283,6 +287,7 @@ void CFEASolver::HybridParallelInitialization(CGeometry* geometry) { } void CFEASolver::Set_ElementProperties(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED const bool topology_mode = config->GetTopology_Optimization(); @@ -389,6 +394,7 @@ void CFEASolver::Set_ElementProperties(CGeometry *geometry, CConfig *config) { } void CFEASolver::Set_Prestretch(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED const auto iZone = config->GetiZone(); const auto nZone = geometry->GetnZone(); @@ -463,6 +469,7 @@ void CFEASolver::Set_Prestretch(CGeometry *geometry, CConfig *config) { } void CFEASolver::Set_ReferenceGeometry(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED const auto iZone = config->GetiZone(); const auto file_format = config->GetRefGeom_FileFormat(); @@ -536,6 +543,7 @@ void CFEASolver::Set_ReferenceGeometry(CGeometry *geometry, CConfig *config) { } void CFEASolver::Set_VertexEliminationSchedule(CGeometry *geometry, const vector& markers) { + SU2_ZONE_SCOPED /*--- Store global point indices of essential BC markers. ---*/ vector myPoints; @@ -553,6 +561,7 @@ void CFEASolver::Set_VertexEliminationSchedule(CGeometry *geometry, const vector void CFEASolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, CNumerics **numerics, unsigned short iMesh, unsigned long Iteration, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED const bool dynamic = config->GetTime_Domain(); const bool disc_adj_fem = (config->GetKind_Solver() == MAIN_SOLVER::DISC_ADJ_FEM); @@ -613,6 +622,7 @@ void CFEASolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, } void CFEASolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long TimeIter) { + SU2_ZONE_SCOPED SU2_OMP_PARALLEL { @@ -642,6 +652,7 @@ void CFEASolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_con } void CFEASolver::Compute_StiffMatrix(CGeometry *geometry, CNumerics **numerics, const CConfig *config) { + SU2_ZONE_SCOPED const bool topology_mode = config->GetTopology_Optimization(); const su2double simp_exponent = config->GetSIMP_Exponent(); @@ -737,6 +748,7 @@ void CFEASolver::Compute_StiffMatrix(CGeometry *geometry, CNumerics **numerics, } void CFEASolver::Compute_StiffMatrix_NodalStressRes(CGeometry *geometry, CNumerics **numerics, const CConfig *config) { + SU2_ZONE_SCOPED const bool prestretch_fem = config->GetPrestretch(); const bool de_effects = config->GetDE_Effects(); @@ -883,6 +895,7 @@ void CFEASolver::Compute_StiffMatrix_NodalStressRes(CGeometry *geometry, CNumeri } void CFEASolver::Compute_MassMatrix(const CGeometry *geometry, CNumerics **numerics, const CConfig *config) { + SU2_ZONE_SCOPED const bool topology_mode = config->GetTopology_Optimization(); const su2double simp_minstiff = config->GetSIMP_MinStiffness(); @@ -974,6 +987,7 @@ void CFEASolver::Compute_MassMatrix(const CGeometry *geometry, CNumerics **numer } void CFEASolver::Compute_MassRes(const CGeometry *geometry, CNumerics **numerics, const CConfig *config) { + SU2_ZONE_SCOPED const bool topology_mode = config->GetTopology_Optimization(); const su2double simp_minstiff = config->GetSIMP_MinStiffness(); @@ -1054,6 +1068,7 @@ void CFEASolver::Compute_MassRes(const CGeometry *geometry, CNumerics **numerics } void CFEASolver::Compute_NodalStressRes(CGeometry *geometry, CNumerics **numerics, const CConfig *config) { + SU2_ZONE_SCOPED const bool prestretch_fem = config->GetPrestretch(); @@ -1151,6 +1166,7 @@ void CFEASolver::Compute_NodalStressRes(CGeometry *geometry, CNumerics **numeric } void CFEASolver::Compute_NodalStress(CGeometry *geometry, CNumerics **numerics, const CConfig *config) { + SU2_ZONE_SCOPED const bool prestretch_fem = config->GetPrestretch(); @@ -1431,6 +1447,7 @@ void CFEASolver::Compute_NodalStress(CGeometry *geometry, CNumerics **numerics, } void CFEASolver::Compute_BodyForces(CGeometry *geometry, CNumerics **numerics, const CConfig *config) { + SU2_ZONE_SCOPED const su2double t_ref = config->GetTemperature_Ref(); @@ -1514,6 +1531,7 @@ void CFEASolver::Compute_BodyForces(CGeometry *geometry, CNumerics **numerics, c } void CFEASolver::Compute_IntegrationConstants(const CConfig *config) { + SU2_ZONE_SCOPED su2double Delta_t= config->GetDelta_UnstTime(); @@ -1562,6 +1580,7 @@ void CFEASolver::Compute_IntegrationConstants(const CConfig *config) { void CFEASolver::BC_Clamped(CGeometry *geometry, const CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool dynamic = config->GetTime_Domain(); const su2double zeros[MAXNVAR] = {0.0}; @@ -1594,6 +1613,7 @@ void CFEASolver::BC_Clamped(CGeometry *geometry, const CConfig *config, unsigned } void CFEASolver::BC_Clamped_Post(CGeometry *geometry, const CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED bool dynamic = config->GetTime_Domain(); @@ -1630,6 +1650,7 @@ void SubtractProjection(unsigned short nDim, const su2double* n, const Read& rea } void CFEASolver::BC_Sym_Plane(CGeometry *geometry, const CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED if (geometry->GetnElem_Bound(val_marker) == 0) return; const bool dynamic = config->GetTime_Domain(); @@ -1691,6 +1712,7 @@ void CFEASolver::BC_Sym_Plane(CGeometry *geometry, const CConfig *config, unsign } void CFEASolver::BC_DispDir(CGeometry *geometry, const CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim; @@ -1757,6 +1779,7 @@ CSysVector computeLinearResidual(const CSysMatrix& A, } void CFEASolver::Postprocessing(CGeometry *geometry, CConfig *config, CNumerics **numerics, bool of_comp_mode) { + SU2_ZONE_SCOPED /*--- Compute the objective function. ---*/ @@ -1859,6 +1882,7 @@ void CFEASolver::Postprocessing(CGeometry *geometry, CConfig *config, CNumerics } void CFEASolver::BC_Normal_Load(CGeometry *geometry, const CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED /*--- Determine whether the load conditions are applied in the reference or in the current configuration. ---*/ @@ -1953,6 +1977,7 @@ void CFEASolver::BC_Normal_Load(CGeometry *geometry, const CConfig *config, unsi } void CFEASolver::BC_Dir_Load(CGeometry *geometry, const CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED auto TagBound = config->GetMarker_All_TagBound(val_marker); su2double LoadDirVal = config->GetLoad_Dir_Value(TagBound); @@ -2014,6 +2039,7 @@ void CFEASolver::BC_Dir_Load(CGeometry *geometry, const CConfig *config, unsigne } void CFEASolver::BC_Damper(CGeometry *geometry, const CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const su2double dampConst = config->GetDamper_Constant(config->GetMarker_All_TagBound(val_marker)); @@ -2071,6 +2097,7 @@ void CFEASolver::BC_Damper(CGeometry *geometry, const CConfig *config, unsigned } su2double CFEASolver::Compute_LoadCoefficient(su2double CurrentTime, su2double RampTime, const CConfig *config){ + SU2_ZONE_SCOPED su2double LoadCoeff = 1.0; @@ -2144,6 +2171,7 @@ su2double CFEASolver::Compute_LoadCoefficient(su2double CurrentTime, su2double R } void CFEASolver::ImplicitNewmark_Iteration(const CGeometry *geometry, CNumerics **numerics, const CConfig *config) { + SU2_ZONE_SCOPED const bool first_iter = (config->GetInnerIter() == 0); const bool dynamic = (config->GetTime_Domain()); @@ -2230,6 +2258,7 @@ void CFEASolver::ImplicitNewmark_Iteration(const CGeometry *geometry, CNumerics } void CFEASolver::ImplicitNewmark_Update(const CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED const bool dynamic = (config->GetTime_Domain()); @@ -2280,6 +2309,7 @@ void CFEASolver::ImplicitNewmark_Update(const CGeometry *geometry, const CConfig } void CFEASolver::ImplicitNewmark_Relaxation(const CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED const bool dynamic = (config->GetTime_Domain()); @@ -2331,6 +2361,7 @@ void CFEASolver::ImplicitNewmark_Relaxation(const CGeometry *geometry, const CCo void CFEASolver::GeneralizedAlpha_Iteration(const CGeometry *geometry, CNumerics **numerics, const CConfig *config) { + SU2_ZONE_SCOPED const bool first_iter = (config->GetInnerIter() == 0); const bool dynamic = (config->GetTime_Domain()); @@ -2442,6 +2473,7 @@ void CFEASolver::GeneralizedAlpha_Iteration(const CGeometry *geometry, CNumerics } void CFEASolver::GeneralizedAlpha_UpdateDisp(const CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Update displacement components of the solution. ---*/ @@ -2454,6 +2486,7 @@ void CFEASolver::GeneralizedAlpha_UpdateDisp(const CGeometry *geometry, const CC } void CFEASolver::GeneralizedAlpha_UpdateSolution(const CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED const su2double alpha_f = config->Get_Int_Coeffs(2); const su2double alpha_m = config->Get_Int_Coeffs(3); @@ -2509,6 +2542,7 @@ void CFEASolver::GeneralizedAlpha_UpdateSolution(const CGeometry *geometry, cons } void CFEASolver::GeneralizedAlpha_UpdateLoads(const CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Set the load conditions of the time step n+1 as the load conditions for time step n ---*/ nodes->Set_SurfaceLoad_Res_n(); @@ -2517,6 +2551,7 @@ void CFEASolver::GeneralizedAlpha_UpdateLoads(const CGeometry *geometry, const C } void CFEASolver::Solve_System(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED /*--- Enforce solution at some halo points possibly not covered by essential BC markers. ---*/ CSysMatrixComms::Initiate(LinSysSol, geometry, config); @@ -2551,6 +2586,7 @@ void CFEASolver::Solve_System(CGeometry *geometry, CConfig *config) { void CFEASolver::PredictStruct_Displacement(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED const unsigned short predOrder = config->GetPredictorOrder(); const su2double Delta_t = config->GetDelta_UnstTime(); @@ -2602,6 +2638,7 @@ void CFEASolver::PredictStruct_Displacement(CGeometry *geometry, const CConfig * } void CFEASolver::ComputeAitken_Coefficient(CGeometry *geometry, const CConfig *config, unsigned long iOuterIter) { + SU2_ZONE_SCOPED unsigned long iPoint, iDim; su2double rbuf_numAitk = 0, sbuf_numAitk = 0; @@ -2692,6 +2729,7 @@ void CFEASolver::ComputeAitken_Coefficient(CGeometry *geometry, const CConfig *c } void CFEASolver::SetAitken_Relaxation(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED const su2double WAitken = WAitken_Dyn; const bool dynamic = config->GetTime_Domain(); @@ -2734,6 +2772,7 @@ void CFEASolver::SetAitken_Relaxation(CGeometry *geometry, const CConfig *config void CFEASolver::OutputForwardModeGradient(const CConfig *config, bool newFile, su2double fun, su2double fun_avg, su2double der, su2double der_avg) const { + SU2_ZONE_SCOPED if (rank != MASTER_NODE) return; bool dynamic = config->GetTime_Domain(); @@ -2802,6 +2841,7 @@ void CFEASolver::OutputForwardModeGradient(const CConfig *config, bool newFile, } void CFEASolver::Compute_OFRefGeom(CGeometry *geometry, const CConfig *config){ + SU2_ZONE_SCOPED bool fsi = config->GetFSI_Simulation(); unsigned long TimeIter = config->GetTimeIter(); @@ -2874,6 +2914,7 @@ void CFEASolver::Compute_OFRefGeom(CGeometry *geometry, const CConfig *config){ } void CFEASolver::Compute_OFRefNode(CGeometry *geometry, const CConfig *config){ + SU2_ZONE_SCOPED bool fsi = config->GetFSI_Simulation(); unsigned long TimeIter = config->GetTimeIter(); @@ -2918,6 +2959,7 @@ void CFEASolver::Compute_OFRefNode(CGeometry *geometry, const CConfig *config){ void CFEASolver::Compute_OFVolFrac(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Perform a volume average of the physical density of the elements for topology optimization ---*/ su2double total_volume = 0.0, integral = 0.0, discreteness = 0.0; @@ -2960,6 +3002,7 @@ void CFEASolver::Compute_OFVolFrac(CGeometry *geometry, const CConfig *config) void CFEASolver::Compute_OFCompliance(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- If the loads are being applied incrementaly ---*/ const bool incremental_load = config->GetIncrementalLoad(); @@ -3011,6 +3054,7 @@ void CFEASolver::Compute_OFCompliance(CGeometry *geometry, const CConfig *config } void CFEASolver::Stiffness_Penalty(CGeometry *geometry, CNumerics **numerics, CConfig *config){ + SU2_ZONE_SCOPED if (config->GetTotalDV_Penalty() == 0.0) { /*--- No need to go into expensive computations. ---*/ @@ -3096,6 +3140,7 @@ void CFEASolver::Stiffness_Penalty(CGeometry *geometry, CNumerics **numerics, CC } void CFEASolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED const bool dynamic = config->GetTime_Domain(); const bool fluid_structure = config->GetFSI_Simulation(); @@ -3194,6 +3239,7 @@ void CFEASolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *c void CFEASolver::RegisterVariables(CGeometry *geometry, CConfig *config, bool reset) { + SU2_ZONE_SCOPED /*--- Register the element density to get the derivatives required for material-based topology optimization, this is done here because element_properties is a member of CFEASolver only. ---*/ @@ -3205,6 +3251,7 @@ void CFEASolver::RegisterVariables(CGeometry *geometry, CConfig *config, bool re void CFEASolver::ExtractAdjoint_Variables(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED /*--- Extract and output derivatives for topology optimization, this is done here because element_properties is a member of CFEASolver only and the output structure only supports nodal values (these are elemental). ---*/ @@ -3250,6 +3297,7 @@ void CFEASolver::ExtractAdjoint_Variables(CGeometry *geometry, CConfig *config) void CFEASolver::FilterElementDensities(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Apply a filter to the design densities of the elements to generate the physical densities which are the ones used to penalize their stiffness. ---*/ diff --git a/SU2_CFD/src/solvers/CFEASolverBase.cpp b/SU2_CFD/src/solvers/CFEASolverBase.cpp index 6d903ea0d448..b275ce376f5a 100644 --- a/SU2_CFD/src/solvers/CFEASolverBase.cpp +++ b/SU2_CFD/src/solvers/CFEASolverBase.cpp @@ -29,6 +29,7 @@ #include CFEASolverBase::CFEASolverBase(LINEAR_SOLVER_MODE mesh_deform_mode) : CSolver(mesh_deform_mode) { + SU2_ZONE_SCOPED nElement = 0; nDim = 0; @@ -43,6 +44,7 @@ CFEASolverBase::CFEASolverBase(LINEAR_SOLVER_MODE mesh_deform_mode) : CSolver(me } CFEASolverBase::CFEASolverBase(CGeometry *geometry, CConfig *config, LINEAR_SOLVER_MODE mesh_deform_mode) : CSolver(mesh_deform_mode) { + SU2_ZONE_SCOPED nElement = geometry->GetnElem(); nDim = geometry->GetnDim(); @@ -58,6 +60,7 @@ CFEASolverBase::CFEASolverBase(CGeometry *geometry, CConfig *config, LINEAR_SOLV } CFEASolverBase::~CFEASolverBase() { + SU2_ZONE_SCOPED if (element_container != nullptr) { for (unsigned int iVar = 0; iVar < MAX_TERMS; iVar++) { @@ -72,6 +75,7 @@ CFEASolverBase::~CFEASolverBase() { } void CFEASolverBase::CommunicateExtraEliminationVertices(const CGeometry* geometry, vector& myPoints) { + SU2_ZONE_SCOPED /*--- communicate the boundary points ---*/ diff --git a/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp b/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp index 3f7694a0cbee..8b21eb4009c7 100644 --- a/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp +++ b/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp @@ -39,6 +39,7 @@ SIZE_ARR_NORM = 8 }; CFEM_DG_EulerSolver::CFEM_DG_EulerSolver() : CSolver() { + SU2_ZONE_SCOPED /*--- Basic array initialization ---*/ @@ -73,6 +74,7 @@ CFEM_DG_EulerSolver::CFEM_DG_EulerSolver() : CSolver() { } CFEM_DG_EulerSolver::CFEM_DG_EulerSolver(CConfig *config, unsigned short val_nDim, unsigned short iMesh) : CSolver() { + SU2_ZONE_SCOPED /*--- Basic array initialization ---*/ @@ -119,6 +121,7 @@ CFEM_DG_EulerSolver::CFEM_DG_EulerSolver(CConfig *config, unsigned short val_nDi } CFEM_DG_EulerSolver::CFEM_DG_EulerSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CSolver() { + SU2_ZONE_SCOPED /*--- Array initialization ---*/ FluidModel = nullptr; @@ -731,6 +734,7 @@ CFEM_DG_EulerSolver::CFEM_DG_EulerSolver(CGeometry *geometry, CConfig *config, u } CFEM_DG_EulerSolver::~CFEM_DG_EulerSolver() { + SU2_ZONE_SCOPED delete FluidModel; delete blasFunctions; @@ -772,6 +776,7 @@ CFEM_DG_EulerSolver::~CFEM_DG_EulerSolver() { void CFEM_DG_EulerSolver::SetNondimensionalization(CConfig *config, unsigned short iMesh, const bool writeOutput) { + SU2_ZONE_SCOPED su2double Temperature_FreeStream = 0.0, Mach2Vel_FreeStream = 0.0, ModVel_FreeStream = 0.0, Energy_FreeStream = 0.0, ModVel_FreeStreamND = 0.0, Velocity_Reynolds = 0.0, @@ -1391,6 +1396,7 @@ void CFEM_DG_EulerSolver::SetNondimensionalization(CConfig *config, void CFEM_DG_EulerSolver::DetermineGraphDOFs(const CMeshFEM *FEMGeometry, CConfig *config) { + SU2_ZONE_SCOPED /*-------------------------------------------------------------------*/ /* Step 1: Determine the number of owned DOFs per rank in cumulative */ @@ -1711,6 +1717,7 @@ void CFEM_DG_EulerSolver::DetermineGraphDOFs(const CMeshFEM *FEMGeometry, void CFEM_DG_EulerSolver::MetaDataJacobianComputation(const CMeshFEM *FEMGeometry, const vector &colorLocalDOFs) { + SU2_ZONE_SCOPED /*--------------------------------------------------------------------------*/ /*--- Part 1: Convert the coloring information of the DOFs to the ---*/ @@ -1916,6 +1923,7 @@ void CFEM_DG_EulerSolver::MetaDataJacobianComputation(const CMeshFEM *FEMGeom } void CFEM_DG_EulerSolver::SetUpTaskList(CConfig *config) { + SU2_ZONE_SCOPED /* Check whether an ADER space-time step must be carried out. When only a spatial Jacobian is computed this is false per definition. */ @@ -2553,6 +2561,7 @@ void CFEM_DG_EulerSolver::SetUpTaskList(CConfig *config) { void CFEM_DG_EulerSolver::Prepare_MPI_Communication(const CMeshFEM *FEMGeometry, CConfig *config) { + SU2_ZONE_SCOPED /*--- Get the communication information from DG_Geometry. Note that for a FEM DG discretization the communication entities of FEMGeometry contain @@ -2790,6 +2799,7 @@ void CFEM_DG_EulerSolver::Prepare_MPI_Communication(const CMeshFEM *FEMGeometry, void CFEM_DG_EulerSolver::Initiate_MPI_Communication(CConfig *config, const unsigned short timeLevel) { + SU2_ZONE_SCOPED #ifdef HAVE_MPI /* Check if there is anything to communicate. */ @@ -2857,6 +2867,7 @@ void CFEM_DG_EulerSolver::Initiate_MPI_Communication(CConfig *config, bool CFEM_DG_EulerSolver::Complete_MPI_Communication(CConfig *config, const unsigned short timeLevel, const bool commMustBeCompleted) { + SU2_ZONE_SCOPED /* Set the pointer to the memory, whose data must be communicated. This depends on the time integration scheme used. For ADER the data of @@ -2998,6 +3009,7 @@ bool CFEM_DG_EulerSolver::Complete_MPI_Communication(CConfig *config, void CFEM_DG_EulerSolver::Initiate_MPI_ReverseCommunication(CConfig *config, const unsigned short timeLevel) { + SU2_ZONE_SCOPED /* Set the pointer to the residual to be communicated. */ su2double *resComm; @@ -3104,6 +3116,7 @@ void CFEM_DG_EulerSolver::Initiate_MPI_ReverseCommunication(CConfig *config, bool CFEM_DG_EulerSolver::Complete_MPI_ReverseCommunication(CConfig *config, const unsigned short timeLevel, const bool commMustBeCompleted) { + SU2_ZONE_SCOPED /* Set the pointer to the residual to be communicated. */ su2double *resComm; if(config->GetKind_TimeIntScheme_Flow() == ADER_DG) resComm = VecTotResDOFsADER.data(); @@ -3197,6 +3210,7 @@ bool CFEM_DG_EulerSolver::Complete_MPI_ReverseCommunication(CConfig *config, } void CFEM_DG_EulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long TimeIter) { + SU2_ZONE_SCOPED /*--- Check if a verification solution is to be computed. ---*/ if ((VerificationSolution) && (TimeIter == 0)) { @@ -3221,6 +3235,7 @@ void CFEM_DG_EulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***s } void CFEM_DG_EulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED unsigned long ErrorCounter = 0; @@ -3505,6 +3520,7 @@ void CFEM_DG_EulerSolver::Postprocessing(CGeometry *geometry, CSolver **solver_c void CFEM_DG_EulerSolver::ComputeSpatialJacobian(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config, unsigned short iMesh, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED /* Write a message that the Jacobian is being computed. */ if(rank == MASTER_NODE) { @@ -3663,12 +3679,14 @@ void CFEM_DG_EulerSolver::ComputeSpatialJacobian(CGeometry *geometry, CSolver * } void CFEM_DG_EulerSolver::Set_OldSolution() { + SU2_ZONE_SCOPED for(unsigned long i=0; iGetTime_Marching() == TIME_MARCHING::TIME_STEPPING; @@ -3834,6 +3853,7 @@ void CFEM_DG_EulerSolver::CheckTimeSynchronization(CConfig *config, const su2double TimeSync, su2double &timeEvolved, bool &syncTimeReached) { + SU2_ZONE_SCOPED /* Check if this is the first time this check is carried out and determine the new time evolved. */ @@ -3870,6 +3890,7 @@ void CFEM_DG_EulerSolver::CheckTimeSynchronization(CConfig *config, void CFEM_DG_EulerSolver::ProcessTaskList_DG(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED /* Easier storage of the number of time levels.. */ const unsigned short nTimeLevels = config->GetnLevels_TimeAccurateLTS(); @@ -4183,6 +4204,7 @@ void CFEM_DG_EulerSolver::ProcessTaskList_DG(CGeometry *geometry, CSolver **sol void CFEM_DG_EulerSolver::ADER_SpaceTimeIntegration(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics, CConfig *config, unsigned short iMesh, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED /* Preprocessing. */ Preprocessing(geometry, solver_container, config, iMesh, 0, RunTime_EqSystem, false); TolerancesADERPredictorStep(); @@ -4195,6 +4217,7 @@ void CFEM_DG_EulerSolver::ADER_SpaceTimeIntegration(CGeometry *geometry, CSolve } void CFEM_DG_EulerSolver::TolerancesADERPredictorStep() { + SU2_ZONE_SCOPED /* Determine the maximum values of the conservative variables of the locally stored DOFs. Make a distinction between 2D and 3D for @@ -4251,6 +4274,7 @@ void CFEM_DG_EulerSolver::ADER_DG_PredictorStep(CConfig *config, const unsigned long elemBeg, const unsigned long elemEnd, su2double *workArray) { + SU2_ZONE_SCOPED /* Get the data of the ADER time integration scheme. */ const unsigned short nTimeDOFs = config->GetnTimeDOFsADER_DG(); @@ -4778,6 +4802,7 @@ void CFEM_DG_EulerSolver::ADER_DG_AliasedPredictorResidual_2D(CConfig const unsigned short NPad, su2double *res, su2double *work) { + SU2_ZONE_SCOPED /* Get the necessary information from the standard element. */ const unsigned short ind = elem->indStandardElement; @@ -5023,6 +5048,7 @@ void CFEM_DG_EulerSolver::ADER_DG_AliasedPredictorResidual_3D(CConfig const unsigned short NPad, su2double *res, su2double *work) { + SU2_ZONE_SCOPED /* Get the necessary information from the standard element. */ const unsigned short ind = elem->indStandardElement; @@ -5304,6 +5330,7 @@ void CFEM_DG_EulerSolver::ADER_DG_NonAliasedPredictorResidual_2D(CConfig const unsigned short NPad, su2double *res, su2double *work) { + SU2_ZONE_SCOPED /* Set the pointers for solAndGradInt and divFlux to work. The same array can be used for both help arrays. */ @@ -5513,6 +5540,7 @@ void CFEM_DG_EulerSolver::ADER_DG_NonAliasedPredictorResidual_3D(CConfig const unsigned short NPad, su2double *res, su2double *work) { + SU2_ZONE_SCOPED /* Set the pointers for solAndGradInt and divFlux to work. The same array can be used for both help arrays. */ @@ -5750,6 +5778,7 @@ void CFEM_DG_EulerSolver::ADER_DG_TimeInterpolatePredictorSol(CConfig const unsigned long *adjElem, const bool secondPartTimeInt, su2double *solTimeLevel) { + SU2_ZONE_SCOPED /*--------------------------------------------------------------------------*/ /*--- Step 1: Interpolate the solution to the given integration point ---*/ @@ -5835,6 +5864,7 @@ void CFEM_DG_EulerSolver::Shock_Capturing_DG(CConfig *config, const unsigned long elemBeg, const unsigned long elemEnd, su2double *workArray) { + SU2_ZONE_SCOPED /*--- Run shock capturing algorithm ---*/ switch( config->GetKind_FEM_DG_Shock() ) { @@ -5851,6 +5881,7 @@ void CFEM_DG_EulerSolver::Volume_Residual(CConfig *config, const unsigned long elemBeg, const unsigned long elemEnd, su2double *workArray) { + SU2_ZONE_SCOPED /*--- Determine whether a body force term is present. ---*/ bool body_force = config->GetBody_Force(); @@ -6231,6 +6262,7 @@ void CFEM_DG_EulerSolver::Boundary_Conditions(const unsigned short timeLevel, CNumerics **numerics, const bool haloInfoNeededForBC, su2double *workArray){ + SU2_ZONE_SCOPED /* Loop over all boundaries. */ for (unsigned short iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { @@ -6316,6 +6348,7 @@ void CFEM_DG_EulerSolver::ResidualFaces(CConfig *config, unsigned long &indResFaces, CNumerics *numerics, su2double *workArray) { + SU2_ZONE_SCOPED /* Determine the number of faces that are treated simultaneously in the matrix products to obtain good gemm performance. */ @@ -6439,6 +6472,7 @@ void CFEM_DG_EulerSolver::InviscidFluxesInternalMatchingFace( su2double *solIntR, su2double *fluxes, CNumerics *numerics) { + SU2_ZONE_SCOPED /* Set the pointer solFace to fluxes. This is just for readability, as the same memory can be used for the storage of the solution of the DOFs of @@ -6576,6 +6610,7 @@ void CFEM_DG_EulerSolver::AccumulateSpaceTimeResidualADEROwnedElem( CConfig *config, const unsigned short timeLevel, const unsigned short intPoint) { + SU2_ZONE_SCOPED /* Compute half the integration weight. The reason for doing this is that the given integration weight is based on the normalized interval [-1..1], i.e. @@ -6649,6 +6684,7 @@ void CFEM_DG_EulerSolver::AccumulateSpaceTimeResidualADERHaloElem( CConfig *config, const unsigned short timeLevel, const unsigned short intPoint) { + SU2_ZONE_SCOPED /* Compute half the integration weight. The reason for doing this is that the given integration weight is based on the normalized interval [-1..1], i.e. @@ -6710,6 +6746,7 @@ void CFEM_DG_EulerSolver::AccumulateSpaceTimeResidualADERHaloElem( void CFEM_DG_EulerSolver::CreateFinalResidual(const unsigned short timeLevel, const bool ownedElements) { + SU2_ZONE_SCOPED /* Determine the element range for which the final residual must be created. */ @@ -6757,6 +6794,7 @@ void CFEM_DG_EulerSolver::MultiplyResidualByInverseMassMatrix( const unsigned long elemBeg, const unsigned long elemEnd, su2double *workArray) { + SU2_ZONE_SCOPED /*--- Set the reference to the correct residual. This depends whether or not the ADER scheme is used. ---*/ @@ -6797,6 +6835,7 @@ void CFEM_DG_EulerSolver::MultiplyResidualByInverseMassMatrix( } void CFEM_DG_EulerSolver::Pressure_Forces(const CGeometry* geometry, const CConfig* config) { + SU2_ZONE_SCOPED /* Allocate the memory for the work array and initialize it to zero to avoid warnings in debug mode about uninitialized memory when padding is applied. */ @@ -7209,6 +7248,7 @@ void CFEM_DG_EulerSolver::Pressure_Forces(const CGeometry* geometry, const CConf void CFEM_DG_EulerSolver::ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep) { + SU2_ZONE_SCOPED const su2double RK_AlphaCoeff = config->Get_Alpha_RKStep(iRKStep); const unsigned short nRKStages = config->GetnRKStep(); @@ -7257,6 +7297,7 @@ void CFEM_DG_EulerSolver::ExplicitRK_Iteration(CGeometry *geometry, CSolver **so void CFEM_DG_EulerSolver::ClassicalRK4_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep) { + SU2_ZONE_SCOPED /*--- Hard-coded classical RK4 coefficients. Will be added to config. ---*/ su2double RK_FuncCoeff[4] = {1.0/6.0, 1.0/3.0, 1.0/3.0, 1.0/6.0}; @@ -7309,6 +7350,7 @@ void CFEM_DG_EulerSolver::ClassicalRK4_Iteration(CGeometry *geometry, CSolver ** void CFEM_DG_EulerSolver::SetResidual_RMS_FEM(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED /* Initialize the residuals to zero. */ SetResToZero(); @@ -7393,6 +7435,7 @@ void CFEM_DG_EulerSolver::SetResidual_RMS_FEM(CGeometry *geometry, void CFEM_DG_EulerSolver::ComputeVerificationError(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED /*--- The errors only need to be computed on the finest grid. ---*/ if(MGLevel != MESH_0) return; @@ -7497,6 +7540,7 @@ void CFEM_DG_EulerSolver::ComputeVerificationError(CGeometry *geometry, void CFEM_DG_EulerSolver::ADER_DG_Iteration(const unsigned long elemBeg, const unsigned long elemEnd) { + SU2_ZONE_SCOPED /*--- Update the solution by looping over the given range of volume elements. ---*/ @@ -7522,6 +7566,7 @@ void CFEM_DG_EulerSolver::BoundaryStates_Euler_Wall(CConfig *co const CSurfaceElementFEM *surfElem, const su2double *solIntL, su2double *solIntR) { + SU2_ZONE_SCOPED /*--- Apply the inviscid wall boundary conditions to compute the right state in the integration points. There are two options. Either the @@ -7590,6 +7635,7 @@ void CFEM_DG_EulerSolver::BoundaryStates_Inlet(CConfig *config, unsigned short val_marker, const su2double *solIntL, su2double *solIntR) { + SU2_ZONE_SCOPED /*--- Retrieve the specified total conditions for this inlet. ---*/ string Marker_Tag = config->GetMarker_All_TagBound(val_marker); @@ -7705,6 +7751,7 @@ void CFEM_DG_EulerSolver::BoundaryStates_Outlet(CConfig *config unsigned short val_marker, const su2double *solIntL, su2double *solIntR) { + SU2_ZONE_SCOPED /*--- Retrieve the specified back pressure for this outlet. Nondimensionalize, if necessary. ---*/ @@ -7782,6 +7829,7 @@ void CFEM_DG_EulerSolver::BoundaryStates_Riemann(CConfig *confi unsigned short val_marker, const su2double *solIntL, su2double *solIntR) { + SU2_ZONE_SCOPED /* Retrieve the corresponding string for this marker. */ string Marker_Tag = config->GetMarker_All_TagBound(val_marker); @@ -8216,6 +8264,7 @@ void CFEM_DG_EulerSolver::BC_Euler_Wall(CConfig *config, su2double *resFaces, CNumerics *conv_numerics, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -8280,6 +8329,7 @@ void CFEM_DG_EulerSolver::BC_Far_Field(CConfig *config, su2double *resFaces, CNumerics *conv_numerics, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -8350,6 +8400,7 @@ void CFEM_DG_EulerSolver::BC_Sym_Plane(CConfig *config, su2double *resFaces, CNumerics *conv_numerics, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -8480,6 +8531,7 @@ void CFEM_DG_EulerSolver::BC_Supersonic_Outlet(CConfig *config, su2double *resFaces, CNumerics *conv_numerics, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -8546,6 +8598,7 @@ void CFEM_DG_EulerSolver::BC_Inlet(CConfig *config, CNumerics *conv_numerics, unsigned short val_marker, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -8610,6 +8663,7 @@ void CFEM_DG_EulerSolver::BC_Outlet(CConfig *config, CNumerics *conv_numerics, unsigned short val_marker, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -8674,6 +8728,7 @@ void CFEM_DG_EulerSolver::BC_Riemann(CConfig *config, CNumerics *conv_numerics, unsigned short val_marker, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -8737,6 +8792,7 @@ void CFEM_DG_EulerSolver::BC_Custom(CConfig *config, su2double *resFaces, CNumerics *conv_numerics, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -8829,6 +8885,7 @@ void CFEM_DG_EulerSolver::ResidualInviscidBoundaryFace( su2double *fluxes, su2double *resFaces, unsigned long &indResFaces) { + SU2_ZONE_SCOPED /*--- Get the required information from the standard face, which is the same for all faces considered. ---*/ @@ -8907,6 +8964,7 @@ void CFEM_DG_EulerSolver::LeftStatesIntegrationPointsBoundaryFace( const CSurfaceElementFEM *surfElem, su2double *solFace, su2double *solIntL) { + SU2_ZONE_SCOPED /* Get the required information from the corresponding standard face, which is the same for all simultaneously treated faces. */ @@ -8956,6 +9014,7 @@ void CFEM_DG_EulerSolver::ComputeInviscidFluxesFace(CConfig *config const su2double *solR, su2double *fluxes, CNumerics *numerics) { + SU2_ZONE_SCOPED /* Easier storage of the specific heat ratio. */ const su2double gm1 = Gamma_Minus_One; @@ -9474,6 +9533,7 @@ void CFEM_DG_EulerSolver::ComputeInviscidFluxesFace(CConfig *config } void CFEM_DG_EulerSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Restart the solution from file information ---*/ unsigned short iVar; diff --git a/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp b/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp index 7cec6d049207..0639bb057571 100644 --- a/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp +++ b/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp @@ -34,6 +34,7 @@ SIZE_ARR_NORM = 8 }; CFEM_DG_NSSolver::CFEM_DG_NSSolver() : CFEM_DG_EulerSolver() { + SU2_ZONE_SCOPED /*--- Basic array initialization ---*/ CD_Visc = nullptr; CL_Visc = nullptr; CSF_Visc = nullptr; CEff_Visc = nullptr; @@ -53,6 +54,7 @@ CFEM_DG_NSSolver::CFEM_DG_NSSolver() : CFEM_DG_EulerSolver() { CFEM_DG_NSSolver::CFEM_DG_NSSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CFEM_DG_EulerSolver(geometry, config, iMesh) { + SU2_ZONE_SCOPED /*--- Array initialization ---*/ CD_Visc = nullptr; CL_Visc = nullptr; CSF_Visc = nullptr; CEff_Visc = nullptr; @@ -153,6 +155,7 @@ CFEM_DG_NSSolver::CFEM_DG_NSSolver(CGeometry *geometry, CConfig *config, unsigne } CFEM_DG_NSSolver::~CFEM_DG_NSSolver() { + SU2_ZONE_SCOPED delete [] CD_Visc; delete [] CL_Visc; @@ -183,6 +186,7 @@ CFEM_DG_NSSolver::~CFEM_DG_NSSolver() { } void CFEM_DG_NSSolver::Friction_Forces(const CGeometry* geometry, const CConfig* config) { + SU2_ZONE_SCOPED /* Allocate the memory for the work array and initialize it to zero to avoid warnings in debug mode about uninitialized memory when padding is applied. */ @@ -893,6 +897,7 @@ void CFEM_DG_NSSolver::Friction_Forces(const CGeometry* geometry, const CConfig* void CFEM_DG_NSSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned long Iteration) { + SU2_ZONE_SCOPED /* Check whether or not a time stepping scheme is used. */ const bool time_stepping = config->GetTime_Marching() == TIME_MARCHING::TIME_STEPPING; @@ -1310,6 +1315,7 @@ void CFEM_DG_NSSolver::ADER_DG_AliasedPredictorResidual_2D(CConfig const unsigned short NPad, su2double *res, su2double *work) { + SU2_ZONE_SCOPED /* Constant factor present in the heat flux vector. */ const su2double factHeatFlux_Lam = Gamma/Prandtl_Lam; const su2double factHeatFlux_Turb = Gamma/Prandtl_Turb; @@ -1634,6 +1640,7 @@ void CFEM_DG_NSSolver::ADER_DG_AliasedPredictorResidual_3D(CConfig const unsigned short NPad, su2double *res, su2double *work) { + SU2_ZONE_SCOPED /* Constant factor present in the heat flux vector. */ const su2double factHeatFlux_Lam = Gamma/Prandtl_Lam; const su2double factHeatFlux_Turb = Gamma/Prandtl_Turb; @@ -2022,6 +2029,7 @@ void CFEM_DG_NSSolver::ADER_DG_NonAliasedPredictorResidual_2D(CConfig const unsigned short NPad, su2double *res, su2double *work) { + SU2_ZONE_SCOPED /* Constant factor present in the heat flux vector, the inverse of the specific heat at constant volume and ratio lambdaOverMu. */ @@ -2414,6 +2422,7 @@ void CFEM_DG_NSSolver::ADER_DG_NonAliasedPredictorResidual_3D(CConfig const unsigned short NPad, su2double *res, su2double *work) { + SU2_ZONE_SCOPED /* Constant factor present in the heat flux vector, the inverse of the specific heat at constant volume and ratio lambdaOverMu. */ @@ -2974,6 +2983,7 @@ void CFEM_DG_NSSolver::Shock_Capturing_DG(CConfig *config, const unsigned long elemBeg, const unsigned long elemEnd, su2double *workArray) { + SU2_ZONE_SCOPED /*--- Run shock capturing algorithm ---*/ switch( config->GetKind_FEM_DG_Shock() ) { @@ -2988,6 +2998,7 @@ void CFEM_DG_NSSolver::Shock_Capturing_DG(CConfig *config, void CFEM_DG_NSSolver::Shock_Capturing_DG_Persson(const unsigned long elemBeg, const unsigned long elemEnd, su2double *workArray) { + SU2_ZONE_SCOPED /*--- Dummy variable for storing shock sensor value temporarily ---*/ su2double sensorVal, sensorLowerBound, machNorm, machMax; @@ -3150,6 +3161,7 @@ void CFEM_DG_NSSolver::Volume_Residual(CConfig *config, const unsigned long elemBeg, const unsigned long elemEnd, su2double *workArray) { + SU2_ZONE_SCOPED /*--- Determine whether a body force term is present. ---*/ bool body_force = config->GetBody_Force(); @@ -3728,6 +3740,7 @@ void CFEM_DG_NSSolver::ResidualFaces(CConfig *config, unsigned long &indResFaces, CNumerics *numerics, su2double *workArray) { + SU2_ZONE_SCOPED /* Determine the number of faces that are treated simultaneously in the matrix products to obtain good gemm performance. */ @@ -4146,6 +4159,7 @@ void CFEM_DG_NSSolver::ViscousNormalFluxFace(const CVolumeElementFEM *adjVolElem su2double *viscNormFluxes, su2double *viscosityInt, su2double *kOverCvInt) { + SU2_ZONE_SCOPED /* Multiplication factor for the heat flux. It is set to zero if the wall heat flux is prescribed, such that the computed heat flux is zero, and to one otherwise. */ @@ -4312,6 +4326,7 @@ void CFEM_DG_NSSolver::ViscousNormalFluxIntegrationPoint_2D(const su2double *sol su2double &Viscosity, su2double &kOverCv, su2double *normalFlux) { + SU2_ZONE_SCOPED /* Constant factor present in the heat flux vector, namely the ratio of thermal conductivity and viscosity. */ @@ -4398,6 +4413,7 @@ void CFEM_DG_NSSolver::ViscousNormalFluxIntegrationPoint_3D(const su2double *sol su2double &Viscosity, su2double &kOverCv, su2double *normalFlux) { + SU2_ZONE_SCOPED /* Constant factor present in the heat flux vector, namely the ratio of thermal conductivity and viscosity. */ @@ -4509,6 +4525,7 @@ void CFEM_DG_NSSolver::PenaltyTermsFluxFace(const unsigned short indFaceChunk, const su2double lenScale1, const su2double *metricNormalsFace, su2double *penaltyFluxes) { + SU2_ZONE_SCOPED /* Constant ratio of the second viscosity and the viscosity itself. */ const su2double lambdaOverMu = -TWO3; @@ -4629,6 +4646,7 @@ void CFEM_DG_NSSolver::SymmetrizingFluxesFace(const unsigned short indFaceChunk, const su2double *kOverCvInt1, const su2double *metricNormalsFace, su2double *symmFluxes) { + SU2_ZONE_SCOPED /* Constant ratio of the second viscosity and the viscosity itself. */ const su2double lambdaOverMu = -TWO3; @@ -4868,6 +4886,7 @@ void CFEM_DG_NSSolver::TransformSymmetrizingFluxes(const unsigned short indFaceC const su2double *weights, const su2double *metricCoorFace, su2double *paramFluxes) { + SU2_ZONE_SCOPED /*--- Transform the fluxes, such that they must be multiplied with the gradients w.r.t. the parametric coordinates rather than the @@ -4985,6 +5004,7 @@ void CFEM_DG_NSSolver::BC_Euler_Wall(CConfig *config, su2double *resFaces, CNumerics *conv_numerics, su2double *workArray){ + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -5051,6 +5071,7 @@ void CFEM_DG_NSSolver::BC_Far_Field(CConfig *config, su2double *resFaces, CNumerics *conv_numerics, su2double *workArray){ + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -5123,6 +5144,7 @@ void CFEM_DG_NSSolver::BC_Sym_Plane(CConfig *config, su2double *resFaces, CNumerics *conv_numerics, su2double *workArray){ + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -5528,6 +5550,7 @@ void CFEM_DG_NSSolver::BC_Supersonic_Outlet(CConfig *config, su2double *resFaces, CNumerics *conv_numerics, su2double *workArray){ + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -5596,6 +5619,7 @@ void CFEM_DG_NSSolver::BC_Inlet(CConfig *config, CNumerics *conv_numerics, unsigned short val_marker, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -5662,6 +5686,7 @@ void CFEM_DG_NSSolver::BC_Outlet(CConfig *config, CNumerics *conv_numerics, unsigned short val_marker, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -5728,6 +5753,7 @@ void CFEM_DG_NSSolver::BC_HeatFlux_Wall(CConfig *config, CNumerics *conv_numerics, unsigned short val_marker, su2double *workArray) { + SU2_ZONE_SCOPED /* Set the factor for the wall velocity. For factWallVel = 0, the right state contains the wall velocity. For factWallVel = 1.0, the velocity of the @@ -5860,6 +5886,7 @@ void CFEM_DG_NSSolver::BC_Isothermal_Wall(CConfig *config, CNumerics *conv_numerics, unsigned short val_marker, su2double *workArray) { + SU2_ZONE_SCOPED /* Set the factor for the wall velocity. For factWallVel = 0, the right state contains the wall velocity. For factWallVel = 1.0, the velocity of the @@ -5977,6 +6004,7 @@ void CFEM_DG_NSSolver::BC_Riemann(CConfig *config, CNumerics *conv_numerics, unsigned short val_marker, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -6042,6 +6070,7 @@ void CFEM_DG_NSSolver::BC_Custom(CConfig *config, su2double *resFaces, CNumerics *conv_numerics, su2double *workArray) { + SU2_ZONE_SCOPED /* Initialization of the counter in resFaces. */ unsigned long indResFaces = 0; @@ -6142,6 +6171,7 @@ void CFEM_DG_NSSolver::ViscousBoundaryFacesBCTreatment( su2double *resFaces, unsigned long &indResFaces, CWallModel *wallModel) { + SU2_ZONE_SCOPED /*--- Get the information from the standard element, which is the same for all the faces in the chunks considered. ---*/ @@ -6201,6 +6231,7 @@ void CFEM_DG_NSSolver::ComputeViscousFluxesBoundaryFaces( su2double *viscFluxes, su2double *viscosityInt, su2double *kOverCvInt) { + SU2_ZONE_SCOPED /*---------------------------------------------------------------------------*/ /*--- Step 1: Compute the gradients of the conservative variables in the ---*/ @@ -6274,6 +6305,7 @@ void CFEM_DG_NSSolver::WallTreatmentViscousFluxes( su2double *viscosityInt, su2double *kOverCvInt, CWallModel *wallModel) { + SU2_ZONE_SCOPED /* Loop over the simultaneously treated faces. */ for(unsigned short l=0; l } // namespace CGradientSmoothingSolverDetails CGradientSmoothingSolver::CGradientSmoothingSolver(CGeometry *geometry, CConfig *config) : CFEASolverBase(LINEAR_SOLVER_MODE::GRADIENT_MODE) { + SU2_ZONE_SCOPED unsigned int marker_count = 0; unsigned long iPoint; @@ -164,6 +165,7 @@ CGradientSmoothingSolver::CGradientSmoothingSolver(CGeometry *geometry, CConfig } CGradientSmoothingSolver::~CGradientSmoothingSolver() { + SU2_ZONE_SCOPED delete nodes; @@ -171,6 +173,7 @@ CGradientSmoothingSolver::~CGradientSmoothingSolver() { void CGradientSmoothingSolver::ApplyGradientSmoothingVolume(CGeometry* geometry, CNumerics* numerics, const CConfig* config) { + SU2_ZONE_SCOPED /*--- current dimension if we run consecutive on each dimension ---*/ unsigned int iDim = 0; @@ -213,6 +216,7 @@ void CGradientSmoothingSolver::ApplyGradientSmoothingVolume(CGeometry* geometry, void CGradientSmoothingSolver::ApplyGradientSmoothingSurface(CGeometry* geometry, CNumerics* numerics, const CConfig* config) { + SU2_ZONE_SCOPED /*--- Set vector and sparse matrix to 0 ---*/ LinSysSol.SetValZero(); LinSysRes.SetValZero(); @@ -246,6 +250,7 @@ void CGradientSmoothingSolver::ApplyGradientSmoothingDV(CGeometry* geometry, CNu CSurfaceMovement* surface_movement, CVolumetricMovement* grid_movement, CConfig* config, su2double** Gradient) { + SU2_ZONE_SCOPED unsigned nDVtotal=config->GetnDV_Total(); unsigned column, row; unsigned long iPoint; @@ -363,6 +368,7 @@ void CGradientSmoothingSolver::ApplyGradientSmoothingDV(CGeometry* geometry, CNu } void CGradientSmoothingSolver::Compute_StiffMatrix(CGeometry* geometry, CNumerics* numerics, const CConfig* config) { + SU2_ZONE_SCOPED unsigned long iElem, iNode; unsigned int iDim, nNodes = 0, NelNodes, jNode; std::array indexNode; @@ -423,6 +429,7 @@ void CGradientSmoothingSolver::Compute_StiffMatrix(CGeometry* geometry, CNumeric void CGradientSmoothingSolver::Compute_Surface_StiffMatrix(CGeometry* geometry, CNumerics* numerics, const CConfig* config, unsigned long val_marker, unsigned int nSurfDim) { + SU2_ZONE_SCOPED unsigned long iElem, iPoint, iVertex, iDim, iSurfDim; unsigned int iNode, jNode, nNodes = 0, NelNodes; std::array indexNode; @@ -487,6 +494,7 @@ void CGradientSmoothingSolver::Compute_Surface_StiffMatrix(CGeometry* geometry, } void CGradientSmoothingSolver::Compute_Residual(CGeometry* geometry, const CConfig* config) { + SU2_ZONE_SCOPED unsigned long iElem; unsigned int iDim, iNode, nNodes = 0; int EL_KIND = 0; @@ -545,6 +553,7 @@ void CGradientSmoothingSolver::Compute_Residual(CGeometry* geometry, const CConf void CGradientSmoothingSolver::Compute_Surface_Residual(CGeometry* geometry, const CConfig* config, unsigned long val_marker) { + SU2_ZONE_SCOPED unsigned long iElem, iPoint, iVertex; unsigned int iDim, iNode, nNodes = 0; int EL_KIND = 0; @@ -600,6 +609,7 @@ void CGradientSmoothingSolver::Compute_Surface_Residual(CGeometry* geometry, con } void CGradientSmoothingSolver::Impose_BC(const CGeometry* geometry, const CConfig* config) { + SU2_ZONE_SCOPED unsigned int iMarker; /*--- Get the boundary markers and iterate over them @@ -613,6 +623,7 @@ void CGradientSmoothingSolver::Impose_BC(const CGeometry* geometry, const CConfi } void CGradientSmoothingSolver::BC_Dirichlet(const CGeometry* geometry, const CConfig* config, unsigned int val_marker) { + SU2_ZONE_SCOPED unsigned long iPoint, iVertex; const su2double zeros[MAXNDIM] = {0.0}; @@ -631,6 +642,7 @@ void CGradientSmoothingSolver::BC_Dirichlet(const CGeometry* geometry, const CCo void CGradientSmoothingSolver::BC_Surface_Dirichlet(const CGeometry* geometry, const CConfig* config, unsigned int val_marker) { + SU2_ZONE_SCOPED unsigned long iPoint, iVertex; const su2double zeros[MAXNDIM] = {0.0}; @@ -648,6 +660,7 @@ void CGradientSmoothingSolver::BC_Surface_Dirichlet(const CGeometry* geometry, c } void CGradientSmoothingSolver::Solve_Linear_System(CGeometry* geometry, const CConfig* config) { + SU2_ZONE_SCOPED /* For MPI prescribe vector entries across the ranks before solving the system. * Analog to FEA solver this is only done for the solution */ CSysMatrixComms::Initiate(LinSysSol, geometry, config); @@ -675,6 +688,7 @@ template CSysMatrixVectorProduct CGradientSmoothingSolver::GetStiffnessMatrixVectorProduct(CGeometry* geometry, CNumerics* numerics, const CConfig* config) { + SU2_ZONE_SCOPED /*--- Compute the sparse stiffness matrix ---*/ if (config->GetSmoothOnSurface()) { @@ -692,6 +706,7 @@ CSysMatrixVectorProduct CGradientSmoothingSolver::GetStiffnessMatri } void CGradientSmoothingSolver::CalculateOriginalGradient(CGeometry *geometry, CVolumetricMovement *grid_movement, CConfig *config, su2double** Gradient) { + SU2_ZONE_SCOPED unsigned int iDV, iDV_Value, iDV_index; @@ -717,6 +732,7 @@ void CGradientSmoothingSolver::CalculateOriginalGradient(CGeometry *geometry, CV } void CGradientSmoothingSolver::RecordTapeAndCalculateOriginalGradient(CGeometry *geometry, CSurfaceMovement *surface_movement, CVolumetricMovement *grid_movement, CConfig *config, su2double **Gradient) { + SU2_ZONE_SCOPED /*--- Record the parameterization on the AD tape. ---*/ if (rank == MASTER_NODE) cout << " calculate the original gradient" << endl; @@ -728,6 +744,7 @@ void CGradientSmoothingSolver::RecordTapeAndCalculateOriginalGradient(CGeometry } void CGradientSmoothingSolver::OutputDVGradient(const CConfig* config, string out_file) { + SU2_ZONE_SCOPED unsigned iDV; if (rank == MASTER_NODE) { /*--- For multizone append zone number to filename. ---*/ @@ -745,6 +762,7 @@ void CGradientSmoothingSolver::OutputDVGradient(const CConfig* config, string ou } void CGradientSmoothingSolver::RecordParameterizationJacobian(CGeometry *geometry, CSurfaceMovement *surface_movement, CSysVector& registeredCoord, CConfig *config) { + SU2_ZONE_SCOPED unsigned int nDim, nMarker, nDV, nDV_Value, nPoint, nVertex; unsigned int iDV, iDV_Value, iMarker, iPoint, iVertex, iDim; @@ -803,6 +821,7 @@ void CGradientSmoothingSolver::RecordParameterizationJacobian(CGeometry *geometr } void CGradientSmoothingSolver::ProjectDVtoMesh(CGeometry *geometry, std::vector& seeding, CSysVector& result, CSysVector& registeredCoord, CConfig *config) { + SU2_ZONE_SCOPED unsigned int nDim, nMarker, nDV, nDV_Value, nVertex; unsigned int iDV, iDV_Value, iDV_index, iMarker, iVertex, iPoint, iDim; @@ -842,6 +861,7 @@ void CGradientSmoothingSolver::ProjectDVtoMesh(CGeometry *geometry, std::vector< } void CGradientSmoothingSolver::ProjectMeshToDV(CGeometry *geometry, CSysVector& sensitivity, std::vector& output, CSysVector& registeredCoord, CConfig *config) { + SU2_ZONE_SCOPED /*--- adjoint surface deformation ---*/ @@ -888,6 +908,7 @@ void CGradientSmoothingSolver::ProjectMeshToDV(CGeometry *geometry, CSysVector myPoints; @@ -992,6 +1016,7 @@ void CGradientSmoothingSolver::Set_VertexEliminationSchedule(CGeometry* geometry } void CGradientSmoothingSolver::Complete_Surface_StiffMatrix(const CGeometry* geometry) { + SU2_ZONE_SCOPED /*--- Assembling the stiffness matrix on the design surface means the Jacobian is the identity for nodes inside the domain. ---*/ for (unsigned long iPoint = 0ul; iPoint < geometry->GetnPointDomain(); iPoint++){ diff --git a/SU2_CFD/src/solvers/CHeatSolver.cpp b/SU2_CFD/src/solvers/CHeatSolver.cpp index 6e127a984485..49235895307d 100644 --- a/SU2_CFD/src/solvers/CHeatSolver.cpp +++ b/SU2_CFD/src/solvers/CHeatSolver.cpp @@ -36,6 +36,7 @@ template class CScalarSolver; CHeatSolver::CHeatSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CScalarSolver(geometry, config, false), flow(config->GetFluidProblem()) { + SU2_ZONE_SCOPED /*--- Dimension of the problem --> temperature is the only conservative variable ---*/ @@ -173,6 +174,7 @@ CHeatSolver::CHeatSolver(CGeometry *geometry, CConfig *config, unsigned short iM void CHeatSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED SU2_OMP_SAFE_GLOBAL_ACCESS(config->SetGlobalParam(config->GetKind_Solver(), RunTime_EqSystem);) CommonPreprocessing(geometry, config, Output); @@ -190,6 +192,7 @@ void CHeatSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, void CHeatSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED string restart_filename = config->GetSolution_FileName(); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -278,6 +281,7 @@ void CHeatSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig * void CHeatSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED /*--- For solid heat transfer there is no convection. ---*/ if (!flow) return; CScalarSolver::Upwind_Residual(geometry, solver_container, numerics_container, config, iMesh); @@ -285,6 +289,7 @@ void CHeatSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_containe void CHeatSolver::Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep) { + SU2_ZONE_SCOPED /*--- For fluid problems the viscous residual is included in the convective residual. ---*/ if (flow) return; const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -317,6 +322,7 @@ void CHeatSolver::Viscous_Residual(CGeometry *geometry, CSolver **solver_contain void CHeatSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED /*--- Regular source terms go here. ---*/ /*--- ... ---*/ @@ -330,6 +336,7 @@ void CHeatSolver::Source_Residual(CGeometry *geometry, CSolver **solver_containe void CHeatSolver::Set_Heatflux_Areas(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -390,6 +397,7 @@ void CHeatSolver::Set_Heatflux_Areas(CGeometry *geometry, CConfig *config) { void CHeatSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const auto Marker_Tag = config->GetMarker_All_TagBound(val_marker); su2double Twall = config->GetIsothermal_Temperature(Marker_Tag) / config->GetTemperature_Ref(); @@ -407,6 +415,7 @@ void CHeatSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_conta void CHeatSolver::BC_HeatFlux_Wall(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED const auto Marker_Tag = config->GetMarker_All_TagBound(val_marker); const bool IsPyCustom = config->GetMarker_All_PyCustom(val_marker); @@ -434,6 +443,7 @@ void CHeatSolver::BC_HeatFlux_Wall(CGeometry* geometry, CSolver** solver_contain void CHeatSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED if (!flow) return; const bool viscous = config->GetViscous(); @@ -494,6 +504,7 @@ void CHeatSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNum void CHeatSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED if (!flow) return; const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -548,6 +559,7 @@ void CHeatSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, } void CHeatSolver::BC_ConjugateHeat_Interface(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const su2double Temperature_Ref = config->GetTemperature_Ref(); @@ -612,6 +624,7 @@ void CHeatSolver::BC_ConjugateHeat_Interface(CGeometry *geometry, CSolver **solv } void CHeatSolver::Heat_Fluxes(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + SU2_ZONE_SCOPED unsigned long iPointNormal; unsigned short Boundary, Monitoring; @@ -726,6 +739,7 @@ void CHeatSolver::Heat_Fluxes(CGeometry *geometry, CSolver **solver_container, C void CHeatSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned long Iteration) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool time_stepping = (config->GetTime_Marching() == TIME_MARCHING::TIME_STEPPING); @@ -935,6 +949,7 @@ void CHeatSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, } void CHeatSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long TimeIter) { + SU2_ZONE_SCOPED const bool restart = (config->GetRestart() || config->GetRestart_Flow()); const bool dual_time = ((config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_1ST) || @@ -983,6 +998,7 @@ void CHeatSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_co void CHeatSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED if (flow) { CScalarSolver::SetResidual_DualTime(geometry, solver_container, config, iRKStep, iMesh, RunTime_EqSystem); return; diff --git a/SU2_CFD/src/solvers/CIncEulerSolver.cpp b/SU2_CFD/src/solvers/CIncEulerSolver.cpp index 5ba375e74896..b7896ae4380d 100644 --- a/SU2_CFD/src/solvers/CIncEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CIncEulerSolver.cpp @@ -40,6 +40,7 @@ CIncEulerSolver::CIncEulerSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh, const bool navier_stokes) : CFVMFlowSolverBase(*geometry, *config) { + SU2_ZONE_SCOPED /*--- Based on the navier_stokes boolean, determine if this constructor is * being called by itself, or by its derived class CIncNSSolver. ---*/ @@ -228,11 +229,13 @@ CIncEulerSolver::CIncEulerSolver(CGeometry *geometry, CConfig *config, unsigned } CIncEulerSolver::~CIncEulerSolver() { + SU2_ZONE_SCOPED for(auto& model : FluidModel) delete model; } void CIncEulerSolver::SetNondimensionalization(CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED su2double Temperature_FreeStream = 0.0, ModVel_FreeStream = 0.0,Energy_FreeStream = 0.0, ModVel_FreeStreamND = 0.0, Omega_FreeStream = 0.0, Omega_FreeStreamND = 0.0, Viscosity_FreeStream = 0.0, @@ -927,6 +930,7 @@ void CIncEulerSolver::SetNondimensionalization(CConfig *config, unsigned short i } void CIncEulerSolver::SetReferenceValues(const CConfig& config) { + SU2_ZONE_SCOPED /*--- Evaluate reference values for non-dimensionalization. For dimensional or non-dim based on initial values, use the far-field state (inf). For a custom non-dim based @@ -956,6 +960,7 @@ void CIncEulerSolver::SetReferenceValues(const CConfig& config) { void CIncEulerSolver::CommonPreprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool center = (config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED); @@ -1015,6 +1020,7 @@ void CIncEulerSolver::CommonPreprocessing(CGeometry *geometry, CSolver **solver_ void CIncEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED const auto InnerIter = config->GetInnerIter(); const bool muscl = config->GetMUSCL_Flow() && (iMesh == MESH_0); const bool center = (config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED); @@ -1047,6 +1053,7 @@ void CIncEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_contai } unsigned long CIncEulerSolver::SetPrimitive_Variables(CSolver **solver_container, const CConfig *config) { + SU2_ZONE_SCOPED unsigned long iPoint, nonPhysicalPoints = 0; @@ -1072,6 +1079,7 @@ unsigned long CIncEulerSolver::SetPrimitive_Variables(CSolver **solver_container void CIncEulerSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned long Iteration) { + SU2_ZONE_SCOPED /*--- Define an object to compute the speed of sound. ---*/ struct SoundSpeed { @@ -1126,6 +1134,7 @@ void CIncEulerSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_contain void CIncEulerSolver::Centered_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[CONV_TERM + omp_get_thread_num()*MAX_TERMS]; @@ -1221,6 +1230,7 @@ void CIncEulerSolver::Centered_Residual(CGeometry *geometry, CSolver **solver_co void CIncEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[CONV_TERM + omp_get_thread_num()*MAX_TERMS]; @@ -1390,6 +1400,7 @@ void CIncEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_cont void CIncEulerSolver::ComputeConsistentExtrapolation(CFluidModel* fluidModel, unsigned short nDim, const su2double* scalar, su2double* primitive) { + SU2_ZONE_SCOPED const CIncEulerVariable::CIndices prim_idx(nDim, 0); const su2double enthalpy = primitive[prim_idx.Enthalpy()]; fluidModel->SetTDState_h(enthalpy, scalar); @@ -1400,6 +1411,7 @@ void CIncEulerSolver::ComputeConsistentExtrapolation(CFluidModel* fluidModel, un void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED /*--- Pick one numerics object per thread. ---*/ CNumerics* numerics = numerics_container[SOURCE_FIRST_TERM + omp_get_thread_num()*MAX_TERMS]; @@ -1874,6 +1886,7 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont void CIncEulerSolver::Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED /* This method should be used to call any new source terms for a particular problem*/ /* This method calls the new child class in CNumerics, where the new source term should be implemented. */ @@ -1887,6 +1900,7 @@ void CIncEulerSolver::Source_Template(CGeometry *geometry, CSolver **solver_cont } void CIncEulerSolver::SetMax_Eigenvalue(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Define an object to compute the speed of sound. ---*/ struct SoundSpeed { @@ -1907,6 +1921,7 @@ void CIncEulerSolver::SetMax_Eigenvalue(CGeometry *geometry, const CConfig *conf } void CIncEulerSolver::SetCentered_Dissipation_Sensor(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Define an object for the sensor variable, density. ---*/ struct SensVar { @@ -1923,6 +1938,7 @@ void CIncEulerSolver::SetCentered_Dissipation_Sensor(CGeometry *geometry, const template FORCEINLINE void CIncEulerSolver::Explicit_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep) { + SU2_ZONE_SCOPED struct Precond { const CIncEulerSolver* solver; su2activematrix matrix; @@ -1949,22 +1965,26 @@ FORCEINLINE void CIncEulerSolver::Explicit_Iteration(CGeometry *geometry, CSolve void CIncEulerSolver::ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep) { + SU2_ZONE_SCOPED Explicit_Iteration(geometry, solver_container, config, iRKStep); } void CIncEulerSolver::ClassicalRK4_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep) { + SU2_ZONE_SCOPED Explicit_Iteration(geometry, solver_container, config, iRKStep); } void CIncEulerSolver::ExplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + SU2_ZONE_SCOPED Explicit_Iteration(geometry, solver_container, config, 0); } void CIncEulerSolver::PrepareImplicitIteration(CGeometry *geometry, CSolver**, CConfig *config) { + SU2_ZONE_SCOPED struct IncPrec { const CIncEulerSolver* solver; @@ -1984,12 +2004,14 @@ void CIncEulerSolver::PrepareImplicitIteration(CGeometry *geometry, CSolver**, C } void CIncEulerSolver::CompleteImplicitIteration(CGeometry *geometry, CSolver**, CConfig *config) { + SU2_ZONE_SCOPED CompleteImplicitIteration_impl(geometry, config); } void CIncEulerSolver::SetBeta_Parameter(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED static su2double MaxVel2; const su2double epsilon2_default = 4.1; @@ -2031,6 +2053,7 @@ void CIncEulerSolver::SetBeta_Parameter(CGeometry *geometry, CSolver **solver_co void CIncEulerSolver::SetRangePressure(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED static su2double MinP, MaxP; if (iMesh == MESH_0) { @@ -2067,6 +2090,7 @@ void CIncEulerSolver::SetRangePressure(CGeometry *geometry, CSolver **solver_con void CIncEulerSolver::SetPreconditioner(const CConfig *config, unsigned long iPoint, su2double delta, su2activematrix& Preconditioner) const { + SU2_ZONE_SCOPED unsigned short iDim, jDim, iVar, jVar; @@ -2179,6 +2203,7 @@ void CIncEulerSolver::SetPreconditioner(const CConfig *config, unsigned long iPo void CIncEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim; unsigned long iVertex, iPoint, Point_Normal; @@ -2318,6 +2343,7 @@ void CIncEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_contain void CIncEulerSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim; unsigned long iVertex, iPoint; unsigned long Point_Normal; @@ -2581,6 +2607,7 @@ void CIncEulerSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, void CIncEulerSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iDim; unsigned long iVertex, iPoint, Point_Normal; su2double *V_outlet, *V_domain, P_Outlet = 0.0, P_domain; @@ -2788,6 +2815,7 @@ void CIncEulerSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, void CIncEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep, unsigned short iMesh, unsigned short RunTime_EqSystem) { + SU2_ZONE_SCOPED /*--- Local variables ---*/ @@ -3018,6 +3046,7 @@ void CIncEulerSolver::SetResidual_DualTime(CGeometry *geometry, CSolver **solver } void CIncEulerSolver::GetOutlet_Properties(CGeometry *geometry, CConfig *config, unsigned short iMesh, bool Output) { + SU2_ZONE_SCOPED unsigned short iDim, iMarker; unsigned long iVertex, iPoint; @@ -3229,6 +3258,7 @@ void CIncEulerSolver::GetOutlet_Properties(CGeometry *geometry, CConfig *config, } void CIncEulerSolver::PrintVerificationError(const CConfig *config) const { + SU2_ZONE_SCOPED if ((rank != MASTER_NODE) || (MGLevel != MESH_0)) return; @@ -3269,6 +3299,7 @@ void CIncEulerSolver::PrintVerificationError(const CConfig *config) const { } void CIncEulerSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Adjust the number of solution variables in the restart. We always carry a space in nVar for the energy equation in the solver, but we only @@ -3288,6 +3319,7 @@ void CIncEulerSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConf } void CIncEulerSolver::SetFreeStream_Solution(const CConfig *config){ + SU2_ZONE_SCOPED SU2_OMP_FOR_STAT(omp_chunk_size) for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++){ nodes->SetSolution(iPoint,0, Pressure_Inf); @@ -3301,6 +3333,7 @@ void CIncEulerSolver::SetFreeStream_Solution(const CConfig *config){ } unsigned long CIncEulerSolver::RegisterSolutionExtra(bool input, const CConfig* config) { + SU2_ZONE_SCOPED if (config->GetKind_Streamwise_Periodic() == ENUM_STREAMWISE_PERIODIC::MASSFLOW) { if (input) AD::RegisterInput(SPvals.Streamwise_Periodic_PressureDrop); else AD::RegisterOutput(SPvalsUpdated.Streamwise_Periodic_PressureDrop); @@ -3310,12 +3343,14 @@ unsigned long CIncEulerSolver::RegisterSolutionExtra(bool input, const CConfig* } void CIncEulerSolver::SetAdjoint_SolutionExtra(const su2activevector& adj_sol, const CConfig* config) { + SU2_ZONE_SCOPED if (config->GetKind_Streamwise_Periodic() == ENUM_STREAMWISE_PERIODIC::MASSFLOW) { SU2_TYPE::SetDerivative(SPvalsUpdated.Streamwise_Periodic_PressureDrop, SU2_TYPE::GetValue(adj_sol[0])); } } void CIncEulerSolver::ExtractAdjoint_SolutionExtra(su2activevector& adj_sol, const CConfig* config) { + SU2_ZONE_SCOPED if (config->GetKind_Streamwise_Periodic() == ENUM_STREAMWISE_PERIODIC::MASSFLOW) { adj_sol[0] = SU2_TYPE::GetDerivative(SPvals.Streamwise_Periodic_PressureDrop); } diff --git a/SU2_CFD/src/solvers/CIncNSSolver.cpp b/SU2_CFD/src/solvers/CIncNSSolver.cpp index dc02968fda4f..92a5ba01ba4a 100644 --- a/SU2_CFD/src/solvers/CIncNSSolver.cpp +++ b/SU2_CFD/src/solvers/CIncNSSolver.cpp @@ -37,6 +37,7 @@ template class CFVMFlowSolverBaseGetInnerIter(); const bool muscl = config->GetMUSCL_Flow() && (iMesh == MESH_0); @@ -118,6 +120,7 @@ void CIncNSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container void CIncNSSolver::GetStreamwise_Periodic_Properties(const CGeometry *geometry, CConfig *config, const unsigned short iMesh) { + SU2_ZONE_SCOPED /*---------------------------------------------------------------------------------------------*/ // 1. Evaluate massflow, area avg density & Temperature and Area at streamwise periodic outlet. @@ -233,6 +236,7 @@ void CIncNSSolver::GetStreamwise_Periodic_Properties(const CGeometry *geometry, void CIncNSSolver::Compute_Streamwise_Periodic_Recovered_Values(CConfig *config, const CGeometry *geometry, const unsigned short iMesh) { + SU2_ZONE_SCOPED const bool energy = (config->GetEnergy_Equation() && config->GetStreamwise_Periodic_Temperature()); const auto InnerIter = config->GetInnerIter(); @@ -273,6 +277,7 @@ void CIncNSSolver::Compute_Streamwise_Periodic_Recovered_Values(CConfig *config, void CIncNSSolver::Viscous_Residual(unsigned long iEdge, CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config) { + SU2_ZONE_SCOPED const bool energy_multicomponent = config->GetKind_FluidModel() == FLUID_MIXTURE && config->GetEnergy_Equation(); /*--- Contribution to heat flux due to enthalpy diffusion for multicomponent and reacting flows ---*/ @@ -287,6 +292,7 @@ void CIncNSSolver::Viscous_Residual(unsigned long iEdge, CGeometry *geometry, CS void CIncNSSolver::Compute_Enthalpy_Diffusion(unsigned long iEdge, CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, const int n_species, const bool implicit) { + SU2_ZONE_SCOPED CVariable* speciesNodes = solver_container[SPECIES_SOL]->GetNodes(); /*--- Points in edge ---*/ @@ -356,6 +362,7 @@ void CIncNSSolver::Compute_Enthalpy_Diffusion(unsigned long iEdge, CGeometry* ge } unsigned long CIncNSSolver::SetPrimitive_Variables(CSolver **solver_container, const CConfig *config) { + SU2_ZONE_SCOPED unsigned long iPoint, nonPhysicalPoints = 0; su2double eddy_visc = 0.0, turb_ke = 0.0, DES_LengthScale = 0.0; @@ -409,6 +416,7 @@ unsigned long CIncNSSolver::SetPrimitive_Variables(CSolver **solver_container, c void CIncNSSolver::BC_Wall_Generic(const CGeometry *geometry, const CConfig *config, unsigned short val_marker, unsigned short kind_boundary) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool energy = config->GetEnergy_Equation(); @@ -580,23 +588,27 @@ void CIncNSSolver::BC_Wall_Generic(const CGeometry *geometry, const CConfig *con void CIncNSSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver**, CNumerics*, CNumerics*, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_Wall_Generic(geometry, config, val_marker, HEAT_FLUX); } void CIncNSSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver**, CNumerics*, CNumerics*, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_Wall_Generic(geometry, config, val_marker, ISOTHERMAL); } void CIncNSSolver::BC_HeatTransfer_Wall(const CGeometry *geometry, const CConfig *config, const unsigned short val_marker) { + SU2_ZONE_SCOPED BC_Wall_Generic(geometry, config, val_marker, HEAT_TRANSFER); } void CIncNSSolver::BC_ConjugateHeat_Interface(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const su2double Temperature_Ref = config->GetTemperature_Ref(); const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -704,6 +716,7 @@ void CIncNSSolver::BC_ConjugateHeat_Interface(CGeometry *geometry, CSolver **sol } void CIncNSSolver::SetTau_Wall_WF(CGeometry *geometry, CSolver **solver_container, const CConfig *config) { + SU2_ZONE_SCOPED /*--- The wall function implemented herein is based on Nichols and Nelson, AIAA J. v32 n6 2004. ---*/ unsigned long notConvergedCounter = 0; /*--- Counts the number of wall cells that are not converged ---*/ diff --git a/SU2_CFD/src/solvers/CMeshSolver.cpp b/SU2_CFD/src/solvers/CMeshSolver.cpp index 94792e9c1831..4d51042c2665 100644 --- a/SU2_CFD/src/solvers/CMeshSolver.cpp +++ b/SU2_CFD/src/solvers/CMeshSolver.cpp @@ -34,6 +34,7 @@ using namespace GeometryToolbox; CMeshSolver::CMeshSolver(CGeometry *geometry, CConfig *config) : CFEASolver(LINEAR_SOLVER_MODE::MESH_DEFORM) { + SU2_ZONE_SCOPED /*--- Initialize some booleans that determine the kind of problem at hand. ---*/ @@ -170,6 +171,7 @@ CMeshSolver::CMeshSolver(CGeometry *geometry, CConfig *config) : CFEASolver(LINE } void CMeshSolver::SetMinMaxVolume(CGeometry *geometry, CConfig *config, bool updated) { + SU2_ZONE_SCOPED /*--- This routine is for post processing, it does not need to be recorded. ---*/ const bool wasActive = AD::BeginPassive(); @@ -282,6 +284,7 @@ void CMeshSolver::SetMinMaxVolume(CGeometry *geometry, CConfig *config, bool upd } void CMeshSolver::SetWallDistance(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED /*--- Initialize min and max distance ---*/ @@ -411,6 +414,7 @@ void CMeshSolver::SetWallDistance(CGeometry *geometry, CConfig *config) { } void CMeshSolver::SetMesh_Stiffness(CNumerics **numerics, CConfig *config){ + SU2_ZONE_SCOPED if (stiffness_set) return; @@ -468,6 +472,7 @@ void CMeshSolver::SetMesh_Stiffness(CNumerics **numerics, CConfig *config){ } void CMeshSolver::DeformMesh(CGeometry **geometry, CNumerics **numerics, CConfig *config){ + SU2_ZONE_SCOPED if (multizone) nodes->Set_BGSSolution_k(); @@ -535,6 +540,7 @@ void CMeshSolver::DeformMesh(CGeometry **geometry, CNumerics **numerics, CConfig } void CMeshSolver::UpdateGridCoord(CGeometry *geometry, const CConfig *config){ + SU2_ZONE_SCOPED /*--- Update the grid coordinates using the solution of the linear system ---*/ @@ -561,6 +567,7 @@ void CMeshSolver::UpdateGridCoord(CGeometry *geometry, const CConfig *config){ } void CMeshSolver::ComputeGridVelocity_FromBoundary(CGeometry **geometry, CNumerics **numerics, CConfig *config){ + SU2_ZONE_SCOPED if (config->GetnZone() == 1) SU2_MPI::Error("It is not possible to compute grid velocity from boundary velocity for single zone problems.\n" @@ -610,6 +617,7 @@ void CMeshSolver::ComputeGridVelocity_FromBoundary(CGeometry **geometry, CNumeri } void CMeshSolver::ComputeGridVelocity(CGeometry **geometry, const CConfig *config) const { + SU2_ZONE_SCOPED /*--- Compute the velocity of each node. ---*/ @@ -647,6 +655,7 @@ void CMeshSolver::ComputeGridVelocity(CGeometry **geometry, const CConfig *confi } void CMeshSolver::BC_Deforming(CGeometry *geometry, const CConfig *config, unsigned short val_marker, bool velocity){ + SU2_ZONE_SCOPED for (auto iVertex = 0ul; iVertex < geometry->nVertex[val_marker]; iVertex++) { const auto iPoint = geometry->vertex[val_marker][iVertex]->GetNode(); @@ -663,6 +672,7 @@ void CMeshSolver::BC_Deforming(CGeometry *geometry, const CConfig *config, unsig } void CMeshSolver::SetBoundaryDisplacements(CGeometry *geometry, CConfig *config, bool velocity_transfer){ + SU2_ZONE_SCOPED /* Surface motions are not applied during discrete adjoint runs as the corresponding * boundary displacements are computed when loading the primal solution, and it @@ -749,12 +759,14 @@ void CMeshSolver::SetBoundaryDisplacements(CGeometry *geometry, CConfig *config, } void CMeshSolver::SetDualTime_Mesh(){ + SU2_ZONE_SCOPED nodes->Set_Solution_time_n1(); nodes->Set_Solution_time_n(); } void CMeshSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Read the restart data from either an ASCII or binary SU2 file. ---*/ @@ -857,6 +869,7 @@ void CMeshSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig * } void CMeshSolver::RestartOldGeometry(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- This function is intended for dual time simulations ---*/ @@ -954,6 +967,7 @@ void CMeshSolver::RestartOldGeometry(CGeometry *geometry, const CConfig *config) } void CMeshSolver::Surface_Pitching(CGeometry *geometry, CConfig *config, unsigned long iter) { + SU2_ZONE_SCOPED su2double deltaT, time_new, time_old, Lref; su2double Center[3] = {0.0}, VarCoord[3] = {0.0}, Omega[3] = {0.0}, Ampl[3] = {0.0}, Phase[3] = {0.0}; @@ -1087,6 +1101,7 @@ void CMeshSolver::Surface_Pitching(CGeometry *geometry, CConfig *config, unsigne } void CMeshSolver::Surface_Rotating(CGeometry *geometry, CConfig *config, unsigned long iter) { + SU2_ZONE_SCOPED su2double deltaT, time_new, time_old, Lref; su2double VarCoordAbs[3] = {0.0}; @@ -1268,6 +1283,7 @@ void CMeshSolver::Surface_Rotating(CGeometry *geometry, CConfig *config, unsigne } void CMeshSolver::Surface_Plunging(CGeometry *geometry, CConfig *config, unsigned long iter) { + SU2_ZONE_SCOPED su2double deltaT, time_new, time_old, Lref; su2double Center[3] = {0.0}, VarCoord[3] = {0.0}, Omega[3] = {0.0}, Ampl[3] = {0.0}; @@ -1395,6 +1411,7 @@ void CMeshSolver::Surface_Plunging(CGeometry *geometry, CConfig *config, unsigne } void CMeshSolver::Surface_Translating(CGeometry *geometry, CConfig *config, unsigned long iter) { + SU2_ZONE_SCOPED su2double deltaT, time_new, time_old; su2double Center[3] = {0.0}, VarCoord[3] = {0.0}; diff --git a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp index 0d76dadf59e7..35ced04d3faa 100644 --- a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp @@ -35,6 +35,7 @@ CNEMOEulerSolver::CNEMOEulerSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh, const bool navier_stokes) : CFVMFlowSolverBase(*geometry, *config) { + SU2_ZONE_SCOPED /*--- Based on the navier_stokes boolean, determine if this constructor is * being called by itself, or by its derived class CNEMONSSolver. ---*/ @@ -229,6 +230,7 @@ CNEMOEulerSolver::CNEMOEulerSolver(CGeometry *geometry, CConfig *config, } CNEMOEulerSolver::~CNEMOEulerSolver() { + SU2_ZONE_SCOPED delete node_infty; delete FluidModel; @@ -237,6 +239,7 @@ CNEMOEulerSolver::~CNEMOEulerSolver() { void CNEMOEulerSolver::CommonPreprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool center = (config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED); @@ -287,6 +290,7 @@ void CNEMOEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_conta CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED const unsigned long InnerIter = config->GetInnerIter(); const bool muscl = config->GetMUSCL_Flow() && (iMesh == MESH_0); const bool limiter = (config->GetKind_SlopeLimit_Flow() != LIMITER::NONE) && (InnerIter <= config->GetLimiterIter()); @@ -315,6 +319,7 @@ void CNEMOEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_conta } unsigned long CNEMOEulerSolver::SetPrimitive_Variables(CSolver **solver_container, CConfig *config, bool Output) { + SU2_ZONE_SCOPED unsigned long nonPhysicalPoints = 0; bool nonphysical = true; @@ -340,6 +345,7 @@ unsigned long CNEMOEulerSolver::SetPrimitive_Variables(CSolver **solver_containe void CNEMOEulerSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned long Iteration) { + SU2_ZONE_SCOPED /*--- Define an object to compute the speed of sound. ---*/ struct SoundSpeed { @@ -390,6 +396,7 @@ void CNEMOEulerSolver::SetTime_Step(CGeometry *geometry, CSolver **solver_contai } void CNEMOEulerSolver::SetMax_Eigenvalue(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED /*--- Define an object to compute the speed of sound. ---*/ struct SoundSpeed { @@ -411,6 +418,7 @@ void CNEMOEulerSolver::SetMax_Eigenvalue(CGeometry *geometry, CConfig *config) { void CNEMOEulerSolver::Centered_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[CONV_TERM]; @@ -460,6 +468,7 @@ void CNEMOEulerSolver::Centered_Residual(CGeometry *geometry, CSolver **solver_c void CNEMOEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED /*--- Set booleans based on config settings ---*/ const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -641,6 +650,7 @@ void CNEMOEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_con su2double CNEMOEulerSolver::ComputeConsistentExtrapolation(CNEMOGas *fluidmodel, unsigned short nSpecies, su2double *V, su2double* dPdU, su2double* dTdU, su2double* dTvedU, su2double* val_eves, su2double *val_Cvves) { + SU2_ZONE_SCOPED //NOTE: TODO - this doesnt compute Cvves/ dPdU,etc.yet @@ -672,6 +682,7 @@ su2double CNEMOEulerSolver::ComputeConsistentExtrapolation(CNEMOGas *fluidmodel, } void CNEMOEulerSolver::RecomputeConservativeVector(su2double *U, const su2double *V) const { + SU2_ZONE_SCOPED /*---Useful variables ---*/ vector rhos; @@ -708,6 +719,7 @@ void CNEMOEulerSolver::RecomputeConservativeVector(su2double *U, const su2double } bool CNEMOEulerSolver::CheckNonPhys(const su2double *V) const { + SU2_ZONE_SCOPED /*--- Set booleans ---*/ bool nonPhys = false; @@ -741,6 +753,7 @@ bool CNEMOEulerSolver::CheckNonPhys(const su2double *V) const { } void CNEMOEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED /*--- Assign booleans ---*/ bool err = false; @@ -895,22 +908,26 @@ void CNEMOEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_con void CNEMOEulerSolver::ExplicitRK_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep) { + SU2_ZONE_SCOPED Explicit_Iteration(geometry, solver_container, config, iRKStep); } void CNEMOEulerSolver::ClassicalRK4_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iRKStep) { + SU2_ZONE_SCOPED Explicit_Iteration(geometry, solver_container, config, iRKStep); } void CNEMOEulerSolver::ExplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + SU2_ZONE_SCOPED Explicit_Iteration(geometry, solver_container, config, 0); } void CNEMOEulerSolver::PrepareImplicitIteration(CGeometry *geometry, CSolver**, CConfig *config) { + SU2_ZONE_SCOPED struct DummyPrec { const bool active = false; @@ -921,11 +938,13 @@ void CNEMOEulerSolver::PrepareImplicitIteration(CGeometry *geometry, CSolver**, } void CNEMOEulerSolver::CompleteImplicitIteration(CGeometry *geometry, CSolver**, CConfig *config) { + SU2_ZONE_SCOPED CompleteImplicitIteration_impl(geometry, config); } void CNEMOEulerSolver::ComputeUnderRelaxationFactor(const CConfig *config) { + SU2_ZONE_SCOPED /* Loop over the solution update given by relaxing the linear system for this nonlinear iteration. */ @@ -980,6 +999,7 @@ void CNEMOEulerSolver::ComputeUnderRelaxationFactor(const CConfig *config) { } void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED su2double Temperature_FreeStream = 0.0, Temperature_ve_FreeStream = 0.0, Mach2Vel_FreeStream = 0.0, @@ -1385,6 +1405,7 @@ void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short } void CNEMOEulerSolver::SetReferenceValues(const CConfig& config) { + SU2_ZONE_SCOPED DynamicPressureRef = 0.5 * Density_Inf * GeometryToolbox::SquaredNorm(nDim, Velocity_Inf); @@ -1398,6 +1419,7 @@ void CNEMOEulerSolver::SetReferenceValues(const CConfig& config) { void CNEMOEulerSolver::BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED /*--- Allocate the necessary vector structures ---*/ su2double Normal[MAXNDIM] = {0.0}, UnitNormal[MAXNDIM] = {0.0}; @@ -1499,6 +1521,7 @@ void CNEMOEulerSolver::BC_Far_Field(CGeometry *geometry, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED /*--- Allocate arrays ---*/ su2double Normal[MAXNDIM] = {0.0}; @@ -1612,6 +1635,7 @@ void CNEMOEulerSolver::BC_Far_Field(CGeometry *geometry, void CNEMOEulerSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED SU2_MPI::Error("BC_INLET: Not operational in NEMO.", CURRENT_FUNCTION); unsigned short RHO_INDEX, nSpecies; @@ -1893,6 +1917,7 @@ void CNEMOEulerSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, void CNEMOEulerSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED su2double UnitNormal[MAXNDIM] = {0.0}; vector rhos; @@ -2145,6 +2170,7 @@ void CNEMOEulerSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container void CNEMOEulerSolver::BC_Supersonic_Inlet( CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED /*--- Supersonic inlet flow: there are no outgoing characteristics, so all flow variables can be imposed at the inlet. @@ -2289,6 +2315,7 @@ void CNEMOEulerSolver::BC_Supersonic_Inlet( void CNEMOEulerSolver::BC_Supersonic_Outlet( CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED /*--- Supersonic outlet flow: there are no ingoing characteristics, so all flow variables can should be interpolated from the domain. ---*/ @@ -2346,6 +2373,7 @@ void CNEMOEulerSolver::BC_Supersonic_Outlet( } void CNEMOEulerSolver::SetPressureDiffusionSensor(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED const auto P_INDEX = nodes->GetPIndex(); diff --git a/SU2_CFD/src/solvers/CNEMONSSolver.cpp b/SU2_CFD/src/solvers/CNEMONSSolver.cpp index 44ede662420f..3d368ca52f62 100644 --- a/SU2_CFD/src/solvers/CNEMONSSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMONSSolver.cpp @@ -37,6 +37,7 @@ template class CFVMFlowSolverBase CNEMONSSolver::CNEMONSSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CNEMOEulerSolver(geometry, config, iMesh, true) { + SU2_ZONE_SCOPED Viscosity_Inf = config->GetViscosity_FreeStreamND(); Prandtl_Lam = config->GetPrandtl_Lam(); @@ -56,6 +57,7 @@ CNEMONSSolver::CNEMONSSolver(CGeometry *geometry, CConfig *config, unsigned shor void CNEMONSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED const auto InnerIter = config->GetInnerIter(); const bool limiter = (config->GetKind_SlopeLimit_Flow() != LIMITER::NONE) && (InnerIter <= config->GetLimiterIter()); @@ -108,6 +110,7 @@ void CNEMONSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_containe } unsigned long CNEMONSSolver::SetPrimitive_Variables(CSolver **solver_container,CConfig *config, bool Output) { + SU2_ZONE_SCOPED /*--- Number of non-physical points, local to the thread, needs * further reduction if function is called in parallel ---*/ @@ -144,6 +147,7 @@ unsigned long CNEMONSSolver::SetPrimitive_Variables(CSolver **solver_container,C } void CNEMONSSolver::SetPrimitive_Gradient_GG(CGeometry *geometry, const CConfig *config, bool reconstruction) { + SU2_ZONE_SCOPED auto& gradient = reconstruction ? nodes->GetGradient_Reconstruction() : nodes->GetGradient_Primitive(); const auto comm = reconstruction? MPI_QUANTITIES::PRIMITIVE_GRAD_REC : MPI_QUANTITIES::PRIMITIVE_GRADIENT; @@ -174,6 +178,7 @@ void CNEMONSSolver::Viscous_Residual(CGeometry *geometry, CNumerics **numerics_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); CNumerics* numerics = numerics_container[VISC_TERM]; @@ -245,6 +250,7 @@ void CNEMONSSolver::BC_HeatFluxNonCatalytic_Wall(CGeometry *geometry, CNumerics *sour_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED /*--- Local variables ---*/ const auto Marker_Tag = config->GetMarker_All_TagBound(val_marker); @@ -327,6 +333,7 @@ void CNEMONSSolver::BC_HeatFlux_Wall(CGeometry *geometry, CNumerics *sour_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED bool catalytic = config->GetCatalytic_Wall(val_marker); @@ -344,6 +351,7 @@ void CNEMONSSolver::BC_HeatFluxCatalytic_Wall(CGeometry *geometry, CNumerics *sour_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED SU2_MPI::Error("BC_HEATFLUX with catalytic wall: Not operational in NEMO.", CURRENT_FUNCTION); //TODO: SCALE WITH EDDY VISC @@ -508,6 +516,7 @@ void CNEMONSSolver::BC_HeatFluxCatalytic_Wall(CGeometry *geometry, void CNEMONSSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *sour_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED bool catalytic = config->GetCatalytic_Wall(val_marker); @@ -525,6 +534,7 @@ void CNEMONSSolver::BC_IsothermalNonCatalytic_Wall(CGeometry *geometry, CNumerics *sour_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool ionization = config->GetIonization(); @@ -649,6 +659,7 @@ void CNEMONSSolver::BC_IsothermalCatalytic_Wall(CGeometry *geometry, CNumerics *sour_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED /*--- Call standard isothermal BC to apply no-slip and energy b.c.'s ---*/ BC_IsothermalNonCatalytic_Wall(geometry, solver_container, conv_numerics, @@ -844,6 +855,7 @@ void CNEMONSSolver::BC_Smoluchowski_Maxwell(CGeometry *geometry, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool ionization = config->GetIonization(); @@ -990,6 +1002,7 @@ void CNEMONSSolver::BC_Smoluchowski_Maxwell(CGeometry *geometry, } void CNEMONSSolver::SetTau_Wall_WF(CGeometry *geometry, CSolver **solver_container, const CConfig *config) { + SU2_ZONE_SCOPED SU2_MPI::Error("Wall Functions not yet operational in NEMO.", CURRENT_FUNCTION); } diff --git a/SU2_CFD/src/solvers/CNSSolver.cpp b/SU2_CFD/src/solvers/CNSSolver.cpp index bb2dfc268d21..83bbca46256f 100644 --- a/SU2_CFD/src/solvers/CNSSolver.cpp +++ b/SU2_CFD/src/solvers/CNSSolver.cpp @@ -38,6 +38,7 @@ template class CFVMFlowSolverBase; CNSSolver::CNSSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CEulerSolver(geometry, config, iMesh, true) { + SU2_ZONE_SCOPED /*--- This constructor only allocates/inits what is extra to CEulerSolver. ---*/ @@ -69,6 +70,7 @@ CNSSolver::CNSSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) void CNSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED const auto InnerIter = config->GetInnerIter(); const bool muscl = config->GetMUSCL_Flow() && (iMesh == MESH_0); @@ -126,6 +128,7 @@ void CNSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, C } unsigned long CNSSolver::SetPrimitive_Variables(CSolver **solver_container, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Number of non-physical points, local to the thread, needs * further reduction if function is called in parallel ---*/ @@ -172,11 +175,13 @@ unsigned long CNSSolver::SetPrimitive_Variables(CSolver **solver_container, cons void CNSSolver::Viscous_Residual(unsigned long iEdge, CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config) { + SU2_ZONE_SCOPED Viscous_Residual_impl(iEdge, geometry, solver_container, numerics, config); } void CNSSolver::Buffet_Monitoring(const CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED unsigned long iVertex, iMarker; unsigned short iMarker_Monitoring; @@ -265,6 +270,7 @@ void CNSSolver::Buffet_Monitoring(const CGeometry *geometry, const CConfig *conf } void CNSSolver::Evaluate_ObjFunc(const CConfig *config, CSolver**) { + SU2_ZONE_SCOPED unsigned short iMarker_Monitoring, Kind_ObjFunc; su2double Weight_ObjFunc; @@ -292,6 +298,7 @@ void CNSSolver::Evaluate_ObjFunc(const CConfig *config, CSolver**) { } void CNSSolver::SetRoe_Dissipation(CGeometry *geometry, CConfig *config){ + SU2_ZONE_SCOPED const unsigned short kind_roe_dissipation = config->GetKind_RoeLowDiss(); @@ -320,6 +327,7 @@ void CNSSolver::AddDynamicGridResidualContribution(unsigned long iPoint, unsigne su2double Area, const su2double* GridVel, su2double** Jacobian_i, su2double& Res_Conv, su2double& Res_Visc) const { + SU2_ZONE_SCOPED su2double ProjGridVel = Area * GeometryToolbox::DotProduct(nDim, GridVel, UnitNormal); @@ -411,17 +419,20 @@ void CNSSolver::AddDynamicGridResidualContribution(unsigned long iPoint, unsigne void CNSSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver**, CNumerics*, CNumerics*, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_HeatFlux_Wall_Generic(geometry, config, val_marker, HEAT_FLUX); } void CNSSolver::BC_HeatTransfer_Wall(const CGeometry *geometry, const CConfig *config, const unsigned short val_marker) { + SU2_ZONE_SCOPED BC_HeatFlux_Wall_Generic(geometry, config, val_marker, HEAT_TRANSFER); } void CNSSolver::BC_HeatFlux_Wall_Generic(const CGeometry* geometry, const CConfig* config, unsigned short val_marker, unsigned short kind_boundary) { + SU2_ZONE_SCOPED /*--- Identify the boundary by string name and get the specified wall heat flux from config as well as the wall function treatment. ---*/ @@ -580,6 +591,7 @@ su2double CNSSolver::GetCHTWallTemperature(const CConfig* config, unsigned short unsigned long iVertex, su2double thermal_conductivity, su2double dist_ij, su2double There, su2double Temperature_Ref) const { + SU2_ZONE_SCOPED /*--- Compute the normal gradient in temperature using Twall ---*/ @@ -614,6 +626,7 @@ su2double CNSSolver::GetCHTWallTemperature(const CConfig* config, unsigned short void CNSSolver::BC_Isothermal_Wall_Generic(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker, bool cht_mode) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const su2double Temperature_Ref = config->GetTemperature_Ref(); @@ -769,15 +782,18 @@ void CNSSolver::BC_Isothermal_Wall_Generic(CGeometry *geometry, CSolver **solver void CNSSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_Isothermal_Wall_Generic(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker); } void CNSSolver::BC_ConjugateHeat_Interface(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_Isothermal_Wall_Generic(geometry, solver_container, conv_numerics, nullptr, config, val_marker, true); } void CNSSolver::SetTau_Wall_WF(CGeometry *geometry, CSolver **solver_container, const CConfig *config) { + SU2_ZONE_SCOPED /*--- The wall function implemented herein is based on Nichols and Nelson, AIAA J. v32 n6 2004. ---*/ diff --git a/SU2_CFD/src/solvers/CRadP1Solver.cpp b/SU2_CFD/src/solvers/CRadP1Solver.cpp index dacf863afc13..7ec855629842 100644 --- a/SU2_CFD/src/solvers/CRadP1Solver.cpp +++ b/SU2_CFD/src/solvers/CRadP1Solver.cpp @@ -30,10 +30,12 @@ #include "../../../Common/include/toolboxes/geometry_toolbox.hpp" CRadP1Solver::CRadP1Solver() : CRadSolver() { + SU2_ZONE_SCOPED } CRadP1Solver::CRadP1Solver(CGeometry* geometry, CConfig *config) : CRadSolver(geometry, config) { + SU2_ZONE_SCOPED unsigned short iVar; unsigned short direct_diff = config->GetDirectDiff(); @@ -131,12 +133,14 @@ CRadP1Solver::CRadP1Solver(CGeometry* geometry, CConfig *config) : CRadSolver(ge } CRadP1Solver::~CRadP1Solver() { + SU2_ZONE_SCOPED delete nodes; } void CRadP1Solver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED unsigned long iPoint; @@ -160,6 +164,7 @@ void CRadP1Solver::Preprocessing(CGeometry *geometry, CSolver **solver_container } void CRadP1Solver::Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED unsigned long iPoint; su2double Energy, Temperature; @@ -189,6 +194,7 @@ void CRadP1Solver::Postprocessing(CGeometry *geometry, CSolver **solver_containe void CRadP1Solver::Viscous_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[VISC_TERM]; @@ -228,6 +234,7 @@ void CRadP1Solver::Viscous_Residual(CGeometry *geometry, CSolver **solver_contai void CRadP1Solver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED CNumerics* numerics = numerics_container[SOURCE_FIRST_TERM]; @@ -265,6 +272,7 @@ void CRadP1Solver::Source_Residual(CGeometry *geometry, CSolver **solver_contain void CRadP1Solver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iVar, jVar; unsigned long iVertex, iPoint; @@ -339,6 +347,7 @@ void CRadP1Solver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_cont } void CRadP1Solver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iVar, jVar; unsigned long iVertex, iPoint; @@ -414,6 +423,7 @@ void CRadP1Solver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container, void CRadP1Solver::BC_Marshak(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED unsigned short iVar, jVar; unsigned long iVertex, iPoint; @@ -489,6 +499,7 @@ void CRadP1Solver::BC_Marshak(CGeometry *geometry, CSolver **solver_container, C void CRadP1Solver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver_container, CConfig *config) { + SU2_ZONE_SCOPED unsigned short iVar; unsigned long iPoint, IterLinSol = 0; @@ -566,6 +577,7 @@ void CRadP1Solver::ImplicitEuler_Iteration(CGeometry *geometry, CSolver **solver void CRadP1Solver::SetTime_Step(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned long Iteration) { + SU2_ZONE_SCOPED unsigned short iMarker; unsigned long iEdge, iVertex, iPoint = 0, jPoint = 0; diff --git a/SU2_CFD/src/solvers/CRadSolver.cpp b/SU2_CFD/src/solvers/CRadSolver.cpp index 9735b7c78074..0a42fba6d6f2 100644 --- a/SU2_CFD/src/solvers/CRadSolver.cpp +++ b/SU2_CFD/src/solvers/CRadSolver.cpp @@ -29,10 +29,12 @@ #include "../../include/variables/CRadVariable.hpp" CRadSolver::CRadSolver() : CSolver() { + SU2_ZONE_SCOPED } CRadSolver::CRadSolver(CGeometry* geometry, CConfig *config) : CSolver() { + SU2_ZONE_SCOPED Absorption_Coeff = config->GetAbsorption_Coeff(); Scattering_Coeff = config->GetScattering_Coeff(); @@ -42,6 +44,7 @@ CRadSolver::CRadSolver(CGeometry* geometry, CConfig *config) : CSolver() { } void CRadSolver::SetVolumetricHeatSource(CGeometry *geometry, CConfig *config) { + SU2_ZONE_SCOPED unsigned long iPoint; unsigned short iDim; @@ -72,6 +75,7 @@ void CRadSolver::SetVolumetricHeatSource(CGeometry *geometry, CConfig *config) { } void CRadSolver::LoadRestart(CGeometry **geometry, CSolver ***solver, CConfig *config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Restart the solution from file information ---*/ diff --git a/SU2_CFD/src/solvers/CSolver.cpp b/SU2_CFD/src/solvers/CSolver.cpp index 0ff0f125c1a1..5a5bf0caaffb 100644 --- a/SU2_CFD/src/solvers/CSolver.cpp +++ b/SU2_CFD/src/solvers/CSolver.cpp @@ -51,6 +51,7 @@ CSolver::CSolver(LINEAR_SOLVER_MODE linear_solver_mode) : System(linear_solver_mode) { + SU2_ZONE_SCOPED rank = SU2_MPI::GetRank(); size = SU2_MPI::GetSize(); @@ -120,6 +121,7 @@ CSolver::CSolver(LINEAR_SOLVER_MODE linear_solver_mode) : System(linear_solver_m } CSolver::~CSolver() { + SU2_ZONE_SCOPED unsigned short iVar; @@ -194,6 +196,7 @@ void CSolver::GetPeriodicCommCountAndType(const CConfig* config, unsigned short &MPI_TYPE, unsigned short &ICOUNT, unsigned short &JCOUNT) const { + SU2_ZONE_SCOPED switch (commType) { case PERIODIC_VOLUME: COUNT_PER_POINT = 1; @@ -336,6 +339,7 @@ void CSolver::InitiatePeriodicComms(CGeometry *geometry, const CConfig *config, unsigned short val_periodic_index, unsigned short commType) { + SU2_ZONE_SCOPED /*--- Check for dummy communication. ---*/ @@ -999,6 +1003,7 @@ void CSolver::CompletePeriodicComms(CGeometry *geometry, const CConfig *config, unsigned short val_periodic_index, unsigned short commType) { + SU2_ZONE_SCOPED /*--- Check for dummy communication. ---*/ @@ -1331,6 +1336,7 @@ void CSolver::GetCommCountAndType(const CConfig* config, MPI_QUANTITIES commType, unsigned short &COUNT_PER_POINT, unsigned short &MPI_TYPE) const { + SU2_ZONE_SCOPED switch (commType) { case MPI_QUANTITIES::SOLUTION: case MPI_QUANTITIES::SOLUTION_OLD: @@ -1412,6 +1418,7 @@ namespace CommHelpers { void CSolver::InitiateComms(CGeometry *geometry, const CConfig *config, MPI_QUANTITIES commType) { + SU2_ZONE_SCOPED /*--- Local variables ---*/ @@ -1554,6 +1561,7 @@ void CSolver::InitiateComms(CGeometry *geometry, void CSolver::CompleteComms(CGeometry *geometry, const CConfig *config, MPI_QUANTITIES commType) { + SU2_ZONE_SCOPED /*--- Local variables ---*/ @@ -1703,6 +1711,7 @@ void CSolver::CompleteComms(CGeometry *geometry, } void CSolver::ResetCFLAdapt() { + SU2_ZONE_SCOPED NonLinRes_Series.clear(); Old_Func = 0; New_Func = 0; @@ -1713,6 +1722,7 @@ void CSolver::ResetCFLAdapt() { void CSolver::AdaptCFLNumber(CGeometry **geometry, CSolver ***solver_container, CConfig *config) { + SU2_ZONE_SCOPED /* Adapt the CFL number on all multigrid levels using an exponential progression with under-relaxation approach. */ @@ -1951,6 +1961,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; @@ -2012,6 +2023,7 @@ void CSolver::SetResidual_RMS(const CGeometry *geometry, const CConfig *config) } void CSolver::SetResidual_BGS(const CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED if (geometry->GetMGLevel() != MESH_0) return; @@ -2054,6 +2066,7 @@ void CSolver::SetResidual_BGS(const CGeometry *geometry, const CConfig *config) } void CSolver::SetRotatingFrame_GCL(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Loop interior points ---*/ @@ -2116,6 +2129,7 @@ void CSolver::SetRotatingFrame_GCL(CGeometry *geometry, const CConfig *config) { } void CSolver::SetAuxVar_Gradient_GG(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED const auto& solution = base_nodes->GetAuxVar(); auto& gradient = base_nodes->GetAuxVarGradient(); @@ -2125,6 +2139,7 @@ void CSolver::SetAuxVar_Gradient_GG(CGeometry *geometry, const CConfig *config) } void CSolver::SetAuxVar_Gradient_LS(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED bool weighted = true; const auto& solution = base_nodes->GetAuxVar(); @@ -2136,6 +2151,7 @@ void CSolver::SetAuxVar_Gradient_LS(CGeometry *geometry, const CConfig *config) } void CSolver::SetSolution_Gradient_GG(CGeometry *geometry, const CConfig *config, short idxVel, bool reconstruction) { + SU2_ZONE_SCOPED const auto& solution = base_nodes->GetSolution(); auto& gradient = reconstruction? base_nodes->GetGradient_Reconstruction() : base_nodes->GetGradient(); @@ -2145,6 +2161,7 @@ void CSolver::SetSolution_Gradient_GG(CGeometry *geometry, const CConfig *config } void CSolver::SetSolution_Gradient_LS(CGeometry *geometry, const CConfig *config, short idxVel, bool reconstruction) { + SU2_ZONE_SCOPED /*--- Set a flag for unweighted or weighted least-squares. ---*/ bool weighted; @@ -2168,6 +2185,7 @@ void CSolver::SetSolution_Gradient_LS(CGeometry *geometry, const CConfig *config } void CSolver::SetUndivided_Laplacian(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED /*--- Loop domain points. ---*/ @@ -2213,6 +2231,7 @@ void CSolver::SetUndivided_Laplacian(CGeometry *geometry, const CConfig *config) } void CSolver::Add_External_To_Solution() { + SU2_ZONE_SCOPED for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++) { base_nodes->AddSolution(iPoint, base_nodes->Get_External(iPoint)); } @@ -2221,6 +2240,7 @@ void CSolver::Add_External_To_Solution() { } void CSolver::Add_Solution_To_External() { + SU2_ZONE_SCOPED for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++) { base_nodes->Add_External(iPoint, base_nodes->GetSolution(iPoint)); } @@ -2229,6 +2249,7 @@ void CSolver::Add_Solution_To_External() { } void CSolver::Update_Cross_Term(CConfig *config, su2passivematrix &cross_term) { + SU2_ZONE_SCOPED /*--- This method is for discrete adjoint solvers and it is used in multi-physics * contexts, "cross_term" is the old value, the new one is in "Solution". @@ -2255,6 +2276,7 @@ void CSolver::Update_Cross_Term(CConfig *config, su2passivematrix &cross_term) { } void CSolver::SetGridVel_Gradient(CGeometry *geometry, const CConfig *config) const { + SU2_ZONE_SCOPED /// TODO: No comms needed for this gradient? The Rmatrix should be allocated somewhere. @@ -2267,6 +2289,7 @@ void CSolver::SetGridVel_Gradient(CGeometry *geometry, const CConfig *config) co } void CSolver::SetSolution_Limiter(CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED const auto kindLimiter = config->GetKind_SlopeLimit(); const auto umusclKappa = config->GetMUSCL_Kappa(); @@ -2281,6 +2304,7 @@ void CSolver::SetSolution_Limiter(CGeometry *geometry, const CConfig *config) { } void CSolver::Gauss_Elimination(su2double** A, su2double* rhs, unsigned short nVar) { + SU2_ZONE_SCOPED short iVar, jVar, kVar; su2double weight, aux; @@ -2315,6 +2339,7 @@ void CSolver::Gauss_Elimination(su2double** A, su2double* rhs, unsigned short nV } void CSolver::Aeroelastic(CSurfaceMovement *surface_movement, CGeometry *geometry, CConfig *config, unsigned long TimeIter) { + SU2_ZONE_SCOPED /*--- Variables used for Aeroelastic case ---*/ @@ -2395,6 +2420,7 @@ void CSolver::Aeroelastic(CSurfaceMovement *surface_movement, CGeometry *geometr } void CSolver::SetUpTypicalSectionWingModel(vector >& Phi, vector& omega, CConfig *config) { + SU2_ZONE_SCOPED /*--- Retrieve values from the config file ---*/ su2double w_h = config->GetAeroelastic_Frequency_Plunge(); @@ -2473,6 +2499,7 @@ void CSolver::SetUpTypicalSectionWingModel(vector >& Phi, vect } void CSolver::SolveTypicalSectionWingModel(CGeometry *geometry, su2double Cl, su2double Cm, CConfig *config, unsigned short iMarker, vector& displacements) { + SU2_ZONE_SCOPED /*--- The aeroelastic model solved in this routine is the typical section wing model The details of the implementation are similar to those found in J.J. Alonso @@ -2595,6 +2622,7 @@ void CSolver::SolveTypicalSectionWingModel(CGeometry *geometry, su2double Cl, su } void CSolver::Restart_OldGeometry(CGeometry *geometry, CConfig *config) const { + SU2_ZONE_SCOPED BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { @@ -2754,6 +2782,7 @@ void CSolver::Restart_OldGeometry(CGeometry *geometry, CConfig *config) const { } void CSolver::Read_SU2_Restart_ASCII(CGeometry *geometry, const CConfig *config, string val_filename) { + SU2_ZONE_SCOPED ifstream restart_file; string text_line, Tag; @@ -2916,6 +2945,7 @@ void CSolver::Read_SU2_Restart_ASCII(CGeometry *geometry, const CConfig *config, } void CSolver::Read_SU2_Restart_Binary(CGeometry *geometry, const CConfig *config, string val_filename) { + SU2_ZONE_SCOPED char str_buf[CGNS_STRING_SIZE], fname[100]; strcpy(fname, val_filename.c_str()); @@ -3147,6 +3177,7 @@ void CSolver::Read_SU2_Restart_Binary(CGeometry *geometry, const CConfig *config } void CSolver::InterpolateRestartData(const CGeometry *geometry, const CConfig *config) { + SU2_ZONE_SCOPED if (geometry->GetGlobal_nPointDomain() == 0) return; @@ -3351,6 +3382,7 @@ void CSolver::InterpolateRestartData(const CGeometry *geometry, const CConfig *c } void CSolver::Read_SU2_Restart_Metadata(CGeometry *geometry, CConfig *config, bool adjoint, const string& val_filename) const { + SU2_ZONE_SCOPED su2double AoA_ = config->GetAoA(); su2double AoS_ = config->GetAoS(); @@ -3560,6 +3592,7 @@ void CSolver::LoadInletProfile(CGeometry **geometry, int val_iter, unsigned short val_kind_solver, unsigned short val_kind_marker) const { + SU2_ZONE_SCOPED /*-- First, set the solver and marker kind for the particular problem at hand. Note that, in the future, these routines can be used for any solver @@ -4012,6 +4045,7 @@ void CSolver::LoadInletProfile(CGeometry **geometry, void CSolver::ComputeVertexTractions(CGeometry *geometry, const CConfig *config){ + SU2_ZONE_SCOPED const bool viscous_flow = config->GetViscous(); const su2double Pressure_Inf = config->GetPressure_FreeStreamND(); @@ -4063,6 +4097,7 @@ void CSolver::ComputeVertexTractions(CGeometry *geometry, const CConfig *config) } void CSolver::RegisterVertexTractions(CGeometry *geometry, const CConfig *config){ + SU2_ZONE_SCOPED unsigned short iMarker, iDim; unsigned long iVertex, iPoint; @@ -4094,6 +4129,7 @@ void CSolver::RegisterVertexTractions(CGeometry *geometry, const CConfig *config } void CSolver::SetVertexTractionsAdjoint(CGeometry *geometry, const CConfig *config){ + SU2_ZONE_SCOPED unsigned short iMarker, iDim; unsigned long iVertex, iPoint; @@ -4130,6 +4166,7 @@ void CSolver::SetVertexTractionsAdjoint(CGeometry *geometry, const CConfig *conf void CSolver::SetVerificationSolution(unsigned short nDim, unsigned short nVar, CConfig *config) { + SU2_ZONE_SCOPED /*--- Determine the verification solution to be set and allocate memory for the corresponding class. ---*/ @@ -4165,6 +4202,7 @@ void CSolver::SetVerificationSolution(unsigned short nDim, } void CSolver::ComputeResidual_Multizone(const CGeometry *geometry, const CConfig *config){ + SU2_ZONE_SCOPED SU2_OMP_PARALLEL { @@ -4214,6 +4252,7 @@ void CSolver::ComputeResidual_Multizone(const CGeometry *geometry, const CConfig } void CSolver::BasicLoadRestart(CGeometry *geometry, const CConfig *config, const string& filename, unsigned long skipVars) { + SU2_ZONE_SCOPED /*--- Read and store the restart metadata. ---*/ @@ -4260,6 +4299,7 @@ void CSolver::BasicLoadRestart(CGeometry *geometry, const CConfig *config, const } void CSolver::SavelibROM(CGeometry *geometry, CConfig *config, bool converged) { + SU2_ZONE_SCOPED #if defined(HAVE_LIBROM) && !defined(CODI_FORWARD_TYPE) && !defined(CODI_REVERSE_TYPE) const bool unsteady = config->GetTime_Domain(); diff --git a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp index d2143ba8d1d8..de8d5e618531 100644 --- a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp @@ -36,6 +36,7 @@ CSpeciesFlameletSolver::CSpeciesFlameletSolver(CGeometry* geometry, CConfig* config, unsigned short iMesh) : CSpeciesSolver(geometry, config, true) { + SU2_ZONE_SCOPED /*--- Retrieve options from config. ---*/ flamelet_config_options = config->GetFlameletParsedOptions(); @@ -70,6 +71,7 @@ CSpeciesFlameletSolver::CSpeciesFlameletSolver(CGeometry* geometry, CConfig* con void CSpeciesFlameletSolver::Preprocessing(CGeometry* geometry, CSolver** solver_container, CConfig* config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED unsigned long n_not_in_domain_local = 0, n_not_in_domain_global = 0; vector scalars_vector(nVar); unsigned long spark_iter_start, spark_duration; @@ -152,6 +154,7 @@ void CSpeciesFlameletSolver::Preprocessing(CGeometry* geometry, CSolver** solver void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver*** solver_container, CConfig* config, unsigned long ExtIter) { + SU2_ZONE_SCOPED const bool restart = (config->GetRestart() || config->GetRestart_Flow()); bool flame_front_ignition = (flamelet_config_options.ignition_method == FLAMELET_INIT_TYPE::FLAME_FRONT); @@ -320,6 +323,7 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** } void CSpeciesFlameletSolver::SetPreconditioner(CGeometry* geometry, CSolver** solver_container, CConfig* config) { + SU2_ZONE_SCOPED const bool variable_density = (config->GetVariable_Density_Model()); const bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT); @@ -383,6 +387,7 @@ void CSpeciesFlameletSolver::SetPreconditioner(CGeometry* geometry, CSolver** so void CSpeciesFlameletSolver::Source_Residual(CGeometry* geometry, CSolver** solver_container, CNumerics** numerics_container, CConfig* config, unsigned short iMesh) { + SU2_ZONE_SCOPED SU2_OMP_FOR_STAT(omp_chunk_size) for (auto i_point = 0u; i_point < nPointDomain; i_point++) { @@ -400,6 +405,7 @@ void CSpeciesFlameletSolver::Source_Residual(CGeometry* geometry, CSolver** solv void CSpeciesFlameletSolver::BC_Inlet(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED string Marker_Tag = config->GetMarker_All_TagBound(val_marker); su2double temp_inlet = config->GetInletTtotal(Marker_Tag); @@ -421,6 +427,7 @@ void CSpeciesFlameletSolver::BC_Inlet(CGeometry* geometry, CSolver** solver_cont void CSpeciesFlameletSolver::BC_Isothermal_Wall_Generic(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config, unsigned short val_marker, bool cht_mode) { + SU2_ZONE_SCOPED const bool implicit = config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT; const string Marker_Tag = config->GetMarker_All_TagBound(val_marker); CFluidModel* fluid_model_local = solver_container[FLOW_SOL]->GetFluidModel(); @@ -505,17 +512,20 @@ void CSpeciesFlameletSolver::BC_Isothermal_Wall_Generic(CGeometry* geometry, CSo void CSpeciesFlameletSolver::BC_Isothermal_Wall(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_Isothermal_Wall_Generic(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker); } void CSpeciesFlameletSolver::BC_ConjugateHeat_Interface(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_Isothermal_Wall_Generic(geometry, solver_container, conv_numerics, nullptr, config, val_marker, true); } unsigned long CSpeciesFlameletSolver::SetScalarSources(const CConfig* config, CFluidModel* fluid_model_local, unsigned long iPoint, const vector& scalars) { + SU2_ZONE_SCOPED /*--- Compute total source terms from the production and consumption. ---*/ vector table_sources(flamelet_config_options.n_control_vars + 2 * flamelet_config_options.n_user_scalars); @@ -544,6 +554,7 @@ unsigned long CSpeciesFlameletSolver::SetScalarSources(const CConfig* config, CF unsigned long CSpeciesFlameletSolver::SetScalarLookUps(CFluidModel* fluid_model_local, unsigned long iPoint, const vector& scalars) { + SU2_ZONE_SCOPED /*--- Retrieve the passive look-up variables from the manifold. ---*/ unsigned long misses{0}; /*--- Skip if no passive look-ups are listed ---*/ @@ -562,6 +573,7 @@ unsigned long CSpeciesFlameletSolver::SetScalarLookUps(CFluidModel* fluid_model_ unsigned long CSpeciesFlameletSolver::SetPreferentialDiffusionScalars(CFluidModel* fluid_model_local, unsigned long iPoint, const vector& scalars) { + SU2_ZONE_SCOPED /*--- Retrieve the preferential diffusion scalar values from the manifold. ---*/ vector beta_scalar(FLAMELET_PREF_DIFF_SCALARS::N_BETA_TERMS); @@ -575,6 +587,7 @@ unsigned long CSpeciesFlameletSolver::SetPreferentialDiffusionScalars(CFluidMode void CSpeciesFlameletSolver::Viscous_Residual(const unsigned long iEdge, const CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, const CConfig* config) { + SU2_ZONE_SCOPED /*--- Overloaded viscous residual method which accounts for preferential diffusion. ---*/ const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT), PreferentialDiffusion = flamelet_config_options.preferential_diffusion; @@ -751,6 +764,7 @@ void CSpeciesFlameletSolver::Viscous_Residual(const unsigned long iEdge, const C unsigned long CSpeciesFlameletSolver::GetEnthFromTemp(CFluidModel* fluid_model, su2double const val_temp, const su2double* scalar_solution, su2double* val_enth) { + SU2_ZONE_SCOPED /*--- convergence criterion for temperature in [K], high accuracy needed for restarts. ---*/ su2double delta_temp_final = 0.001; su2double enth_iter = scalar_solution[I_ENTH]; @@ -792,6 +806,7 @@ unsigned long CSpeciesFlameletSolver::GetEnthFromTemp(CFluidModel* fluid_model, } su2double CSpeciesFlameletSolver::GetBurntProgressVariable(CFluidModel* fluid_model, const su2double* scalar_solution) { + SU2_ZONE_SCOPED su2double scalars[MAXNVAR], delta = 1e-3; for (auto iVar = 0u; iVar < nVar; iVar++) scalars[iVar] = scalar_solution[iVar]; bool outside = false; diff --git a/SU2_CFD/src/solvers/CSpeciesSolver.cpp b/SU2_CFD/src/solvers/CSpeciesSolver.cpp index 2857bdc7fd54..4e629d1d2ada 100644 --- a/SU2_CFD/src/solvers/CSpeciesSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesSolver.cpp @@ -37,6 +37,7 @@ template class CScalarSolver; CSpeciesSolver::CSpeciesSolver(CGeometry* geometry, CConfig* config, unsigned short iMesh) : CScalarSolver(geometry, config, true) { + SU2_ZONE_SCOPED /*--- Dimension of the problem. ---*/ @@ -92,6 +93,7 @@ CSpeciesSolver::CSpeciesSolver(CGeometry* geometry, CConfig* config, unsigned sh void CSpeciesSolver::Initialize(CGeometry* geometry, CConfig* config, unsigned short iMesh, unsigned short nVar) { + SU2_ZONE_SCOPED /*--- Store if an implicit scheme is used, for use during periodic boundary conditions. ---*/ SetImplicitPeriodic(config->GetKind_TimeIntScheme_Species() == EULER_IMPLICIT); @@ -192,6 +194,7 @@ void CSpeciesSolver::Initialize(CGeometry* geometry, CConfig* config, unsigned s void CSpeciesSolver::LoadRestart(CGeometry** geometry, CSolver*** solver, CConfig* config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Restart the solution from file information ---*/ string restart_filename = config->GetSolution_FileName(); @@ -306,6 +309,7 @@ void CSpeciesSolver::LoadRestart(CGeometry** geometry, CSolver*** solver, CConfi void CSpeciesSolver::Preprocessing(CGeometry* geometry, CSolver** solver_container, CConfig* config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED SU2_OMP_SAFE_GLOBAL_ACCESS(config->SetGlobalParam(config->GetKind_Solver(), RunTime_EqSystem);) SU2_OMP_FOR_STAT(omp_chunk_size) @@ -330,6 +334,7 @@ void CSpeciesSolver::Preprocessing(CGeometry* geometry, CSolver** solver_contain void CSpeciesSolver::Viscous_Residual(const unsigned long iEdge, const CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, const CConfig* config) { + SU2_ZONE_SCOPED /*--- Define an object to set solver specific numerics contribution. ---*/ auto SolverSpecificNumerics = [&](unsigned long iPoint, unsigned long jPoint) { /*--- Mass diffusivity coefficients. ---*/ @@ -344,6 +349,7 @@ void CSpeciesSolver::Viscous_Residual(const unsigned long iEdge, const CGeometry void CSpeciesSolver::BC_Inlet(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); string Marker_Tag = config->GetMarker_All_TagBound(val_marker); @@ -421,17 +427,20 @@ void CSpeciesSolver::BC_Inlet(CGeometry* geometry, CSolver** solver_container, C void CSpeciesSolver::BC_Isothermal_Wall(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_Wall_Generic(geometry, solver_container, config, val_marker); } void CSpeciesSolver::BC_HeatFlux_Wall(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_Wall_Generic(geometry, solver_container, config, val_marker); } void CSpeciesSolver::BC_Wall_Generic(CGeometry* geometry, CSolver** solver_container, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT; const bool py_custom = config->GetMarker_All_PyCustom(val_marker); @@ -486,6 +495,7 @@ void CSpeciesSolver::BC_Wall_Generic(CGeometry* geometry, CSolver** solver_conta void CSpeciesSolver::SetInletAtVertex(const su2double *val_inlet, unsigned short iMarker, unsigned long iVertex) { + SU2_ZONE_SCOPED for (unsigned short iVar = 0; iVar < nVar; iVar++) Inlet_SpeciesVars[iMarker][iVertex][iVar] = val_inlet[Inlet_Position+iVar]; @@ -494,6 +504,7 @@ void CSpeciesSolver::SetInletAtVertex(const su2double *val_inlet, su2double CSpeciesSolver::GetInletAtVertex(unsigned short iMarker, unsigned long iVertex, const CGeometry* geometry, su2double* val_inlet) const { + SU2_ZONE_SCOPED for (unsigned short iVar = 0; iVar < nVar; iVar++) val_inlet[Inlet_Position + iVar] = Inlet_SpeciesVars[iMarker][iVertex][iVar]; @@ -505,6 +516,7 @@ su2double CSpeciesSolver::GetInletAtVertex(unsigned short iMarker, unsigned long } void CSpeciesSolver::SetUniformInlet(const CConfig* config, unsigned short iMarker) { + SU2_ZONE_SCOPED /*--- Find BC string to the numeric-identifier. ---*/ if (config->GetMarker_All_KindBC(iMarker) == INLET_FLOW || config->GetMarker_All_KindBC(iMarker) == SUPERSONIC_INLET) { const string Marker_Tag = config->GetMarker_All_TagBound(iMarker); @@ -518,6 +530,7 @@ void CSpeciesSolver::SetUniformInlet(const CConfig* config, unsigned short iMark void CSpeciesSolver::BC_Outlet(CGeometry* geometry, CSolver** solver_container, CNumerics* conv_numerics, CNumerics* visc_numerics, CConfig* config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -597,6 +610,7 @@ void CSpeciesSolver::BC_Outlet(CGeometry* geometry, CSolver** solver_container, void CSpeciesSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool axisymmetric = config->GetAxisymmetric(); @@ -653,6 +667,7 @@ void CSpeciesSolver::Source_Residual(CGeometry *geometry, CSolver **solver_conta } void CSpeciesSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long TimeIter) { + SU2_ZONE_SCOPED const bool restart = config->GetRestart() || config->GetRestart_Flow(); diff --git a/SU2_CFD/src/solvers/CTransLMSolver.cpp b/SU2_CFD/src/solvers/CTransLMSolver.cpp index 38356c86a59e..21469b71d507 100644 --- a/SU2_CFD/src/solvers/CTransLMSolver.cpp +++ b/SU2_CFD/src/solvers/CTransLMSolver.cpp @@ -40,6 +40,7 @@ CTransLMSolver::CTransLMSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CTurbSolver(geometry, config, true) { + SU2_ZONE_SCOPED unsigned long iPoint; ifstream restart_file; string text_line; @@ -174,6 +175,7 @@ CTransLMSolver::CTransLMSolver(CGeometry *geometry, CConfig *config, unsigned sh void CTransLMSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED SU2_OMP_SAFE_GLOBAL_ACCESS(config->SetGlobalParam(config->GetKind_Solver(), RunTime_EqSystem);) /*--- Upwind second order reconstruction and gradients ---*/ @@ -181,6 +183,7 @@ void CTransLMSolver::Preprocessing(CGeometry *geometry, CSolver **solver_contain } void CTransLMSolver::Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED /*--- Compute LM model gradients. ---*/ @@ -265,6 +268,7 @@ void CTransLMSolver::Postprocessing(CGeometry *geometry, CSolver **solver_contai void CTransLMSolver::Viscous_Residual(const unsigned long iEdge, const CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, const CConfig* config) { + SU2_ZONE_SCOPED /*--- Define an object to set solver specific numerics contribution. ---*/ @@ -278,6 +282,7 @@ void CTransLMSolver::Viscous_Residual(const unsigned long iEdge, const CGeometry void CTransLMSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -360,10 +365,12 @@ void CTransLMSolver::Source_Residual(CGeometry *geometry, CSolver **solver_conta void CTransLMSolver::Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED } void CTransLMSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -420,6 +427,7 @@ void CTransLMSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont void CTransLMSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_HeatFlux_Wall(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker); @@ -427,6 +435,7 @@ void CTransLMSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_co void CTransLMSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); /*--- Loop over all the vertices on this boundary marker ---*/ @@ -495,11 +504,13 @@ void CTransLMSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, C void CTransLMSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_Far_Field(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker); } void CTransLMSolver::LoadRestart(CGeometry** geometry, CSolver*** solver, CConfig* config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED string restart_filename = config->GetSolution_FileName(); diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp index 232373707623..65066e32e942 100644 --- a/SU2_CFD/src/solvers/CTurbSASolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp @@ -34,6 +34,7 @@ CTurbSASolver::CTurbSASolver(CGeometry *geometry, CConfig *config, unsigned short iMesh, CFluidModel* FluidModel) : CTurbSolver(geometry, config, false) { + SU2_ZONE_SCOPED unsigned long iPoint; su2double Density_Inf, Viscosity_Inf, Factor_nu_Inf, Factor_nu_Engine, Factor_nu_ActDisk; @@ -175,6 +176,7 @@ CTurbSASolver::CTurbSASolver(CGeometry *geometry, CConfig *config, unsigned shor void CTurbSASolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED SU2_OMP_SAFE_GLOBAL_ACCESS(config->SetGlobalParam(config->GetKind_Solver(), RunTime_EqSystem);) const auto kind_hybridRANSLES = config->GetKind_HybridRANSLES(); @@ -208,6 +210,7 @@ void CTurbSASolver::Preprocessing(CGeometry *geometry, CSolver **solver_containe } void CTurbSASolver::Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED const su2double cv1_3 = 7.1*7.1*7.1, cR1 = 0.5, rough_const = 0.03; @@ -295,6 +298,7 @@ void CTurbSASolver::Postprocessing(CGeometry *geometry, CSolver **solver_contain void CTurbSASolver::Viscous_Residual(const unsigned long iEdge, const CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, const CConfig* config) { + SU2_ZONE_SCOPED /*--- Define an object to set solver specific numerics contribution. ---*/ auto SolverSpecificNumerics = [&](unsigned long iPoint, unsigned long jPoint) { @@ -309,6 +313,7 @@ void CTurbSASolver::Viscous_Residual(const unsigned long iEdge, const CGeometry* void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED bool axisymmetric = config->GetAxisymmetric(); @@ -439,10 +444,12 @@ void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_contai void CTurbSASolver::Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED } void CTurbSASolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED /*--- Evaluate nu tilde at the closest point to the surface using the wall functions. ---*/ @@ -517,6 +524,7 @@ void CTurbSASolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_conta void CTurbSASolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_HeatFlux_Wall(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker); @@ -524,6 +532,7 @@ void CTurbSASolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_con void CTurbSASolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -648,6 +657,7 @@ void CTurbSASolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CN void CTurbSASolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -739,6 +749,7 @@ void CTurbSASolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, C void CTurbSASolver::BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -828,6 +839,7 @@ void CTurbSASolver::BC_Engine_Inflow(CGeometry *geometry, CSolver **solver_conta void CTurbSASolver::BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -917,12 +929,14 @@ void CTurbSASolver::BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_cont void CTurbSASolver::BC_ActDisk_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_ActDisk(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker, true); } void CTurbSASolver::BC_ActDisk_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_ActDisk(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker, false); } @@ -930,6 +944,7 @@ void CTurbSASolver::BC_ActDisk_Outlet(CGeometry *geometry, CSolver **solver_cont void CTurbSASolver::BC_ActDisk(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker, bool val_inlet_surface) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -1067,6 +1082,7 @@ void CTurbSASolver::BC_ActDisk(CGeometry *geometry, CSolver **solver_container, void CTurbSASolver::BC_Inlet_MixingPlane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const auto nSpanWiseSections = config->GetnSpanWiseSections(); @@ -1162,6 +1178,7 @@ void CTurbSASolver::BC_Inlet_MixingPlane(CGeometry *geometry, CSolver **solver_c void CTurbSASolver::BC_Inlet_Turbo(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const auto nSpanWiseSections = config->GetnSpanWiseSections(); @@ -1267,6 +1284,7 @@ void CTurbSASolver::BC_Inlet_Turbo(CGeometry *geometry, CSolver **solver_contain void CTurbSASolver::SetTurbVars_WF(CGeometry *geometry, CSolver **solver_container, const CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -1347,6 +1365,7 @@ void CTurbSASolver::SetTurbVars_WF(CGeometry *geometry, CSolver **solver_contain } void CTurbSASolver::SetDES_LengthScale(CSolver **solver, CGeometry *geometry, CConfig *config){ + SU2_ZONE_SCOPED const auto kindHybridRANSLES = config->GetKind_HybridRANSLES(); @@ -1529,6 +1548,7 @@ void CTurbSASolver::SetDES_LengthScale(CSolver **solver, CGeometry *geometry, CC void CTurbSASolver::SetInletAtVertex(const su2double *val_inlet, unsigned short iMarker, unsigned long iVertex) { + SU2_ZONE_SCOPED Inlet_TurbVars[iMarker][iVertex][0] = val_inlet[nDim+2+nDim]; @@ -1536,6 +1556,7 @@ void CTurbSASolver::SetInletAtVertex(const su2double *val_inlet, su2double CTurbSASolver::GetInletAtVertex(unsigned short iMarker, unsigned long iVertex, const CGeometry* geometry, su2double* val_inlet) const { + SU2_ZONE_SCOPED const auto position = nDim + 2 + nDim; val_inlet[position] = Inlet_TurbVars[iMarker][iVertex][0]; @@ -1547,6 +1568,7 @@ su2double CTurbSASolver::GetInletAtVertex(unsigned short iMarker, unsigned long } void CTurbSASolver::SetUniformInlet(const CConfig* config, unsigned short iMarker) { + SU2_ZONE_SCOPED if (config->GetMarker_All_KindBC(iMarker) == INLET_FLOW) { for (unsigned long iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { Inlet_TurbVars[iMarker][iVertex][0] = GetNuTilde_Inf(); @@ -1555,6 +1577,7 @@ void CTurbSASolver::SetUniformInlet(const CConfig* config, unsigned short iMarke } void CTurbSASolver::ComputeUnderRelaxationFactor(CSolver** solver_container, const CConfig *config) { + SU2_ZONE_SCOPED /* Apply the turbulent under-relaxation to the SA variants. The SA_NEG model is more robust due to allowing for negative nu_tilde, diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index 7cd7c2505213..4f1212d62867 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -34,6 +34,7 @@ CTurbSSTSolver::CTurbSSTSolver(CGeometry *geometry, CConfig *config, unsigned short iMesh) : CTurbSolver(geometry, config, true) { + SU2_ZONE_SCOPED unsigned long iPoint; ifstream restart_file; string text_line; @@ -197,6 +198,7 @@ CTurbSSTSolver::CTurbSSTSolver(CGeometry *geometry, CConfig *config, unsigned sh void CTurbSSTSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, unsigned short iRKStep, unsigned short RunTime_EqSystem, bool Output) { + SU2_ZONE_SCOPED SU2_OMP_SAFE_GLOBAL_ACCESS(config->SetGlobalParam(config->GetKind_Solver(), RunTime_EqSystem);) /*--- Upwind second order reconstruction and gradients ---*/ @@ -205,6 +207,7 @@ void CTurbSSTSolver::Preprocessing(CGeometry *geometry, CSolver **solver_contain void CTurbSSTSolver::Postprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED const su2double a1 = constants[7]; @@ -289,6 +292,7 @@ void CTurbSSTSolver::Postprocessing(CGeometry *geometry, CSolver **solver_contai void CTurbSSTSolver::Viscous_Residual(const unsigned long iEdge, const CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, const CConfig* config) { + SU2_ZONE_SCOPED /*--- Define an object to set solver specific numerics contribution. ---*/ auto SolverSpecificNumerics = [&](unsigned long iPoint, unsigned long jPoint) { @@ -303,6 +307,7 @@ void CTurbSSTSolver::Viscous_Residual(const unsigned long iEdge, const CGeometry void CTurbSSTSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container, CNumerics **numerics_container, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED bool axisymmetric = config->GetAxisymmetric(); @@ -398,10 +403,12 @@ void CTurbSSTSolver::Source_Residual(CGeometry *geometry, CSolver **solver_conta void CTurbSSTSolver::Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short iMesh) { + SU2_ZONE_SCOPED } void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -515,6 +522,7 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont void CTurbSSTSolver::SetTurbVars_WF(CGeometry *geometry, CSolver **solver_container, const CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -576,6 +584,7 @@ void CTurbSSTSolver::SetTurbVars_WF(CGeometry *geometry, CSolver **solver_contai void CTurbSSTSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED BC_HeatFlux_Wall(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker); @@ -583,6 +592,7 @@ void CTurbSSTSolver::BC_Isothermal_Wall(CGeometry *geometry, CSolver **solver_co void CTurbSSTSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -716,6 +726,7 @@ void CTurbSSTSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, C void CTurbSSTSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -813,6 +824,7 @@ void CTurbSSTSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, void CTurbSSTSolver::BC_Inlet_MixingPlane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -905,6 +917,7 @@ void CTurbSSTSolver::BC_Inlet_MixingPlane(CGeometry *geometry, CSolver **solver_ void CTurbSSTSolver::BC_Inlet_Turbo(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); @@ -1017,6 +1030,7 @@ void CTurbSSTSolver::BC_Inlet_Turbo(CGeometry *geometry, CSolver **solver_contai void CTurbSSTSolver::SetInletAtVertex(const su2double *val_inlet, unsigned short iMarker, unsigned long iVertex) { + SU2_ZONE_SCOPED Inlet_TurbVars[iMarker][iVertex][0] = val_inlet[nDim+2+nDim]; Inlet_TurbVars[iMarker][iVertex][1] = val_inlet[nDim+2+nDim+1]; @@ -1025,6 +1039,7 @@ void CTurbSSTSolver::SetInletAtVertex(const su2double *val_inlet, su2double CTurbSSTSolver::GetInletAtVertex(unsigned short iMarker, unsigned long iVertex, const CGeometry* geometry, su2double* val_inlet) const { + SU2_ZONE_SCOPED const auto tke_position = nDim + 2 + nDim; const auto omega_position = tke_position + 1; val_inlet[tke_position] = Inlet_TurbVars[iMarker][iVertex][0]; @@ -1037,6 +1052,7 @@ su2double CTurbSSTSolver::GetInletAtVertex(unsigned short iMarker, unsigned long return GeometryToolbox::Norm(nDim, Normal);} void CTurbSSTSolver::SetUniformInlet(const CConfig* config, unsigned short iMarker) { + SU2_ZONE_SCOPED if (config->GetMarker_All_KindBC(iMarker) == INLET_FLOW) { for (unsigned long iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { Inlet_TurbVars[iMarker][iVertex][0] = GetTke_Inf(); @@ -1047,6 +1063,7 @@ void CTurbSSTSolver::SetUniformInlet(const CConfig* config, unsigned short iMark } void CTurbSSTSolver::ComputeUnderRelaxationFactor(CSolver** solver_container, const CConfig *config) { + SU2_ZONE_SCOPED const su2double allowableRatio = config->GetMaxUpdateFractionSST(); diff --git a/SU2_CFD/src/solvers/CTurbSolver.cpp b/SU2_CFD/src/solvers/CTurbSolver.cpp index 121c004c104d..697b6d0a1c38 100644 --- a/SU2_CFD/src/solvers/CTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSolver.cpp @@ -35,17 +35,20 @@ template class CScalarSolver; CTurbSolver::CTurbSolver(CGeometry* geometry, CConfig *config, bool conservative) : CScalarSolver(geometry, config, conservative) { + SU2_ZONE_SCOPED /*--- Store if an implicit scheme is used, for use during periodic boundary conditions. ---*/ SetImplicitPeriodic(config->GetKind_TimeIntScheme_Turb() == EULER_IMPLICIT); } CTurbSolver::~CTurbSolver() { + SU2_ZONE_SCOPED for (auto& mat : SlidingState) { for (auto ptr : mat) delete [] ptr; } } void CTurbSolver::BC_Riemann(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED string Marker_Tag = config->GetMarker_All_TagBound(val_marker); @@ -61,6 +64,7 @@ void CTurbSolver::BC_Riemann(CGeometry *geometry, CSolver **solver_container, CN } void CTurbSolver::BC_TurboRiemann(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED string Marker_Tag = config->GetMarker_All_TagBound(val_marker); @@ -77,6 +81,7 @@ void CTurbSolver::BC_TurboRiemann(CGeometry *geometry, CSolver **solver_containe void CTurbSolver::BC_Giles(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { + SU2_ZONE_SCOPED string Marker_Tag = config->GetMarker_All_TagBound(val_marker); @@ -102,6 +107,7 @@ void CTurbSolver::BC_Giles(CGeometry *geometry, CSolver **solver_container, CNum void CTurbSolver::LoadRestart(CGeometry** geometry, CSolver*** solver, CConfig* config, int val_iter, bool val_update_geo) { + SU2_ZONE_SCOPED /*--- Restart the solution from file information ---*/ string restart_filename = config->GetSolution_FileName(); @@ -234,6 +240,7 @@ void CTurbSolver::LoadRestart(CGeometry** geometry, CSolver*** solver, CConfig* } void CTurbSolver::Impose_Fixed_Values(const CGeometry *geometry, const CConfig *config){ + SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); /*--- Check whether turbulence quantities are fixed to far-field values on a half-plane. ---*/ @@ -269,6 +276,7 @@ void CTurbSolver::Impose_Fixed_Values(const CGeometry *geometry, const CConfig * } unsigned long CTurbSolver::RegisterSolutionExtra(bool input, const CConfig* config) { + SU2_ZONE_SCOPED /*--- Register muT as input/output of a RANS iteration. ---*/ nodes->RegisterEddyViscosity(input); @@ -278,6 +286,7 @@ unsigned long CTurbSolver::RegisterSolutionExtra(bool input, const CConfig* conf } void CTurbSolver::ComputeUnderRelaxationFactorHelper(CSolver** solver_container, su2double allowableRatio) { + SU2_ZONE_SCOPED /* Loop over the solution update given by relaxing the linear system for this nonlinear iteration. */ diff --git a/meson.build b/meson.build index 5a46b12431f5..831e282ca7e4 100644 --- a/meson.build +++ b/meson.build @@ -133,10 +133,10 @@ if get_option('enable-autodiff') and not omp endif # Add Tracy dependency if enabled -if get_option('enable-tracy') +if get_option('tracy_enable') tracy_dep = dependency('tracy', static: true) su2_deps += tracy_dep - su2_cpp_args += '-DHAVE_TRACY' + su2_cpp_args += '-DTRACY_ENABLE' # Add build type check if get_option('buildtype') != 'debugoptimized' @@ -404,7 +404,7 @@ message('''--------------------------------------------------------------------- '''.format(get_option('prefix')+'/bin', meson.project_source_root(), get_option('enable-tecio'), get_option('enable-cgns'), get_option('enable-autodiff'), get_option('enable-directdiff'), get_option('enable-pywrapper'), get_option('enable-mkl'), get_option('enable-openblas'), get_option('enable-pastix'), get_option('enable-mixedprec'), get_option('enable-librom'), get_option('enable-coolprop'), - get_option('enable-mlpcpp'), get_option('enable-tracy'), meson.project_build_root().startswith(meson.project_source_root()) ? meson.project_build_root().split('/')[-1] : meson.project_build_root())) + get_option('enable-mlpcpp'), get_option('tracy_enable'), meson.project_build_root().startswith(meson.project_source_root()) ? meson.project_build_root().split('/')[-1] : meson.project_build_root())) if get_option('enable-mpp') if get_option('install-mpp') diff --git a/meson_options.txt b/meson_options.txt index f460f6b1e139..4eba410a0013 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -28,4 +28,4 @@ option('opdi-shared-read-opt', type : 'boolean', value : true, description : 'Op option('librom_root', type : 'string', value : '', description: 'libROM base directory') option('enable-librom', type : 'boolean', value : false, description: 'enable LLNL libROM support') option('static-cgns-deps', type : 'boolean', value : false, description: 'prefer static or dynamic (default) libraries for CGNS dependencies') -option('enable-tracy', type: 'boolean', value: false, description: 'Enable Tracy profiling support') +option('tracy_enable', type: 'boolean', value: false, description: 'Enable Tracy profiling support') diff --git a/subprojects/tracy.wrap b/subprojects/tracy.wrap index b410c1419ea1..e45c6ad75fd3 100644 --- a/subprojects/tracy.wrap +++ b/subprojects/tracy.wrap @@ -1,4 +1,4 @@ [wrap-git] url = https://github.com/wolfpld/tracy.git -revision = master +revision = v0.12.2 depth = 1 From a9a8f68e2332a558c9923d1cf4df8bc1f6c23b78 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Fri, 17 Apr 2026 22:05:21 +0200 Subject: [PATCH 214/229] Don't store/use secondary partial derivatives when it's not necessary (#2789) * stash * don't allocate/use secondary variables for ideal gas --- .../include/solvers/CFVMFlowSolverBase.inl | 36 ++++++++++--------- SU2_CFD/include/solvers/CSolver.hpp | 6 ---- SU2_CFD/include/variables/CVariable.hpp | 2 -- SU2_CFD/src/solvers/CEulerSolver.cpp | 25 ++++++++----- SU2_CFD/src/solvers/CNSSolver.cpp | 5 +-- SU2_CFD/src/variables/CEulerVariable.cpp | 17 ++++++--- SU2_CFD/src/variables/CNSVariable.cpp | 21 +++++------ 7 files changed, 62 insertions(+), 50 deletions(-) diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index 2d30f315ba2d..605e281470bd 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -451,6 +451,8 @@ void CFVMFlowSolverBase::Viscous_Residual_impl(unsigned long iEdge, CGeome const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool tkeNeeded = (config->GetKind_Turb_Model() == TURB_MODEL::SST); + const bool ideal_gas = (config->GetKind_FluidModel() == STANDARD_AIR) || + (config->GetKind_FluidModel() == IDEAL_GAS); CVariable* turbNodes = nullptr; if (tkeNeeded) turbNodes = solver_container[TURB_SOL]->GetNodes(); @@ -469,10 +471,10 @@ void CFVMFlowSolverBase::Viscous_Residual_impl(unsigned long iEdge, CGeome numerics->SetPrimitive(nodes->GetPrimitive(iPoint), nodes->GetPrimitive(jPoint)); - - numerics->SetSecondary(nodes->GetSecondary(iPoint), - nodes->GetSecondary(jPoint)); - + if (!ideal_gas) { + numerics->SetSecondary(nodes->GetSecondary(iPoint), + nodes->GetSecondary(jPoint)); + } /*--- Gradients. ---*/ numerics->SetPrimVarGradient(nodes->GetGradient_Primitive(iPoint), @@ -1149,6 +1151,8 @@ void CFVMFlowSolverBase::BC_Sym_Plane(CGeometry* geometry, CSolve SU2_ZONE_SCOPED const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); + const bool ideal_gas = (config->GetKind_FluidModel() == STANDARD_AIR) || + (config->GetKind_FluidModel() == IDEAL_GAS); const auto iVel = prim_idx.Velocity(); /*--- Blazek chapter 8.: @@ -1205,7 +1209,9 @@ void CFVMFlowSolverBase::BC_Sym_Plane(CGeometry* geometry, CSolve /*--- Set Primitive and Secondary for numerics class. ---*/ conv_numerics->SetPrimitive(V_domain, V_reflected); - conv_numerics->SetSecondary(nodes->GetSecondary(iPoint), nodes->GetSecondary(iPoint)); + if (!ideal_gas) { + conv_numerics->SetSecondary(nodes->GetSecondary(iPoint), nodes->GetSecondary(iPoint)); + } /*--- Compute the residual using an upwind scheme. ---*/ auto residual = conv_numerics->ComputeResidual(config); @@ -1329,6 +1335,8 @@ void CFVMFlowSolverBase::BC_Fluid_Interface(CGeometry* geometry, CConfig* config) { SU2_ZONE_SCOPED + const bool ideal_gas = config->GetKind_FluidModel() == STANDARD_AIR || config->GetKind_FluidModel() == IDEAL_GAS; + unsigned long iVertex, jVertex, iPoint, Point_Normal = 0; unsigned short iDim, iVar, jVar, iMarker, nDonorVertex; @@ -1380,19 +1388,15 @@ void CFVMFlowSolverBase::BC_Fluid_Interface(CGeometry* geometry, conv_numerics->SetPrimitive(PrimVar_i, PrimVar_j); - if (FlowRegime == ENUM_REGIME::COMPRESSIBLE) { - if (!(config->GetKind_FluidModel() == STANDARD_AIR || config->GetKind_FluidModel() == IDEAL_GAS)) { - auto Secondary_i = nodes->GetSecondary(iPoint); - - P_static = PrimVar_j[nDim + 1]; - rho_static = PrimVar_j[nDim + 2]; - GetFluidModel()->SetTDState_Prho(P_static, rho_static); + if (FlowRegime == ENUM_REGIME::COMPRESSIBLE && !ideal_gas) { + P_static = PrimVar_j[nDim + 1]; + rho_static = PrimVar_j[nDim + 2]; + GetFluidModel()->SetTDState_Prho(P_static, rho_static); - Secondary_j[0] = GetFluidModel()->GetdPdrho_e(); - Secondary_j[1] = GetFluidModel()->GetdPde_rho(); + Secondary_j[0] = GetFluidModel()->GetdPdrho_e(); + Secondary_j[1] = GetFluidModel()->GetdPde_rho(); - conv_numerics->SetSecondary(Secondary_i, Secondary_j); - } + conv_numerics->SetSecondary(nodes->GetSecondary(iPoint), Secondary_j); } /*--- Set the normal vector ---*/ diff --git a/SU2_CFD/include/solvers/CSolver.hpp b/SU2_CFD/include/solvers/CSolver.hpp index eba2e5cc07d7..3cee6ee0cca7 100644 --- a/SU2_CFD/include/solvers/CSolver.hpp +++ b/SU2_CFD/include/solvers/CSolver.hpp @@ -83,7 +83,6 @@ class CSolver { nPrimVar, /*!< \brief Number of primitive variables of the problem. */ nPrimVarGrad, /*!< \brief Number of primitive variables of the problem in the gradient computation. */ nSecondaryVar, /*!< \brief Number of primitive variables of the problem. */ - nSecondaryVarGrad, /*!< \brief Number of primitive variables of the problem in the gradient computation. */ nVarGrad, /*!< \brief Number of variables for deallocating the LS Cvector. */ nDim; /*!< \brief Number of dimensions of the problem. */ unsigned long nPoint; /*!< \brief Number of points of the computational grid. */ @@ -415,11 +414,6 @@ class CSolver { */ inline unsigned short GetnSecondaryVar(void) const { return nSecondaryVar; } - /*! - * \brief Get the number of variables of the problem. - */ - inline unsigned short GetnSecondaryVarGrad(void) const { return nSecondaryVarGrad; } - /*! * \brief Get the number of variables of the problem. */ diff --git a/SU2_CFD/include/variables/CVariable.hpp b/SU2_CFD/include/variables/CVariable.hpp index bc4bc55e57c7..89e391a3d2aa 100644 --- a/SU2_CFD/include/variables/CVariable.hpp +++ b/SU2_CFD/include/variables/CVariable.hpp @@ -103,14 +103,12 @@ class CVariable { VectorType SolutionExtra_BGS_k; /*!< \brief Intermediate storage, enables cross term extraction as that is also pushed to Solution. */ - protected: unsigned long nPoint = 0; /*!< \brief Number of points in the domain. */ unsigned long nDim = 0; /*!< \brief Number of dimension of the problem. */ unsigned long nVar = 0; /*!< \brief Number of variables of the problem. */ unsigned long nPrimVar = 0; /*!< \brief Number of primitive variables. */ unsigned long nPrimVarGrad = 0; /*!< \brief Number of primitives for which a gradient is computed. */ unsigned long nSecondaryVar = 0; /*!< \brief Number of secondary variables. */ - unsigned long nSecondaryVarGrad = 0; /*!< \brief Number of secondaries for which a gradient is computed. */ unsigned long nAuxVar = 0; /*!< \brief Number of auxiliary variables. */ /*--- Only allow default construction by derived classes. ---*/ diff --git a/SU2_CFD/src/solvers/CEulerSolver.cpp b/SU2_CFD/src/solvers/CEulerSolver.cpp index fb3d4f744584..2480813d4a3a 100644 --- a/SU2_CFD/src/solvers/CEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CEulerSolver.cpp @@ -121,7 +121,6 @@ CEulerSolver::CEulerSolver(CGeometry *geometry, CConfig *config, /*--- Centered schemes only need gradients for viscous fluxes (T and v). ---*/ nPrimVarGrad = EulerNPrimVarGrad(config, nDim); nSecondaryVar = nSecVar; - nSecondaryVarGrad = 2; /*--- Initialize nVarGrad for deallocation ---*/ @@ -1883,8 +1882,11 @@ void CEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_contain /*--- Get primitive and secondary variables ---*/ - auto V_i = nodes->GetPrimitive(iPoint); auto V_j = nodes->GetPrimitive(jPoint); - auto S_i = nodes->GetSecondary(iPoint); auto S_j = nodes->GetSecondary(jPoint); + auto V_i = nodes->GetPrimitive(iPoint); + auto V_j = nodes->GetPrimitive(jPoint); + + const su2double* S_i = ideal_gas? nullptr : nodes->GetSecondary(iPoint); + const su2double* S_j = ideal_gas? nullptr : nodes->GetSecondary(jPoint); /*--- Set them with or without high order reconstruction using MUSCL strategy. ---*/ @@ -5081,9 +5083,11 @@ void CEulerSolver::BC_Riemann(CGeometry *geometry, CSolver **solver_container, const string Marker_Tag = config->GetMarker_All_TagBound(val_marker); const bool viscous = config->GetViscous(), - implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT), + implicit = config->GetKind_TimeIntScheme() == EULER_IMPLICIT, gravity = config->GetGravityForce(), - tkeNeeded = (config->GetKind_Turb_Model() == TURB_MODEL::SST); + tkeNeeded = config->GetKind_Turb_Model() == TURB_MODEL::SST, + ideal_gas = config->GetKind_FluidModel() == STANDARD_AIR || + config->GetKind_FluidModel() == IDEAL_GAS; su2double **P_Tensor = new su2double*[nVar], **invP_Tensor = new su2double*[nVar]; @@ -5451,7 +5455,7 @@ void CEulerSolver::BC_Riemann(CGeometry *geometry, CSolver **solver_container, /*--- Secondary variables ---*/ - auto S_domain = nodes->GetSecondary(iPoint); + const su2double* S_domain = ideal_gas? nullptr : nodes->GetSecondary(iPoint); /*--- Compute secondary thermodynamic properties (partial derivatives...) ---*/ su2double S_boundary[8]; @@ -5527,6 +5531,8 @@ void CEulerSolver::BC_TurboRiemann(CGeometry *geometry, CSolver **solver_contain bool viscous = config->GetViscous(); bool gravity = (config->GetGravityForce()); bool tkeNeeded = (config->GetKind_Turb_Model() == TURB_MODEL::SST); + const bool ideal_gas = config->GetKind_FluidModel() == STANDARD_AIR || + config->GetKind_FluidModel() == IDEAL_GAS; su2double *Normal, *turboNormal, *UnitNormal, *FlowDirMix, FlowDirMixMag, *turboVelocity; Normal = new su2double[nDim]; @@ -5947,7 +5953,7 @@ void CEulerSolver::BC_TurboRiemann(CGeometry *geometry, CSolver **solver_contain /*--- Secondary variables ---*/ - S_domain = nodes->GetSecondary(iPoint); + S_domain = ideal_gas ? nullptr : nodes->GetSecondary(iPoint); /*--- Compute secondary thermodynamic properties (partial derivatives...) ---*/ @@ -6203,6 +6209,8 @@ void CEulerSolver::BC_Giles(CGeometry *geometry, CSolver **solver_container, CNu bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); string Marker_Tag = config->GetMarker_All_TagBound(val_marker); bool viscous = config->GetViscous(); + const bool ideal_gas = config->GetKind_FluidModel() == STANDARD_AIR || + config->GetKind_FluidModel() == IDEAL_GAS; unsigned short nSpanWiseSections = geometry->GetnSpanWiseSections(config->GetMarker_All_TurbomachineryFlag(val_marker)); su2double relfacAvgCfg = config->GetGiles_RelaxFactorAverage(Marker_Tag); su2double relfacFouCfg = config->GetGiles_RelaxFactorFourier(Marker_Tag); @@ -6538,8 +6546,7 @@ void CEulerSolver::BC_Giles(CGeometry *geometry, CSolver **solver_container, CNu V_domain = nodes->GetPrimitive(iPoint); /*--- Retrieve domain Secondary variables ---*/ - S_domain = nodes->GetSecondary(iPoint); - + S_domain = ideal_gas? nullptr : nodes->GetSecondary(iPoint); /*--- Compute the internal state u_i ---*/ Velocity2_i = 0; diff --git a/SU2_CFD/src/solvers/CNSSolver.cpp b/SU2_CFD/src/solvers/CNSSolver.cpp index 83bbca46256f..92669da60501 100644 --- a/SU2_CFD/src/solvers/CNSSolver.cpp +++ b/SU2_CFD/src/solvers/CNSSolver.cpp @@ -158,8 +158,9 @@ unsigned long CNSSolver::SetPrimitive_Variables(CSolver **solver_container, cons /*--- Compressible flow, primitive variables nDim+5, (T, vx, vy, vz, P, rho, h, c, lamMu, eddyMu, ThCond, Cp) ---*/ - bool physical = static_cast(nodes)->SetPrimVar(iPoint, eddy_visc, turb_ke, GetFluidModel()); - nodes->SetSecondaryVar(iPoint, GetFluidModel()); + auto* ns_nodes = static_cast(nodes); + bool physical = ns_nodes->SetPrimVar(iPoint, eddy_visc, turb_ke, GetFluidModel()); + ns_nodes->SetSecondaryVar(iPoint, GetFluidModel()); /*--- Check for non-realizable states for reporting. ---*/ diff --git a/SU2_CFD/src/variables/CEulerVariable.cpp b/SU2_CFD/src/variables/CEulerVariable.cpp index f7b5d71f358d..e52c42ae8158 100644 --- a/SU2_CFD/src/variables/CEulerVariable.cpp +++ b/SU2_CFD/src/variables/CEulerVariable.cpp @@ -43,6 +43,13 @@ unsigned long EulerNPrimVarGrad(const CConfig *config, unsigned long ndim) { return ndim + 4; } +unsigned long EulerNSecVar(const CConfig *config) { + const bool ideal_gas = config->GetKind_FluidModel() == STANDARD_AIR || + config->GetKind_FluidModel() == IDEAL_GAS; + if (ideal_gas) return 0; + return config->GetViscous() ? 8 : 2; +} + CEulerVariable::CEulerVariable(su2double density, const su2double *velocity, su2double energy, unsigned long npoint, unsigned long ndim, unsigned long nvar, const CConfig *config) : CFlowVariable(npoint, ndim, nvar, ndim + 9, EulerNPrimVarGrad(config, ndim), config), @@ -52,8 +59,7 @@ CEulerVariable::CEulerVariable(su2double density, const su2double *velocity, su2 (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND); const bool classical_rk4 = (config->GetKind_TimeIntScheme_Flow() == CLASSICAL_RK4_EXPLICIT); - nSecondaryVar = config->GetViscous() ? 8 : 2, - nSecondaryVarGrad = 2; + nSecondaryVar = EulerNSecVar(config); /*--- Solution initialization ---*/ @@ -156,10 +162,11 @@ bool CEulerVariable::SetPrimVar(unsigned long iPoint, CFluidModel *FluidModel) { } void CEulerVariable::SetSecondaryVar(unsigned long iPoint, CFluidModel *FluidModel) { + if (nSecondaryVar == 0) return; - /*--- Compute secondary thermo-physical properties (partial derivatives...) ---*/ + /*--- Compute secondary thermo-physical properties (partial derivatives...) ---*/ - SetdPdrho_e(iPoint, FluidModel->GetdPdrho_e()); - SetdPde_rho(iPoint, FluidModel->GetdPde_rho()); + SetdPdrho_e(iPoint, FluidModel->GetdPdrho_e()); + SetdPde_rho(iPoint, FluidModel->GetdPde_rho()); } diff --git a/SU2_CFD/src/variables/CNSVariable.cpp b/SU2_CFD/src/variables/CNSVariable.cpp index 365c5b5d870c..33823bd5c789 100644 --- a/SU2_CFD/src/variables/CNSVariable.cpp +++ b/SU2_CFD/src/variables/CNSVariable.cpp @@ -210,21 +210,22 @@ bool CNSVariable::SetPrimVar(unsigned long iPoint, su2double eddy_visc, su2doubl } void CNSVariable::SetSecondaryVar(unsigned long iPoint, CFluidModel *FluidModel) { + if (nSecondaryVar == 0) return; - /*--- Compute secondary thermodynamic properties (partial derivatives...) ---*/ + /*--- Compute secondary thermodynamic properties (partial derivatives...) ---*/ - SetdPdrho_e( iPoint, FluidModel->GetdPdrho_e() ); - SetdPde_rho( iPoint, FluidModel->GetdPde_rho() ); + SetdPdrho_e( iPoint, FluidModel->GetdPdrho_e() ); + SetdPde_rho( iPoint, FluidModel->GetdPde_rho() ); - SetdTdrho_e( iPoint, FluidModel->GetdTdrho_e() ); - SetdTde_rho( iPoint, FluidModel->GetdTde_rho() ); + SetdTdrho_e( iPoint, FluidModel->GetdTdrho_e() ); + SetdTde_rho( iPoint, FluidModel->GetdTde_rho() ); - /*--- Compute secondary thermo-physical properties (partial derivatives...) ---*/ + /*--- Compute secondary thermo-physical properties (partial derivatives...) ---*/ - Setdmudrho_T( iPoint, FluidModel->Getdmudrho_T() ); - SetdmudT_rho( iPoint, FluidModel->GetdmudT_rho() ); + Setdmudrho_T( iPoint, FluidModel->Getdmudrho_T() ); + SetdmudT_rho( iPoint, FluidModel->GetdmudT_rho() ); - Setdktdrho_T( iPoint, FluidModel->Getdktdrho_T() ); - SetdktdT_rho( iPoint, FluidModel->GetdktdT_rho() ); + Setdktdrho_T( iPoint, FluidModel->Getdktdrho_T() ); + SetdktdT_rho( iPoint, FluidModel->GetdktdT_rho() ); } From a3420393736c96c3b314ec36664d843f38878e68 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Sun, 19 Apr 2026 21:53:54 +0200 Subject: [PATCH 215/229] Avoid communicating su2double/passivedouble when passivedouble/su2mixedfloat are enough (#2788) * enum class * select the correct buffer * fix request types * fix nompi build * fix * simplify forward type and mixed precision logic * fix and updates * try to fix race condition * updates * more tolerance --- Common/include/code_config.hpp | 9 + Common/include/geometry/CGeometry.hpp | 111 ++++- Common/include/geometry/CPhysicalGeometry.hpp | 2 +- .../meshreader/CCGNSMeshReaderFVM.hpp | 2 +- .../grid_movement/CLinearElasticity.hpp | 5 - Common/include/linear_algebra/CSysSolve.hpp | 13 +- Common/include/option_structure.hpp | 18 +- .../include/parallelization/mpi_structure.hpp | 4 +- Common/src/geometry/CGeometry.cpp | 153 +++++-- Common/src/geometry/CPhysicalGeometry.cpp | 56 +-- .../meshreader/CCGNSMeshReaderFVM.cpp | 32 +- Common/src/linear_algebra/CSysMatrix.cpp | 27 +- Common/src/linear_algebra/CSysSolve.cpp | 34 +- Common/src/linear_algebra/CSysSolve_b.cpp | 5 +- Common/src/linear_algebra/CSysVector.cpp | 8 +- .../include/solvers/CFVMFlowSolverBase.hpp | 6 +- .../solvers/CGradientSmoothingSolver.hpp | 24 +- SU2_CFD/include/solvers/CScalarSolver.hpp | 2 +- SU2_CFD/include/solvers/CSolver.hpp | 13 +- SU2_CFD/src/fluid/CIdealGas.cpp | 13 +- SU2_CFD/src/iteration/CFEAIteration.cpp | 4 +- .../src/solvers/CGradientSmoothingSolver.cpp | 30 +- SU2_CFD/src/solvers/CIncNSSolver.cpp | 7 +- SU2_CFD/src/solvers/CNEMOEulerSolver.cpp | 3 +- SU2_CFD/src/solvers/CNSSolver.cpp | 7 +- SU2_CFD/src/solvers/CSolver.cpp | 65 +-- TestCases/TestCase.py | 8 +- TestCases/hybrid_regression.py | 16 +- TestCases/parallel_regression.py | 27 +- TestCases/parallel_regression_AD.py | 2 +- .../translating_NACA0012/forces_0.csv.ref | 400 +++++++++--------- .../forces_0.csv.ref | 400 +++++++++--------- TestCases/serial_regression.py | 20 +- TestCases/serial_regression_AD.py | 2 +- TestCases/tutorials.py | 6 +- TestCases/vandv.py | 8 +- 36 files changed, 841 insertions(+), 701 deletions(-) diff --git a/Common/include/code_config.hpp b/Common/include/code_config.hpp index 2585283d34d7..929cc2eb2544 100644 --- a/Common/include/code_config.hpp +++ b/Common/include/code_config.hpp @@ -139,11 +139,20 @@ using su2double = double; using passivedouble = double; /*--- Define a type for potentially lower precision operations. ---*/ +#ifndef CODI_FORWARD_TYPE #ifdef USE_MIXED_PRECISION using su2mixedfloat = float; #else using su2mixedfloat = passivedouble; #endif +#else +/*--- There is no lower precision for forward AD so undefine the macro to simplify + * the logic needed to deal with the multiple type configurations. ---*/ +#ifdef USE_MIXED_PRECISION +#undef USE_MIXED_PRECISION +#endif +using su2mixedfloat = su2double; +#endif /*--- Detect if OpDiLib has to be used. ---*/ #if defined(HAVE_OMP) && defined(CODI_REVERSE_TYPE) diff --git a/Common/include/geometry/CGeometry.hpp b/Common/include/geometry/CGeometry.hpp index 62600b089588..0b4055500d5a 100644 --- a/Common/include/geometry/CGeometry.hpp +++ b/Common/include/geometry/CGeometry.hpp @@ -284,11 +284,23 @@ class CGeometry { in point-to-point comms. */ su2double* bufD_P2PRecv{nullptr}; /*!< \brief Data structure for su2double point-to-point receive. */ su2double* bufD_P2PSend{nullptr}; /*!< \brief Data structure for su2double point-to-point send. */ +#ifdef CODI_REVERSE_TYPE + passivedouble* bufPD_P2PRecv{nullptr}; /*!< \brief Data structure for passivedouble point-to-point receive. */ + passivedouble* bufPD_P2PSend{nullptr}; /*!< \brief Data structure for passivedouble point-to-point send. */ +#endif +#ifdef USE_MIXED_PRECISION + su2mixedfloat* bufF_P2PRecv{nullptr}; /*!< \brief Data structure for su2mixedfloat point-to-point receive. */ + su2mixedfloat* bufF_P2PSend{nullptr}; /*!< \brief Data structure for su2mixedfloat point-to-point send. */ +#endif unsigned short* bufS_P2PRecv{nullptr}; /*!< \brief Data structure for unsigned long point-to-point receive. */ unsigned short* bufS_P2PSend{nullptr}; /*!< \brief Data structure for unsigned long point-to-point send. */ SU2_MPI::Request* req_P2PSend{nullptr}; /*!< \brief Data structure for point-to-point send requests. */ SU2_MPI::Request* req_P2PRecv{nullptr}; /*!< \brief Data structure for point-to-point recv requests. */ + using PassiveRequest = typename SelectMPIWrapper::W::Request; + PassiveRequest* reqP_P2PSend{nullptr}; /*!< \brief Data structure for point-to-point send requests. */ + PassiveRequest* reqP_P2PRecv{nullptr}; /*!< \brief Data structure for point-to-point recv requests. */ + /*--- Data structures for periodic communications. ---*/ int maxCountPerPeriodicPoint{0}; /*!< \brief Maximum number of pieces of data sent per vertex in periodic comms. */ @@ -370,7 +382,7 @@ class CGeometry { * \param[in] countPerPoint - Number of variables per point. * \param[in] val_reverse - Boolean controlling forward or reverse communication between neighbors. */ - void PostP2PRecvs(CGeometry* geometry, const CConfig* config, unsigned short commType, unsigned short countPerPoint, + void PostP2PRecvs(CGeometry* geometry, const CConfig* config, COMM_TYPE commType, unsigned short countPerPoint, bool val_reverse) const; /*! @@ -383,9 +395,98 @@ class CGeometry { * \param[in] val_iMessage - Index of the message in the order they are stored. * \param[in] val_reverse - Boolean controlling forward or reverse communication between neighbors. */ - void PostP2PSends(CGeometry* geometry, const CConfig* config, unsigned short commType, unsigned short countPerPoint, + void PostP2PSends(CGeometry* geometry, const CConfig* config, COMM_TYPE commType, unsigned short countPerPoint, int val_iMessage, bool val_reverse) const; + /*! + * \brief Returns the COMM_TYPE enum for a given data type. + */ + template + COMM_TYPE GetCommType() const { + if constexpr (std::is_same_v) { + return COMM_TYPE::DOUBLE; + } else if constexpr (std::is_same_v) { + return COMM_TYPE::PASSIVE_DOUBLE; + } else if constexpr (std::is_same_v) { + return COMM_TYPE::FLOAT; + } else { + static_assert(std::is_same_v); + return COMM_TYPE::UNSIGNED_SHORT; + } + } + + /*! + * \brief Returns the send buffer for a given data type. + */ + template + auto* GetP2PSendBuf() const { + if constexpr (std::is_same_v) { + return bufD_P2PSend; +#ifdef CODI_REVERSE_TYPE + } else if constexpr (std::is_same_v) { + return bufPD_P2PSend; +#endif +#ifdef USE_MIXED_PRECISION + } else if constexpr (std::is_same_v) { + return bufF_P2PSend; +#endif + } else { + static_assert(std::is_same_v); + return bufS_P2PSend; + } + } + + /*! + * \brief Returns the receive buffer for a given data type. + */ + template + auto* GetP2PRecvBuf() const { + if constexpr (std::is_same_v) { + return bufD_P2PRecv; +#ifdef CODI_REVERSE_TYPE + } else if constexpr (std::is_same_v) { + return bufPD_P2PRecv; +#endif +#ifdef USE_MIXED_PRECISION + } else if constexpr (std::is_same_v) { + return bufF_P2PRecv; +#endif + } else { + static_assert(std::is_same_v); + return bufS_P2PRecv; + } + } + + /*! + * \brief Returns the send requests for a given data type. + */ + template + auto* GetP2PSendReq() const { + if constexpr (std::is_same_v) { + return req_P2PSend; + } else if constexpr (std::is_same_v || std::is_same_v) { + return reqP_P2PSend; + } else { + static_assert(std::is_same_v); + return req_P2PSend; + } + } + + /*! + * \brief Returns the receive requests for a given data type. + */ + template + auto* GetP2PRecvReq() const { + if constexpr (std::is_same_v) { + return req_P2PRecv; + } else if constexpr (std::is_same_v || std::is_same_v) { + return reqP_P2PRecv; + } else { + static_assert(std::is_same_v); + return req_P2PRecv; + } + } + /*! * \brief Routine to set up persistent data structures for periodic communications. * \param[in] geometry - Geometrical definition of the problem. @@ -408,7 +509,7 @@ class CGeometry { * \param[in] commType - Enumerated type for the quantity to be communicated. * \param[in] countPerPeriodicPoint - Number of variables per point. */ - void PostPeriodicRecvs(CGeometry* geometry, const CConfig* config, unsigned short commType, + void PostPeriodicRecvs(CGeometry* geometry, const CConfig* config, COMM_TYPE commType, unsigned short countPerPeriodicPoint); /*! @@ -420,7 +521,7 @@ class CGeometry { * \param[in] countPerPeriodicPoint - Number of variables per point. * \param[in] val_iMessage - Index of the message in the order they are stored. */ - void PostPeriodicSends(CGeometry* geometry, const CConfig* config, unsigned short commType, + void PostPeriodicSends(CGeometry* geometry, const CConfig* config, COMM_TYPE commType, unsigned short countPerPeriodicPoint, int val_iMessage) const; /*! @@ -431,7 +532,7 @@ class CGeometry { * \param[out] MPI_TYPE - Enumerated type for the datatype of the quantity to be communicated. */ void GetCommCountAndType(const CConfig* config, MPI_QUANTITIES commType, unsigned short& COUNT_PER_POINT, - unsigned short& MPI_TYPE) const; + COMM_TYPE& MPI_TYPE) const; /*! * \brief Routine to load a geometric quantity into the data structures for MPI point-to-point communication and to diff --git a/Common/include/geometry/CPhysicalGeometry.hpp b/Common/include/geometry/CPhysicalGeometry.hpp index 89176d996033..c34e6fc8ab46 100644 --- a/Common/include/geometry/CPhysicalGeometry.hpp +++ b/Common/include/geometry/CPhysicalGeometry.hpp @@ -220,7 +220,7 @@ class CPhysicalGeometry final : public CGeometry { */ void InitiateCommsAll(void* bufSend, const int* nElemSend, SU2_MPI::Request* sendReq, void* bufRecv, const int* nElemRecv, SU2_MPI::Request* recvReq, unsigned short countPerElem, - unsigned short commType); + COMM_TYPE commType); /*! * \brief Routine to complete the set of non-blocking communications launched with InitiateComms() with MPI_Waitany(). diff --git a/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp b/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp index 77da960f9416..5bd136793e83 100644 --- a/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp +++ b/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp @@ -76,7 +76,7 @@ class CCGNSMeshReaderFVM final : public CCGNSMeshReaderBase { */ void InitiateCommsAll(void* bufSend, const int* nElemSend, SU2_MPI::Request* sendReq, void* bufRecv, const int* nElemRecv, SU2_MPI::Request* recvReq, unsigned short countPerElem, - unsigned short commType); + COMM_TYPE commType); /*! * \brief Routine to complete the set of non-blocking communications launched with InitiateComms() with MPI_Waitany(). diff --git a/Common/include/grid_movement/CLinearElasticity.hpp b/Common/include/grid_movement/CLinearElasticity.hpp index 46d1b12d2ee4..eec816399c20 100644 --- a/Common/include/grid_movement/CLinearElasticity.hpp +++ b/Common/include/grid_movement/CLinearElasticity.hpp @@ -45,13 +45,8 @@ class CLinearElasticity final : public CVolumetricMovement { unsigned long nIterMesh; /*!< \brief Number of iterations in the mesh update. +*/ -#ifndef CODI_FORWARD_TYPE CSysMatrix StiffMatrix; /*!< \brief Stiffness matrix of the elasticity problem. */ CSysSolve System; /*!< \brief Linear solver/smoother. */ -#else - CSysMatrix StiffMatrix; - CSysSolve System; -#endif CSysVector LinSysSol; CSysVector LinSysRes; diff --git a/Common/include/linear_algebra/CSysSolve.hpp b/Common/include/linear_algebra/CSysSolve.hpp index 9abe78396783..943a2e49b394 100644 --- a/Common/include/linear_algebra/CSysSolve.hpp +++ b/Common/include/linear_algebra/CSysSolve.hpp @@ -425,8 +425,17 @@ class CSysSolve { * \param[in] config - Definition of the particular problem. * \param[in] directCall - If this method is called directly, or in AD context. */ - unsigned long Solve_b(MatrixType& Jacobian, const CSysVector& LinSysRes, CSysVector& LinSysSol, - CGeometry* geometry, const CConfig* config, bool directCall = true); + unsigned long Solve_b(MatrixType& Jacobian, const VectorType& LinSysRes, VectorType& LinSysSol, CGeometry* geometry, + const CConfig* config, bool directCall = true); + + template > = 0> + unsigned long Solve_b(MatrixType& Jacobian, const CSysVector& LinSysRes, CSysVector& LinSysSol, + CGeometry* geometry, const CConfig* config, bool directCall = true) { + HandleTemporariesIn(LinSysRes, LinSysSol); + auto iter = Solve_b(Jacobian, *LinSysRes_ptr, *LinSysSol_ptr, geometry, config, directCall); + HandleTemporariesOut(LinSysSol); + return iter; + } /*! * \brief Get the number of iterations. diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index b3d2478cf5f2..38d984c4ea9c 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -113,13 +113,17 @@ const int MASTER_NODE = 0; /*!< \brief Master node for MPI parallelization. const int SINGLE_NODE = 1; /*!< \brief There is only a node in the MPI parallelization. */ const int SINGLE_ZONE = 1; /*!< \brief There is only a zone. */ -const unsigned short COMM_TYPE_UNSIGNED_LONG = 1; /*!< \brief Communication type for unsigned long. */ -const unsigned short COMM_TYPE_LONG = 2; /*!< \brief Communication type for long. */ -const unsigned short COMM_TYPE_UNSIGNED_SHORT = 3; /*!< \brief Communication type for unsigned short. */ -const unsigned short COMM_TYPE_DOUBLE = 4; /*!< \brief Communication type for double. */ -const unsigned short COMM_TYPE_CHAR = 5; /*!< \brief Communication type for char. */ -const unsigned short COMM_TYPE_SHORT = 6; /*!< \brief Communication type for short. */ -const unsigned short COMM_TYPE_INT = 7; /*!< \brief Communication type for int. */ +enum class COMM_TYPE { + UNSIGNED_LONG, /*!< \brief Communication type for unsigned long. */ + LONG, /*!< \brief Communication type for long. */ + UNSIGNED_SHORT, /*!< \brief Communication type for unsigned short. */ + FLOAT, /*!< \brief Communication type for su2mixedfloat. */ + DOUBLE, /*!< \brief Communication type for double. */ + PASSIVE_DOUBLE, /*!< \brief Communication type for passivedouble. */ + CHAR, /*!< \brief Communication type for char. */ + SHORT, /*!< \brief Communication type for short. */ + INT, /*!< \brief Communication type for int. */ +}; /*! * \brief Types of geometric entities based on VTK nomenclature diff --git a/Common/include/parallelization/mpi_structure.hpp b/Common/include/parallelization/mpi_structure.hpp index d19cfe8c2372..adca71a89a9d 100644 --- a/Common/include/parallelization/mpi_structure.hpp +++ b/Common/include/parallelization/mpi_structure.hpp @@ -81,7 +81,7 @@ extern MediTypes* mediTypes; #else class CBaseMPIWrapper; -typedef CBaseMPIWrapper SU2_MPI; +using SU2_MPI = CBaseMPIWrapper; #endif // defined CODI_REVERSE_TYPE || defined CODI_FORWARD_TYPE /*! @@ -632,7 +632,7 @@ struct SelectMPIWrapper { #endif /*--- Specialize for the low precision type. ---*/ -#if defined USE_MIXED_PRECISION +#if defined(USE_MIXED_PRECISION) template <> struct SelectMPIWrapper { #if defined HAVE_MPI diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index 2b8dfe3c6361..b99ef022752f 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -96,13 +96,23 @@ CGeometry::~CGeometry() { delete[] bufD_P2PRecv; delete[] bufD_P2PSend; - +#ifdef CODI_REVERSE_TYPE + delete[] bufPD_P2PRecv; + delete[] bufPD_P2PSend; +#endif +#ifdef USE_MIXED_PRECISION + delete[] bufF_P2PRecv; + delete[] bufF_P2PSend; +#endif delete[] bufS_P2PRecv; delete[] bufS_P2PSend; delete[] req_P2PSend; delete[] req_P2PRecv; + delete[] reqP_P2PSend; + delete[] reqP_P2PRecv; + delete[] nPoint_P2PRecv; delete[] nPoint_P2PSend; @@ -279,12 +289,11 @@ void CGeometry::PreprocessP2PComms(CGeometry* geometry, CConfig* config) { /*--- Allocate memory for the MPI requests if we need to communicate. ---*/ - if (nP2PSend > 0) { - req_P2PSend = new SU2_MPI::Request[nP2PSend]; - } - if (nP2PRecv > 0) { - req_P2PRecv = new SU2_MPI::Request[nP2PRecv]; - } + if (nP2PSend > 0) req_P2PSend = new SU2_MPI::Request[nP2PSend]; + if (nP2PRecv > 0) req_P2PRecv = new SU2_MPI::Request[nP2PRecv]; + + if (nP2PSend > 0) reqP_P2PSend = new PassiveRequest[nP2PSend]; + if (nP2PRecv > 0) reqP_P2PRecv = new PassiveRequest[nP2PRecv]; /*--- Build lists of local index values for send. ---*/ @@ -345,25 +354,30 @@ void CGeometry::AllocateP2PComms(unsigned short countPerPoint) { /*--- Store the larger packet size to the class data. ---*/ maxCountPerPoint = countPerPoint; + const auto send_size = maxCountPerPoint * nPoint_P2PSend[nP2PSend]; + const auto recv_size = maxCountPerPoint * nPoint_P2PRecv[nP2PSend]; /*-- Deallocate and reallocate our su2double cummunication memory. ---*/ - - delete[] bufD_P2PSend; - bufD_P2PSend = new su2double[maxCountPerPoint * nPoint_P2PSend[nP2PSend]](); - - delete[] bufD_P2PRecv; - bufD_P2PRecv = new su2double[maxCountPerPoint * nPoint_P2PRecv[nP2PRecv]](); - - delete[] bufS_P2PSend; - bufS_P2PSend = new unsigned short[maxCountPerPoint * nPoint_P2PSend[nP2PSend]](); - - delete[] bufS_P2PRecv; - bufS_P2PRecv = new unsigned short[maxCountPerPoint * nPoint_P2PRecv[nP2PRecv]](); +#define SU2_ALLOC_COMM_BUFFERS(SEND, RECV, TYPE) \ + delete[] SEND; \ + SEND = new TYPE[send_size](); \ + delete[] RECV; \ + RECV = new TYPE[recv_size](); + + SU2_ALLOC_COMM_BUFFERS(bufD_P2PSend, bufD_P2PRecv, su2double) + SU2_ALLOC_COMM_BUFFERS(bufS_P2PSend, bufS_P2PRecv, unsigned short) +#ifdef CODI_REVERSE_TYPE + SU2_ALLOC_COMM_BUFFERS(bufPD_P2PSend, bufPD_P2PRecv, passivedouble) +#endif +#ifdef USE_MIXED_PRECISION + SU2_ALLOC_COMM_BUFFERS(bufF_P2PSend, bufF_P2PRecv, su2mixedfloat) +#endif +#undef SU2_ALLOC_COMM_BUFFERS } END_SU2_OMP_SAFE_GLOBAL_ACCESS } -void CGeometry::PostP2PRecvs(CGeometry* geometry, const CConfig* config, unsigned short commType, +void CGeometry::PostP2PRecvs(CGeometry* geometry, const CConfig* config, COMM_TYPE commType, unsigned short countPerPoint, bool val_reverse) const { /*--- Launch the non-blocking recv's first. Note that we have stored the counts and sources, so we can launch these before we even load @@ -404,11 +418,23 @@ void CGeometry::PostP2PRecvs(CGeometry* geometry, const CConfig* config, unsigne are the correct size. ---*/ switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: SU2_MPI::Irecv(&(bufD_P2PSend[offset]), count, MPI_DOUBLE, source, tag, SU2_MPI::GetComm(), &(req_P2PRecv[iRecv])); break; - case COMM_TYPE_UNSIGNED_SHORT: +#ifdef CODI_REVERSE_TYPE + case COMM_TYPE::PASSIVE_DOUBLE: + SelectMPIWrapper::W::Irecv(&(bufPD_P2PSend[offset]), count, MPI_DOUBLE, source, tag, + SU2_MPI::GetComm(), &GetP2PRecvReq()[iRecv]); + break; +#endif +#ifdef USE_MIXED_PRECISION + case COMM_TYPE::FLOAT: + SelectMPIWrapper::W::Irecv(&(bufF_P2PSend[offset]), count, MPI_FLOAT, source, tag, + SU2_MPI::GetComm(), &GetP2PRecvReq()[iRecv]); + break; +#endif + case COMM_TYPE::UNSIGNED_SHORT: SU2_MPI::Irecv(&(bufS_P2PSend[offset]), count, MPI_UNSIGNED_SHORT, source, tag, SU2_MPI::GetComm(), &(req_P2PRecv[iRecv])); break; @@ -439,11 +465,23 @@ void CGeometry::PostP2PRecvs(CGeometry* geometry, const CConfig* config, unsigne /*--- Post non-blocking recv for this proc. ---*/ switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: SU2_MPI::Irecv(&(bufD_P2PRecv[offset]), count, MPI_DOUBLE, source, tag, SU2_MPI::GetComm(), &(req_P2PRecv[iMessage])); break; - case COMM_TYPE_UNSIGNED_SHORT: +#ifdef CODI_REVERSE_TYPE + case COMM_TYPE::PASSIVE_DOUBLE: + SelectMPIWrapper::W::Irecv(&(bufPD_P2PRecv[offset]), count, MPI_DOUBLE, source, tag, + SU2_MPI::GetComm(), &GetP2PRecvReq()[iMessage]); + break; +#endif +#ifdef USE_MIXED_PRECISION + case COMM_TYPE::FLOAT: + SelectMPIWrapper::W::Irecv(&(bufF_P2PRecv[offset]), count, MPI_FLOAT, source, tag, + SU2_MPI::GetComm(), &GetP2PRecvReq()[iMessage]); + break; +#endif + case COMM_TYPE::UNSIGNED_SHORT: SU2_MPI::Irecv(&(bufS_P2PRecv[offset]), count, MPI_UNSIGNED_SHORT, source, tag, SU2_MPI::GetComm(), &(req_P2PRecv[iMessage])); break; @@ -456,7 +494,7 @@ void CGeometry::PostP2PRecvs(CGeometry* geometry, const CConfig* config, unsigne END_SU2_OMP_MASTER } -void CGeometry::PostP2PSends(CGeometry* geometry, const CConfig* config, unsigned short commType, +void CGeometry::PostP2PSends(CGeometry* geometry, const CConfig* config, COMM_TYPE commType, unsigned short countPerPoint, int val_iSend, bool val_reverse) const { /*--- Post the non-blocking send as soon as the buffer is loaded. ---*/ @@ -492,11 +530,23 @@ void CGeometry::PostP2PSends(CGeometry* geometry, const CConfig* config, unsigne are the correct size. ---*/ switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: SU2_MPI::Isend(&(bufD_P2PRecv[offset]), count, MPI_DOUBLE, dest, tag, SU2_MPI::GetComm(), &(req_P2PSend[val_iSend])); break; - case COMM_TYPE_UNSIGNED_SHORT: +#ifdef CODI_REVERSE_TYPE + case COMM_TYPE::PASSIVE_DOUBLE: + SelectMPIWrapper::W::Isend(&(bufPD_P2PRecv[offset]), count, MPI_DOUBLE, dest, tag, + SU2_MPI::GetComm(), &GetP2PSendReq()[val_iSend]); + break; +#endif +#ifdef USE_MIXED_PRECISION + case COMM_TYPE::FLOAT: + SelectMPIWrapper::W::Isend(&(bufF_P2PRecv[offset]), count, MPI_FLOAT, dest, tag, + SU2_MPI::GetComm(), &GetP2PSendReq()[val_iSend]); + break; +#endif + case COMM_TYPE::UNSIGNED_SHORT: SU2_MPI::Isend(&(bufS_P2PRecv[offset]), count, MPI_UNSIGNED_SHORT, dest, tag, SU2_MPI::GetComm(), &(req_P2PSend[val_iSend])); break; @@ -527,11 +577,23 @@ void CGeometry::PostP2PSends(CGeometry* geometry, const CConfig* config, unsigne /*--- Post non-blocking send for this proc. ---*/ switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: SU2_MPI::Isend(&(bufD_P2PSend[offset]), count, MPI_DOUBLE, dest, tag, SU2_MPI::GetComm(), &(req_P2PSend[val_iSend])); break; - case COMM_TYPE_UNSIGNED_SHORT: +#ifdef CODI_REVERSE_TYPE + case COMM_TYPE::PASSIVE_DOUBLE: + SelectMPIWrapper::W::Isend(&(bufPD_P2PSend[offset]), count, MPI_DOUBLE, dest, tag, + SU2_MPI::GetComm(), &GetP2PSendReq()[val_iSend]); + break; +#endif +#ifdef USE_MIXED_PRECISION + case COMM_TYPE::FLOAT: + SelectMPIWrapper::W::Isend(&(bufF_P2PSend[offset]), count, MPI_FLOAT, dest, tag, + SU2_MPI::GetComm(), &GetP2PSendReq()[val_iSend]); + break; +#endif + case COMM_TYPE::UNSIGNED_SHORT: SU2_MPI::Isend(&(bufS_P2PSend[offset]), count, MPI_UNSIGNED_SHORT, dest, tag, SU2_MPI::GetComm(), &(req_P2PSend[val_iSend])); break; @@ -544,30 +606,30 @@ void CGeometry::PostP2PSends(CGeometry* geometry, const CConfig* config, unsigne } void CGeometry::GetCommCountAndType(const CConfig* config, MPI_QUANTITIES commType, unsigned short& COUNT_PER_POINT, - unsigned short& MPI_TYPE) const { + COMM_TYPE& MPI_TYPE) const { switch (commType) { case MPI_QUANTITIES::COORDINATES: COUNT_PER_POINT = nDim; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::GRID_VELOCITY: COUNT_PER_POINT = nDim; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::COORDINATES_OLD: if (config->GetTime_Marching() == TIME_MARCHING::DT_STEPPING_2ND) COUNT_PER_POINT = nDim * 2; else COUNT_PER_POINT = nDim; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::MAX_LENGTH: COUNT_PER_POINT = 1; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::NEIGHBORS: COUNT_PER_POINT = 1; - MPI_TYPE = COMM_TYPE_UNSIGNED_SHORT; + MPI_TYPE = COMM_TYPE::UNSIGNED_SHORT; break; default: SU2_MPI::Error("Unrecognized quantity for point-to-point MPI comms.", CURRENT_FUNCTION); @@ -582,7 +644,7 @@ void CGeometry::InitiateComms(CGeometry* geometry, const CConfig* config, MPI_QU unsigned short iDim; unsigned short COUNT_PER_POINT = 0; - unsigned short MPI_TYPE = 0; + COMM_TYPE MPI_TYPE{}; unsigned long iPoint, msg_offset, buf_offset; @@ -677,7 +739,8 @@ void CGeometry::CompleteComms(CGeometry* geometry, const CConfig* config, MPI_QU /*--- Local variables ---*/ - unsigned short iDim, COUNT_PER_POINT = 0, MPI_TYPE = 0; + unsigned short iDim, COUNT_PER_POINT = 0; + COMM_TYPE MPI_TYPE{}; unsigned long iPoint, iRecv, nRecv, msg_offset, buf_offset; int ind, source, iMessage, jRecv; @@ -1465,7 +1528,7 @@ void CGeometry::AllocatePeriodicComms(unsigned short countPerPeriodicPoint) { END_SU2_OMP_SAFE_GLOBAL_ACCESS } -void CGeometry::PostPeriodicRecvs(CGeometry* geometry, const CConfig* config, unsigned short commType, +void CGeometry::PostPeriodicRecvs(CGeometry* geometry, const CConfig* config, COMM_TYPE commType, unsigned short countPerPeriodicPoint) { /*--- In parallel, communicate the data with non-blocking send/recv. ---*/ @@ -1498,11 +1561,11 @@ void CGeometry::PostPeriodicRecvs(CGeometry* geometry, const CConfig* config, un /*--- Post non-blocking recv for this proc. ---*/ switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: SU2_MPI::Irecv(&(static_cast(bufD_PeriodicRecv)[offset]), count, MPI_DOUBLE, source, tag, SU2_MPI::GetComm(), &(req_PeriodicRecv[iRecv])); break; - case COMM_TYPE_UNSIGNED_SHORT: + case COMM_TYPE::UNSIGNED_SHORT: SU2_MPI::Irecv(&(static_cast(bufS_PeriodicRecv)[offset]), count, MPI_UNSIGNED_SHORT, source, tag, SU2_MPI::GetComm(), &(req_PeriodicRecv[iRecv])); break; @@ -1516,7 +1579,7 @@ void CGeometry::PostPeriodicRecvs(CGeometry* geometry, const CConfig* config, un #endif } -void CGeometry::PostPeriodicSends(CGeometry* geometry, const CConfig* config, unsigned short commType, +void CGeometry::PostPeriodicSends(CGeometry* geometry, const CConfig* config, COMM_TYPE commType, unsigned short countPerPeriodicPoint, int val_iSend) const { /*--- In parallel, communicate the data with non-blocking send/recv. ---*/ @@ -1545,11 +1608,11 @@ void CGeometry::PostPeriodicSends(CGeometry* geometry, const CConfig* config, un /*--- Post non-blocking send for this proc. ---*/ switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: SU2_MPI::Isend(&(static_cast(bufD_PeriodicSend)[offset]), count, MPI_DOUBLE, dest, tag, SU2_MPI::GetComm(), &(req_PeriodicSend[val_iSend])); break; - case COMM_TYPE_UNSIGNED_SHORT: + case COMM_TYPE::UNSIGNED_SHORT: SU2_MPI::Isend(&(static_cast(bufS_PeriodicSend)[offset]), count, MPI_UNSIGNED_SHORT, dest, tag, SU2_MPI::GetComm(), &(req_PeriodicSend[val_iSend])); break; @@ -1570,10 +1633,10 @@ void CGeometry::PostPeriodicSends(CGeometry* geometry, const CConfig* config, un myFinal = nPoint_PeriodicSend[val_iSend + 1] * countPerPeriodicPoint; switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: parallelCopy(myFinal - myStart, &bufD_PeriodicSend[myStart], &bufD_PeriodicRecv[iRecv]); break; - case COMM_TYPE_UNSIGNED_SHORT: + case COMM_TYPE::UNSIGNED_SHORT: parallelCopy(myFinal - myStart, &bufS_PeriodicSend[myStart], &bufS_PeriodicRecv[iRecv]); break; default: diff --git a/Common/src/geometry/CPhysicalGeometry.cpp b/Common/src/geometry/CPhysicalGeometry.cpp index 8ed3f5c6103e..0d3c0d70001a 100644 --- a/Common/src/geometry/CPhysicalGeometry.cpp +++ b/Common/src/geometry/CPhysicalGeometry.cpp @@ -652,9 +652,9 @@ void CPhysicalGeometry::DistributeColoring(const CConfig* config, CGeometry* geo /*--- Launch the non-blocking sends and receives. ---*/ InitiateCommsAll(colorSend, nPoint_Send, colorSendReq, colorRecv, nPoint_Recv, colorRecvReq, 1, - COMM_TYPE_UNSIGNED_LONG); + COMM_TYPE::UNSIGNED_LONG); - InitiateCommsAll(idSend, nPoint_Send, idSendReq, idRecv, nPoint_Recv, idRecvReq, 1, COMM_TYPE_UNSIGNED_LONG); + InitiateCommsAll(idSend, nPoint_Send, idSendReq, idRecv, nPoint_Recv, idRecvReq, 1, COMM_TYPE::UNSIGNED_LONG); /*--- Copy my own rank's data into the recv buffer directly. ---*/ @@ -904,9 +904,9 @@ void CPhysicalGeometry::DistributeVolumeConnectivity(const CConfig* config, CGeo /*--- Launch the non-blocking sends and receives. ---*/ InitiateCommsAll(connSend, nElem_Send, connSendReq, connRecv, nElem_Recv, connRecvReq, NODES_PER_ELEMENT, - COMM_TYPE_UNSIGNED_LONG); + COMM_TYPE::UNSIGNED_LONG); - InitiateCommsAll(idSend, nElem_Send, idSendReq, idRecv, nElem_Recv, idRecvReq, 1, COMM_TYPE_UNSIGNED_LONG); + InitiateCommsAll(idSend, nElem_Send, idSendReq, idRecv, nElem_Recv, idRecvReq, 1, COMM_TYPE::UNSIGNED_LONG); /*--- Copy my own rank's data into the recv buffer directly. ---*/ @@ -1199,11 +1199,11 @@ void CPhysicalGeometry::DistributePoints(const CConfig* config, CGeometry* geome /*--- Launch the non-blocking sends and receives. ---*/ InitiateCommsAll(colorSend, nPoint_Send, colorSendReq, colorRecv, nPoint_Recv, colorRecvReq, 1, - COMM_TYPE_UNSIGNED_LONG); + COMM_TYPE::UNSIGNED_LONG); - InitiateCommsAll(idSend, nPoint_Send, idSendReq, idRecv, nPoint_Recv, idRecvReq, 1, COMM_TYPE_UNSIGNED_LONG); + InitiateCommsAll(idSend, nPoint_Send, idSendReq, idRecv, nPoint_Recv, idRecvReq, 1, COMM_TYPE::UNSIGNED_LONG); - InitiateCommsAll(coordSend, nPoint_Send, coordSendReq, coordRecv, nPoint_Recv, coordRecvReq, nDim, COMM_TYPE_DOUBLE); + InitiateCommsAll(coordSend, nPoint_Send, coordSendReq, coordRecv, nPoint_Recv, coordRecvReq, nDim, COMM_TYPE::DOUBLE); /*--- Copy my own rank's data into the recv buffer directly. ---*/ @@ -1506,12 +1506,12 @@ void CPhysicalGeometry::PartitionSurfaceConnectivity(CConfig* config, CGeometry* /*--- Launch the non-blocking sends and receives. ---*/ InitiateCommsAll(connSend, nElem_Send, connSendReq, connRecv, nElem_Recv, connRecvReq, NODES_PER_ELEMENT, - COMM_TYPE_UNSIGNED_LONG); + COMM_TYPE::UNSIGNED_LONG); InitiateCommsAll(markerSend, nElem_Send, markerSendReq, markerRecv, nElem_Recv, markerRecvReq, 1, - COMM_TYPE_UNSIGNED_LONG); + COMM_TYPE::UNSIGNED_LONG); - InitiateCommsAll(idSend, nElem_Send, idSendReq, idRecv, nElem_Recv, idRecvReq, 1, COMM_TYPE_UNSIGNED_LONG); + InitiateCommsAll(idSend, nElem_Send, idSendReq, idRecv, nElem_Recv, idRecvReq, 1, COMM_TYPE::UNSIGNED_LONG); /*--- Copy my own rank's data into the recv buffer directly. ---*/ @@ -1845,12 +1845,12 @@ void CPhysicalGeometry::DistributeSurfaceConnectivity(CConfig* config, CGeometry /*--- Launch the non-blocking sends and receives. ---*/ InitiateCommsAll(connSend, nElem_Send, connSendReq, connRecv, nElem_Recv, connRecvReq, NODES_PER_ELEMENT, - COMM_TYPE_UNSIGNED_LONG); + COMM_TYPE::UNSIGNED_LONG); InitiateCommsAll(markerSend, nElem_Send, markerSendReq, markerRecv, nElem_Recv, markerRecvReq, 1, - COMM_TYPE_UNSIGNED_LONG); + COMM_TYPE::UNSIGNED_LONG); - InitiateCommsAll(idSend, nElem_Send, idSendReq, idRecv, nElem_Recv, idRecvReq, 1, COMM_TYPE_UNSIGNED_LONG); + InitiateCommsAll(idSend, nElem_Send, idSendReq, idRecv, nElem_Recv, idRecvReq, 1, COMM_TYPE::UNSIGNED_LONG); /*--- Copy my own rank's data into the recv buffer directly. ---*/ @@ -2682,7 +2682,7 @@ void CPhysicalGeometry::LoadSurfaceElements(CConfig* config, CGeometry* geometry void CPhysicalGeometry::InitiateCommsAll(void* bufSend, const int* nElemSend, SU2_MPI::Request* sendReq, void* bufRecv, const int* nElemRecv, SU2_MPI::Request* recvReq, unsigned short countPerElem, - unsigned short commType) { + COMM_TYPE commType) { /*--- Local variables ---*/ int iMessage, iProc, offset, nElem, count, source, dest, tag; @@ -2715,31 +2715,31 @@ void CPhysicalGeometry::InitiateCommsAll(void* bufSend, const int* nElemSend, SU tag = iProc + 1; switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_DOUBLE, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_UNSIGNED_LONG: + case COMM_TYPE::UNSIGNED_LONG: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_UNSIGNED_LONG, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_LONG: + case COMM_TYPE::LONG: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_LONG, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_UNSIGNED_SHORT: + case COMM_TYPE::UNSIGNED_SHORT: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_UNSIGNED_SHORT, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_CHAR: + case COMM_TYPE::CHAR: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_CHAR, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_SHORT: + case COMM_TYPE::SHORT: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_SHORT, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_INT: + case COMM_TYPE::INT: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_INT, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; @@ -2781,31 +2781,31 @@ void CPhysicalGeometry::InitiateCommsAll(void* bufSend, const int* nElemSend, SU tag = rank + 1; switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_DOUBLE, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_UNSIGNED_LONG: + case COMM_TYPE::UNSIGNED_LONG: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_UNSIGNED_LONG, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_LONG: + case COMM_TYPE::LONG: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_LONG, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_UNSIGNED_SHORT: + case COMM_TYPE::UNSIGNED_SHORT: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_UNSIGNED_SHORT, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_CHAR: + case COMM_TYPE::CHAR: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_CHAR, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_SHORT: + case COMM_TYPE::SHORT: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_SHORT, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_INT: + case COMM_TYPE::INT: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_INT, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; diff --git a/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp index bd21c3976953..92969580f753 100644 --- a/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp @@ -410,7 +410,7 @@ void CCGNSMeshReaderFVM::ReadCGNSVolumeSection(int val_section) { /*--- Launch the non-blocking sends and receives. ---*/ InitiateCommsAll(connSend, nElem_Send, connSendReq, connRecv, nElem_Recv, connRecvReq, SU2_CONN_SIZE, - COMM_TYPE_UNSIGNED_LONG); + COMM_TYPE::UNSIGNED_LONG); /*--- Copy the current rank's data into the recv buffer directly. ---*/ @@ -657,7 +657,7 @@ void CCGNSMeshReaderFVM::ReformatCGNSSurfaceConnectivity() { void CCGNSMeshReaderFVM::InitiateCommsAll(void* bufSend, const int* nElemSend, SU2_MPI::Request* sendReq, void* bufRecv, const int* nElemRecv, SU2_MPI::Request* recvReq, unsigned short countPerElem, - unsigned short commType) { + COMM_TYPE commType) { /*--- Local variables ---*/ int iMessage, iProc, offset, nElem, count, source, dest, tag; @@ -690,31 +690,31 @@ void CCGNSMeshReaderFVM::InitiateCommsAll(void* bufSend, const int* nElemSend, S tag = iProc + 1; switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_DOUBLE, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_UNSIGNED_LONG: + case COMM_TYPE::UNSIGNED_LONG: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_UNSIGNED_LONG, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_LONG: + case COMM_TYPE::LONG: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_LONG, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_UNSIGNED_SHORT: + case COMM_TYPE::UNSIGNED_SHORT: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_UNSIGNED_SHORT, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_CHAR: + case COMM_TYPE::CHAR: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_CHAR, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_SHORT: + case COMM_TYPE::SHORT: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_SHORT, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; - case COMM_TYPE_INT: + case COMM_TYPE::INT: SU2_MPI::Irecv(&(static_cast(bufRecv)[offset]), count, MPI_INT, source, tag, SU2_MPI::GetComm(), &(recvReq[iMessage])); break; @@ -756,31 +756,31 @@ void CCGNSMeshReaderFVM::InitiateCommsAll(void* bufSend, const int* nElemSend, S tag = rank + 1; switch (commType) { - case COMM_TYPE_DOUBLE: + case COMM_TYPE::DOUBLE: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_DOUBLE, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_UNSIGNED_LONG: + case COMM_TYPE::UNSIGNED_LONG: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_UNSIGNED_LONG, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_LONG: + case COMM_TYPE::LONG: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_LONG, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_UNSIGNED_SHORT: + case COMM_TYPE::UNSIGNED_SHORT: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_UNSIGNED_SHORT, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_CHAR: + case COMM_TYPE::CHAR: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_CHAR, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_SHORT: + case COMM_TYPE::SHORT: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_SHORT, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; - case COMM_TYPE_INT: + case COMM_TYPE::INT: SU2_MPI::Isend(&(static_cast(bufSend)[offset]), count, MPI_INT, dest, tag, SU2_MPI::GetComm(), &(sendReq[iMessage])); break; diff --git a/Common/src/linear_algebra/CSysMatrix.cpp b/Common/src/linear_algebra/CSysMatrix.cpp index 5552f6fc801b..21c49d6f715d 100644 --- a/Common/src/linear_algebra/CSysMatrix.cpp +++ b/Common/src/linear_algebra/CSysMatrix.cpp @@ -261,7 +261,7 @@ void CSysMatrixComms::Initiate(const CSysVector& x, CGeometry* geometry, cons /*--- Local variables ---*/ const unsigned short COUNT_PER_POINT = x.GetNVar(); - const unsigned short MPI_TYPE = COMM_TYPE_DOUBLE; + const auto MPI_TYPE = geometry->GetCommType(); /*--- Create a boolean for reversing the order of comms. ---*/ @@ -295,7 +295,7 @@ void CSysMatrixComms::Initiate(const CSysVector& x, CGeometry* geometry, cons for (auto iMessage = 0; iMessage < geometry->nP2PSend; iMessage++) { switch (commType) { case MPI_QUANTITIES::SOLUTION_MATRIX: { - su2double* bufDSend = geometry->bufD_P2PSend; + auto* bufDSend = geometry->GetP2PSendBuf(); /*--- Get the offset for the start of this message. ---*/ @@ -327,8 +327,7 @@ void CSysMatrixComms::Initiate(const CSysVector& x, CGeometry* geometry, cons /*--- We are going to communicate in reverse, so we use the recv buffer for the send instead. Also, all of the offsets and counts are derived from the recv data structures. ---*/ - - su2double* bufDSend = geometry->bufD_P2PRecv; + auto* bufDSend = geometry->GetP2PRecvBuf(); /*--- Get the offset for the start of this message. ---*/ @@ -379,7 +378,7 @@ void CSysMatrixComms::Complete(CSysVector& x, CGeometry* geometry, const CCon const unsigned short COUNT_PER_POINT = x.GetNVar(); /*--- Global status so all threads can see the result of Waitany. ---*/ - static SU2_MPI::Status status; + static typename SelectMPIWrapper::W::Status status; int ind; /*--- Store the data that was communicated into the appropriate @@ -389,7 +388,8 @@ void CSysMatrixComms::Complete(CSysVector& x, CGeometry* geometry, const CCon /*--- For efficiency, recv the messages dynamically based on the order they arrive. ---*/ - SU2_OMP_SAFE_GLOBAL_ACCESS(SU2_MPI::Waitany(geometry->nP2PRecv, geometry->req_P2PRecv, &ind, &status);) + SU2_OMP_SAFE_GLOBAL_ACCESS( + SelectMPIWrapper::W::Waitany(geometry->nP2PRecv, geometry->GetP2PRecvReq(), &ind, &status);) /*--- Once we have recv'd a message, get the source rank. ---*/ @@ -397,7 +397,7 @@ void CSysMatrixComms::Complete(CSysVector& x, CGeometry* geometry, const CCon switch (commType) { case MPI_QUANTITIES::SOLUTION_MATRIX: { - const su2double* bufDRecv = geometry->bufD_P2PRecv; + const auto* bufDRecv = geometry->GetP2PRecvBuf(); /*--- We know the offsets based on the source rank. ---*/ @@ -435,7 +435,7 @@ void CSysMatrixComms::Complete(CSysVector& x, CGeometry* geometry, const CCon send buffer for the recv instead. Also, all of the offsets and counts are derived from the send data structures. ---*/ - const su2double* bufDRecv = geometry->bufD_P2PSend; + const auto* bufDRecv = geometry->GetP2PSendBuf(); /*--- We know the offsets based on the source rank. ---*/ @@ -479,7 +479,8 @@ void CSysMatrixComms::Complete(CSysVector& x, CGeometry* geometry, const CCon data in the loop above at this point. ---*/ #ifdef HAVE_MPI - SU2_OMP_SAFE_GLOBAL_ACCESS(SU2_MPI::Waitall(geometry->nP2PSend, geometry->req_P2PSend, MPI_STATUS_IGNORE);) + SU2_OMP_SAFE_GLOBAL_ACCESS( + SelectMPIWrapper::W::Waitall(geometry->nP2PSend, geometry->GetP2PSendReq(), MPI_STATUS_IGNORE);) #endif } @@ -1305,17 +1306,11 @@ void CSysMatrix::ComputePastixPreconditioner(const CSysVector::EnforceZeroProjection(unsigned long, const su2double*, CSysVector&); \ INSTANTIATE_COMMS(TYPE) -#ifdef CODI_FORWARD_TYPE -/*--- In forward AD only the active type is used. ---*/ -INSTANTIATE_MATRIX(su2double) -#else -/*--- Base and reverse AD, matrix is passive. ---*/ INSTANTIATE_MATRIX(su2mixedfloat) -/*--- If using mixed precision (float) instantiate also a version for doubles, and allow cross communications. ---*/ + #ifdef USE_MIXED_PRECISION INSTANTIATE_MATRIX(passivedouble) #endif #ifdef CODI_REVERSE_TYPE INSTANTIATE_COMMS(su2double) #endif -#endif // CODI_FORWARD_TYPE diff --git a/Common/src/linear_algebra/CSysSolve.cpp b/Common/src/linear_algebra/CSysSolve.cpp index d4e1bc95289c..58725f845629 100644 --- a/Common/src/linear_algebra/CSysSolve.cpp +++ b/Common/src/linear_algebra/CSysSolve.cpp @@ -1469,8 +1469,8 @@ unsigned long CSysSolve::Solve(CSysMatrix& Jacobian, con BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { AD::SetExtFuncIn(&LinSysRes[0], LinSysRes.GetLocSize()); AD::SetExtFuncOut(&LinSysSol[0], LinSysSol.GetLocSize()); - AD::FuncHelper.addUserData(&LinSysRes); - AD::FuncHelper.addUserData(&LinSysSol); + AD::FuncHelper.addUserData(&LinSysRes_tmp); + AD::FuncHelper.addUserData(&LinSysSol_tmp); AD::FuncHelper.addUserData(&Jacobian); AD::FuncHelper.addUserData(geometry); AD::FuncHelper.addUserData(config); @@ -1620,8 +1620,8 @@ unsigned long CSysSolve::Solve(CSysMatrix& Jacobian, con } template -unsigned long CSysSolve::Solve_b(CSysMatrix& Jacobian, const CSysVector& LinSysRes, - CSysVector& LinSysSol, CGeometry* geometry, +unsigned long CSysSolve::Solve_b(CSysMatrix& Jacobian, const CSysVector& LinSysRes, + CSysVector& LinSysSol, CGeometry* geometry, const CConfig* config, const bool directCall) { SU2_ZONE_SCOPED @@ -1700,37 +1700,35 @@ unsigned long CSysSolve::Solve_b(CSysMatrix& Jacobian, c /*--- Local variable to prevent all threads from writing to a shared location (this->Residual). ---*/ ScalarType residual = 0.0; - HandleTemporariesIn(LinSysRes, LinSysSol); - switch (KindSolver) { case FGMRES: - IterLinSol = FGMRES_LinSolver(*LinSysRes_ptr, *LinSysSol_ptr, mat_vec, *precond, SolverTol, MaxIter, residual, - ScreenOutput, config); + IterLinSol = + FGMRES_LinSolver(LinSysRes, LinSysSol, mat_vec, *precond, SolverTol, MaxIter, residual, ScreenOutput, config); break; case FGCRODR: - IterLinSol = FGCRODR_LinSolver(*LinSysRes_ptr, *LinSysSol_ptr, mat_vec, *precond, SolverTol, MaxIter, residual, + IterLinSol = FGCRODR_LinSolver(LinSysRes, LinSysSol, mat_vec, *precond, SolverTol, MaxIter, residual, ScreenOutput, config); break; case RESTARTED_FGMRES: - IterLinSol = RFGMRES_LinSolver(*LinSysRes_ptr, *LinSysSol_ptr, mat_vec, *precond, SolverTol, MaxIter, residual, + IterLinSol = RFGMRES_LinSolver(LinSysRes, LinSysSol, mat_vec, *precond, SolverTol, MaxIter, residual, ScreenOutput, config); break; case BCGSTAB: - IterLinSol = BCGSTAB_LinSolver(*LinSysRes_ptr, *LinSysSol_ptr, mat_vec, *precond, SolverTol, MaxIter, residual, + IterLinSol = BCGSTAB_LinSolver(LinSysRes, LinSysSol, mat_vec, *precond, SolverTol, MaxIter, residual, ScreenOutput, config); break; case CONJUGATE_GRADIENT: - IterLinSol = CG_LinSolver(*LinSysRes_ptr, *LinSysSol_ptr, mat_vec, *precond, SolverTol, MaxIter, residual, - ScreenOutput, config); + IterLinSol = + CG_LinSolver(LinSysRes, LinSysSol, mat_vec, *precond, SolverTol, MaxIter, residual, ScreenOutput, config); break; case SMOOTHER: - IterLinSol = Smoother_LinSolver(*LinSysRes_ptr, *LinSysSol_ptr, mat_vec, *precond, SolverTol, MaxIter, residual, + IterLinSol = Smoother_LinSolver(LinSysRes, LinSysSol, mat_vec, *precond, SolverTol, MaxIter, residual, ScreenOutput, config); break; case PASTIX_LDLT: case PASTIX_LU: if (directCall) Jacobian.BuildPastixPreconditioner(geometry, config, KindSolver); - Jacobian.ComputePastixPreconditioner(*LinSysRes_ptr, *LinSysSol_ptr, geometry, config); + Jacobian.ComputePastixPreconditioner(LinSysRes, LinSysSol, geometry, config); IterLinSol = 1; residual = 1e-20; break; @@ -1739,8 +1737,6 @@ unsigned long CSysSolve::Solve_b(CSysMatrix& Jacobian, c break; } - HandleTemporariesOut(LinSysSol); - delete normal_prec; delete nested_prec; @@ -1755,11 +1751,7 @@ unsigned long CSysSolve::Solve_b(CSysMatrix& Jacobian, c /*--- Explicit instantiations ---*/ -#ifdef CODI_FORWARD_TYPE -template class CSysSolve; -#else template class CSysSolve; #ifdef USE_MIXED_PRECISION template class CSysSolve; #endif -#endif diff --git a/Common/src/linear_algebra/CSysSolve_b.cpp b/Common/src/linear_algebra/CSysSolve_b.cpp index b16e87fe4aa2..21819fac8d7f 100644 --- a/Common/src/linear_algebra/CSysSolve_b.cpp +++ b/Common/src/linear_algebra/CSysSolve_b.cpp @@ -35,10 +35,10 @@ template void CSysSolve_b::Solve_b(const su2double::Real* x, su2double::Real* x_b, size_t m, const su2double::Real* y, const su2double::Real* y_b, size_t n, codi::ExternalFunctionUserData* d) { - CSysVector* LinSysRes_b = nullptr; + CSysVector* LinSysRes_b = nullptr; d->getDataByIndex(LinSysRes_b, 0); - CSysVector* LinSysSol_b = nullptr; + CSysVector* LinSysSol_b = nullptr; d->getDataByIndex(LinSysSol_b, 1); CSysMatrix* Jacobian = nullptr; @@ -65,6 +65,7 @@ void CSysSolve_b::Solve_b(const su2double::Real* x, su2double::Real* solver->Solve_b(*Jacobian, *LinSysRes_b, *LinSysSol_b, geometry, config, false); + SU2_OMP_BARRIER SU2_OMP_FOR_STAT(roundUpDiv(n, omp_get_num_threads())) for (unsigned long i = 0; i < n; i++) { x_b[i] = SU2_TYPE::GetValue((*LinSysSol_b)[i]); diff --git a/Common/src/linear_algebra/CSysVector.cpp b/Common/src/linear_algebra/CSysVector.cpp index 2a31026a232a..a8031b398802 100644 --- a/Common/src/linear_algebra/CSysVector.cpp +++ b/Common/src/linear_algebra/CSysVector.cpp @@ -143,12 +143,10 @@ CSysVector::~CSysVector() { } /*--- Explicit instantiations ---*/ -/*--- We allways need su2double (regardless if it is passive or active). ---*/ -template class CSysVector; -#ifdef USE_MIXED_PRECISION -/*--- In reverse AD (or with mixed precision) we will also have passive (or float) vectors. ---*/ template class CSysVector; +#ifdef USE_MIXED_PRECISION +template class CSysVector; #endif #ifdef CODI_REVERSE_TYPE -template class CSysVector; +template class CSysVector; #endif diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp index 74b240707153..c597f2e12a61 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp @@ -303,12 +303,10 @@ class CFVMFlowSolverBase : public CSolver { /*--- Warning message about non-physical reconstructions. ---*/ if ((MGLevel == MESH_0) && (config->GetComm_Level() == COMM_FULL)) { /*--- Add counter results for all threads. ---*/ - SU2_OMP_ATOMIC - ErrorCounter += localCounter; + atomicAdd(localCounter, ErrorCounter); /*--- Add counter results for all ranks. ---*/ - BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS - { + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { localCounter = ErrorCounter; SU2_MPI::Reduce(&localCounter, &ErrorCounter, 1, MPI_UNSIGNED_LONG, MPI_SUM, MASTER_NODE, SU2_MPI::GetComm()); config->SetNonphysical_Reconstr(ErrorCounter); diff --git a/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp b/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp index 5a00b340abcc..34fc64741b02 100644 --- a/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp +++ b/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp @@ -38,28 +38,14 @@ * \ingroup GradSmooth */ class CGradientSmoothingSolver final : public CFEASolverBase { -public: - -/** Introduction of a new alias for the data type to allow compilation with forward mode. - * - * This is done for compatibility to the treatment of Jacobian and System in CSolver.hpp. - * Note that the computations done here are always 'passive', i.e. not intended to be differentiated. - * We only need to define functions depending on this once. - */ -#ifndef CODI_FORWARD_TYPE - typedef su2mixedfloat su2matvecscalar; -#else - typedef su2double su2matvecscalar; -#endif - private: unsigned int curDim; /*!< \brief If we separate dimensions this tells us in what dimension we currently are. */ CSysVector activeCoord; /*!< \brief Auxiliar vector to keep the indeces of geometry->vertex->Coord */ - CSysVector helperVecIn; /*!< \brief Helper vectors for projection and matrix vector product (must be su2mixedfloat) */ - CSysVector helperVecOut; /*!< \brief Helper vectors for projection and matrix vector product (must be su2mixedfloat) */ - CSysVector helperVecAux; /*!< \brief Helper vectors for matrix vector product if working on surface (smaller dim) */ + CSysVector helperVecIn; /*!< \brief Helper vectors for projection and matrix vector product (must be su2mixedfloat) */ + CSysVector helperVecOut; /*!< \brief Helper vectors for projection and matrix vector product (must be su2mixedfloat) */ + CSysVector helperVecAux; /*!< \brief Helper vectors for matrix vector product if working on surface (smaller dim) */ std::vector deltaP; /*!< \brief The smoothed gradient with respect to the design variables. */ @@ -201,7 +187,7 @@ class CGradientSmoothingSolver final : public CFEASolverBase { */ void ProjectDVtoMesh(CGeometry *geometry, std::vector& seeding, - CSysVector& result, + CSysVector& result, CSysVector& registeredCoord, CConfig *config); @@ -209,7 +195,7 @@ class CGradientSmoothingSolver final : public CFEASolverBase { * \brief Reverse evaluate parameterization Jacobian. */ void ProjectMeshToDV(CGeometry *geometry, - CSysVector& sensitivity, + CSysVector& sensitivity, std::vector& output, CSysVector ®isteredCoord, CConfig *config); diff --git a/SU2_CFD/include/solvers/CScalarSolver.hpp b/SU2_CFD/include/solvers/CScalarSolver.hpp index 8afeb67adba5..332424e89b8e 100644 --- a/SU2_CFD/include/solvers/CScalarSolver.hpp +++ b/SU2_CFD/include/solvers/CScalarSolver.hpp @@ -188,7 +188,7 @@ class CScalarSolver : public CSolver { const su2double* normal = geometry->edges->GetNormal(iEdge); auto residual_ij = ComputeFlux(iPoint, jPoint, normal); - JacobianScalarType *Block_ii = nullptr, *Block_ij = nullptr, *Block_ji = nullptr, *Block_jj = nullptr; + su2mixedfloat *Block_ii = nullptr, *Block_ij = nullptr, *Block_ji = nullptr, *Block_jj = nullptr; if (implicit) { Jacobian.GetBlocks(iEdge, iPoint, jPoint, Block_ii, Block_ij, Block_ji, Block_jj); } diff --git a/SU2_CFD/include/solvers/CSolver.hpp b/SU2_CFD/include/solvers/CSolver.hpp index 3cee6ee0cca7..01df1d3ee277 100644 --- a/SU2_CFD/include/solvers/CSolver.hpp +++ b/SU2_CFD/include/solvers/CSolver.hpp @@ -191,13 +191,8 @@ class CSolver { CSysVector LinSysSol; /*!< \brief vector to store iterative solution of implicit linear system. */ CSysVector LinSysRes; /*!< \brief vector to store iterative residual of implicit linear system. */ -#ifndef CODI_FORWARD_TYPE - using JacobianScalarType = su2mixedfloat; -#else - using JacobianScalarType = su2double; -#endif - CSysMatrix Jacobian; /*!< \brief Complete sparse Jacobian structure for implicit computations. */ - CSysSolve System; /*!< \brief Linear solver/smoother. */ + CSysMatrix Jacobian; /*!< \brief Complete sparse Jacobian structure for implicit computations. */ + CSysSolve System; /*!< \brief Linear solver/smoother. */ CSysVector OutputVariables; /*!< \brief vector to store the extra variables to be written. */ string* OutputHeadingNames; /*!< \brief vector of strings to store the headings for the exra variables */ @@ -243,7 +238,7 @@ class CSolver { void GetCommCountAndType(const CConfig* config, MPI_QUANTITIES commType, unsigned short &COUNT_PER_POINT, - unsigned short &MPI_TYPE) const; + COMM_TYPE &MPI_TYPE) const; /*! * \brief Routine to load a solver quantity into the data structures for MPI point-to-point communication and to launch non-blocking sends and recvs. @@ -277,7 +272,7 @@ class CSolver { void GetPeriodicCommCountAndType(const CConfig* config, unsigned short commType, unsigned short &COUNT_PER_POINT, - unsigned short &MPI_TYPE, + COMM_TYPE &MPI_TYPE, unsigned short &ICOUNT, unsigned short &JCOUNT) const; diff --git a/SU2_CFD/src/fluid/CIdealGas.cpp b/SU2_CFD/src/fluid/CIdealGas.cpp index 5f04dd6cdc98..4ec9e6c8ff90 100644 --- a/SU2_CFD/src/fluid/CIdealGas.cpp +++ b/SU2_CFD/src/fluid/CIdealGas.cpp @@ -34,21 +34,22 @@ CIdealGas::CIdealGas(su2double gamma, su2double R, bool CompEntropy) : CFluidMod Cp = Gamma / Gamma_Minus_One * Gas_Constant; Cv = Cp - R; + dTdrho_e = 0.0; + dTde_rho = Gamma_Minus_One / Gas_Constant; + ComputeEntropy = CompEntropy; } void CIdealGas::SetTDState_rhoe(su2double rho, su2double e) { Density = rho; StaticEnergy = e; - Pressure = Gamma_Minus_One * Density * StaticEnergy; - Temperature = Gamma_Minus_One * StaticEnergy / Gas_Constant; - SoundSpeed2 = Gamma * Pressure / Density; dPdrho_e = Gamma_Minus_One * StaticEnergy; dPde_rho = Gamma_Minus_One * Density; - dTdrho_e = 0.0; - dTde_rho = Gamma_Minus_One / Gas_Constant; + Pressure = dPde_rho * StaticEnergy; + Temperature = dTde_rho * StaticEnergy; + SoundSpeed2 = Gamma * Gas_Constant * Temperature; - if (ComputeEntropy) Entropy = (1.0 / Gamma_Minus_One * log(Temperature) + log(1.0 / Density)) * Gas_Constant; + if (ComputeEntropy) Entropy = Cv * log(Temperature) - Gas_Constant * log(Density); } void CIdealGas::SetTDState_PT(su2double P, su2double T) { diff --git a/SU2_CFD/src/iteration/CFEAIteration.cpp b/SU2_CFD/src/iteration/CFEAIteration.cpp index 03280fdd4b95..73ac3842be99 100644 --- a/SU2_CFD/src/iteration/CFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CFEAIteration.cpp @@ -125,12 +125,10 @@ void CFEAIteration::Iterate(COutput* output, CIntegration**** integration, CGeom break; } /*--- Linear elasticity without thermal effects and double precision only needs one iteration. ---*/ -#ifndef USE_MIXED_PRECISION - if (linear && !heat) { + if (!std::is_same_v && linear && !heat) { output->SetConvergence(true); break; } -#endif /*--- Normal stopping criteria. ---*/ if (StopCalc && IntIter > 0) break; } diff --git a/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp b/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp index 84d0315a0885..16d9ce70e045 100644 --- a/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp +++ b/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp @@ -37,8 +37,8 @@ */ namespace CGradientSmoothingSolverDetails { -template -void WriteVectorToGeometry(CGeometry* geometry, const CSysVector& vector) { +template +void WriteVectorToGeometry(CGeometry* geometry, const CSysVector& vector) { for (auto iPoint = 0ul; iPoint < geometry->GetnPoint(); iPoint++) { for (auto iDim = 0u; iDim < geometry->GetnDim(); iDim++) { geometry->SetSensitivity(iPoint,iDim, vector(iPoint, iDim)); @@ -46,8 +46,8 @@ void WriteVectorToGeometry(CGeometry* geometry, const CSysVector -void ReadVectorToGeometry(const CGeometry* geometry, CSysVector& vector) { +template +void ReadVectorToGeometry(const CGeometry* geometry, CSysVector& vector) { for (auto iPoint = 0ul; iPoint < geometry->GetnPoint(); iPoint++) { for (auto iDim = 0u; iDim < geometry->GetnDim(); iDim++) { vector(iPoint, iDim) = SU2_TYPE::GetValue(geometry->GetSensitivity(iPoint,iDim)); @@ -272,7 +272,7 @@ void CGradientSmoothingSolver::ApplyGradientSmoothingDV(CGeometry* geometry, CNu /*--- Compute the full Sobolev Hessian approximation column by column. ---*/ if (rank == MASTER_NODE) cout << " computing the system matrix line by line" << endl; - auto mat_vec = GetStiffnessMatrixVectorProduct(geometry, numerics, config); + auto mat_vec = GetStiffnessMatrixVectorProduct(geometry, numerics, config); for (column=0; column(geometry, helperVecIn); + CGradientSmoothingSolverDetails::WriteVectorToGeometry(geometry, helperVecIn); grid_movement->SetVolume_Deformation(geometry, config, false, true, true); - CGradientSmoothingSolverDetails::ReadVectorToGeometry(geometry, helperVecIn); + CGradientSmoothingSolverDetails::ReadVectorToGeometry(geometry, helperVecIn); CSysMatrixComms::Initiate(helperVecIn, geometry, config, MPI_QUANTITIES::SOLUTION_MATRIX); CSysMatrixComms::Complete(helperVecIn, geometry, config, MPI_QUANTITIES::SOLUTION_MATRIX); @@ -324,9 +324,9 @@ void CGradientSmoothingSolver::ApplyGradientSmoothingDV(CGeometry* geometry, CNu } /*--- Forward evaluation of the mesh deformation ---*/ - CGradientSmoothingSolverDetails::WriteVectorToGeometry(geometry, helperVecOut); + CGradientSmoothingSolverDetails::WriteVectorToGeometry(geometry, helperVecOut); grid_movement->SetVolume_Deformation(geometry, config, false, true, false); - CGradientSmoothingSolverDetails::ReadVectorToGeometry(geometry, helperVecOut); + CGradientSmoothingSolverDetails::ReadVectorToGeometry(geometry, helperVecOut); } @@ -684,8 +684,8 @@ void CGradientSmoothingSolver::Solve_Linear_System(CGeometry* geometry, const CC END_SU2_OMP_PARALLEL } -template -CSysMatrixVectorProduct CGradientSmoothingSolver::GetStiffnessMatrixVectorProduct(CGeometry* geometry, +template +CSysMatrixVectorProduct CGradientSmoothingSolver::GetStiffnessMatrixVectorProduct(CGeometry* geometry, CNumerics* numerics, const CConfig* config) { SU2_ZONE_SCOPED @@ -702,7 +702,7 @@ CSysMatrixVectorProduct CGradientSmoothingSolver::GetStiffnessMatri Compute_StiffMatrix(geometry, numerics, config); } - return CSysMatrixVectorProduct(Jacobian, geometry, config); + return CSysMatrixVectorProduct(Jacobian, geometry, config); } void CGradientSmoothingSolver::CalculateOriginalGradient(CGeometry *geometry, CVolumetricMovement *grid_movement, CConfig *config, su2double** Gradient) { @@ -716,7 +716,7 @@ void CGradientSmoothingSolver::CalculateOriginalGradient(CGeometry *geometry, CV grid_movement->SetVolume_Deformation(geometry, config, false, true); - CGradientSmoothingSolverDetails::ReadVectorToGeometry(geometry, helperVecOut); + CGradientSmoothingSolverDetails::ReadVectorToGeometry(geometry, helperVecOut); ProjectMeshToDV(geometry, helperVecOut, deltaP, activeCoord, config); @@ -820,7 +820,7 @@ void CGradientSmoothingSolver::RecordParameterizationJacobian(CGeometry *geometr } -void CGradientSmoothingSolver::ProjectDVtoMesh(CGeometry *geometry, std::vector& seeding, CSysVector& result, CSysVector& registeredCoord, CConfig *config) { +void CGradientSmoothingSolver::ProjectDVtoMesh(CGeometry *geometry, std::vector& seeding, CSysVector& result, CSysVector& registeredCoord, CConfig *config) { SU2_ZONE_SCOPED unsigned int nDim, nMarker, nDV, nDV_Value, nVertex; @@ -860,7 +860,7 @@ void CGradientSmoothingSolver::ProjectDVtoMesh(CGeometry *geometry, std::vector< } -void CGradientSmoothingSolver::ProjectMeshToDV(CGeometry *geometry, CSysVector& sensitivity, std::vector& output, CSysVector& registeredCoord, CConfig *config) { +void CGradientSmoothingSolver::ProjectMeshToDV(CGeometry *geometry, CSysVector& sensitivity, std::vector& output, CSysVector& registeredCoord, CConfig *config) { SU2_ZONE_SCOPED /*--- adjoint surface deformation ---*/ diff --git a/SU2_CFD/src/solvers/CIncNSSolver.cpp b/SU2_CFD/src/solvers/CIncNSSolver.cpp index 92a5ba01ba4a..1e153f66a1b0 100644 --- a/SU2_CFD/src/solvers/CIncNSSolver.cpp +++ b/SU2_CFD/src/solvers/CIncNSSolver.cpp @@ -894,11 +894,8 @@ void CIncNSSolver::SetTau_Wall_WF(CGeometry *geometry, CSolver **solver_containe ompMasterAssignBarrier(globalCounter1,0, globalCounter2,0); - SU2_OMP_ATOMIC - globalCounter1 += notConvergedCounter; - - SU2_OMP_ATOMIC - globalCounter2 += smallYPlusCounter; + atomicAdd(notConvergedCounter, globalCounter1); + atomicAdd(smallYPlusCounter, globalCounter2); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { SU2_MPI::Allreduce(&globalCounter1, ¬ConvergedCounter, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); diff --git a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp index 35ced04d3faa..12f6d7dbec14 100644 --- a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp @@ -633,8 +633,7 @@ void CNEMOEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_con /*--- Warning message about non-physical reconstructions. ---*/ if ((iMesh == MESH_0) && (config->GetComm_Level() == COMM_FULL)) { /*--- Add counter results for all threads. ---*/ - SU2_OMP_ATOMIC - ErrorCounter += counter_local; + atomicAdd(counter_local, ErrorCounter); /*--- Add counter results for all ranks. ---*/ BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS diff --git a/SU2_CFD/src/solvers/CNSSolver.cpp b/SU2_CFD/src/solvers/CNSSolver.cpp index 92669da60501..724c52c2e332 100644 --- a/SU2_CFD/src/solvers/CNSSolver.cpp +++ b/SU2_CFD/src/solvers/CNSSolver.cpp @@ -1033,11 +1033,8 @@ void CNSSolver::SetTau_Wall_WF(CGeometry *geometry, CSolver **solver_container, ompMasterAssignBarrier(globalCounter1,0, globalCounter2,0); - SU2_OMP_ATOMIC - globalCounter1 += notConvergedCounter; - - SU2_OMP_ATOMIC - globalCounter2 += smallYPlusCounter; + atomicAdd(notConvergedCounter, globalCounter1); + atomicAdd(smallYPlusCounter, globalCounter2); BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { SU2_MPI::Allreduce(&globalCounter1, ¬ConvergedCounter, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); diff --git a/SU2_CFD/src/solvers/CSolver.cpp b/SU2_CFD/src/solvers/CSolver.cpp index 5a5bf0caaffb..6edbc8f3b8a4 100644 --- a/SU2_CFD/src/solvers/CSolver.cpp +++ b/SU2_CFD/src/solvers/CSolver.cpp @@ -193,50 +193,50 @@ CSolver::~CSolver() { void CSolver::GetPeriodicCommCountAndType(const CConfig* config, unsigned short commType, unsigned short &COUNT_PER_POINT, - unsigned short &MPI_TYPE, + COMM_TYPE &MPI_TYPE, unsigned short &ICOUNT, unsigned short &JCOUNT) const { SU2_ZONE_SCOPED switch (commType) { case PERIODIC_VOLUME: COUNT_PER_POINT = 1; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case PERIODIC_NEIGHBORS: COUNT_PER_POINT = 1; - MPI_TYPE = COMM_TYPE_UNSIGNED_SHORT; + MPI_TYPE = COMM_TYPE::UNSIGNED_SHORT; break; case PERIODIC_RESIDUAL: COUNT_PER_POINT = nVar + nVar*nVar + 1; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case PERIODIC_IMPLICIT: COUNT_PER_POINT = nVar; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case PERIODIC_LAPLACIAN: COUNT_PER_POINT = nVar; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case PERIODIC_MAX_EIG: COUNT_PER_POINT = 1; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case PERIODIC_SENSOR: COUNT_PER_POINT = 2; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case PERIODIC_SOL_GG: case PERIODIC_SOL_GG_R: COUNT_PER_POINT = nVar*nDim; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; ICOUNT = nVar; JCOUNT = nDim; break; case PERIODIC_PRIM_GG: case PERIODIC_PRIM_GG_R: COUNT_PER_POINT = nPrimVarGrad*nDim; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; ICOUNT = nPrimVarGrad; JCOUNT = nDim; break; @@ -245,7 +245,7 @@ void CSolver::GetPeriodicCommCountAndType(const CConfig* config, case PERIODIC_SOL_LS_R: case PERIODIC_SOL_ULS_R: COUNT_PER_POINT = nDim*nDim + nVar*nDim; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; ICOUNT = nVar; JCOUNT = nDim; break; @@ -254,28 +254,28 @@ void CSolver::GetPeriodicCommCountAndType(const CConfig* config, case PERIODIC_PRIM_LS_R: case PERIODIC_PRIM_ULS_R: COUNT_PER_POINT = nDim*nDim + nPrimVarGrad*nDim; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; ICOUNT = nPrimVarGrad; JCOUNT = nDim; break; case PERIODIC_LIM_PRIM_1: COUNT_PER_POINT = nPrimVarGrad*2; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; ICOUNT = nPrimVarGrad; break; case PERIODIC_LIM_PRIM_2: COUNT_PER_POINT = nPrimVarGrad; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; ICOUNT = nPrimVarGrad; break; case PERIODIC_LIM_SOL_1: COUNT_PER_POINT = nVar*2; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; ICOUNT = nVar; break; case PERIODIC_LIM_SOL_2: COUNT_PER_POINT = nVar; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; ICOUNT = nVar; break; default: @@ -357,7 +357,7 @@ void CSolver::InitiatePeriodicComms(CGeometry *geometry, unsigned short iVar, jVar, iDim; unsigned short nNeighbor = 0; unsigned short COUNT_PER_POINT = 0; - unsigned short MPI_TYPE = 0; + COMM_TYPE MPI_TYPE{}; unsigned short ICOUNT = nVar; unsigned short JCOUNT = nVar; @@ -1011,7 +1011,8 @@ void CSolver::CompletePeriodicComms(CGeometry *geometry, /*--- Set the size of the data packet and type depending on quantity. ---*/ - unsigned short COUNT_PER_POINT = 0, MPI_TYPE = 0, ICOUNT = 0, JCOUNT = 0; + unsigned short COUNT_PER_POINT = 0, ICOUNT = 0, JCOUNT = 0; + COMM_TYPE MPI_TYPE{}; GetPeriodicCommCountAndType(config, commType, COUNT_PER_POINT, MPI_TYPE, ICOUNT, JCOUNT); /*--- Local variables ---*/ @@ -1335,7 +1336,7 @@ void CSolver::CompletePeriodicComms(CGeometry *geometry, void CSolver::GetCommCountAndType(const CConfig* config, MPI_QUANTITIES commType, unsigned short &COUNT_PER_POINT, - unsigned short &MPI_TYPE) const { + COMM_TYPE &MPI_TYPE) const { SU2_ZONE_SCOPED switch (commType) { case MPI_QUANTITIES::SOLUTION: @@ -1343,53 +1344,53 @@ void CSolver::GetCommCountAndType(const CConfig* config, case MPI_QUANTITIES::UNDIVIDED_LAPLACIAN: case MPI_QUANTITIES::SOLUTION_LIMITER: COUNT_PER_POINT = nVar; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::MAX_EIGENVALUE: case MPI_QUANTITIES::SENSOR: COUNT_PER_POINT = 1; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::SOLUTION_GRADIENT: case MPI_QUANTITIES::SOLUTION_GRAD_REC: COUNT_PER_POINT = nVar*nDim; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::PRIMITIVE_GRADIENT: case MPI_QUANTITIES::PRIMITIVE_GRAD_REC: COUNT_PER_POINT = nPrimVarGrad*nDim; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::PRIMITIVE_LIMITER: COUNT_PER_POINT = nPrimVarGrad; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::SOLUTION_EDDY: COUNT_PER_POINT = nVar+1; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::SOLUTION_FEA: if (config->GetTime_Domain()) COUNT_PER_POINT = nVar*3; else COUNT_PER_POINT = nVar; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::AUXVAR_GRADIENT: COUNT_PER_POINT = nDim*base_nodes->GetnAuxVar(); - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::MESH_DISPLACEMENTS: COUNT_PER_POINT = nDim; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::SOLUTION_TIME_N: COUNT_PER_POINT = nVar; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; case MPI_QUANTITIES::SOLUTION_TIME_N1: COUNT_PER_POINT = nVar; - MPI_TYPE = COMM_TYPE_DOUBLE; + MPI_TYPE = COMM_TYPE::DOUBLE; break; default: SU2_MPI::Error("Unrecognized quantity for point-to-point MPI comms.", @@ -1424,7 +1425,7 @@ void CSolver::InitiateComms(CGeometry *geometry, unsigned short iVar, iDim; unsigned short COUNT_PER_POINT = 0; - unsigned short MPI_TYPE = 0; + COMM_TYPE MPI_TYPE{}; unsigned long iPoint, msg_offset, buf_offset; @@ -1568,7 +1569,7 @@ void CSolver::CompleteComms(CGeometry *geometry, unsigned short iDim, iVar; unsigned long iPoint, iRecv, nRecv, msg_offset, buf_offset; unsigned short COUNT_PER_POINT = 0; - unsigned short MPI_TYPE = 0; + COMM_TYPE MPI_TYPE{}; int ind, source, iMessage, jRecv; diff --git a/TestCases/TestCase.py b/TestCases/TestCase.py index 651193244522..d1d5568d400e 100644 --- a/TestCases/TestCase.py +++ b/TestCases/TestCase.py @@ -297,7 +297,7 @@ def run_test(self, with_tsan=False, with_asan=False, with_tapetests=False): print('ERROR: Execution timed out. timeout=%d'%self.timeout) if exceed_tol: - print('ERROR: Difference between computed input and test_vals exceeded tolerance. TOL=%f'%self.tol) + print(f'ERROR: Difference between computed input and test_vals exceeded tolerance. TOL={self.tol}') if not start_solver and not with_tapetests: print('ERROR: The code was not able to get to the "Begin solver" section.') @@ -628,7 +628,7 @@ def run_opt(self, with_tsan=False, with_asan=False, with_tapetests=False): print('ERROR: Execution timed out. timeout=%d'%self.timeout) if exceed_tol: - print('ERROR: Difference between computed input and test_vals exceeded tolerance. TOL=%f'%self.tol) + print(f'ERROR: Difference between computed input and test_vals exceeded tolerance. TOL={self.tol}') if not start_solver: print('ERROR: The code was not able to get to the "OBJFUN" section.') @@ -770,7 +770,7 @@ def run_geo(self, with_tsan=False, with_asan=False, with_tapetests=False): if not with_tsan and not with_asan: if exceed_tol: - print('ERROR: Difference between computed input and test_vals exceeded tolerance. TOL=%f'%self.tol) + print(f'ERROR: Difference between computed input and test_vals exceeded tolerance. TOL={self.tol}') if not start_solver: print('ERROR: The code was not able to get to the "OBJFUN" section.') @@ -901,7 +901,7 @@ def run_def(self, with_tsan=False, with_asan=False, with_tapetests=False): if not with_tsan and not with_asan: if exceed_tol: - print('ERROR: Difference between computed input and test_vals exceeded tolerance. TOL=%e'%self.tol) + print(f'ERROR: Difference between computed input and test_vals exceeded tolerance. TOL={self.tol}') if not start_solver: print('ERROR: The code was not able to get to the "Begin solver" section.') diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index b8e39bc9fbaa..013f6e277356 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -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.382489, -0.905413, 0.001313, 0.025294, 2.361500, -2.336200, 0.000000, 0.000000] + flatplate.test_vals = [-6.381351, -0.904240, 0.001313, 0.025285, 2.361500, -2.336300, 0, 0] test_list.append(flatplate) # Laminar cylinder (steady) @@ -197,7 +197,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-12.038153, -16.332090, 1.080346, 0.018385, 20, -2.872824, 0, -14.250271, 0] + turb_naca0012_sa.test_vals = [-12.038104, -16.332090, 1.080346, 0.018385, 20, -2.873254, 0, -14.250271, 0] turb_naca0012_sa.test_vals_aarch64 = [-12.038091, -16.332090, 1.080346, 0.018385, 20.000000, -2.873236, 0.000000, -14.250271, 0.000000] test_list.append(turb_naca0012_sa) @@ -206,7 +206,7 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.093892, -15.251078, -5.906327, 1.070413, 0.015775, -2.855348, 0] + turb_naca0012_sst.test_vals = [-12.093920, -15.251077, -5.906326, 1.070413, 0.015775, -2.855455, 0] turb_naca0012_sst.test_vals_aarch64 = [-12.075928, -15.246732, -5.861249, 1.070036, 0.015841, -2.835263, 0] test_list.append(turb_naca0012_sst) @@ -215,7 +215,7 @@ def main(): turb_naca0012_sst_sust.cfg_dir = "rans/naca0012" turb_naca0012_sst_sust.cfg_file = "turb_NACA0012_sst_sust.cfg" turb_naca0012_sst_sust.test_iter = 10 - turb_naca0012_sst_sust.test_vals = [-12.080757, -14.837176, -5.732917, 1.000893, 0.019109, -2.120437] + turb_naca0012_sst_sust.test_vals = [-12.080826, -14.837176, -5.732918, 1.000893, 0.019109, -2.120233] turb_naca0012_sst_sust.test_vals_aarch64 = [-12.073210, -14.836724, -5.732627, 1.000050, 0.019144, -2.629689] test_list.append(turb_naca0012_sst_sust) @@ -252,7 +252,7 @@ def main(): axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.066224, -7.425808, -8.815859, -3.732773, 0] + axi_rans_air_nozzle_restart.test_vals = [-12.066222, -7.425854, -8.815484, -3.732619, 0] axi_rans_air_nozzle_restart.test_vals_aarch64 = [-14.140441, -9.154674, -10.886121, -5.806594, 0.000000] test_list.append(axi_rans_air_nozzle_restart) @@ -278,7 +278,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.976782, 1.343831, 0.443889, -0.029247] + turb_naca0012_1c.test_vals = [-4.980125, 1.343354, 0.443788, -0.029257] turb_naca0012_1c.test_vals_aarch64 = [-4.976620, 1.345983, 0.433171, -0.033685] test_list.append(turb_naca0012_1c) @@ -287,7 +287,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.482862, 1.260869, 0.405097, -0.040169] + turb_naca0012_2c.test_vals = [-5.482849, 1.260868, 0.404588, -0.040284] turb_naca0012_2c.test_vals_aarch64 = [-5.485484, 1.263406, 0.411442, -0.040859] test_list.append(turb_naca0012_2c) @@ -314,7 +314,7 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.553950, 1.234029, 0.424324, -0.033438] + turb_naca0012_p1c2.test_vals = [-5.553917, 1.234038, 0.424217, -0.033478] turb_naca0012_p1c2.test_vals_aarch64 = [-5.548245, 1.236384, 0.381821, -0.050337] test_list.append(turb_naca0012_p1c2) diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 1c25e4942d22..dbadc0cb659f 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -298,8 +298,8 @@ def main(): ramp_msw.cfg_dir = "euler/ramp" ramp_msw.cfg_file = "inv_ramp_msw.cfg" ramp_msw.test_iter = 100 - ramp_msw.test_vals = [-7.5, -1.765, -0.077520, 0.054427] - ramp_msw.tol = [0.03, 0.03, 0.00001, 0.00001] + ramp_msw.test_vals = [-7.35, -1.6, -0.077520, 0.054427] + ramp_msw.tol = [0.2, 0.2, 0.00001, 0.00001] test_list.append(ramp_msw) # MFR_coupling @@ -371,6 +371,7 @@ def main(): poiseuille_profile.test_iter = 10 poiseuille_profile.test_vals = [-12.004334, -7.534404, -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) ########################## @@ -482,7 +483,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-12.037476, -16.376950, 1.080346, 0.018385, 20, -1.564171, 20, -4.180937, 0] + turb_naca0012_sa.test_vals = [-12.037518, -16.376951, 1.080346, 0.018385, 20, -1.564108, 20, -4.180957, 0] turb_naca0012_sa.test_vals_aarch64 = [-12.037489, -16.376949, 1.080346, 0.018385, 20.000000, -1.564143, 20.000000, -4.180945, 0.000000] turb_naca0012_sa.timeout = 3200 test_list.append(turb_naca0012_sa) @@ -492,7 +493,7 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.094714, -15.251093, -5.906365, 1.070413, 0.015775, -2.376111, 0] + turb_naca0012_sst.test_vals = [-12.094708, -15.251093, -5.906365, 1.070413, 0.015775, -2.376072, 0] turb_naca0012_sst.test_vals_aarch64 = [-12.075620, -15.246688, -5.861276, 1.070036, 0.015841, -1.991001, 0.000000] turb_naca0012_sst.timeout = 3200 test_list.append(turb_naca0012_sst) @@ -502,7 +503,7 @@ def main(): turb_naca0012_sst_sust.cfg_dir = "rans/naca0012" turb_naca0012_sst_sust.cfg_file = "turb_NACA0012_sst_sust.cfg" turb_naca0012_sst_sust.test_iter = 10 - turb_naca0012_sst_sust.test_vals = [-12.082149, -14.837177, -5.733436, 1.000893, 0.019109, -2.240949] + turb_naca0012_sst_sust.test_vals = [-12.082012, -14.837177, -5.733436, 1.000893, 0.019109, -2.241076] turb_naca0012_sst_sust.test_vals_aarch64 = [-12.073964, -14.836726, -5.732390, 1.000050, 0.019144, -2.229074] turb_naca0012_sst_sust.timeout = 3200 test_list.append(turb_naca0012_sst_sust) @@ -571,7 +572,7 @@ def main(): axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.069349, -7.508309, -8.813361, -3.732852, 0] + axi_rans_air_nozzle_restart.test_vals = [-12.069351, -7.507867, -8.813423, -3.732860, 0] axi_rans_air_nozzle_restart.test_vals_aarch64 = [-14.143310, -9.163287, -10.858232, -5.787715, 0.000000] axi_rans_air_nozzle_restart.tol = 0.0001 test_list.append(axi_rans_air_nozzle_restart) @@ -782,7 +783,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.345560, 1.448328, 1.208614, -0.846773, 1.277698, 0.499718, 0] + turbmod_sa_neg_rae2822.test_vals = [-1.345527, 1.448384, 1.208659, -0.846424, 1.271466, 0.497507, 0] 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) @@ -932,7 +933,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.982630, 1.343638, 0.664182, 0.009490] + turb_naca0012_1c.test_vals = [-4.983993, 1.343552, 0.663881, 0.009383] turb_naca0012_1c.test_vals_aarch64 = [-4.981036, 1.345868, 0.673232, 0.010091] test_list.append(turb_naca0012_1c) @@ -941,7 +942,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.482693, 1.262634, 0.495712, -0.032734] + turb_naca0012_2c.test_vals = [-5.482691, 1.262640, 0.496012, -0.032672] turb_naca0012_2c.test_vals_aarch64 = [-5.484365, 1.264701, 0.501741, -0.033109] test_list.append(turb_naca0012_2c) @@ -958,7 +959,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.129475, 1.283940, 0.807012, 0.047519] + turb_naca0012_p1c1.test_vals = [-5.129493, 1.283950, 0.807032, 0.047516] turb_naca0012_p1c1.test_vals_aarch64 = [-5.122100, 1.284478, 0.608744, -0.008593] test_list.append(turb_naca0012_p1c1) @@ -967,7 +968,7 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.553963, 1.234481, 0.604361, -0.008431] + turb_naca0012_p1c2.test_vals = [-5.553947, 1.234508, 0.604076, -0.008513] test_list.append(turb_naca0012_p1c2) ###################################### @@ -1360,7 +1361,7 @@ def main(): dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi" dyn_fsi.cfg_file = "config.cfg" dyn_fsi.test_iter = 4 - dyn_fsi.test_vals = [-4.330741, -4.152826, 0, 97] + dyn_fsi.test_vals = [-4.330741, -4.152826, 0, 96] dyn_fsi.multizone = True dyn_fsi.unsteady = True test_list.append(dyn_fsi) @@ -1459,7 +1460,7 @@ def main(): pywrapper_turb_naca0012_sst.cfg_dir = "rans/naca0012" pywrapper_turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" pywrapper_turb_naca0012_sst.test_iter = 10 - pywrapper_turb_naca0012_sst.test_vals = [-12.094714, -15.251093, -5.906365, 1.070413, 0.015775, -2.376111, 0] + pywrapper_turb_naca0012_sst.test_vals = [-12.094708, -15.251093, -5.906365, 1.070413, 0.015775, -2.376072, 0] pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.075620, -15.246688, -5.861276, 1.070036, 0.015841, -1.991001, 0.000000] pywrapper_turb_naca0012_sst.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") pywrapper_turb_naca0012_sst.timeout = 3200 diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index 2c2369c6e9e4..afe71d30b9d4 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -286,7 +286,7 @@ def main(): discadj_fsi2.cfg_dir = "disc_adj_fsi/Airfoil_2d" discadj_fsi2.cfg_file = "config.cfg" discadj_fsi2.test_iter = 8 - discadj_fsi2.test_vals = [-3.824870, 1.979160, -3.863368, 0.295450, 3.839800] + discadj_fsi2.test_vals = [-3.824565, 1.979651, -3.863368, 0.295450, 3.839800] discadj_fsi2.test_vals_aarch64 = [-3.824870, 1.979160, -3.863368, 0.295450, 3.839800] discadj_fsi2.tol = 0.00001 test_list.append(discadj_fsi2) diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index 782f0d2d8060..f2dd6431130f 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.88, -0.00, 0.00 -0, -2.74, 18.87, 0.00 -1, -4.00, 27.56, 0.00 -2, -4.94, 34.10, 0.00 -3, -5.93, 41.01, 0.00 -4, -6.68, 46.33, 0.00 -5, -7.33, 51.03, 0.00 -6, -7.86, 54.95, 0.00 -7, -8.30, 58.28, 0.00 -8, -8.60, 60.75, 0.00 -9, -8.85, 62.89, 0.00 -10, -8.96, 64.06, 0.00 -11, -9.01, 64.88, 0.00 -12, -8.93, 64.80, 0.00 -13, -8.77, 64.14, 0.00 -14, -8.51, 62.83, 0.00 -15, -8.19, 61.03, 0.00 -16, -7.81, 58.73, 0.00 -17, -7.52, 57.17, 0.00 -18, -6.97, 53.51, 0.00 -19, -6.23, 48.37, 0.00 -20, -5.59, 43.91, 0.00 -21, -4.89, 38.89, 0.00 -22, -4.16, 33.52, 0.00 -23, -3.27, 26.73, 0.00 -24, -2.44, 20.19, 0.00 -25, -1.23, 10.28, 0.00 -26, -0.37, 3.17, 0.00 -27, 0.97, -8.37, 0.00 -28, 1.86, -16.27, 0.00 -29, 3.20, -28.55, 0.00 -30, 3.94, -35.67, 0.00 -31, 5.22, -48.09, 0.00 -32, 6.02, -56.52, 0.00 -33, 7.59, -72.59, 0.00 -34, 8.24, -80.30, 0.00 -35, 9.39, -93.40, 0.00 -36, 9.92, -100.86, 0.00 -37, 10.54, -109.58, 0.00 -38, 11.01, -117.21, 0.00 -39, 10.95, -119.48, 0.00 -40, 11.48, -128.65, 0.00 -41, 10.97, -126.35, 0.00 -42, 11.91, -141.43, 0.00 -43, 12.30, -150.90, 0.00 -44, 13.37, -169.77, 0.00 -45, 14.68, -193.53, 0.00 -46, 15.80, -217.03, 0.00 -47, 19.25, -276.51, 0.00 -48, 19.53, -294.59, 0.00 -49, 22.26, -354.30, 0.00 -50, 20.96, -354.19, 0.00 -51, 20.16, -364.14, 0.00 -52, 18.40, -358.18, 0.00 -53, 16.69, -353.80, 0.00 -54, 15.07, -352.32, 0.00 -55, 12.98, -340.39, 0.00 -56, 11.19, -336.20, 0.00 -57, 8.60, -304.96, 0.00 -58, 7.16, -313.01, 0.00 -59, 6.01, -347.70, 0.00 -60, 4.70, -412.79, 0.00 -61, 2.33, -445.52, 0.00 -62, -0.55, -443.29, 0.00 -63, -3.42, -427.14, 0.00 -64, -6.31, -417.03, 0.00 -65, -8.94, -395.68, 0.00 -66, -11.64, -382.49, 0.00 -67, -14.13, -365.39, 0.00 -68, -16.51, -348.88, 0.00 -69, -18.69, -331.14, 0.00 -70, -20.72, -313.74, 0.00 -71, -22.32, -293.09, 0.00 -72, -23.72, -273.12, 0.00 -73, -24.63, -251.02, 0.00 -74, -25.83, -234.51, 0.00 -75, -26.33, -214.23, 0.00 -76, -26.92, -197.22, 0.00 -77, -26.80, -177.38, 0.00 -78, -26.94, -161.54, 0.00 -79, -26.13, -142.24, 0.00 -80, -25.19, -124.64, 0.00 -81, -22.82, -102.67, 0.00 -82, -21.57, -88.23, 0.00 -83, -19.26, -71.61, 0.00 -84, -17.97, -60.61, 0.00 -85, -15.93, -48.61, 0.00 -86, -12.97, -35.71, 0.00 -87, -8.42, -20.82, 0.00 -88, -5.98, -13.21, 0.00 -89, -8.03, -15.71, 0.00 -90, 4.80, 8.23, 0.00 -91, 4.36, 6.47, 0.00 -92, 11.84, 14.99, 0.00 -93, 0.32, 0.34, 0.00 -94, 11.38, 9.67, 0.00 -95, 45.23, 29.46, 0.00 -96, 48.26, 22.12, 0.00 -97, -197.68, -53.50, 0.00 -98, -125.90, -16.89, 0.00 -99, 14.92, -0.00, 0.00 -100, 79.73, -10.70, 0.00 -101, 186.44, -50.46, 0.00 -102, 187.22, -85.81, 0.00 -103, 135.06, -87.97, 0.00 -104, 119.91, -101.86, 0.00 -105, 79.10, -83.40, 0.00 -106, 59.63, -75.52, 0.00 -107, 30.90, -45.94, 0.00 -108, 22.56, -38.71, 0.00 -109, -4.56, 8.92, 0.00 -110, -9.71, 21.43, 0.00 -111, -21.99, 54.38, 0.00 -112, -24.51, 67.48, 0.00 -113, -34.81, 106.26, 0.00 -114, -39.06, 131.73, 0.00 -115, -43.87, 163.08, 0.00 -116, -44.80, 183.28, 0.00 -117, -47.81, 215.10, 0.00 -118, -48.21, 238.52, 0.00 -119, -49.89, 271.53, 0.00 -120, -49.93, 299.38, 0.00 -121, -49.00, 324.32, 0.00 -122, -47.34, 346.82, 0.00 -123, -45.93, 373.77, 0.00 -124, -43.73, 397.06, 0.00 -125, -41.62, 424.09, 0.00 -126, -38.87, 447.69, 0.00 -127, -36.04, 473.29, 0.00 -128, -32.71, 495.38, 0.00 -129, -29.18, 517.04, 0.00 -130, -25.50, 538.64, 0.00 -131, -21.67, 560.11, 0.00 -132, -17.65, 579.80, 0.00 -133, -13.60, 601.56, 0.00 -134, -9.38, 619.71, 0.00 -135, -5.13, 640.08, 0.00 -136, -0.81, 656.70, 0.00 -137, 3.53, 674.34, 0.00 -138, 7.85, 688.58, 0.00 -139, 12.18, 704.99, 0.00 -140, 16.41, 717.64, 0.00 -141, 20.57, 729.02, 0.00 -142, 24.63, 739.65, 0.00 -143, 28.56, 748.77, 0.00 -144, 32.40, 757.51, 0.00 -145, 36.12, 765.59, 0.00 -146, 39.66, 772.06, 0.00 -147, 43.13, 778.88, 0.00 -148, 46.36, 783.25, 0.00 -149, 49.60, 789.39, 0.00 -150, 52.48, 791.53, 0.00 -151, 55.47, 796.64, 0.00 -152, 57.83, 794.45, 0.00 -153, 57.34, 756.10, 0.00 -154, 59.99, 761.83, 0.00 -155, 69.07, 847.19, 0.00 -156, 69.33, 823.32, 0.00 -157, 53.10, 611.85, 0.00 -158, 40.29, 451.37, 0.00 -159, 43.59, 475.55, 0.00 -160, 49.17, 523.27, 0.00 -161, 18.54, 192.66, 0.00 -162, 14.94, 151.89, 0.00 -163, 8.48, 84.34, 0.00 -164, 7.58, 73.94, 0.00 -165, 3.72, 35.56, 0.00 -166, 2.83, 26.52, 0.00 -167, 1.26, 11.65, 0.00 -168, 0.55, 5.03, 0.00 -169, -0.64, -5.72, 0.00 -170, -1.47, -12.88, 0.00 -171, -2.41, -20.82, 0.00 -172, -3.12, -26.59, 0.00 -173, -3.82, -32.02, 0.00 -174, -4.48, -37.03, 0.00 -175, -5.61, -45.76, 0.00 -176, -6.31, -50.81, 0.00 -177, -6.84, -54.39, 0.00 -178, -7.42, -58.32, 0.00 -179, -7.79, -60.51, 0.00 -180, -8.26, -63.45, 0.00 -181, -8.73, -66.31, 0.00 -182, -9.08, -68.30, 0.00 -183, -9.46, -70.51, 0.00 -184, -9.69, -71.54, 0.00 -185, -9.74, -71.24, 0.00 -186, -9.78, -70.95, 0.00 -187, -9.85, -70.97, 0.00 -188, -9.79, -70.04, 0.00 -189, -9.43, -66.99, 0.00 -190, -9.12, -64.44, 0.00 -191, -8.61, -60.49, 0.00 -192, -8.09, -56.58, 0.00 -193, -7.41, -51.57, 0.00 -194, -6.72, -46.59, 0.00 -195, -5.79, -40.06, 0.00 -196, -4.88, -33.67, 0.00 -197, -3.73, -25.71, 0.00 -198, -2.60, -17.88, 0.00 +199, -0.99, -0.00, 0.00 +0, -2.92, 20.12, 0.00 +1, -4.31, 29.70, 0.00 +2, -5.43, 37.46, 0.00 +3, -6.47, 44.73, 0.00 +4, -7.32, 50.81, 0.00 +5, -8.06, 56.11, 0.00 +6, -8.66, 60.52, 0.00 +7, -9.15, 64.25, 0.00 +8, -9.50, 67.10, 0.00 +9, -9.76, 69.35, 0.00 +10, -9.88, 70.62, 0.00 +11, -9.90, 71.32, 0.00 +12, -9.83, 71.37, 0.00 +13, -9.67, 70.75, 0.00 +14, -9.38, 69.23, 0.00 +15, -8.97, 66.84, 0.00 +16, -8.56, 64.36, 0.00 +17, -8.07, 61.36, 0.00 +18, -7.43, 57.05, 0.00 +19, -6.55, 50.89, 0.00 +20, -5.88, 46.24, 0.00 +21, -5.03, 39.99, 0.00 +22, -4.23, 34.09, 0.00 +23, -3.15, 25.71, 0.00 +24, -2.24, 18.52, 0.00 +25, -0.76, 6.34, 0.00 +26, 0.13, -1.12, 0.00 +27, 1.54, -13.29, 0.00 +28, 2.43, -21.28, 0.00 +29, 3.83, -34.14, 0.00 +30, 4.54, -41.18, 0.00 +31, 5.74, -52.89, 0.00 +32, 6.43, -60.39, 0.00 +33, 7.57, -72.41, 0.00 +34, 8.11, -79.07, 0.00 +35, 8.85, -88.08, 0.00 +36, 9.26, -94.15, 0.00 +37, 9.66, -100.41, 0.00 +38, 9.93, -105.71, 0.00 +39, 9.93, -108.29, 0.00 +40, 10.18, -114.04, 0.00 +41, 9.56, -110.13, 0.00 +42, 9.54, -113.32, 0.00 +43, 8.43, -103.37, 0.00 +44, 8.66, -109.93, 0.00 +45, 7.21, -95.09, 0.00 +46, 7.50, -103.00, 0.00 +47, 6.34, -90.99, 0.00 +48, 6.94, -104.63, 0.00 +49, 6.11, -97.26, 0.00 +50, 7.39, -124.87, 0.00 +51, 9.54, -172.27, 0.00 +52, 10.89, -211.99, 0.00 +53, 13.37, -283.48, 0.00 +54, 12.59, -294.41, 0.00 +55, 12.32, -322.91, 0.00 +56, 10.14, -304.62, 0.00 +57, 8.20, -290.56, 0.00 +58, 7.08, -309.37, 0.00 +59, 6.52, -377.30, 0.00 +60, 4.92, -431.39, 0.00 +61, 2.29, -437.47, 0.00 +62, -0.53, -427.92, 0.00 +63, -3.33, -415.08, 0.00 +64, -6.10, -403.02, 0.00 +65, -8.77, -387.96, 0.00 +66, -11.43, -375.49, 0.00 +67, -13.89, -358.97, 0.00 +68, -16.29, -344.21, 0.00 +69, -18.44, -326.73, 0.00 +70, -20.60, -311.98, 0.00 +71, -22.14, -290.79, 0.00 +72, -23.87, -274.86, 0.00 +73, -24.70, -251.68, 0.00 +74, -25.74, -233.74, 0.00 +75, -26.19, -213.08, 0.00 +76, -26.25, -192.28, 0.00 +77, -26.79, -177.30, 0.00 +78, -26.15, -156.81, 0.00 +79, -25.69, -139.81, 0.00 +80, -23.81, -117.77, 0.00 +81, -22.70, -102.13, 0.00 +82, -19.68, -80.52, 0.00 +83, -13.83, -51.42, 0.00 +84, -9.73, -32.80, 0.00 +85, -3.72, -11.35, 0.00 +86, 3.57, 9.84, 0.00 +87, 13.64, 33.73, 0.00 +88, 14.81, 32.69, 0.00 +89, 19.31, 37.76, 0.00 +90, 26.59, 45.61, 0.00 +91, 54.59, 81.15, 0.00 +92, 61.48, 77.85, 0.00 +93, 80.89, 85.29, 0.00 +94, 95.46, 81.09, 0.00 +95, 167.62, 109.18, 0.00 +96, 181.85, 83.35, 0.00 +97, 229.42, 62.09, 0.00 +98, 107.00, 14.36, 0.00 +99, 110.56, -0.00, 0.00 +100, 160.54, -21.54, 0.00 +101, 158.23, -42.83, 0.00 +102, 123.70, -56.70, 0.00 +103, 69.54, -45.30, 0.00 +104, 63.32, -53.79, 0.00 +105, 33.87, -35.72, 0.00 +106, 1.63, -2.06, 0.00 +107, -4.97, 7.39, 0.00 +108, -22.53, 38.66, 0.00 +109, -31.48, 61.57, 0.00 +110, -38.84, 85.73, 0.00 +111, -39.54, 97.76, 0.00 +112, -41.11, 113.18, 0.00 +113, -45.40, 138.59, 0.00 +114, -48.21, 162.60, 0.00 +115, -50.15, 186.45, 0.00 +116, -51.10, 209.06, 0.00 +117, -52.10, 234.42, 0.00 +118, -52.15, 257.98, 0.00 +119, -51.87, 282.32, 0.00 +120, -50.94, 305.45, 0.00 +121, -49.71, 328.98, 0.00 +122, -48.26, 353.54, 0.00 +123, -46.53, 378.59, 0.00 +124, -44.36, 402.83, 0.00 +125, -41.89, 426.89, 0.00 +126, -39.12, 450.47, 0.00 +127, -36.00, 472.81, 0.00 +128, -32.66, 494.65, 0.00 +129, -29.09, 515.33, 0.00 +130, -25.39, 536.37, 0.00 +131, -21.54, 556.80, 0.00 +132, -17.55, 576.45, 0.00 +133, -13.46, 595.31, 0.00 +134, -9.29, 613.80, 0.00 +135, -5.06, 631.12, 0.00 +136, -0.80, 648.19, 0.00 +137, 3.47, 663.59, 0.00 +138, 7.73, 678.32, 0.00 +139, 11.96, 692.42, 0.00 +140, 16.14, 705.78, 0.00 +141, 20.25, 717.74, 0.00 +142, 24.26, 728.69, 0.00 +143, 28.19, 739.06, 0.00 +144, 31.99, 747.91, 0.00 +145, 35.62, 755.06, 0.00 +146, 39.14, 761.82, 0.00 +147, 42.53, 768.05, 0.00 +148, 45.75, 772.99, 0.00 +149, 48.91, 778.40, 0.00 +150, 51.71, 779.86, 0.00 +151, 54.03, 776.05, 0.00 +152, 56.28, 773.10, 0.00 +153, 58.38, 769.86, 0.00 +154, 61.98, 787.20, 0.00 +155, 64.09, 786.07, 0.00 +156, 66.67, 791.77, 0.00 +157, 52.82, 608.62, 0.00 +158, 5.31, 59.44, 0.00 +159, -15.53, -169.46, 0.00 +160, -4.44, -47.26, 0.00 +161, 3.79, 39.41, 0.00 +162, 7.00, 71.16, 0.00 +163, 3.42, 33.99, 0.00 +164, 2.69, 26.18, 0.00 +165, -0.19, -1.79, 0.00 +166, -0.79, -7.38, 0.00 +167, -0.72, -6.67, 0.00 +168, -1.02, -9.29, 0.00 +169, -1.46, -13.04, 0.00 +170, -1.89, -16.59, 0.00 +171, -2.57, -22.21, 0.00 +172, -3.11, -26.44, 0.00 +173, -3.77, -31.62, 0.00 +174, -4.23, -35.02, 0.00 +175, -5.09, -41.57, 0.00 +176, -5.74, -46.25, 0.00 +177, -6.51, -51.82, 0.00 +178, -7.08, -55.65, 0.00 +179, -7.65, -59.46, 0.00 +180, -8.12, -62.39, 0.00 +181, -8.63, -65.59, 0.00 +182, -8.99, -67.65, 0.00 +183, -9.37, -69.80, 0.00 +184, -9.61, -70.92, 0.00 +185, -9.84, -72.03, 0.00 +186, -9.84, -71.43, 0.00 +187, -10.03, -72.22, 0.00 +188, -10.02, -71.68, 0.00 +189, -9.85, -69.96, 0.00 +190, -9.57, -67.57, 0.00 +191, -9.14, -64.18, 0.00 +192, -8.62, -60.27, 0.00 +193, -8.01, -55.75, 0.00 +194, -7.28, -50.54, 0.00 +195, -6.41, -44.35, 0.00 +196, -5.40, -37.24, 0.00 +197, -4.25, -29.31, 0.00 +198, -2.90, -19.98, 0.00 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 1e7ab436b72a..968e1c570c4f 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.92, -0.00, 0.00 -0, -2.82, 19.44, 0.00 -1, -3.96, 27.26, 0.00 -2, -4.94, 34.13, 0.00 -3, -5.83, 40.30, 0.00 -4, -6.56, 45.50, 0.00 -5, -7.20, 50.13, 0.00 -6, -7.69, 53.74, 0.00 -7, -8.11, 56.96, 0.00 -8, -8.36, 59.03, 0.00 -9, -8.58, 60.93, 0.00 -10, -8.62, 61.61, 0.00 -11, -8.64, 62.26, 0.00 -12, -8.50, 61.68, 0.00 -13, -8.38, 61.34, 0.00 -14, -8.07, 59.56, 0.00 -15, -7.78, 57.97, 0.00 -16, -7.34, 55.18, 0.00 -17, -6.93, 52.67, 0.00 -18, -6.35, 48.76, 0.00 -19, -5.80, 45.05, 0.00 -20, -5.13, 40.31, 0.00 -21, -4.50, 35.79, 0.00 -22, -3.74, 30.16, 0.00 -23, -2.98, 24.34, 0.00 -24, -2.17, 17.93, 0.00 -25, -1.32, 11.04, 0.00 -26, -0.49, 4.21, 0.00 -27, 0.41, -3.51, 0.00 -28, 1.27, -11.10, 0.00 -29, 2.10, -18.72, 0.00 -30, 2.92, -26.44, 0.00 -31, 3.77, -34.73, 0.00 -32, 4.60, -43.16, 0.00 -33, 5.42, -51.86, 0.00 -34, 6.20, -60.46, 0.00 -35, 6.96, -69.21, 0.00 -36, 7.70, -78.27, 0.00 -37, 8.36, -86.87, 0.00 -38, 9.02, -96.02, 0.00 -39, 9.56, -104.28, 0.00 -40, 10.12, -113.40, 0.00 -41, 10.55, -121.56, 0.00 -42, 10.95, -130.05, 0.00 -43, 11.05, -135.56, 0.00 -44, 11.34, -144.01, 0.00 -45, 11.40, -150.32, 0.00 -46, 11.65, -160.10, 0.00 -47, 12.24, -175.82, 0.00 -48, 11.59, -174.80, 0.00 -49, 10.49, -166.97, 0.00 -50, 8.68, -146.70, 0.00 -51, 4.59, -82.88, 0.00 -52, 7.31, -142.21, 0.00 -53, 21.25, -450.45, 0.00 -54, 25.14, -587.71, 0.00 -55, 21.48, -563.18, 0.00 -56, 17.96, -539.23, 0.00 -57, 15.76, -558.72, 0.00 -58, 12.71, -555.72, 0.00 -59, 9.40, -544.46, 0.00 -60, 6.08, -533.76, 0.00 -61, 2.72, -520.75, 0.00 -62, -0.63, -508.27, 0.00 -63, -3.95, -492.77, 0.00 -64, -7.24, -478.52, 0.00 -65, -10.39, -459.48, 0.00 -66, -13.50, -443.36, 0.00 -67, -16.41, -424.23, 0.00 -68, -19.24, -406.47, 0.00 -69, -21.77, -385.65, 0.00 -70, -24.22, -366.85, 0.00 -71, -26.21, -344.18, 0.00 -72, -28.12, -323.80, 0.00 -73, -29.28, -298.39, 0.00 -74, -30.70, -278.72, 0.00 -75, -31.20, -253.86, 0.00 -76, -31.79, -232.87, 0.00 -77, -31.78, -210.36, 0.00 -78, -31.81, -190.72, 0.00 -79, -29.96, -163.09, 0.00 -80, -28.81, -142.51, 0.00 -81, -25.70, -115.63, 0.00 -82, -23.36, -95.56, 0.00 -83, -17.92, -66.64, 0.00 -84, -15.19, -51.24, 0.00 -85, -4.65, -14.18, 0.00 -86, -0.26, -0.71, 0.00 -87, 9.41, 23.25, 0.00 -88, 14.47, 31.93, 0.00 -89, 23.43, 45.83, 0.00 -90, 37.69, 64.67, 0.00 -91, 42.67, 63.43, 0.00 -92, 56.09, 71.03, 0.00 -93, 53.23, 56.12, 0.00 -94, 77.35, 65.70, 0.00 -95, 42.42, 27.63, 0.00 -96, 10.74, 4.92, 0.00 -97, 47.56, 12.87, 0.00 -98, 75.03, 10.07, 0.00 -99, 0.36, -0.00, 0.00 -100, 97.48, -13.08, 0.00 -101, 172.16, -46.60, 0.00 -102, 148.56, -68.09, 0.00 -103, 130.04, -84.70, 0.00 -104, 110.88, -94.19, 0.00 -105, 98.92, -104.31, 0.00 -106, 84.16, -106.58, 0.00 -107, 53.49, -79.51, 0.00 -108, 45.94, -78.83, 0.00 -109, 17.03, -33.31, 0.00 -110, 11.56, -25.52, 0.00 -111, -7.53, 18.62, 0.00 -112, -14.11, 38.85, 0.00 -113, -26.43, 80.67, 0.00 -114, -31.15, 105.06, 0.00 -115, -36.24, 134.73, 0.00 -116, -38.44, 157.29, 0.00 -117, -41.50, 186.70, 0.00 -118, -42.29, 209.23, 0.00 -119, -43.71, 237.89, 0.00 -120, -43.36, 259.97, 0.00 -121, -43.38, 287.09, 0.00 -122, -42.21, 309.23, 0.00 -123, -41.30, 336.04, 0.00 -124, -39.47, 358.43, 0.00 -125, -37.83, 385.46, 0.00 -126, -35.45, 408.28, 0.00 -127, -32.92, 432.34, 0.00 -128, -29.95, 453.52, 0.00 -129, -26.87, 476.13, 0.00 -130, -23.51, 496.73, 0.00 -131, -20.04, 517.96, 0.00 -132, -16.35, 536.89, 0.00 -133, -12.60, 557.35, 0.00 -134, -8.70, 574.79, 0.00 -135, -4.75, 592.92, 0.00 -136, -0.75, 609.08, 0.00 -137, 3.27, 625.75, 0.00 -138, 7.29, 639.56, 0.00 -139, 11.30, 654.52, 0.00 -140, 15.25, 666.62, 0.00 -141, 19.14, 678.33, 0.00 -142, 22.92, 688.27, 0.00 -143, 26.63, 698.04, 0.00 -144, 30.19, 705.88, 0.00 -145, 33.68, 713.98, 0.00 -146, 36.96, 719.54, 0.00 -147, 40.03, 723.00, 0.00 -148, 42.96, 725.82, 0.00 -149, 45.50, 724.25, 0.00 -150, 48.43, 730.47, 0.00 -151, 51.10, 733.97, 0.00 -152, 53.48, 734.72, 0.00 -153, 39.59, 522.09, 0.00 -154, -0.60, -7.66, 0.00 -155, -3.05, -37.45, 0.00 -156, 5.42, 64.40, 0.00 -157, 6.68, 76.94, 0.00 -158, 6.61, 74.08, 0.00 -159, 5.30, 57.82, 0.00 -160, 5.37, 57.13, 0.00 -161, 4.93, 51.25, 0.00 -162, 4.64, 47.15, 0.00 -163, 4.21, 41.93, 0.00 -164, 3.81, 37.17, 0.00 -165, 3.32, 31.75, 0.00 -166, 2.81, 26.41, 0.00 -167, 2.22, 20.44, 0.00 -168, 1.62, 14.65, 0.00 -169, 0.93, 8.33, 0.00 -170, 0.25, 2.23, 0.00 -171, -0.51, -4.42, 0.00 -172, -1.24, -10.52, 0.00 -173, -1.95, -16.35, 0.00 -174, -2.66, -22.04, 0.00 -175, -3.38, -27.60, 0.00 -176, -4.10, -33.06, 0.00 -177, -4.70, -37.37, 0.00 -178, -5.35, -42.05, 0.00 -179, -5.86, -45.51, 0.00 -180, -6.43, -49.40, 0.00 -181, -6.84, -51.98, 0.00 -182, -7.31, -55.02, 0.00 -183, -7.65, -57.00, 0.00 -184, -8.01, -59.13, 0.00 -185, -8.18, -59.86, 0.00 -186, -8.41, -61.04, 0.00 -187, -8.44, -60.78, 0.00 -188, -8.49, -60.71, 0.00 -189, -8.38, -59.56, 0.00 -190, -8.23, -58.15, 0.00 -191, -7.93, -55.68, 0.00 -192, -7.56, -52.84, 0.00 -193, -7.02, -48.89, 0.00 -194, -6.43, -44.64, 0.00 -195, -5.67, -39.23, 0.00 -196, -4.82, -33.30, 0.00 -197, -3.83, -26.41, 0.00 -198, -2.73, -18.78, 0.00 +199, -0.93, -0.00, 0.00 +0, -2.82, 19.40, 0.00 +1, -3.92, 27.02, 0.00 +2, -4.88, 33.72, 0.00 +3, -5.72, 39.56, 0.00 +4, -6.44, 44.71, 0.00 +5, -7.02, 48.89, 0.00 +6, -7.51, 52.48, 0.00 +7, -7.87, 55.30, 0.00 +8, -8.13, 57.42, 0.00 +9, -8.30, 58.97, 0.00 +10, -8.36, 59.79, 0.00 +11, -8.37, 60.26, 0.00 +12, -8.25, 59.87, 0.00 +13, -8.09, 59.19, 0.00 +14, -7.81, 57.68, 0.00 +15, -7.51, 55.96, 0.00 +16, -7.11, 53.47, 0.00 +17, -6.69, 50.85, 0.00 +18, -6.18, 47.44, 0.00 +19, -5.71, 44.32, 0.00 +20, -5.09, 40.02, 0.00 +21, -4.57, 36.32, 0.00 +22, -3.89, 31.32, 0.00 +23, -3.31, 27.04, 0.00 +24, -2.58, 21.30, 0.00 +25, -1.98, 16.65, 0.00 +26, -1.21, 10.26, 0.00 +27, -0.62, 5.33, 0.00 +28, 0.18, -1.55, 0.00 +29, 0.67, -6.01, 0.00 +30, 1.52, -13.78, 0.00 +31, 2.01, -18.57, 0.00 +32, 2.90, -27.18, 0.00 +33, 3.42, -32.69, 0.00 +34, 4.40, -42.92, 0.00 +35, 5.17, -51.39, 0.00 +36, 6.18, -62.79, 0.00 +37, 7.12, -73.99, 0.00 +38, 8.09, -86.13, 0.00 +39, 9.14, -99.76, 0.00 +40, 9.97, -111.72, 0.00 +41, 11.14, -128.38, 0.00 +42, 11.88, -141.03, 0.00 +43, 12.85, -157.59, 0.00 +44, 13.21, -167.77, 0.00 +45, 13.77, -181.54, 0.00 +46, 13.74, -188.78, 0.00 +47, 13.65, -196.06, 0.00 +48, 13.29, -200.42, 0.00 +49, 13.44, -213.89, 0.00 +50, 13.22, -223.33, 0.00 +51, 11.93, -215.52, 0.00 +52, 7.52, -146.34, 0.00 +53, 8.42, -178.53, 0.00 +54, 20.41, -477.30, 0.00 +55, 22.27, -583.66, 0.00 +56, 18.81, -564.85, 0.00 +57, 15.35, -544.23, 0.00 +58, 12.24, -535.25, 0.00 +59, 9.08, -525.86, 0.00 +60, 5.87, -515.48, 0.00 +61, 2.63, -503.38, 0.00 +62, -0.61, -490.62, 0.00 +63, -3.81, -475.68, 0.00 +64, -6.98, -460.89, 0.00 +65, -10.04, -444.16, 0.00 +66, -13.02, -427.64, 0.00 +67, -15.86, -409.93, 0.00 +68, -18.56, -392.00, 0.00 +69, -21.06, -373.16, 0.00 +70, -23.39, -354.15, 0.00 +71, -25.40, -333.59, 0.00 +72, -27.20, -313.20, 0.00 +73, -28.67, -292.19, 0.00 +74, -29.86, -271.15, 0.00 +75, -30.55, -248.58, 0.00 +76, -30.89, -226.28, 0.00 +77, -30.79, -203.80, 0.00 +78, -30.34, -181.93, 0.00 +79, -29.53, -160.74, 0.00 +80, -28.13, -139.16, 0.00 +81, -26.90, -121.01, 0.00 +82, -24.39, -99.78, 0.00 +83, -21.49, -79.88, 0.00 +84, -17.59, -59.33, 0.00 +85, -13.17, -40.20, 0.00 +86, -7.32, -20.15, 0.00 +87, -1.81, -4.47, 0.00 +88, 6.92, 15.28, 0.00 +89, 14.29, 27.95, 0.00 +90, 32.10, 55.07, 0.00 +91, 49.31, 73.31, 0.00 +92, 88.81, 112.47, 0.00 +93, 124.48, 131.25, 0.00 +94, 123.67, 105.06, 0.00 +95, 104.62, 68.15, 0.00 +96, 72.18, 33.08, 0.00 +97, -25.27, -6.84, 0.00 +98, -25.34, -3.40, 0.00 +99, -17.47, 0.00, 0.00 +100, -28.57, 3.83, 0.00 +101, 50.08, -13.55, 0.00 +102, 82.69, -37.90, 0.00 +103, 88.30, -57.51, 0.00 +104, 82.75, -70.30, 0.00 +105, 58.48, -61.66, 0.00 +106, 55.42, -70.19, 0.00 +107, 43.78, -65.08, 0.00 +108, 33.72, -57.85, 0.00 +109, 21.75, -42.54, 0.00 +110, 9.57, -21.12, 0.00 +111, -3.75, 9.28, 0.00 +112, -12.82, 35.29, 0.00 +113, -22.12, 67.51, 0.00 +114, -28.06, 94.63, 0.00 +115, -31.07, 115.49, 0.00 +116, -33.29, 136.22, 0.00 +117, -36.82, 165.66, 0.00 +118, -38.04, 188.20, 0.00 +119, -39.49, 214.93, 0.00 +120, -39.62, 237.58, 0.00 +121, -40.07, 265.19, 0.00 +122, -39.70, 290.85, 0.00 +123, -38.90, 316.55, 0.00 +124, -37.45, 340.05, 0.00 +125, -35.61, 362.84, 0.00 +126, -33.56, 386.52, 0.00 +127, -31.16, 409.15, 0.00 +128, -28.44, 430.68, 0.00 +129, -25.51, 452.03, 0.00 +130, -22.43, 473.81, 0.00 +131, -19.12, 494.36, 0.00 +132, -15.65, 514.12, 0.00 +133, -12.07, 533.98, 0.00 +134, -8.37, 553.04, 0.00 +135, -4.58, 571.17, 0.00 +136, -0.73, 588.35, 0.00 +137, 3.16, 604.93, 0.00 +138, 7.06, 619.62, 0.00 +139, 10.96, 634.43, 0.00 +140, 14.81, 647.41, 0.00 +141, 18.61, 659.64, 0.00 +142, 22.31, 670.10, 0.00 +143, 25.96, 680.56, 0.00 +144, 29.46, 688.92, 0.00 +145, 32.90, 697.36, 0.00 +146, 36.16, 703.92, 0.00 +147, 39.34, 710.52, 0.00 +148, 42.21, 713.11, 0.00 +149, 44.50, 708.22, 0.00 +150, 46.80, 705.83, 0.00 +151, 49.96, 717.59, 0.00 +152, 55.47, 762.02, 0.00 +153, 36.27, 478.33, 0.00 +154, 6.21, 78.85, 0.00 +155, 2.62, 32.19, 0.00 +156, 1.80, 21.41, 0.00 +157, 1.03, 11.88, 0.00 +158, 1.62, 18.17, 0.00 +159, 2.87, 31.36, 0.00 +160, 2.92, 31.05, 0.00 +161, 2.95, 30.70, 0.00 +162, 2.68, 27.25, 0.00 +163, 2.40, 23.87, 0.00 +164, 1.89, 18.41, 0.00 +165, 1.53, 14.66, 0.00 +166, 0.94, 8.84, 0.00 +167, 0.55, 5.06, 0.00 +168, -0.07, -0.67, 0.00 +169, -0.54, -4.82, 0.00 +170, -1.20, -10.56, 0.00 +171, -1.65, -14.27, 0.00 +172, -2.29, -19.51, 0.00 +173, -2.87, -24.03, 0.00 +174, -3.55, -29.33, 0.00 +175, -4.13, -33.67, 0.00 +176, -4.77, -38.40, 0.00 +177, -5.25, -41.76, 0.00 +178, -5.83, -45.79, 0.00 +179, -6.32, -49.11, 0.00 +180, -6.83, -52.48, 0.00 +181, -7.26, -55.15, 0.00 +182, -7.68, -57.75, 0.00 +183, -8.01, -59.70, 0.00 +184, -8.32, -61.43, 0.00 +185, -8.51, -62.24, 0.00 +186, -8.65, -62.80, 0.00 +187, -8.70, -62.69, 0.00 +188, -8.69, -62.14, 0.00 +189, -8.56, -60.80, 0.00 +190, -8.37, -59.08, 0.00 +191, -8.05, -56.54, 0.00 +192, -7.65, -53.45, 0.00 +193, -7.11, -49.48, 0.00 +194, -6.49, -45.03, 0.00 +195, -5.72, -39.59, 0.00 +196, -4.85, -33.47, 0.00 +197, -3.86, -26.60, 0.00 +198, -2.72, -18.72, 0.00 diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 9d7c6b857b14..7faa5792ab12 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -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.004412, -7.544478, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.004416, -7.543897, -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) @@ -283,7 +283,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-12.037240, -16.384159, 1.080346, 0.018385, 20, -3.455187, 20, -4.641267, 0] + turb_naca0012_sa.test_vals = [-12.037342, -16.384159, 1.080346, 0.018385, 20, -3.455793, 20, -4.641247, 0] turb_naca0012_sa.test_vals_aarch64 = [-12.037297, -16.384158, 1.080346, 0.018385, 20.000000, -3.455886, 20.000000, -4.641247, 0.000000] turb_naca0012_sa.timeout = 3200 test_list.append(turb_naca0012_sa) @@ -293,7 +293,7 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.094475, -15.251083, -5.906366, 1.070413, 0.015775, -3.178930, 0] + turb_naca0012_sst.test_vals = [-12.094382, -15.251082, -5.906366, 1.070413, 0.015775, -3.178797, 0] turb_naca0012_sst.test_vals_aarch64 = [-12.076068, -15.246740, -5.861280, 1.070036, 0.015841, -3.297854, 0.000000] turb_naca0012_sst.timeout = 3200 test_list.append(turb_naca0012_sst) @@ -312,7 +312,7 @@ def main(): turb_naca0012_sst_sust_restart.cfg_dir = "rans/naca0012" turb_naca0012_sst_sust_restart.cfg_file = "turb_NACA0012_sst_sust.cfg" turb_naca0012_sst_sust_restart.test_iter = 10 - turb_naca0012_sst_sust_restart.test_vals = [-12.080392, -14.837169, -5.733461, 1.000893, 0.019109, -2.634226] + turb_naca0012_sst_sust_restart.test_vals = [-12.080556, -14.837169, -5.733461, 1.000893, 0.019109, -2.633984] turb_naca0012_sst_sust_restart.test_vals_aarch64 = [-12.074189, -14.836725, -5.732398, 1.000050, 0.019144, -3.315560] turb_naca0012_sst_sust_restart.timeout = 3200 test_list.append(turb_naca0012_sst_sust_restart) @@ -686,7 +686,7 @@ def main(): turb_naca0012_1c.cfg_dir = "rans_uq/naca0012" turb_naca0012_1c.cfg_file = "turb_NACA0012_uq_1c.cfg" turb_naca0012_1c.test_iter = 10 - turb_naca0012_1c.test_vals = [-4.979967, 1.343850, 0.597508, 0.017311] + turb_naca0012_1c.test_vals = [-4.981677, 1.343534, 0.597773, 0.017412] turb_naca0012_1c.test_vals_aarch64 = [-4.992791, 1.342873, 0.557941, 0.003269] test_list.append(turb_naca0012_1c) @@ -695,7 +695,7 @@ def main(): turb_naca0012_2c.cfg_dir = "rans_uq/naca0012" turb_naca0012_2c.cfg_file = "turb_NACA0012_uq_2c.cfg" turb_naca0012_2c.test_iter = 10 - turb_naca0012_2c.test_vals = [-5.482898, 1.261918, 0.440874, -0.029636] + turb_naca0012_2c.test_vals = [-5.482890, 1.261920, 0.441122, -0.029557] test_list.append(turb_naca0012_2c) # NACA0012 3c @@ -711,7 +711,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.127708, 1.284871, 0.779462, 0.086168] + turb_naca0012_p1c1.test_vals = [-5.127673, 1.284889, 0.779305, 0.086111] turb_naca0012_p1c1.test_vals_aarch64 = [-5.119942, 1.283920, 0.486264, -0.021518] test_list.append(turb_naca0012_p1c1) @@ -720,7 +720,7 @@ def main(): turb_naca0012_p1c2.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c2.cfg_file = "turb_NACA0012_uq_p1c2.cfg" turb_naca0012_p1c2.test_iter = 10 - turb_naca0012_p1c2.test_vals = [-5.554059, 1.235065, 0.521498, -0.004382] + turb_naca0012_p1c2.test_vals = [-5.553903, 1.235087, 0.521251, -0.004471] test_list.append(turb_naca0012_p1c2) ###################################### @@ -945,7 +945,7 @@ def main(): uniform_flow.cfg_dir = "sliding_interface/uniform_flow" uniform_flow.cfg_file = "uniform_NN.cfg" uniform_flow.test_iter = 2 - uniform_flow.test_vals = [2.000000, 0.000000, -0.230641, -13.250662] + uniform_flow.test_vals = [2.000000, 0.000000, -0.230641, -13.250620] uniform_flow.test_vals_aarch64 = [2.000000, 0.000000, -0.230641, -13.249000] uniform_flow.tol = 0.000001 uniform_flow.unsteady = True @@ -1565,7 +1565,7 @@ def main(): pywrapper_turb_naca0012_sst.cfg_dir = "rans/naca0012" pywrapper_turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" pywrapper_turb_naca0012_sst.test_iter = 10 - pywrapper_turb_naca0012_sst.test_vals = [-12.094475, -15.251083, -5.906366, 1.070413, 0.015775, -3.178930, 0] + pywrapper_turb_naca0012_sst.test_vals = [-12.094382, -15.251082, -5.906366, 1.070413, 0.015775, -3.178797, 0] pywrapper_turb_naca0012_sst.test_vals_aarch64 = [-12.076068, -15.246740, -5.861280, 1.070036, 0.015841, -3.297854, 0.000000] pywrapper_turb_naca0012_sst.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") pywrapper_turb_naca0012_sst.timeout = 3200 diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index f673baabd18b..c8962aa3a189 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -206,7 +206,7 @@ def main(): discadj_fsi.cfg_dir = "disc_adj_fsi" discadj_fsi.cfg_file = "config.cfg" discadj_fsi.test_iter = 6 - discadj_fsi.test_vals = [6, -8.929655, -10.097091, 3.0939e-11, -1.7573e-06] + discadj_fsi.test_vals = [6, -8.928909, -10.114567, 3.0938e-11, -1.7573e-06] discadj_fsi.test_vals_aarch64 = [6, -8.928820, -10.067497, 3.0979e-11, -1.7585e-06] test_list.append(discadj_fsi) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index bef1f3c1fdeb..32fdfc7d41f5 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -237,7 +237,7 @@ def main(): tutorial_trans_flatplate_T3A.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A" tutorial_trans_flatplate_T3A.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3A.test_iter = 20 - tutorial_trans_flatplate_T3A.test_vals = [-5.790137, -2.054834, -3.894661, -0.255074, -1.747007, 5.119341, -3.493237, 0.393262] + tutorial_trans_flatplate_T3A.test_vals = [-5.790137, -2.054834, -3.894661, -0.255075, -1.747052, 5.119341, -3.493237, 0.393262] tutorial_trans_flatplate_T3A.test_vals_aarch64 = [-5.808996, -2.070606, -3.969765, -0.277943, -1.953289, 1.708472, -3.514943, 0.357411] tutorial_trans_flatplate_T3A.no_restart = True test_list.append(tutorial_trans_flatplate_T3A) @@ -247,7 +247,7 @@ def main(): tutorial_trans_flatplate_T3Am.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A-" tutorial_trans_flatplate_T3Am.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3Am.test_iter = 20 - tutorial_trans_flatplate_T3Am.test_vals = [-5.591088, -1.700867, -3.100341, -0.106090, -3.750523, 3.287643, -2.394576, 1.119623] + tutorial_trans_flatplate_T3Am.test_vals = [-5.590179, -1.700867, -3.098472, -0.105296, -3.750523, 3.287643, -2.394576, 1.119623] tutorial_trans_flatplate_T3Am.test_vals_aarch64 = [-5.540938, -1.681627, -2.878831, -0.058224, -3.695533, 3.413628, -2.385345, 1.103633] tutorial_trans_flatplate_T3Am.no_restart = True test_list.append(tutorial_trans_flatplate_T3Am) @@ -302,7 +302,7 @@ def main(): tutorial_unst_naca0012.cfg_dir = "../Tutorials/compressible_flow/Unsteady_NACA0012" tutorial_unst_naca0012.cfg_file = "unsteady_naca0012.cfg" tutorial_unst_naca0012.test_iter = 520 - tutorial_unst_naca0012.test_vals = [520, 0, -5.293168, 0, 0.301651, 0.772998, 0.002171, 0.012763] + tutorial_unst_naca0012.test_vals = [520, 0, -5.298841, 0, 0.307206, 0.773318, 0.002447, 0.014242] tutorial_unst_naca0012.test_vals_aarch64 = [520, 0, -5.292359, 0, 0.284720, 0.766329, 0.000954, 0.007565] tutorial_unst_naca0012.unsteady = True test_list.append(tutorial_unst_naca0012) diff --git a/TestCases/vandv.py b/TestCases/vandv.py index ea6855b661d0..0236cd5ec953 100644 --- a/TestCases/vandv.py +++ b/TestCases/vandv.py @@ -63,7 +63,7 @@ def main(): flatplate_sst1994m.cfg_dir = "vandv/rans/flatplate" flatplate_sst1994m.cfg_file = "turb_flatplate_sst.cfg" flatplate_sst1994m.test_iter = 5 - flatplate_sst1994m.test_vals = [-13.040613, -10.136941, -10.940824, -7.982363, -10.323879, -4.732619, 0.002801] + flatplate_sst1994m.test_vals = [-13.040446, -10.136636, -10.945108, -7.983081, -10.323877, -4.733046, 0.002801] flatplate_sst1994m.test_vals_aarch64 = [-13.021715, -9.534786, -10.401912, -7.501836, -9.750800, -4.850665, 0.002807] test_list.append(flatplate_sst1994m) @@ -72,7 +72,7 @@ def main(): bump_sst1994m.cfg_dir = "vandv/rans/bump_in_channel" bump_sst1994m.cfg_file = "turb_bump_sst.cfg" bump_sst1994m.test_iter = 5 - bump_sst1994m.test_vals = [-11.928363, -10.095978, -9.513649, -6.445700, -11.773659, -6.990340, 0.004931] + bump_sst1994m.test_vals = [-11.928190, -10.095673, -9.512453, -6.445471, -11.773665, -6.998333, 0.004931] bump_sst1994m.test_vals_aarch64 = [-13.042689, -10.812982, -10.604523, -7.655547, -10.816257, -5.308083, 0.004911] test_list.append(bump_sst1994m) @@ -99,7 +99,7 @@ def main(): dsma661_sa.cfg_dir = "vandv/rans/dsma661" dsma661_sa.cfg_file = "dsma661_sa_config.cfg" dsma661_sa.test_iter = 5 - dsma661_sa.test_vals = [-11.230865, -8.242970, -8.982056, -5.877960, -10.737687, 0.155687, 0.024232] + dsma661_sa.test_vals = [-11.266227, -8.243175, -9.037538, -5.941643, -10.737679, 0.155687, 0.024232] dsma661_sa.test_vals_aarch64 = [-11.293183, -8.241775, -9.083761, -6.011398, -10.737680, 0.155687, 0.024232] test_list.append(dsma661_sa) @@ -108,7 +108,7 @@ def main(): dsma661_sst.cfg_dir = "vandv/rans/dsma661" dsma661_sst.cfg_file = "dsma661_sst_config.cfg" dsma661_sst.test_iter = 5 - dsma661_sst.test_vals = [-11.017110, -8.156868, -9.048400, -5.895204, -10.649930, -7.839740, 0.155882, 0.023344] + dsma661_sst.test_vals = [-11.020377, -8.157152, -8.998182, -5.917729, -10.650155, -7.856100, 0.155882, 0.023344] dsma661_sst.test_vals_aarch64 = [-10.977195, -8.403731, -8.747068, -5.808899, -10.522786, -7.369851, 0.155875, 0.023353] test_list.append(dsma661_sst) From 92ec37e94605d711bb74d7cf3205283b16096f40 Mon Sep 17 00:00:00 2001 From: Nijso Date: Tue, 21 Apr 2026 09:16:23 +0200 Subject: [PATCH 216/229] Fix flame initialization (#2784) * initialization * Update CoolProp submodule (98b3523d) * fix for flame sheet initialization * update comment * add flame ignition config option * Apply suggestions from code review change variable name Co-authored-by: Nijso * fix duplicate line * Moved ignition temperature setting to flamelet parsed options * Error message for if ignition temperature is below initial temperature of the flow field * Ignition temperature check in spark ignition * Description of ignition temperature in config template * precommit * MLPCpp update * Added python wrapper regression test for flame initialization methods. * Print test case output * Added flamelet initialization test case to regression tests * Update test case branch * Get right test cases branch for regression tests * Reduced number of MLPs for test case * fix typo * change workfow to develop --------- Co-authored-by: Nijso Beishuizen Co-authored-by: EvertBunschoten --- Common/include/option_structure.hpp | 2 + Common/src/CConfig.cpp | 23 +++ .../solvers/CSpeciesFlameletSolver.hpp | 3 +- .../src/solvers/CSpeciesFlameletSolver.cpp | 32 ++-- .../flamelet_initialization.py | 144 ++++++++++++++++++ TestCases/parallel_regression.py | 10 +- config_template.cfg | 10 ++ meson_scripts/init.py | 2 +- subprojects/MLPCpp | 2 +- 9 files changed, 214 insertions(+), 14 deletions(-) create mode 100644 TestCases/flamelet/08_flame_init_method/flamelet_initialization.py diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index 38d984c4ea9c..677e317912ec 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -1465,6 +1465,8 @@ struct FluidFlamelet_ParsedOptions { su2double* spark_reaction_rates; /*!< \brief Source terms for flamelet spark ignition option. */ unsigned short nspark; /*!< \brief Number of source terms for spark initialization. */ bool preferential_diffusion = false; /*!< \brief Preferential diffusion physics for flamelet solver.*/ + su2double Flame_T_ignition = 5000; /*!< \brief Ignition temperature for the flame, used for initialization. */ + }; /*! diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 2ba453b197b0..c2b2f8ff9cbd 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -1419,6 +1419,9 @@ void CConfig::SetConfig_Options() { /*!\brief SPARK_REACTION_RATES \n DESCRIPTION: Net source term values applied to species within spark area during spark ignition. \ingroup Config*/ addDoubleListOption("SPARK_REACTION_RATES", flamelet_ParsedOptions.nspark, flamelet_ParsedOptions.spark_reaction_rates); + /*!\brief FLAME_INIT_IGNITION \n DESCRIPTION: Ignition temperature for the flame initialization \ingroup Config*/ + addDoubleOption("FLAME_INIT_IGNITION", flamelet_ParsedOptions.Flame_T_ignition, 5000.0); + /*--- Options related to mass diffusivity and thereby the species solver. ---*/ /*!\brief DIFFUSIVITY_MODEL\n DESCRIPTION: mass diffusivity model \n DEFAULT constant disffusivity \ingroup Config*/ @@ -5700,6 +5703,26 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i SU2_MPI::Error("Number of initial species incompatible with number of controlling variables and user scalars.", CURRENT_FUNCTION); /*--- We can have additional user defined transported scalars ---*/ flamelet_ParsedOptions.n_scalars = flamelet_ParsedOptions.n_control_vars + flamelet_ParsedOptions.n_user_scalars; + + /*--- Check that spark ignition has required parameters defined ---*/ + if (flamelet_ParsedOptions.ignition_method == FLAMELET_INIT_TYPE::SPARK) { + /*--- Check if SPARK_INIT was explicitly set in config file ---*/ + if (all_options.find("SPARK_INIT") != all_options.end()) { + SU2_MPI::Error("FLAME_INIT_METHOD= SPARK requires SPARK_INIT to be defined in the config file.", CURRENT_FUNCTION); + } + /*--- Check if SPARK_REACTION_RATES was explicitly set in config file ---*/ + if (all_options.find("SPARK_REACTION_RATES") != all_options.end()) { + SU2_MPI::Error("FLAME_INIT_METHOD= SPARK requires SPARK_REACTION_RATES to be defined in the config file.", CURRENT_FUNCTION); + } + if (flamelet_ParsedOptions.nspark < flamelet_ParsedOptions.n_scalars) { + SU2_MPI::Error("SPARK_REACTION_RATES must have at least " + to_string(flamelet_ParsedOptions.n_scalars) + + " values (one for each scalar variable), but only " + to_string(flamelet_ParsedOptions.nspark) + " were provided.", CURRENT_FUNCTION); + } + } + /*--- Check if flame ignition temperature is valid ---*/ + if (flamelet_ParsedOptions.Flame_T_ignition <= Inc_Temperature_Init) { + SU2_MPI::Error("Flame ignition temperature must be higher than the initial temperature of the flow field.", CURRENT_FUNCTION); + } } if (Kind_Regime == ENUM_REGIME::COMPRESSIBLE && GetBounded_Scalar()) { diff --git a/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp b/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp index df61813a3e27..5801cd6d8e3c 100644 --- a/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp +++ b/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp @@ -70,9 +70,10 @@ class CSpeciesFlameletSolver final : public CSpeciesSolver { * \brief Find maximum progress variable value within the manifold for the current solution. * \param[in] fluid_model - pointer to flamelet fluid model. * \param[in] scalars - local scalar solution. + * \param[in] T_ignition - ignition temperature - at this temperature, the progress variable is considered burnt. * \return - maximum progress variable value within manifold bounds. */ - su2double GetBurntProgressVariable(CFluidModel* fluid_model, const su2double* scalars); + su2double GetBurntProgressVariable(CFluidModel* fluid_model, const su2double* scalars, const su2double T_ignition); /*! * \brief Retrieve scalar source terms from manifold. diff --git a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp index de8d5e618531..297c1b1540b0 100644 --- a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp @@ -103,9 +103,13 @@ void CSpeciesFlameletSolver::Preprocessing(CGeometry* geometry, CSolver** solver su2double dist_from_center = 0, spark_radius = flamelet_config_options.spark_init[3]; dist_from_center = GeometryToolbox::SquaredDistance(nDim, geometry->nodes->GetCoord(i_point), flamelet_config_options.spark_init.data()); - if (dist_from_center < pow(spark_radius,2)) { - for (auto iVar = 0u; iVar < nVar; iVar++) - nodes->SetScalarSource(i_point, iVar, nodes->GetScalarSources(i_point)[iVar] + flamelet_config_options.spark_reaction_rates[iVar]); + su2double T_local = flowNodes->GetTemperature(i_point); + if (dist_from_center < pow(spark_radius,2) && T_local < flamelet_config_options.Flame_T_ignition) { + /*--- Add spark reaction rates to the sources that were just set by SetScalarSources ---*/ + const su2double* current_sources = nodes->GetScalarSources(i_point); + for (auto iVar = 0u; iVar < nVar; iVar++) { + nodes->SetScalarSource(i_point, iVar, current_sources[iVar] + flamelet_config_options.spark_reaction_rates[iVar]); + } } } @@ -184,7 +188,7 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** su2double enth_inlet = config->GetSpecies_Init()[I_ENTH]; su2double prog_burnt = 0, prog_unburnt, point_loc; - su2double scalar_init[MAXNVAR]; + su2double scalar_init[MAXNVAR]= {0.0}; if (rank == MASTER_NODE) { cout << "initial condition: T = " << temp_inlet << endl; @@ -197,10 +201,11 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** cout << "Ignition with a straight flame front" << endl; break; case FLAMELET_INIT_TYPE::SPARK: - cout << "Ignition with an artificial spark" << endl; + cout << "Ignition with an artificial spark at iteration "<< flamelet_config_options.spark_init[4] + << " for a duration of " << flamelet_config_options.spark_init[5] << " iterations." << endl; break; case FLAMELET_INIT_TYPE::NONE: - cout << "No solution ignition (cold flow)" << endl; + cout << "No solution ignition (cold flow or restart)" << endl; break; default: break; @@ -216,7 +221,6 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** for (unsigned long i_mesh = 0; i_mesh <= config->GetnMGLevels(); i_mesh++) { fluid_model_local = solver_container[i_mesh][FLOW_SOL]->GetFluidModel(); - if (flame_front_ignition) prog_burnt = GetBurntProgressVariable(fluid_model_local, scalar_init); for (auto iVar = 0u; iVar < nVar; iVar++) scalar_init[iVar] = config->GetSpecies_Init()[iVar]; @@ -224,6 +228,8 @@ void CSpeciesFlameletSolver::SetInitialCondition(CGeometry** geometry, CSolver** n_not_iterated_local += GetEnthFromTemp(fluid_model_local, temp_inlet, config->GetSpecies_Init(), &enth_inlet); scalar_init[I_ENTH] = enth_inlet; + 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]; SU2_OMP_FOR_STAT(omp_chunk_size) for (unsigned long i_point = 0; i_point < nPoint; i_point++) { @@ -805,16 +811,22 @@ unsigned long CSpeciesFlameletSolver::GetEnthFromTemp(CFluidModel* fluid_model, return exit_code; } -su2double CSpeciesFlameletSolver::GetBurntProgressVariable(CFluidModel* fluid_model, const su2double* scalar_solution) { +su2double CSpeciesFlameletSolver::GetBurntProgressVariable(CFluidModel* fluid_model, const su2double* scalar_solution, const su2double T_ignition) { SU2_ZONE_SCOPED su2double scalars[MAXNVAR], delta = 1e-3; for (auto iVar = 0u; iVar < nVar; iVar++) scalars[iVar] = scalar_solution[iVar]; bool outside = false; + scalars[I_PROGVAR] += delta; while (!outside) { - fluid_model->SetTDState_T(300, scalars); - if (fluid_model->GetExtrapolation() == 1 || (fluid_model->GetTemperature()>1000.)) outside = true; + /*--- Note that 300.0 is a dummy temperature here and not used. ---*/ + fluid_model->SetTDState_T(300.0, scalars); + if ((fluid_model->GetExtrapolation() == 1) || fluid_model->GetTemperature() > T_ignition) outside = true; scalars[I_PROGVAR] += delta; } su2double pv_burnt = scalars[I_PROGVAR] - delta; + if (rank == MASTER_NODE) { + cout << "Burnt progress variable determined from flamelet table: " << pv_burnt << endl; + cout << "Burnt temperature from flamelet table: " << fluid_model->GetTemperature() << endl; + } return pv_burnt; } diff --git a/TestCases/flamelet/08_flame_init_method/flamelet_initialization.py b/TestCases/flamelet/08_flame_init_method/flamelet_initialization.py new file mode 100644 index 000000000000..ed0e0740ca76 --- /dev/null +++ b/TestCases/flamelet/08_flame_init_method/flamelet_initialization.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python + +## \file run.py +# \brief Flame simulation initialization test case. +# \version 8.4.0 "Harrier" +# +# SU2 Project Website: https://su2code.github.io +# +# The SU2 Project is maintained by the SU2 Foundation +# (http://su2foundation.org) +# +# Copyright 2012-2026, SU2 Contributors (cf. AUTHORS.md) +# +# SU2 is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# SU2 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with SU2. If not, see . + +import pysu2 +from mpi4py import MPI + +# Generatl config options +config_options = """ +FILENAMES_INTERPOLATOR= (MLP_Group1.mlp,MLP_Group2.mlp,MLP_Group3.mlp,MLP_Group4.mlp,MLP_Group5.mlp,MLP_Group6.mlp) + +INC_VELOCITY_INIT= (1e-5, 0.0, 0.0) +MARKER_SYM=(x_minus, x_plus, y_plus, y_minus) + +SOLVER = INC_NAVIER_STOKES +INC_DENSITY_MODEL= VARIABLE +INC_ENERGY_EQUATION = YES +INC_TEMPERATURE_INIT= 300 +INC_NONDIM= DIMENSIONAL + + +FLUID_MODEL= FLUID_FLAMELET +INTERPOLATION_METHOD= MLP + +CONTROLLING_VARIABLE_NAMES=(ProgressVariable,EnthalpyTot,MixtureFraction) +CONTROLLING_VARIABLE_SOURCE_NAMES=(ProdRateTot_PV,NULL,NULL) + +KIND_SCALAR_MODEL= FLAMELET +DIFFUSIVITY_MODEL= FLAMELET +VISCOSITY_MODEL= FLAMELET +CONDUCTIVITY_MODEL= FLAMELET + +PREFERENTIAL_DIFFUSION=YES + +FLAME_INIT_METHOD= __FLAME_INIT_METHOD__ +SPARK_INIT=(5e-4, 2.5e-4, 0.0, 1e-4, 1, 50) +SPARK_REACTION_RATES=(1.5e4, 0,0) +FLAME_INIT= (4e-4, 0.00, 0.00, 1.0, 0.0, 0.0, 5e-5, 1.0) +FLAME_INIT_IGNITION= __IGNITION_TEMP__ + +CONV_NUM_METHOD_SPECIES= BOUNDED_SCALAR + +MUSCL_SPECIES= YES +TIME_DISCRE_SPECIES= EULER_IMPLICIT +SPECIES_CLIPPING= NO +SPECIES_INIT=(-2.251135e-01,+2.262913e+03,+1.446752e-02) + +CFL_REDUCTION_SPECIES= 1.0 + +INC_OUTLET_TYPE= PRESSURE_OUTLET + +NUM_METHOD_GRAD= GREEN_GAUSS +CFL_NUMBER= 50 +CFL_ADAPT= NO +ITER= __N_ITER__ + +LINEAR_SOLVER= FGMRES +LINEAR_SOLVER_PREC= LU_SGS +LINEAR_SOLVER_ERROR= 1E-03 +LINEAR_SOLVER_ITER= 15 + +CONV_NUM_METHOD_FLOW= FDS +MUSCL_FLOW= YES +TIME_DISCRE_FLOW= EULER_IMPLICIT + +SCREEN_OUTPUT = CUSTOM +HISTORY_OUTPUT = CUSTOM +VOLUME_OUTPUT = SOLUTION + +MESH_FORMAT= RECTANGLE +MESH_BOX_SIZE= ( 200, 50, 0 ) +MESH_BOX_LENGTH= ( 1e-3, 5e-4, 0 ) + +OUTPUT_FILES=(RESTART) +CUSTOM_OUTPUTS= 'Tprobe : Probe{TEMPERATURE}[5e-4, 2.5e-4];' + +""" + +comm = MPI.COMM_WORLD + +def main(): + + comm = MPI.COMM_WORLD + + T_ignition = 1600 + if comm.Get_rank() == 0: + + # Prepare configuration files for flame front and spark ignition methods. + config_flame_front = config_options.replace("__FLAME_INIT_METHOD__", "FLAME_FRONT") + config_flame_front = config_flame_front.replace("__N_ITER__", "1") + config_flame_front = config_flame_front.replace("__IGNITION_TEMP__", "%f" % T_ignition) + + config_spark = config_options.replace("__FLAME_INIT_METHOD__", "SPARK") + config_spark = config_spark.replace("__N_ITER__", "20") + config_spark = config_spark.replace("__IGNITION_TEMP__", "%f" % T_ignition) + + with open("config_flame_front.cfg", "w") as f: + f.write(config_flame_front) + with open("config_spark.cfg", "w") as f: + f.write(config_spark) + comm.Barrier() + + # Initialize simulation with flame front ignition + driver_flame_front = pysu2.CSinglezoneDriver("config_flame_front.cfg", 1, comm) + driver_flame_front.StartSolver() + + # Retrieve temperature from the burnt zone of the initial flame front. + T_flame_front = driver_flame_front.GetOutputValue("Tprobe") + driver_flame_front.Finalize() + + # Initialize simulation with spark ignition. + driver_spark = pysu2.CSinglezoneDriver("config_spark.cfg", 1, comm) + driver_spark.StartSolver() + + # Retrieve temperature from center of the spark. + T_spark = driver_spark.GetOutputValue("Tprobe") + driver_spark.Finalize() + if comm.Get_rank() == 0: + print("| %i | %.2f | %.2f|" % (1, min(T_ignition, T_flame_front), min(T_ignition, T_spark))) + +if __name__ == '__main__': + main() diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index dbadc0cb659f..6f841b38546e 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -75,9 +75,17 @@ def main(): cfd_flamelet_h2.cfg_file = "laminar_premixed_h2_flame_cfd.cfg" cfd_flamelet_h2.test_iter = 5 cfd_flamelet_h2.test_vals = [-8.036958, -8.372668, -1.842800, -9.388446] - cfd_flamelet_h2.new_output = True test_list.append(cfd_flamelet_h2) + # Flame ignition methods + flame_init_methods = TestCase("flame_init_methods") + flame_init_methods.cfg_dir = "flamelet/08_flame_init_method" + flame_init_methods.cfg_file ="flamelet_initialization.py" + flame_init_methods.command = TestCase.Command("mpirun -np 2", "python", "flamelet_initialization.py") + flame_init_methods.test_vals=[1600, 1600] + flame_init_methods.new_output = True + test_list.append(flame_init_methods) + ######################### ## NEMO solver ### ######################### diff --git a/config_template.cfg b/config_template.cfg index ab8175bb6802..f5fbdeb96dc2 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -960,6 +960,16 @@ PREFERENTIAL_DIFFUSION= NO % (x8) = Thickness of the 'burnt' zone, after this length, the conditions will be 'unburnt' again. FLAME_INIT= (0.004, 0.0, 0.0, 1.0, 0.0, 0.0, 0.2e-3, 1.0) +% Flame ignition temperature in Kelvin. +% Specify the temperature on the 'burnt' side of the flame when using FLAME_FRONT initialization +% or the maximum temperature within the spark region when using SPARK initialization. +% The initial value of the progress variable on the 'burnt' side of the flame front is calculated through +% inverse regression of the ignition temperature or when reaching the upper limit of the progress variable +% in the flamelet data space. +% The SPARK_REACTION_RATES are applied within the spark region when the local temperature is below the +% flame ignition temperature. +FLAME_INIT_IGNITION= 5000.0 + % SPARK initialization % the solution is ignited through application of a set of source terms within a specified region for a set number % of solver iterations. This artificial spark can be applied after a certain number of iterations has passed, allowing for diff --git a/meson_scripts/init.py b/meson_scripts/init.py index 858456015f13..9e8d18dcde75 100755 --- a/meson_scripts/init.py +++ b/meson_scripts/init.py @@ -74,7 +74,7 @@ def init_submodules( github_repo_mel = "https://github.com/pcarruscag/MEL" sha_version_fado = "ce7ee018e4e699af5028d69baa1939fea290e18a" github_repo_fado = "https://github.com/pcarruscag/FADO" - sha_version_mlpcpp = "02f2cb9dde791074858e11ac091f7c4df9c6af65" + sha_version_mlpcpp = "e23facf388902f262fbe7ba3bcc84d36c85350b9" github_repo_mlpcpp = "https://github.com/EvertBunschoten/MLPCpp" sha_version_eigen = "d71c30c47858effcbd39967097a2d99ee48db464" github_repo_eigen = "https://gitlab.com/libeigen/eigen.git" diff --git a/subprojects/MLPCpp b/subprojects/MLPCpp index 02f2cb9dde79..e23facf38890 160000 --- a/subprojects/MLPCpp +++ b/subprojects/MLPCpp @@ -1 +1 @@ -Subproject commit 02f2cb9dde791074858e11ac091f7c4df9c6af65 +Subproject commit e23facf388902f262fbe7ba3bcc84d36c85350b9 From 3e9bd730f297f273ad2cb94ccdc2c33aa61ada5e Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Wed, 22 Apr 2026 14:38:32 +0200 Subject: [PATCH 217/229] =?UTF-8?q?Use=20Classical=20Gram=E2=80=93Schmidt?= =?UTF-8?q?=20twice=20instead=20of=20Modified=20G-S=20with=20conditional?= =?UTF-8?q?=20re-orthogonalization.=20(#2791)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/include/linear_algebra/CSysMatrix.hpp | 24 +- Common/include/linear_algebra/CSysMatrix.inl | 10 +- Common/include/linear_algebra/CSysSolve.hpp | 5 +- Common/src/linear_algebra/CSysMatrix.cpp | 101 +++-- Common/src/linear_algebra/CSysSolve.cpp | 160 +++---- SU2_CFD/src/SU2_CFD.cpp | 2 + .../nonlinear_plane_stress_2d.cfg | 1 + TestCases/hybrid_regression.py | 20 +- TestCases/hybrid_regression_AD.py | 4 +- TestCases/parallel_regression.py | 14 +- TestCases/parallel_regression_AD.py | 8 +- .../translating_NACA0012/forces_0.csv.ref | 398 ++++++++--------- .../forces_0.csv.ref | 400 +++++++++--------- TestCases/serial_regression.py | 6 +- TestCases/serial_regression_AD.py | 2 +- TestCases/tutorials.py | 6 +- meson.build | 1 + 17 files changed, 581 insertions(+), 581 deletions(-) diff --git a/Common/include/linear_algebra/CSysMatrix.hpp b/Common/include/linear_algebra/CSysMatrix.hpp index 823f15a51fcf..96344853a7ba 100644 --- a/Common/include/linear_algebra/CSysMatrix.hpp +++ b/Common/include/linear_algebra/CSysMatrix.hpp @@ -274,6 +274,14 @@ class CSysMatrix { for (auto iVar = 0ul; iVar < nVar * nEqn; ++iVar) dst[iVar] = src[iVar]; } + /*! + * \brief Zero a matrix. + */ + FORCEINLINE void ZeroMatrix(ScalarType* mat) const { + SU2_OMP_SIMD + for (auto iVar = 0ul; iVar < nVar * nEqn; ++iVar) mat[iVar] = 0; + } + /*! * \brief Solve a small (nVar x nVar) linear system using Gaussian elimination. * \param[in,out] matrix - On entry the system matrix, on exit the factorized matrix. @@ -304,11 +312,11 @@ class CSysMatrix { inline void InverseDiagonalBlock(unsigned long block_i, ScalarType* invBlock) const; /*! - * \brief Inverse diagonal block. - * \param[in] block_i - Indexes of the block in the matrix-by-blocks structure. - * \param[out] invBlock - Inverse block. + * \brief Invert diagonal block (Uii) of the ILU matrix in place. + * \param[in] block_i - Index of the block to invert. + * \return Inverted block. */ - inline void InverseDiagonalBlock_ILUMatrix(unsigned long block_i, ScalarType* invBlock) const; + inline const ScalarType* InvertDiagonalBlockILUMatrix(unsigned long block_i); /*! * \brief Copies the block (i, j) of the matrix-by-blocks structure in the internal variable *block. @@ -365,12 +373,12 @@ class CSysMatrix { /*! * \brief Constructor of the class. */ - CSysMatrix(void); + CSysMatrix(); /*! * \brief Destructor of the class. */ - ~CSysMatrix(void); + ~CSysMatrix(); /*! * \brief Initializes the sparse matrix. @@ -390,12 +398,12 @@ class CSysMatrix { /*! * \brief Sets to zero all the entries of the sparse matrix. */ - void SetValZero(void); + void SetValZero(); /*! * \brief Sets to zero all the block diagonal entries of the sparse matrix. */ - void SetValDiagonalZero(void); + void SetValDiagonalZero(); /*! * \brief Performs the memory copy from host to device. diff --git a/Common/include/linear_algebra/CSysMatrix.inl b/Common/include/linear_algebra/CSysMatrix.inl index 5f3230079599..03f8bdb530d1 100644 --- a/Common/include/linear_algebra/CSysMatrix.inl +++ b/Common/include/linear_algebra/CSysMatrix.inl @@ -160,13 +160,13 @@ FORCEINLINE void CSysMatrix::InverseDiagonalBlock(unsigned long bloc } template -FORCEINLINE void CSysMatrix::InverseDiagonalBlock_ILUMatrix(unsigned long block_i, - ScalarType* invBlock) const { +FORCEINLINE const ScalarType* CSysMatrix::InvertDiagonalBlockILUMatrix(unsigned long block_i) { /*--- Copy block, as the algorithm modifies the matrix ---*/ + auto* Uii = &ILU_matrix[dia_ptr_ilu[block_i] * nVar * nVar]; ScalarType block[MAXNVAR * MAXNVAR]; - MatrixCopy(&ILU_matrix[dia_ptr_ilu[block_i] * nVar * nVar], block); - - MatrixInverse(block, invBlock); + MatrixCopy(Uii, block); + MatrixInverse(block, Uii); + return Uii; } template diff --git a/Common/include/linear_algebra/CSysSolve.hpp b/Common/include/linear_algebra/CSysSolve.hpp index 943a2e49b394..4e5576442d99 100644 --- a/Common/include/linear_algebra/CSysSolve.hpp +++ b/Common/include/linear_algebra/CSysSolve.hpp @@ -112,10 +112,11 @@ class CSysSolve { mutable VectorType r_0; /*!< \brief The "arbitrary" vector in BCGSTAB. */ mutable VectorType v; /*!< \brief BCGSTAB "v" vector (v = A * M^-1 * p). */ - mutable unsigned long k = 0; + mutable bool ritz_failed = false; + mutable unsigned long k = 0, k_new = 0; mutable std::vector Z, V; /*!< \brief Large matrices used by FGMRES, v^i+1 = A * z^i. */ mutable std::vector W, T; /*!< \brief Large matrices used by FGCRODR for deflation vectors. */ - mutable Eigen::Matrix VkWk; + mutable Eigen::Matrix VkWk, Q, PinvR; /*!< \brief Temporary used when it is necessary to interface between active and passive types. */ VectorType LinSysSol_tmp; diff --git a/Common/src/linear_algebra/CSysMatrix.cpp b/Common/src/linear_algebra/CSysMatrix.cpp index 21c49d6f715d..c508e9ef7687 100644 --- a/Common/src/linear_algebra/CSysMatrix.cpp +++ b/Common/src/linear_algebra/CSysMatrix.cpp @@ -118,13 +118,13 @@ void CSysMatrix::Initialize(unsigned long npoint, unsigned long npoi prec = config->GetKind_DiscAdj_Linear_Prec(); } - /*--- No else if, but separat if case! ---*/ + /*--- No else if, but separate if case! ---*/ if (config->GetSmoothGradient() && grad_mode) { prec = config->GetKind_Grad_Linear_Solver_Prec(); } const bool ilu_needed = (prec == ILU); - const bool diag_needed = ilu_needed || (prec == JACOBI) || (prec == LINELET); + const bool diag_needed = (prec == JACOBI) || (prec == LINELET); /*--- Basic dimensions. ---*/ nVar = nvar; @@ -683,33 +683,6 @@ void CSysMatrix::ComputeJacobiPreconditioner(const CSysVector void CSysMatrix::BuildILUPreconditioner() { SU2_ZONE_SCOPED - /*--- Copy block matrix to compute factorization in-place. ---*/ - - if (ilu_fill_in == 0) { - /*--- ILU0, direct copy. ---*/ - SU2_OMP_FOR_STAT(omp_light_size) - for (auto iVar = 0ul; iVar < nnz * nVar * nVar; ++iVar) ILU_matrix[iVar] = matrix[iVar]; - END_SU2_OMP_FOR - } else { - /*--- ILUn clear the ILU matrix first. ---*/ - SU2_OMP_FOR_STAT(omp_light_size) - for (auto iVar = 0ul; iVar < nnz_ilu * nVar * nVar; iVar++) ILU_matrix[iVar] = 0.0; - END_SU2_OMP_FOR - - /*--- ILUn, traverse matrix to access its blocks - * sequentially and set them in the ILU matrix. ---*/ - SU2_OMP_FOR_DYN(omp_heavy_size) - for (auto iPoint = 0ul; iPoint < nPointDomain; iPoint++) { - for (auto index = row_ptr[iPoint]; index < row_ptr[iPoint + 1]; index++) { - auto jPoint = col_ind[index]; - SetBlock_ILUMatrix(iPoint, jPoint, &matrix[index * nVar * nVar]); - } - } - END_SU2_OMP_FOR - } - - /*--- Transform system in Upper Matrix ---*/ - /*--- OpenMP Parallelization, a loop construct is used to ensure * the preconditioner is computed correctly even if called * outside of a parallel section. ---*/ @@ -724,12 +697,48 @@ void CSysMatrix::BuildILUPreconditioner() { * to row/col "end-1" (i.e. the range [begin,end[). Which is exactly * what the MPI-only implementation does. ---*/ - ScalarType weight[MAXNVAR * MAXNVAR], aux_block[MAXNVAR * MAXNVAR]; + const auto blockSize = nVar * nVar; + ScalarType Lij[MAXNVAR * MAXNVAR], Lij_Ujk[MAXNVAR * MAXNVAR]; + + /*--- Copy block matrix to compute factorization in-place. ---*/ + auto InitIluRow = [&](const auto iRow) { + if (ilu_fill_in == 0) { + /*--- ILU0, direct copy to initialize. ---*/ + const auto begin = row_ptr_ilu[iRow] * blockSize; + const auto end = row_ptr_ilu[iRow + 1] * blockSize; + SU2_OMP_SIMD + for (unsigned long k = begin; k < end; k++) ILU_matrix[k] = matrix[k]; + return; + } + /*--- ILUn, clear or copy the entries of the matrix. ---*/ + auto indexMat = row_ptr[iRow]; + const auto endMat = row_ptr[iRow + 1]; + for (auto index = row_ptr_ilu[iRow]; index < row_ptr_ilu[iRow + 1];) { + const auto jPoint = col_ind_ilu[index]; + const auto jPointMat = col_ind[indexMat]; + if (jPoint < jPointMat || indexMat == endMat) { + /*--- ILU column has not caught up with matrix column or all matrix columns were used. ---*/ + ZeroMatrix(&ILU_matrix[index * blockSize]); + ++index; + } else { + /*--- Columns match, copy the matrix block. ---*/ + if (jPoint == jPointMat) { + MatrixCopy(&matrix[indexMat * blockSize], &ILU_matrix[index * blockSize]); + ++index; + } + /*--- We've either copied the matrix column or it has not caught up with the ILU column. ---*/ + ++indexMat; + } + } + }; + InitIluRow(begin); for (auto iPoint = begin + 1; iPoint < end; iPoint++) { - /*--- Invert and store the previous diagonal block to later compute the weight. ---*/ + InitIluRow(iPoint); + + /*--- Invert and store the previous diagonal block to compute the lower entries. ---*/ - InverseDiagonalBlock_ILUMatrix(iPoint - 1, &invM[(iPoint - 1) * nVar * nVar]); + InvertDiagonalBlockILUMatrix(iPoint - 1); /*--- For this row (unknown), loop over its lower diagonal entries. ---*/ @@ -744,10 +753,11 @@ void CSysMatrix::BuildILUPreconditioner() { /*--- Multiply the block by the inverse of the corresponding diagonal block. ---*/ - auto Block_ij = &ILU_matrix[index * nVar * nVar]; - MatrixMatrixProduct(Block_ij, &invM[jPoint * nVar * nVar], weight); + auto Block_ij = &ILU_matrix[index * blockSize]; + const auto invUjj = &ILU_matrix[dia_ptr_ilu[jPoint] * blockSize]; + MatrixMatrixProduct(Block_ij, invUjj, Lij); - /*--- "weight" holds Aij*inv(Ajj). Jump to the upper part of the jPoint row. ---*/ + /*--- Lij holds Aij*inv(Ujj). Jump to the upper part of the jPoint row. ---*/ for (auto index_ = dia_ptr_ilu[jPoint] + 1; index_ < row_ptr_ilu[jPoint + 1]; index_++) { /*--- Get the column index (kPoint > jPoint). ---*/ @@ -756,24 +766,23 @@ void CSysMatrix::BuildILUPreconditioner() { if (kPoint >= end) break; - /*--- If Aik exists, update it: Aik -= Aij*inv(Ajj)*Ajk ---*/ + /*--- If Aik exists, update it: Aik -= Lij * Ujk ---*/ auto Block_ik = GetBlock_ILUMatrix(iPoint, kPoint); if (Block_ik != nullptr) { - auto Block_jk = &ILU_matrix[index_ * nVar * nVar]; - MatrixMatrixProduct(weight, Block_jk, aux_block); - MatrixSubtraction(Block_ik, aux_block, Block_ik); + const auto Ujk = &ILU_matrix[index_ * blockSize]; + MatrixMatrixProduct(Lij, Ujk, Lij_Ujk); + MatrixSubtraction(Block_ik, Lij_Ujk, Block_ik); } } - /*--- Lastly, store "weight" in the lower triangular part, which - will be reused during the forward solve in the precon/smoother. ---*/ - - for (auto iVar = 0ul; iVar < nVar * nVar; ++iVar) Block_ij[iVar] = weight[iVar]; + /*--- Lastly, store Lij in the lower triangular part. ---*/ + SU2_OMP_SIMD + for (auto iVar = 0ul; iVar < blockSize; ++iVar) Block_ij[iVar] = Lij[iVar]; } } - InverseDiagonalBlock_ILUMatrix(end - 1, &invM[(end - 1) * nVar * nVar]); + InvertDiagonalBlockILUMatrix(end - 1); } END_SU2_OMP_FOR } @@ -817,6 +826,8 @@ void CSysMatrix::ComputeILUPreconditioner(const CSysVector= end) break; @@ -824,7 +835,7 @@ void CSysMatrix::ComputeILUPreconditioner(const CSysVector::ModGramSchmidt(bool shared_hsbg, int i, su2matrix::multiDot(w, i + 1, 1, w, i + 1); + LinearCombination( + shared_hsbg, i + 1, w, [&h_i](int k) { return -h_i(0, k); }, w[i + 1], true); - /*--- Get the norm of the vector being orthogonalized, and find the - threshold for re-orthogonalization ---*/ + const auto& dh_i = CSysVector::multiDot(w, i + 1, 1, w, i + 1); + LinearCombination( + shared_hsbg, i + 1, w, [&dh_i](int k) { return -dh_i(0, k); }, w[i + 1], true); - ScalarType nrm = w[i + 1].squaredNorm(); - ScalarType thr = nrm * reorth; + for (int k = 0; k < i + 1; k++) SetHsbg(k, i, h_i(0, k) + dh_i(0, k)); - /*--- The squared norm of w[i+1] <= 0 or is NaN: the input vector from - mat_vec is zero or contains NaN. Cannot proceed with orthogonalization. ---*/ + /*--- The norm of w[i+1] is 0 or NaN: the input vector from mat_vec is + * zero or contains NaN. Cannot proceed with orthogonalization. ---*/ - if ((nrm <= 0.0) || (nrm != nrm)) { + ScalarType nrm = w[i + 1].norm(); + + if (nrm <= 0.0 || nrm != nrm) { /*--- nrm is the result of a dot product, communications are implicitly handled. ---*/ SetHsbg(i + 1, i, ScalarType(0)); return false; } - /*--- Begin main Gram-Schmidt loop ---*/ - - for (int k = 0; k < i + 1; k++) { - ScalarType prod = w[i + 1].dot(w[k]); - ScalarType h_ki = prod; - w[i + 1] -= prod * w[k]; - - /*--- Check if reorthogonalization is necessary ---*/ - - if (prod * prod > thr) { - prod = w[i + 1].dot(w[k]); - h_ki += prod; - w[i + 1] -= prod * w[k]; - } - SetHsbg(k, i, h_ki); - - /*--- Update the norm and check its size ---*/ - - nrm -= pow(h_ki, 2); - nrm = max(nrm, 0.0); - thr = nrm * reorth; - } - - /*--- Test the resulting vector ---*/ - - nrm = w[i + 1].norm(); + /*--- Normalize the resulting vector. ---*/ SetHsbg(i + 1, i, nrm); - - /*--- Return false if the resulting vector is zero or contains NaN, true otherwise. --- */ - if ((nrm <= 0.0) || (nrm != nrm)) { - return false; - } - - /*--- Scale the resulting vector ---*/ - w[i + 1] /= nrm; return true; @@ -935,62 +907,66 @@ unsigned long CSysSolve::FGCRODR_LinSolverImpl(const CSysVector qr(HTVW); !qr.isInvertible()) { - if (masterRank) { - SU2_OMP_MASTER - cout << "WARNING: (VH)^T W in FGCRODR is not invertible.\n"; - END_SU2_OMP_MASTER - } - SU2_OMP_SAFE_GLOBAL_ACCESS(ResetDeflation();) - if (converged) break; - continue; - } - EigenMatrix HTH = Hm.transpose() * Hm; - Eigen::GeneralizedEigenSolver ges(HTH, HTVW); - const auto& lambda = ges.eigenvalues(); - - std::vector order(m); - std::iota(order.begin(), order.end(), 0); - std::sort(order.begin(), order.end(), - [&lambda](int i, int j) { return fabs(std::real(lambda(i))) < fabs(std::real(lambda(j))); }); - - EigenMatrix P(m, deflation + 1); - auto k_new = 0ul; - for (auto i = 0ul; i < m; ++i) { - const auto j = order[i]; - - /*--- Skip conjugate pairs because we split complex vectors into real and imag. ---*/ - if (i > 0 && abs(lambda(j) - std::conj(lambda(order[i - 1]))) / abs(lambda(j)) < 1e-3) { - continue; - } - if (monitoring && masterRank && config->GetComm_Level() == COMM_FULL) { - SU2_OMP_MASTER - cout << " FGCRODR Ritz value #" << i << ": " << lambda(j) << "\n"; - END_SU2_OMP_MASTER + auto RitzValues = [&]() { + SU2_ZONE_SCOPED_N("RitzValues") + ritz_failed = false; + const auto Hm = Heigen.topLeftCorner(m + 1, m); + EigenMatrix HTVW = Hm.transpose() * VW; + + /*--- If the "B" matrix in the generalized eigenvalue problem is not invertible we reset. ---*/ + if (Eigen::ColPivHouseholderQR qr(HTVW); !qr.isInvertible()) { + if (masterRank) cout << "WARNING: (VH)^T W in FGCRODR is not invertible.\n"; + ResetDeflation(); + ritz_failed = true; + return; } - P.col(k_new++) = ges.eigenvectors().col(j).real(); + EigenMatrix HTH = Hm.transpose() * Hm; + Eigen::GeneralizedEigenSolver ges(HTH, HTVW); + const auto& lambda = ges.eigenvalues(); + + std::vector order(m); + std::iota(order.begin(), order.end(), 0); + std::sort(order.begin(), order.end(), + [&lambda](int i, int j) { return fabs(std::real(lambda(i))) < fabs(std::real(lambda(j))); }); + + EigenMatrix P(m, deflation + 1); + k_new = 0; + for (auto i = 0ul; i < m; ++i) { + const auto j = order[i]; + + /*--- Skip conjugate pairs because we split complex vectors into real and imag. ---*/ + if (i > 0 && abs(lambda(j) - std::conj(lambda(order[i - 1]))) / abs(lambda(j)) < 1e-3) { + continue; + } + if (monitoring && masterRank && config->GetComm_Level() == COMM_FULL) { + cout << " FGCRODR Ritz value #" << i << ": " << lambda(j) << "\n"; + } + P.col(k_new++) = ges.eigenvectors().col(j).real(); - if (fabs(std::imag(lambda(j))) > 1e-2 * fabs(std::real(lambda(j)))) { - P.col(k_new++) = ges.eigenvectors().col(j).imag(); + if (fabs(std::imag(lambda(j))) > 1e-2 * fabs(std::real(lambda(j)))) { + P.col(k_new++) = ges.eigenvectors().col(j).imag(); + } + if (k_new >= deflation) break; } - if (k_new >= deflation) break; - } - P.conservativeResize(m, k_new); + P.conservativeResize(m, k_new); - /*--- Modify the Krylov basis vectors using P. - * A Z P = V H P <=> A Z P = V Q R <=> A Z P R^-1 = V Q <=> A Zk = Vk. - * W is updated the same way as Z since Z = M(W). ---*/ + /*--- Modify the Krylov basis vectors using P. + * A Z P = V H P <=> A Z P = V Q R <=> A Z P R^-1 = V Q <=> A Zk = Vk. + * W is updated the same way as Z since Z = M(W). ---*/ - EigenMatrix HP = Hm * P; - Eigen::HouseholderQR qr(HP); - EigenMatrix Q = qr.householderQ() * EigenMatrix::Identity(m + 1, k_new); - auto R = qr.matrixQR().topRows(k_new).template triangularView(); + EigenMatrix HP = Hm * P; + Eigen::HouseholderQR qr(HP); + Q = qr.householderQ() * EigenMatrix::Identity(m + 1, k_new); + auto R = qr.matrixQR().topRows(k_new).template triangularView(); - EigenMatrix PinvR = P * (R.solve(EigenMatrix::Identity(k_new, k_new))); + PinvR = P * R.solve(EigenMatrix::Identity(k_new, k_new)); + }; + SU2_OMP_SAFE_GLOBAL_ACCESS(RitzValues();) + if (ritz_failed) { + if (converged) break; + continue; + } auto modify = [&](const EigenMatrix& mod, const auto& basis) { for (auto j = 0ul; j < k_new; ++j) { diff --git a/SU2_CFD/src/SU2_CFD.cpp b/SU2_CFD/src/SU2_CFD.cpp index a8ebd1884a5c..f37122fbfb8a 100644 --- a/SU2_CFD/src/SU2_CFD.cpp +++ b/SU2_CFD/src/SU2_CFD.cpp @@ -27,6 +27,7 @@ #include "../include/SU2_CFD.hpp" #include "../../Common/include/tracy_structure.hpp" +#include "Eigen/src/Core/products/Parallelizer.h" /* Include file, needed for the runtime NaN catching. You also have to include feenableexcept(...) below. */ //#include @@ -55,6 +56,7 @@ int main(int argc, char *argv[]) { /*--- OpenMP setup ---*/ omp_set_num_threads(num_threads); + Eigen::setNbThreads(1); /*--- MPI initialization, and buffer setting ---*/ diff --git a/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg b/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg index 64c652a4f53d..c549faf9e1a0 100644 --- a/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg +++ b/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg @@ -24,6 +24,7 @@ MARKER_LOAD= ( x_plus, 1, 1000, 0, -1, 0 ) LINEAR_SOLVER= FGCRODR LINEAR_SOLVER_PREC= ILU +LINEAR_SOLVER_ILU_FILL_IN= 1 LINEAR_SOLVER_ERROR= 1E-4 LINEAR_SOLVER_ITER= 100 LINEAR_SOLVER_RESTART_FREQUENCY= 100 diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 013f6e277356..588299a4e0fa 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -128,7 +128,7 @@ def main(): poiseuille.cfg_dir = "navierstokes/poiseuille" poiseuille.cfg_file = "lam_poiseuille.cfg" poiseuille.test_iter = 10 - poiseuille.test_vals = [-5.046131, 0.652984, 0.008355, 13.735816, 0.000000] + poiseuille.test_vals = [-5.046139, 0.652976, 0.008353, 13.735637, 0] test_list.append(poiseuille) # 2D Poiseuille flow (inlet profile file) @@ -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.005215, -7.539613, -0.000000, 2.089953] + poiseuille_profile.test_vals = [-12.005211, -7.539073, -0.000000, 2.089953] poiseuille_profile.test_vals_aarch64 = [-12.009012, -7.262530, -0.000000, 2.089953] test_list.append(poiseuille_profile) @@ -197,7 +197,7 @@ def main(): turb_naca0012_sa.cfg_dir = "rans/naca0012" turb_naca0012_sa.cfg_file = "turb_NACA0012_sa.cfg" turb_naca0012_sa.test_iter = 5 - turb_naca0012_sa.test_vals = [-12.038104, -16.332090, 1.080346, 0.018385, 20, -2.873254, 0, -14.250271, 0] + turb_naca0012_sa.test_vals = [-12.038018, -16.332088, 1.080346, 0.018385, 20, -2.873140, 0, -14.250270, 0] turb_naca0012_sa.test_vals_aarch64 = [-12.038091, -16.332090, 1.080346, 0.018385, 20.000000, -2.873236, 0.000000, -14.250271, 0.000000] test_list.append(turb_naca0012_sa) @@ -206,7 +206,7 @@ def main(): turb_naca0012_sst.cfg_dir = "rans/naca0012" turb_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" turb_naca0012_sst.test_iter = 10 - turb_naca0012_sst.test_vals = [-12.093920, -15.251077, -5.906326, 1.070413, 0.015775, -2.855455, 0] + turb_naca0012_sst.test_vals = [-12.093939, -15.251079, -5.906323, 1.070413, 0.015775, -2.854890, 0] turb_naca0012_sst.test_vals_aarch64 = [-12.075928, -15.246732, -5.861249, 1.070036, 0.015841, -2.835263, 0] test_list.append(turb_naca0012_sst) @@ -252,7 +252,7 @@ def main(): axi_rans_air_nozzle_restart.cfg_dir = "axisymmetric_rans/air_nozzle" axi_rans_air_nozzle_restart.cfg_file = "air_nozzle_restart.cfg" axi_rans_air_nozzle_restart.test_iter = 10 - axi_rans_air_nozzle_restart.test_vals = [-12.066222, -7.425854, -8.815484, -3.732619, 0] + axi_rans_air_nozzle_restart.test_vals = [-12.066224, -7.425871, -8.816101, -3.732807, 0] axi_rans_air_nozzle_restart.test_vals_aarch64 = [-14.140441, -9.154674, -10.886121, -5.806594, 0.000000] test_list.append(axi_rans_air_nozzle_restart) @@ -305,7 +305,7 @@ def main(): turb_naca0012_p1c1.cfg_dir = "rans_uq/naca0012" turb_naca0012_p1c1.cfg_file = "turb_NACA0012_uq_p1c1.cfg" turb_naca0012_p1c1.test_iter = 10 - turb_naca0012_p1c1.test_vals = [-5.133998, 1.283519, 0.548341, 0.010772] + turb_naca0012_p1c1.test_vals = [-5.134031, 1.283495, 0.548237, 0.010736] turb_naca0012_p1c1.test_vals_aarch64 = [-5.114189, 1.285037, 0.406851, -0.043003] test_list.append(turb_naca0012_p1c1) @@ -404,7 +404,7 @@ def main(): inc_turb_naca0012.cfg_dir = "incomp_rans/naca0012" inc_turb_naca0012.cfg_file = "naca0012.cfg" inc_turb_naca0012.test_iter = 20 - inc_turb_naca0012.test_vals = [-4.758063, -10.974497, -0.000004, -0.028654, 4, -5.402309, 2, -5.032668] + inc_turb_naca0012.test_vals = [-4.758063, -10.974497, -0.000004, -0.028654, 4, -5.404919, 2, -5.032662] test_list.append(inc_turb_naca0012) # NACA0012, SST_SUST @@ -491,7 +491,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.073776, 0.027464, -0.001638, -0.000129] + aeroelastic.test_vals = [0.078819, 0.027586, -0.001283, -0.000359] aeroelastic.test_vals_aarch64 = [0.074170, 0.027590, -0.001579, -0.000160] aeroelastic.unsteady = True aeroelastic.enabled_on_cpu_arch = ["x86_64"] # Requires AVX-capable architecture @@ -543,7 +543,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.590427, -4.427866, -0.000034, 0.000000] + edge_PPR.test_vals = [-10.594993, -4.431993, -0.000034, 0.000000] edge_PPR.test_vals_aarch64 = [ -7.139211, -0.980821, -0.000034, 0.000000] test_list.append(edge_PPR) @@ -708,7 +708,7 @@ def main(): dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi" dyn_fsi.cfg_file = "config.cfg" dyn_fsi.test_iter = 4 - dyn_fsi.test_vals = [-4.330725, -4.152808, 0, 102] + dyn_fsi.test_vals = [-4.330725, -4.152808, 0, 103] dyn_fsi.multizone = True dyn_fsi.unsteady = True test_list.append(dyn_fsi) diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 63fd98baf120..012d28e681ca 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -86,7 +86,7 @@ def main(): discadj_rans_naca0012_sst.cfg_dir = "disc_adj_rans/naca0012" discadj_rans_naca0012_sst.cfg_file = "turb_NACA0012_sst.cfg" discadj_rans_naca0012_sst.test_iter = 10 - discadj_rans_naca0012_sst.test_vals = [-2.201504, -0.175221, 3.044800, -0.041845] + discadj_rans_naca0012_sst.test_vals = [-2.201517, -0.175212, 3.044200, -0.041842] discadj_rans_naca0012_sst.test_vals_aarch64 = [-2.201855, -0.172443, 3.043400, -0.041820] test_list.append(discadj_rans_naca0012_sst) @@ -133,7 +133,7 @@ def main(): discadj_incomp_turb_NACA0012_sst.cfg_dir = "disc_adj_incomp_rans/naca0012" discadj_incomp_turb_NACA0012_sst.cfg_file = "turb_naca0012_sst.cfg" discadj_incomp_turb_NACA0012_sst.test_iter = 10 - discadj_incomp_turb_NACA0012_sst.test_vals = [-3.775646, -3.089083, -7.142512, 0.000000, -0.897106] + discadj_incomp_turb_NACA0012_sst.test_vals = [-3.775388, -3.089117, -7.143490, 0.000000, -0.896797] test_list.append(discadj_incomp_turb_NACA0012_sst) ####################################################### diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 6f841b38546e..9439c82683c6 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -80,10 +80,10 @@ def main(): # Flame ignition methods flame_init_methods = TestCase("flame_init_methods") flame_init_methods.cfg_dir = "flamelet/08_flame_init_method" - flame_init_methods.cfg_file ="flamelet_initialization.py" + flame_init_methods.cfg_file ="flamelet_initialization.py" flame_init_methods.command = TestCase.Command("mpirun -np 2", "python", "flamelet_initialization.py") flame_init_methods.test_vals=[1600, 1600] - flame_init_methods.new_output = True + flame_init_methods.new_output = True test_list.append(flame_init_methods) ######################### @@ -1188,7 +1188,7 @@ def main(): uniform_flow.cfg_dir = "sliding_interface/uniform_flow" uniform_flow.cfg_file = "uniform_NN.cfg" uniform_flow.test_iter = 5 - uniform_flow.test_vals = [5.000000, 0.000000, -0.195002, -10.624458] + uniform_flow.test_vals = [5.000000, 0.000000, -0.195002, -10.624448] uniform_flow.unsteady = True uniform_flow.multizone = True test_list.append(uniform_flow) @@ -1330,8 +1330,8 @@ def main(): nonlinear_plane_stress = TestCase('nonlinear_plane_stress') nonlinear_plane_stress.cfg_dir = "fea_fsi/VonMissesVerif" nonlinear_plane_stress.cfg_file = "nonlinear_plane_stress_2d.cfg" - nonlinear_plane_stress.test_iter = 19 - nonlinear_plane_stress.test_vals = [-7.433449, -3.355607, -13.983863, 162480, 43, -4.070373] + nonlinear_plane_stress.test_iter = 16 + nonlinear_plane_stress.test_vals = [-7.131557, -2.945301, -13.165302, 1.6248e+05, 32, -4.129942] nonlinear_plane_stress.tol = [2e-4, 2e-4, 2e-4, 1e-5, 1e-5, 4e-4] test_list.append(nonlinear_plane_stress) @@ -1369,7 +1369,7 @@ def main(): dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi" dyn_fsi.cfg_file = "config.cfg" dyn_fsi.test_iter = 4 - dyn_fsi.test_vals = [-4.330741, -4.152826, 0, 96] + dyn_fsi.test_vals = [-4.330741, -4.152826, 0, 97] dyn_fsi.multizone = True dyn_fsi.unsteady = True test_list.append(dyn_fsi) @@ -1758,7 +1758,7 @@ def main(): species_passive_val.cfg_dir = "species_transport/passive_transport_validation" species_passive_val.cfg_file = "passive_transport.cfg" species_passive_val.test_iter = 50 - species_passive_val.test_vals = [-16.590103, -16.350880, -16.915685, -4.257599, 10, -4.296538, 8, -5.193350, 0.186610, 0] + species_passive_val.test_vals = [-16.576049, -16.349168, -16.916647, -4.257599, 10, -4.232357, 8, -5.193350, 0.186610, 0] species_passive_val.test_vals_aarch64 = [-16.517744, -16.282420, -16.871663, -4.257599, 10.000000, -4.278151, 8.000000, -5.193350, 0.186610, 0.000000] test_list.append(species_passive_val) diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index afe71d30b9d4..1f5a93d5e714 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -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.599437, 2.336310, 2.141020, 0.786888] + discadj_trans_stator.test_vals = [79.000000, 2.599441, 2.336307, 2.140979, 0.786891] discadj_trans_stator.test_vals_aarch64 = [79.000000, 0.696755, 0.485950, 0.569475, -0.990065] test_list.append(discadj_trans_stator) @@ -286,7 +286,7 @@ def main(): discadj_fsi2.cfg_dir = "disc_adj_fsi/Airfoil_2d" discadj_fsi2.cfg_file = "config.cfg" discadj_fsi2.test_iter = 8 - discadj_fsi2.test_vals = [-3.824565, 1.979651, -3.863368, 0.295450, 3.839800] + discadj_fsi2.test_vals = [-3.824630, 1.979615, -3.863368, 0.295450, 3.839800] discadj_fsi2.test_vals_aarch64 = [-3.824870, 1.979160, -3.863368, 0.295450, 3.839800] discadj_fsi2.tol = 0.00001 test_list.append(discadj_fsi2) @@ -308,7 +308,7 @@ def main(): da_sp_pinArray_cht_2d_dp_hf.cfg_dir = "incomp_navierstokes/streamwise_periodic/chtPinArray_2d" da_sp_pinArray_cht_2d_dp_hf.cfg_file = "DA_configMaster.cfg" da_sp_pinArray_cht_2d_dp_hf.test_iter = 100 - da_sp_pinArray_cht_2d_dp_hf.test_vals = [-2.687303, -3.218852, -2.653738] + da_sp_pinArray_cht_2d_dp_hf.test_vals = [-3.011140, -3.635369, -3.161207] da_sp_pinArray_cht_2d_dp_hf.multizone = True test_list.append(da_sp_pinArray_cht_2d_dp_hf) @@ -326,7 +326,7 @@ def main(): da_unsteadyCHT_cylinder.cfg_dir = "coupled_cht/disc_adj_unsteadyCHT_cylinder" da_unsteadyCHT_cylinder.cfg_file = "chtMaster.cfg" da_unsteadyCHT_cylinder.test_iter = 2 - da_unsteadyCHT_cylinder.test_vals = [-8.479629, -9.239920, -9.234868, -15.934511, -13.662033, 0.000000, 10.627000, 0.295190] + da_unsteadyCHT_cylinder.test_vals = [-8.479629, -9.239920, -9.234868, -15.934511, -13.661991, 0.000000, 10.627000, 0.295190] da_unsteadyCHT_cylinder.test_vals_aarch64 = [-8.479629, -9.239920, -9.234868, -15.934511, -13.662012, 0.000000, 89.932000, 0.295190] da_unsteadyCHT_cylinder.unsteady = True da_unsteadyCHT_cylinder.multizone = True diff --git a/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref b/TestCases/py_wrapper/translating_NACA0012/forces_0.csv.ref index f2dd6431130f..696f6078c386 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.99, -0.00, 0.00 -0, -2.92, 20.12, 0.00 -1, -4.31, 29.70, 0.00 -2, -5.43, 37.46, 0.00 -3, -6.47, 44.73, 0.00 -4, -7.32, 50.81, 0.00 -5, -8.06, 56.11, 0.00 -6, -8.66, 60.52, 0.00 -7, -9.15, 64.25, 0.00 -8, -9.50, 67.10, 0.00 -9, -9.76, 69.35, 0.00 -10, -9.88, 70.62, 0.00 -11, -9.90, 71.32, 0.00 -12, -9.83, 71.37, 0.00 -13, -9.67, 70.75, 0.00 -14, -9.38, 69.23, 0.00 -15, -8.97, 66.84, 0.00 -16, -8.56, 64.36, 0.00 -17, -8.07, 61.36, 0.00 -18, -7.43, 57.05, 0.00 -19, -6.55, 50.89, 0.00 -20, -5.88, 46.24, 0.00 -21, -5.03, 39.99, 0.00 -22, -4.23, 34.09, 0.00 -23, -3.15, 25.71, 0.00 -24, -2.24, 18.52, 0.00 -25, -0.76, 6.34, 0.00 -26, 0.13, -1.12, 0.00 -27, 1.54, -13.29, 0.00 -28, 2.43, -21.28, 0.00 -29, 3.83, -34.14, 0.00 -30, 4.54, -41.18, 0.00 -31, 5.74, -52.89, 0.00 -32, 6.43, -60.39, 0.00 -33, 7.57, -72.41, 0.00 -34, 8.11, -79.07, 0.00 -35, 8.85, -88.08, 0.00 -36, 9.26, -94.15, 0.00 -37, 9.66, -100.41, 0.00 -38, 9.93, -105.71, 0.00 -39, 9.93, -108.29, 0.00 -40, 10.18, -114.04, 0.00 -41, 9.56, -110.13, 0.00 -42, 9.54, -113.32, 0.00 -43, 8.43, -103.37, 0.00 -44, 8.66, -109.93, 0.00 -45, 7.21, -95.09, 0.00 -46, 7.50, -103.00, 0.00 -47, 6.34, -90.99, 0.00 -48, 6.94, -104.63, 0.00 -49, 6.11, -97.26, 0.00 -50, 7.39, -124.87, 0.00 -51, 9.54, -172.27, 0.00 -52, 10.89, -211.99, 0.00 -53, 13.37, -283.48, 0.00 -54, 12.59, -294.41, 0.00 -55, 12.32, -322.91, 0.00 -56, 10.14, -304.62, 0.00 -57, 8.20, -290.56, 0.00 -58, 7.08, -309.37, 0.00 -59, 6.52, -377.30, 0.00 -60, 4.92, -431.39, 0.00 -61, 2.29, -437.47, 0.00 -62, -0.53, -427.92, 0.00 -63, -3.33, -415.08, 0.00 -64, -6.10, -403.02, 0.00 -65, -8.77, -387.96, 0.00 -66, -11.43, -375.49, 0.00 -67, -13.89, -358.97, 0.00 -68, -16.29, -344.21, 0.00 -69, -18.44, -326.73, 0.00 -70, -20.60, -311.98, 0.00 -71, -22.14, -290.79, 0.00 -72, -23.87, -274.86, 0.00 -73, -24.70, -251.68, 0.00 -74, -25.74, -233.74, 0.00 -75, -26.19, -213.08, 0.00 -76, -26.25, -192.28, 0.00 -77, -26.79, -177.30, 0.00 -78, -26.15, -156.81, 0.00 -79, -25.69, -139.81, 0.00 -80, -23.81, -117.77, 0.00 -81, -22.70, -102.13, 0.00 -82, -19.68, -80.52, 0.00 -83, -13.83, -51.42, 0.00 -84, -9.73, -32.80, 0.00 -85, -3.72, -11.35, 0.00 -86, 3.57, 9.84, 0.00 -87, 13.64, 33.73, 0.00 -88, 14.81, 32.69, 0.00 -89, 19.31, 37.76, 0.00 -90, 26.59, 45.61, 0.00 -91, 54.59, 81.15, 0.00 -92, 61.48, 77.85, 0.00 -93, 80.89, 85.29, 0.00 -94, 95.46, 81.09, 0.00 -95, 167.62, 109.18, 0.00 -96, 181.85, 83.35, 0.00 -97, 229.42, 62.09, 0.00 -98, 107.00, 14.36, 0.00 -99, 110.56, -0.00, 0.00 -100, 160.54, -21.54, 0.00 -101, 158.23, -42.83, 0.00 -102, 123.70, -56.70, 0.00 -103, 69.54, -45.30, 0.00 -104, 63.32, -53.79, 0.00 -105, 33.87, -35.72, 0.00 -106, 1.63, -2.06, 0.00 -107, -4.97, 7.39, 0.00 -108, -22.53, 38.66, 0.00 -109, -31.48, 61.57, 0.00 -110, -38.84, 85.73, 0.00 -111, -39.54, 97.76, 0.00 -112, -41.11, 113.18, 0.00 -113, -45.40, 138.59, 0.00 -114, -48.21, 162.60, 0.00 -115, -50.15, 186.45, 0.00 -116, -51.10, 209.06, 0.00 -117, -52.10, 234.42, 0.00 -118, -52.15, 257.98, 0.00 -119, -51.87, 282.32, 0.00 -120, -50.94, 305.45, 0.00 -121, -49.71, 328.98, 0.00 -122, -48.26, 353.54, 0.00 -123, -46.53, 378.59, 0.00 -124, -44.36, 402.83, 0.00 -125, -41.89, 426.89, 0.00 -126, -39.12, 450.47, 0.00 -127, -36.00, 472.81, 0.00 -128, -32.66, 494.65, 0.00 -129, -29.09, 515.33, 0.00 -130, -25.39, 536.37, 0.00 -131, -21.54, 556.80, 0.00 -132, -17.55, 576.45, 0.00 -133, -13.46, 595.31, 0.00 -134, -9.29, 613.80, 0.00 -135, -5.06, 631.12, 0.00 -136, -0.80, 648.19, 0.00 -137, 3.47, 663.59, 0.00 +199, -0.97, -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.96, 692.42, 0.00 -140, 16.14, 705.78, 0.00 -141, 20.25, 717.74, 0.00 -142, 24.26, 728.69, 0.00 -143, 28.19, 739.06, 0.00 -144, 31.99, 747.91, 0.00 -145, 35.62, 755.06, 0.00 -146, 39.14, 761.82, 0.00 -147, 42.53, 768.05, 0.00 -148, 45.75, 772.99, 0.00 -149, 48.91, 778.40, 0.00 -150, 51.71, 779.86, 0.00 -151, 54.03, 776.05, 0.00 -152, 56.28, 773.10, 0.00 -153, 58.38, 769.86, 0.00 -154, 61.98, 787.20, 0.00 -155, 64.09, 786.07, 0.00 -156, 66.67, 791.77, 0.00 -157, 52.82, 608.62, 0.00 -158, 5.31, 59.44, 0.00 -159, -15.53, -169.46, 0.00 -160, -4.44, -47.26, 0.00 -161, 3.79, 39.41, 0.00 -162, 7.00, 71.16, 0.00 -163, 3.42, 33.99, 0.00 -164, 2.69, 26.18, 0.00 -165, -0.19, -1.79, 0.00 -166, -0.79, -7.38, 0.00 -167, -0.72, -6.67, 0.00 -168, -1.02, -9.29, 0.00 -169, -1.46, -13.04, 0.00 -170, -1.89, -16.59, 0.00 -171, -2.57, -22.21, 0.00 -172, -3.11, -26.44, 0.00 -173, -3.77, -31.62, 0.00 -174, -4.23, -35.02, 0.00 -175, -5.09, -41.57, 0.00 -176, -5.74, -46.25, 0.00 -177, -6.51, -51.82, 0.00 -178, -7.08, -55.65, 0.00 -179, -7.65, -59.46, 0.00 -180, -8.12, -62.39, 0.00 -181, -8.63, -65.59, 0.00 -182, -8.99, -67.65, 0.00 -183, -9.37, -69.80, 0.00 -184, -9.61, -70.92, 0.00 -185, -9.84, -72.03, 0.00 -186, -9.84, -71.43, 0.00 -187, -10.03, -72.22, 0.00 -188, -10.02, -71.68, 0.00 -189, -9.85, -69.96, 0.00 -190, -9.57, -67.57, 0.00 -191, -9.14, -64.18, 0.00 -192, -8.62, -60.27, 0.00 -193, -8.01, -55.75, 0.00 -194, -7.28, -50.54, 0.00 -195, -6.41, -44.35, 0.00 -196, -5.40, -37.24, 0.00 -197, -4.25, -29.31, 0.00 -198, -2.90, -19.98, 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 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 968e1c570c4f..46d649f5175e 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.93, -0.00, 0.00 -0, -2.82, 19.40, 0.00 -1, -3.92, 27.02, 0.00 -2, -4.88, 33.72, 0.00 -3, -5.72, 39.56, 0.00 -4, -6.44, 44.71, 0.00 -5, -7.02, 48.89, 0.00 -6, -7.51, 52.48, 0.00 -7, -7.87, 55.30, 0.00 -8, -8.13, 57.42, 0.00 -9, -8.30, 58.97, 0.00 -10, -8.36, 59.79, 0.00 -11, -8.37, 60.26, 0.00 -12, -8.25, 59.87, 0.00 -13, -8.09, 59.19, 0.00 -14, -7.81, 57.68, 0.00 -15, -7.51, 55.96, 0.00 -16, -7.11, 53.47, 0.00 -17, -6.69, 50.85, 0.00 -18, -6.18, 47.44, 0.00 -19, -5.71, 44.32, 0.00 -20, -5.09, 40.02, 0.00 -21, -4.57, 36.32, 0.00 -22, -3.89, 31.32, 0.00 -23, -3.31, 27.04, 0.00 -24, -2.58, 21.30, 0.00 -25, -1.98, 16.65, 0.00 -26, -1.21, 10.26, 0.00 -27, -0.62, 5.33, 0.00 -28, 0.18, -1.55, 0.00 -29, 0.67, -6.01, 0.00 -30, 1.52, -13.78, 0.00 -31, 2.01, -18.57, 0.00 -32, 2.90, -27.18, 0.00 -33, 3.42, -32.69, 0.00 -34, 4.40, -42.92, 0.00 -35, 5.17, -51.39, 0.00 -36, 6.18, -62.79, 0.00 -37, 7.12, -73.99, 0.00 -38, 8.09, -86.13, 0.00 -39, 9.14, -99.76, 0.00 -40, 9.97, -111.72, 0.00 -41, 11.14, -128.38, 0.00 -42, 11.88, -141.03, 0.00 -43, 12.85, -157.59, 0.00 -44, 13.21, -167.77, 0.00 -45, 13.77, -181.54, 0.00 -46, 13.74, -188.78, 0.00 -47, 13.65, -196.06, 0.00 -48, 13.29, -200.42, 0.00 -49, 13.44, -213.89, 0.00 -50, 13.22, -223.33, 0.00 -51, 11.93, -215.52, 0.00 -52, 7.52, -146.34, 0.00 -53, 8.42, -178.53, 0.00 -54, 20.41, -477.30, 0.00 -55, 22.27, -583.66, 0.00 -56, 18.81, -564.85, 0.00 -57, 15.35, -544.23, 0.00 -58, 12.24, -535.25, 0.00 -59, 9.08, -525.86, 0.00 -60, 5.87, -515.48, 0.00 -61, 2.63, -503.38, 0.00 -62, -0.61, -490.62, 0.00 -63, -3.81, -475.68, 0.00 -64, -6.98, -460.89, 0.00 -65, -10.04, -444.16, 0.00 -66, -13.02, -427.64, 0.00 -67, -15.86, -409.93, 0.00 -68, -18.56, -392.00, 0.00 -69, -21.06, -373.16, 0.00 -70, -23.39, -354.15, 0.00 -71, -25.40, -333.59, 0.00 -72, -27.20, -313.20, 0.00 -73, -28.67, -292.19, 0.00 -74, -29.86, -271.15, 0.00 -75, -30.55, -248.58, 0.00 -76, -30.89, -226.28, 0.00 -77, -30.79, -203.80, 0.00 -78, -30.34, -181.93, 0.00 -79, -29.53, -160.74, 0.00 -80, -28.13, -139.16, 0.00 -81, -26.90, -121.01, 0.00 -82, -24.39, -99.78, 0.00 -83, -21.49, -79.88, 0.00 -84, -17.59, -59.33, 0.00 -85, -13.17, -40.20, 0.00 -86, -7.32, -20.15, 0.00 -87, -1.81, -4.47, 0.00 -88, 6.92, 15.28, 0.00 -89, 14.29, 27.95, 0.00 -90, 32.10, 55.07, 0.00 -91, 49.31, 73.31, 0.00 -92, 88.81, 112.47, 0.00 -93, 124.48, 131.25, 0.00 -94, 123.67, 105.06, 0.00 -95, 104.62, 68.15, 0.00 -96, 72.18, 33.08, 0.00 -97, -25.27, -6.84, 0.00 -98, -25.34, -3.40, 0.00 -99, -17.47, 0.00, 0.00 -100, -28.57, 3.83, 0.00 -101, 50.08, -13.55, 0.00 -102, 82.69, -37.90, 0.00 -103, 88.30, -57.51, 0.00 -104, 82.75, -70.30, 0.00 -105, 58.48, -61.66, 0.00 -106, 55.42, -70.19, 0.00 -107, 43.78, -65.08, 0.00 -108, 33.72, -57.85, 0.00 -109, 21.75, -42.54, 0.00 -110, 9.57, -21.12, 0.00 -111, -3.75, 9.28, 0.00 -112, -12.82, 35.29, 0.00 -113, -22.12, 67.51, 0.00 -114, -28.06, 94.63, 0.00 -115, -31.07, 115.49, 0.00 -116, -33.29, 136.22, 0.00 -117, -36.82, 165.66, 0.00 -118, -38.04, 188.20, 0.00 -119, -39.49, 214.93, 0.00 -120, -39.62, 237.58, 0.00 -121, -40.07, 265.19, 0.00 -122, -39.70, 290.85, 0.00 -123, -38.90, 316.55, 0.00 -124, -37.45, 340.05, 0.00 -125, -35.61, 362.84, 0.00 -126, -33.56, 386.52, 0.00 -127, -31.16, 409.15, 0.00 -128, -28.44, 430.68, 0.00 -129, -25.51, 452.03, 0.00 -130, -22.43, 473.81, 0.00 -131, -19.12, 494.36, 0.00 -132, -15.65, 514.12, 0.00 -133, -12.07, 533.98, 0.00 -134, -8.37, 553.04, 0.00 -135, -4.58, 571.17, 0.00 -136, -0.73, 588.35, 0.00 -137, 3.16, 604.93, 0.00 -138, 7.06, 619.62, 0.00 -139, 10.96, 634.43, 0.00 -140, 14.81, 647.41, 0.00 -141, 18.61, 659.64, 0.00 -142, 22.31, 670.10, 0.00 -143, 25.96, 680.56, 0.00 -144, 29.46, 688.92, 0.00 -145, 32.90, 697.36, 0.00 -146, 36.16, 703.92, 0.00 -147, 39.34, 710.52, 0.00 -148, 42.21, 713.11, 0.00 -149, 44.50, 708.22, 0.00 -150, 46.80, 705.83, 0.00 -151, 49.96, 717.59, 0.00 -152, 55.47, 762.02, 0.00 -153, 36.27, 478.33, 0.00 -154, 6.21, 78.85, 0.00 -155, 2.62, 32.19, 0.00 -156, 1.80, 21.41, 0.00 -157, 1.03, 11.88, 0.00 -158, 1.62, 18.17, 0.00 -159, 2.87, 31.36, 0.00 -160, 2.92, 31.05, 0.00 -161, 2.95, 30.70, 0.00 -162, 2.68, 27.25, 0.00 -163, 2.40, 23.87, 0.00 -164, 1.89, 18.41, 0.00 -165, 1.53, 14.66, 0.00 -166, 0.94, 8.84, 0.00 -167, 0.55, 5.06, 0.00 -168, -0.07, -0.67, 0.00 -169, -0.54, -4.82, 0.00 -170, -1.20, -10.56, 0.00 -171, -1.65, -14.27, 0.00 -172, -2.29, -19.51, 0.00 -173, -2.87, -24.03, 0.00 -174, -3.55, -29.33, 0.00 -175, -4.13, -33.67, 0.00 -176, -4.77, -38.40, 0.00 -177, -5.25, -41.76, 0.00 -178, -5.83, -45.79, 0.00 -179, -6.32, -49.11, 0.00 -180, -6.83, -52.48, 0.00 -181, -7.26, -55.15, 0.00 -182, -7.68, -57.75, 0.00 -183, -8.01, -59.70, 0.00 -184, -8.32, -61.43, 0.00 -185, -8.51, -62.24, 0.00 -186, -8.65, -62.80, 0.00 -187, -8.70, -62.69, 0.00 -188, -8.69, -62.14, 0.00 -189, -8.56, -60.80, 0.00 -190, -8.37, -59.08, 0.00 -191, -8.05, -56.54, 0.00 -192, -7.65, -53.45, 0.00 -193, -7.11, -49.48, 0.00 -194, -6.49, -45.03, 0.00 -195, -5.72, -39.59, 0.00 -196, -4.85, -33.47, 0.00 -197, -3.86, -26.60, 0.00 -198, -2.72, -18.72, 0.00 +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 diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 7faa5792ab12..f4719729e511 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -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.154112, -5.995257, -0.000034, 0.000000] + edge_PPR.test_vals = [-12.155248, -5.996433, -0.000034, 0] test_list.append(edge_PPR) @@ -945,7 +945,7 @@ def main(): uniform_flow.cfg_dir = "sliding_interface/uniform_flow" uniform_flow.cfg_file = "uniform_NN.cfg" uniform_flow.test_iter = 2 - uniform_flow.test_vals = [2.000000, 0.000000, -0.230641, -13.250620] + uniform_flow.test_vals = [2.000000, 0.000000, -0.230641, -13.251039] uniform_flow.test_vals_aarch64 = [2.000000, 0.000000, -0.230641, -13.249000] uniform_flow.tol = 0.000001 uniform_flow.unsteady = True @@ -1105,7 +1105,7 @@ def main(): dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi" dyn_fsi.cfg_file = "config.cfg" dyn_fsi.test_iter = 4 - dyn_fsi.test_vals = [-4.330728, -4.152820, 0, 85] + dyn_fsi.test_vals = [-4.330728, -4.152820, 0, 86] dyn_fsi.multizone = True dyn_fsi.unsteady = True test_list.append(dyn_fsi) diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index c8962aa3a189..16299688c1e5 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -206,7 +206,7 @@ def main(): discadj_fsi.cfg_dir = "disc_adj_fsi" discadj_fsi.cfg_file = "config.cfg" discadj_fsi.test_iter = 6 - discadj_fsi.test_vals = [6, -8.928909, -10.114567, 3.0938e-11, -1.7573e-06] + discadj_fsi.test_vals = [6, -8.931715, -10.103841, 3.0937e-11, -1.7573e-06] discadj_fsi.test_vals_aarch64 = [6, -8.928820, -10.067497, 3.0979e-11, -1.7585e-06] test_list.append(discadj_fsi) diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index 32fdfc7d41f5..cfb026fd9001 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -237,7 +237,7 @@ def main(): tutorial_trans_flatplate_T3A.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A" tutorial_trans_flatplate_T3A.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3A.test_iter = 20 - tutorial_trans_flatplate_T3A.test_vals = [-5.790137, -2.054834, -3.894661, -0.255075, -1.747052, 5.119341, -3.493237, 0.393262] + tutorial_trans_flatplate_T3A.test_vals = [-5.790137, -2.054834, -3.894661, -0.255074, -1.747074, 5.119341, -3.493237, 0.393262] tutorial_trans_flatplate_T3A.test_vals_aarch64 = [-5.808996, -2.070606, -3.969765, -0.277943, -1.953289, 1.708472, -3.514943, 0.357411] tutorial_trans_flatplate_T3A.no_restart = True test_list.append(tutorial_trans_flatplate_T3A) @@ -247,7 +247,7 @@ def main(): tutorial_trans_flatplate_T3Am.cfg_dir = "../Tutorials/compressible_flow/Transitional_Flat_Plate/Langtry_and_Menter/T3A-" tutorial_trans_flatplate_T3Am.cfg_file = "transitional_LM_model_ConfigFile.cfg" tutorial_trans_flatplate_T3Am.test_iter = 20 - tutorial_trans_flatplate_T3Am.test_vals = [-5.590179, -1.700867, -3.098472, -0.105296, -3.750523, 3.287643, -2.394576, 1.119623] + tutorial_trans_flatplate_T3Am.test_vals = [-5.590061, -1.700867, -3.098455, -0.105190, -3.750523, 3.287643, -2.394576, 1.119623] tutorial_trans_flatplate_T3Am.test_vals_aarch64 = [-5.540938, -1.681627, -2.878831, -0.058224, -3.695533, 3.413628, -2.385345, 1.103633] tutorial_trans_flatplate_T3Am.no_restart = True test_list.append(tutorial_trans_flatplate_T3Am) @@ -302,7 +302,7 @@ def main(): tutorial_unst_naca0012.cfg_dir = "../Tutorials/compressible_flow/Unsteady_NACA0012" tutorial_unst_naca0012.cfg_file = "unsteady_naca0012.cfg" tutorial_unst_naca0012.test_iter = 520 - tutorial_unst_naca0012.test_vals = [520, 0, -5.298841, 0, 0.307206, 0.773318, 0.002447, 0.014242] + tutorial_unst_naca0012.test_vals = [520, 0, -5.299278, 0, 0.294686, 0.745764, 0.003498, 0.016637] tutorial_unst_naca0012.test_vals_aarch64 = [520, 0, -5.292359, 0, 0.284720, 0.766329, 0.000954, 0.007565] tutorial_unst_naca0012.unsteady = True test_list.append(tutorial_unst_naca0012) diff --git a/meson.build b/meson.build index 831e282ca7e4..1a0090069887 100644 --- a/meson.build +++ b/meson.build @@ -187,6 +187,7 @@ endif if omp # add OpenMP dependency su2_deps += omp_dep + su2_cpp_args += '-DEIGEN_DONT_PARALLELIZE' # add opdi dependency if get_option('enable-autodiff') From 68acbf8a18cecd43bd9bb6fa560a98d98e6b2cdd Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Wed, 22 Apr 2026 19:33:33 +0200 Subject: [PATCH 218/229] fix arm builds for CI/CD (#2792) * fix arm builds * fix * fix --- .github/workflows/regression.yml | 49 ++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 31aaed6f6930..d4dd5f00b9dd 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -18,33 +18,50 @@ on: type: string jobs: + setup: + name: Compute shared flags + runs-on: ubuntu-latest + + outputs: + flags: ${{ steps.compute.outputs.flags }} + + steps: + - id: compute + run: | + if [[ "${{ inputs.runner || 'ubuntu-latest' }}" == *arm* ]]; then + echo "flags=" >> $GITHUB_OUTPUT + else + echo "flags=-Dcpu-arch=skylake" >> $GITHUB_OUTPUT + fi + build: name: Build SU2 + needs: setup strategy: fail-fast: false matrix: config_set: [BaseMPI, ReverseMPI, ForwardMPI, BaseNoMPI, ReverseNoMPI, ForwardNoMPI, ReverseTagNoMPI, BaseOMP, ReverseOMP, ForwardOMP] include: - config_set: BaseMPI - flags: '-Dcpu-arch=skylake -Denable-pywrapper=true -Denable-coolprop=true -Denable-mpp=true -Dinstall-mpp=true -Denable-mlpcpp=true -Denable-tests=true --warnlevel=2' + flags: '${{ needs.setup.outputs.flags }} -Denable-pywrapper=true -Denable-coolprop=true -Denable-mpp=true -Dinstall-mpp=true -Denable-mlpcpp=true -Denable-tests=true --warnlevel=2' - config_set: ReverseMPI - flags: '-Dcpu-arch=skylake -Denable-autodiff=true -Denable-normal=false -Denable-pywrapper=true -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Denable-pywrapper=true -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' - config_set: ForwardMPI - flags: '-Dcpu-arch=skylake -Denable-directdiff=true -Denable-normal=false -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' - config_set: BaseNoMPI - flags: '-Dcpu-arch=skylake -Denable-pywrapper=true -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true -Denable-tests=true --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-pywrapper=true -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true -Denable-tests=true --warnlevel=3 --werror' - config_set: ReverseNoMPI - flags: '-Dcpu-arch=skylake -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror' - config_set: ForwardNoMPI - flags: '-Dcpu-arch=skylake -Denable-directdiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-tests=true --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-tests=true --warnlevel=3 --werror' - config_set: ReverseTagNoMPI - flags: '-Dcpu-arch=skylake -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror -Dcodi-tape=Tag' + flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror -Dcodi-tape=Tag' - config_set: BaseOMP - flags: '-Dcpu-arch=skylake -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' - config_set: ReverseOMP - flags: '-Dcpu-arch=skylake -Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' - config_set: ForwardOMP - flags: '-Dcpu-arch=skylake -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files @@ -76,6 +93,7 @@ jobs: args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} build_tsan: name: Build SU2 (tsan) + needs: setup if: ${{ !contains(inputs.runner, 'arm') }} strategy: fail-fast: false @@ -83,11 +101,11 @@ jobs: config_set: [BaseOMP-tsan, ReverseOMP-tsan] #ForwardOMP-tsan include: - config_set: BaseOMP-tsan - flags: '--buildtype=debugoptimized -Dcpu-arch=skylake -Dwith-omp=true -Denable-mixedprec=true -Denable-tecio=false --warnlevel=3' + flags: '--buildtype=debugoptimized ${{ needs.setup.outputs.flags }} -Dwith-omp=true -Denable-mixedprec=true -Denable-tecio=false --warnlevel=3' - config_set: ReverseOMP-tsan - flags: '--buildtype=debugoptimized -Dcpu-arch=skylake -Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-tecio=false --warnlevel=3' + flags: '--buildtype=debugoptimized ${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-tecio=false --warnlevel=3' #- config_set: ForwardOMP-tsan - # flags: '--buildtype=debug -Dcpu-arch=skylake -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + # flags: '--buildtype=debug ${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files @@ -119,15 +137,16 @@ jobs: args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} build_asan: name: Build SU2 (asan) + needs: setup strategy: fail-fast: false matrix: config_set: [BaseNoMPI-asan, ReverseNoMPI-asan] include: - config_set: BaseNoMPI-asan - flags: '--buildtype=debugoptimized -Dcpu-arch=skylake -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true --warnlevel=3 --werror' + flags: '--buildtype=debugoptimized ${{ needs.setup.outputs.flags }} -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true --warnlevel=3 --werror' - config_set: ReverseNoMPI-asan - flags: '--buildtype=debugoptimized -Dcpu-arch=skylake --optimization=1 -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled --warnlevel=3 --werror' + flags: '--buildtype=debugoptimized ${{ needs.setup.outputs.flags }} --optimization=1 -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled --warnlevel=3 --werror' runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files From c677b0d92d00b89a126681ff3e0b1b5d08dc1a5c Mon Sep 17 00:00:00 2001 From: Angelo Passariello <91474456+AngPass@users.noreply.github.com> Date: Wed, 22 Apr 2026 19:34:44 +0200 Subject: [PATCH 219/229] Stochastic Backscatter Model for Grey Area Mitigation in Hybrid RANS-LES Simulations (#2572) * Preliminary implementation: uncorrelated stochastic variables The Reynolds stress tensor definition is modified to include a random contribution, which is expressed as the curl of a normally-distributed stochastic vector potential. * Add solution of Langevin equations Add Langevin equations to Spalart-Allmaras solver (uncorrelated random source term) + add stochastic contribution to Reynolds stress tensor (using conservative variables from Langevin equations). * Fix sanitizer warnings and regression failures Fix sanitizer warnings and regression test failures - Address issues reported by clang sanitizers. - Adjust implementation to ensure regression tests pass. * Minor fixes - Enhance readability. - Ensure consistent declaration types. * Ensure consistency with DES - Extend implementation to 2D configurations. - Improve robustness. * Boundary conditions for Langevin equations Enforce boundary conditions in Langevin equations. * Use symmetry-preserving scheme for Langevin equations - Implement a skew-symmetric scheme for the discretization of the convective terms in the Langevin equations. - Fix the seed for the generation of the random source terms at the beginning of the simulation. * Add option for simulating DIHT - Add the flag for the simulation of the Decaying Isotropic Homogeneous Turbulence. - Generate the initial velocity field matching the experimental data by Comte-Bellot & Corrsin. - Include a preliminary test case. * Fix options for DIHT - Implement flag to enforce LES in the whole domain. - Add option to set the LES filter width to a user-specified value. - Add velocity divergence to volume outputs. - Remove internal generation of initial velocity field for simulating the Decaying Isotropic Homogeneous Turbulence (DIHT). * Consistent estimation of turb. kinetic energy (for SA) - Add consistent evaluation of the turbulent kinetic energy in the random source term appearing in the momentum equations. - Add backscatter intensity coefficient in the configuration file. - Add random initialization of the Langevin variables. * Add Laplacian smoothing (Langevin equations) - Add Laplacian smoothing of source terms in Langevin equations. Remark: pseudo-time integration is employed (residuals are printed on screen with fixed frequency, the maximum number of time iterations can be defined by the user). * Fix redundancy in CTurbSAVariable.hpp - Fix redundancy in virtual member definition. * Add stochastic source to turbulence model equation - Add stochastic source term to Spalart-Allmaras turbulence model equation (to ensure exchange of modeled and resolved kinetic energy). * SOR algorithm for Laplacian smoothing - Replace dual-time integration with Successive Over-Relaxation for Laplacian smoothing. - Initialize stochastic vector potential as equal to the stochastic source terms in Langevin equations. - Add random source term to main balance equations in LES zones exclusively. - Blend RANS and LES turbulence timescales using the LES sensor. * Correct scaling of stochastic source terms in Langevin eqs. - Scale source terms in Langevin equations using Bessel functions to preserve the variance. - Compute Bessel integral at the beginning of the simulation for optimization. - Add variance monitoring to screen output. * Add LD2 scheme for the incompressible solver - Add LD2 discretization for the inviscid terms in the main balance equations. Remarks: -- Valid only for the incompressible flow solver, with constant density fluid model. -- JST scheme must be selected in the config file. The novel option LD2_SCHEME must be set to YES. * Fix LD2 for periodic boundaries - Retrieve classic second-order central scheme at periodic boundaries. * Include stochastic source term in turb. equation Add option to include stochastic contribution to turbulence model equation. * Minor fixes - Use logarithmic approximation for Bessel function. - Compute relative variance of the stochastic field for verification. * Add time-averaged skin friction coefficient - Add option to print time-averaged skin friction coefficient in volume output. * Minor fix - Minor syntax fix in CConfig.cpp * Minor fix - Minor syntax fix in CConfig.cpp * Add fields to VOLUME_OUTPUT - Include time-averaged skin friction coefficient and instantaneous energy backscatter ratio into volume output fields. - Fix boundary conditions for the implicit smoothing of the stochastic source term in Langevin equations. - Fix computation of the source term in turbulence model equation. - Fix computation of the subgrid kinetic energy (divide eddy viscosity by flow density). - Diagonalize Jacobian in turbulence equations for numerical robustness. * Fix LD2 option in config file - Allow LD2 option only for JST scheme. * Enhance numerical robustness - Add option to include diagnostics of the stochastic source term smoothing. - Add relaxation factor for the random forcing term in the main balanca equations. - Add modeled and stochastic Reynolds stresses to volume output files. * Enhance numerical efficiency - Random generators removed from static variables. - Random generators re-initialized at every time step using deterministic seeds. * Fix bug in viscous flux computation - Account for zero DES length scale in ghost cells. - Fix threshold (=0.9) for the activation of the backscatter model. * First major revision - Add LD2 scheme to CONV_NUM_METHOD enum. - Change scaling of the backscatter term. - Increase the size of residual and Jacobian in turb_sources.hpp. - Remove dynamic allocation in CTurbSASolver.cpp. - Add helper function to compute relaxed backscatter intensity coefficient. - Include pressure extrapolation in LD2 scheme formulation. - Make code style homogeneous. * Minor fixes - Redefine default values for backscatter parameters. - Introduce RANS-LES blending factor for source terms in Langevin equations. - Fix bug in MPI communication of slope limiters between periodic faces. * Add new features - Add the option to apply the backscatter model only in a bounded box. - Add the option to enforce backscatter where shielding function exceeds user-defined value. - Correct bug in LD2 implementation. - Make style consistent and update configuration template. * Redefine scaling of stochastic source term - Modify the scaling of the stochastic forcing to include the modeled viscosity. - Fix the computation of the stochastic tensor. - Add the MPI communication of the DES lengthscale. * Update config template * Delete TestCases/backscatter/DIHT directory Remove outdated configuration file. * Include stochastic variables in restart file - Add the stochastic variables (from Langevin equations) to the restart file. - Optimize the definition of the points lying inside the box where the backscatter model is active. - Limit the turbulence time scale in RANS regions (Langevin equations). - Add test case: spatially-developing mixing layer. * Change proposed test case * Update Common/include/toolboxes/random_toolbox.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update Common/include/toolboxes/random_toolbox.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/src/solvers/CTurbSASolver.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/src/solvers/CTurbSASolver.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/include/numerics/turbulent/turb_sources.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/src/numerics/flow/convection/centered.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/src/solvers/CTurbSASolver.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Second major revision * Minor fixes * Minor fixes * Third major revision * Update SU2_CFD/include/variables/CTurbSAVariable.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/include/numerics/CNumerics.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/src/solvers/CTurbSASolver.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/src/solvers/CTurbSASolver.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/src/solvers/CTurbSASolver.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Add residuals of stoch. variables to vol. outputs * Update Common/include/toolboxes/random_toolbox.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Fix compilation errors * Fix compilation errors - bis * Fix compilation errors - tris * Fix compilation errors - tetra * Apply suggestions from code review Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/include/variables/CTurbSAVariable.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/include/variables/CTurbSAVariable.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/include/variables/CTurbSAVariable.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/include/variables/CTurbVariable.hpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/src/variables/CTurbSAVariable.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Update SU2_CFD/src/solvers/CTurbSASolver.cpp Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> * Fix code formatting * Fix compilation errors - V * Fix errors in regression tests (hopefully) * Restore nPrimVarGrad in InitiatePeriodicComms * Restore DDES test case (committed by mistake) * Simplify backscatter test * Fix compilation issues * Fix parallel regression * Fix regressions * Fix regressions #2 --------- Co-authored-by: Angelo Passariello Co-authored-by: Angelo Passariello Co-authored-by: Angelo Passariello Co-authored-by: paan882 Co-authored-by: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> --- Common/include/CConfig.hpp | 33 ++ Common/include/option_structure.hpp | 6 +- Common/include/toolboxes/random_toolbox.hpp | 172 +++++++ Common/src/CConfig.cpp | 108 ++++- SU2_CFD/include/numerics/CNumerics.hpp | 106 +++++ .../include/numerics/flow/flow_diffusion.hpp | 11 +- .../numerics/scalar/scalar_diffusion.hpp | 2 +- .../numerics/turbulent/turb_convection.hpp | 11 + .../numerics/turbulent/turb_sources.hpp | 166 +++++-- .../include/numerics_simd/CNumericsSIMD.cpp | 1 + SU2_CFD/include/output/CFlowOutput.hpp | 38 +- .../include/solvers/CFVMFlowSolverBase.inl | 23 +- SU2_CFD/include/solvers/CTurbSASolver.hpp | 25 +- SU2_CFD/include/variables/CFlowVariable.hpp | 2 +- SU2_CFD/include/variables/CIncNSVariable.hpp | 16 +- SU2_CFD/include/variables/CNEMONSVariable.hpp | 1 + SU2_CFD/include/variables/CNSVariable.hpp | 14 + SU2_CFD/include/variables/CTurbSAVariable.hpp | 75 ++++ SU2_CFD/include/variables/CTurbVariable.hpp | 30 +- SU2_CFD/include/variables/CVariable.hpp | 48 ++ SU2_CFD/src/drivers/CDriver.cpp | 1 + .../src/numerics/flow/convection/centered.cpp | 17 + SU2_CFD/src/numerics/flow/flow_diffusion.cpp | 46 +- SU2_CFD/src/output/CFlowCompOutput.cpp | 6 +- SU2_CFD/src/output/CFlowIncOutput.cpp | 6 +- SU2_CFD/src/output/CFlowOutput.cpp | 142 +++++- SU2_CFD/src/output/CNEMOCompOutput.cpp | 6 +- SU2_CFD/src/solvers/CIncEulerSolver.cpp | 15 +- SU2_CFD/src/solvers/CIncNSSolver.cpp | 7 +- SU2_CFD/src/solvers/CNSSolver.cpp | 2 + SU2_CFD/src/solvers/CSolver.cpp | 22 + SU2_CFD/src/solvers/CTurbSASolver.cpp | 421 +++++++++++++++++- SU2_CFD/src/solvers/CTurbSolver.cpp | 8 +- SU2_CFD/src/variables/CIncNSVariable.cpp | 1 + SU2_CFD/src/variables/CNEMONSVariable.cpp | 1 + SU2_CFD/src/variables/CNSVariable.cpp | 1 + SU2_CFD/src/variables/CTurbSAVariable.cpp | 25 +- TestCases/TestCase.py | 9 + .../backward_step/backwardStep.cfg | 120 +++++ TestCases/ddes/flatplate/ddes_flatplate.cfg | 4 +- TestCases/hybrid_regression.py | 2 +- TestCases/parallel_regression.py | 13 +- TestCases/tutorials.py | 2 +- .../Common/toolboxes/random_toolbox_tests.cpp | 55 +++ UnitTests/meson.build | 3 +- config_template.cfg | 43 +- 46 files changed, 1771 insertions(+), 95 deletions(-) create mode 100644 Common/include/toolboxes/random_toolbox.hpp create mode 100644 TestCases/backscatter/backward_step/backwardStep.cfg create mode 100644 UnitTests/Common/toolboxes/random_toolbox_tests.cpp diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index bbb2cf12bf8d..aa9ed32fc4eb 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -1096,6 +1096,21 @@ class CConfig { WINDOW_FUNCTION Kind_WindowFct; /*!< \brief Type of window (weight) function for objective functional. */ unsigned short Kind_HybridRANSLES; /*!< \brief Kind of Hybrid RANS/LES. */ unsigned short Kind_RoeLowDiss; /*!< \brief Kind of Roe scheme with low dissipation for unsteady flows. */ + struct CStochBackScatParam { + bool StochasticBackscatter; /*!< \brief Option to include Stochastic Backscatter Model. */ + su2double SBS_Cdelta; /*!< \brief Stochastic Backscatter Model lengthscale coefficient. */ + unsigned short SBS_maxIterSmooth; /*!< \brief Maximum number of smoothing iterations for the SBS model. */ + su2double SBS_Ctau; /*!< \brief Stochastic Backscatter Model timescale coefficient. */ + su2double SBS_Cmag; /*!< \brief Stochastic Backscatter Model intensity coefficient. */ + bool stochSourceNu; /*!< \brief Option for including stochastic source term in turbulence model equation (Stochastic Backscatter Model). */ + bool stochSourceDiagnostics; /*!< \brief Option for writing diagnostics related to stochastic source terms in Langevin equations (Stochastic Backscatter Model). */ + bool StochBackscatterInBox; /*!< \brief Option for activating the Stochastic Backscatter Model only in a bounded box. */ + su2double StochBackscatterBoxBounds[6]; /*!< \brief Bounds of the box where the Stochastic Backscatter Model is active. */ + su2double stochFdThreshold; /*!< \brief Shielding function lower threshold for application of Stochastic Backscatter Model. */ + su2double stochSourceRelax; /*!< \brief Relaxation factor for stochastic source term generation (Stochastic Backscatter Model). */ + } SBSParam; + bool enforceLES; /*!< \brief Option to enforce LES mode in hybrid RANS-LES simulations. */ + su2double LES_FilterWidth; /*!< \brief LES filter width for hybrid RANS-LES simulations. */ unsigned short nSpanWiseSections; /*!< \brief number of span-wise sections */ unsigned short nSpanMaxAllZones; /*!< \brief number of maximum span-wise sections for all zones */ @@ -9598,12 +9613,30 @@ class CConfig { */ unsigned short GetKind_HybridRANSLES(void) const { return Kind_HybridRANSLES; } + /*! + * \brief Get if the LES mode must be enforced. + * \return TRUE if LES is enforced. + */ + bool GetEnforceLES(void) const { return enforceLES; } + + /*! + * \brief Get the LES Filter Width. + * \return Value of LES Filter Width. + */ + su2double GetLES_FilterWidth(void) const { return LES_FilterWidth; } + /*! * \brief Get the Kind of Roe Low Dissipation Scheme for Unsteady flows. * \return Value of Low dissipation approach. */ unsigned short GetKind_RoeLowDiss(void) const { return Kind_RoeLowDiss; } + /*! + * \brief Get the Stochastic BackScatter (SBS) model parameters. + * \return SBS model parameters. + */ + const CStochBackScatParam& GetSBSParam(void) const { return SBSParam; } + /*! * \brief Get the DES Constant. * \return Value of DES constant. diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index 677e317912ec..7cd25f3ab4b4 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -824,7 +824,8 @@ enum class CENTERED { JST, /*!< \brief Jameson-Smith-Turkel centered numerical method. */ LAX, /*!< \brief Lax-Friedrich centered numerical method. */ JST_MAT, /*!< \brief JST with matrix dissipation. */ - JST_KE /*!< \brief Kinetic Energy preserving Jameson-Smith-Turkel centered numerical method. */ + JST_KE, /*!< \brief Kinetic Energy preserving Jameson-Smith-Turkel centered numerical method. */ + LD2 /*!< \brief Low-Dissipation Low-Dispersion (LD2) centered scheme. */ }; static const MapType Centered_Map = { MakePair("NONE", CENTERED::NONE) @@ -832,6 +833,7 @@ static const MapType Centered_Map = { MakePair("JST_KE", CENTERED::JST_KE) MakePair("JST_MAT", CENTERED::JST_MAT) MakePair("LAX-FRIEDRICH", CENTERED::LAX) + MakePair("LD2", CENTERED::LD2) }; @@ -2716,6 +2718,8 @@ enum class MPI_QUANTITIES { MAX_LENGTH , /*!< \brief Maximum length communication. */ GRID_VELOCITY , /*!< \brief Grid velocity communication. */ SOLUTION_EDDY , /*!< \brief Turbulent solution plus eddy viscosity communication. */ + STOCH_SOURCE_LANG , /*!< \brief Stochastic source term for Langevin equations communication. */ + DES_LENGTHSCALE , /*!< \brief DES length scale communication. */ SOLUTION_MATRIX , /*!< \brief Matrix solution communication. */ SOLUTION_MATRIXTRANS , /*!< \brief Matrix transposed solution communication. */ NEIGHBORS , /*!< \brief Neighbor point count communication (for JST). */ diff --git a/Common/include/toolboxes/random_toolbox.hpp b/Common/include/toolboxes/random_toolbox.hpp new file mode 100644 index 000000000000..0f053497ae44 --- /dev/null +++ b/Common/include/toolboxes/random_toolbox.hpp @@ -0,0 +1,172 @@ +/*! + * \file random_toolbox.hpp + * \brief Collection of utility functions for random number generation. + * \version 8.4.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2025, SU2 Contributors (cf. AUTHORS.md) + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#pragma once +#include +#include "../option_structure.hpp" + +namespace RandomToolbox { +/// \addtogroup RandomToolbox +/// @{ + +/*! + * \brief SplitMix64 hash function for 64-bit integers. + * \param[in] x Input value to hash. + * \return Hashed 64-bit output. + */ +static inline uint64_t splitmix64(uint64_t x) { + x += 0x9e3779b97f4a7c15ULL; // golden ratio offset + x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9ULL; // first mixing step + x = (x ^ (x >> 27)) * 0x94d049bb133111ebULL; // second mixing step + return x ^ (x >> 31); // final avalanche +} + +/*! + * \brief Generate a deterministic 64-bit hash from three integers. + * \param[in] nodeIndex Global node index. + * \param[in] iDim Dimension index. + * \param[in] timeIter Current time iteration of the simulation. + * \return 64-bit hash value. + */ +inline uint64_t GetHash(unsigned long nodeIndex, unsigned short iDim, unsigned long timeIter) { + uint64_t x = nodeIndex; + x ^= splitmix64(iDim); + x ^= splitmix64(timeIter); + return splitmix64(x); +} + +/*! + * \brief Convert a 64-bit hash into a uniform double in (0,1]. + * Uses the top 53 bits of the hash to fill the mantissa of a double. + * Ensures the result is never zero, suitable for Box-Muller transform. + * \param[in] x 64-bit hash. + * \return Uniform double in the interval (0,1]. + */ +inline double HashToUniform(uint64_t x) { + constexpr double inv53 = 1.0 / 9007199254740992.0; // 1/2^53 + uint64_t uInt = x >> 11; // top 53 bits + return (uInt + 1) * inv53; // map to (0,1] +} + +/*! + * \brief Generate a standard normal random number from a 64-bit hash. + * Uses two deterministic uniforms derived from the hash and its bitwise NOT + * as inputs to the Box-Muller transform. + * \param[in] x 64-bit hash. + * \return Standard normal random number (mean=0, stddev=1). + */ +inline double HashToNormal(uint64_t x) { + double u = HashToUniform(x); // first uniform + double v = HashToUniform(~x); // second uniform (bitwise NOT) + double r = sqrt(-2.0 * log(u)); + double theta = 2.0 * PI_NUMBER * v; + return r * cos(theta); // one normal sample +} + +/*! + * \brief Generate a deterministic standard normal number for a cell, dimension, and timestep. + * + * Combines hashing and Box-Muller in one function. + * + * \param[in] nodeIndex Global node index. + * \param[in] dim Dimension index. + * \param[in] timeIter Simulation timestep (1-based). + * \return Standard normal random number. + */ +inline double GetNormal(unsigned long nodeIndex, unsigned long dim, unsigned long timeIter) { + uint64_t hash = GetHash(nodeIndex, dim, timeIter); + return HashToNormal(hash); +} + +/*! + * \brief Compute modified bessel function of first kind (order 0). + * \param[in] x Argument of Bessel funtion. + * \return Value of Bessel function. + */ +template +inline T GetBesselZero(const T& x) { + T abx = fabs(x); + + if (abx < 3.75) { + T t = abx / 3.75; + T p = + 1.0 + + t * t * + (3.5156229 + + t * t * (3.0899424 + t * t * (1.2067492 + t * t * (0.2659732 + t * t * (0.0360768 + t * t * 0.0045813))))); + return log(p); + } else { + T t = 3.75 / abx; + + T poly = + 0.39894228 + + t * (0.01328592 + + t * (0.00225319 + + t * (-0.00157565 + + t * (0.00916281 + t * (-0.02057706 + t * (0.02635537 + t * (-0.01647633 + t * 0.00392377))))))); + + T arg = sqrt(abx) * poly; + return abx - log(arg); + } +} + +/*! + * \brief Compute integral involving the product of three modified Bessel functions. + * Useful for scaling the smoothed stochastic source terms in Langevin equations. + * \param[in] beta_x Argument in x-direction. + * \param[in] beta_y Argument in y-direction. + * \param[in] beta_z Argument in z-direction. + * \return Value of the integral. + */ +template +inline T GetBesselIntegral(const T& beta_x, const T& beta_y, const T& beta_z) { + const T A = 1 + 2 * (beta_x + beta_y + beta_z); + const T Bx = 2 * beta_x; + const T By = 2 * beta_y; + const T Bz = 2 * beta_z; + + const int N = 4000; + const T t_max = 20.0; + const T dt = t_max / N; + + T sum = T(0.0); + + for (int i = 1; i <= N; i++) { + T t = i * dt; + + T lin = log(t) - A * t + GetBesselZero(T(Bx * t)) + GetBesselZero(T(By * t)) + GetBesselZero(T(Bz * t)); + + T integrand = exp(lin); + + T weight = (i == N) ? 0.5 : 1.0; + sum += integrand * weight; + } + + return sum * dt; +} + +/// @} +} // namespace RandomToolbox diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index c2b2f8ff9cbd..2ffc04543383 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -2966,9 +2966,48 @@ void CConfig::SetConfig_Options() { /* DESCRIPTION: DES Constant */ addDoubleOption("DES_CONST", Const_DES, 0.65); + /* DESCRIPTION: SBS lengthscale coefficient */ + addDoubleOption("SBS_LENGTHSCALE_COEFF", SBSParam.SBS_Cdelta, 0.02); + + /* DESCRIPTION: Maximum number of smoothing iterations for SBS model. */ + addUnsignedShortOption("SBS_MAX_ITER_SMOOTH", SBSParam.SBS_maxIterSmooth, 100); + + /* DESCRIPTION: SBS timescale coefficient */ + addDoubleOption("SBS_TIMESCALE_COEFF", SBSParam.SBS_Ctau, 0.05); + + /* DESCRIPTION: SBS intensity coefficient */ + addDoubleOption("SBS_INTENSITY_COEFF", SBSParam.SBS_Cmag, 1.0); + /* DESCRIPTION: Specify Hybrid RANS/LES model */ addEnumOption("HYBRID_RANSLES", Kind_HybridRANSLES, HybridRANSLES_Map, NO_HYBRIDRANSLES); + /* DESCRIPTION: Specify if the Stochastic Backscatter Model must be activated */ + addBoolOption("STOCHASTIC_BACKSCATTER", SBSParam.StochasticBackscatter, false); + + /* DESCRIPTION: Specify if the LES mode must be enforced */ + addBoolOption("ENFORCE_LES", enforceLES, false); + + /* DESCRIPTION: Specify if the stochastic source term must be included in the turbulence model equation */ + addBoolOption("SBS_SOURCE_NU_EQUATION", SBSParam.stochSourceNu, true); + + /* DESCRIPTION: Enable diagnostics of the stochastic source term in Langevin equation. */ + addBoolOption("SBS_SOURCE_DIAGNOSTICS", SBSParam.stochSourceDiagnostics, false); + + /* DESCRIPTION: Relaxation factor for the stochastic source term (Stochastic Backscatter Model) */ + addDoubleOption("SBS_RELAXATION_FACTOR", SBSParam.stochSourceRelax, 0.0); + + /* DESCRIPTION: Apply Stochastic Backscatter Model only in a bounded box */ + addBoolOption("SBS_IN_BOX", SBSParam.StochBackscatterInBox, false); + + /* DESCRIPTION: Specify extents of box where Stochastic Backscatter Model is active */ + addDoubleArrayOption("SBS_BOX_BOUNDS", 6, false, SBSParam.StochBackscatterBoxBounds); + + /* DESCRIPTION: Shielding function lower threshold for application of Stochastic Backscatter Model */ + addDoubleOption("SBS_FD_LOWER_THRESHOLD", SBSParam.stochFdThreshold, 0.9); + + /* DESCRIPTION: Filter width for LES (if negative, it is computed based on the local cell size) */ + addDoubleOption("LES_FILTER_WIDTH", LES_FilterWidth, -1.0); + /* DESCRIPTION: Roe with low dissipation for unsteady flows */ addEnumOption("ROE_LOW_DISSIPATION", Kind_RoeLowDiss, RoeLowDiss_Map, NO_ROELOWDISS); @@ -6451,6 +6490,60 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { case SA_ZDES: cout << "Delayed Detached Eddy Simulation (DDES) with Vorticity-based SGS" << endl; break; case SA_EDDES: cout << "Delayed Detached Eddy Simulation (DDES) with Shear-layer Adapted SGS" << endl; break; } + if (Kind_HybridRANSLES != NO_HYBRIDRANSLES) { + if (LES_FilterWidth > 0.0) cout << "User-specified LES filter width: " << LES_FilterWidth << endl; + cout << "Stochastic Backscatter: "; + if (SBSParam.StochasticBackscatter) { + cout << "ON" << endl; + if (GetnDim(GetMesh_FileName(), Mesh_FileFormat) < 3) + SU2_MPI::Error("Stochastic Backscatter Model available for 3D flow simulations only.", CURRENT_FUNCTION); + cout << "Backscatter intensity coefficient: " << SBSParam.SBS_Cmag << endl; + if (SBSParam.SBS_Cmag < 0.0) + SU2_MPI::Error("Backscatter intensity coefficient must be non-negative.", CURRENT_FUNCTION); + if (SBSParam.SBS_Ctau > 0.0) + cout << "Backscatter timescale coefficient: " << SBSParam.SBS_Ctau << endl; + else + cout << "Langevin equations not integrated (temporally uncorrelated stochastic field)." << endl; + if (SBSParam.SBS_maxIterSmooth > 0) { + cout << "Maximum number of iterations for implicit smoothing: " << SBSParam.SBS_maxIterSmooth << endl; + cout << "Backscatter lengthscale coefficient: " << SBSParam.SBS_Cdelta << endl; + if (SBSParam.SBS_Cdelta < 0.0) + SU2_MPI::Error("Backscatter lengthscale coefficient must be non-negative.", CURRENT_FUNCTION); + } else { + cout << "No smoothing applied to stochastic source terms in Langevin equations." << endl; + } + if (SBSParam.stochSourceNu) + cout << "Stochastic source term included in turbulence model equation." << endl; + else + cout << "Stochastic source term NOT included in turbulence model equation." << endl; + if (SBSParam.stochSourceRelax > 0.0) + cout << "Relaxation factor for stochastic source term: " << SBSParam.stochSourceRelax << endl; + else + cout << "No relaxation factor for stochastic source term." << endl; + if (SBSParam.StochBackscatterInBox) { + cout << "Stochastic Backscatter Model activated only in a bounded box." << endl; + cout << "Box bounds: " << endl; + cout << " X: " << setw(10) << fixed << setprecision(4) << SBSParam.StochBackscatterBoxBounds[0] << " , " + << setw(10) << fixed << setprecision(4) << SBSParam.StochBackscatterBoxBounds[1] << endl; + cout << " Y: " << setw(10) << fixed << setprecision(4) << SBSParam.StochBackscatterBoxBounds[2] << " , " + << setw(10) << fixed << setprecision(4) << SBSParam.StochBackscatterBoxBounds[3] << endl; + cout << " Z: " << setw(10) << fixed << setprecision(4) << SBSParam.StochBackscatterBoxBounds[4] << " , " + << setw(10) << fixed << setprecision(4) << SBSParam.StochBackscatterBoxBounds[5] << endl; + } + if (Kind_HybridRANSLES != SA_DES) + cout << "Stochastic source terms suppressed where the shielding function is lower than: " << setw(5) << setprecision(3) << SBSParam.stochFdThreshold << endl; + } else { + cout << "OFF" << endl; + } + } + if (Kind_HybridRANSLES == NO_HYBRIDRANSLES && SBSParam.StochasticBackscatter) + SU2_MPI::Error("Stochastic Backscatter can only be activated with Hybrid RANS/LES.", CURRENT_FUNCTION); + if (enforceLES) { + if (Kind_HybridRANSLES == NO_HYBRIDRANSLES) + SU2_MPI::Error("ENFORCE_LES can only be activated with Hybrid RANS/LES.", CURRENT_FUNCTION); + else + cout << "LES enforced in the whole computational domain." << endl; + } break; case MAIN_SOLVER::NEMO_EULER: if (Kind_Regime == ENUM_REGIME::COMPRESSIBLE) cout << "Compressible two-temperature thermochemical non-equilibrium Euler equations." << endl; @@ -7019,11 +7112,20 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { cout << "Lax viscous coefficients (1st): " << Kappa_1st_Flow << ".\n"; cout << "First order integration." << endl; } + else if (Kind_Centered_Flow == CENTERED::LD2) { + cout << "Low-Dissipation Low-Dispersion (LD2) scheme for the flow inviscid terms." << endl; + if (!(Kind_Solver==MAIN_SOLVER::INC_EULER || Kind_Solver==MAIN_SOLVER::INC_NAVIER_STOKES || Kind_Solver==MAIN_SOLVER::INC_RANS)) + SU2_MPI::Error("LD2 scheme not yet implemented for the compressible flow solver.", CURRENT_FUNCTION); + if (Kind_FluidModel != CONSTANT_DENSITY) + SU2_MPI::Error("LD2 scheme available for constant density flows only.", CURRENT_FUNCTION); + if (Energy_Equation) + cout << "WARNING: Current implementation of the LD2 scheme not compatible with the energy equation. JST employed in energy equation instead." << endl; + } else { - cout << "Jameson-Schmidt-Turkel scheme (2nd order in space) for the flow inviscid terms.\n"; - cout << "JST viscous coefficients (2nd & 4th): " << Kappa_2nd_Flow << ", " << Kappa_4th_Flow << ".\n"; - cout << "The method includes a grid stretching correction (p = 0.3)."<< endl; + cout << "Jameson-Schmidt-Turkel scheme (2nd order in space) for the flow inviscid terms.\n"; } + cout << "JST viscous coefficients (2nd & 4th): " << Kappa_2nd_Flow << ", " << Kappa_4th_Flow << ".\n"; + cout << "The method includes a grid stretching correction (p = 0.3)."<< endl; } if (Kind_ConvNumScheme_Flow == SPACE_UPWIND) { diff --git a/SU2_CFD/include/numerics/CNumerics.hpp b/SU2_CFD/include/numerics/CNumerics.hpp index 2531f01317ca..e910c6c5a487 100644 --- a/SU2_CFD/include/numerics/CNumerics.hpp +++ b/SU2_CFD/include/numerics/CNumerics.hpp @@ -184,6 +184,17 @@ class CNumerics { roughness_j = 0.0; /*!< \brief Roughness of the wall nearest to point j. */ su2double MeanPerturbedRSM[3][3]; /*!< \brief Perturbed Reynolds stress tensor */ + su2double stochReynStress[3][3] = {{0.0}}; /*!< \brief Stochastic contribution to Reynolds stress tensor for Backscatter Model. */ + su2double stochSource[3] = {0.0}; /*!< \brief Source term for Langevin equations in Stochastic Backscatter Model. */ + su2double + stochVar_i[3] = {0.0}, /*!< \brief Stochastic variables at point i for Stochastic Backscatter Model. */ + stochVar_j[3] = {0.0}; /*!< \brief Stochastic variables at point j for Stochastic Backscatter Model. */ + su2double + lesMode_i = 0.0, /*!< \brief LES sensor at point i for hybrid RANS-LES methods. */ + lesMode_j = 0.0; /*!< \brief LES sensor at point j for hybrid RANS-LES methods. */ + unsigned short + sbsInBox_i = 0, /*!< \brief Sensor to assess if point i lies inside the box where the Stochastic Backscatter Model is active. */ + sbsInBox_j = 0; /*!< \brief Sensor to assess if point j lies inside the box where the Stochastic Backscatter Model is active. */ SST_ParsedOptions sstParsedOptions; /*!< \brief additional options for the SST turbulence model */ unsigned short Eig_Val_Comp; /*!< \brief Component towards which perturbation is perfromed */ su2double uq_delta_b; /*!< \brief Magnitude of perturbation */ @@ -640,6 +651,61 @@ class CNumerics { } } } + + /*! + * \brief Compute a random contribution to the Reynolds stress tensor (Stochastic Backscatter Model). + * \details See: Kok, Johan C. "A stochastic backscatter model for grey-area mitigation in detached + * eddy simulations." Flow, Turbulence and Combustion 99.1 (2017): 119-150. + * \param[in] nDim - Dimension of the flow problem, 2 or 3. + * \param[in] density - Density. + * \param[in] tke - Turbulent kinetic energy. + * \param[in] rndVec - Vector of stochastic variables from Langevin equations. + * \param[in] Cmag - Stochastic backscatter intensity coefficient. + * \param[out] stochReynStress - Stochastic tensor (to be added to the Reynolds stress tensor). + */ + template + inline void ComputeStochReynStress(su2double density, su2double tke, const Vec& rndVec, + su2double Cmag, Mat& stochReynStress) { + + /* --- Calculate stochastic tensor --- */ + + su2double stochLim = 3.0; + + stochReynStress[0][0] = 0.0; + stochReynStress[1][1] = 0.0; + stochReynStress[2][2] = 0.0; + stochReynStress[0][1] = - Cmag * density * tke * max(-stochLim, min(stochLim, rndVec[2])); + stochReynStress[0][2] = + Cmag * density * tke * max(-stochLim, min(stochLim, rndVec[1])); + stochReynStress[1][2] = - Cmag * density * tke * max(-stochLim, min(stochLim, rndVec[0])); + stochReynStress[1][0] = - stochReynStress[0][1]; + stochReynStress[2][0] = - stochReynStress[0][2]; + stochReynStress[2][1] = - stochReynStress[1][2]; + + } + + /*! + * \brief Compute relaxation factor for stochastic source term in momentum equations (Stochastic Backscatter Model). + * \param[in] config - Definition of the particular problem. + * \param[out] intensityCoeff - Relaxation factor for backscatter intensity. + */ + inline su2double ComputeStochRelaxFactor(const CConfig* config) { + + su2double SBS_Cmag = config->GetSBSParam().SBS_Cmag; + su2double intensityCoeff = SBS_Cmag; + su2double SBS_RelaxFactor = config->GetSBSParam().stochSourceRelax; + if (SBS_RelaxFactor > 0.0) { + su2double FS_Vel = config->GetModVel_FreeStream(); + su2double ReynoldsLength = config->GetLength_Reynolds(); + su2double timeScale = ReynoldsLength / FS_Vel; + unsigned long timeIter = config->GetTimeIter(); + unsigned long restartIter = config->GetRestart_Iter(); + su2double timeStep = config->GetTime_Step(); + su2double currentTime = (timeIter - restartIter) * timeStep; + intensityCoeff = SBS_Cmag * (1.0 - exp(- currentTime / (timeScale*SBS_RelaxFactor))); + } + return intensityCoeff; + + } /*! * \brief Project average gradient onto normal (with or w/o correction) for viscous fluxes of scalar quantities. @@ -838,6 +904,37 @@ class CNumerics { turb_ke_j = val_turb_ke_j; } + /*! + * \brief Set the stochastic variables from Langevin equations (Stochastic Backscatter Model). + * \param[in] val_stochvar_i - Value of the stochastic variable at point i. + * \param[in] val_stochvar_j - Value of the stochastic variable at point j. + * \param[in] iDim - Index of Langevin equation. + */ + inline void SetStochVar(unsigned short iDim, su2double val_stochvar_i, su2double val_stochvar_j) { + stochVar_i[iDim] = val_stochvar_i; + stochVar_j[iDim] = val_stochvar_j; + } + + /*! + * \brief Set the sensor to locate the box where the Stochastic Backscatter Model is active. + * \param[in] val_sbsInBox_i - 1 if point i lies inside the box where the model is active. + * \param[in] val_sbsInBox_j - 1 if point j lies inside the box where the model is active. + */ + inline void SetSbsInBoxSensor(unsigned short val_sbsInBox_i, unsigned short val_sbsInBox_j) { + sbsInBox_i = val_sbsInBox_i; + sbsInBox_j = val_sbsInBox_j; + } + + /*! + * \brief Set the LES sensor for hybrid RANS-LES methods. + * \param[in] val_lesMode_i - Value of the LES sensor at point i. + * \param[in] val_lesMode_j - Value of the LES sensor at point j. + */ + inline void SetLES_Mode(su2double val_lesMode_i, su2double val_lesMode_j) { + lesMode_i = val_lesMode_i; + lesMode_j = val_lesMode_j; + } + /*! * \brief Set the value of the distance from the nearest wall. * \param[in] val_dist_i - Value of of the distance from point i to the nearest wall. @@ -848,6 +945,15 @@ class CNumerics { dist_j = val_dist_j; } + /*! + * \brief Set the stochastic source term for the Langevin equations (Backscatter Model). + * \param[in] val_stoch_source - Value of stochastic source term. + * \param[in] iDim - Index of Langevin equation. + */ + void SetStochSource(su2double val_stoch_source, unsigned short iDim) { + stochSource[iDim] = val_stoch_source; + } + /*! * \brief Set the value of the roughness from the nearest wall. * \param[in] val_dist_i - Value of of the roughness of the nearest wall from point i diff --git a/SU2_CFD/include/numerics/flow/flow_diffusion.hpp b/SU2_CFD/include/numerics/flow/flow_diffusion.hpp index 01d5342abb42..8dee5dc46e6b 100644 --- a/SU2_CFD/include/numerics/flow/flow_diffusion.hpp +++ b/SU2_CFD/include/numerics/flow/flow_diffusion.hpp @@ -61,6 +61,7 @@ class CAvgGrad_Base : public CNumerics { Mean_Cp, /*!< \brief Mean value of the specific heat capacity at constant pressure. */ Mean_turb_ke, /*!< \brief Mean value of the turbulent kinetic energy. */ Mean_TauWall, /*!< \brief Mean wall shear stress (wall functions). */ + Mean_StochVar[3] = {0.0}, /*!< \brief Mean stochastic variables (Stochastic Backscatter Model). */ TauWall_i, TauWall_j, /*!< \brief Wall shear stress at point i and j (wall functions). */ dist_ij_2, /*!< \brief Length of the edge and face, squared */ Edge_Vector[MAXNDIM] = {0.0}; /*!< \brief Vector from point i to point j. */ @@ -199,12 +200,20 @@ class CAvgGrad_Base : public CNumerics { * \param[in] val_turb_ke - Turbulent kinetic energy * \param[in] val_laminar_viscosity - Laminar viscosity. * \param[in] val_eddy_viscosity - Eddy viscosity. + * \param[in] config - Definition of the particular problem. */ void SetStressTensor(const su2double *val_primvar, const su2double* const *val_gradprimvar, su2double val_turb_ke, su2double val_laminar_viscosity, - su2double val_eddy_viscosity); + su2double val_eddy_viscosity, + const CConfig* config); + + /*! + * \brief Calculate the stochastic contribution to the subgrid stress tensor (Stochastic Backscatter Model) + * \param[in] config - Definition of the particular problem. + */ + void SetStochReynStress(const CConfig* config); /*! * \brief Get a component of the viscous stress tensor. diff --git a/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp b/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp index a2942fc72999..44256ad04058 100644 --- a/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp +++ b/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp @@ -64,7 +64,7 @@ class CAvgGrad_Scalar : public CNumerics { const FlowIndices idx; /*!< \brief Object to manage the access to the flow primitives. */ su2double Proj_Mean_GradScalarVar[MAXNVAR]; /*!< \brief Mean_gradScalarVar DOT normal, corrected if required. */ su2double proj_vector_ij = 0.0; /*!< \brief (Edge_Vector DOT normal)/|Edge_Vector|^2 */ - su2double Flux[MAXNVAR]; /*!< \brief Final result, diffusive flux/residual. */ + su2double Flux[MAXNVAR] = {0.0}; /*!< \brief Final result, diffusive flux/residual. */ su2double* Jacobian_i[MAXNVAR]; /*!< \brief Flux Jacobian w.r.t. node i. */ su2double* Jacobian_j[MAXNVAR]; /*!< \brief Flux Jacobian w.r.t. node j. */ su2double JacobianBuffer[2*MAXNVAR*MAXNVAR];/*!< \brief Static storage for the two Jacobians. */ diff --git a/SU2_CFD/include/numerics/turbulent/turb_convection.hpp b/SU2_CFD/include/numerics/turbulent/turb_convection.hpp index 5e401210734a..a384b652a8f3 100644 --- a/SU2_CFD/include/numerics/turbulent/turb_convection.hpp +++ b/SU2_CFD/include/numerics/turbulent/turb_convection.hpp @@ -48,6 +48,10 @@ class CUpwSca_TurbSA final : public CUpwScalar { using Base::ScalarVar_i; using Base::ScalarVar_j; using Base::bounded_scalar; + using Base::V_i; + using Base::V_j; + using Base::idx; + using Base::nVar; /*! * \brief Adds any extra variables to AD. @@ -59,6 +63,13 @@ class CUpwSca_TurbSA final : public CUpwScalar { * \param[in] config - Definition of the particular problem. */ void FinishResidualCalc(const CConfig* config) override { + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + for (unsigned short iVar = 1; iVar < nVar; iVar++) { + Flux[iVar] = (a0 + a1) * 0.5 * (ScalarVar_i[iVar] + ScalarVar_j[iVar]); + Jacobian_i[iVar][iVar] = 0.5 * (a0+a1); + Jacobian_j[iVar][iVar] = 0.5 * (a0+a1); + } + } Flux[0] = a0*ScalarVar_i[0] + a1*ScalarVar_j[0]; Jacobian_i[0][0] = a0; Jacobian_j[0][0] = a1; diff --git a/SU2_CFD/include/numerics/turbulent/turb_sources.hpp b/SU2_CFD/include/numerics/turbulent/turb_sources.hpp index a5217a081df3..33f7e046afc5 100644 --- a/SU2_CFD/include/numerics/turbulent/turb_sources.hpp +++ b/SU2_CFD/include/numerics/turbulent/turb_sources.hpp @@ -72,8 +72,8 @@ class CSourceBase_TurbSA : public CNumerics { protected: /*--- Residual and Jacobian ---*/ - su2double Residual, *Jacobian_i; - su2double Jacobian_Buffer; /*!< \brief Static storage for the Jacobian (which needs to be pointer for return type). */ + su2double Residual[4], *Jacobian_i[4]; /*!< \brief Increase the size of residual and Jacobian for Langevin equations (Stochastic Backscatter Model).*/ + su2double Jacobian_Buffer[16]; /*!< \brief Static storage for the Jacobian (which needs to be pointer for return type). */ const FlowIndices idx; /*!< \brief Object to manage the access to the flow primitives. */ const SA_ParsedOptions options; /*!< \brief Struct with SA options. */ @@ -109,7 +109,79 @@ class CSourceBase_TurbSA : public CNumerics { /* Diffusion source term */ const su2double dv_axi = (1.0/sigma)*nu_e*ScalarVar_Grad_i[0][1]; - Residual += yinv * dv_axi * Volume; + Residual[0] += yinv * dv_axi * Volume; + } + + /*! + * \brief Include source-term residuals for Langevin equations (Stochastic Backscatter Model) + */ + inline void ResidualStochEquations(su2double timeStep, const su2double ct, + su2double lengthScale, su2double DES_const, + const CSAVariables& var, TIME_MARCHING time_marching, + su2double threshold) { + + const su2double& nue = ScalarVar_i[0]; + const su2double nut = max(nue*var.fv1, 1e-10); + const su2double delta = lengthScale/DES_const; + + if (delta > 1e-10) { + + su2double tTurb = ct*pow(delta, 2)/nut; + su2double tRat = timeStep / tTurb; + + su2double corrFac = 1.0; + if (time_marching == TIME_MARCHING::DT_STEPPING_2ND) { + corrFac = sqrt(0.5*(1.0+tRat)*(4.0+tRat)/(2.0+tRat)); + } else if (time_marching == TIME_MARCHING::DT_STEPPING_1ST) { + corrFac = sqrt(1.0+0.5*tRat); + } + + su2double scaleFactor = 0.0; + if (lesMode_i > threshold) + scaleFactor = 1.0/tTurb * sqrt(2.0/tRat) * corrFac; + else + tTurb = min(tTurb, 10.0*timeStep); + + for (unsigned short iVar = 1; iVar < nVar; iVar++) { + Residual[iVar] = scaleFactor * stochSource[iVar-1] - 1.0/tTurb * ScalarVar_i[iVar]; + Residual[iVar] *= Volume; + } + + for (unsigned short iVar = 1; iVar < nVar; iVar++ ) + Jacobian_i[iVar][iVar] = -1.0/tTurb * Volume; + + } + + } + + /*! + * \brief Include stochastic source term in the Spalart-Allmaras turbulence model equation (Stochastic Backscatter Model). + */ + inline void AddStochSource(const CConfig* config, CSAVariables& var, su2double& prod) { + + su2double Cmag = ComputeStochRelaxFactor(config); + su2double threshold = config->GetSBSParam().stochFdThreshold; + + su2double nut = ScalarVar_i[0] * var.fv1; + su2double tke = 0.0; + const su2double limiter = 5.0; + if (lesMode_i > threshold) tke = pow(nut/dist_i, 2); + + su2double R12 = - Cmag * tke * ScalarVar_i[3]; + su2double R13 = + Cmag * tke * ScalarVar_i[2]; + su2double R23 = - Cmag * tke * ScalarVar_i[1]; + + su2double RGradU = R12*Vorticity_i[2] - R13*Vorticity_i[1] + R23*Vorticity_i[0]; + + su2double Ji_3 = pow(var.Ji, 3); + su2double Dfv1Dnut = 3.0 * var.fv1 * var.cv1_3 / (var.cv1_3 + Ji_3); + su2double fac = 1.0 / (var.fv1 + ScalarVar_i[0]*Dfv1Dnut); + su2double stochProdNut = RGradU * dist_i*dist_i/(2.0*ScalarVar_i[0]) * fac; + stochProdNut *= sbsInBox_i; + stochProdNut = max(-limiter*prod, min(limiter*prod, stochProdNut)); + + prod += stochProdNut; + } public: @@ -119,17 +191,18 @@ class CSourceBase_TurbSA : public CNumerics { * \param[in] config - Definition of the particular problem. */ CSourceBase_TurbSA(unsigned short nDim, const CConfig* config) - : CNumerics(nDim, 1, config), + : CNumerics(nDim, (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) ? 4 : 1, config), idx(nDim, config->GetnSpecies()), options(config->GetSAParsedOptions()), axisymmetric(config->GetAxisymmetric()), transition_LM(config->GetKind_Trans_Model() == TURB_TRANS_MODEL::LM) { /*--- Setup the Jacobian pointer, we need to return su2double** but we know * the Jacobian is 1x1 so we use this trick to avoid heap allocation. ---*/ - Jacobian_i = &Jacobian_Buffer; + /*--- Setup the Jacobian pointer (size increased for Stochastic Backscatter Model). ---*/ + for (unsigned short iVar = 0; iVar < 4; iVar++) + Jacobian_i[iVar] = Jacobian_Buffer + 4*iVar; } - /*! * \brief Residual for source term integration. * \param[in] config - Definition of the particular problem. @@ -140,16 +213,22 @@ class CSourceBase_TurbSA : public CNumerics { const auto& laminar_viscosity = V_i[idx.LaminarViscosity()]; AD::StartPreacc(); - AD::SetPreaccIn(density, laminar_viscosity, StrainMag_i, ScalarVar_i[0], Volume, dist_i, roughness_i); + AD::SetPreaccIn(density, laminar_viscosity, StrainMag_i, Volume, dist_i, roughness_i); + AD::SetPreaccIn(ScalarVar_i, nVar); AD::SetPreaccIn(Vorticity_i, 3); AD::SetPreaccIn(PrimVar_Grad_i + idx.Velocity(), nDim, nDim); - AD::SetPreaccIn(ScalarVar_Grad_i[0], nDim); + AD::SetPreaccIn(ScalarVar_Grad_i, nVar, nDim); + AD::SetPreaccIn(stochSource, 3); /*--- Common auxiliary variables and constants of the model. ---*/ CSAVariables var; - Residual = 0.0; - Jacobian_i[0] = 0.0; + for (unsigned short iVar = 0; iVar < 4; iVar++) { + Residual[iVar] = 0.0; + for (unsigned short jVar = 0; jVar < 4; jVar++) { + Jacobian_i[iVar][jVar] = 0.0; + } + } if (dist_i > 1e-10) { @@ -167,13 +246,23 @@ class CSourceBase_TurbSA : public CNumerics { const su2double Ji_2 = pow(var.Ji, 2); const su2double Ji_3 = Ji_2 * var.Ji; - var.fv1 = Ji_3 / (Ji_3 + var.cv1_3); - var.d_fv1 = 3 * Ji_2 * var.cv1_3 / (nu * pow(Ji_3 + var.cv1_3, 2)); + if (config->GetSBSParam().StochasticBackscatter && lesMode_i > config->GetSBSParam().stochFdThreshold) { + var.fv1 = 1.0; + var.d_fv1 = 0.0; + } else { + var.fv1 = Ji_3 / (Ji_3 + var.cv1_3); + var.d_fv1 = 3 * Ji_2 * var.cv1_3 / (nu * pow(Ji_3 + var.cv1_3, 2)); + } /*--- Using a modified relation so as to not change the Shat that depends on fv2. * From NASA turb modeling resource and 2003 paper. ---*/ - var.fv2 = 1 - ScalarVar_i[0] / (nu + ScalarVar_i[0] * var.fv1); - var.d_fv2 = -(1 / nu - Ji_2 * var.d_fv1) / pow(1 + var.Ji * var.fv1, 2); + if (config->GetSBSParam().StochasticBackscatter && lesMode_i > config->GetSBSParam().stochFdThreshold) { + var.fv2 = 0.0; + var.d_fv2 = 0.0; + } else { + var.fv2 = 1 - ScalarVar_i[0] / (nu + ScalarVar_i[0] * var.fv1); + var.d_fv2 = -(1 / nu - Ji_2 * var.d_fv1) / pow(1 + var.Ji * var.fv1, 2); + } /*--- Evaluate Omega with a rotational correction term. ---*/ @@ -197,13 +286,17 @@ class CSourceBase_TurbSA : public CNumerics { /*--- Compute auxiliary function r ---*/ rFunc::get(ScalarVar_i[0], var); - var.g = var.r + var.cw2 * (pow(var.r, 6) - var.r); - var.g_6 = pow(var.g, 6); - var.glim = pow((1 + var.cw3_6) / (var.g_6 + var.cw3_6), 1.0 / 6.0); - var.fw = var.g * var.glim; - - var.d_g = var.d_r * (1 + var.cw2 * (6 * pow(var.r, 5) - 1)); - var.d_fw = var.d_g * var.glim * (1 - var.g_6 / (var.g_6 + var.cw3_6)); + if (config->GetSBSParam().StochasticBackscatter && lesMode_i > config->GetSBSParam().stochFdThreshold) { + var.fw = 0.0; + var.d_fw = 0.0; + } else { + var.g = var.r + var.cw2 * (pow(var.r, 6) - var.r); + var.g_6 = pow(var.g, 6); + var.glim = pow((1 + var.cw3_6) / (var.g_6 + var.cw3_6), 1.0 / 6.0); + var.fw = var.g * var.glim; + var.d_g = var.d_r * (1 + var.cw2 * (6 * pow(var.r, 5) - 1)); + var.d_fw = var.d_g * var.glim * (1 - var.g_6 / (var.g_6 + var.cw3_6)); + } var.norm2_Grad = GeometryToolbox::SquaredNorm(nDim, ScalarVar_Grad_i[0]); @@ -245,19 +338,30 @@ class CSourceBase_TurbSA : public CNumerics { /*--- Compute production, destruction and jacobian ---*/ su2double Production = 0.0, Destruction = 0.0; - SourceTerms::get(ScalarVar_i[0], var, Production, Destruction, Jacobian_i[0]); + SourceTerms::get(ScalarVar_i[0], var, Production, Destruction, Jacobian_i[0][0]); - Residual = (Production - Destruction) * Volume; + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().stochSourceNu) + AddStochSource(config, var, Production); + + Residual[0] = (Production - Destruction) * Volume; if (axisymmetric) ResidualAxisymmetricDiffusion(var.sigma); - Jacobian_i[0] *= Volume; + Jacobian_i[0][0] *= Volume; + + /*--- Compute residual for Langevin equations (Stochastic Backscatter Model). ---*/ + + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + const su2double DES_const = config->GetConst_DES(); + ResidualStochEquations(config->GetDelta_UnstTime(), config->GetSBSParam().SBS_Ctau, dist_i, DES_const, + var, config->GetTime_Marching(), config->GetSBSParam().stochFdThreshold); + } } - AD::SetPreaccOut(Residual); + AD::SetPreaccOut(Residual, 4); AD::EndPreacc(); - return ResidualType<>(&Residual, &Jacobian_i, nullptr); + return ResidualType<>(Residual, Jacobian_i, nullptr); } }; @@ -553,14 +657,14 @@ class CCompressibilityCorrection final : public ParentClass { const su2double d_axiCorrection = 2.0 * c5 * nue * pow(v * yinv / sound_speed, 2) * Volume; const su2double axiCorrection = 0.5 * nue * d_axiCorrection; - this->Residual -= axiCorrection; - this->Jacobian_i[0] -= d_axiCorrection; + this->Residual[0] -= axiCorrection; + this->Jacobian_i[0][0] -= d_axiCorrection; } - this->Residual -= CompCorrection; - this->Jacobian_i[0] -= d_CompCorrection; + this->Residual[0] -= CompCorrection; + this->Jacobian_i[0][0] -= d_CompCorrection; - return ResidualType(&this->Residual, &this->Jacobian_i, nullptr); + return ResidualType(this->Residual, this->Jacobian_i, nullptr); } }; diff --git a/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp b/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp index 5da61a28279c..68afef986934 100644 --- a/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp +++ b/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp @@ -74,6 +74,7 @@ CNumericsSIMD* createCenteredNumerics(const CConfig& config, int iMesh, const CV obj = new CLaxScheme(config, iMesh, turbVars); break; case CENTERED::JST: + case CENTERED::LD2: // Just to silence compiler warnings (LD2 implemented in the incompressible solver only). obj = new CJSTScheme(config, iMesh, turbVars); break; case CENTERED::JST_KE: diff --git a/SU2_CFD/include/output/CFlowOutput.hpp b/SU2_CFD/include/output/CFlowOutput.hpp index 6a9984a6f0a9..eec5fb365186 100644 --- a/SU2_CFD/include/output/CFlowOutput.hpp +++ b/SU2_CFD/include/output/CFlowOutput.hpp @@ -337,19 +337,53 @@ class CFlowOutput : public CFVMOutput{ /*! * \brief Set the time averaged output fields. + * \param[in] config - Definition of the particular problem per zone. */ - void SetTimeAveragedFields(); + void SetTimeAveragedFields(const CConfig *config); /*! * \brief Load the time averaged output fields. * \param iPoint * \param node_flow + * \param node_turb + * \param config - Definition of the particular problem per zone. */ - void LoadTimeAveragedData(unsigned long iPoint, const CVariable *node_flow); + void LoadTimeAveragedData(unsigned long iPoint, const CVariable *node_flow, const CVariable *node_turb, const CConfig *config); /*! * \brief Write additional output for fixed CL mode. * \param[in] config - Definition of the particular problem per zone. */ void SetFixedCLScreenOutput(const CConfig *config); + + /*! + * \brief Compute the ratio of the stochastic energy backscatter to the turbulent energy dissipation. + * \param iPoint - Index of the point. + * \param config - Definition of the particular problem. + * \param node_flow - Flow solver solution. + * \param node_turb - Turbulence-model solver solution. + * \return Stochastic energy backscatter ratio. + */ + inline su2double GetEnergyBackscatterRatio(unsigned long iPoint, const CConfig *config, const CVariable *node_flow, const CVariable *node_turb) { + const su2double rho = node_flow->GetDensity(iPoint); + const su2double nu_t = node_flow->GetEddyViscosity(iPoint) / rho; + const su2double DES_lengthscale = max(node_flow->GetDES_LengthScale(iPoint), 1e-10); + const su2double lesSensor = node_flow->GetLES_Mode(iPoint); + const su2double mag = config->GetSBSParam().SBS_Cmag; + const su2double threshold = config->GetSBSParam().stochFdThreshold; + su2double strainMag = node_flow->GetStrainMag(iPoint); + su2double tke_estim = 0.0; + if (lesSensor > threshold) tke_estim = pow(nu_t/DES_lengthscale, 2); + const su2double csi_x = node_turb->GetSolution(iPoint, 1); + const su2double csi_y = node_turb->GetSolution(iPoint, 2); + const su2double csi_z = node_turb->GetSolution(iPoint, 3); + const su2double R_xy = - mag * tke_estim * csi_z; + const su2double R_xz = + mag * tke_estim * csi_y; + const su2double R_yz = - mag * tke_estim * csi_x; + const su2double energy_res_to_mod = nu_t * strainMag * strainMag; + const auto vorticity = node_flow->GetVorticity(iPoint); + const su2double energy_backscatter = R_xy*vorticity[2] - R_xz*vorticity[1] + R_yz*vorticity[0]; + const su2double energy_backscatter_ratio = energy_backscatter / (energy_res_to_mod + 1e-10); + return energy_backscatter_ratio; + } }; diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index 605e281470bd..11a57e92d864 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -451,11 +451,12 @@ void CFVMFlowSolverBase::Viscous_Residual_impl(unsigned long iEdge, CGeome const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool tkeNeeded = (config->GetKind_Turb_Model() == TURB_MODEL::SST); + const bool backscatter = config->GetSBSParam().StochasticBackscatter; const bool ideal_gas = (config->GetKind_FluidModel() == STANDARD_AIR) || (config->GetKind_FluidModel() == IDEAL_GAS); CVariable* turbNodes = nullptr; - if (tkeNeeded) turbNodes = solver_container[TURB_SOL]->GetNodes(); + if (tkeNeeded || backscatter) turbNodes = solver_container[TURB_SOL]->GetNodes(); /*--- Points, coordinates and normal vector in edge ---*/ @@ -486,6 +487,26 @@ void CFVMFlowSolverBase::Viscous_Residual_impl(unsigned long iEdge, CGeome numerics->SetTurbKineticEnergy(turbNodes->GetSolution(iPoint,0), turbNodes->GetSolution(jPoint,0)); + /*--- Stochastic variables from Langevin equations (Stochastic Backscatter Model). ---*/ + + if (backscatter) { + if (config->GetSBSParam().SBS_Ctau > 0.0) { + for (unsigned short iDim = 0; iDim < nDim; iDim++) + numerics->SetStochVar(iDim, turbNodes->GetSolution(iPoint, iDim+1), + turbNodes->GetSolution(jPoint, iDim+1)); + } else { + for (unsigned short iDim = 0; iDim < nDim; iDim++) + numerics->SetStochVar(iDim, turbNodes->GetLangevinSourceTerms(iPoint, iDim), + turbNodes->GetLangevinSourceTerms(jPoint, iDim)); + } + su2double DES_length_i = max(turbNodes->GetDES_LengthScale(iPoint), 1e-10); + su2double DES_length_j = max(turbNodes->GetDES_LengthScale(jPoint), 1e-10); + su2double lesMode_i = turbNodes->GetLES_Mode(iPoint); + su2double lesMode_j = turbNodes->GetLES_Mode(jPoint); + numerics->SetDistance(DES_length_i, DES_length_j); + numerics->SetLES_Mode(lesMode_i, lesMode_j); + } + /*--- Wall shear stress values (wall functions) ---*/ numerics->SetTau_Wall(nodes->GetTau_Wall(iPoint), diff --git a/SU2_CFD/include/solvers/CTurbSASolver.hpp b/SU2_CFD/include/solvers/CTurbSASolver.hpp index d4ebe49c8dab..b95b9f16a728 100644 --- a/SU2_CFD/include/solvers/CTurbSASolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSASolver.hpp @@ -39,7 +39,9 @@ class CTurbSASolver final : public CTurbSolver { private: - su2double nu_tilde_Engine, nu_tilde_ActDisk; + + su2double nu_tilde_Engine[4] = {0.0}; + su2double nu_tilde_ActDisk[4] = {0.0}; /*! * \brief A virtual member. @@ -51,6 +53,27 @@ class CTurbSASolver final : public CTurbSolver { CGeometry *geometry, CConfig *config); + /*! + * \brief Mark the points that are located inside the box where the Stochastic Backscatter Model is active. + * \param[in] config - Definition of the particular problem. + * \param[in] geometry - Geometrical definition. + */ + void SetBackscatterInBox(CConfig *config, CGeometry* geometry); + + /*! + * \brief Update the source terms of the stochastic equations (Stochastic Backscatter Model). + * \param[in] config - Definition of the particular problem. + * \param[in] geometry - Geometrical definition. + */ + void SetLangevinSourceTerms(CConfig *config, CGeometry* geometry); + + /*! + * \brief Apply Laplacian smoothing to the source terms in Langevin equations (Stochastic Backscatter Model). + * \param[in] config - Definition of the particular problem. + * \param[in] geometry - Geometrical definition. + */ + void SmoothLangevinSourceTerms(CConfig* config, CGeometry* geometry); + /*! * \brief Compute nu tilde from the wall functions. * \param[in] geometry - Geometrical definition of the problem. diff --git a/SU2_CFD/include/variables/CFlowVariable.hpp b/SU2_CFD/include/variables/CFlowVariable.hpp index 323bb57f2fa8..ab2a8499492f 100644 --- a/SU2_CFD/include/variables/CFlowVariable.hpp +++ b/SU2_CFD/include/variables/CFlowVariable.hpp @@ -263,7 +263,7 @@ class CFlowVariable : public CVariable { * \param[in] iPoint - Point index. * \return Value of magnitude. */ - inline su2double GetStrainMag(unsigned long iPoint) const { return StrainMag(iPoint); } + inline su2double GetStrainMag(unsigned long iPoint) const final { return StrainMag(iPoint); } /*! * \brief Get the entire vector of the rate of strain magnitude. diff --git a/SU2_CFD/include/variables/CIncNSVariable.hpp b/SU2_CFD/include/variables/CIncNSVariable.hpp index 7dd082cdca28..5aa1ebaa75e9 100644 --- a/SU2_CFD/include/variables/CIncNSVariable.hpp +++ b/SU2_CFD/include/variables/CIncNSVariable.hpp @@ -39,7 +39,8 @@ class CIncNSVariable final : public CIncEulerVariable { private: VectorType Tau_Wall; /*!< \brief Magnitude of the wall shear stress from a wall function. */ - VectorType DES_LengthScale; + VectorType DES_LengthScale; /*!< \brief DES Length Scale. */ + VectorType lesMode; /*!< \brief Sensor for local simulation mode (0=RANS, 1=LES).*/ const bool Energy; /*!< \brief Flag for Energy equation in incompressible flows. */ public: @@ -133,4 +134,17 @@ class CIncNSVariable final : public CIncEulerVariable { */ inline su2double GetDES_LengthScale(unsigned long iPoint) const override { return DES_LengthScale(iPoint); } + /*! + * \brief Set the LES sensor. + */ + inline void SetLES_Mode(unsigned long iPoint, su2double val_les_mode) override { + lesMode(iPoint) = val_les_mode; + } + + /*! + * \brief Get the LES sensor. + * \return Value of the LES sensor. + */ + inline su2double GetLES_Mode(unsigned long iPoint) const override { return lesMode(iPoint); } + }; diff --git a/SU2_CFD/include/variables/CNEMONSVariable.hpp b/SU2_CFD/include/variables/CNEMONSVariable.hpp index 9ec9e0fd00fd..4585c1c6b9b6 100644 --- a/SU2_CFD/include/variables/CNEMONSVariable.hpp +++ b/SU2_CFD/include/variables/CNEMONSVariable.hpp @@ -52,6 +52,7 @@ class CNEMONSVariable final : public CNEMOEulerVariable { VectorType Tau_Wall; /*!< \brief Magnitude of the wall shear stress from a wall function. */ VectorType DES_LengthScale; /*!< \brief DES Length Scale. */ + VectorType lesMode; /*!< \brief Sensor for local simulation mode (0=RANS, 1=LES). */ VectorType Roe_Dissipation; /*!< \brief Roe low dissipation coefficient. */ VectorType Vortex_Tilting; /*!< \brief Value of the vortex tilting variable for DES length scale computation. */ diff --git a/SU2_CFD/include/variables/CNSVariable.hpp b/SU2_CFD/include/variables/CNSVariable.hpp index ea8b263fd98d..9c3ab8dabf50 100644 --- a/SU2_CFD/include/variables/CNSVariable.hpp +++ b/SU2_CFD/include/variables/CNSVariable.hpp @@ -41,6 +41,7 @@ class CNSVariable final : public CEulerVariable { VectorType Tau_Wall; /*!< \brief Magnitude of the wall shear stress from a wall function. */ VectorType DES_LengthScale; /*!< \brief DES Length Scale. */ + VectorType lesMode; /*!< \brief Sensor for local simulation mode (0=RANS, 1=LES).*/ VectorType Roe_Dissipation; /*!< \brief Roe low dissipation coefficient. */ VectorType Vortex_Tilting; /*!< \brief Value of the vortex tilting variable for DES length scale computation. */ @@ -185,6 +186,19 @@ class CNSVariable final : public CEulerVariable { DES_LengthScale(iPoint) = val_des_lengthscale; } +/*! + * \brief Set the LES sensor. + */ + inline void SetLES_Mode(unsigned long iPoint, su2double val_les_mode) override { + lesMode(iPoint) = val_les_mode; + } + + /*! + * \brief Get the LES sensor. + * \return Value of the LES sensor. + */ + inline su2double GetLES_Mode(unsigned long iPoint) const override { return lesMode(iPoint); } + /*! * \brief Set the new solution for Roe Dissipation. * \param[in] val_delta - A scalar measure of the grid size diff --git a/SU2_CFD/include/variables/CTurbSAVariable.hpp b/SU2_CFD/include/variables/CTurbSAVariable.hpp index 3f55883ce9ca..20c073d41d8e 100644 --- a/SU2_CFD/include/variables/CTurbSAVariable.hpp +++ b/SU2_CFD/include/variables/CTurbSAVariable.hpp @@ -40,7 +40,12 @@ class CTurbSAVariable final : public CTurbVariable { private: VectorType DES_LengthScale; + VectorType lesMode; + su2vector sbsInBox; + MatrixType stochSource; + MatrixType stochSourceOld; VectorType Vortex_Tilting; + VectorType besselIntegral; public: /*! @@ -73,6 +78,63 @@ class CTurbSAVariable final : public CTurbVariable { */ inline void SetDES_LengthScale(unsigned long iPoint, su2double val_des_lengthscale) override { DES_LengthScale(iPoint) = val_des_lengthscale; } + /*! + * \brief Get the source terms for the stochastic equations. + * \param[in] iPoint - Point index. + * \param[in] iDim - Dimension index. + * \return Value of the source term for the stochastic equations. + */ + inline su2double GetLangevinSourceTerms(unsigned long iPoint, unsigned short iDim) const override { return stochSource(iPoint, iDim); } + + /*! + * \brief Set the source terms for the stochastic equations. + * \param[in] iPoint - Point index. + * \param[in] iDim - Dimension index. + * \param[in] val_stochSource - Value of the source term for the stochastic equations. + */ + inline void SetLangevinSourceTerms(unsigned long iPoint, unsigned short iDim, su2double val_stochSource) override { stochSource(iPoint, iDim) = val_stochSource; } + + /*! + * \brief Get the old value of the source terms for the stochastic equations. + * \param[in] iPoint - Point index. + * \param[in] iDim - Dimension index. + * \return Old value of the source terms for the stochastic equations. + */ + inline su2double GetLangevinSourceTermsOld(unsigned long iPoint, unsigned short iDim) const override { return stochSourceOld(iPoint, iDim); } + + /*! + * \brief Set the old value of source terms for the stochastic equations. + * \param[in] iPoint - Point index. + * \param[in] iDim - Dimension index. + * \param[in] val_stochSource_old - Old value of the source term for the stochastic equations. + */ + inline void SetLangevinSourceTermsOld(unsigned long iPoint, unsigned short iDim, su2double val_stochSource_old) override { stochSourceOld(iPoint, iDim) = val_stochSource_old; } + + /*! + * \brief Get if the Stochastic Backscatter Model must be applied only in a confined box. + * \param[in] iPoint - Point index. + * \return 1.0 if the Stochastic Backscatter Model must be applied only in a confined box. + */ + inline int8_t GetSbsInBox(unsigned long iPoint) const override { return sbsInBox(iPoint); } + + /*! + * \brief Set if the Stochastic Backscatter Model must be applied only in a confined box. + * \param[in] iPoint - Point index. + * \param[in] val_sbsInBox - 1.0 if the Stochastic Backscatter Model must be applied only in a confined box. + */ + inline void SetSbsInBox(unsigned long iPoint, int8_t val_sbsInBox) override { sbsInBox(iPoint) = val_sbsInBox; } + + /*! + * \brief Set the LES sensor. + */ + inline void SetLES_Mode(unsigned long iPoint, su2double val_les_mode) override { lesMode(iPoint) = val_les_mode; } + + /*! + * \brief Get the LES sensor. + * \return Value of the LES sensor. + */ + inline su2double GetLES_Mode(unsigned long iPoint) const override { return lesMode(iPoint); } + /*! * \brief Set the vortex tilting measure for computation of the EDDES length scale * \param[in] iPoint - Point index. @@ -87,4 +149,17 @@ class CTurbSAVariable final : public CTurbVariable { */ inline su2double GetVortex_Tilting(unsigned long iPoint) const override { return Vortex_Tilting(iPoint); } + /*! + * \brief Set the integral of the product of three Bessel functions appearing in Laplacian smoothing. + * \param[in] iPoint - Point index. + * \param[in] val_integral - Value of the integral. + */ + inline void SetBesselIntegral(unsigned long iPoint, su2double val_integral) override { besselIntegral(iPoint) = val_integral; } + + /*! + * \brief Get the the integral of the product of three Bessel functions appearing in Laplacian smoothing. + * \return Value of the integral. + */ + inline su2double GetBesselIntegral(unsigned long iPoint) const override { return besselIntegral(iPoint); } + }; diff --git a/SU2_CFD/include/variables/CTurbVariable.hpp b/SU2_CFD/include/variables/CTurbVariable.hpp index b4e4ae569743..47424ffab8ce 100644 --- a/SU2_CFD/include/variables/CTurbVariable.hpp +++ b/SU2_CFD/include/variables/CTurbVariable.hpp @@ -40,7 +40,7 @@ class CTurbVariable : public CScalarVariable { VectorType muT; /*!< \brief Eddy viscosity. */ public: - static constexpr size_t MAXNVAR = 2; + static constexpr size_t MAXNVAR = 4; VectorType turb_index; VectorType intermittency; /*!< \brief Value of the intermittency for the trans. model. */ @@ -111,4 +111,32 @@ class CTurbVariable : public CScalarVariable { * \param[in] input - Boolean whether In- or Output should be registered. */ void RegisterEddyViscosity(bool input); + + /*! + * \brief A virtual member. + * \param[in] iPoint - Point index. + * \param[in] iDim - Dimension index. + */ + inline virtual su2double GetLangevinSourceTermsOld(unsigned long iPoint, unsigned short iDim) const { return 0.0; } + + /*! + * \brief A virtual member. + * \param[in] iPoint - Point index. + * \param[in] iDim - Dimension index. + * \param[in] val_stochSource_old - Old value of source term in Langevin equations. + */ + inline virtual void SetLangevinSourceTermsOld(unsigned long iPoint, unsigned short iDim, su2double val_stochSource_old) {} + + /*! + * \brief A virtual member. + * \param[in] iPoint - Point index. + */ + inline virtual int8_t GetSbsInBox(unsigned long iPoint) const { return 0; } + + /*! + * \brief A virtual member. + * \param[in] iPoint - Point index. + * \param[in] val_sbsInBox - 1.0 if the Stochastic Backscatter Model must be applied only in a confined box. + */ + inline virtual void SetSbsInBox(unsigned long iPoint, int8_t val_sbsInBox) {} }; diff --git a/SU2_CFD/include/variables/CVariable.hpp b/SU2_CFD/include/variables/CVariable.hpp index 89e391a3d2aa..f3a6bec8f66d 100644 --- a/SU2_CFD/include/variables/CVariable.hpp +++ b/SU2_CFD/include/variables/CVariable.hpp @@ -34,6 +34,7 @@ #include #include #include +#include #include "../../../Common/include/CConfig.hpp" #include "../../../Common/include/containers/container_decorators.hpp" @@ -395,6 +396,46 @@ class CVariable { */ inline virtual void SetDES_LengthScale(unsigned long iPoint, su2double val_des_lengthscale) {} + /*! + * \brief A virtual member. + * \param[in] iPoint - Point index. + */ + inline virtual su2double GetLES_Mode(unsigned long iPoint) const { return 0.0; } + + /*! + * \brief A virtual member. + * \param[in] iPoint - Point index. + * \param[in] val_les_mode - Value of the LES sensor. + */ + inline virtual void SetLES_Mode(unsigned long iPoint, su2double val_les_mode) {} + + /*! + * \brief A virtual member. + * \param[in] iPoint - Point index. + * \param[in] iDim - Dimension index. + */ + inline virtual su2double GetLangevinSourceTerms(unsigned long iPoint, unsigned short iDim) const { return 0.0; } + + /*! + * \brief A virtual member. + * \param[in] iPoint - Point index. + * \param[in] iDim - Dimension index. + * \param[in] val_stochSource - Source term in Langevin equations. + */ + inline virtual void SetLangevinSourceTerms(unsigned long iPoint, unsigned short iDim, su2double val_stochSource) {} + + /*! + * \brief A virtual member. + * \param[in] iPoint - Point index. + * \param[in] val_integral - Value of the integral. + */ + inline virtual void SetBesselIntegral(unsigned long iPoint, su2double val_integral) {} + + /*! + * \brief A virtual member. + */ + inline virtual su2double GetBesselIntegral(unsigned long iPoint) const { return 0.0; } + /*! * \brief A virtual member. * \param[in] iPoint - Point index. @@ -1168,6 +1209,13 @@ class CVariable { inline virtual su2double *GetVorticity(unsigned long iPoint) { return nullptr; } inline virtual const su2double *GetVorticity(unsigned long iPoint) const { return nullptr; } + /*! + * \brief A virtual member. + * \param[in] iPoint - Point index. + * \return Value of strain rate magnitude. + */ + inline virtual su2double GetStrainMag(unsigned long iPoint) const { return 0.0; } + /*! * \brief A virtual member. * \param[in] iPoint - Point index. diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index e87c02d94212..03683b6a4cba 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -1657,6 +1657,7 @@ void CDriver::InitializeNumerics(CConfig *config, CGeometry **geometry, CSolver /*--- Incompressible flow, use preconditioning method ---*/ switch (config->GetKind_Centered_Flow()) { case CENTERED::LAX : numerics[MESH_0][FLOW_SOL][conv_term] = new CCentLaxInc_Flow(nDim, nVar_Flow, config); break; + case CENTERED::LD2 : case CENTERED::JST : numerics[MESH_0][FLOW_SOL][conv_term] = new CCentJSTInc_Flow(nDim, nVar_Flow, config); break; default: SU2_MPI::Error("Invalid centered scheme or not implemented.\n Currently, only JST and LAX-FRIEDRICH are available for incompressible flows.", CURRENT_FUNCTION); diff --git a/SU2_CFD/src/numerics/flow/convection/centered.cpp b/SU2_CFD/src/numerics/flow/convection/centered.cpp index b1ec12d51119..68f491145818 100644 --- a/SU2_CFD/src/numerics/flow/convection/centered.cpp +++ b/SU2_CFD/src/numerics/flow/convection/centered.cpp @@ -311,6 +311,8 @@ CNumerics::ResidualType<> CCentJSTInc_Flow::ComputeResidual(const CConfig* confi su2double U_i[5] = {0.0}, U_j[5] = {0.0}; su2double ProjGridVel = 0.0; + bool LD2_Scheme = (config->GetKind_Centered_Flow() == CENTERED::LD2); + const su2double alpha_LD2 = 0.36; /*--- Primitive variables at point i and j ---*/ @@ -344,6 +346,21 @@ CNumerics::ResidualType<> CCentJSTInc_Flow::ComputeResidual(const CConfig* confi MeanCp = 0.5*(Cp_i + Cp_j); MeanTemperature = 0.5*(Temperature_i + Temperature_j); + if (LD2_Scheme) { + su2double d_ij[3] = {0.0}; + GeometryToolbox::Distance(nDim, Coord_j, Coord_i, d_ij); + su2double diffPresGrad[3] = {0.0}; + for (iDim = 0; iDim < nDim; iDim++) { + diffPresGrad[iDim] = PrimVar_Grad_i[0][iDim] - PrimVar_Grad_j[0][iDim]; + su2double diffVelGrad[3]; + for (unsigned short jDim = 0; jDim < nDim; jDim++) { + diffVelGrad[jDim] = PrimVar_Grad_i[iDim+1][jDim] - PrimVar_Grad_j[iDim+1][jDim]; + } + MeanVelocity[iDim] += 0.5 * alpha_LD2 * GeometryToolbox::DotProduct(nDim, diffVelGrad, d_ij); + } + MeanPressure += 0.5 * alpha_LD2 * GeometryToolbox::DotProduct(nDim, diffPresGrad, d_ij); + } + /*--- We need the derivative of the equation of state to build the preconditioning matrix. For now, the only option is the ideal gas law, but in the future, dRhodT should be in the fluid model. ---*/ diff --git a/SU2_CFD/src/numerics/flow/flow_diffusion.cpp b/SU2_CFD/src/numerics/flow/flow_diffusion.cpp index d6bc783ab928..9d687b4acb06 100644 --- a/SU2_CFD/src/numerics/flow/flow_diffusion.cpp +++ b/SU2_CFD/src/numerics/flow/flow_diffusion.cpp @@ -120,7 +120,8 @@ void CAvgGrad_Base::SetStressTensor(const su2double *val_primvar, const su2double* const *val_gradprimvar, const su2double val_turb_ke, const su2double val_laminar_viscosity, - const su2double val_eddy_viscosity) { + const su2double val_eddy_viscosity, + const CConfig* config) { const su2double Density = val_primvar[nDim+2]; @@ -140,6 +141,30 @@ void CAvgGrad_Base::SetStressTensor(const su2double *val_primvar, // turb_ke is not considered in the stress tensor, see #797 ComputeStressTensor(nDim, tau, val_gradprimvar+1, total_viscosity, Density, su2double(0.0)); } + + /* --- If the Stochastic Backscatter Model is active, add random contribution to stress tensor ---*/ + + if (config->GetSBSParam().StochasticBackscatter) { + for (unsigned short iDim = 0 ; iDim < nDim; iDim++) + for (unsigned short jDim = 0 ; jDim < nDim; jDim++) { + tau[iDim][jDim] += stochReynStress[iDim][jDim]; + } + } + +} + +void CAvgGrad_Base::SetStochReynStress(const CConfig* config) { + for (unsigned short iDim = 0; iDim < nDim; iDim++) + Mean_StochVar[iDim] = 0.5*(stochVar_i[iDim] + stochVar_j[iDim]); + su2double tkeEstim_i = 0.0, tkeEstim_j = 0.0; + if (max(lesMode_i, lesMode_j) > config->GetSBSParam().stochFdThreshold) { + tkeEstim_i = pow(Eddy_Viscosity_i/dist_i, 2); + tkeEstim_j = pow(Eddy_Viscosity_j/dist_j, 2); + } + su2double Mean_turb_ke_estim = 0.5*(tkeEstim_i + tkeEstim_j); + su2double intensityCoeff = ComputeStochRelaxFactor(config); + ComputeStochReynStress(Mean_PrimVar[nDim+2], Mean_turb_ke_estim, + Mean_StochVar, intensityCoeff, stochReynStress); } void CAvgGrad_Base::SetHeatFluxVector(const su2double* const* val_gradprimvar, const su2double val_eddy_viscosity, @@ -445,10 +470,14 @@ CNumerics::ResidualType<> CAvgGrad_Flow::ComputeResidual(const CConfig* config) Mean_turb_ke, MeanPerturbedRSM); } + /* --- If the Stochastic Backscatter Model is active, add random contribution to stress tensor ---*/ + + if (config->GetSBSParam().StochasticBackscatter) SetStochReynStress(config); + /*--- Get projected flux tensor (viscous residual) ---*/ SetStressTensor(Mean_PrimVar, Mean_GradPrimVar, Mean_turb_ke, - Mean_Laminar_Viscosity, Mean_Eddy_Viscosity); + Mean_Laminar_Viscosity, Mean_Eddy_Viscosity,config); if (config->GetSAParsedOptions().qcr2000) AddQCR(nDim, &Mean_GradPrimVar[1], tau); if (Mean_TauWall > 0) AddTauWall(UnitNormal, Mean_TauWall); @@ -619,9 +648,14 @@ CNumerics::ResidualType<> CAvgGradInc_Flow::ComputeResidual(const CConfig* confi Mean_turb_ke, MeanPerturbedRSM); } + /* --- If the Stochastic Backscatter Model is active, add random contribution to stress tensor ---*/ + + if (config->GetSBSParam().StochasticBackscatter) SetStochReynStress(config); + /*--- Get projected flux tensor (viscous residual) ---*/ + SetStressTensor(Mean_PrimVar, Mean_GradPrimVar, Mean_turb_ke, - Mean_Laminar_Viscosity, Mean_Eddy_Viscosity); + Mean_Laminar_Viscosity, Mean_Eddy_Viscosity,config); if (config->GetSAParsedOptions().qcr2000) AddQCR(nDim, &Mean_GradPrimVar[1], tau); if (Mean_TauWall > 0) AddTauWall(UnitNormal, Mean_TauWall); @@ -944,10 +978,14 @@ CNumerics::ResidualType<> CGeneralAvgGrad_Flow::ComputeResidual(const CConfig* c Mean_turb_ke, MeanPerturbedRSM); } + /* --- If the Stochastic Backscatter Model is active, add random contribution to stress tensor ---*/ + + if (config->GetSBSParam().StochasticBackscatter) SetStochReynStress(config); + /*--- Get projected flux tensor (viscous residual) ---*/ SetStressTensor(Mean_PrimVar, Mean_GradPrimVar, Mean_turb_ke, - Mean_Laminar_Viscosity, Mean_Eddy_Viscosity); + Mean_Laminar_Viscosity, Mean_Eddy_Viscosity,config); if (config->GetSAParsedOptions().qcr2000) AddQCR(nDim, &Mean_GradPrimVar[1], tau); if (Mean_TauWall > 0) AddTauWall(UnitNormal, Mean_TauWall); diff --git a/SU2_CFD/src/output/CFlowCompOutput.cpp b/SU2_CFD/src/output/CFlowCompOutput.cpp index 54a30d1b3a2b..55ee7c8bfedf 100644 --- a/SU2_CFD/src/output/CFlowCompOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompOutput.cpp @@ -308,13 +308,15 @@ void CFlowCompOutput::SetVolumeOutputFields(CConfig *config){ AddCommonFVMOutputs(config); if (config->GetTime_Domain()) { - SetTimeAveragedFields(); + SetTimeAveragedFields(config); } } void CFlowCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolver **solver, unsigned long iPoint){ const auto* Node_Flow = solver[FLOW_SOL]->GetNodes(); + const CVariable* Node_Turb = nullptr; + if (config->GetKind_Turb_Model() != TURB_MODEL::NONE) Node_Turb = solver[TURB_SOL]->GetNodes(); auto* Node_Geo = geometry->nodes; LoadCoordinates(Node_Geo->GetCoord(iPoint), iPoint); @@ -395,7 +397,7 @@ void CFlowCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolv LoadCommonFVMOutputs(config, geometry, iPoint); if (config->GetTime_Domain()) { - LoadTimeAveragedData(iPoint, Node_Flow); + LoadTimeAveragedData(iPoint, Node_Flow, Node_Turb, config); } } diff --git a/SU2_CFD/src/output/CFlowIncOutput.cpp b/SU2_CFD/src/output/CFlowIncOutput.cpp index b13edb7732fb..e91e038447e0 100644 --- a/SU2_CFD/src/output/CFlowIncOutput.cpp +++ b/SU2_CFD/src/output/CFlowIncOutput.cpp @@ -392,13 +392,15 @@ void CFlowIncOutput::SetVolumeOutputFields(CConfig *config){ AddCommonFVMOutputs(config); if (config->GetTime_Domain()) { - SetTimeAveragedFields(); + SetTimeAveragedFields(config); } } void CFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolver **solver, unsigned long iPoint){ const auto* Node_Flow = solver[FLOW_SOL]->GetNodes(); + const CVariable* Node_Turb = nullptr; + if (config->GetKind_Turb_Model() != TURB_MODEL::NONE) Node_Turb = solver[TURB_SOL]->GetNodes(); const CVariable* Node_Heat = nullptr; const CVariable* Node_Rad = nullptr; auto* Node_Geo = geometry->nodes; @@ -481,7 +483,7 @@ void CFlowIncOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolve LoadCommonFVMOutputs(config, geometry, iPoint); if (config->GetTime_Domain()) { - LoadTimeAveragedData(iPoint, Node_Flow); + LoadTimeAveragedData(iPoint, Node_Flow, Node_Turb, config); } } diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index 54bdc18d7830..86ce4213848f 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -1028,6 +1028,14 @@ void CFlowOutput::AddHistoryOutputFields_ScalarRMS_RES(const CConfig* config) { case TURB_FAMILY::SA: /// DESCRIPTION: Root-mean square residual of nu tilde (SA model). AddHistoryOutput("RMS_NU_TILDE", "rms[nu]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of nu tilde (SA model).", HistoryFieldType::RESIDUAL); + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + /// DESCRIPTION: Root-mean square residual of stochastic vector x-component (Stochastic Backscatter Model). + AddHistoryOutput("RMS_STOCH_VAR-X", "rms[stoch_x]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of stochastic vector x-component (Stochastic Backscatter Model).", HistoryFieldType::RESIDUAL); + /// DESCRIPTION: Root-mean square residual of stochastic vector y-component (Stochastic Backscatter Model). + AddHistoryOutput("RMS_STOCH_VAR-Y", "rms[stoch_y]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of stochastic vector y-component (Stochastic Backscatter Model).", HistoryFieldType::RESIDUAL); + /// DESCRIPTION: Root-mean square residual of stochastic vector z-component (Stochastic Backscatter Model). + AddHistoryOutput("RMS_STOCH_VAR-Z", "rms[stoch_z]", ScreenOutputFormat::FIXED, "RMS_RES", "Root-mean square residual of stochastic vector z-component (Stochastic Backscatter Model).", HistoryFieldType::RESIDUAL); + } break; case TURB_FAMILY::KW: @@ -1083,6 +1091,14 @@ void CFlowOutput::AddHistoryOutputFields_ScalarMAX_RES(const CConfig* config) { case TURB_FAMILY::SA: /// DESCRIPTION: Maximum residual of nu tilde (SA model). AddHistoryOutput("MAX_NU_TILDE", "max[nu]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of nu tilde (SA model).", HistoryFieldType::RESIDUAL); + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + /// DESCRIPTION: Maximum residual of stochastic vector x-component (Stochastic Backscatter Model). + AddHistoryOutput("MAX_STOCH_VAR-X", "max[stoch_x]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of stochastic vector x-component (Stochastic Backscatter Model).", HistoryFieldType::RESIDUAL); + /// DESCRIPTION: Maximum residual of stochastic vector y-component (Stochastic Backscatter Model). + AddHistoryOutput("MAX_STOCH_VAR-Y", "max[stoch_y]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of stochastic vector y-component (Stochastic Backscatter Model).", HistoryFieldType::RESIDUAL); + /// DESCRIPTION: Maximum residual of stochastic vector z-component (Stochastic Backscatter Model). + AddHistoryOutput("MAX_STOCH_VAR-Z", "max[stoch_z]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of stochastic vector z-component (Stochastic Backscatter Model).", HistoryFieldType::RESIDUAL); + } break; case TURB_FAMILY::KW: @@ -1142,6 +1158,14 @@ void CFlowOutput::AddHistoryOutputFields_ScalarBGS_RES(const CConfig* config) { case TURB_FAMILY::SA: /// DESCRIPTION: Maximum residual of nu tilde (SA model). AddHistoryOutput("BGS_NU_TILDE", "bgs[nu]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of nu tilde (SA model).", HistoryFieldType::RESIDUAL); + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + /// DESCRIPTION: Maximum residual of stochastic vector x-component (Stochastic Backscatter Model). + AddHistoryOutput("BGS_STOCH_VAR-X", "bgs[stoch_x]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of stochastic vector x-component (Stochastic Backscatter Model).", HistoryFieldType::RESIDUAL); + /// DESCRIPTION: Maximum residual of stochastic vector y-component (Stochastic Backscatter Model). + AddHistoryOutput("BGS_STOCH_VAR-Y", "bgs[stoch_y]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of stochastic vector y-component (Stochastic Backscatter Model).", HistoryFieldType::RESIDUAL); + /// DESCRIPTION: Maximum residual of stochastic vector z-component (Stochastic Backscatter Model). + AddHistoryOutput("BGS_STOCH_VAR-Z", "bgs[stoch_z]", ScreenOutputFormat::FIXED, "BGS_RES", "BGS residual of stochastic vector z-component (Stochastic Backscatter Model).", HistoryFieldType::RESIDUAL); + } break; case TURB_FAMILY::KW: @@ -1224,8 +1248,21 @@ void CFlowOutput::LoadHistoryDataScalar(const CConfig* config, const CSolver* co case TURB_FAMILY::SA: SetHistoryOutputValue("RMS_NU_TILDE", log10(solver[TURB_SOL]->GetRes_RMS(0))); SetHistoryOutputValue("MAX_NU_TILDE", log10(solver[TURB_SOL]->GetRes_Max(0))); + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + SetHistoryOutputValue("RMS_STOCH_VAR-X", log10(solver[TURB_SOL]->GetRes_RMS(1))); + SetHistoryOutputValue("RMS_STOCH_VAR-Y", log10(solver[TURB_SOL]->GetRes_RMS(2))); + SetHistoryOutputValue("RMS_STOCH_VAR-Z", log10(solver[TURB_SOL]->GetRes_RMS(3))); + SetHistoryOutputValue("MAX_STOCH_VAR-X", log10(solver[TURB_SOL]->GetRes_Max(1))); + SetHistoryOutputValue("MAX_STOCH_VAR-Y", log10(solver[TURB_SOL]->GetRes_Max(2))); + SetHistoryOutputValue("MAX_STOCH_VAR-Z", log10(solver[TURB_SOL]->GetRes_Max(3))); + } if (multiZone) { SetHistoryOutputValue("BGS_NU_TILDE", log10(solver[TURB_SOL]->GetRes_BGS(0))); + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + SetHistoryOutputValue("BGS_STOCH_VAR-X", log10(solver[TURB_SOL]->GetRes_BGS(1))); + SetHistoryOutputValue("BGS_STOCH_VAR-Y", log10(solver[TURB_SOL]->GetRes_BGS(2))); + SetHistoryOutputValue("BGS_STOCH_VAR-Z", log10(solver[TURB_SOL]->GetRes_BGS(3))); + } } break; @@ -1315,6 +1352,11 @@ void CFlowOutput::SetVolumeOutputFieldsScalarSolution(const CConfig* config){ switch (TurbModelFamily(config->GetKind_Turb_Model())) { case TURB_FAMILY::SA: AddVolumeOutput("NU_TILDE", "Nu_Tilde", "SOLUTION", "Spalart-Allmaras variable"); + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + AddVolumeOutput("STOCHVAR_X", "StochVar_x", "SOLUTION", "x-component of the stochastic vector potential"); + AddVolumeOutput("STOCHVAR_Y", "StochVar_y", "SOLUTION", "y-component of the stochastic vector potential"); + AddVolumeOutput("STOCHVAR_Z", "StochVar_z", "SOLUTION", "z-component of the stochastic vector potential"); + } break; case TURB_FAMILY::KW: @@ -1367,6 +1409,11 @@ void CFlowOutput::SetVolumeOutputFieldsScalarResidual(const CConfig* config) { switch (TurbModelFamily(config->GetKind_Turb_Model())){ case TURB_FAMILY::SA: AddVolumeOutput("RES_NU_TILDE", "Residual_Nu_Tilde", "RESIDUAL", "Residual of the Spalart-Allmaras variable"); + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + AddVolumeOutput("RES_STOCHVAR_X", "Residual_StochVar_X", "RESIDUAL", "Residual of the x-component of the stochastic vector potential"); + AddVolumeOutput("RES_STOCHVAR_Y", "Residual_StochVar_Y", "RESIDUAL", "Residual of the y-component of the stochastic vector potential"); + AddVolumeOutput("RES_STOCHVAR_Z", "Residual_StochVar_Z", "RESIDUAL", "Residual of the z-component of the stochastic vector potential"); + } break; case TURB_FAMILY::KW: @@ -1547,6 +1594,13 @@ void CFlowOutput::SetVolumeOutputFieldsScalarMisc(const CConfig* config) { if (config->GetKind_HybridRANSLES() != NO_HYBRIDRANSLES) { AddVolumeOutput("DES_LENGTHSCALE", "DES_LengthScale", "DDES", "DES length scale value"); AddVolumeOutput("WALL_DISTANCE", "Wall_Distance", "DDES", "Wall distance value"); + AddVolumeOutput("LES_SENSOR","LES_Sensor","DDES","LES sensor value"); + if (config->GetSBSParam().StochasticBackscatter) { + AddVolumeOutput("STOCHSOURCE_X", "StochSource_x", "BACKSCATTER", "x-component of the stochastic source vector"); + AddVolumeOutput("STOCHSOURCE_Y", "StochSource_y", "BACKSCATTER", "y-component of the stochastic source vector"); + AddVolumeOutput("STOCHSOURCE_Z", "StochSource_z", "BACKSCATTER", "z-component of the stochastic source vector"); + AddVolumeOutput("ENERGY_BACKSCATTER_RATIO", "Energy_Backscatter_Ratio", "BACKSCATTER", "Energy backscatter from unresolved to resolved scales (divided by the turbulent dissipation of resolved kinetic energy)"); + } } if (config->GetViscous()) { @@ -1646,6 +1700,21 @@ void CFlowOutput::LoadVolumeDataScalar(const CConfig* config, const CSolver* con if (config->GetKind_HybridRANSLES() != NO_HYBRIDRANSLES) { SetVolumeOutputValue("DES_LENGTHSCALE", iPoint, Node_Flow->GetDES_LengthScale(iPoint)); SetVolumeOutputValue("WALL_DISTANCE", iPoint, Node_Geo->GetWall_Distance(iPoint)); + SetVolumeOutputValue("LES_SENSOR", iPoint, Node_Flow->GetLES_Mode(iPoint)); + if (config->GetSBSParam().StochasticBackscatter) { + if (config->GetSBSParam().SBS_Ctau > 0.0) { + SetVolumeOutputValue("STOCHVAR_X", iPoint, Node_Turb->GetSolution(iPoint, 1)); + SetVolumeOutputValue("STOCHVAR_Y", iPoint, Node_Turb->GetSolution(iPoint, 2)); + SetVolumeOutputValue("STOCHVAR_Z", iPoint, Node_Turb->GetSolution(iPoint, 3)); + SetVolumeOutputValue("RES_STOCHVAR_X", iPoint, turb_solver->LinSysRes(iPoint, 1)); + SetVolumeOutputValue("RES_STOCHVAR_Y", iPoint, turb_solver->LinSysRes(iPoint, 2)); + SetVolumeOutputValue("RES_STOCHVAR_Z", iPoint, turb_solver->LinSysRes(iPoint, 3)); + } + SetVolumeOutputValue("STOCHSOURCE_X", iPoint, Node_Turb->GetLangevinSourceTerms(iPoint, 0)); + SetVolumeOutputValue("STOCHSOURCE_Y", iPoint, Node_Turb->GetLangevinSourceTerms(iPoint, 1)); + SetVolumeOutputValue("STOCHSOURCE_Z", iPoint, Node_Turb->GetLangevinSourceTerms(iPoint, 2)); + SetVolumeOutputValue("ENERGY_BACKSCATTER_RATIO", iPoint, GetEnergyBackscatterRatio(iPoint, config, Node_Flow, Node_Turb)); + } } switch (config->GetKind_Species_Model()) { @@ -1725,6 +1794,13 @@ void CFlowOutput::LoadSurfaceData(CConfig *config, CGeometry *geometry, CSolver SetVolumeOutputValue("SKIN_FRICTION-Z", iPoint, solver[FLOW_SOL]->GetCSkinFriction(iMarker, iVertex, 2)); SetVolumeOutputValue("HEAT_FLUX", iPoint, solver[heat_sol]->GetHeatFlux(iMarker, iVertex)); SetVolumeOutputValue("Y_PLUS", iPoint, solver[FLOW_SOL]->GetYPlus(iMarker, iVertex)); + + if (config->GetTime_Domain()) { + SetAvgVolumeOutputValue("MEAN_SKIN_FRICTION-X", iPoint, solver[FLOW_SOL]->GetCSkinFriction(iMarker, iVertex, 0)); + SetAvgVolumeOutputValue("MEAN_SKIN_FRICTION-Y", iPoint, solver[FLOW_SOL]->GetCSkinFriction(iMarker, iVertex, 1)); + if (nDim == 3) + SetAvgVolumeOutputValue("MEAN_SKIN_FRICTION-Z", iPoint, solver[FLOW_SOL]->GetCSkinFriction(iMarker, iVertex, 2)); + } } void CFlowOutput::AddAerodynamicCoefficients(const CConfig* config) { @@ -4027,7 +4103,7 @@ bool CFlowOutput::WriteVolumeOutput(CConfig *config, unsigned long Iter, bool fo return force_writing; } -void CFlowOutput::SetTimeAveragedFields() { +void CFlowOutput::SetTimeAveragedFields(const CConfig *config) { AddVolumeOutput("MEAN_DENSITY", "MeanDensity", "TIME_AVERAGE", "Mean density"); AddVolumeOutput("MEAN_VELOCITY-X", "MeanVelocity_x", "TIME_AVERAGE", "Mean velocity x-component"); AddVolumeOutput("MEAN_VELOCITY-Y", "MeanVelocity_y", "TIME_AVERAGE", "Mean velocity y-component"); @@ -4035,6 +4111,11 @@ void CFlowOutput::SetTimeAveragedFields() { AddVolumeOutput("MEAN_VELOCITY-Z", "MeanVelocity_z", "TIME_AVERAGE", "Mean velocity z-component"); AddVolumeOutput("MEAN_PRESSURE", "MeanPressure", "TIME_AVERAGE", "Mean pressure"); + AddVolumeOutput("MEAN_SKIN_FRICTION-X", "MeanSkinFriction_x", "TIME_AVERAGE", "Mean skin friction x-component"); + AddVolumeOutput("MEAN_SKIN_FRICTION-Y", "MeanSkinFriction_y", "TIME_AVERAGE", "Mean skin friction y-component"); + if (nDim==3) + AddVolumeOutput("MEAN_SKIN_FRICTION-Z", "MeanSkinFriction_z", "TIME_AVERAGE", "Mean skin friction z-component"); + AddVolumeOutput("RMS_U", "RMS[u]", "TIME_AVERAGE", "RMS u"); AddVolumeOutput("RMS_V", "RMS[v]", "TIME_AVERAGE", "RMS v"); AddVolumeOutput("RMS_UV", "RMS[uv]", "TIME_AVERAGE", "RMS uv"); @@ -4051,9 +4132,26 @@ void CFlowOutput::SetTimeAveragedFields() { AddVolumeOutput("UWPRIME", "w'u'", "TIME_AVERAGE", "Mean Reynolds-stress component w'u'"); AddVolumeOutput("VWPRIME", "w'v'", "TIME_AVERAGE", "Mean Reynolds-stress component w'v'"); } + + if (config->GetKind_Turb_Model() != TURB_MODEL::NONE) { + AddVolumeOutput("MODELED_REYNOLDS_STRESS_11", "ModeledReynoldsStress_11", "TIME_AVERAGE", "Modeled Reynolds stress xx-component"); + AddVolumeOutput("MODELED_REYNOLDS_STRESS_22", "ModeledReynoldsStress_22", "TIME_AVERAGE", "Modeled Reynolds stress yy-component"); + AddVolumeOutput("MODELED_REYNOLDS_STRESS_12", "ModeledReynoldsStress_12", "TIME_AVERAGE", "Modeled Reynolds stress xy-component"); + if (nDim == 3){ + AddVolumeOutput("MODELED_REYNOLDS_STRESS_33", "ModeledReynoldsStress_33", "TIME_AVERAGE", "Modeled Reynolds stress zz-component"); + AddVolumeOutput("MODELED_REYNOLDS_STRESS_13", "ModeledReynoldsStress_13", "TIME_AVERAGE", "Modeled Reynolds stress xz-component"); + AddVolumeOutput("MODELED_REYNOLDS_STRESS_23", "ModeledReynoldsStress_23", "TIME_AVERAGE", "Modeled Reynolds stress yz-component"); + } + + if (config->GetSBSParam().StochasticBackscatter) { + AddVolumeOutput("STOCHASTIC_REYNOLDS_STRESS_12", "StochasticReynoldsStress_12", "TIME_AVERAGE", "Stochastic Reynolds stress xy-component"); + AddVolumeOutput("STOCHASTIC_REYNOLDS_STRESS_13", "StochasticReynoldsStress_13", "TIME_AVERAGE", "Stochastic Reynolds stress xz-component"); + AddVolumeOutput("STOCHASTIC_REYNOLDS_STRESS_23", "StochasticReynoldsStress_23", "TIME_AVERAGE", "Stochastic Reynolds stress yz-component"); + } + } } -void CFlowOutput::LoadTimeAveragedData(unsigned long iPoint, const CVariable *Node_Flow){ +void CFlowOutput::LoadTimeAveragedData(unsigned long iPoint, const CVariable *Node_Flow, const CVariable *Node_Turb, const CConfig *config){ SetAvgVolumeOutputValue("MEAN_DENSITY", iPoint, Node_Flow->GetDensity(iPoint)); SetAvgVolumeOutputValue("MEAN_VELOCITY-X", iPoint, Node_Flow->GetVelocity(iPoint,0)); SetAvgVolumeOutputValue("MEAN_VELOCITY-Y", iPoint, Node_Flow->GetVelocity(iPoint,1)); @@ -4061,7 +4159,6 @@ void CFlowOutput::LoadTimeAveragedData(unsigned long iPoint, const CVariable *No SetAvgVolumeOutputValue("MEAN_VELOCITY-Z", iPoint, Node_Flow->GetVelocity(iPoint,2)); SetAvgVolumeOutputValue("MEAN_PRESSURE", iPoint, Node_Flow->GetPressure(iPoint)); - SetAvgVolumeOutputValue("RMS_U", iPoint, pow(Node_Flow->GetVelocity(iPoint,0),2)); SetAvgVolumeOutputValue("RMS_V", iPoint, pow(Node_Flow->GetVelocity(iPoint,1),2)); SetAvgVolumeOutputValue("RMS_UV", iPoint, Node_Flow->GetVelocity(iPoint,0) * Node_Flow->GetVelocity(iPoint,1)); @@ -4093,6 +4190,45 @@ void CFlowOutput::LoadTimeAveragedData(unsigned long iPoint, const CVariable *No SetVolumeOutputValue("UWPRIME", iPoint, -(umean*wmean - uwmean)); SetVolumeOutputValue("VWPRIME", iPoint, -(vmean*wmean - vwmean)); } + + if (config->GetKind_Turb_Model() != TURB_MODEL::NONE) { + const su2double rho = Node_Flow->GetDensity(iPoint); + const su2double nu_t = Node_Flow->GetEddyViscosity(iPoint) / rho; + const auto vel_grad = Node_Flow->GetVelocityGradient(iPoint); + const su2double vel_div = vel_grad(0,0) + vel_grad(1,1) + (nDim ==3 ? vel_grad(2,2) : 0.0); + const su2double tau_xx = nu_t * (2*vel_grad(0,0) - (2.0/3.0)*vel_div); + const su2double tau_yy = nu_t * (2*vel_grad(1,1) - (2.0/3.0)*vel_div); + const su2double tau_xy = nu_t * (vel_grad(0,1) + vel_grad(1,0)); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_11", iPoint, -tau_xx); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_22", iPoint, -tau_yy); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_12", iPoint, -tau_xy); + if (nDim == 3){ + const su2double tau_zz = nu_t * (2*vel_grad(2,2) - (2.0/3.0)*vel_div); + const su2double tau_xz = nu_t * (vel_grad(0,2) + vel_grad(2,0)); + const su2double tau_yz = nu_t * (vel_grad(1,2) + vel_grad(2,1)); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_33", iPoint, -tau_zz); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_13", iPoint, -tau_xz); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_23", iPoint, -tau_yz); + } + + if (config->GetSBSParam().StochasticBackscatter) { + const su2double DES_lengthscale = max(Node_Flow->GetDES_LengthScale(iPoint), 1e-10); + const su2double lesSensor = Node_Flow->GetLES_Mode(iPoint); + const su2double mag = config->GetSBSParam().SBS_Cmag; + const su2double threshold = config->GetSBSParam().stochFdThreshold; + su2double tke_estim = 0.0; + if (lesSensor > threshold) tke_estim = pow(nu_t/DES_lengthscale, 2); + const su2double csi_x = Node_Turb->GetSolution(iPoint, 1); + const su2double csi_y = Node_Turb->GetSolution(iPoint, 2); + const su2double csi_z = Node_Turb->GetSolution(iPoint, 3); + const su2double R_xy = - mag * tke_estim * csi_z; + const su2double R_xz = + mag * tke_estim * csi_y; + const su2double R_yz = - mag * tke_estim * csi_x; + SetAvgVolumeOutputValue("STOCHASTIC_REYNOLDS_STRESS_12", iPoint, -R_xy); + SetAvgVolumeOutputValue("STOCHASTIC_REYNOLDS_STRESS_13", iPoint, -R_xz); + SetAvgVolumeOutputValue("STOCHASTIC_REYNOLDS_STRESS_23", iPoint, -R_yz); + } + } } void CFlowOutput::SetFixedCLScreenOutput(const CConfig *config){ diff --git a/SU2_CFD/src/output/CNEMOCompOutput.cpp b/SU2_CFD/src/output/CNEMOCompOutput.cpp index fb6b8f906624..3f1de662c1c9 100644 --- a/SU2_CFD/src/output/CNEMOCompOutput.cpp +++ b/SU2_CFD/src/output/CNEMOCompOutput.cpp @@ -299,13 +299,15 @@ void CNEMOCompOutput::SetVolumeOutputFields(CConfig *config){ AddCommonFVMOutputs(config); if (config->GetTime_Domain()) { - SetTimeAveragedFields(); + SetTimeAveragedFields(config); } } void CNEMOCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolver **solver, unsigned long iPoint){ const auto* Node_Flow = solver[FLOW_SOL]->GetNodes(); + const CVariable* Node_Turb = nullptr; + if (config->GetKind_Turb_Model() != TURB_MODEL::NONE) Node_Turb = solver[TURB_SOL]->GetNodes(); auto* Node_Geo = geometry->nodes; const auto nSpecies = config->GetnSpecies(); @@ -385,7 +387,7 @@ void CNEMOCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolv LoadCommonFVMOutputs(config, geometry, iPoint); if (config->GetTime_Domain()) { - LoadTimeAveragedData(iPoint, Node_Flow); + LoadTimeAveragedData(iPoint, Node_Flow, Node_Turb, config); } } diff --git a/SU2_CFD/src/solvers/CIncEulerSolver.cpp b/SU2_CFD/src/solvers/CIncEulerSolver.cpp index b7896ae4380d..d27f97b8f2f7 100644 --- a/SU2_CFD/src/solvers/CIncEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CIncEulerSolver.cpp @@ -964,7 +964,7 @@ void CIncEulerSolver::CommonPreprocessing(CGeometry *geometry, CSolver **solver_ const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); const bool center = (config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED); - const bool center_jst = (config->GetKind_Centered_Flow() == CENTERED::JST) && (iMesh == MESH_0); + const bool center_jst = (config->GetKind_Centered_Flow() == CENTERED::JST || config->GetKind_Centered_Flow() == CENTERED::LD2) && (iMesh == MESH_0); const bool outlet = (config->GetnMarker_Outlet() != 0); /*--- Set the primitive variables ---*/ @@ -1141,8 +1141,9 @@ void CIncEulerSolver::Centered_Residual(CGeometry *geometry, CSolver **solver_co unsigned long iPoint, jPoint; const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); - const bool jst_scheme = ((config->GetKind_Centered_Flow() == CENTERED::JST) && (iMesh == MESH_0)); + const bool jst_scheme = ((config->GetKind_Centered_Flow() == CENTERED::JST || config->GetKind_Centered_Flow() == CENTERED::LD2) && (iMesh == MESH_0)); const bool bounded_scalar = config->GetBounded_Scalar(); + const bool LD2_Scheme = (config->GetKind_Centered_Flow() == CENTERED::LD2); /*--- For hybrid parallel AD, pause preaccumulation if there is shared reading of * variables, otherwise switch to the faster adjoint evaluation mode. ---*/ @@ -1180,6 +1181,16 @@ void CIncEulerSolver::Centered_Residual(CGeometry *geometry, CSolver **solver_co numerics->SetSensor(nodes->GetSensor(iPoint), nodes->GetSensor(jPoint)); } + if (LD2_Scheme) { + numerics->SetPrimVarGradient(nodes->GetGradient_Primitive(iPoint), nodes->GetGradient_Primitive(jPoint)); + if (!geometry->nodes->GetPeriodicBoundary(iPoint) || (geometry->nodes->GetPeriodicBoundary(iPoint) + && !geometry->nodes->GetPeriodicBoundary(jPoint))) { + numerics->SetCoord(geometry->nodes->GetCoord(iPoint), geometry->nodes->GetCoord(jPoint)); + } else { + numerics->SetCoord(geometry->nodes->GetCoord(iPoint), geometry->nodes->GetCoord(iPoint)); + } + } + /*--- Grid movement ---*/ if (dynamic_grid) { diff --git a/SU2_CFD/src/solvers/CIncNSSolver.cpp b/SU2_CFD/src/solvers/CIncNSSolver.cpp index 1e153f66a1b0..3957413cc240 100644 --- a/SU2_CFD/src/solvers/CIncNSSolver.cpp +++ b/SU2_CFD/src/solvers/CIncNSSolver.cpp @@ -365,7 +365,7 @@ unsigned long CIncNSSolver::SetPrimitive_Variables(CSolver **solver_container, c SU2_ZONE_SCOPED unsigned long iPoint, nonPhysicalPoints = 0; - su2double eddy_visc = 0.0, turb_ke = 0.0, DES_LengthScale = 0.0; + su2double eddy_visc = 0.0, turb_ke = 0.0, DES_LengthScale = 0.0, LES_Mode = 0.0; const su2double* scalar = nullptr; const TURB_MODEL turb_model = config->GetKind_Turb_Model(); const SPECIES_MODEL species_model = config->GetKind_Species_Model(); @@ -385,6 +385,7 @@ unsigned long CIncNSSolver::SetPrimitive_Variables(CSolver **solver_container, c if (config->GetKind_HybridRANSLES() != NO_HYBRIDRANSLES){ DES_LengthScale = solver_container[TURB_SOL]->GetNodes()->GetDES_LengthScale(iPoint); + LES_Mode = solver_container[TURB_SOL]->GetNodes()->GetLES_Mode(iPoint); } } @@ -405,6 +406,10 @@ unsigned long CIncNSSolver::SetPrimitive_Variables(CSolver **solver_container, c nodes->SetDES_LengthScale(iPoint,DES_LengthScale); + /*--- Set the LES sensor ---*/ + + nodes->SetLES_Mode(iPoint, LES_Mode); + } END_SU2_OMP_FOR diff --git a/SU2_CFD/src/solvers/CNSSolver.cpp b/SU2_CFD/src/solvers/CNSSolver.cpp index 724c52c2e332..ad51d64d08f6 100644 --- a/SU2_CFD/src/solvers/CNSSolver.cpp +++ b/SU2_CFD/src/solvers/CNSSolver.cpp @@ -153,6 +153,8 @@ unsigned long CNSSolver::SetPrimitive_Variables(CSolver **solver_container, cons if (config->GetKind_HybridRANSLES() != NO_HYBRIDRANSLES) { su2double DES_LengthScale = solver_container[TURB_SOL]->GetNodes()->GetDES_LengthScale(iPoint); nodes->SetDES_LengthScale(iPoint, DES_LengthScale); + su2double LES_Mode = solver_container[TURB_SOL]->GetNodes()->GetLES_Mode(iPoint); + nodes->SetLES_Mode(iPoint, LES_Mode); } } diff --git a/SU2_CFD/src/solvers/CSolver.cpp b/SU2_CFD/src/solvers/CSolver.cpp index 6edbc8f3b8a4..8705df47f997 100644 --- a/SU2_CFD/src/solvers/CSolver.cpp +++ b/SU2_CFD/src/solvers/CSolver.cpp @@ -1369,6 +1369,14 @@ void CSolver::GetCommCountAndType(const CConfig* config, COUNT_PER_POINT = nVar+1; MPI_TYPE = COMM_TYPE::DOUBLE; break; + case MPI_QUANTITIES::STOCH_SOURCE_LANG: + COUNT_PER_POINT = nDim; + MPI_TYPE = COMM_TYPE::DOUBLE; + break; + case MPI_QUANTITIES::DES_LENGTHSCALE: + COUNT_PER_POINT = 1; + MPI_TYPE = COMM_TYPE::DOUBLE; + break; case MPI_QUANTITIES::SOLUTION_FEA: if (config->GetTime_Domain()) COUNT_PER_POINT = nVar*3; @@ -1497,6 +1505,13 @@ void CSolver::InitiateComms(CGeometry *geometry, bufDSend[buf_offset+iVar] = base_nodes->GetSolution(iPoint, iVar); bufDSend[buf_offset+nVar] = base_nodes->GetmuT(iPoint); break; + case MPI_QUANTITIES::STOCH_SOURCE_LANG: + for (iDim = 0; iDim < nDim; iDim++) + bufDSend[buf_offset+iDim] = base_nodes->GetLangevinSourceTerms(iPoint, iDim); + break; + case MPI_QUANTITIES::DES_LENGTHSCALE: + bufDSend[buf_offset] = base_nodes->GetDES_LengthScale(iPoint); + break; case MPI_QUANTITIES::UNDIVIDED_LAPLACIAN: for (iVar = 0; iVar < nVar; iVar++) bufDSend[buf_offset+iVar] = base_nodes->GetUndivided_Laplacian(iPoint, iVar); @@ -1646,6 +1661,13 @@ void CSolver::CompleteComms(CGeometry *geometry, base_nodes->SetSolution(iPoint, iVar, bufDRecv[buf_offset+iVar]); base_nodes->SetmuT(iPoint,bufDRecv[buf_offset+nVar]); break; + case MPI_QUANTITIES::STOCH_SOURCE_LANG: + for (iDim = 0; iDim < nDim; iDim++) + base_nodes->SetLangevinSourceTerms(iPoint, iDim, bufDRecv[buf_offset+iDim]); + break; + case MPI_QUANTITIES::DES_LENGTHSCALE: + base_nodes->SetDES_LengthScale(iPoint, bufDRecv[buf_offset]); + break; case MPI_QUANTITIES::UNDIVIDED_LAPLACIAN: for (iVar = 0; iVar < nVar; iVar++) base_nodes->SetUnd_Lapl(iPoint, iVar, bufDRecv[buf_offset+iVar]); diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp index 65066e32e942..dbad3f42e69d 100644 --- a/SU2_CFD/src/solvers/CTurbSASolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp @@ -30,6 +30,7 @@ #include "../../include/variables/CFlowVariable.hpp" #include "../../../Common/include/parallelization/omp_structure.hpp" #include "../../../Common/include/toolboxes/geometry_toolbox.hpp" +#include "../../../Common/include/toolboxes/random_toolbox.hpp" CTurbSASolver::CTurbSASolver(CGeometry *geometry, CConfig *config, unsigned short iMesh, CFluidModel* FluidModel) @@ -55,6 +56,13 @@ CTurbSASolver::CTurbSASolver(CGeometry *geometry, CConfig *config, unsigned shor nDim = geometry->GetnDim(); + /*--- Add Langevin equations if the Stochastic Backscatter Model is used ---*/ + + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + nVar += 3; + nVarGrad = nPrimVar = nVar; + } + /*--- Single grid simulation ---*/ if (iMesh == MESH_0 || config->GetMGCycle() == MG_CYCLE::FULL) { @@ -110,17 +118,22 @@ CTurbSASolver::CTurbSASolver(CGeometry *geometry, CConfig *config, unsigned shor } Solution_Inf[0] = nu_tilde_Inf; + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + for (unsigned short iVar = 1; iVar < nVar; iVar++) { + Solution_Inf[iVar] = 0.0; + } + } /*--- Factor_nu_Engine ---*/ - Factor_nu_Engine = config->GetNuFactor_Engine(); - nu_tilde_Engine = Factor_nu_Engine*Viscosity_Inf/Density_Inf; + Factor_nu_Engine = config->GetNuFactor_Engine(); + nu_tilde_Engine[0] = Factor_nu_Engine*Viscosity_Inf/Density_Inf; if (config->GetSAParsedOptions().bc) { - nu_tilde_Engine = 0.005*Factor_nu_Engine*Viscosity_Inf/Density_Inf; + nu_tilde_Engine[0] = 0.005*Factor_nu_Engine*Viscosity_Inf/Density_Inf; } /*--- Factor_nu_ActDisk ---*/ - Factor_nu_ActDisk = config->GetNuFactor_Engine(); - nu_tilde_ActDisk = Factor_nu_ActDisk*Viscosity_Inf/Density_Inf; + Factor_nu_ActDisk = config->GetNuFactor_Engine(); + nu_tilde_ActDisk[0] = Factor_nu_ActDisk*Viscosity_Inf/Density_Inf; /*--- Eddy viscosity at infinity ---*/ su2double Ji, Ji_3, fv1, cv1_3 = 7.1*7.1*7.1; @@ -156,8 +169,16 @@ CTurbSASolver::CTurbSASolver(CGeometry *geometry, CConfig *config, unsigned shor * due to arbitrary number of turbulence variables ---*/ Inlet_TurbVars.resize(nMarker); - for (unsigned long iMarker = 0; iMarker < nMarker; iMarker++) + for (unsigned long iMarker = 0; iMarker < nMarker; iMarker++) { Inlet_TurbVars[iMarker].resize(nVertex[iMarker],nVar) = nu_tilde_Inf; + if (config->GetSBSParam().StochasticBackscatter && config->GetSBSParam().SBS_Ctau > 0.0) { + for (unsigned long iVertex = 0; iVertex < nVertex[iMarker]; iVertex++) { + for (unsigned short iVar = 1; iVar < nVar; iVar++) { + Inlet_TurbVars[iMarker](iVertex,iVar) = 0.0; + } + } + } + } /*--- Store the initial CFL number for all grid points. ---*/ @@ -205,6 +226,23 @@ void CTurbSASolver::Preprocessing(CGeometry *geometry, CSolver **solver_containe SetDES_LengthScale(solver_container, geometry, config); + InitiateComms(geometry, config, MPI_QUANTITIES::DES_LENGTHSCALE); + CompleteComms(geometry, config, MPI_QUANTITIES::DES_LENGTHSCALE); + + /*--- Compute source terms for Langevin equations ---*/ + + bool backscatter = config->GetSBSParam().StochasticBackscatter; + unsigned long innerIter = config->GetInnerIter(); + if (backscatter && innerIter==0) { + bool backscatterInBox = config->GetSBSParam().StochBackscatterInBox; + unsigned long timeIter = config->GetTimeIter(); + unsigned long restartIter = config->GetRestart_Iter(); + if (backscatterInBox && timeIter==restartIter) SetBackscatterInBox(config, geometry); + SetLangevinSourceTerms(config, geometry); + const unsigned short maxIter = config->GetSBSParam().SBS_maxIterSmooth; + if (maxIter > 0) SmoothLangevinSourceTerms(config, geometry); + } + } } @@ -383,6 +421,15 @@ void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_contai numerics->SetDistance(nodes->GetDES_LengthScale(iPoint), 0.0); + /*--- Compute source terms in Langevin equations (Stochastic Basckscatter Model) ---*/ + + if (config->GetSBSParam().StochasticBackscatter) { + for (unsigned short iDim = 0; iDim < nDim; iDim++) + numerics->SetStochSource(nodes->GetLangevinSourceTerms(iPoint, iDim), iDim); + numerics->SetLES_Mode(nodes->GetLES_Mode(iPoint), 0.0); + numerics->SetSbsInBoxSensor(nodes->GetSbsInBox(iPoint), 0); + } + } /*--- Effective Intermittency ---*/ @@ -406,7 +453,7 @@ void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_contai if (transition_BC || config->GetKind_Trans_Model() != TURB_TRANS_MODEL::NONE) { nodes->SetIntermittency(iPoint,numerics->GetIntermittencyEff()); } - + /*--- Subtract residual and the Jacobian ---*/ LinSysRes.SubtractBlock(iPoint, residual); @@ -513,9 +560,9 @@ void CTurbSASolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_conta su2double Res_Wall = coeff*RoughWallBC*Area; LinSysRes(iPoint, 0) -= Res_Wall; - su2double Jacobian_i = (laminar_viscosity /density *Area)/(0.03*Roughness_Height*sigma); - Jacobian_i += 2.0*RoughWallBC*Area/sigma; - if (implicit) Jacobian.AddVal2Diag(iPoint, -Jacobian_i); + Jacobian_i[0][0] = (laminar_viscosity /density *Area)/(0.03*Roughness_Height*sigma); + Jacobian_i[0][0] += 2.0*RoughWallBC*Area/sigma; + if (implicit) Jacobian.AddVal2Diag(iPoint, 0, -Jacobian_i[0][0]); } } } @@ -566,7 +613,7 @@ void CTurbSASolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container, CN conv_numerics->SetPrimitive(V_domain, V_inlet); /*--- Non-dimensionalize Inlet_TurbVars if Inlet-Files are used. ---*/ - su2double Inlet_Vars[MAXNVAR]; + su2double Inlet_Vars[MAXNVAR] = {0.0}; Inlet_Vars[0] = Inlet_TurbVars[val_marker][iVertex][0]; if (config->GetInlet_Profile_From_File()) { Inlet_Vars[0] *= config->GetDensity_Ref() / config->GetViscosity_Ref(); @@ -874,7 +921,7 @@ void CTurbSASolver::BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_cont /*--- Set the turbulent variable states (prescribed for an inflow) ---*/ - conv_numerics->SetScalarVar(nodes->GetSolution(iPoint), &nu_tilde_Engine); + conv_numerics->SetScalarVar(nodes->GetSolution(iPoint), nu_tilde_Engine); /*--- Set various other quantities in the conv_numerics class ---*/ @@ -1030,7 +1077,7 @@ void CTurbSASolver::BC_ActDisk(CGeometry *geometry, CSolver **solver_container, } else { /*--- Outflow analysis ---*/ - conv_numerics->SetScalarVar(nodes->GetSolution(iPoint), &nu_tilde_ActDisk); + conv_numerics->SetScalarVar(nodes->GetSolution(iPoint), nu_tilde_ActDisk); } /*--- Grid Movement ---*/ @@ -1090,7 +1137,8 @@ void CTurbSASolver::BC_Inlet_MixingPlane(CGeometry *geometry, CSolver **solver_c /*--- Loop over all the vertices on this boundary marker ---*/ for (auto iSpan = 0u; iSpan < nSpanWiseSections ; iSpan++){ - su2double extAverageNu = solver_container[FLOW_SOL]->GetExtAverageNu(val_marker, iSpan); + su2double extAverageNu[MAXNVAR] = {0.0}; + extAverageNu[0] = solver_container[FLOW_SOL]->GetExtAverageNu(val_marker, iSpan); /*--- Loop over all the vertices on this boundary marker ---*/ @@ -1126,7 +1174,7 @@ void CTurbSASolver::BC_Inlet_MixingPlane(CGeometry *geometry, CSolver **solver_c /*--- Set the turbulent variable states (prescribed for an inflow) ---*/ - conv_numerics->SetScalarVar(nodes->GetSolution(iPoint), &extAverageNu); + conv_numerics->SetScalarVar(nodes->GetSolution(iPoint), extAverageNu); /*--- Set various other quantities in the conv_numerics class ---*/ @@ -1156,7 +1204,7 @@ void CTurbSASolver::BC_Inlet_MixingPlane(CGeometry *geometry, CSolver **solver_c /*--- Turbulent variables w/o reconstruction, and its gradients ---*/ - visc_numerics->SetScalarVar(nodes->GetSolution(iPoint), &extAverageNu); + visc_numerics->SetScalarVar(nodes->GetSolution(iPoint), extAverageNu); visc_numerics->SetScalarVarGradient(nodes->GetGradient(iPoint), nodes->GetGradient(iPoint)); @@ -1196,7 +1244,8 @@ void CTurbSASolver::BC_Inlet_Turbo(CGeometry *geometry, CSolver **solver_contain FluidModel->SetTDState_Prho(pressure, rho); su2double muLam = FluidModel->GetLaminarViscosity(); - su2double nu_tilde = Factor_nu_Inf*muLam/rho; + su2double nu_tilde[MAXNVAR] = {0.0}; + nu_tilde[0] = Factor_nu_Inf*muLam/rho; /*--- Loop over all the vertices on this boundary marker ---*/ @@ -1232,7 +1281,7 @@ void CTurbSASolver::BC_Inlet_Turbo(CGeometry *geometry, CSolver **solver_contain /*--- Set the turbulent variable states (prescribed for an inflow) ---*/ - conv_numerics->SetScalarVar(nodes->GetSolution(iPoint), &nu_tilde); + conv_numerics->SetScalarVar(nodes->GetSolution(iPoint), nu_tilde); if (dynamic_grid) conv_numerics->SetGridVel(geometry->nodes->GetGridVel(iPoint), @@ -1262,7 +1311,7 @@ void CTurbSASolver::BC_Inlet_Turbo(CGeometry *geometry, CSolver **solver_contain /*--- Turbulent variables w/o reconstruction, and its gradients ---*/ - visc_numerics->SetScalarVar(nodes->GetSolution(iPoint), &nu_tilde); + visc_numerics->SetScalarVar(nodes->GetSolution(iPoint), nu_tilde); visc_numerics->SetScalarVarGradient(nodes->GetGradient(iPoint), nodes->GetGradient(iPoint)); @@ -1354,7 +1403,9 @@ void CTurbSASolver::SetTurbVars_WF(CGeometry *geometry, CSolver **solver_contain if (counter > max_iter) break; } - nodes->SetSolution_Old(iPoint_Neighbor, &nu_til); + su2double nuTil[MAXNVAR] = {0.0}; + nuTil[0] = nu_til; + nodes->SetSolution_Old(iPoint_Neighbor, nuTil); LinSysRes.SetBlock_Zero(iPoint_Neighbor); /*--- includes 1 in the diagonal ---*/ @@ -1414,7 +1465,9 @@ void CTurbSASolver::SetDES_LengthScale(CSolver **solver, CGeometry *geometry, CC su2double psi_2 = (1.0 - (cb1/(cw1*k2*fw_star))*(ft2 + (1.0 - ft2)*fv2))/(fv1 * max(1.0e-10,1.0-ft2)); psi_2 = min(100.0,psi_2); - su2double lengthScale = 0.0; + su2double lengthScale = 0.0, lesSensor = 0.0; + + const su2double LES_FilterWidth = config->GetLES_FilterWidth(); switch(kindHybridRANSLES){ case SA_DES: { @@ -1423,9 +1476,18 @@ void CTurbSASolver::SetDES_LengthScale(CSolver **solver, CGeometry *geometry, CC 1997 ---*/ - const su2double maxDelta = geometry->nodes->GetMaxLength(iPoint); + su2double maxDelta = geometry->nodes->GetMaxLength(iPoint); + if (LES_FilterWidth > 0.0){ + maxDelta = LES_FilterWidth; + } const su2double distDES = constDES * maxDelta; lengthScale = min(distDES,wallDistance); + lesSensor = (wallDistance<=distDES) ? 0.0 : 1.0; + + if (config->GetEnforceLES()) { + lengthScale = distDES; + lesSensor = 1.0; + } break; } @@ -1435,13 +1497,22 @@ void CTurbSASolver::SetDES_LengthScale(CSolver **solver, CGeometry *geometry, CC Theoretical and Computational Fluid Dynamics - 2006 ---*/ - const su2double maxDelta = geometry->nodes->GetMaxLength(iPoint); + su2double maxDelta = geometry->nodes->GetMaxLength(iPoint); + if (LES_FilterWidth > 0.0){ + maxDelta = LES_FilterWidth; + } const su2double r_d = (kinematicViscosityTurb+kinematicViscosity)/(uijuij*k2*pow(wallDistance, 2.0)); const su2double f_d = 1.0-tanh(pow(8.0*r_d,3.0)); const su2double distDES = constDES * maxDelta; lengthScale = wallDistance-f_d*max(0.0,(wallDistance-distDES)); + lesSensor = (wallDistance<=distDES) ? 0.0 : f_d; + + if (config->GetEnforceLES()) { + lengthScale = distDES; + lesSensor = 1.0; + } break; } @@ -1480,8 +1551,17 @@ void CTurbSASolver::SetDES_LengthScale(CSolver **solver, CGeometry *geometry, CC maxDelta = deltaDDES; } + if (LES_FilterWidth > 0.0){ + maxDelta = LES_FilterWidth; + } const su2double distDES = constDES * maxDelta; lengthScale = wallDistance-f_d*max(0.0,(wallDistance-distDES)); + lesSensor = (wallDistance<=distDES) ? 0.0 : f_d; + + if (config->GetEnforceLES()) { + lengthScale = distDES; + lesSensor = 1.0; + } break; } @@ -1532,19 +1612,311 @@ void CTurbSASolver::SetDES_LengthScale(CSolver **solver, CGeometry *geometry, CC maxDelta = deltaDDES; } + if (LES_FilterWidth > 0.0){ + maxDelta = LES_FilterWidth; + } const su2double distDES = constDES * maxDelta; lengthScale = wallDistance-f_d*max(0.0,(wallDistance-distDES)); + lesSensor = (wallDistance<=distDES) ? 0.0 : f_d; + + if (config->GetEnforceLES()) { + lengthScale = distDES; + lesSensor = 1.0; + } break; } } nodes->SetDES_LengthScale(iPoint, lengthScale); + nodes->SetLES_Mode(iPoint, lesSensor); } END_SU2_OMP_FOR } +void CTurbSASolver::SetBackscatterInBox(CConfig *config, CGeometry *geometry) { + + auto sbsBoxBounds = config->GetSBSParam().StochBackscatterBoxBounds; + + SU2_OMP_FOR_STAT(omp_chunk_size) + for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++) { + const auto coord = geometry->nodes->GetCoord(iPoint); + bool outOfBoxX = (coord[0]sbsBoxBounds[1]); + bool outOfBoxY = (coord[1]sbsBoxBounds[3]); + bool outOfBoxZ = (coord[2]sbsBoxBounds[5]); + bool outOfBox = (outOfBoxX || outOfBoxY || outOfBoxZ); + nodes->SetSbsInBox(iPoint, outOfBox ? 0 : 1); + } + END_SU2_OMP_FOR + +} + +void CTurbSASolver::SetLangevinSourceTerms(CConfig *config, CGeometry* geometry) { + + const su2double threshold = config->GetSBSParam().stochFdThreshold; + const su2double dummySource = 1e3; + unsigned long timeIter = config->GetTimeIter(); + + SU2_OMP_FOR_STAT(omp_chunk_size) + for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++){ + unsigned long iPointGlobal = geometry->nodes->GetGlobalIndex(iPoint); + for (unsigned short iDim = 0; iDim < nDim; iDim++){ + su2double lesSensor = nodes->GetLES_Mode(iPoint); + su2double inBoxSensor = nodes->GetSbsInBox(iPoint); + bool insideBox = (inBoxSensor == 1); + if (lesSensor>threshold && insideBox) { + su2double rnd = RandomToolbox::GetNormal(iPointGlobal, iDim, timeIter); + nodes->SetLangevinSourceTermsOld(iPoint, iDim, rnd); + nodes->SetLangevinSourceTerms(iPoint, iDim, rnd); + } else { + nodes->SetLangevinSourceTermsOld(iPoint, iDim, dummySource); + nodes->SetLangevinSourceTerms(iPoint, iDim, 0.0); + } + } + } + END_SU2_OMP_FOR + + SU2_OMP_FOR_DYN(omp_chunk_size) + for (unsigned short iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + for (unsigned long iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) { + unsigned long iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); + if (config->GetMarker_All_KindBC(iMarker) != SEND_RECEIVE) { + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + nodes->SetLangevinSourceTermsOld(iPoint, iDim, dummySource); + nodes->SetLangevinSourceTerms(iPoint, iDim, 0.0); + } + } + } + } + END_SU2_OMP_FOR + + InitiateComms(geometry, config, MPI_QUANTITIES::STOCH_SOURCE_LANG); + CompleteComms(geometry, config, MPI_QUANTITIES::STOCH_SOURCE_LANG); + +} + +void CTurbSASolver::SmoothLangevinSourceTerms(CConfig* config, CGeometry* geometry) { + + const su2double LES_FilterWidth = config->GetLES_FilterWidth(); + const su2double cDelta = config->GetSBSParam().SBS_Cdelta; + const unsigned short maxIter = config->GetSBSParam().SBS_maxIterSmooth; + const su2double tol = -5.0; + const su2double sourceLim = 3.0; + const su2double omega = 0.8; + unsigned long timeIter = config->GetTimeIter(); + unsigned long restartIter = config->GetRestart_Iter(); + + /*--- Start SOR algorithm for the Laplacian smoothing. ---*/ + + for (unsigned short iDim = 0; iDim < nDim; iDim++) { + + for (unsigned short iter = 0; iter < maxIter; iter++) { + + /*--- MPI communication. ---*/ + + InitiateComms(geometry, config, MPI_QUANTITIES::STOCH_SOURCE_LANG); + CompleteComms(geometry, config, MPI_QUANTITIES::STOCH_SOURCE_LANG); + + su2double localResNorm = 0.0; + unsigned long local_nPointLES = 0; + + SU2_OMP_FOR_DYN(omp_chunk_size) + for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { + su2double source_i_old = nodes->GetLangevinSourceTermsOld(iPoint, iDim); + if (source_i_old > 3.0*sourceLim) continue; + local_nPointLES += 1; + su2double maxDelta = geometry->nodes->GetMaxLength(iPoint); + if (LES_FilterWidth > 0.0) maxDelta = LES_FilterWidth; + su2double b = sqrt(cDelta) * maxDelta; + su2double b2 = b * b; + su2double volume_iPoint = geometry->nodes->GetVolume(iPoint); + su2double source_i = nodes->GetLangevinSourceTerms(iPoint, iDim); + auto coord_i = geometry->nodes->GetCoord(iPoint); + + /*--- Assemble system matrix. ---*/ + + su2double diag = 1.0; + su2double sum = 0.0; + for (unsigned short iNode = 0; iNode < geometry->nodes->GetnPoint(iPoint); iNode++) { + auto jPoint = geometry->nodes->GetPoint(iPoint, iNode); + auto coord_j = geometry->nodes->GetCoord(jPoint); + auto iEdge = geometry->nodes->GetEdge(iPoint, iNode); + auto* normal = geometry->edges->GetNormal(iEdge); + su2double area = GeometryToolbox::Norm(nDim, normal); + su2double dx_ij = GeometryToolbox::Distance(nDim, coord_i, coord_j); + su2double source_j = nodes->GetLangevinSourceTerms(jPoint, iDim); + su2double a_ij = area/volume_iPoint * b2/dx_ij; + diag += a_ij; + sum += a_ij * source_j; + } + + /*--- Update the solution. ---*/ + + su2double source_tmp = (source_i_old + sum) / diag; + localResNorm += pow(omega * (source_tmp - source_i), 2); + source_i = (1.0-omega)*source_i + omega*source_tmp; + nodes->SetLangevinSourceTerms(iPoint, iDim, source_i); + + } + END_SU2_OMP_FOR + + /*--- Stop integration if residual drops below tolerance. ---*/ + + su2double globalResNorm = 0.0; + unsigned long global_nPointLES = 0; + SU2_MPI::Allreduce(&local_nPointLES, &global_nPointLES, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); + SU2_MPI::Allreduce(&localResNorm, &globalResNorm, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + globalResNorm = (global_nPointLES==0) ? su2double(0.0) : sqrt(globalResNorm / global_nPointLES); + + if (rank == MASTER_NODE) { + if (iter == 0) { + cout << endl + << "Residual of Laplacian smoothing along dimension " << iDim+1 << "." << endl + << "---------------------------------" << endl + << " Iter RMS Residual" << endl + << "---------------------------------" << endl; + } + if (iter%10 == 0) { + cout << " " + << std::setw(5) << iter + << " " + << std::setw(12) << std::fixed << std::setprecision(6) << log10(globalResNorm) + << endl; + } + } + + if (log10(globalResNorm) < tol || iter == maxIter-1) { + + if (rank == MASTER_NODE) { + cout << " " + << std::setw(5) << iter + << " " + << std::setw(12) << std::fixed << ::setprecision(6) << log10(globalResNorm) + << endl; + cout << "---------------------------------" << endl; + } + + /*--- Scale source terms for variance preservation. ---*/ + + su2double var_check_old = 0.0; + su2double mean_check_old = 0.0; + su2double var_check_new = 0.0; + su2double mean_check_new = 0.0; + su2double var_check_notSmoothed = 0.0; + su2double mean_check_notSmoothed = 0.0; + for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { + su2double source_notSmoothed = nodes->GetLangevinSourceTermsOld(iPoint, iDim); + if (source_notSmoothed > 3.0*sourceLim) continue; + su2double source = nodes->GetLangevinSourceTerms(iPoint, iDim); + mean_check_old += source; + var_check_old += source * source; + mean_check_notSmoothed += source_notSmoothed; + var_check_notSmoothed += source_notSmoothed * source_notSmoothed; + su2double integral = 0.0; + if (timeIter==restartIter) { + su2double maxDelta = geometry->nodes->GetMaxLength(iPoint); + if (LES_FilterWidth > 0.0) maxDelta = LES_FilterWidth; + su2double b = sqrt(cDelta) * maxDelta; + su2double b2 = b * b; + auto coord_i = geometry->nodes->GetCoord(iPoint); + su2double maxDelta_vec[3] = {0.0}; + su2double maxDelta_tmp = 0.0; + unsigned short nNeigh = geometry->nodes->GetnPoint(iPoint); + for (unsigned short iNode = 0; iNode < nNeigh; iNode++) { + auto jPoint = geometry->nodes->GetPoint(iPoint, iNode); + auto coord_j = geometry->nodes->GetCoord(jPoint); + su2double dist_ij = GeometryToolbox::Distance(nDim, coord_j, coord_i); + if (dist_ij > maxDelta_tmp) { + maxDelta_tmp = dist_ij; + GeometryToolbox::Distance(nDim, coord_j, coord_i, maxDelta_vec); + } + } + su2double max_dist_ij_normal = 0.0; + for (unsigned short iNode = 0; iNode < nNeigh; iNode++) { + auto jPoint = geometry->nodes->GetPoint(iPoint, iNode); + auto coord_j = geometry->nodes->GetCoord(jPoint); + su2double dist_ij2 = GeometryToolbox::SquaredDistance(nDim, coord_j, coord_i); + su2double dist_ij_vec[3] = {0.0}; + GeometryToolbox::Distance(nDim, coord_j, coord_i, dist_ij_vec); + su2double dist_ij_parallel = GeometryToolbox::DotProduct(nDim, dist_ij_vec, maxDelta_vec); + dist_ij_parallel /= maxDelta; + su2double dist_ij_normal = sqrt(max(dist_ij2 - dist_ij_parallel*dist_ij_parallel, 0.0)); + if (dist_ij_normal > max_dist_ij_normal) { + max_dist_ij_normal = dist_ij_normal; + } + } + su2double dI = maxDelta; + su2double dJ = max_dist_ij_normal; + su2double dK = geometry->nodes->GetVolume(iPoint) / (dI*dJ); + su2double dI2 = dI * dI; + su2double dJ2 = dJ * dJ; + su2double dK2 = dK * dK; + su2double bI = b2 / dI2; + su2double bJ = b2 / dJ2; + su2double bK = b2 / dK2; + integral = RandomToolbox::GetBesselIntegral(bI, bJ, bK); + nodes->SetBesselIntegral(iPoint, integral); + } else { + integral = nodes->GetBesselIntegral(iPoint); + } + su2double scaleFactor = 1.0 / sqrt(max(integral, 1e-10)); + source *= scaleFactor; + if (source < -sourceLim || source > sourceLim) source = 0.0; + mean_check_new += source; + var_check_new += source * source; + nodes->SetLangevinSourceTerms(iPoint, iDim, source); + } + su2double mean_check_new_G = 0.0; + SU2_MPI::Allreduce(&mean_check_new, &mean_check_new_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + mean_check_new_G /= global_nPointLES; + for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { + su2double source_notSmoothed = nodes->GetLangevinSourceTermsOld(iPoint, iDim); + su2double source = nodes->GetLangevinSourceTerms(iPoint, iDim); + if (source_notSmoothed > 3.0*sourceLim) continue; + source -= mean_check_new_G; + nodes->SetLangevinSourceTerms(iPoint, iDim, source); + } + if (config->GetSBSParam().stochSourceDiagnostics) { + su2double mean_check_old_G = 0.0; + su2double mean_check_notSmoothed_G = 0.0; + su2double var_check_old_G = 0.0; + su2double var_check_new_G = 0.0; + su2double var_check_notSmoothed_G = 0.0; + SU2_MPI::Allreduce(&mean_check_old, &mean_check_old_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + SU2_MPI::Allreduce(&mean_check_notSmoothed, &mean_check_notSmoothed_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + SU2_MPI::Allreduce(&var_check_old, &var_check_old_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + SU2_MPI::Allreduce(&var_check_new, &var_check_new_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + SU2_MPI::Allreduce(&var_check_notSmoothed, &var_check_notSmoothed_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + mean_check_old_G /= global_nPointLES; + var_check_old_G /= global_nPointLES; + var_check_old_G -= mean_check_old_G * mean_check_old_G; + var_check_new_G /= global_nPointLES; + var_check_new_G -= mean_check_new_G * mean_check_new_G; + mean_check_notSmoothed_G /= global_nPointLES; + var_check_notSmoothed_G /= global_nPointLES; + var_check_notSmoothed_G -= mean_check_notSmoothed_G * mean_check_notSmoothed_G; + if (rank == MASTER_NODE) { + cout << "Mean of stochastic source term in Langevin equations: " << endl; + cout << " Uncorrelated --> " << mean_check_notSmoothed_G << endl; + cout << " Smoothed before scaling --> " << mean_check_old_G << endl; + cout << " Smoothed after scaling --> " << mean_check_new_G << " (subtracted from stochastic field to guarantee zero mean)" << endl; + cout << "Variance of stochastic source term in Langevin equations: " << endl; + cout << " Uncorrelated --> " << var_check_notSmoothed_G << endl; + cout << " Smoothed before scaling --> " << var_check_old_G << endl; + cout << " Smoothed after scaling --> " << var_check_new_G << endl; + cout << endl; + } + } + /*--- Converged or maximum number of iterations reached. ---*/ + break; + + } + } + } + +} + void CTurbSASolver::SetInletAtVertex(const su2double *val_inlet, unsigned short iMarker, unsigned long iVertex) { @@ -1583,7 +1955,8 @@ void CTurbSASolver::ComputeUnderRelaxationFactor(CSolver** solver_container, con SA_NEG model is more robust due to allowing for negative nu_tilde, so the under-relaxation is not applied to that variant. */ - if (config->GetSAParsedOptions().version == SA_OPTIONS::NEG) return; + if (config->GetSAParsedOptions().version == SA_OPTIONS::NEG || + config->GetSBSParam().StochasticBackscatter) return; /* Loop over the solution update given by relaxing the linear system for this nonlinear iteration. */ diff --git a/SU2_CFD/src/solvers/CTurbSolver.cpp b/SU2_CFD/src/solvers/CTurbSolver.cpp index 697b6d0a1c38..cdb75ab90807 100644 --- a/SU2_CFD/src/solvers/CTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSolver.cpp @@ -140,6 +140,11 @@ void CTurbSolver::LoadRestart(CGeometry** geometry, CSolver*** solver, CConfig* if (incompressible && ((!energy) && (!weakly_coupled_heat))) skipVars--; + /*--- Compute how many turbulence variables are present in the restart file. ---*/ + + unsigned short nVarInRestart = Restart_Vars[1] - skipVars; + if (nVarInRestart > nVar) nVarInRestart = nVar; + /*--- Load data from the restart into correct containers. ---*/ unsigned long counter = 0; @@ -154,7 +159,8 @@ void CTurbSolver::LoadRestart(CGeometry** geometry, CSolver*** solver, CConfig* offset in the buffer of data from the restart file and load it. ---*/ const auto index = counter * Restart_Vars[1] + skipVars; - for (auto iVar = 0u; iVar < nVar; iVar++) nodes->SetSolution(iPoint_Local, iVar, Restart_Data[index + iVar]); + for (auto iVar = 0u; iVar < nVarInRestart; iVar++) nodes->SetSolution(iPoint_Local, iVar, Restart_Data[index + iVar]); + for (auto iVar = nVarInRestart; iVar < nVar; iVar++) nodes->SetSolution(iPoint_Local, iVar, 0.0); /*--- Increment the overall counter for how many points have been loaded. ---*/ counter++; diff --git a/SU2_CFD/src/variables/CIncNSVariable.cpp b/SU2_CFD/src/variables/CIncNSVariable.cpp index f5201c92cb58..fd2cb97c60bc 100644 --- a/SU2_CFD/src/variables/CIncNSVariable.cpp +++ b/SU2_CFD/src/variables/CIncNSVariable.cpp @@ -37,6 +37,7 @@ CIncNSVariable::CIncNSVariable(su2double pressure, const su2double *velocity, su StrainMag.resize(nPoint); Tau_Wall.resize(nPoint) = su2double(-1.0); DES_LengthScale.resize(nPoint) = su2double(0.0); + lesMode.resize(nPoint) = su2double(0.0); Max_Lambda_Visc.resize(nPoint); /*--- Allocate memory for the AuxVar and its gradient. See e.g. CIncEulerSolver::Source_Residual: * Axisymmetric: total-viscosity * y-vel / y-coord diff --git a/SU2_CFD/src/variables/CNEMONSVariable.cpp b/SU2_CFD/src/variables/CNEMONSVariable.cpp index 37b020c0ba69..3ae287e9d4fc 100644 --- a/SU2_CFD/src/variables/CNEMONSVariable.cpp +++ b/SU2_CFD/src/variables/CNEMONSVariable.cpp @@ -70,6 +70,7 @@ CNEMONSVariable::CNEMONSVariable(su2double val_pressure, StrainMag.resize(nPoint) = su2double(0.0); Tau_Wall.resize(nPoint) = su2double(-1.0); DES_LengthScale.resize(nPoint) = su2double(0.0); + lesMode.resize(nPoint) = su2double(0.0); Roe_Dissipation.resize(nPoint) = su2double(0.0); Vortex_Tilting.resize(nPoint) = su2double(0.0); Max_Lambda_Visc.resize(nPoint) = su2double(0.0); diff --git a/SU2_CFD/src/variables/CNSVariable.cpp b/SU2_CFD/src/variables/CNSVariable.cpp index 33823bd5c789..ef8153194bc2 100644 --- a/SU2_CFD/src/variables/CNSVariable.cpp +++ b/SU2_CFD/src/variables/CNSVariable.cpp @@ -39,6 +39,7 @@ CNSVariable::CNSVariable(su2double density, const su2double *velocity, su2double StrainMag.resize(nPoint) = su2double(0.0); Tau_Wall.resize(nPoint) = su2double(-1.0); DES_LengthScale.resize(nPoint) = su2double(0.0); + lesMode.resize(nPoint) = su2double(0.0); Roe_Dissipation.resize(nPoint) = su2double(0.0); Vortex_Tilting.resize(nPoint) = su2double(0.0); Max_Lambda_Visc.resize(nPoint) = su2double(0.0); diff --git a/SU2_CFD/src/variables/CTurbSAVariable.cpp b/SU2_CFD/src/variables/CTurbSAVariable.cpp index de9c6d6bb481..4166e285b107 100644 --- a/SU2_CFD/src/variables/CTurbSAVariable.cpp +++ b/SU2_CFD/src/variables/CTurbSAVariable.cpp @@ -28,12 +28,22 @@ #include "../../include/variables/CTurbSAVariable.hpp" - CTurbSAVariable::CTurbSAVariable(su2double val_nu_tilde, su2double val_muT, unsigned long npoint, unsigned long ndim, unsigned long nvar, CConfig *config) : CTurbVariable(npoint, ndim, nvar, config) { - Solution_Old = Solution = val_nu_tilde; + /*--- Initialize solution (check if the Stochastic Backscatter Model is active) ---*/ + bool backscatter = config->GetSBSParam().StochasticBackscatter; + if (!(backscatter && config->GetSBSParam().SBS_Ctau > 0.0)) { + Solution_Old = Solution = val_nu_tilde; + } else { + for (unsigned long iPoint = 0; iPoint < nPoint; iPoint++) { + Solution_Old(iPoint, 0) = Solution(iPoint, 0) = val_nu_tilde; + for (unsigned long iVar = 1; iVar < nVar; iVar++) { + Solution_Old(iPoint, iVar) = Solution(iPoint, iVar) = 0.0; + } + } + } muT.resize(nPoint) = val_muT; @@ -48,6 +58,17 @@ CTurbSAVariable::CTurbSAVariable(su2double val_nu_tilde, su2double val_muT, unsi DES_LengthScale.resize(nPoint) = su2double(0.0); Vortex_Tilting.resize(nPoint); + + if (config->GetKind_HybridRANSLES() != NO_HYBRIDRANSLES) { + lesMode.resize(nPoint) = su2double(0.0); + if (backscatter) { + sbsInBox.resize(nPoint) = 1; + stochSource.resize(nPoint, nDim) = su2double(0.0); + stochSourceOld.resize(nPoint, nDim) = su2double(0.0); + besselIntegral.resize(nPoint) = su2double(0.0); + } + } + } void CTurbSAVariable::SetVortex_Tilting(unsigned long iPoint, CMatrixView PrimGrad_Flow, diff --git a/TestCases/TestCase.py b/TestCases/TestCase.py index d1d5568d400e..274179d63965 100644 --- a/TestCases/TestCase.py +++ b/TestCases/TestCase.py @@ -177,6 +177,15 @@ def run_test(self, with_tsan=False, with_asan=False, with_tapetests=False): workdir = os.getcwd() os.chdir(self.cfg_dir) print(os.getcwd()) + + if hasattr(self, "decompress") and self.decompress: + print("--- Decompressing grid file: " + self.grid_file + ".gz") + import gzip, shutil + with gzip.open(self.grid_file + ".gz", "rb") as f_in: + with open(self.grid_file, "wb") as f_out: + shutil.copyfileobj(f_in, f_out) + print("--- Decompression completed!") + start = datetime.datetime.now() process = subprocess.Popen(shell_command, shell=True) # This line launches SU2 diff --git a/TestCases/backscatter/backward_step/backwardStep.cfg b/TestCases/backscatter/backward_step/backwardStep.cfg new file mode 100644 index 000000000000..72a4304a467e --- /dev/null +++ b/TestCases/backscatter/backward_step/backwardStep.cfg @@ -0,0 +1,120 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: Backward-Facing Step % +% Author: Angelo Passariello % +% Institution: Italian Aerospace Research Centre (CIRA) % +% University of Naples Federico II % +% Date: 2026.03.16 % +% File Version 8.3.0 "Harrier" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% + +SOLVER= INC_RANS +KIND_TURB_MODEL= SA +MATH_PROBLEM= DIRECT +RESTART_SOL= NO + +% ----------- HYBRID RANS-LES SIMULATION --------------------------------------% + +HYBRID_RANSLES= SA_DDES +DES_CONST= 0.65 + +% ------------ STOCHASTIC BACKSCATTER MODEL DEFINITION ------------------------% + +STOCHASTIC_BACKSCATTER= YES +SBS_LENGTHSCALE_COEFF= 0.02 +SBS_MAX_ITER_SMOOTH= 100 +SBS_TIMESCALE_COEFF= 0.05 +SBS_INTENSITY_COEFF= 1.0 +SBS_FD_LOWER_THRESHOLD= 0.9 +SBS_RELAXATION_FACTOR= 0.0 +SBS_SOURCE_NU_EQUATION= YES +SBS_SOURCE_DIAGNOSTICS= NO +SBS_IN_BOX= YES +SBS_BOX_BOUNDS= ( -0.001, 0.025, -5000.0, 5000.0, -5000.0, 0.0375 ) + + +% ----------- INCOMPRESSIBLE FREE-STREAM DEFINITION ---------------------------% + +INC_DENSITY_INIT= 1.183 +INC_VELOCITY_INIT= ( 44.316, 0.0, 0.0 ) +INC_TEMPERATURE_INIT= 298.333 +INC_ENERGY_EQUATION= NO +INC_NONDIM= DIMENSIONAL +REYNOLDS_LENGTH= 0.0125 +VISCOSITY_MODEL= CONSTANT_VISCOSITY +MU_CONSTANT= 1.820E-5 + +% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% + +REF_LENGTH= 1.0 +REF_AREA= 1.0 + +% ------------------------- UNSTEADY SIMULATION -------------------------------% + +TIME_DOMAIN= YES +TIME_MARCHING= DUAL_TIME_STEPPING-2ND_ORDER +TIME_STEP= 2.82E-6 +INNER_ITER= 20 +TIME_ITER= 50000 +UNST_CFL_NUMBER= 0.0 + +% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% + +MARKER_HEATFLUX= ( WALL_TOP, 0.0, WALL_BOTTOM, 0.0 ) +INC_INLET_TYPE= VELOCITY_INLET +MARKER_INLET= ( INLET, 298.333, 44.316, 1.0, 0.0, 0.0 ) +INC_OUTLET_TYPE= PRESSURE_OUTLET +MARKER_OUTLET= ( OUTLET, 500.0 ) +MARKER_SYM= ( SYMMETRY_TOP, SYMMETRY_BOTTOM ) +MARKER_PERIODIC= ( Y-2, Y2, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.05, 0.0) +MARKER_PLOTTING= ( WALL_BOTTOM ) + +% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% + +NUM_METHOD_GRAD= GREEN_GAUSS +CFL_NUMBER= 2.0 +CFL_ADAPT= NO +RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) + +% ----------------------- SLOPE LIMITER DEFINITION ----------------------------% + +MUSCL_FLOW= NO +MUSCL_TURB= NO + +% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% +% +% +CONV_NUM_METHOD_FLOW= LD2 +JST_SENSOR_COEFF= ( 0.0, 0.002 ) +TIME_DISCRE_FLOW= EULER_IMPLICIT + +% -------------------- TURBULENT NUMERICAL METHOD DEFINITION ------------------% +% +CONV_NUM_METHOD_TURB= SCALAR_UPWIND +TIME_DISCRE_TURB= EULER_IMPLICIT + +% --------------------------- CONVERGENCE PARAMETERS --------------------------% +% +CONV_RESIDUAL_MINVAL= -15 +CONV_STARTITER= 0 +CONV_CAUCHY_ELEMS= 100 +CONV_CAUCHY_EPS= 1E-6 + +% ------------------------- INPUT/OUTPUT INFORMATION --------------------------% +% +MESH_FILENAME= backward_step +TABULAR_FORMAT= CSV +CONV_FILENAME= history +RESTART_FILENAME= restart_flow +VOLUME_FILENAME= flow +VOLUME_OUTPUT= ( COORDINATES, SOLUTION, PRIMITIVE, LES_SENSOR, VORTEX_IDENTIFICATION, TIME_AVERAGE, BACKSCATTER, DES_LENGTHSCALE) +HISTORY_OUTPUT= (ITER, RMS_PRESSURE, RMS_VELOCITY-X, RMS_VELOCITY-Y, RMS_VELOCITY-Z, RMS_NU_TILDE, RMS_STOCH_VAR-X, RMS_STOCH_VAR-Y, RMS_STOCH_VAR-Z) +SCREEN_OUTPUT= (ITER, RMS_PRESSURE, RMS_VELOCITY-X, RMS_VELOCITY-Y, RMS_VELOCITY-Z, RMS_NU_TILDE, RMS_STOCH_VAR-X, RMS_STOCH_VAR-Y, RMS_STOCH_VAR-Z) +HISTORY_WRT_FREQ_INNER= 10 +SCREEN_WRT_FREQ_INNER= 10 +OUTPUT_WRT_FREQ= 1000 +OUTPUT_FILES= (RESTART, PARAVIEW, SURFACE_PARAVIEW) diff --git a/TestCases/ddes/flatplate/ddes_flatplate.cfg b/TestCases/ddes/flatplate/ddes_flatplate.cfg index a65727ab04d1..b851ea550523 100644 --- a/TestCases/ddes/flatplate/ddes_flatplate.cfg +++ b/TestCases/ddes/flatplate/ddes_flatplate.cfg @@ -41,7 +41,7 @@ TIME_MARCHING= DUAL_TIME_STEPPING-2ND_ORDER % % U_inf = 69.4448 - dt*=0.02 - dt=0.000288 TIME_STEP= 0.000288 -MAX_TIME= 20.0 +MAX_TIME= 10 UNST_CFL_NUMBER= 0.0 INNER_ITER= 20 @@ -61,7 +61,7 @@ CFL_NUMBER= 10.0 CFL_ADAPT= NO CFL_ADAPT_PARAM= ( 1.5, 0.5, 1.0, 100.0 ) RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) -TIME_ITER= 10 +TIME_ITER= 500 % ----------------------- SLOPE LIMITER DEFINITION ----------------------------% % diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 588299a4e0fa..50d2f7858fee 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -491,7 +491,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.078819, 0.027586, -0.001283, -0.000359] + aeroelastic.test_vals = [0.076965, 0.027533, -0.001374, -0.000299] aeroelastic.test_vals_aarch64 = [0.074170, 0.027590, -0.001579, -0.000160] aeroelastic.unsteady = True aeroelastic.enabled_on_cpu_arch = ["x86_64"] # Requires AVX-capable architecture diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 9439c82683c6..7f8d47d66bb7 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -791,7 +791,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.345527, 1.448384, 1.208659, -0.846424, 1.271466, 0.497507, 0] + 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_aarch64 = [-1.345593, 1.448310, 1.208721, -0.846597, 1.248410, 0.489117, 0.000000] test_list.append(turbmod_sa_neg_rae2822) @@ -1068,6 +1068,17 @@ def main(): ddes_flatplate.unsteady = True test_list.append(ddes_flatplate) + # Stochastic BackScatter (SBS) model + sbs_backward_step = TestCase('sbs_backward_step') + sbs_backward_step.cfg_dir = "backscatter/backward_step" + sbs_backward_step.cfg_file = "backwardStep.cfg" + sbs_backward_step.test_iter = 3 + sbs_backward_step.test_vals = [-6.352884, -3.465372, -5.507901, -3.906545, -9.506305, -6.365236, -6.331021, -6.331028] + sbs_backward_step.unsteady = True + sbs_backward_step.decompress = True + sbs_backward_step.grid_file = "backward_step.su2" + test_list.append(sbs_backward_step) + # unsteady pitching NACA0015, SA unst_inc_turb_naca0015_sa = TestCase('unst_inc_turb_naca0015_sa') unst_inc_turb_naca0015_sa.cfg_dir = "unsteady/pitching_naca0015_rans_inc" diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index cfb026fd9001..8ef91c3ed198 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -302,7 +302,7 @@ def main(): tutorial_unst_naca0012.cfg_dir = "../Tutorials/compressible_flow/Unsteady_NACA0012" tutorial_unst_naca0012.cfg_file = "unsteady_naca0012.cfg" tutorial_unst_naca0012.test_iter = 520 - tutorial_unst_naca0012.test_vals = [520, 0, -5.299278, 0, 0.294686, 0.745764, 0.003498, 0.016637] + tutorial_unst_naca0012.test_vals = [520, 0, -5.294874, 0, 0.307437, 0.796981, 0.000921, 0.006756] tutorial_unst_naca0012.test_vals_aarch64 = [520, 0, -5.292359, 0, 0.284720, 0.766329, 0.000954, 0.007565] tutorial_unst_naca0012.unsteady = True test_list.append(tutorial_unst_naca0012) diff --git a/UnitTests/Common/toolboxes/random_toolbox_tests.cpp b/UnitTests/Common/toolboxes/random_toolbox_tests.cpp new file mode 100644 index 000000000000..137ab61a059c --- /dev/null +++ b/UnitTests/Common/toolboxes/random_toolbox_tests.cpp @@ -0,0 +1,55 @@ +/*! + * \file random_toolbox_tests.cpp + * \brief Unit tests for the random toolbox. + * \author A. Passariello + * \version 8.4.0 "Harrier" + * + * SU2 Project Website: https://su2code.github.io + * + * The SU2 Project is maintained by the SU2 Foundation + * (http://su2foundation.org) + * + * Copyright 2012-2026, SU2 Contributors + * + * SU2 is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * SU2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with SU2. If not, see . + */ + +#include "catch.hpp" +#include +#include "../../Common/include/toolboxes/random_toolbox.hpp" + +TEST_CASE("HashToUniform", "[Toolboxes]") { + /*--- Basic checks: no zero, no >1 ---*/ + uint64_t simple_values[] = {0ULL, 1ULL, 123ULL, UINT64_MAX}; + for (auto v : simple_values) { + auto u = RandomToolbox::HashToUniform(v); + CHECK(u > 0.0); + CHECK(u <= 1.0); + } + + /*--- Worst-case mantissa: top 53 bits set to 1 ---*/ + uint64_t x = (uint64_t(-1) >> 11) << 11; // force top 53 bits = all ones + x |= 0x7FF; // set lower bits to avoid masking issues + + double u = RandomToolbox::HashToUniform(x); + + CHECK(u > 0.0); + CHECK(u <= 1.0); + + /*--- Check exact theoretical min and max ---*/ + constexpr double inv53 = 1.0 / 9007199254740992.0; + + CHECK(RandomToolbox::HashToUniform(0ULL) == Approx(inv53)); + CHECK(RandomToolbox::HashToUniform(UINT64_MAX) == Approx(1.0)); +} diff --git a/UnitTests/meson.build b/UnitTests/meson.build index 40b54cf69717..76eecd1dc57c 100644 --- a/UnitTests/meson.build +++ b/UnitTests/meson.build @@ -16,7 +16,8 @@ su2_cfd_tests = files(['Common/geometry/primal_grid/CPrimalGrid_tests.cpp', 'SU2_CFD/numerics/CNumerics_tests.cpp', 'SU2_CFD/fluid/CFluidModel_tests.cpp', 'SU2_CFD/gradients.cpp', - 'SU2_CFD/windowing.cpp']) + 'SU2_CFD/windowing.cpp', + 'Common/toolboxes/random_toolbox_tests.cpp']) # Reverse-mode (algorithmic differentiation) tests: su2_cfd_tests_ad = files(['Common/simple_ad_test.cpp', diff --git a/config_template.cfg b/config_template.cfg index f5fbdeb96dc2..ee7618e13734 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -180,7 +180,46 @@ HYBRID_RANSLES= SA_DDES % % DES Constant (0.65) DES_CONST= 0.65 - +% +% User-specified LES filter width (if negative, it is computed based on the local cell size, default -1.0) +LES_FILTER_WIDTH= -1.0 +% +% Stochastic Backscatter Model (NO, YES) +STOCHASTIC_BACKSCATTER= NO +% +% Backscatter lengthscale coefficient (0.1) +SBS_LENGTHSCALE_COEFF= 0.02 +% +% Maximum number of smoothing iterations for SBS model (100) +SBS_MAX_ITER_SMOOTH= 100 +% +% Backscatter timescale coefficient (0.05) +SBS_TIMESCALE_COEFF= 0.05 +% +% Backscatter intensity coefficient (1.0) +SBS_INTENSITY_COEFF= 1.0 +% +% Shielding function lower threshold for application of Stochastic Backscatter Model (0.9) +SBS_FD_LOWER_THRESHOLD= 0.9 +% +% Relaxation factor for the stochastic source term in the main balance equations (0.0) +SBS_RELAXATION_FACTOR= 0.0 +% +% Include stochastic source in turbulence model equation (NO, YES) +SBS_SOURCE_NU_EQUATION= YES +% +% Include diagnostics of the stochastic source term in Langevin equations (NO, YES) +SBS_SOURCE_DIAGNOSTICS= NO +% +% Apply Stochastic Backscatter Model only in a bounded box (NO, YES) +SBS_IN_BOX= NO +% +% Bounds of the box where the Stochastic Backscatter Model is activated (x_min, x_max, y_min, y_max, z_min, z_max) +SBS_BOX_BOUNDS= (0.0, 0.0, 0.0, 0.0, 0.0, 0.0) +% +% Enforce LES mode in Hybrid RANS-LES Simulations (NO, YES) +ENFORCE_LES= NO +% % -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------% % % Mach number (non-dimensional, based on the free-stream values) @@ -1673,7 +1712,7 @@ SMOOTH_GEOMETRY= 0 % % Convective numerical method (JST, JST_KE, JST_MAT, LAX-FRIEDRICH, ROE, AUSM, % AUSMPLUSUP, AUSMPLUSUP2, AUSMPLUSM, HLLC, TURKEL_PREC, -% SW, MSW, FDS, SLAU, SLAU2, L2ROE, LMROE) +% SW, MSW, FDS, SLAU, SLAU2, L2ROE, LMROE, LD2) CONV_NUM_METHOD_FLOW= ROE % % Roe Low Dissipation function for Hybrid RANS/LES simulations (FD, NTS, NTS_DUCROS) From f3d5be3245c4e4b7df323908b0289ce22af98822 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Fri, 24 Apr 2026 08:13:55 +0200 Subject: [PATCH 220/229] build ADT only if necessary (#2794) --- SU2_CFD/src/output/CFlowOutput.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index 86ce4213848f..7b6ae71b4873 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -854,7 +854,7 @@ void CFlowOutput::SetCustomOutputs(const CSolver* const* solver, const CGeometry /*--- Build ADT for probe nearest neighbor search if heuristic suggests it. ---*/ std::unique_ptr probeADT; - if (useADT) { + auto BuildADT = [&]() { const unsigned long nPointDomain = geometry->GetnPointDomain(); vector coords(nDim * nPointDomain); vector pointIDs(nPointDomain); @@ -868,7 +868,7 @@ void CFlowOutput::SetCustomOutputs(const CSolver* const* solver, const CGeometry /*--- Build global ADT to find nearest nodes across all ranks. ---*/ probeADT = std::make_unique(nDim, nPointDomain, coords.data(), pointIDs.data(), true); - } + }; for (auto& output : customOutputs) { if (output.skip) continue; @@ -907,6 +907,8 @@ void CFlowOutput::SetCustomOutputs(const CSolver* const* solver, const CGeometry int rank; SU2_MPI::Comm_rank(SU2_MPI::GetComm(), &rank); + if (useADT && !probeADT) BuildADT(); + if (useADT && probeADT && !probeADT->IsEmpty()) { /*--- Use ADT to find the nearest node efficiently (O(log n) instead of O(n)). ---*/ probeADT->DetermineNearestNode(coord, minDist, minPoint, rankID); @@ -1794,11 +1796,11 @@ void CFlowOutput::LoadSurfaceData(CConfig *config, CGeometry *geometry, CSolver SetVolumeOutputValue("SKIN_FRICTION-Z", iPoint, solver[FLOW_SOL]->GetCSkinFriction(iMarker, iVertex, 2)); SetVolumeOutputValue("HEAT_FLUX", iPoint, solver[heat_sol]->GetHeatFlux(iMarker, iVertex)); SetVolumeOutputValue("Y_PLUS", iPoint, solver[FLOW_SOL]->GetYPlus(iMarker, iVertex)); - + if (config->GetTime_Domain()) { SetAvgVolumeOutputValue("MEAN_SKIN_FRICTION-X", iPoint, solver[FLOW_SOL]->GetCSkinFriction(iMarker, iVertex, 0)); SetAvgVolumeOutputValue("MEAN_SKIN_FRICTION-Y", iPoint, solver[FLOW_SOL]->GetCSkinFriction(iMarker, iVertex, 1)); - if (nDim == 3) + if (nDim == 3) SetAvgVolumeOutputValue("MEAN_SKIN_FRICTION-Z", iPoint, solver[FLOW_SOL]->GetCSkinFriction(iMarker, iVertex, 2)); } } From ae3a481979bea4069b6d4a2c5c4a1da33b959dd7 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Fri, 24 Apr 2026 18:42:23 +0200 Subject: [PATCH 221/229] Option to use level scheduling for OMP parallelization of ILU (#2793) * use levels for FE connectivity * config option and template etc. * fix * try to fix ARM 64 warning * Apply suggestion from @pcarruscag * regressions --- Common/include/CConfig.hpp | 6 + Common/include/linear_algebra/CSysMatrix.hpp | 15 +- Common/include/toolboxes/graph_toolbox.hpp | 29 +- Common/src/CConfig.cpp | 16 +- Common/src/geometry/CGeometry.cpp | 2 +- Common/src/linear_algebra/CSysMatrix.cpp | 271 +++++++++++-------- TestCases/hybrid_regression.py | 4 +- config_template.cfg | 7 + 8 files changed, 223 insertions(+), 127 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index aa9ed32fc4eb..7ab77bafeeab 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -645,6 +645,7 @@ class CConfig { unsigned long Linear_Solver_Restart_Deflation; /*!< \brief Number of vectors used for deflated restarts. */ unsigned long Linear_Solver_Prec_Threads; /*!< \brief Number of threads per rank for ILU and LU_SGS preconditioners. */ unsigned short Linear_Solver_ILU_n; /*!< \brief ILU fill=in level. */ + bool Linear_Solver_ILU_levels; /*!< \brief Use level scheduling for OMP parallelization of ILU. */ su2double SemiSpan; /*!< \brief Wing Semi span. */ su2double MSW_Alpha; /*!< \brief Coefficient for blending states in the MSW scheme. */ su2double Roe_Kappa; /*!< \brief Relaxation of the Roe scheme. */ @@ -4377,6 +4378,11 @@ class CConfig { */ unsigned short GetLinear_Solver_ILU_n(void) const { return Linear_Solver_ILU_n; } + /*! + * \brief Get whether to use level scheduling for OMP parallelization of ILU. + */ + bool GetLinear_Solver_ILU_levels(void) const { return Linear_Solver_ILU_levels; } + /*! * \brief Get restart frequency of the linear solver for the implicit formulation. * \return Restart frequency of the linear solver for the implicit formulation. diff --git a/Common/include/linear_algebra/CSysMatrix.hpp b/Common/include/linear_algebra/CSysMatrix.hpp index 96344853a7ba..bc869adcbf53 100644 --- a/Common/include/linear_algebra/CSysMatrix.hpp +++ b/Common/include/linear_algebra/CSysMatrix.hpp @@ -28,9 +28,10 @@ #pragma once -#include "../../include/CConfig.hpp" +#include "../CConfig.hpp" #include "CSysVector.hpp" #include "CPastixWrapper.hpp" +#include "../toolboxes/graph_toolbox.hpp" #include #include @@ -120,10 +121,9 @@ class CSysMatrix { const int rank; /*!< \brief MPI Rank. */ const int size; /*!< \brief MPI Size. */ - enum : size_t { - MAXNVAR = 20 - }; /*!< \brief Maximum number of variables the matrix can handle. The static - size is needed for fast, per-thread, static memory allocation. */ + /*!< \brief Maximum number of variables the matrix can handle. The static + * size is needed for fast, per-thread, static memory allocation. */ + enum : size_t { MAXNVAR = 20 }; enum { OMP_MAX_SIZE_L = 8192 }; /*!< \brief Max. chunk size used in light parallel for loops. */ enum { OMP_MAX_SIZE_H = 512 }; /*!< \brief Max. chunk size used in heavy parallel for loops. */ @@ -158,7 +158,10 @@ class CSysMatrix { const unsigned long* col_ind_ilu; /*!< \brief Column index for each of the elements in val() (ILU). */ unsigned short ilu_fill_in; /*!< \brief Fill in level for the ILU preconditioner. */ - ScalarType* invM; /*!< \brief Inverse of (Jacobi) preconditioner, or diagonal of ILU. */ + /*!< \brief Level structure for alternative shared memory parallelization of ILU. */ + CCompressedSparsePatternUL levels_ilu; + + ScalarType* invM; /*!< \brief Inverse of (Jacobi) preconditioner. */ /*--- Temporary (hence mutable) working memory used in the Linelet preconditioner, outer vector is for threads ---*/ mutable vector > diff --git a/Common/include/toolboxes/graph_toolbox.hpp b/Common/include/toolboxes/graph_toolbox.hpp index accfa9431ae8..c90e3012921a 100644 --- a/Common/include/toolboxes/graph_toolbox.hpp +++ b/Common/include/toolboxes/graph_toolbox.hpp @@ -516,7 +516,7 @@ T colorSparsePattern(const T& pattern, size_t groupSize = 1, bool includeOuterId { /*--- For each color keep track of the inner indices that are in it. ---*/ - std::vector > innerInColor; + std::vector> innerInColor; innerInColor.emplace_back(nInner, false); /*--- Order in which we look for space in the colors to insert a new group. ---*/ @@ -672,4 +672,31 @@ su2double coloringEfficiency(const SparsePattern& coloring, int numThreads, int return ideal / real; } +/*! + * \brief Compute the levels for the lower part of a sparse pattern. + * For example, corresponding to the dependencies of forward substitution. + */ +template +T computeLevels(const T& pattern) { + using Index = typename T::IndexType; + + std::vector> levels; + { + const auto n = pattern.getOuterSize(); + su2vector level(n); + for (Index i = 0; i < n; ++i) { + level(i) = 0; + for (const auto j : pattern.getInnerIter(i)) { + if (j >= i) continue; + level(i) = std::max(level(i), level(j) + 1); + } + if (static_cast(level(i) + 1) > levels.size()) { + levels.emplace_back(); + } + levels[level(i)].push_back(i); + } + } + return T(levels); +} + /// @} diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 2ffc04543383..d2f0a0a9d409 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -244,7 +244,7 @@ CConfig::CConfig(char case_filename[MAX_STRING_SIZE], CConfig *config) { /*--- Update original config file ---*/ if (runtime_file) { - if (all_options.find("TIME_ITER") == all_options.end()) + if (OptionIsSet("TIME_ITER")) config->SetnTime_Iter(nTimeIter); } } @@ -1896,6 +1896,8 @@ void CConfig::SetConfig_Options() { addUnsignedLongOption("LINEAR_SOLVER_ITER", Linear_Solver_Iter, 10); /* DESCRIPTION: Fill in level for the ILU preconditioner */ addUnsignedShortOption("LINEAR_SOLVER_ILU_FILL_IN", Linear_Solver_ILU_n, 0); + /* DESCRIPTION: Use level scheduling for OMP parallelization of the ILU preconditioner */ + addBoolOption("LINEAR_SOLVER_ILU_LEVEL_SCHEDULING", Linear_Solver_ILU_levels, false); /* DESCRIPTION: Maximum number of iterations of the linear solver for the implicit formulation */ addUnsignedLongOption("LINEAR_SOLVER_RESTART_FREQUENCY", Linear_Solver_Restart_Frequency, 10); /* DESCRIPTION: Number of vectors used for deflated restarts */ @@ -4047,7 +4049,13 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i /*--- Set the number of external iterations to 1 for the steady state problem ---*/ - if (Kind_Solver == MAIN_SOLVER::FEM_ELASTICITY) nMGLevels = 0; + if (Kind_Solver == MAIN_SOLVER::FEM_ELASTICITY) { + nMGLevels = 0; + if (!OptionIsSet("LINEAR_SOLVER_ILU_LEVEL_SCHEDULING")) { + /*--- Different default behavior for this solver type. ---*/ + Linear_Solver_ILU_levels = true; + } + } Radiation = (Kind_Radiation != RADIATION_MODEL::NONE); @@ -5746,11 +5754,11 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i /*--- Check that spark ignition has required parameters defined ---*/ if (flamelet_ParsedOptions.ignition_method == FLAMELET_INIT_TYPE::SPARK) { /*--- Check if SPARK_INIT was explicitly set in config file ---*/ - if (all_options.find("SPARK_INIT") != all_options.end()) { + if (!OptionIsSet("SPARK_INIT")) { SU2_MPI::Error("FLAME_INIT_METHOD= SPARK requires SPARK_INIT to be defined in the config file.", CURRENT_FUNCTION); } /*--- Check if SPARK_REACTION_RATES was explicitly set in config file ---*/ - if (all_options.find("SPARK_REACTION_RATES") != all_options.end()) { + if (!OptionIsSet("SPARK_REACTION_RATES")) { SU2_MPI::Error("FLAME_INIT_METHOD= SPARK requires SPARK_REACTION_RATES to be defined in the config file.", CURRENT_FUNCTION); } if (flamelet_ParsedOptions.nspark < flamelet_ParsedOptions.n_scalars) { diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index b99ef022752f..83964c117ac3 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -4524,7 +4524,7 @@ su2double NearestNeighborDistance(CGeometry* geometry, const CConfig* config, co * Compute an alternative distance based on volume and wall area. ---*/ const auto nDim = geometry->GetnDim(); - su2double Normal[3] = {}; + su2double Normal[3] = {0, 0, 0}; for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (!config->GetViscous_Wall(iMarker)) continue; diff --git a/Common/src/linear_algebra/CSysMatrix.cpp b/Common/src/linear_algebra/CSysMatrix.cpp index c508e9ef7687..478d4d7ede69 100644 --- a/Common/src/linear_algebra/CSysMatrix.cpp +++ b/Common/src/linear_algebra/CSysMatrix.cpp @@ -184,6 +184,10 @@ void CSysMatrix::Initialize(unsigned long npoint, unsigned long npoi col_ind_ilu = csr_ilu.innerIdx(); dia_ptr_ilu = csr_ilu.diagPtr(); nnz_ilu = csr_ilu.getNumNonZeros(); + + if (omp_get_max_threads() > 1 && config->GetLinear_Solver_ILU_levels()) { + levels_ilu = computeLevels(csr_ilu); + } } /*--- Preconditioners. ---*/ @@ -682,163 +686,204 @@ void CSysMatrix::ComputeJacobiPreconditioner(const CSysVector void CSysMatrix::BuildILUPreconditioner() { - SU2_ZONE_SCOPED - /*--- OpenMP Parallelization, a loop construct is used to ensure - * the preconditioner is computed correctly even if called - * outside of a parallel section. ---*/ - - SU2_OMP_FOR_STAT(1) - for (unsigned long thread = 0; thread < omp_num_parts; ++thread) { - const auto begin = omp_partitions[thread]; - const auto end = omp_partitions[thread + 1]; - if (begin == end) continue; - - /*--- Each thread will work on the submatrix defined from row/col "begin" - * to row/col "end-1" (i.e. the range [begin,end[). Which is exactly - * what the MPI-only implementation does. ---*/ - - const auto blockSize = nVar * nVar; - ScalarType Lij[MAXNVAR * MAXNVAR], Lij_Ujk[MAXNVAR * MAXNVAR]; - - /*--- Copy block matrix to compute factorization in-place. ---*/ - auto InitIluRow = [&](const auto iRow) { - if (ilu_fill_in == 0) { - /*--- ILU0, direct copy to initialize. ---*/ - const auto begin = row_ptr_ilu[iRow] * blockSize; - const auto end = row_ptr_ilu[iRow + 1] * blockSize; - SU2_OMP_SIMD - for (unsigned long k = begin; k < end; k++) ILU_matrix[k] = matrix[k]; - return; - } - /*--- ILUn, clear or copy the entries of the matrix. ---*/ - auto indexMat = row_ptr[iRow]; - const auto endMat = row_ptr[iRow + 1]; - for (auto index = row_ptr_ilu[iRow]; index < row_ptr_ilu[iRow + 1];) { - const auto jPoint = col_ind_ilu[index]; - const auto jPointMat = col_ind[indexMat]; - if (jPoint < jPointMat || indexMat == endMat) { - /*--- ILU column has not caught up with matrix column or all matrix columns were used. ---*/ - ZeroMatrix(&ILU_matrix[index * blockSize]); + const auto blockSize = nVar * nVar; + ScalarType Lij[MAXNVAR * MAXNVAR], Lij_Ujk[MAXNVAR * MAXNVAR]; + + /*--- Helper to copy block matrix to compute factorization in-place. ---*/ + auto InitIluRow = [&](const auto iPoint) { + if (ilu_fill_in == 0) { + /*--- ILU0, direct copy to initialize. ---*/ + const auto begin = row_ptr_ilu[iPoint] * blockSize; + const auto end = row_ptr_ilu[iPoint + 1] * blockSize; + SU2_OMP_SIMD + for (unsigned long k = begin; k < end; ++k) ILU_matrix[k] = matrix[k]; + return; + } + /*--- ILUn, clear or copy the entries of the matrix. ---*/ + auto indexMat = row_ptr[iPoint]; + const auto endMat = row_ptr[iPoint + 1]; + for (auto index = row_ptr_ilu[iPoint]; index < row_ptr_ilu[iPoint + 1];) { + const auto jPoint = col_ind_ilu[index]; + const auto jPointMat = col_ind[indexMat]; + if (jPoint < jPointMat || indexMat == endMat) { + /*--- ILU column has not caught up with matrix column or all matrix columns were used. ---*/ + ZeroMatrix(&ILU_matrix[index * blockSize]); + ++index; + } else { + /*--- Columns match, copy the matrix block. ---*/ + if (jPoint == jPointMat) { + MatrixCopy(&matrix[indexMat * blockSize], &ILU_matrix[index * blockSize]); ++index; - } else { - /*--- Columns match, copy the matrix block. ---*/ - if (jPoint == jPointMat) { - MatrixCopy(&matrix[indexMat * blockSize], &ILU_matrix[index * blockSize]); - ++index; - } - /*--- We've either copied the matrix column or it has not caught up with the ILU column. ---*/ - ++indexMat; } + /*--- We've either copied the matrix column or it has not caught up with the ILU column. ---*/ + ++indexMat; } - }; - InitIluRow(begin); + } + }; - for (auto iPoint = begin + 1; iPoint < end; iPoint++) { - InitIluRow(iPoint); + /*--- Update one row of the LU matrix. ---*/ + auto BuildIluRow = [&](const auto iPoint, const auto begin, const auto end) { + /*--- For this row (unknown), loop over its lower diagonal entries. ---*/ - /*--- Invert and store the previous diagonal block to compute the lower entries. ---*/ + for (auto index = row_ptr_ilu[iPoint]; index < dia_ptr_ilu[iPoint]; ++index) { + /*--- jPoint is the column index (jPoint < iPoint). ---*/ - InvertDiagonalBlockILUMatrix(iPoint - 1); + const auto jPoint = col_ind_ilu[index]; - /*--- For this row (unknown), loop over its lower diagonal entries. ---*/ + /*--- We only care about the sub matrix within "begin" and "end-1". ---*/ - for (auto index = row_ptr_ilu[iPoint]; index < dia_ptr_ilu[iPoint]; index++) { - /*--- jPoint is the column index (jPoint < iPoint). ---*/ + if (jPoint < begin) continue; - auto jPoint = col_ind_ilu[index]; + /*--- Multiply the block by the inverse of the corresponding diagonal block. ---*/ - /*--- We only care about the sub matrix within "begin" and "end-1". ---*/ + auto* Block_ij = &ILU_matrix[index * blockSize]; + const auto* invUjj = &ILU_matrix[dia_ptr_ilu[jPoint] * blockSize]; + MatrixMatrixProduct(Block_ij, invUjj, Lij); - if (jPoint < begin) continue; + /*--- Lij holds Aij*inv(Ujj). Jump to the upper part of the jPoint row. ---*/ - /*--- Multiply the block by the inverse of the corresponding diagonal block. ---*/ + for (auto index_ = dia_ptr_ilu[jPoint] + 1; index_ < row_ptr_ilu[jPoint + 1]; ++index_) { + /*--- Get the column index (kPoint > jPoint). ---*/ - auto Block_ij = &ILU_matrix[index * blockSize]; - const auto invUjj = &ILU_matrix[dia_ptr_ilu[jPoint] * blockSize]; - MatrixMatrixProduct(Block_ij, invUjj, Lij); + const auto kPoint = col_ind_ilu[index_]; + if (kPoint >= end) break; - /*--- Lij holds Aij*inv(Ujj). Jump to the upper part of the jPoint row. ---*/ + /*--- If Aik exists, update it: Aik -= Lij * Ujk ---*/ - for (auto index_ = dia_ptr_ilu[jPoint] + 1; index_ < row_ptr_ilu[jPoint + 1]; index_++) { - /*--- Get the column index (kPoint > jPoint). ---*/ + auto* Block_ik = GetBlock_ILUMatrix(iPoint, kPoint); + if (Block_ik == nullptr) continue; - auto kPoint = col_ind_ilu[index_]; + const auto* Ujk = &ILU_matrix[index_ * blockSize]; + MatrixMatrixProduct(Lij, Ujk, Lij_Ujk); + MatrixSubtraction(Block_ik, Lij_Ujk, Block_ik); + } - if (kPoint >= end) break; + /*--- Store Lij in the lower triangular part. ---*/ + MatrixCopy(Lij, Block_ij); + } - /*--- If Aik exists, update it: Aik -= Lij * Ujk ---*/ + /*--- Invert the diagonal entry, Uii, for the next rows. ---*/ + InvertDiagonalBlockILUMatrix(iPoint); + }; - auto Block_ik = GetBlock_ILUMatrix(iPoint, kPoint); + if (levels_ilu.empty()) { + /*--- Each OMP thread will work on the submatrix defined from + * row/col "begin" to row/col "end-1" (i.e. the range [begin,end[). + * Which is exactly what the MPI-only implementation does. ---*/ + SU2_OMP_FOR_STAT(1) + for (unsigned long thread = 0; thread < omp_num_parts; ++thread) { + const auto begin = omp_partitions[thread]; + const auto end = omp_partitions[thread + 1]; + if (begin == end) continue; + + InitIluRow(begin); + InvertDiagonalBlockILUMatrix(begin); + + for (auto iPoint = begin + 1; iPoint < end; iPoint++) { + InitIluRow(iPoint); + BuildIluRow(iPoint, begin, end); + } + } + END_SU2_OMP_FOR + } else { + /*--- OMP threads work on each level together before moving to the next. + * Levels are determined such that rows in a level only depend on rows + * from previous levels. ---*/ - if (Block_ik != nullptr) { - const auto Ujk = &ILU_matrix[index_ * blockSize]; - MatrixMatrixProduct(Lij, Ujk, Lij_Ujk); - MatrixSubtraction(Block_ik, Lij_Ujk, Block_ik); - } - } + SU2_OMP_FOR_(schedule(static)) + for (auto k = 0ul; k < levels_ilu.getNumNonZeros(0); ++k) { + const auto iPoint = levels_ilu.getInnerIdx(0, k); + InitIluRow(iPoint); + InvertDiagonalBlockILUMatrix(iPoint); + } + END_SU2_OMP_FOR - /*--- Lastly, store Lij in the lower triangular part. ---*/ - SU2_OMP_SIMD - for (auto iVar = 0ul; iVar < blockSize; ++iVar) Block_ij[iVar] = Lij[iVar]; + for (auto level = 1ul; level < levels_ilu.getOuterSize(); ++level) { + SU2_OMP_FOR_(schedule(static)) + for (auto k = 0ul; k < levels_ilu.getNumNonZeros(level); ++k) { + const auto iPoint = levels_ilu.getInnerIdx(level, k); + InitIluRow(iPoint); + BuildIluRow(iPoint, 0ul, nPointDomain); } + END_SU2_OMP_FOR } - InvertDiagonalBlockILUMatrix(end - 1); } - END_SU2_OMP_FOR } template void CSysMatrix::ComputeILUPreconditioner(const CSysVector& vec, CSysVector& prod, CGeometry* geometry, const CConfig* config) const { - SU2_ZONE_SCOPED /*--- Coherent view of vectors. ---*/ SU2_OMP_BARRIER - /*--- OpenMP Parallelization ---*/ - SU2_OMP_FOR_STAT(1) - for (unsigned long thread = 0; thread < omp_num_parts; ++thread) { - const auto begin = omp_partitions[thread]; - const auto end = omp_partitions[thread + 1]; - if (begin == end) continue; + const auto blockSize = nVar * nVar; - ScalarType aux_vec[MAXNVAR]; + /*--- Forward solve the system using the lower matrix entries + * that were computed and stored during the ILU preprocessing. + * Note that we are overwriting the prod vector as we go. ---*/ - /*--- Copy vector to then work on prod in place ---*/ + auto ForwardSolve = [&](const auto iPoint, const auto begin) { + for (auto iVar = 0ul; iVar < nVar; ++iVar) prod(iPoint, iVar) = vec(iPoint, iVar); + + for (auto index = row_ptr_ilu[iPoint]; index < dia_ptr_ilu[iPoint]; ++index) { + const auto jPoint = col_ind_ilu[index]; + if (jPoint < begin) continue; + const auto* Block_ij = &ILU_matrix[index * blockSize]; + MatrixVectorProductSub(Block_ij, &prod[jPoint * nVar], &prod[iPoint * nVar]); + } + }; - for (auto iVar = begin * nVar; iVar < end * nVar; iVar++) prod[iVar] = vec[iVar]; + auto BackwardSolve = [&](const auto iPoint, const auto end) { + ScalarType aux_vec[MAXNVAR]; + for (auto iVar = 0ul; iVar < nVar; ++iVar) aux_vec[iVar] = prod(iPoint, iVar); - /*--- Forward solve the system using the lower matrix entries that - were computed and stored during the ILU preprocessing. Note - that we are overwriting the residual vector as we go. ---*/ + const auto* invUii = &ILU_matrix[dia_ptr_ilu[iPoint] * blockSize]; - for (auto iPoint = begin + 1; iPoint < end; iPoint++) { - for (auto index = row_ptr_ilu[iPoint]; index < dia_ptr_ilu[iPoint]; index++) { - auto jPoint = col_ind_ilu[index]; - if (jPoint < begin) continue; - auto Block_ij = &ILU_matrix[index * nVar * nVar]; - MatrixVectorProductSub(Block_ij, &prod[jPoint * nVar], &prod[iPoint * nVar]); - } + for (auto index = dia_ptr_ilu[iPoint] + 1; index < row_ptr_ilu[iPoint + 1]; ++index) { + const auto jPoint = col_ind_ilu[index]; + if (jPoint >= end) break; + const auto* Block_ij = &ILU_matrix[index * blockSize]; + MatrixVectorProductSub(Block_ij, &prod[jPoint * nVar], aux_vec); } - /*--- Backwards substitution (starts at the last row) ---*/ - - for (auto iPoint = end; iPoint > begin;) { - iPoint--; // unsigned type - for (auto iVar = 0ul; iVar < nVar; iVar++) aux_vec[iVar] = prod[iPoint * nVar + iVar]; + MatrixVectorProduct(invUii, aux_vec, &prod[iPoint * nVar]); + }; - const auto* invUii = &ILU_matrix[dia_ptr_ilu[iPoint] * nVar * nVar]; + if (levels_ilu.empty()) { + SU2_OMP_FOR_STAT(1) + for (unsigned long thread = 0; thread < omp_num_parts; ++thread) { + const auto begin = omp_partitions[thread]; + const auto end = omp_partitions[thread + 1]; + if (begin == end) continue; - for (auto index = dia_ptr_ilu[iPoint] + 1; index < row_ptr_ilu[iPoint + 1]; index++) { - auto jPoint = col_ind_ilu[index]; - if (jPoint >= end) break; - auto Block_ij = &ILU_matrix[index * nVar * nVar]; - MatrixVectorProductSub(Block_ij, &prod[jPoint * nVar], aux_vec); + for (auto iPoint = begin; iPoint < end; ++iPoint) { + ForwardSolve(iPoint, begin); + } + for (auto iPoint = end; iPoint > begin;) { + --iPoint; // unsigned type + BackwardSolve(iPoint, end); } - - MatrixVectorProduct(invUii, aux_vec, &prod[iPoint * nVar]); + } + END_SU2_OMP_FOR + } else { + for (auto level = 0ul; level < levels_ilu.getOuterSize(); ++level) { + SU2_OMP_FOR_(schedule(static)) + for (auto k = 0ul; k < levels_ilu.getNumNonZeros(level); ++k) { + const auto iPoint = levels_ilu.getInnerIdx(level, k); + ForwardSolve(iPoint, 0ul); + } + END_SU2_OMP_FOR + } + for (auto level = levels_ilu.getOuterSize(); level > 0;) { + --level; // unsigned type + SU2_OMP_FOR_(schedule(static)) + for (auto k = 0ul; k < levels_ilu.getNumNonZeros(level); ++k) { + const auto iPoint = levels_ilu.getInnerIdx(level, k); + BackwardSolve(iPoint, nPointDomain); + } + END_SU2_OMP_FOR } } - END_SU2_OMP_FOR /*--- MPI Parallelization ---*/ diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 50d2f7858fee..5cbd9c0c0452 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -679,7 +679,7 @@ def main(): statbeam3d.cfg_dir = "fea_fsi/StatBeam_3d" statbeam3d.cfg_file = "configBeam_3d.cfg" statbeam3d.test_iter = 0 - statbeam3d.test_vals = [-2.777602, -1.710976, -2.445072, 110350] + statbeam3d.test_vals = [-2.830455, -1.746659, -2.366087, 110350] statbeam3d.test_vals_aarch64 = [-2.777602, -1.710976, -2.445072, 110350] test_list.append(statbeam3d) @@ -708,7 +708,7 @@ def main(): dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi" dyn_fsi.cfg_file = "config.cfg" dyn_fsi.test_iter = 4 - dyn_fsi.test_vals = [-4.330725, -4.152808, 0, 103] + dyn_fsi.test_vals = [-4.330725, -4.152808, 0, 102] dyn_fsi.multizone = True dyn_fsi.unsteady = True test_list.append(dyn_fsi) diff --git a/config_template.cfg b/config_template.cfg index ee7618e13734..0f60b4bb3a40 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -2374,6 +2374,13 @@ EDGE_COLORING_RELAX_DISC_ADJ= YES % The default (0) means "same number of threads as for all else". LINEAR_SOLVER_PREC_THREADS= 0 % +% Use level-scheduling instead of block decomposition for the ILU preconditioner. +% This is useful for stiff problems as it keeps the effectiveness of the preconditioner +% independent of the number of threads, at the expense of some parallelism (the amount +% of work that can be shared by the threads is reduced). +% This defaults to YES for elasticity problems. +LINEAR_SOLVER_ILU_LEVEL_SCHEDULING= NO +% % ----------------------- PARTITIONING OPTIONS (ParMETIS) ------------------------ % % % Load balancing tolerance, lower values will make ParMETIS work harder to evenly From 578f1313216d44872140cbd8e1d56f3425ab721a Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Sat, 25 Apr 2026 12:26:14 +0200 Subject: [PATCH 222/229] remove metavar (#2796) [skip ci] --- SU2_PY/change_version_number.py | 1 - 1 file changed, 1 deletion(-) diff --git a/SU2_PY/change_version_number.py b/SU2_PY/change_version_number.py index 49b82da680d4..9bf03e06d488 100755 --- a/SU2_PY/change_version_number.py +++ b/SU2_PY/change_version_number.py @@ -48,7 +48,6 @@ action="iframe.php?url=https%3A%2F%2Fgithub.com%2Fstore_true", dest="yes", help="Answer yes to all questions", - metavar="YES", ) options = parser.parse_args() From 5474f068615de2477d024363b7ce132e2ea2ef24 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Sat, 25 Apr 2026 15:51:35 +0200 Subject: [PATCH 223/229] Fix OMP issues in SBS (#2795) * address comments 1 * fix OMP issues --- AUTHORS.md | 1 + SU2_CFD/include/numerics/CNumerics.hpp | 15 +- .../include/numerics_simd/CNumericsSIMD.cpp | 4 +- SU2_CFD/include/variables/CVariable.hpp | 1 - SU2_CFD/src/numerics/flow/flow_diffusion.cpp | 6 +- SU2_CFD/src/output/CFlowOutput.cpp | 36 ++-- SU2_CFD/src/solvers/CTurbSASolver.cpp | 185 +++++++++--------- 7 files changed, 128 insertions(+), 120 deletions(-) diff --git a/AUTHORS.md b/AUTHORS.md index f6580fadb892..554d925a8e97 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -52,6 +52,7 @@ Amit Sachdeva Ana Lourenco Andrew Burkett Andrew Wendorff +Angelo Passariello Aniket C. Aranake Antonio Rubino Arne Bachmann diff --git a/SU2_CFD/include/numerics/CNumerics.hpp b/SU2_CFD/include/numerics/CNumerics.hpp index e910c6c5a487..db2c5d8f35af 100644 --- a/SU2_CFD/include/numerics/CNumerics.hpp +++ b/SU2_CFD/include/numerics/CNumerics.hpp @@ -192,9 +192,8 @@ class CNumerics { su2double lesMode_i = 0.0, /*!< \brief LES sensor at point i for hybrid RANS-LES methods. */ lesMode_j = 0.0; /*!< \brief LES sensor at point j for hybrid RANS-LES methods. */ - unsigned short - sbsInBox_i = 0, /*!< \brief Sensor to assess if point i lies inside the box where the Stochastic Backscatter Model is active. */ - sbsInBox_j = 0; /*!< \brief Sensor to assess if point j lies inside the box where the Stochastic Backscatter Model is active. */ + int8_t + sbsInBox_i = 0; /*!< \brief Sensor to assess if point i lies inside the box where the Stochastic Backscatter Model is active. */ SST_ParsedOptions sstParsedOptions; /*!< \brief additional options for the SST turbulence model */ unsigned short Eig_Val_Comp; /*!< \brief Component towards which perturbation is perfromed */ su2double uq_delta_b; /*!< \brief Magnitude of perturbation */ @@ -651,7 +650,7 @@ class CNumerics { } } } - + /*! * \brief Compute a random contribution to the Reynolds stress tensor (Stochastic Backscatter Model). * \details See: Kok, Johan C. "A stochastic backscatter model for grey-area mitigation in detached @@ -664,12 +663,12 @@ class CNumerics { * \param[out] stochReynStress - Stochastic tensor (to be added to the Reynolds stress tensor). */ template - inline void ComputeStochReynStress(su2double density, su2double tke, const Vec& rndVec, + inline void ComputeStochReynStress(su2double density, su2double tke, const Vec& rndVec, su2double Cmag, Mat& stochReynStress) { /* --- Calculate stochastic tensor --- */ - su2double stochLim = 3.0; + su2double stochLim = 3.0; stochReynStress[0][0] = 0.0; stochReynStress[1][1] = 0.0; @@ -918,11 +917,9 @@ class CNumerics { /*! * \brief Set the sensor to locate the box where the Stochastic Backscatter Model is active. * \param[in] val_sbsInBox_i - 1 if point i lies inside the box where the model is active. - * \param[in] val_sbsInBox_j - 1 if point j lies inside the box where the model is active. */ - inline void SetSbsInBoxSensor(unsigned short val_sbsInBox_i, unsigned short val_sbsInBox_j) { + inline void SetSbsInBoxSensor(int8_t val_sbsInBox_i) { sbsInBox_i = val_sbsInBox_i; - sbsInBox_j = val_sbsInBox_j; } /*! diff --git a/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp b/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp index 68afef986934..e05435d2d269 100644 --- a/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp +++ b/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp @@ -74,7 +74,6 @@ CNumericsSIMD* createCenteredNumerics(const CConfig& config, int iMesh, const CV obj = new CLaxScheme(config, iMesh, turbVars); break; case CENTERED::JST: - case CENTERED::LD2: // Just to silence compiler warnings (LD2 implemented in the incompressible solver only). obj = new CJSTScheme(config, iMesh, turbVars); break; case CENTERED::JST_KE: @@ -83,6 +82,9 @@ CNumericsSIMD* createCenteredNumerics(const CConfig& config, int iMesh, const CV case CENTERED::JST_MAT: obj = new CJSTmatScheme(config, iMesh, turbVars); break; + case CENTERED::LD2: + /*--- LD2 implemented only in the incompressible solver. ---*/ + break; } return obj; } diff --git a/SU2_CFD/include/variables/CVariable.hpp b/SU2_CFD/include/variables/CVariable.hpp index f3a6bec8f66d..82cf99645d11 100644 --- a/SU2_CFD/include/variables/CVariable.hpp +++ b/SU2_CFD/include/variables/CVariable.hpp @@ -34,7 +34,6 @@ #include #include #include -#include #include "../../../Common/include/CConfig.hpp" #include "../../../Common/include/containers/container_decorators.hpp" diff --git a/SU2_CFD/src/numerics/flow/flow_diffusion.cpp b/SU2_CFD/src/numerics/flow/flow_diffusion.cpp index 9d687b4acb06..f2d1d9910ac9 100644 --- a/SU2_CFD/src/numerics/flow/flow_diffusion.cpp +++ b/SU2_CFD/src/numerics/flow/flow_diffusion.cpp @@ -477,7 +477,7 @@ CNumerics::ResidualType<> CAvgGrad_Flow::ComputeResidual(const CConfig* config) /*--- Get projected flux tensor (viscous residual) ---*/ SetStressTensor(Mean_PrimVar, Mean_GradPrimVar, Mean_turb_ke, - Mean_Laminar_Viscosity, Mean_Eddy_Viscosity,config); + Mean_Laminar_Viscosity, Mean_Eddy_Viscosity, config); if (config->GetSAParsedOptions().qcr2000) AddQCR(nDim, &Mean_GradPrimVar[1], tau); if (Mean_TauWall > 0) AddTauWall(UnitNormal, Mean_TauWall); @@ -655,7 +655,7 @@ CNumerics::ResidualType<> CAvgGradInc_Flow::ComputeResidual(const CConfig* confi /*--- Get projected flux tensor (viscous residual) ---*/ SetStressTensor(Mean_PrimVar, Mean_GradPrimVar, Mean_turb_ke, - Mean_Laminar_Viscosity, Mean_Eddy_Viscosity,config); + Mean_Laminar_Viscosity, Mean_Eddy_Viscosity, config); if (config->GetSAParsedOptions().qcr2000) AddQCR(nDim, &Mean_GradPrimVar[1], tau); if (Mean_TauWall > 0) AddTauWall(UnitNormal, Mean_TauWall); @@ -985,7 +985,7 @@ CNumerics::ResidualType<> CGeneralAvgGrad_Flow::ComputeResidual(const CConfig* c /*--- Get projected flux tensor (viscous residual) ---*/ SetStressTensor(Mean_PrimVar, Mean_GradPrimVar, Mean_turb_ke, - Mean_Laminar_Viscosity, Mean_Eddy_Viscosity,config); + Mean_Laminar_Viscosity, Mean_Eddy_Viscosity, config); if (config->GetSAParsedOptions().qcr2000) AddQCR(nDim, &Mean_GradPrimVar[1], tau); if (Mean_TauWall > 0) AddTauWall(UnitNormal, Mean_TauWall); diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index 7b6ae71b4873..495d956e0ab5 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -4136,19 +4136,19 @@ void CFlowOutput::SetTimeAveragedFields(const CConfig *config) { } if (config->GetKind_Turb_Model() != TURB_MODEL::NONE) { - AddVolumeOutput("MODELED_REYNOLDS_STRESS_11", "ModeledReynoldsStress_11", "TIME_AVERAGE", "Modeled Reynolds stress xx-component"); - AddVolumeOutput("MODELED_REYNOLDS_STRESS_22", "ModeledReynoldsStress_22", "TIME_AVERAGE", "Modeled Reynolds stress yy-component"); - AddVolumeOutput("MODELED_REYNOLDS_STRESS_12", "ModeledReynoldsStress_12", "TIME_AVERAGE", "Modeled Reynolds stress xy-component"); + AddVolumeOutput("MODELED_REYNOLDS_STRESS_XX", "ModeledReynoldsStress_XX", "TIME_AVERAGE", "Modeled Reynolds stress xx-component"); + AddVolumeOutput("MODELED_REYNOLDS_STRESS_YY", "ModeledReynoldsStress_YY", "TIME_AVERAGE", "Modeled Reynolds stress yy-component"); + AddVolumeOutput("MODELED_REYNOLDS_STRESS_XY", "ModeledReynoldsStress_XY", "TIME_AVERAGE", "Modeled Reynolds stress xy-component"); if (nDim == 3){ - AddVolumeOutput("MODELED_REYNOLDS_STRESS_33", "ModeledReynoldsStress_33", "TIME_AVERAGE", "Modeled Reynolds stress zz-component"); - AddVolumeOutput("MODELED_REYNOLDS_STRESS_13", "ModeledReynoldsStress_13", "TIME_AVERAGE", "Modeled Reynolds stress xz-component"); - AddVolumeOutput("MODELED_REYNOLDS_STRESS_23", "ModeledReynoldsStress_23", "TIME_AVERAGE", "Modeled Reynolds stress yz-component"); + AddVolumeOutput("MODELED_REYNOLDS_STRESS_ZZ", "ModeledReynoldsStress_ZZ", "TIME_AVERAGE", "Modeled Reynolds stress zz-component"); + AddVolumeOutput("MODELED_REYNOLDS_STRESS_XZ", "ModeledReynoldsStress_XZ", "TIME_AVERAGE", "Modeled Reynolds stress xz-component"); + AddVolumeOutput("MODELED_REYNOLDS_STRESS_YZ", "ModeledReynoldsStress_YZ", "TIME_AVERAGE", "Modeled Reynolds stress yz-component"); } if (config->GetSBSParam().StochasticBackscatter) { - AddVolumeOutput("STOCHASTIC_REYNOLDS_STRESS_12", "StochasticReynoldsStress_12", "TIME_AVERAGE", "Stochastic Reynolds stress xy-component"); - AddVolumeOutput("STOCHASTIC_REYNOLDS_STRESS_13", "StochasticReynoldsStress_13", "TIME_AVERAGE", "Stochastic Reynolds stress xz-component"); - AddVolumeOutput("STOCHASTIC_REYNOLDS_STRESS_23", "StochasticReynoldsStress_23", "TIME_AVERAGE", "Stochastic Reynolds stress yz-component"); + AddVolumeOutput("STOCHASTIC_REYNOLDS_STRESS_XY", "StochasticReynoldsStress_XY", "TIME_AVERAGE", "Stochastic Reynolds stress xy-component"); + AddVolumeOutput("STOCHASTIC_REYNOLDS_STRESS_XZ", "StochasticReynoldsStress_XZ", "TIME_AVERAGE", "Stochastic Reynolds stress xz-component"); + AddVolumeOutput("STOCHASTIC_REYNOLDS_STRESS_YZ", "StochasticReynoldsStress_YZ", "TIME_AVERAGE", "Stochastic Reynolds stress yz-component"); } } } @@ -4201,16 +4201,16 @@ void CFlowOutput::LoadTimeAveragedData(unsigned long iPoint, const CVariable *No const su2double tau_xx = nu_t * (2*vel_grad(0,0) - (2.0/3.0)*vel_div); const su2double tau_yy = nu_t * (2*vel_grad(1,1) - (2.0/3.0)*vel_div); const su2double tau_xy = nu_t * (vel_grad(0,1) + vel_grad(1,0)); - SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_11", iPoint, -tau_xx); - SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_22", iPoint, -tau_yy); - SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_12", iPoint, -tau_xy); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_XX", iPoint, -tau_xx); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_YY", iPoint, -tau_yy); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_XY", iPoint, -tau_xy); if (nDim == 3){ const su2double tau_zz = nu_t * (2*vel_grad(2,2) - (2.0/3.0)*vel_div); const su2double tau_xz = nu_t * (vel_grad(0,2) + vel_grad(2,0)); const su2double tau_yz = nu_t * (vel_grad(1,2) + vel_grad(2,1)); - SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_33", iPoint, -tau_zz); - SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_13", iPoint, -tau_xz); - SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_23", iPoint, -tau_yz); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_ZZ", iPoint, -tau_zz); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_XZ", iPoint, -tau_xz); + SetAvgVolumeOutputValue("MODELED_REYNOLDS_STRESS_YZ", iPoint, -tau_yz); } if (config->GetSBSParam().StochasticBackscatter) { @@ -4226,9 +4226,9 @@ void CFlowOutput::LoadTimeAveragedData(unsigned long iPoint, const CVariable *No const su2double R_xy = - mag * tke_estim * csi_z; const su2double R_xz = + mag * tke_estim * csi_y; const su2double R_yz = - mag * tke_estim * csi_x; - SetAvgVolumeOutputValue("STOCHASTIC_REYNOLDS_STRESS_12", iPoint, -R_xy); - SetAvgVolumeOutputValue("STOCHASTIC_REYNOLDS_STRESS_13", iPoint, -R_xz); - SetAvgVolumeOutputValue("STOCHASTIC_REYNOLDS_STRESS_23", iPoint, -R_yz); + SetAvgVolumeOutputValue("STOCHASTIC_REYNOLDS_STRESS_XY", iPoint, -R_xy); + SetAvgVolumeOutputValue("STOCHASTIC_REYNOLDS_STRESS_XY", iPoint, -R_xz); + SetAvgVolumeOutputValue("STOCHASTIC_REYNOLDS_STRESS_YZ", iPoint, -R_yz); } } } diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp index dbad3f42e69d..952a245072a7 100644 --- a/SU2_CFD/src/solvers/CTurbSASolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp @@ -427,7 +427,7 @@ void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_contai for (unsigned short iDim = 0; iDim < nDim; iDim++) numerics->SetStochSource(nodes->GetLangevinSourceTerms(iPoint, iDim), iDim); numerics->SetLES_Mode(nodes->GetLES_Mode(iPoint), 0.0); - numerics->SetSbsInBoxSensor(nodes->GetSbsInBox(iPoint), 0); + numerics->SetSbsInBoxSensor(nodes->GetSbsInBox(iPoint)); } } @@ -453,7 +453,7 @@ void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_contai if (transition_BC || config->GetKind_Trans_Model() != TURB_TRANS_MODEL::NONE) { nodes->SetIntermittency(iPoint,numerics->GetIntermittencyEff()); } - + /*--- Subtract residual and the Jacobian ---*/ LinSysRes.SubtractBlock(iPoint, residual); @@ -1636,7 +1636,8 @@ void CTurbSASolver::SetDES_LengthScale(CSolver **solver, CGeometry *geometry, CC } void CTurbSASolver::SetBackscatterInBox(CConfig *config, CGeometry *geometry) { - + SU2_ZONE_SCOPED + auto sbsBoxBounds = config->GetSBSParam().StochBackscatterBoxBounds; SU2_OMP_FOR_STAT(omp_chunk_size) @@ -1653,6 +1654,7 @@ void CTurbSASolver::SetBackscatterInBox(CConfig *config, CGeometry *geometry) { } void CTurbSASolver::SetLangevinSourceTerms(CConfig *config, CGeometry* geometry) { + SU2_ZONE_SCOPED const su2double threshold = config->GetSBSParam().stochFdThreshold; const su2double dummySource = 1e3; @@ -1677,8 +1679,8 @@ void CTurbSASolver::SetLangevinSourceTerms(CConfig *config, CGeometry* geometry) } END_SU2_OMP_FOR - SU2_OMP_FOR_DYN(omp_chunk_size) for (unsigned short iMarker = 0; iMarker < config->GetnMarker_All(); iMarker++) { + SU2_OMP_FOR_STAT(OMP_MIN_SIZE) for (unsigned long iVertex = 0; iVertex < geometry->nVertex[iMarker]; iVertex++) { unsigned long iPoint = geometry->vertex[iMarker][iVertex]->GetNode(); if (config->GetMarker_All_KindBC(iMarker) != SEND_RECEIVE) { @@ -1688,8 +1690,8 @@ void CTurbSASolver::SetLangevinSourceTerms(CConfig *config, CGeometry* geometry) } } } + END_SU2_OMP_FOR } - END_SU2_OMP_FOR InitiateComms(geometry, config, MPI_QUANTITIES::STOCH_SOURCE_LANG); CompleteComms(geometry, config, MPI_QUANTITIES::STOCH_SOURCE_LANG); @@ -1697,6 +1699,11 @@ void CTurbSASolver::SetLangevinSourceTerms(CConfig *config, CGeometry* geometry) } void CTurbSASolver::SmoothLangevinSourceTerms(CConfig* config, CGeometry* geometry) { + SU2_ZONE_SCOPED + + static su2double globalResNorm; + static unsigned long global_nPointLES; + static std::array globalChecks; const su2double LES_FilterWidth = config->GetLES_FilterWidth(); const su2double cDelta = config->GetSBSParam().SBS_Cdelta; @@ -1710,9 +1717,9 @@ void CTurbSASolver::SmoothLangevinSourceTerms(CConfig* config, CGeometry* geomet /*--- Start SOR algorithm for the Laplacian smoothing. ---*/ for (unsigned short iDim = 0; iDim < nDim; iDim++) { - + for (unsigned short iter = 0; iter < maxIter; iter++) { - + /*--- MPI communication. ---*/ InitiateComms(geometry, config, MPI_QUANTITIES::STOCH_SOURCE_LANG); @@ -1721,16 +1728,15 @@ void CTurbSASolver::SmoothLangevinSourceTerms(CConfig* config, CGeometry* geomet su2double localResNorm = 0.0; unsigned long local_nPointLES = 0; - SU2_OMP_FOR_DYN(omp_chunk_size) + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { su2double source_i_old = nodes->GetLangevinSourceTermsOld(iPoint, iDim); if (source_i_old > 3.0*sourceLim) continue; local_nPointLES += 1; su2double maxDelta = geometry->nodes->GetMaxLength(iPoint); if (LES_FilterWidth > 0.0) maxDelta = LES_FilterWidth; - su2double b = sqrt(cDelta) * maxDelta; - su2double b2 = b * b; - su2double volume_iPoint = geometry->nodes->GetVolume(iPoint); + su2double b2 = cDelta * pow(maxDelta, 2); + su2double volume_iPoint = geometry->nodes->GetVolume(iPoint) + geometry->nodes->GetPeriodicVolume(iPoint); su2double source_i = nodes->GetLangevinSourceTerms(iPoint, iDim); auto coord_i = geometry->nodes->GetCoord(iPoint); @@ -1759,92 +1765,89 @@ void CTurbSASolver::SmoothLangevinSourceTerms(CConfig* config, CGeometry* geomet nodes->SetLangevinSourceTerms(iPoint, iDim, source_i); } - END_SU2_OMP_FOR + END_SU2_OMP_SAFE_GLOBAL_ACCESS /*--- Stop integration if residual drops below tolerance. ---*/ - su2double globalResNorm = 0.0; - unsigned long global_nPointLES = 0; - SU2_MPI::Allreduce(&local_nPointLES, &global_nPointLES, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); - SU2_MPI::Allreduce(&localResNorm, &globalResNorm, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - globalResNorm = (global_nPointLES==0) ? su2double(0.0) : sqrt(globalResNorm / global_nPointLES); + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + SU2_MPI::Allreduce(&local_nPointLES, &global_nPointLES, 1, MPI_UNSIGNED_LONG, MPI_SUM, SU2_MPI::GetComm()); + SU2_MPI::Allreduce(&localResNorm, &globalResNorm, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + globalResNorm = (global_nPointLES==0) ? su2double(0.0) : sqrt(globalResNorm / global_nPointLES); + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + SU2_OMP_MASTER if (rank == MASTER_NODE) { if (iter == 0) { - cout << endl - << "Residual of Laplacian smoothing along dimension " << iDim+1 << "." << endl - << "---------------------------------" << endl - << " Iter RMS Residual" << endl - << "---------------------------------" << endl; + cout << "\nResidual of Laplacian smoothing along dimension " << iDim+1 + << "\n---------------------------------" + << "\n Iter RMS Residual" + << "\n---------------------------------" << endl; } if (iter%10 == 0) { - cout << " " + cout << " " << std::setw(5) << iter << " " << std::setw(12) << std::fixed << std::setprecision(6) << log10(globalResNorm) << endl; } } + END_SU2_OMP_MASTER if (log10(globalResNorm) < tol || iter == maxIter-1) { + SU2_OMP_MASTER if (rank == MASTER_NODE) { - cout << " " + cout << " " << std::setw(5) << iter << " " << std::setw(12) << std::fixed << ::setprecision(6) << log10(globalResNorm) << endl; cout << "---------------------------------" << endl; } - + END_SU2_OMP_MASTER + /*--- Scale source terms for variance preservation. ---*/ - su2double var_check_old = 0.0; - su2double mean_check_old = 0.0; - su2double var_check_new = 0.0; - su2double mean_check_new = 0.0; - su2double var_check_notSmoothed = 0.0; - su2double mean_check_notSmoothed = 0.0; + su2double mean_check_old = 0.0, var_check_old = 0.0; + su2double mean_check_new = 0.0, var_check_new = 0.0; + su2double mean_check_notSmoothed = 0.0, var_check_notSmoothed = 0.0; + + SU2_OMP_FOR_(schedule(static, omp_chunk_size) SU2_NOWAIT) for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { su2double source_notSmoothed = nodes->GetLangevinSourceTermsOld(iPoint, iDim); if (source_notSmoothed > 3.0*sourceLim) continue; su2double source = nodes->GetLangevinSourceTerms(iPoint, iDim); mean_check_old += source; - var_check_old += source * source; + var_check_old += pow(source, 2); mean_check_notSmoothed += source_notSmoothed; - var_check_notSmoothed += source_notSmoothed * source_notSmoothed; + var_check_notSmoothed += pow(source_notSmoothed, 2); su2double integral = 0.0; if (timeIter==restartIter) { su2double maxDelta = geometry->nodes->GetMaxLength(iPoint); if (LES_FilterWidth > 0.0) maxDelta = LES_FilterWidth; - su2double b = sqrt(cDelta) * maxDelta; - su2double b2 = b * b; + su2double b2 = cDelta * pow(maxDelta, 2); auto coord_i = geometry->nodes->GetCoord(iPoint); - su2double maxDelta_vec[3] = {0.0}; - su2double maxDelta_tmp = 0.0; - unsigned short nNeigh = geometry->nodes->GetnPoint(iPoint); - for (unsigned short iNode = 0; iNode < nNeigh; iNode++) { - auto jPoint = geometry->nodes->GetPoint(iPoint, iNode); + su2double maxDelta_vec[MAXNDIM] = {0.0}; + su2double maxDelta2_tmp = 0.0; + for (const auto jPoint : geometry->nodes->GetPoints(iPoint)) { auto coord_j = geometry->nodes->GetCoord(jPoint); - su2double dist_ij = GeometryToolbox::Distance(nDim, coord_j, coord_i); - if (dist_ij > maxDelta_tmp) { - maxDelta_tmp = dist_ij; + su2double dist2_ij = GeometryToolbox::SquaredDistance(nDim, coord_j, coord_i); + if (dist2_ij > maxDelta2_tmp) { + maxDelta2_tmp = dist2_ij; GeometryToolbox::Distance(nDim, coord_j, coord_i, maxDelta_vec); } } su2double max_dist_ij_normal = 0.0; - for (unsigned short iNode = 0; iNode < nNeigh; iNode++) { - auto jPoint = geometry->nodes->GetPoint(iPoint, iNode); + for (const auto jPoint : geometry->nodes->GetPoints(iPoint)) { auto coord_j = geometry->nodes->GetCoord(jPoint); - su2double dist_ij2 = GeometryToolbox::SquaredDistance(nDim, coord_j, coord_i); - su2double dist_ij_vec[3] = {0.0}; + su2double dist_ij_vec[MAXNDIM] = {0.0}; GeometryToolbox::Distance(nDim, coord_j, coord_i, dist_ij_vec); + su2double dist2_ij = GeometryToolbox::SquaredNorm(nDim, dist_ij_vec); su2double dist_ij_parallel = GeometryToolbox::DotProduct(nDim, dist_ij_vec, maxDelta_vec); dist_ij_parallel /= maxDelta; - su2double dist_ij_normal = sqrt(max(dist_ij2 - dist_ij_parallel*dist_ij_parallel, 0.0)); - if (dist_ij_normal > max_dist_ij_normal) { - max_dist_ij_normal = dist_ij_normal; - } + su2double dist_ij_normal = sqrt(max(dist2_ij - pow(dist_ij_parallel, 2), 0.0)); + max_dist_ij_normal = max(max_dist_ij_normal, dist_ij_normal); } su2double dI = maxDelta; su2double dJ = max_dist_ij_normal; @@ -1864,53 +1867,59 @@ void CTurbSASolver::SmoothLangevinSourceTerms(CConfig* config, CGeometry* geomet source *= scaleFactor; if (source < -sourceLim || source > sourceLim) source = 0.0; mean_check_new += source; - var_check_new += source * source; + var_check_new += pow(source, 2); nodes->SetLangevinSourceTerms(iPoint, iDim, source); } - su2double mean_check_new_G = 0.0; - SU2_MPI::Allreduce(&mean_check_new, &mean_check_new_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - mean_check_new_G /= global_nPointLES; + END_SU2_OMP_FOR + + SU2_OMP_SAFE_GLOBAL_ACCESS(globalChecks = {0, 0, 0, 0, 0, 0};) + + atomicAdd(mean_check_old, globalChecks[0]); + atomicAdd(var_check_old, globalChecks[1]); + atomicAdd(mean_check_notSmoothed, globalChecks[2]); + atomicAdd(var_check_notSmoothed, globalChecks[3]); + atomicAdd(mean_check_new, globalChecks[4]); + atomicAdd(var_check_new, globalChecks[5]); + + BEGIN_SU2_OMP_SAFE_GLOBAL_ACCESS { + auto tmp = globalChecks; + SU2_MPI::Allreduce(tmp.data(), globalChecks.data(), tmp.size(), MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); + } + END_SU2_OMP_SAFE_GLOBAL_ACCESS + + const auto invDenom = 1.0 / max(global_nPointLES, 1ul); + mean_check_new = globalChecks[4] * invDenom; + + SU2_OMP_FOR_STAT(omp_chunk_size) for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) { su2double source_notSmoothed = nodes->GetLangevinSourceTermsOld(iPoint, iDim); su2double source = nodes->GetLangevinSourceTerms(iPoint, iDim); if (source_notSmoothed > 3.0*sourceLim) continue; - source -= mean_check_new_G; - nodes->SetLangevinSourceTerms(iPoint, iDim, source); + nodes->SetLangevinSourceTerms(iPoint, iDim, source - mean_check_new); } - if (config->GetSBSParam().stochSourceDiagnostics) { - su2double mean_check_old_G = 0.0; - su2double mean_check_notSmoothed_G = 0.0; - su2double var_check_old_G = 0.0; - su2double var_check_new_G = 0.0; - su2double var_check_notSmoothed_G = 0.0; - SU2_MPI::Allreduce(&mean_check_old, &mean_check_old_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - SU2_MPI::Allreduce(&mean_check_notSmoothed, &mean_check_notSmoothed_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - SU2_MPI::Allreduce(&var_check_old, &var_check_old_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - SU2_MPI::Allreduce(&var_check_new, &var_check_new_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - SU2_MPI::Allreduce(&var_check_notSmoothed, &var_check_notSmoothed_G, 1, MPI_DOUBLE, MPI_SUM, SU2_MPI::GetComm()); - mean_check_old_G /= global_nPointLES; - var_check_old_G /= global_nPointLES; - var_check_old_G -= mean_check_old_G * mean_check_old_G; - var_check_new_G /= global_nPointLES; - var_check_new_G -= mean_check_new_G * mean_check_new_G; - mean_check_notSmoothed_G /= global_nPointLES; - var_check_notSmoothed_G /= global_nPointLES; - var_check_notSmoothed_G -= mean_check_notSmoothed_G * mean_check_notSmoothed_G; - if (rank == MASTER_NODE) { - cout << "Mean of stochastic source term in Langevin equations: " << endl; - cout << " Uncorrelated --> " << mean_check_notSmoothed_G << endl; - cout << " Smoothed before scaling --> " << mean_check_old_G << endl; - cout << " Smoothed after scaling --> " << mean_check_new_G << " (subtracted from stochastic field to guarantee zero mean)" << endl; - cout << "Variance of stochastic source term in Langevin equations: " << endl; - cout << " Uncorrelated --> " << var_check_notSmoothed_G << endl; - cout << " Smoothed before scaling --> " << var_check_old_G << endl; - cout << " Smoothed after scaling --> " << var_check_new_G << endl; - cout << endl; - } + END_SU2_OMP_FOR + + SU2_OMP_MASTER + if (rank == MASTER_NODE && config->GetSBSParam().stochSourceDiagnostics) { + mean_check_old = globalChecks[0] * invDenom; + var_check_old = globalChecks[1] * invDenom - pow(mean_check_old, 2); + mean_check_notSmoothed = globalChecks[2] * invDenom; + var_check_notSmoothed = globalChecks[3] * invDenom - pow(mean_check_notSmoothed, 2); + var_check_new = globalChecks[5] * invDenom - pow(mean_check_new, 2); + + cout << "Mean of stochastic source term in Langevin equations:"; + cout << "\n Uncorrelated --> " << mean_check_notSmoothed; + cout << "\n Smoothed before scaling --> " << mean_check_old; + cout << "\n Smoothed after scaling --> " << mean_check_new << " (subtracted from stochastic field to guarantee zero mean)"; + cout << "\nVariance of stochastic source term in Langevin equations:"; + cout << "\n Uncorrelated --> " << var_check_notSmoothed; + cout << "\n Smoothed before scaling --> " << var_check_old; + cout << "\n Smoothed after scaling --> " << var_check_new << '\n' << endl; } + END_SU2_OMP_MASTER + /*--- Converged or maximum number of iterations reached. ---*/ break; - } } } From a1ba1f4e0c47705f57e8c4d3c3e29329189769a0 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Sat, 25 Apr 2026 19:35:05 +0200 Subject: [PATCH 224/229] Changing version number to 8.5.0 (#2797) Co-authored-by: GitHub Action --- Common/include/CConfig.hpp | 2 +- Common/include/adt/CADTBaseClass.hpp | 2 +- Common/include/adt/CADTComparePointClass.hpp | 2 +- Common/include/adt/CADTElemClass.hpp | 4 ++-- Common/include/adt/CADTNodeClass.hpp | 2 +- Common/include/adt/CADTPointsOnlyClass.hpp | 2 +- Common/include/adt/CBBoxTargetClass.hpp | 4 ++-- Common/include/basic_types/ad_structure.hpp | 2 +- .../include/basic_types/datatype_structure.hpp | 2 +- Common/include/code_config.hpp | 2 +- Common/include/containers/C2DContainer.hpp | 2 +- .../containers/CFastFindAndEraseQueue.hpp | 2 +- Common/include/containers/CFileReaderLUT.hpp | 2 +- Common/include/containers/CLookUpTable.hpp | 2 +- .../include/containers/CPyWrapperMatrixView.hpp | 2 +- Common/include/containers/CTrapezoidalMap.hpp | 4 ++-- Common/include/containers/CVertexMap.hpp | 2 +- .../include/containers/container_decorators.hpp | 2 +- .../include/fem/fem_gauss_jacobi_quadrature.hpp | 4 ++-- Common/include/fem/fem_geometry_structure.hpp | 16 ++++++++-------- Common/include/fem/fem_standard_element.hpp | 10 +++++----- Common/include/geometry/CDummyGeometry.hpp | 2 +- Common/include/geometry/CGeometry.hpp | 2 +- Common/include/geometry/CMultiGridGeometry.hpp | 2 +- Common/include/geometry/CMultiGridQueue.hpp | 2 +- Common/include/geometry/CPhysicalGeometry.hpp | 2 +- Common/include/geometry/dual_grid/CDualGrid.hpp | 2 +- Common/include/geometry/dual_grid/CEdge.hpp | 2 +- Common/include/geometry/dual_grid/CPoint.hpp | 2 +- .../include/geometry/dual_grid/CTurboVertex.hpp | 2 +- Common/include/geometry/dual_grid/CVertex.hpp | 2 +- Common/include/geometry/elements/CElement.hpp | 4 ++-- .../geometry/elements/CElementProperty.hpp | 6 +++--- .../include/geometry/elements/CGaussVariable.hpp | 4 ++-- .../geometry/meshreader/CBoxMeshReaderFEM.hpp | 2 +- .../geometry/meshreader/CBoxMeshReaderFVM.hpp | 2 +- .../geometry/meshreader/CCGNSElementType.hpp | 2 +- .../geometry/meshreader/CCGNSMeshReaderBase.hpp | 2 +- .../geometry/meshreader/CCGNSMeshReaderFEM.hpp | 2 +- .../geometry/meshreader/CCGNSMeshReaderFVM.hpp | 2 +- .../geometry/meshreader/CMeshReaderBase.hpp | 2 +- .../meshreader/CRectangularMeshReaderFEM.hpp | 2 +- .../meshreader/CRectangularMeshReaderFVM.hpp | 2 +- .../meshreader/CSU2ASCIIMeshReaderBase.hpp | 2 +- .../meshreader/CSU2ASCIIMeshReaderFEM.hpp | 2 +- .../meshreader/CSU2ASCIIMeshReaderFVM.hpp | 2 +- .../include/geometry/primal_grid/CHexahedron.hpp | 2 +- Common/include/geometry/primal_grid/CLine.hpp | 2 +- .../include/geometry/primal_grid/CPrimalGrid.hpp | 2 +- .../geometry/primal_grid/CPrimalGridBoundFEM.hpp | 4 ++-- .../geometry/primal_grid/CPrimalGridFEM.hpp | 4 ++-- Common/include/geometry/primal_grid/CPrism.hpp | 2 +- Common/include/geometry/primal_grid/CPyramid.hpp | 2 +- .../geometry/primal_grid/CQuadrilateral.hpp | 2 +- .../geometry/primal_grid/CTetrahedron.hpp | 2 +- .../include/geometry/primal_grid/CTriangle.hpp | 2 +- .../include/geometry/primal_grid/CVertexMPI.hpp | 2 +- Common/include/graph_coloring_structure.hpp | 4 ++-- .../include/grid_movement/CBSplineBlending.hpp | 2 +- Common/include/grid_movement/CBezierBlending.hpp | 2 +- .../include/grid_movement/CFreeFormBlending.hpp | 2 +- Common/include/grid_movement/CFreeFormDefBox.hpp | 2 +- Common/include/grid_movement/CGridMovement.hpp | 2 +- .../include/grid_movement/CLinearElasticity.hpp | 2 +- .../CRadialBasisFunctionInterpolation.hpp | 2 +- .../grid_movement/CRadialBasisFunctionNode.hpp | 2 +- .../include/grid_movement/CSurfaceMovement.hpp | 2 +- .../grid_movement/CVolumetricMovement.hpp | 2 +- .../grid_movement/CVolumetricMovementFactory.hpp | 2 +- .../interface_interpolation/CInterpolator.hpp | 2 +- .../CInterpolatorFactory.hpp | 2 +- .../interface_interpolation/CIsoparametric.hpp | 2 +- .../include/interface_interpolation/CMirror.hpp | 2 +- .../interface_interpolation/CNearestNeighbor.hpp | 2 +- .../CRadialBasisFunction.hpp | 2 +- .../interface_interpolation/CSlidingMesh.hpp | 2 +- .../linear_algebra/CMatrixVectorProduct.hpp | 2 +- Common/include/linear_algebra/CPastixWrapper.hpp | 2 +- .../include/linear_algebra/CPreconditioner.hpp | 2 +- Common/include/linear_algebra/CSysMatrix.hpp | 2 +- Common/include/linear_algebra/CSysMatrix.inl | 2 +- Common/include/linear_algebra/CSysSolve.hpp | 2 +- Common/include/linear_algebra/CSysSolve_b.hpp | 2 +- Common/include/linear_algebra/CSysVector.hpp | 2 +- Common/include/linear_algebra/GPUComms.cuh | 2 +- Common/include/linear_algebra/blas_structure.hpp | 4 ++-- .../linear_algebra/vector_expressions.hpp | 2 +- Common/include/option_structure.hpp | 2 +- Common/include/option_structure.inl | 2 +- Common/include/parallelization/mpi_structure.cpp | 2 +- Common/include/parallelization/mpi_structure.hpp | 2 +- Common/include/parallelization/omp_structure.cpp | 2 +- Common/include/parallelization/omp_structure.hpp | 2 +- .../parallelization/special_vectorization.hpp | 2 +- Common/include/parallelization/vectorization.hpp | 2 +- Common/include/toolboxes/C1DInterpolation.hpp | 2 +- Common/include/toolboxes/CLinearPartitioner.hpp | 2 +- .../toolboxes/CQuasiNewtonInvLeastSquares.hpp | 2 +- Common/include/toolboxes/CSquareMatrixCM.hpp | 2 +- Common/include/toolboxes/CSymmetricMatrix.hpp | 2 +- Common/include/toolboxes/MMS/CIncTGVSolution.hpp | 2 +- .../toolboxes/MMS/CInviscidVortexSolution.hpp | 2 +- .../toolboxes/MMS/CMMSIncEulerSolution.hpp | 2 +- .../include/toolboxes/MMS/CMMSIncNSSolution.hpp | 2 +- .../MMS/CMMSNSTwoHalfCirclesSolution.hpp | 2 +- .../MMS/CMMSNSTwoHalfSpheresSolution.hpp | 2 +- .../toolboxes/MMS/CMMSNSUnitQuadSolution.hpp | 2 +- .../MMS/CMMSNSUnitQuadSolutionWallBC.hpp | 2 +- .../toolboxes/MMS/CNSUnitQuadSolution.hpp | 2 +- .../include/toolboxes/MMS/CRinglebSolution.hpp | 2 +- Common/include/toolboxes/MMS/CTGVSolution.hpp | 2 +- .../toolboxes/MMS/CUserDefinedSolution.hpp | 2 +- .../toolboxes/MMS/CVerificationSolution.hpp | 2 +- Common/include/toolboxes/allocation_toolbox.hpp | 2 +- .../toolboxes/classes_multiple_integers.hpp | 4 ++-- Common/include/toolboxes/fem/CFaceOfElement.hpp | 2 +- Common/include/toolboxes/fem/CMatchingFace.hpp | 2 +- .../include/toolboxes/fem/CReorderElements.hpp | 4 ++-- Common/include/toolboxes/fem/CSortFaces.hpp | 4 ++-- Common/include/toolboxes/geometry_toolbox.hpp | 2 +- Common/include/toolboxes/graph_toolbox.hpp | 2 +- Common/include/toolboxes/ndflattener.hpp | 2 +- Common/include/toolboxes/printing_toolbox.hpp | 2 +- Common/include/toolboxes/random_toolbox.hpp | 2 +- Common/include/tracy_structure.hpp | 2 +- Common/include/wall_model.hpp | 4 ++-- Common/src/CConfig.cpp | 4 ++-- Common/src/adt/CADTBaseClass.cpp | 2 +- Common/src/adt/CADTElemClass.cpp | 2 +- Common/src/adt/CADTPointsOnlyClass.cpp | 2 +- Common/src/basic_types/ad_structure.cpp | 2 +- Common/src/containers/CFileReaderLUT.cpp | 2 +- Common/src/containers/CLookUpTable.cpp | 2 +- Common/src/containers/CTrapezoidalMap.cpp | 2 +- Common/src/fem/fem_gauss_jacobi_quadrature.cpp | 2 +- Common/src/fem/fem_geometry_structure.cpp | 2 +- Common/src/fem/fem_integration_rules.cpp | 2 +- Common/src/fem/fem_standard_element.cpp | 2 +- Common/src/fem/fem_wall_distance.cpp | 2 +- Common/src/fem/fem_work_estimate_metis.cpp | 2 +- Common/src/geometry/CDummyGeometry.cpp | 2 +- Common/src/geometry/CGeometry.cpp | 2 +- Common/src/geometry/CMultiGridGeometry.cpp | 2 +- Common/src/geometry/CMultiGridQueue.cpp | 2 +- Common/src/geometry/CPhysicalGeometry.cpp | 2 +- Common/src/geometry/CPhysicalGeometryFEM.cpp | 2 +- Common/src/geometry/dual_grid/CDualGrid.cpp | 2 +- Common/src/geometry/dual_grid/CEdge.cpp | 2 +- Common/src/geometry/dual_grid/CPoint.cpp | 2 +- Common/src/geometry/dual_grid/CTurboVertex.cpp | 2 +- Common/src/geometry/dual_grid/CVertex.cpp | 2 +- Common/src/geometry/elements/CElement.cpp | 2 +- Common/src/geometry/elements/CHEXA8.cpp | 2 +- Common/src/geometry/elements/CLINE.cpp | 2 +- Common/src/geometry/elements/CPRISM6.cpp | 2 +- Common/src/geometry/elements/CPYRAM5.cpp | 2 +- Common/src/geometry/elements/CPYRAM6.cpp | 2 +- Common/src/geometry/elements/CQUAD4.cpp | 2 +- Common/src/geometry/elements/CTETRA1.cpp | 2 +- Common/src/geometry/elements/CTETRA4.cpp | 2 +- Common/src/geometry/elements/CTRIA1.cpp | 2 +- Common/src/geometry/elements/CTRIA3.cpp | 2 +- .../geometry/meshreader/CBoxMeshReaderFEM.cpp | 2 +- .../geometry/meshreader/CBoxMeshReaderFVM.cpp | 2 +- .../src/geometry/meshreader/CCGNSElementType.cpp | 2 +- .../geometry/meshreader/CCGNSMeshReaderBase.cpp | 2 +- .../geometry/meshreader/CCGNSMeshReaderFEM.cpp | 2 +- .../geometry/meshreader/CCGNSMeshReaderFVM.cpp | 2 +- .../src/geometry/meshreader/CMeshReaderBase.cpp | 2 +- .../meshreader/CRectangularMeshReaderFEM.cpp | 2 +- .../meshreader/CRectangularMeshReaderFVM.cpp | 2 +- .../meshreader/CSU2ASCIIMeshReaderBase.cpp | 2 +- .../meshreader/CSU2ASCIIMeshReaderFEM.cpp | 2 +- .../meshreader/CSU2ASCIIMeshReaderFVM.cpp | 2 +- Common/src/geometry/primal_grid/CHexahedron.cpp | 2 +- Common/src/geometry/primal_grid/CLine.cpp | 2 +- Common/src/geometry/primal_grid/CPrimalGrid.cpp | 2 +- .../geometry/primal_grid/CPrimalGridBoundFEM.cpp | 2 +- .../src/geometry/primal_grid/CPrimalGridFEM.cpp | 2 +- Common/src/geometry/primal_grid/CPrism.cpp | 2 +- Common/src/geometry/primal_grid/CPyramid.cpp | 2 +- .../src/geometry/primal_grid/CQuadrilateral.cpp | 2 +- Common/src/geometry/primal_grid/CTetrahedron.cpp | 2 +- Common/src/geometry/primal_grid/CTriangle.cpp | 2 +- Common/src/geometry/primal_grid/CVertexMPI.cpp | 2 +- Common/src/graph_coloring_structure.cpp | 2 +- Common/src/grid_movement/CBSplineBlending.cpp | 2 +- Common/src/grid_movement/CBezierBlending.cpp | 2 +- Common/src/grid_movement/CFreeFormBlending.cpp | 2 +- Common/src/grid_movement/CFreeFormDefBox.cpp | 2 +- Common/src/grid_movement/CGridMovement.cpp | 2 +- Common/src/grid_movement/CLinearElasticity.cpp | 2 +- .../CRadialBasisFunctionInterpolation.cpp | 2 +- Common/src/grid_movement/CSurfaceMovement.cpp | 2 +- Common/src/grid_movement/CVolumetricMovement.cpp | 2 +- .../grid_movement/CVolumetricMovementFactory.cpp | 2 +- .../interface_interpolation/CInterpolator.cpp | 2 +- .../CInterpolatorFactory.cpp | 2 +- .../interface_interpolation/CIsoparametric.cpp | 2 +- Common/src/interface_interpolation/CMirror.cpp | 2 +- .../interface_interpolation/CNearestNeighbor.cpp | 2 +- .../CRadialBasisFunction.cpp | 2 +- .../src/interface_interpolation/CSlidingMesh.cpp | 2 +- Common/src/linear_algebra/CPastixWrapper.cpp | 2 +- Common/src/linear_algebra/CSysMatrix.cpp | 2 +- Common/src/linear_algebra/CSysMatrixGPU.cu | 2 +- Common/src/linear_algebra/CSysSolve.cpp | 2 +- Common/src/linear_algebra/CSysSolve_b.cpp | 2 +- Common/src/linear_algebra/CSysVector.cpp | 2 +- Common/src/linear_algebra/CSysVectorGPU.cu | 2 +- Common/src/linear_algebra/blas_structure.cpp | 2 +- Common/src/toolboxes/C1DInterpolation.cpp | 2 +- Common/src/toolboxes/CLinearPartitioner.cpp | 2 +- Common/src/toolboxes/CSquareMatrixCM.cpp | 2 +- Common/src/toolboxes/CSymmetricMatrix.cpp | 2 +- Common/src/toolboxes/MMS/CIncTGVSolution.cpp | 2 +- .../toolboxes/MMS/CInviscidVortexSolution.cpp | 2 +- .../src/toolboxes/MMS/CMMSIncEulerSolution.cpp | 2 +- Common/src/toolboxes/MMS/CMMSIncNSSolution.cpp | 2 +- .../MMS/CMMSNSTwoHalfCirclesSolution.cpp | 2 +- .../MMS/CMMSNSTwoHalfSpheresSolution.cpp | 2 +- .../src/toolboxes/MMS/CMMSNSUnitQuadSolution.cpp | 2 +- .../MMS/CMMSNSUnitQuadSolutionWallBC.cpp | 2 +- Common/src/toolboxes/MMS/CNSUnitQuadSolution.cpp | 2 +- Common/src/toolboxes/MMS/CRinglebSolution.cpp | 2 +- Common/src/toolboxes/MMS/CTGVSolution.cpp | 2 +- .../src/toolboxes/MMS/CUserDefinedSolution.cpp | 2 +- .../src/toolboxes/MMS/CVerificationSolution.cpp | 2 +- .../CreateMMSSourceTerms/CMMSIncEulerSolution.py | 2 +- .../CreateMMSSourceTerms/CMMSIncNSSolution.py | 2 +- Common/src/toolboxes/fem/CFaceOfElement.cpp | 2 +- Common/src/toolboxes/fem/CMatchingFace.cpp | 2 +- Common/src/toolboxes/fem/CReorderElements.cpp | 2 +- Common/src/toolboxes/fem/CSortFaces.cpp | 2 +- Common/src/toolboxes/printing_toolbox.cpp | 2 +- Common/src/wall_model.cpp | 2 +- Docs/docmain.hpp | 4 ++-- QuickStart/inv_NACA0012.cfg | 2 +- README.md | 2 +- SU2_CFD/include/CMarkerProfileReaderFVM.hpp | 2 +- SU2_CFD/include/SU2_CFD.hpp | 2 +- SU2_CFD/include/definition_structure.hpp | 2 +- .../include/drivers/CDiscAdjMultizoneDriver.hpp | 2 +- .../include/drivers/CDiscAdjSinglezoneDriver.hpp | 4 ++-- SU2_CFD/include/drivers/CDriver.hpp | 2 +- SU2_CFD/include/drivers/CDriverBase.hpp | 2 +- SU2_CFD/include/drivers/CDummyDriver.hpp | 2 +- SU2_CFD/include/drivers/CMultizoneDriver.hpp | 4 ++-- SU2_CFD/include/drivers/CSinglezoneDriver.hpp | 4 ++-- SU2_CFD/include/fluid/CConductivityModel.hpp | 2 +- SU2_CFD/include/fluid/CConstantConductivity.hpp | 2 +- .../include/fluid/CConstantConductivityRANS.hpp | 2 +- SU2_CFD/include/fluid/CConstantDensity.hpp | 2 +- SU2_CFD/include/fluid/CConstantDiffusivity.hpp | 2 +- .../include/fluid/CConstantLewisDiffusivity.hpp | 2 +- SU2_CFD/include/fluid/CConstantPrandtl.hpp | 2 +- SU2_CFD/include/fluid/CConstantPrandtlRANS.hpp | 2 +- SU2_CFD/include/fluid/CConstantSchmidt.hpp | 2 +- SU2_CFD/include/fluid/CConstantViscosity.hpp | 2 +- SU2_CFD/include/fluid/CCoolProp.hpp | 2 +- SU2_CFD/include/fluid/CCoolPropConductivity.hpp | 2 +- SU2_CFD/include/fluid/CCoolPropViscosity.hpp | 2 +- SU2_CFD/include/fluid/CDataDrivenFluid.hpp | 2 +- SU2_CFD/include/fluid/CDiffusivityModel.hpp | 2 +- SU2_CFD/include/fluid/CFluidFlamelet.hpp | 2 +- SU2_CFD/include/fluid/CFluidModel.hpp | 2 +- SU2_CFD/include/fluid/CFluidScalar.hpp | 2 +- SU2_CFD/include/fluid/CIdealGas.hpp | 2 +- SU2_CFD/include/fluid/CIncIdealGas.hpp | 2 +- SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp | 2 +- SU2_CFD/include/fluid/CMutationTCLib.hpp | 2 +- SU2_CFD/include/fluid/CNEMOGas.hpp | 2 +- SU2_CFD/include/fluid/CPengRobinson.hpp | 2 +- .../include/fluid/CPolynomialConductivity.hpp | 2 +- .../fluid/CPolynomialConductivityRANS.hpp | 2 +- SU2_CFD/include/fluid/CPolynomialViscosity.hpp | 2 +- SU2_CFD/include/fluid/CSU2TCLib.hpp | 2 +- SU2_CFD/include/fluid/CSutherland.hpp | 2 +- SU2_CFD/include/fluid/CVanDerWaalsGas.hpp | 2 +- SU2_CFD/include/fluid/CViscosityModel.hpp | 2 +- .../gradients/computeGradientsGreenGauss.hpp | 2 +- .../gradients/computeGradientsLeastSquares.hpp | 2 +- .../gradients/correctGradientsSymmetry.hpp | 2 +- .../include/integration/CFEM_DG_Integration.hpp | 4 ++-- SU2_CFD/include/integration/CIntegration.hpp | 2 +- .../include/integration/CIntegrationFactory.hpp | 2 +- .../integration/CMultiGridIntegration.hpp | 2 +- .../include/integration/CNewtonIntegration.hpp | 2 +- .../integration/CSingleGridIntegration.hpp | 2 +- .../integration/CStructuralIntegration.hpp | 2 +- .../include/integration/ComputeLinSysResRMS.hpp | 2 +- SU2_CFD/include/interfaces/CInterface.hpp | 4 ++-- .../cfd/CConservativeVarsInterface.hpp | 2 +- .../interfaces/cfd/CMixingPlaneInterface.hpp | 2 +- .../include/interfaces/cfd/CSlidingInterface.hpp | 2 +- .../interfaces/cht/CConjugateHeatInterface.hpp | 2 +- .../fsi/CDiscAdjFlowTractionInterface.hpp | 2 +- .../interfaces/fsi/CDisplacementsInterface.hpp | 2 +- .../interfaces/fsi/CFlowTractionInterface.hpp | 2 +- SU2_CFD/include/iteration/CAdjFluidIteration.hpp | 2 +- .../include/iteration/CDiscAdjFEAIteration.hpp | 2 +- .../include/iteration/CDiscAdjFluidIteration.hpp | 2 +- .../include/iteration/CDiscAdjHeatIteration.hpp | 2 +- SU2_CFD/include/iteration/CFEAIteration.hpp | 4 ++-- SU2_CFD/include/iteration/CFEMFluidIteration.hpp | 4 ++-- SU2_CFD/include/iteration/CFluidIteration.hpp | 2 +- SU2_CFD/include/iteration/CHeatIteration.hpp | 2 +- SU2_CFD/include/iteration/CIteration.hpp | 2 +- SU2_CFD/include/iteration/CIterationFactory.hpp | 2 +- SU2_CFD/include/iteration/CTurboIteration.hpp | 2 +- SU2_CFD/include/limiters/CLimiterDetails.hpp | 2 +- SU2_CFD/include/limiters/computeLimiters.hpp | 2 +- .../include/limiters/computeLimiters_impl.hpp | 2 +- SU2_CFD/include/numerics/CGradSmoothing.hpp | 2 +- SU2_CFD/include/numerics/CNumerics.hpp | 2 +- SU2_CFD/include/numerics/NEMO/CNEMONumerics.hpp | 2 +- SU2_CFD/include/numerics/NEMO/NEMO_diffusion.hpp | 6 +++--- SU2_CFD/include/numerics/NEMO/NEMO_sources.hpp | 4 ++-- .../numerics/NEMO/convection/ausm_slau.hpp | 2 +- SU2_CFD/include/numerics/NEMO/convection/lax.hpp | 2 +- SU2_CFD/include/numerics/NEMO/convection/msw.hpp | 4 ++-- SU2_CFD/include/numerics/NEMO/convection/roe.hpp | 4 ++-- .../continuous_adjoint/adj_convection.hpp | 2 +- .../continuous_adjoint/adj_diffusion.hpp | 2 +- .../numerics/continuous_adjoint/adj_sources.hpp | 2 +- .../numerics/elasticity/CFEAElasticity.hpp | 4 ++-- .../numerics/elasticity/CFEALinearElasticity.hpp | 6 +++--- .../elasticity/CFEANonlinearElasticity.hpp | 4 ++-- .../numerics/elasticity/nonlinear_models.hpp | 10 +++++----- .../numerics/flow/convection/ausm_slau.hpp | 2 +- .../numerics/flow/convection/centered.hpp | 2 +- SU2_CFD/include/numerics/flow/convection/fds.hpp | 2 +- SU2_CFD/include/numerics/flow/convection/fvs.hpp | 2 +- .../include/numerics/flow/convection/hllc.hpp | 6 +++--- SU2_CFD/include/numerics/flow/convection/roe.hpp | 6 +++--- SU2_CFD/include/numerics/flow/flow_diffusion.hpp | 2 +- SU2_CFD/include/numerics/flow/flow_sources.hpp | 6 +++--- SU2_CFD/include/numerics/heat.hpp | 6 +++--- SU2_CFD/include/numerics/radiation.hpp | 2 +- .../numerics/scalar/scalar_convection.hpp | 2 +- .../include/numerics/scalar/scalar_diffusion.hpp | 2 +- .../include/numerics/scalar/scalar_sources.hpp | 2 +- .../numerics/species/species_convection.hpp | 2 +- .../numerics/species/species_diffusion.hpp | 2 +- .../include/numerics/species/species_sources.hpp | 2 +- SU2_CFD/include/numerics/template.hpp | 2 +- .../turbulent/transition/trans_convection.hpp | 2 +- .../turbulent/transition/trans_correlations.hpp | 2 +- .../turbulent/transition/trans_diffusion.hpp | 2 +- .../turbulent/transition/trans_sources.hpp | 2 +- .../numerics/turbulent/turb_convection.hpp | 2 +- .../numerics/turbulent/turb_diffusion.hpp | 2 +- .../include/numerics/turbulent/turb_sources.hpp | 2 +- SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp | 2 +- SU2_CFD/include/numerics_simd/CNumericsSIMD.hpp | 2 +- .../numerics_simd/flow/convection/centered.hpp | 2 +- .../numerics_simd/flow/convection/common.hpp | 2 +- .../numerics_simd/flow/convection/upwind.hpp | 2 +- .../numerics_simd/flow/diffusion/common.hpp | 2 +- .../flow/diffusion/viscous_fluxes.hpp | 2 +- SU2_CFD/include/numerics_simd/flow/variables.hpp | 2 +- SU2_CFD/include/numerics_simd/util.hpp | 2 +- SU2_CFD/include/output/CAdjElasticityOutput.hpp | 2 +- SU2_CFD/include/output/CAdjFlowCompOutput.hpp | 2 +- SU2_CFD/include/output/CAdjFlowIncOutput.hpp | 2 +- SU2_CFD/include/output/CAdjFlowOutput.hpp | 2 +- SU2_CFD/include/output/CAdjHeatOutput.hpp | 2 +- SU2_CFD/include/output/CBaselineOutput.hpp | 2 +- SU2_CFD/include/output/CElasticityOutput.hpp | 2 +- SU2_CFD/include/output/CFVMOutput.hpp | 2 +- SU2_CFD/include/output/CFlowCompFEMOutput.hpp | 2 +- SU2_CFD/include/output/CFlowCompOutput.hpp | 2 +- SU2_CFD/include/output/CFlowIncOutput.hpp | 2 +- SU2_CFD/include/output/CFlowOutput.hpp | 2 +- SU2_CFD/include/output/CHeatOutput.hpp | 2 +- SU2_CFD/include/output/CMeshOutput.hpp | 2 +- SU2_CFD/include/output/CMultizoneOutput.hpp | 2 +- SU2_CFD/include/output/CNEMOCompOutput.hpp | 2 +- SU2_CFD/include/output/COutput.hpp | 2 +- SU2_CFD/include/output/COutputFactory.hpp | 2 +- .../output/filewriter/CCGNSFileWriter.hpp | 2 +- .../include/output/filewriter/CCSVFileWriter.hpp | 2 +- .../include/output/filewriter/CFEMDataSorter.hpp | 2 +- .../include/output/filewriter/CFVMDataSorter.hpp | 2 +- .../include/output/filewriter/CFileWriter.hpp | 2 +- .../output/filewriter/CParallelDataSorter.hpp | 2 +- .../filewriter/CParaviewBinaryFileWriter.hpp | 2 +- .../output/filewriter/CParaviewFileWriter.hpp | 2 +- .../output/filewriter/CParaviewVTMFileWriter.hpp | 2 +- .../output/filewriter/CParaviewXMLFileWriter.hpp | 2 +- .../include/output/filewriter/CSTLFileWriter.hpp | 4 ++-- .../output/filewriter/CSU2BinaryFileWriter.hpp | 2 +- .../include/output/filewriter/CSU2FileWriter.hpp | 2 +- .../output/filewriter/CSU2MeshFileWriter.hpp | 2 +- .../output/filewriter/CSurfaceFEMDataSorter.hpp | 2 +- .../output/filewriter/CSurfaceFVMDataSorter.hpp | 2 +- .../filewriter/CTecplotBinaryFileWriter.hpp | 2 +- .../output/filewriter/CTecplotFileWriter.hpp | 2 +- SU2_CFD/include/output/tools/CWindowingTools.hpp | 2 +- SU2_CFD/include/sgs_model.hpp | 10 +++++----- SU2_CFD/include/sgs_model.inl | 2 +- SU2_CFD/include/solvers/CAdjEulerSolver.hpp | 2 +- SU2_CFD/include/solvers/CAdjNSSolver.hpp | 2 +- SU2_CFD/include/solvers/CAdjTurbSolver.hpp | 2 +- SU2_CFD/include/solvers/CBaselineSolver.hpp | 2 +- SU2_CFD/include/solvers/CBaselineSolver_FEM.hpp | 4 ++-- SU2_CFD/include/solvers/CDiscAdjFEASolver.hpp | 2 +- SU2_CFD/include/solvers/CDiscAdjMeshSolver.hpp | 2 +- SU2_CFD/include/solvers/CDiscAdjSolver.hpp | 2 +- SU2_CFD/include/solvers/CEulerSolver.hpp | 2 +- SU2_CFD/include/solvers/CFEASolver.hpp | 2 +- SU2_CFD/include/solvers/CFEASolverBase.hpp | 2 +- SU2_CFD/include/solvers/CFEM_DG_EulerSolver.hpp | 4 ++-- SU2_CFD/include/solvers/CFEM_DG_NSSolver.hpp | 4 ++-- SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp | 2 +- SU2_CFD/include/solvers/CFVMFlowSolverBase.inl | 2 +- .../include/solvers/CGradientSmoothingSolver.hpp | 2 +- SU2_CFD/include/solvers/CHeatSolver.hpp | 4 ++-- SU2_CFD/include/solvers/CIncEulerSolver.hpp | 2 +- SU2_CFD/include/solvers/CIncNSSolver.hpp | 2 +- SU2_CFD/include/solvers/CMeshSolver.hpp | 2 +- SU2_CFD/include/solvers/CNEMOEulerSolver.hpp | 4 ++-- SU2_CFD/include/solvers/CNEMONSSolver.hpp | 2 +- SU2_CFD/include/solvers/CNSSolver.hpp | 2 +- SU2_CFD/include/solvers/CRadP1Solver.hpp | 2 +- SU2_CFD/include/solvers/CRadSolver.hpp | 2 +- SU2_CFD/include/solvers/CScalarSolver.hpp | 2 +- SU2_CFD/include/solvers/CScalarSolver.inl | 2 +- SU2_CFD/include/solvers/CSolver.hpp | 2 +- SU2_CFD/include/solvers/CSolverFactory.hpp | 2 +- .../include/solvers/CSpeciesFlameletSolver.hpp | 2 +- SU2_CFD/include/solvers/CSpeciesSolver.hpp | 2 +- SU2_CFD/include/solvers/CTemplateSolver.hpp | 2 +- SU2_CFD/include/solvers/CTransLMSolver.hpp | 2 +- SU2_CFD/include/solvers/CTurbSASolver.hpp | 2 +- SU2_CFD/include/solvers/CTurbSSTSolver.hpp | 2 +- SU2_CFD/include/solvers/CTurbSolver.hpp | 2 +- SU2_CFD/include/task_definition.hpp | 4 ++-- SU2_CFD/include/task_definition.inl | 2 +- SU2_CFD/include/variables/CAdjEulerVariable.hpp | 2 +- SU2_CFD/include/variables/CAdjNSVariable.hpp | 2 +- SU2_CFD/include/variables/CAdjTurbVariable.hpp | 2 +- SU2_CFD/include/variables/CBaselineVariable.hpp | 2 +- .../variables/CDiscAdjFEABoundVariable.hpp | 4 ++-- .../variables/CDiscAdjMeshBoundVariable.hpp | 2 +- SU2_CFD/include/variables/CDiscAdjVariable.hpp | 2 +- SU2_CFD/include/variables/CEulerVariable.hpp | 2 +- SU2_CFD/include/variables/CFEABoundVariable.hpp | 4 ++-- SU2_CFD/include/variables/CFEAVariable.hpp | 4 ++-- SU2_CFD/include/variables/CFlowVariable.hpp | 2 +- SU2_CFD/include/variables/CHeatVariable.hpp | 4 ++-- SU2_CFD/include/variables/CIncEulerVariable.hpp | 2 +- SU2_CFD/include/variables/CIncNSVariable.hpp | 2 +- SU2_CFD/include/variables/CMeshBoundVariable.hpp | 2 +- SU2_CFD/include/variables/CMeshElement.hpp | 2 +- SU2_CFD/include/variables/CMeshVariable.hpp | 2 +- SU2_CFD/include/variables/CNEMOEulerVariable.hpp | 2 +- SU2_CFD/include/variables/CNEMONSVariable.hpp | 2 +- SU2_CFD/include/variables/CNSVariable.hpp | 2 +- SU2_CFD/include/variables/CPrimitiveIndices.hpp | 2 +- SU2_CFD/include/variables/CRadP1Variable.hpp | 2 +- SU2_CFD/include/variables/CRadVariable.hpp | 2 +- SU2_CFD/include/variables/CScalarVariable.hpp | 2 +- .../variables/CSobolevSmoothingVariable.hpp | 2 +- .../variables/CSpeciesFlameletVariable.hpp | 2 +- SU2_CFD/include/variables/CSpeciesVariable.hpp | 2 +- SU2_CFD/include/variables/CTransLMVariable.hpp | 2 +- SU2_CFD/include/variables/CTurbSAVariable.hpp | 2 +- SU2_CFD/include/variables/CTurbSSTVariable.hpp | 2 +- SU2_CFD/include/variables/CTurbVariable.hpp | 2 +- SU2_CFD/include/variables/CVariable.hpp | 2 +- SU2_CFD/src/CMarkerProfileReaderFVM.cpp | 2 +- SU2_CFD/src/SU2_CFD.cpp | 4 ++-- SU2_CFD/src/definition_structure.cpp | 2 +- SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp | 2 +- SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp | 2 +- SU2_CFD/src/drivers/CDriver.cpp | 2 +- SU2_CFD/src/drivers/CDriverBase.cpp | 2 +- SU2_CFD/src/drivers/CDummyDriver.cpp | 2 +- SU2_CFD/src/drivers/CMultizoneDriver.cpp | 2 +- SU2_CFD/src/drivers/CSinglezoneDriver.cpp | 2 +- SU2_CFD/src/fluid/CCoolProp.cpp | 2 +- SU2_CFD/src/fluid/CDataDrivenFluid.cpp | 2 +- SU2_CFD/src/fluid/CFluidFlamelet.cpp | 2 +- SU2_CFD/src/fluid/CFluidModel.cpp | 2 +- SU2_CFD/src/fluid/CFluidScalar.cpp | 2 +- SU2_CFD/src/fluid/CIdealGas.cpp | 2 +- SU2_CFD/src/fluid/CMutationTCLib.cpp | 2 +- SU2_CFD/src/fluid/CNEMOGas.cpp | 2 +- SU2_CFD/src/fluid/CPengRobinson.cpp | 2 +- SU2_CFD/src/fluid/CSU2TCLib.cpp | 2 +- SU2_CFD/src/fluid/CVanDerWaalsGas.cpp | 2 +- SU2_CFD/src/integration/CFEM_DG_Integration.cpp | 2 +- SU2_CFD/src/integration/CIntegration.cpp | 2 +- SU2_CFD/src/integration/CIntegrationFactory.cpp | 2 +- .../src/integration/CMultiGridIntegration.cpp | 2 +- SU2_CFD/src/integration/CNewtonIntegration.cpp | 2 +- .../src/integration/CSingleGridIntegration.cpp | 2 +- .../src/integration/CStructuralIntegration.cpp | 2 +- SU2_CFD/src/interfaces/CInterface.cpp | 2 +- .../cfd/CConservativeVarsInterface.cpp | 2 +- .../src/interfaces/cfd/CMixingPlaneInterface.cpp | 2 +- SU2_CFD/src/interfaces/cfd/CSlidingInterface.cpp | 2 +- .../interfaces/cht/CConjugateHeatInterface.cpp | 2 +- .../fsi/CDiscAdjFlowTractionInterface.cpp | 2 +- .../interfaces/fsi/CDisplacementsInterface.cpp | 2 +- .../interfaces/fsi/CFlowTractionInterface.cpp | 2 +- SU2_CFD/src/iteration/CAdjFluidIteration.cpp | 2 +- SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp | 2 +- SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp | 2 +- SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp | 2 +- SU2_CFD/src/iteration/CFEAIteration.cpp | 2 +- SU2_CFD/src/iteration/CFEMFluidIteration.cpp | 2 +- SU2_CFD/src/iteration/CFluidIteration.cpp | 2 +- SU2_CFD/src/iteration/CHeatIteration.cpp | 2 +- SU2_CFD/src/iteration/CIteration.cpp | 2 +- SU2_CFD/src/iteration/CIterationFactory.cpp | 2 +- SU2_CFD/src/iteration/CTurboIteration.cpp | 2 +- SU2_CFD/src/limiters/CLimiterDetails.cpp | 2 +- SU2_CFD/src/numerics/CGradSmoothing.cpp | 2 +- SU2_CFD/src/numerics/CNumerics.cpp | 2 +- SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp | 2 +- SU2_CFD/src/numerics/NEMO/NEMO_diffusion.cpp | 2 +- SU2_CFD/src/numerics/NEMO/NEMO_sources.cpp | 2 +- .../src/numerics/NEMO/convection/ausm_slau.cpp | 2 +- SU2_CFD/src/numerics/NEMO/convection/lax.cpp | 2 +- SU2_CFD/src/numerics/NEMO/convection/msw.cpp | 2 +- SU2_CFD/src/numerics/NEMO/convection/roe.cpp | 2 +- .../continuous_adjoint/adj_convection.cpp | 2 +- .../continuous_adjoint/adj_diffusion.cpp | 2 +- .../numerics/continuous_adjoint/adj_sources.cpp | 2 +- .../src/numerics/elasticity/CFEAElasticity.cpp | 2 +- .../numerics/elasticity/CFEALinearElasticity.cpp | 2 +- .../elasticity/CFEANonlinearElasticity.cpp | 2 +- .../src/numerics/elasticity/nonlinear_models.cpp | 2 +- .../src/numerics/flow/convection/ausm_slau.cpp | 2 +- .../src/numerics/flow/convection/centered.cpp | 2 +- SU2_CFD/src/numerics/flow/convection/fds.cpp | 2 +- SU2_CFD/src/numerics/flow/convection/fvs.cpp | 2 +- SU2_CFD/src/numerics/flow/convection/hllc.cpp | 2 +- SU2_CFD/src/numerics/flow/convection/roe.cpp | 2 +- SU2_CFD/src/numerics/flow/flow_diffusion.cpp | 2 +- SU2_CFD/src/numerics/flow/flow_sources.cpp | 2 +- SU2_CFD/src/numerics/radiation.cpp | 2 +- SU2_CFD/src/numerics/scalar/scalar_sources.cpp | 2 +- SU2_CFD/src/numerics/species/species_sources.cpp | 2 +- SU2_CFD/src/numerics/template.cpp | 2 +- SU2_CFD/src/output/CAdjElasticityOutput.cpp | 2 +- SU2_CFD/src/output/CAdjFlowCompOutput.cpp | 2 +- SU2_CFD/src/output/CAdjFlowIncOutput.cpp | 2 +- SU2_CFD/src/output/CAdjFlowOutput.cpp | 2 +- SU2_CFD/src/output/CAdjHeatOutput.cpp | 2 +- SU2_CFD/src/output/CBaselineOutput.cpp | 2 +- SU2_CFD/src/output/CElasticityOutput.cpp | 2 +- SU2_CFD/src/output/CFVMOutput.cpp | 2 +- SU2_CFD/src/output/CFlowCompFEMOutput.cpp | 2 +- SU2_CFD/src/output/CFlowCompOutput.cpp | 2 +- SU2_CFD/src/output/CFlowIncOutput.cpp | 2 +- SU2_CFD/src/output/CFlowOutput.cpp | 4 ++-- SU2_CFD/src/output/CHeatOutput.cpp | 2 +- SU2_CFD/src/output/CMeshOutput.cpp | 2 +- SU2_CFD/src/output/CMultizoneOutput.cpp | 2 +- SU2_CFD/src/output/CNEMOCompOutput.cpp | 2 +- SU2_CFD/src/output/COutput.cpp | 2 +- SU2_CFD/src/output/COutputFactory.cpp | 2 +- SU2_CFD/src/output/CTurboOutput.cpp | 2 +- .../src/output/filewriter/CCGNSFileWriter.cpp | 2 +- SU2_CFD/src/output/filewriter/CCSVFileWriter.cpp | 2 +- SU2_CFD/src/output/filewriter/CFEMDataSorter.cpp | 2 +- SU2_CFD/src/output/filewriter/CFVMDataSorter.cpp | 2 +- .../output/filewriter/CParallelDataSorter.cpp | 2 +- .../output/filewriter/CParallelFileWriter.cpp | 2 +- .../filewriter/CParaviewBinaryFileWriter.cpp | 2 +- .../output/filewriter/CParaviewFileWriter.cpp | 2 +- .../output/filewriter/CParaviewVTMFileWriter.cpp | 2 +- .../output/filewriter/CParaviewXMLFileWriter.cpp | 2 +- SU2_CFD/src/output/filewriter/CSTLFileWriter.cpp | 2 +- .../output/filewriter/CSU2BinaryFileWriter.cpp | 2 +- SU2_CFD/src/output/filewriter/CSU2FileWriter.cpp | 2 +- .../src/output/filewriter/CSU2MeshFileWriter.cpp | 2 +- .../output/filewriter/CSurfaceFEMDataSorter.cpp | 2 +- .../output/filewriter/CSurfaceFVMDataSorter.cpp | 2 +- .../filewriter/CTecplotBinaryFileWriter.cpp | 2 +- .../src/output/filewriter/CTecplotFileWriter.cpp | 2 +- SU2_CFD/src/output/tools/CWindowingTools.cpp | 2 +- SU2_CFD/src/python_wrapper_structure.cpp | 2 +- SU2_CFD/src/solvers/CAdjEulerSolver.cpp | 2 +- SU2_CFD/src/solvers/CAdjNSSolver.cpp | 2 +- SU2_CFD/src/solvers/CAdjTurbSolver.cpp | 2 +- SU2_CFD/src/solvers/CBaselineSolver.cpp | 2 +- SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp | 2 +- SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp | 2 +- SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp | 2 +- SU2_CFD/src/solvers/CDiscAdjSolver.cpp | 2 +- SU2_CFD/src/solvers/CEulerSolver.cpp | 4 ++-- SU2_CFD/src/solvers/CFEASolver.cpp | 2 +- SU2_CFD/src/solvers/CFEASolverBase.cpp | 2 +- SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp | 2 +- SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp | 2 +- SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp | 2 +- SU2_CFD/src/solvers/CHeatSolver.cpp | 2 +- SU2_CFD/src/solvers/CIncEulerSolver.cpp | 2 +- SU2_CFD/src/solvers/CIncNSSolver.cpp | 2 +- SU2_CFD/src/solvers/CMeshSolver.cpp | 2 +- SU2_CFD/src/solvers/CNEMOEulerSolver.cpp | 2 +- SU2_CFD/src/solvers/CNEMONSSolver.cpp | 2 +- SU2_CFD/src/solvers/CNSSolver.cpp | 2 +- SU2_CFD/src/solvers/CRadP1Solver.cpp | 2 +- SU2_CFD/src/solvers/CRadSolver.cpp | 2 +- SU2_CFD/src/solvers/CSolver.cpp | 2 +- SU2_CFD/src/solvers/CSolverFactory.cpp | 2 +- SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp | 2 +- SU2_CFD/src/solvers/CSpeciesSolver.cpp | 2 +- SU2_CFD/src/solvers/CTemplateSolver.cpp | 2 +- SU2_CFD/src/solvers/CTransLMSolver.cpp | 2 +- SU2_CFD/src/solvers/CTurbSASolver.cpp | 2 +- SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 2 +- SU2_CFD/src/solvers/CTurbSolver.cpp | 2 +- SU2_CFD/src/variables/CAdjEulerVariable.cpp | 2 +- SU2_CFD/src/variables/CAdjNSVariable.cpp | 2 +- SU2_CFD/src/variables/CAdjTurbVariable.cpp | 2 +- SU2_CFD/src/variables/CBaselineVariable.cpp | 2 +- .../src/variables/CDiscAdjFEABoundVariable.cpp | 2 +- .../src/variables/CDiscAdjMeshBoundVariable.cpp | 2 +- SU2_CFD/src/variables/CDiscAdjVariable.cpp | 2 +- SU2_CFD/src/variables/CEulerVariable.cpp | 2 +- SU2_CFD/src/variables/CFEABoundVariable.cpp | 2 +- SU2_CFD/src/variables/CFEAVariable.cpp | 2 +- SU2_CFD/src/variables/CFlowVariable.cpp | 2 +- SU2_CFD/src/variables/CHeatVariable.cpp | 2 +- SU2_CFD/src/variables/CIncEulerVariable.cpp | 2 +- SU2_CFD/src/variables/CIncNSVariable.cpp | 2 +- SU2_CFD/src/variables/CMeshBoundVariable.cpp | 2 +- SU2_CFD/src/variables/CMeshElement.cpp | 2 +- SU2_CFD/src/variables/CMeshVariable.cpp | 2 +- SU2_CFD/src/variables/CNEMOEulerVariable.cpp | 2 +- SU2_CFD/src/variables/CNEMONSVariable.cpp | 2 +- SU2_CFD/src/variables/CNSVariable.cpp | 2 +- SU2_CFD/src/variables/CRadP1Variable.cpp | 2 +- SU2_CFD/src/variables/CRadVariable.cpp | 2 +- SU2_CFD/src/variables/CScalarVariable.cpp | 2 +- .../src/variables/CSobolevSmoothingVariable.cpp | 2 +- .../src/variables/CSpeciesFlameletVariable.cpp | 2 +- SU2_CFD/src/variables/CSpeciesVariable.cpp | 2 +- SU2_CFD/src/variables/CTransLMVariable.cpp | 2 +- SU2_CFD/src/variables/CTurbSAVariable.cpp | 2 +- SU2_CFD/src/variables/CTurbSSTVariable.cpp | 2 +- SU2_CFD/src/variables/CTurbVariable.cpp | 2 +- SU2_CFD/src/variables/CVariable.cpp | 2 +- SU2_DEF/include/drivers/CDeformationDriver.hpp | 2 +- .../drivers/CDiscAdjDeformationDriver.hpp | 2 +- SU2_DEF/src/SU2_DEF.cpp | 2 +- SU2_DEF/src/drivers/CDeformationDriver.cpp | 2 +- .../src/drivers/CDiscAdjDeformationDriver.cpp | 2 +- SU2_DOT/src/SU2_DOT.cpp | 2 +- SU2_GEO/include/SU2_GEO.hpp | 2 +- SU2_GEO/src/SU2_GEO.cpp | 2 +- SU2_PY/FSI_tools/FSIInterface.py | 2 +- SU2_PY/FSI_tools/FSI_config.py | 2 +- SU2_PY/OptimalPropeller.py | 2 +- SU2_PY/SU2/eval/design.py | 2 +- SU2_PY/SU2/eval/functions.py | 2 +- SU2_PY/SU2/eval/gradients.py | 2 +- SU2_PY/SU2/io/config.py | 2 +- SU2_PY/SU2/io/config_options.py | 2 +- SU2_PY/SU2/io/data.py | 2 +- SU2_PY/SU2/io/filelock.py | 2 +- SU2_PY/SU2/io/redirect.py | 2 +- SU2_PY/SU2/io/state.py | 2 +- SU2_PY/SU2/io/tools.py | 2 +- SU2_PY/SU2/opt/project.py | 2 +- SU2_PY/SU2/opt/scipy_tools.py | 2 +- SU2_PY/SU2/run/adjoint.py | 2 +- SU2_PY/SU2/run/deform.py | 2 +- SU2_PY/SU2/run/direct.py | 2 +- SU2_PY/SU2/run/geometry.py | 2 +- SU2_PY/SU2/run/interface.py | 2 +- SU2_PY/SU2/run/merge.py | 2 +- SU2_PY/SU2/run/projection.py | 2 +- SU2_PY/SU2/util/filter_adjoint.py | 2 +- SU2_PY/SU2/util/plot.py | 2 +- SU2_PY/SU2/util/polarSweepLib.py | 2 +- SU2_PY/SU2/util/which.py | 2 +- SU2_PY/SU2_CFD.py | 2 +- SU2_PY/SU2_Nastran/pysu2_nastran.py | 2 +- SU2_PY/change_version_number.py | 6 +++--- SU2_PY/compute_polar.py | 2 +- SU2_PY/compute_uncertainty.py | 2 +- SU2_PY/continuous_adjoint.py | 2 +- SU2_PY/direct_differentiation.py | 2 +- SU2_PY/discrete_adjoint.py | 2 +- SU2_PY/finite_differences.py | 2 +- SU2_PY/fsi_computation.py | 2 +- SU2_PY/merge_solution.py | 2 +- SU2_PY/mesh_deformation.py | 2 +- SU2_PY/parallel_computation.py | 2 +- SU2_PY/parallel_computation_fsi.py | 2 +- SU2_PY/parse_config.py | 2 +- SU2_PY/profiling.py | 2 +- SU2_PY/pySU2/pySU2.i | 2 +- SU2_PY/pySU2/pySU2ad.i | 2 +- SU2_PY/set_ffd_design_var.py | 2 +- SU2_PY/shape_optimization.py | 4 ++-- SU2_PY/topology_optimization.py | 2 +- SU2_PY/updateHistoryMap.py | 2 +- SU2_SOL/include/SU2_SOL.hpp | 2 +- SU2_SOL/src/SU2_SOL.cpp | 2 +- TestCases/TestCase.py | 2 +- TestCases/aeroelastic/aeroelastic_NACA64A010.cfg | 2 +- .../air_nozzle/air_nozzle_restart.cfg | 2 +- TestCases/cgns_writer/config.cfg | 2 +- .../cont_adj_euler/naca0012/inv_NACA0012.cfg | 2 +- .../cont_adj_euler/naca0012/inv_NACA0012_FD.cfg | 2 +- .../naca0012/inv_NACA0012_discadj.cfg | 2 +- .../naca0012/inv_NACA0012_discadj_multizone.cfg | 2 +- TestCases/cont_adj_euler/oneram6/inv_ONERAM6.cfg | 2 +- TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg | 2 +- .../wedge/inv_wedge_ROE_multiobj.cfg | 2 +- .../cylinder/lam_cylinder.cfg | 2 +- .../naca0012_sub/lam_NACA0012.cfg | 2 +- .../naca0012_trans/lam_NACA0012.cfg | 2 +- TestCases/cont_adj_rans/naca0012/turb_nasa.cfg | 2 +- .../cont_adj_rans/naca0012/turb_nasa_binary.cfg | 2 +- TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg | 2 +- .../cont_adj_rans/rae2822/turb_SA_RAE2822.cfg | 2 +- TestCases/control_surface/inv_ONERAM6_moving.cfg | 2 +- .../control_surface/inv_ONERAM6_setting.cfg | 2 +- .../coupled_cht/comp_2d/cht_2d_3cylinders.cfg | 2 +- .../disc_adj_incomp_2d/cht_2d_3cylinders.cfg | 2 +- .../coupled_cht/incomp_2d/cht_2d_3cylinders.cfg | 2 +- .../incomp_2d_unsteady/cht_2d_3cylinders.cfg | 2 +- TestCases/ddes/flatplate/ddes_flatplate.cfg | 2 +- .../deformation/brick_hex/def_brick_hex.cfg | 2 +- .../brick_hex_rans/def_brick_hex_rans.cfg | 2 +- .../deformation/brick_prism/def_brick_prism.cfg | 2 +- .../brick_prism_rans/def_brick_prism_rans.cfg | 2 +- .../deformation/brick_pyra/def_brick_pyra.cfg | 2 +- .../deformation/brick_tets/def_brick_tets.cfg | 2 +- .../cylindrical_ffd/def_cylindrical.cfg | 2 +- .../intersection_prevention/def_intersect.cfg | 2 +- TestCases/deformation/naca0012/def_NACA0012.cfg | 2 +- .../deformation/naca0012/def_NACA0012_camber.cfg | 2 +- .../deformation/naca0012/def_NACA0012_rbf.cfg | 2 +- .../naca0012/surface_file_NACA0012.cfg | 2 +- TestCases/deformation/naca4412/def_NACA4412.cfg | 2 +- TestCases/deformation/rae2822/def_RAE2822.cfg | 2 +- .../deformation/spherical_ffd/def_spherical.cfg | 2 +- .../spherical_ffd/def_spherical_bspline.cfg | 2 +- TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg | 2 +- .../disc_adj_euler/cylinder3D/inv_cylinder3D.cfg | 2 +- TestCases/disc_adj_euler/oneram6/inv_ONERAM6.cfg | 2 +- TestCases/disc_adj_fea/configAD_fem.cfg | 2 +- TestCases/disc_adj_fsi/configFEA.cfg | 2 +- TestCases/disc_adj_fsi/configFlow.cfg | 2 +- TestCases/disc_adj_heat/disc_adj_heat.cfg | 2 +- TestCases/disc_adj_heat/primal.cfg | 2 +- .../naca0012/incomp_NACA0012_disc.cfg | 2 +- .../cylinder/heated_cylinder.cfg | 2 +- .../naca0012/turb_naca0012_sa.cfg | 2 +- .../naca0012/turb_naca0012_sst.cfg | 2 +- TestCases/disc_adj_rans/cylinder/cylinder.cfg | 2 +- .../cylinder/cylinder_Windowing.cfg | 2 +- .../cylinder/cylinder_Windowing_AD.cfg | 2 +- .../disc_adj_rans/cylinder_DT_1ST/cylinder.cfg | 2 +- TestCases/disc_adj_rans/naca0012/naca0012.cfg | 2 +- .../disc_adj_rans/naca0012/turb_NACA0012_sa.cfg | 2 +- .../disc_adj_rans/naca0012/turb_NACA0012_sst.cfg | 2 +- .../transonic_stator_2D/transonic_stator.cfg | 2 +- TestCases/euler/CRM/inv_CRM_JST.cfg | 2 +- TestCases/euler/biparabolic/BIPARABOLIC.cfg | 2 +- TestCases/euler/bluntbody/blunt.cfg | 2 +- TestCases/euler/channel/inv_channel.cfg | 2 +- TestCases/euler/channel/inv_channel_RK.cfg | 2 +- TestCases/euler/naca0012/inv_NACA0012.cfg | 2 +- TestCases/euler/naca0012/inv_NACA0012_Roe.cfg | 2 +- TestCases/euler/oneram6/inv_ONERAM6.cfg | 2 +- TestCases/euler/ramp/inv_ramp.cfg | 2 +- TestCases/euler/ramp/inv_ramp_msw.cfg | 2 +- .../euler/turbofan_MFR_coupling/MFR_coupling.cfg | 2 +- TestCases/euler/wedge/inv_wedge_HLLC.cfg | 2 +- TestCases/fea_fsi/Airfoil_RBF/config.cfg | 2 +- TestCases/fea_fsi/Airfoil_RBF/configFEA.cfg | 2 +- TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg | 2 +- TestCases/fea_fsi/DynBeam_2d/configBeam_2d.cfg | 2 +- TestCases/fea_fsi/MixElemsKnowles/config.cfg | 2 +- TestCases/fea_fsi/SquareCyl_Beam/config.cfg | 2 +- TestCases/fea_fsi/StatBeam_3d/configBeam_3d.cfg | 2 +- .../ThermalBeam_3d/configBeamNonlinear_3d.cfg | 2 +- .../ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg | 2 +- .../fea_fsi/ThermalBeam_3d/configBeam_3d.cfg | 2 +- .../VonMissesVerif/linear_plane_strain_2d.cfg | 2 +- .../VonMissesVerif/nonlinear_plane_stress_2d.cfg | 2 +- TestCases/fea_topology/config.cfg | 2 +- TestCases/fixed_cl/naca0012/inv_NACA0012.cfg | 2 +- .../fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg | 2 +- .../lam_prem_ch4_cfd.cfg | 2 +- .../lam_prem_ch4_hx_ad.cfg | 2 +- .../lam_prem_ch4_hx_dot.cfg | 2 +- .../lam_prem_ch4_cfd_axi.cfg | 2 +- .../lam_partial_prem_ch4_cfd.cfg | 2 +- .../flamelet_initialization.py | 2 +- .../naca0012/inv_NACA0012_gradsmooth.cfg | 2 +- .../grad_smooth/oneram6/ONERAM6_gradsmooth.cfg | 2 +- TestCases/gust/cosine_gust_zdir.cfg | 2 +- TestCases/gust/gust_with_mesh_deformation.cfg | 2 +- TestCases/gust/inv_gust_NACA0012.cfg | 2 +- TestCases/harmonic_balance/HB.cfg | 2 +- .../hb_rans_preconditioning/davis.cfg | 2 +- .../NACA0012_3D_Hybrid_4thOrder/fem_NACA0012.cfg | 2 +- .../hom_euler/NACA0012_5thOrder/fem_NACA0012.cfg | 2 +- .../NACA0012_5thOrder/fem_NACA0012_reg.cfg | 2 +- .../Sphere_4thOrder_Hexa/fem_Sphere.cfg | 2 +- .../hom_euler/Sphere_4thOrder_Tet/fem_Sphere.cfg | 2 +- .../nPoly1/fem_SubsonicChannel.cfg | 2 +- .../nPoly1/fem_SubsonicChannel_Farfield.cfg | 2 +- .../nPoly2/fem_SubsonicChannel.cfg | 2 +- .../nPoly2/fem_SubsonicChannel_Farfield.cfg | 2 +- .../nPoly4/fem_SubsonicChannel.cfg | 2 +- .../nPoly4/fem_SubsonicChannel_Farfield.cfg | 2 +- .../CylinderViscous/nPoly3/fem_Cylinder_reg.cfg | 2 +- .../FlatPlate/nPoly4/lam_flatplate_reg.cfg | 2 +- .../nPoly3_QuadDominant/fem_Sphere_reg.cfg | 2 +- .../nPoly3_QuadDominant/fem_Sphere_reg_ADER.cfg | 2 +- .../nPoly4/fem_unst_cylinder.cfg | 2 +- .../nPoly4/fem_unst_cylinder_ADER.cfg | 2 +- TestCases/hybrid_regression.py | 2 +- TestCases/hybrid_regression_AD.py | 2 +- .../incomp_euler/naca0012/incomp_NACA0012.cfg | 2 +- TestCases/incomp_euler/nozzle/inv_nozzle.cfg | 2 +- .../buoyancy_cavity/lam_buoyancy_cavity.cfg | 2 +- .../cylinder/incomp_cylinder.cfg | 2 +- .../cylinder/poly_cylinder.cfg | 2 +- .../cylinder_split/cylinder_split.cfg | 2 +- TestCases/incomp_navierstokes/sphere/sphere.cfg | 2 +- .../chtPinArray_2d/BC_HeatTransfer.cfg | 2 +- .../chtPinArray_2d/DA_configMaster.cfg | 2 +- .../chtPinArray_2d/FD_configMaster.cfg | 2 +- .../chtPinArray_2d/configFluid.cfg | 2 +- .../chtPinArray_2d/configMaster.cfg | 2 +- .../chtPinArray_2d/configSolid.cfg | 2 +- .../chtPinArray_3d/configFluid.cfg | 2 +- .../chtPinArray_3d/configMaster.cfg | 2 +- .../chtPinArray_3d/configSolid.cfg | 2 +- .../dp-adjoint_chtPinArray_2d/configFluid.cfg | 2 +- .../dp-adjoint_chtPinArray_2d/configMaster.cfg | 2 +- .../dp-adjoint_chtPinArray_2d/configSolid.cfg | 2 +- .../pipeSlice_3d/sp_pipeSlice_3d_dp_hf_tp.cfg | 2 +- TestCases/incomp_rans/naca0012/naca0012.cfg | 2 +- .../incomp_rans/naca0012/naca0012_SST_SUST.cfg | 2 +- .../rough_flatplate/rough_flatplate_incomp.cfg | 2 +- TestCases/mms/dg_ringleb/ringleb_dg.cfg | 2 +- TestCases/mms/fvm_euler/inv_mms_vortex.cfg | 2 +- TestCases/mms/fvm_incomp_euler/inv_mms_jst.cfg | 2 +- .../mms/fvm_incomp_navierstokes/lam_mms_fds.cfg | 2 +- TestCases/mms/fvm_navierstokes/lam_mms_roe.cfg | 2 +- TestCases/moving_wall/cavity/lam_cavity.cfg | 2 +- .../spinning_cylinder/spinning_cylinder.cfg | 2 +- .../multiple_ffd/naca0012/inv_NACA0012_ffd.cfg | 2 +- .../navierstokes/cylinder/cylinder_lowmach.cfg | 2 +- TestCases/navierstokes/cylinder/lam_cylinder.cfg | 2 +- .../navierstokes/flatplate/lam_flatplate.cfg | 2 +- .../flatplate/lam_flatplate_unst.cfg | 2 +- TestCases/navierstokes/naca0012/lam_NACA0012.cfg | 2 +- .../navierstokes/poiseuille/lam_poiseuille.cfg | 2 +- .../poiseuille/profile_poiseuille.cfg | 2 +- TestCases/nicf/LS89/turb_SA_PR.cfg | 2 +- TestCases/nicf/LS89/turb_SST_PR.cfg | 2 +- TestCases/nicf/coolprop/fluidModel.cfg | 2 +- TestCases/nicf/coolprop/transportModel.cfg | 2 +- TestCases/nicf/datadriven/datadriven_nozzle.cfg | 2 +- TestCases/nicf/edge/edge_PPR.cfg | 2 +- TestCases/nicf/edge/edge_VW.cfg | 2 +- .../nonequilibrium/invwedge/invwedge_ausm.cfg | 2 +- .../invwedge/invwedge_ausmplusup2.cfg | 2 +- .../nonequilibrium/invwedge/invwedge_lax.cfg | 2 +- .../nonequilibrium/invwedge/invwedge_msw.cfg | 2 +- .../nonequilibrium/invwedge/invwedge_roe.cfg | 2 +- .../invwedge/invwedge_ss_inlet.cfg | 2 +- .../thermalbath/finitechemistry/thermalbath.cfg | 2 +- .../thermalbath/frozen/thermalbath_frozen.cfg | 2 +- .../nonequilibrium/visc_wedge/axi_visccone.cfg | 2 +- .../nonequilibrium/visc_wedge/partial_cat.cfg | 2 +- .../nonequilibrium/visc_wedge/super_cat.cfg | 2 +- .../viscwedge_mpp/viscwedge_mpp.cfg | 2 +- .../equivalentarea_naca64206/NACA64206.cfg | 2 +- .../inv_wedge_ROE_2surf_1obj.cfg | 2 +- .../inv_wedge_ROE_multiobj.cfg | 2 +- .../inv_wedge_ROE_multiobj_1surf.cfg | 2 +- .../inv_wedge_ROE_multiobj_combo.cfg | 2 +- .../inv_NACA0012_multipoint.cfg | 2 +- .../pitching_naca64a010/pitching_NACA64A010.cfg | 2 +- .../pitching_oneram6/pitching_ONERAM6.cfg | 2 +- .../rotating_naca0012/rotating_NACA0012.cfg | 2 +- .../steady_inverse_design/inv_NACA0012.cfg | 2 +- .../steady_naca0012/inv_NACA0012_adv.cfg | 2 +- .../steady_naca0012/inv_NACA0012_basic.cfg | 2 +- .../steady_oneram6/inv_ONERAM6_adv.cfg | 2 +- .../steady_oneram6/inv_ONERAM6_basic.cfg | 2 +- .../optimization_rans/naca0012/naca0012.cfg | 2 +- .../pitching_naca64a010/turb_NACA64A010.cfg | 2 +- .../pitching_oneram6/turb_ONERAM6.cfg | 2 +- .../steady_oneram6/turb_ONERAM6.cfg | 2 +- .../steady_rae2822/turb_SA_RAE2822.cfg | 2 +- TestCases/parallel_regression.py | 2 +- TestCases/parallel_regression_AD.py | 2 +- TestCases/pastix_support/config.cfg | 2 +- TestCases/pastix_support/readme.txt | 2 +- TestCases/polar/naca0012/inv_NACA0012.cfg | 2 +- TestCases/py_wrapper/custom_heat_flux/run_ad.py | 2 +- TestCases/py_wrapper/custom_heat_source/run.py | 2 +- TestCases/py_wrapper/custom_inlet/run.py | 2 +- TestCases/py_wrapper/custom_load_fea/config.cfg | 2 +- TestCases/py_wrapper/custom_load_fea/run.py | 2 +- TestCases/py_wrapper/custom_load_fea/run_ad.py | 2 +- .../py_wrapper/deforming_bump_in_channel/run.py | 2 +- .../disc_adj_fea/flow_load_sens/run_adjoint.py | 2 +- .../disc_adj_flow/mesh_disp_sens/run_adjoint.py | 2 +- TestCases/py_wrapper/dyn_fsi/run.py | 2 +- .../flatPlate_rigidMotion_Conf.cfg | 2 +- .../launch_flatPlate_rigidMotion.py | 2 +- .../launch_unsteady_CHT_FlatPlate.py | 2 +- .../unsteady_CHT_FlatPlate_Conf.cfg | 2 +- TestCases/py_wrapper/wavy_wall/run_steady.py | 2 +- .../radiation/p1adjoint/configp1adjoint.cfg | 2 +- TestCases/radiation/p1model/configp1.cfg | 2 +- .../rans/actuatordisk_bem/actuatordisk_bem.cfg | 2 +- .../propeller_variable_load.cfg | 2 +- .../turb_SST_flatplate_roughBCAupoix.cfg | 2 +- .../bc_knopp/turb_SST_flatplate_roughBCKnopp.cfg | 2 +- .../turb_SST_flatplate_roughBCWilcox2006.cfg | 2 +- TestCases/rans/flatplate/turb_SA_flatplate.cfg | 2 +- .../rans/flatplate/turb_SA_flatplate_species.cfg | 2 +- TestCases/rans/flatplate/turb_SST_flatplate.cfg | 2 +- ...turb_SST_flatplate_compressibility_Sarkar.cfg | 2 +- ...turb_SST_flatplate_compressibility_Wilcox.cfg | 2 +- TestCases/rans/naca0012/turb_NACA0012_sa.cfg | 2 +- TestCases/rans/naca0012/turb_NACA0012_sst.cfg | 2 +- .../rans/naca0012/turb_NACA0012_sst_1994-KLm.cfg | 2 +- .../rans/naca0012/turb_NACA0012_sst_2003-Vm.cfg | 2 +- .../rans/naca0012/turb_NACA0012_sst_2003m.cfg | 2 +- .../naca0012/turb_NACA0012_sst_expliciteuler.cfg | 2 +- .../naca0012/turb_NACA0012_sst_fixedvalues.cfg | 2 +- TestCases/rans/oneram6/turb_ONERAM6.cfg | 2 +- TestCases/rans/oneram6/turb_ONERAM6_nk.cfg | 2 +- TestCases/rans/oneram6/turb_ONERAM6_vc.cfg | 2 +- TestCases/rans/propeller/propeller.cfg | 2 +- TestCases/rans/rae2822/turb_SA_RAE2822.cfg | 2 +- TestCases/rans/rae2822/turb_SST_RAE2822.cfg | 2 +- TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg | 2 +- .../rans/restart_directdiff_naca/naca0012.cfg | 2 +- TestCases/rans/s809/trans_s809.cfg | 2 +- TestCases/rans/s809/turb_S809.cfg | 2 +- TestCases/rans/vki_turbine/turb_vki.cfg | 2 +- TestCases/rans_uq/naca0012/turb_NACA0012_uq.cfg | 2 +- .../rans_uq/naca0012/turb_NACA0012_uq_1c.cfg | 2 +- .../rans_uq/naca0012/turb_NACA0012_uq_2c.cfg | 2 +- .../rans_uq/naca0012/turb_NACA0012_uq_3c.cfg | 2 +- .../rans_uq/naca0012/turb_NACA0012_uq_p1c1.cfg | 2 +- .../rans_uq/naca0012/turb_NACA0012_uq_p1c2.cfg | 2 +- .../caradonna_tung/rot_caradonna_tung.cfg | 2 +- TestCases/rotating/naca0012/rot_NACA0012.cfg | 2 +- TestCases/serial_regression.py | 2 +- TestCases/serial_regression_AD.py | 2 +- TestCases/sliding_interface/bars_SST_2D/bars.cfg | 2 +- .../sliding_interface/bars_SST_2D/zone_1.cfg | 2 +- .../sliding_interface/bars_SST_2D/zone_2.cfg | 2 +- .../sliding_interface/bars_SST_2D/zone_3.cfg | 2 +- .../channel_2D/channel_2D_NN.cfg | 2 +- .../channel_2D/channel_2D_WA.cfg | 2 +- .../sliding_interface/channel_2D/zone_2.cfg | 2 +- .../sliding_interface/channel_2D/zone_3.cfg | 2 +- .../channel_3D/channel_3D_NN.cfg | 2 +- .../channel_3D/channel_3D_WA.cfg | 2 +- .../sliding_interface/channel_3D/zone_1.cfg | 2 +- .../sliding_interface/channel_3D/zone_2.cfg | 2 +- .../sliding_interface/channel_3D/zone_3.cfg | 2 +- .../incompressible_steady/config.cfg | 2 +- .../incompressible_steady/configCircle.cfg | 2 +- .../incompressible_steady/configOut.cfg | 2 +- .../incompressible_unsteady/config.cfg | 2 +- .../incompressible_unsteady/configCircle.cfg | 2 +- .../incompressible_unsteady/configOut.cfg | 2 +- TestCases/sliding_interface/pipe/pipe_NN.cfg | 2 +- TestCases/sliding_interface/pipe/pipe_WA.cfg | 2 +- TestCases/sliding_interface/pipe/zone_1.cfg | 2 +- TestCases/sliding_interface/pipe/zone_2.cfg | 2 +- TestCases/sliding_interface/pipe/zone_3.cfg | 2 +- TestCases/sliding_interface/pipe/zone_4.cfg | 2 +- TestCases/sliding_interface/pipe/zone_5.cfg | 2 +- .../rotating_cylinders/rot_cylinders_NN.cfg | 2 +- .../rotating_cylinders/rot_cylinders_WA.cfg | 2 +- .../single_stage/single_stage_NN.cfg | 2 +- .../single_stage/single_stage_WA.cfg | 2 +- .../sliding_interface/single_stage/zone_1.cfg | 2 +- .../sliding_interface/single_stage/zone_2.cfg | 2 +- .../sup_vor_shed_NN.cfg | 2 +- .../sup_vor_shed_WA.cfg | 2 +- .../supersonic_vortex_shedding/zone_1.cfg | 2 +- .../supersonic_vortex_shedding/zone_2.cfg | 2 +- .../uniform_flow/uniform_NN.cfg | 2 +- .../uniform_flow/uniform_WA.cfg | 2 +- .../sliding_interface/uniform_flow/zone_1.cfg | 2 +- .../sliding_interface/uniform_flow/zone_2.cfg | 2 +- .../periodic_pins/configSolid.cfg | 2 +- .../species_transport/multizone/configMaster.cfg | 2 +- .../passive_transport.cfg | 2 +- .../species2_primitiveVenturi.cfg | 2 +- .../species2_primitiveVenturi_boundedscalar.cfg | 2 +- .../species2_primitiveVenturi_mixingmodel.cfg | 2 +- ...tiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg | 2 +- ...rimitiveVenturi_mixingmodel_boundedscalar.cfg | 2 +- ...mitiveVenturi_mixingmodel_heatcapacity_H2.cfg | 2 +- ...iveVenturi_mixingmodel_heatcapacity_H2_ND.cfg | 2 +- ...s2_primitiveVenturi_mixingmodel_viscosity.cfg | 2 +- .../species3_primitiveVenturi_flux_value.cfg | 2 +- .../species3_primitiveVenturi_inletFile.cfg | 2 +- .../transitional_BC_model_ConfigFile.cfg | 2 +- .../transitional_BC_model_ConfigFile.cfg | 2 +- .../transitional_BC_model_ConfigFile.cfg | 2 +- .../APU_turbocharger/Jones_restart.cfg | 2 +- .../axial_stage_2D/Axial_stage2D.cfg | 2 +- .../turbomachinery/axial_stage_2D/zone_1.cfg | 2 +- .../turbomachinery/axial_stage_2D/zone_2.cfg | 2 +- .../centrifugal_blade/centrifugal_blade.cfg | 2 +- .../centrifugal_stage/centrifugal_stage.cfg | 2 +- .../multi_interface/multi_interface_rst.cfg | 2 +- .../transonic_stator_restart.cfg | 2 +- TestCases/tutorials.py | 2 +- .../pitching_NACA64A010.cfg | 2 +- .../pitching_naca64a010_rans/turb_NACA64A010.cfg | 2 +- .../plunging_naca0012/plunging_NACA0012.cfg | 2 +- .../unsteady/square_cylinder/turb_square.cfg | 2 +- .../user_defined_functions/lam_flatplate.cfg | 2 +- TestCases/vandv.py | 2 +- .../species_transport/sandia_jet/validation.cfg | 2 +- .../compressible_SA/turb_SA_flatplate.cfg | 2 +- .../compressible_SST/turb_SST_flatplate.cfg | 2 +- .../incompressible_SA/turb_SA_flatplate.cfg | 2 +- .../incompressible_SST/turb_SST_flatplate.cfg | 2 +- .../Common/containers/CLookupTable_tests.cpp | 2 +- UnitTests/Common/geometry/CGeometry_test.cpp | 2 +- .../geometry/dual_grid/CDualGrid_tests.cpp | 2 +- .../geometry/primal_grid/CPrimalGrid_tests.cpp | 2 +- UnitTests/Common/simple_ad_test.cpp | 2 +- UnitTests/Common/simple_directdiff_test.cpp | 2 +- .../Common/toolboxes/C1DInterpolation_tests.cpp | 2 +- .../CQuasiNewtonInvLeastSquares_tests.cpp | 2 +- .../multilayer_perceptron/CLookUp_ANN_tests.cpp | 2 +- .../multilayer_perceptron/MLP_Jacobian_tests.cpp | 2 +- UnitTests/Common/toolboxes/ndflattener_tests.cpp | 2 +- .../Common/toolboxes/random_toolbox_tests.cpp | 2 +- UnitTests/Common/vectorization.cpp | 2 +- UnitTests/SU2_CFD/fluid/CFluidModel_tests.cpp | 2 +- UnitTests/SU2_CFD/fluid/CFluidModel_tests_AD.cpp | 2 +- UnitTests/SU2_CFD/gradients.cpp | 2 +- UnitTests/SU2_CFD/numerics/CNumerics_tests.cpp | 2 +- UnitTests/SU2_CFD/windowing.cpp | 2 +- UnitTests/UnitQuadTestCase.hpp | 2 +- UnitTests/test_driver.cpp | 2 +- config_template.cfg | 2 +- meson.build | 4 ++-- meson.py | 2 +- meson_scripts/init.py | 2 +- preconfigure.py | 2 +- su2omp.syntax.json | 2 +- 1065 files changed, 1144 insertions(+), 1144 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 7ab77bafeeab..71f780bbed07 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -3,7 +3,7 @@ * \brief All the information about the definition of the physical problem. * The subroutines and functions are in the CConfig.cpp file. * \author F. Palacios, T. Economon, B. Tracey - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/adt/CADTBaseClass.hpp b/Common/include/adt/CADTBaseClass.hpp index 9f5ec34eba15..ccfd420d9b38 100644 --- a/Common/include/adt/CADTBaseClass.hpp +++ b/Common/include/adt/CADTBaseClass.hpp @@ -2,7 +2,7 @@ * \file CADTBaseClass.hpp * \brief Base class for storing an ADT in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/adt/CADTComparePointClass.hpp b/Common/include/adt/CADTComparePointClass.hpp index 01522fb606fa..29386d2d4b23 100644 --- a/Common/include/adt/CADTComparePointClass.hpp +++ b/Common/include/adt/CADTComparePointClass.hpp @@ -2,7 +2,7 @@ * \file CADTComparePointClass.hpp * \brief subroutines for comparing two points in an alternating digital tree (ADT). * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/adt/CADTElemClass.hpp b/Common/include/adt/CADTElemClass.hpp index 6e5fde71ae24..9222a1e0fd80 100644 --- a/Common/include/adt/CADTElemClass.hpp +++ b/Common/include/adt/CADTElemClass.hpp @@ -2,7 +2,7 @@ * \file CADTElemClass.hpp * \brief Class for storing an ADT of (linear) elements in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -36,7 +36,7 @@ * \ingroup ADT * \brief Class for storing an ADT of (linear) elements in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CADTElemClass : public CADTBaseClass { private: diff --git a/Common/include/adt/CADTNodeClass.hpp b/Common/include/adt/CADTNodeClass.hpp index 4f75d99552e3..4bfc7b61e3ad 100644 --- a/Common/include/adt/CADTNodeClass.hpp +++ b/Common/include/adt/CADTNodeClass.hpp @@ -2,7 +2,7 @@ * \file CADTNodeClass.hpp * \brief Class for storing the information needed in a node of an ADT. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/adt/CADTPointsOnlyClass.hpp b/Common/include/adt/CADTPointsOnlyClass.hpp index 170e16b35519..28f8e1ba7ec3 100644 --- a/Common/include/adt/CADTPointsOnlyClass.hpp +++ b/Common/include/adt/CADTPointsOnlyClass.hpp @@ -2,7 +2,7 @@ * \file CADTPointsOnlyClass.hpp * \brief Class for storing an ADT of only points in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/adt/CBBoxTargetClass.hpp b/Common/include/adt/CBBoxTargetClass.hpp index 71f5f65c78cb..996be3d95117 100644 --- a/Common/include/adt/CBBoxTargetClass.hpp +++ b/Common/include/adt/CBBoxTargetClass.hpp @@ -3,7 +3,7 @@ * \brief Class for storing the information of a possible bounding box candidate during a minimum distance search. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -35,7 +35,7 @@ * \brief Class for storing the information of a possible bounding box candidate during a minimum distance search. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ struct CBBoxTargetClass { unsigned long boundingBoxID; /*!< \brief Corresponding bounding box ID. */ diff --git a/Common/include/basic_types/ad_structure.hpp b/Common/include/basic_types/ad_structure.hpp index 1f223937f396..2945e4f9ef84 100644 --- a/Common/include/basic_types/ad_structure.hpp +++ b/Common/include/basic_types/ad_structure.hpp @@ -2,7 +2,7 @@ * \file ad_structure.hpp * \brief Main routines for the algorithmic differentiation (AD) structure. * \author T. Albring, J. Blühdorn - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/basic_types/datatype_structure.hpp b/Common/include/basic_types/datatype_structure.hpp index d845d38fe0e9..623c410e5510 100644 --- a/Common/include/basic_types/datatype_structure.hpp +++ b/Common/include/basic_types/datatype_structure.hpp @@ -2,7 +2,7 @@ * \file datatype_structure.hpp * \brief Headers for generalized datatypes, defines an interface for AD types. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/code_config.hpp b/Common/include/code_config.hpp index 929cc2eb2544..491777a01f3d 100644 --- a/Common/include/code_config.hpp +++ b/Common/include/code_config.hpp @@ -2,7 +2,7 @@ * \file code_config.hpp * \brief Header file for collecting common macros, definitions and type configurations. * \author T. Albring, P. Gomes, J. Blühdorn - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/containers/C2DContainer.hpp b/Common/include/containers/C2DContainer.hpp index b7489f767d7c..85d6d463e115 100644 --- a/Common/include/containers/C2DContainer.hpp +++ b/Common/include/containers/C2DContainer.hpp @@ -2,7 +2,7 @@ * \file C2DContainer.hpp * \brief A templated vector/matrix object. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/containers/CFastFindAndEraseQueue.hpp b/Common/include/containers/CFastFindAndEraseQueue.hpp index 3b709aacf8fd..c22e1832d0e3 100644 --- a/Common/include/containers/CFastFindAndEraseQueue.hpp +++ b/Common/include/containers/CFastFindAndEraseQueue.hpp @@ -3,7 +3,7 @@ * \brief A queue-type container (push back, pop front), but with * fast deletion of arbitrary items (possibly in the middle). * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/containers/CFileReaderLUT.hpp b/Common/include/containers/CFileReaderLUT.hpp index 53b08ee7bd9b..a97e602eabb3 100644 --- a/Common/include/containers/CFileReaderLUT.hpp +++ b/Common/include/containers/CFileReaderLUT.hpp @@ -2,7 +2,7 @@ * \file CFileReaderLUT.hpp * \brief reading lookup table for tabulated fluid properties * \author D. Mayer, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/containers/CLookUpTable.hpp b/Common/include/containers/CLookUpTable.hpp index 703964db4837..c41819521538 100644 --- a/Common/include/containers/CLookUpTable.hpp +++ b/Common/include/containers/CLookUpTable.hpp @@ -2,7 +2,7 @@ * \file CLookupTable.hpp * \brief tabulation of fluid properties * \author D. Mayer, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/containers/CPyWrapperMatrixView.hpp b/Common/include/containers/CPyWrapperMatrixView.hpp index 1b9ef2223fc2..739773de4923 100644 --- a/Common/include/containers/CPyWrapperMatrixView.hpp +++ b/Common/include/containers/CPyWrapperMatrixView.hpp @@ -2,7 +2,7 @@ * \file CPyWrapperMatrixView.hpp * \brief Simple matrix views to use with the python wrapper. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/containers/CTrapezoidalMap.hpp b/Common/include/containers/CTrapezoidalMap.hpp index 26fe8346b9fc..a083b80d9feb 100644 --- a/Common/include/containers/CTrapezoidalMap.hpp +++ b/Common/include/containers/CTrapezoidalMap.hpp @@ -2,7 +2,7 @@ * \file CTrapezoidalMap.hpp * \brief Implementation of the trapezoidal map for tabulation and lookup of fluid properties * \author D. Mayer, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -38,7 +38,7 @@ * \ingroup LookUpInterp * \brief Construction of trapezoidal map for tabulated lookup * \author: D. Mayer, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CTrapezoidalMap { protected: diff --git a/Common/include/containers/CVertexMap.hpp b/Common/include/containers/CVertexMap.hpp index c7c56a7916d8..b274726cf76b 100644 --- a/Common/include/containers/CVertexMap.hpp +++ b/Common/include/containers/CVertexMap.hpp @@ -2,7 +2,7 @@ * \file CVertexMap.hpp * \brief An index to index lookup vector. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/containers/container_decorators.hpp b/Common/include/containers/container_decorators.hpp index d039bc510a25..a9e66857eb33 100644 --- a/Common/include/containers/container_decorators.hpp +++ b/Common/include/containers/container_decorators.hpp @@ -3,7 +3,7 @@ * \brief Collection of small classes that decorate C2DContainer to * augment its functionality, e.g. give it extra dimensions. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/fem/fem_gauss_jacobi_quadrature.hpp b/Common/include/fem/fem_gauss_jacobi_quadrature.hpp index 131e2c795349..e2037829d84e 100644 --- a/Common/include/fem/fem_gauss_jacobi_quadrature.hpp +++ b/Common/include/fem/fem_gauss_jacobi_quadrature.hpp @@ -6,7 +6,7 @@ All the functions in this class are based on the program JACOBI_RULE of John Burkardt. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -95,7 +95,7 @@ using namespace std; * \brief Class used to determine the quadrature points of the Gauss Jacobi integration rules. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CGaussJacobiQuadrature { public: diff --git a/Common/include/fem/fem_geometry_structure.hpp b/Common/include/fem/fem_geometry_structure.hpp index a60603f9d64f..4e5f8accb10c 100644 --- a/Common/include/fem/fem_geometry_structure.hpp +++ b/Common/include/fem/fem_geometry_structure.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for creating the geometrical structure for the FEM solver. * The subroutines and functions are in the fem_geometry_structure.cpp file. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -40,7 +40,7 @@ using namespace std; * \class CVolumeElementFEM * \brief Class to store a volume element for the FEM solver. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CVolumeElementFEM { public: @@ -131,7 +131,7 @@ class CVolumeElementFEM { * \class CPointFEM * \brief Class to store a point for the FEM solver. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ struct CPointFEM { unsigned long globalID; /*!< \brief The global ID of this point in the grid. */ @@ -155,7 +155,7 @@ struct CPointFEM { * \class CInternalFaceElementFEM * \brief Class to store an internal face for the FEM solver. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ struct CInternalFaceElementFEM { unsigned short VTK_Type; /*!< \brief Element type using the VTK convention. */ @@ -199,7 +199,7 @@ struct CInternalFaceElementFEM { * \class CSurfaceElementFEM * \brief Class to store a surface element for the FEM solver. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ struct CSurfaceElementFEM { unsigned short VTK_Type; /*!< \brief Element type using the VTK convention. */ @@ -260,7 +260,7 @@ struct CSurfaceElementFEM { * \class CBoundaryFEM * \brief Class to store a boundary for the FEM solver. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ struct CBoundaryFEM { string markerTag; /*!< \brief Marker tag of this boundary. */ @@ -283,7 +283,7 @@ struct CBoundaryFEM { * \class CMeshFEM * \brief Base class for the FEM solver. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CMeshFEM : public CGeometry { protected: @@ -548,7 +548,7 @@ class CMeshFEM : public CGeometry { * \class CMeshFEM_DG * \brief Class which contains all the variables for the DG FEM solver. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CMeshFEM_DG : public CMeshFEM { protected: diff --git a/Common/include/fem/fem_standard_element.hpp b/Common/include/fem/fem_standard_element.hpp index 48a9e3171233..2a8b5b665b43 100644 --- a/Common/include/fem/fem_standard_element.hpp +++ b/Common/include/fem/fem_standard_element.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main functions for the FEM standard elements. * The functions are in the fem_standard_element.cpp file. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -40,7 +40,7 @@ using namespace std; * \class CFEMStandardElementBase * \brief Base class for a FEM standard element. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEMStandardElementBase { protected: @@ -668,7 +668,7 @@ class CFEMStandardElementBase { * \class CFEMStandardElement * \brief Class to define a FEM standard element. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEMStandardElement : public CFEMStandardElementBase { private: @@ -1101,7 +1101,7 @@ class CFEMStandardElement : public CFEMStandardElementBase { * \class CFEMStandardInternalFace * \brief Class to define a FEM standard internal face. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEMStandardInternalFace : public CFEMStandardElementBase { private: @@ -1434,7 +1434,7 @@ class CFEMStandardInternalFace : public CFEMStandardElementBase { * \class CFEMStandardBoundaryFace * \brief Class to define a FEM standard boundary face. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEMStandardBoundaryFace : public CFEMStandardElementBase { private: diff --git a/Common/include/geometry/CDummyGeometry.hpp b/Common/include/geometry/CDummyGeometry.hpp index 3919291ad158..7bbe529b4525 100644 --- a/Common/include/geometry/CDummyGeometry.hpp +++ b/Common/include/geometry/CDummyGeometry.hpp @@ -2,7 +2,7 @@ * \file CDummyGeometry.hpp * \brief Headers of the dummy geometry class used in "dry run" mode. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/CGeometry.hpp b/Common/include/geometry/CGeometry.hpp index 0b4055500d5a..7958110fb23b 100644 --- a/Common/include/geometry/CGeometry.hpp +++ b/Common/include/geometry/CGeometry.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for creating the geometrical structure. * The subroutines and functions are in the CGeometry.cpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/CMultiGridGeometry.hpp b/Common/include/geometry/CMultiGridGeometry.hpp index f155ec7c2c88..ba635b40f8c9 100644 --- a/Common/include/geometry/CMultiGridGeometry.hpp +++ b/Common/include/geometry/CMultiGridGeometry.hpp @@ -2,7 +2,7 @@ * \file CMultiGridGeometry.hpp * \brief Headers of the multigrid geometry class. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/CMultiGridQueue.hpp b/Common/include/geometry/CMultiGridQueue.hpp index c16e23520e48..04630a26a8c7 100644 --- a/Common/include/geometry/CMultiGridQueue.hpp +++ b/Common/include/geometry/CMultiGridQueue.hpp @@ -3,7 +3,7 @@ * \brief Header of the multigrid queue class for the FVM solver. * The subroutines and functions are in the CMultiGridQueue.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/CPhysicalGeometry.hpp b/Common/include/geometry/CPhysicalGeometry.hpp index c34e6fc8ab46..52d8ea6da08e 100644 --- a/Common/include/geometry/CPhysicalGeometry.hpp +++ b/Common/include/geometry/CPhysicalGeometry.hpp @@ -2,7 +2,7 @@ * \file CPhysicalGeometry.hpp * \brief Headers of the physical geometry class used to read meshes from file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/dual_grid/CDualGrid.hpp b/Common/include/geometry/dual_grid/CDualGrid.hpp index baaaba34a476..0647fe7a6e14 100644 --- a/Common/include/geometry/dual_grid/CDualGrid.hpp +++ b/Common/include/geometry/dual_grid/CDualGrid.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for doing the complete dual grid structure. * The subroutines and functions are in the CDualGrid.cpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/dual_grid/CEdge.hpp b/Common/include/geometry/dual_grid/CEdge.hpp index f92f83253cd0..04d2360efcca 100644 --- a/Common/include/geometry/dual_grid/CEdge.hpp +++ b/Common/include/geometry/dual_grid/CEdge.hpp @@ -2,7 +2,7 @@ * \file CEdge.hpp * \brief Declaration of the edge class CEdge.cpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/dual_grid/CPoint.hpp b/Common/include/geometry/dual_grid/CPoint.hpp index 3a2b1f573fc0..73e6f8fb047f 100644 --- a/Common/include/geometry/dual_grid/CPoint.hpp +++ b/Common/include/geometry/dual_grid/CPoint.hpp @@ -3,7 +3,7 @@ * \brief Declaration of the point class that stores geometric and adjacency * information for dual control volumes. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/dual_grid/CTurboVertex.hpp b/Common/include/geometry/dual_grid/CTurboVertex.hpp index 37d25e8185cf..be2071a8c091 100644 --- a/Common/include/geometry/dual_grid/CTurboVertex.hpp +++ b/Common/include/geometry/dual_grid/CTurboVertex.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for doing the complete dual grid structure. * The subroutines and functions are in the CTurboVertex.cpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/dual_grid/CVertex.hpp b/Common/include/geometry/dual_grid/CVertex.hpp index f0caa9b09a9c..45a139417145 100644 --- a/Common/include/geometry/dual_grid/CVertex.hpp +++ b/Common/include/geometry/dual_grid/CVertex.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for doing the complete dual grid structure. * The subroutines and functions are in the CVertex.cpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/elements/CElement.hpp b/Common/include/geometry/elements/CElement.hpp index e2e436f8169c..7dd43942cce9 100644 --- a/Common/include/geometry/elements/CElement.hpp +++ b/Common/include/geometry/elements/CElement.hpp @@ -3,7 +3,7 @@ * \brief Main header of the Finite Element structure declaring the abstract * interface and the available finite element types. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -929,7 +929,7 @@ class CPYRAM5 final : public CElementWithKnownSizes<5, 5, 3> { * \ingroup FemAlgos * \brief Prism element with 6 Gauss Points * \author R. Sanchez, F. Palacios, A. Bueno, T. Economon, S. Padron. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CPRISM6 final : public CElementWithKnownSizes<6, 6, 3> { private: diff --git a/Common/include/geometry/elements/CElementProperty.hpp b/Common/include/geometry/elements/CElementProperty.hpp index 10a0e0e1fd77..f7c29078fc08 100644 --- a/Common/include/geometry/elements/CElementProperty.hpp +++ b/Common/include/geometry/elements/CElementProperty.hpp @@ -2,7 +2,7 @@ * \file CElementProperty.hpp * \brief Light classes to define finite element properties. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -32,7 +32,7 @@ * \ingroup Elasticity_Equations * \brief Base class for defining element properties. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CProperty { protected: @@ -106,7 +106,7 @@ class CProperty { * \ingroup Elasticity_Equations * \brief Class for defining element properties for the structural solver. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CElementProperty final : public CProperty { private: diff --git a/Common/include/geometry/elements/CGaussVariable.hpp b/Common/include/geometry/elements/CGaussVariable.hpp index ee29f3436bb7..c7b199537f89 100644 --- a/Common/include/geometry/elements/CGaussVariable.hpp +++ b/Common/include/geometry/elements/CGaussVariable.hpp @@ -2,7 +2,7 @@ * \file CGaussVariable.hpp * \brief Light-weight class to store Gaussian point information. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -33,7 +33,7 @@ * \class CGaussVariable * \ingroup FemAlgos * \brief Main class for defining the gaussian points. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CGaussVariable { protected: diff --git a/Common/include/geometry/meshreader/CBoxMeshReaderFEM.hpp b/Common/include/geometry/meshreader/CBoxMeshReaderFEM.hpp index 15912f0ca00f..3c37a8dccd2f 100644 --- a/Common/include/geometry/meshreader/CBoxMeshReaderFEM.hpp +++ b/Common/include/geometry/meshreader/CBoxMeshReaderFEM.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CBoxMeshReaderFEM. * The implementations are in the CBoxMeshReaderFEM.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CBoxMeshReaderFVM.hpp b/Common/include/geometry/meshreader/CBoxMeshReaderFVM.hpp index 5204519deac7..921f6ab112cc 100644 --- a/Common/include/geometry/meshreader/CBoxMeshReaderFVM.hpp +++ b/Common/include/geometry/meshreader/CBoxMeshReaderFVM.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CBoxMeshReaderFVM. * The implementations are in the CBoxMeshReaderFVM.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CCGNSElementType.hpp b/Common/include/geometry/meshreader/CCGNSElementType.hpp index bf774a51bc3a..8ba7a6efca24 100644 --- a/Common/include/geometry/meshreader/CCGNSElementType.hpp +++ b/Common/include/geometry/meshreader/CCGNSElementType.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CCGNSElementType. * The implementations are in the CCGNSElementType.cpp file. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CCGNSMeshReaderBase.hpp b/Common/include/geometry/meshreader/CCGNSMeshReaderBase.hpp index 7c4ee8e336fe..a49c3493f78f 100644 --- a/Common/include/geometry/meshreader/CCGNSMeshReaderBase.hpp +++ b/Common/include/geometry/meshreader/CCGNSMeshReaderBase.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CCGNSMeshReaderBase. * The implementations are in the CCGNSMeshReaderBase.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CCGNSMeshReaderFEM.hpp b/Common/include/geometry/meshreader/CCGNSMeshReaderFEM.hpp index e5e7fe046416..5af8a20a3597 100644 --- a/Common/include/geometry/meshreader/CCGNSMeshReaderFEM.hpp +++ b/Common/include/geometry/meshreader/CCGNSMeshReaderFEM.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CCGNSMeshReaderFEM. * The implementations are in the CCGNSMeshReaderFEM.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp b/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp index 5bd136793e83..189a03258b8d 100644 --- a/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp +++ b/Common/include/geometry/meshreader/CCGNSMeshReaderFVM.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CCGNSMeshReaderFVM. * The implementations are in the CCGNSMeshReaderFVM.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CMeshReaderBase.hpp b/Common/include/geometry/meshreader/CMeshReaderBase.hpp index 74fdffb22f24..a68c7dabea31 100644 --- a/Common/include/geometry/meshreader/CMeshReaderBase.hpp +++ b/Common/include/geometry/meshreader/CMeshReaderBase.hpp @@ -4,7 +4,7 @@ * \brief Header file for the class CMeshReaderBase. * The implementations are in the CMeshReaderBase.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CRectangularMeshReaderFEM.hpp b/Common/include/geometry/meshreader/CRectangularMeshReaderFEM.hpp index 3b22a75f8241..a7b4d5ae4854 100644 --- a/Common/include/geometry/meshreader/CRectangularMeshReaderFEM.hpp +++ b/Common/include/geometry/meshreader/CRectangularMeshReaderFEM.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CRectangularMeshReaderFEM. * The implementations are in the CRectangularMeshReaderFEM.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CRectangularMeshReaderFVM.hpp b/Common/include/geometry/meshreader/CRectangularMeshReaderFVM.hpp index f84f86e9b896..b3385f0c2685 100644 --- a/Common/include/geometry/meshreader/CRectangularMeshReaderFVM.hpp +++ b/Common/include/geometry/meshreader/CRectangularMeshReaderFVM.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CRectangularMeshReaderFVM. * The implementations are in the CRectangularMeshReaderFVM.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderBase.hpp b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderBase.hpp index 81d44d276bc9..f1c35b2d9392 100644 --- a/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderBase.hpp +++ b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderBase.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CSU2ASCIIMeshReaderBase. * The implementations are in the CSU2ASCIIMeshReaderBase.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFEM.hpp b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFEM.hpp index 5bea8ee63bd1..9ea27613ab9f 100644 --- a/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFEM.hpp +++ b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFEM.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CSU2ASCIIMeshReaderFEM. * The implementations are in the CSU2ASCIIMeshReaderFEM.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp index 8a97abd46f49..eb6e21c3a02c 100644 --- a/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp +++ b/Common/include/geometry/meshreader/CSU2ASCIIMeshReaderFVM.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CSU2ASCIIMeshReaderFVM. * The implementations are in the CSU2ASCIIMeshReaderFVM.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/primal_grid/CHexahedron.hpp b/Common/include/geometry/primal_grid/CHexahedron.hpp index a0c8c2bf3ab5..5cc985e6c586 100644 --- a/Common/include/geometry/primal_grid/CHexahedron.hpp +++ b/Common/include/geometry/primal_grid/CHexahedron.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CHexahedron.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/primal_grid/CLine.hpp b/Common/include/geometry/primal_grid/CLine.hpp index 7558a1d030d2..5f507533dbc5 100644 --- a/Common/include/geometry/primal_grid/CLine.hpp +++ b/Common/include/geometry/primal_grid/CLine.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CLine.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/primal_grid/CPrimalGrid.hpp b/Common/include/geometry/primal_grid/CPrimalGrid.hpp index 70fe1df9853c..7610219ad1e6 100644 --- a/Common/include/geometry/primal_grid/CPrimalGrid.hpp +++ b/Common/include/geometry/primal_grid/CPrimalGrid.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the primal_grid_structure.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/primal_grid/CPrimalGridBoundFEM.hpp b/Common/include/geometry/primal_grid/CPrimalGridBoundFEM.hpp index aba7a8be7a0a..5c59ac5ed02a 100644 --- a/Common/include/geometry/primal_grid/CPrimalGridBoundFEM.hpp +++ b/Common/include/geometry/primal_grid/CPrimalGridBoundFEM.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CPrimalGridBoundFEM.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -33,7 +33,7 @@ /*! * \class CPrimalGridBoundFEM * \brief Class to define primal grid boundary element for the FEM solver. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CPrimalGridBoundFEM final : public CPrimalGrid { private: diff --git a/Common/include/geometry/primal_grid/CPrimalGridFEM.hpp b/Common/include/geometry/primal_grid/CPrimalGridFEM.hpp index b289d8c66845..649d4ded8278 100644 --- a/Common/include/geometry/primal_grid/CPrimalGridFEM.hpp +++ b/Common/include/geometry/primal_grid/CPrimalGridFEM.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CPrimalGridFEM.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -34,7 +34,7 @@ /*! * \class CPrimalGridFEM * \brief Class to define primal grid element for the FEM solver. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CPrimalGridFEM final : public CPrimalGrid { private: diff --git a/Common/include/geometry/primal_grid/CPrism.hpp b/Common/include/geometry/primal_grid/CPrism.hpp index 6ad83d7d9645..63fc07a9b8de 100644 --- a/Common/include/geometry/primal_grid/CPrism.hpp +++ b/Common/include/geometry/primal_grid/CPrism.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CPrism.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/primal_grid/CPyramid.hpp b/Common/include/geometry/primal_grid/CPyramid.hpp index 750ab8c32d78..a3e58e431902 100644 --- a/Common/include/geometry/primal_grid/CPyramid.hpp +++ b/Common/include/geometry/primal_grid/CPyramid.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CPyramid.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/primal_grid/CQuadrilateral.hpp b/Common/include/geometry/primal_grid/CQuadrilateral.hpp index 5b03fe6cde19..4389ae2e9bbd 100644 --- a/Common/include/geometry/primal_grid/CQuadrilateral.hpp +++ b/Common/include/geometry/primal_grid/CQuadrilateral.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CQuadrilateral.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/primal_grid/CTetrahedron.hpp b/Common/include/geometry/primal_grid/CTetrahedron.hpp index cd06ea009a8e..eee14ba59a4f 100644 --- a/Common/include/geometry/primal_grid/CTetrahedron.hpp +++ b/Common/include/geometry/primal_grid/CTetrahedron.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CTetrahedron.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/primal_grid/CTriangle.hpp b/Common/include/geometry/primal_grid/CTriangle.hpp index 644d8494e811..a92d64bef705 100644 --- a/Common/include/geometry/primal_grid/CTriangle.hpp +++ b/Common/include/geometry/primal_grid/CTriangle.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the CTriangle.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/geometry/primal_grid/CVertexMPI.hpp b/Common/include/geometry/primal_grid/CVertexMPI.hpp index f7d12a505329..c1882546457c 100644 --- a/Common/include/geometry/primal_grid/CVertexMPI.hpp +++ b/Common/include/geometry/primal_grid/CVertexMPI.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for storing the primal grid structure. * The subroutines and functions are in the primal_grid_structure.cpp file. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/graph_coloring_structure.hpp b/Common/include/graph_coloring_structure.hpp index 00f91e585168..07b906f278bb 100644 --- a/Common/include/graph_coloring_structure.hpp +++ b/Common/include/graph_coloring_structure.hpp @@ -4,7 +4,7 @@ * coloring of a given graph. The functions are in the * graph_coloring_structure.cpp file. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -41,7 +41,7 @@ using namespace std; * \ingroup Graph * \brief Class, which provides distributed graph coloring algorithms. * \author: E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CGraphColoringStructure { public: diff --git a/Common/include/grid_movement/CBSplineBlending.hpp b/Common/include/grid_movement/CBSplineBlending.hpp index 242c939d5a25..86323bf4ec17 100644 --- a/Common/include/grid_movement/CBSplineBlending.hpp +++ b/Common/include/grid_movement/CBSplineBlending.hpp @@ -3,7 +3,7 @@ * \brief Headers of the CBSplineBlending class. * Defines blending using uniform BSplines * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/grid_movement/CBezierBlending.hpp b/Common/include/grid_movement/CBezierBlending.hpp index bb3e8b6f8320..78e2dc2d37b4 100644 --- a/Common/include/grid_movement/CBezierBlending.hpp +++ b/Common/include/grid_movement/CBezierBlending.hpp @@ -3,7 +3,7 @@ * \brief Headers of the CBezierBlending class. * Defines blending using Bernsteinpolynomials (Bezier Curves) * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/grid_movement/CFreeFormBlending.hpp b/Common/include/grid_movement/CFreeFormBlending.hpp index 23f2055deb7e..c9886461e11d 100644 --- a/Common/include/grid_movement/CFreeFormBlending.hpp +++ b/Common/include/grid_movement/CFreeFormBlending.hpp @@ -3,7 +3,7 @@ * \brief Headers of the CFreeFormBlending class. * It is the parent class for the FFD blending function * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/grid_movement/CFreeFormDefBox.hpp b/Common/include/grid_movement/CFreeFormDefBox.hpp index 1f21725b98c0..e9be1934c38a 100644 --- a/Common/include/grid_movement/CFreeFormDefBox.hpp +++ b/Common/include/grid_movement/CFreeFormDefBox.hpp @@ -2,7 +2,7 @@ * \file CFreeFormDefBox.hpp * \brief Headers of the CFreeFormDefBox class. * \author F. Palacios & A. Galdran. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/grid_movement/CGridMovement.hpp b/Common/include/grid_movement/CGridMovement.hpp index 25988d407caa..320fc90597d5 100644 --- a/Common/include/grid_movement/CGridMovement.hpp +++ b/Common/include/grid_movement/CGridMovement.hpp @@ -2,7 +2,7 @@ * \file CGridMovement.hpp * \brief Headers of the CGridMovement class * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/grid_movement/CLinearElasticity.hpp b/Common/include/grid_movement/CLinearElasticity.hpp index eec816399c20..b1a7c30134d5 100644 --- a/Common/include/grid_movement/CLinearElasticity.hpp +++ b/Common/include/grid_movement/CLinearElasticity.hpp @@ -2,7 +2,7 @@ * \file CLinearElasticity.hpp * \brief Headers of the CLinearElasticity class. * \author F. Palacios, A. Bueno, T. Economon, S. Padron. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/grid_movement/CRadialBasisFunctionInterpolation.hpp b/Common/include/grid_movement/CRadialBasisFunctionInterpolation.hpp index e5d43e5fdf0c..a7afb2999c15 100644 --- a/Common/include/grid_movement/CRadialBasisFunctionInterpolation.hpp +++ b/Common/include/grid_movement/CRadialBasisFunctionInterpolation.hpp @@ -2,7 +2,7 @@ * \file CRadialBasisFunctionInterpolation.hpp * \brief Headers of the CRadialBasisFunctionInterpolation class. * \author F. van Steen - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/grid_movement/CRadialBasisFunctionNode.hpp b/Common/include/grid_movement/CRadialBasisFunctionNode.hpp index 735250af4018..7ce6d850d2e3 100644 --- a/Common/include/grid_movement/CRadialBasisFunctionNode.hpp +++ b/Common/include/grid_movement/CRadialBasisFunctionNode.hpp @@ -2,7 +2,7 @@ * \file CRadialBasisFunctionNode.hpp * \brief Declaration of the RBF node class that stores nodal information for the RBF interpolation. * \author F. van Steen - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/grid_movement/CSurfaceMovement.hpp b/Common/include/grid_movement/CSurfaceMovement.hpp index bab748a8dbd7..3209e395e6bd 100644 --- a/Common/include/grid_movement/CSurfaceMovement.hpp +++ b/Common/include/grid_movement/CSurfaceMovement.hpp @@ -2,7 +2,7 @@ * \file CSurfaceMovement.hpp * \brief Headers of the CSurfaceMovement class. * \author F. Palacios, T. Economon. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/grid_movement/CVolumetricMovement.hpp b/Common/include/grid_movement/CVolumetricMovement.hpp index 153daa72128a..e841385e0c60 100644 --- a/Common/include/grid_movement/CVolumetricMovement.hpp +++ b/Common/include/grid_movement/CVolumetricMovement.hpp @@ -2,7 +2,7 @@ * \file CVolumetricMovement.hpp * \brief Headers of the CVolumetricMovement class. * \author F. Palacios, A. Bueno, T. Economon, S. Padron. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/grid_movement/CVolumetricMovementFactory.hpp b/Common/include/grid_movement/CVolumetricMovementFactory.hpp index 094bf1b65faa..702decb25e97 100644 --- a/Common/include/grid_movement/CVolumetricMovementFactory.hpp +++ b/Common/include/grid_movement/CVolumetricMovementFactory.hpp @@ -1,7 +1,7 @@ /*! * \file CVolumetricMovementFactory.hpp * \brief Factory to generate volumetric mover objects. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/interface_interpolation/CInterpolator.hpp b/Common/include/interface_interpolation/CInterpolator.hpp index 02d2404ce826..49d6841abe61 100644 --- a/Common/include/interface_interpolation/CInterpolator.hpp +++ b/Common/include/interface_interpolation/CInterpolator.hpp @@ -2,7 +2,7 @@ * \file CInterpolator.hpp * \brief Base class for multiphysics interpolation. * \author H. Kline - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/interface_interpolation/CInterpolatorFactory.hpp b/Common/include/interface_interpolation/CInterpolatorFactory.hpp index 11caf4e4ea98..fdc76ceccf47 100644 --- a/Common/include/interface_interpolation/CInterpolatorFactory.hpp +++ b/Common/include/interface_interpolation/CInterpolatorFactory.hpp @@ -1,7 +1,7 @@ /*! * \file CInterpolatorFactory.hpp * \brief Factory to generate interpolator objects. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/interface_interpolation/CIsoparametric.hpp b/Common/include/interface_interpolation/CIsoparametric.hpp index d41a2f471f24..0b540f4e66c0 100644 --- a/Common/include/interface_interpolation/CIsoparametric.hpp +++ b/Common/include/interface_interpolation/CIsoparametric.hpp @@ -2,7 +2,7 @@ * \file CIsoparametric.hpp * \brief Isoparametric interpolation using FE shape functions. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/interface_interpolation/CMirror.hpp b/Common/include/interface_interpolation/CMirror.hpp index 3af36172fe59..1b569483a802 100644 --- a/Common/include/interface_interpolation/CMirror.hpp +++ b/Common/include/interface_interpolation/CMirror.hpp @@ -2,7 +2,7 @@ * \file CMirror.hpp * \brief Mirror interpolation for the conservative (work-wise) approach in FSI problems. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/interface_interpolation/CNearestNeighbor.hpp b/Common/include/interface_interpolation/CNearestNeighbor.hpp index 339f0c107a78..12e5cafd73bd 100644 --- a/Common/include/interface_interpolation/CNearestNeighbor.hpp +++ b/Common/include/interface_interpolation/CNearestNeighbor.hpp @@ -2,7 +2,7 @@ * \file CNearestNeighbor.hpp * \brief Nearest Neighbor interpolation class. * \author H. Kline - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/interface_interpolation/CRadialBasisFunction.hpp b/Common/include/interface_interpolation/CRadialBasisFunction.hpp index 13f0e3e84bae..97a3e8524548 100644 --- a/Common/include/interface_interpolation/CRadialBasisFunction.hpp +++ b/Common/include/interface_interpolation/CRadialBasisFunction.hpp @@ -2,7 +2,7 @@ * \file CRadialBasisFunction.hpp * \brief Radial basis function interpolation. * \author Joel Ho, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/interface_interpolation/CSlidingMesh.hpp b/Common/include/interface_interpolation/CSlidingMesh.hpp index febea24d0fc1..328052bd167f 100644 --- a/Common/include/interface_interpolation/CSlidingMesh.hpp +++ b/Common/include/interface_interpolation/CSlidingMesh.hpp @@ -2,7 +2,7 @@ * \file CSlidingMesh.hpp * \brief Sliding mesh interpolation. * \author H. Kline - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/linear_algebra/CMatrixVectorProduct.hpp b/Common/include/linear_algebra/CMatrixVectorProduct.hpp index 2436f17b2754..878bb132b984 100644 --- a/Common/include/linear_algebra/CMatrixVectorProduct.hpp +++ b/Common/include/linear_algebra/CMatrixVectorProduct.hpp @@ -3,7 +3,7 @@ * \brief Headers for the classes related to sparse matrix-vector product wrappers. * The actual operations are currently implemented mostly by CSysMatrix. * \author F. Palacios, J. Hicken, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/linear_algebra/CPastixWrapper.hpp b/Common/include/linear_algebra/CPastixWrapper.hpp index b3dfc4714ca9..7ee570010f0b 100644 --- a/Common/include/linear_algebra/CPastixWrapper.hpp +++ b/Common/include/linear_algebra/CPastixWrapper.hpp @@ -3,7 +3,7 @@ * \brief An interface to the INRIA solver PaStiX * (http://pastix.gforge.inria.fr/files/README-txt.html) * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/linear_algebra/CPreconditioner.hpp b/Common/include/linear_algebra/CPreconditioner.hpp index 94d99f21c170..e4fc7cf159fa 100644 --- a/Common/include/linear_algebra/CPreconditioner.hpp +++ b/Common/include/linear_algebra/CPreconditioner.hpp @@ -3,7 +3,7 @@ * \brief Classes related to linear preconditioner wrappers. * The actual operations are currently implemented mostly by CSysMatrix. * \author F. Palacios, J. Hicken, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/linear_algebra/CSysMatrix.hpp b/Common/include/linear_algebra/CSysMatrix.hpp index bc869adcbf53..ecb26959a06b 100644 --- a/Common/include/linear_algebra/CSysMatrix.hpp +++ b/Common/include/linear_algebra/CSysMatrix.hpp @@ -3,7 +3,7 @@ * \brief Declaration of the block-sparse matrix class. * The implemtation is in CSysMatrix.cpp. * \author F. Palacios, A. Bueno, T. Economon, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/linear_algebra/CSysMatrix.inl b/Common/include/linear_algebra/CSysMatrix.inl index 03f8bdb530d1..163e6fb08da0 100644 --- a/Common/include/linear_algebra/CSysMatrix.inl +++ b/Common/include/linear_algebra/CSysMatrix.inl @@ -5,7 +5,7 @@ * of the .cpp file and so they are hidden to avoid triggering * recompilation of other units when changes are made here. * \author F. Palacios, A. Bueno, T. Economon, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/linear_algebra/CSysSolve.hpp b/Common/include/linear_algebra/CSysSolve.hpp index 4e5576442d99..91e9b11f4e26 100644 --- a/Common/include/linear_algebra/CSysSolve.hpp +++ b/Common/include/linear_algebra/CSysSolve.hpp @@ -3,7 +3,7 @@ * \brief Headers for the classes related to linear solvers (CG, FGMRES, etc) * The subroutines and functions are in the CSysSolve.cpp file. * \author J. Hicken, F. Palacios, T. Economon, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/linear_algebra/CSysSolve_b.hpp b/Common/include/linear_algebra/CSysSolve_b.hpp index 4a08060ce036..eaaa5cbbbc56 100644 --- a/Common/include/linear_algebra/CSysSolve_b.hpp +++ b/Common/include/linear_algebra/CSysSolve_b.hpp @@ -2,7 +2,7 @@ * \file CSysSolve_b.hpp * \brief Routines for the linear solver used in the reverse sweep of AD. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/linear_algebra/CSysVector.hpp b/Common/include/linear_algebra/CSysVector.hpp index c0ab789d4ffb..1498b549bbb8 100644 --- a/Common/include/linear_algebra/CSysVector.hpp +++ b/Common/include/linear_algebra/CSysVector.hpp @@ -3,7 +3,7 @@ * \brief Declararion and inlines of the vector class used in the * solution of large, distributed, sparse linear systems. * \author P. Gomes, F. Palacios, J. Hicken, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/linear_algebra/GPUComms.cuh b/Common/include/linear_algebra/GPUComms.cuh index cf6c37399003..138543818771 100644 --- a/Common/include/linear_algebra/GPUComms.cuh +++ b/Common/include/linear_algebra/GPUComms.cuh @@ -2,7 +2,7 @@ \file GPUComms.cuh * \brief Header file containing universal functions that provide basic and essential utilities for other GPU processes * \author A. Raj -* \version 8.4.0 "Harrier" +* \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/linear_algebra/blas_structure.hpp b/Common/include/linear_algebra/blas_structure.hpp index 922dd77bf84d..88425e253f2f 100644 --- a/Common/include/linear_algebra/blas_structure.hpp +++ b/Common/include/linear_algebra/blas_structure.hpp @@ -4,7 +4,7 @@ operations, which are typically found in the BLAS libraries. The functions are in the blass_structure.cpp file. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -36,7 +36,7 @@ class CConfig; * \ingroup BLAS * \brief Class, which serves as an interface to the BLAS functionalities needed. * \author: E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CBlasStructure { public: diff --git a/Common/include/linear_algebra/vector_expressions.hpp b/Common/include/linear_algebra/vector_expressions.hpp index aa240d433dea..a0d0ce289013 100644 --- a/Common/include/linear_algebra/vector_expressions.hpp +++ b/Common/include/linear_algebra/vector_expressions.hpp @@ -2,7 +2,7 @@ * \file vector_expressions.hpp * \brief Expression templates for vector types with coefficient-wise operations. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index 7cd25f3ab4b4..73266c7dacdb 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -2,7 +2,7 @@ * \file option_structure.hpp * \brief Defines classes for referencing options for easy input in CConfig * \author J. Hicken, B. Tracey - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/option_structure.inl b/Common/include/option_structure.inl index a445cc905bda..cf85994db070 100644 --- a/Common/include/option_structure.inl +++ b/Common/include/option_structure.inl @@ -3,7 +3,7 @@ * \brief Template derived classes from COption, defined here as we * only include them where needed to reduce compilation time. * \author J. Hicken, B. Tracey - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/parallelization/mpi_structure.cpp b/Common/include/parallelization/mpi_structure.cpp index ae9a0ee25aef..03152e709e45 100644 --- a/Common/include/parallelization/mpi_structure.cpp +++ b/Common/include/parallelization/mpi_structure.cpp @@ -2,7 +2,7 @@ * \file mpi_structure.cpp * \brief Main subroutines for the mpi structures. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/parallelization/mpi_structure.hpp b/Common/include/parallelization/mpi_structure.hpp index adca71a89a9d..afe0c666dcbf 100644 --- a/Common/include/parallelization/mpi_structure.hpp +++ b/Common/include/parallelization/mpi_structure.hpp @@ -3,7 +3,7 @@ * \brief Headers of the mpi interface for generalized datatypes. * The subroutines and functions are in the mpi_structure.cpp file. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/parallelization/omp_structure.cpp b/Common/include/parallelization/omp_structure.cpp index beeded9aefd1..3b02ffd2f53a 100644 --- a/Common/include/parallelization/omp_structure.cpp +++ b/Common/include/parallelization/omp_structure.cpp @@ -3,7 +3,7 @@ * \brief Source file counterpart for omp_structure.hpp. * \note Contains OpDiLib initialization, finalization and includes the OpDiLib source file. * \author J. Blühdorn - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/parallelization/omp_structure.hpp b/Common/include/parallelization/omp_structure.hpp index 3c9e5bca9816..af581bd1d76c 100644 --- a/Common/include/parallelization/omp_structure.hpp +++ b/Common/include/parallelization/omp_structure.hpp @@ -13,7 +13,7 @@ * defined here with suitable fallback versions to limit the spread of * compiler tricks in other areas of the code. * \author P. Gomes, J. Blühdorn - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/parallelization/special_vectorization.hpp b/Common/include/parallelization/special_vectorization.hpp index b4435b6c9f42..c661754c35f2 100644 --- a/Common/include/parallelization/special_vectorization.hpp +++ b/Common/include/parallelization/special_vectorization.hpp @@ -2,7 +2,7 @@ * \file special_vectorization.hpp * \brief Code generator header to create specializations of simd::Array. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/parallelization/vectorization.hpp b/Common/include/parallelization/vectorization.hpp index f574ebc2b1f4..34747913843a 100644 --- a/Common/include/parallelization/vectorization.hpp +++ b/Common/include/parallelization/vectorization.hpp @@ -2,7 +2,7 @@ * \file vectorization.hpp * \brief Implementation of a portable SIMD type. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/C1DInterpolation.hpp b/Common/include/toolboxes/C1DInterpolation.hpp index 8cb74a424594..67d048499f2c 100644 --- a/Common/include/toolboxes/C1DInterpolation.hpp +++ b/Common/include/toolboxes/C1DInterpolation.hpp @@ -2,7 +2,7 @@ * \file C1DInterpolation.hpp * \brief Classes for 1D interpolation. * \author Aman Baig, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/CLinearPartitioner.hpp b/Common/include/toolboxes/CLinearPartitioner.hpp index b3cc487035d9..e3ea8ba22cb3 100644 --- a/Common/include/toolboxes/CLinearPartitioner.hpp +++ b/Common/include/toolboxes/CLinearPartitioner.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CLinearPartitioner. * The implementations are in the CLinearPartitioner.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/CQuasiNewtonInvLeastSquares.hpp b/Common/include/toolboxes/CQuasiNewtonInvLeastSquares.hpp index 64bd2ab300aa..5e5fb88e49a7 100644 --- a/Common/include/toolboxes/CQuasiNewtonInvLeastSquares.hpp +++ b/Common/include/toolboxes/CQuasiNewtonInvLeastSquares.hpp @@ -7,7 +7,7 @@ * \note Based on the IQN-ILS method, see DOI 10.1007/s11831-013-9085-5 and * references therein. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/CSquareMatrixCM.hpp b/Common/include/toolboxes/CSquareMatrixCM.hpp index c85f6e90cde9..6b9fdc72cd25 100644 --- a/Common/include/toolboxes/CSquareMatrixCM.hpp +++ b/Common/include/toolboxes/CSquareMatrixCM.hpp @@ -3,7 +3,7 @@ * \brief Dense general square matrix, used for example in DG standard elements * in Column Major order storage. * \author Edwin van der Weide, Pedro Gomes. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/CSymmetricMatrix.hpp b/Common/include/toolboxes/CSymmetricMatrix.hpp index 0f0369d53162..0c7aa70c23e9 100644 --- a/Common/include/toolboxes/CSymmetricMatrix.hpp +++ b/Common/include/toolboxes/CSymmetricMatrix.hpp @@ -2,7 +2,7 @@ * \file CSymmetricMatrix.hpp * \brief Dense symmetric matrix, used for example in RBF interpolation. * \author Joel Ho, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CIncTGVSolution.hpp b/Common/include/toolboxes/MMS/CIncTGVSolution.hpp index f5c089adff79..09eda8abbbda 100644 --- a/Common/include/toolboxes/MMS/CIncTGVSolution.hpp +++ b/Common/include/toolboxes/MMS/CIncTGVSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CIncTGVSolution. * The implementations are in the CIncTGVSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CInviscidVortexSolution.hpp b/Common/include/toolboxes/MMS/CInviscidVortexSolution.hpp index 826186d827b6..5abbdf9056f1 100644 --- a/Common/include/toolboxes/MMS/CInviscidVortexSolution.hpp +++ b/Common/include/toolboxes/MMS/CInviscidVortexSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CInviscidVortexSolution. * The implementations are in the CInviscidVortexSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CMMSIncEulerSolution.hpp b/Common/include/toolboxes/MMS/CMMSIncEulerSolution.hpp index 9c128d72f574..20a62f2e665e 100644 --- a/Common/include/toolboxes/MMS/CMMSIncEulerSolution.hpp +++ b/Common/include/toolboxes/MMS/CMMSIncEulerSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CMMSIncEulerSolution. * The implementations are in the CMMSIncEulerSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CMMSIncNSSolution.hpp b/Common/include/toolboxes/MMS/CMMSIncNSSolution.hpp index ad08cb3f21ea..0027324f6219 100644 --- a/Common/include/toolboxes/MMS/CMMSIncNSSolution.hpp +++ b/Common/include/toolboxes/MMS/CMMSIncNSSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CMMSIncNSSolution. * The implementations are in the CMMSIncNSSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.hpp b/Common/include/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.hpp index b397280c3ee1..bff338ec0c8d 100644 --- a/Common/include/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.hpp +++ b/Common/include/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CMMSNSTwoHalfCirclesSolution. * The implementations are in the CMMSNSTwoHalfCirclesSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.hpp b/Common/include/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.hpp index 01809ba3670f..cdd32d8933f9 100644 --- a/Common/include/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.hpp +++ b/Common/include/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CMMSNSTwoHalfSpheresSolution. * The implementations are in the CMMSNSTwoHalfSpheresSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolution.hpp b/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolution.hpp index e311c31039b7..0fd87bcda5ea 100644 --- a/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolution.hpp +++ b/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CMMSNSUnitQuadSolution. * The implementations are in the CMMSNSUnitQuadSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.hpp b/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.hpp index 085d6cd67ef2..eac0ae788020 100644 --- a/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.hpp +++ b/Common/include/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CMMSNSUnitQuadSolutionWallBC. * The implementations are in the CMMSNSUnitQuadSolutionWallBC.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CNSUnitQuadSolution.hpp b/Common/include/toolboxes/MMS/CNSUnitQuadSolution.hpp index 8ee4833de722..a9699edd1f85 100644 --- a/Common/include/toolboxes/MMS/CNSUnitQuadSolution.hpp +++ b/Common/include/toolboxes/MMS/CNSUnitQuadSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CNSUnitQuadSolution.hpp. * The implementations are in the CNSUnitQuadSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CRinglebSolution.hpp b/Common/include/toolboxes/MMS/CRinglebSolution.hpp index dd3c1414d525..4953c4ab8b75 100644 --- a/Common/include/toolboxes/MMS/CRinglebSolution.hpp +++ b/Common/include/toolboxes/MMS/CRinglebSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CRinglebSolution.hpp. * The implementations are in the CRinglebSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CTGVSolution.hpp b/Common/include/toolboxes/MMS/CTGVSolution.hpp index 5d9e662ac474..91b8a689395c 100644 --- a/Common/include/toolboxes/MMS/CTGVSolution.hpp +++ b/Common/include/toolboxes/MMS/CTGVSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CTGVSolution. * The implementations are in the CTGVSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CUserDefinedSolution.hpp b/Common/include/toolboxes/MMS/CUserDefinedSolution.hpp index e295d86066d4..a8afe0ab1fef 100644 --- a/Common/include/toolboxes/MMS/CUserDefinedSolution.hpp +++ b/Common/include/toolboxes/MMS/CUserDefinedSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CUserDefinedSolution. * The implementations are in the CUserDefinedSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/MMS/CVerificationSolution.hpp b/Common/include/toolboxes/MMS/CVerificationSolution.hpp index 55db35ed4489..e3fdd668cd2d 100644 --- a/Common/include/toolboxes/MMS/CVerificationSolution.hpp +++ b/Common/include/toolboxes/MMS/CVerificationSolution.hpp @@ -3,7 +3,7 @@ * \brief Header file for the base class CVerificationSolution. * The implementations are in the CVerificationSolution.cpp file. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/allocation_toolbox.hpp b/Common/include/toolboxes/allocation_toolbox.hpp index 2eaea805bc69..9c357405b757 100644 --- a/Common/include/toolboxes/allocation_toolbox.hpp +++ b/Common/include/toolboxes/allocation_toolbox.hpp @@ -5,7 +5,7 @@ * \note These are "kernel" functions, only to be used with good reason, * always try to use higher level container classes. * \author P. Gomes, D. Kavolis - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/classes_multiple_integers.hpp b/Common/include/toolboxes/classes_multiple_integers.hpp index e64ab961e8ab..f8b33b5126c5 100644 --- a/Common/include/toolboxes/classes_multiple_integers.hpp +++ b/Common/include/toolboxes/classes_multiple_integers.hpp @@ -2,7 +2,7 @@ * \file classes_multiple_integers.hpp * \brief Header file for the classes that consists of multiple integer types. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -72,7 +72,7 @@ struct CUnsignedShort2T { /*! * \class CLong3T * \brief Help class used to store three longs as one entity. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ struct CLong3T { long long0 = 0; /*!< \brief First long to store in this class. */ diff --git a/Common/include/toolboxes/fem/CFaceOfElement.hpp b/Common/include/toolboxes/fem/CFaceOfElement.hpp index f198f6e8e76c..e97474111df5 100644 --- a/Common/include/toolboxes/fem/CFaceOfElement.hpp +++ b/Common/include/toolboxes/fem/CFaceOfElement.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CFaceOfElement. * The implementations are in the CFaceOfElement.cpp file. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/fem/CMatchingFace.hpp b/Common/include/toolboxes/fem/CMatchingFace.hpp index 8eb213f4343f..94080207e3da 100644 --- a/Common/include/toolboxes/fem/CMatchingFace.hpp +++ b/Common/include/toolboxes/fem/CMatchingFace.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CMatchingFace. * The implementations are in the CMatchingFace.cpp file. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/fem/CReorderElements.hpp b/Common/include/toolboxes/fem/CReorderElements.hpp index 64245f0073e4..f07f2e1f270e 100644 --- a/Common/include/toolboxes/fem/CReorderElements.hpp +++ b/Common/include/toolboxes/fem/CReorderElements.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CReorderElements. * The implementations are in the CReorderElements.cpp file. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -36,7 +36,7 @@ using namespace std; * \class CReorderElements * \brief Class, used to reorder the owned elements after the partitioning. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CReorderElements { private: diff --git a/Common/include/toolboxes/fem/CSortFaces.hpp b/Common/include/toolboxes/fem/CSortFaces.hpp index 9dadc964e1ef..cd70ab8630d2 100644 --- a/Common/include/toolboxes/fem/CSortFaces.hpp +++ b/Common/include/toolboxes/fem/CSortFaces.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CSortFaces. * The implementations are in the CSortFaces.cpp file. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -37,7 +37,7 @@ using namespace std; * \brief Functor, used for a different sorting of the faces than the < operator * of CFaceOfElement. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CVolumeElementFEM; // Forward declaration to avoid problems. class CSortFaces { diff --git a/Common/include/toolboxes/geometry_toolbox.hpp b/Common/include/toolboxes/geometry_toolbox.hpp index 20ceada3c4da..1087f940a36f 100644 --- a/Common/include/toolboxes/geometry_toolbox.hpp +++ b/Common/include/toolboxes/geometry_toolbox.hpp @@ -1,7 +1,7 @@ /*! * \file geometry_toolbox.hpp * \brief Collection of common lightweight geometry-oriented methods. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/graph_toolbox.hpp b/Common/include/toolboxes/graph_toolbox.hpp index c90e3012921a..344e08ccf7ce 100644 --- a/Common/include/toolboxes/graph_toolbox.hpp +++ b/Common/include/toolboxes/graph_toolbox.hpp @@ -2,7 +2,7 @@ * \file graph_toolbox.hpp * \brief Functions and classes to build/represent sparse graphs or sparse patterns. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/ndflattener.hpp b/Common/include/toolboxes/ndflattener.hpp index 664f8116503e..ba411477dc2e 100644 --- a/Common/include/toolboxes/ndflattener.hpp +++ b/Common/include/toolboxes/ndflattener.hpp @@ -2,7 +2,7 @@ * \file ndflattener.hpp * \brief Flatten pointer-to-pointer-... arrays for MPI communication * \author M. Aehle - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/printing_toolbox.hpp b/Common/include/toolboxes/printing_toolbox.hpp index 800565c92401..1cd99d71ec4c 100644 --- a/Common/include/toolboxes/printing_toolbox.hpp +++ b/Common/include/toolboxes/printing_toolbox.hpp @@ -2,7 +2,7 @@ * \file printing_toolbox.hpp * \brief Header file for the printing toolbox. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/toolboxes/random_toolbox.hpp b/Common/include/toolboxes/random_toolbox.hpp index 0f053497ae44..6ad052d9e52d 100644 --- a/Common/include/toolboxes/random_toolbox.hpp +++ b/Common/include/toolboxes/random_toolbox.hpp @@ -1,7 +1,7 @@ /*! * \file random_toolbox.hpp * \brief Collection of utility functions for random number generation. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/tracy_structure.hpp b/Common/include/tracy_structure.hpp index 338830845062..73da545239bb 100644 --- a/Common/include/tracy_structure.hpp +++ b/Common/include/tracy_structure.hpp @@ -6,7 +6,7 @@ * they can be completely "disabled" when compiling without tracy. * \note Do not include tracy headers explicitly anywhere, use this header instead. * \note To enable tracy, define the TRACY_ENABLE macro during compilation. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/include/wall_model.hpp b/Common/include/wall_model.hpp index 2cfc64dfadec..484acad19a8f 100644 --- a/Common/include/wall_model.hpp +++ b/Common/include/wall_model.hpp @@ -2,7 +2,7 @@ * \file wall_model.hpp * \brief Headers for the wall model functions for large eddy simulations. * \author E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -42,7 +42,7 @@ class CFluidModel; * \class CWallModel * \brief Base class for defining the LES wall model. * \author: E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CWallModel { public: diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index d2f0a0a9d409..0f7a5c6821fa 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -2,7 +2,7 @@ * \file CConfig.cpp * \brief Main file for managing the config file * \author F. Palacios, T. Economon, B. Tracey, H. Kline - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -3430,7 +3430,7 @@ void CConfig::SetHeader(SU2_COMPONENT val_software) const{ cout << "\n"; cout << "-------------------------------------------------------------------------\n"; cout << "| ___ _ _ ___ |\n"; - cout << "| / __| | | |_ ) Release 8.4.0 \"Harrier\" |\n"; + cout << "| / __| | | |_ ) Release 8.5.0 \"Harrier\" |\n"; cout << "| \\__ \\ |_| |/ / |\n"; switch (val_software) { case SU2_COMPONENT::SU2_CFD: cout << "| |___/\\___//___| Suite (Computational Fluid Dynamics Code) |\n"; break; diff --git a/Common/src/adt/CADTBaseClass.cpp b/Common/src/adt/CADTBaseClass.cpp index bd099f6a18cc..288db1622421 100644 --- a/Common/src/adt/CADTBaseClass.cpp +++ b/Common/src/adt/CADTBaseClass.cpp @@ -2,7 +2,7 @@ * \file CADTBaseClass.cpp * \brief Base class for storing an ADT in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/adt/CADTElemClass.cpp b/Common/src/adt/CADTElemClass.cpp index 440d073976f5..f65d9115edec 100644 --- a/Common/src/adt/CADTElemClass.cpp +++ b/Common/src/adt/CADTElemClass.cpp @@ -2,7 +2,7 @@ * \file CADTElemClass.cpp * \brief Class for storing an ADT of (linear) elements in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/adt/CADTPointsOnlyClass.cpp b/Common/src/adt/CADTPointsOnlyClass.cpp index c0728cf4ab95..f00d0f97fbc2 100644 --- a/Common/src/adt/CADTPointsOnlyClass.cpp +++ b/Common/src/adt/CADTPointsOnlyClass.cpp @@ -2,7 +2,7 @@ * \file CADTPointsOnlyClass.cpp * \brief Class for storing an ADT of only points in an arbitrary number of dimensions. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/basic_types/ad_structure.cpp b/Common/src/basic_types/ad_structure.cpp index 5deabbd6a3f8..d22ea67f373b 100644 --- a/Common/src/basic_types/ad_structure.cpp +++ b/Common/src/basic_types/ad_structure.cpp @@ -2,7 +2,7 @@ * \file ad_structure.cpp * \brief Main subroutines for the algorithmic differentiation (AD) structure. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/containers/CFileReaderLUT.cpp b/Common/src/containers/CFileReaderLUT.cpp index 97dbfa70c2a8..868c1538dda7 100644 --- a/Common/src/containers/CFileReaderLUT.cpp +++ b/Common/src/containers/CFileReaderLUT.cpp @@ -2,7 +2,7 @@ * \file CFileReaderLUT.cpp * \brief reading lookup table for tabulated fluid properties * \author D. Mayer, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/containers/CLookUpTable.cpp b/Common/src/containers/CLookUpTable.cpp index e1be9dab15fe..a9cd03d96641 100644 --- a/Common/src/containers/CLookUpTable.cpp +++ b/Common/src/containers/CLookUpTable.cpp @@ -2,7 +2,7 @@ * \file CLookupTable.cpp * \brief tabulation of fluid properties * \author D. Mayer, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/containers/CTrapezoidalMap.cpp b/Common/src/containers/CTrapezoidalMap.cpp index f3339e2186a2..75721ee749af 100644 --- a/Common/src/containers/CTrapezoidalMap.cpp +++ b/Common/src/containers/CTrapezoidalMap.cpp @@ -2,7 +2,7 @@ * \file CTrapezoidalMap.cpp * \brief Implementation of the trapezoidal map for tabulation and lookup of fluid properties * \author D. Mayer, T. Economon, N. Beishuizen - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/fem/fem_gauss_jacobi_quadrature.cpp b/Common/src/fem/fem_gauss_jacobi_quadrature.cpp index 43d3723022fb..dddab1ead57b 100644 --- a/Common/src/fem/fem_gauss_jacobi_quadrature.cpp +++ b/Common/src/fem/fem_gauss_jacobi_quadrature.cpp @@ -4,7 +4,7 @@ quadrature rules. All the functions in this file are based on the program JACOBI_RULE of John Burkardt. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/fem/fem_geometry_structure.cpp b/Common/src/fem/fem_geometry_structure.cpp index d4b45d750116..4a98ca15cd45 100644 --- a/Common/src/fem/fem_geometry_structure.cpp +++ b/Common/src/fem/fem_geometry_structure.cpp @@ -2,7 +2,7 @@ * \file fem_geometry_structure.cpp * \brief Functions for creating the primal grid for the FEM solver. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/fem/fem_integration_rules.cpp b/Common/src/fem/fem_integration_rules.cpp index 5751830768c2..24d21c45ab6c 100644 --- a/Common/src/fem/fem_integration_rules.cpp +++ b/Common/src/fem/fem_integration_rules.cpp @@ -2,7 +2,7 @@ * \file fem_integration_rules.cpp * \brief FEM integration rules for the standard elements. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/fem/fem_standard_element.cpp b/Common/src/fem/fem_standard_element.cpp index 4994040c3531..c83b322c1814 100644 --- a/Common/src/fem/fem_standard_element.cpp +++ b/Common/src/fem/fem_standard_element.cpp @@ -2,7 +2,7 @@ * \file fem_standard_element.cpp * \brief Functions for the FEM standard elements. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/fem/fem_wall_distance.cpp b/Common/src/fem/fem_wall_distance.cpp index 90c6d102e222..022707c6868a 100644 --- a/Common/src/fem/fem_wall_distance.cpp +++ b/Common/src/fem/fem_wall_distance.cpp @@ -2,7 +2,7 @@ * \file fem_wall_distance.cpp * \brief Main subroutines for computing the wall distance for the FEM solver. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/fem/fem_work_estimate_metis.cpp b/Common/src/fem/fem_work_estimate_metis.cpp index f372163106dd..e3fce6eb56f8 100644 --- a/Common/src/fem/fem_work_estimate_metis.cpp +++ b/Common/src/fem/fem_work_estimate_metis.cpp @@ -3,7 +3,7 @@ * \brief This file contains the implementation of the member functions WorkEstimateMetis for the FEM standard elements. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/CDummyGeometry.cpp b/Common/src/geometry/CDummyGeometry.cpp index 88b2afda980b..7df80f0f5dd1 100644 --- a/Common/src/geometry/CDummyGeometry.cpp +++ b/Common/src/geometry/CDummyGeometry.cpp @@ -2,7 +2,7 @@ * \file CDummyGeometry.hpp * \brief Implementation of the dummy geometry class used in "dry run" mode. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index 83964c117ac3..ef5b73f2dbbe 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -2,7 +2,7 @@ * \file CGeometry.cpp * \brief Implementation of the base geometry class. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/CMultiGridGeometry.cpp b/Common/src/geometry/CMultiGridGeometry.cpp index 37601860caca..a55c3972cfa3 100644 --- a/Common/src/geometry/CMultiGridGeometry.cpp +++ b/Common/src/geometry/CMultiGridGeometry.cpp @@ -2,7 +2,7 @@ * \file CMultiGridGeometry.cpp * \brief Implementation of the multigrid geometry class. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/CMultiGridQueue.cpp b/Common/src/geometry/CMultiGridQueue.cpp index 0cc7625082c9..db6162659b5d 100644 --- a/Common/src/geometry/CMultiGridQueue.cpp +++ b/Common/src/geometry/CMultiGridQueue.cpp @@ -2,7 +2,7 @@ * \file CMultiGridQueue.cpp * \brief Implementation of the multigrid queue class for the FVM solver. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/CPhysicalGeometry.cpp b/Common/src/geometry/CPhysicalGeometry.cpp index 0d3c0d70001a..53720985fe26 100644 --- a/Common/src/geometry/CPhysicalGeometry.cpp +++ b/Common/src/geometry/CPhysicalGeometry.cpp @@ -2,7 +2,7 @@ * \file CPhysicalGeometry.cpp * \brief Implementation of the physical geometry class. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/CPhysicalGeometryFEM.cpp b/Common/src/geometry/CPhysicalGeometryFEM.cpp index b32d9a018402..82bf5fe45f6a 100644 --- a/Common/src/geometry/CPhysicalGeometryFEM.cpp +++ b/Common/src/geometry/CPhysicalGeometryFEM.cpp @@ -2,7 +2,7 @@ * \file CPhysicalGeometryFEM.cpp * \brief Implementation of the FEM related functions of CPhysicalGeometry. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/dual_grid/CDualGrid.cpp b/Common/src/geometry/dual_grid/CDualGrid.cpp index ea7816edcad8..5bd5ce5ec2b0 100644 --- a/Common/src/geometry/dual_grid/CDualGrid.cpp +++ b/Common/src/geometry/dual_grid/CDualGrid.cpp @@ -2,7 +2,7 @@ * \file CDualGrid.cpp * \brief Main classes for defining the dual grid * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/dual_grid/CEdge.cpp b/Common/src/geometry/dual_grid/CEdge.cpp index 4ff7f85b8715..6e1798abe54c 100644 --- a/Common/src/geometry/dual_grid/CEdge.cpp +++ b/Common/src/geometry/dual_grid/CEdge.cpp @@ -2,7 +2,7 @@ * \file CEdge.cpp * \brief Implementation of the edge class. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/dual_grid/CPoint.cpp b/Common/src/geometry/dual_grid/CPoint.cpp index 410a5c31bfdc..24616df65cc6 100644 --- a/Common/src/geometry/dual_grid/CPoint.cpp +++ b/Common/src/geometry/dual_grid/CPoint.cpp @@ -2,7 +2,7 @@ * \file CPoint.cpp * \brief Main classes for defining the points of the dual grid * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/dual_grid/CTurboVertex.cpp b/Common/src/geometry/dual_grid/CTurboVertex.cpp index 74fa85998d02..3e8803f3d7d8 100644 --- a/Common/src/geometry/dual_grid/CTurboVertex.cpp +++ b/Common/src/geometry/dual_grid/CTurboVertex.cpp @@ -2,7 +2,7 @@ * \file CTurboVertex.cpp * \brief Main classes for defining the turbo vertices of the dual grid * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/dual_grid/CVertex.cpp b/Common/src/geometry/dual_grid/CVertex.cpp index 49b350cac4ee..e318e5ec90d3 100644 --- a/Common/src/geometry/dual_grid/CVertex.cpp +++ b/Common/src/geometry/dual_grid/CVertex.cpp @@ -2,7 +2,7 @@ * \file CVertex.cpp * \brief Main classes for defining the vertices of the dual grid * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CElement.cpp b/Common/src/geometry/elements/CElement.cpp index ec125c31f580..590330a5855d 100644 --- a/Common/src/geometry/elements/CElement.cpp +++ b/Common/src/geometry/elements/CElement.cpp @@ -2,7 +2,7 @@ * \file CElement.cpp * \brief Definition of the Finite Element structure (elements) * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CHEXA8.cpp b/Common/src/geometry/elements/CHEXA8.cpp index 5424775d7f23..d8259f3823a3 100644 --- a/Common/src/geometry/elements/CHEXA8.cpp +++ b/Common/src/geometry/elements/CHEXA8.cpp @@ -2,7 +2,7 @@ * \file CHEXA8.cpp * \brief Definition of 8-node hexa element with 8 Gauss points. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CLINE.cpp b/Common/src/geometry/elements/CLINE.cpp index 37c36c5dd92f..c4c545598d7c 100644 --- a/Common/src/geometry/elements/CLINE.cpp +++ b/Common/src/geometry/elements/CLINE.cpp @@ -2,7 +2,7 @@ * \file CLINE.cpp * \brief Definition of the 2-node line element with two Gauss points. * \author T. Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CPRISM6.cpp b/Common/src/geometry/elements/CPRISM6.cpp index d3d0250e6071..1545764b971f 100644 --- a/Common/src/geometry/elements/CPRISM6.cpp +++ b/Common/src/geometry/elements/CPRISM6.cpp @@ -2,7 +2,7 @@ * \file CPRISM6.cpp * \brief Definition of the 6-node triangular prism element with 6 Gauss points. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CPYRAM5.cpp b/Common/src/geometry/elements/CPYRAM5.cpp index 55a2b9d08759..ded96aa4e671 100644 --- a/Common/src/geometry/elements/CPYRAM5.cpp +++ b/Common/src/geometry/elements/CPYRAM5.cpp @@ -2,7 +2,7 @@ * \file CPYRAM5.cpp * \brief Definition of 5-node pyramid element with 5 Gauss points. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CPYRAM6.cpp b/Common/src/geometry/elements/CPYRAM6.cpp index b29b87625fd0..c1607d56aba9 100644 --- a/Common/src/geometry/elements/CPYRAM6.cpp +++ b/Common/src/geometry/elements/CPYRAM6.cpp @@ -2,7 +2,7 @@ * \file CPYRAM6.cpp * \brief Definition of 5-node pyramid element with 6 Gauss points. * \author T.Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CQUAD4.cpp b/Common/src/geometry/elements/CQUAD4.cpp index 9bc8eb33d9de..a26440ae5854 100644 --- a/Common/src/geometry/elements/CQUAD4.cpp +++ b/Common/src/geometry/elements/CQUAD4.cpp @@ -2,7 +2,7 @@ * \file CQUAD4.cpp * \brief Definition of the 4-node quadrilateral element with 4 Gauss points. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CTETRA1.cpp b/Common/src/geometry/elements/CTETRA1.cpp index fb3ca16c95c0..5f673bc74329 100644 --- a/Common/src/geometry/elements/CTETRA1.cpp +++ b/Common/src/geometry/elements/CTETRA1.cpp @@ -2,7 +2,7 @@ * \file CTETRA1.cpp * \brief Definition of 4-node tetra element with 1 Gauss point. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CTETRA4.cpp b/Common/src/geometry/elements/CTETRA4.cpp index 8337580fca2b..540353366c40 100644 --- a/Common/src/geometry/elements/CTETRA4.cpp +++ b/Common/src/geometry/elements/CTETRA4.cpp @@ -2,7 +2,7 @@ * \file CTETRA4.cpp * \brief Definition of 4-node tetrahedral element with 4 Gauss point. * \author T. Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CTRIA1.cpp b/Common/src/geometry/elements/CTRIA1.cpp index ee0452310bee..4ab7d167dc95 100644 --- a/Common/src/geometry/elements/CTRIA1.cpp +++ b/Common/src/geometry/elements/CTRIA1.cpp @@ -2,7 +2,7 @@ * \file CTRIA1.cpp * \brief Definition of the 3-node triangular element with one Gauss point. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/elements/CTRIA3.cpp b/Common/src/geometry/elements/CTRIA3.cpp index e86df3ad6f91..345de5fd2757 100644 --- a/Common/src/geometry/elements/CTRIA3.cpp +++ b/Common/src/geometry/elements/CTRIA3.cpp @@ -2,7 +2,7 @@ * \file CTRIA3.cpp * \brief Definition of the 3-node triangular element with three Gauss points. * \author T. Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp index 93d4921fd38d..7270915a69c8 100644 --- a/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp +++ b/Common/src/geometry/meshreader/CBoxMeshReaderFEM.cpp @@ -3,7 +3,7 @@ * \brief Reads a 3D box grid into linear partitions for the * finite element solver (FEM). * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp index 857d9f1eafcb..16a7d6d35e37 100644 --- a/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CBoxMeshReaderFVM.cpp @@ -3,7 +3,7 @@ * \brief Reads a 3D box grid into linear partitions for the * finite volume solver (FVM). * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CCGNSElementType.cpp b/Common/src/geometry/meshreader/CCGNSElementType.cpp index ac75f7ccd35e..1007f76be7de 100644 --- a/Common/src/geometry/meshreader/CCGNSElementType.cpp +++ b/Common/src/geometry/meshreader/CCGNSElementType.cpp @@ -2,7 +2,7 @@ * \file CCGNSElementType.cpp * \brief Class that converts the CGNS element definitions to the SU2 standard. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CCGNSMeshReaderBase.cpp b/Common/src/geometry/meshreader/CCGNSMeshReaderBase.cpp index 7d02dd0e9b6c..ee56074898f5 100644 --- a/Common/src/geometry/meshreader/CCGNSMeshReaderBase.cpp +++ b/Common/src/geometry/meshreader/CCGNSMeshReaderBase.cpp @@ -3,7 +3,7 @@ * \brief Helper class for the reading of a CGNS grid file. * linear partitions across all ranks. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp index 3f2a41de39de..a6d90622a896 100644 --- a/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp +++ b/Common/src/geometry/meshreader/CCGNSMeshReaderFEM.cpp @@ -3,7 +3,7 @@ * \brief Class that reads a single zone of a CGNS mesh file from disk into * linear partitions across all ranks. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp index 92969580f753..501e188e40cd 100644 --- a/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CCGNSMeshReaderFVM.cpp @@ -3,7 +3,7 @@ * \brief Class that reads a single zone of a CGNS mesh file from disk into * linear partitions across all ranks. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CMeshReaderBase.cpp b/Common/src/geometry/meshreader/CMeshReaderBase.cpp index 99025d3e87a8..d3720c6c9fd2 100644 --- a/Common/src/geometry/meshreader/CMeshReaderBase.cpp +++ b/Common/src/geometry/meshreader/CMeshReaderBase.cpp @@ -3,7 +3,7 @@ * \brief Helper class that provides the counts for each rank in a linear * partitioning given the global count as input. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp index 432894814459..a35757ca6351 100644 --- a/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp +++ b/Common/src/geometry/meshreader/CRectangularMeshReaderFEM.cpp @@ -3,7 +3,7 @@ * \brief Reads a 2D rectangular grid into linear partitions for the * finite element solver (FEM). * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp index 1b32c0369d90..39477e70a309 100644 --- a/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CRectangularMeshReaderFVM.cpp @@ -3,7 +3,7 @@ * \brief Reads a 2D rectangular grid into linear partitions for the * finite volume solver (FVM). * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderBase.cpp b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderBase.cpp index 1efeb7b5fce8..5a9a6da1fb46 100644 --- a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderBase.cpp +++ b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderBase.cpp @@ -2,7 +2,7 @@ * \file CSU2ASCIIMeshReaderBase.cpp * \brief Helper class for the reading of a native SU2 ASCII grid file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp index 8a9b66e0ea35..0974df48814e 100644 --- a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp +++ b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFEM.cpp @@ -3,7 +3,7 @@ * \brief Reads a native SU2 ASCII grid into linear partitions for the * finite element solver (FEM). * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp index 5857e3ac0a98..e319a1c2c350 100644 --- a/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp +++ b/Common/src/geometry/meshreader/CSU2ASCIIMeshReaderFVM.cpp @@ -3,7 +3,7 @@ * \brief Reads a native SU2 ASCII grid into linear partitions for the * finite volume solver (FVM). * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CHexahedron.cpp b/Common/src/geometry/primal_grid/CHexahedron.cpp index 4a27304ef525..87d97d0d1021 100644 --- a/Common/src/geometry/primal_grid/CHexahedron.cpp +++ b/Common/src/geometry/primal_grid/CHexahedron.cpp @@ -2,7 +2,7 @@ * \file CHexahedron.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CLine.cpp b/Common/src/geometry/primal_grid/CLine.cpp index 5dd86b3e5960..34e14fe33918 100644 --- a/Common/src/geometry/primal_grid/CLine.cpp +++ b/Common/src/geometry/primal_grid/CLine.cpp @@ -2,7 +2,7 @@ * \file CLine.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CPrimalGrid.cpp b/Common/src/geometry/primal_grid/CPrimalGrid.cpp index 611c5ac6cddb..25f60cb7a5fb 100644 --- a/Common/src/geometry/primal_grid/CPrimalGrid.cpp +++ b/Common/src/geometry/primal_grid/CPrimalGrid.cpp @@ -2,7 +2,7 @@ * \file CPrimalGrid.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CPrimalGridBoundFEM.cpp b/Common/src/geometry/primal_grid/CPrimalGridBoundFEM.cpp index 8fdac48503e3..dd23c816a9bb 100644 --- a/Common/src/geometry/primal_grid/CPrimalGridBoundFEM.cpp +++ b/Common/src/geometry/primal_grid/CPrimalGridBoundFEM.cpp @@ -2,7 +2,7 @@ * \file CPrimalGridBoundFEM.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CPrimalGridFEM.cpp b/Common/src/geometry/primal_grid/CPrimalGridFEM.cpp index 91476de7c8f6..83277bb8045b 100644 --- a/Common/src/geometry/primal_grid/CPrimalGridFEM.cpp +++ b/Common/src/geometry/primal_grid/CPrimalGridFEM.cpp @@ -2,7 +2,7 @@ * \file CPrimalGridFEM.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CPrism.cpp b/Common/src/geometry/primal_grid/CPrism.cpp index dc6ff981f273..d6f7c757a3e2 100644 --- a/Common/src/geometry/primal_grid/CPrism.cpp +++ b/Common/src/geometry/primal_grid/CPrism.cpp @@ -2,7 +2,7 @@ * \file CPrism.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CPyramid.cpp b/Common/src/geometry/primal_grid/CPyramid.cpp index 33dc1b5200ef..5364e7a9337f 100644 --- a/Common/src/geometry/primal_grid/CPyramid.cpp +++ b/Common/src/geometry/primal_grid/CPyramid.cpp @@ -2,7 +2,7 @@ * \file CPyramid.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CQuadrilateral.cpp b/Common/src/geometry/primal_grid/CQuadrilateral.cpp index f0402450d1e1..a1908dffd4b8 100644 --- a/Common/src/geometry/primal_grid/CQuadrilateral.cpp +++ b/Common/src/geometry/primal_grid/CQuadrilateral.cpp @@ -2,7 +2,7 @@ * \file CQuadrilateral.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CTetrahedron.cpp b/Common/src/geometry/primal_grid/CTetrahedron.cpp index cf8649480ce9..15627c6c46d0 100644 --- a/Common/src/geometry/primal_grid/CTetrahedron.cpp +++ b/Common/src/geometry/primal_grid/CTetrahedron.cpp @@ -2,7 +2,7 @@ * \file CTetrahedron.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CTriangle.cpp b/Common/src/geometry/primal_grid/CTriangle.cpp index ba6fda5b891a..c706ad0c34e5 100644 --- a/Common/src/geometry/primal_grid/CTriangle.cpp +++ b/Common/src/geometry/primal_grid/CTriangle.cpp @@ -2,7 +2,7 @@ * \file CTriangle.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/geometry/primal_grid/CVertexMPI.cpp b/Common/src/geometry/primal_grid/CVertexMPI.cpp index 7854dd39ad92..9e5a480ed3d4 100644 --- a/Common/src/geometry/primal_grid/CVertexMPI.cpp +++ b/Common/src/geometry/primal_grid/CVertexMPI.cpp @@ -2,7 +2,7 @@ * \file CVertexMPI.cpp * \brief Main classes for defining the primal grid elements * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/graph_coloring_structure.cpp b/Common/src/graph_coloring_structure.cpp index ab3235c8ea5d..45d325c518bf 100644 --- a/Common/src/graph_coloring_structure.cpp +++ b/Common/src/graph_coloring_structure.cpp @@ -2,7 +2,7 @@ * \file graph_coloring_structure.cpp * \brief Functions used to carry out the coloring of a given graph. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/grid_movement/CBSplineBlending.cpp b/Common/src/grid_movement/CBSplineBlending.cpp index 934fbdadd766..780ab20bf9fe 100644 --- a/Common/src/grid_movement/CBSplineBlending.cpp +++ b/Common/src/grid_movement/CBSplineBlending.cpp @@ -2,7 +2,7 @@ * \file CBSplineBlending.cpp * \brief Subroutines for B-Spline blening for FFDs * \author F. Palacios, T. Economon, S. Padron - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/grid_movement/CBezierBlending.cpp b/Common/src/grid_movement/CBezierBlending.cpp index 245993222ec3..9c203757037c 100644 --- a/Common/src/grid_movement/CBezierBlending.cpp +++ b/Common/src/grid_movement/CBezierBlending.cpp @@ -2,7 +2,7 @@ * \file CBezierBlending.cpp * \brief Subroutines for Bezier blending for FFDs * \author F. Palacios, T. Economon, S. Padron - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/grid_movement/CFreeFormBlending.cpp b/Common/src/grid_movement/CFreeFormBlending.cpp index 8ebfbe2d19b6..e06d71d05bf4 100644 --- a/Common/src/grid_movement/CFreeFormBlending.cpp +++ b/Common/src/grid_movement/CFreeFormBlending.cpp @@ -2,7 +2,7 @@ * \file CFreeFormBlending.cpp * \brief Parent class for FFD Blending functions * \author F. Palacios, T. Economon, S. Padron - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/grid_movement/CFreeFormDefBox.cpp b/Common/src/grid_movement/CFreeFormDefBox.cpp index 219f6ac15eaa..c5b972b1b2d4 100644 --- a/Common/src/grid_movement/CFreeFormDefBox.cpp +++ b/Common/src/grid_movement/CFreeFormDefBox.cpp @@ -2,7 +2,7 @@ * \file CFreeFormDefBox.cpp * \brief Subroutines for handling Free-Form Deformation Boxes * \author F. Palacios, T. Economon, S. Padron - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/grid_movement/CGridMovement.cpp b/Common/src/grid_movement/CGridMovement.cpp index ad60259e6181..4cc159870d6b 100644 --- a/Common/src/grid_movement/CGridMovement.cpp +++ b/Common/src/grid_movement/CGridMovement.cpp @@ -2,7 +2,7 @@ * \file CGridMovement.cpp * \brief Parent class for grid movement classes * \author F. Palacios, T. Economon, S. Padron - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/grid_movement/CLinearElasticity.cpp b/Common/src/grid_movement/CLinearElasticity.cpp index 6ce11a65422a..3417d4bae1c7 100644 --- a/Common/src/grid_movement/CLinearElasticity.cpp +++ b/Common/src/grid_movement/CLinearElasticity.cpp @@ -2,7 +2,7 @@ * \file CLinearElasticity.cpp * \brief Subroutines for moving mesh volume elements using the linear elasticity analogy * \author F. Palacios, T. Economon, S. Padron - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/grid_movement/CRadialBasisFunctionInterpolation.cpp b/Common/src/grid_movement/CRadialBasisFunctionInterpolation.cpp index f94caf2e293c..b9c4f388f390 100644 --- a/Common/src/grid_movement/CRadialBasisFunctionInterpolation.cpp +++ b/Common/src/grid_movement/CRadialBasisFunctionInterpolation.cpp @@ -2,7 +2,7 @@ * \file CRadialBasisFunctionInterpolation.cpp * \brief Subroutines for moving mesh volume elements using Radial Basis Function interpolation. * \author F. van Steen - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/grid_movement/CSurfaceMovement.cpp b/Common/src/grid_movement/CSurfaceMovement.cpp index 271f3dbe7e64..77f5110540e9 100644 --- a/Common/src/grid_movement/CSurfaceMovement.cpp +++ b/Common/src/grid_movement/CSurfaceMovement.cpp @@ -2,7 +2,7 @@ * \file CSurfaceMovement.cpp * \brief Subroutines for moving mesh surface elements * \author F. Palacios, T. Economon, S. Padron - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/grid_movement/CVolumetricMovement.cpp b/Common/src/grid_movement/CVolumetricMovement.cpp index 235f19fffaa3..ca6001b7f9f9 100644 --- a/Common/src/grid_movement/CVolumetricMovement.cpp +++ b/Common/src/grid_movement/CVolumetricMovement.cpp @@ -2,7 +2,7 @@ * \file CVolumetricMovement.cpp * \brief Subroutines for moving mesh volume elements * \author F. Palacios, T. Economon, S. Padron - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/grid_movement/CVolumetricMovementFactory.cpp b/Common/src/grid_movement/CVolumetricMovementFactory.cpp index b9a17829290f..17c9453daa32 100644 --- a/Common/src/grid_movement/CVolumetricMovementFactory.cpp +++ b/Common/src/grid_movement/CVolumetricMovementFactory.cpp @@ -1,7 +1,7 @@ /*! * \file CVolumetricMovementFactory.cpp * \brief Factory to generate volumetric mover objects. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/interface_interpolation/CInterpolator.cpp b/Common/src/interface_interpolation/CInterpolator.cpp index dc8176aa3cbd..061fb53b159f 100644 --- a/Common/src/interface_interpolation/CInterpolator.cpp +++ b/Common/src/interface_interpolation/CInterpolator.cpp @@ -2,7 +2,7 @@ * \file CInterpolator.cpp * \brief Definition of the base class for interface interpolation. * \author H. Kline - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/interface_interpolation/CInterpolatorFactory.cpp b/Common/src/interface_interpolation/CInterpolatorFactory.cpp index c7a57e6ed292..f17d2d3af941 100644 --- a/Common/src/interface_interpolation/CInterpolatorFactory.cpp +++ b/Common/src/interface_interpolation/CInterpolatorFactory.cpp @@ -1,7 +1,7 @@ /*! * \file CInterpolatorFactory.cpp * \brief Factory to generate interpolator objects. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/interface_interpolation/CIsoparametric.cpp b/Common/src/interface_interpolation/CIsoparametric.cpp index 51feca37cb80..83e737e7a72a 100644 --- a/Common/src/interface_interpolation/CIsoparametric.cpp +++ b/Common/src/interface_interpolation/CIsoparametric.cpp @@ -2,7 +2,7 @@ * \file CIsoparametric.cpp * \brief Implementation isoparametric interpolation (using FE shape functions). * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/interface_interpolation/CMirror.cpp b/Common/src/interface_interpolation/CMirror.cpp index 26f8e3771072..ed4236ce6a02 100644 --- a/Common/src/interface_interpolation/CMirror.cpp +++ b/Common/src/interface_interpolation/CMirror.cpp @@ -2,7 +2,7 @@ * \file CMirror.cpp * \brief Implementation of mirror interpolation (conservative approach in FSI problems). * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/interface_interpolation/CNearestNeighbor.cpp b/Common/src/interface_interpolation/CNearestNeighbor.cpp index 302669b1fdb5..2c245e9fc554 100644 --- a/Common/src/interface_interpolation/CNearestNeighbor.cpp +++ b/Common/src/interface_interpolation/CNearestNeighbor.cpp @@ -2,7 +2,7 @@ * \file CNearestNeighbor.cpp * \brief Implementation of nearest neighbor interpolation. * \author H. Kline - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/interface_interpolation/CRadialBasisFunction.cpp b/Common/src/interface_interpolation/CRadialBasisFunction.cpp index 219685c5a248..c1d932588f69 100644 --- a/Common/src/interface_interpolation/CRadialBasisFunction.cpp +++ b/Common/src/interface_interpolation/CRadialBasisFunction.cpp @@ -2,7 +2,7 @@ * \file CRadialBasisFunction.cpp * \brief Implementation of RBF interpolation. * \author Joel Ho, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/interface_interpolation/CSlidingMesh.cpp b/Common/src/interface_interpolation/CSlidingMesh.cpp index e5e6788ee8d0..a81ff98f31fb 100644 --- a/Common/src/interface_interpolation/CSlidingMesh.cpp +++ b/Common/src/interface_interpolation/CSlidingMesh.cpp @@ -2,7 +2,7 @@ * \file CSlidingMesh.cpp * \brief Implementation of sliding mesh interpolation. * \author H. Kline - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/linear_algebra/CPastixWrapper.cpp b/Common/src/linear_algebra/CPastixWrapper.cpp index 51325275b5fd..1633a88bbde9 100644 --- a/Common/src/linear_algebra/CPastixWrapper.cpp +++ b/Common/src/linear_algebra/CPastixWrapper.cpp @@ -3,7 +3,7 @@ * \brief An interface to the INRIA solver PaStiX * (http://pastix.gforge.inria.fr/files/README-txt.html) * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/linear_algebra/CSysMatrix.cpp b/Common/src/linear_algebra/CSysMatrix.cpp index 478d4d7ede69..f9b5d5427321 100644 --- a/Common/src/linear_algebra/CSysMatrix.cpp +++ b/Common/src/linear_algebra/CSysMatrix.cpp @@ -2,7 +2,7 @@ * \file CSysMatrix.cpp * \brief Implementation of the sparse matrix class. * \author F. Palacios, A. Bueno, T. Economon, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/linear_algebra/CSysMatrixGPU.cu b/Common/src/linear_algebra/CSysMatrixGPU.cu index 13b77ca2f03e..90389264ed31 100644 --- a/Common/src/linear_algebra/CSysMatrixGPU.cu +++ b/Common/src/linear_algebra/CSysMatrixGPU.cu @@ -2,7 +2,7 @@ * \file CSysMatrixGPU.cu * \brief Implementations of Kernels and Functions for Matrix Operations on the GPU * \author A. Raj - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/linear_algebra/CSysSolve.cpp b/Common/src/linear_algebra/CSysSolve.cpp index 32e8325e2b35..953bed0ef2af 100644 --- a/Common/src/linear_algebra/CSysSolve.cpp +++ b/Common/src/linear_algebra/CSysSolve.cpp @@ -2,7 +2,7 @@ * \file CSysSolve.cpp * \brief Main classes required for solving linear systems of equations * \author J. Hicken, F. Palacios, T. Economon, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/linear_algebra/CSysSolve_b.cpp b/Common/src/linear_algebra/CSysSolve_b.cpp index 21819fac8d7f..7df42569c961 100644 --- a/Common/src/linear_algebra/CSysSolve_b.cpp +++ b/Common/src/linear_algebra/CSysSolve_b.cpp @@ -2,7 +2,7 @@ * \file CSysSolve_b.cpp * \brief Routines for the linear solver used in the reverse sweep of AD. * \author T. Albring, J. Blühdorn - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/linear_algebra/CSysVector.cpp b/Common/src/linear_algebra/CSysVector.cpp index a8031b398802..61fc3b92a4fc 100644 --- a/Common/src/linear_algebra/CSysVector.cpp +++ b/Common/src/linear_algebra/CSysVector.cpp @@ -2,7 +2,7 @@ * \file CSysVector.cpp * \brief Implementation and explicit instantiations of CSysVector. * \author P. Gomes, F. Palacios, J. Hicken, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/linear_algebra/CSysVectorGPU.cu b/Common/src/linear_algebra/CSysVectorGPU.cu index 090c708f9632..94ec17bb88fa 100644 --- a/Common/src/linear_algebra/CSysVectorGPU.cu +++ b/Common/src/linear_algebra/CSysVectorGPU.cu @@ -2,7 +2,7 @@ * \file CSysVectorGPU.cu * \brief Implementations of Kernels and Functions for Vector Operations on the GPU * \author A. Raj - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/linear_algebra/blas_structure.cpp b/Common/src/linear_algebra/blas_structure.cpp index 1478fbfa4f2f..2bd87cb378f9 100644 --- a/Common/src/linear_algebra/blas_structure.cpp +++ b/Common/src/linear_algebra/blas_structure.cpp @@ -3,7 +3,7 @@ * \brief Implementation of the functions that either simulate BLAS functionality or interface to an actual BLAS implementation. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/C1DInterpolation.cpp b/Common/src/toolboxes/C1DInterpolation.cpp index ecfb40975ac0..3dcdea64363c 100644 --- a/Common/src/toolboxes/C1DInterpolation.cpp +++ b/Common/src/toolboxes/C1DInterpolation.cpp @@ -2,7 +2,7 @@ * \file C1DInterpolation.cpp * \brief Classes for 1D interpolation. * \author Aman Baig, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/CLinearPartitioner.cpp b/Common/src/toolboxes/CLinearPartitioner.cpp index 747ed1526577..6cae8192b0a8 100644 --- a/Common/src/toolboxes/CLinearPartitioner.cpp +++ b/Common/src/toolboxes/CLinearPartitioner.cpp @@ -3,7 +3,7 @@ * \brief Helper class that provides the counts for each rank in a linear * partitioning given the global count as input. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/CSquareMatrixCM.cpp b/Common/src/toolboxes/CSquareMatrixCM.cpp index c3bb7a57012d..9cbc407cac63 100644 --- a/Common/src/toolboxes/CSquareMatrixCM.cpp +++ b/Common/src/toolboxes/CSquareMatrixCM.cpp @@ -2,7 +2,7 @@ * \file CSquareMatrixCM.cpp * \brief Implementation of dense matrix helper class in Column Major order (see hpp). * \author Edwin van der Weide, Pedro Gomes. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/CSymmetricMatrix.cpp b/Common/src/toolboxes/CSymmetricMatrix.cpp index d0b35cad2244..d609c9539117 100644 --- a/Common/src/toolboxes/CSymmetricMatrix.cpp +++ b/Common/src/toolboxes/CSymmetricMatrix.cpp @@ -2,7 +2,7 @@ * \file CSymmetricMatrix.cpp * \brief Implementation of dense symmetric matrix helper class (see hpp). * \author Joel Ho, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CIncTGVSolution.cpp b/Common/src/toolboxes/MMS/CIncTGVSolution.cpp index 8114a2361e84..66f4ba6b5a51 100644 --- a/Common/src/toolboxes/MMS/CIncTGVSolution.cpp +++ b/Common/src/toolboxes/MMS/CIncTGVSolution.cpp @@ -2,7 +2,7 @@ * \file CIncTGVSolution.cpp * \brief Implementations of the member functions of CIncTGVSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CInviscidVortexSolution.cpp b/Common/src/toolboxes/MMS/CInviscidVortexSolution.cpp index 454ab8438f43..e5bbdf9e6955 100644 --- a/Common/src/toolboxes/MMS/CInviscidVortexSolution.cpp +++ b/Common/src/toolboxes/MMS/CInviscidVortexSolution.cpp @@ -2,7 +2,7 @@ * \file CInviscidVortexSolution.cpp * \brief Implementations of the member functions of CInviscidVortexSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CMMSIncEulerSolution.cpp b/Common/src/toolboxes/MMS/CMMSIncEulerSolution.cpp index 3f315cb0af4f..f77774b77930 100644 --- a/Common/src/toolboxes/MMS/CMMSIncEulerSolution.cpp +++ b/Common/src/toolboxes/MMS/CMMSIncEulerSolution.cpp @@ -2,7 +2,7 @@ * \file CMMSIncEulerSolution.cpp * \brief Implementations of the member functions of CMMSIncEulerSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CMMSIncNSSolution.cpp b/Common/src/toolboxes/MMS/CMMSIncNSSolution.cpp index 0babae7e8f93..803e4e466eba 100644 --- a/Common/src/toolboxes/MMS/CMMSIncNSSolution.cpp +++ b/Common/src/toolboxes/MMS/CMMSIncNSSolution.cpp @@ -2,7 +2,7 @@ * \file CMMSIncNSSolution.cpp * \brief Implementations of the member functions of CMMSIncNSSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.cpp b/Common/src/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.cpp index 5087274cb014..23780d29a498 100644 --- a/Common/src/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.cpp +++ b/Common/src/toolboxes/MMS/CMMSNSTwoHalfCirclesSolution.cpp @@ -2,7 +2,7 @@ * \file CMMSNSTwoHalfCirclesSolution.cpp * \brief Implementations of the member functions of CMMSNSTwoHalfCirclesSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.cpp b/Common/src/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.cpp index af150c7a5977..cf7bb13e11d5 100644 --- a/Common/src/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.cpp +++ b/Common/src/toolboxes/MMS/CMMSNSTwoHalfSpheresSolution.cpp @@ -2,7 +2,7 @@ * \file CMMSNSTwoHalfSpheresSolution.cpp * \brief Implementations of the member functions of CMMSNSTwoHalfSpheresSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolution.cpp b/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolution.cpp index 4e13d790fae7..0ddc82b5cbad 100644 --- a/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolution.cpp +++ b/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolution.cpp @@ -2,7 +2,7 @@ * \file CMMSNSUnitQuadSolution.cpp * \brief Implementations of the member functions of CMMSNSUnitQuadSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.cpp b/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.cpp index a4e8e5a37e6d..dd8820adb6c9 100644 --- a/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.cpp +++ b/Common/src/toolboxes/MMS/CMMSNSUnitQuadSolutionWallBC.cpp @@ -2,7 +2,7 @@ * \file CMMSNSUnitQuadSolutionWallBC.cpp * \brief Implementations of the member functions of CMMSNSUnitQuadSolutionWallBC. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CNSUnitQuadSolution.cpp b/Common/src/toolboxes/MMS/CNSUnitQuadSolution.cpp index c73773cb3c87..df4d4fc75c20 100644 --- a/Common/src/toolboxes/MMS/CNSUnitQuadSolution.cpp +++ b/Common/src/toolboxes/MMS/CNSUnitQuadSolution.cpp @@ -2,7 +2,7 @@ * \file CNSUnitQuadSolution.cpp * \brief Implementations of the member functions of CNSUnitQuadSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CRinglebSolution.cpp b/Common/src/toolboxes/MMS/CRinglebSolution.cpp index 27629cf1fbb8..5ebfc15c1930 100644 --- a/Common/src/toolboxes/MMS/CRinglebSolution.cpp +++ b/Common/src/toolboxes/MMS/CRinglebSolution.cpp @@ -2,7 +2,7 @@ * \file CRinglebSolution.cpp * \brief Implementations of the member functions of CRinglebSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CTGVSolution.cpp b/Common/src/toolboxes/MMS/CTGVSolution.cpp index 8ca4b3fbd348..1ac61450e64c 100644 --- a/Common/src/toolboxes/MMS/CTGVSolution.cpp +++ b/Common/src/toolboxes/MMS/CTGVSolution.cpp @@ -2,7 +2,7 @@ * \file CTGVSolution.cpp * \brief Implementations of the member functions of CTGVSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CUserDefinedSolution.cpp b/Common/src/toolboxes/MMS/CUserDefinedSolution.cpp index 865ab21e94bc..a7d1bf7672ff 100644 --- a/Common/src/toolboxes/MMS/CUserDefinedSolution.cpp +++ b/Common/src/toolboxes/MMS/CUserDefinedSolution.cpp @@ -2,7 +2,7 @@ * \file CUserDefinedSolution.cpp * \brief Implementations of the member functions of CUserDefinedSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CVerificationSolution.cpp b/Common/src/toolboxes/MMS/CVerificationSolution.cpp index decbf3dcd1c5..a8cd63b62c8d 100644 --- a/Common/src/toolboxes/MMS/CVerificationSolution.cpp +++ b/Common/src/toolboxes/MMS/CVerificationSolution.cpp @@ -2,7 +2,7 @@ * \file CVerificationSolution.cpp * \brief Implementations of the member functions of CVerificationSolution. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncEulerSolution.py b/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncEulerSolution.py index 5d0632954ea7..0ab4bb018817 100755 --- a/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncEulerSolution.py +++ b/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncEulerSolution.py @@ -4,7 +4,7 @@ # \brief Python script that generates the source terms for a # manufactured solution for the incompressible Euler eqns. # \author T. Economon -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncNSSolution.py b/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncNSSolution.py index bbf00bd03315..3752ba0e177b 100755 --- a/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncNSSolution.py +++ b/Common/src/toolboxes/MMS/CreateMMSSourceTerms/CMMSIncNSSolution.py @@ -4,7 +4,7 @@ # \brief Python script that generates the source terms for a # manufactured solution for the incompressible Navier-Stokes eqns. # \author T. Economon -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/Common/src/toolboxes/fem/CFaceOfElement.cpp b/Common/src/toolboxes/fem/CFaceOfElement.cpp index 434310fb274d..d2417b40603c 100644 --- a/Common/src/toolboxes/fem/CFaceOfElement.cpp +++ b/Common/src/toolboxes/fem/CFaceOfElement.cpp @@ -3,7 +3,7 @@ * \brief Helper class used in distributing the surface elements and * creating the surface elements for the DG solver. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/fem/CMatchingFace.cpp b/Common/src/toolboxes/fem/CMatchingFace.cpp index 2c70b56cac21..9be903f21887 100644 --- a/Common/src/toolboxes/fem/CMatchingFace.cpp +++ b/Common/src/toolboxes/fem/CMatchingFace.cpp @@ -3,7 +3,7 @@ * \brief Helper class used to determine whether or not faces of * surface elements for the DG solver are matching faces. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/fem/CReorderElements.cpp b/Common/src/toolboxes/fem/CReorderElements.cpp index 6679012ec4dc..9f0de3ad4705 100644 --- a/Common/src/toolboxes/fem/CReorderElements.cpp +++ b/Common/src/toolboxes/fem/CReorderElements.cpp @@ -3,7 +3,7 @@ * \brief Helper class used to reorder the owned elements * after the partitioning * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/fem/CSortFaces.cpp b/Common/src/toolboxes/fem/CSortFaces.cpp index 040e1341555e..52effaf7837f 100644 --- a/Common/src/toolboxes/fem/CSortFaces.cpp +++ b/Common/src/toolboxes/fem/CSortFaces.cpp @@ -3,7 +3,7 @@ * \brief Functor, used for a different sorting of the surface elements * than the < operator of CFaceOfElement. * \author E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/toolboxes/printing_toolbox.cpp b/Common/src/toolboxes/printing_toolbox.cpp index 60923c2a35a9..fc4064eb5884 100644 --- a/Common/src/toolboxes/printing_toolbox.cpp +++ b/Common/src/toolboxes/printing_toolbox.cpp @@ -2,7 +2,7 @@ * \file printing_toolbox.cpp * \brief Printing tools * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Common/src/wall_model.cpp b/Common/src/wall_model.cpp index fc5d26d2c2e2..60c975c43ed5 100644 --- a/Common/src/wall_model.cpp +++ b/Common/src/wall_model.cpp @@ -3,7 +3,7 @@ * \brief File, which contains the implementation for the wall model functions * for large eddy simulations. * \author E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/Docs/docmain.hpp b/Docs/docmain.hpp index a9539316f11a..5206fe02486c 100644 --- a/Docs/docmain.hpp +++ b/Docs/docmain.hpp @@ -2,7 +2,7 @@ * \file docmain.hpp * \brief This file contains documentation for Doxygen and does not have any significance with respect to C++. * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -26,7 +26,7 @@ */ /*! - * \mainpage SU2 version 8.4.0 "Harrier" + * \mainpage SU2 version 8.5.0 "Harrier" * SU2 suite is an open-source collection of C++ based software tools * to perform PDE analysis and PDE constrained optimization. The toolset is designed with * computational fluid dynamics and aerodynamic shape optimization in mind, but is extensible to diff --git a/QuickStart/inv_NACA0012.cfg b/QuickStart/inv_NACA0012.cfg index 94468813fb1d..8a66537ad519 100644 --- a/QuickStart/inv_NACA0012.cfg +++ b/QuickStart/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/README.md b/README.md index 764b84ddd8ac..870e8f5627f9 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@

        -# SU2 (ver. 8.4.0 "Harrier"): The Open-Source CFD Code +# SU2 (ver. 8.5.0 "Harrier"): The Open-Source CFD Code Computational analysis tools have revolutionized the way we design engineering systems, but most established codes are proprietary, unavailable, or prohibitively expensive for many users. The SU2 team is changing this, making multiphysics analysis and design optimization freely available as open-source software and involving everyone in its creation and development. diff --git a/SU2_CFD/include/CMarkerProfileReaderFVM.hpp b/SU2_CFD/include/CMarkerProfileReaderFVM.hpp index c6b62907d5b7..8d6a511670b0 100644 --- a/SU2_CFD/include/CMarkerProfileReaderFVM.hpp +++ b/SU2_CFD/include/CMarkerProfileReaderFVM.hpp @@ -3,7 +3,7 @@ * \brief Header file for the class CMarkerProfileReaderFVM. * The implementations are in the CMarkerProfileReaderFVM.cpp file. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/SU2_CFD.hpp b/SU2_CFD/include/SU2_CFD.hpp index 69fc440e2ea7..f1713a30be41 100644 --- a/SU2_CFD/include/SU2_CFD.hpp +++ b/SU2_CFD/include/SU2_CFD.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines of the code SU2_CFD. * The subroutines and functions are in the SU2_CFD.cpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/definition_structure.hpp b/SU2_CFD/include/definition_structure.hpp index 4a870fd55f38..e09fcb2cf006 100644 --- a/SU2_CFD/include/definition_structure.hpp +++ b/SU2_CFD/include/definition_structure.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines used by SU2_CFD. * The subroutines and functions are in the definition_structure.cpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/drivers/CDiscAdjMultizoneDriver.hpp b/SU2_CFD/include/drivers/CDiscAdjMultizoneDriver.hpp index 784fae55a85d..60d040532ca0 100644 --- a/SU2_CFD/include/drivers/CDiscAdjMultizoneDriver.hpp +++ b/SU2_CFD/include/drivers/CDiscAdjMultizoneDriver.hpp @@ -2,7 +2,7 @@ * \class CDiscAdjMultizoneDriver.hpp * \brief Class for driving adjoint multi-zone problems. * \author O. Burghardt, P. Gomes, T. Albring, R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/drivers/CDiscAdjSinglezoneDriver.hpp b/SU2_CFD/include/drivers/CDiscAdjSinglezoneDriver.hpp index 7d7e8aa8d3e3..137c961f1482 100644 --- a/SU2_CFD/include/drivers/CDiscAdjSinglezoneDriver.hpp +++ b/SU2_CFD/include/drivers/CDiscAdjSinglezoneDriver.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for driving single or multi-zone problems. * The subroutines and functions are in the driver_structure.cpp file. * \author T. Economon, H. Kline, R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -34,7 +34,7 @@ * \ingroup DiscAdj * \brief Class for driving single-zone adjoint solvers. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CDiscAdjSinglezoneDriver : public CSinglezoneDriver { protected: diff --git a/SU2_CFD/include/drivers/CDriver.hpp b/SU2_CFD/include/drivers/CDriver.hpp index b01f560fa281..0dc9dd2f604d 100644 --- a/SU2_CFD/include/drivers/CDriver.hpp +++ b/SU2_CFD/include/drivers/CDriver.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for driving single or multi-zone problems. * The subroutines and functions are in the driver_structure.cpp file. * \author T. Economon, H. Kline, R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/drivers/CDriverBase.hpp b/SU2_CFD/include/drivers/CDriverBase.hpp index 1a4101bee956..ba3af37349fd 100644 --- a/SU2_CFD/include/drivers/CDriverBase.hpp +++ b/SU2_CFD/include/drivers/CDriverBase.hpp @@ -2,7 +2,7 @@ * \file CDriverBase.hpp * \brief Base class for all drivers. * \author H. Patel, A. Gastaldi - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/drivers/CDummyDriver.hpp b/SU2_CFD/include/drivers/CDummyDriver.hpp index 8099ee68dd02..86d8c6aad6a6 100644 --- a/SU2_CFD/include/drivers/CDummyDriver.hpp +++ b/SU2_CFD/include/drivers/CDummyDriver.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for driving single or multi-zone problems. * The subroutines and functions are in the driver_structure.cpp file. * \author T. Economon, H. Kline, R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/drivers/CMultizoneDriver.hpp b/SU2_CFD/include/drivers/CMultizoneDriver.hpp index 57b8c98da1dc..8d7fcd7e8838 100644 --- a/SU2_CFD/include/drivers/CMultizoneDriver.hpp +++ b/SU2_CFD/include/drivers/CMultizoneDriver.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for driving single or multi-zone problems. * The subroutines and functions are in the driver_structure.cpp file. * \author T. Economon, H. Kline, R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -35,7 +35,7 @@ * \ingroup Drivers * \brief Class for driving zone-specific iterations. * \author R. Sanchez, O. Burghardt - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CMultizoneDriver : public CDriver { protected: diff --git a/SU2_CFD/include/drivers/CSinglezoneDriver.hpp b/SU2_CFD/include/drivers/CSinglezoneDriver.hpp index e4c6b752ce86..e7c590707c73 100644 --- a/SU2_CFD/include/drivers/CSinglezoneDriver.hpp +++ b/SU2_CFD/include/drivers/CSinglezoneDriver.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines for driving single or multi-zone problems. * The subroutines and functions are in the driver_structure.cpp file. * \author T. Economon, H. Kline, R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -34,7 +34,7 @@ * \ingroup Drivers * \brief Class for driving single-zone solvers. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CSinglezoneDriver : public CDriver { protected: diff --git a/SU2_CFD/include/fluid/CConductivityModel.hpp b/SU2_CFD/include/fluid/CConductivityModel.hpp index 86877be62c4b..6f88c97bd7f4 100644 --- a/SU2_CFD/include/fluid/CConductivityModel.hpp +++ b/SU2_CFD/include/fluid/CConductivityModel.hpp @@ -2,7 +2,7 @@ * \file CConductivityModel.hpp * \brief Defines an interface class for thermal conductivity models. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CConstantConductivity.hpp b/SU2_CFD/include/fluid/CConstantConductivity.hpp index 7eb2794d9b80..6e369f92dd1b 100644 --- a/SU2_CFD/include/fluid/CConstantConductivity.hpp +++ b/SU2_CFD/include/fluid/CConstantConductivity.hpp @@ -2,7 +2,7 @@ * \file CConstantConductivity.hpp * \brief Defines a constant laminar thermal conductivity model. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CConstantConductivityRANS.hpp b/SU2_CFD/include/fluid/CConstantConductivityRANS.hpp index f381cde478fb..d2c1c1e78d4b 100644 --- a/SU2_CFD/include/fluid/CConstantConductivityRANS.hpp +++ b/SU2_CFD/include/fluid/CConstantConductivityRANS.hpp @@ -2,7 +2,7 @@ * \file CConstantConductivityRANS.hpp * \brief Defines a constant conductivity model for RANS problems. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CConstantDensity.hpp b/SU2_CFD/include/fluid/CConstantDensity.hpp index 5dca8e4d71fc..7e1e8cf1626e 100644 --- a/SU2_CFD/include/fluid/CConstantDensity.hpp +++ b/SU2_CFD/include/fluid/CConstantDensity.hpp @@ -2,7 +2,7 @@ * \file CConstantDensity.hpp * \brief Defines the incompressible constant density model. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CConstantDiffusivity.hpp b/SU2_CFD/include/fluid/CConstantDiffusivity.hpp index 41802faae14d..0d397aece010 100644 --- a/SU2_CFD/include/fluid/CConstantDiffusivity.hpp +++ b/SU2_CFD/include/fluid/CConstantDiffusivity.hpp @@ -2,7 +2,7 @@ * \file CConstantDiffusivity.hpp * \brief Defines constant mass diffusivity. * \author T. Economon, Cristopher Morales Ubal - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CConstantLewisDiffusivity.hpp b/SU2_CFD/include/fluid/CConstantLewisDiffusivity.hpp index 1c2a031925d7..2837843fdc36 100644 --- a/SU2_CFD/include/fluid/CConstantLewisDiffusivity.hpp +++ b/SU2_CFD/include/fluid/CConstantLewisDiffusivity.hpp @@ -2,7 +2,7 @@ * \file CConstantLewisDiffusivity.hpp * \brief Defines Constant Lewis mass diffusivity. * \author M.Heimgartner, C.Morales - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CConstantPrandtl.hpp b/SU2_CFD/include/fluid/CConstantPrandtl.hpp index 0df6e9f5368f..480e97210748 100644 --- a/SU2_CFD/include/fluid/CConstantPrandtl.hpp +++ b/SU2_CFD/include/fluid/CConstantPrandtl.hpp @@ -2,7 +2,7 @@ * \file CConstantPrandtl.hpp * \brief Defines a non-constant laminar Prandtl number thermal conductivity model. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CConstantPrandtlRANS.hpp b/SU2_CFD/include/fluid/CConstantPrandtlRANS.hpp index b5ddb2618c09..f2b5bf91168e 100644 --- a/SU2_CFD/include/fluid/CConstantPrandtlRANS.hpp +++ b/SU2_CFD/include/fluid/CConstantPrandtlRANS.hpp @@ -2,7 +2,7 @@ * \file CConstantPrandtlRANS.hpp * \brief Defines a non-constant effective thermal conductivity for RANS problems using Prandtl numbers. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CConstantSchmidt.hpp b/SU2_CFD/include/fluid/CConstantSchmidt.hpp index 1e238f16f094..a5c2ca79d47d 100644 --- a/SU2_CFD/include/fluid/CConstantSchmidt.hpp +++ b/SU2_CFD/include/fluid/CConstantSchmidt.hpp @@ -2,7 +2,7 @@ * \file CConstantSchmidt.hpp * \brief Defines a mass diffusivity model with constant Schmidt numbers. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CConstantViscosity.hpp b/SU2_CFD/include/fluid/CConstantViscosity.hpp index 5d62a59fcbc8..0ba9b238d2ec 100644 --- a/SU2_CFD/include/fluid/CConstantViscosity.hpp +++ b/SU2_CFD/include/fluid/CConstantViscosity.hpp @@ -2,7 +2,7 @@ * \file CConstantViscosity.hpp * \brief Defines a constant laminar viscosity model. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CCoolProp.hpp b/SU2_CFD/include/fluid/CCoolProp.hpp index 8dfbf4f95ca8..3946b0e3b069 100644 --- a/SU2_CFD/include/fluid/CCoolProp.hpp +++ b/SU2_CFD/include/fluid/CCoolProp.hpp @@ -2,7 +2,7 @@ * \file CCoolProp.hpp * \brief Defines the state-of-the-art fluid model from CoolProp library. * \author P. Yan, G. Gori, A. Guardone - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CCoolPropConductivity.hpp b/SU2_CFD/include/fluid/CCoolPropConductivity.hpp index 84b16694592b..387151975f32 100644 --- a/SU2_CFD/include/fluid/CCoolPropConductivity.hpp +++ b/SU2_CFD/include/fluid/CCoolPropConductivity.hpp @@ -2,7 +2,7 @@ * \file CCoolPropConductivity.hpp * \brief Defines laminar thermal conductivity model from CoolProp. * \author P.YAn, G. Gori, A. Guardone - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CCoolPropViscosity.hpp b/SU2_CFD/include/fluid/CCoolPropViscosity.hpp index 559886a992da..361fb420ce88 100644 --- a/SU2_CFD/include/fluid/CCoolPropViscosity.hpp +++ b/SU2_CFD/include/fluid/CCoolPropViscosity.hpp @@ -2,7 +2,7 @@ * \file CCoolPropViscosity.hpp * \brief Defines CoolPropviscosity model. * \author P.Yan, G. Gori, A. Guardone, - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CDataDrivenFluid.hpp b/SU2_CFD/include/fluid/CDataDrivenFluid.hpp index 47092a51f260..baa9318e58fc 100644 --- a/SU2_CFD/include/fluid/CDataDrivenFluid.hpp +++ b/SU2_CFD/include/fluid/CDataDrivenFluid.hpp @@ -3,7 +3,7 @@ * \brief Defines a template fluid model class using multilayer perceptrons * for theromodynamic state definition * \author E.C.Bunschoten - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CDiffusivityModel.hpp b/SU2_CFD/include/fluid/CDiffusivityModel.hpp index 20e0cb1cc4b0..aa021d66140b 100644 --- a/SU2_CFD/include/fluid/CDiffusivityModel.hpp +++ b/SU2_CFD/include/fluid/CDiffusivityModel.hpp @@ -2,7 +2,7 @@ * \file CDiffusivityModel.hpp * \brief Interface class for defining mass diffusivity models. * \author T. Economon, C. Morales - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CFluidFlamelet.hpp b/SU2_CFD/include/fluid/CFluidFlamelet.hpp index a5d5c627b2a0..7b3cbeefa58e 100644 --- a/SU2_CFD/include/fluid/CFluidFlamelet.hpp +++ b/SU2_CFD/include/fluid/CFluidFlamelet.hpp @@ -2,7 +2,7 @@ * \file CFluidFlamelet.hpp * \brief Defines the flamelet fluid model * \author D. Mayer, T. Economon, N. Beishuizen, E. Bunschoten - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CFluidModel.hpp b/SU2_CFD/include/fluid/CFluidModel.hpp index 83fa9939a3bb..4072a82c9072 100644 --- a/SU2_CFD/include/fluid/CFluidModel.hpp +++ b/SU2_CFD/include/fluid/CFluidModel.hpp @@ -2,7 +2,7 @@ * \file CFluidModel.hpp * \brief Defines the main fluid model class for thermophysical properties. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CFluidScalar.hpp b/SU2_CFD/include/fluid/CFluidScalar.hpp index c8170ff2a9e3..797fdd20a473 100644 --- a/SU2_CFD/include/fluid/CFluidScalar.hpp +++ b/SU2_CFD/include/fluid/CFluidScalar.hpp @@ -2,7 +2,7 @@ * \file CFluidScalar.hpp * \brief Defines the multicomponent incompressible Ideal Gas model for mixtures. * \author T. Economon, Mark Heimgartner, Cristopher Morales Ubal - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CIdealGas.hpp b/SU2_CFD/include/fluid/CIdealGas.hpp index 9c89faa5afae..0bd62c1c706c 100644 --- a/SU2_CFD/include/fluid/CIdealGas.hpp +++ b/SU2_CFD/include/fluid/CIdealGas.hpp @@ -2,7 +2,7 @@ * \file CIdealGas.hpp * \brief Defines the ideal gas model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CIncIdealGas.hpp b/SU2_CFD/include/fluid/CIncIdealGas.hpp index f1b864edf276..79658c2373ca 100644 --- a/SU2_CFD/include/fluid/CIncIdealGas.hpp +++ b/SU2_CFD/include/fluid/CIncIdealGas.hpp @@ -2,7 +2,7 @@ * \file CIncIdealGas.hpp * \brief Defines the incompressible Ideal Gas model. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp b/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp index 229918e9b9aa..8cd48cafdb67 100644 --- a/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp +++ b/SU2_CFD/include/fluid/CIncIdealGasPolynomial.hpp @@ -2,7 +2,7 @@ * \file CIncIdealGasPolynomial.hpp * \brief Defines the incompressible Ideal Gas model with polynomial Cp. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CMutationTCLib.hpp b/SU2_CFD/include/fluid/CMutationTCLib.hpp index f956d8184902..b280c70ec9e5 100644 --- a/SU2_CFD/include/fluid/CMutationTCLib.hpp +++ b/SU2_CFD/include/fluid/CMutationTCLib.hpp @@ -2,7 +2,7 @@ * \file CMutationTCLib.hpp * \brief Defines the class for the link to Mutation++ ThermoChemistry library. * \author C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CNEMOGas.hpp b/SU2_CFD/include/fluid/CNEMOGas.hpp index 2d91424484cc..1037ab30f010 100644 --- a/SU2_CFD/include/fluid/CNEMOGas.hpp +++ b/SU2_CFD/include/fluid/CNEMOGas.hpp @@ -2,7 +2,7 @@ * \file CNEMOGas.hpp * \brief Defines the nonequilibrium gas model. * \author C. Garbacz, W. Maier, S. R. Copeland - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CPengRobinson.hpp b/SU2_CFD/include/fluid/CPengRobinson.hpp index 3a7c6e505b55..0e52603fccf6 100644 --- a/SU2_CFD/include/fluid/CPengRobinson.hpp +++ b/SU2_CFD/include/fluid/CPengRobinson.hpp @@ -2,7 +2,7 @@ * \file CPengRobinson.hpp * \brief Defines the Peng-Robinson model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CPolynomialConductivity.hpp b/SU2_CFD/include/fluid/CPolynomialConductivity.hpp index 5384a57b067e..43e181cbb00a 100644 --- a/SU2_CFD/include/fluid/CPolynomialConductivity.hpp +++ b/SU2_CFD/include/fluid/CPolynomialConductivity.hpp @@ -2,7 +2,7 @@ * \file CPolynomialConductivity.hpp * \brief Defines a non-constant laminar thermal conductivity using a polynomial function of temperature. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CPolynomialConductivityRANS.hpp b/SU2_CFD/include/fluid/CPolynomialConductivityRANS.hpp index 26ca16e5877a..019be194b1a1 100644 --- a/SU2_CFD/include/fluid/CPolynomialConductivityRANS.hpp +++ b/SU2_CFD/include/fluid/CPolynomialConductivityRANS.hpp @@ -3,7 +3,7 @@ * \brief Defines a non-constant thermal conductivity using a polynomial function of temperature * for RANS problems with the addition of a turbulent component based on a turbulent Prandtl number. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CPolynomialViscosity.hpp b/SU2_CFD/include/fluid/CPolynomialViscosity.hpp index 3628cde22326..f475138129e8 100644 --- a/SU2_CFD/include/fluid/CPolynomialViscosity.hpp +++ b/SU2_CFD/include/fluid/CPolynomialViscosity.hpp @@ -2,7 +2,7 @@ * \file CPolynomialViscosity.hpp * \brief Defines a laminar viscosity model as a polynomial function of temperature. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CSU2TCLib.hpp b/SU2_CFD/include/fluid/CSU2TCLib.hpp index 8ea240c9c81c..2cb85abd91d3 100644 --- a/SU2_CFD/include/fluid/CSU2TCLib.hpp +++ b/SU2_CFD/include/fluid/CSU2TCLib.hpp @@ -2,7 +2,7 @@ * \file CSU2TCLib.hpp * \brief Defines the classes for different user defined ThermoChemistry libraries. * \author C. Garbacz, W. Maier, S. R. Copeland - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CSutherland.hpp b/SU2_CFD/include/fluid/CSutherland.hpp index cff63bcc64f2..e0f9ed537e82 100644 --- a/SU2_CFD/include/fluid/CSutherland.hpp +++ b/SU2_CFD/include/fluid/CSutherland.hpp @@ -2,7 +2,7 @@ * \file CSutherland.hpp * \brief Defines Sutherland's Law for laminar viscosity. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CVanDerWaalsGas.hpp b/SU2_CFD/include/fluid/CVanDerWaalsGas.hpp index f5300ad8d419..6b092b811368 100644 --- a/SU2_CFD/include/fluid/CVanDerWaalsGas.hpp +++ b/SU2_CFD/include/fluid/CVanDerWaalsGas.hpp @@ -2,7 +2,7 @@ * \file CVanDerWaalsGas.hpp * \brief Declaration of the Polytropic Van der Waals model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/fluid/CViscosityModel.hpp b/SU2_CFD/include/fluid/CViscosityModel.hpp index 44b436b9b9e1..15dda33127f4 100644 --- a/SU2_CFD/include/fluid/CViscosityModel.hpp +++ b/SU2_CFD/include/fluid/CViscosityModel.hpp @@ -2,7 +2,7 @@ * \file CViscosityModel.hpp * \brief Interface class for defining laminar viscosity models. * \author S. Vitale, M. Pini, G. Gori, A. Guardone, P. Colonna, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/gradients/computeGradientsGreenGauss.hpp b/SU2_CFD/include/gradients/computeGradientsGreenGauss.hpp index dc5a74819a93..f60c0422f0cc 100644 --- a/SU2_CFD/include/gradients/computeGradientsGreenGauss.hpp +++ b/SU2_CFD/include/gradients/computeGradientsGreenGauss.hpp @@ -4,7 +4,7 @@ * \note This allows the same implementation to be used for conservative * and primitive variables of any solver. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp b/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp index 5773caa9909c..296f433ff40f 100644 --- a/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp +++ b/SU2_CFD/include/gradients/computeGradientsLeastSquares.hpp @@ -3,7 +3,7 @@ * \brief Generic implementation of Least-Squares gradient computation. * \note This allows the same implementation to be used for conservative * and primitive variables of any solver. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/gradients/correctGradientsSymmetry.hpp b/SU2_CFD/include/gradients/correctGradientsSymmetry.hpp index e0a56639987f..1039d6171f71 100644 --- a/SU2_CFD/include/gradients/correctGradientsSymmetry.hpp +++ b/SU2_CFD/include/gradients/correctGradientsSymmetry.hpp @@ -2,7 +2,7 @@ * \file correctGradientsSymmetry.hpp * \brief Implements the symmetry boundary conditions for the gradient computations. * \author N. Beishuizen - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/integration/CFEM_DG_Integration.hpp b/SU2_CFD/include/integration/CFEM_DG_Integration.hpp index 3d72a941de64..820dc099b82f 100644 --- a/SU2_CFD/include/integration/CFEM_DG_Integration.hpp +++ b/SU2_CFD/include/integration/CFEM_DG_Integration.hpp @@ -2,7 +2,7 @@ * \file CFEM_DG_Integration.hpp * \brief Declaration of class for integration with the FEM DG solver. * \author E. van der Weide, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -32,7 +32,7 @@ * \ingroup Drivers * \brief Class for integration with the FEM DG solver. * \author E. van der Weide, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEM_DG_Integration final : public CIntegration { public: diff --git a/SU2_CFD/include/integration/CIntegration.hpp b/SU2_CFD/include/integration/CIntegration.hpp index f6f35910e67c..b970a8099b01 100644 --- a/SU2_CFD/include/integration/CIntegration.hpp +++ b/SU2_CFD/include/integration/CIntegration.hpp @@ -2,7 +2,7 @@ * \file CIntegration.hpp * \brief Declaration of the main routines to orchestrate space and time integration. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/integration/CIntegrationFactory.hpp b/SU2_CFD/include/integration/CIntegrationFactory.hpp index cb27c47da6f7..40fffaeb9516 100644 --- a/SU2_CFD/include/integration/CIntegrationFactory.hpp +++ b/SU2_CFD/include/integration/CIntegrationFactory.hpp @@ -2,7 +2,7 @@ * \file CIntegrationFactory.hpp * \brief Headers of the CIntegrationFactory class * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/integration/CMultiGridIntegration.hpp b/SU2_CFD/include/integration/CMultiGridIntegration.hpp index 88ea8ca164c5..5f17525cabf5 100644 --- a/SU2_CFD/include/integration/CMultiGridIntegration.hpp +++ b/SU2_CFD/include/integration/CMultiGridIntegration.hpp @@ -2,7 +2,7 @@ * \file CMultiGridIntegration.hpp * \brief Declaration of class for time integration using a multigrid method. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/integration/CNewtonIntegration.hpp b/SU2_CFD/include/integration/CNewtonIntegration.hpp index 4f281c787619..da8ff67930ad 100644 --- a/SU2_CFD/include/integration/CNewtonIntegration.hpp +++ b/SU2_CFD/include/integration/CNewtonIntegration.hpp @@ -2,7 +2,7 @@ * \file CNewtonIntegration.hpp * \brief Newton-Krylov integration. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/integration/CSingleGridIntegration.hpp b/SU2_CFD/include/integration/CSingleGridIntegration.hpp index 425caf69a13d..2c08096e9694 100644 --- a/SU2_CFD/include/integration/CSingleGridIntegration.hpp +++ b/SU2_CFD/include/integration/CSingleGridIntegration.hpp @@ -2,7 +2,7 @@ * \file CSingleGridIntegration.hpp * \brief Declaration of class for numerical integration of fine grid-only problems. * \author A. Bueno. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/integration/CStructuralIntegration.hpp b/SU2_CFD/include/integration/CStructuralIntegration.hpp index 0bd40c130d30..ce9e6da5c0a5 100644 --- a/SU2_CFD/include/integration/CStructuralIntegration.hpp +++ b/SU2_CFD/include/integration/CStructuralIntegration.hpp @@ -2,7 +2,7 @@ * \file CStructuralIntegration.hpp * \brief Declaration of class for numerical integration of structural problems. * \author R. Sanchez. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/integration/ComputeLinSysResRMS.hpp b/SU2_CFD/include/integration/ComputeLinSysResRMS.hpp index 9471557d4020..c773f3fe683d 100644 --- a/SU2_CFD/include/integration/ComputeLinSysResRMS.hpp +++ b/SU2_CFD/include/integration/ComputeLinSysResRMS.hpp @@ -2,7 +2,7 @@ * \file ComputeLinSysResRMS.hpp * \brief Helper to compute the global RMS of LinSysRes across all variables and domain points. * \author Nijso Beishuizen - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/interfaces/CInterface.hpp b/SU2_CFD/include/interfaces/CInterface.hpp index db8e5edc6313..7480f970ce4a 100644 --- a/SU2_CFD/include/interfaces/CInterface.hpp +++ b/SU2_CFD/include/interfaces/CInterface.hpp @@ -3,7 +3,7 @@ * \brief Declarations and inlines of the transfer structure. * The subroutines and functions are in the physics folders. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -51,7 +51,7 @@ using namespace std; * \ingroup Interfaces * \brief Main class for defining the physical transfer of information. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CInterface { diff --git a/SU2_CFD/include/interfaces/cfd/CConservativeVarsInterface.hpp b/SU2_CFD/include/interfaces/cfd/CConservativeVarsInterface.hpp index 32fb2256b7b5..70eecb2e26d7 100644 --- a/SU2_CFD/include/interfaces/cfd/CConservativeVarsInterface.hpp +++ b/SU2_CFD/include/interfaces/cfd/CConservativeVarsInterface.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer conservative variables * from a generic zone into another one. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/interfaces/cfd/CMixingPlaneInterface.hpp b/SU2_CFD/include/interfaces/cfd/CMixingPlaneInterface.hpp index 5dd54347c5ad..e57d7c61764c 100644 --- a/SU2_CFD/include/interfaces/cfd/CMixingPlaneInterface.hpp +++ b/SU2_CFD/include/interfaces/cfd/CMixingPlaneInterface.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer average variables * needed for MixingPlane computation from a generic zone into another one. * \author S. Vitale - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/interfaces/cfd/CSlidingInterface.hpp b/SU2_CFD/include/interfaces/cfd/CSlidingInterface.hpp index 2b6c72915e96..6a93ac1bdd70 100644 --- a/SU2_CFD/include/interfaces/cfd/CSlidingInterface.hpp +++ b/SU2_CFD/include/interfaces/cfd/CSlidingInterface.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer conservative variables * from a generic zone into another * \author G. Gori Politecnico di Milano - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/interfaces/cht/CConjugateHeatInterface.hpp b/SU2_CFD/include/interfaces/cht/CConjugateHeatInterface.hpp index 632d48a66c03..4a6516277838 100644 --- a/SU2_CFD/include/interfaces/cht/CConjugateHeatInterface.hpp +++ b/SU2_CFD/include/interfaces/cht/CConjugateHeatInterface.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer temperature and heatflux * density for conjugate heat interfaces between structure and fluid zones. * \author O. Burghardt - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/interfaces/fsi/CDiscAdjFlowTractionInterface.hpp b/SU2_CFD/include/interfaces/fsi/CDiscAdjFlowTractionInterface.hpp index 4661ccee0c49..97054dedf868 100644 --- a/SU2_CFD/include/interfaces/fsi/CDiscAdjFlowTractionInterface.hpp +++ b/SU2_CFD/include/interfaces/fsi/CDiscAdjFlowTractionInterface.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer flow tractions * from a fluid zone into a structural zone in a discrete adjoint simulation. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/interfaces/fsi/CDisplacementsInterface.hpp b/SU2_CFD/include/interfaces/fsi/CDisplacementsInterface.hpp index 89a17e8b4417..c633b3b6afd3 100644 --- a/SU2_CFD/include/interfaces/fsi/CDisplacementsInterface.hpp +++ b/SU2_CFD/include/interfaces/fsi/CDisplacementsInterface.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer boundary displacements * from a structural zone into a fluid zone. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/interfaces/fsi/CFlowTractionInterface.hpp b/SU2_CFD/include/interfaces/fsi/CFlowTractionInterface.hpp index a642d5dc9423..ce2b63167e1d 100644 --- a/SU2_CFD/include/interfaces/fsi/CFlowTractionInterface.hpp +++ b/SU2_CFD/include/interfaces/fsi/CFlowTractionInterface.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer flow tractions * from a fluid zone into a structural zone. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/iteration/CAdjFluidIteration.hpp b/SU2_CFD/include/iteration/CAdjFluidIteration.hpp index f73f92f5d6fb..a68015d5da37 100644 --- a/SU2_CFD/include/iteration/CAdjFluidIteration.hpp +++ b/SU2_CFD/include/iteration/CAdjFluidIteration.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp b/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp index 12b4403f77dd..d905467d02df 100644 --- a/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp +++ b/SU2_CFD/include/iteration/CDiscAdjFEAIteration.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp b/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp index e1ec5f8e5a95..84745c621c45 100644 --- a/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp +++ b/SU2_CFD/include/iteration/CDiscAdjFluidIteration.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/iteration/CDiscAdjHeatIteration.hpp b/SU2_CFD/include/iteration/CDiscAdjHeatIteration.hpp index 184656283b48..09b3fe0eee61 100644 --- a/SU2_CFD/include/iteration/CDiscAdjHeatIteration.hpp +++ b/SU2_CFD/include/iteration/CDiscAdjHeatIteration.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/iteration/CFEAIteration.hpp b/SU2_CFD/include/iteration/CFEAIteration.hpp index 669318e4b23a..8712553cea8a 100644 --- a/SU2_CFD/include/iteration/CFEAIteration.hpp +++ b/SU2_CFD/include/iteration/CFEAIteration.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -35,7 +35,7 @@ * \ingroup Drivers * \brief Class for driving an iteration of structural analysis. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEAIteration : public CIteration { public: diff --git a/SU2_CFD/include/iteration/CFEMFluidIteration.hpp b/SU2_CFD/include/iteration/CFEMFluidIteration.hpp index 456bbc597829..2f718cf0acf2 100644 --- a/SU2_CFD/include/iteration/CFEMFluidIteration.hpp +++ b/SU2_CFD/include/iteration/CFEMFluidIteration.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -35,7 +35,7 @@ * \ingroup Drivers * \brief Class for driving an iteration of the finite element flow system. * \author T. Economon, E. van der Weide - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEMFluidIteration : public CFluidIteration { public: diff --git a/SU2_CFD/include/iteration/CFluidIteration.hpp b/SU2_CFD/include/iteration/CFluidIteration.hpp index 4f686223ff5a..2a53eba538cb 100644 --- a/SU2_CFD/include/iteration/CFluidIteration.hpp +++ b/SU2_CFD/include/iteration/CFluidIteration.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/iteration/CHeatIteration.hpp b/SU2_CFD/include/iteration/CHeatIteration.hpp index e8b31ed9d5e4..44c5e80f7500 100644 --- a/SU2_CFD/include/iteration/CHeatIteration.hpp +++ b/SU2_CFD/include/iteration/CHeatIteration.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/iteration/CIteration.hpp b/SU2_CFD/include/iteration/CIteration.hpp index 46fa399ad23a..b570d4b75ab4 100644 --- a/SU2_CFD/include/iteration/CIteration.hpp +++ b/SU2_CFD/include/iteration/CIteration.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/iteration/CIterationFactory.hpp b/SU2_CFD/include/iteration/CIterationFactory.hpp index cfa92aabd178..76b3d4e5c96b 100644 --- a/SU2_CFD/include/iteration/CIterationFactory.hpp +++ b/SU2_CFD/include/iteration/CIterationFactory.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/iteration/CTurboIteration.hpp b/SU2_CFD/include/iteration/CTurboIteration.hpp index ab6137a65fa2..2adac72ac7fd 100644 --- a/SU2_CFD/include/iteration/CTurboIteration.hpp +++ b/SU2_CFD/include/iteration/CTurboIteration.hpp @@ -3,7 +3,7 @@ * \brief Headers of the iteration classes used by SU2_CFD. * Each CIteration class represents an available physics package. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/limiters/CLimiterDetails.hpp b/SU2_CFD/include/limiters/CLimiterDetails.hpp index c330e9719cf9..2fe298261006 100644 --- a/SU2_CFD/include/limiters/CLimiterDetails.hpp +++ b/SU2_CFD/include/limiters/CLimiterDetails.hpp @@ -3,7 +3,7 @@ * \brief A class template that allows defining limiters via * specialization of particular details. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/limiters/computeLimiters.hpp b/SU2_CFD/include/limiters/computeLimiters.hpp index fa8b54da7f58..b7fe304a4f5f 100644 --- a/SU2_CFD/include/limiters/computeLimiters.hpp +++ b/SU2_CFD/include/limiters/computeLimiters.hpp @@ -2,7 +2,7 @@ * \file computeLimiters.hpp * \brief Compute limiters wrapper function. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/limiters/computeLimiters_impl.hpp b/SU2_CFD/include/limiters/computeLimiters_impl.hpp index 1e0c88385233..7d8beafb03e0 100644 --- a/SU2_CFD/include/limiters/computeLimiters_impl.hpp +++ b/SU2_CFD/include/limiters/computeLimiters_impl.hpp @@ -4,7 +4,7 @@ * \note Common methods are derived by defining small details * via specialization of CLimiterDetails. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/CGradSmoothing.hpp b/SU2_CFD/include/numerics/CGradSmoothing.hpp index f7990f0e78f4..070ccc3e08c6 100644 --- a/SU2_CFD/include/numerics/CGradSmoothing.hpp +++ b/SU2_CFD/include/numerics/CGradSmoothing.hpp @@ -2,7 +2,7 @@ * \file CGradSmoothing.hpp * \brief Declarations and inlines of the numerics class for gradient smoothing. * \author T.Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/CNumerics.hpp b/SU2_CFD/include/numerics/CNumerics.hpp index db2c5d8f35af..535e40cba96d 100644 --- a/SU2_CFD/include/numerics/CNumerics.hpp +++ b/SU2_CFD/include/numerics/CNumerics.hpp @@ -3,7 +3,7 @@ * \brief Declaration of the base numerics class, the * implementation is in the CNumerics.cpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/NEMO/CNEMONumerics.hpp b/SU2_CFD/include/numerics/NEMO/CNEMONumerics.hpp index 25cb5b55ccb3..9ffe4ad335df 100644 --- a/SU2_CFD/include/numerics/NEMO/CNEMONumerics.hpp +++ b/SU2_CFD/include/numerics/NEMO/CNEMONumerics.hpp @@ -2,7 +2,7 @@ * \file CNEMONumerics.hpp * \brief Base class template NEMO numerics. * \author C. Garbacz, W. Maier, S. R. Copeland - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/NEMO/NEMO_diffusion.hpp b/SU2_CFD/include/numerics/NEMO/NEMO_diffusion.hpp index 5ce888618af2..78117fd1b3f5 100644 --- a/SU2_CFD/include/numerics/NEMO/NEMO_diffusion.hpp +++ b/SU2_CFD/include/numerics/NEMO/NEMO_diffusion.hpp @@ -2,7 +2,7 @@ * \file NEMO_diffusion.hpp * \brief Declarations of numerics classes for viscous flux computation. * \author S.R. Copeland, W. Maier, C. Garbacz. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -34,7 +34,7 @@ * \brief Class for computing viscous term using the average of gradients. * \ingroup ViscDiscr * \author S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CAvgGrad_NEMO : public CNEMONumerics { private: @@ -90,7 +90,7 @@ class CAvgGrad_NEMO : public CNEMONumerics { * \brief Class for computing viscous term using the average of gradients. * \ingroup ViscDiscr * \author C. Garbacz, W. Maier, S.R. Copeland. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CAvgGradCorrected_NEMO : public CNEMONumerics { private: diff --git a/SU2_CFD/include/numerics/NEMO/NEMO_sources.hpp b/SU2_CFD/include/numerics/NEMO/NEMO_sources.hpp index f9d643cb74df..67c8225dd861 100644 --- a/SU2_CFD/include/numerics/NEMO/NEMO_sources.hpp +++ b/SU2_CFD/include/numerics/NEMO/NEMO_sources.hpp @@ -2,7 +2,7 @@ * \file NEMO_sources.hpp * \brief Declarations of numerics classes for source-term integration. * \author C. Garbacz, W. Maier, S. Copeland. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -34,7 +34,7 @@ * \brief Class for two-temperature model source terms. * \ingroup SourceDiscr * \author C. Garbacz, W. Maier, S. Copeland. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CSource_NEMO : public CNEMONumerics { private: diff --git a/SU2_CFD/include/numerics/NEMO/convection/ausm_slau.hpp b/SU2_CFD/include/numerics/NEMO/convection/ausm_slau.hpp index 50e2ff4e7a17..0bff8389f213 100644 --- a/SU2_CFD/include/numerics/NEMO/convection/ausm_slau.hpp +++ b/SU2_CFD/include/numerics/NEMO/convection/ausm_slau.hpp @@ -2,7 +2,7 @@ * \file ausm_slau.hpp * \brief Declaration of numerics classes for the AUSM and SLAU family of schemes in NEMO. * \author F. Palacios, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/NEMO/convection/lax.hpp b/SU2_CFD/include/numerics/NEMO/convection/lax.hpp index 5b32d73dfa24..fc9961a6611a 100644 --- a/SU2_CFD/include/numerics/NEMO/convection/lax.hpp +++ b/SU2_CFD/include/numerics/NEMO/convection/lax.hpp @@ -2,7 +2,7 @@ * \file lax.hpp * \brief Declaration of numerics classes for Lax centered scheme. * \author F. Palacios, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/NEMO/convection/msw.hpp b/SU2_CFD/include/numerics/NEMO/convection/msw.hpp index f968e63c17f6..b9da1acd2c6f 100644 --- a/SU2_CFD/include/numerics/NEMO/convection/msw.hpp +++ b/SU2_CFD/include/numerics/NEMO/convection/msw.hpp @@ -2,7 +2,7 @@ * \file msw.hpp * \brief Declaration of numerics classes for modified Steger-Warming scheme. * \author ADL Stanford, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -34,7 +34,7 @@ * \brief Class for solving a flux-vector splitting method by Steger & Warming, modified version. * \ingroup ConvDiscr * \author ADL Stanford, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CUpwMSW_NEMO : public CNEMONumerics { private: diff --git a/SU2_CFD/include/numerics/NEMO/convection/roe.hpp b/SU2_CFD/include/numerics/NEMO/convection/roe.hpp index efc40ab88cef..4fbe65f6915d 100644 --- a/SU2_CFD/include/numerics/NEMO/convection/roe.hpp +++ b/SU2_CFD/include/numerics/NEMO/convection/roe.hpp @@ -2,7 +2,7 @@ * \file roe.hpp * \brief Declarations of numerics classes for Roe-type schemes in NEMO. * \author S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -34,7 +34,7 @@ * \brief Class for evaluating the Riemann problem using Roe's scheme for a two-temperature model. * \ingroup ConvDiscr * \author S. R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CUpwRoe_NEMO : public CNEMONumerics { private: diff --git a/SU2_CFD/include/numerics/continuous_adjoint/adj_convection.hpp b/SU2_CFD/include/numerics/continuous_adjoint/adj_convection.hpp index be1825be40f7..0ddf98a3d4f4 100644 --- a/SU2_CFD/include/numerics/continuous_adjoint/adj_convection.hpp +++ b/SU2_CFD/include/numerics/continuous_adjoint/adj_convection.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for continuous adjoint * convective discretization. Implemented in adj_convection.cpp. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/continuous_adjoint/adj_diffusion.hpp b/SU2_CFD/include/numerics/continuous_adjoint/adj_diffusion.hpp index cb71465ac4d6..de1f9e1b842e 100644 --- a/SU2_CFD/include/numerics/continuous_adjoint/adj_diffusion.hpp +++ b/SU2_CFD/include/numerics/continuous_adjoint/adj_diffusion.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for continuous adjoint * diffusion discretization. Implemented in adj_diffusion.cpp. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/continuous_adjoint/adj_sources.hpp b/SU2_CFD/include/numerics/continuous_adjoint/adj_sources.hpp index 8f4cc3974b3c..dd7e66e3f36e 100644 --- a/SU2_CFD/include/numerics/continuous_adjoint/adj_sources.hpp +++ b/SU2_CFD/include/numerics/continuous_adjoint/adj_sources.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for continuous adjoint * source term integration. Implemented in adj_sources.cpp. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp b/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp index 7e98680a40bc..d4497118c2fa 100644 --- a/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp +++ b/SU2_CFD/include/numerics/elasticity/CFEAElasticity.hpp @@ -2,7 +2,7 @@ * \file CFEAElasticity.hpp * \brief Declaration and inlines of the base class for elasticity problems. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -39,7 +39,7 @@ * The methods we override in this class with an empty implementation are here just to better * document the public interface of this class hierarchy. * \author R.Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEAElasticity : public CNumerics { diff --git a/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp b/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp index 62d27a17a87c..13bb5aecd4f5 100644 --- a/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp +++ b/SU2_CFD/include/numerics/elasticity/CFEALinearElasticity.hpp @@ -2,7 +2,7 @@ * \file CFEALinearElasticity.hpp * \brief Declaration and inlines of the linear elasticity FE numerics class. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -35,7 +35,7 @@ * \brief Class for computing the stiffness matrix of a linear, elastic problem. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEALinearElasticity : public CFEAElasticity { protected: @@ -85,7 +85,7 @@ class CFEALinearElasticity : public CFEAElasticity { * \brief Particular case of linear elasticity used for mesh deformation. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEAMeshElasticity final : public CFEALinearElasticity { diff --git a/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp b/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp index bad33c51b345..db8a37bcb422 100644 --- a/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp +++ b/SU2_CFD/include/numerics/elasticity/CFEANonlinearElasticity.hpp @@ -2,7 +2,7 @@ * \file CFEANonlinearElasticity.hpp * \brief Declaration and inlines of the nonlinear elasticity FE numerics class. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -37,7 +37,7 @@ * Compute_Plane_Stress_Term and Compute_Stress_Tensor. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEANonlinearElasticity : public CFEAElasticity { diff --git a/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp b/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp index 3cea87dcac5a..5dd96de8ef9d 100644 --- a/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp +++ b/SU2_CFD/include/numerics/elasticity/nonlinear_models.hpp @@ -2,7 +2,7 @@ * \file nonlinear_models.hpp * \brief Declarations of nonlinear constitutive models. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -35,7 +35,7 @@ * \brief Class for computing the constitutive and stress tensors for a neo-Hookean material model, compressible. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEM_NeoHookean_Comp final : public CFEANonlinearElasticity { @@ -79,7 +79,7 @@ class CFEM_NeoHookean_Comp final : public CFEANonlinearElasticity { * \brief Constitutive and stress tensors for a Knowles stored-energy function, nearly incompressible. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEM_Knowles_NearInc final : public CFEANonlinearElasticity { @@ -127,7 +127,7 @@ class CFEM_Knowles_NearInc final : public CFEANonlinearElasticity { * \brief Class for computing the constitutive and stress tensors for a dielectric elastomer. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEM_DielectricElastomer final : public CFEANonlinearElasticity { @@ -172,7 +172,7 @@ class CFEM_DielectricElastomer final : public CFEANonlinearElasticity { * \brief Class for computing the constitutive and stress tensors for a nearly-incompressible ideal DE. * \ingroup Elasticity_Equations * \author R.Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEM_IdealDE final : public CFEANonlinearElasticity { diff --git a/SU2_CFD/include/numerics/flow/convection/ausm_slau.hpp b/SU2_CFD/include/numerics/flow/convection/ausm_slau.hpp index b134778005e1..d4622d450bee 100644 --- a/SU2_CFD/include/numerics/flow/convection/ausm_slau.hpp +++ b/SU2_CFD/include/numerics/flow/convection/ausm_slau.hpp @@ -3,7 +3,7 @@ * \brief Declaration of numerics classes for the AUSM family of schemes, * including SLAU. The implementation is in ausm.cpp. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/flow/convection/centered.hpp b/SU2_CFD/include/numerics/flow/convection/centered.hpp index 90e6d10ffade..14013e3c0676 100644 --- a/SU2_CFD/include/numerics/flow/convection/centered.hpp +++ b/SU2_CFD/include/numerics/flow/convection/centered.hpp @@ -3,7 +3,7 @@ * \brief Declaration of numerics classes for centered schemes, * the implementation is in centered.cpp. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/flow/convection/fds.hpp b/SU2_CFD/include/numerics/flow/convection/fds.hpp index 68f106395064..ca4dcafd4ec7 100644 --- a/SU2_CFD/include/numerics/flow/convection/fds.hpp +++ b/SU2_CFD/include/numerics/flow/convection/fds.hpp @@ -3,7 +3,7 @@ * \brief Declarations of classes for Flux-Difference-Spliting schemes, * the implementations are in fds.cpp * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/flow/convection/fvs.hpp b/SU2_CFD/include/numerics/flow/convection/fvs.hpp index f3afb2dfb55c..bc7fd447f694 100644 --- a/SU2_CFD/include/numerics/flow/convection/fvs.hpp +++ b/SU2_CFD/include/numerics/flow/convection/fvs.hpp @@ -3,7 +3,7 @@ * \brief Declarations of classes for Flux-Vector-Spliting schemes, * the implementations are in fvs.cpp. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/flow/convection/hllc.hpp b/SU2_CFD/include/numerics/flow/convection/hllc.hpp index dcf7999feaf1..b525df4bf9cf 100644 --- a/SU2_CFD/include/numerics/flow/convection/hllc.hpp +++ b/SU2_CFD/include/numerics/flow/convection/hllc.hpp @@ -2,7 +2,7 @@ * \file hllc.hpp * \brief Declaration of HLLC numerics classes, implemented in hllc.cpp. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -34,7 +34,7 @@ * \brief Class for solving an approximate Riemann HLLC. * \ingroup ConvDiscr * \author G. Gori, Politecnico di Milano - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CUpwHLLC_Flow final : public CNumerics { private: @@ -86,7 +86,7 @@ class CUpwHLLC_Flow final : public CNumerics { * \brief Class for solving an approximate Riemann HLLC. * \ingroup ConvDiscr * \author G. Gori, Politecnico di Milano - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CUpwGeneralHLLC_Flow final : public CNumerics { private: diff --git a/SU2_CFD/include/numerics/flow/convection/roe.hpp b/SU2_CFD/include/numerics/flow/convection/roe.hpp index 2a01fe473963..01c0874f8e98 100644 --- a/SU2_CFD/include/numerics/flow/convection/roe.hpp +++ b/SU2_CFD/include/numerics/flow/convection/roe.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for Roe-type schemes, * implemented in roe.cpp. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -119,7 +119,7 @@ class CUpwRoe_Flow final : public CUpwRoeBase_Flow { * \brief Class for solving an approximate Riemann solver of L2Roe for the flow equations. * \ingroup ConvDiscr * \author E. Molina, A. Bueno, F. Palacios, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CUpwL2Roe_Flow final : public CUpwRoeBase_Flow { private: @@ -149,7 +149,7 @@ class CUpwL2Roe_Flow final : public CUpwRoeBase_Flow { * \brief Class for solving an approximate Riemann solver of LMRoe for the flow equations. * \ingroup ConvDiscr * \author E. Molina, A. Bueno, F. Palacios, P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CUpwLMRoe_Flow final : public CUpwRoeBase_Flow { private: diff --git a/SU2_CFD/include/numerics/flow/flow_diffusion.hpp b/SU2_CFD/include/numerics/flow/flow_diffusion.hpp index 8dee5dc46e6b..3291f3c55737 100644 --- a/SU2_CFD/include/numerics/flow/flow_diffusion.hpp +++ b/SU2_CFD/include/numerics/flow/flow_diffusion.hpp @@ -2,7 +2,7 @@ * \file flow_diffusion.hpp * \brief Declarations of numerics classes for viscous flux computation. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/flow/flow_sources.hpp b/SU2_CFD/include/numerics/flow/flow_sources.hpp index 0651eec70ab5..83c3811326cd 100644 --- a/SU2_CFD/include/numerics/flow/flow_sources.hpp +++ b/SU2_CFD/include/numerics/flow/flow_sources.hpp @@ -2,7 +2,7 @@ * \file flow_sources.hpp * \brief Declarations of numerics classes for source-term integration. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -178,7 +178,7 @@ class CSourceBodyForce final : public CSourceBase_Flow { * \brief Class for the source term integration of a body force in the incompressible solver. * \ingroup SourceDiscr * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CSourceIncBodyForce final : public CSourceBase_Flow { su2double Body_Force_Vector[3]; @@ -205,7 +205,7 @@ class CSourceIncBodyForce final : public CSourceBase_Flow { * \brief Class for the source term integration of the Boussinesq approximation for incompressible flow. * \ingroup SourceDiscr * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CSourceBoussinesq final : public CSourceBase_Flow { su2double Gravity_Vector[3]; diff --git a/SU2_CFD/include/numerics/heat.hpp b/SU2_CFD/include/numerics/heat.hpp index 1d75bdf37529..1e9cbf815052 100644 --- a/SU2_CFD/include/numerics/heat.hpp +++ b/SU2_CFD/include/numerics/heat.hpp @@ -2,7 +2,7 @@ * \file heat.hpp * \brief Declarations of numerics classes for heat transfer problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -36,7 +36,7 @@ * \brief Class for doing a scalar upwind solver for the heat convection equation. * \ingroup ConvDiscr * \author O. Burghardt. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CUpwSca_Heat final : public CUpwScalar> { public: @@ -70,7 +70,7 @@ class CUpwSca_Heat final : public CUpwScalar { public: diff --git a/SU2_CFD/include/numerics/radiation.hpp b/SU2_CFD/include/numerics/radiation.hpp index e793894fdc5e..172bf8b459ff 100644 --- a/SU2_CFD/include/numerics/radiation.hpp +++ b/SU2_CFD/include/numerics/radiation.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the classes used to compute * residual terms in radiation problems. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/scalar/scalar_convection.hpp b/SU2_CFD/include/numerics/scalar/scalar_convection.hpp index b8d8a6403930..e40749a5c1d3 100644 --- a/SU2_CFD/include/numerics/scalar/scalar_convection.hpp +++ b/SU2_CFD/include/numerics/scalar/scalar_convection.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for discretization of * convective fluxes in scalar problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp b/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp index 44256ad04058..580c0bedcefa 100644 --- a/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp +++ b/SU2_CFD/include/numerics/scalar/scalar_diffusion.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for discretization of * viscous fluxes in scalar problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/scalar/scalar_sources.hpp b/SU2_CFD/include/numerics/scalar/scalar_sources.hpp index 18f3686bc7f8..e60f1024393a 100644 --- a/SU2_CFD/include/numerics/scalar/scalar_sources.hpp +++ b/SU2_CFD/include/numerics/scalar/scalar_sources.hpp @@ -1,7 +1,7 @@ /*! * \file scalar_sources.hpp * \brief Declarations of numerics classes for integration of source terms in scalar problems. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/species/species_convection.hpp b/SU2_CFD/include/numerics/species/species_convection.hpp index 96f9a4a51bb1..114501cb5449 100644 --- a/SU2_CFD/include/numerics/species/species_convection.hpp +++ b/SU2_CFD/include/numerics/species/species_convection.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for discretization of * convective fluxes in species problems. * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/species/species_diffusion.hpp b/SU2_CFD/include/numerics/species/species_diffusion.hpp index 0410ec939963..424c4a47b8ca 100644 --- a/SU2_CFD/include/numerics/species/species_diffusion.hpp +++ b/SU2_CFD/include/numerics/species/species_diffusion.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for discretization of * viscous fluxes in species problems. * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/species/species_sources.hpp b/SU2_CFD/include/numerics/species/species_sources.hpp index b30166e3b27a..a33a0585948c 100644 --- a/SU2_CFD/include/numerics/species/species_sources.hpp +++ b/SU2_CFD/include/numerics/species/species_sources.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for integration of source * terms in species problems. * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/template.hpp b/SU2_CFD/include/numerics/template.hpp index 9e3c0cb3f6b2..08a89ad67567 100644 --- a/SU2_CFD/include/numerics/template.hpp +++ b/SU2_CFD/include/numerics/template.hpp @@ -5,7 +5,7 @@ * new schemes in SU2, in practice you should look for a similar * scheme and try to re-use functionality (not by copy-paste). * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/turbulent/transition/trans_convection.hpp b/SU2_CFD/include/numerics/turbulent/transition/trans_convection.hpp index b9b1a2aae525..2338c2ca837b 100644 --- a/SU2_CFD/include/numerics/turbulent/transition/trans_convection.hpp +++ b/SU2_CFD/include/numerics/turbulent/transition/trans_convection.hpp @@ -3,7 +3,7 @@ * \brief Delarations of numerics classes for discretization of * convective fluxes in transition problems. * \author S. Kang - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/turbulent/transition/trans_correlations.hpp b/SU2_CFD/include/numerics/turbulent/transition/trans_correlations.hpp index 97ba735e6e09..4a6be1c6c2a6 100644 --- a/SU2_CFD/include/numerics/turbulent/transition/trans_correlations.hpp +++ b/SU2_CFD/include/numerics/turbulent/transition/trans_correlations.hpp @@ -1,7 +1,7 @@ /*! * \file trans_correlations.hpp * \brief Numerics class for the LM model's correlation functions. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/turbulent/transition/trans_diffusion.hpp b/SU2_CFD/include/numerics/turbulent/transition/trans_diffusion.hpp index 6901f8e6c75f..0d4aee5a9472 100644 --- a/SU2_CFD/include/numerics/turbulent/transition/trans_diffusion.hpp +++ b/SU2_CFD/include/numerics/turbulent/transition/trans_diffusion.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for discretization of * viscous fluxes in transition problems. * \author S. Kang - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp b/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp index 08a2e9ff6e3a..73f37cc8defe 100644 --- a/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp +++ b/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp @@ -1,7 +1,7 @@ /*! * \file trans_sources.hpp * \brief Numerics classes for integration of source terms in transition problems. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/turbulent/turb_convection.hpp b/SU2_CFD/include/numerics/turbulent/turb_convection.hpp index a384b652a8f3..6c1641db87d3 100644 --- a/SU2_CFD/include/numerics/turbulent/turb_convection.hpp +++ b/SU2_CFD/include/numerics/turbulent/turb_convection.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for discretization of * convective fluxes in turbulence problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp b/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp index 537490a0c8c3..a4b2bbe264b0 100644 --- a/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp +++ b/SU2_CFD/include/numerics/turbulent/turb_diffusion.hpp @@ -3,7 +3,7 @@ * \brief Declarations of numerics classes for discretization of * viscous fluxes in turbulence problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics/turbulent/turb_sources.hpp b/SU2_CFD/include/numerics/turbulent/turb_sources.hpp index 33f7e046afc5..2c0cb51a8d21 100644 --- a/SU2_CFD/include/numerics/turbulent/turb_sources.hpp +++ b/SU2_CFD/include/numerics/turbulent/turb_sources.hpp @@ -1,7 +1,7 @@ /*! * \file turb_sources.hpp * \brief Numerics classes for integration of source terms in turbulence problems. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp b/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp index e05435d2d269..52c1d6e743ea 100644 --- a/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp +++ b/SU2_CFD/include/numerics_simd/CNumericsSIMD.cpp @@ -4,7 +4,7 @@ * \note This should be the only cpp for this family of classes * (which are all templates). All compilation takes place here. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics_simd/CNumericsSIMD.hpp b/SU2_CFD/include/numerics_simd/CNumericsSIMD.hpp index 83f45665d17e..3379a8ac920e 100644 --- a/SU2_CFD/include/numerics_simd/CNumericsSIMD.hpp +++ b/SU2_CFD/include/numerics_simd/CNumericsSIMD.hpp @@ -2,7 +2,7 @@ * \file CNumericsSIMD.hpp * \brief Vectorized (SIMD) numerics classes. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics_simd/flow/convection/centered.hpp b/SU2_CFD/include/numerics_simd/flow/convection/centered.hpp index aea968b9d810..6647e46825f9 100644 --- a/SU2_CFD/include/numerics_simd/flow/convection/centered.hpp +++ b/SU2_CFD/include/numerics_simd/flow/convection/centered.hpp @@ -2,7 +2,7 @@ * \file centered.hpp * \brief Centered convective schemes. * \author P. Gomes, F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics_simd/flow/convection/common.hpp b/SU2_CFD/include/numerics_simd/flow/convection/common.hpp index 9548414c3218..c2203e1f9841 100644 --- a/SU2_CFD/include/numerics_simd/flow/convection/common.hpp +++ b/SU2_CFD/include/numerics_simd/flow/convection/common.hpp @@ -2,7 +2,7 @@ * \file common.hpp * \brief Common convection-related methods. * \author P. Gomes, F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics_simd/flow/convection/upwind.hpp b/SU2_CFD/include/numerics_simd/flow/convection/upwind.hpp index da63d5e8b87e..36036d7dc5dc 100644 --- a/SU2_CFD/include/numerics_simd/flow/convection/upwind.hpp +++ b/SU2_CFD/include/numerics_simd/flow/convection/upwind.hpp @@ -2,7 +2,7 @@ * \file upwind.hpp * \brief Roe-family of convective schemes. * \author P. Gomes, A. Bueno, F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics_simd/flow/diffusion/common.hpp b/SU2_CFD/include/numerics_simd/flow/diffusion/common.hpp index bb5167422542..43793d215aaa 100644 --- a/SU2_CFD/include/numerics_simd/flow/diffusion/common.hpp +++ b/SU2_CFD/include/numerics_simd/flow/diffusion/common.hpp @@ -2,7 +2,7 @@ * \file common.hpp * \brief Helper functions for viscous methods. * \author P. Gomes, C. Pederson, A. Bueno, F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp b/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp index 22ea755f9af1..22114093435f 100644 --- a/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp +++ b/SU2_CFD/include/numerics_simd/flow/diffusion/viscous_fluxes.hpp @@ -2,7 +2,7 @@ * \file viscous_fluxes.hpp * \brief Decorator classes for computation of viscous fluxes. * \author P. Gomes, C. Pederson, A. Bueno, F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics_simd/flow/variables.hpp b/SU2_CFD/include/numerics_simd/flow/variables.hpp index 762c63d0c1ac..fa39c7337f2e 100644 --- a/SU2_CFD/include/numerics_simd/flow/variables.hpp +++ b/SU2_CFD/include/numerics_simd/flow/variables.hpp @@ -2,7 +2,7 @@ * \file variables.hpp * \brief Collection of types to store physical variables. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/numerics_simd/util.hpp b/SU2_CFD/include/numerics_simd/util.hpp index 25046e7db8e9..6e84209ee6db 100644 --- a/SU2_CFD/include/numerics_simd/util.hpp +++ b/SU2_CFD/include/numerics_simd/util.hpp @@ -2,7 +2,7 @@ * \file util.hpp * \brief Generic auxiliary functions. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CAdjElasticityOutput.hpp b/SU2_CFD/include/output/CAdjElasticityOutput.hpp index c6872d5b3e2c..d5df2bd29c01 100644 --- a/SU2_CFD/include/output/CAdjElasticityOutput.hpp +++ b/SU2_CFD/include/output/CAdjElasticityOutput.hpp @@ -2,7 +2,7 @@ * \file CAdjElasticityOutput.hpp * \brief Headers of the adjoint elasticity output class. * \author T. Albring, R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CAdjFlowCompOutput.hpp b/SU2_CFD/include/output/CAdjFlowCompOutput.hpp index f45aa8f52a98..c6fe8cbf2a64 100644 --- a/SU2_CFD/include/output/CAdjFlowCompOutput.hpp +++ b/SU2_CFD/include/output/CAdjFlowCompOutput.hpp @@ -2,7 +2,7 @@ * \file CAdjFlowCompOutput.hpp * \brief Headers of the adjoint compressible flow output. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CAdjFlowIncOutput.hpp b/SU2_CFD/include/output/CAdjFlowIncOutput.hpp index 95b516a72941..7724af03f05e 100644 --- a/SU2_CFD/include/output/CAdjFlowIncOutput.hpp +++ b/SU2_CFD/include/output/CAdjFlowIncOutput.hpp @@ -2,7 +2,7 @@ * \file CAdjFlowIncOutput.hpp * \brief Headers of the adjoint incompressible flow output. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CAdjFlowOutput.hpp b/SU2_CFD/include/output/CAdjFlowOutput.hpp index f487867bd974..832196302729 100644 --- a/SU2_CFD/include/output/CAdjFlowOutput.hpp +++ b/SU2_CFD/include/output/CAdjFlowOutput.hpp @@ -2,7 +2,7 @@ * \file CAdjFlowOutput.hpp * \brief Headers of the adjoint flow output. * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CAdjHeatOutput.hpp b/SU2_CFD/include/output/CAdjHeatOutput.hpp index 7c7a5a0bf865..56de539f7097 100644 --- a/SU2_CFD/include/output/CAdjHeatOutput.hpp +++ b/SU2_CFD/include/output/CAdjHeatOutput.hpp @@ -2,7 +2,7 @@ * \file CAdjHeatOutput.hpp * \brief Headers of the adjoint heat output. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CBaselineOutput.hpp b/SU2_CFD/include/output/CBaselineOutput.hpp index 7cd35c882e7c..c2b8f7021aa4 100644 --- a/SU2_CFD/include/output/CBaselineOutput.hpp +++ b/SU2_CFD/include/output/CBaselineOutput.hpp @@ -2,7 +2,7 @@ * \file CBaselineOutput.hpp * \brief Headers of the baseline output. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CElasticityOutput.hpp b/SU2_CFD/include/output/CElasticityOutput.hpp index ecf054a631a1..5435aae88a9c 100644 --- a/SU2_CFD/include/output/CElasticityOutput.hpp +++ b/SU2_CFD/include/output/CElasticityOutput.hpp @@ -2,7 +2,7 @@ * \file CElasticityOutput.hpp * \brief Headers of the elasticity output. * \author F. Palacios, T. Economon, M. Colonno - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CFVMOutput.hpp b/SU2_CFD/include/output/CFVMOutput.hpp index 6e1153ebf71e..318dbdebb867 100644 --- a/SU2_CFD/include/output/CFVMOutput.hpp +++ b/SU2_CFD/include/output/CFVMOutput.hpp @@ -2,7 +2,7 @@ * \file CFVMOutput.hpp * \brief Headers of the Finite Volume Method output. * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CFlowCompFEMOutput.hpp b/SU2_CFD/include/output/CFlowCompFEMOutput.hpp index fdb5d65048fb..839e00052aee 100644 --- a/SU2_CFD/include/output/CFlowCompFEMOutput.hpp +++ b/SU2_CFD/include/output/CFlowCompFEMOutput.hpp @@ -2,7 +2,7 @@ * \file CFlowCompFEMOutput.hpp * \brief Headers of the compressible FEM flow output. * \author R. Sanchez, T. Albring. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CFlowCompOutput.hpp b/SU2_CFD/include/output/CFlowCompOutput.hpp index 5d30fe815ec6..ba1e289f8529 100644 --- a/SU2_CFD/include/output/CFlowCompOutput.hpp +++ b/SU2_CFD/include/output/CFlowCompOutput.hpp @@ -2,7 +2,7 @@ * \file CFlowCompOutput.hpp * \brief Headers of the compressible flow output. * \author R. Sanchez, T. Albring. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CFlowIncOutput.hpp b/SU2_CFD/include/output/CFlowIncOutput.hpp index 989c4a20cecd..0eb29f2911a1 100644 --- a/SU2_CFD/include/output/CFlowIncOutput.hpp +++ b/SU2_CFD/include/output/CFlowIncOutput.hpp @@ -2,7 +2,7 @@ * \file CFlowIncOutput.hpp * \brief Headers of the incompressible flow output. * \author T. Albring, R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CFlowOutput.hpp b/SU2_CFD/include/output/CFlowOutput.hpp index eec5fb365186..e79067c79d9b 100644 --- a/SU2_CFD/include/output/CFlowOutput.hpp +++ b/SU2_CFD/include/output/CFlowOutput.hpp @@ -2,7 +2,7 @@ * \file CFlowOutput.hpp * \brief Headers of the flow output. * \author F. Palacios, T. Economon, M. Colonno - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CHeatOutput.hpp b/SU2_CFD/include/output/CHeatOutput.hpp index 2000f5a4e828..48dd4b2ee205 100644 --- a/SU2_CFD/include/output/CHeatOutput.hpp +++ b/SU2_CFD/include/output/CHeatOutput.hpp @@ -2,7 +2,7 @@ * \file CHeatOutput.hpp * \brief Headers of the heat output. * \author R. Sanchez, T. Albring. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CMeshOutput.hpp b/SU2_CFD/include/output/CMeshOutput.hpp index 2b83ea216d8d..b5b5ec6fd3f0 100644 --- a/SU2_CFD/include/output/CMeshOutput.hpp +++ b/SU2_CFD/include/output/CMeshOutput.hpp @@ -2,7 +2,7 @@ * \file CMeshOutput.hpp * \brief Headers of the mesh output. * \author R. Sanchez, T. Albring. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CMultizoneOutput.hpp b/SU2_CFD/include/output/CMultizoneOutput.hpp index fed7195fc4f4..08294accc963 100644 --- a/SU2_CFD/include/output/CMultizoneOutput.hpp +++ b/SU2_CFD/include/output/CMultizoneOutput.hpp @@ -2,7 +2,7 @@ * \file CMultizoneOutput.hpp * \brief Headers of the main subroutines for screen and history output in multizone problems. * \author R. Sanchez, T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/CNEMOCompOutput.hpp b/SU2_CFD/include/output/CNEMOCompOutput.hpp index 4c6aa3dba791..cbcd1dc24a84 100644 --- a/SU2_CFD/include/output/CNEMOCompOutput.hpp +++ b/SU2_CFD/include/output/CNEMOCompOutput.hpp @@ -2,7 +2,7 @@ * \file CNEMOCompOutput.hpp * \brief Headers of the compressible flow output. * \author R. Sanchez, W. Maier. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/COutput.hpp b/SU2_CFD/include/output/COutput.hpp index cf12c495e1a4..f5df6d6272b7 100644 --- a/SU2_CFD/include/output/COutput.hpp +++ b/SU2_CFD/include/output/COutput.hpp @@ -2,7 +2,7 @@ * \file COutput.hpp * \brief Headers of the output class. * \author T.Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/COutputFactory.hpp b/SU2_CFD/include/output/COutputFactory.hpp index 09ac7f0d53a5..3ddc4f8254b4 100644 --- a/SU2_CFD/include/output/COutputFactory.hpp +++ b/SU2_CFD/include/output/COutputFactory.hpp @@ -2,7 +2,7 @@ * \file COutputFactory.hpp * \brief Headers of the output class. * \author T.Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CCGNSFileWriter.hpp b/SU2_CFD/include/output/filewriter/CCGNSFileWriter.hpp index c022c00fc8bf..29dede06f626 100644 --- a/SU2_CFD/include/output/filewriter/CCGNSFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CCGNSFileWriter.hpp @@ -2,7 +2,7 @@ * \file CCGNSFileWriter.hpp * \brief Headers for CGNS file writer class. * \author G. Baldan - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CCSVFileWriter.hpp b/SU2_CFD/include/output/filewriter/CCSVFileWriter.hpp index 954d0230985d..fc34926ef06f 100644 --- a/SU2_CFD/include/output/filewriter/CCSVFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CCSVFileWriter.hpp @@ -2,7 +2,7 @@ * \file CCSVFileWriter.hpp * \brief Headers fo the CSV file writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CFEMDataSorter.hpp b/SU2_CFD/include/output/filewriter/CFEMDataSorter.hpp index 94457c3b71cc..fcd91b304ce0 100644 --- a/SU2_CFD/include/output/filewriter/CFEMDataSorter.hpp +++ b/SU2_CFD/include/output/filewriter/CFEMDataSorter.hpp @@ -2,7 +2,7 @@ * \file CFEMDataSorter.hpp * \brief Headers fo the FEM data sorter class. * \author T. Albring, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CFVMDataSorter.hpp b/SU2_CFD/include/output/filewriter/CFVMDataSorter.hpp index ce38d08c5fce..2f3ccec36d76 100644 --- a/SU2_CFD/include/output/filewriter/CFVMDataSorter.hpp +++ b/SU2_CFD/include/output/filewriter/CFVMDataSorter.hpp @@ -2,7 +2,7 @@ * \file CFVMDataSorter.hpp * \brief Headers fo the FVM data sorter class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CFileWriter.hpp b/SU2_CFD/include/output/filewriter/CFileWriter.hpp index 99afed6b6ecd..655ad787ffe3 100644 --- a/SU2_CFD/include/output/filewriter/CFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CFileWriter.hpp @@ -2,7 +2,7 @@ * \file CFileWriter.hpp * \brief Headers fo the file writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CParallelDataSorter.hpp b/SU2_CFD/include/output/filewriter/CParallelDataSorter.hpp index 8e89a8de49f2..9f2b0e52031f 100644 --- a/SU2_CFD/include/output/filewriter/CParallelDataSorter.hpp +++ b/SU2_CFD/include/output/filewriter/CParallelDataSorter.hpp @@ -2,7 +2,7 @@ * \file CParallelDataSorter.hpp * \brief Headers fo the data sorter class. * \author T. Albring, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CParaviewBinaryFileWriter.hpp b/SU2_CFD/include/output/filewriter/CParaviewBinaryFileWriter.hpp index 0a1540105091..53617a633d42 100644 --- a/SU2_CFD/include/output/filewriter/CParaviewBinaryFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CParaviewBinaryFileWriter.hpp @@ -2,7 +2,7 @@ * \file CParaviewBinaryFileWriter.hpp * \brief Headers fo paraview binary file writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CParaviewFileWriter.hpp b/SU2_CFD/include/output/filewriter/CParaviewFileWriter.hpp index 4f9b74dbbc2f..48beaaa93b79 100644 --- a/SU2_CFD/include/output/filewriter/CParaviewFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CParaviewFileWriter.hpp @@ -2,7 +2,7 @@ * \file CParaviewFileWriter.hpp * \brief Headers fo the paraview file writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CParaviewVTMFileWriter.hpp b/SU2_CFD/include/output/filewriter/CParaviewVTMFileWriter.hpp index 9bf6765f7339..ee3b7c601a9d 100644 --- a/SU2_CFD/include/output/filewriter/CParaviewVTMFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CParaviewVTMFileWriter.hpp @@ -2,7 +2,7 @@ * \file CParaviewVTMFileWriter.hpp * \brief Headers fo paraview binary file writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CParaviewXMLFileWriter.hpp b/SU2_CFD/include/output/filewriter/CParaviewXMLFileWriter.hpp index 9e9407e58511..7862c26f89cc 100644 --- a/SU2_CFD/include/output/filewriter/CParaviewXMLFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CParaviewXMLFileWriter.hpp @@ -2,7 +2,7 @@ * \file CParaviewXMLFileWriter.hpp * \brief Headers fo paraview binary file writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CSTLFileWriter.hpp b/SU2_CFD/include/output/filewriter/CSTLFileWriter.hpp index 016108d220e4..7deba35db43a 100644 --- a/SU2_CFD/include/output/filewriter/CSTLFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CSTLFileWriter.hpp @@ -2,7 +2,7 @@ * \file CSTLFileWriter.hpp * \brief Headers fo the STL file writer class. * \author T. Kattmann, T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -33,7 +33,7 @@ * \class CSTLFileWriter * \brief Class for writing STL output files. * \author T. Kattmann, T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CSTLFileWriter final : public CFileWriter{ private: diff --git a/SU2_CFD/include/output/filewriter/CSU2BinaryFileWriter.hpp b/SU2_CFD/include/output/filewriter/CSU2BinaryFileWriter.hpp index e7c01ed60bd3..5815fe43a856 100644 --- a/SU2_CFD/include/output/filewriter/CSU2BinaryFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CSU2BinaryFileWriter.hpp @@ -2,7 +2,7 @@ * \file CSU2BinaryFileWriter.hpp * \brief Headers fo the SU2 binary file writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CSU2FileWriter.hpp b/SU2_CFD/include/output/filewriter/CSU2FileWriter.hpp index 362f039d6e09..b57d956f4385 100644 --- a/SU2_CFD/include/output/filewriter/CSU2FileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CSU2FileWriter.hpp @@ -2,7 +2,7 @@ * \file CSU2FileWriter.hpp * \brief Headers fo the CSV file writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CSU2MeshFileWriter.hpp b/SU2_CFD/include/output/filewriter/CSU2MeshFileWriter.hpp index 23dd713a1bba..b863da91d5ce 100644 --- a/SU2_CFD/include/output/filewriter/CSU2MeshFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CSU2MeshFileWriter.hpp @@ -2,7 +2,7 @@ * \file CSU2MeshFileWriter.hpp * \brief Headers fo the CSV file writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CSurfaceFEMDataSorter.hpp b/SU2_CFD/include/output/filewriter/CSurfaceFEMDataSorter.hpp index c4ae4076d432..e4e9645b3bc4 100644 --- a/SU2_CFD/include/output/filewriter/CSurfaceFEMDataSorter.hpp +++ b/SU2_CFD/include/output/filewriter/CSurfaceFEMDataSorter.hpp @@ -2,7 +2,7 @@ * \file CSurfaceFEMDataSorter.hpp * \brief Headers fo the surface FEM data sorter class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CSurfaceFVMDataSorter.hpp b/SU2_CFD/include/output/filewriter/CSurfaceFVMDataSorter.hpp index 6c76eb693df6..11478fb2618e 100644 --- a/SU2_CFD/include/output/filewriter/CSurfaceFVMDataSorter.hpp +++ b/SU2_CFD/include/output/filewriter/CSurfaceFVMDataSorter.hpp @@ -2,7 +2,7 @@ * \file CSurfaceFVMDataSorter.hpp * \brief Headers for the surface FVM data sorter class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp b/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp index 29be9e12d2f0..99f43dae1f8f 100644 --- a/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CTecplotBinaryFileWriter.hpp @@ -2,7 +2,7 @@ * \file CTecplotBinaryFileWriter.hpp * \brief Headers fo the tecplot binary writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/filewriter/CTecplotFileWriter.hpp b/SU2_CFD/include/output/filewriter/CTecplotFileWriter.hpp index 5621f97ffcfe..f31b384a3680 100644 --- a/SU2_CFD/include/output/filewriter/CTecplotFileWriter.hpp +++ b/SU2_CFD/include/output/filewriter/CTecplotFileWriter.hpp @@ -2,7 +2,7 @@ * \file CTecplotFileWriter.hpp * \brief Headers fo the tecplot ASCII writer class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/output/tools/CWindowingTools.hpp b/SU2_CFD/include/output/tools/CWindowingTools.hpp index 7aa103e5b70c..036646dc4c5f 100644 --- a/SU2_CFD/include/output/tools/CWindowingTools.hpp +++ b/SU2_CFD/include/output/tools/CWindowingTools.hpp @@ -2,7 +2,7 @@ * \file signal_processing_toolbox.hpp * \brief Header file for the signal processing toolbox. * \author S. Schotthöfer - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/sgs_model.hpp b/SU2_CFD/include/sgs_model.hpp index 02e27fef8ea2..962b81ffc429 100644 --- a/SU2_CFD/include/sgs_model.hpp +++ b/SU2_CFD/include/sgs_model.hpp @@ -2,7 +2,7 @@ * \file sgs_model.hpp * \brief Headers of the LES subgrid scale models of the SU2 solvers. * \author E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -38,7 +38,7 @@ using namespace std; * \class CSGSModel * \brief Base class for defining the LES subgrid scale model. * \author: E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CSGSModel { @@ -224,7 +224,7 @@ class CSGSModel { * \class CSmagorinskyModel * \brief Derived class for defining the Smagorinsky SGS model. * \author: E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CSmagorinskyModel : public CSGSModel { @@ -413,7 +413,7 @@ class CSmagorinskyModel : public CSGSModel { * \class CWALEModel * \brief Derived class for defining the WALE SGS model. * \author: E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CWALEModel : public CSGSModel { @@ -601,7 +601,7 @@ class CWALEModel : public CSGSModel { * \class CVremanModel * \brief Derived class for defining the WALE SGS model. * \author: E. van der Weide, T. Economon, P. Urbanczyk, E. Molina - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CVremanModel : public CSGSModel { diff --git a/SU2_CFD/include/sgs_model.inl b/SU2_CFD/include/sgs_model.inl index 3e32ada06366..fdcf1796345f 100644 --- a/SU2_CFD/include/sgs_model.inl +++ b/SU2_CFD/include/sgs_model.inl @@ -2,7 +2,7 @@ * \file sgs_model.inl * \brief In-Line subroutines of the sgs_model.hpp file. * \author E. van der Weide, T. Economon, P. Urbanczyk - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CAdjEulerSolver.hpp b/SU2_CFD/include/solvers/CAdjEulerSolver.hpp index a7b65af3dba8..ee042bcd9161 100644 --- a/SU2_CFD/include/solvers/CAdjEulerSolver.hpp +++ b/SU2_CFD/include/solvers/CAdjEulerSolver.hpp @@ -2,7 +2,7 @@ * \file CAdjEulerSolver.hpp * \brief Headers of the CAdjEulerSolver class * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CAdjNSSolver.hpp b/SU2_CFD/include/solvers/CAdjNSSolver.hpp index 0a4c0097bb61..2b2be8644b17 100644 --- a/SU2_CFD/include/solvers/CAdjNSSolver.hpp +++ b/SU2_CFD/include/solvers/CAdjNSSolver.hpp @@ -2,7 +2,7 @@ * \file CAdjNSSolver.hpp * \brief Headers of the CAdjNSSolver class * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CAdjTurbSolver.hpp b/SU2_CFD/include/solvers/CAdjTurbSolver.hpp index 15fc90711846..13d6b464127b 100644 --- a/SU2_CFD/include/solvers/CAdjTurbSolver.hpp +++ b/SU2_CFD/include/solvers/CAdjTurbSolver.hpp @@ -2,7 +2,7 @@ * \file CAdjTurbSolver.hpp * \brief Headers of the CAdjTurbSolver class * \author F. Palacios, A. Bueno. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CBaselineSolver.hpp b/SU2_CFD/include/solvers/CBaselineSolver.hpp index 2506c68b9d4a..9efb90c95f12 100644 --- a/SU2_CFD/include/solvers/CBaselineSolver.hpp +++ b/SU2_CFD/include/solvers/CBaselineSolver.hpp @@ -2,7 +2,7 @@ * \file CBaslineSolver.hpp * \brief Headers of the CBaselineSolver class * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CBaselineSolver_FEM.hpp b/SU2_CFD/include/solvers/CBaselineSolver_FEM.hpp index 3a98b38040fb..c9771853f839 100644 --- a/SU2_CFD/include/solvers/CBaselineSolver_FEM.hpp +++ b/SU2_CFD/include/solvers/CBaselineSolver_FEM.hpp @@ -2,7 +2,7 @@ * \file CBaslineSolver_FEM.hpp * \brief Headers of the CBaselineSolver class * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -31,7 +31,7 @@ * \class CBaselineSolver_FEM * \brief Main class for defining a baseline solution from a restart file for the DG-FEM solver output. * \author T. Economon. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CBaselineSolver_FEM final : public CSolver { protected: diff --git a/SU2_CFD/include/solvers/CDiscAdjFEASolver.hpp b/SU2_CFD/include/solvers/CDiscAdjFEASolver.hpp index 2fed06bd9df5..9172b3eef228 100644 --- a/SU2_CFD/include/solvers/CDiscAdjFEASolver.hpp +++ b/SU2_CFD/include/solvers/CDiscAdjFEASolver.hpp @@ -2,7 +2,7 @@ * \file CDiscAdjFEASolver.hpp * \brief Headers of the CDiscAdjFEASolver class * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CDiscAdjMeshSolver.hpp b/SU2_CFD/include/solvers/CDiscAdjMeshSolver.hpp index 14d0ded39638..cdbd4027a697 100644 --- a/SU2_CFD/include/solvers/CDiscAdjMeshSolver.hpp +++ b/SU2_CFD/include/solvers/CDiscAdjMeshSolver.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to compute the * the discrete adjoint of the linear-elastic mesh solver. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CDiscAdjSolver.hpp b/SU2_CFD/include/solvers/CDiscAdjSolver.hpp index 5d0ae10580c5..71758c0f43cf 100644 --- a/SU2_CFD/include/solvers/CDiscAdjSolver.hpp +++ b/SU2_CFD/include/solvers/CDiscAdjSolver.hpp @@ -2,7 +2,7 @@ * \file CDiscAdjSolver.hpp * \brief Headers of the CDiscAdjSolver class * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CEulerSolver.hpp b/SU2_CFD/include/solvers/CEulerSolver.hpp index 0ad143edaffc..46eed006b049 100644 --- a/SU2_CFD/include/solvers/CEulerSolver.hpp +++ b/SU2_CFD/include/solvers/CEulerSolver.hpp @@ -2,7 +2,7 @@ * \file CEulerSolver.hpp * \brief Headers of the CEulerSolver class * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CFEASolver.hpp b/SU2_CFD/include/solvers/CFEASolver.hpp index 631f729b04eb..c2b460f83468 100644 --- a/SU2_CFD/include/solvers/CFEASolver.hpp +++ b/SU2_CFD/include/solvers/CFEASolver.hpp @@ -2,7 +2,7 @@ * \file CFEASolver.hpp * \brief Finite element solver for elasticity problems. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CFEASolverBase.hpp b/SU2_CFD/include/solvers/CFEASolverBase.hpp index bd43a217b47b..76ab16b9cb91 100644 --- a/SU2_CFD/include/solvers/CFEASolverBase.hpp +++ b/SU2_CFD/include/solvers/CFEASolverBase.hpp @@ -2,7 +2,7 @@ * \file CFEASolver.hpp * \brief Base class template for all FEA solvers using the SU2 internal finite elements. * \author T. Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CFEM_DG_EulerSolver.hpp b/SU2_CFD/include/solvers/CFEM_DG_EulerSolver.hpp index 143e52185781..4bd2ccf2273a 100644 --- a/SU2_CFD/include/solvers/CFEM_DG_EulerSolver.hpp +++ b/SU2_CFD/include/solvers/CFEM_DG_EulerSolver.hpp @@ -2,7 +2,7 @@ * \file CFEM_DG_EulerSolver.hpp * \brief Headers of the CFEM_DG_EulerSolver class * \author E. van der Weide, T. Economon, J. Alonso - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -35,7 +35,7 @@ * \brief Main class for defining the Euler Discontinuous Galerkin finite element flow solver. * \ingroup Euler_Equations * \author E. van der Weide, T. Economon, J. Alonso - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEM_DG_EulerSolver : public CSolver { protected: diff --git a/SU2_CFD/include/solvers/CFEM_DG_NSSolver.hpp b/SU2_CFD/include/solvers/CFEM_DG_NSSolver.hpp index fbafc3185ca2..b4e2ffda50a3 100644 --- a/SU2_CFD/include/solvers/CFEM_DG_NSSolver.hpp +++ b/SU2_CFD/include/solvers/CFEM_DG_NSSolver.hpp @@ -2,7 +2,7 @@ * \file CFEM_DG_NSSolver.hpp * \brief Headers of the CFEM_DG_NSSolver class * \author E. van der Weide, T. Economon, J. Alonso - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -35,7 +35,7 @@ * \brief Main class for defining the Navier-Stokes Discontinuous Galerkin finite element flow solver. * \ingroup Navier_Stokes_Equations * \author E. van der Weide, T. Economon, J. Alonso - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEM_DG_NSSolver final : public CFEM_DG_EulerSolver { private: diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp index c597f2e12a61..da14a8ef95ae 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.hpp @@ -1,7 +1,7 @@ /*! * \file CFVMFlowSolverBase.hpp * \brief Base class template for all FVM flow solvers. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl index 11a57e92d864..05ec25a0e56e 100644 --- a/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl +++ b/SU2_CFD/include/solvers/CFVMFlowSolverBase.inl @@ -1,7 +1,7 @@ /*! * \file CFVMFlowSolverBase.inl * \brief Base class template for all FVM flow solvers. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp b/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp index 34fc64741b02..11160c6663a5 100644 --- a/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp +++ b/SU2_CFD/include/solvers/CGradientSmoothingSolver.hpp @@ -2,7 +2,7 @@ * \file CGradientSmoothingSolver.hpp * \brief SOlver class for Sobolev smoothing of sensitivities. * \author T. Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CHeatSolver.hpp b/SU2_CFD/include/solvers/CHeatSolver.hpp index 077d058b9498..a0cce12c57ca 100644 --- a/SU2_CFD/include/solvers/CHeatSolver.hpp +++ b/SU2_CFD/include/solvers/CHeatSolver.hpp @@ -2,7 +2,7 @@ * \file CHeatSolver.hpp * \brief Headers of the CHeatSolver class * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -34,7 +34,7 @@ * \class CHeatSolver * \brief Main class for defining the finite-volume heat solver. * \author O. Burghardt - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CHeatSolver final : public CScalarSolver { protected: diff --git a/SU2_CFD/include/solvers/CIncEulerSolver.hpp b/SU2_CFD/include/solvers/CIncEulerSolver.hpp index a4185a5a6e77..98c3d21a8f2a 100644 --- a/SU2_CFD/include/solvers/CIncEulerSolver.hpp +++ b/SU2_CFD/include/solvers/CIncEulerSolver.hpp @@ -2,7 +2,7 @@ * \file CIncEulerSolver.hpp * \brief Headers of the CIncEulerSolver class * \author F. Palacios, T. Economon, T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CIncNSSolver.hpp b/SU2_CFD/include/solvers/CIncNSSolver.hpp index 3a6be3df3c57..dc2d80e86e6f 100644 --- a/SU2_CFD/include/solvers/CIncNSSolver.hpp +++ b/SU2_CFD/include/solvers/CIncNSSolver.hpp @@ -2,7 +2,7 @@ * \file CIncNSSolver.hpp * \brief Headers of the CIncNSSolver class * \author F. Palacios, T. Economon, T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CMeshSolver.hpp b/SU2_CFD/include/solvers/CMeshSolver.hpp index 2b3e11d28c99..b0b0b7a38740 100644 --- a/SU2_CFD/include/solvers/CMeshSolver.hpp +++ b/SU2_CFD/include/solvers/CMeshSolver.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to compute the deformation of * the volumetric numerical grid using the linear elasticity solver. * \author Ruben Sanchez, based on CVolumetricMovement developments (F. Palacios, A. Bueno, T. Economon, S. Padron) - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp b/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp index 75bd963f7563..ba68b9f9aef6 100644 --- a/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp +++ b/SU2_CFD/include/solvers/CNEMOEulerSolver.hpp @@ -2,7 +2,7 @@ * \file CNEMOEulerSolver.hpp * \brief Headers of the CNEMOEulerSolver class * \author S. R. Copeland, F. Palacios, W. Maier. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -36,7 +36,7 @@ * \brief Main class for defining the NEMO Euler's flow solver. * \ingroup Euler_Equations * \author S. R. Copeland, F. Palacios, W. Maier. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CNEMOEulerSolver : public CFVMFlowSolverBase { protected: diff --git a/SU2_CFD/include/solvers/CNEMONSSolver.hpp b/SU2_CFD/include/solvers/CNEMONSSolver.hpp index 3c48ebab62e8..0e4fe68a5b2f 100644 --- a/SU2_CFD/include/solvers/CNEMONSSolver.hpp +++ b/SU2_CFD/include/solvers/CNEMONSSolver.hpp @@ -2,7 +2,7 @@ * \file CNEMONSSolver.hpp * \brief Headers of the CNEMONSSolver class * \author S. R. Copeland, F. Palacios, W. Maier. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CNSSolver.hpp b/SU2_CFD/include/solvers/CNSSolver.hpp index d738b8380ee3..4ac0ee4ae7da 100644 --- a/SU2_CFD/include/solvers/CNSSolver.hpp +++ b/SU2_CFD/include/solvers/CNSSolver.hpp @@ -2,7 +2,7 @@ * \file CNSSolver.hpp * \brief Headers of the CNSSolver class * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CRadP1Solver.hpp b/SU2_CFD/include/solvers/CRadP1Solver.hpp index f3bd61ddcbbc..ba590a51aba6 100644 --- a/SU2_CFD/include/solvers/CRadP1Solver.hpp +++ b/SU2_CFD/include/solvers/CRadP1Solver.hpp @@ -2,7 +2,7 @@ * \file CRadP1Solver.hpp * \brief Declaration and inlines of the class to compute a P1 radiation problem. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CRadSolver.hpp b/SU2_CFD/include/solvers/CRadSolver.hpp index 72bff608a923..d92909204dd1 100644 --- a/SU2_CFD/include/solvers/CRadSolver.hpp +++ b/SU2_CFD/include/solvers/CRadSolver.hpp @@ -2,7 +2,7 @@ * \file CRadSolver.hpp * \brief Declaration and inlines of the class to compute a generic radiation solver. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CScalarSolver.hpp b/SU2_CFD/include/solvers/CScalarSolver.hpp index 332424e89b8e..1ef6d597a94b 100644 --- a/SU2_CFD/include/solvers/CScalarSolver.hpp +++ b/SU2_CFD/include/solvers/CScalarSolver.hpp @@ -1,7 +1,7 @@ /*! * \file CScalarSolver.hpp * \brief Headers of the CScalarSolver class - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CScalarSolver.inl b/SU2_CFD/include/solvers/CScalarSolver.inl index 81f6cdbb55cb..7d6871f8ca4e 100644 --- a/SU2_CFD/include/solvers/CScalarSolver.inl +++ b/SU2_CFD/include/solvers/CScalarSolver.inl @@ -1,7 +1,7 @@ /*! * \file CScalarSolver.inl * \brief Main subroutines of CScalarSolver class - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CSolver.hpp b/SU2_CFD/include/solvers/CSolver.hpp index 01df1d3ee277..6161e2f0fc3b 100644 --- a/SU2_CFD/include/solvers/CSolver.hpp +++ b/SU2_CFD/include/solvers/CSolver.hpp @@ -2,7 +2,7 @@ * \file CSolver.hpp * \brief Headers of the CSolver class which is inherited by all of the other solvers * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CSolverFactory.hpp b/SU2_CFD/include/solvers/CSolverFactory.hpp index f374bc0e74d7..e612f3fb1e3a 100644 --- a/SU2_CFD/include/solvers/CSolverFactory.hpp +++ b/SU2_CFD/include/solvers/CSolverFactory.hpp @@ -2,7 +2,7 @@ * \file CSolverFactory.hpp * \brief Headers of the CSolverFactory class * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp b/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp index 5801cd6d8e3c..10ccc65cfd36 100644 --- a/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp +++ b/SU2_CFD/include/solvers/CSpeciesFlameletSolver.hpp @@ -2,7 +2,7 @@ * \file CSpeciesFlameletSolver.hpp * \brief Headers of the CSpeciesFlameletSolver class * \author D. Mayer, N. Beishuizen, T. Economon, E. Bunschoten - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CSpeciesSolver.hpp b/SU2_CFD/include/solvers/CSpeciesSolver.hpp index 82898f83b83f..3a657d97c01d 100644 --- a/SU2_CFD/include/solvers/CSpeciesSolver.hpp +++ b/SU2_CFD/include/solvers/CSpeciesSolver.hpp @@ -2,7 +2,7 @@ * \file CSpeciesSolver.hpp * \brief Headers of the CSpeciesSolver class * \author T. Kattmann. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CTemplateSolver.hpp b/SU2_CFD/include/solvers/CTemplateSolver.hpp index c0db7c4a2c59..a5be07ef88b4 100644 --- a/SU2_CFD/include/solvers/CTemplateSolver.hpp +++ b/SU2_CFD/include/solvers/CTemplateSolver.hpp @@ -2,7 +2,7 @@ * \file CTemplateSolver.hpp * \brief Headers of the CTemplateSolver class * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CTransLMSolver.hpp b/SU2_CFD/include/solvers/CTransLMSolver.hpp index 5bd8985c85c6..3ca62dfb9dbb 100644 --- a/SU2_CFD/include/solvers/CTransLMSolver.hpp +++ b/SU2_CFD/include/solvers/CTransLMSolver.hpp @@ -2,7 +2,7 @@ * \file CTransLMSolver.hpp * \brief Headers of the CTransLMSolver class * \author A. Aranake - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CTurbSASolver.hpp b/SU2_CFD/include/solvers/CTurbSASolver.hpp index b95b9f16a728..fa2cc6540196 100644 --- a/SU2_CFD/include/solvers/CTurbSASolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSASolver.hpp @@ -2,7 +2,7 @@ * \file CTurbSASolver.hpp * \brief Headers of the CTurbSASolver class * \author A. Bueno. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CTurbSSTSolver.hpp b/SU2_CFD/include/solvers/CTurbSSTSolver.hpp index 8b935aeba994..e7afce0cacd2 100644 --- a/SU2_CFD/include/solvers/CTurbSSTSolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSSTSolver.hpp @@ -2,7 +2,7 @@ * \file CTurbSSTSolver.hpp * \brief Headers of the CTurbSSTSolver class * \author A. Campos, F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/solvers/CTurbSolver.hpp b/SU2_CFD/include/solvers/CTurbSolver.hpp index 59e83795b4b1..f2d1c789f7de 100644 --- a/SU2_CFD/include/solvers/CTurbSolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSolver.hpp @@ -2,7 +2,7 @@ * \file CTurbSolver.hpp * \brief Headers of the CTurbSolver class * \author A. Bueno. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/task_definition.hpp b/SU2_CFD/include/task_definition.hpp index c80abef8d590..797f4ff652df 100644 --- a/SU2_CFD/include/task_definition.hpp +++ b/SU2_CFD/include/task_definition.hpp @@ -2,7 +2,7 @@ * \file task_definition.hpp * \brief Header of the task definition class for the SU2 solvers. * \author E. van der Weide, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -37,7 +37,7 @@ using namespace std; * \class CTaskDefinition * \brief Class for defining a task to be carried out * \author: E. van der Weide, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CTaskDefinition { diff --git a/SU2_CFD/include/task_definition.inl b/SU2_CFD/include/task_definition.inl index 7873dc26df5e..98157a6cc783 100644 --- a/SU2_CFD/include/task_definition.inl +++ b/SU2_CFD/include/task_definition.inl @@ -2,7 +2,7 @@ * \file task_definition.inl * \brief In-Line subroutines of the task_definition.hpp file. * \author E. van der Weide, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CAdjEulerVariable.hpp b/SU2_CFD/include/variables/CAdjEulerVariable.hpp index 7b4077b89eca..1faf911816aa 100644 --- a/SU2_CFD/include/variables/CAdjEulerVariable.hpp +++ b/SU2_CFD/include/variables/CAdjEulerVariable.hpp @@ -2,7 +2,7 @@ * \file CAdjEulerVariable.hpp * \brief Main class for defining the variables of the adjoint Euler solver. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CAdjNSVariable.hpp b/SU2_CFD/include/variables/CAdjNSVariable.hpp index 309c9a07a64c..d83576d0deb9 100644 --- a/SU2_CFD/include/variables/CAdjNSVariable.hpp +++ b/SU2_CFD/include/variables/CAdjNSVariable.hpp @@ -2,7 +2,7 @@ * \file CAdjNSVariable.hpp * \brief Main class for defining the variables of the adjoint Navier-Stokes solver. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CAdjTurbVariable.hpp b/SU2_CFD/include/variables/CAdjTurbVariable.hpp index 975b716fe7c7..176f257e2ba3 100644 --- a/SU2_CFD/include/variables/CAdjTurbVariable.hpp +++ b/SU2_CFD/include/variables/CAdjTurbVariable.hpp @@ -2,7 +2,7 @@ * \file CAdjTurbVariable.hpp * \brief Main class for defining the variables of the adjoint turbulence model. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CBaselineVariable.hpp b/SU2_CFD/include/variables/CBaselineVariable.hpp index 8805039f41c2..bbea7dd03355 100644 --- a/SU2_CFD/include/variables/CBaselineVariable.hpp +++ b/SU2_CFD/include/variables/CBaselineVariable.hpp @@ -2,7 +2,7 @@ * \file CBaselineVariable.hpp * \brief Main class for defining the variables of a baseline solution from a restart file (for output). * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CDiscAdjFEABoundVariable.hpp b/SU2_CFD/include/variables/CDiscAdjFEABoundVariable.hpp index 13efaf903a09..86f3f4d1ba41 100644 --- a/SU2_CFD/include/variables/CDiscAdjFEABoundVariable.hpp +++ b/SU2_CFD/include/variables/CDiscAdjFEABoundVariable.hpp @@ -2,7 +2,7 @@ * \file CDiscAdjFEABoundVariable.hpp * \brief Main class for defining the variables of the adjoint FEA solver at the boundary. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -35,7 +35,7 @@ * \ingroup DiscAdj * \brief Main class for defining the variables on the FEA boundaries for adjoint applications. * \author R. Sanchez. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CDiscAdjFEABoundVariable final : public CDiscAdjVariable { private: diff --git a/SU2_CFD/include/variables/CDiscAdjMeshBoundVariable.hpp b/SU2_CFD/include/variables/CDiscAdjMeshBoundVariable.hpp index 9c1d60a2440a..5cd2946cfbf0 100644 --- a/SU2_CFD/include/variables/CDiscAdjMeshBoundVariable.hpp +++ b/SU2_CFD/include/variables/CDiscAdjMeshBoundVariable.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class * to define the adjoint variables of the mesh movement. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CDiscAdjVariable.hpp b/SU2_CFD/include/variables/CDiscAdjVariable.hpp index 573de4921f6f..1de6647dc4d4 100644 --- a/SU2_CFD/include/variables/CDiscAdjVariable.hpp +++ b/SU2_CFD/include/variables/CDiscAdjVariable.hpp @@ -2,7 +2,7 @@ * \file CDiscAdjVariable.hpp * \brief Main class for defining the variables of the adjoint solver. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CEulerVariable.hpp b/SU2_CFD/include/variables/CEulerVariable.hpp index e0fbcc5ce7b4..2be547498044 100644 --- a/SU2_CFD/include/variables/CEulerVariable.hpp +++ b/SU2_CFD/include/variables/CEulerVariable.hpp @@ -2,7 +2,7 @@ * \file CEulerVariable.hpp * \brief Class for defining the variables of the compressible Euler solver. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CFEABoundVariable.hpp b/SU2_CFD/include/variables/CFEABoundVariable.hpp index d599ffe96860..7551dcc2204a 100644 --- a/SU2_CFD/include/variables/CFEABoundVariable.hpp +++ b/SU2_CFD/include/variables/CFEABoundVariable.hpp @@ -2,7 +2,7 @@ * \file CFEABoundVariable.hpp * \brief Class for defining the variables on the FEA boundaries for FSI applications. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -37,7 +37,7 @@ * A map is constructed so that variables can be referenced by iPoint instead of iVertex. * \ingroup Structural Finite Element Analysis Variables * \author R. Sanchez. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEABoundVariable final : public CFEAVariable { protected: diff --git a/SU2_CFD/include/variables/CFEAVariable.hpp b/SU2_CFD/include/variables/CFEAVariable.hpp index c04c4c90285b..3838a0861b5a 100644 --- a/SU2_CFD/include/variables/CFEAVariable.hpp +++ b/SU2_CFD/include/variables/CFEAVariable.hpp @@ -2,7 +2,7 @@ * \file CFEAVariable.hpp * \brief Class for defining the variables of the FEM structural problem. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -34,7 +34,7 @@ * \brief Class for defining the variables of the FEM structural problem. * \ingroup Structural Finite Element Analysis Variables * \author F. Palacios, R. Sanchez. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CFEAVariable : public CVariable { protected: diff --git a/SU2_CFD/include/variables/CFlowVariable.hpp b/SU2_CFD/include/variables/CFlowVariable.hpp index ab2a8499492f..61e793cb42c1 100644 --- a/SU2_CFD/include/variables/CFlowVariable.hpp +++ b/SU2_CFD/include/variables/CFlowVariable.hpp @@ -1,7 +1,7 @@ /*! * \file CFlowVariable.hpp * \brief Class for defining the common variables of flow solvers. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CHeatVariable.hpp b/SU2_CFD/include/variables/CHeatVariable.hpp index 5fa7c2fc58f5..05a5e71110a5 100644 --- a/SU2_CFD/include/variables/CHeatVariable.hpp +++ b/SU2_CFD/include/variables/CHeatVariable.hpp @@ -2,7 +2,7 @@ * \file CHeatVariable.hpp * \brief Class for defining the variables of the finite-volume heat equation solver. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -33,7 +33,7 @@ * \class CHeatVariable * \brief Class for defining the variables of the finite-volume heat equation solver. * \author O. Burghardt - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" */ class CHeatVariable final : public CScalarVariable { public: diff --git a/SU2_CFD/include/variables/CIncEulerVariable.hpp b/SU2_CFD/include/variables/CIncEulerVariable.hpp index 9cc13f799863..46be6d3dc2b6 100644 --- a/SU2_CFD/include/variables/CIncEulerVariable.hpp +++ b/SU2_CFD/include/variables/CIncEulerVariable.hpp @@ -2,7 +2,7 @@ * \file CIncEulerVariable.hpp * \brief Class for defining the variables of the incompressible Euler solver. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CIncNSVariable.hpp b/SU2_CFD/include/variables/CIncNSVariable.hpp index 5aa1ebaa75e9..bcc5e56be907 100644 --- a/SU2_CFD/include/variables/CIncNSVariable.hpp +++ b/SU2_CFD/include/variables/CIncNSVariable.hpp @@ -3,7 +3,7 @@ * \brief Class for defining the variables of the incompressible Navier-Stokes solver. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CMeshBoundVariable.hpp b/SU2_CFD/include/variables/CMeshBoundVariable.hpp index d60a5366373e..752ffd6b95f0 100644 --- a/SU2_CFD/include/variables/CMeshBoundVariable.hpp +++ b/SU2_CFD/include/variables/CMeshBoundVariable.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class * to define the variables of the mesh movement at the moving boundaries. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CMeshElement.hpp b/SU2_CFD/include/variables/CMeshElement.hpp index 0e044cdc0325..940fe3cf6bc0 100644 --- a/SU2_CFD/include/variables/CMeshElement.hpp +++ b/SU2_CFD/include/variables/CMeshElement.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class * to define the variables of the mesh movement. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CMeshVariable.hpp b/SU2_CFD/include/variables/CMeshVariable.hpp index 473cfc8c8a54..69eace0a75f6 100644 --- a/SU2_CFD/include/variables/CMeshVariable.hpp +++ b/SU2_CFD/include/variables/CMeshVariable.hpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class * to define the variables of the mesh movement. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CNEMOEulerVariable.hpp b/SU2_CFD/include/variables/CNEMOEulerVariable.hpp index 1cb277be3a18..408dcc7c144e 100644 --- a/SU2_CFD/include/variables/CNEMOEulerVariable.hpp +++ b/SU2_CFD/include/variables/CNEMOEulerVariable.hpp @@ -2,7 +2,7 @@ * \file CNEMOEulerVariable.hpp * \brief Class for defining the variables of the compressible NEMO Euler solver. * \author C. Garbacz, W. Maier, S.R. Copeland - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CNEMONSVariable.hpp b/SU2_CFD/include/variables/CNEMONSVariable.hpp index 4585c1c6b9b6..d58903849d7b 100644 --- a/SU2_CFD/include/variables/CNEMONSVariable.hpp +++ b/SU2_CFD/include/variables/CNEMONSVariable.hpp @@ -2,7 +2,7 @@ * \file CNEMONSVariable.hpp * \brief Class for defining the variables of the compressible NEMO Navier-Stokes solver. * \author C. Garbacz, W. Maier, S.R. Copeland. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CNSVariable.hpp b/SU2_CFD/include/variables/CNSVariable.hpp index 9c3ab8dabf50..3e6fd9b3ac20 100644 --- a/SU2_CFD/include/variables/CNSVariable.hpp +++ b/SU2_CFD/include/variables/CNSVariable.hpp @@ -2,7 +2,7 @@ * \file CNSVariable.hpp * \brief Class for defining the variables of the compressible Navier-Stokes solver. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CPrimitiveIndices.hpp b/SU2_CFD/include/variables/CPrimitiveIndices.hpp index a1951ae02a55..e7e4c0eb9c93 100644 --- a/SU2_CFD/include/variables/CPrimitiveIndices.hpp +++ b/SU2_CFD/include/variables/CPrimitiveIndices.hpp @@ -1,7 +1,7 @@ /*! * \file CPrimitiveIndices.hpp * \brief Abstract representation of flow primitive variable indices that tries to be efficient. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CRadP1Variable.hpp b/SU2_CFD/include/variables/CRadP1Variable.hpp index 8fcc0b954d86..53bb779426b7 100644 --- a/SU2_CFD/include/variables/CRadP1Variable.hpp +++ b/SU2_CFD/include/variables/CRadP1Variable.hpp @@ -2,7 +2,7 @@ * \file CRadP1Variable.hpp * \brief Class for defining the variables of the P1 radiation model. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CRadVariable.hpp b/SU2_CFD/include/variables/CRadVariable.hpp index 077acf0992e5..82488e35b301 100644 --- a/SU2_CFD/include/variables/CRadVariable.hpp +++ b/SU2_CFD/include/variables/CRadVariable.hpp @@ -2,7 +2,7 @@ * \file CRadVariable.hpp * \brief Class for defining the variables of the radiation solver. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CScalarVariable.hpp b/SU2_CFD/include/variables/CScalarVariable.hpp index c2ae70932dd9..9c9540673ad8 100644 --- a/SU2_CFD/include/variables/CScalarVariable.hpp +++ b/SU2_CFD/include/variables/CScalarVariable.hpp @@ -2,7 +2,7 @@ * \file CScalarVariable.hpp * \brief Base class for defining the shared variables of scalar solvers. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CSobolevSmoothingVariable.hpp b/SU2_CFD/include/variables/CSobolevSmoothingVariable.hpp index ffe85f5b8f19..72565bfed8b9 100644 --- a/SU2_CFD/include/variables/CSobolevSmoothingVariable.hpp +++ b/SU2_CFD/include/variables/CSobolevSmoothingVariable.hpp @@ -2,7 +2,7 @@ * \file CSobolevSmoothingVariable.hpp * \brief Class for defining the variables of the gradient smoothing. * \author T.Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CSpeciesFlameletVariable.hpp b/SU2_CFD/include/variables/CSpeciesFlameletVariable.hpp index 8ef9d1b9dbe3..63aae6709b1e 100644 --- a/SU2_CFD/include/variables/CSpeciesFlameletVariable.hpp +++ b/SU2_CFD/include/variables/CSpeciesFlameletVariable.hpp @@ -2,7 +2,7 @@ * \file CSpeciesFlameletVariable.hpp * \brief Base class for defining the variables of the flamelet transport model. * \author D. Mayer, T. Economon, N. Beishuizen - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CSpeciesVariable.hpp b/SU2_CFD/include/variables/CSpeciesVariable.hpp index 848235012318..76180d0c57bb 100644 --- a/SU2_CFD/include/variables/CSpeciesVariable.hpp +++ b/SU2_CFD/include/variables/CSpeciesVariable.hpp @@ -2,7 +2,7 @@ * \file CSpeciesVariable.hpp * \brief Base class for defining the variables of the species transport model. * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CTransLMVariable.hpp b/SU2_CFD/include/variables/CTransLMVariable.hpp index 0e2cc2afd306..f2877c1cb155 100644 --- a/SU2_CFD/include/variables/CTransLMVariable.hpp +++ b/SU2_CFD/include/variables/CTransLMVariable.hpp @@ -2,7 +2,7 @@ * \file CTransLMVariable.hpp * \brief Declaration of the variables of the transition model. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CTurbSAVariable.hpp b/SU2_CFD/include/variables/CTurbSAVariable.hpp index 20c073d41d8e..de919c51cb23 100644 --- a/SU2_CFD/include/variables/CTurbSAVariable.hpp +++ b/SU2_CFD/include/variables/CTurbSAVariable.hpp @@ -2,7 +2,7 @@ * \file CTurbSAVariable.hpp * \brief Declaration of the variables of the SA turbulence model. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CTurbSSTVariable.hpp b/SU2_CFD/include/variables/CTurbSSTVariable.hpp index 39cca9425617..1fc1dbee89fe 100644 --- a/SU2_CFD/include/variables/CTurbSSTVariable.hpp +++ b/SU2_CFD/include/variables/CTurbSSTVariable.hpp @@ -2,7 +2,7 @@ * \file CTurbSSTVariable.hpp * \brief Declaration of the variables of the SST turbulence model. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CTurbVariable.hpp b/SU2_CFD/include/variables/CTurbVariable.hpp index 47424ffab8ce..f10ebe5f1a1e 100644 --- a/SU2_CFD/include/variables/CTurbVariable.hpp +++ b/SU2_CFD/include/variables/CTurbVariable.hpp @@ -2,7 +2,7 @@ * \file CTurbVariable.hpp * \brief Base class for defining the variables of the turbulence model. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/include/variables/CVariable.hpp b/SU2_CFD/include/variables/CVariable.hpp index 82cf99645d11..528adc139dbb 100644 --- a/SU2_CFD/include/variables/CVariable.hpp +++ b/SU2_CFD/include/variables/CVariable.hpp @@ -4,7 +4,7 @@ variables, function definitions in file CVariable.cpp. All variables are children of at least this class. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/CMarkerProfileReaderFVM.cpp b/SU2_CFD/src/CMarkerProfileReaderFVM.cpp index 91b4353bd703..0ab5a61f6a78 100644 --- a/SU2_CFD/src/CMarkerProfileReaderFVM.cpp +++ b/SU2_CFD/src/CMarkerProfileReaderFVM.cpp @@ -2,7 +2,7 @@ * \file CMarkerProfileReaderFVM.cpp * \brief Class that handles the reading of marker profile files. * \author T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/SU2_CFD.cpp b/SU2_CFD/src/SU2_CFD.cpp index f37122fbfb8a..ca6dd3afaa25 100644 --- a/SU2_CFD/src/SU2_CFD.cpp +++ b/SU2_CFD/src/SU2_CFD.cpp @@ -2,7 +2,7 @@ * \file SU2_CFD.cpp * \brief Main file of the SU2 Computational Fluid Dynamics code * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -44,7 +44,7 @@ int main(int argc, char *argv[]) { /*--- Command line parsing ---*/ - CLI::App app{"SU2 v8.4.0 \"Harrier\", The Open-Source CFD Code"}; + CLI::App app{"SU2 v8.5.0 \"Harrier\", The Open-Source CFD Code"}; app.add_flag("-d,--dryrun", dry_run, "Enable dry run mode.\n" "Only execute preprocessing steps using a dummy geometry."); app.add_option("-t,--threads", num_threads, "Number of OpenMP threads per MPI rank."); diff --git a/SU2_CFD/src/definition_structure.cpp b/SU2_CFD/src/definition_structure.cpp index 187a7b0eb744..1cde415eb3e8 100644 --- a/SU2_CFD/src/definition_structure.cpp +++ b/SU2_CFD/src/definition_structure.cpp @@ -2,7 +2,7 @@ * \file definition_structure.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp b/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp index f192d8ef9f98..61673bdad1b3 100644 --- a/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CDiscAdjMultizoneDriver.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjMultizoneDriver.cpp * \brief The main subroutines for driving adjoint multi-zone problems * \author O. Burghardt, P. Gomes, T. Albring, R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp b/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp index d22d842e0f53..ce6f7d93b10f 100644 --- a/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp +++ b/SU2_CFD/src/drivers/CDiscAdjSinglezoneDriver.cpp @@ -2,7 +2,7 @@ * \file driver_adjoint_singlezone.cpp * \brief The main subroutines for driving adjoint single-zone problems. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index 03683b6a4cba..5bdeb9ce1af7 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -2,7 +2,7 @@ * \file CDriver.cpp * \brief The main subroutines for driving single or multi-zone problems. * \author T. Economon, H. Kline, R. Sanchez, F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/drivers/CDriverBase.cpp b/SU2_CFD/src/drivers/CDriverBase.cpp index 9691d4feedad..1accc051b53c 100644 --- a/SU2_CFD/src/drivers/CDriverBase.cpp +++ b/SU2_CFD/src/drivers/CDriverBase.cpp @@ -2,7 +2,7 @@ * \file CDriverBase.hpp * \brief Base class template for all drivers. * \author H. Patel, A. Gastaldi - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/drivers/CDummyDriver.cpp b/SU2_CFD/src/drivers/CDummyDriver.cpp index dd39bfd44516..8023b63cdfaf 100644 --- a/SU2_CFD/src/drivers/CDummyDriver.cpp +++ b/SU2_CFD/src/drivers/CDummyDriver.cpp @@ -2,7 +2,7 @@ * \file CDummyDriver.cpp * \brief Dummy driver class for running the preprocessing without geometry preprocessing. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/drivers/CMultizoneDriver.cpp b/SU2_CFD/src/drivers/CMultizoneDriver.cpp index 69aa314e88ae..d6f68a6682f6 100644 --- a/SU2_CFD/src/drivers/CMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CMultizoneDriver.cpp @@ -2,7 +2,7 @@ * \file driver_structure.cpp * \brief The main subroutines for driving multi-zone problems. * \author R. Sanchez, O. Burghardt - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp index 07a65738e07b..fa6e5ac30060 100644 --- a/SU2_CFD/src/drivers/CSinglezoneDriver.cpp +++ b/SU2_CFD/src/drivers/CSinglezoneDriver.cpp @@ -2,7 +2,7 @@ * \file driver_direct_singlezone.cpp * \brief The main subroutines for driving single-zone problems. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CCoolProp.cpp b/SU2_CFD/src/fluid/CCoolProp.cpp index d7ce191bf5d6..cc1bafa779e8 100644 --- a/SU2_CFD/src/fluid/CCoolProp.cpp +++ b/SU2_CFD/src/fluid/CCoolProp.cpp @@ -2,7 +2,7 @@ * \file CCoolProp.cpp * \brief Source of the fluid model from CoolProp. * \author P. Yan, G. Gori, A. Guardone - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CDataDrivenFluid.cpp b/SU2_CFD/src/fluid/CDataDrivenFluid.cpp index 8b4f2c20859f..1de3c2ef1fc7 100644 --- a/SU2_CFD/src/fluid/CDataDrivenFluid.cpp +++ b/SU2_CFD/src/fluid/CDataDrivenFluid.cpp @@ -2,7 +2,7 @@ * \file CDataDrivenFluid.cpp * \brief Source of the data-driven fluid model class * \author E.C.Bunschoten M.Mayer A.Capiello - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CFluidFlamelet.cpp b/SU2_CFD/src/fluid/CFluidFlamelet.cpp index d84a4b83a745..f95a844a0f71 100644 --- a/SU2_CFD/src/fluid/CFluidFlamelet.cpp +++ b/SU2_CFD/src/fluid/CFluidFlamelet.cpp @@ -2,7 +2,7 @@ * \file CfluidFlamelet.cpp * \brief Main subroutines of CFluidFlamelet class * \author D. Mayer, T. Economon, N. Beishuizen, E. Bunschoten - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CFluidModel.cpp b/SU2_CFD/src/fluid/CFluidModel.cpp index 992a9adb491a..a5139f3e557b 100644 --- a/SU2_CFD/src/fluid/CFluidModel.cpp +++ b/SU2_CFD/src/fluid/CFluidModel.cpp @@ -2,7 +2,7 @@ * \file CFluidModel.cpp * \brief Source of the fluid model base class containing thermo-physical subroutines. * \author S.Vitale, M.Pini, G.Gori, A.Guardone, P.Colonna, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CFluidScalar.cpp b/SU2_CFD/src/fluid/CFluidScalar.cpp index 2335f6e0eebe..ea38cd0d2054 100644 --- a/SU2_CFD/src/fluid/CFluidScalar.cpp +++ b/SU2_CFD/src/fluid/CFluidScalar.cpp @@ -2,7 +2,7 @@ * \file CFluidScalar.cpp * \brief Defines the multicomponent incompressible Ideal Gas model for mixtures. * \author T. Economon, Mark Heimgartner, Cristopher Morales Ubal - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CIdealGas.cpp b/SU2_CFD/src/fluid/CIdealGas.cpp index 4ec9e6c8ff90..c068f7e89700 100644 --- a/SU2_CFD/src/fluid/CIdealGas.cpp +++ b/SU2_CFD/src/fluid/CIdealGas.cpp @@ -2,7 +2,7 @@ * \file CIdealGas.cpp * \brief Source of the ideal gas model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CMutationTCLib.cpp b/SU2_CFD/src/fluid/CMutationTCLib.cpp index f4d31a438621..44a751a8f3c9 100644 --- a/SU2_CFD/src/fluid/CMutationTCLib.cpp +++ b/SU2_CFD/src/fluid/CMutationTCLib.cpp @@ -2,7 +2,7 @@ * \file CMutationTCLib.cpp * \brief Source of the Mutation++ 2T nonequilibrium gas model. * \author C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CNEMOGas.cpp b/SU2_CFD/src/fluid/CNEMOGas.cpp index ead3d706b936..a436d46fa969 100644 --- a/SU2_CFD/src/fluid/CNEMOGas.cpp +++ b/SU2_CFD/src/fluid/CNEMOGas.cpp @@ -2,7 +2,7 @@ * \file CNEMOGas.cpp * \brief Source of the nonequilibrium gas model. * \author C. Garbacz, W. Maier, S. R. Copeland - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CPengRobinson.cpp b/SU2_CFD/src/fluid/CPengRobinson.cpp index ce1681849768..639c8b2e8c71 100644 --- a/SU2_CFD/src/fluid/CPengRobinson.cpp +++ b/SU2_CFD/src/fluid/CPengRobinson.cpp @@ -2,7 +2,7 @@ * \file CPengRobinson.cpp * \brief Source of the Peng-Robinson model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CSU2TCLib.cpp b/SU2_CFD/src/fluid/CSU2TCLib.cpp index 3e24ef718257..4f81220fac04 100644 --- a/SU2_CFD/src/fluid/CSU2TCLib.cpp +++ b/SU2_CFD/src/fluid/CSU2TCLib.cpp @@ -2,7 +2,7 @@ * \file CSU2TCLib.cpp * \brief Source of user defined 2T nonequilibrium gas model. * \author C. Garbacz, W. Maier, S. R. Copeland, J. Needels - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/fluid/CVanDerWaalsGas.cpp b/SU2_CFD/src/fluid/CVanDerWaalsGas.cpp index 60400bbbf983..d13d286fcfca 100644 --- a/SU2_CFD/src/fluid/CVanDerWaalsGas.cpp +++ b/SU2_CFD/src/fluid/CVanDerWaalsGas.cpp @@ -2,7 +2,7 @@ * \file CVanDerWaalsGas.cpp * \brief Source of the Polytropic Van der Waals model. * \author S. Vitale, G. Gori, M. Pini, A. Guardone, P. Colonna - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/integration/CFEM_DG_Integration.cpp b/SU2_CFD/src/integration/CFEM_DG_Integration.cpp index bee2fbbf52d9..28b0cb57697d 100644 --- a/SU2_CFD/src/integration/CFEM_DG_Integration.cpp +++ b/SU2_CFD/src/integration/CFEM_DG_Integration.cpp @@ -2,7 +2,7 @@ * \file CFEM_DG_Integration.cpp * \brief Definition of time and space integration for the DG solver. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/integration/CIntegration.cpp b/SU2_CFD/src/integration/CIntegration.cpp index 436d81a3d810..21024a317945 100644 --- a/SU2_CFD/src/integration/CIntegration.cpp +++ b/SU2_CFD/src/integration/CIntegration.cpp @@ -2,7 +2,7 @@ * \file CIntegration.cpp * \brief Implementation of the base class for space and time integration. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/integration/CIntegrationFactory.cpp b/SU2_CFD/src/integration/CIntegrationFactory.cpp index 8df00fb873d4..8df42b90bf02 100644 --- a/SU2_CFD/src/integration/CIntegrationFactory.cpp +++ b/SU2_CFD/src/integration/CIntegrationFactory.cpp @@ -2,7 +2,7 @@ * \file CIntegrationFactory.cpp * \brief Main subroutines for CIntegrationFactory . * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/integration/CMultiGridIntegration.cpp b/SU2_CFD/src/integration/CMultiGridIntegration.cpp index 35eb24e3aa7b..cf1bcd3b1ca5 100644 --- a/SU2_CFD/src/integration/CMultiGridIntegration.cpp +++ b/SU2_CFD/src/integration/CMultiGridIntegration.cpp @@ -2,7 +2,7 @@ * \file CMultiGridIntegration.cpp * \brief Implementation of the multigrid integration class. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/integration/CNewtonIntegration.cpp b/SU2_CFD/src/integration/CNewtonIntegration.cpp index 50bd1d3db2b6..feb07924cafb 100644 --- a/SU2_CFD/src/integration/CNewtonIntegration.cpp +++ b/SU2_CFD/src/integration/CNewtonIntegration.cpp @@ -2,7 +2,7 @@ * \file CNewtonIntegration.cpp * \brief Newton-Krylov integration. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/integration/CSingleGridIntegration.cpp b/SU2_CFD/src/integration/CSingleGridIntegration.cpp index 8dd21b0d682d..fab97842048b 100644 --- a/SU2_CFD/src/integration/CSingleGridIntegration.cpp +++ b/SU2_CFD/src/integration/CSingleGridIntegration.cpp @@ -2,7 +2,7 @@ * \file CSingleGridIntegration.cpp * \brief Single (fine) grid integration class implementation. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/integration/CStructuralIntegration.cpp b/SU2_CFD/src/integration/CStructuralIntegration.cpp index 9ed44fc8501f..118c150af5cb 100644 --- a/SU2_CFD/src/integration/CStructuralIntegration.cpp +++ b/SU2_CFD/src/integration/CStructuralIntegration.cpp @@ -2,7 +2,7 @@ * \file CStructuralIntegration.cpp * \brief Space and time integration for structural problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/interfaces/CInterface.cpp b/SU2_CFD/src/interfaces/CInterface.cpp index 299b90a90907..293141079c49 100644 --- a/SU2_CFD/src/interfaces/CInterface.cpp +++ b/SU2_CFD/src/interfaces/CInterface.cpp @@ -2,7 +2,7 @@ * \file CInterface.cpp * \brief Main subroutines for MPI transfer of information between zones * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/interfaces/cfd/CConservativeVarsInterface.cpp b/SU2_CFD/src/interfaces/cfd/CConservativeVarsInterface.cpp index fe8abc801459..f9c7a0c10cce 100644 --- a/SU2_CFD/src/interfaces/cfd/CConservativeVarsInterface.cpp +++ b/SU2_CFD/src/interfaces/cfd/CConservativeVarsInterface.cpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer conservative variables * from a generic zone into another one. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/interfaces/cfd/CMixingPlaneInterface.cpp b/SU2_CFD/src/interfaces/cfd/CMixingPlaneInterface.cpp index b3eeda02ca75..49755cf285e2 100644 --- a/SU2_CFD/src/interfaces/cfd/CMixingPlaneInterface.cpp +++ b/SU2_CFD/src/interfaces/cfd/CMixingPlaneInterface.cpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer average variables * needed for MixingPlane computation from a generic zone into another one. * \author S. Vitale - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/interfaces/cfd/CSlidingInterface.cpp b/SU2_CFD/src/interfaces/cfd/CSlidingInterface.cpp index 064263ab2827..a11725fdcfd2 100644 --- a/SU2_CFD/src/interfaces/cfd/CSlidingInterface.cpp +++ b/SU2_CFD/src/interfaces/cfd/CSlidingInterface.cpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer conservative variables * from a generic zone into another * \author G. Gori Politecnico di Milano - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp b/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp index 1b9969b3965f..3b5309131a01 100644 --- a/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp +++ b/SU2_CFD/src/interfaces/cht/CConjugateHeatInterface.cpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer temperature and heatflux * density for conjugate heat interfaces between structure and fluid zones. * \author O. Burghardt - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/interfaces/fsi/CDiscAdjFlowTractionInterface.cpp b/SU2_CFD/src/interfaces/fsi/CDiscAdjFlowTractionInterface.cpp index d4b8ea76b0f5..053ad71cc30b 100644 --- a/SU2_CFD/src/interfaces/fsi/CDiscAdjFlowTractionInterface.cpp +++ b/SU2_CFD/src/interfaces/fsi/CDiscAdjFlowTractionInterface.cpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer flow tractions * from a fluid zone into a structural zone in a discrete adjoint simulation. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/interfaces/fsi/CDisplacementsInterface.cpp b/SU2_CFD/src/interfaces/fsi/CDisplacementsInterface.cpp index 0f4e17e9de20..2ccaec971a00 100644 --- a/SU2_CFD/src/interfaces/fsi/CDisplacementsInterface.cpp +++ b/SU2_CFD/src/interfaces/fsi/CDisplacementsInterface.cpp @@ -2,7 +2,7 @@ * \file CDisplacementsInterface.cpp * \brief Main subroutines for transferring boundary displacements. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/interfaces/fsi/CFlowTractionInterface.cpp b/SU2_CFD/src/interfaces/fsi/CFlowTractionInterface.cpp index 2ffb72b0b56d..e42aabe73358 100644 --- a/SU2_CFD/src/interfaces/fsi/CFlowTractionInterface.cpp +++ b/SU2_CFD/src/interfaces/fsi/CFlowTractionInterface.cpp @@ -3,7 +3,7 @@ * \brief Declaration and inlines of the class to transfer flow tractions * from a fluid zone into a structural zone. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CAdjFluidIteration.cpp b/SU2_CFD/src/iteration/CAdjFluidIteration.cpp index 735330bd5953..7a5b8fb8d7e1 100644 --- a/SU2_CFD/src/iteration/CAdjFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CAdjFluidIteration.cpp @@ -2,7 +2,7 @@ * \file CAdjFluidIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp index 395ea6bbae29..d944874aad9a 100644 --- a/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjFEAIteration.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjFEAIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp index fa3b5242713d..2482c0b4a476 100644 --- a/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjFluidIteration.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjFluidIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp b/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp index cbf7d9718d83..c87e1f287385 100644 --- a/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp +++ b/SU2_CFD/src/iteration/CDiscAdjHeatIteration.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjHeatIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CFEAIteration.cpp b/SU2_CFD/src/iteration/CFEAIteration.cpp index 73ac3842be99..e3c382dcd169 100644 --- a/SU2_CFD/src/iteration/CFEAIteration.cpp +++ b/SU2_CFD/src/iteration/CFEAIteration.cpp @@ -2,7 +2,7 @@ * \file CFEAIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CFEMFluidIteration.cpp b/SU2_CFD/src/iteration/CFEMFluidIteration.cpp index 711d86a12151..ee55e0592b71 100644 --- a/SU2_CFD/src/iteration/CFEMFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFEMFluidIteration.cpp @@ -2,7 +2,7 @@ * \file CFEMFluidIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CFluidIteration.cpp b/SU2_CFD/src/iteration/CFluidIteration.cpp index 91cb81d55041..35e2905a7c5e 100644 --- a/SU2_CFD/src/iteration/CFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFluidIteration.cpp @@ -2,7 +2,7 @@ * \file CFluidIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CHeatIteration.cpp b/SU2_CFD/src/iteration/CHeatIteration.cpp index df2b30b6cbef..809fe923d03d 100644 --- a/SU2_CFD/src/iteration/CHeatIteration.cpp +++ b/SU2_CFD/src/iteration/CHeatIteration.cpp @@ -2,7 +2,7 @@ * \file CHeatIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CIteration.cpp b/SU2_CFD/src/iteration/CIteration.cpp index bbb35c27a7be..eab360cb34be 100644 --- a/SU2_CFD/src/iteration/CIteration.cpp +++ b/SU2_CFD/src/iteration/CIteration.cpp @@ -2,7 +2,7 @@ * \file iteration_structure.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CIterationFactory.cpp b/SU2_CFD/src/iteration/CIterationFactory.cpp index 827f4937af94..761ceca98f81 100644 --- a/SU2_CFD/src/iteration/CIterationFactory.cpp +++ b/SU2_CFD/src/iteration/CIterationFactory.cpp @@ -2,7 +2,7 @@ * \file CAdjFluidIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/iteration/CTurboIteration.cpp b/SU2_CFD/src/iteration/CTurboIteration.cpp index caca932b2c73..482e4c053957 100644 --- a/SU2_CFD/src/iteration/CTurboIteration.cpp +++ b/SU2_CFD/src/iteration/CTurboIteration.cpp @@ -2,7 +2,7 @@ * \file CTurboIteration.cpp * \brief Main subroutines used by SU2_CFD * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/limiters/CLimiterDetails.cpp b/SU2_CFD/src/limiters/CLimiterDetails.cpp index e4cdf7f165ee..59f4803e5248 100644 --- a/SU2_CFD/src/limiters/CLimiterDetails.cpp +++ b/SU2_CFD/src/limiters/CLimiterDetails.cpp @@ -3,7 +3,7 @@ * \brief A class template that allows defining limiters via * specialization of particular details. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/CGradSmoothing.cpp b/SU2_CFD/src/numerics/CGradSmoothing.cpp index 4547fdee4d16..82085728dee5 100644 --- a/SU2_CFD/src/numerics/CGradSmoothing.cpp +++ b/SU2_CFD/src/numerics/CGradSmoothing.cpp @@ -2,7 +2,7 @@ * \file CGradSmoothing.cpp * \brief Numerics for gradient smoothing problems. * \author T.Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/CNumerics.cpp b/SU2_CFD/src/numerics/CNumerics.cpp index c1efac25a19e..bd8728e0e83f 100644 --- a/SU2_CFD/src/numerics/CNumerics.cpp +++ b/SU2_CFD/src/numerics/CNumerics.cpp @@ -4,7 +4,7 @@ * Contains methods for common tasks, e.g. compute flux * Jacobians. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp b/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp index 66b28b1d5f11..e7fc0f95f80c 100644 --- a/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp +++ b/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp @@ -4,7 +4,7 @@ * Contains methods for common tasks, e.g. compute flux * Jacobians. * \author S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/NEMO/NEMO_diffusion.cpp b/SU2_CFD/src/numerics/NEMO/NEMO_diffusion.cpp index afa4f3dc2a81..2553fa2915d3 100644 --- a/SU2_CFD/src/numerics/NEMO/NEMO_diffusion.cpp +++ b/SU2_CFD/src/numerics/NEMO/NEMO_diffusion.cpp @@ -3,7 +3,7 @@ * \brief Implementation of numerics classes for discretization * of viscous fluxes in fluid flow NEMO problems. * \author S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/NEMO/NEMO_sources.cpp b/SU2_CFD/src/numerics/NEMO/NEMO_sources.cpp index f43fc6b365c6..fa2c28f0782d 100644 --- a/SU2_CFD/src/numerics/NEMO/NEMO_sources.cpp +++ b/SU2_CFD/src/numerics/NEMO/NEMO_sources.cpp @@ -3,7 +3,7 @@ * \brief Implementation of numerics classes for integration * of source terms in fluid flow NEMO problems. * \author C. Garbacz, W. Maier, S. Copeland. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/NEMO/convection/ausm_slau.cpp b/SU2_CFD/src/numerics/NEMO/convection/ausm_slau.cpp index 55483a02dd1f..21573a3a682d 100644 --- a/SU2_CFD/src/numerics/NEMO/convection/ausm_slau.cpp +++ b/SU2_CFD/src/numerics/NEMO/convection/ausm_slau.cpp @@ -2,7 +2,7 @@ * \file ausm_slau.cpp * \brief Implementations of the AUSM-family of schemes in NEMO. * \author F. Palacios, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/NEMO/convection/lax.cpp b/SU2_CFD/src/numerics/NEMO/convection/lax.cpp index c7cbd0ab9723..daabac7a7350 100644 --- a/SU2_CFD/src/numerics/NEMO/convection/lax.cpp +++ b/SU2_CFD/src/numerics/NEMO/convection/lax.cpp @@ -2,7 +2,7 @@ * \file lax.cpp * \brief Implementations of Lax centered scheme. * \author F. Palacios, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/NEMO/convection/msw.cpp b/SU2_CFD/src/numerics/NEMO/convection/msw.cpp index 638ba6947803..e5d0d955db4f 100644 --- a/SU2_CFD/src/numerics/NEMO/convection/msw.cpp +++ b/SU2_CFD/src/numerics/NEMO/convection/msw.cpp @@ -2,7 +2,7 @@ * \file msw.cpp * \brief Implementations of the modified Steger-Warming scheme. * \author ADL Stanford, S.R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/NEMO/convection/roe.cpp b/SU2_CFD/src/numerics/NEMO/convection/roe.cpp index 3ee66146ede3..9b2d179dcaae 100644 --- a/SU2_CFD/src/numerics/NEMO/convection/roe.cpp +++ b/SU2_CFD/src/numerics/NEMO/convection/roe.cpp @@ -2,7 +2,7 @@ * \file roe.cpp * \brief Implementations of Roe-type schemes in NEMO. * \author S. R. Copeland, W. Maier, C. Garbacz - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp b/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp index faee679b5cb2..acbfde7c5730 100644 --- a/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp +++ b/SU2_CFD/src/numerics/continuous_adjoint/adj_convection.cpp @@ -2,7 +2,7 @@ * \file adj_convection.cpp * \brief Implementation of adjoint convection numerics classes. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/continuous_adjoint/adj_diffusion.cpp b/SU2_CFD/src/numerics/continuous_adjoint/adj_diffusion.cpp index d5e541275a2b..3768f8764579 100644 --- a/SU2_CFD/src/numerics/continuous_adjoint/adj_diffusion.cpp +++ b/SU2_CFD/src/numerics/continuous_adjoint/adj_diffusion.cpp @@ -2,7 +2,7 @@ * \file adj_diffusion.cpp * \brief Implementation of adjoint diffusion numerics classes. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/continuous_adjoint/adj_sources.cpp b/SU2_CFD/src/numerics/continuous_adjoint/adj_sources.cpp index b75bddfd11c4..64a3184e9b5e 100644 --- a/SU2_CFD/src/numerics/continuous_adjoint/adj_sources.cpp +++ b/SU2_CFD/src/numerics/continuous_adjoint/adj_sources.cpp @@ -2,7 +2,7 @@ * \file adj_sources.cpp * \brief Implementation of adjoint source numerics classes. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp b/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp index 51f21633ff48..32938c192cd5 100644 --- a/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp +++ b/SU2_CFD/src/numerics/elasticity/CFEAElasticity.cpp @@ -2,7 +2,7 @@ * \file CFEAElasticity.cpp * \brief Base class for all elasticity problems. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp b/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp index 1e0bf29e0345..e1711f305c94 100644 --- a/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp +++ b/SU2_CFD/src/numerics/elasticity/CFEALinearElasticity.cpp @@ -2,7 +2,7 @@ * \file CFEALinearElasticity.cpp * \brief Classes for linear elasticity problems. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp b/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp index 783a4522a10b..56b3fa0feadc 100644 --- a/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp +++ b/SU2_CFD/src/numerics/elasticity/CFEANonlinearElasticity.cpp @@ -3,7 +3,7 @@ * \brief This file contains the routines for setting the tangent matrix and * residual of a FEM nonlinear elastic structural problem. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp b/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp index 90e23c38536d..a9c16626da45 100644 --- a/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp +++ b/SU2_CFD/src/numerics/elasticity/nonlinear_models.cpp @@ -2,7 +2,7 @@ * \file nonlinear_models.cpp * \brief Definition of nonlinear constitutive models. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp b/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp index a9399a88b5b7..9139e860f254 100644 --- a/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp +++ b/SU2_CFD/src/numerics/flow/convection/ausm_slau.cpp @@ -2,7 +2,7 @@ * \file ausm_slau.cpp * \brief Implementations of the AUSM-family of schemes. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/flow/convection/centered.cpp b/SU2_CFD/src/numerics/flow/convection/centered.cpp index 68f491145818..b0130279f76f 100644 --- a/SU2_CFD/src/numerics/flow/convection/centered.cpp +++ b/SU2_CFD/src/numerics/flow/convection/centered.cpp @@ -2,7 +2,7 @@ * \file centered.cpp * \brief Implementations of centered schemes. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/flow/convection/fds.cpp b/SU2_CFD/src/numerics/flow/convection/fds.cpp index d30433aa1c0b..e806127da203 100644 --- a/SU2_CFD/src/numerics/flow/convection/fds.cpp +++ b/SU2_CFD/src/numerics/flow/convection/fds.cpp @@ -2,7 +2,7 @@ * \file fds.cpp * \brief Implementation of Flux-Difference-Splitting schemes. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/flow/convection/fvs.cpp b/SU2_CFD/src/numerics/flow/convection/fvs.cpp index bfa04b5f3509..7655b793c851 100644 --- a/SU2_CFD/src/numerics/flow/convection/fvs.cpp +++ b/SU2_CFD/src/numerics/flow/convection/fvs.cpp @@ -2,7 +2,7 @@ * \file fvs.cpp * \brief Implementations of Flux-Vector-Splitting schemes. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/flow/convection/hllc.cpp b/SU2_CFD/src/numerics/flow/convection/hllc.cpp index a8fab1bd5b7f..ef6a2a5a41e9 100644 --- a/SU2_CFD/src/numerics/flow/convection/hllc.cpp +++ b/SU2_CFD/src/numerics/flow/convection/hllc.cpp @@ -2,7 +2,7 @@ * \file hllc.cpp * \brief Implementations of HLLC schemes. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/flow/convection/roe.cpp b/SU2_CFD/src/numerics/flow/convection/roe.cpp index f35b97cd6c50..d43b71ab4bcf 100644 --- a/SU2_CFD/src/numerics/flow/convection/roe.cpp +++ b/SU2_CFD/src/numerics/flow/convection/roe.cpp @@ -2,7 +2,7 @@ * \file roe.cpp * \brief Implementations of Roe-type schemes. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/flow/flow_diffusion.cpp b/SU2_CFD/src/numerics/flow/flow_diffusion.cpp index f2d1d9910ac9..1acce0660399 100644 --- a/SU2_CFD/src/numerics/flow/flow_diffusion.cpp +++ b/SU2_CFD/src/numerics/flow/flow_diffusion.cpp @@ -3,7 +3,7 @@ * \brief Implementation of numerics classes for discretization * of viscous fluxes in fluid flow problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/flow/flow_sources.cpp b/SU2_CFD/src/numerics/flow/flow_sources.cpp index 4e664ab5b6e4..8cf9642b4251 100644 --- a/SU2_CFD/src/numerics/flow/flow_sources.cpp +++ b/SU2_CFD/src/numerics/flow/flow_sources.cpp @@ -3,7 +3,7 @@ * \brief Implementation of numerics classes for integration * of source terms in fluid flow problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/radiation.cpp b/SU2_CFD/src/numerics/radiation.cpp index f58f5cfb004b..d4a51f94113f 100644 --- a/SU2_CFD/src/numerics/radiation.cpp +++ b/SU2_CFD/src/numerics/radiation.cpp @@ -3,7 +3,7 @@ * \brief This file contains the implementation of the numerical * methods for radiation. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/scalar/scalar_sources.cpp b/SU2_CFD/src/numerics/scalar/scalar_sources.cpp index 49e431b41583..205d0cd85c1f 100644 --- a/SU2_CFD/src/numerics/scalar/scalar_sources.cpp +++ b/SU2_CFD/src/numerics/scalar/scalar_sources.cpp @@ -1,7 +1,7 @@ /*! * \file scalar_sources.cpp * \brief Implementation of numerics classes for integration of scalar source-terms. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/species/species_sources.cpp b/SU2_CFD/src/numerics/species/species_sources.cpp index 8d96386e9a3f..c0dbcc517217 100644 --- a/SU2_CFD/src/numerics/species/species_sources.cpp +++ b/SU2_CFD/src/numerics/species/species_sources.cpp @@ -3,7 +3,7 @@ * \brief Implementation of numerics classes for integration of * species transport source-terms. * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/numerics/template.cpp b/SU2_CFD/src/numerics/template.cpp index c670307634d7..1111ff6565fc 100644 --- a/SU2_CFD/src/numerics/template.cpp +++ b/SU2_CFD/src/numerics/template.cpp @@ -2,7 +2,7 @@ * \file template.cpp * \brief Empty implementation of numerics templates, see .hpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CAdjElasticityOutput.cpp b/SU2_CFD/src/output/CAdjElasticityOutput.cpp index 6fc59bf7384a..6c36a8ef3a10 100644 --- a/SU2_CFD/src/output/CAdjElasticityOutput.cpp +++ b/SU2_CFD/src/output/CAdjElasticityOutput.cpp @@ -2,7 +2,7 @@ * \file CAdjElasticityOutput.cpp * \brief Main subroutines for elasticity discrete adjoint output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CAdjFlowCompOutput.cpp b/SU2_CFD/src/output/CAdjFlowCompOutput.cpp index ff7bc5c3ede1..0d80a4586ad9 100644 --- a/SU2_CFD/src/output/CAdjFlowCompOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowCompOutput.cpp @@ -2,7 +2,7 @@ * \file CAdjFlowCompOutput.cpp * \brief Main subroutines for flow discrete adjoint output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CAdjFlowIncOutput.cpp b/SU2_CFD/src/output/CAdjFlowIncOutput.cpp index 0ca7ca2bee8b..01d5d34a88bc 100644 --- a/SU2_CFD/src/output/CAdjFlowIncOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowIncOutput.cpp @@ -2,7 +2,7 @@ * \file CAdjFlowIncOutput.cpp * \brief Main subroutines for flow discrete adjoint output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CAdjFlowOutput.cpp b/SU2_CFD/src/output/CAdjFlowOutput.cpp index c8ebfe898b81..12d22d467401 100644 --- a/SU2_CFD/src/output/CAdjFlowOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowOutput.cpp @@ -2,7 +2,7 @@ * \file CAdjFlowOutput.cpp * \brief Main subroutines for flow discrete adjoint output * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CAdjHeatOutput.cpp b/SU2_CFD/src/output/CAdjHeatOutput.cpp index 66cf5a336f73..3542e28b34b1 100644 --- a/SU2_CFD/src/output/CAdjHeatOutput.cpp +++ b/SU2_CFD/src/output/CAdjHeatOutput.cpp @@ -2,7 +2,7 @@ * \file CAdjHeatOutput.cpp * \brief Main subroutines for flow discrete adjoint output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CBaselineOutput.cpp b/SU2_CFD/src/output/CBaselineOutput.cpp index 8fd0b5914065..6e995806c512 100644 --- a/SU2_CFD/src/output/CBaselineOutput.cpp +++ b/SU2_CFD/src/output/CBaselineOutput.cpp @@ -2,7 +2,7 @@ * \file CBaselineOutput.cpp * \brief Main subroutines for flow discrete adjoint output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CElasticityOutput.cpp b/SU2_CFD/src/output/CElasticityOutput.cpp index 5bf9bfb4d6ed..2694b034674d 100644 --- a/SU2_CFD/src/output/CElasticityOutput.cpp +++ b/SU2_CFD/src/output/CElasticityOutput.cpp @@ -2,7 +2,7 @@ * \file CElasticityOutput.cpp * \brief Main subroutines for FEA output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CFVMOutput.cpp b/SU2_CFD/src/output/CFVMOutput.cpp index cc02672b3209..bdb5e1dd9be4 100644 --- a/SU2_CFD/src/output/CFVMOutput.cpp +++ b/SU2_CFD/src/output/CFVMOutput.cpp @@ -2,7 +2,7 @@ * \file CFVMOutput.cpp * \brief Main subroutines for Finite Volume Method output * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp index 3a2fa141a5dd..e4e03af68a47 100644 --- a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp @@ -2,7 +2,7 @@ * \file CFlowCompFEMOutput.cpp * \brief Main subroutines for compressible flow output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CFlowCompOutput.cpp b/SU2_CFD/src/output/CFlowCompOutput.cpp index 55ee7c8bfedf..0895ed560fc1 100644 --- a/SU2_CFD/src/output/CFlowCompOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompOutput.cpp @@ -2,7 +2,7 @@ * \file CFlowCompOutput.cpp * \brief Main subroutines for compressible flow output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CFlowIncOutput.cpp b/SU2_CFD/src/output/CFlowIncOutput.cpp index e91e038447e0..23e5f066f154 100644 --- a/SU2_CFD/src/output/CFlowIncOutput.cpp +++ b/SU2_CFD/src/output/CFlowIncOutput.cpp @@ -2,7 +2,7 @@ * \file CFlowIncOutput.cpp * \brief Main subroutines for incompressible flow output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index 495d956e0ab5..b0e16fedcc8d 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -2,7 +2,7 @@ * \file CFlowOutput.cpp * \brief Common functions for flow output. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -2760,7 +2760,7 @@ void CFlowOutput::WriteForcesBreakdown(const CConfig* config, const CSolver* flo file << "\n"; file << "-------------------------------------------------------------------------\n"; file << "| ___ _ _ ___ |\n"; - file << "| / __| | | |_ ) Release 8.4.0 \"Harrier\" |\n"; + file << "| / __| | | |_ ) Release 8.5.0 \"Harrier\" |\n"; file << "| \\__ \\ |_| |/ / |\n"; file << "| |___/\\___//___| Suite (Computational Fluid Dynamics Code) |\n"; file << "| |\n"; diff --git a/SU2_CFD/src/output/CHeatOutput.cpp b/SU2_CFD/src/output/CHeatOutput.cpp index 828743eec088..be00eddff04d 100644 --- a/SU2_CFD/src/output/CHeatOutput.cpp +++ b/SU2_CFD/src/output/CHeatOutput.cpp @@ -2,7 +2,7 @@ * \file CHeatOutput.cpp * \brief Main subroutines for the heat solver output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CMeshOutput.cpp b/SU2_CFD/src/output/CMeshOutput.cpp index 459e2094af64..9a0520d5eecd 100644 --- a/SU2_CFD/src/output/CMeshOutput.cpp +++ b/SU2_CFD/src/output/CMeshOutput.cpp @@ -2,7 +2,7 @@ * \file CMeshOutput.cpp * \brief Main subroutines for the heat solver output * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CMultizoneOutput.cpp b/SU2_CFD/src/output/CMultizoneOutput.cpp index ebbac8fd0013..080219db5845 100644 --- a/SU2_CFD/src/output/CMultizoneOutput.cpp +++ b/SU2_CFD/src/output/CMultizoneOutput.cpp @@ -2,7 +2,7 @@ * \file CMultizoneOutput.cpp * \brief Main subroutines for multizone output * \author R. Sanchez, T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CNEMOCompOutput.cpp b/SU2_CFD/src/output/CNEMOCompOutput.cpp index 3f1de662c1c9..c28736296bea 100644 --- a/SU2_CFD/src/output/CNEMOCompOutput.cpp +++ b/SU2_CFD/src/output/CNEMOCompOutput.cpp @@ -2,7 +2,7 @@ * \file CNEMOCompOutput.cpp * \brief Main subroutines for compressible flow output * \author W. Maier, R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/COutput.cpp b/SU2_CFD/src/output/COutput.cpp index 5702673118ad..5cc9a1fdd208 100644 --- a/SU2_CFD/src/output/COutput.cpp +++ b/SU2_CFD/src/output/COutput.cpp @@ -2,7 +2,7 @@ * \file COutput.cpp * \brief Main subroutines for output solver information * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/COutputFactory.cpp b/SU2_CFD/src/output/COutputFactory.cpp index ca986eeba67a..e3f9336b1eb8 100644 --- a/SU2_CFD/src/output/COutputFactory.cpp +++ b/SU2_CFD/src/output/COutputFactory.cpp @@ -2,7 +2,7 @@ * \file COutputFactory.cpp * \brief Main subroutines for output solver information * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/CTurboOutput.cpp b/SU2_CFD/src/output/CTurboOutput.cpp index d3b2b63ef992..2d7e0138ff48 100644 --- a/SU2_CFD/src/output/CTurboOutput.cpp +++ b/SU2_CFD/src/output/CTurboOutput.cpp @@ -2,7 +2,7 @@ * \file CTurboOutput.cpp * \brief Source of the Turbomachinery Performance class * \author S. Vitale, N. Anand - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CCGNSFileWriter.cpp b/SU2_CFD/src/output/filewriter/CCGNSFileWriter.cpp index 51952938acf6..749abc74d201 100644 --- a/SU2_CFD/src/output/filewriter/CCGNSFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CCGNSFileWriter.cpp @@ -2,7 +2,7 @@ * \file CCGNSFileWriter.cpp * \brief Filewriter class for CGNS format. * \author G. Baldan - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CCSVFileWriter.cpp b/SU2_CFD/src/output/filewriter/CCSVFileWriter.cpp index fbb92964eb0a..a287b1207d73 100644 --- a/SU2_CFD/src/output/filewriter/CCSVFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CCSVFileWriter.cpp @@ -2,7 +2,7 @@ * \file CCSVFileWriter.cpp * \brief CSV Writer output class * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CFEMDataSorter.cpp b/SU2_CFD/src/output/filewriter/CFEMDataSorter.cpp index 38b42e581175..66c9c60018ef 100644 --- a/SU2_CFD/src/output/filewriter/CFEMDataSorter.cpp +++ b/SU2_CFD/src/output/filewriter/CFEMDataSorter.cpp @@ -2,7 +2,7 @@ * \file CFEMDataSorter.cpp * \brief Datasorter class for FEM solvers. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CFVMDataSorter.cpp b/SU2_CFD/src/output/filewriter/CFVMDataSorter.cpp index 71e1f0227783..9d7c5966a1de 100644 --- a/SU2_CFD/src/output/filewriter/CFVMDataSorter.cpp +++ b/SU2_CFD/src/output/filewriter/CFVMDataSorter.cpp @@ -2,7 +2,7 @@ * \file CFVMDataSorter.cpp * \brief Datasorter class for FVM solvers. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CParallelDataSorter.cpp b/SU2_CFD/src/output/filewriter/CParallelDataSorter.cpp index 66c565714d41..915e33d5c33f 100644 --- a/SU2_CFD/src/output/filewriter/CParallelDataSorter.cpp +++ b/SU2_CFD/src/output/filewriter/CParallelDataSorter.cpp @@ -2,7 +2,7 @@ * \file CParallelDataSorter.cpp * \brief Datasorter base class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CParallelFileWriter.cpp b/SU2_CFD/src/output/filewriter/CParallelFileWriter.cpp index 5bcb2ee0fd7d..bd115607b629 100644 --- a/SU2_CFD/src/output/filewriter/CParallelFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CParallelFileWriter.cpp @@ -2,7 +2,7 @@ * \file CParallelFileWriter.cpp * \brief Filewriter base class. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CParaviewBinaryFileWriter.cpp b/SU2_CFD/src/output/filewriter/CParaviewBinaryFileWriter.cpp index 71ecf47fec12..7a9f3378a4ae 100644 --- a/SU2_CFD/src/output/filewriter/CParaviewBinaryFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CParaviewBinaryFileWriter.cpp @@ -2,7 +2,7 @@ * \file CParaviewBinaryFileWriter.cpp * \brief Filewriter class for Paraview binary format. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CParaviewFileWriter.cpp b/SU2_CFD/src/output/filewriter/CParaviewFileWriter.cpp index 5fbec4782809..48f67b631637 100644 --- a/SU2_CFD/src/output/filewriter/CParaviewFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CParaviewFileWriter.cpp @@ -2,7 +2,7 @@ * \file CParaviewFileWriter.cpp * \brief Filewriter class for Paraview ASCII format. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CParaviewVTMFileWriter.cpp b/SU2_CFD/src/output/filewriter/CParaviewVTMFileWriter.cpp index fe5acc03b510..da812ee4d9d3 100644 --- a/SU2_CFD/src/output/filewriter/CParaviewVTMFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CParaviewVTMFileWriter.cpp @@ -2,7 +2,7 @@ * \file CParaviewVTMFileWriter.cpp * \brief Filewriter class for Paraview binary format. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CParaviewXMLFileWriter.cpp b/SU2_CFD/src/output/filewriter/CParaviewXMLFileWriter.cpp index c74d0d40b053..f8bc5b0448d4 100644 --- a/SU2_CFD/src/output/filewriter/CParaviewXMLFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CParaviewXMLFileWriter.cpp @@ -2,7 +2,7 @@ * \file CParaviewXMLFileWriter.cpp * \brief Filewriter class for Paraview binary format. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CSTLFileWriter.cpp b/SU2_CFD/src/output/filewriter/CSTLFileWriter.cpp index affe5ec083f8..7e9cdd9b2059 100644 --- a/SU2_CFD/src/output/filewriter/CSTLFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CSTLFileWriter.cpp @@ -2,7 +2,7 @@ * \file CSTLFileWriter.cpp * \brief STL Writer output class * \author T. Kattmann, T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CSU2BinaryFileWriter.cpp b/SU2_CFD/src/output/filewriter/CSU2BinaryFileWriter.cpp index 2ff25afd74d4..113fe6fde5cb 100644 --- a/SU2_CFD/src/output/filewriter/CSU2BinaryFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CSU2BinaryFileWriter.cpp @@ -2,7 +2,7 @@ * \file CSU2BinaryFileWriter.cpp * \brief Filewriter class SU2 native binary format. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CSU2FileWriter.cpp b/SU2_CFD/src/output/filewriter/CSU2FileWriter.cpp index 0c6a5b1be146..e0e940b83284 100644 --- a/SU2_CFD/src/output/filewriter/CSU2FileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CSU2FileWriter.cpp @@ -2,7 +2,7 @@ * \file CSU2FileWriter.cpp * \brief Filewriter class SU2 native ASCII (CSV) format. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CSU2MeshFileWriter.cpp b/SU2_CFD/src/output/filewriter/CSU2MeshFileWriter.cpp index 93f5ea16ee9f..c471110cc9ce 100644 --- a/SU2_CFD/src/output/filewriter/CSU2MeshFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CSU2MeshFileWriter.cpp @@ -2,7 +2,7 @@ * \file CSU2MeshFileWriter.cpp * \brief Filewriter class SU2 native mesh format. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CSurfaceFEMDataSorter.cpp b/SU2_CFD/src/output/filewriter/CSurfaceFEMDataSorter.cpp index cc13c0f3f41c..a9d7aaa4f754 100644 --- a/SU2_CFD/src/output/filewriter/CSurfaceFEMDataSorter.cpp +++ b/SU2_CFD/src/output/filewriter/CSurfaceFEMDataSorter.cpp @@ -2,7 +2,7 @@ * \file CSurfaceFEMDataSorter.cpp * \brief Datasorter for FEM surfaces. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CSurfaceFVMDataSorter.cpp b/SU2_CFD/src/output/filewriter/CSurfaceFVMDataSorter.cpp index 118bd8863010..55fb2296ad70 100644 --- a/SU2_CFD/src/output/filewriter/CSurfaceFVMDataSorter.cpp +++ b/SU2_CFD/src/output/filewriter/CSurfaceFVMDataSorter.cpp @@ -2,7 +2,7 @@ * \file CSurfaceFVMDataSorter.cpp * \brief Datasorter for FVM surfaces. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CTecplotBinaryFileWriter.cpp b/SU2_CFD/src/output/filewriter/CTecplotBinaryFileWriter.cpp index d159ef22df34..c933df314ab0 100644 --- a/SU2_CFD/src/output/filewriter/CTecplotBinaryFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CTecplotBinaryFileWriter.cpp @@ -2,7 +2,7 @@ * \file CTecplotBinaryFileWriter.cpp * \brief Filewriter class for Tecplot binary format. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/filewriter/CTecplotFileWriter.cpp b/SU2_CFD/src/output/filewriter/CTecplotFileWriter.cpp index 7f92bf75b98b..4cfe9c8f1e41 100644 --- a/SU2_CFD/src/output/filewriter/CTecplotFileWriter.cpp +++ b/SU2_CFD/src/output/filewriter/CTecplotFileWriter.cpp @@ -2,7 +2,7 @@ * \file CTecplotFileWriter.cpp * \brief Filewriter class for Tecplot ASCII format. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/output/tools/CWindowingTools.cpp b/SU2_CFD/src/output/tools/CWindowingTools.cpp index c31992b72175..8da19a94594a 100644 --- a/SU2_CFD/src/output/tools/CWindowingTools.cpp +++ b/SU2_CFD/src/output/tools/CWindowingTools.cpp @@ -2,7 +2,7 @@ * \file signal_processing_toolbox.cpp * \brief Signal processing tools * \author S. Schotthöfer - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/python_wrapper_structure.cpp b/SU2_CFD/src/python_wrapper_structure.cpp index 8c5f939305da..46dd0a82ec1c 100644 --- a/SU2_CFD/src/python_wrapper_structure.cpp +++ b/SU2_CFD/src/python_wrapper_structure.cpp @@ -2,7 +2,7 @@ * \file python_wrapper_structure.cpp * \brief Driver subroutines that are used by the Python wrapper. Those routines are usually called from an external Python environment. * \author D. Thomas - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CAdjEulerSolver.cpp b/SU2_CFD/src/solvers/CAdjEulerSolver.cpp index bfe558952e84..361df6d4c6b1 100644 --- a/SU2_CFD/src/solvers/CAdjEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjEulerSolver.cpp @@ -2,7 +2,7 @@ * \file CAdjEulerSolver.cpp * \brief Main subroutines for solving Euler adjoint problems. * \author F. Palacios, T. Economon, H. Kline - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CAdjNSSolver.cpp b/SU2_CFD/src/solvers/CAdjNSSolver.cpp index 3305ebff89f6..3403522f109d 100644 --- a/SU2_CFD/src/solvers/CAdjNSSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjNSSolver.cpp @@ -2,7 +2,7 @@ * \file CAdjNSSolver.cpp * \brief Main subroutines for solving Navier-Stokes adjoint problems. * \author F. Palacios, T. Economon, H. Kline - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CAdjTurbSolver.cpp b/SU2_CFD/src/solvers/CAdjTurbSolver.cpp index 4e331049c020..42a8b11e3271 100644 --- a/SU2_CFD/src/solvers/CAdjTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CAdjTurbSolver.cpp @@ -2,7 +2,7 @@ * \file CAdjTurbVariable.cpp * \brief Main subroutines for solving turbulent adjoint problems. * \author F. Palacios, A. Bueno, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CBaselineSolver.cpp b/SU2_CFD/src/solvers/CBaselineSolver.cpp index 35057edba4ef..09828bf243c1 100644 --- a/SU2_CFD/src/solvers/CBaselineSolver.cpp +++ b/SU2_CFD/src/solvers/CBaselineSolver.cpp @@ -2,7 +2,7 @@ * \file CBaselineSolver.cpp * \brief Main subroutines for CBaselineSolver class. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp b/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp index 5990270c85d4..d667a76649c4 100644 --- a/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp +++ b/SU2_CFD/src/solvers/CBaselineSolver_FEM.cpp @@ -2,7 +2,7 @@ * \file CBaselineSolver_FEM.cpp * \brief Main subroutines for CBaselineSolver_FEM class. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp b/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp index d7177bbb50ce..8e1a6499db50 100644 --- a/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjFEASolver.cpp * \brief Main subroutines for solving adjoint FEM elasticity problems. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp b/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp index cdfade30aa55..ed78b4c4fdfe 100644 --- a/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjMeshSolver.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjMeshSolver.cpp * \brief Main subroutines for solving the discrete adjoint mesh problem. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CDiscAdjSolver.cpp b/SU2_CFD/src/solvers/CDiscAdjSolver.cpp index b6eda0fe729e..3194e28b6d37 100644 --- a/SU2_CFD/src/solvers/CDiscAdjSolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjSolver.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjSolver.cpp * \brief Main subroutines for solving the discrete adjoint problem. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CEulerSolver.cpp b/SU2_CFD/src/solvers/CEulerSolver.cpp index 2480813d4a3a..bf8b34624935 100644 --- a/SU2_CFD/src/solvers/CEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CEulerSolver.cpp @@ -2,7 +2,7 @@ * \file CEulerSolver.cpp * \brief Main subroutines for solving Finite-Volume Euler flow problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * @@ -4174,7 +4174,7 @@ void CEulerSolver::SetActDisk_BEM_VLAD(CGeometry *geometry, CSolver **solver_con * Institution: Computational and Theoretical Fluid Dynamics (CTFD), * CSIR - National Aerospace Laboratories, Bangalore * Academy of Scientific and Innovative Research, Ghaziabad - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * First release date : September 26 2023 * modified on: * diff --git a/SU2_CFD/src/solvers/CFEASolver.cpp b/SU2_CFD/src/solvers/CFEASolver.cpp index a683d90e4e41..e12f92140a4a 100644 --- a/SU2_CFD/src/solvers/CFEASolver.cpp +++ b/SU2_CFD/src/solvers/CFEASolver.cpp @@ -2,7 +2,7 @@ * \file CFEASolver.cpp * \brief Main subroutines for solving direct FEM elasticity problems. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CFEASolverBase.cpp b/SU2_CFD/src/solvers/CFEASolverBase.cpp index b275ce376f5a..99d3dc9f0375 100644 --- a/SU2_CFD/src/solvers/CFEASolverBase.cpp +++ b/SU2_CFD/src/solvers/CFEASolverBase.cpp @@ -2,7 +2,7 @@ * \file CFEASolverBase.cpp * \brief Common class template for FEA solvers * \author T. Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp b/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp index 8b21eb4009c7..b7870f2e64d6 100644 --- a/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp +++ b/SU2_CFD/src/solvers/CFEM_DG_EulerSolver.cpp @@ -2,7 +2,7 @@ * \file CFEM_DG_EulerSolver.cpp * \brief Main subroutines for solving finite element Euler flow problems * \author J. Alonso, E. van der Weide, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp b/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp index 0639bb057571..6290a9b54f03 100644 --- a/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp +++ b/SU2_CFD/src/solvers/CFEM_DG_NSSolver.cpp @@ -2,7 +2,7 @@ * \file CFEM_DG_NSSolver.cpp * \brief Main subroutines for solving finite element Navier-Stokes flow problems * \author J. Alonso, E. van der Weide, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp b/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp index 16d9ce70e045..fb26eee6661f 100644 --- a/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp +++ b/SU2_CFD/src/solvers/CGradientSmoothingSolver.cpp @@ -2,7 +2,7 @@ * \file CGradientSmoothing.cpp * \brief Main solver routines for the gradient smoothing problem. * \author T. Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CHeatSolver.cpp b/SU2_CFD/src/solvers/CHeatSolver.cpp index 49235895307d..5e9b0b437c27 100644 --- a/SU2_CFD/src/solvers/CHeatSolver.cpp +++ b/SU2_CFD/src/solvers/CHeatSolver.cpp @@ -2,7 +2,7 @@ * \file CHeatSolver.cpp * \brief Main subroutines for solving the heat equation * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CIncEulerSolver.cpp b/SU2_CFD/src/solvers/CIncEulerSolver.cpp index d27f97b8f2f7..1cb4a1951bdb 100644 --- a/SU2_CFD/src/solvers/CIncEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CIncEulerSolver.cpp @@ -2,7 +2,7 @@ * \file CIncEulerSolver.cpp * \brief Main subroutines for solving incompressible flow (Euler, Navier-Stokes, etc.). * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CIncNSSolver.cpp b/SU2_CFD/src/solvers/CIncNSSolver.cpp index 3957413cc240..3c22e6404f07 100644 --- a/SU2_CFD/src/solvers/CIncNSSolver.cpp +++ b/SU2_CFD/src/solvers/CIncNSSolver.cpp @@ -2,7 +2,7 @@ * \file CIncNSSolver.cpp * \brief Main subroutines for solving Navier-Stokes incompressible flow. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CMeshSolver.cpp b/SU2_CFD/src/solvers/CMeshSolver.cpp index 4d51042c2665..35a633dc870f 100644 --- a/SU2_CFD/src/solvers/CMeshSolver.cpp +++ b/SU2_CFD/src/solvers/CMeshSolver.cpp @@ -2,7 +2,7 @@ * \file CMeshSolver.cpp * \brief Main subroutines to solve moving meshes using a pseudo-linear elastic approach. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp index 12f6d7dbec14..b86a31b3ba7a 100644 --- a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp @@ -2,7 +2,7 @@ * \file CNEMOEulerSolver.cpp * \brief Headers of the CNEMOEulerSolver class * \author S. R. Copeland, F. Palacios, W. Maier, C. Garbacz, J. Needels - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CNEMONSSolver.cpp b/SU2_CFD/src/solvers/CNEMONSSolver.cpp index 3d368ca52f62..4ad43f4c0902 100644 --- a/SU2_CFD/src/solvers/CNEMONSSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMONSSolver.cpp @@ -2,7 +2,7 @@ * \file CNEMONSSolver.cpp * \brief Headers of the CNEMONSSolver class * \author S. R. Copeland, F. Palacios, W. Maier. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CNSSolver.cpp b/SU2_CFD/src/solvers/CNSSolver.cpp index ad51d64d08f6..36baaea473b7 100644 --- a/SU2_CFD/src/solvers/CNSSolver.cpp +++ b/SU2_CFD/src/solvers/CNSSolver.cpp @@ -2,7 +2,7 @@ * \file CNSSolver.cpp * \brief Main subroutines for solving Finite-Volume Navier-Stokes flow problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CRadP1Solver.cpp b/SU2_CFD/src/solvers/CRadP1Solver.cpp index 7ec855629842..4c929966490b 100644 --- a/SU2_CFD/src/solvers/CRadP1Solver.cpp +++ b/SU2_CFD/src/solvers/CRadP1Solver.cpp @@ -2,7 +2,7 @@ * \file CRadP1Solver.cpp * \brief Main subroutines for solving P1 radiation problems. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CRadSolver.cpp b/SU2_CFD/src/solvers/CRadSolver.cpp index 0a42fba6d6f2..12ef7f20739c 100644 --- a/SU2_CFD/src/solvers/CRadSolver.cpp +++ b/SU2_CFD/src/solvers/CRadSolver.cpp @@ -2,7 +2,7 @@ * \file CRadP1Solver.cpp * \brief Main subroutines for solving generic radiation problems (P1, M1, discrete ordinates...) * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CSolver.cpp b/SU2_CFD/src/solvers/CSolver.cpp index 8705df47f997..aedacdb90593 100644 --- a/SU2_CFD/src/solvers/CSolver.cpp +++ b/SU2_CFD/src/solvers/CSolver.cpp @@ -2,7 +2,7 @@ * \file CSolver.cpp * \brief Main subroutines for CSolver class. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CSolverFactory.cpp b/SU2_CFD/src/solvers/CSolverFactory.cpp index 31a31495367a..a01590c6ab27 100644 --- a/SU2_CFD/src/solvers/CSolverFactory.cpp +++ b/SU2_CFD/src/solvers/CSolverFactory.cpp @@ -2,7 +2,7 @@ * \file CSolverFactory.cpp * \brief Main subroutines for CSolverFactoryclass. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp index 297c1b1540b0..10fb3c49ddb4 100644 --- a/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesFlameletSolver.cpp @@ -2,7 +2,7 @@ * \file CSpeciesFlameletSolver.cpp * \brief Main subroutines of CSpeciesFlameletSolver class * \author D. Mayer, T. Economon, N. Beishuizen, E. Bunschoten - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CSpeciesSolver.cpp b/SU2_CFD/src/solvers/CSpeciesSolver.cpp index 4e629d1d2ada..0d1286671275 100644 --- a/SU2_CFD/src/solvers/CSpeciesSolver.cpp +++ b/SU2_CFD/src/solvers/CSpeciesSolver.cpp @@ -2,7 +2,7 @@ * \file CSpeciesSolver.cpp * \brief Main subroutines of CSpeciesSolver class * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CTemplateSolver.cpp b/SU2_CFD/src/solvers/CTemplateSolver.cpp index 2a6cd2a5e689..a4e6baf39cff 100644 --- a/SU2_CFD/src/solvers/CTemplateSolver.cpp +++ b/SU2_CFD/src/solvers/CTemplateSolver.cpp @@ -2,7 +2,7 @@ * \file CTemplateSolver.cpp * \brief Subroutines to be implemented for any new solvers * \author F. Palacios - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CTransLMSolver.cpp b/SU2_CFD/src/solvers/CTransLMSolver.cpp index 21469b71d507..87ac5c58db38 100644 --- a/SU2_CFD/src/solvers/CTransLMSolver.cpp +++ b/SU2_CFD/src/solvers/CTransLMSolver.cpp @@ -2,7 +2,7 @@ * \file CTransLMSolver.cpp * \brief Main subroutines for Langtry-Menter Transition model solver. * \author A. Aranake, S. Kang. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CTurbSASolver.cpp b/SU2_CFD/src/solvers/CTurbSASolver.cpp index 952a245072a7..fb8d2bf5d484 100644 --- a/SU2_CFD/src/solvers/CTurbSASolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSASolver.cpp @@ -2,7 +2,7 @@ * \file CTurbSASolver.cpp * \brief Main subroutines of CTurbSASolver class * \author F. Palacios, A. Bueno - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index 4f1212d62867..86f8bc06ad93 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -2,7 +2,7 @@ * \file CTurbSSTSolver.cpp * \brief Main subroutines of CTurbSSTSolver class * \author F. Palacios, A. Bueno - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/solvers/CTurbSolver.cpp b/SU2_CFD/src/solvers/CTurbSolver.cpp index cdb75ab90807..a05a21edf5f1 100644 --- a/SU2_CFD/src/solvers/CTurbSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSolver.cpp @@ -2,7 +2,7 @@ * \file CTurbSolver.cpp * \brief Main subroutines of CTurbSolver class * \author F. Palacios, A. Bueno - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CAdjEulerVariable.cpp b/SU2_CFD/src/variables/CAdjEulerVariable.cpp index 67a33bbe18b8..c386664b8e1f 100644 --- a/SU2_CFD/src/variables/CAdjEulerVariable.cpp +++ b/SU2_CFD/src/variables/CAdjEulerVariable.cpp @@ -2,7 +2,7 @@ * \file CAdjEulerVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CAdjNSVariable.cpp b/SU2_CFD/src/variables/CAdjNSVariable.cpp index 46de122957cd..61a06d8a6a15 100644 --- a/SU2_CFD/src/variables/CAdjNSVariable.cpp +++ b/SU2_CFD/src/variables/CAdjNSVariable.cpp @@ -2,7 +2,7 @@ * \file CAdjNSVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CAdjTurbVariable.cpp b/SU2_CFD/src/variables/CAdjTurbVariable.cpp index f387f3bb2121..e5ac49351eb8 100644 --- a/SU2_CFD/src/variables/CAdjTurbVariable.cpp +++ b/SU2_CFD/src/variables/CAdjTurbVariable.cpp @@ -2,7 +2,7 @@ * \file CAdjTurbVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, A. Bueno - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CBaselineVariable.cpp b/SU2_CFD/src/variables/CBaselineVariable.cpp index c67a304be2f0..3f8f212240b3 100644 --- a/SU2_CFD/src/variables/CBaselineVariable.cpp +++ b/SU2_CFD/src/variables/CBaselineVariable.cpp @@ -2,7 +2,7 @@ * \file CBaselineVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CDiscAdjFEABoundVariable.cpp b/SU2_CFD/src/variables/CDiscAdjFEABoundVariable.cpp index 7a2c26015a7d..67ed4311d082 100644 --- a/SU2_CFD/src/variables/CDiscAdjFEABoundVariable.cpp +++ b/SU2_CFD/src/variables/CDiscAdjFEABoundVariable.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjFEAVariable.cpp * \brief Definition of the variables for FEM adjoint elastic structural problems. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CDiscAdjMeshBoundVariable.cpp b/SU2_CFD/src/variables/CDiscAdjMeshBoundVariable.cpp index d84f3fc949bd..bb93523c9dce 100644 --- a/SU2_CFD/src/variables/CDiscAdjMeshBoundVariable.cpp +++ b/SU2_CFD/src/variables/CDiscAdjMeshBoundVariable.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjMeshVariable.cpp * \brief Main subroutines for the discrete adjoint mesh variable structure. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CDiscAdjVariable.cpp b/SU2_CFD/src/variables/CDiscAdjVariable.cpp index ea33c6886262..7f41adab49f4 100644 --- a/SU2_CFD/src/variables/CDiscAdjVariable.cpp +++ b/SU2_CFD/src/variables/CDiscAdjVariable.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjVariable.cpp * \brief Main subroutines for the discrete adjoint variable structure. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CEulerVariable.cpp b/SU2_CFD/src/variables/CEulerVariable.cpp index e52c42ae8158..78671f780dc8 100644 --- a/SU2_CFD/src/variables/CEulerVariable.cpp +++ b/SU2_CFD/src/variables/CEulerVariable.cpp @@ -2,7 +2,7 @@ * \file CEulerVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CFEABoundVariable.cpp b/SU2_CFD/src/variables/CFEABoundVariable.cpp index 2d06787291d6..e32cae717dda 100644 --- a/SU2_CFD/src/variables/CFEABoundVariable.cpp +++ b/SU2_CFD/src/variables/CFEABoundVariable.cpp @@ -2,7 +2,7 @@ * \file CFEABoundVariable.cpp * \brief Definition of the variables for FEM elastic structural problems. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CFEAVariable.cpp b/SU2_CFD/src/variables/CFEAVariable.cpp index 8944b72aaf7e..de64777a944d 100644 --- a/SU2_CFD/src/variables/CFEAVariable.cpp +++ b/SU2_CFD/src/variables/CFEAVariable.cpp @@ -2,7 +2,7 @@ * \file CFEAVariable.cpp * \brief Definition of the variables for FEM elastic structural problems. * \author R. Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CFlowVariable.cpp b/SU2_CFD/src/variables/CFlowVariable.cpp index 06f90656450c..7828b1afbb0a 100644 --- a/SU2_CFD/src/variables/CFlowVariable.cpp +++ b/SU2_CFD/src/variables/CFlowVariable.cpp @@ -1,7 +1,7 @@ /*! * \file CFlowVariable.cpp * \brief Definition of common solution fields for flow solvers. - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CHeatVariable.cpp b/SU2_CFD/src/variables/CHeatVariable.cpp index ae2b294d38a9..9bc30e42a15f 100644 --- a/SU2_CFD/src/variables/CHeatVariable.cpp +++ b/SU2_CFD/src/variables/CHeatVariable.cpp @@ -2,7 +2,7 @@ * \file CHeatVariable.cpp * \brief Definition of the variables for heat equation problems. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CIncEulerVariable.cpp b/SU2_CFD/src/variables/CIncEulerVariable.cpp index 6d77af4454db..355a15874884 100644 --- a/SU2_CFD/src/variables/CIncEulerVariable.cpp +++ b/SU2_CFD/src/variables/CIncEulerVariable.cpp @@ -2,7 +2,7 @@ * \file CIncEulerVariable.cpp * \brief Definition of the variable classes for incompressible flow. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CIncNSVariable.cpp b/SU2_CFD/src/variables/CIncNSVariable.cpp index fd2cb97c60bc..93d481956949 100644 --- a/SU2_CFD/src/variables/CIncNSVariable.cpp +++ b/SU2_CFD/src/variables/CIncNSVariable.cpp @@ -2,7 +2,7 @@ * \file CIncNSVariable.cpp * \brief Definition of the variable classes for incompressible flow. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CMeshBoundVariable.cpp b/SU2_CFD/src/variables/CMeshBoundVariable.cpp index b906eed3665d..3d98dd11931e 100644 --- a/SU2_CFD/src/variables/CMeshBoundVariable.cpp +++ b/SU2_CFD/src/variables/CMeshBoundVariable.cpp @@ -2,7 +2,7 @@ * \file CMeshBoundVariable.cpp * \brief Definition of the boundary variables for mesh motion using a pseudo-elastic approach. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CMeshElement.cpp b/SU2_CFD/src/variables/CMeshElement.cpp index 6cbe76a01cf9..f6a31002df0e 100644 --- a/SU2_CFD/src/variables/CMeshElement.cpp +++ b/SU2_CFD/src/variables/CMeshElement.cpp @@ -2,7 +2,7 @@ * \file CMeshElement.cpp * \brief Definition of the mesh elements for mesh deformation using a pseudo-elastic approach. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CMeshVariable.cpp b/SU2_CFD/src/variables/CMeshVariable.cpp index c168b4b2e7b4..13192b47dd27 100644 --- a/SU2_CFD/src/variables/CMeshVariable.cpp +++ b/SU2_CFD/src/variables/CMeshVariable.cpp @@ -2,7 +2,7 @@ * \file CMeshVariable.cpp * \brief Definition of the variables for mesh motion using a pseudo-elastic approach. * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CNEMOEulerVariable.cpp b/SU2_CFD/src/variables/CNEMOEulerVariable.cpp index 24dc13e18544..79ba53bfc4a3 100644 --- a/SU2_CFD/src/variables/CNEMOEulerVariable.cpp +++ b/SU2_CFD/src/variables/CNEMOEulerVariable.cpp @@ -2,7 +2,7 @@ * \file CNEMOEulerVariable.cpp * \brief Definition of the solution fields. * \author C. Garbacz, W. Maier, S.R. Copeland - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CNEMONSVariable.cpp b/SU2_CFD/src/variables/CNEMONSVariable.cpp index 3ae287e9d4fc..c498e9af8f52 100644 --- a/SU2_CFD/src/variables/CNEMONSVariable.cpp +++ b/SU2_CFD/src/variables/CNEMONSVariable.cpp @@ -2,7 +2,7 @@ * \file CNEMONSVariable.cpp * \brief Definition of the solution fields. * \author C. Garbacz, W. Maier, S.R. Copeland - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CNSVariable.cpp b/SU2_CFD/src/variables/CNSVariable.cpp index ef8153194bc2..9d50b32a8b25 100644 --- a/SU2_CFD/src/variables/CNSVariable.cpp +++ b/SU2_CFD/src/variables/CNSVariable.cpp @@ -2,7 +2,7 @@ * \file CNSVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CRadP1Variable.cpp b/SU2_CFD/src/variables/CRadP1Variable.cpp index 5b72783a0e98..89a5d05b4427 100644 --- a/SU2_CFD/src/variables/CRadP1Variable.cpp +++ b/SU2_CFD/src/variables/CRadP1Variable.cpp @@ -2,7 +2,7 @@ * \file CRadP1Variable.cpp * \brief Definition of the P1 model variables * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CRadVariable.cpp b/SU2_CFD/src/variables/CRadVariable.cpp index 258c220590a1..6f37f8a479ef 100644 --- a/SU2_CFD/src/variables/CRadVariable.cpp +++ b/SU2_CFD/src/variables/CRadVariable.cpp @@ -2,7 +2,7 @@ * \file CRadVariable.cpp * \brief Definition of the radiation variables * \author Ruben Sanchez - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CScalarVariable.cpp b/SU2_CFD/src/variables/CScalarVariable.cpp index dc8d462d8d75..b7437011cd24 100644 --- a/SU2_CFD/src/variables/CScalarVariable.cpp +++ b/SU2_CFD/src/variables/CScalarVariable.cpp @@ -2,7 +2,7 @@ * \file CScalarVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, A. Bueno - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CSobolevSmoothingVariable.cpp b/SU2_CFD/src/variables/CSobolevSmoothingVariable.cpp index c87286aa1529..06ed240f42a5 100644 --- a/SU2_CFD/src/variables/CSobolevSmoothingVariable.cpp +++ b/SU2_CFD/src/variables/CSobolevSmoothingVariable.cpp @@ -2,7 +2,7 @@ * \file CSobolevSmoothingVariable.cpp * \brief Definition of the variables for gradient smoothing problems. * \author T. Dick - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CSpeciesFlameletVariable.cpp b/SU2_CFD/src/variables/CSpeciesFlameletVariable.cpp index 529e006e3fb1..d5d2f50419bd 100644 --- a/SU2_CFD/src/variables/CSpeciesFlameletVariable.cpp +++ b/SU2_CFD/src/variables/CSpeciesFlameletVariable.cpp @@ -2,7 +2,7 @@ * \file CSpeciesFlameletVariable.cpp * \brief Definition of the variable fields for the flamelet class. * \author D. Mayer, T. Economon, N. Beishuizen - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CSpeciesVariable.cpp b/SU2_CFD/src/variables/CSpeciesVariable.cpp index a02f417a07b2..34dfe46b69e2 100644 --- a/SU2_CFD/src/variables/CSpeciesVariable.cpp +++ b/SU2_CFD/src/variables/CSpeciesVariable.cpp @@ -2,7 +2,7 @@ * \file CSpeciesVariable.cpp * \brief Definition of the solution fields. * \author T. Kattmann - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CTransLMVariable.cpp b/SU2_CFD/src/variables/CTransLMVariable.cpp index 56a1027f692e..9ab1e10bec80 100644 --- a/SU2_CFD/src/variables/CTransLMVariable.cpp +++ b/SU2_CFD/src/variables/CTransLMVariable.cpp @@ -2,7 +2,7 @@ * \file CTransLMVariable.cpp * \brief Definition of the solution fields. * \author A. Aranake, S. Kang - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CTurbSAVariable.cpp b/SU2_CFD/src/variables/CTurbSAVariable.cpp index 4166e285b107..beb97d960bef 100644 --- a/SU2_CFD/src/variables/CTurbSAVariable.cpp +++ b/SU2_CFD/src/variables/CTurbSAVariable.cpp @@ -2,7 +2,7 @@ * \file CTurbSAVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, A. Bueno - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CTurbSSTVariable.cpp b/SU2_CFD/src/variables/CTurbSSTVariable.cpp index dadfe497025d..a0a08669c766 100644 --- a/SU2_CFD/src/variables/CTurbSSTVariable.cpp +++ b/SU2_CFD/src/variables/CTurbSSTVariable.cpp @@ -2,7 +2,7 @@ * \file CTurbSSTVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, A. Bueno - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CTurbVariable.cpp b/SU2_CFD/src/variables/CTurbVariable.cpp index a759d50d7124..139223055a42 100644 --- a/SU2_CFD/src/variables/CTurbVariable.cpp +++ b/SU2_CFD/src/variables/CTurbVariable.cpp @@ -2,7 +2,7 @@ * \file CTurbVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, A. Bueno - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_CFD/src/variables/CVariable.cpp b/SU2_CFD/src/variables/CVariable.cpp index 7de950de6224..ac396113b75d 100644 --- a/SU2_CFD/src/variables/CVariable.cpp +++ b/SU2_CFD/src/variables/CVariable.cpp @@ -2,7 +2,7 @@ * \file CVariable.cpp * \brief Definition of the solution fields. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_DEF/include/drivers/CDeformationDriver.hpp b/SU2_DEF/include/drivers/CDeformationDriver.hpp index c8f53616f063..07fc5687ea6d 100644 --- a/SU2_DEF/include/drivers/CDeformationDriver.hpp +++ b/SU2_DEF/include/drivers/CDeformationDriver.hpp @@ -2,7 +2,7 @@ * \file CDeformationDriver.hpp * \brief Headers of the main subroutines for driving the mesh deformation. * \author A. Gastaldi, H. Patel - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_DEF/include/drivers/CDiscAdjDeformationDriver.hpp b/SU2_DEF/include/drivers/CDiscAdjDeformationDriver.hpp index d590ca255b23..5f710ce19a19 100644 --- a/SU2_DEF/include/drivers/CDiscAdjDeformationDriver.hpp +++ b/SU2_DEF/include/drivers/CDiscAdjDeformationDriver.hpp @@ -2,7 +2,7 @@ * \file CDiscAdjDeformationDriver.hpp * \brief Headers of the main subroutines for driving the projection of sensitivities. * \author T. Economon, H. Kline, R. Sanchez, A. Gastaldi, H. Patel - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_DEF/src/SU2_DEF.cpp b/SU2_DEF/src/SU2_DEF.cpp index a7d908d69d16..758228fef015 100644 --- a/SU2_DEF/src/SU2_DEF.cpp +++ b/SU2_DEF/src/SU2_DEF.cpp @@ -2,7 +2,7 @@ * \file SU2_DEF.cpp * \brief Main file of Mesh Deformation Code (SU2_DEF). * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_DEF/src/drivers/CDeformationDriver.cpp b/SU2_DEF/src/drivers/CDeformationDriver.cpp index c13dd60ebecc..c5573f5d5309 100644 --- a/SU2_DEF/src/drivers/CDeformationDriver.cpp +++ b/SU2_DEF/src/drivers/CDeformationDriver.cpp @@ -2,7 +2,7 @@ * \file CDeformationDriver.cpp * \brief Main subroutines for driving the mesh deformation. * \author A. Gastaldi, H. Patel - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_DEF/src/drivers/CDiscAdjDeformationDriver.cpp b/SU2_DEF/src/drivers/CDiscAdjDeformationDriver.cpp index c609c956f411..df1b2d4e7da2 100644 --- a/SU2_DEF/src/drivers/CDiscAdjDeformationDriver.cpp +++ b/SU2_DEF/src/drivers/CDiscAdjDeformationDriver.cpp @@ -2,7 +2,7 @@ * \file CDiscAdjDeformationDriver.cpp * \brief Main subroutines for driving the projection of sensitivities. * \author T. Economon, H. Kline, R. Sanchez, A. Gastaldi, H. Patel - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_DOT/src/SU2_DOT.cpp b/SU2_DOT/src/SU2_DOT.cpp index 8d29846b6f59..704be2382812 100644 --- a/SU2_DOT/src/SU2_DOT.cpp +++ b/SU2_DOT/src/SU2_DOT.cpp @@ -2,7 +2,7 @@ * \file SU2_DOT.cpp * \brief Main file of the Gradient Projection Code (SU2_DOT). * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_GEO/include/SU2_GEO.hpp b/SU2_GEO/include/SU2_GEO.hpp index 546ccd64740b..110439618efc 100644 --- a/SU2_GEO/include/SU2_GEO.hpp +++ b/SU2_GEO/include/SU2_GEO.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines of the code SU2_GEO. * The subroutines and functions are in the SU2_GEO.cpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_GEO/src/SU2_GEO.cpp b/SU2_GEO/src/SU2_GEO.cpp index 087359bf2370..088271a6c0db 100644 --- a/SU2_GEO/src/SU2_GEO.cpp +++ b/SU2_GEO/src/SU2_GEO.cpp @@ -2,7 +2,7 @@ * \file SU2_GEO.cpp * \brief Main file of the Geometry Definition Code (SU2_GEO). * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_PY/FSI_tools/FSIInterface.py b/SU2_PY/FSI_tools/FSIInterface.py index 68569af88f12..01f2fa2e14bc 100644 --- a/SU2_PY/FSI_tools/FSIInterface.py +++ b/SU2_PY/FSI_tools/FSIInterface.py @@ -3,7 +3,7 @@ ## \file FSIInterface.py # \brief FSI interface class that handles fluid/solid solvers synchronisation and communication. # \authors Nicola Fonzi, Vittorio Cavalieri based on the work of David Thomas -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/FSI_tools/FSI_config.py b/SU2_PY/FSI_tools/FSI_config.py index ee078fde5c01..5eda8b7a4458 100644 --- a/SU2_PY/FSI_tools/FSI_config.py +++ b/SU2_PY/FSI_tools/FSI_config.py @@ -3,7 +3,7 @@ ## \file FSI_config.py # \brief Python class for handling configuration file for FSI computation. # \authors Nicola Fonzi, Vittorio Cavalieri based on the work of David Thomas -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/OptimalPropeller.py b/SU2_PY/OptimalPropeller.py index 15819d5abc75..c9ae32113286 100644 --- a/SU2_PY/OptimalPropeller.py +++ b/SU2_PY/OptimalPropeller.py @@ -1,7 +1,7 @@ ## \file OptimalPropeller.py # \brief Python script for generating the ActuatorDisk.dat file. # \author E. Saetta, L. Russo, R. Tognaccini -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/eval/design.py b/SU2_PY/SU2/eval/design.py index 219bcea483f6..f4c94778d864 100644 --- a/SU2_PY/SU2/eval/design.py +++ b/SU2_PY/SU2/eval/design.py @@ -3,7 +3,7 @@ ## \file design.py # \brief python package for designs # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/eval/functions.py b/SU2_PY/SU2/eval/functions.py index 759c42947678..fd6c1103a519 100644 --- a/SU2_PY/SU2/eval/functions.py +++ b/SU2_PY/SU2/eval/functions.py @@ -3,7 +3,7 @@ ## \file functions.py # \brief python package for functions # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/eval/gradients.py b/SU2_PY/SU2/eval/gradients.py index d2245c0291e4..5af57f6c33b0 100644 --- a/SU2_PY/SU2/eval/gradients.py +++ b/SU2_PY/SU2/eval/gradients.py @@ -3,7 +3,7 @@ ## \file gradients.py # \brief python package for gradients # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/io/config.py b/SU2_PY/SU2/io/config.py index f429b8ceced0..b4d1507f39a5 100755 --- a/SU2_PY/SU2/io/config.py +++ b/SU2_PY/SU2/io/config.py @@ -3,7 +3,7 @@ ## \file config.py # \brief python package for config # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/io/config_options.py b/SU2_PY/SU2/io/config_options.py index 5d8ca98654fe..b75e0923c715 100644 --- a/SU2_PY/SU2/io/config_options.py +++ b/SU2_PY/SU2/io/config_options.py @@ -1,7 +1,7 @@ # \file config_options.py # \brief python package for config # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/io/data.py b/SU2_PY/SU2/io/data.py index 0726c72ad950..a2265c119842 100644 --- a/SU2_PY/SU2/io/data.py +++ b/SU2_PY/SU2/io/data.py @@ -3,7 +3,7 @@ ## \file data.py # \brief python package for data utility functions # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/io/filelock.py b/SU2_PY/SU2/io/filelock.py index a681ce9ae46a..45190e1711a0 100644 --- a/SU2_PY/SU2/io/filelock.py +++ b/SU2_PY/SU2/io/filelock.py @@ -3,7 +3,7 @@ ## \file filelock.py # \brief python package for filelocking # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/io/redirect.py b/SU2_PY/SU2/io/redirect.py index f36e7c2f8ce2..161d4cc31f0c 100644 --- a/SU2_PY/SU2/io/redirect.py +++ b/SU2_PY/SU2/io/redirect.py @@ -3,7 +3,7 @@ ## \file redirect.py # \brief python package for file redirection # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/io/state.py b/SU2_PY/SU2/io/state.py index cdc9ee73cc06..f67a9004b81d 100644 --- a/SU2_PY/SU2/io/state.py +++ b/SU2_PY/SU2/io/state.py @@ -3,7 +3,7 @@ ## \file state.py # \brief python package for state # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/io/tools.py b/SU2_PY/SU2/io/tools.py index ff7e95c8ca56..10983e6852b5 100755 --- a/SU2_PY/SU2/io/tools.py +++ b/SU2_PY/SU2/io/tools.py @@ -3,7 +3,7 @@ ## \file tools.py # \brief file i/o functions # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/opt/project.py b/SU2_PY/SU2/opt/project.py index 61dceabd7388..e87f37548c3f 100644 --- a/SU2_PY/SU2/opt/project.py +++ b/SU2_PY/SU2/opt/project.py @@ -3,7 +3,7 @@ ## \file project.py # \brief package for optimization projects # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/opt/scipy_tools.py b/SU2_PY/SU2/opt/scipy_tools.py index 2a506ebfc859..e8551b67ac08 100644 --- a/SU2_PY/SU2/opt/scipy_tools.py +++ b/SU2_PY/SU2/opt/scipy_tools.py @@ -3,7 +3,7 @@ ## \file scipy_tools.py # \brief tools for interfacing with scipy # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/run/adjoint.py b/SU2_PY/SU2/run/adjoint.py index 3f1701458665..d2e460fb17c3 100644 --- a/SU2_PY/SU2/run/adjoint.py +++ b/SU2_PY/SU2/run/adjoint.py @@ -3,7 +3,7 @@ ## \file adjoint.py # \brief python package for running adjoint problems # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/run/deform.py b/SU2_PY/SU2/run/deform.py index 03ad60aa01ce..8ead56f11509 100644 --- a/SU2_PY/SU2/run/deform.py +++ b/SU2_PY/SU2/run/deform.py @@ -3,7 +3,7 @@ ## \file deform.py # \brief python package for deforming meshes # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/run/direct.py b/SU2_PY/SU2/run/direct.py index 55b41d1bfc0a..60825cae7a63 100644 --- a/SU2_PY/SU2/run/direct.py +++ b/SU2_PY/SU2/run/direct.py @@ -3,7 +3,7 @@ ## \file direct.py # \brief python package for running direct solutions # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/run/geometry.py b/SU2_PY/SU2/run/geometry.py index 7d80cea44625..8a9b41757461 100644 --- a/SU2_PY/SU2/run/geometry.py +++ b/SU2_PY/SU2/run/geometry.py @@ -3,7 +3,7 @@ ## \file geometry.py # \brief python package for running geometry analyses # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/run/interface.py b/SU2_PY/SU2/run/interface.py index 62c94fe53c09..ef1f58f5ca2a 100644 --- a/SU2_PY/SU2/run/interface.py +++ b/SU2_PY/SU2/run/interface.py @@ -3,7 +3,7 @@ ## \file interface.py # \brief python package interfacing with the SU2 suite # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/run/merge.py b/SU2_PY/SU2/run/merge.py index 3fb863560187..8d0c2f11dd38 100644 --- a/SU2_PY/SU2/run/merge.py +++ b/SU2_PY/SU2/run/merge.py @@ -1,7 +1,7 @@ ## \file merge.py # \brief python package for merging meshes # \author T. Economon, T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/run/projection.py b/SU2_PY/SU2/run/projection.py index ba70291c36a5..80741ba70759 100644 --- a/SU2_PY/SU2/run/projection.py +++ b/SU2_PY/SU2/run/projection.py @@ -3,7 +3,7 @@ ## \file projection.py # \brief python package for running gradient projection # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/util/filter_adjoint.py b/SU2_PY/SU2/util/filter_adjoint.py index 4641e1ce6e84..d3a541bbc6bf 100644 --- a/SU2_PY/SU2/util/filter_adjoint.py +++ b/SU2_PY/SU2/util/filter_adjoint.py @@ -3,7 +3,7 @@ ## \file filter_adjoint.py # \brief Applies various filters to the adjoint surface sensitivities of an airfoil # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/util/plot.py b/SU2_PY/SU2/util/plot.py index 556e8f0f6ac8..dbd542ed4b97 100644 --- a/SU2_PY/SU2/util/plot.py +++ b/SU2_PY/SU2/util/plot.py @@ -3,7 +3,7 @@ ## \file plot.py # \brief python package for plotting # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/util/polarSweepLib.py b/SU2_PY/SU2/util/polarSweepLib.py index 73d2c3a241e8..920e64862693 100755 --- a/SU2_PY/SU2/util/polarSweepLib.py +++ b/SU2_PY/SU2/util/polarSweepLib.py @@ -1,7 +1,7 @@ # \file polarSweepLib.py # \brief Functions library for compute_polar.py script. # \author E Arad -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2/util/which.py b/SU2_PY/SU2/util/which.py index e1d5408b9abc..389d031186e1 100644 --- a/SU2_PY/SU2/util/which.py +++ b/SU2_PY/SU2/util/which.py @@ -3,7 +3,7 @@ ## \file which.py # \brief looks for where a program is # \author T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2_CFD.py b/SU2_PY/SU2_CFD.py index 7de10b7f7a6a..237ffc5f7385 100755 --- a/SU2_PY/SU2_CFD.py +++ b/SU2_PY/SU2_CFD.py @@ -3,7 +3,7 @@ ## \file SU2_CFD.py # \brief Python script to launch SU2_CFD through the Python Wrapper. # \author David Thomas -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/SU2_Nastran/pysu2_nastran.py b/SU2_PY/SU2_Nastran/pysu2_nastran.py index 88c65689b270..9d1b993b0547 100644 --- a/SU2_PY/SU2_Nastran/pysu2_nastran.py +++ b/SU2_PY/SU2_Nastran/pysu2_nastran.py @@ -3,7 +3,7 @@ ## \file pysu2_nastran.py # \brief Structural solver using Nastran models # \authors Nicola Fonzi, Vittorio Cavalieri, based on the work of David Thomas -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/change_version_number.py b/SU2_PY/change_version_number.py index 9bf03e06d488..babe0e1aeba2 100755 --- a/SU2_PY/change_version_number.py +++ b/SU2_PY/change_version_number.py @@ -3,7 +3,7 @@ ## \file change_version_number.py # \brief Python script for updating the version number of the SU2 suite. # \author A. Aranake -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # @@ -54,8 +54,8 @@ if not options.version: parser.error("new version number must be provided with -v option") -oldvers = '8.4.0 "Harrier"' -oldvers_q = r"8.4.0 \"Harrier\"" +oldvers = '8.5.0 "Harrier"' +oldvers_q = r"8.5.0 \"Harrier\"" newvers = str(options.version) + ' "' + str(options.releasename) + '"' newvers_q = str(options.version) + ' \\"' + str(options.releasename) + '\\"' # oldvers = 'Copyright 2012-2026, SU2' diff --git a/SU2_PY/compute_polar.py b/SU2_PY/compute_polar.py index d696c1d5e6ea..570172ee9f82 100755 --- a/SU2_PY/compute_polar.py +++ b/SU2_PY/compute_polar.py @@ -3,7 +3,7 @@ ## \file Compute_polar.py # \brief Python script for performing polar sweep. # \author E Arad (based on T. Lukaczyk and F. Palacios script) -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/compute_uncertainty.py b/SU2_PY/compute_uncertainty.py index 845d0f1b96b6..cb71d91c5442 100755 --- a/SU2_PY/compute_uncertainty.py +++ b/SU2_PY/compute_uncertainty.py @@ -3,7 +3,7 @@ ## \file compute_uncertainty.py # \brief Python script for performing model-form UQ for SST turbulence model # \author J. Mukhopadhaya -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/continuous_adjoint.py b/SU2_PY/continuous_adjoint.py index 26d42039ccca..1ccf76bcc8ca 100755 --- a/SU2_PY/continuous_adjoint.py +++ b/SU2_PY/continuous_adjoint.py @@ -3,7 +3,7 @@ ## \file continuous_adjoint.py # \brief Python script for continuous adjoint computation using the SU2 suite. # \author F. Palacios, T. Economon, T. Lukaczyk -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/direct_differentiation.py b/SU2_PY/direct_differentiation.py index 513ee265067e..ced3c7038182 100755 --- a/SU2_PY/direct_differentiation.py +++ b/SU2_PY/direct_differentiation.py @@ -3,7 +3,7 @@ ## \file direct_differentiation.py # \brief Python script for doing the direct differentiation computation using the SU2 suite. # \author F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/discrete_adjoint.py b/SU2_PY/discrete_adjoint.py index aeb5e40a30da..e7431e4cd54d 100755 --- a/SU2_PY/discrete_adjoint.py +++ b/SU2_PY/discrete_adjoint.py @@ -3,7 +3,7 @@ ## \file discrete_adjoint.py # \brief Python script for doing the discrete adjoint computation using the SU2 suite. # \author F. Palacios, T. Economon, T. Lukaczyk -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/finite_differences.py b/SU2_PY/finite_differences.py index fbca3581fd03..98ea8e82bdf3 100755 --- a/SU2_PY/finite_differences.py +++ b/SU2_PY/finite_differences.py @@ -3,7 +3,7 @@ ## \file finite_differences.py # \brief Python script for doing the finite differences computation using the SU2 suite. # \author F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/fsi_computation.py b/SU2_PY/fsi_computation.py index 49eceeb5c263..5d0f3f6da401 100755 --- a/SU2_PY/fsi_computation.py +++ b/SU2_PY/fsi_computation.py @@ -3,7 +3,7 @@ ## \file fsi_computation.py # \brief Python wrapper code for FSI computation by coupling a third-party structural solver to SU2. # \authors Nicola Fonzi, Vittorio Cavalieri based on the work of David Thomas -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/merge_solution.py b/SU2_PY/merge_solution.py index 40a5738a5bf2..6ee29f1dc6b8 100755 --- a/SU2_PY/merge_solution.py +++ b/SU2_PY/merge_solution.py @@ -3,7 +3,7 @@ ## \file merge_solution.py # \brief Python script for merging of the solution files. # \author F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/mesh_deformation.py b/SU2_PY/mesh_deformation.py index ce4c261ba9a9..66f72739438e 100755 --- a/SU2_PY/mesh_deformation.py +++ b/SU2_PY/mesh_deformation.py @@ -3,7 +3,7 @@ ## \file mesh_deformation.py # \brief Python script for doing the parallel deformation using SU2_DEF. # \author F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/parallel_computation.py b/SU2_PY/parallel_computation.py index 66cdfffdbcbd..4f8a39346d74 100755 --- a/SU2_PY/parallel_computation.py +++ b/SU2_PY/parallel_computation.py @@ -3,7 +3,7 @@ ## \file parallel_computation.py # \brief Python script for doing the continuous adjoint computation using the SU2 suite. # \author T. Economon, T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/parallel_computation_fsi.py b/SU2_PY/parallel_computation_fsi.py index dab33ad21e40..540ad7adc583 100755 --- a/SU2_PY/parallel_computation_fsi.py +++ b/SU2_PY/parallel_computation_fsi.py @@ -3,7 +3,7 @@ ## \file parallel_computation_fsi.py # \brief Python script for running FSI simulations using the SU2 suite. # \author T. Economon, T. Lukaczyk, F. Palacios, H. Kline, R. Sanchez -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/parse_config.py b/SU2_PY/parse_config.py index 18aa36d0a421..08c0f3563aef 100755 --- a/SU2_PY/parse_config.py +++ b/SU2_PY/parse_config.py @@ -3,7 +3,7 @@ ## \file parse_config.py # \brief Builds a worksheet of all SU2.cpp options # \author A. Aranake, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/profiling.py b/SU2_PY/profiling.py index acd22b5494a7..896c2243347c 100755 --- a/SU2_PY/profiling.py +++ b/SU2_PY/profiling.py @@ -3,7 +3,7 @@ ## \file profiling.py # \brief Python script for postprocessing the SU2 custom profiling (profiling.csv) # \author T. Economon -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/pySU2/pySU2.i b/SU2_PY/pySU2/pySU2.i index b10775f86c65..c27ae29dc4c7 100644 --- a/SU2_PY/pySU2/pySU2.i +++ b/SU2_PY/pySU2/pySU2.i @@ -4,7 +4,7 @@ # \file pySU2.i # \brief Configuration file for the Swig compilation of the Python wrapper. # \author D. Thomas -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/pySU2/pySU2ad.i b/SU2_PY/pySU2/pySU2ad.i index 65ddbfe30369..7959e06231d8 100644 --- a/SU2_PY/pySU2/pySU2ad.i +++ b/SU2_PY/pySU2/pySU2ad.i @@ -4,7 +4,7 @@ # \file pySU2ad.i # \brief Configuration file for the Swig compilation of the Python wrapper. # \author D. Thomas, R. Sanchez -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/set_ffd_design_var.py b/SU2_PY/set_ffd_design_var.py index bf8d98a6b357..f89c7e76154c 100755 --- a/SU2_PY/set_ffd_design_var.py +++ b/SU2_PY/set_ffd_design_var.py @@ -3,7 +3,7 @@ ## \file set_ffd_design_var.py # \brief Python script for automatically generating a list of FFD variables. # \author T. Economon, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/shape_optimization.py b/SU2_PY/shape_optimization.py index 0f29a25c123f..73061fbf13fb 100755 --- a/SU2_PY/shape_optimization.py +++ b/SU2_PY/shape_optimization.py @@ -3,7 +3,7 @@ ## \file shape_optimization.py # \brief Python script for performing the shape optimization. # \author T. Economon, T. Lukaczyk, F. Palacios -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # @@ -106,7 +106,7 @@ def main(): "| ___ _ _ ___ |\n" ) sys.stdout.write( - '| / __| | | |_ ) Release 8.4.0 "Harrier" |\n' + '| / __| | | |_ ) Release 8.5.0 "Harrier" |\n' ) sys.stdout.write( "| \\__ \\ |_| |/ / |\n" diff --git a/SU2_PY/topology_optimization.py b/SU2_PY/topology_optimization.py index 6cdedaca3574..068e006cb878 100755 --- a/SU2_PY/topology_optimization.py +++ b/SU2_PY/topology_optimization.py @@ -2,7 +2,7 @@ ## \file topology_optimization.py # \brief Python script to drive SU2 in topology optimization. -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_PY/updateHistoryMap.py b/SU2_PY/updateHistoryMap.py index dfbd08ef85e5..08418bf5f625 100644 --- a/SU2_PY/updateHistoryMap.py +++ b/SU2_PY/updateHistoryMap.py @@ -3,7 +3,7 @@ ## \file updateHistoryMap.py # \brief Python script for updating the historyMap.py file. # \author T. Albring -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/SU2_SOL/include/SU2_SOL.hpp b/SU2_SOL/include/SU2_SOL.hpp index 098f82dabb5a..db0f099fc72b 100644 --- a/SU2_SOL/include/SU2_SOL.hpp +++ b/SU2_SOL/include/SU2_SOL.hpp @@ -3,7 +3,7 @@ * \brief Headers of the main subroutines of the code SU2_SOL. * The subroutines and functions are in the SU2_SOL.cpp file. * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/SU2_SOL/src/SU2_SOL.cpp b/SU2_SOL/src/SU2_SOL.cpp index 10ad06f231b1..b15112117e30 100644 --- a/SU2_SOL/src/SU2_SOL.cpp +++ b/SU2_SOL/src/SU2_SOL.cpp @@ -2,7 +2,7 @@ * \file SU2_SOL.cpp * \brief Main file for the solution export/conversion code (SU2_SOL). * \author F. Palacios, T. Economon - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/TestCases/TestCase.py b/TestCases/TestCase.py index 274179d63965..df517dff31dc 100644 --- a/TestCases/TestCase.py +++ b/TestCases/TestCase.py @@ -3,7 +3,7 @@ ## \file TestCase.py # \brief Python class for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg b/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg index cc2aa90ddc22..4c031cfeac50 100644 --- a/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg +++ b/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg @@ -5,7 +5,7 @@ % Author: Santiago Padron % % Institution: Stanford University % % Date: 07-09-15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/axisymmetric_rans/air_nozzle/air_nozzle_restart.cfg b/TestCases/axisymmetric_rans/air_nozzle/air_nozzle_restart.cfg index a52cc7152bd7..835681c93dfe 100644 --- a/TestCases/axisymmetric_rans/air_nozzle/air_nozzle_restart.cfg +++ b/TestCases/axisymmetric_rans/air_nozzle/air_nozzle_restart.cfg @@ -4,7 +4,7 @@ % Case description: Axisymmetric supersonic converging-diverging air nozzle % % Author: Florian Dittmann % % Date: 2021.12.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/cgns_writer/config.cfg b/TestCases/cgns_writer/config.cfg index c3f5f5326b95..570628799946 100644 --- a/TestCases/cgns_writer/config.cfg +++ b/TestCases/cgns_writer/config.cfg @@ -5,7 +5,7 @@ % Author: Andrea Rausa % % Institution: Politecnico di Milano % % Date: 12/2/2023 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg b/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg index bc5ee7bb83ca..b4a5b29c580b 100644 --- a/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg +++ b/TestCases/cont_adj_euler/naca0012/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/naca0012/inv_NACA0012_FD.cfg b/TestCases/cont_adj_euler/naca0012/inv_NACA0012_FD.cfg index c3b1f2ff5d5e..00151ee1384c 100644 --- a/TestCases/cont_adj_euler/naca0012/inv_NACA0012_FD.cfg +++ b/TestCases/cont_adj_euler/naca0012/inv_NACA0012_FD.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj.cfg b/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj.cfg index 524643d08cf3..651558b060a8 100644 --- a/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj.cfg +++ b/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj_multizone.cfg b/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj_multizone.cfg index 12ba608c5feb..ef79eb900523 100644 --- a/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj_multizone.cfg +++ b/TestCases/cont_adj_euler/naca0012/inv_NACA0012_discadj_multizone.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/oneram6/inv_ONERAM6.cfg b/TestCases/cont_adj_euler/oneram6/inv_ONERAM6.cfg index d7bd7d7ee6ec..eeef26327a7e 100644 --- a/TestCases/cont_adj_euler/oneram6/inv_ONERAM6.cfg +++ b/TestCases/cont_adj_euler/oneram6/inv_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2015.08.25 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg index 08ab48f4f13d..e3060e2ff84c 100644 --- a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg +++ b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.10.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg index c204b3405507..31e95954953f 100644 --- a/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg +++ b/TestCases/cont_adj_euler/wedge/inv_wedge_ROE_multiobj.cfg @@ -6,7 +6,7 @@ % Author: H.L. Kline, modified from inviscid wedge by Thomas D. Economon % % Institution: Stanford University % % Date: 2018.01.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg b/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg index e247fa9f3759..b2ab1d7e6f8b 100644 --- a/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg +++ b/TestCases/cont_adj_navierstokes/cylinder/lam_cylinder.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.03.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_navierstokes/naca0012_sub/lam_NACA0012.cfg b/TestCases/cont_adj_navierstokes/naca0012_sub/lam_NACA0012.cfg index 45d82e60de12..279d5bdd8726 100644 --- a/TestCases/cont_adj_navierstokes/naca0012_sub/lam_NACA0012.cfg +++ b/TestCases/cont_adj_navierstokes/naca0012_sub/lam_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Jul 18th, 2014 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_navierstokes/naca0012_trans/lam_NACA0012.cfg b/TestCases/cont_adj_navierstokes/naca0012_trans/lam_NACA0012.cfg index f9f984ba8436..d084cf10d1ff 100644 --- a/TestCases/cont_adj_navierstokes/naca0012_trans/lam_NACA0012.cfg +++ b/TestCases/cont_adj_navierstokes/naca0012_trans/lam_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Jul 18th, 2014 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_rans/naca0012/turb_nasa.cfg b/TestCases/cont_adj_rans/naca0012/turb_nasa.cfg index 7b30d1a628b0..f4454aaeaf72 100644 --- a/TestCases/cont_adj_rans/naca0012/turb_nasa.cfg +++ b/TestCases/cont_adj_rans/naca0012/turb_nasa.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.03.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_rans/naca0012/turb_nasa_binary.cfg b/TestCases/cont_adj_rans/naca0012/turb_nasa_binary.cfg index 501e87a08a3a..73754ae464d5 100644 --- a/TestCases/cont_adj_rans/naca0012/turb_nasa_binary.cfg +++ b/TestCases/cont_adj_rans/naca0012/turb_nasa_binary.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.03.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg b/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg index 16c80e3534dd..bbb03a5fc9ed 100644 --- a/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg +++ b/TestCases/cont_adj_rans/oneram6/turb_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.03.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg b/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg index e5a16f081b61..5afab7ac9a24 100644 --- a/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg +++ b/TestCases/cont_adj_rans/rae2822/turb_SA_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/control_surface/inv_ONERAM6_moving.cfg b/TestCases/control_surface/inv_ONERAM6_moving.cfg index ae675c3828da..a06f1eef19f1 100644 --- a/TestCases/control_surface/inv_ONERAM6_moving.cfg +++ b/TestCases/control_surface/inv_ONERAM6_moving.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 09.07.2011 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/control_surface/inv_ONERAM6_setting.cfg b/TestCases/control_surface/inv_ONERAM6_setting.cfg index 4ecf6cfe584a..6a00be3a9ea8 100644 --- a/TestCases/control_surface/inv_ONERAM6_setting.cfg +++ b/TestCases/control_surface/inv_ONERAM6_setting.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 09.07.2011 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/coupled_cht/comp_2d/cht_2d_3cylinders.cfg b/TestCases/coupled_cht/comp_2d/cht_2d_3cylinders.cfg index cbcbb7f8e36a..1facc1adcd41 100644 --- a/TestCases/coupled_cht/comp_2d/cht_2d_3cylinders.cfg +++ b/TestCases/coupled_cht/comp_2d/cht_2d_3cylinders.cfg @@ -5,7 +5,7 @@ % Author: O. Burghardt % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 6, 2020 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/coupled_cht/disc_adj_incomp_2d/cht_2d_3cylinders.cfg b/TestCases/coupled_cht/disc_adj_incomp_2d/cht_2d_3cylinders.cfg index eabdc88d19e9..77bd03cc1257 100644 --- a/TestCases/coupled_cht/disc_adj_incomp_2d/cht_2d_3cylinders.cfg +++ b/TestCases/coupled_cht/disc_adj_incomp_2d/cht_2d_3cylinders.cfg @@ -5,7 +5,7 @@ % Author: O. Burghardt, T. Economon % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: August 8, 2019 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/coupled_cht/incomp_2d/cht_2d_3cylinders.cfg b/TestCases/coupled_cht/incomp_2d/cht_2d_3cylinders.cfg index 212c67e8d4ed..33c19712d1cf 100644 --- a/TestCases/coupled_cht/incomp_2d/cht_2d_3cylinders.cfg +++ b/TestCases/coupled_cht/incomp_2d/cht_2d_3cylinders.cfg @@ -5,7 +5,7 @@ % Author: O. Burghardt, T. Economon % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: August 8, 2019 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/coupled_cht/incomp_2d_unsteady/cht_2d_3cylinders.cfg b/TestCases/coupled_cht/incomp_2d_unsteady/cht_2d_3cylinders.cfg index cbfd27621247..9b89a48e1780 100644 --- a/TestCases/coupled_cht/incomp_2d_unsteady/cht_2d_3cylinders.cfg +++ b/TestCases/coupled_cht/incomp_2d_unsteady/cht_2d_3cylinders.cfg @@ -5,7 +5,7 @@ % Author: O. Burghardt, T. Economon % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: August 8, 2019 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/ddes/flatplate/ddes_flatplate.cfg b/TestCases/ddes/flatplate/ddes_flatplate.cfg index b851ea550523..e740ba3259c6 100644 --- a/TestCases/ddes/flatplate/ddes_flatplate.cfg +++ b/TestCases/ddes/flatplate/ddes_flatplate.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_hex/def_brick_hex.cfg b/TestCases/deformation/brick_hex/def_brick_hex.cfg index 2add3e1a3774..e270b81d7bb9 100755 --- a/TestCases/deformation/brick_hex/def_brick_hex.cfg +++ b/TestCases/deformation/brick_hex/def_brick_hex.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_hex_rans/def_brick_hex_rans.cfg b/TestCases/deformation/brick_hex_rans/def_brick_hex_rans.cfg index 967b8ab5fb73..c58deb91dd50 100755 --- a/TestCases/deformation/brick_hex_rans/def_brick_hex_rans.cfg +++ b/TestCases/deformation/brick_hex_rans/def_brick_hex_rans.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_prism/def_brick_prism.cfg b/TestCases/deformation/brick_prism/def_brick_prism.cfg index fe089c84e4c6..f8302c088af5 100755 --- a/TestCases/deformation/brick_prism/def_brick_prism.cfg +++ b/TestCases/deformation/brick_prism/def_brick_prism.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_prism_rans/def_brick_prism_rans.cfg b/TestCases/deformation/brick_prism_rans/def_brick_prism_rans.cfg index f5ae073078a4..b6d3b7671052 100755 --- a/TestCases/deformation/brick_prism_rans/def_brick_prism_rans.cfg +++ b/TestCases/deformation/brick_prism_rans/def_brick_prism_rans.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_pyra/def_brick_pyra.cfg b/TestCases/deformation/brick_pyra/def_brick_pyra.cfg index a9ec59c28408..28c1acd31eea 100755 --- a/TestCases/deformation/brick_pyra/def_brick_pyra.cfg +++ b/TestCases/deformation/brick_pyra/def_brick_pyra.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/brick_tets/def_brick_tets.cfg b/TestCases/deformation/brick_tets/def_brick_tets.cfg index fb1c1b6544ad..73971a6d5aca 100755 --- a/TestCases/deformation/brick_tets/def_brick_tets.cfg +++ b/TestCases/deformation/brick_tets/def_brick_tets.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.31 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/cylindrical_ffd/def_cylindrical.cfg b/TestCases/deformation/cylindrical_ffd/def_cylindrical.cfg index d4c74a7a714b..ad73611431af 100644 --- a/TestCases/deformation/cylindrical_ffd/def_cylindrical.cfg +++ b/TestCases/deformation/cylindrical_ffd/def_cylindrical.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/intersection_prevention/def_intersect.cfg b/TestCases/deformation/intersection_prevention/def_intersect.cfg index 5eba5d14c9a0..89cda279b04b 100644 --- a/TestCases/deformation/intersection_prevention/def_intersect.cfg +++ b/TestCases/deformation/intersection_prevention/def_intersect.cfg @@ -15,7 +15,7 @@ % Institution: % % Technische Universiteit Eindhoven % % Date: 2021.01.08 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% diff --git a/TestCases/deformation/naca0012/def_NACA0012.cfg b/TestCases/deformation/naca0012/def_NACA0012.cfg index 80887ce2b038..eea06f0554e5 100644 --- a/TestCases/deformation/naca0012/def_NACA0012.cfg +++ b/TestCases/deformation/naca0012/def_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/naca0012/def_NACA0012_camber.cfg b/TestCases/deformation/naca0012/def_NACA0012_camber.cfg index ee3cb32f3fa0..bb0c3434793f 100644 --- a/TestCases/deformation/naca0012/def_NACA0012_camber.cfg +++ b/TestCases/deformation/naca0012/def_NACA0012_camber.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/naca0012/def_NACA0012_rbf.cfg b/TestCases/deformation/naca0012/def_NACA0012_rbf.cfg index 1d37f923372e..fa799f88695c 100644 --- a/TestCases/deformation/naca0012/def_NACA0012_rbf.cfg +++ b/TestCases/deformation/naca0012/def_NACA0012_rbf.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/naca0012/surface_file_NACA0012.cfg b/TestCases/deformation/naca0012/surface_file_NACA0012.cfg index 593576f75459..f1fb00d26cf5 100644 --- a/TestCases/deformation/naca0012/surface_file_NACA0012.cfg +++ b/TestCases/deformation/naca0012/surface_file_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/naca4412/def_NACA4412.cfg b/TestCases/deformation/naca4412/def_NACA4412.cfg index 394580aa2004..d8ce32845015 100644 --- a/TestCases/deformation/naca4412/def_NACA4412.cfg +++ b/TestCases/deformation/naca4412/def_NACA4412.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.05.06 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/rae2822/def_RAE2822.cfg b/TestCases/deformation/rae2822/def_RAE2822.cfg index 34eeae587aea..49617130a4ce 100644 --- a/TestCases/deformation/rae2822/def_RAE2822.cfg +++ b/TestCases/deformation/rae2822/def_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/spherical_ffd/def_spherical.cfg b/TestCases/deformation/spherical_ffd/def_spherical.cfg index c4b4269127f8..ab91f5979548 100644 --- a/TestCases/deformation/spherical_ffd/def_spherical.cfg +++ b/TestCases/deformation/spherical_ffd/def_spherical.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/deformation/spherical_ffd/def_spherical_bspline.cfg b/TestCases/deformation/spherical_ffd/def_spherical_bspline.cfg index fb650074e816..24ba7f421ec3 100644 --- a/TestCases/deformation/spherical_ffd/def_spherical_bspline.cfg +++ b/TestCases/deformation/spherical_ffd/def_spherical_bspline.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg b/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg index 8c4a46b26825..80771a1b2be3 100644 --- a/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg +++ b/TestCases/disc_adj_euler/arina2k/Arina2KRS.cfg @@ -6,7 +6,7 @@ % Author: Jairo Paes Cavalcante Filho [Based on T. Economon & M. Pini work] % % Institution: University of São Paulo % % Date: 8-JUL-2018 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_euler/cylinder3D/inv_cylinder3D.cfg b/TestCases/disc_adj_euler/cylinder3D/inv_cylinder3D.cfg index f79d4dddbe8e..f575e1a10f18 100644 --- a/TestCases/disc_adj_euler/cylinder3D/inv_cylinder3D.cfg +++ b/TestCases/disc_adj_euler/cylinder3D/inv_cylinder3D.cfg @@ -5,7 +5,7 @@ % Author: ___________________________________________________________________ % % Institution: ______________________________________________________________ % % Date: __________ % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_euler/oneram6/inv_ONERAM6.cfg b/TestCases/disc_adj_euler/oneram6/inv_ONERAM6.cfg index 5d8e074f9860..af71bd06f54e 100644 --- a/TestCases/disc_adj_euler/oneram6/inv_ONERAM6.cfg +++ b/TestCases/disc_adj_euler/oneram6/inv_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios, Heather Kline % % Institution: Stanford University % % Date: 01.17.2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_fea/configAD_fem.cfg b/TestCases/disc_adj_fea/configAD_fem.cfg index 9af53320d4a7..133e09f47102 100644 --- a/TestCases/disc_adj_fea/configAD_fem.cfg +++ b/TestCases/disc_adj_fea/configAD_fem.cfg @@ -4,7 +4,7 @@ % Author: R.Sanchez % % Institution: Imperial College London % % Date: 2017.11.29 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/disc_adj_fsi/configFEA.cfg b/TestCases/disc_adj_fsi/configFEA.cfg index f59304b922dd..636d58b93ef9 100644 --- a/TestCases/disc_adj_fsi/configFEA.cfg +++ b/TestCases/disc_adj_fsi/configFEA.cfg @@ -4,7 +4,7 @@ % Author: R.Sanchez % % Institution: Imperial College London % % Date: 2017.11.29 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/disc_adj_fsi/configFlow.cfg b/TestCases/disc_adj_fsi/configFlow.cfg index fbc40b9c629c..5f024e3bf829 100644 --- a/TestCases/disc_adj_fsi/configFlow.cfg +++ b/TestCases/disc_adj_fsi/configFlow.cfg @@ -4,7 +4,7 @@ % Author: R.Sanchez % % Institution: Imperial College London % % Date: 2017.11.29 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= NAVIER_STOKES diff --git a/TestCases/disc_adj_heat/disc_adj_heat.cfg b/TestCases/disc_adj_heat/disc_adj_heat.cfg index 67ed2b44cd3e..9e5a87e3e925 100644 --- a/TestCases/disc_adj_heat/disc_adj_heat.cfg +++ b/TestCases/disc_adj_heat/disc_adj_heat.cfg @@ -6,7 +6,7 @@ % Author: Ole Burghardt % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: November 26th, 2018 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_heat/primal.cfg b/TestCases/disc_adj_heat/primal.cfg index f68f9e92e0f6..10d17c97d1ff 100644 --- a/TestCases/disc_adj_heat/primal.cfg +++ b/TestCases/disc_adj_heat/primal.cfg @@ -5,7 +5,7 @@ % Author: Ole Burghardt % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: November 26th, 2018 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_incomp_euler/naca0012/incomp_NACA0012_disc.cfg b/TestCases/disc_adj_incomp_euler/naca0012/incomp_NACA0012_disc.cfg index 78466f7e488a..3457e4ba368d 100644 --- a/TestCases/disc_adj_incomp_euler/naca0012/incomp_NACA0012_disc.cfg +++ b/TestCases/disc_adj_incomp_euler/naca0012/incomp_NACA0012_disc.cfg @@ -4,7 +4,7 @@ % Case description: Subsonic incompressible inviscid flow around a NACA0012 % % Author: Thomas D. Economon % % Date: 2018.10.30 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_incomp_navierstokes/cylinder/heated_cylinder.cfg b/TestCases/disc_adj_incomp_navierstokes/cylinder/heated_cylinder.cfg index 9b22e78d7dd5..b95db401e5c6 100644 --- a/TestCases/disc_adj_incomp_navierstokes/cylinder/heated_cylinder.cfg +++ b/TestCases/disc_adj_incomp_navierstokes/cylinder/heated_cylinder.cfg @@ -4,7 +4,7 @@ % Case description: Steady incompressible laminar flow past a heated cylinder % % Author: Thomas D. Economon % % Date: 2018.06.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sa.cfg b/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sa.cfg index 2e9fc50fbb54..b58590ab6a60 100755 --- a/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sa.cfg +++ b/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sa.cfg @@ -5,7 +5,7 @@ % http://turbmodels.larc.nasa.gov/naca0012_val_sa.html % % Author: Thomas D. Economon & Francisco Palacios % % Date: 2018.06.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sst.cfg b/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sst.cfg index 979c9e6cc1a8..079d7dcfb2b6 100755 --- a/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sst.cfg +++ b/TestCases/disc_adj_incomp_rans/naca0012/turb_naca0012_sst.cfg @@ -5,7 +5,7 @@ % http://turbmodels.larc.nasa.gov/naca0012_val_sst.html % % Author: Thomas D. Economon & Francisco Palacios % % Date: 2018.06.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/cylinder/cylinder.cfg b/TestCases/disc_adj_rans/cylinder/cylinder.cfg index d5e0e82f2475..f66f5ab9f934 100644 --- a/TestCases/disc_adj_rans/cylinder/cylinder.cfg +++ b/TestCases/disc_adj_rans/cylinder/cylinder.cfg @@ -5,7 +5,7 @@ % Author: Tim Albring % % Institution: TU Kaiserslautern % % Date: 2016.06.14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/cylinder/cylinder_Windowing.cfg b/TestCases/disc_adj_rans/cylinder/cylinder_Windowing.cfg index b2d3312b7934..ba5231d1ba10 100644 --- a/TestCases/disc_adj_rans/cylinder/cylinder_Windowing.cfg +++ b/TestCases/disc_adj_rans/cylinder/cylinder_Windowing.cfg @@ -5,7 +5,7 @@ % Author: Tim Albring % % Institution: TU Kaiserslautern % % Date: 2016.06.14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/cylinder/cylinder_Windowing_AD.cfg b/TestCases/disc_adj_rans/cylinder/cylinder_Windowing_AD.cfg index 8c81793d48ea..c1725bfdd862 100644 --- a/TestCases/disc_adj_rans/cylinder/cylinder_Windowing_AD.cfg +++ b/TestCases/disc_adj_rans/cylinder/cylinder_Windowing_AD.cfg @@ -5,7 +5,7 @@ % Author: Tim Albring % % Institution: TU Kaiserslautern % % Date: 2016.06.14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg b/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg index 12f6a9e1840a..c6f532450890 100644 --- a/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg +++ b/TestCases/disc_adj_rans/cylinder_DT_1ST/cylinder.cfg @@ -5,7 +5,7 @@ % Author: Tim Albring % % Institution: TU Kaiserslautern % % Date: 2016.06.14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/naca0012/naca0012.cfg b/TestCases/disc_adj_rans/naca0012/naca0012.cfg index db9360a58529..92280a9bc942 100644 --- a/TestCases/disc_adj_rans/naca0012/naca0012.cfg +++ b/TestCases/disc_adj_rans/naca0012/naca0012.cfg @@ -5,7 +5,7 @@ % Author: Steffen Schotthöfer % % Institution: TU Kaiserslautern % % Date: Mar 16, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sa.cfg b/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sa.cfg index 4d3e2a3de40c..ac2a0c5b4591 100644 --- a/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sa.cfg +++ b/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sa.cfg @@ -6,7 +6,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sst.cfg b/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sst.cfg index 9b185990bf93..51d5f8d8032b 100644 --- a/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sst.cfg +++ b/TestCases/disc_adj_rans/naca0012/turb_NACA0012_sst.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg b/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg index 2278d0ca3934..fe7c86b29425 100644 --- a/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg +++ b/TestCases/disc_adj_turbomachinery/transonic_stator_2D/transonic_stator.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: 2017.03.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/CRM/inv_CRM_JST.cfg b/TestCases/euler/CRM/inv_CRM_JST.cfg index 3245925c773f..63c749021f29 100644 --- a/TestCases/euler/CRM/inv_CRM_JST.cfg +++ b/TestCases/euler/CRM/inv_CRM_JST.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.10.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/biparabolic/BIPARABOLIC.cfg b/TestCases/euler/biparabolic/BIPARABOLIC.cfg index e3e381dccd0e..5b932b272bfa 100644 --- a/TestCases/euler/biparabolic/BIPARABOLIC.cfg +++ b/TestCases/euler/biparabolic/BIPARABOLIC.cfg @@ -5,7 +5,7 @@ % Author: Trent W. Lukaczyk % % Institution: Stanford University % % Date: 2012.08.16 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/bluntbody/blunt.cfg b/TestCases/euler/bluntbody/blunt.cfg index fda2c10bc8ff..a0e9050b13c6 100644 --- a/TestCases/euler/bluntbody/blunt.cfg +++ b/TestCases/euler/bluntbody/blunt.cfg @@ -5,7 +5,7 @@ % Author: Amit Sachdeva % % Institution: ADSG-VSSC % % Date: 2019.01.23 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/channel/inv_channel.cfg b/TestCases/euler/channel/inv_channel.cfg index a73818a9d89b..5161a04413d6 100644 --- a/TestCases/euler/channel/inv_channel.cfg +++ b/TestCases/euler/channel/inv_channel.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.09.29 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/channel/inv_channel_RK.cfg b/TestCases/euler/channel/inv_channel_RK.cfg index bf374054e770..6d44b6ad5e08 100644 --- a/TestCases/euler/channel/inv_channel_RK.cfg +++ b/TestCases/euler/channel/inv_channel_RK.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.10.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/naca0012/inv_NACA0012.cfg b/TestCases/euler/naca0012/inv_NACA0012.cfg index 4376f85b66b4..ca235bb07a31 100644 --- a/TestCases/euler/naca0012/inv_NACA0012.cfg +++ b/TestCases/euler/naca0012/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg b/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg index 3639613c54ef..63f7c5074dd0 100644 --- a/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg +++ b/TestCases/euler/naca0012/inv_NACA0012_Roe.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.10.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/oneram6/inv_ONERAM6.cfg b/TestCases/euler/oneram6/inv_ONERAM6.cfg index b0a89c7b4896..6517b957871e 100644 --- a/TestCases/euler/oneram6/inv_ONERAM6.cfg +++ b/TestCases/euler/oneram6/inv_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2015.08.25 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/ramp/inv_ramp.cfg b/TestCases/euler/ramp/inv_ramp.cfg index d56bb2c5338a..376fb994bae1 100644 --- a/TestCases/euler/ramp/inv_ramp.cfg +++ b/TestCases/euler/ramp/inv_ramp.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon, Amit Sachdeva % % Institution: Stanford University % % Date: 2023.04.08 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/ramp/inv_ramp_msw.cfg b/TestCases/euler/ramp/inv_ramp_msw.cfg index 45c0c769a22e..90bb7c1a667a 100644 --- a/TestCases/euler/ramp/inv_ramp_msw.cfg +++ b/TestCases/euler/ramp/inv_ramp_msw.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon, Amit Sachdeva % % Institution: Stanford University % % Date: 2023.04.08 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg b/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg index c580bf01003f..39364f2ee371 100644 --- a/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg +++ b/TestCases/euler/turbofan_MFR_coupling/MFR_coupling.cfg @@ -5,7 +5,7 @@ % Author: Angelo Passariello and Mauro Minervino_____________________________ % % Institution: Italian Aerospace Research Centre (CIRA)______________________ % % Date: 16/03/2026 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/euler/wedge/inv_wedge_HLLC.cfg b/TestCases/euler/wedge/inv_wedge_HLLC.cfg index 4af702aab8d3..64fb19673669 100644 --- a/TestCases/euler/wedge/inv_wedge_HLLC.cfg +++ b/TestCases/euler/wedge/inv_wedge_HLLC.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.10.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/fea_fsi/Airfoil_RBF/config.cfg b/TestCases/fea_fsi/Airfoil_RBF/config.cfg index 999e3a74fd30..e99d61355328 100755 --- a/TestCases/fea_fsi/Airfoil_RBF/config.cfg +++ b/TestCases/fea_fsi/Airfoil_RBF/config.cfg @@ -3,7 +3,7 @@ % Case description: 2D airfoil FSI with radial basis function interp. % % Institution: Imperial College London % % Date: 2015.08.12 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER = MULTIPHYSICS diff --git a/TestCases/fea_fsi/Airfoil_RBF/configFEA.cfg b/TestCases/fea_fsi/Airfoil_RBF/configFEA.cfg index f3285cdae44c..be25cc610a9f 100644 --- a/TestCases/fea_fsi/Airfoil_RBF/configFEA.cfg +++ b/TestCases/fea_fsi/Airfoil_RBF/configFEA.cfg @@ -2,7 +2,7 @@ % SU2 configuration file % % Case description: 2D airfoil FSI with radial basis function interp. % % Institution: Imperial College London % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Interface options ---------------------------------------------------- % diff --git a/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg b/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg index 794813944708..a21011c6eca8 100644 --- a/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg +++ b/TestCases/fea_fsi/Airfoil_RBF/configFlow.cfg @@ -2,7 +2,7 @@ % SU2 configuration file % % Case description: 2D airfoil FSI with radial basis function interp. % % Institution: Imperial College London % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Interface options ---------------------------------------------------- % diff --git a/TestCases/fea_fsi/DynBeam_2d/configBeam_2d.cfg b/TestCases/fea_fsi/DynBeam_2d/configBeam_2d.cfg index 368c384adb84..3c7fc863fb2e 100644 --- a/TestCases/fea_fsi/DynBeam_2d/configBeam_2d.cfg +++ b/TestCases/fea_fsi/DynBeam_2d/configBeam_2d.cfg @@ -4,7 +4,7 @@ % Author: Ruben Sanchez Fernandez % % Institution: Imperial College London % % Date: 2016.02.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/fea_fsi/MixElemsKnowles/config.cfg b/TestCases/fea_fsi/MixElemsKnowles/config.cfg index a65bdff2b3e4..895b0d510914 100644 --- a/TestCases/fea_fsi/MixElemsKnowles/config.cfg +++ b/TestCases/fea_fsi/MixElemsKnowles/config.cfg @@ -4,7 +4,7 @@ % Case description: Tip-loaded 3D cantilever beam, mix of element types, % % nonlinear elasticity with Knowles material model. % % Institution: Imperial College London % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/fea_fsi/SquareCyl_Beam/config.cfg b/TestCases/fea_fsi/SquareCyl_Beam/config.cfg index e2125d72a146..1ff72a9cb413 100644 --- a/TestCases/fea_fsi/SquareCyl_Beam/config.cfg +++ b/TestCases/fea_fsi/SquareCyl_Beam/config.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez Fernandez % % Institution: Imperial College London % % Date: 2016.06.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/fea_fsi/StatBeam_3d/configBeam_3d.cfg b/TestCases/fea_fsi/StatBeam_3d/configBeam_3d.cfg index 8a8a69fbbe8a..994ce48caaaf 100644 --- a/TestCases/fea_fsi/StatBeam_3d/configBeam_3d.cfg +++ b/TestCases/fea_fsi/StatBeam_3d/configBeam_3d.cfg @@ -4,7 +4,7 @@ % Author: Ruben Sanchez Fernandez % % Institution: Imperial College London % % Date: 2016.02.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg index d8978b0a2b10..80c3f9cbc988 100644 --- a/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d.cfg @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SU2 configuration file % % Case description: 3D beam with thermal expansion % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg index 740729bd8405..27aa81b73152 100644 --- a/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeamNonlinear_3d_ad.cfg @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SU2 configuration file % % Case description: 3D beam with thermal expansion % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg b/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg index c2f263d2108c..e39f658f51a2 100644 --- a/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg +++ b/TestCases/fea_fsi/ThermalBeam_3d/configBeam_3d.cfg @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SU2 configuration file % % Case description: 3D beam with thermal expansion % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/fea_fsi/VonMissesVerif/linear_plane_strain_2d.cfg b/TestCases/fea_fsi/VonMissesVerif/linear_plane_strain_2d.cfg index 5000a320ff07..97e3e4a50d4b 100644 --- a/TestCases/fea_fsi/VonMissesVerif/linear_plane_strain_2d.cfg +++ b/TestCases/fea_fsi/VonMissesVerif/linear_plane_strain_2d.cfg @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SU2 configuration file % % Case description: Cantilever 2D beam in plane strain. % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg b/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg index c549faf9e1a0..7036e6045f04 100644 --- a/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg +++ b/TestCases/fea_fsi/VonMissesVerif/nonlinear_plane_stress_2d.cfg @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SU2 configuration file % % Case description: Cantilever 2D beam in plane stress. % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/fea_topology/config.cfg b/TestCases/fea_topology/config.cfg index fc037a2949a5..d5f3319689cc 100644 --- a/TestCases/fea_topology/config.cfg +++ b/TestCases/fea_topology/config.cfg @@ -2,7 +2,7 @@ % SU2 configuration file % % Case description: 4 by 1 cantilever optim. for stiff. @ 50% material % % Institution: Imperial College London % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Optimization diff --git a/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg b/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg index d797f2e5d5fe..b9c7cc066677 100644 --- a/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg +++ b/TestCases/fixed_cl/naca0012/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg b/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg index c7db611e3d6e..fdaf77d4d4c2 100644 --- a/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg +++ b/TestCases/fixed_cl/naca0012/inv_NACA0012_ContAdj.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/flamelet/01_laminar_premixed_ch4_flame_cfd/lam_prem_ch4_cfd.cfg b/TestCases/flamelet/01_laminar_premixed_ch4_flame_cfd/lam_prem_ch4_cfd.cfg index 12d6c6bf8615..1670a4fd6866 100644 --- a/TestCases/flamelet/01_laminar_premixed_ch4_flame_cfd/lam_prem_ch4_cfd.cfg +++ b/TestCases/flamelet/01_laminar_premixed_ch4_flame_cfd/lam_prem_ch4_cfd.cfg @@ -4,7 +4,7 @@ % Author: Nijso Beishuizen % % Institution: Bosch Thermotechnology % % Date: 08/09/2021 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_ad.cfg b/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_ad.cfg index 2c8724cafd46..6e8ae51fcb50 100644 --- a/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_ad.cfg +++ b/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_ad.cfg @@ -11,7 +11,7 @@ % Institution b: Bosch Thermotechnology % % % % Date: 02/21/2023 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_dot.cfg b/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_dot.cfg index 120171d8e27c..25d4e54eed85 100644 --- a/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_dot.cfg +++ b/TestCases/flamelet/02_laminar_premixed_ch4_flame_hx_ad/lam_prem_ch4_hx_dot.cfg @@ -11,7 +11,7 @@ % Institution b: Bosch Thermotechnology % % % % Date: 02/21/2023 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/flamelet/05_laminar_premixed_ch4_flame_cfd_axi/lam_prem_ch4_cfd_axi.cfg b/TestCases/flamelet/05_laminar_premixed_ch4_flame_cfd_axi/lam_prem_ch4_cfd_axi.cfg index d8ca68d94fd9..c726da2abe2c 100644 --- a/TestCases/flamelet/05_laminar_premixed_ch4_flame_cfd_axi/lam_prem_ch4_cfd_axi.cfg +++ b/TestCases/flamelet/05_laminar_premixed_ch4_flame_cfd_axi/lam_prem_ch4_cfd_axi.cfg @@ -5,7 +5,7 @@ % Author: Nijso Beishuizen % % Institution: Bosch Thermotechnology % % Date: 08/09/2021 % -% File Version 8.4.0 "Harrier", % +% File Version 8.5.0 "Harrier", % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/flamelet/06_laminar_partial_premixed_ch4_flame_cfd/lam_partial_prem_ch4_cfd.cfg b/TestCases/flamelet/06_laminar_partial_premixed_ch4_flame_cfd/lam_partial_prem_ch4_cfd.cfg index 6d5fded99026..19f2500fd6ce 100644 --- a/TestCases/flamelet/06_laminar_partial_premixed_ch4_flame_cfd/lam_partial_prem_ch4_cfd.cfg +++ b/TestCases/flamelet/06_laminar_partial_premixed_ch4_flame_cfd/lam_partial_prem_ch4_cfd.cfg @@ -4,7 +4,7 @@ % Author: Nijso Beishuizen % % Institution: Bosch Thermotechnology % % Date: 16/06/2023 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/flamelet/08_flame_init_method/flamelet_initialization.py b/TestCases/flamelet/08_flame_init_method/flamelet_initialization.py index ed0e0740ca76..5546ef3634c7 100644 --- a/TestCases/flamelet/08_flame_init_method/flamelet_initialization.py +++ b/TestCases/flamelet/08_flame_init_method/flamelet_initialization.py @@ -2,7 +2,7 @@ ## \file run.py # \brief Flame simulation initialization test case. -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/grad_smooth/naca0012/inv_NACA0012_gradsmooth.cfg b/TestCases/grad_smooth/naca0012/inv_NACA0012_gradsmooth.cfg index 4cbcfc330e86..f4a486feb0fb 100644 --- a/TestCases/grad_smooth/naca0012/inv_NACA0012_gradsmooth.cfg +++ b/TestCases/grad_smooth/naca0012/inv_NACA0012_gradsmooth.cfg @@ -4,7 +4,7 @@ % Case description: Sobolev smoothing for gradient on the NACA 0012 airfoil % % Author: Thomas Dick (TU Kaiserslautern) % % Date: 11.11.2021 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/grad_smooth/oneram6/ONERAM6_gradsmooth.cfg b/TestCases/grad_smooth/oneram6/ONERAM6_gradsmooth.cfg index 6688c77e8160..0f1edca2eaba 100644 --- a/TestCases/grad_smooth/oneram6/ONERAM6_gradsmooth.cfg +++ b/TestCases/grad_smooth/oneram6/ONERAM6_gradsmooth.cfg @@ -4,7 +4,7 @@ % Case description: Sobolev smoothing for gradient on the ONERA M6 wing % % Author: Thomas Dick (TU Kaiserslautern) % % Date: 11.11.2021 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/gust/cosine_gust_zdir.cfg b/TestCases/gust/cosine_gust_zdir.cfg index f997d5bc84dc..37f4ba16e18e 100644 --- a/TestCases/gust/cosine_gust_zdir.cfg +++ b/TestCases/gust/cosine_gust_zdir.cfg @@ -5,7 +5,7 @@ % Author: Arne Voß % % Institution: DLR % % Date: 25.05.2023 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/gust/gust_with_mesh_deformation.cfg b/TestCases/gust/gust_with_mesh_deformation.cfg index ac4f068f345c..d5783b0e9405 100644 --- a/TestCases/gust/gust_with_mesh_deformation.cfg +++ b/TestCases/gust/gust_with_mesh_deformation.cfg @@ -5,7 +5,7 @@ % Author: Arne Voß % % Institution: DLR % % Date: 25.05.2023 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/gust/inv_gust_NACA0012.cfg b/TestCases/gust/inv_gust_NACA0012.cfg index e4b596afbdbf..0eb54b146dca 100644 --- a/TestCases/gust/inv_gust_NACA0012.cfg +++ b/TestCases/gust/inv_gust_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Santiago Padron % % Institution: Stanford University % % Date: 06-26-2015 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/harmonic_balance/HB.cfg b/TestCases/harmonic_balance/HB.cfg index 1459598b0dc0..37e7710ad1d1 100644 --- a/TestCases/harmonic_balance/HB.cfg +++ b/TestCases/harmonic_balance/HB.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.20.09 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg b/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg index ca04c9e44da4..5d7328ab1923 100644 --- a/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg +++ b/TestCases/harmonic_balance/hb_rans_preconditioning/davis.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2016.20.09 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/NACA0012_3D_Hybrid_4thOrder/fem_NACA0012.cfg b/TestCases/hom_euler/NACA0012_3D_Hybrid_4thOrder/fem_NACA0012.cfg index 4242f8db85db..bbceb75720af 100644 --- a/TestCases/hom_euler/NACA0012_3D_Hybrid_4thOrder/fem_NACA0012.cfg +++ b/TestCases/hom_euler/NACA0012_3D_Hybrid_4thOrder/fem_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012.cfg b/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012.cfg index f1e292922c2b..8b580331d0b4 100644 --- a/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012.cfg +++ b/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012_reg.cfg b/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012_reg.cfg index 4db4cbb317db..bb4da27c348c 100644 --- a/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012_reg.cfg +++ b/TestCases/hom_euler/NACA0012_5thOrder/fem_NACA0012_reg.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/Sphere_4thOrder_Hexa/fem_Sphere.cfg b/TestCases/hom_euler/Sphere_4thOrder_Hexa/fem_Sphere.cfg index f4b6849d6f05..a4c780e2337d 100644 --- a/TestCases/hom_euler/Sphere_4thOrder_Hexa/fem_Sphere.cfg +++ b/TestCases/hom_euler/Sphere_4thOrder_Hexa/fem_Sphere.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/Sphere_4thOrder_Tet/fem_Sphere.cfg b/TestCases/hom_euler/Sphere_4thOrder_Tet/fem_Sphere.cfg index 7bcf2804e681..7ec97b9d517f 100644 --- a/TestCases/hom_euler/Sphere_4thOrder_Tet/fem_Sphere.cfg +++ b/TestCases/hom_euler/Sphere_4thOrder_Tet/fem_Sphere.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel.cfg index c5f5b110dc9a..4adec0b09855 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel_Farfield.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel_Farfield.cfg index 7d8001f90d9b..4d3a9aa483f8 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel_Farfield.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly1/fem_SubsonicChannel_Farfield.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel.cfg index 2b2e9114b2e0..a9de3c8f97f0 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel_Farfield.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel_Farfield.cfg index f0efccdbe152..c83e3d397fd9 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel_Farfield.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly2/fem_SubsonicChannel_Farfield.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel.cfg index 3fca2443ae2a..7d701f3b6bf9 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel_Farfield.cfg b/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel_Farfield.cfg index 95e918270774..6b8aa54da021 100644 --- a/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel_Farfield.cfg +++ b/TestCases/hom_euler/SubsonicChannel/nPoly4/fem_SubsonicChannel_Farfield.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/CylinderViscous/nPoly3/fem_Cylinder_reg.cfg b/TestCases/hom_navierstokes/CylinderViscous/nPoly3/fem_Cylinder_reg.cfg index 4ad06da59706..b2443b765c59 100644 --- a/TestCases/hom_navierstokes/CylinderViscous/nPoly3/fem_Cylinder_reg.cfg +++ b/TestCases/hom_navierstokes/CylinderViscous/nPoly3/fem_Cylinder_reg.cfg @@ -5,7 +5,7 @@ % Author: Edwin van der Weide % % Institution: University of Twente % % Date: 2016.07.15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/FlatPlate/nPoly4/lam_flatplate_reg.cfg b/TestCases/hom_navierstokes/FlatPlate/nPoly4/lam_flatplate_reg.cfg index 0e698e4bd34b..754eb3f291a4 100644 --- a/TestCases/hom_navierstokes/FlatPlate/nPoly4/lam_flatplate_reg.cfg +++ b/TestCases/hom_navierstokes/FlatPlate/nPoly4/lam_flatplate_reg.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.09.30 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg.cfg b/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg.cfg index ef39ed82388d..4e6383c41731 100644 --- a/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg.cfg +++ b/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg.cfg @@ -5,7 +5,7 @@ % Author: Edwin van der Weide % % Institution: University of Twente % % Date: 2016.07.15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg_ADER.cfg b/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg_ADER.cfg index a23d95e650a6..9d945149e262 100644 --- a/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg_ADER.cfg +++ b/TestCases/hom_navierstokes/SphereViscous/nPoly3_QuadDominant/fem_Sphere_reg_ADER.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder.cfg b/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder.cfg index e35c9d2a7ab3..ee64fab9e639 100644 --- a/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder.cfg +++ b/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder_ADER.cfg b/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder_ADER.cfg index 73110ce9c093..625979f4aaa8 100644 --- a/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder_ADER.cfg +++ b/TestCases/hom_navierstokes/UnsteadyCylinder/nPoly4/fem_unst_cylinder_ADER.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 5cbd9c0c0452..5ef83e4e9d27 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -3,7 +3,7 @@ ## \file hybrid_regression.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/hybrid_regression_AD.py b/TestCases/hybrid_regression_AD.py index 012d28e681ca..4e1aa84e22c2 100644 --- a/TestCases/hybrid_regression_AD.py +++ b/TestCases/hybrid_regression_AD.py @@ -3,7 +3,7 @@ ## \file hybrid_regression_AD.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg b/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg index 0daddefc19a6..7e1b23e85b15 100644 --- a/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg +++ b/TestCases/incomp_euler/naca0012/incomp_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 09/18/2011 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_euler/nozzle/inv_nozzle.cfg b/TestCases/incomp_euler/nozzle/inv_nozzle.cfg index b4521656a3e4..b9641ab63dea 100644 --- a/TestCases/incomp_euler/nozzle/inv_nozzle.cfg +++ b/TestCases/incomp_euler/nozzle/inv_nozzle.cfg @@ -4,7 +4,7 @@ % Case description: Inv. inc. nozzle with pressure inlet and mass flow outlet % % Author: Thomas D. Economon % % Date: 2018.11.30 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/buoyancy_cavity/lam_buoyancy_cavity.cfg b/TestCases/incomp_navierstokes/buoyancy_cavity/lam_buoyancy_cavity.cfg index 4b96a702c560..9eaa2a3f909b 100644 --- a/TestCases/incomp_navierstokes/buoyancy_cavity/lam_buoyancy_cavity.cfg +++ b/TestCases/incomp_navierstokes/buoyancy_cavity/lam_buoyancy_cavity.cfg @@ -4,7 +4,7 @@ % Case description: Buoyancy-driven flow inside a cavity % % Author: Thomas D. Economon % % Date: 2018.06.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg b/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg index badb9cdd0fa6..08ecc2a02ca0 100644 --- a/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg +++ b/TestCases/incomp_navierstokes/cylinder/incomp_cylinder.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 2012.03.14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/cylinder/poly_cylinder.cfg b/TestCases/incomp_navierstokes/cylinder/poly_cylinder.cfg index 5038a138681a..cefb8dc4dfd8 100644 --- a/TestCases/incomp_navierstokes/cylinder/poly_cylinder.cfg +++ b/TestCases/incomp_navierstokes/cylinder/poly_cylinder.cfg @@ -5,7 +5,7 @@ % custom fluid using polynomial fluid models. % % Author: Thomas D. Economon % % Date: 2018.12.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/cylinder_split/cylinder_split.cfg b/TestCases/incomp_navierstokes/cylinder_split/cylinder_split.cfg index ba25e8ed2809..802ea3255bd0 100644 --- a/TestCases/incomp_navierstokes/cylinder_split/cylinder_split.cfg +++ b/TestCases/incomp_navierstokes/cylinder_split/cylinder_split.cfg @@ -5,7 +5,7 @@ % Author: Nijso Beishuizen % % Institution: TU Eindhoven % % Date: 2025.03.16 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/sphere/sphere.cfg b/TestCases/incomp_navierstokes/sphere/sphere.cfg index 0c37afb18732..0150ea5c0ba3 100644 --- a/TestCases/incomp_navierstokes/sphere/sphere.cfg +++ b/TestCases/incomp_navierstokes/sphere/sphere.cfg @@ -5,7 +5,7 @@ % Author: Nijso Beishuizen % % Institution: Technische Universiteit Eindhoven % % Date: 2024.05.05 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/BC_HeatTransfer.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/BC_HeatTransfer.cfg index 07c33509e592..4d28206e0aa6 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/BC_HeatTransfer.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/BC_HeatTransfer.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/DA_configMaster.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/DA_configMaster.cfg index 6369a8f59c3c..b638e397b36d 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/DA_configMaster.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/DA_configMaster.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/FD_configMaster.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/FD_configMaster.cfg index 6f6b69d31264..206f09ac9260 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/FD_configMaster.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/FD_configMaster.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configFluid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configFluid.cfg index 121888b6c4b7..cd42b0f24447 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configFluid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configFluid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configMaster.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configMaster.cfg index 94e05f206f22..7e1139db9dbb 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configMaster.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configMaster.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configSolid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configSolid.cfg index 71dffb05648c..58fb6c98ceb1 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configSolid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_2d/configSolid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configFluid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configFluid.cfg index 56298552589a..4d4d2a838081 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configFluid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configFluid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 07.06.2019 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configMaster.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configMaster.cfg index 89c00af65f7e..36f122f02b31 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configMaster.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configMaster.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configSolid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configSolid.cfg index 7b73ff2b9889..a91bb55ac18a 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configSolid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/chtPinArray_3d/configSolid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 07.06.2019 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configFluid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configFluid.cfg index bd23f7583354..c0a65c018f30 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configFluid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configFluid.cfg @@ -4,7 +4,7 @@ % Case description: Unit Cell flow around pin array (fluid) % % Author: T. Kattmann % % Date: 2022.02.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configMaster.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configMaster.cfg index b39203de2fa1..dcf1e4c75e86 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configMaster.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configMaster.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: None % % Date: 2022.02.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configSolid.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configSolid.cfg index 73a95d2a4499..fb80650a31ae 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configSolid.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/dp-adjoint_chtPinArray_2d/configSolid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: None % % Date: 2022.02.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/incomp_navierstokes/streamwise_periodic/pipeSlice_3d/sp_pipeSlice_3d_dp_hf_tp.cfg b/TestCases/incomp_navierstokes/streamwise_periodic/pipeSlice_3d/sp_pipeSlice_3d_dp_hf_tp.cfg index 0eaafcfaae36..28f701019d18 100644 --- a/TestCases/incomp_navierstokes/streamwise_periodic/pipeSlice_3d/sp_pipeSlice_3d_dp_hf_tp.cfg +++ b/TestCases/incomp_navierstokes/streamwise_periodic/pipeSlice_3d/sp_pipeSlice_3d_dp_hf_tp.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Robert Bosch GmbH % % Date: 2020.12.14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_rans/naca0012/naca0012.cfg b/TestCases/incomp_rans/naca0012/naca0012.cfg index 5c8a47fcf7d2..1862646ea623 100644 --- a/TestCases/incomp_rans/naca0012/naca0012.cfg +++ b/TestCases/incomp_rans/naca0012/naca0012.cfg @@ -6,7 +6,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_rans/naca0012/naca0012_SST_SUST.cfg b/TestCases/incomp_rans/naca0012/naca0012_SST_SUST.cfg index 36fc685610ce..cc2e3867b2e3 100644 --- a/TestCases/incomp_rans/naca0012/naca0012_SST_SUST.cfg +++ b/TestCases/incomp_rans/naca0012/naca0012_SST_SUST.cfg @@ -6,7 +6,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/incomp_rans/rough_flatplate/rough_flatplate_incomp.cfg b/TestCases/incomp_rans/rough_flatplate/rough_flatplate_incomp.cfg index e71c46237e62..66e0c2888f25 100644 --- a/TestCases/incomp_rans/rough_flatplate/rough_flatplate_incomp.cfg +++ b/TestCases/incomp_rans/rough_flatplate/rough_flatplate_incomp.cfg @@ -5,7 +5,7 @@ % pressure gradient % % Author: Akshay Koodly % % Date: 2020.07.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/mms/dg_ringleb/ringleb_dg.cfg b/TestCases/mms/dg_ringleb/ringleb_dg.cfg index 1c4eaa141937..de3c73634b40 100644 --- a/TestCases/mms/dg_ringleb/ringleb_dg.cfg +++ b/TestCases/mms/dg_ringleb/ringleb_dg.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/mms/fvm_euler/inv_mms_vortex.cfg b/TestCases/mms/fvm_euler/inv_mms_vortex.cfg index 5a71f30d2a67..11f94c6e6a1e 100644 --- a/TestCases/mms/fvm_euler/inv_mms_vortex.cfg +++ b/TestCases/mms/fvm_euler/inv_mms_vortex.cfg @@ -4,7 +4,7 @@ % Case description: Isentropic vortex (FVM) % % Author: Brian Munguía % % Date: 2025.25.06 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/mms/fvm_incomp_euler/inv_mms_jst.cfg b/TestCases/mms/fvm_incomp_euler/inv_mms_jst.cfg index de643ccbc9ff..7480e714e1af 100755 --- a/TestCases/mms/fvm_incomp_euler/inv_mms_jst.cfg +++ b/TestCases/mms/fvm_incomp_euler/inv_mms_jst.cfg @@ -4,7 +4,7 @@ % Case description: Incompressible inviscid MMS test case % % Author: Thomas D. Economon % % Date: 2019.04.09 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/mms/fvm_incomp_navierstokes/lam_mms_fds.cfg b/TestCases/mms/fvm_incomp_navierstokes/lam_mms_fds.cfg index 67959bb6a34a..4340d3cb73f3 100755 --- a/TestCases/mms/fvm_incomp_navierstokes/lam_mms_fds.cfg +++ b/TestCases/mms/fvm_incomp_navierstokes/lam_mms_fds.cfg @@ -4,7 +4,7 @@ % Case description: Incompressible laminar MMS test case % % Author: Thomas D. Economon % % Date: 2019.04.09 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/mms/fvm_navierstokes/lam_mms_roe.cfg b/TestCases/mms/fvm_navierstokes/lam_mms_roe.cfg index 3bf394a49608..d828f9b1f1da 100755 --- a/TestCases/mms/fvm_navierstokes/lam_mms_roe.cfg +++ b/TestCases/mms/fvm_navierstokes/lam_mms_roe.cfg @@ -4,7 +4,7 @@ % Case description: Compressible laminar MMS test case % % Author: Thomas D. Economon % % Date: 2019.04.09 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/moving_wall/cavity/lam_cavity.cfg b/TestCases/moving_wall/cavity/lam_cavity.cfg index 3f838cc38929..03831d2122b4 100644 --- a/TestCases/moving_wall/cavity/lam_cavity.cfg +++ b/TestCases/moving_wall/cavity/lam_cavity.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.10.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg b/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg index 8f282ed5b169..c70e86f9714b 100644 --- a/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg +++ b/TestCases/moving_wall/spinning_cylinder/spinning_cylinder.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.08.21 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg b/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg index df6d8152c6cf..f981139fb0cb 100644 --- a/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg +++ b/TestCases/multiple_ffd/naca0012/inv_NACA0012_ffd.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios, Charanya Venkatesan-Crome % % Institution: Stanford University % % Date: 2018.07.23 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg b/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg index 03125dc00c90..1c175581e3a7 100644 --- a/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg +++ b/TestCases/navierstokes/cylinder/cylinder_lowmach.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.09.30 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/cylinder/lam_cylinder.cfg b/TestCases/navierstokes/cylinder/lam_cylinder.cfg index 140957069afd..70f8692f64b3 100644 --- a/TestCases/navierstokes/cylinder/lam_cylinder.cfg +++ b/TestCases/navierstokes/cylinder/lam_cylinder.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.09.30 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/flatplate/lam_flatplate.cfg b/TestCases/navierstokes/flatplate/lam_flatplate.cfg index a1b95f54aabb..f213b10a0a72 100644 --- a/TestCases/navierstokes/flatplate/lam_flatplate.cfg +++ b/TestCases/navierstokes/flatplate/lam_flatplate.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.09.30 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/flatplate/lam_flatplate_unst.cfg b/TestCases/navierstokes/flatplate/lam_flatplate_unst.cfg index e464a0fd6a2c..753f6a0db9f7 100644 --- a/TestCases/navierstokes/flatplate/lam_flatplate_unst.cfg +++ b/TestCases/navierstokes/flatplate/lam_flatplate_unst.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Test interp. restart, and auto time-step for dual-time % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/navierstokes/naca0012/lam_NACA0012.cfg b/TestCases/navierstokes/naca0012/lam_NACA0012.cfg index 217add418fd0..c6e40834d62c 100644 --- a/TestCases/navierstokes/naca0012/lam_NACA0012.cfg +++ b/TestCases/navierstokes/naca0012/lam_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Sep 28, 2012 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/poiseuille/lam_poiseuille.cfg b/TestCases/navierstokes/poiseuille/lam_poiseuille.cfg index cf39f3e78778..fbdf927f053d 100644 --- a/TestCases/navierstokes/poiseuille/lam_poiseuille.cfg +++ b/TestCases/navierstokes/poiseuille/lam_poiseuille.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2017.02.27 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg b/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg index 62cb94bb1431..87f72e10bf61 100644 --- a/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg +++ b/TestCases/navierstokes/poiseuille/profile_poiseuille.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Robert Bosch LLC % % Date: 2018.03.19 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/LS89/turb_SA_PR.cfg b/TestCases/nicf/LS89/turb_SA_PR.cfg index 35703485f50a..fa3f99d7d068 100644 --- a/TestCases/nicf/LS89/turb_SA_PR.cfg +++ b/TestCases/nicf/LS89/turb_SA_PR.cfg @@ -5,7 +5,7 @@ % Author: M. Pini, S. Vitale % % Institution: Delft University of Technology % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/LS89/turb_SST_PR.cfg b/TestCases/nicf/LS89/turb_SST_PR.cfg index d130326fe128..f41941fe3529 100644 --- a/TestCases/nicf/LS89/turb_SST_PR.cfg +++ b/TestCases/nicf/LS89/turb_SST_PR.cfg @@ -5,7 +5,7 @@ % Author: M. Pini, S. Vitale % % Institution: Delft University of Technology % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/coolprop/fluidModel.cfg b/TestCases/nicf/coolprop/fluidModel.cfg index 7ee009071b0d..a012d0630176 100644 --- a/TestCases/nicf/coolprop/fluidModel.cfg +++ b/TestCases/nicf/coolprop/fluidModel.cfg @@ -6,7 +6,7 @@ % Author: Peng Yan, Alberto Guardone % % Institution: Politecnico di Milano % % Date: 2022.10.8 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/coolprop/transportModel.cfg b/TestCases/nicf/coolprop/transportModel.cfg index a0a0e00f23d0..43aa05ef22d9 100644 --- a/TestCases/nicf/coolprop/transportModel.cfg +++ b/TestCases/nicf/coolprop/transportModel.cfg @@ -6,7 +6,7 @@ % Author: Peng Yan, Alberto Guardone % % Institution: Politecnico di Milano % % Date: 2022.11.26 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/datadriven/datadriven_nozzle.cfg b/TestCases/nicf/datadriven/datadriven_nozzle.cfg index 27145a4687ea..af0c3ce602ea 100644 --- a/TestCases/nicf/datadriven/datadriven_nozzle.cfg +++ b/TestCases/nicf/datadriven/datadriven_nozzle.cfg @@ -7,7 +7,7 @@ % Author: Evert Bunschoten % % Institution: Delft University of Technology % % Date: 2022.10.8 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/edge/edge_PPR.cfg b/TestCases/nicf/edge/edge_PPR.cfg index a757641e6a13..fb4285bd17c7 100644 --- a/TestCases/nicf/edge/edge_PPR.cfg +++ b/TestCases/nicf/edge/edge_PPR.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.09.29 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/edge/edge_VW.cfg b/TestCases/nicf/edge/edge_VW.cfg index bf6d02e44d2c..eddaf6c02f57 100644 --- a/TestCases/nicf/edge/edge_VW.cfg +++ b/TestCases/nicf/edge/edge_VW.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2012.09.29 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_ausm.cfg b/TestCases/nonequilibrium/invwedge/invwedge_ausm.cfg index 3b9d97b73806..756a750b9762 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_ausm.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_ausm.cfg @@ -5,7 +5,7 @@ % Author: C. Garbacz % % Institution: Strathclyde University % % Date: 2020.11.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_ausmplusup2.cfg b/TestCases/nonequilibrium/invwedge/invwedge_ausmplusup2.cfg index e95b09a0e13d..5b9acb9526d7 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_ausmplusup2.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_ausmplusup2.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Mach 5 inviscid flow over a 10deg wedge- AUSM+-Up2 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_lax.cfg b/TestCases/nonequilibrium/invwedge/invwedge_lax.cfg index 6a14490cf5cf..cd8727cc36fd 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_lax.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_lax.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Mach 5 inviscid flow over a 10deg wedge-LAX % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_msw.cfg b/TestCases/nonequilibrium/invwedge/invwedge_msw.cfg index c711835e75b7..3a247d1b8f13 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_msw.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_msw.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Mach 5 inviscid flow over a 10deg wedge-MSW % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_roe.cfg b/TestCases/nonequilibrium/invwedge/invwedge_roe.cfg index 989e34317a0e..7f04d194dad6 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_roe.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_roe.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Mach 5 inviscid flow over a 10deg wedge-ROE % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/invwedge/invwedge_ss_inlet.cfg b/TestCases/nonequilibrium/invwedge/invwedge_ss_inlet.cfg index c163a627fefe..d7080782219b 100644 --- a/TestCases/nonequilibrium/invwedge/invwedge_ss_inlet.cfg +++ b/TestCases/nonequilibrium/invwedge/invwedge_ss_inlet.cfg @@ -5,7 +5,7 @@ % Author: J. Needels % % Institution: Stanford University % % Date: 2022.1.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/thermalbath/finitechemistry/thermalbath.cfg b/TestCases/nonequilibrium/thermalbath/finitechemistry/thermalbath.cfg index 49aeb32aae89..8619213b0fae 100644 --- a/TestCases/nonequilibrium/thermalbath/finitechemistry/thermalbath.cfg +++ b/TestCases/nonequilibrium/thermalbath/finitechemistry/thermalbath.cfg @@ -7,7 +7,7 @@ % Author: C. Garbacz % % Institution: Strathclyde University % % Date: 2019.04.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/thermalbath/frozen/thermalbath_frozen.cfg b/TestCases/nonequilibrium/thermalbath/frozen/thermalbath_frozen.cfg index 385efcf90b68..e607c276fb3d 100644 --- a/TestCases/nonequilibrium/thermalbath/frozen/thermalbath_frozen.cfg +++ b/TestCases/nonequilibrium/thermalbath/frozen/thermalbath_frozen.cfg @@ -6,7 +6,7 @@ % Author: C. Garbacz % % Institution: Strathclyde University % % Date: 2019.04.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/visc_wedge/axi_visccone.cfg b/TestCases/nonequilibrium/visc_wedge/axi_visccone.cfg index c82df231747b..c8f3f23b0171 100644 --- a/TestCases/nonequilibrium/visc_wedge/axi_visccone.cfg +++ b/TestCases/nonequilibrium/visc_wedge/axi_visccone.cfg @@ -4,7 +4,7 @@ % Case description: Mach 5 viscous flow over a 10deg axisymmetric cone % % Author: C. Garbacz % % Institution: Strathclyde University % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/visc_wedge/partial_cat.cfg b/TestCases/nonequilibrium/visc_wedge/partial_cat.cfg index 2747d24ba86b..02d39f2b68db 100644 --- a/TestCases/nonequilibrium/visc_wedge/partial_cat.cfg +++ b/TestCases/nonequilibrium/visc_wedge/partial_cat.cfg @@ -5,7 +5,7 @@ % catalytic walls - gamma model, effeciency = 0.2 % % Author: J. Needels % % Institution: Stanford University % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/visc_wedge/super_cat.cfg b/TestCases/nonequilibrium/visc_wedge/super_cat.cfg index f479cc37fe18..2cbc96e002ef 100644 --- a/TestCases/nonequilibrium/visc_wedge/super_cat.cfg +++ b/TestCases/nonequilibrium/visc_wedge/super_cat.cfg @@ -5,7 +5,7 @@ % catalytic walls - gamma model, effeciency = 0.2 % % Author: J. Needels % % Institution: Stanford University % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nonequilibrium/viscwedge_mpp/viscwedge_mpp.cfg b/TestCases/nonequilibrium/viscwedge_mpp/viscwedge_mpp.cfg index 22bab3213437..5ea5e5204680 100644 --- a/TestCases/nonequilibrium/viscwedge_mpp/viscwedge_mpp.cfg +++ b/TestCases/nonequilibrium/viscwedge_mpp/viscwedge_mpp.cfg @@ -5,7 +5,7 @@ % Author: C. Garbacz % % Institution: Strathclyde University % % Date: 2020.11.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/equivalentarea_naca64206/NACA64206.cfg b/TestCases/optimization_euler/equivalentarea_naca64206/NACA64206.cfg index a0a648a87536..b0cb3700b183 100644 --- a/TestCases/optimization_euler/equivalentarea_naca64206/NACA64206.cfg +++ b/TestCases/optimization_euler/equivalentarea_naca64206/NACA64206.cfg @@ -5,7 +5,7 @@ % Author: Yuki Utsumi % % Institution: Individual % % Date: 2021.08.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg index d30538b6cdde..fe73206fbd5a 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_2surf_1obj.cfg @@ -7,7 +7,7 @@ % Author: H.L. Kline, modified from inviscid wedge by Thomas D. Economon % % Institution: Stanford University % % Date: 2018.01.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg index 9720823cc3c8..77bfc365f31a 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj.cfg @@ -8,7 +8,7 @@ % Author: H.L. Kline, modified from inviscid wedge by Thomas D. Economon % % Institution: Stanford University % % Date: 2018.01.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg index 229c1c99488b..33a7eb40455a 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_1surf.cfg @@ -8,7 +8,7 @@ % Author: H.L. Kline, modified from inviscid wedge by Thomas D. Economon % % Institution: Stanford University % % Date: 2018.01.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg index 3bd6868099d6..bbc023e4fbb9 100644 --- a/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg +++ b/TestCases/optimization_euler/multiobjective_wedge/inv_wedge_ROE_multiobj_combo.cfg @@ -10,7 +10,7 @@ % Author: H.L. Kline, modified from inviscid wedge by Thomas D. Economon % % Institution: Stanford University % % Date: 2018.01.07 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/multipoint_naca0012/inv_NACA0012_multipoint.cfg b/TestCases/optimization_euler/multipoint_naca0012/inv_NACA0012_multipoint.cfg index 857fe48b10b0..bb8e65d3dd50 100644 --- a/TestCases/optimization_euler/multipoint_naca0012/inv_NACA0012_multipoint.cfg +++ b/TestCases/optimization_euler/multipoint_naca0012/inv_NACA0012_multipoint.cfg @@ -5,7 +5,7 @@ % Author: Indiana Stokes % % Institution: % % Date: 2017.07.03 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/pitching_naca64a010/pitching_NACA64A010.cfg b/TestCases/optimization_euler/pitching_naca64a010/pitching_NACA64A010.cfg index e00f144cc94e..b5ca953d9bef 100644 --- a/TestCases/optimization_euler/pitching_naca64a010/pitching_NACA64A010.cfg +++ b/TestCases/optimization_euler/pitching_naca64a010/pitching_NACA64A010.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg b/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg index 149ecaecf91b..f2034a74bfb3 100644 --- a/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg +++ b/TestCases/optimization_euler/pitching_oneram6/pitching_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 09.07.2011 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/rotating_naca0012/rotating_NACA0012.cfg b/TestCases/optimization_euler/rotating_naca0012/rotating_NACA0012.cfg index efa3212084e9..adfc7a0db60f 100644 --- a/TestCases/optimization_euler/rotating_naca0012/rotating_NACA0012.cfg +++ b/TestCases/optimization_euler/rotating_naca0012/rotating_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.03.06 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/steady_inverse_design/inv_NACA0012.cfg b/TestCases/optimization_euler/steady_inverse_design/inv_NACA0012.cfg index b057ab0feba9..8c64ec9e0d74 100644 --- a/TestCases/optimization_euler/steady_inverse_design/inv_NACA0012.cfg +++ b/TestCases/optimization_euler/steady_inverse_design/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg index 6adf74ba02e0..5733a1249173 100644 --- a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg +++ b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_adv.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 2013.09.29 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg index 616ccf3f3b83..0efd0b15b954 100644 --- a/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg +++ b/TestCases/optimization_euler/steady_naca0012/inv_NACA0012_basic.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 2013.09.29 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_adv.cfg b/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_adv.cfg index f9e7084f0183..380daa20a8a6 100644 --- a/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_adv.cfg +++ b/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_adv.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios, Heather Kline % % Institution: Stanford University % % Date: 01.17.2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_basic.cfg b/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_basic.cfg index 0321f2451e02..1577157413b1 100644 --- a/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_basic.cfg +++ b/TestCases/optimization_euler/steady_oneram6/inv_ONERAM6_basic.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios, Heather Kline % % Institution: Stanford University % % Date: 01.17.2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_rans/naca0012/naca0012.cfg b/TestCases/optimization_rans/naca0012/naca0012.cfg index a966567cdf48..cd30961c264c 100644 --- a/TestCases/optimization_rans/naca0012/naca0012.cfg +++ b/TestCases/optimization_rans/naca0012/naca0012.cfg @@ -5,7 +5,7 @@ % Author: Steffen Schotthöfer % % Institution: TU Kaiserslautern % % Date: Mar 16, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg b/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg index f7cde94623c0..b5d1d4d6c74c 100644 --- a/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg +++ b/TestCases/optimization_rans/pitching_naca64a010/turb_NACA64A010.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg b/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg index e73cd0120660..1ac00f1d4fe7 100644 --- a/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg +++ b/TestCases/optimization_rans/pitching_oneram6/turb_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg b/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg index f1af00397697..ce90b4d5267c 100644 --- a/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg +++ b/TestCases/optimization_rans/steady_oneram6/turb_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg b/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg index 19d1737885f1..b01ee0b2e7b9 100644 --- a/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg +++ b/TestCases/optimization_rans/steady_rae2822/turb_SA_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 7f8d47d66bb7..a34cbcaa9d25 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -3,7 +3,7 @@ ## \file parallel_regression.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py index 1f5a93d5e714..812c8aeb9dab 100644 --- a/TestCases/parallel_regression_AD.py +++ b/TestCases/parallel_regression_AD.py @@ -3,7 +3,7 @@ ## \file parallel_regression.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/pastix_support/config.cfg b/TestCases/pastix_support/config.cfg index b13c1f09e641..2dc8ee1442ad 100644 --- a/TestCases/pastix_support/config.cfg +++ b/TestCases/pastix_support/config.cfg @@ -2,7 +2,7 @@ % SU2 configuration file % % PaStiX options (https://solverstack.gitlabpages.inria.fr/pastix/) % % Institution: Imperial College London % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Intro: diff --git a/TestCases/pastix_support/readme.txt b/TestCases/pastix_support/readme.txt index 43c195c463c5..c384d727a7d4 100644 --- a/TestCases/pastix_support/readme.txt +++ b/TestCases/pastix_support/readme.txt @@ -2,7 +2,7 @@ % SU2 configuration file % % PaStiX support build instructions. % % Institution: Imperial College London % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 1 - Build and install dependencies diff --git a/TestCases/polar/naca0012/inv_NACA0012.cfg b/TestCases/polar/naca0012/inv_NACA0012.cfg index f5a3fffd6bb6..269290fc8d59 100644 --- a/TestCases/polar/naca0012/inv_NACA0012.cfg +++ b/TestCases/polar/naca0012/inv_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.11 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/py_wrapper/custom_heat_flux/run_ad.py b/TestCases/py_wrapper/custom_heat_flux/run_ad.py index 09dfb83f21dd..d8f8fbff6fcc 100644 --- a/TestCases/py_wrapper/custom_heat_flux/run_ad.py +++ b/TestCases/py_wrapper/custom_heat_flux/run_ad.py @@ -2,7 +2,7 @@ ## \file run.py # \brief Unsteady adjoint heat transfer case with custom heat flux. -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/custom_heat_source/run.py b/TestCases/py_wrapper/custom_heat_source/run.py index 99a9913a1784..b1aaa1c1fbaa 100644 --- a/TestCases/py_wrapper/custom_heat_source/run.py +++ b/TestCases/py_wrapper/custom_heat_source/run.py @@ -2,7 +2,7 @@ ## \file run.py # \brief Unsteady heat transfer case with custom source term. -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/custom_inlet/run.py b/TestCases/py_wrapper/custom_inlet/run.py index 4cf3d8ee42a6..047b190a6df9 100644 --- a/TestCases/py_wrapper/custom_inlet/run.py +++ b/TestCases/py_wrapper/custom_inlet/run.py @@ -2,7 +2,7 @@ ## \file run.py # \brief Unsteady inlet boundary conditions. -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/custom_load_fea/config.cfg b/TestCases/py_wrapper/custom_load_fea/config.cfg index c2f2cc32b955..e2813d8f98fd 100644 --- a/TestCases/py_wrapper/custom_load_fea/config.cfg +++ b/TestCases/py_wrapper/custom_load_fea/config.cfg @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % SU2 configuration file % % Case description: 2D Beam with custom load via Python wrapper % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% SOLVER= ELASTICITY diff --git a/TestCases/py_wrapper/custom_load_fea/run.py b/TestCases/py_wrapper/custom_load_fea/run.py index 678cafcfb22c..1bcb762296ca 100755 --- a/TestCases/py_wrapper/custom_load_fea/run.py +++ b/TestCases/py_wrapper/custom_load_fea/run.py @@ -2,7 +2,7 @@ ## \file run.py # \brief FEA case with custom load. -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/custom_load_fea/run_ad.py b/TestCases/py_wrapper/custom_load_fea/run_ad.py index 2fb38b7ac31f..2ae2cf1f66bf 100644 --- a/TestCases/py_wrapper/custom_load_fea/run_ad.py +++ b/TestCases/py_wrapper/custom_load_fea/run_ad.py @@ -2,7 +2,7 @@ ## \file run.py # \brief Unsteady adjoint FEA case with custom load. -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/deforming_bump_in_channel/run.py b/TestCases/py_wrapper/deforming_bump_in_channel/run.py index 63c196ae2a61..e98154b3515e 100755 --- a/TestCases/py_wrapper/deforming_bump_in_channel/run.py +++ b/TestCases/py_wrapper/deforming_bump_in_channel/run.py @@ -2,7 +2,7 @@ ## \file run.py # \brief Deforming bump in channel. -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/run_adjoint.py b/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/run_adjoint.py index 6f08496c0611..7873d0a5a216 100755 --- a/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/run_adjoint.py +++ b/TestCases/py_wrapper/disc_adj_fea/flow_load_sens/run_adjoint.py @@ -3,7 +3,7 @@ ## \file run_adjoint.py # \brief Python script to launch SU2_CFD_AD and compute the sensitivity of the FEA problem respect to flow loads. # \author Ruben Sanchez -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/disc_adj_flow/mesh_disp_sens/run_adjoint.py b/TestCases/py_wrapper/disc_adj_flow/mesh_disp_sens/run_adjoint.py index 70e2b6410396..3fdb91e3ab7a 100755 --- a/TestCases/py_wrapper/disc_adj_flow/mesh_disp_sens/run_adjoint.py +++ b/TestCases/py_wrapper/disc_adj_flow/mesh_disp_sens/run_adjoint.py @@ -3,7 +3,7 @@ ## \file run_adjoint.py # \brief Python script to launch SU2_CFD_AD # \author Ruben Sanchez -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/dyn_fsi/run.py b/TestCases/py_wrapper/dyn_fsi/run.py index c2fe338ea894..a9a0756e7a2c 100644 --- a/TestCases/py_wrapper/dyn_fsi/run.py +++ b/TestCases/py_wrapper/dyn_fsi/run.py @@ -2,7 +2,7 @@ ## \file run.py # \brief Unsteady FSI case with custom load. -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg b/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg index f9d1668144e8..4717f476b3af 100644 --- a/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg +++ b/TestCases/py_wrapper/flatPlate_rigidMotion/flatPlate_rigidMotion_Conf.cfg @@ -5,7 +5,7 @@ % Author: ___________________________________________________________________ % % Institution: ______________________________________________________________ % % Date: __________ % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py b/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py index 286f170b0442..042334d9d113 100755 --- a/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py +++ b/TestCases/py_wrapper/flatPlate_rigidMotion/launch_flatPlate_rigidMotion.py @@ -3,7 +3,7 @@ ## \file flatPlate_rigidMotion.py # \brief Python script to launch SU2_CFD with customized unsteady boundary conditions using the Python wrapper. # \author David Thomas -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py b/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py index 8ceff23fc30d..5ba688413be5 100755 --- a/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py +++ b/TestCases/py_wrapper/flatPlate_unsteady_CHT/launch_unsteady_CHT_FlatPlate.py @@ -3,7 +3,7 @@ ## \file launch_unsteady_CHT_FlatPlate.py # \brief Python script to launch SU2_CFD with customized unsteady boundary conditions using the Python wrapper. # \author David Thomas -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg b/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg index 96b457d28c6c..eee33a593a22 100644 --- a/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg +++ b/TestCases/py_wrapper/flatPlate_unsteady_CHT/unsteady_CHT_FlatPlate_Conf.cfg @@ -5,7 +5,7 @@ % Author: David THOMAS % % Institution: University of Liège % % Date: 12/12/2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/py_wrapper/wavy_wall/run_steady.py b/TestCases/py_wrapper/wavy_wall/run_steady.py index b85427f20e86..7e1e8f082aa2 100644 --- a/TestCases/py_wrapper/wavy_wall/run_steady.py +++ b/TestCases/py_wrapper/wavy_wall/run_steady.py @@ -2,7 +2,7 @@ ## \file run.py # \brief Channel with wave-like motion on walls (steady state version). -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/radiation/p1adjoint/configp1adjoint.cfg b/TestCases/radiation/p1adjoint/configp1adjoint.cfg index 567ee4204e1f..17ace403e597 100644 --- a/TestCases/radiation/p1adjoint/configp1adjoint.cfg +++ b/TestCases/radiation/p1adjoint/configp1adjoint.cfg @@ -4,7 +4,7 @@ % Case description: Coupled CFD-RHT adjoint problem % % Author: Ruben Sanchez (TU Kaiserslautern) % % Date: 2020-02-13 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/radiation/p1model/configp1.cfg b/TestCases/radiation/p1model/configp1.cfg index 0a9664d3f3f3..ded556fb25e7 100644 --- a/TestCases/radiation/p1model/configp1.cfg +++ b/TestCases/radiation/p1model/configp1.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: 2019-01-29 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/actuatordisk_bem/actuatordisk_bem.cfg b/TestCases/rans/actuatordisk_bem/actuatordisk_bem.cfg index 886e9313a4cd..7457a9c74547 100644 --- a/TestCases/rans/actuatordisk_bem/actuatordisk_bem.cfg +++ b/TestCases/rans/actuatordisk_bem/actuatordisk_bem.cfg @@ -8,7 +8,7 @@ % Academy of Scientific and Innovative Research, Ghaziabad % % Comments : % % Date: 23/09/2023 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/actuatordisk_variable_load/propeller_variable_load.cfg b/TestCases/rans/actuatordisk_variable_load/propeller_variable_load.cfg index 86dd14a8a9f3..d41526426aef 100644 --- a/TestCases/rans/actuatordisk_variable_load/propeller_variable_load.cfg +++ b/TestCases/rans/actuatordisk_variable_load/propeller_variable_load.cfg @@ -8,7 +8,7 @@ % Comments: Grid file and propeller data courtesy of Mauro Minervino, % % Centro Italiano Ricerche Aerospaziali (CIRA) % % Date: 07/08/2020 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/roughness/bc_aupoix/turb_SST_flatplate_roughBCAupoix.cfg b/TestCases/rans/flatplate/roughness/bc_aupoix/turb_SST_flatplate_roughBCAupoix.cfg index ab4ba54e7116..2beb2c19e9fa 100644 --- a/TestCases/rans/flatplate/roughness/bc_aupoix/turb_SST_flatplate_roughBCAupoix.cfg +++ b/TestCases/rans/flatplate/roughness/bc_aupoix/turb_SST_flatplate_roughBCAupoix.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/roughness/bc_knopp/turb_SST_flatplate_roughBCKnopp.cfg b/TestCases/rans/flatplate/roughness/bc_knopp/turb_SST_flatplate_roughBCKnopp.cfg index a7e5f8432500..65732c9c4295 100644 --- a/TestCases/rans/flatplate/roughness/bc_knopp/turb_SST_flatplate_roughBCKnopp.cfg +++ b/TestCases/rans/flatplate/roughness/bc_knopp/turb_SST_flatplate_roughBCKnopp.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/roughness/bc_wilcox2006/turb_SST_flatplate_roughBCWilcox2006.cfg b/TestCases/rans/flatplate/roughness/bc_wilcox2006/turb_SST_flatplate_roughBCWilcox2006.cfg index 261015e4cae0..1437950e58c1 100644 --- a/TestCases/rans/flatplate/roughness/bc_wilcox2006/turb_SST_flatplate_roughBCWilcox2006.cfg +++ b/TestCases/rans/flatplate/roughness/bc_wilcox2006/turb_SST_flatplate_roughBCWilcox2006.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/turb_SA_flatplate.cfg b/TestCases/rans/flatplate/turb_SA_flatplate.cfg index 36d65f3b0892..3b1070ef6b11 100644 --- a/TestCases/rans/flatplate/turb_SA_flatplate.cfg +++ b/TestCases/rans/flatplate/turb_SA_flatplate.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg b/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg index d0bb2dfb7cd4..b6ef385d7b7c 100644 --- a/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg +++ b/TestCases/rans/flatplate/turb_SA_flatplate_species.cfg @@ -6,7 +6,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechmniek B.V. % % Date: 2021.11.30 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/turb_SST_flatplate.cfg b/TestCases/rans/flatplate/turb_SST_flatplate.cfg index 61446ecab7f3..b4e8e5ab7ef2 100644 --- a/TestCases/rans/flatplate/turb_SST_flatplate.cfg +++ b/TestCases/rans/flatplate/turb_SST_flatplate.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.10 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Sarkar.cfg b/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Sarkar.cfg index 4927880d3a1f..ea0b10229eef 100644 --- a/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Sarkar.cfg +++ b/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Sarkar.cfg @@ -5,7 +5,7 @@ % Author: Sunoh. Kang % % Institution: Pusan National University % % Date: 2024.04.30 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Wilcox.cfg b/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Wilcox.cfg index 5bc0d85cb126..b346fce5261b 100644 --- a/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Wilcox.cfg +++ b/TestCases/rans/flatplate/turb_SST_flatplate_compressibility_Wilcox.cfg @@ -5,7 +5,7 @@ % Author: Sunoh. Kang % % Institution: Pusan National University % % Date: 2024.04.30 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sa.cfg b/TestCases/rans/naca0012/turb_NACA0012_sa.cfg index f44bcfe236df..e6b788eb88b0 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sa.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sa.cfg @@ -6,7 +6,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst.cfg index e1b1f65259e0..838f81c1a795 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_1994-KLm.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_1994-KLm.cfg index cf7b9854ae98..a334a8325c40 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_1994-KLm.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_1994-KLm.cfg @@ -3,7 +3,7 @@ % SU2 configuration file % % Case description: 2D NACA 0012 Airfoil Validation Case (compressible) % % SST-1994-KLm implementation % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_2003-Vm.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_2003-Vm.cfg index a6749e8c89cd..ce6483025055 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_2003-Vm.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_2003-Vm.cfg @@ -3,7 +3,7 @@ % SU2 configuration file % % Case description: 2D NACA 0012 Airfoil Validation Case (compressible) % % SST-2003-Vm implementation % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_2003m.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_2003m.cfg index 9907207fc96d..6c240b96cda9 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_2003m.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_2003m.cfg @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % SU2 configuration file, NACA0012 RANS SST-2003m % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_expliciteuler.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_expliciteuler.cfg index c36318671909..a66613f12a5f 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_expliciteuler.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_expliciteuler.cfg @@ -5,7 +5,7 @@ % Author: Max Aehle % % Institution: TU Kaiserslautern % % Date: Nov 17th, 2021 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg b/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg index 31e9adcc27c6..ce0c0dc1250c 100644 --- a/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg +++ b/TestCases/rans/naca0012/turb_NACA0012_sst_fixedvalues.cfg @@ -5,7 +5,7 @@ % Author: Max Aehle % % Institution: TU Kaiserslautern % % Date: Mar 17th, 2021 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/oneram6/turb_ONERAM6.cfg b/TestCases/rans/oneram6/turb_ONERAM6.cfg index 7b470675113f..c4704cf05b31 100644 --- a/TestCases/rans/oneram6/turb_ONERAM6.cfg +++ b/TestCases/rans/oneram6/turb_ONERAM6.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/oneram6/turb_ONERAM6_nk.cfg b/TestCases/rans/oneram6/turb_ONERAM6_nk.cfg index 8fe97b179542..874da74bd60d 100644 --- a/TestCases/rans/oneram6/turb_ONERAM6_nk.cfg +++ b/TestCases/rans/oneram6/turb_ONERAM6_nk.cfg @@ -2,7 +2,7 @@ % % % SU2 configuration file % % Case description: Turbulent flow, ONERA M6, Newton-Krylov solver % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/oneram6/turb_ONERAM6_vc.cfg b/TestCases/rans/oneram6/turb_ONERAM6_vc.cfg index f6a754c3ad73..dd6987f4c33b 100644 --- a/TestCases/rans/oneram6/turb_ONERAM6_vc.cfg +++ b/TestCases/rans/oneram6/turb_ONERAM6_vc.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2014.06.14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/propeller/propeller.cfg b/TestCases/rans/propeller/propeller.cfg index 4f06a8d2fbb6..590af0a3eff1 100644 --- a/TestCases/rans/propeller/propeller.cfg +++ b/TestCases/rans/propeller/propeller.cfg @@ -5,7 +5,7 @@ % Author: % % Institution: % % Date: % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/rae2822/turb_SA_RAE2822.cfg b/TestCases/rans/rae2822/turb_SA_RAE2822.cfg index 36146c4ac329..b1a67bde3aa2 100644 --- a/TestCases/rans/rae2822/turb_SA_RAE2822.cfg +++ b/TestCases/rans/rae2822/turb_SA_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/rae2822/turb_SST_RAE2822.cfg b/TestCases/rans/rae2822/turb_SST_RAE2822.cfg index 5614fc349e4e..a1676c9e41e8 100644 --- a/TestCases/rans/rae2822/turb_SST_RAE2822.cfg +++ b/TestCases/rans/rae2822/turb_SST_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg b/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg index d89be6514294..781ecd85a948 100644 --- a/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg +++ b/TestCases/rans/rae2822/turb_SST_SUST_RAE2822.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/restart_directdiff_naca/naca0012.cfg b/TestCases/rans/restart_directdiff_naca/naca0012.cfg index 2c529d45cace..482eb3411ce0 100644 --- a/TestCases/rans/restart_directdiff_naca/naca0012.cfg +++ b/TestCases/rans/restart_directdiff_naca/naca0012.cfg @@ -5,7 +5,7 @@ % Author: Steffen Schotthöfer % % Institution: TU Kaiserslautern % % Date: Mar 16, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/s809/trans_s809.cfg b/TestCases/rans/s809/trans_s809.cfg index 4f8e375058ef..7a8376d1054c 100644 --- a/TestCases/rans/s809/trans_s809.cfg +++ b/TestCases/rans/s809/trans_s809.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/s809/turb_S809.cfg b/TestCases/rans/s809/turb_S809.cfg index 277ddd21d834..4b36e58d583a 100644 --- a/TestCases/rans/s809/turb_S809.cfg +++ b/TestCases/rans/s809/turb_S809.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios % % Institution: Stanford University % % Date: 5/15/2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans/vki_turbine/turb_vki.cfg b/TestCases/rans/vki_turbine/turb_vki.cfg index 3727d901461e..ed247e02ee46 100644 --- a/TestCases/rans/vki_turbine/turb_vki.cfg +++ b/TestCases/rans/vki_turbine/turb_vki.cfg @@ -5,7 +5,7 @@ % Author: Francisco Palacios, Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq.cfg index bc37230c88e7..ec4658f7bb49 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_1c.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_1c.cfg index 03875d188730..81a9e1dacb1d 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_1c.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_1c.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_2c.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_2c.cfg index b7405c84f3bd..89f2376c77d6 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_2c.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_2c.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_3c.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_3c.cfg index c7fe5943b968..da5384d257cb 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_3c.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_3c.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c1.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c1.cfg index 871ef1dcb4cc..dbeb210e9b41 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c1.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c1.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c2.cfg b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c2.cfg index 429a3a0d3f29..c2cccbce4ac2 100644 --- a/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c2.cfg +++ b/TestCases/rans_uq/naca0012/turb_NACA0012_uq_p1c2.cfg @@ -6,7 +6,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Feb 18th, 2013 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg b/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg index 6506ca23c270..10ee8f451ea4 100644 --- a/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg +++ b/TestCases/rotating/caradonna_tung/rot_caradonna_tung.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2020.05.24 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/rotating/naca0012/rot_NACA0012.cfg b/TestCases/rotating/naca0012/rot_NACA0012.cfg index 8bce2a0fb307..53fcce6702ad 100644 --- a/TestCases/rotating/naca0012/rot_NACA0012.cfg +++ b/TestCases/rotating/naca0012/rot_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2020.06.06 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index f4719729e511..3fb51f5ec1e4 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -3,7 +3,7 @@ ## \file serial_regression.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py index 16299688c1e5..6d0d424251ad 100644 --- a/TestCases/serial_regression_AD.py +++ b/TestCases/serial_regression_AD.py @@ -3,7 +3,7 @@ ## \file serial_regression.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/sliding_interface/bars_SST_2D/bars.cfg b/TestCases/sliding_interface/bars_SST_2D/bars.cfg index 2b2b569306f0..0c99e82fc006 100644 --- a/TestCases/sliding_interface/bars_SST_2D/bars.cfg +++ b/TestCases/sliding_interface/bars_SST_2D/bars.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg b/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg index f68575c0e41f..1994c5b7a78e 100644 --- a/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg +++ b/TestCases/sliding_interface/bars_SST_2D/zone_1.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg b/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg index bca3e1de8a3a..1ffd7d26d776 100644 --- a/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg +++ b/TestCases/sliding_interface/bars_SST_2D/zone_2.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg b/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg index 287e6d9e4ce3..b7985ff2b5f5 100644 --- a/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg +++ b/TestCases/sliding_interface/bars_SST_2D/zone_3.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg b/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg index aa5bbef31ca0..43a0d9958a54 100644 --- a/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg +++ b/TestCases/sliding_interface/channel_2D/channel_2D_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg b/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg index d84dac415089..c1f9bce93081 100644 --- a/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg +++ b/TestCases/sliding_interface/channel_2D/channel_2D_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_2D/zone_2.cfg b/TestCases/sliding_interface/channel_2D/zone_2.cfg index e6e84f54f537..a0d457969791 100644 --- a/TestCases/sliding_interface/channel_2D/zone_2.cfg +++ b/TestCases/sliding_interface/channel_2D/zone_2.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/channel_2D/zone_3.cfg b/TestCases/sliding_interface/channel_2D/zone_3.cfg index 287e6d9e4ce3..b7985ff2b5f5 100644 --- a/TestCases/sliding_interface/channel_2D/zone_3.cfg +++ b/TestCases/sliding_interface/channel_2D/zone_3.cfg @@ -5,7 +5,7 @@ % Author: A. Rubino % % Institution: Delft University of Technology % % Date: Feb 27th, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg b/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg index 919be6fc980b..ab3988185a31 100644 --- a/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg +++ b/TestCases/sliding_interface/channel_3D/channel_3D_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg b/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg index 7d409db2f2bf..2bca1c0cdccd 100644 --- a/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg +++ b/TestCases/sliding_interface/channel_3D/channel_3D_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_3D/zone_1.cfg b/TestCases/sliding_interface/channel_3D/zone_1.cfg index 60fde5394ec2..6346a8084a1d 100644 --- a/TestCases/sliding_interface/channel_3D/zone_1.cfg +++ b/TestCases/sliding_interface/channel_3D/zone_1.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/channel_3D/zone_2.cfg b/TestCases/sliding_interface/channel_3D/zone_2.cfg index c9025500a22b..5f41192265c5 100644 --- a/TestCases/sliding_interface/channel_3D/zone_2.cfg +++ b/TestCases/sliding_interface/channel_3D/zone_2.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/channel_3D/zone_3.cfg b/TestCases/sliding_interface/channel_3D/zone_3.cfg index 9cdc0b73cd32..aefe2b1b9b4b 100644 --- a/TestCases/sliding_interface/channel_3D/zone_3.cfg +++ b/TestCases/sliding_interface/channel_3D/zone_3.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_steady/config.cfg b/TestCases/sliding_interface/incompressible_steady/config.cfg index 9a90d15f4d3e..b105cc42c256 100644 --- a/TestCases/sliding_interface/incompressible_steady/config.cfg +++ b/TestCases/sliding_interface/incompressible_steady/config.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_steady/configCircle.cfg b/TestCases/sliding_interface/incompressible_steady/configCircle.cfg index 9144b5acf736..4fa61ad13a82 100644 --- a/TestCases/sliding_interface/incompressible_steady/configCircle.cfg +++ b/TestCases/sliding_interface/incompressible_steady/configCircle.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_steady/configOut.cfg b/TestCases/sliding_interface/incompressible_steady/configOut.cfg index 3c18797b7375..cdea13df2c19 100644 --- a/TestCases/sliding_interface/incompressible_steady/configOut.cfg +++ b/TestCases/sliding_interface/incompressible_steady/configOut.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_unsteady/config.cfg b/TestCases/sliding_interface/incompressible_unsteady/config.cfg index 69b0851191ac..708ccc4cec0f 100644 --- a/TestCases/sliding_interface/incompressible_unsteady/config.cfg +++ b/TestCases/sliding_interface/incompressible_unsteady/config.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_unsteady/configCircle.cfg b/TestCases/sliding_interface/incompressible_unsteady/configCircle.cfg index e333712ff777..e10d94fa2028 100644 --- a/TestCases/sliding_interface/incompressible_unsteady/configCircle.cfg +++ b/TestCases/sliding_interface/incompressible_unsteady/configCircle.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/incompressible_unsteady/configOut.cfg b/TestCases/sliding_interface/incompressible_unsteady/configOut.cfg index 07f409b9d38e..043465a4935c 100644 --- a/TestCases/sliding_interface/incompressible_unsteady/configOut.cfg +++ b/TestCases/sliding_interface/incompressible_unsteady/configOut.cfg @@ -5,7 +5,7 @@ % Author: Ruben Sanchez % % Institution: Chair for Scientific Computing, TU Kaiserslautern % % Date: January 28th, 2018 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/pipe/pipe_NN.cfg b/TestCases/sliding_interface/pipe/pipe_NN.cfg index c1aec3c50429..6510c7bb895e 100644 --- a/TestCases/sliding_interface/pipe/pipe_NN.cfg +++ b/TestCases/sliding_interface/pipe/pipe_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/pipe_WA.cfg b/TestCases/sliding_interface/pipe/pipe_WA.cfg index 16ec1b93f1f2..5636d79d9516 100644 --- a/TestCases/sliding_interface/pipe/pipe_WA.cfg +++ b/TestCases/sliding_interface/pipe/pipe_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/zone_1.cfg b/TestCases/sliding_interface/pipe/zone_1.cfg index b898003fd116..12be921c0f35 100644 --- a/TestCases/sliding_interface/pipe/zone_1.cfg +++ b/TestCases/sliding_interface/pipe/zone_1.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/zone_2.cfg b/TestCases/sliding_interface/pipe/zone_2.cfg index 4dde33205152..29d5d7a1da4b 100644 --- a/TestCases/sliding_interface/pipe/zone_2.cfg +++ b/TestCases/sliding_interface/pipe/zone_2.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/zone_3.cfg b/TestCases/sliding_interface/pipe/zone_3.cfg index aca6a76792fe..1b1664325ed6 100644 --- a/TestCases/sliding_interface/pipe/zone_3.cfg +++ b/TestCases/sliding_interface/pipe/zone_3.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/zone_4.cfg b/TestCases/sliding_interface/pipe/zone_4.cfg index 5effd39e45a5..6f9ea96c5062 100644 --- a/TestCases/sliding_interface/pipe/zone_4.cfg +++ b/TestCases/sliding_interface/pipe/zone_4.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/pipe/zone_5.cfg b/TestCases/sliding_interface/pipe/zone_5.cfg index 4dde33205152..29d5d7a1da4b 100644 --- a/TestCases/sliding_interface/pipe/zone_5.cfg +++ b/TestCases/sliding_interface/pipe/zone_5.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg index 39ea7eb2f86b..c2b48ffb197c 100644 --- a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg +++ b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_NN.cfg @@ -5,7 +5,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg index 43e1f4dad843..e81d9656e825 100644 --- a/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg +++ b/TestCases/sliding_interface/rotating_cylinders/rot_cylinders_WA.cfg @@ -5,7 +5,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/single_stage/single_stage_NN.cfg b/TestCases/sliding_interface/single_stage/single_stage_NN.cfg index b95f8b756c49..94e013a49dfe 100644 --- a/TestCases/sliding_interface/single_stage/single_stage_NN.cfg +++ b/TestCases/sliding_interface/single_stage/single_stage_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/single_stage/single_stage_WA.cfg b/TestCases/sliding_interface/single_stage/single_stage_WA.cfg index 5e4f75eeb84e..a6842e1cf634 100644 --- a/TestCases/sliding_interface/single_stage/single_stage_WA.cfg +++ b/TestCases/sliding_interface/single_stage/single_stage_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/single_stage/zone_1.cfg b/TestCases/sliding_interface/single_stage/zone_1.cfg index d91ecfebca4b..20a7b161a2f0 100644 --- a/TestCases/sliding_interface/single_stage/zone_1.cfg +++ b/TestCases/sliding_interface/single_stage/zone_1.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/single_stage/zone_2.cfg b/TestCases/sliding_interface/single_stage/zone_2.cfg index 05c459f8b2d0..929cc9953dbc 100644 --- a/TestCases/sliding_interface/single_stage/zone_2.cfg +++ b/TestCases/sliding_interface/single_stage/zone_2.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg index 473de50943bf..68b35e70bfd2 100644 --- a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg +++ b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg index 31d996710f18..61f2c4f0c8d7 100644 --- a/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg +++ b/TestCases/sliding_interface/supersonic_vortex_shedding/sup_vor_shed_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg index 35da5669832e..650b3dcd54a8 100644 --- a/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg +++ b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_1.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg index 47fdd53969e4..ea356ef401d5 100644 --- a/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg +++ b/TestCases/sliding_interface/supersonic_vortex_shedding/zone_2.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg b/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg index de53eafb26d9..76cacae8cf29 100644 --- a/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg +++ b/TestCases/sliding_interface/uniform_flow/uniform_NN.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg b/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg index c5e290a7eb0f..1dad19a10d6d 100644 --- a/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg +++ b/TestCases/sliding_interface/uniform_flow/uniform_WA.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/sliding_interface/uniform_flow/zone_1.cfg b/TestCases/sliding_interface/uniform_flow/zone_1.cfg index de2a6dd94bd9..75174fbf26f0 100644 --- a/TestCases/sliding_interface/uniform_flow/zone_1.cfg +++ b/TestCases/sliding_interface/uniform_flow/zone_1.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/sliding_interface/uniform_flow/zone_2.cfg b/TestCases/sliding_interface/uniform_flow/zone_2.cfg index b788aa0360d9..0b7e5baef67f 100644 --- a/TestCases/sliding_interface/uniform_flow/zone_2.cfg +++ b/TestCases/sliding_interface/uniform_flow/zone_2.cfg @@ -6,7 +6,7 @@ % Author: G. Gori % % Institution: Politecnico di Milano % % Date: Oct 5th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/solid_heat_conduction/periodic_pins/configSolid.cfg b/TestCases/solid_heat_conduction/periodic_pins/configSolid.cfg index e04e7ba1fc57..7fe2c6350ccc 100644 --- a/TestCases/solid_heat_conduction/periodic_pins/configSolid.cfg +++ b/TestCases/solid_heat_conduction/periodic_pins/configSolid.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechniek B.V. % % Date: 2021.09.27 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/species_transport/multizone/configMaster.cfg b/TestCases/species_transport/multizone/configMaster.cfg index 3e718f40ef7a..0032d931e502 100644 --- a/TestCases/species_transport/multizone/configMaster.cfg +++ b/TestCases/species_transport/multizone/configMaster.cfg @@ -5,7 +5,7 @@ % Author: N. Beishuizen % % Institution: Technische Universiteit Eindhoven % % Date: November 1, 2022 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/species_transport/passive_transport_validation/passive_transport.cfg b/TestCases/species_transport/passive_transport_validation/passive_transport.cfg index e5af42b01d43..a7b4b6ebe72a 100644 --- a/TestCases/species_transport/passive_transport_validation/passive_transport.cfg +++ b/TestCases/species_transport/passive_transport_validation/passive_transport.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechniek B.V % % Date: 2021.10.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi.cfg index 1a00f655317b..d23ef78e0f56 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechniek B.V. % % Date: 2021/10/14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_boundedscalar.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_boundedscalar.cfg index 205009b57fbb..ab18e5854d90 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_boundedscalar.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_boundedscalar.cfg @@ -5,7 +5,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechniek B.V. % % Date: 2021/10/14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel.cfg index d3fd801cf569..1f4e5c0e39a5 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel.cfg @@ -7,7 +7,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/06/15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg index 8dbb6ff6d47f..37e9ee3c1270 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_TURBULENT_MARKERS.cfg @@ -8,7 +8,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/12/05 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_boundedscalar.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_boundedscalar.cfg index c80ec5088350..952347c94757 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_boundedscalar.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_boundedscalar.cfg @@ -7,7 +7,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/06/15 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg index 7d55656b64a4..fd463179b2bd 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2.cfg @@ -8,7 +8,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/09/12 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg index 7feb95f422e5..a7a74b040973 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_heatcapacity_H2_ND.cfg @@ -9,7 +9,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/10/12 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_viscosity.cfg b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_viscosity.cfg index a1117a029654..4511a9a297ac 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_viscosity.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species2_primitiveVenturi_mixingmodel_viscosity.cfg @@ -8,7 +8,7 @@ % Author: Cristopher Morales Ubal % % Institution: Eindhoven University of Technology % % Date: 2022/06/27 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_flux_value.cfg b/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_flux_value.cfg index 01a6818db23a..b510af5ea672 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_flux_value.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_flux_value.cfg @@ -6,7 +6,7 @@ % Author: N. Beishuizen % % Institution: TU Eindhoven % % Date: 17-12-2025 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_inletFile.cfg b/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_inletFile.cfg index cb5eda8a5d5d..be71aea905b8 100644 --- a/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_inletFile.cfg +++ b/TestCases/species_transport/venturi_primitive_3species/species3_primitiveVenturi_inletFile.cfg @@ -6,7 +6,7 @@ % Author: T. Kattmann % % Institution: Bosch Thermotechniek B.V. % % Date: 2021/10/14 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/transition/E387_Airfoil/transitional_BC_model_ConfigFile.cfg b/TestCases/transition/E387_Airfoil/transitional_BC_model_ConfigFile.cfg index f3fbd24ada12..2a441298d61e 100644 --- a/TestCases/transition/E387_Airfoil/transitional_BC_model_ConfigFile.cfg +++ b/TestCases/transition/E387_Airfoil/transitional_BC_model_ConfigFile.cfg @@ -6,7 +6,7 @@ % Institution: TOBB University of Economics and Technology % % TAI-TUSAS Turkish Aerospace Industries % % Date: Oct 10th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/transition/Schubauer_Klebanoff/transitional_BC_model_ConfigFile.cfg b/TestCases/transition/Schubauer_Klebanoff/transitional_BC_model_ConfigFile.cfg index bb91c790f4cd..00bbe05fdd2a 100644 --- a/TestCases/transition/Schubauer_Klebanoff/transitional_BC_model_ConfigFile.cfg +++ b/TestCases/transition/Schubauer_Klebanoff/transitional_BC_model_ConfigFile.cfg @@ -6,7 +6,7 @@ % Institution: TOBB University of Economics and Technology % % TAI-TUSAS Turkish Aerospace Industries % % Date: Oct 10th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/transition/T3A_FlatPlate/transitional_BC_model_ConfigFile.cfg b/TestCases/transition/T3A_FlatPlate/transitional_BC_model_ConfigFile.cfg index 528a86a3a5cb..dc05ddeb1fad 100644 --- a/TestCases/transition/T3A_FlatPlate/transitional_BC_model_ConfigFile.cfg +++ b/TestCases/transition/T3A_FlatPlate/transitional_BC_model_ConfigFile.cfg @@ -6,7 +6,7 @@ % Institution: TOBB University of Economics and Technology % % TAI-TUSAS Turkish Aerospace Industries % % Date: Oct 10th, 2016 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/turbomachinery/APU_turbocharger/Jones_restart.cfg b/TestCases/turbomachinery/APU_turbocharger/Jones_restart.cfg index f817324335a2..ae69f5349a1e 100755 --- a/TestCases/turbomachinery/APU_turbocharger/Jones_restart.cfg +++ b/TestCases/turbomachinery/APU_turbocharger/Jones_restart.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: Jun 28th, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg b/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg index 468b46a3f241..d715b0ae3434 100755 --- a/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg +++ b/TestCases/turbomachinery/axial_stage_2D/Axial_stage2D.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: Feb 28th, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg b/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg index c2bbe1bff6a4..a67a12401cc2 100644 --- a/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg +++ b/TestCases/turbomachinery/axial_stage_2D/zone_1.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: Feb 28th, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg b/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg index 84e8c8bdad32..96bfb3b9541d 100644 --- a/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg +++ b/TestCases/turbomachinery/axial_stage_2D/zone_2.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: Feb 28th, 2017 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/turbomachinery/centrifugal_blade/centrifugal_blade.cfg b/TestCases/turbomachinery/centrifugal_blade/centrifugal_blade.cfg index 87cbcf8b35de..36574a9b0556 100755 --- a/TestCases/turbomachinery/centrifugal_blade/centrifugal_blade.cfg +++ b/TestCases/turbomachinery/centrifugal_blade/centrifugal_blade.cfg @@ -5,7 +5,7 @@ % Author:S. Vitale % % Institution: Delft University of Technology % % Date: Oct 26th, 2015 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/turbomachinery/centrifugal_stage/centrifugal_stage.cfg b/TestCases/turbomachinery/centrifugal_stage/centrifugal_stage.cfg index 77a1caa8e2f1..f00b7311fb23 100755 --- a/TestCases/turbomachinery/centrifugal_stage/centrifugal_stage.cfg +++ b/TestCases/turbomachinery/centrifugal_stage/centrifugal_stage.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: Oct 28th, 2015 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/turbomachinery/multi_interface/multi_interface_rst.cfg b/TestCases/turbomachinery/multi_interface/multi_interface_rst.cfg index 4c9a8a79c2e9..7b45b02cf0fa 100644 --- a/TestCases/turbomachinery/multi_interface/multi_interface_rst.cfg +++ b/TestCases/turbomachinery/multi_interface/multi_interface_rst.cfg @@ -6,7 +6,7 @@ % Author: J. Kelly % % Institution: University of Liverpool % % Date: Sep 5th, 2024 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/turbomachinery/transonic_stator_2D/transonic_stator_restart.cfg b/TestCases/turbomachinery/transonic_stator_2D/transonic_stator_restart.cfg index a858cb47b102..32ef5f4a08dc 100644 --- a/TestCases/turbomachinery/transonic_stator_2D/transonic_stator_restart.cfg +++ b/TestCases/turbomachinery/transonic_stator_2D/transonic_stator_restart.cfg @@ -5,7 +5,7 @@ % Author: S. Vitale % % Institution: Delft University of Technology % % Date: 2017.03.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/tutorials.py b/TestCases/tutorials.py index 8ef91c3ed198..5d7a226aa005 100644 --- a/TestCases/tutorials.py +++ b/TestCases/tutorials.py @@ -3,7 +3,7 @@ ## \file parallel_regression.py # \brief Python script for automated regression testing of SU2 examples # \author A. Aranake, A. Campos, T. Economon, T. Lukaczyk, S. Padron -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg index 6b1e3e7192b5..ae9907558cb8 100644 --- a/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg +++ b/TestCases/unsteady/pitching_naca64a010_euler/pitching_NACA64A010.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg index 8a4e536d4eb0..e90b8a834680 100644 --- a/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg +++ b/TestCases/unsteady/pitching_naca64a010_rans/turb_NACA64A010.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2011.11.02 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg index 9ac2fbaaea39..ed803dfc0435 100644 --- a/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg +++ b/TestCases/unsteady/plunging_naca0012/plunging_NACA0012.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: Jun 12, 2014 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/unsteady/square_cylinder/turb_square.cfg b/TestCases/unsteady/square_cylinder/turb_square.cfg index 6a7b03a71866..7ac26d315a1b 100644 --- a/TestCases/unsteady/square_cylinder/turb_square.cfg +++ b/TestCases/unsteady/square_cylinder/turb_square.cfg @@ -5,7 +5,7 @@ % Author: Thomas D. Economon % % Institution: Stanford University % % Date: 2013.02.25 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/user_defined_functions/lam_flatplate.cfg b/TestCases/user_defined_functions/lam_flatplate.cfg index d3cc32e8f64e..fe335500210e 100644 --- a/TestCases/user_defined_functions/lam_flatplate.cfg +++ b/TestCases/user_defined_functions/lam_flatplate.cfg @@ -4,7 +4,7 @@ % Case description: Test custom outputs and objective function. % % Author: P. Gomes % % Date: 5th Jan 2022 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/vandv.py b/TestCases/vandv.py index 0236cd5ec953..424b877b216e 100644 --- a/TestCases/vandv.py +++ b/TestCases/vandv.py @@ -6,7 +6,7 @@ # - Use the SU2 --dry_run mode for configs of large tests. # - Restart from converged results for medium problems. # - Run small cases (<20s) to convergence. -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/TestCases/vandv/species_transport/sandia_jet/validation.cfg b/TestCases/vandv/species_transport/sandia_jet/validation.cfg index 42fd54500511..0e771c4fcee2 100644 --- a/TestCases/vandv/species_transport/sandia_jet/validation.cfg +++ b/TestCases/vandv/species_transport/sandia_jet/validation.cfg @@ -5,7 +5,7 @@ % Author: S.J.H. Bosmans % % Institution: TU Eindhoven (TU/e) % % Date: 2023/05/04 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/wallfunctions/flatplate/compressible_SA/turb_SA_flatplate.cfg b/TestCases/wallfunctions/flatplate/compressible_SA/turb_SA_flatplate.cfg index 909da7012dd0..0da37ff00f8e 100644 --- a/TestCases/wallfunctions/flatplate/compressible_SA/turb_SA_flatplate.cfg +++ b/TestCases/wallfunctions/flatplate/compressible_SA/turb_SA_flatplate.cfg @@ -6,7 +6,7 @@ % Author: Nijso Beishuizen, T. Kattmann % % Institution: Bosch Thermotechnology % % Date: 2021.09.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/wallfunctions/flatplate/compressible_SST/turb_SST_flatplate.cfg b/TestCases/wallfunctions/flatplate/compressible_SST/turb_SST_flatplate.cfg index 3587bbfb22fb..dcdb268653d5 100644 --- a/TestCases/wallfunctions/flatplate/compressible_SST/turb_SST_flatplate.cfg +++ b/TestCases/wallfunctions/flatplate/compressible_SST/turb_SST_flatplate.cfg @@ -6,7 +6,7 @@ % Author: Nijso Beishuizen, T. Kattmann % % Institution: Bosch Thermotechnology % % Date: 2021.09.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/wallfunctions/flatplate/incompressible_SA/turb_SA_flatplate.cfg b/TestCases/wallfunctions/flatplate/incompressible_SA/turb_SA_flatplate.cfg index 6c926acceab1..20481880abb7 100644 --- a/TestCases/wallfunctions/flatplate/incompressible_SA/turb_SA_flatplate.cfg +++ b/TestCases/wallfunctions/flatplate/incompressible_SA/turb_SA_flatplate.cfg @@ -6,7 +6,7 @@ % Author: Nijso Beishuizen, T. Kattmann % % Institution: Bosch Thermotechnology % % Date: 2021.09.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/TestCases/wallfunctions/flatplate/incompressible_SST/turb_SST_flatplate.cfg b/TestCases/wallfunctions/flatplate/incompressible_SST/turb_SST_flatplate.cfg index 05d20f2b7c4b..8572f178e888 100644 --- a/TestCases/wallfunctions/flatplate/incompressible_SST/turb_SST_flatplate.cfg +++ b/TestCases/wallfunctions/flatplate/incompressible_SST/turb_SST_flatplate.cfg @@ -6,7 +6,7 @@ % Author: Nijso Beishuizen, T. Kattmann % % Institution: Bosch Thermotechnology % % Date: 2021.09.01 % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/UnitTests/Common/containers/CLookupTable_tests.cpp b/UnitTests/Common/containers/CLookupTable_tests.cpp index 826af9640937..6a09ca3db610 100644 --- a/UnitTests/Common/containers/CLookupTable_tests.cpp +++ b/UnitTests/Common/containers/CLookupTable_tests.cpp @@ -2,7 +2,7 @@ * \file CLookupTable_tests.cpp * \brief Unit tests for the lookup table. * \author N. Beishuizen - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/geometry/CGeometry_test.cpp b/UnitTests/Common/geometry/CGeometry_test.cpp index 2e2ddd1cbdf5..cad2157a8040 100644 --- a/UnitTests/Common/geometry/CGeometry_test.cpp +++ b/UnitTests/Common/geometry/CGeometry_test.cpp @@ -2,7 +2,7 @@ * \file CGeometry_tests.cpp * \brief Unit tests for CGeometry. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/geometry/dual_grid/CDualGrid_tests.cpp b/UnitTests/Common/geometry/dual_grid/CDualGrid_tests.cpp index 0fc959af7336..aa4d71fe819b 100644 --- a/UnitTests/Common/geometry/dual_grid/CDualGrid_tests.cpp +++ b/UnitTests/Common/geometry/dual_grid/CDualGrid_tests.cpp @@ -2,7 +2,7 @@ * \file CDualGrid_tests.cpp * \brief Unit tests for the dual grid classes * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/geometry/primal_grid/CPrimalGrid_tests.cpp b/UnitTests/Common/geometry/primal_grid/CPrimalGrid_tests.cpp index 7960b0819c93..6bd1aeb0e35e 100644 --- a/UnitTests/Common/geometry/primal_grid/CPrimalGrid_tests.cpp +++ b/UnitTests/Common/geometry/primal_grid/CPrimalGrid_tests.cpp @@ -2,7 +2,7 @@ * \file CPrimalGrid_tests.cpp * \brief Unit tests for the primal grid classes * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/simple_ad_test.cpp b/UnitTests/Common/simple_ad_test.cpp index 6b9ef658211a..4ce427dd0241 100644 --- a/UnitTests/Common/simple_ad_test.cpp +++ b/UnitTests/Common/simple_ad_test.cpp @@ -4,7 +4,7 @@ * basic functionality, this also serves as a regression test * to make sure that AD works within unit testing. * \author C. Pederson - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/simple_directdiff_test.cpp b/UnitTests/Common/simple_directdiff_test.cpp index 0bd3e7078aed..151bf291a2ed 100644 --- a/UnitTests/Common/simple_directdiff_test.cpp +++ b/UnitTests/Common/simple_directdiff_test.cpp @@ -4,7 +4,7 @@ * basic functionality, this also serves as a regression test * to make sure that DD works within unit testing. * \author C. Pederson - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/toolboxes/C1DInterpolation_tests.cpp b/UnitTests/Common/toolboxes/C1DInterpolation_tests.cpp index e34b44de6923..6cc7e49f3cb3 100644 --- a/UnitTests/Common/toolboxes/C1DInterpolation_tests.cpp +++ b/UnitTests/Common/toolboxes/C1DInterpolation_tests.cpp @@ -2,7 +2,7 @@ * \file C1DInterpolation_tests.cpp * \brief Unit tests for splines and what not. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/toolboxes/CQuasiNewtonInvLeastSquares_tests.cpp b/UnitTests/Common/toolboxes/CQuasiNewtonInvLeastSquares_tests.cpp index 2044c91aad51..64a1fcb88c55 100644 --- a/UnitTests/Common/toolboxes/CQuasiNewtonInvLeastSquares_tests.cpp +++ b/UnitTests/Common/toolboxes/CQuasiNewtonInvLeastSquares_tests.cpp @@ -3,7 +3,7 @@ * \brief Unit tests for the CQuasiNewtonInvLeastSquares class. * Which should find the root of a n-d linear problem in n+1 iterations. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp b/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp index 7f6dc38ad614..4f33e80dfb67 100644 --- a/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp +++ b/UnitTests/Common/toolboxes/multilayer_perceptron/CLookUp_ANN_tests.cpp @@ -2,7 +2,7 @@ * \file CLookUp_ANN_tests.cpp * \brief Unit tests for CLookUp_ANN and CIOMap classes. * \author E.C.Bunschoten - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/toolboxes/multilayer_perceptron/MLP_Jacobian_tests.cpp b/UnitTests/Common/toolboxes/multilayer_perceptron/MLP_Jacobian_tests.cpp index b2277d7d1b5b..c2189d6f4915 100644 --- a/UnitTests/Common/toolboxes/multilayer_perceptron/MLP_Jacobian_tests.cpp +++ b/UnitTests/Common/toolboxes/multilayer_perceptron/MLP_Jacobian_tests.cpp @@ -2,7 +2,7 @@ * \file MLP_Jacobian_tests.cpp * \brief Check if MLP is differentiable * \author E.C.Bunschoten - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/toolboxes/ndflattener_tests.cpp b/UnitTests/Common/toolboxes/ndflattener_tests.cpp index 7a4d3aa8d086..18421eaa7ff2 100644 --- a/UnitTests/Common/toolboxes/ndflattener_tests.cpp +++ b/UnitTests/Common/toolboxes/ndflattener_tests.cpp @@ -2,7 +2,7 @@ * \file ndflattener_tests.cpp * \brief Unit tests for NdFlattener template classes. * \author M. Aehle - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/toolboxes/random_toolbox_tests.cpp b/UnitTests/Common/toolboxes/random_toolbox_tests.cpp index 137ab61a059c..1d2ed4fdc3a9 100644 --- a/UnitTests/Common/toolboxes/random_toolbox_tests.cpp +++ b/UnitTests/Common/toolboxes/random_toolbox_tests.cpp @@ -2,7 +2,7 @@ * \file random_toolbox_tests.cpp * \brief Unit tests for the random toolbox. * \author A. Passariello - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/Common/vectorization.cpp b/UnitTests/Common/vectorization.cpp index 61ae13e3a5c7..a5c679f46569 100644 --- a/UnitTests/Common/vectorization.cpp +++ b/UnitTests/Common/vectorization.cpp @@ -2,7 +2,7 @@ * \file vectorization.cpp * \brief Unit tests for the SIMD type and associated expression templates. * \author P. Gomes - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/SU2_CFD/fluid/CFluidModel_tests.cpp b/UnitTests/SU2_CFD/fluid/CFluidModel_tests.cpp index 2f86d65cfabe..311cf07e2f54 100644 --- a/UnitTests/SU2_CFD/fluid/CFluidModel_tests.cpp +++ b/UnitTests/SU2_CFD/fluid/CFluidModel_tests.cpp @@ -2,7 +2,7 @@ * \file CFluidModel_tests.cpp * \brief Unit tests for the fluid model classes. * \author E.Bunschoten - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/SU2_CFD/fluid/CFluidModel_tests_AD.cpp b/UnitTests/SU2_CFD/fluid/CFluidModel_tests_AD.cpp index e87bbb350299..fdb4ba3acf79 100644 --- a/UnitTests/SU2_CFD/fluid/CFluidModel_tests_AD.cpp +++ b/UnitTests/SU2_CFD/fluid/CFluidModel_tests_AD.cpp @@ -2,7 +2,7 @@ * \file CFluidModel_tests.cpp * \brief AD unit tests for the fluid model classes. * \author E.Bunschoten - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/SU2_CFD/gradients.cpp b/UnitTests/SU2_CFD/gradients.cpp index 2b600008b315..72baf525ca68 100644 --- a/UnitTests/SU2_CFD/gradients.cpp +++ b/UnitTests/SU2_CFD/gradients.cpp @@ -2,7 +2,7 @@ * \file gradients.cpp * \brief Unit tests for gradient calculation. * \author P. Gomes, T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/SU2_CFD/numerics/CNumerics_tests.cpp b/UnitTests/SU2_CFD/numerics/CNumerics_tests.cpp index 64325dd2ef05..40ae1cfb9dfd 100644 --- a/UnitTests/SU2_CFD/numerics/CNumerics_tests.cpp +++ b/UnitTests/SU2_CFD/numerics/CNumerics_tests.cpp @@ -2,7 +2,7 @@ * \file CNumerics_tests.cpp * \brief Unit tests for the numerics classes. * \author C. Pederson - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/SU2_CFD/windowing.cpp b/UnitTests/SU2_CFD/windowing.cpp index 4edc4b72003e..f1deaeea37a2 100644 --- a/UnitTests/SU2_CFD/windowing.cpp +++ b/UnitTests/SU2_CFD/windowing.cpp @@ -2,7 +2,7 @@ * \file windowing.cpp * \brief Unit tests for windowed time-averaging. * \author C. Bauer - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/UnitQuadTestCase.hpp b/UnitTests/UnitQuadTestCase.hpp index 9ddc6ece32cf..d8da75dc0960 100644 --- a/UnitTests/UnitQuadTestCase.hpp +++ b/UnitTests/UnitQuadTestCase.hpp @@ -2,7 +2,7 @@ * \file UnitQuadTestCase.hpp * \brief Simple unit quad test to be used in unit tests. * \author T. Albring - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/UnitTests/test_driver.cpp b/UnitTests/test_driver.cpp index 74a3ea29e484..653551da42ed 100644 --- a/UnitTests/test_driver.cpp +++ b/UnitTests/test_driver.cpp @@ -2,7 +2,7 @@ * \file test_driver.cpp * \brief The main entry point for unit tests (the main()). * \author C. Pederson - * \version 8.4.0 "Harrier" + * \version 8.5.0 "Harrier" * * SU2 Project Website: https://su2code.github.io * diff --git a/config_template.cfg b/config_template.cfg index 0f60b4bb3a40..b801ef95fd32 100644 --- a/config_template.cfg +++ b/config_template.cfg @@ -5,7 +5,7 @@ % Author: ___________________________________________________________________ % % Institution: ______________________________________________________________ % % Date: __________ % -% File Version 8.4.0 "Harrier" % +% File Version 8.5.0 "Harrier" % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/meson.build b/meson.build index 1a0090069887..0620578a1636 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,6 @@ project('SU2', 'c', 'cpp', - version: '8.4.0 "Harrier"', + version: '8.5.0 "Harrier"', meson_version: '>=1.8.2', license: 'LGPL2', default_options: ['buildtype=release', @@ -369,7 +369,7 @@ endif message('''------------------------------------------------------------------------- | ___ _ _ ___ | - | / __| | | |_ ) Release 8.4.0 "Harrier" | + | / __| | | |_ ) Release 8.5.0 "Harrier" | | \__ \ |_| |/ / | | |___/\___//___| Meson Configuration Summary | | | diff --git a/meson.py b/meson.py index 46f54ebf22ec..ca03e47b3f0c 100755 --- a/meson.py +++ b/meson.py @@ -3,7 +3,7 @@ ## \file meson.py # \brief An extended meson script for setting up the environment and running meson # \author T. Albring and F. Poli -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/meson_scripts/init.py b/meson_scripts/init.py index 9e8d18dcde75..7a9ce0f0e887 100755 --- a/meson_scripts/init.py +++ b/meson_scripts/init.py @@ -4,7 +4,7 @@ # \brief Initializes necessary dependencies for SU2 either using git or it # fetches zip files. # \author T. Albring and F. Poli -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/preconfigure.py b/preconfigure.py index 516fd43f903c..16744a48bf02 100755 --- a/preconfigure.py +++ b/preconfigure.py @@ -3,7 +3,7 @@ ## \file preconfigure.py # \brief An preconfigure script for setting up the build environment # \author T. Albring and F. Poli -# \version 8.4.0 "Harrier" +# \version 8.5.0 "Harrier" # # SU2 Project Website: https://su2code.github.io # diff --git a/su2omp.syntax.json b/su2omp.syntax.json index 6fc0943e1f35..eb3f79653e24 100644 --- a/su2omp.syntax.json +++ b/su2omp.syntax.json @@ -4,7 +4,7 @@ "\\file su2omp.syntax.json", "\\brief Definitions for the OpDiLib syntax checker", "\\author J. Blühdorn", - "\\version 8.4.0 \"Harrier\"", + "\\version 8.5.0 \"Harrier\"", "SU2 Project Website: https://su2code.github.io", From 33acd771b46333e21656399f74cf286440797bc8 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Sun, 26 Apr 2026 20:15:49 +0200 Subject: [PATCH 225/229] try to make aeroelastic test more reliable (#2798) * try to make test more reliable * update regressions --- Common/src/geometry/CGeometry.cpp | 4 +-- .../aeroelastic/aeroelastic_NACA64A010.cfg | 25 +++++++++---------- TestCases/hybrid_regression.py | 4 +-- TestCases/parallel_regression.py | 11 +------- TestCases/serial_regression.py | 16 +----------- 5 files changed, 17 insertions(+), 43 deletions(-) diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index ef5b73f2dbbe..258e5612be89 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -4524,7 +4524,7 @@ su2double NearestNeighborDistance(CGeometry* geometry, const CConfig* config, co * Compute an alternative distance based on volume and wall area. ---*/ const auto nDim = geometry->GetnDim(); - su2double Normal[3] = {0, 0, 0}; + su2double Normal[3] = {}; for (auto iMarker = 0u; iMarker < config->GetnMarker_All(); iMarker++) { if (!config->GetViscous_Wall(iMarker)) continue; @@ -4536,7 +4536,7 @@ su2double NearestNeighborDistance(CGeometry* geometry, const CConfig* config, co } } const su2double Vol = geometry->nodes->GetVolume(iPoint) + geometry->nodes->GetPeriodicVolume(iPoint); - return 2 * Vol / GeometryToolbox::Norm(nDim, Normal); + return 2 * Vol / GeometryToolbox::Norm(3, Normal); } } // namespace diff --git a/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg b/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg index 4c031cfeac50..8063bf2adda5 100644 --- a/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg +++ b/TestCases/aeroelastic/aeroelastic_NACA64A010.cfg @@ -70,7 +70,7 @@ CG_LOCATION = 1.8 RADIUS_GYRATION_SQUARED = 3.48 % % Solve the aeroelastic equations every given number of internal iterations -AEROELASTIC_ITER = 3 +AEROELASTIC_ITER = 5 % --------------------------- GUST SIMULATION ---------------------------------% % @@ -100,14 +100,14 @@ MARKER_MONITORING = ( airfoil ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % NUM_METHOD_GRAD= GREEN_GAUSS -CFL_NUMBER= 4.0 +CFL_NUMBER= 100.0 % ------------------------ LINEAR SOLVER DEFINITION ---------------------------% % LINEAR_SOLVER= FGMRES -LINEAR_SOLVER_PREC= LU_SGS +LINEAR_SOLVER_PREC= ILU LINEAR_SOLVER_ERROR= 1E-4 -LINEAR_SOLVER_ITER= 2 +LINEAR_SOLVER_ITER= 5 % -------------------------- MULTIGRID PARAMETERS -----------------------------% % @@ -128,21 +128,20 @@ TIME_DISCRE_FLOW= EULER_IMPLICIT % ------------------------ GRID DEFORMATION PARAMETERS ------------------------% % -DEFORM_LINEAR_SOLVER= FGMRES -DEFORM_LINEAR_SOLVER_PREC= LU_SGS -DEFORM_LINEAR_SOLVER_ITER= 500 +DEFORM_LINEAR_SOLVER= CONJUGATE_GRADIENT +DEFORM_LINEAR_SOLVER_PREC= ILU +DEFORM_LINEAR_SOLVER_ITER= 1000 DEFORM_NONLINEAR_ITER= 1 DEFORM_CONSOLE_OUTPUT= NO -DEFORM_LINEAR_SOLVER_ERROR= 1E-14 +DEFORM_LINEAR_SOLVER_ERROR= 1E-9 DEFORM_STIFFNESS_TYPE= INVERSE_VOLUME % --------------------------- CONVERGENCE PARAMETERS --------------------------% % TIME_ITER= 360 -CONV_RESIDUAL_MINVAL= -8 +CONV_RESIDUAL_MINVAL= -3 CONV_STARTITER= 0 -CONV_CAUCHY_ELEMS= 100 -CONV_CAUCHY_EPS= 1E-10 +CONV_FIELD= REL_RMS_DENSITY, REL_RMS_ENERGY % ------------------------- INPUT/OUTPUT INFORMATION --------------------------% % @@ -155,5 +154,5 @@ RESTART_FILENAME= restart_flow VOLUME_FILENAME= flow SURFACE_FILENAME= surface_flow OUTPUT_WRT_FREQ= 1000 -SCREEN_OUTPUT= (TIME_ITER, INNER_ITER, RMS_DENSITY, RMS_ENERGY, LIFT, DRAG_ON_SURFACE, PLUNGE, PITCH) -OUTPUT_FILES= (RESTART_ASCII) \ No newline at end of file +SCREEN_OUTPUT= (TIME_ITER, INNER_ITER, RMS_DENSITY, RMS_ENERGY, LIFT, DRAG_ON_SURFACE, PLUNGE, PITCH, LINSOL_RESIDUAL) +OUTPUT_FILES= (RESTART_ASCII) diff --git a/TestCases/hybrid_regression.py b/TestCases/hybrid_regression.py index 5ef83e4e9d27..57074e8ea998 100644 --- a/TestCases/hybrid_regression.py +++ b/TestCases/hybrid_regression.py @@ -491,11 +491,9 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.076965, 0.027533, -0.001374, -0.000299] - aeroelastic.test_vals_aarch64 = [0.074170, 0.027590, -0.001579, -0.000160] + aeroelastic.test_vals = [-1.876630, 4.021077, 0.078661, 0.027698, -0.001639, -0.000129, -1.056256] aeroelastic.unsteady = True aeroelastic.enabled_on_cpu_arch = ["x86_64"] # Requires AVX-capable architecture - aeroelastic.enabled_with_tsan = False test_list.append(aeroelastic) # Delayed Detached Eddy Simulation diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index a34cbcaa9d25..7f10753db6e3 100755 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -1050,15 +1050,6 @@ def main(): sine_gust.unsteady = True test_list.append(sine_gust) - # Aeroelastic - aeroelastic = TestCase('aeroelastic') - aeroelastic.cfg_dir = "aeroelastic" - aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" - aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.073686, 0.027423, -0.001644, -0.000125] - aeroelastic.unsteady = True - test_list.append(aeroelastic) - # Delayed Detached Eddy Simulation ddes_flatplate = TestCase('ddes_flatplate') ddes_flatplate.cfg_dir = "ddes/flatplate" @@ -1500,7 +1491,7 @@ def main(): pywrapper_aeroelastic.cfg_dir = "aeroelastic" pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [0.073686, 0.027423, -0.001644, -0.000125] + pywrapper_aeroelastic.test_vals = [-1.876634, 4.021068, 0.081002, 0.027610, -0.001642, -0.000127, -0.966944] pywrapper_aeroelastic.command = TestCase.Command("mpirun -np 2", "SU2_CFD.py", "--parallel -f") pywrapper_aeroelastic.unsteady = True test_list.append(pywrapper_aeroelastic) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 3fb51f5ec1e4..279923612d6b 100755 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -798,7 +798,7 @@ def main(): aeroelastic.cfg_dir = "aeroelastic" aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" aeroelastic.test_iter = 2 - aeroelastic.test_vals = [0.073896, 0.027450, -0.001638, -0.000130] + aeroelastic.test_vals = [-1.876629, 4.021078, 0.079049, 0.027650, -0.001639, -0.000129, -1.140500] aeroelastic.unsteady = True test_list.append(aeroelastic) @@ -1588,20 +1588,6 @@ def main(): test_list.append(pywrapper_square_cylinder) pass_list.append(pywrapper_square_cylinder.run_test(args.tsan, args.asan)) - # Aeroelastic - pywrapper_aeroelastic = TestCase('pywrapper_aeroelastic') - pywrapper_aeroelastic.cfg_dir = "aeroelastic" - pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg" - pywrapper_aeroelastic.test_iter = 2 - pywrapper_aeroelastic.test_vals = [0.075274, 0.027537, -0.001640, -0.000129] - pywrapper_aeroelastic.command = TestCase.Command(exec = "SU2_CFD.py", param = "-f") - pywrapper_aeroelastic.timeout = 1600 - pywrapper_aeroelastic.tol = 0.01 - pywrapper_aeroelastic.unsteady = True - pywrapper_aeroelastic.enabled_with_asan = False - test_list.append(pywrapper_aeroelastic) - pass_list.append(pywrapper_aeroelastic.run_test(args.tsan, args.asan)) - # FSI, 2d pywrapper_fsi2d = TestCase('pywrapper_fsi2d') pywrapper_fsi2d.cfg_dir = "fea_fsi/WallChannel_2d" From 11acf02a0a35bb9b4d8ebed784c79e0c2ec92751 Mon Sep 17 00:00:00 2001 From: Pedro Gomes <38071223+pcarruscag@users.noreply.github.com> Date: Mon, 27 Apr 2026 16:05:42 +0200 Subject: [PATCH 226/229] don't use werror for ARM (#2799) --- .github/workflows/regression.yml | 27 +++++++++++++++------------ SU2_CFD/src/solvers/CEulerSolver.cpp | 2 +- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index d4dd5f00b9dd..5b4bf0778e8b 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -24,14 +24,17 @@ jobs: outputs: flags: ${{ steps.compute.outputs.flags }} + werror: ${{ steps.compute.outputs.flags }} steps: - id: compute run: | if [[ "${{ inputs.runner || 'ubuntu-latest' }}" == *arm* ]]; then echo "flags=" >> $GITHUB_OUTPUT + echo "werror=" >> $GITHUB_OUTPUT else echo "flags=-Dcpu-arch=skylake" >> $GITHUB_OUTPUT + echo "werror=--werror" >> $GITHUB_OUTPUT fi build: @@ -45,23 +48,23 @@ jobs: - config_set: BaseMPI flags: '${{ needs.setup.outputs.flags }} -Denable-pywrapper=true -Denable-coolprop=true -Denable-mpp=true -Dinstall-mpp=true -Denable-mlpcpp=true -Denable-tests=true --warnlevel=2' - config_set: ReverseMPI - flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Denable-pywrapper=true -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Denable-pywrapper=true -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 ${{ needs.setup.outputs.werror }}' - config_set: ForwardMPI - flags: '${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Denable-tests=true -Denable-mlpcpp=true --warnlevel=3 ${{ needs.setup.outputs.werror }}' - config_set: BaseNoMPI - flags: '${{ needs.setup.outputs.flags }} -Denable-pywrapper=true -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true -Denable-tests=true --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-pywrapper=true -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true -Denable-tests=true --warnlevel=3 ${{ needs.setup.outputs.werror }}' - config_set: ReverseNoMPI - flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 ${{ needs.setup.outputs.werror }}' - config_set: ForwardNoMPI - flags: '${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-tests=true --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-tests=true --warnlevel=3 ${{ needs.setup.outputs.werror }}' - config_set: ReverseTagNoMPI - flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 --werror -Dcodi-tape=Tag' + flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled -Denable-pywrapper=true -Denable-tests=true --warnlevel=3 ${{ needs.setup.outputs.werror }} -Dcodi-tape=Tag' - config_set: BaseOMP - flags: '${{ needs.setup.outputs.flags }} -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 ${{ needs.setup.outputs.werror }}' - config_set: ReverseOMP - flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 ${{ needs.setup.outputs.werror }}' - config_set: ForwardOMP - flags: '${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + flags: '${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 ${{ needs.setup.outputs.werror }}' runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files @@ -105,7 +108,7 @@ jobs: - config_set: ReverseOMP-tsan flags: '--buildtype=debugoptimized ${{ needs.setup.outputs.flags }} -Denable-autodiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-tecio=false --warnlevel=3' #- config_set: ForwardOMP-tsan - # flags: '--buildtype=debug ${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 --werror' + # flags: '--buildtype=debug ${{ needs.setup.outputs.flags }} -Denable-directdiff=true -Denable-normal=false -Dwith-omp=true -Denable-mixedprec=true -Denable-pywrapper=true -Denable-tecio=false --warnlevel=3 ${{ needs.setup.outputs.werror }}' runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files @@ -144,9 +147,9 @@ jobs: config_set: [BaseNoMPI-asan, ReverseNoMPI-asan] include: - config_set: BaseNoMPI-asan - flags: '--buildtype=debugoptimized ${{ needs.setup.outputs.flags }} -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true --warnlevel=3 --werror' + flags: '--buildtype=debugoptimized ${{ needs.setup.outputs.flags }} -Denable-openblas=true -Dwith-mpi=disabled -Denable-mlpcpp=true --warnlevel=3 ${{ needs.setup.outputs.werror }}' - config_set: ReverseNoMPI-asan - flags: '--buildtype=debugoptimized ${{ needs.setup.outputs.flags }} --optimization=1 -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled --warnlevel=3 --werror' + flags: '--buildtype=debugoptimized ${{ needs.setup.outputs.flags }} --optimization=1 -Denable-autodiff=true -Denable-normal=false -Dwith-mpi=disabled --warnlevel=3 ${{ needs.setup.outputs.werror }}' runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files diff --git a/SU2_CFD/src/solvers/CEulerSolver.cpp b/SU2_CFD/src/solvers/CEulerSolver.cpp index bf8b34624935..c58f96c3e4ef 100644 --- a/SU2_CFD/src/solvers/CEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CEulerSolver.cpp @@ -1515,7 +1515,7 @@ void CEulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_c Velocity_Cyl[1] = sin(Beta)*Mach_Cyl*Mach2Vel_Cyl; Velocity_Cyl[2] = sin(Alpha)*cos(Beta)*Mach_Cyl*Mach2Vel_Cyl; - ModVel_Cyl = GeometryToolbox::Norm(nDim, Velocity_Cyl); + ModVel_Cyl = GeometryToolbox::Norm(3, Velocity_Cyl); if (config->GetViscous()) { if (config->GetSystemMeasurements() == SI) { T_ref = 273.15; S = 110.4; Mu_ref = 1.716E-5; } From 6f34c80110517e4975c8a85521fa35c1979f9172 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 16:55:19 +0200 Subject: [PATCH 227/229] Bump actions/upload-artifact from 5 to 7 (#2743) [skip-ci] --- .github/workflows/regression.yml | 6 +++--- .github/workflows/release-management.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 5b4bf0778e8b..98f44b4255bc 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -85,7 +85,7 @@ jobs: - name: Compress binaries run: tar -zcvf install_bin.tgz install/* - name: Upload Binaries - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v7 with: name: ${{ matrix.config_set }} path: install_bin.tgz @@ -129,7 +129,7 @@ jobs: - name: Compress binaries run: tar -zcvf install_bin.tgz install/* - name: Upload Binaries - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v7 with: name: ${{ matrix.config_set }} path: install_bin.tgz @@ -168,7 +168,7 @@ jobs: - name: Compress binaries run: tar -zcvf install_bin.tgz install/* - name: Upload Binaries - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v7 with: name: ${{ matrix.config_set }} path: install_bin.tgz diff --git a/.github/workflows/release-management.yml b/.github/workflows/release-management.yml index cb9dd60b98e0..b81e431fd3d9 100644 --- a/.github/workflows/release-management.yml +++ b/.github/workflows/release-management.yml @@ -44,7 +44,7 @@ jobs: zip -r ../${{matrix.os_bin}}.zip bin/* # Uploads binaries as artifacts (just as a backup) - name: Upload Binaries - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v7 with: name: ${{matrix.os_bin}} path: ${{matrix.os_bin}}.zip From aae11fcd52aaf2b56a334deebb9bb11cd30f0c0a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 16:57:02 +0200 Subject: [PATCH 228/229] Bump actions/cache from 4 to 5 (#2702) [skip-ci] --- .github/workflows/regression.yml | 6 +++--- .github/workflows/release-management.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 98f44b4255bc..65ee6c6b62b2 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -68,7 +68,7 @@ jobs: runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ccache key: ${{ matrix.config_set }}-${{ github.sha }} @@ -112,7 +112,7 @@ jobs: runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ccache key: ${{ matrix.config_set }}-${{ github.sha }} @@ -153,7 +153,7 @@ jobs: runs-on: ${{ inputs.runner || 'ubuntu-latest' }} steps: - name: Cache Object Files - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ccache key: ${{ matrix.config_set }}-${{ github.sha }} diff --git a/.github/workflows/release-management.yml b/.github/workflows/release-management.yml index b81e431fd3d9..8acd87d4b2dd 100644 --- a/.github/workflows/release-management.yml +++ b/.github/workflows/release-management.yml @@ -29,7 +29,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Cache Object Files - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ccache key: ${{ matrix.os_bin }}-${{ github.sha }} From 12eb826f049ef7f67df974dfcb44cf36ee07c0f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 16:59:05 +0200 Subject: [PATCH 229/229] Bump actions/download-artifact from 6 to 8 (#2742) Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 8. - [Release notes](https://github.com/actions/download-artifact/releases) - [Commits](https://github.com/actions/download-artifact/compare/v6...v8) --- updated-dependencies: - dependency-name: actions/download-artifact dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/regression.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index 65ee6c6b62b2..02c94dd1198f 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -209,7 +209,7 @@ jobs: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Download All artifacts - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v8 - name: Uncompress and Move Binaries run: | BIN_FOLDER="$PWD/install/bin" @@ -258,7 +258,7 @@ jobs: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Download All artifacts - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v8 - name: Uncompress and Move Binaries run: | BIN_FOLDER="$PWD/install/bin" @@ -304,7 +304,7 @@ jobs: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Download All artifacts - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v8 - name: Uncompress and Move Binaries run: | BIN_FOLDER="$PWD/install/bin" @@ -351,7 +351,7 @@ jobs: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Download All artifacts - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v8 - name: Uncompress and Move Binaries run: | BIN_FOLDER="$PWD/install/bin" @@ -403,17 +403,17 @@ jobs: entrypoint: /bin/rm args: -rf install install_bin.tgz src ccache ${{ matrix.config_set }} - name: Download Base - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v8 with: name: ${{format('Base{0}', matrix.tag)}} path: ${{format('Base{0}', matrix.tag)}} - name: Download Reverse - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v8 with: name: ${{format('Reverse{0}', matrix.tag)}} path: ${{format('Reverse{0}', matrix.tag)}} - name: Download Forward - uses: actions/download-artifact@v6 + uses: actions/download-artifact@v8 with: name: ${{format('Forward{0}', matrix.tag)}} path: ${{format('Forward{0}', matrix.tag)}}

      o`c=H4;xS{5`H5r2WcRr^SYZ@-9inwIEfm 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

    bC^B26{SL+osox|9K@t_>q|89jd>eA8 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 z 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