lammpsparser 0.0.1__py3-none-any.whl
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.
- lammpsparser/__init__.py +38 -0
- lammpsparser/_version.py +34 -0
- lammpsparser/compatibility/__init__.py +0 -0
- lammpsparser/compatibility/calculate.py +484 -0
- lammpsparser/compatibility/constraints.py +106 -0
- lammpsparser/compatibility/file.py +285 -0
- lammpsparser/compatibility/structure.py +336 -0
- lammpsparser/output.py +340 -0
- lammpsparser/output_raw.py +251 -0
- lammpsparser/potential.py +380 -0
- lammpsparser/structure.py +536 -0
- lammpsparser/units.py +246 -0
- lammpsparser-0.0.1.dist-info/METADATA +146 -0
- lammpsparser-0.0.1.dist-info/RECORD +16 -0
- lammpsparser-0.0.1.dist-info/WHEEL +4 -0
- lammpsparser-0.0.1.dist-info/licenses/LICENSE +29 -0
lammpsparser/units.py
ADDED
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
# Copyright (c) Max-Planck-Institut für Eisenforschung GmbH - Computational Materials Design (CM) Department
|
|
3
|
+
# Distributed under the terms of "New BSD License", see the LICENSE file.
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import warnings
|
|
8
|
+
from typing import Any, Dict, List, Union
|
|
9
|
+
|
|
10
|
+
import numpy as np
|
|
11
|
+
import scipy.constants as spc
|
|
12
|
+
|
|
13
|
+
__author__ = "Joerg Neugebauer, Sudarsan Surendralal, Jan Janssen"
|
|
14
|
+
__copyright__ = (
|
|
15
|
+
"Copyright 2021, Max-Planck-Institut für Eisenforschung GmbH - "
|
|
16
|
+
"Computational Materials Design (CM) Department"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# Conversion factors for transfroming pyiron units to Lammps units (alphabetical)
|
|
21
|
+
|
|
22
|
+
AMU_TO_G = spc.atomic_mass * spc.kilo
|
|
23
|
+
AMU_TO_KG = spc.atomic_mass
|
|
24
|
+
ANG_PER_FS_TO_ANG_PER_PS = spc.pico / spc.femto
|
|
25
|
+
ANG_PER_FS_TO_BOHR_PER_FS = spc.angstrom / spc.physical_constants["Bohr radius"][0]
|
|
26
|
+
ANG_PER_FS_TO_CM_PER_S = (spc.angstrom / spc.femto) / spc.centi
|
|
27
|
+
ANG_PER_FS_TO_M_PER_S = spc.angstrom / spc.femto
|
|
28
|
+
ANG_TO_BOHR = spc.angstrom / spc.physical_constants["Bohr radius"][0]
|
|
29
|
+
ANG_TO_CM = spc.angstrom / spc.centi
|
|
30
|
+
ANG_TO_M = spc.angstrom
|
|
31
|
+
EL_TO_COUL = spc.elementary_charge
|
|
32
|
+
EV_PER_ANG_TO_DYNE = (spc.electron_volt / spc.angstrom) / spc.dyne
|
|
33
|
+
EV_PER_ANG_TO_HA_PER_BOHR = (
|
|
34
|
+
spc.physical_constants["electron volt-hartree relationship"][0]
|
|
35
|
+
* spc.physical_constants["Bohr radius"][0]
|
|
36
|
+
/ spc.angstrom
|
|
37
|
+
)
|
|
38
|
+
EV_PER_ANG_TO_KCAL_PER_MOL_ANG = spc.eV / (spc.kilo * spc.calorie / spc.N_A)
|
|
39
|
+
EV_PER_ANG_TO_N = spc.electron_volt / spc.angstrom
|
|
40
|
+
EV_TO_ERG = spc.electron_volt / spc.erg
|
|
41
|
+
EV_TO_HA = spc.physical_constants["electron volt-hartree relationship"][0]
|
|
42
|
+
EV_TO_J = spc.electron_volt
|
|
43
|
+
EV_TO_KCAL_PER_MOL = spc.eV / (spc.kilo * spc.calorie / spc.N_A)
|
|
44
|
+
FS_TO_PS = spc.femto / spc.pico
|
|
45
|
+
FS_TO_S = spc.femto
|
|
46
|
+
GPA_TO_ATM = spc.giga / spc.atm
|
|
47
|
+
GPA_TO_BAR = spc.giga / spc.bar
|
|
48
|
+
GPA_TO_BARYE = spc.giga / (spc.micro * spc.bar) # "barye" = 1e-6 bar
|
|
49
|
+
GPA_TO_PA = spc.giga
|
|
50
|
+
|
|
51
|
+
# Conversions for most of the Lammps units to Pyiron units
|
|
52
|
+
# Lammps units source doc: https://lammps.sandia.gov/doc/units.html
|
|
53
|
+
# Pyrion units source doc: https://pyiron.readthedocs.io/en/latest/source/faq.html
|
|
54
|
+
# At time of writing, not all these conversion factors are used, but may be helpful later.
|
|
55
|
+
|
|
56
|
+
LAMMPS_UNIT_CONVERSIONS: Dict[str, Dict[str, float]] = {
|
|
57
|
+
"metal": {
|
|
58
|
+
"mass": 1.0,
|
|
59
|
+
"distance": 1.0,
|
|
60
|
+
"time": FS_TO_PS,
|
|
61
|
+
"energy": 1.0,
|
|
62
|
+
"velocity": ANG_PER_FS_TO_ANG_PER_PS,
|
|
63
|
+
"force": 1.0,
|
|
64
|
+
"temperature": 1.0,
|
|
65
|
+
"pressure": GPA_TO_BAR,
|
|
66
|
+
"charge": 1.0,
|
|
67
|
+
"natoms": 1,
|
|
68
|
+
},
|
|
69
|
+
"si": {
|
|
70
|
+
"mass": AMU_TO_KG,
|
|
71
|
+
"distance": ANG_TO_M,
|
|
72
|
+
"time": FS_TO_S,
|
|
73
|
+
"energy": EV_TO_J,
|
|
74
|
+
"velocity": ANG_PER_FS_TO_M_PER_S,
|
|
75
|
+
"force": EV_PER_ANG_TO_N,
|
|
76
|
+
"temperature": 1.0,
|
|
77
|
+
"pressure": GPA_TO_PA,
|
|
78
|
+
"charge": EL_TO_COUL,
|
|
79
|
+
"natoms": 1,
|
|
80
|
+
},
|
|
81
|
+
"cgs": {
|
|
82
|
+
"mass": AMU_TO_G,
|
|
83
|
+
"distance": ANG_TO_CM,
|
|
84
|
+
"time": FS_TO_S,
|
|
85
|
+
"energy": EV_TO_ERG,
|
|
86
|
+
"velocity": ANG_PER_FS_TO_CM_PER_S,
|
|
87
|
+
"force": EV_PER_ANG_TO_DYNE,
|
|
88
|
+
"temperature": 1.0,
|
|
89
|
+
"pressure": GPA_TO_BARYE,
|
|
90
|
+
"charge": 4.8032044e-10, # In statCoulombs, but these are deprecated and thus not in scipt.constants
|
|
91
|
+
"natoms": 1,
|
|
92
|
+
},
|
|
93
|
+
"real": {
|
|
94
|
+
"mass": 1.0,
|
|
95
|
+
"distance": 1.0,
|
|
96
|
+
"time": 1.0,
|
|
97
|
+
"energy": EV_TO_KCAL_PER_MOL,
|
|
98
|
+
"velocity": 1.0,
|
|
99
|
+
"force": EV_PER_ANG_TO_KCAL_PER_MOL_ANG,
|
|
100
|
+
"temperature": 1.0,
|
|
101
|
+
"pressure": GPA_TO_ATM,
|
|
102
|
+
"charge": 1.0,
|
|
103
|
+
"natoms": 1,
|
|
104
|
+
},
|
|
105
|
+
"electron": {
|
|
106
|
+
"mass": 1.0,
|
|
107
|
+
"distance": ANG_TO_BOHR,
|
|
108
|
+
"time": 1.0,
|
|
109
|
+
"energy": EV_TO_HA,
|
|
110
|
+
"velocity": ANG_PER_FS_TO_BOHR_PER_FS,
|
|
111
|
+
"force": EV_PER_ANG_TO_HA_PER_BOHR,
|
|
112
|
+
"temperature": 1.0,
|
|
113
|
+
"pressure": GPA_TO_PA,
|
|
114
|
+
"charge": 1.0,
|
|
115
|
+
"natoms": 1,
|
|
116
|
+
},
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
# Define conversion for volumes based on distances
|
|
120
|
+
for values in LAMMPS_UNIT_CONVERSIONS.values():
|
|
121
|
+
values["volume"] = values["distance"] ** 3
|
|
122
|
+
values["dimensionless_integer_quantity"] = 1
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
# Hard coded list of all quantities we store in pyiron and the type of quantity it stores (Expand if necessary)
|
|
126
|
+
_conversion_dict: Dict[str, List[str]] = dict()
|
|
127
|
+
_conversion_dict["distance"] = [
|
|
128
|
+
"positions",
|
|
129
|
+
"cells",
|
|
130
|
+
"unwrapped_positions",
|
|
131
|
+
"mean_unwrapped_positions",
|
|
132
|
+
]
|
|
133
|
+
_conversion_dict["volume"] = ["volume", "volumes"]
|
|
134
|
+
_conversion_dict["pressure"] = ["pressure", "pressures", "mean_pressures"]
|
|
135
|
+
_conversion_dict["time"] = ["time"]
|
|
136
|
+
_conversion_dict["energy"] = [
|
|
137
|
+
"energy_tot",
|
|
138
|
+
"energy_pot",
|
|
139
|
+
"energy_pot_per_atom",
|
|
140
|
+
"energy_kin_per_atom",
|
|
141
|
+
"mean_energy_pot",
|
|
142
|
+
]
|
|
143
|
+
_conversion_dict["temperature"] = ["temperature", "temperatures"]
|
|
144
|
+
_conversion_dict["velocity"] = ["velocity", "velocities", "mean_velocities"]
|
|
145
|
+
_conversion_dict["mass"] = ["mass"]
|
|
146
|
+
_conversion_dict["charge"] = ["charges", "charge"]
|
|
147
|
+
_conversion_dict["force"] = ["forces", "force", "mean_forces"]
|
|
148
|
+
_conversion_dict["dimensionless_integer_quantity"] = ["steps", "indices"]
|
|
149
|
+
_conversion_dict["natoms"] = ["natoms"]
|
|
150
|
+
|
|
151
|
+
# Reverse _conversion_dict
|
|
152
|
+
quantity_dict: Dict[str, str] = dict()
|
|
153
|
+
for key, val in _conversion_dict.items():
|
|
154
|
+
for v in val:
|
|
155
|
+
quantity_dict[v] = key
|
|
156
|
+
|
|
157
|
+
# Data type dict to ensure that the units are converted to the proper units
|
|
158
|
+
dtype_dict: Dict[str, Any] = dict()
|
|
159
|
+
for key, val in _conversion_dict.items():
|
|
160
|
+
for v in val:
|
|
161
|
+
# Everything except dimensionless integer quantities are stored as floats
|
|
162
|
+
if key in ["dimensionless_integer_quantity"]:
|
|
163
|
+
dtype_dict[v] = int
|
|
164
|
+
else:
|
|
165
|
+
dtype_dict[v] = np.float64
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
class UnitConverter:
|
|
169
|
+
"""This is a class to aid conversion of physical quantities between LAMMPS and pyiron units."""
|
|
170
|
+
|
|
171
|
+
def __init__(self, units: str):
|
|
172
|
+
"""
|
|
173
|
+
Initialize the class by specifiying the type of lammps units used
|
|
174
|
+
|
|
175
|
+
Args:
|
|
176
|
+
units (str): The type of LAMMPS units used (eg. metal, real, cgs, lj, etc.)
|
|
177
|
+
|
|
178
|
+
"""
|
|
179
|
+
self._units = units
|
|
180
|
+
self._dict: Dict[str, float] = LAMMPS_UNIT_CONVERSIONS[self._units]
|
|
181
|
+
|
|
182
|
+
def __getitem__(self, quantity: str) -> float:
|
|
183
|
+
"""
|
|
184
|
+
Get quantity from `_dict`
|
|
185
|
+
|
|
186
|
+
Args:
|
|
187
|
+
quantity (str): The physical quantity
|
|
188
|
+
|
|
189
|
+
Returns:
|
|
190
|
+
float: The conversion factor
|
|
191
|
+
"""
|
|
192
|
+
return self._dict[quantity]
|
|
193
|
+
|
|
194
|
+
def lammps_to_pyiron(self, quantity: str) -> float:
|
|
195
|
+
"""
|
|
196
|
+
Get the conversion factor for a given physical quantity to be converted from LAMMPS to pyiron units
|
|
197
|
+
|
|
198
|
+
Args:
|
|
199
|
+
quantity (str): The physical quantity (must be a key in the dictionary `_conversion_dict`)
|
|
200
|
+
|
|
201
|
+
Returns:
|
|
202
|
+
|
|
203
|
+
float: The conversion factor
|
|
204
|
+
|
|
205
|
+
"""
|
|
206
|
+
return 1.0 / self[quantity]
|
|
207
|
+
|
|
208
|
+
def pyiron_to_lammps(self, quantity: str) -> float:
|
|
209
|
+
"""
|
|
210
|
+
Get the conversion factor for a given physical quantity to be converted from pyiron to LAMMPS units
|
|
211
|
+
|
|
212
|
+
Args:
|
|
213
|
+
quantity (str): The physical quantity (must be a key in the dictionary `_conversion_dict`)
|
|
214
|
+
|
|
215
|
+
Returns:
|
|
216
|
+
|
|
217
|
+
float: The conversion factor
|
|
218
|
+
|
|
219
|
+
"""
|
|
220
|
+
return self[quantity]
|
|
221
|
+
|
|
222
|
+
def convert_array_to_pyiron_units(
|
|
223
|
+
self, array: Union[np.ndarray, list], label: str
|
|
224
|
+
) -> np.ndarray:
|
|
225
|
+
"""
|
|
226
|
+
Convert a labelled numpy array into pyiron units based on the physical quantity the label corresponds to
|
|
227
|
+
|
|
228
|
+
Args:
|
|
229
|
+
array (numpy.ndarray/list): The array to be converted
|
|
230
|
+
label (str): The label of the quantity (must be a key in the dictionary `quantity_dict`)
|
|
231
|
+
|
|
232
|
+
Returns:
|
|
233
|
+
ndarray: The array after conversion
|
|
234
|
+
|
|
235
|
+
"""
|
|
236
|
+
if label in quantity_dict.keys():
|
|
237
|
+
return np.array(
|
|
238
|
+
np.array(array) * self.lammps_to_pyiron(quantity_dict[label]),
|
|
239
|
+
dtype=dtype_dict[label],
|
|
240
|
+
)
|
|
241
|
+
else:
|
|
242
|
+
warnings.warn(
|
|
243
|
+
message="Warning: Couldn't determine the LAMMPS to pyiron unit conversion type of quantity "
|
|
244
|
+
f"{label}. Returning un-normalized quantity"
|
|
245
|
+
)
|
|
246
|
+
return np.array(array)
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lammpsparser
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Vector-oriented LAMMPS interface to rapidly iterate over series of atomistic structures or interatomic potentials.
|
|
5
|
+
Project-URL: Homepage, https://github.com/pyiron/lammpsparser
|
|
6
|
+
Project-URL: Documentation, https://github.com/pyiron/lammpsparser
|
|
7
|
+
Project-URL: Repository, https://github.com/pyiron/lammpsparser
|
|
8
|
+
Author-email: Jan Janssen <janssen@mpie.de>
|
|
9
|
+
License: BSD 3-Clause License
|
|
10
|
+
|
|
11
|
+
Copyright (c) 2023, pyiron
|
|
12
|
+
All rights reserved.
|
|
13
|
+
|
|
14
|
+
Redistribution and use in source and binary forms, with or without
|
|
15
|
+
modification, are permitted provided that the following conditions are met:
|
|
16
|
+
|
|
17
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
18
|
+
list of conditions and the following disclaimer.
|
|
19
|
+
|
|
20
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
21
|
+
this list of conditions and the following disclaimer in the documentation
|
|
22
|
+
and/or other materials provided with the distribution.
|
|
23
|
+
|
|
24
|
+
* Neither the name of the copyright holder nor the names of its
|
|
25
|
+
contributors may be used to endorse or promote products derived from
|
|
26
|
+
this software without specific prior written permission.
|
|
27
|
+
|
|
28
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
29
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
30
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
31
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
32
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
33
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
34
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
35
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
36
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
37
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
38
|
+
License-File: LICENSE
|
|
39
|
+
Keywords: pyiron
|
|
40
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
41
|
+
Classifier: Intended Audience :: Science/Research
|
|
42
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
43
|
+
Classifier: Operating System :: OS Independent
|
|
44
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
45
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
46
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
47
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
48
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
49
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
50
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
51
|
+
Requires-Python: <3.15,>=3.9
|
|
52
|
+
Requires-Dist: ase<=3.27.0,>=3.22.1
|
|
53
|
+
Requires-Dist: numpy<=2.4.2,>=1.26.0
|
|
54
|
+
Requires-Dist: pandas<=3.0.0,>=2.0.3
|
|
55
|
+
Requires-Dist: scipy<=1.17.0,>=1.11.1
|
|
56
|
+
Provides-Extra: h5md
|
|
57
|
+
Requires-Dist: h5py<=3.15.1,>=3.9.0; extra == 'h5md'
|
|
58
|
+
Description-Content-Type: text/markdown
|
|
59
|
+
|
|
60
|
+
# lammpsparser
|
|
61
|
+
|
|
62
|
+
[](https://github.com/pyiron/lammpsparser/actions/workflows/pipeline.yml)
|
|
63
|
+
[](https://codecov.io/gh/pyiron/lammpsparser)
|
|
64
|
+
[](https://mybinder.org/v2/gh/pyiron/lammpsparser/main?urlpath=%2Fdoc%2Ftree%2Fnotebooks%2Fexample.ipynb)
|
|
65
|
+
|
|
66
|
+
The `lammpsparser` packages provides primarily two functions. A `write_lammps_structure()` function to write an `ase.atoms.Atoms`
|
|
67
|
+
structure to an LAMMPS data file and a `parse_lammps_output_files()` function to parse the `log.lammps`, `dump.out` and
|
|
68
|
+
`dump.h5` files from the LAMMPS `thermo` and `dump` commands.
|
|
69
|
+
|
|
70
|
+
## Installation
|
|
71
|
+
The `lammpsparser` package is distributed via both [pypi](https://pypi.org/project/lammpsparser/):
|
|
72
|
+
```
|
|
73
|
+
pip install lammpsparser
|
|
74
|
+
```
|
|
75
|
+
and [conda-forge](https://anaconda.org/conda-forge/lammpsparser):
|
|
76
|
+
```
|
|
77
|
+
conda install -c conda-forge lammpsparser
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Write LAMMPS structure
|
|
81
|
+
The `write_lammps_structure()` function is designed to write an `ase.atoms.Atoms` structure to an LAMMPS data file:
|
|
82
|
+
```python
|
|
83
|
+
from lammpsparser import write_lammps_structure
|
|
84
|
+
|
|
85
|
+
write_lammps_structure(
|
|
86
|
+
structure,
|
|
87
|
+
potential_elements,
|
|
88
|
+
units="metal",
|
|
89
|
+
file_name="lammps.data",
|
|
90
|
+
working_directory=None,
|
|
91
|
+
)
|
|
92
|
+
```
|
|
93
|
+
The `structure` parameter refers to the `ase.atoms.Atoms` structure and the `potential_elements` refers to the list of
|
|
94
|
+
elements implemented in the specific interatomic potential. For example the [NiAlH_jea.eam.alloy](https://github.com/lammps/lammps/blob/develop/potentials/NiAlH_jea.eam.alloy)
|
|
95
|
+
potential implements the elements `Ni`, `Al` and `H`, so when writing a structure for a simulation with this potential
|
|
96
|
+
the `potential_elements=["Ni", "Al", "H"]`. It is important to maintain the order of the elements as LAMMPS internally
|
|
97
|
+
references the elements based on their index, starting from one. The `units` parameter refers to the LAMMPS internal
|
|
98
|
+
[units](https://docs.lammps.org/units.html) to convert the `ase.atoms.Atoms` object which is defined in Angstrom to the
|
|
99
|
+
length scale of the LAMMPS simulation. Finally, `file_name` parameter and the current working directory `working_directory`
|
|
100
|
+
parameter are designed to select the location where the LAMMPS structure should be written. With the default parameters
|
|
101
|
+
the LAMMPS structure is written in the `lammps.data` file in the current directory.
|
|
102
|
+
|
|
103
|
+
## Parse LAMMPS output
|
|
104
|
+
In addition to writing the LAMMPS input structure `lammpsparser` also provide the `parse_lammps_output_files()` function
|
|
105
|
+
to parse the LAMMPS output files, namely the `log.lammps`, `dump.out` and `dump.h5` files:
|
|
106
|
+
```python
|
|
107
|
+
from lammpsparser import parse_lammps_output_files
|
|
108
|
+
|
|
109
|
+
parse_lammps_output_files(
|
|
110
|
+
working_directory,
|
|
111
|
+
structure,
|
|
112
|
+
potential_elements,
|
|
113
|
+
units="metal",
|
|
114
|
+
dump_h5_file_name="dump.h5",
|
|
115
|
+
dump_out_file_name="dump.out",
|
|
116
|
+
log_lammps_file_name="log.lammps",
|
|
117
|
+
)
|
|
118
|
+
```
|
|
119
|
+
In analogy to the `write_lammps_structure()` function the `working_directory` parameter refers to the directory which
|
|
120
|
+
contains the output files. The `structure` parameter reefers to the `ase.atoms.Atoms` object which should be used as
|
|
121
|
+
template to parse the structure from the dump files. This structure is again required as LAMMPS internally references
|
|
122
|
+
elements only by an index, so the template structure is required to map the elements from the interatomic potential back
|
|
123
|
+
to the elements of the `ase.atoms.Atoms` object. In the same way the `potential_elements` refers to the list of
|
|
124
|
+
elements implemented in the specific interatomic potential. The `units` parameter refers to the LAMMPS internal
|
|
125
|
+
[units](https://docs.lammps.org/units.html) to convert the `ase.atoms.Atoms` object which is defined in Angstrom to the
|
|
126
|
+
length scale of the LAMMPS simulation. Finally, the parameters `dump_h5_file_name`, `dump_out_file_name` and `log_lammps_file_name`
|
|
127
|
+
refer to the output file names.
|
|
128
|
+
|
|
129
|
+
For the `dump.out` file the following LAMMPS `dump` command should be added to the LAMMPS input file:
|
|
130
|
+
```
|
|
131
|
+
dump 1 all custom 100 dump.out id type xsu ysu zsu fx fy fz vx vy vz
|
|
132
|
+
dump_modify 1 sort id format line "%d %d %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g %20.15g"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
For the `log.lammps` file the following LAMMPS `thermo` command should be added to the LAMMPS input file:
|
|
136
|
+
```
|
|
137
|
+
thermo_style custom step temp pe etotal pxx pxy pxz pyy pyz pzz vol
|
|
138
|
+
thermo_modify format float %20.15g
|
|
139
|
+
thermo 100
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Usage
|
|
143
|
+
Currently, the `lammpsparser` parser is primarily used in the [pyiron_atomistics](https://github.com/pyiron/pyiron_atomistics)
|
|
144
|
+
package and its successor the [atomistics](https://github.com/pyiron/atomistics) package to provide a simple LAMMPS
|
|
145
|
+
parser. It only depends on `ase`, `numpy`, `pandas` and `scipy` and has an optional dependency on `h5py` to parse the
|
|
146
|
+
LAMMPS [h5md](https://docs.lammps.org/dump_h5md.html) format.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
lammpsparser/__init__.py,sha256=lWdl4hI7Mbjh1nktvQDRTIlWTLeOFYlO0PeKyQP-vHs,1258
|
|
2
|
+
lammpsparser/_version.py,sha256=qf6R-J7-UyuABBo8c0HgaquJ8bejVbf07HodXgwAwgQ,704
|
|
3
|
+
lammpsparser/output.py,sha256=70PEOwrEJEphwbembRvzLGVbH93OmMgFupgFD0NPNwY,11260
|
|
4
|
+
lammpsparser/output_raw.py,sha256=TaBV6xQxPqUv9hzXJv1N_2y2WGZBG4Zc8VXoEbWQINE,8722
|
|
5
|
+
lammpsparser/potential.py,sha256=1hB2L2gtkmHdc_uaWWTroTs8Vwce1yF_sscbxu8cs2M,12199
|
|
6
|
+
lammpsparser/structure.py,sha256=Ly384eSHL5J-MmAXLpbGwsS0vCVGoPR9KJMO2lv_TXQ,17866
|
|
7
|
+
lammpsparser/units.py,sha256=NkuxDtU4i-vLOQE3CJHDZfEZp_bCEFitiPJ2rlpqk_c,8147
|
|
8
|
+
lammpsparser/compatibility/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
lammpsparser/compatibility/calculate.py,sha256=5z2l-nn3s0TeZBIlNE5kOGjpZlGxXv7KKZWFlZ8qt20,20394
|
|
10
|
+
lammpsparser/compatibility/constraints.py,sha256=N6VjjqPsuaXRSmes8OwCSznU1BWDDhV4YaSzWG1sqRE,5411
|
|
11
|
+
lammpsparser/compatibility/file.py,sha256=rdTU6VJZbEDcUJKrYI5MIDF1Ljba6g4uCJZsCSe0b3w,11247
|
|
12
|
+
lammpsparser/compatibility/structure.py,sha256=fwHuUqu2W4yVzDSSAyQZPQwEzdjZwA3mwz6Bz9Ze0gs,12112
|
|
13
|
+
lammpsparser-0.0.1.dist-info/METADATA,sha256=0Znbtysc88GibN2L2xJYBSuOjm5TN35CeFA-jWFYu9A,8020
|
|
14
|
+
lammpsparser-0.0.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
15
|
+
lammpsparser-0.0.1.dist-info/licenses/LICENSE,sha256=Wn4J1aBo8rRlVrpXJ3Xv4j8IicRrpeTi3ERWTXfNTv4,1505
|
|
16
|
+
lammpsparser-0.0.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023, pyiron
|
|
4
|
+
All rights reserved.
|
|
5
|
+
|
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
|
7
|
+
modification, are permitted provided that the following conditions are met:
|
|
8
|
+
|
|
9
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
list of conditions and the following disclaimer.
|
|
11
|
+
|
|
12
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
and/or other materials provided with the distribution.
|
|
15
|
+
|
|
16
|
+
* Neither the name of the copyright holder nor the names of its
|
|
17
|
+
contributors may be used to endorse or promote products derived from
|
|
18
|
+
this software without specific prior written permission.
|
|
19
|
+
|
|
20
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
23
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
24
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
25
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
26
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
27
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
28
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|