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¶
Classes¶
Coulomb interaction module for quantum wire simulations. |
Functions¶
|
Calculate the interaction integral for Coulomb potential. |
|
Calculate electron-hole interaction integral. |
|
Gaussian delta function approximation. |
|
Construct the k3 indexing array for momentum conservation. |
|
Construct the qe and qh momentum difference arrays. |
|
Construct the UnDel (1 - delta) array. |
|
Calculate the many-body interaction arrays Ceh, Cee, Chh. |
|
Construct the unscreened Coulomb collision arrays Veh0, Vee0, Vhh0. |
|
Calculate the 1D susceptibility arrays Chi1De and Chi1Dh. |
|
Calculate the 1D quantum wire susceptibility chi(q, w). |
|
Calculate the 1D quantum wire dielectric function epsilon(q, w). |
|
Set the LorentzDelta flag (module-level wrapper). |
|
Create / replace the module-level CoulombModule singleton. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
- Returns:
Interaction integral value (dimensionless)
- Return type:
- 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:
- pulsesuite.PSTD3D.coulomb.GaussDelta(a, b)¶
Gaussian delta function approximation.
- 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.
- 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:
- 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:
- 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 coulombwhere 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 = False¶
- UnDel¶
- k3¶
- SetLorentzDelta(boolean)¶
Set the LorentzDelta flag.
- Eps1D(n1D, Nk=None)¶
Calculate the 1D dielectric function matrix.
- CalcScreenedArrays(screened, L, ne, nh, VC, E1D)¶
Calculate (optionally screened) Coulomb interaction arrays.
Fills VC and E1D in-place.
- Parameters:
- 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)¶