Pengenalan Dew Point Depression
Ketika cuaca buruk mengancam di jalur pelayaran atau seorang pilot harus memutuskan apakah aman untuk mendarat, dua angka kecil di METAR bisa menjadi penentu: suhu udara (\(T\)) dan suhu titik embun (\(T_d\)). Selisih keduanya — dew point depression (DPD) — adalah indikator kelembaban paling langsung dan stabil yang tersedia di observasi permukaan.
NOAA/NWS mendefinisikan dew point depression secara formal sebagai perbedaan dalam derajat antara suhu udara dan suhu titik embun:
$$\text{DPD} = T - T_d$$
Ketika \(\text{DPD} = 0\), udara telah mencapai saturasi penuh — kelembaban relatif 100% — dan kondensasi berupa kabut atau hujan hampir pasti terjadi. Sebaliknya, DPD yang besar (di atas \(10\ \text{°C}\)) menandakan udara kering.
Mengapa DPD lebih disukai dibanding kelembaban relatif (RH) oleh operator maritim dan pilot? Tidak seperti RH yang naik otomatis saat suhu turun meski kadar uap air tidak berubah, DPD tetap konstan selama kandungan uap tidak berubah. Ini membuatnya jauh lebih andal sebagai indikator risiko fog: saat DPD mendekati \(2\text{–}3\ \text{°C}\), operator bisa langsung mengantisipasi kabut tanpa perlu mengkonversi ke RH terlebih dahulu.
Tutorial ini menunjukkan cara menghitung DPD dari data reanalisis ERA5 tahun 2024 untuk seluruh domain Indonesia, lalu menerapkan dua formula operasional: formula visibilitas maritim NOAA dan aturan LCL Espy untuk estimasi tinggi basis awan dalam konteks penerbangan.
Mengunduh Data ERA5 untuk Indonesia
Data yang kita gunakan adalah ERA5 reanalisis dari Copernicus Climate Data Store (CDS): variabel 2-meter temperature (t2m) dan 2-meter dewpoint temperature (d2m) untuk domain Indonesia (\(6°\text{N}\), \(95°\text{E}\)–\(11°\text{S}\), \(141°\text{E}\)), sepanjang tahun 2024 dengan interval 6 jam. File total sekitar 100–130 MB, sehingga cukup diunduh sekali dan disimpan lokal.
Snippet di bawah ini menunjukkan cara mengunduh kedua file via cdsapi — jalankan sekali jika belum ada file lokal, lalu snippet-snippet berikutnya langsung membaca dari disk. Diperlukan akun di cds.climate.copernicus.eu dan file ~/.cdsapirc yang berisi API key.
# Jalankan sekali untuk mengunduh file ERA5 ke working directory.
# Diperlukan: akun CDS dan file ~/.cdsapirc berisi URL + key.
import os, cdsapi
# ── 2-meter temperature ──────────────────────────────────────────────────
OUT_T = "era5_t2m_indonesia_2024_6h.nc"
if not os.path.exists(OUT_T):
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], # N, W, S, E — Indonesia
"format": "netcdf",
},
OUT_T,
)
# ── 2-meter dewpoint temperature ─────────────────────────────────────────
OUT_D = "era5_d2m_indonesia_2024_6h.nc"
if not os.path.exists(OUT_D):
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_D,
)
print("Kedua file ERA5 siap di working directory.")
Setelah kedua file tersimpan (era5_t2m_indonesia_2024_6h.nc dan era5_d2m_indonesia_2024_6h.nc), semua snippet selanjutnya membaca dari disk — tidak perlu koneksi internet lagi.
Menghitung DPD dan Saturasi Udara
ERA5 menyimpan suhu (t2m) dan suhu titik embun (d2m) dalam satuan Kelvin. Karena DPD adalah selisih, satuan K saling menghapus — \(1\ \text{K}\) beda = \(1\ \text{°C}\) beda — sehingga hasilnya langsung dalam derajat Celsius tanpa konversi tambahan. Sifat ini menyederhanakan komputasi secara signifikan.
Snippet berikut membuka kedua file, menghitung DPD sebagai DataArray xarray, lalu mencetak statistik persentil domain dan fraksi grid yang berada di bawah ambang risiko kabut. Kita juga mengestimasi kelembaban relatif rata-rata lewat aproksimasi Magnus untuk memperlihatkan hubungan terbalik antara DPD dan RH.
import xarray as xr
import numpy as np
# Buka kedua file ERA5
ds_t = xr.open_dataset("era5_t2m_indonesia_2024_6h.nc")
ds_d = xr.open_dataset("era5_d2m_indonesia_2024_6h.nc")
# Deteksi nama dimensi waktu (ERA5 kadang 'valid_time', kadang 'time')
time_dim = "valid_time" if "valid_time" in ds_t.dims else "time"
print(f"Dimensi waktu : {time_dim}")
print(f"Jumlah timestep: {ds_t.dims[time_dim]}")
# Ekstrak variabel (Kelvin)
t2m = ds_t["t2m"]
d2m = ds_d["d2m"]
print(f"t2m shape : {t2m.shape}")
print(f"d2m shape : {d2m.shape}")
# DPD = T − Td (K − K = K ≡ °C, tidak perlu konversi)
dpd = t2m - d2m
print(f"DPD shape : {dpd.shape}")
# Statistik persentil domain Indonesia 2024
vals = dpd.values.flatten()
vals = vals[~np.isnan(vals)]
perc = np.percentile(vals, [0, 25, 50, 75, 100])
labels = [" Min (P0)", " P25 ", " Median (P50)", " P75 ", " Max (P100)"]
print("\n=== Statistik DPD Domain Indonesia 2024 ===")
for lbl, val in zip(labels, perc):
print(f"{lbl}: {val:.2f} °C")
# Fraksi timestep-gridcell dengan DPD < 3°C (risiko kabut)
fog_pct = (vals < 3.0).mean() * 100
print(f"\nFraksi grid DPD < 3 °C (risiko kabut) : {fog_pct:.1f}%")
# Estimasi RH rata-rata via aproksimasi Magnus
# RH ≈ 100 × exp(17.625·Td/(243.04+Td)) / exp(17.625·T/(243.04+T)) [T, Td dalam °C]
T_C = t2m - 273.15
Td_C = d2m - 273.15
e_Td = np.exp(17.625 * Td_C / (243.04 + Td_C))
e_T = np.exp(17.625 * T_C / (243.04 + T_C))
rh = 100.0 * (e_Td / e_T)
print(f"RH rata-rata domain 2024 : {float(rh.mean()):.1f}%")
print("(DPD → 0 ⟹ RH → 100%)")
Dimensi waktu : valid_time
Jumlah timestep: 1464
t2m shape : (1464, 69, 185)
d2m shape : (1464, 69, 185)
DPD shape : (1464, 69, 185)
=== Statistik DPD Domain Indonesia 2024 ===
Min (P0): -0.00 °C
P25 : 2.41 °C
Median (P50): 3.35 °C
P75 : 4.26 °C
Max (P100): 27.78 °C
Fraksi grid DPD < 3 °C (risiko kabut) : 40.1%
RH rata-rata domain 2024 : 82.0%
(DPD → 0 ⟹ RH → 100%)
Statistik persentil menggambarkan distribusi kelembaban atmosfer di atas Indonesia sepanjang 2024. Nilai median DPD yang relatif rendah mencerminkan kelembaban tinggi khas iklim tropis maritim — udara di atas kepulauan Indonesia hampir selalu lembab karena penguapan intens dari laut di sekelilingnya. Fraksi grid dengan \(\text{DPD} < 3\ \text{°C}\) menunjukkan proporsi ruang-waktu yang secara klimatologis berada dalam kondisi rawan kabut.
Untuk melihat distribusi spasial DPD secara lebih intuitif, snippet berikut menggambar peta rata-rata DPD sepanjang 2024. Kontur \(3\ \text{°C}\) dan \(6\ \text{°C}\) ditandai khusus karena keduanya adalah ambang batas operasional yang akan kita diskusikan di bagian berikutnya.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
# Rata-rata DPD temporal sepanjang 2024
dpd_mean = dpd.mean(dim=time_dim)
fig, ax = plt.subplots(
figsize=(12, 7),
subplot_kw={"projection": ccrs.PlateCarree()},
)
ax.set_extent([94, 142, -12, 7], crs=ccrs.PlateCarree())
mesh = ax.pcolormesh(
dpd_mean.longitude, dpd_mean.latitude, dpd_mean.values,
cmap="YlOrRd", vmin=0, vmax=14,
shading="auto", transform=ccrs.PlateCarree(),
)
# Kontur ambang batas operasional
cs = ax.contour(
dpd_mean.longitude, dpd_mean.latitude, dpd_mean.values,
levels=[3.0, 6.0, 10.0],
colors=["navy", "black", "dimgray"],
linewidths=[1.8, 1.2, 0.8],
linestyles=["--", "-", ":"],
transform=ccrs.PlateCarree(),
)
ax.clabel(cs, fmt="%g°C", fontsize=9, inline=True)
ax.add_feature(cfeature.COASTLINE.with_scale("50m"), linewidth=0.7, edgecolor="#333")
ax.add_feature(cfeature.BORDERS.with_scale("50m"), linewidth=0.4, edgecolor="#666", linestyle=":")
gl = ax.gridlines(draw_labels=True, linewidth=0.3, color="gray", alpha=0.4)
gl.top_labels = False
gl.right_labels = False
plt.colorbar(mesh, ax=ax, orientation="horizontal", pad=0.07,
shrink=0.75, label="DPD Rata-rata 2024 (°C)")
ax.set_title(
"Dew Point Depression Rata-rata 2024 — Indonesia (ERA5)",
fontsize=13, weight="bold", pad=10,
)
plt.savefig("dpd_map.png", dpi=150, bbox_inches="tight")
print("Peta DPD tersimpan.")
Peta di atas memperlihatkan gradien kelembaban yang konsisten dengan geografi kepulauan Indonesia: area di dekat ekuator dan perairan tertutup cenderung memiliki DPD lebih rendah, sementara wilayah pesisir yang terpapar angin monsun kering menunjukkan DPD lebih tinggi. Area dengan DPD rata-rata di bawah kontur \(3\ \text{°C}\) (garis biru putus-putus) adalah kawasan yang secara klimatologis paling rawan kabut sepanjang tahun.
Fog dan Visibilitas Maritim
Kabut laut (sea fog atau advection fog) terbentuk ketika udara hangat dan lembab bergerak di atas permukaan laut yang lebih dingin, mendingin hingga suhu titik embunnya — artinya DPD mendekati nol di lapisan permukaan. Secara operasional, kabut tebal hampir selalu ditemukan ketika RH melebihi 90%, yang setara dengan DPD di bawah sekitar \(3\ \text{°C}\). Saat \(\text{DPD} > 3\ \text{°C}\), risiko kabut umumnya rendah.
S. A. Hsu dari NOAA mempublikasikan formula empiris yang menghubungkan DPD langsung dengan visibilitas di atas air, berdasarkan observasi platform lepas pantai di Teluk Meksiko:
$$V_{\text{miles}} = 1{,}13 \times \text{DPD}_{\text{°C}} - 1{,}15$$
dengan koefisien determinasi \(R^2 = 0{,}76\). Artinya, sekitar 76% variasi visibilitas maritim dapat dijelaskan oleh DPD saja. Formula ini berlaku untuk visibilitas antara 0 dan sekitar 10 mil laut. Hubungan linear ini divisualisasikan dalam scatter plot dari publikasi NOAA tersebut:
Sumber: S. A. Hsu / NOAA Mariners Weather Log Vol. 59 No. 1, April 2015; NOAA Voluntary Observing Ships Program (vos.noaa.gov)
Hubungan ini memudahkan operator maritim: setiap kenaikan DPD \(1\ \text{°C}\) berarti peningkatan visibilitas sekitar \(1{,}1\) mil laut. Ketika DPD kurang dari sekitar \(1\ \text{°C}\), formula memperkirakan visibilitas mendekati nol — kondisi kabut tebal di mana kapal harus melambat dan membunyikan sinyal kabut.
Faktor tambahan yang penting untuk perairan Indonesia adalah perbedaan antara SST dan suhu titik embun udara: jika SST jatuh di bawah suhu titik embun, advection fog hampir pasti terbentuk di atas permukaan laut tersebut. Ini terutama relevan saat monsun barat laut (November–Maret) ketika massa udara dari Laut Cina Selatan membawa kelembaban tinggi ke perairan Natuna, Selat Karimata, dan Laut Jawa.
Tinggi Basis Awan dan Spread METAR
Lifting Condensation Level (LCL) adalah ketinggian di mana udara yang naik secara adiabatik mendingin hingga titik embunnya dan awan cumulus mulai terbentuk. Aturan empiris Espy memberikan estimasi cepat dari permukaan:
$$\text{LCL}_{\text{ft}} = \text{DPD}_{\text{°C}} \times 400 \qquad \text{atau} \qquad \text{LCL}_{\text{m}} \approx \text{DPD}_{\text{°C}} \times 125$$
Untuk \(\text{DPD} = 5\ \text{°C}\), aturan ini memperkirakan basis awan sekitar \(2{.}000\ \text{ft}\) AGL (\(625\ \text{m}\)) — nilai yang sudah mulai relevan untuk prosedur pendekatan visual. Aturan ini adalah aproksimasi yang valid untuk awan konvektif berbasis permukaan dalam kondisi atmosfer standar; untuk kondisi temperature inversion atau massa udara non-standar, hasilnya bisa menyimpang cukup signifikan.
Dalam METAR, spread antara suhu dan dew point dilaporkan langsung dalam format TT/TdTd (misalnya, 28/26 berarti \(T = 28\ \text{°C}\), \(T_d = 26\ \text{°C}\), \(\text{DPD} = 2\ \text{°C}\)). Spread \(\leq 5°\text{F}\) (sekitar \(2\text{–}3\ \text{°C}\)) adalah sinyal fog atau ceiling rendah yang sudah dipahami semua pilot dan dispatcher. Di bawah spread ini, prosedur IFR menjadi prioritas dan go/no-go decision harus mempertimbangkan alternate lebih jauh.
Sumber: NASA Earth Observatory — Jesse Allen & Robert Simmon, data EO-1 ALI. Another Foggy Day in San Francisco (domain publik, NASA)
Snippet berikut mengambil DPD ERA5 rata-rata untuk beberapa lokasi bandara di Indonesia dan menghitung perkiraan LCL, plus contoh interpretasi spread METAR secara operasional.
import numpy as np
# Lokasi bandara perwakilan Indonesia
airports = [
("WIII — Jakarta Cengkareng", -6.1, 106.7),
("WAMM — Manado Sam Ratulangi", 1.5, 124.9),
("WADD — Denpasar Ngurah Rai", -8.7, 115.2),
("WIMM — Medan Kualanamu", 3.6, 98.9),
("WABB — Ambon Pattimura", -3.7, 128.1),
("WBGG — Pontianak Supadio", 0.1, 109.4),
]
print("=== Estimasi LCL dari DPD ERA5 Rata-rata 2024 ===")
header = f"{'Bandara':<40} {'DPD (°C)':<11} {'LCL (m)':<10} {'LCL (ft)'}"
print(header)
print("─" * 75)
for name, lat, lon in airports:
dpd_loc = float(dpd.sel(latitude=lat, longitude=lon, method="nearest").mean())
lcl_m = dpd_loc * 125
lcl_ft = dpd_loc * 400
print(f"{name:<40} {dpd_loc:<11.2f} {lcl_m:<10.0f} {lcl_ft:.0f}")
# ── Interpretasi spread METAR (contoh fiktif representatif) ────────
print("\n=== Contoh Spread METAR dan Implikasinya ===")
metar_cases = [
("WIII Dini hari musim hujan", 24, 23),
("WADD Siang musim kemarau", 32, 22),
("WIMM Pagi dengan kabut pantai",26, 24),
("WAMM Malam setelah hujan", 27, 25),
("WABB Siang hari normal", 30, 21),
]
hdr2 = f"{'Kondisi':<38} {'T':<6} {'Td':<6} {'DPD(°C)':<10} {'LCL ft':<9} Status"
print(hdr2)
print("─" * 80)
for cond, t, td in metar_cases:
dv = t - td
lcl = dv * 400
if dv <= 3:
status = "⚠ FOG / IFR"
elif dv <= 5:
status = "Ceiling rendah"
else:
status = "OK — VFR"
print(f"{cond:<38} {t:<6} {td:<6} {dv:<10} {lcl:<9.0f} {status}")
=== Estimasi LCL dari DPD ERA5 Rata-rata 2024 ===
Bandara DPD (°C) LCL (m) LCL (ft)
───────────────────────────────────────────────────────────────────────────
WIII — Jakarta Cengkareng 3.91 489 1564
WAMM — Manado Sam Ratulangi 2.65 331 1061
WADD — Denpasar Ngurah Rai 3.10 387 1240
WIMM — Medan Kualanamu 2.55 319 1022
WABB — Ambon Pattimura 3.04 380 1215
WBGG — Pontianak Supadio 2.21 277 885
=== Contoh Spread METAR dan Implikasinya ===
Kondisi T Td DPD(°C) LCL ft Status
────────────────────────────────────────────────────────────────────────────────
WIII Dini hari musim hujan 24 23 1 400 ⚠ FOG / IFR
WADD Siang musim kemarau 32 22 10 4000 OK — VFR
WIMM Pagi dengan kabut pantai 26 24 2 800 ⚠ FOG / IFR
WAMM Malam setelah hujan 27 25 2 800 ⚠ FOG / IFR
WABB Siang hari normal 30 21 9 3600 OK — VFR
Tabel LCL di atas memberikan gambaran klimatologis baseline: bandara dengan DPD rata-rata rendah perlu prosedur IFR yang lebih ketat dan alternate yang lebih bervariasi. Contoh METAR fiktif memperlihatkan dengan jelas bahwa kondisi dini hari dan pasca-hujan — ketika T dan Td berdekatan — adalah periode paling kritis bagi keselamatan penerbangan.
Aplikasi untuk Perairan dan Penerbangan Indonesia
Dua formula yang kita terapkan — \(V_{\text{miles}} = 1{,}13 \times \text{DPD} - 1{,}15\) untuk maritim dan \(\text{LCL}_{\text{ft}} = \text{DPD} \times 400\) untuk aviasi — adalah alat yang sederhana namun berdampak nyata dalam konteks operasional Indonesia.
Di sisi maritim, jalur pelayaran dari Selat Malaka hingga Selat Lombok melewati perairan dengan variabilitas SST dan kelembaban yang signifikan antar musim. Monsun barat laut (November–Maret) membawa massa udara lembab dari Laut Cina Selatan; DPD yang rendah pada periode ini meningkatkan risiko advection fog di Selat Karimata dan perairan Natuna. Sebaliknya, saat monsun tenggara (Mei–September), massa udara lebih kering dari Australia mendorong DPD lebih tinggi dan visibilitas maritim membaik di sebagian besar jalur pelayaran.
Di sisi aviasi, bandara pesisir seperti Hang Nadim Batam, Juanda Surabaya, dan Sam Ratulangi Manado paling rentan terhadap fog berbasis laut. Informasi DPD real-time dari METAR, dikombinasikan dengan peta klimatologis seperti yang kita hasilkan dari ERA5 2024, memungkinkan dispatcher untuk mengidentifikasi periode berisiko tinggi bahkan sebelum jam keberangkatan.
Langkah lanjutan yang menarik untuk dikerjakan: (1) gabungkan DPD dengan data SST ERA5 untuk memetakan area potensi advection fog secara lebih presisi, (2) analisis variabilitas musiman DPD saat fase aktif MJO yang diketahui meningkatkan kelembaban dan curah hujan di Indonesia, dan (3) gunakan ensemble forecast NWP untuk menghasilkan probabilitas fog alih-alih estimasi deterministik dari DPD tunggal.
Eksplorasi artikel meteorologi lainnya di meteo.my.id (https://meteo.my.id) — termasuk tutorial analisis data ERA5 lanjutan, interpretasi indeks MJO, dan visualisasi angin permukaan dengan cartopy.
Referensi
- NOAA National Weather Service Glossary – Dew Point Depression — Definisi kanonik DPD dari NOAA/NWS: "the difference in degrees between the air temperature and the dew point."
- Dew Point vs. Humidity – NWS La Crosse — Penjelasan mengapa dew point lebih stabil dibanding kelembaban relatif sebagai indikator kondensasi dan risiko kabut.
- Relating Overwater Visibility to Dew Point Depression – NOAA Mariners Weather Log Vol. 59 No. 1 (April 2015) — Sumber empiris formula visibilitas maritim \(V = 1{,}13 \times \text{DPD} - 1{,}15\) (\(R^2 = 0{,}76\)), diturunkan dari observasi platform Teluk Meksiko saat Badai Isaac (2012).
- Weather: Fog Talk – AOPA Flight Training Magazine (March/April 2021) — Panduan aviasi untuk pilot tentang spread METAR, aturan LCL Espy (\(\text{LCL}_{\text{ft}} \approx \text{DPD} \times 400\)), dan tipe-tipe kabut yang mempengaruhi keselamatan penerbangan.
- Another Foggy Day in San Francisco – NASA Earth Observatory — Citra satelit EO-1 ALI dan penjelasan mekanisme advection fog di atas permukaan laut dingin, mengilustrasikan kondisi DPD \(\to\) 0 yang memicu marine layer.
Tidak ada komentar:
Posting Komentar