+
+ 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 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