16namespace layer5_applications {
17namespace applications_in_algebraic_geometry {
18namespace cubic_surfaces_in_general {
33 std::string &sweep_fname,
36 int f_v = (verbose_level >= 1);
39 cout <<
"surface_domain_high_level::do_sweep_4_15_lines" << endl;
40 cout <<
"surface_domain_high_level::do_sweep_4_15_lines verbose_level=" << verbose_level << endl;
51 cout <<
"surface_domain_high_level::do_sweep_4_15_lines "
52 "before Surf_A->sweep_4_15_lines" << endl;
59 cout <<
"surface_domain_high_level::do_sweep_4_15_lines "
60 "after Surf_A->sweep_4_15_lines" << endl;
65 cout <<
"surface_domain_high_level::do_sweep_4_15_lines done" << endl;
72 std::string &sweep_fname,
75 int f_v = (verbose_level >= 1);
78 cout <<
"surface_domain_high_level::do_sweep_F_beta_9_lines" << endl;
79 cout <<
"surface_domain_high_level::do_sweep_F_beta_9_lines verbose_level=" << verbose_level << endl;
90 cout <<
"surface_domain_high_level::do_sweep_F_beta_9_lines "
91 "before Surf_A->sweep_F_beta_9_lines" << endl;
98 cout <<
"surface_domain_high_level::do_sweep_F_beta_9_lines "
99 "after Surf_A->sweep_F_beta_9_lines" << endl;
104 cout <<
"surface_domain_high_level::do_sweep_F_beta_9_lines done" << endl;
112 std::string &sweep_fname,
115 int f_v = (verbose_level >= 1);
118 cout <<
"surface_domain_high_level::do_sweep_6_9_lines" << endl;
119 cout <<
"surface_domain_high_level::do_sweep_6_9_lines verbose_level=" << verbose_level << endl;
130 cout <<
"surface_domain_high_level::do_sweep_6_9_lines "
131 "before Surf_A->sweep_6_9_lines" << endl;
138 cout <<
"surface_domain_high_level::do_sweep_6_9_lines "
139 "after Surf_A->sweep_6_9_lines" << endl;
144 cout <<
"surface_domain_high_level::do_sweep_6_9_lines done" << endl;
151 std::string &sweep_fname,
154 int f_v = (verbose_level >= 1);
157 cout <<
"surface_domain_high_level::do_sweep_4_27" << endl;
158 cout <<
"surface_domain_high_level::do_sweep_4_27 verbose_level=" << verbose_level << endl;
168 cout <<
"surface_domain_high_level::do_sweep_4_27 before Surf_A->sweep_4" << endl;
175 cout <<
"surface_domain_high_level::do_sweep_4_27 after Surf_A->sweep_4" << endl;
179 cout <<
"surface_domain_high_level::do_sweep_4_27 done" << endl;
191 int f_v = (verbose_level >= 1);
194 cout <<
"surface_domain_high_level::classify_surfaces_with_double_sixes" << endl;
202 cout <<
"surface_domain_high_level::classify_surfaces_with_double_sixes "
203 "before classify_surfaces, control=" << endl;
214 cout <<
"surface_domain_high_level::classify_surfaces_with_double_sixes "
215 "after classify_surfaces" << endl;
220 cout <<
"surface_domain_high_level::classify_surfaces_with_double_sixes "
221 "before SCW->generate_source_code" << endl;
225 cout <<
"surface_domain_high_level::classify_surfaces_with_double_sixes "
226 "after SCW->generate_source_code" << endl;
233 layered_graph_draw_options *O;
237 cout <<
"please use option -draw_options .. -end" << endl;
252 cout <<
"surface_domain_high_level::classify_surfaces_with_double_sixes done" << endl;
265 int f_v = (verbose_level >= 1);
269 cout <<
"surface_domain_high_level::prepare_surface_classify_wedge" << endl;
284 cout <<
"surface_domain_high_level::prepare_surface_classify_wedge before SCW->init" << endl;
292 cout <<
"surface_domain_high_level::prepare_surface_classify_wedge after SCW->init" << endl;
297 cout <<
"surface_domain_high_level::prepare_surface_classify_wedge before SCW->do_classify_double_sixes" << endl;
301 cout <<
"surface_domain_high_level::prepare_surface_classify_wedge after SCW->do_classify_double_sixes" << endl;
305 cout <<
"surface_domain_high_level::prepare_surface_classify_wedge before SCW->do_classify_surfaces" << endl;
309 cout <<
"surface_domain_high_level::prepare_surface_classify_wedge after SCW->do_classify_surfaces" << endl;
313 cout <<
"surface_domain_high_level::prepare_surface_classify_wedge done" << endl;
320 int f_v = (verbose_level >= 1);
323 cout <<
"surface_domain_high_level::do_study_surface" << endl;
330 cout <<
"before study->init" << endl;
331 study->
init(F, nb, verbose_level);
332 cout <<
"after study->init" << endl;
334 cout <<
"before study->study_intersection_points" << endl;
336 cout <<
"after study->study_intersection_points" << endl;
338 cout <<
"before study->study_line_orbits" << endl;
340 cout <<
"after study->study_line_orbits" << endl;
342 cout <<
"before study->study_group" << endl;
344 cout <<
"after study->study_group" << endl;
346 cout <<
"before study->study_orbits_on_lines" << endl;
348 cout <<
"after study->study_orbits_on_lines" << endl;
350 cout <<
"before study->study_find_eckardt_points" << endl;
352 cout <<
"after study->study_find_eckardt_points" << endl;
356 cout <<
"before study->study_surface_with_6_eckardt_points" << endl;
358 cout <<
"after study->study_surface_with_6_eckardt_points" << endl;
363 cout <<
"surface_domain_high_level::do_study_surface done" << endl;
373 int f_test_nb_Eckardt_points,
int nb_E,
376 int f_v = (verbose_level >= 1);
379 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_two_lines" << endl;
393 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_two_lines "
394 "before Surf->init" << endl;
396 Surf->
init(PA->
F, 0 );
398 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_two_lines "
399 "after Surf->init" << endl;
405 cout <<
"before Surf->init_large_polynomial_domains" << endl;
409 cout <<
"after Surf->init_large_polynomial_domains" << endl;
415 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_two_lines "
416 "before Surf_A->init" << endl;
420 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_two_lines "
421 "after Surf_A->init" << endl;
430 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_two_lines "
431 "before SAL->init" << endl;
436 f_test_nb_Eckardt_points, nb_E,
439 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_two_lines "
440 "after SAL->init" << endl;
445 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_two_lines "
446 "before SAL->report" << endl;
450 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_two_lines "
451 "after SAL->report" << endl;
459 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_two_lines done" << endl;
469 int f_test_nb_Eckardt_points,
int nb_E,
472 int f_v = (verbose_level >= 1);
475 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs" << endl;
489 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
490 "before Surf->init" << endl;
492 Surf->
init(PA->
F, 0 );
494 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
495 "after Surf->init" << endl;
501 cout <<
"before Surf->init_large_polynomial_domains" << endl;
505 cout <<
"after Surf->init_large_polynomial_domains" << endl;
511 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
512 "before Surf_A->init" << endl;
514 Surf_A->
init(Surf, PA,
TRUE , verbose_level - 1);
516 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
517 "after Surf_A->init" << endl;
523 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
524 "before Surf_A->Classify_trihedral_pairs->classify" << endl;
528 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
529 "after Surf_A->Classify_trihedral_pairs->classify" << endl;
533 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
534 "before Surf_arc->classify_surfaces_through_arcs_and_trihedral_pairs" << endl;
545 f_test_nb_Eckardt_points, nb_E,
549 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
550 "after Surf_arc->classify_surfaces_through_arcs_and_trihedral_pairs" << endl;
554 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
555 "before Surf_arc->report" << endl;
563 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
564 "please use -draw_option for a report" << endl;
568 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs "
569 "after Surf_arc->report" << endl;
575 cout <<
"surface_domain_high_level::do_classify_surfaces_through_arcs_and_trihedral_pairs done" << endl;
583 int f_filter_by_nb_Eckardt_points,
int nb_Eckardt_points,
586 int f_v = (verbose_level >= 1);
589 cout <<
"surface_domain_high_level::do_six_arcs" << endl;
600 cout <<
"surface_domain_high_level::do_six_arcs before Surf->init" << endl;
605 cout <<
"surface_domain_high_level::do_six_arcs after Surf->init" << endl;
620 Six_arc_descr->
Control = Control_six_arcs;
627 cout <<
"surface_domain_high_level::do_six_arcs "
628 "Setting up the group of the plane:" << endl;
634 cout <<
"surface_domain_high_level::do_six_arcs "
635 "before Six_arcs->init:" << endl;
653 cout <<
"surface_domain_high_level::do_six_arcs "
654 "We found " << nb_orbits <<
" isomorphism types "
667 cout <<
"surface_domain_high_level::do_six_arcs "
668 "testing the arcs" << endl;
680 for (h = 0; h < nb_orbits; h++) {
682 if (f_v && (h % 10000) == 0) {
683 cout <<
"surface_domain_high_level::do_six_arcs "
684 "testing arc " << h <<
" / " << nb_orbits << endl;
693 cout <<
"Arc6[0] != 0" << endl;
697 cout <<
"Arc6[1] != 1" << endl;
701 cout <<
"Arc6[2] != 2" << endl;
705 cout <<
"Arc6[3] != 3" << endl;
711 cout <<
"v1[2] != 1" << endl;
715 cout <<
"v2[2] != 1" << endl;
744 cout <<
"Summary of " << nb_orbits <<
" arcs:" << endl;
745 for (h = 0; h < nb_orbits; h++) {
751 cout << h <<
" : " << a <<
"," << b <<
"," << c <<
"," << d <<
" : " << Nb_E[h] <<
" : " << Ago[h] << endl;
759 cout <<
"nb_E distribution: ";
764 if (f_filter_by_nb_Eckardt_points) {
765 cout <<
"Nonconical six-arcs associated with surfaces with " << nb_Eckardt_points <<
" Eckardt points in PG(2," << F->
q <<
"):" << endl;
769 cout <<
"Nonconical six-arcs associated in PG(2," << F->
q <<
"):" << endl;
775 cout <<
"$$" << endl;
776 cout <<
"\\begin{array}{|r|c|r|}" << endl;
777 cout <<
"\\hline" << endl;
778 cout <<
"\\mbox{Orbit} & a,b,c,d & \\mbox{Ago} \\\\" << endl;
779 cout <<
"\\hline" << endl;
781 for (h = 0; h < nb_orbits; h++) {
789 if (f_filter_by_nb_Eckardt_points) {
790 if (nb_E != nb_Eckardt_points) {
794 cout << h <<
" & " << a <<
"," << b <<
"," << c <<
"," << d <<
" & ";
796 cout << Ago[h] <<
"\\\\" << endl;
800 cout <<
"\\hline" << endl;
801 cout <<
"\\end{array}" << endl;
802 cout <<
"$$" << endl;
803 cout <<
"There are " << cnt <<
" such arcs.\\\\" << endl;
817 cout <<
"surface_domain_high_level::do_six_arcs done" << endl;
826 std::string &fname_csv,
int defining_q,
830 int f_v = (verbose_level >= 1);
833 cout <<
"surface_domain_high_level::do_cubic_surface_properties" << endl;
857 cout <<
"surface_domain_high_level::do_cubic_surface_properties "
858 "after Surf->init" << endl;
864 cout <<
"surface_domain_high_level::do_cubic_surface_properties "
865 "before Surf_A->init" << endl;
869 cout <<
"surface_domain_high_level::do_cubic_surface_properties "
870 "after Surf_A->init" << endl;
883 if (n != 3 + column_offset) {
884 cout <<
"surface_domain_high_level::do_cubic_surface_properties "
885 "n != 3 + column_offset" << endl;
893 long int *Stab_order;
894 long int *Orbit_length;
897 long int *Nb_Eckardt_points;
898 long int *Nb_singular_pts;
899 long int *Nb_Double_points;
908 Nb_Eckardt_points =
NEW_lint(nb_orbits);
909 Nb_singular_pts =
NEW_lint(nb_orbits);
910 Nb_Double_points =
NEW_lint(nb_orbits);
913 for (orbit_idx = 0; orbit_idx < nb_orbits; orbit_idx++) {
915 cout <<
"surface_domain_high_level::do_cubic_surface_properties "
916 "orbit_idx = " << orbit_idx <<
" / " << nb_orbits << endl;
922 Orbit[orbit_idx] = M[orbit_idx * n + 0];
923 Rep[orbit_idx] = M[orbit_idx * n + column_offset + 0];
924 Stab_order[orbit_idx] = M[orbit_idx * n + column_offset + 1];
925 Orbit_length[orbit_idx] = M[orbit_idx * n + column_offset + 2];
927 cout <<
"Rep=" << Rep[orbit_idx] << endl;
939 sprintf(str,
"%d,0", coeff20[0]);
941 for (i = 1; i < 20; i++) {
942 sprintf(str,
",%d,%d", coeff20[i], i);
952 cout <<
"surface_domain_high_level::do_cubic_surface_properties "
953 "before SC->init" << endl;
955 SC->
init(Descr, Surf_A, 0 );
957 cout <<
"surface_domain_high_level::do_cubic_surface_properties "
958 "after SC->init" << endl;
969 cout <<
"surface_domain_high_level::do_cubic_surface_properties "
970 "We have created the following surface:" << endl;
971 cout <<
"$$" << endl;
974 cout <<
"$$" << endl;
976 cout <<
"$$" << endl;
979 cout <<
"$$" << endl;
989 cout <<
"surface_domain_high_level::do_cubic_surface_properties "
990 "before SC->compute_group" << endl;
994 cout <<
"surface_domain_high_level::do_cubic_surface_properties "
995 "after SC->compute_group" << endl;
1000 cout <<
"F->q = " << F->
q <<
" we are not computing the automorphism group" << endl;
1005 Nb_pts[orbit_idx] = SC->
SO->
nb_pts;
1028 fname_data.assign(fname_csv);
1032 sprintf(str,
"_F%d.csv", F->
q);
1033 fname_data.append(str);
1042 sprintf(str_A,
"Ago-%d", F->
q);
1043 sprintf(str_P,
"Nb_P-%d", F->
q);
1044 sprintf(str_L,
"Nb_L-%d", F->
q);
1045 sprintf(str_E,
"Nb_E-%d", F->
q);
1046 sprintf(str_S,
"Nb_S-%d", F->
q);
1047 sprintf(str_D,
"Nb_D-%d", F->
q);
1048 const char *column_label[] = {
1063 Vec[2] = Stab_order;
1064 Vec[3] = Orbit_length;
1068 Vec[7] = Nb_Eckardt_points;
1069 Vec[8] = Nb_singular_pts;
1070 Vec[9] = Nb_Double_points;
1073 fname_data, column_label);
1076 cout <<
"Written file " << fname_data <<
" of size "
1089 cout <<
"surface_domain_high_level::do_cubic_surface_properties done" << endl;
1114 std::string &fname_csv,
int defining_q,
1117 int f_v = (verbose_level >= 1);
1120 cout <<
"surface_domain_high_level::do_cubic_surface_properties_analyze" << endl;
1142 cout <<
"surface_domain_high_level::do_cubic_surface_properties_analyze "
1143 "after Surf->init" << endl;
1149 cout <<
"surface_domain_high_level::do_cubic_surface_properties_analyze "
1150 "before Surf_A->init" << endl;
1154 cout <<
"surface_domain_high_level::do_cubic_surface_properties_analyze "
1155 "after Surf_A->init" << endl;
1169 cout <<
"surface_domain_high_level::do_cubic_surface_properties_analyze n != 10" << endl;
1179 for (orbit_idx = 0; orbit_idx < nb_orbits; orbit_idx++) {
1181 Data[orbit_idx].
Orbit_idx = M[orbit_idx * n + 0];
1182 Data[orbit_idx].
Rep = M[orbit_idx * n + 1];
1183 Data[orbit_idx].
Stab_order = M[orbit_idx * n + 2];
1185 Data[orbit_idx].
Ago = M[orbit_idx * n + 4];
1186 Data[orbit_idx].
Nb_pts = M[orbit_idx * n + 5];
1187 Data[orbit_idx].
Nb_lines = M[orbit_idx * n + 6];
1194 long int *Nb_singular_pts;
1196 Nb_singular_pts =
NEW_lint(nb_orbits);
1197 for (orbit_idx = 0; orbit_idx < nb_orbits; orbit_idx++) {
1206 cout <<
"Classification by the number of singular points:" << endl;
1210 string fname_report;
1213 fname_report.assign(fname_csv);
1215 fname_report.append(
"_report.tex");
1220 ofstream ost(fname_report);
1225 cout <<
"surface_domain_high_level::do_cubic_surface_properties_analyze "
1226 "before get_A()->report" << endl;
1229 if (!Descr->f_draw_options) {
1230 cout <<
"please use -draw_options" << endl;
1238 Descr->draw_options,
1242 cout <<
"surface_domain_high_level::do_cubic_surface_properties_analyze "
1243 "after LG->A_linear->report" << endl;
1248 cout <<
"surface_domain_high_level::do_cubic_surface_properties_analyze "
1249 "before report" << endl;
1253 ost <<
"\\section{Surfaces over ${\\mathbb F}_{" << F->
q <<
"}$}" << endl;
1256 ost <<
"Number of surfaces: " << nb_orbits <<
"\\\\" << endl;
1257 ost <<
"Classification by the number of singular points:" << endl;
1258 ost <<
"$$" << endl;
1260 ost <<
"$$" << endl;
1263 ost <<
"\\section{Singular Surfaces}" << endl;
1267 ost <<
"\\section{Nonsingular Surfaces}" << endl;
1274 cout <<
"surface_domain_high_level::do_cubic_surface_properties_analyze "
1275 "after report" << endl;
1280 cout <<
"Written file " << fname_report <<
" of size "
1294 cout <<
"surface_domain_high_level::do_cubic_surface_properties_analyze done" << endl;
1301 int f_v = (verbose_level >= 1);
1304 cout <<
"surface_domain_high_level::report_singular_surfaces" << endl;
1308 int nb_S, h, orbit_idx;
1312 for (orbit_idx = 0; orbit_idx < nb_orbits; orbit_idx++) {
1313 if (Data[orbit_idx].Nb_singular_pts) {
1322 for (orbit_idx = 0; orbit_idx < nb_orbits; orbit_idx++) {
1323 if (Data[orbit_idx].Nb_singular_pts) {
1324 Data_S[h] = Data[orbit_idx];
1329 cout <<
"h != nb_S" << endl;
1333 long int *Selected_Nb_lines;
1336 Selected_Nb_lines =
NEW_lint(nb_S);
1339 for (h = 0; h < nb_S; h++) {
1340 Selected_Nb_lines[h] = Data_S[h].
Nb_lines;
1347 ost <<
"Number of surfaces: " << nb_S <<
"\\\\" << endl;
1348 ost <<
"Classification by the number of lines:" << endl;
1349 ost <<
"$$" << endl;
1351 ost <<
"$$" << endl;
1361 cout <<
"surface_domain_high_level::report_singular_surfaces done" << endl;
1369 int f_v = (verbose_level >= 1);
1372 cout <<
"surface_domain_high_level::report_non_singular_surfaces" << endl;
1376 int nb_NS, h, orbit_idx;
1380 for (orbit_idx = 0; orbit_idx < nb_orbits; orbit_idx++) {
1381 if (Data[orbit_idx].Nb_singular_pts == 0) {
1390 for (orbit_idx = 0; orbit_idx < nb_orbits; orbit_idx++) {
1391 if (Data[orbit_idx].Nb_singular_pts == 0) {
1392 Data_NS[h] = Data[orbit_idx];
1397 cout <<
"h != nb_NS" << endl;
1401 long int *Selected_Nb_lines;
1404 Selected_Nb_lines =
NEW_lint(nb_NS);
1407 for (h = 0; h < nb_NS; h++) {
1408 Selected_Nb_lines[h] = Data_NS[h].
Nb_lines;
1411 for (h = 0; h < nb_NS; h++) {
1412 cout << h <<
" : " << Data_NS[h].
orbit_idx <<
" : " << Data_NS[h].
Nb_lines << endl;
1419 ost <<
"Number of surfaces: " << nb_NS <<
"\\\\" << endl;
1420 ost <<
"Classification by the number of lines:" << endl;
1421 ost <<
"$$" << endl;
1423 ost <<
"$$" << endl;
1433 cout <<
"surface_domain_high_level::report_non_singular_surfaces done" << endl;
1441 int f_v = (verbose_level >= 1);
1444 cout <<
"surface_domain_high_level::report_surfaces_by_lines" << endl;
1447 int i, j, f, l, a, idx;
1449 for (i = T.
nb_types - 1; i >= 0; i--) {
1461 ost <<
"The number of surfaces with exactly " << a <<
" lines is " << nb_L <<
": \\\\" << endl;
1463 for (j = 0; j < l; j++) {
1465 Data_L[j] = Data[idx];
1470 for (j = 0; j < l; j++) {
1474 <<
" : P=" << Data_L[j].
Nb_pts
1478 <<
" : ago=" << Data_L[j].
Ago
1479 <<
" : Rep=" << Data_L[j].
Rep
1486 cout <<
"surface_domain_high_level::report_surfaces_by_lines done" << endl;
1518 int f_v = (verbose_level >= 1);
1521 cout <<
"surface_domain_high_level::do_create_surface_reports" << endl;
1522 cout <<
"surface_domain_high_level::do_create_surface_reports verbose_level=" << verbose_level << endl;
1540 for (i = 0; i < nb_q; i++) {
1551 cout <<
"surface_domain_high_level::do_create_surface_reports considering q=" << q <<
" with " << nb_total <<
" surfaces" << endl;
1555 for (ocn = 0; ocn < nb_total; ocn++) {
1563 cout <<
"surface_domain_high_level::do_create_surface_reports considering q=" << q <<
" ocn=" << ocn <<
" / " << nb_total << endl;
1569 $(ORBITER_PATH)
orbiter.out -v 3 \
1570 -define F -finite_field -q 4 -end \
1571 -define P -projective_space 3 F -end \
1573 -projective_space_activity \
1574 -define_surface S -q 4 -catalogue 0 -end \
1579 -report_with_group \
1580 -all_quartic_curves \
1585 sprintf(str,
"%d ", q);
1586 sprintf(str_ocn,
"%d ", ocn);
1589 cmd.append(
"/orbiter.out -v 3 ");
1590 cmd.append(
"-define F -finite_field -q ");
1592 cmd.append(
"-end ");
1593 cmd.append(
"-define P -projective_space 3 F -end ");
1594 cmd.append(
"-with P -do ");
1595 cmd.append(
"-projective_space_activity ");
1596 cmd.append(
"-define_surface S -q ");
1598 cmd.append(
"-catalogue ");
1599 cmd.append(str_ocn);
1600 cmd.append(
"-end ");
1601 cmd.append(
"-end ");
1602 cmd.append(
"-with S -do ");
1603 cmd.append(
"-cubic_surface_activity ");
1604 cmd.append(
"-report ");
1605 cmd.append(
"-report_with_group ");
1607 cmd.append(
"-end >log_surface");
1610 cout <<
"executing command: " << cmd << endl;
1612 system(cmd.c_str());
1614 std::string fname_report_tex;
1618 cmd.assign(
"pdflatex ");
1619 cmd.append(fname_report_tex);
1620 cmd.append(
" >log_pdflatex");
1623 cout <<
"executing command: " << cmd << endl;
1625 system(cmd.c_str());
1634 cout <<
"surface_domain_high_level::do_create_surface_reports done" << endl;
1640 int f_v = (verbose_level >= 1);
1643 cout <<
"surface_domain_high_level::do_create_surface_atlas" << endl;
1644 cout <<
"surface_domain_high_level::do_create_surface_atlas verbose_level=" << verbose_level << endl;
1664 for (q = 2; q <= q_max; q++) {
1673 cout <<
"considering q=" << q << endl;
1683 f_semilinear =
TRUE;
1686 f_semilinear =
FALSE;
1690 T[cur].Descr =
NEW_OBJECT(linear_group_description);
1692 T[cur].Descr->n = 4;
1693 T[cur].Descr->input_q = q;
1694 T[cur].Descr->f_projective =
TRUE;
1695 T[cur].Descr->f_general =
FALSE;
1696 T[cur].Descr->f_affine =
FALSE;
1697 T[cur].Descr->f_semilinear =
FALSE;
1700 T[cur].Descr->f_semilinear =
TRUE;
1702 T[cur].Descr->f_special =
FALSE;
1712 T[cur].
PA->
init(T[cur].F, 3, f_semilinear,
1729 cout <<
"surface_domain_high_level::do_create_surface_atlas before Surf->init" << endl;
1735 cout <<
"do_create_surface_atlas after Surf->init" << endl;
1741 cout <<
"surface_domain_high_level::do_create_surface_atlas before Surf_A->init_with_linear_group" << endl;
1745 cout <<
"surface_domain_high_level::do_create_surface_atlas after Surf_A->init_with_linear_group" << endl;
1749 if (T[cur].q == 2) {
1753 if (T[cur].q == 3) {
1757 if (T[cur].q == 5) {
1768 for (j = 0; j < T[cur].
nb_total; j++) {
1780 cout <<
"we found the following field orders:" << endl;
1788 for (c = 0; c < nb_fields; c++) {
1789 cout << c <<
" : " << T[c].
q << endl;
1795 string fname_report;
1797 fname_report.assign(
"surface");
1798 fname_report.append(
"_atlas.tex");
1801 ofstream ost(fname_report);
1804 const char *title =
"ATLAS of Cubic Surfaces";
1805 const char *author =
"Anton Betten and Fatma Karaoglu";
1821 int E[] = {0,1,2,3,4,5,6,9,10,13,18,45};
1822 int nb_possible_E =
sizeof(E) /
sizeof(
int);
1825 ost <<
"$$" << endl;
1826 ost <<
"\\begin{array}{|c|c|c|}" << endl;
1827 ost <<
"\\hline" << endl;
1828 ost <<
"\\ \\ q \\ \\ ";
1829 ost <<
"& \\ \\ \\mbox{Total} \\ \\ ";
1830 for (j = 0; j < nb_possible_E; j++) {
1831 ost <<
"&\\ \\ " << E[j] <<
"\\ \\ ";
1833 ost <<
"\\\\" << endl;
1834 ost <<
"\\hline" << endl;
1835 for (c = 0; c < nb_fields; c++) {
1847 ost << T[c].
q <<
" " << endl;
1849 ost <<
" & " << T[c].
nb_total <<
" " << endl;
1851 for (j = 0; j < nb_possible_E; j++) {
1861 string fname_report_tex;
1862 string fname_report_html;
1865 T + c, nb_e, Idx, nb,
1871 fname_report_html.assign(fname_report_tex);
1873 fname_report_html.append(
".html");
1877 ost <<
"%%tth: \\begin{html} <a href=\"" << fname_report_html <<
"\"> " << nb <<
" </a> \\end{html}" << endl;
1882 cmd.assign(
"~/bin/tth ");
1883 cmd.append(fname_report_tex);
1884 system(cmd.c_str());
1892 ost <<
"\\\\" << endl;
1893 ost <<
"\\hline" << endl;
1898 ost <<
"\\end{array}" << endl;
1900 ost <<
"$$" << endl;
1903 ost <<
"\\subsection*{The surface $" << SC->label_tex <<
"$}" << endl;
1906 if (SC->SO->SOP == NULL) {
1907 cout <<
"group_theoretic_activity::do_create_surface SC->SO->SOP == NULL" << endl;
1912 cout <<
"group_theoretic_activity::do_create_surface "
1913 "before SC->SO->SOP->print_everything" << endl;
1915 SC->SO->SOP->print_everything(ost, verbose_level);
1917 cout <<
"group_theoretic_activity::do_create_surface "
1918 "after SC->SO->SOP->print_everything" << endl;
1926 cout <<
"Written file " << fname_report <<
" of size "
1937 cout <<
"surface_domain_high_level::do_create_surface_atlas done" << endl;
1945 std::string &fname_report_tex,
1948 int f_v = (verbose_level >= 1);
1951 cout <<
"surface_domain_high_level::do_create_surface_atlas_q_e" << endl;
1952 cout <<
"surface_domain_high_level::do_create_surface_atlas q=" << T->
q <<
" " << nb_e << endl;
1968 sprintf(str,
"_q%d_e%d", T->
q, nb_e);
1969 fname_report_tex.assign(
"surface_atlas");
1970 fname_report_tex.append(str);
1971 fname_report_tex.append(
".tex");
1974 ofstream ost(fname_report_tex);
1979 title.assign(
"ATLAS of Cubic Surfaces");
1980 sprintf(str,
", q=%d, \\#E=%d", T->
q, nb_e);
1983 const char *author =
"Anton Betten and Fatma Karaoglu";
1991 title.c_str(), author,
2002 ost <<
"$$" << endl;
2003 ost <<
"\\begin{array}{|c|c|c|}" << endl;
2004 ost <<
"\\hline" << endl;
2005 ost <<
"\\ \\ i \\ \\ ";
2006 ost <<
"& \\ \\ \\mbox{Orbiter Number} \\ \\ ";
2007 ost <<
"& \\ \\ \\mbox{Report} \\ \\ ";
2008 ost <<
"\\\\" << endl;
2009 ost <<
"\\hline" << endl;
2010 for (i = 0; i < nb; i++) {
2013 ost << i <<
" " << endl;
2015 ost <<
" & " << Idx[i] <<
" " << endl;
2022 ost <<
" & " << endl;
2023 ost <<
"%%tth: \\begin{html} <a href=\"" << fname <<
"\"> report </a> \\end{html}" << endl;
2025 ost <<
"\\\\" << endl;
2026 ost <<
"\\hline" << endl;
2031 ost <<
"\\end{array}" << endl;
2033 ost <<
"$$" << endl;
2040 cout <<
"Written file " << fname_report_tex <<
" of size "
2041 << Fio.
file_size(fname_report_tex) << endl;
2050 int f_v = (verbose_level >= 1);
2053 cout <<
"surface_domain_high_level::do_create_dickson_atlas" << endl;
2054 cout <<
"surface_domain_high_level::do_create_dickson_atlas verbose_level=" << verbose_level << endl;
2064 string fname_report;
2066 fname_report.assign(
"dickson_surfaces");
2067 fname_report.append(
".tex");
2070 ofstream ost(fname_report);
2073 const char *title =
"ATLAS of Dickson Surfaces";
2074 const char *author =
"Fatma Karaoglu";
2091 int field_orders[] = {2,4,8,16,32,64};
2092 int nb_of_fields =
sizeof(field_orders) /
sizeof(
int);
2096 N = (141 + 24) / 25;
2097 for (I = 0; I < N; I++) {
2099 ost <<
"$$" << endl;
2100 ost <<
"\\begin{array}{|r|*{" << nb_of_fields <<
"}{r|}}" << endl;
2101 ost <<
"\\hline" << endl;
2102 ost <<
"\\ \\ D-i \\ \\ ";
2103 for (j = 0; j < nb_of_fields; j++) {
2104 ost <<
"&\\ \\ " << field_orders[j] <<
"\\ \\ ";
2106 ost <<
"\\\\" << endl;
2107 ost <<
"\\hline" << endl;
2108 for (i = 0; i < 25; i++) {
2116 cout <<
"creating line " << c << endl;
2118 ost << c <<
" " << endl;
2121 for (j = 0; j < nb_of_fields; j++) {
2126 string fname_surface_report;
2132 sprintf(str,
"Orb%d_q%d", c, field_orders[j]);
2133 fname_base.assign(str);
2134 fname_tex.assign(fname_base);
2135 fname_tex.append(
".tex");
2136 fname_pdf.assign(fname_base);
2137 fname_pdf.append(
".pdf");
2138 fname_surface_report.assign(fname_base);
2139 fname_surface_report.append(
".pdf");
2142 ost <<
" & " << endl;
2143 ost <<
"%%tth: \\begin{html} <a href=\"" << fname_surface_report <<
"\"> " << fname_surface_report <<
" </a> \\end{html}" << endl;
2146 if (Fio.
file_size(fname_tex.c_str()) > 0) {
2148 if (Fio.
file_size(fname_pdf.c_str()) <= 0) {
2151 cmd.assign(
"pdflatex ");
2152 cmd.append(fname_tex);
2154 system(cmd.c_str());
2159 ost <<
"\\\\" << endl;
2160 ost <<
"\\hline" << endl;
2165 ost <<
"\\end{array}" << endl;
2167 ost <<
"$$" << endl;
2174 cout <<
"Written file " << fname_report <<
" of size "
2182 cout <<
"surface_domain_high_level::do_create_dickson_atlas done" << endl;
2193 sprintf(str,
"_q%d_iso%d_with_group", q, ocn);
2194 fname.assign(
"surface_catalogue");
2196 fname.append(
".tex");
2203 sprintf(str,
"_q%d_iso%d_with_group", q, ocn);
2204 fname.assign(
"surface_catalogue");
2206 fname.append(
".pdf");
information about the Eckardt points of a surface derived from a six-arc
cubic surfaces in PG(3,q) with 27 lines
geometry::projective_space * P2
void init_large_polynomial_domains(int verbose_level)
void print_equation_tex(std::ostream &ost, int *coeffs)
void init(field_theory::finite_field *F, int verbose_level)
surface_object_properties * SOP
a collection of functions related to sorted vectors
a statistical analysis of data consisting of single integers
void init(int *data, int data_length, int f_second, int verbose_level)
void print_file_tex_we_are_in_math_mode(std::ostream &ost, int f_backwards)
void print(int f_backwards)
void init_lint(long int *data, int data_length, int f_second, int verbose_level)
void print_naked_tex(std::ostream &ost, int f_backwards)
void get_class_by_value(int *&Pts, int &nb_pts, int value, int verbose_level)
int f_print_as_exponentials
void PG_element_normalize(int *v, int stride, int len)
void finite_field_init(int q, int f_without_tables, int verbose_level)
void PG_element_unrank_modified_lint(int *v, int stride, int len, long int a)
various functions related to geometries
algebraic_geometry::eckardt_point_info * compute_eckardt_point_info(projective_space *P2, long int *arc6, int verbose_level)
field_theory::finite_field * F
void unrank_point(int *v, long int rk)
provides access to pre-computed combinatorial data in encoded form
int cubic_surface_nb_Eckardt_points(int q, int i)
int cubic_surface_nb_reps(int q)
basic number theoretic functions
int is_prime_power(int q)
a collection of functions related to file io
long int file_size(std::string &fname)
void lint_matrix_read_csv(std::string &fname, long int *&M, int &m, int &n, int verbose_level)
void lint_vec_array_write_csv(int nb_vecs, long int **Vec, int len, std::string &fname, const char **column_label)
interface to create latex output files
void head_easy(std::ostream &ost)
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 foot(std::ostream &ost)
graphics::layered_graph_draw_options * draw_options
a class to represent arbitrary precision integers
DISCRETA class related to class domain.
void report(std::ostream &ost, int f_sims, groups::sims *S, int f_strong_gens, groups::strong_generators *SG, graphics::layered_graph_draw_options *LG_Draw_options, int verbose_level)
long int group_order_as_lint()
to control the behavior of the poset classification algorithm
graphics::layered_graph_draw_options * draw_options
int nb_orbits_at_level(int level)
void get_set_by_level(int level, int node, long int *set)
void get_stabilizer_order(int level, int orbit_at_level, ring_theory::longinteger_object &go)
void classify(poset_classification::poset_classification_control *Control1, poset_classification::poset_classification_control *Control2, int verbose_level)
void do_sweep_4_15_lines(projective_geometry::projective_space_with_action *PA, surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void make_fname_surface_report_tex(std::string &fname, int q, int ocn)
void do_sweep_F_beta_9_lines(projective_geometry::projective_space_with_action *PA, surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void classify_surfaces_with_double_sixes(projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control, cubic_surfaces_and_double_sixes::surface_classify_wedge *&SCW, int verbose_level)
void do_classify_surfaces_through_arcs_and_two_lines(projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control_six_arcs, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
void report_surfaces_by_lines(std::ostream &ost, struct cubic_surface_data_set *Data, data_structures::tally &T, int verbose_level)
surface_domain_high_level()
void do_cubic_surface_properties_analyze(projective_geometry::projective_space_with_action *PA, std::string &fname_csv, int defining_q, int verbose_level)
void do_create_surface_atlas_q_e(int q_max, struct table_surfaces_field_order *T, int nb_e, int *Idx, int nb, std::string &fname_report_tex, int verbose_level)
~surface_domain_high_level()
void report_non_singular_surfaces(std::ostream &ost, struct cubic_surface_data_set *Data, int nb_orbits, int verbose_level)
void do_create_surface_atlas(int q_max, int verbose_level)
void do_six_arcs(projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control_six_arcs, int f_filter_by_nb_Eckardt_points, int nb_Eckardt_points, int verbose_level)
void do_create_dickson_atlas(int verbose_level)
void prepare_surface_classify_wedge(field_theory::finite_field *F, projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control, algebraic_geometry::surface_domain *&Surf, surface_with_action *&Surf_A, cubic_surfaces_and_double_sixes::surface_classify_wedge *&SCW, int verbose_level)
void do_cubic_surface_properties(projective_geometry::projective_space_with_action *PA, std::string &fname_csv, int defining_q, int column_offset, int verbose_level)
void do_sweep_4_27(projective_geometry::projective_space_with_action *PA, surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void do_classify_surfaces_through_arcs_and_trihedral_pairs(projective_geometry::projective_space_with_action *PA, poset_classification::poset_classification_control *Control1, poset_classification::poset_classification_control *Control2, poset_classification::poset_classification_control *Control_six_arcs, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
void do_create_surface_reports(std::string &field_orders_text, int verbose_level)
void report_singular_surfaces(std::ostream &ost, struct cubic_surface_data_set *Data, int nb_orbits, int verbose_level)
void do_study_surface(field_theory::finite_field *F, int nb, int verbose_level)
void do_sweep_6_9_lines(projective_geometry::projective_space_with_action *PA, surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void make_fname_surface_report_pdf(std::string &fname, int q, int ocn)
to describe a cubic surface from the command line
std::string coefficients_text
classification of cubic surfaces using nonconial six-arcs as substructures
void classify_surfaces_through_arcs_and_trihedral_pairs(poset_classification::poset_classification_control *Control_six_arcs, cubic_surfaces_in_general::surface_with_action *Surf_A, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
void report(graphics::layered_graph_draw_options *Opt, int verbose_level)
classification of cubic surfaces using double sixes as substructures
void do_classify_surfaces(int verbose_level)
void init(cubic_surfaces_in_general::surface_with_action *Surf_A, poset_classification::poset_classification_control *Control, int verbose_level)
void do_classify_double_sixes(int verbose_level)
void create_report(int f_with_stabilizers, graphics::layered_graph_draw_options *draw_options, poset_classification::poset_classification_report_options *Opt, int verbose_level)
void generate_source_code(int verbose_level)
an activity associated with a cubic surface
to study properties of cubic surfaces
void study_find_eckardt_points(int verbose_level)
void study_orbits_on_lines(int verbose_level)
void init(field_theory::finite_field *F, int nb, int verbose_level)
void study_group(int verbose_level)
void study_intersection_points(int verbose_level)
void study_surface_with_6_eckardt_points(int verbose_level)
void study_line_orbits(int verbose_level)
classification of cubic surfaces using lifted 6-arcs
void init(cubic_surfaces_in_general::surface_with_action *Surf_A, poset_classification::poset_classification_control *Control_six_arcs, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
void report(graphics::layered_graph_draw_options *draw_options, int verbose_level)
classification of six-arcs not on a conic in PG(2,q)
void init(apps_geometry::arc_generator_description *Descr, projective_geometry::projective_space_with_action *PA, int f_test_nb_Eckardt_points, int nb_E, int verbose_level)
apps_geometry::arc_generator * Gen
cubic surfaces in projective space with automorphism group
void sweep_4_27(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void sweep_6_9_lines(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
void sweep_F_beta_9_lines(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
cubic_surfaces_and_arcs::classify_trihedral_pairs * Classify_trihedral_pairs
void init(algebraic_geometry::surface_domain *Surf, projective_geometry::projective_space_with_action *PA, int f_recoordinatize, int verbose_level)
algebraic_geometry::surface_domain * Surf
void sweep_4_15_lines(surface_create_description *Surface_Descr, std::string &sweep_fname, int verbose_level)
to create a cubic surface from a description using class surface_create_description
void compute_group(projective_geometry::projective_space_with_action *PA, int verbose_level)
algebraic_geometry::surface_domain * Surf
field_theory::finite_field * F
algebraic_geometry::surface_object * SO
groups::strong_generators * Sg
void init(surface_create_description *Descr, surface_with_action *Surf_A, int verbose_level)
description of a classification problem of arcs in a geometry
poset_classification::poset_classification_control * Control
projective_geometry::projective_space_with_action * PA
poset_classification::poset_classification * gen
projective space PG(n,q) with automorphism group PGGL(n+1,q)
geometry::projective_space * P
void init(field_theory::finite_field *F, int n, int f_semilinear, int f_init_incidence_structure, int verbose_level)
field_theory::finite_field * F
void setup_surface_with_action(applications_in_algebraic_geometry::cubic_surfaces_in_general::surface_with_action *&Surf_A, int verbose_level)
#define Int_vec_scan(A, B, C)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects
data on a single cubic surface used to prepare the ATLAS of cubic surfaces
data_structures::tally * T_nb_E
algebraic_geometry::surface_domain * Surf
surface_with_action * Surf_A
projective_geometry::projective_space_with_action * PA
field_theory::finite_field * F
numerical data for one cubic surface to be used in reports
long int Nb_Eckardt_points
long int Nb_Double_points