crystod-md#
MD-trajectory analyses. Two mode flags: --adp (atomic displacement parameters
as CIF) and --summary (time-averaged lattice statistics).
30. ADPs from an MD trajectory (--adp)#
Example directory: example/30_xdatcar2adp (testsuite section 30)
Compute the time-averaged structure and anisotropic displacement parameters
(ADPs, U_ij) from a molecular-dynamics XDATCAR trajectory and write them as a
CIF file:
cd example/30_xdatcar2adp/ScF3_Pm-3m_NpT_300K
crystod-md --adp --dim 4 4 4 --start-step 1000 --xdatcar XDATCAR --output ADP.cif
Supercell info:
atoms : 256
composition : {'Sc': 64, 'F': 192}
analyzed steps : 3001
Space group: Pm-3m (No. 221)
Atoms in unit cell : 4
Symmetry operations : 48
Asymmetric-unit sites: 2
Sc0: mult=1, coords=(1.00000, 0.99999, 1.00000)
F1: mult=3, coords=(0.00004, 0.50001, 0.00006)
ADP constraints per Wyckoff position:
Wyckoff 0 (Sc): site-symmetry order=48, U11=U22, U11=U33, U22=U33, U12=0, U13=0, U23=0
Wyckoff 1 (F): site-symmetry order=16, U11=U33, U12=0, U13=0, U23=0
Coordinate unwrapping done: 256 atoms x 3001 steps
Site Ueq (A^2) Constraint
------------------------------------------------------------
Sc0 0.005484 U11=U22, U11=U33, U22=U33, U12=0, U13=0, U23=0
F1 0.023520 U11=U33, U12=0, U13=0, U23=0
Saved: ADP.cif
The written CIF ends with the symmetry-constrained _atom_site_aniso_U_*
loop, ready for thermal-ellipsoid display in VESTA — for NpT ScF3 at 300 K the
F ellipsoids are strongly anisotropic (U11 = U33 >> U22, the pancake shape
perpendicular to the Sc-F-Sc bond that drives the negative thermal expansion),
while Sc stays isotropic by symmetry:
loop_
_atom_site_aniso_label
_atom_site_aniso_U_11
_atom_site_aniso_U_22
_atom_site_aniso_U_33
_atom_site_aniso_U_23
_atom_site_aniso_U_13
_atom_site_aniso_U_12
Sc0 0.00548 0.00548 0.00548 0.00000 0.00000 0.00000
F1 0.03265 0.00527 0.03265 0.00000 0.00000 0.00000
--dim is the MD supercell size relative to the unit cell, given as three
diagonal values or a nine-value diagonal matrix, quoted or unquoted
(--dim 4 4 4, --dim="4 4 4", --dim 4 0 0 0 4 0 0 0 4; non-diagonal
matrices are rejected). --start-step discards the first N MD steps as
equilibration (default 0). --xdatcar defaults to XDATCAR and --output to
ADP.cif. --format selects the trajectory format (currently vasp only;
LAMMPS support is planned).
The workflow: the supercell trajectory is folded and grouped into unit-cell
sites (--grouping-tolerance, default 0.1, sets how far an atom may sit from
its site and still be grouped with it), the space group of the time-averaged
unit cell is detected with spglib (--tolerance, also default 0.1), the
per-atom displacement covariances are rotated into the asymmetric-unit
representatives and averaged over all symmetry-equivalent atoms and MD steps,
and site-symmetry constraints (e.g. U11=U22=U33, U12=U13=U23=0 on a cubic
site) are enforced by projection. The CIF contains the symmetry operations, the
asymmetric-unit sites, and the _atom_site_aniso_U_* loop, ready for
thermal-ellipsoid display in VESTA. Both fixed-cell and variable-cell (NpT,
repeated-header) XDATCAR files are supported.
Based on script/xdatcar_to_adp.py by Ko Sato; the CrystOD port reproduces its
output exactly while replacing the pymatgen reader with a fast built-in parser.
30.1 Trajectory summary (--summary)#
Example directory: example/30_xdatcar2adp (testsuite sections 30-31: --summary runs in the CLI-regression section)
crystod-md --summary reports summary statistics of the same trajectory: the
time-averaged lattice parameters (a, b, c, alpha, beta, gamma) and cell volume
with standard deviations over the selected step range — useful for extracting
the equilibrium cell from an NpT run:
crystod-md --summary --start-step 1000 --xdatcar XDATCAR
crystod-md --summary --start-step 1000 --end-step 15000 # inclusive step range
Trajectory info:
atoms : 256
composition : {'Sc': 64, 'F': 192}
total steps : 4001
analyzed steps : 3001 (step 1000 .. 4000)
Time-averaged cell (mean +/- std):
a (A) : 16.149940 +/- 0.077310
b (A) : 16.155625 +/- 0.067497
c (A) : 16.154106 +/- 0.068162
alpha (deg) : 89.954896 +/- 0.214945
beta (deg) : 89.990825 +/- 0.262055
gamma (deg) : 89.997261 +/- 0.217921
V (A^3) : 4214.828940 +/- 45.946154
V/atom (A^3): 16.464176
NOTE: XDATCAR stores no energies or temperatures; Etot/T averages require OSZICAR/vasprun.xml.
--start-step, --xdatcar, and --format behave exactly as in --adp mode;
--end-step optionally truncates the range (default: last step). Note that
XDATCAR stores no energies or temperatures, so Etot/T averages are outside the
scope of --summary. Based on script/md_summary.py.