Symmetry¶
Let \(\mathbf A^T=(\mathbf a_0,\mathbf a_1, \mathbf a_2)\), where \(\mathbf a_0\), \(\mathbf a_1\) and \(\mathbf a_2\) are the lattice vectors of the unit cell.
Note
\((\mathbf a_c)_v=\mathbf A_{cv}\) is stored in gd.cell_cv[c, v]
in units of Bohr and in atoms.cell[c, v]
in Å units.
The relation between scaled positions \(\mathbf s\) and xyzpositions \(\mathbf r\) is \(\mathbf r=\mathbf A^T\mathbf s\).
A crystal has a set of symmetry operations (symmetry.op_scc
) in
the form of matrices \(\mathbf U\) so that the lattice vectors are
transformed to \(\mathbf A'=\mathbf U\mathbf A\) and \(\mathbf r\) is
transformed to \(\mathbf r'\) as:
where \(\mathbf M=\mathbf A^T\mathbf U^T\mathbf A^{T}\).
If we want to express \(\mathbf r'\) in terms of the original lattice vectors (\(\mathbf r'=\mathbf A^T\mathbf s'\)), we get:
Note
The \(\mathbf U\) matrices contain only the integers 1, 0 and 1. Also note, that if \(\mathbf U\) is a symmetry operation, then \(\mathbf U^{1}\) is too.
Let \(\tilde\psi_{\mathbf k}(\mathbf r)\) be a Bloch wave function and \(\mathbf R\) any Bravais lattice vector:
Transforming \(\tilde\psi_{\mathbf k}\) with our symmetry operation, we get \(\tilde\psi'_{\mathbf k'}(\mathbf r)=\tilde\psi_{\mathbf k}(\mathbf M\mathbf r)\) and:
From this equation it is seen that \(\mathbf k'=\mathbf M^T\mathbf k\). In terms of scaled kpoints \(\mathbf q\), where:
we get \(\mathbf q'=\mathbf U\mathbf q\).
Besides cystal symmetry, there is also time reversal symmetry for all systems with no magnetic field. The wavefunction for \({\mathbf k}\) and \({\mathbf k}\) is related as:
If in addition the crystal has inversion symmetry, then the wavefunction should satisfy:
Note
Time reversal symmetry operation is not included in symmetry.op_scc
.
Details of the symmetry object¶

class
gpaw.symmetry.
Symmetry
(id_a, cell_cv, pbc_c=array([True, True, True]), tolerance=1e07, point_group=True, time_reversal=True, symmorphic=True, allow_invert_aperiodic_axes=True)[source]¶ Interface class for determination of symmetry, point and space groups.
It also provides to apply symmetry operations to kpoint grids, wavefunctions and forces.
Construct symmetry object.
Parameters:
 id_a: list of int
Numbered atomic types
 cell_cv: array(3,3), float
Cartesian lattice vectors
 pbc_c: array(3), bool
Periodic boundary conditions.
 tolerance: float
Tolerance for symmetry determination.
 symmorphic: bool
Switch for the use of nonsymmorphic symmetries aka: symmetries with fractional translations. Default is to use only symmorphic symmetries.
 point_group: bool
Use pointgroup symmetries.
 time_reversal: bool
Use timereversal symmetry.
 tolerance: float
Relative tolerance.
Attributes:
 op_scc:
Array of rotation matrices
 ft_sc:
Array of fractional translation vectors
 a_sa:
Array of atomic indices after symmetry operation
 has_inversion:
(bool) Have inversion

analyze
(spos_ac)[source]¶ Determine list of symmetry operations.
First determine all symmetry operations of the cell. Then call
prune_symmetries
to remove those symmetries that are not satisfied by the atoms.It is not mandatory to call this method. If not called, only time reversal symmetry may be used.

check_one_symmetry
(spos_ac, op_cc, ft_c, a_ij)[source]¶ Checks whether atoms satisfy one given symmetry operation.

reduce
(bzk_kc, comm=None)[source]¶ Reduce kpoints to irreducible part of the BZ.
Returns the irreducible kpoints and the weights and other stuff.

symmetrize_wavefunction
(a_g, kibz_c, kbz_c, op_cc, time_reversal)[source]¶ Generate Bloch function from symmetry related function in the IBZ.
 a_g: ndarray
Array with Bloch function from the irreducible BZ.
 kibz_c: ndarray
Corresponing kpoint coordinates.
 kbz_c: ndarray
Kpoint coordinates of the symmetry related kpoint.
 op_cc: ndarray
Point group operation connecting the two kpoints.
 timereversal: bool
Timereversal symmetry required in addition to the point group symmetry to connect the two kpoints.