easy_vic_build.tools.mete_func.mete_func
Meteorological utility functions for VIC forcing preparation.
Functions
|
Calculate downward longwave radiation using Brutsaert equation. |
|
Calculate downward longwave radiation using CD99 emissivity equation. |
|
Estimate downward shortwave radiation using Angstrom-Prescott equation. |
|
Calculate vapor pressure from relative humidity and saturation pressure. |
|
Calculate vapor pressure from air pressure and specific humidity. |
|
Calculate clear-sky shortwave radiation at the surface. |
|
Estimate cloud fraction from sunshine duration. |
|
Estimate cloud fraction from measured and clear-sky shortwave radiation. |
|
Calculate saturation vapor pressure from air temperature. |
|
Calculate astronomical maximum sunshine duration for a given day. |
- easy_vic_build.tools.mete_func.mete_func.cal_es_Tetens_eq(Ta_C, es_ref=0.6112)[source]
Calculate saturation vapor pressure from air temperature.
- Parameters:
Ta_C (float or numpy.ndarray) – Air temperature in degrees Celsius.
es_ref (float, optional) – Reference saturation vapor pressure constant in kPa.
- Returns:
Saturation vapor pressure in kPa.
- Return type:
float or numpy.ndarray
Notes
Piecewise Tetens form is used:
For
Ta_C >= 0:es = es_ref * exp(17.67 * Ta_C / (Ta_C + 243.5))For
Ta_C < 0:es = es_ref * exp(21.875 * Ta_C / (Ta_C + 265.5))
Unit of
esis kPa.
- easy_vic_build.tools.mete_func.mete_func.cal_VP_from_RH_es(RH_100, es_kPa)[source]
Calculate vapor pressure from relative humidity and saturation pressure.
- Parameters:
RH_100 (float or numpy.ndarray) – Relative humidity in percent (0-100).
es_kPa (float or numpy.ndarray) – Saturation vapor pressure in kPa.
- Returns:
Vapor pressure in kPa.
- Return type:
float or numpy.ndarray
Notes
Formula:
e = (RH / 100) * es.
- easy_vic_build.tools.mete_func.mete_func.cal_VP_from_prs_sh(prs_kPa, sh_kg_per_kg)[source]
Calculate vapor pressure from air pressure and specific humidity.
- Parameters:
prs_kPa (float or numpy.ndarray) – Air pressure in kPa.
sh_kg_per_kg (float or numpy.ndarray) – Specific humidity in kg/kg.
- Returns:
Vapor pressure in kPa.
- Return type:
float or numpy.ndarray
Notes
Formula:
e = q * p / (0.622 + q), whereqis specific humidity (kg kg-1) andpis pressure (kPa).
- easy_vic_build.tools.mete_func.mete_func.cal_SWDOWN_Angstrom_Prescott_eq(ssd_h, lat, date, a=0.25, b=0.5, clearsky=False)[source]
Estimate downward shortwave radiation using Angstrom-Prescott equation.
- Parameters:
ssd_h (float) – Observed sunshine duration in hours.
lat (float) – Latitude in degrees.
date (datetime.date or datetime.datetime) – Date used to compute solar geometry.
a (float, optional) – Angstrom coefficient
a.b (float, optional) – Angstrom coefficient
b.clearsky (bool, optional) – If
True, return clear-sky shortwave radiation.
- Returns:
Downward shortwave radiation in W/m2.
- Return type:
float
Notes
Angstrom-Prescott relation:
Rs = (a + b * n / N) * Ra.nis observed sunshine duration (hours).Nis astronomical maximum sunshine duration (hours).Rais extraterrestrial radiation (MJ m-2 day-1, FAO-56 form).
Output is converted from MJ m-2 day-1 to W m-2.
- easy_vic_build.tools.mete_func.mete_func.cal_clearsky_SWDOWN_Dudhia89_eq(date, lat, elevation=0, time_UTC=12, ESRA=False)[source]
Calculate clear-sky shortwave radiation at the surface.
- Parameters:
date (datetime.date or datetime.datetime) – Date of calculation.
lat (float) – Latitude in degrees.
elevation (float, optional) – Elevation in meters.
time_UTC (int or float, optional) – UTC hour of day.
ESRA (bool, optional) – If
True, use ESRA transmissivity; otherwise use Dudhia (1989).
- Returns:
Clear-sky shortwave radiation in W/m2.
- Return type:
float
Notes
Surface clear-sky shortwave radiation is computed as:
SWDOWN_clear = S0 * cos(theta_z) * tau.S0 = 1361W m-2.theta_zis solar zenith angle attime_UTC.tauis atmospheric transmissivity.
If
ESRA=True, this implementation usestau = 0.664 + 0.163 / cos(theta_z)(clipped to [0, 1]), then applies a simple elevation correction. Otherwise, Dudhia (1989) approximation is used:tau = max(0.6, 0.75 - 0.00002 * elevation).
- easy_vic_build.tools.mete_func.mete_func.cal_LWDOWN_Brutsaert_eq(Ta_K, VP_kPa)[source]
Calculate downward longwave radiation using Brutsaert equation.
- Parameters:
Ta_K (float or numpy.ndarray) – Air temperature in Kelvin.
VP_kPa (float or numpy.ndarray) – Vapor pressure in kPa.
- Returns:
Downward longwave radiation in W/m2.
- Return type:
float or numpy.ndarray
Notes
Brutsaert clear-sky form:
eps_a = 1.24 * (e / Ta_K) ** (1/7)LWDOWN = eps_a * sigma * Ta_K ** 4
where
sigma = 5.670374419e-8W m-2 K-4 andeis vapor pressure in kPa.
- easy_vic_build.tools.mete_func.mete_func.cal_LWDOWN_CD99_eq(Ta_K, cloud_cover=None, c_cloud=0.22)[source]
Calculate downward longwave radiation using CD99 emissivity equation.
- Parameters:
Ta_K (float or numpy.ndarray) – Air temperature in Kelvin.
cloud_cover (float, optional) – Cloud fraction in [0, 1]. If provided, cloudy-sky correction is applied.
c_cloud (float, optional) – Cloud correction coefficient.
- Returns:
Downward longwave radiation in W/m2.
- Return type:
float or numpy.ndarray
- Raises:
AssertionError – If
cloud_coveris outside [0, 1].
Notes
CD99 emissivity:
eps_a = 1 - 0.261 * exp(-7.77e-4 * (273.15 - Ta_K)^2).Clear-sky longwave:
LWDOWN_clear = eps_a * sigma * Ta_K^4.Cloud correction (if
cloud_coveris provided):LWDOWN = LWDOWN_clear * (1 + c_cloud * cloud_cover^2).Reference: Crawford and Duchon (1999), Journal of Applied Meteorology, 38(4), 474-480.
- easy_vic_build.tools.mete_func.mete_func.cal_max_ssd(date, lat)[source]
Calculate astronomical maximum sunshine duration for a given day.
- Parameters:
date (datetime.date or datetime.datetime) – Date of calculation.
lat (float) – Latitude in degrees.
- Returns:
Maximum sunshine duration in hours.
- Return type:
float
Notes
Uses declination approximation:
decl = 23.45 * sin(2*pi*(284 + n)/365)(degrees), then sunrise/sunset hour-angleomegato compute:N = 2 * degrees(omega) / 15.
- easy_vic_build.tools.mete_func.mete_func.cal_cloud_fraction_from_ssd(ssd_h, date, lat)[source]
Estimate cloud fraction from sunshine duration.
- Parameters:
ssd_h (float) – Observed sunshine duration in hours.
date (datetime.date or datetime.datetime) – Date of calculation.
lat (float) – Latitude in degrees.
- Returns:
Cloud fraction in [0, 1].
- Return type:
float
Notes
Formula:
cloud_fraction = 1 - min(ssd_h / max_ssd, 1.0), then clipped to [0, 1].
- easy_vic_build.tools.mete_func.mete_func.cal_cloud_fraction_from_swdown(sw_measure, sw_clearsky)[source]
Estimate cloud fraction from measured and clear-sky shortwave radiation.
- Parameters:
sw_measure (float or numpy.ndarray) – Measured downward shortwave radiation.
sw_clearsky (float or numpy.ndarray) – Clear-sky downward shortwave radiation.
- Returns:
Cloud fraction in [0, 1].
- Return type:
float or numpy.ndarray
Notes
Formula:
cloud_fraction = 1 - clip(sw_measure / sw_clearsky, 0, 1).