# $optical-absorption¶

This keyword allows to calculate optical absorption and solar cells.

$optical-absorption optional destination-directory character required calculate-optics character optional kind-of-absorption character optional read-in-k-points character optional num-quantum-cluster integer optional e-min-state double optional e-max-state double optional e-min-photon double optional e-max-photon double optional num-energy-steps integer optional smoothing-of-curve character optional smoothing-damping-parameter double optional E-P double optional polarization-vector-1 double_array optional polarization-vector-2 double_array optional magnitude-relation-1-2 double optional phase double optional fermi_in_el double optional fermi_in_hl double optional device_thickness_in double optional k-space-symmetry character optional !------------------------------------------------------------- ! The following are only relevant for solar cell simulations. !------------------------------------------------------------- incident-light-along-direction character optional import-absorption-spectrum character optional file-absorption-spectrum character optional import-reflectivity-spectrum character optional file-reflectivity-spectrum character optional import-transmission-spectrum character optional file-transmission-spectrum character optional import-solar-spectrum character optional file-solar-spectrum character optional number-of-suns double optional calculate-black-body-spectrum character optional $end_optical-absorption optional

A tutorial is available that describes this keyword: Optical absorption of an InGaAs quantum well

Detailed description about the Physics: Absorption, Matrix elements, Inter-band transitions, Intra-band transitions (pdf).

- destination-directory

- type
character

- presence
required

- example

`optics/`

Directory for output of data files.

## Optical absorption¶

- calculate-optics

- type
character

- options

`yes`

or`no`

- default

`no`

Choose `yes`

if you want to calculate the optical absorption (Step 3).

This flag can be set to `no`

for Step 1 and Step 2, and `yes`

for Step 3 (*see below*).

- num-quantum-cluster

- type
integer >= 1

- default
1

Number of quantum cluster for which absorption is calculated.
If this specifier is not present, the quantum cluster `1`

is taken.

- kind-of-absorption

- type
character

- options

`interband-only`

`intra-vb-only`

`intra-cb-only`

`intra-sg-only`

`inter-sg-only`

`interband-only`

Considers only interband transitions between holes and electrons.

heavy hole

`<==>`

Gamma bandlight hole

`<==>`

Gamma bandsplit-off hole

`<==>`

Gamma band

`intra-vb-only`

Considers only intraband transitions within the valence bands.

heavy hole

`<==>`

light holeheavy hole

`<==>`

split-off holelight hole

`<==>`

split-off holeheavy hole

`<==>`

heavy holelight hole

`<==>`

light holesplit-off hole

`<==>`

split-off hole

`intra-cb-only`

Considers only intraband transitions within the conduction band (Gamma band).

Gamma band

`<==>`

Gamma band

`intra-sg-only`

Considers only intraband transitions within the same band (single-band for Gamma, L, X, heavy hole, light hole, split-off hole band)

Gamma band

`<==>`

Gamma bandL band

`<==>`

L bandX band

`<==>`

X bandheavy hole

`<==>`

heavy holelight hole

`<==>`

light holesplit-off hole

`<==>`

split-off hole

This is a simple algorithm taking only account the energy levels and wave functions at \(k_\parallel=0\) (for single-band case). It only works for 1D and 2D simulations so far. It can also be used for the \(\mathbf{k} \cdot \mathbf{p}\) wavefunctions as shown in this tutorial: Intersubband transitions in InGaAs/AlInAs multiple quantum well systems. In this case, the correct \(\mathbf{k} \cdot \mathbf{p}\) density and k-dependent matrix elements and nonparabolicity and anisotrpicity of the energy dispersion \(E(k_x,k_y)\) is taken into account.

In order for this flag to work, the following must be present in the input file ($output-1-band-schroedinger):

$output-1-band-schroedinger ... intraband-matrixelements = yes ! or any other value apart from 'no'

The equation used is described here: Intraband absorption in the single-band case

`inter-sg-only`

Similar as

`intra-sg-only`

but for interband transitions. It currently does not work for \(\mathbf{k} \cdot \mathbf{p}\) wavefunctions.

Specifications for absorption energy range: lower/upper boundary for photon energy interval

- e-min-photon

- type
double

- unit

`[eV]`

- example
1.0

lower boundary for photon energy

- e-max-photon

- type
double

- unit

`[eV]`

- example
2.0

upper boundary for photon energy

- num-energy-steps

- type
integer

- example
1000

Number of energy steps between `e-min-photon`

and `e-max-photon`

.

This number determines the resolution of the absorption curve \(\alpha(E)\)
where \(E\) is the energy in units of `[eV]`

.

Note

The number of

energy grid points =

`num-energy-steps`

\(+1\)

because the first grid point (`e-min-photon`

) is also included.

The energy grid spacing is

\(\Delta_E = (\)

`e-max-photon`

\(-\)`e-max-photon`

\() /\)`num-energy-steps`

.

Distinguish between calculating and reading in \(k_\parallel\) points.

- read-in-k-points

- type
character

- options

`yes`

or`no`

- default

`no`

Flag to distinguish between Step 2 and Step 3. For Step 3, in order to avoid calculating the \(k_\parallel\) points again, one can simply read them in from a previous simulation, and then calculate and output the optical absorption.

Energy of lowest/highest eigenvalue considered for calculation, i.e. energies are calculated in the interval `[e-min-state,e-max-state]`

.
Here, the eigenvalue solver is called with these energy values.
Alternatively, the eigenvalue solver can be called with a certain number of eigenvalues requested, i.e. one either has to specify an energy interval or the number of eigenvalues.
Depending on the eigenvalue solver used, different options are possible.

- e-min-state

- type
double

- unit

`[eV]`

- default
-5.0

- example
-1.7

lowest eigenvalue

- e-max-state

- type
double

- unit

`[eV]`

- default
5.0

- example
0.3

highest eigenvalue

**Broadening of absorption curve**

This is only relevant for the calculation of the absorption curve.

- smoothing-of-curve

- type
character

- options

`Lorentzian`

,`Gaussian`

,`yes`

,`no`

- default

`yes`

For `Lorentzian`

or `Gaussian`

, we introduce an artificial broadening (smoothing) of the curve (*Lorentzian* or *Gaussian* broadening).
If `yes`

, both *Lorentzian* and *Gaussian* broadening will be calculated and written out.
If `no`

, no broadening (smoothing) of the curve is assumed.

- smoothing-damping-parameter

- type
double > 0.0

- unit

`[eV]`

- default
0.005

The artificial parameter for smoothing of absorption curve is `smoothing-damping-parameter`

.
It is usually denoted as \(\Gamma\) and is the *Full Width at Half Maximum* (**FWHM**).

*Lorentzian lineshape*

The Lorentzian function is given by

\(L(E) = \frac{1}{\pi} \frac{\Gamma/2}{(E-E_{ij})^2+(\Gamma /2)^2}\)

where \(\Gamma /2\) is the scale parameter *Lorentzian half-width*, i.e. Half Width at Half Maximum (**HWHM**).
It describes the shape of certain types of spectral lines (lineshape).
Note that the definition of the Lorentzian function includes a factor \(1/\pi\).

\(E_{ij}\) is the transition energy between the states \(i\) and \(j\) and specifies the location of the peak in the Lorentzian function.

\(\Gamma\) is specified in the input file via

`smoothing-damping-parameter`

. It is the*Full Width at Half Maximum*(**FWHM**).\(\alpha=\Gamma /2\) is the

*Half Width at Half Maximum*(**HWHM**).!-------------------------------------------- ! for k.p algorithm only: ! First, the absorption curve is calculated. ! Then the broadening is applied. !-------------------------------------------- absorption_NoSmoothingV = absorptionV absorptionV = 0.0 DO i=1,num-energy-steps+1 ! Loop over all energy grid points E(i) and determine absorption alpha(i)=alpha(E). DO j=1,num-energy-steps+1 ! This loop is essentially an integration over energy dE. E_weight = (Lorentzian( E_gridV(j), E_gridV(i), smoothing-damping-parameter ) - & Lorentzian( E_gridV(j), - E_gridV(i), smoothing-damping-parameter ) ) * DeltaEnergy absorptionV(i) = absorptionV(i) + absorption_NoSmoothingV(j) * E_weight END DO END DO

The following specifiers are only used for the \(\mathbf{k} \cdot \mathbf{p}\) optical absorption algorithm but not for the simple single-band intersubband transition optical absorption algorithm.

- E_P

- type
double

- example

`20.0`

- unit

`[eV]`

- status

currently not implemented, value from the database is used

\(E_P\) is Kane’s matrix element \(E_P = | < S | p | X > |^2\).
It should be around 20 eV and depends on the material.
The `E_P`

parameter is given in the database by the specifier `8x8kp-parameters`

.
\(E_P\) can be converted into the \(P\) paramter by the following equation:
\(E_P = \frac{2 m_0}{\hbar^2} P^2\).
In our model the \(E_P\) parameter is only relevant for interband transitions.
It enters into the matrix element prefector (*matrix_element_prefac*) which is described in
Section *1.1.1 Inter-band transitions* of the documentation:
Absorption, Matrix elements, Inter-band transitions, Intra-band transitions (pdf).
\(E_P\) has the same value for all materials in this implementation.
In principle it could have been read in from the database rather than specifying it within the keyword `$optical-absorption`

.

**Polarization**

\(m\) is equivalent to \(\tan(\theta)\) or \(\tan^{-1}(\theta)\) depending whether \(P_1/P_2\) is \(x\) or \(y\). so instead of \(\theta\) one can directly use the formula below:

\(P = m \cdot P_1 + e^{\text{i}\omega \pi} \cdot P_2\)

This is in fact more general, as it also describes circular polarizations which lead to complex coefficient.

- polarization-vector-1

- type
double array

- example

`1.0 0.0 0.0`

x y z coordinates (in simulation system) for first in-plane vector \(P_1\)

- polarization-vector-2

- type
double array

- example

`0.0 1.0 0.0`

x y z coordinates (in simulation system) for second in-plane vector \(P_2\)

- magnitude-relation-1-2

- type
double

- unit

`[]`

- default

`0.5`

- example

`1.0`

relation of magnitudes \(m=|E_1|/|E_2|\)

- phase

- type
double

- unit

`[]`

- default

`0.0`

- example

`0.5`

phase \(\omega\): \(E_2\) `==>`

\(\exp(\text{i} \omega \pi)E_2\)

\(P = m \cdot P_1 + e^{\text{i}\omega \pi} \cdot P_2\)

Examples

x-polarized light

polarization-vector-1 = 0.0 1.0 0.0 polarization-vector-2 = 1.0 0.0 0.0 magnitude-relation-1-2 = 0.0In this case,

`polarization-vector-1`

is ignored as \(|E_1|\) is set to be zero.z-polarized light

polarization-vector-1 = 1.0 0.0 0.0 polarization-vector-2 = 0.0 0.0 1.0 magnitude-relation-1-2 = 0.0In this case,

`polarization-vector-1`

is ignored as \(|E_1|\) is set to be zero.circularly polarized light in the (x,y) plane

polarization-vector-1 = 1.0 0.0 0.0 polarization-vector-2 = 0.0 0.0 1.0 magnitude-relation-1-2 = 1.0In this case,

`polarization-vector-1`

isnotignored as \(|E_1|=|E_2|\).quantum well, interband absorption

polarization-vector-1 = 1.0 0.0 0.0 polarization-vector-2 = 0.0 1.0 0.0 magnitude-relation-1-2 = 1.0quantum well, intraband absorption

polarization-vector-1 = 0.0 0.0 1.0 polarization-vector-2 = 0.0 0.0 1.0 magnitude-relation-1-2 = 0.0Note: Intraband absorption only for z-polarized light.

Fermi levels

- fermi_in_el

- type
double

- unit

`[eV]`

- default

`0.0`

- example

`0.1`

Optional input for Fermi level of electrons (default: calculated quasi-Fermi level for electrons)

- fermi_in_hl

- type
double

- unit

`[eV]`

- default

`0.0`

- example

`-1.0`

Optional input for Fermi level of holes (default: calculated quasi-Fermi level for holes)

- device-thickness

- type
double

- unit

`[m]`

- default
thickness of device or quantum cluster? (

Check this!)- example

`1e-6`

Optional input of device thickness for normalization of absorption

- k-space-symmetry

- type
character

- options

`default`

,`none`

,`four-fold`

- default

`default`

Symmetry of \(k_\parallel = (k_x,k_y)\) space to be discretized. If any symmetry is present, less \(k_\parallel\) points have to be calculated. By default, the appropriate symmetry is chosen taking into account any crystal rotations with respect to the simulation axes, as well as nonsymmetric strains.

Note

In order to save CPU time, we recommend the following procedure:

Instead of calculating

\(\mathbf{k} \cdot \mathbf{p}\) eigenstates and

optical absorption

within one simulation, it is more efficient to divide this into 3 steps.

Step 1: Calculate eigenstates for \(k_\parallel=0\).

calculate-optics = no

This is very quick. Solve \(\mathbf{k} \cdot \mathbf{p}\) to determine lowest and highest eigenvalue so that we know what to specify for

`e-min-state`

and`e-max-state`

in Step 2.Step 2: Calculate eigenstates for all \(k_\parallel\) vectors and save all of the wavefunctions to file so that they can be read in and used many times in Step 3.

raw-potential-in = yes raw-fermi-levels-in = yes strain-calculation = raw-strain-in num-kp-parallel = 1700 ! STEP 2/3 ! total number of k_|| points for Brillouin zone discretization calculate-optics = yes num-quantum-cluster = 1 read-in-k-points = no e-min-state = -1.7 ! Choose a reasonable value for E_min e-max-state = 0.3 ! Choose a reasonable value for E_min

Read in raw data (potential, quasi-Fermi levels, strain (if applicable) and all \(\mathbf{k} \cdot \mathbf{p}\) wavefunctions) and output \(k_\parallel\) points. The strain calculation is very fast for a 1D simulation. Instead of reading it in, it could be directly calculated (

*recommended*).The user specifies the total number of \(k_\parallel\) points that are present in \(k_\parallel\) space. However, internally the code modifies this number according to the following algorithm:

number of k points in positive x direction (without Gamma point): N_kx

number of k points in positive y direction (without Gamma point): N_ky = N_kx

`==>`

Thus the actual, total number of \(k_\parallel\) points is:`total_number_of_k|| = (2 * N_kx + 1) * (2 * N_ky + 1)`

In this example (

`num-kp-parallel = 1700`

):`N_kx = N_ky = 20`

`==> total_number_of_k|| = 41 * 41 = 1681`

Step 3: Calculate optical absorption.

calculate-optics = yes read-in-k-points = yes

Read in \(k_\parallel\) points, calculate and output optical absorption for specific polarization of incident light.

If one wants to repeat the calculation for another polarization, one only needs to change the polarization vector and repeat Step 3. It is not necessary in this case to recalculate Step 1 or Step 2. Step 3 also outputs the energy dispersion \(E(k_\parallel)= E(k_x,k_y)\). (

*Check: Why not Step 2?*)

**Output**

**Results**

The units of the optical absorption are `[m^-1]`

and not *arbitrary units* as indicated in the figure.

The *electric susceptibility tensor* \(\chi\) is contained in the file `susceptibility_tensor.dat`

:

`chi11re chi11im chi22re chi22im chi33re chi33im chi12re chi12im chi13re chi13im chi23re chi23im`

Note: As this tensor is complex, for each component, two values are written out.

`re`

: real part`im`

: imaginary part

The relevant part for the absorption is only the *imaginary part*.

The units of the \(k_\parallel\) space grid coordinates \(k_x\) and \(k_y\) are `[Angstrom^-1]`

and the energy units are `[eV]`

.

The files

`el_dispersion_100.dat`

`el_dispersion_110.dat`

`hl_dispersion_100.dat`

`hl_dispersion_110.dat`

show the same data but with slices along the

[10] (i.e. \(k_\parallel=(k_x,k_y=0)\) and

[11] (i.e. \(k_\parallel=(k_x=k_y)\) directions in \(k_\parallel\) space.

Here all electron and all hole eigenvalues are contained in one file, respectively.

**Restrictions**

Only

*Dirichlet*boundary conditions are supported so far.Step 2 and Step 3 only work if:

raw-potential-in = yes

## Solar cells¶

For solar cells, we have this tutorial: GaAs Solar Cell

Example files for solar spectra, absorption coefficient, transmission and reflectivity coefficients can be found in the installation folder:

`C:\Program Files\nextnano\nextnano3\Syntax\Solar cell files\absorption\`

`C:\Program Files\nextnano\nextnano3\Syntax\Solar cell files\reflectivity`

`C:\Program Files\nextnano\nextnano3\Syntax\Solar cell files\solar spectra\`

The following specifiers are relevant for solar cell simulations (photovoltaics).

- incident-light-along-direction

- type
character

- options

`x`

,`y`

,`z`

,`-x`

,`-y`

,`-z`

- default
along simulation direction in 1D

In a 1D simulation, this specifier is optional. For 2D and 3D, a direction must be specified.

### Solar spectrum¶

- import-solar-spectrum

- type
character

- options

`yes`

or`no`

- default

`no`

For a solar cell simulation, one has to read in a solar spectrum, e.g. AM 1.5, or AM 1.0 (AM = air mass). They can be obtained from NREL website, e.g. ASTM-E490: https://www.nrel.gov/grid/solar-resource/spectra-astm-e490.html (AMST = American Society for Testing and Materials)

- file-solar-spectrum

- type
character

- example

`H:\solar_cells\ASTMG173_AM10.dat`

AM 1.0 spectrum (extraterrestrial)- example

`H:\solar_cells\ASTMG173_AM15.dat`

AM 1.5 spectrum- example

`H:\solar_cells\ASTMG173_AM15G.dat`

AM 1.5G spectrum (G = global, i.e. including diffuse light)

The file must consist of two columns (wavelength and spectrum), the units are `[nm]`

and `[W/m^2*nm^-1]`

.

wavelength[nm] AM1.5[W/m^2*nm^-1] ... ...

Concentration of sun light

- number-of-suns

- type
integer

- default

`1.0`

our sun- example

`0.0`

(no sun, dark)- example

`2.5`

2.5 suns- example

`300.0`

300 suns- example

`1000.0`

100 suns

The number of suns can be set to increase the power of the solar spectrum in order to model concentrator solar cells.

### Absorption coefficient¶

- import-absorption-spectrum

- type
character

- options

`yes`

or`no`

- default

`no`

- file-absorption-spectrum

- type
character

- example

`AbsorptionCoefficient_GaAs_300K.dat`

The file must consist of two columns (wavelength and absorption coefficient), the units are `[nm]`

and `[cm^-1]`

.

wavelength[nm] absorption[1/cm] ... ...

### Reflection coefficient¶

Fraction of incident photons that are reflected from surface for a particular wavelength.

- import-reflectivity-spectrum

- type
character

- options

`yes`

or`no`

- default

`no`

- file-reflectivity-spectrum

- type
character

- example

`ReflectionCoefficient_GaAs_300K.dat`

The file must consist of two columns (wavelength and reflection coefficient), the units are `[nm]`

and `[]`

.

wavelength[nm] reflectivity[] ... ...

### Transmission coefficient¶

Fraction of incident photons that are transmitted through the device for a particular wavelength (relevant for very thin devices).

- import-transmission-spectrum

- type
character

- options

`yes`

or`no`

- default

`no`

- file-transmission-spectrum

- type
character

- example

`TransmissionCoefficient.dat`

The file must consist of two columns (wavelength and transmission coefficient), the units are `[nm]`

and `[]`

.

wavelength[nm] transmission[] ... ...

### Solar cell output¶

All output is twofold:

one is with respect to wavelength in units of

`[nm]`

one is with respect to photon energy in units of

`[eV]`

(indicated by`_eV*.dat`

)

The files are:

Absorption coefficient

`optics/Absorption_coefficient.dat`

(as read in from file but now in units of`[m^-1]`

)`optics/Absorption_coefficient_interpolated.dat`

(interpolated on wavelength grid of solar spectrum but now in units of`[m^-1]`

)

Reflectivity

`optics/Reflectivity.dat`

(as read in from file)`optics/Reflectivity_interpolated.dat`

(interpolated on wavelength grid of solar spectrum)

Transmission

`optics/Transmission.dat`

(as read in from file)`optics/Transmission_interpolated.dat`

(interpolated on wavelength grid of solar spectrum)

Solar spectrum

`optics/SolarSpectralIrradiance_sun0001.dat`

(as read in from file)`optics/PhotonFlux_sun0001.dat`

(photon flux density calculated from solar spectrum)

Total number of of photons in the solar spectrum above an energy value contributing to the maximum photocurrent for a solar cell made with a specific band gap:

`optics/PhotonFlux_BandGap_eV_sun0001.dat`

(calculated from solar spectrum)`optics/PhotoCurrent_BandGap_eV_sun0001.dat`

(calculated from solar spectrum)

Spectral response

`optics/SpectralResponse_sun0001.dat`

external and internal spectral response

Quantum efficiency

`optics/QuantumEfficiency_sun0001.dat`

external and internal quantum efficiency

Generation rate

`optics/GenerationRateLight_AVS_sun0001.fld`

2D plots \(G(x,\lambda)\) and \(G(x,E)\)`optics/GenerationRateLight_sun0001.dat`

1D plot \(G(x)\)`optics/GenerationRate_eV_sun0001.dat`

1D plot \(G(E)\) where \(E\) is the energy`optics/GenerationRate_Wavelength_sun0001.dat`

1D plot \(G(\lambda)\)

Current-voltage characteristics

`current/IV_characteristics_new.dat`

`voltage[V] current[A/m^2] ... power[W/m^2] powersolar[W/m^2] efficiency[%]`

The following information can be found in the

`.log`

file, such asshort-circuit current \(I_\text{sc}\)

open-circuit voltage \(U_\text{oc}\)

ideal conversion efficiency \(\eta\)

…

**************************************************************************************** Solar cell results **************************************************************************************** short-circuit current: I_sc = 281.473346 [A/m^2] (photo current: It increases with smaller band gap.) open-circuit voltage: U_oc = -1.012500 [V] (U_oc <= built-in potential ~ band gap) current at maximum power: I_max = 273.089897 [A/m^2] voltage at maximum power: U_max = -0.925000 [V] maximum power output: P_max = U_max * I_max = -252.608155 [W/m^2] (condition for maximum power output: dP/dV = 0) maximum extracted power: P_solar = - P_max = 252.608155 [W/m^2] incident power: P_in = 0.000000 [W/m^2] ideal conversion efficiency: eta = P_max / P_in = Infinity % fill factor: FF = 0.886370 In practice, a good fill factor is around 0.8. All these results are approximations. They are only correct if a lot of voltage steps have been used (i.e. a high resolution). ****************************************************************************************

Example for a solar cell simulation

!-------------------------------------- $optical-absorption destination-directory = optics/ import-absorption-spectrum = yes file-absorption-spectrum = "..\Syntax\Solar cell files\absorption\AbsorptionCoefficient_GaAs_300K.dat" import-reflectivity-spectrum = yes file-reflectivity-spectrum = "..\Syntax\Solar cell files\reflectivity\Reflectivity_Al0.80Ga0.20As.dat" import-solar-spectrum = yes file-solar-spectrum = "..\Syntax\Solar cell files\solar spectra\ASTMG173_AM15G.dat" number-of-suns = 1 $end_optical-absorption !--------------------------------------

## Black body spectrum¶

- calculate-black-body-spectrum

- type
character

- options

`yes`

or`no`

- default

`no`

Flag for calculating *black body spectrum* according to Planck’s law,
e.g. to compare the solar spectrum to the spectrum of a black body at T = 5778 K.

The spectral

*energy density*the spectral

*radiance*(which is*emitted*per m^{2}and per unit solid angle sr (sr = steradian)) andthe spectral

*irradiance*(which is*received*per m^{2})

is calculated.

Note

spectral irradiance = spectral radiance \(\cdot \pi\)

spectral energy density = spectral radiance \(\cdot 4\pi/c\)

There are several output files, i.e. output with respect to

*wavelength*\(\lambda\) in units of`[m]`

,`BlackBody_SpectralEnergyDensity_wavelength.dat`

`Wavelength[nm] SpectralEnergyDensity[kJ/m^3/m]`

`BlackBody_SpectralRadiance_wavelength.dat`

`Wavelength[nm] SpectralRadiance[kW/m^2/nm/sr]`

`BlackBody_SpectralIrradiance_wavelength.dat`

`Wavelength[nm] SpectralIrradiance[kW/m^2/nm]`

*angular frequency*\(\omega = 2 \pi \nu\) in units of`[1/s]`

,`BlackBody_SpectralEnergyDensity_angular_frequency.dat`

`AngularFrequency_omega[10^15/s] SpectralEnergyDensity[10^-15J/m^3/s^-1]`

`BlackBody_SpectralRadiance_angular_frequency.dat`

`AngularFrequency_omega[10^15/s] SpectralRadiance[10^-12W/m^2/s^-1/sr]`

`BlackBody_SpectralIrradiance_angular_frequency.dat`

`AngularFrequency_omega[10^15/s] SpectralIrradiance[10^-12W/m^2/s^-1]`

*frequency*\(\nu\) in units of`[Hz]`

,`BlackBody_SpectralEnergyDensity_frequency.dat`

`Frequency[THz] SpectralEnergyDensity[10^-15J/m^3/Hz]`

`BlackBody_SpectralRadiance_frequency.dat`

`Frequency[THz] SpectralRadiance[10^-12W/m^2/sr]`

`BlackBody_SpectralIrradiance_frequency.dat`

`Frequency[THz] SpectralIrradiance[10^-12W/m^2/Hz]`

*photon energy*\(E = h \nu\) in units of`[eV]`

.`BlackBody_SpectralEnergyDensity_energy.dat`

`AngularFrequency_omega[10^15/s] SpectralEnergyDensity[kJ/m^3/eV]`

`BlackBody_SpectralRadiance_energy.dat`

`AngularFrequency_omega[10^15/s] SpectralRadiance[kW/m^2/eV/sr]`

`BlackBody_SpectralIrradiance_energy.dat`

`AngularFrequency_omega[10^15/s] SpectralIrradiance[kW/m^2/eV]`

The file `BlackBody_Info.txt`

contains some additional information about the calculated black body spectrum.

## Intraband absorption in the single-band case¶

In the following we assume a single band with a parabolic energy band dispersion.

Tutorials showing results are available here:

For a 1D heterostructure grown along the \(x\) direction, the *absorption coefficient* \(\alpha\) reads
(see e.g. [ChuangOpto1995] or p.53 in [FaistQCL2013])

\(\alpha(\omega) = \frac{e^2 \omega}{\varepsilon _0 n_\text{r}c} \sum_{i} \sum_{j} \left( \overline{n}_i - \overline{n}_j\right) x_{ij}^2 \frac{\Gamma/2}{\left(E_j-E_i-\hbar\omega\right)^2+(\Gamma /2)^2}\)

or, equivalently in energy,

\(\alpha(E) = \frac{e^2 E}{\hbar \varepsilon _0 n_\text{r}c} \sum_{i} \sum_{j} \left( \overline{n}_i - \overline{n}_j\right) x_{ij}^2 \frac{\Gamma/2}{\left(E_j-E_i-\hbar\omega\right)^2+(\Gamma /2)^2}\)

where

\(\omega=E/\hbar\) is the frequency in units of

`[s^-1]`

\(E\) the energy in units of

`[J]`

\(e\) is the elementary charge in units of

`[As]`

\(\varepsilon _0\) is the vacuum permittivity in units of

`[As/Vm]`

\(c\) is speed of light in vacuum in units of

`[m/s]`

\(n_\text{r} = \sqrt{ \varepsilon _\text{r} }\) is the refractive index (

`[]`

) assumed to be homogeneous. So we take the average of the quantum region (*check this*).\(\overline{n}_i=\frac{1}{L}\sigma _i=\frac{1}{L} \int n_i(x) \text{d}x\) is the

*averaged*electron density of subband \(i\) in units of`[m^-3]`

, where \(L\) is the length of the quantum region and \(\sigma _i=\int n_i(x) \text{d}x\) is the subband density in units of`[m^-2]`

\(x_{ij}=<i|x|j>\) is the dipole moment between initial state \(i\) and final state \(j\) in units of

`[m]`

\(\Gamma\) is the energy linewidth (broadening) in units of

`[J]`

in terms of full-width at half maximum (FWHM).

This equation includes a Lorentzian broadening which includes a factor of \(1/\pi\).

We can also define the *position dependent absorption coefficient*

\(\alpha(\omega,x) = \frac{e^2 \omega}{\varepsilon _0 n_\text{r}c} \sum_{i} \sum_{j} \left( n_i(x) - n_j(x)\right) x_{ij}^2 \frac{\Gamma/2}{\left(E_j-E_i-\hbar\omega\right)^2+(\Gamma /2)^2}\)

where

\(n_i(x)\) is the electron density of state \(i\) at position \(x\) in units of

`[m^-3]`

.

The units of both \(\alpha(\omega)\) and \(\alpha(\omega,x)\) are `[m^-1]`

.
In plots, typically `[cm^-1]`

is used.

If we integrate \(\alpha(\omega,x)\) over position \(x\) in the whole quantum region of length \(L\), and divide by the length of the quantum region \(L\), we obtain \(\alpha(\omega)\) as defined above,

\(\alpha(\omega) = \frac{1}{L} \int \alpha(\omega,x) \text{d}x\).

So \(\alpha (\omega)\) as defined in the beginning of this section, where we averaged the density \(\overline{n}_i\), is the averaged absorption in the quantum region and equivalent to the definition given here.

Finally, we note that this also works for the \(\mathbf{k} \cdot \mathbf{p}\) wavefunctions:

\(\alpha(\omega,x,k_{\parallel}) = \frac{e^2 \omega}{\varepsilon _0 n_\text{r}c} \sum_{i} \sum_{j} \sum_{k{\parallel}} \left( n_i(x,k_{\parallel}) - n_j(x,k_{\parallel})\right) (x_{ij}(k_{\parallel}))^2 \frac{\Gamma/2}{\left(E_j(k_{\parallel})-E_i(k_{\parallel})-\hbar\omega\right)^2+(\Gamma /2)^2}\)

where

\(n_i(x,k_{\parallel})\) is the electron density of state \(i\) at position \(x\) and vector \(k_{\parallel}=(k_x,k_y)\) (in 1D) or \(k_{\parallel}=k_z\) (in 2D).