Nudged Elastic Band¶
janus-core contains various machine learnt interatomic potentials (MLIPs), including MACE based models (MACE-MP, MACE-OFF), CHGNet, SevenNet and more, full list on https://github.com/stfc/janus-core.
Other will be added as their utility is proven beyond a specific material.
Aim¶
We showcase the use of NEB with janus and MLIPs by studying Ethanol oxidation reactions catalyzed by water molecules, the full study was carried out in this paper Chemical Physics Letters 363 (2002) 80–86
Set up environment (optional)¶
These steps are required to run this tutorial with Google Colab. To do so, uncomment and run the cell below.
This will replace pre-installed versions of numpy and torch in Colab with versions that are known to be compatible with janus-core.
It may be possible to skip the steps that uninstall and reinstall torch, which will save a considerable amount of time.
These instructions but may work for other systems too, but it is typically preferable to prepare a virtual environment separately before running this notebook if possible.
[1]:
# import locale
# locale.getpreferredencoding = lambda: "UTF-8"
# ! pip uninstall numpy -y # Uninstall pre-installed numpy
# ! pip uninstall torch torchaudio torchvision transformers -y # Uninstall pre-installed torch
# ! uv pip install torch==2.5.1 # Install pinned version of torch
# ! uv pip install janus-core[mace,visualise] data-tutorials --system # Install janus-core with MACE and WeasWidget, and data-tutorials
# get_ipython().kernel.do_shutdown(restart=True) # Restart kernel to update libraries. This may warn that your session has crashed.
To ensure you have the latest version of janus-core installed, compare the output of the following cell to the latest version available at https://pypi.org/project/janus-core/
[2]:
from janus_core import __version__
print(__version__)
0.9.2
Prepare data¶
Use data_tutorials to get the data required for this tutorial:
[3]:
from data_tutorials.data import get_data
get_data(
url="https://raw.githubusercontent.com/stfc/janus-core/main/docs/source/tutorials/data/",
filename=["ethanol_reactants.extxyz", "ethanol_products.extxyz","ethanol_reactants_1water.extxyz","ethanol_products_1water.extxyz","ethanol_reactants_2water.extxyz","ethanol_products_2water.extxyz"],
folder="../data",
)
try to download ethanol_reactants.extxyz from https://raw.githubusercontent.com/stfc/janus-core/main/docs/source/tutorials/data/ and save it in ../data/ethanol_reactants.extxyz
saved in ../data/ethanol_reactants.extxyz
try to download ethanol_products.extxyz from https://raw.githubusercontent.com/stfc/janus-core/main/docs/source/tutorials/data/ and save it in ../data/ethanol_products.extxyz
saved in ../data/ethanol_products.extxyz
try to download ethanol_reactants_1water.extxyz from https://raw.githubusercontent.com/stfc/janus-core/main/docs/source/tutorials/data/ and save it in ../data/ethanol_reactants_1water.extxyz
saved in ../data/ethanol_reactants_1water.extxyz
try to download ethanol_products_1water.extxyz from https://raw.githubusercontent.com/stfc/janus-core/main/docs/source/tutorials/data/ and save it in ../data/ethanol_products_1water.extxyz
saved in ../data/ethanol_products_1water.extxyz
try to download ethanol_reactants_2water.extxyz from https://raw.githubusercontent.com/stfc/janus-core/main/docs/source/tutorials/data/ and save it in ../data/ethanol_reactants_2water.extxyz
saved in ../data/ethanol_reactants_2water.extxyz
try to download ethanol_products_2water.extxyz from https://raw.githubusercontent.com/stfc/janus-core/main/docs/source/tutorials/data/ and save it in ../data/ethanol_products_2water.extxyz
saved in ../data/ethanol_products_2water.extxyz
Command-line help and options¶
Once janus-core is installed, the janus CLI command should be available:
[4]:
! janus neb --help
Usage: janus neb [OPTIONS]
Run Nudged Elastic Band method.
╭─ Options ────────────────────────────────────────────────────────────────────╮
│ --config TEXT Path to configuration file. │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ MLIP calculator ────────────────────────────────────────────────────────────╮
│ * --arch [mace|mace_mp|mace_off|c MLIP architecture to use │
│ hgnet|sevennet|nequip|dp for calculations. │
│ a3|orb|mattersim|grace|u [required] │
│ pet|fairchem|mace_omol] │
│ --device [cpu|cuda|mps|xpu] Device to run calculations │
│ on. │
│ [default: cpu] │
│ --model TEXT MLIP model name, or path │
│ to model. │
│ --calc-kwargs DICT Keyword arguments to pass │
│ to selected calculator. │
│ Must be passed as a │
│ dictionary wrapped in │
│ quotes, e.g. "{'key': │
│ value}". │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ Calculation ────────────────────────────────────────────────────────────────╮
│ --init-struct PATH Path of initial │
│ structure in band. │
│ --final-struct PATH Path of final │
│ structure in band. │
│ --neb-structs PATH Path of all NEB │
│ images. │
│ --neb-class TEXT Name of ASE NEB │
│ class to use. │
│ [default: NEB] │
│ --n-images INTEGER Number of images │
│ to use in NEB. │
│ [default: 15] │
│ --write-band --no-write-band Whether to write │
│ out all band │
│ images after │
│ optimization. │
│ [default: │
│ no-write-band] │
│ --neb-kwargs DICT Keyword arguments │
│ to pass to │
│ neb_method. Must │
│ be passed as a │
│ dictionary wrapped │
│ in quotes, e.g. │
│ "{'key': value}". │
│ --interpolator [ase|pymatgen] Choice of │
│ interpolation │
│ strategy. │
│ [default: ase] │
│ --interpolator-kwa… DICT Keyword arguments │
│ to pass to │
│ interpolator. Must │
│ be passed as a │
│ dictionary wrapped │
│ in quotes, e.g. │
│ "{'key': value}". │
│ --optimizer TEXT Name of ASE NEB │
│ optimizer to use. │
│ [default: │
│ NEBOptimizer] │
│ --fmax FLOAT Maximum force for │
│ NEB optimizer. │
│ [default: 0.1] │
│ --steps INTEGER Maximum number of │
│ steps for │
│ optimization. │
│ [default: 100] │
│ --optimizer-kwargs DICT Keyword arguments │
│ to pass to │
│ neb_optimizer. │
│ Must be passed as │
│ a dictionary │
│ wrapped in quotes, │
│ e.g. "{'key': │
│ value}". │
│ --plot-band --no-plot-band Whether to plot │
│ and save NEB band. │
│ [default: │
│ no-plot-band] │
│ --minimize --no-minimize Whether to │
│ minimize initial │
│ and final │
│ structures. │
│ [default: │
│ no-minimize] │
│ --minimize-kwargs DICT Keyword arguments │
│ to pass to │
│ geometry │
│ optimizer, │
│ including │
│ "opt_kwargs", │
│ "filter_kwargs", │
│ and "traj_kwargs". │
│ Must be passed as │
│ a dictionary │
│ wrapped in quotes, │
│ e.g. "{'key': │
│ value}". │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ Structure I/O ──────────────────────────────────────────────────────────────╮
│ --file-prefix PATH Prefix for output files, including directories. │
│ Default directory is ./janus_results, and │
│ default filename prefix is inferred from the │
│ input stucture filename. │
│ --read-kwargs DICT Keyword arguments to pass to ase.io.read. Must │
│ be passed as a dictionary wrapped in quotes, │
│ e.g. "{'key': value}". By default, │
│ read_kwargs['index'] = -1, so only the last │
│ structure is read. │
│ --write-kwargs DICT Keyword arguments to pass to ase.io.write when │
│ saving any structures. Must be passed as a │
│ dictionary wrapped in quotes, e.g. "{'key': │
│ value}". │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ Logging/summary ────────────────────────────────────────────────────────────╮
│ --log PATH Path to save logs to. Default is inferred │
│ from `file_prefix` │
│ --tracker --no-tracker Whether to save carbon emissions of │
│ calculation │
│ [default: tracker] │
│ --summary PATH Path to save summary of inputs, start/end │
│ time, and carbon emissions. Default is │
│ inferred from `file_prefix`. │
╰──────────────────────────────────────────────────────────────────────────────╯
run a simple Nudged Elastic Bands¶
0 water molecules case¶
[5]:
%%writefile neb.yml
init_struct: ../data/ethanol_reactants.extxyz
final_struct: ../data/ethanol_products.extxyz
n_images: 11
device: cpu
arch: mace_mp
model: medium-omat-0
minimize: False
plot_band: True
write_band: True
calc_kwargs:
dispersion: True
tracker: False
Writing neb.yml
visualise the inputs
[6]:
from ase.io import read
from weas_widget import WeasWidget
r = read("../data/ethanol_reactants.extxyz")
p = read("../data/ethanol_products.extxyz")
v=WeasWidget()
v.from_ase([r,p])
v.avr.model_style = 1
v.avr.show_hydrogen_bonds = True
v
[6]:
[7]:
!janus neb --config neb.yml
/home/runner/work/janus-core/janus-core/.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'))
cuequivariance or cuequivariance_torch is not available. Cuequivariance acceleration will be disabled.
Using model under Academic Software License (ASL) license, see https://github.com/gabor1/ASL
To use this model you accept the terms of the license.
Downloading MACE model from 'https://github.com/ACEsuit/mace-mp/releases/download/mace_omat_0/mace-omat-0-medium.model'
Cached MACE model to /home/runner/.cache/mace/maceomat0mediummodel
Using Materials Project MACE for MACECalculator with /home/runner/.cache/mace/maceomat0mediummodel
Using float64 for MACECalculator, which is slower but more accurate. Recommended for geometry optimization.
/home/runner/work/janus-core/janus-core/.venv/lib/python3.12/site-packages/mace/calculators/mace.py:197: 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)
Using head default out of ['default']
Step Time fmax
NEBOptimizer[ode]: 0 18:19:04 4.9178
NEBOptimizer[ode]: 1 18:19:05 4.3176
NEBOptimizer[ode]: 2 18:19:06 3.4107
NEBOptimizer[ode]: 3 18:19:07 2.4646
NEBOptimizer[ode]: 4 18:19:08 2.4292
NEBOptimizer[ode]: 5 18:19:09 1.9160
NEBOptimizer[ode]: 6 18:19:10 1.8580
NEBOptimizer[ode]: 7 18:19:11 1.7477
NEBOptimizer[ode]: 8 18:19:12 1.3903
NEBOptimizer[ode]: 9 18:19:13 0.7574
NEBOptimizer[ode]: 10 18:19:16 0.6325
NEBOptimizer[ode]: 11 18:19:17 0.6105
NEBOptimizer[ode]: 12 18:19:18 0.5510
NEBOptimizer[ode]: 13 18:19:19 0.4686
NEBOptimizer[ode]: 14 18:19:21 0.4465
NEBOptimizer[ode]: 15 18:19:22 0.4361
NEBOptimizer[ode]: 16 18:19:24 0.4243
NEBOptimizer[ode]: 17 18:19:25 0.3910
NEBOptimizer[ode]: 18 18:19:27 0.3845
NEBOptimizer[ode]: 19 18:19:28 0.3768
NEBOptimizer[ode]: 20 18:19:29 0.3717
NEBOptimizer[ode]: 21 18:19:30 0.3675
NEBOptimizer[ode]: 22 18:19:31 0.3609
NEBOptimizer[ode]: 23 18:19:32 0.3359
NEBOptimizer[ode]: 24 18:19:35 0.3332
NEBOptimizer[ode]: 25 18:19:36 0.3303
NEBOptimizer[ode]: 26 18:19:37 0.3191
NEBOptimizer[ode]: 27 18:19:38 0.2760
NEBOptimizer[ode]: 28 18:19:40 0.2667
NEBOptimizer[ode]: 29 18:19:41 0.2631
NEBOptimizer[ode]: 30 18:19:43 0.2610
NEBOptimizer[ode]: 31 18:19:44 0.2589
NEBOptimizer[ode]: 32 18:19:45 0.2506
NEBOptimizer[ode]: 33 18:19:46 0.2176
NEBOptimizer[ode]: 34 18:19:48 0.2078
NEBOptimizer[ode]: 35 18:19:49 0.2053
NEBOptimizer[ode]: 36 18:19:51 0.2037
NEBOptimizer[ode]: 37 18:19:52 0.2020
NEBOptimizer[ode]: 38 18:19:53 0.1953
NEBOptimizer[ode]: 39 18:19:54 0.1689
NEBOptimizer[ode]: 40 18:19:56 0.1552
NEBOptimizer[ode]: 41 18:19:58 0.1537
NEBOptimizer[ode]: 42 18:20:00 0.1522
NEBOptimizer[ode]: 43 18:20:01 0.1469
NEBOptimizer[ode]: 44 18:20:02 0.1261
NEBOptimizer[ode]: 45 18:20:04 0.1246
NEBOptimizer[ode]: 46 18:20:05 0.1235
NEBOptimizer[ode]: 47 18:20:06 0.1221
NEBOptimizer[ode]: 48 18:20:07 0.1165
NEBOptimizer[ode]: 49 18:20:09 0.0975
[8]:
!ls janus_results/
Aluminium-elastic_tensor.dat
Aluminium-elasticity-log.yml
Aluminium-elasticity-summary.yml
Carbon-nanotube-elastic_tensor.dat
Carbon-nanotube-elasticity-log.yml
Carbon-nanotube-elasticity-summary.yml
Diamond-elastic_tensor.dat
Diamond-elasticity-generated.extxyz
Diamond-elasticity-log.yml
Diamond-elasticity-opt.extxyz
Diamond-elasticity-summary.yml
NaCl-1040-npt-T1040.0-T1080.0-p0.0-final.extxyz
NaCl-1040-npt-T1040.0-T1080.0-p0.0-md-log.yml
NaCl-1040-npt-T1040.0-T1080.0-p0.0-md-summary.yml
NaCl-1040-npt-T1040.0-T1080.0-p0.0-stats.dat
NaCl-1040-npt-T1040.0-T1080.0-p0.0-traj.extxyz
NaCl-deformed-geomopt-log.yml
NaCl-deformed-geomopt-summary.yml
NaCl-deformed-opt.extxyz
NaCl-deformed-traj.extxyz
NaCl-mace-geomopt-log.yml
NaCl-mace-geomopt-summary.yml
NaCl-mace-opt.extxyz
NaCl-nvt-T100.0-cor.dat
NaCl-nvt-T100.0-final.extxyz
NaCl-nvt-T100.0-md-log.yml
NaCl-nvt-T100.0-md-summary.yml
NaCl-nvt-T100.0-res-100.extxyz
NaCl-nvt-T100.0-res-150.extxyz
NaCl-nvt-T100.0-res-200.extxyz
NaCl-nvt-T100.0-res-250.extxyz
NaCl-nvt-T100.0-res-300.extxyz
NaCl-nvt-T100.0-res-50.extxyz
NaCl-nvt-T100.0-stats.dat
NaCl-nvt-T100.0-traj.extxyz
NaCl-orb-geomopt-log.yml
NaCl-orb-geomopt-summary.yml
NaCl-orb-opt.extxyz
ethanol_reactants-neb-band.extxyz
ethanol_reactants-neb-log.yml
ethanol_reactants-neb-plot.svg
ethanol_reactants-neb-results.dat
ethanol_reactants-neb-summary.yml
[9]:
from IPython.display import SVG, display
display(SVG("janus_results/ethanol_reactants-neb-plot.svg"))
[10]:
nebp = read("janus_results/ethanol_reactants-neb-band.extxyz", index=":")
w=WeasWidget()
w.from_ase(nebp)
w.avr.model_style = 1
w.avr.show_hydrogen_bonds = True
w
[10]:
is the barrier realistic? compare with the numbers from the paper.
1 water molecule¶
we can use the previous config and just overwrite the init and final structures
[11]:
! janus neb --config neb.yml --init-struct ../data/ethanol_reactants_1water.extxyz --final-struct ../data/ethanol_products_1water.extxyz
/home/runner/work/janus-core/janus-core/.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'))
cuequivariance or cuequivariance_torch is not available. Cuequivariance acceleration will be disabled.
Using model under Academic Software License (ASL) license, see https://github.com/gabor1/ASL
To use this model you accept the terms of the license.
Using Materials Project MACE for MACECalculator with /home/runner/.cache/mace/maceomat0mediummodel
Using float64 for MACECalculator, which is slower but more accurate. Recommended for geometry optimization.
/home/runner/work/janus-core/janus-core/.venv/lib/python3.12/site-packages/mace/calculators/mace.py:197: 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)
Using head default out of ['default']
Step Time fmax
NEBOptimizer[ode]: 0 18:20:19 3.0819
NEBOptimizer[ode]: 1 18:20:20 2.8575
NEBOptimizer[ode]: 2 18:20:22 2.4674
NEBOptimizer[ode]: 3 18:20:23 2.6471
NEBOptimizer[ode]: 4 18:20:24 3.8368
NEBOptimizer[ode]: 5 18:20:26 1.3990
NEBOptimizer[ode]: 6 18:20:27 1.3097
NEBOptimizer[ode]: 7 18:20:28 1.0957
NEBOptimizer[ode]: 8 18:20:30 1.9602
NEBOptimizer[ode]: 9 18:20:32 0.7596
NEBOptimizer[ode]: 10 18:20:34 0.7381
NEBOptimizer[ode]: 11 18:20:35 0.7142
NEBOptimizer[ode]: 12 18:20:36 0.6326
NEBOptimizer[ode]: 13 18:20:39 0.6249
NEBOptimizer[ode]: 14 18:20:40 0.6161
NEBOptimizer[ode]: 15 18:20:42 0.6073
NEBOptimizer[ode]: 16 18:20:43 0.5958
NEBOptimizer[ode]: 17 18:20:44 0.5729
NEBOptimizer[ode]: 18 18:20:46 0.8577
NEBOptimizer[ode]: 19 18:20:47 0.5426
NEBOptimizer[ode]: 20 18:20:48 0.5369
NEBOptimizer[ode]: 21 18:20:50 0.5294
NEBOptimizer[ode]: 22 18:20:51 0.4988
NEBOptimizer[ode]: 23 18:20:52 0.3722
NEBOptimizer[ode]: 24 18:20:55 0.3641
NEBOptimizer[ode]: 25 18:20:56 0.3882
NEBOptimizer[ode]: 26 18:20:58 0.3456
NEBOptimizer[ode]: 27 18:20:59 0.3421
NEBOptimizer[ode]: 28 18:21:00 0.3371
NEBOptimizer[ode]: 29 18:21:02 0.3170
NEBOptimizer[ode]: 30 18:21:03 0.2643
NEBOptimizer[ode]: 31 18:21:06 0.4312
NEBOptimizer[ode]: 32 18:21:07 0.2429
NEBOptimizer[ode]: 33 18:21:08 0.2410
NEBOptimizer[ode]: 34 18:21:10 0.2377
NEBOptimizer[ode]: 35 18:21:11 0.2239
NEBOptimizer[ode]: 36 18:21:12 0.1790
NEBOptimizer[ode]: 37 18:21:15 0.1730
NEBOptimizer[ode]: 38 18:21:18 0.1686
NEBOptimizer[ode]: 39 18:21:19 0.1658
NEBOptimizer[ode]: 40 18:21:20 0.1636
NEBOptimizer[ode]: 41 18:21:22 0.1610
NEBOptimizer[ode]: 42 18:21:23 0.1585
NEBOptimizer[ode]: 43 18:21:24 0.1571
NEBOptimizer[ode]: 44 18:21:26 0.1561
NEBOptimizer[ode]: 45 18:21:27 0.1549
NEBOptimizer[ode]: 46 18:21:28 0.1502
NEBOptimizer[ode]: 47 18:21:31 0.1480
NEBOptimizer[ode]: 48 18:21:32 0.1459
NEBOptimizer[ode]: 49 18:21:34 0.1447
NEBOptimizer[ode]: 50 18:21:35 0.1439
NEBOptimizer[ode]: 51 18:21:36 0.1429
NEBOptimizer[ode]: 52 18:21:38 0.1387
NEBOptimizer[ode]: 53 18:21:39 0.2339
NEBOptimizer[ode]: 54 18:21:42 0.1230
NEBOptimizer[ode]: 55 18:21:43 0.1227
NEBOptimizer[ode]: 56 18:21:44 0.1214
NEBOptimizer[ode]: 57 18:21:46 0.1133
NEBOptimizer[ode]: 58 18:21:48 0.1212
NEBOptimizer[ode]: 59 18:21:50 0.1311
NEBOptimizer[ode]: 60 18:21:51 0.1128
NEBOptimizer[ode]: 61 18:21:53 0.1129
NEBOptimizer[ode]: 62 18:21:54 0.1125
NEBOptimizer[ode]: 63 18:21:55 0.1082
NEBOptimizer[ode]: 64 18:21:57 0.1246
NEBOptimizer[ode]: 65 18:21:59 0.0944
[12]:
!ls janus_results/
Aluminium-elastic_tensor.dat
Aluminium-elasticity-log.yml
Aluminium-elasticity-summary.yml
Carbon-nanotube-elastic_tensor.dat
Carbon-nanotube-elasticity-log.yml
Carbon-nanotube-elasticity-summary.yml
Diamond-elastic_tensor.dat
Diamond-elasticity-generated.extxyz
Diamond-elasticity-log.yml
Diamond-elasticity-opt.extxyz
Diamond-elasticity-summary.yml
NaCl-1040-npt-T1040.0-T1080.0-p0.0-final.extxyz
NaCl-1040-npt-T1040.0-T1080.0-p0.0-md-log.yml
NaCl-1040-npt-T1040.0-T1080.0-p0.0-md-summary.yml
NaCl-1040-npt-T1040.0-T1080.0-p0.0-stats.dat
NaCl-1040-npt-T1040.0-T1080.0-p0.0-traj.extxyz
NaCl-deformed-geomopt-log.yml
NaCl-deformed-geomopt-summary.yml
NaCl-deformed-opt.extxyz
NaCl-deformed-traj.extxyz
NaCl-mace-geomopt-log.yml
NaCl-mace-geomopt-summary.yml
NaCl-mace-opt.extxyz
NaCl-nvt-T100.0-cor.dat
NaCl-nvt-T100.0-final.extxyz
NaCl-nvt-T100.0-md-log.yml
NaCl-nvt-T100.0-md-summary.yml
NaCl-nvt-T100.0-res-100.extxyz
NaCl-nvt-T100.0-res-150.extxyz
NaCl-nvt-T100.0-res-200.extxyz
NaCl-nvt-T100.0-res-250.extxyz
NaCl-nvt-T100.0-res-300.extxyz
NaCl-nvt-T100.0-res-50.extxyz
NaCl-nvt-T100.0-stats.dat
NaCl-nvt-T100.0-traj.extxyz
NaCl-orb-geomopt-log.yml
NaCl-orb-geomopt-summary.yml
NaCl-orb-opt.extxyz
ethanol_reactants-neb-band.extxyz
ethanol_reactants-neb-log.yml
ethanol_reactants-neb-plot.svg
ethanol_reactants-neb-results.dat
ethanol_reactants-neb-summary.yml
ethanol_reactants_1water-neb-band.extxyz
ethanol_reactants_1water-neb-log.yml
ethanol_reactants_1water-neb-plot.svg
ethanol_reactants_1water-neb-results.dat
ethanol_reactants_1water-neb-summary.yml
[13]:
display(SVG("janus_results/ethanol_reactants_1water-neb-plot.svg"))
[14]:
from ase.io import read
from weas_widget import WeasWidget
nebp = read("janus_results/ethanol_reactants_1water-neb-band.extxyz", index=":")
w1=WeasWidget()
w1.from_ase(nebp)
w1.avr.model_style = 1
w1.avr.show_hydrogen_bonds = True
w1
[14]:
2 water molecules¶
[15]:
! janus neb --config neb.yml --init-struct ../data/ethanol_reactants_2water.extxyz --final-struct ../data/ethanol_products_2water.extxyz
/home/runner/work/janus-core/janus-core/.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'))
cuequivariance or cuequivariance_torch is not available. Cuequivariance acceleration will be disabled.
Using model under Academic Software License (ASL) license, see https://github.com/gabor1/ASL
To use this model you accept the terms of the license.
Using Materials Project MACE for MACECalculator with /home/runner/.cache/mace/maceomat0mediummodel
Using float64 for MACECalculator, which is slower but more accurate. Recommended for geometry optimization.
/home/runner/work/janus-core/janus-core/.venv/lib/python3.12/site-packages/mace/calculators/mace.py:197: 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)
Using head default out of ['default']
Step Time fmax
NEBOptimizer[ode]: 0 18:22:09 4.6401
NEBOptimizer[ode]: 1 18:22:11 2.2629
NEBOptimizer[ode]: 2 18:22:12 1.3853
NEBOptimizer[ode]: 3 18:22:14 1.1313
NEBOptimizer[ode]: 4 18:22:16 0.9902
NEBOptimizer[ode]: 5 18:22:17 1.4979
NEBOptimizer[ode]: 6 18:22:19 2.6462
NEBOptimizer[ode]: 7 18:22:21 0.5712
NEBOptimizer[ode]: 8 18:22:22 0.5845
NEBOptimizer[ode]: 9 18:22:24 0.5972
NEBOptimizer[ode]: 10 18:22:26 0.6734
NEBOptimizer[ode]: 11 18:22:27 0.9283
NEBOptimizer[ode]: 12 18:22:29 1.3773
NEBOptimizer[ode]: 13 18:22:31 0.9781
NEBOptimizer[ode]: 14 18:22:32 0.9827
NEBOptimizer[ode]: 15 18:22:34 0.9800
NEBOptimizer[ode]: 16 18:22:36 0.9465
NEBOptimizer[ode]: 17 18:22:37 0.5192
NEBOptimizer[ode]: 18 18:22:39 0.7771
NEBOptimizer[ode]: 19 18:22:42 0.4973
NEBOptimizer[ode]: 20 18:22:44 0.3426
NEBOptimizer[ode]: 21 18:22:46 0.3116
NEBOptimizer[ode]: 22 18:22:47 0.2428
NEBOptimizer[ode]: 23 18:22:49 0.2772
NEBOptimizer[ode]: 24 18:22:52 0.2159
NEBOptimizer[ode]: 25 18:22:54 0.1963
NEBOptimizer[ode]: 26 18:22:56 0.1785
NEBOptimizer[ode]: 27 18:22:57 0.2095
NEBOptimizer[ode]: 28 18:23:00 0.1593
NEBOptimizer[ode]: 29 18:23:02 0.1564
NEBOptimizer[ode]: 30 18:23:04 0.1448
NEBOptimizer[ode]: 31 18:23:05 0.1311
NEBOptimizer[ode]: 32 18:23:09 0.2194
NEBOptimizer[ode]: 33 18:23:10 0.1379
NEBOptimizer[ode]: 34 18:23:12 0.1365
NEBOptimizer[ode]: 35 18:23:14 0.1354
NEBOptimizer[ode]: 36 18:23:15 0.1321
NEBOptimizer[ode]: 37 18:23:17 0.1253
NEBOptimizer[ode]: 38 18:23:20 0.2126
NEBOptimizer[ode]: 39 18:23:22 0.1209
NEBOptimizer[ode]: 40 18:23:23 0.1209
NEBOptimizer[ode]: 41 18:23:25 0.1207
NEBOptimizer[ode]: 42 18:23:27 0.1185
NEBOptimizer[ode]: 43 18:23:28 0.1049
NEBOptimizer[ode]: 44 18:23:32 0.1227
NEBOptimizer[ode]: 45 18:23:33 0.0903
[16]:
display(SVG("janus_results/ethanol_reactants_2water-neb-plot.svg"))
[17]:
from ase.io import read
from weas_widget import WeasWidget
nebp = read("janus_results/ethanol_reactants_2water-neb-band.extxyz", index=":")
w2=WeasWidget()
w2.from_ase(nebp)
w2.avr.model_style = 1
w2.avr.show_hydrogen_bonds = True
w2
[17]:
extra bits¶
analyse the barrier height trend.
consider redoing the same exercise with a different potential… remember if you use mace-off dispersion needs to be off.