#============================================================================
#
# Code_Saturne version 1.3
# ------------------------
#
#
# This file is part of the Code_Saturne Kernel, element of the
# Code_Saturne CFD tool.
#
# Copyright (C) 1998-2007 EDF S.A., France
#
# contact: saturne-support@edf.fr
#
# The Code_Saturne Kernel is free software; you can redistribute it
# and/or modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2 of
# the License, or (at your option) any later version.
#
# The Code_Saturne Kernel is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with the Code_Saturne Kernel; if not, write to the
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA
#
#============================================================================
#-------------------------------------------------------------------------------
# Library modules import
#-------------------------------------------------------------------------------
import os, sys
import re
import string
#-------------------------------------------------------------------------------
# Application modules import
#-------------------------------------------------------------------------------
class Chrono :
"""
Describe a chrono
"""
def __init__(self, casePath, variables):
"""
constructor
"""
self.variables = variables
self.casePath = casePath
#
# Verifier qu'il n'y a qu'un chr dans RESU
self.chrPath = casePath+"/RESU"
filesNames = os.listdir(self.chrPath)
counter = 0
for fileName in filesNames :
if fileName.find('CHR.ENSIGHT') >= 0 :
self.chrName = fileName
counter += 1
if counter > 1 :
print ("Error : Several chrono files in :" + self.chrPath)
print (" Delete old files and run again")
print sys.exit(1)
if counter < 1 :
print ("Error : No chrono file in :" + self.chrPath)
print sys.exit(1)
try:
chrFile = file(self.chrPath+'/'+self.chrName+'/CHR.case', mode='r')
except IOError:
print "Error : opening "+self.chrPath+'/'+self.chrName+'/CHR.case'
print sys.exit(1)
variablesChrNames={}
for variable in self.variables :
#
# in CHR.case, variable name len is < 19
if len(variable) > 19 :
variableChrName = variable[:19]
else :
variableChrName = variable
#
# in CHR.case, replace special characters
characters=["(",")","[","]","+","-","@"," ","!",
"#","*","^","$","/"]
for character in characters :
variableChrName.replace(character,"_")
variablesChrNames[variable] = variableChrName
line = ""
while line.find("VARIABLE") < 0 :
line = chrFile.readline()
if (line == ""):
print "Error : reading "+self.chrPath+'/'+self.chrName+'/CHR.case'
sys.exit(1)
self.variablesChrFiles={}
self.typ = {}
while line.find("TIME") < 0:
line = chrFile.readline()
if (line == ""):
print "Error : reading "+self.chrPath+'/'+self.chrName+'/CHR.case'
sys.exit(1)
for variable in self.variables :
numCar = line.find(variablesChrNames[variable])
if numCar > -1 :
self.typ[variable] = line.split(":")[0]
nameTab = line[numCar:].split()
self.variablesChrFiles[variable]=nameTab[1][:nameTab[1].find("*")]
while line.find("number of steps:") < 0:
line = chrFile.readline()
if (line == ""):
print "Error : reading "+self.chrPath+'/'+self.chrName+'/CHR.case'
sys.exit(1)
stepNb = int(line.split(":")[1])
filenumber = '%4.4i' % stepNb
for variable in self.variables :
self.variablesChrFiles[variable]+=str(filenumber)
while line.find("time values:") < 0:
line = chrFile.readline()
if (line == ""):
print "Error : reading "+self.chrPath+'/'+self.chrName+'/CHR.case'
sys.exit(1)
# self.time = float(line.split(":")[1])
while 1 :
line = chrFile.readline()
if (line == ""):
break
try:
self.time = float(line.split()[0])
except:
pass
def getTime(self):
return self.time
def getTyp(self,variable):
return self.typ[variable]
def getValues(self, variable):
chrFicName = self.variablesChrFiles[variable]
path = self.chrPath+'/'+self.chrName+'/'+self.variablesChrFiles[variable]
try:
chrVar = file(path, mode='r')
except IOError:
print "Error : opening "+path
print sys.exit(1)
tabl = []
counter = 0
while 1:
text = chrVar.readline()
counter += 1
if (text == ""):
break
if counter > 4:
tmp = text.split()
try:
tabl.append(float(tmp[0]))
except:
pass
chrVar.close()
return tabl
def getStructure(self,variable):
chrFicName = self.variablesChrFiles[variable]
path = self.chrPath+'/'+self.chrName+'/'+self.variablesChrFiles[variable]
print path
try:
chrVar = file(path, mode='r')
except IOError:
print "Error : opening "+path
print sys.exit(1)
structure = []
line = chrVar.readline()
while line.find("part") < 0:
line = chrVar.readline()
if (line == ""):
break
while 1:
line = chrVar.readline()
if (line == ""):
break
valpart=[]
counter = 0
typ = ""
while line.find("part") < 0:
line = chrVar.readline()
if (line == ""):
break
tmp=line.split()
try:
float(tmp[0])
counter += 1
except:
if counter > 0 and typ != "":
valpart.append([typ,counter])
typ = tmp[0]
counter = 0
if typ != "part" and typ !="" :
valpart.append([typ,counter])
structure.append(valpart)
if (line == ""):
break
return structure
def addVariable(self, values, typ, name, varModel):
#
# on ajoute les variables supplementaires dans CHR.case
#
print self.chrPath+'/'+self.chrName+'/CHR.case'
try:
chrFile = file(self.chrPath+'/'+self.chrName+'/CHR.case', mode='r')
except IOError:
print "Error : opening "+self.chrPath+'/'+self.chrName+'/CHR.case'
print sys.exit(1)
chrFileTmp = file(self.chrPath+'/'+self.chrName+'/CHR.case.tmp', mode='w')
line = ""
while line.find("VARIABLE") < 0 :
line = chrFile.readline()
if (line == ""):
print "Error : reading "+self.chrPath+'/'+self.chrName+'/CHR.case'
sys.exit(1)
chrFileTmp.write(line)
if len(name) > 19 :
line = typ+":"+" 1 "+name[:19]+" "+"chr."+name[:19]+"\n"
else:
line = typ+":"+" 1 "+name+" "+" "+"chr."+name+"\n"
chrFileTmp.write(line)
while 1 :
line = chrFile.readline()
if (line == ""):
break
chrFileTmp.write(line)
chrFile.close()
chrFileTmp.close()
os.rename(self.chrPath+'/'+self.chrName+'/CHR.case.tmp',self.chrPath+'/'+self.chrName+'/CHR.case')
#
# creation du chr.delta
#
structure = self.getStructure(varModel)
if len(name) > 19 :
chrVar = file(self.chrPath+'/'+self.chrName+'/chr.'+name[:19], mode='w')
else:
chrVar = file(self.chrPath+'/'+self.chrName+'/chr.'+name, mode='w')
chrVar.write('Variable : '+name+'\n')
numPart = 1
debut = 0
for part in structure:
chrVar.write("part\n")
chrVar.write("%10i\n" % numPart)
for elt in part:
chrVar.write(elt[0]+"\n")
for i in range(debut, debut+elt[1]) :
chrVar.write("%12.5e\n" % values[i])
debut = elt[1]
numPart +=1
syntax highlighted by Code2HTML, v. 0.9.1