Mie Scattering by Particle Distributions

All the foregoing can be generalized from Rayleigh scattering to Mie scattering cases. Since we seldom are dealing with particles of a single size, we must consider scattering by a distribution of particle sizes. Here is J code to compute the scattering cross-sections and elements of the scattering matrix for power-law distributions of particle sizes: Power_law.ijs. The equations for the distributions considered can be found in the appendix of Harrington, Lame, White and Borkowski (1997) AJ 113, 2147. (Use Polar_plot.ijs to see the resulting scattering phase functions.)

As an example, we can take the old Rouleau & Martin [1991: ApJ 377,526] optical constants for carbon (benzene burned in air, "BE1"). We will adopt the MRN power law distribution: N(a) proportional to the grain radius "a" to the -3.5 power, for "a" between 0.005 and 0.25 microns. We consider a wavelength of 5000A. Here is the polar plot of the resulting phase function:BE1-MRN. In this figure, the blue line is for incoming radiation polarized perpendicular to the scattering plane, while the red line is for incoming radiation polarized in the scattering plane. We see the distribution is strongly forward scattering (by a ratio of 12.6). The green line is the fractional polarization of the scattered radiation, which never exceeds 60 percent -- the maximum polarization occurs at an angle slightly greater than 90 degrees.

Here is the code for a beam into a slab, like "Pol_beam.ijs" given above, modified to use the scattering matrix from our power-law distribution:PB_rj.ijs. The equations are given in sections 4 and 5 of notes3.pdf. Since this code uses the "rejection method", we encounter the problem mentioned in section 5 of the notes: too many trials of angles greater than 90 degrees will be rejected because the scattering is strongly forward scattering. This code thus splits the tests between forward and back scattering to diminish this problem. (In addition, we include the Stokes parameter V, since some circular polarization can arise depending on the scattering matrix.)

As an example of a "PB_rj" run, let's consider a slab of total optical thickness tau=2, with the opacity due to the distribution of carbon particles illustrated above. We illuminate this slab with a beam of unpolarized light entering with angle of about 45 deg (mu= cos theta= 0.7). The albedo of this distribution is 0.3076, so most of the incident light will be absorbed. We consider many scatterings, though with this albedo, only the first few will be significant. We find that 4.39% of the radiation is scattered back out the top of the slab, exp(-2/0.7) = 5.74% passes through without absorption, and 3.70% is scattered out the bottom of the slab. Thus 13.8% escaped the slab while 86.2% is absorbed.
Here is the intensity distribution of the scattered radiation as a function of azimuth (y-axis) and zenith distance (x-axis - 0 deg is perpendicular to the surface the slab, 90 deg tangent). The beam enters at azimuth = 0 and zenith distance = 45. Scattered from the top face: C-int-up. From the lower face: C-int-down. The spike is where radiation which passes through without interaction emerges at azimuth = 180 and z.d. = 45. (This spike should be much higher, but is suppressed to show the scattered radiation.) Note how the downward scattered radiation is concentrated around that spike due to the strong forward scattering of this particle distribution. The upward scattered radiation is strongest for z.d. near 90 deg and azimuths near 180: this is where the angle of scattering is greatest.
Here is the fractional polarization of the scattered radiation from the upper face C-pol-up and from the lower: C-pol-down. Finally, we have the angle of polarization for the two faces: C-ang-up ; C-ang-down.

Here we present variation of "PB_rj.ijs" which uses inverse interpolation to find the "theta" scattering angles: PB_mixed.ijs. This code should be good even if the scattering matrix has a strongly peaked phase function. (Still a bug in this one: after running for a day or so, it may halt on a NaN :-( ... otherwise, seems OK). Further, here is a version of the code for a point source in a slab, PPaS.ijs, which uses the inverse interpolation method for a general scattering matrix: PPaSmix.ijs. In addition, here is code for a point source on the axis on a cylinder: Cylmix.ijs. And here is the code for an external beam scattered by an infinite slab (generalized from Pol_beam.ijs): PB_Mie.ijs. (Note that these codes also do Rayleigh or electron scattering: just feed them the pre-computed Rayleigh scattering matrix generated by Rayleigh_table.ijs.)