Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Symmetry/mainsmvc.adb, Revision 1.1.1.1
1.1 maekawa 1: with text_io,integer_io; use text_io,integer_io;
2: with Communications_with_User; use Communications_with_User;
3: with Standard_Floating_Numbers; use Standard_Floating_Numbers;
4: with Standard_Complex_Poly_Systems; use Standard_Complex_Poly_Systems;
5: with Standard_Complex_Poly_Systems_io; use Standard_Complex_Poly_Systems_io;
6: with Standard_Complex_Solutions; use Standard_Complex_Solutions;
7: with Standard_Root_Refiners; use Standard_Root_Refiners;
8: with Drivers_for_Implicit_Lifting; use Drivers_for_Implicit_Lifting;
9: with Drivers_for_Static_Lifting; use Drivers_for_Static_Lifting;
10: with Drivers_for_Dynamic_Lifting; use Drivers_for_Dynamic_Lifting;
11: with Drivers_for_Symmetric_Lifting; use Drivers_for_Symmetric_Lifting;
12:
13: procedure mainsmvc ( infilename,outfilename : in string ) is
14:
15: outft : file_type;
16: lp : Link_to_Poly_Sys;
17: ans : character;
18:
19: procedure Read_System ( filename : in string ) is
20:
21: file : file_type;
22: n : natural;
23:
24: begin
25: if filename /= ""
26: then Open(file,in_file,filename);
27: get(file,n);
28: lp := new Poly_Sys(1..n);
29: get(file,n,lp.all);
30: Close(file);
31: end if;
32: exception
33: when others => put_line("Something is wrong with argument file...");
34: lp := null; return;
35: end Read_System;
36:
37: function Lifting_Strategy return natural is
38:
39: choice : string(1..2) := " ";
40:
41: begin
42: loop
43: new_line;
44: put_line("MENU with available Lifting Strategies :");
45: put_line(" 1. Implicit lifting : based on recursive formula.");
46: put_line(" 2. Static lifting : lift points and prune lower hull.");
47: put_line(" 3. Dynamic lifting : incrementally add the points.");
48: put_line
49: (" 4. Symmetric lifting : points in same orbit get same lifting.");
50: put("Type 1, 2, 3, or 4 to select lifting,"
51: & " eventually preceded by i for info : ");
52: Ask_Alternative(choice,"1234",'i');
53: exit when choice(1) /= 'i';
54: new_line;
55: case choice(2) is
56: when '1' => Implicit_Lifting_Info; new_line;
57: put("Do you want to apply implicit lifting ? (y/n) ");
58: Ask_Yes_or_No(ans);
59: if ans = 'y'
60: then choice(1) := '1';
61: end if;
62: when '2' => Static_Lifting_Info; new_line;
63: put("Do you want to apply static lifting ? (y/n) ");
64: Ask_Yes_or_No(ans);
65: if ans = 'y'
66: then choice(1) := '2';
67: end if;
68: when '3' => Dynamic_Lifting_Info; new_line;
69: put("Do you want to apply dynamic lifting ? (y/n) ");
70: Ask_Yes_or_No(ans);
71: if ans = 'y'
72: then choice(1) := '3';
73: end if;
74: when '4' => Symmetric_Lifting_Info; new_line;
75: put("Do you want to apply implicit lifting ? (y/n) ");
76: Ask_Yes_or_No(ans);
77: if ans = 'y'
78: then choice(1) := '4';
79: end if;
80: when others => put_line("No information available.");
81: end case;
82: exit when choice(1) /= 'i';
83: end loop;
84: case choice(1) is
85: when '1' => return 1;
86: when '2' => return 2;
87: when '3' => return 3;
88: when others => return 4;
89: end case;
90: end Lifting_Strategy;
91:
92: begin
93: Read_System(infilename);
94: if lp = null
95: then new_line; get(lp);
96: end if;
97: declare
98: q : Poly_Sys(lp'range);
99: qsols : Solution_List;
100: mv : natural;
101: strategy : natural;
102: begin
103: Create_Output_File(outft,outfilename);
104: put(outft,lp'last,lp.all);
105: strategy := Lifting_Strategy;
106: new_line(outft);
107: case strategy is
108: when 1 => put_line(outft,"IMPLICIT LIFTING");
109: Driver_for_Mixture_Bezout_BKK(outft,lp.all,true,q,qsols,mv);
110: when 2 => put_line(outft,"STATIC LIFTING");
111: Driver_for_Mixed_Volume_Computation
112: (outft,lp.all,true,q,qsols,mv);
113: when 3 => put_line(outft,"DYNAMIC LIFTING");
114: Driver_for_Dynamic_Mixed_Volume_Computation
115: (outft,lp.all,true,q,qsols,mv);
116: when others => put_line(outft,"SYMMETRIC LIFTING");
117: Driver_for_Symmetric_Mixed_Volume_Computation
118: (outft,lp.all,true,q,qsols,mv);
119: end case;
120: if Length_Of(qsols) > 0
121: then declare
122: epsxa,epsfa : constant double_float := 10.0**(-8);
123: tolsing : constant double_float := 10.0**(-8);
124: nb : natural := 0;
125: begin
126: new_line(outft);
127: Reporting_Root_Refiner
128: (outft,q,qsols,epsxa,epsfa,tolsing,nb,5,false);
129: end;
130: end if;
131: Close(outft);
132: end;
133: end mainsmvc;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>