[BACK]Return to array.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/array.c between version 1.46 and 1.47

version 1.46, 2005/02/08 18:06:05 version 1.47, 2005/11/27 00:07:05
Line 45 
Line 45 
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  *   *
  * $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.45 2005/01/23 14:03:47 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.46 2005/02/08 18:06:05 saito Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "base.h"  #include "base.h"
Line 876  void Pgeneric_gauss_elim(NODE arg,LIST *rp)
Line 876  void Pgeneric_gauss_elim(NODE arg,LIST *rp)
                 B : a rank(A) x col-rank(A) matrix                  B : a rank(A) x col-rank(A) matrix
                 R : a vector of length rank(A)                  R : a vector of length rank(A)
                 C : a vector of length col-rank(A)                  C : a vector of length col-rank(A)
                   RN : a vector of length rank(A) indicating useful rows
   
                 B[I] <-> x_{R[I]}+B[I][0]x_{C[0]}+B[I][1]x_{C[1]}+...                  B[I] <-> x_{R[I]}+B[I][0]x_{C[0]}+B[I][1]x_{C[1]}+...
 */  */
   
Line 883  void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp)
Line 885  void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp)
 {  {
         NODE n0;          NODE n0;
         MAT m,mat;          MAT m,mat;
         VECT rind,cind;          VECT rind,cind,rnum;
         Q **tmat;          Q **tmat;
         int **wmat;          int **wmat,**row0;
         Q *rib,*cib;          Q *rib,*cib,*rnb;
         int *colstat;          int *colstat,*p;
         Q q;          Q q;
         int md,i,j,k,l,row,col,t,rank;          int md,i,j,k,l,row,col,t,rank;
   
Line 896  void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp)
Line 898  void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp)
         m = (MAT)ARG0(arg); md = QTOS((Q)ARG1(arg));          m = (MAT)ARG0(arg); md = QTOS((Q)ARG1(arg));
         row = m->row; col = m->col; tmat = (Q **)m->body;          row = m->row; col = m->col; tmat = (Q **)m->body;
         wmat = (int **)almat(row,col);          wmat = (int **)almat(row,col);
   
           row0 = (int **)ALLOCA(row*sizeof(int *));
           for ( i = 0; i < row; i++ ) row0[i] = wmat[i];
   
         colstat = (int *)MALLOC_ATOMIC(col*sizeof(int));          colstat = (int *)MALLOC_ATOMIC(col*sizeof(int));
         for ( i = 0; i < row; i++ )          for ( i = 0; i < row; i++ )
                 for ( j = 0; j < col; j++ )                  for ( j = 0; j < col; j++ )
Line 908  void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp)
Line 914  void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp)
                                 wmat[i][j] = 0;                                  wmat[i][j] = 0;
         rank = generic_gauss_elim_mod(wmat,row,col,md,colstat);          rank = generic_gauss_elim_mod(wmat,row,col,md,colstat);
   
           MKVECT(rnum,rank);
           rnb = (Q *)rnum->body;
           for ( i = 0; i < rank; i++ )
                   for ( j = 0, p = wmat[i]; j < row; j++ )
                           if ( p == row0[j] )
                                   STOQ(j,rnb[i]);
   
         MKMAT(mat,rank,col-rank);          MKMAT(mat,rank,col-rank);
         tmat = (Q **)mat->body;          tmat = (Q **)mat->body;
         for ( i = 0; i < rank; i++ )          for ( i = 0; i < rank; i++ )
Line 925  void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp)
Line 938  void Pgeneric_gauss_elim_mod(NODE arg,LIST *rp)
                 } else {                  } else {
                         STOQ(j,cib[l]); l++;                          STOQ(j,cib[l]); l++;
                 }                  }
         n0 = mknode(3,mat,rind,cind);          n0 = mknode(4,mat,rind,cind,rnum);
         MKLIST(*rp,n0);          MKLIST(*rp,n0);
 }  }
   

Legend:
Removed from v.1.46  
changed lines
  Added in v.1.47

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