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

Annotation of OpenXM_contrib/PHC/Ada/Main/mainvali.adb, Revision 1.1

1.1     ! maekawa     1: with text_io,integer_io;                 use text_io,integer_io;
        !             2: with Timing_Package;                     use Timing_Package;
        !             3: with Communications_with_User;           use Communications_with_User;
        !             4: with File_Scanning;                      use File_Scanning;
        !             5: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
        !             6: with Standard_Floating_Numbers_io;       use Standard_Floating_Numbers_io;
        !             7: with Multprec_Floating_Numbers;          use Multprec_Floating_Numbers;
        !             8: with Multprec_Floating_Numbers_io;       use Multprec_Floating_Numbers_io;
        !             9: with Standard_Complex_Numbers;           use Standard_Complex_Numbers;
        !            10: with Standard_Complex_Numbers_io;        use Standard_Complex_Numbers_io;
        !            11: with Numbers_io;                         use Numbers_io;
        !            12: with Standard_Complex_Vectors;           use Standard_Complex_Vectors;
        !            13: with Standard_Complex_Vectors_io;        use Standard_Complex_Vectors_io;
        !            14: with Standard_Complex_Poly_Systems;      use Standard_Complex_Poly_Systems;
        !            15: with Standard_Complex_Poly_Systems_io;   use Standard_Complex_Poly_Systems_io;
        !            16: with Standard_to_Multprec_Convertors;    use Standard_to_Multprec_Convertors;
        !            17: with Multprec_Complex_Poly_Systems;      use Multprec_Complex_Poly_Systems;
        !            18: with Multprec_Complex_Poly_SysFun;       use Multprec_Complex_Poly_SysFun;
        !            19: with Standard_Complex_Solutions;
        !            20: with Standard_Complex_Solutions_io;      use Standard_Complex_Solutions_io;
        !            21: with Multprec_Complex_Solutions;
        !            22: with Multprec_Complex_Solutions_io;      use Multprec_Complex_Solutions_io;
        !            23: with Standard_Root_Refiners;             use Standard_Root_Refiners;
        !            24: with Multprec_Root_Refiners;             use Multprec_Root_Refiners;
        !            25: with Multprec_Residual_Evaluations;      use Multprec_Residual_Evaluations;
        !            26: with Symmetry_Group;                     use Symmetry_Group;
        !            27: with Symbolic_Symmetry_Group_io;         use Symbolic_Symmetry_Group_io;
        !            28: with Drivers_for_Symmetry_Group_io;      use Drivers_for_Symmetry_Group_io;
        !            29: with Drivers_for_Orbits_of_Solutions;    use Drivers_for_Orbits_of_Solutions;
        !            30: with Driver_for_Winding_Numbers;
        !            31: with valipoco;
        !            32: with Bye_Bye_Message;
        !            33:
        !            34: procedure mainvali ( infilename,outfilename : in string ) is
        !            35:
        !            36:   procedure Display_Validation_Info is
        !            37:
        !            38:   -- DESCRIPTION :
        !            39:   --   Displays information about available validation methods on screen.
        !            40:
        !            41:     i : array(1..9) of string(1..65);
        !            42:
        !            43:   begin
        !            44:     i(1):="Basic validation consists in the application of  Newton's  method";
        !            45:     i(2):="on  the  list  of solutions.  There are facilities to extract the";
        !            46:     i(3):="generating solutions when the symmetry group is submitted.       ";
        !            47:     i(4):="  Winding  numbers  can  be  computed  by  homotopy  continuation";
        !            48:     i(5):="methods.   The user must provide a start system with solutions at";
        !            49:     i(6):="t < 1.                                                           ";
        !            50:     i(7):="  Polyhedral validation is based on  the  output  file  of  poco,";
        !            51:     i(8):="where  the  polyhedral  end  game was turned on.  This validation";
        !            52:     i(9):="puts up a frequency table of computed path directions.           ";
        !            53:     for k in i'range loop
        !            54:       put_line(i(k));
        !            55:     end loop;
        !            56:   end Display_Validation_Info;
        !            57:
        !            58: -- READING THE INPUT :
        !            59:
        !            60:   procedure Scan_System
        !            61:                ( file : in out file_type; filename : in string;
        !            62:                  lp : in out Standard_Complex_Poly_Systems.Link_to_Poly_Sys;
        !            63:                  sysonfile : out boolean ) is
        !            64:
        !            65:   -- DESCRIPTION :
        !            66:   --   Checks whether the given file name corresponds to a file with
        !            67:   --   a polynomial system in a correct format.
        !            68:   --   If this is the case, then sysonfile is true on return and lp
        !            69:   --   contains the system.
        !            70:
        !            71:   begin
        !            72:     if filename /= ""
        !            73:      then Open(file,in_file,filename);
        !            74:           get(file,lp);
        !            75:           sysonfile := true;
        !            76:      else sysonfile := false;
        !            77:     end if;
        !            78:   exception
        !            79:     when others =>
        !            80:       new_line;
        !            81:       put("Could not open file with name "); put_line(filename);
        !            82:       lp := null;
        !            83:       sysonfile := false;
        !            84:       return;
        !            85:   end Scan_System;
        !            86:
        !            87:   procedure Read_System
        !            88:                ( file : in out file_type; filename : in string;
        !            89:                  lp : in out Standard_Complex_Poly_Systems.Link_to_Poly_Sys;
        !            90:                  sysonfile : out boolean ) is
        !            91:
        !            92:   -- DESCRIPTION :
        !            93:   --   Searches first the system on file, using the given filename.
        !            94:   --   If necessary other files will be openend.
        !            95:
        !            96:     ans : character;
        !            97:     n : natural;
        !            98:
        !            99:   begin
        !           100:     Scan_System(file,filename,lp,sysonfile);
        !           101:     if lp = null
        !           102:      then loop
        !           103:             new_line;
        !           104:             put("Is the system on a file ? (y/n/i=info) ");
        !           105:             Ask_Alternative(ans,"yni");
        !           106:             if ans = 'i'
        !           107:              then new_line;
        !           108:                   Standard_Complex_Poly_Systems_io.Display_Format;
        !           109:                   new_line;
        !           110:             end if;
        !           111:             exit when ans /= 'i';
        !           112:           end loop;
        !           113:           new_line;
        !           114:           if ans = 'y'
        !           115:            then put_line("Reading the name of the input file.");
        !           116:                 Read_Name_and_Open_File(file);
        !           117:                 get(file,lp);
        !           118:                 sysonfile := true;
        !           119:                 n := lp'length;
        !           120:            else put("Give the dimension : "); get(n);
        !           121:                 lp := new Standard_Complex_Poly_Systems.Poly_Sys(1..n);
        !           122:                 put("Give "); put(n,1); put(" "); put(n,1);
        !           123:                 put_line("-variate polynomials :");
        !           124:                 get(n,lp.all);
        !           125:                 skip_line;  -- skip end_of_line symbol
        !           126:                 sysonfile := false;
        !           127:           end if;
        !           128:     end if;
        !           129:   end Read_System;
        !           130:
        !           131:   procedure Scan_Solutions
        !           132:                ( file : in out file_type; sysonfile : in boolean;
        !           133:                  sols : in out Standard_Complex_Solutions.Solution_List;
        !           134:                  found : out boolean ) is
        !           135:
        !           136:     fnd : boolean := false;
        !           137:
        !           138:   begin
        !           139:     if sysonfile
        !           140:      then Scan_and_Skip(file,"SOLUTIONS",fnd);
        !           141:           if fnd
        !           142:            then get(file,sols);
        !           143:           end if;
        !           144:           Close(file);
        !           145:      else fnd := false;
        !           146:     end if;
        !           147:     found := fnd;
        !           148:   exception
        !           149:     when others
        !           150:       => put_line("Something is wrong with the solutions, will ignore...");
        !           151:          Close(file);
        !           152:          found := false;
        !           153:   end Scan_Solutions;
        !           154:
        !           155:   procedure Read_Solutions
        !           156:               ( file : in out file_type; sysonfile : in boolean;
        !           157:                 sols : in out Standard_Complex_Solutions.Solution_List ) is
        !           158:
        !           159:     found : boolean;
        !           160:
        !           161:   begin
        !           162:     Scan_Solutions(file,sysonfile,sols,found);
        !           163:     if not found
        !           164:      then new_line;
        !           165:           put_line("Reading the name of the file for the solutions.");
        !           166:           Read_Name_and_Open_File(file);
        !           167:           get(file,sols);
        !           168:           Close(file);
        !           169:     end if;
        !           170:   end Read_Solutions;
        !           171:
        !           172: -- ROOT REFINING AUXILIARIES :
        !           173:
        !           174:   procedure Standard_Default_Root_Refining_Parameters
        !           175:               ( epsxa,epsfa,tolsing : out double_float;
        !           176:                 maxit : out natural; wout : out boolean ) is
        !           177:
        !           178:   -- DESCRIPTION :
        !           179:    --  Defines the default values for the root refining parameters.
        !           180:
        !           181:   begin
        !           182:     epsxa := 10.0**(-8);    -- precision for correction on x
        !           183:     epsfa := 10.0**(-8);    -- precision for residual
        !           184:     tolsing := 10.0**(-8);  -- tolerance on inverse condition numbers
        !           185:     maxit := 3;             -- maximal number of Newton iterations
        !           186:     wout := false;          -- if intermediate output is wanted
        !           187:   end Standard_Default_Root_Refining_Parameters;
        !           188:
        !           189:   procedure Multprec_Default_Root_Refining_Parameters
        !           190:               ( epsxa,epsfa,tolsing : out Floating_Number;
        !           191:                 maxit,deci : out natural; wout : out boolean ) is
        !           192:
        !           193:    -- DESCRIPTION :
        !           194:    --  Defines the default values for the root refining parameters.
        !           195:
        !           196:   begin
        !           197:     epsxa := Create(10.0**(-8));    -- precision for correction on x
        !           198:     epsfa := Create(10.0**(-8));    -- precision for residual
        !           199:     tolsing := Create(10.0**(-8));  -- tolerance on inverse condition numbers
        !           200:     maxit := 3;                     -- maximal number of Newton iterations
        !           201:     deci := 16;                     -- number of decimal places
        !           202:     wout := false;                  -- if intermediate output is wanted
        !           203:   end Multprec_Default_Root_Refining_Parameters;
        !           204:
        !           205:   procedure Standard_Put_Root_Refining_Parameters
        !           206:               ( file : in file_type; epsxa,epsfa,tolsing : in double_float;
        !           207:                 maxit : in natural; wout : in boolean ) is
        !           208:
        !           209:   -- DESCRIPTION :
        !           210:   --   Writes the parameters for the root refiner on file.
        !           211:
        !           212:   begin
        !           213:     put(file,"  1. output during the iterations    : ");
        !           214:     if wout
        !           215:      then put(file," yes"); new_line(file);
        !           216:      else put(file," no"); new_line(file);
        !           217:     end if;
        !           218:     put(file,"  2. tolerance for error on the root : ");
        !           219:     put(file,epsxa,2,3,3); new_line(file);
        !           220:     put(file,"  3. tolerance for the residual      : ");
        !           221:     put(file,epsfa,2,3,3); new_line(file);
        !           222:     put(file,"  4. tolerance for singular roots    : ");
        !           223:     put(file,tolsing,2,3,3); new_line(file);
        !           224:     put(file,"  5. maximum number of iterations    : ");
        !           225:     put(file,maxit,2); new_line(file);
        !           226:   end Standard_Put_Root_Refining_Parameters;
        !           227:
        !           228:   procedure Multprec_Put_Root_Refining_Parameters
        !           229:               ( file : in file_type; epsxa,epsfa,tolsing : in Floating_Number;
        !           230:                 maxit,deci : in natural; wout : in boolean ) is
        !           231:
        !           232:   -- DESCRIPTION :
        !           233:   --   Writes the parameters for the root refiner on file.
        !           234:
        !           235:   begin
        !           236:     put(file,"  1. output during the iterations    : ");
        !           237:     if wout
        !           238:      then put(file," yes"); new_line(file);
        !           239:      else put(file," no"); new_line(file);
        !           240:     end if;
        !           241:     put(file,"  2. tolerance for error on the root : ");
        !           242:     put(file,epsxa,2,3,3); new_line(file);
        !           243:     put(file,"  3. tolerance for the residual      : ");
        !           244:     put(file,epsfa,2,3,3); new_line(file);
        !           245:     put(file,"  4. tolerance for singular roots    : ");
        !           246:     put(file,tolsing,2,3,3); new_line(file);
        !           247:     put(file,"  5. maximum number of iterations    : ");
        !           248:     put(file,maxit,2); new_line(file);
        !           249:     put(file,"  6. number of decimal places        : ");
        !           250:     put(file,deci,2); new_line(file);
        !           251:   end Multprec_Put_Root_Refining_Parameters;
        !           252:
        !           253:   procedure Standard_Menu_Root_Refining_Parameters
        !           254:               ( file : in file_type; epsxa,epsfa,tolsing : in out double_float;
        !           255:                 maxit : in out natural; wout : in out boolean ) is
        !           256:
        !           257:   -- DESCRIPTION :
        !           258:   --   The user can set the parameters of the root refiner by the menu's.
        !           259:
        !           260:     ans : character;
        !           261:
        !           262:   begin
        !           263:     new_line;
        !           264:     loop
        !           265:       put_line("MENU with current Settings for the Root Refiner :");
        !           266:       Standard_Put_Root_Refining_Parameters
        !           267:         (Standard_Output,epsxa,epsfa,tolsing,maxit,wout);
        !           268:       put("Type 1,2,3,4, or 5 to change, type 0 to exit : ");
        !           269:       Ask_Alternative(ans,"012345");
        !           270:       exit when ans = '0';
        !           271:       case ans is
        !           272:         when '1' => put("Do you want output during the iterations ? (y/n) ");
        !           273:                     Ask_Yes_or_No(ans); wout := (ans = 'y');
        !           274:         when '2' => put("Give new tolerance for error on the root : ");
        !           275:                     Read_Double_Float(epsxa);
        !           276:         when '3' => put("Give new tolerance for residual : ");
        !           277:                     Read_Double_Float(epsfa);
        !           278:         when '4' => put("Give new tolerance for singular roots : ");
        !           279:                     Read_Double_Float(tolsing);
        !           280:         when '5' => put("Give new maximum number of iterations : ");
        !           281:                     Read_Natural(maxit);
        !           282:         when others => null;
        !           283:       end case;
        !           284:     end loop;
        !           285:     new_line(file);
        !           286:     put_line(file,"ROOT REFINING PARAMETERS : ");
        !           287:     Standard_Put_Root_Refining_Parameters(file,epsxa,epsfa,tolsing,maxit,wout);
        !           288:   end Standard_Menu_Root_Refining_Parameters;
        !           289:
        !           290:   procedure Multprec_Menu_Root_Refining_Parameters
        !           291:               ( file : in file_type;
        !           292:                 epsxa,epsfa,tolsing : in out Floating_Number;
        !           293:                 maxit,deci : in out natural; wout : in out boolean ) is
        !           294:
        !           295:   -- DESCRIPTION :
        !           296:   --   The user can set the parameters of the root refiner by the menu's.
        !           297:
        !           298:     ans : character;
        !           299:
        !           300:   begin
        !           301:     new_line;
        !           302:     loop
        !           303:       put_line("MENU with current Settings for the Root Refiner :");
        !           304:       Multprec_Put_Root_Refining_Parameters
        !           305:         (Standard_Output,epsxa,epsfa,tolsing,maxit,deci,wout);
        !           306:       put("Type 1,2,3,4,5 or 6 to change, type 0 to exit : ");
        !           307:       Ask_Alternative(ans,"0123456");
        !           308:       exit when ans = '0';
        !           309:       case ans is
        !           310:         when '1' => put("Do you want output during the iterations ? (y/n) ");
        !           311:                     Ask_Yes_or_No(ans); wout := (ans = 'y');
        !           312:         when '2' => put("Give new tolerance for error on the root : ");
        !           313:                     get(epsxa);
        !           314:         when '3' => put("Give new tolerance for residual : ");
        !           315:                     get(epsfa);
        !           316:         when '4' => put("Give new tolerance for singular roots : ");
        !           317:                     get(tolsing);
        !           318:         when '5' => put("Give new maximum number of iterations : ");
        !           319:                     Read_Natural(maxit);
        !           320:         when '6' => put("Give new number of decimal places : ");
        !           321:                     Read_Natural(deci);
        !           322:         when others => null;
        !           323:       end case;
        !           324:     end loop;
        !           325:     new_line(file);
        !           326:     put_line(file,"ROOT REFINING PARAMETERS : ");
        !           327:     Multprec_Put_Root_Refining_Parameters
        !           328:       (file,epsxa,epsfa,tolsing,maxit,deci,wout);
        !           329:   end Multprec_Menu_Root_Refining_Parameters;
        !           330:
        !           331:   procedure Refine_Roots
        !           332:                  ( file : in file_type;
        !           333:                    p : in Standard_Complex_Poly_Systems.Poly_Sys;
        !           334:                    solsfile,invar,allperms,signsym : in boolean;
        !           335:                    v : in List_of_Permutations;
        !           336:                    epsxa,epsfa,tolsing : in double_float;
        !           337:                    maxit : in natural; wout : in boolean;
        !           338:                    sols,refsols
        !           339:                          : in out Standard_Complex_Solutions.Solution_List ) is
        !           340:
        !           341:   -- DESCRIPTION :
        !           342:   --   Refines the roots and computes generating solutions when required.
        !           343:
        !           344:   -- ON ENTRY :
        !           345:   --   file        for writing results on;
        !           346:   --   p           the polynomial system under consideration;
        !           347:   --   solsfile    whether refined solution have to go to separate file;
        !           348:   --   invar       whether generating solutions have to be computed;
        !           349:   --   allperms    whether invariant under all permutations;
        !           350:   --   signsym     whether there is sign-symmetry;
        !           351:   --   v           group representation, only needed when invar;
        !           352:   --   sols        solutions that need to be refined.
        !           353:
        !           354:   -- ON RETURN :
        !           355:   --   sols        solutions after applying some Newton iteration;
        !           356:   --   refsols     refined solutions, with the exception of failures and
        !           357:   --               the non-generating solutions.
        !           358:
        !           359:     numit : natural := 0;
        !           360:
        !           361:   begin
        !           362:     if solsfile or invar
        !           363:      then Reporting_Root_Refiner
        !           364:             (file,p,sols,refsols,epsxa,epsfa,tolsing,numit,maxit,wout);
        !           365:           if invar
        !           366:            then Driver_for_Orbits_of_Solutions
        !           367:                   (file,refsols,v,allperms,signsym,epsxa);
        !           368:           end if;
        !           369:      else Reporting_Root_Refiner
        !           370:             (file,p,sols,epsxa,epsfa,tolsing,numit,maxit,wout);
        !           371:     end if;
        !           372:   end Refine_Roots;
        !           373:
        !           374:   procedure Refine_Roots
        !           375:          ( file : in file_type;
        !           376:            p : in Standard_Complex_Poly_Systems.Poly_Sys;
        !           377:            solsfile : in boolean;
        !           378:            epsxa,epsfa,tolsing : in double_float;
        !           379:            maxit : in natural; wout : in boolean;
        !           380:            sols,refsols : in out Standard_Complex_Solutions.Solution_List ) is
        !           381:
        !           382:   -- DESCRIPTION :
        !           383:   --   Root refinement without computing of generating solutions.
        !           384:
        !           385:     numit : natural := 0;
        !           386:
        !           387:   begin
        !           388:     if solsfile
        !           389:      then Reporting_Root_Refiner
        !           390:             (file,p,sols,refsols,epsxa,epsfa,tolsing,numit,maxit,wout);
        !           391:      else Reporting_Root_Refiner
        !           392:             (file,p,sols,epsxa,epsfa,tolsing,numit,maxit,wout);
        !           393:     end if;
        !           394:   end Refine_Roots;
        !           395:
        !           396:   procedure End_of_Input_Message is
        !           397:   begin
        !           398:     new_line;
        !           399:     put_line("No more input expected.  See output file for results.");
        !           400:     new_line;
        !           401:   end End_of_Input_Message;
        !           402:
        !           403: -- VALIDATION PROCEDURES :
        !           404:
        !           405:   procedure Winding_Validation is
        !           406:
        !           407:   -- DESCRIPTION :
        !           408:   --   Validation by computing winding numbers by homotopy continuation.
        !           409:
        !           410:     use Standard_Complex_Solutions;
        !           411:
        !           412:     lp : Standard_Complex_Poly_Systems.Link_to_Poly_Sys;
        !           413:     timer : Timing_Widget;
        !           414:     infile,solsft,outfile : file_type;
        !           415:     ans : character;
        !           416:     sysonfile,solsfile,wout : boolean;
        !           417:     sols,refsols: Standard_Complex_Solutions.Solution_List;
        !           418:     epsxa,epsfa,tolsing : double_float;
        !           419:     maxit : natural;
        !           420:
        !           421:   begin
        !           422:     Read_System(infile,infilename,lp,sysonfile);
        !           423:     Create_Output_File(outfile,outfilename);
        !           424:     put(outfile,lp'last,lp.all);
        !           425:     Read_Solutions(infile,sysonfile,sols);
        !           426:     new_line;
        !           427:     put("Do you want the refined solutions on separate file ? (y/n) ");
        !           428:     Ask_Yes_or_No(ans);
        !           429:     if ans = 'y'
        !           430:      then solsfile := true;
        !           431:           put_line("Reading the name of the file to write the solutions on.");
        !           432:           Read_Name_and_Create_File(solsft);
        !           433:      else solsfile := false;
        !           434:     end if;
        !           435:     Standard_Default_Root_Refining_Parameters(epsxa,epsfa,tolsing,maxit,wout);
        !           436:     Standard_Menu_Root_Refining_Parameters
        !           437:       (outfile,epsxa,epsfa,tolsing,maxit,wout);
        !           438:     Driver_for_Winding_Numbers(outfile,lp.all,sols);
        !           439:     tstart(timer);
        !           440:     Refine_Roots(outfile,lp.all,solsfile,
        !           441:                  epsxa,epsfa,tolsing,maxit,wout,sols,refsols);
        !           442:     tstop(timer);
        !           443:     if solsfile
        !           444:      then put(solsft,Length_Of(refsols),Head_Of(refsols).n,refsols);
        !           445:           Close(solsft);
        !           446:     end if;
        !           447:     new_line(outfile);
        !           448:     print_times(outfile,timer,"Root Refinement");
        !           449:     Close(outfile);
        !           450:   end Winding_Validation;
        !           451:
        !           452:   procedure Standard_Weeding_Validation is
        !           453:
        !           454:   -- DESCRIPTION :
        !           455:   --   Validation by refining the roots and weeding out the solution set.
        !           456:
        !           457:     use Standard_Complex_Solutions;
        !           458:
        !           459:     lp : Standard_Complex_Poly_Systems.Link_to_Poly_Sys;
        !           460:     timer : Timing_Widget;
        !           461:     infile,solsft,outfile : file_type;
        !           462:     n,maxit : natural;
        !           463:     ans : character;
        !           464:     sysonfile,solsfile,wout : boolean;
        !           465:     invar,allperms,signsym,allsigns : boolean;
        !           466:     g,v : List_of_Permutations;
        !           467:     sols,refsols: Standard_Complex_Solutions.Solution_List;
        !           468:     epsxa,epsfa,tolsing : double_float;
        !           469:
        !           470:   begin
        !           471:     Read_System(infile,infilename,lp,sysonfile);
        !           472:     Create_Output_File(outfile,outfilename);
        !           473:     put(outfile,lp'last,lp.all);
        !           474:     Read_Solutions(infile,sysonfile,sols);
        !           475:     new_line;
        !           476:     put("Is the system invariant under group actions ? (y/n) ");
        !           477:     Ask_Yes_or_No(ans);
        !           478:     if ans = 'y'
        !           479:      then invar := true; n := lp'length;
        !           480:           Read_Symmetry_Group(n,g,v,allperms,signsym,allsigns);
        !           481:           new_line(outfile);
        !           482:           put_line(outfile,"THE SYMMETRY GROUP : ");
        !           483:           new_line(outfile);
        !           484:           Symbolic_Symmetry_Group_io.put(outfile,v);
        !           485:           new_line(outfile);
        !           486:      else invar := false;
        !           487:     end if;
        !           488:     new_line;
        !           489:     put("Do you want the refined solutions on separate file ? (y/n) ");
        !           490:     Ask_Yes_or_No(ans);
        !           491:     if ans = 'y'
        !           492:      then solsfile := true;
        !           493:           put_line("Reading the name of the file to write the solutions on.");
        !           494:           Read_Name_and_Create_File(solsft);
        !           495:      else solsfile := false;
        !           496:     end if;
        !           497:     Standard_Default_Root_Refining_Parameters(epsxa,epsfa,tolsing,maxit,wout);
        !           498:     Standard_Menu_Root_Refining_Parameters
        !           499:       (outfile,epsxa,epsfa,tolsing,maxit,wout);
        !           500:     End_of_Input_Message;
        !           501:     tstart(timer);
        !           502:     Refine_Roots(outfile,lp.all,solsfile,invar,allperms,signsym,v,
        !           503:                  epsxa,epsfa,tolsing,maxit,wout,sols,refsols);
        !           504:     tstop(timer);
        !           505:     if solsfile
        !           506:      then put(solsft,Length_Of(refsols),Head_Of(refsols).n,refsols);
        !           507:           Close(solsft);
        !           508:     end if;
        !           509:     new_line(outfile);
        !           510:     print_times(outfile,timer,"Root Refinement");
        !           511:     Close(outfile);
        !           512:   end Standard_Weeding_Validation;
        !           513:
        !           514:   procedure Multprec_Residual_Evaluator is
        !           515:
        !           516:   -- DESCRIPTION :
        !           517:   --   Evaluation of residuals using multi-precision arithmetic.
        !           518:
        !           519:     lp : Standard_Complex_Poly_Systems.Link_to_Poly_Sys;
        !           520:     timer : Timing_Widget;
        !           521:     infile,outfile : file_type;
        !           522:     sysonfile : boolean;
        !           523:     sols : Standard_Complex_Solutions.Solution_List;
        !           524:
        !           525:   begin
        !           526:     Read_System(infile,infilename,lp,sysonfile);
        !           527:     Create_Output_File(outfile,outfilename);
        !           528:     put(outfile,lp'last,lp.all);
        !           529:     Read_Solutions(infile,sysonfile,sols);
        !           530:     new_line(outfile);
        !           531:     put_line(outfile,"THE SOLUTIONS IN STANDARD PRECISION : ");
        !           532:     put(outfile,Standard_Complex_Solutions.Length_Of(sols),lp'last,sols);
        !           533:     declare
        !           534:       mpsols : Multprec_Complex_Solutions.Solution_List
        !           535:              := Multprec_Complex_Solutions.Create(sols);
        !           536:       mp : Multprec_Complex_Poly_Systems.Poly_Sys(lp'range) := Convert(lp.all);
        !           537:       mp_eval : Multprec_Complex_Poly_SysFun.Eval_Poly_Sys(mp'range)
        !           538:               := Create(mp);
        !           539:       deci,size : natural;
        !           540:     begin
        !           541:       new_line;
        !           542:       put("Give the number of decimal places : "); get(deci);
        !           543:       size := Decimal_to_Size(deci);
        !           544:       Multprec_Complex_Solutions.Set_Size(mpsols,Decimal_to_Size(deci));
        !           545:       new_line(outfile);
        !           546:       put(outfile,"THE RESIDUALS with "); put(outfile,deci,1);
        !           547:       put_line(outfile," decimal places :");
        !           548:       tstart(timer);
        !           549:       Residuals(outfile,mp_eval,mpsols);
        !           550:       tstop(timer);
        !           551:     end;
        !           552:     new_line(outfile);
        !           553:     print_times(outfile,timer,"Multi-Precision Residual Evaluation");
        !           554:     Close(outfile);
        !           555:   end Multprec_Residual_Evaluator;
        !           556:
        !           557:   procedure Call_Multprec_Root_Refiner
        !           558:                ( file : in file_type;
        !           559:                  p : in Multprec_Complex_Poly_Systems.Poly_Sys;
        !           560:                  sols : in out Multprec_Complex_Solutions.Solution_List ) is
        !           561:
        !           562:     timer : Timing_Widget;
        !           563:     epsxa,epsfa,tolsing : Floating_Number;
        !           564:     maxit,numit,deci,size : natural;
        !           565:     wout : boolean;
        !           566:
        !           567:   begin
        !           568:     new_line;
        !           569:     Multprec_Default_Root_Refining_Parameters
        !           570:       (epsxa,epsfa,tolsing,maxit,deci,wout);
        !           571:     Multprec_Menu_Root_Refining_Parameters
        !           572:       (file,epsxa,epsfa,tolsing,maxit,deci,wout);
        !           573:     size := Decimal_to_Size(deci);
        !           574:    -- put("Give the size of the numbers : "); get(size);
        !           575:     Multprec_Complex_Solutions.Set_Size(sols,size);
        !           576:     End_of_Input_Message;
        !           577:     tstart(timer);
        !           578:     Reporting_Root_Refiner(file,p,sols,epsxa,epsfa,tolsing,numit,maxit,wout);
        !           579:     tstop(timer);
        !           580:     new_line(file);
        !           581:     print_times(file,timer,"Multi-Precision Root Refinement");
        !           582:   end Call_Multprec_Root_Refiner;
        !           583:
        !           584:   procedure Multprec_Weeding_Validation is
        !           585:
        !           586:   -- DESCRIPTION :
        !           587:   --   Newton's method using multi-precision arithmetic.
        !           588:
        !           589:     lp : Standard_Complex_Poly_Systems.Link_to_Poly_Sys;
        !           590:     timer : Timing_Widget;
        !           591:     infile,outfile : file_type;
        !           592:     sysonfile : boolean;
        !           593:     sols : Standard_Complex_Solutions.Solution_List;
        !           594:
        !           595:   begin
        !           596:     Read_System(infile,infilename,lp,sysonfile);
        !           597:     Create_Output_File(outfile,outfilename);
        !           598:     put(outfile,lp'last,lp.all);
        !           599:     Read_Solutions(infile,sysonfile,sols);
        !           600:     new_line(outfile);
        !           601:     put_line(outfile,"THE SOLUTIONS IN STANDARD PRECISION : ");
        !           602:     put(outfile,Standard_Complex_Solutions.Length_Of(sols),lp'last,sols);
        !           603:     declare
        !           604:       mpsols : Multprec_Complex_Solutions.Solution_List
        !           605:              := Multprec_Complex_Solutions.Create(sols);
        !           606:       mp : Multprec_Complex_Poly_Systems.Poly_Sys(lp'range) := Convert(lp.all);
        !           607:     begin
        !           608:       Call_Multprec_Root_Refiner(outfile,mp,mpsols);
        !           609:     end;
        !           610:     Close(outfile);
        !           611:   end Multprec_Weeding_Validation;
        !           612:
        !           613:   procedure Polyhedral_End_Game_Validation is
        !           614:
        !           615:   -- DESCRIPTION :
        !           616:   --   Validation of the polyhedral end game.
        !           617:
        !           618:     pocofile,resultfile : file_type;
        !           619:
        !           620:   begin
        !           621:     new_line;
        !           622:     put_line("Reading name of the output file of poco.");
        !           623:     Read_Name_and_Open_File(pocofile);
        !           624:     new_line;
        !           625:     put_line("Reading name of output file.");
        !           626:     Read_Name_and_Create_File(resultfile);
        !           627:     End_of_Input_Message;
        !           628:     valipoco(pocofile,resultfile);
        !           629:     Close(pocofile);
        !           630:     new_line(resultfile);
        !           631:     put(resultfile,Bye_Bye_Message);
        !           632:     Close(resultfile);
        !           633:   end Polyhedral_End_Game_Validation;
        !           634:
        !           635:   procedure Display_and_Dispatch_Menu is
        !           636:
        !           637:     ans : character;
        !           638:     timer : Timing_Widget;
        !           639:
        !           640:   begin
        !           641:     loop
        !           642:       new_line;
        !           643:       put_line("MENU with Validation Methods : ");
        !           644:       put_line
        !           645:          ("  1. Basic Validation : refining and weeding out the solution set");
        !           646:       put_line
        !           647:          ("  2. Evaluation of the residuals using multi-precision arithmetic");
        !           648:       put_line
        !           649:          ("  3. Newton's method using multi-precision arithmetic");
        !           650:       put_line
        !           651:          ("  4. Winding-Number Computation by homotopy continuation");
        !           652:       put_line
        !           653:          ("  5. Polyhedral Validation : frequency table of path directions");
        !           654:       put("Type 1, 2, 3 or 4 to select validation method, or i for info : ");
        !           655:       Ask_Alternative(ans,"12345i");
        !           656:       case ans is
        !           657:         when 'i' => new_line;
        !           658:                     Display_Validation_Info;
        !           659:         when '1' => Standard_Weeding_Validation;
        !           660:         when '2' => Multprec_Residual_Evaluator;
        !           661:         when '3' => Multprec_Weeding_Validation;
        !           662:         when '4' => Winding_Validation;
        !           663:         when '5' => Polyhedral_End_Game_Validation;
        !           664:         when others => null;
        !           665:       end case;
        !           666:       exit when ans /= 'i';
        !           667:     end loop;
        !           668:   end Display_and_Dispatch_Menu;
        !           669:
        !           670: begin
        !           671:   Display_and_Dispatch_Menu;
        !           672: end mainvali;

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