Specifying Aerosol

[1]:
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import sasktran as sk

SASKTRAN supports Mie scattering aerosol particles. The core of this functionality is contained within the MieAerosol optical property. The MieAerosol class assumes a log-normal particle size distribution of stratospheric aerosols for a given species such as “ice”, “H2SO4”, or “water”. To create the MieAerosol optical property we first have to specify the parameters of the log-normal particle size distribution as a function of altitude

[2]:
particle_size_dist = sk.ClimatologyUserDefined(altitudes=[0, 100000],
                                               values={'SKCLIMATOLOGY_LOGNORMAL_MODEWIDTH': [1.6, 1.6],
                                                       'SKCLIMATOLOGY_LOGNORMAL_MODERADIUS_MICRONS': [0.08, 0.08]})

Here we have created a particle size distribution which is constant as a function of altitude, with a mode width of 1.6 and a mode radius of 0.08 microns. We can now create the optical property,

[3]:
aerosol_optprop = sk.MieAerosol(particlesize_climatology=particle_size_dist, species='H2SO4')

And calculate the cross section as a function of wavelength. In our case the aerosol cross section should be the same independent of location/time, so we can include any parameters we want.

[4]:
wavel = np.linspace(300, 1000, 100)

aerosol_xs = aerosol_optprop.calculate_cross_sections(sk.MSIS90(),
                                                      latitude=0,
                                                      longitude=0,
                                                      mjd=54372,
                                                      altitude=10000,
                                                      wavelengths=wavel)

plt.plot(aerosol_xs.wavelengths, aerosol_xs.total)
plt.ylabel('Cross Section [/cm$^2$]')
plt.xlabel('Wavelength [nm]');
_images/user_aerosol_7_0.png

To include aerosol in a radiative transfer calculation we also need to create a climatology. To create a user defined aerosol climatology we can do

[5]:
aerosol_clim = sk.ClimatologyUserDefined(altitudes=[0, 100000],
                                        values={'SKCLIMATOLOGY_AEROSOL_CM3': [1, 1]})

aerosol_species = sk.Species(aerosol_optprop, aerosol_clim)

Which creates a constant values aerosol climatology and the corresponding :py:class:Species <sasktran.Species> object. This object can then be added to SASKTRAN the same way as any other species.

GloSSAC Climatology

For quick additions of a realistic stratospheric aerosol profile the easiest thing to use is the SpeciesAerosolGloSSAC object, which implements the GloSSAC climatology available here https://eosweb.larc.nasa.gov/project/glossac/glossac.