1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
#include <stdio.h>
#include "spglib.h"
int main(int argc, char *argv[]) {
SpglibDataset *dataset;
int i, j;
char const wl[26] = "abcdefghijklmnopqrstuvwxyz";
// Wurtzite structure (P6_3mc)
double lattice[3][3] = {
{3.111, -1.5555, 0}, {0, 2.6942050311733885, 0}, {0, 0, 4.988}};
double position[4][3] = {
{1.0 / 3, 2.0 / 3, 0.0},
{2.0 / 3, 1.0 / 3, 0.5},
{1.0 / 3, 2.0 / 3, 0.6181},
{2.0 / 3, 1.0 / 3, 0.1181},
};
int types[4] = {1, 1, 2, 2};
int num_atom = 4;
double symprec = 1e-5;
// SpglibDataset has to be freed after use.
dataset = spg_get_dataset(lattice, position, types, num_atom, symprec);
printf("International symbol: %s (%d)\n", dataset->international_symbol,
dataset->spacegroup_number);
printf("Hall symbol: %s\n", dataset->hall_symbol);
printf("Wyckoff letters:\n");
for (i = 0; i < dataset->n_atoms; i++) {
printf("%c ", wl[dataset->wyckoffs[i]]);
}
printf("\n");
printf("Equivalent atoms:\n");
for (i = 0; i < dataset->n_atoms; i++) {
printf("%d -> %d\n", i, dataset->equivalent_atoms[i]);
}
printf("Space group operations:\n");
for (i = 0; i < dataset->n_operations; i++) {
printf("--- %d ---\n", i + 1);
for (j = 0; j < 3; j++) {
printf("%2d %2d %2d\n", dataset->rotations[i][j][0],
dataset->rotations[i][j][1], dataset->rotations[i][j][2]);
}
printf("%f %f %f\n", dataset->translations[i][0],
dataset->translations[i][1], dataset->translations[i][2]);
}
// Deallocate SpglibDataset, otherwise induce memory leak.
spg_free_dataset(dataset);
}
|