[ase-users] emt giving nonzero interaction energies at large separation

Jens Jørgen Mortensen jensj at fysik.dtu.dk
Tue Sep 13 09:08:57 CEST 2011


man, 12 09 2011 kl. 21:23 +0200, skrev Tom Haxton:
> 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?

I get only a 2 meV error, but still - I would call it a bug.  I think I
have fixed it in the development version of ASE.  Thanks for finding
this.

See here for a simple way to build a benzene molecule:

https://trac.fysik.dtu.dk/projects/ase/browser/trunk/ase/test/emt2.py?rev=2295

Please keep in mind that the parameters for H and C in ASE's EMT
potential should not be used for real work.  They are there only for
testing and demonstration purposes.

Jens Jørgen

>   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)
> 
> 
> 






More information about the ase-users mailing list