www.nextnano.com/documentation/tools/nextnano3/input_syntax/keywords/optical-absorption.html
Optical absorption
Detailed description about the Physics:
Absorption, Matrix elements, Inter-band transitions, Intra-band transitions.
A tutorial is available that describes this keyword:
Optical absorption of an InGaAs quantum well
Here you can specify the options for the optical absorption.
This will be a 3-step approach:
- Step 1:
calculate-optics = no
Solve k.p and determine lowest and highest eigenvalue to specify
e-min-state and e-max-state in the second step.
- Step 2:
calculate-optics = yes
read-in-k-points = no
Read in raw data (potential, quasi-Fermi levels, strain (if
applicable)) and output k points:
raw-potential-in = yes, raw-fermi-levels-in
= yes, strain-calculation =
raw-strain-in
- Step 3: Calculate optical absorption
calculate-optics = yes
read-in-k-points = yes
Read in k points, calculate and output optical absorption.
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||) = E(kx,ky).
!---------------------------------------------------------!
$optical-absorption
optional !
destination-directory
character
required !
calculate-optics
character
optional ! flag: "yes"/"no"
kind-of-absorption
character
optional !
read-in-k-points
character
optional ! flag: "yes"/"no"
!
! if 'read-in-k-points = no' then specify
k point calculation !
2nd step
num-quantum-cluster
integer
optional ! (optional)
e-min-state
double
optional ! [eV] lowest
eigenvalue
e-max-state
double
optional ! [eV] highest
eigenvalue
!
! 3rd step
e-min-photon
double
optional ! [eV] lower
boundary
e-max-photon
double
optional ! [eV] uppper
boundary
num-energy-steps
integer
optional !
smoothing-of-curve
character
optional ! flag: "yes"/"no"
smoothing-damping-parameter
double
optional ! [eV] artificial damping parameter
for smoothing of absorption curve
E-P
double
optional ! [eV] |<S|p|X>|^2
polarization-vector-1
double_array optional ! x y z coordinates
polarization-vector-2
double_array optional ! x y z coordinates
magnitude-relation-1-2
double
optional ! |E1|/|E2|
phase
double
optional ! E2 ->
exp(i*phase*Pi)*E2
!
fermi_in_el
double
optional ! [eV] optional input for
Fermi level of electrons (default: calculated Fermi level)
fermi_in_hl
double
optional ! [eV] optional input for
Fermi level of holes (default: calculated Fermi
level)
device_thickness_in
double
optional ! [m] optional input of
device thickness for normalization of absorption
!
k-space-symmetry
character
optional !
!
!
incident-light-along-direction
character
optional ! x,y,z
!
import-absorption-spectrum
character
optional ! flag: "yes"/"no"
file-absorption-spectrum
character
optional !
!
import-reflectivity-spectrum character
optional ! flag: "yes"/"no"
file-reflectivity-spectrum
character
optional !
!
import-transmission-spectrum character
optional ! flag: "yes"/"no"
file-transmission-spectrum
character
optional !
!
import-solar-spectrum
character
optional ! flag: "yes"/"no"
file-solar-spectrum
character
optional !
!
number-of-suns
double
optional !
!
calculate-black-body-spectrum
character
optional ! flag: "yes"/"no"
$end_optical-absorption
optional !
!---------------------------------------------------------!
Syntax
destination-directory = optics1/
Directory for output and data files.
calculate-optics =
yes
= no
Flag to distinguish between
- Step 1: For calculation of k.p wavefunctions for all k||
vectors), and
- Step 2 and Step 3: Reading in previously calculated k.p
wavefunctions for all k|| vectors (in order to save CPU time), and
then calculating the optical absorption.
e-min-photon
= 1.500 ! [eV] lower boundary
for photon energy
e-max-photon =
1.700 ! [eV] upper boundary
for photon energy
Specifications for absorption energy range: lower/upper boundary for photon energy interval
num-energy-steps =
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].
==> The number of energy grid points = num-energy-steps + 1
because the first grid point (e-min-photon ) is also
included.
First step
kind-of-absorption = interband-only
= intra-vb-only
= intra-cb-only
= intra-sg-only
'interband-only': considers only interband transitions between holes and
electrons
heavy hole <--> Gamma band
light hole <--> Gamma band
split-off hole <--> Gamma band
'intra-vb-only' : considers only intraband transitions within the valence
bands
heavy hole <--> light hole
heavy hole <--> split-off hole
light hole <--> split-off hole
heavy hole <--> heavy hole
light hole <--> light hole
split-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 band
L band <--> L band
X band <--> X band
heavy hole <--> heavy hole
light hole <--> light hole
split-off hole <--> split-off hole
This is a simple algorithm taking only account the energy levels and wave
functions at k||=0.
read-in-k-points =
yes
= no
Flag to distinguish between step 2 and 3.
Second step
If 'read-in-k-points = no' then specify k point
calculation. (These parameters will be ignored in Step 3.)
num-quantum-cluster = 1 !
(optional)
Number of quantum cluster for which absorption is calculated.
If this specifier is not present, the default value (num-quantum-cluster = 1 )
is taken.
e-min-state
= -1.7 ! [eV] lowest eigenvalue
e-max-state =
0.3 ! [eV] highest eigenvalue
energy of lowest/highest eigenvalue considered for calculation
$quantum-model-electrons
...
num-kp-parallel =
1700 ! STEP 2/3
! total number of k|| points for Brillouin zone
discretization
$quantum-model-holes
...
num-kp-parallel =
1700 ! STEP 2/3
! total number of k|| points for Brillouin zone
discretization
The user specifies the total number of k|| points that
are present in k|| 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|| 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
Third step
'read-in-k-points = yes' to read in k points, calculate
and output optical absorption.
smoothing-of-curve
= yes ! (default)
= no !
smoothing-damping-parameter = 0.5e-3 ! [eV] (only relevant for the calculation of the absorption curve in the 3rd
step)
Smoothing of absorption curve: We introduce an artificial smoothing of
the curve by calling the function L orentzian .
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).
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
Lorentzian lineshape
FUNCTION Lorentzian (E,E0,Gamma)
Lorentzian = 1 / pi * alpha / ( (E - E0)2
+ alpha2
)
alpha
is the scale parameter 'Lorentzian half-width': Half Width at Half Maximum (HWHM)
alpha = Gamma
/ 2 = smoothing-damping-parameter / 2
DeltaEnergy = (e-max-photon
- e-min-photon ) / (num-energy-steps)
E_gridV = energy of light for
which absorption should be calculated [eV]
DO i=1,num-energy-steps+1
E_gridV(i) =
e-min-photon + (i-1) * DeltaEnergy
END DO
The following specifiers are only used for the k.p optical
absorption algorithm but not for the simple intersubband transition algorithm.
E_P
= 22.0
! [eV]
E_P
is Kane's matrix element EP = | < S | p | X > |2.
It
should be around 20 eV and depends on the material.
The E_P [eV] parameter is given in the database by the specifier
8x8kp-parameters .
E_P can be converted into the P paramter by the following equation:
EP = 2m0/hbar2 * P2
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.
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-vector-1 = 1.0 0.0 0.0
polarization-vector-2 = 0.0 1.0 0.0
x y z coordinates (in simulation system) for first/second in-plane vector
Example:
- 1D well, inter-band
polarization-vector-1 = 1.0 0.0 0.0
polarization-vector-2 = 0.0 1.0 0.0
magnitude-relation-1-2 = 1.0
- 1D well, intra-band
polarization-vector-1 = 0.0 0.0
1.0
polarization-vector-2 = 0.0 0.0 1.0
magnitude-relation-1-2 = 0.0
Note: Intraband absorption only for z-polarized light.
How to specify x-polarized light:
polarization-vector-1 = 0.0 1.0 0.0
! x y z coordinates (in simulation system) for first in-plane vector
polarization-vector-2 = 1.0 0.0 0.0
! x y z coordinates (in simulation system) for second in-plane vector
magnitude-relation-1-2 = 0.0
! relation of magnitudes |E1|/|E2|
(In this case, polarization-vector-1 is ignored as
|E1| is set to be zero.)
How to specify z-polarized light:
polarization-vector-1 = 1.0 0.0 0.0
! x y z coordinates (in simulation system) for first in-plane vector
polarization-vector-2 = 0.0 0.0 1.0
! x y z coordinates (in simulation system) for second in-plane vector
magnitude-relation-1-2 = 0.0
! relation of magnitudes |E1|/|E2|
(In this case, polarization-vector-1 is ignored as
|E1| is set to be zero.)
How to specify circularly polarized light [(x,z) plane]:
polarization-vector-1 = 1.0 0.0 0.0
! x y z coordinates (in simulation system) for first in-plane vector
polarization-vector-2 = 0.0 0.0 1.0
! x y z coordinates (in simulation system) for second in-plane vector
magnitude-relation-1-2 = 1.0
! relation of magnitudes |E1|/|E2|
(In this case, polarization-vector-1 is not ignored as
|E1|=|E2| .)
magnitude-relation-1-2 = 1.0
relation of magnitudes |E1|/|E2|
phase
= 0.5
phase: E2-> exp(i*phase*Pi)*E2
fermi_in_el
= 0.0 ! [eV]
optional input for Fermi level of electrons (default: calculated Fermi
level)
fermi_in_hl
= 0.0 ! [eV]
optional input for Fermi level of holes
(default: calculated Fermi level)
device_thickness_in = 1e-6 ! [m]
optional input of device thickness for normalization of absorption
k-space-symmetry =
default ! (default)
=
none !
=
four-fold !
Symmetry of k|| = (kx,ky) space to be
discretized. If any symmetry is present, less k|| 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.
Results:
The units of the optical absorption are [1/m] and not "arbitrary units" as
indicated in the figure.
- The electric susceptibility tensor 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.
- In step 3, for each electron (
el ) and for each hole
(hl ) eigenvalue (i.e. ev00* ), the
energy dispersion E(kx,ky) is written out to the
following files:
optics/kp_optics_el_dispersionAVS2D_ev001.fld, *.coord,
*.dat
...
optics/kp_optics_hl_dispersionAVS2D_ev001.fld, *.coord, *.dat
...
The format of the files is compatible to the AVS/Express software.
The following figure shows the energy dispersion E(kx,ky)
of the highest hole eigenstate (ground state).
The units of the k|| space grid coordinates kx
and ky are [1/Angstrom] 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||=(kx,ky=0))
and [11] (i.e. kx=ky) directions in k||
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
The following flags are useful for solar cell simulations (photovoltaics).
incident-light-along-direction = x !
incident light along x direction
= y !
incident light along y direction
= z !
incident light along z direction
= -x !
incident light along -x direction
= -y !
incident light along -y direction
= -z !
incident light along -z direction
In a 1D simulation, this specifier is optional. For 2D, and 3D, a
direction must be specified.
Solar spectrum
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)
import-solar-spectrum
= yes
= no
!file-solar-spectrum
= H:\solar_cells\ASTMG173_AM10.dat ! AM 1.0 spectrum (extraterrestrial)
!file-solar-spectrum
= H:\solar_cells\ASTMG173_AM15.dat ! AM 1.5 spectrum
file-solar-spectrum
= H:\solar_cells\ASTMG173_AM15G.dat ! AM 1.5G spectrum
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]
...
...
number-of-suns
= 1.0
! 1 sun
= 2.5
! 2.5 suns
= 10.0
! 10 suns
= 1000.0
! 1000 suns
To increase the power of the solar spectrum in order to model
concentrator solar cells.
Absorption coefficient
import-absorption-spectrum =
yes
= no
file-absorption-spectrum =
AbsorptionCoefficient_GaAs_300K.dat
The file must consist of two columns (wavelength and absorption
coefficient), the units are [nm] and [1/cm] .
wavelength[nm] absorption[1/cm]
...
...
Reflection coefficient
Fraction of incident photons that are reflected from surface for a particular
wavelength.
import-reflectivity-spectrum =
yes
= no
file-reflectivity-spectrum =
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 =
yes
= no
file-transmission-spectrum =
ReflectionCoefficient_GaAs_300K.dat
The file must consist of two columns (wavelength and transmission
coefficient), the units are [nm] and [] .
wavelength[nm] transmission[]
...
...
Black body spectrum
calculate-black-body-spectrum =
yes
= no
Calculates 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 m2 and
per unit solid angle sr (sr = steradian)) and
- the spectral irradiance (which is received per m2)
is calculated.
Note: spectral irradiance = spectral radiance * pi
spectral energy density =
spectral radiance * 4pi/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 w = 2pi v 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 v 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 v 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.
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 )
optics/Absorption_coefficient.dat
(as read in from file but now in units of [1/m])
optics/Absorption_coefficient_interpolated.dat (interpolated on
wavelength grid of solar spectrum but now in units of [1/m])
optics/Reflectivity.dat
(as read in from file)
optics/Reflectivity_interpolated.dat
(interpolated on wavelength grid of solar spectrum)
optics/Transmission.dat
(as read in from file)
optics/Transmission_interpolated.dat
(interpolated on wavelength grid of 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 photons in the solar spectrum above an energy
value contributing to the maximum photo current 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)
optics/SpectralResponse_sun0001.dat
external and internal spectral response
optics/QuantumEfficiency_sun0001.dat
external and internal quantum efficiency
optics/GenerationRateLight_AVS_sun0001.fld 2D
plots GenerationRate(x,lambda) and GenerationRate(x,E)
optics/GenerationRateLight_sun0001.dat
1D plot GenerationRate(x)
optics/GenerationRate_eV_sun0001.dat
1D plot GenerationRate(E) (E=energy)
optics/GenerationRate_Wavelength_sun0001.dat 1D plot
GenerationRate(lambda)
current/IV_characteristics_new.dat
voltage[V] current[A/m^2] ... power[W/m^2] powersolar[W/m^2]
efficiency[%]
****************************************************************************************
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).
****************************************************************************************
|