ectoolkits.structures.rutile110 module#

class ectoolkits.structures.rutile110.Rutile110(atoms, M='Ti', nrow=2, cutoff=2.8, bridge_along='y')[source]#

Bases: Interface

Class for rutile (110)-water interface model

Parameters:

Interface (Interface) – A child class for ASE Atoms. Representing solid-water interface.

get_indices()[source]#
get_slab_obj()[source]#
get_wat()[source]#
static idxslab2idxatoms(idx_target, idx_slab)[source]#
class ectoolkits.structures.rutile110.Rutile1p11Edge(atoms, vecy=None, vecz=None, M='Ti', nrow=2, cutoff=2.8, bridge_along='y')[source]#

Bases: Interface

Interface object for rutile (110) with <1 -1 1> edge-water interface model.

Parameters:

Interface (ASE Atoms) – A child class of ASE atoms

get_indices()[source]#

Returns a dictionary of atom indices in the slab.

This method creates a copy of the indices dictionary from the slab attribute. It then updates each value in the dictionary by converting the slab index to the corresponding atom index.

Returns:

A dictionary where the keys are atom types and the values are lists of atom indices.

Return type:

dict

Example

Assuming rutile is an instance of the Rutile110 class:

>>> indices = rutile.get_indices()
>>> print(indices)
{'O': [1, 2, 3, 4], 'Ti': [5, 6, 7, 8]}

This will print a dictionary where the keys are atom types (‘O’ and ‘Ti’ in this case) and the values are lists of atom indices.

get_slab_obj()[source]#
get_wat()[source]#
static idxslab2idxatoms(idx_target, idx_slab)[source]#
refine_rotM()[source]#
class ectoolkits.structures.rutile110.SlabRutile110(slab, M='Ti', nrow=2, cutoff=2.8, bridge_along='y')[source]#

Bases: Slab

Slab object for rutile 110 slabs

Parameters:

Slab (Slab) – Child class of ASE Atoms class.

get_surf_o()[source]#
get_surf_ti()[source]#
get_surface_indices()[source]#
sep_upper_lower()[source]#
sort_idx()[source]#
class ectoolkits.structures.rutile110.SlabRutile1p11Edge(slab, rotM, M='Ti', nrow=2, cutoff=2.8, bridge_along='y')[source]#

Bases: Slab

Slab object for rutile (110) slab with <1 -1 1> step edge

Parameters:

Slab (Slab) – A child class of ASE Atoms. Representing slab model.

get_surf_o()[source]#
get_surf_ti()[source]#
get_surface_indices()[source]#
static sep_hobr(atoms, idx_hobr, M='Ti')[source]#
sep_ocn2(slab, xyz, idx_O, idx_M, cn)[source]#
sep_ticn5(slab, xyz, idx_O, idx_M, cn)[source]#
sep_upper_lower()[source]#
sort_idx()[source]#
ectoolkits.structures.rutile110.get_triangle(atoms, idx_obr, M='Ti', cutoff=2.8)[source]#

What the heck is this?

ectoolkits.structures.rutile110.sort_by_rows(xyz, idx, rotM=None, n_row=2, bridge_along='y')[source]#

Sorting surface atoms in the (110) row, particularly the M5c’s and Obr’s row-wise.

Algorithm description: (NB: the rotation matrix assumes: bridge_along=”y”. See this convention in the constructor for ‘Rutile1p11Edge’) 1. save the (xx, yy) coordinates with and without rotation (rotation matrix is not required for for a flat model) 2. the ‘make_groups’ method will group rows together using the (rotated) x coordinates: ^ y | |--------- On the left we have and simple demonstration. | * + | Due to the nature of a triclinic box, | * +| single rows, denoted by symbols “+” and “*”, | + * …| might be wrapped to the other end of the box. | + * | The ‘make_groups’ function essentially distinguishes | + * | “+” and “*”. Specifically, the method does something like: | + * | make_groups(array(“+”, “*”)) = array(array(“+”), array(“*”)) |------------> x 3. the collection of three methods, namely, "group_each_row", "sort_each_row", and "sort_grouped_rows", are used to sort each row. For rows without "discontinuity" ("*"), method 'sort_each_row' will suffice. However, complexity arise at discontinuity. For example, if we use "o" to denote a discontinuity, we observe ^ y that after apply the rotation matridx, the two "o" will have the nearly identical 'yy_rot' value. | Hence, in may cases, sorting of this discontinuity is not straitforward. Fortuanetely, this problem is solved |--------- if we first treat different segments of the "+" row separately, and for the discontinuity, we use the original | * + | coordinates to sort the discontinuity (o). A implementation of this algorithm is given in 'sort_grouped_rows' | * o| | o * …| | + * | …………..

ectoolkits.structures.rutile110.trig_vec(atoms, trig)[source]#

What the heck is this?