Orbiter 2022
Combinatorial Objects
surfaces_arc_lifting_definition_node.cpp
Go to the documentation of this file.
1/*
2 * surfaces_arc_lifting_definition_node.cpp
3 *
4 * Created on: Aug 3, 2020
5 * Author: betten
6 */
7
8
9
10
11
12#include "orbiter.h"
13
14using namespace std;
15
16namespace orbiter {
17namespace layer5_applications {
18namespace applications_in_algebraic_geometry {
19namespace cubic_surfaces_and_arcs {
20
21
23{
24 Lift = NULL;
25
26 f = 0;
27 orbit_idx = 0;
28
29 SO = NULL;
30 SOA = NULL;
31
32 Flag_stab_gens = NULL;
33 //longinteger_object Flag_stab_go;
34
35 //int three_lines_idx[45 * 3];
36 //long int three_lines[45 * 3];
37 //seventytwo_cases Seventytwo[45 * 72];
38
39 nb_coset_reps = 0;
40 T = NULL;
41 coset_reps = NULL;
42
44
46 F2 = NULL;
47 tally_F2 = NULL;
48}
49
50
52{
53}
54
56 int f, int orbit_idx, long int *Lines27, int *eqn20,
57 int verbose_level)
58{
59 int f_v = (verbose_level >= 1);
60
61 if (f_v) {
62 cout << "surfaces_arc_lifting_definition_node::init_with_27_lines" << endl;
63 }
64
68
69
71
72 if (f_v) {
73 cout << "surfaces_arc_lifting_definition_node::init_with_27_lines before SO->init_with_27_lines" << endl;
74 }
75 SO->init_with_27_lines(Lift->Surf_A->Surf, Lines27, eqn20,
76 FALSE /* f_find_double_six_and_rearrange_lines */,
77 verbose_level - 2);
78
79 if (f_v) {
80 cout << "surfaces_arc_lifting_definition_node::init_with_27_lines after SO->init_with_27_lines" << endl;
81 }
82
83
84 if (f_v) {
85 cout << "surfaces_arc_lifting_definition_node::init_with_27_lines done" << endl;
86 }
87}
88
90 int verbose_level)
91{
92 int f_v = (verbose_level >= 1);
93 int i;
94
95 if (f_v) {
96 cout << "surfaces_arc_lifting_definition_node::tally_f2" << endl;
97 }
98 F2 = NEW_int(45 * 72);
99 for (i = 0; i < 45 * 72; i++) {
100 F2[i] = Seventytwo[i].f2;
101 }
103 tally_F2->init(F2, 45 * 72, FALSE, 0);
104
105 f_has_F2 = TRUE;
106 if (f_v) {
107 cout << "surfaces_arc_lifting_definition_node::tally_f2 done" << endl;
108 }
109}
110
112{
113 char fname_base[1000];
115
116 sprintf(fname_base, "clebsch_maps_surface_%d", orbit_idx);
117
118 char title[1000];
119 char author[1000];
120 string fname_report;
121
122 fname_report.assign(fname_base);
123 fname_report.append(".tex");
124 snprintf(title, 1000, "Clebsch maps of surface %d", orbit_idx);
125 strcpy(author, "");
126
127 {
128 ofstream fp(fname_report.c_str());
129 L.head(fp,
130 FALSE /* f_book */,
131 TRUE /* f_title */,
132 title, author,
133 FALSE /*f_toc */,
134 FALSE /* f_landscape */,
135 FALSE /* f_12pt */,
136 TRUE /*f_enlarged_page */,
137 TRUE /* f_pagenumbers*/,
138 NULL /* extra_praeamble */);
139
140
141 report2(fp, verbose_level);
142
143 L.foot(fp);
144
145 }
147
148 cout << "Written file " << fname_report << " of size " << Fio.file_size(fname_report.c_str()) << endl;
149
150}
151
152void surfaces_arc_lifting_definition_node::report2(ostream &ost, int verbose_level)
153{
154 report_Clebsch_maps(ost, verbose_level);
155
156 if (SOA) {
157 SOA->cheat_sheet_basic(ost, verbose_level);
158 }
159}
160
161void surfaces_arc_lifting_definition_node::report_cosets(ostream &ost, int verbose_level)
162{
163 int f_v = (verbose_level >= 1);
164 int i;
165
166 if (f_v) {
167 cout << "surfaces_arc_lifting_definition_node::report_cosets" << endl;
168 }
169 //ost << "\\begin{enumerate}" << endl;
170 for (i = 0; i < nb_coset_reps; i++) {
171
172 ost << endl << "\\bigskip" << endl << endl;
173 //ost << "\\item" << endl;
174 ost << "Aut coset " << i << " / " << nb_coset_reps << ": relative order is "
175 << relative_order_table[i] << "\\\\" << endl;
176 ost << "$$" << endl;
178 ost << "$$" << endl;
179 }
180 //ost << "\\end{enumerate}" << endl;
181
182
183 //surfaces_arc_lifting_trace *T; // [nb_coset_reps]
184 //vector_ge *coset_reps;
185
186 //int *relative_order_table; // [nb_coset_reps]
187
188 if (f_v) {
189 cout << "surfaces_arc_lifting_definition_node::report_cosets done" << endl;
190 }
191}
192
194{
195 int f_v = (verbose_level >= 1);
196 int i;
197
198 if (f_v) {
199 cout << "surfaces_arc_lifting_definition_node::report_cosets_detailed" << endl;
200 }
201
202 ost << "We consider the Clebsch map " << endl;
203 ost << "$$" << endl;
204 ost << "\\Phi_{\\ell_1,\\ell_2,\\pi}" << endl;
205 ost << "$$" << endl;
206 ost << "with defining lines $\\ell_1,\\ell_2$ and image tritangent plane $\\pi$.\\\\" << endl;
207 ost << "The line $m_1$ is in $\\pi$ and $\\ell_i \\cap \\pi =P_i \\in m_1.$\\\\" << endl;
208 ost << "The four transversals besides $m_1$ to $\\ell_1,\\ell_2$ are called $t_3,t_4,t_5,t_6$.\\\\" << endl;
209 //ost << "The points $P_1,P_2$ are the points of intersection of $(\\ell_1,\\ell_2)$ with the tritangent plane.\\\\" << endl;
210 ost << "The points $P_3,P_4,P_5,P_6$ are the points of intersection of $t_3,t_4,t_5,t_6$ with the tritangent plane.\\\\" << endl;
211 ost << "Alpha1 * Alpha2 * Beta1 * Beta2 * Beta3 = AutCoset\\\\" << endl;
212 ost << "Alpha1 takes the chosen tritangent plane to the tritangent plane from the defining flag orbit.\\\\" << endl;
213 ost << "Alpha2 maps the 6-arc to the canonical representative.\\\\" << endl;
214 ost << "Beta1 maps the two points $P_1$ and $P_2$ defined by the lines $(\\ell_1,\\ell_2)$ to the canonical pair.\\\\" << endl;
215 ost << "Beta2 maps the partition defined by $\\{\\{P_3,P_4\\}, \\{P_5,P_6\\}\\}$ to the canonical partition.\\\\" << endl;
216 ost << "Beta3 maps the image of the lines $(\\ell_1,\\ell_2)$ under Alpha1*Alpha2*Beta1*Beta2 to the canonical pair.\\\\" << endl;
217 //ost << "\\begin{enumerate}" << endl;
218 for (i = 0; i < nb_coset_reps; i++) {
219
220 ost << endl << "\\bigskip" << endl << endl;
221 //ost << "\\item" << endl;
222 ost << "Aut coset " << i << " / " << nb_coset_reps << ": relative order is "
223 << relative_order_table[i] << "\\\\" << endl;
224
225 T[i]->report_product(ost, coset_reps->ith(i), verbose_level);
226
227 T[i]->The_case.report_single_Clebsch_map(ost, verbose_level);
228
229
230 //SO->print_lines(ost);
231
232
233 T[i]->The_case.report_Clebsch_map_details(ost, SO, verbose_level);
234
235 //T[i]->report_product(ost, coset_reps->ith(i), verbose_level);
236
237 }
238 //ost << "\\end{enumerate}" << endl;
239
240
241 if (f_v) {
242 cout << "surfaces_arc_lifting_definition_node::report_cosets_detailed done" << endl;
243 }
244}
245
247{
248 int f_v = (verbose_level >= 1);
249 int coset;
250
251 if (f_v) {
252 cout << "surfaces_arc_lifting_definition_node::report_cosets_HDS" << endl;
253 }
254
255 report_HDS_top(ost);
256
257 for (coset = 0; coset < nb_coset_reps; coset++) {
258
259 //ost << "Aut coset " << i << " / " << nb_coset_reps << ": relative order is "
260 // << relative_order_table[i] << "\\\\" << endl;
261
262 //T[i]->The_case.report_single_Clebsch_map(ost, verbose_level);
263
264
265
266 if ((coset % 24) == 0) {
268 report_HDS_top(ost);
269 }
270
271
272 T[coset]->The_case.report_Clebsch_map_aut_coset(ost, coset,
273 relative_order_table[coset], verbose_level);
274
275
276 }
277
279
280
281 if (f_v) {
282 cout << "surfaces_arc_lifting_definition_node::report_cosets_HDS done" << endl;
283 }
284}
285
286
288{
289 int t = T[0]->The_case.tritangent_plane_idx;
290
291 ost << "{\\renewcommand{\\arraystretch}{1.5}" << endl;
292 ost << "$$" << endl;
293 ost << "\\begin{array}{|c|c|c|c|c|c|c|c|}" << endl;
294 ost << "\\hline" << endl;
295 ost << "\\multicolumn{8}{|c|}{\\mbox{Tritangent Plane}\\; \\pi_{" << t
296 << "} = \\pi_{" << Lift->Surf->Schlaefli->Eckard_point_label_tex[t] << "}}\\\\" << endl;
297 ost << "\\hline" << endl;
298 ost << "\\mbox{Coset} & \\mbox{Clebsch} & (m_1,m_2,m_3) & "
299 "(\\ell_1',\\ell_2') & (t_3',t_4',t_5',t_6') & DS & HDS & \\mbox{r.o.}\\\\" << endl;
300 ost << "\\hline" << endl;
301}
302
304{
305 ost << "\\hline" << endl;
306 ost << "\\end{array}" << endl;
307 ost << "$$}" << endl;
308 ost << "\\bigskip" << endl;
309}
310
311
313{
314 int f_v = (verbose_level >= 1);
315 int coset;
316
317 if (f_v) {
318 cout << "surfaces_arc_lifting_definition_node::report_cosets_T3" << endl;
319 }
320
321 report_T3_top(ost);
322
323 for (coset = 0; coset < nb_coset_reps; coset++) {
324
325 //ost << "Aut coset " << i << " / " << nb_coset_reps << ": relative order is "
326 // << relative_order_table[i] << "\\\\" << endl;
327
328 //T[i]->The_case.report_single_Clebsch_map(ost, verbose_level);
329
330
331 if ((coset % 24) == 0) {
332 report_T3_bottom(ost);
333 report_T3_top(ost);
334 }
335
336 ost << coset << " & ";
337 //Lift->Surf->F->display_table_of_projective_points2(ost, T[coset]->The_case.P6, 6, 4);
338 ost << " & \\\\";
339
340
341 }
342
343 report_T3_bottom(ost);
344
345
346 if (f_v) {
347 cout << "surfaces_arc_lifting_definition_node::report_cosets_T3 done" << endl;
348 }
349}
350
352{
353 ost << "{\\renewcommand{\\arraystretch}{1.5}" << endl;
354 ost << "$$" << endl;
355 ost << "\\begin{array}{|c|c|c|}" << endl;
356 ost << "\\hline" << endl;
357 ost << "\\mbox{Coset} & \\mbox{Arc} & T_3 \\\\" << endl;
358 ost << "\\hline" << endl;
359}
360
362{
363 ost << "\\hline" << endl;
364 ost << "\\end{array}" << endl;
365 ost << "$$}" << endl;
366 ost << "\\bigskip" << endl;
367}
368
369
370
371void surfaces_arc_lifting_definition_node::report_tally_F2(ostream &ost, int verbose_level)
372{
373 if (f_has_F2) {
374 ost << "Tally of flag orbits: ";
375 tally_F2->print_file_tex(ost, FALSE /* f_backwards */);
376 ost << "\\\\" << endl;
377 }
378}
379
381{
382 int f_v = (verbose_level >= 1);
383
384 if (f_v) {
385 cout << "surfaces_arc_lifting_definition_node::report_Clebsch_maps" << endl;
386 }
387
388 report_tally_F2(ost, verbose_level);
389
390#if 1
391 int plane_idx[] = {12, 30};
392 int i;
393
394 for (i = 0; i < sizeof(plane_idx) / sizeof(int); i++) {
395
397 plane_idx[i], verbose_level);
398 }
399
400#else
401 int t;
402 for (t = 0; t < 45; t++) {
403 ost << "\\clearpage" << endl;
404 //ost << "Tritangent plane " << t << ": \\\\" << endl;
406 }
407#endif
408
409 if (f_v) {
410 cout << "surfaces_arc_lifting_definition_node::report_Clebsch_maps done" << endl;
411 }
412}
413
414
416 ostream &ost, int plane_idx, int verbose_level)
417{
418 int f_v = (verbose_level >= 1);
419 int i, j;
420
421 if (f_v) {
422 cout << "surfaces_arc_lifting_definition_node::report_Clebsch_maps_for_one_tritangent_plane" << endl;
423 }
424
425 for (i = 0; i < 3; i++) {
426 Seventytwo[plane_idx * 72 + i * 24].report_seventytwo_maps_top(ost);
427 for (j = 0; j < 24; j++) {
428 Seventytwo[plane_idx * 72 + i * 24 + j].report_seventytwo_maps_line(ost);
429 }
430 Seventytwo[plane_idx * 72 + i * 24].report_seventytwo_maps_bottom(ost);
431 }
432
433 if (f_v) {
434 cout << "surfaces_arc_lifting_definition_node::report_Clebsch_maps_for_one_tritangent_plane done" << endl;
435 }
436}
437
438
439
440
441}}}}
442
443
444
void report_single_Clebsch_map(std::ostream &ost, int verbose_level)
void report_Clebsch_map_details(std::ostream &ost, surface_object *SO, int verbose_level)
void report_Clebsch_map_aut_coset(std::ostream &ost, int coset, int relative_order, int verbose_level)
a particular cubic surface in PG(3,q), given by its equation
void init_with_27_lines(surface_domain *Surf, long int *Lines27, int *eqn, int f_find_double_six_and_rearrange_lines, int verbose_level)
a statistical analysis of data consisting of single integers
void print_file_tex(std::ostream &ost, int f_backwards)
Definition: tally.cpp:338
void init(int *data, int data_length, int f_second, int verbose_level)
Definition: tally.cpp:72
void head(std::ostream &ost, int f_book, int f_title, const char *title, const char *author, int f_toc, int f_landscape, int f_12pt, int f_enlarged_page, int f_pagenumbers, const char *extras_for_preamble)
void element_print_latex(void *elt, std::ostream &ost)
Definition: action_cb.cpp:364
void init_with_27_lines(surfaces_arc_lifting *Lift, int f, int orbit_idx, long int *Lines27, int *eqn20, int verbose_level)
#define NEW_OBJECT(type)
Definition: foundations.h:638
#define NEW_int(n)
Definition: foundations.h:625
#define TRUE
Definition: foundations.h:231
#define FALSE
Definition: foundations.h:234
the orbiter library for the classification of combinatorial objects