Skip to main content

Single-Point Hessian

A single-point Hessian (Grimme's biased Hessian) computes a bias-corrected finite-difference Hessian at the input geometry without requiring a stationary point. An internal biasing potential holds the geometry near the reference, the biased surface is relaxed, and the known bias contribution is subtracted after finite differences.

This is useful when the input geometry is not fully optimized — for example, a structure extracted from a molecular dynamics snapshot or a partially converged optimization.

Your First Single-Point Hessian

import atomiverse
from atomiverse import Atoms, JobFailedError, SinglePointHessian
from atomiverse.levels import GFN2_XTB

atomiverse.configure(api_key="your-api-key")

water = Atoms.from_smiles("O")

job = SinglePointHessian(
atoms=water,
level_of_theory=GFN2_XTB,
)

job.submit()

try:
result = job.require_result()
except JobFailedError as exc:
print(f"Job failed: {exc.failure.error}")
else:
print(f"Hessian dimension: {len(result.hessian)}")
for freq in result.frequencies:
print(f"{freq:10.2f} cm^-1")

Result

job.require_result() returns a SinglePointHessianResult with two fields:

FieldTypeUnitsShape
hessianlist[list[float]]Hartree/Angstrom^2(3 * n_atoms, 3 * n_atoms)
frequencieslist[float]cm^-1variable

Imaginary modes are returned as negative frequencies. The result has the same shape and units as the standard Vibrations result, but the computation does not require the geometry to sit at a stationary point.

Charge, Multiplicity, and Level of Theory

These work exactly as for other job types:

job = SinglePointHessian(
atoms=molecule,
charge=-1,
multiplicity=2,
level_of_theory=GFN2_XTB,
)

See Levels of Theory for all available methods and Single Point Energy for charge/multiplicity details.

When to Use Single-Point Hessian

The single-point Hessian is intended for geometries that are not fully converged — for example:

  • A geometry from an MD snapshot
  • A partially converged optimization where you want quick frequency information
  • Structures where a full optimization is impractical or undesirable

For optimized minima or transition states, use the standard Vibrations job instead, which performs a conventional finite-difference Hessian on the stationary point.

Handling Failures

The most common failures are unsupported elements or charge/multiplicity combinations, unreasonable geometries, and methods that cannot evaluate the requested structure.

from atomiverse import JobFailedError

job.submit()

try:
result = job.require_result()
except JobFailedError as exc:
print(f"Single-point Hessian failed: {exc.failure.error}")
else:
print(result.frequencies)
print(result.hessian[0][0])