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’_epr.h5: here si_epr.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 the following two output files:
- ‘prefix’_tdf.h5 includes all the information of the TDF and occupation changes for each configuration in HDF5 format
- pert_output.yml is the YAML output file containing information about the input and output parameters as well as the conductivity and mobility
The outputted YAML file, here called si_trans-rta.yml, contains the inputs and outputs of the 'trans-rta'
calculation. The fields labeled trans contains the information unique to the 'trans-rta'
calculation. For information on fields common to all Perturbo calculations, see this page.
The first section of the trans field is given below.
trans:
temperature units: K
chemical potential units: eV
concentration units: cm-3
conductivity units: 1/Ohm/m
mobility units: cm2/V/s
Seebeck coefficient units: mV/K
# Electronic contribution
# Not well tested, use with caution
thermal conductivity units: W/m/K
# Configuration means one line in the temper file:
# temperature efermi concentration
number of configurations: 5
The first few fields are self-explanatory and give information on the units used in the rest of the si_trans-rta.yml file.
The main results for each configuration index are shown in the configuration index field below. Note that in this case, we only used one configuration.
configuration index:
1:
temperature: 150.00000
chemical potential: 6.6083300781
concentration: 0.1021448E+19
conductivity:
components:
xx: 0.12523028E+06
xy: -0.66306464E+00
yy: 0.12523632E+06
xz: -0.63777879E+00
yz: 0.49996202E+00
zz: 0.12523116E+06
yx: -0.66306464E+00
zx: -0.63777879E+00
zy: 0.49996202E+00
tensor:
- [ 0.12523028E+06, -0.66306464E+00, -0.63777879E+00, ]
- [ -0.66306464E+00, 0.12523632E+06, 0.49996202E+00, ]
- [ -0.63777879E+00, 0.49996202E+00, 0.12523116E+06, ]
mobility:
components:
......
tensor:
- [ 0.76521302E+04, -0.40516216E-01, -0.38971137E-01, ]
- [ -0.40516216E-01, 0.76524996E+04, 0.30549916E-01, ]
- [ -0.38971137E-01, 0.30549916E-01, 0.76521841E+04, ]
Seebeck coefficient:
components:
......
tensor:
......
# Thermal conductivity: not well tested, use with caution
thermal conductivity:
components:
......
tensor:
- [ 0.17035066E+00, -0.72217031E-06, -0.42527057E-06, ]
- [ -0.72217031E-06, 0.17035564E+00, 0.11057464E-05, ]
- [ -0.42527057E-06, 0.11057464E-05, 0.17035078E+00, ]
2:
.......
Under the configuration index field, data for each of the configurations from the ftemper file are given. Note that all tensors (conductivity, mobility, Seebeck coefficient, and thermal conductivity), are given by components under the components field, and in tensor form under the tensor field. The results are identical, but are presented in both forms for clarity.
- The temperature in K units, chemical potential in eV units, and carrier concentration in cm^{3} units defining the configuration are listed.
- Under the conductivity field, the conductivity tensor computed for the configuration is given in Ohm^{-1} m^{-1} units.
- Under the mobility field, the mobility tensor computed for the configuration is given in cm^{2}V^{-1}m^{-1} units.
- Under the Seebeck coefficient field, the Seebeck coefficient tensor computed for the configuration is given in mV K^{-1} units.
- Under the thermal conductivity field, the thermal conductivity tensor computed for the configuration is given in W m^{-1} ^K^ units. Please note that this calculation is not well tested and should be used with caution.
The calculated electron mobility at 300 K is ~ 1478 cm^{2}V^{-1}s^{-1}, in reasonably good agreement with the experimental value of roughly 1400 cm^{2}V^{-1}s^{-1}.
Two additional fields are grid field and scatter parallelization fields, which give information on the number of \(\mathbf{k}\) points and their distribution across the MPI tasks.
grid:
number of tetrahedra selected: 76296
number of reducible k-points: 15975
number of irreducible k-points: 450
scatter parallelization:
MPI task index:
1:
number of q-points: 121781
number of (k,q) pairs: 4977063
......
16:
number of q-points: 122520
number of (k,q) pairs: 4981812
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.
We may next use Perturbopy to export the data from the YAML file to Python for postprocessing. For more details, see the Perturbopy tutorial.
- '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'.trans_coef contains the conductivity, mobility, Seebeck coefficient and thermal conductivity tensors
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’_epr.h5: here si_epr.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 output files, ‘prefix’_tdf.h5, and ‘prefix’_trans-ita.yml, similar to the RTA calculation.
The outputted YAML file, here called si_trans-ita.yml, contains the inputs and outputs of the 'trans-ita'
calculation. The field labeled trans contains the information unique to the 'trans-ita'
calculation. For information on fields common to all Perturbo calculations, see this page.
The trans field of the ‘prefix’_trans-ita.yml file is identical to the trans field of the trans-rta example but contains an additional field iteration for each configuration:
configuration index:
1:
# (see trans-RTA section for details)
......
number of iterations: 4
iteration:
1:
conductivity:
components:
xx: 0.24817300E+05
xy: -0.10178186E+00
yy: 0.24817960E+05
xz: -0.79157444E-01
yz: 0.39313206E-01
zz: 0.24817360E+05
yx: -0.10178186E+00
zx: -0.79157444E-01
zy: 0.39313206E-01
tensor:
- [ 0.24817300E+05, -0.10178186E+00, -0.79157444E-01, ]
- [ -0.10178186E+00, 0.24817960E+05, 0.39313206E-01, ]
- [ -0.79157444E-01, 0.39313206E-01, 0.24817360E+05, ]
......
4:
conductivity:
components:
......
tensor:
- [ 0.25389272E+05, -0.31056698E-01, -0.20778462E+00, ]
- [ -0.31056698E-01, 0.25390489E+05, 0.59898721E-01, ]
- [ -0.20778462E+00, 0.59898721E-01, 0.25389500E+05, ]
......
The additional iteration field is present for each configuration. In the this field, the conductivity tensors computed during each ITA iteration are given in Ohm^{-1} m^{-1} units. There are 4 iterations in this case. Note that again, it is given in two forms: by components under the components field, and in tensor form under the tensor field.
OMP_NUM_THREADS
to the total number of cores of the computing node, and set the MPI process per node to 1.We may next use Perturbopy to export the data from the YAML file to Python for postprocessing. For more details, see the Perturbopy tutorial.
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’_epr.h5: here si_epr.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 ‘prefix’_tdf.h5 and si_trans-mag-rta.yml .
The outputted YAML file, here called si_trans-mag-rta.yml, contains the inputs and outputs of the 'trans-mag-rta'
calculation. The fields labeled trans contains the information unique to the 'trans-mag-rta'
calculation. For information on fields common to all Perturbo calculations, see this page.
Please see the trans-rta example for information on the trans field, and see the trans-ita example for information on the additional iterations field. The ‘prefix’_trans-mag-rta.yml has the following additional data entries specifying the magnetic field.
trans:
......
magnetic field units: T
......
configuration index:
1:
......
magnetic field: [ 0.10000, 0.00000, 0.00000, ]
......
The only difference is that now, for each configuration, the magnetic field is printed in Tesla units; also, the Seebeck coefficient and thermal conductivity tensors are not computed. Also note that all elements of the conductivity and mobility tensors are independent in a non-zero magnetic field.
The calculated electron mobility at 300 K is ~ 1478 cm^{2}V^{-1}s^{-1}, in reasonably good agreement with the experimental value of roughly 1400 cm^{2}V^{-1}s^{-1}.
We may next use Perturbopy to export the data from the YAML file to Python for postprocessing. For more details, see the Perturbopy tutorial.
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’_epr.h5: here si_epr.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 ‘prefix’_mag-ita.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’_epr.h5: here si_epr.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 may next use Perturbopy to export the data from the YAML file to Python for postprocessing. For more details, see the Perturbopy tutorial.
'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”.