[BACK]Return to standard_complex_solutions_io.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Homotopy

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>