Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Symmetry/drivers_for_symmetry_group_io.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 Numbers_io; use Numbers_io;
4: with Symbol_Table,Symbol_Table_io; use Symbol_Table;
5: with Symbolic_Symmetry_Group_io;
6:
7: package body Drivers_for_Symmetry_Group_io is
8:
9: procedure Read_Permutation_Group
10: ( n : in natural; g,v : in out List_of_Permutations;
11: allperms : out boolean ) is
12:
13: ans : character;
14: nb : natural;
15:
16: begin
17: new_line;
18: put("Is the group the full permutation group ? (y/n) ");
19: Ask_Yes_or_No(ans); allperms := (ans = 'y');
20: if ans = 'y'
21: then
22: g := SymGrp(n);
23: else
24: put("The neutral element of the group is represented as ");
25: for i in 1..n loop
26: declare
27: sb : Symbol;
28: begin
29: sb := (sb'range => ' ');
30: sb := Symbol_Table.Get(i);
31: Symbol_Table_io.put(sb);
32: put(" ");
33: end;
34: end loop;
35: new_line;
36: put("Give the number of generating elements in the group : ");
37: Read_Natural(nb);
38: put("Give "); put(nb,1);
39: put_line(" vector representations of the generating elements :");
40: Symbolic_Symmetry_Group_io.Get(g,n,nb);
41: end if;
42: put("Do you want the generation of the group ? (y/n) ");
43: Ask_Yes_or_No(ans);
44: if ans = 'y'
45: then v := Generate(g);
46: else v := g;
47: end if; -- v = either full group or group supplied by user
48: end Read_Permutation_Group;
49:
50: procedure Read_Symmetry_Group
51: ( n : in natural; g,v : in out List_of_Permutations;
52: allperms,signsym,allsigns : out boolean ) is
53:
54: ans : character;
55: nb : natural;
56: pv,fv,fg : List_of_Permutations;
57:
58: begin
59: Read_Permutation_Group(n,pv,fv,allperms);
60: put("Is there any sign symmetry to take into account ? (y/n) ");
61: Ask_Yes_or_No(ans);
62: signsym := (ans = 'y');
63: if ans = 'y'
64: then
65: put("Contains the group all sign permutations ? (y/n) ");
66: Ask_Yes_or_No(ans);
67: if ans = 'y'
68: then
69: allsigns := true;
70: else
71: allsigns := false;
72: signsym := false; -- fv will contain these permutations
73: allperms := false; -- fv will be used for the generating solutions
74: put("The sign inversion of all elements is represented as ");
75: for i in 1..n loop
76: put('-');
77: declare
78: sb : Symbol;
79: begin
80: sb := (sb'range => ' ');
81: sb := Symbol_Table.get(i);
82: Symbol_Table_io.put(sb); put(" ");
83: end;
84: end loop;
85: new_line;
86: put("Give the number of generating elements in the group : ");
87: Read_Natural(nb);
88: put("Give "); put(nb,1);
89: put_line(" vector representations of the generating elements :");
90: Symbolic_Symmetry_Group_io.Get(fg,n,nb);
91: end if;
92: put("Do you want the generation of the group ? (y/n) ");
93: Ask_Yes_or_No(ans);
94: if ans = 'y'
95: then fv := Generate(Union(fg,pv));
96: else fv := Union(fg,pv);
97: end if;
98: else
99: allsigns := false;
100: end if;
101: g := Union(fg,pv); v := fv;
102: end Read_Symmetry_Group;
103:
104: end Drivers_for_Symmetry_Group_io;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>