Skip to content

Commit 5cb3a3c

Browse files
authored
Merge branch 'develop' into fix_SpecialOutput_SonicBoom
2 parents f3181de + 3f745be commit 5cb3a3c

10 files changed

Lines changed: 61 additions & 62 deletions

File tree

Common/include/CConfig.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,6 @@ class CConfig {
475475
unsigned short Kind_Solver, /*!< \brief Kind of solver Euler, NS, Continuous adjoint, etc. */
476476
Kind_FluidModel, /*!< \brief Kind of the Fluid Model: Ideal or Van der Walls, ... . */
477477
Kind_InitOption, /*!< \brief Kind of Init option to choose if initializing with Reynolds number or with thermodynamic conditions */
478-
Kind_TransCoeffModel, /*!< \brief Transport coefficient Model for NEMO solver. */
479478
Kind_GridMovement, /*!< \brief Kind of the static mesh movement. */
480479
*Kind_SurfaceMovement, /*!< \brief Kind of the static mesh movement. */
481480
nKind_SurfaceMovement, /*!< \brief Kind of the dynamic mesh movement. */
@@ -1142,6 +1141,7 @@ class CConfig {
11421141
monoatomic; /*!< \brief Flag for monoatomic mixture. */
11431142
string GasModel, /*!< \brief Gas Model. */
11441143
*Wall_Catalytic; /*!< \brief Pointer to catalytic walls. */
1144+
TRANSCOEFFMODEL Kind_TransCoeffModel; /*!< \brief Transport coefficient Model for NEMO solver. */
11451145

11461146
/*!
11471147
* \brief Set the default values of config options not set in the config file using another config object.
@@ -3623,7 +3623,7 @@ class CConfig {
36233623
* \brief Get the transport coefficient model.
36243624
* \return Index of transport coefficient model.
36253625
*/
3626-
unsigned short GetKind_TransCoeffModel(void) const { return Kind_TransCoeffModel; }
3626+
TRANSCOEFFMODEL GetKind_TransCoeffModel(void) const { return Kind_TransCoeffModel; }
36273627

36283628
/*!
36293629
* \brief Get the total number of heat flux markers.

Common/include/option_structure.hpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -540,13 +540,15 @@ MakePair("ONESPECIES", ONESPECIES)
540540
/*!
541541
* \brief types of coefficient transport model
542542
*/
543-
enum ENUM_TRANSCOEFFMODEL {
544-
WILKE = 0,
545-
GUPTAYOS = 1
546-
};
547-
static const MapType<std::string, ENUM_TRANSCOEFFMODEL> TransCoeffModel_Map = {
548-
MakePair("WILKE", WILKE)
549-
MakePair("GUPTA-YOS", GUPTAYOS)
543+
enum class TRANSCOEFFMODEL {
544+
WILKE,
545+
GUPTAYOS,
546+
CHAPMANN_ENSKOG
547+
};
548+
static const MapType<std::string, TRANSCOEFFMODEL> TransCoeffModel_Map = {
549+
MakePair("WILKE", TRANSCOEFFMODEL::WILKE)
550+
MakePair("GUPTA-YOS", TRANSCOEFFMODEL::GUPTAYOS)
551+
MakePair("CHAPMANN-ENSKOG", TRANSCOEFFMODEL::CHAPMANN_ENSKOG)
550552
};
551553

552554
/*!

Common/src/CConfig.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1149,7 +1149,7 @@ void CConfig::SetConfig_Options() {
11491149
/* DESCRIPTION: Specify chemical model for multi-species simulations - read by Mutation++ library*/
11501150
addStringOption("GAS_MODEL", GasModel, string("N2"));
11511151
/* DESCRIPTION: Specify transport coefficient model for multi-species simulations */
1152-
addEnumOption("TRANSPORT_COEFF_MODEL", Kind_TransCoeffModel, TransCoeffModel_Map, WILKE);
1152+
addEnumOption("TRANSPORT_COEFF_MODEL", Kind_TransCoeffModel, TransCoeffModel_Map, TRANSCOEFFMODEL::WILKE);
11531153
/* DESCRIPTION: Specify mass fraction of each species */
11541154
addDoubleListOption("GAS_COMPOSITION", nSpecies, Gas_Composition);
11551155
/* DESCRIPTION: Specify if mixture is frozen */
@@ -3587,8 +3587,12 @@ void CConfig::SetPostprocessing(SU2_COMPONENT val_software, unsigned short val_i
35873587
SU2_MPI::Error("Only STANDARD_AIR fluid model can be used with US Measurement System", CURRENT_FUNCTION);
35883588
}
35893589

3590-
if (nemo && Kind_TransCoeffModel != WILKE ) {
3591-
SU2_MPI::Error("Only WILKE transport model is stable for the NEMO solver.", CURRENT_FUNCTION);
3590+
if (Kind_FluidModel == SU2_NONEQ && Kind_TransCoeffModel != TRANSCOEFFMODEL::WILKE ) {
3591+
SU2_MPI::Error("Only WILKE transport model is stable for the NEMO solver using SU2TClib. Use Mutation++ instead.", CURRENT_FUNCTION);
3592+
}
3593+
3594+
if (Kind_FluidModel == MUTATIONPP && (Kind_TransCoeffModel != TRANSCOEFFMODEL::WILKE && Kind_TransCoeffModel != TRANSCOEFFMODEL::CHAPMANN_ENSKOG)) {
3595+
SU2_MPI::Error("Only WILKE and Chapmann-Enskog transport model can be used with Mutation++ at the moment.", CURRENT_FUNCTION);
35923596
}
35933597

35943598
if (!ideal_gas && !nemo) {

SU2_CFD/include/fluid/CNEMOGas.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ class CNEMOGas : public CFluidModel {
4848
nHeavy, /*!< \brief Number of heavy particles in gas */
4949
nEl, /*!< \brief Number of electrons in gas */
5050
nDim, /*!< \brief Number of dimensions. */
51-
nEnergyEq = 2, /*!< \brief Number of energy equations for the 2T model. */
52-
Kind_TransCoeffModel; /*!< \brief Transport coefficients model for NEMO solver. */
51+
nEnergyEq = 2; /*!< \brief Number of energy equations for the 2T model. */
52+
TRANSCOEFFMODEL Kind_TransCoeffModel; /*!< \brief Transport coefficients model for NEMO solver. */
5353

5454
unsigned iSpecies, /*!< \brief Common iteration counter for species */
5555
jSpecies, /*!< \brief Common iteration counter for species */

SU2_CFD/include/variables/CNEMOEulerVariable.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class CNEMOEulerVariable : public CVariable {
8181
LAM_VISC_INDEX, EDDY_VISC_INDEX, nSpecies;
8282

8383
su2double Tve_Freestream; /*!< \brief Freestream vib-el temperature. */
84+
const bool implicit; /*!< \brief Implicit flag. */
8485

8586
public:
8687

SU2_CFD/src/fluid/CMutationTCLib.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ CMutationTCLib::CMutationTCLib(const CConfig* config, unsigned short val_nDim):
4242
/*--- Set up inputs to define type of mixture in the Mutation++ library ---*/
4343

4444
/*--- Define transport model ---*/
45-
if(Kind_TransCoeffModel == WILKE)
45+
if(Kind_TransCoeffModel == TRANSCOEFFMODEL::WILKE)
4646
transport_model = "Wilke";
47-
else if (Kind_TransCoeffModel == GUPTAYOS)
47+
else if (Kind_TransCoeffModel == TRANSCOEFFMODEL::GUPTAYOS)
4848
transport_model = "Gupta-Yos";
49+
else if (Kind_TransCoeffModel == TRANSCOEFFMODEL::CHAPMANN_ENSKOG)
50+
transport_model = "Chapmann-Enskog_LDLT";
4951

5052
opt.setStateModel("ChemNonEqTTv");
5153
if (frozen) opt.setMechanism("none");

SU2_CFD/src/fluid/CSU2TCLib.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,9 +1004,9 @@ vector<su2double>& CSU2TCLib::ComputeSpeciesEnthalpy(su2double val_T, su2double
10041004

10051005
vector<su2double>& CSU2TCLib::GetDiffusionCoeff(){
10061006

1007-
if(Kind_TransCoeffModel == WILKE)
1007+
if(Kind_TransCoeffModel == TRANSCOEFFMODEL::WILKE)
10081008
DiffusionCoeffWBE();
1009-
if(Kind_TransCoeffModel == GUPTAYOS)
1009+
if(Kind_TransCoeffModel == TRANSCOEFFMODEL::GUPTAYOS)
10101010
DiffusionCoeffGY();
10111011

10121012
return DiffusionCoeff;
@@ -1015,9 +1015,9 @@ vector<su2double>& CSU2TCLib::GetDiffusionCoeff(){
10151015

10161016
su2double CSU2TCLib::GetViscosity(){
10171017

1018-
if(Kind_TransCoeffModel == WILKE)
1018+
if(Kind_TransCoeffModel == TRANSCOEFFMODEL::WILKE)
10191019
ViscosityWBE();
1020-
if(Kind_TransCoeffModel == GUPTAYOS)
1020+
if(Kind_TransCoeffModel == TRANSCOEFFMODEL::GUPTAYOS)
10211021
ViscosityGY();
10221022

10231023
return Mu;
@@ -1026,9 +1026,9 @@ su2double CSU2TCLib::GetViscosity(){
10261026

10271027
vector<su2double>& CSU2TCLib::GetThermalConductivities(){
10281028

1029-
if(Kind_TransCoeffModel == WILKE)
1029+
if(Kind_TransCoeffModel == TRANSCOEFFMODEL::WILKE)
10301030
ThermalConductivitiesWBE();
1031-
if(Kind_TransCoeffModel == GUPTAYOS)
1031+
if(Kind_TransCoeffModel == TRANSCOEFFMODEL::GUPTAYOS)
10321032
ThermalConductivitiesGY();
10331033

10341034
return ThermalConductivities;

SU2_CFD/src/solvers/CNEMOEulerSolver.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,16 +1286,21 @@ void CNEMOEulerSolver::SetNondimensionalization(CConfig *config, unsigned short
12861286
if (viscous) {
12871287

12881288
switch(config->GetKind_TransCoeffModel()){
1289-
case WILKE:
1289+
case TRANSCOEFFMODEL::WILKE:
12901290
ModelTable << "Wilke-Blottner-Eucken";
12911291
NonDimTable.PrintFooter();
12921292
break;
12931293

1294-
case GUPTAYOS:
1294+
case TRANSCOEFFMODEL::GUPTAYOS:
12951295
ModelTable << "Gupta-Yos";
12961296
NonDimTable.PrintFooter();
12971297
break;
12981298

1299+
case TRANSCOEFFMODEL::CHAPMANN_ENSKOG:
1300+
ModelTable << "CHAPMANN-ENSKOG_LDLT";
1301+
NonDimTable.PrintFooter();
1302+
break;
1303+
12991304
default:
13001305
break;
13011306
}

SU2_CFD/src/variables/CNEMOEulerVariable.cpp

Lines changed: 17 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ CNEMOEulerVariable::CNEMOEulerVariable(su2double val_pressure,
4343
ndim,
4444
nvar,
4545
config ),
46-
Gradient_Reconstruction(config->GetReconstructionGradientRequired() ? Gradient_Aux : Gradient_Primitive) {
46+
Gradient_Reconstruction(config->GetReconstructionGradientRequired() ? Gradient_Aux : Gradient_Primitive),
47+
implicit(config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT) {
4748

4849
unsigned short iDim, iSpecies;
4950

@@ -267,41 +268,20 @@ bool CNEMOEulerVariable::Cons2PrimVar(su2double *U, su2double *V,
267268
V[TVE_INDEX] = T[1];
268269

269270
// Determine if the temperature lies within the acceptable range
270-
if (V[T_INDEX] <= Tmin) { nonPhys = true;}
271-
else if (V[T_INDEX] >= Tmax) { nonPhys = true;}
272-
else if (V[T_INDEX] != V[T_INDEX] || V[TVE_INDEX] != V[TVE_INDEX]){
273-
nonPhys = true;}
271+
if (V[T_INDEX] <= Tmin) { nonPhys = true; return nonPhys;}
272+
else if (V[T_INDEX] >= Tmax) { nonPhys = true; return nonPhys;}
273+
else if (V[T_INDEX] != V[T_INDEX]){ nonPhys = true; return nonPhys;}
274274

275-
/*--- Vibrational-Electronic Temperature ---*/
276-
vector<su2double> eves_min = fluidmodel->ComputeSpeciesEve(Tvemin);
277-
vector<su2double> eves_max = fluidmodel->ComputeSpeciesEve(Tvemax);
278-
279-
// Check for non-physical solutions
280275
if (!monoatomic){
281-
su2double rhoEve_min = 0.0;
282-
su2double rhoEve_max = 0.0;
283-
for (iSpecies = 0; iSpecies < nSpecies; iSpecies++) {
284-
rhoEve_min += U[iSpecies] * eves_min[iSpecies];
285-
rhoEve_max += U[iSpecies] * eves_max[iSpecies];
286-
}
287-
288-
if (rhoEve < rhoEve_min) {
289-
290-
nonPhys = true;
291-
V[TVE_INDEX] = Tvemin;
292-
U[nSpecies+nDim+1] = rhoEve_min;
293-
} else if (rhoEve > rhoEve_max) {
294-
nonPhys = true;
295-
V[TVE_INDEX] = Tvemax;
296-
U[nSpecies+nDim+1] = rhoEve_max;
297-
}
298-
} else {
299-
//TODO: can e-modes/vibe modes be active?
300-
V[TVE_INDEX] = Tve_Freestream;
276+
if (V[TVE_INDEX] <= Tvemin) { nonPhys = true; return nonPhys;}
277+
else if (V[TVE_INDEX] >= Tvemax) { nonPhys = true; return nonPhys;}
278+
else if (V[TVE_INDEX] != V[TVE_INDEX]){ nonPhys = true; return nonPhys;}
301279
}
280+
else {V[TVE_INDEX] = Tve_Freestream;}
302281

303282
// Determine other properties of the mixture at the current state
304283
fluidmodel->SetTDStateRhosTTv(rhos, V[T_INDEX], V[TVE_INDEX]);
284+
305285
const auto& cvves = fluidmodel->ComputeSpeciesCvVibEle();
306286
vector<su2double> eves = fluidmodel->ComputeSpeciesEve(V[TVE_INDEX]);
307287

@@ -310,11 +290,8 @@ bool CNEMOEulerVariable::Cons2PrimVar(su2double *U, su2double *V,
310290
val_Cvves[iSpecies] = cvves[iSpecies];
311291
}
312292

313-
su2double rhoCvtr = fluidmodel->ComputerhoCvtr();
314-
su2double rhoCvve = fluidmodel->ComputerhoCvve();
315-
316-
V[RHOCVTR_INDEX] = rhoCvtr;
317-
V[RHOCVVE_INDEX] = rhoCvve;
293+
V[RHOCVTR_INDEX] = fluidmodel->ComputerhoCvtr();
294+
V[RHOCVVE_INDEX] = fluidmodel->ComputerhoCvve();
318295

319296
/*--- Pressure ---*/
320297
V[P_INDEX] = fluidmodel->ComputePressure();
@@ -325,9 +302,11 @@ bool CNEMOEulerVariable::Cons2PrimVar(su2double *U, su2double *V,
325302
}
326303

327304
/*--- Partial derivatives of pressure and temperature ---*/
328-
fluidmodel->ComputedPdU (V, eves, val_dPdU );
329-
fluidmodel->ComputedTdU (V, val_dTdU );
330-
fluidmodel->ComputedTvedU(V, eves, val_dTvedU);
305+
if(implicit){
306+
fluidmodel->ComputedPdU (V, eves, val_dPdU );
307+
fluidmodel->ComputedTdU (V, val_dTdU );
308+
fluidmodel->ComputedTvedU(V, eves, val_dTvedU);
309+
}
331310

332311
/*--- Sound speed ---*/
333312
V[A_INDEX] = fluidmodel->ComputeSoundSpeed();

config_template.cfg

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1260,6 +1260,12 @@ TIME_DISCRE_ADJTURB= EULER_IMPLICIT
12601260
% Reduction factor of the CFL coefficient in the adjoint turbulent problem
12611261
CFL_REDUCTION_ADJTURB= 0.01
12621262

1263+
1264+
% -------------------- NEMO NUMERICAL METHOD DEFINITION -----------------------%
1265+
%
1266+
% Mixture transport properties (WILKE,GUPTA-YOS,CHAPMANN-ENSKOG)
1267+
TRANSPORT_COEFF_MODEL = WILKE
1268+
12631269
% ----------------------- GEOMETRY EVALUATION PARAMETERS ----------------------%
12641270
%
12651271
% Marker(s) of the surface where geometrical based function will be evaluated

0 commit comments

Comments
 (0)