Add enhanced-sampling submodule: metadynamics, boxed dynamics, and loxodynamics - #581
Open
amateurcat wants to merge 8 commits into
Open
Add enhanced-sampling submodule: metadynamics, boxed dynamics, and loxodynamics#581amateurcat wants to merge 8 commits into
amateurcat wants to merge 8 commits into
Conversation
add enhanced_sampling module, reconstruct meta-dynamics functions and moved them into the new module implemented Boxed MD
add loxodynamics
Fix format with pinned ruff 0.15.4
CompRhys
reviewed
Jun 26, 2026
| return out.index_add(dim, system_idx, src) | ||
|
|
||
|
|
||
| class LogfermiWall(ModelInterface): |
Member
There was a problem hiding this comment.
Can we append Model to the name here to name it clearer?
CompRhys
reviewed
Jun 26, 2026
| return {"energy": energy, "forces": forces, self.energy_label: energy} | ||
|
|
||
|
|
||
| class RMSDCV(ModelInterface): |
Member
There was a problem hiding this comment.
Can we append Model to the name here to name it clearer?
CompRhys
reviewed
Jun 26, 2026
| raise ValueError(f"{self.activation=} must be one of {_ACTIVATIONS}") | ||
|
|
||
|
|
||
| class ShiftedSoftplus(nn.Module): |
Member
There was a problem hiding this comment.
is there no common library that already defines this?
CompRhys
reviewed
Jun 26, 2026
|
|
||
|
|
||
| @dataclass | ||
| class DescriptorNormalizer: |
Member
There was a problem hiding this comment.
again do we need to implement this here rather than import a standard mean-variance normalizer?
Member
|
Thanks for the feature contribution! I gave it a quick glance today but will look in more details next week. Comments thus far are just nits not looking at the algorithms/test coverage yet. |
torch-sim has FixAtoms, FixCom and FixSymmetry but no way to constrain an
interatomic distance. This adds FixBondLengths, mirroring the semantics of
ase.constraints.FixBondLengths.
Distances are held by projection rather than by a stiff restraint potential,
so they are satisfied exactly to the requested tolerance and no penalty term
is added to the energy — reported energies stay the model's own.
Three projections, all mass-weighted and all iterated:
* adjust_positions - SHAKE, restores each target distance
* adjust_momenta - RATTLE, removes relative velocity along each pair axis
* adjust_forces - same projection on the forces, removing the constrained
component of the relative acceleration, and recording the
Lagrange-multiplier force in .constraint_forces
Iteration matters because constraints that share an atom are coupled, and a
single pass would satisfy only the last one applied.
Implementation notes:
* Subclasses Constraint directly rather than AtomConstraint, which assumes a
flat atom index list and rebuilds via type(self)(indices); a distance
constraint carries index pairs plus a target per pair, so select_constraint,
select_sub_constraint, reindex and merge are implemented for pairs.
* Vectorized over pairs with index_add_, so it batches.
* Minimum image is applied per pair using the cell of the owning system,
following SimState's column vector convention.
* Target lengths are stored at double precision and cast down only when
applied. Reading them at the ambient default dtype would round a target
such as 0.98 A by ~2e-8, an error no amount of iteration can remove.
* Each constraint removes one degree of freedom from its own system, and
spanning two systems of a batch is rejected.
* validate_constraints now bounds-checks the pair indices, which it would
otherwise skip since this is not an AtomConstraint.
Verified against ASE: positions, momenta and forces all agree to ~1e-14, mass
weighting reproduces the expected m_heavy/m_light displacement ratio, and a
constrained bond holds through a FIRE relaxation that otherwise relaxes it to
the Lennard-Jones minimum.
16 new tests; the existing constraint, optimizer, extras and symmetry suites
(220 tests) still pass.
Add FixBondLengths: SHAKE/RATTLE distance constraints
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a self-contained torch_sim.enhanced_sampling submodule of enhanced-sampling methods that compose with any MLIP via SumModel