Skip to content


The EMFTMethod object specifies the settings for using embedded mean-field theory (EMFT) as the method for a calculation.

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 papers 1, 2 and 3 for a detailed description of the method.

There are three required fields for creating an EMFTMethod object:

  • active for specifying the active (i.e. high-level) atom indices
  • high for specifying the high level DFTMethod
  • low for specifying the low level DFTMethod

All other calculation details such as SCF convergence criteria can be specified in the details dictionary.

Guidelines for Subsystem Partitioning

We provide the following guidelines for making a good subsystem partitioning:

  • EMFT works best if the subsystems are partitioned across single bonds or between separated fragments. Although by design EMFT works with partitioning across double bonds or conjugated bonding networks, the accuracy is typically much lower.
  • For charge-manifestation molecules and reactions (including ionization, electron attachment, or deprotonation), try to avoid use of minimal basis sets for the low-level subsystem. See this paper for detailed analysis of EMFT errors using mixed basis sets.
  • Try to avoid use of LDA functionals and recommend using GGAs for the low-level subsystem, since the latter provides much more accurate description of the electronic structure at marginal additional cost.
  • It is recommended that the basis sets in the high and low level subsystems diff by no more than "one zeta". For example, if a triple-zeta quality basis set is used for the high-level subsystem, then the low-level subsystem should use a basis set that is at least double-zeta quality to achieve reasonable accuracy.


The following example demonstrates how to create and use EMFTMethod with a SingleInput to calculate the energy of a molecule. Note that the level_shift option should not be used inside the high and low DFTMethods.

import sierra
from sierra.inputs import *

# Create an ethanol molecule from pubchem (internet connection required)
ethanol = Molecule(pubchem="ethanol")

# Perform an EMFT energy calculation on ethanol,
# with the hydroxyl group treated at B3LYP/Def2-SVP level of theory
# and the remaining atoms treated at PBE/STO-3G level of theory
emft_input = SingleInput(
        active=[0, 8],  # indices of atoms in the hydroxyl group
        high=DFTMethod(xc="B3LYP", ao="def2-svp"),
        low=DFTMethod(xc="PBE", ao="sto-3g"),
emft_result =
print(f"EMFT energy: {} Hartree")
#> EMFT energy: -153.863563 Hartree


All of the fields in MethodBase and the following:


Specify the active (i.e. high-level) subsystem by providing a list of indices for those atoms that belong to the high-level region.

  • Type: List[int]

Specify the high level of theory.


Specify the high level of theory.


Dict containing additional detail options. See below.

  • Type: Dict[str, Any]

Available options for details


Maximum number of SCF iterations.

  • The type is int
  • The default is 128
  • The value must be nonnegative

SCF convergence threshold using the absolute value of the energy difference between iterations.

  • The type is float
  • The default is 1e-6
  • The value must be nonnegative

SCF convergence threshold using the infinity norm of the orbital gradient.

  • The type is float
  • The default is 1e-5
  • The value must be nonnegative

Turn on level shifting to improve SCF convergence. Raises the energy of virtual orbitals by level shifting value. The level shift is removed at the end of the calculation.

  • The type is float
  • The default is 0
  • The value must be nonnegative

Specify the temperature for the electrons and perform the SCF calculation in the canonical-ensemble. Convergence is often poor with the default convergence settings, and using the original Pulay DIIS method is recommended (see diis option).

  • The type is a temperature quantity, i.e. a string consisting of a number and a temperature unit.
  • The default is 0 kelvin

Method of DIIS.