[ase-users] VASP module in ASE
Jens Jørgen Mortensen
jensj at fysik.dtu.dk
Mon Sep 1 17:20:34 CEST 2008
On Mon, 2008-09-01 at 15:23 +0100, Jonas Björk wrote:
> In Vasp when writing out the k-points explicitly you can decide
whether
> writing them in Cartesian coordinates (units of 2pi/a) or in
reciprocal
> coordinates (units b1, b2, b3). What is the standard in ASE?
Units of 2pi/a - usually in the range from -0.5 to 0.5.
> > +
> > + # How can this ever work? In ASE, we don't assume that the
> > + # atoms are ordered in any way?
> > + atom_num=[[num[0],1]] ???
> > + for m in range(1,len(num)): ???
> > + if num[m]==atom_num[-1][0]: ???
> > + atom_num[-1][1]+=1 ???
> > + else: ???
> > + atom_num.append([num[m], 1]) ???
> >
> > ??? Here you are assuming that the atoms are ordered after atomic
number
> > - right? We should fix that!
>
> I am not assuming anything about the ordering of the atoms here, at
> least not if I understand ASE right:
>
>
> First I get a list of the chemical symbols of each atom. I should
change
> the name 'num' to 'symbols' or something else more appropriate.
>
> num = atoms.get_chemical_symbols()
>
> # How can this ever work? In ASE, we don't assume that the
> # atoms are ordered in any way?
>
> Then count how many atoms of the SAME species in a row in the Atoms
> list.
>
> For example if the get_chemical_symbols() gives a list like this:
>
> ['C', 'C', 'C', 'H', 'H', 'H', 'C', 'C', 'O']
> the atom_num will take the form:
>
> [['C', 6], ['H', 3], ['C', 2], ['O',1]]
I guess you mean:
[['C', 3], ['H', 3], ['C', 2], ['O',1]]
Anyway - I understand now.
> and the first rows in the Vasp atomic position file (POSCAR) will look
> like this:
>
> C H C O
> 1.0
> 1.0 0 0
> 0 1.0 0
> 0 0 1.0
> 6 3 2 1
>
> The first row is just a label, standard is to write out the atomic
> species here (makes it possible for e.g. VMD to figure out the atomic
> species from just the POSCAR file).
> The next four rows has the unit cell vectors and a scaling parameter.
> The sixth row has information about the number of atomic species of
each
> kind. In this case, first there will be 6 atoms of the same kind,
> followed by 3 atoms of same kind, 2 atoms of same kind and 1 single
> atom.
>
> When Vasp runs it will look in what order the POTCAR file is built to
> figure out which pseudo potential should be assigned to which group of
> atoms. In this case it will build the POTCAR file by joining a carbon
> POTCAR file, hydrogen POTCAR file, carbon (again), oxygen. With this
> order.
>
> It would be possible to build the POSCAR and POTCAR file only using
the
> get_chemical_symbols() and assign a pseudo potential to each
individual
> atom. But what we would end up with is a really messy POSCAR file with
a
> number 1 for each atom in the sixth row, and an unnecessary large
POTCAR
> file.
Let's say I want to do 256 water molecules, and the order is
HHOHHOHHOHHO ..., then I will also get a HUGE POTCAR file. I think it
would be best if the ASE Vasp interface could be intelligent and reorder
things so that the POTCAR file only has two setups.
> So what the following does is to go through the Atoms list, if the
> chemical symbol of the current atom is the same as previous atom, add
1
> to this 'group' of atoms, otherwise create a new 'group' with value
1.
>
> atom_num=[[num[0],1]] ???
> for m in range(1,len(num)): ???
> if num[m]==atom_num[-1][0]: ???
> atom_num[-1][1]+=1 ???
> else: ???
> atom_num.append([num[m], 1]) ???
>
> Maybe it is more abvious what it does if ot looks like:
>
> symbols = atoms.get_chemical_symbols()
> atom_num=[[symbols[0],1]]
> for m in range(1,len(num)):
> if symbols[m]==symbols[m-1]:
> atoms_num[-1][1]+=1
> else:
> atoms_num.append([symbols[m], 1])
>
> which does exactly the same thing. I hope this makes things clearer
what
> is going on.
More information about the ase-users
mailing list