tako.molecularDynamics Settings
On this page
This page is generated from code-owned Doxygen-style metadata in src/script/takoScriptDocs.ts. Update that file first, then regenerate this page so runtime capability descriptions, docs, and agent guidance stay aligned.
tako.molecularDynamics
Runs a newly initialized MD trajectory and returns stored frames plus a scalar trace. The public result has no velocities, pressure trace, effective-mode label, or restart state.
Signature: await tako.molecularDynamics(structure, { calculator, properties, mdSteps, mdTimestepFs, mdTemperatureK, mdFrameInterval, mdEnsemble, mdThermostat, mdBarostat, mdPressureEvPerAngstrom3, mdCompressibilityAngstrom3PerEv, mdTautFs, mdTaupFs, mdFrictionPerFs, mdAndersenProbability, mdTchain, mdPchain, mdTloop, mdPloop, mdMtkMask, mdFixCom, mdSeed })
Theory
- Molecular dynamics integrates Newtonian equations of motion on the selected model potential. The timestep controls numerical stability; too large a timestep causes energy drift, unstable trajectories, or unphysical heating.
- The requested ensemble, thermostat, and barostat are independently normalized but resolved by precedence. NVE or thermostat
noneselects fixed-cell velocity Verlet; coherent NVT uses one thermostat plus barostatnone; coherent NPT uses Berendsen/Berendsen or Nose-Hoover with one MTK barostat. - Every call discards incoming velocities, draws a seeded mass-weighted Gaussian field, removes center-of-mass motion, and rescales with 3N components. It cannot continue a prior call because velocities and extended-system restart variables are not public.
Usage Notes
- Use short MD first to check stability, then extend
mdStepsonly after inspecting temperature, energy drift, and trajectory behavior. - Use only an explicitly documented coherent routing tuple; returned settings report requested labels rather than the effective integrator.
mdFixComalways removes initial COM motion and is applied during Berendsen, Bussi, Langevin, and Andersen propagation, but not during Nose-Hoover-chain or MTK propagation.- NPT requires a fully periodic cell and calculator stress. MTK rejects all constraints. Pressure uses eV/ų and trace-cell matrices currently remain in internal Bohr units.
Settings
| Setting | Type | Default | Values | Unit | Validation | Description |
|---|---|---|---|---|---|---|
calculator | calculator | Required for calculator-backed operations; validate the operation, structure element coverage, and requested properties before execution | Calculator object from tako.calculator.gxtb(...), gfn2(...), mlip(...), or dft(...). It controls the level of theory, charge/spin where supported, runtime assets, property availability, and the synchronous supported-element list used by TakoScript and the UI. | |||
properties | properties | level-dependent normalization; MLIP: ['energy', 'forces']; GFN2: ['energy', 'forces', 'charges', 'dos', 'pdos'] | energy, forces, stress, dos, pdos, charges, electronDensity, chargeDensity, nci, molden, wfn, hdf5, orbitals, spinDensity, esp, densityDerivatives, fukui, elf | Unknown names are removed and energy/forces are reinserted. NPT or any requested non-none barostat additionally makes the input builder request stress. The MD worker does not perform electronic post-processing. | Shared calculator request. MD consumes forces, potential energy at observable steps, and stress only for effective cell dynamics. Charges, DOS/PDOS, density, NCI, and WFN are not returned by this operation. | |
mdSteps | integer | 100 | Floored to a positive integer and capped at 10,000 in TypeScript; clamped again to 1–10,000 in WASM. | Propagated step count. Total nominal time is mdSteps * mdTimestepFs fs; there is no step-zero result frame. | ||
mdTimestepFs | number | 0.5 | fs | A nonpositive or nonfinite value falls back to 0.5. | Integrator timestep. Establish convergence by reducing it and comparing energy drift plus the target observable. | |
mdTemperatureK | number | 300 | K | A nonpositive or nonfinite value falls back to 300. | Velocity-initialization temperature for every mode and thermostat target for temperature-controlled modes. | |
mdFrameInterval | integer | 1 | steps | Floored positive, capped at 10,000, then clamped to 1…effective steps. | Stores frames at divisible steps. The final scalar trace is always retained, but the final frame is absent when the interval does not divide the step count. | |
mdEnsemble | enum | nvt | nve, nvt, npt | Unknown values normalize to nvt. Routing also depends on thermostat and barostat. | Requested ensemble label. nve always routes to velocity Verlet; npt alone does not guarantee cell dynamics. | |
mdThermostat | enum | berendsen | none, berendsen, bussi, langevin, noseHoover, andersen | Unknown values normalize to berendsen. none routes any ensemble to velocity Verlet before NPT barostat matching. | Requested thermostat. Coherent NVT uses barostat none; coherent MTK NPT uses noseHoover plus an explicit MTK barostat. | |
mdBarostat | enum | none | none, berendsen, mtkIsotropic, mtkFull, mtkMasked | Unknown values normalize to none. Ignored outside NPT; may still trigger an unnecessary stress request in the input builder. | Requested cell controller. The returned settings preserve this label even when routing selects a different effective mode. | |
mdPressureEvPerAngstrom3 | number | 0 | eV/ų | Passed through by TypeScript without finite-number normalization. | External pressure target used by Berendsen and MTK cell dynamics. Approximately 160.2177 GPa per eV/ų. | |
mdCompressibilityAngstrom3PerEv | number | 0.01 | ų/eV | A nonpositive or nonfinite value falls back to 0.01. | Berendsen pressure-coupling compressibility; not an MTK control. | |
mdTautFs | number | 100 | fs | A nonpositive or nonfinite value falls back to 100. | Thermostat coupling time or characteristic mass timescale for Berendsen, Bussi, Nose-Hoover, and MTK particle chains. | |
mdTaupFs | number | 1000 | fs | A nonpositive or nonfinite value falls back to 1000. | Pressure-coupling or barostat-chain characteristic timescale. | |
mdFrictionPerFs | number | 0.01 | fs^-1 | A nonpositive or nonfinite value falls back to 0.01. | Langevin friction coefficient; inert for other effective modes. | |
mdAndersenProbability | number | 0.01 | per component per step | Clamped to [0, 1]. | Independent probability that each Cartesian velocity component is redrawn on an Andersen step. | |
mdTchain | integer | 3 | Floored positive and clamped to 1–32. | Particle Nose–Hoover-chain length for NHC NVT and MTK. | ||
mdPchain | integer | 3 | Floored positive and clamped to 1–32. | Barostat Nose–Hoover-chain length for MTK. | ||
mdTloop | integer | 1 | Floored positive and clamped to 1–32. | Thermostat-chain substeps per outer MD step. | ||
mdPloop | integer | 1 | Floored positive and clamped to 1–32. | Barostat-chain substeps per outer MD step. | ||
mdMtkMask | array | [true, true, true] | [boolean, boolean, boolean] | Non-array or nonboolean entries fall back componentwise to the default; masked MTK rejects an all-false mask. | Enabled lattice-vector length directions for masked MTK in the initial normalized-cell basis; not a six-component strain mask. | |
mdFixCom | boolean | true | Boolean default true. Initial COM removal happens regardless of this value. | Requests ongoing COM correction in Berendsen, Bussi, Langevin, and Andersen. NHC/MTK propagation ignores it. | ||
mdSeed | integer | 1 | Floored to a positive integer; zero/invalid values fall back to 1. | Seeds initial velocities and the separate stochastic-thermostat stream. It does not import or continue a previous RNG state. | ||
mdRdfEnabled | boolean | false | Compute a radial distribution g(r) with running coordination N(r) over the stored trajectory frames. Needs a periodic cell. | |||
mdRdfRMaxAngstrom | number | 8 | Largest pair distance sampled by the RDF histogram. | |||
mdRdfBins | integer | 200 | RDF histogram bin count (clamped to 20–2000 by the engine). | |||
mdRdfElementI | string | '' | Center element symbol for a partial g(r); empty means all elements. | |||
mdRdfElementJ | string | '' | Neighbor element symbol for a partial g(r); empty means all elements. |
Example
const structure = await tako.input("input/liquid.extxyz");
const calculator = tako.calculator.gfn2({ dispersion: "d4" });
const result = await tako.molecularDynamics(structure, {
calculator,
properties: ["energy", "forces"],
mdSteps: 1000,
mdTimestepFs: 0.5,
mdTemperatureK: 300,
mdEnsemble: "nvt",
mdThermostat: "bussi",
mdFrameInterval: 10,
mdSeed: 42,
});
await tako.output("output/md-result.json", result);
Result
Resolved MD object with final scalar energy/temperature, interval-sampled frames, a scalar trace that always includes the final step, final atoms, and normalized requested settings. No velocities, pressure/stress trace, resolved-integrator label, or restart state are public.
| Field | Type | Unit | Availability | Description |
|---|---|---|---|---|
kind | ”molecular_dynamics” | Every resolved result | Runtime result discriminator. | |
level_of_theory | string | Every resolved result | Normalized calculator level. | |
engine | ”gfn2” | “mlip” | Every resolved result | Calculator engine family. | |
mlip_runtime | string | Every resolved result; empty for GFN2 | MLIP runtime identifier. | |
mlip_model | string | Every resolved result; empty for GFN2 | MLIP checkpoint identifier. | |
steps | integer | steps | Every resolved result | Effective propagated step count after 1–10,000 clamping. |
final_energy_hartree | number | Hartree | Every resolved result | Final potential energy. |
final_energy_ev | number | eV | Every resolved result | Final potential energy in electronvolts. |
final_kinetic_energy_hartree | number | Hartree | Every resolved result | Final classical kinetic energy. |
final_kinetic_energy_ev | number | eV | Every resolved result | Final classical kinetic energy in electronvolts. |
final_temperature_k | number | K | Every resolved result | Final instantaneous kinetic temperature using the engine degree-of-freedom count. |
frames | nonempty object[] | Every resolved result | At least the effective frame-interval step is stored because the interval is clamped to 1…steps. There is no step-zero frame and no guaranteed final frame when the interval does not divide steps. | |
frames[].step | integer | steps | Every stored frame | One-based propagated step index. |
frames[].time_fs | number | fs | Every stored frame | Step multiplied by effective timestep. |
frames[].energy_hartree | number | Hartree | Every stored frame | Potential energy. |
frames[].energy_ev | number | eV | Every stored frame | Potential energy in electronvolts. |
frames[].kinetic_energy_ev | number | eV | Every stored frame | Classical kinetic energy. |
frames[].total_energy_ev | number | eV | Every stored frame | Potential plus kinetic energy; not the MTK/NHC extended conserved energy. |
frames[].temperature_k | number | K | Every stored frame | Instantaneous kinetic temperature. |
frames[].cell | object | null | Every stored frame | Public frame cell or null for nonperiodic fixed-cell input. | |
frames[].cell.vectors | 3×3 number array | Å | Periodic stored frame | Stored lattice vectors in ångström. |
frames[].atoms | object[] | Every stored frame | Stored atoms in input order with Cartesian coordinates in ångström. | |
frames[].atoms[].id | integer | Every atom in every stored frame | Stable input atom identifier. | |
frames[].atoms[].element | string | Every atom in every stored frame | Element symbol. | |
frames[].atoms[].x | number | Å | Every atom in every stored frame | Stored Cartesian x coordinate. |
frames[].atoms[].y | number | Å | Every atom in every stored frame | Stored Cartesian y coordinate. |
frames[].atoms[].z | number | Å | Every atom in every stored frame | Stored Cartesian z coordinate. |
frames[].atoms[].selective | [boolean, boolean, boolean] | Stored-frame atoms whose input carried selective flags | Per-axis mobility flags copied from the input. | |
frames[].fmax_hartree_per_bohr | 0 | Every stored frame | Generic compatibility field; not an MD force diagnostic. | |
frames[].fmax_ev_per_angstrom | 0 | Every stored frame | Generic compatibility field; not an MD force diagnostic. | |
frames[].maxstep_bohr | 0 | Every stored frame | Generic compatibility field; not an MD displacement diagnostic. | |
frames[].maxstep_angstrom | 0 | Every stored frame | Generic compatibility field; not an MD displacement diagnostic. | |
md_trace | object[] | Every resolved result | Scalar observations at frame-aligned steps plus the final step even when it has no frame. | |
rdf | object | When mdRdfEnabled and the periodic analysis succeeds | Radial distribution over the stored frames: r_angstrom, g_r, coordination (running N(r)), element_i/element_j (analyzed pair or “all”), r_max_angstrom, bins, frames_analyzed. | |
rdf.r_angstrom | number[] | Å | With rdf | Histogram bin-center pair distances. |
rdf.g_r | number[] | With rdf | Normalized pair-correlation values on the r grid. | |
rdf.coordination | number[] | With rdf | Running coordination number N(r) integrated to each r. | |
md_trace[].step | integer | steps | Every trace entry | One-based propagated step index. |
md_trace[].time_fs | number | fs | Every trace entry | Simulation time. |
md_trace[].potential_energy_hartree | number | Hartree | Every trace entry | Potential energy. |
md_trace[].potential_energy_ev | number | eV | Every trace entry | Potential energy in electronvolts. |
md_trace[].kinetic_energy_hartree | number | Hartree | Every trace entry | Kinetic energy. |
md_trace[].kinetic_energy_ev | number | eV | Every trace entry | Kinetic energy in electronvolts. |
md_trace[].total_energy_hartree | number | Hartree | Every trace entry | Potential plus kinetic energy. |
md_trace[].total_energy_ev | number | eV | Every trace entry | Potential plus kinetic energy in electronvolts. |
md_trace[].temperature_k | number | K | Every trace entry | Instantaneous kinetic temperature. |
md_trace[].cell | 3×3 number array | null | Bohr (current implementation) | Every trace entry; null for nonperiodic input | Raw engine cell matrix. Unlike frame cells, this field is not converted to ångström. |
settings | object | Every resolved result | Normalized requested settings; does not identify the effective routed integrator. | |
settings.steps | integer | Every resolved result | Requested/normalized step count passed to WASM. | |
settings.timestep_fs | number | fs | Every resolved result | Requested/normalized timestep. |
settings.temperature_k | number | K | Every resolved result | Requested/normalized temperature. |
settings.frame_interval | integer | steps | Every resolved result | Requested/normalized frame interval before final WASM clamp to steps. |
settings.ensemble | ”nve” | “nvt” | “npt” | Every resolved result | Normalized requested label, not proof of sampled ensemble. | |
settings.thermostat | ”none” | “berendsen” | “bussi” | “langevin” | “noseHoover” | “andersen” | Every resolved result | Normalized requested thermostat label. | |
settings.barostat | ”none” | “berendsen” | “mtkIsotropic” | “mtkFull” | “mtkMasked” | Every resolved result | Normalized requested barostat label. | |
settings.pressure_ev_per_angstrom3 | number | eV/ų | Every resolved result | External pressure target. |
settings.compressibility_angstrom3_per_ev | number | ų/eV | Every resolved result | Berendsen compressibility. |
settings.taut_fs | number | fs | Every resolved result | Thermostat coupling timescale. |
settings.taup_fs | number | fs | Every resolved result | Barostat coupling timescale. |
settings.friction_per_fs | number | fs^-1 | Every resolved result | Langevin friction. |
settings.andersen_probability | number | per component per step | Every resolved result | Andersen redraw probability. |
settings.tchain | integer | Every resolved result | Particle thermostat chain length. | |
settings.pchain | integer | Every resolved result | Barostat chain length. | |
settings.tloop | integer | Every resolved result | Thermostat subloop count. | |
settings.ploop | integer | Every resolved result | Barostat subloop count. | |
settings.mtk_mask | [boolean, boolean, boolean] | Every resolved result | Requested axis mask; operative only for masked MTK. | |
settings.fix_com | boolean | Every resolved result | Requested COM correction flag; runtime effect is mode-dependent. | |
settings.seed | integer | Every resolved result | Initialization and stochastic-dynamics seed. | |
trajectory_xyz | string | Every resolved result | Simple XYZ serialization of stored frames; cells, velocities, and scalar trace data are not encoded. | |
atoms | object[] | Every resolved result | Final atom records in input order and public coordinate units. | |
atoms[].id | integer | Every final atom | Stable input atom identifier. | |
atoms[].element | string | Every final atom | Element symbol. | |
atoms[].x | number | Å | Every final atom | Final Cartesian x coordinate. |
atoms[].y | number | Å | Every final atom | Final Cartesian y coordinate. |
atoms[].z | number | Å | Every final atom | Final Cartesian z coordinate. |
atoms[].selective | [boolean, boolean, boolean] | Final atoms whose input carried selective flags | Per-axis mobility flags copied from input. |
Errors and Promise Behavior
- Rejects NPT without a periodic cell and rejects effective NPT when stress is unavailable or calculator evaluation fails.
- All MTK modes reject structures with constraints; masked MTK also rejects an all-false axis mask.
- Validation does not reject ambiguous routing tuples. The promise can resolve while the effective integrator differs from the labels retained in settings.
- Calculation, serialization, worker reset, done-without-result, and cancellation failures reject. Frames streamed before rejection are diagnostic partial evidence, not a resolved trajectory.
- Cancellation and ordinary completion expose no restart state. A later call always reinitializes velocities and extended-system variables.