Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 59 additions & 44 deletions SU2_CFD/src/solver_direct_mean.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3293,7 +3293,7 @@ void CEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container
bool disc_adjoint = config->GetDiscrete_Adjoint();
bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
bool muscl = (config->GetMUSCL_Flow() || (cont_adjoint && config->GetKind_ConvNumScheme_AdjFlow() == ROE));
bool limiter = ((config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter()) && !(disc_adjoint && config->GetFrozen_Limiter_Disc()));
bool limiter = (config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter());
bool center = (config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED) || (cont_adjoint && config->GetKind_ConvNumScheme_AdjFlow() == SPACE_CENTERED);
bool center_jst = center && (config->GetKind_Centered_Flow() == JST);
bool engine = ((config->GetnMarker_EngineInflow() != 0) || (config->GetnMarker_EngineExhaust() != 0));
Expand Down Expand Up @@ -3682,8 +3682,7 @@ void CEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_contain
unsigned long ExtIter = config->GetExtIter();
bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
bool muscl = (config->GetMUSCL_Flow() && (iMesh == MESH_0));
bool disc_adjoint = config->GetDiscrete_Adjoint();
bool limiter = ((config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter()) && !(disc_adjoint && config->GetFrozen_Limiter_Disc()));
bool limiter = (config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter());
bool grid_movement = config->GetGrid_Movement();
bool roe_turkel = (config->GetKind_Upwind_Flow() == TURKEL);
bool ideal_gas = (config->GetKind_FluidModel() == STANDARD_AIR || config->GetKind_FluidModel() == IDEAL_GAS );
Expand Down Expand Up @@ -5819,9 +5818,20 @@ void CEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config) {
unsigned long iEdge, iPoint, jPoint;
unsigned short iVar, iDim;
su2double **Gradient_i, **Gradient_j, *Coord_i, *Coord_j,
*Primitive, *Primitive_i, *Primitive_j, *LocalMinPrimitive, *LocalMaxPrimitive,
*GlobalMinPrimitive, *GlobalMaxPrimitive,
*Primitive, *Primitive_i, *Primitive_j,
*LocalMinPrimitive = NULL, *LocalMaxPrimitive = NULL,
*GlobalMinPrimitive = NULL, *GlobalMaxPrimitive = NULL,
dave, LimK, eps2, eps1, dm, dp, du, y, limiter;

#ifdef CODI_REVERSE_TYPE
bool TapeActive = false;

if (config->GetDiscrete_Adjoint() && config->GetFrozen_Limiter_Disc()) {
/*--- If limiters are frozen do not record the computation ---*/
TapeActive = AD::globalTape.isActive();
AD::StopRecording();
}
#endif

dave = config->GetRefElemLength();
LimK = config->GetVenkat_LimiterCoeff();
Expand Down Expand Up @@ -5965,33 +5975,34 @@ void CEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config) {
if ((config->GetKind_SlopeLimit_Flow() == VENKATAKRISHNAN) ||
(config->GetKind_SlopeLimit_Flow() == VENKATAKRISHNAN_WANG)) {

/*--- Allocate memory for the max and min primitive value --*/

LocalMinPrimitive = new su2double [nPrimVarGrad]; GlobalMinPrimitive = new su2double [nPrimVarGrad];
LocalMaxPrimitive = new su2double [nPrimVarGrad]; GlobalMaxPrimitive = new su2double [nPrimVarGrad];

/*--- Compute the max value and min value of the solution ---*/

Primitive = node[0]->GetPrimitive();
for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
LocalMinPrimitive[iVar] = Primitive[iVar];
LocalMaxPrimitive[iVar] = Primitive[iVar];
}

for (iPoint = 0; iPoint < geometry->GetnPoint(); iPoint++) {
if (config->GetKind_SlopeLimit_Flow() == VENKATAKRISHNAN_WANG) {

/*--- Allocate memory for the max and min primitive value --*/

/*--- Get the primitive variables ---*/
LocalMinPrimitive = new su2double [nPrimVarGrad]; GlobalMinPrimitive = new su2double [nPrimVarGrad];
LocalMaxPrimitive = new su2double [nPrimVarGrad]; GlobalMaxPrimitive = new su2double [nPrimVarGrad];

Primitive = node[iPoint]->GetPrimitive();
/*--- Compute the max value and min value of the solution ---*/

Primitive = node[0]->GetPrimitive();
for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
LocalMinPrimitive[iVar] = min (LocalMinPrimitive[iVar], Primitive[iVar]);
LocalMaxPrimitive[iVar] = max (LocalMaxPrimitive[iVar], Primitive[iVar]);
LocalMinPrimitive[iVar] = Primitive[iVar];
LocalMaxPrimitive[iVar] = Primitive[iVar];
}

for (iPoint = 0; iPoint < geometry->GetnPoint(); iPoint++) {

/*--- Get the primitive variables ---*/

Primitive = node[iPoint]->GetPrimitive();

for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
LocalMinPrimitive[iVar] = min (LocalMinPrimitive[iVar], Primitive[iVar]);
LocalMaxPrimitive[iVar] = max (LocalMaxPrimitive[iVar], Primitive[iVar]);
}

}

}

if (config->GetKind_SlopeLimit_Flow() == VENKATAKRISHNAN_WANG) {
#ifdef HAVE_MPI
SU2_MPI::Allreduce(LocalMinPrimitive, GlobalMinPrimitive, nPrimVarGrad, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD);
SU2_MPI::Allreduce(LocalMaxPrimitive, GlobalMaxPrimitive, nPrimVarGrad, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD);
Expand All @@ -6011,16 +6022,22 @@ void CEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config) {
Gradient_j = node[jPoint]->GetGradient_Primitive();
Coord_i = geometry->node[iPoint]->GetCoord();
Coord_j = geometry->node[jPoint]->GetCoord();

AD::StartPreacc();
AD::SetPreaccIn(Gradient_i, nPrimVarGrad, nDim);
AD::SetPreaccIn(Gradient_j, nPrimVarGrad, nDim);
AD::SetPreaccIn(Coord_i, nDim); AD::SetPreaccIn(Coord_j, nDim);
AD::SetPreaccIn(eps2);

for (iVar = 0; iVar < nPrimVarGrad; iVar++) {

AD::StartPreacc();
AD::SetPreaccIn(Gradient_i[iVar], nDim);
AD::SetPreaccIn(Gradient_j[iVar], nDim);
AD::SetPreaccIn(Coord_i, nDim);
AD::SetPreaccIn(Coord_j, nDim);
AD::SetPreaccIn(node[iPoint]->GetSolution_Max(iVar));
AD::SetPreaccIn(node[iPoint]->GetSolution_Min(iVar));
AD::SetPreaccIn(node[jPoint]->GetSolution_Max(iVar));
AD::SetPreaccIn(node[jPoint]->GetSolution_Min(iVar));

if (config->GetKind_SlopeLimit_Flow() == VENKATAKRISHNAN_WANG) {
AD::SetPreaccIn(GlobalMaxPrimitive[iVar]);
AD::SetPreaccIn(GlobalMinPrimitive[iVar]);
eps1 = LimK * (GlobalMaxPrimitive[iVar] - GlobalMinPrimitive[iVar]);
eps2 = eps1*eps1;
}
Expand All @@ -6029,11 +6046,6 @@ void CEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config) {
eps2 = eps1*eps1*eps1;
}

AD::SetPreaccIn(node[iPoint]->GetSolution_Max(iVar));
AD::SetPreaccIn(node[iPoint]->GetSolution_Min(iVar));
AD::SetPreaccIn(node[jPoint]->GetSolution_Max(iVar));
AD::SetPreaccIn(node[jPoint]->GetSolution_Min(iVar));

/*--- Calculate the interface left gradient, delta- (dm) ---*/

dm = 0.0;
Expand Down Expand Up @@ -6068,14 +6080,14 @@ void CEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config) {
AD::SetPreaccOut(node[jPoint]->GetLimiter_Primitive()[iVar]);
}

AD::EndPreacc();
}

AD::EndPreacc();

}

delete [] LocalMinPrimitive; delete [] GlobalMinPrimitive;
delete [] LocalMaxPrimitive; delete [] GlobalMaxPrimitive;
if (LocalMinPrimitive != NULL) delete [] LocalMinPrimitive;
if (LocalMaxPrimitive != NULL) delete [] LocalMaxPrimitive;
if (GlobalMinPrimitive != NULL) delete [] GlobalMinPrimitive;
if (GlobalMaxPrimitive != NULL) delete [] GlobalMaxPrimitive;

}

Expand All @@ -6091,6 +6103,9 @@ void CEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config) {
InitiateComms(geometry, config, PRIMITIVE_LIMITER);
CompleteComms(geometry, config, PRIMITIVE_LIMITER);

#ifdef CODI_REVERSE_TYPE
if (TapeActive) AD::StartRecording();
#endif
}

void CEulerSolver::SetPreconditioner(CConfig *config, unsigned long iPoint) {
Expand Down Expand Up @@ -15374,8 +15389,8 @@ void CNSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container, C
bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
bool center = (config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED) || (cont_adjoint && config->GetKind_ConvNumScheme_AdjFlow() == SPACE_CENTERED);
bool center_jst = center && config->GetKind_Centered_Flow() == JST;
bool limiter_flow = ((config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter()) && !(disc_adjoint && config->GetFrozen_Limiter_Disc()));
bool limiter_turb = ((config->GetKind_SlopeLimit_Turb() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter()) && !(disc_adjoint && config->GetFrozen_Limiter_Disc()));
bool limiter_flow = (config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter());
bool limiter_turb = (config->GetKind_SlopeLimit_Turb() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter());
bool limiter_adjflow = (cont_adjoint && (config->GetKind_SlopeLimit_AdjFlow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter()));
bool fixed_cl = config->GetFixed_CL_Mode();
bool engine = ((config->GetnMarker_EngineInflow() != 0) || (config->GetnMarker_EngineExhaust() != 0));
Expand Down
106 changes: 61 additions & 45 deletions SU2_CFD/src/solver_direct_mean_inc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1528,7 +1528,7 @@ void CIncEulerSolver::Preprocessing(CGeometry *geometry, CSolver **solver_contai
bool disc_adjoint = config->GetDiscrete_Adjoint();
bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
bool muscl = (config->GetMUSCL_Flow() || (cont_adjoint && config->GetKind_ConvNumScheme_AdjFlow() == ROE));
bool limiter = ((config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter()) && !(disc_adjoint && config->GetFrozen_Limiter_Disc()));
bool limiter = (config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter());
bool center = ((config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED) || (cont_adjoint && config->GetKind_ConvNumScheme_AdjFlow() == SPACE_CENTERED));
bool center_jst = center && (config->GetKind_Centered_Flow() == JST);
bool fixed_cl = config->GetFixed_CL_Mode();
Expand Down Expand Up @@ -1902,8 +1902,7 @@ void CIncEulerSolver::Upwind_Residual(CGeometry *geometry, CSolver **solver_cont
unsigned long ExtIter = config->GetExtIter();
bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
bool muscl = (config->GetMUSCL_Flow() && (iMesh == MESH_0));
bool disc_adjoint = config->GetDiscrete_Adjoint();
bool limiter = ((config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter()) && !(disc_adjoint && config->GetFrozen_Limiter_Disc()));
bool limiter = (config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter());
bool grid_movement = config->GetGrid_Movement();
bool van_albada = config->GetKind_SlopeLimit_Flow() == VAN_ALBADA_EDGE;

Expand Down Expand Up @@ -3778,10 +3777,21 @@ void CIncEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config)
unsigned long iEdge, iPoint, jPoint;
unsigned short iVar, iDim;
su2double **Gradient_i, **Gradient_j, *Coord_i, *Coord_j,
*Primitive, *Primitive_i, *Primitive_j, *LocalMinPrimitive, *LocalMaxPrimitive,
*GlobalMinPrimitive, *GlobalMaxPrimitive,
*Primitive, *Primitive_i, *Primitive_j,
*LocalMinPrimitive = NULL, *LocalMaxPrimitive = NULL,
*GlobalMinPrimitive = NULL, *GlobalMaxPrimitive = NULL,
dave, LimK, eps2, eps1, dm, dp, du, y, limiter;

#ifdef CODI_REVERSE_TYPE
bool TapeActive = false;

if (config->GetDiscrete_Adjoint() && config->GetFrozen_Limiter_Disc()) {
/*--- If limiters are frozen do not record the computation ---*/
TapeActive = AD::globalTape.isActive();
AD::StopRecording();
}
#endif

dave = config->GetRefElemLength();
LimK = config->GetVenkat_LimiterCoeff();

Expand Down Expand Up @@ -3925,33 +3935,34 @@ void CIncEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config)
if ((config->GetKind_SlopeLimit_Flow() == VENKATAKRISHNAN) ||
(config->GetKind_SlopeLimit_Flow() == VENKATAKRISHNAN_WANG)) {

/*--- Allocate memory for the max and min primitive value --*/

LocalMinPrimitive = new su2double [nPrimVarGrad]; GlobalMinPrimitive = new su2double [nPrimVarGrad];
LocalMaxPrimitive = new su2double [nPrimVarGrad]; GlobalMaxPrimitive = new su2double [nPrimVarGrad];

/*--- Compute the max value and min value of the solution ---*/

Primitive = node[0]->GetPrimitive();
for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
LocalMinPrimitive[iVar] = Primitive[iVar];
LocalMaxPrimitive[iVar] = Primitive[iVar];
}

for (iPoint = 0; iPoint < geometry->GetnPoint(); iPoint++) {
if (config->GetKind_SlopeLimit_Flow() == VENKATAKRISHNAN_WANG) {

/*--- Get the primitive variables ---*/
/*--- Allocate memory for the max and min primitive value --*/

Primitive = node[iPoint]->GetPrimitive();

LocalMinPrimitive = new su2double [nPrimVarGrad]; GlobalMinPrimitive = new su2double [nPrimVarGrad];
LocalMaxPrimitive = new su2double [nPrimVarGrad]; GlobalMaxPrimitive = new su2double [nPrimVarGrad];

/*--- Compute the max value and min value of the solution ---*/

Primitive = node[0]->GetPrimitive();
for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
LocalMinPrimitive[iVar] = min (LocalMinPrimitive[iVar], Primitive[iVar]);
LocalMaxPrimitive[iVar] = max (LocalMaxPrimitive[iVar], Primitive[iVar]);
LocalMinPrimitive[iVar] = Primitive[iVar];
LocalMaxPrimitive[iVar] = Primitive[iVar];
}

}
for (iPoint = 0; iPoint < geometry->GetnPoint(); iPoint++) {

/*--- Get the primitive variables ---*/

Primitive = node[iPoint]->GetPrimitive();

for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
LocalMinPrimitive[iVar] = min (LocalMinPrimitive[iVar], Primitive[iVar]);
LocalMaxPrimitive[iVar] = max (LocalMaxPrimitive[iVar], Primitive[iVar]);
}

}

if (config->GetKind_SlopeLimit_Flow() == VENKATAKRISHNAN_WANG) {
#ifdef HAVE_MPI
SU2_MPI::Allreduce(LocalMinPrimitive, GlobalMinPrimitive, nPrimVarGrad, MPI_DOUBLE, MPI_MIN, MPI_COMM_WORLD);
SU2_MPI::Allreduce(LocalMaxPrimitive, GlobalMaxPrimitive, nPrimVarGrad, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD);
Expand All @@ -3971,15 +3982,22 @@ void CIncEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config)
Gradient_j = node[jPoint]->GetGradient_Primitive();
Coord_i = geometry->node[iPoint]->GetCoord();
Coord_j = geometry->node[jPoint]->GetCoord();

AD::StartPreacc();
AD::SetPreaccIn(Gradient_i, nPrimVarGrad, nDim);
AD::SetPreaccIn(Gradient_j, nPrimVarGrad, nDim);
AD::SetPreaccIn(Coord_i, nDim); AD::SetPreaccIn(Coord_j, nDim);


for (iVar = 0; iVar < nPrimVarGrad; iVar++) {

AD::StartPreacc();
AD::SetPreaccIn(Gradient_i[iVar], nDim);
AD::SetPreaccIn(Gradient_j[iVar], nDim);
AD::SetPreaccIn(Coord_i, nDim);
AD::SetPreaccIn(Coord_j, nDim);
AD::SetPreaccIn(node[iPoint]->GetSolution_Max(iVar));
AD::SetPreaccIn(node[iPoint]->GetSolution_Min(iVar));
AD::SetPreaccIn(node[jPoint]->GetSolution_Max(iVar));
AD::SetPreaccIn(node[jPoint]->GetSolution_Min(iVar));

if (config->GetKind_SlopeLimit_Flow() == VENKATAKRISHNAN_WANG) {
AD::SetPreaccIn(GlobalMaxPrimitive[iVar]);
AD::SetPreaccIn(GlobalMinPrimitive[iVar]);
eps1 = LimK * (GlobalMaxPrimitive[iVar] - GlobalMinPrimitive[iVar]);
eps2 = eps1*eps1;
}
Expand All @@ -3988,11 +4006,6 @@ void CIncEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config)
eps2 = eps1*eps1*eps1;
}

AD::SetPreaccIn(node[iPoint]->GetSolution_Max(iVar));
AD::SetPreaccIn(node[iPoint]->GetSolution_Min(iVar));
AD::SetPreaccIn(node[jPoint]->GetSolution_Max(iVar));
AD::SetPreaccIn(node[jPoint]->GetSolution_Min(iVar));

/*--- Calculate the interface left gradient, delta- (dm) ---*/

dm = 0.0;
Expand Down Expand Up @@ -4027,14 +4040,14 @@ void CIncEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config)
AD::SetPreaccOut(node[jPoint]->GetLimiter_Primitive()[iVar]);
}

AD::EndPreacc();
}

AD::EndPreacc();

}

delete [] LocalMinPrimitive; delete [] GlobalMinPrimitive;
delete [] LocalMaxPrimitive; delete [] GlobalMaxPrimitive;
if (LocalMinPrimitive != NULL) delete [] LocalMinPrimitive;
if (LocalMaxPrimitive != NULL) delete [] LocalMaxPrimitive;
if (GlobalMinPrimitive != NULL) delete [] GlobalMinPrimitive;
if (GlobalMaxPrimitive != NULL) delete [] GlobalMaxPrimitive;

}

Expand All @@ -4049,7 +4062,10 @@ void CIncEulerSolver::SetPrimitive_Limiter(CGeometry *geometry, CConfig *config)

InitiateComms(geometry, config, PRIMITIVE_LIMITER);
CompleteComms(geometry, config, PRIMITIVE_LIMITER);


#ifdef CODI_REVERSE_TYPE
if (TapeActive) AD::StartRecording();
#endif
}

void CIncEulerSolver::SetFarfield_AoA(CGeometry *geometry, CSolver **solver_container,
Expand Down Expand Up @@ -7437,8 +7453,8 @@ void CIncNSSolver::Preprocessing(CGeometry *geometry, CSolver **solver_container
bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
bool center = ((config->GetKind_ConvNumScheme_Flow() == SPACE_CENTERED) || (cont_adjoint && config->GetKind_ConvNumScheme_AdjFlow() == SPACE_CENTERED));
bool center_jst = center && config->GetKind_Centered_Flow() == JST;
bool limiter_flow = ((config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter()) && !(disc_adjoint && config->GetFrozen_Limiter_Disc()));
bool limiter_turb = ((config->GetKind_SlopeLimit_Turb() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter()) && !(disc_adjoint && config->GetFrozen_Limiter_Disc()));
bool limiter_flow = (config->GetKind_SlopeLimit_Flow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter());
bool limiter_turb = (config->GetKind_SlopeLimit_Turb() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter());
bool limiter_adjflow = (cont_adjoint && (config->GetKind_SlopeLimit_AdjFlow() != NO_LIMITER) && (ExtIter <= config->GetLimiterIter()));
bool fixed_cl = config->GetFixed_CL_Mode();
bool van_albada = config->GetKind_SlopeLimit_Flow() == VAN_ALBADA_EDGE;
Expand Down
Loading