pulsesuite.PSTD3D.dcfield

DC field carrier transport calculations for quantum wire simulations.

This module calculates the dc field carrier transport contributions to the Semiconductor Bloch equations in support of propagation simulations for a quantum wire.

Converted from dcfield.f90 (lines 30-253).

Structure

  1. Pure functions (no module state) – module-level

  2. JIT-compiled helpers – module-level (Numba requirement)

  3. DCFieldModule class – mutable state + methods

  4. Backward-compatibility layer – singleton + wrapper functions

Attributes

pi

hbar

ii

Classes

DCFieldModule

DC field carrier transport module for quantum wire simulations.

Functions

GetKArray(Nk, L)

Generate k-space array for Fourier transforms.

Lrtz(a, b)

Lorentzian function.

theta(x)

Heaviside step function (theta function).

CalcI0n(ne, me, ky)

Calculate electron current.

CalcVD(ky, m, n)

Calculate drift velocity from distribution.

CalcPD(ky, m, n)

Calculate momentum from distribution.

CalcAvgCoeff(ky, dk, k1, k2, i1, i2, x1, x2, x3, x4)

Calculate average coefficients for interpolation.

DC_Step_Scale(ne, nh, ky, Edc, dt)

DC step using scaling method (legacy code).

DC_Step_FD(ne, nh, nemid, nhmid, ky, Edc, dt, me, mh)

DC step using finite difference method (legacy code).

EkReNorm(n, En, V)

Renormalize energy with many-body corrections.

DriftVt(n, Ec, dkk)

Calculate drift velocity.

ThetaEM(Ephn, m, g, ky, n, Cq2, v, N0, q, k)

Calculate emission matrix element.

ThetaABS(Ephn, m, g, ky, n, Cq2, v, N0, q, k)

Calculate absorption matrix element.

FDrift2(Ephn, m, g, ky, n, Cq2, v, N0, x)

Calculate drift force from phonon interactions.

FDrift(Ephn, m, q, dndk, Cq2, v, N0, x)

Calculate drift force (alternative implementation).

dndEk(Ephn, m, q, dndq)

Calculate derivative of occupation with respect to energy.

ThetaEMABS(Ephn, m, q, dndk, Cq2, v)

Calculate emission-absorption matrix element.

InitializeDC(ky, me, mh)

Initialize the DC field module (backward-compatible wrapper).

CalcDCE2(DCTrans, ky, Cq2, Edc, me, ge, Ephn, N0, ne, ...)

Backward-compatible wrapper for DCFieldModule.CalcDCE2().

CalcDCH2(DCTrans, ky, Cq2, Edc, mh, gh, Ephn, N0, nh, ...)

Backward-compatible wrapper for DCFieldModule.CalcDCH2().

CalcDCE(DCTrans, ky, Cq2, Edc, me, ge, Ephn, N0, ne, ...)

Backward-compatible wrapper for DCFieldModule.CalcDCE().

CalcDCH(DCTrans, ky, Cq2, Edc, mh, gh, Ephn, N0, nh, ...)

Backward-compatible wrapper for DCFieldModule.CalcDCH().

CalcI0(ne, nh, Ee, Eh, VC, dk, ky, I0)

Backward-compatible wrapper for DCFieldModule.CalcI0().

GetEDrift()

Backward-compatible wrapper for DCFieldModule.GetEDrift().

GetHDrift()

Backward-compatible wrapper for DCFieldModule.GetHDrift().

GetVEDrift()

Backward-compatible wrapper for DCFieldModule.GetVEDrift().

GetVHDrift()

Backward-compatible wrapper for DCFieldModule.GetVHDrift().

ShiftN1D(ne, dk)

Backward-compatible wrapper for DCFieldModule.ShiftN1D().

ShiftN2D(C, dk)

Backward-compatible wrapper for DCFieldModule.ShiftN2D().

Transport(C, Edc, Eac, dt, DCTrans, k1nek2)

Backward-compatible wrapper for DCFieldModule.Transport().

__getattr__(name)

Module-level __getattr__ for backward-compat attribute reads.

Module Contents

pulsesuite.PSTD3D.dcfield.pi
pulsesuite.PSTD3D.dcfield.hbar
pulsesuite.PSTD3D.dcfield.ii = 1j
pulsesuite.PSTD3D.dcfield.GetKArray(Nk, L)

Generate k-space array for Fourier transforms.

Parameters:
  • Nk (int) – Number of k-space points

  • L (float) – Length of the spatial domain (m)

Returns:

Array of k values (1/m), 1D array of length Nk

Return type:

ndarray

pulsesuite.PSTD3D.dcfield.Lrtz(a, b)

Lorentzian function.

Computes the Lorentzian line shape function: (b/pi) / (a^2 + b^2)

Parameters:
  • a (float or ndarray) – Frequency offset or energy difference

  • b (float or ndarray) – Half-width at half-maximum (HWHM)

Returns:

Lorentzian function value

Return type:

float or ndarray

pulsesuite.PSTD3D.dcfield.theta(x)

Heaviside step function (theta function).

Computes the step function: (abs(x) + x) / 2 / (abs(x) + small) Returns 1 for x > 0, 0 for x <= 0.

Parameters:

x (float or ndarray) – Input value

Returns:

Step function value (0 or 1, 0 at x=0)

Return type:

float or ndarray

pulsesuite.PSTD3D.dcfield.CalcI0n(ne, me, ky)

Calculate electron current.

Computes the electron current from the electron distribution and momentum.

Parameters:
  • ne (ndarray) – Electron occupation numbers (complex), 1D array

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

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

Returns:

Electron current (A)

Return type:

float

pulsesuite.PSTD3D.dcfield.CalcVD(ky, m, n)

Calculate drift velocity from distribution.

Computes the average drift velocity from the carrier distribution and momentum: v = sum(real(n) * hbar * ky / m) / sum(real(n) + small)

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

  • m (float) – Carrier mass (kg)

  • n (ndarray) – Carrier occupation numbers (complex), 1D array

Returns:

Drift velocity (m/s)

Return type:

float

pulsesuite.PSTD3D.dcfield.CalcPD(ky, m, n)

Calculate momentum from distribution.

Computes the average momentum from the carrier distribution: p = sum(abs(n) * hbar * ky) / sum(abs(n) + small)

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

  • m (float) – Carrier mass (kg) (unused, kept for interface compatibility)

  • n (ndarray) – Carrier occupation numbers (complex), 1D array

Returns:

Average momentum (kg*m/s)

Return type:

float

pulsesuite.PSTD3D.dcfield.CalcAvgCoeff(ky, dk, k1, k2, i1, i2, x1, x2, x3, x4)

Calculate average coefficients for interpolation.

Computes interpolation coefficients for bilinear interpolation in k-space. The function extends the ky array with boundary points and calculates coefficients based on the positions k1, k2 and indices i1, i2.

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

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

  • k1 (float) – First momentum value for interpolation

  • k2 (float) – Second momentum value for interpolation

  • i1 (int) – First index (1-based, will be converted to 0-based)

  • i2 (int) – Second index (1-based, will be converted to 0-based)

  • x1 (float) – Output coefficient 1

  • x2 (float) – Output coefficient 2

  • x3 (float) – Output coefficient 3

  • x4 (float) – Output coefficient 4

Returns:

Tuple containing (x1, x2, x3, x4) coefficients

Return type:

tuple

pulsesuite.PSTD3D.dcfield.DC_Step_Scale(ne, nh, ky, Edc, dt)

DC step using scaling method (legacy code).

Performs a DC field step by scaling the distribution functions. Uses rescale_1D to interpolate the distributions to shifted momentum grids.

Parameters:
  • ne (ndarray) – Electron occupation numbers (complex), modified in-place, 1D array

  • nh (ndarray) – Hole occupation numbers (complex), modified in-place, 1D array

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

  • Edc (float) – DC electric field (V/m)

  • dt (float) – Time step (s)

Returns:

ne and nh arrays are modified in-place.

Return type:

None

pulsesuite.PSTD3D.dcfield.DC_Step_FD(ne, nh, nemid, nhmid, ky, Edc, dt, me, mh)

DC step using finite difference method (legacy code).

Performs a DC field step using finite difference derivatives. Updates the electron and hole distributions based on the DC field and momentum-dependent terms.

Parameters:
  • ne (ndarray) – Electron occupation numbers (complex), modified in-place, 1D array

  • nh (ndarray) – Hole occupation numbers (complex), modified in-place, 1D array

  • nemid (ndarray) – Midpoint electron occupation numbers (complex), 1D array

  • nhmid (ndarray) – Midpoint hole occupation numbers (complex), 1D array

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

  • Edc (float) – DC electric field (V/m)

  • dt (float) – Time step (s)

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

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

Returns:

ne and nh arrays are modified in-place.

Return type:

None

pulsesuite.PSTD3D.dcfield.EkReNorm(n, En, V)

Renormalize energy with many-body corrections.

Computes the renormalized energy including Hartree-Fock corrections: Ec(k) = En(k) + sum(n(:) * (V(k,k) - V(k,:))) / 2

Parameters:
  • n (ndarray) – Carrier occupation numbers, 1D array

  • En (ndarray) – Single-particle energies (J), 1D array

  • V (ndarray) – Interaction matrix (J), 2D array V[k1, k2]

Returns:

Renormalized energies (J), 1D array

Return type:

ndarray

pulsesuite.PSTD3D.dcfield.DriftVt(n, Ec, dkk)

Calculate drift velocity.

Computes the average drift velocity from the energy gradient and carrier distribution: v = sum(dEcdk * n) / sum(n) / hbar

Parameters:
  • n (ndarray) – Carrier occupation numbers, 1D array

  • Ec (ndarray) – Renormalized energies (J), 1D array

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

Returns:

Drift velocity (m/s)

Return type:

float

pulsesuite.PSTD3D.dcfield.ThetaEM(Ephn, m, g, ky, n, Cq2, v, N0, q, k)

Calculate emission matrix element.

Computes the emission rate matrix element for phonon-assisted transitions.

Parameters:
  • Ephn (float) – Average phonon energy (J)

  • m (float) – Carrier mass (kg)

  • g (float) – Inverse lifetime (Hz)

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

  • n (ndarray) – Carrier occupation numbers, 1D array

  • Cq2 (ndarray) – Coupling constant squared, 1D array

  • v (float) – Drift velocity (m/s)

  • N0 (float) – Phonon occupation number

  • q (int) – Phonon momentum index (1-based)

  • k (int) – Carrier momentum index (1-based)

Returns:

Emission matrix element

Return type:

float

pulsesuite.PSTD3D.dcfield.ThetaABS(Ephn, m, g, ky, n, Cq2, v, N0, q, k)

Calculate absorption matrix element.

Computes the absorption rate matrix element for phonon-assisted transitions.

Parameters:
  • Ephn (float) – Average phonon energy (J)

  • m (float) – Carrier mass (kg)

  • g (float) – Inverse lifetime (Hz)

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

  • n (ndarray) – Carrier occupation numbers, 1D array

  • Cq2 (ndarray) – Coupling constant squared, 1D array

  • v (float) – Drift velocity (m/s)

  • N0 (float) – Phonon occupation number

  • q (int) – Phonon momentum index (1-based)

  • k (int) – Carrier momentum index (1-based)

Returns:

Absorption matrix element

Return type:

float

pulsesuite.PSTD3D.dcfield.FDrift2(Ephn, m, g, ky, n, Cq2, v, N0, x)

Calculate drift force from phonon interactions.

Computes the drift force due to phonon emission and absorption processes.

Parameters:
  • Ephn (float) – Average phonon energy (J)

  • m (float) – Carrier mass (kg)

  • g (float) – Inverse lifetime (Hz)

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

  • n (ndarray) – Carrier occupation numbers, 1D array

  • Cq2 (ndarray) – Coupling constant squared, 1D array

  • v (float) – Drift velocity (m/s)

  • N0 (float) – Phonon occupation number

  • x (ndarray) – k-dependent delta-function coefficients, 1D array (unused)

Returns:

Drift force (N), 1D array

Return type:

ndarray

pulsesuite.PSTD3D.dcfield.FDrift(Ephn, m, q, dndk, Cq2, v, N0, x)

Calculate drift force (alternative implementation).

Computes the drift force using a different approach with dndk derivative.

Parameters:
  • Ephn (float) – Average phonon energy (J)

  • m (float) – Carrier mass (kg)

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

  • dndk (ndarray) – Derivative of carrier occupation with respect to momentum, 1D array

  • Cq2 (ndarray) – Coupling constant squared, 1D array

  • v (float) – Drift velocity (m/s)

  • N0 (float) – Phonon occupation number

  • x (ndarray) – k-dependent delta-function coefficients, 1D array

Returns:

Drift force (N)

Return type:

float

pulsesuite.PSTD3D.dcfield.dndEk(Ephn, m, q, dndq)

Calculate derivative of occupation with respect to energy.

Parameters:
  • Ephn (float) – Average phonon energy (J)

  • m (float) – Carrier mass (kg)

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

  • dndq (ndarray) – Derivative of occupation with respect to momentum, 1D array

Returns:

Derivative of occupation with respect to energy, 1D array

Return type:

ndarray

pulsesuite.PSTD3D.dcfield.ThetaEMABS(Ephn, m, q, dndk, Cq2, v)

Calculate emission-absorption matrix element.

Parameters:
  • Ephn (float) – Average phonon energy (J)

  • m (float) – Carrier mass (kg)

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

  • dndk (ndarray) – Derivative of occupation with respect to momentum, 1D array

  • Cq2 (ndarray) – Coupling constant squared, 1D array

  • v (float) – Drift velocity (m/s)

Returns:

Emission-absorption matrix element, 1D array

Return type:

ndarray

class pulsesuite.PSTD3D.dcfield.DCFieldModule(ky, me, mh, WithPhns=True, datadir='dataQW')

DC field carrier transport module for quantum wire simulations.

Encapsulates the mutable state and stateful methods that were previously held as module-level globals. Mirrors the Fortran module dcfield structure: private allocatable arrays + public subroutines.

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

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

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

  • WithPhns (bool, optional) – Whether to couple damping rate with phonons (default True)

  • datadir (str or None, optional) – Directory for output files. Pass None to skip file creation (useful for testing). Default 'dataQW'.

dkk
ERate = 0.0
HRate = 0.0
VEDrift = 0.0
VHDrift = 0.0
WithPhns = True
Y
xe
xh
qinv
kmin
kmax
close()

Close output file handles.

__del__()
CalcDCE2(DCTrans, ky, Cq2, Edc, me, ge, Ephn, N0, ne, Ee, Vee, n, j, DC)

Calculate DC field contribution for electrons (version 2).

Computes the DC field transport contribution to the electron distribution evolution using a finite difference derivative.

Parameters:
  • DCTrans (bool) – Whether to include DC transport terms

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

  • Cq2 (ndarray) – Coupling constant squared, 1D array

  • Edc (float) – DC electric field (V/m)

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

  • ge (float) – Inverse electron lifetime (Hz)

  • Ephn (float) – Average phonon energy (J)

  • N0 (float) – Phonon occupation number

  • ne (ndarray) – Electron occupation numbers (complex), 1D array

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

  • Vee (ndarray) – Electron-electron interaction matrix (J), 2D array

  • n (int) – Time step index

  • j (int) – Iteration index

  • DC (ndarray) – Output DC field contribution (modified in-place), 1D array

Returns:

DC array is modified in-place.

Return type:

None

CalcDCH2(DCTrans, ky, Cq2, Edc, mh, gh, Ephn, N0, nh, Eh, Vhh, n, j, DC)

Calculate DC field contribution for holes (version 2).

Computes the DC field transport contribution to the hole distribution evolution using a finite difference derivative.

Parameters:
  • DCTrans (bool) – Whether to include DC transport terms

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

  • Cq2 (ndarray) – Coupling constant squared, 1D array

  • Edc (float) – DC electric field (V/m)

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

  • gh (float) – Inverse hole lifetime (Hz)

  • Ephn (float) – Average phonon energy (J)

  • N0 (float) – Phonon occupation number

  • nh (ndarray) – Hole occupation numbers (complex), 1D array

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

  • Vhh (ndarray) – Hole-hole interaction matrix (J), 2D array

  • n (int) – Time step index

  • j (int) – Iteration index

  • DC (ndarray) – Output DC field contribution (modified in-place), 1D array

Returns:

DC array is modified in-place.

Return type:

None

CalcDCE(DCTrans, ky, Cq2, Edc, me, ge, Ephn, N0, ne, Ee, Vee, DC)

Calculate DC field contribution for electrons (original version).

Uses FFT-based derivative.

Parameters:
  • DCTrans (bool) – Whether to include DC transport terms

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

  • Cq2 (ndarray) – Coupling constant squared, 1D array

  • Edc (float) – DC electric field (V/m)

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

  • ge (float) – Inverse electron lifetime (Hz)

  • Ephn (float) – Average phonon energy (J)

  • N0 (float) – Phonon occupation number

  • ne (ndarray) – Electron occupation numbers (complex), 1D array

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

  • Vee (ndarray) – Electron-electron interaction matrix (J), 2D array

  • DC (ndarray) – Output DC field contribution (modified in-place), 1D array

Returns:

DC array is modified in-place.

Return type:

None

CalcDCH(DCTrans, ky, Cq2, Edc, mh, gh, Ephn, N0, nh, Eh, Vhh, DC)

Calculate DC field contribution for holes (original version).

Uses FFT-based derivative.

Parameters:
  • DCTrans (bool) – Whether to include DC transport terms

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

  • Cq2 (ndarray) – Coupling constant squared, 1D array

  • Edc (float) – DC electric field (V/m)

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

  • gh (float) – Inverse hole lifetime (Hz)

  • Ephn (float) – Average phonon energy (J)

  • N0 (float) – Phonon occupation number

  • nh (ndarray) – Hole occupation numbers (complex), 1D array

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

  • Vhh (ndarray) – Hole-hole interaction matrix (J), 2D array

  • DC (ndarray) – Output DC field contribution (modified in-place), 1D array

Returns:

DC array is modified in-place.

Return type:

None

CalcI0(ne, nh, Ee, Eh, VC, dk, ky, I0)

Calculate total current from electron and hole distributions.

Parameters:
  • ne (ndarray) – Electron occupation numbers (complex), 1D array

  • nh (ndarray) – Hole occupation numbers (complex), 1D array

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

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

  • VC (ndarray) – Interaction matrix (J), 3D array

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

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

  • I0 (float) – Input value (unused)

Returns:

Total current (A)

Return type:

float

ShiftN1D(ne, dk)

Shift 1D distribution in momentum space.

Shifts the distribution function in momentum space by dk using FFT.

Parameters:
  • ne (ndarray) – Carrier occupation numbers (complex), modified in-place, 1D array

  • dk (float) – Momentum shift (1/m)

Returns:

ne array is modified in-place.

Return type:

None

ShiftN2D(C, dk)

Shift 2D distribution in momentum space.

Parameters:
  • C (ndarray) – Distribution matrix (complex), modified in-place, 2D array

  • dk (float) – Momentum shift (1/m)

Returns:

C array is modified in-place.

Return type:

None

Transport(C, Edc, Eac, dt, DCTrans, k1nek2)

Transport step for distribution matrix.

Parameters:
  • C (ndarray) – Distribution matrix (complex), modified in-place, 2D array

  • Edc (float) – DC electric field (V/m)

  • Eac (float) – AC electric field (V/m)

  • dt (float) – Time step (s)

  • DCTrans (bool) – Whether to include DC transport terms

  • k1nek2 (bool) – If True, shift the full 2D matrix; if False, shift only diagonal

Returns:

C array is modified in-place.

Return type:

None

GetEDrift()

Return electron drift rate (Hz).

GetHDrift()

Return hole drift rate (Hz).

GetVEDrift()

Return electron drift velocity (m/s).

GetVHDrift()

Return hole drift velocity (m/s).

pulsesuite.PSTD3D.dcfield.InitializeDC(ky, me, mh)

Initialize the DC field module (backward-compatible wrapper).

Creates a new DCFieldModule singleton from ky, me, mh. Uses the module-level _WithPhns flag.

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

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

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

pulsesuite.PSTD3D.dcfield.CalcDCE2(DCTrans, ky, Cq2, Edc, me, ge, Ephn, N0, ne, Ee, Vee, n, j, DC)

Backward-compatible wrapper for DCFieldModule.CalcDCE2().

pulsesuite.PSTD3D.dcfield.CalcDCH2(DCTrans, ky, Cq2, Edc, mh, gh, Ephn, N0, nh, Eh, Vhh, n, j, DC)

Backward-compatible wrapper for DCFieldModule.CalcDCH2().

pulsesuite.PSTD3D.dcfield.CalcDCE(DCTrans, ky, Cq2, Edc, me, ge, Ephn, N0, ne, Ee, Vee, DC)

Backward-compatible wrapper for DCFieldModule.CalcDCE().

pulsesuite.PSTD3D.dcfield.CalcDCH(DCTrans, ky, Cq2, Edc, mh, gh, Ephn, N0, nh, Eh, Vhh, DC)

Backward-compatible wrapper for DCFieldModule.CalcDCH().

pulsesuite.PSTD3D.dcfield.CalcI0(ne, nh, Ee, Eh, VC, dk, ky, I0)

Backward-compatible wrapper for DCFieldModule.CalcI0().

pulsesuite.PSTD3D.dcfield.GetEDrift()

Backward-compatible wrapper for DCFieldModule.GetEDrift().

pulsesuite.PSTD3D.dcfield.GetHDrift()

Backward-compatible wrapper for DCFieldModule.GetHDrift().

pulsesuite.PSTD3D.dcfield.GetVEDrift()

Backward-compatible wrapper for DCFieldModule.GetVEDrift().

pulsesuite.PSTD3D.dcfield.GetVHDrift()

Backward-compatible wrapper for DCFieldModule.GetVHDrift().

pulsesuite.PSTD3D.dcfield.ShiftN1D(ne, dk)

Backward-compatible wrapper for DCFieldModule.ShiftN1D().

pulsesuite.PSTD3D.dcfield.ShiftN2D(C, dk)

Backward-compatible wrapper for DCFieldModule.ShiftN2D().

pulsesuite.PSTD3D.dcfield.Transport(C, Edc, Eac, dt, DCTrans, k1nek2)

Backward-compatible wrapper for DCFieldModule.Transport().

pulsesuite.PSTD3D.dcfield.__getattr__(name)

Module-level __getattr__ for backward-compat attribute reads.

Maps old dcfield._Y, dcfield._xe, etc. to the singleton’s attributes. Returns None when the singleton has not been created yet.