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’
'setup'
and then 'imsigma'
since this calculation mode relies on their outputs. If the ‘prefix’.imsigma file is absent, the calculation will proceed by computing scattering rates on the fly, which is more computationally expensive.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:
- ‘prefix’_epwan.h5: here si_epwan.h5
- ftemper: here si.temper obtained in the
'setup'
calculation - ‘prefix’_tet.h5: here si_tet.h5 obtained in the
'setup'
calculation - ‘prefix’.imsigma: here si.imsigma obtained in the
'imsigma'
calculation
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’
'setup'
since this calculation mode relies on their outputs. The ‘prefix’.imsigma file is optional, use it as a starting point for the iterative process if present.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.
OMP_NUM_THREADS
to the total number of cores of the computing node, and set the MPI process per node to 1.An example calculation for holes is also provided in the folder “example02-silicon-perturbo/perturbo/pert-trans-ITA-hole”, link.
Magnetic RTA
calc_mode = ‘trans-mag-rta’
'setup'
since this calculation mode relies on their outputs. The ‘prefix’.imsigma file is optional, but speeds up the calculation significantly since otherwise the matrix elements and scattering rates are computed on the fly.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 ITA
calc_mode = ‘trans-mag-ita’
'setup'
since this calculation mode relies on their outputs. The ‘prefix’.imsigma file is optional, use it as a starting point for the iterative process if present.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 transport
calc_mode = ‘trans-pp’
'trans'
calculations. However, since this step is very quick, we provide a dedicated calculation mode for the case of a manual modifications of the ‘prefix’_tdf.h5 or other scenarios when only this step is required.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”.