def interactive_forces_getter(self): if self._interactive_vasprun is not None: file_name = os.path.join(self.working_directory, "OUTCAR") forces = self._interactive_vasprun.get_forces( filename=file_name)[-1] forces[vasp_sorter(self.structure)] = forces.copy() return forces else: return None
def test_vasp_sorter(self): write_poscar( structure=self.structure, filename=posixpath.join(self.file_location, "POSCAR_test"), ) test_atoms = read_atoms( posixpath.join(self.file_location, "POSCAR_test")) vasp_order = vasp_sorter(self.structure) self.assertEqual(len(self.structure), len(test_atoms)) self.assertEqual(self.structure[vasp_order], test_atoms) os.remove(posixpath.join(self.file_location, "POSCAR_test"))
def test_manip_contcar(self): for f in self.file_list: if "CONTCAR_Mg" in f: struct = read_atoms(f) Mg_indices = struct.select_index("Mg") add_pos = np.zeros_like(struct.positions) max_Mg = np.argmax(struct.positions[Mg_indices, 2]) init_z = struct.positions[max_Mg, 2] add_pos[np.argsort(vasp_sorter(struct))[max_Mg], 2] += 5.0 manip_contcar(filename=f, new_filename="manip_file", add_pos=add_pos) new_struct = read_atoms("manip_file") Mg_indices = new_struct.select_index("Mg") max_Mg = np.argmax(new_struct.positions[Mg_indices, 2]) final_z = new_struct.positions[max_Mg, 2] self.assertEqual(round(final_z - init_z, 3), 5.0) os.remove("manip_file") break positions = np.ones((3, 3)) positions[0] = [5.0, 5.0, 5.0] positions[1] = [5.0, 5.7, 5.7] positions[2] = [5.0, -5.7, -5.7] struct = Atoms(["O", "H", "H"], positions=positions, cell=10.0 * np.eye(3)) write_poscar(structure=struct, filename="simple_water") add_pos = np.zeros_like(positions) poscar_order = np.argsort(vasp_sorter(struct)) add_pos[poscar_order[struct.select_index("O")], 2] += 3 manip_contcar("simple_water", "simple_water_new", add_pos) new_struct = read_atoms("simple_water_new") self.assertEqual(new_struct.positions[new_struct.select_index("O"), 2], 8) os.remove("simple_water") os.remove("simple_water_new")