[ase-users] emt giving nonzero interaction energies at large separation
Tom Haxton
tom.haxton at gmail.com
Mon Sep 12 21:23:35 CEST 2011
Hello,
I want to use ase to calculate the interaction energy between a metal slab
and a substituted benzene molecule as a function of relative position. I
expect that the interaction energy should go to zero as the separation
between the molecules increases. However, using the emt calculator, this is
not the case. At large separations, the sum of the energies of the isolated
slab and the isolated molecule is not equal to the energy of the combined
system. I use the same cell size, shape, and periodic boundary conditions
in all three calculations. For large separations and large cell sizes, the
result is independent of separation, cell size, and boundary conditions.
I am using ase-3.4. I also tried ase-3.5 and got the same problem, though a
different number for the energy discrepancy. I am working on a x86_64
machine running Linux 2.6, python 2.6.5, and numpy 1.3.0.
Below is the script that produces the error. It is the more minimal case of
a single isolated Au atom interacting with a Benzene molecule, separated by
50 angstroms, in a 100 x 100 x 100 angstrom cell. The energies are:
Benzene -3.47792756546
Au 3.8
Combined -1.46565762747
Difference -1.78773006201
Can anyone tell me if there is something I am doing wrong or if this is a
bug? Also, is there any way to get out any useful intermediate information
from the emt calculation? Does ASAP have the same problem? (I don't have
ASAP installed yet.) Thank you very much.
Best,
Tom
#/usr/bin/python
import sys
import math
import copy
from ase import Atoms
from ase.visualize import view
from ase.calculators.emt import EMT
from ase.constraints import FixAtoms
from ase.optimize import QuasiNewton
from ase.lattice.surface import fcc111,add_adsorbate
mycalculator = EMT()
mybigcell = (100., 100., 100.)
separation = 50.
r_CC = 1.374
r_HC = 1.084
benzene = Atoms('CCCCCCHHHHHH', positions=[(r_CC, 0., 0.), (-r_CC, 0., 0),
(0.5 * r_CC, 0.5 * math.sqrt(3.0) * r_CC, 0.), (0.5 * r_CC, -0.5 *
math.sqrt(3.0) * r_CC, 0.), (-0.5 * r_CC, 0.5 * math.sqrt(3.0) * r_CC, 0.),
(-0.5 * r_CC, -0.5 * math.sqrt(3.0) * r_CC, 0.), (r_CC + r_HC, 0., 0.),
(-(r_CC + r_HC), 0., 0.), (0.5 * (r_CC + r_HC), 0.5 * math.sqrt(3.0) * (r_CC
+ r_HC), 0), (0.5 * (r_CC + r_HC), -0.5 * math.sqrt(3.0) * (r_CC + r_HC),
0), (-0.5 * (r_CC + r_HC), 0.5 * math.sqrt(3.0) * (r_CC + r_HC), 0), (-0.5 *
(r_CC + r_HC), -0.5 * math.sqrt(3.0) * (r_CC + r_HC), 0)])
gold = Atoms('Au', positions=[(0., 0., 0.)])
molecule1 = copy.deepcopy(benzene)
molecule2 = copy.deepcopy(gold)
molecule1.set_cell(mybigcell)
molecule1.set_pbc(False)
molecule1.set_calculator(mycalculator)
molecule2.set_cell(mybigcell)
molecule2.set_pbc(False)
molecule2.set_calculator(mycalculator)
molecule2.translate((0., 0., separation))
moleculecombined = molecule1 + molecule2
molecule1.center()
molecule2.center()
moleculecombined.center()
view(molecule1)
view(molecule2)
e1 = molecule1.get_potential_energy()
e2 = molecule2.get_potential_energy()
moleculecombined.set_cell(mybigcell)
moleculecombined.set_pbc(False)
moleculecombined.set_calculator(mycalculator)
ecombined = moleculecombined.get_potential_energy()
print ecombined - e1 - e2, e1, e2, ecombined
#view(moleculecombined)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.fysik.dtu.dk/pipermail/ase-users/attachments/20110912/38e97ce8/attachment.html>
More information about the ase-users
mailing list