diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index 5496930..65d36d4 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-07-05T21:26:10","documenter_version":"1.5.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-08-10T19:53:42","documenter_version":"1.5.0"}} \ No newline at end of file diff --git a/dev/index.html b/dev/index.html index 66bb527..c33de77 100644 --- a/dev/index.html +++ b/dev/index.html @@ -11,4 +11,4 @@ year={2020}, doi={10.21105/joss.02102}, url={https://joss.theoj.org/papers/10.21105/joss.02102}, -}

Extended Reading List

Theory Development

Seminal contribution that introduces many important concepts

Context for the static approximation that we employ

Review on theory and various models of recombination

Discussion and treatment of anharmonicity

Semiclassical treatment of matrix elements following Landau and Holstein

Applications of CarrierCapture

+}

Extended Reading List

Theory Development

Seminal contribution that introduces many important concepts

Context for the static approximation that we employ

Review on theory and various models of recombination

Discussion and treatment of anharmonicity

Semiclassical treatment of matrix elements following Landau and Holstein

Applications of CarrierCapture

diff --git a/dev/lib/brooglie/index.html b/dev/lib/brooglie/index.html index f3dbe5f..7c03b07 100644 --- a/dev/lib/brooglie/index.html +++ b/dev/lib/brooglie/index.html @@ -1,2 +1,2 @@ -Brooglie · CarrierCapture

Public Documentation

Documentation for the submodule Brooglie.jl.

This module is a solver for the time-independent Schrödinger equation and a copy of a project https://github.com/RedPointyJackson/Brooglie (MIT License).

Index

Public Interface

CarrierCapture.Brooglie.buildHMethod
buildH(V; N=20, a=-1, b=1, m=1)

Hamiltonian of a particle of mass m in a box spanning from a to b in all D dimensions with a basis of N elements (number of partitions of the space in each coordinate). The potential V(x, y, z, ...) is a function of D arguments.

source
CarrierCapture.Brooglie.solveMethod
solve(V; N=500, a=-1, b=1, m=1, nev=N÷20, maxiter=1000)

Solve the potential V(x,y,z,...) in a grid xᵢ ∈ [a,b], discretized in N steps.

The particle is assumed to have mass m (by default 1, a electron mass).

The function will return the nev first energy levels (in Hartree[1]) and its normalized eigenfunctions.

[1] A Hartree is equivalent to 27.21… eV. The global variable H2eV, equal to that value, can be accessed under Brooglie.H2eV for convenience.

source
+Brooglie · CarrierCapture

Public Documentation

Documentation for the submodule Brooglie.jl.

This module is a solver for the time-independent Schrödinger equation and a copy of a project https://github.com/RedPointyJackson/Brooglie (MIT License).

Index

Public Interface

CarrierCapture.Brooglie.buildHMethod
buildH(V; N=20, a=-1, b=1, m=1)

Hamiltonian of a particle of mass m in a box spanning from a to b in all D dimensions with a basis of N elements (number of partitions of the space in each coordinate). The potential V(x, y, z, ...) is a function of D arguments.

source
CarrierCapture.Brooglie.solveMethod
solve(V; N=500, a=-1, b=1, m=1, nev=N÷20, maxiter=1000)

Solve the potential V(x,y,z,...) in a grid xᵢ ∈ [a,b], discretized in N steps.

The particle is assumed to have mass m (by default 1, a electron mass).

The function will return the nev first energy levels (in Hartree[1]) and its normalized eigenfunctions.

[1] A Hartree is equivalent to 27.21… eV. The global variable H2eV, equal to that value, can be accessed under Brooglie.H2eV for convenience.

source
diff --git a/dev/lib/plotter/index.html b/dev/lib/plotter/index.html index e9802d1..8d590e0 100644 --- a/dev/lib/plotter/index.html +++ b/dev/lib/plotter/index.html @@ -1,2 +1,2 @@ -Plotter · CarrierCapture

Public Documentation

Documentation for the submodule Plotter.jl.

Index

Public Interface

CarrierCapture.Plotter.plot_pot!Method
plot_pot!(pot; lplt_wf = false, plt = nothing, color = Nothing, label = "", scale_factor = 2e-2)

Plots Potential with its' wave functions if lplt_wf is true.

source
+Plotter · CarrierCapture

Public Documentation

Documentation for the submodule Plotter.jl.

Index

Public Interface

CarrierCapture.Plotter.plot_pot!Method
plot_pot!(pot; lplt_wf = false, plt = nothing, color = Nothing, label = "", scale_factor = 2e-2)

Plots Potential with its' wave functions if lplt_wf is true.

source
diff --git a/dev/lib/public/index.html b/dev/lib/public/index.html index 104ff60..186f28c 100644 --- a/dev/lib/public/index.html +++ b/dev/lib/public/index.html @@ -1,5 +1,5 @@ -Public · CarrierCapture

Public Documentation

Documentation for CarrierCapture.jl's public interface.

Contents

Index

Public Interface

CarrierCaptureModule

Main 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:

source
CarrierCapture.PotentialType

Stores 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, EQ and E=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 eigenvalues
  • T – temperature (only used for filtering sample points)
  • T_weight – turn on temperature-dependent Boltzman weighting

Constructor

Potential()
source
CarrierCapture.fit_pot!Function
fit_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 that sum((w[i]*(y[i]-spline(x[i])))**2) <= s
    • weight: the weight applied to each QE_data point (length m 1-d array).
  • 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
+Public · CarrierCapture

Public Documentation

Documentation for CarrierCapture.jl's public interface.

Contents

Index

Public Interface

CarrierCaptureModule

Main 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:

source
CarrierCapture.PotentialType

Stores 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, EQ and E=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 eigenvalues
  • T – temperature (only used for filtering sample points)
  • T_weight – turn on temperature-dependent Boltzman weighting

Constructor

Potential()
source
CarrierCapture.fit_pot!Function
fit_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 that sum((w[i]*(y[i]-spline(x[i])))**2) <= s
    • weight: the weight applied to each QE_data point (length m 1-d array).
  • 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]
@@ -27,4 +27,4 @@
 pot.func_type = "harmonic"
 params = Dict()
 params["hw"] = 0.0281812646475
-fit_pot!(pot)
source
CarrierCapture.solve_pot!Function
solve_pot!(pot::Potential)

Solve 1D Shrödinger equation for Potential. pot.ϵ and pot.χ store the eigenvalues and eigenvectors, respectively.

source
CarrierCapture.find_crossingFunction
find_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).

source
CarrierCapture.conf_coordType

Stores two Potentials with e-ph coupling constant W to calculate the capture coefficient capt_coeff(temperature).

Fields

  • name – the name of a configuration coordinate.
  • V1 and V2 – the initial and final Potentials.
  • W – the e-ph coupling matrix element.
  • g – the degeneracy.
  • temperature – the temperature range where capt_coeff is calculated.
  • capt_coeff – the capture coefficient.

Constructor

conf_coord(pot_i::Potential, pot_f::Potential)
source
CarrierCapture.calc_overlap!Function
calc_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.

source
CarrierCapture.calc_capt_coeff!Function
calc_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"
source
+fit_pot!(pot)
source
CarrierCapture.solve_pot!Function
solve_pot!(pot::Potential)

Solve 1D Shrödinger equation for Potential. pot.ϵ and pot.χ store the eigenvalues and eigenvectors, respectively.

source
CarrierCapture.find_crossingFunction
find_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).

source
CarrierCapture.conf_coordType

Stores two Potentials with e-ph coupling constant W to calculate the capture coefficient capt_coeff(temperature).

Fields

  • name – the name of a configuration coordinate.
  • V1 and V2 – the initial and final Potentials.
  • W – the e-ph coupling matrix element.
  • g – the degeneracy.
  • temperature – the temperature range where capt_coeff is calculated.
  • capt_coeff – the capture coefficient.

Constructor

conf_coord(pot_i::Potential, pot_f::Potential)
source
CarrierCapture.calc_overlap!Function
calc_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.

source
CarrierCapture.calc_capt_coeff!Function
calc_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"
source
diff --git a/dev/usage/index.html b/dev/usage/index.html index 4658372..9496edd 100644 --- a/dev/usage/index.html +++ b/dev/usage/index.html @@ -69,4 +69,4 @@ [[0.0574] [0.0267] [0.0345] - [0.0643]]
  • Calculate the rate of change in overlap between initial and final wavefunctions <ψ_i0|ψ_f(𝛥Q)> as the geometry changes 𝛥Q: W_if = (ϵ_f - ϵ_i) d<ψ_i0|ψ_f(𝛥Q)> / d𝛥Q. See more detail in this example.

  • 2. Building Potential

    See Example.

    1. Use fit_pot! to find a best fit to the data of Q and E.
    2. Use solve_pot! to solve 1D Shrödinger equation for the potential energy surface (PES).

    3. Computing Capture Rates

    See Example.

    1. Use calc_overlap! to calculate the overlap between phonon wave functions.
    2. Use calc_capt_coeff! to calculate the capture coefficient as a function of temperature.

    High-throughput Usage

    High-throughput usage is possible by preparing files in a similar method to the examples, useParamScan_Harmonic.jl and useParamScan_Anharmonic.jl. It is recommended that a high-performance computer rather than a personal machine is used, depending on how many calculations are performed. The code can then be run remotely using nohup julia useParamScan_Harmonic &.

    The steps are as follows,

    1. Define the parameters for which capture coefficient C will be calculated.

    2. Calculate C for these parameters, in parallel over the largest parameter range (usually ΔQ)

    3. Find ccArray.npz to analyse the capture coefficient as a function of its parameters.

    + [0.0643]]
  • Calculate the rate of change in overlap between initial and final wavefunctions <ψ_i0|ψ_f(𝛥Q)> as the geometry changes 𝛥Q: W_if = (ϵ_f - ϵ_i) d<ψ_i0|ψ_f(𝛥Q)> / d𝛥Q. See more detail in this example.

  • 2. Building Potential

    See Example.

    1. Use fit_pot! to find a best fit to the data of Q and E.
    2. Use solve_pot! to solve 1D Shrödinger equation for the potential energy surface (PES).

    3. Computing Capture Rates

    See Example.

    1. Use calc_overlap! to calculate the overlap between phonon wave functions.
    2. Use calc_capt_coeff! to calculate the capture coefficient as a function of temperature.

    High-throughput Usage

    High-throughput usage is possible by preparing files in a similar method to the examples, useParamScan_Harmonic.jl and useParamScan_Anharmonic.jl. It is recommended that a high-performance computer rather than a personal machine is used, depending on how many calculations are performed. The code can then be run remotely using nohup julia useParamScan_Harmonic &.

    The steps are as follows,

    1. Define the parameters for which capture coefficient C will be calculated.

    2. Calculate C for these parameters, in parallel over the largest parameter range (usually ΔQ)

    3. Find ccArray.npz to analyse the capture coefficient as a function of its parameters.