Phonon-limited mobility¶
This tutorial discusses how to compute phonon-limited carrier mobilities in semiconductors within the self-energy relaxation time approximation (SERTA) and the momentum relaxation time approximation (MRTA), taking the specific case of AlAs as an example.
It is assumed the user has already completed the two tutorials RF1 and RF2, and that he/she is familiar with the calculation of ground state and response properties, in particular phonons, Born effective charges and dielectric tensor. The user should have read the introduction tutorial for the EPH code before running these examples.
This lesson should take about 1.5 hour.
Formalism¶
Before starting, it is worth summarizing the most important equations implemented in the code. For a more detailed description of the ABINIT implementation, please consult [Brunin2020b].
Our goal is to find an approximated solution to the linearized Boltzmann transport equation (BTE) [Ashcroft1976] within the SERTA/MRTA approximation [Giustino2017]. SERTA/MRTA are more accurate than the constant relaxation time approximation (CRTA) as the microscopic e-ph scattering mechanism is now included thus leading to carrier lifetimes \(\tau\) that depend on the band index \(n\) and the wavevector \(\kk\). Keep in mind, however, that both SERTA and MRTA are still a approximated solutions to the BTE and that a more rigorous approach would require to solve the BTE iteratively and/or the inclusion of many-body effects at different levels. For a review of the different possible approaches see the review paper [Ponce2020].
In the SERTA, the transport linewidth is given by the imaginary part of the electron-phonon (e-ph) self-energy evaluated at the KS energy [Giustino2017]. The linewidth of the electron state \(n\kk\) due to the scattering with phonons is given by
where \(\nu\) is the phonon mode, \(m\) the final electron state (after the scattering), \(n_\qnu(T)\) is the Bose-Einstein occupation number, \(f_{m\kk+\qq}(T, \ef)\) is the Fermi-Dirac occupation function, \(\enk\) is the energy of the electron state, and \(\wqnu\) is the phonon frequency for the phonon wavevector \(\qq\). The integration is performed over the BZ for the phonon wavectors and \(\gkkp\) is the e-ph matrix element. Only the Fan-Migdal (FM) part contributes to the linewidth as the Debye-Waller term is Hermitian.
In the SERTA, the transport lifetime \(\tau_{n\mathbf{k}}\) is inversely proportional to the e-ph self-energy linewidth:
In the MRTA, the back-scattering is included by expressing the transport lifetime as:
where \(\vnka\) is the \(\alpha\)-th Cartesian component of the velocity operator
that can be computed with DFPT.
Important
Note that the present formalism does not take into account contributions to the transport lifetime given by other scattering processes such as defects, ionized impurities in doped semiconductors, e-e interaction, grain boundary scattering etc. These effects may be relevant depending on the system and/or the temperature under investigation but they are not treated in this tutorial as here we are mainly focusing on room temperature and non-degenerate semiconductors, conditions in which e-ph scattering is one of the most important contributions.
Last but not least, we are assuming that carriers can be described by Bloch states with a well-defined excitation energy (band picture). Polaronic effects such as those discussed in this tutorial are not captured by the present approach.
The generalized transport coefficients are defined by:
These quantities can be used to obtain different transport tensors such as the electrical conductivity \(\sigma\), Peltier (\(\Pi\)) and Seebeck coefficient (S), and charge carrier contribution to the thermal conductivity tensors [Madsen2018]. The electrical conductivity tensor, for instance, is given by
and can be divided into hole and electron contributions
where \(n_e\) and \(n_h\) are the electron and hole concentrations in the conduction and valence bands respectively, and \(\mu_e\) and \(\mu_h\) are the electron and hole mobilities, which can be obtained by selecting the conduction or valences states \(n\) in Eq. \eqref{eq:transport_lc}.
For electrons, we have
where \(n\in\text{CB}\) denotes states in the conduction bands. Similar expressions hold for holes. At zero total carrier concentration, the Fermi level \(\ef\) is located inside the band gap so that \(n_e = n_h\).
A typical computation of mobilities requires different steps that are summarized in the introduction page for the EPH code. Here we only describe the e-ph related part, i.e the blue-box in the workflow presented in the previous page. For this purpose, we use eph_task -4 to compute only the imaginary part of the SE at the KS energy and explain other important aspects related to this kind of calculation.
All the results of the calculation are saved in netcdf format in the SIGPEPH.nc file, while the main output file is used to output selected quantities, mainly for testing purposes. Post-processing and visualisation tools are provided by AbiPy. See e.g. the README of AbiPy and the AbiPy tutorials.
Note
Supposing you made your own installation of ABINIT, the input files to run the examples are in the ~abinit/tests/ directory where ~abinit is the absolute path of the abinit top-level directory. If you have NOT made your own install, ask your system administrator where to find the package, especially the executable and test files.
In case you work on your own PC or workstation, to make things easier, we suggest you define some handy environment variables by executing the following lines in the terminal:
export ABI_HOME=Replace_with_absolute_path_to_abinit_top_level_dir # Change this line
export PATH=$ABI_HOME/src/98_main/:$PATH # Do not change this line: path to executable
export ABI_TESTS=$ABI_HOME/tests/ # Do not change this line: path to tests dir
export ABI_PSPDIR=$ABI_TESTS/Pspdir/ # Do not change this line: path to pseudos dir
Examples in this tutorial use these shell variables: copy and paste
the code snippets into the terminal (remember to set ABI_HOME first!) or, alternatively,
source the set_abienv.sh
script located in the ~abinit directory:
source ~abinit/set_abienv.sh
The ‘export PATH’ line adds the directory containing the executables to your PATH so that you can invoke the code by simply typing abinit in the terminal instead of providing the absolute path.
To execute the tutorials, create a working directory (Work*
) and
copy there the input files of the lesson.
Most of the tutorials do not rely on parallelism (except specific tutorials on parallelism). However you can run most of the tutorial examples in parallel with MPI, see the topic on parallelism.
Ground state and phonons of fcc AlAs¶
Before beginning, you might consider creating a different subdirectory to work in. Why not create Work_eph4mob ?
The file teph4mob_1.abi is the input file for the first step (GS + DFPT perturbations for all the \(\qq\)-points in the IBZ). Copy it to the working directory with:
cd $ABI_TUTORESPFN/Input
mkdir Work_eph4mob
cd Work_eph4mob
cp ../teph4mob_1.abi .
# Crystalline AlAs: computation of the phonon spectrum ndtset 10 # Set 1: ground state self-consistency getwfk1 0 # Cancel default kptopt1 1 # Automatic generation of k points, taking # into account the symmetry nqpt1 0 # Cancel default tolvrs1 1.0d-18 # SCF stopping criterion (modify default) rfphon1 0 # Cancel default # Q vectors for all datasets # Complete set of symmetry-inequivalent qpt chosen to be commensurate # with the kpt mesh so that only one set of GS wave functions is needed. # Generated automatically by running GS calculation with # # kptopt = 1 # nshift = 0 # shiftk = 0 0 0 # # (to include gamma) and taking output kpt set file. # Set nstep=1 so that only one iteration is performed or use `abinit ... --dry-run` command line option. nqpt 1 # One qpt for each dataset (only 0 or 1 allowed) # This is the default for all datasets and must # be explicitly turned off for dataset 1. qpt2 0.00000000E+00 0.00000000E+00 0.00000000E+00 qpt3 0.00000000E+00 0.00000000E+00 0.00000000E+00 qpt4 2.50000000E-01 0.00000000E+00 0.00000000E+00 qpt5 5.00000000E-01 0.00000000E+00 0.00000000E+00 qpt6 2.50000000E-01 2.50000000E-01 0.00000000E+00 qpt7 5.00000000E-01 2.50000000E-01 0.00000000E+00 qpt8 -2.50000000E-01 2.50000000E-01 0.00000000E+00 qpt9 5.00000000E-01 5.00000000E-01 0.00000000E+00 qpt10 -2.50000000E-01 5.00000000E-01 2.50000000E-01 # Set 2: Response function calculation of d/dk wave function iscf2 -3 # Need this non-self-consistent option for d/dk kptopt2 2 # Modify default to use time-reversal symmetry rfphon2 0 # Cancel default rfelfd2 2 # Calculate d/dk wave function only tolwfr2 1.0d-22 # Use wave function residual criterion instead # Set 3: Response function calculation of Q=0 phonons and electric field perturbation. getddk3 2 # Take d/dk wave functions from last dataset kptopt3 2 # Modify default to use time-reversal symmetry rfelfd3 3 # Electric-field perturbation response only # Sets 4-10: Finite-wave-vector phonon calculations (defaults for all datasets) getwfk 1 # Use GS wave functions from dataset 1 kptopt 3 # Need full k-point set for finite-Q response rfphon 1 # Do phonon response tolvrs 1.0d-8 # This default is active for sets 3-10 ####################################################################### # Common input variables # Definition of the unit cell acell 3*10.61 # This is equivalent to 10.61 10.61 10.61 rprim 0.0 0.5 0.5 # In tutorials 1 and 2, these primitive vectors 0.5 0.0 0.5 # (to be scaled by acell) were 1 0 0 0 1 0 0 0 1 0.5 0.5 0.0 # that is, the default. # Definition of the atom types ntypat 2 # There are two types of atom znucl 13 33 # The keyword "znucl" refers to the atomic number of the # possible type(s) of atom. The pseudopotential(s) # mentioned in the "files" file must correspond # to the type(s) of atom. Here, type 1 is the Aluminum, # type 2 is the Arsenic. # Definition of the atoms natom 2 # There are two atoms typat 1 2 # The first is of type 1 (Al), the second is of type 2 (As). xred 0.0 0.0 0.0 0.25 0.25 0.25 # Gives the number of band, explicitly (do not take the default) nband 4 # Exchange-correlation functional ixc 1 # LDA Teter Pade parametrization # Definition of the planewave basis set ecut 3.0 # Maximal kinetic energy cut-off, in Hartree # This is way too low!! # Definition of the k-point grid ngkpt 4 4 4 nshiftk 4 # Use one copy of grid only (default) shiftk 0.0 0.0 0.5 # This gives the usual fcc Monkhorst-Pack grid 0.0 0.5 0.0 0.5 0.0 0.0 0.5 0.5 0.5 # Definition of the SCF procedure nstep 25 # Maximal number of SCF cycles diemac 9.0 # Although this is not mandatory, it is worth to # precondition the SCF cycle. The model dielectric # function used as the standard preconditioner # is described in the "dielng" input variable section. # The dielectric constant of AlAs is smaller that the one of Si (=12). pp_dirpath "$ABI_PSPDIR" pseudos "13al.981214.fhi, PseudosTM_pwteter/33as.pspnc" ############################################################## # This section is used only for regression testing of ABINIT # ############################################################## #%%<BEGIN TEST_INFO> #%% [setup] #%% executable = abinit #%% exclude_builders = eos_nvhpc_*, eos_gnu_13.2_serial #%% test_chain = teph4mob_1.abi, teph4mob_2.abi, teph4mob_3.abi, teph4mob_4.abi, teph4mob_5.abi, teph4mob_6.abi, teph4mob_7.abi, #%% [files] #%% files_to_test = #%% teph4mob_1.abo, tolnlines= 90, tolabs= 3.000e-02, tolrel= 6.000e-03 #%% [paral_info] #%% max_nprocs = 2 #%% [extra_info] #%% authors = G. Brunin, M. Giantomassi #%% keywords = NC, DFPT, EPH #%% description = #%% Preparatory steps for computing phonon-limited mobility in semiconductors #%%<END TEST_INFO>
This step might be quite time-consuming so you may want to immediately start the job in background with:
abinit teph4mob_1.abi > teph4mob_1.log 2> err &
The calculation is done for AlAs, the same crystalline material as in the first two DFPT tutorials. For further details about this first step, please refer to the first and second tutorials on DFPT.
Important
Since AlAs is a polar semiconductor, we need to compute with DFPT the Born effective charges \(\bm{Z}^*\) as well and the static dielectric tensor \(\bm{\ee}^\infty\). These quantities are then used to treat the long-range (LR) part of the dynamical matrix in the Fourier interpolation of the phonon frequencies as well as in the Fourier interpolation of the DFPT potentials, as discussed in the EPH introduction.
Merging the derivative databases and potentials¶
Once the DFPT calculation is completed, use the mrgddb tool to merge the eight partial DDB files corresponding to datasets 3-10 of teph4mob_1. These partial DDB files contain the dynamical matrices for the 8 \(\qq\)-points in the IBZ, as well as the dielectric tensor and the Born effective charges. Name the new DDB file teph4mob_2_DDB.
File $ABI_TUTORESPFN/Input/teph4mob_2.abi is an example of input file for mrgddb.
teph4mob_2_DDB AlAs phonons on 4 4 4 mesh 8 teph4mob_1o_DS3_DDB teph4mob_1o_DS4_DDB teph4mob_1o_DS5_DDB teph4mob_1o_DS6_DDB teph4mob_1o_DS7_DDB teph4mob_1o_DS8_DDB teph4mob_1o_DS9_DDB teph4mob_1o_DS10_DDB ############################################################## # This section is used only for regression testing of ABINIT # ############################################################## #%%<BEGIN TEST_INFO> #%% [setup] #%% executable = mrgddb #%% exclude_builders = eos_nvhpc_*, eos_gnu_13.2_serial #%% test_chain = teph4mob_1.abi, teph4mob_2.abi, teph4mob_3.abi, teph4mob_4.abi, teph4mob_5.abi, teph4mob_6.abi, teph4mob_7.abi, #%% [files] #%% files_to_test = #%% teph4mob_2.stdout, tolnlines= 57, tolabs= 3.000e-02, tolrel= 6.000e-03 #%% [paral_info] #%% max_nprocs = 1 #%% [extra_info] #%% authors = G. Brunin, M. Giantomassi #%% keywords = NC, DFPT, EPH #%% description = Merge DDB files #%%<END TEST_INFO>
Copy the file in the Work_eph4mob directory, and run mrgddb using:
mrgddb < teph4mob_2.abi
Tip
Alternatively, one can specify the name of the output DDB and the list of input DDB files to be merged directly via the command line. This approach is quite handy especially if used in conjuction with shell globbing and the “star” syntax:
mrgddb teph4mob_2_DDB teph4mob_1o_DS*_DDB
Use mrgddb –help to access the documentation.
Now use the mrgdv tool to merge the 29 DFPT POT files corresponding to datasets 3-10 of teph4mob_1. Name the new file teph4mob_3_DVDB.
File $ABI_TUTORESPFN/Input/teph4mob_3.abi is an example of input file for mrgdv.
teph4mob_3_DVDB 29 teph4mob_1o_DS3_POT1 teph4mob_1o_DS3_POT4 teph4mob_1o_DS3_POT10 teph4mob_1o_DS4_POT1 teph4mob_1o_DS4_POT2 teph4mob_1o_DS4_POT4 teph4mob_1o_DS4_POT5 teph4mob_1o_DS5_POT1 teph4mob_1o_DS5_POT2 teph4mob_1o_DS5_POT4 teph4mob_1o_DS5_POT5 teph4mob_1o_DS6_POT1 teph4mob_1o_DS6_POT4 teph4mob_1o_DS7_POT1 teph4mob_1o_DS7_POT2 teph4mob_1o_DS7_POT3 teph4mob_1o_DS7_POT4 teph4mob_1o_DS7_POT5 teph4mob_1o_DS7_POT6 teph4mob_1o_DS8_POT1 teph4mob_1o_DS8_POT3 teph4mob_1o_DS8_POT4 teph4mob_1o_DS8_POT6 teph4mob_1o_DS9_POT1 teph4mob_1o_DS9_POT4 teph4mob_1o_DS10_POT1 teph4mob_1o_DS10_POT2 teph4mob_1o_DS10_POT4 teph4mob_1o_DS10_POT5 ############################################################## # This section is used only for regression testing of ABINIT # ############################################################## #%%<BEGIN TEST_INFO> #%% [setup] #%% executable = mrgdv #%% exclude_builders = eos_nvhpc_*, eos_gnu_13.2_serial #%% test_chain = teph4mob_1.abi, teph4mob_2.abi, teph4mob_3.abi, teph4mob_4.abi, teph4mob_5.abi, teph4mob_6.abi, teph4mob_7.abi #%% [files] #%% files_to_test = #%% teph4mob_3.stdout, tolnlines= 57, tolabs= 3.000e-02, tolrel= 6.000e-03 #%% [paral_info] #%% max_nprocs = 1 #%% [extra_info] #%% authors = G. Brunin, M. Giantomassi #%% keywords = NC, DFPT, EPH #%% description = Merge DFPT potentials to generate DVDB database. #%%<END TEST_INFO>
You can copy it in the Work_eph4mob directory, and then merge the files with:
mrgdv < teph4mob_3.abi
Tip
Alternatively, one can use the command line.
mrgdv merge teph4mob_3_DVDB teph4mob_1o_DS*_POT*
Use mrgdv –help to access the documentation.
We now have all the phonon-related files needed to compute the mobility. The DDB will be used to Fourier interpolate the phonon frequencies on an arbitrarily dense \(\qq\)-mesh while the DVDB will be used to Fourier interpolate the DFPT scattering potentials [Brunin2020b]. The only ingredient that is still missing is the WFK file with the GS wavefunctions on the dense \(\kk\)-mesh.
Warning
In real computations, you should always compute the electronic band structure along a \(\kk\)-path to have a qualitative understanding of the band dispersion, the position of the band edges, and the value of the band gap(s). Note also that there are several parts of the EPH code in which it is assumed that no vibrational instability is present so you should always look at the phonon spectrum computed by the code. Do not expect to obtain meaningful results if purely imaginary phonon frequencies (a.k.a negative frequencies) are present.
Calculation of the dense WFK file¶
Converging transport properties requires careful convergence tests both for \(\kk\)-points and \(\qq\)-points. A dense \(\qq\)-mesh is needed to obtain high-quality lifetimes, whereas a dense \(\kk\)-sampling is needed to have a good sampling of the electron (hole) pockets. All these studies are explained later and left as an additional excercise. In this tutorial, indeed, we need to find some compromise between accuracy and computational cost hence a single \(\kk\)-mesh is used in all our examples.
The computation of the dense WFK file is similar to a NSCF band structure computation. The main difference is that we need wavefunctions on a \(\kk\)-mesh instead of a \(\kk\)-path because these wavevectors are needed to evaluate integrals in the BZ. The file $ABI_TUTORESPFN/Input/teph4mob_4.abi is an example of such computation.
# Crystalline AlAs : computation of the dense WFK ndtset 3 # General input data for GS and WFK ecut 3 nband 8 # Ground state ngkpt1 4 4 4 nshiftk 1 shiftk 0.0 0.0 0.0 tolvrs1 1.0d-18 prtwf 1 # need GS wavefunctions for further runs kptopt 1 prtden1 1 kptopt1 1 # Automatic generation of k points, taking # into account the symmetry # Dense WFK iscf2 -2 getden2 1 ngkpt2 24 24 24 tolwfr2 1.0d-20 # Denser WFK for the double-grid iscf3 -2 getden3 1 ngkpt3 48 48 48 tolwfr3 1.0d-20 ####################################################################### # Common input variables # Definition of the unit cell acell 3*10.61 # This is equivalent to 10.61 10.61 10.61 rprim 0.0 0.5 0.5 # In tutorials 1 and 2, these primitive vectors 0.5 0.0 0.5 # (to be scaled by acell) were 1 0 0 0 1 0 0 0 1 0.5 0.5 0.0 # that is, the default. # Definition of the atom types ntypat 2 # There are two types of atom znucl 13 33 # The keyword "znucl" refers to the atomic number of the # possible type(s) of atom. The pseudopotential(s) # mentioned in the "files" file must correspond # to the type(s) of atom. Here, type 1 is the Aluminum, # type 2 is the Arsenic. # Definition of the atoms natom 2 # There are two atoms typat 1 2 # The first is of type 1 (Al), the second is of type 2 (As). xred 0.0 0.0 0.0 0.25 0.25 0.25 # Exchange-correlation functional ixc 1 # LDA Teter Pade parametrization # Definition of the SCF procedure nstep 25 # Maximal number of SCF cycles diemac 9.0 # Although this is not mandatory, it is worth to # precondition the SCF cycle. The model dielectric # function used as the standard preconditioner # is described in the "dielng" input variable section. # The dielectric constant of AlAs is smaller that the one of Si (=12). pp_dirpath "$ABI_PSPDIR" pseudos "13al.981214.fhi, PseudosTM_pwteter/33as.pspnc" ############################################################## # This section is used only for regression testing of ABINIT # ############################################################## #%%<BEGIN TEST_INFO> #%% [setup] #%% executable = abinit #%% exclude_builders = eos_nvhpc_*, eos_gnu_13.2_serial #%% test_chain = teph4mob_1.abi, teph4mob_2.abi, teph4mob_3.abi, teph4mob_4.abi, teph4mob_5.abi, teph4mob_6.abi, teph4mob_7.abi #%% [files] #%% files_to_test = #%% teph4mob_4.abo, tolnlines= 57, tolabs= 3.000e-02, tolrel= 6.000e-03 #%% [paral_info] #%% max_nprocs = 4 #%% [extra_info] #%% authors = G. Brunin, M. Giantomassi #%% keywords = NC, DFPT, EPH #%% description = Generation of WFK files on dense k-meshes to prepare mobility calculations #%%<END TEST_INFO>
It consists of two parts:
- the first one (dataset 1) computes the GS wavefunctions,
- the second one (datasets 2-3) computes the dense WFK that will be used to compute mobilities. We also compute another (denser) WFK file that will be used with the double-grid method explained later. As we are mainly interested in electron mobilities (conduction bands) we need to include enough empty bands in the NSCF WFK computation (nband = 8).
Copy the file in the Work_eph4mob directory, and run ABINIT:
abinit teph4mob_4.abi > teph4mob_4.log 2> err &
Important
In the last part of the tutorial, we explain how to avoid the NSCF computation for all the \(\kk\)-points in the IBZ and produce a partial WFK file containing only the wavevectors relevant for transport properties. This trick is crucial to reach dense meshes but can also be used for coarser meshes if you want to accelerate the NSCF part and reduced the size of the WFK file.
Calculation of the mobility¶
We begin by explaining how to specify the basic input variables required for a standard mobility calculation. The file $ABI_TUTORESPFN/Input/teph4mob_5.abi is an example of such computation.
# Crystalline AlAs: computation of the intrinsic mobility # General input for e-ph computations optdriver 7 # Enter e-ph code eph_task -4 # Compute only the imaginary part of the self-energy occopt 3 # Fermi-Dirac occupation function # This corresponds to the physical temperature for electrons # Definition of the meshes ngkpt 24 24 24 # k-mesh used to generate the WFK nshiftk 1 shiftk 0.0 0.0 0.0 ddb_ngqpt 4 4 4 # q-mesh used for the phonons (from DDB) eph_ngqpt_fine 24 24 24 # Interpolate e-ph matrix elements in q-space # on the same mesh as the k-grid getwfk_filepath "teph4mob_4o_DS2_WFK" # Read the dense WFK file getddb_filepath "teph4mob_2_DDB" # We need the DDB and DVDB getdvdb_filepath "teph4mob_3_DVDB" ############################################ # Variables related to transport properties ############################################ tmesh 5.0 59.0 6 # List of Temperatures for which the mobility will be computed # Change this depending on the concentration you want eph_doping -1e+15 # in |e| cm^-3 sigma_erange 0 0.15 eV # We compute the lifetimes of electrons only, # in an energy window of 0.15 eV from the CBM mixprec 1 # We use single precision in some parts. # It does not affect the precision of the result # but helps decreasing the memory requirements. boxcutmin 1.1 # Use boxcutmin 1.1 to decrease the memory # requirements. Check that it does not affect # your results by increasing this (up to 2 max). #eph_intmeth 2 # Use of the tetrahedron method (default) ####################################################################### # Common input variables # Definition of the planewave basis set ecut 3 nband 8 # Definition of the unit cell acell 3*10.61 # This is equivalent to 10.61 10.61 10.61 rprim 0.0 0.5 0.5 # In tutorials 1 and 2, these primitive vectors 0.5 0.0 0.5 # (to be scaled by acell) were 1 0 0 0 1 0 0 0 1 0.5 0.5 0.0 # that is, the default. # Definition of the atom types ntypat 2 # There are two types of atom znucl 13 33 # The keyword "znucl" refers to the atomic number of the # possible type(s) of atom. The pseudopotential(s) # mentioned in the "files" file must correspond # to the type(s) of atom. Here, type 1 is the Aluminum, # type 2 is the Arsenic. # Definition of the atoms natom 2 # There are two atoms typat 1 2 # The first is of type 1 (Al), the second is of type 2 (As). xred 0.0 0.0 0.0 0.25 0.25 0.25 pp_dirpath "$ABI_PSPDIR" pseudos "13al.981214.fhi, PseudosTM_pwteter/33as.pspnc" ############################################################## # This section is used only for regression testing of ABINIT # ############################################################## #%%<BEGIN TEST_INFO> #%% [setup] #%% executable = abinit #%% test_chain = teph4mob_1.abi, teph4mob_2.abi, teph4mob_3.abi, teph4mob_4.abi, teph4mob_5.abi, teph4mob_6.abi, teph4mob_7.abi #%% exclude_builders = eos_nvhpc_*, eos_gnu_13.2_serial #%% [files] #%% files_to_test = #%% teph4mob_5.abo, tolnlines= 80, tolabs= 600, tolrel= 6.000e-03 #%% [paral_info] #%% max_nprocs = 4 #%% [extra_info] #%% authors = G. Brunin, M. Giantomassi #%% keywords = NC, DFPT, EPH, RTA #%% description = #%% E-ph for mobility in semiconductors #%%<END TEST_INFO>
First of all, we need to read the WFK, the DDB and the DVDB files produced previously. Since it is not possible to run mobility calculations with a single input file and datasets, we use strings to specify the path of the input files:
getwfk_filepath "teph4mob_4o_DS2_WFK"
getddb_filepath "teph4mob_2_DDB"
getdvdb_filepath "teph4mob_3_DVDB"
Now copy the input file in the Work_eph4mob directory, and run the code with:
abinit teph4mob_5.abi > teph4mob_5.log 2> err &
The job should take \(\sim\)15 seconds on a recent CPU.
We now discuss the meaning of the e-ph variables in more detail:
-
optdriver 7 activates the EPH driver
-
eph_task -4 tells ABINIT that we only need the imaginary part of the e-ph self-energy at the KS energy.
-
The homogeneous \(\kk\)-mesh corresponding to the WFK file is specified by ngkpt 24 24 24. The code aborts with an error if ngkpt is not the same as the one found in the input WFK file. At present, multiple shifts (nshiftk > 1) are not supported.
-
ddb_ngqpt defines the initial \(\qq\)-grid used for the DFPT computation (4×4×4 in this example)
-
eph_ngqpt_fine defines the dense \(\qq\)-mesh where the scattering potentials are interpolated and the e-ph matrix elements are computed.
Warning
ngkpt and eph_ngqpt_fine should be commensurate. More specifically, ngkpt must be a multiple of the \(\qq\)-mesh (eph_ngqpt_fine) because the WFK should contain all the \(\kk\)- and \(\kq\)-points. In most cases, ngkpt == eph_ngqpt_fine. It is however possible to use fewer \(\qq\)-points. Note also that ngkpt does not necessarily correspond to the \(\kk\)-mesh used for the computation of transport quantities, see the following discussion.
-
We work within the rigid band approximation and introduce a small electron doping: eph_doping = -1e+15 that corresponds to 1e+15 electrons per cm\(^3\). To obtain results that are representative of the intrinsic mobility, we suggest to use a very small value, for instance \(10^{15}\) to \(10^{18}\) electrons per cm\(^3\). Alternatively, one can specify the doping via eph_extrael or eph_fermie. We also set occopt to 3 to correctly compute the location of the Fermi level using the Fermi-Dirac occupation function as we are dealing with the physical temperature and not a fictitious broadening for numerical integration purposes.
-
The list of physical temperatures is specified by tmesh.
Note
The computational cost increases with the number of temperatures although not necessarily in a linear fashion. For the initial convergence studies, we suggest to start from a relatively small number of temperatures covering the range of interest. The T-mesh can be densified aftwerwards while keeping the same T-range once converged parameters are found.
Note that transport properties at low temperatures are more difficult to converge as the derivative of the Fermi-Dirac distribution is strongly peaked around the Fermi level hence a very dense sampling is needed to converge the BZ integrals. In a nutshell, avoid low temperatures unless you are really interested in this regime.
-
By default, the code use the tetrahedron method [Bloechl1994] to perform the integration in \(\qq\)-mesh. This allows to efficiently filter out the \(\qq\)-points that do not contribute to the lifetimes since these transitions are not compatible with energy and crystalline-momentum conservation. The use of the tetrahedron method is automatically activated when eph_task is set to -4. It is possible to change this behaviour by using eph_intmeth albeit not recommended as the calculation will become significantly slower. If using the Gaussian method, one must converge the self-energy with respect to zcut (or eph_fsmear if eph_task is set to 1), By default, zcut is set to a very large value.
-
The sigma_erange variable defines the energy window, below the VBM and above the CBM, where the lifetimes will be computed. Since the mobility integrals involve the derivative of the Fermi-Dirac occupation function centered on the Fermi level, it is possible to restrict the computation to those \(\kk\)-points that contribute to the mobility integral. The value of the derivative, indeed, decreases rapidly as we go further from the Fermi level hence only the states close to the band edges contribute. This variable should be subject to a convergence study as explained in the next section.
- boxcutmin and mixprec are used to accelerate the computation, see the introductory tutorial.
We now examine the log file in detail. After the standard output of the input variables, the code reports the different parameters used for the treatment of the long-range part of the DFPT potentials: the Born effective charges, the high-frequency dielectric constant and the dynamical quadrupole tensor. Make sure to have all of them in order to obtain an accurate interpolation of the scattering potentials, see discussion in [Brunin2020].
Important
At present (November 28, 2024 ), the inclusion of the dynamical quadrupoles in the EPH code is not available in the public version so you should have the following in the log file:
Have dielectric tensor: yes
Have Born effective charges: yes
Have quadrupoles: no
Have electric field: no
The code then outputs different quantities. For instance, ABINIT finds the list of \(\kk\)-points belonging to the dense mesh that are located within the energy window (sigma_erange):
Found 3 k-points within erange: 0.000 0.150 (eV)
The value of the Fermi level (a.k.a electronic chemical potential \(\mu_e(T)\)) as a function of T is computed and printed afterwards. Make sure that \(\mu_e\) is far enough from the band edges so that the computed mobility can be considered as intrinsic: the values of D_v and D_c should be large compared to ~3 kT else you enter the degenerate regime or the highly-degenerate case (when the Fermi level is inside the bands) and additional physical phenomena start to play a role.
Position of CBM/VBM with respect to the Fermi level:
Notations: mu_e = Fermi level, D_v = (mu_e - VBM), D_c = (CBM - mu_e)
T(K) kT (eV) mu_e (eV) D_v (eV) D_c (eV)
5.0 0.000 3.521 1.165 0.004
64.0 0.006 3.475 1.118 0.051
123.0 0.011 3.428 1.071 0.098
182.0 0.016 3.379 1.023 0.146
241.0 0.021 3.328 0.972 0.197
300.0 0.026 3.274 0.918 0.251
ABINIT then reads the WFK file and interpolates the scattering potentials to obtain the e-ph matrix elements. The use of the tetrahedron method allows to significantly reduce the \(\qq\)-points:
qpoints_oracle: calculation of tau_nk will need: 15 q-points in the IBZ. (nqibz_eff / nqibz): 3.6 [%]
Once this is done, the code starts looping over the 3 \(\kk\)-points for which the lifetimes are needed.
Computing self-energy matrix elements for k-point: [ 4.5833E-01, 4.5833E-01, 0.0000E+00] [ 1 / 3 ]
You can find various information for each \(\kk\)-point, such as:
-
the total number of \(\qq\)-points in the irreducible zone defined by the little group of \(\kk\) (called IBZ(k) in the code),
-
the number of \(\qq\)-point in the \(\text{IBZ}_k\) contributing to the imaginary part of \(\Sigma_\nk\) (in most cases, this number will be much smaller than the total number of \(\qq\)-points in the \(\text{IBZ}_k\))
-
the wall-time each step takes.
Finally, we have the results for the lifetimes (TAU) in the teph4mob_5.abo file:
K-point: [ 4.5833E-01, 4.5833E-01, 0.0000E+00], T: 5.0 [K], mu_e: 3.521
B eKS SE2(eKS) TAU(eKS) DeKS
5 3.573 0.000 36639.9 0.000
.Version 10.2.4.2 of ABINIT, released Nov 2024. .(MPI version, prepared for a x86_64_linux_gnu13.2 computer) .Copyright (C) 1998-2024 ABINIT group . ABINIT comes with ABSOLUTELY NO WARRANTY. It is free software, and you are welcome to redistribute it under certain conditions (GNU General Public License, see ~abinit/COPYING or http://www.gnu.org/copyleft/gpl.txt). ABINIT is a project of the Universite Catholique de Louvain, Corning Inc. and other collaborators, see ~abinit/doc/developers/contributors.txt . Please read https://docs.abinit.org/theory/acknowledgments for suggested acknowledgments of the ABINIT effort. For more information, see https://www.abinit.org . .Starting date : Tue 19 Nov 2024. - ( at 18h37 ) - input file -> /home/buildbot/ABINIT3/eos_gnu_13.2_mpich/trunk_release-10.2/tests/TestBot_MPI1/tutorespfn_teph4mob_1-teph4mob_2-teph4mob_3-teph4mob_4-teph4mob_5-teph4mob_6-teph4mob_7/teph4mob_5.abi - output file -> teph4mob_5.abo - root for input files -> teph4mob_5i - root for output files -> teph4mob_5o Symmetries : space group F-4 3 m (#216); Bravais cF (face-center cubic) ================================================================================ Values of the parameters that define the memory need of the present run intxc = 0 ionmov = 0 iscf = 7 lmnmax = 3 lnmax = 3 mgfft = 8 mpssoang = 3 mqgrid = 3001 natom = 2 nloc_mem = 1 nspden = 1 nspinor = 1 nsppol = 1 nsym = 24 n1xccc = 2501 ntypat = 2 occopt = 3 xclevel = 1 - mband = 8 mffmem = 1 mkmem = 413 mpw = 79 nfft = 512 nkpt = 413 ================================================================================ P This job should need less than 6.695 Mbytes of memory. Rough estimation (10% accuracy) of disk space for files : _ WF disk file : 3.985 Mbytes ; DEN or POT disk file : 0.006 Mbytes. ================================================================================ -------------------------------------------------------------------------------- ------------- Echo of variables that govern the present computation ------------ -------------------------------------------------------------------------------- - - outvars: echo of selected default values - iomode0 = 0 , fftalg0 =512 , wfoptalg0 = 0 - - outvars: echo of global parameters not present in the input file - max_nthreads = 0 - -outvars: echo values of preprocessed input variables -------- acell 1.0610000000E+01 1.0610000000E+01 1.0610000000E+01 Bohr amu 2.69815390E+01 7.49215900E+01 boxcutmin 1.10000000E+00 ddb_ngqpt 4 4 4 ecut 3.00000000E+00 Hartree eph_extrael 4.42475831E-08 eph_ngqpt_fine 24 24 24 eph_task -4 - fftalg 512 istwfk 2 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 outvar_i_n : Printing only first 50 k-points. ixc 7 kpt 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.16666667E-02 0.00000000E+00 0.00000000E+00 8.33333333E-02 0.00000000E+00 0.00000000E+00 1.25000000E-01 0.00000000E+00 0.00000000E+00 1.66666667E-01 0.00000000E+00 0.00000000E+00 2.08333333E-01 0.00000000E+00 0.00000000E+00 2.50000000E-01 0.00000000E+00 0.00000000E+00 2.91666667E-01 0.00000000E+00 0.00000000E+00 3.33333333E-01 0.00000000E+00 0.00000000E+00 3.75000000E-01 0.00000000E+00 0.00000000E+00 4.16666667E-01 0.00000000E+00 0.00000000E+00 4.58333333E-01 0.00000000E+00 0.00000000E+00 5.00000000E-01 0.00000000E+00 0.00000000E+00 4.16666667E-02 4.16666667E-02 0.00000000E+00 8.33333333E-02 4.16666667E-02 0.00000000E+00 1.25000000E-01 4.16666667E-02 0.00000000E+00 1.66666667E-01 4.16666667E-02 0.00000000E+00 2.08333333E-01 4.16666667E-02 0.00000000E+00 2.50000000E-01 4.16666667E-02 0.00000000E+00 2.91666667E-01 4.16666667E-02 0.00000000E+00 3.33333333E-01 4.16666667E-02 0.00000000E+00 3.75000000E-01 4.16666667E-02 0.00000000E+00 4.16666667E-01 4.16666667E-02 0.00000000E+00 4.58333333E-01 4.16666667E-02 0.00000000E+00 5.00000000E-01 4.16666667E-02 0.00000000E+00 -4.58333333E-01 4.16666667E-02 0.00000000E+00 -4.16666667E-01 4.16666667E-02 0.00000000E+00 -3.75000000E-01 4.16666667E-02 0.00000000E+00 -3.33333333E-01 4.16666667E-02 0.00000000E+00 -2.91666667E-01 4.16666667E-02 0.00000000E+00 -2.50000000E-01 4.16666667E-02 0.00000000E+00 -2.08333333E-01 4.16666667E-02 0.00000000E+00 -1.66666667E-01 4.16666667E-02 0.00000000E+00 -1.25000000E-01 4.16666667E-02 0.00000000E+00 -8.33333333E-02 4.16666667E-02 0.00000000E+00 -4.16666667E-02 4.16666667E-02 0.00000000E+00 8.33333333E-02 8.33333333E-02 0.00000000E+00 1.25000000E-01 8.33333333E-02 0.00000000E+00 1.66666667E-01 8.33333333E-02 0.00000000E+00 2.08333333E-01 8.33333333E-02 0.00000000E+00 2.50000000E-01 8.33333333E-02 0.00000000E+00 2.91666667E-01 8.33333333E-02 0.00000000E+00 3.33333333E-01 8.33333333E-02 0.00000000E+00 3.75000000E-01 8.33333333E-02 0.00000000E+00 4.16666667E-01 8.33333333E-02 0.00000000E+00 4.58333333E-01 8.33333333E-02 0.00000000E+00 5.00000000E-01 8.33333333E-02 0.00000000E+00 -4.58333333E-01 8.33333333E-02 0.00000000E+00 -4.16666667E-01 8.33333333E-02 0.00000000E+00 -3.75000000E-01 8.33333333E-02 0.00000000E+00 outvar_i_n : Printing only first 50 k-points. kptrlatt 24 0 0 0 24 0 0 0 24 kptrlen 1.80057671E+02 mixprec 1 P mkmem 413 natom 2 nband 8 ngfft 8 8 8 nkpt 413 nsym 24 ntypat 2 occ 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 prtocc : prtvol=0, do not print more k-points. occopt 3 optdriver 7 rprim 0.0000000000E+00 5.0000000000E-01 5.0000000000E-01 5.0000000000E-01 0.0000000000E+00 5.0000000000E-01 5.0000000000E-01 5.0000000000E-01 0.0000000000E+00 sigma_erange 0.00000000E+00 5.51239881E-03 Hartree spgroup 216 symrel 1 0 0 0 1 0 0 0 1 0 -1 1 0 -1 0 1 -1 0 -1 0 0 -1 0 1 -1 1 0 0 1 -1 1 0 -1 0 0 -1 -1 0 0 -1 1 0 -1 0 1 0 -1 1 1 -1 0 0 -1 0 1 0 0 0 0 1 0 1 0 0 1 -1 0 0 -1 1 0 -1 -1 0 1 -1 1 0 -1 0 0 0 -1 0 1 -1 0 0 -1 1 1 0 -1 0 0 -1 0 1 -1 0 1 0 0 0 1 1 0 0 1 0 -1 0 1 -1 0 0 -1 0 -1 0 0 -1 1 1 -1 0 -1 0 1 -1 0 0 -1 1 0 0 1 0 1 0 0 0 0 1 0 0 -1 0 1 -1 1 0 -1 1 -1 0 0 -1 1 0 -1 0 0 0 1 1 0 0 0 1 0 -1 1 0 -1 0 0 -1 0 1 0 0 1 0 1 0 1 0 0 1 -1 0 0 -1 0 0 -1 1 0 0 -1 1 0 -1 0 1 -1 -1 1 0 -1 0 1 -1 0 0 typat 1 2 wtk 0.00007 0.00058 0.00058 0.00058 0.00058 0.00058 0.00058 0.00058 0.00058 0.00058 0.00058 0.00058 0.00029 0.00043 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00087 0.00043 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 0.00174 outvars : Printing only first 50 k-points. xangst 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 1.4036425458E+00 1.4036425458E+00 1.4036425458E+00 xcart 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 2.6525000000E+00 2.6525000000E+00 2.6525000000E+00 xred 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 2.5000000000E-01 2.5000000000E-01 2.5000000000E-01 znucl 13.00000 33.00000 ================================================================================ chkinp: Checking input parameters for consistency. ================================================================================ == DATASET 1 ================================================================== - mpi_nproc: 1, omp_nthreads: -1 (-1 if OMP is not activated) --- !DatasetInfo iteration_state: {dtset: 1, } dimensions: {natom: 2, nkpt: 413, mband: 8, nsppol: 1, nspinor: 1, nspden: 1, mpw: 79, } cutoff_energies: {ecut: 3.0, pawecutdg: -1.0, } electrons: {nelect: 8.00000000E+00, charge: 0.00000000E+00, occopt: 3.00000000E+00, tsmear: 1.00000000E-02, } meta: {optdriver: 7, eph_task: -4, } ... mkfilename: getwfk from: teph4mob_4o_DS2_WFK mkfilename: getddb from: teph4mob_2_DDB mkfilename: getdvdb from: teph4mob_3_DVDB Exchange-correlation functional for the present dataset will be: LDA: Perdew-Wang 92 LSD fit to Ceperley-Alder data - ixc=7 Citation for XC functional: J.P.Perdew and Y.Wang, PRB 45, 13244 (1992) - Reading GS states from WFK file: teph4mob_4o_DS2_WFK - Reading DDB from file: teph4mob_2_DDB - Reading DVDB from file: teph4mob_3_DVDB Changing occupation scheme as input occopt and tsmear differ from those read from WFK file. From WFK file: occopt = 1, tsmear = 0.010000 From input: occopt = 3, tsmear = 0.010000 Adding eph_extrael: 4.424758E-08 to input nelect: 8.000000E+00 Old fermi level: 1.134753E-01, with nelect: 8.000000E+00 New fermi level: 1.134753E-01, with nelect: 8.000000E+00 ==== Info on the Cryst% object ==== Real(R)+Recip(G) space primitive vectors, cartesian coordinates (Bohr,Bohr^-1): R(1)= 0.0000000 5.3050000 5.3050000 G(1)= -0.0942507 0.0942507 0.0942507 R(2)= 5.3050000 0.0000000 5.3050000 G(2)= 0.0942507 -0.0942507 0.0942507 R(3)= 5.3050000 5.3050000 0.0000000 G(3)= 0.0942507 0.0942507 -0.0942507 Unit cell volume ucvol= 2.9859750E+02 bohr^3 Angles (23,13,12)= 6.00000000E+01 6.00000000E+01 6.00000000E+01 degrees Time-reversal symmetry is present Reduced atomic positions [iatom, xred, symbol]: 1) 0.0000000 0.0000000 0.0000000 Al 2) 0.2500000 0.2500000 0.2500000 As DDB file with 8 blocks has been read. ================================================================================ Dielectric Tensor and Effective Charges anaddb : Zero the imaginary part of the Dynamical Matrix at Gamma, and impose the ASR on the effective charges The violation of the charge neutrality conditions by the effective charges is as follows : atom electric field displacement direction 1 1 -0.022872 0.000000 1 2 0.000000 0.000000 1 3 0.000000 0.000000 2 1 0.000000 0.000000 2 2 -0.022872 0.000000 2 3 -0.000000 0.000000 3 1 -0.000000 0.000000 3 2 -0.000000 0.000000 3 3 -0.022872 0.000000 Effective charge tensors after imposition of the charge neutrality (if requested by user), and eventual restriction to some part : atom displacement 1 1 2.115792E+00 -3.228956E-17 -3.258074E-17 1 2 -3.228956E-17 2.115792E+00 3.199839E-17 1 3 3.228956E-17 3.228956E-17 2.115792E+00 2 1 -2.115792E+00 3.228956E-17 3.258074E-17 2 2 3.228956E-17 -2.115792E+00 -3.199839E-17 2 3 -3.228956E-17 -3.228956E-17 -2.115792E+00 Now, the imaginary part of the dynamical matrix is zeroed - Found dielectric tensor and Born effective charges in DDB file: teph4mob_2_DDB - Cannot find quadrupole tensor in DDB file: teph4mob_2_DDB Values initialized with zeros. Homogeneous q point set in the B.Z. Grid q points : 64 1) 0.00000000E+00 0.00000000E+00 0.00000000E+00 2) 2.50000000E-01 0.00000000E+00 0.00000000E+00 3) 5.00000000E-01 0.00000000E+00 0.00000000E+00 4) -2.50000000E-01 0.00000000E+00 0.00000000E+00 5) 0.00000000E+00 2.50000000E-01 0.00000000E+00 6) 2.50000000E-01 2.50000000E-01 0.00000000E+00 7) 5.00000000E-01 2.50000000E-01 0.00000000E+00 8) -2.50000000E-01 2.50000000E-01 0.00000000E+00 9) 0.00000000E+00 5.00000000E-01 0.00000000E+00 10) 2.50000000E-01 5.00000000E-01 0.00000000E+00 11) 5.00000000E-01 5.00000000E-01 0.00000000E+00 12) -2.50000000E-01 5.00000000E-01 0.00000000E+00 13) 0.00000000E+00 -2.50000000E-01 0.00000000E+00 14) 2.50000000E-01 -2.50000000E-01 0.00000000E+00 15) 5.00000000E-01 -2.50000000E-01 0.00000000E+00 16) -2.50000000E-01 -2.50000000E-01 0.00000000E+00 17) 0.00000000E+00 0.00000000E+00 2.50000000E-01 18) 2.50000000E-01 0.00000000E+00 2.50000000E-01 19) 5.00000000E-01 0.00000000E+00 2.50000000E-01 20) -2.50000000E-01 0.00000000E+00 2.50000000E-01 21) 0.00000000E+00 2.50000000E-01 2.50000000E-01 22) 2.50000000E-01 2.50000000E-01 2.50000000E-01 23) 5.00000000E-01 2.50000000E-01 2.50000000E-01 24) -2.50000000E-01 2.50000000E-01 2.50000000E-01 25) 0.00000000E+00 5.00000000E-01 2.50000000E-01 26) 2.50000000E-01 5.00000000E-01 2.50000000E-01 27) 5.00000000E-01 5.00000000E-01 2.50000000E-01 28) -2.50000000E-01 5.00000000E-01 2.50000000E-01 29) 0.00000000E+00 -2.50000000E-01 2.50000000E-01 30) 2.50000000E-01 -2.50000000E-01 2.50000000E-01 31) 5.00000000E-01 -2.50000000E-01 2.50000000E-01 32) -2.50000000E-01 -2.50000000E-01 2.50000000E-01 33) 0.00000000E+00 0.00000000E+00 5.00000000E-01 34) 2.50000000E-01 0.00000000E+00 5.00000000E-01 35) 5.00000000E-01 0.00000000E+00 5.00000000E-01 36) -2.50000000E-01 0.00000000E+00 5.00000000E-01 37) 0.00000000E+00 2.50000000E-01 5.00000000E-01 38) 2.50000000E-01 2.50000000E-01 5.00000000E-01 39) 5.00000000E-01 2.50000000E-01 5.00000000E-01 40) -2.50000000E-01 2.50000000E-01 5.00000000E-01 41) 0.00000000E+00 5.00000000E-01 5.00000000E-01 42) 2.50000000E-01 5.00000000E-01 5.00000000E-01 43) 5.00000000E-01 5.00000000E-01 5.00000000E-01 44) -2.50000000E-01 5.00000000E-01 5.00000000E-01 45) 0.00000000E+00 -2.50000000E-01 5.00000000E-01 46) 2.50000000E-01 -2.50000000E-01 5.00000000E-01 47) 5.00000000E-01 -2.50000000E-01 5.00000000E-01 48) -2.50000000E-01 -2.50000000E-01 5.00000000E-01 49) 0.00000000E+00 0.00000000E+00 -2.50000000E-01 50) 2.50000000E-01 0.00000000E+00 -2.50000000E-01 51) 5.00000000E-01 0.00000000E+00 -2.50000000E-01 52) -2.50000000E-01 0.00000000E+00 -2.50000000E-01 53) 0.00000000E+00 2.50000000E-01 -2.50000000E-01 54) 2.50000000E-01 2.50000000E-01 -2.50000000E-01 55) 5.00000000E-01 2.50000000E-01 -2.50000000E-01 56) -2.50000000E-01 2.50000000E-01 -2.50000000E-01 57) 0.00000000E+00 5.00000000E-01 -2.50000000E-01 58) 2.50000000E-01 5.00000000E-01 -2.50000000E-01 59) 5.00000000E-01 5.00000000E-01 -2.50000000E-01 60) -2.50000000E-01 5.00000000E-01 -2.50000000E-01 61) 0.00000000E+00 -2.50000000E-01 -2.50000000E-01 62) 2.50000000E-01 -2.50000000E-01 -2.50000000E-01 63) 5.00000000E-01 -2.50000000E-01 -2.50000000E-01 64) -2.50000000E-01 -2.50000000E-01 -2.50000000E-01 The interatomic forces have been obtained Average speed of sound partial sums: 0.1673176172E-02 (at units) - = 3.6604 [km/s] Debye frequency from partial sums: 0.9757306393E-03 (Ha) - = 0.6419999198E+01 (THz) -Debye temperature from partial sums: 0.3081110011E+03 (K) - Writing phonon DOS to netcdf file: teph4mob_5o_PHDOS.nc --- Pseudopotential description ------------------------------------------------ - pspini: atom type 1 psp file is /home/buildbot/ABINIT3/eos_gnu_13.2_mpich/trunk_release-10.2/tests/Pspdir/13al.981214.fhi - pspatm: opening atomic psp file /home/buildbot/ABINIT3/eos_gnu_13.2_mpich/trunk_release-10.2/tests/Pspdir/13al.981214.fhi - Aluminum, fhi98PP : Hamann-type, LDA CA PerdewWang, l=2 local - 13.00000 3.00000 981214 znucl, zion, pspdat 6 7 2 2 493 0.00000 pspcod,pspxc,lmax,lloc,mmax,r2well No XC core correction. 1.024700 amesh (Hamman grid) pspatm : epsatm= 1.36305739 --- l ekb(1:nproj) --> 0 1.768744 1 0.900554 pspatm: atomic psp has been read and splines computed - pspini: atom type 2 psp file is /home/buildbot/ABINIT3/eos_gnu_13.2_mpich/trunk_release-10.2/tests/Pspdir/PseudosTM_pwteter/33as.pspnc - pspatm: opening atomic psp file /home/buildbot/ABINIT3/eos_gnu_13.2_mpich/trunk_release-10.2/tests/Pspdir/PseudosTM_pwteter/33as.pspnc - Troullier-Martins psp for element As Thu Oct 27 17:37:14 EDT 1994 - 33.00000 5.00000 940714 znucl, zion, pspdat 1 1 1 1 2001 0.00000 pspcod,pspxc,lmax,lloc,mmax,r2well 0 4.772 10.829 1 2.5306160 l,e99.0,e99.9,nproj,rcpsp 0.00000000 0.00000000 0.00000000 0.00000000 rms, ekb1, ekb2, epsatm 1 2.745 5.580 0 2.5306160 l,e99.0,e99.9,nproj,rcpsp 0.00000000 0.00000000 0.00000000 0.00000000 rms, ekb1, ekb2, epsatm 2.05731715564010 0.36322996461007 2.76014815959125 rchrg,fchrg,qchrg pspatm : epsatm= 27.20579911 --- l ekb(1:nproj) --> 0 0.838751 pspatm: atomic psp has been read and splines computed 2.28550852E+02 ecore*ucvol(ha*bohr**3) -------------------------------------------------------------------------------- === Gaps, band edges and relative position wrt Fermi level === Indirect band gap semiconductor Fundamental gap: 1.169 (eV) VBM: 2.356 (eV) at k: [ 0.0000E+00, 0.0000E+00, 0.0000E+00] CBM: 3.525 (eV) at k: [ 5.0000E-01, 5.0000E-01, 0.0000E+00] Direct gap: 2.355 (eV) at k: [ 0.0000E+00, 0.0000E+00, 0.0000E+00] Position of CBM/VBM with respect to the Fermi level: Notations: mu_e = Fermi level, D_v = (mu_e - VBM), D_c = (CBM - mu_e) T(K) kT (eV) mu_e (eV) D_v (eV) D_c (eV) 5.0 0.000 3.521 1.165 0.004 64.0 0.006 3.475 1.118 0.051 123.0 0.011 3.428 1.071 0.098 182.0 0.016 3.379 1.023 0.146 241.0 0.021 3.328 0.972 0.197 300.0 0.026 3.274 0.918 0.251 Number of bands in e-ph self-energy sum: 1 From bsum_start: 5 to bsum_stop: 5 Symsigma: 1 Timrev: 1 Method for q-space integration: Tetrahedron method Tolerance for integration weights < 1.000000E-12 1.000000E-12 eph_phwinfact: 1.10 Only the Imaginary part of Sigma will be computed. Number of frequencies along the real axis: 0 , Step: 0.000 [eV] Number of frequency in generalized Eliashberg functions: 0 Number of temperatures: 6 From: 5.000000E+00 to 3.000000E+02 [K] Ab-initio q-mesh from DDB file: [4, 4, 4] Q-mesh used for self-energy integration [ngqpt]: [24, 24, 24] Number of q-points in the IBZ: 413 asr: 1 chneut: 1 dipdip: 1 symdynmat: 1 Number of k-points for self-energy corrections: 3 sigma_erange: 0.000 0.150 (eV) Including all final {mk+q} states inside energy window: [3.470 3.664 ] [eV] List of k-points for self-energy corrections: 1 1 [ 4.5833E-01, 4.5833E-01, 0.0000E+00] 5 5 2 1 [ 5.0000E-01, 4.5833E-01, 0.0000E+00] 5 5 3 1 [ 5.0000E-01, 5.0000E-01, 0.0000E+00] 5 5 === MPI parallelism === P Allocating and summing bands from my_bsum_start: 5 up to my_bsum_stop: 5 P Number of CPUs for parallelism over perturbations: 1 P Number of perturbations treated by this CPU: 6 P Number of CPUs for parallelism over q-points: 1 P Number of q-points in the IBZ treated by this proc: 413 of 413 P Number of CPUs for parallelism over bands: 1 P Number of CPUs for parallelism over spins: 1 P Number of CPUs for parallelism over k-points: 1 P Number of k-point in Sigma_nk treated by this proc: 3 of 3 Cannot find eph_ngqpt_fine q-points in DVDB --> Activating Fourier interpolation. ================================================================================ Final results in eV. Notations: eKS: Kohn-Sham energy. eQP: quasi-particle energy. eQP - eKS: Difference between the QP and the KS energy. SE1(eKS): Real part of the self-energy computed at the KS energy, SE2 for imaginary part. Z(eKS): Renormalization factor. FAN: Real part of the Fan term at eKS. DW: Debye-Waller term. DeKS: KS energy difference between this band and band-1, DeQP same meaning but for eQP. OTMS: On-the-mass-shell approximation with eQP ~= eKS + Sigma(omega=eKS) TAU(eKS): Lifetime in femtoseconds computed at the KS energy. mu_e: Fermi level for given (T, nelect) K-point: [ 4.5833E-01, 4.5833E-01, 0.0000E+00], T: 5.0 [K], mu_e: 3.521 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.573 0.000 36716.3 0.000 ============================================================================================ K-point: [ 4.5833E-01, 4.5833E-01, 0.0000E+00], T: 64.0 [K], mu_e: 3.475 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.573 0.000 11130.0 0.000 ============================================================================================ K-point: [ 4.5833E-01, 4.5833E-01, 0.0000E+00], T: 123.0 [K], mu_e: 3.428 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.573 0.000 2822.6 0.000 ============================================================================================ K-point: [ 4.5833E-01, 4.5833E-01, 0.0000E+00], T: 182.0 [K], mu_e: 3.379 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.573 0.000 942.8 0.000 ============================================================================================ K-point: [ 4.5833E-01, 4.5833E-01, 0.0000E+00], T: 241.0 [K], mu_e: 3.328 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.573 0.001 472.8 0.000 ============================================================================================ K-point: [ 4.5833E-01, 4.5833E-01, 0.0000E+00], T: 300.0 [K], mu_e: 3.274 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.573 0.001 295.6 0.000 ============================================================================================ K-point: [ 5.0000E-01, 4.5833E-01, 0.0000E+00], T: 5.0 [K], mu_e: 3.521 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.608 0.001 487.7 0.000 ============================================================================================ K-point: [ 5.0000E-01, 4.5833E-01, 0.0000E+00], T: 64.0 [K], mu_e: 3.475 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.608 0.001 412.0 0.000 ============================================================================================ K-point: [ 5.0000E-01, 4.5833E-01, 0.0000E+00], T: 123.0 [K], mu_e: 3.428 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.608 0.001 316.5 0.000 ============================================================================================ K-point: [ 5.0000E-01, 4.5833E-01, 0.0000E+00], T: 182.0 [K], mu_e: 3.379 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.608 0.001 222.4 0.000 ============================================================================================ K-point: [ 5.0000E-01, 4.5833E-01, 0.0000E+00], T: 241.0 [K], mu_e: 3.328 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.608 0.002 158.6 0.000 ============================================================================================ K-point: [ 5.0000E-01, 4.5833E-01, 0.0000E+00], T: 300.0 [K], mu_e: 3.274 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.608 0.003 119.0 0.000 ============================================================================================ K-point: [ 5.0000E-01, 5.0000E-01, 0.0000E+00], T: 5.0 [K], mu_e: 3.521 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.525 0.000 999999.0 0.000 ============================================================================================ K-point: [ 5.0000E-01, 5.0000E-01, 0.0000E+00], T: 64.0 [K], mu_e: 3.475 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.525 0.000 999999.0 0.000 ============================================================================================ K-point: [ 5.0000E-01, 5.0000E-01, 0.0000E+00], T: 123.0 [K], mu_e: 3.428 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.525 0.000 39521.3 0.000 ============================================================================================ K-point: [ 5.0000E-01, 5.0000E-01, 0.0000E+00], T: 182.0 [K], mu_e: 3.379 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.525 0.000 9125.3 0.000 ============================================================================================ K-point: [ 5.0000E-01, 5.0000E-01, 0.0000E+00], T: 241.0 [K], mu_e: 3.328 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.525 0.000 4150.3 0.000 ============================================================================================ K-point: [ 5.0000E-01, 5.0000E-01, 0.0000E+00], T: 300.0 [K], mu_e: 3.274 B eKS SE2(eKS) TAU(eKS) DeKS 5 3.525 0.000 2492.2 0.000 ============================================================================================ Entering transport RTA computation driver. - Reading carrier lifetimes from: teph4mob_5o_SIGEPH.nc Indirect band gap semiconductor Fundamental gap: 1.169 (eV) VBM: 2.356 (eV) at k: [ 0.0000E+00, 0.0000E+00, 0.0000E+00] CBM: 3.525 (eV) at k: [ 5.0000E-01, 5.0000E-01, 0.0000E+00] Direct gap: 2.355 (eV) at k: [ 0.0000E+00, 0.0000E+00, 0.0000E+00] === Computation of DOS, VV_DOS and VVTAU_DOS === Linear tetrahedron method. Mesh step: 27.2 (meV) with npts: 49 From emin: 2.4 to emax: 3.7 (eV) Number of k-points in the IBZ: 413 edos%ief == 0 --> Cannot print quantities at the Fermi level. Transport (RTA) calculation results: Cartesian component of SERTA mobility tensor: xx Temperature [K] e/h density [cm^-3] e/h mobility [cm^2/Vs] 5.00 0.10E+16 0.00E+00 0.00 0.00 64.00 0.10E+16 0.00E+00 40.87 0.00 123.00 0.10E+16 0.00E+00 356.70 0.00 182.00 0.10E+16 0.00E+00 435.79 0.00 241.00 0.10E+16 0.00E+00 434.11 0.00 300.00 0.10E+16 0.25E+05 379.23 0.00 Cartesian component of SERTA mobility tensor: yy Temperature [K] e/h density [cm^-3] e/h mobility [cm^2/Vs] 5.00 0.10E+16 0.00E+00 0.00 0.00 64.00 0.10E+16 0.00E+00 40.87 0.00 123.00 0.10E+16 0.00E+00 356.70 0.00 182.00 0.10E+16 0.00E+00 435.79 0.00 241.00 0.10E+16 0.00E+00 434.11 0.00 300.00 0.10E+16 0.25E+05 379.23 0.00 Cartesian component of SERTA mobility tensor: zz Temperature [K] e/h density [cm^-3] e/h mobility [cm^2/Vs] 5.00 0.10E+16 0.00E+00 0.00 0.00 64.00 0.10E+16 0.00E+00 40.87 0.00 123.00 0.10E+16 0.00E+00 356.70 0.00 182.00 0.10E+16 0.00E+00 435.79 0.00 241.00 0.10E+16 0.00E+00 434.11 0.00 300.00 0.10E+16 0.25E+05 379.23 0.00 Cartesian component of MRTA mobility tensor: xx Temperature [K] e/h density [cm^-3] e/h mobility [cm^2/Vs] 5.00 0.10E+16 0.00E+00 0.00 0.00 64.00 0.10E+16 0.00E+00 39.78 0.00 123.00 0.10E+16 0.00E+00 375.46 0.00 182.00 0.10E+16 0.00E+00 471.05 0.00 241.00 0.10E+16 0.00E+00 469.77 0.00 300.00 0.10E+16 0.25E+05 411.40 0.00 Cartesian component of MRTA mobility tensor: yy Temperature [K] e/h density [cm^-3] e/h mobility [cm^2/Vs] 5.00 0.10E+16 0.00E+00 0.00 0.00 64.00 0.10E+16 0.00E+00 39.78 0.00 123.00 0.10E+16 0.00E+00 375.46 0.00 182.00 0.10E+16 0.00E+00 471.05 0.00 241.00 0.10E+16 0.00E+00 469.77 0.00 300.00 0.10E+16 0.25E+05 411.40 0.00 Cartesian component of MRTA mobility tensor: zz Temperature [K] e/h density [cm^-3] e/h mobility [cm^2/Vs] 5.00 0.10E+16 0.00E+00 0.00 0.00 64.00 0.10E+16 0.00E+00 39.78 0.00 123.00 0.10E+16 0.00E+00 375.46 0.00 182.00 0.10E+16 0.00E+00 471.05 0.00 241.00 0.10E+16 0.00E+00 469.77 0.00 300.00 0.10E+16 0.25E+05 411.40 0.00 - Writing RTA transport results to: teph4mob_5o_RTA.nc == END DATASET(S) ============================================================== ================================================================================ -outvars: echo values of variables after computation -------- acell 1.0610000000E+01 1.0610000000E+01 1.0610000000E+01 Bohr amu 2.69815390E+01 7.49215900E+01 boxcutmin 1.10000000E+00 ddb_ngqpt 4 4 4 ecut 3.00000000E+00 Hartree eph_extrael 4.42475831E-08 eph_ngqpt_fine 24 24 24 eph_task -4 etotal 0.0000000000E+00 fcart 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 - fftalg 512 ixc 7 kptrlatt 24 0 0 0 24 0 0 0 24 kptrlen 1.80057671E+02 mixprec 1 P mkmem 413 natom 2 nband 8 ngfft 8 8 8 nkpt 413 nsym 24 ntypat 2 occ 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 2.000000 2.000000 2.000000 2.000000 0.000000 0.000000 0.000000 0.000000 prtocc : prtvol=0, do not print more k-points. occopt 3 optdriver 7 rprim 0.0000000000E+00 5.0000000000E-01 5.0000000000E-01 5.0000000000E-01 0.0000000000E+00 5.0000000000E-01 5.0000000000E-01 5.0000000000E-01 0.0000000000E+00 sigma_erange 0.00000000E+00 5.51239881E-03 Hartree spgroup 216 strten 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 symrel 1 0 0 0 1 0 0 0 1 0 -1 1 0 -1 0 1 -1 0 -1 0 0 -1 0 1 -1 1 0 0 1 -1 1 0 -1 0 0 -1 -1 0 0 -1 1 0 -1 0 1 0 -1 1 1 -1 0 0 -1 0 1 0 0 0 0 1 0 1 0 0 1 -1 0 0 -1 1 0 -1 -1 0 1 -1 1 0 -1 0 0 0 -1 0 1 -1 0 0 -1 1 1 0 -1 0 0 -1 0 1 -1 0 1 0 0 0 1 1 0 0 1 0 -1 0 1 -1 0 0 -1 0 -1 0 0 -1 1 1 -1 0 -1 0 1 -1 0 0 -1 1 0 0 1 0 1 0 0 0 0 1 0 0 -1 0 1 -1 1 0 -1 1 -1 0 0 -1 1 0 -1 0 0 0 1 1 0 0 0 1 0 -1 1 0 -1 0 0 -1 0 1 0 0 1 0 1 0 1 0 0 1 -1 0 0 -1 0 0 -1 1 0 0 -1 1 0 -1 0 1 -1 -1 1 0 -1 0 1 -1 0 0 typat 1 2 xangst 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 1.4036425458E+00 1.4036425458E+00 1.4036425458E+00 xcart 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 2.6525000000E+00 2.6525000000E+00 2.6525000000E+00 xred 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 2.5000000000E-01 2.5000000000E-01 2.5000000000E-01 znucl 13.00000 33.00000 ================================================================================ - Timing analysis has been suppressed with timopt=0 ================================================================================ Suggested references for the acknowledgment of ABINIT usage. The users of ABINIT have little formal obligations with respect to the ABINIT group (those specified in the GNU General Public License, http://www.gnu.org/copyleft/gpl.txt). However, it is common practice in the scientific literature, to acknowledge the efforts of people that have made the research possible. In this spirit, please find below suggested citations of work written by ABINIT developers, corresponding to implementations inside of ABINIT that you have used in the present run. Note also that it will be of great value to readers of publications presenting these results, to read papers enabling them to understand the theoretical formalism and details of the ABINIT implementation. For information on why they are suggested, see also https://docs.abinit.org/theory/acknowledgments. - - [1] The Abinit project: Impact, environment and recent developments. - Computer Phys. Comm. 248, 107042 (2020). - X.Gonze, B. Amadon, G. Antonius, F.Arnardi, L.Baguet, J.-M.Beuken, - J.Bieder, F.Bottin, J.Bouchet, E.Bousquet, N.Brouwer, F.Bruneval, - G.Brunin, T.Cavignac, J.-B. Charraud, Wei Chen, M.Cote, S.Cottenier, - J.Denier, G.Geneste, Ph.Ghosez, M.Giantomassi, Y.Gillet, O.Gingras, - D.R.Hamann, G.Hautier, Xu He, N.Helbig, N.Holzwarth, Y.Jia, F.Jollet, - W.Lafargue-Dit-Hauret, K.Lejaeghere, M.A.L.Marques, A.Martin, C.Martins, - H.P.C. Miranda, F.Naccarato, K. Persson, G.Petretto, V.Planes, Y.Pouillon, - S.Prokhorenko, F.Ricci, G.-M.Rignanese, A.H.Romero, M.M.Schmitt, M.Torrent, - M.J.van Setten, B.Van Troeye, M.J.Verstraete, G.Zerah and J.W.Zwanzig - Comment: the fifth generic paper describing the ABINIT project. - Note that a version of this paper, that is not formatted for Computer Phys. Comm. - is available at https://www.abinit.org/sites/default/files/ABINIT20.pdf . - The licence allows the authors to put it on the Web. - DOI and bibtex: see https://docs.abinit.org/theory/bibliography/#gonze2020 - - [2] Ab initio pseudopotentials for electronic structure calculations of poly-atomic systems, - using density-functional theory. - M. Fuchs and, M. Scheffler, Comput. Phys. Commun. 119, 67 (1999). - Comment: Some pseudopotential generated using the FHI code were used. - DOI and bibtex: see https://docs.abinit.org/theory/bibliography/#fuchs1999 - - [3] ABINIT: Overview, and focus on selected capabilities - J. Chem. Phys. 152, 124102 (2020). - A. Romero, D.C. Allan, B. Amadon, G. Antonius, T. Applencourt, L.Baguet, - J.Bieder, F.Bottin, J.Bouchet, E.Bousquet, F.Bruneval, - G.Brunin, D.Caliste, M.Cote, - J.Denier, C. Dreyer, Ph.Ghosez, M.Giantomassi, Y.Gillet, O.Gingras, - D.R.Hamann, G.Hautier, F.Jollet, G. Jomard, - A.Martin, - H.P.C. Miranda, F.Naccarato, G.Petretto, N.A. Pike, V.Planes, - S.Prokhorenko, T. Rangel, F.Ricci, G.-M.Rignanese, M.Royo, M.Stengel, M.Torrent, - M.J.van Setten, B.Van Troeye, M.J.Verstraete, J.Wiktor, J.W.Zwanziger, and X.Gonze. - Comment: a global overview of ABINIT, with focus on selected capabilities . - Note that a version of this paper, that is not formatted for J. Chem. Phys - is available at https://www.abinit.org/sites/default/files/ABINIT20_JPC.pdf . - The licence allows the authors to put it on the Web. - DOI and bibtex: see https://docs.abinit.org/theory/bibliography/#romero2020 - - [4] Recent developments in the ABINIT software package. - Computer Phys. Comm. 205, 106 (2016). - X.Gonze, F.Jollet, F.Abreu Araujo, D.Adams, B.Amadon, T.Applencourt, - C.Audouze, J.-M.Beuken, J.Bieder, A.Bokhanchuk, E.Bousquet, F.Bruneval - D.Caliste, M.Cote, F.Dahm, F.Da Pieve, M.Delaveau, M.Di Gennaro, - B.Dorado, C.Espejo, G.Geneste, L.Genovese, A.Gerossier, M.Giantomassi, - Y.Gillet, D.R.Hamann, L.He, G.Jomard, J.Laflamme Janssen, S.Le Roux, - A.Levitt, A.Lherbier, F.Liu, I.Lukacevic, A.Martin, C.Martins, - M.J.T.Oliveira, S.Ponce, Y.Pouillon, T.Rangel, G.-M.Rignanese, - A.H.Romero, B.Rousseau, O.Rubel, A.A.Shukri, M.Stankovski, M.Torrent, - M.J.Van Setten, B.Van Troeye, M.J.Verstraete, D.Waroquier, J.Wiktor, - B.Xu, A.Zhou, J.W.Zwanziger. - Comment: the fourth generic paper describing the ABINIT project. - Note that a version of this paper, that is not formatted for Computer Phys. Comm. - is available at https://www.abinit.org/sites/default/files/ABINIT16.pdf . - The licence allows the authors to put it on the Web. - DOI and bibtex: see https://docs.abinit.org/theory/bibliography/#gonze2016 - - And optionally: - - [5] ABINIT: First-principles approach of materials and nanosystem properties. - Computer Phys. Comm. 180, 2582-2615 (2009). - X. Gonze, B. Amadon, P.-M. Anglade, J.-M. Beuken, F. Bottin, P. Boulanger, F. Bruneval, - D. Caliste, R. Caracas, M. Cote, T. Deutsch, L. Genovese, Ph. Ghosez, M. Giantomassi - S. Goedecker, D.R. Hamann, P. Hermet, F. Jollet, G. Jomard, S. Leroux, M. Mancini, S. Mazevet, - M.J.T. Oliveira, G. Onida, Y. Pouillon, T. Rangel, G.-M. Rignanese, D. Sangalli, R. Shaltaf, - M. Torrent, M.J. Verstraete, G. Zerah, J.W. Zwanziger - Comment: the third generic paper describing the ABINIT project. - Note that a version of this paper, that is not formatted for Computer Phys. Comm. - is available at https://www.abinit.org/sites/default/files/ABINIT_CPC_v10.pdf . - The licence allows the authors to put it on the Web. - DOI and bibtex: see https://docs.abinit.org/theory/bibliography/#gonze2009 - - Proc. 0 individual time (sec): cpu= 10.4 wall= 10.5 ================================================================================ Calculation completed. .Delivered 3 WARNINGs and 5 COMMENTs to log file. +Overall time at end (sec) : cpu= 10.4 wall= 10.5
Tip
As already mentioned in the introduction, all the results are stored in the SIGEPH.nc file. With AbiPy , one can easily access to all the data of the computation. For instance, one can plot the electron linewidths as a function of the KS energy using the abiopen.py script:
abiopen.py teph4mob_5o_SIGEPH.nc --expose
Well, the figure is not so impressive but this is normal as we are computing only 3 \(\kk\)-wavevectors still there are some points that are worth discussing. Note how the linewidths at the CBM are very small at low temperature. For the CBM, indeed, only phonon absorption is allowed and there are few vibrational states populated at low T. The linewidth at the CBM increses with T since high energy phonon states starts to be populated and more scattering channels become available.
At the end of the main output file, the diagonal elements of the SERTA/MRTA mobility tensor \(\sigma_{ij}\) are reported for the three Cartesian directions and all temperatures.
Cartesian component of SERTA mobility tensor: xx
Temperature [K] e/h density [cm^-3] e/h mobility [cm^2/Vs]
5.00 0.10E+16 0.00E+00 0.00 0.00
64.00 0.10E+16 0.00E+00 40.76 0.00
123.00 0.10E+16 0.00E+00 356.24 0.00
182.00 0.10E+16 0.00E+00 435.51 0.00
241.00 0.10E+16 0.00E+00 433.89 0.00
300.00 0.10E+16 0.25E+05 379.06 0.00
Cartesian component of MRTA mobility tensor: xx
Temperature [K] e/h density [cm^-3] e/h mobility [cm^2/Vs]
5.00 0.10E+16 0.00E+00 0.00 0.00
64.00 0.10E+16 0.00E+00 39.67 0.00
123.00 0.10E+16 0.00E+00 374.94 0.00
182.00 0.10E+16 0.00E+00 470.73 0.00
241.00 0.10E+16 0.00E+00 469.55 0.00
300.00 0.10E+16 0.25E+05 411.23 0.00
The temperature is first given then the electron (e) and hole (h) densities followed by the corresponding (SERTA/MRTA) mobilities. In our input file, we considered only electrons and this explains why the values for holes are zero. In this particular case, the difference between SERTA and MRTA is not very large but the two approximation may give significantly different results in other systems. According to recent works the MRTA results are expected to be closer to ones obtained by iteratively solving the BTE.
Tip
You can also run the transport driver in standalone mode by setting eph_task 7, provided you already have the lifetimes in an external SIGEPH.nc file specified via getsigeph_filepath. This task is relatively fast even in serial execution although some parts (in particular the computation of DOS-like quantities) can benefit from MPI.
Now that we know how to obtain the mobility in a semiconductor for given \(\kk\)- and \(\qq\)-meshes, we can give additional details about convergence studies and discuss extra tricks to significantly decrease the computational cost.
Convergence w.r.t. the energy range¶
The first convergence study consists in determining the energy range around the band edge to be used for the computation of \(\tau_{n\kk}\). We can do that by performing mobility computations with fixed \(\kk\)- and \(\qq\)-meshes and increasing values of sigma_erange.
Tip
The code can compute both electron and hole mobilities in a single run but this is not the recommended procedure as the \(\qq\)-point filtering is expected to be less efficient. Moreover electrons and holes may require a different \(\kk\)-sampling to convergence depending on the dispersion of the bands. As a consequence, we suggest to compute electrons and holes with different input files.
The file $$ABI_TUTORESPFN/Input/teph4mob_6.abi is an example of such computation.
# Crystalline AlAs: computation of the intrinsic mobility ndtset 6 # General input for e-ph computations optdriver 7 # Enter e-ph code eph_task -4 # Compute only the imaginary part of the self-energy occopt 3 # Fermi-Dirac occupation function (physical T) # Definition of the meshes ngkpt 24 24 24 # k-mesh nshiftk 1 shiftk 0.0 0.0 0.0 ddb_ngqpt 4 4 4 # q-mesh for phonons (from DDB file) eph_ngqpt_fine 24 24 24 # Interpolate e-ph matrix elements on the same # q-mesh as the k-grid getwfk_filepath "teph4mob_4o_DS2_WFK" # Read the dense WFK file getddb_filepath "teph4mob_2_DDB" # We need the DDB and DVDB getdvdb_filepath "teph4mob_3_DVDB" # Definition of the variables related to transport properties tmesh 5.0 59.0 6 # Temperature array at which the mobility will be computed # Change this depending on the concentration you want eph_doping -1e+15 # in |e| cm^-3 sigma_erange1 0 0.10 eV # We compute the lifetimes of electrons only, sigma_erange2 0 0.12 eV # in an energy window of 0.15 eV from the CBM sigma_erange3 0 0.14 eV sigma_erange4 0 0.16 eV sigma_erange5 0 0.18 eV sigma_erange6 0 0.20 eV mixprec 1 # We use single precision in some parts. # It does not affect the precision of the result # but helps decreasing the memory requirements. # boxcutmin 1.1 # Use boxcutmin 1.1 to decrease the memory # requirements. Check that it does not affect # your results by increasing this (up to 2 max). #eph_intmeth 2 # Use of the tetrahedron method (default) ####################################################################### #Common input variables # Definition of the planewave basis set ecut 3 nband 8 #Definition of the unit cell acell 3*10.61 # This is equivalent to 10.61 10.61 10.61 rprim 0.0 0.5 0.5 # In tutorials 1 and 2, these primitive vectors 0.5 0.0 0.5 # (to be scaled by acell) were 1 0 0 0 1 0 0 0 1 0.5 0.5 0.0 # that is, the default. #Definition of the atom types ntypat 2 # There are two types of atom znucl 13 33 # The keyword "znucl" refers to the atomic number of the # possible type(s) of atom. The pseudopotential(s) # mentioned in the "files" file must correspond # to the type(s) of atom. Here, type 1 is the Aluminum, # type 2 is the Arsenic. #Definition of the atoms natom 2 # There are two atoms typat 1 2 # The first is of type 1 (Al), the second is of type 2 (As). xred 0.0 0.0 0.0 0.25 0.25 0.25 pp_dirpath "$ABI_PSPDIR" pseudos "13al.981214.fhi, PseudosTM_pwteter/33as.pspnc" ############################################################## # This section is used only for regression testing of ABINIT # ############################################################## #%%<BEGIN TEST_INFO> #%% [setup] #%% executable = abinit #%% test_chain = teph4mob_1.abi, teph4mob_2.abi, teph4mob_3.abi, teph4mob_4.abi, teph4mob_5.abi, teph4mob_6.abi, teph4mob_7.abi #%% exclude_builders = eos_nvhpc_*, eos_gnu_13.2_serial #%% [files] #%% files_to_test = #%% teph4mob_6.abo, tolnlines= 350, tolabs= 220, tolrel= 1.500e-02 #%% [paral_info] #%% max_nprocs = 4 #%% [extra_info] #%% authors = G. Brunin, M. Giantomassi #%% keywords = NC, DFPT, EPH, RTA #%% description = #%% E-ph for mobility in semiconductors #%%<END TEST_INFO>
Copy the input file in the Work_eph4mob directory, and run ABINIT:
abinit teph4mob_6.abi > teph4mob_6.log 2> err &
This run should take a few minutes.
We can now analyze the variation of the mobility with respect to sigma_erange.
TODO: Add script to analyze convergence wrt sigma_erange
This study shows that an energy window of ~0.15 above the CBM is enough to converge so we use this value in the subsequent calculations.
Warning
One should perform this convergence study with a \(\kk\)-mesh that is already dense enough to capture the band dispersion correctly. In this case, we are using a 24×24×24 mesh, which is not very dense for such computations. This means that, when increasing sigma_erange, no additional \(\kk\)-point is included as the sampling is too coarse. This is the case for the first three datasets (3 \(\kk\)-points), and the last two datasets (6 \(\kk\)-points). If a finer mesh was used, the number of \(\kk\)-points would have increased in a more monotonic way. For instance, in Silicon, a 45×45×45 \(\kk\)-mesh could be used to determine sigma_erange.
Convergence w.r.t. the k/q meshes¶
Once the energy window is set, we can start to converge the mobility with respect to the dense \(\kk\)- and \(\qq\)-meshes. The previous computations used 24×24×24 \(\kk\)- and \(\qq\)-meshes. This is quite far from convergence. Just to give you an idea, silicon requires a 45×45×45 \(\kk\)-mesh and 90×90×90 \(\qq\)-mesh to reach convergence within 5%.
Tip
As a rule of thumb, a \(\qq\)-mesh twice as dense in each direction as the \(\kk\)-mesh, is needed to obtain accurate values for the linewidth and achieve fast convergence of the integrals in \(\kk\)-space [Brunin2020b]. Possible exceptions are systems with very small effective masses (e.g. GaAs) in which a very dense \(\kk\)-sampling is needed to sample the electron (hole) pockets. In this case, using the same sampling for electrons and phonons may be enough to converge.
To compute the mobility with a \(\qq\)-mesh twice as dense as the \(\kk\)-mesh, there are two possible approaches:
-
Run a computation with:
- ngkpt 90 90 90 (nshiftk 1 and shiftk 0 0 0)
- eph_ngqpt_fine 90 90 90,
- sigma_ngkpt 45 45 45.
using sigma_ngkpt to select the \(\kk\)-points in \(\Sigma_\nk\) belonging to the 45×45×45 mesh, but now each lifetime is computed with a 90×90×90 \(\qq\)-mesh.
-
Run a computation with:
- ngkpt 90 90 90, (nshiftk 1 and shiftk 0 0 0)
- eph_ngqpt_fine 90 90 90,
- sigma_ngkpt 90 90 90.
Following this approach, we compute lifetimes on a 90×90×90 \(\kk\)- and the integration is perfomed on the same \(\qq\)-mesh. You can then run again the transport driver only, by setting eph_task 7 and transport_ngkpt 45 45 45 to downsample the \(\kk\)-mesh used to integrate the mobility in \(\kk\)-space. This second option has the advantage that it delivers two mobilities in one-shot but it would be overkilling if a 45×45×45/90×90×90 k/q sampling is already enough.
You can run again the previous input files by densifying the different meshes. For the densest grids, you might need to run with multiple MPI processes. You should obtain something like this for \(T\) = 300 K:
Sorry for repeating it again but, the inputs of this tutorial have been tuned to make the computations quite fast, but the final results are far from convergence. In order to get sensible results, one should use a denser DFPT \(\qq\)-mesh (around 9×9×9), and a larger cutoff energy ecut. Obviously, these parameters depend on the system under investigation.
Double-grid technique¶
Another possibility to improve the results without increasing the computation time significantly is the double-grid (DG) technique [Brunin2020b]. In this method, a coarse sampling is used for the \(\kk\)- and the \(\qq\)-mesh for the e-ph matrix elements, but a finer mesh is used to interpolate the weights for the delta functions associated to phonon absorption/emission. This technique allows one to accelerate the convergence while keeping the computational cost and the memory requirements at a reasonable level.
Important
The efficiency of the DG approach depends on the strength of the polar Frohlich divergence: if the divergence is difficult to integrate numerically, the coarse \(\qq\)-mesh for the e-ph matrix elements will have to be densified.
The DG technique requires a second WFK file, containing the KS eigenvalues on the fine mesh. You can specify the path to the fine WFK file using getwfkfine_filepath as in:
getwfkfine_filepath "teph4mob_4o_DS3_WFK"
The file $$ABI_TUTORESPFN/Input/teph4mob_7.abi (first dataset) is an example of such computation.
# Crystalline AlAs: computation of the intrinsic mobility ndtset 2 ############### # First dataset ############### # Compute only the imaginary part of the self-energy # Followed by mobility computation. eph_task1 -4 ############### # Second dataset ############### # This just to show how to compute mobility from SIGEPH.nc file with a k submesh eph_task2 7 getsigeph_filepath2 "teph4mob_7o_DS1_SIGEPH.nc" transport_ngkpt2 12 12 12 #sigma_ngkpt2 12 12 12 ######################### # Common to all datasets ######################### # General input for e-ph computations optdriver 7 # Enter EPH code occopt 3 # Fermi-Dirac occupation function (physical T) # Definition of the meshes ngkpt 24 24 24 # k-mesh from WFK file nshiftk 1 shiftk 0.0 0.0 0.0 ddb_ngqpt 4 4 4 # q-mesh used for the phonons eph_ngqpt_fine 24 24 24 # Interpolate e-ph matrix elements on the same # dense mesh as the k-grid getwfk_filepath "teph4mob_4o_DS2_WFK" # Read the dense WFK file getddb_filepath "teph4mob_2_DDB" # We need the ddb and dvdb getdvdb_filepath "teph4mob_3_DVDB" getwfkfine_filepath "teph4mob_4o_DS3_WFK" # Path to the dense 48x48x48 WFK # Definition of the variables related to transport properties tmesh 5.0 59.0 6 # Temperature array at which the mobility will be computed # Change this depending on the concentration you want eph_doping -1e+15 # in |e| cm^-3 sigma_erange 0 0.15 eV # We compute the lifetimes of electrons only, # in an energy window of 0.15 eV from the CBM # Input variables related to the e-ph run mixprec 1 # We use single precision in some parts. # It does not affect the precision of the result but accelerates the calculation # boxcutmin 1.1 # Use boxcutmin 1.1 to decrease the memory # requirements. Check that it does not affect # your results by increasing this (up to 2 max). ####################################################################### #Common input variables # Definition of the planewave basis set ecut 3 nband 8 # Definition of the unit cell acell 3*10.61 # This is equivalent to 10.61 10.61 10.61 rprim 0.0 0.5 0.5 # In tutorials 1 and 2, these primitive vectors 0.5 0.0 0.5 # (to be scaled by acell) were 1 0 0 0 1 0 0 0 1 0.5 0.5 0.0 # that is, the default. # Definition of the atom types ntypat 2 # There are two types of atom znucl 13 33 # The keyword "znucl" refers to the atomic number of the # possible type(s) of atom. The pseudopotential(s) # mentioned in the "files" file must correspond # to the type(s) of atom. Here, type 1 is the Aluminum, # type 2 is the Arsenic. #Definition of the atoms natom 2 # There are two atoms typat 1 2 # The first is of type 1 (Al), the second is of type 2 (As). xred 0.0 0.0 0.0 0.25 0.25 0.25 pp_dirpath "$ABI_PSPDIR" pseudos "13al.981214.fhi, PseudosTM_pwteter/33as.pspnc" ############################################################## # This section is used only for regression testing of ABINIT # ############################################################## #%%<BEGIN TEST_INFO> #%% [setup] #%% executable = abinit #%% test_chain = teph4mob_1.abi, teph4mob_2.abi, teph4mob_3.abi, teph4mob_4.abi, teph4mob_5.abi, teph4mob_6.abi, teph4mob_7.abi #%% exclude_builders = eos_nvhpc_*, eos_gnu_13.2_serial #%% [files] #%% files_to_test = #%% teph4mob_7.abo, tolnlines= 57, tolabs= 80, tolrel= 0.05; #%% teph4mob_7o_DS1_SERTA_KAPPA, tolnlines= 50, tolabs= 1.1e-2, tolrel= 5.0e-2, fld_options = -ridiculous; #%% teph4mob_7o_DS1_MRTA_KAPPA, tolnlines= 50, tolabs= 1.5e-2, tolrel= 5.0e-2, fld_options = -ridiculous; #%% teph4mob_7o_DS1_SERTA_PI, tolnlines= 50, tolabs= 1.1e-2, tolrel= 5.0e-2, fld_options = -ridiculous; #%% teph4mob_7o_DS1_MRTA_PI, tolnlines= 50, tolabs= 1.1e-2, tolrel= 5.0e-2, fld_options = -ridiculous; #%% teph4mob_7o_DS1_SERTA_SBK, tolnlines= 50, tolabs= 1.1e-2, tolrel= 5.0e-2, fld_options = -ridiculous; #%% teph4mob_7o_DS1_MRTA_SBK, tolnlines= 50, tolabs= 1.1e-2, tolrel= 5.0e-2, fld_options = -ridiculous; #%% teph4mob_7o_DS1_SERTA_SIGMA, tolnlines= 50, tolabs= 1.2e+4, tolrel= 5.0e-2, fld_options = -ridiculous; #%% teph4mob_7o_DS1_MRTA_SIGMA, tolnlines= 50, tolabs= 100, tolrel= 5.0e-2, fld_options = -ridiculous; #%% [paral_info] #%% max_nprocs = 4 #%% [extra_info] #%% authors = G. Brunin, M. Giantomassi #%% keywords = NC, DFPT, EPH, RTA #%% description = #%% E-ph for mobility in semiconductors #%%<END TEST_INFO>
Copy the input file in the Work_eph4mob directory, and run ABINIT:
abinit teph4mob_7.abi > teph4mob_7.log 2> err &
In the log file, you will now find information about the double-grid method:
coarse: 24 24 24
fine: 48 48 48
The SERTA mobility obtained at 300 K is 163.84 cm\(^2\)/V/s. Using a 48×48×48 \(\qq\)-mesh for the matrix elements as well would give 96.97 (using sigma_ngkpt 24 24 24). The result is indeed improved, since using a 24×24×24 mesh both for electrons and phonons gives 379.06. You can also use a finer mesh, but always multiple of the initial coarse mesh (in this case, 72×72×72, 96×96×96, etc). It is worth noticing that, according to our tests, there is very little use to go beyond a mesh three times as dense as the coarse one. Using a 72×72×72 fine mesh for the energies gives a mobility of 152.30 cm\(^2\)/V/s, and a 96×96×96 mesh leads to 149.38 cm\(^2\)/V/s: the improvement is indeed rather limited.
Important
As a rule of thumb, consider to use the DG method for systems in which the tetrahedron filter is not able to reduce the number of \(\qq\)-points in the integrals below 5% for a significant fraction of the \(\kk\)-points in the sigma_erange energy window. This may happen if there are multiple equivalent pockets and thus many intra-valley scattering channels. In this case, the computation of \(\tau_\nk\) may require several minutes (2-10) per \(\kk\)-point and calculations performed with the same \(\kk\)- and \(\qq\)-mesh start to be expensive when the BZ sampling gets denser.
In-place restart¶
All the results of the calculation are stored in a single SIGEPH.nc file for all the \(\kk\)-points (and spins) considered. The list of \(\kk\)-points is initialized at the beginning of the calculation and an internal table in the netcdf file stores the status of each \(\kk\)-point (whether it has been computed or not). This means that calculations that are killed by the resource manager due to time limit can reuse the SIGEPH file to perform an automatic in-place restart. Just set eph_restart to 1 in the input file and rerun the job
Important
There is no harm in setting eph_restart to 1 from the begining but keep in mind that the code will restart the calculation from scratch if all the \(\kk\)-points in the SIGEPH.nc have been computed (a backup copy is kept). So we do not recommended the use of this option in MultiDataset mode. Again, MultiDataset are evil when it comes to high-performance!
Transport calculation from SIGEPH.nc¶
The routine that computes carrier mobilites is automatically invoked when eph_task -4 is used and a RTA.nc file with the final results is produced. There are however cases in which one would like to compute mobilities starting from a pre-existent SIGEPH.nc without performing a full calculation from scratch. In this case, use eph_task 7 and specify the name of the SIGEPH.nc file with getsigeph_filepath. The advanced input variable transport_ngkpt can be used to downsample the \(\kk\)-mesh used in the mobility integrals.
MPI parallelism and memory requirements¶
There are five different MPI levels that can be used to distribute the workload and the most memory-demanding data structures. By default, the code tries to reach some compromise between memory requirements and time to solution by activating the parallelism over perturbations and then the \(\qq\)-point parallelism if no input is provided by the user. You can however specify manually the MPI distribution across the five different levels by using eph_np_pqbks (a list of 5 integers). The product of these five numbers must be equal to the total number of MPI processes.
The first entry defines the number of processes for the parallelization over perturbations. The allowed value range between 1 and 3 × natom, and should be a divisor of 3 × natom to distribute the work equally. The higher this number, the lower the memory requirements at the price of increased MPI communication. The second entry determines the parallelization over the \(\qq\)-points in the IBZ. This parallelization level allows one to decrease both the computational time as well as memory although it’s not always possible to distribute the load equally among the processes. The parallelization over bands is usually not relevant for mobility computations as only a few states close to the VBM or CBM are usually included. The MPI parallelism over \(\kk\)-points and spins is very efficient but it requires HDF5 with MPI-IO support and, besides, memory won’t scale. Use these additional two levels if the memory requirements are under control and you want to boost the calculation.
How to reduce the memory requirements¶
As mentioned above, the memory will scale with the number of MPI processors used for the \(\qq\)-point and the perturbation communicators. However, there might be tricky systems in which you start to experience memory shortage that prevents you from running with many MPI processes. This problem should show up for very dense \(\kk\)/\(\qq\) meshes. As a rule of thumb, mobility calculations with meshes denser than e.g 200x200x200 start to be very memory demanding and the execution will slow down because several algorithms and internal tables for the BZ sampling and the tetrahedron method start to dominate. The double grid technique helps mitigate this bottleneck. In some cases, you may try to reduce slightly the value of sigma_erange to reduce the memory requirements.
Note also that the EPH code allocates a relatively small buffer to store the Bloch states involved
in transport calculations but unfortunately the \(\kk\)-points are not easy to distribute with MPI.
Moreover the size of this array depends on the electronic dispersion:
systems with several relatively flat bands around the band edges require more memory.
To reduce the memory for the wavefunctions, the code uses internal buffers in single precision.
This option is enabled at configure time by using enable_gw_dpc="no"
(this is the default behaviour).
If these tricks do not solve your problem, consider using OpenMP threads. The code is not highly-optimized for OpenMP but a couple of threads may be useful to avoid replicating memory at the MPI level. As a rule of thumb, 2-4 OpenMP threads should be OK provided you link with threaded FFT and BLAS libraries. To compile ABINIT with OpenMP support and link with a threaded library see the corresponding section in the ABINIT_build tutorial.
Warning
Last but not least, do not use datasets: split the calculation into different input files and optimize the number of MPI processes according to the dimension of the problem. You have been warned!
How to compute the WFK only for k-points close to the band edges¶
As we have already seen in the previous sections, a relatively small number of \(\kk\)-points close to the band edges is usually sufficient to converge mobilities. Yet, in the NSCF run, we computed a WFK file for all the \(\kk\)-points in the IBZ hence we spent a lot of resources to compute and store states that are not needed for phonon-limited mobilities.
In principle, it is possible to restrict the NSCF calculation to the relevant \(\kk\)-points provided we have a cheap and good-enough method to predict whether the wavevector is inside the energy window without solving the KS eigevalue problem exactly. For example, one can use the star-function interpolation by Shankland-Koelling-Wood (SKW) [Shankland1971], [Koelling1986], [Madsen2006], [Madsen2018] which requires as input a set of eigenvalues in the IBZ and a single parameter defining the basis set for the interpolation.
There are several technical problems that should be addressed at the level of the internal implementation but the idea is relatively simple and goes as follows:
- Compute the KS eigenvalues on a relatively coarse \(\kk\)-mesh in the IBZ
- Use this coarse WFK file to interpolate the eigenvalues on a much denser \(\kk\)-mesh specified by the user.
- Find the wavevectors of the dense mesh inside an energy window specified by the user and store the list of \(\kk\)-points in a external file (KERANGE.nc).
- Use this external file to run a NSCF calculation only for these \(\kk\)-points. At the end of the NSCF job, ABINIT will produce a customized WFK file on the dense mesh that can be used to run calculations for phonon-limited mobilities
An example will help clarify.
Suppose we have computed a WFK file with a NSCF run using a 16x16x16 \(\kk\)-mesh (let’s call it 161616_WFK) and we want to compute mobilites with the much denser 64x64x64 \(\kk\)-mesh. In this case, use
to read the WFK file specified by getwfk_filepath, find the wavevectors belonging to the sigma_ngkpt \(\kk\)-mesh inside the energy window defined by sigma_erange and produce a KERANGE.nc file. The parameters defining the SKW interpolation are specified by einterp.
A typical input file for this step looks like:
optdriver 8
wfk_task "wfk_kpts_erange"
getwfk_filepath "161616_WFK"
# Define fine k-mesh for the interpolation
sigma_ngkpt 64 64 64
sigma_nshiftk 1
sigma_shiftk 0 0 0
sigma_erange 0.0 0.2 eV # Select kpts in fine mesh within this energy window.
einterp 1 5 0 0 # Parameters for star-function interpolation
This input produces a KERANGE.nc file (let’s call it out_KERANGE) that can be used via the getkerange_filepath variable as a starting point to perfom a NSCF run with the following variables:
getkerange_filepath "out_KERANGE.nc"
getden_filepath "161616_DEN" # Read DEN file to initialize NSCF run
getwfk_filepath "161616_WFK" # Init GS wavefunctions from this file (optional)
iscf -2
tolwfr 1e-18
kptopt 0 # Important!
# These variables must be consistent with the values of
# sigma_ngkpt, sigma_shiftk used in the previous step
ngkpt 64 64 64
nshiftk 1
shiftk 0.0 0.0 0.0
This part will produce a customized Fortran WFK file with ngkpt = 64 64 64 in which only the states listed in the KERANGE.nc netcdf file have been computed. This WKF file can then be used in the EPH code to compute mobilites. For further examples see v9[57], and v9[61].
Note that the two tests cannot be executed in multidataset mode with a single input file. Also, keep in mind that the quality of the interpolation depends on the initial coarse \(\kk\)-mesh so we recommended to look at the interpolant, see discussion at the end of the introductory tutorial.
Important
It is also a good idea to use an energy window that is larger than the one that will be employed to compute the mobility in the EPH code. As a rule of thumb, increase sigma_erange by 0.15 eV when computing the KERANGE.nc file. This should be however tested in each case.