Source code for ase2sprkkr.sprkkr.test.test_sprkkr_atoms

if __package__:
   from .init_tests import TestCase, patch_package
else:
   from init_tests import TestCase, patch_package
__package__, __name__ = patch_package(__package__, __name__)

from ase import Atoms
from ase.build import bulk
from ..sprkkr_atoms import SPRKKRAtoms

[docs] class SPRKKRAtomsTest(TestCase):
[docs] def test_extend(self): a = SPRKKRAtoms('NaCl') a.set_positions([[0,0,0],[0,1,0]]) b = SPRKKRAtoms('Na') b.set_positions([[1,0,0]]) id1 = id(a.sites[0]) id2 = id(b.sites[0]) a.extend(b) #Test, that the sites property is retained self.assertEqual(id1, id(a.sites[0])) self.assertEqual(id2, id(a.sites[2]))
[docs] def test_atoms(self): a = Atoms('NaCl') a.set_positions([[0,0,0],[0,1,0]]) a.info['occupancy'] = { 1: {'Cl' : 0.4, 'I' : 0.6 } } self.assertEqual(str(a.symbols), 'NaCl') SPRKKRAtoms.promote_ase_atoms(a) self.assertEqual(len(a.sites), 2) self.assertEqual(len(a.sites[0].occupation), 1) self.assertEqual(len(a.sites[1].occupation), 2) self.assertEqual(a.sites[1].occupation['Cl'], 0.4) self.assertEqual(str(a.symbols), 'NaI') self.assertEqual(a.sites[0].occupation.as_dict, {'Na' : 1}) self.assertEqual(a.sites[1].occupation.as_dict, {'Cl' : 0.4, 'I': 0.6}) self.assertEqual(a.info['occupancy'][1], {'Cl' : 0.4, 'I': 0.6}) a.sites[1] = a.sites[0] a.compute_sites_symmetry() a.sites[1].occupation = 'Cl' self.assertEqual(str(a.symbols), 'NaCl')
[docs] def test_symmetry(self): atoms=bulk('LiCl', 'rocksalt', a=5.64) * (2, 1, 1) SPRKKRAtoms.promote_ase_atoms(atoms) self.assertTrue(atoms.sites[1] == atoms.sites[3]) atoms.symmetry = False self.assertFalse(atoms.sites[1] == atoms.sites[3]) atoms.symmetry = True self.assertTrue(atoms.sites[1] == atoms.sites[3]) atoms.sites[3] = atoms.sites[3].copy() #No effect atoms.symmetry = True self.assertFalse(atoms.sites[1] == atoms.sites[3]) atoms.compute_sites_symmetry() self.assertTrue(atoms.sites[1] == atoms.sites[3]) atoms.symmetry = False self.assertFalse(atoms.sites[1] == atoms.sites[3]) atoms.sites[3] = atoms.sites[1] #No effect atoms.symmetry = False self.assertTrue(atoms.sites[1] == atoms.sites[3]) atoms.cancel_sites_symmetry() self.assertFalse(atoms.sites[1] == atoms.sites[3]) atoms=bulk('LiCl', 'rocksalt', a=5.64) * (2, 1, 1) SPRKKRAtoms.promote_ase_atoms(atoms, symmetry=False) self.assertFalse(atoms.sites[1] == atoms.sites[3]) #default None for symmetry do not change the already #initialized atoms object SPRKKRAtoms.promote_ase_atoms(atoms) self.assertFalse(atoms.sites[1] == atoms.sites[3]) SPRKKRAtoms.promote_ase_atoms(atoms, symmetry=True) self.assertTrue(atoms.sites[1] == atoms.sites[3])
[docs] def test_occupancy(self): atoms=bulk('LiCl', 'rocksalt', a=5.64) * (2, 1, 1) SPRKKRAtoms.promote_ase_atoms(atoms) self.assertTrue(atoms.sites[1] == atoms.sites[3]) atoms.cancel_sites_symmetry() self.assertFalse(atoms.sites[1] == atoms.sites[3]) atoms=bulk('LiCl', 'rocksalt', a=5.64) * (2, 1, 1) atoms.info["occupancy"] = { 0: { 'Li' : 1 }, 1: { 'Cl' : 1 }, 2: { 'Li' : 1 }, 3: { 'Cl' : 1 }, } SPRKKRAtoms.promote_ase_atoms(atoms) self.assertTrue(atoms.sites[1] == atoms.sites[3]) atoms=bulk('LiCl', 'rocksalt', a=5.64) * (2, 1, 1) atoms.info["occupancy"] = { 0: { 'Li' : 1 }, 1: { 'Cl' : 0.5, 'I' :0.5 }, 2: { 'Li' : 1 }, 3: { 'Cl' : 1 }, } SPRKKRAtoms.promote_ase_atoms(atoms) self.assertFalse(atoms.sites[1] == atoms.sites[3]) self.assertEqual({ 'Cl' : 0.5, 'I' :0.5 }, atoms.sites[1].occupation.as_dict)