# optics{}¶

Specifications for the optics keyword, e.g. for the calculation of the optical absorption.

There is a nice optics tutorial on the optical absorption feature of nextnano++.

optics{

debuglevel = 2

region{
name = "optical_active"

# Input values

# (sigma+) circularly polarized light around the x axis
polarization{ name = "y+iz"
re = [0,1,0]
im = [0,0, 1] }

refractive_index     = 10.0  # []       (optional)
normalization_volume = 100.0 # [nm^dim] (optional)

# Setting for k|| and eigenstate summation
make_spin_degenerate            = no
spin_align                      = yes

interband                       = yes
intraband                       = yes

energy_threshold                = 1e-6    # [eV]
transition_threshold            = 1e-6    # [eV]
occupation_threshold            = 0       # [eV]

k_integration{
relative_size      = 0.1               #

num_points         = 4

# Specify either num_subpoints or num_totalsubpoints.
num_subpoints      =  16
num_totalsubpoints = 128

symmetry           = 1
}

# Treatment of occupation
occupation_ignore               = no
occupation_interpolate_invfermi = yes
occupation_const_fermilevel     = no

# Output settings
output_energies                 = no
output_occupations              = no
output_transitions              = no
output_spinor_components        = no

output_spectra{

output_components           = no
spectra_over_energy         = yes
spectra_over_wavelength     = no
spectra_over_frequency      = no
spectra_over_wavenumber     = no

}

spontaneous_emission = yes

energy_min                   = 1.4      # [eV]
energy_max                   = 1.7      # [eV]
energy_resolution            = 0.001    # [eV]
# energy_broadening_gaussian   = 0.005    # [eV]

dipole_approximation = no       # preliminary

}
}


## debuglevel¶

value

integer value >= -1 and <= 4.

default

0

The larger this value, the more verbose the diagnostic output will be.

## region{}¶

name
value

“string”

example

optical_active

name of the quantum region for which optics is calculated

polarization{}
name

“string”

re

real part

im

imaginary part

Define polarizations of incoming light for which optical absorption should be calculated.

Examples:

# linearly polarized light in x direction.
# name is used for the file names of the output.
polarization{ name = "x"        re = [1,0,0]                 }

# linearly polarized light in y direction
polarization{ name = "y"        re = [0,1,0]                 }

# linearly polarized light in z direction
polarization{ name = "z"        re = [0,0,1]                 }

# TM mode.
# This naming might be useful when analyzing heterostructure
# grown in x direction.
polarization{ name = "TM"        re = [1,0,0]                }

# TE mode
polarization{ name = "TEy"       re = [0,1,0]                }

# TE mode
polarization{ name = "TEz"       re = [0,0,1]                }

# (sigma+) circularly polarized light around the x axis
polarization{ name = "y+iz"     re = [0,1,0]   im = [0,0, 1] }

# (sigma-) circularly polarized light around the x axis
polarization{ name = "y-iz"     re = [0,1,0]   im = [0,0,-1] }

# an example for an arbitrary polarization direction
polarization{ name = "x1y1z2"   re = [1,1,2]                 }


We can generally write the electric field of a traveling wave propagating to $$\mathbf{k}$$ direction as follows:

$\begin{split}\begin{array} \mathbf{E}(\mathbf{r};t)&=(E_x\hat{\mathbf{x}}+E_y\hat{\mathbf{y}}+E_z\hat{\mathbf{z}})\exp{[i(\mathbf{k}\cdot\mathbf{r}-\omega t)]}\\ =&\left[ \begin{array}{c} E_x \\ E_y \\ E_z \end{array} \right]\exp{[i(\mathbf{k}\cdot\mathbf{r}-\omega t)]} =\left( \left[ \begin{array}{c} \mathrm{Re}(E_x) \\ \mathrm{Re}(E_y) \\ \mathrm{Re}(E_z) \end{array} \right] + i \left[ \begin{array}{c} \mathrm{Im}(E_x) \\ \mathrm{Im}(E_y) \\ \mathrm{Im}(E_z) \end{array} \right]\right)\exp{[i(\mathbf{k}\cdot\mathbf{r}-\omega t)]} \end{array}\end{split}$

where $$E_{x/y/z}$$ are complex numbers.

re=[ , , ] and im = [ , , ] correspond to the first and second column in the last line.

refractive_index
optional

optional

value

double

unit

dimensionless

example

10.0

Specify an alternative refractive index for the substrate material.

normalization_volume
optional

optional

value

double

unit

[nm^dim]

example

100.0

Specify an alternative normalization volume for the optical spectra. The default is the volume of the simulated device.

Settings for $$k_\parallel$$ and eigenstate summation

make_spin_degenerate
value

yes or no

optional

optional

default

no

Effect of the flag is throwing away every second state from the respective quantum solver, i.e. the states are made spin degenerate and are counted twice. Use only when all states are pairwise identical.

spin_align
value

yes or no

default

?

yes: aligns spin-degenerate states in a virtual magnetic field prior to the optics calculations.

no: Spin-degenerate states enter the optics calculation in a random superposition.

interband
value

yes or no

default

yes

Compute optical valence band to conduction band transitions.

intraband
value

yes or no

default

yes

Compute optical valence band to valence band and conduction band to conduction band transitions.

energy_threshold
value

double

default

1e-6 # [eV]

example

1e-8 # [eV]

Only transitions between states with at least this energy difference are regarded when computing optical spectra. 1e-8 [eV] should be reasonable in most cases.

transition_threshold
value

double

default

1e-6 # [eV]

example

1e-4 # [eV]

Only transitions between states with at least this optical intensity are regarded when computing optical spectra. A value of 0 can be safely used as a default. Higher values can reduce computational time but may neglect weak optical transitions.

occupation_threshold
value

double; 0 <= 1

default

0 # [eV]

example

1e-8 # [eV]

Only transitions between states with at least this occupation are regarded when computing optical spectra. A value of 0 can be safely used as a default. Higher values can reduce computational time but may neglect weakly occupied states.

k_integration{}
relative_size
value

double, 0.001 <= relative_size <= 1.0

default

0.1

example

0.3

size of $$k_\parallel$$ space integration

num_points
value

integer

units

?

default

4

example

8

number of points in $$k_\parallel$$ space where transition intensities are computed

Note

Specify either num_subpoints or num_totalsubpoints.

num_subpoints
default

?

example

16

example

256

number of interpolation points for $$k_\parallel$$ space integration (relative to num_points)

num_totalsubpoints
default

128

example

128

total number of interpolation points for $$k_\parallel$$ space integration (relative to num_points)

symmetry
value

integer; 1, 2, 3 or 4

default

1

example

4

rotational $$k_\parallel$$ space symmetry

force_k0_subspace
value

yes or no

default

no

If set to yes, $$k_\parallel$$ integration in quantum{} is modified in that only states for point $$k=0$$ are computed exactly, whereas all other k points are computed in the subspace of the $$k=0$$ wavefunctions. As a result of this approximation, computational speed is much improved (you may even be able to also enlarge the number of eigenvalues). In case you are planning to use this approximation for final results, please make sure to check whether the resulting loss of accuracy in optical spectra is acceptable.

Treatment of occupation

occupation_ignore
value

yes or no

default

no

Ignore the occupation of states when computing optical spectra: Valence bands and conduction bands are considered to be fully occupied and fully empty, respectively.

occupation_interpolate_invfermi
value

yes or no

default

yes

less important. This option may increase accuracy of numerical $$k_\parallel$$ space integration.

occupation_const_fermilevel
value

yes or no

default

no

In semi-classical current calculations, the quasi-Fermi level may depend on position. Optical spectra on the other hand are computed in a completely quantum mechanical way. To resolve this inconsistency, the Fermi level is averaged. Note that both options violate the physical assumption in some way and are only a valid approximation for almost constant Fermi levels. no: In this case, the inconsistency is resolved by computing a position dependent occupation number.

Output settings

output_energies
value

yes or no

default

no

Output energy dispersion for every transition.

output_occupations
value

yes or no

default

no

Output occupation dispersion for every transition.

output_transitions
value

yes or no

default

no

Output transition strength for every transition.

output_spinor_components
value

yes or no

default

no

Output the spinor components for each state at each $$k_\parallel$$ point (only relevant in multi-band $$\mathbf{k} \cdot \mathbf{p}$$ calculations).

Note

In 1 dimentional systems the axis of quantization for the angular momentum is x, in 3D z.

output_spectra
output_components
value

yes or no

default

no

Output $$\mathrm{Im}\ \epsilon$$ for every transition.

spectra_over_energy
value

yes or no

default

yes

Output spectra with respect to the energy.

spectra_over_wavelength
value

yes or no

default

no

Output spectra with respect to the wavelength.

spectra_over_frequency
value

yes or no

default

no

Output spectra with respect to the frequency.

spectra_over_wavenumber
value

yes or no

default

no

Output spectra with respect to the wavenumber.

spontaneous_emission
value

yes or no

default

no

Calculate spontaneous emission rate using the momentum matrix element obtained by 8-band kp model. (This feature is not yet implemented in 3D simulation.)

energy_min
value

double

default

? # [eV]

example

1.4 # [eV]

lower energy bound for optical spectra

energy_max
value

double

default

? # [eV]

example

1.7 # [eV]

upper energy bound for optical spectra

energy_resolution
value

double

default

0.001 # [eV]

spectral resolution

value

real number >= 0.000001

unit

[eV]

default

0.0 (i.e. switched off if undefined)

Set the broadening to value greater than 0.0 to make the Lorentzian broadening

$\mathcal{L}(E-E_0)=\frac{1}{\pi}\frac{\Gamma/2}{(E-E_0)+(\Gamma/2)^2}$

included to the calculation of the optical spectrums. The specifed value is read as the FWHM $$\Gamma$$.

value

real number >= 0.000001

unit

[eV]

default

0.0 (i.e. switched off if undefined)

Set the broadening to value greater than 0.0 to make the Gaussian broadening

$\mathcal{L}(E-E_0)=\frac{1}{\sqrt{2\pi}\sigma}\exp{\big(-\frac{(E-E_0)^2}{2\sigma^2}\big)}$

included to the calculation of the optical spectrums. The specifed value is read as the FWHM $$\Gamma=2\sqrt{\ln 2}\cdot\sigma$$.

(In 1D and 2D, both Lorentzian and Gaussian can be used simultaneously. In 3D, either of these broadenings must be included.)

dipole_approximation
value

yes or no

default

no

(preliminary) Specify whether to calculate the matrix elements corresponding to optical transitions with dipole approximation. Note: $$<\psi_1|\mathbf{p}\cdot\epsilon|\psi_2>$$ elements are calculated by default, with dipole approximation: $$\mathbf{p}'\cdot\epsilon <\psi_1|\psi_2>$$ (without scaling: $$\epsilon$$ is polarization direction, and $$\mathbf{p}$$ is momentum operator, $$\mathbf{p}'$$ is the integral for the Bloch central functions)

For more details, see [Eissfeller2008].

# opticaldevice{} (not tested)¶

opticaldevice{
name            = "optical_active"
line_width      = 1.0   # [eV]
photon_energy   = 1.0   # [eV]
}


## name¶

value

“string”

example

optical_active

name of quantum region for which optical generation should be calculated

value

integer

example

1

broadening type: for Lorentzian it is 1

## line_width¶

value

double

example

1.0

for Lorentzian broadening the linewidth in [eV]

## photon_energy¶

value

double

example

1.0

the mid energy of the radiation in [eV]