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 /*---------------------------------------------------------------------------*\
2     \o/\o/\o/
3     MMD
4     Version : 0.0.3
5     Web : https://github.com/alainbastide/MMD
6 -------------------------------------------------------------------------------
7 License
9     MMD is free software: you can redistribute it and/or modify it
10     under the terms of the GNU General Public License as published by the
11     Free Software Foundation, either version 3 of the License, or (at your
12     option) any later version.
14     MMD is distributed in the hope that it will be useful, but
15     WITHOUT ANY WARRANTY; without even the implied warranty of
16     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17     General Public License for more details.
19     You should have received a copy of the GNU General Public License
20     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
22 Application
23     explain
25 Description
26     explain
28 Author
29     Alain Bastide, Université de La Réunion, FRANCE.  All rights reserved
31 \*---------------------------------------------------------------------------*/
35 #include "mmd.h"
36 #include "tensor.h"
37 #include "primal.h"
38 #include "listop.h"
39 #include "memory.h"
40 #include "dual.h"
41 #include "savedata.h"
45 int main (void)
46 {
47   
48   // Primal Mesh
49   struct simulationData mySimulationData;
50   
51   struct primalMesh myPrimalMesh;
52   struct dualMesh myDualMesh;
53   struct readWriteVTK myReadWriteVTK;
54   
55   myReadWriteVTK.mySimulationData = &mySimulationData;
56   
57   mySimulationData.simulationName = "Ma simulation";
58   
59   myPrimalMesh.L = 1; // cell number on X
60   myPrimalMesh.l = 1; // cell number on Y
61   myPrimalMesh.H = 1; // cell number on Z
62   
63 #ifdef DEBUG
64   
65   myPrimalMesh.M = 2; // cell number on X
66   myPrimalMesh.N = 2; // cell number on Y
67   myPrimalMesh.P = 2; // cell number on Z
68   
69 #else
70   
71 #ifdef OPTIMCODE
72   affiche("OPTIM finded\n");
73   myPrimalMesh.M = 50; // cell number on X
74   myPrimalMesh.N = 50; // cell number on Y
75   myPrimalMesh.P = 50; // cell number on Z
76 #else
77   myPrimalMesh.M = 200; // cell number on X
78   myPrimalMesh.N = 200; // cell number on Y
79   myPrimalMesh.P = 200; // cell number on Z
80   
81 #endif
82   
83 #endif
84   myPrimalMesh.vertex                 = NULL;
85   myPrimalMesh.cellToVertexNumber     = NULL;
86   myPrimalMesh.cellToVertex           = NULL;
87   myPrimalMesh.faceToVertex           = NULL;
88   myPrimalMesh.faceToVertexNumber     = NULL;
89   myPrimalMesh.faceCentres            = NULL;
90   myPrimalMesh.faceAreas              = NULL;
91   myPrimalMesh.cellToFaces            = NULL;
92   myPrimalMesh.volumeCentroid         = NULL;
93   myPrimalMesh.cellToFacesNumber      = NULL;
94   myPrimalMesh.volume                 = NULL;
95 //  myPrimalMesh.segmentToVertex        = NULL;
96   myPrimalMesh.faceToSegments         = NULL;
97   myPrimalMesh.vertexToSegmentNumber  = NULL;
98   myPrimalMesh.vertexToSegments       = NULL;
99   myPrimalMesh.cellToCells            = NULL;
100   myPrimalMesh.cellToCellsNumbers     = NULL;
101   myPrimalMesh.cellToSegmentOwner     = NULL;
102   myPrimalMesh.cellToSegmentNeighbour = NULL;
103   myPrimalMesh.cellToSegmentOwnerNumber       = NULL;
104   myPrimalMesh.cellToSegmentNeighbourNumber   = NULL;  
105   
106   
107   // FACES
108   myPrimalMesh.faces                  = NULL;
109   myPrimalMesh.cellToFacesOwner       = NULL;
110   myPrimalMesh.cellToFacesNeighbour   = NULL;
111   
112   //  SEGMENTS
113   myPrimalMesh.segments                       = NULL;
114   myPrimalMesh.vertexToSegmentOwner           = NULL;
115   myPrimalMesh.vertexToSegmentOwnerNumber     = NULL;
116   myPrimalMesh.vertexToSegmentNeighbour       = NULL;
117   myPrimalMesh.vertexToSegmentNeighbourNumber = NULL;
118   
119   myPrimalMesh.segmentToFaceOwner            = NULL;
120   myPrimalMesh.segmentToFaceOwnerNumber      = NULL;
121   myPrimalMesh.segmentToFaceNeighbour        = NULL;
122   myPrimalMesh.segmentToFaceNeighbourNumber  = NULL;
123   myPrimalMesh.segmentCentres                = NULL;
124   
125   myDualMesh.internalDualFaces               = NULL;
126   myDualMesh.segmentToInternalDualFace       = NULL;
127   myDualMesh.segmentToInternalDualFaceNumber = NULL;
128   myDualMesh.internalDualFaceArea            = NULL;
129   myDualMesh.internalDualFaceCentres         = NULL;
130   
131   // BOUNDARY
132   myPrimalMesh.faceBoundary                    = NULL;
133   myPrimalMesh.faceBoundaryNumber              = 0;
134   
135   
136   // Rectangular mesh with an ...
137   myPrimalMesh.cellNumber   = myPrimalMesh.M * myPrimalMesh.N * myPrimalMesh.P;
138   myPrimalMesh.vertexNumber = (myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
139   myPrimalMesh.faceNumber = 0;//HEXAHEDRON_FACES*myPrimalMesh.cellNumber;//(myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
140   myPrimalMesh.segmentNumber = 0;//QUAD*myPrimalMesh.faceNumber;//HEXAHEDRON_SEGMENTS * myPrimalMesh.cellNumber;; //2*(myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
141   
142 //  setHandler(fault_handler);  
143   
144   myDualMesh.internalDualFacesNumber = 0;
145   
146   // création de **vertex
147   setHexahedreVertex(&myPrimalMesh);
148   
149   // nombre de vertex par cellules **cellToVertexNumber
150   setHexahedreCellToVertexNumber(&myPrimalMesh);
151   
152   // création du lien cellules vers vertex **cellToVertex 
153   setHexahedreCellToVertex(&myPrimalMesh);
154   
155   // lien vertex vers cellules
156   setHexahedreVertexToCellNumbers(&myPrimalMesh);
157   
158   setHexahedreVertexToCells(&myPrimalMesh);
159   
160   // cell to cells
161   setHexahedreCellToCells(&myPrimalMesh);
162   
163   setHexahedreCellToFacesOwnerNeighbour(&myPrimalMesh);
164   
165   setHexahedreFaceToCells(&myPrimalMesh);
166   
167   //  OLD
168   
169   setHexahedreSegments(&myPrimalMesh);
170   
171   setHexahedreVertexToSegments(&myPrimalMesh);
172   
173   setHexahedreSegmentToFaces(&myPrimalMesh);
174   
175   // centres
176   
177   setHexahedreSegmentsCentres(&myPrimalMesh);
178   
179   setHexahedreFaceCentersAreas(&myPrimalMesh);
180   
181   
182   setHexahedreVolumeCentroid(&myPrimalMesh);
183   
184   // DUAL MESH
185   setDualFaces(&myPrimalMesh,&myDualMesh);
186   
187   setDualFacesCentres(&myPrimalMesh, &myDualMesh);
188   
189   
190   setHexahedreBoundaryFaces(&myPrimalMesh);
191   
192 #ifdef DEBUG
193   writeVTK(&myPrimalMesh, &myReadWriteVTK);
194 #endif 
195   
196   warning("VOIR TO DO FILE");
197   
198   fflush(stderr);
199   fflush(stdout);
200   
201   affiche("%-40s : %ld\n","Cell number",myPrimalMesh.cellNumber);
202   affiche("%-40s : %ld\n","Vertex number",myPrimalMesh.vertexNumber);
203   affiche("%-40s : %ld\n","Surface number",myPrimalMesh.faceNumber);
204   affiche("%-40s : %ld\n","Segment number",myPrimalMesh.segmentNumber);
205   affiche("%-40s : %ld\n","Dual Face number",myDualMesh.internalDualFacesNumber);
206   
207   freeMemory(&myPrimalMesh, &myDualMesh);
208   todo();
210 #ifdef MMD_PARALLEL
211 #pragma omp parallel
213   printf("Hello from process: %d\n", omp_get_thread_num());  
216 #endif