Add DynamicOpenMMFlowMaker
for dynamic OpenMM Simulations
#1115
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.
Summary
DynamicOpenMMFlowMaker
insrc/atomate2/openmm/flows/core.py
default_should_continue
functions insrc/atomate2/openmm/flows/core.py
test_dynamic_flow_maker
intests/openmm_md/flows/test_core.py
This PR resolves the final enhancement proposed in #1102. Currently, subclasses to
BaseOpenMMMaker
includeEnergyMinimizationMaker
,NPTMaker
,NVTMaker
, andTempChangeMaker
. This PR adds theDynamicOpenMMFlowMaker
class, suitable for high-throughput classical MD workflows. Equilibration timescales are highly system- and model-dependent for condensed-phase systems even with notable structural or compositional similarities (see ionic liquids, polymers, etc.). Now there is support for on-the-fly OpenMM trajectory propagation. Below is a simple water equilibration:Based on
default_should_continue
, equilibration is deemed complete once the potential energy vs time's rate of change plateaus. A newNPTMaker
is instantiated dynamically, creating equilibration stages. The water test case below, the simulation converges once the decay rate falls below thethreshold=1e-3
:DynamicOpenMMFlowMaker Job Logs Output
TODO (if any)
pre-commit run --all
with only the following issue unresolved:Ideally,
should_continue
should be aDynamicOpenMMFlowMaker
Callable attribute that can take user-defined keyword arguments, like in the test case above. Currently, I'm not sure of the best fix without resorting to purely positional arguments. Sinceshould_continue
is meant to be flexible and allow for bespoke modifications, replacing the current signature on line 370 withCallable[..., Response]
may work?Edit: Having looked into this some more, I think mypy_extensions would work fine so long as it is an allowable new dependency.
Future Work
The scope of this PR is a straightforward, extensible DynamicOpenMMFlowMaker. For more complex workflows, future enhancements would include:
traj_interval
atcollect_job
Phase
classes to easily stitch together intentionally separate, dynamic flows (i.e.,EquilibrationPhase
,ProductionPhase
, etc.)default_should_continue
with broader physical parameter support (e.g., integrate with pymbar, RED, etc.)Checklist
The easiest way to handle this is to run the following in the correct sequence on
your local machine. Start with running
ruff
andruff format
on your new code. This willautomatically reformat your code to PEP8 conventions and fix many linting issues.
Run ruff on your code.
type check your code.
Note that the CI system will run all the above checks. But it will be much more
efficient if you already fix most errors prior to submitting the PR. It is highly
recommended that you use the pre-commit hook provided in the repository. Simply run
pre-commit install
and a check will be run prior to allowing commits.