Orbiter 2022
Combinatorial Objects
sims3.cpp
Go to the documentation of this file.
1// sims3.cpp
2//
3// Anton Betten
4// November 22, 2016
5
7#include "group_actions.h"
8
9using namespace std;
10
11
12namespace orbiter {
13namespace layer3_group_actions {
14namespace groups {
15
16
17
19 sims *Sub, int *C, int verbose_level)
20{
21 int f_v = (verbose_level >= 1);
22 long int go, go_sub;
23 long int i, j;
24
25
26 if (f_v) {
27 cout << "sims::subgroup_make_characteristic_vector" << endl;
28 }
29
30 go = group_order_lint();
31 Int_vec_zero(C, go);
32 go_sub = Sub->group_order_lint();
33 for (i = 0; i < go_sub; i++) {
34 Sub->element_unrank_lint(i, Elt1);
35 j = element_rank_lint(Elt1);
36 C[j] = TRUE;
37 }
38 if (f_v) {
39 cout << "The characteristic vector of the "
40 "subgroup of order " << go_sub << " is:" << endl;
42 }
43 if (f_v) {
44 cout << "sims::subgroup_make_characteristic_vector done" << endl;
45 }
46}
47
49 int *Gen_idx, int nb_gens, int *N, long int &N_go, int verbose_level)
50{
51 int f_v = (verbose_level >= 1);
52 long int go;
53 long int i, j, a;
55
56
57 if (f_v) {
58 cout << "sims::normalizer_based_on_characteristic_vector" << endl;
59 }
60
62 gens->init(A, verbose_level - 2);
63 gens->allocate(nb_gens, verbose_level - 2);
64 for (j = 0; j < nb_gens; j++) {
65 a = Gen_idx[j];
67 }
68
69 go = group_order_lint();
70 Int_vec_zero(N, go);
71
72 N_go = 0;
73 for (i = 0; i < go; i++) {
74 element_unrank_lint(i, Elt1);
75 A->element_invert(Elt1, Elt2, 0);
76 for (j = 0; j < nb_gens; j++) {
77 A->element_mult(Elt2, gens->ith(j), Elt3, 0);
78 A->element_mult(Elt3, Elt1, Elt4, 0);
79 a = element_rank_lint(Elt4);
80 if (!C_sub[a]) {
81 break;
82 }
83 }
84 if (j == nb_gens) {
85 N[i]++;
86 N_go++;
87 }
88 }
90 if (f_v) {
91 cout << "sims::normalizer_based_on_characteristic_vector done" << endl;
92 }
93}
94
96 int *Order, int *Residue, int verbose_level)
97{
98 int f_v = (verbose_level >= 1);
99 long int go;
100 long int i, j, a;
101
102
103 if (f_v) {
104 cout << "sims::order_structure_relative_to_subgroup" << endl;
105 }
106
107
108 go = group_order_lint();
109 for (i = 0; i < go; i++) {
110 element_unrank_lint(i, Elt1);
111 A->element_move(Elt1, Elt2, 0);
112 for (j = 1; ; j++) {
113 a = element_rank_lint(Elt2);
114 if (C_sub[a]) {
115 break;
116 }
117 A->element_mult(Elt2, Elt1, Elt3, 0);
118 A->element_move(Elt3, Elt2, 0);
119 }
120 Order[i] = j;
121 Residue[i] = a;
122#if 0
123 if ((j % 2) == 0) {
124 cout << "element " << i << " has relative order " << j << endl;
125 cout << "element:" << endl;
126 A->element_print(Elt1, cout);
127 }
128#endif
129 }
130
131 if (f_v) {
132 cout << "sims::order_structure_relative_to_subgroup done" << endl;
133 }
134}
135
136}}}
137
void print_as_table(std::ostream &ost, int *v, int len, int width)
Definition: int_vec.cpp:497
void element_print(void *elt, std::ostream &ost)
Definition: action_cb.cpp:347
void element_mult(void *a, void *b, void *ab, int verbose_level)
Definition: action_cb.cpp:315
void element_invert(void *a, void *av, int verbose_level)
Definition: action_cb.cpp:322
void element_move(void *a, void *b, int verbose_level)
Definition: action_cb.cpp:335
void init(actions::action *A, int verbose_level)
Definition: vector_ge.cpp:55
a permutation group represented via a stabilizer chain
Definition: groups.h:1273
void order_structure_relative_to_subgroup(int *C_sub, int *Order, int *Residue, int verbose_level)
Definition: sims3.cpp:95
void normalizer_based_on_characteristic_vector(int *C_sub, int *Gen_idx, int nb_gens, int *N, long int &N_go, int verbose_level)
Definition: sims3.cpp:48
void subgroup_make_characteristic_vector(sims *Sub, int *C, int verbose_level)
Definition: sims3.cpp:18
data_structures_groups::vector_ge gens
Definition: groups.h:1280
void element_unrank_lint(long int rk, int *Elt, int verbose_level)
Definition: sims.cpp:1326
#define Int_vec_zero(A, B)
Definition: foundations.h:713
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define TRUE
Definition: foundations.h:231
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects