Triclinic (TRI)#

Pearson symbol: aP

Constructor: TRI()

It is defined by six parameters \(a\), \(b\), \(c\) and \(\alpha\), \(\beta\), \(\gamma\). Standardized primitive and conventional cells in the default orientation are

\[\begin{split}\begin{matrix} \boldsymbol{a}_1^s &=& \boldsymbol{a}_1^{cs} &=& (a, &0, &0)\\ \boldsymbol{a}_2^s &=& \boldsymbol{a}_2^{cs} &=& (b\cos\gamma, &b\sin\gamma, &0)\\ \boldsymbol{a}_3^s &=& \boldsymbol{a}_3^{cs} &=& (c\cos\beta, &\dfrac{c(\cos\alpha - \cos\beta\cos\gamma)}{\sin\gamma}, &\dfrac{c}{\sin\gamma}\sqrt{\sin^2\gamma - \cos^2\alpha - \cos^2\beta + 2\cos\alpha\cos\beta\cos\gamma}) \end{matrix}\end{split}\]

Transformation matrix from standardized primitive cell to standardized conventional cell is

\[\begin{split}\boldsymbol{C} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{pmatrix} \qquad \boldsymbol{C}^{-1} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{pmatrix}\end{split}\]

K-path#

TRI1a#

\(\mathrm{X-\Gamma-Y\vert L-\Gamma-Z\vert N-\Gamma-M\vert R-\Gamma}\)

Point

\(\times\boldsymbol{b}_1^s\)

\(\times\boldsymbol{b}_2^s\)

\(\times\boldsymbol{b}_3^s\)

\(\mathrm{\Gamma}\)

\(0\)

\(0\)

\(0\)

\(\mathrm{L}\)

\(1/2\)

\(1/2\)

\(0\)

\(\mathrm{M}\)

\(0\)

\(1/2\)

\(1/2\)

\(\mathrm{N}\)

\(1/2\)

\(0\)

\(1/2\)

\(\mathrm{R}\)

\(1/2\)

\(1/2\)

\(1/2\)

\(\mathrm{X}\)

\(1/2\)

\(0\)

\(0\)

\(\mathrm{Y}\)

\(0\)

\(1/2\)

\(0\)

\(\mathrm{Z}\)

\(0\)

\(0\)

\(1/2\)

TRI2a#

\(\mathrm{X-\Gamma-Y\vert L-\Gamma-Z\vert N-\Gamma-M\vert R-\Gamma}\)

Point

\(\times\boldsymbol{b}_1^s\)

\(\times\boldsymbol{b}_2^s\)

\(\times\boldsymbol{b}_3^s\)

\(\mathrm{\Gamma}\)

\(0\)

\(0\)

\(0\)

\(\mathrm{L}\)

\(1/2\)

\(1/2\)

\(0\)

\(\mathrm{M}\)

\(0\)

\(1/2\)

\(1/2\)

\(\mathrm{N}\)

\(1/2\)

\(0\)

\(1/2\)

\(\mathrm{R}\)

\(1/2\)

\(1/2\)

\(1/2\)

\(\mathrm{X}\)

\(1/2\)

\(0\)

\(0\)

\(\mathrm{Y}\)

\(0\)

\(1/2\)

\(0\)

\(\mathrm{Z}\)

\(0\)

\(0\)

\(1/2\)

TRI1b#

\(\mathrm{X-\Gamma-Y\vert L-\Gamma-Z\vert N-\Gamma-M\vert R-\Gamma}\)

Point

\(\times\boldsymbol{b}_1^s\)

\(\times\boldsymbol{b}_2^s\)

\(\times\boldsymbol{b}_3^s\)

\(\mathrm{\Gamma}\)

\(0\)

\(0\)

\(0\)

\(\mathrm{L}\)

\(1/2\)

\(-1/2\)

\(0\)

\(\mathrm{M}\)

\(0\)

\(0\)

\(1/2\)

\(\mathrm{N}\)

\(-1/2\)

\(-1/2\)

\(1/2\)

\(\mathrm{R}\)

\(0\)

\(-1/2\)

\(1/2\)

\(\mathrm{X}\)

\(0\)

\(-1/2\)

\(0\)

\(\mathrm{Y}\)

\(1/2\)

\(0\)

\(0\)

\(\mathrm{Z}\)

\(-1/2\)

\(0\)

\(1/2\)

TRI2b#

\(\mathrm{X-\Gamma-Y\vert L-\Gamma-Z\vert N-\Gamma-M\vert R-\Gamma}\)

Point

\(\times\boldsymbol{b}_1^s\)

\(\times\boldsymbol{b}_2^s\)

\(\times\boldsymbol{b}_3^s\)

\(\mathrm{\Gamma}\)

\(0\)

\(0\)

\(0\)

\(\mathrm{L}\)

\(1/2\)

\(-1/2\)

\(0\)

\(\mathrm{M}\)

\(0\)

\(0\)

\(1/2\)

\(\mathrm{N}\)

\(-1/2\)

\(-1/2\)

\(1/2\)

\(\mathrm{R}\)

\(0\)

\(-1/2\)

\(1/2\)

\(\mathrm{X}\)

\(0\)

\(-1/2\)

\(0\)

\(\mathrm{Y}\)

\(1/2\)

\(0\)

\(0\)

\(\mathrm{Z}\)

\(-1/2\)

\(0\)

\(1/2\)

Variations#

There are four variations of triclinic lattice.

TRI1a#

\(k_{\alpha} > 90^{\circ}, k_{\beta} > 90^{\circ}, k_{\gamma} > 90^{\circ}, k_{\gamma} = \min(k_{\alpha}, k_{\beta}, k_{\gamma})\)

TRI2a#

\(k_{\alpha} > 90^{\circ}, k_{\beta} > 90^{\circ}, k_{\gamma} = 90^{\circ}\)

TRI1b#

\(k_{\alpha} < 90^{\circ}, k_{\beta} < 90^{\circ}, k_{\gamma} < 90^{\circ}, k_{\gamma} = \max(k_{\alpha}, k_{\beta}, k_{\gamma})\)

TRI2b#

\(k_{\alpha} < 90^{\circ}, k_{\beta} < 90^{\circ}, k_{\gamma} = 90^{\circ}\)

In definition of the examples we cheated and defined them through reciprocal lattice parameters.

Examples#

TRI1a#

Brillouin zone and default kpath#

import wulfric as wulf

cell = wulf.cell.get_cell_example("TRI1a")
backend = wulf.visualization.PlotlyBackend()
backend.plot(cell, kind="brillouin-kpath")
# Save an image:
backend.save("tri1a_reciprocal.png")
# Interactive plot:
backend.show()

Primitive, Wigner-Seitz and conventional cells#

Click on the legend to hide a cell.

import wulfric as wulf

cell = wulf.cell.get_cell_example("TRI1a")
backend = wulf.visualization.PlotlyBackend()
backend.plot(cell, kind="primitive", label="primitive", color="black")
backend.plot(cell, kind="wigner-seitz", label="wigner-seitz", color="green")
# Save an image:
backend.save("tri1a_real.png")
# Interactive plot:
backend.show()

TRI2a#

Brillouin zone and default kpath#

import wulfric as wulf

cell = wulf.cell.get_cell_example("TRI2a")
backend = wulf.visualization.PlotlyBackend()
backend.plot(cell, kind="brillouin-kpath")
# Save an image:
backend.save("tri2a_reciprocal.png")
# Interactive plot:
backend.show()

Primitive, Wigner-Seitz and conventional cells#

Click on the legend to hide a cell.

import wulfric as wulf

cell = wulf.cell.get_cell_example("TRI2a")
backend = wulf.visualization.PlotlyBackend()
backend.plot(cell, kind="primitive", label="primitive", color="black")
backend.plot(cell, kind="wigner-seitz", label="wigner-seitz", color="green")
# Save an image:
backend.save("tri2a_real.png")
# Interactive plot:
backend.show()

TRI1b#

Brillouin zone and default kpath#

import wulfric as wulf

cell = wulf.cell.get_cell_example("TRI1b")
backend = wulf.visualization.PlotlyBackend()
backend.plot(cell, kind="brillouin-kpath")
# Save an image:
backend.save("tri1b_reciprocal.png")
# Interactive plot:
backend.show()

Primitive, Wigner-Seitz and conventional cells#

Click on the legend to hide a cell.

import wulfric as wulf

cell = wulf.cell.get_cell_example("TRI1b")
backend = wulf.visualization.PlotlyBackend()
backend.plot(cell, kind="primitive", label="primitive", color="black")
backend.plot(cell, kind="wigner-seitz", label="wigner-seitz", color="green")
# Save an image:
backend.save("tri1b_real.png")
# Interactive plot:
backend.show()

TRI2b#

Brillouin zone and default kpath#

import wulfric as wulf

cell = wulf.cell.get_cell_example("TRI2b")
backend = wulf.visualization.PlotlyBackend()
backend.plot(cell, kind="brillouin-kpath")
# Save an image:
backend.save("tri2b_reciprocal.png")
# Interactive plot:
backend.show()

Primitive, Wigner-Seitz and conventional cells#

Click on the legend to hide a cell.

import wulfric as wulf

cell = wulf.cell.get_cell_example("TRI2b")
backend = wulf.visualization.PlotlyBackend()
backend.plot(cell, kind="primitive", label="primitive", color="black")
backend.plot(cell, kind="wigner-seitz", label="wigner-seitz", color="green")
# Save an image:
backend.save("tri2b_real.png")
# Interactive plot:
backend.show()

Cell standardization#

For the triclinic cell the standardization is performed on the reciprocal primitive cell.

One of the four conditions have to be met:

  • \(k_{\gamma} = 90^{\circ}\) and other two angles are \(> 90^{\circ}\).

  • \(k_{\gamma} = 90^{\circ}\) and other two angles are \(< 90^{\circ}\).

  • All reciprocal cell angles (\(k_{\alpha}\), \(k_{\beta}\), \(k_{\gamma}\)) are \(> 90^{\circ}\) and \(k_{\gamma} = \min(k_{\alpha}, k_{\beta}, k_{\gamma})\).

  • All reciprocal cell angles (\(k_{\alpha}\), \(k_{\beta}\), \(k_{\gamma}\)) are \(< 90^{\circ}\) and \(k_{\gamma} = \max(k_{\alpha}, k_{\beta}, k_{\gamma})\).

First the reciprocal cell \(\boldsymbol{B}\) is computed from the given primitive cell \(\boldsymbol{A}\). Then the standardization matrix for the reciprocal cell :math"boldsymbol{S}_1^{r} is constructed in two steps

Step 1#

In this step we ensure either of the two conditions: all angles are \(\le 90^{\circ}\) or all angles are \(\ge 90^{\circ}\).

  • If \(k_{\alpha} \ge \frac{\pi}{2}\) and \(k_{\beta} \ge \frac{\pi}{2}\) and \(k_{\gamma} \ge \frac{\pi}{2}\) or \(k_{\alpha} \le \frac{\pi}{2}\) and \(k_{\beta} \le \frac{\pi}{2}\) and \(k_{\gamma} \le \frac{\pi}{2}\) then

    \[(\boldsymbol{b}_1^{(1)}, \boldsymbol{b}_2^{(1)}, \boldsymbol{b}_3^{(1)}) = (\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3)\]

    and

    \[\begin{split}\boldsymbol{S}_1^{r} = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}\end{split}\]
  • If \(k_{\alpha} \ge \frac{\pi}{2}\) and \(k_{\beta} \ge \frac{\pi}{2}\) and \(k_{\gamma} \le \frac{\pi}{2}\) or \(k_{\alpha} \le \frac{\pi}{2}\) and \(k_{\beta} \le \frac{\pi}{2}\) and \(k_{\gamma} \ge \frac{\pi}{2}\) then

    \[(\boldsymbol{b}_1^{(1)}, \boldsymbol{b}_2^{(1)}, \boldsymbol{b}_3^{(1)}) = (-\boldsymbol{b}_1, -\boldsymbol{b}_2, \boldsymbol{b}_3)\]

    and

    \[\begin{split}\boldsymbol{S}_1 = \begin{pmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{pmatrix}\end{split}\]
  • If \(k_{\alpha} \ge \frac{\pi}{2}\) and \(k_{\beta} \le \frac{\pi}{2}\) and \(k_{\gamma} \ge \frac{\pi}{2}\) or \(k_{\alpha} \le \frac{\pi}{2}\) and \(k_{\beta} \ge \frac{\pi}{2}\) and \(k_{\gamma} \le \frac{\pi}{2}\) then

    \[(\boldsymbol{b}_1^{(1)}, \boldsymbol{b}_2^{(1)}, \boldsymbol{b}_3^{(1)}) = (-\boldsymbol{b}_1, \boldsymbol{b}_2, -\boldsymbol{b}_3)\]

    and

    \[\begin{split}\boldsymbol{S}_1 = \begin{pmatrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & -1 \end{pmatrix}\end{split}\]
  • If \(k_{\alpha} \le \frac{\pi}{2}\) and \(k_{\beta} \ge \frac{\pi}{2}\) and \(k_{\gamma} \ge \frac{\pi}{2}\) or \(k_{\alpha} \ge \frac{\pi}{2}\) and \(k_{\beta} \le \frac{\pi}{2}\) and \(k_{\gamma} \le \frac{\pi}{2}\) then

    \[(\boldsymbol{b}_1^{(1)}, \boldsymbol{b}_2^{(1)}, \boldsymbol{b}_3^{(1)}) = (\boldsymbol{b}_1, -\boldsymbol{b}_2, -\boldsymbol{b}_3)\]

    and

    \[\begin{split}\boldsymbol{S}_1 = \begin{pmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & -1 \end{pmatrix}\end{split}\]

Step 2#

At this step we ensure that \(k_{\gamma}\) is an appropriate extremum.

  • If \(k_{\gamma} = min(k_{\alpha}, k_{\beta}, k_{\gamma})\) and \(k_{\gamma} \ge \frac{\pi}{2}\) or \(k_{\gamma} = max(k_{\alpha}, k_{\beta}, k_{\gamma})\) and \(k_{\gamma} \le \frac{\pi}{2}\) then

    \[(\boldsymbol{b}_1^s, \boldsymbol{b}_2^s, \boldsymbol{b}_3^s) = (\boldsymbol{b}_1^{(1)}, \boldsymbol{b}_2^{(1)}, \boldsymbol{b}_3^{(1)})\]

    and

    \[\begin{split}\boldsymbol{S}_2 = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}\end{split}\]
  • If \(k_{\beta} = min(k_{\alpha}, k_{\beta}, k_{\gamma})\) and \(k_{\beta} \ge \frac{\pi}{2}\) or \(k_{\beta} = max(k_{\alpha}, k_{\beta}, k_{\gamma})\) and \(k_{\beta} \le \frac{\pi}{2}\) then

    \[(\boldsymbol{b}_1^s, \boldsymbol{b}_2^s, \boldsymbol{b}_3^s) = (\boldsymbol{b}_3^{(1)}, \boldsymbol{b}_1^{(1)}, \boldsymbol{b}_2^{(1)})\]

    and

    \[\begin{split}\boldsymbol{S}_2 = \begin{pmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 0 \end{pmatrix}\end{split}\]
  • If \(k_{\alpha} = min(k_{\alpha}, k_{\beta}, k_{\gamma})\) and \(k_{\alpha} \ge \frac{\pi}{2}\) or \(k_{\alpha} = max(k_{\alpha}, k_{\beta}, k_{\gamma})\) and \(k_{\alpha} \le \frac{\pi}{2}\) then

    \[(\boldsymbol{b}_1^s, \boldsymbol{b}_2^s, \boldsymbol{b}_3^s) = (\boldsymbol{b}_2^{(1)}, \boldsymbol{b}_3^{(1)}, \boldsymbol{b}_1^{(1)})\]

    and

    \[\begin{split}\boldsymbol{S}_2 = \begin{pmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{pmatrix}\end{split}\]

Finally#

\[\boldsymbol{S} = ((\boldsymbol{S}_1\boldsymbol{S}_2)^T)^{-1} \qquad \boldsymbol{S}^{-1} = (\boldsymbol{S}_1\boldsymbol{S}_2)^T\]