def write_structure(self, cwd, file_name="structure_wrapper.sx"): structure_file_name = "structure.sx" iw = InputWriter() iw.structure = self.structure iw.write_structure(file_name=structure_file_name, cwd=cwd) with open(os.path.join(cwd, file_name), "w") as f: f.writelines(["structure { include <" + structure_file_name + ">; }"])
def _start_process( self, structure, executable, maxDist=5, ionic_steps=1000, ionic_energy_tolerance=1.0e-3, ionic_force_tolerance=1.0e-2, max_step_length=1.0e-1, soft_mode_damping=1, selective_dynamics=False, ssa=False, ): if selective_dynamics: input_writer_obj = InputWriter() input_writer_obj.structure = structure if ssa: input_writer_obj.structure.set_initial_magnetic_moments(len(structure)*[None]) input_writer_obj.write_structure( file_name="structure.sx", cwd=self.working_directory, structure_str=None, symmetry_enabled=True, keep_angstrom=True, ) self._write_input( working_directory=self.working_directory, maxDist=maxDist, ionic_steps=ionic_steps, ionic_energy_tolerance=ionic_energy_tolerance, ionic_force_tolerance=ionic_force_tolerance, max_step_length=max_step_length, soft_mode_damping=soft_mode_damping, selective_dynamics=selective_dynamics, ) shell = os.name == "nt" try: with open( posixpath.join(self.working_directory, "out.txt"), mode="w" ) as f_out: with open( posixpath.join(self.working_directory, "error.txt"), mode="w" ) as f_err: self._process = subprocess.Popen( [executable], cwd=self.working_directory, shell=shell, stdout=f_out, stderr=f_err, universal_newlines=True, ) except subprocess.CalledProcessError as e: raise ValueError("run_job.py crashed") while not self._interactive_pipes_initialized(self.working_directory): time.sleep(1) self._interactive_initialize_interface()