@mat3ra/made 2024.3.22-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/.babelrc +10 -0
  2. package/.eslintrc.json +11 -0
  3. package/.mocharc.json +5 -0
  4. package/.prettierignore +1 -0
  5. package/.prettierrc +6 -0
  6. package/LICENSE.md +15 -0
  7. package/README.md +167 -0
  8. package/dist/abstract/array_with_ids.d.ts +43 -0
  9. package/dist/abstract/array_with_ids.js +88 -0
  10. package/dist/abstract/scalar_with_id.d.ts +25 -0
  11. package/dist/abstract/scalar_with_id.js +44 -0
  12. package/dist/basis/basis.d.ts +269 -0
  13. package/dist/basis/basis.js +499 -0
  14. package/dist/basis/constrained_basis.d.ts +56 -0
  15. package/dist/basis/constrained_basis.js +90 -0
  16. package/dist/basis/types.d.ts +1 -0
  17. package/dist/basis/types.js +2 -0
  18. package/dist/cell/cell.d.ts +45 -0
  19. package/dist/cell/cell.js +88 -0
  20. package/dist/cell/conventional_cell.d.ts +22 -0
  21. package/dist/cell/conventional_cell.js +83 -0
  22. package/dist/cell/primitive_cell.d.ts +9 -0
  23. package/dist/cell/primitive_cell.js +166 -0
  24. package/dist/constants.d.ts +2 -0
  25. package/dist/constants.js +25 -0
  26. package/dist/constraints/constraints.d.ts +45 -0
  27. package/dist/constraints/constraints.js +49 -0
  28. package/dist/lattice/lattice.d.ts +104 -0
  29. package/dist/lattice/lattice.js +208 -0
  30. package/dist/lattice/lattice_bravais.d.ts +59 -0
  31. package/dist/lattice/lattice_bravais.js +120 -0
  32. package/dist/lattice/lattice_vectors.d.ts +46 -0
  33. package/dist/lattice/lattice_vectors.js +98 -0
  34. package/dist/lattice/reciprocal/lattice_reciprocal.d.ts +75 -0
  35. package/dist/lattice/reciprocal/lattice_reciprocal.js +148 -0
  36. package/dist/lattice/reciprocal/paths.d.ts +24 -0
  37. package/dist/lattice/reciprocal/paths.js +136 -0
  38. package/dist/lattice/reciprocal/symmetry_points.d.ts +8 -0
  39. package/dist/lattice/reciprocal/symmetry_points.js +866 -0
  40. package/dist/lattice/types.d.ts +49 -0
  41. package/dist/lattice/types.js +127 -0
  42. package/dist/lattice/unit_cell.d.ts +30 -0
  43. package/dist/lattice/unit_cell.js +31 -0
  44. package/dist/made.d.ts +40 -0
  45. package/dist/made.js +39 -0
  46. package/dist/material.d.ts +1562 -0
  47. package/dist/material.js +317 -0
  48. package/dist/math.d.ts +395 -0
  49. package/dist/math.js +7 -0
  50. package/dist/parsers/cif.d.ts +10 -0
  51. package/dist/parsers/cif.js +21 -0
  52. package/dist/parsers/errors.d.ts +5 -0
  53. package/dist/parsers/errors.js +11 -0
  54. package/dist/parsers/espresso.d.ts +10 -0
  55. package/dist/parsers/espresso.js +24 -0
  56. package/dist/parsers/native_format_parsers.d.ts +26 -0
  57. package/dist/parsers/native_format_parsers.js +52 -0
  58. package/dist/parsers/parsers.d.ts +13 -0
  59. package/dist/parsers/parsers.js +17 -0
  60. package/dist/parsers/poscar.d.ts +31 -0
  61. package/dist/parsers/poscar.js +180 -0
  62. package/dist/parsers/xyz.d.ts +62 -0
  63. package/dist/parsers/xyz.js +167 -0
  64. package/dist/parsers/xyz_combinatorial_basis.d.ts +64 -0
  65. package/dist/parsers/xyz_combinatorial_basis.js +241 -0
  66. package/dist/tools/basis.d.ts +22 -0
  67. package/dist/tools/basis.js +100 -0
  68. package/dist/tools/cell.d.ts +9 -0
  69. package/dist/tools/cell.js +39 -0
  70. package/dist/tools/index.d.ts +11 -0
  71. package/dist/tools/index.js +15 -0
  72. package/dist/tools/material.d.ts +25 -0
  73. package/dist/tools/material.js +54 -0
  74. package/dist/tools/supercell.d.ts +22 -0
  75. package/dist/tools/supercell.js +62 -0
  76. package/dist/tools/surface.d.ts +10 -0
  77. package/dist/tools/surface.js +147 -0
  78. package/dist/types.d.ts +3 -0
  79. package/dist/types.js +2 -0
  80. package/package.json +89 -0
  81. package/pyproject.toml +77 -0
  82. package/src/js/abstract/array_with_ids.ts +100 -0
  83. package/src/js/abstract/scalar_with_id.ts +53 -0
  84. package/src/js/basis/basis.ts +607 -0
  85. package/src/js/basis/constrained_basis.ts +107 -0
  86. package/src/js/basis/types.ts +1 -0
  87. package/src/js/cell/cell.ts +109 -0
  88. package/src/js/cell/conventional_cell.ts +89 -0
  89. package/src/js/cell/primitive_cell.ts +189 -0
  90. package/src/js/constants.js +4 -0
  91. package/src/js/constraints/constraints.ts +63 -0
  92. package/src/js/lattice/lattice.ts +229 -0
  93. package/src/js/lattice/lattice_bravais.ts +170 -0
  94. package/src/js/lattice/lattice_vectors.ts +126 -0
  95. package/src/js/lattice/reciprocal/lattice_reciprocal.js +155 -0
  96. package/src/js/lattice/reciprocal/paths.js +134 -0
  97. package/src/js/lattice/reciprocal/symmetry_points.ts +886 -0
  98. package/src/js/lattice/types.ts +142 -0
  99. package/src/js/lattice/unit_cell.ts +66 -0
  100. package/src/js/made.js +36 -0
  101. package/src/js/material.ts +398 -0
  102. package/src/js/math.js +6 -0
  103. package/src/js/parsers/cif.js +22 -0
  104. package/src/js/parsers/errors.js +7 -0
  105. package/src/js/parsers/espresso.ts +30 -0
  106. package/src/js/parsers/native_format_parsers.js +51 -0
  107. package/src/js/parsers/parsers.js +13 -0
  108. package/src/js/parsers/poscar.ts +201 -0
  109. package/src/js/parsers/xyz.ts +216 -0
  110. package/src/js/parsers/xyz_combinatorial_basis.js +243 -0
  111. package/src/js/tools/basis.js +116 -0
  112. package/src/js/tools/cell.js +36 -0
  113. package/src/js/tools/index.js +11 -0
  114. package/src/js/tools/material.js +60 -0
  115. package/src/js/tools/supercell.ts +80 -0
  116. package/src/js/tools/surface.js +176 -0
  117. package/src/js/types.ts +4 -0
  118. package/src/py/__init__.py +0 -0
  119. package/src/py/mat3ra/__init__.py +0 -0
  120. package/src/py/mat3ra/made/__init__.py +5 -0
  121. package/tests/.gitattributes +1 -0
  122. package/tests/fixtures/AsGe-basis.json +3 -0
  123. package/tests/fixtures/C2H4-translated.json +3 -0
  124. package/tests/fixtures/C2H4.json +3 -0
  125. package/tests/fixtures/FeLiSi-basis.json +3 -0
  126. package/tests/fixtures/FeO.json +3 -0
  127. package/tests/fixtures/Ge2-basis.json +3 -0
  128. package/tests/fixtures/Graphene.json +3 -0
  129. package/tests/fixtures/Graphene.poscar +3 -0
  130. package/tests/fixtures/H2+H-final.json +3 -0
  131. package/tests/fixtures/H2+H-image.json +3 -0
  132. package/tests/fixtures/H2+H-initial.json +3 -0
  133. package/tests/fixtures/H2O.poscar +3 -0
  134. package/tests/fixtures/LiFeSi-basis.json +3 -0
  135. package/tests/fixtures/Na.json +3 -0
  136. package/tests/fixtures/Na4Cl4-cartesian.json +3 -0
  137. package/tests/fixtures/Na4Cl4.json +3 -0
  138. package/tests/fixtures/Na4Cl4.poscar +3 -0
  139. package/tests/fixtures/Ni-hex.json +3 -0
  140. package/tests/fixtures/Ni-hex.poscar +3 -0
  141. package/tests/fixtures/OSi-basis.json +3 -0
  142. package/tests/fixtures/Si-hex.json +3 -0
  143. package/tests/fixtures/Si-hex.poscar +3 -0
  144. package/tests/fixtures/Si-pwscf.in +3 -0
  145. package/tests/fixtures/Si-slab.json +3 -0
  146. package/tests/fixtures/Si-supercell.json +3 -0
  147. package/tests/fixtures/Si.json +3 -0
  148. package/tests/fixtures/Si2-basis-repeated.json +3 -0
  149. package/tests/fixtures/Si2-basis.json +3 -0
  150. package/tests/fixtures/Zr1H23Zr1H1.json +3 -0
  151. package/tests/fixtures/Zr1H23Zr1H1.poscar +3 -0
  152. package/tests/fixtures/atomic-constraints.json +3 -0
  153. package/tests/js/basis/basis.js +221 -0
  154. package/tests/js/cell/cell.js +21 -0
  155. package/tests/js/cell/primitive_cell.js +17 -0
  156. package/tests/js/constraints/constraints.js +27 -0
  157. package/tests/js/enums.js +40 -0
  158. package/tests/js/lattice/lattice.js +31 -0
  159. package/tests/js/lattice/lattice_bravais.js +17 -0
  160. package/tests/js/lattice/lattice_reciprocal.js +99 -0
  161. package/tests/js/lattice/lattice_vectors.js +10 -0
  162. package/tests/js/material.test.js +11 -0
  163. package/tests/js/parsers/espresso.js +12 -0
  164. package/tests/js/parsers/native_formats.js +30 -0
  165. package/tests/js/parsers/poscar.js +21 -0
  166. package/tests/js/parsers/xyz.js +25 -0
  167. package/tests/js/parsers/xyz_combinatorial_basis.js +153 -0
  168. package/tests/js/setup.js +6 -0
  169. package/tests/js/tools/basis.js +18 -0
  170. package/tests/js/tools/supercell.js +23 -0
  171. package/tests/js/tools/surface.js +12 -0
  172. package/tests/js/utils.js +17 -0
  173. package/tests/py/__init__.py +0 -0
  174. package/tests/py/unit/__init__.py +0 -0
  175. package/tests/py/unit/test_sample.py +10 -0
  176. package/tsconfig.json +3 -0
@@ -0,0 +1,886 @@
1
+ /* eslint-disable no-mixed-operators */
2
+ /* eslint no-unused-vars: 0 */
3
+ /**
4
+ * This file contains information about the Brillouin zone symmetry points by lattice type.
5
+ * [AFLOW](https://arxiv.org/abs/1004.2974) methodology is used for implementation.
6
+ */
7
+ import { LatticeImplicitSchema } from "@mat3ra/esse/lib/js/types";
8
+
9
+ import { Lattice } from "../lattice";
10
+
11
+ const POINTS = {
12
+ CUB: () => {
13
+ return [
14
+ {
15
+ point: "R",
16
+ coordinates: [0.5, 0.5, 0.5],
17
+ },
18
+ {
19
+ point: "X",
20
+ coordinates: [0.0, 0.5, 0.0],
21
+ },
22
+ {
23
+ point: "M",
24
+ coordinates: [0.5, 0.5, 0.0],
25
+ },
26
+ ];
27
+ },
28
+
29
+ FCC: () => {
30
+ return [
31
+ {
32
+ point: "K",
33
+ coordinates: [3 / 8, 3 / 8, 3 / 4],
34
+ },
35
+ {
36
+ point: "L",
37
+ coordinates: [1 / 2, 1 / 2, 1 / 2],
38
+ },
39
+ {
40
+ point: "U",
41
+ coordinates: [5 / 8, 1 / 4, 5 / 8],
42
+ },
43
+ {
44
+ point: "W",
45
+ coordinates: [1 / 2, 1 / 4, 3 / 4],
46
+ },
47
+ {
48
+ point: "X",
49
+ coordinates: [1 / 2, 0.0, 1 / 2],
50
+ },
51
+ ];
52
+ },
53
+
54
+ BCC: () => {
55
+ return [
56
+ {
57
+ point: "H",
58
+ coordinates: [1 / 2, -1 / 2, 1 / 2],
59
+ },
60
+ {
61
+ point: "P",
62
+ coordinates: [1 / 4, 1 / 4, 1 / 4],
63
+ },
64
+ {
65
+ point: "N",
66
+ coordinates: [0.0, 0.0, 1 / 2],
67
+ },
68
+ ];
69
+ },
70
+
71
+ TET: () => {
72
+ return [
73
+ {
74
+ point: "A",
75
+ coordinates: [1 / 2, 1 / 2, 1 / 2],
76
+ },
77
+ {
78
+ point: "M",
79
+ coordinates: [1 / 2, 1 / 2, 0.0],
80
+ },
81
+ {
82
+ point: "R",
83
+ coordinates: [0.0, 1 / 2, 1 / 2],
84
+ },
85
+ {
86
+ point: "X",
87
+ coordinates: [0.0, 1 / 2, 0.0],
88
+ },
89
+ {
90
+ point: "Z",
91
+ coordinates: [0.0, 0.0, 1 / 2],
92
+ },
93
+ ];
94
+ },
95
+
96
+ BCT: ({ a, c }: LatticeImplicitSchema) => {
97
+ let n;
98
+ if (c < a) {
99
+ // BCT-1
100
+ n = (1 + (c * c) / (a * a)) / 4;
101
+ return [
102
+ {
103
+ point: "M",
104
+ coordinates: [-1 / 2, 1 / 2, 1 / 2],
105
+ },
106
+ {
107
+ point: "N",
108
+ coordinates: [0.0, 1 / 2, 0.0],
109
+ },
110
+ {
111
+ point: "P",
112
+ coordinates: [1 / 4, 1 / 4, 1 / 4],
113
+ },
114
+ {
115
+ point: "X",
116
+ coordinates: [0.0, 0.0, 1 / 2],
117
+ },
118
+ {
119
+ point: "Z",
120
+ coordinates: [n, n, -n],
121
+ },
122
+ {
123
+ point: "Z1",
124
+ coordinates: [-n, 1 - n, n],
125
+ },
126
+ ];
127
+ }
128
+ // BCT-2
129
+ n = (1 + (a * a) / (c * c)) / 4;
130
+ const e = (a * a) / (2 * c * c);
131
+ return [
132
+ {
133
+ point: "N",
134
+ coordinates: [0.0, 1 / 2, 0.0],
135
+ },
136
+ {
137
+ point: "P",
138
+ coordinates: [1 / 4, 1 / 4, 1 / 4],
139
+ },
140
+ {
141
+ point: "∑",
142
+ coordinates: [-n, n, n],
143
+ },
144
+ {
145
+ point: "∑1",
146
+ coordinates: [n, 1 - n, -n],
147
+ },
148
+ {
149
+ point: "X",
150
+ coordinates: [0, 0, 1 / 2],
151
+ },
152
+ {
153
+ point: "Y",
154
+ coordinates: [-e, e, 1 / 2],
155
+ },
156
+ {
157
+ point: "Y1",
158
+ coordinates: [1 / 2, 1 / 2, -e],
159
+ },
160
+ {
161
+ point: "Z",
162
+ coordinates: [1 / 2, 1 / 2, -1 / 2],
163
+ },
164
+ ];
165
+ },
166
+
167
+ ORC: () => {
168
+ return [
169
+ {
170
+ point: "R",
171
+ coordinates: [1 / 2, 1 / 2, 1 / 2],
172
+ },
173
+ {
174
+ point: "S",
175
+ coordinates: [1 / 2, 1 / 2, 0.0],
176
+ },
177
+ {
178
+ point: "T",
179
+ coordinates: [0.0, 1 / 2, 1 / 2],
180
+ },
181
+ {
182
+ point: "U",
183
+ coordinates: [1 / 2, 0.0, 1 / 2],
184
+ },
185
+ {
186
+ point: "X",
187
+ coordinates: [1 / 2, 0.0, 0.0],
188
+ },
189
+ {
190
+ point: "Y",
191
+ coordinates: [0.0, 1 / 2, 0.0],
192
+ },
193
+ {
194
+ point: "Z",
195
+ coordinates: [0.0, 0.0, 1 / 2],
196
+ },
197
+ ];
198
+ },
199
+
200
+ ORCF: ({ a, b, c }: LatticeImplicitSchema) => {
201
+ let n;
202
+ if (1 / (a * a) >= 1 / (b * b) + 1 / (c * c)) {
203
+ // ORCF-1,3
204
+ n = (1 + (a * a) / (b * b) + (a * a) / (c * c)) / 4;
205
+ const e = (1 + (a * a) / (b * b) - (a * a) / (c * c)) / 4;
206
+ return [
207
+ {
208
+ point: "A",
209
+ coordinates: [1 / 2, 1 / 2 + e, e],
210
+ },
211
+ {
212
+ point: "A1",
213
+ coordinates: [0.0, 1 / 2 - e, 1 - e],
214
+ },
215
+ {
216
+ point: "L",
217
+ coordinates: [1 / 2, 1 / 2, 1 / 2],
218
+ },
219
+ {
220
+ point: "T",
221
+ coordinates: [1.0, 1 / 2, 1 / 2],
222
+ },
223
+ {
224
+ point: "X",
225
+ coordinates: [0.0, n, n],
226
+ },
227
+ {
228
+ point: "X1",
229
+ coordinates: [1.0, 1 - n, 1 - n],
230
+ },
231
+ {
232
+ point: "Y",
233
+ coordinates: [1 / 2, 0.0, 1 / 2],
234
+ },
235
+ {
236
+ point: "Z",
237
+ coordinates: [1 / 2, 1 / 2, 0.0],
238
+ },
239
+ ];
240
+ }
241
+ // ORCF-2
242
+ n = (1 + (a * a) / (b * b) - (a * a) / (c * c)) / 4;
243
+ const f = (1 + (c * c) / (b * b) - (c * c) / (a * a)) / 4;
244
+ const d = (1 + (b * b) / (a * a) - (b * b) / (c * c)) / 4;
245
+ return [
246
+ {
247
+ point: "C",
248
+ coordinates: [1 / 2, 1 / 2 - n, 1 - n],
249
+ },
250
+ {
251
+ point: "C1",
252
+ coordinates: [0.0, 1 / 2 + n, n],
253
+ },
254
+ {
255
+ point: "D",
256
+ coordinates: [1 / 2 - d, 1 / 2, 1 - d],
257
+ },
258
+ {
259
+ point: "D1",
260
+ coordinates: [1 / 2 + d, 1 / 2, d],
261
+ },
262
+ {
263
+ point: "L",
264
+ coordinates: [1 / 2, 1 / 2, 1 / 2],
265
+ },
266
+ {
267
+ point: "H",
268
+ coordinates: [1 - f, 1 / 2 - f, 1 / 2],
269
+ },
270
+ {
271
+ point: "H1",
272
+ coordinates: [f, 1 / 2 + f, 1 / 2],
273
+ },
274
+ {
275
+ point: "X",
276
+ coordinates: [0.0, 1 / 2, 1 / 2],
277
+ },
278
+ {
279
+ point: "Y",
280
+ coordinates: [1 / 2, 0.0, 1 / 2],
281
+ },
282
+ {
283
+ point: "Z",
284
+ coordinates: [1 / 2, 1 / 2, 0.0],
285
+ },
286
+ ];
287
+ },
288
+
289
+ ORCI: ({ a, b, c }: LatticeImplicitSchema) => {
290
+ const n = (1 + (a * a) / (c * c)) / 4;
291
+ const e = (1 + (b * b) / (c * c)) / 4;
292
+ const d = (b * b - a * a) / (4 * c * c);
293
+ const m = (b * b + a * a) / (4 * c * c);
294
+ return [
295
+ {
296
+ point: "L",
297
+ coordinates: [-m, m, 1 / 2 - d],
298
+ },
299
+ {
300
+ point: "L1",
301
+ coordinates: [m, -m, 1 / 2 + d],
302
+ },
303
+ {
304
+ point: "L2",
305
+ coordinates: [1 / 2 - d, 1 / 2 + d, -m],
306
+ },
307
+ {
308
+ point: "R",
309
+ coordinates: [0.0, 1 / 2, 0.0],
310
+ },
311
+ {
312
+ point: "S",
313
+ coordinates: [1 / 2, 0.0, 0.0],
314
+ },
315
+ {
316
+ point: "T",
317
+ coordinates: [0.0, 0.0, 1 / 2],
318
+ },
319
+ {
320
+ point: "W",
321
+ coordinates: [1 / 4, 1 / 4, 1 / 4],
322
+ },
323
+ {
324
+ point: "X",
325
+ coordinates: [-e, e, e],
326
+ },
327
+ {
328
+ point: "X1",
329
+ coordinates: [e, 1 - e, -e],
330
+ },
331
+ {
332
+ point: "Y",
333
+ coordinates: [n, -n, n],
334
+ },
335
+ {
336
+ point: "Y1",
337
+ coordinates: [1 - n, n, -n],
338
+ },
339
+ {
340
+ point: "Z",
341
+ coordinates: [1 / 2, 1 / 2, -1 / 2],
342
+ },
343
+ ];
344
+ },
345
+
346
+ ORCC: ({ a, b }: LatticeImplicitSchema) => {
347
+ const e = (1 + (a * a) / (b * b)) / 4;
348
+ return [
349
+ {
350
+ point: "A",
351
+ coordinates: [e, e, 1 / 2],
352
+ },
353
+ {
354
+ point: "A1",
355
+ coordinates: [-e, 1 - e, 1 / 2],
356
+ },
357
+ {
358
+ point: "R",
359
+ coordinates: [0.0, 1 / 2, 1 / 2],
360
+ },
361
+ {
362
+ point: "S",
363
+ coordinates: [0.0, 1 / 2, 0.0],
364
+ },
365
+ {
366
+ point: "T",
367
+ coordinates: [-1 / 2, 1 / 2, 1 / 2],
368
+ },
369
+ {
370
+ point: "X",
371
+ coordinates: [e, e, 0.0],
372
+ },
373
+ {
374
+ point: "X1",
375
+ coordinates: [-e, 1 - e, 0.0],
376
+ },
377
+ {
378
+ point: "Y",
379
+ coordinates: [-1 / 2, 1 / 2, 0.0],
380
+ },
381
+ {
382
+ point: "Z",
383
+ coordinates: [0.0, 0.0, 1 / 2],
384
+ },
385
+ ];
386
+ },
387
+
388
+ HEX: () => {
389
+ return [
390
+ {
391
+ point: "A",
392
+ coordinates: [0.0, 0.0, 1 / 2],
393
+ },
394
+ {
395
+ point: "H",
396
+ coordinates: [1 / 3, 1 / 3, 1 / 2],
397
+ },
398
+ {
399
+ point: "K",
400
+ coordinates: [1 / 3, 1 / 3, 0.0],
401
+ },
402
+ {
403
+ point: "L",
404
+ coordinates: [1 / 2, 0.0, 1 / 2],
405
+ },
406
+ {
407
+ point: "M",
408
+ coordinates: [1 / 2, 0.0, 0.0],
409
+ },
410
+ ];
411
+ },
412
+
413
+ RHL: ({ alpha }: LatticeImplicitSchema) => {
414
+ let n, v;
415
+ const cosAlpha = Math.cos((alpha / 180) * Math.PI);
416
+ if (cosAlpha > 0) {
417
+ // RHL-1
418
+ n = (1 + 4 * cosAlpha) / (2 + 4 * cosAlpha);
419
+ v = 3 / 4 - n / 2;
420
+ return [
421
+ {
422
+ point: "B",
423
+ coordinates: [n, 1 / 2, 1 - n],
424
+ },
425
+ {
426
+ point: "B1",
427
+ coordinates: [1 / 2, 1 - n, n - 1],
428
+ },
429
+ {
430
+ point: "F",
431
+ coordinates: [1 / 2, 1 / 2, 0.0],
432
+ },
433
+ {
434
+ point: "L",
435
+ coordinates: [1 / 2, 0.0, 0.0],
436
+ },
437
+ {
438
+ point: "L1",
439
+ coordinates: [0.0, 0.0, -1 / 2],
440
+ },
441
+ {
442
+ point: "P",
443
+ coordinates: [n, v, v],
444
+ },
445
+ {
446
+ point: "P1",
447
+ coordinates: [1 - v, 1 - v, 1 - n],
448
+ },
449
+ {
450
+ point: "P2",
451
+ coordinates: [v, v, n - 1],
452
+ },
453
+ {
454
+ point: "Q",
455
+ coordinates: [1 - v, v, 0.0],
456
+ },
457
+ {
458
+ point: "X",
459
+ coordinates: [v, 0.0, -v],
460
+ },
461
+ {
462
+ point: "Z",
463
+ coordinates: [1 / 2, 1 / 2, 1 / 2],
464
+ },
465
+ ];
466
+ }
467
+ // RHL-2
468
+ n = ((1 / 2) * (1 + cosAlpha)) / (1 - cosAlpha);
469
+ v = 3 / 4 - n / 2;
470
+ return [
471
+ {
472
+ point: "F",
473
+ coordinates: [1 / 2, -1 / 2, 0.0],
474
+ },
475
+ {
476
+ point: "L",
477
+ coordinates: [1 / 2, 0.0, 0.0],
478
+ },
479
+ {
480
+ point: "P",
481
+ coordinates: [1 - v, -v, 1 - v],
482
+ },
483
+ {
484
+ point: "P1",
485
+ coordinates: [v, v - 1, v - 1],
486
+ },
487
+ {
488
+ point: "Q",
489
+ coordinates: [n, n, n],
490
+ },
491
+ {
492
+ point: "Q1",
493
+ coordinates: [1 - n, -n, -n],
494
+ },
495
+ {
496
+ point: "Z",
497
+ coordinates: [1 / 2, -1 / 2, 1 / 2],
498
+ },
499
+ ];
500
+ },
501
+
502
+ MCL: ({ b, c, alpha }: LatticeImplicitSchema) => {
503
+ const cosAlpha = Math.cos((alpha / 180) * Math.PI);
504
+ const n = ((1 / 2) * (1 - (b * cosAlpha) / c)) / (1 - cosAlpha * cosAlpha);
505
+ const v = 1 / 2 - (n * c * cosAlpha) / b;
506
+ return [
507
+ {
508
+ point: "A",
509
+ coordinates: [1 / 2, 1 / 2, 0.0],
510
+ },
511
+ {
512
+ point: "C",
513
+ coordinates: [0.0, 1 / 2, 1 / 2],
514
+ },
515
+ {
516
+ point: "D",
517
+ coordinates: [1 / 2, 0.0, 1 / 2],
518
+ },
519
+ {
520
+ point: "D1",
521
+ coordinates: [1 / 2, 0.0, -1 / 2],
522
+ },
523
+ {
524
+ point: "E",
525
+ coordinates: [1 / 2, 1 / 2, 1 / 2],
526
+ },
527
+ {
528
+ point: "H",
529
+ coordinates: [0.0, n, 1 - v],
530
+ },
531
+ {
532
+ point: "H1",
533
+ coordinates: [0.0, 1 - n, v],
534
+ },
535
+ {
536
+ point: "H2",
537
+ coordinates: [0.0, n, -v],
538
+ },
539
+ {
540
+ point: "M",
541
+ coordinates: [1 / 2, n, 1 - v],
542
+ },
543
+ {
544
+ point: "M1",
545
+ coordinates: [1 / 2, 1 - n, v],
546
+ },
547
+ {
548
+ point: "M2",
549
+ coordinates: [1 / 2, n, -v],
550
+ },
551
+ {
552
+ point: "X",
553
+ coordinates: [0.0, 1 / 2, 0.0],
554
+ },
555
+ {
556
+ point: "Y",
557
+ coordinates: [0.0, 0.0, 1 / 2],
558
+ },
559
+ {
560
+ point: "Y1",
561
+ coordinates: [0.0, 0.0, -1 / 2],
562
+ },
563
+ {
564
+ point: "Z",
565
+ coordinates: [1 / 2, 0.0, 0.0],
566
+ },
567
+ ];
568
+ },
569
+
570
+ MCLC: ({ a, b, c, alpha, gamma }: LatticeImplicitSchema) => {
571
+ const cosAlpha = Math.cos((alpha / 180) * Math.PI);
572
+ let e, n, p, f, m, d, v;
573
+ if (gamma >= 90) {
574
+ // MCLC-1,2
575
+ e = (2 - (b * cosAlpha) / c) / (4 * (1 - cosAlpha * cosAlpha));
576
+ n = 1 / 2 + (2 * e * c * cosAlpha) / b;
577
+ p = 3 / 4 - (a * a) / (4 * b * b * (1 - cosAlpha * cosAlpha));
578
+ f = p + ((3 / 4 - p) * cosAlpha * b) / c;
579
+ return [
580
+ {
581
+ point: "N",
582
+ coordinates: [1 / 2, 0.0, 0.0],
583
+ },
584
+ {
585
+ point: "N1",
586
+ coordinates: [0.0, -1 / 2, 0.0],
587
+ },
588
+ {
589
+ point: "F",
590
+ coordinates: [1 - e, 1 - e, 1 - n],
591
+ },
592
+ {
593
+ point: "F1",
594
+ coordinates: [e, e, n],
595
+ },
596
+ {
597
+ point: "F2",
598
+ coordinates: [-e, -e, 1 - n],
599
+ },
600
+ {
601
+ point: "F3",
602
+ coordinates: [1 - e, -e, 1 - n],
603
+ },
604
+ {
605
+ point: "I",
606
+ coordinates: [f, 1 - f, 1 / 2],
607
+ },
608
+ {
609
+ point: "I1",
610
+ coordinates: [1 - f, f - 1, 1 / 2],
611
+ },
612
+ {
613
+ point: "L",
614
+ coordinates: [1 / 2, 1 / 2, 1 / 2],
615
+ },
616
+ {
617
+ point: "M",
618
+ coordinates: [1 / 2, 0.0, 1 / 2],
619
+ },
620
+ {
621
+ point: "X",
622
+ coordinates: [1 - p, p - 1, 0.0],
623
+ },
624
+ {
625
+ point: "X1",
626
+ coordinates: [p, 1 - p, 0.0],
627
+ },
628
+ {
629
+ point: "X2",
630
+ coordinates: [p - 1, -p, 0.0],
631
+ },
632
+ {
633
+ point: "Y",
634
+ coordinates: [1 / 2, 1 / 2, 0.0],
635
+ },
636
+ {
637
+ point: "Y1",
638
+ coordinates: [-1 / 2, -1 / 2, 0.0],
639
+ },
640
+ {
641
+ point: "Z",
642
+ coordinates: [0.0, 0.0, 1 / 2],
643
+ },
644
+ ];
645
+ }
646
+ if ((b / c) * cosAlpha + ((b * b) / (a * a)) * (1 - cosAlpha * cosAlpha) <= 1) {
647
+ // MCLC-3,4
648
+ m = (1 + (b * b) / (a * a)) / 4;
649
+ d = (b * c * cosAlpha) / (2 * a * a);
650
+ e = m - 1 / 4 + (1 - (b * cosAlpha) / c) / (4 * (1 - cosAlpha * cosAlpha));
651
+ n = 1 / 2 + (2 * e * c * cosAlpha) / b;
652
+ f = 1 + e - 2 * m;
653
+ p = n - 2 * d;
654
+ return [
655
+ {
656
+ point: "N",
657
+ coordinates: [1 / 2, 0.0, 0.0],
658
+ },
659
+ {
660
+ point: "N1",
661
+ coordinates: [0.0, -1 / 2, 0.0],
662
+ },
663
+ {
664
+ point: "F",
665
+ coordinates: [1 - f, 1 - f, 1 - p],
666
+ },
667
+ {
668
+ point: "F1",
669
+ coordinates: [f, f - 1, p],
670
+ },
671
+ {
672
+ point: "F2",
673
+ coordinates: [1 - f, -f, 1 - p],
674
+ },
675
+ {
676
+ point: "H",
677
+ coordinates: [e, e, n],
678
+ },
679
+ {
680
+ point: "H1",
681
+ coordinates: [1 - e, -e, 1 - n],
682
+ },
683
+ {
684
+ point: "H2",
685
+ coordinates: [-e, -e, 1 - n],
686
+ },
687
+ {
688
+ point: "I",
689
+ coordinates: [1 / 2, -1 / 2, 1 / 2],
690
+ },
691
+ {
692
+ point: "M",
693
+ coordinates: [1 / 2, 0.0, 1 / 2],
694
+ },
695
+ {
696
+ point: "X",
697
+ coordinates: [1 / 2, -1 / 2, 0.0],
698
+ },
699
+ {
700
+ point: "Y",
701
+ coordinates: [m, m, d],
702
+ },
703
+ {
704
+ point: "Y1",
705
+ coordinates: [1 - m, -m, -d],
706
+ },
707
+ {
708
+ point: "Y2",
709
+ coordinates: [-m, -m, -d],
710
+ },
711
+ {
712
+ point: "Y3",
713
+ coordinates: [m, m - 1, d],
714
+ },
715
+ {
716
+ point: "Z",
717
+ coordinates: [0.0, 0.0, 1 / 2],
718
+ },
719
+ ];
720
+ }
721
+ // MCLC-5
722
+ e = (1 / 4) * ((b * b) / (a * a) + (1 - (b * cosAlpha) / c) / (1 - cosAlpha * cosAlpha));
723
+ // @ts-ignore
724
+ m = n / 2 + (b * b) / (a * a) / 4 - (b * c * cosAlpha) / (2 * a * a);
725
+ // eslint-disable-next-line max-len
726
+ const w = // @ts-ignore
727
+ ((4 * v - 1 - (b * b * (1 - cosAlpha * cosAlpha)) / (a * a)) * c) / (2 * b * cosAlpha);
728
+ n = 1 / 2 + (2 * e * c * cosAlpha) / b;
729
+ d = ((e * c) / b) * cosAlpha + w / 2 - 1 / 4;
730
+ v = 1 + e - 2 * m;
731
+ const r = 1 - (e * a * a) / (b * b);
732
+ return [
733
+ {
734
+ point: "N",
735
+ coordinates: [1 / 2, 0.0, 0.0],
736
+ },
737
+ {
738
+ point: "N1",
739
+ coordinates: [0.0, -1 / 2, 0.0],
740
+ },
741
+ {
742
+ point: "F",
743
+ coordinates: [v, v, w],
744
+ },
745
+ {
746
+ point: "F1",
747
+ coordinates: [1 - v, 1 - v, 1 - w],
748
+ },
749
+ {
750
+ point: "F2",
751
+ coordinates: [v, v - 1, w],
752
+ },
753
+ {
754
+ point: "H",
755
+ coordinates: [e, e, n],
756
+ },
757
+ {
758
+ point: "H1",
759
+ coordinates: [1 - e, -e, 1 - n],
760
+ },
761
+ {
762
+ point: "H2",
763
+ coordinates: [-e, -e, 1 - n],
764
+ },
765
+ {
766
+ point: "I",
767
+ coordinates: [r, 1 - r, 1 / 2],
768
+ },
769
+ {
770
+ point: "I1",
771
+ coordinates: [1 - r, r - 1, 1 / 2],
772
+ },
773
+ {
774
+ point: "L",
775
+ coordinates: [1 / 2, 1 / 2, 1 / 2],
776
+ },
777
+ {
778
+ point: "M",
779
+ coordinates: [1 / 2, 0.0, 1 / 2],
780
+ },
781
+ {
782
+ point: "X",
783
+ coordinates: [1 / 2, -1 / 2, 0.0],
784
+ },
785
+ {
786
+ point: "Y",
787
+ coordinates: [m, m, d],
788
+ },
789
+ {
790
+ point: "Y1",
791
+ coordinates: [1 - m, -m, -d],
792
+ },
793
+ {
794
+ point: "Y2",
795
+ coordinates: [-m, -m, -d],
796
+ },
797
+ {
798
+ point: "Y3",
799
+ coordinates: [m, m - 1, d],
800
+ },
801
+ {
802
+ point: "Z",
803
+ coordinates: [0.0, 0.0, 1 / 2],
804
+ },
805
+ ];
806
+ },
807
+
808
+ TRI: ({ alpha, beta, gamma }: LatticeImplicitSchema) => {
809
+ if (alpha > 90 && beta > 90 && gamma >= 90) {
810
+ // TRI-1a,2a
811
+ return [
812
+ {
813
+ point: "L",
814
+ coordinates: [1 / 2, 1 / 2, 0.0],
815
+ },
816
+ {
817
+ point: "M",
818
+ coordinates: [0.0, 1 / 2, 1 / 2],
819
+ },
820
+ {
821
+ point: "N",
822
+ coordinates: [1 / 2, 0.0, 1 / 2],
823
+ },
824
+ {
825
+ point: "R",
826
+ coordinates: [1 / 2, 1 / 2, 1 / 2],
827
+ },
828
+ {
829
+ point: "X",
830
+ coordinates: [1 / 2, 0.0, 0.0],
831
+ },
832
+ {
833
+ point: "Y",
834
+ coordinates: [0.0, 1 / 2, 0.0],
835
+ },
836
+ {
837
+ point: "Z",
838
+ coordinates: [0.0, 0.0, 1 / 2],
839
+ },
840
+ ];
841
+ }
842
+ // TRI-1b,2b
843
+ return [
844
+ {
845
+ point: "L",
846
+ coordinates: [1 / 2, -1 / 2, 0.0],
847
+ },
848
+ {
849
+ point: "M",
850
+ coordinates: [0.0, 0.0, 1 / 2],
851
+ },
852
+ {
853
+ point: "N",
854
+ coordinates: [-1 / 2, -1 / 2, 1 / 2],
855
+ },
856
+ {
857
+ point: "R",
858
+ coordinates: [0.0, -1 / 2, 1 / 2],
859
+ },
860
+ {
861
+ point: "X",
862
+ coordinates: [0.0, -1 / 2, 0.0],
863
+ },
864
+ {
865
+ point: "Y",
866
+ coordinates: [1 / 2, 0.0, 0.0],
867
+ },
868
+ {
869
+ point: "Z",
870
+ coordinates: [-1 / 2, 0.0, 1 / 2],
871
+ },
872
+ ];
873
+ },
874
+ };
875
+
876
+ /**
877
+ * Returns a list of symmetry points for the specified lattice.
878
+ */
879
+ export function symmetryPoints(lattice: Lattice) {
880
+ return [
881
+ {
882
+ point: "Г",
883
+ coordinates: [0.0, 0.0, 0.0],
884
+ },
885
+ ].concat(POINTS[lattice.type](lattice) || []);
886
+ }