pulsesuite.PSTD3D.coulomb

Coulomb interaction calculations for quantum wire simulations.

This module calculates the electron-hole, electron-electron, and hole-hole collision integrals and other carrier-optical related calculations required for the Semiconductor Bloch Equations in support of simulations of pulse propagation through a quantum wire.

The primary API is the CoulombModule class, which encapsulates all pre-computed arrays and methods (mirroring the Fortran module coulomb with private state). Module-level wrapper functions are provided for backward compatibility.

Author: Rahul R. Sah

Attributes

pi

twopi

hbar

eV

ii

Classes

CoulombModule

Coulomb interaction module for quantum wire simulations.

Functions

Vint(Qyk, y, alphae, alphah, Delta0)

Calculate the interaction integral for Coulomb potential.

Vehint(k, q, y, ky, alphae, alphah, Delta0)

Calculate electron-hole interaction integral.

GaussDelta(a, b)

Gaussian delta function approximation.

MakeK3(ky)

Construct the k3 indexing array for momentum conservation.

MakeQs(ky, ae, ah)

Construct the qe and qh momentum difference arrays.

MakeUnDel(ky)

Construct the UnDel (1 - delta) array.

CalcMBArrays(ky, Ee, Eh, ge, gh, k3, UnDel[, LorentzDelta])

Calculate the many-body interaction arrays Ceh, Cee, Chh.

CalcCoulombArrays(y, ky, er, alphae, alphah, L, ...[, ...])

Construct the unscreened Coulomb collision arrays Veh0, Vee0, Vhh0.

CalcChi1D(ky, alphae, alphah, Delta0, epsr, me, mh, qe, qh)

Calculate the 1D susceptibility arrays Chi1De and Chi1Dh.

GetChi1Dqw(alphae, alphah, Delta0, epsr, game, gamh, ...)

Calculate the 1D quantum wire susceptibility chi(q, w).

GetEps1Dqw(alphae, alphah, Delta0, epsr, me, mh, n1D, q, w)

Calculate the 1D quantum wire dielectric function epsilon(q, w).

SetLorentzDelta(boolean)

Set the LorentzDelta flag (module-level wrapper).

InitializeCoulomb(y, ky, L, Delta0, me, mh, Ee, Eh, ...)

Create / replace the module-level CoulombModule singleton.

CalcScreenedArrays(screened, L, ne, nh, VC, E1D)

Eps1D(n1D, Nk)

CalcMVeh(p, VC, MVeh[, k3, UnDel])

undell(k, q)

BGRenorm(C, D, VC, BGR[, UnDel])

EeRenorm(ne, VC, BGR[, UnDel])

EhRenorm(nh, VC, BGR[, UnDel])

MBCE2(ne0, nh0, ky, Ee, Eh, VC, geh, ge, Win, Wout[, ...])

MBCE(ne0, nh0, ky, Ee, Eh, VC, geh, ge, Win, Wout[, ...])

MBCH(ne0, nh0, ky, Ee, Eh, VC, geh, gh, Win, Wout[, ...])

__getattr__(name)

Module Contents

pulsesuite.PSTD3D.coulomb.pi
pulsesuite.PSTD3D.coulomb.twopi
pulsesuite.PSTD3D.coulomb.hbar
pulsesuite.PSTD3D.coulomb.eV = 1.602176634e-19
pulsesuite.PSTD3D.coulomb.ii = 1j
pulsesuite.PSTD3D.coulomb.Vint(Qyk, y, alphae, alphah, Delta0)

Calculate the interaction integral for Coulomb potential.

Computes the integral over spatial coordinates for the Coulomb interaction between particles with level separations alphae and alphah.

Parameters:
  • Qyk (float) – Momentum difference (1/m)

  • y (ndarray) – Length coordinates of quantum wire (m), 1D array

  • alphae (float) – Level separation for electrons (1/m)

  • alphah (float) – Level separation for holes (1/m)

  • Delta0 (float) – Thickness of the quantum wire (m)

Returns:

Interaction integral value (dimensionless)

Return type:

float

pulsesuite.PSTD3D.coulomb.Vehint(k, q, y, ky, alphae, alphah, Delta0)

Calculate electron-hole interaction integral.

Parameters:
  • k (int) – Electron momentum index (1-based, matching Fortran)

  • q (int) – Hole momentum index (1-based, matching Fortran)

  • y (ndarray) – Length coordinates of quantum wire (m), 1D array

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

  • alphae (float) – Level separation for electrons (1/m)

  • alphah (float) – Level separation for holes (1/m)

  • Delta0 (float) – Thickness of the quantum wire (m)

Returns:

Electron-hole interaction integral value (dimensionless)

Return type:

float

pulsesuite.PSTD3D.coulomb.GaussDelta(a, b)

Gaussian delta function approximation.

Parameters:
  • a (float) – Energy difference argument (J)

  • b (float) – Broadening parameter (J)

Returns:

Gaussian delta function value (1/J)

Return type:

float

pulsesuite.PSTD3D.coulomb.MakeK3(ky)

Construct the k3 indexing array for momentum conservation.

Creates a 3D array where k3(k1, k2, k4) = k1 + k2 - k4 (1-based). Invalid combinations (out of [1, N]) are stored as 0.

Parameters:

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

Returns:

3D integer array of shape (N, N, N), values 1-based or 0 (invalid).

Return type:

ndarray

pulsesuite.PSTD3D.coulomb.MakeQs(ky, ae, ah)

Construct the qe and qh momentum difference arrays.

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

  • ae (float) – Level separation parameter for electrons (1/m)

  • ah (float) – Level separation parameter for holes (1/m)

Returns:

(qe, qh), each of shape (N, N)

Return type:

tuple of ndarray

pulsesuite.PSTD3D.coulomb.MakeUnDel(ky)

Construct the UnDel (1 - delta) array.

Creates an array of shape (N+1, N+1) with: - Row/column 0 all zeros - Diagonal elements (i, i) for i=1..N are zero - All other elements are 1.0

Parameters:

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

Returns:

2D array of shape (N+1, N+1)

Return type:

ndarray

pulsesuite.PSTD3D.coulomb.CalcMBArrays(ky, Ee, Eh, ge, gh, k3, UnDel, LorentzDelta=False)

Calculate the many-body interaction arrays Ceh, Cee, Chh.

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

  • Ee (ndarray) – Electron energies (J), 1D array

  • Eh (ndarray) – Hole energies (J), 1D array

  • ge (float) – Electron inverse lifetime (Hz)

  • gh (float) – Hole inverse lifetime (Hz)

  • k3 (ndarray) – 3D indexing array from MakeK3

  • UnDel (ndarray) – 2D array from MakeUnDel

  • LorentzDelta (bool) – If True, use Lorentzian broadening; if False, use Gaussian delta.

Returns:

(Ceh, Cee, Chh), each of shape (N+1, N+1, N+1)

Return type:

tuple of ndarray

pulsesuite.PSTD3D.coulomb.CalcCoulombArrays(y, ky, er, alphae, alphah, L, Delta0, Qy, kkp, ReadArrays=False, ScrewThis=False)

Construct the unscreened Coulomb collision arrays Veh0, Vee0, Vhh0.

Parameters:
  • y (ndarray) – Length coordinates (m), 1D array

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

  • er (float) – Background dielectric constant

  • alphae (float) – Level separation for electrons (1/m)

  • alphah (float) – Level separation for holes (1/m)

  • L (float) – Length of quantum wire (m)

  • Delta0 (float) – Thickness of quantum wire (m)

  • Qy (ndarray) – Momentum difference array (1/m)

  • kkp (ndarray) – Index mapping array, 2D integer

  • ReadArrays (bool, optional) – If True, read from files (not implemented). Default False.

  • ScrewThis (bool, optional) – If True, return zero arrays. Default False.

Returns:

(Veh0, Vee0, Vhh0), each of shape (N, N)

Return type:

tuple of ndarray

pulsesuite.PSTD3D.coulomb.CalcChi1D(ky, alphae, alphah, Delta0, epsr, me, mh, qe, qh)

Calculate the 1D susceptibility arrays Chi1De and Chi1Dh.

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

  • alphae (float) – Level separation for electrons (1/m)

  • alphah (float) – Level separation for holes (1/m)

  • Delta0 (float) – Thickness of quantum wire (m)

  • epsr (float) – Background dielectric constant

  • me (float) – Electron effective mass (kg)

  • mh (float) – Hole effective mass (kg)

  • qe (ndarray) – Electron momentum difference array from MakeQs

  • qh (ndarray) – Hole momentum difference array from MakeQs

Returns:

(Chi1De, Chi1Dh), each of shape (N, N)

Return type:

tuple of ndarray

pulsesuite.PSTD3D.coulomb.GetChi1Dqw(alphae, alphah, Delta0, epsr, game, gamh, ky, Ee, Eh, ne, nh, qq, w)

Calculate the 1D quantum wire susceptibility chi(q, w).

Parameters:
  • alphae (float) – Level separation parameters (1/m)

  • alphah (float) – Level separation parameters (1/m)

  • Delta0 (float) – Thickness of quantum wire (m)

  • epsr (float) – Background dielectric constant

  • game (ndarray) – Inverse lifetime arrays (Hz)

  • gamh (ndarray) – Inverse lifetime arrays (Hz)

  • ky (ndarray) – Momentum coordinates (1/m)

  • Ee (ndarray) – Electron/hole energies (J)

  • Eh (ndarray) – Electron/hole energies (J)

  • ne (ndarray) – Electron/hole populations

  • nh (ndarray) – Electron/hole populations

  • qq (float) – Momentum value (1/m)

  • w (float) – Frequency (rad/s)

Returns:

(chir, chii) — real and imaginary parts of susceptibility

Return type:

tuple of float

pulsesuite.PSTD3D.coulomb.GetEps1Dqw(alphae, alphah, Delta0, epsr, me, mh, n1D, q, w)

Calculate the 1D quantum wire dielectric function epsilon(q, w).

Parameters:
  • alphae (float) – Level separation parameters (1/m)

  • alphah (float) – Level separation parameters (1/m)

  • Delta0 (float) – Thickness of quantum wire (m)

  • epsr (float) – Background dielectric constant

  • me (float) – Effective masses (kg)

  • mh (float) – Effective masses (kg)

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

  • q (float) – Momentum (1/m)

  • w (float) – Frequency (rad/s)

Returns:

(epr, epi) — real and imaginary parts of dielectric function

Return type:

tuple of float

class pulsesuite.PSTD3D.coulomb.CoulombModule(y, ky, L, Delta0, me, mh, Ee, Eh, ge, gh, alphae, alphah, er, Qy, kkp, screened, LorentzDelta=False)

Coulomb interaction module for quantum wire simulations.

Encapsulates all pre-computed arrays required for Coulomb interaction calculations in the Semiconductor Bloch Equations. Mirrors the Fortran module coulomb where private allocatable arrays hold persistent state.

Parameters:
  • y (ndarray) – Length coordinates of quantum wire (m)

  • ky (ndarray) – Momentum coordinates (1/m)

  • L (float) – Length of quantum wire (m)

  • Delta0 (float) – Thickness of quantum wire (m)

  • me (float) – Effective electron/hole masses (kg)

  • mh (float) – Effective electron/hole masses (kg)

  • Ee (ndarray) – Electron/hole energies (J)

  • Eh (ndarray) – Electron/hole energies (J)

  • ge (float) – Inverse electron/hole lifetimes (Hz)

  • gh (float) – Inverse electron/hole lifetimes (Hz)

  • alphae (float) – Level separation parameters (1/m)

  • alphah (float) – Level separation parameters (1/m)

  • er (float) – Background dielectric constant

  • Qy (ndarray) – Momentum difference array (1/m)

  • kkp (ndarray) – Index mapping array (int)

  • screened (bool) – Whether to use screened interactions

  • LorentzDelta (bool) – If True use Lorentzian broadening, else Gaussian delta.

UnDel, k3, qe, qh, Ceh, Cee, Chh, Veh0, Vee0, Vhh0, Chi1De, Chi1Dh

Pre-computed arrays (see builder functions for details).

LorentzDelta

Current broadening mode flag.

Type:

bool

LorentzDelta = False
UnDel
k3
SetLorentzDelta(boolean)

Set the LorentzDelta flag.

Eps1D(n1D, Nk=None)

Calculate the 1D dielectric function matrix.

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

  • Nk (int, optional) – Momentum grid size (ignored — derived from stored arrays).

Returns:

2D dielectric function matrix.

Return type:

ndarray

CalcScreenedArrays(screened, L, ne, nh, VC, E1D)

Calculate (optionally screened) Coulomb interaction arrays.

Fills VC and E1D in-place.

Parameters:
  • screened (bool) – Apply screening?

  • L (float) – Quantum wire length (m)

  • ne (ndarray) – Carrier populations

  • nh (ndarray) – Carrier populations

  • VC (ndarray, shape (N, N, 3)) – Output interaction matrices (modified in-place)

  • E1D (ndarray, shape (N, N)) – Output dielectric function (modified in-place)

CalcMVeh(p, VC, MVeh)

Calculate the many-body electron-hole interaction term MVeh.

Modifies MVeh in-place.

undell(k, q)

Access UnDel(k, q) (1-based indices).

BGRenorm(C, D, VC, BGR)

Calculate band gap renormalization.

Modifies BGR in-place.

EeRenorm(ne, VC, BGR)

Calculate electron energy renormalization.

Modifies BGR in-place.

EhRenorm(nh, VC, BGR)

Calculate hole energy renormalization.

Modifies BGR in-place.

MBCE2(ne0, nh0, ky, Ee, Eh, VC, geh, ge, Win, Wout)

Many-body Coulomb in/out rates for electrons (version 2).

Modifies Win and Wout in-place.

MBCE(ne0, nh0, ky, Ee, Eh, VC, geh, ge, Win, Wout)

Many-body Coulomb in/out rates for electrons.

Modifies Win and Wout in-place.

MBCH(ne0, nh0, ky, Ee, Eh, VC, geh, gh, Win, Wout)

Many-body Coulomb in/out rates for holes.

Modifies Win and Wout in-place.

pulsesuite.PSTD3D.coulomb.SetLorentzDelta(boolean)

Set the LorentzDelta flag (module-level wrapper).

pulsesuite.PSTD3D.coulomb.InitializeCoulomb(y, ky, L, Delta0, me, mh, Ee, Eh, ge, gh, alphae, alphah, er, Qy, kkp, screened)

Create / replace the module-level CoulombModule singleton.

pulsesuite.PSTD3D.coulomb.CalcScreenedArrays(screened, L, ne, nh, VC, E1D)
pulsesuite.PSTD3D.coulomb.Eps1D(n1D, Nk)
pulsesuite.PSTD3D.coulomb.CalcMVeh(p, VC, MVeh, k3=None, UnDel=None)
pulsesuite.PSTD3D.coulomb.undell(k, q)
pulsesuite.PSTD3D.coulomb.BGRenorm(C, D, VC, BGR, UnDel=None)
pulsesuite.PSTD3D.coulomb.EeRenorm(ne, VC, BGR, UnDel=None)
pulsesuite.PSTD3D.coulomb.EhRenorm(nh, VC, BGR, UnDel=None)
pulsesuite.PSTD3D.coulomb.MBCE2(ne0, nh0, ky, Ee, Eh, VC, geh, ge, Win, Wout, k3=None, Ceh=None, Cee=None)
pulsesuite.PSTD3D.coulomb.MBCE(ne0, nh0, ky, Ee, Eh, VC, geh, ge, Win, Wout, k3=None, Ceh=None, Cee=None)
pulsesuite.PSTD3D.coulomb.MBCH(ne0, nh0, ky, Ee, Eh, VC, geh, gh, Win, Wout, k3=None, Ceh=None, Chh=None)
pulsesuite.PSTD3D.coulomb.__getattr__(name)