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:
| Field | Type | Units | Shape |
|---|---|---|---|
hessian | list[list[float]] | Hartree/Angstrom^2 | (3 * n_atoms, 3 * n_atoms) |
frequencies | list[float] | cm^-1 | variable |
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])