Triclinic (TRI)#
Pearson symbol: aP
Constructor: TRI()
It is defined by six parameters: \(a\), \(b\), \(c\) and \(\alpha\), \(\beta\), \(\gamma\). with primitive and conventional lattice:
Cell standardization#
Standardization is performed based on the reciprocal cell.
One of the conditions have to be met:
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})\).
\(k_{\gamma} = 90^{\circ}\) and other two angles are \(> 90^{\circ}\).
\(k_{\gamma} = 90^{\circ}\) and other two angles are \(< 90^{\circ}\).
If these conditions are not satisfied, then the lattice is transformed to the standard form:
Last two cases#
First we check for the last two cases:
- If \(k_{\alpha} = 90^{\circ}\)
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (\boldsymbol{b}_2, \boldsymbol{b}_3, \boldsymbol{b}_1)\]
- If \(k_{\beta} = 90^{\circ}\)
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (\boldsymbol{b}_3, \boldsymbol{b}_1, \boldsymbol{b}_2)\]
If one of the last two conditions were met, then now we have \(k_{\gamma} = 90^{\circ}\). We need to choose appropriate values for the remaining two angles:
- If \(k_{\alpha} > 90^{\circ}\) and \(k_{\beta} < 90^{\circ}\) or \(k_{\alpha} < 90^{\circ}\) and \(k_{\beta} > 90^{\circ}\):
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (\boldsymbol{b}_2, -\boldsymbol{b}_1, \boldsymbol{b}_3)\]
First two cases#
If none of the last two conditions were met, then we check for the first two. First we ensure that all angles are \(> 90^{\circ}\) or \(< 90^{\circ}\):
- If \(k_{\alpha} > 90^{\circ}\) and \(k_{\beta} > 90^{\circ}\) and \(k_{\gamma} < 90^{\circ}\):
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (-\boldsymbol{b}_1, -\boldsymbol{b}_2, \boldsymbol{b}_3)\]
- If \(k_{\alpha} > 90^{\circ}\) and \(k_{\beta} < 90^{\circ}\) and \(k_{\gamma} > 90^{\circ}\):
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (-\boldsymbol{b}_1, \boldsymbol{b}_2, -\boldsymbol{b}_3)\]
- If \(k_{\alpha} > 90^{\circ}\) and \(k_{\beta} < 90^{\circ}\) and \(k_{\gamma} < 90^{\circ}\):
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (\boldsymbol{b}_1, -\boldsymbol{b}_2, -\boldsymbol{b}_3)\]
- If \(k_{\alpha} < 90^{\circ}\) and \(k_{\beta} > 90^{\circ}\) and \(k_{\gamma} > 90^{\circ}\):
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (\boldsymbol{b}_1, -\boldsymbol{b}_2, -\boldsymbol{b}_3)\]
- If \(k_{\alpha} < 90^{\circ}\) and \(k_{\beta} > 90^{\circ}\) and \(k_{\gamma} < 90^{\circ}\):
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (-\boldsymbol{b}_1, \boldsymbol{b}_2, -\boldsymbol{b}_3)\]
- If \(k_{\alpha} < 90^{\circ}\) and \(k_{\beta} < 90^{\circ}\) and \(k_{\gamma} > 90^{\circ}\):
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (-\boldsymbol{b}_1, -\boldsymbol{b}_2, \boldsymbol{b}_3)\]
As the last step we reorder the reciprocal vectors:
Reordering if all angles are \(> 90^{\circ}\):
- If \(k_{\alpha} = min(k_{\alpha}, k_{\beta}, k_{\gamma})\), then:
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (\boldsymbol{b}_2, \boldsymbol{b}_3, \boldsymbol{b}_1)\]
- If \(k_{\beta} = min(k_{\alpha}, k_{\beta}, k_{\gamma})\), then:
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (\boldsymbol{b}_3, \boldsymbol{b}_1, \boldsymbol{b}_2)\]
Reordering if all angles are \(< 90^{\circ}\):
- If \(k_{\alpha} = max(k_{\alpha}, k_{\beta}, k_{\gamma})\), then:
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (\boldsymbol{b}_2, \boldsymbol{b}_3, \boldsymbol{b}_1)\]
- If \(k_{\beta} = max(k_{\alpha}, k_{\beta}, k_{\gamma})\), then:
- \[(\boldsymbol{b}_1, \boldsymbol{b}_2, \boldsymbol{b}_3) \rightarrow (\boldsymbol{b}_3, \boldsymbol{b}_1, \boldsymbol{b}_2)\]
K-path#
TRI1a#
\(\mathrm{X-\Gamma-Y\vert L-\Gamma-Z\vert N-\Gamma-M\vert R-\Gamma}\)
Point |
\(\times\boldsymbol{b}_1\) |
\(\times\boldsymbol{b}_2\) |
\(\times\boldsymbol{b}_3\) |
---|---|---|---|
\(\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\) |
\(\times\boldsymbol{b}_2\) |
\(\times\boldsymbol{b}_3\) |
---|---|---|---|
\(\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\) |
\(\times\boldsymbol{b}_2\) |
\(\times\boldsymbol{b}_3\) |
---|---|---|---|
\(\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\) |
\(\times\boldsymbol{b}_2\) |
\(\times\boldsymbol{b}_3\) |
---|---|---|---|
\(\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#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI1a")
backend = rad.PlotlyBackend()
backend.plot(l, kind="brillouin-kpath")
# Save an image:
backend.save("tri1a_brillouin.png")
# Interactive plot:
backend.show()
Primitive and conventional cell#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI1a")
backend = rad.PlotlyBackend()
backend.plot(l, kind="primitive")
# Save an image:
backend.save("tri1a_real.png")
# Interactive plot:
backend.show()
Wigner-Seitz cell#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI1a")
backend = rad.PlotlyBackend()
backend.plot(l, kind="wigner-seitz")
# Save an image:
backend.save("tri1a_wigner-seitz.png")
# Interactive plot:
backend.show()
TRI2a#
Brillouin zone and default kpath#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI2a")
backend = rad.PlotlyBackend()
backend.plot(l, kind="brillouin-kpath")
# Save an image:
backend.save("tri2a_brillouin.png")
# Interactive plot:
backend.show()
Primitive and conventional cell#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI2a")
backend = rad.PlotlyBackend()
backend.plot(l, kind="primitive")
# Save an image:
backend.save("tri2a_real.png")
# Interactive plot:
backend.show()
Wigner-Seitz cell#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI2a")
backend = rad.PlotlyBackend()
backend.plot(l, kind="wigner-seitz")
# Save an image:
backend.save("tri2a_wigner-seitz.png")
# Interactive plot:
backend.show()
TRI1b#
Brillouin zone and default kpath#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI1b")
backend = rad.PlotlyBackend()
backend.plot(l, kind="brillouin-kpath")
# Save an image:
backend.save("tri1b_brillouin.png")
# Interactive plot:
backend.show()
Primitive and conventional cell#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI1b")
backend = rad.PlotlyBackend()
backend.plot(l, kind="primitive")
# Save an image:
backend.save("tri1b_real.png")
# Interactive plot:
backend.show()
Wigner-Seitz cell#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI1b")
backend = rad.PlotlyBackend()
backend.plot(l, kind="wigner-seitz")
# Save an image:
backend.save("tri1b_wigner-seitz.png")
# Interactive plot:
backend.show()
TRI2b#
Brillouin zone and default kpath#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI2b")
backend = rad.PlotlyBackend()
backend.plot(l, kind="brillouin-kpath")
# Save an image:
backend.save("tri2b_brillouin.png")
# Interactive plot:
backend.show()
Primitive and conventional cell#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI2b")
backend = rad.PlotlyBackend()
backend.plot(l, kind="primitive")
# Save an image:
backend.save("tri2b_real.png")
# Interactive plot:
backend.show()
Wigner-Seitz cell#
# RAD-tools - Sandbox (mainly condense matter plotting).
# Copyright (C) 2022-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: rad-tools.org
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import radtools as rad
l = rad.lattice_example("TRI2b")
backend = rad.PlotlyBackend()
backend.plot(l, kind="wigner-seitz")
# Save an image:
backend.save("tri2b_wigner-seitz.png")
# Interactive plot:
backend.show()