Skip to content

Commit 60b91d7

Browse files
authored
Merge pull request #1428 from su2code/dev_nemo_muscl_fix
Set MUSCL Reconstruction for NEMO in Develop to use smallest limiter val for all primitives
2 parents e3fa7d9 + 2f69ee3 commit 60b91d7

5 files changed

Lines changed: 46 additions & 33 deletions

File tree

SU2_CFD/src/output/CNEMOCompOutput.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ CNEMOCompOutput::CNEMOCompOutput(CConfig *config, unsigned short nDim) : CFlowOu
9898

9999
/*--- Set the default convergence field --- */
100100

101-
if (convFields.empty() ) convFields.emplace_back("RMS_DENSITY");
101+
if (convFields.empty() ) convFields.emplace_back("RMS_DENSITY_0");
102102

103103
if (config->GetFixed_CL_Mode()) {
104104
bool found = false;

SU2_CFD/src/solvers/CNEMOEulerSolver.cpp

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -484,13 +484,14 @@ void CNEMOEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_con
484484
CNumerics* numerics = numerics_container[CONV_TERM];
485485

486486
/*--- Static arrays for MUSCL reconstructed variables ---*/
487-
su2double Primitive_i[MAXNVAR] = {0.0}, Primitive_j[MAXNVAR] = {0.0};
488-
su2double Conserved_i[MAXNVAR] = {0.0}, Conserved_j[MAXNVAR] = {0.0};
489-
su2double dPdU_i[MAXNVAR] = {0.0}, dPdU_j[MAXNVAR] = {0.0};
490-
su2double dTdU_i[MAXNVAR] = {0.0}, dTdU_j[MAXNVAR] = {0.0};
491-
su2double dTvedU_i[MAXNVAR] = {0.0}, dTvedU_j[MAXNVAR] = {0.0};
492-
su2double Eve_i[MAXNVAR] = {0.0}, Eve_j[MAXNVAR] = {0.0};
493-
su2double Cvve_i[MAXNVAR] = {0.0}, Cvve_j[MAXNVAR] = {0.0};
487+
su2double Primitive_i[MAXNVAR] = {0.0}, Primitive_j[MAXNVAR] = {0.0};
488+
su2double Conserved_i[MAXNVAR] = {0.0}, Conserved_j[MAXNVAR] = {0.0};
489+
su2double dPdU_i[MAXNVAR] = {0.0}, dPdU_j[MAXNVAR] = {0.0};
490+
su2double dTdU_i[MAXNVAR] = {0.0}, dTdU_j[MAXNVAR] = {0.0};
491+
su2double dTvedU_i[MAXNVAR] = {0.0}, dTvedU_j[MAXNVAR] = {0.0};
492+
su2double Eve_i[MAXNVAR] = {0.0}, Eve_j[MAXNVAR] = {0.0};
493+
su2double Cvve_i[MAXNVAR] = {0.0}, Cvve_j[MAXNVAR] = {0.0};
494+
su2double Project_Grad_i[MAXNVAR] = {0.0}, Project_Grad_j[MAXNVAR] = {0.0};
494495
su2double Gamma_i = 0.0, Gamma_j = 0.0;
495496

496497
/*--- Loop over edges and calculate convective fluxes ---*/
@@ -535,32 +536,45 @@ void CNEMOEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_con
535536
auto Gradient_i = nodes->GetGradient_Reconstruction(iPoint);
536537
auto Gradient_j = nodes->GetGradient_Reconstruction(jPoint);
537538

538-
for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
539+
/*--- Set and extract limiters ---*/
540+
su2double *Limiter_i = nullptr, *Limiter_j = nullptr;
539541

540-
su2double Project_Grad_i = 0.0;
541-
su2double Project_Grad_j = 0.0;
542+
if (limiter && !van_albada){
543+
Limiter_i = nodes->GetLimiter_Primitive(iPoint);
544+
Limiter_j = nodes->GetLimiter_Primitive(jPoint);
545+
}
542546

543-
for (iDim = 0; iDim < nDim; iDim++) {
544-
Project_Grad_i += Vector_ij[iDim]*Gradient_i[iVar][iDim];
545-
Project_Grad_j -= Vector_ij[iDim]*Gradient_j[iVar][iDim];
546-
}
547+
su2double lim_i = 2.0;
548+
su2double lim_j = 2.0;
547549

548-
su2double lim_i = 1.0;
549-
su2double lim_j = 1.0;
550+
for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
551+
Project_Grad_i[iVar] = 0.0; Project_Grad_j[iVar] = 0.0;
550552

551-
if (van_albada) {
552-
su2double V_ij = V_j[iVar] - V_i[iVar];
553-
lim_i = LimiterHelpers<>::vanAlbadaFunction(Project_Grad_i, V_ij, EPS);
554-
lim_j = LimiterHelpers<>::vanAlbadaFunction(-Project_Grad_j, V_ij, EPS);
553+
for (iDim = 0; iDim < nDim; iDim++) {
554+
Project_Grad_i[iVar] += Vector_ij[iDim]*Gradient_i[iVar][iDim];
555+
Project_Grad_j[iVar] -= Vector_ij[iDim]*Gradient_j[iVar][iDim];
555556
}
556-
else if (limiter) {
557-
lim_i = nodes->GetLimiter_Primitive(iPoint, iVar);
558-
lim_j = nodes->GetLimiter_Primitive(jPoint, iVar);
557+
558+
if (limiter) {
559+
if (van_albada) {
560+
su2double V_ij = V_j[iVar] - V_i[iVar];
561+
su2double va_lim_i = LimiterHelpers<>::vanAlbadaFunction(Project_Grad_i[iVar], V_ij, EPS);
562+
su2double va_lim_j = LimiterHelpers<>::vanAlbadaFunction(-Project_Grad_j[iVar], V_ij, EPS);
563+
lim_i = min(lim_i, va_lim_i);
564+
lim_j = min(lim_j, va_lim_j);
565+
} else {
566+
lim_i = min(lim_i, Limiter_i[iVar]);
567+
lim_j = min(lim_j, Limiter_j[iVar]);
568+
}
569+
} else {
570+
lim_i = lim_j = 1.0;
559571
}
560-
su2double lim_ij = min(lim_i, lim_j);
572+
}
573+
su2double lim_ij = min(lim_i, lim_j);
561574

562-
Primitive_i[iVar] = V_i[iVar] + lim_ij*Project_Grad_i;
563-
Primitive_j[iVar] = V_j[iVar] + lim_ij*Project_Grad_j;
575+
for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
576+
Primitive_i[iVar] = V_i[iVar] + lim_ij*Project_Grad_i[iVar];
577+
Primitive_j[iVar] = V_j[iVar] + lim_ij*Project_Grad_j[iVar];
564578
}
565579

566580
/*--- Check for non-physical solutions after reconstruction. If found, use the

TestCases/nonequilibrium/axi_visccone/axi_visccone.cfg

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ VENKAT_LIMITER_COEFF= 0.05
116116
%
117117
% Time discretization (RUNGE-KUTTA_EXPLICIT, EULER_IMPLICIT, EULER_EXPLICIT)
118118
TIME_DISCRE_FLOW= EULER_IMPLICIT
119-
120119
% --------------------------- CONVERGENCE PARAMETERS --------------------------%
121120
%
122121
% Min value of the residual (log10 of the residual)
@@ -158,4 +157,4 @@ OUTPUT_WRT_FREQ= 100
158157
% SURFACE_TECPLOT_BINARY, CSV, SURFACE_CSV, PARAVIEW, PARAVIEW_BINARY, SURFACE_PARAVIEW,
159158
% SURFACE_PARAVIEW_BINARY, MESH, RESTART_BINARY, RESTART_ASCII, CGNS, STL)
160159
% default : (RESTART, PARAVIEW, SURFACE_PARAVIEW)
161-
OUTPUT_FILES= (RESTART_ASCII, PARAVIEW_ASCII)
160+
OUTPUT_FILES= (RESTART_ASCII, PARAVIEW_ASCII)

TestCases/parallel_regression.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def main():
7171
invwedge.cfg_dir = "nonequilibrium/invwedge"
7272
invwedge.cfg_file = "invwedge.cfg"
7373
invwedge.test_iter = 10
74-
invwedge.test_vals = [-0.998812, -1.524371, -18.301794, -18.629156, -18.575201, 2.318954, 2.011581, 5.366905, 0.919345]
74+
invwedge.test_vals = [-1.042843, -1.567606, -18.300689, -18.628064, -18.574092, 2.275192, 1.879772, 5.319420, 0.873699]
7575
invwedge.su2_exec = "mpirun -n 2 SU2_CFD"
7676
invwedge.timeout = 1600
7777
invwedge.new_output = True
@@ -83,7 +83,7 @@ def main():
8383
visc_cone.cfg_dir = "nonequilibrium/axi_visccone"
8484
visc_cone.cfg_file = "axi_visccone.cfg"
8585
visc_cone.test_iter = 10
86-
visc_cone.test_vals = [-5.205860, -5.729753, -20.569311, -20.633846, -20.547397, -1.925197, -2.271253, 1.252586, -3.192292]
86+
visc_cone.test_vals = [-5.222001, -5.746254, -20.569422, -20.633784, -20.547640, -1.928394, -2.246909, 1.255970, -3.208248]
8787
visc_cone.su2_exec = "mpirun -n 2 SU2_CFD"
8888
visc_cone.timeout = 1600
8989
visc_cone.new_output = True

TestCases/serial_regression.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def main():
6969
invwedge.cfg_dir = "nonequilibrium/invwedge"
7070
invwedge.cfg_file = "invwedge.cfg"
7171
invwedge.test_iter = 10
72-
invwedge.test_vals = [-1.013753, -1.538402, -18.301793, -18.629176, -18.575221, 2.303329, 2.004449, 5.351111, 0.904297]
72+
invwedge.test_vals = [-1.046323, -1.571086, -18.300667, -18.628064, -18.574092, 2.271777, 1.875687, 5.315769, 0.870008]
7373
invwedge.su2_exec = "SU2_CFD"
7474
invwedge.timeout = 1600
7575
invwedge.new_output = True
@@ -81,7 +81,7 @@ def main():
8181
visc_cone.cfg_dir = "nonequilibrium/axi_visccone"
8282
visc_cone.cfg_file = "axi_visccone.cfg"
8383
visc_cone.test_iter = 10
84-
visc_cone.test_vals = [-5.201033, -5.724805, -20.545008, -20.618742, -20.502301, -1.918879, -2.261076, 1.257763, -3.190647]
84+
visc_cone.test_vals = [-5.215288, -5.739428, -20.545050, -20.618702, -20.502532, -1.917680, -2.239596, 1.262771, -3.205521]
8585
visc_cone.su2_exec = "SU2_CFD"
8686
visc_cone.timeout = 1600
8787
visc_cone.new_output = True

0 commit comments

Comments
 (0)