@@ -184,7 +184,7 @@ void CTurbSASolver::Preprocessing(CGeometry *geometry, CSolver **solver_containe
184184
185185 /* --- Set the vortex tilting coefficient at every node if required ---*/
186186
187- if (kind_hybridRANSLES == SA_EDDES){
187+ if (kind_hybridRANSLES == SA_EDDES || kind_hybridRANSLES == SA_EDDES_MOD ){
188188 auto * flowNodes = su2staticcast_p<CFlowVariable*>(solver_container[FLOW_SOL]->GetNodes ());
189189
190190 SU2_OMP_FOR_STAT (omp_chunk_size)
@@ -1511,6 +1511,62 @@ void CTurbSASolver::SetDES_LengthScale(CSolver **solver, CGeometry *geometry, CC
15111511 const su2double distDES = constDES * maxDelta;
15121512 lengthScale = wallDistance-f_d*max (0.0 ,(wallDistance-distDES));
15131513
1514+ break ;
1515+ }
1516+ case SA_EDDES_MOD: {
1517+ /* --- An Enhanced Version of DES with Rapid Transition from RANS to LES in Separated Flows.
1518+ Shur et al.
1519+ Flow Turbulence Combust - 2015
1520+ ---*/
1521+
1522+ su2double vortexTiltingMeasure = nodes->GetVortex_Tilting (iPoint);
1523+
1524+ const su2double omega = GeometryToolbox::Norm (3 , vorticity);
1525+
1526+ su2double ratioOmega[MAXNDIM] = {};
1527+
1528+ for (auto iDim = 0 ; iDim < 3 ; iDim++){
1529+ ratioOmega[iDim] = vorticity[iDim]/omega;
1530+ }
1531+
1532+ const su2double deltaDDES = geometry->nodes ->GetMaxLength (iPoint);
1533+
1534+ su2double ln_max = -1 ;
1535+ for (const auto jPoint : geometry->nodes ->GetPoints (iPoint)){
1536+ const auto coord_j = geometry->nodes ->GetCoord (jPoint);
1537+
1538+ for (const auto kPoint : geometry->nodes ->GetPoints (iPoint)){
1539+ const auto coord_k = geometry->nodes ->GetCoord (kPoint );
1540+
1541+ su2double delta[MAXNDIM] = {};
1542+ // This should only be performed on 3D cases anyway
1543+ for (auto iDim = 0u ; iDim < 3 ; iDim++){
1544+ delta[iDim] = (coord_j[iDim] - coord_k[iDim])/2.0 ; // Should I divide by 2 as I am interested in the dual volume?
1545+ }
1546+ su2double l_n_minus_m[3 ];
1547+ GeometryToolbox::CrossProduct (delta, ratioOmega, l_n_minus_m);
1548+ ln_max = max (ln_max, GeometryToolbox::Norm (nDim, l_n_minus_m));
1549+ }
1550+ vortexTiltingMeasure += nodes->GetVortex_Tilting (jPoint);
1551+ }
1552+
1553+ vortexTiltingMeasure /= (nNeigh + 1 );
1554+
1555+ const su2double f_kh = max (f_min,
1556+ min (f_max,
1557+ f_min + ((f_max - f_min)/(a2 - a1)) * (vortexTiltingMeasure - a1)));
1558+
1559+ const su2double r_d = (kinematicViscosityTurb+kinematicViscosity)/(uijuij*k2*pow (wallDistance, 2.0 ));
1560+ const su2double f_d = 1.0 -tanh (pow (8.0 *r_d,3.0 ));
1561+
1562+ su2double maxDelta = (ln_max/sqrt (3.0 )) * f_kh;
1563+ if (f_d < 0.999 ){
1564+ maxDelta = deltaDDES;
1565+ }
1566+
1567+ const su2double distDES = constDES * maxDelta;
1568+ lengthScale = wallDistance-f_d*max (0.0 ,(wallDistance-distDES));
1569+
15141570 break ;
15151571 }
15161572 }
0 commit comments