[BACK]Return to driver_for_minkowski_polynomials.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Root_Counts / Dynlift

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Dynlift/driver_for_minkowski_polynomials.adb, Revision 1.1.1.1

1.1       maekawa     1: with integer_io;                         use integer_io;
                      2: with Timing_Package;                     use Timing_Package;
                      3: with Standard_Complex_Numbers;           use Standard_Complex_Numbers;
                      4: with Standard_Integer_Vectors_io;        use Standard_Integer_Vectors_io;
                      5: with Standard_Complex_Polynomials;       use Standard_Complex_Polynomials;
                      6: with Integer_Mixed_Subdivisions_io;      use Integer_Mixed_Subdivisions_io;
                      7: with Minkowski_Polynomials;              use Minkowski_Polynomials;
                      8:
                      9: procedure Driver_for_Minkowski_Polynomials
                     10:                 ( file : in file_type;
                     11:                   n : in natural; mix : in Vector; t : in Triangulation;
                     12:                   alltri : in boolean; mixsub : out Mixed_Subdivision ) is
                     13:
                     14:   mp : Poly;
                     15:   timer : timing_widget;
                     16:
                     17:   procedure Coefficient_Subdivision
                     18:                  ( submix : in Vector; sub : in Mixed_Subdivision;
                     19:                    vol : out natural ) is
                     20:
                     21:     len : constant natural := Length_Of(sub);
                     22:     wrksub : Mixed_Subdivision := sub;
                     23:     volu : natural;
                     24:
                     25:   begin
                     26:     put(file,"#Cells of type "); put(file,submix); put(file," is " );
                     27:     put(file,len,1); new_line(file);
                     28:     if len = 0
                     29:      then volu := 0;
                     30:      else put(file,n,submix,wrksub,volu);
                     31:     end if;
                     32:     put(file,"The volume equals : "); put(file,volu,1); new_line(file);
                     33:     new_line(file);
                     34:     vol := volu;
                     35:   end Coefficient_Subdivision;
                     36:   procedure Coefficient_Subdivisions is
                     37:     new Minkowski_Polynomial_Subdivisions(Coefficient_Subdivision);
                     38:
                     39:   procedure Write_Minkowski_Polynomial ( file : in file_type; p : in Poly ) is
                     40:
                     41:     first : boolean;
                     42:     cnt : natural := 0;
                     43:
                     44:     procedure Minkowski_Term ( t : in Term; cont : out boolean ) is
                     45:     begin
                     46:       if first
                     47:        then first := false;
                     48:        else put(file," + "); cnt := cnt + 3;
                     49:       end if;
                     50:       put(file,integer(REAL_PART(t.cf)),1); cnt := cnt + 2;
                     51:       for i in t.dg'range loop
                     52:         if t.dg(i) /= 0
                     53:          then put(file,"*l"); put(file,i,1); cnt := cnt + 3;
                     54:               if t.dg(i) /= 1
                     55:                then put(file,"^"); put(file,t.dg(i),1);
                     56:                     cnt := cnt + 2;
                     57:               end if;
                     58:         end if;
                     59:       end loop;
                     60:       if cnt > 60
                     61:        then new_line(file); cnt := 0;
                     62:       end if;
                     63:       cont := true;
                     64:     end Minkowski_Term;
                     65:     procedure Minkowski_Terms is new Visiting_Iterator(Minkowski_Term);
                     66:
                     67:   begin
                     68:     Minkowski_Terms(p);
                     69:   end Write_Minkowski_Polynomial;
                     70:
                     71: begin
                     72:   tstart(timer);
                     73:   mp := Minkowski_Polynomial(n,mix'last);
                     74:   if not alltri
                     75:    then Minkowski_Polynomial(mp,t,n,mix,mixsub);
                     76:    else Coefficient_Subdivisions(mp,t,n,mix,mixsub);
                     77:   end if;
                     78:   tstop(timer);
                     79:   put_line(file,"the Minkowski-polynomial : ");
                     80:   Write_Minkowski_Polynomial(file,mp);
                     81:   new_line(file);
                     82:   new_line(file);
                     83:   print_times(file,timer,"computing the Minkowski-polynomial");
                     84:   Clear(mp);
                     85: end Driver_for_Minkowski_Polynomials;

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