SU2
dual_grid_structure.hpp
Go to the documentation of this file.
1 
35 #pragma once
36 
37 #include "./mpi_structure.hpp"
38 
39 #include <cmath>
40 #include <iostream>
41 #include <cstdlib>
42 #include <vector>
43 
44 #include "config_structure.hpp"
45 
46 using namespace std;
47 
55 class CDualGrid{
56 protected:
57  static unsigned short nDim;
59 public:
60 
65  CDualGrid(unsigned short val_nDim);
66 
70  virtual ~CDualGrid(void);
71 
75  virtual su2double *GetCoord(void) = 0;
76 
81  virtual void SetCoord(su2double *val_coord) = 0;
82 
90  virtual void SetNodes_Coord(su2double *val_coord_Edge_CG, su2double *val_coord_FaceElem_CG, su2double *val_coord_Elem_CG) = 0;
91 
98  virtual void SetNodes_Coord(su2double *val_coord_Edge_CG, su2double *val_coord_Elem_CG) = 0;
99 
104  virtual void GetNormal(su2double *val_normal) = 0;
105 
109  virtual su2double *GetNormal(void) = 0;
110 
115  virtual void SetNormal(su2double *val_face_normal) = 0;
116 
120  virtual unsigned short GetnNodes(void) = 0;
121 
125  virtual void SetZeroValues(void) = 0;
126 
131  virtual void AddNormal(su2double *val_face_normal) = 0;
132 };
133 
140 class CPoint : public CDualGrid {
141 private:
142  unsigned short nElem,
143  nPoint;
144  vector<long> Elem;
145  vector<unsigned long> Point;
146  vector<long> Edge;
147  su2double *Volume;
148  bool Domain,
149  Boundary,
150  PhysicalBoundary,
151  SolidBoundary;
152  long *Vertex;
153  su2double *Coord,
154  *Coord_Old,
155  *Coord_Sum,
156  *Coord_n,
157  *Coord_n1,
158  *Coord_p1;
159  su2double *GridVel;
160  su2double **GridVel_Grad;
161  unsigned long Parent_CV;
162  unsigned short nChildren_CV;
163  vector<unsigned long> Children_CV;
164  bool Agglomerate_Indirect,
165  Agglomerate;
166  bool Move;
167  unsigned short color;
168  su2double Wall_Distance;
169  su2double SharpEdge_Distance;
170  su2double Curvature;
171  unsigned long GlobalIndex;
172  unsigned short nNeighbor;
173  bool Flip_Orientation;
175 public:
176 
183  CPoint(unsigned short val_nDim, unsigned long val_globalindex, CConfig *config);
184 
192  CPoint(su2double val_coord_0, su2double val_coord_1, unsigned long val_globalindex, CConfig *config);
193 
202  CPoint(su2double val_coord_0, su2double val_coord_1, su2double val_coord_2, unsigned long val_globalindex, CConfig *config);
203 
207  ~CPoint(void);
208 
213  void SetDomain(bool val_domain);
214 
219  bool GetDomain(void);
220 
225  void SetWall_Distance(su2double val_distance);
226 
231  void SetSharpEdge_Distance(su2double val_distance);
232 
237  su2double GetWall_Distance(void);
238 
243  void SetCurvature(su2double val_curvature);
244 
249  su2double GetCurvature(void);
250 
255  su2double GetSharpEdge_Distance(void);
256 
261  void SetnElem(unsigned short val_nElem);
262 
267  void SetnPoint(unsigned short val_nPoint);
268 
274  su2double GetCoord(unsigned short val_dim);
275 
280  su2double *GetCoord(void);
281 
287  void SetCoord(unsigned short val_dim, su2double val_coord);
288 
293  bool GetFlip_Orientation(void);
294 
300  void SetFlip_Orientation(void);
301 
307  void AddCoord(unsigned short val_dim, su2double val_coord);
308 
313  void SetCoord(su2double *val_coord);
314 
319  unsigned short GetnElem(void);
320 
325  unsigned short GetnPoint(void);
326 
331  void SetElem(unsigned long val_elem);
332 
336  void ResetElem(void);
337 
341  void ResetPoint(void);
342 
347  void SetPoint(unsigned long val_point);
348 
354  void SetEdge(long val_edge, unsigned short val_nEdge);
355 
361  void SetVertex(long val_vertex, unsigned short val_nMarker);
362 
368  unsigned long GetElem(unsigned short val_elem);
369 
375  unsigned long GetPoint(unsigned short val_point);
376 
382  long GetEdge(unsigned short val_edge);
383 
389  long GetVertex(unsigned short val_marker);
390 
395  void AddVolume(su2double val_Volume);
396 
401  su2double GetVolume(void);
402 
407  bool GetMove(void);
408 
414  void SetBoundary(unsigned short val_nmarker);
415 
419  void ResetBoundary(void);
420 
425  void SetBoundary(bool val_boundary);
426 
431  bool GetBoundary(void);
432 
437  void SetPhysicalBoundary(bool val_boundary);
438 
443  void SetSolidBoundary(bool val_boundary);
444 
449  bool GetPhysicalBoundary(void);
450 
455  bool GetSolidBoundary(void);
456 
462  void SetColor(unsigned short val_color);
463 
468  void SetnNeighbor(unsigned short val_nneighbor);
469 
474  unsigned short GetnNeighbor(void);
475 
480  unsigned short GetColor(void);
481 
486  unsigned long GetGlobalIndex(void);
487 
492  void SetGlobalIndex(unsigned long val_globalindex);
493 
498  su2double GetVolume_n(void);
499 
504  su2double GetVolume_nM1(void);
505 
509  void SetVolume_n(void);
510 
514  void SetVolume_nM1(void);
515 
520  su2double* GetCoord_n(void);
521 
526  su2double* GetCoord_n1(void);
527 
532  su2double* GetCoord_p1(void);
533 
537  void SetCoord_n(void);
538 
542  void SetCoord_n1(void);
543 
548  void SetCoord_n(su2double *val_coord);
549 
554  void SetCoord_n1(su2double *val_coord);
555 
560  void SetCoord_p1(su2double *val_coord);
561 
566  void SetVolume(su2double val_Volume);
567 
572  void SetMove(bool val_move);
573 
578  void SetParent_CV(unsigned long val_parent_CV);
579 
585  void SetChildren_CV(unsigned short val_nchildren_CV, unsigned long val_children_CV);
586 
591  unsigned long GetParent_CV(void);
592 
598  unsigned long GetChildren_CV(unsigned short val_nchildren_CV);
599 
604  bool GetAgglomerate(void);
605 
610  bool GetAgglomerate_Indirect(void);
611 
616  void SetAgglomerate_Indirect(bool val_agglomerate);
617 
622  unsigned short GetnChildren_CV(void);
623 
628  void SetnChildren_CV(unsigned short val_nchildren_CV);
629 
634  su2double *GetCoord_Sum(void);
635 
640  su2double *GetCoord_Old(void);
641 
646  su2double *GetGridVel(void);
647 
652  su2double **GetGridVel_Grad(void);
653 
658  void AddCoord_Sum(su2double *val_coord_sum);
659 
663  void SetCoord_SumZero(void);
664 
669  void SetCoord_Old(su2double *val_coord_old);
670 
676  void SetGridVel(unsigned short val_dim, su2double val_gridvel);
677 
682  void SetGridVel(su2double *val_gridvel);
683 
690  void SetGridVel_Grad(unsigned short val_var, unsigned short val_dim, su2double val_value);
691 
696  void SetNodes_Coord(su2double *val_coord_Edge_CG, su2double *val_coord_FaceElem_CG, su2double *val_coord_Elem_CG);
697 
702  void SetNodes_Coord(su2double *val_coord_Edge_CG, su2double *val_coord_Elem_CG);
703 
708  void GetNormal(su2double *val_normal);
709 
714  su2double *GetNormal(void);
715 
720  void SetNormal(su2double *val_face_normal);
721 
726  unsigned short GetnNodes(void);
727 
732  void SetZeroValues(void);
733 
738  void AddNormal(su2double *val_face_normal);
739 };
740 
747 class CEdge : public CDualGrid {
748 private:
749  su2double *Coord_CG;
750  unsigned long *Nodes;
751  su2double *Normal;
753 public:
754 
761  CEdge(unsigned long val_iPoint, unsigned long val_jPoint, unsigned short val_nDim);
762 
766  ~CEdge(void);
767 
772  void SetCoord_CG(su2double **val_coord);
773 
779  su2double GetCG(unsigned short val_dim);
780 
787  unsigned long GetNode(unsigned short val_node);
788 
793  unsigned short GetnNodes(void);
794 
803  su2double GetVolume(su2double *val_coord_Edge_CG, su2double *val_coord_FaceElem_CG, su2double *val_coord_Elem_CG, su2double *val_coord_Point);
804 
812  su2double GetVolume(su2double *val_coord_Edge_CG, su2double *val_coord_Elem_CG, su2double *val_coord_Point);
813 
822  void SetNodes_Coord(su2double *val_coord_Edge_CG, su2double *val_coord_FaceElem_CG, su2double *val_coord_Elem_CG);
823 
832  void SetNodes_Coord(su2double *val_coord_Edge_CG, su2double *val_coord_Elem_CG);
833 
838  void GetNormal(su2double *val_normal);
839 
844  su2double *GetNormal(void);
845 
849  void SetZeroValues(void);
850 
856  void SetNormal(su2double *val_face_normal);
857 
862  void AddNormal(su2double *val_face_normal);
863 
868  su2double *GetCoord(void);
869 
874  void SetCoord(su2double *val_coord);
875 
876 };
877 
884 class CVertex : public CDualGrid {
885 private:
886  unsigned long *Nodes;
887  su2double *Normal;
888  su2double Aux_Var;
889  su2double CartCoord[3];
890  su2double VarCoord[3];
891  su2double *VarRot;
892  long PeriodicPoint[5];
893  bool ActDisk_Perimeter;
894  short Rotation_Type;
895  unsigned long Normal_Neighbor;
896  unsigned long *Donor_Points;
897  unsigned long *Donor_Proc;
898  unsigned long Donor_Elem;
899  unsigned short Donor_Face;
900  su2double Basis_Function[3];
901  su2double *Donor_Coeff;
902  unsigned short nDonor_Points;
904 public:
905 
911  CVertex(unsigned long val_point, unsigned short val_nDim);
912 
916  ~CVertex(void);
917 
922  unsigned short GetnNodes(void);
923 
928  unsigned long GetNode(void);
929 
937  void SetNodes_Coord(su2double *val_coord_Edge_CG, su2double *val_coord_FaceElem_CG, su2double *val_coord_Elem_CG);
938 
945  void SetNodes_Coord(su2double *val_coord_Edge_CG, su2double *val_coord_Elem_CG);
946 
951  void GetNormal(su2double *val_normal);
952 
957  su2double *GetNormal(void);
958 
962  void SetZeroValues(void);
963 
968  void SetAuxVar(su2double val_auxvar);
969 
974  su2double GetAuxVar(void);
975 
980  void AddAuxVar(su2double val_auxvar);
981 
987  void SetNormal(su2double *val_face_normal);
988 
993  void AddNormal(su2double *val_face_normal);
994 
999  void SetVarCoord(su2double *val_varcoord);
1000 
1005  void AddVarCoord(su2double *val_varcoord);
1006 
1011  su2double *GetVarCoord(void);
1012 
1017  void SetCoord(su2double *val_coord);
1018 
1023  su2double *GetCoord(void);
1024 
1030  su2double GetCoord(unsigned short val_dim);
1031 
1036  void SetRotation_Type(short val_rotation_type);
1037 
1042  short GetRotation_Type(void);
1043 
1049  void SetDonorPoint(long val_periodicpoint, long val_processor);
1050 
1056  void SetDonorPoint(long val_periodicpoint, long val_periodicglobalindex, long val_periodicvertex, long val_periodicmarker, long val_processor);
1057 
1064  void SetDonorPoint(long val_periodicpoint, long val_processor, long val_globalindex);
1065 
1071  void SetActDisk_Perimeter(bool val_actdisk_perimeter);
1072 
1077  long GetDonorPoint(void);
1078 
1083  long GetDonorMarker(void);
1084 
1089  long GetDonorVertex(void);
1090 
1095  long GetDonorGlobalIndex(void);
1096 
1101  long GetGlobalDonorPoint(void);
1102 
1107  long GetDonorProcessor(void);
1108 
1113  long *GetPeriodicPointDomain(void);
1114 
1119  bool GetActDisk_Perimeter(void);
1120 
1125  void SetDonorElem(long val_donorelem);
1126 
1131  long GetDonorElem(void);
1132 
1137  void SetDonorFace(unsigned short val_donorface);
1138 
1143  unsigned short GetDonorFace(void);
1144 
1150  void SetBasisFunction(unsigned short val_node, su2double val_basis);
1151 
1157  su2double GetBasisFunction(unsigned short val_node);
1158 
1163  void SetNormal_Neighbor(unsigned long val_Normal_Neighbor);
1164 
1169  unsigned long GetNormal_Neighbor(void);
1170 
1174  void IncrementnDonor(void);
1175 
1180  void SetnDonorPoints(unsigned short nDonor);
1181 
1186  unsigned short GetnDonorPoints(void);
1187 
1193  void SetDonorCoeff(unsigned short iDonor, su2double val);
1194 
1200  su2double GetDonorCoeff(unsigned short iDonor);
1201 
1206  void SetInterpDonorPoint(unsigned short val_donorindex, long val_donorpoint);
1207 
1212  long GetInterpDonorPoint(unsigned short val_donorpoint);
1213 
1214 
1219  void SetInterpDonorProcessor(unsigned short val_donorindex, long val_rank);
1220 
1225  long GetInterpDonorProcessor(unsigned short val_donorindex);
1226 
1227 
1232  void Allocate_DonorInfo(void);
1233 
1238  su2double *GetVarRot(void);
1239 
1244  void SetVarRot(su2double* val);
1245 
1246 };
1247 
1248 #include "dual_grid_structure.inl"
All the information about the definition of the physical problem. The subroutines and functions are i...
Class for point definition (including control volume definition).
Definition: dual_grid_structure.hpp:140
Headers of the mpi interface for generalized datatypes. The subroutines and functions are in the mpi_...
In-Line subroutines of the dual_grid_structure.hpp file.
static unsigned short nDim
Number of dimensions of the problem.
Definition: dual_grid_structure.hpp:57
Class for vertex definition (equivalent to edges, but for the boundaries).
Definition: dual_grid_structure.hpp:884
Class for defining an edge.
Definition: dual_grid_structure.hpp:747
Class for controlling the dual volume definition. The dual volume is compose by three main elements: ...
Definition: dual_grid_structure.hpp:55
Main class for defining the problem; basically this class reads the configuration file...
Definition: config_structure.hpp:68