Statistiques
| Révision :

root / ase / test / neighbor.py @ 13

Historique | Voir | Annoter | Télécharger (1,94 ko)

1 1 tkerber
import numpy.random as random
2 1 tkerber
import numpy as np
3 1 tkerber
from ase import Atoms
4 1 tkerber
from ase.calculators.neighborlist import NeighborList
5 1 tkerber
6 1 tkerber
atoms = Atoms(numbers=range(10),
7 1 tkerber
              cell=[(0.2, 1.2, 1.4),
8 1 tkerber
                    (1.4, 0.1, 1.6),
9 1 tkerber
                    (1.3, 2.0, -0.1)])
10 1 tkerber
atoms.set_scaled_positions(3 * random.random((10, 3)) - 1)
11 1 tkerber
12 1 tkerber
def count(nl, atoms):
13 1 tkerber
    c = np.zeros(len(atoms), int)
14 1 tkerber
    R = atoms.get_positions()
15 1 tkerber
    cell = atoms.get_cell()
16 1 tkerber
    d = 0.0
17 1 tkerber
    for a in range(len(atoms)):
18 1 tkerber
        i, offsets = nl.get_neighbors(a)
19 1 tkerber
        for j in i:
20 1 tkerber
            c[j] += 1
21 1 tkerber
        c[a] += len(i)
22 1 tkerber
        d += (((R[i] + np.dot(offsets, cell) - R[a])**2).sum(1)**0.5).sum()
23 1 tkerber
    return d, c
24 1 tkerber
25 1 tkerber
for sorted in [False, True]:
26 1 tkerber
    for p1 in range(2):
27 1 tkerber
        for p2 in range(2):
28 1 tkerber
            for p3 in range(2):
29 1 tkerber
                print p1, p2, p3
30 1 tkerber
                atoms.set_pbc((p1, p2, p3))
31 1 tkerber
                nl = NeighborList(atoms.numbers * 0.2 + 0.5,
32 1 tkerber
                                  skin=0.0, sorted=sorted)
33 1 tkerber
                nl.update(atoms)
34 1 tkerber
                d, c = count(nl, atoms)
35 1 tkerber
                atoms2 = atoms.repeat((p1 + 1, p2 + 1, p3 + 1))
36 1 tkerber
                nl2 = NeighborList(atoms2.numbers * 0.2 + 0.5,
37 1 tkerber
                                   skin=0.0, sorted=sorted)
38 1 tkerber
                nl2.update(atoms2)
39 1 tkerber
                d2, c2 = count(nl2, atoms2)
40 1 tkerber
                c2.shape = (-1, 10)
41 1 tkerber
                dd = d * (p1 + 1) * (p2 + 1) * (p3 + 1) - d2
42 1 tkerber
                print dd
43 1 tkerber
                print c2 - c
44 1 tkerber
                assert abs(dd) < 1e-10
45 1 tkerber
                assert not (c2 - c).any()
46 1 tkerber
47 1 tkerber
h2 = Atoms('H2', positions=[(0, 0, 0), (0, 0, 1)])
48 1 tkerber
nl = NeighborList([0.5, 0.5], skin=0.1, sorted=True, self_interaction=False)
49 1 tkerber
assert nl.update(h2)
50 1 tkerber
assert not nl.update(h2)
51 1 tkerber
assert (nl.get_neighbors(0)[0] == [1]).all()
52 1 tkerber
53 1 tkerber
h2[1].z += 0.09
54 1 tkerber
assert not nl.update(h2)
55 1 tkerber
assert (nl.get_neighbors(0)[0] == [1]).all()
56 1 tkerber
57 1 tkerber
h2[1].z += 0.09
58 1 tkerber
assert nl.update(h2)
59 1 tkerber
assert (nl.get_neighbors(0)[0] == []).all()
60 1 tkerber
assert nl.nupdates == 2