Skip to content

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.

Next: Vibrational Frequency Calculations