Docs are under construction. Content may be incomplete or change.

tako.molecularDynamics Settings

Page type: Reference · Generated from src/script/takoScriptDocs.ts · Verified 2026-07-11T00:00:00.000Z
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 none selects fixed-cell velocity Verlet; coherent NVT uses one thermostat plus barostat none; 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 mdSteps only 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.
  • mdFixCom always 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

SettingTypeDefaultValuesUnitValidationDescription
calculatorcalculatorRequired for calculator-backed operations; validate the operation, structure element coverage, and requested properties before executionCalculator 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.
propertiespropertieslevel-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, elfUnknown 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.
mdStepsinteger100Floored 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.
mdTimestepFsnumber0.5fsA nonpositive or nonfinite value falls back to 0.5.Integrator timestep. Establish convergence by reducing it and comparing energy drift plus the target observable.
mdTemperatureKnumber300KA nonpositive or nonfinite value falls back to 300.Velocity-initialization temperature for every mode and thermostat target for temperature-controlled modes.
mdFrameIntervalinteger1stepsFloored 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.
mdEnsembleenumnvtnve, nvt, nptUnknown 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.
mdThermostatenumberendsennone, berendsen, bussi, langevin, noseHoover, andersenUnknown 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.
mdBarostatenumnonenone, berendsen, mtkIsotropic, mtkFull, mtkMaskedUnknown 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.
mdPressureEvPerAngstrom3number0eV/ųPassed through by TypeScript without finite-number normalization.External pressure target used by Berendsen and MTK cell dynamics. Approximately 160.2177 GPa per eV/ų.
mdCompressibilityAngstrom3PerEvnumber0.01ų/eVA nonpositive or nonfinite value falls back to 0.01.Berendsen pressure-coupling compressibility; not an MTK control.
mdTautFsnumber100fsA nonpositive or nonfinite value falls back to 100.Thermostat coupling time or characteristic mass timescale for Berendsen, Bussi, Nose-Hoover, and MTK particle chains.
mdTaupFsnumber1000fsA nonpositive or nonfinite value falls back to 1000.Pressure-coupling or barostat-chain characteristic timescale.
mdFrictionPerFsnumber0.01fs^-1A nonpositive or nonfinite value falls back to 0.01.Langevin friction coefficient; inert for other effective modes.
mdAndersenProbabilitynumber0.01per component per stepClamped to [0, 1].Independent probability that each Cartesian velocity component is redrawn on an Andersen step.
mdTchaininteger3Floored positive and clamped to 1–32.Particle Nose–Hoover-chain length for NHC NVT and MTK.
mdPchaininteger3Floored positive and clamped to 1–32.Barostat Nose–Hoover-chain length for MTK.
mdTloopinteger1Floored positive and clamped to 1–32.Thermostat-chain substeps per outer MD step.
mdPloopinteger1Floored positive and clamped to 1–32.Barostat-chain substeps per outer MD step.
mdMtkMaskarray[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.
mdFixCombooleantrueBoolean 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.
mdSeedinteger1Floored 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.
mdRdfEnabledbooleanfalseCompute a radial distribution g(r) with running coordination N(r) over the stored trajectory frames. Needs a periodic cell.
mdRdfRMaxAngstromnumber8Largest pair distance sampled by the RDF histogram.
mdRdfBinsinteger200RDF histogram bin count (clamped to 20–2000 by the engine).
mdRdfElementIstring''Center element symbol for a partial g(r); empty means all elements.
mdRdfElementJstring''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.

FieldTypeUnitAvailabilityDescription
kind”molecular_dynamics”Every resolved resultRuntime result discriminator.
level_of_theorystringEvery resolved resultNormalized calculator level.
engine”gfn2” | “mlip”Every resolved resultCalculator engine family.
mlip_runtimestringEvery resolved result; empty for GFN2MLIP runtime identifier.
mlip_modelstringEvery resolved result; empty for GFN2MLIP checkpoint identifier.
stepsintegerstepsEvery resolved resultEffective propagated step count after 1–10,000 clamping.
final_energy_hartreenumberHartreeEvery resolved resultFinal potential energy.
final_energy_evnumbereVEvery resolved resultFinal potential energy in electronvolts.
final_kinetic_energy_hartreenumberHartreeEvery resolved resultFinal classical kinetic energy.
final_kinetic_energy_evnumbereVEvery resolved resultFinal classical kinetic energy in electronvolts.
final_temperature_knumberKEvery resolved resultFinal instantaneous kinetic temperature using the engine degree-of-freedom count.
framesnonempty object[]Every resolved resultAt 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[].stepintegerstepsEvery stored frameOne-based propagated step index.
frames[].time_fsnumberfsEvery stored frameStep multiplied by effective timestep.
frames[].energy_hartreenumberHartreeEvery stored framePotential energy.
frames[].energy_evnumbereVEvery stored framePotential energy in electronvolts.
frames[].kinetic_energy_evnumbereVEvery stored frameClassical kinetic energy.
frames[].total_energy_evnumbereVEvery stored framePotential plus kinetic energy; not the MTK/NHC extended conserved energy.
frames[].temperature_knumberKEvery stored frameInstantaneous kinetic temperature.
frames[].cellobject | nullEvery stored framePublic frame cell or null for nonperiodic fixed-cell input.
frames[].cell.vectors3×3 number arrayÅPeriodic stored frameStored lattice vectors in ångström.
frames[].atomsobject[]Every stored frameStored atoms in input order with Cartesian coordinates in ångström.
frames[].atoms[].idintegerEvery atom in every stored frameStable input atom identifier.
frames[].atoms[].elementstringEvery atom in every stored frameElement symbol.
frames[].atoms[].xnumberÅEvery atom in every stored frameStored Cartesian x coordinate.
frames[].atoms[].ynumberÅEvery atom in every stored frameStored Cartesian y coordinate.
frames[].atoms[].znumberÅEvery atom in every stored frameStored Cartesian z coordinate.
frames[].atoms[].selective[boolean, boolean, boolean]Stored-frame atoms whose input carried selective flagsPer-axis mobility flags copied from the input.
frames[].fmax_hartree_per_bohr0Every stored frameGeneric compatibility field; not an MD force diagnostic.
frames[].fmax_ev_per_angstrom0Every stored frameGeneric compatibility field; not an MD force diagnostic.
frames[].maxstep_bohr0Every stored frameGeneric compatibility field; not an MD displacement diagnostic.
frames[].maxstep_angstrom0Every stored frameGeneric compatibility field; not an MD displacement diagnostic.
md_traceobject[]Every resolved resultScalar observations at frame-aligned steps plus the final step even when it has no frame.
rdfobjectWhen mdRdfEnabled and the periodic analysis succeedsRadial 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_angstromnumber[]ÅWith rdfHistogram bin-center pair distances.
rdf.g_rnumber[]With rdfNormalized pair-correlation values on the r grid.
rdf.coordinationnumber[]With rdfRunning coordination number N(r) integrated to each r.
md_trace[].stepintegerstepsEvery trace entryOne-based propagated step index.
md_trace[].time_fsnumberfsEvery trace entrySimulation time.
md_trace[].potential_energy_hartreenumberHartreeEvery trace entryPotential energy.
md_trace[].potential_energy_evnumbereVEvery trace entryPotential energy in electronvolts.
md_trace[].kinetic_energy_hartreenumberHartreeEvery trace entryKinetic energy.
md_trace[].kinetic_energy_evnumbereVEvery trace entryKinetic energy in electronvolts.
md_trace[].total_energy_hartreenumberHartreeEvery trace entryPotential plus kinetic energy.
md_trace[].total_energy_evnumbereVEvery trace entryPotential plus kinetic energy in electronvolts.
md_trace[].temperature_knumberKEvery trace entryInstantaneous kinetic temperature.
md_trace[].cell3×3 number array | nullBohr (current implementation)Every trace entry; null for nonperiodic inputRaw engine cell matrix. Unlike frame cells, this field is not converted to ångström.
settingsobjectEvery resolved resultNormalized requested settings; does not identify the effective routed integrator.
settings.stepsintegerEvery resolved resultRequested/normalized step count passed to WASM.
settings.timestep_fsnumberfsEvery resolved resultRequested/normalized timestep.
settings.temperature_knumberKEvery resolved resultRequested/normalized temperature.
settings.frame_intervalintegerstepsEvery resolved resultRequested/normalized frame interval before final WASM clamp to steps.
settings.ensemble”nve” | “nvt” | “npt”Every resolved resultNormalized requested label, not proof of sampled ensemble.
settings.thermostat”none” | “berendsen” | “bussi” | “langevin” | “noseHoover” | “andersen”Every resolved resultNormalized requested thermostat label.
settings.barostat”none” | “berendsen” | “mtkIsotropic” | “mtkFull” | “mtkMasked”Every resolved resultNormalized requested barostat label.
settings.pressure_ev_per_angstrom3numbereV/ųEvery resolved resultExternal pressure target.
settings.compressibility_angstrom3_per_evnumberų/eVEvery resolved resultBerendsen compressibility.
settings.taut_fsnumberfsEvery resolved resultThermostat coupling timescale.
settings.taup_fsnumberfsEvery resolved resultBarostat coupling timescale.
settings.friction_per_fsnumberfs^-1Every resolved resultLangevin friction.
settings.andersen_probabilitynumberper component per stepEvery resolved resultAndersen redraw probability.
settings.tchainintegerEvery resolved resultParticle thermostat chain length.
settings.pchainintegerEvery resolved resultBarostat chain length.
settings.tloopintegerEvery resolved resultThermostat subloop count.
settings.ploopintegerEvery resolved resultBarostat subloop count.
settings.mtk_mask[boolean, boolean, boolean]Every resolved resultRequested axis mask; operative only for masked MTK.
settings.fix_combooleanEvery resolved resultRequested COM correction flag; runtime effect is mode-dependent.
settings.seedintegerEvery resolved resultInitialization and stochastic-dynamics seed.
trajectory_xyzstringEvery resolved resultSimple XYZ serialization of stored frames; cells, velocities, and scalar trace data are not encoded.
atomsobject[]Every resolved resultFinal atom records in input order and public coordinate units.
atoms[].idintegerEvery final atomStable input atom identifier.
atoms[].elementstringEvery final atomElement symbol.
atoms[].xnumberÅEvery final atomFinal Cartesian x coordinate.
atoms[].ynumberÅEvery final atomFinal Cartesian y coordinate.
atoms[].znumberÅEvery final atomFinal Cartesian z coordinate.
atoms[].selective[boolean, boolean, boolean]Final atoms whose input carried selective flagsPer-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.