Orbiter 2022
Combinatorial Objects
surface_create_by_arc_lifting.cpp
Go to the documentation of this file.
1/*
2 * surface_create_by_arc_lifting.cpp
3 *
4 * Created on: Jul 17, 2020
5 * Author: betten
6 */
7
8
9
10
11#include "orbiter.h"
12
13using namespace std;
14
15namespace orbiter {
16namespace layer5_applications {
17namespace applications_in_algebraic_geometry {
18namespace cubic_surfaces_and_arcs {
19
20
22{
23 arc_idx = 0;
24 surface_idx = 0;
25 SCA = NULL;
26 arc_idx = 0;
27 Arc6 = NULL;
28 AL = NULL;
29 SOA = NULL;
30 Clebsch = NULL;
31 Other_arc_idx = NULL;
32}
33
34
36{
37 if (Arc6) {
39 }
40 if (AL) {
42 }
43 if (SOA) {
45 }
46 if (Clebsch) {
48 }
49 if (Other_arc_idx) {
51 }
52}
53
54
56 surface_classify_using_arc *SCA, int verbose_level)
57{
58 int f_v = (verbose_level >= 1);
59
60 if (f_v) {
61 cout << "surface_create_by_arc_lifting::init" << endl;
62 }
63
66
67
69
70 char str[1000];
71
72 snprintf(str, 1000, "%d / %d", arc_idx, SCA->Six_arcs->nb_arcs_not_on_conic);
73
74 arc_label.assign(str);
75
76 snprintf(str, 1000, "Arc%d", arc_idx);
77
78 arc_label_short.assign(str);
79
80
81 if (f_v) {
82 cout << "surface_create_by_arc_lifting::init extending arc "
83 << arc_idx << " / "
84 << SCA->Six_arcs->nb_arcs_not_on_conic << ":" << endl;
85 }
86
87
88 Arc6 = NEW_lint(6);
89
91 6 /* level */,
93 Arc6);
94
95
96 if (f_v) {
97 cout << "surface_create_by_arc_lifting::init extending arc "
98 << arc_idx << " / "
99 << SCA->Six_arcs->nb_arcs_not_on_conic << " : Arc6 = ";
100 Lint_vec_print(cout, Arc6, 6);
101 cout << endl;
102 }
103
105
106
107 if (f_v) {
108 cout << "surface_create_by_arc_lifting::init "
109 "before AL->create_surface_and_group" << endl;
110 }
111 AL->create_surface_and_group(SCA->Surf_A, Arc6, verbose_level);
112 if (f_v) {
113 cout << "surface_create_by_arc_lifting::init "
114 "after AL->create_surface_and_group" << endl;
115 }
116
117 string magma_fname;
119
120 magma_fname.assign("surface_q");
121 sprintf(str, "%d", SCA->Surf_A->PA->F->q);
122 magma_fname.append(str);
123 magma_fname.append("_iso");
124 sprintf(str, "%d", SCA->nb_surfaces);
125 magma_fname.append("_group.magma");
126
128 magma_fname, AL->Trihedral_pair->Aut_gens->A, verbose_level - 2);
129
130 if (f_v) {
131 cout << "written file " << magma_fname << " of size "
132 << Fio.file_size(magma_fname) << endl;
133 }
134
136
138
139
140
141
142
144
145 if (f_v) {
146 cout << "surface_create_by_arc_lifting::init "
147 "before SOA->init_with_27_lines" << endl;
148 }
149
151 AL->Web->Lines27, 27, AL->the_equation,
153 FALSE /* f_find_double_six_and_rearrange_lines */,
154 FALSE, NULL,
155 verbose_level);
156 if (f_v) {
157 cout << "surface_create_by_arc_lifting::init "
158 "after SOA->init_with_27_lines" << endl;
159 }
160
161
162
163
166 cout << "The automorphism group of the surface has order "
167 << ago << "\\\\" << endl;
168
169
170
171
172
176 FALSE /* verbose_level */);
177
178
179
180
181
182 if (f_v) {
183 cout << "surface_create_by_arc_lifting::init "
184 "arc " << arc_label << " yields a surface with "
185 << AL->Web->E->nb_E << " Eckardt points and a stabilizer "
186 "of order " << go << " with "
188 << " orbits on single sixes" << endl;
189 }
190
191
193
194
195 int orbit_idx;
196
197 if (f_v) {
198 cout << "surface_create_by_arc_lifting::init "
199 "performing isomorph rejection" << endl;
200 }
201
204
205 for (orbit_idx = 0; orbit_idx < SOA->Orbits_on_single_sixes->nb_orbits; orbit_idx++) {
206
207 if (f_v) {
208 cout << "surface_create_by_arc_lifting::init "
209 "orbit " << orbit_idx << " / " << SOA->Orbits_on_single_sixes->nb_orbits << endl;
210 }
211 Clebsch[orbit_idx].init(SOA, orbit_idx, verbose_level);
212
213
214#if 0
215 Six_arcs->Gen->gen->identify(Arc, 6, transporter,
216 orbit_at_level, 0 /*verbose_level */);
217
218
219
220
221
222 if (!Sorting.int_vec_search(Six_arcs->Not_on_conic_idx,
223 Six_arcs->nb_arcs_not_on_conic, orbit_at_level, idx)) {
224 cout << "could not find orbit" << endl;
225 exit(1);
226 }
227#else
228 SCA->Six_arcs->recognize(Clebsch[orbit_idx].Clebsch_map->Arc, SCA->transporter,
229 Other_arc_idx[orbit_idx], verbose_level - 2);
230
231#endif
232 SCA->f_deleted[Other_arc_idx[orbit_idx]] = TRUE;
233
235
236
237 if (f_v) {
238 cout << "arc " << arc_label << " yields a surface with "
239 << AL->Web->E->nb_E
240 << " Eckardt points and a stabilizer of order "
241 << go << " with "
243 << " orbits on single sixes";
244 cout << " orbit " << orbit_idx << " yields an arc which "
245 "is isomorphic to arc " << Other_arc_idx[orbit_idx] << endl;
246 }
247
248
249
250
251
252 }
253
254 if (f_v) {
255 cout << "surface_create_by_arc_lifting::init done" << endl;
256 }
257
258}
259
260void surface_create_by_arc_lifting::report_summary(std::ostream &ost, int verbose_level)
261{
262 int f_v = (verbose_level >= 1);
263
264 if (f_v) {
265 cout << "surface_create_by_arc_lifting::report_summary" << endl;
266 }
267
268
269
272
273 ost << "The equation of the surface is" << endl;
274
275 if (f_v) {
276 cout << "surface_create_by_arc_lifting::report_summary "
277 "before AL->report_equation" << endl;
278 }
279 AL->report_equation(ost);
280 if (f_v) {
281 cout << "surface_create_by_arc_lifting::report_summary "
282 "after AL->report_equation" << endl;
283 }
284
285
286 ost << "Extension of arc " << arc_idx
287 << " / " << SCA->Six_arcs->nb_arcs_not_on_conic << ":" << endl;
288
289
291
292 ost << "arc " << arc_idx << " yields a surface with "
293 << AL->Web->E->nb_E << " Eckardt points and a "
294 "stabilizer of order " << ago << " with "
296 << " orbits on single sixes\\\\" << endl;
297
298
299 if (f_v) {
300 cout << "surface_create_by_arc_lifting::report_summary "
301 "before SOA->SO->print_Eckardt_points" << endl;
302 }
304 if (f_v) {
305 cout << "surface_create_by_arc_lifting::report_summary "
306 "after SOA->SO->print_Eckardt_points" << endl;
307 }
308
309
310}
311
314 int verbose_level)
315{
316 int f_v = (verbose_level >= 1);
317
318 if (f_v) {
319 cout << "surface_create_by_arc_lifting::report" << endl;
320 }
321
322
325
326 ost << "The equation of the surface is" << endl;
327
328 if (f_v) {
329 cout << "surface_create_by_arc_lifting::report "
330 "before AL->report_equation" << endl;
331 }
332 AL->report_equation(ost);
333 if (f_v) {
334 cout << "surface_create_by_arc_lifting::report "
335 "after AL->report_equation" << endl;
336 }
337
338
339 ost << "Extension of arc " << arc_idx
340 << " / " << SCA->Six_arcs->nb_arcs_not_on_conic << ":" << endl;
341
342
344
345 ost << "arc " << arc_idx << " yields a surface with "
346 << AL->Web->E->nb_E << " Eckardt points and a "
347 "stabilizer of order " << ago << " with "
349 << " orbits on single sixes\\\\" << endl;
350
351#if 0
352 {
353 set_and_stabilizer *The_arc;
354
356 6 /* level */,
358 0 /* verbose_level */);
359
360
361 ost << "Arc " << arc_idx << " / "
362 << SCA->Six_arcs->nb_arcs_not_on_conic << " is: ";
363 ost << "$$" << endl;
364 //int_vec_print(fp, Arc6, 6);
365 The_arc->print_set_tex(ost);
366 ost << "$$" << endl;
367
368 SCA->Surf_A->F->display_table_of_projective_points(ost,
369 The_arc->data, 6, 3);
370
371
372 ost << "The arc-stabilizer is the following group:\\\\" << endl;
373 The_arc->Strong_gens->print_generators_tex(ost);
374
375 FREE_OBJECT(The_arc);
376 }
377#endif
378
379
380 AL->report(ost, verbose_level);
381
382
383
384 if (f_v) {
385 cout << "surface_create_by_arc_lifting::report "
386 "before report_properties_simple" << endl;
387 }
388 SOA->SO->SOP->report_properties_simple(ost, verbose_level);
389 if (f_v) {
390 cout << "surface_create_by_arc_lifting::report "
391 "after report_properties_simple" << endl;
392 }
393
394
395 ost << "The nine lines in the selected trihedral pair are:" << endl;
396
400
401 //SOA->SO->latex_table_of_trihedral_pairs_and_clebsch_system(
402 //fp, AL->T_idx, AL->nb_T);
403
404 if (f_v) {
405 cout << "surface_create_by_arc_lifting::report "
406 "before SOA->print_automorphism_group" << endl;
407 }
408
409 string fname_mask;
410 char str[1000];
411
412 fname_mask.assign("orbit_half_double_sixes_q");
413 sprintf(str, "%d", SCA->Surf_A->PA->F->q);
414 fname_mask.append(str);
415 fname_mask.append("_iso_");
416 sprintf(str, "%d", SCA->nb_surfaces);
417 fname_mask.append(str);
418 fname_mask.append("_%d");
419
421 TRUE /* f_print_orbits */,
422 fname_mask, Opt,
423 verbose_level - 1);
424
425 ost << "arc " << arc_label << " yields a surface with "
426 << AL->Web->E->nb_E << " Eckardt points and a "
427 "stabilizer of order " << ago << " with "
429 << " orbits on single sixes\\\\" << endl;
430
431
432 int orbit_idx;
433
434 for (orbit_idx = 0; orbit_idx < SOA->Orbits_on_single_sixes->nb_orbits; orbit_idx++) {
435
436 cout << "arc " << arc_label << " yields a surface with "
437 << AL->Web->E->nb_E
438 << " Eckardt points and a stabilizer of order "
439 << ago << " with "
441 << " orbits on single sixes \\\\" << endl;
442 cout << " orbit " << orbit_idx << " yields an arc which is "
443 "isomorphic to arc " << Other_arc_idx[orbit_idx] << "\\\\" << endl;
444
445 }
446
447
448 for (orbit_idx = 0; orbit_idx < SOA->Orbits_on_single_sixes->nb_orbits; orbit_idx++) {
449 Clebsch[orbit_idx].report(ost, verbose_level);
450 }
451
452 if (f_v) {
453 cout << "surface_create_by_arc_lifting::report done" << endl;
454 }
455}
456
457
458}}}}
459
void identify_lines(long int *lines, int nb_lines, int *line_idx, int verbose_level)
void print_nine_lines_latex(std::ostream &ost, long int *nine_lines, int *nine_lines_idx)
options for drawing an object of type layered_graph
Definition: graphics.h:457
a class to represent arbitrary precision integers
Definition: ring_theory.h:366
void export_permutation_group_to_magma(std::string &fname, actions::action *A2, int verbose_level)
void group_order(ring_theory::longinteger_object &go)
data_structures_groups::set_and_stabilizer * get_set_and_stabilizer(int level, int orbit_at_level, int verbose_level)
void print_automorphism_group(std::ostream &ost, int f_print_orbits, std::string &fname_mask, graphics::layered_graph_draw_options *Opt, int verbose_level)
void init_with_group(surface_with_action *Surf_A, long int *Lines, int nb_lines, int *eqn, groups::strong_generators *Aut_gens, int f_find_double_six_and_rearrange_lines, int f_has_nice_gens, data_structures_groups::vector_ge *nice_gens, int verbose_level)
a Clebsch map associated with a cubic surface and a choice of half double six
void create_surface_and_group(cubic_surfaces_in_general::surface_with_action *Surf_A, long int *Arc6, int verbose_level)
Definition: arc_lifting.cpp:64
void recognize(long int *arc6, int *transporter, int &orbit_not_on_conic_idx, int verbose_level)
poset_classification::poset_classification * gen
Definition: tl_geometry.h:104
#define FREE_OBJECTS(p)
Definition: foundations.h:652
#define FREE_int(p)
Definition: foundations.h:640
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define Lint_vec_print(A, B, C)
Definition: foundations.h:686
#define FREE_OBJECT(p)
Definition: foundations.h:651
#define NEW_int(n)
Definition: foundations.h:625
#define NEW_OBJECTS(type, n)
Definition: foundations.h:639
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
#define FREE_lint(p)
Definition: foundations.h:642
#define NEW_lint(n)
Definition: foundations.h:628
the orbiter library for the classification of combinatorial objects