From b6c4c13724c0b038c02d7b7d62b17bb469fa7be4 Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Wed, 17 Sep 2025 16:29:26 +0200 Subject: [PATCH 01/11] Boundary conditions for SST for rough walls --- Common/include/CConfig.hpp | 8 +++ Common/include/option_structure.hpp | 53 ++++++++++++++++++ Common/src/CConfig.cpp | 5 +- SU2_CFD/include/solvers/CTurbSSTSolver.hpp | 1 + SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 63 ++++++++++++++++------ 5 files changed, 113 insertions(+), 17 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 794622bb1a1e..2760d2b08cca 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -756,9 +756,11 @@ class CConfig { SST_OPTIONS *SST_Options; /*!< \brief List of modifications/corrections/versions of SST turbulence model.*/ SA_OPTIONS *SA_Options; /*!< \brief List of modifications/corrections/versions of SA turbulence model.*/ LM_OPTIONS *LM_Options; /*!< \brief List of modifications/corrections/versions of SA turbulence model.*/ + ROUGHSST_OPTIONS *ROUGHSST_Options; /*!< \brief List of modifications/corrections/versions of rough-wall boundary conditions for SST turbulence model.*/ unsigned short nSST_Options; /*!< \brief Number of SST options specified. */ unsigned short nSA_Options; /*!< \brief Number of SA options specified. */ unsigned short nLM_Options; /*!< \brief Number of SA options specified. */ + unsigned short nROUGHSST_Options; /*!< \brief Number of rough-wall boundary conditions for SST turbulence model options specified. */ WALL_FUNCTIONS *Kind_WallFunctions; /*!< \brief The kind of wall function to use for the corresponding markers. */ unsigned short **IntInfo_WallFunctions; /*!< \brief Additional integer information for the wall function markers. */ su2double **DoubleInfo_WallFunctions; /*!< \brief Additional double information for the wall function markers. */ @@ -1218,6 +1220,7 @@ class CConfig { SST_ParsedOptions sstParsedOptions; /*!< \brief Additional parameters for the SST turbulence model. */ SA_ParsedOptions saParsedOptions; /*!< \brief Additional parameters for the SA turbulence model. */ LM_ParsedOptions lmParsedOptions; /*!< \brief Additional parameters for the LM transition model. */ + ROUGH_SST_ParsedOptions roughsstParsedOptions; /*!< \brief Additional parameters for the boundary conditions for rough walls for the SST turbulence model. */ su2double uq_delta_b; /*!< \brief Parameter used to perturb eigenvalues of Reynolds Stress Matrix */ unsigned short eig_val_comp; /*!< \brief Parameter used to determine type of eigenvalue perturbation */ su2double uq_urlx; /*!< \brief Under-relaxation factor */ @@ -10129,6 +10132,11 @@ class CConfig { */ LM_ParsedOptions GetLMParsedOptions() const { return lmParsedOptions; } + /*! + * \brief Get parsed rough-wall boundary conditions for SST option data structure. + * \return Rough-wall SST option data structure. + */ + ROUGH_SST_ParsedOptions GetROUGHSSTParsedOptions() const { return roughsstParsedOptions; } /*! * \brief Get parsed option data structure for data-driven fluid model. diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index bf99257b1387..30d21bf57d70 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -1101,6 +1101,59 @@ inline SST_ParsedOptions ParseSSTOptions(const SST_OPTIONS *SST_Options, unsigne return SSTParsedOptions; } +/*! + * \brief SST rough-wall boundary conditions Options + */ +enum class ROUGHSST_OPTIONS { + NONE, /*!< \brief No option / default. */ + WILCOX1998, /*!< \brief Wilcox 1998 boundary conditions for rough walls / default. */ + WILCOX2006, /*!< \brief Wilcox 2006 boundary conditions for rough walls. */ + LIMITER_KNOPP, /*!< \brief Knopp eddy viscosity limiter. */ + LIMITER_AUPOIX, /*!< \brief Aupoix eddy viscosity limiter. */ +}; +static const MapType ROUGHSST_Options_Map = { + MakePair("NONE", ROUGHSST_OPTIONS::NONE) + MakePair("WILCOX1998", ROUGHSST_OPTIONS::WILCOX1998) + MakePair("WILCOX2006", ROUGHSST_OPTIONS::WILCOX2006) + MakePair("LIMITER_KNOPP", ROUGHSST_OPTIONS::LIMITER_KNOPP) + MakePair("LIMITER_AUPOIX", ROUGHSST_OPTIONS::LIMITER_AUPOIX) +}; + +/*! + * \brief Structure containing parsed SST rough-wall boundary conditions options. + */ +struct ROUGH_SST_ParsedOptions { + ROUGHSST_OPTIONS version = ROUGHSST_OPTIONS::NONE; /*!< \brief KWBC base model. */ + bool wilcox1998 = false; /*!< \brief Use Wilcox boundary conditions for rough walls (1998). */ + bool wilcox2006 = false; /*!< \brief Use Wilcox boundary conditions for rough walls (2006). */ + bool limiter_knopp = false; /*!< \brief Use Knopp eddy viscosity limiter. */ + bool limiter_aupoix = false; /*!< \brief Use Aupoix eddy viscosity limiter. */ +}; + +/*! + * \brief Function to parse SST rough-wall boundary conditions options. + * \param[in] ROUGHSST_Options - Selected SST rough-wall boundary conditions option from config. + * \param[in] nROUGHSST_Options - Number of options selected. + * \param[in] rank - MPI rank. + * \return Struct with SA options. + */ +inline ROUGH_SST_ParsedOptions ParseROUGHSSTOptions(const ROUGHSST_OPTIONS *ROUGHSST_Options, unsigned short nROUGHSST_Options, int rank) { + ROUGH_SST_ParsedOptions ROUGHSSTParsedOptions; + + auto IsPresent = [&](ROUGHSST_OPTIONS option) { + const auto roughsst_options_end = ROUGHSST_Options + nROUGHSST_Options; + return std::find(ROUGHSST_Options, roughsst_options_end, option) != roughsst_options_end; + }; + + ROUGHSSTParsedOptions.wilcox2006 = IsPresent(ROUGHSST_OPTIONS::WILCOX2006); + ROUGHSSTParsedOptions.limiter_knopp = IsPresent(ROUGHSST_OPTIONS::LIMITER_KNOPP); + ROUGHSSTParsedOptions.limiter_aupoix = IsPresent(ROUGHSST_OPTIONS::LIMITER_AUPOIX); + + + return ROUGHSSTParsedOptions; +} + + /*! * \brief SA Options */ diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 0a9cca0f63f7..32e90d58e1bd 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -1129,7 +1129,9 @@ void CConfig::SetConfig_Options() { addEnumListOption("SST_OPTIONS", nSST_Options, SST_Options, SST_Options_Map); /*!\brief SST_OPTIONS \n DESCRIPTION: Specify SA turbulence model options/corrections. \n Options: see \link SA_Options_Map \endlink \n DEFAULT: NONE \ingroup Config*/ addEnumListOption("SA_OPTIONS", nSA_Options, SA_Options, SA_Options_Map); - + + /*!\brief ROUGHSST_OPTIONS \n DESCRIPTION: Specify type of boundary condition for rough walls for SST turbulence model. \n Options: see \link ROUGHSST_Options_Map \endlink \n DEFAULT: wilcox1998 \ingroup Config*/ + addEnumListOption("ROUGHSST_OPTIONS", nROUGHSST_Options, ROUGHSST_Options, ROUGHSST_Options_Map); /*!\brief KIND_TRANS_MODEL \n DESCRIPTION: Specify transition model OPTIONS: see \link Trans_Model_Map \endlink \n DEFAULT: NONE \ingroup Config*/ addEnumOption("KIND_TRANS_MODEL", Kind_Trans_Model, Trans_Model_Map, TURB_TRANS_MODEL::NONE); /*!\brief SST_OPTIONS \n DESCRIPTION: Specify LM transition model options/correlations. \n Options: see \link LM_Options_Map \endlink \n DEFAULT: NONE \ingroup Config*/ @@ -3577,6 +3579,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i /*--- Postprocess SST_OPTIONS into structure. ---*/ if (Kind_Turb_Model == TURB_MODEL::SST) { sstParsedOptions = ParseSSTOptions(SST_Options, nSST_Options, rank); + roughsstParsedOptions = ParseROUGHSSTOptions(ROUGHSST_Options, nROUGHSST_Options, rank); } else if (Kind_Turb_Model == TURB_MODEL::SA) { saParsedOptions = ParseSAOptions(SA_Options, nSA_Options, rank); } diff --git a/SU2_CFD/include/solvers/CTurbSSTSolver.hpp b/SU2_CFD/include/solvers/CTurbSSTSolver.hpp index 707316f06094..495a665f0821 100644 --- a/SU2_CFD/include/solvers/CTurbSSTSolver.hpp +++ b/SU2_CFD/include/solvers/CTurbSSTSolver.hpp @@ -39,6 +39,7 @@ class CTurbSSTSolver final : public CTurbSolver { private: su2double constants[11] = {0.0}; /*!< \brief Constants for the model. */ SST_ParsedOptions sstParsedOptions; + ROUGH_SST_ParsedOptions roughsstParsedOptions; /*! * \brief Compute nu tilde from the wall functions. diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index b36f5c2b8765..b40fd7ac0d3c 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -426,6 +426,9 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont /*--- Check if the node belongs to the domain (i.e, not a halo node) ---*/ if (geometry->nodes->GetDomain(iPoint)) { + /*--- distance to closest neighbor ---*/ + su2double wall_dist = geometry->vertex[val_marker][iVertex]->GetNearestNeighborDistance(); + if (rough_wall) { /*--- Set wall values ---*/ @@ -441,33 +444,61 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont su2double kPlus = FrictionVel*Roughness_Height*density/laminar_viscosity; su2double S_R= 0.0; + + su2double solution[2]; + /*--- Modify the omega and k to account for a rough wall. ---*/ + /*--- Reference 1 original Wilcox (1998) ---*/ - /*if (kPlus <= 25) + if (roughsstParsedOptions.wilcox1998) { + if (kPlus <= 25) S_R = (50/(kPlus+EPS))*(50/(kPlus+EPS)); else - S_R = 100/(kPlus+EPS);*/ - + S_R = 100/(kPlus+EPS); + + solution[0] = 0.0; + solution[1] = FrictionVel*FrictionVel*S_R/(laminar_viscosity/density); + } + else if (roughsstParsedOptions.wilcox2006) { /*--- Reference 2 from D.C. Wilcox Turbulence Modeling for CFD (2006) ---*/ - if (kPlus <= 5) - S_R = (200/(kPlus+EPS))*(200/(kPlus+EPS)); - else - S_R = 100/(kPlus+EPS) + ((200/(kPlus+EPS))*(200/(kPlus+EPS)) - 100/(kPlus+EPS))*exp(5-kPlus); - - /*--- Modify the omega to account for a rough wall. ---*/ - su2double solution[2]; - solution[0] = 0.0; - solution[1] = FrictionVel*FrictionVel*S_R/(laminar_viscosity/density); + if (kPlus <= 5) + S_R = (200/(kPlus+EPS))*(200/(kPlus+EPS)); + else + S_R = 100/(kPlus+EPS) + ((200/(kPlus+EPS))*(200/(kPlus+EPS)) - 100/(kPlus+EPS))*exp(5-kPlus); + + solution[0] = 0.0; + solution[1] = FrictionVel*FrictionVel*S_R/(laminar_viscosity/density); + } + /*--- Knopp eddy viscosity limiter ---*/ + else if (roughsstParsedOptions.limiter_knopp) { + + su2double d0 = 0.03*Roughness_Height*min(1.0, pow((kPlus + EPS )/30.0, 2.0/3.0))*min(1.0, pow((kPlus + EPS)/45.0, 0.25))*min(1.0, pow((kPlus + EPS) /60, 0.25)); + solution[0] = (FrictionVel*FrictionVel / sqrt(constants[6]))*min(1.0, kPlus / 90.0); + + const su2double kappa = config->GetwallModel_Kappa(); + su2double beta_1 = constants[4]; + solution[1] = min( FrictionVel/(sqrt(constants[6])*d0*kappa), 60.0*laminar_viscosity/(density*beta_1*pow(wall_dist,2))); + } + /*--- Aupoix eddy viscosity limiter ---*/ + else if (roughsstParsedOptions.limiter_aupoix) { + + su2double k0Plus = ( 1.0 /sqrt( constants[6])) * tanh(((log((kPlus +EPS ) / 30.0) / log(10.0)) + 1.0 - 1.0*tanh( (kPlus + EPS) / 125.0))*tanh((kPlus + EPS) / 125.0)); + su2double kwallPlus = max(0.0, k0Plus); + su2double kwall = kwallPlus*FrictionVel*FrictionVel; + + su2double omegawallPlus = (300.0 / pow(kPlus + EPS, 2.0)) * pow(tanh(15.0 / (4.0*kPlus)), -1.0) + (191.0 / (kPlus + EPS))*(1.0 - exp(-kPlus / 250.0)); + + solution[0] = kwall; + solution[1] = omegawallPlus*FrictionVel*FrictionVel*density/laminar_viscosity; + + } /*--- Set the solution values and zero the residual ---*/ nodes->SetSolution_Old(iPoint,solution); nodes->SetSolution(iPoint,solution); LinSysRes.SetBlock_Zero(iPoint); - + } else { // smooth wall - /*--- distance to closest neighbor ---*/ - su2double wall_dist = geometry->vertex[val_marker][iVertex]->GetNearestNeighborDistance(); - /*--- Set wall values ---*/ su2double density = solver_container[FLOW_SOL]->GetNodes()->GetDensity(iPoint); su2double laminar_viscosity = solver_container[FLOW_SOL]->GetNodes()->GetLaminarViscosity(iPoint); From e517e4d6ee4e4b21df20b624facd4bacd780b259 Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Thu, 9 Oct 2025 12:28:50 +0200 Subject: [PATCH 02/11] Fix formatting --- Common/include/CConfig.hpp | 2 +- Common/include/option_structure.hpp | 2 +- Common/src/CConfig.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 2760d2b08cca..c9aa13c2a631 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -760,7 +760,7 @@ class CConfig { unsigned short nSST_Options; /*!< \brief Number of SST options specified. */ unsigned short nSA_Options; /*!< \brief Number of SA options specified. */ unsigned short nLM_Options; /*!< \brief Number of SA options specified. */ - unsigned short nROUGHSST_Options; /*!< \brief Number of rough-wall boundary conditions for SST turbulence model options specified. */ + unsigned short nROUGHSST_Options; /*!< \brief Number of rough-wall boundary conditions for SST turbulence model options specified. */ WALL_FUNCTIONS *Kind_WallFunctions; /*!< \brief The kind of wall function to use for the corresponding markers. */ unsigned short **IntInfo_WallFunctions; /*!< \brief Additional integer information for the wall function markers. */ su2double **DoubleInfo_WallFunctions; /*!< \brief Additional double information for the wall function markers. */ diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index 30d21bf57d70..4b0ee92c75fc 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -1148,7 +1148,7 @@ inline ROUGH_SST_ParsedOptions ParseROUGHSSTOptions(const ROUGHSST_OPTIONS *ROUG ROUGHSSTParsedOptions.wilcox2006 = IsPresent(ROUGHSST_OPTIONS::WILCOX2006); ROUGHSSTParsedOptions.limiter_knopp = IsPresent(ROUGHSST_OPTIONS::LIMITER_KNOPP); ROUGHSSTParsedOptions.limiter_aupoix = IsPresent(ROUGHSST_OPTIONS::LIMITER_AUPOIX); - + return ROUGHSSTParsedOptions; } diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 32e90d58e1bd..ae17fc4d3e36 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -1129,7 +1129,7 @@ void CConfig::SetConfig_Options() { addEnumListOption("SST_OPTIONS", nSST_Options, SST_Options, SST_Options_Map); /*!\brief SST_OPTIONS \n DESCRIPTION: Specify SA turbulence model options/corrections. \n Options: see \link SA_Options_Map \endlink \n DEFAULT: NONE \ingroup Config*/ addEnumListOption("SA_OPTIONS", nSA_Options, SA_Options, SA_Options_Map); - + /*!\brief ROUGHSST_OPTIONS \n DESCRIPTION: Specify type of boundary condition for rough walls for SST turbulence model. \n Options: see \link ROUGHSST_Options_Map \endlink \n DEFAULT: wilcox1998 \ingroup Config*/ addEnumListOption("ROUGHSST_OPTIONS", nROUGHSST_Options, ROUGHSST_Options, ROUGHSST_Options_Map); /*!\brief KIND_TRANS_MODEL \n DESCRIPTION: Specify transition model OPTIONS: see \link Trans_Model_Map \endlink \n DEFAULT: NONE \ingroup Config*/ @@ -3579,7 +3579,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i /*--- Postprocess SST_OPTIONS into structure. ---*/ if (Kind_Turb_Model == TURB_MODEL::SST) { sstParsedOptions = ParseSSTOptions(SST_Options, nSST_Options, rank); - roughsstParsedOptions = ParseROUGHSSTOptions(ROUGHSST_Options, nROUGHSST_Options, rank); + roughsstParsedOptions = ParseROUGHSSTOptions(ROUGHSST_Options, nROUGHSST_Options, rank); } else if (Kind_Turb_Model == TURB_MODEL::SA) { saParsedOptions = ParseSAOptions(SA_Options, nSA_Options, rank); } From 8f633e587b8949e40665da673eb506b4eef1d8c8 Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Mon, 13 Oct 2025 19:27:15 +0200 Subject: [PATCH 03/11] Fix issues about rough SST BCs formulations --- Common/include/option_structure.hpp | 31 +++++++++++++------------- Common/src/CConfig.cpp | 2 +- SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 10 ++++----- 3 files changed, 21 insertions(+), 22 deletions(-) diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index 4b0ee92c75fc..dd0d7491cad3 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -1105,9 +1105,9 @@ inline SST_ParsedOptions ParseSSTOptions(const SST_OPTIONS *SST_Options, unsigne * \brief SST rough-wall boundary conditions Options */ enum class ROUGHSST_OPTIONS { - NONE, /*!< \brief No option / default. */ - WILCOX1998, /*!< \brief Wilcox 1998 boundary conditions for rough walls / default. */ - WILCOX2006, /*!< \brief Wilcox 2006 boundary conditions for rough walls. */ + NONE, /*!< \brief No option / default no surface roughness applied. */ + WILCOX1998, /*!< \brief Wilcox 1998 boundary conditions for rough walls. */ + WILCOX2006, /*!< \brief Wilcox 2006 boundary conditions for rough walls / default version if roughness is applied. */ LIMITER_KNOPP, /*!< \brief Knopp eddy viscosity limiter. */ LIMITER_AUPOIX, /*!< \brief Aupoix eddy viscosity limiter. */ }; @@ -1135,22 +1135,21 @@ struct ROUGH_SST_ParsedOptions { * \param[in] ROUGHSST_Options - Selected SST rough-wall boundary conditions option from config. * \param[in] nROUGHSST_Options - Number of options selected. * \param[in] rank - MPI rank. - * \return Struct with SA options. + * \return Struct with SST options. */ -inline ROUGH_SST_ParsedOptions ParseROUGHSSTOptions(const ROUGHSST_OPTIONS *ROUGHSST_Options, unsigned short nROUGHSST_Options, int rank) { - ROUGH_SST_ParsedOptions ROUGHSSTParsedOptions; - - auto IsPresent = [&](ROUGHSST_OPTIONS option) { - const auto roughsst_options_end = ROUGHSST_Options + nROUGHSST_Options; - return std::find(ROUGHSST_Options, roughsst_options_end, option) != roughsst_options_end; - }; - - ROUGHSSTParsedOptions.wilcox2006 = IsPresent(ROUGHSST_OPTIONS::WILCOX2006); - ROUGHSSTParsedOptions.limiter_knopp = IsPresent(ROUGHSST_OPTIONS::LIMITER_KNOPP); - ROUGHSSTParsedOptions.limiter_aupoix = IsPresent(ROUGHSST_OPTIONS::LIMITER_AUPOIX); +inline ROUGH_SST_ParsedOptions ParseROUGHSSTOptions(ROUGHSST_OPTIONS sstbcs_option) { + ROUGH_SST_ParsedOptions opts; + opts.version = sstbcs_option; + switch(sstbcs_option) { + case ROUGHSST_OPTIONS::WILCOX1998: opts.wilcox1998 = true; break; + case ROUGHSST_OPTIONS::WILCOX2006: opts.wilcox2006 = true; break; + case ROUGHSST_OPTIONS::LIMITER_KNOPP: opts.limiter_knopp = true; break; + case ROUGHSST_OPTIONS::LIMITER_AUPOIX: opts.limiter_aupoix = true; break; + default: break; + } - return ROUGHSSTParsedOptions; + return opts; } diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index ae17fc4d3e36..fde152750d77 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -3579,7 +3579,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i /*--- Postprocess SST_OPTIONS into structure. ---*/ if (Kind_Turb_Model == TURB_MODEL::SST) { sstParsedOptions = ParseSSTOptions(SST_Options, nSST_Options, rank); - roughsstParsedOptions = ParseROUGHSSTOptions(ROUGHSST_Options, nROUGHSST_Options, rank); + roughsstParsedOptions = ParseROUGHSSTOptions(ROUGHSST_Options[0]); } else if (Kind_Turb_Model == TURB_MODEL::SA) { saParsedOptions = ParseSAOptions(SA_Options, nSA_Options, rank); } diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index b40fd7ac0d3c..42d9d102cb69 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -444,8 +444,8 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont su2double kPlus = FrictionVel*Roughness_Height*density/laminar_viscosity; su2double S_R= 0.0; - - su2double solution[2]; + su2double solution[2] = {}; + /*--- Modify the omega and k to account for a rough wall. ---*/ /*--- Reference 1 original Wilcox (1998) ---*/ @@ -461,9 +461,9 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont else if (roughsstParsedOptions.wilcox2006) { /*--- Reference 2 from D.C. Wilcox Turbulence Modeling for CFD (2006) ---*/ if (kPlus <= 5) - S_R = (200/(kPlus+EPS))*(200/(kPlus+EPS)); + S_R = pow(200/(kPlus+EPS),2); else - S_R = 100/(kPlus+EPS) + ((200/(kPlus+EPS))*(200/(kPlus+EPS)) - 100/(kPlus+EPS))*exp(5-kPlus); + S_R = 100/(kPlus+EPS) + (pow(200/(kPlus+EPS),2) - 100/(kPlus+EPS))*exp(5-kPlus); solution[0] = 0.0; solution[1] = FrictionVel*FrictionVel*S_R/(laminar_viscosity/density); @@ -481,7 +481,7 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont /*--- Aupoix eddy viscosity limiter ---*/ else if (roughsstParsedOptions.limiter_aupoix) { - su2double k0Plus = ( 1.0 /sqrt( constants[6])) * tanh(((log((kPlus +EPS ) / 30.0) / log(10.0)) + 1.0 - 1.0*tanh( (kPlus + EPS) / 125.0))*tanh((kPlus + EPS) / 125.0)); + su2double k0Plus = ( 1.0 /sqrt( constants[6])) * tanh((log10((kPlus +EPS ) / 30.0) + 1.0 - 1.0*tanh( (kPlus + EPS) / 125.0))*tanh((kPlus + EPS) / 125.0)); su2double kwallPlus = max(0.0, k0Plus); su2double kwall = kwallPlus*FrictionVel*FrictionVel; From 0d3eaad9bb3d005c4d06b95312ec5ad11412b53d Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Mon, 3 Nov 2025 22:52:06 +0100 Subject: [PATCH 04/11] Add SST Limiter Output --- SU2_CFD/include/variables/CTurbSSTVariable.hpp | 9 ++++++++- SU2_CFD/include/variables/CVariable.hpp | 13 ++++++++++++- SU2_CFD/src/output/CFlowOutput.cpp | 9 +++++++++ SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 18 ++++++------------ SU2_CFD/src/variables/CTurbSSTVariable.cpp | 12 ++++++++++-- 5 files changed, 45 insertions(+), 16 deletions(-) diff --git a/SU2_CFD/include/variables/CTurbSSTVariable.hpp b/SU2_CFD/include/variables/CTurbSSTVariable.hpp index 214cfbd06a13..d2aae655ea9b 100644 --- a/SU2_CFD/include/variables/CTurbSSTVariable.hpp +++ b/SU2_CFD/include/variables/CTurbSSTVariable.hpp @@ -41,9 +41,11 @@ class CTurbSSTVariable final : public CTurbVariable { su2double sigma_om2; su2double beta_star; su2double prod_lim_const; + su2double a1; VectorType F1; VectorType F2; /*!< \brief Menter blending function for blending of k-w and k-eps. */ VectorType CDkw; /*!< \brief Cross-diffusion. */ + VectorType SST_Limiter; SST_ParsedOptions sstParsedOptions; public: /*! @@ -71,7 +73,7 @@ class CTurbSSTVariable final : public CTurbVariable { * \param[in] val_dist - Value of the distance to the wall. * \param[in] val_density - Value of the density. */ - void SetBlendingFunc(unsigned long iPoint, su2double val_viscosity, su2double val_dist, su2double val_density, TURB_TRANS_MODEL trans_model) override; + void SetBlendingFunc(unsigned long iPoint, su2double val_viscosity, su2double val_dist, su2double val_density, su2double vorticity_mag, TURB_TRANS_MODEL trans_model) override; /*! * \brief Get the first blending function. @@ -87,4 +89,9 @@ class CTurbSSTVariable final : public CTurbVariable { * \brief Get the value of the cross diffusion of tke and omega. */ inline su2double GetCrossDiff(unsigned long iPoint) const override { return CDkw(iPoint); } + /*! + * \brief Get the value of the SST Limiter. + */ + inline su2double GetSSTLimiter(unsigned long iPoint) const { return SST_Limiter[iPoint]; } + }; diff --git a/SU2_CFD/include/variables/CVariable.hpp b/SU2_CFD/include/variables/CVariable.hpp index dc905d79fcb4..dd2ecc9ed517 100644 --- a/SU2_CFD/include/variables/CVariable.hpp +++ b/SU2_CFD/include/variables/CVariable.hpp @@ -1656,7 +1656,7 @@ class CVariable { * \param[in] val_density - Value of the density. * \param[in] val_dist - Value of the distance to the wall. */ - inline virtual void SetBlendingFunc(unsigned long iPoint, su2double val_viscosity, su2double val_dist, su2double val_density, TURB_TRANS_MODEL trans_model) {} + inline virtual void SetBlendingFunc(unsigned long iPoint, su2double val_viscosity, su2double val_dist, su2double val_density, su2double vorticity_mag, TURB_TRANS_MODEL trans_model) {} /*! * \brief Get the first blending function of the SST model. @@ -1673,6 +1673,17 @@ class CVariable { */ inline virtual su2double GetCrossDiff(unsigned long iPoint) const { return 0.0; } + /*! + * \brief Get the value of the SST Limiter. + */ + inline virtual su2double GetSSTLimiter(unsigned long iPoint) const { return 0.0; } + + + /*! + * \brief Set the value of the SST Limiter. + */ + inline virtual su2double SetSSTLimiter(unsigned long iPoint) const { return 0.0; } + /*! * \brief Get the value of the eddy viscosity. * \return the value of the eddy viscosity. diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index b355c0698afb..2b37240b1b46 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -1422,6 +1422,10 @@ void CFlowOutput::SetVolumeOutputFieldsScalarPrimitive(const CConfig* config) { if (config->GetKind_Turb_Model() != TURB_MODEL::NONE) { AddVolumeOutput("EDDY_VISCOSITY", "Eddy_Viscosity", "PRIMITIVE", "Turbulent eddy viscosity"); + /*--- SST Limiter ---*/ + if (config->GetKind_Turb_Model() == TURB_MODEL::SST) { + AddVolumeOutput("SST_LIMITER", "SST_Limiter", "PRIMITIVE", "SST viscosity limiter"); + } } } @@ -1559,6 +1563,11 @@ void CFlowOutput::LoadVolumeDataScalar(const CConfig* config, const CSolver* con SetVolumeOutputValue("EDDY_VISCOSITY", iPoint, Node_Flow->GetEddyViscosity(iPoint)); SetVolumeOutputValue("TURB_DELTA_TIME", iPoint, Node_Turb->GetDelta_Time(iPoint)); SetVolumeOutputValue("TURB_CFL", iPoint, Node_Turb->GetLocalCFL(iPoint)); + /*--- SST Limiter ---*/ + if (config->GetKind_Turb_Model() == TURB_MODEL::SST) { + SetVolumeOutputValue("SST_LIMITER", iPoint, Node_Turb->GetSSTLimiter(iPoint)); + su2double sst_lim = Node_Turb->GetSSTLimiter(iPoint); + } } if (config->GetSAParsedOptions().bc) { diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index 42d9d102cb69..3b06e1ded595 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -233,7 +233,7 @@ void CTurbSSTSolver::Postprocessing(CGeometry *geometry, CSolver **solver_contai const su2double VorticityMag = max(GeometryToolbox::Norm(3, flowNodes->GetVorticity(iPoint)), 1e-12); const su2double StrainMag = max(flowNodes->GetStrainMag(iPoint), 1e-12); - nodes->SetBlendingFunc(iPoint, mu, dist, rho, config->GetKind_Trans_Model()); + nodes->SetBlendingFunc(iPoint, mu, dist, rho, VorticityMag, config->GetKind_Trans_Model()); const su2double F2 = nodes->GetF2blending(iPoint); @@ -425,12 +425,12 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont /*--- Check if the node belongs to the domain (i.e, not a halo node) ---*/ if (geometry->nodes->GetDomain(iPoint)) { + const auto options = config->GetROUGHSSTParsedOptions(); /*--- distance to closest neighbor ---*/ su2double wall_dist = geometry->vertex[val_marker][iVertex]->GetNearestNeighborDistance(); if (rough_wall) { - /*--- Set wall values ---*/ su2double density = solver_container[FLOW_SOL]->GetNodes()->GetDensity(iPoint); su2double laminar_viscosity = solver_container[FLOW_SOL]->GetNodes()->GetLaminarViscosity(iPoint); @@ -445,11 +445,10 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont su2double S_R= 0.0; su2double solution[2] = {}; - /*--- Modify the omega and k to account for a rough wall. ---*/ /*--- Reference 1 original Wilcox (1998) ---*/ - if (roughsstParsedOptions.wilcox1998) { + if (options.wilcox1998) { if (kPlus <= 25) S_R = (50/(kPlus+EPS))*(50/(kPlus+EPS)); else @@ -458,7 +457,7 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont solution[0] = 0.0; solution[1] = FrictionVel*FrictionVel*S_R/(laminar_viscosity/density); } - else if (roughsstParsedOptions.wilcox2006) { + else if (options.wilcox2006) { /*--- Reference 2 from D.C. Wilcox Turbulence Modeling for CFD (2006) ---*/ if (kPlus <= 5) S_R = pow(200/(kPlus+EPS),2); @@ -469,8 +468,7 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont solution[1] = FrictionVel*FrictionVel*S_R/(laminar_viscosity/density); } /*--- Knopp eddy viscosity limiter ---*/ - else if (roughsstParsedOptions.limiter_knopp) { - + else if (options.limiter_knopp) { su2double d0 = 0.03*Roughness_Height*min(1.0, pow((kPlus + EPS )/30.0, 2.0/3.0))*min(1.0, pow((kPlus + EPS)/45.0, 0.25))*min(1.0, pow((kPlus + EPS) /60, 0.25)); solution[0] = (FrictionVel*FrictionVel / sqrt(constants[6]))*min(1.0, kPlus / 90.0); @@ -479,8 +477,7 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont solution[1] = min( FrictionVel/(sqrt(constants[6])*d0*kappa), 60.0*laminar_viscosity/(density*beta_1*pow(wall_dist,2))); } /*--- Aupoix eddy viscosity limiter ---*/ - else if (roughsstParsedOptions.limiter_aupoix) { - + else if (options.limiter_aupoix) { su2double k0Plus = ( 1.0 /sqrt( constants[6])) * tanh((log10((kPlus +EPS ) / 30.0) + 1.0 - 1.0*tanh( (kPlus + EPS) / 125.0))*tanh((kPlus + EPS) / 125.0)); su2double kwallPlus = max(0.0, k0Plus); su2double kwall = kwallPlus*FrictionVel*FrictionVel; @@ -489,16 +486,13 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont solution[0] = kwall; solution[1] = omegawallPlus*FrictionVel*FrictionVel*density/laminar_viscosity; - } - /*--- Set the solution values and zero the residual ---*/ nodes->SetSolution_Old(iPoint,solution); nodes->SetSolution(iPoint,solution); LinSysRes.SetBlock_Zero(iPoint); } else { // smooth wall - /*--- Set wall values ---*/ su2double density = solver_container[FLOW_SOL]->GetNodes()->GetDensity(iPoint); su2double laminar_viscosity = solver_container[FLOW_SOL]->GetNodes()->GetLaminarViscosity(iPoint); diff --git a/SU2_CFD/src/variables/CTurbSSTVariable.cpp b/SU2_CFD/src/variables/CTurbSSTVariable.cpp index e416ae75618f..7babe67e61c3 100644 --- a/SU2_CFD/src/variables/CTurbSSTVariable.cpp +++ b/SU2_CFD/src/variables/CTurbSSTVariable.cpp @@ -45,16 +45,18 @@ CTurbSSTVariable::CTurbSSTVariable(su2double kine, su2double omega, su2double mu sigma_om2 = constants[3]; beta_star = constants[6]; prod_lim_const = constants[10]; + a1 = constants[7]; F1.resize(nPoint) = su2double(1.0); F2.resize(nPoint) = su2double(0.0); CDkw.resize(nPoint) = su2double(0.0); + SST_Limiter.resize(nPoint, 1.0); muT.resize(nPoint) = mut; } void CTurbSSTVariable::SetBlendingFunc(unsigned long iPoint, su2double val_viscosity, - su2double val_dist, su2double val_density, TURB_TRANS_MODEL trans_model) { + su2double val_dist, su2double val_density, su2double vorticity_mag, TURB_TRANS_MODEL trans_model) { su2double arg2, arg2A, arg2B, arg1; AD::StartPreacc(); @@ -91,7 +93,13 @@ void CTurbSSTVariable::SetBlendingFunc(unsigned long iPoint, su2double val_visco F1(iPoint) = max(F1(iPoint), F3); } - AD::SetPreaccOut(F1(iPoint)); AD::SetPreaccOut(F2(iPoint)); AD::SetPreaccOut(CDkw(iPoint)); + /*--- SST Limiter ---*/ + + su2double limiter = a1*Solution(iPoint,1) / (F2(iPoint)*vorticity_mag + EPS); + limiter = min(1.0, limiter); + SST_Limiter(iPoint) = limiter; + + AD::SetPreaccOut(F1(iPoint)); AD::SetPreaccOut(F2(iPoint)); AD::SetPreaccOut(CDkw(iPoint)); AD::SetPreaccOut(SST_Limiter(iPoint)); AD::EndPreacc(); } From 3b7b0ffca4061911dcfa8a0fe1b8558aa9e3d38b Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Tue, 4 Nov 2025 12:48:24 +0100 Subject: [PATCH 05/11] Revert SST Limiter Output changes --- SU2_CFD/include/variables/CTurbSSTVariable.hpp | 9 +-------- SU2_CFD/include/variables/CVariable.hpp | 13 +------------ SU2_CFD/src/output/CFlowOutput.cpp | 9 --------- SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 2 +- SU2_CFD/src/variables/CTurbSSTVariable.cpp | 12 ++---------- 5 files changed, 5 insertions(+), 40 deletions(-) diff --git a/SU2_CFD/include/variables/CTurbSSTVariable.hpp b/SU2_CFD/include/variables/CTurbSSTVariable.hpp index d2aae655ea9b..214cfbd06a13 100644 --- a/SU2_CFD/include/variables/CTurbSSTVariable.hpp +++ b/SU2_CFD/include/variables/CTurbSSTVariable.hpp @@ -41,11 +41,9 @@ class CTurbSSTVariable final : public CTurbVariable { su2double sigma_om2; su2double beta_star; su2double prod_lim_const; - su2double a1; VectorType F1; VectorType F2; /*!< \brief Menter blending function for blending of k-w and k-eps. */ VectorType CDkw; /*!< \brief Cross-diffusion. */ - VectorType SST_Limiter; SST_ParsedOptions sstParsedOptions; public: /*! @@ -73,7 +71,7 @@ class CTurbSSTVariable final : public CTurbVariable { * \param[in] val_dist - Value of the distance to the wall. * \param[in] val_density - Value of the density. */ - void SetBlendingFunc(unsigned long iPoint, su2double val_viscosity, su2double val_dist, su2double val_density, su2double vorticity_mag, TURB_TRANS_MODEL trans_model) override; + void SetBlendingFunc(unsigned long iPoint, su2double val_viscosity, su2double val_dist, su2double val_density, TURB_TRANS_MODEL trans_model) override; /*! * \brief Get the first blending function. @@ -89,9 +87,4 @@ class CTurbSSTVariable final : public CTurbVariable { * \brief Get the value of the cross diffusion of tke and omega. */ inline su2double GetCrossDiff(unsigned long iPoint) const override { return CDkw(iPoint); } - /*! - * \brief Get the value of the SST Limiter. - */ - inline su2double GetSSTLimiter(unsigned long iPoint) const { return SST_Limiter[iPoint]; } - }; diff --git a/SU2_CFD/include/variables/CVariable.hpp b/SU2_CFD/include/variables/CVariable.hpp index dd2ecc9ed517..dc905d79fcb4 100644 --- a/SU2_CFD/include/variables/CVariable.hpp +++ b/SU2_CFD/include/variables/CVariable.hpp @@ -1656,7 +1656,7 @@ class CVariable { * \param[in] val_density - Value of the density. * \param[in] val_dist - Value of the distance to the wall. */ - inline virtual void SetBlendingFunc(unsigned long iPoint, su2double val_viscosity, su2double val_dist, su2double val_density, su2double vorticity_mag, TURB_TRANS_MODEL trans_model) {} + inline virtual void SetBlendingFunc(unsigned long iPoint, su2double val_viscosity, su2double val_dist, su2double val_density, TURB_TRANS_MODEL trans_model) {} /*! * \brief Get the first blending function of the SST model. @@ -1673,17 +1673,6 @@ class CVariable { */ inline virtual su2double GetCrossDiff(unsigned long iPoint) const { return 0.0; } - /*! - * \brief Get the value of the SST Limiter. - */ - inline virtual su2double GetSSTLimiter(unsigned long iPoint) const { return 0.0; } - - - /*! - * \brief Set the value of the SST Limiter. - */ - inline virtual su2double SetSSTLimiter(unsigned long iPoint) const { return 0.0; } - /*! * \brief Get the value of the eddy viscosity. * \return the value of the eddy viscosity. diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index 2b37240b1b46..b355c0698afb 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -1422,10 +1422,6 @@ void CFlowOutput::SetVolumeOutputFieldsScalarPrimitive(const CConfig* config) { if (config->GetKind_Turb_Model() != TURB_MODEL::NONE) { AddVolumeOutput("EDDY_VISCOSITY", "Eddy_Viscosity", "PRIMITIVE", "Turbulent eddy viscosity"); - /*--- SST Limiter ---*/ - if (config->GetKind_Turb_Model() == TURB_MODEL::SST) { - AddVolumeOutput("SST_LIMITER", "SST_Limiter", "PRIMITIVE", "SST viscosity limiter"); - } } } @@ -1563,11 +1559,6 @@ void CFlowOutput::LoadVolumeDataScalar(const CConfig* config, const CSolver* con SetVolumeOutputValue("EDDY_VISCOSITY", iPoint, Node_Flow->GetEddyViscosity(iPoint)); SetVolumeOutputValue("TURB_DELTA_TIME", iPoint, Node_Turb->GetDelta_Time(iPoint)); SetVolumeOutputValue("TURB_CFL", iPoint, Node_Turb->GetLocalCFL(iPoint)); - /*--- SST Limiter ---*/ - if (config->GetKind_Turb_Model() == TURB_MODEL::SST) { - SetVolumeOutputValue("SST_LIMITER", iPoint, Node_Turb->GetSSTLimiter(iPoint)); - su2double sst_lim = Node_Turb->GetSSTLimiter(iPoint); - } } if (config->GetSAParsedOptions().bc) { diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index 3b06e1ded595..704643fd61b1 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -233,7 +233,7 @@ void CTurbSSTSolver::Postprocessing(CGeometry *geometry, CSolver **solver_contai const su2double VorticityMag = max(GeometryToolbox::Norm(3, flowNodes->GetVorticity(iPoint)), 1e-12); const su2double StrainMag = max(flowNodes->GetStrainMag(iPoint), 1e-12); - nodes->SetBlendingFunc(iPoint, mu, dist, rho, VorticityMag, config->GetKind_Trans_Model()); + nodes->SetBlendingFunc(iPoint, mu, dist, rho, config->GetKind_Trans_Model()); const su2double F2 = nodes->GetF2blending(iPoint); diff --git a/SU2_CFD/src/variables/CTurbSSTVariable.cpp b/SU2_CFD/src/variables/CTurbSSTVariable.cpp index 7babe67e61c3..e416ae75618f 100644 --- a/SU2_CFD/src/variables/CTurbSSTVariable.cpp +++ b/SU2_CFD/src/variables/CTurbSSTVariable.cpp @@ -45,18 +45,16 @@ CTurbSSTVariable::CTurbSSTVariable(su2double kine, su2double omega, su2double mu sigma_om2 = constants[3]; beta_star = constants[6]; prod_lim_const = constants[10]; - a1 = constants[7]; F1.resize(nPoint) = su2double(1.0); F2.resize(nPoint) = su2double(0.0); CDkw.resize(nPoint) = su2double(0.0); - SST_Limiter.resize(nPoint, 1.0); muT.resize(nPoint) = mut; } void CTurbSSTVariable::SetBlendingFunc(unsigned long iPoint, su2double val_viscosity, - su2double val_dist, su2double val_density, su2double vorticity_mag, TURB_TRANS_MODEL trans_model) { + su2double val_dist, su2double val_density, TURB_TRANS_MODEL trans_model) { su2double arg2, arg2A, arg2B, arg1; AD::StartPreacc(); @@ -93,13 +91,7 @@ void CTurbSSTVariable::SetBlendingFunc(unsigned long iPoint, su2double val_visco F1(iPoint) = max(F1(iPoint), F3); } - /*--- SST Limiter ---*/ - - su2double limiter = a1*Solution(iPoint,1) / (F2(iPoint)*vorticity_mag + EPS); - limiter = min(1.0, limiter); - SST_Limiter(iPoint) = limiter; - - AD::SetPreaccOut(F1(iPoint)); AD::SetPreaccOut(F2(iPoint)); AD::SetPreaccOut(CDkw(iPoint)); AD::SetPreaccOut(SST_Limiter(iPoint)); + AD::SetPreaccOut(F1(iPoint)); AD::SetPreaccOut(F2(iPoint)); AD::SetPreaccOut(CDkw(iPoint)); AD::EndPreacc(); } From 92f194030280f75742e18d8f0eb5078f4670d255 Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Thu, 13 Nov 2025 16:21:34 +0100 Subject: [PATCH 06/11] Switch to regression branch --- .github/workflows/regression.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index c89673588bbc..4da0c8550899 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 feature_turb_flatplate_SST_RoughBCs -s ${{matrix.testscript}} - name: Cleanup uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: @@ -260,7 +260,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}} -a "--tapetests" + args: -b ${{github.ref}} -t develop -c feature_turb_flatplate_SST_RoughBCs -s ${{matrix.testscript}} -a "--tapetests" - name: Cleanup uses: docker://ghcr.io/su2code/su2/test-su2:250717-1402 with: @@ -306,7 +306,7 @@ jobs: uses: docker://ghcr.io/su2code/su2/test-su2-tsan:250717-1402 with: # -t -c - args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--tsan" + args: -b ${{github.ref}} -t develop -c feature_turb_flatplate_SST_RoughBCs -s ${{matrix.testscript}} -a "--tsan" - name: Cleanup uses: docker://ghcr.io/su2code/su2/test-su2-tsan:250717-1402 with: @@ -351,7 +351,7 @@ jobs: uses: docker://ghcr.io/su2code/su2/test-su2-asan:250717-1402 with: # -t -c - args: -b ${{github.ref}} -t develop -c develop -s ${{matrix.testscript}} -a "--asan" + args: -b ${{github.ref}} -t develop -c feature_turb_flatplate_SST_RoughBCs -s ${{matrix.testscript}} -a "--asan" - name: Cleanup uses: docker://ghcr.io/su2code/su2/test-su2-asan:250717-1402 with: From 65d8ea5cbccf1d5f9a41b5553fbd183da27ca1fb Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Thu, 13 Nov 2025 16:51:42 +0100 Subject: [PATCH 07/11] Fix rough BCs options issues --- Common/include/CConfig.hpp | 3 +-- Common/include/option_structure.hpp | 26 +++++++++++++------------- Common/src/CConfig.cpp | 4 ++-- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index c9aa13c2a631..8294cf44f532 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -756,11 +756,10 @@ class CConfig { SST_OPTIONS *SST_Options; /*!< \brief List of modifications/corrections/versions of SST turbulence model.*/ SA_OPTIONS *SA_Options; /*!< \brief List of modifications/corrections/versions of SA turbulence model.*/ LM_OPTIONS *LM_Options; /*!< \brief List of modifications/corrections/versions of SA turbulence model.*/ - ROUGHSST_OPTIONS *ROUGHSST_Options; /*!< \brief List of modifications/corrections/versions of rough-wall boundary conditions for SST turbulence model.*/ + ROUGHSST_MODEL Kind_RoughSST_Model; /*!< \brief List of modifications/corrections/versions of rough-wall boundary conditions for SST turbulence model.*/ unsigned short nSST_Options; /*!< \brief Number of SST options specified. */ unsigned short nSA_Options; /*!< \brief Number of SA options specified. */ unsigned short nLM_Options; /*!< \brief Number of SA options specified. */ - unsigned short nROUGHSST_Options; /*!< \brief Number of rough-wall boundary conditions for SST turbulence model options specified. */ WALL_FUNCTIONS *Kind_WallFunctions; /*!< \brief The kind of wall function to use for the corresponding markers. */ unsigned short **IntInfo_WallFunctions; /*!< \brief Additional integer information for the wall function markers. */ su2double **DoubleInfo_WallFunctions; /*!< \brief Additional double information for the wall function markers. */ diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index dd0d7491cad3..cbff8ad15909 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -1104,26 +1104,26 @@ inline SST_ParsedOptions ParseSSTOptions(const SST_OPTIONS *SST_Options, unsigne /*! * \brief SST rough-wall boundary conditions Options */ -enum class ROUGHSST_OPTIONS { +enum class ROUGHSST_MODEL { NONE, /*!< \brief No option / default no surface roughness applied. */ WILCOX1998, /*!< \brief Wilcox 1998 boundary conditions for rough walls. */ WILCOX2006, /*!< \brief Wilcox 2006 boundary conditions for rough walls / default version if roughness is applied. */ LIMITER_KNOPP, /*!< \brief Knopp eddy viscosity limiter. */ LIMITER_AUPOIX, /*!< \brief Aupoix eddy viscosity limiter. */ }; -static const MapType ROUGHSST_Options_Map = { - MakePair("NONE", ROUGHSST_OPTIONS::NONE) - MakePair("WILCOX1998", ROUGHSST_OPTIONS::WILCOX1998) - MakePair("WILCOX2006", ROUGHSST_OPTIONS::WILCOX2006) - MakePair("LIMITER_KNOPP", ROUGHSST_OPTIONS::LIMITER_KNOPP) - MakePair("LIMITER_AUPOIX", ROUGHSST_OPTIONS::LIMITER_AUPOIX) +static const MapType RoughSST_Model_Map = { + MakePair("NONE", ROUGHSST_MODEL::NONE) + MakePair("WILCOX1998", ROUGHSST_MODEL::WILCOX1998) + MakePair("WILCOX2006", ROUGHSST_MODEL::WILCOX2006) + MakePair("LIMITER_KNOPP", ROUGHSST_MODEL::LIMITER_KNOPP) + MakePair("LIMITER_AUPOIX", ROUGHSST_MODEL::LIMITER_AUPOIX) }; /*! * \brief Structure containing parsed SST rough-wall boundary conditions options. */ struct ROUGH_SST_ParsedOptions { - ROUGHSST_OPTIONS version = ROUGHSST_OPTIONS::NONE; /*!< \brief KWBC base model. */ + ROUGHSST_MODEL version = ROUGHSST_MODEL::NONE; /*!< \brief KWBC base model. */ bool wilcox1998 = false; /*!< \brief Use Wilcox boundary conditions for rough walls (1998). */ bool wilcox2006 = false; /*!< \brief Use Wilcox boundary conditions for rough walls (2006). */ bool limiter_knopp = false; /*!< \brief Use Knopp eddy viscosity limiter. */ @@ -1137,15 +1137,15 @@ struct ROUGH_SST_ParsedOptions { * \param[in] rank - MPI rank. * \return Struct with SST options. */ -inline ROUGH_SST_ParsedOptions ParseROUGHSSTOptions(ROUGHSST_OPTIONS sstbcs_option) { +inline ROUGH_SST_ParsedOptions ParseROUGHSSTOptions(ROUGHSST_MODEL sstbcs_option) { ROUGH_SST_ParsedOptions opts; opts.version = sstbcs_option; switch(sstbcs_option) { - case ROUGHSST_OPTIONS::WILCOX1998: opts.wilcox1998 = true; break; - case ROUGHSST_OPTIONS::WILCOX2006: opts.wilcox2006 = true; break; - case ROUGHSST_OPTIONS::LIMITER_KNOPP: opts.limiter_knopp = true; break; - case ROUGHSST_OPTIONS::LIMITER_AUPOIX: opts.limiter_aupoix = true; break; + case ROUGHSST_MODEL::WILCOX1998: opts.wilcox1998 = true; break; + case ROUGHSST_MODEL::WILCOX2006: opts.wilcox2006 = true; break; + case ROUGHSST_MODEL::LIMITER_KNOPP: opts.limiter_knopp = true; break; + case ROUGHSST_MODEL::LIMITER_AUPOIX: opts.limiter_aupoix = true; break; default: break; } diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index fde152750d77..b5b6662438ff 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -1131,7 +1131,7 @@ void CConfig::SetConfig_Options() { addEnumListOption("SA_OPTIONS", nSA_Options, SA_Options, SA_Options_Map); /*!\brief ROUGHSST_OPTIONS \n DESCRIPTION: Specify type of boundary condition for rough walls for SST turbulence model. \n Options: see \link ROUGHSST_Options_Map \endlink \n DEFAULT: wilcox1998 \ingroup Config*/ - addEnumListOption("ROUGHSST_OPTIONS", nROUGHSST_Options, ROUGHSST_Options, ROUGHSST_Options_Map); + addEnumOption("KIND_ROUGHSST_MODEL", Kind_RoughSST_Model, RoughSST_Model_Map, ROUGHSST_MODEL::NONE); /*!\brief KIND_TRANS_MODEL \n DESCRIPTION: Specify transition model OPTIONS: see \link Trans_Model_Map \endlink \n DEFAULT: NONE \ingroup Config*/ addEnumOption("KIND_TRANS_MODEL", Kind_Trans_Model, Trans_Model_Map, TURB_TRANS_MODEL::NONE); /*!\brief SST_OPTIONS \n DESCRIPTION: Specify LM transition model options/correlations. \n Options: see \link LM_Options_Map \endlink \n DEFAULT: NONE \ingroup Config*/ @@ -3579,7 +3579,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i /*--- Postprocess SST_OPTIONS into structure. ---*/ if (Kind_Turb_Model == TURB_MODEL::SST) { sstParsedOptions = ParseSSTOptions(SST_Options, nSST_Options, rank); - roughsstParsedOptions = ParseROUGHSSTOptions(ROUGHSST_Options[0]); + roughsstParsedOptions = ParseROUGHSSTOptions(Kind_RoughSST_Model); } else if (Kind_Turb_Model == TURB_MODEL::SA) { saParsedOptions = ParseSAOptions(SA_Options, nSA_Options, rank); } From 129f7dbf4a46891007930d0010ed7b2f3dbe46da Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Thu, 13 Nov 2025 17:30:35 +0100 Subject: [PATCH 08/11] Added rough flatplate test cases --- .../turb_SST_flatplate_roughBCAupoix.cfg | 248 +++++++++++++++++ .../turb_SST_flatplate_roughBCKnopp.cfg | 249 ++++++++++++++++++ .../turb_SST_flatplate_roughBCWilcox2006.cfg | 248 +++++++++++++++++ TestCases/serial_regression.py | 25 ++ 4 files changed, 770 insertions(+) create mode 100644 TestCases/rans/flatplate/roughness/bc_aupoix/turb_SST_flatplate_roughBCAupoix.cfg create mode 100644 TestCases/rans/flatplate/roughness/bc_knopp/turb_SST_flatplate_roughBCKnopp.cfg create mode 100644 TestCases/rans/flatplate/roughness/bc_wilcox2006/turb_SST_flatplate_roughBCWilcox2006.cfg 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 new file mode 100644 index 000000000000..d540b43b149a --- /dev/null +++ b/TestCases/rans/flatplate/roughness/bc_aupoix/turb_SST_flatplate_roughBCAupoix.cfg @@ -0,0 +1,248 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: Turbulent flow over flat plate with zero pressure gradient % +% Author: Thomas D. Economon % +% Institution: Stanford University % +% Date: 2011.11.10 % +% File Version 5.0.0 "Raven" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% +% +% Physical governing equations (EULER, NAVIER_STOKES, +% WAVE_EQUATION, HEAT_EQUATION, FEM_ELASTICITY, +% POISSON_EQUATION) +SOLVER= RANS +% +% If Navier-Stokes, kind of turbulent model (NONE, SA, SA_NEG, SST) +KIND_TURB_MODEL= SST +WALL_ROUGHNESS = (wall, 400e-6) +KIND_ROUGHSST_MODEL = LIMITER_AUPOIX +% +% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT) +MATH_PROBLEM= DIRECT +% +% Restart solution (NO, YES) +RESTART_SOL= NO +READ_BINARY_RESTART= YES + +% ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------% +% +% Mach number (non-dimensional, based on the free-stream values) +MACH_NUMBER= 0.2 +% +% Angle of attack (degrees) +AOA= 0.0 +% +% Side-slip angle (degrees) +SIDESLIP_ANGLE= 0.0 +% +% Free-stream temperature (288.15 K by default) +FREESTREAM_TEMPERATURE= 300.0 +% +% Reynolds number (non-dimensional, based on the free-stream values) +REYNOLDS_NUMBER= 5000000.0 +% +% Reynolds length (in meters) +REYNOLDS_LENGTH= 1.0 + +% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% +% +% Reference origin for moment computation +REF_ORIGIN_MOMENT_X = 0.25 +REF_ORIGIN_MOMENT_Y = 0.00 +REF_ORIGIN_MOMENT_Z = 0.00 +% +% Reference length for pitching, rolling, and yawing non-dimensional moment +REF_LENGTH= 1.0 +% +% Reference area for force coefficients (0 implies automatic calculation) +REF_AREA= 2.0 + +% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% +% +% Navier-Stokes wall boundary marker(s) (NONE = no marker) +MARKER_HEATFLUX= ( wall, 0.0 ) +% +% Inlet boundary marker(s) (NONE = no marker) +% Format: ( inlet marker, total temperature, total pressure, flow_direction_x, +% flow_direction_y, flow_direction_z, ... ) +MARKER_INLET= ( inlet, 302.4, 118309.784, 1.0, 0.0, 0.0 ) +% +% Outlet boundary marker(s) (NONE = no marker) +% Format: ( outlet marker, back pressure, ... ) +MARKER_OUTLET= ( outlet, 115056.0, farfield, 115056.0 ) +% +% Symmetry boundary marker(s) (NONE = no marker) +MARKER_SYM= ( symmetry ) +% +% Marker(s) of the surface to be plotted or designed +MARKER_PLOTTING= ( wall ) +% +% Marker(s) of the surface where the functional (Cd, Cl, etc.) will be evaluated +MARKER_MONITORING= ( wall ) + +% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% +% +% Numerical method for spatial gradients (GREEN_GAUSS, LEAST_SQUARES, +% WEIGHTED_LEAST_SQUARES) +NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES +% +% Courant-Friedrichs-Lewy condition of the finest grid +CFL_NUMBER= 100.0 +% +% Adaptive CFL number (NO, YES) +CFL_ADAPT= YES +% +% Parameters of the adaptive CFL number (factor down, factor up, CFL min value, +% CFL max value ) +CFL_ADAPT_PARAM= ( 0.1, 2.0, 100.0, 1e5 ) +% +% Runge-Kutta alpha coefficients +RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) +% +% Number of total iterations +ITER= 99999 + +% ----------------------- SLOPE LIMITER DEFINITION ----------------------------% +% +% Coefficient for the limiter +VENKAT_LIMITER_COEFF= 0.1 +% +% Coefficient for the sharp edges limiter +ADJ_SHARP_LIMITER_COEFF= 3.0 +% +% Reference coefficient (sensitivity) for detecting sharp edges. +REF_SHARP_EDGES= 3.0 +% +% Remove sharp edges from the sensitivity evaluation (NO, YES) +SENS_REMOVE_SHARP= NO + +% -------------------------- 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= ( 2, 2, 2, 2) +% +% Jacobi implicit smoothing of the correction +MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +% +% Damping factor for the residual restriction +MG_DAMP_RESTRICTION= 0.8 +% +% Damping factor for the correction prolongation +MG_DAMP_PROLONGATION= 0.8 + +% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% +% +% Convective numerical method (JST, LAX-FRIEDRICH, CUSP, ROE, AUSM, HLLC, +% TURKEL_PREC, MSW) +CONV_NUM_METHOD_FLOW= ROE +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_FLOW= YES +% +% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG, +% BARTH_JESPERSEN, VAN_ALBADA_EDGE) +SLOPE_LIMITER_FLOW= NONE +% +% 2nd and 4th order artificial dissipation coefficients +JST_SENSOR_COEFF= ( 0.5, 0.02 ) +% +% 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 +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_TURB= NO +% +% Slope limiter (VENKATAKRISHNAN, MINMOD) +SLOPE_LIMITER_TURB= VENKATAKRISHNAN +% +% Time discretization (EULER_IMPLICIT) +TIME_DISCRE_TURB= EULER_IMPLICIT + +% --------------------------- CONVERGENCE PARAMETERS --------------------------% +% +% Convergence criteria (CAUCHY, RESIDUAL) +CONV_FIELD= RMS_DENSITY +% +% Min value of the residual (log10 of the residual) +CONV_RESIDUAL_MINVAL= -14 +% +% 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-6 +% + +% ------------------------- INPUT/OUTPUT INFORMATION --------------------------% +% +% Mesh input file +MESH_FILENAME= mesh_flatplate_turb_137x97.su2 +% +% Mesh input file format (SU2, CGNS, NETCDF_ASCII) +MESH_FORMAT= SU2 +% +% 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 file format (PARAVIEW, TECPLOT, SLT) +TABULAR_FORMAT= CSV +% +% Output file convergence history (w/o extension) +CONV_FILENAME= history +% +% 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 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 +% +% Writing solution file frequency +OUTPUT_WRT_FREQ= 1000 +% +% +% Screen output +SCREEN_OUTPUT= (INNER_ITER, WALL_TIME, RMS_RES, LIFT, DRAG) 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 new file mode 100644 index 000000000000..92d97d056b47 --- /dev/null +++ b/TestCases/rans/flatplate/roughness/bc_knopp/turb_SST_flatplate_roughBCKnopp.cfg @@ -0,0 +1,249 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: Turbulent flow over flat plate with zero pressure gradient % +% Author: Thomas D. Economon % +% Institution: Stanford University % +% Date: 2011.11.10 % +% File Version 5.0.0 "Raven" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% +% +% Physical governing equations (EULER, NAVIER_STOKES, +% WAVE_EQUATION, HEAT_EQUATION, FEM_ELASTICITY, +% POISSON_EQUATION) +SOLVER= RANS +% +% If Navier-Stokes, kind of turbulent model (NONE, SA, SA_NEG, SST) +KIND_TURB_MODEL= SST +WALL_ROUGHNESS = (wall, 400e-6) +KIND_ROUGHSST_MODEL = LIMITER_KNOPP +% +% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT) +MATH_PROBLEM= DIRECT +% +% Restart solution (NO, YES) +RESTART_SOL= NO +READ_BINARY_RESTART= YES + +% ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------% +% +% Mach number (non-dimensional, based on the free-stream values) +MACH_NUMBER= 0.2 +% +% Angle of attack (degrees) +AOA= 0.0 +% +% Side-slip angle (degrees) +SIDESLIP_ANGLE= 0.0 +% +% Free-stream temperature (288.15 K by default) +FREESTREAM_TEMPERATURE= 300.0 +% +% Reynolds number (non-dimensional, based on the free-stream values) +REYNOLDS_NUMBER= 5000000.0 +% +% Reynolds length (in meters) +REYNOLDS_LENGTH= 1.0 + +% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% +% +% Reference origin for moment computation +REF_ORIGIN_MOMENT_X = 0.25 +REF_ORIGIN_MOMENT_Y = 0.00 +REF_ORIGIN_MOMENT_Z = 0.00 +% +% Reference length for pitching, rolling, and yawing non-dimensional moment +REF_LENGTH= 1.0 +% +% Reference area for force coefficients (0 implies automatic calculation) +REF_AREA= 2.0 + +% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% +% +% Navier-Stokes wall boundary marker(s) (NONE = no marker) +MARKER_HEATFLUX= ( wall, 0.0 ) +% +% Inlet boundary marker(s) (NONE = no marker) +% Format: ( inlet marker, total temperature, total pressure, flow_direction_x, +% flow_direction_y, flow_direction_z, ... ) +MARKER_INLET= ( inlet, 302.4, 118309.784, 1.0, 0.0, 0.0 ) +% +% Outlet boundary marker(s) (NONE = no marker) +% Format: ( outlet marker, back pressure, ... ) +MARKER_OUTLET= ( outlet, 115056.0, farfield, 115056.0 ) +% +% Symmetry boundary marker(s) (NONE = no marker) +MARKER_SYM= ( symmetry ) +% +% Marker(s) of the surface to be plotted or designed +MARKER_PLOTTING= ( wall ) +% +% Marker(s) of the surface where the functional (Cd, Cl, etc.) will be evaluated +MARKER_MONITORING= ( wall ) + +% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% +% +% Numerical method for spatial gradients (GREEN_GAUSS, LEAST_SQUARES, +% WEIGHTED_LEAST_SQUARES) +NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES +% +% Courant-Friedrichs-Lewy condition of the finest grid +CFL_NUMBER= 100.0 +% +% Adaptive CFL number (NO, YES) +CFL_ADAPT= YES +% +% Parameters of the adaptive CFL number (factor down, factor up, CFL min value, +% CFL max value ) +CFL_ADAPT_PARAM= ( 0.1, 2.0, 100.0, 1e5 ) +% +% Runge-Kutta alpha coefficients +RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) +% +% Number of total iterations +ITER= 99999 + +% ----------------------- SLOPE LIMITER DEFINITION ----------------------------% +% +% Coefficient for the limiter +VENKAT_LIMITER_COEFF= 0.1 +% +% Coefficient for the sharp edges limiter +ADJ_SHARP_LIMITER_COEFF= 3.0 +% +% Reference coefficient (sensitivity) for detecting sharp edges. +REF_SHARP_EDGES= 3.0 +% +% Remove sharp edges from the sensitivity evaluation (NO, YES) +SENS_REMOVE_SHARP= NO + +% -------------------------- 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= ( 2, 2, 2, 2) +% +% Jacobi implicit smoothing of the correction +MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +% +% Damping factor for the residual restriction +MG_DAMP_RESTRICTION= 0.8 +% +% Damping factor for the correction prolongation +MG_DAMP_PROLONGATION= 0.8 + +% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% +% +% Convective numerical method (JST, LAX-FRIEDRICH, CUSP, ROE, AUSM, HLLC, +% TURKEL_PREC, MSW) +CONV_NUM_METHOD_FLOW= ROE +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_FLOW= YES +% +% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG, +% BARTH_JESPERSEN, VAN_ALBADA_EDGE) +SLOPE_LIMITER_FLOW= NONE +% +% 2nd and 4th order artificial dissipation coefficients +JST_SENSOR_COEFF= ( 0.5, 0.02 ) +% +% 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 +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_TURB= NO +% +% Slope limiter (VENKATAKRISHNAN, MINMOD) +SLOPE_LIMITER_TURB= VENKATAKRISHNAN +% +% Time discretization (EULER_IMPLICIT) +TIME_DISCRE_TURB= EULER_IMPLICIT + +% --------------------------- CONVERGENCE PARAMETERS --------------------------% +% +% Convergence criteria (CAUCHY, RESIDUAL) +CONV_FIELD= RMS_DENSITY +% +% Min value of the residual (log10 of the residual) +CONV_RESIDUAL_MINVAL= -14 +% +% 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-6 +% + +% ------------------------- INPUT/OUTPUT INFORMATION --------------------------% +% +% Mesh input file +MESH_FILENAME= mesh_flatplate_turb_137x97.su2 +% +% Mesh input file format (SU2, CGNS, NETCDF_ASCII) +MESH_FORMAT= SU2 +% +% 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 file format (PARAVIEW, TECPLOT, SLT) +TABULAR_FORMAT= CSV +% +% Output file convergence history (w/o extension) +CONV_FILENAME= history +% +% 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 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 +% +% Writing solution file frequency +OUTPUT_WRT_FREQ= 1000 +% +% +% Screen output +SCREEN_OUTPUT= (INNER_ITER, WALL_TIME, RMS_RES, LIFT, DRAG) + 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 new file mode 100644 index 000000000000..2dcf0e86e3dc --- /dev/null +++ b/TestCases/rans/flatplate/roughness/bc_wilcox2006/turb_SST_flatplate_roughBCWilcox2006.cfg @@ -0,0 +1,248 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: Turbulent flow over flat plate with zero pressure gradient % +% Author: Thomas D. Economon % +% Institution: Stanford University % +% Date: 2011.11.10 % +% File Version 5.0.0 "Raven" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% +% +% Physical governing equations (EULER, NAVIER_STOKES, +% WAVE_EQUATION, HEAT_EQUATION, FEM_ELASTICITY, +% POISSON_EQUATION) +SOLVER= RANS +% +% If Navier-Stokes, kind of turbulent model (NONE, SA, SA_NEG, SST) +KIND_TURB_MODEL= SST +WALL_ROUGHNESS = (wall, 400e-6) +KIND_ROUGHSST_MODEL = WILCOX2006 +% +% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT) +MATH_PROBLEM= DIRECT +% +% Restart solution (NO, YES) +RESTART_SOL= NO +READ_BINARY_RESTART= YES + +% ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------% +% +% Mach number (non-dimensional, based on the free-stream values) +MACH_NUMBER= 0.2 +% +% Angle of attack (degrees) +AOA= 0.0 +% +% Side-slip angle (degrees) +SIDESLIP_ANGLE= 0.0 +% +% Free-stream temperature (288.15 K by default) +FREESTREAM_TEMPERATURE= 300.0 +% +% Reynolds number (non-dimensional, based on the free-stream values) +REYNOLDS_NUMBER= 5000000.0 +% +% Reynolds length (in meters) +REYNOLDS_LENGTH= 1.0 + +% ---------------------- REFERENCE VALUE DEFINITION ---------------------------% +% +% Reference origin for moment computation +REF_ORIGIN_MOMENT_X = 0.25 +REF_ORIGIN_MOMENT_Y = 0.00 +REF_ORIGIN_MOMENT_Z = 0.00 +% +% Reference length for pitching, rolling, and yawing non-dimensional moment +REF_LENGTH= 1.0 +% +% Reference area for force coefficients (0 implies automatic calculation) +REF_AREA= 2.0 + +% -------------------- BOUNDARY CONDITION DEFINITION --------------------------% +% +% Navier-Stokes wall boundary marker(s) (NONE = no marker) +MARKER_HEATFLUX= ( wall, 0.0 ) +% +% Inlet boundary marker(s) (NONE = no marker) +% Format: ( inlet marker, total temperature, total pressure, flow_direction_x, +% flow_direction_y, flow_direction_z, ... ) +MARKER_INLET= ( inlet, 302.4, 118309.784, 1.0, 0.0, 0.0 ) +% +% Outlet boundary marker(s) (NONE = no marker) +% Format: ( outlet marker, back pressure, ... ) +MARKER_OUTLET= ( outlet, 115056.0, farfield, 115056.0 ) +% +% Symmetry boundary marker(s) (NONE = no marker) +MARKER_SYM= ( symmetry ) +% +% Marker(s) of the surface to be plotted or designed +MARKER_PLOTTING= ( wall ) +% +% Marker(s) of the surface where the functional (Cd, Cl, etc.) will be evaluated +MARKER_MONITORING= ( wall ) + +% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% +% +% Numerical method for spatial gradients (GREEN_GAUSS, LEAST_SQUARES, +% WEIGHTED_LEAST_SQUARES) +NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES +% +% Courant-Friedrichs-Lewy condition of the finest grid +CFL_NUMBER= 100.0 +% +% Adaptive CFL number (NO, YES) +CFL_ADAPT= YES +% +% Parameters of the adaptive CFL number (factor down, factor up, CFL min value, +% CFL max value ) +CFL_ADAPT_PARAM= ( 0.1, 2.0, 100.0, 1e5 ) +% +% Runge-Kutta alpha coefficients +RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) +% +% Number of total iterations +ITER= 99999 + +% ----------------------- SLOPE LIMITER DEFINITION ----------------------------% +% +% Coefficient for the limiter +VENKAT_LIMITER_COEFF= 0.1 +% +% Coefficient for the sharp edges limiter +ADJ_SHARP_LIMITER_COEFF= 3.0 +% +% Reference coefficient (sensitivity) for detecting sharp edges. +REF_SHARP_EDGES= 3.0 +% +% Remove sharp edges from the sensitivity evaluation (NO, YES) +SENS_REMOVE_SHARP= NO + +% -------------------------- 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= ( 2, 2, 2, 2) +% +% Jacobi implicit smoothing of the correction +MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) +% +% Damping factor for the residual restriction +MG_DAMP_RESTRICTION= 0.8 +% +% Damping factor for the correction prolongation +MG_DAMP_PROLONGATION= 0.8 + +% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% +% +% Convective numerical method (JST, LAX-FRIEDRICH, CUSP, ROE, AUSM, HLLC, +% TURKEL_PREC, MSW) +CONV_NUM_METHOD_FLOW= ROE +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_FLOW= YES +% +% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG, +% BARTH_JESPERSEN, VAN_ALBADA_EDGE) +SLOPE_LIMITER_FLOW= NONE +% +% 2nd and 4th order artificial dissipation coefficients +JST_SENSOR_COEFF= ( 0.5, 0.02 ) +% +% 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 +% +% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations. +% Required for 2nd order upwind schemes (NO, YES) +MUSCL_TURB= NO +% +% Slope limiter (VENKATAKRISHNAN, MINMOD) +SLOPE_LIMITER_TURB= VENKATAKRISHNAN +% +% Time discretization (EULER_IMPLICIT) +TIME_DISCRE_TURB= EULER_IMPLICIT + +% --------------------------- CONVERGENCE PARAMETERS --------------------------% +% +% Convergence criteria (CAUCHY, RESIDUAL) +CONV_FIELD= RMS_DENSITY +% +% Min value of the residual (log10 of the residual) +CONV_RESIDUAL_MINVAL= -14 +% +% 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-6 +% + +% ------------------------- INPUT/OUTPUT INFORMATION --------------------------% +% +% Mesh input file +MESH_FILENAME= mesh_flatplate_turb_137x97.su2 +% +% Mesh input file format (SU2, CGNS, NETCDF_ASCII) +MESH_FORMAT= SU2 +% +% 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 file format (PARAVIEW, TECPLOT, SLT) +TABULAR_FORMAT= CSV +% +% Output file convergence history (w/o extension) +CONV_FILENAME= history +% +% 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 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 +% +% Writing solution file frequency +OUTPUT_WRT_FREQ= 1000 +% +% +% Screen output +SCREEN_OUTPUT= (INNER_ITER, WALL_TIME, RMS_RES, LIFT, DRAG) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 075856261908..51bdf0d9d0a1 100644 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -253,6 +253,31 @@ def main(): turb_wallfunction_flatplate_sst.test_vals = [-4.581446, -1.913566, -1.958042, 0.909602, -1.602844, 1.482035, 10.000000, -1.741580, 0.033323, 0.002425] test_list.append(turb_wallfunction_flatplate_sst) + # FLAT PLATE, ROUGHNESS BCS WILCOX2006 SST + turb_flatplate_sst_roughBCWilcox2006 = TestCase('turb_sst_flatplate_roughBCWilcox2006') + turb_flatplate_sst_roughBCWilcox2006.cfg_dir = "rans/flatplate/roughness/bc_wilcox2006" + turb_flatplate_sst_roughBCWilcox2006.cfg_file = "turb_SST_flatplate_roughBCWilcox2006.cfg" + turb_flatplate_sst_roughBCWilcox2006.test_iter = 10 + turb_flatplate_sst_roughBCWilcox2006.test_vals = [-4.581446, -1.913566, -1.958042, 0.909602, -1.602844, 1.482035, 10.000000, -1.741580, 0.033323, 0.002425] + test_list.append(turb_flatplate_sst_roughBCWilcox2006) + + # FLAT PLATE, ROUGHNESS BCS KNOPP SST + turb_flatplate_sst_roughBCKnopp = TestCase('turb_sst_flatplate_roughBCKnopp') + turb_flatplate_sst_roughBCKnopp.cfg_dir = "rans/flatplate/roughness/bc_knopp" + turb_flatplate_sst_roughBCKnopp.cfg_file = "turb_SST_flatplate_roughBCKnopp.cfg" + turb_flatplate_sst_roughBCKnopp.test_iter = 10 + turb_flatplate_sst_roughBCKnopp.test_vals = [-4.581446, -1.913566, -1.958042, 0.909602, -1.602844, 1.482035, 10.000000, -1.741580, 0.033323, 0.002425] + test_list.append(turb_flatplate_sst_roughBCKnopp) + + # FLAT PLATE, ROUGHNESS BCS AUPOIX SST + turb_flatplate_sst_roughBCAupoix = TestCase('turb_sst_flatplate_roughBCAupoix') + 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 = [-4.581446, -1.913566, -1.958042, 0.909602, -1.602844, 1.482035, 10.000000, -1.741580, 0.033323, 0.002425] + test_list.append(turb_flatplate_sst_roughBCAupoix) + + # FLAT PLATE, WALL FUNCTIONS, COMPRESSIBLE SA turb_wallfunction_flatplate_sa = TestCase('turb_sa_wallfunction_flatplate') turb_wallfunction_flatplate_sa.cfg_dir = "wallfunctions/flatplate/compressible_SA" From 292af3149e9d3dce7b49dda21272964c99ed2864 Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Mon, 17 Nov 2025 16:45:57 +0100 Subject: [PATCH 09/11] Fixed values regression test rough flat plate --- 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 51bdf0d9d0a1..fc23b90ab77d 100644 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -258,7 +258,7 @@ def main(): turb_flatplate_sst_roughBCWilcox2006.cfg_dir = "rans/flatplate/roughness/bc_wilcox2006" turb_flatplate_sst_roughBCWilcox2006.cfg_file = "turb_SST_flatplate_roughBCWilcox2006.cfg" turb_flatplate_sst_roughBCWilcox2006.test_iter = 10 - turb_flatplate_sst_roughBCWilcox2006.test_vals = [-4.581446, -1.913566, -1.958042, 0.909602, -1.602844, 1.482035, 10.000000, -1.741580, 0.033323, 0.002425] + turb_flatplate_sst_roughBCWilcox2006.test_vals = [10.000000, 0.052109, -3.937983, -1.063721, -1.483116, 1.514608, -1.003919, 4.472050, -0.180308, 0.033500] test_list.append(turb_flatplate_sst_roughBCWilcox2006) # FLAT PLATE, ROUGHNESS BCS KNOPP SST @@ -266,7 +266,7 @@ def main(): turb_flatplate_sst_roughBCKnopp.cfg_dir = "rans/flatplate/roughness/bc_knopp" turb_flatplate_sst_roughBCKnopp.cfg_file = "turb_SST_flatplate_roughBCKnopp.cfg" turb_flatplate_sst_roughBCKnopp.test_iter = 10 - turb_flatplate_sst_roughBCKnopp.test_vals = [-4.581446, -1.913566, -1.958042, 0.909602, -1.602844, 1.482035, 10.000000, -1.741580, 0.033323, 0.002425] + turb_flatplate_sst_roughBCKnopp.test_vals = [10.000000, 0.053020, -3.454853, -0.684543, -0.886080, 2.140376, 1.043068, 4.808919, -0.203494, 0.053645] test_list.append(turb_flatplate_sst_roughBCKnopp) # FLAT PLATE, ROUGHNESS BCS AUPOIX SST @@ -274,7 +274,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 = [-4.581446, -1.913566, -1.958042, 0.909602, -1.602844, 1.482035, 10.000000, -1.741580, 0.033323, 0.002425] + turb_flatplate_sst_roughBCAupoix.test_vals = [10.000000, 0.053252, -3.575414, -0.761810, -0.998912, 2.003238, 0.907276, 4.807309, -0.197354, 0.051349] test_list.append(turb_flatplate_sst_roughBCAupoix) From 26ce36fd8b7b7be7b09e9c88dafc34af57331231 Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Mon, 17 Nov 2025 16:54:07 +0100 Subject: [PATCH 10/11] Fix regression test roughness --- 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 fc23b90ab77d..31ed1b173c2d 100644 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -253,7 +253,7 @@ def main(): turb_wallfunction_flatplate_sst.test_vals = [-4.581446, -1.913566, -1.958042, 0.909602, -1.602844, 1.482035, 10.000000, -1.741580, 0.033323, 0.002425] test_list.append(turb_wallfunction_flatplate_sst) - # FLAT PLATE, ROUGHNESS BCS WILCOX2006 SST + # FLAT PLATE, ROUGHNESS BC WILCOX2006 SST turb_flatplate_sst_roughBCWilcox2006 = TestCase('turb_sst_flatplate_roughBCWilcox2006') turb_flatplate_sst_roughBCWilcox2006.cfg_dir = "rans/flatplate/roughness/bc_wilcox2006" turb_flatplate_sst_roughBCWilcox2006.cfg_file = "turb_SST_flatplate_roughBCWilcox2006.cfg" @@ -261,7 +261,7 @@ def main(): turb_flatplate_sst_roughBCWilcox2006.test_vals = [10.000000, 0.052109, -3.937983, -1.063721, -1.483116, 1.514608, -1.003919, 4.472050, -0.180308, 0.033500] test_list.append(turb_flatplate_sst_roughBCWilcox2006) - # FLAT PLATE, ROUGHNESS BCS KNOPP SST + # FLAT PLATE, ROUGHNESS BC KNOPP SST turb_flatplate_sst_roughBCKnopp = TestCase('turb_sst_flatplate_roughBCKnopp') turb_flatplate_sst_roughBCKnopp.cfg_dir = "rans/flatplate/roughness/bc_knopp" turb_flatplate_sst_roughBCKnopp.cfg_file = "turb_SST_flatplate_roughBCKnopp.cfg" @@ -269,7 +269,7 @@ def main(): turb_flatplate_sst_roughBCKnopp.test_vals = [10.000000, 0.053020, -3.454853, -0.684543, -0.886080, 2.140376, 1.043068, 4.808919, -0.203494, 0.053645] test_list.append(turb_flatplate_sst_roughBCKnopp) - # FLAT PLATE, ROUGHNESS BCS AUPOIX SST + # FLAT PLATE, ROUGHNESS BC AUPOIX SST turb_flatplate_sst_roughBCAupoix = TestCase('turb_sst_flatplate_roughBCAupoix') turb_flatplate_sst_roughBCAupoix.cfg_dir = "rans/flatplate/roughness/bc_aupoix" turb_flatplate_sst_roughBCAupoix.cfg_file = "turb_SST_flatplate_roughBCAupoix.cfg" From 1d14e38556bc722e7d19cecb0f1b120da4d48372 Mon Sep 17 00:00:00 2001 From: marcosch27 Date: Fri, 21 Nov 2025 20:11:45 +0100 Subject: [PATCH 11/11] Cleaned regression tests for rough flat plate and moved to parallel regression --- SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 1 - TestCases/parallel_regression.py | 16 ++ .../turb_SST_flatplate_roughBCAupoix.cfg | 161 ++--------------- .../turb_SST_flatplate_roughBCKnopp.cfg | 162 ++---------------- .../turb_SST_flatplate_roughBCWilcox2006.cfg | 161 ++--------------- TestCases/serial_regression.py | 17 -- 6 files changed, 49 insertions(+), 469 deletions(-) diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index 704643fd61b1..8d856dc754cd 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -491,7 +491,6 @@ void CTurbSSTSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_cont nodes->SetSolution_Old(iPoint,solution); nodes->SetSolution(iPoint,solution); LinSysRes.SetBlock_Zero(iPoint); - } else { // smooth wall /*--- Set wall values ---*/ su2double density = solver_container[FLOW_SOL]->GetNodes()->GetDensity(iPoint); diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py index 7e4df8048912..9e22f20dcd7b 100644 --- a/TestCases/parallel_regression.py +++ b/TestCases/parallel_regression.py @@ -408,6 +408,22 @@ def main(): turb_flatplate_CC_Sarkar.test_vals = [-1.195053, 2.089306, 1.529063, 5.164703, -3.700917, 8.162921] test_list.append(turb_flatplate_CC_Sarkar) + # FLAT PLATE, ROUGHNESS BC KNOPP SST + turb_flatplate_sst_roughBCKnopp = TestCase('turb_sst_flatplate_roughBCKnopp') + turb_flatplate_sst_roughBCKnopp.cfg_dir = "rans/flatplate/roughness/bc_knopp" + turb_flatplate_sst_roughBCKnopp.cfg_file = "turb_SST_flatplate_roughBCKnopp.cfg" + turb_flatplate_sst_roughBCKnopp.test_iter = 10 + turb_flatplate_sst_roughBCKnopp.test_vals = [10.000000, 0.053020, -3.454853, -0.684543, -0.886080, 2.140376, 1.043068, 4.808919, -0.203494, 0.053645] + test_list.append(turb_flatplate_sst_roughBCKnopp) + + # FLAT PLATE, ROUGHNESS BC AUPOIX SST + turb_flatplate_sst_roughBCAupoix = TestCase('turb_sst_flatplate_roughBCAupoix') + 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 = [10.000000, 0.053252, -3.575414, -0.761810, -0.998912, 2.003238, 0.907276, 4.807309, -0.197354, 0.051349] + test_list.append(turb_flatplate_sst_roughBCAupoix) + # ONERA M6 Wing turb_oneram6 = TestCase('turb_oneram6') turb_oneram6.cfg_dir = "rans/oneram6" 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 d540b43b149a..79ccb100425b 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 @@ -1,248 +1,109 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% SU2 configuration file % -% Case description: Turbulent flow over flat plate with zero pressure gradient % -% Author: Thomas D. Economon % -% Institution: Stanford University % -% Date: 2011.11.10 % -% File Version 5.0.0 "Raven" % -% % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: Turbulent flow over rough flat plate with zero pressure gradient % +% Author: Thomas D. Economon % +% Institution: Stanford University % +% Date: 2011.11.10 % +% File Version 8.3.0 "Harrier" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% % -% Physical governing equations (EULER, NAVIER_STOKES, -% WAVE_EQUATION, HEAT_EQUATION, FEM_ELASTICITY, -% POISSON_EQUATION) SOLVER= RANS -% -% If Navier-Stokes, kind of turbulent model (NONE, SA, SA_NEG, SST) KIND_TURB_MODEL= SST WALL_ROUGHNESS = (wall, 400e-6) KIND_ROUGHSST_MODEL = LIMITER_AUPOIX -% -% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT) MATH_PROBLEM= DIRECT -% -% Restart solution (NO, YES) RESTART_SOL= NO READ_BINARY_RESTART= YES % ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------% -% -% Mach number (non-dimensional, based on the free-stream values) MACH_NUMBER= 0.2 -% -% Angle of attack (degrees) AOA= 0.0 -% -% Side-slip angle (degrees) SIDESLIP_ANGLE= 0.0 -% -% Free-stream temperature (288.15 K by default) FREESTREAM_TEMPERATURE= 300.0 -% -% Reynolds number (non-dimensional, based on the free-stream values) REYNOLDS_NUMBER= 5000000.0 -% -% Reynolds length (in meters) REYNOLDS_LENGTH= 1.0 % ---------------------- REFERENCE VALUE DEFINITION ---------------------------% % -% Reference origin for moment computation REF_ORIGIN_MOMENT_X = 0.25 REF_ORIGIN_MOMENT_Y = 0.00 REF_ORIGIN_MOMENT_Z = 0.00 -% -% Reference length for pitching, rolling, and yawing non-dimensional moment REF_LENGTH= 1.0 -% -% Reference area for force coefficients (0 implies automatic calculation) REF_AREA= 2.0 % -------------------- BOUNDARY CONDITION DEFINITION --------------------------% % -% Navier-Stokes wall boundary marker(s) (NONE = no marker) MARKER_HEATFLUX= ( wall, 0.0 ) -% -% Inlet boundary marker(s) (NONE = no marker) -% Format: ( inlet marker, total temperature, total pressure, flow_direction_x, -% flow_direction_y, flow_direction_z, ... ) MARKER_INLET= ( inlet, 302.4, 118309.784, 1.0, 0.0, 0.0 ) -% -% Outlet boundary marker(s) (NONE = no marker) -% Format: ( outlet marker, back pressure, ... ) MARKER_OUTLET= ( outlet, 115056.0, farfield, 115056.0 ) -% -% Symmetry boundary marker(s) (NONE = no marker) MARKER_SYM= ( symmetry ) -% -% Marker(s) of the surface to be plotted or designed MARKER_PLOTTING= ( wall ) -% -% Marker(s) of the surface where the functional (Cd, Cl, etc.) will be evaluated MARKER_MONITORING= ( wall ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % -% Numerical method for spatial gradients (GREEN_GAUSS, LEAST_SQUARES, -% WEIGHTED_LEAST_SQUARES) NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -% -% Courant-Friedrichs-Lewy condition of the finest grid CFL_NUMBER= 100.0 -% -% Adaptive CFL number (NO, YES) CFL_ADAPT= YES -% -% Parameters of the adaptive CFL number (factor down, factor up, CFL min value, -% CFL max value ) CFL_ADAPT_PARAM= ( 0.1, 2.0, 100.0, 1e5 ) -% -% Runge-Kutta alpha coefficients RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) -% -% Number of total iterations ITER= 99999 % ----------------------- SLOPE LIMITER DEFINITION ----------------------------% % -% Coefficient for the limiter VENKAT_LIMITER_COEFF= 0.1 -% -% Coefficient for the sharp edges limiter ADJ_SHARP_LIMITER_COEFF= 3.0 -% -% Reference coefficient (sensitivity) for detecting sharp edges. REF_SHARP_EDGES= 3.0 -% -% Remove sharp edges from the sensitivity evaluation (NO, YES) SENS_REMOVE_SHARP= NO % -------------------------- 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= ( 2, 2, 2, 2) -% -% Jacobi implicit smoothing of the correction -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -% -% Damping factor for the residual restriction -MG_DAMP_RESTRICTION= 0.8 -% -% Damping factor for the correction prolongation -MG_DAMP_PROLONGATION= 0.8 - % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % -% Convective numerical method (JST, LAX-FRIEDRICH, CUSP, ROE, AUSM, HLLC, -% TURKEL_PREC, MSW) CONV_NUM_METHOD_FLOW= ROE % -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations. -% Required for 2nd order upwind schemes (NO, YES) MUSCL_FLOW= YES -% -% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG, -% BARTH_JESPERSEN, VAN_ALBADA_EDGE) SLOPE_LIMITER_FLOW= NONE -% -% 2nd and 4th order artificial dissipation coefficients JST_SENSOR_COEFF= ( 0.5, 0.02 ) -% -% 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 -% -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations. -% Required for 2nd order upwind schemes (NO, YES) MUSCL_TURB= NO -% -% Slope limiter (VENKATAKRISHNAN, MINMOD) SLOPE_LIMITER_TURB= VENKATAKRISHNAN -% -% Time discretization (EULER_IMPLICIT) TIME_DISCRE_TURB= EULER_IMPLICIT % --------------------------- CONVERGENCE PARAMETERS --------------------------% % -% Convergence criteria (CAUCHY, RESIDUAL) CONV_FIELD= RMS_DENSITY -% -% Min value of the residual (log10 of the residual) CONV_RESIDUAL_MINVAL= -14 -% -% 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-6 % % ------------------------- INPUT/OUTPUT INFORMATION --------------------------% % -% Mesh input file MESH_FILENAME= mesh_flatplate_turb_137x97.su2 -% -% Mesh input file format (SU2, CGNS, NETCDF_ASCII) MESH_FORMAT= SU2 -% -% 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 file format (PARAVIEW, TECPLOT, SLT) TABULAR_FORMAT= CSV -% -% Output file convergence history (w/o extension) CONV_FILENAME= history -% -% 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 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 -% -% Writing solution file frequency OUTPUT_WRT_FREQ= 1000 -% -% -% Screen output SCREEN_OUTPUT= (INNER_ITER, WALL_TIME, RMS_RES, LIFT, DRAG) 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 92d97d056b47..db865956d9e7 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 @@ -1,249 +1,109 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% SU2 configuration file % -% Case description: Turbulent flow over flat plate with zero pressure gradient % -% Author: Thomas D. Economon % -% Institution: Stanford University % -% Date: 2011.11.10 % -% File Version 5.0.0 "Raven" % -% % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: Turbulent flow over rough flat plate with zero pressure gradient % +% Author: Thomas D. Economon % +% Institution: Stanford University % +% Date: 2011.11.10 % +% File Version 8.3.0 "Harrier" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% % -% Physical governing equations (EULER, NAVIER_STOKES, -% WAVE_EQUATION, HEAT_EQUATION, FEM_ELASTICITY, -% POISSON_EQUATION) SOLVER= RANS -% -% If Navier-Stokes, kind of turbulent model (NONE, SA, SA_NEG, SST) KIND_TURB_MODEL= SST WALL_ROUGHNESS = (wall, 400e-6) KIND_ROUGHSST_MODEL = LIMITER_KNOPP -% -% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT) MATH_PROBLEM= DIRECT -% -% Restart solution (NO, YES) RESTART_SOL= NO READ_BINARY_RESTART= YES % ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------% -% -% Mach number (non-dimensional, based on the free-stream values) MACH_NUMBER= 0.2 -% -% Angle of attack (degrees) AOA= 0.0 -% -% Side-slip angle (degrees) SIDESLIP_ANGLE= 0.0 -% -% Free-stream temperature (288.15 K by default) FREESTREAM_TEMPERATURE= 300.0 -% -% Reynolds number (non-dimensional, based on the free-stream values) REYNOLDS_NUMBER= 5000000.0 -% -% Reynolds length (in meters) REYNOLDS_LENGTH= 1.0 % ---------------------- REFERENCE VALUE DEFINITION ---------------------------% % -% Reference origin for moment computation REF_ORIGIN_MOMENT_X = 0.25 REF_ORIGIN_MOMENT_Y = 0.00 REF_ORIGIN_MOMENT_Z = 0.00 -% -% Reference length for pitching, rolling, and yawing non-dimensional moment REF_LENGTH= 1.0 -% -% Reference area for force coefficients (0 implies automatic calculation) REF_AREA= 2.0 % -------------------- BOUNDARY CONDITION DEFINITION --------------------------% % -% Navier-Stokes wall boundary marker(s) (NONE = no marker) MARKER_HEATFLUX= ( wall, 0.0 ) -% -% Inlet boundary marker(s) (NONE = no marker) -% Format: ( inlet marker, total temperature, total pressure, flow_direction_x, -% flow_direction_y, flow_direction_z, ... ) MARKER_INLET= ( inlet, 302.4, 118309.784, 1.0, 0.0, 0.0 ) -% -% Outlet boundary marker(s) (NONE = no marker) -% Format: ( outlet marker, back pressure, ... ) MARKER_OUTLET= ( outlet, 115056.0, farfield, 115056.0 ) -% -% Symmetry boundary marker(s) (NONE = no marker) MARKER_SYM= ( symmetry ) -% -% Marker(s) of the surface to be plotted or designed MARKER_PLOTTING= ( wall ) -% -% Marker(s) of the surface where the functional (Cd, Cl, etc.) will be evaluated MARKER_MONITORING= ( wall ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % -% Numerical method for spatial gradients (GREEN_GAUSS, LEAST_SQUARES, -% WEIGHTED_LEAST_SQUARES) NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -% -% Courant-Friedrichs-Lewy condition of the finest grid CFL_NUMBER= 100.0 -% -% Adaptive CFL number (NO, YES) CFL_ADAPT= YES -% -% Parameters of the adaptive CFL number (factor down, factor up, CFL min value, -% CFL max value ) CFL_ADAPT_PARAM= ( 0.1, 2.0, 100.0, 1e5 ) -% -% Runge-Kutta alpha coefficients RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) -% -% Number of total iterations ITER= 99999 % ----------------------- SLOPE LIMITER DEFINITION ----------------------------% % -% Coefficient for the limiter VENKAT_LIMITER_COEFF= 0.1 -% -% Coefficient for the sharp edges limiter ADJ_SHARP_LIMITER_COEFF= 3.0 -% -% Reference coefficient (sensitivity) for detecting sharp edges. REF_SHARP_EDGES= 3.0 -% -% Remove sharp edges from the sensitivity evaluation (NO, YES) SENS_REMOVE_SHARP= NO % -------------------------- 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= ( 2, 2, 2, 2) -% -% Jacobi implicit smoothing of the correction -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -% -% Damping factor for the residual restriction -MG_DAMP_RESTRICTION= 0.8 -% -% Damping factor for the correction prolongation -MG_DAMP_PROLONGATION= 0.8 - % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % -% Convective numerical method (JST, LAX-FRIEDRICH, CUSP, ROE, AUSM, HLLC, -% TURKEL_PREC, MSW) CONV_NUM_METHOD_FLOW= ROE % -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations. -% Required for 2nd order upwind schemes (NO, YES) MUSCL_FLOW= YES -% -% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG, -% BARTH_JESPERSEN, VAN_ALBADA_EDGE) SLOPE_LIMITER_FLOW= NONE -% -% 2nd and 4th order artificial dissipation coefficients JST_SENSOR_COEFF= ( 0.5, 0.02 ) -% -% 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 -% -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations. -% Required for 2nd order upwind schemes (NO, YES) MUSCL_TURB= NO -% -% Slope limiter (VENKATAKRISHNAN, MINMOD) SLOPE_LIMITER_TURB= VENKATAKRISHNAN -% -% Time discretization (EULER_IMPLICIT) TIME_DISCRE_TURB= EULER_IMPLICIT % --------------------------- CONVERGENCE PARAMETERS --------------------------% % -% Convergence criteria (CAUCHY, RESIDUAL) CONV_FIELD= RMS_DENSITY -% -% Min value of the residual (log10 of the residual) CONV_RESIDUAL_MINVAL= -14 -% -% 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-6 % % ------------------------- INPUT/OUTPUT INFORMATION --------------------------% % -% Mesh input file MESH_FILENAME= mesh_flatplate_turb_137x97.su2 -% -% Mesh input file format (SU2, CGNS, NETCDF_ASCII) MESH_FORMAT= SU2 -% -% 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 file format (PARAVIEW, TECPLOT, SLT) TABULAR_FORMAT= CSV -% -% Output file convergence history (w/o extension) CONV_FILENAME= history -% -% 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 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 -% -% Writing solution file frequency OUTPUT_WRT_FREQ= 1000 -% -% -% Screen output SCREEN_OUTPUT= (INNER_ITER, WALL_TIME, RMS_RES, LIFT, DRAG) - 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 2dcf0e86e3dc..58825798a2eb 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 @@ -1,248 +1,109 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% % -% SU2 configuration file % -% Case description: Turbulent flow over flat plate with zero pressure gradient % -% Author: Thomas D. Economon % -% Institution: Stanford University % -% Date: 2011.11.10 % -% File Version 5.0.0 "Raven" % -% % -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% SU2 configuration file % +% Case description: Turbulent flow over rough flat plate with zero pressure gradient % +% Author: Thomas D. Economon % +% Institution: Stanford University % +% Date: 2011.11.10 % +% File Version 8.3.0 "Harrier" % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% % -% Physical governing equations (EULER, NAVIER_STOKES, -% WAVE_EQUATION, HEAT_EQUATION, FEM_ELASTICITY, -% POISSON_EQUATION) SOLVER= RANS -% -% If Navier-Stokes, kind of turbulent model (NONE, SA, SA_NEG, SST) KIND_TURB_MODEL= SST WALL_ROUGHNESS = (wall, 400e-6) KIND_ROUGHSST_MODEL = WILCOX2006 -% -% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT) MATH_PROBLEM= DIRECT -% -% Restart solution (NO, YES) RESTART_SOL= NO READ_BINARY_RESTART= YES % ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------% -% -% Mach number (non-dimensional, based on the free-stream values) MACH_NUMBER= 0.2 -% -% Angle of attack (degrees) AOA= 0.0 -% -% Side-slip angle (degrees) SIDESLIP_ANGLE= 0.0 -% -% Free-stream temperature (288.15 K by default) FREESTREAM_TEMPERATURE= 300.0 -% -% Reynolds number (non-dimensional, based on the free-stream values) REYNOLDS_NUMBER= 5000000.0 -% -% Reynolds length (in meters) REYNOLDS_LENGTH= 1.0 % ---------------------- REFERENCE VALUE DEFINITION ---------------------------% % -% Reference origin for moment computation REF_ORIGIN_MOMENT_X = 0.25 REF_ORIGIN_MOMENT_Y = 0.00 REF_ORIGIN_MOMENT_Z = 0.00 -% -% Reference length for pitching, rolling, and yawing non-dimensional moment REF_LENGTH= 1.0 -% -% Reference area for force coefficients (0 implies automatic calculation) REF_AREA= 2.0 % -------------------- BOUNDARY CONDITION DEFINITION --------------------------% % -% Navier-Stokes wall boundary marker(s) (NONE = no marker) MARKER_HEATFLUX= ( wall, 0.0 ) -% -% Inlet boundary marker(s) (NONE = no marker) -% Format: ( inlet marker, total temperature, total pressure, flow_direction_x, -% flow_direction_y, flow_direction_z, ... ) MARKER_INLET= ( inlet, 302.4, 118309.784, 1.0, 0.0, 0.0 ) -% -% Outlet boundary marker(s) (NONE = no marker) -% Format: ( outlet marker, back pressure, ... ) MARKER_OUTLET= ( outlet, 115056.0, farfield, 115056.0 ) -% -% Symmetry boundary marker(s) (NONE = no marker) MARKER_SYM= ( symmetry ) -% -% Marker(s) of the surface to be plotted or designed MARKER_PLOTTING= ( wall ) -% -% Marker(s) of the surface where the functional (Cd, Cl, etc.) will be evaluated MARKER_MONITORING= ( wall ) % ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------% % -% Numerical method for spatial gradients (GREEN_GAUSS, LEAST_SQUARES, -% WEIGHTED_LEAST_SQUARES) NUM_METHOD_GRAD= WEIGHTED_LEAST_SQUARES -% -% Courant-Friedrichs-Lewy condition of the finest grid CFL_NUMBER= 100.0 -% -% Adaptive CFL number (NO, YES) CFL_ADAPT= YES -% -% Parameters of the adaptive CFL number (factor down, factor up, CFL min value, -% CFL max value ) CFL_ADAPT_PARAM= ( 0.1, 2.0, 100.0, 1e5 ) -% -% Runge-Kutta alpha coefficients RK_ALPHA_COEFF= ( 0.66667, 0.66667, 1.000000 ) -% -% Number of total iterations ITER= 99999 % ----------------------- SLOPE LIMITER DEFINITION ----------------------------% % -% Coefficient for the limiter VENKAT_LIMITER_COEFF= 0.1 -% -% Coefficient for the sharp edges limiter ADJ_SHARP_LIMITER_COEFF= 3.0 -% -% Reference coefficient (sensitivity) for detecting sharp edges. REF_SHARP_EDGES= 3.0 -% -% Remove sharp edges from the sensitivity evaluation (NO, YES) SENS_REMOVE_SHARP= NO % -------------------------- 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= ( 2, 2, 2, 2) -% -% Jacobi implicit smoothing of the correction -MG_CORRECTION_SMOOTH= ( 0, 0, 0, 0 ) -% -% Damping factor for the residual restriction -MG_DAMP_RESTRICTION= 0.8 -% -% Damping factor for the correction prolongation -MG_DAMP_PROLONGATION= 0.8 - % -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------% % -% Convective numerical method (JST, LAX-FRIEDRICH, CUSP, ROE, AUSM, HLLC, -% TURKEL_PREC, MSW) CONV_NUM_METHOD_FLOW= ROE % -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations. -% Required for 2nd order upwind schemes (NO, YES) MUSCL_FLOW= YES -% -% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG, -% BARTH_JESPERSEN, VAN_ALBADA_EDGE) SLOPE_LIMITER_FLOW= NONE -% -% 2nd and 4th order artificial dissipation coefficients JST_SENSOR_COEFF= ( 0.5, 0.02 ) -% -% 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 -% -% Monotonic Upwind Scheme for Conservation Laws (TVD) in the turbulence equations. -% Required for 2nd order upwind schemes (NO, YES) MUSCL_TURB= NO -% -% Slope limiter (VENKATAKRISHNAN, MINMOD) SLOPE_LIMITER_TURB= VENKATAKRISHNAN -% -% Time discretization (EULER_IMPLICIT) TIME_DISCRE_TURB= EULER_IMPLICIT % --------------------------- CONVERGENCE PARAMETERS --------------------------% % -% Convergence criteria (CAUCHY, RESIDUAL) CONV_FIELD= RMS_DENSITY -% -% Min value of the residual (log10 of the residual) CONV_RESIDUAL_MINVAL= -14 -% -% 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-6 % % ------------------------- INPUT/OUTPUT INFORMATION --------------------------% % -% Mesh input file MESH_FILENAME= mesh_flatplate_turb_137x97.su2 -% -% Mesh input file format (SU2, CGNS, NETCDF_ASCII) MESH_FORMAT= SU2 -% -% 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 file format (PARAVIEW, TECPLOT, SLT) TABULAR_FORMAT= CSV -% -% Output file convergence history (w/o extension) CONV_FILENAME= history -% -% 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 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 -% -% Writing solution file frequency OUTPUT_WRT_FREQ= 1000 -% -% -% Screen output SCREEN_OUTPUT= (INNER_ITER, WALL_TIME, RMS_RES, LIFT, DRAG) diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py index 31ed1b173c2d..24d5bc022f16 100644 --- a/TestCases/serial_regression.py +++ b/TestCases/serial_regression.py @@ -261,23 +261,6 @@ def main(): turb_flatplate_sst_roughBCWilcox2006.test_vals = [10.000000, 0.052109, -3.937983, -1.063721, -1.483116, 1.514608, -1.003919, 4.472050, -0.180308, 0.033500] test_list.append(turb_flatplate_sst_roughBCWilcox2006) - # FLAT PLATE, ROUGHNESS BC KNOPP SST - turb_flatplate_sst_roughBCKnopp = TestCase('turb_sst_flatplate_roughBCKnopp') - turb_flatplate_sst_roughBCKnopp.cfg_dir = "rans/flatplate/roughness/bc_knopp" - turb_flatplate_sst_roughBCKnopp.cfg_file = "turb_SST_flatplate_roughBCKnopp.cfg" - turb_flatplate_sst_roughBCKnopp.test_iter = 10 - turb_flatplate_sst_roughBCKnopp.test_vals = [10.000000, 0.053020, -3.454853, -0.684543, -0.886080, 2.140376, 1.043068, 4.808919, -0.203494, 0.053645] - test_list.append(turb_flatplate_sst_roughBCKnopp) - - # FLAT PLATE, ROUGHNESS BC AUPOIX SST - turb_flatplate_sst_roughBCAupoix = TestCase('turb_sst_flatplate_roughBCAupoix') - 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 = [10.000000, 0.053252, -3.575414, -0.761810, -0.998912, 2.003238, 0.907276, 4.807309, -0.197354, 0.051349] - test_list.append(turb_flatplate_sst_roughBCAupoix) - - # FLAT PLATE, WALL FUNCTIONS, COMPRESSIBLE SA turb_wallfunction_flatplate_sa = TestCase('turb_sa_wallfunction_flatplate') turb_wallfunction_flatplate_sa.cfg_dir = "wallfunctions/flatplate/compressible_SA"