Documentation for optical modelling program

Contents

Introduction and overview

This is a program for optical modelling using the Fresnel equations through a series of stratified layers. The permittivities of the materials can be calculated using a variety of models, including the Bruggeman EMT (effective medium theory) for non-homogenous systems. This README document attempts to describe the program from a users perspective and it does not explain the source code in detail. I've made some attempt to comment the source code, and parts of my thesis describe some of the math.

If you are not familliar with optical modelling using the Transfer Matrix Method, you can read part of the Supporting Information for Andvaag, I., Morhart, T., Clarke, O., Burgess, I. ACS Appl. Nano Mater. 2019 2 (3), 1274-1284. It should give a reasonable primer on the various permittivity models and how to use the Fresnel equations.

Here's an rough outline of how I expect the program might be used:

  1. Create a materials() object, thereby initializing the domain mode, the fixed AOI or frequency, the low and high limits of the domain of interest, and the number of wavenumbers between plotted points
  2. Assign the material types using the methods of the materials object.
  3. Create a phaseSys()object
  4. Define a stratified system on which to perform calculations by calling the setLayers() and setThicknesses() methods of the phaseSys() object
  5. Perform the calculation using the calcR(), calcT(), calcA(), or calcE() methods of phaseSys().
  6. Plot up the computed data in the notebook, or export an ASCII file of the computed values.

Instructions for use

There are two main classes that do the heavy lifting: the materials() class, and the phaseSys() class. There is also a createFit() class for fitting to the Drude model. To make use of these classes, you must import them with:

from opticalc_330 import *

Using the materials() class

  An object that defines the basic parameters of the system and has various methods to define permittivities of materials.

Using the phaseSys() class

  An object used to setup the specific system and calculate reflectivity, transmissivity, and absorptivity.

Using the createFit() class

  An object used to visually fit experimental reflectivity data to the Drude model.

An example use case

This example use case also exists in a jupyter notebook form titled ATR-SEIRAS_example.ipynb

State of the code

Please use this code at your own risk and do not trust its accuracy. I have attempted to implement the mathematics correctly, but there are surely many errors and bugs. In order to verify that my implementation is correct, I have tried to reproduce various plots found in the literature. The notebook <test_cases_for_evaluation.ipynb> contains some of the test cases that I have successfully reproduced, as well as some cases that I have failed to reproduce.

Known Working

Unknown Status (as of yet unverified)

Known Issues

References for experimental refractive indices

Reference Materials
1. Babar, S. and Weaver, J. H. 2015. Appl. Opt. Ag, Au, Cu
2. Hale, G. M. and Querry, M. R..1973. Appl. Opt.12, 555-563. H2O
3. Li, H. H. 1980. J. Phys. Chem. Ref. Data 9, 161-289. CaF2
4. Li, H. H.1993. J. Phys. Chem. Ref. Data 9, 561-658. Ge, Si
5. Li, H. H.1976. J. Phys. Chem. Ref. Data 5, 329, 528 KBr
6. Ordal, M. A., Bell, R. J., Alexander, R. W., Long, L. L., Querry, R. R.1987. Appl. Opt. 26, 744-752. Ni
7. Philip, H.R. and Taft, E. A. 1964. Phys. Rev.136, A1445. C (diamond)
8. Querry, M. R. 1987. Contractor ReportCRDEC-CR-88009 ZnSe

Contact

Ian Andvaag is the primary author of this program. He can be reached at: ira044@usask.ca

License

This project is licensed under the GNU GPL v2.0 license. If you make something cool, please reach out to me -- I'd love to hear about it!