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)))

get_slab(indices: Tuple[int], n_layers, lateral_repeat: Tuple[int] = (2, 4), vacuum=10.0)[source]#
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.

rutile_slab_101(n_layers=5, lateral_repeat: tuple = (2, 2), vacuum=10.0)[source]#

function for create symmetry slab for rutile structure 101 surface space group: P42/mnm this function is valid only for 6 atoms conventional cell.

rutile_slab_110(n_layers=5, lateral_repeat: tuple = (2, 4), vacuum=10.0)[source]#

function for create symmetry slab for rutile structure 110 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_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

get_neighbor_list(idx: int, cutoff: dict) list[source]#

provided that atom index and return its neighbor in list

Parameters:
  • idx (int) – atom index

  • cutoff (dict) – cutoff for neighbor pair

Returns:

list of atom indices

Return type:

list

Examples

get_neighbor_list(16, {(“O”, “H”): 1.4})

is_cross_z_boundary(element: Optional[str] = None)[source]#
remove_cell_vacuum(adopt_space=2)[source]#

remove the vacuum of z direction cell z must be perpendicular to xy plane