Salome HOME
Pent18 ready. Waiting for ultimate MED33 version with this new geo type
authorAnthony Geay <anthony.geay@edf.fr>
Mon, 11 Sep 2017 07:20:00 +0000 (09:20 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Mon, 11 Sep 2017 07:20:00 +0000 (09:20 +0200)
src/INTERP_KERNEL/Bases/NormalizedGeometricTypes
src/INTERP_KERNEL/CellModel.cxx
src/INTERP_KERNEL/VolSurfUser.txx
src/MEDCoupling/MEDCouplingUMesh.cxx
src/MEDCoupling_Swig/MEDCouplingBasicsTest6.py
src/MEDLoader/MEDFileFieldOverView.cxx
src/MEDLoader/MEDLoader.cxx

index d26e98cd70d535eb5df90e3b38d20b6d0d40d63e..e29651b84897e3347e754519dd9c1e523d09651b 100644 (file)
@@ -47,6 +47,7 @@ namespace INTERP_KERNEL
       NORM_HEXGP12 = 22,
       NORM_PYRA13  = 23,
       NORM_PENTA15 = 25,
+      NORM_PENTA18 = 28,
       NORM_HEXA20  = 30,
       NORM_HEXA27  = 27,
       NORM_POLYHED = 31,
index ed473f8de7cd945bbd9b8fa516ed72eff84d87de..b1adbda416fc283c86f0e9bb0c0e143056a0b97c 100644 (file)
@@ -16,7 +16,7 @@
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-// Author : Anthony Geay (CEA/DEN)
+// Author : Anthony Geay (EDF R&D)
 
 #include "CellModel.hxx"
 
@@ -36,7 +36,7 @@ namespace INTERP_KERNEL
                                             "NORM_SEG4", "", "", "", "NORM_TETRA4",//10->14
                                             "NORM_PYRA5", "NORM_PENTA6", "", "NORM_HEXA8", "",//15->19
                                             "NORM_TETRA10", "", "NORM_HEXGP12", "NORM_PYRA13", "",//20->24
-                                            "NORM_PENTA15", "", "NORM_HEXA27", "", "",//25->29
+                                            "NORM_PENTA15", "", "NORM_HEXA27", "", "NORM_PENTA18",//25->29
                                             "NORM_HEXA20", "NORM_POLYHED", "NORM_QPOLYG", "NORM_POLYL", "",//30->34
                                             "", "", "", "", "",//35->39
                                             "NORM_ERROR"};
@@ -100,6 +100,7 @@ namespace INTERP_KERNEL
     _map_of_unique_instance.insert(std::make_pair(NORM_HEXGP12,CellModel(NORM_HEXGP12)));
     _map_of_unique_instance.insert(std::make_pair(NORM_PYRA13,CellModel(NORM_PYRA13)));
     _map_of_unique_instance.insert(std::make_pair(NORM_PENTA15,CellModel(NORM_PENTA15)));
+    _map_of_unique_instance.insert(std::make_pair(NORM_PENTA18,CellModel(NORM_PENTA18)));
     _map_of_unique_instance.insert(std::make_pair(NORM_HEXA20,CellModel(NORM_HEXA20)));
     _map_of_unique_instance.insert(std::make_pair(NORM_HEXA27,CellModel(NORM_HEXA27)));
     _map_of_unique_instance.insert(std::make_pair(NORM_POLYGON,CellModel(NORM_POLYGON)));
@@ -360,6 +361,26 @@ namespace INTERP_KERNEL
           _little_sons_con[8][0]=2; _little_sons_con[8][1]=5; _little_sons_con[8][2]=14;
         }
         break;
+      case NORM_PENTA18:
+        {
+          _nb_of_pts=18; _nb_of_sons=5; _dim=3; _linear_type=NORM_PENTA6; _is_simplex=false;
+          _sons_type[0]=NORM_TRI6; _sons_type[1]=NORM_TRI6; _sons_type[2]=NORM_QUAD9; _sons_type[3]=NORM_QUAD9; _sons_type[4]=NORM_QUAD9;
+          _sons_con[0][0]=0; _sons_con[0][1]=1; _sons_con[0][2]=2; _sons_con[0][3]=6; _sons_con[0][4]=7; _sons_con[0][5]=8; _nb_of_sons_con[0]=6;
+          _sons_con[1][0]=3; _sons_con[1][1]=5; _sons_con[1][2]=4; _sons_con[1][3]=11; _sons_con[1][4]=10; _sons_con[1][5]=9; _nb_of_sons_con[1]=6;
+          _sons_con[2][0]=0; _sons_con[2][1]=3; _sons_con[2][2]=4; _sons_con[2][3]=1; _sons_con[2][4]=12; _sons_con[2][5]=9; _sons_con[2][6]=13; _sons_con[2][7]=6; _sons_con[2][8]=15; _nb_of_sons_con[2]=9;
+          _sons_con[3][0]=1; _sons_con[3][1]=4; _sons_con[3][2]=5; _sons_con[3][3]=2; _sons_con[3][4]=13; _sons_con[3][5]=10; _sons_con[3][6]=14; _sons_con[3][7]=7; _sons_con[3][8]=16; _nb_of_sons_con[3]=9;
+          _sons_con[4][0]=2; _sons_con[4][1]=4; _sons_con[4][2]=5; _sons_con[4][3]=0; _sons_con[4][4]=14; _sons_con[4][5]=11; _sons_con[4][6]=12; _sons_con[4][7]=8; _sons_con[4][8]=17; _nb_of_sons_con[4]=9; _quadratic=true;
+          _little_sons_con[0][0]=0; _little_sons_con[0][1]=1; _little_sons_con[0][2]=6;  _nb_of_little_sons=9;
+          _little_sons_con[1][0]=1; _little_sons_con[1][1]=2; _little_sons_con[1][2]=7;
+          _little_sons_con[2][0]=2; _little_sons_con[2][1]=0; _little_sons_con[2][2]=8;
+          _little_sons_con[3][0]=3; _little_sons_con[3][1]=4; _little_sons_con[3][2]=9;
+          _little_sons_con[4][0]=4; _little_sons_con[4][1]=5; _little_sons_con[4][2]=10;
+          _little_sons_con[5][0]=5; _little_sons_con[5][1]=3; _little_sons_con[5][2]=11;
+          _little_sons_con[6][0]=0; _little_sons_con[6][1]=3; _little_sons_con[6][2]=12;
+          _little_sons_con[7][0]=1; _little_sons_con[7][1]=4; _little_sons_con[7][2]=13;
+          _little_sons_con[8][0]=2; _little_sons_con[8][1]=5; _little_sons_con[8][2]=14;
+        }
+        break;
       case NORM_HEXA20:
         {
           _nb_of_pts=20; _nb_of_sons=6; _dim=3; _linear_type=NORM_HEXA8; _is_simplex=false;
index 9e1cd383dc44e19d90ffc2fe8726d5bc9b087714..ea317f0c84afeb3697895b624c567a811ae31bbf 100644 (file)
@@ -156,6 +156,7 @@ namespace INTERP_KERNEL
             
       case INTERP_KERNEL::NORM_PENTA6 :
       case INTERP_KERNEL::NORM_PENTA15 :
+      case INTERP_KERNEL::NORM_PENTA18 :
         {
           int N1 = OTT<ConnType,numPol>::coo2C(connec[0]);
           int N2 = OTT<ConnType,numPol>::coo2C(connec[1]);
index c20930714891eec7013deaaea4d3836057ec3ab8..525f31c25bc9c053e707b533d3316804c7ca8469 100644 (file)
@@ -57,7 +57,7 @@ double MEDCouplingUMesh::EPS_FOR_POLYH_ORIENTATION=1.e-14;
 
 /// @cond INTERNAL
 const INTERP_KERNEL::NormalizedCellType MEDCouplingUMesh::MEDMEM_ORDER[N_MEDMEM_ORDER] = { INTERP_KERNEL::NORM_POINT1, INTERP_KERNEL::NORM_SEG2, INTERP_KERNEL::NORM_SEG3, INTERP_KERNEL::NORM_SEG4, INTERP_KERNEL::NORM_POLYL, INTERP_KERNEL::NORM_TRI3, INTERP_KERNEL::NORM_QUAD4, INTERP_KERNEL::NORM_TRI6, INTERP_KERNEL::NORM_TRI7, INTERP_KERNEL::NORM_QUAD8, INTERP_KERNEL::NORM_QUAD9, INTERP_KERNEL::NORM_POLYGON, INTERP_KERNEL::NORM_QPOLYG, INTERP_KERNEL::NORM_TETRA4, INTERP_KERNEL::NORM_PYRA5, INTERP_KERNEL::NORM_PENTA6, INTERP_KERNEL::NORM_HEXA8, INTERP_KERNEL::NORM_HEXGP12, INTERP_KERNEL::NORM_TETRA10, INTERP_KERNEL::NORM_PYRA13, INTERP_KERNEL::NORM_PENTA15, INTERP_KERNEL::NORM_HEXA20, INTERP_KERNEL::NORM_HEXA27, INTERP_KERNEL::NORM_POLYHED };
-const int MEDCouplingUMesh::MEDCOUPLING2VTKTYPETRADUCER[INTERP_KERNEL::NORM_MAXTYPE+1]={1,3,21,5,9,7,22,34,23,28,-1,-1,-1,-1,10,14,13,-1,12,-1,24,-1,16,27,-1,26,-1,29,-1,-1,25,42,36,4};
+const int MEDCouplingUMesh::MEDCOUPLING2VTKTYPETRADUCER[INTERP_KERNEL::NORM_MAXTYPE+1]={1,3,21,5,9,7,22,34,23,28,-1,-1,-1,-1,10,14,13,-1,12,-1,24,-1,16,27,-1,26,-1,29,32,-1,25,42,36,4};
 /// @endcond
 
 MEDCouplingUMesh *MEDCouplingUMesh::New()
index f767558e0ec8062286098f3e295c4b623ff31b74..583f96a84cf9abdb2d92341875d823f9e2851735 100644 (file)
@@ -106,6 +106,43 @@ class MEDCouplingBasicsTest6(unittest.TestCase):
         level3(self)
         gtumesh(self)
         pass
+
+    def testPenta18_1(self):
+        arr=DataArrayDouble([
+            (0.,1.,1.),(0.,0.,1.),(1.,0.,1.),
+            (0.,1.,0.),(0.,0.,0.),(1.,0.,0.),
+            (0.,0.5,1.),(0.5,0.,1.),(0.5,0.5,1.),
+            (0.,0.5,0.),(0.5,0.,0.),(0.5,0.5,0.),
+            (0.,1.,0.5),(0.,0.,0.5),(1.,0.,0.5),
+            (0.,0.5,0.5),(0.5,0.,0.5),(0.5,0.5,0.5)])
+        m=MEDCouplingUMesh("mesh",3)
+        m.setCoords(arr)
+        m.allocateCells(1)
+        m.insertNextCell(NORM_PENTA18,list(range(18)))
+        m.checkConsistencyLight()
+        self.assertTrue(m.getMeasureField(True).getArray().isEqual(DataArrayDouble([0.5]),1e-12))
+        #
+        f=MEDCouplingFieldDouble(ON_NODES)
+        f.setMesh(m)
+        f.setName("FieldOnPenta18")
+        f.setArray(DataArrayDouble(list(range(18))))
+        f.checkConsistencyLight()
+        #
+        m2,d,di,rd,rdi=m.buildDescendingConnectivity()
+        self.assertTrue(m2.getNodalConnectivity().isEqual(DataArrayInt([6,0,1,2,6,7,8,6,3,5,4,11,10,9,9,0,3,4,1,12,9,13,6,15,9,1,4,5,2,13,10,14,7,16,9,2,4,5,0,14,11,12,8,17])))
+        self.assertTrue(m2.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7,14,24,34,44])))
+        self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4])))
+        self.assertTrue(di.isEqual(DataArrayInt([0,5])))
+        self.assertTrue(rd.isEqual(DataArrayInt([0,0,0,0,0])))
+        self.assertTrue(rdi.isEqual(DataArrayInt([0,1,2,3,4,5])))
+        #
+        f2=MEDCouplingFieldDouble(ON_NODES)
+        f2.setMesh(m)
+        f2.setName("FieldOnPenta18Sub")
+        f2.setArray(DataArrayDouble(list(range(18))))
+        f2.checkConsistencyLight()
+        pass
+    
     pass
 
 if __name__ == '__main__':
index 61362c86c0948e1448dfba03de087a269167444a..4ab8737bf6979d44a017a6e1e7d4e310724ba786 100644 (file)
@@ -28,7 +28,7 @@
 using namespace MEDCoupling;
 
 const unsigned char MEDMeshMultiLev::PARAMEDMEM_2_VTKTYPE[MEDMeshMultiLev::PARAMEDMEM_2_VTKTYPE_LGTH]=
-{1,3,21,5,9,7,22,34,23,28,35,255,255,255,10,14,13,255,12,255,24,255,16,27,255,26,255,29,255,255,25,42,36,4};
+{1,3,21,5,9,7,22,34,23,28,35,255,255,255,10,14,13,255,12,255,24,255,16,27,255,26,255,29,32,255,25,42,36,4};
 
 const unsigned char MEDMeshMultiLev::HEXA27_PERM_ARRAY[27]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,24,22,21,23,20,25,26};
 
index 6f3ae83f2d06b5c5f86b724dac3b4497ee5171d6..27766c89c341dc23c6740d0b7584804f25406b13 100644 (file)
@@ -64,6 +64,7 @@ med_geometry_type typmai[MED_N_CELL_FIXED_GEO] = { MED_POINT1,
   MED_TETRA10,
   MED_PYRA13,
   MED_PENTA15,
+  // MED_PENTA18,
   MED_HEXA20,
   MED_HEXA27,
   MED_POLYGON,
@@ -90,6 +91,7 @@ INTERP_KERNEL::NormalizedCellType typmai2[MED_N_CELL_FIXED_GEO] = { INTERP_KERNE
   INTERP_KERNEL::NORM_TETRA10,
   INTERP_KERNEL::NORM_PYRA13,
   INTERP_KERNEL::NORM_PENTA15,
+  // INTERP_KERNEL::NORM_PENTA18,
   INTERP_KERNEL::NORM_HEXA20,
   INTERP_KERNEL::NORM_HEXA27,
   INTERP_KERNEL::NORM_POLYGON,
@@ -124,7 +126,7 @@ med_geometry_type typmai3[34] = { MED_POINT1,//0
   MED_PENTA15,//25
   MED_NONE,//26
   MED_HEXA27,//27
-  MED_NONE,//28
+  MED_NONE,//28 MED_PENTA18
   MED_NONE,//29
   MED_HEXA20,//30
   MED_POLYHEDRON,//31