Skip to content

Commit afe4928

Browse files
committed
simplify SetInitialCondition
1 parent 726f4e7 commit afe4928

4 files changed

Lines changed: 11 additions & 107 deletions

File tree

SU2_CFD/include/solvers/CFVMFlowSolverBase.inl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -882,7 +882,8 @@ void CFVMFlowSolverBase<V, R>::LoadRestart_impl(CGeometry **geometry, CSolver **
882882
index = counter*Restart_Vars[1] + skipVars;
883883

884884
if (SolutionRestart == nullptr) {
885-
nodes->SetSolution(iPoint_Local, &Restart_Data[index]);
885+
for (iVar = 0; iVar < nVar_Restart; iVar++)
886+
nodes->SetSolution(iPoint_Local, iVar, Restart_Data[index+iVar]);
886887
}
887888
else {
888889
/*--- Used as buffer, allows defaults for nVar > nVar_Restart. ---*/

SU2_CFD/src/drivers/CDriver.cpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2956,10 +2956,8 @@ void CFluidDriver::Preprocess(unsigned long Iter) {
29562956
config_container[iZone]->SetPhysicalTime(static_cast<su2double>(Iter)*config_container[iZone]->GetDelta_UnstTimeND());
29572957
else
29582958
config_container[iZone]->SetPhysicalTime(0.0);
2959-
29602959
}
29612960

2962-
29632961
// /*--- Read the target pressure ---*/
29642962

29652963
// if (config_container[ZONE_0]->GetInvDesign_Cp() == YES)
@@ -2976,14 +2974,7 @@ void CFluidDriver::Preprocess(unsigned long Iter) {
29762974

29772975
if(!fsi) {
29782976
for (iZone = 0; iZone < nZone; iZone++) {
2979-
if ((config_container[iZone]->GetKind_Solver() == EULER) ||
2980-
(config_container[iZone]->GetKind_Solver() == NAVIER_STOKES) ||
2981-
(config_container[iZone]->GetKind_Solver() == NEMO_EULER) ||
2982-
(config_container[iZone]->GetKind_Solver() == NEMO_NAVIER_STOKES) ||
2983-
(config_container[iZone]->GetKind_Solver() == RANS) ||
2984-
(config_container[iZone]->GetKind_Solver() == INC_EULER) ||
2985-
(config_container[iZone]->GetKind_Solver() == INC_NAVIER_STOKES) ||
2986-
(config_container[iZone]->GetKind_Solver() == INC_RANS)) {
2977+
if (config_container[iZone]->GetFluidProblem()) {
29872978
for (iInst = 0; iInst < nInst[iZone]; iInst++)
29882979
solver_container[iZone][iInst][MESH_0][FLOW_SOL]->SetInitialCondition(geometry_container[iZone][INST_0], solver_container[iZone][iInst], config_container[iZone], Iter);
29892980
}

SU2_CFD/src/solvers/CIncEulerSolver.cpp

Lines changed: 3 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,7 @@ void CIncEulerSolver::SetNondimensionalization(CConfig *config, unsigned short i
815815

816816
void CIncEulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long TimeIter) {
817817

818-
const bool restart = (config->GetRestart() || config->GetRestart_Flow());
818+
const bool restart = (config->GetRestart() || config->GetRestart_Flow());
819819
const bool rans = (config->GetKind_Turb_Model() != NONE);
820820
const bool dual_time = ((config->GetTime_Marching() == DT_STEPPING_1ST) ||
821821
(config->GetTime_Marching() == DT_STEPPING_2ND));
@@ -824,10 +824,8 @@ void CIncEulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solve
824824

825825
SU2_OMP_PARALLEL {
826826

827-
unsigned long iPoint, Point_Fine;
828-
unsigned short iMesh, iChildren, iVar;
829-
su2double Area_Children, Area_Parent;
830-
const su2double *Solution_Fine;
827+
unsigned long iPoint;
828+
unsigned short iMesh;
831829

832830
/*--- Check if a verification solution is to be computed. ---*/
833831
if ((VerificationSolution) && (TimeIter == 0) && !restart) {
@@ -851,56 +849,6 @@ void CIncEulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solve
851849
}
852850
}
853851

854-
/*--- If restart solution, then interpolate the flow solution to
855-
all the multigrid levels, this is important with the dual time strategy ---*/
856-
857-
if (restart && (TimeIter == 0)) {
858-
859-
for (iMesh = 1; iMesh <= config->GetnMGLevels(); iMesh++) {
860-
SU2_OMP_FOR_STAT(omp_chunk_size)
861-
for (iPoint = 0; iPoint < geometry[iMesh]->GetnPoint(); iPoint++) {
862-
Area_Parent = geometry[iMesh]->nodes->GetVolume(iPoint);
863-
su2double Solution[MAXNVAR] = {0.0};
864-
for (iChildren = 0; iChildren < geometry[iMesh]->nodes->GetnChildren_CV(iPoint); iChildren++) {
865-
Point_Fine = geometry[iMesh]->nodes->GetChildren_CV(iPoint, iChildren);
866-
Area_Children = geometry[iMesh-1]->nodes->GetVolume(Point_Fine);
867-
Solution_Fine = solver_container[iMesh-1][FLOW_SOL]->GetNodes()->GetSolution(Point_Fine);
868-
for (iVar = 0; iVar < nVar; iVar++) {
869-
Solution[iVar] += Solution_Fine[iVar]*Area_Children/Area_Parent;
870-
}
871-
}
872-
solver_container[iMesh][FLOW_SOL]->GetNodes()->SetSolution(iPoint,Solution);
873-
}
874-
solver_container[iMesh][FLOW_SOL]->InitiateComms(geometry[iMesh], config, SOLUTION);
875-
solver_container[iMesh][FLOW_SOL]->CompleteComms(geometry[iMesh], config, SOLUTION);
876-
}
877-
878-
/*--- Interpolate the turblence variable also, if needed ---*/
879-
880-
if (rans) {
881-
882-
unsigned short nVar_Turb = solver_container[MESH_0][TURB_SOL]->GetnVar();
883-
for (iMesh = 1; iMesh <= config->GetnMGLevels(); iMesh++) {
884-
for (iPoint = 0; iPoint < geometry[iMesh]->GetnPoint(); iPoint++) {
885-
Area_Parent = geometry[iMesh]->nodes->GetVolume(iPoint);
886-
su2double Solution[MAXNVAR] = {0.0};
887-
for (iChildren = 0; iChildren < geometry[iMesh]->nodes->GetnChildren_CV(iPoint); iChildren++) {
888-
Point_Fine = geometry[iMesh]->nodes->GetChildren_CV(iPoint, iChildren);
889-
Area_Children = geometry[iMesh-1]->nodes->GetVolume(Point_Fine);
890-
Solution_Fine = solver_container[iMesh-1][TURB_SOL]->GetNodes()->GetSolution(Point_Fine);
891-
for (iVar = 0; iVar < nVar_Turb; iVar++) {
892-
Solution[iVar] += Solution_Fine[iVar]*Area_Children/Area_Parent;
893-
}
894-
}
895-
solver_container[iMesh][TURB_SOL]->GetNodes()->SetSolution(iPoint,Solution);
896-
}
897-
solver_container[iMesh][TURB_SOL]->InitiateComms(geometry[iMesh], config, SOLUTION_EDDY);
898-
solver_container[iMesh][TURB_SOL]->CompleteComms(geometry[iMesh], config, SOLUTION_EDDY);
899-
solver_container[iMesh][TURB_SOL]->Postprocessing(geometry[iMesh], solver_container[iMesh], config, iMesh);
900-
}
901-
}
902-
}
903-
904852
/*--- The value of the solution for the first iteration of the dual time ---*/
905853

906854
if (dual_time && (TimeIter == 0 || (restart && TimeIter == config->GetRestart_Iter()))) {

SU2_CFD/src/solvers/CNEMOEulerSolver.cpp

Lines changed: 5 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -286,54 +286,18 @@ CNEMOEulerSolver::~CNEMOEulerSolver(void) {
286286

287287
void CNEMOEulerSolver::SetInitialCondition(CGeometry **geometry, CSolver ***solver_container, CConfig *config, unsigned long TimeIter) {
288288

289-
unsigned long iPoint;
290-
unsigned short iMesh;
291289
const bool restart = (config->GetRestart() || config->GetRestart_Flow());
292290
const bool rans = false;
293291
const bool dual_time = ((config->GetTime_Marching() == DT_STEPPING_1ST) ||
294292
(config->GetTime_Marching() == DT_STEPPING_2ND));
295293

294+
/*--- Make sure that the solution is well initialized for unsteady calculations
295+
* with dual time-stepping (load additional restarts for 2nd-order). ---*/
296296

297-
/*--- Make sure that the solution is well initialized for unsteady
298-
calculations with dual time-stepping (load additional restarts for 2nd-order). ---*/
299-
300-
if (dual_time && (TimeIter == 0 || (restart && TimeIter == config->GetRestart_Iter())) ) {
301-
302-
/*--- Push back the initial condition to previous solution containers
303-
for a 1st-order restart or when simply intitializing to freestream. ---*/
304-
305-
for (iMesh = 0; iMesh <= config->GetnMGLevels(); iMesh++) {
306-
for (iPoint = 0; iPoint < geometry[iMesh]->GetnPoint(); iPoint++) {
307-
solver_container[iMesh][FLOW_SOL]->GetNodes()->Set_Solution_time_n();
308-
solver_container[iMesh][FLOW_SOL]->GetNodes()->Set_Solution_time_n1();
309-
if (rans) {
310-
solver_container[iMesh][TURB_SOL]->GetNodes()->Set_Solution_time_n();
311-
solver_container[iMesh][TURB_SOL]->GetNodes()->Set_Solution_time_n1();
312-
}
313-
}
314-
}
315-
316-
if ((restart && TimeIter == config->GetRestart_Iter()) &&
317-
(config->GetTime_Marching() == DT_STEPPING_2ND)) {
318-
319-
/*--- Load an additional restart file for a 2nd-order restart ---*/
320-
solver_container[MESH_0][FLOW_SOL]->LoadRestart(geometry, solver_container, config, SU2_TYPE::Int(config->GetRestart_Iter()-1), true);
321-
322-
/*--- Load an additional restart file for the turbulence model ---*/
323-
if (rans)
324-
solver_container[MESH_0][TURB_SOL]->LoadRestart(geometry, solver_container, config, SU2_TYPE::Int(config->GetRestart_Iter()-1), false);
325-
326-
/*--- Push back this new solution to time level N. ---*/
327-
328-
for (iMesh = 0; iMesh <= config->GetnMGLevels(); iMesh++) {
329-
for (iPoint = 0; iPoint < geometry[iMesh]->GetnPoint(); iPoint++) {
330-
solver_container[iMesh][FLOW_SOL]->GetNodes()->Set_Solution_time_n();
331-
if (rans)
332-
solver_container[iMesh][TURB_SOL]->GetNodes()->Set_Solution_time_n();
333-
}
334-
}
335-
}
297+
if (dual_time && ((TimeIter == 0) || (restart && (TimeIter == config->GetRestart_Iter()))) ) {
298+
PushSolutionBackInTime(TimeIter, restart, rans, solver_container, geometry, config);
336299
}
300+
337301
}
338302

339303
void CNEMOEulerSolver::CommonPreprocessing(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh,

0 commit comments

Comments
 (0)