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

Annotation of OpenXM_contrib/PHC/Ada/Continuation/black_polynomial_continuations.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 Timing_Package;                     use Timing_Package;
                      4: with File_Scanning;                      use File_Scanning;
                      5: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
                      6: with Standard_Complex_Numbers;           use Standard_Complex_Numbers;
                      7: with Standard_Complex_Numbers_io;        use Standard_Complex_Numbers_io;
                      8: with Standard_Random_Numbers;            use Standard_Random_Numbers;
                      9: with Standard_Complex_Vectors;
                     10: with Standard_Complex_Norms_Equals;      use Standard_Complex_Norms_Equals;
                     11: with Standard_Complex_Polynomials;       use Standard_Complex_Polynomials;
                     12: with Standard_Complex_Poly_Systems_io;   use Standard_Complex_Poly_Systems_io;
                     13: with Standard_Complex_Poly_SysFun;       use Standard_Complex_Poly_SysFun;
                     14: with Standard_Complex_Solutions_io;      use Standard_Complex_Solutions_io;
                     15: with Scaling;                            use Scaling;
                     16: with Projective_Transformations;         use Projective_Transformations;
                     17: with Continuation_Parameters;
                     18: with Continuation_Parameters_io;
                     19: with Homotopy,Process_io;                use Process_io;
                     20: with Increment_and_Fix_Continuation;     use Increment_and_Fix_Continuation;
                     21: with Standard_Root_Refiners;             use Standard_Root_Refiners;
                     22: with Scanners_for_Continuation;          use Scanners_for_Continuation;
                     23:
                     24: package body Black_Polynomial_Continuations is
                     25:
                     26:   procedure Scan_Input
                     27:                 ( infile,outfile : in file_type; p,q : in out Link_to_Poly_Sys;
                     28:                   sols : in out Solution_List; arti : out boolean ) is
                     29:
                     30:   -- DESCRIPTION :
                     31:   --   Scans the input file for target system and, if the homotopy is
                     32:   --   artificial (in that case arti = true, otherwise arti = false),
                     33:   --   for a start system.  In both cases, start solutions are required.
                     34:
                     35:     found,artificial : boolean;
                     36:
                     37:   begin
                     38:     get(infile,p);
                     39:     put(outfile,p'last,p.all);
                     40:     artificial := (Number_of_Unknowns(p(p'first)) = p'last);
                     41:     if artificial
                     42:      then Scan_and_Skip(infile,"START SYSTEM",found);
                     43:           if found
                     44:            then get(infile,q);
                     45:                 new_line(outfile);
                     46:                 put_line(outfile,"THE START SYSTEM : ");
                     47:                 new_line(outfile);
                     48:                 put_line(outfile,q.all);
                     49:           end if;
                     50:     end if;
                     51:     Scan_and_Skip(infile,"SOLUTIONS",found);
                     52:     if found
                     53:      then get(infile,sols);
                     54:           new_line(outfile);
                     55:           put_line(outfile,"THE START SOLUTIONS : ");
                     56:           new_line(outfile);
                     57:           put(outfile,Length_Of(sols),Head_Of(sols).n,sols);
                     58:           new_line(outfile);
                     59:     end if;
                     60:     arti := artificial;
                     61:   end Scan_Input;
                     62:
                     63:   procedure Set_Homotopy_Parameters
                     64:                ( file : in file_type; k : in out natural;
                     65:                  a,t : in out Complex_Number; prt : in out boolean ) is
                     66:
                     67:   -- DESCRIPTION :
                     68:   --   Sets the default values for the homotopy parameters.
                     69:
                     70:   begin
                     71:     k := 2;
                     72:     a := Random1;
                     73:     t := Create(1.0);
                     74:     prt := false;
                     75:     new_line(file);
                     76:     put_line(file,"HOMOTOPY PARAMETERS :");
                     77:     put(file,"  k : "); put(file,k,2); new_line(file);
                     78:     put(file,"  a : "); put(file,a);   new_line(file);
                     79:     put(file,"  t : "); put(file,t);   new_line(file);
                     80:     if prt
                     81:      then put_line(file,"  projective transformation");
                     82:      else put_line(file,"  no projective transformation");
                     83:     end if;
                     84:   end Set_Homotopy_Parameters;
                     85:
                     86:   procedure Tune_Continuation_Parameters ( outfile : in file_type ) is
                     87:
                     88:   -- DESCRIPTION :
                     89:   --   Scans the input file for continuation parameters and the
                     90:   --   output parameter.
                     91:
                     92:   begin
                     93:     Continuation_Parameters.Tune(2);
                     94:     new_line(outfile);
                     95:     put_line(outfile,"****************** CURRENT CONTINUATION PARAMETERS "
                     96:       & "*****************");
                     97:     Continuation_Parameters_io.put(outfile);
                     98:     put_line(outfile,"***************************************************"
                     99:       & "*****************");
                    100:     Process_io.Set_Output_Code(nil);
                    101:   end Tune_Continuation_Parameters;
                    102:
                    103:   procedure Black_Box_Refine
                    104:                   ( outfile : in file_type; p : in Poly_Sys;
                    105:                     artificial : in boolean; target : in Complex_Number;
                    106:                     k : in natural; sols,refsols : in out Solution_List ) is
                    107:
                    108:   -- DESCRIPTION :
                    109:   --   Refines the roots in sols w.r.t. the system p.
                    110:
                    111:     epsxa,epsfa : constant double_float := 10.0**(-8);
                    112:     tolsing : constant double_float := 10.0**(-8);
                    113:     len,nb : natural := 0;
                    114:
                    115:   begin
                    116:     if Length_Of(sols) > 0
                    117:      then
                    118:        if artificial
                    119:         then if not Is_Null(sols) and then Head_Of(sols).n > p'last
                    120:               then Affine_Transformation(sols);
                    121:              end if;
                    122:              Reporting_Root_Refiner
                    123:                (outfile,p,sols,refsols,epsxa,epsfa,tolsing,nb,5,false);
                    124:         else declare
                    125:                pt : Poly_Sys(p'range);
                    126:              begin
                    127:                pt := Eval(p,target,k);
                    128:                Reporting_Root_Refiner
                    129:                  (outfile,pt,sols,refsols,epsxa,epsfa,tolsing,nb,5,false);
                    130:                Clear(pt);
                    131:              end;
                    132:        end if;
                    133:     end if;
                    134:   end Black_Box_Refine;
                    135:
                    136:   procedure Black_Box_Polynomial_Continuation
                    137:                  ( infile,outfile : in file_type; pocotime : out duration ) is
                    138:
                    139:     p,q,sp : Link_to_Poly_Sys;
                    140:     sols,refsols : Solution_List;
                    141:     timer : timing_widget;
                    142:     k : natural := 0;
                    143:     a,target : Complex_Number;
                    144:     proj,artificial : boolean;
                    145:     rcond : double_float;
                    146:     scalecoeff : Standard_Complex_Vectors.Link_to_Vector;
                    147:
                    148:     procedure Cont is
                    149:       new Reporting_Continue(Max_Norm,
                    150:                              Homotopy.Eval,Homotopy.Diff,Homotopy.Diff);
                    151:
                    152:    begin
                    153:     Scan_Input(infile,outfile,p,q,sols,artificial);
                    154:     scalecoeff := new Standard_Complex_Vectors.Vector(1..2*p'length);
                    155:     sp := new Poly_Sys(p'range);
                    156:     Copy(p.all,sp.all);
                    157:     Scale(sp.all,2,false,rcond,scalecoeff.all);
                    158:     Set_Homotopy_Parameters(outfile,k,a,target,proj);
                    159:     if artificial
                    160:      then Homotopy.Create(sp.all,q.all,k,a);
                    161:      else Homotopy.Create(sp.all,k);
                    162:           target := a;
                    163:     end if;
                    164:     Tune_Continuation_Parameters(outfile);
                    165:     new_line(outfile);
                    166:     put_line(outfile,"THE SCALED SOLUTIONS :");
                    167:     new_line(outfile);
                    168:     tstart(timer);
                    169:     Cont(outfile,sols,proj,target);
                    170:     tstop(timer);
                    171:     new_line(outfile);
                    172:     print_times(outfile,timer,"continuation");
                    173:     pocotime := Elapsed_User_Time(timer);
                    174:     Scale(2,scalecoeff.all,sols);
                    175:     Clear(sp);
                    176:     Black_Box_Refine(outfile,p.all,artificial,target,k,sols,refsols);
                    177:   end Black_Box_Polynomial_Continuation;
                    178:
                    179:   procedure Black_Box_Polynomial_Continuation
                    180:                   ( outfile : in file_type;
                    181:                     p,q : in Poly_Sys; sols : in out Solution_List;
                    182:                     pocotime : out duration ) is
                    183:
                    184:     refsols : Solution_List;
                    185:     timer : timing_widget;
                    186:     k : natural := 0;
                    187:     a,target : Complex_Number := Create(0.0);
                    188:     proj : boolean;
                    189:     rcond : double_float;
                    190:     scalecoeff : Standard_Complex_Vectors.Vector(1..2*p'length);
                    191:     sp : Poly_Sys(p'range);
                    192:
                    193:     procedure Cont is
                    194:       new Reporting_Continue(Max_Norm,
                    195:                              Homotopy.Eval,Homotopy.Diff,Homotopy.Diff);
                    196:
                    197:    begin
                    198:     Set_Homotopy_Parameters(outfile,k,a,target,proj);
                    199:     Copy(p,sp);
                    200:     Scale(sp,2,false,rcond,scalecoeff);
                    201:     Homotopy.Create(sp,q,k,a);
                    202:     Tune_Continuation_Parameters(outfile);
                    203:     new_line(outfile);
                    204:     put_line(outfile,"THE SCALED SOLUTIONS :");
                    205:     new_line(outfile);
                    206:     tstart(timer);
                    207:     Cont(outfile,sols,proj,target);
                    208:     tstop(timer);
                    209:     new_line(outfile);
                    210:     print_times(outfile,timer,"continuation");
                    211:     pocotime := Elapsed_User_Time(timer);
                    212:     Scale(2,scalecoeff,sols);
                    213:     Clear(sp);
                    214:     Black_Box_Refine(outfile,p,true,target,k,sols,refsols);
                    215:     sols := refsols;
                    216:   end Black_Box_Polynomial_Continuation;
                    217:
                    218: end Black_Polynomial_Continuations;

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