[ase-users] Split POSCAR/CONTCAR files
fabian
Fabian.T89 at web.de
Wed Apr 19 09:56:29 CEST 2017
Dear Oscar,
Thank you very much for your fast reply! This is exactly what i want to do!
If my slab consist of different species , for example Cu and O atoms, is
it correct to change this line
slab_i = [a.index for a in atoms if a.symbol == 'Cu']
to
slab_i = [a.index for a in atoms if a.symbol == 'Cu','O'] ?
All the best
fabian
Am 18.04.2017 um 23:25 schrieb Oscar Xavier Guerrero:
> Sorry, in the previous example I forgot to convert from list to an
> atoms object.
>
> This should work:
>
> from ase.io <http://ase.io> import read, write
> from ase.atoms import Atoms
> atoms = read('CONTCAR')
> # assuming the slab is only composed of Cu and the adsorbate has no Cu
> slab_i = [a.index for a in atoms if a.symbol == 'Cu']
> ads_i = [a.index for a in atoms if a.symbol != 'Cu']
> # you could also use height as the threshold
> th = max(a.z for a in atoms if a.symbol == 'Cu')
> # you can also use constraints to set the th
> slb = {atoms[i].symbol for i in atoms.constraints[0].index}
> th = max(a.z for a in atoms if a.symbol in alb)
> slab_i = [a.index for a in atoms if a.z <= th]
> ads_i = [a.index for a in atoms if a.z > th]
> # this is a quick fix, maybe there's a better method
> slab = atoms.copy()
> for i in sorted(ads_i, reverse=True):
> del slab[i]
> ads = atoms.copy()
> for i in sorted(slab_i, reverse=True):
> del ads[i]
> # or you could use Atoms
> slab = Atoms([a for a in atoms if a.index in slab_i])
> ads = Atoms([a for a in atoms if a.index in ads_i])
> cell = atoms.get_cell()
> slab.set_cell(cell)
> ads.set_cell(cell)
> constraint = atoms.constraints[0]
> slab.set_constraints(constraint)
> ads.set_constraints(constraint)
>
> write('slab.vasp', slab, vasp5=True, sort=True, direct=True,
> format='vasp')
> write('ads.vasp', ads, vasp5=True, sort=True, direct=True, format='vasp')
>
> If you have any questions I'm happy to help.
>
>
> 2017-04-18 15:53 GMT-05:00 Oscar Xavier Guerrero
> <oscarxavier.ox at gmail.com <mailto:oscarxavier.ox at gmail.com>>:
>
> Hello Fabian,
>
> You can read POSCAR/CONTCAR files with ase.io.read, you get an
> atoms object with all the information the file had. Then you can
> copy parts of that atoms object into other atoms object. Then use
> the ase.io.write function to write POSCAR files for each of the
> new atoms objects. Since you have a slab and an adsorbate, you can
> use the height as a threshold. It really depends on your systems.
>
> Here's an example:
>
> from ase.io <http://ase.io> import read, write
> atoms = read('CONTCAR')
> # assuming the slab is only composed of Cu and the adsorbate has no Cu
> slab = [a for a in atoms if a.symbol == 'Cu']
> ads = [a for a in atoms if a.symbol != 'Cu']
> # you could also use height as the threshold
> th = max(a.z for a in atoms if a.symbol == 'Cu')
> # you can also use constraints to set the th
> slb = {atoms[i].symbol for i in atoms.constraints[0].index}
> th = max(a.z for a in atoms if a.symbol in alb)
> slab = [a for a in atoms if a.z <= th]
> ads = [a for a in atoms if a.z > th]
> write('slab.vasp', slab, vasp5=True, sort=True, direct=True,
> format='vasp')
> write('ads.vasp', ads, vasp5=True, sort=True, direct=True,
> format='vasp')
>
> If you have any questions I'm happy to help.
>
> P.S. heres my github with some of my scripts.
> https://github.com/izxle/VaspTools
> <https://github.com/izxle/VaspTools>
>
>
>
>
>
>
>
>
> 2017-04-18 2:52 GMT-05:00 fabian via ase-users
> <ase-users at listserv.fysik.dtu.dk
> <mailto:ase-users at listserv.fysik.dtu.dk>>:
>
> Dear all,
>
> I want to perform a series of charge density difference calculations. Therefore i want to split the geometry optimised CONTCAR file
> containing the coordinates from the slab and the Molecule into tow files containing only slab or Molecule coordinates. At the moment i am doing this
> manually. Can someone give me a hint how to read positions and constraints as well as atom types from the POSCAR/CONTCAR files and later write them into two new POSCAR Files?
> I would like to be able to either fix all atomic coordinates or leave the as they are.
> Atom types could also be extracted from OUTCAR or POTCAR files. For now it is sufficient to perform the split based on the ATOM tag.
> Unfortunately i am completely stuck.
>
> All the best
>
> fabian
>
>
> _______________________________________________
> ase-users mailing list
> ase-users at listserv.fysik.dtu.dk
> <mailto:ase-users at listserv.fysik.dtu.dk>
> https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users
> <https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.fysik.dtu.dk/pipermail/ase-users/attachments/20170419/aac6b5a7/attachment.html>
More information about the ase-users
mailing list