# 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
# Irradiation
irradiation{
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`

- decadic_gain

- value

`yes`

or`no`

- default

`no`

- absorption

- value

`yes`

or`no`

- default

`yes`

- decadic_absorption

- 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.

- energy_broadening_gaussian

- value
nonnegative double (>= 0.000001 if not zero)

- default
0

- energy_broadening_lorentzian

- 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\).

## Irradiation¶

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 Optical groups in database{} 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.

**irradiation{}**

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 Optical groups in database{}.

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