Skip to content

Commit 176fdc7

Browse files
committed
Move MUSCL reconstruction to CSolver
1 parent ab54718 commit 176fdc7

File tree

6 files changed

+35
-37
lines changed

6 files changed

+35
-37
lines changed

SU2_CFD/include/solvers/CScalarSolver.inl

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -223,14 +223,12 @@ void CScalarSolver<VariableType>::Upwind_Residual(CGeometry* geometry, CSolver**
223223
}
224224

225225
for (auto iVar = 0u; iVar < solver_container[FLOW_SOL]->GetnPrimVarGrad(); iVar++) {
226-
su2double Project_Grad_i = GeometryToolbox::DotProduct(nDim, Gradient_i[iVar], Vector_ij);
227-
su2double Project_Grad_j = GeometryToolbox::DotProduct(nDim, Gradient_j[iVar], Vector_ij);
226+
su2double V_ij = 0.0;
227+
if (umusclFlow)
228+
V_ij = V_j[iVar] - V_i[iVar];
228229

229-
if (umusclFlow) {
230-
const su2double V_ij = V_j[iVar] - V_i[iVar];
231-
Project_Grad_i = LimiterHelpers<>::umusclProjection(Project_Grad_i, V_ij, kappaFlow);
232-
Project_Grad_j = LimiterHelpers<>::umusclProjection(Project_Grad_j, V_ij, kappaFlow);
233-
}
230+
su2double Project_Grad_i = MUSCL_Reconstruction(Gradient_i[iVar], V_ij, Vector_ij, umusclFlow, kappaFlow);
231+
su2double Project_Grad_j = MUSCL_Reconstruction(Gradient_j[iVar], V_ij, Vector_ij, umusclFlow, kappaFlow);
234232

235233
if (limiterFlow) {
236234
Project_Grad_i *= Limiter_i[iVar];
@@ -256,14 +254,12 @@ void CScalarSolver<VariableType>::Upwind_Residual(CGeometry* geometry, CSolver**
256254
}
257255

258256
for (auto iVar = 0u; iVar < nVar; iVar++) {
259-
su2double Project_Grad_i = GeometryToolbox::DotProduct(nDim, Gradient_i[iVar], Vector_ij);
260-
su2double Project_Grad_j = GeometryToolbox::DotProduct(nDim, Gradient_j[iVar], Vector_ij);
257+
su2double U_ij = 0.0;
258+
if (umuscl)
259+
U_ij = Scalar_j[iVar] - Scalar_i[iVar];
261260

262-
if (umuscl) {
263-
const su2double U_ij = Scalar_j[iVar] - Scalar_i[iVar];
264-
Project_Grad_i = LimiterHelpers<>::umusclProjection(Project_Grad_i, U_ij, kappa);
265-
Project_Grad_j = LimiterHelpers<>::umusclProjection(Project_Grad_j, U_ij, kappa);
266-
}
261+
su2double Project_Grad_i = MUSCL_Reconstruction(Gradient_i[iVar], U_ij, Vector_ij, umuscl, kappa);
262+
su2double Project_Grad_j = MUSCL_Reconstruction(Gradient_j[iVar], U_ij, Vector_ij, umuscl, kappa);
267263

268264
if (limiter) {
269265
Project_Grad_i *= Limiter_i[iVar];

SU2_CFD/include/solvers/CSolver.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,17 @@ class CSolver {
578578
*/
579579
inline virtual void SetPrimitive_Limiter(CGeometry *geometry, const CConfig *config) { }
580580

581+
/*!
582+
* \brief Compute the projection of a variable for MUSCL reconstruction.
583+
* \param[in] grad - Gradient vector.
584+
* \param[in] delta_ij - Centered difference.
585+
* \param[in] vector_ij - Distance vector.
586+
* \param[in] umuscl - Whether to use a U-MUSCL (blended difference) reconstruction.
587+
* \param[in] kappa - Blending coefficient for U-MUSCL reconstruction.
588+
* \return - Projected variable.
589+
*/
590+
su2double MUSCL_Reconstruction(su2double* grad, su2double delta_ij, su2double* vector_ij, bool umuscl, su2double kappa);
591+
581592
/*!
582593
* \brief Set the old solution variables to the current solution value for Runge-Kutta iteration.
583594
* It is a virtual function, because for the DG-FEM solver a different version is needed.

SU2_CFD/src/solvers/CEulerSolver.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1881,21 +1881,15 @@ void CEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_contain
18811881
auto Gradient_j = nodes->GetGradient_Reconstruction(jPoint);
18821882

18831883
for (auto iVar = 0u; iVar < nPrimVarGrad; iVar++) {
1884-
su2double Project_Grad_i = GeometryToolbox::DotProduct(nDim, Gradient_i[iVar], Vector_ij);
1885-
su2double Project_Grad_j = GeometryToolbox::DotProduct(nDim, Gradient_j[iVar], Vector_ij);
1886-
18871884
su2double V_ij = 0.0;
18881885
if (umuscl || van_albada)
18891886
V_ij = V_j[iVar] - V_i[iVar];
18901887

1891-
if (umuscl) {
1892-
Project_Grad_i = LimiterHelpers<>::umusclProjection(Project_Grad_i, V_ij, kappa);
1893-
Project_Grad_j = LimiterHelpers<>::umusclProjection(Project_Grad_j, V_ij, kappa);
1894-
}
1888+
const su2double Project_Grad_i = MUSCL_Reconstruction(Gradient_i[iVar], V_ij, Vector_ij, umuscl, kappa);
1889+
const su2double Project_Grad_j = MUSCL_Reconstruction(Gradient_j[iVar], V_ij, Vector_ij, umuscl, kappa);
18951890

18961891
su2double lim_i = 1.0;
18971892
su2double lim_j = 1.0;
1898-
18991893
if (van_albada) {
19001894
lim_i = LimiterHelpers<>::vanAlbadaFunction(Project_Grad_i, V_ij, EPS);
19011895
lim_j = LimiterHelpers<>::vanAlbadaFunction(Project_Grad_j, V_ij, EPS);

SU2_CFD/src/solvers/CIncEulerSolver.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,21 +1279,15 @@ void CIncEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_cont
12791279
auto Gradient_j = nodes->GetGradient_Reconstruction(jPoint);
12801280

12811281
for (auto iVar = 0u; iVar < nPrimVarGrad; iVar++) {
1282-
su2double Project_Grad_i = GeometryToolbox::DotProduct(nDim, Gradient_i[iVar], Vector_ij);
1283-
su2double Project_Grad_j = GeometryToolbox::DotProduct(nDim, Gradient_j[iVar], Vector_ij);
1284-
12851282
su2double V_ij = 0.0;
12861283
if (umuscl || van_albada)
12871284
V_ij = V_j[iVar] - V_i[iVar];
12881285

1289-
if (umuscl) {
1290-
Project_Grad_i = LimiterHelpers<>::umusclProjection(Project_Grad_i, V_ij, kappa);
1291-
Project_Grad_j = LimiterHelpers<>::umusclProjection(Project_Grad_j, V_ij, kappa);
1292-
}
1286+
const su2double Project_Grad_i = MUSCL_Reconstruction(Gradient_i[iVar], V_ij, Vector_ij, umuscl, kappa);
1287+
const su2double Project_Grad_j = MUSCL_Reconstruction(Gradient_j[iVar], V_ij, Vector_ij, umuscl, kappa);
12931288

12941289
su2double lim_i = 1.0;
12951290
su2double lim_j = 1.0;
1296-
12971291
if (van_albada) {
12981292
lim_i = LimiterHelpers<>::vanAlbadaFunction(Project_Grad_i, V_ij, EPS);
12991293
lim_j = LimiterHelpers<>::vanAlbadaFunction(Project_Grad_j, V_ij, EPS);

SU2_CFD/src/solvers/CNEMOEulerSolver.cpp

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -542,17 +542,12 @@ void CNEMOEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_con
542542
su2double lim_j = 2.0;
543543

544544
for (auto iVar = 0ul; iVar < nPrimVarGrad; iVar++) {
545-
Project_Grad_i[iVar] = GeometryToolbox::DotProduct(nDim, Gradient_i[iVar], Vector_ij);
546-
Project_Grad_j[iVar] = GeometryToolbox::DotProduct(nDim, Gradient_j[iVar], Vector_ij);
547-
548545
su2double V_ij = 0.0;
549546
if (umuscl || van_albada)
550547
V_ij = V_j[iVar] - V_i[iVar];
551548

552-
if (umuscl) {
553-
Project_Grad_i[iVar] = LimiterHelpers<>::umusclProjection(Project_Grad_i[iVar], V_ij, kappa);
554-
Project_Grad_j[iVar] = LimiterHelpers<>::umusclProjection(Project_Grad_j[iVar], V_ij, kappa);
555-
}
549+
Project_Grad_i[iVar] = MUSCL_Reconstruction(Gradient_i[iVar], V_ij, Vector_ij, umuscl, kappa);
550+
Project_Grad_j[iVar] = MUSCL_Reconstruction(Gradient_j[iVar], V_ij, Vector_ij, umuscl, kappa);
556551

557552
if (limiter) {
558553
if (van_albada) {

SU2_CFD/src/solvers/CSolver.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2279,6 +2279,14 @@ void CSolver::SetSolution_Limiter(CGeometry *geometry, const CConfig *config) {
22792279
*geometry, *config, 0, nVar, umuscl, umusclKappa, solution, gradient, solMin, solMax, limiter);
22802280
}
22812281

2282+
su2double CSolver::MUSCL_Reconstruction(su2double* grad, su2double delta_ij, su2double* vector_ij, bool umuscl, su2double kappa) {
2283+
su2double project_grad = GeometryToolbox::DotProduct(nDim, grad, vector_ij);
2284+
if (umuscl) {
2285+
return LimiterHelpers<>::umusclProjection(project_grad, delta_ij, kappa);
2286+
}
2287+
return project_grad;
2288+
}
2289+
22822290
void CSolver::Gauss_Elimination(su2double** A, su2double* rhs, unsigned short nVar) {
22832291

22842292
short iVar, jVar, kVar;

0 commit comments

Comments
 (0)