Part 3: Periodic Systems
This tutorial introduces the basic concepts of DFT calculations for periodic system geometries with FHI-aims. In a first step, we will carry out a structure optimization of a Si bulk crystal in the diamond structure. We will then consider spin-orbit coupling (SOC) effects in the energy band structure of GaAs.
Set up the
geometry.in file for Si in the diamond structure
The syntax for the
geometry.in file remains the same as previous two parts, with only a few additions:
lattice_vector 0.00000 2.71500 2.71500 lattice_vector 2.71500 0.00000 2.71500 lattice_vector 2.71500 2.71500 0.00000 atom_frac 0.00000 0.00000 0.00000 Si atom_frac 0.25000 0.25000 0.25000 Si
The first three lines starting with
lattice_vector define the three unit cell vectors \(a_i\) (\(i\)=1,2,3). For our example, we use the primitive unit cell of Si in the diamond structure. The following lines define the position and the species of the atoms for this system, however, this time in so-called fractional coordinates (
atom_frac) \(f_1\), \(f_2\), \(f_3\). The Cartesian coordinates \(x\), \(y\), \(z\) of each atom follow by multiplying fractional coordinates and lattice vectors: \((x,y,z)= f_1 * a_1 + f_2 * a_2 + f_3 * a_3\).
Fractional coordinates are especially convenient when working with high-symmetry crystals. Nevertheless, one could also simply use Cartesian coordinates (in units of Å) by using the keyword
atom at the beginning of each line.
One can only use either the
atom or the
atom_frac keyword in a
geometry.in file. Mixing those keyword in the same
geometry.in file is not supported.
Visualizing Periodic Structures
A visual verification of the structure is usually key to avoid simple mistakes. This is even more important for periodic systems as nearest neighbors and atom distances cannot be identified easily. There are many tools to visualize crystal structures, e.g jmol, VESTA, and Avogadro to just name a few free software packages.
Here we will use GIMS, in particular its Structure Builder. One can upload the geometry file created from the above example and inspect the structure. Create a supercell to ensure that nearest neighbors and distances across the unit cell boundary look correct. Furthermore, GIMS provides additional information about the structure, such as lattice parameters, Bravais lattice type, space group number, and occupied Wyckoff positions. Finally, one can also create a snapshot of the structure and download it.
Set up the
control.in file for Periodic Structures Relaxation
control.in for structure optimization of a periodic system looks similar to the non-periodic case. First, we specify the runtime choices, which should look like this:
xc pbe relativistic atomic_zora scalar k_grid 8 8 8 relax_geometry bfgs 5e-3 relax_unit_cell full
k_grid, which is followed by three integer numbers. These three numbers specify the number of k-points along each reciprocal lattice vector. Their order corresponds to the order of lattice vectors specified in the
geometry.infile. FHI-aims will create a three-dimensional, even-spaced, \(\Gamma\)-centered \(k\)-grid using the number of points specified for each reciprocal space direction.
Alternatively, the keyword
k_grid_density followed by a single floating point number can be used. FHI-aims will create again an even-spaced, \(\Gamma\)-centered k-grid, with the same density along all reciprocal lattice vectors.
There is no absolute recommendation that one can make regarding whether to use
- In general, the keyword
k_grid_densityis as a practical option if one employs a sufficiently large k-point density. To obtain well converged calculations (with respect to the k-grid), it is often preferable to fulfill the criteria \(n_i * a_i > 50 Å\), for the lattice vector length \(a_i\) and the number of k-points \(n_i\) along the corresponding k-space direction \(i\). Using
k_grid_densityprevents the accidental use of over-converged settings, e.g., for larger supercell or slab calculations, where usually a much smaller number of k-points along the longer lattice vectors is sufficient.
- To guarantee consistent k-grid numbers between different systems, e.g., when comparing total energies between different supercell sizes, it is preferable to use the
k_gridkeyword, which allows one to exactly control the number of k-points along each k-space direction. For example, if one doubles the unit cell size in each direction, you can divide the number of k-points in all directions by a factor of 2.
The necessary k-space grid can vary based on the target physical observable; for example, optical properties or densities of states generally require denser
k_grid settings than just the total energy.
8x8x8 k-grid used in our current example is chosen based on our previous experience with Si bulk crystal. However, as just mentioned above, for any practical applications, one must ensure the convergence of physical properties of interest with respect to the
k_grid setting. For example, a test using
k_grid 12 12 12 or
k_grid 16 16 16 would show how certain properties of interest, such as the total energy or the density of states (see below) reach numerical convergence as the resolution of the k-space grid is increased.
As before, the line starting with
relax_geometry in the above
control.in example requests a structure relaxation. However, unlike in non-periodic calculations, in case of periodic systems we do have six more degrees of freedom besides atomic positions: the lengths a, b, c of the lattice vectors \(a_1\), \(a_2\), \(a_3\), as well as the angles \(\alpha\), \(\beta\), and \(\gamma\) between the lattice vectors. These lattice degrees of freedom should be taken into account for structure relaxation.
Lattice vectors optimization in FHI-aims is specified by the keyword
relax_unit_cell. There are several options for this keyword, but here we just want to freely optimize the lattice vectors, thus, setting
relax_unit_cell full. If
relax_unit_cell full is not set, then the
relax_geometry keyword will keep the lattice fixed constant and only the atomic positions are optimized.
Once the input files are ready, execute the calculation. Before running the relaxation, do not forget to attach the species defaults for Si (light settings).
Optimization of lattice vectors: Analytical stress
Evaluating the force and stress components requires more time and memory compared to, e.g., total energy calculations. These components are therefore only evaluated once for each geometry, after the self-consistent field cycle is considered converged for the total energy.
Details about the implementation of the stress tensor in FHI-aims can be found in: Knuth, Franz, et al. "All-electron formalism for total energy strain derivatives and stress tensor components for numeric atom-centered orbitals." Comput. Phys. Commun. 190 (2015). DOI: https://doi.org/10.1016/j.cpc.2015.01.003
Quick look at the Result
As for the molecular test cases, the Output Analyzer of GIMS is the preferred method to visualize the structure optimization output data from FHI-aims.
Alternatively, at the command line, a useful perl script
get_relaxation_info.pl in the
[FHI-aims directory]/utilities folder can be used to print some important energies and residual forces along the relaxation trajectory from the main output file. In a terminal window,
get_relaxation_info.pl is used as follows (please adapt
[FHI-aims directory]/utilities/get_relaxation_info.pl aims.out
# Step Total energy [eV] E-E(1) [meV] Free energy [eV] F-F(1) [meV] max. force [eV/AA] 1 -15802.64745204 0.000000 -15802.64745204 0.000000 0.111748 2 -15802.65124091 -3.788872 -15802.65124091 -3.788872 0.076222 3 -15802.65421196 -6.759924 -15802.65421196 -6.759924 0.003273 converged.
geometry.in.next_step, we can see that the unit cell volume changed from 40.03 Å\(^3\) to 41.07 Å\(^3\).
FHI-aims does not assume any symmetry by default for relaxation. In general, this is the safer choice since it lets FHI-aims explore the full potential energy surface of the system during the relaxation. However, if one wishes to analyze structural and electronic properties of a system of known or constrained symmetry, it is helpful to restrict the degrees of freedom to only the parameters allowed by that symmetry. For example, the final result from our first relaxation only reveals very tiny deviations from the expected high-symmetry geometry:
# # This is the geometry file that corresponds to the current relaxation step. # If you do not want this file to be written, set the "write_restart_geometry" flag to .false. # aims_uuid : 33436E5C-811B-4B68-A345-8B17F41BDF1F # lattice_vector -0.00000003 2.73831636 2.73831636 lattice_vector 2.73831640 0.00000001 2.73831639 lattice_vector 2.73831640 2.73831639 0.00000001 atom_frac 0.00000000 -0.00000000 -0.00000000 Si atom_frac 0.25000000 0.25000000 0.25000000 Si # # What follows is the current estimated Hessian matrix constructed by the BFGS algorithm. # This is NOT the true Hessian matrix of the system. # If you do not want this information here, switch it off using the "hessian_to_restart_geometry" keyword. # trust_radius 0.2000000030 hessian_file
Siis the actual global minimum.
In FHI-aims, there are different ways to incorporate symmetry in your relaxation. In particular, the symmetry related keywords
use_symmetric_forces might be of interest for highly-symmetric systems or in order to constrain the symmetry of a solid in a particular way. To learn more about symmetry for relaxation of solids, please follow this tutorial.
Followup relaxation of solids with hybrid density functionals
Similar to relaxation of molecules, we perform a followup relaxation using the HSE06 XC functional (a hybrid functional), however, only using
light species defaults for this example (and for the sake of this tutorial). For better converged results, we recommend
intermediate settings. We use the geometry obtained from the relaxation above, which can be found in
control.in file should look like this:
xc hse06 0.11 hse_unit bohr relativistic atomic_zora scalar k_grid 8 8 8 relax_geometry bfgs 5e-3 relax_unit_cell full [attach light species defaults for Si]
Follow the steps from the first part of the tutorial about restarting relaxations. It is identical for solids.
If you run the calculation only on few cores, you have some time to get a coffee (with two cores it takes about 5 minutes). Hybrid functionals are at the next rung of the Jacob's ladder. The HSE06 functional is physically more accurate than semilocal functionals for semi-conductors and insulators). However, it requires larger computational resources (time and memory).
By examining the output, we find that the system only gained 3 meV during the geometry relaxation with the HSE06 functional. Overall, the final relaxed geometry is pretty close to the PBE result.
Similar to PBE functional, symmetry might be used to enhance the relaxation of highly-symmetric systems in case of HSE06 functional. For more information regarding symmetry in FHI-aims please follow this tutorial.
Post-Processing: Band structure and density of states
Looking into the output file, we already find some helpful information about the electronic structure such HOMO, LUMO, and estimated overal HOMO-LUMO gap energies. However, to get all the fine details regarding the electronic structure of a system, we have to request further output in our FHI-aims calculation: the bands structure and the density of states.
FHI-aims requires explicit definition of the band path segment (a band path segment is a line segment in the k-space, which usually connects high symmetry points). This segment is determined by its start and end point in fractional k-space coordinates (first six floating numbers in
control.in) and the number of points for the segment. Optionally, one can specify the name of the start and end point at the end of the corresponding line. The general syntax to request a band structure output looks like this:
output band k_xstart k_ystart k_zstart k_xend k_yend k_zend n_points symbol_start symbol_end
To request the output for the total DOS, we need to specify an energy interval (remember that FHI-aims is an all-electron code; outputting the whole KS-eigenvalue spectrum would create large and, in most cases, not very helpful files). Our former calculations help to identify the energy region of interest. Here, we are interested in the DOS around the gap. Looking into the output file from the last calculation (HSE06 relaxation; look for the last appearance of
Writing Kohn-Sham eigenvalues. which corresponds to the converged structure), we find that -20 eV to 10 eV is a reasonable region around the band gap, so we can request:
output dos_tetrahedron -20.0 10.0 15001
dos_tetrahedron(this is also our recommendation for choice of integration method for smaller unit cells). The energy interval is determined by the next two float numbers, and the last integer specifies the number of points for this interval.
Setting up all these pieces manually is tedious and error prone. Therefore, we recommend tools that automate this step. The band structure workflow in GIMS provides such a tool which uses the Setyawan/Curtarolo conventions for band paths. To reproduce the
control.in example given below, you need to use a k-space density of 30 k-points ⋅ Å for the band path. GIMS also lets you to define the DOS output.
For Si-diamond, your final
control.in file should be similar to the following version:
xc hse06 0.11 hse_unit bohr hybrid_xc_coeff 0.25 exx_band_structure_version 1 relativistic atomic_zora scalar k_grid 12 12 12 output dos_tetrahedron -20 10 15001 output band 0.00000 0.00000 0.00000 0.50000 0.00000 0.50000 35 G X output band 0.50000 0.00000 0.50000 0.50000 0.25000 0.75000 17 X W output band 0.50000 0.25000 0.75000 0.37500 0.37500 0.75000 12 W K output band 0.37500 0.37500 0.75000 0.00000 0.00000 0.00000 37 K G output band 0.00000 0.00000 0.00000 0.50000 0.50000 0.50000 30 G L output band 0.50000 0.50000 0.50000 0.62500 0.25000 0.62500 21 L U output band 0.62500 0.25000 0.62500 0.50000 0.25000 0.75000 12 U W output band 0.50000 0.25000 0.75000 0.50000 0.50000 0.50000 24 W L output band 0.50000 0.50000 0.50000 0.37500 0.37500 0.75000 21 L K output band 0.62500 0.25000 0.62500 0.50000 0.00000 0.50000 12 U X [attach light species defaults for Si]
Noteworthy features of this
control.in file include:
- The k-point grid numbers are increased to obtain better converged results for the band structure and density of states. This normally increases the computation time but here the calculation will still run reasonably fast, as we do not request the computation of forces and stresses.
- For hybrid functionals, it is mandatory to specify the version of the band structure calculation by
exx_band_structure_version. Version 1 uses a faster real-space implementation; note that this keyword must be accompanied by a sufficiently dense
k_gridchoice. (Artifacts from an underconverged lattice Fourier transform might result for significantly underconverged
k_gridsettings.) Please refer to the manual to find more details regarding this keyword.
To start the calculation, we use the relaxed structure of previous step which can be found in
geometry.in.next_step. Copy this file into the
geometry.in of you current simulation and execute the run. After the calculation has finished, you should find the following file in the simulation directory:
KS_DOS_total_raw_tetrahedron.dat KS_DOS_total_tetrahedron.dat aims.out band1001.out band1002.out band1003.out band1004.out band1005.out band1006.out band1007.out band1008.out band1009.out band1010.out control.in geometry.in
The new files carry the following information:
KS_DOS_total_raw_tetrahedron.dat: The raw total DOS data.
KS_DOS_total_tetrahedron.dat: The total DOS shifted by the chemical energy of the electrons (Fermi level).
band****.out: The band structure data for each line segment in the same order as specified in the
control.infile. The four digits following
bandhave the following meaning:
- The first digit specifies the spin channel (here, we have only one spin channel, thus, all file names start with
- The next three digits specifies the band segment number (as ordered in the
control.in). For this calculation we requested ten segments, hence the files are numbered from 1 to 10.
The next step in a post-processing calculation is to plot the data. We facilitate this process by providing a script in the FHI-aims utility suite clims, which can be called with
clims-aimsplot command. Further information regarding how to install clims is accessible in the preparation section of this tutorial. The script can be called from the directory including all of your output files simply by:
It is also possible to plot the band structure and DOS using the GIMS output analyzer. Just select all files from your calculation directory and GIMS sorts out the needed data. The GIMS result looks like this:
The band gap can be extracted from the output files of the band structure calculation. In particular, for indirect gap materials such as present case, where the conduction band minimum and valence band maximum does not occur at the same k-point, it is more accurate to estimate the band gap by examining the band structure. The reason for this is that these two k-points may not be present in the original k-point grid (specified by
k_grid) used for the simulation. We find a band gap of 1.2082 eV for the present calculation.
Relativistic effects, such as spin-orbit coupling (SOC), become more important as the elements forming the material become heavier. GaAs is a well-known example that shows the impact of spin-orbit coupling on the electronic properties; therefore we use it as a reference example for introducing spin-orbit coupling here.
The first part of this section will also serve as a recap of our standard workflow for structure relaxations. Perform the following steps for GaAs:
- Find the structure and initial guess of the structure for GaAs.
- Perform a PBE relaxation with light species defaults.
- Perform a HSE06 followup relaxation with light (or, better, intermediate) species defaults.
You can find the solution for the above three steps in the folder
Tutorial/Part-3/solutions/GaAs. At the end of these steps, we have an optimized structure of GaAs, which can be used to study SOC effects.
At the time of writing, FHI-aims offers a second-variational SOC correction to the self-consistent scalar-relativistic eigenstates. More details regarding this approach are provided in the following paper:
William P. Huhn and Volker Blum, "One-hundred-three compound band-structure benchmark of post-self-consistent spin-orbit coupling treatments in density functional theory", Phys. Rev. Materials 1, 033803 (2017).
To activate the SOC correction, the
include_spin_orbit keyword should be added to the
control.in file. Since Si and GaAs have the same Bravais lattice, we can also use the same band path through the Brillouin zone as in the previous section. In addition, we will also request a species-projected DOS to better understand the composition of the band edges.
xc hse06 0.11 hse_unit bohr hybrid_xc_coeff 0.25 exx_band_structure_version 1 relativistic atomic_zora scalar k_grid 8 8 8 output dos_tetrahedron -20 10 15001 output species_proj_dos_tetrahedron -20 10 15001 output band 0.00000 0.00000 0.00000 0.50000 0.00000 0.50000 33 G X output band 0.50000 0.00000 0.50000 0.50000 0.25000 0.75000 17 X W output band 0.50000 0.25000 0.75000 0.37500 0.37500 0.75000 12 W K output band 0.37500 0.37500 0.75000 0.00000 0.00000 0.00000 35 K G output band 0.00000 0.00000 0.00000 0.50000 0.50000 0.50000 29 G L output band 0.50000 0.50000 0.50000 0.62500 0.25000 0.62500 20 L U output band 0.62500 0.25000 0.62500 0.50000 0.25000 0.75000 12 U W output band 0.50000 0.25000 0.75000 0.50000 0.50000 0.50000 23 W L output band 0.50000 0.50000 0.50000 0.37500 0.37500 0.75000 20 L K output band 0.62500 0.25000 0.62500 0.50000 0.00000 0.50000 12 U X include_spin_orbit [attach light species defaults for Ga and As]
Start the calculation using the above
control.in (don't forget to attach the "light" or, better, "intermediate" species defaults) and the geometry that was optimized using the HSE06 functional.
After the calculation has finished, you should see the following files in your folder:
As_l_proj_dos_tetrahedron.dat As_l_proj_dos_tetrahedron.dat.no_soc As_l_proj_dos_tetrahedron_raw.dat As_l_proj_dos_tetrahedron_raw.dat.no_soc Ga_l_proj_dos_tetrahedron.dat Ga_l_proj_dos_tetrahedron.dat.no_soc Ga_l_proj_dos_tetrahedron_raw.dat Ga_l_proj_dos_tetrahedron_raw.dat.no_soc KS_DOS_total_raw_tetrahedron.dat KS_DOS_total_raw_tetrahedron.dat.no_soc KS_DOS_total_tetrahedron.dat KS_DOS_total_tetrahedron.dat.no_soc aims.out band1001.out band1001.out.no_soc band1002.out band1002.out.no_soc band1003.out band1003.out.no_soc band1004.out band1004.out.no_soc band1005.out band1005.out.no_soc band1006.out band1006.out.no_soc band1007.out band1007.out.no_soc band1008.out band1008.out.no_soc band1009.out band1009.out.no_soc band1010.out band1010.out.no_soc control.in geometry.in
- All files (for both band and DOS outputs) ending with
*.datcontain the data with the SOC correction.
- All files (for both band and DOS outputs) ending with
*.dat.no_soccontain the data without SOC correction, only for reference purposes.
- For DOS outputs, the files including
*_l_proj_dos_tetrahedroncontain the species-projected DOS.
To visualize the band structure and DOS files, you can either execute
clims-aimsplot in the results directory or upload it to GIMS' output analyzer. The visualized data should look like following:
In this figure, the blue lines correspond to the band structure without SOC effects and the orange lines include the SOC correction. To spot the effect of SOC, look at the valence band maximum (VBM) at the \(\Gamma\)-point. Before the spin-orbit correction, the states at the VB were degenerate. The SOC correction splits the bands at the VBM according to their symmetry.
In the right panel, one can find the total (black) and the species projected DOS of As (purple) and Ga (brown). The valence bands are predominantly contributed by the As atoms, while the conduction bands have contributions from both As and Ga atoms. Note that the conduction band minimum (CBM) is not yet well captured in the DOS (the onset of the DOS is, in fact, at the CBM, but a more highly resolved plot would show this). in fact, the
k_grid 8 8 8 used in our example, while computationally manageable, is not yet sufficient to completely resolve this important part of the DOS. In GaAs the CBM is very steep and consequently a much denser k-grid would be needed to capture its correct value.
Mulliken-projected band structure
To gain more insights into the electronic structure, it is also possible to output the Mulliken-projected band structure. The Mulliken projection is the projection of electronic states onto contributions from individual atoms, using the basis functions that are attached to each atom.
To activate the Mulliken-projected band structure in output of FHI-aims, one only needs to change the
band keyword to
band_mulliken, as demonstrated in the following snippet:
xc hse06 0.11 hse_unit bohr hybrid_xc_coeff 0.25 exx_band_structure_version 1 relativistic atomic_zora scalar k_grid 8 8 8 output dos_tetrahedron -20 10 15001 output species_proj_dos_tetrahedron -20 10 15001 output band_mulliken 0.00000 0.00000 0.00000 0.50000 0.00000 0.50000 33 G X output band_mulliken 0.50000 0.00000 0.50000 0.50000 0.25000 0.75000 17 X W output band_mulliken 0.50000 0.25000 0.75000 0.37500 0.37500 0.75000 12 W K output band_mulliken 0.37500 0.37500 0.75000 0.00000 0.00000 0.00000 35 K G output band_mulliken 0.00000 0.00000 0.00000 0.50000 0.50000 0.50000 29 G L output band_mulliken 0.50000 0.50000 0.50000 0.62500 0.25000 0.62500 20 L U output band_mulliken 0.62500 0.25000 0.62500 0.50000 0.25000 0.75000 12 U W output band_mulliken 0.50000 0.25000 0.75000 0.50000 0.50000 0.50000 23 W L output band_mulliken 0.50000 0.50000 0.50000 0.37500 0.37500 0.75000 20 L K output band_mulliken 0.62500 0.25000 0.62500 0.50000 0.00000 0.50000 12 U X include_spin_orbit [attach light species defaults for Ga and As]
Run the calculation with the above settings (do not forget to attach the light species defaults) for the same converged geometry as before.
At the time of writing this tutorial, GIMS does not support visualizing the Mulliken-projected band structure. However, one can simply use
clims-aimsplot for plotting. Your final plot should be similar to the following:
The darker the color of the dots, the more do they correspond to that species. Using the Mulliken-projected band structure, the contributions of each species to the band structure of different parts of the Brillouin zone becomes clearer.