Scientific correctness standards for molrs — force-field equations, integration algorithms, units, physical invariants, reference citations. Reference document only; no procedural workflow.
Reference standard for molrs scientific correctness. The molrs-scientist agent applies these rules; this file defines them.
| Quantity | Unit | Note |
|---|---|---|
| Length | Å | |
| Energy | kcal/mol | |
| Force | kcal/(mol·Å) | |
| Time |
| fs |
| Mass | g/mol (amu) |
| Charge | e | elementary |
| Temperature | K |
Precision: F = f64 throughout (always). The f64 feature flag is deprecated and ignored.
1 kcal/mol = 4.184 kJ/mol = 0.04336 eVkB = 1.987204e-3 kcal/(mol·K)C ≈ 332.0637133 kcal·Å·mol⁻¹·e⁻²Harmonic bond: V = K (r - r₀)² [LAMMPS convention: K = k/2]
LJ 12-6: V = 4ε [(σ/r)¹² - (σ/r)⁶]
Coulomb: V = C · qᵢqⱼ / (εᵣ · r)
Morse: V = D [1 - exp(-α (r - r₀))]²
MMFF bond: V = 143.9325 · (kb/2) · Δr² · (1 + cs·Δr + (7/12)·cs²·Δr²)
MMFF angle: V = 0.043844 · (ka/2) · Δθ² · (1 + cb·Δθ) [rad]
Harmonic angle: V = (kθ/2) (θ - θ₀)² [rad]
Periodic torsion: V = (1/2) Σₙ Vₙ [1 + cos(n·φ - δₙ)]
Always cite the reference equation + paper / book / source code line in the rustdoc.
| Invariant | Where to check |
|---|---|
V(r → ∞) → 0 | non-bonded potentials with cutoff |
V(r_eq) = minimum, F(r_eq) = 0 | bonded potentials |
F = -dV/dr | every potential (numerical gradient test) |
f_ij = -f_ji (Newton's 3rd) | every pair potential |
| Total energy conserved | NVE MD (within numerical precision) |
| Temperature equilibrates to target | NVT MD |
| Minimum image consistent with cutoff | PBC-using code |
Constraint gradient: TRUE ∂V/∂x accumulated with += | every constraint in molrs-pack |
r → 0, denominator in MMFF bond stretch.(σ/r)¹² when r → 0; clamp or use cutoff guard.drift / mean.Code/ForceField/MMFF, OpenBabel src/forcefields/forcefieldmmff94.cppsrc/MOLECULE/, GROMACS src/gromacs/mdlib/learn-packmol skill for the discipline)Code/DistGeom/, Code/GraphMol/DistGeomHelpers/)Code/GraphMol/Chirality.cppfile:liner → 0, r → ∞, r = r_eq)r_c)1/r without guard)