Opérations requises pour exécuter le CEA de la NASA avec des commandes. Windows est relativement facile, mais Mac est un peu ennuyeux. J'ai essayé Mac Book Air, OSX yosemite Pour ceux qui savent ce qu'est le CEA.
Si vous pouvez lire l'anglais, veuillez vous référer au PDF et à YouTube ci-dessous. Tout est écrit. http://spase.stanford.edu/CEA_files/cea_how_to_gfortran_snowleo.pdf https://www.youtube.com/watch?v=CGpxfxmqA-c
gfortran Installez XCode et les outils de ligne de commande pour utiliser GCC. Vous pouvez maintenant compiler Fortran avec la commande gfortran. http://qiita.com/ShinichiOkayama/items/962e55ac7f8920a5f007
Accédez à ce site du NASA Glen Research Center. http://www.grc.nasa.gov/WWW/CEAWeb/ceaguiDownload-unix.htm Téléchargez le fichier suivant à partir d'ici et déplacez-le vers le dossier que vous souhaitez installer.
J'ai créé un dossier appelé ~ / Applications / NASAcea.
Démarrez maintenant le terminal. Allez dans ~ / Applications / NASAcea sur le terminal et
zcat CEA+Fortran.tar.Z | tar xvf -
zcat CEAexec-mac.tar.Z | tar xvf -
zcat CEAgui-jar.tar.Z | tar xvf -
Et décongeler. En outre, entrez les paramètres suivants comme paramètres d'autorisation de fichier.
chmod a+x b1b2b3
chmod a+x syntax
chmod a+x FCEA2
chmod a+x runCEA.sh
Maintenant, transmettez le chemin d'accès au dossier pour qu'il puisse être exécuté.
echo 'export PATH=$HOME/Applications/NASAcea:$PATH' >> ~/.bash_profile
bash -login
Pour le rendre disponible à d'autres utilisateurs, procédez comme suit. Non requis pour un usage personnel.
sudo vi /etc/paths
Ajoutez donc ce qui suit à la dernière ligne de ce fichier:
~/Applications/NASAcea
Mettez à jour le fichier exécutable. Entrez ce qui suit au terminal.
gfortran cea2.f
mv a.out FCEA2
gfortran b1b2b3.f
mv a.out b1b2b3
gfortran syntax.f
mv a.out syntax
Après cela, entrez les commandes afin de mettre à jour la bibliothèque. (Au lieu de copier et coller en continu, insérez ligne par ligne). [Ajout] FCEA2 a un chemin, et lors de l'exécution dans un autre répertoire, il est nécessaire de le mettre dans le répertoire où thrmo.inp, trans.inp, cea2.inp est exécuté à l'avance. Après avoir exécuté la commande suivante, il est normal que le fichier trans.lib, thermo.lib, (cea2.lib) contienne des caractères illisibles dans le fichier binaire. Dans le cas des fichiers de, je ne l'ai pas bien dit.
FCEA2
trans
FCEA2
thermo
FCEA2
cea2
C'est tout.
À titre de test, montrons les performances du moteur de fusée Kerosin / LOX. Créez un fichier texte appelé sample.inp. L'extension .inp est importante. Le contenu est le suivant.
sample.inp
problem o/f=2.5,
rocket equilibrium frozen nfz=2
p,bar=100,
pi/p=100,
react
fuel=RP-1 wt=100 t,k=298.15
oxid=O2(L) wt=100 t,k=90.17
output
plot o/f isp aeat cf t
end
Allez maintenant dans le dossier avec sample.inp sur le terminal et
FCEA2
sample
Cette deuxième ligne contient la partie nom du fichier inp. C'est le résultat car un fichier appelé sample.out apparaît dans le même dossier.
Si vous ne savez pas comment créer un fichier .inp pour CEA, écrivez ce que vous voulez faire avec la version en ligne de CEA et cliquez dessus. Enfin, le fichier .inp apparaîtra avec le fichier de résultat, alors reportez-vous à cela. https://cearun.grc.nasa.gov/
Il y a un exemple vers la fin de l'article appelé NASA-RP1311. http://www.frad.t.u-tokyo.ac.jp/public/cea/doc/xRP-1311P2.pdf Par exemple, en ce qui concerne les fusées, c'est dans les EXEMPLES 8 ~ 14. La partie du problème à la fin après le commentaire # doit être un fichier .inp.
Les résultats produits par le CEA sont démodés et difficiles à résumer, il est donc nécessaire de les résumer. Essayez-le avec un script python. Certaines personnes créent des interfaces CEA dans Matlab https://github.com/PurdueH2Lab/MatlabCEA Plutôt que de créer une interface décente, la frapper directement avec un script serait une approche simple. Par exemple, calculons les performances d'un moteur-fusée à oxygène liquide / hydrogène liquide. Vous pouvez l'utiliser en modifiant le nom du fichier ou la partie du fichier .inp selon le cas. Placez le fichier .py suivant dans le même dossier que FCEA2 et exécutez .py depuis le terminal. J'ai déménagé dans le dossier FCEA2 (~ / Applications / NASAcea) avec ipython
run LH2LO2.py
Est en cours d'exécution.
LH2LO2.py
# -*- coding: utf-8 -*-
import sys
reload(sys)
#Modifiez le code de caractère par défaut.
sys.setdefaultencoding('utf-8')
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from matplotlib.font_manager import FontProperties
from scipy import optimize
import csv
import os
import subprocess
# for Mac
font_path = '/Library/Fonts/Osaka.ttf'
font_prop = matplotlib.font_manager.FontProperties(fname=font_path)
matplotlib.rcParams['font.family'] = font_prop.get_name()
def cea (set_of, set_chamber):
file_name = '00temp' #Fichier créé temporairement
# ---- .création de fichier inp----
input_file = file_name + '.inp'
str = """problem o/f=%.1f,
rocket equilibrium frozen nfz=2
p,bar = %d
pi/p= %d
react
fuel=H2(L) wt=100 t,k=20.27
oxid=O2(L) wt=100 t,k=90.17
output
plot p pi/p o/f isp ivac aeat cf t
end
""" % (set_of, set_chamber, set_chamber)
f = open(input_file, 'w') #Ouvrir en mode écriture
f.write(str) #Ecrire la chaîne d'argument dans un fichier
f.close() #Fermer le fichier
# ----Commande FCEA2----
#L'emplacement de FCEA2~/Applications/NASAcea/FCEA2 est utilisé, mais réécrivez le cas échéant
cmd = '~/Applications/NASAcea/FCEA2'
p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.communicate(file_name)
# ---- .lecture du fichier plt----
output_file = file_name + '.plt'
with open(output_file, 'r') as f:
reader = csv.reader(f, delimiter=' ')
header = next(reader) #Ignorer l'en-tête
index = 0
for row in reader:
while row.count("") > 0:
row.remove("")
# print row #Affichage de la liste ligne par ligne
if index == 0:
chamber = float(row[0])
elif index == 2:
of = float(row[2])
isp = float(row[3])
ivac = float(row[4])
aeat = float(row[5])
cf = float(row[6])
index += 1
data = [chamber, of, isp, ivac, aeat, cf]
#Supprimer le fichier
os.remove(input_file)
os.remove(output_file)
return data
if __name__ == '__main__': #main (commence ici)
data_file = '00output.csv'
plt.ion()
plt.figure()
# ----Spécification des paramètres----
of_array = np.linspace(3.0, 6.0, 7)
# chamber_array = np.linspace(5, 40, 30)
chamber_array = np.linspace(10, 200, 30)
data_array = np.zeros((len(chamber_array), 6))
save_array = np.zeros([1,6]) #Emplacement de stockage des données à écrire en CSV
# ----Bouclez la commande----
#Dans cet exemple, la pression de la chambre de combustion est sur l'axe horizontal, O/Je veux TRACER avec F sur l'axe vertical, donc O/Boucle dans l'ordre de F → pression
for j in of_array:
k = 0
for i in chamber_array:
data = cea(j, i)
print data
data_array[k] = np.array(data)
k+=1
g = 9.80665
press = data_array[:,0] / g #Pression de la chambre de combustion MPa
of = data_array[:,1] # O/F
Isp = data_array[:,2] / g #Poussée spécifique maritime sec
Ivac = data_array[:,3] / g #Poussée spécifique sous vide sec
Cf = data_array[:,4] #Coefficient de poussée Cf
# ---- PLOT ----Par exemple, TRACEZ la pression de la chambre de combustion et la poussée relative en mer.
plt.plot(press, Isp, label='O/F=%.1f' % (j))
# ---- ----
save_array = np.vstack([save_array, data_array])
# ----Enregistrer les résultats au format CSV----
header = u'chamber[MPa]\tof[-]\tisp[sec]\tivac[sec]\taeat[-]\tcf[-]'
np.savetxt(data_file, save_array, fmt='%.3f', delimiter='\t', header = header)
# ----Paramètres PLOT----
plt.xlim(0,20)
plt.xlabel('Pressure (MPa)')
plt.ylabel('Isp (sec)')
plt.grid()
plt.title('LOX/LH2 100% equilibrium frozen nfz=2')
plt.legend(loc='best', fontsize=12)
J'obtiens ce résultat.
Recommended Posts