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

Annotation of OpenXM_contrib/PHC/Ada/Main/mainphc.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 Timing_Package;                     use Timing_Package;
                      4: with Standard_Complex_Numbers;           use Standard_Complex_Numbers;
                      5: with Standard_Complex_Vectors;           use Standard_Complex_Vectors;
                      6: with Standard_Complex_Polynomials;       use Standard_Complex_Polynomials;
                      7: with Standard_Complex_Poly_Systems;      use Standard_Complex_Poly_Systems;
                      8: with Standard_Complex_Poly_Systems_io;   use Standard_Complex_Poly_Systems_io;
                      9: with Standard_Complex_Solutions;         use Standard_Complex_Solutions;
                     10: with Homotopy;
                     11: with Drivers_for_Scaling;                use Drivers_for_Scaling;
                     12: with Drivers_for_Reduction;              use Drivers_for_Reduction;
                     13: with Drivers_for_Poly_Continuation;      use Drivers_for_Poly_Continuation;
                     14: with Driver_for_Root_Counts;
                     15: with Drivers_for_Homotopy_Creation;      use Drivers_for_Homotopy_Creation;
                     16: with Driver_for_Root_Refining;
                     17: with Bye_Bye_Message;
                     18:
                     19: procedure mainphc ( infilename,outfilename : in string ) is
                     20:
                     21:   outpt : file_type;
                     22:   lp : Link_to_Poly_Sys := null;
                     23:   timer : timing_widget;
                     24:
                     25:   procedure Display_Options is
                     26:
                     27:   -- DESCRIPTION :
                     28:   --   Displays an overview of all options on screen.
                     29:
                     30:     o : array(1..8) of string(1..65);
                     31:
                     32:   begin
                     33:     put_line("Running in full mode.  Note also the following options:");
                     34:     o(1) := "  phc -s : Equation and variable Scaling on system and solutions ";
                     35:     o(2) := "  phc -d : Linear and nonlinear Reduction w.r.t. the total degree";
                     36:     o(3) := "  phc -r : Root counting and Construction of start systems       ";
                     37:     o(4) := "  phc -m : Mixed-Volume Computation by four lifting strategies   ";
                     38:     o(5) := "  phc -p : Polynomial Continuation by a homotopy in one parameter";
                     39:     o(6) := "  phc -v : Validation, refinement and purification of solutions  ";
                     40:     o(7) := "  phc -e : SAGBI/Pieri homotopies to intersect linear subspaces  ";
                     41:     o(8) := "  phc -b : Batch or black-box processing                         ";
                     42:     for i in o'range loop
                     43:       put_line(o(i));
                     44:     end loop;
                     45:   end Display_Options;
                     46:
                     47:   procedure Read_System ( filename : in string ) is
                     48:
                     49:     file : file_type;
                     50:     n : natural;
                     51:
                     52:   begin
                     53:     if filename /= ""
                     54:      then Open_Input_File(file,filename);
                     55:           get(file,n);
                     56:           lp := new Poly_Sys(1..n);
                     57:           get(file,n,lp.all);
                     58:           Close(file);
                     59:     end if;
                     60:   exception
                     61:     when others =>
                     62:       new_line;
                     63:       put("Could not open file with name "); put_line(filename);
                     64:       lp := null; return;
                     65:   end Read_System;
                     66:
                     67: begin
                     68:   new_line;
                     69:   Display_Options;
                     70:
                     71: -- READ THE INPUT SYSTEM AND OUTPUT FILE
                     72:
                     73:   Read_System(infilename);
                     74:   if lp = null
                     75:    then new_line; get(lp);
                     76:   end if;
                     77:
                     78:   Create_Output_File(outpt,outfilename);
                     79:   put(outpt,lp'last,lp.all);
                     80:
                     81:   tstart(timer);
                     82:
                     83:   declare
                     84:
                     85:     p,q,scalp,projp : Poly_Sys(lp'range);
                     86:     target : Complex_Number;
                     87:     basis,roco : natural;
                     88:     scalvec : Link_to_Vector;
                     89:     sols : Solution_List;
                     90:     proj : boolean;
                     91:
                     92:   begin
                     93:
                     94:     p := lp.all;  Copy(p,scalp);
                     95:
                     96:    -- PREPROCESSING : SCALING AND REDUCTION
                     97:
                     98:     Driver_for_Scaling(outpt,scalp,basis,scalvec);
                     99:     Driver_for_Reduction(outpt,scalp,roco,true);
                    100:
                    101:    -- APPLY ROOT COUNTING METHODS TO CONSTRUCT A START SYSTEM
                    102:
                    103:     Copy(scalp,projp);
                    104:     Driver_for_Root_Counts(outpt,projp,q,true,sols,roco);
                    105:
                    106:     if Length_Of(sols) > 0
                    107:      then
                    108:
                    109:       -- CONSTRUCTION OF THE HOMOTOPY
                    110:
                    111:        Driver_for_Homotopy_Construction(outpt,projp,q,sols,target);
                    112:
                    113:       -- CONTINUATION
                    114:
                    115:        proj := (Number_of_Unknowns(p(p'first)) > p'last);
                    116:        if Head_Of(sols).t /= Create(0.0)
                    117:         then Set_Continuation_Parameter(sols,Create(0.0));
                    118:        end if;
                    119:        Driver_for_Polynomial_Continuation(outpt,sols,proj,target);
                    120:
                    121:       -- ROOT REFINING
                    122:
                    123:        Driver_for_Root_Refining(outpt,scalp,p,basis,scalvec,sols);
                    124:      end if;
                    125:
                    126:   end;
                    127:
                    128:   tstop(timer);
                    129:   new_line(outpt);
                    130:   print_times(outpt,timer,"solving the polynomial system");
                    131:   new_line(outpt);
                    132:   put(outpt,Bye_Bye_Message);
                    133:   Close(outpt);
                    134:
                    135: end mainphc;

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