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.
16/09/21:
Tidying and couple of bug fixes when using mie_size_dist without the phase matrix output.
15/09/15:
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.
21/06/13:
Converted pages to use the EODG version of the departmental website
style.
2/08/12:
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
1/07/08:
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.
22/11/06:
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
9/05/05:
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.
11/04/05:
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.
30/03/05:
A DLM version of mie_single has been added. This offers considerable speed advantages over the IDL coded version.
1/10/04:
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.
17/02/04: 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.
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.
Computes scattering parameters for single particle, Mie scattering. Accepts an array of particle size parameters and returns the scattering parameters for each one individually.
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:
where:
(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.
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!