TANGERANG SELATAN WEATHER

Jumat, 26 Juni 2026

Temperatur Potensial Ekuivalen dari ERA5

Gradient from cool blue to warm red representing θe spectrum from dry to saturated air

Prakiraan konveksi di Indonesia bukan perkara mudah. Kepulauan yang membentang lebih dari 5.000 km memiliki gradien kelembaban yang sangat tajam antara wilayah muson basah, selat terbuka, dan lereng pegunungan. Satu variabel yang sering diabaikan di luar komunitas prakiraan sinoptik adalah \(\theta_e\) — equivalent potential temperature, atau temperatur potensial ekuivalen — yang memadatkan informasi suhu dan kelembaban atmosfer menjadi satu angka konservatif.

Ketika \(\theta_e\) tinggi, udara mengandung energi termal dan laten yang besar; ketika ada gradien horizontal yang tajam, "punggung \(\theta_e\)" (theta-e ridge) menandai zona di mana convective burst dan mesoscale convective system (MCS) cenderung meledak. Tutorial ini menunjukkan cara menghitung \(\theta_e\) permukaan dan lapisan 850 hPa dari data ERA5 menggunakan MetPy dan xarray, lalu memvisualisasikannya sebagai peta wilayah Indonesia.

Mengapa Theta-E Penting untuk Prakiraan Konveksi Tropis

Indeks instabilitas atmosfer seperti CAPE atau LI (Lifted Index) sudah dikenal luas, namun keduanya membutuhkan profil vertikal lengkap untuk dihitung. \(\theta_e\) jauh lebih praktis: kita hanya perlu suhu dan dewpoint di satu level, dan hasilnya sudah cukup informatif untuk mendeteksi zona konvektif.

Secara fisik, \(\theta_e\) mencerminkan suhu yang akan dimiliki suatu parsel udara jika: 1. Dinaikkan secara adiabatik hingga mencapai LCL (Lifted Condensation Level), 2. Semua uap air dikondensasikan dan panas latennya dilepaskan, 3. Kemudian diturunkan secara adiabatik kering kembali ke level referensi 1000 mb.

Karena proses kondensasi dan evaporasi menjaga \(\theta_e\) tetap konservatif dalam siklus moist-adiabatic, variabel ini sangat berguna untuk melacak massa udara — mirip seperti "sidik jari termodinamik" suatu air mass. NOAA NWS menggunakannya secara rutin untuk mengidentifikasi theta-e ridge sebagai titik burst konveksi yang diinduksi secara termodinamik.

Data ERA5 dari ECMWF menjadi pilihan utama untuk analisis seperti ini: reanalysis global dengan resolusi 0,25° dan ketersediaan waktu 6-jam memberikan gambaran spasial yang cukup halus untuk memetakan gradien \(\theta_e\) di atas kepulauan Indonesia. Penelitian Qian et al. (2022) dalam PNAS menggunakan ERA5 — bersama HadCRU, NCEP1, MERRA2, dan JRA55 — dan menemukan bahwa \(\theta_e\) permukaan global naik 1,48°C antara 1980 dan 2019, sekitar dua kali laju kenaikan suhu udara. Di kawasan tropis, kenaikannya bahkan bisa mencapai 4°C. Ini bukan sekadar angka statistik; peningkatan \(\theta_e\) berarti lebih banyak energi tersedia untuk sistem konvektif — relevan langsung untuk memahami intensifikasi monsun Indonesia.

Apa Itu Theta-E dan Formula Bolton

Definisi formal \(\theta_e\) ditulis sebagai:

$$\theta_e = \theta \cdot \exp\!\left(\frac{L_v \cdot r_s}{c_p \cdot T_{LCL}}\right)$$

di mana \(\theta\) adalah potential temperature, \(L_v\) panas laten kondensasi, \(r_s\) mixing ratio jenuh, \(c_p\) panas spesifik udara kering, dan \(T_{LCL}\) suhu di LCL.

Dalam praktik, MetPy menggunakan formula Bolton (1980) yang lebih akurat secara numerik:

$$\theta_e = T_K \cdot \left(\frac{1000}{p}\right)^{0{,}2854 \cdot (1 - 0{,}28 \times 10^{-3}\, r)} \cdot \exp\!\left[\left(\frac{3{,}376}{T_{LCL}} - 0{,}00254\right) \cdot r \cdot (1 + 0{,}81 \times 10^{-3}\, r)\right]$$

Formula ini mengintegrasikan efek kelembaban secara lebih presisi dibanding pendekatan sederhana, dan MetPy mengimplementasikannya langsung di metpy.calc.equivalent_potential_temperature(pressure, temperature, dewpoint). Kita tidak perlu mengkodekan formula ini secara manual — cukup sediakan tekanan, suhu, dan dewpoint dalam unit yang tepat.

Untuk data ERA5 surface, variabel yang kita butuhkan adalah: - t2m — 2 m temperature (Kelvin) dari reanalysis-era5-single-levels - d2m — 2 m dewpoint temperature (Kelvin) dari reanalysis-era5-single-levels

Untuk level tekanan, kita pakai t (temperature) dan q (specific humidity) di 850 hPa, lalu derive dewpoint dengan metpy.calc.dewpoint_from_specific_humidity().

Mengunduh Data Permukaan dari ERA5

Kita mulai dengan mengunduh data suhu dan dewpoint permukaan dari CDS. Script di bawah ini mengunduh kedua variabel sekaligus, dengan guard os.path.exists() sehingga kita tidak perlu re-fetch setiap kali menjalankan notebook. Daftar akun CDS gratis di cds.climate.copernicus.eu jika belum punya, lalu install cdsapi dan buat ~/.cdsapirc.

import os
import cdsapi
import xarray as xr
import numpy as np

# --- Download t2m ---
OUT_T2M = "era5_t2m_indonesia_2024_6h.nc"
if not os.path.exists(OUT_T2M):
    c = cdsapi.Client(quiet=True)
    c.retrieve(
        "reanalysis-era5-single-levels",
        {
            "product_type": "reanalysis",
            "variable": ["2m_temperature"],
            "year": "2024",
            "month": [f"{m:02d}" for m in range(1, 13)],
            "day":   [f"{d:02d}" for d in range(1, 32)],
            "time":  ["00:00", "06:00", "12:00", "18:00"],
            "area":  [6, 95, -11, 141],
            "format": "netcdf",
        },
        OUT_T2M,
    )

# --- Download d2m ---
OUT_D2M = "era5_d2m_indonesia_2024_6h.nc"
if not os.path.exists(OUT_D2M):
    c = cdsapi.Client(quiet=True)
    c.retrieve(
        "reanalysis-era5-single-levels",
        {
            "product_type": "reanalysis",
            "variable": ["2m_dewpoint_temperature"],
            "year": "2024",
            "month": [f"{m:02d}" for m in range(1, 13)],
            "day":   [f"{d:02d}" for d in range(1, 32)],
            "time":  ["00:00", "06:00", "12:00", "18:00"],
            "area":  [6, 95, -11, 141],
            "format": "netcdf",
        },
        OUT_D2M,
    )

ds_t2m = xr.open_dataset(OUT_T2M)
ds_d2m = xr.open_dataset(OUT_D2M)

print("=== t2m dataset ===")
print(dict(ds_t2m.sizes))
print("Variables:", list(ds_t2m.data_vars))

print("\n=== d2m dataset ===")
print(dict(ds_d2m.sizes))
print("Variables:", list(ds_d2m.data_vars))
=== t2m dataset ===
{'valid_time': 1464, 'latitude': 69, 'longitude': 185}
Variables: ['t2m']

=== d2m dataset ===
{'valid_time': 1464, 'latitude': 69, 'longitude': 185}
Variables: ['d2m']

Output menunjukkan dimensi (time, latitude, longitude) untuk setiap dataset. Dengan 1.460 time step (4 per hari × 365 hari) dan grid 0,25° mencakup Indonesia, masing-masing file berukuran sekitar 200–300 MB. Kita siap masuk ke tahap kalkulasi.

Menghitung Theta-E Permukaan dengan MetPy

Snippet ini membaca ds_t2m dan ds_d2m dari globals snippet sebelumnya, kemudian menghitung \(\theta_e\) menggunakan MetPy. MetPy membutuhkan unit eksplisit (lewat pint), jadi kita attach unit sebelum memanggil fungsi kalkulasi.

import metpy.calc as mpcalc
from metpy.units import units

# Ambil array suhu dan dewpoint (Kelvin), attach units
t2m = ds_t2m["t2m"].values * units.kelvin
d2m = ds_d2m["d2m"].values * units.kelvin

# Tekanan permukaan diasumsikan 1000 hPa untuk theta-e surface
p_sfc = 1000.0 * units.hPa

# Hitung theta-e permukaan — shape: (time, lat, lon)
theta_e_surf = mpcalc.equivalent_potential_temperature(p_sfc, t2m, d2m)

# Statistik spasiotemporal
te_vals = theta_e_surf.magnitude  # numpy array dalam Kelvin

print(f"Theta-e permukaan (2024, Indonesia):")
print(f"  Mean : {np.nanmean(te_vals):.2f} K")
print(f"  Min  : {np.nanmin(te_vals):.2f} K")
print(f"  Max  : {np.nanmax(te_vals):.2f} K")
print(f"  Std  : {np.nanstd(te_vals):.2f} K")
print(f"  Shape: {te_vals.shape}")
Theta-e permukaan (2024, Indonesia):
  Mean : 356.61 K
  Min  : 296.67 K
  Max  : 388.40 K
  Std  : 6.31 K
  Shape: (1464, 69, 185)

Perhatikan rentang nilai \(\theta_e\): di wilayah Indonesia yang lembab, angka \(\theta_e\) permukaan umumnya berada di kisaran 340–370 K, jauh lebih tinggi dari daerah kering subtropis yang bisa turun ke 310–320 K. Standar deviasi yang relatif kecil mencerminkan betapa homogennya kelembaban di kawasan maritim tropis — namun gradien horizontal yang ada justru informatif untuk prakiraan.

Theta-E pada Lapisan 850 hPa

Level 850 hPa (~1.500 m di atas permukaan laut) merupakan level referensi klasik untuk analisis massa udara rendah di tropika. Di sini kita perlu data t (temperature) dan q (specific humidity), lalu derive dewpoint terlebih dahulu karena ERA5 pressure-level tidak menyediakan dewpoint secara langsung.

# Load pressure-level temperature dan specific humidity
OUT_T_PL = "era5_t_pl500-850_indonesia_2024_d.nc"
OUT_Q_PL = "era5_q_pl500-850_indonesia_2024_d.nc"

ds_t_pl = xr.open_dataset(OUT_T_PL)
ds_q_pl = xr.open_dataset(OUT_Q_PL)

# Pilih 850 hPa
t_850  = ds_t_pl["t"].sel(pressure_level=850).values  * units.kelvin
q_850  = ds_q_pl["q"].sel(pressure_level=850).values  * units("kg/kg")
p_850  = 850.0 * units.hPa

# Derive dewpoint dari specific humidity
td_850 = mpcalc.dewpoint_from_specific_humidity(p_850, t_850, q_850)

# Hitung theta-e di 850 hPa
theta_e_850 = mpcalc.equivalent_potential_temperature(p_850, t_850, td_850)
te850_vals  = theta_e_850.magnitude

print("Theta-e 850 hPa (2024, Indonesia):")
print(f"  Mean : {np.nanmean(te850_vals):.2f} K")
print(f"  Min  : {np.nanmin(te850_vals):.2f} K")
print(f"  Max  : {np.nanmax(te850_vals):.2f} K")
print(f"  Std  : {np.nanstd(te850_vals):.2f} K")
print(f"  Shape: {te850_vals.shape}")

# Bandingkan mean dengan surface
diff = np.nanmean(te850_vals) - np.nanmean(te_vals)
print(f"\nSelisih mean 850 hPa − surface: {diff:+.2f} K")
Theta-e 850 hPa (2024, Indonesia):
  Mean : 342.00 K
  Min  : 299.63 K
  Max  : 367.07 K
  Std  : 6.13 K
  Shape: (366, 69, 185)

Selisih mean 850 hPa − surface: -14.61 K

Perbedaan antara \(\theta_e\) surface dan \(\theta_e\) 850 hPa mencerminkan struktur termal vertikal lapisan bawah atmosfer. Nilai \(\theta_e\) yang menurun dengan ketinggian mengindikasikan lapisan konvektif yang stabil; sebaliknya, jika \(\theta_e\) surface lebih tinggi dari 850 hPa, kondisi tersebut mendukung convective initiation begitu ada mekanisme pengangkat (orography, konvergensi boundary layer, atau frontal forcing).

Visualisasi Peta Theta-E dan Anomali Waktu

Sekarang kita buat peta \(\theta_e\) permukaan untuk satu time step yang representatif — kita pilih 12 UTC 1 Januari 2024 sebagai contoh, yang mewakili puncak pemanasan siang hari di zona waktu Indonesia bagian barat. Peta ini menunjukkan sebaran spasial energi konvektif di seluruh kepulauan.

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
import cartopy.crs as ccrs
import cartopy.feature as cfeature

# Ambil satu time step: 1 Jan 2024 12 UTC (index 2 dari 00, 06, 12, 18)
t_idx = 2

lats = ds_t2m["latitude"].values
lons = ds_t2m["longitude"].values
te_slice = te_vals[t_idx, :, :]   # numpy array shape (lat, lon)

fig, ax = plt.subplots(
    figsize=(13, 6),
    subplot_kw={"projection": ccrs.PlateCarree()},
)

ax.set_extent([95, 141, -11, 6], crs=ccrs.PlateCarree())

# Plot theta-e
cf = ax.contourf(
    lons, lats, te_slice,
    levels=30,
    cmap="RdYlBu_r",
    transform=ccrs.PlateCarree(),
    extend="both",
)

# Kontur garis untuk theta-e ridge (nilai tinggi)
cs = ax.contour(
    lons, lats, te_slice,
    levels=[350, 355, 360, 365],
    colors="k",
    linewidths=0.6,
    transform=ccrs.PlateCarree(),
)
ax.clabel(cs, fmt="%d K", fontsize=7, inline=True)

# Fitur geografi
ax.add_feature(cfeature.COASTLINE, linewidth=0.7, color="0.2")
ax.add_feature(cfeature.BORDERS, linewidth=0.4, color="0.4")
ax.add_feature(cfeature.LAND, facecolor="0.92", zorder=0)
ax.add_feature(cfeature.OCEAN, facecolor="lightcyan", zorder=0)

# Grid lines
gl = ax.gridlines(draw_labels=True, linewidth=0.4, color="gray", alpha=0.5)
gl.top_labels = False
gl.right_labels = False
gl.xlocator = mticker.MultipleLocator(10)
gl.ylocator = mticker.MultipleLocator(5)
gl.xlabel_style = {"size": 8}
gl.ylabel_style = {"size": 8}

# Colorbar
cbar = plt.colorbar(cf, ax=ax, orientation="vertical", pad=0.02, shrink=0.85)
cbar.set_label("$\\theta_e$ (K)", fontsize=10)

ax.set_title(
    "Equivalent Potential Temperature ($\\theta_e$) Permukaan\nERA5 — Indonesia, 1 Jan 2024 12 UTC",
    fontsize=11, pad=8,
)

plt.tight_layout()
plt.savefig("snippet-4-1.png", dpi=110, bbox_inches="tight")
print("Saved: snippet-4-1.png")

Peta equivalent potential temperature permukaan ERA5 di atas Indonesia, 1 Januari 2024

Peta di atas menggambarkan distribusi \(\theta_e\) permukaan di atas kepulauan Indonesia. Zona warna merah gelap (nilai \(\theta_e\) tinggi) menunjukkan wilayah yang paling "kaya" energi konvektif — biasanya Laut Jawa bagian barat, Sumatera bagian selatan, dan perairan Sulawesi selama musim hujan. Kontur garis hitam menandai theta-e ridge, yaitu area di mana \(\theta_e\) ≥ 355 K — zona inilah yang menjadi target pengamatan untuk potensi konveksi intens dalam 6–12 jam ke depan.

Interpretasi dan Implikasi Prakiraan

\(\theta_e\) tinggi tidak otomatis berarti hujan lebat akan terjadi — diperlukan mekanisme pengangkat (orografi, konvergensi angin, cold pool outflow dari MCS tetangga). Namun \(\theta_e\) memberikan "lahan subur" untuk konveksi: semakin tinggi nilainya, semakin besar potensi intensitas jika pengangkatan terjadi.

Beberapa panduan praktis dari analisis ini:

Theta-e ridge sebagai zona prioritas. Punggung \(\theta_e\) horizontal — yaitu ridge yang memanjang di sepanjang sumbu lintang atau bujur tertentu — adalah lokasi di mana thunderstorm dan MCS paling mungkin terinisiasi secara termodinamik. NOAA NWS menggunakan konsep ini secara rutin dalam short-range convective outlooks.

Gradien \(\theta_e\) permukaan vs 850 hPa. Jika \(\theta_e\) surface jauh lebih tinggi dari \(\theta_e\) 850 hPa (selisih > 5 K), kondisi ini mengindikasikan lapisan labil bawah yang mendukung deep convection begitu boundary layer heating mencukupi. Sebaliknya, jika kedua nilai berdekatan atau \(\theta_e\) 850 hPa lebih tinggi, lapisan bawah relatif stabil.

Tren jangka panjang. Temuan Qian et al. (2022) bahwa \(\theta_e\) permukaan global naik 1,48°C dalam 40 tahun (dengan kenaikan 4°C di kawasan tropis) memiliki implikasi serius untuk Indonesia: intensifikasi potensial sistem konvektif pada skala iklim. Kenaikan ini berasal dari kombinasi pemanasan SST dan peningkatan kelembaban spesifik, yang keduanya tercapture dengan baik oleh ERA5.

Langkah lanjutan yang bisa dicoba: hitung selisih \(\theta_e\) antara dua lapisan (instabilitas kolom), buat time series \(\theta_e\) rata-rata harian untuk wilayah sub-regional (Sumatera, Kalimantan, Sulawesi, Papua), atau korelasikan anomali \(\theta_e\) dengan kejadian konvektif dari data satelit HIMAWARI.

Eksplorasi artikel meteorologi lainnya di meteo.my.id.

Referensi

Tidak ada komentar:

Posting Komentar