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

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Symmetry/symmetric_polyhedral_continuation.adb, Revision 1.1

1.1     ! maekawa     1: with integer_io;                         use integer_io;
        !             2: with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
        !             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 Standard_Complex_Laur_Polys;        use Standard_Complex_Laur_Polys;
        !             7: with Standard_Complex_Poly_Systems;      use Standard_Complex_Poly_Systems;
        !             8: with Standard_Laur_Poly_Convertors;      use Standard_Laur_Poly_Convertors;
        !             9: with Standard_Complex_Laur_Randomizers;  use Standard_Complex_Laur_Randomizers;
        !            10: with Lists_of_Integer_Vectors;           use Lists_of_Integer_Vectors;
        !            11: with Transforming_Integer_Vector_Lists;  use Transforming_Integer_Vector_Lists;
        !            12: with Arrays_of_Integer_Vector_Lists;     use Arrays_of_Integer_Vector_Lists;
        !            13: with Power_Lists;                        use Power_Lists;
        !            14: with Integer_Lifting_Utilities;          use Integer_Lifting_Utilities;
        !            15: with Transforming_Laurent_Systems;       use Transforming_Laurent_Systems;
        !            16: with Fewnomial_System_Solvers;           use Fewnomial_System_Solvers;
        !            17: with Integer_Polyhedral_Continuation;    use Integer_Polyhedral_Continuation;
        !            18: with Symmetric_BKK_Bound_Solvers;        use Symmetric_BKK_Bound_Solvers;
        !            19: with Orbits_of_Solutions;                use Orbits_of_Solutions;
        !            20:
        !            21: package body Symmetric_Polyhedral_Continuation is
        !            22:
        !            23:   function Select_Subsystem ( p : Laur_Sys; mix : Vector; mic : Mixed_Cell )
        !            24:                             return Laur_Sys is
        !            25:
        !            26:     res : Laur_Sys(p'range);
        !            27:     cnt : natural := 0;
        !            28:
        !            29:   begin
        !            30:     for k in mix'range loop
        !            31:       for l in 1..mix(k) loop
        !            32:         cnt := cnt + 1;
        !            33:         res(cnt) := Select_Terms(p(cnt),mic.pts(k));
        !            34:       end loop;
        !            35:     end loop;
        !            36:     return res;
        !            37:   end Select_Subsystem;
        !            38:
        !            39:   function Symmetric_Mixed_Solve
        !            40:                 ( file : file_type; grp : List_of_Permutations; sign : boolean;
        !            41:                   p : Laur_Sys; mixsub : Mixed_Subdivision;
        !            42:                   n : natural; mix : Vector ) return Solution_List is
        !            43:
        !            44:     sols,sols_last : Solution_List;
        !            45:     cnt : natural := 0;
        !            46:     tmp : Mixed_Subdivision := mixsub;
        !            47:
        !            48:     procedure Solve_Subsystem ( mic : in Mixed_Cell ) is
        !            49:
        !            50:       q : Laur_Sys(p'range) := Select_Subsystem(p,mix,mic);
        !            51:       sq : Laur_Sys(q'range);
        !            52:       qsols : Solution_List;
        !            53:       fail : boolean;
        !            54:       eps : constant double_float := 10.0**(-10);
        !            55:
        !            56:     begin
        !            57:       new_line(file);
        !            58:       put(file,"*** CONSIDERING SUBSYSTEM "); put(file,cnt,1);
        !            59:       put_line(file," ***");
        !            60:       new_line(file);
        !            61:       Reduce(n+1,q); sq := Shift(q);
        !            62:       declare
        !            63:         pq : Poly_Sys(q'range) := Laurent_to_Polynomial_System(sq);
        !            64:       begin
        !            65:         Solve(sq,qsols,fail);
        !            66:         if not fail
        !            67:          then put_line(file,"It is a fewnomial system.");
        !            68:          else put_line(file,"No fewnomial system.");
        !            69:               if mic.sub = null
        !            70:                then put_line(file,"Calling the black box solver.");
        !            71:                     qsols := Symmetric_BKK_Solve(file,pq,grp,sign);
        !            72:                else put_line(file,"Using the refinement of the cell.");
        !            73:                     declare
        !            74:                       sup : Array_of_Lists(q'range);
        !            75:                       cnt : natural := sup'first;
        !            76:                       lif : Array_of_Lists(mix'range);
        !            77:                       lifq : Laur_Sys(q'range);
        !            78:                     begin
        !            79:                       for i in mic.pts'range loop
        !            80:                         sup(cnt) := Reduce(mic.pts(i),q'last+1);
        !            81:                         for j in 1..(mix(i)-1) loop
        !            82:                           Copy(sup(cnt),sup(cnt+j));
        !            83:                         end loop;
        !            84:                         cnt := cnt + mix(i);
        !            85:                       end loop;
        !            86:                       lif := Induced_Lifting(n,mix,sup,mic.sub.all);
        !            87:                       lifq := Perform_Lifting(n,mix,lif,q);
        !            88:                       qsols := Symmetric_Mixed_Solve
        !            89:                                  (file,grp,sign,lifq,mic.sub.all,n,mix);
        !            90:                       Deep_Clear(sup); Deep_Clear(lif); Clear(lifq);
        !            91:                     end;
        !            92:               end if;
        !            93:               Set_Continuation_Parameter(qsols,Create(0.0));
        !            94:         end if;
        !            95:         put(file,Length_Of(qsols),1);
        !            96:         put_line(file," solutions found.");
        !            97:         if not Is_Null(qsols)
        !            98:          then Analyze(grp,sign,eps,qsols);
        !            99:               put(file,Length_Of(qsols),1);
        !           100:               put_line(file," generating solutions found.");
        !           101:               Mixed_Continuation(file,p,mic.nor.all,qsols);
        !           102:               Concat(sols,sols_last,qsols);
        !           103:         end if;
        !           104:         Clear(pq); Clear(sq);
        !           105:       end;
        !           106:       Clear(q); -- Shallow_Clear(qsols);
        !           107:     end Solve_Subsystem;
        !           108:
        !           109:   begin
        !           110:     while not Is_Null(tmp) loop
        !           111:       cnt := cnt + 1;
        !           112:       Solve_Subsystem(Head_Of(tmp));
        !           113:       tmp := Tail_Of(tmp);
        !           114:     end loop;
        !           115:     return sols;
        !           116:   end Symmetric_Mixed_Solve;
        !           117:
        !           118:   function Symmetric_Mixed_Solve
        !           119:                 ( file : file_type; sign : boolean; p : Laur_Sys;
        !           120:                   mixsub : Mixed_Subdivision; n : natural;
        !           121:                   mix : Vector ) return Solution_List is
        !           122:
        !           123:     sols,sols_last : Solution_List;
        !           124:     cnt : natural;
        !           125:     tmp : Mixed_Subdivision := mixsub;
        !           126:
        !           127:     procedure Solve_Subsystem ( mic : in Mixed_Cell ) is
        !           128:
        !           129:       q : Laur_Sys(p'range) := Select_Subsystem(p,mix,mic);
        !           130:       sq : Laur_Sys(q'range);
        !           131:       qsols,genqsols : Solution_List;
        !           132:       fail : boolean;
        !           133:       eps : constant double_float := 10.0**(-10);
        !           134:
        !           135:     begin
        !           136:       new_line(file);
        !           137:       put(file,"*** CONSIDERING SUBSYSTEM "); put(file,cnt,1);
        !           138:       put_line(file," ***");
        !           139:       new_line(file);
        !           140:       Reduce(n+1,q); sq := Shift(q);
        !           141:       declare
        !           142:         pq : Poly_Sys(q'range) := Laurent_to_Polynomial_System(sq);
        !           143:       begin
        !           144:         Solve(sq,qsols,fail);
        !           145:         if not fail
        !           146:          then put_line(file,"It is a fewnomial system.");
        !           147:          else put_line(file,"No fewnomial system.");
        !           148:               if mic.sub = null
        !           149:                then put_line(file,"Calling the black box solver.");
        !           150:                     qsols := Symmetric_BKK_Solve(file,pq,sign);
        !           151:                else put_line(file,"Using the refinement of the cell.");
        !           152:                     declare
        !           153:                       sup : Array_of_Lists(q'range);
        !           154:                       cnt : natural := sup'first;
        !           155:                       lif : Array_of_Lists(mix'range);
        !           156:                       lifq : Laur_Sys(q'range);
        !           157:                     begin
        !           158:                       for i in mic.pts'range loop
        !           159:                         sup(cnt) := Reduce(mic.pts(i),q'last+1);
        !           160:                         for j in 1..(mix(i)-1) loop
        !           161:                           Copy(sup(cnt),sup(cnt+j));
        !           162:                         end loop;
        !           163:                         cnt := cnt + mix(i);
        !           164:                       end loop;
        !           165:                       lif := Induced_Lifting(n,mix,sup,mic.sub.all);
        !           166:                       lifq := Perform_Lifting(n,mix,lif,q);
        !           167:                       qsols := Symmetric_Mixed_Solve(file,sign,lifq,
        !           168:                                                      mic.sub.all,n,mix);
        !           169:                       Deep_Clear(sup); Deep_Clear(lif); Clear(lifq);
        !           170:                     end;
        !           171:               end if;
        !           172:               Set_Continuation_Parameter(qsols,Create(0.0));
        !           173:         end if;
        !           174:         put(file,Length_Of(qsols),1);
        !           175:         put_line(file," solutions found.");
        !           176:         if not Is_Null(qsols)
        !           177:          then genqsols := Generating(qsols,sign,eps);
        !           178:               put(file,Length_Of(genqsols),1);
        !           179:               put_line(file," generating solutions found.");
        !           180:               Mixed_Continuation(file,p,mic.nor.all,genqsols);
        !           181:               Concat(sols,sols_last,genqsols);
        !           182:         end if;
        !           183:         Clear(pq); Clear(sq);
        !           184:       end;
        !           185:       Clear(q); -- Shallow_Clear(genqsols);
        !           186:     end Solve_Subsystem;
        !           187:
        !           188:   begin
        !           189:     while not Is_Null(tmp) loop
        !           190:       cnt := cnt + 1;
        !           191:       Solve_Subsystem(Head_Of(tmp));
        !           192:       tmp := Tail_Of(tmp);
        !           193:     end loop;
        !           194:     return sols;
        !           195:   end Symmetric_Mixed_Solve;
        !           196:
        !           197: end Symmetric_Polyhedral_Continuation;

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