-
Notifications
You must be signed in to change notification settings - Fork 6
/
normalizer.c
93 lines (75 loc) · 2.58 KB
/
normalizer.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
#include "typedef.h"
#include "bravais.h"
#include "base.h"
#include "matrix.h"
#include "getput.h"
#include "datei.h"
int main (int argc, char *argv[])
{
bravais_TYP *Gtr,
*H;
matrix_TYP *A;
int prime;
read_header(argc, argv);
if((FILEANZ < 1) || (is_option('h') && optionnumber('h')==0))
{
printf("Usage: Normalizer 'file1' ['file2' ['file3']] [-p=prime] [-o]\n");
printf("\n");
printf("file1: bravais_TYP containing the group G.\n");
printf("file2: (OPTIONAL) bravais_TYP containing the transposed of G. (cf. Tr_bravais)\n");
printf("file3: (OPTIONAL) matrix_TYP of a G-perfect form. (cf. First_perfect)\n");
printf("\n");
printf("Calculates a set of matrices which together with G generate the\n");
printf("normalizer N_GL_n(Z) (G) of G in GL_n(Z).\n");
printf("NOTE: the output echoes any input information about G, except input about\n");
printf("generators of the normalizer.\n");
printf("NOTE: The dimension of the space of invariant forms is a measure for the\n");
printf("complexity of the algorithm. Up to degree 6 the only infeasible case are\n");
printf("<I_6> and <-I_6>. Here the generators of the normalizer can be taken\n");
printf("from `Bravais_cat' with family 1,1,1,1,1,1.\n");
printf("\n");
printf("Options:\n");
printf("-b : The normalizer of the bravais group B(G) is calculated. With this\n");
printf(" option the program is much faster. (The normalizer of G is a\n");
printf(" subgroup of N_GL_n(Z) (B(G)). )\n");
printf("-p=prime: The determinants of the perfect forms are\n");
printf(" calculated module prime. The default is 1949.\n");
printf("-o : The G-perfect forms are given as additional output.\n");
printf("\n");
if (is_option('h')){
exit(0);
}
else{
exit(31);
}
}
INFO_LEVEL = optionnumber('h');
/* get data */
H = get_bravais(FILENAMES[0]);
if (FILEANZ > 1){
Gtr = get_bravais(FILENAMES[1]);
}
else{
Gtr = NULL;
}
/* read an G-perfect form if it is given */
if (FILEANZ > 2){
A = get_mat(FILENAMES[2]);
}
else{
A = NULL;
}
prime = optionnumber('p');
/* calculate normalizer */
normalisator(H, Gtr, A, prime, is_option('b'), is_option('o'));
if(!is_option('o')){
put_bravais(H, NULL, "group with complete normalizer");
}
/* cleaning up the memory */
if (A != NULL)
free_mat(A);
free_bravais(H);
if (Gtr != NULL)
free_bravais(Gtr);
exit(0);
}