Mie Scattering Calculator – these were written by Dr. James Nagel to simulate Mie scattering from nanoparticles. Nagel_Mie_Scattering_MATLAB

Multilayer Optical Calculators – these calculate the reflected, transmitted, and absorbed power in a multilayer stack using the Frensel coefficients.  Main calculation written by Dr. James Nagel.  Calculators of R,T, A vs wavelength and of power absorbed vs depth for a single wavelength (both for normal incidence) are included.  The core program solve_layered_stack is more general and can solve for off-normal incidence and different polarizations in 2D domains.   multilayer_calculators

IQE Calculator – Solar cell IQE calculated for a PN junction solar cell composed of two quasineutral regions and a depletion width incorporating recombination velocities at both front and back.  Original formulation assuming Si and thus no generation in depletion width by Hovel.  Adapted for the general case to incorporate a bias-dependnet depletion width.  IQE_uniformlayers


KROGER – We developed a sophisticated program for predicting concentrations of point defects in real semicondcutor and insulator crystalline samples, given inputs of DFT-computed formation energies and processing conditions like temperature, total pressure, and partial pressures of gas environments. The basic problem is fairly straightforward – the concentration of each chargestate q of defect X is [Xq] = No exp(-Ef/kBT) where No is the site density, Ef is the formation energy for that Xq. The concentration of e- and holes are given by similar equations with No replaced by the effective density of states Nc or Nv (degenerate statistics can also be implemented). The formation energies of each chargestate depend on the Fermi level Ef and on chemical potentials for any elements removed or added to form the defect X. The most simple problem is thus to compute the full defect equilibrium at some temperature, assuming the crystal is free to exchange atoms with reservoirs having fixed chemical potentials for the elements. Solution consists of solving for the Ef that ensures charge balance (the charge balance equation gives an implicit relation for Ef). But this corresponds to a rather strange scenario in which somehow an experiment is carried out keeping chemical potential constant – most of the time we set temperature and partial pressures of gases – this will result in the excess chemical potential changing as kBT ln(pi/p0) where pi is partial pressure and p0 is the reference pressure.

We can improve upon this by using known thermochemistry to determine chemical potentials as functions of T, Ptot, and pi. Also, we can add in T dependencies of the bandgap, density of states, and even T dependencies of the formation energies of each chargestate. Also we can implement degenerate statistics for carriers and for defects. Then we can start to also solve mixed type problems – let’s say you want to know how the native defects react to annealing in a defined atmosphere but know that a dopant concentration stays constant (as opposed to its chemical potential being constant). Let’s say the dopant atom can participate in multiple different defects and complexes. Now we need to solve self-consistently for both the Fermi level that satisfies charge balance, but with the additional constraint that the total amount of the dopant is conserved.

These are the kinds of full-blown problems that KROGER was built for. Kroger can handle an arbitrarily large set of defects and was built to handle temperature dependent properties of the semiconductor and each chargestate formation energy.


KROGER is currently implemented in Matlab and consists of a main solver that loops over temperatures, adjusting the procedure based on constraints/specifications of the problem (chemical potentials, fixed numbers of certain defects, fixed numbers of certain chargestates, or fixed numbers of certain impurity elements). The thermochemistry of the host is handled by explicitly-built functions based on phase diagram information – an improvement would be to use external data sources and generalize the definition of the host material. Temperature dependence of formation energies is another area of interest – these are expensive computationally but we do know that the temperature dependence of the band edges relative to defect levels can have very strong effects. Solving problems in concentrated defects where interactions can not be ignored is a long-term area of interest. Lastly, we aim to turn KROGER into Python or a MATLAB GUI to allow others to use it. If you are interested to use KROGER or help develop it, pelase reach out to Prof. Scarpulla