dftd3 / simple-dftd3

reimplementation of the DFT-D3 program
https://dftd3.readthedocs.io
GNU Lesser General Public License v3.0
46 stars 19 forks source link

[Bug / Defaults] ASE DFTD3 and Simple-DFTD3 disagree? #68

Open tgmaxson opened 1 month ago

tgmaxson commented 1 month ago

I am trying to use the Simple-DFTD3 module but I am seeing disagreements between the ASE DFTD3 implementation and Simple-DFTD3. Importantly, ASE DFTD3 agrees with VASP but Simple-DFTD3 does not as a result. I provide here a minimum example to reproduce this issue. The difference also shows up in forces and strain if I recall correctly, but the example here just highlights the energy difference.

Is there some difference in cutoffs, many body terms, etc? I believe we use the dftd3 on conda from psi4.

#!/usr/bin/env python
from ase.io import read, write
from ase.calculators.dftd3 import DFTD3  #import ASE-D3
from dftd3.ase import DFTD3 as SimpleD3 #import Simple-D3
from ase.build import bulk

atoms = bulk("Pd") * (6,6,6)

ase_d3 = DFTD3(xc="pbe", damping="bj")
simple_d3 = SimpleD3(method="pbe", damping="d3bj")

for calculator in ase_d3, simple_d3:
    atoms.calc = calculator
    print(f"Dispersion: {calculator} {atoms.get_potential_energy()}", end="\n")

This produces the following output

(work) tgmaxson@front-0:~/D3Disagree$ python d3.py
Dispersion: <ase.calculators.dftd3.DFTD3 object at 0x7f4bbe48c250> -144.65636838944943
Dispersion: <dftd3.ase.DFTD3 object at 0x7f4c0fe20f40> -127.1336927513601
awvwgk commented 2 weeks ago

This can be related to cutoffs for the two implementations for D3, in simple-dftd3 the cutoffs can be increased to converge the real space summation. An alternative approach would be to employ Ewald summation (#69).