Si(100) Surface: A Fundamental Slab Calculation
Estimated total CPU time: < 1 min when using 70 CPUs or more
Theoretical Background
Slab Models in Surface Science
Unlike our upcoming example with magnetic cobalt nanoparticles, we begin with a simpler non-magnetic semiconductor system: the Si(100) surface. Slab models represent the most common approach for studying surface properties in periodic DFT calculations. A slab consists of a finite number of atomic layers that extend periodically in two dimensions while being finite in the third dimension.
We will learn how to create a surface structure starting from the corresponding bulk structure using the FHI-aims GUI GIMS and run a simple relaxation for the resulting slab.
Note
This tutorial only introduces the basic concepts for calculating surface systems in FHI-aims. Additional details and functionality (work functions, electrostatic potential output, ...) are described in the tutorials Slab Calculations and Surface Simulations and Introduction of ab initio thermodynamics and REGC.
Creating the Si(100) surface
Let's start by creating a working directory for this tutorial:
First, we'll create a bulk silicon crystal as our starting point:
Create a geometry.in file with the conventional unit cell for silicon:
lattice_vector 5.430000 0.000000 0.000000
lattice_vector 0.000000 5.430000 0.000000
lattice_vector 0.000000 0.000000 5.430000
atom_frac 0.000000 0.000000 0.500000 Si
atom_frac 0.750000 0.750000 0.750000 Si
atom_frac 0.000000 0.500000 0.000000 Si
atom_frac 0.750000 0.250000 0.250000 Si
atom_frac 0.500000 0.000000 0.000000 Si
atom_frac 0.250000 0.750000 0.250000 Si
atom_frac 0.500000 0.500000 0.500000 Si
atom_frac 0.250000 0.250000 0.750000 Si
This structure represents the diamond cubic structure of silicon with a lattice constant of 5.43 Å.
Note
The bulk structure has been relaxed with the same settings we will use throughout this part of the tutorial, i.e., light
species defaults and the LDA functional.
Now we'll use GIMS (Graphical Interface for Materials Simulations) to create a Si(100) slab from our bulk structure. GIMS is a web-based interface that simplifies the creation of geometries and control files (among several other things) for FHI-aims. Start by opening a new browser window with GIMS at https://gims.ms1p.org/. Then follow the instructions below (you can click on the images for larger viewing) to create a Si(100) slab from the above Si bulk structure.
Creating the Si(100) slab with GIMS
Fill in the lattice vectors and atomic positions with the conventional unit cell of Si from before. As an alternative, you can upload the geometry.in
file for the bulk cell we have created previously.
Scroll down the page and open the Surface (Slab) Construction
tab.
Fill in the miller indices 1
,0
, 0
, select 7
atomic layers, and 40
Å of vacuum. Then click the Create Slab
button. This will create a 7-layer Si(100) slab in the GIMS window based on the conventional bulk cell.
Open the Standardized Cells
tab and click on the Primitive Cell
button. This will create the primitive cell of the Si(100) slab with 7 atoms per unit cell.
Vacuum thickness for slabs in FHI-aims
In many DFT codes (especially codes implementing plane-wave basis sets), you would need to run several calculations with different vacuum thicknesses to find the smallest value which gives physical results. This is because, for many DFT codes, increasing the size of the computational cell substantially increases the basis set size and thus the runtime of a calculation, even if no additional atoms are added to the system. However, in codes implementing localized basis functions (such as FHI-aims), there is negligible computational cost in adding additional vacuum to the system, so you may easily use a relatively large vacuum thickness of 40 Å or more from the onset without a noticeable performance impact.
You should now have a geometry.in
file for a 7-layer Si(100) slab with 40 Å of vacuum. The file should look like this:
lattice_vector 3.839590 0.000000 0.000000
lattice_vector 0.000000 3.839590 0.000000
lattice_vector 0.000000 0.000000 48.145000
atom_frac 0.500000 0.000000 0.415412 Si
atom_frac 0.000000 0.000000 0.443608 Si
atom_frac 0.000000 0.500000 0.471804 Si
atom_frac 0.500000 0.500000 0.500000 Si
atom_frac 0.500000 0.000000 0.528196 Si
atom_frac 0.000000 0.000000 0.556392 Si
atom_frac 0.000000 0.500000 0.584588 Si
Setting Up the Si(100) Calculation
Create a new working folder for the Si(100) slab calculation:
Create your geometry.in
file with the structure for the Si(100) slab from the previous section. Then create a control.in
with the following settings:
These settings should look familiar to you. We want to highlight one part:
k_grid 17 17 1
: The k-grid is specifically chosen for this slab system. There should be no interaction between different periodic images of the slab in z direction. Therefore, only one k-point is needed on that axis. If you did need more than one k-point along that axis to yield converged results, this would imply that periodic images in that direction were interacting. The k-points along the \(k_x\) and \(k_y\) direction still have to be converged as usual.
Add the light
species defaults by inputting this clims
command:
Submit the calculation to your compute system. During the webinar hands-on session, you may use the provided fhiaims_job.sh
script:
Submission script on provided AWS resources
You can submit a job to the computing queue with:
Make sure to submit the job from the folder where the FHI-aims input files are located.
The submission script looks like the following:
#!/bin/bash -l
# Standard output and error:
#SBATCH -o ./slurm.stdout
#SBATCH -e ./slurm.stderr
# Initial working directory:
#SBATCH -D ./
# Job Name:
#SBATCH -J FHI-aims
# Number of nodes and MPI tasks per node:
#SBATCH --nodes=1
# HPC7g
#SBATCH --tasks-per-node=64
#
# Wall clock limit:
#SBATCH --time=00:15:00
ulimit -s unlimited
module purge
module load fhi-aims aims-tools
date
mpirun aims.x > aims.out
The calculation should take less than 1 minute on the provided resources.
Once the calculation is finished, you can inspect the output in aims.out
:
The code was able to correctly identify the input as a z-oriented slab with 40 Å of vacuum. As mentioned earlier, it is important to choose an appropriate k-grid for slab calculations. FHI-aims performs simple runtime checks on the specified k-grids to avoid unintended user errors, i.e., whether more than 1 k-point is specified in vacuum directions or a strongly inhomogeneous k-grid is specified. You can find the following in your aims.out
file:
Checking k-grid inconsistencies now:
| No of k-points * lattice vector length for lattice vector 1 is 65.27 Angstroms
| No of k-points * lattice vector length for lattice vector 2 is 65.27 Angstroms
| No of k-points * lattice vector length for vacuum lattice vector 3 is 48.15 Angstroms
| Ratio for k-points * lattice vector length for lattice vectors 1 vs 2 is 1.00
* The specified k_grid leads to a nearly homogenous k-grid density in non-vacuum directions,
* and seems sensible.
Try uploading the aims.out
to the GIMS Output Analyzer
to visualize and inspect the relaxation. You will see that the relaxation leads to a slight elongation of the slab but to no surface reconstruction.
Tip
With GIMS you can also easily create supercells of your bulk/surface structures. The Si(100) surface is actually known to reconstruct to an asymmetric dimer structure, but this requires at least a 2x1 supercell. More details, including how to obtain this reconstruction, are described in this tutorial.