X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDLoader%2FSwig%2FMEDLoaderTest3.py;h=71740199dee19b56cd4ebdc5ee38d4d2e985169c;hb=aafcf704892f03308a84407e898d9e8b19496a1c;hp=4099e19e1c7c6aa281860fe1d5021e5a43878c23;hpb=34544def1a53e77e516218f96e6e06a009a435bc;p=tools%2Fmedcoupling.git diff --git a/src/MEDLoader/Swig/MEDLoaderTest3.py b/src/MEDLoader/Swig/MEDLoaderTest3.py index 4099e19e1..71740199d 100644 --- a/src/MEDLoader/Swig/MEDLoaderTest3.py +++ b/src/MEDLoader/Swig/MEDLoaderTest3.py @@ -1,5 +1,5 @@ # -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2019 CEA/DEN, EDF R&D +# Copyright (C) 2007-2022 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 @@ -288,6 +288,7 @@ class MEDLoaderTest3(unittest.TestCase): renumNode=DataArrayInt.New() renumNode.setValues([10,11,12,13,14,15,16,17,18],9,1) mm.setRenumFieldArr(1,renumNode) + mm.computeRevNum() mm.setMeshAtLevel(-1,m1,True); mm.setMeshAtLevel(0,m,True); mm.setMeshAtLevel(-2,m2,True); @@ -409,7 +410,7 @@ class MEDLoaderTest3(unittest.TestCase): m1.setTimeUnit(m.getTimeUnit()) m1.setDescription(m.getDescription()) self.assertTrue(m2.isEqual(m1,1e-12)); - + @WriteInTmpDir def testMEDMesh6(self): self.internalMEDMesh6() @@ -686,7 +687,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertEqual([((3, 0), (0, 18)), ((3, 1), (18, 30)), ((3, 2), (30, 36)), ((4, 0), (36, 42)), ((4, 1), (42, 44)), ((6, 0), (44, 53))],infos) # pass - + @WriteInTmpDir def testMEDFileData1(self): fname="Pyfile29.med" @@ -744,7 +745,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertEqual([(-1,-1,0.0)],d2.getFields().getFieldWithName("f21").getTimeSteps()) self.assertEqual([(-1,-1,0.0)],d2.getFields()["f21"].getTimeSteps()) pass - + @WriteInTmpDir def testMEDField9(self): # first test field profile WR. Full type but with some type missing @@ -784,7 +785,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(pfl.isEqualWithoutConsideringStr(da)) self.assertTrue(vals.isEqual(d,1e-14)) pass - + @WriteInTmpDir def testMEDField10(self): fname="Pyfile31.med" @@ -820,7 +821,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(pfl.isEqualWithoutConsideringStr(da)) self.assertTrue(vals.isEqual(d,1e-14)) pass - + # idem testMEDField9 method except that here testing profile on nodes and not on cells. @WriteInTmpDir def testMEDField11(self): @@ -1127,7 +1128,7 @@ class MEDLoaderTest3(unittest.TestCase): g=mm.getGroupArr(0,"g1") self.assertTrue(g.isEqual(g1)); pass - + # bug detected by gauthier @WriteInTmpDir def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self): @@ -1418,7 +1419,7 @@ class MEDLoaderTest3(unittest.TestCase): refValues2=refValues[:] ; refValues2[7:9]=[1.365,1.47] valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs() self.assertTrue(delta.getMaxValue()[0]<1e-12) - mm.write(fname,2) + mm.write(fname,2) pass @WriteInTmpDir @@ -1431,9 +1432,9 @@ class MEDLoaderTest3(unittest.TestCase): m = m.buildUnstructured(); m.setName("simple") m2 = m.buildDescendingConnectivity()[0] m2.setName(m.getName()) - + # A crack in two non connected parts of the mesh: - grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp") + grpSeg = DataArrayInt([3,19]) ; grpSeg.setName("Grp") mm = MEDFileUMesh.New() mm.setMeshAtLevel(0,m) @@ -1462,7 +1463,7 @@ class MEDLoaderTest3(unittest.TestCase): refValues2=refValues[:] ; refValues2[0] = 1.265; refValues2[6] = 1.105 valsToTest=mm.getMeshAtLevel(0).getMeasureField(True).getArray() ; delta=(valsToTest-refValues2) ; delta.abs() self.assertTrue(delta.getMaxValue()[0]<1e-12) - mm.write(fname,2) + mm.write(fname,2) @WriteInTmpDir def testBuildInnerBoundaryAlongM1Group4(self): @@ -1507,7 +1508,6 @@ class MEDLoaderTest3(unittest.TestCase): self.assertEqual([9,11],mfu.getGroupArr(-1,"group").getValues()) self.assertEqual([23,24],mfu.getGroupArr(-1,"group_dup").getValues()) self.assertEqual([0,1],mfu.getGroupArr(-1,"group2").getValues()) -# mfu.getMeshAtLevel(0).writeVTK("/tmp/mfu_M0.vtu") ref0 =[3, 5, 10, 12, 3, 12, 10, 11, 3, 12, 11, 13] ref1 =[3, 2, 6, 7, 3, 2, 7, 3, 3, 1, 5, 6, 3, 1, 6, 2] self.assertEqual(ref0,mfu.getMeshAtLevel(0)[[3,10,11]].getNodalConnectivity().getValues()) @@ -1522,15 +1522,15 @@ class MEDLoaderTest3(unittest.TestCase): def testBuildInnerBoundary5(self): """ Full 3D test with tetras only. In this case a tri from the group is not duplicated because it is made only of non duplicated nodes. The tri in question is hence not part of the final new "dup" group. """ - coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0, + coo = DataArrayDouble([200.0, 200.0, 0.0, 200.0, 200.0, 200.0, 200.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 200.0, 0.0, 0.0, 200.0, 200.0, 0.0, 0.0, 0.0, 0.0, 0.0, 200.0, 400.0, 200.0, 0.0, 400.0, 200.0, 200.0, 400.0, 0.0, 0.0, 400.0, 0.0, 200.0, 0.0, 100.00000000000016, 200.0, 63.15203310314546, 200.0, 200.0, 134.45205700643342, - 200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546, - 200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538, - 0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483, - 200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082, + 200.0, 200.0, 200.0, 100.00000000000016, 200.0, 63.15203310314546, 0.0, 200.0, 134.45205700643342, 0.0, 200.0, 0.0, 100.00000000000016, 0.0, 63.15203310314546, + 200.0, 0.0, 134.45205700643342, 200.0, 0.0, 200.0, 100.00000000000016, 0.0, 63.15203310314546, 0.0, 0.0, 134.45205700643342, 0.0, 0.0, 200.0, 200.0, 100.02130053568538, + 0.0, 200.0, 100.00938163175135, 200.0, 0.0, 100.02130053568538, 0.0, 0.0, 100.00938163175135, 299.3058739933347, 200.0, 200.0, 400.0, 98.68100542924483, + 200.0, 302.8923433403344, 0.0, 200.0, 302.8923433403344, 200.0, 0.0, 400.0, 100.00000000000016, 0.0, 302.8923433403344, 0.0, 0.0, 400.0, 200.0, 98.55126825835082, 400.0, 0.0, 100.02162286181577, 99.31624553977466, 99.99999998882231, 200.0, 99.31624576683302, 100.00000010178034, 0.0, 99.31624560596512, 200.0, 100.0050761312483, - 99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015, - 100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784, + 99.31624560612883, 0.0, 100.00507613125338, 200.0, 99.99999995813045, 100.00950673487786, 0.0, 99.99999989928207, 100.0041870621175, 301.29063354383015, + 100.0000000093269, 0.0, 301.29063360689975, 0.0, 100.00957769061164, 140.52853868782435, 99.99999963972768, 100.00509135751312, 297.87779091770784, 97.16750463405486, 97.18018457127863], 46, 3) c0 = [14, 45, 31, 21, 42, 14, 37, 38, 20, 44, 14, 39, 36, 41, 44, 14, 5, 25, 12, 13, 14, 38, 36, 44, 41, 14, 21, 20, 24, 44, 14, 38, 25, 41, 19, 14, 37, 38, 44, 41, 14, 16, 27, 39, 41, 14, 21, 45, 26, 40, 14, 39, 37, 44, 41, 14, 14, 15, 24, 44, 14, 25, 38, 41, 13, 14, 27, 18, 6, 22, 14, 38, 36, 41, 13, 14, 44, 14, 15, 36, 14, 44, 23, 39, 26, 14, @@ -1544,7 +1544,7 @@ class MEDLoaderTest3(unittest.TestCase): 21, 26, 33, 3, 14, 35, 45, 32, 29, 14, 29, 34, 9, 28, 14, 15, 45, 24, 40, 14, 29, 45, 28, 15, 14, 21, 24, 45, 40, 14, 24, 15, 1, 28, 14, 35, 45, 29, 30, 14, 26, 15, 30, 2] cI0 = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150, 155, 160, 165, 170, 175, 180, 185, - 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, + 190, 195, 200, 205, 210, 215, 220, 225, 230, 235, 240, 245, 250, 255, 260, 265, 270, 275, 280, 285, 290, 295, 300, 305, 310, 315, 320, 325, 330, 335, 340, 345, 350, 355, 360, 365, 370, 375, 380, 385, 390, 395, 400, 405, 410, 415, 420, 425, 430] m3 = MEDCouplingUMesh("3D", 3) m3.setCoords(coo) @@ -1579,6 +1579,155 @@ class MEDLoaderTest3(unittest.TestCase): m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999) pass + @WriteInTmpDir + def testBuildInnerBoundary6(self): + """ 3D test where the crack has a funny shape with a singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment) + The singular point was wrongly duplicated. + """ + coo = DataArrayDouble([(-1.38778e-17,0.226,0),(-1.38778e-17,-1.38778e-17,0),(0.226,0.226,0),(0.226,-1.38778e-17,0),(0.452,0.226,0),(0.452,-1.38778e-17,0), + (-1.38778e-17,0.452,0),(0.226,0.452,0),(0.452,0.452,0),(-1.38778e-17,0.226,0.25),(0.226,0.226,0.25),(0.226,-1.38778e-17,0.25),(-1.38778e-17,-1.38778e-17,0.25), + (-1.38778e-17,0.226,0.779375),(0.226,0.226,0.779375),(0.226,-1.38778e-17,0.779375),(-1.38778e-17,-1.38778e-17,0.779375),(-1.38778e-17,0.226,1.30875), + (0.226,0.226,1.30875),(0.226,-1.38778e-17,1.30875),(-1.38778e-17,-1.38778e-17,1.30875),(0.452,0.226,0.25),(0.452,-1.38778e-17,0.25),(0.452,0.226,0.779375), + (0.452,-1.38778e-17,0.779375),(0.452,0.226,1.30875),(0.452,-1.38778e-17,1.30875),(-1.38778e-17,0.452,0.25),(0.226,0.452,0.25),(-1.38778e-17,0.452,0.779375), + (0.226,0.452,0.779375),(-1.38778e-17,0.452,1.30875),(0.226,0.452,1.30875),(0.452,0.452,0.25),(0.452,0.452,0.779375),(0.452,0.452,1.30875),(0.146,0.226,0.779375), + (0.146,-1.38778e-17,0.779375),(0.146,0.226,1.30875),(0.146,-1.38778e-17,1.30875),(0.146,0.452,0.779375),(0.146,0.452,1.30875)]) + c0 = [18, 0, 2, 3, 1, 9, 10, 11, 12, 18, 9, 10, 11, 12, 13, 36, 37, 16, 18, 13, 36, 37, 16, 17, 38, 39, 20, 18, 2, 4, 5, 3, 10, 21, 22, 11, 18, 10, 21, 22, 11, 14, 23, 24, 15, + 18, 14, 23, 24, 15, 18, 25, 26, 19, 18, 6, 7, 2, 0, 27, 28, 10, 9, 18, 27, + 28, 10, 9, 29, 40, 36, 13, 18, 29, 40, 36, 13, 31, 41, 38, 17, 18, 7, 8, 4, 2, 28, 33, 21, 10, 18, 28, 33, 21, 10, 30, 34, 23, 14, 18, 30, 34, 23, 14, 32, 35, 25, 18] + cI0 = [0, 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108] + m3 = MEDCouplingUMesh("3D", 3) + m3.setCoords(coo) + m3.setConnectivity(DataArrayInt(c0), DataArrayInt(cI0)) + m3.checkConsistency() + m2, _, _, _, _ = m3.buildDescendingConnectivity() + grpIds = DataArrayInt([7,12,22,27]); grpIds.setName("group") + mfu = MEDFileUMesh() + mfu.setMeshAtLevel(0, m3) + mfu.setMeshAtLevel(-1, m2) + mfu.setGroupsAtLevel(-1, [grpIds]) + nNod = m3.getNumberOfNodes() + nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group") + m3_bis = mfu.getMeshAtLevel(0) + m3_bis.checkConsistency() + m2_bis = mfu.getMeshAtLevel(-1) + m2_bis.checkConsistency() + self.assertEqual(nNod+8, mfu.getNumberOfNodes()) + self.assertEqual(nNod+8, m3_bis.getNumberOfNodes()) + self.assertEqual(nNod+8, m2_bis.getNumberOfNodes()) + self.assertEqual([13, 14, 17, 18, 23, 25, 36, 38], nodesDup.getValues()) + self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues()) + self.assertEqual(set([1, 2, 4, 5]), set(cells1.getValues())) + self.assertEqual(set([7, 8, 10, 11]), set(cells2.getValues())) + self.assertEqual([7, 12, 22, 27],mfu.getGroupArr(-1,"group").getValues()) + self.assertEqual([56, 57, 58, 59],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated + m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity() + m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999) + pass + + @WriteInTmpDir + def testBuildInnerBoundary7(self): + """ 3D test where the crack has another funny shape with another singular point (i.e. two faces of the M1 group are only connected by one point, not a full segment) + Once the crack is inserted, the cells on either side of the crack do not necessarily form a connex spread zone. This was not properly handled either. + """ + m3 = MEDCouplingUMesh('box', 3) + coo = DataArrayDouble([(5,17,0),(0,17,0),(0,12,0),(5,12,0),(15,17,0),(15,12,0),(20,12,0),(20,17,0),(20,2,0),(15,2,0),(15,-3,0),(20,-3,0),(5,-3,0),(5,2,0),(0,-3,0),(0,2,0),(5,17,10),(5,17,20),(5,17,30),(5,17,40),(0,17,10),(0,17,20),(0,17,30),(0,17,40),(0,12,10),(0,12,20),(0,12,30),(0,12,40),(5,12,10),(5,12,20),(5,12,30),(5,12,40),(15,17,10),(15,17,20),(15,17,30),(15,17,40),(15,12,10),(15,12,20),(15,12,30),(15,12,40),(20,12,10),(20,12,20),(20,12,30),(20,12,40),(20,17,10),(20,17,20),(20,17,30),(20,17,40),(20,2,10),(20,2,20),(20,2,30),(20,2,40),(15,2,10),(15,2,20),(15,2,30),(15,2,40),(15,-3,10),(15,-3,20),(15,-3,30),(15,-3,40),(20,-3,10),(20,-3,20),(20,-3,30),(20,-3,40), + (5,-3,10),(5,-3,20),(5,-3,30),(5,-3,40),(5,2,10),(5,2,20),(5,2,30),(5,2,40),(0,-3,10),(0,-3,20),(0,-3,30),(0,-3,40),(0,2,10),(0,2,20),(0,2,30),(0,2,40),(20,8,0),(0,8,0),(20,8,10),(20,8,20),(20,8,30),(20,8,40),(15,8,30),(15,8,40),(5,8,30),(5,8,40),(0,8,10),(0,8,20),(0,8,30),(0,8,40)]) + m3.setCoords(coo) + c = DataArrayInt([31, 0, 3, 2, 1, -1, 16, 20, 24, 28, -1, 0, 16, 28, 3, -1, 3, 28, 24, 2, -1, 2, 24, 20, 1, -1, 1, 20, 16, 0, 31, 16, 28, 24, 20, -1, 17, 21, 25, 29, -1, 16, 17, 29, 28, -1, 28, 29, 25, 24, -1, 24, 25, 21, 20, -1, 20, 21, 17, 16, 31, 17, 29, 25, 21, -1, 18, 22, 26, 30, -1, 17, 18, 30, 29, -1, 29, 30, 26, 25, -1, 25, 26, 22, 21, -1, 21, 22, 18, 17, 31, 18, 30, 26, 22, -1, 19, 23, 27, 31, -1, 18, 19, 31, 30, -1, 30, 31, 27, 26, -1, 26, 27, 23, 22, -1, 22, 23, 19, 18, 31, 4, 5, 3, 0, -1, 32, 16, 28, 36, -1, 4, 32, 36, 5, -1, 5, 36, 28, 3, -1, 3, 28, 16, 0, -1, 0, 16, 32, 4, 31, 32, 36, 28, 16, -1, 33, 17, 29, 37, -1, 32, 33, 37, + 36, -1, 36, 37, 29, 28, -1, 28, 29, 17, 16, -1, 16, 17, 33, 32, 31, 33, 37, 29, 17, -1, 34, 18, 30, 38, -1, 33, 34, 38, 37, -1, 37, 38, 30, 29, -1, 29, 30, 18, 17, -1, 17, 18, 34, 33, 31, 34, 38, 30, 18, -1, 35, 19, 31, 39, -1, 34, 35, 39, 38, -1, 38, 39, 31, 30, -1, 30, 31, 19, 18, -1, 18, 19, 35, 34, 31, 6, 5, 4, 7, -1, 40, 44, 32, 36, -1, 6, 40, 36, 5, -1, 5, 36, 32, 4, -1, 4, 32, 44, 7, -1, 7, 44, 40, 6, 31, 40, 36, 32, 44, -1, 41, 45, 33, 37, -1, 40, 41, 37, 36, -1, 36, 37, 33, 32, -1, 32, 33, 45, 44, -1, 44, 45, 41, 40, 31, 41, 37, 33, 45, -1, 42, 46, 34, 38, -1, 41, 42, 38, 37, -1, 37, 38, 34, 33, -1, 33, 34, 46, 45, -1, 45, 46, 42, 41, 31, + 42, 38, 34, 46, -1, 43, 47, 35, 39, -1, 42, 43, 39, 38, -1, 38, 39, 35, 34, -1, 34, 35, 47, 46, -1, 46, 47, 43, 42, 31, 80, 9, 5, 6, -1, 82, 40, 36, 52, -1, 80, 82, 52, 9, -1, 9, 52, 36, 5, -1, 5, 36, 40, 6, -1, 6, 40, 82, 80, 31, 82, 52, 36, 40, -1, 83, 41, 37, 53, -1, 82, 83, 53, 52, -1, 52, 53, 37, 36, -1, 36, 37, 41, 40, -1, 40, 41, 83, 82, 31, 83, 53, 37, 41, -1, 84, 42, 38, 86, -1, 83, 84, 86, 53, -1, 53, 86, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 84, 83, 31, 84, 86, 38, 42, -1, 85, 43, 39, 87, -1, 84, 85, 87, 86, -1, 86, 87, 39, 38, -1, 38, 39, 43, 42, -1, 42, 43, 85, 84, 31, 10, 9, 8, 11, -1, 56, 60, 48, 52, -1, 10, 56, 52, 9, -1, 9, 52, + 48, 8, -1, 8, 48, 60, 11, -1, 11, 60, 56, 10, 31, 56, 52, + 48, 60, -1, 57, 61, 49, 53, -1, 56, 57, 53, 52, -1, 52, 53, 49, 48, -1, 48, 49, 61, 60, -1, 60, 61, 57, 56, 31, 57, 53, 49, 61, -1, 58, 62, 50, 54, -1, 57, 58, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1, 61, 62, 58, 57, 31, 58, 54, 50, 62, -1, 59, 63, 51, 55, -1, 58, 59, 55, 54, -1, 54, 55, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 59, 58, 31, 12, 13, 9, 10, -1, 64, 56, 52, 68, -1, 12, 64, 68, 13, -1, 13, 68, 52, 9, -1, 9, 52, 56, 10, -1, 10, 56, 64, 12, 31, 64, 68, 52, 56, -1, 65, 57, 53, 69, -1, 64, 65, 69, 68, -1, 68, 69, 53, 52, -1, 52, 53, 57, 56, -1, 56, 57, 65, 64, 31, 65, 69, 53, 57, -1, 66, 58, 54, 70, -1, 65, 66, 70, 69, -1, 69, 70, + 54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 66, 65, 31, 66, 70, 54, 58, -1, 67, 59, 55, 71, -1, 66, 67, 71, 70, -1, 70, 71, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 67, 66, 31, 14, 15, 13, 12, -1, 72, 64, 68, 76, -1, 14, 72, 76, 15, -1, 15, 76, 68, 13, -1, 13, 68, 64, 12, -1, 12, 64, 72, 14, 31, 72, 76, 68, 64, -1, 73, 65, 69, 77, -1, 72, 73, 77, 76, -1, 76, 77, 69, 68, -1, 68, 69, 65, 64, -1, 64, 65, 73, 72, 31, 73, 77, 69, 65, -1, 74, 66, 70, 78, -1, 73, 74, 78, 77, -1, 77, 78, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 74, 73, 31, 74, 78, 70, 66, -1, 75, 67, 71, 79, -1, 74, 75, 79, 78, -1, 78, 79, 71, 70, -1, 70, 71, 67, 66, -1, + 66, 67, 75, 74, 31, 2, 3, 13, 81, -1, 24, 90, 68, 28, -1, 2, 24, 28, 3, -1, 3, 28, 68, 13, -1, 13, 68, 90, 81, -1, 81, 90, 24, 2, 31, 24, 28, 68, 90, -1, 25, 91, 69, 29, -1, 24, 25, 29, 28, -1, 28, 29, 69, 68, -1, 68, 69, 91, 90, -1, 90, 91, 25, 24, 31, 25, 29, 69, 91, -1, 26, 92, 88, 30, -1, 25, 26, 30, 29, -1, 29, 30, 88, 69, -1, 69, 88, 92, 91, -1, 91, 92, 26, 25, 31, 26, 30, 88, 92, -1, 27, 93, 89, 31, -1, 26, 27, 31, 30, -1, 30, 31, 89, 88, -1, 88, 89, 93, 92, -1, 92, 93, 27, 26, 31, 13, 3, 5, 9, -1, 68, 52, 36, 28, -1, 13, 68, 28, 3, -1, 3, 28, 36, 5, -1, 5, 36, 52, 9, -1, 9, 52, 68, 13, 31, 68, 28, 36, 52, -1, 69, 53, 37, 29, -1, 68, 69, 29, + 28, -1, 28, 29, 37, 36, -1, 36, 37, 53, 52, -1, 52, 53, 69, 68, 31, 69, 29, 37, 53, -1, 88, 86, 38, 30, -1, 69, 88, 30, 29, -1, 29, 30, 38, 37, -1, 37, 38, 86, 53, -1, 53, 86, 88, 69, 31, 88, 30, 38, 86, -1, 89, 87, 39, 31, -1, 88, 89, 31, 30, -1, 30, 31, 39, 38, -1, 38, 39, 87, 86, -1, 86, 87, 89, 88]) + cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080]) + m3.setConnectivity(c, cI) + m3.checkConsistency() + m2, _, _, _, _ = m3.buildDescendingConnectivity() + grpIds = DataArrayInt([2,7,12,17,95,99,103,107,129,133,137,141]); grpIds.setName("group") + mfu = MEDFileUMesh() + mfu.setMeshAtLevel(0, m3) + mfu.setMeshAtLevel(-1, m2) + mfu.setGroupsAtLevel(-1, [grpIds]) + nNod = m3.getNumberOfNodes() + nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group") + m3_bis = mfu.getMeshAtLevel(0) + m3_bis.checkConsistency() + m2_bis = mfu.getMeshAtLevel(-1) + m2_bis.checkConsistency() + self.assertEqual(nNod+22, mfu.getNumberOfNodes()) + self.assertEqual(nNod+22, m3_bis.getNumberOfNodes()) + self.assertEqual(nNod+22, m2_bis.getNumberOfNodes()) + self.assertEqual([0, 3, 12, 13, 16, 17, 18, 19, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 88, 89], nodesDup.getValues()) + self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues()) + self.assertEqual(set([0, 1, 2, 3, 24, 25, 26, 27, 28, 29, 30, 31]), set(cells1.getValues())) + self.assertEqual(set([4, 5, 6, 7, 20, 21, 22, 23, 32, 33, 34, 35]), set(cells2.getValues())) + self.assertEqual([2, 7, 12, 17, 95, 99, 103, 107, 129, 133, 137, 141],mfu.getGroupArr(-1,"group").getValues()) + self.assertEqual([151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated + m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity() + m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999) + pass + + def testBuildInnerBoundary8(self): + """ 3D test where the crack leaves 'naked' cells. If we call a 'close-to-crack cell' a cell which shares a face with the M1 group, + a 'naked cell' is a cell that has some node duplicated, but which do not share any face with a 'close-to-crack cell'. In this case + it is tricky to decide whether this cell should be renumbered or not ... + Warning: on the mesh below some points have already been doubled by a previous cut. + """ + m3 = MEDCouplingUMesh('box', 3) + coo = DataArrayDouble([(0,15,0),(0,5,0),(3,5,0),(5,5,0),(5,15,0),(5,20,0),(0,20,0),(15,20,0),(15,15,0),(20,15,0),(20,20,0),(20,5,0),(15,5,0),(15,0,0),(20,0,0),(5,-1.60551e-25,0),(5,3,0),(3,0,0), + (3,3,0),(0,0,0),(0,3,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(0,5,10),(0,5,20),(0,5,30),(0,5,40),(3,5,10),(3,5,20),(3,5,30),(3,5,40),(5,5,10),(5,5,20),(5,5,30),(5,5,40),(5,15,10),(5,15,20),(5,15,30), + (5,15,40),(5,20,10),(5,20,20),(5,20,30),(5,20,40),(0,20,10),(0,20,20),(0,20,30),(0,20,40),(15,20,10),(15,20,20),(15,20,30),(15,20,40),(15,15,10),(15,15,20),(15,15,30),(15,15,40),(20,15,10),(20,15,20), + (20,15,30),(20,15,40),(20,20,10),(20,20,20),(20,20,30),(20,20,40),(20,5,10),(20,5,20),(20,5,30),(20,5,40),(15,5,10),(15,5,20),(15,5,30),(15,5,40),(15,0,10),(15,0,20),(15,0,30),(15,0,40),(20,0,10), + (20,0,20),(20,0,30),(20,0,40),(5,-1.60551e-25,10),(5,-1.60551e-25,20),(5,-1.60551e-25,30),(5,-1.60551e-25,40),(5,3,10),(5,3,20),(5,3,30),(5,3,40),(3,0,10),(3,0,20),(3,0,30),(3,0,40),(3,3,10),(3,3,20), + (3,3,30),(3,3,40),(0,0,10),(0,0,20),(0,0,30),(0,0,40),(0,3,10),(0,3,20),(0,3,30),(0,3,40),(0,9,0),(3,9,0),(20,9,0),(0,9,10),(0,9,20),(0,9,30),(0,9,40),(3,9,10),(3,9,20),(3,9,30),(3,9,40),(5,9,30), + (5,9,40),(20,9,10),(20,9,20),(20,9,30),(20,9,40),(15,9,30),(15,9,40),(0,15,0),(20,15,0),(0,15,10),(0,15,20),(0,15,30),(0,15,40),(5,15,30),(5,15,40),(15,15,30),(15,15,40),(20,15,10),(20,15,20),(20,15,30), + (20,15,40)]) + m3.setCoords(coo) + c = DataArrayInt([31, 5, 4, 124, 6, -1, 41, 45, 126, 37, -1, 5, 41, 37, 4, -1, 4, 37, 126, 124, -1, 124, 126, 45, 6, -1, 6, 45, 41, 5, 31, 41, 37, 126, 45, -1, 42, 46, 127, 38, -1, 41, 42, 38, 37, -1, 37, 38, 127, 126, -1, 126, 127, 46, 45, -1, 45, 46, 42, 41, 31, 42, 38, 127, 46, -1, 43, 47, 128, 130, -1, 42, 43, 130, 38, -1, 38, 130, 128, 127, -1, 127, 128, 47, 46, -1, 46, 47, 43, 42, 31, 43, 130, 128, 47, + -1, 44, 48, 129, 131, -1, 43, 44, 131, 130, -1, 130, 131, 129, 128, -1, 128, 129, 48, 47, -1, 47, 48, 44, 43, 31, 7, 8, 4, 5, -1, 49, 41, 37, 53, -1, 7, 49, 53, 8, -1, 8, 53, 37, 4, -1, 4, 37, 41, 5, -1, 5, 41, 49, 7, 31, 49, 53, 37, 41, -1, 50, 42, 38, 54, -1, 49, 50, 54, 53, -1, 53, 54, 38, 37, -1, 37, 38, 42, 41, -1, 41, 42, 50, 49, 31, 50, 54, 38, 42, -1, 51, 43, 130, 132, -1, 50, 51, 132, 54, -1, 54, 132, + 130, 38, -1, 38, 130, 43, 42, -1, 42, 43, 51, 50, 31, 51, 132, 130, 43, -1, 52, 44, 131, 133, -1, 51, 52, 133, 132, -1, 132, 133, 131, 130, -1, 130, 131, 44, 43, -1, 43, 44, 52, 51, 31, 125, 8, 7, 10, -1, 134, 61, 49, 53, -1, 125, 134, 53, 8, -1, 8, 53, 49, 7, -1, 7, 49, 61, 10, -1, 10, 61, 134, 125, 31, 134, 53, 49, 61, -1, 135, 62, 50, 54, -1, 134, 135, 54, 53, -1, 53, 54, 50, 49, -1, 49, 50, 62, 61, -1, + 61, 62, 135, 134, 31, 135, 54, 50, 62, -1, 136, 63, 51, 132, -1, 135, 136, 132, 54, -1, 54, 132, 51, 50, -1, 50, 51, 63, 62, -1, 62, 63, 136, 135, 31, 136, 132, 51, 63, -1, 137, 64, 52, 133, -1, 136, 137, 133, 132, -1, 132, 133, 52, 51, -1, 51, 52, 64, 63, -1, 63, 64, 137, 136, 31, 107, 12, 8, 9, -1, 118, 57, 53, 69, -1, 107, 118, 69, 12, -1, 12, 69, 53, 8, -1, 8, 53, 57, 9, -1, 9, 57, 118, 107, 31, 118, 69, + 53, 57, -1, 119, 58, 54, 70, -1, 118, 119, 70, 69, -1, 69, 70, 54, 53, -1, 53, 54, 58, 57, -1, 57, 58, 119, 118, 31, 119, 70, 54, 58, -1, 120, 59, 55, 122, -1, 119, 120, 122, 70, -1, 70, 122, 55, 54, -1, 54, 55, 59, 58, -1, 58, 59, 120, 119, 31, 120, 122, 55, 59, -1, 121, 60, 56, 123, -1, 120, 121, 123, 122, -1, 122, 123, 56, 55, -1, 55, 56, 60, 59, -1, 59, 60, 121, 120, 31, 13, 12, 11, 14, -1, 73, 77, 65, 69, + -1, 13, 73, 69, 12, -1, 12, 69, 65, 11, -1, 11, 65, 77, 14, -1, 14, 77, 73, 13, 31, 73, 69, 65, 77, -1, 74, 78, 66, 70, -1, 73, 74, 70, 69, -1, 69, 70, 66, 65, -1, 65, 66, 78, 77, -1, 77, 78, 74, 73, 31, 74, 70, 66, 78, -1, 75, 79, 67, 71, -1, 74, 75, 71, 70, -1, 70, 71, 67, 66, -1, 66, 67, 79, 78, -1, 78, 79, 75, 74, 31, 75, 71, 67, 79, -1, 76, 80, 68, 72, -1, 75, 76, 72, 71, -1, 71, 72, 68, 67, -1, 67, 68, 80, + 79, -1, 79, 80, 76, 75, 31, 17, 18, 16, 15, -1, 89, 81, 85, 93, -1, 17, 89, 93, 18, -1, 18, 93, 85, 16, -1, 16, 85, 81, 15, -1, 15, 81, 89, 17, 31, 89, 93, 85, 81, -1, 90, 82, 86, 94, -1, 89, 90, 94, 93, -1, 93, 94, 86, 85, -1, 85, 86, 82, 81, -1, 81, 82, 90, 89, 31, 90, 94, 86, 82, -1, 91, 83, 87, 95, -1, 90, 91, 95, 94, -1, 94, 95, 87, 86, -1, 86, 87, 83, 82, -1, 82, 83, 91, 90, 31, 91, 95, 87, 83, -1, 92, 84, + 88, 96, -1, 91, 92, 96, 95, -1, 95, 96, 88, 87, -1, 87, 88, 84, 83, -1, 83, 84, 92, 91, 31, 19, 20, 18, 17, -1, 97, 89, 93, 101, -1, 19, 97, 101, 20, -1, 20, 101, 93, 18, -1, 18, 93, 89, 17, -1, 17, 89, 97, 19, 31, 97, 101, 93, 89, -1, 98, 90, 94, 102, -1, 97, 98, 102, 101, -1, 101, 102, 94, 93, -1, 93, 94, 90, 89, -1, 89, 90, 98, 97, 31, 98, 102, 94, 90, -1, 99, 91, 95, 103, -1, 98, 99, 103, 102, -1, 102, 103, + 95, 94, -1, 94, 95, 91, 90, -1, 90, 91, 99, 98, 31, 99, 103, 95, 91, -1, 100, 92, 96, 104, -1, 99, 100, 104, 103, -1, 103, 104, 96, 95, -1, 95, 96, 92, 91, -1, 91, 92, 100, 99, 31, 1, 2, 18, 20, -1, 25, 101, 93, 29, -1, 1, 25, 29, 2, -1, 2, 29, 93, 18, -1, 18, 93, 101, 20, -1, 20, 101, 25, 1, 31, 25, 29, 93, 101, -1, 26, 102, 94, 30, -1, 25, 26, 30, 29, -1, 29, 30, 94, 93, -1, 93, 94, 102, 101, -1, 101, 102, + 26, 25, 31, 26, 30, 94, 102, -1, 27, 103, 95, 31, -1, 26, 27, 31, 30, -1, 30, 31, 95, 94, -1, 94, 95, 103, 102, -1, 102, 103, 27, 26, 31, 27, 31, 95, 103, -1, 28, 104, 96, 32, -1, 27, 28, 32, 31, -1, 31, 32, 96, 95, -1, 95, 96, 104, 103, -1, 103, 104, 28, 27, 31, 3, 4, 8, 12, -1, 33, 69, 53, 37, -1, 3, 33, 37, 4, -1, 4, 37, 53, 8, -1, 8, 53, 69, 12, -1, 12, 69, 33, 3, 31, 33, 37, 53, 69, -1, 34, 70, 54, 38, -1, + 33, 34, 38, 37, -1, 37, 38, 54, 53, -1, 53, 54, 70, 69, -1, 69, 70, 34, 33, 31, 34, 38, 54, 70, -1, 116, 122, 55, 39, -1, 34, 116, 39, 38, -1, 38, 39, 55, 54, -1, 54, 55, 122, 70, -1, 70, 122, 116, 34, 31, 116, 39, 55, 122, -1, 117, 123, 56, 40, -1, 116, 117, 40, 39, -1, 39, 40, 56, 55, -1, 55, 56, 123, 122, -1, 122, 123, 117, 116, 31, 16, 18, 2, 3, -1, 85, 33, 29, 93, -1, 16, 85, 93, 18, -1, 18, 93, 29, 2, + -1, 2, 29, 33, 3, -1, 3, 33, 85, 16, 31, 85, 93, 29, 33, -1, 86, 34, 30, 94, -1, 85, 86, 94, 93, -1, 93, 94, 30, 29, -1, 29, 30, 34, 33, -1, 33, 34, 86, 85, 31, 86, 94, 30, 34, -1, 87, 35, 31, 95, -1, 86, 87, 95, 94, -1, 94, 95, 31, 30, -1, 30, 31, 35, 34, -1, 34, 35, 87, 86, 31, 87, 95, 31, 35, -1, 88, 36, 32, 96, -1, 87, 88, 96, 95, -1, 95, 96, 32, 31, -1, 31, 32, 36, 35, -1, 35, 36, 88, 87, 31, 4, 3, 106, + 105, 0, -1, 37, 21, 108, 112, 33, -1, 3, 4, 37, 33, -1, 106, 3, 33, 112, -1, 105, 106, 112, 108, -1, 0, 105, 108, 21, -1, 4, 0, 21, 37, 31, 37, 33, 112, 108, 21, -1, 38, 22, 109, 113, 34, -1, 33, 37, 38, 34, -1, 112, 33, 34, 113, -1, 108, 112, 113, 109, -1, 21, 108, 109, 22, -1, 37, 21, 22, 38, 31, 38, 34, 113, 109, 22, -1, 39, 23, 110, 114, 116, -1, 34, 38, 39, 116, -1, 113, 34, 116, 114, -1, 109, 113, 114, 110, + -1, 22, 109, 110, 23, -1, 38, 22, 23, 39, 31, 39, 116, 114, 110, 23, -1, 40, 24, 111, 115, 117, -1, 116, 39, 40, 117, -1, 114, 116, 117, 115, -1, 110, 114, 115, 111, -1, 23, 110, 111, 24, -1, 39, 23, 24, 40, 31, 16, 3, 12, 13, 15, -1, 85, 81, 73, 69, 33, -1, 3, 16, 85, 33, -1, 12, 3, 33, 69, -1, 13, 12, 69, 73, -1, 15, 13, 73, 81, -1, 16, 15, 81, 85, 31, 85, 33, 69, 73, 81, -1, 86, 82, 74, 70, 34, -1, 33, 85, + 86, 34, -1, 69, 33, 34, 70, -1, 73, 69, 70, 74, -1, 81, 73, 74, 82, -1, 85, 81, 82, 86, 31, 86, 34, 70, 74, 82, -1, 87, 83, 75, 71, 35, -1, 34, 86, 87, 35, -1, 70, 34, 35, 71, -1, 74, 70, 71, 75, -1, 82, 74, 75, 83, -1, 86, 82, 83, 87, 31, 87, 35, 71, 75, 83, -1, 88, 84, 76, 72, 36, -1, 35, 87, 88, 36, -1, 71, 35, 36, 72, -1, 75, 71, 72, 76, -1, 83, 75, 76, 84, -1, 87, 83, 84, 88]) + cI = DataArrayInt([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360, 390, 420, 450, 480, 510, 540, 570, 600, 630, 660, 690, 720, 750, 780, 810, 840, 870, 900, 930, 960, 990, 1020, 1050, 1080, 1110, 1140, 1170, 1200, 1237, 1274, 1311, 1348, 1385, 1422, 1459, 1496]) + m3.setConnectivity(c, cI) + m3.checkConsistency() + m2, _, _, _, _ = m3.buildDescendingConnectivity() + grpIds = DataArrayInt([2,7,12,17,101,106,111,116,160,164,170,173,176,179]); grpIds.setName("group") + mfu = MEDFileUMesh() + mfu.setMeshAtLevel(0, m3) + mfu.setMeshAtLevel(-1, m2) + mfu.setGroupsAtLevel(-1, [grpIds]) + nNod = m3.getNumberOfNodes() + nodesDup, cells1, cells2 = mfu.buildInnerBoundaryAlongM1Group("group") + m3_bis = mfu.getMeshAtLevel(0) + m3_bis.checkConsistency() + m2_bis = mfu.getMeshAtLevel(-1) + m2_bis.checkConsistency() + self.assertEqual(nNod+23, mfu.getNumberOfNodes()) + self.assertEqual(nNod+23, m3_bis.getNumberOfNodes()) + self.assertEqual(nNod+23, m2_bis.getNumberOfNodes()) + self.assertEqual([5, 15, 16, 35, 36, 39, 40, 41, 42, 43, 44, 81, 82, 83, 84, 85, 86, 87, 88, 116, 117, 130, 131], nodesDup.getValues()) + self.assertEqual(m3_bis.getCoords()[nodesDup].getValues(), m3_bis.getCoords()[nNod:].getValues()) + self.assertEqual(set([0, 1, 2, 3, 20, 21, 22, 23, 34, 35, 36, 37, 38, 39]), set(cells1.getValues())) + self.assertEqual(set([4, 5, 6, 7, 42, 43, 44, 45, 46, 47]), set(cells2.getValues())) + self.assertEqual([2, 7, 12, 17, 101, 106, 111, 116, 160, 164, 170, 173, 176, 179],mfu.getGroupArr(-1,"group").getValues()) + self.assertEqual([212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225],mfu.getGroupArr(-1,"group_dup").getValues()) # here only one cell has been duplicated + m_desc, _, _, _, _ = m3_bis.buildDescendingConnectivity() + m_desc.checkDeepEquivalOnSameNodesWith(m2_bis, 2, 9.9999) + pass + @WriteInTmpDir def testBasicConstructors(self): GeneratePyfile18(self) @@ -1753,7 +1902,7 @@ class MEDLoaderTest3(unittest.TestCase): mT3.allocateCells(1) mT3.insertNextCell(NORM_TRI3,list(range(3))) mT3.finishInsertingCells() - + tr=[[0.,4.],[2.,4.],[4.,4.],[6.,4.],[8.,4.],[10.,4.],[12.,4.],[14.,4.],[16.,4.],[18.,4.],[20.,4.],[0.,0.],[2.,0.], [0.,2.],[2.,2.],[4.,2.],[6.,2.],[8.,2.],[10.,2.],[12.,2.]] ms=11*[mT3]+2*[mQ4]+7*[mQ8] ms[:]=(elt.deepCopy() for elt in ms) @@ -1865,7 +2014,7 @@ class MEDLoaderTest3(unittest.TestCase): f.setGaussLocalizationOnCells([16,19],[0.,0.,1.,0.,1.,1.,0.,1.,0.5,0.,1.,0.5,0.5,1.,0.,0.5],[0.3,0.3,0.7,0.7,0.8,0.8],[0.8,0.1,0.1]) f.checkConsistencyLight() mm=MEDFileUMesh() - mm.setMeshAtLevel(0,m) + mm.setMeshAtLevel(0,m) f1ts=MEDFileField1TS.New() f1ts.setFieldNoProfileSBT(f) self.assertEqual(f1ts.getPfls(),('Pfl_fieldCellWithoutPfl_NORM_TRI3_0','Pfl_fieldCellWithoutPfl_NORM_TRI3_1','Pfl_fieldCellWithoutPfl_NORM_QUAD8_3','Pfl_fieldCellWithoutPfl_NORM_QUAD8_4')) @@ -1982,7 +2131,7 @@ class MEDLoaderTest3(unittest.TestCase): pfl1_r.setName(pfl1.getName()) self.assertTrue(pfl1_r.isEqual(pfl1)) pass - + # Testing profile on nodes when the profile is identity but not on all nodes. @WriteInTmpDir def testMEDFieldPflOnCell1(self): @@ -2256,12 +2405,17 @@ class MEDLoaderTest3(unittest.TestCase): m=m.buildUnstructured() m.setName("mm") f=m.getMeasureField(False) - self.assertIn(m.getHeapMemorySize(), list(range(3552 - 100, 3552 + 100 + 4 * strMulFac))) - self.assertIn(f.getHeapMemorySize(), list(range(4215 - 100, 4215 + 100 + 8 * strMulFac))) + cooMem = 100 * 2 * 8 + nodalMem = 5 * 81 * MEDCouplingSizeOfIDs()//8 + indexMem = 82 * MEDCouplingSizeOfIDs()//8 + meshMem = cooMem + nodalMem + indexMem + self.assertIn(m.getHeapMemorySize(), list(range(meshMem - 100, meshMem + 100 + 4 * strMulFac))) + delta = (m.getHeapMemorySize()-meshMem)//3 # std::string::capacity behaves differently + self.assertIn(f.getHeapMemorySize(), list(range(meshMem + 81*8 - (100 + 3*delta), meshMem + 81*8 + (100+3*delta) + 8 * strMulFac))) # mm=MEDFileUMesh() mm.setMeshAtLevel(0,m) - self.assertIn(mm.getHeapMemorySize(), list(range(3889 - 100, 4225 + 100 + 10 * strMulFac))) + self.assertIn(mm.getHeapMemorySize(), list(range(meshMem + 81*(MEDCouplingSizeOfIDs()//8) - (100+3*delta), meshMem + 81*(MEDCouplingSizeOfIDs()//8) + (100+3*delta) + 10 * strMulFac))) ff=MEDFileField1TS() ff.setFieldNoProfileSBT(f) self.assertIn(ff.getHeapMemorySize(), list(range(771 - 40, 871 + 21 + (4 + 1) * strMulFac))) @@ -2277,9 +2431,9 @@ class MEDLoaderTest3(unittest.TestCase): f2.setTime(2.,1,-1) pfl=DataArrayInt.Range(0,50,1) ; pfl.setName("pfl") fff.appendFieldProfile(f2,mm,0,pfl) - self.assertIn(fff.getHeapMemorySize(), list(range(2348 - 130, 2608 + 100 + (10 + 2) * strMulFac))) - self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(204 - 10, 204 + 10 + 2 * strMulFac))) - self.assertIn(fff[1, -1].getHeapMemorySize(), list(range(738 - 50, 838 + 30 + 4 * strMulFac))) + self.assertIn(fff.getHeapMemorySize(), range(2348 - 130, 2608 + 400 + (10 + 2) * strMulFac)) + self.assertIn(fff.getProfile("pfl").getHeapMemorySize(), list(range(50 *(MEDCouplingSizeOfIDs()//8) - 10, 50 *(MEDCouplingSizeOfIDs()//8) + 10 + 2 * strMulFac))) + self.assertIn(fff[1, -1].getHeapMemorySize(), range(538 + (50 *(MEDCouplingSizeOfIDs()//8)) - 50, 900 + (50 *(MEDCouplingSizeOfIDs()//8)) + 30 + 4 * strMulFac)) pass def internalCurveLinearMesh1(self): @@ -2321,7 +2475,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(len(m1.getUnivName())!=0) self.assertTrue(m1.getMesh().isEqual(mesh,1e-12)) pass - + @WriteInTmpDir def testCurveLinearMesh1(self): self.internalCurveLinearMesh1() @@ -2329,7 +2483,7 @@ class MEDLoaderTest3(unittest.TestCase): @WriteInTmpDir def testParameters1(self): self.internalParameters1() - + def internalParameters1(self): fname="Pyfile56.med" m=MEDCouplingCMesh() ; arr=DataArrayDouble([0.,1.2,3.5]) ; m.setCoords(arr,arr) ; m.setName("mesh") @@ -2657,7 +2811,7 @@ class MEDLoaderTest3(unittest.TestCase): pass pass pass - + @WriteInTmpDir def testNonRegressionMantis22212ChangeGrpName(self): fileName="Pyfile62.med" @@ -2749,7 +2903,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(a.getArray().isEqual(2*f1.getArray())) f1.setTime(3.,1,2) ; f1.getArray()[:]*=2 self.assertTrue(a.isEqual(f1,1e-12,0)) ; f1.getArray()[:]/=2 - bc=DataArrayInt(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]']) + bc=DataArrayInt32(6,3) ; bc[:]=0 ; bc.setInfoOnComponents(['power [MW/m^3]','density [g/cm^3]','temperature [K]']) for it in ffs1: a=it.getFieldOnMeshAtLevel(ON_CELLS,0,mm1) bc+=a.getArray() @@ -2758,7 +2912,7 @@ class MEDLoaderTest3(unittest.TestCase): nf1=MEDCouplingFieldInt(ON_NODES) nf1.setTime(9.,10,-1) nf1.setMesh(f1.getMesh()) - narr=DataArrayInt(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0] + narr=DataArrayInt32(12,2) ; narr.setInfoOnComponents(["aa [u1]","bbbvv [ppp]"]) ; narr[:,0]=list(range(12)) ; narr[:,1]=2*narr[:,0] nf1.setName("VectorFieldOnNodes") ; nf1.setArray(narr) nff1=MEDFileIntField1TS.New() nff1.setFieldNoProfileSBT(nf1) @@ -2769,7 +2923,7 @@ class MEDLoaderTest3(unittest.TestCase): nf2=MEDCouplingFieldInt(ON_NODES) nf2.setTime(19.,20,-11) nf2.setMesh(f1.getMesh()) - narr2=DataArrayInt(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0] + narr2=DataArrayInt32(8,2) ; narr.setInfoOnComponents(["aapfl [u1]","bbbvvpfl [ppp]"]) ; narr2[:,0]=list(range(8)) ; narr2[:,0]+=10 ; narr2[:,1]=3*narr2[:,0] nf2.setName("VectorFieldOnNodesPfl") ; narr2.setName(nf2.getName()) ; nf2.setArray(narr2) nff2=MEDFileIntField1TS.New() npfl=DataArrayInt([1,2,4,5,6,7,10,11]) ; npfl.setName("npfl") @@ -2857,7 +3011,7 @@ class MEDLoaderTest3(unittest.TestCase): @WriteInTmpDir def testMEDFileFields2(self): fname="Pyfile65.med" - # to check that all is initialize + # to check that all is initialize MEDFileField1TS().__str__() MEDFileFieldMultiTS().__str__() # building a mesh containing 4 tri3 + 5 quad4 @@ -3001,7 +3155,7 @@ class MEDLoaderTest3(unittest.TestCase): fs0.checkGlobsCoherency() fs0.write(fname,0) pass - + @WriteInTmpDir def testSplitComponents1(self): fname="Pyfile67.med" @@ -3107,8 +3261,16 @@ class MEDLoaderTest3(unittest.TestCase): ff1=ff0i.convertToDouble() self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13)) self.assertEqual(ff1.getFieldSplitedByType(),fspExp) + # For int64 + ff0i64=ff0.convertToInt64() + self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp) + self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray())) + # + ff2=ff0i64.convertToDouble() + self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13)) + self.assertEqual(ff2.getFieldSplitedByType(),fspExp) # With profiles - del arr,f0,ff0,ff1,ff0i,fspExp + del arr,f0,ff0,ff1,ff2,ff0i,ff0i64,fspExp ff0=MEDFileField1TS() f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["XX [pm]","YYY [hm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellPfl") f0.checkConsistencyLight() @@ -3126,6 +3288,16 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(isinstance(ff1,MEDFileField1TS)) self.assertTrue(ff1.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13)) self.assertEqual(ff1.getFieldSplitedByType(),fspExp) + # For Int64 + ff0i64=ff0.convertToInt64() + self.assertTrue(isinstance(ff0i64,MEDFileInt64Field1TS)) + self.assertEqual(ff0i64.getFieldSplitedByType(),fspExp) + self.assertTrue(arr.convertToInt64Arr().isEqual(ff0i64.getUndergroundDataArray())) + # + ff2=ff0i64.convertToDouble() + self.assertTrue(isinstance(ff2,MEDFileField1TS)) + self.assertTrue(ff2.getUndergroundDataArray().isEqual(ff0.getUndergroundDataArray(),1e-13)) + self.assertEqual(ff2.getFieldSplitedByType(),fspExp) ## MultiTimeSteps ff0=MEDFileFieldMultiTS() f0=MEDCouplingFieldDouble(ON_CELLS,ONE_TIME) ; f0.setMesh(m[:7]) ; arr=DataArrayDouble(7*2) ; arr.iota() ; arr.rearrange(2) ; arr.setInfoOnComponents(["X [km]","YY [mm]"]) ; f0.setArray(arr) ; f0.setName("FieldCellMTime") ; f0.setTime(0.1,0,10) @@ -3143,7 +3315,7 @@ class MEDLoaderTest3(unittest.TestCase): for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()): self.assertEqual(ff1.getFieldSplitedByType(dt,it),fspExp) arr=ff1.getUndergroundDataArray(dt,it) - arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1)) + arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1)) pass self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4', 'pfl_NORM_QUAD4', 'pfl_NORM_QUAD4')) # @@ -3166,7 +3338,7 @@ class MEDLoaderTest3(unittest.TestCase): for delt,(dt,it,t) in zip([0,100,200],ff1.getTimeSteps()): self.assertTrue(ff1.getFieldSplitedByType(dt,it),fspExp) arr=ff1.getUndergroundDataArray(dt,it) - arr.isEqualWithoutConsideringStr(DataArrayInt.Range(delt,delt+7,1)) + arr.isEqualWithoutConsideringStr(DataArrayInt32.Range(delt,delt+7,1)) pass self.assertEqual(ff1.getPfls(),('pfl_NORM_QUAD4',)) pass @@ -3227,7 +3399,7 @@ class MEDLoaderTest3(unittest.TestCase): ff0=MEDFileField1TS(fname,"FieldCellPfl",False) self.assertEqual(ff0.getUndergroundDataArray().getInfoOnComponents(),["XX [pm]","YYY [hm]"]) heap_memory_ref=ff0.getHeapMemorySize() - self.assertIn(heap_memory_ref, list(range(350, 600 + 6 * strMulFac))) + self.assertIn(heap_memory_ref, list(range(350, 700 + 6 * strMulFac))) ff0.loadArrays() ## arr=DataArrayDouble(100) ; arr.iota() ; arr.rearrange(2) self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14)) @@ -3245,7 +3417,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertEqual(ff0.getUndergroundDataArray().getIJ(30,1),5.5) self.assertTrue(not ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14)) heap_memory_ref=ff0.getHeapMemorySize() - self.assertIn(heap_memory_ref, list(range(1100, 1400 + 2 * strMulFac))) + self.assertIn(heap_memory_ref, list(range(1100, 1600 + 2 * strMulFac))) ff0.unloadArrays() hmd=ff0.getHeapMemorySize()-heap_memory_ref self.assertEqual(hmd,-800) # -50*8*2 @@ -3254,7 +3426,7 @@ class MEDLoaderTest3(unittest.TestCase): # ff0=MEDFileField1TS(fname,"FieldCellPfl",-1,-1,False) heap_memory_ref=ff0.getHeapMemorySize() - self.assertIn(heap_memory_ref, list(range(299, 620 + 6 * strMulFac))) + self.assertIn(heap_memory_ref, list(range(299, 670 + 6 * strMulFac))) ff0.loadArrays() ## self.assertTrue(ff0.getUndergroundDataArray().isEqualWithoutConsideringStr(arr,1e-14)) self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,50*8*2) @@ -3271,14 +3443,14 @@ class MEDLoaderTest3(unittest.TestCase): # ff0=MEDFileAnyTypeFieldMultiTS.New(fname,fieldName,False) heap_memory_ref=ff0.getHeapMemorySize() - self.assertIn(heap_memory_ref, list(range(5536, 9212 + (80 + 26 + 1) * strMulFac))) + self.assertIn(heap_memory_ref, range(5536, 9212 + (80 + 26 + 1) * strMulFac)) ff0.loadArrays() self.assertEqual(ff0.getHeapMemorySize()-heap_memory_ref,20*70*8*2) del ff0 # ffs=MEDFileFields(fname,False) heap_memory_ref=ffs.getHeapMemorySize() - self.assertIn(heap_memory_ref, list(range(5335, 10031 + (80 + 50 + len(ffs)) * strMulFac))) + self.assertIn(heap_memory_ref, range(5335, 10331 + (80 + 50 + len(ffs)) * strMulFac)) ffs.loadArrays() self.assertEqual(ffs.getHeapMemorySize()-heap_memory_ref,20*70*8*2+70*8*2+50*8*2) pass @@ -3444,7 +3616,7 @@ class MEDLoaderTest3(unittest.TestCase): mrs.setNodeNumFieldReading(True) self.assertEqual(mrs.getCode(),63) pass - + @WriteInTmpDir def testPartialReadOfMeshes(self): fname="Pyfile70.med" @@ -3542,7 +3714,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(mm.getNumberFieldAtLevel(1) is None) delta4=ref_heap_mem-mm.getHeapMemorySize() self.assertTrue(delta4=32*4*2) + self.assertTrue(delta4>=MEDCouplingSizeOfIDs()/2*4*2) # mm=MEDFileUMesh.New(fname,"mesh",-1,-1,MEDFileMeshReadSelector(51)) self.assertEqual(len(mm.getGroupsNames()),6) @@ -3644,7 +3816,7 @@ class MEDLoaderTest3(unittest.TestCase): f.setArray(vals) f1ts.setFieldProfile(f,mm,0,pfl) pass - + @WriteInTmpDir def testWRMeshWithNoCells(self): fname="Pyfile71.med" @@ -3776,7 +3948,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(fs[0][i].getUndergroundDataArray().isEqual(arr,1e-12)) pass pass - + @WriteInTmpDir def testField1TSSetFieldNoProfileSBTPerGeoTypes(self): """ This test is very important, because the same mechanism is used by the MEDReader to generate a field on all the mesh without any processing and memory. @@ -3847,7 +4019,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertEqual(f1ts.getFieldSplitedByType(),[(0,[(0,(0,4),'','')]),(3,[(0,(4,6),'','')]),(4,[(0,(6,9),'','')]),(14,[(0,(9,15),'','')]),(15,[(0,(15,20),'','')]),(16,[(0,(20,24),'','')])]) self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0,1,2,3,0,1,0,1,2,0,1,2,3,4,5,0,1,2,3,4,0,1,2,3]),1e-12)) pass - + @WriteInTmpDir def testMEDFileUMeshSetName(self): """ This test is a small but important one for MEDReader in sauv mode. When .sauv file is loaded the conversion is performed in memory and a preparation is done then. @@ -3965,7 +4137,7 @@ class MEDLoaderTest3(unittest.TestCase): m.checkConsistency() mm=MEDFileUMesh() mm.setMeshAtLevel(0,m) - m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") + m1=MEDCouplingCMesh() ; m1.setCoords(arr) ; m1.setName("Mesh") m1=m1.buildUnstructured() ; m1.setCoords(m.getCoords()) mm.setMeshAtLevel(-1,m1) renum0=DataArrayInt([3,6,7,10,11,0,2,1,9,8,5,4,12,13,14,24,23,22,21,20,19,18,17,16,15]) @@ -4154,6 +4326,28 @@ class MEDLoaderTest3(unittest.TestCase): arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)]) arr.setInfoOnComponents(compos) self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12)) + m_ref = mm[0].deepCopy() + # now read it in 2 load sessions to avoid memory peak. zipCoords is no more requested here. + ms=MEDFileMeshes() + mrs = MEDFileMeshReadSelector() + mrs.setNumberOfCoordsLoadSessions(2) + mm=MEDFileUMesh.LoadPartOf(fileName,meshName,[NORM_QUAD4],[4,6,1],-1,-1,mrs) + ms.pushMesh(mm) + spd=mm.getPartDefAtLevel(0,NORM_QUAD4) + self.assertEqual(spd.getSlice(),slice(4,6,1)) + spd=mm.getPartDefAtLevel(1) + self.assertTrue(spd.getNumberOfElems()==8 and spd.getNumberOfElems()==mm.getNumberOfNodes()) + self.assertTrue(spd.toDAI().isEqual(DataArrayInt([4,5,6,7,10,11,12,13]))) + fs=MEDFileFields.LoadPartOf(fileName,False,ms) + fs[0][0].loadArrays() + arr=DataArrayDouble([(4,104),(5,105)]) + arr.setInfoOnComponents(compos) + self.assertTrue(fs[0][0].getUndergroundDataArray().isEqual(arr,1e-12)) + fs[1][0].loadArrays() + arr=DataArrayDouble([(204,304),(205,305),(206,306),(207,307),(210,310),(211,311),(212,312),(213,313)]) + arr.setInfoOnComponents(compos) + self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12)) + self.assertTrue( mm[0].deepCopy().isEqual(m_ref,1e-12) ) pass @WriteInTmpDir @@ -4495,7 +4689,7 @@ class MEDLoaderTest3(unittest.TestCase): pass self.assertEqual(fs2[0].getTimeSteps(), [(i, 0, float(i)) for i in range(nbPdt)]) pass - + @WriteInTmpDir def testMEDFileMeshRearrangeFamIds1(self): """ Test for bug EDF10720. The aim of this test is the call of MEDFileMesh.rearrangeFamilies.""" @@ -4679,7 +4873,7 @@ class MEDLoaderTest3(unittest.TestCase): grpExp=grp+delta ; grpExp.setName("%s_node"%grp.getName()) self.assertTrue(mm.getGroupArr(1,"%s_node"%grp.getName()).isEqual(grpExp)) pass - + @WriteInTmpDir def testMEDFileJoint1(self): fileName="Pyfile92.med" @@ -4719,7 +4913,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1) jointsR.destroyJointAtPos(0) pass - + @WriteInTmpDir def testMEDFileJoint2(self): fileNameWr="Pyfile93.med" @@ -4795,6 +4989,9 @@ class MEDLoaderTest3(unittest.TestCase): self.assertFalse( joint1st_1.isEqual( joint1st_4 )) self.assertFalse( joint1st_4.isEqual( joint1st_5 )) self.assertFalse( joint1st_4.isEqual( joint1st_6 )) + self.assertEqual(1,joint1st_6.getNumberOfCorrespondences()) + joint1st_6.clearCorrespondences() + self.assertEqual(0,joint1st_6.getNumberOfCorrespondences()) one_joint=MEDFileJoint() one_joint.pushStep(joint1st_1) one_joint.setLocalMeshName("maa1") @@ -4807,6 +5004,12 @@ class MEDLoaderTest3(unittest.TestCase): self.assertEqual( "joint_description", one_joint.getDescription()) self.assertEqual( 1, one_joint.getDomainNumber()) self.assertEqual( "joint_1", one_joint.getJointName()) + one_joint_copy = one_joint.deepCopy() + self.assertEqual( "maa1", one_joint_copy.getLocalMeshName()) + self.assertEqual( "maa2", one_joint_copy.getRemoteMeshName()) + self.assertEqual( "joint_description", one_joint_copy.getDescription()) + self.assertEqual( 1, one_joint_copy.getDomainNumber()) + self.assertEqual( "joint_1", one_joint_copy.getJointName()) pass @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?") @@ -4815,7 +5018,7 @@ class MEDLoaderTest3(unittest.TestCase): """ EDF11242 : check status of MED file calls to detect problems immediately. Sorry this test generates awful messages !""" fname="Pyfile94.med" errfname="Pyfile94.err" - + import os # first clean file if needed if os.path.exists(fname): @@ -4866,12 +5069,12 @@ class MEDLoaderTest3(unittest.TestCase): mm=MEDFileCMesh(fname) self.assertTrue(mm.getUnivName()!="") pass - + @WriteInTmpDir def testEmptyMesh(self): """ MEDLoader should be able to consistently write and read an empty mesh (coords array with 0 tuples """ - fname = "Pyfile96.med" + fname = "Pyfile96.med" m = MEDCouplingUMesh('toto', 2) m.setCoords(DataArrayDouble([], 0, 2)) m.setConnectivity(DataArrayInt([]), DataArrayInt([0])) @@ -4900,7 +5103,7 @@ class MEDLoaderTest3(unittest.TestCase): grp1=bary1.findIdsInRange(hauteur-1e-12,hauteur+1e-12) ; grp1.setName(grpName1) grp2=bary1.findIdsInRange(0.-1e-12,0.+1e-12) ; grp2.setName(grpName2) mesh.setGroupsAtLevel(-1,[grp1,grp2]) - + st=pickle.dumps(mesh,2) mm=pickle.loads(st) st2=pickle.dumps(mm,2) @@ -4926,14 +5129,14 @@ class MEDLoaderTest3(unittest.TestCase): mm.addFamily("HOMARD________-2",-2) mm.addFamily("HOMARD________-3",-3) mm.setFamiliesIdsOnGroup("HOMARD",[-1,-2,-3]) - + eqName="MAILLES_A_RECOLLER_APRES_HOMARD" descEq="Cette equivalence decrit les mailles a recoller. Dans chaque correspondance, le premier numero est celui de la maille coupee ; le second numero est celui d'une des petites mailles en regard." mm.initializeEquivalences() eqs=mm.getEquivalences() eq0=eqs.appendEmptyEquivalenceWithName(eqName) eq0.setDescription(descEq) - corr=DataArrayInt([(0,3),(0,4),(0,5),(0,6),(1,7),(1,8),(1,9),(1,10),(2,11),(2,12),(2,13),(2,14)]) + corr=DataArrayInt32([(0,3),(0,4),(0,5),(0,6),(1,7),(1,8),(1,9),(1,10),(2,11),(2,12),(2,13),(2,14)]) eq0.setArray(-1,corr) self.assertEqual(eq0.getCell().size(),1) self.assertTrue(eq0.getCell().getArray(NORM_QUAD4).isEqual(corr)) @@ -5232,7 +5435,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(mm2.getFamilyFieldAtLevel(0) is None) self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None) pass - + @WriteInTmpDir def testAppendFieldProfileOnIntField(self): fname="Pyfile100.med" @@ -5248,7 +5451,7 @@ class MEDLoaderTest3(unittest.TestCase): f=MEDCouplingFieldInt(ON_CELLS) ; f.setMesh(mesh) fieldName="FieldOnCell" f.setTime(1.2,1,1) ; f.setName(fieldName) - arr=DataArrayInt([101,102,103]) ; f.setArray(arr) + arr=DataArrayInt32([101,102,103]) ; f.setArray(arr) fmts.appendFieldProfile(f,mm,0,pfl) # mm.write(fname,2) @@ -5339,7 +5542,7 @@ class MEDLoaderTest3(unittest.TestCase): f1ts=MEDFileField1TS(fname,fieldName,4,5) self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12)) pass - + @WriteInTmpDir def testMEDFileFieldEasyField2(self): """Same thantestMEDFileFieldEasyField1 except that here intfields are considered. @@ -5359,7 +5562,7 @@ class MEDLoaderTest3(unittest.TestCase): m.insertNextCell(NORM_QUAD4,[104,105,106,107]) mm[0]=m mm.write(fname,2) - arr0=DataArrayInt([10,11,12,13,100,101]) + arr0=DataArrayInt32([10,11,12,13,100,101]) f=MEDCouplingFieldInt(ON_CELLS) ; f.setArray(arr0) ; f.setMesh(m) f.setName(fieldName) ; f.setTime(2.,6,7) f0=f.deepCopy() @@ -5380,7 +5583,7 @@ class MEDLoaderTest3(unittest.TestCase): fmts=MEDFileIntFieldMultiTS(fname,fieldName) self.assertTrue(f1.isEqual(fmts.field(8,9,mm),1e-12,0)) ## Basic test on nodes on top level - f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24) + f2=MEDCouplingFieldInt(ON_NODES) ; arr2=DataArrayInt32([200,201,202]) ; arr2.setInfoOnComponent(0,"tutu") ; f2.setArray(arr2) ; f2.setMesh(m) ; f2.setTime(22.,23,24) f2.setName(fieldName) mm.write(fname,2) ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f2) ; ff.write(fname,0) @@ -5391,7 +5594,7 @@ class MEDLoaderTest3(unittest.TestCase): fmts=MEDFileIntFieldMultiTS(fname,fieldName) self.assertTrue(f2.isEqual(fmts.field(23,24,mm),1e-12,0)) ## Node on elements - f3=MEDCouplingFieldInt(ON_GAUSS_NE) ; f3.setMesh(m) ; arr3=DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3) + f3=MEDCouplingFieldInt(ON_GAUSS_NE) ; f3.setMesh(m) ; arr3=DataArrayInt32([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3) f3.setName(fieldName) ; f3.checkConsistencyLight() mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0) # @@ -5402,7 +5605,7 @@ class MEDLoaderTest3(unittest.TestCase): f4=MEDCouplingFieldInt(ON_GAUSS_PT) ; f4.setMesh(m) ; f4.setName(fieldName) f4.setGaussLocalizationOnType(NORM_TRI3,[0.,0.,1.,0.,1.,1.],[0.1,0.1, 0.2,0.2, 0.3,0.3, 0.4,0.4, 0.5,0.5],[0.2,0.3,0.1,0.05,0.35]) f4.setGaussLocalizationOnType(NORM_QUAD4,[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.4, 0.6,0.7],[0.7,0.3]) ; f4.setTime(0.25,4,5) - arr4=DataArrayInt([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4) + arr4=DataArrayInt32([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4) f4.checkConsistencyLight() mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0) # @@ -5494,13 +5697,13 @@ class MEDLoaderTest3(unittest.TestCase): mm[0]=m0 mm.write(fname,2) # start slowly - f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2) + f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101)])) ; f1.setMesh(mm[0]) ; f1.setTime(4.,1,2) f1ts=MEDFileIntField1TS() ; f1ts.setFieldNoProfileSBT(f1) ; f1ts.write(fname,0) # mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,1,2) self.assertTrue(f1.isEqual(f1ts.field(mm),1e-12,0)) # here f1 lying on level -1 not 0 check if "field" method detect it ! - f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)])) + f1=MEDCouplingFieldInt(ON_CELLS) ; f1.setName(fieldName) ; f1.setArray(DataArrayInt32([(0,100),(1,101),(0,100),(1,101),(0,100),(1,101)])) f1.setMesh(mm[-1]) # -1 is very important f1.setTime(16.,3,4) f1.checkConsistencyLight() @@ -5512,7 +5715,7 @@ class MEDLoaderTest3(unittest.TestCase): # nodes on elements f3=MEDCouplingFieldInt(ON_GAUSS_NE) f3.setMesh(mm[-1]) # this line is important - arr3=DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3) + arr3=DataArrayInt32([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]) ; f3.setArray(arr3) ; f3.setTime(0.5,2,3) f3.setName(fieldName) ; f3.checkConsistencyLight() mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f3) ; ff.write(fname,0) # @@ -5524,7 +5727,7 @@ class MEDLoaderTest3(unittest.TestCase): f4.setName(fieldName) f4.setGaussLocalizationOnType(NORM_TRI3,[0.,0.,1.,0.,1.,1.],[0.1,0.1, 0.2,0.2, 0.3,0.3, 0.4,0.4, 0.5,0.5],[0.2,0.3,0.1,0.05,0.35]) f4.setGaussLocalizationOnType(NORM_QUAD4,[0.,0.,1.,0.,1.,1.,0.,1.],[0.3,0.4, 0.6,0.7],[0.7,0.3]) ; f4.setTime(0.25,4,5) - arr4=DataArrayInt([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4) + arr4=DataArrayInt32([0,1,2,3,4 ,10,11,12,13,14, 20,21,22,23,24, 30,31,32,33,34, 45,46, 55,56]) ; arr4.setInfoOnComponent(0,"abc") ; f4.setArray(arr4) f4.checkConsistencyLight() mm.write(fname,2) ; ff=MEDFileIntField1TS() ; ff.setFieldNoProfileSBT(f4) ; ff.write(fname,0) mm=MEDFileMesh.New(fname) ; f1ts=MEDFileIntField1TS(fname,fieldName,4,5) @@ -5900,6 +6103,40 @@ class MEDLoaderTest3(unittest.TestCase): CheckMFD(self,mfd) pass + @WriteInTmpDir + def testAggregateWithGroups(self): + """ Testing MEDFileUMesh::Aggretate when groups are present. """ + def generate(grp_name, offset): + coo = DataArrayDouble([0., 1., 2.]) + coo += offset + m = MEDCouplingCMesh("toto") + m.setCoords(coo, coo) + m = m.buildUnstructured() + mu = MEDFileUMesh.New() + mu.setMeshAtLevel(0, m) + g = DataArrayInt([0]) + g.setName(grp_name) + g2 = DataArrayInt([1]) + g2.setName("common") # make a common group for all meshes being merged + mu.setGroupsAtLevel(0, [g, g2]) + return mu + + m1 = generate("A", 0.) + m2 = generate("B", 2.) + mm = MEDFileUMesh.Aggregate([m1,m2]) + + self.assertEqual(mm.getFamilyFieldAtLevel(0).getValues(), [-2, -3, -1, -1, -4, -5, -1, -1]) + self.assertEqual(mm.getNumberFieldAtLevel(0), None) + refFamIds=[('Family_-1',-1),('Family_-2',-2),('Family_-3',-3), ('Family_-4',-4), ('Family_-5',-5)] + self.assertEqual(set(mm.getFamiliesNames()),set([elt[0] for elt in refFamIds])) + self.assertEqual(set([mm.getFamilyId(elt) for elt in mm.getFamiliesNames()]),set([elt[1] for elt in refFamIds])) + self.assertEqual(mm.getGroupsNames(),('A','B', 'common')) + self.assertEqual(mm.getGroupArr(0, 'A').getValues(), [0]) + self.assertEqual(mm.getGroupArr(0, 'B').getValues(), [4]) + self.assertEqual(mm.getGroupArr(0, 'common').getValues(), [1,5]) + + pass + @WriteInTmpDir def testExtrudedMesh1(self): fname="Pyfile107.med" @@ -5914,7 +6151,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(ex.isEqual(ex2,1e-12)) self.assertTrue(ex.isEqual(ex3,1e-12)) pass - + @unittest.skipUnless(LooseVersion(MEDFileVersionStr())>=LooseVersion('3.2.1'),"This test requires at least MEDFile version 3.2.1") @WriteInTmpDir def testWriteInto30(self): @@ -6142,7 +6379,7 @@ class MEDLoaderTest3(unittest.TestCase): f3=f1.deepCopy() ; f3+=2. ; f3.setTime(6.,3,4) self.assertTrue(ff1.field(mm).isEqual(f3,1e-12,1e-12)) pass - + @WriteInTmpDir def testFloat32InMEDFileFieldStar1(self): """Like testInt32InMEDFileFieldStar1 but with float32 :)""" @@ -6173,7 +6410,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(a.isEqual(f1,1e-12,1e-12)) ff2.setTime(1,2,3.) c=ff2.getUndergroundDataArray() ; c*=2 - ff2.write(fname,0) # 2 time steps in + ff2.write(fname,0) # 2 time steps in ffs1=MEDFileAnyTypeFieldMultiTS.New(fname,"VectorFieldOnCells") self.assertEqual(ffs1.getTimeSteps(),[(0, 1, 2.0), (1, 2, 3.0)]) self.assertEqual(len(ffs1),2) @@ -6339,7 +6576,7 @@ class MEDLoaderTest3(unittest.TestCase): fs2=fs.linearToQuadratic(mms,mmqs) self.myTester1(fs2,mmqs[0]) pass - + def myTester1(self,fs2,mmq): dataExp=DataArrayDouble([0.,0.,0.,1.,0.,0.,0.,1.,0.,1.,1.,0.,0.,0.,1.,1.,0.,1.,0.,1.,1.,1.,1.,1.,2.,0.,0.,3.,0.,0.,2.,1.,0.,3.,1.,0.,2.,0.,1.,3.,0.,1.,2.,1.,1.,3.,1.,1.,0.5, 0.,0.,0.,0.5, 0.,0.5, 1.,0.,1.,0.5, 0.,0.5, 0.,1.,0.,0.5, 1.,0.5, 1.,1.,1.,0.5, 1.,1.,0.,0.5, 0.,0.,0.5, 0.,1.,0.5, 1.,1.,0.5, 2.5, 0.,0.,2.,0.5, 0.,2.5, 1.,0.,3.,0.5, 0.,2.5, 0.,1.,2.,0.5, 1.,2.5, 1.,1.,3.,0.5, 1.,3.,0.,0.5, 2.,0.,0.5, 2.,1.,0.5, 3.,1.,0.5],40,3) dataExp1=DataArrayInt([1,0,2,3,5,4,6,7,16,17,18,19,20,21,22,23,24,25,26,27,9,8,10,11,13,12,14,15,28,29,30,31,32,33,34,35,36,37,38,39]) @@ -6463,7 +6700,7 @@ class MEDLoaderTest3(unittest.TestCase): self.assertTrue(mTest.getNodalConnectivity().isEqual(DataArrayInt([1,0,2,3,5,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19]))) self.assertTrue(mTest.getCoords().isEqual(DataArrayDouble([(2,0,0),(3,0,0),(2,1,0),(3,1,0),(2,0,1),(3,0,1),(2,1,1),(3,1,1),(2.5,0,0),(2,0.5,0),(2.5,1,0),(3,0.5,0),(2.5,0,1),(2,0.5,1),(2.5,1,1),(3,0.5,1),(3,0,0.5),(2,0,0.5),(2,1,0.5),(3,1,0.5)],20,3),1e-12)) self.assertTrue(fToTest.getArray().isEqual(4*exp1,1e-12)) - + pass @WriteInTmpDir @@ -6624,6 +6861,135 @@ class MEDLoaderTest3(unittest.TestCase): self.assertIn(fmts.getHeapMemorySize(),range(refSize,refSize+refSize//10)) pass + def testZipFamilies1(self): + """ + MEDFileMesh.zipFamilies tries to reduce family partitions under groups. + """ + mname="mesh" + arr=DataArrayDouble(10) ; arr.iota() + m=MEDCouplingCMesh() + m.setCoords(arr,arr) + m=m.buildUnstructured() + m.setName(mname) + # + mm=MEDFileUMesh() + mm[0]=m + for i in range(m.getNumberOfCells()): + d = DataArrayInt([i]) + d.setName("grp%d"%i) + mm.addGroup(0,d) + pass + + grp_all = DataArrayInt.Range(0,m.getNumberOfCells(),1) + grp_all.setName("grp_all") + mm.addGroup(0,grp_all) + for i in range(m.getNumberOfCells()): + mm.removeGroup("grp{}".format(i)) + pass + # + mm.zipFamilies() # the method to test + # + self.assertEqual(mm.getGroupsNames(),("grp_all",)) + self.assertEqual(len(mm.getFamiliesNames()),1) + self.assertTrue(mm.getGroupArr(0,"grp_all").isEqualWithoutConsideringStr(DataArrayInt.Range(0,81,1))) + pass + + def testZipFamilies2(self): + """ + MEDFileMesh.zipFamilies tries to reduce family partitions under groups. + """ + mname="mesh" + arr=DataArrayDouble(21) ; arr.iota() + m=MEDCouplingCMesh() + m.setCoords(arr) + m=m.buildUnstructured() + m.setName(mname) + # + mm=MEDFileUMesh() + mm[0]=m + # 1 and 3 to be merged + # 2 and 5 to be merged + mm.setFamilyFieldArr(0,DataArrayInt([-1,-1,-2,-3,-8, 0,-7,-7,-1,0, -6,-2,-5,-5,-2, -2,-2,-5,-4,-3])) + for i in range(1,9): + mm.setFamilyId("Fam_{}".format(i),-i) + mm.setFamiliesOnGroup("grp0",["Fam_1","Fam_3","Fam_6"]) + mm.setFamiliesOnGroup("grp1",["Fam_1","Fam_2","Fam_3","Fam_5","Fam_6"]) + mm.setFamiliesOnGroup("grp2",["Fam_2","Fam_5","Fam_6","Fam_7"]) + # + grp0=DataArrayInt([0,1,3,8,10,19]) + grp1=DataArrayInt([0,1,2,3,8,10,11,12,13,14,15,16,17,19]) + grp2=DataArrayInt([2,6,7,10,11,12,13,14,15,16,17]) + self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0)) + self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1)) + self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2)) + self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2')) + mm.zipFamilies() + self.assertEqual(mm.getGroupsNames(),('grp0','grp1','grp2')) + self.assertTrue(mm.getGroupArr(0,"grp0").isEqualWithoutConsideringStr(grp0)) + self.assertTrue(mm.getGroupArr(0,"grp1").isEqualWithoutConsideringStr(grp1)) + self.assertTrue(mm.getGroupArr(0,"grp2").isEqualWithoutConsideringStr(grp2)) + self.assertEqual(mm.getFamiliesNames(),('Fam_1','Fam_2','Fam_6','Fam_7')) + pass + + def testMeshConvertFromMEDFileGeoType(self): + self.assertEqual(MEDFileMesh.ConvertFromMEDFileGeoType(320),NORM_HEXA20) + + @WriteInTmpDir + def testFieldInt64_0(self): + """ + Small basic test with I/O of field in int64. + """ + fname="Pyfile120.med" + arr = DataArrayDouble([0,1]) + m = MEDCouplingCMesh() ; m.setCoords(arr,arr) ; m.setName("mesh") ; m=m.buildUnstructured() + f = MEDCouplingFieldInt64(ON_CELLS) ; f.setName("field") + v = 1234567890123456 + f.setArray(DataArrayInt64([v])) + f.setMesh(m) + mm = MEDFileUMesh() + mm[0] = m + f1ts = MEDFileInt64Field1TS() + f1ts.setFieldNoProfileSBT(f) + fmts = MEDFileInt64FieldMultiTS() + fmts.pushBackTimeStep(f1ts) + fs = MEDFileFields() + fs.pushField(fmts) + mm.write(fname,2) + fs.write(fname,0) + # + mm = MEDFileMesh.New(fname) + fs = MEDFileFields(fname) + f = fs[0][0].field(mm) + self.assertTrue( isinstance(f,MEDCouplingFieldInt64) ) + self.assertEqual( f.getArray().getIJ(0,0) , v ) + + @WriteInTmpDir + def testNonRegUMeshSubParts(self): + """ + Non regression test focuses on accordance between time stamp and active data structure in MEDFileUMeshAggregateCompute class. + """ + fname = "Pyfile121.med" + m0 = MEDCouplingUMesh("mesh",1) + coords = DataArrayDouble([(0,0),(1,0),(2,0)]) + m0.setCoords(coords) + m0.allocateCells() + m0.insertNextCell(NORM_SEG2,[1,2]) + mm = MEDFileUMesh() + mm[0] = m0 + m1 = MEDCoupling1SGTUMesh(m0.getName(), NORM_POINT1) + m1.setCoords(m0.getCoords()) + m1.setNodalConnectivity(DataArrayInt([1,2])) + m1.setName(m0.getName()) + mm[-1] = m1 + fni = mm.computeFetchedNodeIds() # <- This invokation of const method implies 1SGTU parts computation + mm.zipCoords() # <- This call changes the coords and connectivity + mm.write(fname,2) + # + mm = MEDFileMesh.New(fname) + mm[0].checkConsistency() # <- check that correct DS has been taken at write time into MEDFileUMeshAggregateCompute + self.assertTrue( m0.isEqual(mm[0],1e-12) ) + pass + pass if __name__ == "__main__":