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

Annotation of OpenXM_contrib/PHC/Ada/Schubert/solve_pieri_leaves.adb, Revision 1.1.1.1

1.1       maekawa     1: with Standard_Complex_Numbers;           use Standard_Complex_Numbers;
                      2: with Standard_Complex_Vectors_io;        use Standard_Complex_Vectors_io;
                      3: with Standard_Natural_Vectors;
                      4: with Standard_Complex_Vectors;
                      5: with Standard_Complex_Linear_Solvers;    use Standard_Complex_Linear_Solvers;
                      6:
                      7: function Solve_Pieri_Leaves
                      8:            ( file : file_type; b1,b2 : Bracket; m : Matrix ) return Matrix is
                      9:
                     10:   res : Matrix(m'range(1),b1'range);
                     11:   n : constant natural := m'last(1);
                     12:   dim : constant natural := m'last(2)-1;  -- dimension of linear system
                     13:   equ : Bracket(1..dim);                  -- equations : res(equ(i),*) = 0
                     14:   sys : Matrix(1..dim,1..dim);
                     15:   rhs : Standard_Complex_Vectors.Vector(1..dim);
                     16:   gen : Standard_Complex_Vectors.Vector(1..n);
                     17:
                     18:   procedure Initialize_Solution_Plane is
                     19:
                     20:   -- DESCRIPTION :
                     21:   --   Fills in the patterns of the resulting p-plane and sets up the
                     22:   --   equations that the resulting plane has to satisfy.
                     23:   --   These equations define the space C.
                     24:
                     25:     cnt : natural := 0;
                     26:     zero_row : boolean;
                     27:
                     28:   begin
                     29:     for i in 1..n loop
                     30:       zero_row := true;
                     31:       for j in b1'range loop
                     32:         if ((i < b2(j)) or (i > n+1-b1(b1'last+1-j)))
                     33:          then null;
                     34:          else zero_row := false;
                     35:         end if;
                     36:       end loop;
                     37:       if zero_row
                     38:        then cnt := cnt+1;
                     39:             equ(cnt) := i;
                     40:       end if;
                     41:     end loop;
                     42:   end Initialize_Solution_Plane;
                     43:
                     44:   procedure Solve_Linear_System is
                     45:
                     46:   -- DESCRIPTION :
                     47:   --   Solves the linear system that determines the solution plane.
                     48:   --   The solution to the linear system gives the coefficients in the
                     49:   --   linear combination of the columns of the given m-plane that
                     50:   --   determines the generator for the line of intersection with the
                     51:   --   space C and the given m-plane.
                     52:
                     53:     ipvt : Standard_Natural_Vectors.Vector(1..dim);
                     54:     info : natural;
                     55:    -- orgsys : Standard_Complex_Matrices.Matrix(1..dim,1..dim);
                     56:    -- orgrhs,resi : Standard_Complex_Vectors.Vector(1..dim);
                     57:     use Standard_Complex_Vectors,Standard_Complex_Matrices;
                     58:
                     59:   begin
                     60:     for j in 1..dim loop
                     61:       for i in equ'range loop
                     62:         sys(i,j) := m(equ(i),j);
                     63:       end loop;
                     64:     end loop;
                     65:    -- orgsys := sys;
                     66:     for i in 1..dim loop
                     67:       rhs(i) := m(equ(i),m'last(2));
                     68:     end loop;
                     69:    -- orgrhs := rhs;
                     70:     lufac(sys,dim,ipvt,info);
                     71:     lusolve(sys,dim,ipvt,rhs);
                     72:     for i in 1..n loop       -- linear combination of the columns of m-plane
                     73:       gen(i) := -m(i,m'last(2));
                     74:       for j in rhs'range loop
                     75:         gen(i) := gen(i) + rhs(j)*m(i,j);
                     76:       end loop;
                     77:     end loop;
                     78:    -- put_line(file,"The solution to the linear system : ");
                     79:    -- put_line(file,rhs); new_line(file);
                     80:    -- resi := orgrhs - orgsys*rhs;
                     81:    -- put_line(file,"The residual vector of the linear system : ");
                     82:    -- put(file,resi,2); new_line(file);
                     83:    -- put_line(file,"The generator of the intersection : ");
                     84:    -- put_line(file,gen); new_line(file);
                     85:   end Solve_Linear_System;
                     86:
                     87:   procedure Determine_Solution_Plane is
                     88:
                     89:   -- DESCRIPTION :
                     90:   --   Determines the solution plane from the generator of the intersection
                     91:   --   of the space C with the given m-plane.
                     92:
                     93:   begin
                     94:     for i in 1..n loop
                     95:       for j in b1'range loop
                     96:         if ((i < b2(j)) or (i > n+1-b1(b1'last+1-j)))
                     97:          then res(i,j) := Create(0.0);
                     98:          else res(i,j) := gen(i);
                     99:         end if;
                    100:       end loop;
                    101:     end loop;
                    102:   end Determine_Solution_Plane;
                    103:
                    104: begin
                    105:   Initialize_Solution_Plane;
                    106:   Solve_Linear_System;
                    107:   Determine_Solution_Plane;
                    108:   return res;
                    109: end Solve_Pieri_Leaves;

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