Geometry optimization in Rowan is carried out using the geomeTRIC library.
Optimizing molecular geometries is a hard problem mathematically, so it's almost always a good idea to check that optimization actually succeeded by running a subsequent frequency calculation. In general, ground state should be free from imaginary frequencies (i.e. those with negative values); very small imaginary frequencies can sometimes be hard to eliminate, so it may be prudent to rerun the geometry optimization with higher precision. (This is an eternally debated point: see this discussion for some different perspectives.)
Rowan supports freezing bonds, angles, and dihedral angles in geometry optimizations. Constraints can be specified by tuning optimization settings in the Python API, or by clicking "Freeze New Coordinate" in the web interface. (Scans can only be run through the web interface.)
Any number of coordinates can be added, although in practice adding more than a handful tends to destabilize the optimization.
To specify a coordinate through the API, set the constraint type (bond
, angle
, or dihedral
) and the list of 1-indexed atom numbers (2, 3, or 4 atoms respectively).
The full API documentation is available here.
result = client.compute(
"calculation",
input_mol=molecule,
name="dimethyl ether constraint optimization",
method="aimnet2_wb97md3",
tasks=["optimize"],
opt_settings={"constraints": [
{"constraint_type": "angle", "atoms": [2, 1, 3]},
]},
)
Rowan also supports transition-state optimizations, which can be run by selecting the optimize_ts
task (“Optimize (TS)” in the web interface).
Constraints are not supported for transition-state optimizations.
For transition-state optimizations, we recommend running a subsequent frequency calculation to validate that a single imaginary frequency is present.
Finding transition states can be very challenging and requires a certain amount of chemical intuition and trial-and-error. In general, running an initial scan along the reaction coordinate is recommended.