{ "cells": [ { "cell_type": "markdown", "id": "acec51eb", "metadata": {}, "source": [ "# DFT-D3 dispersion, block by block: reproducing the reference `simple-dftd3` with `xnn`\n", "\n", "[DFT-D3 (Grimme, Antony, Ehrlich & Krieg, *J. Chem. Phys.* **132**, 154104, 2010)](https://doi.org/10.1063/1.3382344)\n", "made the dispersion correction *geometry dependent*: TD-DFT reference $C_6$\n", "coefficients of several reference systems per element are interpolated in a\n", "fractional coordination number (eqs 15–16), $C_8$ follows from the $C_6$ (eqs 6, 9),\n", "and a damped pairwise sum (eqs 3–4) plus an optional Axilrod–Teller–Muto three-body\n", "term (eqs 11–14) gives the dispersion energy. The [BJ variant (Grimme, Ehrlich &\n", "Goerigk, *J. Comput. Chem.* **32**, 1456, 2011)](https://doi.org/10.1002/jcc.21759)\n", "replaced the zero damping by rational damping to a finite short-range value.\n", "\n", "In xnn this is `xnn.common.models.D3Dispersion`, a **model-agnostic add-on** that\n", "stands alone as the model `\"d3\"` or wraps any short-range model\n", "(`extra: {dispersion: {name: d3, ...}}`), sharing its cutoff, weighting, three-body and\n", "deployment machinery with the D4 add-on (`xnn.common.models.dispersion`). The\n", "implementation is an independent one written from the two papers; this notebook checks\n", "every block against the **reference implementation**\n", "[`simple-dftd3`](https://github.com/dftd3/simple-dftd3) (v1.6.0, through its Python\n", "package `dftd3`), for all four damping functions it offers.\n", "\n", "**Reference code.** xnn does not copy, vendor, link or import any of `simple-dftd3`'s\n", "code; the package is used here purely as an external oracle. The reference *data* of the\n", "method (TD-DFT $C_6$ coefficients, reference CNs, pair cutoff radii) are numerical values\n", "extracted from the published sources by `tools/build_d3_reference.py`. Unlike the `dftd4`\n", "wheel, this package has no OpenMP clash with `torch`, but we keep the same import order\n", "out of habit.\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "98e57413", "metadata": { "execution": { "iopub.execute_input": "2026-09-23T20:06:34.986198Z", "iopub.status.busy": "2026-09-23T20:06:34.986087Z", "iopub.status.idle": "2026-09-23T20:06:37.349836Z", "shell.execute_reply": "2026-09-23T20:06:37.349035Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "xnn: 0.2.1 | simple-dftd3 (reference) 1.6.0\n", "PBE0-D3(BJ): {'s6': 1.0, 's8': 1.2177, 'a1': 0.4145, 'a2': 4.8593, 's9': 0.0, 'alp': 14.0} \n", "PBE0-D3(0): {'s6': 1.0, 's8': 0.928, 'rs6': 1.287, 'rs8': 1.0, 's9': 0.0, 'alp': 14.0}\n" ] } ], "source": [ "import numpy as np\n", "from dftd3.interface import (DispersionModel, RationalDampingParam, ZeroDampingParam,\n", " ModifiedZeroDampingParam, OptimizedPowerDampingParam)\n", "\n", "import logging, warnings\n", "logging.disable(logging.WARNING)\n", "warnings.filterwarnings(\"ignore\")\n", "\n", "import torch\n", "import matplotlib.pyplot as plt\n", "from ase import Atoms\n", "from ase.build import molecule, bulk\n", "\n", "torch.set_default_dtype(torch.float64)\n", "\n", "import xnn\n", "from xnn.common.data import structure_to_graph, collate\n", "from xnn.common.models import D3Dispersion, DFTD3, ForceStressOutput\n", "from xnn.common.models.d3 import PBE0_D3BJ, PBE0_D3ZERO\n", "from xnn.common.models.dispersion import BOHR, HARTREE\n", "\n", "print(\"xnn:\", xnn.__version__, \"| simple-dftd3 (reference) 1.6.0\")\n", "print(\"PBE0-D3(BJ):\", PBE0_D3BJ, \"\\nPBE0-D3(0): \", PBE0_D3ZERO)\n" ] }, { "cell_type": "markdown", "id": "fe088b66", "metadata": {}, "source": [ "## Helpers\n", "\n", "Both codes are driven in **atomic units**. `simple-dftd3` reports the gradient and the\n", "strain derivative (its \"virial\"); xnn gives forces and the stress\n", "$\\sigma = V^{-1}\\,\\partial E/\\partial\\epsilon$. The damping-parameter sets below are the\n", "PBE0 entries of the two papers (BJ: 2011 table 2; zero: 2010 table IV) and, for the\n", "modified-zero and optimized-power variants, the PBE0 sets of the reference code.\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "44f232d2", "metadata": { "execution": { "iopub.execute_input": "2026-09-23T20:06:37.351552Z", "iopub.status.busy": "2026-09-23T20:06:37.351461Z", "iopub.status.idle": "2026-09-23T20:06:37.358577Z", "shell.execute_reply": "2026-09-23T20:06:37.358006Z" } }, "outputs": [], "source": [ "# (damping, upstream parameter object, xnn options)\n", "VARIANTS = {\n", " \"BJ (rational)\": (\"bj\", RationalDampingParam(s6=1.0, s8=1.2177, s9=1.0, a1=0.4145, a2=4.8593, alp=14.0),\n", " dict(s9=1.0)),\n", " \"zero\": (\"zero\", ZeroDampingParam(s6=1.0, s8=0.928, s9=1.0, rs6=1.287, rs8=1.0, alp=14.0),\n", " dict(s9=1.0)),\n", " \"modified zero\": (\"mzero\", ModifiedZeroDampingParam(s6=1.0, s8=0.000081, s9=1.0, rs6=2.077949, rs8=1.0, alp=14.0, bet=0.116755),\n", " dict(s8=0.000081, rs6=2.077949, bet=0.116755, s9=1.0)),\n", " \"optimized power\": (\"op\", OptimizedPowerDampingParam(s6=0.8829, s8=0.0, s9=1.0, a1=0.150, a2=4.750, alp=14.0, bet=6.0),\n", " dict(s6=0.8829, s8=0.0, a1=0.150, a2=4.750, bet=6.0, s9=1.0)),\n", "}\n", "\n", "def reference(atoms, param, cutoffs=None):\n", " periodic = bool(atoms.pbc.any())\n", " m = DispersionModel(atoms.numbers, atoms.positions / BOHR,\n", " lattice=atoms.cell[:] / BOHR if periodic else None,\n", " periodic=np.array(atoms.pbc) if periodic else None)\n", " if cutoffs:\n", " m.set_realspace_cutoff(**cutoffs)\n", " return m.get_dispersion(param, grad=True)\n", "\n", "def xnn_d3(atoms, model=None, **options):\n", " model = model or D3Dispersion(**options)\n", " s = {\"pos\": atoms.positions, \"atomic_numbers\": atoms.numbers}\n", " if atoms.pbc.any():\n", " s[\"cell\"], s[\"pbc\"] = atoms.cell[:], atoms.pbc\n", " graph = structure_to_graph(s, model.cutoff)\n", " out = ForceStressOutput(model, compute_stress=bool(atoms.pbc.any()))(graph)\n", " out = {k: v.detach() for k, v in out.items()}\n", " out[\"energy_au\"] = float(out[\"energy\"]) / HARTREE\n", " out[\"gradient_au\"] = -out[\"forces\"].numpy() / HARTREE * BOHR\n", " if atoms.pbc.any():\n", " out[\"virial_au\"] = out[\"stress\"][0].numpy() / HARTREE * BOHR**3 * (atoms.get_volume() / BOHR**3)\n", " return out\n", "\n", "def report(systems, variant):\n", " damping, param, opts = VARIANTS[variant]\n", " print(f\"--- {variant} ---\")\n", " print(f\"{'system':26s} {'N':>3s} {'E [Eh]':>18s} {'|dE| [Eh]':>10s} {'|dgrad|':>9s} {'|dvirial|':>10s}\")\n", " for name, atoms in systems.items():\n", " ref, mine = reference(atoms, param), xnn_d3(atoms, damping=damping, **opts)\n", " dvir = np.abs(mine[\"virial_au\"] - ref[\"virial\"]).max() if atoms.pbc.any() else float(\"nan\")\n", " print(f\"{name:26s} {len(atoms):3d} {float(ref['energy']):18.12e} {abs(mine['energy_au'] - float(ref['energy'])):10.1e} \"\n", " f\"{np.abs(mine['gradient_au'] - ref['gradient']).max():9.1e} {dvir:10.1e}\")\n" ] }, { "cell_type": "markdown", "id": "33d6e407", "metadata": {}, "source": [ "## Block 1: Coordination numbers and the CN-dependent $C_6$ · eqs 15–16\n", "\n", "The exponential counting function with $k_1 = 16$ and the 4/3-scaled covalent radii,\n", "and the Gaussian interpolation ($k_3 = 4$) over the reference systems. The reference\n", "code exposes neither CN nor $C_6$ directly, so this block checks xnn against the\n", "paper's published numbers: the free-atom rare-gas $C_6$ and the sp³/sp²/sp carbon\n", "values of table II, and the shape of fig 5 (the $C_6^{CC}$, $C_6^{NN}$, $C_6^{OO}$\n", "curves vs CN, from ~49 to ~18 for carbon).\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "c77326f5", "metadata": { "execution": { "iopub.execute_input": "2026-09-23T20:06:37.360313Z", "iopub.status.busy": "2026-09-23T20:06:37.360245Z", "iopub.status.idle": "2026-09-23T20:06:37.647271Z", "shell.execute_reply": "2026-09-23T20:06:37.646547Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pair paper table II (TDDFT) xnn reference table\n", "He-He 1.54 1.56\n", "Ne-Ne 6.14 6.29\n", "Ar-Ar 64.20 64.65\n", "Kr-Kr 129.70 130.40\n", "Xe-Xe 288.60 290.22\n", "Rn-Rn 410.50 412.83\n", "C-C (sp3) paper 18.1 xnn 18.21 (reference CN 3.9844)\n", "C-C (sp2) paper 25.7 xnn 25.78 (reference CN 2.9987)\n", "C-C (sp) paper 29.3 xnn 29.36 (reference CN 1.9985)\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "core = DFTD3()\n", "table2 = {\"He-He\": (2, 2, 1.54), \"Ne-Ne\": (10, 10, 6.14), \"Ar-Ar\": (18, 18, 64.2), \"Kr-Kr\": (36, 36, 129.7),\n", " \"Xe-Xe\": (54, 54, 288.6), \"Rn-Rn\": (86, 86, 410.5)}\n", "print(f\"{'pair':8s} {'paper table II (TDDFT)':>24s} {'xnn reference table':>20s}\")\n", "for name, (zi, zj, val) in table2.items():\n", " print(f\"{name:8s} {val:24.2f} {float(core.c6ref[0, 0, zi, zj]):20.2f}\")\n", "# carbon in ethane (CN ~4, ref 5), ethene (CN ~3, ref 4), ethyne (CN ~2, ref 3): table II gives 18.1 / 25.7 / 29.3\n", "for label, ref_idx, val in [(\"C-C (sp3)\", 4, 18.1), (\"C-C (sp2)\", 3, 25.7), (\"C-C (sp)\", 2, 29.3)]:\n", " print(f\"{label:10s} paper {val:6.1f} xnn {float(core.c6ref[ref_idx, ref_idx, 6, 6]):6.2f} (reference CN {float(core.refcn[ref_idx, 6]):.4f})\")\n", "\n", "cn = torch.linspace(0.0, 5.0, 201)\n", "fig, ax = plt.subplots(figsize=(5.8, 3.6))\n", "for Z, name, style in [(6, \"carbon\", \"-\"), (7, \"nitrogen\", \"--\"), (8, \"oxygen\", \"-.\")]:\n", " z = torch.full((201,), Z, dtype=torch.long)\n", " w = core.reference_weights(z, cn)\n", " c6 = core.c6_matrix(z, w, core._species_vectors(z, w)).diagonal()\n", " ax.plot(cn.numpy(), c6.numpy(), \"k\", ls=style, label=name)\n", "ax.set_xlabel(\"CN\"); ax.set_ylabel(r\"$C_6^{AA}$ [au]\"); ax.set_ylim(0, 50); ax.legend(); ax.set_title(\"2010 paper, fig 5: C6 vs coordination number\")\n", "plt.tight_layout(); plt.show()\n" ] }, { "cell_type": "markdown", "id": "3c4ed15c", "metadata": {}, "source": [ "## Block 2: Two-body energies for the four damping functions · 2010 eq 4, 2011 eq 5\n", "\n", "Energies, gradients and (for periodic systems) virials against `s-dftd3` for molecules\n", "of increasing size, with the ATM term switched **on** ($s_9 = 1$) so that the\n", "three-body block is exercised at the same time. The zero and modified-zero variants\n", "use the tabulated pair cutoff radii $R_0^{AB}$ (sec II.D), BJ and optimized power the\n", "$C_8/C_6$ radii of 2011 eq 7.\n" ] }, { "cell_type": "code", "execution_count": 4, "id": "13d181aa", "metadata": { "execution": { "iopub.execute_input": "2026-09-23T20:06:37.648960Z", "iopub.status.busy": "2026-09-23T20:06:37.648890Z", "iopub.status.idle": "2026-09-23T20:06:38.366388Z", "shell.execute_reply": "2026-09-23T20:06:38.365835Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- BJ (rational) ---\n", "system N E [Eh] |dE| [Eh] |dgrad| |dvirial|\n", "H2O 3 -2.768882466396e-04 1.1e-19 1.7e-20 nan\n", "NH3 4 -5.886073790842e-04 4.3e-19 2.7e-20 nan\n", "C6H6 12 -9.349028322112e-03 3.5e-18 9.2e-19 nan\n", "CH3CH2OH 9 -3.458363342132e-03 4.3e-19 4.7e-20 nan\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "C60 60 -1.647438695262e-01 8.3e-17 9.3e-18 nan\n", "--- zero ---\n", "system N E [Eh] |dE| [Eh] |dgrad| |dvirial|\n", "H2O 3 -4.644341818395e-06 0.0e+00 1.7e-21 nan\n", "NH3 4 -2.108709186781e-05 1.7e-20 3.4e-20 nan\n", "C6H6 12 -3.102992576496e-03 4.3e-19 2.7e-19 nan\n", "CH3CH2OH 9 -1.867384951417e-03 8.7e-19 7.0e-19 nan\n", "C60 60 -6.769570637220e-02 2.8e-17 4.3e-18 nan\n", "--- modified zero ---\n", "system N E [Eh] |dE| [Eh] |dgrad| |dvirial|\n", "H2O 3 -3.506926280896e-04 1.6e-19 2.4e-19 nan\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "NH3 4 -9.826380693574e-04 1.3e-18 6.2e-19 nan\n", "C6H6 12 -2.242281655191e-02 3.5e-18 2.0e-18 nan\n", "CH3CH2OH 9 -5.737490760271e-03 1.7e-18 5.4e-19 nan\n", "C60 60 -3.349665585052e-01 5.6e-17 2.2e-17 nan\n", "--- optimized power ---\n", "system N E [Eh] |dE| [Eh] |dgrad| |dvirial|\n", "H2O 3 -4.081700350218e-06 1.7e-21 3.4e-21 nan\n", "NH3 4 -1.667097267658e-05 6.8e-21 1.7e-20 nan\n", "C6H6 12 -4.940350244912e-03 0.0e+00 3.3e-19 nan\n", "CH3CH2OH 9 -1.323450154247e-03 2.2e-19 1.9e-19 nan\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "C60 60 -1.172030560151e-01 1.4e-17 6.5e-18 nan\n" ] } ], "source": [ "molecules = {\"H2O\": molecule(\"H2O\"), \"NH3\": molecule(\"NH3\"), \"C6H6\": molecule(\"C6H6\"),\n", " \"CH3CH2OH\": molecule(\"CH3CH2OH\"), \"C60\": molecule(\"C60\")}\n", "for variant in VARIANTS:\n", " report(molecules, variant)\n" ] }, { "cell_type": "markdown", "id": "7a53ab93", "metadata": {}, "source": [ "## Block 3: Three-body term and periodic systems · eqs 11–14\n", "\n", "The ATM term with zero damping on the 4/3-scaled pair radii and exponent $\\alpha_6 + 2$;\n", "switching it off must give exactly the two-body energy in both codes. Crystals\n", "exercise the lattice sums of both terms (the primitive rocksalt and diamond cells, a\n", "sheared silicon cell, graphite and a small periodic water box).\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "fc178af1", "metadata": { "execution": { "iopub.execute_input": "2026-09-23T20:06:38.367647Z", "iopub.status.busy": "2026-09-23T20:06:38.367573Z", "iopub.status.idle": "2026-09-23T20:06:59.815722Z", "shell.execute_reply": "2026-09-23T20:06:59.815009Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "C60 BJ (rational) : E2 s-dftd3 -1.693070178143e-01 xnn -1.693070178143e-01 |diff| 8.3e-17; E3 (xnn) = +4.5631e-03 Eh = 2.7 % of |E2|\n", "C60 zero : E2 s-dftd3 -7.225885466028e-02 xnn -7.225885466028e-02 |diff| 4.2e-17; E3 (xnn) = +4.5631e-03 Eh = 6.3 % of |E2|\n", "--- BJ (rational) ---\n", "system N E [Eh] |dE| [Eh] |dgrad| |dvirial|\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "NaCl rocksalt 2 -1.602844766437e-02 1.4e-17 1.9e-18 5.6e-16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Si diamond 2 -2.370652536860e-02 1.6e-16 1.9e-18 6.6e-16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Si sheared cell 2 -2.292151017203e-02 1.4e-16 8.7e-17 8.6e-16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "graphite 4 -2.104076546597e-02 1.5e-16 2.1e-18 2.0e-15\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "water box (9 atoms) 9 -3.527900647406e-03 9.5e-18 2.7e-19 5.7e-17\n", "--- zero ---\n", "system N E [Eh] |dE| [Eh] |dgrad| |dvirial|\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "NaCl rocksalt 2 -1.599866534278e-02 1.3e-16 7.4e-19 8.3e-16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Si diamond 2 -1.093548871998e-02 2.2e-16 1.3e-18 5.8e-16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Si sheared cell 2 -1.084858974641e-02 6.8e-17 4.2e-17 3.1e-16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "graphite 4 -1.276917484344e-02 1.3e-16 1.6e-18 2.2e-15\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "water box (9 atoms) 9 -3.429606773670e-03 2.2e-18 1.1e-18 6.8e-17\n" ] } ], "source": [ "c60 = molecule(\"C60\")\n", "for variant in (\"BJ (rational)\", \"zero\"):\n", " damping, param, opts = VARIANTS[variant]\n", " p_off = (RationalDampingParam if damping == \"bj\" else ZeroDampingParam)\n", " kw = dict(s6=1.0, s9=0.0, alp=14.0, **({\"s8\": 1.2177, \"a1\": 0.4145, \"a2\": 4.8593} if damping == \"bj\" else {\"s8\": 0.928, \"rs6\": 1.287, \"rs8\": 1.0}))\n", " e_two_ref = float(reference(c60, p_off(**kw))[\"energy\"])\n", " mine = xnn_d3(c60, damping=damping, s9=1.0)\n", " print(f\"C60 {variant:14s}: E2 s-dftd3 {e_two_ref:.12e} xnn {float(mine['energy_2body']) / HARTREE:.12e} |diff| {abs(float(mine['energy_2body']) / HARTREE - e_two_ref):.1e}; \"\n", " f\"E3 (xnn) = {float(mine['energy_3body']) / HARTREE:+.4e} Eh = {abs(float(mine['energy_3body']) / float(mine['energy_2body'])) * 100:.1f} % of |E2|\")\n", "\n", "from ase.lattice.hexagonal import Graphite\n", "rng = np.random.default_rng(0)\n", "box = Atoms(cell=[6.2] * 3, pbc=True)\n", "for _ in range(3):\n", " w = molecule(\"H2O\"); w.rotate(rng.uniform(0, 360), rng.normal(size=3)); w.translate(rng.uniform(0, 6.2, 3)); box += w\n", "sheared = bulk(\"Si\", \"diamond\", a=5.43); c = sheared.cell[:].copy(); c[1, 0] += 0.5; sheared.set_cell(c, scale_atoms=False)\n", "crystals = {\"NaCl rocksalt\": bulk(\"NaCl\", \"rocksalt\", a=5.64), \"Si diamond\": bulk(\"Si\", \"diamond\", a=5.43),\n", " \"Si sheared cell\": sheared, \"graphite\": Graphite(\"C\", latticeconstant={\"a\": 2.46, \"c\": 6.70}),\n", " \"water box (9 atoms)\": box}\n", "for variant in (\"BJ (rational)\", \"zero\"):\n", " report(crystals, variant)\n" ] }, { "cell_type": "markdown", "id": "7a46ccb5", "metadata": {}, "source": [ "## Block 4: Heavy elements, matching cutoffs, switching windows\n", "\n", "The reference table in xnn is the reference code's, including the simple-dftd3 1.1.0 references\n", "for Fr–Lr (Grimme's original 2010 tables end at Pu with fewer references; xnn keeps\n", "them too as `references=\"2010\"`, the PhysNet/BAMBOO default); UF₆ probes it. Both\n", "codes accept shorter real-space cutoffs and agree with matching values. xnn's quintic\n", "switching windows (`switch_width_pair`, `switch_width_triple`) are a deliberate\n", "extension, off by default, that keeps energy and forces continuous under a finite\n", "cutoff in MD.\n" ] }, { "cell_type": "code", "execution_count": 6, "id": "8cb0389c", "metadata": { "execution": { "iopub.execute_input": "2026-09-23T20:06:59.817524Z", "iopub.status.busy": "2026-09-23T20:06:59.817431Z", "iopub.status.idle": "2026-09-23T20:07:00.497594Z", "shell.execute_reply": "2026-09-23T20:07:00.496977Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--- BJ (rational) ---\n", "system N E [Eh] |dE| [Eh] |dgrad| |dvirial|\n", "UF6 (Z = 92) 7 -4.181076237797e-03 8.7e-19 4.1e-20 nan\n", "PbH4 dimer (Z = 82) 10 -6.511533839911e-03 4.3e-18 1.1e-19 nan\n", "\n", "cutoffs 12/9/10 bohr: dftd3 -9.919164262520e-03 xnn -9.919164262520e-03 |diff| 1.7e-18 Eh\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "damping, param, opts = VARIANTS[\"BJ (rational)\"]\n", "uf6 = Atoms(\"UF6\", positions=[[0, 0, 0], [2, 0, 0], [-2, 0, 0], [0, 2, 0], [0, -2, 0], [0, 0, 2], [0, 0, -2]])\n", "pbh4 = Atoms(\"PbH4PbH4\", positions=np.concatenate([molecule(\"SiH4\").positions, molecule(\"SiH4\").positions + [4.0, 0, 0]]))\n", "report({\"UF6 (Z = 92)\": uf6, \"PbH4 dimer (Z = 82)\": pbh4}, \"BJ (rational)\")\n", "\n", "cluster = molecule(\"CH3CH2OH\") + molecule(\"CH3CH2OH\"); cluster.positions[9:] += [4.0, 0.5, 0.3]\n", "ref = reference(cluster, param, cutoffs=dict(disp2=12.0, disp3=9.0, cn=10.0))\n", "mine = xnn_d3(cluster, damping=\"bj\", s9=1.0, cutoff_pair=12 * BOHR, cutoff_triple=9 * BOHR, cutoff_cn=10 * BOHR)\n", "print(f\"\\ncutoffs 12/9/10 bohr: dftd3 {float(ref['energy']):.12e} xnn {mine['energy_au']:.12e} |diff| {abs(mine['energy_au'] - float(ref['energy'])):.1e} Eh\")\n", "\n", "d = np.linspace(7.0, 9.0, 81)\n", "sharp = D3Dispersion(cutoff_pair=8.0, cutoff_cn=8.0, cutoff_triple=8.0)\n", "smooth = D3Dispersion(cutoff_pair=8.0, switch_width_pair=1.5, cutoff_cn=8.0, cutoff_triple=8.0)\n", "E = {m: [float(xnn_d3(Atoms(\"Ar2\", positions=[[0, 0, 0], [x, 0, 0]]), model=mod)[\"energy\"]) * 1e3 for x in d]\n", " for m, mod in [(\"sharp cutoff (upstream)\", sharp), (\"1.5 Å switching window\", smooth)]}\n", "plt.figure(figsize=(5.5, 3.2))\n", "for k, v in E.items(): plt.plot(d, v, label=k)\n", "plt.axvline(8.0, color=\"k\", ls=\":\", lw=0.8); plt.xlabel(\"Ar–Ar distance [Å]\"); plt.ylabel(\"E_disp [meV]\"); plt.legend(); plt.title(\"pair cutoff at 8 Å\"); plt.tight_layout(); plt.show()\n" ] }, { "cell_type": "markdown", "id": "9ad30806", "metadata": {}, "source": [ "## Block 5: One implementation, every channel\n", "\n", "The same `DFTD3` module serves the batched `AtomicGraph` path (training), the scripted\n", "whole-system and pair-style ABIs (`TorchScriptPotential`, LAMMPS) and the ASE\n", "calculator; and it wraps a short-range model without touching that model's own\n", "neighborhood.\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "87912645", "metadata": { "execution": { "iopub.execute_input": "2026-09-23T20:07:00.499526Z", "iopub.status.busy": "2026-09-23T20:07:00.499427Z", "iopub.status.idle": "2026-09-23T20:07:01.427442Z", "shell.execute_reply": "2026-09-23T20:07:01.426798Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "eager -0.254400020697171 eV\n", "TorchScript -0.254400020697171 eV |dF| = 0.0e+00\n", "pair-style ABI -0.254400020697171 eV\n", "ASE calculator -0.254400020697171 eV\n", "batch vs single |dE| = 0.0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "MACE+D3: cutoff 12.0 Å, E = E_sr + E_disp: 6.322566 = 6.576966 + -0.254400 (|E_sr - MACE alone| = 0.0e+00)\n" ] } ], "source": [ "from xnn.common.config import from_dict\n", "from xnn.common.data import build_neighbor_list\n", "from xnn.common.deploy import TorchScriptPotential, XNNCalculator\n", "from xnn.common.models import build_model\n", "\n", "atoms = molecule(\"C6H6\")\n", "d3 = D3Dispersion(s9=1.0, cutoff_pair=12.0, cutoff_triple=9.0, cutoff_cn=10.0)\n", "eager = xnn_d3(atoms, model=d3)\n", "scripted = torch.jit.script(TorchScriptPotential(d3, d3.cutoff).eval())\n", "ts = scripted(torch.tensor(atoms.positions), torch.tensor(atoms.numbers))\n", "ei, cs = build_neighbor_list(torch.tensor(atoms.positions), d3.cutoff)\n", "ts_pair = scripted.forward_lammps(torch.tensor(atoms.positions), ei, cs, torch.tensor(atoms.numbers), torch.zeros(3, 3))\n", "atoms.calc = XNNCalculator(ForceStressOutput(d3), cutoff=d3.cutoff)\n", "print(f\"eager {float(eager['energy']):.15f} eV\")\n", "print(f\"TorchScript {float(ts['energy']):.15f} eV |dF| = {float((ts['forces'] - eager['forces']).abs().max()):.1e}\")\n", "print(f\"pair-style ABI {float(ts_pair['energy']):.15f} eV\")\n", "print(f\"ASE calculator {atoms.get_potential_energy():.15f} eV\")\n", "\n", "graphs = [structure_to_graph({\"pos\": molecule(n).positions, \"atomic_numbers\": molecule(n).numbers}, d3.cutoff) for n in (\"H2O\", \"CH4\", \"C6H6\")]\n", "print(\"batch vs single |dE| =\", float((d3(collate(graphs))[\"energy\"] - torch.stack([d3(g)[\"energy\"][0] for g in graphs])).abs().max()))\n", "\n", "cfg = from_dict({\"model\": {\"name\": \"mace\", \"cutoff\": 4.5, \"n_interactions\": 1, \"n_rbf\": 6, \"n_features\": 8,\n", " \"extra\": {\"species\": [1, 6], \"l_max\": 2,\n", " \"dispersion\": {\"name\": \"d3\", \"s9\": 1.0, \"cutoff_pair\": 12.0, \"cutoff_triple\": 9.0, \"cutoff_cn\": 10.0}}}})\n", "torch.manual_seed(0)\n", "wrapped = build_model(cfg.model)\n", "out = wrapped(structure_to_graph({\"pos\": atoms.positions, \"atomic_numbers\": atoms.numbers}, wrapped.cutoff))\n", "core_only = wrapped.model(structure_to_graph({\"pos\": atoms.positions, \"atomic_numbers\": atoms.numbers}, 4.5))\n", "print(f\"MACE+D3: cutoff {wrapped.cutoff} Å, E = E_sr + E_disp: {float(out['energy']):.6f} = {float(core_only['energy']):.6f} + {float(out['energy_disp']):.6f} (|E_sr - MACE alone| = {abs(float(out['energy_sr']) - float(core_only['energy'])):.1e})\")\n" ] }, { "cell_type": "markdown", "id": "646f7e98", "metadata": {}, "source": [ "## Summary\n", "\n", "| block | quantity | xnn vs `s-dftd3` |\n", "|---|---|---|\n", "| 1 | reference C6 and CN interpolation | reproduces table II / fig 5 of the 2010 paper |\n", "| 2 | two-body + ATM energies and gradients, four damping functions, up to C60 | ~1e-17 Eh, ~1e-17 Eh/bohr |\n", "| 3 | periodic energies, gradients, virials (BJ and zero) | ~1e-17 |\n", "| 4 | actinide references, matching shorter cutoffs | ~1e-17 Eh |\n", "| 5 | eager / TorchScript / pair-style / ASE / batch | identical |\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.12" } }, "nbformat": 4, "nbformat_minor": 5 }