# classical{}¶

specifies which bands enter classical densities and dopant densities.

classical{
# conduction bands
Gamma{
output_bandedge{
averaged = yes
}
}
L{     output_bandedge{ ... } }
X{     output_bandedge{ ... } }     # or Delta{ output_bandedge{ ... } }

# valence bands
HH{    output_bandedge{ ... } }
LH{    output_bandedge{ ... } }
SO{    output_bandedge{ ... } }

#Further output definitions
output_bandedges{
profiles = "Gamma HH LH"
averaged =  yes
}

output_bandgap{
averaged =  yes
}

output_carrier_densities{}

output_ionized_dopant_densities{}

output_intrinsic_density{
boxes = yes
}

output_energy_resolved_densities{}

energy_distribution{
min = -5.0
max =  5.0
energy_resolution = 0.1
only_quantum_regions = yes
}

energy_resolved_density{
min = -5.0
max =  5.0
energy_resolution = 0.1
only_quantum_regions = yes
}

emission_spectrum{
output_spectra{
emission            = yes
gain                = yes
absorption          = yes
stimulated_emission = yes

spectra_over_energy     = yes
spectra_over_wavelength = yes
spectra_over_frequency  = yes
spectra_over_wavenumber = yes

photon_spectra = yes

power_spectra = yes
}
refractive_index      = 3.0
}

output_photon_density = yes
output_power_density  = yes

# Carrier statistics for classical densities
carrier_statistics = fermi_dirac

min_wavelength = 300.0
max_wavelength = 2000.0
min_energy = 0.5
max_energy = 5.0
energy_resolution = 0.01

illumination{
direction_x = 1

database_spectrum{
name = "Solar-ASTM-G173-global"
concentration = 300
}
}

reflectivity{
database_spectrum{
name = "Al0.80Ga0.20As"
}
}

absorption{
database_spectrum{
name = "GaAs"
}
}

output_spectra{
illumination = yes
reflectivity = yes
absorption   = yes

spectra_over_energy     = yes
spectra_over_wavelength = yes
spectra_over_frequency  = yes
spectra_over_wavenumber = yes
}

photo_generation{
output = yes
output_spectrum = yes
output_energy_resolved = yes
output_quantum_efficiency = yes
}

output_light_field = yes
}
}


Below are various variables and functions to be used inside classical{}.

## Conduction bands¶

Gamma{}

at Gamma point

output_bandedge{}

output band edge of this band in a single file [eV]

averaged
value

yes or no

default

yes

• yes : for each grid point the band edge will be averaged between neighboring material grid points. (averaged = yes is similar to ‘boxes = no’. Note that ‘boxes’ is related to output of material grid points while averaged is related to output of simulation grid points.)

• no : abrupt discontinuities at interfaces (in 1D two points, in 2D four points, in 3D eight points for each grid point)

Warning

2D and 3D simulations can produce a lot of output data (~order of GB). In order to avoid excessive consumption of your hard disk, it is strongly recommended to use averaged = yes for 2D and 3D simulations.

L{}

at X point; does not apply to wurtzite materials

output_bandedge{}

analogous usage as above

X{}

at X point; does not apply to wurtzite materials; for all materials other than Si, Ge, GaP

output_bandedge{}

analogous usage as above

or

Delta{}

at Delta point; for Si, Ge, GaP

output_bandedge{}

analogous usage as above

## Valence bands¶

HH{}

heavy hole

output_bandedge{}

analogous usage as above

LH{}

light hole

output_bandedge{}

analogous usage as above

SO{}

split-off hole (or crystal-field split-off hole in wurtzite)

output_bandedge{}

analogous usage as above

## Further output definitions¶

output_bandedges{}

output all (relevant) band edges and (relevant) Fermi levels in one file named ‘bandedges.’ [eV].

profiles

Enumerate relevant band edges for output. If profiles are not defined, all band edges are written out.

options

Gamma X Delta L HH LH SO electron_fermi_level hole_fermi_level

example

profiles = "Gamma HH LH"

averaged
value

yes or no

default

yes

• yes : for each grid point the band edges will be averaged between neighboring material grid points. (averaged = yes is similar to ‘boxes = no’. Note that ‘boxes’ is related to output of material grid points while averaged is related to output of simulation grid points.)

• no : abrupt discontinuities at interfaces (in 1D two points, in 2D four points, in 3D eight points for each grid point)

output_bandgap{}

output band gaps for Gamma, L, X (or Delta) bands with reference to the highest valence band edge. Additionally the difference between the lowest conduction band and the highest valence band edges is written out: MIN(Gamma,L,X (or Delta)) - MAX(hh,lh,so) [eV]

averaged
value

yes or no

default

yes

• yes : for each grid point the band gaps will be averaged between neighboring material grid points. (averaged = yes is similar to ‘boxes = no’. Note that ‘boxes’ is related to output of material grid points while averaged is related to output of simulation grid points.)

• no : abrupt discontinuities at interfaces (in 1D two points, in 2D four points, in 3D eight points for each grid point)

output_carrier_densities{}

output electron and hole densities [$$10^{18}/\mathrm{cm}^3$$]

The units for the output file total_charges.txt are

• electrons $$/\mathrm{cm}^2$$ (1D simulation)

• electrons $$/\mathrm{cm}$$ (2D simulation)

• electrons (3D simulation)

output_ionized_dopant_densities{}

output ionized dopant densities [$$10^{18}/\mathrm{cm}^3$$]

The ionized acceptor and donor densities are written to these files:

• density_acceptor_ionized.dat

• density_donor_ionized.dat

output_intrinsic_density{}

output intrinsic density [$$1/\mathrm{cm}^3$$]

boxes
value

= yes or no

(optional) For each grid point, in 1D two points are printed out to mimic abrupt discontinuities at interfaces (in 2D four points, in 3D eight points)

output_energy_resolved_densities{}

output energy-resolved densities $$n(x,E)$$, $$p(x,E)$$ in units of [$$\mathrm{cm}^{-3}\mathrm{eV}^{-1}$$] in 1D, [$$\mathrm{cm}^{-3}\mathrm{eV}^{-1}$$] in 2D, and [$$\mathrm{cm}^{-3}\mathrm{eV}^{-1}$$] in 3D.

energy_distribution{}

output integrated electron and hole density as a function of energy, $$n(E)$$, $$p(E)$$ in units of [$$\mathrm{cm}^{-2}\mathrm{eV}^{-1}$$] in 1D, [$$\mathrm{cm}^{-1}\mathrm{eV}^{-1}$$] in 2D, and [$$\mathrm{eV}^{-1}$$] in 3D.

min

minimum energy [eV] (required)

value

double

default

-10.0

max

maximum energy [eV] (required)

value

double

default

5.0

energy_resolution

energy spacing [eV] (optional)

value

double

default

0.1

only_quantum_regions
value

yes or no

default

no

consider only quantum regions (optional), can be used to suppress contributions from outside the quantum regions of interest. This works even if quantum mechanics is not enabled in run{}

Note

Note that energy_distribution{}, which directly calculates the space-integrated energy-resolved density, is logically independent from the two groups energy_resolved_density{} and emission_spectrum{}. Incidentally, it also runs much faster and needs much less memory for the same energy spacing.

energy_resolved_density{}

output electron and hole density as a function of energy and position, $$n(x,E)$$, $$p(x,E)$$ in units of [$$\mathrm{cm}^{-3}\mathrm{eV}^{-1}$$] in 1D, [$$\mathrm{cm}^{-3}\mathrm{eV}^{-1}$$] in 2D, and [$$\mathrm{cm}^{-3}\mathrm{eV}^{-1}$$] in 3D.

min

minimum energy [eV] (required)

value

double

default

-10.0

max

maximum energy [eV] (required)

value

double

default

5.0

energy_resolution

energy spacing [eV] (optional)

value

double

default

0.1

only_quantum_regions
value

yes or no

default

no

consider only quantum regions (optional), can be used to suppress contributions from outside the quantum regions of interest. This works even if quantum mechanics is not enabled in run{}

Note

• min, max always refer to a zero point at the (local) conduction band edge, and not to the photon energy.

• max should be set high enough above 0 to contain all occupied electron states and min should be set far enough below -bandgap to contain all occupied hole states.

• The respective values for energy_resolution should be set smaller than $$k_BT$$ if one wishes to fully resolve the structures of the integrated densities and/or of the emission spectra.

• However, while setting energy_resolution in energy_distribution{} as low as 0.001 eV has little influence on program execution time, using similarly small values for energy_resolution in energy_resolved_density{} will result in massive slowdowns (and in 3D also in massive memory use), since the computational effort for obtaining emission spectra grows quadratically with the number of energy bins.

emission_spectrum{}

output emission spectrum calculated from energy-resolved densities $$n(x,E)$$ and $$p(x,E)$$ computed by energy_resolved_density{}. Radiative recombination rate reads $$R_\mathrm{radiative}(x,E)=C(x)\int dE_h\int dE_e\ n(x,E_e) p(x,E_h) \delta(E_e-E_h-E)$$, where $$C(x)$$ [$$\mathrm{cm}^3/\mathrm{s}$$] is the (material-dependent) radiative recombination parameter. “spectra” and “density” in the following refer to the integrals of $$R_\mathrm{radiative}$$ over position and energy, respectively.

output_spectra{}

computed types of spectra:

emission
value

yes or no

default

yes

gain
value

yes or no

default

yes

value

yes or no

default

no

absorption
value

yes or no

default

yes

value

yes or no

default

no

stimulated_emission
value

yes or no

default

no

unit selection - the following apply to all of the above

spectra_over_energy
value

yes or no

default

yes

spectra_over_wavelength
value

yes or no

default

yes

spectra_over_frequency
value

yes or no

default

no

spectra_over_wavenumber
value

yes or no

default

no

unit selection - the following apply to all of the above

photon_spectra
value

yes or no

default

yes

unit selection - the following apply to all of the above

power_spectra
value

yes or no

default

no

refractive_index
value

double

default

The value for the substrate is used

averaged-out refractive index $$n_r$$ (optional, dimensionless). Refractive index used for calculating gain and absorption. The absorption/gain is multiplied by the factor $$1/n_r^2$$. The values for the optical dielectric constant from the database are not used yet at this point.

value

nonnegative double (>= 0.000001 if not zero)

default

0

value

nonnegative double (>= 0.000001 if not zero)

default

0

output_photon_density
value

yes or no

default

no

output emitted photon density in units of [$$\mathrm{cm}^{-3}\mathrm{s}^{-1}$$] (optional)

(emitted_photon_density.dat)

output_power_density
value

yes or no

default

no

output emitted power density in units of [$$\mathrm{W}/\mathrm{cm}^3$$] (optional)

(emitted_power_density.dat)

## Carrier statistics for classical densities¶

carrier_statistics
options

fermi_dirac maxwell_boltzmann

default

fermi_dirac

Optionally, one can use Maxwell-Boltzmann statistics for the classical densities (not recommended as this is only an approximation which is only applicable in certain cases).

In order to maintain consistency, also the (integrated) energy distribution (density_vs_energy) and the classical emission spectra and densities are computed using the same statistics. Use together with quantum regions is possible but not recommended, and convergence of the current-Poisson or quantum-current-Poisson equation may become worse (please readjust convergence parameters accordingly).

Note

• $$n=N_c\ \mathcal{F}_{1/2}\left(\frac{E_F-E_c}{k_BT}\right)$$ (electron density for fermi_dirac)

• $$p=N_c\ \mathcal{F}_{1/2}\left(\frac{E_v-E_F}{k_BT}\right)$$ (hole density for fermi_dirac)

• $$n=N_c\exp\left(\frac{E_F-E_c}{k_BT}\right)$$ (electron density for maxwell_boltzmann)

• $$p=N_c\exp\left(\frac{E_v-E_F}{k_BT}\right)$$ (hole density for maxwell_boltzmann)

• where $$\mathcal{F}_n(E)$$ is a Fermi-Dirac integral of the order $$n$$.

Output of comparison spectra, compute light field in the device, and photo-generation.

Note that spectral data can be alternatively defined in the database (see also database_nnp_optional for list of predefined illumination spectra), in the database section of the input file, or imported from external files.

Lorentzian, Gaussian and Planck illumination spectra are fully additive, i.e. several of each can be added as needed in order to synthesize more complex illumination spectra.

Definition of energy grid. Specify either wavelength or photon energy.

minimum and maximum photon wavelength

min_wavelength
value

real value >= 10 and <= 1e6

units

[nm]

max_wavelength
value

real value >= 10 and <= 1e6

units

[nm]

minimum and maximum photon energy

min_energy
value

real value >= 1e-6 and <= 100

units

[eV]

max_energy
value

real value >= 1e-6 and <= 100

units

[eV]

resolution of energy grid

energy_resolution
value

real value >= 1e-6

units

[eV]

irradiation{
min_energy = 0.5
max_energy = 5.0
# min_wavelength = 300.0
# max_wavelength = 2000.0
energy_resolution = 0.01

illumination{


illumination{}

direction_x
value

integer +1/-1

units

(dimensionless)

ascending/descending illumination in x direction

direction_y
value

integer +1/-1

units

(dimensionless)

ascending/descending illumination in y direction

direction_z
value

integer +1/-1

units

(dimensionless)

ascending/descending illumination in z direction

Database spectrum

Several spectra (solar spectra, CIE illuminants, absorption, reflectivity, …) can be found in the database file database_nnp_optional.

database_spectrum{}

database unit $$\mathrm{W/m}^2$$, relative intensities (e.g. CIE illuminants) are normalized to 1.0 $$\mathrm{W/m}^2$$

name
value

string

concentration
value

real value >= 0.0

default

1.0

illumination{
direction_x = 1

database_spectrum{
name = "Solar-ASTM-G173-global"
# name = "CIE-D75"
concentration = 300 # e.g. 300 suns
}

# or

import_spectrum{
import_from = "filename"
cutoff = yes  # yes/no: If yes, set values outside definition interval to zero.
# (default=?)
absolute_intensities = yes  # yes/no (default: yes)
# If no, spectrum does not contain absolute values,
# normalize intensity to 1 [W/cm^2 nm^-1] before concentration
concentration = 300 # e.g. 300 suns
}

}


Planck spectrum

planck_spectrum{
irradiance = 10000.0  # in [W/m^2], for complete(!) Planck spectrum; real value >= 0.0
temperature = 5000.0  # real value >= 1e-6
}


Lorentzian spectrum

lorentzian_spectrum{
irradiance = 10000.0  # in [W/m^2], for complete(!) Lorentzian spectrum; real value >= 0.0

# Specify either wavelength and width, or ...
wavelength = 500.0   # real value >= 10.0 in |unit:nm|
width = 100.0        # real value >= 1e-3 in |unit:nm|

# ... specify energy and gamma.
energy = 2.5         # real value >= 1e-6 in |unit:eV|
gamma = 1.0          # real value >= 1e-6 in |unit:eV|
}


Gaussian spectrum

gaussian_spectrum{
irradiance = 1000.0  # in [W/m^2], for complete(!) Gaussian spectrum; real value >= 0.0

# Specify either wavelength and width, or ...
wavelength = 500.0   # real value >= 10.0 in |unit:nm|
width = 100.0        # real value >= 1e-3 in |unit:nm|

# ... specify energy and gamma.
energy = 2.5         # real value >= 1e-6 in |unit:eV|
gamma = 1.0          # real value >= 1e-6 in |unit:eV|
}


Constant spectrum

constant_spectrum{
irradiance = 10000.0  # in [W/m^2], integrated as min_energy...max_energy
}


reflectivity{}

reflectivity{
database_spectrum{
name = "Al0.80Ga0.20As"
}

# or

import_spectrum{
import_from = "filename"
cutoff = yes  # yes/no: If yes, set values outside definition interval to zero.
# (default=?)
}

# or

constant_spectrum{
reflectivity = 0.5  # real value >= 0.0 and <= 1.0 (dimensionless)
}

}


absorption{}

absorption{
database_spectrum{
name = "GaAs"
}

# or

import_spectrum{
import_from = "filename"
cutoff = yes  # yes/no: If yes, set values outside definition interval to zero.
# (default=?)
decadic_absorption_unit = no # yes or no, default: no
}

# or

constant_spectrum{
absorption = 0.5  # real value >= 0.0 [1/cm]
# or
decadic_absorption = 0.0 # real value >= 0.0
}

}


output_spectra{}

output_spectra{

illumination = yes   # yes/no     outputs spectrum binned to energy grid
reflectivity = yes   # yes/no     outputs spectrum binned to energy grid
absorption   = yes   # yes/no     outputs spectrum binned to energy grid

spectra_over_energy     = yes   # yes/no (default: yes)
spectra_over_wavelength = yes   # yes/no (default: yes)
spectra_over_frequency  = yes   # yes/no (default: no)
spectra_over_wavenumber = yes   # yes/no (default: no)
}


photo_generation{}

Output generated carriers $$G(x)$$ and $$G(x,E)$$ due to photon absorption.

photo_generation{
output = yes                   # yes/no (default: yes)
output_spectrum = yes          # yes/no (default: no)
output_energy_resolved = yes   # yes/no (default: no)
output_quantum_efficiency = yes   # yes/no (default:yes)
}


The light field is calculated as a function of position and energy.

output_light_field
options

yes or no

default

no

output_light_field = yes