def get_cc_structures(ground: Structure, excited: Structure, displacements: np.ndarray, remove_zero: bool = True) -> Tuple[List, List]: """Generate the structures for a CC diagram. Parameters ---------- ground : pymatgen.core.structure.Structure pymatgen structure corresponding to the ground (final) state excited : pymatgen.core.structure.Structure pymatgen structure corresponding to the excited (initial) state displacements : list(float) list of displacements to compute the perturbed structures. Note: the displacements are for only one potential energy surface and will be applied to both (e.g. displacements=np.linspace(-0.1, 0.1, 5)) will return 10 structures 5 of the ground state displaced at +-10%, +-5%, and 0% and 5 of the excited state displaced similarly) remove_zero : bool remove 0% displacement from list (default is True) Returns ------- ground_structs = list(pymatgen.core.structure.Struture) a list of structures corresponding to the displaced ground state excited_structs = list(pymatgen.core.structure.Structure) a list of structures corresponding to the displaced excited state """ displacements = np.array(displacements) if remove_zero: displacements = displacements[displacements != 0.] ground_structs = ground.interpolate(excited, nimages=displacements) excited_structs = ground.interpolate(excited, nimages=(displacements + 1.)) return ground_structs, excited_structs
def setUp(self): c1 = [[0.5] * 3, [0.9] * 3] c2 = [[0.5] * 3, [0.9, 0.1, 0.1]] s1 = Structure(Lattice.cubic(5), ['Si', 'Si'], c1) s2 = Structure(Lattice.cubic(5), ['Si', 'Si'], c2) structs = [] for s in s1.interpolate(s2, 3, pbc=True): structs.append(Structure.from_sites(s.sites, to_unit_cell=True)) self.structures = structs self.vis = MITNEBSet(self.structures)
def test_write_inputs(self): c1 = [[0.5] * 3, [0.9] * 3] c2 = [[0.5] * 3, [0.9, 0.1, 0.1]] s1 = Structure(Lattice.cubic(5), ['Si', 'Si'], c1) s2 = Structure(Lattice.cubic(5), ['Si', 'Si'], c2) structs = [] for s in s1.interpolate(s2, 3, pbc=True): structs.append(Structure.from_sites(s.sites, to_unit_cell=True)) fc = self.vis._process_structures(structs)[2].frac_coords self.assertTrue(np.allclose(fc, [[0.5]*3,[0.9, 1.033333, 1.0333333]]))
def test_write_inputs(self): c1 = [[0.5] * 3, [0.9] * 3] c2 = [[0.5] * 3, [0.9, 0.1, 0.1]] s1 = Structure(Lattice.cubic(5), ['Si', 'Si'], c1) s2 = Structure(Lattice.cubic(5), ['Si', 'Si'], c2) structs = [] for s in s1.interpolate(s2, 3, pbc=True): structs.append(Structure.from_sites(s.sites, to_unit_cell=True)) fc = self.vis._process_structures(structs)[2].frac_coords self.assertTrue( np.allclose(fc, [[0.5] * 3, [0.9, 1.033333, 1.0333333]]))