File: test_lammpslib_neighlist_bug.py

package info (click to toggle)
python-ase 3.24.0-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 15,448 kB
  • sloc: python: 144,945; xml: 2,728; makefile: 113; javascript: 47
file content (33 lines) | stat: -rw-r--r-- 1,309 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import numpy as np
import pytest

from ase.atoms import Atoms


@pytest.mark.calculator_lite()
@pytest.mark.calculator("lammpslib")
def test_lammps_neighlist_buf(factory, testdir):
    # this is a perfectly symmetric FCC configurations, all forces
    # should be zero As of 6 May 2021, if lammpslib does wrap before
    # rotating into lammps coord system lammps messes up the neighbor
    # list.  This may or may not be fixed in lammps eventually, but
    # can also be worked around by having lammpslib do the wrap just
    # before passing coords to lammps

    atoms = Atoms('He', cell=[[2.045, 2.045, 0.0], [2.045, 0.0, 2.045], [
                  0.0, 2.045, 2.045]], pbc=[True] * 3)
    atoms *= 6

    calc = factory.calc(
        lmpcmds=['pair_style lj/cut 0.5995011000293092E+01',
                 'pair_coeff * * 3.0 3.0'],
        atom_types={'H': 1, 'He': 2}, log_file=None,
        keep_alive=True, lammps_header=['units metal', 'atom_style atomic',
                                        'atom_modify map array sort 0 0'])

    atoms.calc = calc
    f = atoms.get_forces()
    fmag = np.linalg.norm(f, axis=1)
    print(f'> 1e-6 f[{np.where(fmag > 1e-6)}] = {f[np.where(fmag > 1e-6)]}')
    print(f'max f[{np.argmax(fmag)}] = {np.max(fmag)}')
    assert len(np.where(fmag > 1e-10)[0]) == 0