diff --git a/.gitignore b/.gitignore index 2177d44e12e1..d13575720004 100644 --- a/.gitignore +++ b/.gitignore @@ -54,7 +54,7 @@ externals/autotools/include externals/autotools/share externals/autotools/lib externals/tecio/boost - +subprojects/ #logs and errors *.log *.err diff --git a/Common/include/CConfig.hpp b/Common/include/CConfig.hpp index 0afaff13ddce..58bd5429fb32 100644 --- a/Common/include/CConfig.hpp +++ b/Common/include/CConfig.hpp @@ -879,6 +879,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. */ @@ -912,7 +913,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. */ @@ -923,6 +925,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). */ @@ -1750,6 +1753,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. @@ -1841,6 +1850,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. @@ -1969,6 +1984,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. @@ -2595,6 +2616,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. @@ -2777,12 +2804,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. @@ -3894,6 +3933,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 ddf570ab6978..1a1f0d1d9378 100644 --- a/Common/include/option_structure.hpp +++ b/Common/include/option_structure.hpp @@ -258,6 +258,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) @@ -273,6 +274,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("HEAT_EQUATION", MAIN_SOLVER::HEAT_EQUATION) MakePair("ELASTICITY", MAIN_SOLVER::FEM_ELASTICITY) MakePair("TEMPLATE_SOLVER", MAIN_SOLVER::TEMPLATE_SOLVER) @@ -852,6 +854,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 NEMO ONLY)*/ AUSMPLUSM, /*!< \breif AUSM+M numerical method. (NEMO Only)*/ BOUNDED_SCALAR /*!< \brief Scalar advection numerical method. */ }; diff --git a/Common/include/toolboxes/printing_toolbox.hpp b/Common/include/toolboxes/printing_toolbox.hpp index 6b4466f44086..47286af76469 100644 --- a/Common/include/toolboxes/printing_toolbox.hpp +++ b/Common/include/toolboxes/printing_toolbox.hpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include "../basic_types/datatype_structure.hpp" diff --git a/Common/src/CConfig.cpp b/Common/src/CConfig.cpp index 1ec938832e26..7f13fcc617d3 100644 --- a/Common/src/CConfig.cpp +++ b/Common/src/CConfig.cpp @@ -3486,12 +3486,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); + } if (Kind_Turb_Model == TURB_MODEL::NONE && Kind_Trans_Model != TURB_TRANS_MODEL::NONE) { SU2_MPI::Error("KIND_TURB_MODEL cannot be NONE to use a transition model", CURRENT_FUNCTION); } @@ -3549,7 +3555,7 @@ 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)) + 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 or INC_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); @@ -3872,6 +3878,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 || @@ -4557,6 +4564,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 || @@ -4888,6 +4899,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 ) || @@ -4956,6 +4968,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); } @@ -5320,7 +5336,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; } @@ -6365,6 +6382,70 @@ void CConfig::SetOutput(SU2_COMPONENT val_software, unsigned short val_izone) { SU2_MPI::Error("The GAS_MODEL given is unavailable using CSU2TCLIB. Choose one of the options: N2, AIR-5, AIR-7, or 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; @@ -6417,7 +6498,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; @@ -6881,7 +6962,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) { @@ -6935,7 +7016,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) { @@ -6988,7 +7070,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; @@ -6998,7 +7080,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; } @@ -7095,7 +7179,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)) { @@ -7295,6 +7379,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; @@ -8654,7 +8739,7 @@ void CConfig::SetGlobalParam(MAIN_SOLVER val_solver, SetSpeciesParam(); SetHeatParam(); break; - case MAIN_SOLVER::RANS: case MAIN_SOLVER::INC_RANS: + case MAIN_SOLVER::RANS: case MAIN_SOLVER::INC_RANS: case MAIN_SOLVER::NEMO_RANS: case MAIN_SOLVER::DISC_ADJ_RANS: case MAIN_SOLVER::DISC_ADJ_INC_RANS: SetFlowParam(); SetTurbParam(); diff --git a/Common/src/geometry/CGeometry.cpp b/Common/src/geometry/CGeometry.cpp index cf1a6948c5f5..fc9ba5c439b8 100644 --- a/Common/src/geometry/CGeometry.cpp +++ b/Common/src/geometry/CGeometry.cpp @@ -3913,6 +3913,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 || kindSolver == MAIN_SOLVER::FEM_RANS) { wallDistanceNeeded[iZone] = true; diff --git a/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp b/SU2_CFD/include/numerics/turbulent/transition/trans_sources.hpp index 4030e35bab9c..1585bb36bdd4 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 015e808b6269..d1d317f87673 100644 --- a/SU2_CFD/src/drivers/CDriver.cpp +++ b/SU2_CFD/src/drivers/CDriver.cpp @@ -1489,6 +1489,12 @@ void CDriver::InitializeNumerics(CConfig *config, CGeometry **geometry, CSolver 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; @@ -2517,7 +2523,7 @@ void CDriver::InitializeInterface(CConfig **config, CSolver***** solver, CGeomet else interface_type = NO_TRANSFER; } - + if (interface_type != NO_TRANSFER) { auto nVar = 4; interface[donor][target] = new CConjugateHeatInterface(nVar, 0); diff --git a/SU2_CFD/src/drivers/CMultizoneDriver.cpp b/SU2_CFD/src/drivers/CMultizoneDriver.cpp index d5e2fbbafbbb..62224af17208 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; @@ -554,7 +554,9 @@ bool CMultizoneDriver::TransferData(unsigned short donorZone, unsigned short tar /*--- 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 4ca6c45a1724..b4af0d27048d 100644 --- a/SU2_CFD/src/iteration/CFluidIteration.cpp +++ b/SU2_CFD/src/iteration/CFluidIteration.cpp @@ -72,6 +72,7 @@ void CFluidIteration::Iterate(COutput* output, CIntegration**** integration, CGe /*--- Update global parameters ---*/ const auto main_solver = config[val_iZone]->GetKind_Solver(); + config[val_iZone]->SetGlobalParam(main_solver, RUNTIME_FLOW_SYS); /*--- Solve the Euler, Navier-Stokes or Reynolds-averaged Navier-Stokes (RANS) equations (one iteration) ---*/ @@ -178,8 +179,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 6b008776a265..db5df97b4643 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 d32e46bf353d..2a3f05a76f78 100644 --- a/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp +++ b/SU2_CFD/src/numerics/NEMO/CNEMONumerics.cpp @@ -241,17 +241,36 @@ 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; - const su2double ktr = val_therm_conductivity; - const su2double kve = val_therm_conductivity_ve; + 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]; 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"); + } SetVolumeOutputFieldsScalarPrimitive(config); //Residuals @@ -352,6 +355,9 @@ void CNEMOCompOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolv SetVolumeOutputValue("LAMINAR_VISCOSITY", iPoint, Node_Flow->GetLaminarViscosity(iPoint)); SetVolumeOutputValue("THERMAL_CONDUCTIVITY_TR", iPoint, Node_Flow->GetThermalConductivity(iPoint)); SetVolumeOutputValue("THERMAL_CONDUCTIVITY_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 3c97e2a1da5f..24abecfe0224 100644 --- a/SU2_CFD/src/output/COutputFactory.cpp +++ b/SU2_CFD/src/output/COutputFactory.cpp @@ -50,7 +50,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/solvers/CNEMOEulerSolver.cpp b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp index 1a41a04f66a7..555dd87d232a 100644 --- a/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMOEulerSolver.cpp @@ -140,12 +140,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) { @@ -986,15 +988,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, @@ -1010,7 +1013,7 @@ void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short const bool unsteady = (config->GetTime_Marching() != TIME_MARCHING::STEADY); const bool viscous = config->GetViscous(); const bool gravity = config->GetGravityForce(); - const bool turbulent = false; + const bool turbulent = (config->GetKind_Turb_Model() != TURB_MODEL::NONE); const bool tkeNeeded = ((turbulent) && (config->GetKind_Turb_Model() == TURB_MODEL::SST)); const bool reynolds_init = (config->GetKind_InitOption() == REYNOLDS); @@ -1095,6 +1098,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 { @@ -1115,14 +1119,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. ---*/ @@ -1187,9 +1194,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()); @@ -1200,11 +1209,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); @@ -1331,6 +1344,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]; @@ -1596,7 +1613,11 @@ void CNEMOEulerSolver::BC_Far_Field(CGeometry *geometry, 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 01d633857392..f8ea4788b9be 100644 --- a/SU2_CFD/src/solvers/CNEMONSSolver.cpp +++ b/SU2_CFD/src/solvers/CNEMONSSolver.cpp @@ -536,6 +536,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 743775ad139b..5f9f53820923 100644 --- a/SU2_CFD/src/solvers/CSolverFactory.cpp +++ b/SU2_CFD/src/solvers/CSolverFactory.cpp @@ -96,6 +96,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/variables/CNEMOEulerVariable.cpp b/SU2_CFD/src/variables/CNEMOEulerVariable.cpp index 8386ed3b6162..7cee963fbe9e 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]