The `mie_derivs_ln.pro` procedure performs Mie scattering calculations on aerosol with a log normal size distribution and provides analytically derived derivatives, with respect to the properties of the distribution, of all output parameters. The procedure provides the distribution of scattering radiation (in the form of the Mie intensity functions), the volume extinction and scattering coefficients and their derivatives.

A the derivation of expressions for the analytical derivatives of Mie scattering terms is covered by:

Grainger, R.G., J. Lucas, G.E. Thomas, G. Ewan, "The Calculation of Mie Derivatives", *Appl. Opt.*, **43**(28), 5286-5393, 2004.

`mie_derivs_ln.pro` is an IDL procedure and can be called with the following command line from the IDL prompt (as long as the source file lies within your `IDL_PATH` environment variable):

`mie_derivs_ln, N, Rm, S, wavenumber, Cm[, Dqv=Dqv] [, Bext][, Bsca][, dBextdN][, dBextdRm][, dBextdS] [, dBscadN][, dBscadRm][, dBscadS][, i1][, i2] [, di1dN][, di1dRm][, di1dS][, di2dN][, di2dRm][, di2dS]`

The input parameters in the above call are:

`N`: Number density of the particle distribution.`Rm`: Median radius of the particle distribution (in microns).`S`: Spread of the distribution, such that the standard deviation of ln(r) is ln(S)`wavenumber`: Wavenumber of light, defined as 1/wavelength. This must be a positive scalar and it's units should match those of`Rm`(ie. if`Rm`is in microns,`wavenumber`should be in 1/microns).`Cm`: Complex refractive index of the particle(s). Only one refractive index value can be used in each call to the procedure and must take the form complex(a,-b) (where a is the real part of the refractive index, and b is the imaginary (or absorptive) part, and is either zero or negative).`Dqv`: Cosines of the scattering angles at which to calculate the intensity functions etc. If specified it**must**be vector of type float or double (although it can have only one element).

`Bext`: Volume extinction coefficient.`Bsca`: Volume scattering coefficient.`dBextdN`: Derivative of the extinction coefficient wrt the number density.`dBextdRm`: Derivative of the extinction coefficient wrt the mean radius.`dBextdS`: Derivative of the extinction coefficient wrt the spread.`dBscadN`: Derivative of the scattering coefficient wrt the number density.`dBscadRm`: Derivative of the scattering coefficient wrt the mean radius.`dBscadS`: Derivative of the scattering coefficient wrt the spread.

`i1`: First intensity function - intensity of light polarised in the plane perpendicular to the directions of incident light propagation and observation. Only calculated if Dqv is specified.`i2`: Second intensity function - intensity of light polarised in the plane parallel to the directions of incident light propagation and observation. Only calculated if Dqv is specified.`di1dN`: Derivatives of the first intensity function wrt the number density.`di1dRm`: Derivatives of the first intensity function wrt the mean radius.`di1dS`: Derivatives of the first intensity function wrt the spread.`di2dN`: Derivatives of the second intensity function wrt the number density.`di2dRm`: Derivatives of the second intensity function wrt the mean radius.`di2dS`: Derivatives of the second intensity function wrt the spread.

It should be noted that is a very new routine and has yet to be extensively tested.

This procedure calls the `mie_single.pro ` procedure.As a result of this, any distribution that contains particles with size parameters greater than 12000 will result
in the programme exiting with the error message "`Error: Size Parameter Overflow in Mie`".

This procedure also calls the
`quadrature.pro` and `shift_quadrature.pro` procedures (click to download). Quadrature is called with the command line:

`quadrature, 'g', Npts, abs, wght`

the string `'g'` can be either `'g'` for Gaussian quadrature,
`'l'` for Lobatto quadrature, `'r'` for Radau quadrature, `'s'` for Simson's rule or `'t'` for the Trapezium rule. `Npts` specifies the number of quadrature points required and the routine returns the abscissa and weighting values in `abs` and `wght` respectively.

`shift_quadrature.pro` is called with the command line:

`shift_quadrature,abscissa,weights,A,B,new_abscissa,new_weights`

and simply transforms the `abscissa` and `weights` from the interval `[-1,1]` to `[A,B]`, place the new values in `new_abscissa` and `new_weights`.

Maintained by Greg McGarragh