Skip to content

Commit b490f3d

Browse files
authored
Merge pull request #1195 from su2code/feature_axi_turbsst
k-omega SST 2D axisymmetric source terms
2 parents 2bcee06 + a4c376a commit b490f3d

7 files changed

Lines changed: 315 additions & 7 deletions

File tree

SU2_CFD/include/numerics/turbulent/turb_sources.hpp

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,8 +305,10 @@ class CSourcePieceWise_TurbSST final : public CNumerics {
305305
alfa_2,
306306
beta_1,
307307
beta_2,
308-
sigma_omega_1,
309-
sigma_omega_2,
308+
sigma_k_1,
309+
sigma_k_2,
310+
sigma_w_1,
311+
sigma_w_2,
310312
beta_star,
311313
a1;
312314

@@ -320,12 +322,49 @@ class CSourcePieceWise_TurbSST final : public CNumerics {
320322

321323
bool incompressible;
322324
bool sustaining_terms;
325+
bool axisymmetric;
323326

324327
/*!
325328
* \brief A virtual member. Get strain magnitude based on perturbed reynolds stress matrix
326329
* \param[in] turb_ke: turbulent kinetic energy of the node
327330
*/
328331
void SetPerturbedStrainMag(su2double turb_ke);
332+
333+
/*!
334+
* \brief Add contribution due to axisymmetric formulation to 2D residual
335+
*/
336+
inline void ResidualAxisymmetric(su2double alfa_blended, su2double zeta){
337+
338+
if (Coord_i[1] < EPS) return;
339+
340+
su2double yinv, rhov, k, w;
341+
su2double sigma_k_i, sigma_w_i;
342+
su2double pk_axi, pw_axi, cdk_axi, cdw_axi;
343+
344+
AD::SetPreaccIn(Coord_i[1]);
345+
346+
yinv = 1.0/Coord_i[1];
347+
rhov = Density_i*V_i[2];
348+
k = TurbVar_i[0];
349+
w = TurbVar_i[1];
350+
351+
/*--- Compute blended constants ---*/
352+
sigma_k_i = F1_i*sigma_k_1+(1.0-F1_i)*sigma_k_2;
353+
sigma_w_i = F1_i*sigma_w_1+(1.0-F1_i)*sigma_w_2;
354+
355+
/*--- Production ---*/
356+
pk_axi = max(0.0,2.0/3.0*rhov*k*(2.0/zeta*(yinv*V_i[2]-PrimVar_Grad_i[2][1]-PrimVar_Grad_i[1][0])-1.0));
357+
pw_axi = alfa_blended*zeta/k*pk_axi;
358+
359+
/*--- Convection-Diffusion ---*/
360+
cdk_axi = rhov*k-(Laminar_Viscosity_i+sigma_k_i*Eddy_Viscosity_i)*TurbVar_Grad_i[0][1];
361+
cdw_axi = rhov*w-(Laminar_Viscosity_i+sigma_w_i*Eddy_Viscosity_i)*TurbVar_Grad_i[1][1];
362+
363+
/*--- Add terms to the residuals ---*/
364+
Residual[0] += yinv*Volume*(pk_axi-cdk_axi);
365+
Residual[1] += yinv*Volume*(pw_axi-cdw_axi);
366+
367+
}
329368

330369
public:
331370
/*!

SU2_CFD/src/numerics/turbulent/turb_sources.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -760,16 +760,19 @@ CSourcePieceWise_TurbSST::CSourcePieceWise_TurbSST(unsigned short val_nDim,
760760

761761
incompressible = (config->GetKind_Regime() == INCOMPRESSIBLE);
762762
sustaining_terms = (config->GetKind_Turb_Model() == SST_SUST);
763+
axisymmetric = config->GetAxisymmetric();
763764

764765
/*--- Closure constants ---*/
765-
beta_star = constants[6];
766-
sigma_omega_1 = constants[2];
767-
sigma_omega_2 = constants[3];
766+
sigma_k_1 = constants[0];
767+
sigma_k_2 = constants[1];
768+
sigma_w_1 = constants[2];
769+
sigma_w_2 = constants[3];
768770
beta_1 = constants[4];
769771
beta_2 = constants[5];
772+
beta_star = constants[6];
773+
a1 = constants[7];
770774
alfa_1 = constants[8];
771775
alfa_2 = constants[9];
772-
a1 = constants[7];
773776

774777
/*--- Set the ambient values of k and omega to the free stream values. ---*/
775778
kAmb = val_kine_Inf;
@@ -845,7 +848,6 @@ CNumerics::ResidualType<> CSourcePieceWise_TurbSST::ComputeResidual(const CConfi
845848
pk = Eddy_Viscosity_i*StrainMag_i*StrainMag_i - 2.0/3.0*Density_i*TurbVar_i[0]*diverg;
846849
}
847850

848-
849851
pk = min(pk,20.0*beta_star*Density_i*TurbVar_i[1]*TurbVar_i[0]);
850852
pk = max(pk,0.0);
851853

@@ -889,6 +891,10 @@ CNumerics::ResidualType<> CSourcePieceWise_TurbSST::ComputeResidual(const CConfi
889891
/*--- Cross diffusion ---*/
890892

891893
Residual[1] += (1.0 - F1_i)*CDkw_i*Volume;
894+
895+
/*--- Contribution due to 2D axisymmetric formulation ---*/
896+
897+
if (axisymmetric) ResidualAxisymmetric(alfa_blended,zeta);
892898

893899
/*--- Implicit part ---*/
894900

SU2_CFD/src/solvers/CTurbSSTSolver.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@ void CTurbSSTSolver::Postprocessing(CGeometry *geometry, CSolver **solver_contai
322322

323323
void CTurbSSTSolver::Source_Residual(CGeometry *geometry, CSolver **solver_container,
324324
CNumerics **numerics_container, CConfig *config, unsigned short iMesh) {
325+
326+
bool axisymmetric = config->GetAxisymmetric();
325327

326328
CVariable* flowNodes = solver_container[FLOW_SOL]->GetNodes();
327329

@@ -372,6 +374,11 @@ void CTurbSSTSolver::Source_Residual(CGeometry *geometry, CSolver **solver_conta
372374

373375
numerics->SetCrossDiff(nodes->GetCrossDiff(iPoint),0.0);
374376

377+
if (axisymmetric){
378+
/*--- Set y coordinate ---*/
379+
numerics->SetCoord(geometry->nodes->GetCoord(iPoint), geometry->nodes->GetCoord(iPoint));
380+
}
381+
375382
/*--- Compute the source term ---*/
376383

377384
auto residual = numerics->ComputeResidual(config);
Lines changed: 214 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,214 @@
1+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2+
% %
3+
% SU2 configuration file %
4+
% Case description: Axisymmetric supersonic converging-diverging air nozzle %
5+
% Author: Florian Dittmann %
6+
% Date: 2021.12.02 %
7+
% File Version 7.10 "Blackbird" %
8+
% %
9+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10+
11+
% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------%
12+
%
13+
% Physical governing equations (EULER, NAVIER_STOKES,
14+
% FEM_EULER, FEM_NAVIER_STOKES, FEM_RANS, FEM_LES,
15+
% WAVE_EQUATION, HEAT_EQUATION, FEM_ELASTICITY,
16+
% POISSON_EQUATION)
17+
SOLVER= RANS
18+
%
19+
% Specify turbulence model (NONE, SA, SA_NEG, SST, SA_E, SA_COMP, SA_E_COMP)
20+
KIND_TURB_MODEL= SST
21+
%
22+
% Mathematical problem (DIRECT, CONTINUOUS_ADJOINT, DISCRETE_ADJOINT)
23+
MATH_PROBLEM= DIRECT
24+
%
25+
% Restart solution (NO, YES)
26+
RESTART_SOL= YES
27+
%
28+
% System of measurements (SI, US)
29+
% International system of units (SI): ( meters, kilograms, Kelvins,
30+
% Newtons = kg m/s^2, Pascals = N/m^2,
31+
% Density = kg/m^3, Speed = m/s,
32+
% Equiv. Area = m^2 )
33+
% United States customary units (US): ( inches, slug, Rankines, lbf = slug ft/s^2,
34+
% psf = lbf/ft^2, Density = slug/ft^3,
35+
% Speed = ft/s, Equiv. Area = ft^2 )
36+
SYSTEM_MEASUREMENTS= SI
37+
%
38+
AXISYMMETRIC= YES
39+
%
40+
% -------------------- COMPRESSIBLE FREE-STREAM DEFINITION --------------------%
41+
%
42+
% Mach number (non-dimensional, based on the free-stream values)
43+
MACH_NUMBER= 1E-9
44+
%
45+
% Angle of attack (degrees, only for compressible flows)
46+
AOA= 0.0
47+
%
48+
% Side-slip angle (degrees, only for compressible flows)
49+
SIDESLIP_ANGLE= 0.0
50+
%
51+
% Init option to choose between Reynolds (default) or thermodynamics quantities
52+
% for initializing the solution (REYNOLDS, TD_CONDITIONS)
53+
INIT_OPTION= TD_CONDITIONS
54+
%
55+
% Free-stream option to choose between density and temperature (default) for
56+
% initializing the solution (TEMPERATURE_FS, DENSITY_FS)
57+
FREESTREAM_OPTION= TEMPERATURE_FS
58+
%
59+
% Free-stream pressure (101325.0 N/m^2, 2116.216 psf by default)
60+
FREESTREAM_PRESSURE= 1400000
61+
%
62+
% Free-stream temperature (288.15 K, 518.67 R by default)
63+
FREESTREAM_TEMPERATURE= 373.15
64+
%
65+
% Compressible flow non-dimensionalization (DIMENSIONAL, FREESTREAM_PRESS_EQ_ONE,
66+
% FREESTREAM_VEL_EQ_MACH, FREESTREAM_VEL_EQ_ONE)
67+
REF_DIMENSIONALIZATION= DIMENSIONAL
68+
69+
% ---- IDEAL GAS, POLYTROPIC, VAN DER WAALS AND PENG ROBINSON CONSTANTS -------%
70+
%
71+
% Fluid model (STANDARD_AIR, IDEAL_GAS, VW_GAS, PR_GAS,
72+
% CONSTANT_DENSITY, INC_IDEAL_GAS, INC_IDEAL_GAS_POLY)
73+
FLUID_MODEL= STANDARD_AIR
74+
75+
% --------------------------- VISCOSITY MODEL ---------------------------------%
76+
%
77+
% Viscosity model (SUTHERLAND, CONSTANT_VISCOSITY, POLYNOMIAL_VISCOSITY).
78+
VISCOSITY_MODEL= CONSTANT_VISCOSITY
79+
%
80+
% Molecular Viscosity that would be constant (1.716E-5 by default)
81+
MU_CONSTANT= 1.716E-5
82+
83+
% --------------------------- THERMAL CONDUCTIVITY MODEL ----------------------%
84+
%
85+
% Laminar Conductivity model (CONSTANT_CONDUCTIVITY, CONSTANT_PRANDTL,
86+
% POLYNOMIAL_CONDUCTIVITY).
87+
CONDUCTIVITY_MODEL= CONSTANT_PRANDTL
88+
%
89+
% Laminar Prandtl number (0.72 (air), only for CONSTANT_PRANDTL)
90+
PRANDTL_LAM= 0.72
91+
%
92+
% Turbulent Prandtl number (0.9 (air) by default)
93+
PRANDTL_TURB= 0.90
94+
95+
% -------------------- BOUNDARY CONDITION DEFINITION --------------------------%
96+
%
97+
% Navier-Stokes (no-slip), constant heat flux wall marker(s) (NONE = no marker)
98+
% Format: ( marker name, constant heat flux (J/m^2), ... )
99+
MARKER_HEATFLUX= ( WALL, 0.0 )
100+
%
101+
% Symmetry boundary marker(s) (NONE = no marker)
102+
MARKER_SYM= ( SYMMETRY )
103+
%
104+
% Riemann boundary marker(s) (NONE = no marker)
105+
% Format: (marker, data kind flag, list of data)
106+
MARKER_RIEMANN= ( INFLOW, TOTAL_CONDITIONS_PT, 1400000.0, 373.15, 1.0, 0.0, 0.0, OUTFLOW, STATIC_PRESSURE, 100000.0, 0.0, 0.0, 0.0, 0.0 )
107+
108+
% ------------- COMMON PARAMETERS DEFINING THE NUMERICAL METHOD ---------------%
109+
%
110+
% Numerical method for spatial gradients (GREEN_GAUSS, WEIGHTED_LEAST_SQUARES)
111+
NUM_METHOD_GRAD= GREEN_GAUSS
112+
%
113+
% CFL number (initial value for the adaptive CFL number)
114+
CFL_NUMBER= 1000.0
115+
%
116+
% Adaptive CFL number (NO, YES)
117+
CFL_ADAPT= NO
118+
%
119+
% Parameters of the adaptive CFL number (factor down, factor up, CFL min value,
120+
% CFL max value )
121+
CFL_ADAPT_PARAM= ( 0.1, 2.0, 10.0, 1000.0 )
122+
%
123+
% Maximum Delta Time in local time stepping simulations
124+
MAX_DELTA_TIME= 1E6
125+
126+
% ----------- SLOPE LIMITER AND DISSIPATION SENSOR DEFINITION -----------------%
127+
%
128+
% Monotonic Upwind Scheme for Conservation Laws (TVD) in the flow equations.
129+
% Required for 2nd order upwind schemes (NO, YES)
130+
MUSCL_FLOW= YES
131+
%
132+
% Slope limiter (NONE, VENKATAKRISHNAN, VENKATAKRISHNAN_WANG,
133+
% BARTH_JESPERSEN, VAN_ALBADA_EDGE)
134+
SLOPE_LIMITER_FLOW= NONE
135+
136+
% ------------------------ LINEAR SOLVER DEFINITION ---------------------------%
137+
%
138+
% Linear solver or smoother for implicit formulations (BCGSTAB, FGMRES, SMOOTHER_JACOBI,
139+
% SMOOTHER_ILU, SMOOTHER_LUSGS,
140+
% SMOOTHER_LINELET)
141+
LINEAR_SOLVER= FGMRES
142+
%
143+
% Preconditioner of the Krylov linear solver (ILU, LU_SGS, LINELET, JACOBI)
144+
LINEAR_SOLVER_PREC= ILU
145+
%
146+
% Linael solver ILU preconditioner fill-in level (0 by default)
147+
LINEAR_SOLVER_ILU_FILL_IN= 0
148+
%
149+
% Minimum error of the linear solver for implicit formulations
150+
LINEAR_SOLVER_ERROR= 0.01
151+
%
152+
% Max number of iterations of the linear solver for the implicit formulation
153+
LINEAR_SOLVER_ITER= 10
154+
155+
% -------------------------- MULTIGRID PARAMETERS -----------------------------%
156+
%
157+
% Multi-grid levels (0 = no multi-grid)
158+
MGLEVEL= 0
159+
160+
% -------------------- FLOW NUMERICAL METHOD DEFINITION -----------------------%
161+
%
162+
% Convective numerical method (JST, LAX-FRIEDRICH, CUSP, ROE, AUSM, AUSMPLUSUP, AUSMPLUSUP2, HLLC,
163+
% TURKEL_PREC, MSW, FDS)
164+
CONV_NUM_METHOD_FLOW= ROE
165+
%
166+
% Entropy fix coefficient (0.0 implies no entropy fixing, 1.0 implies scalar
167+
% artificial dissipation)
168+
ENTROPY_FIX_COEFF= 0.1
169+
%
170+
% Time discretization (RUNGE-KUTTA_EXPLICIT, EULER_IMPLICIT, EULER_EXPLICIT)
171+
TIME_DISCRE_FLOW= EULER_IMPLICIT
172+
%
173+
174+
% -------------------- TURBULENT NUMERICAL METHOD DEFINITION ------------------%
175+
%
176+
% Convective numerical method (SCALAR_UPWIND)
177+
CONV_NUM_METHOD_TURB= SCALAR_UPWIND
178+
%
179+
% Time discretization (EULER_IMPLICIT)
180+
TIME_DISCRE_TURB= EULER_IMPLICIT
181+
%
182+
% Reduction factor of the CFL coefficient in the turbulence problem
183+
CFL_REDUCTION_TURB= 1.0
184+
185+
% --------------------------- CONVERGENCE PARAMETERS --------------------------%
186+
%
187+
% Number of total iterations
188+
ITER= 1000
189+
%
190+
% Convergence criteria (CAUCHY, RESIDUAL)
191+
CONV_CRITERIA= RESIDUAL
192+
%
193+
% Min value of the residual (log10 of the residual)
194+
CONV_RESIDUAL_MINVAL= -12
195+
%
196+
% Start convergence criteria at iteration number
197+
CONV_STARTITER= 10
198+
199+
% ------------------------- INPUT/OUTPUT INFORMATION --------------------------%
200+
%
201+
% Mesh input file
202+
MESH_FILENAME= nozzle.su2
203+
%
204+
% Mesh input file format (SU2, CGNS)
205+
MESH_FORMAT= SU2
206+
%
207+
% Restart flow input file
208+
SOLUTION_FILENAME= solution_flow.dat
209+
%
210+
% Writing solution file frequency
211+
OUTPUT_WRT_FREQ= 1000
212+
%
213+
% Screen output
214+
SCREEN_OUTPUT= (INNER_ITER, RMS_DENSITY, RMS_ENERGY, RMS_TKE, RMS_DISSIPATION)

TestCases/hybrid_regression.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,18 @@ def main():
210210
propeller.test_vals = [-3.389576, -8.409529, 0.000048, 0.056329]
211211
test_list.append(propeller)
212212

213+
#######################################
214+
### Axisymmetric Compressible RANS ###
215+
#######################################
216+
217+
# Axisymmetric air nozzle (transonic)
218+
axi_rans_air_nozzle = TestCase('axi_rans_air_nozzle')
219+
axi_rans_air_nozzle.cfg_dir = "axisymmetric_rans/air_nozzle"
220+
axi_rans_air_nozzle.cfg_file = "air_nozzle.cfg"
221+
axi_rans_air_nozzle.test_iter = 10
222+
axi_rans_air_nozzle.test_vals = [-12.094937, -6.622043, -8.814412, -2.393288]
223+
test_list.append(axi_rans_air_nozzle)
224+
213225
#################################
214226
## Compressible RANS Restart ###
215227
#################################

TestCases/parallel_regression.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,21 @@ def main():
347347
propeller.tol = 0.00001
348348
test_list.append(propeller)
349349

350+
#######################################
351+
### Axisymmetric Compressible RANS ###
352+
#######################################
353+
354+
# Axisymmetric air nozzle (transonic)
355+
axi_rans_air_nozzle = TestCase('axi_rans_air_nozzle')
356+
axi_rans_air_nozzle.cfg_dir = "axisymmetric_rans/air_nozzle"
357+
axi_rans_air_nozzle.cfg_file = "air_nozzle.cfg"
358+
axi_rans_air_nozzle.test_iter = 10
359+
axi_rans_air_nozzle.test_vals = [ -12.096569, -6.625843, -8.807541, -2.393279]
360+
axi_rans_air_nozzle.su2_exec = "mpirun -n 2 SU2_CFD"
361+
axi_rans_air_nozzle.timeout = 1600
362+
axi_rans_air_nozzle.tol = 0.0001
363+
test_list.append(axi_rans_air_nozzle)
364+
350365
#################################
351366
## Compressible RANS Restart ###
352367
#################################

0 commit comments

Comments
 (0)