EricBoi's picture
Deploy the app
9d75f8c verified
Raw History Blame Contribute Delete
7.2 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script>
// a copy of this page cached from before a deploy asks for bundles the deploy removed: reload once (src/app/boot.ts)
addEventListener('error', (e) => {
const u = e.target && (e.target.src || e.target.href);
if (!u || !/\/assets\//.test(u)) return;
try { if (sessionStorage.getItem('mlipviz-stale')) return; sessionStorage.setItem('mlipviz-stale', '1'); } catch (_) { return; }
location.reload();
}, true);
</script>
<title>MLIP Dynamics</title>
<meta name="description" content="Molecular dynamics (NVE) and diffusion Monte Carlo with machine-learning interatomic potentials, in your browser." />
<script>
// the saved theme (or the system's), before the first paint; see src/viz/theme.ts
try { const t = localStorage.getItem('mlipviz-theme'); document.documentElement.dataset.theme = t === 'light' || t === 'dark' ? t : matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark'; } catch (e) {}
</script>
<script type="module" crossorigin src="./assets/md-CwURKBHq.js"></script>
<link rel="modulepreload" crossorigin href="./assets/xyz-BkjxBniX.js">
<link rel="stylesheet" crossorigin href="./assets/xyz-CMSHb8Wz.css">
<link rel="stylesheet" crossorigin href="./assets/md-D-QfxpVl.css">
</head>
<body class="md mode-md">
<header>
<a class="brand" href="./" title="Back to the network visualiser">MLIP<span>viz</span></a>
<nav id="modes" title="What to run">
<button data-mode="md" class="on" title="Classical molecular dynamics at constant energy">NVE dynamics</button>
<button data-mode="dmc" title="Diffusion Monte Carlo: the quantum vibrational ground state">Diffusion Monte Carlo</button>
</nav>
<label title="The kind of model">Model <select id="kind"></select></label>
<label title="Which trained weights">Weights <select id="model"></select></label>
<label>Structure <select id="structure"></select></label>
<label class="file">Open .xyz…<input id="xyz-file" type="file" accept=".xyz,.extxyz" /></label>
<label class="md-only" id="force-mode-wrap" title="How forces are computed">Forces <select id="force-mode">
<option value="conservative">conservative (−∂E/∂r)</option>
<option value="direct">direct (non-conservative)</option></select></label>
<label class="md-only" title="Initial temperature: Maxwell–Boltzmann velocities, no net momentum">T₀ <input id="temperature" type="number" value="300" min="0" max="5000" step="50" /> K</label>
<label class="md-only" title="Time step (applies immediately)">Δt <input id="dt" type="number" value="0.5" min="0.05" max="5" step="0.05" /> fs</label>
<label class="dmc-only" title="Target number of walkers (all are evaluated in batched passes)">Walkers <input id="walkers" type="number" value="500" min="20" max="20000" step="100" /></label>
<label class="dmc-only" title="Imaginary time step, atomic units (applies immediately)">Δτ <input id="dtau" type="number" value="10" min="0.5" max="50" step="1" /> a.u.</label>
<button id="run" class="on" title="Run or pause (Space)">Pause</button>
<button id="restart" title="Start again from the starting structure (R)">Restart</button>
<button id="theme" title="Theme"></button>
<div id="status">starting…</div>
</header>
<main>
<section id="stage">
<div id="traj"></div>
<div id="clock"></div>
<div id="md-loading" hidden>
<div class="loader-title"></div>
<div class="loader-stage"></div>
<div class="loader-bar"><i></i></div>
</div>
</section>
<aside id="panel">
<div class="tiles md-only">
<div class="tile"><small>Temperature</small><b id="t-now">–</b><span id="t-mean"></span></div>
<div class="tile"><small>Energy drift</small><b id="drift">–</b><span id="drift-max"></span></div>
<div class="tile" title="Simulated nanoseconds per day of wall-clock time at this rate"><small>Speed</small><b id="speed">–</b><span id="ms"></span></div>
<div class="tile flops-tile"><small>Compute</small><b id="flops">–</b><span id="flops-detail"></span></div>
</div>
<div class="tiles dmc-only">
<div class="tile" title="Mean of E_ref − V_min over the second half of the run, with a blocking error"><small>Zero-point energy</small><b id="zpe">–</b><span id="zpe-detail"></span></div>
<div class="tile"><small>Walkers</small><b id="walkers-now">–</b><span id="walkers-detail"></span></div>
<div class="tile" title="Walker energies evaluated per day of wall-clock time at this rate"><small>Throughput</small><b id="samples">–</b><span id="samples-detail"></span></div>
<div class="tile flops-tile"><small>Compute</small><b id="dmc-flops">–</b><span id="dmc-flops-detail"></span></div>
</div>
<figure class="md-only">
<figcaption>Energy, eV, relative to the total at t = 0</figcaption>
<div id="energy-chart"></div>
</figure>
<figure class="md-only">
<figcaption>Temperature, K</figcaption>
<div id="temp-chart"></div>
</figure>
<figure class="dmc-only">
<figcaption>Reference energy E_ref − V_min, cm⁻¹</figcaption>
<div id="eref-chart"></div>
</figure>
<figure class="dmc-only">
<figcaption>Walkers</figcaption>
<div id="pop-chart"></div>
</figure>
<p class="note md-only">
Velocity Verlet at constant N, V and E. When the forces are the gradient of the energy and Δt is small
enough, the total energy stays flat while kinetic and potential energy swap. From a relaxed start about
half the initial kinetic energy goes into the potential, so the temperature settles near T₀/2. Direct
forces are not a gradient, so the total energy drifts with them, and so it does with too large a Δt.
</p>
<p class="note dmc-only">
Diffusion Monte Carlo for the nuclei. The structure is relaxed on the model's surface, then each walker,
a copy of the molecule, takes Gaussian steps of variance ħ²Δτ/m and is copied or removed with weight
exp(−Δτ (V − E<sub>ref</sub>)). E<sub>ref</sub> is adjusted to keep the number of walkers near the
target, and its average above the minimum is the zero-point energy. The cloud shows the walkers aligned
on the minimum; hydrogens spread the most. Walkers far below the minimum are in a hole in the model's
surface and are removed.
</p>
<p class="note" id="flops-note">
FLOPs are counted from the shapes of the kernels the model runs, with a multiply-add as 2. The rate is
over the whole step, so it also covers the neighbour list, data transfers and reading back the results.
</p>
</aside>
</main>
</body>
</html>