HopTB.Optics

HopTB.Optics.getpermittivityFunction
getpermittivity(
    tm::AbstractTBModel,
    α::Int64,
    β::Int64,
    ωs::AbstractArray{<:Real,1},
    μ::Float64,
    meshsize::Vector{Int64};
    ϵ::Float64=0.1,
    batchsize::Int64=1
) --> Vector{ComplexF64} 

Calculate relative permittivity.

Permittivity is defined as

\[χ^{αβ}=\frac{e^{2}}{\hbar}∫\frac{d^{3}\boldsymbol{k}}{(2π)^{3}}\sum_{n,m} \frac{f_{nm}r_{nm}^{α}r_{mn}^{β}}{ω_{mn}-ω-iϵ}.\]

This function returns $χ^{αβ}/ϵ_0$.

source
HopTB.Optics.get_shift_condFunction
get_shift_cond(tm::AbstractTBModel, α::Int64, β::Int64, γ::Int64=β, ωs::Vector{Float64},
    μ::Float64, nkmesh::Vector{Int64}; ϵ::Float64=0.1, batchsize::Int64=1)
    --> Vector{Float64}

Calculate shift conductivity.

Shift conductivity is defined as

\[σ^{αβγ}(ω)= \frac{πe^3}{\hbar^2}∫\frac{d\boldsymbol{k}}{(2π)^3}\sum_{n,m} f_{nm}I_{nm}^{αβγ}δ(ω_{nm}-ω),\]

where

\[I_{nm}^{αβγ}=\Im[r_{mn}^β r_{nm;α}^γ+r_{mn}^γ r_{nm;α}^β].\]

This function returns shift conductivity in μA/V^2.

source
HopTB.Optics.get_shgFunction
get_shg(tm::AbstractTBModel, α::Int64, β::Int64, γ::Int64, ωs::Vector{Float64},
    μ::Float64, kmesh::Vector{Int64}; ϵ::Float64=0.1, scissor::Float64=0.0)
    --> σs::Vector{ComplexF64}

Calculate second harmonic generation.

The expression of second harmonic generation is in [Wang et al 2017].

The unit of σs is pm/V.

source
HopTB.Optics.get_Drude_weightFunction
function get_Drude_weight(
    tm::AbstractTBModel,
    α::Integer,
    β::Integer,
    μ::Float64,
    meshsize::AbstractVector{Int64};
    kBT::Float64=0.01,
    batchsize::Int64=1
)

This function returns Drude weight in eV/(Ω⋅cm).

source
HopTB.Optics.cltberryconnectionFunction
cltberryconnection(atm::AbstractTBModel, α::Int64, kpts::Matrix{Float64})
    --> berryconnection

Collect Berry connection for all k points.

The returned matrix berryconnection is berryconnection[n, m, ikpt] = |A[n, m]|^2 at ikpt.

source
HopTB.Optics.cltshiftvectorFunction
cltshiftvector(atm::AbstractTBModel, α::Int64, β::Int64, kpts::Matrix{Float64})
    --> shiftvector

Collect shift vector matrices for all k points.

shiftvector[n, m, ikpt] is the shift vector from band m to band n at ikpt.

Shift vector is defined to be

\[R^{α,β}_{nm} = ∂_αϕ_{mn}^β-A_{mm}^α+A_{nn}^α.\]

source