def convert_single_structure(cell_file, param_file, directory="."): atoms = io.read(cell_file) io.write(os.path.join(directory, "geo_end.gen"), atoms) with open(param_file, 'r') as stream: castep_params = yaml.load(stream) dftb_params = param_schema.validate({}) # get castep parameters for castep_name, dftb_name in CASTEP_to_DFTB_map.items(): if castep_name in castep_params: dftb_params[dftb_name] = castep_params[castep_name] # get k-points from cell file k_points = map(int, atoms.calc.cell.kpoints_mp_grid.value.split()) dargs = DFTBArgs(dftb_params['dftb_set']) custom_species = atoms.get_array('castep_custom_species') muon_index = np.where(custom_species == dftb_params['mu_symbol'])[0][0] # Add muon mass args = dargs.args args['Driver_'] = 'ConjugateGradient' args['Driver_Masses_'] = '' args['Driver_Masses_Mass_'] = '' args['Driver_Masses_Mass_Atoms'] = '{}'.format(muon_index) args['Driver_Masses_Mass_MassPerAtom [amu]'] = '0.1138' args['Driver_MaxSteps'] = dftb_params['geom_steps'] args['Driver_MaxForceComponent [eV/AA]'] = dftb_params['geom_force_tol'] calc = Dftb(atoms=atoms, kpts=k_points, run_manyDftb_steps=True, **args) calc.write_dftb_in(os.path.join(directory, "dftb_in.hsd"))
def write_dftb_in(self, filename): if self.read_chg and os.path.exists('charges.bin'): read_charges = 'Yes' else: read_charges = 'No' self.parameters['Hamiltonian_ReadInitialCharges'] = read_charges Dftb.write_dftb_in(self, filename)