cuPotential: Does Accurate Energy Mean Accurate Forces?
cuPotential brings accelerated atomic-scale simulation functions into the news. Beyond speed, there is an easy question to overlook: does a close energy prediction imply a close force prediction? Not in general. A small, rapidly varying energy error can become a substantial force error after differentiation.
Contents
- What the cuPotential announcement establishes
- Force follows the local change in energy
- Equal energy at one point, different force
- Cross-check force against finite differences
- The reverse inference can fail too
- A smaller step is not always a better test
- Consistency, accuracy, and applicability are separate
- Define acceptance before measuring acceleration
- Sources and backfill note
The dimensionless example below makes that distinction reproducible and develops a validation order for simulation components. 阅读中文版.
What the cuPotential announcement establishes
NVIDIA’s October 14, 2026 announcement describes cuPotential as GPU-accelerated functions that developers can add to existing software for atomic-interaction calculations. It is in early access. The announcement does not establish a complete simulation model validated for every material or operating condition.
NVIDIA reports an additional 2–3× acceleration in early-access testing of already GPU-optimized workflows. That is a vendor-reported result under particular conditions, not a measurement reproduced here. This article does not run cuPotential. Runtime, numerical error, and physical applicability need separate evidence.
Force follows the local change in energy
For a one-dimensional conservative teaching potential, F(x)=−dE/dx. In multiple dimensions, the corresponding object is the negative gradient with respect to coordinates. Energy describes the value at a position; force depends on how the surrounding energy curve changes. Agreement on values and agreement on slopes are different requirements.
The OpenMM standard-force documentation gives the harmonic energy E=½k(x−x₀)² and warns that parameter conventions can absorb the factor of one-half. Even identically named potentials require compatible coefficient definitions. Here the equilibrium coordinate is shifted to zero and k is set to one, using a dimensionless coordinate rather than material parameters.
Coordinate x
Specify the current state
Potential E(x)
Evaluate a scalar
Negative gradient
Obtain the force
State update
Integrator and step also matter
Equal energy at one point, different force
Let the reference be E₀(x)=x²/2 and add a perturbation: E₁(x)=x²/2+δsin(ωx). Their forces are F₀(x)=−x and F₁(x)=−x−δωcos(ωx). The energy error is bounded in magnitude by δ, while the force-error amplitude is δω. Differentiation introduces a frequency factor.
Set δ=0.001 and ω=1000. At x=0, both energies are zero, but the reference force is zero and the perturbed force is −1. These are constructed dimensionless values. They disprove a general inference from small energy error to small force error; they do not assess cuPotential accuracy or describe a measured material.
At the same x=0
E₀=0 and E₁=0
Energy agrees here
Local slopes need not agree
Reference F₀=0
Perturbed F₁=−1
Frequency matters
Differentiation introduces ω
Cross-check force against finite differences
When a component returns both energy and force, a local cross-check is Fdiff(x)=−[E(x+h)−E(x−h)]/(2h). This asks whether the force agrees with the local variation of the returned energy. It does not establish that the energy function represents the real physical system.
The analytic example supplies both an exact derivative and a finite-difference approximation. Several coordinates and step sizes reveal more than a single comparison. The final assertion also tests a sign reversal, showing how the same check can detect that implementation mistake.
# Dimensionless teaching functions; not cuPotential or a materials model.
import math
delta, omega = 0.001, 1000.0
def energy(x):
return 0.5 * x*x + delta * math.sin(omega*x)
def force(x):
return -x - delta * omega * math.cos(omega*x)
def numerical_force(x, h):
return -(energy(x+h) - energy(x-h)) / (2*h)
assert energy(0.0) == 0.0
assert force(0.0) == -1.0
errors = []
for h in (1e-4, 1e-5, 1e-6):
err = max(abs(force(x) - numerical_force(x, h))
for x in (0.0, 0.001, 0.123, -0.2))
errors.append(err)
assert errors[2] < 1e-6
assert errors[2] < errors[1] < errors[0]
# A sign error should fail the same consistency check.
assert abs(-force(0.0) - numerical_force(0.0, 1e-6)) > 1.9
print([f"{e:.3g}" for e in errors])
The code was executed locally. Maximum absolute errors at the four listed points are approximately 0.00167, 0.0000167, and 0.000000167 for the three step sizes. These are checks of a teaching function, not sampled model-accuracy estimates or GPU benchmarks.
The reverse inference can fail too
If E₂(x)=E₀(x)+C for a constant C, then F₂(x)=F₀(x). Decide whether the task concerns absolute energy, energy differences under a shared convention, or local forces before interpreting an error. A fixed energy offset does not by itself establish an incorrect dynamical force.
This does not justify removing arbitrary discrepancies. The offset must actually be constant with respect to the coordinates being compared. Different structures, particle counts, and reference conventions require explicit treatment. Without an aligned target and reference zero, a polished average-error number may answer the wrong question.
A smaller step is not always a better test
For a smooth function, central differences can reduce truncation error as the step shrinks. Eventually subtracting nearly equal floating-point values amplifies the importance of rounding. Noise, finite precision, and non-smooth boundaries in the energy interface can also influence the result.
Sweep a range of steps and look for a reasonably stable error region across coordinates and directions. The observed improvement over the three listed steps does not imply indefinite improvement as h approaches zero. A conclusion should retain the range of conditions that was actually checked.
For a multi-atom system, identify the particular atom and coordinate being perturbed and hold the intended remaining coordinates and boundary conditions fixed. Compare a total-energy derivative with its matching force component. Comparing it directly with the norm of a force vector changes the mathematical object being tested.
Consistency, accuracy, and applicability are separate
A function can agree perfectly with its own derivative and still be a poor physical model. Validation has layers: implementation against the chosen equations, energy and force against a trusted reference, then simulation behavior within the target task’s conditions. Passing the first layer cannot replace the later comparisons.
Reference data needs units, structures, boundary conditions, and calculation settings. Mixing per-atom and total-energy errors, or comparing forces in different units, can make an accuracy claim meaningless. Tests within one structural domain also do not establish behavior outside that domain.
Time advancement additionally depends on the integrator, step size, and other algorithm choices. A short trajectory that does not diverge provides bounded evidence, not proof of correct long-term sampling. If energy drift is examined, specify the system and controls first: mechanisms such as thermostats can intentionally exchange energy.
Define acceptance before measuring acceleration
Before replacing a component, fix a small representative set of configurations and retain inputs and reference outputs. Check equations, units, and precision, then inspect energy errors, directional force errors, and derivative consistency. Compare runtime only after establishing an acceptable correctness range.
A performance comparison should state system size, hardware, precision, warm-up, transfers, and timing boundaries. Timing one kernel can omit end-to-end costs. Dividing times for different precision or different calculations does not establish acceleration of the same workflow. No such device experiment was conducted here, so no synthetic performance table is supplied.
The cuPotential announcement points to a new computational tool. A useful reading habit is to separate four claims: faster execution, better energies, better forces, and suitability for a task. Each needs its own check. If this counterexample and validation order made simulation news easier to evaluate, voluntary support below is welcome.
Sources and backfill note
Sources: the NVIDIA announcement dated October 14, 2026, and OpenMM standard-force documentation. The Google News announcement item is timestamped October 14 at 16:19:53 UTC, before the planned slot. Derivations, diagrams, and code are original teaching content without real material data. Backfilled on the evening of October 15; the article date retains the planned 22:00 Beijing slot.
Support
If the explanations or examples helped you solve a problem or save time, you’re welcome to support this site with a voluntary tip.
Click a QR code to enlarge. More options: support page。


