TCI-X Algorithmus: Thermik-Scoring mit Physik und Code
Der physikbasierte Thermik-Index erklärt: CAPE, LCL, W*, Sonnenfenster-Check und wie diese in einen Score von 0-100 umgewandelt werden
🎯 Was ist TCI-X?
TCI-X (Thermal Condition Index - Extended) ist ein physikbasierter Scoring-Algorithmus, der die Thermikbedingungen für Segelflieger auf einer Skala von 0 bis 100 bewertet.
Anders als einfache "Daumen hoch/runter" Vorhersagen kombiniert TCI-X mehrere meteorologische Parameter:
- CAPE – Konvektive verfügbare potentielle Energie
- CIN – Konvektive Hemmung (Inversion)
- LCL – Lifting Condensation Level (Wolkenbasis)
- W* – Maximale thermische Aufwindgeschwindigkeit
- Sonnenfenster – Gibt es genug Sonneneinstrahlung?
Das Ergebnis: Ein klarer Score mit Label wie 🌡️ Excellent, 🟢 Good, 🟡 Marginal oder 🥶 Capped.
🔬 Die Physik hinter dem Score
CAPE – Die Energie für Thermik
CAPE (Convective Available Potential Energy) misst, wie viel Energie eine aufsteigende Luftblase hat. Je höher CAPE, desto stärker die Thermik.
- 0-50 J/kg: Sehr schwach – kaum Thermik
- 50-400 J/kg: Schwach bis moderat – brauchbare Thermik
- 400-1500 J/kg: Gut bis sehr gut – starke Thermik
- 1500+ J/kg: Excellent – sehr starke Thermik, aber Achtung: Gewittergefahr!
CIN – Der Thermik-Killer
CIN (Convective Inhibition) ist die "Sperrschicht" – eine Inversion, die Thermik verhindert. Negative CIN-Werte bedeuten: Thermik kann nicht starten, selbst wenn CAPE hoch ist.
- CIN > -10 J/kg: Fast keine Hemmung – Thermik läuft frei
- CIN < -50 J/kg: Starke Inversion – CAPPED, keine Thermik möglich
LCL – Die Wolkenbasis
LCL (Lifting Condensation Level) ist die Höhe, auf der aufsteigende Luft kondensiert und Wolken bildet. Das ist die "Arbeitshöhe" für Segelflieger.
- 500-1500m AGL: Niedrige Basis – eng, aber fliegbar
- 1500-3000m AGL: Ideal – genug Arbeitshöhe
- 3000+ m AGL: Sehr hoch – großer Arbeitsraum, aber spät startend
W* – Maximale Steigrate
W* (W-Star) ist die theoretische maximale vertikale Geschwindigkeit in Thermikblasen. Typische Werte: 1-5 m/s.
- < 1.0 m/s: Sehr schwach – kaum fliegbar
- 1.5-3.0 m/s: Gut – solide Thermik
- 3.0+ m/s: Sehr stark – schnelles Steigen
⚙️ Der TCI-X Algorithmus
So wird der TCI-X Score berechnet:
function calcTCI(dayHours) {
// 1. Nur Tageslicht-Stunden (7-19 Uhr) verwenden
const daylight = dayHours.filter(h => {
const hour = new Date(h.time).getHours();
return hour >= 7 && hour <= 19;
});
if (daylight.length === 0) return { score: 0, label: 'Keine Daten', level: 'capped' };
// 2. Maximalwerte extrahieren
let capeMax = 0, cinMin = 0, wstarMax = 0;
daylight.forEach(h => {
const cape = pickField(h, 'cape') || 0;
const cin = pickField(h, 'convective_inhibition') || 0;
const wstar = calculateWstar(h); // Berechne W* aus BLH und Temperatur
if (cape > capeMax) capeMax = cape;
if (cin < cinMin) cinMin = cin;
if (wstar > wstarMax) wstarMax = wstar;
});
// 3. CAPPED Check – Inversion verhindert Thermik?
if (cinMin < -50) {
return { score: Math.round(capeMax / 30), label: '🥶 Capped', level: 'capped' };
}
// 4. TCI-X Score berechnen
let score = 0;
// CAPE Contribution (0-50 Punkte)
if (capeMax < 50) {
score += capeMax * 0.2; // Sehr schwach: 0-10 Punkte
} else if (capeMax < 400) {
score += 10 + (capeMax - 50) * 0.08; // Schwach: 10-38 Punkte
} else if (capeMax < 1500) {
score += 38 + (capeMax - 400) * 0.011; // Gut: 38-50 Punkte
} else {
score += 50; // Excellent: 50 Punkte (cap)
}
// W* Contribution (0-30 Punkte)
score += Math.min(wstarMax * 10, 30);
// Sonnenfenster-Check (0-20 Punkte)
const hasSun = hasSunWindow(daylight);
if (hasSun) {
score += 20;
} else {
score += 5; // Nur 5 Punkte ohne Sonnenfenster
}
// 5. Finalen Score begrenzen (0-100)
score = Math.max(0, Math.min(100, score));
// 6. Label zuweisen
let label, level;
if (score >= 70) {
label = '🌡️ Excellent';
level = 'excellent';
} else if (score >= 45) {
label = '🟢 Good';
level = 'good';
} else if (score >= 24) {
label = '🟡 Marginal';
level = 'marginal';
} else {
label = '🔵 Poor';
level = 'poor';
}
return { score: Math.round(score), label, level };
}
🌞 Der Sonnenfenster-Check
Ohne Sonne keine Thermik! Der Algorithmus prüft, ob es mindestens 2 aufeinanderfolgende Stunden mit ≥ 0.9h Sonnenschein gibt:
function hasSunWindow(dayHours) {
let streak = 0;
for (let h of dayHours) {
const sunDuration = pickField(h, 'sunshine_duration'); // in Sekunden
if (sunDuration != null && sunDuration >= 3240) { // >= 0.9h (3240s)
streak++;
if (streak >= 2) return true; // Mindestens 2 Stunden in Folge
} else {
streak = 0; // Reset
}
}
return false;
}
Warum 0.9h und nicht 1.0h? Weil API-Daten manchmal leicht unter 1h liegen können, auch bei gutem Wetter. 0.9h ist ein pragmatischer Schwellwert.
📊 W* Berechnung
W* wird aus der Boundary Layer Height (BLH) und Temperaturgradienten berechnet:
function calculateWstar(hour) {
const blh = pickField(hour, 'boundary_layer_height'); // in Metern
const temp2m = pickField(hour, 'temperature_2m'); // °C
const tempBLH = pickField(hour, 'temperature_at_blh'); // °C (falls verfügbar)
if (blh == null || temp2m == null) return 0;
// Vereinfachte W* Formel (angenähert)
// W* ≈ sqrt(g * BLH * ΔT / T_avg)
const deltaT = tempBLH != null ? Math.abs(temp2m - tempBLH) : 5; // Fallback: 5K
const T_avg = 273.15 + temp2m; // Kelvin
const g = 9.81; // Erdbeschleunigung m/s²
const wstar = Math.sqrt((g * blh * deltaT) / T_avg);
return wstar; // in m/s
}
Hinweis: Dies ist eine vereinfachte Formel. In der Realität sind Faktoren wie Feuchtigkeit, Windscherung und Terrain-Effekte ebenfalls relevant.
🎨 Visualisierung: TCI-X Levels
Die TCI-X Levels werden in der UI mit Farben und Icons dargestellt:
🌡️ Excellent (70-100)
CAPE > 1000, W* > 3.0, Sonnenfenster vorhanden
🟢 Good (45-69)
CAPE 400-1000, W* 2.0-3.0, gute Bedingungen
🟡 Marginal (24-44)
CAPE 100-400, W* 1.0-2.0, schwache Thermik
🥶 Capped (< 24 oder CIN < -50)
Inversion blockiert Thermik – nicht fliegbar
🚀 Praktische Anwendung
So wird TCI-X in EDXE Thermik-X verwendet:
// Für jeden Tag den TCI-X Score berechnen
Object.keys(days).forEach(dateKey => {
const dayData = days[dateKey];
const tci = calcTCI(dayData.hours);
console.log(`${dateKey}: TCI-X ${tci.score}/100 - ${tci.label}`);
// Badge-Farbe basierend auf Level
const badgeColor = {
'excellent': 'var(--teal)', // Cyan
'good': '#66FF66', // Grün
'marginal': 'var(--yellow)', // Gelb
'poor': 'var(--grey)', // Grau
'capped': 'var(--coral)' // Rot
}[tci.level];
// In UI rendern
renderTCIBadge(dateKey, tci.score, tci.label, badgeColor);
});
💡 Best Practices
- CAPE allein reicht nicht: Immer CIN checken! Hohe CAPE + starke Inversion = CAPPED
- Sonnenfenster ist kritisch: Ohne Sonne keine Thermik, egal wie gut CAPE ist
- W* gibt die Steigrate an: Niedrige W* = langsame, breite Thermik; hohe W* = schnell, eng
- LCL bestimmt die Arbeitshöhe: Zu niedrig = wenig Spielraum; zu hoch = späte Thermik
- Score-Kalibrierung: Passe die Gewichtung an deine Region und Erfahrung an
🎯 Zusammenfassung
Der TCI-X Algorithmus kombiniert:
- ✅ Physikalische Parameter: CAPE, CIN, LCL, W*
- ✅ Meteorologische Realität: Sonnenfenster-Check
- ✅ Klare Kategorisierung: Excellent, Good, Marginal, Capped
- ✅ 0-100 Score: Einfach verständlich und vergleichbar
Der vollständige Code ist im EDXE Thermik-X Projekt live zu sehen!