[ase-users] Constraints issue in vasp calculator

Eric Hermes ehermes at chem.wisc.edu
Tue Mar 28 16:29:52 CEST 2017


On Mon, 2017-03-27 at 20:09 +0000, Protik Das wrote:
> The error I posted is indeed the full error message. Here is a script
> that reproduces the error:
> 
> from ase.build import mx2
> from ase.constraints import FixedPlane
> import numpy as np
> from ase.calculators.vasp import Vasp
> 
> calc = Vasp(prec = 'Accurate',
>     pp = 'pbe',
>     istart=0,
>     ismear=1,
>     sigma=0.01,
>     lcharg=False,
>     lwave=False,
>     lreal = False,
>     encut = 550,
>     algo='Normal',
>     ncore=10,
>     ediff=1e-6,
>     ibrion=1,
>     nsw=150,
>     isym=0,
>     nelmin=4,
>     nelm=200,
>     ediffg=-0.01,
>     ivdw=1,
>     isif=2,
>     kpts = [8, 8, 1],
>     gamma=True)
> 
> mx2 = mx2(formula='MoS2', kind='1T', a=3.179, thickness=3.86,
> size=(1,1,1),
>           vacuum=1.5)
> mx2.center(vacuum=15, axis=2)
> plane = FixedPlane(range(len(mx2)), (0, 0, 1))
> mx2.set_constraint(plane)
> interface = mx2.copy()
> mx2.set_calculator(calc)
> energ1 = mx2.get_potential_energy()
> 
> And the error:
> 
> Traceback (most recent call last):
>   File "isif.py", line 44, in <module>
>     energ1 = mx2.get_potential_energy()
>   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> packages/ase/atoms.py", line 682, in get_potential_energy
>     energy = self._calc.get_potential_energy(self)
>   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> packages/ase/calculators/vasp.py", line 835, in get_potential_energy
>     self.update(atoms)
>   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> packages/ase/calculators/vasp.py", line 492, in update
>     self.calculate(atoms)
>   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> packages/ase/calculators/vasp.py", line 684, in calculate
>     self.initialize(atoms)
>   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> packages/ase/calculators/vasp.py", line 592, in initialize
>     self.atoms_sorted = atoms[self.sort]
>   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> packages/ase/atoms.py", line 949, in __getitem__
>     con.index_shuffle(self, i)
>   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> packages/ase/constraints.py", line 86, in index_shuffle
>     if old == self.a:
> ValueError: The truth value of an array with more than one element is
> ambiguous. Use a.any() or a.all()
> 

Not to belabor the point, but your initial email only had the traceback
and didn't contain the actual error message :)

FixedPlane is a FixConstraintSingle, and as such only takes a single
atom index as an argument. Try doing the following instead:

plane = [FixedPlane(atom.index, (0, 0, 1)) for atom in mx2]
mx2.set_constraint(plane)


> 
> 
> On Mon, Mar 27, 2017 at 7:07 AM Eric Hermes <ehermes at chem.wisc.edu>
> wrote:
> > On Mon, 2017-03-27 at 07:21 +0000, Protik Das via ase-users wrote:
> > > Hi,
> > >
> > > I am using ase in a python 3.6 environment to do some vasp
> > > calculations. I am using plane constraint to fix all the atoms in
> > z
> > > direction. I am getting the following error before the
> > calculation
> > > starts:
> > >
> > > Traceback (most recent call last):
> > >   File "isif.py", line 109, in <module>
> > >     energ1 = interface.get_potential_energy()
> > >   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> > > packages/ase/atoms.py", line 682, in get_potential_energy
> > >     energy = self._calc.get_potential_energy(self)
> > >   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> > > packages/ase/calculators/vasp.py", line 835, in
> > get_potential_energy
> > >     self.update(atoms)
> > >   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> > > packages/ase/calculators/vasp.py", line 492, in update
> > >     self.calculate(atoms)
> > >   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> > > packages/ase/calculators/vasp.py", line 684, in calculate
> > >     self.initialize(atoms)
> > >   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> > > packages/ase/calculators/vasp.py", line 592, in initialize
> > >     self.atoms_sorted = atoms[self.sort]
> > >   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> > > packages/ase/atoms.py", line 949, in __getitem__
> > >     con.index_shuffle(self, i)
> > >   File "/home/protik/anaconda3/envs/ase/lib/python3.6/site-
> > > packages/ase/constraints.py", line 86, in index_shuffle
> > >     if old == self.a:
> > >
> > > I tried using the equal function from ase.calculators.calculator,
> > but
> > > that did not work. Any help regarding this?
> > > -- 
> > > Protik Das,
> > > ECE Graduate Student,
> > > LATTE (http://latte.ece.ucr.edu),
> > > University of California, Riverside.
> > > _______________________________________________
> > > ase-users mailing list
> > > ase-users at listserv.fysik.dtu.dk
> > > https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users
> > 
> > Could you please post the *full* error message, as well as a short
> > script that exhibits the problem?
> > 
> > Eric
> -- 
> Protik Das,
> ECE Graduate Student,
> LATTE (http://latte.ece.ucr.edu),
> University of California, Riverside.



More information about the ase-users mailing list