2015-10-26 2 views
0

J'ai un script python qui extrait la température de mon fichier odb mais je veux qu'il convertisse la température de sortie en degrés F en degrés C. Nous avons tout saisi en tant qu'unités anglaises mettre alors nos clients veulent des choses dans les degrés C. Comment puis-je modifier le script suivant pour convertir automatiquement ma sortie en degrés C?Script Abaqus python qui va convertir la température dans mon fichier .txt

from odbAccess import * 
import sys 

# Open output file for writing 
outputFile = open('OutputFileName.txt','w') 

# Define odb file names 
odbNameList = ('JobName.odb',) 

# Define instance name and set name 
instanceNameList = ('INSTANCE-1','INSTANCE-2',) 
setName = 'SET-1' 

# Process odb files 
for odbName in odbNameList: 

# Open file for reading 
    odb = openOdb(path=odbName) 

# Process steps 
    for stepName in odb.steps.keys(): 

# Get field output objects for variables TEMPERATURE and ELEMENT VOLUME 
     temperatureField = odb.steps[stepName].frames[-1].fieldOutputs['NT11'] 
     for instanceName in instanceNameList:    
      setData = odb.rootAssembly.instances[instanceName].nodeSets[setName] 

      tempField = temperatureField.getSubset(region=setData, position=NODAL) 
      tempValues = tempField.values 

      tmax = 0 
      for v in tempValues: 
       if v.data > tmax: 
        tmax = v.data 

      outputFile.write('%s %s %s %6.3f\n' % (odbName, stepName, instanceName, tmax)) 

# Close odb file 
    odb.close() 

# Close output file 
outputFile.close() 

Répondre

0

Dans le code, identifiez simplement quelle variable représente la température en degrés Fahrenheit. Cette valeur est tmax. La conversion de cette valeur en Celsius nécessite un calcul simple, comme illustré ci-dessous.

if v.data > tmax: 
    tmax = v.data 
    tmax_celsius = (tmax-32)/1.8 
+0

parfait !!! qui a fait exactement ce que je voulais aussi. Je viens de changer une autre chose dans l'étape outputFile.write. J'ai changé tmax en tmax_celsius. – haledaco

+0

@haledaco Heureux que cela a fonctionné. N'hésitez pas à upvote ou accepter la réponse si elle répond à vos besoins. – chishaku

0

Il semble que vous n'écrivez que la température maximale de chaque instance. Vous avez juste besoin de travailler sur tmax après l'avoir trouvé.

Pour convertir Farenheit à utiliser Celsius cette formule:

C = (F-32)*(5/9) 

Alors:

def Celsius(F): 
    C = (F-32)*(5/9) 
    return C 

temperatureField = odb.steps[stepName].frames[-1].fieldOutputs['NT11'] 
for instanceName in instanceNameList:    
    setData = odb.rootAssembly.instances[instanceName].nodeSets[setName] 

    tempField = temperatureField.getSubset(region=setData, position=NODAL) 
    tempValues = tempField.values 

    tmax = 0 
    for v in tempValues: 
     if Celsius(v.data) > tmax: 
      tmax = v.data 

    outputFile.write('%s %s %s %6.3f\n' % (odbName, stepName, instanceName, tmax)) 
+0

En Python 2, Soyez prudent lorsque vous divisez par 1 entier avec un autre entier. Cela retournera un entier et non un flottant. En Python 2, 5/9 = 0. Au lieu de cela, faites ceci: 5.0/9 = 0.5555 – DougR

+0

Bon à savoir, merci! – Kamejoin