Mie scattering routines


This page provides descriptions of and access to a comprehensive set of routines for the calculation of light scattering parameters by particles. Most of the code is written in the IDL language, but there is also a FORTRAN routine available.

News and developments

Tidying and couple of bug fixes when using mie_size_dist without the phase matrix output.

Added support to output the 11, 33, 12, and 34 elements of the 4x4 single scattering phase matrix F, where F21 = F12 and F43 = -F34 and support for a modified gamma distribution of particles as defined in Hansen and Travis 1974.

Converted pages to use the EODG version of the departmental website style.

Another bug in the calculation of backscattering efficiency has been corrected. In addition, the code can now be run for considerably larger size parameters than earlier versions

A bug was discovered in mie_single and mie_dlm_single which effected the value of backscattering efficiency calculated. This has now been corrected. Thanks to Lin Tian for spotting and reporting the problem.

Both mie_single.pro and mie_dlm_single have been updated. Both now calculate the backscattering efficiency from the An and Bn functions directly, rather than from the intensity at 180 degrees and will return a value even when the Dqv keyword is not set. Additionally, mie_single.pro has a small bug fix which makes passing Dqv when using the DLM keyword work properly

New versions of the procedures for log-normal particle distributions (mie_lognormal.pro and mie_derivs_ln.pro) have been developed. These new versions make use of a much more accurate method for determining the quadrature points for the integration over particle size.
Also, a new version of the mie_dlm_single is available. This new version no longer returns the phase function, as this was causing random segmentation faults for some reason. The phase function can still be calculated from the two complex scattering functions s1 and s2. Additionally, the maximum number of scattering angles which can be passed to the routine has been increased to 10,000.

New versions of mie_single.pro and mie_lognormal.pro have been written that use a dlm keyword to allow the use of the new DLM. In addition, mie_single.pro now returns the correct value of the backscatter coefficient regardless of whether the Dqv is set or not.

A DLM version of mie_single has been added. This offers considerable speed advantages over the IDL coded version.

The algorithm used in mie_derivs.pro and mie_derivs_ln.pro has been published: Grainger et al., "Calculation of Mie Derivatives", Appl. Opt., 43(28): 5386-5393, 2004.

mie_derivs.pro and mie_single have been updated so that double precision floating point numbers are explicitly used in all calculations. In the case of mie_derivs.pro in particular, this results in a considerable improvement in accuracy for very large particle sizes. Thanks to Dr James Graham (University of California, Berkeley) for suggesting this improvement.

Download the source

The EODG Mie scattering distribution may be downloaded as a gzipped tar file here. The distribution includes the routines listed below along with some supporting routines.

A list of available routines

The routines currently available are listed below. Click on the programme name to see a full description.

Name Type Description
mie_single.pro IDL procedure Computes scattering parameters for single particle, Mie scattering. Accepts an array of particle size parameters and returns the scattering parameters for each one individually.
mie_size_dist.pro IDL procedure Computes the scattering parameters for a log-normal or modified gamma distribution of particles using Mie scattering.
mie_derivs.pro IDL procedure Uses Mie scattering to compute the scattering parameters and their derivatives (analytically) for a single particle.
mie_derivs_ln.pro IDL procedure Uses Mie scattering to compute the scattering parameters and their derivatives (analytically) for a log normal size distribution of particles.
mie_dlm_single DLM IDL DLM procedure Calls an IDL DLM version of the mie_single routine. Much faster than the IDL only version!
mieext_f.pro IDL procedure Calls a compiled FORTRAN version of the basic Mie code (similar to mie_single.pro) using the IDL CALL_EXTERNAL function. Requires mieext.so.

A note on notation

The notation used in describing the properties of a log normal distribution in these pages (and the associated routines) is as follows. A log normal distribution is described by the equation:

(or n(r)) = the number density of particles as a function of radius,
(or No) = the total number density of particles,
(or r) = particle radius,
(or rm) = the MEDIAN particle radius of the distribution,
(or S) = the SPREAD of the distribution where standard deviation of the radius in log space is equal to the log of S. i.e.

In both routines involving log normal distributions available here, No, rm and S are used to define the distribution described above.

A note on units

This code has been written so that it contains no assumptions about the units of input or output variables. Thus, it is up to the user to work out the units of the output variables from the units of their inputs.
This approach, while ensuring the code is flexible and self consistent, can lead to some traps for the unwary. For example, if one uses the mie_size_dist routine to calculate the extinction coefficient and assumes typical units for particle radius (i.e. microns) and particle number density (i.e. number per cm^3), the units of the resulting extinction coefficient will be:

In other words, you'd be a factor of 1000 off if you were to assume that the extinction was being returned in the more standard units of 1/km.
You have been warned!

Other scattering code available online

The following links should help to find Mie or other scattering code available on the web. This list is by no means comprehensive!

Maintained by Greg McGarragh