Table of Contents

How to Calculate Energy and Forces

Introduction

In this tutorial, we are going to show the reader how to perform a simple static self-consistent Kohn-Sham Density Functional Theory energy and force calculation on a system using QUICKSTEP.

We will use face centred cubic bulk Si, with 8 atoms in a cubic unit cell as an example. The example files are contained in static_calculation.tgz. The calculations were carried out with CP2K version 2.4.

The reader should note that the integration grid settings used in the example calculations have already chosen to be sufficient for the given accuracy. A separate tutorial is available to show how to achieve this.

Input Files

We first look at the input files required for this calculation. The necessary input files are:

A list of basis set and pseudopotential files may be found in cp2k/data/ that comes with a cp2k source release. These should cover most of the commonly used elements. The user will, however, need to produce their own main input file for a given calculation.

Let us look at the main input: Si_bulk8.inp in detail. The name of this file can be arbitrary, so is the file extension. The input file is structured into ordered blocks and keywords, the order of which are unimportant. Each input block is referred to as a “section” in this tutorial, and some sections are “subsections” of other sections. Full definitions of the input file format and keywords is available via the ''CP2K'' input reference manual.

The input file is shown below:

&GLOBAL
  PROJECT Si_bulk8
  RUN_TYPE ENERGY_FORCE
  PRINT_LEVEL LOW
&END GLOBAL
&FORCE_EVAL
  METHOD Quickstep
  &SUBSYS
    &KIND Si
      ELEMENT   Si
      BASIS_SET DZVP-GTH-PADE
      POTENTIAL GTH-PADE-q4
    &END KIND
    &CELL
      A     5.430697500    0.000000000    0.000000000
      B     0.000000000    5.430697500    0.000000000
      C     0.000000000    0.000000000    5.430697500
    &END CELL
    &COORD
      Si    0.000000000    0.000000000    0.000000000
      Si    0.000000000    2.715348700    2.715348700
      Si    2.715348700    2.715348700    0.000000000
      Si    2.715348700    0.000000000    2.715348700
      Si    4.073023100    1.357674400    4.073023100
      Si    1.357674400    1.357674400    1.357674400
      Si    1.357674400    4.073023100    4.073023100
      Si    4.073023100    4.073023100    1.357674400
    &END COORD
  &END SUBSYS
  &DFT
    BASIS_SET_FILE_NAME  BASIS_SET
    POTENTIAL_FILE_NAME  GTH_POTENTIALS
    &QS
      EPS_DEFAULT 1.0E-10
    &END QS
    &MGRID
      NGRIDS 4
      CUTOFF 300
      REL_CUTOFF 60
    &END MGRID
    &XC
      &XC_FUNCTIONAL PADE
      &END XC_FUNCTIONAL
    &END XC
    &SCF
      SCF_GUESS ATOMIC
      EPS_SCF 1.0E-7
      MAX_SCF 300
      &DIAGONALIZATION  ON
        ALGORITHM STANDARD
      &END DIAGONALIZATION
      &MIXING  T
        METHOD BROYDEN_MIXING
        ALPHA 0.4
        NBROYDEN 8
      &END MIXING
    &END SCF
  &END DFT
  &PRINT
    &FORCES ON
    &END FORCES
  &END PRINT
&END FORCE_EVAL

The main sections in the input file are:

We look at each section in detail. The GLOBAL section in Si_bulk8.inp is presented below:

&GLOBAL
  PROJECT Si_bulk8
  RUN_TYPE ENERGY_FORCE
  PRINT_LEVEL LOW
&END GLOBAL

We will be doing a static energy and force calculation, in this case, we must set ''RUN_TYPE'' to ENERGY_FORCE. Keyword ''PROJECT'' is an alias for PROJECT_NAME, which sets the root-name of the calculation, in this case Si_bulk8. Any output files automatically generated by CP2K will have the name prefixed by Si_bulk8. ''PRINT_LEVEL'' controls the default verbosity of the main output of CP2K, in this example, it is set to “low”. The verbosity of the output can be fine-tuned by overriding this setting in each individual subsection of the input.

We now explain the section FORCE_EVAL line-by-line.

METHOD Quickstep

The keyword ''METHOD'' chooses the method for evaluating the forces on atoms to QUICKSTEP, i.e. Density Functional Theory using the Gaussian and Planewaves (GPW) method.

&SUBSYS
  &KIND Si
    ELEMENT   Si
    BASIS_SET DZVP-GTH-PADE
    POTENTIAL GTH-PADE-q4
  &END KIND
  &CELL
    A     5.430697500    0.000000000    0.000000000
    B     0.000000000    5.430697500    0.000000000
    C     0.000000000    0.000000000    5.430697500
  &END CELL
  &COORD
    Si    0.000000000    0.000000000    0.000000000
    Si    0.000000000    2.715348700    2.715348700
    Si    2.715348700    2.715348700    0.000000000
    Si    2.715348700    0.000000000    2.715348700
    Si    4.073023100    1.357674400    4.073023100
    Si    1.357674400    1.357674400    1.357674400
    Si    1.357674400    4.073023100    4.073023100
    Si    4.073023100    4.073023100    1.357674400
  &END COORD
&END SUBSYS

The subsection ''SUBSYS'' defines the simulation unit cell and the initial coordinates of atoms in the calculation.

The subsection ''KIND'' gives definitions of elements in the calculation. There must be one KIND subsection per element. In this example, for Si, we have defined the basis set to be used: DZVP-GTH-PADE (double-\(\zeta\) with polarisation basis optimised for Geodecker-Teter-Hutter PADE LDA pseudopotential); and the pseudopotential: GTH-PADE-q4 (Geodecker-Teter-Hutter PADE LDA pseudopotential with 4 valence electrons).

The basis set and pseudopotential names must correspond to an existing entry in the corresponding basis set and pseudopotential files defined by ''BASIS_SET_FILE_NAME'' and ''POTENTIAL_FILE_NAME'' keywords in ''DFT'' subsection, in FORCE_EVAL section. The chosen basis for Si corresponds to parameters:

Si DZVP-GTH-PADE
  2
  3  0  1  4  2  2
        1.2032422345   0.3290350445   0.0000000000   0.0474539126   0.0000000000
        0.4688409786  -0.2533118323   0.0000000000  -0.2594473573   0.0000000000
        0.1679863234  -0.7870946277   0.0000000000  -0.5440929303   0.0000000000
        0.0575619526  -0.1909898479   1.0000000000  -0.3624010364   1.0000000000
  3  2  2  1  1
        0.4500000000   1.0000000000

in file BASIS_SET; and the chosen pseudopotential corresponds to parameters:

Si GTH-PADE-q4 GTH-LDA-q4
    2    2
     0.44000000    1    -7.33610297
    2
     0.42273813    2     5.90692831    -1.26189397
                                        3.25819622
     0.48427842    1     2.72701346

in file GTH_POTENTIALS.

The subsection ''CELL'' defines the simulation unit cell used in a calculation. In this example, we define the unit cell as cubic, with lattice constant equal to 5.4306975 Angstroms. “Angstrom” is the default unit for cell vectors. ''A'', ''B'' and ''C'' are the first, second and third lattice (cell) vectors. There are many ways to define the cell, see ''CP2K'' input reference manual for more details.

The initial atomic coordinates are specified in the ''COORD'' subsection. The default input format for atomic coordinates in CP2K is:

<ATOM_KIND> X Y Z

where X, Y and Z are Cartesian coordinates in Angstroms. This can be changed by configuring keyword ''SCALED'' to .TRUE., in the COORD subsection, which makes the coordinate input X Y Z to be fractional with respect to the lattice vectors. One can also change the unit for the Cartesian coordinates by setting the keyword ''UNIT'' with in the subsection. <ATOM_KIND> should be a label that corresponds to the definition of the elements in the ''KIND'' subsections.

After the SUBSYS section in the input file Si_bulk8.inp follows the ''DFT'' subsection, which controls all aspects of the self-consistent Kohn-Sham Density Functional Theory calculation. This subsection is only relevant if and only if the METHOD keyword in FORCE_EVAL is set to QUICKSTEP.

BASIS_SET_FILE_NAME  BASIS_SET
POTENTIAL_FILE_NAME  GTH_POTENTIALS

As already mentioned above, the keywords ''BASIS_SET_FILE_NAME'' and ''POTENTIAL_FILE_NAME'' set the files that contains basis set and pseudopotential parameters.

&QS
  EPS_DEFAULT 1.0E-10
&END QS

The ''QS'' subsection contains general control parameters used by QUICKSTEP. ''EPS_DEFAULT'' sets the default value for all tolerances used within QUICKSTEP. The individual tolerances (EPS_*) can be set, and they will override the EPS_DEFAULT value.

&MGRID
  NGRIDS 4
  CUTOFF 300
  REL_CUTOFF 60
&END MGRID

The ''MGRID'' subsection defines how the integration grid used in QUICKSTEP calculations should be setup. QUICKSTEP uses a multi-grid method for representing Gaussian functions numerically on the grid. Narrow and sharp Gaussians are mapped onto a finer grid than wider and smoother Gaussians. In this case, we are telling the code to set up 4 levels of multi-grids, with the planewave cutoff of the finest grid set to be 300 Ry, and with the grid spacing underneath any Gaussian functions to be finer than the equivalent planewave cutoff of 60 Ry. The users should read the tutorial “Converging the CUTOFF and REL_CUTOFF” for details on how these parameters affect the grid constructed, and how to define a sufficient grid for their calculation. In this example, the grid defined has already been found to be sufficient for the energy and force calculation.

The ''XC'' subsection follows:

&XC
  &XC_FUNCTIONAL PADE
  &END XC_FUNCTIONAL
&END XC

This defines which exchange-correlation density functional we want to use. In this we choose PADE LDA functional, which is consistent with the basis set and pseudopotential we have chosen.

&SCF
  SCF_GUESS ATOMIC
  EPS_SCF 1.0E-7
  MAX_SCF 300
  &DIAGONALIZATION
    ALGORITHM STANDARD
  &END DIAGONALIZATION
  &MIXING
    METHOD BROYDEN_MIXING
    ALPHA 0.4
    NBROYDEN 8
  &END MIXING
&END SCF

The ''SCF'' subsection defines all the settings related to methods used to find a self-consistent solution of the Kohn-Sham DFT formalism.

''SCF_GUESS'' sets how the initial trial electron density function \(\rho(\vec{r})\) is to be generated. In this example (ATOMIC), the initial density is to be generated using overlapping of atomic charge densities. A good starting point for the electron density in the self-consistency loop is important in obtaining a convergent result quickly. ''EPS_SCF'' sets the tolerance of the charge density residual. This overrides the EPS_DEFAULT value set in QS subsection. ''MAX_SCF'' sets the maximum number of self-consistency loops QUICKSTEP is allowed to perform for each ground-state energy calculation.

&DIAGONALIZATION  ON
  ALGORITHM STANDARD
&END DIAGONALIZATION

The ''DIAGONALIZATION '' subsection tells the code to use the traditional diagonalisation method for finding the ground state Kohn-Sham energy and electron density. The subsection heading also takes an argument, and in this case is set to “ON”, which equivalent to “.TRUE.” or “T”, and indicates that the diagonalisation method is turned on. One can also omit the value of the subsection heading, which defaults to “.TRUE.”. The alternative to diagonalisation is to use the Orbital Transform (OT) method, in which case, the user should either delete the DIAGONALIZATION block or change “ON” to “OFF” (or “.FALSE.”), and add the ''OT'' subsection instead. The ''ALGORITHM'' keyword sets the algorithm to use for diagonalisation of the Kohn-Sham Hamiltonian. “STANDARD” means the standard LAPACK/SCALAPACK subroutines are to be used for diagonalisation.

&MIXING  T
  METHOD BROYDEN_MIXING
  ALPHA 0.4
  NBROYDEN 8
&END MIXING

The ''MIXING'' subsection contains all the parameters associated with charge mixing in a self-consistency calculation. The subsection also admits a value, which can be either .TRUE. (T) or .FALSE. (F), which switches charge mixing on or off. The default is .TRUE.. Note that this subsection only applies to the traditional diagonalisation method. The OT method uses a different approach for charge mixing, and is explained in other tutorials. The keyword ''ALPHA'' sets the mixing parameter; in this example 0.4 of the output density will be mixed with 0.6 of the input density to form the new input density in the next SCF iteration. The keyword ''METHOD'' sets the mixing method; in this case, we will use Broyden mixing. The keyword ''NBROYDEN'' is an alias to the parameter NBUFFER, and it sets the number of histories to be used in the Broyden mixing algorithm.

The final ''PRINT'' subsection in FORCE_EVAL section:

&PRINT
  &FORCES ON
  &END FORCES
&END PRINT

tells CP2K, in this case, to print out atomic forces in the main output of the calculation.

Running the Calculation

To run the calculation, the reader needs to have a working CP2K package compiled, and with the path to its binaries in the system PATH. The files Si_bulk8.inp, BASIS_SET and GTH_POTENTIAL should be in the same working directory. In this example, we will use the MPI version of CP2K. Type command:

mpirun -n 2 cp2k.popt -o Si_bulk8.out Si_bulk8.inp &

in the working directory to run CP2K in parallel with 2 MPI processes in the background. The -o option redirects the CP2K output to file Si_bulk8.out. Note that the -o option appends output of successive runs to Si_bulk8.out, so if the reader wants to start completely from afresh, they must delete Si_bulk8.out before running a new calculation.

Obtaining the Results

After the job has finished, we should obtain the following files:

The file Si_bulk8.out contains the main output of the job. Si_bulk8-RESTART.wfn is the final Kohn-Sham wavefunctions from the calculation. Si_bulk8-RESTART.wfn.bak-<n> records the Kohn-Sham wavefunctions obtained from the <n>-th previous SCF step; in this case, Si_bulk8-RESTART.wfn.bak-1 contains the wavefunctions obtained from the last SCF step. Should the reader want to start a new calculation from the previous calculated wavefunctions, they need to change the SCF_GUESS keyword in SCF subsection of FORCE_EVAL section to RESTART:

SCF_GUESS RESTART

provided that the new calculation shares the same PROJECT_NAME as the one that generated the wavefunctions. Otherwise, we would need to rename the restart wavefunction files to correspond to the project name of the new calculation.

We now look at the main CP2K output in more detail.

Number of electrons:                                                         32
Number of occupied orbitals:                                                 16
Number of molecular orbitals:                                                16

Number of orbital functions:                                                104
Number of independent orbital functions:                                    104

Extrapolation method: initial_guess


SCF WAVEFUNCTION OPTIMIZATION

 Step     Update method      Time    Convergence         Total energy    Change
 ------------------------------------------------------------------------------
    1 NoMix/Diag. 0.40E+00    0.6     0.75558724       -32.2320848878 -3.22E+01
    2 Broy./Diag. 0.40E+00    1.1     0.05667976       -31.1418135481  1.09E+00
    3 Broy./Diag. 0.40E+00    1.1     0.09691469       -31.1974003416 -5.56E-02
    4 Broy./Diag. 0.40E+00    1.1     0.00245608       -31.3378474040 -1.40E-01
    5 Broy./Diag. 0.40E+00    1.1     0.00235460       -31.3009654398  3.69E-02
    6 Broy./Diag. 0.40E+00    1.1     0.00007565       -31.2972158934  3.75E-03
    7 Broy./Diag. 0.40E+00    1.1     0.00009004       -31.2977293749 -5.13E-04
    8 Broy./Diag. 0.40E+00    1.1     0.00000186       -31.2978454163 -1.16E-04
    9 Broy./Diag. 0.40E+00    1.1     0.00000252       -31.2978835492 -3.81E-05
   10 Broy./Diag. 0.40E+00    1.1     5.6405E-09       -31.2978852054 -1.66E-06

 *** SCF run converged in    10 steps ***

The above shows a typical output from a self-consistent Kohn-Sham ground state calculation. It states that we are using diagonalisation method with Broyden charge mixing, and it took 10 Broyden mixing steps (each containing a diagonalisation process to obtain the wavefunctions) to reach the required tolerance for self-consistency.

 Electronic density on regular grids:        -31.9999999889        0.0000000111
 Core density on regular grids:               31.9999999939       -0.0000000061
 Total charge density on r-space grids:        0.0000000051
 Total charge density g-space grids:           0.0000000051

 Overlap energy of the core charge distribution:               0.00000000005320
 Self energy of the core charge distribution:                -82.06393942512820
 Core Hamiltonian energy:                                     18.06858429706010
 Hartree energy:                                              42.41172824581682
 Exchange-correlation energy:                                 -9.71425832315952

 Total energy:                                               -31.29788520535761

ENERGY| Total FORCE_EVAL ( QS ) energy (a.u.):              -31.297885372811002


ATOMIC FORCES in [a.u.]

# Atom   Kind   Element          X              Y              Z
     1      1      Si          0.00000000     0.00000000     0.00000000
     2      1      Si          0.00000000     0.00000001     0.00000001
     3      1      Si          0.00000001     0.00000001     0.00000000
     4      1      Si          0.00000001     0.00000000     0.00000001
     5      1      Si         -0.00000001    -0.00000001    -0.00000001
     6      1      Si         -0.00000001    -0.00000001    -0.00000001
     7      1      Si         -0.00000001    -0.00000001    -0.00000001
     8      1      Si         -0.00000001    -0.00000001    -0.00000001
SUM OF ATOMIC FORCES          -0.00000000    -0.00000000    -0.00000000     0.00000000

The above shows the results on final energies and forces. One should always check if the total number of electrons calculated from the final electron density, in this case 31.9999999939, is correct.

The results show that the force on the atoms are almost zero. This means the system is more or less relaxed, and its geometry is close to its optimal at ground state.

Adding Smearing

In the example so far, we have not used any smearing on electron occupation. This is fine for system with a large band gap. However, for metals or systems with a small gap, this may cause the calculation to be unstable, and the self-consistency loop may never converge, due to the discontinuity in the electron occupation function.

To add smearing, we need to add the subsection ''SMEAR'' inside subsection SCF:

&SMEAR ON
  METHOD FERMI_DIRAC
  ELECTRONIC_TEMPERATURE [K] 300
&END SMEAR

This tells QUICKSTEP to use a smearing function for the electron occupation. In this example, we use the Fermi-Dirac smearing function, with the electron temperature being set to 300 K. Note that, in CP2K, one can explicitly define the unit of a given input value by using a unit enclosed in square bracket, such as “[K]”, before the value.

This is not all, since smearing may lead to occupation of molecular orbitals in the conduction band, we must tell CP2K to include extra, empty, molecular orbitals into the calculation, which otherwise would be omitted (for reducing computational cost). To do this, we need to add the keyword ''ADDED_MOS'' in the SCF subsection:

ADDED_MOS 10

In this example, we have asked CP2K to not to omit 10 of the lowest empty molecular orbitals in the calculation. It should be noted that given a chosen basis set, there is a maximum number of molecular orbitals, i.e. the number of eigenvectors of the Hamiltonian, one can generate. In theory, the maximum should be the rank of the Hamiltonian generated in the calculation.

In the output of the calculation using smearing, we first notice that:

Number of electrons:                                                         32
Number of occupied orbitals:                                                 16
Number of molecular orbitals:                                                26

Number of orbital functions:                                                104
Number of independent orbital functions:                                    104

unlike in the previous case with no smearing, now 26 molecular orbitals have been used during the calculation. There are a total of 104 basis functions (“atom centred orbitals” spanned by Cartesian Gaussians) used in the calculation for the given basis set, so 26 is well within the limit of the calculation.

 Electronic density on regular grids:        -31.9999999889        0.0000000111
 Core density on regular grids:               31.9999999939       -0.0000000061
 Total charge density on r-space grids:        0.0000000051
 Total charge density g-space grids:           0.0000000051

 Overlap energy of the core charge distribution:               0.00000000005320
 Self energy of the core charge distribution:                -82.06393942512820
 Core Hamiltonian energy:                                     18.06842027191411
 Hartree energy:                                              42.41184371469986
 Exchange-correlation energy:                                 -9.71419454555998
 Electronic entropic energy:                                  -0.00001687947145
 Fermi energy:                                                 0.20867150262130

 Total energy:                                               -31.29788686349247

ENERGY| Total FORCE_EVAL ( QS ) energy (a.u.):              -31.297887031736590

In the final energy section of the output, we notice that there is an extra entropy \((TS)\) term:

Electronic entropic energy:                                  -0.00001687947145

This should be small for the calculation to be a reliable approximation to the zero electron temperature result. The final free energy is the sum of the total DFT energy and the entropic energy. The total DFT energy is given by:

Total energy:                                               -31.29788686349247

and the final free energy extrapolated for \(TS \to 0\) is given by:

ENERGY| Total FORCE_EVAL ( QS ) energy (a.u.):              -31.297887031736590

This is the energy to be quoted as the final result.