-
Notifications
You must be signed in to change notification settings - Fork 6
/
bravais_equiv.c
110 lines (92 loc) · 2.58 KB
/
bravais_equiv.c
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "typedef.h"
#include "longtools.h"
#include "getput.h"
#include "bravais.h"
#include "symm.h"
#include "autgrp.h"
#include "matrix.h"
#include "voronoi.h"
#include "polyeder.h"
#include "datei.h"
int main (int argc, char *argv[])
{
bravais_TYP *G,
*G_tr,
*H,
*H_tr;
matrix_TYP *erg;
char comment[1000];
int i,
tmp;
read_header(argc, argv);
if ((FILEANZ < 2) || (is_option('h') && optionnumber('h') ==0)){
printf("Usage: %s 'file1' 'file2'\n",argv[0]);
printf("\n");
printf("file1: bravais_TYP containing G.\n");
printf("file2: bravais_TYP containing H.\n");
printf("\n");
printf("Tests whether the BRAVAIS GROUPS of the groups\n");
printf("G and H respectively are conjugated in GL_n(Z).\n");
printf("If so, it returns a conjugating matrix X which conjugates\n");
printf("the BRAVAIS GROUPS, ie. X^1 B(G) X = B(H).\n");
printf("\n");
printf("WARNING: The procedure may involve calculating the normalizer\n");
printf(" of the groups. This may be very time comsuming,\n");
printf(" especially when both groups are <-I_n>, where n>5.\n");
if (is_option('h')){
exit(0);
}
else{
exit(31);
}
}
INFO_LEVEL = optionnumber('h');
G = get_bravais(FILENAMES[0]);
H = get_bravais(FILENAMES[1]);
/* we might not deal with th whole bravais group */
G->order = H->order = 0;
/* paranoia setting: recalculate the formspace because it has to be a
Z-basis */
if (G->form !=NULL){
for (i=0;i<G->form_no;i++){
free_mat(G->form[i]);
}
free(G->form);
}
G->form = formspace(G->gen,G->gen_no,1,&tmp);
G->form_no = tmp;
if (H->form !=NULL){
for (i=0;i<H->form_no;i++){
free_mat(H->form[i]);
}
free(H->form);
}
H->form = formspace(H->gen,H->gen_no,1,&tmp);
H->form_no = tmp;
G_tr = tr_bravais(G,1,FALSE);
H_tr = tr_bravais(H,1,FALSE);
/* output for debugging purposes
put_bravais(G,NULL,NULL);
put_bravais(H,NULL,NULL); */
erg = is_z_equivalent(G,G_tr,H,H_tr);
if (erg == NULL){
printf("the bravais groups are not conjugated\n");
}
else{
sprintf(comment,"conjugates the group of %s in the group of %s",
FILENAMES[0],FILENAMES[1]);
put_mat(erg,NULL,comment,2);
free_mat(erg);
}
/* output the groups again, just to make sure we didn't change
them */
if (INFO_LEVEL == 5){
put_bravais(H,NULL,NULL);
put_bravais(H_tr,NULL,NULL);
}
free_bravais(G);
free_bravais(G_tr);
free_bravais(H);
free_bravais(H_tr);
exit(0);
}