Example #1
0
 def test_copy(self):
     pos, cell = generate_fcc_lattice()
     basis = Atoms(symbols='Al', positions=pos, cell=cell)
     basis_copy = basis.copy()
     self.assertEqual(basis, basis_copy)
     basis_copy[:] = "Pt"
     self.assertNotEqual(basis, basis_copy)
Example #2
0
 def test_get_symmetry_dataset(self):
     cell = 2.2 * np.identity(3)
     Al_sc = Atoms('AlAl',
                   scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                   cell=cell)
     Al_sc.set_repeat([2, 2, 2])
     self.assertEqual(Al_sc.get_symmetry_dataset()['number'], 229)
Example #3
0
 def setUp(self):
     pass
     self.CO2 = Atoms("CO2",
                      positions=[[0, 0, 0], [0, 0, 1.5], [0, 1.5, 0]])
     C = Atom('C').element
     self.C3 = Atoms([C, C, C], positions=[[0, 0, 0], [0, 0, 2], [0, 2, 0]])
     self.C2 = Atoms(2 * [Atom('C')])
Example #4
0
 def test_pbc(self):
     CO = Atoms("CO",
                positions=[[0, 0, 0], [0, 0, 2]],
                cell=[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
                pbc=[True, True, True])
     self.assertTrue((CO.pbc == np.array([True, True, True])).all())
     CO.set_pbc((True, True, False))
Example #5
0
 def test_get_distance(self):
     cell = 2.2 * np.identity(3)
     NaCl = Atoms('NaCl',
                  scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                  cell=cell)
     self.assertAlmostEqual(NaCl.get_distance(0, 1), 2.2 * 0.5 * np.sqrt(3))
     self.assertAlmostEqual(NaCl.get_distance(0, [0, 0, 0.5]), 0.5)
     self.assertAlmostEqual(NaCl.get_distance([0, 0, 0], [0, 0, 0.5]), 0.5)
Example #6
0
 def test_boundary(self):
     cell = 2.2 * np.identity(3)
     NaCl = Atoms('NaCl',
                  scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                  cell=cell)
     NaCl.set_repeat([3, 3, 3])
     # NaCl.plot3d()
     NaCl_bound = NaCl.get_boundary_region(0.2)
Example #7
0
 def test_get_primitive_cell(self):
     cell = 2.2 * np.identity(3)
     Al_sc = Atoms('AlFe',
                   scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                   cell=cell)
     Al_sc.set_repeat([2, 2, 2])
     primitive_cell = Al_sc.get_primitive_cell()
     self.assertEqual(primitive_cell.get_spacegroup()['Number'], 221)
Example #8
0
 def test_get_bonds(self):
     dim = 3
     cell = 2.62 * np.identity(dim)
     d1, d2 = 0.6, 0.6
     H2O = Atoms('H2O',
                 scaled_positions=[(d1, d2, 0), (d1, -d2, 0), (0, 0, 0)],
                 cell=cell)
     H2O.set_repeat([1, 1, 3])
Example #9
0
 def test_get_shells(self):
     dim = 3
     cell = 2.2 * np.identity(dim)
     Al_sc = Atoms('AlAl',
                   scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                   cell=cell)
     Al_sc.set_repeat([3, 3, 3])
     self.assertEqual(np.round(Al_sc.get_shells()[2], 6), 2.2)
Example #10
0
 def test_cell(self):
     CO = Atoms("CO",
                positions=[[0, 0, 0], [0, 0, 2]],
                cell=[[1, 0, 0], [0, 1, 0], [0, 0, 1]],
                pbc=[True, True, True])
     self.assertTrue((CO.get_cell() == np.identity(3)).all())
     self.assertTrue((CO.cell == np.identity(3)).all())
     CO.cell[2][2] = 10.
     self.assertTrue(CO.cell[2, 2] == 10.)
Example #11
0
 def test_set_scaled_positions(self):
     pos, cell = generate_fcc_lattice()
     basis = Atoms(symbols='Al', positions=pos, cell=cell, a=4.2)
     basis.set_scaled_positions(np.array([[0.5, 0.5, 0.5]]))
     self.assertTrue(
         np.array_equal(basis.scaled_positions, [[0.5, 0.5, 0.5]]))
     self.assertTrue(
         np.array_equal(basis.positions,
                        np.dot([[0.5, 0.5, 0.5]], basis.cell)))
Example #12
0
 def test_from_hdf(self):
     if sys.version_info[0] >= 3:
         filename = "../static/pyiron_atomistics/structure_hdf"
         abs_filename = os.path.abspath(filename)
         hdf_obj = FileHDFio(abs_filename)
         basis = Atoms().from_hdf(hdf_obj, group_name="simple_structure")
         self.assertEqual(len(basis), 8)
         self.assertEqual(basis.get_majority_species()[1], "Al")
         self.assertEqual(basis.get_spacegroup()['Number'], 225)
Example #13
0
 def test_get_chemical_symbols(self):
     self.assertTrue(
         np.array_equal(self.CO2.get_chemical_symbols(), ["C", "O", "O"]))
     cell = np.eye(3) * 10.0
     pse = PeriodicTable()
     pse.add_element("O", "O_up", spin="up")
     o_up = pse.element("O_up")
     basis = Atoms([o_up], scaled_positions=[[0.27, 0.27, 0.27]], cell=cell)
     self.assertTrue(np.array_equal(basis.get_chemical_symbols(), ["O_up"]))
Example #14
0
 def test_get_neighbors(self):
     cell = 2.2 * np.identity(3)
     NaCl = Atoms('NaCl',
                  scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                  cell=cell)
     # NaCl.repeat([3, 3, 3])
     # NaCl.positions = [(1,1,1)]
     boundary = NaCl.get_boundary_region(3.5)
     extended_cell = NaCl + boundary
     # extended_cell.plot3d()
     nbr_dict = NaCl.get_neighbors(num_neighbors=12, t_vec=True)
Example #15
0
 def create_Fe_bcc(self):
     self.pse = PeriodicTable()
     self.pse.add_element("Fe", "Fe_up", spin="up", pseudo_name='GGA')
     self.pse.add_element("Fe", "Fe_down", spin="down", pseudo_name='GGA')
     Fe_up = self.pse.element("Fe_up")
     Fe_down = self.pse.element("Fe_down")
     self.Fe_bcc = Atoms([Fe_up, Fe_down],
                         scaled_positions=[[0, 0, 0], [0.25, 0.25, 0.25]],
                         cell=np.identity(3))
     self.Fe_bcc.add_tag("group")
     self.Fe_bcc.group[:] = 0
Example #16
0
    def test__delitem__(self):
        cell = np.eye(3) * 10.0
        basis_0 = Atoms(["O"], scaled_positions=[[0.5, 0.5, 0.5]], cell=cell)
        basis_1 = Atoms(["H"],
                        scaled_positions=[[0.75, 0.75, 0.75]],
                        cell=cell)
        basis_2 = Atoms(["H"],
                        scaled_positions=[[0.25, 0.25, 0.25]],
                        cell=cell)
        basis_3 = Atoms(["H", "O", "N"],
                        scaled_positions=[[0.35, 0.35, 0.35], [0., 0., 0.],
                                          [0., 0., 0.1]],
                        cell=cell)

        pse = PeriodicTable()
        pse.add_element("O", "O_up", spin="up")
        o_up = pse.element("O_up")
        basis_4 = Atoms([o_up],
                        scaled_positions=[[0.27, 0.27, 0.27]],
                        cell=cell)
        b = basis_0 + basis_1 + basis_2 + basis_3 + basis_4
        O_indices = b.select_index("O")
        self.assertEqual(len(b), 7)
        self.assertEqual(len(b.indices), 7)
        self.assertEqual(len(b.species), 4)
        b.__delitem__(O_indices[0])
        self.assertEqual(b.get_chemical_formula(), "H3NOO_up")
        self.assertEqual(len(b), 6)
        self.assertEqual(len(b.indices), 6)
        self.assertEqual(len(b._tag_list), 6)
        self.assertEqual(len(b.species), 4)
        O_indices = b.select_index("O")
        b.__delitem__(O_indices)
        self.assertEqual(b.get_chemical_formula(), "H3NO_up")
        self.assertEqual(len(b), 5)
        self.assertEqual(len(b.indices), 5)
        self.assertEqual(len(b.species), 3)
        self.assertEqual(np.max(b.indices), 2)
        N_indices = b.select_index("N")
        b.__delitem__(N_indices)
        self.assertEqual(b.get_chemical_formula(), "H3O_up")
        self.assertEqual(len(b), 4)
        self.assertEqual(len(b.indices), 4)
        self.assertEqual(len(b.species), 2)
        self.assertEqual(np.max(b.indices), 1)
        O_indices = b.select_index(o_up)
        b.__delitem__(O_indices)
        self.assertEqual(b.get_chemical_formula(), "H3")
        self.assertEqual(len(b), 3)
        self.assertEqual(len(b.indices), 3)
        self.assertEqual(len(b.species), 1)
        self.assertEqual(np.max(b.indices), 0)
Example #17
0
    def test_get_parent_basis(self):
        periodic_table = PeriodicTable()
        periodic_table.add_element(parent_element="O", new_element="O_up")
        O_up = periodic_table.element("O_up")

        O_basis = Atoms([O_up],
                        cell=10.0 * np.eye(3),
                        scaled_positions=[[0.5, 0.5, 0.5]])
        O_simple = Atoms(["O"],
                         cell=10.0 * np.eye(3),
                         scaled_positions=[[0.5, 0.5, 0.5]])
        O_parent = O_basis.get_parent_basis()
        self.assertNotEqual(O_basis, O_parent)
        self.assertEqual(O_simple, O_parent)
        self.assertEqual(O_parent[0].symbol, "O")
        periodic_table.add_element(parent_element="O", new_element="O_down")
        O_down = periodic_table.element("O_down")
        O_basis = Atoms([O_up, O_down],
                        cell=10.0 * np.eye(3),
                        scaled_positions=[[0.5, 0.5, 0.5], [0, 0, 0]])
        O_simple = Atoms(["O", "O"],
                         cell=10.0 * np.eye(3),
                         scaled_positions=[[0.5, 0.5, 0.5]])
        O_parent = O_basis.get_parent_basis()
        self.assertNotEqual(O_basis, O_parent)
        self.assertEqual(O_simple, O_parent)
        self.assertEqual(O_parent.get_chemical_formula(), "O2")
        self.assertEqual(len(O_basis.species), 2)
        self.assertEqual(len(O_simple.species), 1)
        self.assertEqual(len(O_parent.species), 1)
Example #18
0
 def test_get_array(self):
     pos, cell = generate_fcc_lattice()
     basis = Atoms(symbols='Al', positions=pos, cell=cell)
     basis.set_repeat([10, 10, 10])
     spins = np.ones(len(basis), dtype=float)
     basis.set_array(name="spins", a=2 * spins, dtype=int)
     self.assertTrue(np.array_equal(basis.arrays['spins'], 2 * spins))
     self.assertTrue(
         np.array_equal(basis.get_array(name="spins"), 2 * spins))
Example #19
0
 def test_center_coordinates(self):
     cell = 2.2 * np.identity(3)
     NaCl = Atoms('NaCl',
                  scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                  cell=cell)
     NaCl.set_repeat([3, 3, 3])
     NaCl.positions += [2.2, 2.2, 2.2]
     NaCl.center_coordinates_in_unit_cell(origin=-0.5)
     self.assertTrue(-0.5 < np.min(NaCl.scaled_positions))
     self.assertTrue(np.max(NaCl.scaled_positions < 0.5))
     NaCl.center_coordinates_in_unit_cell(origin=0.)
     self.assertTrue(0 <= np.min(NaCl.positions))
     self.assertTrue(np.max(NaCl.scaled_positions < 1))
Example #20
0
 def test_new_array(self):
     pos, cell = generate_fcc_lattice()
     basis = Atoms(symbols='Al', positions=pos, cell=cell)
     basis.set_repeat([10, 10, 10])
     spins = np.ones(len(basis))
     basis.new_array(name="spins", a=spins)
     self.assertTrue(np.array_equal(basis.arrays['spins'], spins))
Example #21
0
 def test_set_absolute(self):
     a = 4.05  # Gold lattice constant
     b = a / 2.
     positions = np.array([(0.5, 0.4, 0.)])
     fcc = Atoms(symbols=['Au'],
                 scaled_positions=positions,
                 cell=[(0, b, b), (b, 0, b), (b, b, 0)],
                 pbc=True)
     # fcc.set_absolute()
     # print fcc.positions
     # fcc.set_relative()
     self.assertTrue(
         np.linalg.norm(fcc.scaled_positions - positions) < 1e-10)
Example #22
0
 def test_to_hdf(self):
     if sys.version_info[0] >= 3:
         filename = "../static/pyiron_atomistics/test_hdf"
         abs_filename = os.path.abspath(filename)
         hdf_obj = FileHDFio(abs_filename)
         pos, cell = generate_fcc_lattice()
         basis = Atoms(symbols='Al', positions=pos, cell=cell)
         basis.set_repeat([2, 2, 2])
         basis.to_hdf(hdf_obj, "test_structure")
         self.assertTrue(
             np.array_equal(hdf_obj["test_structure/positions"],
                            basis.positions))
         basis_new = Atoms().from_hdf(hdf_obj, "test_structure")
         self.assertEqual(basis, basis_new)
Example #23
0
 def test_set_species(self):
     pos, cell = generate_fcc_lattice()
     pse = PeriodicTable()
     el = pse.element("Pt")
     basis = Atoms(symbols='Al', positions=pos, cell=cell)
     self.assertEqual(basis.get_chemical_formula(), "Al")
     basis.set_species([el])
     self.assertEqual(basis.get_chemical_formula(), "Pt")
     self.assertTrue("Al" not in [sp.Abbreviation]
                     for sp in basis._species_to_index_dict.keys())
     self.assertTrue("Pt" in [sp.Abbreviation]
                     for sp in basis._species_to_index_dict.keys())
Example #24
0
    def test_cluster_analysis(self):
        import random
        cell = 2.2 * np.identity(3)
        Al_sc = Atoms(elements=['Al', 'Al'],
                      scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                      cell=cell)
        Al_sc.set_repeat([4, 4, 4])
        radius = Al_sc.get_shell_radius()
        neighbors = Al_sc.get_neighbors(radius=radius,
                                        num_neighbors=100,
                                        t_vec=False,
                                        exclude_self=True)

        c_Zn = 0.1
        pse = PeriodicTable()
        Zn = pse.element("Zn")
        random.seed(123456)
        for _ in range(1):
            Zn_ind = random.sample(range(len(Al_sc)), int(c_Zn * len(Al_sc)))
            # for i_Zn in Zn_ind:
            #     Al_sc.elements[i_Zn] = Zn

            cluster = Al_sc.cluster_analysis(Zn_ind, neighbors)
            cluster_len = np.sort([len(v) for k, v in cluster.items()])
Example #25
0
 def from_hdf(self, hdf=None, group_name=None):
     super(StructureContainer, self).from_hdf(hdf=hdf,
                                              group_name=group_name)
     with self.project_hdf5.open("input") as hdf5_input:
         self.structure = Atoms().from_hdf(hdf5_input)
Example #26
0
    def test__add__(self):
        cell = np.eye(3) * 10.0
        basis_0 = Atoms(["O"], scaled_positions=[[0.5, 0.5, 0.5]], cell=cell)
        basis_1 = Atoms(["H"],
                        scaled_positions=[[0.75, 0.75, 0.75]],
                        cell=cell)
        basis_2 = Atoms(["H"],
                        scaled_positions=[[0.25, 0.25, 0.25]],
                        cell=cell)
        basis_3 = Atoms(["H", "O", "N"],
                        scaled_positions=[[0.35, 0.35, 0.35], [0., 0., 0.],
                                          [0., 0., 0.1]],
                        cell=cell)

        pse = PeriodicTable()
        pse.add_element("O", "O_up", spin="up")
        o_up = pse.element("O_up")
        basis_4 = Atoms([o_up],
                        scaled_positions=[[0.27, 0.27, 0.27]],
                        cell=np.eye(3) * 20.0)
        b = basis_0 + basis_1
        self.assertEqual(b.get_chemical_formula(), "HO")
        b = basis_0 + basis_1 + basis_2
        self.assertEqual(b.get_chemical_formula(), "H2O")
        b += basis_2
        self.assertEqual(b.get_chemical_formula(), "H3O")
        b = basis_0 + basis_1 + basis_2 + basis_3
        self.assertEqual(b.get_chemical_formula(), "H3NO2")
        self.assertTrue(
            np.array_equal(b.scaled_positions[b.select_index("N")],
                           [[0., 0., 0.1]]))
        self.assertTrue(
            np.allclose(
                b.scaled_positions[b.select_index("H")],
                [[0.75, 0.75, 0.75], [0.25, 0.25, 0.25], [0.35, 0.35, 0.35]]))
        self.assertTrue(
            np.allclose(b.scaled_positions[b.select_index("O")],
                        [[0.5, 0.5, 0.5], [0., 0., 0.]]))
        b.set_repeat([2, 2, 2])
        self.assertEqual(b.get_chemical_formula(), "H24N8O16")
        b += basis_4
        self.assertEqual(b.get_chemical_formula(), "H24N8O16O_up")
        self.assertTrue(
            np.allclose(b.scaled_positions[b.select_index(o_up)],
                        [[0.27, 0.27, 0.27]]))
        COX = self.C2 + Atom("O", position=[0, 0, -2])
        COX += Atom("O", position=[0, 0, -4])
        COX += COX
        n_objects = len(set(COX.get_species_objects()))
        n_species = len(set(COX.get_chemical_elements()))
        self.assertEqual(n_objects, n_species)
        self.assertEqual(n_objects, 2)
        self.assertEqual(n_species, 2)
        basis_Mg = CrystalStructure("Mg",
                                    bravais_basis="fcc",
                                    lattice_constant=4.2)
        basis_O = CrystalStructure("O",
                                   bravais_basis="fcc",
                                   lattice_constant=4.2)
        # basis_O.set_relative()
        basis_O.scaled_positions += [0., 0., 0.5]
        basis = basis_Mg + basis_O
        self.assertEqual(len(basis._tag_list),
                         len(basis_Mg._tag_list) + len(basis_O._tag_list))
        basis.center_coordinates_in_unit_cell()
        self.assertEqual(basis.get_spacegroup()["Number"], 225)
Example #27
0
 def test_get_equivalent_atoms(self):
     cell = 2.2 * np.identity(3)
     Al_sc = Atoms('AlFe',
                   scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                   cell=cell)
     Al_sc.set_repeat([2, 2, 2])
Example #28
0
 def test_get_ir_reciprocal_mesh(self):
     cell = 2.2 * np.identity(3)
     Al_sc = Atoms('AlAl',
                   scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                   cell=cell)
     self.assertEqual(len(Al_sc.get_ir_reciprocal_mesh([3, 3, 3])[0]), 27)
Example #29
0
 def test_get_space_group(self):
     cell = 2.2 * np.identity(3)
     Al_sc = Atoms('AlAl',
                   scaled_positions=[(0, 0, 0), (0.5, 0.5, 0.5)],
                   cell=cell)
     self.assertEqual(Al_sc.get_spacegroup()['InternationalTableSymbol'],
                      'Im-3m')
     self.assertEqual(Al_sc.get_spacegroup()['Number'], 229)
     cell = 4.2 * (0.5 * np.ones((3, 3)) - 0.5 * np.eye(3))
     Al_fcc = Atoms('Al', scaled_positions=[(0, 0, 0)], cell=cell)
     self.assertEqual(Al_fcc.get_spacegroup()['InternationalTableSymbol'],
                      'Fm-3m')
     self.assertEqual(Al_fcc.get_spacegroup()['Number'], 225)
     a = 3.18
     c = 1.623 * a
     cell = np.eye(3)
     cell[0, 0] = a
     cell[2, 2] = c
     cell[1, 0] = -a / 2.
     cell[1, 1] = np.sqrt(3) * a / 2.
     pos = np.array([[0., 0., 0.], [1. / 3., 2. / 3., 1. / 2.]])
     Mg_hcp = Atoms('Mg2', scaled_positions=pos, cell=cell)
     self.assertEqual(Mg_hcp.get_spacegroup()['Number'], 194)
     cell = np.eye(3)
     cell[0, 0] = a
     cell[2, 2] = c
     cell[1, 1] = np.sqrt(3) * a
     pos = np.array([[0., 0., 0.], [0.5, 0.5, 0.], [0.5, 0.16666667, 0.5],
                     [0., 0.66666667, 0.5]])
     Mg_hcp = Atoms('Mg4', scaled_positions=pos, cell=cell)
     self.assertEqual(Mg_hcp.get_spacegroup()['Number'], 194)
Example #30
0
 def test__init__(self):
     pos, cell = generate_fcc_lattice()
     pse = PeriodicTable()
     el = pse.element("Al")
     basis = Atoms()
     self.assertIsInstance(basis, Atoms)
     self.assertIsInstance(basis.info, dict)
     self.assertIsInstance(basis.arrays, dict)
     self.assertIsInstance(basis.adsorbate_info, dict)
     self.assertIsInstance(basis.units, dict)
     self.assertIsInstance(basis.pbc, (bool, list, np.ndarray))
     self.assertIsInstance(basis.indices, np.ndarray)
     self.assertIsNone(basis._internal_positions)
     self.assertIsNone(basis.positions)
     self.assertIsNone(basis.scaled_positions)
     self.assertIsInstance(basis.species, list)
     self.assertIsInstance(basis.elements, np.ndarray)
     self.assertIsNone(basis.cell)
     basis = Atoms(symbols='Al', positions=pos, cell=cell)
     self.assertIsInstance(basis, Atoms)
     self.assertEqual(basis.get_spacegroup()["Number"], 225)
     basis = Atoms(elements='Al', positions=pos, cell=cell)
     self.assertIsInstance(basis, Atoms)
     basis = Atoms(elements=['Al'], positions=pos, cell=cell)
     self.assertIsInstance(basis, Atoms)
     self.assertRaises(ValueError,
                       Atoms,
                       symbols="Pt",
                       elements='Al',
                       positions=pos,
                       cell=cell)
     basis = Atoms(numbers=[13], positions=pos, cell=cell)
     self.assertEqual(basis.get_majority_species()[1], "Al")
     basis = Atoms(species=[el], indices=[0], positions=pos, cell=cell)
     self.assertEqual(basis.get_majority_species()[1], "Al")
     self.assertIsInstance(basis, Atoms)
     self.assertIsInstance(basis.info, dict)
     self.assertIsInstance(basis.arrays, dict)
     self.assertIsInstance(basis.adsorbate_info, dict)
     self.assertIsInstance(basis.units, dict)
     self.assertIsInstance(basis.pbc, (bool, list, np.ndarray))
     self.assertIsInstance(basis.indices, np.ndarray)
     self.assertIsInstance(basis.species, list)
     self.assertIsInstance(basis.cell, np.ndarray)
     self.assertIsInstance(basis._internal_positions, np.ndarray)
     self.assertIsInstance(basis.positions, np.ndarray)
     self.assertIsInstance(basis.scaled_positions, np.ndarray)
     self.assertIsInstance(basis.elements, np.ndarray)