-
Notifications
You must be signed in to change notification settings - Fork 96
Expand file tree
/
Copy pathmax_force.py
More file actions
60 lines (49 loc) · 1.69 KB
/
max_force.py
File metadata and controls
60 lines (49 loc) · 1.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env python
import argparse
import logging
import os
import sys
from vaspy import PY2
if PY2:
import commands as subprocess
else:
import subprocess
import numpy as np
from vaspy.iter import OutCar
from vaspy.matstudio import XsdFile
from vaspy.functions import str2list
_logger = logging.getLogger("vaspy.script")
# Set arguments parser.
parser = argparse.ArgumentParser()
parser.add_argument("--xsd", help="create MaterStudio .xsd file",
action="store_true")
args = parser.parse_args()
outcar = OutCar()
pos, forces = outcar.forces(-1)
idx = outcar.last_max_atom - 1
pos = pos[idx]
forces = forces[idx]
_logger.info("{:<15s}: {}".format("max force atom", outcar.last_max_atom))
_logger.info("{:<15s}: ({}, {}, {})".format("atom position", *pos))
_logger.info("{:<15s}: {}, {}, {}".format("forces", *forces))
_logger.info("{:<15s}: {}\n".format("total-force", outcar.last_max_force))
# Get fort.188 info.
if os.path.exists('./fort.188'):
with open('fort.188', 'r') as f:
atom_info = f.readlines()[5]
_logger.info("{:<10s}{:<10s}{:<15s}".format("Atom1", "Atom2", "DISTANCE"))
_logger.info("-"*30)
_logger.info("{:<10s}{:<10s}{:<15s}\n".format(*str2list(atom_info)))
# Create .xsd file.
if args.xsd:
status, output = subprocess.getstatusoutput('ls *.xsd | head -1')
if not output.endswith('.xsd'):
_logger.info("No .xsd file in current directory.")
sys.exit(1)
xsd = XsdFile(filename=output)
# modify atom color
xsd.modify_color(atom_number=outcar.last_max_atom)
jobname = output.split('.')[0]
filename = jobname + '-force.xsd'
xsd.tofile(filename=filename)
_logger.info(filename + " has been created.")