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.
- 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.
- 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.
- 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.
- 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 * …| | + * | …………..