ectoolkits.structures.slab module#
- class ectoolkits.structures.slab.RutileSlab(symbols=None, positions=None, numbers=None, tags=None, momenta=None, masses=None, magmoms=None, charges=None, scaled_positions=None, cell=None, pbc=None, celldisp=None, constraint=None, calculator=None, info=None, velocities=None)[source]#
Bases:
Slab
class atoms used for rutile like(structure) system space group: P42/mnm Usage: rutile = read(“Rutile-exp.cif”) x = RutileType(rutile) slab = [] for i in range(3, 7):
slab.append(x.get_slab(indices=(1, 1, 0), n_layers=i, lateral_repeat=(2, 4)))
- rutile_slab_001(n_layers=5, lateral_repeat: tuple = (2, 2), vacuum=10.0)[source]#
function for create symmetry slab for rutile structure 001 surface space group: P42/mnm this function is valid only for 6 atoms conventional cell.
- rutile_slab_100(n_layers=5, lateral_repeat: tuple = (2, 3), vacuum=10.0)[source]#
function for create symmetry slab for rutile structure 100 surface space group: P42/mnm this function is valid only for 6 atoms conventional cell.
- class ectoolkits.structures.slab.Slab(symbols=None, positions=None, numbers=None, tags=None, momenta=None, masses=None, magmoms=None, charges=None, scaled_positions=None, cell=None, pbc=None, celldisp=None, constraint=None, calculator=None, info=None, velocities=None)[source]#
Bases:
Atoms
Object inherent from Atoms object in ASE. Add method for vacuum slab model
- Parameters:
Atoms (_type_) – Atoms object int ASE
- add_adsorbate(ad_site_idx: int, vertical_dist: float, adsorbate: Atoms, contact_atom_idx: int = 0, lateral_shift: Tuple[float] = (0, 0))[source]#
- add_adsorbates(ad_site_idx_list: List[int], vertical_dist: float, adsorbate: Atoms, contact_atom_idx: int = 0, lateral_shift: Tuple[float] = (0, 0))[source]#
- del_from_range(zmin: int, zmax: int, element: Optional[str] = None) Atoms [source]#
_summary_
_extended_summary_
- Parameters:
zmin (int) – _description_
zmax (int) – _description_
element (str, optional) – _description_. Defaults to None.
- Returns:
_description_
- Return type:
Atoms
- del_surf_layer(element: Optional[str] = None, tolerance=0.1, dsur='up', check_cross_boundary=False)[source]#
delete the layer atoms,
_extended_summary_
- Parameters:
element (str, optional) – _description_. Defaults to None.
tolerance (float, optional) – _description_. Defaults to 0.1.
dsur (str, optional) – _description_. Defaults to ‘up’.
- Returns:
_description_
- Return type:
_type_
- find_element_idx_list(element: str) list [source]#
find atom index provided that element symbol
_extended_summary_
- Parameters:
element (str) – element symbol
- Returns:
list of atom indices
- Return type:
list
- find_idx_from_range(zmin: int, zmax: int, element: Optional[str] = None) list [source]#
_summary_
_extended_summary_
- Parameters:
zmin (int) – minimum in z
zmax (int) – maximum in z
element (str, optional) – element symbol, None means all atoms. Defaults to None.
- Returns:
list of atom indices
- Return type:
list
- find_surf_idx(element: Optional[str] = None, tolerance: float = 0.1, dsur: str = 'up', check_cross_boundary=False, trans_z_dist=5) list [source]#
find atom indexs at surface
_extended_summary_
- Parameters:
element (str) – element symbol
tolerance (float, optional) – tolerance for define a layer. Defaults to 0.1.
dsur (str, optional) – direction of surface, ‘up’ or ‘dw’. for a vacuum-slab model,
'up'. (you have up surface and down surface. Defaults to) –
- Returns:
list of atom indices
- Return type:
list
- generate_components_symmetry_box(water_box_len, ads_components_smiles: list, ads_components_counts: list, bulk_components_smiles: list, bulk_components_counts: list, ads_limit=0.5, bulk_dw=None, bulk_up=None)[source]#
Generate a slab-aligned box with symmetric distribution of water, adsorbed molecules, and bulk components.
- Parameters:
water_box_len (float) – Height of the water box along z-direction.
ads_components_smiles (list) – SMILES list of adsorbed components.
ads_components_counts (list) – Corresponding counts of adsorbed components.
bulk_components_smiles (list) – SMILES list of bulk components.
bulk_components_counts (list) – Corresponding counts of bulk components.
ads_limit (float) – Vertical range (in Å) above and below the surface for placing adsorbed species. Default = 0.5 Å.
bulk_dw (float, optional) – Lower boundary (Å) of the symmetric bulk region (below box center).
bulk_up (float, optional) – Upper boundary (Å) of the symmetric bulk region (below box center). Must satisfy: 0 < bulk_dw < bulk_up < water_box_len / 2. If set, creates symmetric regions for bulk placement.
- Returns:
None. Generates a Packmol input file and runs Packmol to generate watbox.xyz.
Example
>>> from ectoolkits.structures.tools import generate_components_symmetry_box >>> generate_components_symmetry_box( ... water_box_len = 20 ... ads_components_smiles=["[Cl-]"], ... ads_components_counts=[2], ... bulk_components_smiles=["[K+]", "[Cl-]"], ... bulk_components_counts=[3, 3], ... ads_limit=0.5, ... bulk_dw = 3, ... bulk_up = 6 )
- generate_interface(water_box_len: float, top_surface_idx: List[int], bottom_surface_idx: List[int])[source]#
merge slab model and water box together
- Parameters:
water_box_len –
top_surface_idx –
bottom_surface_idx –
- Return type:
tmp
- generate_water_box(water_box_len)[source]#
function to generate water box x and y length is from self length :param water_box_len:
Returns:
- get_cus(input_idx, coord_num, cutoff)[source]#
function to get atom index of coordinate unsaturated sites. slab: Atoms object, the slab model input_idx: the index of the atom you want get the coordination number coord_num: coordination number for coordinate unsaturated sites, the number must be less then the full coordination cutoff: the cutoff radius defining coordination. something like: {(‘Ti’, ‘O’): 2.2} return: the index for cus atoms