Prepare and run equilibrium GPUMD molecular dynamics. Use when the user needs a `model.xyz`, a `run.in`, an ensemble choice (NVE/NVT/NPT), timestep and dump-cadence guidance, or interpretation of `thermo.out` and `movie.xyz`. This is the general-purpose MD subskill; specialized observables (phonons, transport, diffusion, elastic, mechanics) have their own subskills.
Use this subskill for ordinary equilibrium GPUMD molecular dynamics. It owns
the generic model.xyz + run.in generation path and the shared ensemble
logic used by most downstream observables.
gpumd < run.in | tee gpumd.log
model.xyz in extxyz format)nep.txt, nep89_*.txt, Tersoff, …)run.in yourself instead of asking the user to hand-write it.python ../scripts/validate_extxyz_headers.py model.xyz --mode model
run 100) before the production segment
to catch missing files, bad species order, or unstable dynamics.thermo.out.model.xyzGPUMD expects an extxyz-style file. A minimal diamond-silicon example:
2
Lattice="5.43 0 0 0 5.43 0 0 0 5.43" pbc="T T T" Properties=species:S:1:pos:R:3
Si 0.000000 0.000000 0.000000
Si 1.357500 1.357500 1.357500
Key rules:
Lattice, pbc, and PropertiesLattice must contain exactly 9 numberspbc must match the physics (T T T bulk, T T F 2D monolayer, …)Use ../scripts/validate_extxyz_headers.py --mode model before trusting the file.
run.inrun.in is an ordered command file. Order is physically meaningful: each
run consumes the current state.
Annotated minimal NVT example (see assets/examples/minimal/):
potential nep.txt
velocity 300
time_step 1
ensemble nvt_nhc 300 300 100
dump_thermo 100
dump_position 1000
run 10000
Line-by-line meaning:
potential nep.txt
model.xyz.velocity 300
time_step 1
1.0 fs is a conservative
starting point for NEP-based solid-state MD. Use 0.2-0.5 fs for lighter
elements, hot states, or stiff bonds.ensemble nvt_nhc 300 300 100
T_start T_stop tau_T (the time constant tau_T is in units
of the timestep, so here 100 * 1 fs = 100 fs).dump_thermo 100
thermo.out every
100 steps.dump_position 1000
movie.xyz every 1000 steps. Use
dump_exyz instead if you want full extxyz headers on every frame.run 10000
gpumd < run.in | tee gpumd.log
If the local GPUMD build takes the input filename as a positional argument, use that instead — ask the user which form their binary expects.
Always inspect at least:
thermo.out for startup pathologies and
driftmovie.xyz if the system should preserve its topologyHelper:
python scripts/parse_thermo.py thermo.out --last 50
Replace the ensemble line with:
ensemble nve
Use this only after equilibration in NVT or NPT. NVE is the preferred ensemble for Green-Kubo style production segments where an active thermostat would contaminate the heat or stress autocorrelation.
ensemble nvt_nhc T_start T_stop tau_T — Nose-Hoover chain (recommended
default)ensemble nvt_lan T_start T_stop tau_T — Langevinensemble nvt_bdp T_start T_stop tau_T — Bussi-Donadio-Parrinelloensemble nvt_ber T_start T_stop tau_T — Berendsen (equilibration only)Isotropic stochastic-rescaling NPT:
ensemble npt_scr 300 300 100 0 0 0 0 0 0 100 100 100 100 100 100 2000
The block is:
T_start T_stop tau_T p_xx p_yy p_zz p_xy p_xz p_yz C_xx C_yy C_zz C_xy C_xz C_yz tau_p
All pressures are in GPa. C_ij are compressibility-like barostat parameters
(larger = softer). tau_p is the barostat time constant in timesteps. For a
cubic system with isotropic pressure, the minimal form is:
ensemble npt_scr 300 300 100 0 50 1000
which is short-hand for T_start T_stop tau_T p_hydro C tau_p in isotropic
mode. Always confirm the exact argument count against the current GPUMD docs,
because the keyword has evolved between versions.
Use dump_restart in the first run and then start the second run from the
produced restart file. Do not repeat velocity on the continuation run.
After a run, report at least:
run.in pathmodel.xyz pathgpumd.log)thermo.out existence and last linemovie.xyz or dump.xyz)thermo.outgpumd/phonongpumd/transportgpumd/diffusiongpumd/elasticgpumd/mechanicsmachine-learning-potentials/nep-gpumd/trainRead when needed:
model.xyz (or a conversion plan if one is not yet
available)run.in matched to the requested ensemble and observablethermo.outensemble keyword: https://gpumd.org/gpumd/input_parameters/ensemble.html