Salome HOME
Fix 32bits config bug
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
index ef1369b22026824c2a130b3ce5a55222b8680b2c..420a3c2c8e69b18fe612a28f529d7f68a17014ac 100644 (file)
@@ -288,6 +288,7 @@ class MEDLoaderTest3(unittest.TestCase):
         renumNode=DataArrayInt.New()
         renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1)
         mm.setRenumFieldArr(1,renumNode)
+        mm.computeRevNum()
         mm.setMeshAtLevel(-1,m1,True);
         mm.setMeshAtLevel(0,m,True);
         mm.setMeshAtLevel(-2,m2,True);
@@ -3547,7 +3548,7 @@ class MEDLoaderTest3(unittest.TestCase):
         self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
         delta4=ref_heap_mem-mm.getHeapMemorySize()
         self.assertTrue(delta4<delta3)
-        self.assertTrue(delta4>=32*4*2)
+        self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2)
         #
         mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51))
         self.assertEqual(len(mm.getGroupsNames()),6)
@@ -4159,6 +4160,28 @@ class MEDLoaderTest3(unittest.TestCase):
         arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
         arr.setInfoOnComponents(compos)
         self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
+        m_ref = mm[0].deepCopy()
+        # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here.
+        ms=MEDFileMeshes()
+        mrs = MEDFileMeshReadSelector()
+        mrs.setNumberOfCoordsLoadSessions(2)
+        mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs)
+        ms.pushMesh(mm)
+        spd=mm.getPartDefAtLevel(0,NORM_QUAD4)
+        self.assertEqual(spd.getSlice(),slice(4,6,1))
+        spd=mm.getPartDefAtLevel(1)
+        self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes())
+        self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13])))
+        fs=MEDFileFields.LoadPartOf(fileName,False,ms)
+        fs[0][0].loadArrays()
+        arr=DataArrayDouble([(4,104),(5,105)])
+        arr.setInfoOnComponents(compos)
+        self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12))
+        fs[1][0].loadArrays()
+        arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)])
+        arr.setInfoOnComponents(compos)
+        self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
+        self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) )
         pass
 
     @WriteInTmpDir
@@ -6732,7 +6755,66 @@ class MEDLoaderTest3(unittest.TestCase):
         self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2))
         self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7'))
         pass
-        
+
+    def testMeshConvertFromMEDFileGeoType(self):
+        self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20)
+    
+    @WriteInTmpDir
+    def testFieldInt64_0(self):
+        """
+        Small basic test with I/O of field in int64.
+        """
+        fname="Pyfile120.med"
+        arr = DataArrayDouble([0,1])
+        m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured()
+        f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field")
+        v = 1234567890123456
+        f.setArray(DataArrayInt64([v]))
+        f.setMesh(m)
+        mm = MEDFileUMesh()
+        mm[0] = m
+        f1ts = MEDFileInt64Field1TS()
+        f1ts.setFieldNoProfileSBT(f)
+        fmts = MEDFileInt64FieldMultiTS()
+        fmts.pushBackTimeStep(f1ts)
+        fs = MEDFileFields()
+        fs.pushField(fmts)
+        mm.write(fname,2)
+        fs.write(fname,0)
+        #
+        mm = MEDFileMesh.New(fname)
+        fs = MEDFileFields(fname)
+        f = fs[0][0].field(mm)
+        self.assertTrue( isinstance(f,MEDCouplingFieldInt64) )
+        self.assertEqual( f.getArray().getIJ(0,0) , v )
+
+    @WriteInTmpDir
+    def testNonRegUMeshSubParts(self):
+        """
+        Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class.
+        """
+        fname = "Pyfile121.med"
+        m0 = MEDCouplingUMesh("mesh",1)
+        coords = DataArrayDouble([(0,0),(1,0),(2,0)])
+        m0.setCoords(coords)
+        m0.allocateCells()
+        m0.insertNextCell(NORM_SEG2,[1,2])
+        mm = MEDFileUMesh()
+        mm[0] = m0
+        m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1)
+        m1.setCoords(m0.getCoords())
+        m1.setNodalConnectivity(DataArrayInt([1,2]))
+        m1.setName(m0.getName())
+        mm[-1] = m1
+        fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation
+        mm.zipCoords() # <- This call changes the coords and connectivity
+        mm.write(fname,2)
+        #
+        mm = MEDFileMesh.New(fname)
+        mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute
+        self.assertTrue( m0.isEqual(mm[0],1e-12) )
+        pass
+
     pass
 
 if __name__ == "__main__":