SU2
iteration_structure.hpp
Go to the documentation of this file.
1 
35 #pragma once
36 
37 #include "../../Common/include/mpi_structure.hpp"
38 
39 #include <ctime>
40 
41 #include "solver_structure.hpp"
43 #include "output_structure.hpp"
44 #include "numerics_structure.hpp"
45 #include "transfer_structure.hpp"
46 #include "../../Common/include/geometry_structure.hpp"
47 #include "../../Common/include/grid_movement_structure.hpp"
48 #include "../../Common/include/config_structure.hpp"
49 
50 using namespace std;
51 
58 class CIteration {
59 protected:
60  unsigned short nZone;
62 public:
63 
67  CIteration(CConfig *config);
68 
72  virtual ~CIteration(void);
73 
87  virtual void SetGrid_Movement(CGeometry ***geometry_container, CSurfaceMovement **surface_movement,
88  CVolumetricMovement **grid_movement, CFreeFormDefBox ***FFDBox,
89  CSolver ****solver_container, CConfig **config_container,
90  unsigned short val_iZone, unsigned long IntIter, unsigned long ExtIter);
91 
96  virtual void Preprocess(COutput *output,
97  CIntegration ***integration_container,
98  CGeometry ***geometry_container,
99  CSolver ****solver_container,
100  CNumerics *****numerics_container,
101  CConfig **config_container,
102  CSurfaceMovement **surface_movement,
103  CVolumetricMovement **grid_movement,
104  CFreeFormDefBox*** FFDBox,
105  unsigned short val_iZone);
106 
119  virtual void Iterate(COutput *output,
120  CIntegration ***integration_container,
121  CGeometry ***geometry_container,
122  CSolver ****solver_container,
123  CNumerics *****numerics_container,
124  CConfig **config_container,
125  CSurfaceMovement **surface_movement,
126  CVolumetricMovement **grid_movement,
127  CFreeFormDefBox*** FFDBox,
128  unsigned short val_iZone);
129 
134  virtual void Update(COutput *output,
135  CIntegration ***integration_container,
136  CGeometry ***geometry_container,
137  CSolver ****solver_container,
138  CNumerics *****numerics_container,
139  CConfig **config_container,
140  CSurfaceMovement **surface_movement,
141  CVolumetricMovement **grid_movement,
142  CFreeFormDefBox*** FFDBox,
143  unsigned short val_iZone);
144 
149  virtual void Monitor();
150 
155  virtual void Output();
156 
161  virtual void Postprocess();
162 
163 };
164 
165 
173 public:
174 
179  CMeanFlowIteration(CConfig *config);
180 
184  ~CMeanFlowIteration(void);
185 
190  void Preprocess(COutput *output,
191  CIntegration ***integration_container,
192  CGeometry ***geometry_container,
193  CSolver ****solver_container,
194  CNumerics *****numerics_container,
195  CConfig **config_container,
196  CSurfaceMovement **surface_movement,
197  CVolumetricMovement **grid_movement,
198  CFreeFormDefBox*** FFDBox,
199  unsigned short val_iZone);
200 
213  void Iterate(COutput *output,
214  CIntegration ***integration_container,
215  CGeometry ***geometry_container,
216  CSolver ****solver_container,
217  CNumerics *****numerics_container,
218  CConfig **config_container,
219  CSurfaceMovement **surface_movement,
220  CVolumetricMovement **grid_movement,
221  CFreeFormDefBox*** FFDBox,
222  unsigned short val_iZone);
223 
228  void Update(COutput *output,
229  CIntegration ***integration_container,
230  CGeometry ***geometry_container,
231  CSolver ****solver_container,
232  CNumerics *****numerics_container,
233  CConfig **config_container,
234  CSurfaceMovement **surface_movement,
235  CVolumetricMovement **grid_movement,
236  CFreeFormDefBox*** FFDBox,
237  unsigned short val_iZone);
238 
243  void Monitor();
244 
249  void Output();
250 
255  void Postprocess();
256 
264  void SetWind_GustField(CConfig *config_container, CGeometry **geometry_container, CSolver ***solver_container);
265 
275  void InitializeVortexDistribution(unsigned long &nVortex, vector<su2double>& x0, vector<su2double>& y0, vector<su2double>& vort_strength, vector<su2double>& r_core);
276 
285  void SetMixingPlane(CGeometry ***geometry_container, CSolver ****solver_container, CConfig **config_container, unsigned short iZone);
286 
296  void SetTurboPerformance(CGeometry ***geometry_container, CSolver ****solver_container, CConfig **config_container, COutput *output, unsigned short iZone);
297 
298 
299 };
300 
307 class CWaveIteration : public CIteration {
308 public:
309 
314  CWaveIteration(CConfig *config);
315 
319  ~CWaveIteration(void);
320 
334  void Preprocess(COutput *output,
335  CIntegration ***integration_container,
336  CGeometry ***geometry_container,
337  CSolver ****solver_container,
338  CNumerics *****numerics_container,
339  CConfig **config_container,
340  CSurfaceMovement **surface_movement,
341  CVolumetricMovement **grid_movement,
342  CFreeFormDefBox*** FFDBox,
343  unsigned short val_iZone);
344 
358  void Iterate(COutput *output,
359  CIntegration ***integration_container,
360  CGeometry ***geometry_container,
361  CSolver ****solver_container,
362  CNumerics *****numerics_container,
363  CConfig **config_container,
364  CSurfaceMovement **surface_movement,
365  CVolumetricMovement **grid_movement,
366  CFreeFormDefBox*** FFDBox,
367  unsigned short val_iZone);
368 
382  void Update(COutput *output,
383  CIntegration ***integration_container,
384  CGeometry ***geometry_container,
385  CSolver ****solver_container,
386  CNumerics *****numerics_container,
387  CConfig **config_container,
388  CSurfaceMovement **surface_movement,
389  CVolumetricMovement **grid_movement,
390  CFreeFormDefBox*** FFDBox,
391  unsigned short val_iZone);
392 
396  void Monitor();
397 
401  void Output();
402 
406  void Postprocess();
407 
408 };
409 
416 class CHeatIteration : public CIteration {
417 public:
418 
423  CHeatIteration(CConfig *config);
424 
428  ~CHeatIteration(void);
429 
434  void Preprocess(COutput *output,
435  CIntegration ***integration_container,
436  CGeometry ***geometry_container,
437  CSolver ****solver_container,
438  CNumerics *****numerics_container,
439  CConfig **config_container,
440  CSurfaceMovement **surface_movement,
441  CVolumetricMovement **grid_movement,
442  CFreeFormDefBox*** FFDBox,
443  unsigned short val_iZone);
444 
457  void Iterate(COutput *output,
458  CIntegration ***integration_container,
459  CGeometry ***geometry_container,
460  CSolver ****solver_container,
461  CNumerics *****numerics_container,
462  CConfig **config_container,
463  CSurfaceMovement **surface_movement,
464  CVolumetricMovement **grid_movement,
465  CFreeFormDefBox*** FFDBox,
466  unsigned short val_iZone);
467 
472  void Update(COutput *output,
473  CIntegration ***integration_container,
474  CGeometry ***geometry_container,
475  CSolver ****solver_container,
476  CNumerics *****numerics_container,
477  CConfig **config_container,
478  CSurfaceMovement **surface_movement,
479  CVolumetricMovement **grid_movement,
480  CFreeFormDefBox*** FFDBox,
481  unsigned short val_iZone);
482 
487  void Monitor();
488 
493  void Output();
494 
499  void Postprocess();
500 
501 };
502 
510 public:
511 
516  CPoissonIteration(CConfig *config);
517 
521  ~CPoissonIteration(void);
522 
527  void Preprocess(COutput *output,
528  CIntegration ***integration_container,
529  CGeometry ***geometry_container,
530  CSolver ****solver_container,
531  CNumerics *****numerics_container,
532  CConfig **config_container,
533  CSurfaceMovement **surface_movement,
534  CVolumetricMovement **grid_movement,
535  CFreeFormDefBox*** FFDBox,
536  unsigned short val_iZone);
537 
550  void Iterate(COutput *output,
551  CIntegration ***integration_container,
552  CGeometry ***geometry_container,
553  CSolver ****solver_container,
554  CNumerics *****numerics_container,
555  CConfig **config_container,
556  CSurfaceMovement **surface_movement,
557  CVolumetricMovement **grid_movement,
558  CFreeFormDefBox*** FFDBox,
559  unsigned short val_iZone);
560 
565  void Update(COutput *output,
566  CIntegration ***integration_container,
567  CGeometry ***geometry_container,
568  CSolver ****solver_container,
569  CNumerics *****numerics_container,
570  CConfig **config_container,
571  CSurfaceMovement **surface_movement,
572  CVolumetricMovement **grid_movement,
573  CFreeFormDefBox*** FFDBox,
574  unsigned short val_iZone);
575 
580  void Monitor();
581 
586  void Output();
587 
592  void Postprocess();
593 
594 };
595 
603 public:
604 
610 
615 
620  void Preprocess();
622 
623 
637  void Iterate(COutput *output,
638  CIntegration ***integration_container,
639  CGeometry ***geometry_container,
640  CSolver ****solver_container,
641  CNumerics *****numerics_container,
642  CConfig **config_container,
643  CSurfaceMovement **surface_movement,
644  CVolumetricMovement **grid_movement,
645  CFreeFormDefBox*** FFDBox,
646  unsigned short val_iZone);
647 
652  void Update(COutput *output,
653  CIntegration ***integration_container,
654  CGeometry ***geometry_container,
655  CSolver ****solver_container,
656  CNumerics *****numerics_container,
657  CConfig **config_container,
658  CSurfaceMovement **surface_movement,
659  CVolumetricMovement **grid_movement,
660  CFreeFormDefBox*** FFDBox,
661  unsigned short val_iZone);
662 
667  void Monitor();
668 
673  void Output();
674 
679  void Postprocess();
680 
681 };
682 
690 public:
691 
697 
701  ~CAdjMeanFlowIteration(void);
702 
707  void Preprocess(COutput *output,
708  CIntegration ***integration_container,
709  CGeometry ***geometry_container,
710  CSolver ****solver_container,
711  CNumerics *****numerics_container,
712  CConfig **config_container,
713  CSurfaceMovement **surface_movement,
714  CVolumetricMovement **grid_movement,
715  CFreeFormDefBox*** FFDBox,
716  unsigned short val_iZone);
717 
730  void Iterate(COutput *output,
731  CIntegration ***integration_container,
732  CGeometry ***geometry_container,
733  CSolver ****solver_container,
734  CNumerics *****numerics_container,
735  CConfig **config_container,
736  CSurfaceMovement **surface_movement,
737  CVolumetricMovement **grid_movement,
738  CFreeFormDefBox*** FFDBox,
739  unsigned short val_iZone);
740 
745  void Update(COutput *output,
746  CIntegration ***integration_container,
747  CGeometry ***geometry_container,
748  CSolver ****solver_container,
749  CNumerics *****numerics_container,
750  CConfig **config_container,
751  CSurfaceMovement **surface_movement,
752  CVolumetricMovement **grid_movement,
753  CFreeFormDefBox*** FFDBox,
754  unsigned short val_iZone);
755 
760  void Monitor();
761 
766  void Output();
767 
772  void Postprocess();
773 
774 };
775 
783 
784 private:
785 
786  CMeanFlowIteration* meanflow_iteration;
787  unsigned short CurrentRecording;
788  bool turbulent;
790  enum RECORDING{
791  NONE = 0,
792  FLOW_VARIABLES = 1,
795  GEOMETRY_VARIABLES = 2,
798  ALL_VARIABLES = 3,
799  };
800 
801 
802 public:
803 
809 
814 
819  void Preprocess(COutput *output,
820  CIntegration ***integration_container,
821  CGeometry ***geometry_container,
822  CSolver ****solver_container,
823  CNumerics *****numerics_container,
824  CConfig **config_container,
825  CSurfaceMovement **surface_movement,
826  CVolumetricMovement **grid_movement,
827  CFreeFormDefBox*** FFDBox,
828  unsigned short val_iZone);
829 
842  void Iterate(COutput *output,
843  CIntegration ***integration_container,
844  CGeometry ***geometry_container,
845  CSolver ****solver_container,
846  CNumerics *****numerics_container,
847  CConfig **config_container,
848  CSurfaceMovement **surface_movement,
849  CVolumetricMovement **grid_movement,
850  CFreeFormDefBox*** FFDBox,
851  unsigned short val_iZone);
852 
857  void Update(COutput *output,
858  CIntegration ***integration_container,
859  CGeometry ***geometry_container,
860  CSolver ****solver_container,
861  CNumerics *****numerics_container,
862  CConfig **config_container,
863  CSurfaceMovement **surface_movement,
864  CVolumetricMovement **grid_movement,
865  CFreeFormDefBox*** FFDBox,
866  unsigned short val_iZone);
867 
872  void Monitor();
873 
878  void Output();
879 
884  void Postprocess();
885 
894  void RegisterInput(CSolver ****solver_container, CGeometry*** geometry_container, CConfig** config_container, unsigned short iZone, unsigned short kind_recording);
895 
903  void RegisterOutput(CSolver ****solver_container, CGeometry*** geometry_container, CConfig** config_container, unsigned short iZone);
904 
912  void InitializeAdjoint(CSolver ****solver_container, CGeometry*** geometry_container, CConfig** config_container, unsigned short iZone);
913 
914 
929  void SetRecording(COutput *output,
930  CIntegration ***integration_container,
931  CGeometry ***geometry_container,
932  CSolver ****solver_container,
933  CNumerics *****numerics_container,
934  CConfig **config_container,
935  CSurfaceMovement **surface_movement,
936  CVolumetricMovement **grid_movement,
937  CFreeFormDefBox*** FFDBox,
938  unsigned short val_iZone,
939  unsigned short kind_recording);
940 
950  void SetDependencies(CSolver ****solver_container,
951  CGeometry ***geometry_container,
952  CConfig **config_container,
953  unsigned short iZone,
954  unsigned short kind_recording);
955 
964  void LoadUnsteady_Solution(CGeometry ***geometry_container,
965  CSolver ****solver_container,
966  CConfig **config_container,
967  unsigned short val_iZone,
968  int val_DirectIter);
969 };
970 
971 
986 void FEM_StructuralIteration(COutput *output, CIntegration ***integration_container, CGeometry ***geometry_container,
987  CSolver ****solver_container, CNumerics *****numerics_container, CConfig **config_container,
988  CSurfaceMovement **surface_movement, CVolumetricMovement **grid_movement, CFreeFormDefBox*** FFDBox);
Class for writing the flow, adjoint and linearized solver solution (including the history solution...
Definition: output_structure.hpp:64
Headers of the main subroutines for generating the file outputs. The subroutines and functions are in...
Parent class for defining the geometry of the problem (complete geometry, multigrid agglomerated geom...
Definition: geometry_structure.hpp:72
Class for driving an iteration of the poisson system.
Definition: iteration_structure.hpp:509
Class for driving an iteration of the discrete adjoint mean flow system.
Definition: iteration_structure.hpp:782
Headers of the main subroutines for space and time integration. The subroutines and functions are in ...
Main class for defining the PDE solution, it requires a child class for each particular solver (Euler...
Definition: solver_structure.hpp:71
Class for driving an iteration of the wave system.
Definition: iteration_structure.hpp:307
Class for moving the surface numerical grid.
Definition: grid_movement_structure.hpp:1287
Class for moving the volumetric numerical grid.
Definition: grid_movement_structure.hpp:955
virtual void Preprocess(COutput *output, CIntegration ***integration_container, CGeometry ***geometry_container, CSolver ****solver_container, CNumerics *****numerics_container, CConfig **config_container, CSurfaceMovement **surface_movement, CVolumetricMovement **grid_movement, CFreeFormDefBox ***FFDBox, unsigned short val_iZone)
A virtual member.
Definition: iteration_structure.cpp:405
Class for driving an iteration of the mean flow system.
Definition: iteration_structure.hpp:172
Headers of the main subroutines for the dumerical definition of the problem. The subroutines and func...
Class for defining the free form FFDBox structure.
Definition: grid_movement_structure.hpp:273
Main class for doing the space integration, time integration, and monitoring of a system of Partial D...
Definition: integration_structure.hpp:57
unsigned short nZone
Total number of zones in the problem.
Definition: iteration_structure.hpp:60
Class for defining the numerical methods.
Definition: numerics_structure.hpp:59
void FEM_StructuralIteration(COutput *output, CIntegration ***integration_container, CGeometry ***geometry_container, CSolver ****solver_container, CNumerics *****numerics_container, CConfig **config_container, CSurfaceMovement **surface_movement, CVolumetricMovement **grid_movement, CFreeFormDefBox ***FFDBox)
Iteration function for structural analysis using the Finite Element Method.
Definition: iteration_structure.cpp:2167
void RegisterOutput(su2double &data)
Registers the variable as an output. I.e. as the root of the computational graph. ...
Definition: ad_structure.inl:166
Class for driving an iteration of the adjoint mean flow system.
Definition: iteration_structure.hpp:689
Class for driving an iteration of structural analysis.
Definition: iteration_structure.hpp:602
Class for driving an iteration of the heat system.
Definition: iteration_structure.hpp:416
Headers of the transfer structure The subroutines and functions are in the transfer_structure.cpp and transfer_physics.cpp files.
Parent class for defining a single iteration of a physics problem.
Definition: iteration_structure.hpp:58
void RegisterInput(su2double &data)
Registers the variable as an input. I.e. as a leaf of the computational graph.
Definition: ad_structure.inl:164
Headers of the main subroutines for solving partial differential equations. The subroutines and funct...
Main class for defining the problem; basically this class reads the configuration file...
Definition: config_structure.hpp:68