# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2013 CEA/DEN, EDF R&D
+# Copyright (C) 2007-2015 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
# License as published by the Free Software Foundation; either
-# version 2.1 of the License.
+# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
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
medFile = "SauvLoaderTest.med"
- sr=SauvReader.New(sauvFile);
+ sr=SauvReader(sauvFile);
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 )
# write pointeMed to SAUV
sauvFile = "SauvLoaderTest.sauv"
- sw=SauvWriter.New();
+ sw=SauvWriter();
sw.setMEDFileDS(pointeMed);
sw.write(sauvFile);
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)
+ um1 = m.getMeshAtLevel(-1)
self.assertEqual(2, um1.getNumberOfCellsWithType( NORM_TRI3 ))
- pointeUM0 = pointeMedMesh.getGenMeshAtLevel(0)
+ 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)
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'
self.assertTrue( f2.isEqual( f, 1e-12, 1e-12 ))
del sr
os.remove( sauvFile )
+ pass
+
+ def testSauvWriterGroupWithOneFamily(self):
+ """
+ This test checks an option for sauv writing. It is requested here to copy a group from a family if a group is lying on a single family.
+ """
+ import re
+ mfd=MEDLoaderDataForTest.buildAMEDFileDataWithGroupOnOneFamilyForSauv()
+ sauvFile = "mesh.sauv"
+ sw=SauvWriter.New()
+ sw.setMEDFileDS(mfd)
+ self.assertTrue(not sw.getCpyGrpIfOnASingleFamilyStatus())
+ 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):
+ match_pile = pattern_pile.match(line)
+ if match_pile:
+ number=int(match_pile.group("number"))
+ if number == 1:
+ nbnamed=int(match_pile.group("nbnamed"))
+ nbobjects=int(match_pile.group("nbobjects"))
+ break
+ pass
+ line=f.readline()
+ pass
+ # Skipping the objects names
+ f.readline()
+ # Skipping the objects ids
+ f.readline()
+ # Looking for each sub-mesh header
+ line = f.readline()
+ cur_object=0
+ while(line and cur_object < nbobjects):
+ match_header=pattern_header.match(line)
+ if match_header:
+ cell_type=int(match_header.group("type"))
+ nb_subs=int(match_header.group("nbsubs"))
+ # Looking for a compound object
+ if cell_type == 0:
+ # Testing if there is only one component
+ self.assertTrue(nb_subs > 1)
+ else:
+ f.readline()
+ f.readline()
+ cur_object = cur_object + 1
+ pass
+ pass
+ line=f.readline()
+ pass
+ f.close()
+ os.remove(sauvFile)
pass
+
pass
unittest.main()