wulfric.cell.get_niggli#
- wulfric.cell.get_niggli(cell, eps_relative=1e-05, implementation='spglib', max_iterations=100000)[source]#
Computes Niggli-reduced cell.
- Parameters:
- cell(3, 3) array-like
Matrix of a cell, rows are interpreted as vectors.
- eps_relativefloat, default \(10^{-5}\)
Relative epsilon as defined in [2].
- implementationstr, default "spglib"
Which implementation of the Niggli reduction to use. Supported values are
"spglib" (default)
Implementation of spglib.
"wulfric"
Wulfric's implementation of the algorithm from [2]. Details of the implementation are written in Niggli reduction.
Ideally, both implementations should give the same result. If you find any differences, please consider contacting the developers with your example (support).
- max_iterationsint, default 100000
Maximum number of iterations. Ignored if
implementation="spglib".
- Returns:
- niggli_cell(3, 3) numpy.ndarray
Matrix of a Niggli reduced cell, rows are interpreted as vectors.
niggli_cell = [[a1_x, a1_y, a1_z], [a2_x, a2_y, a2_z], [a3_x, a3_y, a3_z]]
- Raises:
- wulfric.exceptions.NiggliReductionFailed
If the Niggli cell is not found in
max_iterationsiterations.- ValueError
If the volume of
cellis zero.
References
[1]Křivý, I. and Gruber, B., 1976. A unified algorithm for determining the reduced (Niggli) cell. Acta Crystallographica Section A: Crystal Physics, Diffraction, Theoretical and General Crystallography, 32(2), pp.297-298.
Examples
>>> import wulfric >>> wulfric.cell.get_niggli([[1, -0.5, 0], [-0.5, 1, 0], [0, 0, 1]]) array([[ 0.5, 0.5, 0. ], [ 0. , 0. , -1. ], [-1. , 0.5, 0. ]])
Example from [1] (parameters are reproducing \(A=9\), \(B=27\), \(C=4\), \(\xi\) = -5, \(\eta\) = -4, \(\zeta = -22\)):
>>> import wulfric >>> from wulfric.constants import TODEGREES >>> from math import sqrt, acos >>> a = 3 >>> b = sqrt(27) >>> c = 2 >>> alpha = acos(-5 / 2 / b / c) * TODEGREES >>> beta = acos(-4 / 2 / a / c) * TODEGREES >>> gamma = acos(-22 / 2 / a / b) * TODEGREES >>> cell = wulfric.cell.from_params(a, b, c, alpha, beta, gamma) >>> niggli_cell = wulfric.cell.get_niggli(cell) >>> niggli_cell @ niggli_cell.T array([[4. , 2. , 1.5], [2. , 9. , 4.5], [1.5, 4.5, 9. ]])