Public Documentation
Documentation for CarrierCapture.jl's public interface.
Contents
Index
CarrierCaptureCarrierCapture.PotentialCarrierCapture.conf_coordCarrierCapture.calc_capt_coeff!CarrierCapture.calc_overlap!CarrierCapture.find_crossingCarrierCapture.fit_pot!CarrierCapture.solve_pot!
Public Interface
CarrierCapture — ModuleMain module for CarrierCapture.jl – A set of codes to compute carrier capture and recombination rates in semiconducting compounds.
Two structs are exported from this module for public use:
Potential: Potential.conf_coord: Configuration coordinate.Plotter: Auxiliary submodule for plotting.Brooglie: 1D Shrödinger equation solver.
CarrierCapture.Potential — TypeStores a potential in one-dimensional space Q, with discreet points (E0, Q0) and fitting function func.
Fields
name– the name of Potential.QE_data– the (n X 2) DataFrame of data points (Q vs Energy).E0,Q0– the minimum point of the Potential [Q0,E0].func_type– the type of fitting function ("bspline", "spline", "harmonic", "polyfunc", "morse_poly", "morse").params– the list of hyper parameters for the fitting function.Q,E–QandE=func(Q, p_opt; params). They are not the same as QE_data, they are the data points of the fitted function.nev– the number of eigenvalues to be evaluated.ϵ– the list of eigenvaluesT– temperature (only used for filtering sample points)T_weight– turn on temperature-dependent Boltzman weighting
Constructor
Potential()CarrierCapture.fit_pot! — Functionfit_pot!(pot::Potential)Fit a function pot.func_type to pot.QE_data on the domain pot.Q.
parameters
pot:Potentialpot.func_type: the fitting function;{"spline" (preferred), "bspline", "harmonic", "polyfunc", "morse_poly", "morse"}.pot.params: the hyperparameters.
Hyperparameters params
spline (preferred)
Spline interpolation. See more detail in Dierckx.jl.
order: spline order (between 1 and 5; default 2).smoothness: the amount of smoothness is determined by the condition thatsum((w[i]*(y[i]-spline(x[i])))**2) <= sweight: the weight applied to eachQE_datapoint (length m 1-d array).
bspline
Basic spline interpolation. See more detail in Interpolations.jl.
harmonic
Harmonic function whose minimum is at [
pot.Q0,pot.E0].hw: the energy quanta of the harmonic oscillator.
polyfunc
Polynomial function;
y = E₀ + Σ coeffs[i].* (x .- Q₀) .^(i-1).poly_order: the maximum order of polynomials.p0: the initial parameters for the fitting function.
Example
- Spline fit
nev = 60
name = "DX-+h"
Q1 = [30.66721918 29.860133 29.05306268 28.24612992 27.43911044 26.63197583 25.82507425 25.01797262 24.21096115 23.40387798 22.59690043 21.78991117 20.98281579 20.17570172 19.36884219 18.56169249 17.75463179 16.94772679 16.14061031 15.33347439 14.52663309 13.71945696 12.91240658 12.10544441 11.29841968 10.4913338 9.684370388 8.877289725 8.070184138]
E1 = [8.0902 7.5970 7.0749 6.5242 5.9461 5.3451 4.7300 4.1147 3.5182 2.9637 2.4769 2.0819 1.7972 1.6315 1.5800 1.6237 1.7301 1.8586 1.9687 2.0283 2.0190 2.0673 1.9910 2.0528 1.9730 2.0857 2.4550 3.1653 4.3448]
pot = Potential(); pot.name = name
pot.nev = nev
pot.Q0 = Q1[findmin(E1)[2]]; pot.E0 = 1.69834
pot.QE_data = DataFrame(Q = Q1[:], E = E1[:])
pot.QE_data.E .+= - minimum(pot.QE_data.E) + pot.E0
pot.Q = Q
pot.func_type = "spline"
# spline fitting parameters
params = Dict()
params["order"] = 4
params["smoothness"] = 0.001
params["weight"] = [1 1 1 1 1 0.5 0.4 0.4 0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
fit_pot!(pot)- Harmonic
nev = 40
name = "SnIII+h"
pot = Potential(); pot.name = name
pot.Q0 = 1.90291674728; pot.E0 = 0.585005
pot.nev = nev
pot.func_type = "harmonic"
params = Dict()
params["hw"] = 0.0281812646475
fit_pot!(pot)CarrierCapture.solve_pot! — Functionsolve_pot!(pot::Potential)Solve 1D Shrödinger equation for Potential. pot.ϵ and pot.χ store the eigenvalues and eigenvectors, respectively.
CarrierCapture.find_crossing — Functionfind_crossing(pot_1::Potential, pot_2::Potential)Find the crossing point between two potential energy surfaces pot1 and pot2. Qx, Ex = find_crossing(pot1, pot2).
CarrierCapture.conf_coord — TypeStores two Potentials with e-ph coupling constant W to calculate the capture coefficient capt_coeff(temperature).
Fields
name– the name of a configuration coordinate.V1andV2– the initial and finalPotentials.W– the e-ph coupling matrix element.g– the degeneracy.temperature– the temperature range wherecapt_coeffis calculated.capt_coeff– the capture coefficient.
Constructor
conf_coord(pot_i::Potential, pot_f::Potential)CarrierCapture.calc_overlap! — Functioncalc_overlap!(cc::conf_coord; cut_off = 0.25, σ = 0.025, Q₀)Calculate phonon overlap between phonon wave functions 'Potential.χ'. If energy difference is larger then the cutoff (eV) abs(cc.V1.ϵ[i] - cc.V2.ϵ[j]) > cut_off, the overlap will not be calculated. Delta functions are replaced by Gaussian functions with widths σ. Q₀ should be consistent with the middle datapoint used to calculate the e-ph coupling matrix element W.
CarrierCapture.calc_capt_coeff! — Functioncalc_capt_coeff!(cc::conf_coord, V::Float64, temperature)Calculate the capture coefficient cc.capt_coeff as a function of temperature which is a UnitRange. V is a volume where the electron-phonon coupling matrix element cc.W is calculated. The lowest thermal occupation number of the eigenstate must be lower than occ_cut_off = 1E-5.
@assert occ_high < occ_cut_off "occ(ϵ_max, T_max): $occ_high should be less than 1.0e-5"