Salome HOME
Optimizations for new MEDReader
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest4.py
index 029e00b6661216a41476e8d61bd7d98c2f140843..573953caaab85eeaeb5ddb8a99667dd7875a984b 100644 (file)
@@ -50,6 +50,10 @@ class MEDLoaderTest4(unittest.TestCase):
         m.setName("mesh") ; m.getCoords().setInfoOnComponents(["XX [m]","YYY [km]"])
         m1=m.buildDescendingConnectivity()[0]
         mm=MEDFileUMesh() ; mm.setMeshes([m,m1])
+        fam=DataArrayInt(9) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam)
+        fam=DataArrayInt(32) ; fam.iota(20) ; mm.setFamilyFieldArr(-1,fam) ; del fam
+        num=DataArrayInt(9) ; num.iota(100) ; mm.setRenumFieldArr(0,num)
+        num=DataArrayInt(32) ; num.iota(120) ; mm.setRenumFieldArr(-1,num) ; del num
         #
         fieldName="zeField"
         fs=MEDFileFieldMultiTS()
@@ -175,13 +179,20 @@ class MEDLoaderTest4(unittest.TestCase):
         for i in xrange(1,5):
             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
             pass
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,9,9,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
         self.assertTrue(a3.isEqual(DataArrayInt([2,0,1,2,1,2,2,2,0,2,3,4,2,4,5,2,5,3,2,6,7,2,7,8,2,8,6,2,9,10,2,10,11,2,11,9,2,12,13,2,13,14,2,14,15,2,15,12,2,16,17,2,17,18,2,18,19,2,19,16,2,20,21,2,21,22,2,22,23,2,23,20,2,24,25,2,25,26,2,26,27,2,27,24,2,28,29,2,29,30,2,30,31,2,31,28,3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
         self.assertTrue(a4 is None)
         self.assertTrue(a5 is None)
+        a6,a7=mml2.retrieveFamilyIdsOnCells()
+        self.assertTrue(a6.isEqual(DataArrayInt([20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,0,1,2,3,4,5,6,7,8])))
+        self.assertTrue(not a7)
+        a8,a9=mml2.retrieveNumberIdsOnCells()
+        self.assertTrue(a8.isEqual(DataArrayInt([120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,100,101,102,103,104,105,106,107,108])))
+        self.assertTrue(not a9)
         for i in xrange(5):
             fsst=MEDFileField1TSStructItem.BuildItemFrom(fields[0][i],mst)
             fields[0][i].loadArraysIfNecessary()
@@ -380,8 +391,9 @@ class MEDLoaderTest4(unittest.TestCase):
         for i in xrange(1,5):
             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
             pass
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,9,9,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
         self.assertTrue(a3.isEqual(DataArrayInt([2,0,1,2,1,2,2,2,0,2,3,4,2,4,5,2,5,3,2,6,7,2,7,8,2,8,6,2,9,10,2,10,11,2,11,9,2,12,13,2,13,14,2,14,15,2,15,12,2,16,17,2,17,18,2,18,19,2,19,16,2,20,21,2,21,22,2,22,23,2,23,20,2,24,25,2,25,26,2,26,27,2,27,24,2,28,29,2,29,30,2,30,31,2,31,28,3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
@@ -538,8 +550,9 @@ class MEDLoaderTest4(unittest.TestCase):
         for i in xrange(1,3):
             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
             pass
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,5,5,5,5,9,9,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,67,70,73,76,80,84,88,92,96])))
         self.assertTrue(a3.isEqual(DataArrayInt([2,0,1,2,1,2,2,2,0,2,3,4,2,4,5,2,5,3,2,6,7,2,7,8,2,8,6,2,9,10,2,10,11,2,11,9,2,12,13,2,13,14,2,14,15,2,15,12,2,16,17,2,17,18,2,18,19,2,19,16,2,20,21,2,21,22,2,22,23,2,23,20,2,24,25,2,25,26,2,26,27,2,27,24,2,28,29,2,29,30,2,30,31,2,31,28,3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
@@ -567,8 +580,9 @@ class MEDLoaderTest4(unittest.TestCase):
         for i in xrange(1,2):
             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
             pass
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,16,20,24,28,32])))
         self.assertTrue(a3.isEqual(DataArrayInt([3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
@@ -788,8 +802,9 @@ class MEDLoaderTest4(unittest.TestCase):
         for i in xrange(1,5):
             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
             pass
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,9,9,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,16,20,24,28,32])))
         self.assertTrue(a3.isEqual(DataArrayInt([3,0,1,2,3,3,4,5,3,6,7,8,3,9,10,11,4,12,13,14,15,4,16,17,18,19,4,20,21,22,23,4,24,25,26,27,4,28,29,30,31])))
@@ -845,6 +860,8 @@ class MEDLoaderTest4(unittest.TestCase):
         m.insertNextCell(NORM_QUAD4,[0,5,6,1]) ; m.insertNextCell(NORM_QUAD4,[1,6,7,2]) ; m.insertNextCell(NORM_QUAD4,[5,10,11,6]) ; m.insertNextCell(NORM_QUAD4,[6,11,12,7])
         m.insertNextCell(NORM_QUAD4,[12,13,8,7])
         mm=MEDFileUMesh() ; mm.setMeshes([m])
+        fam=DataArrayInt(11) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam) ; del fam
+        num=DataArrayInt(11) ; num.iota(100) ; mm.setRenumFieldArr(0,num) ; del num
         #
         fieldName1="zeField1" ; pfl1=DataArrayInt([0,1,2,3,4,5]) ; pfl1.setName("pfl1") # on cells
         fieldName2="zeField2" ; pfl2=DataArrayInt([2,3,4,7,8,9,13,14]) ; pfl2.setName("pfl2") # on nodes
@@ -911,13 +928,20 @@ class MEDLoaderTest4(unittest.TestCase):
         for i in xrange(1,5):
             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
             pass
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp[pfl2],1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp[pfl2].changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5])))
         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18])))
         self.assertTrue(a3.isEqual(DataArrayInt([3,0,3,1,3,3,4,1,3,1,4,2,3,4,5,2,3,6,5,4,3,6,7,5])))
         assert a4 is None
         assert a5 is None
+        a6,a7=mml2.retrieveFamilyIdsOnCells()
+        self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5])))
+        self.assertTrue(not a7)
+        a8,a9=mml2.retrieveNumberIdsOnCells()
+        self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105])))
+        self.assertTrue(not a9)
         for i in xrange(5):
             nbOfT=[6,8]
             fieldNames=[fieldName1,fieldName2]
@@ -941,13 +965,20 @@ class MEDLoaderTest4(unittest.TestCase):
         for i in xrange(1,5):
             self.assertTrue(fcscp.isDataSetSupportEqualToThePreviousOne(i,fields))
             pass
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18,22,26])))
         self.assertTrue(a3.isEqual(DataArrayInt([3,2,7,3,3,7,8,3,3,3,8,4,3,8,9,4,3,13,9,8,3,13,14,9,4,6,11,12,7,4,12,13,8,7])))
         self.assertTrue(a4 is None)
         self.assertTrue(a5 is None)
+        a6,a7=mml2.retrieveFamilyIdsOnCells()
+        self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,9,10])))
+        self.assertTrue(not a7)
+        a8,a9=mml2.retrieveNumberIdsOnCells()
+        self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,109,110])))
+        self.assertTrue(not a9)
         for i in xrange(5):
             f=allFMTSLeavesPerCommonSupport[1][0][0][i]
             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
@@ -969,6 +1000,8 @@ class MEDLoaderTest4(unittest.TestCase):
         coordsY=DataArrayDouble([0,1.7,3.4]) ; coordsY.setInfoOnComponents(["YYY [km]"])
         m.setCoords(coordsX,coordsY)
         mm=MEDFileCMesh() ; mm.setMesh(m)
+        fam=DataArrayInt(8) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam) ; del fam
+        num=DataArrayInt(8) ; num.iota(100) ; mm.setRenumFieldArr(0,num) ; del num
         #
         fieldName0="zeField0" ; # on cells
         fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
@@ -1059,6 +1092,12 @@ class MEDLoaderTest4(unittest.TestCase):
         for i in xrange(1,5):
             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
             pass
+        a6,a7=mml2.retrieveFamilyIdsOnCells()
+        self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,6,7])))
+        self.assertTrue(a7) # True because no copy
+        a8,a9=mml2.retrieveNumberIdsOnCells()
+        self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,106,107])))
+        self.assertTrue(a9) # True because no copy
         for i in xrange(5):
             f=allFMTSLeavesPerCommonSupport[0][0][0][i]
             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
@@ -1086,6 +1125,12 @@ class MEDLoaderTest4(unittest.TestCase):
         a,b=mml2.buildVTUArrays()
         self.assertTrue(a.isEqual(coordsX[[2,3,4]],1e-12))
         self.assertTrue(b.isEqual(coordsY,1e-12))
+        a6,a7=mml2.retrieveFamilyIdsOnCells()
+        self.assertTrue(a6.isEqual(DataArrayInt([2,3,6,7])))
+        self.assertTrue(not a7) # False because copy
+        a8,a9=mml2.retrieveNumberIdsOnCells()
+        self.assertTrue(a8.isEqual(DataArrayInt([102,103,106,107])))
+        self.assertTrue(not a9) # False because copy
         for i in xrange(1,5):
             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
             pass
@@ -1113,15 +1158,22 @@ class MEDLoaderTest4(unittest.TestCase):
         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
         mml2=mml.prepare()
         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
         a0Exp=DataArrayDouble([0.,0.,1.1,0.,2.2,0.,3.3,0.,4.4,0.,0.,1.7,1.1,1.7,2.2,1.7,3.3,1.7,4.4,1.7,0.,3.4,1.1,3.4,2.2,3.4,3.3,3.4,4.4,3.4],15,2)
         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16])))
         self.assertTrue(a3.isEqual(DataArrayInt([4,3,2,7,8,4,4,3,8,9,4,7,6,11,12,4,9,8,13,14])))
         self.assertTrue(a4 is None)
         self.assertTrue(a5 is None)
+        a6,a7=mml2.retrieveFamilyIdsOnCells()
+        self.assertTrue(a6.isEqual(DataArrayInt([2,3,5,7])))
+        self.assertTrue(not a7) # False because copy
+        a8,a9=mml2.retrieveNumberIdsOnCells()
+        self.assertTrue(a8.isEqual(DataArrayInt([102,103,105,107])))
+        self.assertTrue(not a9) # False because copy
         for i in xrange(5):
             f=allFMTSLeavesPerCommonSupport[2][0][0][i]
             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
@@ -1144,6 +1196,8 @@ class MEDLoaderTest4(unittest.TestCase):
         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
         m.setCoords(a0Exp)
         mm=MEDFileCurveLinearMesh() ; mm.setMesh(m)
+        fam=DataArrayInt(8) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam) ; del fam
+        num=DataArrayInt(8) ; num.iota(100) ; mm.setRenumFieldArr(0,num) ; del num
         #
         fieldName0="zeField0" ; # on cells
         fieldName1="zeField1" ; pfl1=DataArrayInt([2,3,6,7]) ; pfl1.setName("pfl1") # on cells
@@ -1231,6 +1285,12 @@ class MEDLoaderTest4(unittest.TestCase):
         a,b=mml2.buildVTUArrays()
         self.assertTrue(a.isEqual(a0Exp,1e-12))
         self.assertEqual(b,[5,3])
+        a6,a7=mml2.retrieveFamilyIdsOnCells()
+        self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,6,7])))
+        self.assertTrue(a7) # True because no copy
+        a8,a9=mml2.retrieveNumberIdsOnCells()
+        self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,106,107])))
+        self.assertTrue(a9) # True because no copy
         for i in xrange(1,5):
             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
             pass
@@ -1261,6 +1321,12 @@ class MEDLoaderTest4(unittest.TestCase):
         a,b=mml2.buildVTUArrays()
         self.assertTrue(a.isEqual(a0Exp[pfl2],1e-12))
         self.assertEqual(b,[3,3])
+        a6,a7=mml2.retrieveFamilyIdsOnCells()
+        self.assertTrue(a6.isEqual(DataArrayInt([2,3,6,7])))
+        self.assertTrue(not a7) # False because copy
+        a8,a9=mml2.retrieveNumberIdsOnCells()
+        self.assertTrue(a8.isEqual(DataArrayInt([102,103,106,107])))
+        self.assertTrue(not a9) # False because copy
         for i in xrange(1,5):
             self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
             pass
@@ -1288,15 +1354,22 @@ class MEDLoaderTest4(unittest.TestCase):
         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
         mml2=mml.prepare()
         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev)) # here the 3rd support is a part of CMesh but impossible to simplify more than a UMesh
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
         a0Exp=DataArrayDouble([0.,0.,1.1,0.,2.2,0.,3.3,0.,4.4,0.,0.,1.7,1.1,1.7,2.2,1.7,3.3,1.7,4.4,1.7,0.,3.4,1.1,3.4,2.2,3.4,3.3,3.4,4.4,3.4],15,2)
         a0Exp.setInfoOnComponents(["XX [m]","YYY [km]"])
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16])))
         self.assertTrue(a3.isEqual(DataArrayInt([4,3,2,7,8,4,4,3,8,9,4,7,6,11,12,4,9,8,13,14])))
         self.assertTrue(a4 is None)
         self.assertTrue(a5 is None)
+        a6,a7=mml2.retrieveFamilyIdsOnCells()
+        self.assertTrue(a6.isEqual(DataArrayInt([2,3,5,7])))
+        self.assertTrue(not a7) # False because copy
+        a8,a9=mml2.retrieveNumberIdsOnCells()
+        self.assertTrue(a8.isEqual(DataArrayInt([102,103,105,107])))
+        self.assertTrue(not a9) # False because copy
         for i in xrange(5):
             f=allFMTSLeavesPerCommonSupport[2][0][0][i]
             fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
@@ -1399,8 +1472,9 @@ class MEDLoaderTest4(unittest.TestCase):
         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
         mml2=mml.prepare()
         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([5,5,5,5,5,5,9,9,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([3,6,9,12,15,18,22,26,30,34,38])))
         self.assertTrue(a3.isEqual(DataArrayInt([3,2,7,3,3,7,8,3,3,3,8,4,3,8,9,4,3,13,9,8,3,13,14,9,4,0,5,6,1,4,1,6,7,2,4,5,10,11,6,4,6,11,12,7,4,12,13,8,7])))
@@ -1541,8 +1615,9 @@ class MEDLoaderTest4(unittest.TestCase):
         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
         mml2=mml.prepare()
         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp[pfl2],1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp[pfl2].changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([3,6,10,14,18])))
         self.assertTrue(a3.isEqual(DataArrayInt([3,1,4,2,3,4,5,2,4,0,3,4,1,4,3,6,7,4,4,7,8,5,4])))
@@ -1668,8 +1743,9 @@ class MEDLoaderTest4(unittest.TestCase):
         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
         mml2=mml.prepare()
         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp[pfl1],1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp[pfl1].changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([5,5,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([3,6,10,14,18])))
         self.assertTrue(a3.isEqual(DataArrayInt([3,1,4,2,3,4,5,2,4,0,3,4,1,4,3,6,7,4,4,7,8,5,4])))
@@ -1765,8 +1841,9 @@ class MEDLoaderTest4(unittest.TestCase):
         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
         mml2=mml.prepare()
         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64])))
         self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,5,6,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,9,8,13,14,4,19,18,23,24,4,2,1,6,7,4,7,6,11,12,4,11,10,15,16,4,12,11,16,17,4,8,7,12,13,4,13,12,17,18,4,17,16,21,22,4,14,13,18,19,4,16,15,20,21,4,18,17,22,23]))) # <- here the mesh is renumbered : the mesh is equal to m[[0,2,3,4,7,15, 1,5,8,9, 6,10,13, 11,12,14]]
@@ -1854,8 +1931,9 @@ class MEDLoaderTest4(unittest.TestCase):
         mml=fcscp.buildFromScratchDataSetSupport(0,fields)
         mml2=mml.prepare()
         self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
-        a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
-        self.assertTrue(a0.isEqual(a0Exp,1e-12))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(not ncc)
+        self.assertTrue(a0.isEqual(a0Exp.changeNbOfComponents(3,0.),1e-12))
         self.assertTrue(a1.isEqual(DataArrayByte([9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9])))
         self.assertTrue(a2.isEqual(DataArrayInt([4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64])))
         self.assertTrue(a3.isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,7,6,11,12,4,8,7,12,13,4,9,8,13,14,4,11,10,15,16,4,12,11,16,17,4,13,12,17,18,4,14,13,18,19,4,16,15,20,21,4,17,16,21,22,4,18,17,22,23,4,19,18,23,24]))) # <- here the mesh is NOT renumbered : the mesh is equal to m
@@ -1883,6 +1961,410 @@ class MEDLoaderTest4(unittest.TestCase):
             vExp=DataArrayDouble(16*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
             self.assertTrue(v.isEqual(vExp,1e-12))
             pass
+
+    def test13(self):
+            """ Testing polyhedrons mixed with hexa8"""
+            fname="ForMEDReader13.med"
+            m=MEDCouplingUMesh("mesh",3)
+            m.allocateCells()
+            m.insertNextCell(NORM_HEXA8,[1,0,6,7,13,12,18,19]) ; m.insertNextCell(NORM_HEXA8,[2,1,7,8,14,13,19,20])
+            m.insertNextCell(NORM_POLYHED,[3,2,8,9,-1,15,21,20,14,-1,3,15,14,2,-1,2,14,20,8,-1,8,20,21,9,-1,9,21,15,3])
+            m.insertNextCell(NORM_POLYHED,[4,3,9,10,-1,16,22,21,15,-1,4,16,15,3,-1,3,15,21,9,-1,9,21,22,10,-1,10,22,16,4])
+            m.insertNextCell(NORM_POLYHED,[5,4,10,11,-1,17,23,22,16,-1,5,17,16,4,-1,4,16,22,10,-1,10,22,23,11,-1,11,23,17,5])
+            coords=DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,3.,0.,0.,4.,0.,0.,5.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,3.,1.,0.,4.,1.,0.,5.,1.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,3.,0.,1.,4.,0.,1.,5.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,3.,1.,1.,4.,1.,1.,5.,1.,1.],24,3) ; coords.setInfoOnComponents(["XX [m]","YYY [km]","ZZZZ [Mm]"])
+            m.setCoords(coords)
+            mm=MEDFileUMesh() ; mm.setMeshes([m])
+            fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS() ; fs2=MEDFileFieldMultiTS() ; fs3=MEDFileFieldMultiTS()
+            fieldName0="zeField0"
+            fieldName1="zeField1"
+            fieldName2="zeField2" ; pfl1=DataArrayInt([2,3]) ; pfl1.setName("pfl1")
+            fieldName3="zefield3" ; pfl2=DataArrayInt([2,3,4]) ; pfl2.setName("pfl2")
+            for i in xrange(5):
+                f=MEDFileField1TS()
+                fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
+                fNode.setName(fieldName0) ; fNode.setMesh(m)
+                arr=DataArrayDouble(2*5) ; arr.iota(0+1000*i) ; arr.rearrange(2)
+                fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
+                f.setFieldNoProfileSBT(fNode)
+                fs0.pushBackTimeStep(f)
+                #
+                f=MEDFileField1TS()
+                fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
+                fNode.setName(fieldName1) ; fNode.setMesh(m)
+                arr=DataArrayDouble(2*5) ; arr.iota(100+1000*i) ; arr.rearrange(2)
+                fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
+                f.setFieldNoProfileSBT(fNode)
+                fs1.pushBackTimeStep(f)
+                #
+                f=MEDFileField1TS()
+                fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
+                fNode.setName(fieldName2) ; fNode.setMesh(m[pfl1])
+                arr=DataArrayDouble(2*2) ; arr.iota(200+1000*i) ; arr.rearrange(2)
+                fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_2 [m]","Com2_2 [s^2]"]) ; fNode.checkCoherency()
+                f.setFieldProfile(fNode,mm,0,pfl1)
+                fs2.pushBackTimeStep(f)
+                #
+                f=MEDFileField1TS()
+                fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
+                fNode.setName(fieldName3) ; fNode.setMesh(m[pfl2])
+                arr=DataArrayDouble(2*3) ; arr.iota(300+1000*i) ; arr.rearrange(2)
+                fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_3 [m]","Com2_3 [s^2]"]) ; fNode.checkCoherency()
+                f.setFieldProfile(fNode,mm,0,pfl2)
+                fs3.pushBackTimeStep(f)
+                pass
+            mm.write(fname,2)
+            fs0.write(fname,0) ; fs1.write(fname,0) ; fs2.write(fname,0) ; fs3.write(fname,0)
+            a0Exp=mm.getCoords().deepCpy()
+            del m,mm,fs0
+            ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
+            ms=MEDFileMeshes(fname)
+            fields=MEDFileFields(fname,False)
+            fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
+            allFMTSLeavesToDisplay=[]
+            for fields in fields_per_mesh:
+                allFMTSLeavesToDisplay2=[]
+                for fmts in fields:
+                    allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
+                    pass
+                allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
+                pass
+            self.assertEqual(len(allFMTSLeavesToDisplay),1)
+            self.assertEqual(len(allFMTSLeavesToDisplay[0]),4)
+            allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
+            self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
+            self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),4)
+            allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
+            self.assertEqual(len(allFMTSLeavesPerCommonSupport),3)
+            self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
+            self.assertEqual(len(allFMTSLeavesPerCommonSupport[1][0]),1)
+            self.assertEqual(len(allFMTSLeavesPerCommonSupport[2][0]),1)
+            #
+            mst=MEDFileMeshStruct.New(ms[0])
+            #
+            fcscp=allFMTSLeavesPerCommonSupport[0][1]
+            mml=fcscp.buildFromScratchDataSetSupport(0,fields)
+            mml2=mml.prepare()
+            self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
+            ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+            self.assertTrue(ncc)
+            self.assertTrue(a0.isEqual(a0Exp,1e-12))
+            self.assertTrue(a1.isEqual(DataArrayByte([12,12,42,42,42])))
+            self.assertTrue(a2.isEqual(DataArrayInt([8,16,24,32,40])))
+            self.assertTrue(a3.isEqual(DataArrayInt([8,1,0,6,7,13,12,18,19,8,2,1,7,8,14,13,19,20,8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22,8,4,5,10,11,16,17,22,23])))
+            self.assertTrue(a4.isEqual(DataArrayInt([-1,-1,0,31,62])))
+            self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4,6,4,5,4,10,11,4,17,23,22,16,4,5,17,16,4,4,4,16,22,10,4,10,22,23,11,4,11,23,17,5])))
+            for i in xrange(1,5):
+                self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
+                pass
+            pass
+            for i in xrange(5):
+                f=allFMTSLeavesPerCommonSupport[0][0][0][i]
+                fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
+                f.loadArraysIfNecessary()
+                v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
+                self.assertEqual(f.getName(),fieldName0)
+                self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
+                vExp=DataArrayDouble(5*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
+                self.assertTrue(v.isEqual(vExp,1e-12))
+                #
+                f=allFMTSLeavesPerCommonSupport[0][0][1][i]
+                fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
+                f.loadArraysIfNecessary()
+                v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
+                self.assertEqual(f.getName(),fieldName1)
+                self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
+                vExp=DataArrayDouble(5*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
+                self.assertTrue(v.isEqual(vExp,1e-12))
+                pass
+            #
+            fcscp=allFMTSLeavesPerCommonSupport[1][1]
+            mml=fcscp.buildFromScratchDataSetSupport(0,fields)
+            mml2=mml.prepare()
+            self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
+            ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+            self.assertTrue(ncc)
+            self.assertTrue(a0.isEqual(a0Exp,1e-12))
+            self.assertTrue(a1.isEqual(DataArrayByte([42,42])))
+            self.assertTrue(a2.isEqual(DataArrayInt([8,16])))
+            self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22])))
+            self.assertTrue(a4.isEqual(DataArrayInt([0,31])))
+            self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4])))
+            for i in xrange(1,5):
+                self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
+                pass
+            pass
+            for i in xrange(5):
+                f=allFMTSLeavesPerCommonSupport[1][0][0][i]
+                fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
+                f.loadArraysIfNecessary()
+                v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
+                self.assertEqual(f.getName(),fieldName2)
+                self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
+                vExp=DataArrayDouble(2*2) ; vExp.iota(200+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_2 [m]','Com2_2 [s^2]'])
+                self.assertTrue(v.isEqual(vExp,1e-12))
+                pass
+            #
+            fcscp=allFMTSLeavesPerCommonSupport[2][1]
+            mml=fcscp.buildFromScratchDataSetSupport(0,fields)
+            mml2=mml.prepare()
+            self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
+            ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+            self.assertTrue(ncc)
+            self.assertTrue(a0.isEqual(a0Exp,1e-12))
+            self.assertTrue(a1.isEqual(DataArrayByte([42,42,42])))
+            self.assertTrue(a2.isEqual(DataArrayInt([8,16,24])))
+            self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22,8,4,5,10,11,16,17,22,23])))
+            self.assertTrue(a4.isEqual(DataArrayInt([0,31,62])))
+            self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4,6,4,5,4,10,11,4,17,23,22,16,4,5,17,16,4,4,4,16,22,10,4,10,22,23,11,4,11,23,17,5])))
+            for i in xrange(1,5):
+                self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
+                pass
+            pass
+            for i in xrange(5):
+                f=allFMTSLeavesPerCommonSupport[2][0][0][i]
+                fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
+                f.loadArraysIfNecessary()
+                v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
+                self.assertEqual(f.getName(),fieldName3)
+                self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
+                vExp=DataArrayDouble(3*2) ; vExp.iota(300+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_3 [m]','Com2_3 [s^2]'])
+                self.assertTrue(v.isEqual(vExp,1e-12))
+                pass
+            pass
+
+    def test14(self):
+            """ Testing only polyhedrons"""
+            fname="ForMEDReader14.med"
+            m=MEDCouplingUMesh("mesh",3)
+            m.allocateCells()
+            m.insertNextCell(NORM_POLYHED,[3,2,8,9,-1,15,21,20,14,-1,3,15,14,2,-1,2,14,20,8,-1,8,20,21,9,-1,9,21,15,3])
+            m.insertNextCell(NORM_POLYHED,[4,3,9,10,-1,16,22,21,15,-1,4,16,15,3,-1,3,15,21,9,-1,9,21,22,10,-1,10,22,16,4])
+            m.insertNextCell(NORM_POLYHED,[5,4,10,11,-1,17,23,22,16,-1,5,17,16,4,-1,4,16,22,10,-1,10,22,23,11,-1,11,23,17,5])
+            coords=DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,3.,0.,0.,4.,0.,0.,5.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,3.,1.,0.,4.,1.,0.,5.,1.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,3.,0.,1.,4.,0.,1.,5.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,3.,1.,1.,4.,1.,1.,5.,1.,1.],24,3) ; coords.setInfoOnComponents(["XX [m]","YYY [km]","ZZZZ [Mm]"])
+            m.setCoords(coords)
+            mm=MEDFileUMesh() ; mm.setMeshes([m])
+            fs0=MEDFileFieldMultiTS() ; fs1=MEDFileFieldMultiTS()
+            fieldName0="zeField0"
+            fieldName1="zeField1"
+            for i in xrange(5):
+                f=MEDFileField1TS()
+                fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
+                fNode.setName(fieldName0) ; fNode.setMesh(m)
+                arr=DataArrayDouble(2*3) ; arr.iota(0+1000*i) ; arr.rearrange(2)
+                fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_0 [m]","Com2_0 [s^2]"]) ; fNode.checkCoherency()
+                f.setFieldNoProfileSBT(fNode)
+                fs0.pushBackTimeStep(f)
+                #
+                f=MEDFileField1TS()
+                fNode=MEDCouplingFieldDouble(ON_CELLS) ; fNode.setTime(float(i),i,0)
+                fNode.setName(fieldName1) ; fNode.setMesh(m)
+                arr=DataArrayDouble(2*3) ; arr.iota(100+1000*i) ; arr.rearrange(2)
+                fNode.setArray(arr) ; arr.setInfoOnComponents(["Comp1_1 [m]","Com2_1 [s^2]"]) ; fNode.checkCoherency()
+                f.setFieldNoProfileSBT(fNode)
+                fs1.pushBackTimeStep(f)
+                pass
+            mm.write(fname,2)
+            fs0.write(fname,0) ; fs1.write(fname,0)
+            a0Exp=mm.getCoords().deepCpy()
+            del m,mm,fs0
+            ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
+            ms=MEDFileMeshes(fname)
+            fields=MEDFileFields(fname,False)
+            fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
+            allFMTSLeavesToDisplay=[]
+            for fields in fields_per_mesh:
+                allFMTSLeavesToDisplay2=[]
+                for fmts in fields:
+                    allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
+                    pass
+                allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
+                pass
+            self.assertEqual(len(allFMTSLeavesToDisplay),1)
+            self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
+            allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
+            self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
+            self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
+            allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
+            self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
+            self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
+            #
+            mst=MEDFileMeshStruct.New(ms[0])
+            #
+            fcscp=allFMTSLeavesPerCommonSupport[0][1]
+            mml=fcscp.buildFromScratchDataSetSupport(0,fields)
+            mml2=mml.prepare()
+            self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
+            ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+            self.assertTrue(ncc)
+            self.assertTrue(a0.isEqual(a0Exp,1e-12))
+            self.assertTrue(a1.isEqual(DataArrayByte([42,42,42])))
+            self.assertTrue(a2.isEqual(DataArrayInt([8,16,24])))
+            self.assertTrue(a3.isEqual(DataArrayInt([8,2,3,8,9,14,15,20,21,8,3,4,9,10,15,16,21,22,8,4,5,10,11,16,17,22,23])))
+            self.assertTrue(a4.isEqual(DataArrayInt([0,31,62])))
+            self.assertTrue(a5.isEqual(DataArrayInt([6,4,3,2,8,9,4,15,21,20,14,4,3,15,14,2,4,2,14,20,8,4,8,20,21,9,4,9,21,15,3,6,4,4,3,9,10,4,16,22,21,15,4,4,16,15,3,4,3,15,21,9,4,9,21,22,10,4,10,22,16,4,6,4,5,4,10,11,4,17,23,22,16,4,5,17,16,4,4,4,16,22,10,4,10,22,23,11,4,11,23,17,5])))
+            for i in xrange(1,5):
+                self.assertTrue((fcscp.isDataSetSupportEqualToThePreviousOne(i,fields)))
+                pass
+            a6,a7=mml2.retrieveFamilyIdsOnCells()
+            self.assertTrue(a6.isEqual(DataArrayInt([0,0,0])))
+            self.assertTrue(a7)
+            a8,a9=mml2.retrieveNumberIdsOnCells()
+            self.assertTrue(a8 is None)
+            self.assertTrue(a9)
+            for i in xrange(5):
+                f=allFMTSLeavesPerCommonSupport[0][0][0][i]
+                fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
+                f.loadArraysIfNecessary()
+                v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
+                self.assertEqual(f.getName(),fieldName0)
+                self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
+                vExp=DataArrayDouble(3*2) ; vExp.iota(0+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_0 [m]','Com2_0 [s^2]'])
+                self.assertTrue(v.isEqual(vExp,1e-12))
+                #
+                f=allFMTSLeavesPerCommonSupport[0][0][1][i]
+                fsst=MEDFileField1TSStructItem.BuildItemFrom(f,mst)
+                f.loadArraysIfNecessary()
+                v=mml.buildDataArray(fsst,fields,f.getUndergroundDataArray())
+                self.assertEqual(f.getName(),fieldName1)
+                self.assertEqual(v.getHiddenCppPointer(),f.getUndergroundDataArray().getHiddenCppPointer())
+                vExp=DataArrayDouble(3*2) ; vExp.iota(100+i*1000) ; vExp.rearrange(2) ; vExp.setInfoOnComponents(['Comp1_1 [m]','Com2_1 [s^2]'])
+                self.assertTrue(v.isEqual(vExp,1e-12))
+                pass
+            pass
+
+    def test15(self):
+        """
+        "ForMEDReader15.med" file has a spaceDim 3 mesh "mesh" (it is important !)
+        and a field "zeField" lying on a single geometric type for Cell discr and node part.
+        Test that can appear the most simple but it hides a big issue of MEDReader
+        that copies are reduced at most. So it can leads to SIGSEGV if the memory management is not OK for int* and double * similar between VTK and MEDCoupling.
+        """
+        fname="ForMEDReader15.med"
+        m0=MEDCouplingCMesh()
+        arr=DataArrayDouble(3) ; arr.iota(0)
+        m0.setCoords(arr,arr,arr)
+        m0.setName("mesh")
+        m0=m0.buildUnstructured()
+        #
+        fieldName="zeField"
+        fCell=MEDCouplingFieldDouble(ON_CELLS)
+        fCell.setName(fieldName)
+        fCell.setMesh(m0)
+        #
+        fNode=MEDCouplingFieldDouble(ON_NODES)
+        fNode.setName(fieldName)
+        fNode.setMesh(m0)
+        #
+        mm=MEDFileUMesh()
+        mm.setMeshAtLevel(0,m0)
+        fam=DataArrayInt(8) ; fam.iota(0) ; mm.setFamilyFieldArr(0,fam) ; del fam
+        num=DataArrayInt(8) ; num.iota(100) ; mm.setRenumFieldArr(0,num) ; del num
+        #
+        ffs=MEDFileFieldMultiTS()
+        # TimeStep 0
+        t=(1.,0,0) ; off=0.
+        f1ts=MEDFileField1TS()
+        a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
+        fCell.setArray(a)
+        fCell.setTime(*t)
+        fCell.checkCoherency()
+        a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
+        a=a.negate()
+        fNode.setArray(a)
+        fNode.setTime(*t)
+        fNode.checkCoherency()
+        f1ts.setFieldNoProfileSBT(fCell)
+        f1ts.setFieldNoProfileSBT(fNode)
+        ffs.pushBackTimeStep(f1ts)
+        # TimeStep 1
+        t=(2.1,1,0) ; off=100.
+        f1ts=MEDFileField1TS()
+        a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
+        fCell.setArray(a)
+        fCell.setTime(*t)
+        fCell.checkCoherency()
+        a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
+        a=a.negate()
+        fNode.setArray(a)
+        fNode.setTime(*t)
+        fNode.checkCoherency()
+        f1ts.setFieldNoProfileSBT(fCell)
+        f1ts.setFieldNoProfileSBT(fNode)
+        ffs.pushBackTimeStep(f1ts)
+        # TimeStep 2
+        t=(3.2,2,0) ; off=200.
+        f1ts=MEDFileField1TS()
+        a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
+        fCell.setArray(a)
+        fCell.setTime(*t)
+        fCell.checkCoherency()
+        a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
+        a=a.negate()
+        fNode.setArray(a)
+        fNode.setTime(*t)
+        fNode.checkCoherency()
+        f1ts.setFieldNoProfileSBT(fCell)
+        f1ts.setFieldNoProfileSBT(fNode)
+        ffs.pushBackTimeStep(f1ts)
+        # TimeStep 3
+        t=(4.3,3,1) ; off=300.
+        f1ts=MEDFileField1TS()
+        a=DataArrayDouble(m0.getNumberOfCells()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
+        fCell.setArray(a)
+        fCell.setTime(*t)
+        fCell.checkCoherency()
+        a=DataArrayDouble(m0.getNumberOfNodes()) ; a.iota(off) ; a.setInfoOnComponents(["xx [m]"])
+        a=a.negate()
+        fNode.setArray(a)
+        fNode.setTime(*t)
+        fNode.checkCoherency()
+        f1ts.setFieldNoProfileSBT(fCell)
+        f1ts.setFieldNoProfileSBT(fNode)
+        ffs.pushBackTimeStep(f1ts)
+        #
+        mm.write(fname,2)
+        ffs.write(fname,0)
+        ########## GO for reading in MEDReader,by not loading all. Mesh is fully loaded but not fields values
+        ms=MEDFileMeshes(fname)
+        fields=MEDFileFields(fname,False)
+        fields_per_mesh=[fields.partOfThisLyingOnSpecifiedMeshName(meshName) for meshName in ms.getMeshesNames()]
+        allFMTSLeavesToDisplay=[]
+        for fields in fields_per_mesh:
+            allFMTSLeavesToDisplay2=[]
+            for fmts in fields:
+                allFMTSLeavesToDisplay2+=fmts.splitDiscretizations()
+                pass
+            allFMTSLeavesToDisplay.append(allFMTSLeavesToDisplay2)
+            pass
+        self.assertEqual(len(allFMTSLeavesToDisplay),1)
+        self.assertEqual(len(allFMTSLeavesToDisplay[0]),2)
+        allFMTSLeavesPerTimeSeries=MEDFileAnyTypeFieldMultiTS.SplitIntoCommonTimeSeries(sum(allFMTSLeavesToDisplay,[]))
+        self.assertEqual(len(allFMTSLeavesPerTimeSeries),1) # one time serie here : because the 2 fields are defined on the same time steps
+        self.assertEqual(len(allFMTSLeavesPerTimeSeries[0]),2)
+        allFMTSLeavesPerCommonSupport=MEDFileAnyTypeFieldMultiTS.SplitPerCommonSupport(allFMTSLeavesPerTimeSeries[0],ms[ms.getMeshesNames()[0]])
+        self.assertEqual(len(allFMTSLeavesPerCommonSupport),1)
+        self.assertEqual(len(allFMTSLeavesPerCommonSupport[0][0]),2)
+        #
+        mst=MEDFileMeshStruct.New(ms[0])
+        #
+        fcscp=allFMTSLeavesPerCommonSupport[0][1]
+        mml=fcscp.buildFromScratchDataSetSupport(0,fields)
+        mml2=mml.prepare()
+        self.assertTrue(isinstance(mml2,MEDUMeshMultiLev))
+        ncc,a0,a1,a2,a3,a4,a5=mml2.buildVTUArrays()
+        self.assertTrue(ncc)
+        self.assertTrue(a0.isEqual(DataArrayDouble([0.,0.,0.,1.,0.,0.,2.,0.,0.,0.,1.,0.,1.,1.,0.,2.,1.,0.,0.,2.,0.,1.,2.,0.,2.,2.,0.,0.,0.,1.,1.,0.,1.,2.,0.,1.,0.,1.,1.,1.,1.,1.,2.,1.,1.,0.,2.,1.,1.,2.,1.,2.,2.,1.,0.,0.,2.,1.,0.,2.,2.,0.,2.,0.,1.,2.,1.,1.,2.,2.,1.,2.,0.,2.,2.,1.,2.,2.,2.,2.,2.0],27,3),1e-12))
+        self.assertTrue(a1.isEqual(DataArrayByte([12,12,12,12,12,12,12,12])))
+        self.assertTrue(a2.isEqual(DataArrayInt([8,16,24,32,40,48,56,64])))
+        self.assertTrue(a3.isEqual(DataArrayInt([8,1,0,3,4,10,9,12,13,8,2,1,4,5,11,10,13,14,8,4,3,6,7,13,12,15,16,8,5,4,7,8,14,13,16,17,8,10,9,12,13,19,18,21,22,8,11,10,13,14,20,19,22,23,8,13,12,15,16,22,21,24,25,8,14,13,16,17,23,22,25,26])))
+        self.assertTrue(a4 is None)
+        self.assertTrue(a5 is None)
+        a6,a7=mml2.retrieveFamilyIdsOnCells()
+        self.assertTrue(a6.isEqual(DataArrayInt([0,1,2,3,4,5,6,7])))
+        self.assertTrue(a7) # no copy here
+        a8,a9=mml2.retrieveNumberIdsOnCells()
+        self.assertTrue(a8.isEqual(DataArrayInt([100,101,102,103,104,105,106,107])))
+        self.assertTrue(a9) # no copy here
         pass
 
     pass