User Tools

Site Tools


exercises:2018_uzh_cmest:band

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

exercises:2018_uzh_cmest:band [2018/09/17 12:52] (current)
Line 1: Line 1:
 +======= Getting the band structure of WO$_3$ Lattice =======
 +
 +In this exercise, you will carry out band structure calculation using K-point sampling for Cubic lattice WO$_3$. The reference band structure you can find in [[http://​pubs.acs.org/​doi/​abs/​10.1021/​cm3032225|this paper]]
 +
 +{{:​exercises:​2017_uzh_cmest:​wo3.jpeg?​1200|}}
 +
 +To get the band structure for WO3, only a few changes are required compared to the previous example for [[PDOS|calculating the PDOS]]:
 +
 +<code - WO3-bs.inp>​
 +&GLOBAL
 +   ​PROJECT WO3-kp-bs
 +   ​RUN_TYPE ENERGY
 +   ​PRINT_LEVEL MEDIUM
 +&END GLOBAL
 +
 +&​FORCE_EVAL
 +   ​METHOD Quickstep
 +   &​DFT
 +      BASIS_SET_FILE_NAME ​ BASIS_MOLOPT
 +      POTENTIAL_FILE_NAME ​ POTENTIAL
 +
 +      &​POISSON
 +         ​PERIODIC XYZ
 +      &END POISSON
 +      &QS
 +         ​EXTRAPOLATION USE_GUESS ! required for K-Point sampling
 +      &END QS
 +      &SCF
 +         ​SCF_GUESS ATOMIC
 +         ​EPS_SCF 1.0E-6
 +         ​MAX_SCF 300
 +
 +         ​ADDED_MOS 2
 +         &​DIAGONALIZATION
 +            ALGORITHM STANDARD
 +            EPS_ADAPT 0.01
 +         &​END DIAGONALIZATION
 +         &​SMEAR ​ ON
 +            METHOD FERMI_DIRAC
 +            ELECTRONIC_TEMPERATURE [K] 300
 +         &​END SMEAR
 +
 +         &​MIXING
 +            METHOD BROYDEN_MIXING
 +            ALPHA 0.2
 +            BETA 1.5
 +            NBROYDEN 8
 +         &​END MIXING
 +
 +      &END SCF
 +      &XC
 +         &​XC_FUNCTIONAL PBE
 +         &​END XC_FUNCTIONAL
 +      &END XC
 +      &​KPOINTS
 +         ​SCHEME MONKHORST-PACK 3 3 1
 +         ​SYMMETRY OFF
 +         ​WAVEFUNCTIONS REAL
 +         ​FULL_GRID .TRUE.
 +         ​PARALLEL_GROUP_SIZE ​ 0
 +      &END KPOINTS
 +      &PRINT
 +         &​BAND_STRUCTURE
 +            ADDED_MOS 2
 +            FILE_NAME WO3.bs
 +            &​KPOINT_SET
 +               UNITS B_VECTOR
 +               ​SPECIAL_POINT ???   #GAMA
 +               ​SPECIAL_POINT ???   #X
 +               ​SPECIAL_POINT ???   #M
 +               ​SPECIAL_POINT ???   #GAMA
 +               ​SPECIAL_POINT ???   #R
 +               ​SPECIAL_POINT ???   #M
 +               ​NPOINTS ???
 +            &END
 +         &​END BAND_STRUCTURE
 +      &END PRINT
 +   &​END DFT
 +
 +   &​SUBSYS
 +      &CELL
 +         ABC [angstrom] 3.810000 3.810000 3.810000
 +         ​PERIODIC XYZ
 +         ​MULTIPLE_UNIT_CELL 1 1 1
 +      &END CELL
 +      &​TOPOLOGY
 +         ​MULTIPLE_UNIT_CELL 1 1 1
 +      &END TOPOLOGY
 +      &COORD
 +         ​SCALED
 +         W 0.0 0.0 0.0
 +         O 0.5 0.0 0.0
 +         O 0.0 0.5 0.0
 +         O 0.0 0.0 0.5
 +      &END
 +      &KIND W
 +         ​ELEMENT W
 +         ​BASIS_SET DZVP-MOLOPT-SR-GTH
 +         ​POTENTIAL GTH-PBE
 +      &END KIND
 +      &KIND O
 +         ​ELEMENT O
 +         ​BASIS_SET DZVP-MOLOPT-SR-GTH
 +         ​POTENTIAL GTH-PBE
 +      &END KIND
 +   &​END SUBSYS
 +
 +&END FORCE_EVAL
 +
 +</​code>​
 +
 +<note important>​At present, it is not possible to get the projected density of states when doing a K-Point calculation. The special points should be given in terms of the b-vectors.</​note>​
 +
 +Some notes on the input file:
 +  * By specifying the ''​KPOINT''​ section you are enabling the K-Point calculation.
 +  * While you could specify the K-Points directly, we are using the Monkhorst-Pack scheme [(http://​journals.aps.org/​prb/​abstract/​10.1103/​PhysRevB.13.5188)] to generate them. The numbers following the keyword ''​MONKHORST-PACK''​ specify the tiling of the brillouin zone.
 +  * After the basic calculation,​ CP2K calculates the energies along certain lines, denoted as ''​KPOINT_SET''​ (when you check [[https://​manual.cp2k.org/​trunk/​CP2K_INPUT/​FORCE_EVAL/​DFT/​PRINT/​BAND_STRUCTURE/​KPOINT_SET.html|the documentation]] you will note that this section can be repeated).
 +  * The keyword ''​NPOINTS''​ specifies how many points (in the addition to the starting point) should be sampled between two special points.
 +  * The ''​SPECIAL_POINT''​ keyword is used to specify the start-, mid- and endpoints of the line. Those points usually denote special points in the reciprocal lattice/​unit cell, like the $\Gamma$, $M$ or $K$ point. You can find the definition for these in the appendix section of [[http://​www.sciencedirect.com/​science/​article/​pii/​S0927025610002697|this paper]]. This keyword can also be specified multiple times, making it possible to directly get the band structure for a complete //path//.
 +
 +Now, when you run this input file you will get in addition the the output file, a file named ''​WO3.bs''​ which will look similar to the following:
 +
 +<​code>​
 + ​SET: ​      ​1 ​                TOTAL POINTS: ​     26
 +   ​POINT ​  ​1 ​                    ​******** ​   ******** ​   ********
 +   ​POINT ​  ​2 ​                    ​******** ​   ******** ​   ********
 +   ​POINT ​  ​3 ​                    ​******** ​   ******** ​   ********
 +   ​POINT ​  ​4 ​                    ​******** ​   ******** ​   ********
 +   ​POINT ​  ​5 ​                    ​******** ​   ******** ​   ********
 +   ​POINT ​  ​6 ​                    ​******** ​   ******** ​   ********
 +       ​Nr. ​   1    Spin 1        K-Point ​ 0.00000000 ​ 0.00000000 ​ 0.00000000
 +               20
 +           ​-73.66652408 ​   -38.53370023 ​   -37.80464132 ​   -37.79327769
 +           ​-16.71308703 ​   -16.11075946 ​   -16.02553853 ​    ​-1.43495530
 +            -1.34739188 ​    ​-1.33357408 ​     0.37912017 ​     0.38948689
 +             ​0.39582882 ​     0.40030859 ​     0.46965212 ​     0.47418816
 +             ​2.60728842 ​     2.62105342 ​     3.16044140 ​     6.99806305
 +       ​Nr. ​   2    Spin 1        K-Point ​ 0.00000000 ​ 0.10000000 ​ 0.00000000
 +               20
 +           ​-73.66647294 ​   -38.53337818 ​   -37.80859042 ​   -37.79536623
 +           ​-16.67479677 ​   -16.09554462 ​   -15.96731960 ​    ​-1.68492873
 +            -1.44087258 ​    ​-1.34318045 ​     0.09257368 ​     0.13769271
 +             ​0.21643888 ​     0.38447849 ​     0.44179002 ​     0.45757924
 +             ​2.61768501 ​     3.02368022 ​     3.51828287 ​     7.06644645
 +
 +[...]
 +</​code>​
 +
 +For each set there is a block named ''​SET''​ with the special points listed as ''​POINT'',​ followed by sub-blocks for each K-Point containing the energies for each MO.
 +
 +Your tasks:
 +
 +  * Lookup the special points for the $\Gamma$, $X$,$M$,$R$ points in the [[http://​pubs.acs.org/​doi/​abs/​10.1021/​cm3032225|mentioned paper]] (make sure you choose the right lattice). Calculate and plot the band structure for WO3 lattice along $\Gamma$, $X$,​$M$,​$\Gamma$,​$R$,​$M$ (you are free to decide whether to use multiple K-Point sets are multiple special points in a single set). Mark the special points. Choose an appropriate number of interpolation points to get a smooth plot.
 +  * Compare your plot with plots from literature. What is different?
 +  * How many orbital energies do you get and why? Try to change the input to get more unoccupied orbitals.
 +
 +To convert the band structure file to a file which can be plotted directly, you can use the script ''​cp2k_bs2csv.py''​ from below, which when passed a band structure file ''​WO3.bs''​ as an argument will write files ''​WO3.bs-set-1.csv''​ for each set containing the K-Point coordinates and the energies in one line.
 +
 +To plot the ''​WO3.bs-set-1.csv''​ file, you can either load it into $MATLAB$ or use $GNUPLOT$ command line.
 +<​code>​gnuplot>​set yrange [-8:14]
 +gnuplot>​plot for [i=4:23] "​WO3.bs.set-1.csv"​ u 0:i w l t ""​
 + </​code>​
 +<file python cp2k_bs2csv.py>​
 +#​!/​usr/​bin/​env python
 +"""​
 +Convert the CP2K band structure output to CSV files
 +"""​
 +
 +import re
 +import argparse
 +
 +SET_MATCH = re.compile(r'''​
 +[ ]*
 +  SET: [ ]* (?​P<​setnr>​\d+) [ ]*
 +  TOTAL [ ] POINTS: [ ]* (?​P<​totalpoints>​\d+) [ ]*
 +  \n
 +(?​P<​content>​
 +  [\s\S]*?​(?​=\n.*?​[ ] SET|$) ​ # match everything until next '​SET'​ or EOL
 +)
 +''',​ re.VERBOSE)
 +
 +SPOINTS_MATCH = re.compile(r'''​
 +[ ]*
 +  POINT [ ]+ (?​P<​pointnr>​\d+) [ ]+ (?​P<​a>​\S+) [ ]+ (?​P<​b>​\S+) [ ]+ (?​P<​c>​\S+)
 +''',​ re.VERBOSE)
 +
 +POINTS_MATCH = re.compile(r'''​
 +[ ]*
 +  Nr\. [ ]+ (?​P<​nr>​\d+) [ ]+
 +  Spin [ ]+ (?​P<​spin>​\d+) [ ]+
 +  K-Point [ ]+ (?​P<​a>​\S+) [ ]+ (?​P<​b>​\S+) [ ]+ (?​P<​c>​\S+) [ ]*
 +  \n
 +[ ]* (?​P<​npoints>​\d+) [ ]* \n
 +(?​P<​values>​
 +  [\s\S]*?​(?​=\n.*?​[ ] Nr|$)  # match everything until next '​Nr.'​ or EOL
 +)
 +''',​ re.VERBOSE)
 +
 +if __name__ == '​__main__':​
 +    parser = argparse.ArgumentParser(description=__doc__)
 +    parser.add_argument('​bsfilename',​ metavar='​bandstructure-file',​ type=str,
 +                        help="​the band structure file generated by CP2K")
 +
 +    args = parser.parse_args()
 +
 +    with open(args.bsfilename,​ '​r'​) as fhandle:
 +        for kpoint_set in SET_MATCH.finditer(fhandle.read()):​
 +            filename = "​{}.set-{}.csv"​.format(args.bsfilename,​
 +                                              kpoint_set.group('​setnr'​))
 +            set_content = kpoint_set.group('​content'​)
 +
 +            with open(filename,​ '​w'​) as csvout:
 +                print(("​writing point set {}"
 +                       "​ (total number of k-points: {totalpoints})"​
 +                       ​.format(filename,​ **kpoint_set.groupdict())))
 +
 +                print(" ​ with the following special points:"​)
 +                for point in SPOINTS_MATCH.finditer(set_content):​
 +                    print(" ​ {pointnr}: {a}/​{b}/​{c}"​.format(
 +                        **point.groupdict()))
 +
 +                for point in POINTS_MATCH.finditer(set_content):​
 +                    results = point.groupdict()
 +                    results['​values'​] = " "​.join(results['​values'​].split())
 +                    csvout.write("​{a} {b} {c} {values}\n"​.format(**results))
 +
 +</​file>​
  
exercises/2018_uzh_cmest/band.txt ยท Last modified: 2018/09/17 12:52 (external edit)