Source code for vasppy.xdatcar

from vasppy.poscar import Poscar
import re
import copy
import numpy as np

[docs]class Xdatcar: lines_offset = 9 def __init__( self ): """ Initialise a Xdatcar object. Args: None Returns: None """ self.poscar = [] self.poscar.append( Poscar() )
[docs] def read_from( self, filename ): self.poscar[ 0 ].read_from( filename ) with open( filename ) as f: lines = f.read() frame_header = re.compile( '\nDirect configuration=\s+\d+\n' ) frame_coordinates = [ frame.split("\n") for frame in frame_header.split( lines )[2:] ] for f, frame in enumerate( frame_coordinates ): self.poscar.append( copy.deepcopy( self.poscar[ 0 ] ) ) self.poscar[-1].coordinates = np.array( [ [ float( e ) for e in frame.pop(0).split()[0:3] ] for i in range( sum( self.poscar[0].atom_numbers ) ) ] )