[ase-users] [ase-developers] Adjusting atom.momentum?

Ask Hjorth Larsen asklarsen at gmail.com
Mon Oct 24 12:44:17 CEST 2016


Hello

It can access the array and modify it, knowing its own index in the atoms
object.

Or is there something more to it?

Actually I guess it is still tricky to handle the case where someone sets
the momenta after creating the Atom

Best regards
Ask

El 24 oct. 2016 7:43, "Jens Jørgen Mortensen" <jensj at fysik.dtu.dk> escribió:

> On 10/23/2016 01:27 AM, Ask Hjorth Larsen wrote:
>
>> Hello
>>
>> An Atom now has a reference to the Atoms from which it was extracted.
>>
>> Therefore this is trivial to fix now.  It only requires the will to do so.
>>
>
> What has happened that makes it trivial to fix now and how would you do it?
>
> Jens Jørgen
>
>
>> Best regards
>> Ask
>>
>> 2015-10-19 9:37 GMT+02:00 Jens Jørgen Mortensen <jensj at fysik.dtu.dk>:
>>
>>> On 10/16/2015 09:46 PM, Peterson, Andrew wrote:
>>>
>>> In writing the NVE test for the Hookean constraint, I noticed that
>>> modifying
>>> the momentum attribute of an atom was not permanent. E.g.,
>>>
>>> In [1]: from ase.structure import molecule
>>> In [2]: atoms = molecule('CH4')
>>> In [3]: atoms[2].momentum[1] += 8.
>>> In [4]: atoms.get_momenta()
>>> Out[4]:
>>> array([[ 0.,  0.,  0.],
>>>         [ 0.,  0.,  0.],
>>>         [ 0.,  0.,  0.],
>>>         [ 0.,  0.,  0.],
>>>         [ 0.,  0.,  0.]])
>>>
>>> I know I can use the set_momentum function, but had expected this to
>>> behave
>>> the same as adjusting a position --- the analogous script with positions
>>> does result in changing the position array:
>>>
>>> In [1]: from ase.structure import molecule
>>> In [2]: atoms = molecule('CH4')
>>> In [3]: atoms[2].position[1] += 8.
>>> In [4]: atoms.get_positions()
>>> Out[4]:
>>> array([[ 0.      ,  0.      ,  0.      ],
>>>         [ 0.629118,  0.629118,  0.629118],
>>>         [-0.629118,  7.370882,  0.629118],
>>>         [ 0.629118, -0.629118, -0.629118],
>>>         [-0.629118,  0.629118, -0.629118]])
>>>
>>> Is this how it is supposed to work, or should I file an issue?
>>>
>>>
>>> I guess you should file an issue.  I really don't know how to fix this.
>>> Problem is that the momenta are zero even if you did not explicitly set
>>> them
>>> and we don't want to allocate an ndarray for them before they become
>>> non-zero.  The positions are always backed by an ndarray in the Atoms
>>> object
>>> ...
>>>
>>> The best I can come of with is to make the ndarray you get from
>>> atoms[2].momentum not writeable and document this weird behaviour.
>>>
>>> If the Atoms object already has momenta then it will work fine:
>>>
>>>      atoms[2].momentum = (0, 0, 0)
>>>      atoms[2].momentum[1] += 8
>>>
>>> This will actually also work:
>>>
>>>      atoms[2].momentum += (0, 8, 0)
>>>
>>> Jens Jørgen
>>>
>>> thanks,
>>> Andy
>>>
>>>
>>> --
>>> Andrew Peterson
>>> Assistant Professor
>>> Brown University School of Engineering
>>> Barus & Holley 247
>>> 184 Hope Street
>>> Providence, RI 02912
>>> (401) 863-2153
>>> http://brown.edu/go/catalyst
>>>
>>>
>>> _______________________________________________
>>> ase-developers mailing list
>>> ase-developers at listserv.fysik.dtu.dk
>>> https://listserv.fysik.dtu.dk/mailman/listinfo/ase-developers
>>>
>>>
>>>
>>> _______________________________________________
>>> ase-developers mailing list
>>> ase-developers at listserv.fysik.dtu.dk
>>> https://listserv.fysik.dtu.dk/mailman/listinfo/ase-developers
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.fysik.dtu.dk/pipermail/ase-users/attachments/20161024/383c38f2/attachment.html>


More information about the ase-users mailing list