The Higher Education and Research forge

Home My Page Projects Code Snippets Project Openings MMD
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

1 #include "mmd.h"
2 #include "tensor.h"
3 #include "primal.h"
4 #include "listop.h"
5 #include "memory.h"
6 #include "dual.h"
10 int main (void)
11 {
12   
13   // Primal Mesh
14   struct simulationData mySimulationData;
15   
16   struct primalMesh myPrimalMesh;
17   struct dualMesh myDualMesh;
18   struct readWriteVTK myReadWriteVTK;
19   
20   myReadWriteVTK.mySimulationData = &mySimulationData;
21   
22   mySimulationData.simulationName = "Ma simulation";
23   
24   myPrimalMesh.L = 1; // cell number on X
25   myPrimalMesh.l = 1; // cell number on Y
26   myPrimalMesh.H = 1; // cell number on Z
27   
28 #ifdef DEBUG
29   
30   myPrimalMesh.M = 2; // cell number on X
31   myPrimalMesh.N = 1; // cell number on Y
32   myPrimalMesh.P = 1; // cell number on Z
33   
34 #else
35   
36 #ifdef OPTIMCODE
37   affiche("OPTIM finded\n");
38   myPrimalMesh.M = 200; // cell number on X
39   myPrimalMesh.N = 20; // cell number on Y
40   myPrimalMesh.P = 20; // cell number on Z
41 #else
42   myPrimalMesh.M = 200; // cell number on X
43   myPrimalMesh.N = 200; // cell number on Y
44   myPrimalMesh.P = 200; // cell number on Z
45   
46 #endif
47   
48 #endif
49   myPrimalMesh.vertex                 = NULL;
50   myPrimalMesh.cellToVertexNumber     = NULL;
51   myPrimalMesh.cellToVertex           = NULL;
52   myPrimalMesh.faceToVertex           = NULL;
53   myPrimalMesh.faceToVertexNumber     = NULL;
54   myPrimalMesh.faceCentres            = NULL;
55   myPrimalMesh.faceAreas              = NULL;
56   myPrimalMesh.cellToFaces            = NULL;
57   myPrimalMesh.volumeCentroid         = NULL;
58   myPrimalMesh.cellToFacesNumber      = NULL;
59   myPrimalMesh.volume                 = NULL;
60 //  myPrimalMesh.segmentToVertex        = NULL;
61   myPrimalMesh.faceToSegments         = NULL;
62   myPrimalMesh.vertexToSegmentNumber  = NULL;
63   myPrimalMesh.vertexToSegments       = NULL;
64   myPrimalMesh.cellToCells            = NULL;
65   myPrimalMesh.cellToCellsNumbers     = NULL;
66   myPrimalMesh.cellToSegmentOwner     = NULL;
67   myPrimalMesh.cellToSegmentNeighbour = NULL;
68   myPrimalMesh.cellToSegmentOwnerNumber       = NULL;
69   myPrimalMesh.cellToSegmentNeighbourNumber   = NULL;  
70   
71   
72   
73   // FACES
74   myPrimalMesh.faces                  = NULL;
75   myPrimalMesh.cellToFacesOwner       = NULL;
76   myPrimalMesh.cellToFacesNeighbour   = NULL;
77   
78   //  SEGMENTS
79   myPrimalMesh.segments                       = NULL;
80   myPrimalMesh.vertexToSegmentOwner           = NULL;
81   myPrimalMesh.vertexToSegmentOwnerNumber     = NULL;
82   myPrimalMesh.vertexToSegmentNeighbour       = NULL;
83   myPrimalMesh.vertexToSegmentNeighbourNumber = NULL;
84   
85   myPrimalMesh.segmentToFaceOwner            = NULL;
86   myPrimalMesh.segmentToFaceOwnerNumber      = NULL;
87   myPrimalMesh.segmentToFaceNeighbour        = NULL;
88   myPrimalMesh.segmentToFaceNeighbourNumber  = NULL;
89   myPrimalMesh.segmentCentres                = NULL;
90   
91   myDualMesh.internalDualFaces               = NULL;
92   myDualMesh.segmentToInternalDualFace       = NULL;
93   myDualMesh.segmentToInternalDualFaceNumber = NULL;
94   myDualMesh.internalDualFaceArea            = NULL;
95   myDualMesh.internalDualFaceCentres         = NULL;
96   
97   
98   
99   
100   // Rectangular mesh with an ...
101   myPrimalMesh.cellNumber   = myPrimalMesh.M * myPrimalMesh.N * myPrimalMesh.P;
102   myPrimalMesh.vertexNumber = (myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
103   myPrimalMesh.faceNumber = 0;//HEXAHEDRON_FACES*myPrimalMesh.cellNumber;//(myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
104   myPrimalMesh.segmentNumber = 0;//QUAD*myPrimalMesh.faceNumber;//HEXAHEDRON_SEGMENTS * myPrimalMesh.cellNumber;; //2*(myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
105   
106   
107   myDualMesh.internalDualFacesNumber = 0;
108   
109   // création de **vertex
110   setHexahedreVertex(&myPrimalMesh);
111   
112   // nombre de vertex par cellules **cellToVertexNumber
113   setHexahedreCellToVertexNumber(&myPrimalMesh);
114   
115   // création du lien cellules vers vertex **cellToVertex 
116   setHexahedreCellToVertex(&myPrimalMesh);
117   
118   // lien vertex vers cellules
119   setHexahedreVertexToCellNumbers(&myPrimalMesh);
120   
121   setHexahedreVertexToCells(&myPrimalMesh);
122   
123   // cell to cells
124   setHexahedreCellToCells(&myPrimalMesh);
125   
126   setHexahedreCellToFacesOwnerNeighbour(&myPrimalMesh);
127   
128   setHexahedreFaceToCells(&myPrimalMesh);
129   
130   //  OLD
131   
132   setHexahedreSegments(&myPrimalMesh);
133   
134   setHexahedreVertexToSegments(&myPrimalMesh);
135   
136   setHexahedreSegmentToFaces(&myPrimalMesh);
137   
138   // centres
139   
140   setHexahedreSegmentsCentres(&myPrimalMesh);
141   
142   setHexahedreFaceCentersAreas(&myPrimalMesh);
143   
144   
145   setHexahedreVolumeCentroid(&myPrimalMesh);
146   
147   // DUAL MESH
148   setDualFaces(&myPrimalMesh,&myDualMesh);
149   
150   setDualFacesCentres(&myPrimalMesh, &myDualMesh);
151   
152   /* To do dual segments to generate global dual surface
153    * Faces = myPrimalMesh->segmentToFaceOwner union myPrimalMesh->segmentToFaceNeighbour
154    * myPrimalMesh->faceToCells
155    * Faces2 = myPrimalMesh->cellToFacesOwner union myPrimalMesh->cellToFacesNeighbour
156    * Faces3 = Faces intersect Face2
157    * 
158    * TODO : 
159    * Dual faces on primal faces and domain boundary 
160    * 
161    * Volumes of dual mesh
162    * 
163    * test Volume dual = volume primal
164   */
165   
166   //  FILE *fp;
167   //  fp = fopen("one.dat", "wb");
168   //  fwrite(&(myPrimalMesh), sizeof(myPrimalMesh), 1, fp);
169   //  fclose(fp);  
170   
171   // OLD
172   
173   fflush(stderr);
174   fflush(stdout);
175   
176   affiche("%-40s : %ld\n","Cell number",myPrimalMesh.cellNumber);
177   affiche("%-40s : %ld\n","Vertex number",myPrimalMesh.vertexNumber);
178   affiche("%-40s : %ld\n","Surface number",myPrimalMesh.faceNumber);
179   affiche("%-40s : %ld\n","Segment number",myPrimalMesh.segmentNumber);
180   affiche("%-40s : %ld\n","Dual Face number",myDualMesh.internalDualFacesNumber);
181   
182   freeMemory(&myPrimalMesh, &myDualMesh);
183