easy_vic_build.tools.mete_func.mete_func

Meteorological utility functions for VIC forcing preparation.

Functions

cal_LWDOWN_Brutsaert_eq(Ta_K, VP_kPa)

Calculate downward longwave radiation using Brutsaert equation.

cal_LWDOWN_CD99_eq(Ta_K[, cloud_cover, c_cloud])

Calculate downward longwave radiation using CD99 emissivity equation.

cal_SWDOWN_Angstrom_Prescott_eq(ssd_h, lat, date)

Estimate downward shortwave radiation using Angstrom-Prescott equation.

cal_VP_from_RH_es(RH_100, es_kPa)

Calculate vapor pressure from relative humidity and saturation pressure.

cal_VP_from_prs_sh(prs_kPa, sh_kg_per_kg)

Calculate vapor pressure from air pressure and specific humidity.

cal_clearsky_SWDOWN_Dudhia89_eq(date, lat[, ...])

Calculate clear-sky shortwave radiation at the surface.

cal_cloud_fraction_from_ssd(ssd_h, date, lat)

Estimate cloud fraction from sunshine duration.

cal_cloud_fraction_from_swdown(sw_measure, ...)

Estimate cloud fraction from measured and clear-sky shortwave radiation.

cal_es_Tetens_eq(Ta_C[, es_ref])

Calculate saturation vapor pressure from air temperature.

cal_max_ssd(date, lat)

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 es is 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), where q is specific humidity (kg kg-1) and p is 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.

  • n is observed sunshine duration (hours).

  • N is astronomical maximum sunshine duration (hours).

  • Ra is 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 = 1361 W m-2.

  • theta_z is solar zenith angle at time_UTC.

  • tau is atmospheric transmissivity.

If ESRA=True, this implementation uses tau = 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-8 W m-2 K-4 and e is 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_cover is 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_cover is 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-angle omega to 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).