Skip to content

MM3 stretch-bend: OpenMM/Tinker implementation + wildcard atom type matching #261

Description

@ericchansen

Background

The MM3 .fld parser already reads stretch-bend cross-term entries
(ptype="sb") at q2mm/io/mm3.py:498-525, but those terms are never
mapped into ForceField for any of the three MM backends:

  • q2mm/backends/mm/openmm.py — zero stretch_bend references
  • q2mm/backends/mm/tinker.py — zero stretch_bend references
  • q2mm/backends/mm/jax_engine.py — zero stretch_bend references

So all three backends ignore stretch-bend terms equally. This is a
symmetric gap, not a parity bug
— JAX matches OpenMM on every system
in the test suite and the published-FF validation page.

Why we're not fixing it now

It would touch:

  1. The MM3 parser → ForceField model (new StretchBendParam)
  2. OpenMM CustomCompoundBondForce (or equivalent) wiring
  3. Tinker engine wiring (already handled internally by Tinker — would
    need to verify)
  4. JAX _compile_energy_fn + a new _stretch_bend_energy helper
  5. Three-way parity tests on a system that actually has measurable S-B
    contributions (none of our current benchmarks do)

That work isn't justified until a benchmark or user workflow
demonstrably depends on it.

Reopen when

A user reports a parameterization where the QM Hessian off-diagonal
bond/angle coupling is too large to absorb into the bond and angle
force constants alone, AND a published MM3 force field with non-zero
S-B parameters needs to be reproduced.

Source

Wrap-up PR (feat/wrap-up-analytical) — see
plan.md Phase 6 deferral rationale.

Refs #176.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions