Skip to content

Commit 8c521a6

Browse files
committed
Move MUSCL ramp into MUSCL reconstruction and updated numerics simd + added ulong array config options and updated muscl ramp coeffs
1 parent cdc2392 commit 8c521a6

File tree

10 files changed

+44
-32
lines changed

10 files changed

+44
-32
lines changed

Common/include/CConfig.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,7 +1117,7 @@ class CConfig {
11171117
su2double rampMUSCLValue; /*!< \brief Current value of the MUSCL ramp */
11181118
su2double RampMUSCLPower; /*!< \brief Exponent by which to raise the MUSCL ramp to the power of */
11191119
MUSCL_RAMP_TYPE Kind_MUSCLRamp;
1120-
unsigned long *rampMUSCLCoeff; /*!< \brief ramp MUSCL value coefficients for the COption class. */
1120+
unsigned long rampMUSCLCoeff[3]; /*!< \brief ramp MUSCL value coefficients for the COption class. */
11211121

11221122
ENUM_STREAMWISE_PERIODIC Kind_Streamwise_Periodic; /*!< \brief Kind of Streamwise periodic flow (pressure drop or massflow) */
11231123
bool Streamwise_Periodic_Temperature; /*!< \brief Use real periodicity for Energy equation or otherwise outlet source term. */
@@ -1349,6 +1349,8 @@ class CConfig {
13491349

13501350
void addUShortArrayOption(const string& name, int size, bool allow_fewer, unsigned short* option_field);
13511351

1352+
void addULongArrayOption(const string& name, int size, bool allow_fewer, unsigned long* option_field);
1353+
13521354
void addDoubleListOption(const string& name, unsigned short & size, su2double * & option_field);
13531355

13541356
void addShortListOption(const string& name, unsigned short & size, short * & option_field);
@@ -5230,7 +5232,7 @@ class CConfig {
52305232
* \brief Get MUSCL ramp kind.
52315233
* \return Ramp MUSCL kind
52325234
*/
5233-
MUSCL_RAMP_TYPE GetKind_MUSCLRamp(void) const { return Kind_MUSCLRamp; }
5235+
MUSCL_RAMP_TYPE GetKindMUSCLRamp(void) const { return Kind_MUSCLRamp; }
52345236

52355237
/*!
52365238
* \brief Generic interface for setting monitor outlet values for the ramp.

Common/src/CConfig.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,13 @@ void CConfig::addULongListOption(const string& name, unsigned short & size, unsi
409409
option_map.insert(pair<string, COptionBase *>(name, val));
410410
}
411411

412+
void CConfig::addULongArrayOption(const string& name, const int size, const bool allow_fewer, unsigned long* option_field) {
413+
assert(option_map.find(name) == option_map.end());
414+
all_options.insert(pair<string, bool>(name, true));
415+
COptionBase* val = new COptionArray<unsigned long>(name, size, allow_fewer, option_field);
416+
option_map.insert(pair<string, COptionBase *>(name, val));
417+
}
418+
412419
void CConfig::addStringListOption(const string& name, unsigned short & num_marker, string* & option_field) {
413420
assert(option_map.find(name) == option_map.end());
414421
all_options.insert(pair<string, bool>(name, true));
@@ -1990,10 +1997,8 @@ void CConfig::SetConfig_Options() {
19901997
addBoolOption("RAMP_MUSCL", RampMUSCL, false);
19911998
/*! brief RAMP_OUTLET_COEFF \n DESCRIPTION: the 1st coeff is the ramp start iteration,
19921999
* the 2nd coeff is the iteration update frequenct, 3rd coeff is the total number of iterations */
1993-
unsigned short nMUSCLCoeffs = 3;
1994-
rampMUSCLCoeff = new unsigned long [nMUSCLCoeffs];
19952000
rampMUSCLCoeff[0] = 0.0; rampMUSCLCoeff[1] = 1.0; rampMUSCLCoeff[2] = 500.0;
1996-
addULongListOption("RAMP_MUSCL_COEFF", nMUSCLCoeffs, rampMUSCLCoeff);
2001+
addULongArrayOption("RAMP_MUSCL_COEFF", 3, false, rampMUSCLCoeff);
19972002
/*!\brief RAMP_MUSCL_POWER \n DESRCIPTION: Exponent of the MUSCL ramp formulation */
19982003
addDoubleOption("RAMP_MUSCL_POWER", RampMUSCLPower, 1.0);
19992004
/*!\brief KIND_MUSCL_RAMP \n DESCRIPTION: The kind of MUSCL Ramp to be applied */

SU2_CFD/include/numerics_simd/flow/convection/common.hpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ FORCEINLINE Double musclReconstruction(const GradType& grad,
7373
const Double delta,
7474
size_t iVar,
7575
Double kappa,
76-
Double relax) {
76+
Double relax,
77+
Double ramp_val) {
7778
const Double proj = dot(grad[iVar], vector_ij);
7879
return relax * umusclProjection(proj, delta, kappa);
7980
}
@@ -88,7 +89,8 @@ FORCEINLINE void musclUnlimited(Int iPoint,
8889
const Gradient_t& gradient,
8990
CPair<VarType>& V,
9091
Double kappa,
91-
Double relax) {
92+
Double relax,
93+
Double ramp_val) {
9294
constexpr auto nVarGrad = nVarGrad_ > 0 ? nVarGrad_ : VarType::nVar;
9395

9496
auto grad_i = gatherVariables<nVarGrad,nDim>(iPoint, gradient);
@@ -99,8 +101,8 @@ FORCEINLINE void musclUnlimited(Int iPoint,
99101
const Double delta_ij = V.j.all(iVar) - V.i.all(iVar);
100102

101103
/*--- U-MUSCL reconstructed variables ---*/
102-
const Double proj_i = musclReconstruction(grad_i, vector_ij, delta_ij, iVar, kappa, relax);
103-
const Double proj_j = musclReconstruction(grad_j, vector_ij, delta_ij, iVar, kappa, relax);
104+
const Double proj_i = musclReconstruction(grad_i, vector_ij, delta_ij, iVar, kappa, relax, ramp_val);
105+
const Double proj_j = musclReconstruction(grad_j, vector_ij, delta_ij, iVar, kappa, relax, ramp_val);
104106

105107
/*--- Apply reconstruction: V_L = V_i + 0.5 * dV_ij^kap ---*/
106108
V.i.all(iVar) += 0.5 * proj_i;
@@ -119,7 +121,8 @@ FORCEINLINE void musclPointLimited(Int iPoint,
119121
const Gradient_t& gradient,
120122
CPair<VarType>& V,
121123
Double kappa,
122-
Double relax) {
124+
Double relax,
125+
Double ramp_val) {
123126
constexpr auto nVarGrad = nVarGrad_ > 0 ? nVarGrad_ : VarType::nVar;
124127

125128
auto lim_i = gatherVariables<nVarGrad>(iPoint, limiter);
@@ -133,8 +136,8 @@ FORCEINLINE void musclPointLimited(Int iPoint,
133136
const Double delta_ij = V.j.all(iVar) - V.i.all(iVar);
134137

135138
/*--- U-MUSCL reconstructed variables ---*/
136-
const Double proj_i = musclReconstruction(grad_i, vector_ij, delta_ij, iVar, kappa, relax);
137-
const Double proj_j = musclReconstruction(grad_j, vector_ij, delta_ij, iVar, kappa, relax);
139+
const Double proj_i = musclReconstruction(grad_i, vector_ij, delta_ij, iVar, kappa, relax, ramp_val);
140+
const Double proj_j = musclReconstruction(grad_j, vector_ij, delta_ij, iVar, kappa, relax, ramp_val);
138141

139142
/*--- Apply reconstruction: V_L = V_i + 0.5 * lim * dV_ij^kap ---*/
140143
V.i.all(iVar) += 0.5 * lim_i(iVar) * proj_i;
@@ -152,7 +155,8 @@ FORCEINLINE void musclEdgeLimited(Int iPoint,
152155
const Gradient_t& gradient,
153156
CPair<VarType>& V,
154157
Double kappa,
155-
Double relax) {
158+
Double relax,
159+
Double ramp_val) {
156160
constexpr auto nVarGrad = nVarGrad_ > 0 ? nVarGrad_ : VarType::nVar;
157161

158162
auto grad_i = gatherVariables<nVarGrad,nDim>(iPoint, gradient);
@@ -164,8 +168,8 @@ FORCEINLINE void musclEdgeLimited(Int iPoint,
164168
const Double delta_ij_2 = pow(delta_ij, 2) + 1e-6;
165169

166170
/*--- U-MUSCL reconstructed variables ---*/
167-
const Double proj_i = musclReconstruction(grad_i, vector_ij, delta_ij, iVar, kappa, relax);
168-
const Double proj_j = musclReconstruction(grad_j, vector_ij, delta_ij, iVar, kappa, relax);
171+
const Double proj_i = musclReconstruction(grad_i, vector_ij, delta_ij, iVar, kappa, relax, ramp_val);
172+
const Double proj_j = musclReconstruction(grad_j, vector_ij, delta_ij, iVar, kappa, relax, ramp_val);
169173

170174
/// TODO: Customize the limiter function.
171175
const Double lim_i = (delta_ij_2 + proj_i*delta_ij) / (pow(proj_i,2) + delta_ij_2);
@@ -202,7 +206,8 @@ FORCEINLINE CPair<ReconVarType> reconstructPrimitives(Int iEdge, Int iPoint, Int
202206
LIMITER limiterType,
203207
const CPair<PrimVarType>& V1st,
204208
const VectorDbl<nDim>& vector_ij,
205-
const VariableType& solution) {
209+
const VariableType& solution,
210+
const su2double& ramp_val) {
206211
static_assert(ReconVarType::nVar <= PrimVarType::nVar);
207212

208213
const auto& gradients = solution.GetGradient_Reconstruction();
@@ -220,13 +225,13 @@ FORCEINLINE CPair<ReconVarType> reconstructPrimitives(Int iEdge, Int iPoint, Int
220225
constexpr auto nVarGrad = ReconVarType::nVar - 2;
221226
switch (limiterType) {
222227
case LIMITER::NONE:
223-
musclUnlimited<nVarGrad>(iPoint, jPoint, vector_ij, gradients, V, kappa, relax);
228+
musclUnlimited<nVarGrad>(iPoint, jPoint, vector_ij, gradients, V, kappa, relax, ramp_val);
224229
break;
225230
case LIMITER::VAN_ALBADA_EDGE:
226-
musclEdgeLimited<nVarGrad>(iPoint, jPoint, vector_ij, gradients, V, kappa, relax);
231+
musclEdgeLimited<nVarGrad>(iPoint, jPoint, vector_ij, gradients, V, kappa, relax, ramp_val);
227232
break;
228233
default:
229-
musclPointLimited<nVarGrad>(iPoint, jPoint, vector_ij, limiters, gradients, V, kappa, relax);
234+
musclPointLimited<nVarGrad>(iPoint, jPoint, vector_ij, limiters, gradients, V, kappa, relax, ramp_val);
230235
break;
231236
}
232237
V.i.density() = V.i.pressure() / (gasConst * V.i.temperature());

SU2_CFD/include/numerics_simd/flow/convection/roe.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ class CRoeBase : public Base {
123123

124124
/*--- Recompute density and enthalpy instead of reconstructing. ---*/
125125
auto V = reconstructPrimitives<CCompressiblePrimitives<nDim,nPrimVarGrad> >(
126-
iEdge, iPoint, jPoint, gamma, gasConst, muscl, umusclKappa, nkRelax, typeLimiter, V1st, vector_ij, solution);
126+
iEdge, iPoint, jPoint, gamma, gasConst, muscl, umusclKappa, nkRelax, typeLimiter, V1st, vector_ij, solution, config.GetMUSCLRampValue());
127127

128128
/*--- Compute conservative variables. ---*/
129129

SU2_CFD/include/solvers/CScalarSolver.inl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,8 @@ void CScalarSolver<VariableType>::Upwind_Residual(CGeometry* geometry, CSolver**
222222
for (auto iVar = 0u; iVar < solver_container[FLOW_SOL]->GetnPrimVarGrad(); iVar++) {
223223
const su2double V_ij = V_j[iVar] - V_i[iVar];
224224

225-
su2double Project_Grad_i = config->GetMUSCLRampValue() * MUSCL_Reconstruction(Gradient_i[iVar], Vector_ij, V_ij, kappaFlow);
226-
su2double Project_Grad_j = config->GetMUSCLRampValue() * MUSCL_Reconstruction(Gradient_j[iVar], Vector_ij, V_ij, kappaFlow);
225+
su2double Project_Grad_i = MUSCL_Reconstruction(Gradient_i[iVar], Vector_ij, V_ij, kappaFlow, config->GetMUSCLRampValue());
226+
su2double Project_Grad_j = MUSCL_Reconstruction(Gradient_j[iVar], Vector_ij, V_ij, kappaFlow, config->GetMUSCLRampValue());
227227

228228
if (limiterFlow) {
229229
Project_Grad_i *= Limiter_i[iVar];
@@ -251,8 +251,8 @@ void CScalarSolver<VariableType>::Upwind_Residual(CGeometry* geometry, CSolver**
251251
for (auto iVar = 0u; iVar < nVar; iVar++) {
252252
const su2double U_ij = Scalar_j[iVar] - Scalar_i[iVar];
253253

254-
su2double Project_Grad_i = config->GetMUSCLRampValue() * MUSCL_Reconstruction(Gradient_i[iVar], Vector_ij, U_ij, kappa);
255-
su2double Project_Grad_j = config->GetMUSCLRampValue() * MUSCL_Reconstruction(Gradient_j[iVar], Vector_ij, U_ij, kappa);
254+
su2double Project_Grad_i = MUSCL_Reconstruction(Gradient_i[iVar], Vector_ij, U_ij, kappa, config->GetMUSCLRampValue());
255+
su2double Project_Grad_j = MUSCL_Reconstruction(Gradient_j[iVar], Vector_ij, U_ij, kappa, config->GetMUSCLRampValue());
256256

257257
if (limiter) {
258258
Project_Grad_i *= Limiter_i[iVar];

SU2_CFD/include/solvers/CSolver.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ class CSolver {
590590
* \param[in] ramp_val - Value of the ramp
591591
* \return - Projected variable.
592592
*/
593-
inline su2double MUSCL_Reconstruction(const su2double* grad, const su2double* vector_ij, su2double delta_ij, su2double kappa) {
593+
inline su2double MUSCL_Reconstruction(const su2double* grad, const su2double* vector_ij, su2double delta_ij, su2double kappa, su2double ramp_val) {
594594
su2double project_grad = GeometryToolbox::DotProduct(nDim, grad, vector_ij);
595595
return LimiterHelpers<>::umusclProjection(project_grad, delta_ij, kappa);
596596
}

SU2_CFD/src/iteration/CFluidIteration.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ void CFluidIteration::UpdateRamp(CGeometry**** geometry_container, CConfig** con
343343
if (iter < startIter) return;
344344
if ((iter == startIter) && (rank == MASTER_NODE)) cout << "Beginning to ramp MUSCL scheme..." << endl;
345345
if ((iter % updateFreq == 0 && iter < finalIter) || (iter == finalIter)) {
346-
switch (config->GetKind_MUSCLRamp()) {
346+
switch (config->GetKindMUSCLRamp()) {
347347
case MUSCL_RAMP_TYPE::ITERATION:
348348
config->SetMUSCLRampValue(std::pow(std::min<double>(1.0, iterFrac), power));
349349
break;

SU2_CFD/src/solvers/CEulerSolver.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1881,8 +1881,8 @@ void CEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_contain
18811881
for (auto iVar = 0u; iVar < nPrimVarGrad; iVar++) {
18821882
const su2double V_ij = V_j[iVar] - V_i[iVar];
18831883

1884-
const su2double Project_Grad_i = config->GetMUSCLRampValue() * nkRelax * MUSCL_Reconstruction(Gradient_i[iVar], Vector_ij, V_ij, kappa);
1885-
const su2double Project_Grad_j = config->GetMUSCLRampValue() * nkRelax * MUSCL_Reconstruction(Gradient_j[iVar], Vector_ij, V_ij, kappa);
1884+
const su2double Project_Grad_i = nkRelax * MUSCL_Reconstruction(Gradient_i[iVar], Vector_ij, V_ij, kappa, config->GetMUSCLRampValue());
1885+
const su2double Project_Grad_j = nkRelax * MUSCL_Reconstruction(Gradient_j[iVar], Vector_ij, V_ij, kappa, config->GetMUSCLRampValue());
18861886

18871887
su2double lim_i = 1.0;
18881888
su2double lim_j = 1.0;

SU2_CFD/src/solvers/CIncEulerSolver.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,8 +1279,8 @@ void CIncEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_cont
12791279
for (auto iVar = 0u; iVar < nPrimVarGrad; iVar++) {
12801280
const su2double V_ij = V_j[iVar] - V_i[iVar];
12811281

1282-
const su2double Project_Grad_i = config->GetMUSCLRampValue() * nkRelax * MUSCL_Reconstruction(Gradient_i[iVar], Vector_ij, V_ij, kappa);
1283-
const su2double Project_Grad_j = config->GetMUSCLRampValue() * nkRelax * MUSCL_Reconstruction(Gradient_j[iVar], Vector_ij, V_ij, kappa);
1282+
const su2double Project_Grad_i = nkRelax * MUSCL_Reconstruction(Gradient_i[iVar], Vector_ij, V_ij, kappa, config->GetMUSCLRampValue());
1283+
const su2double Project_Grad_j = nkRelax * MUSCL_Reconstruction(Gradient_j[iVar], Vector_ij, V_ij, kappa, config->GetMUSCLRampValue());
12841284

12851285
su2double lim_i = 1.0;
12861286
su2double lim_j = 1.0;

SU2_CFD/src/solvers/CNEMOEulerSolver.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -542,8 +542,8 @@ void CNEMOEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_con
542542
for (auto iVar = 0ul; iVar < nPrimVarGrad; iVar++) {
543543
const su2double V_ij = V_j[iVar] - V_i[iVar];
544544

545-
Project_Grad_i[iVar] = config->GetMUSCLRampValue() * nkRelax * MUSCL_Reconstruction(Gradient_i[iVar], Vector_ij, V_ij, kappa);
546-
Project_Grad_j[iVar] = config->GetMUSCLRampValue() * nkRelax * MUSCL_Reconstruction(Gradient_j[iVar], Vector_ij, V_ij, kappa);
545+
Project_Grad_i[iVar] = nkRelax * MUSCL_Reconstruction(Gradient_i[iVar], Vector_ij, V_ij, kappa, config->GetMUSCLRampValue());
546+
Project_Grad_j[iVar] = nkRelax * MUSCL_Reconstruction(Gradient_j[iVar], Vector_ij, V_ij, kappa, config->GetMUSCLRampValue());
547547

548548
if (limiter) {
549549
if (van_albada) {

0 commit comments

Comments
 (0)