def freeze_center(slab): sf = AdsorbateSiteFinder(slab) surf_sites = sf.find_surface_sites_by_height(slab, height=5, bottom=True) sd_lst = [] for site in slab: if site in surf_sites: sd_lst.append([True, True, True]) else: sd_lst.append([False, False, False]) slab.add_site_property('selective_dynamics', sd_lst) return slab
def determine_coverage(slab, coverage, ref_species=None, height=2.1): sf = AdsorbateSiteFinder(slab) surf_sites = sf.find_surface_sites_by_height(slab, height=height) if ref_species == None: n_surf_atoms = len(surf_sites) else: n_surf_atoms = 0 for site in surf_sites: if site.species_string == ref_species: n_surf_atoms += 1 # print(n_surf_atoms) n_sites_init = n_surf_atoms*coverage n_sites = np.round(n_sites_init) if n_sites != n_sites_init: actual_coverage = n_sites/n_surf_atoms print('Warning: the number of sites used does not exactly match the specified coverage, the actual coverage is %s' %actual_coverage) else: actual_coverage = coverage n_sites = int(n_sites) return n_sites, actual_coverage