Simple Mie scattering in Julia
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Compute Mie scattering in Julia. Mie scattering is the scattering of an electromagnetic plane wave by a homogeneous sphere.

Based on a Fortran code by Karri Muinonen.

Now updated for Julia 1.0.


The work is done by the compute_mie function. There are two ways to call it:

using MieScatter
S, Qsca, Qext, Qback = compute_mie(x, m, N)
S, Qsca, Qext, Qback = compute_mie(x, m, list_of_angles)

where x is the size parameter (two pi times the sphere radius divided by the wavelength) and m is the (possibly complex-valued) relative refractive index of the sphere (the refractive index of the sphere divided by the refractive index of the infinite medium containing it).

In the first form, N is the number of different scattering angles to compute. The range from 0 to 180 degrees in scattering angle will be split in N steps. N needs to be at least 2.

In the second form, the third parameter can be a list of numbers, which should be between 0 and pi. The Mie computation is performed using these numbers as scattering angles. The list can contain only one number. For example, to compute only backscattering, you can call compute_mie(x, m, [pi]).

The returned matrix S is an Nx4 matrix containing the scattering matrix elements S11, S12, S33 and S34 (in this order), for all N scattering angles. Qsca is the scattering coefficient, Qext the extinction coefficient and Qback backscattering coefficient. Multiplying these coefficients by pi times the radius of the particle squared, you get the cross sections. The absorbtion coefficient Qabs = Qext-Qsca.

Note that if the list of scattering angles is provided by the user, Qext and Qback can only be computed if the list includes zero (forward scattering) and pi (backscattering). These variables will return NaN if this is not true.

For convenience, there is also a function size_parameter(r, lambda), which just returns the size parameter x = 2*pi*r / lambda.