Base-centred monoclinic (MCLC)#
Pearson symbol: mS
Constructor: MCLC()
It is defined by four parameter: \(a\), \(b\), \(c\) and \(\alpha\) with conventional cell:
And primitive cell:
with
Order of parameters: \(b \le c\), \(\alpha < 90^{\circ}\).
K-path#
MCLC1#
\(\mathrm{\Gamma-Y-F-L-I\vert I_1-Z-F_1\vert Y-X_1\vert X-\Gamma-N\vert M-\Gamma}\)
Point |
\(\times\boldsymbol{b}_1\) |
\(\times\boldsymbol{b}_2\) |
\(\times\boldsymbol{b}_3\) |
|---|---|---|---|
\(\mathrm{\Gamma}\) |
\(0\) |
\(0\) |
\(0\) |
\(\mathrm{N}\) |
\(1/2\) |
\(0\) |
\(0\) |
\(\mathrm{N_1}\) |
\(0\) |
\(-1/2\) |
\(0\) |
\(\mathrm{F}\) |
\(1-\zeta\) |
\(1-\zeta\) |
\(1-\eta\) |
\(\mathrm{F_1}\) |
\(\zeta\) |
\(\zeta\) |
\(\eta\) |
\(\mathrm{F_2}\) |
\(-\zeta\) |
\(-\zeta\) |
\(1-\eta\) |
\(\mathrm{F_3}\) |
\(1-\zeta\) |
\(-\zeta\) |
\(1-\eta\) |
\(\mathrm{I}\) |
\(\phi\) |
\(1-\phi\) |
\(1/2\) |
\(\mathrm{I_1}\) |
\(1-\phi\) |
\(\phi-1\) |
\(1/2\) |
\(\mathrm{L}\) |
\(1/2\) |
\(1/2\) |
\(1/2\) |
\(\mathrm{M}\) |
\(1/2\) |
\(0\) |
\(1/2\) |
\(\mathrm{X}\) |
\(1-\psi\) |
\(\psi-1\) |
\(0\) |
\(\mathrm{X_1}\) |
\(\psi\) |
\(1-\psi\) |
\(0\) |
\(\mathrm{X_2}\) |
\(\psi-1\) |
\(-\psi\) |
\(0\) |
\(\mathrm{Y}\) |
\(1/2\) |
\(1/2\) |
\(0\) |
\(\mathrm{Y_1}\) |
\(-1/2\) |
\(-1/2\) |
\(0\) |
\(\mathrm{Z}\) |
\(0\) |
\(0\) |
\(1/2\) |
MCLC2#
\(\mathrm{\Gamma-Y-F-L-I\vert I_1-Z-F_1\vert N-\Gamma-M}\)
Point |
\(\times\boldsymbol{b}_1\) |
\(\times\boldsymbol{b}_2\) |
\(\times\boldsymbol{b}_3\) |
|---|---|---|---|
\(\mathrm{\Gamma}\) |
\(0\) |
\(0\) |
\(0\) |
\(\mathrm{N}\) |
\(1/2\) |
\(0\) |
\(0\) |
\(\mathrm{N_1}\) |
\(0\) |
\(-1/2\) |
\(0\) |
\(\mathrm{F}\) |
\(1-\zeta\) |
\(1-\zeta\) |
\(1-\eta\) |
\(\mathrm{F_1}\) |
\(\zeta\) |
\(\zeta\) |
\(\eta\) |
\(\mathrm{F_2}\) |
\(-\zeta\) |
\(-\zeta\) |
\(1-\eta\) |
\(\mathrm{F_3}\) |
\(1-\zeta\) |
\(-\zeta\) |
\(1-\eta\) |
\(\mathrm{I}\) |
\(\phi\) |
\(1-\phi\) |
\(1/2\) |
\(\mathrm{I_1}\) |
\(1-\phi\) |
\(\phi-1\) |
\(1/2\) |
\(\mathrm{L}\) |
\(1/2\) |
\(1/2\) |
\(1/2\) |
\(\mathrm{M}\) |
\(1/2\) |
\(0\) |
\(1/2\) |
\(\mathrm{X}\) |
\(1-\psi\) |
\(\psi-1\) |
\(0\) |
\(\mathrm{X_1}\) |
\(\psi\) |
\(1-\psi\) |
\(0\) |
\(\mathrm{X_2}\) |
\(\psi-1\) |
\(-\psi\) |
\(0\) |
\(\mathrm{Y}\) |
\(1/2\) |
\(1/2\) |
\(0\) |
\(\mathrm{Y_1}\) |
\(-1/2\) |
\(-1/2\) |
\(0\) |
\(\mathrm{Z}\) |
\(0\) |
\(0\) |
\(1/2\) |
MCLC3#
\(\mathrm{\Gamma-Y-F-H-Z-I-F_1\vert H_1-Y_1-X-\Gamma-N\vert M-\Gamma}\)
Point |
\(\times\boldsymbol{b}_1\) |
\(\times\boldsymbol{b}_2\) |
\(\times\boldsymbol{b}_3\) |
|---|---|---|---|
\(\mathrm{\Gamma}\) |
\(0\) |
\(0\) |
\(0\) |
\(\mathrm{F}\) |
\(1-\phi\) |
\(1-\phi\) |
\(1-\psi\) |
\(\mathrm{F_1}\) |
\(\phi\) |
\(\phi-1\) |
\(\psi\) |
\(\mathrm{F_2}\) |
\(1-\phi\) |
\(-\phi\) |
\(1-\psi\) |
\(\mathrm{H}\) |
\(\zeta\) |
\(\zeta\) |
\(\eta\) |
\(\mathrm{H_1}\) |
\(1-\zeta\) |
\(-\zeta\) |
\(1-\eta\) |
\(\mathrm{H_2}\) |
\(-\zeta\) |
\(-\zeta\) |
\(1-\eta\) |
\(\mathrm{I}\) |
\(1/2\) |
\(-1/2\) |
\(1/2\) |
\(\mathrm{M}\) |
\(1/2\) |
\(0\) |
\(1/2\) |
\(\mathrm{N}\) |
\(1/2\) |
\(0\) |
\(0\) |
\(\mathrm{N_1}\) |
\(0\) |
\(-1/2\) |
\(0\) |
\(\mathrm{X}\) |
\(1/2\) |
\(-1/2\) |
\(0\) |
\(\mathrm{Y}\) |
\(\mu\) |
\(\mu\) |
\(\delta\) |
\(\mathrm{Y_1}\) |
\(1-\mu\) |
\(-\mu\) |
\(-\delta\) |
\(\mathrm{Y_2}\) |
\(-\mu\) |
\(-\mu\) |
\(-\delta\) |
\(\mathrm{Y_3}\) |
\(\mu\) |
\(\mu-1\) |
\(\delta\) |
\(\mathrm{Z}\) |
\(0\) |
\(0\) |
\(1/2\) |
MCLC4#
\(\mathrm{\Gamma-Y-F-H-Z-I\vert H_1-Y_1-X-\Gamma-N\vert M-\Gamma}\)
Point |
\(\times\boldsymbol{b}_1\) |
\(\times\boldsymbol{b}_2\) |
\(\times\boldsymbol{b}_3\) |
|---|---|---|---|
\(\mathrm{\Gamma}\) |
\(0\) |
\(0\) |
\(0\) |
\(\mathrm{F}\) |
\(1-\phi\) |
\(1-\phi\) |
\(1-\psi\) |
\(\mathrm{F_1}\) |
\(\phi\) |
\(\phi-1\) |
\(\psi\) |
\(\mathrm{F_2}\) |
\(1-\phi\) |
\(-\phi\) |
\(1-\psi\) |
\(\mathrm{H}\) |
\(\zeta\) |
\(\zeta\) |
\(\eta\) |
\(\mathrm{H_1}\) |
\(1-\zeta\) |
\(-\zeta\) |
\(1-\eta\) |
\(\mathrm{H_2}\) |
\(-\zeta\) |
\(-\zeta\) |
\(1-\eta\) |
\(\mathrm{I}\) |
\(1/2\) |
\(-1/2\) |
\(1/2\) |
\(\mathrm{M}\) |
\(1/2\) |
\(0\) |
\(1/2\) |
\(\mathrm{N}\) |
\(1/2\) |
\(0\) |
\(0\) |
\(\mathrm{N_1}\) |
\(0\) |
\(-1/2\) |
\(0\) |
\(\mathrm{X}\) |
\(1/2\) |
\(-1/2\) |
\(0\) |
\(\mathrm{Y}\) |
\(\mu\) |
\(\mu\) |
\(\delta\) |
\(\mathrm{Y_1}\) |
\(1-\mu\) |
\(-\mu\) |
\(-\delta\) |
\(\mathrm{Y_2}\) |
\(-\mu\) |
\(-\mu\) |
\(-\delta\) |
\(\mathrm{Y_3}\) |
\(\mu\) |
\(\mu-1\) |
\(\delta\) |
\(\mathrm{Z}\) |
\(0\) |
\(0\) |
\(1/2\) |
MCLC5#
\(\mathrm{\Gamma-Y-F-L-I\vert I_1-Z-H-F_1\vert H_1-Y_1-X-\Gamma-N\vert M-\Gamma}\)
Point |
\(\times\boldsymbol{b}_1\) |
\(\times\boldsymbol{b}_2\) |
\(\times\boldsymbol{b}_3\) |
|---|---|---|---|
\(\mathrm{\Gamma}\) |
\(0\) |
\(0\) |
\(0\) |
\(\mathrm{F}\) |
\(\nu\) |
\(\nu\) |
\(\omega\) |
\(\mathrm{F_1}\) |
\(1-\nu\) |
\(-\nu\) |
\(1-\omega\) |
\(\mathrm{F_2}\) |
\(\nu\) |
\(\nu-1\) |
\(\omega\) |
\(\mathrm{H}\) |
\(\zeta\) |
\(\zeta\) |
\(\eta\) |
\(\mathrm{H_1}\) |
\(1-\zeta\) |
\(-\zeta\) |
\(1-\eta\) |
\(\mathrm{H_2}\) |
\(-\zeta\) |
\(-\zeta\) |
\(1-\eta\) |
\(\mathrm{I}\) |
\(\rho\) |
\(1-\rho\) |
\(1/2\) |
\(\mathrm{I_1}\) |
\(1-\rho\) |
\(\rho-1\) |
\(1/2\) |
\(\mathrm{L}\) |
\(1/2\) |
\(1/2\) |
\(1/2\) |
\(\mathrm{M}\) |
\(1/2\) |
\(0\) |
\(1/2\) |
\(\mathrm{N}\) |
\(1/2\) |
\(0\) |
\(0\) |
\(\mathrm{N_1}\) |
\(0\) |
\(-1/2\) |
\(0\) |
\(\mathrm{X}\) |
\(1/2\) |
\(-1/2\) |
\(0\) |
\(\mathrm{Y}\) |
\(\mu\) |
\(\mu\) |
\(\delta\) |
\(\mathrm{Y_1}\) |
\(1-\mu\) |
\(-\mu\) |
\(-\delta\) |
\(\mathrm{Y_2}\) |
\(-\mu\) |
\(-\mu\) |
\(-\delta\) |
\(\mathrm{Y_3}\) |
\(\mu\) |
\(\mu-1\) |
\(\delta\) |
\(\mathrm{Z}\) |
\(0\) |
\(0\) |
\(1/2\) |
Variations#
There are five variations for base-centered monoclinic lattice.
Reciprocal \(\gamma\) (\(k_{\gamma}\)) is defined by the equation (for primitive lattice):
For MCLC2 \(k_{\gamma} = 90\), therefore \(a = b \sin(\alpha)\). For MCLC1 we choose \(a < b \sin(\alpha)\) and for MCLC3, MCLC4 and MCLC5 we choose \(a > b \sin(\alpha)\).
For the variations 3-5 we define \(a = xb\sin(\alpha)\), where \(x > 1\).
Then the condition for MCLC4 gives:
Where \(\cos(\alpha) > 0\) (\(\alpha < 90^{\circ}\)), since \(x > 1\).
And the ordering condition \(b \le c\) gives:
For MCLC3 (MCLC5) we choose parameters in a same way as for MCLC4, but with \(c > \frac{x^2}{x^2 - 1}b\cos(\alpha)\) (\(c < \frac{x^2}{x^2 - 1}b\cos(\alpha)\))
MCLC1#
\(k_{\gamma} > 90^{\circ}\),
Predefined example: mclc1 with \(a = \pi\), \(b = 1.4\cdot\pi\), \(c = 1.7\cdot\pi\) and \(\alpha = 80^{\circ}\)
MCLC2#
\(k_{\gamma} = 90^{\circ}\),
Predefined example: mclc2 with \(a = 1.4\cdot\pi\cdot\sin(75^{\circ})\), \(b = 1.4\cdot\pi\), \(c = 1.7\cdot\pi\) and \(\alpha=75^{\circ}\)
MCLC3#
\(k_{\gamma} < 90^{\circ}, \dfrac{b\cos(\alpha)}{c} + \dfrac{b^2\sin(\alpha)^2}{a^2} < 1\)
Predefined example with \(b = \pi\), \(x = 1.1\), \(\alpha = 78^{\circ}\), which produce:
mclc4 with \(a = 1.1\cdot\sin(78)\cdot\pi\), \(b = \pi\),
\(c = 1.8\cdot 121\cdot\cos(65)\cdot\pi/21\) and \(\alpha = 78^{\circ}\)
MCLC4#
\(k_{\gamma} < 90^{\circ}, \dfrac{b\cos(\alpha)}{c} + \dfrac{b^2\sin(\alpha)^2}{a^2} = 1\)
Predefined example with \(b = \pi\), \(x = 1.2\), \(\alpha = 65^{\circ}\), which produce:
mclc4 with \(a = 1.2\sin(65)\pi\), \(b = \pi\),
\(c = 36\cos(65)\pi/11\) and \(\alpha = 65^{\circ}\)
MCLC5#
\(k_{\gamma} < 90^{\circ}, \dfrac{b\cos(\alpha)}{c} + \dfrac{b^2\sin(\alpha)^2}{a^2} > 1\)
Predefined example with \(b = \pi\), \(x = 1.4\), \(\alpha = 53^{\circ}\), which produce:
mclc5 with \(a = 1.4\cdot\sin(53)\cdot\pi\), \(b = \pi\),
\(c = 0.9\cdot 11\cdot\cos(53)\cdot\pi/6\) and \(\alpha = 53^{\circ}\)
Examples#
MCLC1#
Brillouin zone and default kpath#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="brillouin-kpath")
# Save an image:
backend.save("mclc1_brillouin.png")
# Interactive plot:
backend.show()
Primitive and conventional cell#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="primitive", label="primitive")
backend.plot(l, kind="conventional", label="conventional", color="black")
# Save an image:
backend.save("mclc1_real.png")
# Interactive plot:
backend.show()
Wigner-Seitz cell#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="wigner-seitz")
# Save an image:
backend.save("mclc1_wigner-seitz.png")
# Interactive plot:
backend.show()
MCLC2#
Brillouin zone and default kpath#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="brillouin-kpath")
# Save an image:
backend.save("mclc2_brillouin.png")
# Interactive plot:
backend.show()
Primitive and conventional cell#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="primitive", label="primitive")
backend.plot(l, kind="conventional", label="conventional", color="black")
# Save an image:
backend.save("mclc2_real.png")
# Interactive plot:
backend.show()
Wigner-Seitz cell#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="wigner-seitz")
# Save an image:
backend.save("mclc2_wigner-seitz.png")
# Interactive plot:
backend.show()
MCLC3#
Brillouin zone and default kpath#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="brillouin-kpath")
# Save an image:
backend.save("mclc3_brillouin.png")
# Interactive plot:
backend.show()
Primitive and conventional cell#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="primitive", label="primitive")
backend.plot(l, kind="conventional", label="conventional", color="black")
# Save an image:
backend.save("mclc3_real.png")
# Interactive plot:
backend.show()
Wigner-Seitz cell#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="wigner-seitz")
# Save an image:
backend.save("mclc3_wigner-seitz.png")
# Interactive plot:
backend.show()
MCLC4#
Brillouin zone and default kpath#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="brillouin-kpath")
# Save an image:
backend.save("mclc4_brillouin.png")
# Interactive plot:
backend.show()
Primitive and conventional cell#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="primitive", label="primitive")
backend.plot(l, kind="conventional", label="conventional", color="black")
# Save an image:
backend.save("mclc4_real.png")
# Interactive plot:
backend.show()
Wigner-Seitz cell#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="wigner-seitz")
# Save an image:
backend.save("mclc4_wigner-seitz.png")
# Interactive plot:
backend.show()
MCLC5#
Brillouin zone and default kpath#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="brillouin-kpath")
# Save an image:
backend.save("mclc5_brillouin.png")
# Interactive plot:
backend.show()
Primitive and conventional cell#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="primitive", label="primitive")
backend.plot(l, kind="conventional", label="conventional", color="black")
# Save an image:
backend.save("mclc5_real.png")
# Interactive plot:
backend.show()
Wigner-Seitz cell#
# Wulfric - Crystal, Lattice, Atoms, K-path.
# Copyright (C) 2023-2024 Andrey Rybakov
#
# e-mail: anry@uv.es, web: adrybakov.com
#
# 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 wulfric as wulf
l = wulf.lattice_example("{name}")
# Standardization is explicit since 0.3
l.standardize()
backend = wulf.PlotlyBackend()
backend.plot(l, kind="wigner-seitz")
# Save an image:
backend.save("mclc5_wigner-seitz.png")
# Interactive plot:
backend.show()
Cell standardization#
Standardization of the MCLC cell involves three steps and the second step had to be based on the conventional and not primitive cell. As a result the matrix \(\boldsymbol{S}\) is not orthonormal in a general case (direct consequence of the non-orthogonality of the matrix \(\boldsymbol{C}\)).
Step 1#
First step ensures that the first two lattice vectors of the primitive cell are orthogonal to each other. We use lattice vectors of the primitive cell.
If \(\vert \boldsymbol{a}_1\vert = \vert \boldsymbol{a}_2\vert \ne \vert \boldsymbol{a}_3\vert\), then
\[(\boldsymbol{a}_1^1, \boldsymbol{a}_2^1, \boldsymbol{a}_3^1) = (\boldsymbol{a}_1, \boldsymbol{a}_2, \boldsymbol{a}_3)\]and
\[\begin{split}\boldsymbol{S}_1 = \boldsymbol{S}_1^{-1} = \boldsymbol{S}_1^T = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}\end{split}\]If \(\vert \boldsymbol{a}_2 \vert = \vert \boldsymbol{a}_3 \vert \ne \vert \boldsymbol{a}_1 \vert\), then
\[(\boldsymbol{a}_1^1, \boldsymbol{a}_2^1, \boldsymbol{a}_3^1) = (\boldsymbol{a}_2, \boldsymbol{a}_3, \boldsymbol{a}_1)\]and
\[\begin{split}\boldsymbol{S}_1 = \begin{pmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 0 \end{pmatrix} \qquad \boldsymbol{S}_1^{-1} = \boldsymbol{S}_1^T = \begin{pmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{pmatrix}\end{split}\]If \(\vert \boldsymbol{a}_3 \vert = \vert \boldsymbol{a}_1 \vert \ne \vert \boldsymbol{a}_2 \vert\), then
\[(\boldsymbol{a}_1^1, \boldsymbol{a}_2^1, \boldsymbol{a}_3^1) = (\boldsymbol{a}_3, \boldsymbol{a}_1, \boldsymbol{a}_2)\]and
\[\begin{split}\boldsymbol{S}_1 = \begin{pmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{pmatrix} \qquad \boldsymbol{S}_1^{-1} = \boldsymbol{S}_1^T = \begin{pmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 0 & 0 \end{pmatrix}\end{split}\]
Step 2#
Second step ensures the condition \(b \le c\). We use lattice vectors of the primitive cell.
Details
Length of the lattice vectors for the primitive cell are:
angles between the lattice vectors for the primitive cell are:
Therefore, no simple condition can be formulated for the primitive cell, that will be equivalent to the condition \(b \le c\) for the conventional cell. The actual condition is \(2\vert \boldsymbol{a}_1 \vert^2 (1 + \cos(\boldsymbol{a}_1\boldsymbol{a}_2)) \le \vert \boldsymbol{a}_3 \vert^2\). As a result, when this condition is not satisfied, simple reordering of vectors of the primitive cell will not be enough. The recipe, that we follow instead is to
Calculate conventional cell as
\[(\boldsymbol{a}_1, \boldsymbol{a}_2, \boldsymbol{a}_3) = (\boldsymbol{a}_1^c, \boldsymbol{a}_2^c, \boldsymbol{a}_3^c) \boldsymbol{C}\]Find a standardization matrix for the conventional cell
\[(\boldsymbol{a}_1^c, \boldsymbol{a}_2^c, \boldsymbol{a}_3^c) = (\boldsymbol{a}_1^{cs}, \boldsymbol{a}_2^{cs}, \boldsymbol{a}_3^{cs}) \boldsymbol{S^c}\]Calculate standardized primitive cell as
\[(\boldsymbol{a}_1^s, \boldsymbol{a}_2^s, \boldsymbol{a}_3^s) = (\boldsymbol{a}_1^{cs}, \boldsymbol{a}_2^{cs}, \boldsymbol{a}_3^{cs}) \boldsymbol{C}\]
Then the standardization matrix for the primitive cell is
If \(2\vert \boldsymbol{a}_1 \vert^2 (1 + \cos(\boldsymbol{a}_1\boldsymbol{a}_2)) \le \vert \boldsymbol{a}_3 \vert^2\), then
\[(\boldsymbol{a}_1^2, \boldsymbol{a}_2^2, \boldsymbol{a}_3^2) = (\boldsymbol{a}_1^1, \boldsymbol{a}_2^1, \boldsymbol{a}_3^1)\]and
\[\begin{split}\boldsymbol{S}_2 = \boldsymbol{S}_2^{-1} = \boldsymbol{S}_2^T = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}\end{split}\]If \(2\vert \boldsymbol{a}_1 \vert^2 (1 + \cos(\boldsymbol{a}_1\boldsymbol{a}_2)) > \vert \boldsymbol{a}_3 \vert^2\), then
\[(\boldsymbol{a}_1^{c,2}, \boldsymbol{a}_2^{c,2}, \boldsymbol{a}_3^{c,2}) = (-\boldsymbol{a}_1^{c,1}, \boldsymbol{a}_3^{c,1}, \boldsymbol{a}_2^{c,1})\]\[\begin{split}\boldsymbol{S^s}_2 = (\boldsymbol{S^s}_2)^{-1} = \begin{pmatrix} -1 & 0 & 0 \\ 0 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix}\end{split}\]and
\[\begin{split}\boldsymbol{S}_2 = \boldsymbol{S}_2^{-1} = \boldsymbol{C}^{-1} \boldsymbol{S^s}_2 \boldsymbol{C} = \begin{pmatrix} -0.5 & 0.5 & 1 \\ 0.5 & -0.5 & 1 \\ 0.5 & 0.5 & 0 \end{pmatrix}\end{split}\]Note
\(\boldsymbol{S}_2^T \ne \boldsymbol{S}_2^{-1}\)
Step 3#
Last step ensures that \(\alpha < \frac{\pi}{2}\). Translated to the primitive cell, this condition reads as \(\boldsymbol{a}_2\boldsymbol{a}_3 > 0\). We use lattice vectors of the primitive cell.
If \(\alpha < \frac{\pi}{2}\) (i.e. \(\boldsymbol{a}_2\cdot\boldsymbol{a}_3 > 0\)), then
\[(\boldsymbol{a}_1^s, \boldsymbol{a}_2^s, \boldsymbol{a}_3^s) = (\boldsymbol{a}_1^2, \boldsymbol{a}_2^2, \boldsymbol{a}_3^2)\]and
\[\begin{split}\boldsymbol{S}_3 = \boldsymbol{S}_3^{-1} = \boldsymbol{S}_3^T = \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}\end{split}\]If \(\alpha > \frac{\pi}{2}\) (i.e. \(\boldsymbol{a}_2\cdot\boldsymbol{a}_3 < 0\)), then
\[(\boldsymbol{a}_1^s, \boldsymbol{a}_2^s, \boldsymbol{a}_3^s) = (-\boldsymbol{a}_1^2, -\boldsymbol{a}_2^2, \boldsymbol{a}_3^2)\]and
\[\begin{split}\boldsymbol{S}_3 = \boldsymbol{S}_3^{-1} = \boldsymbol{S}_3^T = \begin{pmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{pmatrix}\end{split}\]