User Tools

Site Tools


exercises:2016_uzh_cmest:band_structure_calculation

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Last revisionBoth sides next revision
exercises:2016_uzh_cmest:band_structure_calculation [2016/11/06 15:06] tmuellerexercises:2016_uzh_cmest:band_structure_calculation [2017/04/21 08:54] oschuett
Line 127: Line 127:
   * Why do you get 8 orbital energies? Try to change the input to get more unoccupied orbitals.   * Why do you get 8 orbital energies? Try to change the input to get more unoccupied orbitals.
  
-To convert the band structure file to a file which can be loaded directly into MATLAB for example, you can use the script ''/users/tiziano/bin/cp2k_bs2csv.py'' which when passed a band structure file ''graphene.bs'' as an argument will write files ''graphene.bs-setN.csv'' for each set containing the K-Point coordinates and the energies in one line.+To convert the band structure file to a file which can be loaded directly into MATLAB for example, you can use the script ''cp2k_bs2csv.py'' from below, which when passed a band structure file ''graphene.bs'' as an argument will write files ''graphene.bs-setN.csv'' for each set containing the K-Point coordinates and the energies in one line. 
 + 
 +<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/2016_uzh_cmest/band_structure_calculation.txt · Last modified: 2020/08/21 10:15 by 127.0.0.1