Annotation of OpenXM_contrib/PHC/Ada/Homotopy/multprec_complex_solutions_io.adb, Revision 1.1.1.1
1.1 maekawa 1: with integer_io; use integer_io;
2: with Communications_with_User; use Communications_with_User;
3: with Standard_Complex_Numbers;
4: with Standard_Complex_Numbers_io; use Standard_Complex_Numbers_io;
5: with Multprec_Floating_Numbers; use Multprec_Floating_Numbers;
6: with Multprec_Floating_Numbers_io; use Multprec_Floating_Numbers_io;
7: with Multprec_Complex_Numbers; use Multprec_Complex_Numbers;
8: with Multprec_Complex_Vectors; use Multprec_Complex_Vectors;
9: with Multprec_Complex_Numbers_io; use Multprec_Complex_Numbers_io;
10: with Multprec_Complex_Vectors_io; use Multprec_Complex_Vectors_io;
11: with Symbol_Table; use Symbol_Table;
12:
13: package body Multprec_Complex_Solutions_io is
14:
15: -- INPUT OF SYMBOL :
16:
17: procedure skip_symbol ( file : in file_type ) is
18:
19: -- DESCRIPTION :
20: -- Skips all symbols until a `:' is encountered.
21:
22: c : character;
23:
24: begin
25: loop
26: get(file,c);
27: exit when (c = ':');
28: end loop;
29: end skip_symbol;
30:
31: function get_symbol ( file : in file_type ) return natural is
32:
33: -- DESCRIPTION :
34: -- Reads a symbol from standard input and returns its number.
35:
36: sb : Symbol;
37: c : character;
38:
39: begin
40: for i in sb'range loop
41: sb(i) := ' ';
42: end loop;
43: loop -- skip the spaces
44: get(file,c);
45: exit when c /= ' ';
46: end loop;
47: sb(1) := c;
48: for i in 2..3 loop
49: get(file,c);
50: exit when c = ' ';
51: sb(i) := c;
52: end loop;
53: return Symbol_Table.get(sb);
54: end get_symbol;
55:
56: -- OUTPUT OF A SYMBOL :
57:
58: procedure put_symbol ( file : in file_type; i : in natural ) is
59:
60: -- DESCRIPTION :
61: -- Given the number of the symbol,
62: -- the corresponding symbol will be written.
63:
64: sb : Symbol := Get(i);
65:
66: begin
67: for k in sb'range loop
68: exit when sb(k) = ' ';
69: put(file,sb(k));
70: end loop;
71: end put_symbol;
72:
73: -- INPUT OF A SOLUTION VECTOR :
74:
75: procedure get_vector ( s : in out Solution ) is
76: begin
77: get_vector(Standard_Input,s);
78: end get_vector;
79:
80: procedure get_vector ( file : in file_type; s : in out Solution ) is
81:
82: ind : natural;
83:
84: begin
85: if Symbol_Table.Number < s.n
86: then for i in s.v'range loop
87: skip_symbol(file); get(file,s.v(i));
88: end loop;
89: else for i in s.v'range loop
90: ind := get_symbol(file); skip_symbol(file);
91: get(file,s.v(ind));
92: end loop;
93: end if;
94: end get_vector;
95:
96: -- INPUT OF A SOLUTION :
97:
98: procedure get ( s : out Solution ) is
99: begin
100: get(Standard_Input,s);
101: end get;
102:
103: procedure get ( n : in natural; ls : out Link_to_Solution ) is
104: begin
105: get(Standard_Input,n,ls);
106: end get;
107:
108: procedure get ( file : in file_type; s : out Solution ) is
109:
110: c : character;
111:
112: begin
113: get(file,c); get(file,c); get(file,c); get(file,c);
114: get(file,s.t); skip_line(file);
115: get(file,c); get(file,c); get(file,c); get(file,c); get(file,s.m);
116: if not End_of_Line(file)
117: then get(file,c); Skip_line(file); -- skip information on this line
118: end if;
119: get(file,c); skip_line(file);
120: get_vector(file,s);
121: end get;
122:
123: procedure get ( file : in file_type;
124: n : in natural; ls : out Link_to_Solution ) is
125:
126: s : Solution(n);
127: c : character;
128:
129: begin
130: get(file,c); get(file,c); get(file,c); get(file,c);
131: get(file,s.t); skip_line(file);
132: get(file,c); get(file,c); get(file,c); get(file,c); get(file,s.m);
133: if not End_of_Line(file)
134: then get(file,c); Skip_line(file); -- skip information on this line
135: end if;
136: get(file,c); skip_line(file);
137: get_vector(file,s);
138: ls := new Solution'(s);
139: end get;
140:
141: -- OUTPUT OF A SOLUTION VECTOR :
142:
143: procedure put_vector ( s : in Solution ) is
144: begin
145: put_vector(Standard_Output,s);
146: end put_vector;
147:
148: procedure put_vector ( file : in file_type; s : in Solution ) is
149: begin
150: if Symbol_Table.Number < s.n
151: then for i in s.v'range loop
152: put(file," x"); put(file,i,1); put(file," : ");
153: put(file,s.v(i)); new_line(file);
154: end loop;
155: else for i in s.v'range loop
156: put(file,' '); put_symbol(file,i); put(file," : ");
157: put(file,s.v(i)); new_line(file);
158: end loop;
159: end if;
160: end put_vector;
161:
162: -- OUTPUT OF A SOLUTION :
163:
164: procedure put ( s : in Solution ) is
165: begin
166: put(Standard_Output,s);
167: end put;
168:
169: procedure put ( file : in file_type; s : in Solution ) is
170: begin
171: put(file,"t : "); put(file,s.t); new_line(file);
172: put(file,"m : "); put(file,s.m,1); new_line(file);
173: put_line(file,"the solution for t :");
174: put_vector(file,s);
175: put(file,"==");
176: put(file," err : "); put(file,s.err,2,3,3); put(file," =");
177: put(file," rco : "); put(file,s.rco,2,3,3); put(file," =");
178: put(file," res : "); put(file,s.res,2,3,3); put(file," =");
179: end put;
180:
181: -- INPUT OF A LIST OF SOLUTIONS :
182:
183: procedure get ( len,n : in natural;
184: sols,sols_last : in out Solution_List ) is
185: begin
186: get(Standard_Input,sols,sols_last);
187: end get;
188:
189: procedure get ( len,n : in natural; sols : in out Solution_List ) is
190: begin
191: get(Standard_Input,len,n,sols);
192: end get;
193:
194: procedure get ( sols,sols_last : in out Solution_List ) is
195: begin
196: get(Standard_Input,sols,sols_last);
197: end get;
198:
199: procedure get ( sols : in out Solution_List ) is
200: begin
201: get(Standard_Input,sols);
202: end get;
203:
204: procedure get ( file : in file_type; len,n : in natural;
205: sols,sols_last : in out Solution_List ) is
206:
207: c : character;
208:
209: begin
210: for i in 1..len loop
211: get(file,c); skip_line(file); -- skip opening bar
212: get(file,c); skip_line(file); -- skip line with solution number
213: declare
214: s : Solution(n);
215: begin
216: get(file,s);
217: Append(sols,sols_last,s);
218: end;
219: end loop;
220: get(file,c); skip_line(file); -- skip closing bar
221: end get;
222:
223: procedure get ( file : in file_type; len,n : in natural;
224: sols : in out Solution_List ) is
225:
226: sols_last : Solution_List;
227:
228: begin
229: get(file,len,n,sols,sols_last);
230: end get;
231:
232: procedure get ( file : in file_type;
233: sols,sols_last : in out Solution_List ) is
234:
235: len,n : natural;
236:
237: begin
238: get(file,len); get(file,n);
239: get(file,len,n,sols,sols_last);
240: end get;
241:
242: procedure get ( file : in file_type; sols : in out Solution_List ) is
243:
244: len,n : natural;
245:
246: begin
247: get(file,len); get(file,n);
248: get(file,len,n,sols);
249: end get;
250:
251: -- OUTPUT OF A LIST OF SOLUTIONS :
252:
253: procedure put_bar ( file : in file_type ) is
254: begin
255: put_line(file,
256: "===========================================================");
257: end put_bar;
258:
259: procedure put ( sols : in Solution_List ) is
260: begin
261: put(Standard_Output,sols);
262: end put;
263:
264: procedure put ( len,n : in natural; sols : in Solution_List ) is
265: begin
266: put(Standard_Output,len,n,sols);
267: end put;
268:
269: procedure put ( file : in file_type; sols : in Solution_List ) is
270: begin
271: if not Is_Null(sols)
272: then declare
273: count : natural := 1;
274: temp : Solution_List := sols;
275: begin
276: put_bar(file);
277: while not Is_Null(temp) loop
278: put(file,"solution "); put(file,count,1);
279: put(file," :"); new_line(file);
280: put(file,Head_Of(temp).all);
281: put_line(file,"="); -- instead of : put_bar(file);
282: temp := Tail_Of(temp);
283: count := count + 1;
284: end loop;
285: end;
286: end if;
287: end put;
288:
289: procedure put ( file : in file_type; len,n : in natural;
290: sols : in Solution_List ) is
291: begin
292: put(file,len,1); put(file," "); put(file,n,1); new_line(file);
293: put(file,sols);
294: end put;
295:
296: procedure Display_Format is
297:
298: s : array(1..24) of string(1..65);
299:
300: begin
301: s( 1):=" A solution list of a complex polynomial system is denoted by";
302: s( 2):="the number of solutions and the dimension, followed by a list of";
303: s( 3):="solutions. The solutions are separated by a banner line,";
304: s( 4):="followed by their position in the list. ";
305: s( 5):=" A solution consists of the current value of the continuation";
306: s( 6):="parameter t, its multiplicity (or winding number) m, and the";
307: s( 7):="solution vector. ";
308: s( 8):=" A solution vector contains as many lines as the dimension. The";
309: s( 9):="i-th line starts with the symbol that represents the i-th";
310: s(10):="unknown, followed by the colon `:' and two floating-point numbers";
311: s(11):="representing respectively the real and imaginary part of the";
312: s(12):="solution component. ";
313: s(13):=" As example we list the solution list of the regular solution";
314: s(14):="(1,i) of a 2-dimensional system in the unknowns x and y at t=1. ";
315: s(15):=" ";
316: s(16):="1 2 ";
317: s(17):="=================================================================";
318: s(18):="solution 1 : ";
319: s(19):="t : 1.00000000000000E+00 0.00000000000000E+00 ";
320: s(20):="m : 1 ";
321: s(21):="the solution for t : ";
322: s(22):=" x : 1.00000000000000E+00 0.00000000000000E+00 ";
323: s(23):=" y : 0.00000000000000E+00 1.00000000000000E+00 ";
324: s(24):="=================================================================";
325: for i in s'range loop
326: put_line(s(i));
327: end loop;
328: end Display_Format;
329:
330: procedure Read ( sols : in out Solution_List ) is
331:
332: file : file_type;
333:
334: begin
335: put_line("Reading the name of the file for the solutions.");
336: Read_Name_and_Open_File(file);
337: get(file,sols);
338: Close(file);
339: exception
340: when others => Close(file); Clear(sols);
341: put_line("INCORRECT FORMAT OF SOLUTION LIST");
342: Display_Format; new_line;
343: Read(sols);
344: end Read;
345:
346: end Multprec_Complex_Solutions_io;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>