In this section of the tutorial, we will compute the electrical conductivity, carrier mobility tensors as well as the Seebeck coefficient and thermal conductivity. PERTURBO can compute these quantities using the relaxation time approximantion (RTA) of the Boltzmann transport equation (BTE): calc_mode = 'trans-rta'.

Another, more accurate, but also more expensive method is the iterative approach (ITA) to fully solve the linearized BTE: calc_mode = 'trans-ita'. The RTA and ITA calculations can be carried out in the presence of magnetic field: calc_mode = 'trans-mag-rta' and calc_mode = 'trans-mag-ita'.

## Relaxation time approximation (RTA)calc_mode = ‘trans-rta’

Requires the same variables as those specified in the calculation mode 'setup', except for the following two variables:

• calc_mode: set to 'trans-rta' or 'trans'

Here is the input file (pert.in):

&perturbo
prefix      = 'si'
calc_mode   = 'trans-rta'

boltz_kdim(1) = 80
boltz_kdim(2) = 80
boltz_kdim(3) = 80

boltz_emin = 6.4
boltz_emax = 6.9
band_min = 5
band_max = 6

ftemper  = 'si.temper'

boltz_nstep = 0  ! optional
/


Before running perturbo.x, remember to put the following files in the run directory:

Run perturbo.x:

$mpirun -n 1 perturbo.x -npools 1 -i pert.in > pert.out  This calculation usually takes a few minutes. We obtain five output files: • ‘prefix’.cond contains the conductivity and mobility tensors for each configuration in the temper file • ‘prefix’.tdf contains transport distribution function (TDF) as a function of carrier energy and temperature • ‘prefix’_tdf.h5 includes all the information of the TDF and occupation changes for each configuration in HDF5 format • ‘prefix’.trans_coef contains the conductivity, mobility, Seebeck coefficient and thermal conductivity tensors • pert_output.yml is the YAML output file containing information about the input and output parameters as well as the conductivity and mobility In our example, the output file is si.cond, which is shown here: #==========================================================# # Conductivity (1/Ohm/m) # #----------------------------------------------------------# # T (K) E_f(eV) n_c (cm^-3) sigma_xx sigma_xy sigma_yy sigma_xz sigma_yz sigma_zz 300.00 6.55048 0.99458E+18 0.235555E+05 -0.744950E-06 0.235555E+05 -0.126413E-06 -0.247918E-04 0.235555E+05 #==========================================================# # Mobility (cm^2/V/s) # #--------------------(for semiconductor)-------------------# # T (K) E_f(eV) n_c (cm^-3) mu_xx mu_xy mu_yy mu_xz mu_yz mu_zz 300.00 6.55048 0.99458E+18 0.147822E+04 -0.467493E-07 0.147822E+04 -0.793302E-08 -0.155581E-05 0.147822E+04  The calculated electron mobility at 300 K is ~ 1478 cm2V-1s-1, in reasonably good agreement with the experimental value of roughly 1400 cm2V-1s-1. The second output file is si.tdf, whose format is shown below:  # E(eV) (-df/dE) (a.u.) TDF(E)_(xx xy yy xz yz zz) (a.u.) # # Temperature: 300.0000 Chemical Potential: 6.550482 6.632612 2.0230556858340698E+01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 ...... ......  Column 1 is the carrier energy (eV), column 2 is the energy derivative of Fermi-Dirac distribution at the energy given by column 1, and columns 3-8 are the TDF values for each energy (same as conductivity, TDF has six components, usually the longitudinal component is plotted), respectively. The data for each temperature and chemical potential combination is given in a separate block of the file. In this case, we look at one temperature and one concentration, so there is only one block in the file. Please refer to the calc_mode='trans-pp'  to see the description of the ‘prefix’.trans_coef output file. In more rigorous calculations, the user will need to converge the conductivity and mobility with respect to the number of $$\mathbf{k}$$ and $$\mathbf{q}$$ points, namely the variables boltz_kdim and boltz_qdim. An example for hole carriers is also provided, in the folder “example02-silicon-perturbo/perturbo/pert-trans-RTA-hole”. ## Full solution: Iterative approach (ITA)calc_mode = ‘trans-ita’ Requires the same input file variables as the calculation mode 'setup', except for the following 6 variables: • calc_mode: is set to 'trans-ita' • boltz_nstep: contains the maximum number of iterations in the iterative scheme for solving Boltzmann equation, where a typical value is 10 • phfreq_cutoff: contains phonon threshold (meV). Phonons with energy smaller than the cutoff will be ignored. • delta_smear: contains broadening (meV) for a Gaussian function to present the Dirac delta function • tmp_dir: contains output directory containing the e-ph matrix elements used in the calculations • load_scatter_eph: if .true., it will read the e-ph matrix elements from tmp_dir. The default is .false. Here is the input file (pert.in): &perturbo prefix = 'si' calc_mode = 'trans-ita' boltz_kdim(1) = 80 boltz_kdim(2) = 80 boltz_kdim(3) = 80 boltz_emin = 6.4 boltz_emax = 6.9 band_min = 5 band_max = 6 ftemper = 'si.temper' tmp_dir = './tmp' !load_scatter_eph = .true. boltz_nstep = 10 !max number of iterations phfreq_cutoff = 1 !meV delta_smear = 10 !meV /  Before running the ITA calculation, make sure that the following files are in the run directory : • ‘prefix’_epwan.h5: here si_epwan.h5 • ftemper: here si.temper • ‘prefix’_tet.h5: here si_tet.h5 export OMP_NUM_THREADS=4$ mpirun -n 8 perturbo.x -npools 8 -i pert.in > pert.out


This task is time-consuming using one thread and one MPI process on a single core. To speed up the calculations, we run it on multiple cores using hybrid MPI plus OpenMP parallelization. After the calculation has completed, we obtain 5 output files, ‘prefix’.cond, ‘prefix’.tdf, ‘prefix’_tdf.h5, ‘prefix’.trans_coef, and pert_output.yml, similar to the RTA calculation.

An example calculation for holes is also provided in the folder “example02-silicon-perturbo/perturbo/pert-trans-ITA-hole”, link.

## Magnetic RTAcalc_mode = ‘trans-mag-rta’

Requires the same input file variables as the calculation mode 'trans-rta', except for the following variables:

• calc_mode: is set to 'trans-mag-rta'
• boltz_nstep: Note that in the magnetic Boltzmann equation, RTA requires a finite number of iterations.

Here is the input file (pert.in):

&perturbo
prefix      = 'si'
calc_mode   = 'trans-mag-rta'

boltz_kdim(1) = 80
boltz_kdim(2) = 80
boltz_kdim(3) = 80

boltz_emin = 6.4
boltz_emax = 6.9
band_min = 5
band_max = 6

ftemper  = 'si.temper'

boltz_nstep = 10 !max number of iterations
/


Before running the calculation, make sure that the following files are in the run directory :

• ‘prefix’_epwan.h5: here si_epwan.h5
• ftemper: here si.temper
• ‘prefix’_tet.h5: here si_tet.h5
• ‘prefix’.imsigma: here si.imsigma (optional but recommended for faster calculations)

The ‘prefix’.temper file needs to be modified to include magnetic fields. Add the $$x$$, $$y$$, and $$z$$ values of magnetic fields (in Tesla) in the last three columns of the temper file.

1 F                                  ! Bx   By   Bz
300.00   6.5504824219   0.9945847E+18  0.00 0.00 0.01


Run PERTURBO:

export OMP_NUM_THREADS=4
$mpirun -n 8 perturbo.x -npools 8 -i pert.in > pert.out  We run the calculation on multiple cores using hybrid MPI plus OpenMP parallelization. After the calculation has completed, we obtain 5 output files, ‘prefix’.cond, ‘prefix’.tdf, and ‘prefix’_tdf.h5, ‘prefix’.trans_coef, and pert_output.yml . Because all elements of the conductivity tensor are independent in a non-zero magnetic field, the ‘prefix’.cond file prints out all 9 elements of the conductivity and mobility tensors.  #==========================================================# # Conductivity (1/Ohm/m) # #----------------------------------------------------------# # T (K) E_f(eV) n_c (cm^-3) sigma_xx sigma_xy sigma_yy sigma_xz sigma_yz sigma_zz sigma_yx sigma_zx sigma_zy 300.00 6.55048 0.99458E+18 0.235554E+05 -0.353835E+02 0.235554E+05 0.169392E-04 -0.324052E-04 0.235555E+05 0.353972E+02 0.235280E-02 -0.101837E-02 #--------------------iterative process---------------------# #iter. sigma_xx sigma_xy sigma_yy sigma_xz sigma_yz sigma_zz sigma_yx sigma_zx sigma_zy # 1 0.235555E+05 -0.744950E-06 0.235555E+05 -0.126413E-06 -0.247918E-04 0.235555E+05 -0.744950E-06 -0.126413E-06 -0.247918E-04 # 2 0.235554E+05 -0.353835E+02 0.235554E+05 0.169392E-04 -0.324052E-04 0.235555E+05 0.353972E+02 0.235280E-02 -0.101837E-02 #----------------------------------------------------------# #==========================================================# # Mobility (cm^2/V/s) # #--------------------(for semiconductor)-------------------# # T (K) E_f(eV) n_c (cm^-3) mu_xx mu_xy mu_yy mu_xz mu_yz mu_zz mu_yx mu_zx mu_zy 300.00 6.55048 0.99458E+18 0.147822E+04 -0.222049E+01 0.147822E+04 0.106302E-05 -0.203359E-05 0.147822E+04 0.222135E+01 0.147650E-03 -0.639081E-04  In a magnetic calculation, the Seebeck and thermal conductivity tensors are not computed. Hence, the ‘prefix’.trans_coef file only contains the conductivity and mobility tensors.  #==========================================================# # Conductivity (1/Ohm/m) # #----------------------------------------------------------# # T (K) E_f(eV) n_c (cm^-3) sigma_xx sigma_xy sigma_yy sigma_xz sigma_yz sigma_zz sigma_yx sigma_zx sigma_zy 300.00 6.55048 0.99458E+18 0.235554E+05 -0.353835E+02 0.235554E+05 0.169392E-04 -0.324052E-04 0.235555E+05 0.353972E+02 0.235280E-02 -0.101837E-02 #==========================================================# # Mobility (cm^2/V/s) # #--------------------(for semiconductor)-------------------# # T (K) E_f(eV) n_c (cm^-3) mu_xx mu_xy mu_yy mu_xz mu_yz mu_zz mu_yx mu_zx mu_zy 300.00 6.55048 0.99458E+18 0.147822E+04 -0.222049E+01 0.147822E+04 0.106302E-05 -0.203359E-05 0.147822E+04 0.222135E+01 0.147650E-03 -0.639081E-04  ## Magnetic ITAcalc_mode = ‘trans-mag-ita’ Requires the same input file variables as the calculation mode 'trans-ita', except for the following variable: • calc_mode: set to 'trans-mag-ita' Here is the input file (pert.in): &perturbo prefix = 'si' calc_mode = 'trans-mag-ita' boltz_kdim(1) = 80 boltz_kdim(2) = 80 boltz_kdim(3) = 80 boltz_emin = 6.4 boltz_emax = 6.9 band_min = 5 band_max = 6 ftemper = 'si.temper' tmp_dir = './tmp' !load_scatter_eph = .true. boltz_nstep = 10 !max number of iterations phfreq_cutoff = 1 !meV delta_smear = 10 !meV /  Before running the calculation, make sure that the following files are in the run directory : • ‘prefix’_epwan.h5: here si_epwan.h5 • ftemper: here si.temper • ‘prefix’_tet.h5: here si_tet.h5 • ‘prefix’.imsigma: here si.imsigma (optional) Like in the calculation mode 'trans-mag-rta', the ‘prefix’.temper file needs to be modified to include magnetic fields. Add the $$x$$, $$y$$, and $$z$$ values of magnetic fields (in Tesla) in the last three columns of the temper file. 1 F !Bx By Bz 300.00 6.5504824219 0.9945847E+18 0.00 0.00 0.01  Run PERTURBO: export OMP_NUM_THREADS=4$ mpirun -n 8 perturbo.x -npools 8 -i pert.in > pert.out


We run the calculation on multiple cores using hybrid MPI plus OpenMP parallelization. After the calculation has completed, we obtain 5 output files, ‘prefix’.cond, ‘prefix’.tdf, and ‘prefix’_tdf.h5, ‘prefix’.trans_coef, and pert_output.yml . The format of the output files is the same as in the calculation mode 'trans-mag-rta'.

## Postprocessing of transportcalc_mode = ‘trans-pp’

Uses the similar input file to the 'trans' calculation modes, but requires the additional file ‘prefix’_tdf.h5 obtained in the 'trans' calculation.

Change the calculation mode in the input file to 'trans-pp'. Before running perturbo.x, make sure that four files exist in the current directory:

• ‘prefix’_epwan.h5: here si_epwan.h5
• ftemper: here si.temper
• ‘prefix’_tet.h5: here si_tet.h5
• ‘prefix’_tdf.h5: here si_tdf.h5

Run perturbo.x:

\$ mpirun -n 1 perturbo.x -npools 1 -i pert.in > pert.out


It takes a few seconds. We obtain a file, ‘prefix’.trans_coef, in this case, si.trans_coef, which has the following format:

         #==========================================================#
#                  Conductivity (1/Ohm/m)                  #
#----------------------------------------------------------#

#  T (K)   E_f(eV)   n_c (cm^-3)      sigma_xx       sigma_xy       sigma_yy       sigma_xz       sigma_yz       sigma_zz
300.00   6.55048   0.99458E+18    0.251810E+05  -0.106635E+00   0.251823E+05  -0.172325E+00   0.142428E+00   0.251812E+05

#==========================================================#
#                    Mobility (cm^2/V/s)                   #
#--------------------(for semiconductor)-------------------#

#  T (K)   E_f(eV)   n_c (cm^-3)       mu_xx          mu_xy          mu_yy          mu_xz          mu_yz          mu_zz
300.00   6.55048   0.99458E+18    0.158023E+04  -0.669186E-02   0.158031E+04  -0.108143E-01   0.893806E-02   0.158025E+04

#==========================================================#
#                Seebeck coefficient (mV/K)                #
#----------------------------------------------------------#

#  T (K)   E_f(eV)   n_c (cm^-3)        S_xx           S_xy           S_yy           S_xz           S_yz           S_zz
300.00   6.55048   0.99458E+18   -0.428128E+00  -0.125064E-06  -0.428127E+00   0.500669E-07  -0.531919E-07  -0.428128E+00

#==========================================================#
#                Thermal conductivity (W/m/K)              #
#------------------(Electronic contribution)---------------#

#  T (K)   E_f(eV)   n_c (cm^-3)      kappa_xx       kappa_xy       kappa_yy       kappa_xz       kappa_yz       kappa_zz
300.00   6.55048   0.99458E+18    0.686130E-01  -0.143531E-06   0.686131E-01  -0.142782E-06  -0.114048E-07   0.686144E-01


The two blocks for the conductivity and mobility are the same as those in the 'trans' calculation mode, but the output file of 'trans-pp' has an additional block with the Seebeck coefficient results.

An example calculation for holes is also provided in the folder
“example02-silicon-perturbo/perturbo/pert-trans-pp-hole”.