09b - Atmospheric Models and Earth-Atmosphere Transport¶
LESS represents the external radiation environment as a combination of top-of-atmosphere incident sources and an atmospheric model. The incident source only describes the solar direction and TOA spectrum; the atmospheric model is responsible for direct surface radiation, sky scattering, and model-supported upstream propagation. This chapter first explains how to select a model, and then introduces common parameters and outputs.
Model selection¶
| Requirements | Recommended models | Description |
|---|---|---|
| Simultaneous calculation of surface incident irradiance and atmospheric propagation in sensor direction | less.Atmosphere |
Built-in layered atmosphere, supporting optical, SIF, thermal infrared and path transmission |
| Using 6S parameter system | less.SixSAtmosphere |
Requires optional dependency less3d[atmosphere] |
| Known direct and scattered transmission coefficients from TOA to the ground surface | less.PrescribedAtmosphere |
Strictly distinguish between beam transmittance and horizontal scattering transmission coefficient |
| Vacuum or regardless of the atmosphere | less.NoAtmosphere |
No attenuation of direct radiation, zero diffusion |
| Quickly generate wide spectrum direct light and isotropic sky light | less.SimpleSpectralAtmosphere |
Simplified spectral attenuation and scattering model |
| Sky brightness distribution in the visible direction | less.HosekWilkieAtmosphere |
Independent Hosek–Wilkie model |
less.Atmosphere is a complete atmospheric boundary and propagation model. Other lighting classes are mainly used to set the light received by the three-dimensional scene, which is not equivalent to the complete surface to sensor atmosphere propagation.
Built-in layered atmosphere¶
import less
scene = less.Scene()
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.Atmosphere.standard(
"midlatitude_summer",
aerosol="continental",
aot550=0.10,
ground_altitude_km=0.0,
streams=8,
sky_mode="anisotropic",
),
)
Standard atmospheric profiles include:
| Name | Typical conditions |
|---|---|
"tropical" |
Tropical |
"midlatitude_summer" |
Mid-latitude summer |
"midlatitude_winter" |
Mid-latitude winter |
"subarctic_summer" |
Subarctic Summer |
"subarctic_winter" |
Subarctic winter |
"us_standard" / "us76" |
1976 American Standard Atmosphere |
Aerosol types include "continental", "maritime", "urban", "desert", "biomass_burning", and "stratospheric". aot550 is the 550 nm aerosol optical thickness; the larger the value, the stronger the direct light attenuation.
ground_altitude_km is the altitude of the scene ground. sky_mode="isotropic" uses an isotropic sky; "anisotropic" preserves the variation of sky radiance with zenith angle and relative orientation to the sun.
Custom atmospheric profile¶
You can first obtain the standard profile, and then check the air pressure, temperature and gas column content:
profile = less.AtmosphericProfile.standard("us76")
print(profile.surface_pressure(0.0))
print(profile.column("h2o", ground_altitude_km=0.5))
atmosphere = less.Atmosphere(
profile=profile,
aerosol="maritime",
aot550=0.05,
)
When customizing AtmosphericProfile, the altitude unit is km, the air pressure unit is hPa, and the temperature unit is K; the number density of each gas uses cm^-3.
Solve alone and view the results¶
import numpy as np
import less
atmosphere = less.Atmosphere.standard("us76", aot550=0.10)
wavelengths = np.arange(400.0, 1001.0, 5.0)
result = atmosphere.solve(
wavelengths,
sun_zenith=40,
output_altitudes_km=[2.0, 8.0, 20.0],
)
direct = result.direct_normal_irradiance
diffuse = result.diffuse_horizontal_irradiance
transmittance = result.upward_transmittance(
view_zenith=10,
observer_altitude_km=8.0,
)
Commonly used quantities in less.AtmosphereResult are:
| Field or method | Meaning |
|---|---|
direct_normal_irradiance |
Surface normal direct solar irradiance |
diffuse_horizontal_irradiance |
Surface horizontal sky scattered irradiance |
direct_transmittance |
Direct solar transmittance |
upward_transmittance(...) |
Directional transmittance from the ground surface to the specified observation height |
path_radiance(...) |
Atmospheric path radiance in the observation direction |
to_observer(...) |
Spread the surface radiance to a specified height |
directional_sky_radiance(...) |
Sky direction radiance distribution |
Use W m^-2 nm^-1 for irradiance and W m^-2 sr^-1 nm^-1 for spectral radiance.
Observation altitude and top of atmosphere¶
Imaging products can be selected from the surface, a specified altitude, or the top of the atmosphere:
projection = less.Orthographic(image_size=512, view_zenith=10, view_azimuth=180)
airborne = scene.simulate(less.OpticalImager(
projection=projection,
bands=less.Sentinel2A(),
spectral_resolution=5,
observation_altitude_km=8.0,
))
toa = scene.simulate(less.OpticalImager(
projection=projection,
bands=less.Sentinel2A(),
spectral_resolution=5,
observation_level="toa",
))
observation_altitude_km uses altitude; the geometric height of the projection class only determines the starting point of the ray in the three-dimensional scene, and the two have different meanings.
Optical, SIF, Thermal IR and LiDAR¶
- Optical imaging uses both downlink direct/scattered light, uplink transmittance and path radiance.
- SIF imaging uses the upstream transmittance of the emission band; the observation layer can be specified via
observation_levelorobservation_altitude_km. - Thermal infrared calculates atmospheric downward long waves, surface thermal emission, upward absorption and atmospheric path emission.
- LiDAR Two-way atmospheric attenuation using launch and return paths.
6S model¶
After installing the optional dependencies, you can use 6S to calculate surface direct and scattered light:
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.SixSAtmosphere(
atmosphere_profile="midlatitude_summer",
aerosol_type="continental",
aot550=0.1,
ground_altitude=0.0,
),
)
Available profiles include tropical, midlatitude_summer, midlatitude_winter, subarctic_summer, subarctic_winter, and us_standard. Commonly used aerosols include no_aerosols, continental, maritime, urban, desert and biomass_burning.
User specified atmospheric transmission¶
scene.illumination = less.Illumination(
source=less.Sun(
zenith=40,
azimuth=160,
wavelengths=[450, 550, 650],
irradiance=[1.85, 1.88, 1.55], # TOA beam normal spectrum, W m^-2 nm^-1
),
atmosphere=less.PrescribedAtmosphere(
wavelengths=[450, 550, 650],
direct_beam_transmittance=[0.60, 0.70, 0.78],
diffuse_horizontal_transmittance=[0.20, 0.14, 0.09],
),
)
direct_beam_transmittance is the solar direct beam transmittance:
diffuse_horizontal_transmittance is the horizontal scattering transmission coefficient:
The latter is not the proportion of scattering in the total surface illumination, nor is it the direct beam transmittance. If the TOA beam normal irradiance is
E_toa, and the solar zenith angle is θ, then the surface direct beam normal irradiance is
E_toa × direct_beam_transmittance, the surface horizontal scattered irradiance is
E_toa × cos(θ) × diffuse_horizontal_transmittance. Both parameters are dimensionless,
Scalars can be used; when using spectral arrays you should also provide reference wavelengths, LESS will interpolate the coefficients
to the actual solution wavelength. The band-by-band sum of the two in the passive shortwave atmosphere shall not exceed 1.
Simplify the atmosphere and surface boundary model¶
# vacuum boundary
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.NoAtmosphere(),
)
# Broad spectrum simplifies the atmosphere
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.SimpleSpectralAtmosphere(turbidity=2.5),
)
# Visible light Hosek–Wilkie direction sky
scene.illumination = less.Illumination(
source=less.Sun(zenith=30, azimuth=150),
atmosphere=less.HosekWilkieAtmosphere(turbidity=2.5),
)
Usage suggestions¶
- Surface reflectance products and satellite imaging preferentially use
less.Atmosphere. - Use
less.SixSAtmospherewhen 6S atmospheric transmission is required. - Use
less.PrescribedAtmospherewhen the direct and diffuse transmission coefficients from TOA to the surface are known. - Use
less.NoAtmospherewhen atmospheric attenuation is not considered. - Quick RGB preview available with
less.HosekWilkieAtmosphere.
Related API¶
less.Illumination、less.Sunless.Atmosphere、less.Atmosphere.standard()、less.Atmosphere.solve()less.AtmosphericProfile、less.AtmosphericProfile.standard()less.AtmosphereResult、to_observer()、upward_transmittance()、path_radiance()less.AtmosphereDatabaseless.SixSAtmosphere、less.PrescribedAtmosphere、less.NoAtmosphereless.SimpleSpectralAtmosphere、less.HosekWilkieAtmosphereless.OpticalImager、less.SIFImager、less.ThermalImager
The next chapter introduces satellite pushbroom imaging and instrument response.