Author: Jordan Edmunds Affiliation: UC Irvine, UC Berkeley Date Started: 2020/01/05 Title: Transfer Matrix Method Fullwave Rigorous Solver License: BSD SOFTWARE STATUS This software currently works for single-wavelength calculation of composite scattering matrices, reflected/transmitted fields, and reflectance/transmittance. It has been validated against benchmarking code provided by Professor Raymond Rumpf at UTEP. In the (very near) future, I plan to implement some wrappers for plotting and multi-wavelength simulation. I am currently working on creating code for the Plane Wave Expansion Method and Rigorous Coupled Wave Analysis, and I will need to implement multi-wavelength simulation shortly after I finish those. This is an implementation of the Transfer Matrix Method authored by Jordan Edmunds (currently doing my Ph.D. at UC Berkeley in the Electrical Engineering and Computer Science Department). I had previously written a simple single-polarization transfer matrix method solver in Mathematica, but am now dealing with inhomogenous, anisotropic, and nonlinear materials, and so decided to re-implement in in python under the guidance of Dr. Raymond Rumpf (no official affiliation, but I have heavily used his online lectures and available materials). Whenever possible I have attempted to stay with the convention introduced in Dr. Rumpf's online class on computational electromagnetics. This software currently works at an arbitrary angle of incidence, with arbitrary complex-valued permittivities and permeabilities for an arbitrary number of layers. GETTING STARTED --- NETLIST FORMAT --- While I love mucking around in other people's code as much as the next guy, I actually hate doing that. I also hate mucking around in my own code months or years after I wrote the thing. For this reason, I have implemented a netlist-based interface to run the software. This is where all material parameters are specified, the simulation wavelength, polarization, etc. The simplest netlist is zero lines of code - that means you are sending a plane wave into free space. Pretty boring, but the software will work just fine. If incident and outgoing layers are not specified, these are assumed to be free space. If a layer is specified with no thickness, it is assumed to be the incident layer or the transmitted layer depending on where it is in the file. There are simple example netlists in the "netlist" folder you can run, and I would start there. Hi.