Skip to content

Commit e9d74fc

Browse files
authored
Merge pull request #2352 from su2code/feature_HLPW5
Corrections to SA implementation
2 parents 8e561ee + ca1fcf1 commit e9d74fc

File tree

1 file changed

+27
-29
lines changed

1 file changed

+27
-29
lines changed

SU2_CFD/include/numerics/turbulent/turb_sources.hpp

+27-29
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ struct CSAVariables {
4848
const su2double cb2_sigma = cb2 / sigma;
4949
const su2double cw1 = cb1 / k2 + (1 + cb2) / sigma;
5050
const su2double cr1 = 0.5;
51-
const su2double CRot = 1.0;
51+
const su2double CRot = 2.0;
5252
const su2double c2 = 0.7, c3 = 0.9;
5353

5454
/*--- List of auxiliary functions ---*/
55-
su2double ft2, d_ft2, r, d_r, g, d_g, glim, fw, d_fw, Ji, d_Ji, S, Shat, d_Shat, fv1, d_fv1, fv2, d_fv2;
55+
su2double ft2, d_ft2, r, d_r, g, d_g, glim, fw, d_fw, Ji, d_Ji, Shat, d_Shat, fv1, d_fv1, fv2, d_fv2, Prod;
5656

5757
/*--- List of helpers ---*/
5858
su2double Omega, dist_i_2, inv_k2_d2, inv_Shat, g_6, norm2_Grad;
@@ -151,20 +151,7 @@ class CSourceBase_TurbSA : public CNumerics {
151151
Residual = 0.0;
152152
Jacobian_i[0] = 0.0;
153153

154-
/*--- Evaluate Omega with a rotational correction term. ---*/
155-
156-
Omega::get(Vorticity_i, nDim, PrimVar_Grad_i + idx.Velocity(), var);
157-
158-
/*--- Dacles-Mariani et. al. rotation correction ("-R"). ---*/
159-
if (options.rot) {
160-
var.Omega += var.CRot * min(0.0, StrainMag_i - var.Omega);
161-
/*--- Do not allow negative production for SA-neg. ---*/
162-
if (ScalarVar_i[0] < 0) var.Omega = abs(var.Omega);
163-
}
164-
165154
if (dist_i > 1e-10) {
166-
/*--- Vorticity ---*/
167-
var.S = var.Omega;
168155

169156
var.dist_i_2 = pow(dist_i, 2);
170157
const su2double nu = laminar_viscosity / density;
@@ -188,12 +175,24 @@ class CSourceBase_TurbSA : public CNumerics {
188175
var.fv2 = 1 - ScalarVar_i[0] / (nu + ScalarVar_i[0] * var.fv1);
189176
var.d_fv2 = -(1 / nu - Ji_2 * var.d_fv1) / pow(1 + var.Ji * var.fv1, 2);
190177

191-
/*--- Compute ft2 term ---*/
192-
ft2::get(var);
178+
/*--- Evaluate Omega with a rotational correction term. ---*/
179+
180+
Omega::get(Vorticity_i, nDim, PrimVar_Grad_i + idx.Velocity(), var);
193181

194182
/*--- Compute modified vorticity ---*/
195183
ModVort::get(ScalarVar_i[0], nu, var);
196184
var.inv_Shat = 1.0 / var.Shat;
185+
var.Prod = var.Shat;
186+
187+
/*--- Dacles-Mariani et. al. rotation correction ("-R"). ---*/
188+
if (options.rot) {
189+
var.Prod += var.CRot * min(0.0, StrainMag_i - var.Omega);
190+
/*--- Do not allow negative production for SA-neg. ---*/
191+
if (ScalarVar_i[0] < 0) var.Prod = abs(var.Prod);
192+
}
193+
194+
/*--- Compute ft2 term ---*/
195+
ft2::get(var);
197196

198197
/*--- Compute auxiliary function r ---*/
199198
rFunc::get(ScalarVar_i[0], var);
@@ -234,7 +233,6 @@ class CSourceBase_TurbSA : public CNumerics {
234233
} else if (transition_LM){
235234

236235
var.intermittency = intermittency_eff_i;
237-
//var.intermittency = 1.0;
238236
// Is wrong the reference from NASA?
239237
// Original max(min(gamma, 0.5), 1.0) always gives 1 as result.
240238
var.interDestrFactor = min(max(intermittency_i, 0.5), 1.0);
@@ -347,12 +345,12 @@ struct Bsl {
347345

348346
/*--- Limiting of \hat{S} based on "Modifications and Clarifications for the Implementation of the Spalart-Allmaras Turbulence Model"
349347
* Note 1 option c in https://turbmodels.larc.nasa.gov/spalart.html ---*/
350-
if (Sbar >= - c2 * var.S) {
351-
var.Shat = var.S + Sbar;
348+
if (Sbar >= - c2 * var.Omega) {
349+
var.Shat = var.Omega + Sbar;
352350
} else {
353-
const su2double Num = var.S * (c2 * c2 * var.S + c3 * Sbar);
354-
const su2double Den = (c3 - 2 * c2) * var.S - Sbar;
355-
var.Shat = var.S + Num / Den;
351+
const su2double Num = var.Omega * (c2 * c2 * var.Omega + c3 * Sbar);
352+
const su2double Den = (c3 - 2 * c2) * var.Omega - Sbar;
353+
var.Shat = var.Omega + Num / Den;
356354
}
357355
if (var.Shat <= 1e-10) {
358356
var.Shat = 1e-10;
@@ -366,12 +364,12 @@ struct Bsl {
366364
/*! \brief Edward. */
367365
struct Edw {
368366
static void get(const su2double& nue, const su2double& nu, CSAVariables& var) {
369-
var.Shat = max(var.S * ((1.0 / max(var.Ji, 1.0e-16)) + var.fv1), 1.0e-16);
367+
var.Shat = max(var.Omega * ((1.0 / max(var.Ji, 1.0e-16)) + var.fv1), 1.0e-16);
370368
var.Shat = max(var.Shat, 1.0e-10);
371369
if (var.Shat <= 1.0e-10) {
372370
var.d_Shat = 0.0;
373371
} else {
374-
var.d_Shat = -var.S * pow(var.Ji, -2) / nu + var.S * var.d_fv1;
372+
var.d_Shat = -var.Omega * pow(var.Ji, -2) / nu + var.Omega * var.d_fv1;
375373
}
376374
}
377375
};
@@ -383,7 +381,7 @@ struct Neg {
383381
// Baseline solution
384382
Bsl::get(nue, nu, var);
385383
} else {
386-
var.Shat = 1.0e-10;
384+
var.Shat = var.Omega;
387385
var.d_Shat = 0.0;
388386
}
389387
/*--- Don't check whether Sbar <>= -cv2*S.
@@ -447,8 +445,8 @@ struct Bsl {
447445
static void ComputeProduction(const su2double& nue, const CSAVariables& var, su2double& production,
448446
su2double& jacobian) {
449447
const su2double factor = var.intermittency * var.cb1;
450-
production = factor * (1.0 - var.ft2) * var.Shat * nue;
451-
jacobian += factor * (-var.Shat * nue * var.d_ft2 + (1.0 - var.ft2) * (nue * var.d_Shat + var.Shat));
448+
production = factor * (1.0 - var.ft2) * var.Prod * nue;
449+
jacobian += factor * (-var.Prod * nue * var.d_ft2 + (1.0 - var.ft2) * (nue * var.d_Shat + var.Prod));
452450
}
453451

454452
static void ComputeDestruction(const su2double& nue, const CSAVariables& var, su2double& destruction,
@@ -481,7 +479,7 @@ struct Neg {
481479

482480
static void ComputeProduction(const su2double& nue, const CSAVariables& var, su2double& production,
483481
su2double& jacobian) {
484-
const su2double dP_dnu = var.intermittency * var.cb1 * (1.0 - var.ct3) * var.S;
482+
const su2double dP_dnu = var.intermittency * var.cb1 * (1.0 - var.ct3) * var.Prod;
485483
production = dP_dnu * nue;
486484
jacobian += dP_dnu;
487485
}

0 commit comments

Comments
 (0)