Mengapa Omega Penting dalam Meteorologi
Bayangkan kita sedang menganalisis peta cuaca Indonesia dan ingin tahu: di mana udara sedang naik kuat, dan di mana udara justru tenggelam? Pertanyaan ini bukan sekadar akademis — naik-turunnya massa udara secara vertikal adalah mekanisme utama di balik pembentukan awan, hujan konvektif, dan penekanan aktivitas cuaca.
Di sinilah omega (\(\omega\)) berperan. Omega didefinisikan sebagai laju perubahan tekanan terhadap waktu mengikuti gerak parsel udara:
$$\omega = \frac{Dp}{Dt} \quad [\text{Pa/s}]$$
Karena tekanan atmosfer berkurang seiring naiknya ketinggian, parsel yang bergerak naik akan mengalami penurunan tekanan — artinya \(Dp/Dt < 0\), sehingga \(\omega < 0\). Sebaliknya, udara yang tenggelam (subsidence) mengalami peningkatan tekanan: \(\omega > 0\). Konvensi tanda ini sering membingungkan pada awalnya, tapi mudah diingat: omega negatif = gerak ke atas, omega positif = gerak ke bawah.
Untuk Indonesia, omega adalah alat diagnostik yang sangat berguna. Selama musim hujan, zona konvergensi monsun menghasilkan gerakan vertikal ke atas yang kuat di Sumatra bagian barat, Kalimantan, dan sebagian Papua. Sementara itu, daerah yang berada di bawah pengaruh high subtropical mengalami subsidence — omega positif — yang menekan pembentukan awan. Dengan memetakan omega dari data ERA5, kita bisa memvisualisasikan pola-pola ini secara kuantitatif tanpa harus menunggu laporan observasi permukaan.
Tutorial ini akan memandu kita menghitung estimasi omega di 500 hPa menggunakan komponen angin ERA5 di dua level tekanan, lalu memetakannya dengan Cartopy.
Memahami Kontinuitas Tekanan dan Divergensi Angin
Omega tidak selalu tersedia secara langsung sebagai output model — namun kita bisa mengestimasi nilainya dari medan angin horizontal lewat persamaan kontinuitas dalam koordinat tekanan:
$$\frac{\partial u}{\partial x} + \frac{\partial v}{\partial y} + \frac{\partial \omega}{\partial p} = 0$$
Secara fisik: jika lebih banyak udara yang datang (konvergensi) dari sisi horizontal di suatu level, maka udara itu harus pergi ke suatu tempat secara vertikal. Di lapisan bawah troposfer, konvergensi horizontal di level 850 hPa memaksa udara naik; di lapisan atas, divergensi horizontal di 200 hPa "menarik" udara dari bawah.
Dengan mengintegrasikan persamaan kontinuitas dari permukaan (\(\omega_{\text{surface}} \approx 0\)) ke level 500 hPa, kita mendapat estimasi:
$$\omega_{500} \approx -D_{850} \times \Delta p$$
di mana \(D_{850} = \frac{\partial u}{\partial x} + \frac{\partial v}{\partial y}\) adalah divergensi horizontal di 850 hPa (satuan \(\text{s}^{-1}\)), dan \(\Delta p = (850 - 500) \times 100\ \text{Pa} = 35000\ \text{Pa}\).
Hasilnya adalah omega dalam satuan Pa/s. Untuk mengonversi ke kecepatan vertikal \(w\) dalam m/s, digunakan:
$$w \approx -\frac{\omega \cdot T \cdot R_d}{p \cdot g}$$
di mana \(R_d = 287\ \text{J/(kg·K)}\), \(g = 9{,}81\ \text{m/s}^2\), \(T\) adalah suhu udara (K), dan \(p\) adalah tekanan (Pa). Perlu diingat bahwa ini adalah estimasi — omega yang sebenarnya membutuhkan perhitungan penuh dari NWP atau variabel vertical_velocity ERA5 yang di-download langsung dari CDS.
Mempersiapkan Data ERA5 dengan xarray
Untuk tutorial ini kita memerlukan komponen angin zonal (\(u\)) dan meridional (\(v\)) di level tekanan 500 dan 850 hPa, selama tahun 2024. Kita download file ERA5 satu kali pakai cdsapi, kemudian semua snippet berikutnya membaca dari file lokal yang sama.
Pastikan terlebih dahulu kita sudah memiliki akun di cds.climate.copernicus.eu dan file ~/.cdsapirc sudah dikonfigurasi. Setelah itu, jalankan snippet berikut:
import os, cdsapi, xarray as xr, numpy as np
OUT_U = "era5_u_pl500-850_indonesia_2024_d.nc"
OUT_V = "era5_v_pl500-850_indonesia_2024_d.nc"
if not os.path.exists(OUT_U):
c = cdsapi.Client(quiet=True)
c.retrieve("reanalysis-era5-pressure-levels", {
"product_type": "reanalysis",
"variable": ["u_component_of_wind"],
"pressure_level": ["500", "850"],
"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",
"area": [6, 95, -11, 141],
"format": "netcdf",
}, OUT_U)
if not os.path.exists(OUT_V):
c = cdsapi.Client(quiet=True)
c.retrieve("reanalysis-era5-pressure-levels", {
"product_type": "reanalysis",
"variable": ["v_component_of_wind"],
"pressure_level": ["500", "850"],
"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",
"area": [6, 95, -11, 141],
"format": "netcdf",
}, OUT_V)
ds_u = xr.open_dataset(OUT_U)
ds_v = xr.open_dataset(OUT_V)
print(ds_u)
print("Pressure levels:", ds_u.pressure_level.values, "hPa")
print("Time steps:", len(ds_u.valid_time), "(daily 00Z 2024)")
<xarray.Dataset> Size: 37MB
Dimensions: (valid_time: 366, pressure_level: 2, latitude: 69,
longitude: 185)
Coordinates:
* valid_time (valid_time) datetime64[ns] 3kB 2024-01-01 ... 2024-12-31
expver (valid_time) <U4 6kB ...
* pressure_level (pressure_level) float64 16B 850.0 500.0
* latitude (latitude) float64 552B 6.0 5.75 5.5 ... -10.5 -10.75 -11.0
* longitude (longitude) float64 1kB 95.0 95.25 95.5 ... 140.8 141.0
number int64 8B ...
Data variables:
u (valid_time, pressure_level, latitude, longitude) float32 37MB ...
Attributes:
GRIB_centre: ecmf
GRIB_centreDescription: European Centre for Medium-Range Weather Forecasts
GRIB_subCentre: 0
Conventions: CF-1.7
institution: European Centre for Medium-Range Weather Forecasts
history: 2026-05-10T04:12 GRIB to CDM+CF via cfgrib-0.9.1...
Pressure levels: [850. 500.] hPa
Time steps: 366 (daily 00Z 2024)
Output di atas memperlihatkan struktur dataset: dua pressure level (500 dan 850 hPa), koordinat latitude/longitude yang mencakup bounding box Indonesia, dan jumlah time step untuk seluruh tahun 2024 pada resolusi harian 00 UTC. Dari sini kita bisa mulai menghitung divergensi.
Menghitung Divergensi Horizontal dari Angin Level Tekanan
Divergensi horizontal \(D = \frac{\partial u}{\partial x} + \frac{\partial v}{\partial y}\) dihitung dengan mendiferensiasikan komponen angin terhadap jarak dalam meter, bukan terhadap derajat koordinat. Konversinya menggunakan jari-jari bumi \(R = 6371000\ \text{m}\):
- \(dx_{\text{meter}} = R \cos(\phi) \cdot d\lambda\) — di mana \(\phi\) adalah lintang dan \(d\lambda\) dalam radian
- \(dy_{\text{meter}} = R \cdot d\phi\) — dalam radian
Kita hitung divergensi di 850 hPa untuk rata-rata Januari 2024, karena periode ini merepresentasikan puncak musim hujan di sebagian besar wilayah Indonesia barat.
# Pilih u dan v di 850 hPa, rata-rata Januari 2024
u850 = ds_u["u"].sel(pressure_level=850).sel(valid_time=ds_u.valid_time.dt.month == 1).mean("valid_time")
v850 = ds_v["v"].sel(pressure_level=850).sel(valid_time=ds_v.valid_time.dt.month == 1).mean("valid_time")
lat = u850.latitude.values
lon = u850.longitude.values
# Konversi degree ke meter untuk turunan
R = 6371000.0
lat_rad = np.deg2rad(lat)
dx_m = np.cos(lat_rad)[:, None] * R * np.deg2rad(np.gradient(lon)[0]) # meter per grid barat-timur
dy_m = R * np.deg2rad(np.abs(np.gradient(lat)[0])) # meter per grid utara-selatan
du_dx = np.gradient(u850.values, axis=1) / dx_m # s⁻¹
dv_dy = np.gradient(v850.values, axis=0) / dy_m # s⁻¹
div_850 = du_dx + dv_dy # divergensi total [s⁻¹]
print(f"Divergensi 850 hPa (Jan 2024 mean):")
print(f" min = {div_850.min()*1e6:.2f} × 10⁻⁶ s⁻¹")
print(f" max = {div_850.max()*1e6:.2f} × 10⁻⁶ s⁻¹")
print(f" mean = {div_850.mean()*1e6:.4f} × 10⁻⁶ s⁻¹")
print(f"\nKonvergensi kuat (div < -2×10⁻⁶ s⁻¹): {(div_850 < -2e-6).sum()} grid poin")
print(f"Divergensi kuat (div > 2×10⁻⁶ s⁻¹): {(div_850 > 2e-6).sum()} grid poin")
Divergensi 850 hPa (Jan 2024 mean):
min = -89.01 × 10⁻⁶ s⁻¹
max = 78.11 × 10⁻⁶ s⁻¹
mean = 1.2893 × 10⁻⁶ s⁻¹
Konvergensi kuat (div < -2×10⁻⁶ s⁻¹): 4348 grid poin
Divergensi kuat (div > 2×10⁻⁶ s⁻¹): 5776 grid poin
Output di atas menampilkan rentang nilai divergensi di seluruh wilayah Indonesia. Nilai negatif (konvergensi) menandai zona di mana udara dari berbagai arah bertemu dan dipaksa naik. Nilai \(D_{850} < -2 \times 10^{-6}\ \text{s}^{-1}\) biasanya berasosiasi dengan daerah yang aktif secara konvektif — angka grid poin yang ditampilkan memberi gambaran seberapa luas area konvergif tersebut pada rata-rata Januari.
Estimasi Omega dan Visualisasi Medan Vertikal
Dengan nilai divergensi 850 hPa yang sudah kita hitung, kita bisa mengestimasi omega di 500 hPa menggunakan persamaan kontinuitas yang sudah kita bahas di bagian kedua:
$$\omega_{500} \approx -D_{850} \times \Delta p = -D_{850} \times 35000\ \text{Pa}$$
Tanda negatif ini berasal dari integrasi persamaan kontinuitas: konvergensi (\(D < 0\)) menghasilkan \(\omega < 0\) (gerak ke atas), sesuai dengan intuisi fisiknya. Snippet berikut menghitung estimasi omega dan memetakannya di atas wilayah Indonesia dengan colormap divergen — merah untuk subsidence dan biru untuk gerak ke atas.
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import cartopy.crs as ccrs
import cartopy.feature as cfeature
# Estimasi omega di 500 hPa via persamaan kontinuitas
# ω(500) ≈ -D_850 × Δp, di mana Δp = (850-500) × 100 Pa = 35000 Pa
delta_p = (850 - 500) * 100 # Pa
omega_500 = -div_850 * delta_p # Pa/s
fig, ax = plt.subplots(figsize=(12, 7),
subplot_kw={"projection": ccrs.PlateCarree()})
ax.set_extent([95, 141, -11, 6], crs=ccrs.PlateCarree())
ax.add_feature(cfeature.COASTLINE, linewidth=0.8)
ax.add_feature(cfeature.BORDERS, linewidth=0.4, linestyle="--")
ax.add_feature(cfeature.LAND, facecolor="lightgray", alpha=0.3)
# Divergen biru (ω > 0, turun), konvergen merah (ω < 0, naik)
norm = mcolors.TwoSlopeNorm(vmin=-1.5, vcenter=0, vmax=1.5)
cf = ax.contourf(lon, lat, omega_500, levels=30,
cmap="RdBu_r", norm=norm, transform=ccrs.PlateCarree())
plt.colorbar(cf, ax=ax, orientation="horizontal", pad=0.04,
label="Estimasi Omega 500 hPa [Pa/s] (negatif = naik)")
gl = ax.gridlines(draw_labels=True, linestyle="--", alpha=0.5)
gl.top_labels = gl.right_labels = False
ax.set_title("Estimasi Gerakan Vertikal (Omega) 500 hPa\nERA5 Rata-rata Januari 2024 — Indonesia",
fontsize=13, pad=10)
plt.tight_layout()
plt.savefig("omega_500hpa_jan2024.png", dpi=150, bbox_inches="tight")
print("Plot saved: omega_500hpa_jan2024.png")
Peta yang dihasilkan snippet ini memvisualisasikan estimasi medan gerakan vertikal di 500 hPa. Zona berwarna biru tua menandai area dengan omega negatif — udara naik kuat, biasanya berasosiasi dengan konveksi aktif dan curah hujan. Zona merah menandai subsidence. Interpretasi lebih lanjut ada di bagian berikutnya.
Interpretasi Omega Terhadap Dinamika Cuaca Indonesia
Sumber: Raman et al. (2021), Atmospheric Chemistry and Physics, CC BY 4.0 (halaman sumber)
Peta omega yang kita hasilkan mencerminkan dinamika monsun boreal winter di Indonesia. Pada rata-rata Januari 2024, zona konvergensi monsun — yang memasok angin dari arah barat laut melintasi Laut Cina Selatan ke Sumatra dan Kalimantan — terlihat sebagai pita omega negatif di sepanjang jalur monsun tersebut. Nilai omega antara \(-0{,}1\) hingga \(-0{,}5\ \text{Pa/s}\) di 500 hPa biasanya mengindikasikan konveksi aktif di daerah tropis.
Perlu dicatat beberapa hal penting soal estimasi ini. Pertama, ini adalah perkiraan dari persamaan kontinuitas, bukan nilai omega langsung dari ERA5. Jika kita ingin omega yang lebih akurat, kita perlu men-download variabel vertical_velocity secara eksplisit dari CDS — variabel itu merupakan hasil dari keseluruhan assimilation model, bukan hanya diagnostik dari angin horizontal.
Kedua, studi Raman et al. (2021) menggunakan profiler VHF di Kototabang (Sumatra Barat) dan menemukan bahwa ERA5 cenderung meremehkan besaran omega sebesar 10–50% dibandingkan observasi radar, terutama pada lapisan troposfer tengah (400–600 hPa). Artinya, estimasi kita mungkin lebih konservatif dari kondisi sebenarnya di lapangan.
Ketiga, pendekatan satu-level divergensi (hanya menggunakan 850 hPa) menyederhanakan profil vertikal angin yang sebenarnya — turunan omega yang lebih akurat memerlukan integrasi di banyak level tekanan. Namun untuk keperluan analisis sinoptik cepat dan visualisasi pola konveksi skala besar, estimasi ini sudah cukup informatif.
Langkah Selanjutnya dan Aplikasi Praktis
Dalam tutorial ini kita sudah menempuh alur lengkap: mulai dari download data angin ERA5 di dua pressure level lewat cdsapi, menghitung divergensi horizontal dengan koreksi satuan yang tepat, mengestimasi omega menggunakan persamaan kontinuitas tekanan, hingga memetakannya di atas wilayah Indonesia dengan Cartopy.
Beberapa arah lanjutan yang bisa kita eksplorasi:
- Tracking seasonal transition — jalankan analisis yang sama untuk setiap bulan sepanjang 2024, lalu animasikan peta omega untuk melihat bagaimana pola gerakan vertikal bergeser selama transisi monsun barat ke monsun timur.
- Download omega langsung dari CDS — tambahkan variabel
vertical_velocityke request cdsapi dan bandingkan hasilnya dengan estimasi yang kita hitung tadi. Perbedaannya akan menunjukkan kontribusi adveksi vertikal dan istilah lain yang kita abaikan. - Extend ke 300 hPa — divergen outflow konveksi dalam (deep convection) paling kuat di lapisan atas troposfer (~200–300 hPa). Menambahkan level ini akan melengkapi gambaran siklus vertikal penuh dari udara yang naik di troposfer bawah hingga divergen di lapisan atas.
- Q-vector analysis — kombinasikan omega dengan vortisitas untuk menghitung Q-vector, yang merupakan forcing gerakan vertikal dari interaksi geostrofik dalam kerangka quasi-geostrofik.
Eksplorasi artikel meteorologi lainnya di meteo.my.id — dari analisis sounding hingga pemrosesan data satelit BMKG. Kunjungi meteo.my.id untuk artikel-artikel berikutnya.
Referensi
- Raman et al. (2021), Atmospheric Chemistry and Physics — "Comparison of ERA5 and VHF radar vertical velocities over Kototabang, Indonesia" — studi yang memvalidasi omega ERA5 terhadap observasi radar di Sumatra Barat, menemukan underestimasi 10–50%.
- ERA5: Fifth generation of ECMWF atmospheric reanalyses — Copernicus Climate Change Service — dokumentasi resmi dataset ERA5 pressure-level yang digunakan dalam tutorial ini.
- Holton, J.R. & Hakim, G.J. (2013). An Introduction to Dynamic Meteorology, 5th ed. — Academic Press — referensi utama untuk persamaan kontinuitas koordinat tekanan dan derivasi omega dari medan angin.
- ECMWF IFS Documentation — Part III: Dynamics and Numerical Procedures — dokumentasi teknis cara ECMWF menghitung kecepatan vertikal dalam model IFS yang menjadi basis ERA5.
- Stull, R.B. (1988). An Introduction to Boundary Layer Meteorology. Kluwer Academic Publishers — konteks fisik gerakan vertikal dalam troposfer, termasuk konvensi tanda omega dan konversinya ke kecepatan vertikal w.
Tidak ada komentar:
Posting Komentar