[ase-users] ASE-3.13 release candidate

Ask Hjorth Larsen asklarsen at gmail.com
Thu Jan 19 16:31:59 CET 2017


Hi

2017-01-19 15:56 GMT+01:00 Tom Daff <tdd20 at cam.ac.uk>:
> Thanks @jensj for making the changes!
>
> To answer Ask, I was using the vacuum=None configuration to be the zero for a surface energy calculation, i.e. (E_surface(...vacuum=10.0) - E_surface(...vacuum=None)). Since I exclusively use 3D periodic calculators it was the easiest way. I've just changed my script to modify the cell after creating a surface with 0.0 vacuum. Hopefully the scripts below will demonstrate and help anyone who gets bitten by the changes :)

Interesting.  I agree that it makes sense and is cleaner to have a
setting which produces a valid bulk configuration as a special case of
the surface() call.

The problem is that if we set 0.0 vacuum in ASE, we will get (in 1D) this:

  ϕ o o ϕ

The greek letter phi above refers to an atom right on a cell boundary.
Above, two atoms touch each other, which is useless.

What we really want is:

  ϕ o o o |

I.e. atom on cell boundary, atom, atom, atom, cell boundary (without atom).

But what parameter/value should be used to request this behaviour?

Best regards
Ask

>
> In old ase you get a box with the 'layer' between the top and bottom:
>
>>>> import ase
>>>> from ase.build import surface, bulk
>>>> ase.__version__
> '3.12.0'
>>>> n_layers = 6
>>>> b = bulk('Fe')
>>>> surface(b, indices=(1, 1, 0), layers=n_layers, vacuum=None).cell
> array([[ 4.05879292,  0.        ,  0.        ],
>        [ 0.        ,  2.48549291,  0.        ],
>        [ 0.        ,  0.        ,  7.03003556]])
>>>> surface(b, indices=(1, 1, 0), layers=n_layers, vacuum=0.0).cell
> array([[ 4.05879292,  0.        ,  0.        ],
>        [ 0.        ,  2.48549291,  0.        ],
>        [ 0.        ,  0.        ,  5.85836297]])
>
>
> Now the box can be manually adjusted according to the number of layers to add the extra layer between the top and bottom without needing to calculate the spacing directly:
>
>>> import ase
>>>> from ase.build import surface, bulk
>>>> ase.__version__
> '3.13.0b1'
>>>> n_layers = 6
>>>> b = bulk('Fe')
>>>> surface(b, indices=(1, 1, 0), layers=n_layers, vacuum=None).cell
> array([[  4.05879292e+00,   0.00000000e+00,   0.00000000e+00],
>        [ -3.43997957e-17,   2.48549291e+00,   0.00000000e+00],
>        [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00]])
>>>> surface(b, indices=(1, 1, 0), layers=n_layers, vacuum=0.0).cell
> array([[  4.05879292e+00,   0.00000000e+00,   0.00000000e+00],
>        [ -3.43997957e-17,   2.48549291e+00,   0.00000000e+00],
>        [  0.00000000e+00,  -0.00000000e+00,   5.85836297e+00]])
>>>> s = surface(b, indices=(1, 1, 0), layers=n_layers, vacuum=0.0)
>>>> s.cell *= [1, 1, (n_layers/(n_layers-1.0))]
>>>> s.cell
> array([[  4.05879292e+00,   0.00000000e+00,   0.00000000e+00],
>        [ -3.43997957e-17,   2.48549291e+00,   0.00000000e+00],
>        [  0.00000000e+00,  -0.00000000e+00,   7.03003556e+00]])
>
>
> Tom
>
>
>
>
>
> On 19/01/17 11:46, Ask Hjorth Larsen wrote:
>> Hi
>>
>> 2017-01-19 12:08 GMT+01:00 Tom Daff via ase-users
>> <ase-users at listserv.fysik.dtu.dk>:
>>> Hi!
>>>
>>> With regards to the removal of the 'dummy' lattice vectors that used to
>>> be added for surfaces, I actually found that they were sometimes useful
>>> as vacuum=None and vacuum=0 didn't mean the same thing. Setting
>>> vacuum=None was an easy way of getting an oriented bulk cell identical
>>> to the surface, whereas vacuum=0 gives you the same atoms but with no
>>> separation between the top and bottom layers. Of course it is possible
>>> to work out the interlayer spacing and add that as 'vacuum' to achieve
>>> the same thing, but I thing the documentation for build.surface also
>>> needs to be updated to reflect the changes.
>>>
>>> Tom
>>
>> Could you provide a specific example as a script?
>>
>> Best regards
>> Ask
>>
>>>
>>>
>>>
>>>
>>> On 17/01/17 10:22, Jens Jørgen Mortensen via ase-users wrote:
>>>> Hi!
>>>>
>>>> I've just uploaded ase-3.13.0rc1 to PyPI.  I would love as many of you
>>>> to install it and try it out on some of the things you use ASE for:
>>>>
>>>>     $ pip install ase --pre --user
>>>>
>>>> or
>>>>
>>>>     $ pip3 install ase --pre --user
>>>>
>>>> See (incomplete) list of changes since 3.12 here:
>>>>
>>>> https://wiki.fysik.dtu.dk/ase/releasenotes.html#git-master-branch
>>>>
>>>> Jens Jørgen
>>>>
>>>>
>>>> _______________________________________________
>>>> ase-users mailing list
>>>> ase-users at listserv.fysik.dtu.dk
>>>> https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users
>>> _______________________________________________
>>> ase-users mailing list
>>> ase-users at listserv.fysik.dtu.dk
>>> https://listserv.fysik.dtu.dk/mailman/listinfo/ase-users



More information about the ase-users mailing list