3.21 Many-Body Dispersion (MBD) method

The many-body dispersion (MBD) method calculates the long-range van der Waals (vdW) energy of a system by modeling the response of atoms with quantum harmonic oscillators coupled via a dipole potential [297, 296]. Two versions of MBD are available in FHI-aims, MBD@rsSCS and MBD-NL, both via the included Libmbd library [138].

MBD@rsSCS

Refer to caption
Figure 3.5: Schematic description of the MBD@rsSCS method.

In the range-separated self-consistently screened (rsSCS) version of MBD (MBD@rsSCS) [8], the vdW energy is calculated in three steps (Figure 3.5). First, the free-atom reference vdW parameters (polarizabilities, C6 coefficients, vdW radii) are scaled with the ratio of Hirshfeld volumes of atoms in the system and of the respective free atoms. Second, the self-consistent screening equation for the dipole oscillators is solved to account for short-range screening between the atoms. Third, the MBD Hamiltonian is solved to obtain the vdW energy.

MBD-NL

The more recent nonlocal (NL) version of MBD (MBD-NL) incorporates several ingredients from the class of nonlocal vdW density functionals to extend the applicability of MBD@rsSCS to ionic and hybrid metal-organic systems [137]. Compared to MBD@rsSCS, the atomic vdW parameters are obtained by coarse-graining a modified Vydrov–Van Voorhis polarizability functional, and the self-consistent screening step is skipped.

Analytical forces and stress are implemented for both versions of MBD, with the following caveat. The total nuclear derivatives of the MBD energy consist of the direct terms and of the implicit terms arising from the dependence on the vdW parameters, which in turn depend either on Hirshfeld volumes (MBD@rsSCS) or the polarizability functional (MBD-NL), which depend on the electron density, which finally depends on nuclear coordinates. Currently, the latter implicit terms are neglected, however, preliminary testing suggests that these terms are negligible in most systems. In fact, the error arising from neglecting these terms seems to be in general comparable to or smaller than the inherent numerical noise in the Kohn–Sham forces. Having said that, please report any observed discrepancies in the forces during geometry relaxations or MD simulations to dev@jan.hermann.name.

Tags for general section of control.in:

The following two keywords activate either the MBD@rsSCS (many_body_dispersion) or the MBD-NL (many_body_dispersion_nl) method. The optional arguments are shared by both methods.

 

Tag: many_body_dispersion(control.in)

Usage: many_body_dispersion [option=value…]

 

Tag: many_body_dispersion_nl(control.in)

Usage: many_body_dispersion_nl [option=value…]

  • beta=<real> [default: depends on XC functional] sets the damping parameter β.

  • k_grid=<integer>:<integer>:<integer> [default: taken from k_grid] specifies the k-point grid used for sampling the first Brillouin zone in the MBD calculation. The grid is shifted by half a distance between the k-points from the Γ-point. Note that if either generalized_regular_k_grid or k_points_external are used, then specification of this k_grid option is mandatory. [only for periodic systems]

  • freq_grid=<integer> [default: 15] controls the size of the imaginary-frequency grid used for the Casimir–Polder integral.

  • self_consistent=<logical> [default: .false.] turns on self-consistency as explained under vdw_correction_hirshfeld_sc. Currently, this works only for MBD@rsSCS.

  • vdw_params_kind=<string> [default: "ts"] specifies the set of free-atom vdW parameters (α0, C6, RvdW) used. "ts" uses the original set of parameters, "tssurf" uses values from the so-called vdWsurf approach [267] for some of the elements. The used parameters are listed here. This option should be left unchanged with MBD-NL, which is designed to work with the default set of vdW parameters in all cases.

Examples:

  • many_body_dispersion (this uses the default settings)

  • many_body_dispersion_nl beta=0.8 k_grid=3:3:3 (explicit settings of the damping parameter and of a 3×3×3 k-point grid)

Caveats:

  • The many_body_dispersion approach, i.e., the MBD@rsSCS approach, should work reliably for dispersion bonded systems. However, the associated Hamiltonian can have negative eigenvalues for systems that are more strongly bonded, typically ionic or metallic systems. If this happens, this would be the result of too high polarizability as predicted by the Hirshfeld volumes. The code will stop if this happens.

  • The many_body_dispersion_nl is a more advanced scheme and is expected to do a much better job of not overpolarizing parts of the system. Negative eigenvalues should occur much less frequently (hopefully only in corner cases).

  • If negative eigenvalues of the MBD Hamiltonians occur, the best path forward is an assessment if this particular approach to include dispersion contributions is physically appropriate for the system in question.

Deprecated FHI-aims implementation (pre-2019 default)

 

Tag: many_body_dispersion_pre2019(control.in)

Usage: many_body_dispersion_pre2019 [option=value…]
Purpose: Calculates the MBD@rsSCS energy for the active XC functional (available for PBE, PBE0, and HSE).

This was the default method prior the official 2019 FHI-aims release. The default has changed to the Libmbd implementation many_body_dispersion described above.

  • k_grid=<nk1>:<nk2>:<nk3> [default: taken from k_grid] specifies the k-point grid used for sampling the first Brillouin zone in the MBD calculation. The grid is shifted by half a distance between the k-points from the Γ-point. [only for periodic systems]

  • vacuum=<a>:<b>:<c> [default: all .false.] controls whether some of the lattice vectors correspond to vacuum dimensions.

  • self_consistent=<logical> [default: .false.] controls the calculation of the MBD XC potential.

  • beta=<real> [default: depends on XC functional] sets the damping parameter β.