Geometry optimizations
Geometry Optimizations
Qcore provides robust geometry optimization algorithms, which allow us to optimize a molecule to a local energy minimum or a transition-state geometry, with and without geometric constraints.
In this section, we demonstrate the use of Qcore to perform geometry optimization with and without constraints; transition-state optimization will be covered in another section.
The command for running a geometry optimization is optimize()
. There are several coordinate systems that can be used for geometry optimization: tric
, irc
, hdlc
, and xyz
, with the tric
coordinates being the default, since they are well suited for molecular clusters while maintaining efficiency for individual molecules.
1. Full geometry optimization
The minimal input for running a full geometry optimization looks like this:
optimize(
structure(molecule = methanol)
xyz_output = 'methanol_opt.xyz'
xtb()
)
In this example, we want to optimize a methanol molecule, starting from the built-in geometry, using the tric
coordinate system (which is the default) and the GFN-xTB method for providing the energy and gradients. The finally optimized geometry is saved to an XYZ format file methanol_opt.xyz
.
Below is another example of running full geometry optimization at DFT B3LYP/6-31G* level of theory, using the hdlc
coordinate system. Note how easy it is to change between energy methods (DFT vs. GFN-xtb).
optimize(
structure( molecule = methanol )
coordinates = hdlc
xyz_output = 'methanol_opt.xyz'
dft( xc = B3LYP ao = '6-31G*' )
)
2. Constrained geometry optimization
Qcore allows for geometry optimization with various geometric constraints, including:
- Freezing the Cartesian coordinates of atoms in absolute space
- Freezing bonds, angles, and dihedrals at their initial values
- Setting bonds, angles, and dihedrals to target values
- Combination of the preceding options
Here is example input for running a constrained geometry optimization:
optimize(
structure( molecule = methanol )
bond(atoms=[1, 3] frozen = true)
angle(atoms=[2, 1, 3]
value = 108.5 degree)
dihedral(atoms=[2, 1, 3, 4]
frozen = true)
xyz_output = 'methanol_opt.xyz'
xtb()
)
In this example, we choose to optimize the geometry of methanol with multiple constraints:
- Freezing the C-O bond length at its initial value
- Setting the H-O-C angle to a fixed value of 108.5 degree
- Freezing the dihedral angle H-O-C-H at its initial value
Additional options/subcommands for performing geometry optimizations can be found in the user manual.