Source code for dpti.lib.lammps

#!/usr/bin/env python3

import numpy as np


[docs] def get_natoms(filename): with open(filename) as fp: lines = fp.read().split("\n") for ii in lines: if "atoms" in ii: natoms = int(ii.split()[0]) return natoms raise RuntimeError("cannot find key word 'atoms' in " + filename)
def _is_n_number(inputs, nn): words = inputs.split() if len(words) != nn: return False, None res = [] for ii in words: try: res.append(float(ii)) except ValueError: return False, None return True, res
[docs] def get_thermo(filename): with open(filename) as fp: fc = fp.read().split("\n") for sl in range(len(fc)): if "Step " in fc[sl]: break nwords = len(fc[sl + 1].split()) data = [] for el in range(sl + 1, len(fc)): flag, res = _is_n_number(fc[el], nwords) if not flag: break else: data.append(res) data = np.array(data) return data
[docs] def get_thermo_old(filename): with open(filename) as fp: fc = fp.read().split("\n") for sl in range(len(fc)): if "Step KinEng PotEng TotEng" in fc[sl]: break for el in range(len(fc)): if "Loop time of" in fc[el]: break data = [] for ii in range(sl + 1, el): data.append([float(jj) for jj in fc[ii].split()]) data = np.array(data) return data
[docs] def get_last_dump(dump): with open(dump) as fp: lines = fp.read().split("\n") lines = lines[:-1] step_idx = -1 for idx, ii in enumerate(lines): if "ITEM: TIMESTEP" in ii: step_idx = idx if step_idx == -1: raise RuntimeError("cannot find timestep in lammps dump, something wrong") return "\n".join(lines[step_idx:])