2 # -*- coding: iso-8859-1 -*-
3 # Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 ############################################################################
23 # This script tests conversion of MEDMEM to EnSight by performing following
24 # operations on available med files:
25 # - read med file into MEDMEM and breifly dump it's content;
26 # - write EnSight file in different formats: Gold and EnSight6, ASCII and binary;
27 # - checks generated EnSight files using ens_checker utility (if available);
28 # - read generated EnSight file into MEDMEM and breifly dump it's content;
29 # - store MEDMEM to med file.
30 ############################################################################
33 from dumpMEDMEM import *
41 ,(ENSIGHT_GOLD,Binary)
46 tmpDir = os.getenv("TMP")
48 tmpDir = os.getenv("TMPDIR","/tmp")
50 inDir = os.path.join(os.getenv("MED_ROOT_DIR"), "share","salome","resources","med")
51 if not os.access(inDir, os.F_OK):
52 raise RuntimeError, "Path to med files not found, MED_ROOT_DIR incorrect?"
54 outDir = os.path.join( tmpDir,"Ensight_out")
55 if not os.access(outDir, os.F_OK):
59 # find out if ens_checker is present
60 has_ens_checker = False
61 tmpFile = os.path.join( outDir, "has_ens_checker" )
62 os.system("ens_checker _.case > %s 2>&1" % tmpFile)
63 tmpFile = open( tmpFile ).read()
64 if search("EnSight Data Format Checker", tmpFile):
65 has_ens_checker = True
67 print "\nWarning: ens_checker utility NOT available"
76 def check_ens(casefile, logfile):
77 cmd = "(cd %s; ens_checker %s > %s 2>&1)" % (outDir, casefile, logfile)
78 err = os.system( cmd )
79 if os.access(logfile, os.F_OK):
80 log = open(logfile).read()
81 if search("bummer", log):
83 raise RuntimeError, "cd %s; ens_checker %s" % (outDir, casefile)
84 if search("Warning:", log):
89 def compatibilityPb():
90 "Print traceback and return true if exception is due to EnSight-MEDMEM incompatibility"
91 isCompatibilityPb = ( sys.exc_value.__str__().find("compatibility problem") > 0 )
93 print '$$$$$$$$$$$$$$$$$$$$ COMPATIBILITY PROBLEM $$$$$$$$$$$$$$$$$$$$$$$$'
94 print sys.exc_value, "\n"
98 return isCompatibilityPb
100 from dircache import listdir
102 # all files sorted by size increasing
105 # ,"Old_maillage_chemvalIV_cas1_40elts.med"
106 # ,"maillage_UniSegFam.med"
108 # ,"carre_en_quad4.med"
110 # ,"Old_Deff_fdt_5.8_castem_vf_diff_conc_dom.med"
111 # ,"Old_Deff_fdt_5.8_castem_efmh_diff_conc_dom.med"
113 # ,"cas_defaut_domaine_fluide.med"
114 # ,"carre_en_quad4_seg2.med"
116 # ,"Fields_group3D.med"
117 # ,"maillage_5_5_5.med"
121 # ,"cube_hexa8_quad4.med"
124 # ,"pointe_4fields.med"
127 # ,"extendedtransport53_triangles.med"
130 # ,"zzzz121b_without_tr6.med"
132 # ,"essaiminimail.med"
134 # ,"elle_3D_HPr_2x2x2_2.med"
135 # ,"maill.00_nofield.med"
136 # ,"elle_3D_HPr_4x4x4_2.med"
137 # ,"maill.00_nomesh.med"
140 # ,"maill.00_without_seg2.med"
145 # ,"Darcy3_3D_H_10x10x10_2.med"
146 # ,"maill.0_volumes.med"
147 # ,"Old_darcy_1.3_resTRACES.med"
148 # ,"Old_darcy_1.3_resCASTEM.med"
149 # ,"darcy_1.3_resTRACES.med"
150 # ,"darcy_1.3_resCASTEM.med"
153 # ,"Old_darcy_1.3_resPORFLOW.med"
154 # ,"darcy_1.3_resPORFLOW.med"
155 # ,"test_hydro_darcy1a_out.med"
157 # ,"elle_3D_HPr_10x10x10_2.med"
158 # ,"Old_darcy_1.1_res.med"
159 # ,"darcy_1.1_res.med"
163 # ,"Old_H_Traces_Se79_COUPLEX1.med"
164 # ,"Old_H_Traces_I129_COUPLEX1.med"
165 # ,"Old_H_PorfPorf_Se79_COUPLEX1.med"
166 # ,"Old_H_PorfPorf_I129_COUPLEX1.med"
167 # ,"Old_H_PorfCast_EFMH_Se79_COUPLEX1.med"
168 # ,"Old_H_PorfCast_EFMH_I129_COUPLEX1.med"
169 # ,"Old_H_CastPorf_Se79_COUPLEX1.med"
170 # ,"Old_H_CastPorf_I129_COUPLEX1.med"
171 # ,"Old_H_CastCast_VF_Se79_COUPLEX1.med"
172 # ,"Old_H_CastCast_VF_I129_COUPLEX1.med"
173 # ,"Old_H_CastCast_EFMH_I129_COUPLEX1.med"
174 # ,"H_Traces_Se79_COUPLEX1.med"
175 # ,"H_Traces_I129_COUPLEX1.med"
176 # ,"H_PorfPorf_I129_COUPLEX1.med"
177 # ,"H_PorfCast_EFMH_Se79_COUPLEX1.med"
178 # ,"H_PorfCast_EFMH_I129_COUPLEX1.med"
179 # ,"H_CastPorf_Se79_COUPLEX1.med"
180 # ,"H_CastPorf_I129_COUPLEX1.med"
181 # ,"H_CastCast_VF_Se79_COUPLEX1.med"
182 # ,"H_CastCast_VF_I129_COUPLEX1.med"
183 # ,"H_CastCast_EFMH_I129_COUPLEX1.med"
185 # ,"Old_darcy2_Castem_EFMH.med"
186 # ,"darcy2_Castem_EFMH.med"
187 # ,"Old_darcy2_Castem_qua_VF.med"
188 # ,"Old_darcy2_Castem_qua_EFMH.med"
189 # ,"darcy2_Castem_qua_VF.med"
190 # ,"darcy2_Castem_qua_EFMH.med"
191 # ,"maillage_migr3d.med"
193 # ,"Old_ChampsDarcy.med"
198 # ,"hexa_28320_ELEM.med"
201 badFiles = [ # files that can't be read by MEDMEM
202 "Deff_fdt_5.8_castem_efmh_diff_conc_dom.med"
203 ,"Deff_fdt_5.8_castem_vf_diff_conc_dom.med"
206 medFiles = listdir( inDir )
209 for medFile in medFiles: # loop on med files in inDir
211 basename, ext = os.path.splitext( medFile )
212 if ext != ".med" or medFile in badFiles: continue
215 medFile = os.path.join( inDir, medFile )
216 print "reading",medFile
219 med = MEDFILEBROWSER(medFile)
220 if med.getNumberOfMeshes() < 1: continue
221 m2m_nom = med.getMeshNames()[0]
222 if med.isStructuredMesh(m2m_nom):
223 mesh = GRID(MED_DRIVER,medFile,m2m_nom);
225 mesh = MESH(MED_DRIVER,medFile,m2m_nom);
228 for f_name in med.getFieldNames():
229 if med.getMeshName(f_name) != mesh.getName(): continue
230 dtit_list = med.getFieldIteration( f_name )
231 for dtit in dtit_list:
232 if med.getFieldType( f_name ) == MED_REEL64:
233 field = FIELDDOUBLE(MED_DRIVER, medFile, f_name, dtit.dt, dtit.it, mesh )
235 field = FIELDINT(MED_DRIVER, medFile, f_name, dtit.dt, dtit.it, mesh )
237 fields.append( field )
243 print "Nb Fields",len(fields)
245 #ShowFields( fields, 10 )
247 basename = os.path.join( outDir, basename ) + '.'
248 checkFile = basename + "ens_checker"
250 for format,bin in formats:
251 if format == ENSIGHT_GOLD:
252 formatName = "ENSIGHT GOLD"
255 formatName = "ENSIGHT 6"
259 formatName += " Binary"
262 formatName += " ASCII"
265 ensFile = basename + formatSuffix + ".case"
267 print "Format: \t",formatName
270 setEnSightFormatForWriting( format, bin )
272 # write a mesh to EnSight
273 # print "write a mesh to EnSight"
274 # myMeshDriver = ENSIGHT_MESH_WRONLY_DRIVER(ensFile,mesh)
275 # myMeshDriver.write()
277 # if med.getNumberOfFields() > 0:
278 # fName = med.getFieldName( 0 )
279 # dt_it_= med.getFieldIteration( fName, 0 )
280 # field = med.getField( fName, dt_it_.dt, dt_it_.it )
281 # print "add a field to EnSight"
282 # myFieldDriver = ENSIGHT_FIELD_WRONLY_DRIVER(ensFile,field);
283 # myFieldDriver.write();
285 # check_ens(ensFile, checkFile)
288 print "writting", ensFile
291 medEnsDriver = ENSIGHT_MED_WRONLY_DRIVER (ensFile, fields)
294 mesh.write( ENSIGHT_DRIVER, ensFile )
296 if not compatibilityPb():
300 # check generated EnSight
301 check_ens(ensFile, checkFile)
303 # read generated EnSight into MEDMEM
304 print "reading",ensFile
306 medFromEns = ENSIGHT_MED_RDONLY_DRIVER(ensFile)
307 fields = medFromEns.read()
308 mesh = fields[0].getSupport().getMesh()
310 mesh = MESH(ENSIGHT_DRIVER, ensFile, "")
312 # dump generated EnSight
315 ShowMesh( mesh, 10, [10,10,10] )
319 ShowFields( fields, 10 )
322 # write EnSight to MED
323 wFile = basename + formatSuffix + ".med"
327 mesh.write( MED_DRIVER,wFile )
329 fTyped = f.castToTypedField()
330 fTyped.write(MED_DRIVER,wFile)
333 traceback.print_exc()
340 # remove created files
341 for f in listdir( outDir ):
342 deleteFile( os.path.join( outDir, f ))