While carrying out research on optical scattering from surfaces, we have developed an extensive amount of software to evaluate different theoretical models for light scattering and other optical phenomena. To allow others to use the models without their own extensive software development, we are distributing the SCATMECH library.
The SCATMECH library consists of a set of C++ object classes that allow programmers to manipulate polarimetric quantities. It adds to standard C code data types corresponding to polarimetric quantities and optical properties of materials. A generalized class for all models (Model) provides support for run-time access to parameters. The class BRDF_Model acts as a base class for all light-scattering models, and a variety of specific models, e.g., particles, subsurface defects, and microroughness, are provided. Scattering by isolated particles can be calculated using the class SphericalScatterer. Simulation of gratings is provided through an implementation of rigorous coupled-wave (RCW) analysis using the class RCW_Model. The classes are designed to be expandable, so that we and others can add new models and functionality to the library.
Examples given in the documentation demonstrate how relatively few lines of code can be used to analyze some relatively complicated concepts. The first example implements the bidirectional reflectance distribution function (BRDF) models we have published, in a manner that allows others to test the models for their applications, to study the sensitivity of the model predictions on specific parameters, or to compare the models to their own data. The second example demonstrates how the RCW simulations can be performed. The third example demonstrates how the class library can be used to calculate the optical properties of thin films. The fourth example is a program that calculates the Mie scattering by an isolated sphere.
Implementing light scattering calculations in an object-oriented programming environment makes full use of that environment. By using class inheritance, for example, we have reduced the amount of code that must be written for a number of different models. Some of the particle-scattering models appear to have little executable code, for example, since they only need to connect a generalized surface/particle-scattering model to the specific free-space model. Abstract classes significantly widen the functionality of many of the models. Function overloading allows the objects describing polarization parameters to be manipulated as easily as scalar quantities. Lastly, the use of abstract classes allows user programs to manipulate all of the models in a unified manner. For example, since all light-scattering models must evaluate the BRDF as a function of the incident and scattering directions, the abstract class BRDF_Model was developed that returns this information.
This hypertext document, and those linked by it, constitutes the documentation for the SCATMECH library. A list of classes and functions are given, which provide links to pages describing each of those classes and external functions. Four examples are given of programs, which make use of different features of the library.
This software was developed at the National Institute of Standards and Technology by employees of the Federal Government in the course of their official duties. Pursuant to Title 17 Section 105 of the United States Code this software is not subject to copyright protection and is in the public domain. SCATMECH is an experimental system. NIST assumes no responsibility whatsoever for its use by other parties, and makes no guarantees, expressed or implied, about its quality, reliability, or any other characteristic. We would appreciate acknowledgment if the software is used. This software can be redistributed and/or modified freely provided that any derivative works bear some notice that they are derived from it, and any modified versions bear some notice that they have been modified.
For More Information
Current SCATMECH version: 6.01 (May 2008)