[ase-users] VASP module in ASE
Jussi Enkovaara
jussi.enkovaara at csc.fi
Tue Sep 2 08:16:50 CEST 2008
Jonas Björk wrote:
>> 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.
>
> I agree, lets do it this way.
Hi,
if you look how I was constructing POSCAR and POTCAR (svn revision 508) one should
get in the above example POTCAR with only two setups:
First I was construcytig a dictionary of atomic species, where the key is the
atomic symbol and value the number of this species:
# Determine the number of atomic species
self.symbols = {}
for atom in atoms:
symbol = atom.get_symbol()
if not self.symbols.has_key(symbol):
self.symbols[symbol] = 1
else:
self.symbols[symbol] += 1
POTCAR can then be constructed just with loop over symbols:
for symbol in self.symbols:
try:
name = symbol + '_' + p['setups'][symbol]
except (TypeError, KeyError):
name = symbol
name += '/POTCAR.Z'
found = False
for path in pppaths:
filename = join(path, name)
if isfile(filename) or islink(filename):
found = True
self.ppp_list.append(filename)
break
if not found:
raise RuntimeError('No pseudopotential for %s!' % symbol)
After writing the unit cell information in POSCAR, the number of atomic species can
be written:
for nspecies in self.symbols.values():
poscar.write('%i ' % nspecies)
poscar.write('\n')
and the actual positions:
for symbol in self.symbols.keys():
mask = [asymbol == symbol for asymbol in self.all_symbols]
ind = npy.asarray(mask, bool)
for pos in self.positions[ind]:
poscar.write('%.14f %.14f %.14f\n' % tuple(pos))
I do not know if this is the optimal way, but it seemed to be working.
Best regards,
Jussi
More information about the ase-users
mailing list