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 frame in 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))
]
)