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
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).
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.
This produces the following output