2.1. Self-consistent calculation

In this section, I show how to compute the electronic ground-state density of graphene. In subsequent sections, I will use the ground-state density to compute the projected density of states of graphene. I use atomic orbitals throughout this tutorial to ease the computational burden, but everything can be done in real space as well. Copy the following input file and save it to a text file named c2_scf.txt.

info.calculationType = 'self-consistent'
info.savepath = 'results/c2_scf'
atom.element = [1 1]
la = 4.648725932
atom.xyz = [1 1/sqrt(3) 0;1 -1/sqrt(3) 0]/2*la
domain.latvec = [1/2 sqrt(3)/2 0; 1/2 -sqrt(3)/2 0; 0 0 4]*la
domain.lowres = 0.3
element.species = 'C'
element.path = './C_TM_LDA.mat'
kpoint.gridn = [9,9,1]
LCAO.status = 1

Then copy the C pseudopotential file from the database to ./C_TM_LDA.mat. Pass it to RESCU and execute the program as follows

rescu -i c2_scf.txt;

The results are saved as results/c2_scf.mat.

The system information and the simulation parameters are defined by keywords. The keywords generally have self-explanatory names, but you may refer to the input reference file inputDescription.m located int the doc directory for more information. I will briefly describe the keywords found in the above example.

  • info.calculationType tells RESCU to perform a self-consistent calculation;

  • info.savepath is the path and name prefix of the file where RESCU writes its results. RESCU appends the rank number to the file name prefix, which for serial calculations is always 0;

  • atom.element is a vector defining the element type of each atom. In the case of bulk silicon, there are two atoms of the silicon element defined below;

  • atom.xyz is an array of row-vectors containing the position of each atom;

  • domain.latvec defines the lattice vectors which must be written as an array of row-vectors;

  • domain.lowres controls the real space resolution;

  • element is a structure array containing the atomic information;

  • element.species is a tag for the element structure. It is usually the chemical symbol of the corresponding element;

  • element.path is a string containing the path to the pseudo-potential file associated with the element;

  • kpoint.gridn sets the number of k-points used to sample the first Brillouin zone. element;

  • LCAO.status perform the calculation using a basis of atomic orbitals.

The resolution (domain.lowres) and the Brillouin zone sampling (kpoint.gridn) determine the accuracy of the calculation. It is generally necessary to estimate the error on some quantity (e.g. total energy) by varying those parameters. In the present case, a resolution of 0.3 Bohr and a \(9\times9\) Monkhorst-Pack grid is sufficient.