Salome HOME
NRI : Update 1.1a and New organisation.
[modules/med.git] / src / MEDMEM / MEDMEM_CellModel.cxx
index 0f7f7b3a6fe9abbbed4bc57b1010675b6c35028a..d4c66f95816e1b993209d1256ad99d6c1260706d 100644 (file)
@@ -1,3 +1,4 @@
+using namespace std;
 /*
  File MEDMEM_CellModel.cxx
  $Header$
@@ -8,6 +9,17 @@
 
 CELLMODEL::CELLMODEL(medGeometryElement t)
 {
+  // init first all to nothing
+  _dimension=0 ;
+  _numberOfNodes=0 ;
+  _numberOfVertexes=0 ;
+  _numberOfConstituentsDimension=0 ;
+  _numberOfConstituents=(int*)NULL ;
+  _numberOfNodeOfEachConstituent=(int**)NULL ;
+  _constituents=(int***)NULL ; 
+  //_numberOfonstituentsType=(int*)NULL ;
+  _constituentsType=(medGeometryElement**)NULL ;
+  
   MESSAGE("CELLMODEL : constructeur pour le type " << t);
   switch (t)
     {
@@ -27,10 +39,31 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _numberOfVertexes=2;
       _numberOfNodes=2;
       // constituent are POINT1 and we have no need to define _constituents vector
-      vector<medGeometryElement> vector_type(2,MED_POINT1) ;
-      vector<medGeometryElement> __constituents_type[]={vector_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+1) ;
-      _constituentsType = _constituents_type ;
+//       vector<medGeometryElement> vector_type(2,MED_POINT1) ;
+//       vector<medGeometryElement> __constituents_type[]={vector_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+1) ;
+//       _constituentsType = _constituents_type ;
+      //_constituentsType[2][1]={{MED_POINT1,MED_POINT1}} ;
+      _numberOfConstituentsDimension=1 ;
+      _numberOfConstituents=new int[1] ;
+      _numberOfConstituents[0]=2 ;
+      _numberOfNodeOfEachConstituent=new (int*)[1] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[2] ;
+      _numberOfNodeOfEachConstituent[0][0]=1 ;
+      _numberOfNodeOfEachConstituent[0][1]=1 ;
+
+      _constituents = new (int**)[1] ;
+      _constituents[0] = new (int*)[2] ;
+      _constituents[0][0] = new int[1] ;
+      _constituents[0][0][0] = 1 ;
+      _constituents[0][1] = new int[1] ;
+      _constituents[0][1][0] = 2 ;
+
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[2] ;
+      tmpConstituentsType1[0] = MED_POINT1 ;
+      tmpConstituentsType1[1] = MED_POINT1 ;
+      _constituentsType = new medGeometryElement*[1] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
       break;
     }
     case MED_SEG3    : {
@@ -40,10 +73,34 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _numberOfVertexes=2;
       _numberOfNodes=3;
       // constituent are POINT1 and we have no need to define _constituents vector
-      vector<medGeometryElement> vector_type(3,MED_POINT1) ;
-      vector<medGeometryElement> __constituents_type[]={vector_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+1) ;
-      _constituentsType = _constituents_type ;
+//       vector<medGeometryElement> vector_type(3,MED_POINT1) ;
+//       vector<medGeometryElement> __constituents_type[]={vector_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+1) ;
+//       _constituentsType = _constituents_type ;
+      _numberOfConstituentsDimension=1 ;
+      _numberOfConstituents=new int[1] ;
+      _numberOfConstituents[0]=3 ;
+      _numberOfNodeOfEachConstituent=new (int*)[1] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[3] ;
+      _numberOfNodeOfEachConstituent[0][0]=1 ;
+      _numberOfNodeOfEachConstituent[0][1]=1 ;
+      _numberOfNodeOfEachConstituent[0][2]=1 ;
+
+      _constituents = new (int**)[1] ;
+      _constituents[0] = new (int*)[3] ;
+      _constituents[0][0] = new int[1] ;
+      _constituents[0][0][0] = 1 ;
+      _constituents[0][1] = new int[1] ;
+      _constituents[0][1][0] = 2 ;
+      _constituents[0][2] = new int[1] ;
+      _constituents[0][2][0] = 3 ;
+
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[3] ;
+      tmpConstituentsType1[0] = MED_POINT1 ;
+      tmpConstituentsType1[1] = MED_POINT1 ;
+      tmpConstituentsType1[2] = MED_POINT1 ;
+      _constituentsType = new medGeometryElement*[1] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
       break;
     }
     case MED_TRIA3   : {
@@ -52,22 +109,46 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _dimension=2;
       _numberOfVertexes=3;
       _numberOfNodes=3;
-      int _edge1[]={1,2} ;
-      int _edge2[]={2,3} ;
-      int _edge3[]={3,1} ;
-      vector<int> edge1(_edge1,_edge1+2) ;
-      vector<int> edge2(_edge2,_edge2+2) ;
-      vector<int> edge3(_edge3,_edge3+2) ;
-      vector<int> _vector_edge[]={edge1,edge2,edge3};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+3) ;
-      vector< vector<int> > __constituents__[]={vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(3,MED_SEG2) ;
-      vector<medGeometryElement> vector_type(3,MED_POINT1) ;
-      vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-      _constituentsType = _constituents_type ;
+
+      _numberOfConstituentsDimension=1 ;
+      _numberOfConstituents=new int[1] ;
+      _numberOfConstituents[0]=3 ;
+      _numberOfNodeOfEachConstituent=new (int*)[1] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[3] ;
+      _numberOfNodeOfEachConstituent[0][0]=2 ;
+      _numberOfNodeOfEachConstituent[0][1]=2 ;
+      _numberOfNodeOfEachConstituent[0][2]=2 ;
+
+      int* _edge1=new int[2];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      int* _edge2=new int[2];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      int* _edge3=new int[2];
+      _edge3[0]=3;
+      _edge3[1]=1;
+      int ** tmpConstituents1 = new (int*)[3];
+      tmpConstituents1[0]=_edge1 ;
+      tmpConstituents1[1]=_edge2 ;
+      tmpConstituents1[2]=_edge3 ;
+      _constituents = new int**[1] ;
+      _constituents[0]=tmpConstituents1 ;
+
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[3] ;
+      tmpConstituentsType1[0] = MED_SEG2 ;
+      tmpConstituentsType1[1] = MED_SEG2 ;
+      tmpConstituentsType1[2] = MED_SEG2 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[3] ;
+      tmpConstituentsType2[0] = MED_POINT1 ;
+      tmpConstituentsType2[1] = MED_POINT1 ;
+      tmpConstituentsType2[2] = MED_POINT1 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
+      // Well, point are defined, but could not be acces because we have 
+      // only 1 numberOfConstituentsDimension !
+
       break;
     }
     case MED_TRIA6   : {
@@ -76,22 +157,67 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _dimension=2;
       _numberOfVertexes=3;
       _numberOfNodes=6;
-      int _edge1[]={1,2,4} ;
-      int _edge2[]={2,3,5} ;
-      int _edge3[]={3,1,6} ;
-      vector<int> edge1(_edge1,_edge1+3) ;
-      vector<int> edge2(_edge2,_edge2+3) ;
-      vector<int> edge3(_edge3,_edge3+3) ;
-      vector<int> _vector_edge[]={edge1,edge2,edge3};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+3) ;
-      vector< vector<int> > __constituents__[]={vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(3,MED_SEG3) ;
-      vector<medGeometryElement> vector_type(6,MED_POINT1) ;
-      vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-      _constituentsType = _constituents_type ;
+//       int _edge1[]={1,2,4} ;
+//       int _edge2[]={2,3,5} ;
+//       int _edge3[]={3,1,6} ;
+//       vector<int> edge1(_edge1,_edge1+3) ;
+//       vector<int> edge2(_edge2,_edge2+3) ;
+//       vector<int> edge3(_edge3,_edge3+3) ;
+//       vector<int> _vector_edge[]={edge1,edge2,edge3};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+3) ;
+//       vector< vector<int> > __constituents__[]={vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
+//       _constituents = _constituents_ ;
+      _numberOfConstituentsDimension=1 ;
+      _numberOfConstituents=new int[1] ;
+      _numberOfConstituents[0]=3 ;
+      _numberOfNodeOfEachConstituent=new (int*)[1] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[3] ;
+      _numberOfNodeOfEachConstituent[0][0]=3 ;
+      _numberOfNodeOfEachConstituent[0][1]=3 ;
+      _numberOfNodeOfEachConstituent[0][2]=3 ;
+
+      int* _edge1=new int[3];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      _edge1[2]=4;
+      int* _edge2=new int[3];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      _edge2[2]=5;
+      int* _edge3=new int[3];
+      _edge3[0]=3;
+      _edge3[1]=1;
+      _edge3[2]=6;
+      int ** tmpConstituents1 = new (int*)[3];
+      tmpConstituents1[0]=_edge1 ;
+      tmpConstituents1[1]=_edge2 ;
+      tmpConstituents1[2]=_edge3 ;
+      _constituents = new int**[1] ;
+      _constituents[0]=tmpConstituents1 ;
+//       vector<medGeometryElement> vector_edge_type(3,MED_SEG3) ;
+//       vector<medGeometryElement> vector_type(6,MED_POINT1) ;
+//       vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
+//       _constituentsType = _constituents_type ;
+      //_constituentsType={{MED_SEG3,MED_SEG3,MED_SEG3},{MED_POINT1,MED_POINT1,MED_POINT1,MED_POINT1,MED_POINT1,MED_POINT1}} ;      
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[3] ;
+      tmpConstituentsType1[0] = MED_SEG3 ;
+      tmpConstituentsType1[1] = MED_SEG3 ;
+      tmpConstituentsType1[2] = MED_SEG3 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[6] ;
+      tmpConstituentsType2[0] = MED_POINT1 ;
+      tmpConstituentsType2[1] = MED_POINT1 ;
+      tmpConstituentsType2[2] = MED_POINT1 ;
+      tmpConstituentsType2[3] = MED_POINT1 ;
+      tmpConstituentsType2[4] = MED_POINT1 ;
+      tmpConstituentsType2[5] = MED_POINT1 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
+      // Well, point are defined, but could not be acces because we have 
+      // only 1 numberOfConstituentsDimension !
+
       break;
     }
     case MED_QUAD4   : {
@@ -100,24 +226,71 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _dimension=2;
       _numberOfVertexes=4;
       _numberOfNodes=4;
-      int _edge1[]={1,2} ;
-      int _edge2[]={2,3} ;
-      int _edge3[]={3,4} ;
-      int _edge4[]={4,1} ;
-      vector<int> edge1(_edge1,_edge1+2) ;
-      vector<int> edge2(_edge2,_edge2+2) ;
-      vector<int> edge3(_edge3,_edge3+2) ;
-      vector<int> edge4(_edge4,_edge4+2) ;
-      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+4) ;
-      vector< vector<int> > __constituents__[]={vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(4,MED_SEG2) ;
-      vector<medGeometryElement> vector_type(4,MED_POINT1) ;
-      vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-      _constituentsType = _constituents_type ;
+//       int _edge1[]={1,2} ;
+//       int _edge2[]={2,3} ;
+//       int _edge3[]={3,4} ;
+//       int _edge4[]={4,1} ;
+//       vector<int> edge1(_edge1,_edge1+2) ;
+//       vector<int> edge2(_edge2,_edge2+2) ;
+//       vector<int> edge3(_edge3,_edge3+2) ;
+//       vector<int> edge4(_edge4,_edge4+2) ;
+//       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+4) ;
+//       vector< vector<int> > __constituents__[]={vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
+//       _constituents = _constituents_ ;
+      //_constituents={{{1,2},{2,3},{3,4},{4,1}}} ;
+      _numberOfConstituentsDimension=1 ;
+      _numberOfConstituents=new int[1] ;
+      _numberOfConstituents[0]=4 ;
+      _numberOfNodeOfEachConstituent=new (int*)[1] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[4] ;
+      _numberOfNodeOfEachConstituent[0][0]=2 ;
+      _numberOfNodeOfEachConstituent[0][1]=2 ;
+      _numberOfNodeOfEachConstituent[0][2]=2 ;
+      _numberOfNodeOfEachConstituent[0][3]=2 ;
+
+      int* _edge1=new int[2];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      int* _edge2=new int[2];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      int* _edge3=new int[2];
+      _edge3[0]=3;
+      _edge3[1]=4;
+      int* _edge4=new int[2];
+      _edge4[0]=4;
+      _edge4[1]=1;
+      int ** tmpConstituents1 = new (int*)[4];
+      tmpConstituents1[0]=_edge1 ;
+      tmpConstituents1[1]=_edge2 ;
+      tmpConstituents1[2]=_edge3 ;
+      tmpConstituents1[3]=_edge4 ;
+      _constituents = new int**[1] ;
+      _constituents[0]=tmpConstituents1 ;
+//       vector<medGeometryElement> vector_edge_type(4,MED_SEG2) ;
+//       vector<medGeometryElement> vector_type(4,MED_POINT1) ;
+//       vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
+//       _constituentsType = _constituents_type ;
+      //_constituentsType={{MED_SEG2,MED_SEG2,MED_SEG2,MED_SEG2},{MED_POINT1,MED_POINT1,MED_POINT1,MED_POINT1}} ;      
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[4] ;
+      tmpConstituentsType1[0] = MED_SEG2 ;
+      tmpConstituentsType1[1] = MED_SEG2 ;
+      tmpConstituentsType1[2] = MED_SEG2 ;
+      tmpConstituentsType1[3] = MED_SEG2 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[4] ;
+      tmpConstituentsType2[0] = MED_POINT1 ;
+      tmpConstituentsType2[1] = MED_POINT1 ;
+      tmpConstituentsType2[2] = MED_POINT1 ;
+      tmpConstituentsType2[3] = MED_POINT1 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
+      // Well, point are defined, but could not be acces because we have 
+      // only 1 numberOfConstituentsDimension !
+
       break;
     }
     case MED_QUAD8   : {
@@ -126,24 +299,79 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _dimension=2;
       _numberOfVertexes=4;
       _numberOfNodes=8;
-      int _edge1[]={1,2,5} ;
-      int _edge2[]={2,3,6} ;
-      int _edge3[]={3,4,7} ;
-      int _edge4[]={4,1,8} ;
-      vector<int> edge1(_edge1,_edge1+3) ;
-      vector<int> edge2(_edge2,_edge2+3) ;
-      vector<int> edge3(_edge3,_edge3+3) ;
-      vector<int> edge4(_edge4,_edge4+3) ;
-      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+4) ;
-      vector< vector<int> > __constituents__[]={vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(4,MED_SEG3) ;
-      vector<medGeometryElement> vector_type(8,MED_POINT1) ;
-      vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-      _constituentsType = _constituents_type ;
+//       int _edge1[]={1,2,5} ;
+//       int _edge2[]={2,3,6} ;
+//       int _edge3[]={3,4,7} ;
+//       int _edge4[]={4,1,8} ;
+//       vector<int> edge1(_edge1,_edge1+3) ;
+//       vector<int> edge2(_edge2,_edge2+3) ;
+//       vector<int> edge3(_edge3,_edge3+3) ;
+//       vector<int> edge4(_edge4,_edge4+3) ;
+//       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+4) ;
+//       vector< vector<int> > __constituents__[]={vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+1) ;
+//       _constituents = _constituents_ ;
+      //_constituents={{{1,2,5},{2,3,6},{3,4,7},{4,1,8}}} ;
+      _numberOfConstituentsDimension=1 ;
+      _numberOfConstituents=new int[1] ;
+      _numberOfConstituents[0]=4 ;
+      _numberOfNodeOfEachConstituent=new (int*)[1] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[4] ;
+      _numberOfNodeOfEachConstituent[0][0]=3 ;
+      _numberOfNodeOfEachConstituent[0][1]=3 ;
+      _numberOfNodeOfEachConstituent[0][2]=3 ;
+      _numberOfNodeOfEachConstituent[0][3]=3 ;
+
+      int* _edge1=new int[3];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      _edge1[2]=5;
+      int* _edge2=new int[3];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      _edge2[2]=6;
+      int* _edge3=new int[3];
+      _edge3[0]=3;
+      _edge3[1]=4;
+      _edge3[2]=7;
+      int* _edge4=new int[3];
+      _edge4[0]=4;
+      _edge4[1]=1;
+      _edge4[2]=8;
+      int ** tmpConstituents1 = new (int*)[4];
+      tmpConstituents1[0]=_edge1 ;
+      tmpConstituents1[1]=_edge2 ;
+      tmpConstituents1[2]=_edge3 ;
+      tmpConstituents1[3]=_edge4 ;
+      _constituents = new int**[1] ;
+      _constituents[0]=tmpConstituents1 ;
+//       vector<medGeometryElement> vector_edge_type(4,MED_SEG3) ;
+//       vector<medGeometryElement> vector_type(8,MED_POINT1) ;
+//       vector<medGeometryElement> __constituents_type[]={vector_edge_type,vector_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
+//       _constituentsType = _constituents_type ;
+      //_constituentsType={{MED_SEG3,MED_SEG3,MED_SEG3,MED_SEG3},{MED_POINT1,MED_POINT1,MED_POINT1,MED_POINT1,MED_POINT1,MED_POINT1,MED_POINT1,MED_POINT1} ;
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[4] ;
+      tmpConstituentsType1[0] = MED_SEG3 ;
+      tmpConstituentsType1[1] = MED_SEG3 ;
+      tmpConstituentsType1[2] = MED_SEG3 ;
+      tmpConstituentsType1[3] = MED_SEG3 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[4] ;
+      tmpConstituentsType2[0] = MED_POINT1 ;
+      tmpConstituentsType2[1] = MED_POINT1 ;
+      tmpConstituentsType2[2] = MED_POINT1 ;
+      tmpConstituentsType2[3] = MED_POINT1 ;
+      tmpConstituentsType2[4] = MED_POINT1 ;
+      tmpConstituentsType2[5] = MED_POINT1 ;
+      tmpConstituentsType2[6] = MED_POINT1 ;
+      tmpConstituentsType2[7] = MED_POINT1 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
+      // Well, point are defined, but could not be acces because we have 
+      // only 1 numberOfConstituentsDimension !
+
       break;
     }
     case MED_TETRA4  : {
@@ -152,38 +380,122 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _dimension=3;
       _numberOfVertexes=4;
       _numberOfNodes=4;
-      int _edge1[]={1,2} ;
-      int _edge2[]={2,3} ;
-      int _edge3[]={3,1} ;
-      int _edge4[]={1,4} ;
-      int _edge5[]={2,4} ;
-      int _edge6[]={3,4} ;
-      vector<int> edge1(_edge1,_edge1+2) ;
-      vector<int> edge2(_edge2,_edge2+2) ;
-      vector<int> edge3(_edge3,_edge3+2) ;
-      vector<int> edge4(_edge4,_edge4+2) ;
-      vector<int> edge5(_edge5,_edge5+2) ;
-      vector<int> edge6(_edge6,_edge6+2) ;
-      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+6) ;
-      int _face1[]={1,2,3} ;
-      int _face2[]={1,4,2} ;
-      int _face3[]={2,4,3} ;
-      int _face4[]={3,4,1} ;
-      vector<int> face1(_face1,_face1+3) ;
-      vector<int> face2(_face2,_face2+3) ;
-      vector<int> face3(_face3,_face3+3) ;
-      vector<int> face4(_face4,_face4+3) ;
-      vector<int> _vector_face[] = {face1,face2,face3,face4} ;
-      vector< vector<int> > vector_face(_vector_face,_vector_face+4) ;
-      vector< vector<int> > __constituents__[]={vector_face,vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(6,MED_SEG2) ;
-      vector<medGeometryElement> vector_face_type(4,MED_TRIA3) ;
-      vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-      _constituentsType = _constituents_type ;
+//       int _edge1[]={1,2} ;
+//       int _edge2[]={2,3} ;
+//       int _edge3[]={3,1} ;
+//       int _edge4[]={1,4} ;
+//       int _edge5[]={2,4} ;
+//       int _edge6[]={3,4} ;
+//       vector<int> edge1(_edge1,_edge1+2) ;
+//       vector<int> edge2(_edge2,_edge2+2) ;
+//       vector<int> edge3(_edge3,_edge3+2) ;
+//       vector<int> edge4(_edge4,_edge4+2) ;
+//       vector<int> edge5(_edge5,_edge5+2) ;
+//       vector<int> edge6(_edge6,_edge6+2) ;
+//       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+6) ;
+//       int _face1[]={1,2,3} ;
+//       int _face2[]={1,4,2} ;
+//       int _face3[]={2,4,3} ;
+//       int _face4[]={3,4,1} ;
+//       vector<int> face1(_face1,_face1+3) ;
+//       vector<int> face2(_face2,_face2+3) ;
+//       vector<int> face3(_face3,_face3+3) ;
+//       vector<int> face4(_face4,_face4+3) ;
+//       vector<int> _vector_face[] = {face1,face2,face3,face4} ;
+//       vector< vector<int> > vector_face(_vector_face,_vector_face+4) ;
+//       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
+//       _constituents = _constituents_ ;
+      //_constituents={{{1,2,3},{1,4,2},{2,4,3},{3,4,1}},{{1,2},{2,3},{3,1},{1,4},{2,4},{3,4}}} ;
+      _numberOfConstituentsDimension=2 ;
+      _numberOfConstituents=new int[2] ;
+      _numberOfConstituents[0]=4 ;
+      _numberOfConstituents[1]=6 ;
+      _numberOfNodeOfEachConstituent=new (int*)[2] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[4] ;
+      _numberOfNodeOfEachConstituent[0][0]=3 ;
+      _numberOfNodeOfEachConstituent[0][1]=3 ;
+      _numberOfNodeOfEachConstituent[0][2]=3 ;
+      _numberOfNodeOfEachConstituent[0][3]=3 ;
+      _numberOfNodeOfEachConstituent[1]=new (int)[6] ;
+      _numberOfNodeOfEachConstituent[1][0]=2 ;
+      _numberOfNodeOfEachConstituent[1][1]=2 ;
+      _numberOfNodeOfEachConstituent[1][2]=2 ;
+      _numberOfNodeOfEachConstituent[1][3]=2 ;
+      _numberOfNodeOfEachConstituent[1][4]=2 ;
+      _numberOfNodeOfEachConstituent[1][5]=2 ;
+
+      int* _face1=new int[3];
+      _face1[0]=1;
+      _face1[1]=2;
+      _face1[2]=3;
+      int* _face2=new int[3];
+      _face2[0]=1;
+      _face2[1]=4;
+      _face2[2]=2;
+      int* _face3=new int[3];
+      _face3[0]=2;
+      _face3[1]=4;
+      _face3[2]=3;
+      int* _face4=new int[3];
+      _face4[0]=3;
+      _face4[1]=4;
+      _face4[2]=1;
+      int* _edge1=new int[2];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      int* _edge2=new int[2];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      int* _edge3=new int[2];
+      _edge3[0]=3;
+      _edge3[1]=1;
+      int* _edge4=new int[2];
+      _edge4[0]=1;
+      _edge4[1]=4;
+      int* _edge5=new int[2];
+      _edge5[0]=2;
+      _edge5[1]=4;
+      int* _edge6=new int[2];
+      _edge6[0]=3;
+      _edge6[1]=4;
+      int ** tmpConstituents1 = new (int*)[4];
+      tmpConstituents1[0]=_face1 ;
+      tmpConstituents1[1]=_face2 ;
+      tmpConstituents1[2]=_face3 ;
+      tmpConstituents1[3]=_face4 ;
+      int ** tmpConstituents2 = new (int*)[6];
+      tmpConstituents2[0]=_edge1 ;
+      tmpConstituents2[1]=_edge2 ;
+      tmpConstituents2[2]=_edge3 ;
+      tmpConstituents2[3]=_edge4 ;
+      tmpConstituents2[4]=_edge5 ;
+      tmpConstituents2[5]=_edge6 ;
+      _constituents = new int**[2] ;
+      _constituents[0]=tmpConstituents1 ;
+      _constituents[1]=tmpConstituents2 ;
+//       vector<medGeometryElement> vector_edge_type(6,MED_SEG2) ;
+//       vector<medGeometryElement> vector_face_type(4,MED_TRIA3) ;
+//       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
+//       _constituentsType = _constituents_type ;
+      //_constituentsType={{MED_TRIA3,MED_TRIA3,MED_TRIA3,MED_TRIA3}{MED_SEG2,MED_SEG2,MED_SEG2,MED_SEG2,MED_SEG2,MED_SEG2}} ;
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[4] ;
+      tmpConstituentsType1[0] = MED_TRIA3 ;
+      tmpConstituentsType1[1] = MED_TRIA3 ;
+      tmpConstituentsType1[2] = MED_TRIA3 ;
+      tmpConstituentsType1[3] = MED_TRIA3 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[6] ;
+      tmpConstituentsType2[0] = MED_SEG2 ;
+      tmpConstituentsType2[1] = MED_SEG2 ;
+      tmpConstituentsType2[2] = MED_SEG2 ;
+      tmpConstituentsType2[3] = MED_SEG2 ;
+      tmpConstituentsType2[4] = MED_SEG2 ;
+      tmpConstituentsType2[5] = MED_SEG2 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
       break;
     }
     case MED_TETRA10 : {
@@ -192,38 +504,140 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _dimension=3;
       _numberOfVertexes=4;
       _numberOfNodes=10;
-      int _edge1[]={1,2,5} ;
-      int _edge2[]={2,3,6} ;
-      int _edge3[]={3,1,7} ;
-      int _edge4[]={1,4,8} ;
-      int _edge5[]={2,4,9} ;
-      int _edge6[]={3,4,10} ;
-      vector<int> edge1(_edge1,_edge1+3) ;
-      vector<int> edge2(_edge2,_edge2+3) ;
-      vector<int> edge3(_edge3,_edge3+3) ;
-      vector<int> edge4(_edge4,_edge4+3) ;
-      vector<int> edge5(_edge5,_edge5+3) ;
-      vector<int> edge6(_edge6,_edge6+3) ;
-      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+6) ;
-      int _face1[]={1,2,3,5,6,7} ;
-      int _face2[]={1,4,2,8,9,5} ;
-      int _face3[]={2,4,3,9,10,6} ;
-      int _face4[]={3,4,1,10,8,7} ;
-      vector<int> face1(_face1,_face1+6) ;
-      vector<int> face2(_face2,_face2+6) ;
-      vector<int> face3(_face3,_face3+6) ;
-      vector<int> face4(_face4,_face4+6) ;
-      vector<int> _vector_face[] = {face1,face2,face3,face4} ;
-      vector< vector<int> > vector_face(_vector_face,_vector_face+4) ;
-      vector< vector<int> > __constituents__[]={vector_face,vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(6,MED_SEG3) ;
-      vector<medGeometryElement> vector_face_type(4,MED_TRIA6) ;
-      vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-      _constituentsType = _constituents_type ;
+//       int _edge1[]={1,2,5} ;
+//       int _edge2[]={2,3,6} ;
+//       int _edge3[]={3,1,7} ;
+//       int _edge4[]={1,4,8} ;
+//       int _edge5[]={2,4,9} ;
+//       int _edge6[]={3,4,10} ;
+//       vector<int> edge1(_edge1,_edge1+3) ;
+//       vector<int> edge2(_edge2,_edge2+3) ;
+//       vector<int> edge3(_edge3,_edge3+3) ;
+//       vector<int> edge4(_edge4,_edge4+3) ;
+//       vector<int> edge5(_edge5,_edge5+3) ;
+//       vector<int> edge6(_edge6,_edge6+3) ;
+//       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+6) ;
+//       int _face1[]={1,2,3,5,6,7} ;
+//       int _face2[]={1,4,2,8,9,5} ;
+//       int _face3[]={2,4,3,9,10,6} ;
+//       int _face4[]={3,4,1,10,8,7} ;
+//       vector<int> face1(_face1,_face1+6) ;
+//       vector<int> face2(_face2,_face2+6) ;
+//       vector<int> face3(_face3,_face3+6) ;
+//       vector<int> face4(_face4,_face4+6) ;
+//       vector<int> _vector_face[] = {face1,face2,face3,face4} ;
+//       vector< vector<int> > vector_face(_vector_face,_vector_face+4) ;
+//       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
+//       _constituents = _constituents_ ;
+      //_constituents={{{1,2,3,5,6,7},{1,4,2,8,9,5},{2,4,3,9,10,6},{3,4,1,10,8,7}},{{1,2,5},{2,3,6},{3,1,7},{1,4,8},{2,4,9},{3,4,10}}} ;
+      _numberOfConstituentsDimension=2 ;
+      _numberOfConstituents=new int[2] ;
+      _numberOfConstituents[0]=4 ;
+      _numberOfConstituents[1]=6 ;
+      _numberOfNodeOfEachConstituent=new (int*)[2] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[4] ;
+      _numberOfNodeOfEachConstituent[0][0]=6 ;
+      _numberOfNodeOfEachConstituent[0][1]=6 ;
+      _numberOfNodeOfEachConstituent[0][2]=6 ;
+      _numberOfNodeOfEachConstituent[0][3]=6 ;
+      _numberOfNodeOfEachConstituent[1]=new (int)[6] ;
+      _numberOfNodeOfEachConstituent[1][0]=3 ;
+      _numberOfNodeOfEachConstituent[1][1]=3 ;
+      _numberOfNodeOfEachConstituent[1][2]=3 ;
+      _numberOfNodeOfEachConstituent[1][3]=3 ;
+      _numberOfNodeOfEachConstituent[1][4]=3 ;
+      _numberOfNodeOfEachConstituent[1][5]=3 ;
+
+      int* _face1=new int[6];
+      _face1[0]=1;
+      _face1[1]=2;
+      _face1[2]=3;
+      _face1[3]=5;
+      _face1[4]=6;
+      _face1[5]=7;
+      int* _face2=new int[6];
+      _face2[0]=1;
+      _face2[1]=4;
+      _face2[2]=2;
+      _face2[3]=8;
+      _face2[4]=9;
+      _face2[5]=5;
+      int* _face3=new int[6];
+      _face3[0]=2;
+      _face3[1]=4;
+      _face3[2]=3;
+      _face3[3]=9;
+      _face3[4]=10;
+      _face3[5]=6;
+      int* _face4=new int[6];
+      _face4[0]=3;
+      _face4[1]=4;
+      _face4[2]=1;
+      _face4[3]=10;
+      _face4[4]=8;
+      _face4[5]=7;
+      int* _edge1=new int[3];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      _edge1[2]=5;
+      int* _edge2=new int[3];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      _edge2[2]=6;
+      int* _edge3=new int[3];
+      _edge3[0]=3;
+      _edge3[1]=1;
+      _edge3[2]=7;
+      int* _edge4=new int[3];
+      _edge4[0]=1;
+      _edge4[1]=4;
+      _edge4[2]=8;
+      int* _edge5=new int[3];
+      _edge5[0]=2;
+      _edge5[1]=4;
+      _edge5[2]=9;
+      int* _edge6=new int[3];
+      _edge6[0]=3;
+      _edge6[1]=4;
+      _edge6[2]=10;
+      int ** tmpConstituents1 = new (int*)[4];
+      tmpConstituents1[0]=_face1 ;
+      tmpConstituents1[1]=_face2 ;
+      tmpConstituents1[2]=_face3 ;
+      tmpConstituents1[3]=_face4 ;
+      int ** tmpConstituents2 = new (int*)[6];
+      tmpConstituents2[0]=_edge1 ;
+      tmpConstituents2[1]=_edge2 ;
+      tmpConstituents2[2]=_edge3 ;
+      tmpConstituents2[3]=_edge4 ;
+      tmpConstituents2[4]=_edge5 ;
+      tmpConstituents2[5]=_edge6 ;
+      _constituents = new int**[2] ;
+      _constituents[0]=tmpConstituents1 ;
+      _constituents[1]=tmpConstituents2 ;
+//       vector<medGeometryElement> vector_edge_type(6,MED_SEG3) ;
+//       vector<medGeometryElement> vector_face_type(4,MED_TRIA6) ;
+//       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
+//       _constituentsType = _constituents_type ;
+      //_constituentsType={{MED_TRIA6,MED_TRIA6,MED_TRIA6,MED_TRIA6}{MED_SEG3,MED_SEG3,MED_SEG3,MED_SEG3,MED_SEG3,MED_SEG3}} ;
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[4] ;
+      tmpConstituentsType1[0] = MED_TRIA6 ;
+      tmpConstituentsType1[1] = MED_TRIA6 ;
+      tmpConstituentsType1[2] = MED_TRIA6 ;
+      tmpConstituentsType1[3] = MED_TRIA6 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[6] ;
+      tmpConstituentsType2[0] = MED_SEG3 ;
+      tmpConstituentsType2[1] = MED_SEG3 ;
+      tmpConstituentsType2[2] = MED_SEG3 ;
+      tmpConstituentsType2[3] = MED_SEG3 ;
+      tmpConstituentsType2[4] = MED_SEG3 ;
+      tmpConstituentsType2[5] = MED_SEG3 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
     break;
     }
     case MED_HEXA8   : {
@@ -232,54 +646,192 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _dimension=3;
       _numberOfVertexes=8;
       _numberOfNodes=8;
-      int _edge1[]={1,2} ;
-      int _edge2[]={2,3} ;
-      int _edge3[]={3,4} ;
-      int _edge4[]={4,1} ;
-      int _edge5[]={5,6} ;
-      int _edge6[]={6,7} ;
-      int _edge7[]={7,8} ;
-      int _edge8[]={8,5} ;
-      int _edge9[]={1,5} ;
-      int _edge10[]={2,6} ;
-      int _edge11[]={3,7} ;
-      int _edge12[]={4,8} ;
-      vector<int> edge1(_edge1,_edge1+2) ;
-      vector<int> edge2(_edge2,_edge2+2) ;
-      vector<int> edge3(_edge3,_edge3+2) ;
-      vector<int> edge4(_edge4,_edge4+2) ;
-      vector<int> edge5(_edge5,_edge5+2) ;
-      vector<int> edge6(_edge6,_edge6+2) ;
-      vector<int> edge7(_edge7,_edge7+2) ;
-      vector<int> edge8(_edge8,_edge8+2) ;
-      vector<int> edge9(_edge9,_edge9+2) ;
-      vector<int> edge10(_edge10,_edge10+2) ;
-      vector<int> edge11(_edge11,_edge11+2) ;
-      vector<int> edge12(_edge12,_edge12+2) ;
-      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9,edge10,edge11,edge12};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+12) ;
-      int _face1[]={1,2,3,4} ;
-      int _face2[]={5,8,7,6} ;
-      int _face3[]={1,5,6,2} ;
-      int _face4[]={2,6,7,3} ;
-      int _face5[]={3,7,8,4} ;
-      int _face6[]={4,8,5,1} ;
-      vector<int> face1(_face1,_face1+4) ;
-      vector<int> face2(_face2,_face2+4) ;
-      vector<int> face3(_face3,_face3+4) ;
-      vector<int> face4(_face4,_face4+4) ;
-      vector<int> face5(_face5,_face5+4) ;
-      vector<int> face6(_face6,_face6+4) ;
-      vector<int> _vector_face[] = {face1,face2,face3,face4,face5,face6} ;
-      vector< vector<int> > vector_face(_vector_face,_vector_face+6) ;
-      vector< vector<int> > __constituents__[]={vector_face,vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(12,MED_SEG2) ;
-      vector<medGeometryElement> vector_face_type(6,MED_QUAD4) ;
-      vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2);
-      _constituentsType = _constituents_type ;
+//       int _edge1[]={1,2} ;
+//       int _edge2[]={2,3} ;
+//       int _edge3[]={3,4} ;
+//       int _edge4[]={4,1} ;
+//       int _edge5[]={5,6} ;
+//       int _edge6[]={6,7} ;
+//       int _edge7[]={7,8} ;
+//       int _edge8[]={8,5} ;
+//       int _edge9[]={1,5} ;
+//       int _edge10[]={2,6} ;
+//       int _edge11[]={3,7} ;
+//       int _edge12[]={4,8} ;
+//       vector<int> edge1(_edge1,_edge1+2) ;
+//       vector<int> edge2(_edge2,_edge2+2) ;
+//       vector<int> edge3(_edge3,_edge3+2) ;
+//       vector<int> edge4(_edge4,_edge4+2) ;
+//       vector<int> edge5(_edge5,_edge5+2) ;
+//       vector<int> edge6(_edge6,_edge6+2) ;
+//       vector<int> edge7(_edge7,_edge7+2) ;
+//       vector<int> edge8(_edge8,_edge8+2) ;
+//       vector<int> edge9(_edge9,_edge9+2) ;
+//       vector<int> edge10(_edge10,_edge10+2) ;
+//       vector<int> edge11(_edge11,_edge11+2) ;
+//       vector<int> edge12(_edge12,_edge12+2) ;
+//       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9,edge10,edge11,edge12};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+12) ;
+      _numberOfConstituentsDimension=2 ;
+      _numberOfConstituents=new int[2] ;
+      _numberOfConstituents[0]=6 ;
+      _numberOfConstituents[1]=12 ;
+      _numberOfNodeOfEachConstituent=new (int*)[2] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[6] ;
+      _numberOfNodeOfEachConstituent[0][0]=4 ;
+      _numberOfNodeOfEachConstituent[0][1]=4 ;
+      _numberOfNodeOfEachConstituent[0][2]=4 ;
+      _numberOfNodeOfEachConstituent[0][3]=4 ;
+      _numberOfNodeOfEachConstituent[0][4]=4 ;
+      _numberOfNodeOfEachConstituent[0][5]=4 ;
+      _numberOfNodeOfEachConstituent[1]=new (int)[12] ;
+      _numberOfNodeOfEachConstituent[1][0]=2 ;
+      _numberOfNodeOfEachConstituent[1][1]=2 ;
+      _numberOfNodeOfEachConstituent[1][2]=2 ;
+      _numberOfNodeOfEachConstituent[1][3]=2 ;
+      _numberOfNodeOfEachConstituent[1][4]=2 ;
+      _numberOfNodeOfEachConstituent[1][5]=2 ;
+      _numberOfNodeOfEachConstituent[1][6]=2 ;
+      _numberOfNodeOfEachConstituent[1][7]=2 ;
+      _numberOfNodeOfEachConstituent[1][8]=2 ;
+      _numberOfNodeOfEachConstituent[1][9]=2 ;
+      _numberOfNodeOfEachConstituent[1][10]=2 ;
+      _numberOfNodeOfEachConstituent[1][11]=2 ;
+
+      int* _edge1=new int[2];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      int* _edge2=new int[2];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      int* _edge3=new int[2];
+      _edge3[0]=3;
+      _edge3[1]=4;
+      int* _edge4=new int[2];
+      _edge4[0]=4;
+      _edge4[1]=1;
+      int* _edge5=new int[2];
+      _edge5[0]=5;
+      _edge5[1]=6;
+      int* _edge6=new int[2];
+      _edge6[0]=6;
+      _edge6[1]=7;
+      int* _edge7=new int[2];
+      _edge7[0]=7;
+      _edge7[1]=8;
+      int* _edge8=new int[2];
+      _edge8[0]=8;
+      _edge8[1]=5;
+      int* _edge9=new int[2];
+      _edge9[0]=1;
+      _edge9[1]=5;
+      int* _edge10=new int[2];
+      _edge10[0]=2;
+      _edge10[1]=6;
+      int* _edge11=new int[2];
+      _edge11[0]=3;
+      _edge11[1]=7;
+      int* _edge12=new int[2];
+      _edge12[0]=4;
+      _edge12[1]=8;
+//       int _face1[]={1,2,3,4} ;
+//       int _face2[]={5,8,7,6} ;
+//       int _face3[]={1,5,6,2} ;
+//       int _face4[]={2,6,7,3} ;
+//       int _face5[]={3,7,8,4} ;
+//       int _face6[]={4,8,5,1} ;
+//       vector<int> face1(_face1,_face1+4) ;
+//       vector<int> face2(_face2,_face2+4) ;
+//       vector<int> face3(_face3,_face3+4) ;
+//       vector<int> face4(_face4,_face4+4) ;
+//       vector<int> face5(_face5,_face5+4) ;
+//       vector<int> face6(_face6,_face6+4) ;
+//       vector<int> _vector_face[] = {face1,face2,face3,face4,face5,face6} ;
+//       vector< vector<int> > vector_face(_vector_face,_vector_face+6) ;
+//       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
+//       _constituents = _constituents_ ;
+      int* _face1=new int[4];
+      _face1[0]=1;
+      _face1[1]=2;
+      _face1[2]=3;
+      _face1[3]=4;
+      int* _face2=new int[4];
+      _face2[0]=5;
+      _face2[1]=8;
+      _face2[2]=7;
+      _face2[3]=6;
+      int* _face3=new int[4];
+      _face3[0]=1;
+      _face3[1]=5;
+      _face3[2]=6;
+      _face3[3]=2;
+      int* _face4=new int[4];
+      _face4[0]=2;
+      _face4[1]=6;
+      _face4[2]=7;
+      _face4[3]=3;
+      int* _face5=new int[4];
+      _face5[0]=3;
+      _face5[1]=7;
+      _face5[2]=8;
+      _face5[3]=4;
+     int* _face6=new int[4];
+      _face6[0]=4;
+      _face6[1]=8;
+      _face6[2]=5;
+      _face6[3]=1;
+      int ** tmpConstituents1 = new (int*)[6];
+      tmpConstituents1[0]=_face1 ;
+      tmpConstituents1[1]=_face2 ;
+      tmpConstituents1[2]=_face3 ;
+      tmpConstituents1[3]=_face4 ;
+      tmpConstituents1[4]=_face5 ;
+      tmpConstituents1[5]=_face6 ;
+      int ** tmpConstituents2 = new (int*)[12];
+      tmpConstituents2[0]=_edge1 ;
+      tmpConstituents2[1]=_edge2 ;
+      tmpConstituents2[2]=_edge3 ;
+      tmpConstituents2[3]=_edge4 ;
+      tmpConstituents2[4]=_edge5 ;
+      tmpConstituents2[5]=_edge6 ;
+      tmpConstituents2[6]=_edge7 ;
+      tmpConstituents2[7]=_edge8 ;
+      tmpConstituents2[8]=_edge9 ;
+      tmpConstituents2[9]=_edge10;
+      tmpConstituents2[10]=_edge11;
+      tmpConstituents2[11]=_edge12;
+      _constituents = new int**[2] ;
+      _constituents[0]=tmpConstituents1 ;
+      _constituents[1]=tmpConstituents2 ;
+//       vector<medGeometryElement> vector_edge_type(12,MED_SEG2) ;
+//       vector<medGeometryElement> vector_face_type(6,MED_QUAD4) ;
+//       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2);
+//       _constituentsType = _constituents_type ;
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[6] ;
+      tmpConstituentsType1[0] = MED_QUAD4 ;
+      tmpConstituentsType1[1] = MED_QUAD4 ;
+      tmpConstituentsType1[2] = MED_QUAD4 ;
+      tmpConstituentsType1[3] = MED_QUAD4 ;
+      tmpConstituentsType1[4] = MED_QUAD4 ;
+      tmpConstituentsType1[5] = MED_QUAD4 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[12] ;
+      tmpConstituentsType2[0] = MED_SEG2 ;
+      tmpConstituentsType2[1] = MED_SEG2 ;
+      tmpConstituentsType2[2] = MED_SEG2 ;
+      tmpConstituentsType2[3] = MED_SEG2 ;
+      tmpConstituentsType2[4] = MED_SEG2 ;
+      tmpConstituentsType2[5] = MED_SEG2 ;
+      tmpConstituentsType2[6] = MED_SEG2 ;
+      tmpConstituentsType2[7] = MED_SEG2 ;
+      tmpConstituentsType2[8] = MED_SEG2 ;
+      tmpConstituentsType2[9] = MED_SEG2 ;
+      tmpConstituentsType2[10] = MED_SEG2 ;
+      tmpConstituentsType2[11] = MED_SEG2 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
       break;
     }
     case MED_HEXA20  : {
@@ -289,57 +841,231 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _numberOfVertexes=8;
       _numberOfNodes=20;
 
-      int _edge1[]={1,2,9} ;
-      int _edge2[]={2,3,10} ;
-      int _edge3[]={3,4,11} ;
-      int _edge4[]={4,1,12} ;
-      int _edge5[]={5,6,13} ;
-      int _edge6[]={6,7,14};
-      int _edge7[]={7,8,15} ; 
-      int _edge8[]={8,5,16} ;
-      int _edge9[]={1,5,17} ;
-      int _edge10[]={2,6,18} ;
-      int _edge11[]={3,7,19} ;
-      int _edge12[]={4,8,20} ;
-
-      vector<int> edge1(_edge1,_edge1+3) ;
-      vector<int> edge2(_edge2,_edge2+3) ;
-      vector<int> edge3(_edge3,_edge3+3) ;
-      vector<int> edge4(_edge4,_edge4+3) ;
-      vector<int> edge5(_edge5,_edge5+3) ;
-      vector<int> edge6(_edge6,_edge6+3) ;
-      vector<int> edge7(_edge7,_edge7+3) ;
-      vector<int> edge8(_edge8,_edge8+3) ;
-      vector<int> edge9(_edge9,_edge9+3) ;
-      vector<int> edge10(_edge10,_edge10+3) ;
-      vector<int> edge11(_edge11,_edge11+3) ;
-      vector<int> edge12(_edge12,_edge12+3) ;       
-      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9,edge10, edge11,edge12};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+12) ;
-
-      int _face1[]={1,2,3,4,9,10,11,12} ;
-      int _face2[]={5,8,7,6,16,15,14,13} ;
-      int _face3[]={1,5,6,2,17,13,18,9} ;
-      int _face4[]={2,6,7,3,18,14,19,10} ;
-      int _face5[]={3,7,8,4,19,15,20,11} ;
-      int _face6[]={4,8,5,1,20,16,17,12} ;
-      vector<int> face1(_face1,_face1+8);
-      vector<int> face2(_face2,_face2+8);
-      vector<int> face3(_face3,_face3+8);
-      vector<int> face4(_face4,_face4+8);
-      vector<int> face5(_face5,_face5+8);
-      vector<int> face6(_face6,_face6+8);
-      vector<int> _vector_face[]= {face1,face2,face3,face4,face5,face6} ;
-      vector< vector<int> > vector_face(_vector_face,_vector_face+6);
-
-      vector< vector<int> > __constituents__[]={vector_face,vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ; 
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(12,MED_SEG3) ;
-      vector<medGeometryElement> vector_face_type(6,MED_QUAD8) ;
-      vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-      _constituentsType = _constituents_type ;
+//       int _edge1[]={1,2,9} ;
+//       int _edge2[]={2,3,10} ;
+//       int _edge3[]={3,4,11} ;
+//       int _edge4[]={4,1,12} ;
+//       int _edge5[]={5,6,13} ;
+//       int _edge6[]={6,7,14};
+//       int _edge7[]={7,8,15} ; 
+//       int _edge8[]={8,5,16} ;
+//       int _edge9[]={1,5,17} ;
+//       int _edge10[]={2,6,18} ;
+//       int _edge11[]={3,7,19} ;
+//       int _edge12[]={4,8,20} ;
+
+//       vector<int> edge1(_edge1,_edge1+3) ;
+//       vector<int> edge2(_edge2,_edge2+3) ;
+//       vector<int> edge3(_edge3,_edge3+3) ;
+//       vector<int> edge4(_edge4,_edge4+3) ;
+//       vector<int> edge5(_edge5,_edge5+3) ;
+//       vector<int> edge6(_edge6,_edge6+3) ;
+//       vector<int> edge7(_edge7,_edge7+3) ;
+//       vector<int> edge8(_edge8,_edge8+3) ;
+//       vector<int> edge9(_edge9,_edge9+3) ;
+//       vector<int> edge10(_edge10,_edge10+3) ;
+//       vector<int> edge11(_edge11,_edge11+3) ;
+//       vector<int> edge12(_edge12,_edge12+3) ;       
+//       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9,edge10, edge11,edge12};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+12) ;
+
+//       int _face1[]={1,2,3,4,9,10,11,12} ;
+//       int _face2[]={5,8,7,6,16,15,14,13} ;
+//       int _face3[]={1,5,6,2,17,13,18,9} ;
+//       int _face4[]={2,6,7,3,18,14,19,10} ;
+//       int _face5[]={3,7,8,4,19,15,20,11} ;
+//       int _face6[]={4,8,5,1,20,16,17,12} ;
+//       vector<int> face1(_face1,_face1+8);
+//       vector<int> face2(_face2,_face2+8);
+//       vector<int> face3(_face3,_face3+8);
+//       vector<int> face4(_face4,_face4+8);
+//       vector<int> face5(_face5,_face5+8);
+//       vector<int> face6(_face6,_face6+8);
+//       vector<int> _vector_face[]= {face1,face2,face3,face4,face5,face6} ;
+//       vector< vector<int> > vector_face(_vector_face,_vector_face+6);
+
+//       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ; 
+//       _constituents = _constituents_ ;
+      _numberOfConstituentsDimension=2 ;
+      _numberOfConstituents=new int[2] ;
+      _numberOfConstituents[0]=6 ;
+      _numberOfConstituents[1]=12 ;
+      _numberOfNodeOfEachConstituent=new (int*)[2] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[6] ;
+      _numberOfNodeOfEachConstituent[0][0]=8 ;
+      _numberOfNodeOfEachConstituent[0][1]=8 ;
+      _numberOfNodeOfEachConstituent[0][2]=8 ;
+      _numberOfNodeOfEachConstituent[0][3]=8 ;
+      _numberOfNodeOfEachConstituent[0][4]=8 ;
+      _numberOfNodeOfEachConstituent[0][5]=8 ;
+      _numberOfNodeOfEachConstituent[1]=new (int)[12] ;
+      _numberOfNodeOfEachConstituent[1][0]=3 ;
+      _numberOfNodeOfEachConstituent[1][1]=3 ;
+      _numberOfNodeOfEachConstituent[1][2]=3 ;
+      _numberOfNodeOfEachConstituent[1][3]=3 ;
+      _numberOfNodeOfEachConstituent[1][4]=3 ;
+      _numberOfNodeOfEachConstituent[1][5]=3 ;
+      _numberOfNodeOfEachConstituent[1][6]=3 ;
+      _numberOfNodeOfEachConstituent[1][7]=3 ;
+      _numberOfNodeOfEachConstituent[1][8]=3 ;
+      _numberOfNodeOfEachConstituent[1][9]=3 ;
+      _numberOfNodeOfEachConstituent[1][10]=3 ;
+      _numberOfNodeOfEachConstituent[1][11]=3 ;
+
+      int* _edge1=new int[3];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      _edge1[1]=9;
+      int* _edge2=new int[3];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      _edge2[1]=10;
+      int* _edge3=new int[3];
+      _edge3[0]=3;
+      _edge3[1]=4;
+      _edge3[2]=11;
+      int* _edge4=new int[3];
+      _edge4[0]=4;
+      _edge4[1]=1;
+      _edge4[2]=12;
+      int* _edge5=new int[3];
+      _edge5[0]=5;
+      _edge5[1]=6;
+      _edge5[2]=13;
+      int* _edge6=new int[3];
+      _edge6[0]=6;
+      _edge6[1]=7;
+      _edge6[2]=14;
+      int* _edge7=new int[3];
+      _edge7[0]=7;
+      _edge7[1]=8;
+      _edge7[2]=15;
+      int* _edge8=new int[3];
+      _edge8[0]=8;
+      _edge8[1]=5;
+      _edge8[2]=16;
+      int* _edge9=new int[3];
+      _edge9[0]=1;
+      _edge9[1]=5;
+      _edge9[2]=17;
+      int* _edge10=new int[3];
+      _edge10[0]=2;
+      _edge10[1]=6;
+      _edge10[2]=18;
+      int* _edge11=new int[3];
+      _edge11[0]=3;
+      _edge11[1]=7;
+      _edge11[2]=19;
+      int* _edge12=new int[3];
+      _edge12[0]=4;
+      _edge12[1]=8;
+      _edge12[2]=20;
+      int* _face1=new int[8];
+      _face1[0]=1;
+      _face1[1]=2;
+      _face1[2]=3;
+      _face1[3]=4;
+      _face1[4]=9;
+      _face1[5]=10;
+      _face1[6]=11;
+      _face1[7]=12;
+      int* _face2=new int[8];
+      _face2[0]=5;
+      _face2[1]=8;
+      _face2[2]=7;
+      _face2[3]=6;
+      _face2[4]=16;
+      _face2[5]=15;
+      _face2[6]=14;
+      _face2[7]=13;
+      int* _face3=new int[8];
+      _face3[0]=1;
+      _face3[1]=5;
+      _face3[2]=6;
+      _face3[3]=2;
+      _face3[4]=17;
+      _face3[5]=13;
+      _face3[6]=18;
+      _face3[7]=9;
+      int* _face4=new int[8];
+      _face4[0]=2;
+      _face4[1]=6;
+      _face4[2]=7;
+      _face4[3]=3;
+      _face4[4]=18;
+      _face4[5]=14;
+      _face4[6]=19;
+      _face4[7]=10;
+      int* _face5=new int[8];
+      _face5[0]=3;
+      _face5[1]=7;
+      _face5[2]=8;
+      _face5[3]=4;
+      _face5[4]=19;
+      _face5[5]=15;
+      _face5[6]=20;
+      _face5[7]=11;
+     int* _face6=new int[8];
+      _face6[0]=4;
+      _face6[1]=8;
+      _face6[2]=5;
+      _face6[3]=1;
+      _face6[4]=20;
+      _face6[5]=16;
+      _face6[6]=17;
+      _face6[7]=12;
+      int ** tmpConstituents1 = new (int*)[6];
+      tmpConstituents1[0]=_face1 ;
+      tmpConstituents1[1]=_face2 ;
+      tmpConstituents1[2]=_face3 ;
+      tmpConstituents1[3]=_face4 ;
+      tmpConstituents1[4]=_face5 ;
+      tmpConstituents1[5]=_face6 ;
+      int ** tmpConstituents2 = new (int*)[12];
+      tmpConstituents2[0]=_edge1 ;
+      tmpConstituents2[1]=_edge2 ;
+      tmpConstituents2[2]=_edge3 ;
+      tmpConstituents2[3]=_edge4 ;
+      tmpConstituents2[4]=_edge5 ;
+      tmpConstituents2[5]=_edge6 ;
+      tmpConstituents2[6]=_edge7 ;
+      tmpConstituents2[7]=_edge8 ;
+      tmpConstituents2[8]=_edge9 ;
+      tmpConstituents2[9]=_edge10;
+      tmpConstituents2[10]=_edge11;
+      tmpConstituents2[11]=_edge12;
+      _constituents = new int**[2] ;
+      _constituents[0]=tmpConstituents1 ;
+      _constituents[1]=tmpConstituents2 ;
+//       vector<medGeometryElement> vector_edge_type(12,MED_SEG3) ;
+//       vector<medGeometryElement> vector_face_type(6,MED_QUAD8) ;
+//       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
+//       _constituentsType = _constituents_type ;
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[6] ;
+      tmpConstituentsType1[0] = MED_QUAD8 ;
+      tmpConstituentsType1[1] = MED_QUAD8 ;
+      tmpConstituentsType1[2] = MED_QUAD8 ;
+      tmpConstituentsType1[3] = MED_QUAD8 ;
+      tmpConstituentsType1[4] = MED_QUAD8 ;
+      tmpConstituentsType1[5] = MED_QUAD8 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[12] ;
+      tmpConstituentsType2[0] = MED_SEG3 ;
+      tmpConstituentsType2[1] = MED_SEG3 ;
+      tmpConstituentsType2[2] = MED_SEG3 ;
+      tmpConstituentsType2[3] = MED_SEG3 ;
+      tmpConstituentsType2[4] = MED_SEG3 ;
+      tmpConstituentsType2[5] = MED_SEG3 ;
+      tmpConstituentsType2[6] = MED_SEG3 ;
+      tmpConstituentsType2[7] = MED_SEG3 ;
+      tmpConstituentsType2[8] = MED_SEG3 ;
+      tmpConstituentsType2[9] = MED_SEG3 ;
+      tmpConstituentsType2[10] = MED_SEG3 ;
+      tmpConstituentsType2[11] = MED_SEG3 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
       break;
     }
     case MED_PENTA6  : {
@@ -349,51 +1075,161 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _numberOfVertexes=6;
       _numberOfNodes=6;
 
-      int _edge1[]= {1,2} ;
-      int _edge2[]= {2,3} ;
-      int _edge3[]= {3,1} ;
-      int _edge4[]= {4,5} ;
-      int _edge5[]= {5,6} ;
-      int _edge6[]= {6,4} ;
-      int _edge7[]= {1,4} ;
-      int _edge8[]= {2,5} ;
-      int _edge9[]= {3,6} ;
-
-      vector<int> edge1(_edge1,_edge1+2) ;
-      vector<int> edge2(_edge2,_edge2+2) ;
-      vector<int> edge3(_edge3,_edge3+2) ;
-      vector<int> edge4(_edge4,_edge4+2) ;
-      vector<int> edge5(_edge5,_edge5+2) ;
-      vector<int> edge6(_edge6,_edge6+2) ;
-      vector<int> edge7(_edge7,_edge7+2) ;
-      vector<int> edge8(_edge8,_edge8+2) ;
-      vector<int> edge9(_edge9,_edge9+2) ;    
-      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+9) ;
-
-      int _face1[]={1,2,3};
-      int _face2[]={4,6,5};
-      int _face3[]={1,4,5,2};
-      int _face4[]={2,5,6,3};
-      int _face5[]={3,6,4,1};
-      vector<int> face1(_face1,_face1+3);
-      vector<int> face2(_face2,_face2+3);
-      vector<int> face3(_face3,_face3+4);
-      vector<int> face4(_face4,_face4+4);
-      vector<int> face5(_face5,_face5+4);
-      vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
-      vector< vector<int> > vector_face(_vector_face,_vector_face+5);
+//       int _edge1[]= {1,2} ;
+//       int _edge2[]= {2,3} ;
+//       int _edge3[]= {3,1} ;
+//       int _edge4[]= {4,5} ;
+//       int _edge5[]= {5,6} ;
+//       int _edge6[]= {6,4} ;
+//       int _edge7[]= {1,4} ;
+//       int _edge8[]= {2,5} ;
+//       int _edge9[]= {3,6} ;
+
+//       vector<int> edge1(_edge1,_edge1+2) ;
+//       vector<int> edge2(_edge2,_edge2+2) ;
+//       vector<int> edge3(_edge3,_edge3+2) ;
+//       vector<int> edge4(_edge4,_edge4+2) ;
+//       vector<int> edge5(_edge5,_edge5+2) ;
+//       vector<int> edge6(_edge6,_edge6+2) ;
+//       vector<int> edge7(_edge7,_edge7+2) ;
+//       vector<int> edge8(_edge8,_edge8+2) ;
+//       vector<int> edge9(_edge9,_edge9+2) ;    
+//       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+9) ;
+
+//       int _face1[]={1,2,3};
+//       int _face2[]={4,6,5};
+//       int _face3[]={1,4,5,2};
+//       int _face4[]={2,5,6,3};
+//       int _face5[]={3,6,4,1};
+//       vector<int> face1(_face1,_face1+3);
+//       vector<int> face2(_face2,_face2+3);
+//       vector<int> face3(_face3,_face3+4);
+//       vector<int> face4(_face4,_face4+4);
+//       vector<int> face5(_face5,_face5+4);
+//       vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
+//       vector< vector<int> > vector_face(_vector_face,_vector_face+5);
  
-      vector< vector<int> > __constituents__[]={vector_face,vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(9,MED_SEG2) ;
-      vector<medGeometryElement> vector_face_type(5,MED_QUAD4) ;
-      vector_face_type[0]=MED_TRIA3 ;
-      vector_face_type[1]=MED_TRIA3 ;
-      vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-      _constituentsType = _constituents_type ;
+//       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
+//       _constituents = _constituents_ ;
+      _numberOfConstituentsDimension=2 ;
+      _numberOfConstituents=new int[2] ;
+      _numberOfConstituents[0]=5 ;
+      _numberOfConstituents[1]=9 ;
+      _numberOfNodeOfEachConstituent=new (int*)[2] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[5] ;
+      _numberOfNodeOfEachConstituent[0][0]=3 ;
+      _numberOfNodeOfEachConstituent[0][1]=3 ;
+      _numberOfNodeOfEachConstituent[0][2]=4 ;
+      _numberOfNodeOfEachConstituent[0][3]=4 ;
+      _numberOfNodeOfEachConstituent[0][4]=4 ;
+      _numberOfNodeOfEachConstituent[1]=new (int)[9] ;
+      _numberOfNodeOfEachConstituent[1][0]=2 ;
+      _numberOfNodeOfEachConstituent[1][1]=2 ;
+      _numberOfNodeOfEachConstituent[1][2]=2 ;
+      _numberOfNodeOfEachConstituent[1][3]=2 ;
+      _numberOfNodeOfEachConstituent[1][4]=2 ;
+      _numberOfNodeOfEachConstituent[1][5]=2 ;
+      _numberOfNodeOfEachConstituent[1][6]=2 ;
+      _numberOfNodeOfEachConstituent[1][7]=2 ;
+      _numberOfNodeOfEachConstituent[1][8]=2 ;
+
+      int* _edge1=new int[2];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      int* _edge2=new int[2];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      int* _edge3=new int[2];
+      _edge3[0]=3;
+      _edge3[1]=1;
+      int* _edge4=new int[2];
+      _edge4[0]=4;
+      _edge4[1]=5;
+      int* _edge5=new int[2];
+      _edge5[0]=5;
+      _edge5[1]=6;
+      int* _edge6=new int[2];
+      _edge6[0]=6;
+      _edge6[1]=4;
+      int* _edge7=new int[2];
+      _edge7[0]=1;
+      _edge7[1]=4;
+      int* _edge8=new int[2];
+      _edge8[0]=2;
+      _edge8[1]=5;
+      int* _edge9=new int[2];
+      _edge9[0]=3;
+      _edge9[1]=6;
+      int* _face1=new int[3];
+      _face1[0]=1;
+      _face1[1]=2;
+      _face1[2]=3;
+      int* _face2=new int[3];
+      _face2[0]=4;
+      _face2[1]=6;
+      _face2[2]=5;
+      int* _face3=new int[4];
+      _face3[0]=1;
+      _face3[1]=4;
+      _face3[2]=5;
+      _face3[3]=2;
+      int* _face4=new int[4];
+      _face4[0]=2;
+      _face4[1]=5;
+      _face4[2]=6;
+      _face4[3]=3;
+      int* _face5=new int[4];
+      _face5[0]=3;
+      _face5[1]=6;
+      _face5[2]=4;
+      _face5[3]=1;
+      int ** tmpConstituents1 = new (int*)[5];
+      tmpConstituents1[0]=_face1 ;
+      tmpConstituents1[1]=_face2 ;
+      tmpConstituents1[2]=_face3 ;
+      tmpConstituents1[3]=_face4 ;
+      tmpConstituents1[4]=_face5 ;
+      int ** tmpConstituents2 = new (int*)[9];
+      tmpConstituents2[0]=_edge1 ;
+      tmpConstituents2[1]=_edge2 ;
+      tmpConstituents2[2]=_edge3 ;
+      tmpConstituents2[3]=_edge4 ;
+      tmpConstituents2[4]=_edge5 ;
+      tmpConstituents2[5]=_edge6 ;
+      tmpConstituents2[6]=_edge7 ;
+      tmpConstituents2[7]=_edge8 ;
+      tmpConstituents2[8]=_edge9 ;
+      _constituents = new int**[2] ;
+      _constituents[0]=tmpConstituents1 ;
+      _constituents[1]=tmpConstituents2 ;
+//       vector<medGeometryElement> vector_edge_type(9,MED_SEG2) ;
+//       vector<medGeometryElement> vector_face_type(5,MED_QUAD4) ;
+//       vector_face_type[0]=MED_TRIA3 ;
+//       vector_face_type[1]=MED_TRIA3 ;
+//       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
+//       _constituentsType = _constituents_type ;
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[5] ;
+      tmpConstituentsType1[0] = MED_TRIA3 ;
+      tmpConstituentsType1[1] = MED_TRIA3 ;
+      tmpConstituentsType1[2] = MED_QUAD4 ;
+      tmpConstituentsType1[3] = MED_QUAD4 ;
+      tmpConstituentsType1[4] = MED_QUAD4 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[9] ;
+      tmpConstituentsType2[0] = MED_SEG2 ;
+      tmpConstituentsType2[1] = MED_SEG2 ;
+      tmpConstituentsType2[2] = MED_SEG2 ;
+      tmpConstituentsType2[3] = MED_SEG2 ;
+      tmpConstituentsType2[4] = MED_SEG2 ;
+      tmpConstituentsType2[5] = MED_SEG2 ;
+      tmpConstituentsType2[6] = MED_SEG2 ;
+      tmpConstituentsType2[7] = MED_SEG2 ;
+      tmpConstituentsType2[8] = MED_SEG2 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
       break;
     }
     case MED_PENTA15 : {
@@ -402,52 +1238,189 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _dimension=3;
       _numberOfVertexes=6;
       _numberOfNodes=15;
-      int _edge1[]={1,2,7} ;
-      int _edge2[]={2,3,8} ;
-      int _edge3[]={3,1,9} ;
-      int _edge4[]={4,5,10} ;
-      int _edge5[]={5,6,11} ;
-      int _edge6[]={6,4,12} ;
-      int _edge7[]={1,4,13} ;
-      int _edge8[]={2,5,14} ;
-      int _edge9[]={3,6,15} ;
-
-      vector<int> edge1(_edge1,_edge1+3) ;
-      vector<int> edge2(_edge2,_edge2+3) ;
-      vector<int> edge3(_edge3,_edge3+3) ;
-      vector<int> edge4(_edge4,_edge4+3) ;
-      vector<int> edge5(_edge5,_edge5+3) ;
-      vector<int> edge6(_edge6,_edge6+3) ;
-      vector<int> edge7(_edge7,_edge7+3) ;
-      vector<int> edge8(_edge8,_edge8+3) ;
-      vector<int> edge9(_edge9,_edge9+3) ;    
-     vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+9) ;
-
-      int _face1[]={1,2,3,7,8,9};
-      int _face2[]={4,6,5,12,11,10};
-      int _face3[]={1,4,5,2,13,10,14,7};
-      int _face4[]={2,5,6,3,14,11,15,8};
-      int _face5[]={3,6,4,1,15,12,13,9};
-      vector<int> face1(_face1,_face1+6);
-      vector<int> face2(_face2,_face2+6);
-      vector<int> face3(_face3,_face3+8);
-      vector<int> face4(_face4,_face4+8);
-      vector<int> face5(_face5,_face5+8);
-      vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
-      vector< vector<int> > vector_face(_vector_face,_vector_face+5);
-
-      vector< vector<int> > __constituents__[]={vector_face,vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(9,MED_SEG3) ;
-      vector<medGeometryElement> vector_face_type(5,MED_QUAD8) ;
-      vector_face_type[0]=MED_TRIA6 ;
-      vector_face_type[1]=MED_TRIA6 ;
-      vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-      _constituentsType = _constituents_type ;
-      break;
+//       int _edge1[]={1,2,7} ;
+//       int _edge2[]={2,3,8} ;
+//       int _edge3[]={3,1,9} ;
+//       int _edge4[]={4,5,10} ;
+//       int _edge5[]={5,6,11} ;
+//       int _edge6[]={6,4,12} ;
+//       int _edge7[]={1,4,13} ;
+//       int _edge8[]={2,5,14} ;
+//       int _edge9[]={3,6,15} ;
+
+//       vector<int> edge1(_edge1,_edge1+3) ;
+//       vector<int> edge2(_edge2,_edge2+3) ;
+//       vector<int> edge3(_edge3,_edge3+3) ;
+//       vector<int> edge4(_edge4,_edge4+3) ;
+//       vector<int> edge5(_edge5,_edge5+3) ;
+//       vector<int> edge6(_edge6,_edge6+3) ;
+//       vector<int> edge7(_edge7,_edge7+3) ;
+//       vector<int> edge8(_edge8,_edge8+3) ;
+//       vector<int> edge9(_edge9,_edge9+3) ;    
+//      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8,edge9};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+9) ;
+
+//       int _face1[]={1,2,3,7,8,9};
+//       int _face2[]={4,6,5,12,11,10};
+//       int _face3[]={1,4,5,2,13,10,14,7};
+//       int _face4[]={2,5,6,3,14,11,15,8};
+//       int _face5[]={3,6,4,1,15,12,13,9};
+//       vector<int> face1(_face1,_face1+6);
+//       vector<int> face2(_face2,_face2+6);
+//       vector<int> face3(_face3,_face3+8);
+//       vector<int> face4(_face4,_face4+8);
+//       vector<int> face5(_face5,_face5+8);
+//       vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
+//       vector< vector<int> > vector_face(_vector_face,_vector_face+5);
+
+//       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
+//       _constituents = _constituents_ ;
+      _numberOfConstituentsDimension=2 ;
+      _numberOfConstituents=new int[2] ;
+      _numberOfConstituents[0]=5 ;
+      _numberOfConstituents[1]=9 ;
+      _numberOfNodeOfEachConstituent=new (int*)[2] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[5] ;
+      _numberOfNodeOfEachConstituent[0][0]=6 ;
+      _numberOfNodeOfEachConstituent[0][1]=6 ;
+      _numberOfNodeOfEachConstituent[0][2]=8 ;
+      _numberOfNodeOfEachConstituent[0][3]=8 ;
+      _numberOfNodeOfEachConstituent[0][4]=8 ;
+      _numberOfNodeOfEachConstituent[1]=new (int)[9] ;
+      _numberOfNodeOfEachConstituent[1][0]=3 ;
+      _numberOfNodeOfEachConstituent[1][1]=3 ;
+      _numberOfNodeOfEachConstituent[1][2]=3 ;
+      _numberOfNodeOfEachConstituent[1][3]=3 ;
+      _numberOfNodeOfEachConstituent[1][4]=3 ;
+      _numberOfNodeOfEachConstituent[1][5]=3 ;
+      _numberOfNodeOfEachConstituent[1][6]=3 ;
+      _numberOfNodeOfEachConstituent[1][7]=3 ;
+      _numberOfNodeOfEachConstituent[1][8]=3 ;
+
+      int* _edge1=new int[3];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      _edge1[2]=7;
+      int* _edge2=new int[3];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      _edge2[2]=8;
+      int* _edge3=new int[3];
+      _edge3[0]=3;
+      _edge3[1]=1;
+      _edge3[2]=9;
+      int* _edge4=new int[3];
+      _edge4[0]=4;
+      _edge4[1]=5;
+      _edge4[2]=10;
+      int* _edge5=new int[3];
+      _edge5[0]=5;
+      _edge5[1]=6;
+      _edge5[2]=11;
+      int* _edge6=new int[3];
+      _edge6[0]=6;
+      _edge6[1]=4;
+      _edge6[2]=12;
+      int* _edge7=new int[3];
+      _edge7[0]=1;
+      _edge7[1]=4;
+      _edge7[2]=13;
+      int* _edge8=new int[3];
+      _edge8[0]=2;
+      _edge8[1]=5;
+      _edge8[2]=14;
+      int* _edge9=new int[3];
+      _edge9[0]=3;
+      _edge9[1]=6;
+      _edge9[2]=15;
+      int* _face1=new int[6];
+      _face1[0]=1;
+      _face1[1]=2;
+      _face1[2]=3;
+      _face1[3]=7;
+      _face1[4]=8;
+      _face1[5]=9;
+      int* _face2=new int[6];
+      _face2[0]=4;
+      _face2[1]=5;
+      _face2[2]=6;
+      _face2[3]=12;
+      _face2[4]=11;
+      _face2[5]=10;
+      int* _face3=new int[8];
+      _face3[0]=1;
+      _face3[1]=4;
+      _face3[2]=5;
+      _face3[3]=2;
+      _face3[4]=13;
+      _face3[5]=10;
+      _face3[6]=14;
+      _face3[7]=7;
+      int* _face4=new int[8];
+      _face4[0]=2;
+      _face4[1]=5;
+      _face4[2]=6;
+      _face4[3]=3;
+      _face4[4]=14;
+      _face4[5]=11;
+      _face4[6]=15;
+      _face4[7]=8;
+      int* _face5=new int[8];
+      _face5[0]=3;
+      _face5[1]=6;
+      _face5[2]=4;
+      _face5[3]=1;
+      _face5[4]=15;
+      _face5[5]=12;
+      _face5[6]=13;
+      _face5[7]=9;
+      int ** tmpConstituents1 = new (int*)[5];
+      tmpConstituents1[0]=_face1 ;
+      tmpConstituents1[1]=_face2 ;
+      tmpConstituents1[2]=_face3 ;
+      tmpConstituents1[3]=_face4 ;
+      tmpConstituents1[4]=_face5 ;
+      int ** tmpConstituents2 = new (int*)[9];
+      tmpConstituents2[0]=_edge1 ;
+      tmpConstituents2[1]=_edge2 ;
+      tmpConstituents2[2]=_edge3 ;
+      tmpConstituents2[3]=_edge4 ;
+      tmpConstituents2[4]=_edge5 ;
+      tmpConstituents2[5]=_edge6 ;
+      tmpConstituents2[6]=_edge7 ;
+      tmpConstituents2[7]=_edge8 ;
+      tmpConstituents2[8]=_edge9 ;
+      _constituents = new (int**)[2] ;
+      _constituents[0]=tmpConstituents1 ;
+      _constituents[1]=tmpConstituents2 ;
+//       vector<medGeometryElement> vector_edge_type(9,MED_SEG3) ;
+//       vector<medGeometryElement> vector_face_type(5,MED_QUAD8) ;
+//       vector_face_type[0]=MED_TRIA6 ;
+//       vector_face_type[1]=MED_TRIA6 ;
+//       vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
+//       _constituentsType = _constituents_type ;
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[5] ;
+      tmpConstituentsType1[0] = MED_TRIA6 ;
+      tmpConstituentsType1[1] = MED_TRIA6 ;
+      tmpConstituentsType1[2] = MED_QUAD8 ;
+      tmpConstituentsType1[3] = MED_QUAD8 ;
+      tmpConstituentsType1[4] = MED_QUAD8 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[9] ;
+      tmpConstituentsType2[0] = MED_SEG3 ;
+      tmpConstituentsType2[1] = MED_SEG3 ;
+      tmpConstituentsType2[2] = MED_SEG3 ;
+      tmpConstituentsType2[3] = MED_SEG3 ;
+      tmpConstituentsType2[4] = MED_SEG3 ;
+      tmpConstituentsType2[5] = MED_SEG3 ;
+      tmpConstituentsType2[6] = MED_SEG3 ;
+      tmpConstituentsType2[7] = MED_SEG3 ;
+      tmpConstituentsType2[8] = MED_SEG3 ;
+      _constituentsType = new (medGeometryElement*)[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
+      break ;
     }
     case MED_PYRA5   : {
       _name="MED_PYRA5" ;
@@ -455,48 +1428,150 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _dimension=3;
       _numberOfVertexes=5;
       _numberOfNodes=5;
-      int _edge1[]={1,2} ;
-      int _edge2[]={2,3} ;
-      int _edge3[]={3,4} ;
-      int _edge4[]={4,1} ;
-      int _edge5[]={1,5} ;
-      int _edge6[]={2,5} ;
-      int _edge7[]={3,5} ;
-      int _edge8[]={4,5} ;
-
-      vector<int> edge1(_edge1,_edge1+2) ;
-      vector<int> edge2(_edge2,_edge2+2) ;
-      vector<int> edge3(_edge3,_edge3+2) ;
-      vector<int> edge4(_edge4,_edge4+2) ;
-      vector<int> edge5(_edge5,_edge5+2) ;
-      vector<int> edge6(_edge6,_edge6+2) ;
-      vector<int> edge7(_edge7,_edge7+2) ;
-      vector<int> edge8(_edge8,_edge8+2) ;
-     vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+8) ;
-
-      int _face1[]={1,2,3,4} ;
-      int _face2[]={1,5,2} ;
-      int _face3[]={2,5,3} ;
-      int _face4[]={3,5,4} ;
-      int _face5[]={4,5,1} ;
-      vector<int> face1(_face1,_face1+4);
-      vector<int> face2(_face2,_face2+3);
-      vector<int> face3(_face3,_face3+3);
-      vector<int> face4(_face4,_face4+3);
-      vector<int> face5(_face5,_face5+3);
-      vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
-      vector< vector<int> > vector_face(_vector_face,_vector_face+5);
-
-      vector< vector<int> > __constituents__[]={vector_face,vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(8,MED_SEG2) ;
-      vector<medGeometryElement> vector_face_type(5,MED_TRIA3) ;
-      vector_face_type[0]=MED_QUAD4 ;
-    vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-      _constituentsType = _constituents_type ;
+//       int _edge1[]={1,2} ;
+//       int _edge2[]={2,3} ;
+//       int _edge3[]={3,4} ;
+//       int _edge4[]={4,1} ;
+//       int _edge5[]={1,5} ;
+//       int _edge6[]={2,5} ;
+//       int _edge7[]={3,5} ;
+//       int _edge8[]={4,5} ;
+
+//       vector<int> edge1(_edge1,_edge1+2) ;
+//       vector<int> edge2(_edge2,_edge2+2) ;
+//       vector<int> edge3(_edge3,_edge3+2) ;
+//       vector<int> edge4(_edge4,_edge4+2) ;
+//       vector<int> edge5(_edge5,_edge5+2) ;
+//       vector<int> edge6(_edge6,_edge6+2) ;
+//       vector<int> edge7(_edge7,_edge7+2) ;
+//       vector<int> edge8(_edge8,_edge8+2) ;
+//      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+8) ;
+
+//       int _face1[]={1,2,3,4} ;
+//       int _face2[]={1,5,2} ;
+//       int _face3[]={2,5,3} ;
+//       int _face4[]={3,5,4} ;
+//       int _face5[]={4,5,1} ;
+//       vector<int> face1(_face1,_face1+4);
+//       vector<int> face2(_face2,_face2+3);
+//       vector<int> face3(_face3,_face3+3);
+//       vector<int> face4(_face4,_face4+3);
+//       vector<int> face5(_face5,_face5+3);
+//       vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
+//       vector< vector<int> > vector_face(_vector_face,_vector_face+5);
+
+//       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
+//       _constituents = _constituents_ ;
+      _numberOfConstituentsDimension=2 ;
+      _numberOfConstituents=new int[2] ;
+      _numberOfConstituents[0]=5 ;
+      _numberOfConstituents[1]=8 ;
+      _numberOfNodeOfEachConstituent=new (int*)[2] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[5] ;
+      _numberOfNodeOfEachConstituent[0][0]=4 ;
+      _numberOfNodeOfEachConstituent[0][1]=3 ;
+      _numberOfNodeOfEachConstituent[0][2]=3 ;
+      _numberOfNodeOfEachConstituent[0][3]=3 ;
+      _numberOfNodeOfEachConstituent[0][4]=3 ;
+      _numberOfNodeOfEachConstituent[1]=new (int)[8] ;
+      _numberOfNodeOfEachConstituent[1][0]=2 ;
+      _numberOfNodeOfEachConstituent[1][1]=2 ;
+      _numberOfNodeOfEachConstituent[1][2]=2 ;
+      _numberOfNodeOfEachConstituent[1][3]=2 ;
+      _numberOfNodeOfEachConstituent[1][4]=2 ;
+      _numberOfNodeOfEachConstituent[1][5]=2 ;
+      _numberOfNodeOfEachConstituent[1][6]=2 ;
+      _numberOfNodeOfEachConstituent[1][7]=2 ;
+
+      int* _edge1=new int[2];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      int* _edge2=new int[2];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      int* _edge3=new int[2];
+      _edge3[0]=3;
+      _edge3[1]=4;
+      int* _edge4=new int[2];
+      _edge4[0]=4;
+      _edge4[1]=1;
+      int* _edge5=new int[2];
+      _edge5[0]=1;
+      _edge5[1]=5;
+      int* _edge6=new int[2];
+      _edge6[0]=2;
+      _edge6[1]=5;
+      int* _edge7=new int[2];
+      _edge7[0]=3;
+      _edge7[1]=5;
+      int* _edge8=new int[2];
+      _edge8[0]=4;
+      _edge8[1]=5;
+      int* _face1=new int[4];
+      _face1[0]=1;
+      _face1[1]=2;
+      _face1[2]=3;
+      _face1[3]=4;
+      int* _face2=new int[3];
+      _face2[0]=1;
+      _face2[1]=5;
+      _face2[2]=2;
+      int* _face3=new int[3];
+      _face3[0]=2;
+      _face3[1]=5;
+      _face3[2]=3;
+      int* _face4=new int[3];
+      _face4[0]=3;
+      _face4[1]=5;
+      _face4[2]=4;
+      int* _face5=new int[3];
+      _face5[0]=4;
+      _face5[1]=5;
+      _face5[2]=1;
+      int ** tmpConstituents1 = new (int*)[5];
+      tmpConstituents1[0]=_face1 ;
+      tmpConstituents1[1]=_face2 ;
+      tmpConstituents1[2]=_face3 ;
+      tmpConstituents1[3]=_face4 ;
+      tmpConstituents1[4]=_face5 ;
+      int ** tmpConstituents2 = new (int*)[8];
+      tmpConstituents2[0]=_edge1 ;
+      tmpConstituents2[1]=_edge2 ;
+      tmpConstituents2[2]=_edge3 ;
+      tmpConstituents2[3]=_edge4 ;
+      tmpConstituents2[4]=_edge5 ;
+      tmpConstituents2[5]=_edge6 ;
+      tmpConstituents2[6]=_edge7 ;
+      tmpConstituents2[7]=_edge8 ;
+      _constituents = new int**[2] ;
+      _constituents[0]=tmpConstituents1 ;
+      _constituents[1]=tmpConstituents2 ;
+//       vector<medGeometryElement> vector_edge_type(8,MED_SEG2) ;
+//       vector<medGeometryElement> vector_face_type(5,MED_TRIA3) ;
+//       vector_face_type[0]=MED_QUAD4 ;
+//     vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
+//       _constituentsType = _constituents_type ;
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[5] ;
+      tmpConstituentsType1[0] = MED_QUAD4 ;
+      tmpConstituentsType1[1] = MED_TRIA3 ;
+      tmpConstituentsType1[2] = MED_TRIA3 ;
+      tmpConstituentsType1[3] = MED_TRIA3 ;
+      tmpConstituentsType1[4] = MED_TRIA3 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[8] ;
+      tmpConstituentsType2[0] = MED_SEG2 ;
+      tmpConstituentsType2[1] = MED_SEG2 ;
+      tmpConstituentsType2[2] = MED_SEG2 ;
+      tmpConstituentsType2[3] = MED_SEG2 ;
+      tmpConstituentsType2[4] = MED_SEG2 ;
+      tmpConstituentsType2[5] = MED_SEG2 ;
+      tmpConstituentsType2[6] = MED_SEG2 ;
+      tmpConstituentsType2[7] = MED_SEG2 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
       break;
     }
     case MED_PYRA13  : {
@@ -505,52 +1580,178 @@ CELLMODEL::CELLMODEL(medGeometryElement t)
       _dimension=3;
       _numberOfVertexes=5;
       _numberOfNodes=13;
-      int _edge1[]={1,2,6} ;
-      int _edge2[]={2,3,7} ;
-      int _edge3[]={3,4,8} ;
-      int _edge4[]={4,1,9} ;
-      int _edge5[]={1,5,10} ;
-      int _edge6[]={2,5,11} ;
-      int _edge7[]={3,5,12} ;
-      int _edge8[]={4,5,13} ;
-
-      vector<int> edge1(_edge1,_edge1+3) ;
-      vector<int> edge2(_edge2,_edge2+3) ;
-      vector<int> edge3(_edge3,_edge3+3) ;
-      vector<int> edge4(_edge4,_edge4+3) ;
-      vector<int> edge5(_edge5,_edge5+3) ;
-      vector<int> edge6(_edge6,_edge6+3) ;
-      vector<int> edge7(_edge7,_edge7+3) ;
-      vector<int> edge8(_edge8,_edge8+3) ;
-
-
-      vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8};
-      vector< vector<int> > vector_edge(_vector_edge,_vector_edge+8) ;
-
-      int _face1[]={1,2,3,4,6,7,8,9} ;
-      int _face2[]={1,5,2,10,11,6} ;
-      int _face3[]={2,5,3,11,12,7} ;
-      int _face4[]={3,5,4,12,13,8} ;
-      int _face5[]={4,5,1,13,10,9} ;
-      vector<int> face1(_face1,_face1+8);
-      vector<int> face2(_face2,_face2+6);
-      vector<int> face3(_face3,_face3+6);
-      vector<int> face4(_face4,_face4+6);
-      vector<int> face5(_face5,_face5+6);
-      vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
-      vector< vector<int> > vector_face(_vector_face,_vector_face+5);
-
-
-      vector< vector<int> > __constituents__[]={vector_face,vector_edge};
-      vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
-      _constituents = _constituents_ ;
-      vector<medGeometryElement> vector_edge_type(8,MED_SEG3) ;
-      vector<medGeometryElement> vector_face_type(5,MED_TRIA6) ;
-      vector_face_type[0]=MED_QUAD8 ;
-     vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
-      vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
-
-      _constituentsType = _constituents_type ;
+//       int _edge1[]={1,2,6} ;
+//       int _edge2[]={2,3,7} ;
+//       int _edge3[]={3,4,8} ;
+//       int _edge4[]={4,1,9} ;
+//       int _edge5[]={1,5,10} ;
+//       int _edge6[]={2,5,11} ;
+//       int _edge7[]={3,5,12} ;
+//       int _edge8[]={4,5,13} ;
+
+//       vector<int> edge1(_edge1,_edge1+3) ;
+//       vector<int> edge2(_edge2,_edge2+3) ;
+//       vector<int> edge3(_edge3,_edge3+3) ;
+//       vector<int> edge4(_edge4,_edge4+3) ;
+//       vector<int> edge5(_edge5,_edge5+3) ;
+//       vector<int> edge6(_edge6,_edge6+3) ;
+//       vector<int> edge7(_edge7,_edge7+3) ;
+//       vector<int> edge8(_edge8,_edge8+3) ;
+
+
+//       vector<int> _vector_edge[]={edge1,edge2,edge3,edge4,edge5,edge6,edge7,edge8};
+//       vector< vector<int> > vector_edge(_vector_edge,_vector_edge+8) ;
+
+//       int _face1[]={1,2,3,4,6,7,8,9} ;
+//       int _face2[]={1,5,2,10,11,6} ;
+//       int _face3[]={2,5,3,11,12,7} ;
+//       int _face4[]={3,5,4,12,13,8} ;
+//       int _face5[]={4,5,1,13,10,9} ;
+//       vector<int> face1(_face1,_face1+8);
+//       vector<int> face2(_face2,_face2+6);
+//       vector<int> face3(_face3,_face3+6);
+//       vector<int> face4(_face4,_face4+6);
+//       vector<int> face5(_face5,_face5+6);
+//       vector<int> _vector_face[]= {face1,face2,face3,face4,face5} ;
+//       vector< vector<int> > vector_face(_vector_face,_vector_face+5);
+
+
+//       vector< vector<int> > __constituents__[]={vector_face,vector_edge};
+//       vector< vector< vector<int> > > _constituents_(__constituents__,__constituents__+2) ;
+//       _constituents = _constituents_ ;
+      _numberOfConstituentsDimension=2 ;
+      _numberOfConstituents=new int[2] ;
+      _numberOfConstituents[0]=5 ;
+      _numberOfConstituents[1]=8 ;
+      _numberOfNodeOfEachConstituent=new (int*)[2] ;
+      _numberOfNodeOfEachConstituent[0]=new (int)[5] ;
+      _numberOfNodeOfEachConstituent[0][0]=8 ;
+      _numberOfNodeOfEachConstituent[0][1]=6 ;
+      _numberOfNodeOfEachConstituent[0][2]=6 ;
+      _numberOfNodeOfEachConstituent[0][3]=6 ;
+      _numberOfNodeOfEachConstituent[0][4]=6 ;
+      _numberOfNodeOfEachConstituent[1]=new (int)[8] ;
+      _numberOfNodeOfEachConstituent[1][0]=3 ;
+      _numberOfNodeOfEachConstituent[1][1]=3 ;
+      _numberOfNodeOfEachConstituent[1][2]=3 ;
+      _numberOfNodeOfEachConstituent[1][3]=3 ;
+      _numberOfNodeOfEachConstituent[1][4]=3 ;
+      _numberOfNodeOfEachConstituent[1][5]=3 ;
+      _numberOfNodeOfEachConstituent[1][6]=3 ;
+      _numberOfNodeOfEachConstituent[1][7]=3 ;
+
+      int* _edge1=new int[3];
+      _edge1[0]=1;
+      _edge1[1]=2;
+      _edge1[2]=6;
+      int* _edge2=new int[3];
+      _edge2[0]=2;
+      _edge2[1]=3;
+      _edge2[2]=7;
+      int* _edge3=new int[3];
+      _edge3[0]=3;
+      _edge3[1]=4;
+      _edge3[2]=8;
+      int* _edge4=new int[3];
+      _edge4[0]=4;
+      _edge4[1]=1;
+      _edge4[2]=9;
+      int* _edge5=new int[3];
+      _edge5[0]=1;
+      _edge5[1]=5;
+      _edge5[2]=10;
+      int* _edge6=new int[3];
+      _edge6[0]=2;
+      _edge6[1]=5;
+      _edge6[2]=11;
+      int* _edge7=new int[3];
+      _edge7[0]=3;
+      _edge7[1]=5;
+      _edge7[2]=12;
+      int* _edge8=new int[3];
+      _edge8[0]=4;
+      _edge8[1]=5;
+      _edge8[2]=13;
+      int* _face1=new int[8];
+      _face1[0]=1;
+      _face1[1]=2;
+      _face1[2]=3;
+      _face1[3]=4;
+      _face1[4]=6;
+      _face1[5]=7;
+      _face1[6]=8;
+      _face1[7]=9;
+      int* _face2=new int[6];
+      _face2[0]=1;
+      _face2[1]=5;
+      _face2[2]=2;
+      _face2[3]=10;
+      _face2[4]=11;
+      _face2[5]=6;
+      int* _face3=new int[6];
+      _face3[0]=2;
+      _face3[1]=5;
+      _face3[2]=3;
+      _face3[3]=11;
+      _face3[4]=12;
+      _face3[5]=7;
+      int* _face4=new int[6];
+      _face4[0]=3;
+      _face4[1]=5;
+      _face4[2]=4;
+      _face4[3]=12;
+      _face4[4]=13;
+      _face4[5]=8;
+      int* _face5=new int[6];
+      _face5[0]=4;
+      _face5[1]=5;
+      _face5[2]=1;
+      _face5[3]=13;
+      _face5[4]=10;
+      _face5[5]=9;
+      int ** tmpConstituents1 = new (int*)[5];
+      tmpConstituents1[0]=_face1 ;
+      tmpConstituents1[1]=_face2 ;
+      tmpConstituents1[2]=_face3 ;
+      tmpConstituents1[3]=_face4 ;
+      tmpConstituents1[4]=_face5 ;
+      int ** tmpConstituents2 = new (int*)[8];
+      tmpConstituents2[0]=_edge1 ;
+      tmpConstituents2[1]=_edge2 ;
+      tmpConstituents2[2]=_edge3 ;
+      tmpConstituents2[3]=_edge4 ;
+      tmpConstituents2[4]=_edge5 ;
+      tmpConstituents2[5]=_edge6 ;
+      tmpConstituents2[6]=_edge7 ;
+      tmpConstituents2[7]=_edge8 ;
+      _constituents = new int**[2] ;
+      _constituents[0]=tmpConstituents1 ;
+      _constituents[1]=tmpConstituents2 ;
+//       vector<medGeometryElement> vector_edge_type(8,MED_SEG3) ;
+//       vector<medGeometryElement> vector_face_type(5,MED_TRIA6) ;
+//       vector_face_type[0]=MED_QUAD8 ;
+//      vector<medGeometryElement> __constituents_type[]={vector_face_type,vector_edge_type};
+//       vector< vector<medGeometryElement> > _constituents_type(__constituents_type,__constituents_type+2) ;
+
+//       _constituentsType = _constituents_type ;
+      medGeometryElement * tmpConstituentsType1 = new medGeometryElement[5] ;
+      tmpConstituentsType1[0] = MED_QUAD8 ;
+      tmpConstituentsType1[1] = MED_TRIA6 ;
+      tmpConstituentsType1[2] = MED_TRIA6 ;
+      tmpConstituentsType1[3] = MED_TRIA6 ;
+      tmpConstituentsType1[4] = MED_TRIA6 ;
+      medGeometryElement * tmpConstituentsType2 = new medGeometryElement[8] ;
+      tmpConstituentsType2[0] = MED_SEG3 ;
+      tmpConstituentsType2[1] = MED_SEG3 ;
+      tmpConstituentsType2[2] = MED_SEG3 ;
+      tmpConstituentsType2[3] = MED_SEG3 ;
+      tmpConstituentsType2[4] = MED_SEG3 ;
+      tmpConstituentsType2[5] = MED_SEG3 ;
+      tmpConstituentsType2[6] = MED_SEG3 ;
+      tmpConstituentsType2[7] = MED_SEG3 ;
+      _constituentsType = new medGeometryElement*[2] ;
+      _constituentsType[0]=tmpConstituentsType1 ;
+      _constituentsType[1]=tmpConstituentsType2 ;
       break;
     }
 //      default : 
@@ -567,13 +1768,20 @@ ostream & operator<<(ostream &os,const CELLMODEL &my)
   os << "  - dimension          : " << my._dimension << endl;
   os << "  - number of nodes    : " << my._numberOfNodes << endl ;
   os << "  - number of vertexes : " << my._numberOfVertexes << endl ;
-  for(int i=0;i<my._constituents.size();i++)
+
+  os << "  - number of Constituents Dimension : " << my._numberOfConstituentsDimension << endl ;
+
+  for(int i=0;i<my._numberOfConstituentsDimension;i++)
     {
+
       os << "  - for dimension (-" << i+1 << ") : " << endl ;
-      for(int j=0;j<my._constituents[i].size();j++)
+      os << "    - number of Constituents for this Dimension : " << my._numberOfConstituents[i] << endl ;
+
+      for(int j=0;j<my._numberOfConstituents[i];j++)
        {
-         os << "    - constituents " << j+1 << " of type "<< my._constituentsType[i][j] <<" : " ;
-         for(int k=0;k<my._constituents[i][j].size();k++)
+         os << "    - number of node for this constituent : " << my._numberOfNodeOfEachConstituent[i][j] << endl ;
+         os << "      - constituents " << j+1 << " of type "<< my._constituentsType[i][j] <<" : " ;
+         for(int k=0;k<my._numberOfNodeOfEachConstituent[i][j];k++)
            os << my._constituents[i][j][k] << " " ;
          os << endl ;
        }
@@ -581,49 +1789,117 @@ ostream & operator<<(ostream &os,const CELLMODEL &my)
   return os;
 }
 
-
-
-  // Return number of constituents type (which dimension is _dimension-1).
+// Return number of constituents type (which dimension is _dimension-1).
 int CELLMODEL::getNumberOfConstituentsType() const
 {
   set<medGeometryElement> constituentsTypes ;
-  if (_constituentsType.size() > 0 ) {
-    vector<medGeometryElement> constituentsType = _constituentsType[0] ;
-    vector<medGeometryElement>::iterator itvec ;
-    for(itvec=constituentsType.begin();itvec!=constituentsType.end();itvec++)
-      constituentsTypes.insert(*itvec);
-  }
+//   if (_constituentsType.size() > 0 ) {
+//     vector<medGeometryElement> constituentsType = _constituentsType[0] ;
+//     vector<medGeometryElement>::iterator itvec ;
+//     for(itvec=constituentsType.begin();itvec!=constituentsType.end();itvec++)
+//       constituentsTypes.insert(*itvec);
+//   }
   return constituentsTypes.size() ;
 }
 
   // Return all types of constituents which dimension is (_dimension-1).
-set <medGeometryElement>  CELLMODEL::getAllConstituentsType() const
+set<medGeometryElement>  CELLMODEL::getAllConstituentsType() const
 {
   set<medGeometryElement> constituentsTypes ;
-  if (_constituentsType.size() > 0 ) {
-    vector<medGeometryElement> constituentsType = _constituentsType[0] ;
-    vector<medGeometryElement>::iterator itvec ;
-    for(itvec=constituentsType.begin();itvec!=constituentsType.end();itvec++)
-      constituentsTypes.insert(*itvec);
-  }
+//   if (_constituentsType.size() > 0 ) {
+//     vector<medGeometryElement> constituentsType = _constituentsType[0] ;
+//     vector<medGeometryElement>::iterator itvec ;
+//     for(itvec=constituentsType.begin();itvec!=constituentsType.end();itvec++)
+//       constituentsTypes.insert(*itvec);
+//   }
   return constituentsTypes ;
 }
 
   // Return number of constituents foreach type (which dimension is _dimension-1).
-map <medGeometryElement,int>  CELLMODEL::getNumberOfConstituentsForeachType() const
+map<medGeometryElement,int>  CELLMODEL::getNumberOfConstituentsForeachType() const
 {
   map<medGeometryElement,int> numberOfConstituentsForeachType ;
-  map<medGeometryElement,int>::iterator itmap ;
-  if (_constituentsType.size() > 0 ) {
-    vector<medGeometryElement> constituentsType = _constituentsType[0] ;
-    vector<medGeometryElement>::iterator itvec ;
-    for(itvec=constituentsType.begin();itvec!=constituentsType.end();itvec++) {
-      itmap = numberOfConstituentsForeachType.find(*itvec);
-      if (itmap==numberOfConstituentsForeachType.end()) // new element
-       numberOfConstituentsForeachType[*itvec]=1 ;
-      else
-       numberOfConstituentsForeachType[*itvec]++ ;
+//   map<medGeometryElement,int>::iterator itmap ;
+//   if (_constituentsType.size() > 0 ) {
+//     vector<medGeometryElement> constituentsType = _constituentsType[0] ;
+//     vector<medGeometryElement>::iterator itvec ;
+//     for(itvec=constituentsType.begin();itvec!=constituentsType.end();itvec++) {
+//       itmap = numberOfConstituentsForeachType.find(*itvec);
+//       if (itmap==numberOfConstituentsForeachType.end()) // new element
+//     numberOfConstituentsForeachType[*itvec]=1 ;
+//       else
+//     numberOfConstituentsForeachType[*itvec]++ ;
+//     }
+//   }
+  return numberOfConstituentsForeachType ;
+}
+
+void CELLMODEL::init(const CELLMODEL &m)
+{
+  _name=m._name ;
+  _type= m._type ;
+  _dimension = m._dimension ;
+  _numberOfNodes = m._numberOfNodes ;
+  _numberOfVertexes = m._numberOfVertexes ;
+  
+  _numberOfConstituentsDimension = m._numberOfConstituentsDimension ;
+  
+  _numberOfConstituents = new int[_numberOfConstituentsDimension] ;
+  for(int i=0; i<_numberOfConstituentsDimension; i++)
+    _numberOfConstituents[i]=m._numberOfConstituents[i] ;
+  
+  _numberOfNodeOfEachConstituent = new (int*)[_numberOfConstituentsDimension] ;
+  for(int i=0; i<_numberOfConstituentsDimension; i++) {
+    int numberOf = _numberOfConstituents[i] ;
+    int * newArray = new int[numberOf] ;
+    int * oldArray = m._numberOfNodeOfEachConstituent[i] ;
+    for(int j=0; j<numberOf; j++)
+      newArray[j] = oldArray[j] ;
+    _numberOfNodeOfEachConstituent[i] = newArray ;
+  }
+  _constituents = new (int**)[_numberOfConstituentsDimension] ;
+  _constituentsType = new (medGeometryElement*)[_numberOfConstituentsDimension] ;
+  for(int i=0; i<_numberOfConstituentsDimension; i++) {
+    int numberOf = _numberOfConstituents[i] ;
+    int ** tmpArray = new (int*)[numberOf] ;
+    medGeometryElement * newArrayType = new medGeometryElement[numberOf] ;
+    medGeometryElement * oldArrayType = m._constituentsType[i] ;
+    
+    for(int j=0; j<numberOf; j++) {
+      int numberOf2 = _numberOfNodeOfEachConstituent[i][j] ;
+      int * newArray = new int[numberOf2] ;
+      int * oldArray = m._constituents[i][j] ;
+      for(int k=0; k<numberOf2; k++)
+       newArray[k] = oldArray[k] ;
+      tmpArray[j] = newArray ;
+      newArrayType[j] = oldArrayType[j] ;
     }
+    _constituents[i] = tmpArray ;
+    _constituentsType[i] = newArrayType ;
   }
-  return numberOfConstituentsForeachType ;
+  
+}
+void CELLMODEL::clean()
+{
+  for(int i=0; i<_numberOfConstituentsDimension; i++) {
+    int numberOf = _numberOfConstituents[i] ;
+    for(int j=0; j<numberOf; j++) {
+      if (NULL!=_constituents[i][j])
+       delete[] _constituents[i][j] ;
+    }
+    if (NULL!=_constituentsType[i])
+      delete[] _constituentsType[i] ;
+    if (NULL!=_constituents[i])
+      delete[] _constituents[i] ;
+    if (NULL!=_numberOfNodeOfEachConstituent[i])
+      delete[] _numberOfNodeOfEachConstituent[i] ;
+  }
+  if (NULL!=_numberOfConstituents)
+    delete[]_numberOfConstituents ;
+  if (NULL!=_constituentsType)
+    delete[] _constituentsType ;
+  if (NULL!=_constituents)
+    delete[] _constituents ;
+  if (NULL!=_numberOfNodeOfEachConstituent)
+    delete[] _numberOfNodeOfEachConstituent ;
 }