The program Doubling Adding Solver (DAS) is a doubling-adding solver that solves the radiative transfer in a plane-parallel model atmosphere. Some of the major features that are currently implemented are:
- Rotational Raman scattering
- Multiple Raman scattering
- Flexible, user-defined wavenumber grid
- Lambertian surface reflection
DAS is written in Fortran90 and is an extended version of the code that was used for the paper:
R. van Deelen, J. Landgraf, and I. Aben --
"Multiple elastic and inelastic light-scattering in the Earth's atmosphere:
A doubling-adding method to include rotational Raman scattering by air",
J. Quant. Spectrosc. Radiat. Transfer 95, 399-433, 2005
DAS aims to calculate the spectrum of light that emerges from a the Earth's atmosphere. In the ultraviolet and visual part of the electromagnetic spectrum, scattering by molecules has a large influence on the spectrum of light that emerges from the Earth's atmosphere.
In each scattering event, a small fraction of the light is scattered inelastically due to rotational Raman scattering by N2 and O2 molecules (approximately 4% for incident light at 400 nm). This means that light not only changes direction, but also changes wavelength (wavenumber). These wavelength shifts are in the order of 1 nm (50 cm-1) for incident light at 400 nm.
The effect of inelastic scattering is noticed in reflectance spectra that are measured by space-borne spectrometers that have a sufficiently fine instrument spectral resolution (0.5 nm or less). This is because rotational Raman scattering effectively fills in the Fraunhofer lines (and to a lesser extent absorption lines) in a spectrum of the Earth's skylight. When this Earth spectrum is divided by the extraterrestrial solar spectrum to get the reflectivity spectrum, filling-in features appear at the Fraunhofer lines. This is also known as the Ring effect.
DAS is a radiative transfer solver that includes the effect of multiple scattering, both elastic AND inelastic. To keep the computation time within reasonable limits (within a week or so), the following approach is taken:
-
The response of the Earth's atmosphere is calculated first -- not applying the input solar spectrum yet.
-
For each incident wavenumber, it is calculated in where the scattered light ends up (after (multiple) scattering that is).
Two wavenumber grids are used:
- a coarse wavenumber grid for the incident light
- a fine wavenumber grid for the scattered light
(e.g. dnu = 20 cm-1)
Thus, the scattered light is only calculated for a few incident wavenumbers.
This is done because the scattering properties of the N2 and O2 molecules in the Earth's atmosphere change only gradually with wavenumber in the ultraviolet/visual/near-infrared. This approximation works best in spectral ranges where absorption features (of e.g. ozone) are weak, e.g. in the spectral range 350 - 410 nm.
-
Next, interpolation is used to get the result provided on the coarse incident wavenumber grid on a fine incident wavenumber grid.
-
Then, the atmospheric spectral response is applied to the input solar spectrum to get the Earth spectrum.
-
Optional: The instrument spectral response (e.g of a space-borne spectrometer) can be applied to the atmospheric signal.
A short summary of the code layout:
build_linux/ build linux version
data/ contains height grids, atmospheric profiles,
and solar spectra
src/ source code main
src_das/ source code DAS
src_ss/ source code single scattering
output/ some output spectra
plots/ some Python scripts to plot output spectra
The data types for float (sp; single precision) and
double (dp; double precision) are defined with the function
select_real_kind(p) where p sets the precision.
This is done because precision of float and double is different on
different machines. In each subroutine the variables are defined
with real(kind=sp):: for floats
and real(kind=dp):: for doubles.
The source code has been tested with the following Fortran compilers
On Ubuntu Linux:
- gfortran, the GNU Fortran compiler, http://gcc.gnu.org/fortran/
- g95, http://www.g95.org/
- ifort, the Intel Fortran compiler https://software.intel.com/en-us/fortran-compilers
Check out these websites for information on these compilers and how to install them.
Note: The Intel Fortran compiler proved to give the fastest execution times.
On your Linux system, open a terminal, and type in the following commands
$ ulimit -s unlimited
$ cd build_linux
$ make clean
$ make
$ ./run
Note: The command ulimit -s unlimited is required
when the Intel Fortran compiler is used.
This prevents a segmentation fault.
