+ def testRemoveIdsFromIndexedArrays1(self):
+ arr=DataArrayInt([101,102,103,201,202,203,204,301,501,502,503,504,505,601,602])
+ arrI=DataArrayInt([0,3,7,8,8,13,15])
+ # case where all elts in inputs are in
+ arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
+ self.assertTrue(MEDCouplingUMesh.RemoveIdsFromIndexedArrays([501,502],arr2,arrI2))
+ self.assertTrue(arr2.isEqual(DataArrayInt([101,102,103,201,202,203,204,301,503,504,505,601,602])))
+ self.assertTrue(arrI2.isEqual(DataArrayInt([0,3,7,8,8,11,13])))
+ # case where part of elts in inputs are in
+ arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
+ self.assertTrue(MEDCouplingUMesh.RemoveIdsFromIndexedArrays([504,507],arr2,arrI2))
+ self.assertTrue(arr2.isEqual(DataArrayInt([101,102,103,201,202,203,204,301,501,502,503,505,601,602])))
+ self.assertTrue(arrI2.isEqual(DataArrayInt([0,3,7,8,8,12,14])))
+ # case where no elts in inputs are in
+ arr2=arr.deepCopy() ; arrI2=arrI.deepCopy()
+ self.assertTrue(not MEDCouplingUMesh.RemoveIdsFromIndexedArrays([1,5,701],arr2,arrI2))
+ self.assertTrue(arr2.isEqual(arr))
+ self.assertTrue(arrI2.isEqual(arrI))
+ pass
+
+ def testFieldIntIsOnStage1(self):
+ """ My first test with field int."""
+ m=MEDCouplingCMesh()
+ m.setName("mesh")
+ arrX=DataArrayDouble([0,1,2,3])
+ m.setCoords(arrX,arrX)
+ f=MEDCouplingFieldInt(ON_CELLS)
+ f.setMesh(m)
+ arr=DataArrayInt(8) ; arr.iota() ;f.setArray(arr)
+ self.assertRaises(InterpKernelException,f.checkConsistencyLight)
+ arr=DataArrayInt(9) ; arr.iota() ;f.setArray(arr)
+ f.checkConsistencyLight()
+ f.setTimeUnit("ms")
+ self.assertEqual(f.getTimeUnit(),"ms")
+ f.setTime(3.2,5,6)
+ a,b,c=f.getTime()
+ self.assertEqual(b,5)
+ self.assertEqual(c,6)
+ self.assertEqual(a,3.2,12)
+ pass
+
+ def testNoThrowOn1DGTU2UOnNullCells(self):
+ """ Non regression test : no throw when trying to convert 1DGTUMesh to UMesh on an empty mesh"""
+ m=MEDCoupling1DGTUMesh("",NORM_POLYGON) ; m.setCoords(DataArrayDouble([],0,3))
+ m.setNodalConnectivity(DataArrayInt([]),DataArrayInt([0]))
+ m=m.buildUnstructured()
+ pass
+
+ def testExplodeMeshIntoMicroEdges1(self):
+ """ test for new functionality MEDCouplingUMesh.explodeMeshIntoMicroEdges"""
+ m=MEDCouplingUMesh("mesh",2)
+ coo=DataArrayDouble([2,0,10,0,12,0,0,3,4,5,10,5,12,7,3,2.5,7,2.5,6,0,10,2.5,11,2.5,11,0,7,5],14,2)
+ m.setCoords(coo)
+ m.allocateCells()
+ # here a mix of quadratic, linear cells. Non conform but conform considering micro edges
+ m.insertNextCell(NORM_TRI6,[0,4,1,7,8,9])
+ m.insertNextCell(NORM_TRI6,[1,5,2,10,11,12])
+ m.insertNextCell(NORM_TRI6,[5,1,4,10,8,13])
+ m.insertNextCell(NORM_TRI3,[3,4,7])
+ m.insertNextCell(NORM_TRI3,[3,7,0])
+ m.insertNextCell(NORM_TRI3,[6,2,11])
+ m.insertNextCell(NORM_TRI3,[6,11,5])
+ m.insertNextCell(NORM_TRI3,[6,5,13])
+ m.insertNextCell(NORM_TRI3,[6,13,4])
+ edges,d,di,rd,rdi=m.explodeMeshIntoMicroEdges() # <- new method
+ self.assertTrue(MEDCoupling1SGTUMesh(edges).getNodalConnectivity().isEqual(DataArrayInt([0,7,7,4,4,8,8,1,1,9,9,0,1,10,10,5,5,11,11,2,2,12,12,1,4,13,13,5,3,4,7,3,0,3,6,2,11,6,5,6,13,6,4,6])))
+ self.assertEqual(edges.getCoords().getHiddenCppPointer(),coo.getHiddenCppPointer())
+ self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,7,6,3,2,12,13,14,1,15,15,0,16,17,9,18,18,8,19,19,13,20,20,12,21])))
+ self.assertTrue(di.isEqual(DataArrayInt([0,6,12,18,21,24,27,30,33,36])))
+ self.assertTrue(rd.isEqual(DataArrayInt([0,4,0,3,0,2,0,2,0,0,1,2,1,2,1,6,1,5,1,1,2,8,2,7,3,3,4,4,5,5,6,6,7,7,8,8])))
+ self.assertTrue(rdi.isEqual(DataArrayInt([0,2,4,6,8,9,10,12,14,16,18,19,20,22,24,25,27,28,29,31,33,35,36])))
+ pass
+
+ def testFieldIntIsOnStage2(self):
+ """ Very important test to check that isEqual of MEDCouplingFieldInt is OK !"""
+ m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
+ m1=m1.buildUnstructured() ; m1.setName("mesh")
+ f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setMesh(m1)
+ arr1=DataArrayInt([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr1.setInfoOnComponents(["aa","bbb"])
+ f1.setArray(arr1) ; f1.setName("f1") ; f1.setTime(2.,3,4)
+ #
+ m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
+ m2=m2.buildUnstructured() ; m2.setName("mesh")
+ f2=MEDCouplingFieldInt(ON_CELLS) ; f2.setMesh(m2)
+ arr2=DataArrayInt([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr2.setInfoOnComponents(["aa","bbb"])
+ f2.setArray(arr2) ; f2.setName("f1") ; f2.setTime(2.,3,4)
+ #
+ self.assertTrue(f1.isEqual(f2,1e-12,0.))
+ f1.getArray()[:]*=2
+ self.assertTrue(not f1.isEqual(f2,1e-12,0.))
+ self.assertTrue(not f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
+ f1.getArray()[:]/=2
+ self.assertTrue(f1.isEqual(f2,1e-12,0.))
+ #
+ f1.setName("F1")
+ self.assertTrue(not f1.isEqual(f2,1e-12,0.))
+ f1.setName("f1")
+ self.assertTrue(f1.isEqual(f2,1e-12,0.))
+ #
+ f1.getArray().setInfoOnComponents(["aa","bbbb"])
+ self.assertTrue(not f1.isEqual(f2,1e-12,0.))
+ self.assertTrue(f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
+ f1.getArray().setInfoOnComponents(["aa","bbb"])
+ self.assertTrue(f1.isEqual(f2,1e-12,0.))
+ #
+ f3=f2.deepCopy()
+ self.assertTrue(f1.isEqual(f3,1e-12,0.))
+ #
+ for fd,expected in ((ON_NODES,False),(ON_CELLS,True)):
+ f4=MEDCouplingFieldInt(fd) ; f4.setMesh(m2) ; f4.setTime(2.,3,4)
+ arr4=DataArrayInt([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr4.setInfoOnComponents(["aa","bbb"])
+ f4.setArray(arr4) ; f4.setName("f1")
+ self.assertEqual(f1.isEqual(f4,1e-12,0.),expected)
+ pass
+ pass
+
+ def testDADSymmetry1(self):
+ arr=DataArrayDouble([2,3,4],1,3)
+ res=arr.symmetry3DPlane([0.,0.,0.],[0.,0.,2.])
+ self.assertTrue(res.isEqual(DataArrayDouble([2,3,-4],1,3),1e-14))
+ #
+ res=arr.symmetry3DPlane([-1000,100,-1],[0.,0.,2.])
+ self.assertTrue(res.isEqual(DataArrayDouble([2,3,-6],1,3),1e-14))
+ #
+ res=arr.symmetry3DPlane([0,0,0],[1.,0.,0.])
+ self.assertTrue(res.isEqual(DataArrayDouble([-2,3,4],1,3),1e-14))
+ #
+ res=arr.symmetry3DPlane([0,0,0],[0.,1.,0.])
+ self.assertTrue(res.isEqual(DataArrayDouble([2,-3,4],1,3),1e-14))
+ #
+ res=arr.symmetry3DPlane([0,0,0],[-1.,1.,0.])
+ self.assertTrue(res.isEqual(DataArrayDouble([3,2,4],1,3),1e-14))
+ #
+ plane=[5.,4.,-7.]
+ a=DataArrayDouble(DataArrayDouble.GiveBaseForPlane(plane))
+ self.assertAlmostEqual(DataArrayDouble.Dot(a[0],a[1]).magnitude()[0],0.,13)
+ self.assertAlmostEqual(DataArrayDouble.Dot(a[0],a[2]).magnitude()[0],0.,13)
+ self.assertAlmostEqual(DataArrayDouble.Dot(a[1],a[2]).magnitude()[0],0.,13)
+ coo=DataArrayDouble.Aggregate([10*a[0]+10*a[1],-10*a[0]+10*a[1],-10*a[0]-10*a[1],10*a[0]-10*a[1]])
+ m=MEDCouplingUMesh("",2) ; m.setCoords(coo) ; m.allocateCells()
+ m.insertNextCell(NORM_QUAD4,[0,1,2,3])
+ d,_=m.distanceToPoint(arr)
+ res=arr.symmetry3DPlane([0.,0.,0.],plane) #
+ d2,_=m.distanceToPoint(res)
+ self.assertAlmostEqual(abs(d-d2),0.,12)
+ self.assertAlmostEqual(DataArrayDouble.Dot(res-arr,a[0])[0],0.,12)
+ self.assertAlmostEqual(DataArrayDouble.Dot(res-arr,a[1])[0],0.,12)
+ self.assertAlmostEqual((res-arr).magnitude()[0]-2*d,0.,12)
+ self.assertTrue(res.isEqual(DataArrayDouble([2.666666666666667,3.5333333333333333,3.0666666666666666],1,3),1e-12))
+ pass
+
+ def testExtrudedMeshBuildUnstructured1(self):
+ """ Non reg test. ExtrudedMesh.buildUnstructured used to modify the coordinates of this. It used to lead to an extra amount of memory consumtion. The aim of the test here is to check that buildUnstructured method do not alter the content of the mesh"""
+ arr=DataArrayDouble(11) ; arr.iota()
+ m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
+ m=m.buildUnstructured()
+ faces=MEDCouplingCMesh() ; faces.setCoords(arr,arr)
+ faces=faces.buildUnstructured()
+ faces.setCoords(m.getCoords())
+ em=MEDCouplingMappedExtrudedMesh(m,faces,0)
+ self.assertTrue(em.buildUnstructured().isEqual(m,1e-12))
+ self.assertTrue(em.buildUnstructured().isEqual(m,1e-12)) # the bug was here ... buildUnstructured used to modify em ...
+ self.assertTrue(em.buildUnstructured().isEqual(m,1e-12)) # the bug was here ... buildUnstructured used to modify em ...
+ pass
+
+ def testExtrudedMeshFromCMesh1(self):
+ arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
+ mesh3D=MEDCouplingCMesh() ; mesh3D.setCoords(arrX,arrY,arrZ)
+ ex=MEDCouplingMappedExtrudedMesh(mesh3D)
+ self.assertTrue(ex.buildUnstructured().isEqual(mesh3D.buildUnstructured(),1e-12))
+ pass
+
+ def testCylSpherPolarCartFiesta(self):
+ """Test to check new capabilities from to cyl spher polar cart conversions"""
+ da0=DataArrayDouble([(7,13,2.1),(15,2,-4.2),(-6,12,1.4),(-1,10,-3.5),(-2.1,-3.3,2.7),(-1.4,-0.2,-4),(1.2,-1.3,2.8),(2.5,-0.4,-3)])
+ self.assertTrue(da0.fromCartToCyl().fromCylToCart().isEqual(da0,1e-12))
+ self.assertTrue(da0.fromCartToSpher().fromSpherToCart().isEqual(da0,1e-12))
+ da1=da0[:,:2]
+ self.assertTrue(da1.fromCartToPolar().fromPolarToCart().isEqual(da1,1e-12))
+ #
+ da2=da0[::-1]
+ pt=[-2.1,0.3,1.1]
+ vect=[1.,-0.5,0.7]
+ #
+ expected=DataArrayDouble([(2.023252607860588,14.699865529518792,1.4934531458504392),(10.91440936818929,7.5640431386495965,8.384564361982669),(-7.1057844983810705,7.853310978767742,-8.354240440239513),(-8.414001990391881,-1.1910713519565301,-6.405928468241733),(-4.35426264858532,1.5616250027467273,1.0916611827536211),(-2.0571195416878396,-2.0266572603615365,-3.1082019786735042),(-1.5714718759210784,0.39735366651452453,2.8883535460356216),(0.8733250236104675,-3.800053532703407,0.45485882614734185)])
+ da4=da0.fromCartToCylGiven(da2,pt,vect)
+ self.assertTrue(da4.isEqual(expected,1e-12))
+ #
+ m=MEDCouplingUMesh.Build0DMeshFromCoords(da2)
+ self.assertEqual(m.getDirectAccessOfCoordsArrIfInStructure().getHiddenCppPointer(),da2.getHiddenCppPointer())
+ f0=MEDCouplingFieldDouble(ON_NODES) ; f0.setMesh(m) ; f0.setArray(da0)
+ f=f0.computeVectorFieldCyl(pt,vect)
+ f.checkConsistencyLight()
+ self.assertEqual(f.getMesh().getHiddenCppPointer(),m.getHiddenCppPointer())
+ self.assertTrue(f.getArray().isEqual(expected,1e-12))
+ pass
+
+ def testDAIIndicesOfSubPart(self):
+ a=DataArrayInt([9,10,0,6,4,11,3,8])
+ b=DataArrayInt([6,0,11,8])
+ c=a.indicesOfSubPart(b)
+ self.assertTrue(c.isEqual(DataArrayInt([3,2,5,7])))
+ #
+ d=DataArrayInt([9,10,0,6,4,11,0,8])
+ self.assertRaises(InterpKernelException,d.indicesOfSubPart,b) # 0 appears twice in the d array
+ f=DataArrayInt([6,0,11,8,12])
+ self.assertRaises(InterpKernelException,a.indicesOfSubPart,f) # 12 in f does not exist in a
+ pass
+
+ def testDACirPermAndRev1(self):
+ d=DataArrayInt([1,2,3,4,5,6])
+ d2=d.deepCopy() ; d2.circularPermutation(1)
+ self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
+ d2=d.deepCopy() ; d2.circularPermutation()
+ self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
+ d2=d.deepCopy() ; d2.circularPermutation(2)
+ self.assertTrue(d2.isEqual(DataArrayInt([3,4,5,6,1,2])))
+ d2=d.deepCopy() ; d2.circularPermutation(3)
+ self.assertTrue(d2.isEqual(DataArrayInt([4,5,6,1,2,3])))
+ d2=d.deepCopy() ; d2.circularPermutation(4)
+ self.assertTrue(d2.isEqual(DataArrayInt([5,6,1,2,3,4])))
+ d2=d.deepCopy() ; d2.circularPermutation(5)
+ self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
+ d2=d.deepCopy() ; d2.circularPermutation(6)
+ self.assertTrue(d2.isEqual(d))
+ d2=d.deepCopy() ; d2.circularPermutation(7)
+ self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
+ d2=d.deepCopy() ; d2.circularPermutation(-1)
+ self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
+ d2=d.deepCopy() ; d2.circularPermutation(-2)
+ self.assertTrue(d2.isEqual(DataArrayInt([5,6,1,2,3,4])))
+ d2=d.deepCopy() ; d2.circularPermutation(-3)
+ self.assertTrue(d2.isEqual(DataArrayInt([4,5,6,1,2,3])))
+ d2=d.deepCopy() ; d2.circularPermutation(-4)
+ self.assertTrue(d2.isEqual(DataArrayInt([3,4,5,6,1,2])))
+ d2=d.deepCopy() ; d2.circularPermutation(-5)
+ self.assertTrue(d2.isEqual(DataArrayInt([2,3,4,5,6,1])))
+ d2=d.deepCopy() ; d2.circularPermutation(-6)
+ self.assertTrue(d2.isEqual(d))
+ d2=d.deepCopy() ; d2.circularPermutation(-7)
+ self.assertTrue(d2.isEqual(DataArrayInt([6,1,2,3,4,5])))
+ ####
+ d=DataArrayInt([1,2,3,4,5,6],2,3)
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(0)
+ self.assertTrue(d2.isEqual(d))
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(1)
+ self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple()
+ self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(2)
+ self.assertTrue(d2.isEqual(DataArrayInt([3,1,2,6,4,5],2,3)))
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(3)
+ self.assertTrue(d2.isEqual(d))
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(-1)
+ self.assertTrue(d2.isEqual(DataArrayInt([3,1,2,6,4,5],2,3)))
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(-2)
+ self.assertTrue(d2.isEqual(DataArrayInt([2,3,1,5,6,4],2,3)))
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(-3)
+ self.assertTrue(d2.isEqual(d))
+ d.setInfoOnComponents(["a","b","c"])
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(1)
+ self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple()
+ self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(2)
+ self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(3)
+ self.assertEqual(d2.getInfoOnComponents(),["a","b","c"])
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(4)
+ self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(-1)
+ self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(-2)
+ self.assertEqual(d2.getInfoOnComponents(),["b","c","a"])
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(-3)
+ self.assertEqual(d2.getInfoOnComponents(),["a","b","c"])
+ d2=d.deepCopy() ; d2.circularPermutationPerTuple(-4)
+ self.assertEqual(d2.getInfoOnComponents(),["c","a","b"])
+ ####
+ d2=d.deepCopy() ; d2.reversePerTuple()
+ d3Exp=DataArrayInt([3,2,1,6,5,4],2,3) ; d3Exp.setInfoOnComponents(["c","b","a"])
+ self.assertTrue(d3Exp.isEqual(d2))
+ pass
+
+ def testDAExplodeComponents1(self):
+ d=DataArrayDouble([(1,2),(3,4),(5,6)])
+ d.setName("toto")
+ d.setInfoOnComponents(["a","b"])
+ d2=d.explodeComponents()
+ self.assertEqual(len(d2),2)
+ #
+ d3=DataArrayDouble([1,3,5]) ; d3.setName("toto") ; d3.setInfoOnComponents(["a"])
+ self.assertTrue(d3.isEqual(d2[0],1e-14))
+ d4=DataArrayDouble([2,4,6]) ; d4.setName("toto") ; d4.setInfoOnComponents(["b"])
+ self.assertTrue(d4.isEqual(d2[1],1e-14))
+ #
+ d=DataArrayInt([(1,2),(3,4),(5,6)])
+ d.setName("toto")
+ d.setInfoOnComponents(["a","b"])
+ d2=d.explodeComponents()
+ self.assertEqual(len(d2),2)
+ #
+ d3=DataArrayInt([1,3,5]) ; d3.setName("toto") ; d3.setInfoOnComponents(["a"])
+ self.assertTrue(d3.isEqual(d2[0]))
+ d4=DataArrayInt([2,4,6]) ; d4.setName("toto") ; d4.setInfoOnComponents(["b"])
+ self.assertTrue(d4.isEqual(d2[1]))
+ pass
+
+ def testVoronoi2D_1(self):
+ """ Check of voronize on 2D mesh method of MEDCouplingFieldDouble that converts field on Gauss Points to a field on cell"""
+ tmp=MEDCouplingCMesh("mesh")
+ arr=DataArrayDouble(5) ; arr.iota()
+ tmp.setCoords(arr,arr)
+ tmp=tmp.build1SGTUnstructured()
+ conn=tmp.getNodalConnectivity()
+ conn.rearrange(4)
+ conn.reversePerTuple()
+ conn.circularPermutationPerTuple(2)
+ conn.rearrange(1)
+ coo=tmp.getCoords().deepCopy()
+ coo.circularPermutationPerTuple(2) ; coo*=0.1
+ coo.reverse()
+ coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
+ coo2*=0.14
+ coo2.circularPermutationPerTuple(2)
+ tmp.getCoords()[:]+=coo2*coo
+ #
+ field=MEDCouplingFieldDouble(ON_GAUSS_PT)
+ field.setName("MyFieldPG") ; field.setMesh(tmp)
+ field.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.8,-0.8, 0.8,0.8, -0.8,0.8, -0.8,-0.8, 0.,0., 0.2,0.2, 0.1,0.3],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
+ arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
+ field.setArray(arr)
+ field.checkConsistencyLight()
+ ####
+ fieldOnCell=field.voronoize(1e-12) # hot point
+ fieldOnCell.checkConsistencyLight()
+ self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),112)
+ self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),256)
+ self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
+ meaRef=field.getMesh().getMeasureField(True).getArray()
+ mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
+ self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
+ self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
+ mea.rearrange(7)
+ mea2=mea.sumPerTuple()
+ self.assertTrue(mea2.isEqual(meaRef,1e-12))
+ pass
+
+ def testVoronoi2D_2(self):
+ """More aggressive 2D test. No warping here. To check data"""
+ tmp=MEDCouplingCMesh("mesh")
+ arr=DataArrayDouble([-1.,1.])
+ tmp.setCoords(arr,arr)
+ tmp=tmp.buildUnstructured()
+ field=MEDCouplingFieldDouble(ON_GAUSS_PT)
+ field.setName("MyFieldPG") ; field.setMesh(tmp)
+ field.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.8,-0.8, 0.8,0.8, -0.8,0.8, -0.8,-0.8, 0.,0., 0.2,0.2, 0.1,0.3],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
+ arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
+ field.setArray(arr)
+ field.checkConsistencyLight()
+ #
+ fieldOnCell=field.voronoize(1e-12) # hot point
+ fieldOnCell.checkConsistencyLight()
+ self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),7)
+ self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),16)
+ self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
+ meaRef=DataArrayDouble([0.65,0.4710714285714285,0.59875,0.68,0.73875,0.4,0.46142857142857235])
+ mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
+ self.assertTrue(mea.isEqual(meaRef,1e-12))# the first important test is here
+ self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
+ self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
+ #
+ gsPt=field.getLocalizationOfDiscr()
+ a,b=fieldOnCell.getMesh().getCellsContainingPoints(gsPt,1e-12)
+ self.assertTrue(a.isIota(7))# the second important test is here ! Check that Gauss points are inside the associated cell in fieldOnCell !
+ self.assertTrue(b.isIota(8))
+ #
+ self.assertEqual(fieldOnCell.getMesh().buildDescendingConnectivity()[0].getNumberOfCells(),22)# last little test to reduce chance of errors. For humans there 21 but last tiny edge is split into 2 subedges due to alg
+ pass
+
+ def testVoronoi3D_1(self):
+ """ Check of voronize on 3D mesh method of MEDCouplingFieldDouble that converts field on Gauss Points to a field on cell"""
+ tmp=MEDCouplingCMesh("mesh")
+ arr=DataArrayDouble(5) ; arr.iota()
+ tmp.setCoords(arr,arr)
+ tmp=tmp.build1SGTUnstructured()
+ conn=tmp.getNodalConnectivity()
+ conn.rearrange(4)
+ conn.reversePerTuple()
+ conn.circularPermutationPerTuple(2)
+ conn.rearrange(1)
+ coo=tmp.getCoords().deepCopy()
+ coo.circularPermutationPerTuple(2) ; coo*=0.1
+ coo.reverse()
+ coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
+ coo2*=0.14
+ coo2.circularPermutationPerTuple(2)
+ tmp.getCoords()[:]+=coo2*coo
+ #
+ tmp.changeSpaceDimension(3,0.)
+ #
+ arrZ=DataArrayDouble(5) ; arrZ.iota()
+ mz=MEDCouplingCMesh() ; mz.setCoords(arrZ) ; mz=mz.buildUnstructured()
+ mz.changeSpaceDimension(3,0.)
+ mz.getCoords().circularPermutationPerTuple(1)
+ tmp=tmp.buildUnstructured().buildExtrudedMesh(mz,0)
+ #
+ field=MEDCouplingFieldDouble(ON_GAUSS_PT)
+ field.setName("MyFieldPG") ; field.setMesh(tmp)
+ field.setGaussLocalizationOnType(NORM_HEXA8,[-1,-1,-1, 1,-1,-1, 1,1,-1, -1,1,-1, -1,-1,1, 1,-1,1, 1,1,1, -1,1,1],[0.8,-0.8,0., 0.8,0.8,0., -0.8,0.8,0., -0.8,-0.8,0., 0.,0.,0., 0.2,0.2,0., 0.1,0.3,0.],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
+ arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
+ field.setArray(arr)
+ field.checkConsistencyLight()
+ ####
+ fieldOnCell=field.voronoize(1e-12) # hot point
+ fieldOnCell.checkConsistencyLight()
+ self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
+ meaRef=field.getMesh().getMeasureField(True).getArray()
+ mea=fieldOnCell.getMesh().getMeasureField(False).getArray()
+ self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
+ self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
+ mea.rearrange(7)
+ mea2=mea.sumPerTuple()
+ delta=(meaRef-mea2)
+ delta.abs()
+ delta/=meaRef
+ self.assertEqual(len(delta.findIdsNotInRange(0,1e-2)),0) # 1e-2 because hexa8 are warped !
+ pass
+
+ def testVoronoi3D_2(self):
+ """More aggressive 3D test. No warping here. To check data"""
+ tmp=MEDCouplingCMesh("mesh")
+ arr=DataArrayDouble([-1.,1.])
+ tmp.setCoords(arr,arr,arr)
+ tmp=tmp.buildUnstructured()
+ field=MEDCouplingFieldDouble(ON_GAUSS_PT)
+ field.setName("MyFieldPG") ; field.setMesh(tmp)
+ field.setGaussLocalizationOnType(NORM_HEXA8,[-1,-1,-1, 1,-1,-1, 1,1,-1, -1,1,-1, -1,-1,1, 1,-1,1, 1,1,1, -1,1,1],[0.8,-0.8,0., 0.8,0.8,0., -0.8,0.8,0., -0.8,-0.8,0., 0.,0.,0., 0.2,0.2,0., 0.1,0.3,0.],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
+ arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
+ field.setArray(arr)
+ field.checkConsistencyLight()
+ #
+ fieldOnCell=field.voronoize(1e-12) # hot point
+ fieldOnCell.checkConsistencyLight()
+ self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),7)
+ self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),34)
+ self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
+ meaRef=DataArrayDouble([1.3,0.9421428571428572,1.1975,1.36,1.4775,0.8,0.922857142857143])
+ mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
+ self.assertTrue(mea.isEqual(meaRef,1e-12))# the first important test is here
+ self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
+ self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
+ #
+ gsPt=field.getLocalizationOfDiscr()
+ a,b=fieldOnCell.getMesh().getCellsContainingPoints(gsPt,1e-12)
+ self.assertTrue(a.isIota(7))# the second important test is here ! Check that Gauss points are inside the associated cell in fieldOnCell !
+ self.assertTrue(b.isIota(8))
+ #
+ self.assertEqual(fieldOnCell.getMesh().buildDescendingConnectivity()[0].getNumberOfCells(),2*7+21)
+ pass
+
+ def testVoronoi3DSurf_1(self):
+ tmp=MEDCouplingCMesh("mesh")
+ arr=DataArrayDouble(5) ; arr.iota()
+ tmp.setCoords(arr,arr)
+ tmp=tmp.build1SGTUnstructured()
+ conn=tmp.getNodalConnectivity()
+ conn.rearrange(4)
+ conn.reversePerTuple()
+ conn.circularPermutationPerTuple(2)
+ conn.rearrange(1)
+ coo=tmp.getCoords().deepCopy()
+ coo.circularPermutationPerTuple(2) ; coo*=0.1
+ coo.reverse()
+ coo2=DataArrayDouble(len(tmp.getCoords())*tmp.getSpaceDimension()) ; coo2.iota() ; coo2.rearrange(tmp.getSpaceDimension())
+ coo2*=0.14
+ coo2.circularPermutationPerTuple(2)
+ tmp.getCoords()[:]+=coo2*coo
+ #
+ tmp.changeSpaceDimension(3,0.) # force 3D surf
+ tmp.rotate([0,0,0],[1,0,0],pi/3) # force 3D surf
+ #
+ field=MEDCouplingFieldDouble(ON_GAUSS_PT)
+ field.setName("MyFieldPG") ; field.setMesh(tmp)
+ field.setGaussLocalizationOnType(NORM_QUAD4,[-1.,-1.,1.,-1.,1.,1.,-1.,1.],[0.8,-0.8, 0.8,0.8, -0.8,0.8, -0.8,-0.8, 0.,0., 0.2,0.2, 0.1,0.3],[0.1,0.1,0.1,0.1,0.1,0.1,0.4])
+ arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
+ field.setArray(arr)
+ field.checkConsistencyLight()
+ #####
+ fieldOnCell=field.voronoize(1e-12);
+ fieldOnCell.checkConsistencyLight()
+ self.assertEqual(fieldOnCell.getMesh().getSpaceDimension(),3)
+ self.assertEqual(fieldOnCell.getMesh().getMeshDimension(),2)
+ self.assertEqual(field.getMesh().getSpaceDimension(),fieldOnCell.getMesh().getSpaceDimension())
+ self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
+ meaRef=field.getMesh().getMeasureField(True).getArray()
+ mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
+ self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
+ self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),7)
+ mea.rearrange(7)
+ mea2=mea.sumPerTuple()
+ self.assertTrue(mea2.isEqual(meaRef,1e-12))
+ pass
+
+ def testVoronoi1D_1(self):
+ tmp=MEDCouplingCMesh("mesh")
+ arr=DataArrayDouble(5) ; arr.iota()
+ tmp.setCoords(arr)
+ tmp=tmp.build1SGTUnstructured()
+ tmp1=tmp.deepCopy()
+ tmp.changeSpaceDimension(2,0.)
+ tmp.getCoords()[:,1]=pi/(len(arr)-1)*tmp.getCoords()[:,0]
+ tmp.getCoords()[:,0]=1.
+ tmp.setCoords(tmp.getCoords().fromPolarToCart())
+ tmp.changeSpaceDimension(3,1.)
+ #
+ field=MEDCouplingFieldDouble(ON_GAUSS_PT)
+ field.setName("MyFieldPG") ; field.setMesh(tmp)
+ field.setGaussLocalizationOnType(NORM_SEG2,[-1.,1.],[-0.9,-0.8,0.2,0.4,0.5,0.9],[0.1,0.1,0.1,0.1,0.1,0.5])
+ arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota()
+ field.setArray(arr)
+ field.checkConsistencyLight()
+ ####
+ fieldOnCell=field.voronoize(1e-12);
+ fieldOnCell.checkConsistencyLight()
+ self.assertEqual(fieldOnCell.getMesh().getSpaceDimension(),3)
+ self.assertEqual(fieldOnCell.getMesh().getMeshDimension(),1)
+ assert(fieldOnCell.getArray().isEqual(field.getArray(),1e-12))
+ meaRef=field.getMesh().getMeasureField(True).getArray()
+ mea=fieldOnCell.getMesh().getMeasureField(True).getArray()
+ self.assertEqual(field.getDiscretization().getNbOfGaussLocalization(),1)
+ self.assertEqual(field.getDiscretization().getGaussLocalization(0).getNumberOfGaussPt(),6)
+ mea.rearrange(6)
+ mea2=mea.sumPerTuple()
+ self.assertTrue(mea2.isEqual(meaRef,1e-12))
+ pass
+
+ def testFieldDoubleConvertToLinear1(self):
+ da=DataArrayDouble([0,0, 1,0, 2,0, 3,0, 0.5,0, 1.5,0, 2.5,0, 0,0.5, 0.5,0.5, 1, 0.5, 1.5,0.5, 2,0.5, 3,0.5, 0,1, 1,1, 2,1, 2.5,1, 3,1],18,2)
+ da.setInfoOnComponents(["g","h"])
+ m=MEDCouplingUMesh("mesh",2)
+ m.setCoords(da)
+ m.allocateCells()
+ m.insertNextCell(NORM_TRI6,[0,1,13,4,9,7])
+ m.insertNextCell(NORM_TRI6,[1,2,14,5,10,9])
+ m.insertNextCell(NORM_QUAD8,[2,3,17,15,6,12,16,11])
+ refPtr=m.getHiddenCppPointer()
+ f=MEDCouplingFieldDouble(ON_NODES)
+ f.setName("aa")
+ f.setMesh(m)
+ arr=DataArrayDouble(18*2) ; arr.iota()
+ arr.rearrange(2)
+ arr.setInfoOnComponents(["bb","ccc"])
+ f.setArray(arr)
+ f.setTime(0.5,2,3)
+ f.checkConsistencyLight()
+ #
+ f1=f.convertQuadraticCellsToLinear()
+ self.assertTrue(f.getMesh().getHiddenCppPointer(),refPtr)
+ self.assertTrue(f1.getMesh().getHiddenCppPointer()!=refPtr)
+ f1.checkConsistencyLight()
+ self.assertEqual(f1.getName(),"aa")
+ self.assertEqual(f1.getTypeOfField(),ON_NODES)
+ da0=DataArrayDouble([(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1)])
+ da0.setInfoOnComponents(["g","h"])
+ self.assertTrue(f1.getMesh().getCoords().isEqual(da0,1e-12))
+ self.assertTrue(f1.getMesh().getNodalConnectivity().isEqual(DataArrayInt([3,0,1,4,3,1,2,5,4,2,3,7,6])))
+ self.assertTrue(f1.getMesh().getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,13])))
+ da2=DataArrayDouble([(0,1),(2,3),(4,5),(6,7),(26,27),(28,29),(30,31),(34,35)])
+ da2.setInfoOnComponents(["bb","ccc"])
+ self.assertTrue(f1.getArray().isEqual(da2,1e-12))
+ self.assertEqual(f1.getTime(),[0.5,2,3])
+ #
+ f2=MEDCouplingFieldDouble(ON_CELLS)
+ f2.setName("aa")
+ f2.setMesh(m)
+ arr=DataArrayDouble(3*2) ; arr.iota()
+ arr.rearrange(2)
+ arr.setInfoOnComponents(["bb","ccc"])
+ f2.setArray(arr)
+ f2.setTime(0.5,2,3)
+ f2.checkConsistencyLight()
+ f3=f2.convertQuadraticCellsToLinear()
+ self.assertEqual(f2.getMesh().getHiddenCppPointer(),refPtr)
+ f3.checkConsistencyLight()
+ self.assertTrue(f3.getMesh().getHiddenCppPointer()!=refPtr)
+ self.assertTrue(f3.getMesh().getCoords().isEqual(da0,1e-12))
+ self.assertTrue(f3.getMesh().getNodalConnectivity().isEqual(DataArrayInt([3,0,1,4,3,1,2,5,4,2,3,7,6])))
+ self.assertTrue(f3.getMesh().getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,13])))
+ self.assertEqual(f2.getArray().getHiddenCppPointer(),f3.getArray().getHiddenCppPointer())
+ self.assertEqual(f3.getTime(),[0.5,2,3])
+ pass
+
+ def testBuild1DMeshFromCoords1(self):
+ da=DataArrayDouble([(3,4),(5,6),(7,8)])
+ da.setName("ZeArr")
+ da0=da.deepCopy()
+ m=MEDCouplingUMesh.Build1DMeshFromCoords(da0)
+ m.checkConsistencyLight()
+ self.assertEqual(da0.getHiddenCppPointer(),m.getCoords().getHiddenCppPointer())
+ self.assertTrue(da.isEqual(da0,1e-12))
+ self.assertEqual(m.getName(),da.getName())
+ self.assertEqual(m.getMeshDimension(),1)
+ self.assertTrue(isinstance(m,MEDCouplingUMesh))
+ m1=MEDCoupling1SGTUMesh(m)
+ m1.checkConsistencyLight()
+ self.assertTrue(m1.getNodalConnectivity().isEqual(DataArrayInt([0,1,1,2])))
+ #
+ da0.setName("")
+ m2=MEDCouplingUMesh.Build1DMeshFromCoords(da0)
+ m2.checkConsistencyLight()
+ self.assertEqual(da0.getHiddenCppPointer(),m2.getCoords().getHiddenCppPointer())
+ self.assertEqual(m2.getName(),"Mesh")
+ pass
+
+ def testVoronoi3D_3(self):
+ """Non regression test to check MEDCouplingUMesh::clipSingle3DCellByPlane"""
+ coo=DataArrayDouble([0.,1.,0.,0.,0.,0.,0.,0.,1.,1.,0.,0.],4,3)
+ m=MEDCouplingUMesh("mesh",3)
+ m.setCoords(coo) ; m.allocateCells()
+ m.insertNextCell(NORM_TETRA4,[0,2,3,1])
+ f=MEDCouplingFieldDouble(ON_GAUSS_PT)
+ f.setMesh(m) ; f.setName("field")
+ f.setGaussLocalizationOnType(NORM_TETRA4,[0.,1.,0.,0.,0.,0.,0.,0.,1.,1.,0.,0.],[0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.1381966011250105], [0.041667,0.041667,0.041667,0.041667])
+ f.setArray(DataArrayDouble([0,1,2,3]))
+ f3=f.voronoize(1e-12)
+ ref=DataArrayDouble([0.047256836610416179,0.03980327668541684,0.039803276685416833,0.039803276685416833])
+ self.assertTrue(f3.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-12))
+ self.assertTrue(f3.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
+ pass
+
+ def testVoronoi3D_4(self):
+ """Idem testVoronoi3D_3 except that here quadratic cells are considered"""
+ coo=DataArrayDouble([0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.5,0.0,0.0,0.0,0.5,0.0,0.5,0.5,0.5,0.5,0.0,0.5,0.0,0.0,0.5,0.0,0.5],10,3)
+ m=MEDCouplingUMesh("mesh",3)
+ m.setCoords(coo) ; m.allocateCells()
+ m.insertNextCell(NORM_TETRA10,[0,1,2,3,4,5,6,7,8,9])
+ f=MEDCouplingFieldDouble(ON_GAUSS_PT)
+ f.setMesh(m) ; f.setName("field")
+ f.setGaussLocalizationOnType(NORM_TETRA10,[0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.5,0.0,0.0,0.0,0.5,0.0,0.5,0.5,0.5,0.5,0.0,0.5,0.0,0.0,0.5,0.0,0.5],[0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.1381966011250105], [0.041667,0.041667,0.041667,0.041667])
+ f.setArray(DataArrayDouble([0,1,2,3]))
+ f3=f.voronoize(1e-12)
+ ref=DataArrayDouble([0.047256836610416179,0.03980327668541684,0.039803276685416833,0.039803276685416833])
+ self.assertTrue(f3.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-12))
+ self.assertTrue(f3.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
+ pass
+
+ def testVoronoi3D_5(self):
+ """ Cell 0 of Barreau_Elga_V11.rmed and sslv07b.rmed. HEXA8 cut regularly into 8 parts"""
+ coo=DataArrayDouble([(0.024,0.024,1.2),(0.024,0.048,1.2),(0.048,0.024,1.2),(0.048,0.048,1.2),(0.024,0.024,1.6),(0.024,0.048,1.6),(0.048,0.024,1.6),(0.048,0.048,1.6)])
+ m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
+ m.insertNextCell(NORM_HEXA8,[0,2,6,4,1,3,7,5])
+ f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
+ f.setGaussLocalizationOnType(NORM_HEXA8,[-1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0],[-0.577350269189626, -0.577350269189626, -0.577350269189626, -0.577350269189626, -0.577350269189626, 0.577350269189626, -0.577350269189626, 0.577350269189626, -0.577350269189626, -0.577350269189626, 0.577350269189626, 0.577350269189626, 0.577350269189626, -0.577350269189626, -0.577350269189626, 0.577350269189626, -0.577350269189626, 0.577350269189626, 0.577350269189626, 0.577350269189626, -0.577350269189626, 0.577350269189626, 0.577350269189626, 0.577350269189626],[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])
+ arr=DataArrayDouble(8) ; arr.iota() ; f.setArray(arr)
+ f.checkConsistencyLight()
+ #
+ vol=f.getMesh().getMeasureField(False).getIJ(0,0)
+ f2=f.voronoize(1e-12)
+ f2.checkConsistencyLight()
+ self.assertEqual(f2.getNumberOfTuples(),8)
+ volRef=vol/8
+ self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isUniform(volRef,1e-12))
+ pass
+
+ def testVoronoi3D_6(self):
+ """ Cell 0 of brokenshire.med (and pace.med). TETRA10 split into 4 parts"""
+ coo=DataArrayDouble([(50.,-50.,200.0),(50.0,-30.,200.0),(30.,-50.,200.0),(50.,-50.,180.0),(50.,-40.,200.0),(40.,-50.,200.0),(50.,-50.,190.0),(40.,-40.,200.0),(50.,-40.,190.0),(40.,-50.,190.0)])
+ m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
+ m.insertNextCell(NORM_TETRA10,[2,0,1,3,5,4,7,9,6,8])
+ f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
+ f.setGaussLocalizationOnType(NORM_TETRA10,[0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.5, 0.5, 0.5, 0.5, 0, 0.5, 0, 0, 0.5, 0, 0.5],[0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.5854101966249685, 0.1381966011250105, 0.1381966011250105],[0.041666666666666664, 0.041666666666666664, 0.041666666666666664, 0.041666666666666664])
+ arr=DataArrayDouble(4) ; arr.iota() ; f.setArray(arr)
+ f.checkConsistencyLight()
+ f2=f.voronoize(1e-12)
+ f2.checkConsistencyLight()
+ self.assertEqual(f2.getNumberOfTuples(),4)
+ arr=f2.getMesh().getMeasureField(False).getArray()
+ self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isEqual(DataArrayDouble([378.0546928833331, 318.42621348333586, 318.4262134833361, 318.4262134833278]),1e-6))
+ pass
+
+ def testVoronoi3D_7(self):
+ """ sslv07a.rmed. HEXA20 split into 27 parts """
+ coo=DataArrayDouble([(-0.5,-0.5,0.0),(-0.25,-0.5,0.0),(0.0,-0.5,0.0),(-0.5,0.0,0.0),(-0.5,-0.25,0.0),(0.0,0.0,0.0),(0.0,-0.25,0.0),(-0.25,0.0,0.0),(-0.5,-0.5,1.0),(-0.25,-0.5,1.0),(0.0,-0.5,1.0),(0.0,-0.25,1.0),(0.0,0.0,1.0),(-0.25,0.0,1.0),(-0.5,0.0,1.0),(-0.5,-0.25,1.0),(-0.5,-0.5,0.5),(0.0,-0.5,0.5),(0.0,0.0,0.5),(-0.5,0.0,0.5)])
+ m=MEDCouplingUMesh("",3) ; m.setCoords(coo) ; m.allocateCells()
+ m.insertNextCell(NORM_HEXA20,[0,3,5,2,8,14,12,10,4,7,6,1,15,13,11,9,16,19,18,17])
+ f=MEDCouplingFieldDouble(ON_GAUSS_PT) ; f.setMesh(m)
+ f.setGaussLocalizationOnType(NORM_HEXA20,
+ [-1,-1,-1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,1,-1,1,1,1,1,1,1,-1,1,-1,0,-1,0,1,-1,1,0,-1,0,-1,-1,-1,0,1,0,1,1,1,0,1,0,-1,1,-1,-1,0,-1,1,0,1,1,0,1,-1,0],
+ [-0.774597,-0.774597,-0.774597,-0.774597,-0.774597,0,-0.774597,-0.774597,0.774597,-0.774597,0,-0.774597,-0.774597,0,0,-0.774597,0,0.774597,-0.774597,0.774597,-0.774597,-0.774597,0.774597,0,-0.774597,0.774597,0.774597,0,-0.774597,-0.774597,0,-0.774597,0,0,-0.774597,0.774597,0,0,-0.774597,0,0,0,0,0,0.774597,0,0.774597,-0.774597,0,0.774597,0,0,0.774597,0.774597,0.774597,-0.774597,-0.774597,0.774597,-0.774597,0,0.774597,-0.774597,0.774597,0.774597,0,-0.774597,0.774597,0,0,0.774597,0,0.774597,0.774597,0.774597,-0.774597,0.774597,0.774597,0,0.774597,0.774597,0.774597],
+ [0.171468,0.274348,0.171468,0.274348,0.438957,0.274348,0.171468,0.274348,0.171468,0.274348,0.438957,0.274348,0.438957,0.702332,0.438957,0.274348,0.438957,0.274348,0.171468,0.274348,0.171468,0.274348,0.438957,0.274348,0.171468,0.274348,0.171468])
+ arr=DataArrayDouble(27) ; arr.iota() ; f.setArray(arr)
+ f.checkConsistencyLight()
+ f2=f.voronoize(1e-12)
+ a=0.007187820185770747 ; b=0.0090870678008658 ; c=0.011488156225861077 ; d=0.014523687548277797
+ ref=DataArrayDouble(27) ; ref[::2]=a ; ref[1::2]=b
+ ref[[4,10,12,14,16,22]]=c ; ref[13]=d # 6 cells 4,10,12,14,16,22 are the 6 cells boarding the most inner cell 13
+ #
+ self.assertTrue(f2.getMesh().getMeasureField(False).getArray().isEqual(ref,1e-7))
+ pass
+
+ def testConvertQuadToLin4Gauss_1(self):
+ coo=DataArrayDouble([0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.5,0.0,0.0,0.0,0.5,0.0,0.5,0.5,0.5,0.5,0.0,0.5,0.0,0.0,0.5,0.0,0.5],10,3)
+ m=MEDCouplingUMesh("mesh",3)
+ m.setCoords(coo) ; m.allocateCells()
+ m.insertNextCell(NORM_TETRA10,[0,1,2,3,4,5,6,7,8,9])
+ f=MEDCouplingFieldDouble(ON_GAUSS_PT)
+ f.setMesh(m) ; f.setName("field")
+ aaaa=[0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0,0.0,0.5,0.0,0.0,0.0,0.5,0.0,0.5,0.5,0.5,0.5,0.0,0.5,0.0,0.0,0.5,0.0,0.5]
+ bbbb=[0.1381966011250105,0.1381966011250105,0.1381966011250105,0.1381966011250105,0.1381966011250105,0.5854101966249685,0.1381966011250105,0.5854101966249685,0.1381966011250105,0.5854101966249685,0.1381966011250105,0.1381966011250105]
+ cccc=[0.041667,0.041667,0.041667,0.041667]
+ f.setGaussLocalizationOnType(NORM_TETRA10,aaaa,bbbb,cccc)
+ f.setArray(DataArrayDouble([0,1,2,3]))
+ f.setTime(1.,2,3)
+ #
+ mcpy=m.deepCopy() ; mcpy.convertQuadraticCellsToLinear() ; mcpy.zipCoords()
+ #
+ f2=f.convertQuadraticCellsToLinear()
+ f2.checkConsistencyLight()
+ self.assertTrue(f2.getMesh().isEqual(mcpy,1e-12))
+ self.assertTrue(f2.getArray().isEqual(DataArrayDouble([0,1,2,3]),1e-12))
+ self.assertEqual(f2.getNbOfGaussLocalization(),1)
+ gl=f2.getGaussLocalization(0)
+ self.assertEqual(gl.getType(),NORM_TETRA4)
+ self.assertTrue(DataArrayDouble(gl.getRefCoords()).isEqual(DataArrayDouble([0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,1.0,0.0,0.0]),1e-12))
+ self.assertTrue(DataArrayDouble(gl.getGaussCoords()).isEqual(DataArrayDouble(bbbb),1e-12))
+ self.assertTrue(DataArrayDouble(gl.getWeights()).isEqual(DataArrayDouble(cccc),1e-12))
+ self.assertEqual(f2.getName(),"field")
+ self.assertEqual(f2.getTime(),[1.,2,3])
+ pass
+
+ def testDADCumSum1(self):
+ d=DataArrayDouble([3.,2.,4.,5.])
+ self.assertTrue(d.cumSum().isEqual(DataArrayDouble([0.,3.,5.,9.,14.]),1e-12))
+ d2=DataArrayDouble([])
+ self.assertTrue(d2.cumSum().isEqual(DataArrayDouble([0.]),1e-12))
+ d.rearrange(2)
+ self.assertRaises(InterpKernelException,d.cumSum)
+ pass
+
+ def testDAIFromLinkedListOfPairToList1(self):
+ d=DataArrayInt([(5,7),(7,3),(3,12),(12,17)])
+ zeRes=DataArrayInt([5,7,3,12,17])
+ self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
+ d.rearrange(1)
+ self.assertRaises(InterpKernelException,d.fromLinkedListOfPairToList)
+ d.rearrange(2)
+ self.assertTrue(d.fromLinkedListOfPairToList().isEqual(zeRes))
+ d2=DataArrayInt([(5,7)])
+ self.assertTrue(d2.fromLinkedListOfPairToList().isEqual(DataArrayInt([5,7])))
+ d3=DataArrayInt([(5,7),(7,3),(4,12),(12,17)])
+ self.assertRaises(InterpKernelException,d3.fromLinkedListOfPairToList) # not a linked list of pair
+ d4=DataArrayInt([(5,7),(7,3),(12,3),(12,17)])
+ self.assertRaises(InterpKernelException,d4.fromLinkedListOfPairToList) # not a linked list of pair, but can be repaired !
+ d4.sortEachPairToMakeALinkedList()
+ self.assertTrue(d4.fromLinkedListOfPairToList().isEqual(zeRes))
+ pass
+
+ def testUMeshExplodeIntoEdges1(self):
+ m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; m.setCoords(arr,arr,arr) ; m=m.buildUnstructured()
+ self.assertEqual(m.getMeshDimension(),3)
+ a0,a1,a2,a3,a4=m.explodeIntoEdges()
+ b0,b1,b2,b3,b4=m.explode3DMeshTo1D()
+ self.assertTrue(a0.isEqual(b0,1e-12))
+ self.assertTrue(a1.isEqual(b1)) ; self.assertTrue(a2.isEqual(b2)) ; self.assertTrue(a3.isEqual(b3)) ; self.assertTrue(a4.isEqual(b4))
+ #
+ m=MEDCouplingCMesh() ; arr=DataArrayDouble(5) ; arr.iota() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
+ self.assertEqual(m.getMeshDimension(),2)
+ a0,a1,a2,a3,a4=m.explodeIntoEdges()
+ b0,b1,b2,b3,b4=m.buildDescendingConnectivity()
+ self.assertTrue(a0.isEqual(b0,1e-12))
+ self.assertTrue(a1.isEqual(b1)) ; self.assertTrue(a2.isEqual(b2)) ; self.assertTrue(a3.isEqual(b3)) ; self.assertTrue(a4.isEqual(b4))
+ pass
+
+ def testUMeshComputeEnlargedNeighborsOfNodes(self):
+ m=MEDCouplingCMesh() ; arr=DataArrayDouble(4) ; arr.iota() ; m.setCoords(arr,arr) ; m=m.buildUnstructured()
+ a,b=m.computeEnlargedNeighborsOfNodes()
+ self.assertTrue(a.isEqual(DataArrayInt([1,4,5,0,2,4,5,6,1,3,5,6,7,2,6,7,0,1,5,8,9,0,1,2,4,6,8,9,10,1,2,3,5,7,9,10,11,2,3,6,10,11,4,5,9,12,13,4,5,6,8,10,12,13,14,5,6,7,9,11,13,14,15,6,7,10,14,15,8,9,13,8,9,10,12,14,9,10,11,13,15,10,11,14])))
+ self.assertTrue(b.isEqual(DataArrayInt([0,3,8,13,16,21,29,37,42,47,55,63,68,71,76,81,84])))
+ pass
+
+ def testDAIfindIdsExt1(self):
+ d=DataArrayInt([4,6,-2,3,7,0,10])
+ self.assertTrue(d.findIdsGreaterOrEqualTo(3).isEqual(DataArrayInt([0,1,3,4,6])))
+ self.assertTrue(d.findIdsGreaterThan(3).isEqual(DataArrayInt([0,1,4,6])))
+ self.assertTrue(d.findIdsLowerThan(3).isEqual(DataArrayInt([2,5])))
+ self.assertTrue(d.findIdsLowerOrEqualTo(3).isEqual(DataArrayInt([2,3,5])))
+ pass
+
+ def testDAFacto1(self):
+ """Test focused of new wrapped methods for MEDCouplingFieldInt thanks to code factorization."""
+ d=DataArrayDouble(7) ; d.iota()
+ m=MEDCouplingUMesh.Build1DMeshFromCoords(d)
+ f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(m) ; arr=DataArrayInt(6) ; arr.iota() ; f.setArray(arr) ; f.checkConsistencyLight()
+ f_0=f[::2] # test is here
+ self.assertTrue(f_0.getArray().isEqual(DataArrayInt([0,2,4])))
+ self.assertTrue(f_0.getMesh().isEqual(m[[0,2,4]],1e-12))
+ #
+ f2=MEDCouplingFieldInt(ON_NODES) ; f2.setMesh(m) ; arr=DataArrayInt(7) ; arr.iota() ; f2.setArray(arr) ; f2.checkConsistencyLight()
+ f_1=f2[::2] # test is here
+ self.assertTrue(f_1.getArray().isEqual(DataArrayInt([0,1,2,3,4,5])))
+ m_1=m[[0,2,4]] ; m_1.zipCoords()
+ self.assertTrue(f_1.getMesh().isEqual(m_1,1e-12))
+ pass
+
+ def testFieldFloatIsOnStage1(self):
+ """ My first test with field int."""
+ m=MEDCouplingCMesh()
+ m.setName("mesh")
+ arrX=DataArrayDouble([0,1,2,3])
+ m.setCoords(arrX,arrX)
+ f=MEDCouplingFieldFloat(ON_CELLS)
+ f.setMesh(m)
+ arr=DataArrayFloat(8) ; arr.iota() ;f.setArray(arr)
+ self.assertRaises(InterpKernelException,f.checkConsistencyLight)
+ arr=DataArrayFloat(9) ; arr.iota() ;f.setArray(arr)
+ f.checkConsistencyLight()
+ f.setTimeUnit("ms")
+ self.assertEqual(f.getTimeUnit(),"ms")
+ f.setTime(3.2,5,6)
+ a,b,c=f.getTime()
+ self.assertEqual(b,5)
+ self.assertEqual(c,6)
+ self.assertEqual(a,3.2,12)
+ pass
+
+ def testFieldFloatIsOnStage2(self):
+ """ Very important test to check that isEqual of MEDCouplingFieldFloat is OK !"""
+ m1=MEDCouplingCMesh() ; m1.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
+ m1=m1.buildUnstructured() ; m1.setName("mesh")
+ f1=MEDCouplingFieldFloat(ON_CELLS) ; f1.setMesh(m1)
+ arr1=DataArrayFloat([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr1.setInfoOnComponents(["aa","bbb"])
+ f1.setArray(arr1) ; f1.setName("f1") ; f1.setTime(2.,3,4)
+ #
+ m2=MEDCouplingCMesh() ; m2.setCoords(DataArrayDouble([0,1,2,3]),DataArrayDouble([0,1,2,3,4]))
+ m2=m2.buildUnstructured() ; m2.setName("mesh")
+ f2=MEDCouplingFieldFloat(ON_CELLS) ; f2.setMesh(m2)
+ arr2=DataArrayFloat([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr2.setInfoOnComponents(["aa","bbb"])
+ f2.setArray(arr2) ; f2.setName("f1") ; f2.setTime(2.,3,4)
+ #
+ self.assertTrue(f1.isEqual(f2,1e-12,0.))
+ f1.getArray()[:]*=2
+ self.assertTrue(not f1.isEqual(f2,1e-12,0.))
+ self.assertTrue(not f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
+ f1.getArray()[:]/=2
+ self.assertTrue(f1.isEqual(f2,1e-12,0.))
+ #
+ f1.setName("F1")
+ self.assertTrue(not f1.isEqual(f2,1e-12,0.))
+ f1.setName("f1")
+ self.assertTrue(f1.isEqual(f2,1e-12,0.))
+ #
+ f1.getArray().setInfoOnComponents(["aa","bbbb"])
+ self.assertTrue(not f1.isEqual(f2,1e-12,0.))
+ self.assertTrue(f1.isEqualWithoutConsideringStr(f2,1e-12,0.))
+ f1.getArray().setInfoOnComponents(["aa","bbb"])
+ self.assertTrue(f1.isEqual(f2,1e-12,0.))
+ #
+ f3=f2.deepCopy()
+ self.assertTrue(f1.isEqual(f3,1e-12,0.))
+ #
+ for fd,expected in ((ON_NODES,False),(ON_CELLS,True)):
+ f4=MEDCouplingFieldFloat(fd) ; f4.setMesh(m2) ; f4.setTime(2.,3,4)
+ arr4=DataArrayFloat([(0,1),(2,3),(4,5),(6,7),(8,9),(10,11),(12,13),(14,15),(16,17),(18,19),(20,21),(22,23)]) ; arr4.setInfoOnComponents(["aa","bbb"])
+ f4.setArray(arr4) ; f4.setName("f1")
+ self.assertEqual(f1.isEqual(f4,1e-12,0.),expected)
+ pass
+ pass
+
+ def testLTGTDAD1(self):
+ d=DataArrayDouble(10) ; d.iota()
+ self.assertTrue(d.findIdsLowerThan(0).empty())
+ self.assertTrue(d.findIdsLowerThan(1).isEqual(DataArrayInt([0])))
+ d-=5.
+ self.assertTrue(d.findIdsStrictlyNegative().isEqual(DataArrayInt([0,1,2,3,4])))
+ self.assertTrue(d.findIdsGreaterThan(0.).isEqual(DataArrayInt([6,7,8,9])))
+ self.assertTrue(d.convertToFloatArr().isEqual(DataArrayFloat([-5,-4,-3,-2,-1,0,1,2,3,4]),1e-7))
+ self.assertTrue(d.convertToFloatArr().convertToDblArr().isEqual(d,1e-12))
+ pass
+
+ def testMapII1(self):
+ """ Test optimized maps for renumbering. Typical usage local to global in parallel mode"""
+ d=DataArrayInt([1003,1007])
+ m=d.invertArrayN2O2O2NOptimized()
+ d2=DataArrayInt([1003,1003,1007,1003,1007])
+ d2.transformWithIndArr(m)
+ self.assertTrue(d2.isEqual(DataArrayInt([0,0,1,0,1])))
+ pass
+
+ def testDAICheckUniformAndGuess1(self):
+ d=DataArrayInt([3,3],1,2)
+ self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non single compo
+ d=DataArrayInt([])
+ self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# empty
+ d=DataArrayInt()
+ self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non allocated
+ d=DataArrayInt([3,3,3])
+ self.assertEqual(3,d.checkUniformAndGuess())
+ d=DataArrayInt([7])
+ self.assertEqual(7,d.checkUniformAndGuess())
+ d=DataArrayInt([3,4,3])
+ self.assertRaises(InterpKernelException,d.checkUniformAndGuess)# non uniform
+ pass
+
+ def testUMComputePlaneEquationOf3DFaces1(self):
+ """ Consequence of an invalid traduction of matrix inversion transposition."""
+ m=MEDCoupling1SGTUMesh("msh",NORM_QUAD4)
+ m.setCoords(DataArrayDouble([(0,0,0),(1,0,0),(2,0,0),(0,2,0),(1,2,0),(2,2,0),(0,4,0),(1,4,0),(2,4,0),(0,0,3),(1,0,3),(2,0,3),(0,2,3),(1,2,3),(2,2,3),(0,4,3),(1,4,3),(2,4,3)]))
+ m.setNodalConnectivity(DataArrayInt([0,1,4,3,9,12,13,10,0,9,10,1,1,10,13,4,4,13,12,3,3,12,9,0,1,2,5,4,10,13,14,11,1,10,11,2,2,11,14,5,5,14,13,4,3,4,7,6,12,15,16,13,4,13,16,7,7,16,15,6,6,15,12,3,4,5,8,7,13,16,17,14,5,14,17,8,8,17,16,7]))
+ m=m.buildUnstructured()
+ ref=DataArrayDouble([(0,0,1,0),(0,0,1,-3),(0,1,0,0),(1,0,0,-1),(0,1,0,-2),(1,0,0,0),(0,0,1,0),(0,0,1,-3),(0,1,0,0),(1,0,0,-2),(0,1,0,-2),(0,0,1,0),(0,0,1,-3),(1,0,0,-1),(0,1,0,-4),(1,0,0,0),(0,0,1,0),(0,0,1,-3),(1,0,0,-2),(0,1,0,-4)])
+ res=m.computePlaneEquationOf3DFaces()
+ self.assertTrue(res.isEqual(ref,1e-12))
+ pass
+
+ def testBugInComputationOfEqOfPlane1(self):
+ coo=DataArrayDouble([-1.0, 1.0, -0.3872983455657959, -1.0, 1.0, 0.3872983455657959, -1.0, 1.0, 0.693649172782898, 1.0, 1.0, 0.693649172782898, 1.0, 1.0, 0.3872983455657959, 1.0, 1.0, -0.3872983455657959],6,3)
+ m=MEDCouplingUMesh("",2)
+ m.setCoords(coo)
+ m.allocateCells()
+ m.insertNextCell(NORM_POLYGON,[0,1,2,3,4,5])
+ self.assertTrue(m.computePlaneEquationOf3DFaces().isEqual(DataArrayDouble([0,1,0,-1],1,4),1e-12))
+ pass
+