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_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] }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=[ , , ]
andim = [ , , ]
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
orno
- 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
orno
- 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
orno
- default
yes
Compute optical valence band to conduction band transitions.
The following three flags (named enable_*) further restrict which band-to-band transitions are computed in the case of one-band calculations and interband = yes
.
- enable_hole_hole
- value
yes
orno
- default
yes
- enable_electron_hole
- value
yes
orno
- default
yes
- enable_electron_electron
- value
yes
orno
- default
yes
- intraband
- value
yes
orno
- 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
ornum_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
orno
- 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
orno
- 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
orno
- default
yes
less important. This option may increase accuracy of numerical \(k_\parallel\) space integration.
- occupation_const_fermilevel
- value
yes
orno
- 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
orno
- default
no
Output energy dispersion for every transition.
- output_occupations
- value
yes
orno
- default
no
Output occupation dispersion for every transition.
- output_transitions
- value
yes
orno
- default
no
Output transition strength for every transition.
- output_spinor_components
- value
yes
orno
- 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
orno
- default
no
Output \(\mathrm{Im}\ \epsilon\) for every transition.
- spectra_over_energy
- value
yes
orno
- default
yes
Output spectra with respect to the energy.
- spectra_over_wavelength
- value
yes
orno
- default
no
Output spectra with respect to the wavelength.
- spectra_over_frequency
- value
yes
orno
- default
no
Output spectra with respect to the frequency.
- spectra_over_wavenumber
- value
yes
orno
- default
no
Output spectra with respect to the wavenumber.
- photon_spectra
- value
yes
orno
- default
yes
- power_spectra
- value
yes
orno
- default
no
- output_components
- value
yes
orno
- default
no
- absorption
- value
yes
orno
- default
yes
- decadic_absorption
- value
yes
orno
- default
no
- gain
- value
yes
orno
- default
yes
- decadic_gain
- value
yes
orno
- default
no
- emission
- value
yes
orno
- default
yes
- spontaneous_emission
- value
yes
orno
- 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
Energy broadening (Lorentzian or Gaussian)
- energy_broadening_lorentzian
- 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\).
- energy_broadening_gaussian
- 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
orno
- 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].
name¶
- value
“string”
- example
optical_active
name of quantum region for which optical generation should be calculated