From c68e61393f8cd836416be45ffde87356152f95b1 Mon Sep 17 00:00:00 2001 From: WallyMaier Date: Tue, 20 Dec 2022 09:08:10 -0500 Subject: [PATCH 1/3] update to develop --- Common/include/CConfig.hpp | 42 ++++++- Common/include/option_structure.hpp | 4 +- Common/src/CConfig.cpp | 105 ++++++++++++++++-- Common/src/geometry/CGeometry.cpp | 1 + .../turbulent/transition/trans_sources.hpp | 1 + SU2_CFD/src/drivers/CDriver.cpp | 10 +- SU2_CFD/src/drivers/CMultizoneDriver.cpp | 6 +- SU2_CFD/src/iteration/CFluidIteration.cpp | 5 +- SU2_CFD/src/iteration/CIterationFactory.cpp | 2 +- SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp | 20 +++- SU2_CFD/src/output/CNEMOCompOutput.cpp | 12 ++ SU2_CFD/src/output/COutputFactory.cpp | 2 +- .../src/output/output_structure_legacy.cpp | 2 +- SU2_CFD/src/solvers/CNEMOEulerSolver.cpp | 103 ++++++++++++----- SU2_CFD/src/solvers/CNEMONSSolver.cpp | 4 + SU2_CFD/src/solvers/CSolverFactory.cpp | 6 + SU2_CFD/src/solvers/CTurbSSTSolver.cpp | 4 +- SU2_CFD/src/variables/CNEMOEulerVariable.cpp | 4 +- TestCases/nicf/coolprop/fluidModel.cfg | 2 +- TestCases/nicf/coolprop/transportModel.cfg | 2 +- legacy/configure.ac | 2 +- legacy/preconfigure.py | 2 +- 22 files changed, 286 insertions(+), 55 deletions(-) diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 20fbcb081291..977502349d99 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -858,6 +858,7 @@ class CConfig { array KtPolyCoefficientsND{{0.0}}; /*!< \brief Definition of the non-dimensional temperature polynomial coefficients for thermal conductivity. */ su2double TurbIntensityAndViscRatioFreeStream[2]; /*!< \brief Freestream turbulent intensity and viscosity ratio for turbulence and transition models. */ su2double Energy_FreeStream, /*!< \brief Free-stream total energy of the fluid. */ + Energy_ve_FreeStream, /*!< \brief Free-stream vibe-el energy of the fluid. */ ModVel_FreeStream, /*!< \brief Magnitude of the free-stream velocity of the fluid. */ ModVel_FreeStreamND, /*!< \brief Non-dimensional magnitude of the free-stream velocity of the fluid. */ Density_FreeStream, /*!< \brief Free-stream density of the fluid. */ @@ -889,7 +890,8 @@ class CConfig { Time_Ref, /*!< \brief Reference time for non-dimensionalization. */ Viscosity_Ref, /*!< \brief Reference viscosity for non-dimensionalization. */ Thermal_Conductivity_Ref, /*!< \brief Reference conductivity for non-dimensionalization. */ - Energy_Ref, /*!< \brief Reference viscosity for non-dimensionalization. */ + Energy_Ref, /*!< \brief Reference energy for non-dimensionalization. */ + Energy_ve_Ref, /*!< \brief Reference vibe-el energy for non-dimensionalization. */ Wall_Temperature, /*!< \brief Temperature at an isotropic wall in Kelvin. */ Omega_Ref, /*!< \brief Reference angular velocity for non-dimensionalization. */ Force_Ref, /*!< \brief Reference body force for non-dimensionalization. */ @@ -900,6 +902,7 @@ class CConfig { Density_FreeStreamND, /*!< \brief Farfield density value (external flow). */ Velocity_FreeStreamND[3], /*!< \brief Farfield velocity values (external flow). */ Energy_FreeStreamND, /*!< \brief Farfield energy value (external flow). */ + Energy_ve_FreeStreamND, /*!< \brief Farfield vibe-el energy value (external flow). */ Viscosity_FreeStreamND, /*!< \brief Farfield viscosity value (external flow). */ Tke_FreeStreamND, /*!< \brief Farfield kinetic energy (external flow). */ Omega_FreeStreamND, /*!< \brief Specific dissipation (external flow). */ @@ -1690,6 +1693,12 @@ class CConfig { */ su2double GetEnergy_FreeStream(void) const { return Energy_FreeStream; } + /*! + * \brief Get the value of the freestream vibe-el energy. + * \return Freestream vibe-el energy. + */ + su2double GetEnergy_ve_FreeStream(void) const { return Energy_ve_FreeStream; } + /*! * \brief Get the value of the freestream viscosity. * \return Freestream viscosity. @@ -1781,6 +1790,12 @@ class CConfig { */ su2double GetEnergy_Ref(void) const { return Energy_Ref; } + /*! + * \brief Get the value of the reference vibe-el enegry for non-dimensionalization. + * \return Reference vibe-el energy for non-dimensionalization. + */ + su2double GetEnergy_ve_Ref(void) const { return Energy_ve_Ref; } + /*! * \brief Get the value of the reference temperature for non-dimensionalization. * \return Reference temperature for non-dimensionalization. @@ -1909,6 +1924,12 @@ class CConfig { */ su2double GetEnergy_FreeStreamND(void) const { return Energy_FreeStreamND; } + /*! + * \brief Get the value of the non-dimensionalized freestream vibe-el energy. + * \return Non-dimensionalized freestream vibe-el energy. + */ + su2double GetEnergy_ve_FreeStreamND(void) const { return Energy_ve_FreeStreamND; } + /*! * \brief Get the value of the non-dimensionalized freestream viscosity. * \return Non-dimensionalized freestream viscosity. @@ -2419,6 +2440,12 @@ class CConfig { */ void SetEnergy_Ref(su2double val_energy_ref) { Energy_Ref = val_energy_ref; } + /*! + * \brief Set the reference vibe-el energy for nondimensionalization. + * \param[in] val_energy_ve_ref - Value of the reference vibe-el energy. + */ + void SetEnergy_ve_Ref(su2double val_energy_ve_ref) { Energy_ve_Ref = val_energy_ve_ref; } + /*! * \brief Set the reference Omega for nondimensionalization. * \param[in] val_omega_ref - Value of the reference omega. @@ -2601,12 +2628,24 @@ class CConfig { */ void SetEnergy_FreeStreamND(su2double val_energy_freestreamnd) { Energy_FreeStreamND = val_energy_freestreamnd; } + /*! + * \brief Set the non-dimensional freestream vibe-el energy. + * \param[in] val_energy_ve_freestreamnd - Value of the non-dimensional freestream vibe-el energy. + */ + void SetEnergy_ve_FreeStreamND(su2double val_energy_ve_freestreamnd) { Energy_ve_FreeStreamND = val_energy_ve_freestreamnd; } + /*! * \brief Set the freestream energy. * \param[in] val_energy_freestream - Value of the freestream energy. */ void SetEnergy_FreeStream(su2double val_energy_freestream) { Energy_FreeStream = val_energy_freestream; } + /*! + * \brief Set the freestream vibe-el energy. + * \param[in] val_energy_ve_freestream - Value of the freestream vibe-el energy. + */ + void SetEnergy_ve_FreeStream(su2double val_energy_ve_freestream) { Energy_ve_FreeStream = val_energy_ve_freestream; } + /*! * \brief Set the thermal diffusivity for solids. * \param[in] val_thermal_diffusivity - Value of the thermal diffusivity. @@ -3694,6 +3733,7 @@ class CConfig { bool GetNEMOProblem(void) const { switch (Kind_Solver) { case MAIN_SOLVER::NEMO_EULER : case MAIN_SOLVER::NEMO_NAVIER_STOKES: + case MAIN_SOLVER::NEMO_RANS: return true; default: return false; diff --git a/Common/include/option_structure.hpp b/Common/include/option_structure.hpp index 994bc3087999..f8af0d99e2f2 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -257,6 +257,7 @@ enum class MAIN_SOLVER { MULTIPHYSICS, NEMO_EULER, /*!< \brief Definition of the NEMO Euler solver. */ NEMO_NAVIER_STOKES, /*!< \brief Definition of the NEMO NS solver. */ + NEMO_RANS, /*!< \brief Definition of the NEMO RANS solver. */ }; static const MapType Solver_Map = { MakePair("NONE", MAIN_SOLVER::NONE) @@ -272,6 +273,7 @@ static const MapType Solver_Map = { MakePair("FEM_LES", MAIN_SOLVER::FEM_LES) MakePair("NEMO_EULER",MAIN_SOLVER::NEMO_EULER) MakePair("NEMO_NAVIER_STOKES",MAIN_SOLVER::NEMO_NAVIER_STOKES) + MakePair("NEMO_RANS", MAIN_SOLVER::NEMO_RANS) MakePair("ADJ_EULER", MAIN_SOLVER::ADJ_EULER) MakePair("ADJ_NAVIER_STOKES", MAIN_SOLVER::ADJ_NAVIER_STOKES) MakePair("ADJ_RANS", MAIN_SOLVER::ADJ_RANS ) @@ -848,7 +850,7 @@ enum class UPWIND { LAX_FRIEDRICH, /*!< \brief Lax-Friedrich numerical method. */ AUSMPLUSUP, /*!< \brief AUSM+ -up numerical method (All Speed) */ AUSMPLUSUP2, /*!< \brief AUSM+ -up2 numerical method (All Speed) */ - AUSMPWPLUS, /*!< \brief AUSMplus numerical method. (MAYBE for TNE2 ONLY)*/ + AUSMPWPLUS, /*!< \brief AUSMplus numerical method. (MAYBE for NEMO ONLY)*/ BOUNDED_SCALAR /*!< \brief Scalar advection numerical method. */ }; static const MapType Upwind_Map = { diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index bf9792eb3ade..996ce383486a 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -3440,12 +3440,18 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i if (Kind_Solver == MAIN_SOLVER::INC_NAVIER_STOKES && Kind_Turb_Model != TURB_MODEL::NONE){ SU2_MPI::Error("KIND_TURB_MODEL must be NONE if SOLVER= INC_NAVIER_STOKES", CURRENT_FUNCTION); } + if (Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES && Kind_Turb_Model != TURB_MODEL::NONE){ + SU2_MPI::Error("KIND_TURB_MODEL must be NONE if SOLVER= NEMO_NAVIER_STOKES", CURRENT_FUNCTION); + } if (Kind_Solver == MAIN_SOLVER::RANS && Kind_Turb_Model == TURB_MODEL::NONE){ SU2_MPI::Error("A turbulence model must be specified with KIND_TURB_MODEL if SOLVER= RANS", CURRENT_FUNCTION); } if (Kind_Solver == MAIN_SOLVER::INC_RANS && Kind_Turb_Model == TURB_MODEL::NONE){ SU2_MPI::Error("A turbulence model must be specified with KIND_TURB_MODEL if SOLVER= INC_RANS", CURRENT_FUNCTION); } + if (Kind_Solver == MAIN_SOLVER::NEMO_RANS && Kind_Turb_Model == TURB_MODEL::NONE){ + SU2_MPI::Error("A turbulence model must be specified with KIND_TURB_MODEL if SOLVER= NEMO_RANS", CURRENT_FUNCTION); + } /*--- Postprocess SST_OPTIONS into structure. ---*/ if (Kind_Turb_Model == TURB_MODEL::SST) { @@ -3484,8 +3490,8 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i SU2_MPI::Error(string("For RANS problems, use NONE, STANDARD_WALL_FUNCTION or EQUILIBRIUM_WALL_MODEL.\n"), CURRENT_FUNCTION); if (Kind_WallFunctions[iMarker] == WALL_FUNCTIONS::STANDARD_FUNCTION) { - if (!((Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::INC_RANS))) - SU2_MPI::Error(string("Wall model STANDARD_FUNCTION only available for RANS or INC_RANS.\n"), CURRENT_FUNCTION); + if (!((Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::INC_RANS) || (Kind_Solver == MAIN_SOLVER::NEMO_RANS))) + SU2_MPI::Error(string("Wall model STANDARD_FUNCTION only available for RANS/INC_RANS/NEMO_RANS.\n"), CURRENT_FUNCTION); if (nRough_Wall != 0) SU2_MPI::Error(string("Wall model STANDARD_FUNCTION and WALL_ROUGHNESS migh not be compatible. Checking required!\n"), CURRENT_FUNCTION); } @@ -3739,6 +3745,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i Kind_Solver == MAIN_SOLVER::RANS || Kind_Solver == MAIN_SOLVER::NEMO_EULER || Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES || + Kind_Solver == MAIN_SOLVER::NEMO_RANS || Kind_Solver == MAIN_SOLVER::FEM_EULER || Kind_Solver == MAIN_SOLVER::FEM_NAVIER_STOKES || Kind_Solver == MAIN_SOLVER::FEM_RANS || @@ -4372,6 +4379,10 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i (Kind_Turb_Model != TURB_MODEL::NONE)) Kind_Solver = MAIN_SOLVER::INC_RANS; + if ((Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES) && + (Kind_Turb_Model != TURB_MODEL::NONE)) + Kind_Solver = MAIN_SOLVER::NEMO_RANS; + if (Kind_Solver == MAIN_SOLVER::EULER || Kind_Solver == MAIN_SOLVER::INC_EULER || Kind_Solver == MAIN_SOLVER::NEMO_EULER || @@ -4694,6 +4705,7 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i ( Kind_Solver == MAIN_SOLVER::ADJ_NAVIER_STOKES ) || ( Kind_Solver == MAIN_SOLVER::RANS ) || ( Kind_Solver == MAIN_SOLVER::ADJ_RANS ) || + ( Kind_Solver == MAIN_SOLVER::NEMO_RANS ) || ( Kind_Solver == MAIN_SOLVER::FEM_NAVIER_STOKES ) || ( Kind_Solver == MAIN_SOLVER::FEM_RANS ) || ( Kind_Solver == MAIN_SOLVER::FEM_LES ) || @@ -4762,6 +4774,10 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i for (int i=0; i<7; ++i) eng_cyl[i] /= 12.0; } + if ((Kind_Turb_Model != TURB_MODEL::SST) && Kind_Trans_Model == TURB_TRANS_MODEL::LM) { + SU2_MPI::Error("LM transition model currently only available in combination with SST turbulence model!", CURRENT_FUNCTION); + } + if(Turb_Fixed_Values && !OptionIsSet("TURB_FIXED_VALUES_DOMAIN")){ SU2_MPI::Error("TURB_FIXED_VALUES activated, but no domain set with TURB_FIXED_VALUES_DOMAIN.", CURRENT_FUNCTION); } @@ -5167,7 +5183,8 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i (Kind_Solver != MAIN_SOLVER::ADJ_RANS) && (Kind_Solver != MAIN_SOLVER::DISC_ADJ_RANS) && (Kind_Solver != MAIN_SOLVER::INC_RANS) && - (Kind_Solver != MAIN_SOLVER::DISC_ADJ_INC_RANS)){ + (Kind_Solver != MAIN_SOLVER::DISC_ADJ_INC_RANS) && + (Kind_Solver != MAIN_SOLVER::NEMO_RANS)){ Kind_ConductivityModel_Turb = CONDUCTIVITYMODEL_TURB::NONE; } @@ -6145,6 +6162,70 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { SU2_MPI::Error("The GAS_MODEL given as input is not valid. Choose one of the options: N2, AIR-5, ARGON.", CURRENT_FUNCTION); } break; + + case MAIN_SOLVER::NEMO_RANS: + cout << "Compressible two-temperature thermochemical non-equilibrium RANS equations." << endl; + if (Kind_FluidModel == SU2_NONEQ){ + if ((GasModel != "N2") && (GasModel != "AIR-5") && (GasModel != "ARGON")) + SU2_MPI::Error("The GAS_MODEL given as input is not valid. Choose one of the options: N2, AIR-5, ARGON.", CURRENT_FUNCTION); + } + cout << "Turbulence model: "; + switch (Kind_Turb_Model) { + case TURB_MODEL::NONE: break; + case TURB_MODEL::SA: + switch (saParsedOptions.version) { + case SA_OPTIONS::NEG: + cout << "Negative-"; + break; + case SA_OPTIONS::EDW: + cout << "Edwards-"; + break; + default: + break; + } + cout << "Spalart-Allmaras"; + + if (!saParsedOptions.ft2) cout << "-noft2"; + if (saParsedOptions.rot) cout << "-R"; + if (saParsedOptions.comp) cout << "-comp"; + if (saParsedOptions.qcr2000) cout << "-QCR2000"; + if (saParsedOptions.bc) cout << "-BCM"; + cout << endl; + break; + case TURB_MODEL::SST: + cout << "Menter's k-omega SST"; + if (sstParsedOptions.version == SST_OPTIONS::V1994) cout << "-1994"; + else cout << "-2003"; + if (sstParsedOptions.modified) cout << "m"; + if (sstParsedOptions.sust) cout << " with sustaining terms, and"; + + switch (sstParsedOptions.production) { + case SST_OPTIONS::KL: + cout << " with Kato-Launder production"; + break; + case SST_OPTIONS::V: + cout << " with Vorticity production"; + break; + case SST_OPTIONS::UQ: + cout << "\nperturbing the Reynold's Stress Matrix towards " << eig_val_comp << " component turbulence"; + if (uq_permute) cout << " (permuting eigenvectors)"; + break; + default: + cout << " with no production modification"; + break; + } + cout << "." << endl; + break; + } + cout << "Hybrid RANS/LES: "; + switch (Kind_HybridRANSLES) { + case NO_HYBRIDRANSLES: cout << "No Hybrid RANS/LES" << endl; break; + case SA_DES: cout << "Detached Eddy Simulation (DES97) " << endl; break; + case SA_DDES: cout << "Delayed Detached Eddy Simulation (DDES) with Standard SGS" << endl; break; + case SA_ZDES: cout << "Delayed Detached Eddy Simulation (DDES) with Vorticity-based SGS" << endl; break; + case SA_EDDES: cout << "Delayed Detached Eddy Simulation (DDES) with Shear-layer Adapted SGS" << endl; break; + } + break; case MAIN_SOLVER::FEM_LES: if (Kind_Regime == ENUM_REGIME::COMPRESSIBLE) cout << "Compressible LES equations." << endl; if (Kind_Regime == ENUM_REGIME::INCOMPRESSIBLE) cout << "Incompressible LES equations." << endl; @@ -6197,7 +6278,7 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { cout << "Angle of attack (AoA): " << AoA <<" deg, and angle of sideslip (AoS): " << AoS <<" deg."<< endl; if ((Kind_Solver == MAIN_SOLVER::NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::ADJ_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::ADJ_RANS) || - (Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES)) + (Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::NEMO_RANS)) cout << "Reynolds number: " << Reynolds <<". Reference length " << Length_Reynolds << "." << endl; if (Fixed_CL_Mode) { cout << "Fixed CL mode, target value: " << Target_CL << "." << endl; @@ -6652,7 +6733,7 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { if ((Kind_Solver == MAIN_SOLVER::EULER) || (Kind_Solver == MAIN_SOLVER::NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::INC_EULER) || (Kind_Solver == MAIN_SOLVER::INC_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::INC_RANS) || - (Kind_Solver == MAIN_SOLVER::NEMO_EULER) || (Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES) || + (Kind_Solver == MAIN_SOLVER::NEMO_EULER) || (Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::NEMO_RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_EULER) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_RANS) ) { if (Kind_ConvNumScheme_Flow == SPACE_CENTERED) { @@ -6707,7 +6788,8 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { } - if ((Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_RANS)) { + if ((Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_RANS) || + (Kind_Solver == MAIN_SOLVER::NEMO_RANS)) { if (Kind_ConvNumScheme_Turb == SPACE_UPWIND) { if (Kind_Upwind_Turb == UPWIND::SCALAR_UPWIND) cout << "Scalar upwind solver for the turbulence model." << endl; if (MUSCL_Turb) { @@ -6760,7 +6842,7 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { if ((Kind_Solver == MAIN_SOLVER::NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::INC_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::INC_RANS) || - (Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES) || + (Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::NEMO_RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_INC_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_INC_RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_RANS)) { cout << "Average of gradients with correction (viscous flow terms)." << endl; @@ -6770,7 +6852,9 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { cout << "Average of gradients with correction (viscous adjoint terms)." << endl; } - if ((Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_RANS) || (Kind_Solver == MAIN_SOLVER::INC_RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_INC_RANS) ) { + if ((Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_RANS) || + (Kind_Solver == MAIN_SOLVER::INC_RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_INC_RANS) || + (Kind_Solver == MAIN_SOLVER::NEMO_RANS)) { cout << "Average of gradients with correction (viscous turbulence terms)." << endl; } @@ -6867,7 +6951,7 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { if ((Kind_Solver == MAIN_SOLVER::EULER) || (Kind_Solver == MAIN_SOLVER::NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::INC_EULER) || (Kind_Solver == MAIN_SOLVER::INC_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::INC_RANS) || - (Kind_Solver == MAIN_SOLVER::NEMO_EULER) || (Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES) || + (Kind_Solver == MAIN_SOLVER::NEMO_EULER) || (Kind_Solver == MAIN_SOLVER::NEMO_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::NEMO_RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_INC_EULER) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_INC_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_INC_RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_EULER) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_NAVIER_STOKES) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_FEM_EULER) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_FEM_NS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_FEM_RANS)) { @@ -7069,6 +7153,7 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { } if ((Kind_Solver == MAIN_SOLVER::RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_RANS) || + (Kind_Solver == MAIN_SOLVER::NEMO_RANS) || (Kind_Solver == MAIN_SOLVER::INC_RANS) || (Kind_Solver == MAIN_SOLVER::DISC_ADJ_INC_RANS)) if (Kind_TimeIntScheme_Turb == EULER_IMPLICIT) cout << "Euler implicit time integration for the turbulence model." << endl; @@ -8421,7 +8506,7 @@ void CConfig::SetGlobalParam(MAIN_SOLVER val_solver, SetKind_TimeIntScheme(Kind_TimeIntScheme_Heat); } break; - case MAIN_SOLVER::RANS: case MAIN_SOLVER::INC_RANS: + case MAIN_SOLVER::RANS: case MAIN_SOLVER::INC_RANS: case MAIN_SOLVER::NEMO_RANS: SetFlowParam(); SetTurbParam(); SetSpeciesParam(); diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index e7d044ec789c..41a1c1b84789 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -3873,6 +3873,7 @@ void CGeometry::ComputeWallDistance(const CConfig* const* config_container, CGeo MAIN_SOLVER kindSolver = config_container[iZone]->GetKind_Solver(); if (kindSolver == MAIN_SOLVER::RANS || kindSolver == MAIN_SOLVER::INC_RANS || + kindSolver == MAIN_SOLVER::NEMO_RANS || kindSolver == MAIN_SOLVER::DISC_ADJ_RANS || kindSolver == MAIN_SOLVER::DISC_ADJ_INC_RANS || kindSolver == MAIN_SOLVER::FEM_LES || diff --git a/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp b/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp index de013fb1a671..3b204c4e4da9 100644 --- a/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp +++ b/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp @@ -323,3 +323,4 @@ class CSourcePieceWise_TransLM final : public CNumerics { return ResidualType<>(Residual, Jacobian_i, nullptr); } }; + diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp index 8b1667aad507..b101a2525ca4 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -1517,6 +1517,12 @@ void CDriver::Numerics_Preprocessing(CConfig *config, CGeometry **geometry, CSol transition = (config->GetKind_Trans_Model() == TURB_TRANS_MODEL::LM); species = config->GetKind_Species_Model() != SPECIES_MODEL::NONE; break; + case MAIN_SOLVER::NEMO_RANS: + + NEMO_ns = compressible = turbulent = true; + transition = (config->GetKind_Trans_Model() == TURB_TRANS_MODEL::LM); + species = config->GetKind_Species_Model() != SPECIES_MODEL::NONE; break; + case MAIN_SOLVER::INC_EULER: case MAIN_SOLVER::DISC_ADJ_INC_EULER: euler = incompressible = true; break; @@ -3171,7 +3177,7 @@ bool CFluidDriver::Monitor(unsigned long ExtIter) { switch (config_container[ZONE_0]->GetKind_Solver()) { case MAIN_SOLVER::EULER: case MAIN_SOLVER::NAVIER_STOKES: case MAIN_SOLVER::RANS: - case MAIN_SOLVER::NEMO_EULER: case MAIN_SOLVER::NEMO_NAVIER_STOKES: + case MAIN_SOLVER::NEMO_EULER: case MAIN_SOLVER::NEMO_NAVIER_STOKES: case MAIN_SOLVER::NEMO_RANS: StopCalc = integration_container[ZONE_0][INST_0][FLOW_SOL]->GetConvergence(); break; case MAIN_SOLVER::HEAT_EQUATION: StopCalc = integration_container[ZONE_0][INST_0][HEAT_SOL]->GetConvergence(); break; @@ -3434,7 +3440,7 @@ bool CTurbomachineryDriver::Monitor(unsigned long ExtIter) { switch (config_container[ZONE_0]->GetKind_Solver()) { case MAIN_SOLVER::EULER: case MAIN_SOLVER::NAVIER_STOKES: case MAIN_SOLVER::RANS: case MAIN_SOLVER::INC_EULER: case MAIN_SOLVER::INC_NAVIER_STOKES: case MAIN_SOLVER::INC_RANS: - case MAIN_SOLVER::NEMO_EULER: case MAIN_SOLVER::NEMO_NAVIER_STOKES: + case MAIN_SOLVER::NEMO_EULER: case MAIN_SOLVER::NEMO_NAVIER_STOKES: case MAIN_SOLVER::NEMO_RANS: StopCalc = integration_container[ZONE_0][INST_0][FLOW_SOL]->GetConvergence(); break; case MAIN_SOLVER::DISC_ADJ_EULER: case MAIN_SOLVER::DISC_ADJ_NAVIER_STOKES: case MAIN_SOLVER::DISC_ADJ_RANS: diff --git a/SU2_CFD/src/drivers/CMultizoneDriver.cpp b/SU2_CFD/src/drivers/CMultizoneDriver.cpp index 7f982ac7fc82..e991306034d6 100644 --- a/SU2_CFD/src/drivers/CMultizoneDriver.cpp +++ b/SU2_CFD/src/drivers/CMultizoneDriver.cpp @@ -73,7 +73,7 @@ CMultizoneDriver::CMultizoneDriver(char* confFile, unsigned short val_nZone, SU2 for (iZone = 0; iZone < nZone; iZone++){ switch (config_container[iZone]->GetKind_Solver()) { case MAIN_SOLVER::EULER: case MAIN_SOLVER::NAVIER_STOKES: case MAIN_SOLVER::RANS: - case MAIN_SOLVER::NEMO_EULER: case MAIN_SOLVER::NEMO_NAVIER_STOKES: + case MAIN_SOLVER::NEMO_EULER: case MAIN_SOLVER::NEMO_NAVIER_STOKES: case MAIN_SOLVER::NEMO_RANS: case MAIN_SOLVER::INC_EULER: case MAIN_SOLVER::INC_NAVIER_STOKES: case MAIN_SOLVER::INC_RANS: fluid_zone = true; break; @@ -556,7 +556,9 @@ bool CMultizoneDriver::Transfer_Data(unsigned short donorZone, unsigned short ta /*--- Additional transfer for turbulence variables. ---*/ if (config_container[targetZone]->GetKind_Solver() == MAIN_SOLVER::RANS || - config_container[targetZone]->GetKind_Solver() == MAIN_SOLVER::INC_RANS) { + config_container[targetZone]->GetKind_Solver() == MAIN_SOLVER::INC_RANS || + config_container[targetZone]->GetKind_Solver() == MAIN_SOLVER::NEMO_RANS) + { BroadcastData(TURB_SOL, TURB_SOL); } diff --git a/SU2_CFD/src/iteration/CFluidIteration.cpp b/SU2_CFD/src/iteration/CFluidIteration.cpp index b04a81b7875b..2ae5b3e4a353 100644 --- a/SU2_CFD/src/iteration/CFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFluidIteration.cpp @@ -94,6 +94,7 @@ void CFluidIteration::Iterate(COutput* output, CIntegration**** integration, CGe case MAIN_SOLVER::DISC_ADJ_RANS: case MAIN_SOLVER::INC_RANS: case MAIN_SOLVER::DISC_ADJ_INC_RANS: + case MAIN_SOLVER::NEMO_RANS: main_solver = MAIN_SOLVER::RANS; break; @@ -208,8 +209,8 @@ void CFluidIteration::Update(COutput* output, CIntegration**** integration, CGeo /*--- Update dual time solver for the turbulence model ---*/ if ((config[val_iZone]->GetKind_Solver() == MAIN_SOLVER::RANS) || (config[val_iZone]->GetKind_Solver() == MAIN_SOLVER::DISC_ADJ_RANS) || - (config[val_iZone]->GetKind_Solver() == MAIN_SOLVER::INC_RANS) || - (config[val_iZone]->GetKind_Solver() == MAIN_SOLVER::DISC_ADJ_INC_RANS)) { + (config[val_iZone]->GetKind_Solver() == MAIN_SOLVER::NEMO_RANS) || + (config[val_iZone]->GetKind_Solver() == MAIN_SOLVER::INC_RANS) || (config[val_iZone]->GetKind_Solver() == MAIN_SOLVER::DISC_ADJ_INC_RANS)) { integration[val_iZone][val_iInst][TURB_SOL]->SetDualTime_Solver(geometry[val_iZone][val_iInst][MESH_0], solver[val_iZone][val_iInst][MESH_0][TURB_SOL], config[val_iZone], MESH_0); diff --git a/SU2_CFD/src/iteration/CIterationFactory.cpp b/SU2_CFD/src/iteration/CIterationFactory.cpp index fac25d838a60..a1a9354ed8f0 100644 --- a/SU2_CFD/src/iteration/CIterationFactory.cpp +++ b/SU2_CFD/src/iteration/CIterationFactory.cpp @@ -49,7 +49,7 @@ CIteration* CIterationFactory::CreateIteration(MAIN_SOLVER kindSolver, const CCo case MAIN_SOLVER::EULER: case MAIN_SOLVER::NAVIER_STOKES: case MAIN_SOLVER::RANS: case MAIN_SOLVER::INC_EULER: case MAIN_SOLVER::INC_NAVIER_STOKES: case MAIN_SOLVER::INC_RANS: - case MAIN_SOLVER::NEMO_EULER: case MAIN_SOLVER::NEMO_NAVIER_STOKES: + case MAIN_SOLVER::NEMO_EULER: case MAIN_SOLVER::NEMO_NAVIER_STOKES: case MAIN_SOLVER::NEMO_RANS: if(config->GetBoolTurbomachinery()){ if (rank == MASTER_NODE) cout << "Euler/Navier-Stokes/RANS turbomachinery fluid iteration." << endl; diff --git a/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp b/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp index 753ba843c088..3b24afc4264d 100644 --- a/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp +++ b/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp @@ -247,6 +247,7 @@ void CNEMONumerics::GetViscousProjFlux(const su2double *val_primvar, } /*--- Rename variables for convenience ---*/ + const auto& Ms = fluidmodel->GetSpeciesMolarMass(); const auto& Ds = val_diffusioncoeff; const su2double mu = val_lam_viscosity+val_eddy_viscosity; su2double ktr = val_therm_conductivity; @@ -256,8 +257,25 @@ void CNEMONumerics::GetViscousProjFlux(const su2double *val_primvar, const su2double Tve = val_primvar[TVE_INDEX]; const auto& V = val_primvar; const auto& GV = val_gradprimvar; + const su2double Ru = 1000.0*UNIVERSAL_GAS_CONSTANT; const auto& hs = fluidmodel->ComputeSpeciesEnthalpy(T, Tve, val_eve); + /*--- Scale thermal conductivity with turb visc ---*/ + // TODO: Need to determine proper way to incorporate eddy viscosity + // This is only scaling Kve by same factor as ktr + // NOTE: V[iSpecies] is == Ys. + su2double Mass = 0.0; + for (auto iSpecies = 0;iSpeciesGetKind_Solver() == MAIN_SOLVER::NEMO_RANS) { + AddVolumeOutput("EDDY_VISCOSITY", "Eddy_Viscosity", "PRIMITIVE", "Turbulent eddy viscosity"); + } + //Residuals for(iSpecies = 0; iSpecies < nSpecies; iSpecies++) AddVolumeOutput("RES_DENSITY_" + std::to_string(iSpecies), "Residual_Density_" + std::to_string(iSpecies), "RESIDUAL", "Residual of species density " + std::to_string(iSpecies)); @@ -332,6 +338,12 @@ void CNEMOCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolv if (config->GetViscous()){ SetVolumeOutputValue("LAMINAR_VISCOSITY", iPoint, Node_Flow->GetLaminarViscosity(iPoint)); + + SetVolumeOutputValue("THERMAL_TR", iPoint, Node_Flow->GetThermalConductivity(iPoint)); + SetVolumeOutputValue("THERMAL_VE", iPoint, Node_Flow->GetThermalConductivity_ve(iPoint)); + } + if (config->GetKind_Solver() == MAIN_SOLVER::NEMO_RANS) { + SetVolumeOutputValue("EDDY_VISCOSITY", iPoint, Node_Flow->GetEddyViscosity(iPoint)); } for(iSpecies = 0; iSpecies < nSpecies; iSpecies++) diff --git a/SU2_CFD/src/output/COutputFactory.cpp b/SU2_CFD/src/output/COutputFactory.cpp index 9f81699fdb90..b3fa4841d784 100644 --- a/SU2_CFD/src/output/COutputFactory.cpp +++ b/SU2_CFD/src/output/COutputFactory.cpp @@ -51,7 +51,7 @@ COutput* COutputFactory::CreateOutput(MAIN_SOLVER kindSolver, CConfig* config, i case MAIN_SOLVER::INC_EULER: case MAIN_SOLVER::INC_NAVIER_STOKES: case MAIN_SOLVER::INC_RANS: output = new CFlowIncOutput(config, nDim); break; - case MAIN_SOLVER::NEMO_EULER: case MAIN_SOLVER::NEMO_NAVIER_STOKES: + case MAIN_SOLVER::NEMO_EULER: case MAIN_SOLVER::NEMO_NAVIER_STOKES: case MAIN_SOLVER::NEMO_RANS: output = new CNEMOCompOutput(config, nDim); break; case MAIN_SOLVER::HEAT_EQUATION: diff --git a/SU2_CFD/src/output/output_structure_legacy.cpp b/SU2_CFD/src/output/output_structure_legacy.cpp index 4e4c6f946069..19587f140cff 100644 --- a/SU2_CFD/src/output/output_structure_legacy.cpp +++ b/SU2_CFD/src/output/output_structure_legacy.cpp @@ -2776,7 +2776,7 @@ void COutputLegacy::SpecialOutput_ForcesBreakdown(CSolver *****solver, CGeometry Breakdown_file << "\n" <<"-------------------------------------------------------------------------" << "\n"; Breakdown_file <<"| ___ _ _ ___ |" << "\n"; - Breakdown_file <<"| / __| | | |_ ) Release 7.4.0 \"Blackbird\" |" << "\n"; + Breakdown_file <<"| / __| | | |_ ) Release 7.5.0 \"Blackbird\" |" << "\n"; Breakdown_file <<"| \\__ \\ |_| |/ / |" << "\n"; Breakdown_file <<"| |___/\\___//___| Suite (Computational Fluid Dynamics Code) |" << "\n"; Breakdown_file << "| |" << "\n"; diff --git a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp index 67dd51ae200f..ce42f7b540ac 100644 --- a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp @@ -148,12 +148,14 @@ CNEMOEulerSolver::CNEMOEulerSolver(CGeometry *geometry, CConfig *config, } /*--- Read farfield conditions from the config file ---*/ - Mach_Inf = config->GetMach(); - Density_Inf = config->GetDensity_FreeStreamND(); - Pressure_Inf = config->GetPressure_FreeStreamND(); - Velocity_Inf = config->GetVelocity_FreeStreamND(); - Temperature_Inf = config->GetTemperature_FreeStreamND(); - Temperature_ve_Inf = config->GetTemperature_ve_FreeStreamND(); + Mach_Inf = config->GetMach(); + Density_Inf = config->GetDensity_FreeStreamND(); + Pressure_Inf = config->GetPressure_FreeStreamND(); + Velocity_Inf = config->GetVelocity_FreeStreamND(); + Temperature_Inf = config->GetTemperature_FreeStreamND(); + Temperature_ve_Inf = config->GetTemperature_ve_FreeStreamND(); + Energy_Inf = config->GetEnergy_FreeStreamND(); + Energy_ve_Inf = config->GetEnergy_ve_FreeStreamND(); /*--- Initialize the secondary values for direct derivative approxiations ---*/ switch(direct_diff) { @@ -997,15 +999,16 @@ void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short su2double Temperature_FreeStream = 0.0, Temperature_ve_FreeStream = 0.0, Mach2Vel_FreeStream = 0.0, - ModVel_FreeStream = 0.0, Energy_FreeStream = 0.0, ModVel_FreeStreamND = 0.0, - Velocity_Reynolds = 0.0, Omega_FreeStream = 0.0, Omega_FreeStreamND = 0.0, - Viscosity_FreeStream = 0.0, Density_FreeStream = 0.0, Pressure_FreeStream = 0.0, - Tke_FreeStream = 0.0, Length_Ref = 0.0, Density_Ref = 0.0, - Pressure_Ref = 0.0, Velocity_Ref = 0.0, Temperature_Ref = 0.0, - Temperature_ve_Ref = 0.0, Time_Ref = 0.0, Omega_Ref = 0.0, - Force_Ref = 0.0, Gas_Constant_Ref = 0.0, Viscosity_Ref = 0.0, - Conductivity_Ref = 0.0, Energy_Ref = 0.0, Pressure_FreeStreamND = 0.0, - Energy_FreeStreamND = 0.0, Temperature_FreeStreamND = 0.0, Temperature_ve_FreeStreamND = 0.0, + ModVel_FreeStream = 0.0, Energy_FreeStream = 0.0, Energy_ve_FreeStream = 0.0, + ModVel_FreeStreamND = 0.0, Velocity_Reynolds = 0.0, Omega_FreeStream = 0.0, + Omega_FreeStreamND = 0.0, Viscosity_FreeStream = 0.0, Density_FreeStream = 0.0, + Pressure_FreeStream = 0.0, Tke_FreeStream = 0.0, Length_Ref = 0.0, + Density_Ref = 0.0, Pressure_Ref = 0.0, Velocity_Ref = 0.0, + Temperature_Ref = 0.0, Temperature_ve_Ref = 0.0, Time_Ref = 0.0, + Omega_Ref = 0.0, Force_Ref = 0.0, Gas_Constant_Ref = 0.0, + Viscosity_Ref = 0.0, Conductivity_Ref = 0.0, Energy_Ref = 0.0, + Energy_ve_Ref = 0.0, Pressure_FreeStreamND = 0.0, Energy_FreeStreamND = 0.0, + Energy_ve_FreeStreamND = 0.0, Temperature_FreeStreamND = 0.0, Temperature_ve_FreeStreamND = 0.0, Gas_ConstantND = 0.0, Viscosity_FreeStreamND = 0.0, sqvel = 0.0, Tke_FreeStreamND = 0.0, Total_UnstTimeND = 0.0, Delta_UnstTimeND = 0.0, soundspeed = 0.0, GasConstant_Inf = 0.0, Froude = 0.0, @@ -1024,7 +1027,7 @@ void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short bool unsteady = (config->GetTime_Marching() != TIME_MARCHING::STEADY); bool viscous = config->GetViscous(); bool gravity = config->GetGravityForce(); - bool turbulent = false; + bool turbulent = (config->GetKind_Turb_Model() != TURB_MODEL::NONE); bool tkeNeeded = ((turbulent) && (config->GetKind_Turb_Model() == TURB_MODEL::SST)); bool reynolds_init = (config->GetKind_InitOption() == REYNOLDS); @@ -1109,6 +1112,7 @@ void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short /*--- Thermodynamics quantities based initialization ---*/ Viscosity_FreeStream = FluidModel->GetViscosity(); Energy_FreeStream = energies[0] + 0.5*sqvel; + Energy_ve_FreeStream = energies[1]; } else { @@ -1129,14 +1133,17 @@ void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short /*--- For inviscid flow, energy is calculated from the specified FreeStream quantities using the proper gas law. ---*/ - Energy_FreeStream = energies[0] + 0.5*sqvel; + Energy_FreeStream = energies[0] + 0.5*sqvel; + Energy_ve_FreeStream = energies[1]; } config->SetDensity_FreeStream(Density_FreeStream); - /*-- Compute the freestream energy. ---*/ - if (tkeNeeded) { Energy_FreeStream += Tke_FreeStream; }; config->SetEnergy_FreeStream(Energy_FreeStream); + /*-- Compute and the freestream energyies. ---*/ + if (tkeNeeded) { Energy_FreeStream += Tke_FreeStream; }; + config->SetEnergy_FreeStream(Energy_FreeStream); + config->SetEnergy_ve_FreeStream(Energy_ve_FreeStream); /*--- Compute non dimensional quantities. By definition, Lref is one because we have converted the grid to meters. ---*/ @@ -1201,9 +1208,11 @@ void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short Viscosity_FreeStreamND = Viscosity_FreeStream / Viscosity_Ref; config->SetViscosity_FreeStreamND(Viscosity_FreeStreamND); Tke_FreeStream = 3.0/2.0*(ModVel_FreeStream*ModVel_FreeStream*config->GetTurbulenceIntensity_FreeStream()*config->GetTurbulenceIntensity_FreeStream()); + if (!tkeNeeded) Tke_FreeStream = 0.0; config->SetTke_FreeStream(Tke_FreeStream); Tke_FreeStreamND = 3.0/2.0*(ModVel_FreeStreamND*ModVel_FreeStreamND*config->GetTurbulenceIntensity_FreeStream()*config->GetTurbulenceIntensity_FreeStream()); + if (!tkeNeeded) Tke_FreeStreamND = 0.0; config->SetTke_FreeStreamND(Tke_FreeStreamND); Omega_FreeStream = Density_FreeStream*Tke_FreeStream/(Viscosity_FreeStream*config->GetTurb2LamViscRatio_FreeStream()); @@ -1214,11 +1223,15 @@ void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short /*--- Initialize the dimensionless Fluid Model that will be used to solve the dimensionless problem ---*/ - Energy_FreeStreamND = energies[0] + 0.5 * ModVel_FreeStreamND * ModVel_FreeStreamND; + Energy_FreeStreamND = energies[0] + 0.5 * ModVel_FreeStreamND *ModVel_FreeStreamND; + Energy_ve_FreeStreamND = energies[1]; - if (tkeNeeded) { Energy_FreeStreamND += Tke_FreeStreamND; }; config->SetEnergy_FreeStreamND(Energy_FreeStreamND); + if (tkeNeeded) { Energy_FreeStreamND += Tke_FreeStreamND; }; + config->SetEnergy_FreeStreamND(Energy_FreeStreamND); + config->SetEnergy_ve_FreeStreamND(Energy_ve_FreeStreamND); - Energy_Ref = Energy_FreeStream/Energy_FreeStreamND; config->SetEnergy_Ref(Energy_Ref); + Energy_Ref = Energy_FreeStream/Energy_FreeStreamND; config->SetEnergy_Ref(Energy_Ref); + Energy_ve_Ref = Energy_ve_FreeStream/Energy_ve_FreeStreamND; config->SetEnergy_ve_Ref(Energy_ve_Ref ); Total_UnstTimeND = config->GetTotal_UnstTime() / Time_Ref; config->SetTotal_UnstTimeND(Total_UnstTimeND); Delta_UnstTimeND = config->GetDelta_UnstTime() / Time_Ref; config->SetDelta_UnstTimeND(Delta_UnstTimeND); @@ -1345,6 +1358,10 @@ void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short else if (config->GetSystemMeasurements() == US) Unit << "ft^2/s^2"; NonDimTable << "Total Energy" << config->GetEnergy_FreeStream() << config->GetEnergy_Ref() << Unit.str() << config->GetEnergy_FreeStreamND(); Unit.str(""); + if (config->GetSystemMeasurements() == SI) Unit << "m^2/s^2"; + else if (config->GetSystemMeasurements() == US) Unit << "ft^2/s^2"; + NonDimTable << "Vibe-el Energy" << config->GetEnergy_ve_FreeStream() << config->GetEnergy_ve_Ref() << Unit.str() << config->GetEnergy_ve_FreeStreamND(); + Unit.str(""); if (config->GetSystemMeasurements() == SI) Unit << "m/s"; else if (config->GetSystemMeasurements() == US) Unit << "ft/s"; NonDimTable << "Velocity-X" << config->GetVelocity_FreeStream()[0] << config->GetVelocity_Ref() << Unit.str() << config->GetVelocity_FreeStreamND()[0]; @@ -1516,11 +1533,23 @@ void CNEMOEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_contai unsigned short iDim; unsigned long iVertex, iPoint, Point_Normal; - su2double *V_infty, *V_domain, *U_infty, *U_domain; + su2double *V_infty, *V_domain, *V_temp; + su2double *U_infty, *U_domain; /*--- Set booleans from configuration parameters ---*/ bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT); bool viscous = config->GetViscous(); + bool tkeNeeded = (config->GetKind_Turb_Model() == TURB_MODEL::SST); + + unsigned short T_INDEX = nodes->GetTIndex(); + unsigned short TVE_INDEX = nodes->GetTveIndex(); + unsigned short VEL_INDEX = nodes->GetVelIndex(); + unsigned short P_INDEX = nodes->GetPIndex(); + unsigned short RHO_INDEX = nodes->GetRhoIndex(); + unsigned short H_INDEX = nodes->GetHIndex(); + unsigned short A_INDEX = nodes->GetAIndex(); + unsigned short RHOCVTR_INDEX = nodes->GetRhoCvtrIndex(); + unsigned short RHOCVVE_INDEX = nodes->GetRhoCvveIndex(); /*--- Allocate arrays ---*/ su2double *Normal = new su2double[nDim]; @@ -1546,8 +1575,28 @@ void CNEMOEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_contai /*--- Retrieve solution at the boundary node & free-stream ---*/ U_domain = nodes->GetSolution(iPoint); V_domain = nodes->GetPrimitive(iPoint); + V_temp = node_infty->GetPrimitive(0); U_infty = node_infty->GetSolution(0); - V_infty = node_infty->GetPrimitive(0); + + vector rhos; + rhos.resize(nSpecies,0.0); + + for (auto iSpecies = 0; iSpeciesSetConservative(U_domain, U_infty); @@ -1614,7 +1663,11 @@ void CNEMOEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_contai visc_numerics->SetThermalConductivity_ve(nodes->GetThermalConductivity_ve(iPoint), nodes->GetThermalConductivity_ve(iPoint)); - /*--- Compute and update residual ---*/ + if (config->GetKind_Turb_Model() == TURB_MODEL::SST) + visc_numerics->SetTurbKineticEnergy(solver_container[TURB_SOL]->GetNodes()->GetSolution(iPoint,0), + solver_container[TURB_SOL]->GetNodes()->GetSolution(iPoint,0)); + + /*--- Compute and update residual ---*/ auto residual = visc_numerics->ComputeResidual(config); LinSysRes.SubtractBlock(iPoint, residual); diff --git a/SU2_CFD/src/solvers/CNEMONSSolver.cpp b/SU2_CFD/src/solvers/CNEMONSSolver.cpp index 617a0d31e90c..c8fbdd9fd210 100644 --- a/SU2_CFD/src/solvers/CNEMONSSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMONSSolver.cpp @@ -539,6 +539,10 @@ void CNEMONSSolver::BC_IsothermalNonCatalytic_Wall(CGeometry *geometry, SU2_MPI::Error("NEED TO TAKE A CLOSER LOOK AT THE JACOBIAN W/ IONIZATION",CURRENT_FUNCTION); } + /*--- Extract required indices ---*/ + const unsigned short RHOCVTR_INDEX = nodes->GetRhoCvtrIndex(); + const unsigned short RHO_INDEX = nodes->GetRhoIndex(); + /*--- Define 'proportional control' constant ---*/ const su2double C = 5; diff --git a/SU2_CFD/src/solvers/CSolverFactory.cpp b/SU2_CFD/src/solvers/CSolverFactory.cpp index bf2a09ddfe56..b95beb943807 100644 --- a/SU2_CFD/src/solvers/CSolverFactory.cpp +++ b/SU2_CFD/src/solvers/CSolverFactory.cpp @@ -95,6 +95,12 @@ CSolver** CSolverFactory::CreateSolverContainer(MAIN_SOLVER kindMainSolver, CCon solver[TRANS_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::TRANSITION, solver, geometry, config, iMGLevel); solver[SPECIES_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::SPECIES, solver, geometry, config, iMGLevel); break; + case MAIN_SOLVER::NEMO_RANS: + solver[FLOW_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::NEMO_NAVIER_STOKES, solver, geometry, config, iMGLevel); + solver[TURB_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::TURB, solver, geometry, config, iMGLevel); + solver[TRANS_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::TRANSITION, solver, geometry, config, iMGLevel); + solver[SPECIES_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::SPECIES, solver, geometry, config, iMGLevel); + break; case MAIN_SOLVER::INC_RANS: solver[FLOW_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::INC_NAVIER_STOKES, solver, geometry, config, iMGLevel); solver[HEAT_SOL] = CreateSubSolver(SUB_SOLVER_TYPE::HEAT, solver, geometry, config, iMGLevel); diff --git a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp index 027c967e7c96..759cd3eb88da 100644 --- a/SU2_CFD/src/solvers/CTurbSSTSolver.cpp +++ b/SU2_CFD/src/solvers/CTurbSSTSolver.cpp @@ -355,8 +355,8 @@ void CTurbSSTSolver::Source_Residual(CGeometry *geometry, CSolver **solver_conta numerics->SetCrossDiff(nodes->GetCrossDiff(iPoint)); - /*--- Effective Intermittency ---*/ - if (config->GetKind_Trans_Model() == TURB_TRANS_MODEL::LM) { + /*--- Effective Intermittency ---*/ + if (config->GetKind_Trans_Model() == TURB_TRANS_MODEL::LM) { numerics->SetIntermittencyEff(solver_container[TRANS_SOL]->GetNodes()->GetIntermittencyEff(iPoint)); } diff --git a/SU2_CFD/src/variables/CNEMOEulerVariable.cpp b/SU2_CFD/src/variables/CNEMOEulerVariable.cpp index e9026821d922..d34087772fb5 100644 --- a/SU2_CFD/src/variables/CNEMOEulerVariable.cpp +++ b/SU2_CFD/src/variables/CNEMOEulerVariable.cpp @@ -184,8 +184,8 @@ bool CNEMOEulerVariable::Cons2PrimVar(su2double *U, su2double *V, bool nonPhys = false; /*--- Set temperature clipping values ---*/ - Tmin = 50.0; Tmax = 8E4; - Tvemin = 50.0; Tvemax = 8E4; + Tmin = 5.0; Tmax = 8E4; + Tvemin = 5.0; Tvemax = 8E4; /*--- Rename variables for convenience ---*/ su2double rhoE = U[nSpecies+nDim]; // Density * energy [J/m3] diff --git a/TestCases/nicf/coolprop/fluidModel.cfg b/TestCases/nicf/coolprop/fluidModel.cfg index 6b2fb858bc61..44df7a391180 100644 --- a/TestCases/nicf/coolprop/fluidModel.cfg +++ b/TestCases/nicf/coolprop/fluidModel.cfg @@ -6,7 +6,7 @@ % Author: Peng Yan, Alberto Guardone % % Institution: Politecnico di Milano % % Date: 2022.10.8 % -% File Version 7.4.0 Blackbird % +% File Version 7.5.0 Blackbird % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/TestCases/nicf/coolprop/transportModel.cfg b/TestCases/nicf/coolprop/transportModel.cfg index b4b1d9c49063..491073a27344 100644 --- a/TestCases/nicf/coolprop/transportModel.cfg +++ b/TestCases/nicf/coolprop/transportModel.cfg @@ -6,7 +6,7 @@ % Author: Peng Yan, Alberto Guardone % % Institution: Politecnico di Milano % % Date: 2022.11.26 % -% File Version 7.4.0 Blackbird % +% File Version 7.5.0 Blackbird % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/legacy/configure.ac b/legacy/configure.ac index 3a46b079a78a..7145af36a303 100644 --- a/legacy/configure.ac +++ b/legacy/configure.ac @@ -338,7 +338,7 @@ AC_MSG_RESULT([ ------------------------------------------------------------------------- | ___ _ _ ___ | -| / __| | | |_ ) Release 7.4.0 'Blackbird' | +| / __| | | |_ ) Release 7.5.0 'Blackbird' | | \\__ \\ |_| |/ / | | |___/\\___//___| Suite | | | diff --git a/legacy/preconfigure.py b/legacy/preconfigure.py index b5893cb3c210..7f99601e27c5 100755 --- a/legacy/preconfigure.py +++ b/legacy/preconfigure.py @@ -553,7 +553,7 @@ def header(): print('-------------------------------------------------------------------------\n'\ '| ___ _ _ ___ | \n'\ - '| / __| | | |_ ) Release 7.4.0 \'Blackbird\' | \n'\ + '| / __| | | |_ ) Release 7.5.0 \'Blackbird\' | \n'\ '| \__ \ |_| |/ / | \n'\ '| |___/\___//___| Pre-configuration Script | \n'\ '| | \n'\ From bcd47083d7208eec5f1097b72d7c278f975c557b Mon Sep 17 00:00:00 2001 From: "Martin E. Liza" Date: Sun, 16 Jul 2023 16:26:40 -0400 Subject: [PATCH 2/3] fixed type --- SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp b/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp index 3b24afc4264d..3ee6f124242a 100644 --- a/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp +++ b/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp @@ -252,6 +252,7 @@ void CNEMONumerics::GetViscousProjFlux(const su2double *val_primvar, const su2double mu = val_lam_viscosity+val_eddy_viscosity; su2double ktr = val_therm_conductivity; su2double kve = val_therm_conductivity_ve; + su2double Cpve=0.0; const su2double rho = val_primvar[RHO_INDEX]; const su2double T = val_primvar[T_INDEX]; const su2double Tve = val_primvar[TVE_INDEX]; From ccceaec145ed70f86bd8be33c8ed1d33a97538c0 Mon Sep 17 00:00:00 2001 From: "Martin E. Liza" Date: Sat, 7 Dec 2024 09:45:43 -0700 Subject: [PATCH 3/3] updated --- Common/include/toolboxes/printing_toolbox.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Common/include/toolboxes/printing_toolbox.hpp b/Common/include/toolboxes/printing_toolbox.hpp index 5edad78315dd..f6ae695830a4 100644 --- a/Common/include/toolboxes/printing_toolbox.hpp +++ b/Common/include/toolboxes/printing_toolbox.hpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include "../basic_types/datatype_structure.hpp"