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

18dd327b5549308f91f4edea130776c35872e32f
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"
44 int main (void)
45 {
46   
47   // Primal Mesh
48   struct simulationData mySimulationData;
49   
50   struct primalMesh myPrimalMesh;
51   struct dualMesh myDualMesh;
52   struct readWriteVTK myReadWriteVTK;
53   
54   myReadWriteVTK.mySimulationData = &mySimulationData;
55   
56   mySimulationData.simulationName = "Ma simulation";
57   
58   myPrimalMesh.L = 1; // cell number on X
59   myPrimalMesh.l = 1; // cell number on Y
60   myPrimalMesh.H = 1; // cell number on Z
61   
62 #ifdef DEBUG
63   
64   myPrimalMesh.M = 2; // cell number on X
65   myPrimalMesh.N = 2; // cell number on Y
66   myPrimalMesh.P = 2; // cell number on Z
67   
68 #else
69   
70 #ifdef OPTIMCODE
71   affiche("OPTIM finded\n");
72   myPrimalMesh.M = 50; // cell number on X
73   myPrimalMesh.N = 50; // cell number on Y
74   myPrimalMesh.P = 50; // cell number on Z
75 #else
76   myPrimalMesh.M = 200; // cell number on X
77   myPrimalMesh.N = 200; // cell number on Y
78   myPrimalMesh.P = 200; // cell number on Z
79   
80 #endif
81   
82 #endif
83   myPrimalMesh.vertex                 = NULL;
84   myPrimalMesh.cellToVertexNumber     = NULL;
85   myPrimalMesh.cellToVertex           = NULL;
86   myPrimalMesh.faceToVertex           = NULL;
87   myPrimalMesh.faceToVertexNumber     = NULL;
88   myPrimalMesh.faceCentres            = NULL;
89   myPrimalMesh.faceAreas              = NULL;
90   myPrimalMesh.cellToFaces            = NULL;
91   myPrimalMesh.volumeCentroid         = NULL;
92   myPrimalMesh.cellToFacesNumber      = NULL;
93   myPrimalMesh.volume                 = NULL;
94 //  myPrimalMesh.segmentToVertex        = NULL;
95   myPrimalMesh.faceToSegments         = NULL;
96   myPrimalMesh.vertexToSegmentNumber  = NULL;
97   myPrimalMesh.vertexToSegments       = NULL;
98   myPrimalMesh.cellToCells            = NULL;
99   myPrimalMesh.cellToCellsNumbers     = NULL;
100   myPrimalMesh.cellToSegmentOwner     = NULL;
101   myPrimalMesh.cellToSegmentNeighbour = NULL;
102   myPrimalMesh.cellToSegmentOwnerNumber       = NULL;
103   myPrimalMesh.cellToSegmentNeighbourNumber   = NULL;  
104   
105   
106   // FACES
107   myPrimalMesh.faces                  = NULL;
108   myPrimalMesh.cellToFacesOwner       = NULL;
109   myPrimalMesh.cellToFacesNeighbour   = NULL;
110   
111   //  SEGMENTS
112   myPrimalMesh.segments                       = NULL;
113   myPrimalMesh.vertexToSegmentOwner           = NULL;
114   myPrimalMesh.vertexToSegmentOwnerNumber     = NULL;
115   myPrimalMesh.vertexToSegmentNeighbour       = NULL;
116   myPrimalMesh.vertexToSegmentNeighbourNumber = NULL;
117   
118   myPrimalMesh.segmentToFaceOwner            = NULL;
119   myPrimalMesh.segmentToFaceOwnerNumber      = NULL;
120   myPrimalMesh.segmentToFaceNeighbour        = NULL;
121   myPrimalMesh.segmentToFaceNeighbourNumber  = NULL;
122   myPrimalMesh.segmentCentres                = NULL;
123   
124   myDualMesh.internalDualFaces               = NULL;
125   myDualMesh.segmentToInternalDualFace       = NULL;
126   myDualMesh.segmentToInternalDualFaceNumber = NULL;
127   myDualMesh.internalDualFaceArea            = NULL;
128   myDualMesh.internalDualFaceCentres         = NULL;
129   
130   // BOUNDARY
131   myPrimalMesh.faceBoundary                    = NULL;
132   myPrimalMesh.faceBoundaryNumber              = 0;
133   
134   
135   // Rectangular mesh with an ...
136   myPrimalMesh.cellNumber   = myPrimalMesh.M * myPrimalMesh.N * myPrimalMesh.P;
137   myPrimalMesh.vertexNumber = (myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
138   myPrimalMesh.faceNumber = 0;//HEXAHEDRON_FACES*myPrimalMesh.cellNumber;//(myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
139   myPrimalMesh.segmentNumber = 0;//QUAD*myPrimalMesh.faceNumber;//HEXAHEDRON_SEGMENTS * myPrimalMesh.cellNumber;; //2*(myPrimalMesh.M+1) * (myPrimalMesh.N+1) * (myPrimalMesh.P+1);
140   
141   setHandler(fault_handler);    
142   
143   myDualMesh.internalDualFacesNumber = 0;
144   
145   // création de **vertex
146   setHexahedreVertex(&myPrimalMesh);
147   
148   // nombre de vertex par cellules **cellToVertexNumber
149   setHexahedreCellToVertexNumber(&myPrimalMesh);
150   
151   // création du lien cellules vers vertex **cellToVertex 
152   setHexahedreCellToVertex(&myPrimalMesh);
153   
154   // lien vertex vers cellules
155   setHexahedreVertexToCellNumbers(&myPrimalMesh);
156   
157   setHexahedreVertexToCells(&myPrimalMesh);
158   
159   // cell to cells
160   setHexahedreCellToCells(&myPrimalMesh);
161   
162   setHexahedreCellToFacesOwnerNeighbour(&myPrimalMesh);
163   
164   setHexahedreFaceToCells(&myPrimalMesh);
165   
166   //  OLD
167   
168   setHexahedreSegments(&myPrimalMesh);
169   
170   setHexahedreVertexToSegments(&myPrimalMesh);
171   
172   setHexahedreSegmentToFaces(&myPrimalMesh);
173   
174   // centres
175   
176   setHexahedreSegmentsCentres(&myPrimalMesh);
177   
178   setHexahedreFaceCentersAreas(&myPrimalMesh);
179   
180   
181   setHexahedreVolumeCentroid(&myPrimalMesh);
182   
183   // DUAL MESH
184   setDualFaces(&myPrimalMesh,&myDualMesh);
185   
186   setDualFacesCentres(&myPrimalMesh, &myDualMesh);
187   
188   
189   setHexahedreBoundaryFaces(&myPrimalMesh);
190   
191   
192   warning("VOIR TO DO FILE");
193   
194   fflush(stderr);
195   fflush(stdout);
196   
197   affiche("%-40s : %ld\n","Cell number",myPrimalMesh.cellNumber);
198   affiche("%-40s : %ld\n","Vertex number",myPrimalMesh.vertexNumber);
199   affiche("%-40s : %ld\n","Surface number",myPrimalMesh.faceNumber);
200   affiche("%-40s : %ld\n","Segment number",myPrimalMesh.segmentNumber);
201   affiche("%-40s : %ld\n","Dual Face number",myDualMesh.internalDualFacesNumber);
202   
203   freeMemory(&myPrimalMesh, &myDualMesh);
204   todo();
206 #ifdef MMD_PARALLEL
207 #pragma omp parallel
209   printf("Hello from process: %d\n", omp_get_thread_num());  
212 #endif