X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCoupling_Swig%2FMEDCouplingBasicsTest5.py;h=1bd4d3afb40d4f7ed7f46d4c93f8659daf2a04dd;hb=f7fdff591a1830181499ba95e16ef25eb43e0140;hp=0a85ee51b891973ea3781ce8be60a0e49c553dee;hpb=eb4b9a0f16f682485df7baf6c2eb5fed34c988f4;p=tools%2Fmedcoupling.git diff --git a/src/MEDCoupling_Swig/MEDCouplingBasicsTest5.py b/src/MEDCoupling_Swig/MEDCouplingBasicsTest5.py index 0a85ee51b..1bd4d3afb 100644 --- a/src/MEDCoupling_Swig/MEDCouplingBasicsTest5.py +++ b/src/MEDCoupling_Swig/MEDCouplingBasicsTest5.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Copyright (C) 2007-2016 CEA/DEN, EDF R&D +# Copyright (C) 2007-2020 CEA/DEN, EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -18,12 +18,17 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -from MEDCoupling import * +import sys +if sys.platform == "win32": + from MEDCouplingCompat import * +else: + from medcoupling import * + import unittest from math import pi,e,sqrt,cos,sin from datetime import datetime from MEDCouplingDataForTest import MEDCouplingDataForTest -import rlcompleter,readline # this line has to be here, to ensure a usability of MEDCoupling/MEDLoader. B4 removing it please notify to anthony.geay@cea.fr +import rlcompleter,readline # this line has to be here, to ensure a usability of MEDCoupling/MEDLoader. B4 removing it please notify to anthony.geay@edf.fr class MEDCouplingBasicsTest5(unittest.TestCase): def testSwig2FieldDoubleBuildSubPartRange1(self): @@ -31,7 +36,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m=MEDCouplingDataForTest.build2DTargetMesh_1() f=MEDCouplingFieldDouble(ON_CELLS) f.setMesh(m) - arr=DataArrayDouble(5,2) ; arr[:,0]=range(7,12) ; arr[:,1]=100+arr[:,0] + arr = DataArrayDouble(5, 2) ; arr[:, 0] = list(range(7, 12)) ; arr[:, 1] = 100 + arr[:, 0] f.setArray(arr) f.checkConsistencyLight() ff=f[1:-1:2] @@ -61,7 +66,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): #ON_NODES f=MEDCouplingFieldDouble(ON_NODES) f.setMesh(m) - arr=DataArrayDouble(9,2) ; arr[:,0]=range(7,16) ; arr[:,1]=100+arr[:,0] + arr = DataArrayDouble(9, 2) ; arr[:, 0] = list(range(7, 16)) ; arr[:, 1] = 100 + arr[:, 0] f.setArray(arr) f.checkConsistencyLight() ff=f[1:-1:2] @@ -96,7 +101,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): #ON_GAUSS_NE f=MEDCouplingFieldDouble(ON_GAUSS_NE) f.setMesh(m) - arr=DataArrayDouble(18,2) ; arr[:,0]=range(7,25) ; arr[:,1]=100+arr[:,0] + arr = DataArrayDouble(18, 2) ; arr[:, 0] = list(range(7, 25)) ; arr[:, 1] = 100 + arr[:, 0] f.setArray(arr) f.checkConsistencyLight() ff=f[1:-1:2] @@ -130,7 +135,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): f.setGaussLocalizationOnCells([3],[0,0,1,0,1,1,1,0],[1.1,1.1,2.2,2.2,3.,3.],[0.2,0.4,0.4]); f.setGaussLocalizationOnCells([1],[0,0,1,0,1,0],[1.1,1.1,2.2,2.2,3.,3.,4.,4.],[0.1,0.1,0.4,0.4]); f.setGaussLocalizationOnCells([2],[0,0,1,0,1,0],[1.1,1.1,2.2,2.2,3.,3.,4.,4.,5.,5.],[0.1,0.1,0.4,0.3,0.1]); - arr=DataArrayDouble(16,2) ; arr[:,0]=range(7,23) ; arr[:,1]=100+arr[:,0] + arr = DataArrayDouble(16, 2) ; arr[:, 0] = list(range(7, 23)) ; arr[:, 1] = 100 + arr[:, 0] f.setArray(arr) f.checkConsistencyLight() ff=f[1:-1:2] @@ -230,7 +235,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): time_deb = datetime.now() a1=DataArrayDouble(len(d)) b1=DataArrayInt(len(d)) - m1s=[m1[i] for i in xrange(m1.getNumberOfCells())] + m1s = [m1[i] for i in range(m1.getNumberOfCells())] for j,pt in enumerate(d): eter=1e308 fter=-1 @@ -258,7 +263,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m=MEDCouplingUMesh("mesh",2) m.setCoords(coo) m.allocateCells() - for i in xrange(24): + for i in range(24): m.insertNextCell(NORM_QUAD4,conn[4*i:4*i+4]) pass m.checkConsistency() @@ -288,7 +293,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): d[:,1]*=pi/180. # angle in radian d=d.fromPolarToCart() d+=zeBary - m=MEDCouplingUMesh("quad8",2) ; m.allocateCells() ; m.insertNextCell(NORM_QUAD8,range(8)) ; m.setCoords(d) + m = MEDCouplingUMesh("quad8", 2) ; m.allocateCells() ; m.insertNextCell(NORM_QUAD8, list(range(8))) ; m.setCoords(d) self.assertTrue(m.computeCellCenterOfMass().isEqual(DataArrayDouble(zeBary,1,2),1e-13)) self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12) tri32D=m.buildDescendingConnectivity()[0][0] ; tri32D.zipCoords() @@ -307,7 +312,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): d[:,1]*=pi/180. # angle in radian d=d.fromPolarToCart() d+=zeBary - m=MEDCouplingUMesh("tri6",2) ; m.allocateCells() ; m.insertNextCell(NORM_TRI6,range(6)) ; m.setCoords(d) + m = MEDCouplingUMesh("tri6", 2) ; m.allocateCells() ; m.insertNextCell(NORM_TRI6, list(range(6))) ; m.setCoords(d) self.assertTrue(m.computeCellCenterOfMass().isEqual(DataArrayDouble(zeBary,1,2),1e-13)) self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12) # spaceDim=3 TRI6 becomes TRI3 ... for the moment @@ -325,7 +330,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): d[:,1]*=pi/180. # angle in radian d=d.fromPolarToCart() d+=zeBary - m=MEDCouplingUMesh("qpolyg",2) ; m.allocateCells() ; m.insertNextCell(NORM_QPOLYG,range(10)) ; m.setCoords(d) + m = MEDCouplingUMesh("qpolyg", 2) ; m.allocateCells() ; m.insertNextCell(NORM_QPOLYG, list(range(10))) ; m.setCoords(d) self.assertTrue(m.computeCellCenterOfMass().isEqual(DataArrayDouble(zeBary,1,2),1e-13)) self.assertAlmostEqual(float(m.getMeasureField(False).getArray()),pi*zeRadius*zeRadius,12) # spaceDim=3 QPOLYG becomes POLYG ... for the moment @@ -469,7 +474,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): s=slice(18,1,-2) self.assertEqual(DataArray.GetNumberOfItemGivenBESRelative(s),9) self.assertRaises(InterpKernelException,DataArray.GetNumberOfItemGivenBES,s) - self.assertEqual(sum([DataArray.GetNumberOfItemGivenBESRelative(DataArray.GetSlice(s,i,4)) for i in xrange(4)]),DataArray.GetNumberOfItemGivenBESRelative(s)) + self.assertEqual(sum([DataArray.GetNumberOfItemGivenBESRelative(DataArray.GetSlice(s, i, 4)) for i in range(4)]), DataArray.GetNumberOfItemGivenBESRelative(s)) self.assertEqual(DataArray.GetSlice(s,0,4),slice(18,14,-2)) self.assertEqual(DataArray.GetSlice(s,1,4),slice(14,10,-2)) self.assertEqual(DataArray.GetSlice(s,2,4),slice(10,6,-2)) @@ -537,7 +542,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): # maxNbCSN=nbOfCellsSharingNodes.getMaxValue()[0] arr3=DataArrayDouble(f.getMesh().getNumberOfNodes(),f.getArray().getNumberOfComponents()) ; arr3[:]=0. - for i in xrange(1,maxNbCSN+1): + for i in range(1, maxNbCSN + 1): ids=nbOfCellsSharingNodes.findIdsEqual(i) if len(ids)==0: continue @@ -601,7 +606,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m=MEDCoupling1SGTUMesh("m",NORM_QUAD4) mem_m=m.getHeapMemorySize() m.allocateCells(5) - self.assertIn(m.getHeapMemorySize()-mem_m,xrange(5*4*4,5*4*4+32)) + self.assertIn(m.getHeapMemorySize() - mem_m, list(range(5 * 4 * MEDCouplingSizeOfIDs()//8, 5 * 4 * MEDCouplingSizeOfIDs()//8 + 32))) self.assertEqual(m.getNodalConnectivity().getNbOfElemAllocated(),20) m.setCoords(um.getCoords()) m.insertNextCell([1,0,6,7]) @@ -1014,7 +1019,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertEqual(d.getInfoOnComponents(),["aa","bbb"]) ref=d.getHeapMemorySize() d.desallocate() - self.assertEqual(ref-d.getHeapMemorySize(),6*4) + self.assertEqual(ref-d.getHeapMemorySize(),6*MEDCouplingSizeOfIDs()//8) self.assertTrue(not d.isAllocated()) self.assertEqual(d.getInfoOnComponents(),["aa","bbb"]) self.assertRaises(InterpKernelException,d.checkAllocated) @@ -1405,7 +1410,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): valuesToTest=f.getValueOnMulti(targetPointCoordsXY); self.assertEqual(196,valuesToTest.getNumberOfTuples()); self.assertEqual(1,valuesToTest.getNumberOfComponents()); - for i in xrange(40): + for i in range(40): self.assertAlmostEqual(targetFieldValsExpected[i],valuesToTest.getIJ(i,0),10) pass fd=f.getDiscretization() @@ -1430,7 +1435,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): pass # pass - + # test the when input slice is all the same object is return by MEDCouplingMesh.buildPartRange def testSwig2MeshPartSlice1(self): a=DataArrayDouble(4) ; a.iota() @@ -1462,7 +1467,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertEqual(f4.getMesh(),None) pass - # test a simple node to cell convertion of a field + # test a simple node to cell conversion of a field def testSwig2NodeToCellDiscretization1(self): f=MEDCouplingFieldDouble(ON_NODES) ; f.setTime(1.1,2,3) a1=DataArrayDouble(4) ; a1.iota() @@ -1482,26 +1487,6 @@ class MEDCouplingBasicsTest5(unittest.TestCase): exp=DataArrayDouble([18.5,118.5,17.5,117.5,16.5,116.5,14.5,114.5,13.5,113.5,12.5,112.5],6,2) ; exp.setInfoOnComponents(["aa [km]","bbb [kJ]"]) self.assertTrue(f2.getArray().isEqual(exp,1e-13)) pass - - def testSwig2NonRegressionBugIntersectMeshes1(self): - src=MEDCouplingUMesh("src",2) - src.setCoords(DataArrayDouble([-2.5,-3,-2.5,3,2.5,3],3,2)) - src.allocateCells() - src.insertNextCell(NORM_TRI3,[0,1,2]) - # - trg=MEDCouplingUMesh("trg",2) - trg.setCoords(DataArrayDouble([-2.5,-3.,0.,-3.,0.,-2.,-2.,0.,-2.25,0.,-2.5,0.,-2.5,-1.5,0.,-2.5,-1.25,-3.,-1.414213562373095,-1.414213562373095],10,2)) - trg.allocateCells() - trg.insertNextCell(NORM_QPOLYG,[2,1,0,5,3,7,8,6,4,9]) - # - a,b,c=MEDCouplingUMesh.Intersect2DMeshes(src,trg,1.0e-8) - a.mergeNodes(1e-8) - self.assertTrue(a.getCoords().isEqual(DataArrayDouble([-2.5,-3.,-2.5,3.,2.5,3.,0.,-3.,0.,-2.,-2.,0.,-2.25,0.,-2.5,0.,-2.5,-1.5,0.,-2.5,-1.25,-3.,-1.414213562373095,-1.414213562373095,-1.2803687993289596,-1.5364425591947515,-1.8901843996644798,-2.2682212795973755,-1.81117884244736,-0.8483107924994473,-2.5,1.5,0.,3.,0.6098156003355202,0.7317787204026243],18,2),1e-12)) - self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([32,12,0,7,5,13,8,6,14,32,7,1,2,12,5,15,16,17,14,6]))) - self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,9,20]))) - self.assertTrue(b.isEqual(DataArrayInt([0,0]))) - self.assertTrue(c.isEqual(DataArrayInt([0,-1]))) - pass def testSwig2MeshOrientCorrectly2DCells1(self): m=MEDCouplingUMesh("mesh",2) @@ -1522,7 +1507,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): pass def testSwig2Hexa8HavingFacesWarped1(self): - """ This test is bases on a "error" of interpolation detected. After investigation cell #3 of src is warped that leads to the fact that when trg is + """ This test is bases on a "error" of interpolation detected. After investigation cell #3 of src is warped that leads to the fact that when trg is intersected with src the sum of intersection volume is greater than the volume of the trg cell. A test that can be done is to split the cell #3 of src into tetrohedrons and by summing all the volumes it does not fit the volume computed of cell#3 unsplitted (expect for GENERAL_24). @@ -1572,7 +1557,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): # trs=[[0.,0.,-1.],[0.,0.,1.],[1.,0.,0.],[0.,-1.,0.],[-1.,0.,0.],[0.,1.,0.]] for i,t in enumerate(trs): - for j in xrange(64): + for j in range(64): j2=(j//16) ; j1=((j%16)//4) ; j0=(j%4) m11=m1.deepCopy() m11.rotate([0.,0.,0.],[0.,0.,1.],float(j0)*pi/2) @@ -1620,7 +1605,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertTrue(m.getCellsContainingPoint((-0.4,-0.4),1e-12).isEqual(DataArrayInt([1]))) self.assertTrue(m.getCellsContainingPoint((0.,-0.4),1e-12).isEqual(DataArrayInt([0,1]))) pass - + def testSwig2GetCellsContainingPointsForNonConvexPolygon2(self): coo=DataArrayDouble([-0.5,-0.5,-0.5,0.5,0.5,0.5,0.5,-0.5,-2.0816681711721685e-17,-2.0816681711721685e-17,-0.17677669529663687,0.1767766952966369,0.,0.5,0.5,0.,0.17677669529663684,-0.17677669529663692,0.17677669529663692,0.17677669529663684,-0.17677669529663692,-0.17677669529663687,0.,-0.5,-0.5,0.,0.33838834764831843,-0.3383883476483185,-0.33838834764831843,0.33838834764831843,-0.21213203435596423,0.21213203435596426,0.2121320343559642,-0.2121320343559643,0.21213203435596426,0.2121320343559642,-0.21213203435596423,-0.21213203435596428,0.3560660171779821,-0.35606601717798214,-0.35606601717798214,0.35606601717798214,0.19445436482630052,-0.19445436482630063,-0.19445436482630055,0.19445436482630057,0.,0.27],24,2) m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) ; m.allocateCells() @@ -1790,102 +1775,6 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertTrue(p.getCoords().isEqual(DataArrayDouble([0.,0.,1.,0.,2.,0.,3.,0.,4.,0.,5.,0.,0.,1.,1.,1.,2.,1.,3.,1.,4.,1.,5.,1.,0.,2.,1.,2.,2.,2.,3.,2.,4.,2.,5.,2.,0.,3.,1.,3.,2.,3.,3.,3.,4.,3.,5.,3.,0.,4.,1.,4.,2.,4.,3.,4.,4.,4.,5.,4.,0.,5.,1.,5.,2.,5.,3.,5.,4.,5.,5.,5.,0.5,0.,0.,0.5,0.5,1.,1.,0.5,1.5,0.,1.5,1.,2.,0.5,2.5,0.,2.5,1.,3.,0.5,3.5,0.,3.5,1.,4.,0.5,4.5,0.,4.5,1.,5.,0.5,1.,1.5,1.5,2.,2.,1.5,2.5,2.,3.,1.5,3.5,2.,4.,1.5,4.5,2.,5.,1.5,0.5,2.,0.,2.5,0.5,3.,1.,2.5,2.,2.5,2.5,3.,3.,2.5,3.5,3.,4.,2.5,4.5,3.,5.,2.5,0.,3.5,0.5,4.,1.,3.5,1.5,3.,1.5,4.,2.,3.5,3.,3.5,3.5,4.,4.,3.5,4.5,4.,5.,3.5,0.,4.5,0.5,5.,1.,4.5,1.5,5.,2.,4.5,2.5,4.,2.5,5.,3.,4.5,4.,4.5,4.5,5.,5.,4.5,0.,1.5,0.5,1.5,1.5,2.5,2.5,3.5,3.5,4.5,3.5,5.0],100,2),1e-13)) pass - def testSwig2Conformize2D1(self): - eps = 1.0e-8 - coo = [0.,-0.5,0.,0.,0.5,0.,0.5,-0.5,0.25, - -0.1,0.25,0.,0.5,-0.1,0.,0.5,0.5,0.5,0.25,0.4,0.25,0.5,0.5,0.4] - conn = [5,5,2,6,4,5,6,3,0,1,5,4,5,10,8,11,9,5,11,2,1,7,10,9] - connI = [0,5,12,17,24] - m = MEDCouplingUMesh("box",2) - cooArr = DataArrayDouble(coo,len(coo)/2,2) - m.setCoords(cooArr) - m.setConnectivity(DataArrayInt(conn),DataArrayInt(connI)) - m.mergeNodes(eps) - m.checkConsistencyLight() - self.assertTrue(m.conformize2D(eps).isEqual(DataArrayInt([3]))) - self.assertEqual(m.getCoords().getHiddenCppPointer(),cooArr.getHiddenCppPointer()) # check that coordinates remain the same here - self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,5,2,6,4,5,6,3,0,1,5,4,5,10,8,11,9,5,11,2,5,1,7,10,9]))) - self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,12,17,25]))) - pass - - def testSwig2Conformize2D2(self): - eps = 1.0e-8 - coo=DataArrayDouble([-10,-6,0,-6,0,0,7,0,-10,2,0,2,0,6,7,6,0,8,7,8,-10,12,-4,12,0,12,0,11,7,11,-4,16,0,16,7,16],18,2) - conn=DataArrayInt([2,3,7,6, 13,16,17,14, 4,10,12,5, 9,14,13,8, 8,9,7,6, 5,4,0,1, 16,12,11,15]) - m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) - m.setCoords(coo) - m.setNodalConnectivity(conn) - m=m.buildUnstructured() - self.assertTrue(m.conformize2D(eps).isEqual(DataArrayInt([0,1,2,5]))) - self.assertEqual(m.getCoords().getHiddenCppPointer(),coo.getHiddenCppPointer()) # check that coordinates remain the same here - self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([5,2,3,7,6,5, 5,13,12,16,17,14, 5,4,10,11,12,13,8,6,5, 4,9,14,13,8, 4,8,9,7,6, 5,5,4,0,1,2, 4,16,12,11,15]))) - self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,6,12,21,26,31,37,42]))) - pass - - def testSwigSplit2DCells1(self): - coo=DataArrayDouble([[0,0],[1,0],[1,1],[0,1],[0.5,0],[1,0.5],[0.5,1],[0.,0.5]]) - m=MEDCouplingUMesh("mesh",2) - m.setCoords(coo) - m.allocateCells() - m.insertNextCell(NORM_QUAD8,[0,1,2,3,4,5,6,7]) - _,d,di,_,_=m.buildDescendingConnectivity() - subb=DataArrayInt([5]) - subbi=DataArrayInt([0,0,1,1,1]) - mid=DataArrayInt([-1,-1]) - midi=DataArrayInt([0,0,2,2,2]) - self.assertEqual(2,m.split2DCells(d,di,subb,subbi,mid,midi)) - self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,0,1,5,2,3,4,8,9,6,7]))) - self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,11]))) - self.assertTrue(m.getCoords().isEqual(DataArrayDouble([[0,0],[1,0],[1,1],[0,1],[0.5,0],[1,0.5],[0.5,1],[0.,0.5],[1.,0.25],[1.,0.75]]),1e-12)) - pass - - def testSwig2Conformize2D3(self): - eps = 1.0e-8 - coo=DataArrayDouble([-10,-6,0,-6,0,0,7,0,-10,2,0,2,0,6.5,7,6.5,0,8,7,8,-10,12,-4,12,0,12,0,11,7,11,-4,16,0,16,7,16],18,2) - conn=DataArrayInt([2,3,7,6, 13,16,17,14, 4,10,12,5, 9,14,13,8, 8,9,7,6, 5,4,0,1, 16,12,11,15]) - m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) - m.setCoords(coo) - m.setNodalConnectivity(conn) - m=m.buildUnstructured() - m.convertLinearCellsToQuadratic() - self.assertTrue(m.conformize2D(eps).isEqual(DataArrayInt([0,1,2,5]))) - self.assertTrue(m.getCoords().getHiddenCppPointer()!=coo.getHiddenCppPointer()) # coordinates are not the same here contrary to testSwig2Conformize2D2 ... - self.assertTrue(m.getCoords()[:18].isEqual(coo,1e-12)) # but the 18 first nodes are the same - pass - - def testSwig2Conformize2D4(self): - eps = 1.0e-8 - coo=DataArrayDouble([-10,-6,0,-6,0,0,7,0,-10,2,0,2,0,6.5,7,6.5,0,8,7,8,-10,12,-4,12,0,12,0,11,7,11,-4,16,0,16,7,16],18,2) - conn=DataArrayInt([2,3,7,6, 13,16,17,14, 4,10,12,5, 9,14,13,8, 8,9,7,6, 5,4,0,1, 16,12,11,15]) - m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) - m.setCoords(coo) - m.setNodalConnectivity(conn) - m=m.buildUnstructured() - m.convertLinearCellsToQuadratic() - self.assertEqual(42,m.getNumberOfNodes()) - oldCoo=m.getCoords().deepCopy() - m.conformize2D(eps) - self.assertTrue(m.getCoords()[:42].isEqual(oldCoo,1e-12)) - self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,2,3,7,6,5,18,19,20,42,43,32,13,12,16,17,14,44,38,23,24,25,32,4,10,11,12,13,8,6,5,26,45,39,44,31,34,42,29,8,9,14,13,8,30,25,31,32,8,8,9,7,6,32,33,20,34,32,5,4,0,1,2,29,35,36,46,43,8,16,12,11,15,38,39,40,41]))) - self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,11,22,39,48,57,68,77]))) - self.assertTrue(m.getCoords().isEqual(DataArrayDouble([[-10.,-6.0],[0.,-6.0],[0.,0.0],[7.,0.0],[-10.,2.0],[0.,2.0],[0.,6.5],[7.,6.5],[0.,8.0],[7.,8.0],[-10.,12.0],[-4.,12.0],[0.,12.0],[0.,11.0],[7.,11.0],[-4.,16.0],[0.,16.0],[7.,16.0],[3.5, 0.0],[7.,3.25],[3.5, 6.5],[0.,3.25],[0.,13.5],[3.5, 16.0],[7.,13.5],[3.5, 11.0],[-10.,7.0],[-5.,12.0],[0.,7.0],[-5.,2.0],[7.,9.5],[0.,9.5],[3.5, 8.0],[7.,7.25],[0.,7.25],[-10.,-2.0],[-5.,-6.0],[0.,-2.0],[0.,14.0],[-2.,12.0],[-4.,14.0],[-2.,16.0],[0.,4.25],[0.,1.0],[0.,11.5],[-7.,12.0],[0.,-3.]]),1e-12)) - pass - - def testSwig2Conformize2D5(self): - eps=1e-8 - coo=DataArrayDouble([[2,2],[2,-6],[10,-2],[-2,-2],[6,0],[6,-4],[2,7],[2,4.5],[-1.4641016151377544,0],[-1.950753362380551,-1.3742621398390762],[-7,-3],[-0.8284271247461898,-4.82842712474619],[0.26794919243112281,3.5],[0,1.4641016151377548],[-4.4753766811902755,-2.1871310699195381],[-3.9142135623730949,-3.9142135623730949],[-1.8042260651806146,-3.23606797749979]]) - m=MEDCouplingUMesh("mesh",2) - m.allocateCells() - m.setCoords(coo) - m.insertNextCell(NORM_TRI6,[1,2,0,5,4,3]) - m.insertNextCell(NORM_TRI6,[8,6,0,12,7,13]) - m.insertNextCell(NORM_TRI6,[11,9,10,16,14,15]) - self.assertTrue(m.conformize2D(eps).isEqual(DataArrayInt([0]))) - self.assertTrue(m.getCoords().isEqual(DataArrayDouble([2.,2.,2.,-6.,10.,-2.,-2.,-2.,6.,0.,6.,-4.,2.,7.,2.,4.5,-1.4641016151377544,0.,-1.950753362380551,-1.3742621398390762,-7.,-3.,-0.8284271247461898,-4.82842712474619,0.2679491924311228,3.5,8.881784197001252e-16,1.4641016151377548,-4.4753766811902755,-2.187131069919538,-3.914213562373095,-3.914213562373095,-1.8042260651806146,-3.236067977499789,-1.7705659643687133,-0.6647725630649153,0.46926627053963865,-5.695518130045146],19,2),1e-12)) - self.assertTrue(m.getNodalConnectivity().isEqual(DataArrayInt([32,1,2,0,8,9,11,5,4,13,17,16,18,6,8,6,0,12,7,13,6,11,9,10,16,14,15]))) - self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,13,20,27]))) - pass - def testSwigExtendedSlice1(self): d=DataArrayInt([5,6,7]) self.assertTrue(d[2:].isEqual(DataArrayInt([7]))) @@ -2007,7 +1896,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): gaussCoords=refCoords[:] ; gaussCoords[14]=0.9999999999999 # change z of point #4 0.999... instead of 1. because with shape function it leads to division by 0. ! fGauss.setGaussLocalizationOnType(NORM_PYRA13,refCoords,gaussCoords,weights) arrOfDisc2=fGauss.getLocalizationOfDiscr() - self.assertTrue(arrOfDisc2.isEqual(coo,1e-10)) # be less exigent 1e-10 instead of 1e-12 due to shape function sensitivity arount 0.,0.,1. ! + self.assertTrue(arrOfDisc2.isEqual(coo,1e-10)) # be less exigent 1e-10 instead of 1e-12 due to shape function sensitivity around 0.,0.,1. ! pass def testSwig2Tri7GP1(self): @@ -2015,7 +1904,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m=MEDCouplingUMesh("mesh",2) ; m.setCoords(coo) m.allocateCells() # the cell description is exactly those described in the description of TRI7 in MED file 3.0.7 documentation - m.insertNextCell(NORM_TRI7,range(7)) + m.insertNextCell(NORM_TRI7, list(range(7))) refCoords=[0.,0.,1.,0.,0.,1.,0.5,0.,0.5,0.5,0.,0.5,0.3333333333333333,0.3333333333333333] gaussCoords=[0.3333333333333333,0.3333333333333333,0.470142064105115,0.470142064105115,0.05971587178977,0.470142064105115,0.470142064105115,0.05971587178977,0.101286507323456,0.101286507323456,0.797426985353088,0.101286507323456,0.101286507323456,0.797426985353088] weights=[0.062969590272413,0.062969590272413,0.062969590272413,0.066197076394253,0.066197076394253,0.066197076394253,0.1125] @@ -2118,6 +2007,26 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertTrue(m.getNodalConnectivityIndex().isEqual(DataArrayInt([0,7]))) pass + def testSwig2ColinearizeKeepingConform2D1(self): + eps = 1.0e-6 + # Just to get a nice coords array ... + mm = MEDCouplingCMesh(); arr = DataArrayDouble([0.0, 1.0,2.0]) + mm.setCoords(arr, arr); mm = mm.buildUnstructured(); coo = mm.getCoords() + + mesh = MEDCouplingUMesh("M", 2) + mesh.setCoords(coo) + c = [NORM_POLYGON, 0,1,4,7,6,3, NORM_QUAD4, 1,2,5,4, NORM_QUAD4,4,5,8,7] + cI = [0, 7,12,17] + mm.setConnectivity(DataArrayInt(c),DataArrayInt(cI)) + mm.checkConsistencyLight() + + mm.colinearizeKeepingConform2D(eps) + c = mm.getNodalConnectivity().getValues() + cI = mm.getNodalConnectivityIndex().getValues() + self.assertEqual(c, [NORM_POLYGON, 0, 1, 4, 7, 6, NORM_POLYGON, 1, 2, 5, 4, NORM_POLYGON, 4, 5, 8, 7]) + self.assertEqual(cI, [0,6,11,16]) + pass + def testSwig2BoundingBoxForBBTree1(self): """ This test appears simple but it checks that bounding box are correctly computed for quadratic polygons. It can help a lot to reduce the amount of intersections ! """ @@ -2239,9 +2148,9 @@ class MEDCouplingBasicsTest5(unittest.TestCase): pass def testSwig2Colinearize2D3(self): - """ colinearize was too agressive, potentially producing cells with one edge """ + """ colinearize was too aggressive, potentially producing cells with one edge """ # Flat polygon with 3 edges - nothing should happen (min number of edges for a linear polyg) - coo = DataArrayDouble([0.0,0.0, 2.0,0.0, 1.5,0.0, 1.0,0.0, 0.5,0.0], 5,2) + coo = DataArrayDouble([0.0,0.0, 2.0,0.0, 1.5,0.0, 1.0,0.0, 0.5,0.0], 5,2) m = MEDCouplingUMesh("m", 2) c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2], [0,4]] ] m.setCoords(coo); m.setConnectivity(c, cI) @@ -2249,8 +2158,8 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m.checkConsistency() self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues()) self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues()) - - # Flat quad polygon, 2 edges - nothing should happen (min number of edges for a quad polyg) + + # Flat quad polygon, 2 edges - nothing should happen (min number of edges for a quad polyg) m = MEDCouplingUMesh("m", 2) c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1, 2,3], [0,5]] ] m.setCoords(coo); m.setConnectivity(c, cI) @@ -2258,7 +2167,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m.checkConsistency() self.assertEqual(c.getValues(), m.getNodalConnectivity().getValues()) self.assertEqual(cI.getValues(), m.getNodalConnectivityIndex().getValues()) - + # Flat polygon, 4 edges - one reduction should happen m = MEDCouplingUMesh("m", 2) c, cI = [DataArrayInt(l) for l in [[NORM_POLYGON, 0,1,2,3], [0,5]] ] @@ -2267,8 +2176,8 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m.checkConsistency() self.assertEqual([NORM_POLYGON, 3,1,2], m.getNodalConnectivity().getValues()) self.assertEqual([0,4], m.getNodalConnectivityIndex().getValues()) - - # Flat quad polygon, 3 edges - one reduction expected + + # Flat quad polygon, 3 edges - one reduction expected m = MEDCouplingUMesh("m", 2) c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 0,1,3, 3,2,4], [0,7]] ] m.setCoords(coo); m.setConnectivity(c, cI) @@ -2277,7 +2186,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertEqual([NORM_QPOLYG, 3,1, 5,2], m.getNodalConnectivity().getValues()) self.assertTrue( m.getCoords()[5].isEqual( DataArrayDouble([(1.5,0.0)]), 1.0e-12 ) ) self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues()) - + # Now an actual (neutronic) case: circle made of 4 SEG3. Should be reduced to 2 SEG3 m = MEDCouplingDataForTest.buildCircle2(0.0, 0.0, 1.0) c, cI = [DataArrayInt(l) for l in [[NORM_QPOLYG, 7,5,3,1, 6,4,2,0], [0,9]] ] @@ -2287,6 +2196,23 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertTrue( m.getCoords()[8].isEqual( DataArrayDouble([(1.0,0.0)]), 1.0e-12 ) ) self.assertEqual([0,5], m.getNodalConnectivityIndex().getValues()) + def testSwig2Colinearize2D4(self): + """ From ALAMOS. Colinearize around last seg in the connectivity was buggy. """ + mesh = MEDCouplingUMesh('C3', 2) + coo = DataArrayDouble([(-31.838400909874,21.557335816426),(-34.588400909874,16.794196095611),(-33.298676775512,19.225000000000),(-33.547226066398,19.368500000000),(-32.750140188627,22.083728734445),(-35.500140188627,17.320589013630), + (-35.044270549250,17.057392554621),(-32.619779010901,22.008464673393),(-32.554667298175,21.970872408523),(-32.745177043525,22.080863261284),(-32.747658616076,22.082295997864),(-32.682478027213,22.044663967338)]) + mesh.setCoords(coo) + c = DataArrayInt([32, 0, 1, 5, 4, 9, 7, 2, 6, 3, 10, 11, 8]) + cI = DataArrayInt([0, 13]) + mesh.setConnectivity(c, cI) + mesh.colinearize2D(1.0e-8) + coo = mesh.getCoords() + self.assertEqual(coo.getNumberOfTuples(), 13) + lstPt = coo[12] + self.assertAlmostEqual(lstPt[0,0], -32.29427054925) + self.assertAlmostEqual(lstPt[0,1], 21.8205322754351) + pass + def testSwig2CheckAndPreparePermutation2(self): a=DataArrayInt([10003,9999999,5,67]) self.assertTrue(DataArrayInt.CheckAndPreparePermutation(a).isEqual(DataArrayInt([2,3,0,1]))) @@ -2320,34 +2246,34 @@ class MEDCouplingBasicsTest5(unittest.TestCase): def testSwigBugOnUnpackingTuplesInDataArray1(self): inp=DataArrayDouble([(1,2,3),(4,5,6),(7,8,9),(10,11,12)]) it=inp.__iter__() - r=it.next() + r = next(it) self.assertRaises(StopIteration,r.__getitem__,4) self.assertEqual(len(r),3) a,b,c=r - r=it.next() + r = next(it) self.assertEqual(len(r),3) d,e,f=r - r=it.next() + r = next(it) self.assertEqual(len(r),3) g,h,i=r - r=it.next() + r = next(it) self.assertEqual(len(r),3) j,k,l=r self.assertTrue(inp.isEqual(DataArrayDouble([a,b,c,d,e,f,g,h,i,j,k,l],4,3),1e-12)) ######## inp=DataArrayInt([(1,2,3),(4,5,6),(7,8,9),(10,11,12)]) it=inp.__iter__() - r=it.next() + r = next(it) self.assertRaises(StopIteration,r.__getitem__,4) self.assertEqual(len(r),3) a,b,c=r - r=it.next() + r = next(it) self.assertEqual(len(r),3) d,e,f=r - r=it.next() + r = next(it) self.assertEqual(len(r),3) g,h,i=r - r=it.next() + r = next(it) self.assertEqual(len(r),3) j,k,l=r self.assertTrue(inp.isEqual(DataArrayInt([a,b,c,d,e,f,g,h,i,j,k,l],4,3))) @@ -2500,7 +2426,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertEqual(d.getValuesAsTuple(),[]) d=DataArrayDouble(24) ; d.iota() ; d.rearrange(3) self.assertEqual(d.getValues(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.]) - self.assertEqual(d.getValuesAsTuple(),[(0.,1.,2.0),(3.,4.,5.0),(6.,7.,8.0),(9.,10.,11.0),(12.,13.,14.0),(15.,16.,17.0),(18.,19.,20.0),(21.,22.,23.)]) + self.assertEqual(d.getValuesAsTuple(),[(0.,1.,2.0),(3.,4.,5.0),(6.,7.,8.0),(9.,10.,11.0),(12.,13.,14.0),(15.,16.,17.0),(18.,19.,20.0),(21.,22.,23.)]) d=DataArrayInt() self.assertEqual(d.getValues(),[]) self.assertEqual(d.getValuesAsTuple(),[]) @@ -2783,11 +2709,11 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertTrue(isinstance(g0[0],MEDCouplingCartesianAMRPatchGF)) g1=amr.retrieveGridsAt(1) self.assertEqual(5,len(g1)) - for i in xrange(5): + for i in range(5): self.assertTrue(isinstance(g1[i],MEDCouplingCartesianAMRPatch)) pass pass - + def testSwig2AMR7(self): """Idem testSwig2AMR6 except that we are in 1D""" amr=MEDCouplingCartesianAMRMesh("",1,[6],[0],[1]) @@ -3035,7 +2961,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): exp11=DataArrayDouble([61.03,61.03,62.03,62.03,62.03,63.03,63.03,63.03,64.03,64.03,64.03,65.03,65.03,61.03,61.03,62.03,62.03,62.03,63.03,63.03,63.03,64.03,64.03,64.03,65.03,65.03,75.03,75.03,76.03,76.03,76.03,77.03,77.03,77.03,78.03,78.03,78.03,79.03,79.03,75.03,75.03,76.03,76.03,76.03,77.03,77.03,77.03,78.03,78.03,78.03,79.03,79.03,75.03,75.03,76.03,76.03,76.03,77.03,77.03,77.03,78.03,78.03,78.03,79.03,79.03,89.03,89.03,90.03,90.03,90.03,91.03,91.03,91.03,92.03,92.03,92.03,93.03,93.03,89.03,89.03,90.03,90.03,90.03,91.03,91.03,91.03,92.03,92.03,92.03,93.03,93.03,89.03,89.03,90.03,90.03,90.03,91.03,91.03,91.03,92.03,92.03,92.03,93.03,93.03,103.03,103.03,104.03,104.03,104.03,105.03,105.03,105.03,106.03,106.03,106.03,107.03,107.03,103.03,103.03,104.03,104.03,104.03,105.03,105.03,105.03,106.03,106.03,106.03,107.03,107.03,103.03,103.03,104.03,104.03,104.03,105.03,105.03,105.03,106.03,106.03,106.03,107.03,107.03,117.03,117.03,118.03,118.03,118.03,119.03,119.03,119.03,120.03,120.03,120.03,121.03,121.03,117.03,117.03,118.03,118.03,118.03,119.03,119.03,119.03,120.03,120.03,120.03,121.03,121.03]) self.assertTrue(att3.getFieldOn(att3.getMyGodFather().getMeshAtPosition((1,3)),"YY").isEqualWithoutConsideringStr(exp11,1e-12)) del att3 - ### + ### att4.synchronizeAllGhostZonesAtASpecifiedLevel(2) for pos in [(),(0,),(1,),(2,)]: self.assertTrue(att4.getFieldOn(att4.getMyGodFather().getMeshAtPosition(pos),"YY").isEqual(att5.getFieldOn(att5.getMyGodFather().getMeshAtPosition(pos),"YY"),1e-12)) @@ -3173,7 +3099,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertTrue(att.getFieldOn(amr[1].getMesh(),"YY").isEqualWithoutConsideringStr(exp1,1e-12)) pass pass - + def testSwig2AMR14(self): """ non regression linked to VTHB write.""" fact=[2,2] ; fact2=[3,3] @@ -3195,431 +3121,6 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertEqual(amr[1][0].getBLTRRangeRelativeToGF(),[(9,15),(21,24)]) pass - def testSwig2Intersect2DMeshWith1DLine1(self): - """A basic test with no colinearity between m1 and m2.""" - i=MEDCouplingIMesh("mesh",2,[5,5],[0.,0.],[1.,1.]) - m1=i.buildUnstructured() - m2=MEDCouplingUMesh("mesh",1) ; m2.setCoords(DataArrayDouble([0.75,3.5,3.75,1.75],2,2)) ; m2.allocateCells() ; m2.insertNextCell(NORM_SEG2,[0,1]) - a,b,c,d=MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1,m2,1e-12) - self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,7,6,11,12,4,8,7,12,13,4,11,10,15,16,4,18,17,22,23,4,19,18,23,24,5,16,15,20,21,31,5,21,22,17,28,31,5,16,31,28,5,17,29,28,5,12,11,16,28,29,5,17,18,30,29,5,13,12,29,30,5,18,19,14,27,30,5,13,30,27,5,9,8,13,27,14]))) - self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,25,31,1,31,28,1,28,29,1,29,30,1,30,27,1,27,26]))) - self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,56,62,66,70,76,81,86,92,96,102]))) - self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9,12,15,18]))) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:25].isEqual(m1.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[25:25+2].isEqualWithoutConsideringStr(m2.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[27:].isEqualWithoutConsideringStr(DataArrayDouble([(3.3214285714285716,2.),(1.6071428571428572,3.),(2.,2.7708333333333335),(3.,2.1875),(1.,3.354166666666667)]),1e-12)) - self.assertTrue(c.isEqual(DataArrayInt([0,1,2,3,4,5,6,8,14,15,12,13,13,9,9,10,10,11,11,7]))) - self.assertTrue(d.isEqual(DataArrayInt([(10,10),(11,12),(13,14),(15,16),(17,18),(19,19)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine2(self): - """A basic test with colinearity between m1 and m2 and the last cell of m2 outside m1.""" - i=MEDCouplingIMesh("mesh",2,[5,5],[0.,0.],[1.,1.]) - m1=i.buildUnstructured() - m2=MEDCouplingUMesh("mesh",1) ; m2.setCoords(DataArrayDouble([0.5,2.,2.25,2.,2.5,2.,2.75,2.,3.,2.,4.,2.,5.,2.],7,2)) ; m2.allocateCells() - for i in xrange(6): - m2.insertNextCell(NORM_SEG2,[i,i+1]) - pass - a,b,c,d=MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1,m2,1e-12) - self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,16,15,20,21,4,17,16,21,22,4,18,17,22,23,4,19,18,23,24,5,6,5,10,25,11,5,7,6,11,12,5,8,7,12,26,27,28,13,5,9,8,13,14,5,11,25,10,15,16,5,12,11,16,17,5,13,28,27,26,12,17,18,5,14,13,18,19]))) - self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,46,51,59,64,70,75,83,88]))) - self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,25,11,1,11,12,1,12,26,1,26,27,1,27,28,1,28,13,1,13,14,1,14,31]))) - self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9,12,15,18,21,24]))) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:25].isEqual(m1.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[25:].isEqualWithoutConsideringStr(m2.getCoords(),1e-12)) - self.assertTrue(c.isEqual(DataArrayInt([0,1,2,3,12,13,14,15,4,5,6,7,8,9,10,11]))) - self.assertTrue(d.isEqual(DataArrayInt([(12,8),(13,9),(14,10),(14,10),(14,10),(14,10),(15,11),(-1,-1)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine3(self): - """m2 fully included in cell #12. of m1""" - i=MEDCouplingIMesh("mesh",2,[5,5],[0.,0.],[1.,1.]) - m1=i.buildUnstructured() - m2=MEDCouplingUMesh("mesh",1) ; m2.setCoords(DataArrayDouble([(0.75,3.25),(0.5,3.5),(0.25,3.25)])) ; m2.allocateCells() - for i in xrange(2): - m2.insertNextCell(NORM_SEG2,[i,i+1]) - pass - a,b,c,d=MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1,m2,1e-12) - self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,7,6,11,12,4,8,7,12,13,4,9,8,13,14,4,11,10,15,16,4,12,11,16,17,4,13,12,17,18,4,14,13,18,19,4,17,16,21,22,4,18,17,22,23,4,19,18,23,24,5,16,15,20,21]))) - self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80]))) - self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,25,26,1,26,27]))) - self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6]))) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:25].isEqual(m1.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[25:].isEqualWithoutConsideringStr(m2.getCoords(),1e-12)) - self.assertTrue(c.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,12]))) - self.assertTrue(d.isEqual(DataArrayInt([(15,15),(15,15)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine4(self): - """A special case where an edge is simultaneously a cut and colinear. This tests also checks negative values in descending edges of m1.""" - i=MEDCouplingIMesh("mesh",2,[5,5],[0.,0.],[1.,1.]) - m1=i.buildUnstructured() - part=DataArrayInt([0,1,2,3,4,7,8,11,12,13,14,15]) - m1_1=m1[part] - m1_2=m1[part.buildComplement(m1.getNumberOfCells())] - m1=MEDCouplingUMesh.MergeUMeshesOnSameCoords(m1_1,m1_2.buildSpreadZonesWithPoly()) - m1.zipCoords() - m2=MEDCouplingUMesh("mesh",1) ; m2.setCoords(DataArrayDouble([(3.5,2.),(0.5,2.)])) ; m2.allocateCells() - m2.insertNextCell(NORM_SEG2,[0,1]) - a,b,c,d=MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1,m2,1e-12) - self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,5,6,4,2,1,6,7,4,3,2,7,8,4,4,3,8,9,4,15,14,19,20,4,16,15,20,21,4,17,16,21,22,4,18,17,22,23,5,6,5,10,25,11,5,9,8,12,24,13,5,11,25,10,14,15,5,13,24,12,17,18,5,8,7,6,11,12,5,15,16,17,12,11]))) - self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,46,52,58,64,70,76]))) - self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,24,12,1,12,11,1,11,25]))) - self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9]))) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:24].isEqual(m1.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[24:].isEqualWithoutConsideringStr(m2.getCoords(),1e-12)) - self.assertTrue(c.isEqual(DataArrayInt([0,1,2,3,8,9,10,11,4,5,6,7,12,12]))) - self.assertTrue(d.isEqual(DataArrayInt([(9,11),(12,13),(8,10)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine5(self): - """A test focusing on a special case for cut.""" - i=MEDCouplingIMesh("mesh",2,[5,5],[0.,0.],[1.,1.]) - m1=i.buildUnstructured() - m2=MEDCouplingUMesh("mesh",1) ; m2.setCoords(DataArrayDouble([(1.,0.),(3.,2.),(1.,4.)])) ; m2.allocateCells() - for i in xrange(2): - m2.insertNextCell(NORM_SEG2,[i,i+1]) - pass - a,b,c,d=MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1,m2,1e-12) - self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,1,0,5,6,4,3,2,7,8,4,4,3,8,9,4,6,5,10,11,4,7,6,11,12,4,9,8,13,14,4,11,10,15,16,4,12,11,16,17,4,14,13,18,19,4,16,15,20,21,4,18,17,22,23,4,19,18,23,24,5,6,7,1,5,2,1,7,5,12,13,7,5,8,7,13,5,12,17,13,5,18,13,17,5,16,21,17,5,22,17,21]))) - self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,10,15,20,25,30,35,40,45,50,55,60,64,68,72,76,80,84,88,92]))) - self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,1,7,1,7,13,1,13,17,1,17,21]))) - self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9,12]))) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:25].isEqual(m1.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[25:].isEqualWithoutConsideringStr(m2.getCoords(),1e-12)) - self.assertTrue(c.isEqual(DataArrayInt([0,2,3,4,5,7,8,9,11,12,14,15,1,1,6,6,10,10,13,13]))) - self.assertTrue(d.isEqual(DataArrayInt([(12,13),(14,15),(16,17),(18,19)]))) - pass - - def testIntersect2DMeshWith1DLine6(self): - """ Basic test for Intersect2DMeshWith1DLine: a vertical line intersecting a square. """ - m1c = MEDCouplingCMesh() - coordX = DataArrayDouble([-1., 1., 2]) - m1c.setCoordsAt(0,coordX) - coordY = DataArrayDouble([0., 2.]) - m1c.setCoordsAt(1,coordY); - m1 = m1c.buildUnstructured() - - # A simple line: - m2 = MEDCouplingUMesh("bla", 1) - coord2 = DataArrayDouble([0.,-1.0, 0.,1., 0.,3., 0.5,2.2], 4, 2) - conn2 = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,2,3]) - connI2 = DataArrayInt([0,3,7]) - m2.setCoords(coord2) - m2.setConnectivity(conn2, connI2) - - # End of construction of input meshes m1bis and m2 -> start of specific part of the test - a,b,c,d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1, m2, 1e-10) - self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,2,1,4,5,32,0,3,11,7,10,14,15,16,17,18,32,4,1,10,7,11,19,20,21,22,23]))) - self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,16,27]))) - self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,6,10,1,10,7,2,7,11,12,2,11,8,13]))) - self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,10,14]))) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:6].isEqual(m1.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[6:10].isEqual(m2.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[10:].isEqual(DataArrayDouble([(0.,0.),(0.5164175471673584,2.),(0.3796918047064557,1.43726403104512),(0.3796918047064557,2.56273596895488),(-1.,1.),(-0.24179122641632078,2.),(0.3796918047064558,1.4372640310451201),(0.,0.5),(-0.5,0.),(1.,1.),(0.5,0.),(0.,0.5),(0.3796918047064558,1.4372640310451201),(0.7582087735836792,2.)]),1e-12)) - self.assertTrue(c.isEqual(DataArrayInt([1,0,0]))) - self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(1,2),(1,2),(-1,-1)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine7(self): - """ Star pattern (a triangle intersecting another one upside down) """ - coords1 = DataArrayDouble([-2.,1., 2.,1., 0.,-2.], 3,2) - coords2 = DataArrayDouble([0.,2., 2.,-1., -2.,-1., 0.,3.], 4,2) - m1 = MEDCouplingUMesh("triangle", 2) - m2 = MEDCouplingUMesh("tri_line", 1) - m1.setCoords(coords1) - m2.setCoords(coords2) - m1.setConnectivity(DataArrayInt([NORM_TRI3, 0,1,2]), DataArrayInt([0,4])) - m2.setConnectivity(DataArrayInt([NORM_SEG2,0,1,NORM_SEG2,1,2,NORM_SEG2,2,3]), DataArrayInt([0,3,6,9])) - # End of construction of input meshes m1bis and m2 -> start of specific part of the test - a,b,c,d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1, m2, 1e-10) - self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([5,1,9,7,5,2,11,10,5,0,8,12,5,7,9,10,11,12,8]))) - self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,8,12,19]))) - self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,3,7,1,7,9,1,9,4,1,4,10,1,10,11,1,11,5,1,5,12,1,12,8,1,8,6]))) - self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9,12,15,18,21,24,27]))) - self.assertTrue(a.getCoords()[:3].isEqual(m1.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[3:7].isEqual(m2.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[7:].isEqual(DataArrayDouble([(0.6666666666666666,1.),(-1.,1.),(1.3333333333333333,1.1102230246251565e-16),(0.6666666666666665,-0.9999999999999996),(-0.6666666666666667,-1.),(-1.4285714285714284,0.14285714285714302)]),1e-12)) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(c.isEqual(DataArrayInt([0,0,0,0]))) - self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(0,3),(-1,-1),(-1,-1),(1,3),(-1,-1),(-1,-1),(2,3),(-1,-1)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine8(self): - """ Line pieces ending (or fully located) in the middle of a cell """ - m1c = MEDCouplingCMesh() - m1c.setCoordsAt(0,DataArrayDouble([-1., 1.])) - m1c.setCoordsAt(1,DataArrayDouble([-1., 1.])); - m1 = m1c.buildUnstructured() - coords2 = DataArrayDouble([0.,0., 0.,1.5, -1.5,0., 0.5,0.0, 0.0,-0.5, 1.1,-0.6], 6,2) - m2 = MEDCouplingUMesh("piecewise_line", 1) - m2.setCoords(coords2) - c = DataArrayInt([NORM_SEG2,2,1, NORM_SEG2,1,4, NORM_SEG2,4,3, NORM_SEG2,3,5]) - cI = DataArrayInt([0,3,6,9,12]) - m2.setConnectivity(c, cI) - a,b,c,d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1, m2, 1e-10) - self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([5,2,11,10,5,3,13,7,8,12,5,1,0,10,11,12,8,7,13]))) - self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,4,10,19]))) - self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,6,10,1,10,11,1,11,5,1,5,12,1,12,8,1,8,7,1,7,13,1,13,9]))) - self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,9,12,15,18,21,24]))) - self.assertTrue(a.getCoords()[:4].isEqual(m1.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[4:10].isEqual(m2.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[10:].isEqual(DataArrayDouble([(-1.,0.5),(-0.5,1.),(0.,1.),(1.,-0.5)]),1e-12)) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(c.isEqual(DataArrayInt([0,0,0]))) - self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(0,2),(-1,-1),(-1,-1),(1,2),(1,2),(1,2),(-1,-1)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine9(self): - """ Intersection with a line whose connectivity is not consecutive """ - m1c = MEDCouplingCMesh() - coordX = DataArrayDouble([-1., 1., 2]) - m1c.setCoordsAt(0,coordX) - coordY = DataArrayDouble([0., 2.]) - m1c.setCoordsAt(1,coordY); - m1 = m1c.buildUnstructured() - # A simple line: - m2 = MEDCouplingUMesh("bla", 1) - coord2 = DataArrayDouble([0.,1.5, 0.5,1., 0.0,0.5, 0.0,3.0, 0.0,-1.0], 5, 2) - conn2 = DataArrayInt([NORM_SEG2,3,0,NORM_SEG3,0,2,1,NORM_SEG2,2,4]) - connI2 = DataArrayInt([0,3,7,10]) - m2.setCoords(coord2) - m2.setConnectivity(conn2, connI2) - # End of construction of input meshes m1bis and m2 -> start of specific part of the test - a,b,c,d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m1, m2, 1e-10) - self.assertTrue(a.getNodalConnectivity().isEqual(DataArrayInt([4,2,1,4,5,32,4,1,11,8,6,12,14,15,16,17,18,19,32,0,3,12,6,8,11,20,21,22,23,24,25]))) - self.assertTrue(a.getNodalConnectivityIndex().isEqual(DataArrayInt([0,5,18,31]))) - self.assertTrue(b.getNodalConnectivity().isEqual(DataArrayInt([1,9,12,1,12,6,2,6,8,13,1,8,11,1,11,10]))) - self.assertTrue(b.getNodalConnectivityIndex().isEqual(DataArrayInt([0,3,6,10,13,16]))) - self.assertTrue(a.getCoords()[:6].isEqual(m1.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[6:11].isEqual(m2.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[11:].isEqual(DataArrayDouble([(0.,0.),(0.,2.),(0.5,1.),(1.,1.),(0.5,0.),(0.,0.25),(0.5,1.),(0.,1.75),(0.5,2.),(-1.,1.),(-0.5,2.),(0.,1.75),(0.5,1.),(0.,0.25),(-0.5,0.)]),1e-12)) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(c.isEqual(DataArrayInt([1,0,0]))) - self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(1,2),(1,2),(1,2),(-1,-1)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine10(self): - """ Intersection between a circle and various lines """ - eps = 1.0e-8 - m_circ = MEDCouplingDataForTest.buildCircle2(0.0, 0.0, 2.0) - coords = [0.0,3.0,0.0,-3.0] - connec = [0,1] - m_line = MEDCouplingUMesh("seg", 1) - m_line.allocateCells(1) - meshCoords = DataArrayDouble.New(coords, len(coords)/2, 2) - m_line.setCoords(meshCoords) - m_line.insertNextCell(NORM_SEG2, connec) - a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m_circ, m_line, eps) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:m_circ.getNumberOfNodes()].isEqual(m_circ.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[m_circ.getNumberOfNodes():m_circ.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12)) - self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(2.,0.),(1.4142135623730951,1.414213562373095),(0.,2.),(-1.414213562373095,1.4142135623730951),(-2.,0.),(-1.4142135623730954,-1.414213562373095),(0.,-2.),(1.4142135623730947,-1.4142135623730954),(0.,3.),(0.,-3.),(0.,-2.),(0.,2.),(2.,0.),(0.7653668647301797,-1.8477590650225735),(0.,0.),(0.7653668647301797,1.8477590650225735),(-2,0.),(-0.7653668647301795,1.8477590650225735),(0.,0.),(-0.7653668647301795,-1.8477590650225735)]),1e-12)) - self.assertEqual([32,1,7,10,11,12,13,14,15,32,5,3,11,10,16,17,18,19],a.getNodalConnectivity().getValues()) - self.assertEqual([0,9,18], a.getNodalConnectivityIndex().getValues()) - self.assertEqual([1,8,11,1,11,10,1,10,9],b.getNodalConnectivity().getValues()) - self.assertEqual([0,3,6,9],b.getNodalConnectivityIndex().getValues()) - self.assertTrue(a.getCoords()[:8].isEqual(m_circ.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[8:10].isEqual(m_line.getCoords(),1e-12)) - coo_tgt = DataArrayDouble([2.,0.,1.4142135623730951,1.414213562373095,1.2246467991473532e-16,2.,-1.414213562373095,1.4142135623730951,-2.,0.,-1.4142135623730954,-1.414213562373095,-3.6739403974420594e-16,-2.,1.4142135623730947,-1.4142135623730954,0.,3.,0.,-3.,0.,-2.,0.,2.,2.,0.,0.7653668647301797,-1.8477590650225735,0.,0.,0.7653668647301797,1.8477590650225735,-2.,0.,-0.7653668647301795,1.8477590650225735,0.,0.,-0.7653668647301795,-1.8477590650225735]) - self.assertTrue(a.getCoords().isEqualWithoutConsideringStr(coo_tgt,1.0e-12)) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertEqual([0,0],c.getValues()) - self.assertEqual([-1,-1,0,1,-1,-1],d.getValues()) - - def testSwig2Intersect2DMeshWith1DLine11(self): - """ Quad line re-entering a square cell """ - eps = 1.0e-8 - m = MEDCouplingUMesh("box", 2) - m.setCoords(DataArrayDouble([-1., -1., -1., 1., 1., 1., 1., -1.0],4,2)) - c, cI = [NORM_POLYGON, 0, 1, 2, 3], [0, 5] - m.setConnectivity(DataArrayInt(c), DataArrayInt(cI)) - m.checkConsistencyLight() - coords2 = [0., 1.3, -1.3, 0., -0.6, 0.6, 0., -1.3, -0.5, -0.5] - connec2, cI2 = [NORM_SEG3, 0, 1, 2, NORM_SEG3, 1, 3, 4], [0,4,8] - m_line = MEDCouplingUMesh("seg", 1) - m_line.setCoords(DataArrayDouble(coords2, len(coords2)/2, 2)) - m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2)) - a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12)) - self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(-1.,-1.),(-1.,1.),(1.,1.),(1.,-1.),(0.,1.3),(-1.3,0.),(-0.6,0.6),(0.,-1.3),(-0.5,-0.5),(-1.,0.23453685964236054),(-1.,-0.13033276368660177),(-0.2345368596423598,1.),(-0.1303327636866019,-1.),(-0.11489196370692323,1.1481421036683868),(-0.6,0.6),(-1.1481421036683859,0.11489196370692323),(-1.147455889106615,-0.0593103465193594),(-0.5,-0.5),(-0.0593103465193594,-1.147455889106615),(1.,0.),(0.4348336181566991,-1.),(-0.5651663818433009,-1.),(-1.,-0.5651663818433009),(-1.,0.05210204797787939),(-0.6,0.6),(0.3827315701788201,1.),(-0.6172684298211799,1.),(-0.6,0.6),(-1.,0.6172684298211802),(-0.6,0.6),(0.3827315701788201,1.),(1.,0.),(0.4348336181566991,-1.),(-0.5,-0.5),(-1.,0.05210204797787939),(-1.,-0.5651663818433009),(-0.5,-0.5),(-0.5651663818433009,-1.)]),1e-12)) - self.assertEqual([32,9,11,2,3,12,10,29,30,31,32,33,34,32,0,10,12,35,36,37,32,1,11,9,26,27,28],a.getNodalConnectivity().getValues()) - self.assertEqual([0,13,20,27],a.getNodalConnectivityIndex().getValues()) - self.assertEqual([2,4,11,13,2,11,9,14,2,9,5,15,2,5,10,16,2,10,12,17,2,12,7,18],b.getNodalConnectivity().getValues()) - self.assertEqual([0,4,8,12,16,20,24],b.getNodalConnectivityIndex().getValues()) - self.assertTrue(a.getCoords()[:4].isEqual(m.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[4:9].isEqual(m_line.getCoords(),1e-12)) - self.assertTrue(DataArrayInt([0,0,0]).isEqual(c)) - self.assertTrue(DataArrayInt([(-1,-1),(0,2),(-1,-1),(-1,-1),(0,1),(-1,-1)]).isEqual(d)) - pass - - def testSwig2Intersect2DMeshWith1DLine12(self): - """ Two squares one in the other intersected by an horizontal line """ - eps = 1.0e-8 - m = MEDCouplingUMesh("boxbox", 2) - m.setCoords(DataArrayDouble([-0.5,-0.5,-0.5,0.5,0.5,0.5,0.5,-0.5,-0.25,-0.25,-0.25,0.25,0.25,0.25,0.25,-0.25],8,2)) - c = [NORM_POLYGON, 4, 5, 6, 7, NORM_POLYGON, 0, 1, 5, 4, NORM_POLYGON, 1, 2, 3, 0, 4, 7, 6, 5] - cI = [0, 5, 10, 19] - m.setConnectivity(DataArrayInt(c), DataArrayInt(cI)) - m.checkConsistencyLight() - coords2 = [-1., 0.25, 1., 0.25] - connec2, cI2 = [NORM_SEG2, 0, 1], [0,3] - m_line = MEDCouplingUMesh.New("seg", 1) - m_line.setCoords(DataArrayDouble(coords2, len(coords2)/2, 2)) - m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2)) - m_line2 = m_line.deepCopy() - m2 = m.deepCopy() - a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12)) - self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(-0.5,-0.5),(-0.5,0.5),(0.5,0.5),(0.5,-0.5),(-0.25,-0.25),(-0.25,0.25),(0.25,0.25),(0.25,-0.25),(-1.,0.25),(1.,0.25),(-0.5,0.25),(0.5,0.25)]),1e-12)) - self.assertEqual([5,4,5,6,7,5,1,5,10,5,4,0,10,5,5,5,1,2,11,6,5,3,0,4,7,6,11],a.getNodalConnectivity().getValues()) - self.assertEqual([0,5,9,14,20,27],a.getNodalConnectivityIndex().getValues()) - self.assertEqual([1,8,10,1,10,5,1,5,6,1,6,11,1,11,9],b.getNodalConnectivity().getValues()) - self.assertEqual([0,3,6,9,12,15],b.getNodalConnectivityIndex().getValues()) - self.assertTrue(c.isEqual(DataArrayInt([0,1,1,2,2]))) - self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(1,2),(3,0),(3,4),(-1,-1)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine13(self): - """ A square (side length) in a circle intersected by a simple horizontal line """ - import math - eps = 1.0e-8 - m = MEDCouplingUMesh("boxcircle", 2) - sq2 = math.sqrt(2.0) - soth = (sq2+1.0)/2.0 - coo = [2., 0., sq2, sq2, 0., 2., -sq2, sq2, -2., 0., -sq2, -sq2, 0., -2., sq2, -sq2, -1., -1., -1., 1., 1., - 1., 1., -1., -1., 0., 0., 1., 1., 0., 0., -1., -soth, soth, soth,soth] - coo = DataArrayDouble(coo); coo.rearrange(2) - m.setCoords(coo) - c = [NORM_QPOLYG, 8, 9, 10, 11, 12, 13, 14, 15, NORM_QPOLYG, 3, 1, 10, 9, 2, 17, 13, 16, NORM_QPOLYG, 1, 7, 5, 3, 9, 8, 11, 10, 0, 6, 4, 16, 12, 15, 14, 17] - cI = [0, 9, 18, 35] - m.setConnectivity(DataArrayInt(c), DataArrayInt(cI)) - m.checkConsistencyLight() - coords2 = [-2., 1., 2., 1.0] - connec2, cI2 = [NORM_SEG2, 0, 1], [0,3] - m_line = MEDCouplingUMesh("seg", 1) - m_line.setCoords(DataArrayDouble(coords2, len(coords2)/2, 2)) - m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2)) - a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12)) - self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(2.,0.),(1.4142135623730951,1.4142135623730951),(0.,2.),(-1.4142135623730951,1.4142135623730951),(-2.,0.),(-1.4142135623730951,-1.4142135623730951),(0.,-2.),(1.4142135623730951,-1.4142135623730951),(-1.,-1.),(-1.,1.),(1.,1.),(1.,-1.),(-1.,0.),(0.,1.),(1.,0.),(0.,-1.),(-1.2071067811865475,1.2071067811865475),(1.2071067811865475,1.2071067811865475),(-2.,1.),(2.,1.),(1.7320508075688772,1.),(-1.7320508075688772,1.),(-1.2071067811865475,1.2071067811865475),(-1.3660254037844386,1.),(-1.58670668058247,1.2175228580174415),(0.,-1.),(1.,0.),(1.2071067811865475,1.2071067811865475),(1.5867066805824703,1.2175228580174413),(1.9828897227476205,-0.26105238444010315),(0.,-2.),(-1.9828897227476205,-0.2610523844401032),(-1.3660254037844386,1.),(-1.,0.),(1.5867066805824703,1.2175228580174413),(1.3660254037844386,1.),(1.2071067811865475,1.2071067811865475),(0.,-2.),(-1.9828897227476205,-0.2610523844401032),(-1.3660254037844386,1.),(-1.,0.),(0.,-1.),(1.,0.),(1.3660254037844386,1.),(1.9828897227476205,-0.26105238444010315)]),1e-12)) - self.assertEqual([32,8,9,10,11,12,13,14,15,32,3,1,10,9,2,17,13,16,32,3,9,21,22,23,24,32,1,20,10,34,35,36,32,7,5,21,9,8,11,10,20,37,38,39,40,41,42,43,44],a.getNodalConnectivity().getValues()) - self.assertEqual([0,9,18,25,32,49],a.getNodalConnectivityIndex().getValues()) - self.assertEqual([1,18,21,1,21,9,1,9,10,1,10,20,1,20,19],b.getNodalConnectivity().getValues()) - self.assertEqual([0,3,6,9,12,15],b.getNodalConnectivityIndex().getValues()) - self.assertTrue(c.isEqual(DataArrayInt([0,1,2,2,2]))) - self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(2,4),(1,0),(3,4),(-1,-1)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine14(self): - """ A circle in a circle intersected by a simple horizontal line, not tangent to the circles """ - eps = 1.0e-8 - m = MEDCouplingUMesh("boxcircle", 2) - coo = [2.,0.,1.4142135623730951,1.414213562373095,0.,2.,-1.414213562373095,1.4142135623730951,-2.,0.,-1.4142135623730954,-1.414213562373095,0.,-2., - 1.4142135623730947,-1.4142135623730954,1.,0.,0.7071067811865476,0.7071067811865475,0.,1.,-0.7071067811865475,0.7071067811865476,-1.,0.,-0.7071067811865477,-0.7071067811865475, - 0.,-1.,0.7071067811865474,-0.7071067811865477,1.060660171779821,-1.0606601717798214,-1.0606601717798214,-1.0606601717798212] - coo = DataArrayDouble(coo); coo.rearrange(2) - m.setCoords(coo) - c = [NORM_QPOLYG, 15, 13, 11, 9, 14, 12, 10, 8, NORM_QPOLYG, 7, 5, 13, 15, 6, 17, 14, 16, NORM_QPOLYG, 5, 3, 1, 7, 15, 9, 11, 13, 4, 2, 0, 16, 8, 10, 12, 17] - cI = [0, 9, 18, 35] - m.setConnectivity(DataArrayInt(c), DataArrayInt(cI)) - m.checkConsistencyLight() - coords2 = [-2., 0., 2., 0.] - connec2, cI2 = [NORM_SEG2, 0, 1], [0,3] - m_line = MEDCouplingUMesh.New("seg", 1) - m_line.setCoords(DataArrayDouble(coords2, len(coords2)/2, 2)) - m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2)) - a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12)) - self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(2.,0.),(1.4142135623730951,1.414213562373095),(0.,2.),(-1.414213562373095,1.4142135623730951),(-2.,0.),(-1.4142135623730954,-1.414213562373095),(0.,-2.),(1.4142135623730947,-1.4142135623730954),(1.,0.),(0.7071067811865476,0.7071067811865475),(0.,1.),(-0.7071067811865475,0.7071067811865476),(-1.,0.),(-0.7071067811865477,-0.7071067811865475),(0.,-1.),(0.7071067811865474,-0.7071067811865477),(1.060660171779821,-1.0606601717798214),(-1.0606601717798214,-1.0606601717798212),(-2.,0.),(2.,0.),(-1.,0.),(1.,0.),(0.,2.),(1.8477590650225735,0.7653668647301795),(1.8477590650225735,-0.7653668647301797),(1.060660171779821,-1.0606601717798214),(0.9238795325112867,-0.38268343236508984),(0.9238795325112867,0.3826834323650897),(0.,1.),(-0.9238795325112867,0.3826834323650896),(-1.5,0.),(-1.8477590650225735,0.7653668647301792),(-1.0606601717798214,-1.0606601717798212),(-1.8477590650225733,-0.7653668647301799),(-1.5,0.),(-0.9238795325112866,-0.38268343236508995),(0.,1.),(-0.9238795325112867,0.3826834323650896),(-1.5,0.),(-1.8477590650225735,0.7653668647301792),(0.,2.),(1.8477590650225735,0.7653668647301795),(1.5,0.),(0.9238795325112867,0.3826834323650897),(1.060660171779821,-1.0606601717798214),(0.9238795325112867,-0.38268343236508984),(1.5,0.),(1.8477590650225735,-0.7653668647301797),(0.,1.),(0.9238795325112867,0.3826834323650897),(0.,0.),(-0.9238795325112867,0.3826834323650896),(0.,-1.),(-0.9238795325112866,-0.38268343236508995),(0.,0.),(0.9238795325112867,-0.38268343236508984)]),1e-12)) - self.assertEqual([32,7,5,13,15,6,17,14,16,32,9,11,20,18,3,1,19,21,36,37,38,39,40,41,42,43,32,7,15,21,19,44,45,46,47,32,13,5,18,20,32,33,34,35,32,11,9,21,20,48,49,50,51,32,15,13,20,21,52,53,54,55],a.getNodalConnectivity().getValues()) - self.assertEqual([0,9,26,35,44,53,62],a.getNodalConnectivityIndex().getValues()) - self.assertEqual([1,18,20,1,20,21,1,21,19],b.getNodalConnectivity().getValues()) - self.assertEqual([0,3,6,9],b.getNodalConnectivityIndex().getValues()) - self.assertTrue(c.isEqual(DataArrayInt([1,2,2,2,0,0]))) - self.assertTrue(d.isEqual(DataArrayInt([(1,3),(4,5),(1,2)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine15(self): - """ Same as testSwig2Intersect2DMeshWith1DLine13 except that the line is colinear AND splits on of the common edge of 2D mesh.""" - import math - eps = 1.0e-8 - m = MEDCouplingUMesh("boxcircle", 2) - sq2 = math.sqrt(2.0) - soth = (sq2+1.0)/2.0 - coo = [2., 0., sq2, sq2, 0., 2., -sq2, sq2, -2., 0., -sq2, -sq2, 0., -2., sq2, -sq2, -1., -1., -1., 1., 1., - 1., 1., -1., -1., 0., 0., 1., 1., 0., 0., -1., -soth, soth, soth,soth] - coo = DataArrayDouble(coo); coo.rearrange(2) - m.setCoords(coo) - c = [NORM_QPOLYG, 8, 9, 10, 11, 12, 13, 14, 15, NORM_QPOLYG, 3, 1, 10, 9, 2, 17, 13, 16, NORM_QPOLYG, 1, 7, 5, 3, 9, 8, 11, 10, 0, 6, 4, 16, 12, 15, 14, 17] - cI = [0, 9, 18, 35] - m.setConnectivity(DataArrayInt(c), DataArrayInt(cI)) - m.checkConsistencyLight() - coords2 = [(-2., 1.),(2.,1.),(0.,1)] - connec2, cI2 = [NORM_SEG2, 0, 2, NORM_SEG2, 2, 1], [0,3,6] - m_line = MEDCouplingUMesh("seg", 1) - m_line.setCoords(DataArrayDouble(coords2)) - m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2)) - a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12)) - self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(2.,0.),(1.4142135623730951,1.4142135623730951),(0.,2.),(-1.4142135623730951,1.4142135623730951),(-2.,0.),(-1.4142135623730951,-1.4142135623730951),(0.,-2.),(1.4142135623730951,-1.4142135623730951),(-1.,-1.),(-1.,1.),(1.,1.),(1.,-1.),(-1.,0.),(0.,1.),(1.,0.),(0.,-1.),(-1.2071067811865475,1.2071067811865475),(1.2071067811865475,1.2071067811865475),(-2.,1.),(2.,1.),(0.,1.),(1.7320508075688776,1.),(-1.7320508075688776,1.),(-0.5,1.),(0.5,1.),(0.5,1.),(-0.5,1.),(-1.2071067811865475,1.2071067811865475),(-1.3660254037844388,1.),(-1.58670668058247,1.2175228580174415),(0.,-1.),(1.,0.),(1.2071067811865475,1.2071067811865475),(1.5867066805824703,1.2175228580174413),(1.9828897227476205,-0.26105238444010315),(0.,-2.),(-1.9828897227476205,-0.2610523844401032),(-1.3660254037844388,1.),(-1.,0.),(1.5867066805824703,1.2175228580174413),(1.3660254037844388,1.),(1.2071067811865475,1.2071067811865475),(0.,-2.),(-1.9828897227476205,-0.2610523844401032),(-1.3660254037844388,1.),(-1.,0.),(0.,-1.),(1.,0.),(1.3660254037844388,1.),(1.9828897227476205,-0.26105238444010315)]),1e-12)) - self.assertEqual([32,8,9,20,10,11,12,23,24,14,15,32,3,1,10,20,9,2,17,25,26,16,32,3,9,22,27,28,29,32,1,21,10,39,40,41,32,7,5,22,9,8,11,10,21,42,43,44,45,46,47,48,49],a.getNodalConnectivity().getValues()) - self.assertEqual([0,11,22,29,36,53],a.getNodalConnectivityIndex().getValues()) - self.assertEqual([1,18,22,1,22,9,1,9,20,1,20,10,1,10,21,1,21,19],b.getNodalConnectivity().getValues()) - self.assertEqual([0,3,6,9,12,15,18],b.getNodalConnectivityIndex().getValues()) - self.assertTrue(c.isEqual(DataArrayInt([0,1,2,2,2]))) - self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(2,4),(1,0),(1,0),(3,4),(-1,-1)]))) - pass - - def testSwig2Intersect2DMeshWith1DLine16(self): - """ Same than testSwig2Intersect2DMeshWith1DLine13 except it is a vertical line. Non regression test.""" - import math - eps = 1.0e-8 - m = MEDCouplingUMesh("boxcircle", 2) - sq2 = math.sqrt(2.0) - soth = (sq2+1.0)/2.0 - coo = [2., 0., sq2, sq2, 0., 2., -sq2, sq2, -2., 0., -sq2, -sq2, 0., -2., sq2, -sq2, -1., -1., -1., 1., 1., - 1., 1., -1., -1., 0., 0., 1., 1., 0., 0., -1., -soth, soth, soth,soth] - coo = DataArrayDouble(coo); coo.rearrange(2) - m.setCoords(coo) - c = [NORM_QPOLYG, 8, 9, 10, 11, 12, 13, 14, 15, NORM_QPOLYG, 3, 1, 10, 9, 2, 17, 13, 16, NORM_QPOLYG, 1, 7, 5, 3, 9, 8, 11, 10, 0, 6, 4, 16, 12, 15, 14, 17] - cI = [0, 9, 18, 35] - m.setConnectivity(DataArrayInt(c), DataArrayInt(cI)) - m.checkConsistencyLight() - coords2 = [1., 2., 1., -2.] - connec2, cI2 = [NORM_SEG2, 0, 1], [0,3] - m_line = MEDCouplingUMesh("seg", 1) - m_line.setCoords(DataArrayDouble(coords2, len(coords2)/2, 2)) - m_line.setConnectivity(DataArrayInt(connec2), DataArrayInt(cI2)) - a, b, c, d = MEDCouplingUMesh.Intersect2DMeshWith1DLine(m, m_line, eps) - self.assertTrue(a.getCoords().getHiddenCppPointer()==b.getCoords().getHiddenCppPointer()) - self.assertTrue(a.getCoords()[:m.getNumberOfNodes()].isEqual(m.getCoords(),1e-12)) - self.assertTrue(a.getCoords()[m.getNumberOfNodes():m.getNumberOfNodes()+m_line.getNumberOfNodes()].isEqual(m_line.getCoords(),1e-12)) - self.assertTrue(a.getCoords().isEqual(DataArrayDouble([(2., 0.),(1.4142135623730951,1.4142135623730951),(0.,2.),(-1.4142135623730951,1.4142135623730951),(-2.,0.),(-1.4142135623730951,-1.4142135623730951),(0.,-2.),(1.4142135623730951,-1.4142135623730951),(-1.,-1.),(-1.,1.),(1.,1.),(1.,-1.),(-1.,0.),(0.,1.),(1.,0.),(0.,-1.),(-1.2071067811865475,1.2071067811865475),(1.2071067811865475,1.2071067811865475),(1.,2.),(1.,-2.),(1.,1.7320508075688772),(1.,-1.7320508075688772),(1.2071067811865475,1.2071067811865475),(1.,1.3660254037844386),(1.217522858017441,1.5867066805824703),(-1.2071067811865475,1.2071067811865475),(-0.2610523844401028,1.9828897227476208),(1.,1.3660254037844386),(0.,1.),(1.2071067811865475,1.2071067811865475),(2.,0.),(1.217522858017441,-1.5867066805824703),(1.,-1.3660254037844386),(1.,0.),(-2.,0.),(-1.2071067811865475,1.2071067811865475),(-1.,0.),(0.,-1.),(1.,-1.3660254037844386),(-0.2610523844401028,-1.9828897227476208)]),1e-12)) - self.assertEqual([32,8,9,10,11,12,13,14,15,32,1,10,20,22,23,24,32,9,3,20,10,25,26,27,28,32,10,1,7,21,11,29,30,31,32,33,32,5,3,9,8,11,21,34,35,36,37,38,39],a.getNodalConnectivity().getValues()) - self.assertEqual([0,9,16,25,36,49],a.getNodalConnectivityIndex().getValues()) - self.assertEqual([1,18,20,1,20,10,1,10,11,1,11,21,1,21,19],b.getNodalConnectivity().getValues()) - self.assertEqual([0,3,6,9,12,15],b.getNodalConnectivityIndex().getValues()) - self.assertTrue(c.isEqual(DataArrayInt([0,1,1,2,2]))) - self.assertTrue(d.isEqual(DataArrayInt([(-1,-1),(1,2),(3,0),(3,4),(-1,-1)]))) - pass - def testOrderConsecutiveCells1D1(self): """A line in several unconnected pieces:""" m2 = MEDCouplingUMesh.New("bla", 1) @@ -3628,25 +3129,25 @@ class MEDCouplingBasicsTest5(unittest.TestCase): NORM_SEG2,11,12,NORM_SEG2,12,13, NORM_SEG2,14,15]) cI = DataArrayInt([0,3,7,10,14,18,21,24,27,30]) - coords2 = DataArrayDouble([float(i) for i in range(32)], 16,2) + coords2 = DataArrayDouble([float(i) for i in range(32)], 16, 2) m2.setCoords(coords2); m2.setConnectivity(c, cI); m2.checkConsistency(1.0e-8); - + # Shuffle a bit :-) m2.renumberCells(DataArrayInt([0,3,6,8,1,4,7,5,2]), True); res = m2.orderConsecutiveCells1D() expRes = [0,3,6,8,1,4,2,7,5] self.assertEqual(m2.getNumberOfCells(),res.getNumberOfTuples()) self.assertEqual(expRes, res.getValues()) - + # A closed line (should also work) m3 = MEDCouplingUMesh.New("bla3", 1) conn3A = DataArrayInt([NORM_SEG2,0,1,NORM_SEG3,1,3,2, NORM_SEG2,3,0]) coord3 = coords2[0:5] c.reAlloc(10) cI.reAlloc(4) - + m3.setCoords(coord3) m3.setConnectivity(conn3A, cI) m3.checkConsistency(1.0e-8) @@ -3802,7 +3303,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): def testSwig2DAIGetIdsStrictlyNegative1(self): d=DataArrayInt([4,-5,-1,0,3,99,-7]) - self.assertTrue(d.findIdsStricltyNegative().isEqual(DataArrayInt([1,2,6]))) + self.assertTrue(d.findIdsStrictlyNegative().isEqual(DataArrayInt([1,2,6]))) pass def testSwig2DAIReplaceOneValByInThis1(self): @@ -3851,7 +3352,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): li=[] liExp3D=[(0,0,0),(1,0,0),(2,0,0),(3,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(0,0,1),(1,0,1),(2,0,1),(3,0,1),(0,1,1),(1,1,1),(2,1,1),(3,1,1),(0,2,1),(1,2,1),(2,2,1),(3,2,1)] self.assertEqual(24,m.getNumberOfCells()) - for i in xrange(m.getNumberOfCells()): + for i in range(m.getNumberOfCells()): li.append(m.getLocationFromCellId(i)) pass self.assertEqual(liExp3D,li) @@ -3864,7 +3365,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): li=[] liExp2D=[(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1),(0,2),(1,2),(2,2),(3,2)] self.assertEqual(12,m.getNumberOfCells()) - for i in xrange(m.getNumberOfCells()): + for i in range(m.getNumberOfCells()): li.append(m.getLocationFromCellId(i)) pass self.assertEqual(liExp2D,li) @@ -3874,7 +3375,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): arrX=DataArrayDouble(5) ; arrX.iota() m=MEDCouplingCMesh() ; m.setCoords(arrX) self.assertEqual(4,m.getNumberOfCells()) - for i in xrange(m.getNumberOfCells()): + for i in range(m.getNumberOfCells()): self.assertEqual((i,),m.getLocationFromCellId(i)) pass self.assertRaises(InterpKernelException,m.getLocationFromCellId,4) @@ -3890,7 +3391,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): li=[] liExp3D=[(0,0,0),(1,0,0),(2,0,0),(3,0,0),(4,0,0),(0,1,0),(1,1,0),(2,1,0),(3,1,0),(4,1,0),(0,2,0),(1,2,0),(2,2,0),(3,2,0),(4,2,0),(0,3,0),(1,3,0),(2,3,0),(3,3,0),(4,3,0),(0,0,1),(1,0,1),(2,0,1),(3,0,1),(4,0,1),(0,1,1),(1,1,1),(2,1,1),(3,1,1),(4,1,1),(0,2,1),(1,2,1),(2,2,1),(3,2,1),(4,2,1),(0,3,1),(1,3,1),(2,3,1),(3,3,1),(4,3,1),(0,0,2),(1,0,2),(2,0,2),(3,0,2),(4,0,2),(0,1,2),(1,1,2),(2,1,2),(3,1,2),(4,1,2),(0,2,2),(1,2,2),(2,2,2),(3,2,2),(4,2,2),(0,3,2),(1,3,2),(2,3,2),(3,3,2),(4,3,2)] self.assertEqual(60,m.getNumberOfNodes()) - for i in xrange(m.getNumberOfNodes()): + for i in range(m.getNumberOfNodes()): li.append(m.getLocationFromNodeId(i)) pass self.assertEqual(liExp3D,li) @@ -3903,7 +3404,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): li=[] liExp2D=[(0,0),(1,0),(2,0),(3,0),(4,0),(0,1),(1,1),(2,1),(3,1),(4,1),(0,2),(1,2),(2,2),(3,2),(4,2),(0,3),(1,3),(2,3),(3,3),(4,3)] self.assertEqual(20,m.getNumberOfNodes()) - for i in xrange(m.getNumberOfNodes()): + for i in range(m.getNumberOfNodes()): li.append(m.getLocationFromNodeId(i)) pass self.assertEqual(liExp2D,li) @@ -3913,7 +3414,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): arrX=DataArrayDouble(5) ; arrX.iota() m=MEDCouplingCMesh() ; m.setCoords(arrX) self.assertEqual(5,m.getNumberOfNodes()) - for i in xrange(m.getNumberOfNodes()): + for i in range(m.getNumberOfNodes()): self.assertEqual((i,),m.getLocationFromNodeId(i)) pass self.assertRaises(InterpKernelException,m.getLocationFromCellId,5) @@ -3931,7 +3432,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong() self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong() self.assertEqual(st1,st2) - self.assertIn(len(st2),xrange(0,1000)) # no more than 1000 characters + self.assertIn(len(st2), list(range(0, 1000))) # no more than 1000 characters ## Now for DataArrayInt d=DataArrayInt(2000) ; d.iota() ; d.rearrange(2) st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong() @@ -3942,7 +3443,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): st0=d.repr() ; st1=str(d) ; st2=d.reprNotTooLong() self.assertNotEqual(st0,st1) # 1001 tuples ( > 1000) -> str(d)==d.reprNotTooLong() self.assertEqual(st1,st2) - self.assertIn(len(st2),xrange(0,1000)) # no more than 1000 characters + self.assertIn(len(st2), list(range(0, 1000))) # no more than 1000 characters pass def testExtrudedMeshWithoutZipCoords1(self): @@ -4016,8 +3517,8 @@ class MEDCouplingBasicsTest5(unittest.TestCase): coo=DataArrayDouble([(0,2),(2,0),(6,4),(4,9)]) m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo) exp3=sqrt(85.) - for delta in xrange(4): - c=[(elt+delta)%4 for elt in xrange(4)] + for delta in range(4): + c = [(elt + delta) % 4 for elt in range(4)] m.setNodalConnectivity(DataArrayInt(c)) self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12) m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0) @@ -4034,8 +3535,8 @@ class MEDCouplingBasicsTest5(unittest.TestCase): # QUAD4 - spacedim = 3 coo=DataArrayDouble([(0.26570992384234871,2.0405889913271817,-0.079134238105786903),(2.3739976619218064,0.15779148692781009,0.021842842914139737),(6.1207841448393197,4.3755532938679655,0.43666375769970678),(3.8363255342943359,9.2521096041694229,0.41551170895942313)]) m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.setCoords(coo) - for delta in xrange(4): - c=[(elt+delta)%4 for elt in xrange(4)] + for delta in range(4): + c = [(elt + delta) % 4 for elt in range(4)] m.setNodalConnectivity(DataArrayInt(c)) self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp3,12) m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0) @@ -4055,8 +3556,8 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m=MEDCoupling1SGTUMesh("mesh",NORM_PENTA6) ; m.setCoords(coo) exp4=2.5041256256889888 self.assertAlmostEqual(exp4,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter - for delta in xrange(3): - c=[(elt+delta)%3 for elt in xrange(3)] + for delta in range(3): + c = [(elt + delta) % 3 for elt in range(3)] c+=[elt+3 for elt in c] m.setNodalConnectivity(DataArrayInt(c)) self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp4,12) @@ -4073,8 +3574,8 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m=MEDCoupling1SGTUMesh("mesh",NORM_HEXA8) ; m.setCoords(coo) exp5=2.5366409441884215 self.assertAlmostEqual(exp5,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter - for delta in xrange(4): - c=[(elt+delta)%4 for elt in xrange(4)] + for delta in range(4): + c = [(elt + delta) % 4 for elt in range(4)] c+=[elt+4 for elt in c] m.setNodalConnectivity(DataArrayInt(c)) self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12) @@ -4085,14 +3586,14 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp5,12) m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0) self.assertAlmostEqual(m2.computeDiameterField().getArray()[0],exp5,12) - # PYRA5 (1) 5th node is further + # PYRA5 (1) 5th node is further # noise of coo=DataArrayDouble([(0,0,0),(1,0,0),(1,1,0),(0,1,0),(0.5,0.5,2)]) + rotation([0.7,-1.2,0.6],[-4,-1,10],0.3) coo=DataArrayDouble([(-0.31638393672228626,-0.3157865246451914,-0.12555467233075002),(0.7281379795666488,0.03836511217237115,-0.08431662762197323),(0.4757967840735147,0.8798897996143908,-0.2680890320119049),(-0.5386339871809047,0.5933159894201252,-0.2975311238319419),(0.012042592988768974,0.534282135495012,1.7859521682027926)]) m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo) exp6=2.1558368027391386 self.assertAlmostEqual(exp6,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter - for delta in xrange(4): - c=[(elt+delta)%4 for elt in xrange(4)] + for delta in range(4): + c = [(elt + delta) % 4 for elt in range(4)] c+=[4] m.setNodalConnectivity(DataArrayInt(c)) self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp6,12) @@ -4105,8 +3606,8 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m=MEDCoupling1SGTUMesh("mesh",NORM_PYRA5) ; m.setCoords(coo) exp7=1.4413563787228953 self.assertAlmostEqual(exp7,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter - for delta in xrange(4): - c=[(elt+delta)%4 for elt in xrange(4)] + for delta in range(4): + c = [(elt + delta) % 4 for elt in range(4)] c+=[4] m.setNodalConnectivity(DataArrayInt(c)) self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp7,12) @@ -4120,7 +3621,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): exp8=1.7131322579364157 self.assertAlmostEqual(exp8,coo.buildEuclidianDistanceDenseMatrix().getMaxValue()[0],12)# <- the definition of diameter for c in [[0,1,2,3],[0,3,2,1],[0,1,3,2],[0,2,3,1],[0,3,1,2],[0,2,1,3]]: - for i in xrange(4): + for i in range(4): m.setNodalConnectivity(DataArrayInt([(elt+i)%4 for elt in c])) self.assertAlmostEqual(m.computeDiameterField().getArray()[0],exp8,12) m2=m.buildUnstructured() ; m2.convertLinearCellsToQuadratic(0) @@ -4165,7 +3666,103 @@ class MEDCouplingBasicsTest5(unittest.TestCase): self.assertEqual( 6, sla3.getLength() ) pass - + + def testMEDCouplingSkyLineArrayThreeLevels(self): + # [[28,1,4]] , [[2,35,8], [9,10,1,12]] + superi = DataArrayInt([ 0,1,3 ]) + index = DataArrayInt ([ 0,3,6,10 ]) + value = DataArrayInt ([ 28,1,4,2,35,8,9,10,1,12 ]) + + sla0 = MEDCouplingSkyLineArray() + self.assertEqual( -1, sla0.getSuperNumberOf() ) + self.assertEqual( -1, sla0.getNumberOf() ) + self.assertEqual( 0, sla0.getLength() ) + sla0.set3( superi.deepCopy(), index.deepCopy(), value.deepCopy() ) + self.assertTrue( superi.isEqual( sla0.getSuperIndexArray() )) + + pack = sla0.getSimplePackSafe(2) + self.assertEqual([9,10,1,12], pack) + ids = sla0.findPackIds([0,1], [9,10,1,12]) + self.assertEqual([-1,1], ids) + + sla0.deletePack(1, 1) + si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray() + self.assertEqual([28,1,4,2,35,8], val.getValues()) + self.assertEqual([0,3,6], idx.getValues()) + self.assertEqual([0,1,2], si.getValues()) + + sla0.pushBackPack(0, [3,2,1,0]) + si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray() + self.assertEqual([0,2,3], si.getValues()) + self.assertEqual([0,3,7,10], idx.getValues()) + self.assertEqual([28,1,4,3,2,1,0, 2,35,8], val.getValues()) + + # Build connectivity from POLYHED connectivity + cI = [0,16,41] + c = [NORM_POLYHED, 1,2,3,-1, 2,3,4,-1, 3,4,5,-1, 4,5,6, + NORM_POLYHED, 7,8,9,10,-1, 9,10,11,12,-1, 3,4,5,6,-1, 5,6,7,8,-1, 9,10,11,12] + sla0 = MEDCouplingSkyLineArray.BuildFromPolyhedronConn(DataArrayInt(c), DataArrayInt(cI)) + si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray() + self.assertEqual([0,4,9], si.getValues()) + self.assertEqual([0,3,6,9,12,16,20,24,28,32], idx.getValues()) + self.assertEqual([1,2,3, 2,3,4, 3,4,5, 4,5,6, + 7,8,9,10, 9,10,11,12, 3,4,5,6, 5,6,7,8, 9,10,11,12], val.getValues()) + c1, cI1 = sla0.convertToPolyhedronConn() + self.assertEqual(c1.getValues(), c) + self.assertEqual(cI1.getValues(), cI) + pass + + def testMEDCouplingSkyLineArrayThreeLevels2(self): + si = [0, 9, 15, 21] + siRef = [0, 9, 16, 22] + idx = [0,4,8,12,16,20,23,26,29, 32,36,40,44,48,52, 56,60,64,68,72,76,80] + c = [1,0,2,3, 5,7,6,4, 1,5,4,0, 0,4,6,2, 2,6,7,3, 3,7,8, 7,5,8, 5,1,8, 1,3,8, + 9,1,3,10, 11,12,7,5, 9,11,5,1, 1,5,7,3, 3,7,12,10, 10,12,11,9, + 11,5,7,12, 14,16,15,13, 11,14,13,5, 5,13,15,7, 7,15,16,12, 12,16,14,11] + idxRef = [0,4,8,12,16,20,23,26,29,32,36,40,44,48,52,55,58, 62, 66, 70, 74, 78, 82 ] + cRef = [1,0,2,3, 5,7,6,4, 1,5,4,0, 0,4,6,2, 2,6,7,3, 3,7,8, 7,5,8, 5,1,8, 1,3,8, + 9,1,3,10, 11,12,7,5, 9,11,5,1, 3,7,12,10, 10,12,11,9, 3,7,8, 7,5,8, + 11,5,7,12, 14,16,15,13, 11,14,13,5, 5,13,15,7, 7,15,16,12, 12,16,14,11] + sla0 = MEDCouplingSkyLineArray() + sla0.set3( DataArrayInt(si), DataArrayInt(idx), DataArrayInt(c) ) + ids = sla0.findPackIds([1], [1,5,7,3]) + sla0.deletePack(1, ids[0]) + sla0.pushBackPack(1, [3,7,8]) + sla0.pushBackPack(1, [7,5,8]) + si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray() + self.assertEqual(siRef, si.getValues()) + self.assertEqual(idxRef, idx.getValues()) + self.assertEqual(cRef, val.getValues()) + + idxRef2 = [0,4,8,12,16,20,23,26,29,32,36,40,42,46,50,53,56, 60, 64, 68, 72, 76, 80 ] + cRef2 = [1,0,2,3, 5,7,6,4, 1,5,4,0, 0,4,6,2, 2,6,7,3, 3,7,8, 7,5,8, 5,1,8, 1,3,8, + 9,1,3,10, 11,12,7,5, 300,300, 3,7,12,10, 10,12,11,9, 3,7,8, 7,5,8, + 11,5,7,12, 14,16,15,13, 11,14,13,5, 5,13,15,7, 7,15,16,12, 12,16,14,11] + sla0.replacePack(1,2, [300,300]) + si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray() + self.assertEqual(siRef, si.getValues()) + self.assertEqual(idxRef2, idx.getValues()) + self.assertEqual(cRef2, val.getValues()) + + sla0.replacePack(1,2, [9,11,5,1]) + si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray() + self.assertEqual(siRef, si.getValues()) + self.assertEqual(idxRef, idx.getValues()) + self.assertEqual(cRef, val.getValues()) + + sla0.replaceSimplePack(11, [300,300]) # 11 is the abs index of pack (superIdx=1,idx=2) + si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray() + self.assertEqual(siRef, si.getValues()) + self.assertEqual(idxRef2, idx.getValues()) + self.assertEqual(cRef2, val.getValues()) + + sla0.replaceSimplePack(11, [9,11,5,1]) # 11 is the abs index of pack (superIdx=1,idx=2) + si, idx, val = sla0.getSuperIndexArray(), sla0.getIndexArray(), sla0.getValuesArray() + self.assertEqual(siRef, si.getValues()) + self.assertEqual(idxRef, idx.getValues()) + self.assertEqual(cRef, val.getValues()) + pass + def testMEDCouplingUMeshgenerateGraph(self): # cartesian mesh 3x3 arr=DataArrayDouble(4) ; arr.iota() @@ -4184,7 +3781,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): 3,6,7, 4,6,7,8, 5,7,8] - self.assertEqual(valRef,list(graph.getValueArray().getValues())); + self.assertEqual(valRef,list(graph.getValuesArray().getValues())); indRef=[0, 3, 7, 10, 14, 19, 23, 26, 30, 33] self.assertEqual(indRef,list(graph.getIndexArray().getValues())); @@ -4288,9 +3885,9 @@ class MEDCouplingBasicsTest5(unittest.TestCase): m.setCoords(arrX,arrX) f=MEDCouplingFieldInt(ON_CELLS) f.setMesh(m) - arr=DataArrayInt(8) ; arr.iota() ;f.setArray(arr) + arr=DataArrayInt32(8) ; arr.iota() ;f.setArray(arr) self.assertRaises(InterpKernelException,f.checkConsistencyLight) - arr=DataArrayInt(9) ; arr.iota() ;f.setArray(arr) + arr=DataArrayInt32(9) ; arr.iota() ;f.setArray(arr) f.checkConsistencyLight() f.setTimeUnit("ms") self.assertEqual(f.getTimeUnit(),"ms") @@ -4338,41 +3935,41 @@ class MEDCouplingBasicsTest5(unittest.TestCase): 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"]) + arr1=DataArrayInt32([(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"]) + arr2=DataArrayInt32([(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.)) + 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.)) + 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.)) + self.assertTrue(f1.isEqual(f2,1e-12,0)) # f1.setName("F1") - self.assertTrue(not f1.isEqual(f2,1e-12,0.)) + self.assertTrue(not f1.isEqual(f2,1e-12,0)) f1.setName("f1") - self.assertTrue(f1.isEqual(f2,1e-12,0.)) + 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.)) + 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.)) + self.assertTrue(f1.isEqual(f2,1e-12,0)) # f3=f2.deepCopy() - self.assertTrue(f1.isEqual(f3,1e-12,0.)) + 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"]) + arr4=DataArrayInt32([(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) + self.assertEqual(f1.isEqual(f4,1e-12,0),expected) pass pass @@ -4590,7 +4187,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): 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() + arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota() field.setArray(arr) field.checkConsistencyLight() #### @@ -4617,7 +4214,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): 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() + arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota() field.setArray(arr) field.checkConsistencyLight() # @@ -4670,7 +4267,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): 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() + arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota() field.setArray(arr) field.checkConsistencyLight() #### @@ -4698,16 +4295,16 @@ class MEDCouplingBasicsTest5(unittest.TestCase): 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() + 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(),32) + self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),34) self.assertTrue(fieldOnCell.getArray().isEqual(field.getArray(),1e-12)) - meaRef=DataArrayDouble([1.3,1.0,1.1975,1.36,1.4775,0.8,0.865]) + 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) @@ -4718,7 +4315,36 @@ class MEDCouplingBasicsTest5(unittest.TestCase): 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+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 + self.assertEqual(fieldOnCell.getMesh().buildDescendingConnectivity()[0].getNumberOfCells(),2*7+21) + pass + + def testVoronoi3D_8(self): + """More aggressive 3D test. Bug EDF 15094""" + mesh = MEDCouplingUMesh("myMeshForAnthony",3) + coords = [2.20449946892035, 0.0015302058397972198, -0.014025000000000001, 2.20449522028465, 0.00459061457029268, -0.0109750000232271, 2.20449946892035, 0.0015302058397972198, -0.0125000000116135, 2.20577243296484, 0.00153108944037966, -0.0137555135576553, 2.20517315768831, 0.0045920262990614006, -0.010764118475206199, 2.2054749202977, 0.0015308829283677198, -0.012259816016430801, 2.20449787568164, 0.00306041094231961, -0.0125000000116135, 2.20449787568164, 0.00306041094231961, -0.011737500017420301, 2.20449946892035, 0.0015302058397972198, -0.0132625000058068, 2.20513595094259, 0.0015306476400884401, -0.0138902567788277, 2.20483418898648, 0.0045913204346770395, -0.0108695592492167, 2.20498719460902, 0.00153054438408247, -0.0123799080140222, 2.20547332635401, 0.0030617651191343705, -0.012259816016430801, 2.20532457012796, 0.00306155860717217, -0.0115119672458185, 2.20562367663127, 0.0015309861843736902, -0.013007664787043, 2.20582504233773, 0.0045933837758852306, -0.010139577890770399, 2.20642582267143, 0.004594634833691141, -0.009125379014333041, 2.20612543250458, 0.00459400930478819, -0.00963247845255172, 2.2069524110381, 0.004595731395029229, -0.00776049693994639, 2.20668911685476, 0.004595183114360191, -0.00844293797713971, 2.20832419990944, 0.0076643330146060895, -0.0108392857142857, 2.20832419990944, 0.0076643330146060895, -0.008671428571428571, 2.20704504094678, 0.00765989349423635, -0.008671428571428571, 2.20704504094678, 0.00765989349423635, -0.0108392857142857, 2.2062381754171, 0.00459424407928538, -0.00868052596233734, 2.20832419990944, 0.0076643330146060895, -0.00975535714285714, 2.20768462042811, 0.00766211325442122, -0.008671428571428571, 2.20704504094678, 0.00765989349423635, -0.00975535714285714, 2.20768462042811, 0.00766211325442122, -0.0108392857142857, 2.20737554490036, 0.00612882358882901, -0.009982332364309381, 2.20763883863969, 0.00612955462931014, -0.00821596275568748, 2.2066421405633703, 0.00612678727660696, -0.00867597726688296, 2.20643557437203, 0.006126213741329251, -0.0104894318025281, 2.2065952932276, 0.00459498773715731, -0.00822051145114186, 2.20603160887741, 0.00459381392758531, -0.00941005192655387] + da = DataArrayDouble.New(coords,35,3) + mesh.setCoords(da) + mesh.allocateCells() + mesh.insertNextCell(NORM_PENTA15, [0, 2, 1, 3, 5, 4, 8, 7, 6, 14, 13, 12, 9, 11, 10]) + mesh.insertNextCell(NORM_HEXA20, [20, 23, 22, 21, 16, 15, 24, 18, 28, 27, 26, 25, 17, 34, 33, 19, 29, 32, 31, 30]) + mesh.zipCoords() + f=MEDCouplingFieldDouble(ON_GAUSS_PT) + f.setMesh(mesh) + f.setName("myFieldForAnthony") + f.setGaussLocalizationOnCells([0],[-1, 1, 0, -1, 0, 0, -1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, -1, 0.5, 0, -1, 0, 0.5, -1, 0.5, 0.5, 1, 0.5, 0, 1, 0, 0.5, 1, 0.5, 0.5, 0, 1, 0, 0, 0, 0, 0, 0, 1],[-0.774597, 0.333333, 0.333333, -0.774597, 0.470142, 0.470142, -0.774597, 0.0597159, 0.470142, -0.774597, 0.470142, 0.0597159, -0.774597, 0.101287, 0.101287, -0.774597, 0.797427, 0.101287, -0.774597, 0.101287, 0.797427, 0, 0.333333, 0.333333, 0, 0.470142, 0.470142, 0, 0.0597159, 0.470142, 0, 0.470142, 0.0597159, 0, 0.101287, 0.101287, 0, 0.797427, 0.101287, 0, 0.101287, 0.797427, 0.774597, 0.333333, 0.333333, 0.774597, 0.470142, 0.470142, 0.774597, 0.0597159, 0.470142, 0.774597, 0.470142, 0.0597159, 0.774597, 0.101287, 0.101287, 0.774597, 0.797427, 0.101287, 0.774597, 0.101287, 0.797427],[0.0625, 0.0367762, 0.0367762, 0.0367762, 0.0349831, 0.0349831, 0.0349831, 0.1, 0.0588418, 0.0588418, 0.0588418, 0.055973, 0.055973, 0.055973, 0.0625, 0.0367762, 0.0367762, 0.0367762, 0.0349831, 0.0349831, 0.0349831]) + f.setGaussLocalizationOnCells([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, -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(48, 3) + arr[:, 0] = list(range(48)) + arr[:, 1] = 100 + arr[:, 0] + arr[:, 2] = 200 + arr[:, 0] + f.setArray(arr) + fieldOnCell=f.voronoize(1e-12) # hot point + fieldOnCell.checkConsistencyLight() + self.assertEqual(fieldOnCell.getMesh().getNumberOfCells(),48) + self.assertEqual(fieldOnCell.getMesh().getNumberOfNodes(),127) + meaRef=f.getMesh().getMeasureField(True).getArray(); meaRef.rearrange(2); meaRef2 = meaRef.sumPerTuple() + mea=fieldOnCell.getMesh().getMeasureField(True).getArray(); mea.rearrange(48); mea2 = mea.sumPerTuple() + self.assertTrue(mea2.isEqual(meaRef2,1e-9)) pass def testVoronoi3DSurf_1(self): @@ -4745,7 +4371,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): 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() + arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota() field.setArray(arr) field.checkConsistencyLight() ##### @@ -4779,7 +4405,7 @@ class MEDCouplingBasicsTest5(unittest.TestCase): 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() + arr=DataArrayDouble(field.getNumberOfTuplesExpected()) ; arr.iota() field.setArray(arr) field.checkConsistencyLight() #### @@ -4874,7 +4500,339 @@ class MEDCouplingBasicsTest5(unittest.TestCase): 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() + aExp=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]) + bExp=DataArrayInt([0,3,8,13,16,21,29,37,42,47,55,63,68,71,76,81,84]) + self.assertTrue(a.isEqual(aExp)) + self.assertTrue(b.isEqual(bExp)) + m2=m[[1,2,3]] + c,d=m2.computeEnlargedNeighborsOfNodes() + cExp=DataArrayInt([2,5,6,1,3,5,6,7,2,6,7,5,8,9,1,2,4,6,8,9,1,2,3,5,7,2,3,6,4,5,9,4,5,8]) + dExp=DataArrayInt([0,0,3,8,11,14,20,25,28,31,34,34,34,34,34,34,34]) + self.assertTrue(c.isEqual(cExp)) + self.assertTrue(d.isEqual(dExp)) + 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=DataArrayInt32(6) ; arr.iota() ; f.setArray(arr) ; f.checkConsistencyLight() + f_0=f[::2] # test is here + self.assertTrue(f_0.getArray().isEqual(DataArrayInt32([0,2,4]))) + self.assertTrue(f_0.getMesh().isEqual(m[[0,2,4]],1e-12)) + # + f2=MEDCouplingFieldInt(ON_NODES) ; f2.setMesh(m) ; arr=DataArrayInt32(7) ; arr.iota() ; f2.setArray(arr) ; f2.checkConsistencyLight() + f_1=f2[::2] # test is here + self.assertTrue(f_1.getArray().isEqual(DataArrayInt32([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 + + def testSimplifyPolyhedra(self): + mesh = MEDCouplingUMesh('mesh', 3) + coo = DataArrayDouble([(-0.01225,-0.0212176,0.02),(-0.00634107,-0.0236652,0.02),(1.50019e-18,-0.0245,0.02),(0.00634107,-0.0236652,0.02),(0.01225,-0.0212176,0.02),(-0.0153864,-0.02665,0),(-0.00714085,-0.02665,0),(1.63184e-18,-0.02665,0),(0.00714085,-0.02665,0),(0.0153864,-0.02665,0),(-0.00714085,-0.02665,0.0101475),(1.63184e-18,-0.02665,0.013145),(0.00714085,-0.02665,0.0101475),(-0.013,-0.0225167,0.02),(-0.0067293,-0.0251141,0.02),(1.59204e-18,-0.026,0.02),(0.0067293,-0.0251141,0.02),(0.013,-0.0225167,0.02),(-0.0161658,-0.028,0),(-0.00750258,-0.028,0),(1.71451e-18,-0.028,0),(0.00750258,-0.028,0),(0.0161658,-0.028,0),(-0.00750258,-0.028,0.0105625),(1.71451e-18,-0.028,0.0136825),(0.00750258,-0.028,0.0105625)]) + mesh.setCoords(coo) + c = DataArrayInt([31, 13, 14, 15, 16, 17, 4, 3, 2, 1, 0, -1, 18, 5, 6, 7, 8, 9, 22, 21, 20, 19, -1, 19, 23, 18, -1, 23, 14, 13, 18, -1, 20, 24, 23, 19, -1, 24, 15, 14, 23, -1, 21, 25, 24, 20, -1, 25, 16, 15, 24, -1, 22, 25, 21, -1, 22, 17, 16, 25, -1, 9, 4, 17, 22, -1, 8, 12, 9, -1, 12, 3, 4, 9, -1, 7, 11, 12, 8, -1, 11, 2, 3, 12, -1, 6, 10, 11, 7, -1, 10, 1, 2, 11, -1, 5, 10, 6, -1, 5, 0, 1, 10, -1, 18, 13, 0, 5]) + cI = DataArrayInt([0, 108]) + mesh.setConnectivity(c, cI) + mesh.simplifyPolyhedra(1.0e-8) + c, cI = mesh.getNodalConnectivity(), mesh.getNodalConnectivityIndex() + tgt_c = DataArrayInt([31, 23, 18, 19, 20, 21, 22, 25, 24, -1, 12, 9, 8, 7, 6, 5, 10, 11, -1, 13, 14, 15, 16, 17, 4, 3, 2, 1, 0, -1, 18, 5, 6, 7, 8, 9, 22, 21, 20, 19, -1, 23, 14, 13, 18, -1, 24, 15, 14, 23, -1, 25, 16, 15, 24, -1, 22, 17, 16, 25, -1, 9, 4, 17, 22, -1, 12, 3, 4, 9, -1, 11, 2, 3, 12, -1, 10, 1, 2, 11, -1, 5, 0, 1, 10, -1, 18, 13, 0, 5]) + tgt_cI = DataArrayInt([0, 90]) + self.assertEqual(c.getValues(), tgt_c.getValues()) + self.assertEqual(cI.getValues(), tgt_cI.getValues()) + pass + pass if __name__ == '__main__':