Pengenalan CAPE dan CIN
Ketika sebuah parcel udara hangat dan lembap terangkat ke atmosfer, ada dua pertanyaan kritis yang dijawab oleh CAPE dan CIN: seberapa besar energi yang tersedia jika parcel itu berhasil naik bebas, dan seberapa besar hambatan yang harus diatasi sebelum itu terjadi.
CAPE (Convective Available Potential Energy) adalah energi apung positif yang terintegrasi secara vertikal dari Level of Free Convection (LFC) hingga Equilibrium Level (EL). Secara formal:
$$\text{CAPE} = \int_{p_{EL}}^{p_{LFC}} R_d \left(T_{v,\text{parcel}} - T_{v,\text{env}}\right) \, d(\ln p)$$
Nilai CAPE dinyatakan dalam J/kg. NWS mengklasifikasikannya dalam empat kategori operasional: di bawah 1.000 J/kg (lemah), 1.000–2.500 J/kg (moderat), 2.500–4.000 J/kg (kuat), dan di atas 4.000 J/kg (ekstrem).
CIN (Convective Inhibition) adalah kebalikannya — energi negatif yang harus diatasi parcel dari permukaan hingga LFC. CIN di bawah 50 J/kg dianggap lemah (lifting ringan sudah cukup); CIN di atas 200 J/kg dapat menekan konveksi permukaan sepenuhnya meskipun CAPE-nya tinggi.
Di Indonesia, kedua indeks ini relevan namun harus diinterpretasikan dengan hati-hati. Lingkungan maritim tropis mempertahankan CAPE yang secara persisten tinggi — seringkali di atas 1.000 J/kg bahkan tanpa konveksi aktif. Sagita et al. (2025) menemukan bahwa CAPE berdiri sendiri adalah prediktor thunderstorm yang lemah di Indonesia; precipitable water dan K-Index lebih diskriminatif secara operasional.
Memuat dan Mempersiapkan Data ERA5
Data yang kita gunakan adalah file NetCDF ERA5 yang sudah di-cache di /data/era5/ — dua file pressure-level harian (00 UTC) untuk Indonesia tahun 2024: temperature dan specific humidity di 500 dan 850 hPa.
Snippet berikut membuka kedua file, memilih lokasi Jakarta (\(-6{,}2°\)LS, \(106{,}8°\)BT), dan mencetak nilai \(T\) serta \(q\) di kedua level untuk dua tanggal representatif: 15 Februari 2024 (musim hujan) dan 15 Agustus 2024 (musim kemarau).
import xarray as xr
import numpy as np
# Buka file pressure-level ERA5 yang sudah di-cache
ds_t = xr.open_dataset("/data/era5/era5_t_pl500-850_indonesia_2024_d.nc")
ds_q = xr.open_dataset("/data/era5/era5_q_pl500-850_indonesia_2024_d.nc")
# Pilih lokasi Jakarta (terdekat ke -6.2°LS, 106.8°BT)
lat_jkt, lon_jkt = -6.2, 106.8
t_jkt = ds_t.sel(latitude=lat_jkt, longitude=lon_jkt, method="nearest")
q_jkt = ds_q.sel(latitude=lat_jkt, longitude=lon_jkt, method="nearest")
# Ambil variabel temperature dan specific humidity
# ERA5 pressure-level: variabel 't' dan 'q'
t_var = [v for v in ds_t.data_vars][0]
q_var = [v for v in ds_q.data_vars][0]
dates = ["2024-02-15", "2024-08-15"]
levels = [850, 500]
print(f"{'Tanggal':<14} {'Level':>6} {'T (K)':>10} {'q (g/kg)':>12}")
print("-" * 46)
for date in dates:
t_day = t_jkt[t_var].sel(valid_time=date, method="nearest")
q_day = q_jkt[q_var].sel(valid_time=date, method="nearest")
for lev in levels:
t_val = float(t_day.sel(pressure_level=lev))
q_val = float(q_day.sel(pressure_level=lev)) * 1000 # ke g/kg
print(f"{date:<14} {lev:>6} hPa {t_val:>8.2f} K {q_val:>10.3f} g/kg")
Tanggal Level T (K) q (g/kg)
----------------------------------------------
2024-02-15 850 hPa 292.27 K 13.167 g/kg
2024-02-15 500 hPa 268.77 K 4.839 g/kg
2024-08-15 850 hPa 290.45 K 12.050 g/kg
2024-08-15 500 hPa 267.17 K 3.718 g/kg
Output di atas menunjukkan profil \(T\) dan \(q\) Jakarta pada dua skenario musiman. Perhatikan bahwa \(q\) di 850 hPa pada musim hujan (Februari) cenderung lebih tinggi dibanding musim kemarau (Agustus) — kelembapan lapisan bawah ini yang berkontribusi besar pada CAPE tropis.
Konsep Parcel Ascent dan LCL/LFC/EL
Sebelum menghitung CAPE secara numerik, penting memahami tahapan naiknya sebuah parcel udara. Proses ini berlangsung dalam dua fase berbeda, yang terangkum dalam diagram berikut.
Diagram alir naiknya parcel udara dari permukaan melalui LCL dan LFC hingga EL. CIN bekerja di zona LCL–LFC; CAPE terakumulasi di zona LFC–EL.
Dari permukaan ke LCL, parcel naik secara dry-adiabatic dengan laju \(\Gamma_d \approx 9{,}8 \ \text{K/km}\) — belum ada kondensasi. Di LCL, uap air mulai mengembun dan parcel beralih ke jalur moist-adiabatic (laju pendinginan lebih lambat, \(\approx 6{,}5 \ \text{K/km}\) di lapisan tengah troposfer). LFC adalah level di mana suhu parcel akhirnya melampaui suhu lingkungan — di sinilah konveksi bebas dimulai. EL menandai ketinggian di mana parcel kembali lebih dingin dari lingkungan dan momentum ke atas habis.
CIN terintegrasi dari permukaan ke LFC (zona di mana parcel masih lebih dingin dari lingkungan); CAPE terintegrasi dari LFC ke EL (zona di mana parcel lebih hangat). Dalam koordinat tekanan, keduanya dinyatakan sebagai integral atas \(d(\ln p)\) dikalikan dengan perbedaan virtual temperature.
Menghitung Suhu Virtual Lingkungan dan Parcel
Virtual temperature \(T_v\) memperhitungkan efek uap air terhadap kerapatan udara. Formulanya:
$$T_v = T \left(1 + 0{,}61 \, q\right)$$
di mana \(q\) adalah specific humidity dalam kg/kg. Parcel yang lebih hangat dan lebih lembap dari lingkungan memiliki \(T_{v,\text{parcel}} > T_{v,\text{env}}\) — kondisi buoyancy positif.
Dalam snippet berikut, kita mengambil nilai tanggal 15 Februari 2024 (musim hujan) sebagai kasus representatif. Parcel diinisialisasi di 850 hPa dengan kondisi lingkungan, lalu dinaikkan secara moist-adiabatic ke 500 hPa. Perlu dicatat ada dua simplifikasi penting di sini: (1) kita menggunakan \(q\) lingkungan sebagai \(q\) parcel — artinya kita mengasumsikan parcel sudah jenuh di 850 hPa dan tidak ada entrainment, dan (2) laju moist-adiabatic dianggap konstan 6,5 K/km padahal nilainya bervariasi dengan suhu. Ini adalah pendekatan edukatif; untuk analisis operasional, gunakan MetPy dengan profil radiosonde penuh.
import math
# Konstanta
Rd = 287.0 # J/(kg·K) — gas constant dry air
g = 9.81 # m/s²
gamma_m = 6.5e-3 # K/m — simplified moist-adiabatic lapse rate
# Tanggal kasus: 15 Februari 2024 (musim hujan Jakarta)
date_case = "2024-02-15"
t_day = t_jkt[t_var].sel(valid_time=date_case, method="nearest")
q_day = q_jkt[q_var].sel(valid_time=date_case, method="nearest")
T850_env = float(t_day.sel(pressure_level=850))
T500_env = float(t_day.sel(pressure_level=500))
q850_env = float(q_day.sel(pressure_level=850)) # kg/kg
q500_env = float(q_day.sel(pressure_level=500)) # kg/kg
# Virtual temperature lingkungan
Tv850_env = T850_env * (1 + 0.61 * q850_env)
Tv500_env = T500_env * (1 + 0.61 * q500_env)
# ---- Parcel ascent dari 850 hPa ke 500 hPa ----
# Ketebalan lapisan dari persamaan hipsometrik:
# dz ≈ (Rd * Tv_avg / g) * ln(p_low / p_high)
Tv_avg = 0.5 * (Tv850_env + Tv500_env) # rata-rata lingkungan sebagai proxy
dz = (Rd * Tv_avg / g) * math.log(850.0 / 500.0) # meter
# Parcel diinisialisasi di kondisi lingkungan 850 hPa
T_parcel_850 = T850_env
q_parcel_850 = q850_env # SIMPLIFIKASI: q parcel = q lingkungan di 850 hPa
# Parcel naik moist-adiabatic ke 500 hPa
T_parcel_500 = T_parcel_850 - gamma_m * dz
q_parcel_500 = q500_env # SIMPLIFIKASI: q parcel = q lingkungan di 500 hPa
# Virtual temperature parcel
Tv_parcel_850 = T_parcel_850 * (1 + 0.61 * q_parcel_850)
Tv_parcel_500 = T_parcel_500 * (1 + 0.61 * q_parcel_500)
print(f"Kasus: Jakarta, {date_case}")
print(f"Ketebalan lapisan 850–500 hPa: {dz:.1f} m")
print()
print(f"{'Level':<8} {'Tv_env (K)':>12} {'Tv_parcel (K)':>14} {'ΔTv (K)':>10}")
print("-" * 48)
print(f"{'850 hPa':<8} {Tv850_env:>12.3f} {Tv_parcel_850:>14.3f} {Tv_parcel_850 - Tv850_env:>10.3f}")
print(f"{'500 hPa':<8} {Tv500_env:>12.3f} {Tv_parcel_500:>14.3f} {Tv_parcel_500 - Tv500_env:>10.3f}")
print()
print("Catatan: q parcel = q lingkungan (simplifikasi edukatif)")
Kasus: Jakarta, 2024-02-15
Ketebalan lapisan 850–500 hPa: 4379.2 m
Level Tv_env (K) Tv_parcel (K) ΔTv (K)
------------------------------------------------
850 hPa 294.620 294.620 0.000
500 hPa 269.560 264.587 -4.973
Catatan: q parcel = q lingkungan (simplifikasi edukatif)
Kolom \(\Delta T_v\) adalah kunci interpretasi: nilai positif berarti parcel lebih hangat dari lingkungan (buoyancy positif, berkontribusi ke CAPE), nilai negatif berarti parcel lebih dingin (buoyancy negatif, berkontribusi ke CIN). Pada kasus Februari 2024 ini, \(\Delta T_v\) di 500 hPa bernilai negatif (parcel lebih dingin dari lingkungan), yang artinya buoyancy negatif dominan di lapisan ini. Hasil ini adalah konsekuensi langsung dari simplifikasi yang kita gunakan — terutama asumsi \(q\) parcel sama dengan \(q\) lingkungan di 500 hPa, yang menghilangkan kontribusi panas laten dari kondensasi parcel yang jenuh. Profil radiosonde penuh dengan MetPy akan memberi hasil yang lebih realistis.
Integrasi Layer-CAPE dan Implikasi untuk Indonesia
Dengan perbedaan \(T_v\) di kedua level, kita bisa mengintegrasikan layer-CAPE menggunakan aturan trapesium atas koordinat \(\ln p\):
$$\text{CAPE}_{\text{layer}} = -R_d \int_{p_{850}}^{p_{500}} \left(T_{v,\text{parcel}} - T_{v,\text{env}}\right) d(\ln p)$$
Tanda negatif muncul karena integrasi dilakukan dari tekanan rendah ke tinggi dalam konvensi koordinat tekanan; hasilnya positif jika parcel secara rata-rata lebih hangat dari lingkungan di lapisan itu.
import math
# Perbedaan virtual temperature di tiap level
dTv_850 = Tv_parcel_850 - Tv850_env
dTv_500 = Tv_parcel_500 - Tv500_env
# Integrasi trapesium atas d(ln p)
# ∫[p850→p500] f d(ln p) ≈ 0.5*(f850 + f500) * (ln(p500) - ln(p850))
# = 0.5*(f850 + f500) * ln(500/850)
delta_ln_p = math.log(500.0 / 850.0) # negatif karena 500 < 850
trap_avg = 0.5 * (dTv_850 + dTv_500)
# CAPE = -Rd * trap_avg * delta_ln_p
layer_cape = -Rd * trap_avg * delta_ln_p
print(f"ΔTv di 850 hPa: {dTv_850:.3f} K")
print(f"ΔTv di 500 hPa: {dTv_500:.3f} K")
print(f"Δ(ln p) [500→850 hPa]: {delta_ln_p:.4f}")
print(f"\nLayer-CAPE (850–500 hPa): {layer_cape:.1f} J/kg")
print()
# Klasifikasi per threshold NWS ILX
if layer_cape < 0:
kategori = "Stabilitas / proxy CIN (buoyancy negatif dominan)"
elif layer_cape < 1000:
kategori = "Instabilitas lemah (< 1.000 J/kg)"
elif layer_cape < 2500:
kategori = "Instabilitas moderat (1.000–2.500 J/kg)"
elif layer_cape < 4000:
kategori = "Instabilitas kuat (2.500–4.000 J/kg)"
else:
kategori = "Instabilitas ekstrem (> 4.000 J/kg)"
print(f"Kategori NWS: {kategori}")
print()
print("=== CATATAN PENTING ===")
print("Hasil ini adalah PROXY kasar — hanya 2 level tekanan (850 & 500 hPa).")
print("Analisis operasional memerlukan profil radiosonde lengkap + MetPy.")
print("Di Indonesia, CAPE tinggi tidak selalu berarti thunderstorm aktif.")
print("K-Index dan precipitable water lebih diskriminatif (Sagita et al. 2025).")
ΔTv di 850 hPa: 0.000 K
ΔTv di 500 hPa: -4.973 K
Δ(ln p) [500→850 hPa]: -0.5306
Layer-CAPE (850–500 hPa): -378.7 J/kg
Kategori NWS: Stabilitas / proxy CIN (buoyancy negatif dominan)
=== CATATAN PENTING ===
Hasil ini adalah PROXY kasar — hanya 2 level tekanan (850 & 500 hPa).
Analisis operasional memerlukan profil radiosonde lengkap + MetPy.
Di Indonesia, CAPE tinggi tidak selalu berarti thunderstorm aktif.
K-Index dan precipitable water lebih diskriminatif (Sagita et al. 2025).
Nilai layer-CAPE yang dihasilkan adalah proxy edukatif, bukan CAPE operasional. Dengan hanya dua level tekanan, kita melewatkan semua variasi profil di antaranya — termasuk lapisan inversi, lapisan kering di tengah troposfer, atau lapisan jenuh tipis yang sangat penting untuk inisiasi konveksi.
Sebagai referensi, berikut klasifikasi CAPE operasional yang digunakan NWS:
Klasifikasi NWS untuk CAPE — perhatikan bahwa di Indonesia, threshold ini perlu dikalibrasi karena background CAPE tropis yang persisten tinggi.
Konteks Indonesia penting untuk dipahami. ECMWF (2025) mendokumentasikan bahwa antara 2021 dan 2025, BMKG mencatat hampir 14.000 kejadian hujan lebat, ratusan landspout, dan ribuan angin kencang — dengan korban lebih dari seribu jiwa. Namun, kejadian ekstrem seperti hujan lebih dari 300 mm/hari terkadang terjadi tanpa sinyal instabilitas yang jelas dari indeks konvektif standar. Ini bukan berarti CAPE tidak berguna, melainkan bahwa threshold mid-latitude (seperti "CAPE > 2.500 J/kg = berbahaya") perlu dikalibrasi ulang untuk kondisi tropis maritim Indonesia.
Sagita et al. (2025) mengonfirmasi: SBCAPE (surface-based CAPE) di Indonesia persisten tinggi sehingga kontrasnya antara kondisi thunderstorm dan non-thunderstorm tidak cukup tajam untuk forecasting biner. K-Index dengan threshold optimal \(\approx 0{,}86\) (ternormalisasi) dan precipitable water dengan threshold \(\approx 0{,}67\) terbukti jauh lebih diskriminatif.
Langkah Selanjutnya dan Sumber Lanjutan
Dalam tutorial ini, kita telah menghitung proxy layer-CAPE secara manual menggunakan data ERA5 two-level — dari membuka file NetCDF dengan xarray, menghitung virtual temperature, mengangkat parcel secara moist-adiabatic, hingga mengintegrasikan buoyancy dengan aturan trapesium.
Untuk melangkah ke analisis yang lebih akurat, langkah logis berikutnya adalah:
- Profil radiosonde penuh — gunakan MetPy (
metpy.calc.cape_cin) yang menginterpolasi titik persimpangan profil parcel dan lingkungan secara logaritmik. MetPy mendukung tiga varian:surface_based_cape_cin,mixed_layer_cape_cin, danmost_unstable_cape_cin. - Tambahkan indeks lain — K-Index menggunakan data 850/700/500 hPa (\(K = T_{850} + T_{d,850} - T_{500} - (T_{700} - T_{d,700})\)), Total Totals, dan precipitable water. Di Indonesia, kombinasi K-Index + precipitable water + RH tengah troposfer memberikan diskriminasi thunderstorm yang lebih baik.
- Perluas ke grid spasial — pilih seluruh grid Indonesia dan plot distribusi spasial CAPE untuk satu tanggal tertentu. Cached ERA5 sudah mencakup seluruh bounding box Indonesia untuk 2024.
Eksplorasi artikel meteorologi lainnya di meteo.my.id — termasuk tutorial analisis data ERA5, penjelasan indeks konvektif lainnya, dan konteks ENSO/IOD terhadap pola cuaca Indonesia. Kunjungi https://meteo.my.id untuk arsip lengkap.
Referensi
- Severe Weather Topics — CAPE (NWS Central Illinois) — Penjelasan CAPE dan threshold operasional NWS: lemah (<1.000 J/kg), moderat (1.000–2.500), kuat (2.500–4.000), ekstrem (>4.000 J/kg).
- Environmental Parameters and Indices — NWS Louisville — Formula formal CAPE, CIN, Lifted Index, dan K-Index lengkap dengan tabel threshold dan interpretasi operasional.
- cape_cin — MetPy 1.7 API Documentation — Dokumentasi fungsi
metpy.calc.cape_cinsebagai implementasi referensi untuk komputasi CAPE/CIN dari profil radiosonde lengkap. - Forecasting Convective Weather in Indonesia (ECMWF Science Blog, 2025) — Ruth Mahubessy membahas tantangan forecasting konvektif di Indonesia dan keterbatasan penerapan threshold mid-latitude untuk CAPE/CIN di lingkungan tropis maritim.
- Influences of Indian Ocean Dipole and El Niño–Southern Oscillation on Thunderstorm Events in Indonesia (Sagita et al., 2025) — Studi peer-reviewed yang menemukan SBCAPE adalah prediktor thunderstorm yang lemah di Indonesia; precipitable water dan K-Index lebih efektif sebagai diskriminator operasional.
Tidak ada komentar:
Posting Komentar