Public Documentation
Documentation for CarrierCapture.jl
's public interface.
Contents
Index
CarrierCapture
CarrierCapture.conf_coord
CarrierCapture.calc_capt_coeff!
CarrierCapture.calc_overlap!
CarrierCapture.find_crossing
CarrierCapture.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.
Missing docstring for potential
. Check Documenter's build log for details.
CarrierCapture.fit_pot!
— Functionfit_pot!(pot::Potential)
Fit a function pot.func_type
to pot.QE_data
on the domain pot.Q
.
parameters
pot
:Potential
pot.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) <= s
weight
: the weight applied to eachQE_data
point (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 Potential
s with e-ph coupling constant W
to calculate the capture coefficient capt_coeff
(temperature
).
Fields
name
– the name of a configuration coordinate.V1
andV2
– the initial and finalPotential
s.W
– the e-ph coupling matrix element.g
– the degeneracy.temperature
– the temperature range wherecapt_coeff
is 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"