ISA Atmosphäre als Funktion
Die Normatmosphäre, Normalatmosphäre oder Standardatmosphäre ist ein Begriff aus der Luftfahrt und bezeichnet idealisierte Eigenschaften der Erdatmosphäre.
Die ICAO (International Civil Aviation Organization) hat 1976 mit ICAO-Dokument 7488[1] für die Luftfahrt eine allgemein gültige und verbindliche Normatmosphäre definiert. Der Temperaturverlauf mit der Höhe wird einer Tabelle definiert. Diese bilden also einzelne Funktionen die sich mit gnuplot einfach in eine einzige zusammanfassen lassen.

#!/usr/bin/gnuplot # Modell für die Normalatmosphäre ISA (ISO2533:1975) # # Geltungsbereich: bezogen auf geometrische Höhenangabe ü.N.N # Die Norm unterteilt die Funktion in mehrere Teile und hält die Daten in einer umfangreichen Tabelle fest. # Dies ist ein Modell das mit Formeln die Daten dieser Tabelle in eine einzige, # einfach zu benutzende Funktion für die Temperatur und den Druck in Abhängigkeit der Höhe abbildet. # Pnn = 101325.0 # Normaldruck in Pa Tnn = 288.15 # Normaltemperatur in K (=15 °C) r0 = 6.356766e6 Tzero = -273.15 T0(h) = Tnn - 0.0065 * h # Standard (in K) P0(h) = Pnn * (1.0 - h/44329)**5.255876 Lh0 = 11000.0 T1(h) = -Tzero - 56.5 # Standard in K P1(h) = 22632*exp(1.73 - 0.000157*h) Lh1 = 20000.0 T2(h) = -Tzero - 76.36349549 + 0.000991818 * h P2(h) = Pnn*0.223*exp((11019-h)/6470.0) Lh2 = 32162.0 T3(h) = -Tzero - 133.4035422 + 0.002765341 * h P3(h) = Pnn*(0.996 + h/209000)**-34.16319 Lh3 = 47350.0 T4(h) = -Tzero - 2.4646 P4(h) = Pnn*(0.898309+h/55280)**-12.20114 Lh4 = 51413.0 T5(h) = -Tzero + 138.7452203 - 0.002746579 * h P5(h) = Pnn*0.00109456*exp((46998-h)/7922) Lh5 = 71802.0 T6(h) = -Tzero + 81.61954906 - 0.001950979 * h P6(h) = Pnn*(0.838263-h/176142)**12.20114 Lh6 = 86000.0 T7(h) = 186.8673 # in K, gültig 86km…91km Lh7 = 86000 T8(h) = 263.1905-76.3232*((1.0-(h-91000)/-19.9429)**2)**0.5 # gültig 91km…110km Lh8 = 91000 T9(h) = 240.0 + 12.0*(h-110000) # 110km…120km Lh9 = 110000 T10(h) = 1000 - (1000-360)*exp(-0.01875*(h-120000)*(r0+120000)/(r0+h)) # 120km…1000km Lh10 = 120000 # # Zusammengefasst in jeweils eine Funktion für Temperatur und Druck T(h) = h<Lh0 ? T0(h) : h<Lh1 ? T1(h) : h<Lh2 ? T2(h) : h<Lh3 ? T3(h) : h<Lh4 ? T4(h) : h<Lh5 ? T5(h) : h<Lh6 ? T6(h) : T7(h) P(h) = h<Lh0 ? P0(h) : h<Lh1 ? P1(h) : h<Lh2 ? P2(h) : h<Lh3 ? P3(h) : h<Lh4 ? P4(h) : h<Lh5 ? P5(h) : h<Lh6 ? P6(h) : T10(h) set terminal pdf size 29.7cm,21cm set output 'Atmosphere1.pdf' set border set key at screen 0.3,0.8 font "(,16)" set xtics 5000 set mytics 10 set style line 51 lt 0 dt 1 lc rgb 'black' set style line 52 lt 4 dt 3 lc rgb 'blue' set grid ytics mytics xtics mxtics ls 52, ls 51 # Verschiedene Farben für die Gitter set samples 1000 set format x "%.0s %c" set lmargin 12; set rmargin 8; set tmargin 5; set bmargin 5 set xrange [-1000.0:100000.0] set yrange [150:300] set title "Temperaturverlauf der ISA Norm-Atmosphäre" font "(,16)" tc rgb 'blue' set xlabel "Höhe in m über NN" set ylabel "Temperatur in K" set y2tics ( 1 ) do for [i=-100:30:10] { set y2tics add ( sprintf("%1.0f °C",i) i+273) } set multiplot plot T0(x) title sprintf("< %.0f m",Lh0),\ T1(x) title sprintf("< %.0f m",Lh2),\ T2(x) title sprintf("< %.0f m",Lh3),\ T3(x) title sprintf("< %.0f m",Lh4),\ T4(x) title sprintf("< %.0f m",Lh5),\ T5(x) title sprintf("> %.0f m",Lh6),\ T6(x) title sprintf("> %.0f m",Lh7),\ T7(x) title sprintf("> %.0f m",Lh8),\ T(x) title "Kombination" lw 4 unset multiplot set terminal png size 1200,800 set output 'Atmosphere-ISA1.png' replot set terminal pdf size 29.7cm,21cm set output 'Atmosphere2.pdf' set rmargin 12 unset yrange # set multiplot set key at screen 0.3,0.4 set title "Druckverlauf der NormAtmosphäre, Tabellenwerte und kombinierte Abschnittsfunktionen" font "(,16)" set ylabel "Druck in Pa" set format y "%.0s %c" unset y2tics set xrange [-1000:70000.0] set logscale y set logscale y2 set yrange [10:120000] set y2range [10:120000] set y2label "mBar" # add ytics from a list, as with log scale the "inc" operator is not useful Asize=15 array TicList[Asize]=[40, 60, 200, 300, 400, 600, 2000, 3000, 4000, 6000, 20000, 30000, 40000, 60000, 80000] do for [x=1:Asize] { set ytics add (TicList[x] TicList[x]) } # add secondary scale with mBar units Asize=11 array TicList[Asize]=[1000, 2000, 3000, 4000, 6000, 20000, 30000, 40000, 60000, 80000, 100000] do for [x=1:Asize] { set y2tics add (sprintf("%.0f",TicList[x]/100) TicList[x]) } plot P(x) title "Kombination" lw 3, \ P0(x) title sprintf("< %.0f m",Lh0), \ P1(x) title sprintf("< %.0f m",Lh1), \ P2(x) title sprintf("< %.0f m",Lh2), \ P3(x) title sprintf("< %.0f m",Lh3), \ P4(x) title sprintf("< %.0f m",Lh4), \ P5(x) title sprintf("< %.0f m",Lh5), \ 'ISA.csv' using 1:2 with points title "Tabellenwerte der Norm" # unset xlabel unset ylabel unset key unset title set bmargin 0 set origin 0.48,0.49 set size 0.46,0.5 set object rectangle from screen 0.52,0.46 to screen 0.92,0.93 fillcolor rgb 'white' fillstyle solid behind set xrange [-1000:10000.0] set yrange [20000:120000] set y2range [20000:120000] set y2label "mBar" set xtics 1000 set ytics add (20000 20000, 30000 30000, 40000 40000, 50000 50000, 60000 60000, 70000 70000) plot P(x) title "Kombination" lw 3, \ P0(x) title sprintf("< %.0f m",Lh0), \ P1(x) title sprintf("< %.0f m",Lh1), \ P2(x) title sprintf("< %.0f m",Lh2), \ P3(x) title sprintf("< %.0f m",Lh3), \ P4(x) title sprintf("< %.0f m",Lh4), \ P5(x) title sprintf("< %.0f m",Lh5), \ 'ISA.csv' using 1:2 with points title "Tabellenwerte der Norm" unset multiplot set terminal png size 1200,800 set output 'Atmosphere-ISA2.png' replot set output