]> SALOME platform Git repositories - modules/med.git/blob - src/MEDMEM/MEDMEM_CellModel.cxx
Salome HOME
Initialisation module MED_SRC de la base MED
[modules/med.git] / src / MEDMEM / MEDMEM_CellModel.cxx
1 /*
2  File MEDMEM_CellModel.cxx
3  $Header$
4 */
5
6 #include "utilities.h"
7 #include "MEDMEM_CellModel.hxx"
8
9 CELLMODEL::CELLMODEL(medGeometryElement t)
10 {
11   MESSAGE("CELLMODEL : constructeur pour le type " << t);
12   switch (t)
13     {
14     case MED_POINT1  : {
15       _name="MED_POINT1";
16       _type=t;
17       _dimension=0;
18       _numberOfVertexes=1;
19       _numberOfNodes=1;
20       // nothing else : POINT are none constituent
21       break;
22     }
23     case MED_SEG2    : {
24       _name="MED_SEG2" ;
25       _type=t;
26       _dimension=1;
27       _numberOfVertexes=2;
28       _numberOfNodes=2;
29       // constituent are POINT1 and we have no need to define _constituents vector
30       vector<medGeometryElement> vector_type(2,MED_POINT1) ;
31       vector<medGeometryElement> __constituents_type[]={vector_type};
32       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+1) ;
33       _constituentsType = _constituents_type ;
34       break;
35     }
36     case MED_SEG3    : {
37       _name="MED_SEG3" ;
38       _type=t;
39       _dimension=1;
40       _numberOfVertexes=2;
41       _numberOfNodes=3;
42       // constituent are POINT1 and we have no need to define _constituents vector
43       vector<medGeometryElement> vector_type(3,MED_POINT1) ;
44       vector<medGeometryElement> __constituents_type[]={vector_type};
45       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+1) ;
46       _constituentsType = _constituents_type ;
47       break;
48     }
49     case MED_TRIA3   : {
50       _name="MED_TRIA3" ;
51       _type=t;
52       _dimension=2;
53       _numberOfVertexes=3;
54       _numberOfNodes=3;
55       int _edge1[]={1,2} ;
56       int _edge2[]={2,3} ;
57       int _edge3[]={3,1} ;
58       vector<int> edge1(_edge1,_edge1+2) ;
59       vector<int> edge2(_edge2,_edge2+2) ;
60       vector<int> edge3(_edge3,_edge3+2) ;
61       vector<int> _vector_edge[]={edge1,edge2,edge3};
62       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+3) ;
63       vector< vector<int> > __constituents__[]={vector_edge};
64       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
65       _constituents = _constituents_ ;
66       vector<medGeometryElement> vector_edge_type(3,MED_SEG2) ;
67       vector<medGeometryElement> vector_type(3,MED_POINT1) ;
68       vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
69       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
70       _constituentsType = _constituents_type ;
71       break;
72     }
73     case MED_TRIA6   : {
74       _name="MED_TRIA6" ;
75       _type=t;
76       _dimension=2;
77       _numberOfVertexes=3;
78       _numberOfNodes=6;
79       int _edge1[]={1,2,4} ;
80       int _edge2[]={2,3,5} ;
81       int _edge3[]={3,1,6} ;
82       vector<int> edge1(_edge1,_edge1+3) ;
83       vector<int> edge2(_edge2,_edge2+3) ;
84       vector<int> edge3(_edge3,_edge3+3) ;
85       vector<int> _vector_edge[]={edge1,edge2,edge3};
86       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+3) ;
87       vector< vector<int> > __constituents__[]={vector_edge};
88       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
89       _constituents = _constituents_ ;
90       vector<medGeometryElement> vector_edge_type(3,MED_SEG3) ;
91       vector<medGeometryElement> vector_type(6,MED_POINT1) ;
92       vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
93       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
94       _constituentsType = _constituents_type ;
95       break;
96     }
97     case MED_QUAD4   : {
98       _name="MED_QUAD4" ;
99       _type=t;
100       _dimension=2;
101       _numberOfVertexes=4;
102       _numberOfNodes=4;
103       int _edge1[]={1,2} ;
104       int _edge2[]={2,3} ;
105       int _edge3[]={3,4} ;
106       int _edge4[]={4,1} ;
107       vector<int> edge1(_edge1,_edge1+2) ;
108       vector<int> edge2(_edge2,_edge2+2) ;
109       vector<int> edge3(_edge3,_edge3+2) ;
110       vector<int> edge4(_edge4,_edge4+2) ;
111       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4};
112       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+4) ;
113       vector< vector<int> > __constituents__[]={vector_edge};
114       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
115       _constituents = _constituents_ ;
116       vector<medGeometryElement> vector_edge_type(4,MED_SEG2) ;
117       vector<medGeometryElement> vector_type(4,MED_POINT1) ;
118       vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
119       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
120       _constituentsType = _constituents_type ;
121       break;
122     }
123     case MED_QUAD8   : {
124       _name="MED_QUAD8" ;
125       _type=t;
126       _dimension=2;
127       _numberOfVertexes=4;
128       _numberOfNodes=8;
129       int _edge1[]={1,2,5} ;
130       int _edge2[]={2,3,6} ;
131       int _edge3[]={3,4,7} ;
132       int _edge4[]={4,1,8} ;
133       vector<int> edge1(_edge1,_edge1+3) ;
134       vector<int> edge2(_edge2,_edge2+3) ;
135       vector<int> edge3(_edge3,_edge3+3) ;
136       vector<int> edge4(_edge4,_edge4+3) ;
137       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4};
138       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+4) ;
139       vector< vector<int> > __constituents__[]={vector_edge};
140       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
141       _constituents = _constituents_ ;
142       vector<medGeometryElement> vector_edge_type(4,MED_SEG3) ;
143       vector<medGeometryElement> vector_type(8,MED_POINT1) ;
144       vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
145       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
146       _constituentsType = _constituents_type ;
147       break;
148     }
149     case MED_TETRA4  : {
150       _name="MED_TETRA4" ;
151       _type=t;
152       _dimension=3;
153       _numberOfVertexes=4;
154       _numberOfNodes=4;
155       int _edge1[]={1,2} ;
156       int _edge2[]={2,3} ;
157       int _edge3[]={3,1} ;
158       int _edge4[]={1,4} ;
159       int _edge5[]={2,4} ;
160       int _edge6[]={3,4} ;
161       vector<int> edge1(_edge1,_edge1+2) ;
162       vector<int> edge2(_edge2,_edge2+2) ;
163       vector<int> edge3(_edge3,_edge3+2) ;
164       vector<int> edge4(_edge4,_edge4+2) ;
165       vector<int> edge5(_edge5,_edge5+2) ;
166       vector<int> edge6(_edge6,_edge6+2) ;
167       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6};
168       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+6) ;
169       int _face1[]={1,2,3} ;
170       int _face2[]={1,4,2} ;
171       int _face3[]={2,4,3} ;
172       int _face4[]={3,4,1} ;
173       vector<int> face1(_face1,_face1+3) ;
174       vector<int> face2(_face2,_face2+3) ;
175       vector<int> face3(_face3,_face3+3) ;
176       vector<int> face4(_face4,_face4+3) ;
177       vector<int> _vector_face[] = {face1,face2,face3,face4} ;
178       vector< vector<int> > vector_face(_vector_face,_vector_face+4) ;
179       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
180       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
181       _constituents = _constituents_ ;
182       vector<medGeometryElement> vector_edge_type(6,MED_SEG2) ;
183       vector<medGeometryElement> vector_face_type(4,MED_TRIA3) ;
184       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
185       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
186       _constituentsType = _constituents_type ;
187       break;
188     }
189     case MED_TETRA10 : {
190       _name="MED_TETRA10" ;
191       _type=t;
192       _dimension=3;
193       _numberOfVertexes=4;
194       _numberOfNodes=10;
195       int _edge1[]={1,2,5} ;
196       int _edge2[]={2,3,6} ;
197       int _edge3[]={3,1,7} ;
198       int _edge4[]={1,4,8} ;
199       int _edge5[]={2,4,9} ;
200       int _edge6[]={3,4,10} ;
201       vector<int> edge1(_edge1,_edge1+3) ;
202       vector<int> edge2(_edge2,_edge2+3) ;
203       vector<int> edge3(_edge3,_edge3+3) ;
204       vector<int> edge4(_edge4,_edge4+3) ;
205       vector<int> edge5(_edge5,_edge5+3) ;
206       vector<int> edge6(_edge6,_edge6+3) ;
207       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6};
208       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+6) ;
209       int _face1[]={1,2,3,5,6,7} ;
210       int _face2[]={1,4,2,8,9,5} ;
211       int _face3[]={2,4,3,9,10,6} ;
212       int _face4[]={3,4,1,10,8,7} ;
213       vector<int> face1(_face1,_face1+6) ;
214       vector<int> face2(_face2,_face2+6) ;
215       vector<int> face3(_face3,_face3+6) ;
216       vector<int> face4(_face4,_face4+6) ;
217       vector<int> _vector_face[] = {face1,face2,face3,face4} ;
218       vector< vector<int> > vector_face(_vector_face,_vector_face+4) ;
219       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
220       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
221       _constituents = _constituents_ ;
222       vector<medGeometryElement> vector_edge_type(6,MED_SEG3) ;
223       vector<medGeometryElement> vector_face_type(4,MED_TRIA6) ;
224       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
225       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
226       _constituentsType = _constituents_type ;
227     break;
228     }
229     case MED_HEXA8   : {
230       _name="MED_HEXA8" ;
231       _type=t;
232       _dimension=3;
233       _numberOfVertexes=8;
234       _numberOfNodes=8;
235       int _edge1[]={1,2} ;
236       int _edge2[]={2,3} ;
237       int _edge3[]={3,4} ;
238       int _edge4[]={4,1} ;
239       int _edge5[]={5,6} ;
240       int _edge6[]={6,7} ;
241       int _edge7[]={7,8} ;
242       int _edge8[]={8,5} ;
243       int _edge9[]={1,5} ;
244       int _edge10[]={2,6} ;
245       int _edge11[]={3,7} ;
246       int _edge12[]={4,8} ;
247       vector<int> edge1(_edge1,_edge1+2) ;
248       vector<int> edge2(_edge2,_edge2+2) ;
249       vector<int> edge3(_edge3,_edge3+2) ;
250       vector<int> edge4(_edge4,_edge4+2) ;
251       vector<int> edge5(_edge5,_edge5+2) ;
252       vector<int> edge6(_edge6,_edge6+2) ;
253       vector<int> edge7(_edge7,_edge7+2) ;
254       vector<int> edge8(_edge8,_edge8+2) ;
255       vector<int> edge9(_edge9,_edge9+2) ;
256       vector<int> edge10(_edge10,_edge10+2) ;
257       vector<int> edge11(_edge11,_edge11+2) ;
258       vector<int> edge12(_edge12,_edge12+2) ;
259       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9,edge10,edge11,edge12};
260       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+12) ;
261       int _face1[]={1,2,3,4} ;
262       int _face2[]={5,8,7,6} ;
263       int _face3[]={1,5,6,2} ;
264       int _face4[]={2,6,7,3} ;
265       int _face5[]={3,7,8,4} ;
266       int _face6[]={4,8,5,1} ;
267       vector<int> face1(_face1,_face1+4) ;
268       vector<int> face2(_face2,_face2+4) ;
269       vector<int> face3(_face3,_face3+4) ;
270       vector<int> face4(_face4,_face4+4) ;
271       vector<int> face5(_face5,_face5+4) ;
272       vector<int> face6(_face6,_face6+4) ;
273       vector<int> _vector_face[] = {face1,face2,face3,face4,face5,face6} ;
274       vector< vector<int> > vector_face(_vector_face,_vector_face+6) ;
275       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
276       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
277       _constituents = _constituents_ ;
278       vector<medGeometryElement> vector_edge_type(12,MED_SEG2) ;
279       vector<medGeometryElement> vector_face_type(6,MED_QUAD4) ;
280       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
281       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2);
282       _constituentsType = _constituents_type ;
283       break;
284     }
285     case MED_HEXA20  : {
286       _name="MED_HEXA20" ;
287       _type=t;
288       _dimension=3;
289       _numberOfVertexes=8;
290       _numberOfNodes=20;
291
292       int _edge1[]={1,2,9} ;
293       int _edge2[]={2,3,10} ;
294       int _edge3[]={3,4,11} ;
295       int _edge4[]={4,1,12} ;
296       int _edge5[]={5,6,13} ;
297       int _edge6[]={6,7,14};
298       int _edge7[]={7,8,15} ; 
299       int _edge8[]={8,5,16} ;
300       int _edge9[]={1,5,17} ;
301       int _edge10[]={2,6,18} ;
302       int _edge11[]={3,7,19} ;
303       int _edge12[]={4,8,20} ;
304
305       vector<int> edge1(_edge1,_edge1+3) ;
306       vector<int> edge2(_edge2,_edge2+3) ;
307       vector<int> edge3(_edge3,_edge3+3) ;
308       vector<int> edge4(_edge4,_edge4+3) ;
309       vector<int> edge5(_edge5,_edge5+3) ;
310       vector<int> edge6(_edge6,_edge6+3) ;
311       vector<int> edge7(_edge7,_edge7+3) ;
312       vector<int> edge8(_edge8,_edge8+3) ;
313       vector<int> edge9(_edge9,_edge9+3) ;
314       vector<int> edge10(_edge10,_edge10+3) ;
315       vector<int> edge11(_edge11,_edge11+3) ;
316       vector<int> edge12(_edge12,_edge12+3) ;       
317       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9,edge10, edge11,edge12};
318       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+12) ;
319
320       int _face1[]={1,2,3,4,9,10,11,12} ;
321       int _face2[]={5,8,7,6,16,15,14,13} ;
322       int _face3[]={1,5,6,2,17,13,18,9} ;
323       int _face4[]={2,6,7,3,18,14,19,10} ;
324       int _face5[]={3,7,8,4,19,15,20,11} ;
325       int _face6[]={4,8,5,1,20,16,17,12} ;
326       vector<int> face1(_face1,_face1+8);
327       vector<int> face2(_face2,_face2+8);
328       vector<int> face3(_face3,_face3+8);
329       vector<int> face4(_face4,_face4+8);
330       vector<int> face5(_face5,_face5+8);
331       vector<int> face6(_face6,_face6+8);
332       vector<int> _vector_face[]= {face1,face2,face3,face4,face5,face6} ;
333       vector< vector<int> > vector_face(_vector_face,_vector_face+6);
334
335       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
336       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ; 
337       _constituents = _constituents_ ;
338       vector<medGeometryElement> vector_edge_type(12,MED_SEG3) ;
339       vector<medGeometryElement> vector_face_type(6,MED_QUAD8) ;
340       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
341       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
342       _constituentsType = _constituents_type ;
343       break;
344     }
345     case MED_PENTA6  : {
346       _name="MED_PENTA6" ;
347       _type=t;
348       _dimension=3;
349       _numberOfVertexes=6;
350       _numberOfNodes=6;
351
352       int _edge1[]= {1,2} ;
353       int _edge2[]= {2,3} ;
354       int _edge3[]= {3,1} ;
355       int _edge4[]= {4,5} ;
356       int _edge5[]= {5,6} ;
357       int _edge6[]= {6,4} ;
358       int _edge7[]= {1,4} ;
359       int _edge8[]= {2,5} ;
360       int _edge9[]= {3,6} ;
361
362       vector<int> edge1(_edge1,_edge1+2) ;
363       vector<int> edge2(_edge2,_edge2+2) ;
364       vector<int> edge3(_edge3,_edge3+2) ;
365       vector<int> edge4(_edge4,_edge4+2) ;
366       vector<int> edge5(_edge5,_edge5+2) ;
367       vector<int> edge6(_edge6,_edge6+2) ;
368       vector<int> edge7(_edge7,_edge7+2) ;
369       vector<int> edge8(_edge8,_edge8+2) ;
370       vector<int> edge9(_edge9,_edge9+2) ;    
371       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9};
372       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+9) ;
373
374       int _face1[]={1,2,3};
375       int _face2[]={4,6,5};
376       int _face3[]={1,4,5,2};
377       int _face4[]={2,5,6,3};
378       int _face5[]={3,6,4,1};
379       vector<int> face1(_face1,_face1+3);
380       vector<int> face2(_face2,_face2+3);
381       vector<int> face3(_face3,_face3+4);
382       vector<int> face4(_face4,_face4+4);
383       vector<int> face5(_face5,_face5+4);
384       vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
385       vector< vector<int> > vector_face(_vector_face,_vector_face+5);
386  
387       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
388       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
389       _constituents = _constituents_ ;
390       vector<medGeometryElement> vector_edge_type(9,MED_SEG2) ;
391       vector<medGeometryElement> vector_face_type(5,MED_QUAD4) ;
392       vector_face_type[0]=MED_TRIA3 ;
393       vector_face_type[1]=MED_TRIA3 ;
394       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
395       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
396       _constituentsType = _constituents_type ;
397       break;
398     }
399     case MED_PENTA15 : {
400       _name="MED_PENTA15" ;
401       _type=t;
402       _dimension=3;
403       _numberOfVertexes=6;
404       _numberOfNodes=15;
405       int _edge1[]={1,2,7} ;
406       int _edge2[]={2,3,8} ;
407       int _edge3[]={3,1,9} ;
408       int _edge4[]={4,5,10} ;
409       int _edge5[]={5,6,11} ;
410       int _edge6[]={6,4,12} ;
411       int _edge7[]={1,4,13} ;
412       int _edge8[]={2,5,14} ;
413       int _edge9[]={3,6,15} ;
414
415       vector<int> edge1(_edge1,_edge1+3) ;
416       vector<int> edge2(_edge2,_edge2+3) ;
417       vector<int> edge3(_edge3,_edge3+3) ;
418       vector<int> edge4(_edge4,_edge4+3) ;
419       vector<int> edge5(_edge5,_edge5+3) ;
420       vector<int> edge6(_edge6,_edge6+3) ;
421       vector<int> edge7(_edge7,_edge7+3) ;
422       vector<int> edge8(_edge8,_edge8+3) ;
423       vector<int> edge9(_edge9,_edge9+3) ;    
424      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9};
425       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+9) ;
426
427       int _face1[]={1,2,3,7,8,9};
428       int _face2[]={4,6,5,12,11,10};
429       int _face3[]={1,4,5,2,13,10,14,7};
430       int _face4[]={2,5,6,3,14,11,15,8};
431       int _face5[]={3,6,4,1,15,12,13,9};
432       vector<int> face1(_face1,_face1+6);
433       vector<int> face2(_face2,_face2+6);
434       vector<int> face3(_face3,_face3+8);
435       vector<int> face4(_face4,_face4+8);
436       vector<int> face5(_face5,_face5+8);
437       vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
438       vector< vector<int> > vector_face(_vector_face,_vector_face+5);
439
440       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
441       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
442       _constituents = _constituents_ ;
443       vector<medGeometryElement> vector_edge_type(9,MED_SEG3) ;
444       vector<medGeometryElement> vector_face_type(5,MED_QUAD8) ;
445       vector_face_type[0]=MED_TRIA6 ;
446       vector_face_type[1]=MED_TRIA6 ;
447       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
448       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
449       _constituentsType = _constituents_type ;
450       break;
451     }
452     case MED_PYRA5   : {
453       _name="MED_PYRA5" ;
454       _type=t;
455       _dimension=3;
456       _numberOfVertexes=5;
457       _numberOfNodes=5;
458       int _edge1[]={1,2} ;
459       int _edge2[]={2,3} ;
460       int _edge3[]={3,4} ;
461       int _edge4[]={4,1} ;
462       int _edge5[]={1,5} ;
463       int _edge6[]={2,5} ;
464       int _edge7[]={3,5} ;
465       int _edge8[]={4,5} ;
466
467       vector<int> edge1(_edge1,_edge1+2) ;
468       vector<int> edge2(_edge2,_edge2+2) ;
469       vector<int> edge3(_edge3,_edge3+2) ;
470       vector<int> edge4(_edge4,_edge4+2) ;
471       vector<int> edge5(_edge5,_edge5+2) ;
472       vector<int> edge6(_edge6,_edge6+2) ;
473       vector<int> edge7(_edge7,_edge7+2) ;
474       vector<int> edge8(_edge8,_edge8+2) ;
475      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8};
476       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+8) ;
477
478       int _face1[]={1,2,3,4} ;
479       int _face2[]={1,5,2} ;
480       int _face3[]={2,5,3} ;
481       int _face4[]={3,5,4} ;
482       int _face5[]={4,5,1} ;
483       vector<int> face1(_face1,_face1+4);
484       vector<int> face2(_face2,_face2+3);
485       vector<int> face3(_face3,_face3+3);
486       vector<int> face4(_face4,_face4+3);
487       vector<int> face5(_face5,_face5+3);
488       vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
489       vector< vector<int> > vector_face(_vector_face,_vector_face+5);
490
491       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
492       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
493       _constituents = _constituents_ ;
494       vector<medGeometryElement> vector_edge_type(8,MED_SEG2) ;
495       vector<medGeometryElement> vector_face_type(5,MED_TRIA3) ;
496       vector_face_type[0]=MED_QUAD4 ;
497     vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
498       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
499       _constituentsType = _constituents_type ;
500       break;
501     }
502     case MED_PYRA13  : {
503       _name="MED_PYRA13" ;
504       _type=t;
505       _dimension=3;
506       _numberOfVertexes=5;
507       _numberOfNodes=13;
508       int _edge1[]={1,2,6} ;
509       int _edge2[]={2,3,7} ;
510       int _edge3[]={3,4,8} ;
511       int _edge4[]={4,1,9} ;
512       int _edge5[]={1,5,10} ;
513       int _edge6[]={2,5,11} ;
514       int _edge7[]={3,5,12} ;
515       int _edge8[]={4,5,13} ;
516
517       vector<int> edge1(_edge1,_edge1+3) ;
518       vector<int> edge2(_edge2,_edge2+3) ;
519       vector<int> edge3(_edge3,_edge3+3) ;
520       vector<int> edge4(_edge4,_edge4+3) ;
521       vector<int> edge5(_edge5,_edge5+3) ;
522       vector<int> edge6(_edge6,_edge6+3) ;
523       vector<int> edge7(_edge7,_edge7+3) ;
524       vector<int> edge8(_edge8,_edge8+3) ;
525
526
527       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8};
528       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+8) ;
529
530       int _face1[]={1,2,3,4,6,7,8,9} ;
531       int _face2[]={1,5,2,10,11,6} ;
532       int _face3[]={2,5,3,11,12,7} ;
533       int _face4[]={3,5,4,12,13,8} ;
534       int _face5[]={4,5,1,13,10,9} ;
535       vector<int> face1(_face1,_face1+8);
536       vector<int> face2(_face2,_face2+6);
537       vector<int> face3(_face3,_face3+6);
538       vector<int> face4(_face4,_face4+6);
539       vector<int> face5(_face5,_face5+6);
540       vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
541       vector< vector<int> > vector_face(_vector_face,_vector_face+5);
542
543
544       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
545       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
546       _constituents = _constituents_ ;
547       vector<medGeometryElement> vector_edge_type(8,MED_SEG3) ;
548       vector<medGeometryElement> vector_face_type(5,MED_TRIA6) ;
549       vector_face_type[0]=MED_QUAD8 ;
550      vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
551       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
552
553       _constituentsType = _constituents_type ;
554       break;
555     }
556 //      default : 
557 //        _type=0;
558 //        break;
559     }
560 }
561
562 ostream & operator<<(ostream &os,const CELLMODEL &my)
563 {
564   os << "Cell Model :" << endl ;
565   os << "  - name               : " << my._name << endl;
566   os << "  - type               : " << (int)my._type << endl;
567   os << "  - dimension          : " << my._dimension << endl;
568   os << "  - number of nodes    : " << my._numberOfNodes << endl ;
569   os << "  - number of vertexes : " << my._numberOfVertexes << endl ;
570   for(int i=0;i<my._constituents.size();i++)
571     {
572       os << "  - for dimension (-" << i+1 << ") : " << endl ;
573       for(int j=0;j<my._constituents[i].size();j++)
574         {
575           os << "    - constituents " << j+1 << " of type "<< my._constituentsType[i][j] <<" : " ;
576           for(int k=0;k<my._constituents[i][j].size();k++)
577             os << my._constituents[i][j][k] << " " ;
578           os << endl ;
579         }
580     }
581   return os;
582 }
583
584
585
586   // Return number of constituents type (which dimension is _dimension-1).
587 int CELLMODEL::getNumberOfConstituentsType() const
588 {
589   set<medGeometryElement> constituentsTypes ;
590   if (_constituentsType.size() > 0 ) {
591     vector<medGeometryElement> constituentsType = _constituentsType[0] ;
592     vector<medGeometryElement>::iterator itvec ;
593     for(itvec=constituentsType.begin();itvec!=constituentsType.end();itvec++)
594       constituentsTypes.insert(*itvec);
595   }
596   return constituentsTypes.size() ;
597 }
598
599   // Return all types of constituents which dimension is (_dimension-1).
600 set <medGeometryElement>  CELLMODEL::getAllConstituentsType() const
601 {
602   set<medGeometryElement> constituentsTypes ;
603   if (_constituentsType.size() > 0 ) {
604     vector<medGeometryElement> constituentsType = _constituentsType[0] ;
605     vector<medGeometryElement>::iterator itvec ;
606     for(itvec=constituentsType.begin();itvec!=constituentsType.end();itvec++)
607       constituentsTypes.insert(*itvec);
608   }
609   return constituentsTypes ;
610 }
611
612   // Return number of constituents foreach type (which dimension is _dimension-1).
613 map <medGeometryElement,int>  CELLMODEL::getNumberOfConstituentsForeachType() const
614 {
615   map<medGeometryElement,int> numberOfConstituentsForeachType ;
616   map<medGeometryElement,int>::iterator itmap ;
617   if (_constituentsType.size() > 0 ) {
618     vector<medGeometryElement> constituentsType = _constituentsType[0] ;
619     vector<medGeometryElement>::iterator itvec ;
620     for(itvec=constituentsType.begin();itvec!=constituentsType.end();itvec++) {
621       itmap = numberOfConstituentsForeachType.find(*itvec);
622       if (itmap==numberOfConstituentsForeachType.end()) // new element
623         numberOfConstituentsForeachType[*itvec]=1 ;
624       else
625         numberOfConstituentsForeachType[*itvec]++ ;
626     }
627   }
628   return numberOfConstituentsForeachType ;
629 }