home

Atomistic Simulation Methods

Choose a model for the quantities and configurations your simulation must predict. Speed, accuracy, and transferability depend on the task; they are not universal scores.


Atomistic Simulation Methods

Download

PNG PDF SVG

Code

atomistic-simulation-methods.typ (115 lines)
#import "@preview/cetz:0.5.3": canvas, draw
#let label-size = 12pt
#let paragraph-size = 14pt
#let heading-size = 16pt

#let card(title, body, caption) = grid(
  columns: (100%,),
  block(
    width: 100%,
    inset: 12pt,
    radius: 8pt,
    fill: rgb("#cdd3da"),
    breakable: false,
  )[
    #text(size: heading-size, weight: "bold", title)
    #v(8pt)
    // Measure unconstrained artwork before scaling, including content wider than its card.
    #layout(size => {
      let artwork = text(size: label-size, body)
      std.scale(size.width / measure(artwork).width * 100%, reflow: true, artwork)
    })
    #v(7pt)
    #text(size: paragraph-size, caption)
  ],
)

#let takeaway(body) = block(
  width: 100%,
  inset: 12pt,
  radius: 6pt,
  fill: rgb("#c6d8d2"),
  breakable: false,
  text(size: paragraph-size, body),
)

#set page(width: 780pt, height: auto, margin: 22pt, fill: none)
#set text(font: "Avenir Next", size: paragraph-size, fill: rgb("#19324f"))
#set par(leading: 0.55em)

// === 1  What is evaluated? ===
#let figure-0 = canvas(length: 1.7cm, {
  let rows = (
    ([Classical force field], [positions], [fitted energy formula], rgb("#d6e9f8")),
    ([ML potential], [local environments], [trained neural model], rgb("#d3ede5")),
    (
      [Density functional theory],
      [nuclei + electrons],
      [self-consistent electrons],
      rgb("#fbe4d4"),
    ),
  )
  for (idx, (title, input, method, color)) in rows.enumerate() {
    let y = -idx * 1.9
    for (col, label) in (input, method, [energy + forces]).enumerate() {
      // left-align the input boxes so each row's title lines up with the others
      draw.content(
        if col == 0 { (-1.3, y) } else { (col * 5.2, y) },
        label,
        anchor: if col == 0 { "west" } else { "center" },
        frame: "rect",
        padding: 10pt,
        fill: color,
        stroke: none,
        name: str(idx) + "-" + str(col),
      )
    }
    draw.content((rel: (0, .45), to: str(idx) + "-0.north-west"), title, anchor: "west")
    for col in range(2) {
      draw.line(
        str(idx) + "-" + str(col) + ".east",
        str(idx) + "-" + str(col + 1) + ".west",
        mark: (end: "stealth"),
        stroke: rgb("#6b7685") + 1pt,
      )
    }
  }
})

// === 2  What must be validated? ===
#let figure-1 = [
  #set text(size: paragraph-size)
  #box(width: 680pt)[#table(
    columns: (1fr, 2fr),
    inset: 9pt,
    stroke: rgb("#cad4df") + .5pt,
    table.header([*Method*], [*Checks for the intended application*]),
    [Classical force field],
    [Functional form and parameter coverage; bonding changes, charges, and long-range interactions.],

    [ML potential],
    [Training-domain coverage; errors on representative structures, forces, defects, and trajectories.],

    [DFT],
    [Functional, basis and sampling convergence; relevant charge, spin, and electronic states.],
  )]
]

Choose a model for the quantities and configurations your simulation must predict. Speed, accuracy, and transferability depend on the task; they are not universal scores.
#v(14pt)
#stack(
  dir: ttb,
  spacing: 12pt,
  card(
    [1  What is evaluated?],
    figure-0,
    [All three can supply energies and forces for atomistic simulation. They differ in how that mapping is built and what electronic physics is represented.],
  ),
  card(
    [2  What must be validated?],
    figure-1,
    [Benchmark the same observable, structures, and accuracy target on the intended hardware. Report throughput and errors with units; test transfer on configurations excluded from fitting.],
  ),
)
#v(12pt)
#takeaway[*Ask “good enough for this task?” before “which is best?”* Classical and ML models amortize a fitted approximation over many evaluations. DFT solves an approximate electronic problem for each configuration. None guarantees accuracy outside its validated setting.]