# optics{}¶

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

There is a nice optics tutorial tutorial on the optical absorption feature of next**nano**++.

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_transitions = yes output_components = yes energy_min = 1.4 # [eV] energy_max = 1.7 # [eV] energy_resolution = 0.001 # [eV] energy_broadening_lorentzian = 0.005 # [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] }

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

- value

`yes`

or`no`

- default

`no`

Output transition intensities and energies for each pair of states.

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

- 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

Energy broadening(Lorentzian or Gaussian)

- energy_broadening_lorentzian

- value
real number >= 0.000001

- unit

`[eV]`

- default
0.0 (i.e. switched off if undefined)

- energy_broadening_gaussian

- value
real number >= 0.000001

- unit

`[eV]`

- default
0.0 (i.e. switched off if undefined)

Set respective broadenings to value greater than 0.0 to get corresponding broadening for spectra. (In 1D and 2D, both Lorentzian and Gaussian can be used simultaneously.)

- dipole_approximation

- value

`yes`

or`no`

- default

`no`

preliminarySpecify whether to calculate the matrix elements corresponding to optical transitions with dipole approximation. Note: \(<\psi_1|p e|\psi_2>\) elements are calculated by default, with dipole approximation: \(pâ€™ e <\psi_1|\psi_2>\) (without scaling: \(e\) is polarization direction, and \(p\) is momentum operator, \(p'\) is the integral for the Bloch central functions)

For more details, see [Eissfeller2008].