nextnano.com
 nextnano≥
 Download | SearchCopyright | Publications
 * password protected

 

nextnano≥ software

 

  Optical absorption

 

 

 
Up
 

www.nextnano.com/documentation/tools/nextnano3/reference/input_file/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 Lorentzian.
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).
     ****************************************************************************************