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.
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]:
# ! uv pip install janus-core[mace,orb,visualise] data-tutorials --system # Install janus-core with MACE, Orb, and WeasWidget, and data-tutorials
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.4
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 <str> Path to configuration file. │
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ MLIP calculator ────────────────────────────────────────────────────────────╮
│ * --arch <function> MLIP architecture to use for │
│ calculations. │
│ [required] │
│ --device <function> Device to run calculations on. │
│ [default: cpu] │
│ --model <str> 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 <str> Name of ASE NEB │
│ class to use. │
│ [default: NEB] │
│ --n-images <int> 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 <function> Choice of │
│ interpolation │
│ strategy. │
│ [default: ase] │
│ --interpolator-kwargs DICT Keyword arguments to │
│ pass to │
│ interpolator. Must │
│ be passed as a │
│ dictionary wrapped │
│ in quotes, e.g. │
│ "{'key': value}". │
│ --optimizer <str> Name of ASE NEB │
│ optimizer to use. │
│ [default: │
│ NEBOptimizer] │
│ --fmax <float> Maximum force for │
│ NEB optimizer. │
│ [default: 0.1] │
│ --steps <int> 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.
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: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)
Step Time fmax
NEBOptimizer[ode]: 0 20:07:45 4.9178
NEBOptimizer[ode]: 1 20:07:46 4.3176
NEBOptimizer[ode]: 2 20:07:47 3.4107
NEBOptimizer[ode]: 3 20:07:48 2.4646
NEBOptimizer[ode]: 4 20:07:49 2.4292
NEBOptimizer[ode]: 5 20:07:51 1.9160
NEBOptimizer[ode]: 6 20:07:52 1.8580
NEBOptimizer[ode]: 7 20:07:53 1.7477
NEBOptimizer[ode]: 8 20:07:54 1.3903
NEBOptimizer[ode]: 9 20:07:55 0.7574
NEBOptimizer[ode]: 10 20:07:58 0.6325
NEBOptimizer[ode]: 11 20:07:59 0.6105
NEBOptimizer[ode]: 12 20:08:00 0.5510
NEBOptimizer[ode]: 13 20:08:01 0.4686
NEBOptimizer[ode]: 14 20:08:04 0.4465
NEBOptimizer[ode]: 15 20:08:05 0.4361
NEBOptimizer[ode]: 16 20:08:06 0.4243
NEBOptimizer[ode]: 17 20:08:07 0.3910
NEBOptimizer[ode]: 18 20:08:10 0.3845
NEBOptimizer[ode]: 19 20:08:11 0.3768
NEBOptimizer[ode]: 20 20:08:12 0.3717
NEBOptimizer[ode]: 21 20:08:13 0.3675
NEBOptimizer[ode]: 22 20:08:14 0.3609
NEBOptimizer[ode]: 23 20:08:16 0.3359
NEBOptimizer[ode]: 24 20:08:18 0.3332
NEBOptimizer[ode]: 25 20:08:19 0.3303
NEBOptimizer[ode]: 26 20:08:20 0.3191
NEBOptimizer[ode]: 27 20:08:22 0.2760
NEBOptimizer[ode]: 28 20:08:24 0.2667
NEBOptimizer[ode]: 29 20:08:25 0.2631
NEBOptimizer[ode]: 30 20:08:26 0.2610
NEBOptimizer[ode]: 31 20:08:28 0.2589
NEBOptimizer[ode]: 32 20:08:29 0.2506
NEBOptimizer[ode]: 33 20:08:30 0.2176
NEBOptimizer[ode]: 34 20:08:32 0.2078
NEBOptimizer[ode]: 35 20:08:34 0.2053
NEBOptimizer[ode]: 36 20:08:35 0.2037
NEBOptimizer[ode]: 37 20:08:36 0.2020
NEBOptimizer[ode]: 38 20:08:37 0.1953
NEBOptimizer[ode]: 39 20:08:38 0.1689
NEBOptimizer[ode]: 40 20:08:41 0.1552
NEBOptimizer[ode]: 41 20:08:43 0.1537
NEBOptimizer[ode]: 42 20:08:44 0.1522
NEBOptimizer[ode]: 43 20:08:46 0.1469
NEBOptimizer[ode]: 44 20:08:47 0.1261
NEBOptimizer[ode]: 45 20:08:49 0.1246
NEBOptimizer[ode]: 46 20:08:50 0.1235
NEBOptimizer[ode]: 47 20:08:52 0.1221
NEBOptimizer[ode]: 48 20:08:53 0.1165
NEBOptimizer[ode]: 49 20:08:54 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
beta_quartz-eos-fit.dat
beta_quartz-eos-log.yml
beta_quartz-eos-plot.svg
beta_quartz-eos-raw.dat
beta_quartz-eos-summary.yml
beta_quartz-generated.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
α_quartz-eos-fit.dat
α_quartz-eos-log.yml
α_quartz-eos-plot.svg
α_quartz-eos-raw.dat
α_quartz-eos-summary.yml
α_quartz-generated.extxyz
[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: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)
Step Time fmax
NEBOptimizer[ode]: 0 20:09:06 3.0819
NEBOptimizer[ode]: 1 20:09:07 2.8575
NEBOptimizer[ode]: 2 20:09:09 2.4674
NEBOptimizer[ode]: 3 20:09:10 2.6471
NEBOptimizer[ode]: 4 20:09:12 3.8368
NEBOptimizer[ode]: 5 20:09:13 1.3990
NEBOptimizer[ode]: 6 20:09:14 1.3097
NEBOptimizer[ode]: 7 20:09:16 1.0957
NEBOptimizer[ode]: 8 20:09:17 1.9602
NEBOptimizer[ode]: 9 20:09:20 0.7596
NEBOptimizer[ode]: 10 20:09:22 0.7381
NEBOptimizer[ode]: 11 20:09:23 0.7142
NEBOptimizer[ode]: 12 20:09:24 0.6326
NEBOptimizer[ode]: 13 20:09:27 0.6249
NEBOptimizer[ode]: 14 20:09:29 0.6161
NEBOptimizer[ode]: 15 20:09:30 0.6073
NEBOptimizer[ode]: 16 20:09:32 0.5958
NEBOptimizer[ode]: 17 20:09:33 0.5729
NEBOptimizer[ode]: 18 20:09:34 0.8577
NEBOptimizer[ode]: 19 20:09:36 0.5426
NEBOptimizer[ode]: 20 20:09:37 0.5369
NEBOptimizer[ode]: 21 20:09:39 0.5294
NEBOptimizer[ode]: 22 20:09:40 0.4988
NEBOptimizer[ode]: 23 20:09:42 0.3722
NEBOptimizer[ode]: 24 20:09:44 0.3641
NEBOptimizer[ode]: 25 20:09:46 0.3882
NEBOptimizer[ode]: 26 20:09:47 0.3456
NEBOptimizer[ode]: 27 20:09:49 0.3421
NEBOptimizer[ode]: 28 20:09:50 0.3371
NEBOptimizer[ode]: 29 20:09:52 0.3170
NEBOptimizer[ode]: 30 20:09:53 0.2643
NEBOptimizer[ode]: 31 20:09:56 0.4312
NEBOptimizer[ode]: 32 20:09:57 0.2429
NEBOptimizer[ode]: 33 20:09:59 0.2410
NEBOptimizer[ode]: 34 20:10:00 0.2377
NEBOptimizer[ode]: 35 20:10:02 0.2239
NEBOptimizer[ode]: 36 20:10:03 0.1790
NEBOptimizer[ode]: 37 20:10:06 0.1730
NEBOptimizer[ode]: 38 20:10:09 0.1686
NEBOptimizer[ode]: 39 20:10:10 0.1658
NEBOptimizer[ode]: 40 20:10:12 0.1635
NEBOptimizer[ode]: 41 20:10:13 0.1610
NEBOptimizer[ode]: 42 20:10:15 0.1586
NEBOptimizer[ode]: 43 20:10:16 0.1571
NEBOptimizer[ode]: 44 20:10:18 0.1561
NEBOptimizer[ode]: 45 20:10:19 0.1549
NEBOptimizer[ode]: 46 20:10:20 0.1502
NEBOptimizer[ode]: 47 20:10:23 0.1480
NEBOptimizer[ode]: 48 20:10:25 0.1460
NEBOptimizer[ode]: 49 20:10:26 0.1448
NEBOptimizer[ode]: 50 20:10:28 0.1440
NEBOptimizer[ode]: 51 20:10:29 0.1430
NEBOptimizer[ode]: 52 20:10:30 0.1387
NEBOptimizer[ode]: 53 20:10:33 0.1361
NEBOptimizer[ode]: 54 20:10:35 0.1640
NEBOptimizer[ode]: 55 20:10:36 0.1327
NEBOptimizer[ode]: 56 20:10:38 0.1321
NEBOptimizer[ode]: 57 20:10:39 0.1313
NEBOptimizer[ode]: 58 20:10:40 0.1283
NEBOptimizer[ode]: 59 20:10:42 0.1179
NEBOptimizer[ode]: 60 20:10:45 0.1198
NEBOptimizer[ode]: 61 20:10:47 0.1176
NEBOptimizer[ode]: 62 20:10:49 0.1166
NEBOptimizer[ode]: 63 20:10:50 0.1140
NEBOptimizer[ode]: 64 20:10:52 0.1152
NEBOptimizer[ode]: 65 20:10:55 0.1023
NEBOptimizer[ode]: 66 20:10:56 0.1081
NEBOptimizer[ode]: 67 20:10:57 0.1079
NEBOptimizer[ode]: 68 20:10:59 0.1077
NEBOptimizer[ode]: 69 20:11:00 0.1068
NEBOptimizer[ode]: 70 20:11:02 0.1010
NEBOptimizer[ode]: 71 20:11:05 0.1024
NEBOptimizer[ode]: 72 20:11:06 0.1016
NEBOptimizer[ode]: 73 20:11:07 0.1011
NEBOptimizer[ode]: 74 20:11:09 0.1005
NEBOptimizer[ode]: 75 20:11:10 0.0987
[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
beta_quartz-eos-fit.dat
beta_quartz-eos-log.yml
beta_quartz-eos-plot.svg
beta_quartz-eos-raw.dat
beta_quartz-eos-summary.yml
beta_quartz-generated.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
α_quartz-eos-fit.dat
α_quartz-eos-log.yml
α_quartz-eos-plot.svg
α_quartz-eos-raw.dat
α_quartz-eos-summary.yml
α_quartz-generated.extxyz
[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: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)
Step Time fmax
NEBOptimizer[ode]: 0 20:11:22 4.6401
NEBOptimizer[ode]: 1 20:11:23 2.2629
NEBOptimizer[ode]: 2 20:11:25 1.3853
NEBOptimizer[ode]: 3 20:11:27 1.1313
NEBOptimizer[ode]: 4 20:11:29 0.9902
NEBOptimizer[ode]: 5 20:11:31 1.4979
NEBOptimizer[ode]: 6 20:11:32 2.6462
NEBOptimizer[ode]: 7 20:11:34 0.5712
NEBOptimizer[ode]: 8 20:11:36 0.5845
NEBOptimizer[ode]: 9 20:11:38 0.5972
NEBOptimizer[ode]: 10 20:11:40 0.6734
NEBOptimizer[ode]: 11 20:11:41 0.9283
NEBOptimizer[ode]: 12 20:11:43 1.3773
NEBOptimizer[ode]: 13 20:11:45 0.9781
NEBOptimizer[ode]: 14 20:11:47 0.9827
NEBOptimizer[ode]: 15 20:11:49 0.9800
NEBOptimizer[ode]: 16 20:11:51 0.9465
NEBOptimizer[ode]: 17 20:11:52 0.5192
NEBOptimizer[ode]: 18 20:11:54 0.7771
NEBOptimizer[ode]: 19 20:11:58 0.4973
NEBOptimizer[ode]: 20 20:11:59 0.3426
NEBOptimizer[ode]: 21 20:12:01 0.3116
NEBOptimizer[ode]: 22 20:12:03 0.2428
NEBOptimizer[ode]: 23 20:12:05 0.2772
NEBOptimizer[ode]: 24 20:12:08 0.2159
NEBOptimizer[ode]: 25 20:12:10 0.1963
NEBOptimizer[ode]: 26 20:12:12 0.1785
NEBOptimizer[ode]: 27 20:12:14 0.2092
NEBOptimizer[ode]: 28 20:12:17 0.1594
NEBOptimizer[ode]: 29 20:12:19 0.1565
NEBOptimizer[ode]: 30 20:12:21 0.1448
NEBOptimizer[ode]: 31 20:12:23 0.1311
NEBOptimizer[ode]: 32 20:12:27 0.2208
NEBOptimizer[ode]: 33 20:12:28 0.1379
NEBOptimizer[ode]: 34 20:12:30 0.1365
NEBOptimizer[ode]: 35 20:12:32 0.1354
NEBOptimizer[ode]: 36 20:12:34 0.1321
NEBOptimizer[ode]: 37 20:12:36 0.1252
NEBOptimizer[ode]: 38 20:12:39 0.2157
NEBOptimizer[ode]: 39 20:12:41 0.1208
NEBOptimizer[ode]: 40 20:12:43 0.1208
NEBOptimizer[ode]: 41 20:12:45 0.1206
NEBOptimizer[ode]: 42 20:12:46 0.1183
NEBOptimizer[ode]: 43 20:12:48 0.1046
NEBOptimizer[ode]: 44 20:12:52 0.1226
NEBOptimizer[ode]: 45 20:12:54 0.0916
[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.