TS Optimization + Imaginary-Mode Cleaning
A transition-state optimization with automatic imaginary-frequency displacement. This job first performs a saddle-point search on a TS guess and then, if more than one imaginary frequency is found, automatically displaces the geometry along the spurious modes and re-optimizes.
What It Runs
For each submitted job, Atomiverse executes:
- Saddle-point optimization on the TS guess.
- Vibrational analysis on the optimized structure.
- If multiple imaginary frequencies are found: displacement along each spurious mode followed by constrained (minimum) optimization.
- Final vibrational check on the cleaned structure.
The goal is to produce a transition state with exactly one imaginary frequency — the reaction coordinate mode.
Your First TS Opt + Imag Cleaning
import atomiverse
from atomiverse import (
Atoms,
JobFailedError,
TSOptimizationWithImagDisplacement,
)
from atomiverse.levels import GFN2_XTB
atomiverse.configure(api_key="your-api-key")
ts_guess = Atoms.from_smiles("[H][H]")
job = TSOptimizationWithImagDisplacement(
ts_atoms=ts_guess,
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"TS Energy: {result.energy:.6f} eV")
print(f"Imag. freq: {result.imaginary_frequency_cm1} cm⁻¹")
print(f"Imag. before cleaning: {result.n_imag_initial}")
print(f"Imag. after cleaning: {result.n_imag_final}")
Input Parameters
Required:
ts_atoms: transition-state guess structurelevel_of_theory: electronic-structure method
Optional:
charge(default0)multiplicity(default1)amplitude(default0.2): scaling factor for displacement along normal modes. Larger values push the geometry further from the saddle point.max_iterations(default3, max10): maximum number of iterative imag-cleaning cycles.
job = TSOptimizationWithImagDisplacement(
ts_atoms=ts_guess,
charge=0,
multiplicity=1,
level_of_theory=GFN2_XTB,
amplitude=0.3,
max_iterations=5,
)
Result
job.require_result() returns a TSOptimizationWithImagDisplacementResult.
| Field | Type | Description |
|---|---|---|
optimized_ts_atoms | Atoms | Final TS structure after optimization / cleaning. |
energy | float | Final energy in eV. |
imaginary_frequency_cm1 | float | None | Remaining imaginary frequency (the reaction mode). |
n_imag_initial | int | Number of imaginary modes before cleaning. |
n_imag_final | int | Number of imaginary modes after cleaning. |
displaced_modes | list[int] | Indices of modes that were displaced. |
ts_optimization_trajectory | list[TrajectoryStep] | Steps of the initial saddle-point search. |
Non-blocking Submission
from atomiverse import State
job.submit(wait=False)
job.refresh()
if job.state == State.DONE:
result = job.require_result()
print(f"TS Energy: {result.energy:.6f} eV")
elif job.state == State.FAILED:
print(job.require_failure().error)