pulsesuite.PSTD3D.epsrtl

Dielectric permittivity calculations for quantum wire simulations.

This module calculates longitudinal and transverse permittivity for quantum wire systems.

Author: Rahul R. Sah

Attributes

pi

twopi

hbar

kB

ii

c0

Functions

Eng(m, k)

Calculate energy from momentum. (Placed below in epsrtl.f90)

ff0(E, T, m)

Fermi function at finite temperature.

fT0(k, kf)

Fermi function at zero temperature.

atanJG(z)

Arctangent function.

atanhc(x)

Hyperbolic arctangent function.

PiT(q, w, me, mh, Te, Th, dk, Ek, Ekq)

Calculate transverse polarization function.

GetEpsrLEpsrT(n1D, dcv0, Te, Th, me, mh, Eg, ky)

Get longitudinal and transverse permittivity.

RecordEpsrT(Te, Th, me, mh, Eg, ky)

Record transverse permittivity.

PiL(q, w, m, T, dk, Ek, Ekq)

Calculate longitudinal polarization function.

PiL_T0(q, w, m, T, dk, Ek, Ekq)

Calculate longitudinal polarization function at zero temperature.

RecordEpsrL_T0(me, ky)

Record longitudinal permittivity at zero temperature.

QqGq(ky, Nk, dk, dw, EpsR, EpsI, eh)

Calculate Omega and Gam from permittivity.

ZeroT_L(B, m, qy, kf)

Calculate zero temperature longitudinal permittivity.

ZeroT_T(me, mh, Egap, dcv, qy, kf)

Calculate zero temperature transverse permittivity.

RecordEpsrL(Te, Th, me, mh, ky)

Record longitudinal permittivity.

Module Contents

pulsesuite.PSTD3D.epsrtl.pi
pulsesuite.PSTD3D.epsrtl.twopi
pulsesuite.PSTD3D.epsrtl.hbar
pulsesuite.PSTD3D.epsrtl.kB
pulsesuite.PSTD3D.epsrtl.ii = 1j
pulsesuite.PSTD3D.epsrtl.c0 = 299792458.0
pulsesuite.PSTD3D.epsrtl.Eng(m, k)

Calculate energy from momentum. (Placed below in epsrtl.f90)

Computes kinetic energy: E = hbar^2 * k^2 / (2 * m)

Parameters:
  • m (float or ndarray) – Mass (kg)

  • k (float or ndarray) – Momentum (1/m)

Returns:

Energy (J)

Return type:

float or ndarray

pulsesuite.PSTD3D.epsrtl.ff0(E, T, m)

Fermi function at finite temperature.

Computes: n00 * sqrt(hbar^2 / (2*pi * m * kB * T)) * exp(-E/(kB*T))

Parameters:
  • E (float or ndarray) – Energy (J)

  • T (float or ndarray) – Temperature (K)

  • m (float or ndarray) – Mass (kg)

Returns:

Fermi function value

Return type:

float or ndarray

Notes

Uses module-level variable _n00 for carrier density.

pulsesuite.PSTD3D.epsrtl.fT0(k, kf)

Fermi function at zero temperature.

Computes: 1 - theta(|k| - kf)

Parameters:
  • k (float or ndarray) – Momentum (1/m)

  • kf (float) – Fermi momentum (1/m)

Returns:

Fermi function value at zero temperature

Return type:

float or ndarray

pulsesuite.PSTD3D.epsrtl.atanJG(z)

Arctangent function.

Computes: log((ii - z) / (ii + z)) / (2 * ii)

Parameters:

z (complex or ndarray) – Complex argument

Returns:

Arctangent value

Return type:

complex or ndarray

pulsesuite.PSTD3D.epsrtl.atanhc(x)

Hyperbolic arctangent function.

Computes: 0.5 * log((1 + x) / (1 - x))

Parameters:

x (complex or ndarray) – Complex argument

Returns:

Hyperbolic arctangent value

Return type:

complex or ndarray

pulsesuite.PSTD3D.epsrtl.PiT(q, w, me, mh, Te, Th, dk, Ek, Ekq)

Calculate transverse polarization function.

Computes the transverse polarization function PiT for permittivity calculations.

Parameters:
  • q (float) – Momentum transfer (1/m) (unused, kept for interface compatibility)

  • w (float) – Frequency (Hz)

  • me (float) – Electron mass (kg)

  • mh (float) – Hole mass (kg)

  • Te (float) – Electron temperature (K)

  • Th (float) – Hole temperature (K)

  • dk (float) – Momentum step size (1/m)

  • Ek (ndarray) – Energy array for holes (J)

  • Ekq (ndarray) – Energy array for electrons (J)

Returns:

Transverse polarization function value

Return type:

complex

Notes

The function computes: PiT = (2/pi) * dk * sum((1 - ff0(Ek,Th,mh) - ff0(Ekq,Te,me)) *

(1 / (hbar*w - Ekq - Ek + i*hbar*g)))

pulsesuite.PSTD3D.epsrtl.GetEpsrLEpsrT(n1D, dcv0, Te, Th, me, mh, Eg, ky)

Get longitudinal and transverse permittivity.

Sets up momentum arrays and calls functions to calculate permittivity at zero temperature.

Parameters:
  • n1D (float) – 1D carrier density (1/m)

  • dcv0 (float) – Dipole matrix element (C*m)

  • Te (float) – Electron temperature (K) (unused, kept for interface compatibility)

  • Th (float) – Hole temperature (K) (unused, kept for interface compatibility)

  • me (float) – Effective electron mass (kg)

  • mh (float) – Effective hole mass (kg)

  • Eg (float) – Band gap (J) (unused, kept for interface compatibility)

  • ky (ndarray) – Momentum coordinates (1/m), 1D array

Return type:

None

Notes

This function sets up module-level variables and calls ZeroT_L and ZeroT_T. Writes output to ‘dataQW/Wire/qw.dat’.

pulsesuite.PSTD3D.epsrtl.RecordEpsrT(Te, Th, me, mh, Eg, ky)

Record transverse permittivity.

Calculates and writes the transverse permittivity components for all momentum and frequency values.

Parameters:
  • Te (float) – Electron temperature (K)

  • Th (float) – Hole temperature (K)

  • me (float) – Electron mass (kg)

  • mh (float) – Hole mass (kg)

  • Eg (float) – Band gap (J)

  • ky (ndarray) – Momentum coordinates (1/m), 1D array

Return type:

None

Notes

Writes output to ‘dataQW/Wire/EpsT.dat’ and ‘chi.0.w.dat’. The permittivity arrays use negative indexing mapping: w from -Nw to Nw maps to array indices 0 to 2*Nw.

pulsesuite.PSTD3D.epsrtl.PiL(q, w, m, T, dk, Ek, Ekq)

Calculate longitudinal polarization function.

Computes the longitudinal polarization function PiL for permittivity calculations.

Parameters:
  • q (float) – Momentum transfer (1/m) (unused, kept for interface compatibility)

  • w (float) – Frequency (Hz)

  • m (float) – Mass (kg)

  • T (float) – Temperature (K)

  • dk (float) – Momentum step size (1/m)

  • Ek (ndarray) – Energy array (J)

  • Ekq (ndarray) – Energy array shifted by q (J)

Returns:

Longitudinal polarization function value

Return type:

complex

Notes

The function computes: PiL = (2/pi) * dk * sum((ff0(Ek,T,m) - ff0(Ekq,T,m)) *

(1 / (hbar*w - (Ekq - Ek) + i*hbar*g)))

pulsesuite.PSTD3D.epsrtl.PiL_T0(q, w, m, T, dk, Ek, Ekq)

Calculate longitudinal polarization function at zero temperature.

Computes the longitudinal polarization function PiL_T0 for permittivity calculations at zero temperature.

Parameters:
  • q (float) – Momentum transfer (1/m)

  • w (float) – Frequency (Hz)

  • m (float) – Mass (kg)

  • T (float) – Temperature (K) (unused, kept for interface compatibility)

  • dk (float) – Momentum step size (1/m)

  • Ek (ndarray) – Energy array (J) (unused, kept for interface compatibility)

  • Ekq (ndarray) – Energy array shifted by q (J) (unused, kept for interface compatibility)

Returns:

Longitudinal polarization function value at zero temperature

Return type:

complex

Notes

Uses module-level variable _kf for Fermi momentum. The function computes: PiL_T0 = -m / (pi * hbar^2) * q_inv * (atanhc(…) + atanhc(…))

pulsesuite.PSTD3D.epsrtl.RecordEpsrL_T0(me, ky)

Record longitudinal permittivity at zero temperature.

Calculates and writes the longitudinal permittivity components at zero temperature for all momentum and frequency values.

Parameters:
  • me (float) – Electron mass (kg) (unused, kept for interface compatibility)

  • ky (ndarray) – Momentum coordinates (1/m), 1D array

Return type:

None

Notes

Writes output to ‘dataQW/Wire/EpsL.dat’. The permittivity arrays use negative indexing mapping: w from -Nw to Nw maps to array indices 0 to 2*Nw. Note: The function has empty loops in the original Fortran code.

pulsesuite.PSTD3D.epsrtl.QqGq(ky, Nk, dk, dw, EpsR, EpsI, eh)

Calculate Omega and Gam from permittivity.

Computes the quasiparticle frequency Omega and damping Gam from the permittivity components.

Parameters:
  • ky (ndarray) – Momentum coordinates (1/m), 1D array

  • Nk (int) – Number of momentum points

  • dk (float) – Momentum step size (1/m)

  • dw (float) – Frequency step size (Hz)

  • EpsR (ndarray) – Real part of permittivity, shape (Nk, 2*Nw+1)

  • EpsI (ndarray) – Imaginary part of permittivity, shape (Nk, 2*Nw+1)

  • eh (str) – Character identifier for output file

Return type:

None

Notes

Writes output to ‘dataQW/Wire/Omega_qp.{eh}.dat’. The permittivity arrays use negative indexing mapping: w from -Nw to Nw maps to array indices 0 to 2*Nw.

pulsesuite.PSTD3D.epsrtl.ZeroT_L(B, m, qy, kf)

Calculate zero temperature longitudinal permittivity.

Computes the longitudinal permittivity at zero temperature.

Parameters:
  • B (str) – Character identifier (‘E’ for electrons, ‘H’ for holes)

  • m (float) – Mass (kg)

  • qy (ndarray) – Momentum coordinates (1/m), 1D array

  • kf (float) – Fermi momentum (1/m)

Return type:

None

Notes

Writes output to ‘dataQW/Wire/ChiL.{B}.dat’. The permittivity arrays use negative indexing mapping: w from -Nw to Nw maps to array indices 0 to 2*Nw.

pulsesuite.PSTD3D.epsrtl.ZeroT_T(me, mh, Egap, dcv, qy, kf)

Calculate zero temperature transverse permittivity.

Computes the transverse permittivity at zero temperature.

Parameters:
  • me (float) – Electron mass (kg)

  • mh (float) – Hole mass (kg)

  • Egap (float) – Band gap (J)

  • dcv (float) – Dipole matrix element (C*m)

  • qy (ndarray) – Momentum coordinates (1/m), 1D array

  • kf (float) – Fermi momentum (1/m)

Return type:

None

Notes

Writes output to ‘dataQW/Wire/ChiT.dat’. The permittivity arrays use negative indexing mapping: w from -Nw to Nw maps to array indices 0 to 2*Nw.

pulsesuite.PSTD3D.epsrtl.RecordEpsrL(Te, Th, me, mh, ky)

Record longitudinal permittivity.

Calculates and writes the longitudinal permittivity components for all momentum and frequency values.

Parameters:
  • Te (float) – Electron temperature (K)

  • Th (float) – Hole temperature (K)

  • me (float) – Electron mass (kg)

  • mh (float) – Hole mass (kg)

  • ky (ndarray) – Momentum coordinates (1/m), 1D array

Return type:

None

Notes

Writes output to ‘dataQW/Wire/EpsL.dat’. The permittivity arrays use negative indexing mapping: w from -Nw to Nw maps to array indices 0 to 2*Nw.