def test_periodic_images(self): """Tests the periodic images seen by the descriptor""" desc = SOAP( species=[1, 6, 8], rcut=10.0, nmax=2, lmax=0, periodic=False, crossover=True ) molecule = H2O.copy() # Non-periodic for comparison molecule.set_cell([[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]) nocell = desc.create(molecule, positions=[[0, 0, 0]]) # Make periodic desc = SOAP( species=[1, 6, 8], rcut=10.0, nmax=2, lmax=0, periodic=True, crossover=True ) molecule.set_pbc(True) # Cubic molecule.set_cell([[3.0, 0.0, 0.0], [0.0, 3.0, 0.0], [0.0, 0.0, 3.0]]) cubic_cell = desc.create(molecule, positions=[[0, 0, 0]]) suce = molecule * (2, 1, 1) cubic_suce = desc.create(suce, positions=[[0, 0, 0]]) # Triclinic molecule.set_cell([[0.0, 2.0, 2.0], [2.0, 0.0, 2.0], [2.0, 2.0, 0.0]]) triclinic_cell = desc.create(molecule, positions=[[0, 0, 0]]) suce = molecule * (2, 1, 1) triclinic_suce = desc.create(suce, positions=[[0, 0, 0]]) self.assertTrue(np.sum(np.abs((nocell[:3] - cubic_suce[:3]))) > 0.1) self.assertAlmostEqual(np.sum(cubic_cell[:3] - cubic_suce[:3]), 0) self.assertAlmostEqual(np.sum(triclinic_cell[:3] - triclinic_suce[:3]), 0)
def test_unit_cells(self): """Tests if arbitrary unit cells are accepted""" desc = SOAP(species=[1, 6, 8], rcut=10.0, nmax=2, lmax=0, periodic=False, crossover=True) molecule = H2O.copy() molecule.set_cell([ [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0] ]) nocell = desc.create(molecule, positions=[[0, 0, 0]]) desc = SOAP(species=[1, 6, 8], rcut=10.0, nmax=2, lmax=0, periodic=True, crossover=True,) # Invalid unit cell molecule.set_cell([ [0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0] ]) with self.assertRaises(ValueError): desc.create(molecule, positions=[[0, 0, 0]]) molecule.set_pbc(True) molecule.set_cell([ [20.0, 0.0, 0.0], [0.0, 30.0, 0.0], [0.0, 0.0, 40.0], ]) largecell = desc.create(molecule, positions=[[0, 0, 0]]) molecule.set_cell([ [2.0, 0.0, 0.0], [0.0, 2.0, 0.0], [0.0, 0.0, 2.0] ]) cubic_cell = desc.create(molecule, positions=[[0, 0, 0]]) molecule.set_cell([ [0.0, 2.0, 2.0], [2.0, 0.0, 2.0], [2.0, 2.0, 0.0] ]) triclinic_smallcell = desc.create(molecule, positions=[[0, 0, 0]])
def test_unit_cells(self): """Tests if arbitrary unit cells are accepted. """ # No cell molecule = H2O.copy() molecule.set_cell([[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]) nocell = default_desc.create(molecule) # Large cell molecule.set_pbc(True) molecule.set_cell([[20.0, 0.0, 0.0], [0.0, 30.0, 0.0], [0.0, 0.0, 40.0]]) largecell = default_desc.create(molecule) # Cubic cell molecule.set_cell([[2.0, 0.0, 0.0], [0.0, 2.0, 0.0], [0.0, 0.0, 2.0]]) cubic_cell = default_desc.create(molecule) # Triclinic cell molecule.set_cell([[0.0, 2.0, 2.0], [2.0, 0.0, 2.0], [2.0, 2.0, 0.0]]) triclinic_smallcell = default_desc.create(molecule)