# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2016 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
import unittest
import platform
from math import pi,e,sqrt
-from MEDLoaderDataForTest import MEDLoaderDataForTest
+from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir
+from MEDLoaderDataForTest import TestWriteUMeshesRW1,TestMultiFieldShuffleRW1,GeneratePyfile7,GeneratePyfile10,GeneratePyfile12,GeneratePyfile13,GeneratePyfile14,GeneratePyfile18,GeneratePyfile19
from distutils.version import LooseVersion
import sys
os.close(self.stdoutOld)
class MEDLoaderTest3(unittest.TestCase):
+ @WriteInTmpDir
def testMEDMesh1(self):
+ GeneratePyfile18(self)
fileName="Pyfile18.med"
mname="ExampleOfMultiDimW"
medmesh=MEDFileMesh.New(fileName,mname)
self.assertTrue(m2_0.isEqual(m2_1,1e-12));
pass
+ @WriteInTmpDir
def testMEDMesh2(self):
+ GeneratePyfile10(self)
fileName="Pyfile10.med"
mname="3DToto"
outFileName="MEDFileMesh1.med"
pass
# this tests emulates MEDMEM ( Except that it works ! ) The permutation are NOT taken into account
+ @WriteInTmpDir
def testMEDMesh3(self):
outFileName="MEDFileMesh3.med"
c=DataArrayDouble.New()
pass
# this test is the testMEDMesh3 except that permutation is dealed here
+ @WriteInTmpDir
def testMEDMesh4(self):
outFileName="MEDFileMesh4.med"
c=DataArrayDouble.New()
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);
pass
#testing persistence of retrieved arrays
+ @WriteInTmpDir
def testMEDMesh5(self):
+ GeneratePyfile18(self)
fileName="Pyfile18.med"
mname="ExampleOfMultiDimW"
medmesh=MEDFileUMesh.New(fileName,mname)
self.assertEqual(20,da1.getNumberOfTuples())
pass
- def testMEDMesh6(self):
+ def internalMEDMesh6(self):
outFileName="MEDFileMesh5.med"
m=MEDFileCMesh.New()
m.setTime(-1,-1,2.3)
m1.setTimeUnit(m.getTimeUnit())
m1.setDescription(m.getDescription())
self.assertTrue(m2.isEqual(m1,1e-12));
+
+ @WriteInTmpDir
+ def testMEDMesh6(self):
+ self.internalMEDMesh6()
pass
+ @WriteInTmpDir
def testMEDMesh7(self):
fileName="Pyfile24.med"
m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
pass
#emulation of pointe.med file.
+ @WriteInTmpDir
def testMEDField1(self):
+ TestMultiFieldShuffleRW1(self)
mm=MEDFileMesh.New("Pyfile17.med")
mm.write("Pyfile17_bis.med",2)
ff=MEDFileFieldMultiTS("Pyfile17.med")
pass
#profiles
+ @WriteInTmpDir
def testMEDField2(self):
+ GeneratePyfile19(self)
mm=MEDFileMesh.New("Pyfile19.med")
mm.write("Pyfile19_bis.med",2)
ff=MEDFileFieldMultiTS.New("Pyfile19.med")
pass
#gauss points
+ @WriteInTmpDir
def testMEDField3(self):
+ GeneratePyfile13(self)
mm=MEDFileMesh.New("Pyfile13.med")
mm.write("Pyfile13_bis.med",2)
ff=MEDFileFieldMultiTS.New("Pyfile13.med","MyFirstFieldOnGaussPoint")
pass
#gauss NE
+ @WriteInTmpDir
def testMEDField4(self):
+ GeneratePyfile14(self)
mm=MEDFileMesh.New("Pyfile14.med")
mm.write("Pyfile14_bis.med",2)
ff=MEDFileFieldMultiTS.New("Pyfile14.med","MyFieldOnGaussNE")
pass
# MEDField get/set on pointe.med
+ @WriteInTmpDir
def testMEDField5(self):
+ TestMultiFieldShuffleRW1(self)
ff=MEDFileField1TS.New("Pyfile17.med","MeasureOfMesh_Extruded",1,2)
f=ff.getFieldAtLevel(ON_CELLS,0)
f2=ReadFieldCell("Pyfile17.med","Extruded",0,"MeasureOfMesh_Extruded",1,2)
pass
# MEDField get/set on profiles nodes
+ @WriteInTmpDir
def testMEDField6(self):
+ GeneratePyfile7(self)
ff=MEDFileFieldMultiTS.New("Pyfile7.med","VectorFieldOnNodes")
its=ff.getIterations()
self.assertRaises(InterpKernelException,ff.getFieldAtLevel,ON_CELLS,its[0][0],its[0][1],0)# request on cell and it is not on cells
f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
f2=ReadFieldNode("Pyfile7.med",'3DSurfMesh_1',0,"VectorFieldOnNodes",its[0][0],its[0][1])
self.assertTrue(f.isEqual(f2,1e-12,1e-12))
+ GeneratePyfile19(self)
ff=MEDFileFieldMultiTS.New("Pyfile19.med","VFieldOnNodes")
its=ff.getIterations()
f=ff.getFieldAtLevel(ON_NODES,its[0][0],its[0][1],0)
pass
# MEDField get/set on profiles cells
+ @WriteInTmpDir
def testMEDField7(self):
+ GeneratePyfile12(self)
ff=MEDFileFieldMultiTS.New("Pyfile12.med","VectorFieldOnCells")
its=ff.getIterations()
f=ff.getFieldAtLevel(ON_CELLS,its[0][0],its[0][1],0)
pass
#first test of assignation. No profile and types sorted by type.
+ @WriteInTmpDir
def testMEDField8(self):
fname="Pyfile25.med"
f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
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"
d=MEDFileData.New()
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
fname="Pyfile30.med"
self.assertTrue(pfl.isEqualWithoutConsideringStr(da))
self.assertTrue(vals.isEqual(d,1e-14))
pass
-
+
+ @WriteInTmpDir
def testMEDField10(self):
fname="Pyfile31.med"
m1=MEDLoaderDataForTest.build2DMesh_1()
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):
fname="Pyfile32.med"
m1=MEDLoaderDataForTest.build2DMesh_1()
self.assertTrue(vals.isEqual(d,1e-14))
pass
+ @WriteInTmpDir
def testMEDField12(self):
fname="Pyfile33.med"
m1=MEDLoaderDataForTest.build2DMesh_1()
self.assertTrue(vals.isEqual(d,1e-14))
pass
+ @WriteInTmpDir
def testMEDField13(self):
fname="Pyfile34.med"
m1=MEDLoaderDataForTest.build2DMesh_1()
self.assertTrue(vals.isEqual(d,1e-14))
pass
+ @WriteInTmpDir
def testMEDField14(self):
fname="Pyfile35.med"
m1=MEDLoaderDataForTest.build2DMesh_1()
# Tricky test of the case of in a MED file containing a Field on GAUSS_NE is lying on a profile that is reality represents all the geom entities of a level.
# By default when using setFieldProfile method such profile is not created because it is not useful ! So here a trick is used to force MEDLoader to do that
# for the necessity of the test ! The idea is too create artificially a mesh having one more fictitious cell per type and to roll back right after !
+ @WriteInTmpDir
def testMEDField15(self):
fname="Pyfile36.med"
m0=MEDLoaderDataForTest.build2DMesh_1()
self.assertTrue(f1.getArray().isEqual(f2,1e-12))
pass
# Test for getFieldAtTopLevel method
+ @WriteInTmpDir
def testMEDField16(self):
fname="Pyfile37.med"
f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
pass
# Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
+ @WriteInTmpDir
def testMEDField17(self):
fname="Pyfile39.med"
m1=MEDLoaderDataForTest.build2DMesh_1()
pass
# Non regression test to check that globals are correctly appended on MEDFileFields::setFieldAtPos
+ @WriteInTmpDir
def testMEDField18(self):
fname="Pyfile40.med"
m1=MEDLoaderDataForTest.build2DMesh_1()
self.assertTrue(f4.getArray().isEqual(f1.getArray(),1e-12))
pass
+ @WriteInTmpDir
def testMEDFieldBug1(self):
+ GeneratePyfile13(self)
fname="Pyfile13.med"
d=MEDFileData.New(fname)
self.assertEqual(('Loc_MyFirstFieldOnGaussPoint_NORM_QUAD4_1','Loc_MyFirstFieldOnGaussPoint_NORM_TRI3_0','Loc_MyFirstFieldOnGaussPoint_NORM_TRI6_2'),d.getFields().getFieldAtPos(0).getLocs())
pass
+ @WriteInTmpDir
def testMEDMesh8(self):
m=MEDLoaderDataForTest.build1DMesh_1()
m.convertQuadraticCellsToLinear()
g=mm.getGroupArr(0,"g1")
self.assertTrue(g.isEqual(g1));
pass
-
+
# bug detected by gauthier
+ @WriteInTmpDir
def testMEDLoaderMEDLoaderNSReadFieldDoubleDataInMedFile(self):
fname="Pyfile41.med"
f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
self.assertTrue(f4.isEqual(f2,1e-12,1e-12))
pass
+ @WriteInTmpDir
def testMEDLoaderMultiLevelCellField1(self):
fname="Pyfile42.med"
m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
self.assertEqual(ff2.getFieldSplitedByType(),[(0, [(0, (0, 4), '', '')]), (1, [(0, (4, 84), '', '')])])
pass
+ @WriteInTmpDir
def testFieldOnPflRetrieveOnMdimRelMax1(self):
fname="Pyfile43.med"
m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
del tes0
#
tes1=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
- self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
+ self.assertEqual(ON_CELLS,tes1.getTypeOfField())# it is not a bug even if ON_NODES has been specified
self.assertEqual(0,tes1.getMesh().getMeshDimension())
self.assertEqual(2,tes1.getMesh().getNumberOfCells())
self.assertEqual(135,tes1.getMesh().getNumberOfNodes())
pass
#
tes3=f.getFieldOnMeshAtLevel(ON_NODES,1,m)
- self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been sepecified
+ self.assertEqual(ON_CELLS,tes3.getTypeOfField())# it is not a bug even if ON_NODES has been specified
self.assertEqual(0,tes3.getMesh().getMeshDimension())
self.assertEqual(2,tes3.getMesh().getNumberOfCells())
self.assertEqual(135,tes3.getMesh().getNumberOfNodes())
pass
pass
+ @WriteInTmpDir
def testBuildInnerBoundaryAlongM1Group1(self):
fname="Pyfile44.med"
m=MEDCouplingCMesh.New()
mm.write(fname,2)
pass
+ @WriteInTmpDir
def testBuildInnerBoundaryAlongM1Group2(self):
fname="Pyfile45.med"
m=MEDCouplingCMesh.New()
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
def testBuildInnerBoundaryAlongM1Group3(self):
""" Test buildInnerBoundaryAlongM1Group() with *non-connex* cracks """
fname = "Pyfile73.med"
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)
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):
""" Test case where cells touch the M1 group on some nodes only and not on full edges (triangle mesh for ex)
"""
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())
m_desc, _, _, _, _ = m_bis0.buildDescendingConnectivity()
m_bis0.checkDeepEquivalOnSameNodesWith(mfu.getMeshAtLevel(-1), 2, 9.9999999)
+ @WriteInTmpDir
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,
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)
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)
fname="Pyfile18.med"
+ TestWriteUMeshesRW1(self)
m=MEDFileMesh.New(fname)
m=MEDFileMesh.New(fname,"ExampleOfMultiDimW",-1,-1)
m=MEDFileMesh.New(fname)
m=MEDFileUMesh(fname,"ExampleOfMultiDimW",-1,-1)
m=MEDFileUMesh(fname)
m=MEDFileUMesh()
- self.testMEDMesh6()
+ self.internalMEDMesh6()
m=MEDFileCMesh("MEDFileMesh5.med")
m=MEDFileCMesh("MEDFileMesh5.med","myFirstCartMesh",-1,-1)
m=MEDFileCMesh()
pass
# This is a non regression test. When a field lies partially on a mesh but fully on one of its geometric type.
+ @WriteInTmpDir
def testBugSemiPartialField(self):
fname="Pyfile46.med"
m=MEDLoaderDataForTest.build2DMesh_3()
self.assertTrue(fread2.isEqual(f1,1e-12,1e-12))
pass
+ @WriteInTmpDir
def testUnPolyze1(self):
fname="Pyfile47.med"
mm=MEDLoaderDataForTest.buildMLMeshUnPolyze(self)
mm.setFamilyFieldArr(-1,None)
pass
+ @WriteInTmpDir
def testUnPolyze2(self):
fname="Pyfile48.med"
mfd=MEDFileData.New()
mfd.write(fname,2)
pass
+ @WriteInTmpDir
def testGaussWriteOnPfl1(self):
fname="Pyfile49.med"
fname2="Pyfile50.med"
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)
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'))
pass
# Testing profile on nodes when the profile is identity but not on all nodes.
+ @WriteInTmpDir
def testMEDFieldPflOnNode1(self):
fname="Pyfile51.med"
coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
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):
fname="Pyfile52.med"
coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
self.assertTrue(pfl1_r.isEqual(pfl1))
pass
+ @WriteInTmpDir
def testMEDFileUMeshZipCoords1(self):
m=MEDFileUMesh()
coo=DataArrayDouble(30) ; coo.iota(1.) ; coo.rearrange(3) ; coo.setInfoOnComponents(["aaa [b]","cc [dd]", "e [fff]"])
self.assertTrue(m.getMeshAtLevel(-2).getNodalConnectivityIndex().isEqual(DataArrayInt([0,2,4,6])))
pass
+ @WriteInTmpDir
def testMEDUMeshAddNodeGroup1(self):
fname="Pyfile53.med"
m=MEDFileUMesh()
self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
pass
+ @WriteInTmpDir
def testMEDUMeshAddGroup1(self):
fname="Pyfile54.med"
m=MEDFileUMesh()
self.assertTrue(mm.getGroupArr(-1,"grp0").isEqual(da))
pass
+ @WriteInTmpDir
def testHeapMem1(self):
a=DataArrayInt() ; aa=a.getHeapMemorySize()
a.alloc(0,1)
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)))
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 testCurveLinearMesh1(self):
+ def internalCurveLinearMesh1(self):
fname="Pyfile55.med"
mesh=MEDCouplingCurveLinearMesh();
mesh.setTime(2.3,4,5);
self.assertTrue(m1.getMesh().isEqual(mesh,1e-12))
pass
+ @WriteInTmpDir
+ def testCurveLinearMesh1(self):
+ self.internalCurveLinearMesh1()
+
+ @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")
mm=MEDFileCMesh() ; mm.setMesh(m)
self.assertAlmostEqual(data2.getParams()["B"][1,2].getValue(),567.89,13)
pass
+ @WriteInTmpDir
def testNamesOnCellAndNodesInMeshes1(self):
fname="Pyfile58.med"
fname2="Pyfile59.med"
self.assertTrue(cc.isEqual(ccCpy,1e-12)[0])
pass
+ @WriteInTmpDir
def testToExportInExamples1(self):
m=MEDCouplingCMesh()
arr=DataArrayDouble([0.,1.,2.,3.,4.])
splitOfM1[1].isEqual(DataArrayInt([4,5,7,9,14,15]))
pass
+ @WriteInTmpDir
def testBugCorrection1(self):
fs=MEDFileFields()
fs.resize(3)
self.assertEqual(3,len(fs))
pass
+ @WriteInTmpDir
def testCompareMEDFilesContainingOnlyFieldsOnCell1(self):
f1Name="Pyfile60.med"
f2Name="Pyfile61.med"
pass
pass
+ @WriteInTmpDir
def testNonRegBugNormalizeFamIdsMEDFile1(self):
m=MEDCouplingCMesh()
arr=DataArrayDouble([0.,1.,2.,3.,4.])
pass
pass
pass
-
+
+ @WriteInTmpDir
def testNonRegressionMantis22212ChangeGrpName(self):
fileName="Pyfile62.med"
m2,m1,m0,f2,f1,f0,p,n2,n1,n0,fns,fids,grpns,famIdsPerGrp=MEDLoaderDataForTest.buildMultiLevelMesh_1()
pass
pass
+ @WriteInTmpDir
def testInt32InMEDFileFieldStar1(self):
+ self.internalInt32InMEDFileFieldStar1()
+
+ def internalInt32InMEDFileFieldStar1(self):
fname="Pyfile63.med"
f1=MEDLoaderDataForTest.buildVecFieldOnCells_1();
f1=f1.convertToIntField()
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()
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)
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")
self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
pass
+ @WriteInTmpDir
def testMEDFileFields1(self):
fname="Pyfile64.med"
f1=MEDCouplingFieldDouble(ON_NODES)
pass
# Multi time steps and multi fields management without Globals (profiles, locs) aspects
+ @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
pass
# Multi time steps and multi fields management with Globals (profiles, locs) aspects
+ @WriteInTmpDir
def testMEDFileFields3(self):
fname="Pyfile66.med"
# building a mesh containing 4 tri3 + 5 quad4
fs0.checkGlobsCoherency()
fs0.write(fname,0)
pass
-
+
+ @WriteInTmpDir
def testSplitComponents1(self):
fname="Pyfile67.med"
# building a mesh containing 4 tri3 + 5 quad4
pass
pass
+ @WriteInTmpDir
def testMEDFileFieldConvertTo1(self):
fname="Pyfile68.med"
# building a mesh containing 4 tri3 + 5 quad4
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()
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)
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'))
#
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
+ @WriteInTmpDir
def testMEDFileFieldPartialLoading(self):
fname="Pyfile69.med"
#
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))
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
#
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)
#
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
+ @WriteInTmpDir
def testMEDFileMeshReadSelector1(self):
mrs=MEDFileMeshReadSelector()
self.assertTrue(mrs.isCellFamilyFieldReading() and mrs.isNodeFamilyFieldReading() and mrs.isCellNameFieldReading() and mrs.isNodeNameFieldReading() and mrs.isCellNumFieldReading() and mrs.isNodeNumFieldReading())
mrs.setNodeNumFieldReading(True)
self.assertEqual(mrs.getCode(),63)
pass
-
+
+ @WriteInTmpDir
def testPartialReadOfMeshes(self):
fname="Pyfile70.med"
# building a mesh containing 4 tri3 + 5 quad4
self.assertTrue(mm.getNumberFieldAtLevel(1) is None)
delta4=ref_heap_mem-mm.getHeapMemorySize()
self.assertTrue(delta4<delta3)
- 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)
# this test checks that setFieldProfile perform a check of the array length
# compared to the profile length. This test also checks that mesh attribute of field
# is not used by setFieldProfile (because across this test mesh is equal to None)
+ @WriteInTmpDir
def testCheckCompatibilityPfl1(self):
# building a mesh containing 4 tri3 + 5 quad4
tri=MEDCouplingUMesh("tri",2)
f.setArray(vals)
f1ts.setFieldProfile(f,mm,0,pfl)
pass
-
+
+ @WriteInTmpDir
def testWRMeshWithNoCells(self):
fname="Pyfile71.med"
a=DataArrayDouble(4) ; a.iota()
self.assertTrue(m.getFamilyFieldAtLevel(1).isEqual(DataArrayInt([-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,-2,0,-1,-3,-3,-3])))
pass
+ @WriteInTmpDir
def testWRQPolyg1(self):
fname="Pyfile72.med"
m=MEDCoupling1SGTUMesh("mesh",NORM_QUAD4) ; m.allocateCells()
self.assertTrue(f_read.isEqual(f,1e-12,1e-12))
pass
+ @WriteInTmpDir
def testLoadIfNecessaryOnFromScratchFields0(self):
"""
This test checks that a call to loadArraysIfNecessary works (does nothing) on field data structure whatever its level 1TS, MTS, Fields.
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.
"""
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.
This preparation makes access to internal MEDCouplingMesh pointers whose name must be updated.
self.assertEqual(mm.getMeshAtLevel(0).getName(),"abc")
pass
+ @WriteInTmpDir
def testMEDFileFieldsUnloadArraysWithoutDataLoss1(self):
fileName="Pyfile80.med"
m=MEDCouplingCMesh() ; m.setName("cmesh")
self.assertTrue(f1ts.getUndergroundDataArray().isEqual(DataArrayDouble([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20.,21.,22.,23.,24.]),1e-12))
pass
+ @WriteInTmpDir
def testMEDFileUMeshLoadPart1(self):
- """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specfied using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
+ """ This method tests MEDFileUMesh.LoadPart that loads only a part of a specified mesh in a MED file. The part is specified using a slice of cell ids. Only nodes on which cells lies are loaded to reduce at most the amount of
memory of the returned instance.
"""
fileName="Pyfile81.med"
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])
self.assertTrue(mm2.getNameFieldAtLevel(1).isEqual(namesNodes[:18]))
pass
+ @WriteInTmpDir
def testMEDFileFieldsLoadPart1(self):
"""This method tests partial loading on fields on CELL. It is the same principle than those in testMEDFileUMeshLoadPart1.
"""
self.assertTrue(fs[1][0].getUndergroundDataArray().isEqual(arr,1e-12))
pass
+ @WriteInTmpDir
def testMEDFileWithoutCells1(self):
fileName="Pyfile83.med"
coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
self.assertTrue(mm.getCoords().isEqual(coo,1e-12))
pass
+ @WriteInTmpDir
def testZipCoordsWithLoadPart1(self):
""" Test close to Pyfile82.med except that here zipCoords on MEDFileUMesh is invoked here to see if the PartDef is correctly updated.
"""
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
def testMEDFileCMeshSetGroupsAtLevel(self):
""" Non regression test to check that setGroupsAtLevel is available with MEDFileCMesh.
"""
self.assertTrue(mm.getFamilyFieldAtLevel(0).isEqual(DataArrayInt([-1,-2,-1,-2,-2,-2,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1])))
pass
+ @WriteInTmpDir
def testMEDFileUMeshBuildExtrudedMesh1(self):
""" New functionality of MEDFileUMesh.buildExtrudedMesh."""
fileName="Pyfile85.med"
pass
@unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
+ @WriteInTmpDir
def testMEDFileUMeshPickeling1(self):
outFileName="Pyfile86.med"
c=DataArrayDouble([-0.3,-0.3, 0.2,-0.3, 0.7,-0.3, -0.3,0.2, 0.2,0.2, 0.7,0.2, -0.3,0.7, 0.2,0.7, 0.7,0.7 ],9,2)
self.assertEqual(mm2.getAxisType(),AX_CYL)
pass
+ @WriteInTmpDir
def testMEDFileFieldsLoadSpecificEntities1(self):
nbNodes=11
fieldName="myField"
pass
pass
+ @WriteInTmpDir
def testMEDFileLotsOfTSRW1(self):
nbNodes=11
fieldName="myField"
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."""
fileName="Pyfile89.med"
self.assertEqual(mm.getFamilyId(elt),eltId)
pass
+ @WriteInTmpDir
def testNonRegrCMeshSetFieldPfl1(self):
""" Non regression test. For structured mesh, push a false partial field in MEDFileField1TS using setFieldProfile."""
ff=MEDFileField1TS()
self.assertTrue(field.isEqual(field2,1e-12,1e-12))
pass
+ @WriteInTmpDir
def testMEDFileUMeshLinearToQuadraticAndRev1(self):
meshName="mesh"
fileName="Pyfile90.med"
self.assertTrue(mm.isEqual(mmOut2,1e-12)[0])
pass
+ @WriteInTmpDir
def testMEDFileMeshAddGroup1(self):
m=MEDCouplingCMesh()
arrX=DataArrayDouble(9) ; arrX.iota()
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"
coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
self.assertRaises( InterpKernelException, jointsR.destroyJointAtPos,1)
jointsR.destroyJointAtPos(0)
pass
-
+
+ @WriteInTmpDir
def testMEDFileJoint2(self):
fileNameWr="Pyfile93.med"
coo=DataArrayDouble([(0,0,0),(1,0,0),(2,0,0)])
self.assertTrue( jointR2.isEqual( two_joint ))
pass
+ @WriteInTmpDir
def testMEDFileJoint1(self):
node_correspond=MEDFileJointCorrespondence(DataArrayInt([1,2,3,4,5,6,7,8]))
cell_correspond=MEDFileJointCorrespondence(DataArrayInt([9,10,11,12]),NORM_TRI3,NORM_TRI3)
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")
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 ?")
+ @WriteInTmpDir
def testMEDFileSafeCall0(self):
""" 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):
#
pass
+ @WriteInTmpDir
def testUnivStatus1(self):
""" Non regression test to check the effectiveness of univ write status."""
fname="Pyfile95.med"
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]))
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)
self.assertTrue(mesh.isEqual(mm2,1e-12)[0])
pass
+ @WriteInTmpDir
def testMEDFileEquivalence1(self):
""" First check of equivalence implementation in MEDFileMesh"""
fileName="Pyfile97.med"
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))
self.assertTrue(mm.isEqual(mm3,1e-12)[0])
pass
+ @WriteInTmpDir
def testMEDFileForFamiliesPlayer1(self):
"""Non regression bug EDF11911. For serial killers using same family name to store both cells and nodes ! Only sky is the limit."""
fileName="Pyfile98.med"
self.assertEqual(mm2.getFamiliesIdsOnGroup("RID"),(-4,3))# <- very important too !
pass
+ @WriteInTmpDir
def testCartesianizer1(self):
""" This test is advanced to be sure that no unnecessary copies had been made during cartesianization process. """
# UMesh non cart
self.assertTrue(mm.getHiddenCppPointer()==mm2.getHiddenCppPointer()) # optimization
pass
+ @WriteInTmpDir
def testCheckCoherency(self):
m2 = MEDCouplingUMesh("2d", 2)
m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
mum.setNameFieldAtLevel(-1, arr); arr.reAlloc(35);
self.assertRaises(InterpKernelException, mum.checkConsistency)
+ @WriteInTmpDir
def testCheckSMESHConsistency(self):
m2 = MEDCouplingUMesh("2d", 2)
m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
mum.checkSMESHConsistency()
pass
+ @WriteInTmpDir
def testClearNodeAndCellNumbers(self):
m2 = MEDCouplingUMesh("2d", 2)
m2.setCoords(DataArrayDouble([(0.0, 1.0)] * 4, 4,2)) # whatever
mum.checkSMESHConsistency()
pass
+ @WriteInTmpDir
def testCMeshSetFamilyFieldArrNull(self):
meshName="mesh"
fname="Pyfile99.med"
self.assertTrue(mm2.getFamilyFieldAtLevel(1) is None)
pass
+ @WriteInTmpDir
def testAppendFieldProfileOnIntField(self):
fname="Pyfile100.med"
arrX=DataArrayDouble([0,1,2,3])
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)
self.assertEqual(ftest2.getMesh().getNumberOfCells(),len(arr))
pass
+ @WriteInTmpDir
def testMEDFileFieldEasyField1(self):
"""Check for all spatial discretization of field (cells,nodes,elno,gauss) for double field that all is OK. Here no profile and only top level is considered."""
## Basic test on cells on top level
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.
Check for all spatial discretization of field (cells,nodes,elno,gauss) for int field that all is OK. Here no profile and only top level is considered."""
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()
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)
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)
#
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)
#
self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
pass
+ @WriteInTmpDir
def testMEDFileFieldEasyField3(self):
"""Here a multi level mesh. And field on cells lying on different level of this mesh. Show how "field" method deal with that. Here on field double are considered."""
fname="Pyfile103.med"
self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,1e-12))
pass
+ @WriteInTmpDir
def testMEDFileFieldEasyField4(self):
""" Same than testMEDFileFieldEasyField3 but with integers"""
fname="Pyfile104.med"
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()
# 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)
#
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)
self.assertTrue(f4.isEqual(f1ts.field(mm),1e-12,0))
pass
+ @WriteInTmpDir
def testMEDFileFieldEasyField5(self):
"""More and more difficult now look at how profiles are managed by "field" method."""
fname="Pyfile105.med"
self.assertTrue(f.isEqual(f1ts.field(mm),1e-12,1e-12))
pass
+ @WriteInTmpDir
def testExtractPart1(self):
coo=DataArrayDouble([(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)])
meshName="mesh"
pass
pass
+ @WriteInTmpDir
def testSymmetryPlusAggregationMFD1(self):
""" Testing of MEDFileData::Aggregate and MEDFileUMesh::Aggregate and MEDFileUMesh::getAllDistributionOfType """
fname1="Pyfile106_1.med"
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"
arrX=DataArrayDouble([0,1,2,3]) ; arrY=DataArrayDouble([0,1,2,3,4]) ; arrZ=DataArrayDouble([0,1,2,3,4,5])
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")
- @unittest.skipUnless(LooseVersion(MEDFileVersionStr())<LooseVersion('4.0.0'),
- "This test is not compatible with MEDFile version 4.0.0 and above")
+ @WriteInTmpDir
def testWriteInto30(self):
fname="Pyfile108.med"
fname2="Pyfile109.med"
mm=MEDFileUMesh() ; mm[0]=m
mm.setFamilyId("FAMILLE_ZERO",0)
#
- mm.write30(fname,2)
- assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,0]) # checks that just written MED file has a version == 3.0.x
+ mm.write33(fname,2)
+ assert(LooseVersion(MEDFileVersionOfFileStr(fname)).version[:2]==[3,3]) # checks that just written MED file has a version == 3.0.x
mm2=MEDFileUMesh(fname)
self.assertTrue(mm.isEqual(mm2,1e-12))
#
pass
@unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
+ @WriteInTmpDir
def testPickelizationOfMEDFileObjects1(self):
fname="Pyfile110.med"
coo=DataArrayDouble([0.,0.,0.5,0.,1.,0.,0.,0.5,0.5,0.5,1.,0.5,0.,1.,0.5,1.,1.,1.],9,2)
pass
@unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
+ @WriteInTmpDir
def testPickelizationOfMEDFileObjects2(self):
# CMesh
- self.testMEDMesh6() # generates MEDFileMesh5.med file
+ self.internalMEDMesh6() # generates MEDFileMesh5.med file
mm=MEDFileMesh.New("MEDFileMesh5.med")
self.assertTrue(isinstance(mm,MEDFileCMesh))
st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
self.assertTrue(isinstance(mm2,MEDFileCMesh))
self.assertTrue(mm.getMesh().isEqual(mm2.getMesh(),1e-12))
# CurveLinear
- self.testCurveLinearMesh1() # generates Pyfile55.med
+ self.internalCurveLinearMesh1() # generates Pyfile55.med
mm=MEDFileMesh.New("Pyfile55.med")
self.assertTrue(isinstance(mm,MEDFileCurveLinearMesh))
st=pickle.dumps(mm,pickle.HIGHEST_PROTOCOL)
mm3=pickle.loads(st)
self.assertTrue(isinstance(mm3,MEDFileCurveLinearMesh))
self.assertTrue(mm.getMesh().isEqual(mm3.getMesh(),1e-12))
- self.testInt32InMEDFileFieldStar1()# generates Pyfile63.med
+ self.internalInt32InMEDFileFieldStar1()# generates Pyfile63.med
# MEDFileIntFieldMultiTS
fs4=MEDFileFields("Pyfile63.med")
ms4=MEDFileMeshes("Pyfile63.med")
self.assertTrue(isinstance(f1ts6,MEDFileIntField1TS))
self.assertTrue(f1ts6.field(ms4[0]).isEqual((fs4[0][0]).field(ms4[0]),1e-12,0))
# MEDFileParameters
- self.testParameters1()# generates Pyfile56.med
+ self.internalParameters1()# generates Pyfile56.med
params=MEDFileParameters("Pyfile56.med")
st=pickle.dumps(params,pickle.HIGHEST_PROTOCOL)
params7=pickle.loads(st)
pass
pass
+ @WriteInTmpDir
def testGlobalNumOnNodes1(self):
"""Test global number on nodes here. Used by partitionners."""
fname="Pyfile112.med"
self.assertTrue(mm.isEqual(mm2,1e-12)[0])
pass
+ @WriteInTmpDir
def testPartialReadOfEntities1(self):
"""Test for advanced API on read to speed up read phase for users with "huge" number of time steps (more than 10 000)."""
fname="Pyfile113.med"
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 :)"""
fname="Pyfile114.med"
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)
self.assertTrue(not fs.changeMeshNames([('3DSurfMesh_1','3DSurfMesh')]))
pass
+ @WriteInTmpDir
def testPenta18_1(self):
"""EDF8478 : Test of read/write of penta18"""
fname="Pyfile115.med"
self.assertEqual(f3.getMesh().getTypeOfCell(0),NORM_PENTA18)
pass
- @unittest.skipUnless('linux'==platform.system().lower(),"stderr redirection not ported on Windows ?")
- @unittest.skipUnless(LooseVersion(MEDFileVersionStr())<LooseVersion('4.0.0'),
- "This test is not compatible with MEDFile version 4.0.0 and above")
- def testMedFileCapabilityToCryOnNewFeatureWritingIntoOldFiles(self):
- fname="Pyfile116.med"
- errfname="Pyfile116.err"
- c=DataArrayDouble([0,1,2,3])
- m=MEDCouplingCMesh()
- m.setCoords(c,c)
- m=m.buildUnstructured()
- m.setName("mesh")
- mm=MEDFileUMesh()
- mm[0]=m
- f=MEDCouplingFieldInt(ON_CELLS)
- f.setMesh(m) ; arr2=DataArrayInt(m.getNumberOfCells()) ; arr2.iota()
- f.setArray(arr2)
- f.setName("field")
- f1ts=MEDFileIntField1TS()
- f1ts.setFieldNoProfileSBT(f)
- mm.write30(fname,2)
- f1ts.write30(fname,0)
- #
- f=MEDCouplingFieldFloat(ON_CELLS)
- f.setMesh(m) ; arr2=DataArrayFloat(m.getNumberOfCells()) ; arr2.iota()
- f.setArray(arr2)
- f.setName("field2")
- f1ts=MEDFileFloatField1TS()
- f1ts.setFieldNoProfileSBT(f)
- #
- import os,gc
- tmp=StdOutRedirect(errfname)
- self.assertRaises(InterpKernelException,f1ts.write30,fname,0)
- del tmp
- gc.collect(0)
- if os.path.exists(errfname):
- os.remove(errfname)
- pass
-
+ @WriteInTmpDir
def testFieldsLinearToQuadratic(self):
fname="Pyfile117.med"
arr=DataArrayDouble([0,1])
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])
self.assertTrue(fToTest.getArray().isEqual(2*dataExp2,1e-12))
pass
+ @WriteInTmpDir
def testFieldsLinearToQuadratic2(self):
"""Same than testFieldsLinearToQuadratic but with profile on NODES"""
+ GeneratePyfile18(self)
fname="Pyfile118.med"
arr=DataArrayDouble([0,1])
m=MEDCouplingCMesh();
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
def testSetFieldProfileFlatly1(self):
""" Sometimes for downstream code fan of profiles, profile are requested unconditionally. setFieldProfile try to reduce at most profile usage. So setFieldProfileFlatly has been added to always create
a profile."""
self.assertTrue(f1ts.getProfile("pfl_NORM_QUAD4").isIota(81))
pass
+ @WriteInTmpDir
def testRmGroupAtSpeLevelAndMultiLevGrpCreation(self):
""" Here multi level groups are created"""
arr=DataArrayDouble(11) ; arr.iota()
self.assertTrue(mm.getGroupArr(0,"grp1").isEqual(grp1))
self.assertTrue(mm.getGroupArr(-1,"grp2").isEqual(grp2))
pass
-
+
+ @WriteInTmpDir
+ def testYutaka(self):
+ """ Thank you to Yutaka Nishizawa for having report this bug. At level -1, adding a first group on all entities leads to a group lying on family 0...
+ Then rearrange method removes unused entites by putting 0 on them -> Previously group has been modified by rearrange. Should not !"""
+ mn="mesh"
+ m=MEDCouplingCMesh()
+ arr=DataArrayDouble(4) ; arr.iota()
+ m.setCoords(arr,arr,arr)
+ m=m.buildUnstructured()
+ m.setName(mn)
+ #
+ m=m.buildUnstructured()
+ m1=m.buildDescendingConnectivity()[0]
+ #
+ mm=MEDFileUMesh()
+ mm[0]=m
+ mm[-1]=m1
+ #
+ grp0=DataArrayInt([0,1,2]) ; grp0.setName("grp0")
+ mm.addGroup(0,grp0)
+ grp1=DataArrayInt([3,4,5,6]) ; grp1.setName("grp1")
+ mm.addGroup(0,grp1)
+ grp2=DataArrayInt([7,8,9]) ; grp2.setName("grp2")
+ mm.addGroup(0,grp2)
+ grp3=DataArrayInt.Range(0,m1.getNumberOfCells(),1) ; grp3.setName("grp3")
+ mm.addGroup(-1,grp3)
+ self.assertNotIn(0,mm.getFamiliesIdsOnGroup("grp3")) # bug was here !
+ grp4=DataArrayInt([3,5,8,10]) ; grp4.setName("grp4")
+ mm.addNodeGroup(grp4)
+ mm.rearrangeFamilies()
+ self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp0"),(0,))
+ self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp1"),(0,))
+ self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp2"),(0,))
+ self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp3"),(-1,))
+ self.assertEqual(mm.getGrpNonEmptyLevelsExt("grp4"),(1,))
+
+ for grp in [grp0,grp1,grp2,grp3,grp4]:
+ self.assertTrue(mm.getGroupArr(mm.getGrpNonEmptyLevelsExt(grp.getName())[0],grp.getName()).isEqual(grp))
+ pass
+ pass
+
+ @WriteInTmpDir
+ def testContxtMger1TS(self):
+ fname="Pyfile119.med"
+ coo=DataArrayDouble(1000) ; coo.iota()
+ m=MEDCouplingUMesh.Build0DMeshFromCoords(coo)
+ m.setName("mesh")
+ WriteMesh(fname,m,True)
+ f=MEDCouplingFieldDouble(ON_CELLS)
+ f.setMesh(m)
+ f.setName("Field")
+ arr=DataArrayDouble(m.getNumberOfCells())
+ f.setArray(arr)
+ f.checkConsistencyLight()
+ for i in range(10):
+ arr[:]=float(i+1)
+ f.setTime(float(i),i,0)
+ WriteFieldUsingAlreadyWrittenMesh(fname,f)
+ pass
+ #
+ mm=MEDFileMesh.New(fname)
+ fmts=MEDFileFieldMultiTS(fname,False)
+ refSize=fmts.getHeapMemorySize()
+ for f1ts in fmts:
+ with f1ts:
+ f=f1ts.field(mm)
+ pass
+ pass
+ 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__":