Electromagnetic Scattering by Particles and Surfaces
Fortran Codes for the Computation of (Polarized) Bidirectional Reflectance of Flat Particulate Layers and Rough Surfaces
Please note that Dr. Michael I. Mishchenko passed away in July 2020. We do not currently expect that the information presented on these Electromagnetic Scattering research pages will be updated with new data.
This webpage provides access to three collections of Fortran codes.
The first one can be used to compute the scalar bidirectional reflectance of a semiinfinite homogeneous slab composed of arbitrarily shaped, randomly oriented particles based on a rigorous numerical solution of the radiative transfer equation.
The second one can be used to compute the polarized bidirectional reflectance of a semiinfinite homogeneous slab composed of arbitrarily shaped, randomly oriented particles based on a rigorous numerical solution of the vector radiative transfer equation.
The third one can be used to compute the Stokes reflection matrix of a rough interface separating two homogeneous halfspaces with different refractive indices (e.g., a rough ocean surface).
Particulate SemiInfinite Layers: Scalar Case
The code brf.f solves the Ambartsumian's nonlinear integral equation for the reflection function using a simple iterative method. Since this technique bypasses the computation of the internal field, it is by far the fastest and most accurate numerical approach available.
The codes are ideally suitable to computing the BRF for flat snow, soil, and powder surfaces and optically thick clouds and may find applications in geophysics, physics, biophysics, and industrial research.
A detailed user manual to the codes has been published: M. I. Mishchenko, J. M. Dlugach, E. G. Yanovitskij, and N. T. Zakharova, Bidirectional reflectance of flat, optically thick particulate layers: An efficient radiative transfer solution and applications to snow and soil surfaces, J. Quant. Spectrosc. Radiat. Transfer, 63, 409432 (1999).
The users of the code are encouraged to visit this page on a regular basis for information on latest developments, warnings, and/or errors found. We would highly appreciate informing us of any problems and errors encountered with these codes. Please email your questions and comments to michael.i.mishchenko@nasa.gov.
Fortran codes
To retrieve a code, click on the code name and use the "Save As..." option from the "File" menu.
 refl.f  This code computes Fourier components of the reflection function
 interp.f  This code computes the bidirectional reflection function for a given set of scattering geometries
 spher.f  This code computes the Legendre expansion coefficients for polydisperse spherical particles using the standard LorenzMie theory
The codes must be run in the following sequence: spher.f > refl.f > interp.f.
Note that the Legendre expansion coefficients for polydisperse, randomly oriented nonspherical particles and sphere aggregates can be computed using Tmatrix codes. The expansion coefficients for the standard and doublepeaked HenyeyGreenstein phase functions are computed using Eqs. (15) and (19) of the manual. Below we also provide the Legendre expansion coefficients for two nonspherical ice particle models described in the manual.
Benchmark Results
The following output files were computed by the codes in their current settings and may provide a useful test of the performance of the codes on different computers:
The file refl.write is not given here because of its large size.
Legendre coefficients for two ice particle models
Particulate SemiInfinite Layers: Full Vector Case
The Fortran program pbrf.f solves the vector Ambartsumian's nonlinear integral equation for the Stokes reflection matrix using a simple iterative method. Since this technique bypasses the computation of the internal field, it is by far the fastest and most accurate numerical approach available.
A detailed user manual to the code is available here.
The users of the program are encouraged to visit this page on a regular basis for information on latests developments, warnings, and/or errors found. We would highly appreciate informing us of any problems and errors encountered with this program. Please email your questions and comments to michael.i.mishchenko@nasa.gov.
Fortran codes
To retrieve a code, click on the code name and use the "Save As..." option from the "File" menu.
 pbrf.f  This code computes Fourier components of the reflection matrix
 pbrf.par.f  This code must be stored in the same directory as pbrf.f
 spher.pbrf.f  This code computes the expansion of the Stokes scattering matrix in generalized spherical functions for polydisperse spherical particles using the standard LorenzMie theory
The codes must be run in the following sequence: spher.f > pbrf.f
Note that the expansion coefficients for polydisperse, randomly oriented nonspherical particles and sphere aggregates can be computed using Tmatrix codes.
Benchmark results
The following output files were computed by the codes in their current settings and may provide a useful test of the performance of the codes on different computers:
The file pbrf.write is not given here because of its large size.
Expansion of Tabulated Scattering Matrices in Generalized Spherical Functions
A detailed user manual to the computer program is available here.
Fortran codes
To retrieve a code, click on the code name and use the "Save As..." option from the "File" menu.
 spher_expan.f  This code computes the generalizedfunction expansion of a tabulated scattering matrix.
 params.h  This code must be stored in the same directory as spher_expan.f
ReExpansion of a Scattering Matrix in Generalized Spherical Functions with Packing Density Correction
A detailed user manual to the computer program is available here.
Fortran code
To retrieve the code, click on the code name and use the "Save As..." option from the "File" menu.
 PackedMedia.f This code recomputes the generalizedfunction expansion of a "lowdensity" scattering matrix by incorporating densepacking effects based on the static structure factor.
Rough Surfaces
The code ocean.shadow.f calculates the Stokes reflection matrix for illumination from above for a statistically rough surface separating two halfspaces with different refractive indices. The effect of shadowing is included.
The code ocean.phase.f calculates Fourier components of the Stokes reflection matrix for illumination from above for a statistically rough surface separating two halfspaces with different refractive indices. The effect of shadowing is included.
A detailed user manual to the codes has been published: M. I. Mishchenko and L. D. Travis, Satellite retrieval of aerosol properties over the ocean using polarization as well as intensity of reflected sunlight, J. Geophys. Res., 102, 1698917013. A hardcopy reprint of this paper is available from Michael Mishchenko upon request. Please leave a message at michael.i.mishchenko@nasa.gov indicating your name and mailing address.
The users of the codes are encouraged to visit this page on a regular basis for information on latests developments, warnings, and/or errors found. We would highly appreciate informing us of any problems and errors encountered with these codes. Please email your questions and comments to michael.i.mishchenko@nasa.gov.
Fortran codes
To retrieve a code, click on the code name and use the "Save As..." option from the "File" menu.
PDF documents linked in this page may be viewed using Adobe's free Acrobat Reader.
Scattering Home
Books 
Publications OnLine

TMatrix Database
Codes: TMatrix 
Bidirectional Reflectance 
LorenzMie
Related Codes and Databases