Supercells

class conquest2a.supercell.supercell(repeats_x: int, repeats_y: int, repeats_z: int, coords_proc: conquest_coordinates_processor)

Class to produce supercells. CONQUEST deals with orthorhombic cells only. The resulting supercell will therefore be orthorhombic.

Parameters:
  • repeats_x (int) – Number of repeats along the \(a\) lattice vector

  • repeats_y (int) – Number of repeats along the \(b\) lattice vector

  • repeats_z (int) – Number of repeats along the \(c\) lattice vector

  • coords_proc (conquest_coordinates_processor) – The conquest_coordinates_processor to use.

Raises:

ValueError – If any of the repeats_* is not a positive integer

create_supercell() None

This method creates the Atom s of the new supercell, looping through the original atoms, creating new ones corresponding to the repeats in each direction.

In terms of fractional coordinates, we set new coords of the original atoms to be \(x' = x/N_x, y' = y/N_y, z' = z/N_z\)

We then take these new coordinates, and create new atoms of the same elements, with coords \((x', y', z')\) for every repeats_x,y,z respectively. i.e. we add \(1/N_x, 1/N_y, 1/N_z\) in the appropriate direction.

Example: Consider a bcc crystal defined by A: (0,0,0) and B: (1/2, 1/2, 1/2). Suppose we want to make a 3x2x2 supercell: expect 24 atoms in the final cell. i.e. duplicate 3 in the “a” direction, twice in the other 2 directions. We first rescale the lattice parameters, then we rescale the fractional coordinates

(0,0,0) is trivial, but B gets rescaled to (1/2 * 1/3, 1/2 * 1/2, 1/2 * 1/2) = (1/6, 1/4, 1/4)

However, the original (0,0,0) now has duplicates in x,y,z, namely the new atoms at (0,0,0) + {(1/3, 0, 0), (0, 1/2, 0), (0,0,1/2), …}

new_num_atoms() int

Gets the number of atoms in the new supercell. Needed for the coordinates file.

Returns:

The number of atoms in the new supercell

Return type:

int

scale_lattice_vectors() None

Produce the supercell’s lattice vectors based on the repeats supplied.