Radiation
Solar geometry and the radiative fluxes it drives at the surface.
solar — Solar geometry
Solar position and radiation geometry: declination, hour/zenith/elevation angles, daylight length, and extraterrestrial and clear-sky shortwave radiation.
day_of_year
day_of_year(year: 'int', month: 'int', day: 'int') -> 'int'
Day-of-year (ordinal day) for a calendar date.
>>> from atmoflux.solar import day_of_year
>>> day_of_year(2024, 1, 1)
1
>>> day_of_year(2023, 12, 31)
365solar_declination
solar_declination(doy: 'int') -> 'float'
Solar declination angle for a given day of year.
>>> from atmoflux.solar import solar_declination
>>> round(solar_declination(172), 2)
23.45
>>> round(solar_declination(355), 2)
-23.45hour_angle
hour_angle(solar_time: 'float') -> 'float'
Solar hour angle from local solar time.
>>> from atmoflux.solar import hour_angle
>>> hour_angle(12.0)
0.0
>>> hour_angle(6.0)
-90.0solar_zenith_angle
solar_zenith_angle(latitude: 'float', declination: 'float', hour_angle: 'float') -> 'float'
Solar zenith angle from latitude, declination, and hour angle.
>>> from atmoflux.solar import solar_zenith_angle
>>> round(solar_zenith_angle(0.0, 0.0, 0.0), 2)
0.0
>>> round(solar_zenith_angle(40.0, 20.0, 0.0), 2)
20.0solar_elevation
solar_elevation(latitude: 'float', declination: 'float', hour_angle: 'float') -> 'float'
Solar elevation (altitude) angle above the horizon.
>>> from atmoflux.solar import solar_elevation
>>> round(solar_elevation(40.0, 20.0, 0.0), 2)
70.0sunset_hour_angle
sunset_hour_angle(latitude: 'float', declination: 'float') -> 'float'
Sunset hour angle for a given latitude and declination.
>>> from atmoflux.solar import sunset_hour_angle
>>> round(sunset_hour_angle(0.0, 0.0), 2)
90.0daylight_hours
daylight_hours(latitude: 'float', declination: 'float') -> 'float'
Length of daylight for a given latitude and declination.
>>> from atmoflux.solar import daylight_hours
>>> round(daylight_hours(0.0, 0.0), 2)
12.0extraterrestrial_radiation
extraterrestrial_radiation(latitude: 'float', doy: 'int') -> 'float'
Daily extraterrestrial (top-of-atmosphere) solar radiation.
>>> from atmoflux.solar import extraterrestrial_radiation
>>> round(extraterrestrial_radiation(0.0, 172), 2)
33.24clear_sky_radiation
clear_sky_radiation(extraterrestrial: 'float', sunshine_hours: 'float', daylight: 'float', a: 'float' = 0.25, b: 'float' = 0.5) -> 'float'
Incoming shortwave radiation from the Angstrom-Prescott relation.
>>> from atmoflux.solar import clear_sky_radiation
>>> round(clear_sky_radiation(36.16, 10.0, 12.0), 3)
24.107radiative — Radiative fluxes
Surface radiative fluxes: blackbody emission, net shortwave and longwave, net all-wave radiation, clear-sky emissivity, and the diffuse fraction.
blackbody_radiation
blackbody_radiation(temp: 'float', emissivity: 'float' = 1.0, unit: 'str' = 'K') -> 'float'
Radiant emittance of a surface from the Stefan-Boltzmann law.
>>> from atmoflux.radiative import blackbody_radiation
>>> round(blackbody_radiation(288.0), 2)
390.11
>>> round(blackbody_radiation(15.0, 0.97, unit="C"), 2)
379.19net_shortwave
net_shortwave(sw_down: 'float', albedo: 'float') -> 'float'
Net shortwave radiation absorbed at a surface.
>>> from atmoflux.radiative import net_shortwave
>>> net_shortwave(800.0, 0.2)
640.0net_longwave
net_longwave(lw_down: 'float', temp_surface: 'float', emissivity: 'float' = 1.0, unit: 'str' = 'K') -> 'float'
Net longwave radiation at a surface (positive into the surface).
>>> from atmoflux.radiative import net_longwave
>>> round(net_longwave(350.0, 288.0), 2)
-40.11net_radiation
net_radiation(sw_down: 'float', lw_down: 'float', albedo: 'float', temp_surface: 'float', emissivity: 'float' = 1.0, unit: 'str' = 'K') -> 'float'
Net all-wave radiation at a surface.
>>> from atmoflux.radiative import net_radiation
>>> round(net_radiation(800.0, 350.0, 0.2, 288.0), 2)
599.89clear_sky_emissivity
clear_sky_emissivity(temp_air: 'float', vapor_pressure: 'float', unit: 'str' = 'C') -> 'float'
Clear-sky atmospheric emissivity using Brutsaert's relation.
>>> from atmoflux.radiative import clear_sky_emissivity
>>> round(clear_sky_emissivity(20, 1.5), 4)
0.8109net_longwave_cloud
net_longwave_cloud(temp_air: 'float', vapor_pressure: 'float', cloud_fraction: 'float', unit: 'str' = 'C') -> 'float'
Net longwave radiation at the surface with a cloud adjustment (FAO-56 style).
>>> from atmoflux.radiative import net_longwave_cloud
>>> round(net_longwave_cloud(20, 1.5, 1.0), 2)
70.58diffuse_fraction
diffuse_fraction(clearness_index: 'float') -> 'float'
Diffuse fraction of global shortwave radiation from the clearness index.
>>> from atmoflux.radiative import diffuse_fraction
>>> round(diffuse_fraction(0.5), 4)
0.6591