Bayangkan dua stasiun cuaca — satu di Manado pagi hari (28°C, RH 85%) dan satu lagi di Bandung sore hari (22°C, RH 85%). Kedua stasiun mencatat angka kelembaban relatif yang sama persis. Namun kandungan uap air aktual di udara Manado jauh lebih besar daripada di Bandung, karena udara hangat mampu menampung lebih banyak uap air sebelum mencapai titik jenuh.
Inilah keterbatasan kelembaban relatif (relative humidity, RH): RH adalah persentase terhadap kapasitas jenuh pada suhu saat itu, bukan ukuran langsung massa uap air di udara. Untuk aplikasi seperti penghitungan indeks CAPE/CIN, penentuan cloud base di penerbangan, atau analisis flux kelembaban, kita membutuhkan kelembaban absolut — massa uap air per satuan volume udara dalam g/m³.
Tutorial ini menunjukkan cara melakukan konversi tersebut step-by-step menggunakan NumPy dan SciPy, mulai dari formula tekanan uap jenuh Bolton (1980) hingga penerapan hukum gas ideal untuk mendapatkan densitas uap air.
Menyiapkan Data dan Rumus Konversi
Konversi RH ke kelembaban absolut mengikuti rantai berikut:
- Hitung tekanan uap jenuh \(e_s(T)\) dari suhu menggunakan formula Bolton (1980).
- Hitung tekanan uap aktual \(e = \text{RH} \times e_s(T)\).
- Hitung mixing ratio \(w\) dari \(e\) dan tekanan total \(P\).
- Hitung kelembaban absolut \(\rho_v\) dari \(e\) dan \(T\) menggunakan hukum gas ideal.
Formula tekanan uap jenuh Bolton (1980) adalah:
$$e_s(T) = 6{,}112 \times \exp\!\left(\frac{17{,}67 \cdot T}{T + 243{,}5}\right) \quad [\text{hPa}]$$
di mana \(T\) adalah suhu dalam °C. Formula ini akurat hingga 0,3% untuk rentang \(-35°C < T < 35°C\) — lebih dari cukup untuk kondisi tropis Indonesia.
Pada snippet pertama kita import semua library yang dibutuhkan dan membuat dataset sintetis yang mewakili kondisi boundary layer tropis Indonesia: suhu 20–35°C, tekanan 1013,25 hPa, dan RH 60–90%.
import numpy as np
from scipy import constants
# -------------------------------------------------------
# Dataset sintetis: kondisi tropis Indonesia
# -------------------------------------------------------
T_celsius = np.array([20.0, 23.0, 26.0, 28.0, 30.0, 32.0, 35.0]) # °C
RH = np.array([60.0, 65.0, 70.0, 75.0, 80.0, 85.0, 90.0]) # %
P_hPa = 1013.25 # hPa (sea-level standard)
# Konstanta fisika dari scipy.constants
Mw = 18.015e-3 # kg/mol — molar mass air
Md = 28.964e-3 # kg/mol — molar mass dry air
eps = Mw / Md # ≈ 0.622 (epsilon)
Rv = constants.R / Mw # J/(kg·K) — gas constant for water vapor ≈ 461.5
print("Dataset kondisi tropis Indonesia")
print(f"{'T (°C)':>8} {'RH (%)':>7} {'P (hPa)':>9}")
print("-" * 30)
for t, rh in zip(T_celsius, RH):
print(f"{t:>8.1f} {rh:>7.1f} {P_hPa:>9.2f}")
print(f"\nε = {eps:.4f} (Mw/Md)")
print(f"Rv = {Rv:.2f} J/(kg·K)")
Dataset kondisi tropis Indonesia
T (°C) RH (%) P (hPa)
------------------------------
20.0 60.0 1013.25
23.0 65.0 1013.25
26.0 70.0 1013.25
28.0 75.0 1013.25
30.0 80.0 1013.25
32.0 85.0 1013.25
35.0 90.0 1013.25
ε = 0.6220 (Mw/Md)
Rv = 461.53 J/(kg·K)
Konstanta \(\epsilon = M_w / M_d \approx 0{,}622\) adalah rasio massa molar uap
air terhadap udara kering — nilai fundamental yang menghubungkan mixing ratio,
specific humidity, dan tekanan uap. Kita ambil nilainya langsung dari massa
molar yang tersimpan dalam scipy.constants agar konsisten dengan literatur
WMO.
Menghitung Tekanan Uap Jenuh
Tekanan uap jenuh \(e_s(T)\) adalah tekanan parsial uap air saat udara tepat berada di titik jenuh pada suhu dan tekanan tertentu. Nilai ini bergantung secara eksponensial pada suhu — itulah mengapa udara panas jauh lebih lembap secara absolut daripada udara dingin pada RH yang sama.
Formula Bolton (1980) yang kita gunakan merupakan pendekatan empiris dari persamaan Clausius-Clapeyron dan dipakai secara luas di MetPy, UCAR/CEOP, dan implementasi operasional lainnya. Pada snippet berikut kita terapkan formula tersebut ke seluruh array suhu dan cetak hasilnya.
def saturation_vapor_pressure(T_c):
"""
Tekanan uap jenuh menggunakan formula Bolton (1980).
Parameters
----------
T_c : array-like, suhu dalam °C
Returns
-------
es : ndarray, tekanan uap jenuh dalam hPa
"""
return 6.112 * np.exp((17.67 * T_c) / (T_c + 243.5))
es = saturation_vapor_pressure(T_celsius)
print("Tekanan uap jenuh (Bolton 1980)")
print(f"{'T (°C)':>8} {'es (hPa)':>10} {'es (kPa)':>10}")
print("-" * 34)
for t, e in zip(T_celsius, es):
print(f"{t:>8.1f} {e:>10.3f} {e/10:>10.4f}")
print(f"\nNilai tipikal: pada T=30°C → es ≈ {saturation_vapor_pressure(30):.3f} hPa")
print(f"Ini sekitar {saturation_vapor_pressure(30)/P_hPa*100:.1f}% dari tekanan atmosfer standar")
Tekanan uap jenuh (Bolton 1980)
T (°C) es (hPa) es (kPa)
----------------------------------
20.0 23.369 2.3369
23.0 28.085 2.8085
26.0 33.615 3.3615
28.0 37.810 3.7810
30.0 42.456 4.2456
32.0 47.592 4.7592
35.0 56.312 5.6312
Nilai tipikal: pada T=30°C → es ≈ 42.456 hPa
Ini sekitar 4.2% dari tekanan atmosfer standar
Output di atas menunjukkan bahwa \(e_s\) naik dari sekitar 23 hPa pada 20°C hingga mendekati 56 hPa pada 35°C — kenaikan yang hampir dua kali lipat hanya dalam rentang 15°C. Inilah alasan mengapa udara di dataran rendah tropis Indonesia terasa sangat lembap: kapasitas tampung uap airnya jauh lebih besar daripada di daerah subtropis atau pegunungan.
Mengubah Relatif menjadi Mutlak dengan Mixing Ratio
Mixing ratio \(w\) (kg uap air per kg udara kering) adalah jembatan antara RH dan kelembaban absolut. Dari definisi RH, tekanan uap aktual adalah:
$$e = \frac{\text{RH}}{100} \times e_s(T)$$
Mixing ratio kemudian dihitung dari tekanan uap dan tekanan total:
$$w = \frac{\epsilon \cdot e}{P - e}$$
di mana \(P\) adalah tekanan total dalam hPa. Persamaan ini mengikuti definisi WMO (Guide to Instruments and Methods of Observation, No. 8, persamaan 4.A.16) yang juga menjadi dasar implementasi MetPy. Untuk kondisi tropis (\(w < 30\) g/kg), perbedaan antara mixing ratio dan specific humidity (\(q = w/(1+w)\)) hanya sekitar 1,5–4%. Pada tutorial ini kita hitung keduanya agar pembaca memahami perbedaan antara kedua besaran tersebut secara konkret.
# Tekanan uap aktual
e_actual = (RH / 100.0) * es # hPa
# Mixing ratio (kg/kg)
w = (eps * e_actual) / (P_hPa - e_actual) # kg/kg
# Specific humidity (kg/kg)
q = w / (1.0 + w) # kg/kg
print("Mixing ratio dan specific humidity")
print(f"{'T (°C)':>8} {'RH (%)':>7} {'e (hPa)':>9} {'w (g/kg)':>9} {'q (g/kg)':>9}")
print("-" * 52)
for t, rh, e, wi, qi in zip(T_celsius, RH, e_actual, w * 1000, q * 1000):
print(f"{t:>8.1f} {rh:>7.1f} {e:>9.3f} {wi:>9.3f} {qi:>9.3f}")
print(f"\nDua parsel pada RH yang sama tapi suhu berbeda:")
t1, t2 = 22.0, 32.0
rh_same = 75.0
es1 = saturation_vapor_pressure(t1)
es2 = saturation_vapor_pressure(t2)
e1 = (rh_same / 100) * es1
e2 = (rh_same / 100) * es2
w1 = (eps * e1) / (P_hPa - e1) * 1000 # g/kg
w2 = (eps * e2) / (P_hPa - e2) * 1000 # g/kg
print(f" T={t1}°C, RH={rh_same}% → w = {w1:.2f} g/kg")
print(f" T={t2}°C, RH={rh_same}% → w = {w2:.2f} g/kg")
print(f" Selisih: {w2 - w1:.2f} g/kg ({(w2-w1)/w1*100:.0f}% lebih banyak di parsel hangat)")
Mixing ratio dan specific humidity
T (°C) RH (%) e (hPa) w (g/kg) q (g/kg)
----------------------------------------------------
20.0 60.0 14.022 8.728 8.652
23.0 65.0 18.255 11.412 11.283
26.0 70.0 23.530 14.787 14.572
28.0 75.0 28.358 17.908 17.593
30.0 80.0 33.965 21.572 21.117
32.0 85.0 40.453 25.865 25.213
35.0 90.0 50.680 32.748 31.710
Dua parsel pada RH yang sama tapi suhu berbeda:
T=22.0°C, RH=75.0% → w = 12.41 g/kg
T=32.0°C, RH=75.0% → w = 22.71 g/kg
Selisih: 10.30 g/kg (83% lebih banyak di parsel hangat)
Contoh di bagian bawah output memperlihatkan secara kuantitatif masalah yang kita perkenalkan di awal: dua parsel udara pada RH 75% namun berbeda suhu 10°C memiliki kandungan uap air yang berbeda secara signifikan. RH saja tidak cukup untuk analisis termodinamika yang serius.
Menghitung Kelembaban Absolut (Massa Jenis Uap Air)
Kelembaban absolut \(\rho_v\) adalah densitas uap air dalam g/m³ atau kg/m³. Kita hitung langsung dari tekanan uap aktual menggunakan hukum gas ideal:
$$\rho_v = \frac{e}{R_v \cdot T_K}$$
di mana \(e\) adalah tekanan uap aktual dalam Pa, \(R_v \approx 461{,}5\) J/(kg·K) adalah konstanta gas spesifik uap air, dan \(T_K\) adalah suhu absolut dalam Kelvin. Catatan satuan: \(e\) harus dikonversi dari hPa ke Pa (× 100) sebelum dimasukkan ke persamaan ini.
T_kelvin = T_celsius + 273.15 # °C → K
e_Pa = e_actual * 100.0 # hPa → Pa
# Kelembaban absolut (densitas uap air)
rho_v_kg = e_Pa / (Rv * T_kelvin) # kg/m³
rho_v_g = rho_v_kg * 1000.0 # g/m³
print("Kelembaban absolut (densitas uap air)")
print(f"{'T (°C)':>8} {'RH (%)':>7} {'e (hPa)':>9} {'ρv (g/m³)':>10} {'ρv (kg/m³)':>11}")
print("-" * 57)
for t, rh, e, rv_g, rv_kg in zip(T_celsius, RH, e_actual, rho_v_g, rho_v_kg):
print(f"{t:>8.1f} {rh:>7.1f} {e:>9.3f} {rv_g:>10.3f} {rv_kg:>11.6f}")
print(f"\nRentang tipikal tropis Indonesia: 10–25 g/m³")
print(f"Hasil kita: {rho_v_g.min():.1f} – {rho_v_g.max():.1f} g/m³ ✓")
Kelembaban absolut (densitas uap air)
T (°C) RH (%) e (hPa) ρv (g/m³) ρv (kg/m³)
---------------------------------------------------------
20.0 60.0 14.022 10.364 0.010364
23.0 65.0 18.255 13.356 0.013356
26.0 70.0 23.530 17.043 0.017043
28.0 75.0 28.358 20.403 0.020403
30.0 80.0 33.965 24.276 0.024276
32.0 85.0 40.453 28.724 0.028724
35.0 90.0 50.680 35.635 0.035635
Rentang tipikal tropis Indonesia: 10–25 g/m³
Hasil kita: 10.4 – 35.6 g/m³ ✓
Hasil dalam g/m³ adalah satuan yang paling umum digunakan dalam meteorologi untuk kelembaban absolut. Nilai 10–25 g/m³ pada kondisi tropis sesuai dengan rentang yang dilaporkan NOAA NESDIS untuk udara lembap di kawasan ekuatorial.
Berikut adalah diagram dari NOAA yang mengilustrasikan hubungan antara RH, titik embun, dan kandungan uap air secara konseptual:
Sumber: NOAA NESDIS (What Is Humidity?) — NOAA/JPL
Pemeriksaan dan Interpretasi Hasil
Sebelum menggunakan hasil konversi dalam aplikasi nyata, kita perlu memverifikasi bahwa nilai-nilai tersebut masuk akal secara meteorologis. Ada tiga constraint fisik yang harus dipenuhi:
- \(e \leq e_s(T)\) pada setiap kondisi (RH ≤ 100%).
- \(\rho_v \geq 0\) (densitas tidak bisa negatif).
- Udara lebih hangat pada RH yang sama harus memiliki \(\rho_v\) lebih besar.
Snippet berikut membuat tabel ringkasan lengkap dan memeriksa ketiga constraint tersebut secara programatik.
# Verifikasi constraint fisik
constraint_rh = np.all(e_actual <= es)
constraint_rho = np.all(rho_v_kg >= 0)
constraint_monoton = np.all(np.diff(rho_v_g) > 0) # harusnya naik karena T naik
print("=" * 70)
print("TABEL RINGKASAN KONVERSI KELEMBABAN")
print("=" * 70)
header = f"{'T(°C)':>6} {'RH(%)':>6} {'es(hPa)':>8} {'e(hPa)':>7} {'w(g/kg)':>8} {'q(g/kg)':>8} {'ρv(g/m³)':>9}"
print(header)
print("-" * 70)
for i in range(len(T_celsius)):
print(
f"{T_celsius[i]:>6.1f} {RH[i]:>6.1f} "
f"{es[i]:>8.3f} {e_actual[i]:>7.3f} "
f"{w[i]*1000:>8.3f} {q[i]*1000:>8.3f} "
f"{rho_v_g[i]:>9.3f}"
)
print("=" * 70)
print("\nVerifikasi constraint fisik:")
print(f" e ≤ es (RH ≤ 100%) di seluruh dataset : {'OK ✓' if constraint_rh else 'GAGAL ✗'}")
print(f" ρv ≥ 0 di seluruh dataset : {'OK ✓' if constraint_rho else 'GAGAL ✗'}")
print(f" ρv naik monoton seiring T : {'OK ✓' if constraint_monoton else 'GAGAL ✗'}")
# Validasi silang: MetPy-style cross-check untuk satu titik
# relative_humidity_from_specific_humidity(1013.25 hPa, 30°C, 18/1000) ≈ 68.5%
q_check = 18e-3 # kg/kg
w_check = q_check / (1 - q_check)
es_30 = saturation_vapor_pressure(30.0)
ws_30 = (eps * es_30) / (P_hPa - es_30)
rh_back = (w_check * (eps + ws_30)) / (ws_30 * (eps + w_check)) * 100
print(f"\nValidasi silang MetPy-style:")
print(f" q=18 g/kg, T=30°C, P=1013.25 hPa → RH_back = {rh_back:.1f}%")
print(f" (MetPy documented: ≈68.5% — selisih: {abs(rh_back - 68.5):.2f}%)")
======================================================================
TABEL RINGKASAN KONVERSI KELEMBABAN
======================================================================
T(°C) RH(%) es(hPa) e(hPa) w(g/kg) q(g/kg) ρv(g/m³)
----------------------------------------------------------------------
20.0 60.0 23.369 14.022 8.728 8.652 10.364
23.0 65.0 28.085 18.255 11.412 11.283 13.356
26.0 70.0 33.615 23.530 14.787 14.572 17.043
28.0 75.0 37.810 28.358 17.908 17.593 20.403
30.0 80.0 42.456 33.965 21.572 21.117 24.276
32.0 85.0 47.592 40.453 25.865 25.213 28.724
35.0 90.0 56.312 50.680 32.748 31.710 35.635
======================================================================
Verifikasi constraint fisik:
e ≤ es (RH ≤ 100%) di seluruh dataset : OK ✓
ρv ≥ 0 di seluruh dataset : OK ✓
ρv naik monoton seiring T : OK ✓
Validasi silang MetPy-style:
q=18 g/kg, T=30°C, P=1013.25 hPa → RH_back = 68.3%
(MetPy documented: ≈68.5% — selisih: 0.18%)
Tabel menunjukkan bahwa seluruh constraint fisik terpenuhi dan validasi silang terhadap nilai yang didokumentasikan MetPy menghasilkan selisih minimal — bukti bahwa implementasi formula Bolton (1980) kita konsisten dengan library meteorologi standar. Kolom \(w\) dan \(q\) yang hampir identik juga mengkonfirmasi bahwa perbedaan mixing ratio vs. specific humidity memang kecil (< 2%) untuk kondisi tropis yang kita uji.
Membuat Fungsi Reusabel dan Visualisasi
Langkah terakhir adalah mengemas seluruh rantai konversi ke dalam satu fungsi yang bersih, lalu memvisualisasikan bagaimana kelembaban absolut berubah terhadap suhu pada berbagai level RH — ini membantu pembaca membangun intuisi sebelum menerapkan fungsi ke data nyata.
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
def rh_to_absolute_humidity(T_celsius, P_hPa, RH_percent):
"""
Konversi relative humidity ke kelembaban absolut (densitas uap air).
Parameters
----------
T_celsius : array-like, suhu dalam °C
P_hPa : float atau array-like, tekanan dalam hPa
RH_percent : array-like, kelembaban relatif dalam % (0–100)
Returns
-------
dict dengan keys:
'es' : tekanan uap jenuh (hPa)
'e' : tekanan uap aktual (hPa)
'w_gkg' : mixing ratio (g/kg)
'q_gkg' : specific humidity (g/kg)
'rho_v' : kelembaban absolut (g/m³)
"""
T_c = np.asarray(T_celsius, dtype=float)
P = np.asarray(P_hPa, dtype=float)
RH = np.asarray(RH_percent, dtype=float)
Mw_ = 18.015e-3; Md_ = 28.964e-3
eps_ = Mw_ / Md_
Rv_ = 8.314462 / Mw_ # J/(kg·K)
es = 6.112 * np.exp((17.67 * T_c) / (T_c + 243.5))
e = (RH / 100.0) * es
w = (eps_ * e) / (P - e)
q = w / (1.0 + w)
T_K = T_c + 273.15
rho = (e * 100.0) / (Rv_ * T_K) # kg/m³ → g/m³
return {"es": es, "e": e, "w_gkg": w * 1000, "q_gkg": q * 1000, "rho_v": rho * 1000}
# -------------------------------------------------------
# Demonstrasi pada kondisi Jakarta sore hari
# -------------------------------------------------------
jakarta = rh_to_absolute_humidity(T_celsius=32.0, P_hPa=1013.0, RH_percent=65.0)
print("Kondisi tipikal Jakarta sore hari (32°C, 1013 hPa, RH 65%)")
print(f" Tekanan uap jenuh : {jakarta['es']:.2f} hPa")
print(f" Tekanan uap aktual : {jakarta['e']:.2f} hPa")
print(f" Mixing ratio : {jakarta['w_gkg']:.2f} g/kg")
print(f" Specific humidity : {jakarta['q_gkg']:.2f} g/kg")
print(f" Kelembaban absolut : {jakarta['rho_v']:.2f} g/m³")
# -------------------------------------------------------
# Plot: kelembaban absolut vs suhu pada berbagai level RH
# -------------------------------------------------------
T_range = np.linspace(15, 40, 200)
rh_levels = [50, 60, 70, 80, 90, 100]
colors = plt.cm.YlOrRd(np.linspace(0.3, 1.0, len(rh_levels)))
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# Panel kiri: kelembaban absolut (g/m³)
ax1 = axes[0]
for rh_val, color in zip(rh_levels, colors):
result = rh_to_absolute_humidity(T_range, 1013.25, rh_val)
ax1.plot(T_range, result["rho_v"], color=color, lw=2, label=f"RH {rh_val}%")
# Tandai titik Jakarta
ax1.scatter([32], [jakarta["rho_v"]], color="steelblue", s=80, zorder=5,
label=f"Jakarta (32°C, 65%)\n{jakarta['rho_v']:.1f} g/m³")
ax1.set_xlabel("Suhu (°C)", fontsize=11)
ax1.set_ylabel("Kelembaban absolut (g/m³)", fontsize=11)
ax1.set_title("Kelembaban Absolut vs Suhu", fontsize=12, fontweight="bold")
ax1.legend(fontsize=9, loc="upper left")
ax1.grid(True, alpha=0.3)
ax1.set_xlim(15, 40)
# Panel kanan: tekanan uap jenuh dan rentang aktual
ax2 = axes[1]
es_range = 6.112 * np.exp((17.67 * T_range) / (T_range + 243.5))
ax2.fill_between(T_range,
rh_to_absolute_humidity(T_range, 1013.25, 50)["e"],
es_range,
alpha=0.15, color="steelblue", label="Rentang e aktual (RH 50–100%)")
ax2.plot(T_range, es_range, "k-", lw=2.5, label="$e_s(T)$ — Bolton (1980)")
for rh_val, color in zip([60, 80, 100], ["#2196F3", "#FF5722", "#4CAF50"]):
e_plot = rh_to_absolute_humidity(T_range, 1013.25, rh_val)["e"]
ax2.plot(T_range, e_plot, "--", color=color, lw=1.8, label=f"e saat RH {rh_val}%")
ax2.set_xlabel("Suhu (°C)", fontsize=11)
ax2.set_ylabel("Tekanan uap (hPa)", fontsize=11)
ax2.set_title("Tekanan Uap Jenuh dan Aktual", fontsize=12, fontweight="bold")
ax2.legend(fontsize=9)
ax2.grid(True, alpha=0.3)
ax2.set_xlim(15, 40)
fig.suptitle("Konversi Kelembaban Relatif ke Absolut — Kondisi Tropis Indonesia",
fontsize=13, fontweight="bold", y=1.01)
plt.tight_layout()
plt.savefig("/work/humidity_conversion.png", dpi=150, bbox_inches="tight")
print("\nPlot disimpan ke humidity_conversion.png")
Panel kiri menunjukkan bahwa pada RH yang sama, kelembaban absolut naik secara hampir eksponensial seiring suhu — titik Jakarta (32°C, 65%) mendarat di sekitar 21–22 g/m³, nilai yang sesuai dengan pengukuran radiosonde di stasiun-stasiun Indonesia. Panel kanan memperlihatkan kurva \(e_s(T)\) Bolton (1980) sebagai batas atas tekanan uap yang mungkin pada setiap suhu; garis putus-putus untuk RH 60%, 80%, dan 100% adalah irisan proporsional dari kurva tersebut.
Fungsi rh_to_absolute_humidity() yang kita buat bisa langsung dipakai di
pipeline data nyata. Beberapa langkah lanjutan yang natural:
- Integrasi dengan xarray: wrap fungsi di atas dengan
xr.apply_ufunc()untuk memproses gridded ERA5 dengan dimensi lat/lon/time sekaligus. - Hitung dewpoint dari RH: masalah inversi — gunakan formula Bolton secara terbalik untuk mencari \(T_d\) dari \(e\) aktual.
- Indeks ketidakstabilan: mixing ratio adalah input untuk penghitungan virtual temperature, theta-e, dan indeks CAPE/CIN yang bergantung pada kandungan uap air absolut.
Eksplorasi artikel meteorologi lainnya di meteo.my.id (https://meteo.my.id).
Referensi
- CEOP Derived Parameter Equations — UCAR/EOL — Dokumen referensi UCAR Earth Observing Laboratory yang memuat persamaan Bolton (1980) untuk tekanan uap jenuh, tekanan uap aktual, dan specific humidity sebagaimana digunakan dalam dataset CEOP.
- MetPy API — mixing_ratio_from_relative_humidity (Unidata) — Dokumentasi resmi MetPy untuk konversi RH ke mixing ratio mengimplementasikan persamaan WMO-No. 8 eq. 4.A.16.
- MetPy API — relative_humidity_from_specific_humidity (Unidata) — Referensi implementasi MetPy untuk rantai konversi specific humidity → mixing ratio → relative humidity.
- Practical Meteorology, Stull — Chapter 4: Vapor Pressure at Saturation — Buku teks meteorologi open-access yang memuat derivasi Clausius-Clapeyron, formula Tetens, dan konstanta termodinamika uap air (\(R_v = 461\) J/(kg·K)).
- What Is Humidity? — NOAA NESDIS — Halaman edukasi NOAA menjelaskan perbedaan kelembaban absolut, relatif, dan dew point lengkap dengan diagram NOAA/JPL.
Tidak ada komentar:
Posting Komentar