[ase-users] [ase-developers] Adjusting atom.momentum?
Jens Jørgen Mortensen
jensj at fysik.dtu.dk
Mon Oct 24 13:03:24 CEST 2016
On 10/24/2016 12:44 PM, Ask Hjorth Larsen wrote:
>
> Hello
>
> It can access the array and modify it, knowing its own index in the
> atoms object.
>
Problem is that the Atoms object doesn't have a momenta array. So,
"atoms[2].momentum" will create a fresh array with "np.zeros(3)" :-(
https://gitlab.com/ase/ase/issues/3
Jens Jørgen
> 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
> <mailto: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 <mailto: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 <tel:%28401%29%20863-2153>
> http://brown.edu/go/catalyst
>
>
> _______________________________________________
> ase-developers mailing list
> ase-developers at listserv.fysik.dtu.dk
> <mailto:ase-developers at listserv.fysik.dtu.dk>
> https://listserv.fysik.dtu.dk/mailman/listinfo/ase-developers
> <https://listserv.fysik.dtu.dk/mailman/listinfo/ase-developers>
>
>
>
> _______________________________________________
> ase-developers mailing list
> ase-developers at listserv.fysik.dtu.dk
> <mailto:ase-developers at listserv.fysik.dtu.dk>
> https://listserv.fysik.dtu.dk/mailman/listinfo/ase-developers
> <https://listserv.fysik.dtu.dk/mailman/listinfo/ase-developers>
>
>
More information about the ase-users
mailing list