Bulk Water¶
Set up environment (optional)¶
These steps are required for Google Colab, but may work on other systems too:
[1]:
#import locale
#locale.getpreferredencoding = lambda: "UTF-8"
#!python3 -m pip install pack-mm data-tutorials weas-widget
Let us start by creating a small box of water 10 A in size, for normal density that means 33 water molecules.
[2]:
from pack_mm.core.core import pack_molecules
from weas_widget import WeasWidget
e, final = pack_molecules(
molecule="H2O",
nmols=33,
arch="mace_mp",
model="small-0b2",
device="cpu",
where="anywhere",
cell_a=10,
cell_b=10,
cell_c=10,
seed=2025,
temperature=300,
ntries=20,
geometry=True,
threshold=0.5,
)
Inserting 33 H2O molecules in .
Using mace_mp model small-0b2 on cpu.
Insert in anywhere.
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/e3nn/o3/_wigner.py:10: UserWarning: Environment variable TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD detected, since the`weights_only` argument was not explicitly passed to `torch.load`, forcing weights_only=False.
_Jd, _W3j_flat, _W3j_indices = torch.load(os.path.join(os.path.dirname(__file__), 'constants.pt'))
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/torch/jit/_script.py:1491: FutureWarning: `torch.jit.script` is deprecated. Please switch to `torch.compile` or `torch.export`.
warnings.warn(
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/torch/jit/_script.py:1491: FutureWarning: `torch.jit.script` is deprecated. Please switch to `torch.compile` or `torch.export`.
warnings.warn(
cuequivariance or cuequivariance_torch is not available. Cuequivariance acceleration will be disabled.
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/torch/jit/_script.py:1491: FutureWarning: `torch.jit.script` is deprecated. Please switch to `torch.compile` or `torch.export`.
warnings.warn(
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/mace/calculators/mace.py:226: UserWarning: Environment variable TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD detected, since the`weights_only` argument was not explicitly passed to `torch.load`, forcing weights_only=False.
torch.load(f=model_path, map_location=device)
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/torch/jit/_serialization.py:176: FutureWarning: `torch.jit.load` is deprecated. Please switch to `torch.export`.
warnings.warn(
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/torch/jit/_serialization.py:176: FutureWarning: `torch.jit.load` is deprecated. Please switch to `torch.export`.
warnings.warn(
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/torch/jit/_serialization.py:176: FutureWarning: `torch.jit.load` is deprecated. Please switch to `torch.export`.
warnings.warn(
Using Materials Project MACE for MACECalculator with /home/runner/.cache/mace/macesmalldensityagnesistressmodel
Using float64 for MACECalculator, which is slower but more accurate. Recommended for geometry optimization.
Old energy=0.0, new energy=-14.169908427446721, de=-14.169908427446721, acc=np.float64(1.1067904436111663e+238), random=0.6573675854710377
Inserted particle 1
Old energy=-14.169908427446721, new energy=-28.388449306260227, de=-14.218540878813506, acc=np.float64(7.261977566078882e+238), random=0.7694578719378116
Inserted particle 2
Old energy=-28.388449306260227, new energy=-42.56138109854783, de=-14.1729317922876, acc=np.float64(1.2441012080377765e+238), random=0.6663921049033288
Inserted particle 3
Old energy=-42.56138109854783, new energy=-56.720451704384196, de=-14.15907060583637, acc=np.float64(7.277763676744587e+237), random=0.5196536887579605
Inserted particle 4
Old energy=-56.720451704384196, new energy=-70.95493496595596, de=-14.23448326157176, acc=np.float64(1.345473773275616e+239), random=0.06739574665921966
Inserted particle 5
Old energy=-70.95493496595596, new energy=-85.20119759619391, de=-14.24626263023795, acc=np.float64(2.122071379141933e+239), random=0.49961201043327175
Inserted particle 6
Old energy=-85.20119759619391, new energy=-99.4226181862961, de=-14.221420590102198, acc=np.float64(8.117680232384532e+238), random=0.1050746012583641
Inserted particle 7
Old energy=-99.4226181862961, new energy=-113.79662130272757, de=-14.374003116431467, acc=np.float64(2.969657990413869e+241), random=0.9378701885604214
Inserted particle 8
Old energy=-113.79662130272757, new energy=-128.13062203759785, de=-14.334000734870273, acc=np.float64(6.319689981845402e+240), random=0.3762683149324123
Inserted particle 9
Old energy=-128.13062203759785, new energy=-141.85615337199786, de=-13.725531334400017, acc=np.float64(3.791894695894241e+230), random=0.6727933834766038
Inserted particle 10
Old energy=-141.85615337199786, new energy=-156.06180658142108, de=-14.205653209423218, acc=np.float64(4.411146815908922e+238), random=0.09706066849775918
Inserted particle 11
Old energy=-156.06180658142108, new energy=-170.53713931561305, de=-14.475332734191966, acc=np.float64(1.4961311672701558e+243), random=0.47590567428965436
Inserted particle 12
Old energy=-170.53713931561305, new energy=-184.44423715363098, de=-13.907097838017933, acc=np.float64(4.256379248324519e+233), random=0.1445197281328413
Inserted particle 13
Old energy=-184.44423715363098, new energy=-198.8723316569115, de=-14.428094503280533, acc=np.float64(2.40658967246052e+242), random=0.6096984257895941
Inserted particle 14
Old energy=-198.8723316569115, new energy=-213.04724634722007, de=-14.174914690308555, acc=np.float64(1.3432812220825123e+238), random=0.10084644599814097
Inserted particle 15
Old energy=-213.04724634722007, new energy=-225.548543930126, de=-12.50129758290592, acc=np.float64(1.0295025792403101e+210), random=0.8475810108898351
Inserted particle 16
Old energy=-225.548543930126, new energy=-237.81867754510063, de=-12.27013361497464, acc=np.float64(1.3466116834684025e+206), random=0.9573928760728474
Inserted particle 17
Old energy=-237.81867754510063, new energy=-251.69716390805326, de=-13.878486362952628, acc=np.float64(1.4073059625944881e+233), random=0.3273810695294246
Inserted particle 18
Old energy=-251.69716390805326, new energy=-240.755982687732, de=10.941181220321255, acc=np.float64(1.571024023004777e-184), random=0.06247404096988407
Old energy=-251.69716390805326, new energy=-265.9848430306396, de=-14.287679122586326, acc=np.float64(1.0532383716559922e+240), random=0.9267631049637567
Inserted particle 19
Old energy=-265.9848430306396, new energy=-273.78462117763786, de=-7.799778146998278, acc=np.float64(1.0728779686218274e+131), random=0.3402871935608006
Inserted particle 20
Old energy=-273.78462117763786, new energy=-285.0964906085945, de=-11.31186943095662, acc=np.float64(1.0742544121306291e+190), random=0.1776678297264329
Inserted particle 21
Old energy=-285.0964906085945, new energy=-298.767292786814, de=-13.670802178219503, acc=np.float64(4.5650611352144245e+229), random=0.6002380235886438
Inserted particle 22
Old energy=-298.767292786814, new energy=-286.09731608133103, de=12.669976705482952, acc=np.float64(1.4245807063316535e-213), random=0.868138468423006
Old energy=-298.767292786814, new energy=-312.4208127465705, de=-13.653519959756522, acc=np.float64(2.3394728388110177e+229), random=0.657014836768514
Inserted particle 23
Old energy=-312.4208127465705, new energy=-315.2519351263058, de=-2.831122379735291, acc=np.float64(3.63729764383905e+47), random=0.5318473353823712
Old energy=-312.4208127465705, new energy=-324.3828667679099, de=-11.962054021339384, acc=np.float64(8.989410999100251e+200), random=0.9616436876719956
Inserted particle 24
Old energy=-324.3828667679099, new energy=-334.7276976756465, de=-10.344830907736593, acc=np.float64(6.103366546767006e+173), random=0.21200357006485315
Inserted particle 25
Old energy=-334.7276976756465, new energy=-348.8852358657079, de=-14.157538190061416, acc=np.float64(6.85890027328025e+237), random=0.4817459907937399
Inserted particle 26
Old energy=-348.8852358657079, new energy=-360.37717264453835, de=-11.49193677883045, acc=np.float64(1.1379062387516487e+193), random=0.7175118692379753
Inserted particle 27
Old energy=-360.37717264453835, new energy=-370.7194668673783, de=-10.34229422283994, acc=np.float64(5.532927860076645e+173), random=0.4094954707153864
Inserted particle 28
Old energy=-370.7194668673783, new energy=-381.90781888174286, de=-11.188352014364568, acc=np.float64(9.038683297513475e+187), random=0.19004083637014857
Inserted particle 29
Old energy=-381.90781888174286, new energy=-390.18913322157334, de=-8.281314339830487, acc=np.float64(1.3182721379881335e+139), random=0.2593074228409512
Inserted particle 30
Old energy=-390.18913322157334, new energy=-392.7194210876552, de=-2.530287866081835, acc=np.float64(3.2135105364186836e+42), random=0.368706041406911
Old energy=-390.18913322157334, new energy=-343.22770348980066, de=46.96142973177268, acc=np.float64(0.0), random=0.29948735641057544
Old energy=-390.18913322157334, new energy=-391.9470646471931, de=-1.757931425619745, acc=np.float64(3.403754206204541e+29), random=0.11024899776641639
Old energy=-390.18913322157334, new energy=-397.4714077514512, de=-7.282274529877839, acc=np.float64(2.172047115970688e+122), random=0.853089891818317
Inserted particle 31
Old energy=-397.4714077514512, new energy=-201.84842700716277, de=195.6229807442884, acc=np.float64(0.0), random=0.7172312048224184
Old energy=-397.4714077514512, new energy=-409.51758859289333, de=-12.046180841442151, acc=np.float64(2.328091753685072e+202), random=0.7007421832233066
Inserted particle 32
Old energy=-409.51758859289333, new energy=-422.30745403223574, de=-12.789865439342407, acc=np.float64(7.250295553039641e+214), random=0.37954479237838723
Inserted particle 33
Using Materials Project MACE for MACECalculator with /home/runner/.cache/mace/macesmalldensityagnesistressmodel
Using float64 for MACECalculator, which is slower but more accurate. Recommended for geometry optimization.
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/mace/calculators/mace.py:226: UserWarning: Environment variable TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD detected, since the`weights_only` argument was not explicitly passed to `torch.load`, forcing weights_only=False.
torch.load(f=model_path, map_location=device)
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/torch/jit/_serialization.py:176: FutureWarning: `torch.jit.load` is deprecated. Please switch to `torch.export`.
warnings.warn(
/home/runner/work/pack-mm/pack-mm/.venv/lib/python3.12/site-packages/torch/jit/_serialization.py:176: FutureWarning: `torch.jit.load` is deprecated. Please switch to `torch.export`.
warnings.warn(
Step Time Energy fmax
LBFGS: 0 07:12:16 -422.307454 13.877663
LBFGS: 1 07:12:16 -435.791603 15.542238
LBFGS: 2 07:12:16 -445.636460 8.628340
LBFGS: 3 07:12:17 -451.808973 4.176232
LBFGS: 4 07:12:17 -455.545885 3.666724
LBFGS: 5 07:12:18 -458.932705 3.087802
LBFGS: 6 07:12:18 -462.238560 2.496349
LBFGS: 7 07:12:18 -464.286151 3.489929
LBFGS: 8 07:12:19 -466.032275 2.215424
LBFGS: 9 07:12:19 -467.425347 1.697507
LBFGS: 10 07:12:20 -468.662562 2.029074
LBFGS: 11 07:12:20 -469.699687 2.413723
LBFGS: 12 07:12:20 -470.733457 1.752417
LBFGS: 13 07:12:21 -471.567068 1.079853
LBFGS: 14 07:12:21 -472.669489 1.711636
LBFGS: 15 07:12:21 -473.205563 1.634225
LBFGS: 16 07:12:22 -473.831545 1.175250
LBFGS: 17 07:12:22 -474.157829 2.514301
LBFGS: 18 07:12:23 -474.720307 1.106639
LBFGS: 19 07:12:23 -475.243021 0.929779
LBFGS: 20 07:12:23 -475.673385 1.057766
LBFGS: 21 07:12:24 -475.932370 0.881880
LBFGS: 22 07:12:24 -476.175535 0.882676
LBFGS: 23 07:12:25 -476.420049 1.188850
LBFGS: 24 07:12:25 -476.594292 0.765145
LBFGS: 25 07:12:25 -476.862982 0.805157
LBFGS: 26 07:12:26 -477.133243 0.879516
LBFGS: 27 07:12:26 -477.358436 1.161428
LBFGS: 28 07:12:27 -477.583134 0.853986
LBFGS: 29 07:12:27 -477.816074 0.892980
LBFGS: 30 07:12:27 -478.002069 0.802879
LBFGS: 31 07:12:28 -478.159765 0.907363
LBFGS: 32 07:12:28 -478.304739 0.732561
LBFGS: 33 07:12:29 -478.516317 0.698569
LBFGS: 34 07:12:29 -478.721229 0.788372
LBFGS: 35 07:12:29 -478.936063 0.775582
LBFGS: 36 07:12:30 -479.103873 0.650802
LBFGS: 37 07:12:30 -479.262580 0.675939
LBFGS: 38 07:12:30 -479.421737 0.860773
LBFGS: 39 07:12:31 -479.601171 0.640421
LBFGS: 40 07:12:31 -479.790530 0.622390
LBFGS: 41 07:12:32 -479.910151 0.659465
LBFGS: 42 07:12:32 -480.006815 0.481454
LBFGS: 43 07:12:32 -480.136074 0.590734
LBFGS: 44 07:12:33 -480.262922 0.953696
LBFGS: 45 07:12:33 -480.392769 0.508664
LBFGS: 46 07:12:34 -480.490737 0.586978
LBFGS: 47 07:12:34 -480.588302 0.639654
LBFGS: 48 07:12:34 -480.763744 0.638177
LBFGS: 49 07:12:35 -480.897251 0.534118
LBFGS: 50 07:12:35 -481.021311 0.485723
LBFGS: 51 07:12:35 -481.127862 0.582302
LBFGS: 52 07:12:36 -481.232738 0.612588
LBFGS: 53 07:12:36 -481.347576 0.649466
LBFGS: 54 07:12:37 -481.454183 0.629958
LBFGS: 55 07:12:37 -481.556168 0.408971
LBFGS: 56 07:12:37 -481.641221 0.448516
LBFGS: 57 07:12:38 -481.724783 0.448668
LBFGS: 58 07:12:38 -481.835808 0.413646
LBFGS: 59 07:12:39 -481.914032 0.685601
LBFGS: 60 07:12:39 -481.981834 0.460009
LBFGS: 61 07:12:39 -482.056799 0.391624
LBFGS: 62 07:12:40 -482.132678 0.308693
LBFGS: 63 07:12:40 -482.215704 0.362441
LBFGS: 64 07:12:40 -482.271780 0.359791
LBFGS: 65 07:12:41 -482.338623 0.381272
LBFGS: 66 07:12:41 -482.395852 0.422197
LBFGS: 67 07:12:42 -482.458444 0.386613
LBFGS: 68 07:12:42 -482.532481 0.394048
LBFGS: 69 07:12:42 -482.601371 0.402546
LBFGS: 70 07:12:43 -482.653404 0.353862
LBFGS: 71 07:12:43 -482.691509 0.377310
LBFGS: 72 07:12:43 -482.734611 0.330249
LBFGS: 73 07:12:44 -482.799811 0.381771
LBFGS: 74 07:12:44 -482.857080 0.447662
LBFGS: 75 07:12:45 -482.917838 0.376530
LBFGS: 76 07:12:45 -482.968576 0.315092
LBFGS: 77 07:12:45 -483.020102 0.310454
LBFGS: 78 07:12:46 -483.066142 0.347737
LBFGS: 79 07:12:46 -483.112253 0.311655
LBFGS: 80 07:12:46 -483.152855 0.330687
LBFGS: 81 07:12:47 -483.191872 0.268214
LBFGS: 82 07:12:47 -483.224914 0.444314
LBFGS: 83 07:12:48 -483.260812 0.273215
LBFGS: 84 07:12:48 -483.299696 0.464131
LBFGS: 85 07:12:48 -483.342284 0.301555
LBFGS: 86 07:12:49 -483.380349 0.306767
LBFGS: 87 07:12:49 -483.408996 0.324210
LBFGS: 88 07:12:50 -483.442423 0.342083
LBFGS: 89 07:12:50 -483.484117 0.290655
LBFGS: 90 07:12:50 -483.530734 0.297088
LBFGS: 91 07:12:51 -483.560967 0.248771
LBFGS: 92 07:12:51 -483.600029 0.496099
LBFGS: 93 07:12:51 -483.648500 0.461463
LBFGS: 94 07:12:52 -483.694032 0.991482
LBFGS: 95 07:12:52 -483.760075 0.537252
LBFGS: 96 07:12:53 -483.806151 0.382513
LBFGS: 97 07:12:53 -483.840036 0.343296
LBFGS: 98 07:12:53 -483.870777 0.350422
LBFGS: 99 07:12:54 -483.921630 0.429894
LBFGS: 100 07:12:54 -483.964606 0.493325
LBFGS: 101 07:12:54 -483.996735 0.413160
LBFGS: 102 07:12:55 -484.032976 0.290603
LBFGS: 103 07:12:55 -484.070603 0.287104
LBFGS: 104 07:12:56 -484.102650 0.266610
LBFGS: 105 07:12:56 -484.135817 0.265644
LBFGS: 106 07:12:56 -484.162171 0.250373
LBFGS: 107 07:12:57 -484.189260 0.292548
LBFGS: 108 07:12:57 -484.218739 0.307715
LBFGS: 109 07:12:58 -484.248907 0.565384
LBFGS: 110 07:12:58 -484.278317 0.251283
LBFGS: 111 07:12:58 -484.303058 0.216313
LBFGS: 112 07:12:59 -484.320560 0.222352
LBFGS: 113 07:12:59 -484.340146 0.220417
LBFGS: 114 07:13:00 -484.365009 0.237989
LBFGS: 115 07:13:00 -484.388229 0.175005
LBFGS: 116 07:13:00 -484.410060 0.206293
LBFGS: 117 07:13:01 -484.430236 0.204081
LBFGS: 118 07:13:01 -484.452477 0.252452
LBFGS: 119 07:13:01 -484.475909 0.273593
LBFGS: 120 07:13:02 -484.498682 0.301685
LBFGS: 121 07:13:02 -484.518715 0.308898
LBFGS: 122 07:13:03 -484.537707 0.230875
LBFGS: 123 07:13:03 -484.559027 0.203123
LBFGS: 124 07:13:03 -484.580842 0.256447
LBFGS: 125 07:13:04 -484.603563 0.279150
LBFGS: 126 07:13:04 -484.623792 0.214336
LBFGS: 127 07:13:05 -484.642450 0.210545
LBFGS: 128 07:13:05 -484.661977 0.295679
LBFGS: 129 07:13:05 -484.689155 0.401164
LBFGS: 130 07:13:06 -484.718331 0.308733
LBFGS: 131 07:13:06 -484.741818 0.382936
LBFGS: 132 07:13:07 -484.763953 0.216649
LBFGS: 133 07:13:07 -484.787856 0.235494
LBFGS: 134 07:13:07 -484.812531 0.264911
LBFGS: 135 07:13:08 -484.835767 0.402090
LBFGS: 136 07:13:08 -484.858430 0.217955
LBFGS: 137 07:13:09 -484.877322 0.179545
LBFGS: 138 07:13:09 -484.898388 0.261471
LBFGS: 139 07:13:09 -484.921436 0.243428
LBFGS: 140 07:13:10 -484.948703 0.319640
LBFGS: 141 07:13:10 -484.971011 0.261407
LBFGS: 142 07:13:10 -484.991352 0.230273
LBFGS: 143 07:13:11 -485.011476 0.211246
LBFGS: 144 07:13:11 -485.036650 0.290986
LBFGS: 145 07:13:12 -485.059315 0.183145
LBFGS: 146 07:13:12 -485.079177 0.199937
LBFGS: 147 07:13:12 -485.097575 0.197300
LBFGS: 148 07:13:13 -485.115220 0.225362
LBFGS: 149 07:13:13 -485.131850 0.206018
LBFGS: 150 07:13:14 -485.148506 0.180703
LBFGS: 151 07:13:14 -485.164133 0.192632
LBFGS: 152 07:13:14 -485.179739 0.192122
LBFGS: 153 07:13:15 -485.193961 0.157358
LBFGS: 154 07:13:15 -485.206883 0.150165
LBFGS: 155 07:13:16 -485.217582 0.131588
LBFGS: 156 07:13:16 -485.226837 0.132443
LBFGS: 157 07:13:16 -485.236188 0.135832
LBFGS: 158 07:13:17 -485.246934 0.128135
LBFGS: 159 07:13:17 -485.258847 0.150494
LBFGS: 160 07:13:18 -485.271095 0.170134
LBFGS: 161 07:13:18 -485.282844 0.206563
LBFGS: 162 07:13:18 -485.293838 0.155076
LBFGS: 163 07:13:19 -485.304935 0.155138
LBFGS: 164 07:13:19 -485.316104 0.131744
LBFGS: 165 07:13:20 -485.327063 0.189763
LBFGS: 166 07:13:20 -485.337150 0.153033
LBFGS: 167 07:13:20 -485.347754 0.150837
LBFGS: 168 07:13:21 -485.359310 0.153125
LBFGS: 169 07:13:21 -485.371676 0.162042
LBFGS: 170 07:13:22 -485.382159 0.141846
LBFGS: 171 07:13:22 -485.390716 0.119534
LBFGS: 172 07:13:22 -485.399287 0.143396
LBFGS: 173 07:13:23 -485.410824 0.179864
LBFGS: 174 07:13:23 -485.424947 0.205644
LBFGS: 175 07:13:24 -485.438451 0.241467
LBFGS: 176 07:13:24 -485.448004 0.214444
LBFGS: 177 07:13:24 -485.456397 0.134921
LBFGS: 178 07:13:25 -485.464157 0.134603
LBFGS: 179 07:13:25 -485.473787 0.186881
LBFGS: 180 07:13:26 -485.480683 0.173870
LBFGS: 181 07:13:26 -485.487157 0.115710
LBFGS: 182 07:13:26 -485.493831 0.128687
LBFGS: 183 07:13:27 -485.501392 0.116799
LBFGS: 184 07:13:27 -485.508188 0.154474
LBFGS: 185 07:13:28 -485.513987 0.102474
LBFGS: 186 07:13:28 -485.519603 0.105016
LBFGS: 187 07:13:28 -485.525997 0.152877
LBFGS: 188 07:13:29 -485.532837 0.173260
LBFGS: 189 07:13:29 -485.538829 0.115077
LBFGS: 190 07:13:30 -485.543717 0.090573
[3]:
viewer=WeasWidget()
viewer.from_ase(final)
viewer.avr.model_style = 1
viewer.avr.show_hydrogen_bonds = True
viewer
[3]:
[4]:
m = sum(final.get_masses())*1.660538921*10**(-24)
V = final.get_volume()*10**(-24)
rho = m/V
print(final.cell.cellpar())
print(f"Mass: {m:.3e} g")
print(f"Volume: {V:.3e} cm^3")
print(f"Density: {rho:.2f} g/cm^3")
[10.12960775 10.12960775 10.12960775 90. 90. 90. ]
Mass: 9.872e-22 g
Volume: 1.039e-21 cm^3
Density: 0.95 g/cm^3