.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "examples/zbl/dimers.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_examples_zbl_dimers.py: Training a model with ZBL corrections ===================================== This tutorial demonstrates how to train a model with ZBL corrections. The training set for this example consists of a subset of the ethanol moleculs from the `rMD17 dataset `_. The models are trained using the following training options, respectively: .. literalinclude:: options_no_zbl.yaml :language: yaml .. literalinclude:: options_zbl.yaml :language: yaml As you can see, they are identical, except for the ``zbl`` key in the ``model`` section. You can train the same models yourself with .. literalinclude:: train.sh :language: bash A detailed step-by-step introduction on how to train a model is provided in the :ref:`label_basic_usage` tutorial. .. GENERATED FROM PYTHON SOURCE LINES 31-33 First, we start by importing the necessary libraries, including the integration of ASE calculators for metatensor atomistic models. .. GENERATED FROM PYTHON SOURCE LINES 34-42 .. code-block:: Python import ase import matplotlib.pyplot as plt import numpy as np import torch from metatensor.torch.atomistic.ase_calculator import MetatensorCalculator .. GENERATED FROM PYTHON SOURCE LINES 43-49 Setting up the dimers --------------------- We set up a series of dimers with different atom pairs and distances. We will calculate the energies of these dimers using the models trained with and without ZBL corrections. .. GENERATED FROM PYTHON SOURCE LINES 50-63 .. code-block:: Python distances = np.linspace(0.5, 6.0, 200) pairs = {} for pair in [("H", "H"), ("H", "C"), ("C", "C"), ("C", "O"), ("O", "O"), ("H", "O")]: structures = [] for distance in distances: atoms = ase.Atoms( symbols=[pair[0], pair[1]], positions=[[0, 0, 0], [0, 0, distance]], ) structures.append(atoms) pairs[pair] = structures .. GENERATED FROM PYTHON SOURCE LINES 64-65 We now load the two exported models, one with and one without ZBL corrections .. GENERATED FROM PYTHON SOURCE LINES 66-73 .. code-block:: Python calc_no_zbl = MetatensorCalculator( "model_no_zbl.pt", extensions_directory="extensions/" ) calc_zbl = MetatensorCalculator("model_zbl.pt", extensions_directory="extensions/") .. rst-class:: sphx-glr-script-out .. code-block:: none the model suggested to use CUDA devices before CPU, but we are unable to find it the model suggested to use CUDA devices before CPU, but we are unable to find it .. GENERATED FROM PYTHON SOURCE LINES 74-79 Calculate and plot energies without ZBL --------------------------------------- We calculate the energies of the dimer curves for each pair of atoms and plot the results, using the non-ZBL-corrected model. .. GENERATED FROM PYTHON SOURCE LINES 80-96 .. code-block:: Python for pair, structures_for_pair in pairs.items(): energies = [] for atoms in structures_for_pair: atoms.set_calculator(calc_no_zbl) with torch.jit.optimized_execution(False): energies.append(atoms.get_potential_energy()) energies = np.array(energies) - energies[-1] plt.plot(distances, energies, label=f"{pair[0]}-{pair[1]}") plt.title("Dimer curves - no ZBL") plt.xlabel("Distance (Å)") plt.ylabel("Energy (eV)") plt.legend() plt.tight_layout() plt.show() .. image-sg:: /examples/zbl/images/sphx_glr_dimers_001.png :alt: Dimer curves - no ZBL :srcset: /examples/zbl/images/sphx_glr_dimers_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none /home/runner/work/metatrain/metatrain/examples/zbl/dimers.py:84: FutureWarning: Please use atoms.calc = calc atoms.set_calculator(calc_no_zbl) .. GENERATED FROM PYTHON SOURCE LINES 97-101 Calculate and plot energies from the ZBL-corrected model -------------------------------------------------------- We repeat the same procedure as above, but this time with the ZBL-corrected model. .. GENERATED FROM PYTHON SOURCE LINES 102-118 .. code-block:: Python for pair, structures_for_pair in pairs.items(): energies = [] for atoms in structures_for_pair: atoms.set_calculator(calc_zbl) with torch.jit.optimized_execution(False): energies.append(atoms.get_potential_energy()) energies = np.array(energies) - energies[-1] plt.plot(distances, energies, label=f"{pair[0]}-{pair[1]}") plt.title("Dimer curves - with ZBL") plt.xlabel("Distance (Å)") plt.ylabel("Energy (eV)") plt.legend() plt.tight_layout() plt.show() .. image-sg:: /examples/zbl/images/sphx_glr_dimers_002.png :alt: Dimer curves - with ZBL :srcset: /examples/zbl/images/sphx_glr_dimers_002.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none /home/runner/work/metatrain/metatrain/examples/zbl/dimers.py:106: FutureWarning: Please use atoms.calc = calc atoms.set_calculator(calc_zbl) .. GENERATED FROM PYTHON SOURCE LINES 119-125 It can be seen that all the dimer curves include a strong repulsion at short distances, which is due to the ZBL contribution. Even the H-H dimer, whose ZBL correction is very weak due to the small covalent radii of hydrogen, would show a strong repulsion closer to the origin (here, we only plotted starting from a distance of 0.5 Å). Let's zoom in on the H-H dimer to see this effect more clearly. .. GENERATED FROM PYTHON SOURCE LINES 126-149 .. code-block:: Python new_distances = np.linspace(0.1, 2.0, 200) structures = [] for distance in new_distances: atoms = ase.Atoms( symbols=["H", "H"], positions=[[0, 0, 0], [0, 0, distance]], ) structures.append(atoms) for atoms in structures: atoms.set_calculator(calc_zbl) with torch.jit.optimized_execution(False): energies = [atoms.get_potential_energy() for atoms in structures] energies = np.array(energies) - energies[-1] plt.plot(new_distances, energies, label="H-H") plt.title("Dimer curve - H-H with ZBL") plt.xlabel("Distance (Å)") plt.ylabel("Energy (eV)") plt.legend() plt.tight_layout() plt.show() .. image-sg:: /examples/zbl/images/sphx_glr_dimers_003.png :alt: Dimer curve - H-H with ZBL :srcset: /examples/zbl/images/sphx_glr_dimers_003.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none /home/runner/work/metatrain/metatrain/examples/zbl/dimers.py:138: FutureWarning: Please use atoms.calc = calc atoms.set_calculator(calc_zbl) .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 55.516 seconds) .. _sphx_glr_download_examples_zbl_dimers.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: dimers.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: dimers.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: dimers.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_