Beispiel #1
0
def test_equality_of_sqs_objects_with_different_indexing():
    """SQS structures that are the same, but indexed differently should be equal."""
    # TODO: implement this behavior in SQS.__eq__
    config_1 = [['A', 'B'], ['A']]
    occupancy_1 = [[0.25, 0.75], [1]]
    site_ratios_1 = [3, 1]

    config_2 = [['A'], ['A', 'B']]
    occupancy_2 = [[1], [0.25, 0.75]]
    site_ratios_2 = [1, 3]

    s1 = PRLStructure(Lattice.hexagonal(1, 2), ['Mg', 'Mg'], [[0, 0, 0], [0.3333, 0.66666, 0.5]], sublattice_configuration=config_1, sublattice_occupancies=occupancy_1, sublattice_site_ratios=site_ratios_1)
    s2 = PRLStructure(Lattice.hexagonal(1, 2), ['Mg', 'Mg'], [[0, 0, 0], [0.3333, 0.66666, 0.5]], sublattice_configuration=config_2, sublattice_occupancies=occupancy_2, sublattice_site_ratios=site_ratios_2)

    assert s1 == s2
Beispiel #2
0
    def test_structure(self):
        quartz = self.quartz.structure
        np.testing.assert_array_almost_equal(
            quartz.lattice.matrix,
            [[4.913400, 0, 0], [-2.456700, 4.255129, 0], [0, 0, 5.405200]])
        self.assertEqual(quartz.formula, "Si3 O6")
        self.assertNotIn("molecule-ID", self.quartz.atoms.columns)

        ethane = self.ethane.structure
        np.testing.assert_array_almost_equal(ethane.lattice.matrix,
                                             np.diag([10.0] * 3))
        lbounds = np.array(self.ethane.box.bounds)[:, 0]
        coords = self.ethane.atoms[["x", "y", "z"]].values - lbounds
        np.testing.assert_array_almost_equal(ethane.cart_coords, coords)
        np.testing.assert_array_almost_equal(ethane.site_properties["charge"],
                                             self.ethane.atoms["q"])
        tatb = self.tatb.structure
        frac_coords = tatb.frac_coords[381]
        real_frac_coords = frac_coords - np.floor(frac_coords)
        np.testing.assert_array_almost_equal(
            real_frac_coords, [0.01553397, 0.71487872, 0.14134139])

        co = Structure.from_spacegroup(194,
                                       Lattice.hexagonal(2.50078, 4.03333),
                                       ["Co"], [[1 / 3, 2 / 3, 1 / 4]])
        ld_co = LammpsData.from_structure(co)
        self.assertEqual(ld_co.structure.composition.reduced_formula, "Co")
        ni = Structure.from_spacegroup(225, Lattice.cubic(3.50804), ["Ni"],
                                       [[0, 0, 0]])
        ld_ni = LammpsData.from_structure(ni)
        self.assertEqual(ld_ni.structure.composition.reduced_formula, "Ni")
Beispiel #3
0
    def test_structure(self):
        quartz = self.quartz.structure
        np.testing.assert_array_equal(quartz.lattice.matrix,
                                      [[4.913400, 0, 0],
                                       [-2.456700, 4.255129, 0],
                                       [0, 0, 5.405200]])
        self.assertEqual(quartz.formula, "Si3 O6")
        self.assertNotIn("molecule-ID", self.quartz.atoms.columns)

        ethane = self.ethane.structure
        np.testing.assert_array_equal(ethane.lattice.matrix,
                                      np.diag([10.0] * 3))
        lbounds = np.array(self.ethane.box.bounds)[:, 0]
        coords = self.ethane.atoms[["x", "y", "z"]].values - lbounds
        np.testing.assert_array_equal(ethane.cart_coords, coords)
        np.testing.assert_array_equal(ethane.site_properties["charge"],
                                      self.ethane.atoms["q"])
        tatb = self.tatb.structure
        frac_coords = tatb.frac_coords[381]
        real_frac_coords = frac_coords - np.floor(frac_coords)
        np.testing.assert_array_almost_equal(real_frac_coords,
                                             [0.01553397,
                                              0.71487872,
                                              0.14134139])

        co = Structure.from_spacegroup(194,
                                       Lattice.hexagonal(2.50078, 4.03333),
                                       ["Co"], [[1/3, 2/3, 1/4]])
        ld_co = LammpsData.from_structure(co)
        self.assertEqual(ld_co.structure.composition.reduced_formula, "Co")
        ni = Structure.from_spacegroup(225, Lattice.cubic(3.50804),
                                       ["Ni"], [[0, 0, 0]])
        ld_ni = LammpsData.from_structure(ni)
        self.assertEqual(ld_ni.structure.composition.reduced_formula, "Ni")
Beispiel #4
0
def test_equality_of_sqs_objects():
    """SQS structures with different underlying crystal structures are equivalent iff sublattice models are equivalent."""
    config = [['A', 'B'], ['A']]
    occupancy = [[0.5, 0.5], [1]]
    site_ratios = [3, 1]
    # Use same sublattice for different underlying structures. Should be equal
    s1 = PRLStructure(Lattice.hexagonal(1, 2), ['Mg', 'Mg'],
                      [[0, 0, 0], [0.3333, 0.66666, 0.5]],
                      sublattice_configuration=config,
                      sublattice_occupancies=occupancy,
                      sublattice_site_ratios=site_ratios)
    s2 = PRLStructure(Lattice.cubic(1), ['Fe'], [[0, 0, 0]],
                      sublattice_configuration=config,
                      sublattice_occupancies=occupancy,
                      sublattice_site_ratios=site_ratios)
    assert s1 == s2

    # Use same underlying crystal structures, but different sublattice configurations. Should be not equal
    s1.sublattice_site_ratios = [2, 1]
    assert s1 != s2
    s1.sublattice_site_ratios = site_ratios

    s1.sublattice_occupancies = [[0.25, 0.5], [1]]
    assert s1 != s2
    s1.sublattice_occupancies = occupancy

    s1.sublattice_configuration = [['A', 'A'], ['A']]
    assert s1 != s2
    s1.sublattice_configuration = config

    assert s1 == s2
Beispiel #5
0
 def setUp(self):
     self.single_bond = Structure(
         Lattice.cubic(10),
         ["H", "H", "H"], [[1, 0, 0], [0, 0, 0], [6, 0, 0]],
         validate_proximity=False,
         to_unit_cell=False, coords_are_cartesian=True,
         site_properties=None)
     self.linear = Structure(
         Lattice.cubic(10),
         ["H", "H", "H"], [[1, 0, 0], [0, 0, 0], [2, 0, 0]],
         validate_proximity=False,
         to_unit_cell=False, coords_are_cartesian=True,
         site_properties=None)
     self.bent45 = Structure(
         Lattice.cubic(10), ["H", "H", "H"],
         [[0, 0, 0], [0.707, 0.707, 0], [0.707, 0, 0]],
         validate_proximity=False,
         to_unit_cell=False, coords_are_cartesian=True,
         site_properties=None)
     self.cubic = Structure(
         Lattice.cubic(1),
         ["H"], [[0, 0, 0]], validate_proximity=False,
         to_unit_cell=False, coords_are_cartesian=False,
         site_properties=None)
     self.bcc = Structure(
         Lattice.cubic(1),
         ["H", "H"], [[0, 0, 0], [0.5, 0.5, 0.5]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=False, site_properties=None)
     self.fcc = Structure(
         Lattice.cubic(1), ["H", "H", "H", "H"],
         [[0, 0, 0], [0, 0.5, 0.5], [0.5, 0, 0.5], [0.5, 0.5, 0]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=False, site_properties=None)
     self.hcp = Structure(
         Lattice.hexagonal(1, 1.633),
         ["H", "H"],
         [[0.3333, 0.6667, 0.25], [0.6667, 0.3333, 0.75]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=False, site_properties=None)
     self.diamond = Structure(
         Lattice.cubic(1), ["H", "H", "H", "H", "H", "H", "H", "H"],
         [[0, 0, 0.5], [0.75, 0.75, 0.75], [0, 0.5, 0], [0.75, 0.25, 0.25],
          [0.5, 0, 0], [0.25, 0.75, 0.25], [0.5, 0.5, 0.5],
          [0.25, 0.25, 0.75]], validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=False, site_properties=None)
     self.trigonal_off_plane = Structure(
         Lattice.cubic(100),
         ["H", "H", "H", "H"],
         [[0.50, 0.50, 0.50], [0.25, 0.75, 0.25],
          [0.25, 0.25, 0.75], [0.75, 0.25, 0.25]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.regular_triangle = Structure(
         Lattice.cubic(30), ["H", "H", "H", "H"],
         [[15, 15.28867, 15.65], [14.5, 15, 15], [15.5, 15, 15],
          [15, 15.866, 15]], validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.trigonal_planar = Structure(
         Lattice.cubic(30), ["H", "H", "H", "H"],
         [[15, 15.28867, 15], [14.5, 15, 15], [15.5, 15, 15],
          [15, 15.866, 15]], validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.square_planar = Structure(
         Lattice.cubic(30), ["H", "H", "H", "H", "H"],
         [[15, 15, 15], [14.75, 14.75, 15], [14.75, 15.25, 15],
          [15.25, 14.75, 15], [15.25, 15.25, 15]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.square = Structure(
         Lattice.cubic(30), ["H", "H", "H", "H", "H"],
         [[15, 15, 15.707], [14.75, 14.75, 15], [14.75, 15.25, 15],
          [15.25, 14.75, 15], [15.25, 15.25, 15]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.T_shape = Structure(
         Lattice.cubic(30), ["H", "H", "H", "H"],
         [[15, 15, 15], [15, 15, 15.5], [15, 15.5, 15],
          [15, 14.5, 15]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.square_pyramid = Structure(
         Lattice.cubic(30), ["H", "H", "H", "H", "H", "H"],
         [[15, 15, 15], [15, 15, 15.3535], [14.75, 14.75, 15],
          [14.75, 15.25, 15], [15.25, 14.75, 15], [15.25, 15.25, 15]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.pentagonal_planar = Structure(
         Lattice.cubic(30), ["Xe", "F", "F", "F", "F", "F"],
         [[0, -1.6237, 0], [1.17969, 0, 0], [-1.17969, 0, 0],
          [1.90877, -2.24389, 0], [-1.90877, -2.24389, 0], [0, -3.6307, 0]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.pentagonal_pyramid = Structure(
         Lattice.cubic(30), ["Xe", "F", "F", "F", "F", "F", "F"],
         [[0, -1.6237, 0], [0, -1.6237, 1.17969], [1.17969, 0, 0],
          [-1.17969, 0, 0], [1.90877, -2.24389, 0],
          [-1.90877, -2.24389, 0], [0, -3.6307, 0]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.pentagonal_bipyramid = Structure(
         Lattice.cubic(30),
         ["Xe", "F", "F", "F", "F", "F", "F", "F"],
         [[0, -1.6237, 0], [0, -1.6237, -1.17969],
          [0, -1.6237, 1.17969], [1.17969, 0, 0],
          [-1.17969, 0, 0], [1.90877, -2.24389, 0],
          [-1.90877, -2.24389, 0], [0, -3.6307, 0]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.hexagonal_planar = Structure(
         Lattice.cubic(30),
         ["H", "C", "C", "C", "C", "C", "C"],
         [[0, 0, 0], [0.71, 1.2298, 0],
          [-0.71, 1.2298, 0], [0.71, -1.2298, 0], [-0.71, -1.2298, 0],
          [1.4199, 0, 0], [-1.4199, 0, 0]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.hexagonal_pyramid = Structure(
         Lattice.cubic(30),
         ["H", "Li", "C", "C", "C", "C", "C", "C"],
         [[0, 0, 0], [0, 0, 1.675], [0.71, 1.2298, 0],
          [-0.71, 1.2298, 0], [0.71, -1.2298, 0], [-0.71, -1.2298, 0],
          [1.4199, 0, 0], [-1.4199, 0, 0]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.hexagonal_bipyramid = Structure(
         Lattice.cubic(30),
         ["H", "Li", "Li", "C", "C", "C", "C", "C", "C"],
         [[0, 0, 0], [0, 0, 1.675], [0, 0, -1.675],
          [0.71, 1.2298, 0], [-0.71, 1.2298, 0],
          [0.71, -1.2298, 0], [-0.71, -1.2298, 0],
          [1.4199, 0, 0], [-1.4199, 0, 0]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.trigonal_pyramid = Structure(
         Lattice.cubic(30),
         ["P", "Cl", "Cl", "Cl", "Cl"],
         [[0, 0, 0], [0, 0, 2.14], [0, 2.02, 0],
          [1.74937, -1.01, 0], [-1.74937, -1.01, 0]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.trigonal_bipyramidal = Structure(
         Lattice.cubic(30), ["P", "Cl", "Cl", "Cl", "Cl", "Cl"],
         [[0, 0, 0], [0, 0, 2.14], [0, 2.02, 0],
          [1.74937, -1.01, 0], [-1.74937, -1.01, 0], [0, 0, -2.14]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.cuboctahedron = Structure(
         Lattice.cubic(30),
         ["H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H"],
         [[15, 15, 15], [15, 14.5, 14.5], [15, 14.5, 15.5],
          [15, 15.5, 14.5], [15, 15.5, 15.5],
          [14.5, 15, 14.5], [14.5, 15, 15.5], [15.5, 15, 14.5], [15.5, 15, 15.5],
          [14.5, 14.5, 15], [14.5, 15.5, 15], [15.5, 14.5, 15], [15.5, 15.5, 15]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.see_saw_rect = Structure(
         Lattice.cubic(30),
         ["H", "H", "H", "H", "H"],
         [[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, -1.0, 0.0],
          [0.0, 0.0, -1.0], [-1.0, 0.0, 0.0]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
     self.sq_face_capped_trig_pris = Structure(
         Lattice.cubic(30),
         ["H", "H", "H", "H", "H", "H", "H", "H"],
         [[0, 0, 0], [-0.6546536707079771, -0.37796447300922725, 0.6546536707079771],
          [0.6546536707079771, -0.37796447300922725, 0.6546536707079771],
          [0.0, 0.7559289460184545, 0.6546536707079771],
          [-0.6546536707079771, -0.37796447300922725, -0.6546536707079771],
          [0.6546536707079771, -0.37796447300922725, -0.6546536707079771],
          [0.0, 0.7559289460184545, -0.6546536707079771], [0.0, -1.0, 0.0]],
         validate_proximity=False, to_unit_cell=False,
         coords_are_cartesian=True, site_properties=None)
Beispiel #6
0
from pymatgen import Structure, Lattice
from crystal_toolkit.helpers.asymptote import write_asy_file
from crystal_toolkit.components.structure import StructureMoleculeComponent
import os

example_struct = Structure.from_spacegroup(
    "P6_3mc",
    Lattice.hexagonal(3.22, 5.24),
    ["Ga", "N"],
    [[1 / 3, 2 / 3, 0], [1 / 3, 2 / 3, 3 / 8]],
)

smc = StructureMoleculeComponent(example_struct, hide_incomplete_bonds=True)
file_name = "./asy_test/single/GaN.asy"
write_asy_file(smc, file_name)
write_asy_file(smc, "./asy_test/multi/GaN.asy")

example_struct = Structure.from_spacegroup(
    "P6_3mc",
    Lattice.hexagonal(3.22, 5.24),
    ["In", "N"],
    [[1 / 3, 2 / 3, 0], [1 / 3, 2 / 3, 3 / 8]],
)
smc = StructureMoleculeComponent(example_struct, hide_incomplete_bonds=True)
write_asy_file(smc, "./asy_test/multi/InN.asy")
example_struct = Structure.from_spacegroup(
    "P6_3mc",
    Lattice.hexagonal(3.22, 5.24),
    ["Al", "N"],
    [[1 / 3, 2 / 3, 0], [1 / 3, 2 / 3, 3 / 8]],
)
Beispiel #7
0
    write_structure(f,'POSCAR_F1expected')
    write_structure(final,'POSCAR_F1')
    
    #Test 2 - Test in all 3 dimensions
    ssize=[5,5,5]
    fsize=[8,8,8]
    psize=[1,1,1]
    primordialstructure = primf.copy()
    primordialstructure.make_supercell(psize)
    f = primf.copy()
    f.make_supercell(fsize)
    write_structure(primordialstructure, 'POSCAR_prim2')
    final = finite_size_scale('POSCAR_Fdefect', ssize, 'POSCAR_prim2', fsize, psize)
    write_structure(f,'POSCAR_F2expected')
    write_structure(final,'POSCAR_F2')
    
    #Test 3 - Test for non-cubic lattice
    ssize = [4,4,4]
    fsize=[8,8,8]
    psize=[1,1,1]
    mglat = Lattice.hexagonal(3.21,5.21)
    primmg = Structure(mglat,["Mg","Mg"],[[1./3.,2./3.,3./4.],[2./3.,1./3.,1./4.]])
    primordialstructure = primmg.copy()
    primordialstructure.make_supercell(psize)
    f = primmg.copy()
    f.make_supercell(fsize)
    write_structure(primordialstructure,'POSCAR_prim3')
    final = finite_size_scale('POSCAR_Mdefect', ssize, 'POSCAR_prim3', fsize, psize)
    write_structure(f,'POSCAR_Mg3expected')
    write_structure(final,'POSCAR_Mg3')
Beispiel #8
0
    ssize = [5, 5, 5]
    fsize = [8, 8, 8]
    psize = [1, 1, 1]
    primordialstructure = primf.copy()
    primordialstructure.make_supercell(psize)
    f = primf.copy()
    f.make_supercell(fsize)
    write_structure(primordialstructure, 'POSCAR_prim2')
    final = finite_size_scale('POSCAR_Fdefect', ssize, 'POSCAR_prim2', fsize,
                              psize)
    write_structure(f, 'POSCAR_F2expected')
    write_structure(final, 'POSCAR_F2')

    #Test 3 - Test for non-cubic lattice
    ssize = [4, 4, 4]
    fsize = [8, 8, 8]
    psize = [1, 1, 1]
    mglat = Lattice.hexagonal(3.21, 5.21)
    primmg = Structure(
        mglat, ["Mg", "Mg"],
        [[1. / 3., 2. / 3., 3. / 4.], [2. / 3., 1. / 3., 1. / 4.]])
    primordialstructure = primmg.copy()
    primordialstructure.make_supercell(psize)
    f = primmg.copy()
    f.make_supercell(fsize)
    write_structure(primordialstructure, 'POSCAR_prim3')
    final = finite_size_scale('POSCAR_Mdefect', ssize, 'POSCAR_prim3', fsize,
                              psize)
    write_structure(f, 'POSCAR_Mg3expected')
    write_structure(final, 'POSCAR_Mg3')