X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDLoader%2FSwig%2FSauvLoaderTest.py;h=c988c95f38f0c485586f9b9278f70b17479b2480;hb=dd75474d950baf8ff862b03cb1685f2a2d562846;hp=3e0a45fcfbf9ffef56326b8e725c8b7ea7868803;hpb=46b819946914fdf15215ad330f101d1bba5edc5b;p=tools%2Fmedcoupling.git diff --git a/src/MEDLoader/Swig/SauvLoaderTest.py b/src/MEDLoader/Swig/SauvLoaderTest.py index 3e0a45fcf..c988c95f3 100644 --- a/src/MEDLoader/Swig/SauvLoaderTest.py +++ b/src/MEDLoader/Swig/SauvLoaderTest.py @@ -1,5 +1,5 @@ # -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2015 CEA/DEN, EDF R&D +# Copyright (C) 2007-2020 CEA/DEN, EDF R&D # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -21,7 +21,7 @@ from MEDLoader import * import unittest, os -from MEDLoaderDataForTest import MEDLoaderDataForTest +from MEDLoaderDataForTest import MEDLoaderDataForTest,WriteInTmpDir class SauvLoaderTest(unittest.TestCase): @@ -37,7 +37,8 @@ class SauvLoaderTest(unittest.TestCase): raise Exception("SauvLoaderTest: Unable to get resource directory") return pth pass - + + @WriteInTmpDir def testSauv2Med(self): # get a file containing all types of readable piles sauvFile = os.path.join( self.__getResourcesDirectory(),"allPillesTest.sauv") @@ -59,6 +60,7 @@ class SauvLoaderTest(unittest.TestCase): os.remove( medFile ) pass + @WriteInTmpDir def testMed2Sauv(self): # read pointe.med medFile = os.path.join(self.__getResourcesDirectory(),"pointe.med") @@ -97,7 +99,7 @@ class SauvLoaderTest(unittest.TestCase): #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 @@ -125,16 +127,17 @@ class SauvLoaderTest(unittest.TestCase): 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") @@ -143,7 +146,7 @@ class SauvLoaderTest(unittest.TestCase): 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 )) @@ -154,7 +157,7 @@ class SauvLoaderTest(unittest.TestCase): 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) ) @@ -170,6 +173,7 @@ class SauvLoaderTest(unittest.TestCase): os.remove( sauvFile ) pass + @WriteInTmpDir def testSauv2MedWONodeFamilyNum(self): """test for issue 0021673: [CEA 566] Bug in SauvWriter when writing meshes having no family ids on nodes.""" @@ -207,6 +211,7 @@ class SauvLoaderTest(unittest.TestCase): os.remove( medFile ) pass + @WriteInTmpDir def testSauv2MedOnPipe1D(self): """test for issue 0021745: [CEA 600] Some missing groups in mesh after reading a SAUV file with SauvReader.""" sauvFile="Test_sauve_1D.sauv" @@ -247,7 +252,61 @@ class SauvLoaderTest(unittest.TestCase): os.remove(sauvFile) pass - @unittest.skipUnless(MEDLoader.HasXDR(),"requires XDR") + @WriteInTmpDir + 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") + @WriteInTmpDir def testMissingGroups(self): """test for issue 0021749: [CEA 601] Some missing groups in mesh after reading a SAUV file with SauvReader.""" sauvFile = os.path.join(self.__getResourcesDirectory(),"BDC-714.sauv") @@ -269,6 +328,52 @@ class SauvLoaderTest(unittest.TestCase): self.assertTrue(ids1.isEqual(ids2)) pass + @unittest.skipUnless(HasXDR(),"requires XDR") + @WriteInTmpDir + def testReadSauvXDRCastem17(self): + """test reading Castem17 XDR sauv with 'ENREGISTREMENT DE TYPE 8'""" + sauvFile = os.path.join(self.__getResourcesDirectory(),"castem17_result_xdr.sauv") + self.assertTrue( os.access( sauvFile, os.F_OK)) + sr=SauvReader.New(sauvFile) + mfd2=sr.loadInMEDFileDS() + mfMesh=mfd2.getMeshes()[0] + umesh0 = mfMesh.getMeshAtLevel(0) + # + self.assertEqual(2,umesh0.getNumberOfCellsWithType( NORM_HEXA8 )) + self.assertEqual(12,umesh0.getNumberOfNodes()) + # + mfField=mfd2.getFields().getFieldWithName("TEMP1") + iterations = mfField.getIterations() + field0 = mfField.getFieldOnMeshAtLevel(ON_NODES, iterations[0][0],iterations[0][1],umesh0) + fieldArray = field0.getArray() + expectedValues = [238.46153846153845]*4 + [169.23076923076923]*4 + [100]*4 + expectedArray = DataArrayDouble(expectedValues) + self.assertTrue( fieldArray.isEqualWithoutConsideringStr( expectedArray, 1e-12 )) + pass + + @WriteInTmpDir + def testReadSauvAsciiCastem17(self): + """test reading Castem17 ascii sauv with 'ENREGISTREMENT DE TYPE 8'""" + sauvFile = os.path.join(self.__getResourcesDirectory(),"castem17_result_ascii.sauv") + self.assertTrue( os.access( sauvFile, os.F_OK)) + sr=SauvReader.New(sauvFile) + mfd2=sr.loadInMEDFileDS() + mfMesh=mfd2.getMeshes()[0] + umesh0 = mfMesh.getMeshAtLevel(0) + # + self.assertEqual(2,umesh0.getNumberOfCellsWithType( NORM_HEXA8 )) + self.assertEqual(12,umesh0.getNumberOfNodes()) + # + mfField=mfd2.getFields().getFieldWithName("TEMP1") + iterations = mfField.getIterations() + field0 = mfField.getFieldOnMeshAtLevel(ON_NODES, iterations[0][0],iterations[0][1],umesh0) + fieldArray = field0.getArray() + expectedValues = [238.46153846153845]*4 + [169.23076923076923]*4 + [100]*4 + expectedArray = DataArrayDouble(expectedValues) + self.assertTrue( fieldArray.isEqualWithoutConsideringStr( expectedArray, 1e-12 )) + pass + + @WriteInTmpDir def testGaussPt(self): """issue 22321: [CEA 933] Bug when reading a sauve file containing field on Gauss Pt. The problem was that a field ON_GAUSS_PT was created but no Gauss Localization @@ -290,7 +395,7 @@ class SauvLoaderTest(unittest.TestCase): 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) @@ -330,6 +435,7 @@ class SauvLoaderTest(unittest.TestCase): os.remove( sauvFile ) pass + @WriteInTmpDir 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.