====== std.astro.entry — Atmosphäreneintritt ======
''import std.astro.entry;''
Ballistischer Eintritt nach **Allen-Eggers**, Wärmestrom nach **Sutton-Graves** und der Eintrittskorridor. Vier Himmelskörper sind als Parametersatz hinterlegt; ein anderer Planet ist ein anderer Satz Zahlen, keine andere Funktion.
→ [[lyx_-_programmiersprache:units:astro|std.astro (Übersicht)]] · [[lyx_-_programmiersprache:units:astro:insertion|std.astro.insertion]] · [[lyx_-_programmiersprache:units:astro:state|std.astro.state]]
----
===== 1. Atmosphäre =====
pub type AAtmos = struct {
rho0: f64; // Dichte an der Bezugshoehe [kg/m^3]
H: f64; // Skalenhoehe [m]
hRef: f64; // Bezugshoehe ueber dem Radius [m]
hLimit: f64; // Eintrittsgrenze: ab hier zaehlt die Atmosphaere [m]
kHeat: f64; // Sutton-Graves-Beiwert [SI], gasabhaengig
}
^ Funktion ^ rho0 ^ H ^ Eintrittsgrenze ^ k ^
| ''AAtmosEarth()'' | 1.225 | 7200 m | 122 km | 1.7415e−4 (Luft) |
| ''AAtmosMars()'' | 0.020 | 11100 m | 125 km | 1.8980e−4 (CO₂) |
| ''AAtmosVenus()'' | 65.0 | 15900 m | 250 km | 1.8980e−4 |
| ''AAtmosTitan()'' | 5.4 | 40000 m | 1270 km | 1.8980e−4 |
''AAtmosNew(rho0, H, hRef, hLimit, kHeat)'' baut einen eigenen Satz.
^ Funktion ^ Rückgabe ^ Bedeutung ^
| ''ADensity(at, h)'' | ''f64'' [kg/m³] | barometrisch: ''rho0·e%%^%%(−(h−hRef)/H)'' |
| ''ABallisticCoeff(mass, cd, flaeche)'' | ''f64'' [kg/m²] | ''β = m/(C_D·A)'' |
Groß heißt schwer und schlank: dringt tief ein, wird spät und hart gebremst. Klein heißt leicht und breit: bremst hoch und sanft — der Grund, warum Marslander so groß und leicht gebaut sind.
===== 2. Allen-Eggers: der ballistische Eintritt =====
''gamma'' ist überall der Bahnwinkel gegen die Horizontale, **positiv nach unten** [rad].
^ Funktion ^ Rückgabe ^ Bedeutung ^
| ''APeakDecel(at, vE, gamma)'' | ''f64'' [m/s²] | ''v_E²·sin γ / (2·e·H)'' |
| ''APeakDecelG(at, vE, gamma)'' | ''f64'' | dieselbe Größe in Vielfachen von 9.80665 — so steht sie in jeder Belastungsgrenze |
| ''APeakAltitude(at, beta, gamma)'' | ''f64'' [m] | ''hRef + H·ln(rho0·H/(β·sin γ))'' |
| ''APeakSpeed(vE)'' | ''f64'' [m/s] | immer ''v_E/√e'' ≈ **61 %** des Eintrittstempos |
> **Der ballistische Koeffizient kommt in der Spitzenverzögerung nicht vor.** Wie schwer oder wie breit der Körper ist, ändert nur die **Höhe**, in der die Spitze auftritt — nicht ihre Größe. Nur Tempo, Winkel und Skalenhöhe entscheiden. In ''APeakAltitude'' steht ''β'' dann sehr wohl.
===== 3. Wärmestrom (Sutton-Graves) =====
^ Funktion ^ Rückgabe ^ Bedeutung ^
| ''AHeatFlux(at, rho, v, rNose)'' | ''f64'' [W/m²] | ''k·√(rho/R_n)·v³'' am Staupunkt |
| ''APeakHeatFlux(at, beta, vE, gamma, rNose)'' | ''f64'' [W/m²] | in der Spitze eines ballistischen Eintritts |
Die **dritte Potenz** ist die ganze Aussage: doppeltes Tempo heißt achtfacher Wärmestrom. Die Rückkehr vom Mond (11 km/s) ist deshalb nicht ein bisschen schwieriger als die aus dem Erdorbit (7.8 km/s), sondern rund dreimal so heiß.
''R_n'' ist der Nasenradius — ein **stumpfer** Körper ist kühler als ein spitzer, entgegen der Anschauung. Genau deshalb sehen Kapseln aus wie Kuchenformen.
===== 4. Eintrittskorridor =====
^ Funktion ^ Rückgabe ^ Bedeutung ^
| ''AEntryAngle(s)'' | ''f64'' [rad] | Bahnwinkel aus einem Zustand, positiv nach unten |
| ''AShallowLimit(mu, rLimit, vLimit, rTarget)'' | ''f64'' [rad] | **flache** Grenze: flacher, und der Körper fliegt wieder hinaus |
| ''ASteepLimit(at, vE, aMax)'' | ''f64'' [rad] | **steile** Grenze aus einer Verzögerungsschranke [m/s²] |
| ''ASteepLimitG(at, vE, gMax)'' | ''f64'' [rad] | dasselbe mit einer Schranke in g |
| ''ACorridorWidth(at, mu, rLimit, vLimit, rTarget, gMax)'' | ''f64'' [rad] | Breite; **negativ heißt: es gibt keinen** |
| ''AInCorridor(…, gamma)'' | ''bool'' | liegt ein Eintritt darin? |
| ''ASkipsOut(mu, rLimit, vLimit, rTarget, gamma)'' | ''bool'' | prallt der Körper ab? |
| ''AOverloads(at, vE, gamma, gMax)'' | ''bool'' | wird die Belastungsgrenze überschritten? |
> **Die flache Grenze ist geometrisch gerechnet, nicht über die Bremswirkung**: solange das Perizentrum der ungestörten Kegelschnittbahn oberhalb der wirksamen Atmosphäre bleibt, wird der Körper nicht genug gebremst. Das ist die konservative, nachrechenbare Fassung — die echte Grenze liegt etwas flacher, weil auch eine dünne Schicht bremst.
>
> **''ACorridorWidth'' wird bei einem negativen Ergebnis nicht auf 0 abgeschnitten.** „Kein Korridor" ist die Aussage, wegen der man rechnet: bei diesem Anflugtempo lässt sich die Belastungsgrenze nicht einhalten **und** zugleich tief genug eintauchen.
>
> ''ASteepLimit'' meldet ''π/2'' statt eines Fehlers, wenn die Schranke bei diesem Tempo gar nicht zu verletzen ist.
===== 5. Die Parameter im Einzelnen =====
^ Name ^ Bedeutung ^ Einheit ^ Typische Werte ^
| ''at'' | Atmosphärensatz | — | ''AAtmosEarth()'' & Co. oder eigener über ''AAtmosNew'' |
| ''h'' | Höhe **über der Bezugshöhe** ''hRef'', nicht Radius | m | ''ADensity(at, 50000.0)'' = 50 km über Grund |
| ''vE'' | Geschwindigkeit **an der Eintrittsgrenze** | m/s | 7800 aus dem Erdorbit, 11 000 vom Mond, 5800 beim Marsanflug |
| ''gamma'' | Bahnwinkel gegen die Horizontale, **positiv nach unten** | **Radiant** | 1…8 Grad Erde, 10…16 Grad Mars; ''gamma ≤ 0'' ⇒ NaN (streift oder steigt) |
| ''beta'' | ballistischer Koeffizient ''m/(C_D·A)'' | kg/m² | 50…150 Kapsel, 65 Marslander, 5000+ Sprengkopf |
| ''rNose'' | Nasenradius am Staupunkt | m | 0.3…1.5; **größer ist kühler** |
| ''rho'' | Dichte am betrachteten Ort | kg/m³ | meist aus ''ADensity'' |
| ''aMax'' / ''gMax'' | Belastungsgrenze | m/s² bzw. Vielfache von 9.80665 | 4 g bemannt, 10…20 g unbemannt |
| ''rLimit'' | Radius der Eintrittsgrenze | m | ''ARadiusEarth() + at.hLimit'' |
| ''vLimit'' | Geschwindigkeit dort | m/s | = ''vE'' |
| ''rTarget'' | Radius, bis zu dem der Körper eintauchen **muss** | m | üblich: Grenzhöhe minus einige Skalenhöhen |
> **Die Felder von ''AAtmos'' sind Modellparameter, keine Messwerte.** ''rho0'' und ''H'' beschreiben eine **exponentielle** Atmosphäre — eine Näherung, die im Bereich der Spitzenverzögerung gut trägt und in großer Höhe wie am Boden schlechter wird. Wer genauer rechnen muss, ersetzt ''ADensity'' durch ein Tabellenmodell; die übrigen Funktionen nehmen die Dichte ohnehin als Argument.
>
> ''kHeat'' hängt am **Gas**, nicht am Planeten: Luft 1.7415e−4, CO₂ 1.8980e−4. Für Venus und Titan steht deshalb derselbe Wert wie für Mars.
===== 6. Beispiel: Rückkehr aus dem Erdorbit =====
import std.astro.state;
import std.astro.entry;
import std.math;
import std.io;
fn zeig(n: pchar, v: f64, d: int64): void { Print(n); PrintLn(FloatToStr(v, d)); }
fn main(): int64 {
var at: AAtmos := AAtmosEarth();
var gam: f64 := 6.0 * Pi() / 180.0; // 6 Grad, typischer Rueckkehrwinkel
var vE: f64 := 7800.0;
var beta: f64 := 100.0; // kg/m^2, Kapsel
zeig("Dichte 50 km : ", ADensity(at, 50000.0), 8);
zeig("Peak g : ", APeakDecelG(at, vE, gam), 2);
zeig("Peak Hoehe km : ", APeakAltitude(at, beta, gam) / 1000.0, 1);
zeig("Peak Tempo : ", APeakSpeed(vE), 1);
zeig("Peak Waerme MW/m2 : ", APeakHeatFlux(at, beta, vE, gam, 0.5) / 1000000.0, 2);
zeig("steile Grenze 10g : ", ASteepLimitG(at, vE, 10.0) * 180.0 / Pi(), 2);
return 0;
}
Dichte 50 km : 0.00118087
Peak g : 16.57
Peak Hoehe km : 48.5
Peak Tempo : 4730.9
Peak Waerme MW/m2 : 0.99
steile Grenze 10g : 3.62
Das Beispiel zeigt zugleich, warum der Korridor eng ist: bei 6 Grad kommen **16.6 g** heraus — für eine unbemannte Sonde tragbar, für eine Besatzung nicht. Die 10-g-Grenze liegt bei **3.6 Grad**; flacher als die flache Grenze darf es trotzdem nicht werden, sonst prallt die Kapsel ab.
===== 7. Beispiel: Winkelreihe und ein zweiter Planet =====
Der Eintrittswinkel ist die eine Größe, die alles entscheidet — hier über den ganzen brauchbaren Bereich, und daneben derselbe Vorgang am Mars:
import std.astro.entry;
import std.math;
import std.io;
fn f(v: f64, d: int64): pchar { return FloatToStr(v, d); }
fn main(): int64 {
var erde: AAtmos := AAtmosEarth();
var mars: AAtmos := AAtmosMars();
var rad: f64 := Pi() / 180.0;
PrintLn("Erde, 7.8 km/s, beta 100 kg/m2:");
PrintLn(" Winkel Peak g Peak km Waerme MW/m2");
var g: f64 := 2.0;
while (g <= 10.0) {
var gam: f64 := g * rad;
Print(" "); Print(f(g, 1)); Print(" Grad ");
Print(f(APeakDecelG(erde, 7800.0, gam), 2)); Print(" ");
Print(f(APeakAltitude(erde, 100.0, gam) / 1000.0, 1)); Print(" ");
PrintLn(f(APeakHeatFlux(erde, 100.0, 7800.0, gam, 0.5) / 1000000.0, 2));
g := g + 2.0;
}
PrintLn("");
PrintLn("Mars, 5.8 km/s, beta 65 kg/m2 (Marslander), 12 Grad:");
var gm: f64 := 12.0 * rad;
Print(" Peak g : "); PrintLn(f(APeakDecelG(mars, 5800.0, gm), 2));
Print(" Peak Hoehe km : "); PrintLn(f(APeakAltitude(mars, 65.0, gm) / 1000.0, 1));
Print(" Waerme MW/m2 : "); PrintLn(f(APeakHeatFlux(mars, 65.0, 5800.0, gm, 1.0) / 1000000.0, 3));
Print(" Dichte am Boden : "); PrintLn(f(ADensity(mars, 0.0), 4));
Print(" Dichte 10 km : "); PrintLn(f(ADensity(mars, 10000.0), 5));
return 0;
}
Erde, 7.8 km/s, beta 100 kg/m2:
Winkel Peak g Peak km Waerme MW/m2
2.0 Grad 5.53 56.4 0.57
4.0 Grad 11.06 51.4 0.81
6.0 Grad 16.57 48.5 0.99
8.0 Grad 22.06 46.5 1.15
10.0 Grad 27.52 44.9 1.28
Mars, 5.8 km/s, beta 65 kg/m2 (Marslander), 12 Grad:
Peak g : 11.82
Peak Hoehe km : 31.1
Waerme MW/m2 : 0.288
Dichte am Boden : 0.0200
Dichte 10 km : 0.00812
Die Reihe zeigt den Zusammenhang in Zahlen: die Spitzenverzögerung wächst **linear mit sin γ** — 2 Grad ergeben 5.5 g, 10 Grad das Fünffache. Der Wärmestrom wächst deutlich langsamer (0.57 → 1.28 MW/m²), weil der Körper bei steilem Eintritt tiefer und damit später bremst. Genau darin liegt die Zwickmühle des Korridors: **flach ist kühl, aber lang und mit Abprallgefahr; steil ist kurz, aber hart.**
Der Mars ist der Gegenfall: die dünne Atmosphäre verlangt einen viel steileren Winkel (12 statt 6 Grad) und erzwingt einen kleinen ballistischen Koeffizienten — deshalb sind Marslander groß und leicht. Der Wärmestrom bleibt dabei mit 0.29 MW/m² weit unter dem der Erdrückkehr.
----
Letzte Aktualisierung: 2026-08-31 — Parametertabelle mit typischen Werten und ein zweites Beispiel (Winkelreihe Erde, Vergleich Mars) ergänzt; beide Beispiele mit ''lyxc 1.1.15B'' gebaut und ausgeführt.
Zuvor 2026-08-31 — Seite neu angelegt aus ''std/astro/entry.lyx'' (PR #1890).