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