Skip to content

Commit 51c28ed

Browse files
committed
fo initialisation in SinglezoneDriver
1 parent e81687b commit 51c28ed

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed

SU2_CFD/include/drivers/CSinglezoneDriver.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,11 @@ class CSinglezoneDriver : public CDriver {
104104
*/
105105
void SetInitialMesh() override;
106106

107+
/*!
108+
* \brief Perform a first order simulation as an initial solution before running MUSCL reconstructed flow.
109+
*/
110+
void FirstOrderInit();
111+
107112
/*!
108113
* \brief Monitor
109114
* \param ExtIter

SU2_CFD/src/drivers/CSinglezoneDriver.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
*/
2727

2828
#include "../../include/drivers/CSinglezoneDriver.hpp"
29+
#include "../../include/drivers/CDriver.hpp"
2930
#include "../../include/definition_structure.hpp"
3031
#include "../../include/output/COutput.hpp"
3132
#include "../../include/iteration/CIteration.hpp"
33+
#include "../../include/solvers/CSolverFactory.hpp"
3234

3335
CSinglezoneDriver::CSinglezoneDriver(char* confFile,
3436
unsigned short val_nZone,
@@ -61,6 +63,16 @@ void CSinglezoneDriver::StartSolver() {
6163
<< driver_config->GetnTime_Iter() - config_container[ZONE_0]->GetRestart_Iter() << " time steps." << endl;
6264
}
6365

66+
if (config_container[ZONE_0]->GetFirst_Order_Init()) {
67+
if (rank == MASTER_NODE) {cout << endl << "--------------------- Running First Order Simulation --------------------" << endl;}
68+
FirstOrderInit();
69+
if (rank == MASTER_NODE) {cout << endl << "--------------------- Running Second Order Simulation -------------------" << endl;}
70+
config_container[ZONE_0]->SetRestart(true);
71+
config_container[ZONE_0]->SetSolution_FileName("fo_sol_" + config_container[ZONE_0]->GetRestart_FileName());
72+
SU2_MPI::Barrier(SU2_MPI::GetComm());
73+
config_container[ZONE_0]->SetFirst_Order_Init(false);
74+
}
75+
6476
/*--- Set the initial time iteration to the restart iteration. ---*/
6577
if (config_container[ZONE_0]->GetRestart() && driver_config->GetTime_Domain())
6678
TimeIter = config_container[ZONE_0]->GetRestart_Iter();
@@ -102,6 +114,46 @@ void CSinglezoneDriver::StartSolver() {
102114

103115
}
104116

117+
void CSinglezoneDriver::FirstOrderInit() {
118+
/*--- Save original settings to be restored after FO run ---*/
119+
bool muscl_flow_orig = config_container[ZONE_0]->GetMUSCL_Flow();
120+
bool muscl_turb_orig = config_container[ZONE_0]->GetMUSCL_Turb();
121+
bool muscl_species_orig = config_container[ZONE_0]->GetMUSCL_Species();
122+
bool muscl_heat_orig = config_container[ZONE_0]->GetMUSCL_Heat();
123+
unsigned long origInner = config_container[ZONE_0]->GetnInner_Iter();
124+
unsigned long foInner = config_container[ZONE_0]->GetnFO_Init_Iter();
125+
126+
/*--- Disable all MUSCL options before running FO ---*/
127+
config_container[ZONE_0]->SetMUSCL_Flow(false);
128+
config_container[ZONE_0]->SetMUSCL_Turb(false);
129+
config_container[ZONE_0]->SetMUSCL_Species(false);
130+
config_container[ZONE_0]->SetMUSCL_Heat(false);
131+
config_container[ZONE_0]->SetnInner_Iter(foInner); // Set total iterations
132+
133+
/*--- Run the problem the number of time iterations required is reached. ---*/
134+
while ( TimeIter < config_container[ZONE_0]->GetnTime_Iter()) {
135+
Preprocess(TimeIter);
136+
Run();
137+
Postprocess();
138+
Update();
139+
Monitor(TimeIter);
140+
Output(TimeIter);
141+
if (StopCalc) break;
142+
TimeIter++;
143+
}
144+
145+
SU2_MPI::Barrier(SU2_MPI::GetComm());
146+
StopCalc = false;
147+
148+
/*--- Restore original settings after FO run ---*/
149+
config_container[ZONE_0]->SetMUSCL_Flow(muscl_flow_orig);
150+
config_container[ZONE_0]->SetMUSCL_Turb(muscl_turb_orig);
151+
config_container[ZONE_0]->SetMUSCL_Species(muscl_species_orig);
152+
config_container[ZONE_0]->SetMUSCL_Heat(muscl_heat_orig);
153+
config_container[ZONE_0]->SetnInner_Iter(origInner); // Restore original
154+
155+
}
156+
105157
void CSinglezoneDriver::Preprocess(unsigned long TimeIter) {
106158

107159
/*--- Set the current time iteration in the config and also in the driver
@@ -138,6 +190,16 @@ void CSinglezoneDriver::Preprocess(unsigned long TimeIter) {
138190
config_container[ZONE_0], TimeIter);
139191
}
140192

193+
/* DEBUG: Check the settings */
194+
if (rank == MASTER_NODE) {
195+
cout << boolalpha;
196+
cout << "[Pre-Proc] MUSCL_FLOW = " << config_container[ZONE_0]->GetMUSCL_Flow() << "\n"
197+
<< "[Pre-Proc] MUSCL_TURB = " << config_container[ZONE_0]->GetMUSCL_Turb() << "\n"
198+
<< "[Pre-Proc] MUSCL_SPECIES= " << config_container[ZONE_0]->GetMUSCL_Species()<< "\n"
199+
<< "[Pre-Proc] MUSCL_HEAT = " << config_container[ZONE_0]->GetMUSCL_Heat() << "\n"
200+
<< "[Pre-Proc] nInner_Iter = " << config_container[ZONE_0]->GetnInner_Iter() << endl;
201+
}
202+
141203
SU2_MPI::Barrier(SU2_MPI::GetComm());
142204

143205
/*--- Run a predictor step ---*/

SU2_CFD/src/output/COutput.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ COutput::COutput(const CConfig *config, unsigned short ndim, bool fem_output):
8585
/*--- Retrieve the history filename ---*/
8686

8787
historyFilename = config->GetConv_FileName();
88+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) historyFilename = "fo_sol_" + historyFilename;
8889

8990
/*--- Add the correct file extension depending on the file format ---*/
9091

@@ -418,6 +419,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
418419

419420
if (fileName.empty())
420421
fileName = config->GetFilename(surfaceFilename, "", curTimeIter);
422+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
421423

422424
if (!config->GetWrt_Surface_Overwrite())
423425
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -440,6 +442,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
440442

441443
if (fileName.empty())
442444
fileName = config->GetFilename(restartFilename, "", curTimeIter);
445+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
443446

444447
if (!config->GetWrt_Restart_Overwrite())
445448
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -459,6 +462,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
459462

460463
if (fileName.empty())
461464
fileName = config->GetFilename(restartFilename, "", curTimeIter);
465+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
462466

463467
if (!config->GetWrt_Restart_Overwrite())
464468
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -479,6 +483,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
479483

480484
if (fileName.empty())
481485
fileName = config->GetFilename(volumeFilename, "", curTimeIter);
486+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
482487

483488
if (!config->GetWrt_Volume_Overwrite())
484489
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -498,6 +503,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
498503

499504
if (fileName.empty())
500505
fileName = config->GetFilename(volumeFilename, "", curTimeIter);
506+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
501507

502508
if (!config->GetWrt_Volume_Overwrite())
503509
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -517,6 +523,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
517523

518524
if (fileName.empty())
519525
fileName = config->GetFilename(volumeFilename, "", curTimeIter);
526+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
520527

521528
if (!config->GetWrt_Volume_Overwrite())
522529
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -536,6 +543,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
536543

537544
if (fileName.empty())
538545
fileName = config->GetFilename(volumeFilename, "", curTimeIter);
546+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
539547

540548
if (!config->GetWrt_Volume_Overwrite())
541549
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -555,6 +563,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
555563

556564
if (fileName.empty())
557565
fileName = config->GetFilename(volumeFilename, "", curTimeIter);
566+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
558567

559568
if (!config->GetWrt_Volume_Overwrite())
560569
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -574,6 +583,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
574583

575584
if (fileName.empty())
576585
fileName = config->GetUnsteady_FileName(volumeFilename, curTimeIter, "");
586+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
577587

578588
if (!config->GetWrt_Volume_Overwrite())
579589
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -603,6 +613,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
603613

604614
if (fileName.empty())
605615
fileName = config->GetFilename(volumeFilename, "", curTimeIter);
616+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
606617

607618
if (!config->GetWrt_Volume_Overwrite())
608619
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -622,6 +633,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
622633

623634
if (fileName.empty())
624635
fileName = config->GetFilename(surfaceFilename, "", curTimeIter);
636+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
625637

626638
if (!config->GetWrt_Surface_Overwrite())
627639
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -642,6 +654,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
642654

643655
if (fileName.empty())
644656
fileName = config->GetFilename(surfaceFilename, "", curTimeIter);
657+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
645658

646659
if (!config->GetWrt_Surface_Overwrite())
647660
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -662,6 +675,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
662675

663676
if (fileName.empty())
664677
fileName = config->GetFilename(surfaceFilename, "", curTimeIter);
678+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
665679

666680
if (!config->GetWrt_Surface_Overwrite())
667681
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -682,6 +696,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
682696

683697
if (fileName.empty())
684698
fileName = config->GetFilename(surfaceFilename, "", curTimeIter);
699+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
685700

686701
if (!config->GetWrt_Surface_Overwrite())
687702
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -702,6 +717,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
702717

703718
if (fileName.empty())
704719
fileName = config->GetFilename(surfaceFilename, "", curTimeIter);
720+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
705721

706722
if (!config->GetWrt_Surface_Overwrite())
707723
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -722,6 +738,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
722738

723739
if (fileName.empty())
724740
fileName = config->GetFilename(surfaceFilename, "", curTimeIter);
741+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
725742

726743
if (!config->GetWrt_Surface_Overwrite())
727744
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -741,6 +758,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
741758

742759
if (fileName.empty())
743760
fileName = config->GetFilename(volumeFilename, "", curTimeIter);
761+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
744762

745763
if (!config->GetWrt_Volume_Overwrite())
746764
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);
@@ -759,6 +777,7 @@ void COutput::WriteToFile(CConfig *config, CGeometry *geometry, OUTPUT_TYPE form
759777

760778
if (fileName.empty())
761779
fileName = config->GetFilename(surfaceFilename, "", curTimeIter);
780+
if (config->GetFirst_Order_Init() && !config->GetMUSCL_Flow()) fileName = "fo_sol_" + fileName;
762781

763782
if (!config->GetWrt_Surface_Overwrite())
764783
filename_iter = config->GetFilename_Iter(fileName, curInnerIter, curOuterIter);

0 commit comments

Comments
 (0)