pymdkit 1.4.4__tar.gz → 1.4.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pymdkit-1.4.4/src/pymdkit.egg-info → pymdkit-1.4.5}/PKG-INFO +2 -2
- {pymdkit-1.4.4 → pymdkit-1.4.5}/README.md +1 -1
- {pymdkit-1.4.4 → pymdkit-1.4.5}/pyproject.toml +1 -1
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/__init__.py +1 -1
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_gpumd.py +2 -6
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/gpumd_thermo.py +46 -12
- {pymdkit-1.4.4 → pymdkit-1.4.5/src/pymdkit.egg-info}/PKG-INFO +2 -2
- {pymdkit-1.4.4 → pymdkit-1.4.5}/LICENSE +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/setup.cfg +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/__init__.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_extxyz.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_fileio.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_geometry.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_reduction.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_vasp_output.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/_vaspset.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/add_config_type.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/chemsys_entry.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/compute_ehull.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/compute_msd_all_groups.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/compute_rmsd.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/convert.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/ewald.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/gather_contcar.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/gpumd_group.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/gpumd_trjcat.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/nep_rmse.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/pca.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/perturb.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/submit_vasp.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/substitute.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/supercell.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/symmetrize.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/trj_extract.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/trj_sparse.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/umap.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/vasp2xyz.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/vasp_fe.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/vasp_relax.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/commands/vasp_static.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit/pymdkit_main.py +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit.egg-info/SOURCES.txt +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit.egg-info/dependency_links.txt +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit.egg-info/entry_points.txt +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit.egg-info/requires.txt +0 -0
- {pymdkit-1.4.4 → pymdkit-1.4.5}/src/pymdkit.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pymdkit
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.5
|
|
4
4
|
Summary: A unified command-line toolkit for atomistic / MD structure workflows.
|
|
5
5
|
Author-email: Yueda Wang <ydwang0608@ustc.edu.cn>
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -177,7 +177,7 @@ When `pca` or `umap` receives `-it train.xyz`, it reads `Config_type` from every
|
|
|
177
177
|
|
|
178
178
|
For folder conversion, `convert -if INPUT -of OUTPUT` writes `.xyz` by default. Set another target extension with `-oe`, for example `-oe cif` or `-oe vasp`. Single-file and trajectory modes infer the target format from `-o` and `-ot`.
|
|
179
179
|
|
|
180
|
-
`gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters
|
|
180
|
+
`gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters and volume can corroborate an energy transition. Temperature and all six pressure components remain diagnostics only and cannot classify an otherwise stationary run as abnormal by themselves. Thermo plots use Arial when available and the Morandi color cycle. They plot all six pressure components, use frameless upper-right legends with added vertical headroom, preserve correct Å units, and shade abnormal regions on potential energy, lattice parameters, and volume. Potential energy and volume are divided by 1000 and labeled ×10³ only when their absolute plotted values reach 1000. The analysis uses the last `run` segment, or the last 80% when `run.in` has no `run` record; inspect the plot before making a final scientific judgment.
|
|
181
181
|
|
|
182
182
|
The thermo parser follows the [official GPUMD thermo.out format](https://gpumd.org/gpumd/output_files/thermo_out.html): 18 columns are required, `pressure.txt` exports `Pxx Pyy Pzz Pyz Pxz Pxy`, box vectors are interpreted as a full 3×3 matrix, `time_step` propagates between runs, and `dump_thermo` does not.
|
|
183
183
|
|
|
@@ -151,7 +151,7 @@ When `pca` or `umap` receives `-it train.xyz`, it reads `Config_type` from every
|
|
|
151
151
|
|
|
152
152
|
For folder conversion, `convert -if INPUT -of OUTPUT` writes `.xyz` by default. Set another target extension with `-oe`, for example `-oe cif` or `-oe vasp`. Single-file and trajectory modes infer the target format from `-o` and `-ot`.
|
|
153
153
|
|
|
154
|
-
`gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters
|
|
154
|
+
`gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters and volume can corroborate an energy transition. Temperature and all six pressure components remain diagnostics only and cannot classify an otherwise stationary run as abnormal by themselves. Thermo plots use Arial when available and the Morandi color cycle. They plot all six pressure components, use frameless upper-right legends with added vertical headroom, preserve correct Å units, and shade abnormal regions on potential energy, lattice parameters, and volume. Potential energy and volume are divided by 1000 and labeled ×10³ only when their absolute plotted values reach 1000. The analysis uses the last `run` segment, or the last 80% when `run.in` has no `run` record; inspect the plot before making a final scientific judgment.
|
|
155
155
|
|
|
156
156
|
The thermo parser follows the [official GPUMD thermo.out format](https://gpumd.org/gpumd/output_files/thermo_out.html): 18 columns are required, `pressure.txt` exports `Pxx Pyy Pzz Pyz Pxz Pxy`, box vectors are interpreted as a full 3×3 matrix, `time_step` propagates between runs, and `dump_thermo` does not.
|
|
157
157
|
|
|
@@ -424,12 +424,8 @@ def load_thermo(thermo_path, run_path):
|
|
|
424
424
|
abnormal_mask[start:] = True
|
|
425
425
|
|
|
426
426
|
warnings.extend(structural_warnings)
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
abnormal_mask[start:] = True
|
|
430
|
-
warnings.insert(
|
|
431
|
-
0, "region mapping: full equilibrium segment used as fallback"
|
|
432
|
-
)
|
|
427
|
+
if abnormal_mask.any():
|
|
428
|
+
warnings.extend(other_warnings)
|
|
433
429
|
|
|
434
430
|
return ThermoData(
|
|
435
431
|
time=time,
|
|
@@ -13,7 +13,28 @@ except ImportError:
|
|
|
13
13
|
from _gpumd import load_thermo, mask_intervals
|
|
14
14
|
|
|
15
15
|
COMMAND = "gpumd-thermo"
|
|
16
|
-
HELP = "Export and plot GPUMD thermo.out data and warn about instability."
|
|
16
|
+
HELP = "Export and plot GPUMD thermo.out data and warn about instability."
|
|
17
|
+
|
|
18
|
+
MORANDI_COLORS = [
|
|
19
|
+
"#686789",
|
|
20
|
+
"#B77F70",
|
|
21
|
+
"#E5E2B9",
|
|
22
|
+
"#BEB1A8",
|
|
23
|
+
"#A79A89",
|
|
24
|
+
"#8A95A9",
|
|
25
|
+
"#ECCED0",
|
|
26
|
+
"#7D7465",
|
|
27
|
+
"#E8D3C0",
|
|
28
|
+
"#7A8A71",
|
|
29
|
+
"#789798",
|
|
30
|
+
"#B57C82",
|
|
31
|
+
"#9FABB9",
|
|
32
|
+
"#B0B1B6",
|
|
33
|
+
"#99857E",
|
|
34
|
+
"#88878D",
|
|
35
|
+
"#91A0A5",
|
|
36
|
+
"#9AA690",
|
|
37
|
+
]
|
|
17
38
|
|
|
18
39
|
|
|
19
40
|
def save_table(path, time, values, header):
|
|
@@ -35,7 +56,7 @@ def scaled_plot_values(values, quantity, unit):
|
|
|
35
56
|
def mark_abnormal_regions(axis, intervals):
|
|
36
57
|
for begin, end in intervals:
|
|
37
58
|
axis.axvspan(
|
|
38
|
-
begin, end, color=
|
|
59
|
+
begin, end, color=MORANDI_COLORS[12], alpha=0.35, linewidth=0, zorder=0
|
|
39
60
|
)
|
|
40
61
|
axis.text(
|
|
41
62
|
(begin + end) / 2.0,
|
|
@@ -45,9 +66,9 @@ def mark_abnormal_regions(axis, intervals):
|
|
|
45
66
|
ha="center",
|
|
46
67
|
va="top",
|
|
47
68
|
fontsize=7,
|
|
48
|
-
color=
|
|
69
|
+
color=MORANDI_COLORS[0],
|
|
49
70
|
bbox={
|
|
50
|
-
"facecolor":
|
|
71
|
+
"facecolor": MORANDI_COLORS[2],
|
|
51
72
|
"edgecolor": "none",
|
|
52
73
|
"alpha": 0.8,
|
|
53
74
|
"pad": 1.0,
|
|
@@ -57,22 +78,33 @@ def mark_abnormal_regions(axis, intervals):
|
|
|
57
78
|
)
|
|
58
79
|
|
|
59
80
|
|
|
81
|
+
def set_upper_headroom(axis, values):
|
|
82
|
+
values = np.asarray(values, dtype=float)
|
|
83
|
+
finite = values[np.isfinite(values)]
|
|
84
|
+
if not finite.size:
|
|
85
|
+
return
|
|
86
|
+
minimum = float(np.min(finite))
|
|
87
|
+
maximum = float(np.max(finite))
|
|
88
|
+
span = maximum - minimum
|
|
89
|
+
if span == 0:
|
|
90
|
+
span = max(abs(maximum) * 0.05, 1.0)
|
|
91
|
+
axis.set_ylim(minimum - 0.05 * span, maximum + 0.4 * span)
|
|
92
|
+
|
|
60
93
|
def plot_thermo(path, thermo):
|
|
61
94
|
import matplotlib
|
|
62
95
|
matplotlib.use("Agg")
|
|
96
|
+
from cycler import cycler
|
|
63
97
|
matplotlib.rcParams.update({
|
|
64
98
|
"font.family": "sans-serif",
|
|
65
99
|
"font.sans-serif": ["Arial", "Liberation Sans", "DejaVu Sans"],
|
|
100
|
+
"axes.prop_cycle": cycler(color=MORANDI_COLORS),
|
|
66
101
|
})
|
|
67
102
|
import matplotlib.pyplot as plt
|
|
68
103
|
|
|
69
|
-
colors =
|
|
104
|
+
colors = MORANDI_COLORS
|
|
70
105
|
legend_style = {
|
|
71
|
-
"loc": "
|
|
72
|
-
"frameon":
|
|
73
|
-
"facecolor": "white",
|
|
74
|
-
"edgecolor": "none",
|
|
75
|
-
"framealpha": 1.0,
|
|
106
|
+
"loc": "upper right",
|
|
107
|
+
"frameon": False,
|
|
76
108
|
}
|
|
77
109
|
intervals = mask_intervals(thermo.time, thermo.abnormal_mask)
|
|
78
110
|
potential, potential_label = scaled_plot_values(
|
|
@@ -95,7 +127,7 @@ def plot_thermo(path, thermo):
|
|
|
95
127
|
axes[0, 1].set_ylabel(potential_label)
|
|
96
128
|
mark_abnormal_regions(axes[0, 1], intervals)
|
|
97
129
|
|
|
98
|
-
for index, label in enumerate(("Pxx", "Pyy", "Pzz")):
|
|
130
|
+
for index, label in enumerate(("Pxx", "Pyy", "Pzz", "Pyz", "Pxz", "Pxy")):
|
|
99
131
|
axes[0, 2].plot(
|
|
100
132
|
thermo.time,
|
|
101
133
|
thermo.pressure[:, index],
|
|
@@ -104,7 +136,8 @@ def plot_thermo(path, thermo):
|
|
|
104
136
|
zorder=2,
|
|
105
137
|
)
|
|
106
138
|
axes[0, 2].set_ylabel("Pressure (GPa)")
|
|
107
|
-
axes[0, 2].
|
|
139
|
+
set_upper_headroom(axes[0, 2], thermo.pressure)
|
|
140
|
+
axes[0, 2].legend(**legend_style, ncol=2).set_zorder(4)
|
|
108
141
|
|
|
109
142
|
for index, label in enumerate(("a", "b", "c")):
|
|
110
143
|
axes[1, 0].plot(
|
|
@@ -116,6 +149,7 @@ def plot_thermo(path, thermo):
|
|
|
116
149
|
)
|
|
117
150
|
axes[1, 0].set_ylabel("Lattice parameters (Å)")
|
|
118
151
|
mark_abnormal_regions(axes[1, 0], intervals)
|
|
152
|
+
set_upper_headroom(axes[1, 0], thermo.lengths)
|
|
119
153
|
axes[1, 0].legend(**legend_style).set_zorder(4)
|
|
120
154
|
|
|
121
155
|
axes[1, 1].plot(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pymdkit
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.5
|
|
4
4
|
Summary: A unified command-line toolkit for atomistic / MD structure workflows.
|
|
5
5
|
Author-email: Yueda Wang <ydwang0608@ustc.edu.cn>
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -177,7 +177,7 @@ When `pca` or `umap` receives `-it train.xyz`, it reads `Config_type` from every
|
|
|
177
177
|
|
|
178
178
|
For folder conversion, `convert -if INPUT -of OUTPUT` writes `.xyz` by default. Set another target extension with `-oe`, for example `-oe cif` or `-oe vasp`. Single-file and trajectory modes infer the target format from `-o` and `-ot`.
|
|
179
179
|
|
|
180
|
-
`gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters
|
|
180
|
+
`gpumd-thermo` writes `temperature.txt`, `potential-energy.txt`, `pressure.txt`, `lattice-parameters.txt`, `volume.txt`, `lattice-angles.txt`, and a headless `thermo.png` in every detected GPUMD job folder. Potential energy is the primary equilibrium signal. Detection requires a persistent change with a meaningful magnitude relative to the robust natural energy fluctuations, so ordinary correlated thermal noise and isolated spikes are not classified as abnormal. When multiple lattice or volume measures independently show a transition, a more sensitive noise-relative potential-energy test is enabled; this avoids a fixed eV or percentage-of-total-energy threshold that would depend on system size. Lattice parameters and volume can corroborate an energy transition. Temperature and all six pressure components remain diagnostics only and cannot classify an otherwise stationary run as abnormal by themselves. Thermo plots use Arial when available and the Morandi color cycle. They plot all six pressure components, use frameless upper-right legends with added vertical headroom, preserve correct Å units, and shade abnormal regions on potential energy, lattice parameters, and volume. Potential energy and volume are divided by 1000 and labeled ×10³ only when their absolute plotted values reach 1000. The analysis uses the last `run` segment, or the last 80% when `run.in` has no `run` record; inspect the plot before making a final scientific judgment.
|
|
181
181
|
|
|
182
182
|
The thermo parser follows the [official GPUMD thermo.out format](https://gpumd.org/gpumd/output_files/thermo_out.html): 18 columns are required, `pressure.txt` exports `Pxx Pyy Pzz Pyz Pxz Pxy`, box vectors are interpreted as a full 3×3 matrix, `time_step` propagates between runs, and `dump_thermo` does not.
|
|
183
183
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|