Skip to content

Energy evaluations

Qcore provides efficient energy calculations using a variety of standard electronic structure methods, including DFT, GFN-xTB, and MP2. Moreover, Qcore provides quantum embedding approaches, including embedded mean-field theory (EMFT) and ONIOM, to target computational resources at the high-accuracy description of important regions. In this section, we will demonstrate single-point energy calculations using DFT, GFN-XTB, and EMFT.

1. Density functional theory

The minimal input for running a DFT calculation looks like this:

dft(
  structure(molecule = water)
  xc = pbe
  ao = '6-31G*'
)

This input corresponds to a DFT energy calculation on the built-in molecule water using the PBE exchange-correlation functional and the 6-31G* AO basis set. All other calculation details such as charge, spin multiplicity, SCF convergence assume default values. Here is another input file with a greater level of detail:

dft(
  structure(
    xyz = [[O,  0.0000,  0.0000, 0.0000],
           [H,  1.0105, -0.8179, 0.0000],
           [H, -1.0882, -0.8808, 0.0000]]
  )
  xc = pbe
  ao = '6-31G*'
  charge = 1   ! this is how comments work
  multiplicity = doublet
  max_iter = 20
  print_level = 1
)

In this example, we highlight the following options:

  • The molecular structure can be specified in-line using option xyz; alternatively, it can be read from an XYZ file, using the file option within the structure() subcommand
  • The total charge of the molecule is specified using the charge option
  • The spin multiplicity of the molecule is specified using the multiplicity option
  • The maximum number of SCF iterations is specified using the max_iter option
  • The print_level option controls the verbosity of output (and works almost everywhere)
  • Additional options/subcommands for performing DFT calculations can be found in the documentation

2. GFN-xTB

The minimal input for running a GFN-xTB calculation looks like this:

xtb(
  structure(molecule = water)
)

As for DFT, the total charge and print level can also be specified within the `xtb()`` command. In cases where the SCF is difficult to converge, we can choose different values for the Fock matrix damping:

xtb(
  structure(molecule = water)
  fock_damping = 0.9
  fock_damping_gradient_threshold = 0.3
)

3. EMFT

EMFT is a quantum-embedding method in which the atoms are partitioned into two subsystems, with the "active" subsystem typically treated at a higher level of mean-field theory and the "environment" subsystem treated at a lower level of mean-field theory. See this paper for a detailed description of the method.

The minimal input for an EMFT energy calculation looks like this:

emft(
  structure(molecule = methanol)
  active = [1, 2] ! the -OH group
  dft(xc = B3LYP ao = 'Def2-TZVP')
  dft(xc = PBE ao = 'Def2-SVP')
)

The EMFT energy calculation is run through the emft() command, which includes the following options/subcommands:

  • The active subsystem is specified using the active option, whose values are a list of atom indices; the environment subsystem includes the remaining atoms
  • The high-level and low-level of theory are specified by the dft() subcommand, each specifying the exchange-correlation functional and AO basis set for each subsystem
  • In the above example, the high-level subsystem corresponds to the –OH group of the methanol molecule (i.e. atoms 1 and 2 in the molecular structure specification); the high-level DFT method is B3LYP/Def2-TZVP, and the low-level method is PBE/Def2-SVP

Next: Geometry optimizations