Electron properties allow you to produce band structures, charge densities, density of states, and more. To run an electronic properties calculation, you will need the wavefunction file (extension .f9) generated from a single-point calculation—for a graphene example, see the end of this page—and an input file (extension .d3). The input file depends on the property you are calculating. A good tutorial to follow is provided here: http://tutorials.crystalsolutions.eu/tutorial.html?td=properties&tf=properties_tut.
If you wonder how to choose the optimal directions for the k-points, you can use:
http://www.cryst.ehu.es/cryst/get_kvec.html
or
https://www.materialscloud.org/work/tools/seekpath
Alternatively, you can use the pathways already provided in the d3_input directory.
A band structure is designated by the .d3 extension and BAND in the first line. The general form of the file will have the following format:
BAND
<file name>
<1. n number of paths in reciprocal space> <2. shrinking factor of segments> <3. total number of k points along the path> <4. first band to be saved> <5. last band to be saved> <6. plotting option> <7. activated printing option>
k-point 1 k-point 2
.
.
.
k-point n-1 k-point n
END
Example: graphene
BAND
graphene
3 6 1000 1 36 1 0
0 0 0 3 0 0 GAMMA -> M
3 0 0 2 2 0 M -> K
2 2 0 0 0 0 K -> GAMMA
END
Example: MgO
Here is another example file, called MgO.d3:
BAND
MgO
4 8 60 1 18 1 0
0 0 0 0 4 0 # Gamma to X
4 0 4 4 2 6 # X to W
4 2 6 4 4 4 # W to L
4 4 4 0 0 0 # L to Gamma
END
Note that the path is continuous running from Gamma back to Gamma, however, you may set paths to be discontinuous.
An alternative way to set the path is with the labels of the high points of symmetry. This requires setting the second part of the third line to 0. Here's the same example above with the label notation:
BAND
MgO
4 8 60 1 18 1 0
G X # Gamma to X
X W # X to W
W L # W to L
L G # L to Gamma
END
This notation in general works, but some symmetry groups do not have their labels included. In particular, P1 is not included.
A DOS calculation is designated by the .d3 extension, NEWK in the first line, and DOSS after the NEWK input parameters. The general form of the file will have the following format:
NEWK
<shrinking factor for reciprocal space Park-Monkhorst net> <shrinking factor for reciprocal space Gilat net>
<evaluation of Fermi surface with same or new net> <print option>
DOSS
< n number of projections> <number of points along the energy axis in which the DOSS is calculated> <first band> <last band> <plot option> <degree of polynomial used for DOS expansion> <printing option>
total number of shells in projection 1 number of each shell in projection 1
total number of shells in projection 2 number of each shell in projection 2
.
.
.
total number of shells in projection n number of each shell in projection n
END
Here is an example for graphene.
NEWK
30 60
1 0
DOSS
4 250000 1 36 1 14 0
8 1 2 3 4 19 20 21 22 #C S
18 5 6 7 8 9 10 11 12 13 23 24 25 26 27 28 29 30 31 #C P
10 14 15 16 17 18 32 33 34 35 36 #C D
36 1 2 3 4 19 20 21 22 5 6 7 8 9 10 11 12 13 23 24 25 26 27 28 29 30 31 14 15 16 17 18 32 33 34 35 36 #C all
END
Here is another example for a file Be.d3 which separates the shells for s orbitals and p orbitals containing just Be atoms:
NEWK
20 20
1 0 #new net different from SCF output and no printing option
DOSS
3 100 3 6 1 14 0
4 1 3 5 7 #s shells
4 4 5 8 9 # px and py shells
2 6 10 #pz shells
END
Many structures contain many atoms with s-, p-, sp-, d-, and f- shells. Such structures will make it very complicated to copy shell information which makes it best to use a script to parse the shell and atom information. The alldos.py script in our group's GitHub can be used to generate a DOS input file automatically. To run this script, copy the .d12, .out, and .f9 files from a single-point or geometry optimization calculation in a new folder, and run the command: python alldos.py
Here is an example submission script (graphene_sp_BAND.sh) for a band structure calculation of graphene. The same script can be used for DOS by changing the name accordingly (e.g. graphene_sp_DOSS).
#!/bin/bash
#SBATCH -J graphene_sp_BAND
#SBATCH -o graphene_sp_BAND-%J.o
#SBATCH --cpus-per-task=1
#SBATCH --ntasks=16
#SBATCH -A general
#SBATCH -N 1
#SBATCH -t 0-04:00:00
#SBATCH --mem-per-cpu=3G
export JOB=graphene_sp_BAND
export DIR=$SLURM_SUBMIT_DIR
export scratch=$SCRATCH/crys17
echo "submit directory: "
echo $SLURM_SUBMIT_DIR
ml -* CRYSTAL/17
mkdir -p $scratch/$JOB
cp $DIR/$JOB.d3 $scratch/$JOB/INPUT
cp $DIR/$JOB.f9 $scratch/$JOB/fort.9
cd $scratch/$JOB
srun Pproperties 2>&1 >& $DIR/${JOB}.out
cp BAND.DAT ${DIR}/${JOB}.BAND.dat
cp DOSS.DAT ${DIR}/${JOB}.DOSS.dat
cp POTC.DAT ${DIR}/${JOB}.POTC.dat
Note: The parameters that can/should be changed are highlighted in bold.
Jobs are submitted with the sbatch command: sbatch graphene_sp_BAND.sh
Plotting can be done using the ipBANDS.py and ipDOS.py scripts in the Mendoza group GitHub. It is necessary to have the .dat, .d3, and .out files (generated from a property calculation) in the same folder as the python script.
To plot the electronic band structure, run the command python ipBANDS.py <E1> <E2>, where <E1> and <E2> denote an energy range (in eV) around the Fermi level. For example, python ipBANDS.py -5 5.
To plot the electronic density of states, run the command python ipDOS.py <E1> <E2>, where <E1> and <E2> denote an energy range (in eV) around the Fermi level. For example, python ipDOS.py -5 5. Once this command is executed, the program will show you a list of projections. First, you will have to tell the program the number of projections you would like to plot, and then specify the projections. For example, if we wanted to plot the carbon s and p orbital contributions for graphene, we would do the following:
python ipDOS.py -5 5
graphene
Available projections:
['C_s', 'C_p', 'C_d', 'C_all']
Enter how many projections you want to plot: 2
Enter string for projection:
Projection 1: C_s
Projection 2: C_p
Note: The above arguments in bold are the only user inputs; everything else is generated by the script.
This is an example single-point calculation for graphene (extension .d12). This will generate the .f9 (density matrix file) required for obtaining properties.
graphene
SLAB
1
2.444016 2.444015 120.0000
2
6 0.333333 0.666667 9.999960 Biso 1.000000 C
6 0.000000 0.000000 10.000040 Biso 1.000000 C
END
6 8
0 0 6 2.0 1.0
13575.349682 0.00022245814352
2035.2333680 0.00172327382520
463.22562359 0.00892557153140
131.20019598 0.03572798450200
42.853015891 0.11076259931000
15.584185766 0.24295627626000
0 0 2 2.0 1.0
6.2067138508 0.41440263448000
2.5764896527 0.23744968655000
0 0 1 0.0 1.0
0.4941102000 1.00000000000000
0 0 1 0.0 1.0
0.1644071000 1.00000000000000
0 2 4 2.0 1.0
34.697232244 0.00533336578050
7.9582622826 0.03586410909200
2.3780826883 0.14215873329000
0.8143320818 0.34270471845000
0 2 1 0.0 1.0
0.5662417100 1.00000000000000
0 2 1 0.0 1.0
0.2673545000 1.00000000000000
0 3 1 0.0 1.0
0.8791584200 1.00000000000000
99 0
END
DFT
SPIN
HSE06-D3
XLGRID
END
TOLINTEG
9 9 9 9 18
TOLDEE
7
SHRINK
0 60
30 30 1
SCFDIR
BIPOSIZE
110000000
EXCHSIZE
110000000
MAXCYCLE
800
FMIXING
30
DIIS
PPAN
END