TANGERANG SELATAN WEATHER

Kamis, 11 Juni 2026

Membaca Geopotensial 500 hPa untuk Sinoptik

Upper-air chart showing 500 hPa geopotential height contours over an atmospheric map

Mengapa 500 hPa adalah Peta Utama Sinoptis

Kalau kita hanya boleh membuka satu peta upper-air untuk membaca situasi cuaca skala sinoptik, peta 500 hPa adalah pilihan yang tidak terbantahkan. NOAA JetStream menyebutnya sebagai "the mainstay of upper air charts" — satu-satunya peta yang paling banyak dipakai forecaster operasional di seluruh dunia.

Mengapa 500 hPa? Permukaan tekanan itu berada di ketinggian sekitar 4.880–6.100 m di atas permukaan laut (16.000–20.000 kaki), hampir tepat di tengah-tengah troposfer secara vertikal. Posisi ini membuatnya bebas dari gangguan orografi permukaan dan turbulensi lapisan batas, sehingga pola skala besar terlihat bersih.

Yang lebih penting, peta 500 hPa menunjukkan steering flow — aliran troposfer tengah yang mengarahkan jalannya sistem tekanan rendah dan tinggi di permukaan. Ridge (area geopotensial tinggi) dan trough (area geopotensial rendah) di level ini secara langsung mengontrol ke mana sistem cuaca permukaan bergerak dan seberapa cepat. Tutorial ini membahas cara membaca dan memvisualisasikan peta tersebut dari data ERA5.

Geopotensial versus Ketinggian Geopotensial

Sebelum masuk ke kode, ada satu konsep dasar yang sering membingungkan: apa bedanya geopotensial (\(\Phi\)) dan geopotential height (\(Z\))?

Geopotensial (\(\Phi\)) adalah energi potensial per satuan massa dari suatu titik di atmosfer relatif terhadap permukaan laut. Satuannya m² s⁻² (setara J/kg). Ini yang ECMWF arsipkan di ERA5 sebagai variabel z.

Geopotential height (\(Z\)) diperoleh dengan membagi geopotensial oleh konstanta gravitasi standar:

$$Z = \frac{\Phi}{g_0}$$

di mana \(g_0 = 9{,}80665\ \mathrm{m\ s^{-2}}\) adalah nilai gravitasi standar WMO yang digunakan IFS ECMWF. Hasilnya dalam satuan geopotential metres (gpm). Pada chart operasional, satuan yang sering dipakai adalah decametres (dam), di mana 1 dam = 10 gpm.

Dokumentasi ECMWF menegaskan: "ECMWF usually archives the geopotential (in m² s⁻²), not the geopotential height." Artinya, setiap kali kita membuka file ERA5 dan melihat variabel z, kita wajib membaginya dengan 9,80665 sebelum membuat peta geopotential height.

Perbedaan antara geopotential height dan geometric height (ketinggian fisik di atas geoid) ada karena gravitasi bumi bervariasi terhadap lintang dan ketinggian. Pada ketinggian 10 km, geopotential height sekitar 0,16% lebih pendek dari geometric height — kecil, tapi penting untuk presisi saintifik.

Satu hal praktis lagi: selisih geopotential height antara permukaan 1000 hPa dan 500 hPa disebut 1000–500 hPa thickness. Nilai ini proporsional dengan suhu virtual rata-rata lapisan tersebut dan dipakai forecaster untuk membedakan batas hujan–salju (nilai ambang 540 dam, relevan untuk mid-latitude).

Membaca Data ERA5 500 hPa untuk Indonesia

Kita mulai dengan mengunduh data ERA5 geopotensial di level 500 dan 850 hPa. Jalankan snippet berikut satu kali; setelah file tersimpan, download tidak perlu diulang.

import os, cdsapi, xarray as xr

OUT = "era5_z_pl500-850_indonesia_2024_d.nc"
if not os.path.exists(OUT):
    c = cdsapi.Client(quiet=True)
    c.retrieve(
        "reanalysis-era5-pressure-levels",
        {
            "product_type": "reanalysis",
            "variable": ["geopotential"],
            "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,
    )

ds = xr.open_dataset(OUT)
print("Variables:", list(ds.data_vars))
print("Dims     :", dict(ds.dims))
print("Coords   :", list(ds.coords))
print(ds)
Variables: ['z']
Dims     : {'valid_time': 366, 'pressure_level': 2, 'latitude': 69, 'longitude': 185}
Coords   : ['number', 'valid_time', 'pressure_level', 'latitude', 'longitude', 'expver']
<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:
    z               (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:08 GRIB to CDM+CF via cfgrib-0.9.1...

Output di atas memperlihatkan struktur dataset: dimensi waktu (365 hari), dua level tekanan (500 dan 850 hPa), serta grid lintang–bujur yang menutupi bounding box Indonesia. Perhatikan nama dimensi pressure level yang muncul — bisa pressure_level, level, atau isobaricInhPa tergantung versi netCDF yang diunduh. Kita butuh nama itu di snippet berikutnya.

Sekarang kita konversi geopotensial ke geopotential height dan lihat statistiknya untuk satu hari.

import numpy as np

# Identifikasi nama dimensi pressure level secara otomatis
press_dim = [d for d in ds.dims if d in ("pressure_level", "level", "isobaricInhPa", "plev")][0]
print(f"Pressure dimension name: {press_dim}")

# Konversi geopotensial → geopotential height (gpm)
z500_all = ds["z"].sel({press_dim: 500}) / 9.80665   # unit: gpm

# Pilih tanggal 15 Juli 2024
z500_day = z500_all.sel(valid_time="2024-07-15", method="nearest")

mean_z = float(z500_day.mean())
min_z  = float(z500_day.min())
max_z  = float(z500_day.max())

print(f"\n500 hPa geopotential height — 2024-07-15")
print(f"  Mean : {round(mean_z, 1)} gpm  ({round(mean_z/10, 1)} dam)")
print(f"  Min  : {round(min_z,  1)} gpm  ({round(min_z /10, 1)} dam)")
print(f"  Max  : {round(max_z,  1)} gpm  ({round(max_z /10, 1)} dam)")
Pressure dimension name: pressure_level

500 hPa geopotential height — 2024-07-15
  Mean : 5877.3 gpm  (587.7 dam)
  Min  : 5862.1 gpm  (586.2 dam)
  Max  : 5894.1 gpm  (589.4 dam)

Nilai yang kita lihat mencerminkan karakteristik troposfer tropis: geopotential height di sekitar equator cenderung lebih tinggi dibanding mid-latitude (sekitar 5.860–5.900 gpm) karena kolom udara tropis lebih hangat dan lebih mengembang secara vertikal. Di mid-latitude musim dingin, nilai yang sama bisa turun ke 5.400–5.600 gpm. Perbedaan inilah yang membentuk gradient dan steering flow.

Memetakan Pola Sinoptik: Trough, Ridge, dan Gradien

Peta geopotential height adalah bahasa sinoptik yang paling mendasar. Kontour-kontour (isoline geopotential height) menggambarkan bentuk permukaan isobarik 500 hPa layaknya garis kontur topografi, dengan ketentuan:

  • Ridge (punggung): area ketinggian tinggi, aliran anticiklonik, udara di bawahnya relatif hangat. Pada peta, kontour melengkung ke arah kutub.
  • Trough (palung): area ketinggian rendah, aliran siklonik, udara di bawahnya relatif dingin. Kontour melengkung ke arah equator.
  • Gradien rapat: kontour yang berdekatan menandai angin geostrofik yang kuat — steering flow kencang dan sistem cuaca permukaan bergerak cepat.
  • Gradien renggang: aliran lemah, sistem cuaca bergerak lambat atau stagnan.

Prinsip geostrofik menyebutkan bahwa angin pada level pressure bertiup kira-kira sejajar dengan kontour geopotential height, dengan kecepatan proporsional terhadap kerapatan kontour. Ini adalah dasar membaca steering flow: cuaca ke mana sistem di permukaan akan bergerak dan seberapa cepat.

Snippet berikut menghasilkan peta kontour geopotential height 500 hPa untuk satu tanggal tertentu menggunakan Cartopy.

import os
import numpy as np
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

# Gunakan dataset dan konversi yang sudah dibuat di snippet-2
press_dim = [d for d in ds.dims if d in ("pressure_level", "level", "isobaricInhPa", "plev")][0]
z500_all = ds["z"].sel({press_dim: 500}) / 9.80665   # gpm

# Pilih 25 Desember 2024
z500_plot = z500_all.sel(valid_time="2024-12-25", method="nearest")

lons = z500_plot.longitude.values
lats = z500_plot.latitude.values
Z    = z500_plot.values

# Konversi ke decametres untuk label yang lebih bersih
Z_dam = Z / 10.0

fig = plt.figure(figsize=(10, 6), dpi=130)
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.set_extent([90, 145, -15, 10], crs=ccrs.PlateCarree())

# Contourf sebagai background shading
levels_dam = np.arange(578, 592, 1)
cf = ax.contourf(lons, lats, Z_dam, levels=levels_dam,
                 cmap="RdYlBu_r", transform=ccrs.PlateCarree(), extend="both")

# Kontour garis tebal untuk pembacaan sinoptik
cs = ax.contour(lons, lats, Z_dam, levels=np.arange(578, 592, 2),
                colors="k", linewidths=0.8, transform=ccrs.PlateCarree())
ax.clabel(cs, fmt="%d", fontsize=8, inline=True)

# Fitur geografis
ax.add_feature(cfeature.COASTLINE, linewidth=0.8, edgecolor="0.3")
ax.add_feature(cfeature.BORDERS, linewidth=0.5, edgecolor="0.5", linestyle="--")
ax.add_feature(cfeature.LAND, facecolor="0.95", zorder=0)
ax.add_feature(cfeature.OCEAN, facecolor="#d0e8f5", zorder=0)

# Gridlines
gl = ax.gridlines(draw_labels=True, linewidth=0.4, color="gray",
                  alpha=0.6, linestyle="--")
gl.top_labels = False
gl.right_labels = False
gl.xlocator = mticker.FixedLocator(range(90, 150, 10))
gl.ylocator = mticker.FixedLocator(range(-15, 15, 5))

plt.colorbar(cf, ax=ax, orientation="vertical", pad=0.02,
             label="Geopotential height (dam)", shrink=0.85)
ax.set_title("500 hPa Geopotential Height — 25 December 2024\nERA5 Reanalysis | Indonesia & vicinity",
             fontsize=11)

plt.tight_layout()
plt.savefig("/work/500hpa_height_20241225.png", dpi=130, bbox_inches="tight")
plt.close()
print("Plot saved.")

snippet-3

Pada peta di atas, area dengan nilai tinggi (warna merah-oranye, >588 dam) menandai ridge — aliran anticiklonik, udara hangat. Area dengan nilai lebih rendah (biru, <582 dam) menandai trough. Kontour yang rapat di sisi selatan Indonesia (sekitar lintang 10°–15°S) mencerminkan gradien yang lebih kuat, yang berhubungan dengan jet stream subtropis yang aktif selama musim Australia (Desember–Februari).

Blocking dan Cut-Off Low di Level 500 hPa

Dua fenomena paling menonjol yang terdeteksi di peta 500 hPa — blocking dan cut-off low — adalah fitur yang berdampak langsung pada cuaca ekstrem.

Atmospheric blocking terjadi ketika aliran zonal normal (barat ke timur) terinterupsi oleh aliran meridional yang kuat dan persisten, mencegah sistem cuaca berkembang normal selama beberapa hari hingga minggu. NOAA CPC mendefinisikannya sebagai: "atmospheric blocking occurs when the normal zonal flow is interrupted by strong and persistent meridional flow." Kekuatan blocking diukur lewat indeks GHGS (Geopotential Height Gradient South), yaitu gradien ketinggian geopotensial yang diukur dari ridge ke arah equator.

Pada peta 500 hPa, blocking tampak sebagai anomali positif geopotential height yang persisten — ridge yang tidak bergerak selama berminggu-minggu. NOAA CPC mempublikasikan chart real-time Northern Hemisphere dengan kontour mean height (interval 8 dam) dan anomali di atas baseline 1991–2020. Lihat kondisi blocking terkini di NOAA CPC Atmospheric Blocking.

Northern Hemisphere 500 hPa geopotential height and anomalies with blocking ridge highlighted Sumber: NOAA Climate Prediction Center (link)

Cut-off low adalah sistem low pressure yang konturnya tertutup penuh (closed contour) dan sudah terlepas sepenuhnya dari aliran westerly utama. Pada peta 500 hPa, cut-off low terlihat sebagai pusat geopotential height rendah yang terisolasi di ekuatorial atau subtropis, tidak terhubung dengan trough utama. Cut-off low termasuk fitur sinoptik yang paling berdampak untuk hujan lebat di mid-latitude dan subtropics.

Untuk kawasan Indonesia dan sekitarnya, ridge yang kuat di belahan bumi selatan dapat memengaruhi steering tropical cyclone di Samudra Hindia bagian selatan dan Samudra Pasifik barat. 500 hPa juga berguna untuk membaca anomali sirkulasi troposfer tengah yang terkait ENSO — selama El Niño, nilai geopotential height 500 hPa cenderung lebih tinggi di atas Pasifik tengah dan lebih rendah di Indonesia bagian timur.

Langkah Selanjutnya: Analisis Operasional dan Ketebalan Lapisan

Tutorial ini menunjukkan alur kerja dasar: download data ERA5 sekali via cdsapi, konversi geopotensial ke geopotential height, dan visualisasikan pola sinoptik (trough, ridge, gradien) lewat peta kontour Cartopy. Dari sini ada beberapa arah yang bisa kita eksplorasi lebih jauh.

1000–500 hPa thickness adalah selisih geopotential height antara dua permukaan tekanan tersebut. Nilainya proporsional dengan suhu virtual rata-rata lapisan — artinya, thickness yang tinggi menandai kolom udara hangat, thickness rendah menandai kolom dingin. Ambang 540 dam historis digunakan forecaster mid-latitude untuk membedakan presipitasi cair versus beku. Untuk Indonesia, thickness analysis berguna membandingkan kondisi saat musim muson barat versus timur.

Langkah berikutnya yang lebih kompleks: menggabungkan analisis 500 hPa dengan chart permukaan (MSLP, angin 10 m) dan data satellite untuk membangun interpretasi sinoptik lengkap. Era5 menyediakan semua variabel ini secara konsisten, sehingga kita bisa merekonstruksi case study untuk event cuaca historis mana pun sejak 1940.

Untuk monitoring real-time, NOAA CPC menyediakan produk blocking dan height anomaly yang diperbarui harian. ECMWF Confluence memuat dokumentasi teknis lengkap tentang cara IFS menghitung geopotensial dan geopotential height pada model levels.

Eksplorasi artikel meteorologi lainnya di meteo.my.id — kunjungi arsip lengkap untuk topik analisis sinoptik dan ERA5 lainnya.

Referensi

Tidak ada komentar:

Posting Komentar