File size: 7,202 Bytes
6140238
 
 
 
 
95fa686
 
 
 
 
 
 
 
 
6140238
fd46c63
bce3a70
 
 
 
9d75f8c
 
bce3a70
 
6140238
fd46c63
6140238
 
fd46c63
 
 
 
6140238
 
 
 
fd46c63
6140238
 
fd46c63
 
 
 
6140238
fd46c63
bce3a70
6140238
 
 
 
 
 
 
 
 
 
 
 
 
fd46c63
6140238
 
fd46c63
 
6140238
fd46c63
 
 
 
 
 
 
6140238
 
 
fd46c63
6140238
 
 
fd46c63
 
 
 
 
 
 
 
 
bce3a70
 
 
 
6140238
fd46c63
bce3a70
 
 
 
 
 
fd46c63
 
bce3a70
 
fd46c63
6140238
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<!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>