Salome HOME
A forgotten C++ test
[tools/medcoupling.git] / src / MEDLoader / Swig / MEDLoaderTest3.py
index ce9e0e076d575eea8713ddafb5b52451c582336a..66dd108a2386772f1c8bfe9a67a7fc4647461710 100644 (file)
@@ -891,8 +891,7 @@ class MEDLoaderTest(unittest.TestCase):
         ff1.write(fname,0)
         f1=ff1.getFieldOnMeshAtLevel(ON_GAUSS_NE,m1,0)
         f2,p1=ff1.getFieldWithProfile(ON_GAUSS_NE,0,mm1) ; f2.setName("")
-        self.assertTrue(p1.isIdentity())
-        self.assertEqual(5,p1.getNumberOfTuples())
+        self.assertTrue(p1.isIdentity2(5))
         self.assertTrue(f1.getArray().isEqual(f2,1e-12))
         pass
     # Test for getFieldAtTopLevel method
@@ -3540,7 +3539,7 @@ class MEDLoaderTest(unittest.TestCase):
         for elt in [[0,1,2,3,4,5],[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8]]:#4
             m0.insertNextCell(NORM_PENTA6,elt)
             pass
-        m0.checkCoherency2()
+        m0.checkCoherency1()
         m1=MEDCouplingUMesh(); m1.setName("mesh")
         m1.setMeshDimension(2);
         m1.allocateCells(5);
@@ -3704,7 +3703,7 @@ class MEDLoaderTest(unittest.TestCase):
         m.changeSpaceDimension(3,0.)
         infos=["aa [b]","cc [de]","gg [klm]"]
         m.getCoords().setInfoOnComponents(infos)
-        m.checkCoherency2()
+        m.checkCoherency1()
         mm=MEDFileUMesh()
         mm.setMeshAtLevel(0,m)
         m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") 
@@ -3788,7 +3787,7 @@ class MEDLoaderTest(unittest.TestCase):
         m.changeSpaceDimension(3,0.)
         infos=["aa [b]","cc [de]","gg [klm]"]
         m.getCoords().setInfoOnComponents(infos)
-        m.checkCoherency2()
+        m.checkCoherency1()
         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
         f.setName("Field")
         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
@@ -3853,7 +3852,7 @@ class MEDLoaderTest(unittest.TestCase):
         m.changeSpaceDimension(3,0.)
         infos=["aa [b]","cc [de]","gg [klm]"]
         m.getCoords().setInfoOnComponents(infos)
-        m.checkCoherency2()
+        m.checkCoherency1()
         f=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f.setMesh(m)
         f.setName("Field")
         arr=DataArrayDouble(25,2) ; arr.setInfoOnComponents(compos)
@@ -4077,6 +4076,13 @@ class MEDLoaderTest(unittest.TestCase):
         st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
         mm2=cPickle.loads(st)
         self.assertTrue(mm.isEqual(mm2,1e-12)[0])
+        self.assertEqual(mm.getAxType(),AX_CART)
+        #
+        mm.setAxType(AX_CYL)
+        st=cPickle.dumps(mm,cPickle.HIGHEST_PROTOCOL)
+        mm2=cPickle.loads(st)
+        self.assertTrue(mm.isEqual(mm2,1e-12)[0])
+        self.assertEqual(mm2.getAxType(),AX_CYL)
         pass
 
     def testMEDFileFieldsLoadSpecificEntities1(self):
@@ -4344,7 +4350,7 @@ class MEDLoaderTest(unittest.TestCase):
         m3D=m.buildExtrudedMesh(m1D,0)
         m3D.sortCellsInMEDFileFrmt()
         m3D.setName(meshName)
-        m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkCoherency2()
+        m2D=m ; m2D.setCoords(m3D.getCoords()) ; m2D.shiftNodeNumbersInConn(delta) ; m2D.setName(meshName) ; m2D.checkCoherency1()
         m1D=m2D.computeSkin() ; m1D.setName(meshName)
         m0D=MEDCouplingUMesh.Build0DMeshFromCoords(m3D.getCoords()) ; m0D.setName(meshName) ; m0D=m0D[[2,4,10]]
         #
@@ -4653,6 +4659,199 @@ class MEDLoaderTest(unittest.TestCase):
       self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
       pass
 
+    def testMEDFileEquivalence1(self):
+      """ First check of equivalence implementation in MEDFileMesh"""
+      fileName="Pyfile97.med"
+      meshName="M_01"
+      mm=MEDFileUMesh()
+      coo=DataArrayDouble([(0,0,0),(6,0,0),(19,0,0),(36,0,0),(0,4,0),(6,4,0),(19,4,0),(36,4,0),(0,13,0),(6,13,0),(19,13,0),(36,13,0),(0,24,0),(6,24,0),(19,24,0),(36,24,0),(0,0,6),(6,0,6),(19,0,6),(36,0,6),(0,4,6),(6,4,6),(19,4,6),(36,4,6),(0,13,6),(6,13,6),(19,13,6),(36,13,6),(0,24,6),(6,24,6),(19,24,6),(36,24,6),(6,0,3),(6,2,0),(12.5,0,0),(19,0,3),(19,2,0),(6,4,3),(12.5,4,0),(19,4,3),(6,2,6),(12.5,0,6),(19,2,6),(12.5,4,6),(6,2,3),(12.5,0,3),(12.5,2,0),(19,2,3),(12.5,4,3),(12.5,2,6),(12.5,2,3)])
+      coo.setInfoOnComponents(["X [Sans_unite]","Y [Sans_unite]","Z [Sans_unite]"])
+      connQ4=DataArrayInt([1,17,21,5,2,18,22,6,21,5,6,22,1,32,44,33,17,40,44,32,21,37,44,40,5,33,44,37,2,35,47,36,18,42,47,35,22,39,47,42,6,36,47,39,21,37,48,43,5,38,48,37,6,39,48,38,22,43,48,39])
+      m1=MEDCoupling1SGTUMesh(meshName,NORM_QUAD4) ; m1.setCoords(coo) ; m1.setNodalConnectivity(connQ4) ; mm[-1]=m1
+      connH8=DataArrayInt([20,16,17,21,4,0,1,5,22,18,19,23,6,2,3,7,24,20,21,25,8,4,5,9,25,21,22,26,9,5,6,10,26,22,23,27,10,6,7,11,28,24,25,29,12,8,9,13,29,25,26,30,13,9,10,14,30,26,27,31,14,10,11,15,21,40,49,43,37,44,50,48,40,17,41,49,44,32,45,50,49,41,18,42,50,45,35,47,43,49,42,22,48,50,47,39,44,32,45,50,33,1,34,46,37,44,50,48,5,33,46,38,48,50,47,39,38,46,36,6,50,45,35,47,46,34,2,36])
+      m0=MEDCoupling1SGTUMesh(meshName,NORM_HEXA8) ; m0.setCoords(coo) ; m0.setNodalConnectivity(connH8) ; mm[0]=m0
+      mm.getFamilyFieldAtLevel(-1)[:]=-2
+      mm.getFamilyFieldAtLevel(0)[:]=0
+      mm.addFamily("HOMARD________-1",-1)
+      mm.addFamily("HOMARD________-2",-2)
+      mm.addFamily("HOMARD________-3",-3)
+      mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3])
+      
+      eqName="MAILLES_A_RECOLLER_APRES_HOMARD"
+      descEq="Cette equivalence decrit les mailles a recoller. Dans chaque correspondance, le premier numero est celui de la maille coupee ; le second numero est celui d'une des petites mailles en regard."
+      mm.initializeEquivalences()
+      eqs=mm.getEquivalences()
+      eq0=eqs.appendEmptyEquivalenceWithName(eqName)
+      eq0.setDescription(descEq)
+      corr=DataArrayInt([(0,3),(0,4),(0,5),(0,6),(1,7),(1,8),(1,9),(1,10),(2,11),(2,12),(2,13),(2,14)])
+      eq0.setArray(-1,corr)
+      self.assertEqual(eq0.getCell().size(),1)
+      self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
+      eq0.getCell().clear()
+      self.assertEqual(eq0.getCell().size(),0)
+      eq0.getCell().setArrayForType(NORM_QUAD4,corr)
+      self.assertEqual(eq0.getCell().size(),1)
+      self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
+      mm.killEquivalences()
+      mm.initializeEquivalences()
+      eqs=mm.getEquivalences()
+      eq0=eqs.appendEmptyEquivalenceWithName(eqName)
+      eq0.setDescription(descEq)
+      c=eq0.initCell()
+      c.setArrayForType(NORM_QUAD4,corr)
+      self.assertEqual(eq0.getCell().size(),1)
+      self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr))
+      mm2=mm.deepCpy()
+      self.assertTrue(mm.isEqual(mm2,1e-12)[0])
+      self.assertEqual(mm2.getEquivalences().size(),1)
+      self.assertTrue(mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4).isEqual(corr))
+      mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=2
+      self.assertTrue(not mm.isEqual(mm2,1e-12)[0])
+      mm2.getEquivalences().getEquivalence(0).getCell().getArray(NORM_QUAD4)[0,0]=0
+      self.assertTrue(mm.isEqual(mm2,1e-12)[0])
+      mm.write(fileName,2)
+      #
+      mm3=MEDFileMesh.New(fileName)
+      self.assertTrue(mm.isEqual(mm3,1e-12)[0])
+      pass
+
+    def testMEDFileForFamiliesPlayer1(self):
+      """Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
+      fileName="Pyfile98.med"
+      meshName="mesh"
+      magicSt="%s%%04i"%(MEDFileMesh.GetMagicFamilyStr())
+      arr=DataArrayDouble(4) ; arr.iota()
+      m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
+      m=m.buildUnstructured()
+      mm=MEDFileUMesh()
+      mm[0]=m
+      mm.setName(meshName)
+      mm.setFamilyId("FAMILLE_ZERO",0)
+      mm.getFamilyFieldAtLevel(0)[-3:]=-4
+      mm.setFamilyId("RIDF%s"%(magicSt%0),-4)
+      mm.setGroupsOnFamily("RIDF%s"%(magicSt%0),["RID"])
+      d=DataArrayInt(16) ; d[:]=0 ; d[[1,2,4,5]]=3
+      mm.setFamilyFieldArr(1,d)
+      mm.setFamilyId("RIDF%s"%(magicSt%1),3)
+      mm.setGroupsOnFamily("RIDF%s"%(magicSt%1),["RID"])
+      self.assertEqual(mm.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
+      self.assertEqual(mm.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF")) # <- the aim of test is here !
+      self.assertEqual(mm.getFamiliesIdsOnGroup("RID"),(-4,3))
+      mm.write(fileName,2)
+      # now read such funny file !
+      mm2=MEDFileMesh.New(fileName) # <- normaly mdump of Pyfile98.med must contain only RID and FAMILLE_ZERO families.
+      self.assertTrue(mm.isEqual(mm2,1e-16))
+      self.assertEqual(mm2.getFamiliesNames(),("FAMILLE_ZERO",'RIDF!/__\\!0000','RIDF!/__\\!0001'))
+      self.assertEqual(mm2.getFamiliesNamesWithFilePointOfView(),("FAMILLE_ZERO","RIDF","RIDF"))
+      self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
+      pass
+
+    def testCartesianizer1(self):
+      """ This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
+      # UMesh non cart
+      arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
+      mm=MEDFileUMesh() ; mm[0]=m ; mm.forceComputationOfParts()
+      d0=DataArrayInt(16) ; d0[:]=0
+      d1=DataArrayInt(9)  ; d1[:]=0
+      mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
+      mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
+      ref0=mm.getCoords().getHiddenCppPointer()
+      ref1=mm[0].getNodalConnectivity().getHiddenCppPointer()
+      self.assertEqual(ref0,mm[0].getCoords().getHiddenCppPointer())
+      ref2=mm[0].getNodalConnectivityIndex().getHiddenCppPointer()
+      ref3=mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer()
+      self.assertEqual(ref0,mm.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
+      mm.setAxType(AX_CYL) #<- important
+      mm2=mm.cartesianize() # the trigger
+      self.assertEqual(mm2.getAxType(),AX_CART)
+      mm.setAxType(AX_CART) # this is here only to avoid complaints
+      self.assertTrue(isinstance(mm2,MEDFileUMesh))
+      self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
+      self.assertTrue(ref0==mm.getCoords().getHiddenCppPointer()) # <- here important
+      self.assertTrue(ref0!=mm2.getCoords().getHiddenCppPointer()) # <- here important
+      self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2[0].getCoords().getHiddenCppPointer())
+      self.assertEqual(mm2.getCoords().getHiddenCppPointer(),mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getCoords().getHiddenCppPointer())
+      self.assertEqual(mm2[0].getNodalConnectivity().getHiddenCppPointer(),ref1) # <- here very important
+      self.assertEqual(mm2[0].getNodalConnectivityIndex().getHiddenCppPointer(),ref2) # <- here very important
+      self.assertEqual(mm2.getDirectUndergroundSingleGeoTypeMesh(NORM_QUAD4).getNodalConnectivity().getHiddenCppPointer(),ref3) # <- here very important
+      self.assertEqual(mm2.getName(),mm.getName())
+      self.assertEqual(mm2.getDescription(),mm.getDescription())
+      self.assertEqual(mm2.getTime(),mm.getTime())
+      self.assertEqual(mm2.getTime(),mm.getTime())
+      self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
+      self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
+      self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
+      self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
+      self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
+      self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
+      self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
+      self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
+      # UMesh cart
+      mm.setAxType(AX_CART)
+      mm2=mm.cartesianize() # the trigger
+      self.assertEqual(mm2.getAxType(),AX_CART)
+      self.assertTrue(isinstance(mm2,MEDFileUMesh))
+      self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
+      # CurveLinearMesh non cart
+      arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m=m.buildCurveLinear()
+      mm=MEDFileCurveLinearMesh() ; mm.setMesh(m) ; mm.setAxType(AX_CYL) #<- important
+      mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
+      mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
+      ref0=mm.getMesh().getCoords().getHiddenCppPointer()
+      mm2=mm.cartesianize() # the trigger
+      self.assertEqual(mm2.getAxType(),AX_CART)
+      self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
+      self.assertTrue(mm.getHiddenCppPointer()!=mm2.getHiddenCppPointer())
+      self.assertTrue(ref0==mm.getMesh().getCoords().getHiddenCppPointer()) # <- here important
+      self.assertTrue(ref0!=mm2.getMesh().getCoords().getHiddenCppPointer()) # <- here important
+      self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
+      self.assertEqual(mm2.getName(),mm.getName())
+      self.assertEqual(mm2.getDescription(),mm.getDescription())
+      self.assertEqual(mm2.getTime(),mm.getTime())
+      self.assertEqual(mm2.getTime(),mm.getTime())
+      self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
+      self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
+      self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
+      self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
+      self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
+      self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
+      self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
+      self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
+      # CurveLinearMesh cart
+      mm.setAxType(AX_CART)
+      mm2=mm.cartesianize() # the trigger
+      self.assertEqual(mm2.getAxType(),AX_CART)
+      self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
+      self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
+      # CMesh non cart
+      arr=DataArrayDouble(4) ; arr.iota() ; m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
+      mm=MEDFileCMesh() ; mm.setMesh(m) ; mm.setAxType(AX_CYL) #<- important
+      mm.setFamilyFieldArr(0,d1) ; mm.setFamilyFieldArr(1,d0)
+      mm.setName("a") ; mm.setDescription("b") ; mm.setTime(3,4,5.) ; mm.addFamily("c",-4) ; mm.setFamiliesOnGroup("d",["c"]) ; mm.setTimeUnit("ms")
+      mm2=mm.cartesianize() # the trigger
+      self.assertEqual(mm2.getAxType(),AX_CART)
+      self.assertTrue(isinstance(mm2,MEDFileCurveLinearMesh))
+      self.assertEqual(mm2.getMesh().getNodeGridStructure(),mm.getMesh().getNodeGridStructure())
+      self.assertEqual(mm2.getName(),mm.getName())
+      self.assertEqual(mm2.getDescription(),mm.getDescription())
+      self.assertEqual(mm2.getTime(),mm.getTime())
+      self.assertEqual(mm2.getTime(),mm.getTime())
+      self.assertEqual(mm2.getTimeUnit(),mm.getTimeUnit())
+      self.assertEqual(mm2.getGroupsNames(),mm.getGroupsNames())
+      self.assertEqual(mm2.getFamiliesNames(),mm.getFamiliesNames())
+      self.assertEqual([mm2.getFamilyId(elt) for elt in mm2.getFamiliesNames()],[mm.getFamilyId(elt2) for elt2 in mm.getFamiliesNames()])
+      self.assertEqual(mm.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer())
+      self.assertEqual(mm2.getFamilyFieldAtLevel(0).getHiddenCppPointer(),d1.getHiddenCppPointer()) # <- here very important
+      self.assertEqual(mm.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer())
+      self.assertEqual(mm2.getFamilyFieldAtLevel(1).getHiddenCppPointer(),d0.getHiddenCppPointer()) # <- here very important
+      # CMesh cart
+      mm.setAxType(AX_CART)
+      mm2=mm.cartesianize() # the trigger
+      self.assertEqual(mm2.getAxType(),AX_CART)
+      self.assertTrue(isinstance(mm2,MEDFileCMesh))
+      self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
+      pass
+
     pass
 
 if __name__ == "__main__":