Operationen, die erforderlich sind, um die CEA der NASA mit Befehlen auszuführen. Windows ist relativ einfach, aber Mac ist etwas nervig. Ich habe Mac Book Air, OSX Yosemite ausprobiert Für diejenigen, die wissen, was CEA ist.
Wenn Sie Englisch lesen können, lesen Sie bitte das PDF und Youtube unten. Es ist alles geschrieben. http://spase.stanford.edu/CEA_files/cea_how_to_gfortran_snowleo.pdf https://www.youtube.com/watch?v=CGpxfxmqA-c
gfortran Installieren Sie die XCode- und Befehlszeilentools, um GCC zu verwenden. Jetzt können Sie Fortran mit dem Befehl gfortran kompilieren. http://qiita.com/ShinichiOkayama/items/962e55ac7f8920a5f007
Besuchen Sie diese Website des NASA Glen Research Center. http://www.grc.nasa.gov/WWW/CEAWeb/ceaguiDownload-unix.htm Laden Sie die folgende Datei von hier herunter und verschieben Sie sie in den Ordner, den Sie installieren möchten.
Ich habe einen Ordner namens ~ / Applications / NASAcea erstellt.
Starten Sie nun das Terminal. Gehen Sie auf dem Terminal zu ~ / Applications / NASAcea und
zcat CEA+Fortran.tar.Z | tar xvf -
zcat CEAexec-mac.tar.Z | tar xvf -
zcat CEAgui-jar.tar.Z | tar xvf -
Und auftauen. Geben Sie außerdem Folgendes als Dateiberechtigungseinstellungen ein.
chmod a+x b1b2b3
chmod a+x syntax
chmod a+x FCEA2
chmod a+x runCEA.sh
Übergeben Sie nun den Pfad an den Ordner, damit er ausgeführt werden kann.
echo 'export PATH=$HOME/Applications/NASAcea:$PATH' >> ~/.bash_profile
bash -login
Gehen Sie wie folgt vor, um es anderen Benutzern zur Verfügung zu stellen. Nicht für den persönlichen Gebrauch erforderlich.
sudo vi /etc/paths
Fügen Sie der letzten Zeile dieser Datei Folgendes hinzu:
~/Applications/NASAcea
Aktualisieren Sie die ausführbare Datei. Geben Sie am Terminal Folgendes ein.
gfortran cea2.f
mv a.out FCEA2
gfortran b1b2b3.f
mv a.out b1b2b3
gfortran syntax.f
mv a.out syntax
Geben Sie danach Befehle ein, um die Bibliothek zu aktualisieren. (Anstatt kontinuierlich zu kopieren und einzufügen, fügen Sie Zeile für Zeile ein.) [Addition] FCEA2 hat einen Pfad, und wenn es in einem anderen Verzeichnis ausgeführt wird, muss es in das Verzeichnis gestellt werden, in dem thrmo.inp, trans.inp, cea2.inp vorab ausgeführt wird. Nach dem Ausführen des folgenden Befehls ist es normal, dass die Datei trans.lib, thermo.lib (cea2.lib) unlesbare Zeichen in der Binärdatei enthält. Bei Dateien von habe ich es nicht gut gesagt.
FCEA2
trans
FCEA2
thermo
FCEA2
cea2
Das ist es.
Lassen Sie uns als Test die Leistung des Kerosin / LOX-Raketentriebwerks zeigen. Erstellen Sie eine Textdatei mit dem Namen sample.inp. Die Erweiterung .inp ist wichtig. Der Inhalt ist wie folgt.
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
Gehen Sie nun in den Ordner mit sample.inp auf dem Terminal und
FCEA2
sample
Diese zweite Zeile enthält den Namensteil der INP-Datei. Dies ist das Ergebnis, da eine Datei mit dem Namen sample.out im selben Ordner angezeigt wird.
Wenn Sie nicht wissen, wie Sie eine INP-Datei für CEA erstellen, schreiben Sie, was Sie mit der Online-Version von CEA tun möchten, und klicken Sie darauf. Schließlich wird die INP-Datei zusammen mit der Ergebnisdatei angezeigt. https://cearun.grc.nasa.gov/
Gegen Ende des Dokuments gibt es ein Beispiel mit dem Namen NASA-RP1311. http://www.frad.t.u-tokyo.ac.jp/public/cea/doc/xRP-1311P2.pdf Zum Beispiel in Bezug auf Raketen ist es in BEISPIEL 8 ~ 14. Der Teil vom Problem bis zum Ende nach dem Kommentar # sollte eine INP-Datei sein.
Die von CEA erzielten Ergebnisse sind altmodisch und schwer zusammenzufassen, daher ist es notwendig, sie zusammenzufassen. Versuchen Sie es mit einem Python-Skript. Einige Leute machen CEA-Schnittstellen in Matlab https://github.com/PurdueH2Lab/MatlabCEA Anstatt eine anständige Oberfläche zu erstellen, wäre es ein einfacher Ansatz, sie direkt mit einem Skript zu treffen. Berechnen wir zum Beispiel die Leistung eines Raketentriebwerks mit flüssigem Sauerstoff / flüssigem Wasserstoff. Sie können es verwenden, indem Sie den Dateinamen oder den Teil der INP-Datei entsprechend ändern. Legen Sie die folgende .py-Datei im selben Ordner wie FCEA2 ab und führen Sie .py vom Terminal aus. Ich bin mit ipython in den FCEA2-Ordner (~ / Applications / NASAcea) gewechselt
run LH2LO2.py
Läuft.
LH2LO2.py
# -*- coding: utf-8 -*-
import sys
reload(sys)
#Ändern Sie den Standardzeichencode.
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' #Vorübergehend erstellte Datei
# ---- .Erstellung einer INP-Datei----
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') #Im Schreibmodus öffnen
f.write(str) #Schreiben Sie die Argumentzeichenfolge in eine Datei
f.close() #Datei schließen
# ----FCEA2-Befehl----
#Der Standort von FCEA2~/Applications/NASAcea/FCEA2 wird verwendet, aber entsprechend neu geschrieben
cmd = '~/Applications/NASAcea/FCEA2'
p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.communicate(file_name)
# ---- .plt Datei gelesen----
output_file = file_name + '.plt'
with open(output_file, 'r') as f:
reader = csv.reader(f, delimiter=' ')
header = next(reader) #Header überspringen
index = 0
for row in reader:
while row.count("") > 0:
row.remove("")
# print row #Liste zeilenweise auflisten
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]
#Datei löschen
os.remove(input_file)
os.remove(output_file)
return data
if __name__ == '__main__': #main (beginnt hier)
data_file = '00output.csv'
plt.ion()
plt.figure()
# ----Parameterspezifikation----
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]) #Lagerort der Daten, die in CSV geschrieben werden sollen
# ----Schleife den Befehl----
#In diesem Beispiel liegt der Brennkammerdruck auf der horizontalen Achse O./Ich möchte mit F auf der vertikalen Achse plotten, also O./Schleife in der Reihenfolge F → Druck
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 #Brennkammerdruck MPa
of = data_array[:,1] # O/F
Isp = data_array[:,2] / g #Seespezifischer Schub sek
Ivac = data_array[:,3] / g #Spezifischer Schub im Vakuum sek
Cf = data_array[:,4] #Schubkoeffizient Vgl
# ---- PLOT ----Zeichnen Sie beispielsweise den Brennkammerdruck und den relativen Schub auf See.
plt.plot(press, Isp, label='O/F=%.1f' % (j))
# ---- ----
save_array = np.vstack([save_array, data_array])
# ----Speichern Sie die Ergebnisse in CSV----
header = u'chamber[MPa]\tof[-]\tisp[sec]\tivac[sec]\taeat[-]\tcf[-]'
np.savetxt(data_file, save_array, fmt='%.3f', delimiter='\t', header = header)
# ----PLOT-Einstellungen----
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)
Ich bekomme dieses Ergebnis.
Recommended Posts