Skip to content

How-to: QMMM

I open this issue to point out potential things to mention in an eventual QMMM how-to.


Software needed

For QMMM with SIESTA, you need two pieces of software:

  • An MM driver (we provide one within SIESTA).
  • SIESTA

The MM driver should run in serial, since that will have a negligible cost with respect to the QM part.

Both programs should have their own input files. If you are using the SIESTA-provided QMMM driver, this means that you will have two distinct fdf files: one for the driver, one for SIESTA. In addition, you need an amber.parm file in your working directory, which contains the relevant AMBER forcefield parameters. You can find examples of this file in the QMMM test directory; it largely follows the parm file format of the AMBER distribution.


Mandatory and recommended options

Most of the options for a QMMM run will be the same as the ones used in regular SIESTA. However, a few will be different between the file in the driver and the one in SIESTA.

Driver side:

  • NumberOfAtoms will mean exclusively the amount of QM atoms. Meanwhile, NumberOfMMAtoms means the number of classical MM atoms.

  • The block AtomicCoordinatesAndAtomicSpecies contains the coordinates for the QM atoms, while MM.atoms contains the coordinates for the MM atoms. Note that the MM.atoms block will take the coordinates in PDB format:

%block MM.Atoms ATOM 73 O HOH 2 14.215 5.165 20.627 ATOM 74 H1 HOH 2 14.663 4.172 20.808 ATOM 75 H2 HOH 2 13.537 4.912 19.849 ATOM 76 O HOH 3 4.306 6.340 11.404 ATOM 77 H1 HOH 3 4.354 6.831 10.464 ATOM 78 H2 HOH 3 3.349 5.998 11.548 %endblock MM.Atoms

  • The block QM.AtomTypes contains the MM atom types for the atoms QM region. This is important to calculate the LJ interaction between QM and MM.

%block QM.AtomTypes C C CA CA N N3 %endblock

  • MM.Cutoff is the cut-off for dispersion and coulomb interactions between classical MM atoms (suggested: at least 8 Ang). Cannot be larger than 1/2 the smallest side of the simulation box (if you have a 10x20x25 cell, then your cut-off can only be a maximum of 5).

  • QMMM.Cutoff sets the cut-off for dispersion (LJ) interactions between MM atoms and QM atoms (suggested: at least 8 Ang). Cannot be larger than 1/2 the smallest side of the simulation box.

  • MD-related options (and minimization too) should be added here, the MM driver will be the program moving stuff.

  • I/O options regarding electronic properties will not be read (bands, populations, grid properties), they need to be added in the SIESTA fdf file.

SIESTA side

  • We first need to indicate SIESTA that this will be an externally-driven QMMM simulation via MD.TypeOfRun qmmm.

  • QMMM.Ewald.CutOff sets the real space cut-off for QM-MM coulomb interactions, which then automatically sets the reciprocal-space cut-off and the gaussian width for the fictitious charges. Those too can be set manually using QMMM.Ewald.kcut and QMMM.Ewald.Alpha. These should not affect the numerical precision of the calculation, but rather only the total cost.

  • Options regarding communication. The QMMM driver will generate by default three pipes ("files") for communication with SIESTA. Using the systemLabel for the QMMM driver, they will be called systemlabel.siesta.coords/pc/forces. In order to indicate this to SIESTA, we will use tree options. Suppose the systemlabel for the QMMM driver is qmmm_wat, then we have:

QMMM.Driver.QMRegionFile qmmm_wat.siesta.coords QMMM.Driver.MMChargeFile qmmm_wat.siesta.pc QMMM.Driver.ForceOutFile qmmm_wat.siesta.forces

  • Options regarding the level of theory, k-points, and anything related to electronic structure should go here.

  • I/O options regarding electronic properties should go here.

  • MD-related options should go in the driver (except for MD.TypeOfRun), since SIESTA will ignore them.