X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDLoader%2FSwig%2FCaseReader.py;h=7a17167d55792f0a33b5f7811754b7620ee64d6a;hb=96d93eee4d12f6a31e6d48da5dd31f70fdac222c;hp=336cdfc887738f6c0d1eb83f293563c1ff378c13;hpb=da96e98ef037f8dd1810e1751e59b976706daf00;p=tools%2Fmedcoupling.git diff --git a/src/MEDLoader/Swig/CaseReader.py b/src/MEDLoader/Swig/CaseReader.py index 336cdfc88..7a17167d5 100644 --- a/src/MEDLoader/Swig/CaseReader.py +++ b/src/MEDLoader/Swig/CaseReader.py @@ -23,7 +23,7 @@ import numpy as np from MEDLoader import * from CaseIO import CaseIO -import sys,re +import sys,re,os class CaseReader(CaseIO): """ Converting a file in the Case format (Ensight) to the MED format. @@ -77,7 +77,7 @@ class CaseReader(CaseIO): arr0mc2=DataArrayInt(len(arr0),2) ; arr0mc2[:,0]=DataArrayInt(arr0)-1 ; arr0mc2[:,1]=1 ; arr0mc2.rearrange(1) ; arr0mc2.computeOffsetsFull() arr0mc3=DataArrayInt.Range(0,2*len(arr0),2).buildExplicitArrByRanges(arr0mc2) arr1mc0=DataArrayInt(arr1) ; arr1mc0.computeOffsetsFull() - arr1mc1=arr1mc0[arr0mc0] ; arr1mc1[1:]+=arr0mc0[1:] + arr1mc1=arr1mc0[arr0mc0] ; arr1mc1[1:]+=arr0mc0[1:] arr1mc2=DataArrayInt(arr1).deepCopy() ; arr1mc2+=1 ; arr1mc2.computeOffsetsFull() arr2mc0=(arr1mc2[1:])[arr0mc3] # @@ -166,7 +166,7 @@ class CaseReader(CaseIO): pos+=nbNodes*3*4 ; fd.seek(pos)#np.array(0,dtype='float%i'%(typeOfCoo)).nbytes typ=fd.read(80).strip() ; pos=fd.tell() zeK="" - for k in self.dictMCTyp2.keys(): + for k in self.dictMCTyp2: if k in typ: zeK=k break @@ -182,7 +182,7 @@ class CaseReader(CaseIO): mcmeshes2.append(self.__traduceMesh(meshName,zeK,coo,nodalConn)) pos+=nbNodesPerCell*nbCellsOfType*4 if abs(pos-end)>8: - fd.seek(pos) ;elt=fd.read(80) ; typ=elt[:] ; pos+=80 + fd.seek(pos) ;elt=fd.read(80) ; typ=elt[:] ; pos+=80 pass nbOfTurn+=1 pass @@ -193,8 +193,10 @@ class CaseReader(CaseIO): return mcmeshes2 def __convertGeo2MEDC(self,fd,end): - fd.readline() - name=fd.readline().strip() ; fd.readline() ; fd.readline() + #fd.readline() + #name=fd.readline().strip() ; fd.readline() ; fd.readline() + name=fd.read(80) + descrip=fd.read(80).strip() ; fd.read(80) ; fd.read(80) pos=fd.tell() mcmeshes=[] elt=fd.read(80) ; elt=elt.strip() ; pos+=80 @@ -254,15 +256,15 @@ class CaseReader(CaseIO): mcmeshes.append(m) pass return mcmeshes - - + + def __convertField(self,mlfields, mcmeshes, fileName, fieldName, discr, nbCompo, locId, it): """ Convert the fields. """ stars=re.search("[\*]+",fileName).group() st="%0"+str(len(stars))+"i" trueFileName=fileName.replace(stars,st%(it)) fd=open(os.path.join(self._dirName,trueFileName),"r+b") ; fd.seek(0,2) ; end=fd.tell() ; fd.seek(0) - name=fd.readline().strip().split(" ")[0] + name=fd.read(80).strip().split(" ")[0] if name!=fieldName: raise Exception("ConvertField : mismatch") pos=fd.tell() @@ -273,7 +275,7 @@ class CaseReader(CaseIO): fdisc=MEDCouplingFieldDiscretization.New(self.discSpatial2[discr]) meshId=np.memmap(fd,dtype='int32',mode='r',offset=int(pos),shape=(1)).tolist()[0]-1 if meshId >= len( mcmeshes ): - continue + return nbOfValues=fdisc.getNumberOfTuples(mcmeshes[meshId]) vals2=DataArrayDouble(nbOfValues,nbCompo) fd.seek(pos+4) @@ -327,7 +329,7 @@ class CaseReader(CaseIO): nbOfValsOfTyp=np.memmap(fd,dtype='>i4',mode='r',offset=pos,shape=(1)).tolist()[0]/4 pos+=4 vals=np.zeros(dtype=">f4",shape=(nbOfValsOfTyp*nbCompo)) - for iii in xrange(nbCompo): + for iii in range(nbCompo): valsTmp=np.memmap(fd,dtype='>f4',mode='r',offset=int(pos),shape=(nbOfValsOfTyp)) vals[iii*nbOfValsOfTyp:(iii+1)*nbOfValsOfTyp]=valsTmp pos+=nbOfValsOfTyp*4 @@ -351,7 +353,7 @@ class CaseReader(CaseIO): nbTurn+=1 pass pass - + def loadInMEDFileDS(self): """ Load a CASE file into a MEDFileData object. """ f=file(self._fileName) @@ -368,24 +370,25 @@ class CaseReader(CaseIO): if "TIME\n" in lines: end=lines.index("TIME\n") pass - for i in xrange(ind+1,end): - m=re.match("^([\w]+)[\s]+\per[\s]+([\w]+)[\s]*\:[\s]*([\w]+)[\s]+([\S]+)$",lines[i]) + for i in xrange(ind + 1,end): + m=re.match("^([\w]+)[\s]+\per[\s]+([\w]+)[\s]*\:[\s]*[0-9]*[\s]*([\w]+)[\s]+([\S]+)$",lines[i]) if m: if m.groups()[0]=="constant": continue spatialDisc=m.groups()[1] ; fieldName=m.groups()[2] ; nbOfCompo=self.dictCompo2[m.groups()[0]] ; fieldFileName=m.groups()[3] - fieldsInfo.append((fieldName,spatialDisc,nbOfCompo,fieldFileName)) + if fieldFileName.endswith("*"): + fieldsInfo.append((fieldName,spatialDisc,nbOfCompo,fieldFileName)) pass pass - + expr=re.compile("number[\s]+of[\s]+steps[\s]*\:[\s]*([\d]+)") - tmp=filter(expr.search,lines) - if len(tmp)!=0: - nbOfTimeSteps=int(expr.search(filter(expr.search,lines)[0]).group(1)) + tmp = [line for line in lines if expr.search(line)] + if tmp: + nbOfTimeSteps = int(expr.search(tmp[0]).group(1)) expr=re.compile("filename[\s]+start[\s]+number[\s]*\:[\s]*([\d]+)") - startIt=int(expr.search(filter(expr.search,lines)[0]).group(1)) + startIt = int(expr.search([line for line in lines if expr.search(line)][0]).group(1)) expr=re.compile("filename[\s]+increment[\s]*\:[\s]*([\d]+)") - incrIt=int(expr.search(filter(expr.search,lines)[0]).group(1)) + incrIt = int(expr.search([line for line in lines if expr.search(line)][0]).group(1)) else: nbOfTimeSteps=1 startIt=0 @@ -402,7 +405,7 @@ class CaseReader(CaseIO): i+=1 pass pass - for ts in xrange(nbOfTimeSteps): + for ts in range(nbOfTimeSteps): i=0 for field in fieldsInfo: if typeOfFile: @@ -416,7 +419,7 @@ class CaseReader(CaseIO): pass ret=MEDFileData() ret.setMeshes(m2) - del mlfields[filter(lambda x: len(mlfields[x])==0,range(len(mlfields)))] + del mlfields[[x for x in range(len(mlfields)) if len(mlfields[x]) == 0]] ret.setFields(mlfields) return ret