# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2014 CEA/DEN, EDF R&D
+# Copyright (C) 2007-2016 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
class SauvLoaderTest(unittest.TestCase):
+ def __getResourcesDirectory(self):
+ med_root_dir = os.getenv("MEDCOUPLING_ROOT_DIR")
+ if med_root_dir:
+ pth = os.path.join( os.getenv("MEDCOUPLING_ROOT_DIR"), "share","resources","med")
+ if os.path.exists(pth):
+ return pth
+ current_dir = os.path.dirname(os.path.realpath(__file__))
+ pth = os.path.join(current_dir, "..", "..", "..", "resources")
+ if not os.path.exists(pth):
+ raise Exception("SauvLoaderTest: Unable to get resource directory")
+ return pth
+ pass
+
def testSauv2Med(self):
# get a file containing all types of readable piles
- self.assertTrue( os.getenv("MED_ROOT_DIR") )
- sauvFile = os.path.join( os.getenv("MED_ROOT_DIR"), "share","salome",
- "resources","med","allPillesTest.sauv")
+ sauvFile = os.path.join( self.__getResourcesDirectory(),"allPillesTest.sauv")
self.assertTrue( os.access( sauvFile, os.F_OK))
# read SAUV and write MED
d2=sr.loadInMEDFileDS();
d2.write(medFile,0);
- # check
+ # check
self.assertEqual(1,d2.getNumberOfMeshes())
self.assertEqual(8+97,d2.getNumberOfFields())
mm = d2.getMeshes()
def testMed2Sauv(self):
# read pointe.med
- self.assertTrue( os.getenv("MED_ROOT_DIR") )
- medFile = os.path.join( os.getenv("MED_ROOT_DIR"), "share","salome",
- "resources","med","pointe.med")
+ medFile = os.path.join(self.__getResourcesDirectory(),"pointe.med")
self.assertTrue( os.access( medFile, os.F_OK))
pointeMed = MEDFileData.New( medFile )
#remove fieldnodeint
pointeFields = pointeMed.getFields()
- for i in range( pointeFields.getNumberOfFields() ):
+ for i in range(pointeFields.getNumberOfFields()):
if pointeFields.getFieldAtPos(i).getName() == "fieldnodeint":
pointeFields.destroyFieldAtPos( i )
break
self.assertTrue( "groupe5" in groups )
self.assertTrue( "maa1" in groups )
self.assertEqual(16,m.getSizeAtLevel(0))
- um0 = m.getGenMeshAtLevel(0)
+ um0 = m.getMeshAtLevel(0)
self.assertEqual(12, um0.getNumberOfCellsWithType( NORM_TETRA4 ))
self.assertEqual(2, um0.getNumberOfCellsWithType( NORM_PYRA5 ))
self.assertEqual(2, um0.getNumberOfCellsWithType( NORM_HEXA8 ))
- um1 = m.getGenMeshAtLevel(-1)
- self.assertEqual(2, um1.getNumberOfCellsWithType( NORM_TRI3 ))
- pointeUM0 = pointeMedMesh.getGenMeshAtLevel(0)
+ um1 = m.getMeshAtLevel(-1)
+ #self.assertEqual(2, um1.getNumberOfCellsWithType( NORM_TRI3 ))
+ self.assertEqual(1, um1.getNumberOfCellsWithType( NORM_TRI3 ))
+ pointeUM0 = pointeMedMesh.getMeshAtLevel(0)
self.assertTrue(m.getCoords().isEqualWithoutConsideringStr(pointeMedMesh.getCoords(),1e-12))
- self.assertEqual( um0.getMeasureField(0).accumulate(0),
- pointeUM0.getMeasureField(0).accumulate(0),1e-12)
+ self.assertEqual( um0.getMeasureField(False).accumulate(0),
+ pointeUM0.getMeasureField(False).accumulate(0),1e-12)
# check fields
# fieldnodedouble
fieldnodedoubleTS1 = pointeMed.getFields().getFieldWithName("fieldnodedouble")
self.assertEqual( fieldnodedoubleTS1.getNumberOfTS(), fieldnodedoubleTS2.getNumberOfTS())
io1 = fieldnodedoubleTS1.getIterations()
io2 = fieldnodedoubleTS2.getIterations()
- for i in range(fieldnodedoubleTS1.getNumberOfTS() ):
+ for i in range(fieldnodedoubleTS1.getNumberOfTS()):
fnd1 = fieldnodedoubleTS1.getFieldOnMeshAtLevel(ON_NODES, io1[i][0],io1[i][1],pointeUM0)
fnd2 = fieldnodedoubleTS2.getFieldOnMeshAtLevel(ON_NODES, io2[i][0],io2[i][1],um0)
self.assertTrue( fnd1.getArray().isEqual( fnd2.getArray(), 1e-12 ))
self.assertEqual( fieldnodedoubleTS1.getNumberOfTS(), fieldnodedoubleTS2.getNumberOfTS())
io1 = fieldnodedoubleTS1.getIterations()
io2 = fieldnodedoubleTS2.getIterations()
- for i in range(fieldnodedoubleTS1.getNumberOfTS() ):
+ for i in range(fieldnodedoubleTS1.getNumberOfTS()):
fnd1 = fieldnodedoubleTS1.getFieldOnMeshAtLevel(ON_CELLS, io1[i][0],io1[i][1],pointeUM0)
fnd2 = fieldnodedoubleTS2.getFieldOnMeshAtLevel(ON_CELLS, io2[i][0],io2[i][1],um0)
self.assertAlmostEqual( fnd1.accumulate(0), fnd2.accumulate(0) )
os.remove(sauvFile)
pass
- @unittest.skipUnless(MEDLoader.HasXDR(),"requires XDR")
+ def testSauvReaderOnBigMesh(self):
+ # create a box with 1 million cells
+ mesh_dim = 3
+ nb_segs = [100, 100, 100]
+ box_sizes = [1., 1., 1.]
+ compo_names = ["x", "y", "z"]
+ box_steps = [box_sizes[i]/nb_segs[i] for i in range(mesh_dim)]
+ mesh = MEDCouplingCMesh.New("Mesh_box")
+
+ # axes coords
+ axes_arrays = []
+ for i in range(mesh_dim):
+ axe_coords = [j*box_steps[i] for j in range(nb_segs[i]+1)]
+
+ axe_arr = DataArrayDouble.New(axe_coords)
+ axe_arr.setInfoOnComponent(0,compo_names[i])
+
+ axes_arrays.append(axe_arr)
+
+ mesh.setCoords(*axes_arrays)
+ umesh = mesh.buildUnstructured()
+
+ m=MEDFileUMesh.New()
+ m.setMeshAtLevel(0,umesh)
+
+ # MED file data
+ ms=MEDFileMeshes.New()
+ ms.setMeshAtPos(0,m)
+ meddata=MEDFileData.New()
+ meddata.setMeshes(ms)
+
+ # write to SAUV
+ sauvFile = "box.sauv"
+ sw=SauvWriter();
+ sw.setMEDFileDS(meddata);
+ sw.write(sauvFile);
+
+ # read SAUV
+ sr=SauvReader(sauvFile);
+ d2=sr.loadInMEDFileDS();
+ mm = d2.getMeshes()
+ m = mm.getMeshAtPos(0)
+
+ # check
+ coords = m.getCoords()
+ nb_coords_values = coords.getNbOfElems()
+ nb_coords_values_expected = mesh_dim*((nb_segs[0]+1)*(nb_segs[1]+1)*(nb_segs[2]+1))
+ self.assertEqual(nb_coords_values, nb_coords_values_expected)
+
+ os.remove( sauvFile )
+ pass
+
+ @unittest.skipUnless(HasXDR(),"requires XDR")
def testMissingGroups(self):
"""test for issue 0021749: [CEA 601] Some missing groups in mesh after reading a SAUV file with SauvReader."""
- self.assertTrue( os.getenv("MED_ROOT_DIR") )
- sauvFile = os.path.join( os.getenv("MED_ROOT_DIR"), "share","salome",
- "resources","med","BDC-714.sauv")
+ sauvFile = os.path.join(self.__getResourcesDirectory(),"BDC-714.sauv")
self.assertTrue( os.access( sauvFile, os.F_OK))
name_of_group_on_cells='Slice10:ABSORBER'
name_of_group_on_cells2='Slice10:00LR'
wgt=[0.3,0.3,0.3,0.3,0.4,0.4,0.4,0.4,0.7]
f.setGaussLocalizationOnType(NORM_QUAD8,refCoo,gpCoo,wgt)
f.setName("SIGT")
- f.checkCoherency()
+ f.checkConsistencyLight()
#
mm=MEDFileUMesh()
mm.setMeshAtLevel(0,m)
sw.setCpyGrpIfOnASingleFamilyStatus(True)
self.assertTrue(sw.getCpyGrpIfOnASingleFamilyStatus())
sw.write(sauvFile)
-
+
f = open(sauvFile)
# String pattern for the header of the sub meshes record ("PILE" number, number of named objects, number of objects)
pattern_pile= re.compile(r'\sPILE\sNUMERO\s+(?P<number>[0-9]+)NBRE\sOBJETS\sNOMMES\s+(?P<nbnamed>[0-9]+)NBRE\sOBJETS\s+(?P<nbobjects>[0-9]+)')
# String pattern for a sub mesh header (cell type, number of components and three numbers)
pattern_header=re.compile(r'\s+(?P<type>[0-9]+)\s+(?P<nbsubs>[0-9]+)\s+[0-9]+\s+[0-9]+\s+[0-9]+')
-
+
nbobjects=0
line = f.readline()
while(line):
pass
line=f.readline()
pass
-
+
# Skipping the objects names
f.readline()
# Skipping the objects ids
f.readline()
- # Looking for each sub-mesh header
+ # Looking for each sub-mesh header
line = f.readline()
cur_object=0
while(line and cur_object < nbobjects):