Skip to content

aardkronkel/das

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DOUBLING ADDING SOLVER

Doubling Adding Solver

ABOUT

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

BACKGROUND

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:

  1. The response of the Earth's atmosphere is calculated first -- not applying the input solar spectrum yet.

  2. 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.

  1. Next, interpolation is used to get the result provided on the coarse incident wavenumber grid on a fine incident wavenumber grid.

  2. Then, the atmospheric spectral response is applied to the input solar spectrum to get the Earth spectrum.

  3. Optional: The instrument spectral response (e.g of a space-borne spectrometer) can be applied to the atmospheric signal.

OVERVIEW SOURCE CODE

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.

COMPILATION AND INSTALLATION

The source code has been tested with the following Fortran compilers

On Ubuntu Linux:

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.

COMPILING AND RUNNING

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.

About

Doubling-Adding Solver

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published