mcpbeat

Dpdata Minimizer

jinzhezenggroup/dpdata-minimizer

Minimize geometries with dpdata minimizer plugins via System.minimize(), including how minimizers relate to drivers (ASEMinimizer needs a dpdata Driver) and how to list supported minimizers (ase/sqm). Use when doing geometry optimization/minimization through dpdata Python API.

670 tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
118
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/jinzhezenggroup/computational-chemistry-agent-skills --skill dpdata-minimizer

The instruction itself

6 sections, as written by the author

dpdata-minimizer

Use dpdata “minimizer plugins” to optimize/minimize geometry and return a dpdata.LabeledSystem.

Key idea

  • A Minimizer performs geometry optimization (updates coordinates) and returns labeled results.
  • dpdata exposes this as:
System.minimize(*args, minimizer: str|Minimizer, **kwargs) -> LabeledSystem

List supported minimizer keys (runtime)

from dpdata.driver import Minimizer

print(sorted(Minimizer.get_minimizers().keys()))

In the current dpdata repo, minimizer keys include:

  • ase
  • sqm

Relationship to drivers (important)

Some minimizers require a dpdata Driver object.

Example: ASEMinimizer takes a dpdata Driver in its constructor:

  • minimizer="ase" requires driver=<dpdata Driver> (e.g. the ASE driver wrapping an ASE calculator).

So you generally do:

  • Construct a driver
  • Construct a minimizer (or let dpdata do it by passing the right kwargs)
  • Call System.minimize(...)

Runnable example: ASE minimizer with an ASE calculator

Use uv inline script metadata so the example runs reproducibly with uv run.

# /// script
# requires-python = ">=3.12"
# dependencies = [
#   "dpdata",
#   "numpy",
#   "ase",
# ]
# ///

import numpy as np
from ase.calculators.emt import EMT

from dpdata.driver import Driver
from dpdata.system import System

open("tmp.xyz", "w").write("""2\n\nH 0 0 0\nH 0 0 0.74\n""")

sys = System("tmp.xyz", fmt="xyz")

# Build a dpdata driver that can provide energies/forces to ASE optimizers.
ase_driver = Driver.get_driver("ase")(calculator=EMT())

# Minimize using the ASE minimizer plugin.
# NOTE: ASEMinimizer expects `driver` (not `calculator`) as input.
ls = sys.minimize(minimizer="ase", driver=ase_driver, fmax=0.05, max_steps=5)

print("coords", np.array(ls.data["coords"]).shape)
print("energies", np.array(ls.data["energies"]))
print("forces", np.array(ls.data["forces"]).shape)

Notes / gotchas

  • System.minimize(...) accepts either a minimizer key string or a Minimizer object.
  • If you previously used System.predict(driver="ase", calculator=...), be aware that minimization is different: you need to pass a driver into the minimizer (ASEMinimizer does not accept calculator=).
  • sqm minimizer requires AmberTools sqm executable and typically won’t be runnable in CI.

How to use it

Copy the folder

Take jinzhezenggroup/dpdata-minimizer from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.