====== std.aero.perf — Flugleistung: Steigen, Sinken, Reiseflug, Wind ====== → [[lyx_-_programmiersprache:units:aero|std.aero Übersicht]] · [[lyx_-_programmiersprache:guides:mcdu|Guide: Flugführungsrechner bauen]] · [[lyx_-_programmiersprache:units:aero:atmos|std.aero.atmos]] · [[lyx_-_programmiersprache:units:aero:vnav|std.aero.vnav]] · [[lyx_-_programmiersprache:units|Standard Library]] Was ein Flugführungsrechner an Bord ausrechnet, aufgebaut auf [[lyx_-_programmiersprache:units:aero:atmos|std.aero.atmos]]: Bahngeometrie, Zwangspunkte, Kurven, Pseudo-Wegpunkte, Steigleistung aus dem Energieüberschuss, Reiseflugoptimierung und Wind. **Musterabhängige Kennzahlen kommen vom Aufrufer** — Gleitzahl, spezifischer Verbrauch, Schub und Widerstand stehen im Flughandbuch. Ein eingebauter „typischer" Wert wäre für jedes Muster falsch und würde nirgends auffallen. **Quelle:** ''std/aero/perf.lyx'' · **Autor:** Andreas Röne · **Copyright:** 2026 Andreas Röne ---- ===== 1. Bahngeometrie ===== ^ Signatur ^ Beschreibung ^ | ''AvGradZuRad(grad: f64): f64'' · ''AvRadZuGrad(rad: f64): f64'' | Winkelmaße | | ''AvSinkrateFpm(grundgeschwKt: f64, bahnwinkelGrad: f64): f64'' | Rate, die einen gegebenen Bahnwinkel hält. 3° bei 140 kt → rund 743 fpm. Die Faustformel „halbe Grundgeschwindigkeit mal 10" (700 fpm) liegt drei Prozent daneben — sie taugt zum Nachrechnen im Kopf, nicht als Rechnung im Gerät | | ''AvBahnwinkelGrad(grundgeschwKt: f64, rateFpm: f64): f64'' | die Umkehrung | | ''AvGradientProzent(hoehenaenderungFt: f64, streckeNm: f64): f64'' | Gradient in Prozent — die Größe, in der Hindernisfreiheit und Startsteigflug-Vorgaben ausgedrückt sind | | ''AvRateFuerGradientFpm(grundgeschwKt: f64, gradientProzent: f64): f64'' | Rate für einen geforderten Gradienten. Abflugverfahren sind so geschrieben („3,3 % bis 2000 ft") — die Frage an Bord lautet, welche Rate das ist | ---- ===== 2. Zwangspunkte ===== ^ Signatur ^ Beschreibung ^ | ''AvNoetigeSinkrateFpm(hoeheJetztFt, hoeheZielFt, streckeNm, grundgeschwKt): f64'' | Rate für „FL100 bei 30 NM". Kennt **keine** Gleitzahl — sie sagt nur, was nötig ist | | ''AvNoetigerWinkelGrad(hoeheJetztFt, hoeheZielFt, streckeNm): f64'' | derselbe Zwangspunkt als Bahnwinkel — die Form, in der ein Anflugprofil beurteilt wird („steiler als 3,5°" heißt: umplanen) | | ''AvZwangspunktErreichbar(hoeheJetztFt, hoeheZielFt, streckeNm, gleitzahl, eigengeschwKt, windKomponenteKt): bool'' | ist er überhaupt erreichbar? Verglichen wird der **nötige** Bahnwinkel mit dem, den das Flugzeug im Leerlauf schafft | | ''AvAbweichungVomProfilFt(hoeheJetztFt, hoeheZielFt, streckeNm, gleitzahl, eigengeschwKt, windKomponenteKt): f64'' | wie viel Höhe bis zum Zwangspunkt zu viel ist. Positiv = so viele Fuß über dem Profil | Ob das Flugzeug die nötige Rate **kann**, entscheidet der Aufrufer, indem er das Ergebnis gegen die Leerlauf-Sinkrate hält. Die Frage „wir sind zu hoch" stellt sich an Bord ständig — und ist der Grund, warum ein FMS eine Meldung ausgibt, statt still ein unmögliches Profil zu zeichnen. ---- ===== 3. Sinkflugbeginn im Leerlauf ===== ^ Signatur ^ Beschreibung ^ | ''AvTodStreckeNmFaustformel(hoeheJetztFt, hoeheZielFt): f64'' | die 3:1-Regel („3 mal die abzubauenden Tausend Fuß", FL350 → 105 NM), rund 3,2°. Steht als eigene Funktion da, weil sie im Cockpit tatsächlich benutzt wird | | ''AvTodStreckeNm(hoeheJetztFt, hoeheZielFt, gleitzahl, eigengeschwKt, windKomponenteKt): f64'' | die Rechnung mit Gleitzahl und Wind. ''gleitzahl'' ist Strecke je Höhe (L/D im Sinkflug, für Verkehrsflugzeuge typisch 15 bis 18) und kommt aus dem Handbuch. ''windKomponenteKt'' ist **positiv bei Rückenwind** — Rückenwind schiebt, die Strecke wird länger, der Punkt liegt früher | | ''AvTodSinkrateFpm(gleitzahl, eigengeschwKt, windKomponenteKt): f64'' | die Sinkrate, die zu diesem Leerlaufprofil gehört | Genauer als die Gleitzahl über den ganzen Höhenbereich ist die Integration in [[lyx_-_programmiersprache:units:aero:vnav|std.aero.vnav]] (''AvTodStreckeAusProfilNm''). ---- ===== 4. Steigen ===== ^ Signatur ^ Beschreibung ^ | ''AvSteigrateFpm(schubN, widerstandN, tasKt, masseKg): f64'' | Steigrate aus dem **Energieüberschuss** — keine Geometrie und keine Faustformel, sondern die Definition. Sie erklärt, warum die Rate mit der Höhe abnimmt (der Schub fällt) und mit dem Gewicht (der Nenner wächst) | | ''AvSteigwinkelGrad(schubN, widerstandN, masseKg): f64'' | Steigwinkel aus derselben Bilanz — mit Arkussinus, weil die Näherung sin γ ≈ (T−D)/W bei hohem Schub-Gewicht-Verhältnis mehrere Grad danebenliegt | | ''AvSteigzeitMin(vonFt, bisFt, mittlereRateFpm): f64'' | Zeit für einen Steigabschnitt | | ''AvSteigstreckeNm(vonFt, bisFt, mittlereRateFpm, grundgeschwKt): f64'' | zurückgelegte Strecke | | ''AvDienstgipfelhoeheM(schubSlN, widerstandN, tasKt, masseKg, restrateFpm): f64'' | Höhe, in der nur noch ''restrateFpm'' übrig ist. Per Bisektion gesucht: die Steigrate fällt mit der Höhe, ist aber nicht geschlossen umkehrbar. Der Schub wird proportional zum Druckverhältnis δ angesetzt — wer eine bessere Schubkurve hat, rechnet damit selbst | Schub und Widerstand bringt der Aufrufer aus seinem Handbuch mit; sie sind musterabhängig und haben in einer allgemeinen Unit nichts verloren. ---- ===== 5. Reiseflug ===== ^ Signatur ^ Beschreibung ^ | ''AvSpezifischeReichweiteNmProKg(tasKt, verbrauchKgProH): f64'' | Strecke je Treibstoffmasse — die Größe, die im Reiseflug maximiert wird | | ''AvBreguetReichweiteNm(tasKt, sfcProH, gleitzahl, masseStartKg, masseEndeKg): f64'' | R = (V/c)·(L/D)·ln(m_start/m_ende) | | ''AvBreguetFlugdauerH(sfcProH, gleitzahl, masseStartKg, masseEndeKg): f64'' | Flugdauer nach Breguet | | ''AvOptimaleHoeheM(masseKg, wProDeltaOptN: f64): f64'' | optimale Reiseflughöhe aus W/δ | | ''AvStufensteigGewinnM(masseVorherKg, masseNachherKg, wProDeltaOptN): f64'' | Höhengewinn eines Stufensteigflugs, wenn Treibstoff verbrannt ist | W/δ ist im Optimum konstant. Wird das Flugzeug leichter, muss δ kleiner werden — **die optimale Höhe steigt im Verlauf des Fluges**. Genau deshalb gibt es Stufensteigflüge; wer die Höhe als feste Zahl führt, fliegt die zweite Hälfte zu tief. ''wProDeltaOpt'' ist die musterabhängige Kennzahl aus dem Handbuch (Gewicht in Newton bei δ = 1). ==== Cost Index ==== ^ Signatur ^ Beschreibung ^ | ''AvGesamtkostenKgAequiv(flugzeitH, treibstoffKg, costIndex): f64'' | Zeitkosten plus Treibstoffkosten in „kg-Äquivalent" — der Einheit, in der ein FMS vergleicht | | ''AvGuenstigere(zeit1H, kraftstoff1Kg, zeit2H, kraftstoff2Kg, costIndex): int64'' | welche von zwei Geschwindigkeiten günstiger ist: 1, 2 oder 0 bei Gleichstand | CI 0 heißt „Treibstoff ist alles" — maximale Reichweite; ein hoher CI heißt „Zeit ist teuer" — schneller und mit mehr Verbrauch. Zwei Angebote zu vergleichen ist die Form, in der die Frage an Bord tatsächlich auftritt, nicht als geschlossene Optimierung: dafür bräuchte man die vollständige Verbrauchskurve des Musters. ---- ===== 6. Wind ===== ^ Signatur ^ Beschreibung ^ | ''AvWindkomponenteKt(kursGrad, windRichtungGrad, windStaerkeKt): f64'' | Gegen-/Rückenwind. **Positiv = Rückenwind** | | ''AvSeitenwindKt(kursGrad, windRichtungGrad, windStaerkeKt): f64'' | Seitenwind, immer als Betrag — für den Vergleich mit der zulässigen Grenze | | ''AvVorhaltewinkelGrad(kursGrad, tasKt, windRichtungGrad, windStaerkeKt): f64'' | Vorhaltewinkel aus dem Winddreieck | | ''AvGrundgeschwindigkeitKt(kursGrad, tasKt, windRichtungGrad, windStaerkeKt): f64'' | Grundgeschwindigkeit aus demselben Dreieck | ---- ===== 7. Kurven ===== ^ Signatur ^ Beschreibung ^ | ''AvKurvenradiusNm(tasKt, querneigungGrad): f64'' | r = v² / (g · tan φ) | | ''AvKurvenrateGradProS(tasKt, querneigungGrad): f64'' | ω = g · tan φ / v | | ''AvQuerneigungFuerRateGrad(tasKt, rateGradProS): f64'' | welche Querneigung eine gewünschte Rate ergibt. Die Standardkurve mit 3°/s bräuchte bei 480 kt TAS eine Querneigung, die kein Verkehrsflugzeug fliegt — deshalb wird oben herum mit fester Querneigung gekurvt und die Rate fällt | | ''AvKurvenvorhaltNm(tasKt, querneigungGrad, kursaenderungGrad): f64'' | **Kurvenvorhalt** (turn anticipation): wie weit vor dem Knickpunkt die Kurve beginnt, d = r · tan(Δψ/2) | | ''AvKurvenabkuerzungNm(tasKt, querneigungGrad, kursaenderungGrad): f64'' | Streckengewinn: zweimal der Vorhalt minus der Bogen | | ''AvKurvendauerS(tasKt, querneigungGrad, kursaenderungGrad): f64'' | Dauer der Kurve — geht in die Zeitvorhersage ein | Ab **180° Kursänderung** liefert ''AvKurvenvorhaltNm'' den Fehlerwert, keine sehr große Zahl: die Tangente wäre unendlich, eine Kehrtwende lässt sich nicht abkürzen. Eine große Zahl sähe aus wie ein Ergebnis. ---- ===== 8. Pseudo-Wegpunkte ===== Sie liefern **Positionen entlang der Route in NM** — die Größe, an der das Symbol auf der Flugroute gezeichnet wird. ^ Signatur ^ Beschreibung ^ | ''AvTopOfClimbNm(startPositionNm, hoeheStartFt, reiseflughoeheFt, mittlereRateFpm, grundgeschwKt): f64'' | **T/C** — wo die Reiseflughöhe erreicht ist | | ''AvTopOfDescentNm(zwangspunktNm, hoeheJetztFt, hoeheZielFt, gleitzahl, eigengeschwKt, windKomponenteKt): f64'' | **T/D** — er liegt um die Sinkstrecke vor dem Zwangspunkt | | ''AvDecelPunktNm(anflugPunktNm, vonKt, aufKt, verzoegerungKtProMin, grundgeschwKt): f64'' | **DECEL** — wo die Verzögerung auf die Anfluggeschwindigkeit beginnen muss. ''verzoegerungKtProMin'' ist musterabhängig (im Leerlauf, sauber, typisch 10 bis 20 kt/min) | Liegt der T/D vor dem jetzigen Ort, ist die Antwort ein **Fehler** und keine negative Zahl: „der Sinkflug hätte schon begonnen haben müssen" ist eine Lage, keine Position. ---- ===== 9. Umkehrpunkte ===== ^ Signatur ^ Beschreibung ^ | ''AvPunktGleicherZeitNm(gesamtstreckeNm, tasKt, windKomponenteKt): f64'' | **Punkt gleicher Zeit**: von hier dauert Weiterfliegen genauso lang wie Umkehren. Wichtig über Wasser und in der Wüste — der Wind verschiebt ihn erheblich, weil er in eine Richtung hilft und in die andere bremst. Rückgabe: Strecke vom Startpunkt | | ''AvPunktOhneWiederkehrNm(nutzbareStundenH, tasKt, windKomponenteKt): f64'' | **Punkt ohne Wiederkehr**: der letzte Punkt, von dem der Treibstoff noch zur Rückkehr reicht | ---- Letzte Aktualisierung: 2026-09-05 — Seite neu angelegt; erhoben aus ''std/aero/perf.lyx'' (Stand 2026-09-04). Prüflauf 2026-09-05 mit ''doku-pruefer.py'' über den gesamten Aero-Bereich (Repo-Compiler **lyxc 1.2.2A**): 13 Vollprogramme, 13 übersetzen, 0 echte Fehler; 193 Aufrufe gegen die ''pub fn''-Signaturen in ''aurum/std'' gehalten, 0 Abweichungen.