I’ve been thinking carefully about how to handle force fields in a “modern” version of Avogadro.
Basically, I want to do this via Python plugin. We’ll see if it’s fast enough (e.g., for low-latency interactive sculpting), but it allows us to easily connect with a wide range of packages, including state-of-the-art ML methods.
Base level:
- Plugin returns an energy of this particular geometry
-> Avogadro uses approximate gradients to optimize the geometry using steepest descent or conjugate gradients
Better:
- Plugin returns energy and gradients of this geometry
-> Avogadro uses the computed gradients to update the geometry
Best:
- Plugin updates the geometry for a few steps, returns energy and/or gradients
- Avogadro updates the geometry
The critical pieces:
- Indicating that an atom or set of atoms are frozen (or have constraints)
… This needs to be part of CJSON - Returning an energy quickly
- Having syntax for forces/gradients on atoms in CJSON