pack-mm 0.0.15__py3-none-any.whl → 0.0.20__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.
- pack_mm/cli/packmm.py +21 -14
- pack_mm/core/core.py +78 -60
- pack_mm-0.0.20.dist-info/METADATA +246 -0
- pack_mm-0.0.20.dist-info/RECORD +8 -0
- pack_mm-0.0.15.dist-info/METADATA +0 -36
- pack_mm-0.0.15.dist-info/RECORD +0 -8
- {pack_mm-0.0.15.dist-info → pack_mm-0.0.20.dist-info}/WHEEL +0 -0
- {pack_mm-0.0.15.dist-info → pack_mm-0.0.20.dist-info}/entry_points.txt +0 -0
- {pack_mm-0.0.15.dist-info → pack_mm-0.0.20.dist-info}/licenses/LICENSE +0 -0
pack_mm/cli/packmm.py
CHANGED
@@ -52,30 +52,28 @@ def packmm(
|
|
52
52
|
),
|
53
53
|
centre: str | None = typer.Option(
|
54
54
|
None,
|
55
|
-
help="""Centre of the insertion zone in
|
56
|
-
e.g., '0.
|
55
|
+
help="""Centre of the insertion zone, coordinates in Å,
|
56
|
+
e.g., '5.0, 5.0, 5.0'.""",
|
57
57
|
),
|
58
58
|
radius: float | None = typer.Option(
|
59
59
|
None,
|
60
60
|
help="""Radius of the sphere or cylinder in Å,
|
61
61
|
depending on the insertion volume.""",
|
62
62
|
),
|
63
|
-
height: float | None = typer.Option(
|
64
|
-
None, help="Height of the cylinder in fractional coordinates."
|
65
|
-
),
|
63
|
+
height: float | None = typer.Option(None, help="Height of the cylinder in Å."),
|
66
64
|
a: float | None = typer.Option(
|
67
65
|
None,
|
68
|
-
help="""Side of the box or semi-axis of the ellipsoid,
|
66
|
+
help="""Side of the box or semi-axis of the ellipsoid, in Å,
|
69
67
|
depends on the insertion method.""",
|
70
68
|
),
|
71
69
|
b: float | None = typer.Option(
|
72
70
|
None,
|
73
|
-
help="""Side of the box or semi-axis of the ellipsoid,
|
71
|
+
help="""Side of the box or semi-axis of the ellipsoid, in Å,
|
74
72
|
depends on the insertion method.""",
|
75
73
|
),
|
76
74
|
c: float | None = typer.Option(
|
77
75
|
None,
|
78
|
-
help="""Side of the box or semi-axis of the ellipsoid,
|
76
|
+
help="""Side of the box or semi-axis of the ellipsoid, in Å,
|
79
77
|
depends on the insertion method.""",
|
80
78
|
),
|
81
79
|
device: str = typer.Option(
|
@@ -86,15 +84,22 @@ def packmm(
|
|
86
84
|
temperature: float = typer.Option(
|
87
85
|
300.0, help="Temperature for the Monte Carlo acceptance rule."
|
88
86
|
),
|
89
|
-
cell_a: float = typer.Option(
|
90
|
-
|
91
|
-
|
87
|
+
cell_a: float = typer.Option(
|
88
|
+
20.0, help="Side of the empty box along the x-axis in Å."
|
89
|
+
),
|
90
|
+
cell_b: float = typer.Option(
|
91
|
+
20.0, help="Side of the empty box along the y-axis in Å."
|
92
|
+
),
|
93
|
+
cell_c: float = typer.Option(
|
94
|
+
20.0, help="Side of the empty box along the z-axis in Å."
|
95
|
+
),
|
92
96
|
fmax: float = typer.Option(
|
93
97
|
0.1, help="force tollerance for optimisation if needed."
|
94
98
|
),
|
95
99
|
geometry: bool = typer.Option(
|
96
100
|
True, help="Perform geometry optimization at the end."
|
97
101
|
),
|
102
|
+
out_path: str = typer.Option(".", help="path to save various outputs."),
|
98
103
|
):
|
99
104
|
"""Pack molecules into a system based on the specified parameters."""
|
100
105
|
print("Script called with following input")
|
@@ -119,6 +124,7 @@ def packmm(
|
|
119
124
|
print(f"{temperature=}")
|
120
125
|
print(f"{fmax=}")
|
121
126
|
print(f"{geometry=}")
|
127
|
+
print(f"{out_path=}")
|
122
128
|
if nmols == -1:
|
123
129
|
print("nothing to do, no molecule to insert")
|
124
130
|
raise typer.Exit(0)
|
@@ -151,9 +157,10 @@ def packmm(
|
|
151
157
|
ntries=ntries,
|
152
158
|
fmax=fmax,
|
153
159
|
geometry=geometry,
|
154
|
-
|
155
|
-
|
156
|
-
|
160
|
+
cell_a=cell_a,
|
161
|
+
cell_b=cell_b,
|
162
|
+
cell_c=cell_c,
|
163
|
+
out_path=out_path,
|
157
164
|
)
|
158
165
|
|
159
166
|
|
pack_mm/core/core.py
CHANGED
@@ -11,6 +11,7 @@ from pathlib import Path
|
|
11
11
|
from ase import Atoms
|
12
12
|
from ase.build import molecule as build_molecule
|
13
13
|
from ase.io import read, write
|
14
|
+
from ase.units import kB
|
14
15
|
from janus_core.calculations.geom_opt import GeomOpt
|
15
16
|
from janus_core.helpers.mlip_calculators import choose_calculator
|
16
17
|
from numpy import cos, exp, pi, random, sin, sqrt
|
@@ -138,28 +139,29 @@ def validate_value(label, x):
|
|
138
139
|
|
139
140
|
|
140
141
|
def pack_molecules(
|
141
|
-
system: str
|
142
|
-
molecule: str,
|
143
|
-
nmols: int,
|
144
|
-
arch: str,
|
145
|
-
model: str,
|
146
|
-
device: str,
|
147
|
-
where: str,
|
148
|
-
center: tuple[float, float, float]
|
149
|
-
radius: float
|
150
|
-
height: float
|
151
|
-
a: float
|
152
|
-
b: float
|
153
|
-
c: float
|
154
|
-
seed: int,
|
155
|
-
temperature: float,
|
156
|
-
ntries: int,
|
157
|
-
geometry: bool,
|
158
|
-
fmax: float,
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
142
|
+
system: str = None,
|
143
|
+
molecule: str = "H2O",
|
144
|
+
nmols: int = -1,
|
145
|
+
arch: str = "cpu",
|
146
|
+
model: str = "mace_mp",
|
147
|
+
device: str = "medium-omat-0",
|
148
|
+
where: str = "anywhere",
|
149
|
+
center: tuple[float, float, float] = None,
|
150
|
+
radius: float = None,
|
151
|
+
height: float = None,
|
152
|
+
a: float = None,
|
153
|
+
b: float = None,
|
154
|
+
c: float = None,
|
155
|
+
seed: int = 2025,
|
156
|
+
temperature: float = 300.0,
|
157
|
+
ntries: int = 50,
|
158
|
+
geometry: bool = False,
|
159
|
+
fmax: float = 0.1,
|
160
|
+
cell_a: float = None,
|
161
|
+
cell_b: float = None,
|
162
|
+
cell_c: float = None,
|
163
|
+
out_path: str = ".",
|
164
|
+
) -> float:
|
163
165
|
"""
|
164
166
|
Pack molecules into a system based on the specified parameters.
|
165
167
|
|
@@ -181,9 +183,10 @@ def pack_molecules(
|
|
181
183
|
temperature (float): Temperature in Kelvin for acceptance probability.
|
182
184
|
ntries (int): Maximum number of attempts to insert each molecule.
|
183
185
|
geometry (bool): Whether to perform geometry optimization after insertion.
|
184
|
-
|
186
|
+
cell_a, cell_b, cell_c (float): Cell dimensions if system is empty.
|
187
|
+
out_path (str): path to save various outputs
|
185
188
|
"""
|
186
|
-
kbt = temperature *
|
189
|
+
kbt = temperature * kB
|
187
190
|
validate_value("temperature", temperature)
|
188
191
|
validate_value("radius", radius)
|
189
192
|
validate_value("height", height)
|
@@ -193,10 +196,10 @@ def pack_molecules(
|
|
193
196
|
validate_value("box b", b)
|
194
197
|
validate_value("box c", c)
|
195
198
|
validate_value("ntries", ntries)
|
196
|
-
validate_value("cell box a",
|
197
|
-
validate_value("cell box b",
|
199
|
+
validate_value("cell box cell a", cell_a)
|
200
|
+
validate_value("cell box cell b", cell_b)
|
198
201
|
validate_value("nmols", nmols)
|
199
|
-
validate_value("cell box c",
|
202
|
+
validate_value("cell box cell c", cell_c)
|
200
203
|
|
201
204
|
random.seed(seed)
|
202
205
|
|
@@ -204,25 +207,21 @@ def pack_molecules(
|
|
204
207
|
sys = read(system)
|
205
208
|
sysname = Path(system).stem
|
206
209
|
except Exception:
|
207
|
-
sys = Atoms(cell=[
|
210
|
+
sys = Atoms(cell=[cell_a, cell_b, cell_c], pbc=[True, True, True])
|
208
211
|
sysname = "empty"
|
209
212
|
|
210
213
|
cell = sys.cell.lengths()
|
211
214
|
|
212
|
-
# Print
|
215
|
+
# Print summary
|
213
216
|
print(f"Inserting {nmols} {molecule} molecules in {sysname}.")
|
214
217
|
print(f"Using {arch} model {model} on {device}.")
|
215
218
|
print(f"Insert in {where}.")
|
216
219
|
|
217
|
-
# Set center of insertion region
|
218
220
|
if center is None:
|
219
221
|
center = (cell[0] * 0.5, cell[1] * 0.5, cell[2] * 0.5)
|
220
|
-
else:
|
221
|
-
center = tuple(ci * cell[i] for i, ci in enumerate(center))
|
222
222
|
|
223
|
-
# Set parameters based on insertion region
|
224
223
|
if where == "anywhere":
|
225
|
-
a, b, c =
|
224
|
+
a, b, c = cell[0], cell[1], cell[2]
|
226
225
|
elif where == "sphere":
|
227
226
|
if radius is None:
|
228
227
|
radius = min(cell) * 0.5
|
@@ -230,20 +229,22 @@ def pack_molecules(
|
|
230
229
|
if radius is None:
|
231
230
|
if where == "cylinderZ":
|
232
231
|
radius = min(cell[0], cell[1]) * 0.5
|
232
|
+
if height is None:
|
233
|
+
height = 0.5 * cell[2]
|
233
234
|
elif where == "cylinderY":
|
234
235
|
radius = min(cell[0], cell[2]) * 0.5
|
236
|
+
if height is None:
|
237
|
+
height = 0.5 * cell[1]
|
235
238
|
elif where == "cylinderX":
|
236
239
|
radius = min(cell[2], cell[1]) * 0.5
|
237
|
-
|
238
|
-
|
240
|
+
if height is None:
|
241
|
+
height = 0.5 * cell[0]
|
239
242
|
elif where == "box":
|
240
|
-
a, b, c = a or
|
243
|
+
a, b, c = a or cell[0], b or cell[1], c or cell[2]
|
241
244
|
elif where == "ellipsoid":
|
242
|
-
a, b, c = a or 0
|
245
|
+
a, b, c = a or cell[0], b or cell[1], c or cell[2]
|
243
246
|
|
244
|
-
calc = choose_calculator(
|
245
|
-
arch=arch, model_path=model, device=device, default_dtype="float64"
|
246
|
-
)
|
247
|
+
calc = choose_calculator(arch=arch, model_path=model, device=device)
|
247
248
|
sys.calc = calc
|
248
249
|
|
249
250
|
e = sys.get_potential_energy() if len(sys) > 0 else 0.0
|
@@ -253,7 +254,7 @@ def pack_molecules(
|
|
253
254
|
accept = False
|
254
255
|
for _itry in range(ntries):
|
255
256
|
mol = load_molecule(molecule)
|
256
|
-
tv = get_insertion_position(where, center,
|
257
|
+
tv = get_insertion_position(where, center, a, b, c, radius, height)
|
257
258
|
mol = rotate_molecule(mol)
|
258
259
|
mol.translate(tv)
|
259
260
|
|
@@ -274,18 +275,31 @@ def pack_molecules(
|
|
274
275
|
csys = tsys.copy()
|
275
276
|
e = en
|
276
277
|
print(f"Inserted particle {i + 1}")
|
277
|
-
write(f"{sysname}+{i + 1}{Path(molecule).stem}.cif", csys)
|
278
|
+
write(Path(out_path) / f"{sysname}+{i + 1}{Path(molecule).stem}.cif", csys)
|
278
279
|
else:
|
280
|
+
# Things are bad, maybe geomatry optimisation saves us
|
279
281
|
print(f"Failed to insert particle {i + 1} after {ntries} tries")
|
280
|
-
optimize_geometry(
|
281
|
-
f"{sysname}+{i + 1}{Path(molecule).stem}.cif",
|
282
|
+
_ = optimize_geometry(
|
283
|
+
f"{sysname}+{i + 1}{Path(molecule).stem}.cif",
|
284
|
+
device,
|
285
|
+
arch,
|
286
|
+
model,
|
287
|
+
fmax,
|
288
|
+
out_path,
|
282
289
|
)
|
290
|
+
energy_final = e
|
283
291
|
|
284
292
|
# Perform final geometry optimization if requested
|
285
293
|
if geometry:
|
286
|
-
optimize_geometry(
|
287
|
-
f"{sysname}+{nmols}{Path(molecule).stem}.cif",
|
294
|
+
energy_final = optimize_geometry(
|
295
|
+
f"{sysname}+{nmols}{Path(molecule).stem}.cif",
|
296
|
+
device,
|
297
|
+
arch,
|
298
|
+
model,
|
299
|
+
fmax,
|
300
|
+
out_path,
|
288
301
|
)
|
302
|
+
return energy_final
|
289
303
|
|
290
304
|
|
291
305
|
def load_molecule(molecule: str):
|
@@ -299,25 +313,24 @@ def load_molecule(molecule: str):
|
|
299
313
|
def get_insertion_position(
|
300
314
|
where: str,
|
301
315
|
center: tuple[float, float, float],
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
height: float | None,
|
316
|
+
a: float = None,
|
317
|
+
b: float = None,
|
318
|
+
c: float = None,
|
319
|
+
radius: float = None,
|
320
|
+
height: float = None,
|
308
321
|
) -> tuple[float, float, float]:
|
309
322
|
"""Get a random insertion position based on the region."""
|
310
323
|
if where == "sphere":
|
311
324
|
return random_point_in_sphere(center, radius)
|
312
325
|
if where == "box":
|
313
|
-
return random_point_in_box(center,
|
326
|
+
return random_point_in_box(center, a, b, c)
|
314
327
|
if where == "ellipsoid":
|
315
|
-
return random_point_in_ellipsoid(center,
|
328
|
+
return random_point_in_ellipsoid(center, a, b, c)
|
316
329
|
if where in ["cylinderZ", "cylinderY", "cylinderX"]:
|
317
330
|
axis = where[-1].lower()
|
318
|
-
return random_point_in_cylinder(center, radius,
|
331
|
+
return random_point_in_cylinder(center, radius, height, axis)
|
319
332
|
# now is anywhere
|
320
|
-
return random.random(3) * [a, b, c]
|
333
|
+
return random.random(3) * [a, b, c]
|
321
334
|
|
322
335
|
|
323
336
|
def rotate_molecule(mol):
|
@@ -330,16 +343,21 @@ def rotate_molecule(mol):
|
|
330
343
|
|
331
344
|
|
332
345
|
def optimize_geometry(
|
333
|
-
struct_path: str,
|
346
|
+
struct_path: str,
|
347
|
+
device: str,
|
348
|
+
arch: str,
|
349
|
+
model: str,
|
350
|
+
fmax: float,
|
351
|
+
out_path: str = ".",
|
334
352
|
) -> float:
|
335
353
|
"""Optimize the geometry of a structure."""
|
336
354
|
geo = GeomOpt(
|
337
355
|
struct_path=struct_path,
|
338
356
|
device=device,
|
339
357
|
fmax=fmax,
|
340
|
-
calc_kwargs={"model_paths": model
|
358
|
+
calc_kwargs={"model_paths": model},
|
341
359
|
filter_kwargs={"hydrostatic_strain": True},
|
342
360
|
)
|
343
361
|
geo.run()
|
344
|
-
write(f"{struct_path}-opt.cif", geo.struct)
|
362
|
+
write(Path(out_path) / f"{Path(struct_path).stem}-opt.cif", geo.struct)
|
345
363
|
return geo.struct.get_potential_energy()
|
@@ -0,0 +1,246 @@
|
|
1
|
+
Metadata-Version: 2.1
|
2
|
+
Name: pack-mm
|
3
|
+
Version: 0.0.20
|
4
|
+
Summary: packing materials and molecules in boxes using for machine learnt interatomic potentials
|
5
|
+
Author: Alin M. Elena
|
6
|
+
Classifier: Programming Language :: Python
|
7
|
+
Classifier: Programming Language :: Python :: 3.10
|
8
|
+
Classifier: Programming Language :: Python :: 3.11
|
9
|
+
Classifier: Programming Language :: Python :: 3.12
|
10
|
+
Classifier: Intended Audience :: Science/Research
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
12
|
+
Classifier: Natural Language :: English
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
14
|
+
Project-URL: Repository, https://github.com/ddmms/pack-mm/
|
15
|
+
Project-URL: Documentation, https://ddmms.github.io/pack-mm/
|
16
|
+
Requires-Python: >=3.10
|
17
|
+
Requires-Dist: janus-core>=0.7.2
|
18
|
+
Requires-Dist: typer<1.0.0,>=0.12.5
|
19
|
+
Requires-Dist: typer-config<2.0.0,>=1.4.2
|
20
|
+
Description-Content-Type: text/markdown
|
21
|
+
|
22
|
+
[![Python versions][python-badge]][python-link]
|
23
|
+
[![Build Status][ci-badge]][ci-link]
|
24
|
+
[![Coverage Status][cov-badge]][cov-link]
|
25
|
+
[![License][license-badge]][license-link]
|
26
|
+
|
27
|
+
# what is packmm
|
28
|
+
|
29
|
+
packmm is a simple python package that allows to build atomistic and molecular
|
30
|
+
systems which are of interest for materials and molecular modelling.
|
31
|
+
|
32
|
+
It tries to generate realistic starting configuration by employing machine learnt
|
33
|
+
interatomic potential for describing interactions between atoms and Monte Carlo,
|
34
|
+
Molecular Dynamics and hybrid Monte Carlo.
|
35
|
+
|
36
|
+
It provides both a cli and a python api, with some examples below.
|
37
|
+
|
38
|
+
## Quick install
|
39
|
+
|
40
|
+
```bash
|
41
|
+
|
42
|
+
uv pip install pack-mm
|
43
|
+
|
44
|
+
```
|
45
|
+
or install the lates
|
46
|
+
|
47
|
+
```bash
|
48
|
+
|
49
|
+
uv pip install git+https://github.com/ddmms/pack-mm.git
|
50
|
+
|
51
|
+
```
|
52
|
+
|
53
|
+
## CLI examples
|
54
|
+
|
55
|
+
|
56
|
+
### MOF in spherical pocket
|
57
|
+
|
58
|
+
```bash
|
59
|
+
|
60
|
+
packmm --system examples/data/UiO-66.cif --molecule H2O --nmols 10 --where sphere --centre 10.0,10.0,10.0 --radius 5.0 --geometry
|
61
|
+
|
62
|
+
```
|
63
|
+
|
64
|
+

|
65
|
+
|
66
|
+
### Zeolite in cylindrical channel
|
67
|
+
|
68
|
+
|
69
|
+
```bash
|
70
|
+
|
71
|
+
packmm --system examples/data/MFI.cif --molecule H2O --nmols 30 --where cylinderY --centre 10.0,10.0,13.0 --radius 3.5 --height 19.00 --no-geometry
|
72
|
+
|
73
|
+
```
|
74
|
+
|
75
|
+

|
76
|
+
|
77
|
+
### NaCl on surface
|
78
|
+
|
79
|
+
```bash
|
80
|
+
packmm --system examples/data/NaCl.cif --molecule H2O --nmols 30 --where box --centre 8.5,8.5,16.0 --a 16.9 --b 16.9 --c 7.5 --no-geometry
|
81
|
+
|
82
|
+
```
|
83
|
+
|
84
|
+

|
85
|
+
|
86
|
+
### MOF ellipsoid
|
87
|
+
|
88
|
+
first add a methanol
|
89
|
+
|
90
|
+
```bash
|
91
|
+
|
92
|
+
packmm --system examples/data/Cu2L.cif --molecule examples/data/Ethanol.xyz --nmols 1 --where sphere --centre 5.18,8.15,25.25 --radius 1 --model small-0b2 --geometry
|
93
|
+
|
94
|
+
```
|
95
|
+
|
96
|
+
!()[examples/pics/Cu2L-ethanol.png]
|
97
|
+
|
98
|
+
``` bash
|
99
|
+
|
100
|
+
packmm --system Cu2L-ethanol.cif --molecule H2O --nmols 10 --where ellipsoid --centre 5.18,8.15,25.25 --a 5.18 --b 8.15 --c 8.25 --no-geometry --model small-0b2
|
101
|
+
|
102
|
+
|
103
|
+
```
|
104
|
+
|
105
|
+
!()[examples/pics/Cu2l-ethanol-water.png]
|
106
|
+
|
107
|
+
### Liquid water
|
108
|
+
|
109
|
+
```bash
|
110
|
+
|
111
|
+
packmm --molecule H2O --nmols 33 --where anywhere --cell-a 10.0 --cell-b 10.0 --cell-c 10.0 --model small-0b2
|
112
|
+
|
113
|
+
|
114
|
+
```
|
115
|
+
|
116
|
+
!()[examples/pics/water.png]
|
117
|
+
### interstitials
|
118
|
+
|
119
|
+
```bash
|
120
|
+
|
121
|
+
packmm --system Pd-super.cif --molecule H2 --nmols 50 --where anywhere --model small-0b2
|
122
|
+
|
123
|
+
```
|
124
|
+
|
125
|
+
before optimisation
|
126
|
+
|
127
|
+
!()[examples/pics/Pd-H2-noopt.png]
|
128
|
+
|
129
|
+
|
130
|
+
after optimisation
|
131
|
+
|
132
|
+
!()[examples/pics/Pd-H2.png]
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
### full list of options
|
137
|
+
|
138
|
+
```bash
|
139
|
+
|
140
|
+
packmm --help
|
141
|
+
|
142
|
+
Usage: packmm [OPTIONS]
|
143
|
+
|
144
|
+
Pack molecules into a system based on the specified parameters.
|
145
|
+
|
146
|
+
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────╮
|
147
|
+
│ --system TEXT The original box in which │
|
148
|
+
│ you want to add particles. │
|
149
|
+
│ If not provided, an empty │
|
150
|
+
│ box will be created. │
|
151
|
+
│ [default: None] │
|
152
|
+
│ --molecule TEXT Name of the molecule to be │
|
153
|
+
│ processed, ASE-recognizable │
|
154
|
+
│ or ASE-readable file. │
|
155
|
+
│ [default: H2O] │
|
156
|
+
│ --nmols INTEGER Target number of molecules │
|
157
|
+
│ to insert. │
|
158
|
+
│ [default: -1] │
|
159
|
+
│ --ntries INTEGER Maximum number of attempts │
|
160
|
+
│ to insert each molecule. │
|
161
|
+
│ [default: 50] │
|
162
|
+
│ --seed INTEGER Random seed for │
|
163
|
+
│ reproducibility. │
|
164
|
+
│ [default: 2025] │
|
165
|
+
│ --where [anywhere|sphere|box|cylin Where to insert the │
|
166
|
+
│ derZ|cylinderY|cylinderX|e molecule. Choices: │
|
167
|
+
│ llipsoid] 'anywhere', 'sphere', │
|
168
|
+
│ 'box', 'cylinderZ', │
|
169
|
+
│ 'cylinderY', 'cylinderX', │
|
170
|
+
│ 'ellipsoid'. │
|
171
|
+
│ [default: anywhere] │
|
172
|
+
│ --centre TEXT Centre of the insertion │
|
173
|
+
│ zone, coordinates in Å, │
|
174
|
+
│ e.g., '5.0, 5.0, 5.0'. │
|
175
|
+
│ [default: None] │
|
176
|
+
│ --radius FLOAT Radius of the sphere or │
|
177
|
+
│ cylinder in Å, depending on │
|
178
|
+
│ the insertion volume. │
|
179
|
+
│ [default: None] │
|
180
|
+
│ --height FLOAT Height of the cylinder in │
|
181
|
+
│ Å. │
|
182
|
+
│ [default: None] │
|
183
|
+
│ --a FLOAT Side of the box or │
|
184
|
+
│ semi-axis of the ellipsoid, │
|
185
|
+
│ in Å, depends on the │
|
186
|
+
│ insertion method. │
|
187
|
+
│ [default: None] │
|
188
|
+
│ --b FLOAT Side of the box or │
|
189
|
+
│ semi-axis of the ellipsoid, │
|
190
|
+
│ in Å, depends on the │
|
191
|
+
│ insertion method. │
|
192
|
+
│ [default: None] │
|
193
|
+
│ --c FLOAT Side of the box or │
|
194
|
+
│ semi-axis of the ellipsoid, │
|
195
|
+
│ in Å, depends on the │
|
196
|
+
│ insertion method. │
|
197
|
+
│ [default: None] │
|
198
|
+
│ --device TEXT Device to run calculations │
|
199
|
+
│ on (e.g., 'cpu' or 'cuda'). │
|
200
|
+
│ [default: cpu] │
|
201
|
+
│ --model TEXT ML model to use. │
|
202
|
+
│ [default: medium-omat-0] │
|
203
|
+
│ --arch TEXT MLIP architecture to use. │
|
204
|
+
│ [default: mace_mp] │
|
205
|
+
│ --temperature FLOAT Temperature for the Monte │
|
206
|
+
│ Carlo acceptance rule. │
|
207
|
+
│ [default: 300.0] │
|
208
|
+
│ --cell-a FLOAT Side of the empty box along │
|
209
|
+
│ the x-axis in Å. │
|
210
|
+
│ [default: 20.0] │
|
211
|
+
│ --cell-b FLOAT Side of the empty box along │
|
212
|
+
│ the y-axis in Å. │
|
213
|
+
│ [default: 20.0] │
|
214
|
+
│ --cell-c FLOAT Side of the empty box along │
|
215
|
+
│ the z-axis in Å. │
|
216
|
+
│ [default: 20.0] │
|
217
|
+
│ --fmax FLOAT force tollerance for │
|
218
|
+
│ optimisation if needed. │
|
219
|
+
│ [default: 0.1] │
|
220
|
+
│ --geometry --no-geometry Perform geometry │
|
221
|
+
│ optimization at the end. │
|
222
|
+
│ [default: geometry] │
|
223
|
+
│ --out-path TEXT path to save various │
|
224
|
+
│ outputs. │
|
225
|
+
│ [default: .] │
|
226
|
+
│ --install-completion Install completion for the │
|
227
|
+
│ current shell. │
|
228
|
+
│ --show-completion Show completion for the │
|
229
|
+
│ current shell, to copy it │
|
230
|
+
│ or customize the │
|
231
|
+
│ installation. │
|
232
|
+
│ --help Show this message and exit. │
|
233
|
+
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
|
234
|
+
|
235
|
+
|
236
|
+
```
|
237
|
+
|
238
|
+
|
239
|
+
[python-badge]: https://img.shields.io/pypi/pyversions/pack-mm.svg
|
240
|
+
[python-link]: https://pypi.org/project/pack-mm/
|
241
|
+
[ci-badge]: https://github.com/ddmms/pack-mm/actions/workflows/build.yml/badge.svg?branch=main
|
242
|
+
[ci-link]: https://github.com/ddmms/pack-mm/actions
|
243
|
+
[cov-badge]: https://coveralls.io/repos/github/ddmms/pack-mm/badge.svg?branch=main
|
244
|
+
[cov-link]: https://coveralls.io/github/ddmms/pack-mm?branch=main
|
245
|
+
[license-badge]: https://img.shields.io/badge/License-MIT-yellow.svg
|
246
|
+
[license-link]: https://opensource.org/license/MIT
|
@@ -0,0 +1,8 @@
|
|
1
|
+
pack_mm-0.0.20.dist-info/METADATA,sha256=8SHz3ITnBQfnGDQEkjDgb7bLEutNK4DVFuVUvnfz-QI,13498
|
2
|
+
pack_mm-0.0.20.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
|
3
|
+
pack_mm-0.0.20.dist-info/entry_points.txt,sha256=ajKA2oehIa_LCVCP2XTRxV0VNgjGl9c2wYkwk0BasrQ,66
|
4
|
+
pack_mm-0.0.20.dist-info/licenses/LICENSE,sha256=ZOYkPdn_vQ8wYJqZnjesow79F_grMbVlHcJ9V91G1pE,1100
|
5
|
+
pack_mm/__init__.py,sha256=ct7qfCmTDwhLYip6JKYWRLasmmaGYt0ColbK0CpvYZk,150
|
6
|
+
pack_mm/cli/packmm.py,sha256=VqumDT_f1Nf1LCZ1WsF5D6MoLmKEQPEimYenibQHIU4,4944
|
7
|
+
pack_mm/core/core.py,sha256=vNMQOVDIXyRCUWosww9sSHUxwqbjPRk5JLsb9muwpVA,11369
|
8
|
+
pack_mm-0.0.20.dist-info/RECORD,,
|
@@ -1,36 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.1
|
2
|
-
Name: pack-mm
|
3
|
-
Version: 0.0.15
|
4
|
-
Summary: packing materials and molecules in boxes using for machine learnt interatomic potentials
|
5
|
-
Author: Alin M. Elena
|
6
|
-
Classifier: Programming Language :: Python
|
7
|
-
Classifier: Programming Language :: Python :: 3.10
|
8
|
-
Classifier: Programming Language :: Python :: 3.11
|
9
|
-
Classifier: Programming Language :: Python :: 3.12
|
10
|
-
Classifier: Intended Audience :: Science/Research
|
11
|
-
Classifier: License :: OSI Approved :: MIT License
|
12
|
-
Classifier: Natural Language :: English
|
13
|
-
Classifier: Development Status :: 3 - Alpha
|
14
|
-
Project-URL: Repository, https://github.com/ddmms/pack-mm/
|
15
|
-
Project-URL: Documentation, https://ddmms.github.io/pack-mm/
|
16
|
-
Requires-Python: >=3.10
|
17
|
-
Requires-Dist: janus-core>=0.7.2
|
18
|
-
Requires-Dist: typer<1.0.0,>=0.12.5
|
19
|
-
Requires-Dist: typer-config<2.0.0,>=1.4.2
|
20
|
-
Description-Content-Type: text/markdown
|
21
|
-
|
22
|
-
# pack materials and molecules
|
23
|
-
|
24
|
-
[![Python versions][python-badge]][python-link]
|
25
|
-
[![Build Status][ci-badge]][ci-link]
|
26
|
-
[![Coverage Status][cov-badge]][cov-link]
|
27
|
-
[![License][license-badge]][license-link]
|
28
|
-
|
29
|
-
[python-badge]: https://img.shields.io/pypi/pyversions/pack-mm.svg
|
30
|
-
[python-link]: https://pypi.org/project/pack-mm/
|
31
|
-
[ci-badge]: https://github.com/ddmms/pack-mm/actions/workflows/build.yml/badge.svg?branch=main
|
32
|
-
[ci-link]: https://github.com/ddmms/pack-mm/actions
|
33
|
-
[cov-badge]: https://coveralls.io/repos/github/ddmms/pack-mm/badge.svg?branch=main
|
34
|
-
[cov-link]: https://coveralls.io/github/ddmms/pack-mm?branch=main
|
35
|
-
[license-badge]: https://img.shields.io/badge/License-MIT-yellow.svg
|
36
|
-
[license-link]: https://opensource.org/license/MIT
|
pack_mm-0.0.15.dist-info/RECORD
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
pack_mm-0.0.15.dist-info/METADATA,sha256=1QZ14qnSQmoH2FqowGHIjojlZSEnDnRaJ_WAYFmrojg,1583
|
2
|
-
pack_mm-0.0.15.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
|
3
|
-
pack_mm-0.0.15.dist-info/entry_points.txt,sha256=ajKA2oehIa_LCVCP2XTRxV0VNgjGl9c2wYkwk0BasrQ,66
|
4
|
-
pack_mm-0.0.15.dist-info/licenses/LICENSE,sha256=ZOYkPdn_vQ8wYJqZnjesow79F_grMbVlHcJ9V91G1pE,1100
|
5
|
-
pack_mm/__init__.py,sha256=ct7qfCmTDwhLYip6JKYWRLasmmaGYt0ColbK0CpvYZk,150
|
6
|
-
pack_mm/cli/packmm.py,sha256=FWiBUQBG6Z5Vi5A1VH9DYUn8iBwIs4NbFR5a8mPtEpM,4797
|
7
|
-
pack_mm/core/core.py,sha256=gP8j1NJg3_8dj4it3V2Z80dbAKhy0emwUjd_-wuKvws,10839
|
8
|
-
pack_mm-0.0.15.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|