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

Diff for /OpenXM_contrib2/asir2000/builtin/gr.c between version 1.31 and 1.35

version 1.31, 2001/09/17 02:47:07 version 1.35, 2001/09/18 00:56: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/gr.c,v 1.30 2001/09/17 01:18:34 noro Exp $   * $OpenXM$
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 60 
Line 60 
 #define INLINE  #define INLINE
 #endif  #endif
   
 #define ITOS(p) (((unsigned int)(p))&0x7fffffff)  
 #define STOI(i) ((P)((unsigned int)(i)|0x80000000))  
   
 #define NEXTVL(r,c) \  #define NEXTVL(r,c) \
 if(!(r)){NEWVL(r);(c)=(r);}else{NEWVL(NEXT(c));(c)=NEXT(c);}  if(!(r)){NEWVL(r);(c)=(r);}else{NEWVL(NEXT(c));(c)=NEXT(c);}
   
Line 93  extern int do_weyl;
Line 90  extern int do_weyl;
   
 extern DP_Print;  extern DP_Print;
   
   void dptoca(DP,unsigned int **);
 void _tf_to_vect_compress(NODE,DL *,CDP *);  void _tf_to_vect_compress(NODE,DL *,CDP *);
 NODE mul_dllist(DL,DP);  NODE mul_dllist(DL,DP);
 void dp_imul_d(DP,Q,DP *);  void dp_imul_d(DP,Q,DP *);
Line 227  int *b;
Line 225  int *b;
         }          }
 }  }
   
 /* create compressed poly */  
   
 void _dpmod_to_vect_compress(f,at,b)  
 DP f;  
 DL *at;  
 CDP *b;  
 {  
         int i,j,nv,len;  
         MP m;  
         CDP r;  
   
         nv = f->nv;  
         for ( m = BDY(f), len = 0; m; m = NEXT(m), len++ );  
         r = (CDP)MALLOC(sizeof(struct oCDP));  
         r->len = len;  
         r->body = (CM)MALLOC_ATOMIC(sizeof(struct oCM)*len);  
   
         for ( m = BDY(f), i = j = 0; m; m = NEXT(m), j++ ) {  
                 for ( ; !eqdl(nv,m->dl,at[i]); i++ );  
                 r->body[j].index = i;  
                 r->body[j].c = ITOS(m->c);  
         }  
         *b = r;  
 }  
   
 /* [t,findex] -> tf -> compressed vector */  /* [t,findex] -> tf -> compressed vector */
   
 void _tf_to_vect_compress(tf,at,b)  void _tf_to_vect_compress(tf,at,b)
Line 272  CDP *b;
Line 245  CDP *b;
         for ( m = BDY(f), len = 0; m; m = NEXT(m), len++ );          for ( m = BDY(f), len = 0; m; m = NEXT(m), len++ );
         r = (CDP)MALLOC(sizeof(struct oCDP));          r = (CDP)MALLOC(sizeof(struct oCDP));
         r->len = len;          r->len = len;
         r->body = (CM)MALLOC_ATOMIC(sizeof(struct oCM)*len);          r->psindex = (int)BDY(NEXT(tf));
           r->body = (unsigned int *)MALLOC_ATOMIC(sizeof(unsigned int)*len);
   
         NEWDL(s,nv);          NEWDL_NOINIT(s,nv);
         for ( m = BDY(f), i = j = 0; m; m = NEXT(m), j++ ) {          for ( m = BDY(f), i = j = 0; m; m = NEXT(m), j++ ) {
                 d1 = m->dl;                  d1 = m->dl;
                 s->td = t->td+d1->td;                  s->td = t->td+d1->td;
                 for ( k = 0; k < nv; k++ )                  for ( k = 0; k < nv; k++ )
                         s->d[k] = t->d[k]+d1->d[k];                          s->d[k] = t->d[k]+d1->d[k];
                 for ( ; !eqdl(nv,s,at[i]); i++ );                  for ( ; !eqdl(nv,s,at[i]); i++ );
                 r->body[j].index = i;                  r->body[j] = i;
                 r->body[j].c = ITOS(m->c);  
         }          }
         *b = r;          *b = r;
 }  }
   
 /* dense vector -> CDP  */  
 void compress_vect(a,n,rp)  
 int *a;  
 int n;  
 CDP *rp;  
 {  
         int i,j,nz;  
         CDP r;  
   
         for ( i = 0, nz = 0; i < n; i++ )  
                 if ( a[i] ) nz++;  
         *rp = r = (CDP)MALLOC(sizeof(struct oCDP));  
         r->len = nz;  
         r->body = (CM)MALLOC(sizeof(struct oCM)*nz);  
         for ( i = 0, j = 0; i < n; i++ ) {  
                 if ( a[i] ) {  
                         r->body[j].index = i;  
                         r->body[j].c = ITOS(a[i]);  
                         j++;  
                 }  
         }  
 }  
   
 void dp_to_vect(f,at,b)  void dp_to_vect(f,at,b)
 DP f;  DP f;
 DL *at;  DL *at;
Line 356  DP f;
Line 306  DP f;
         mp0 = 0;          mp0 = 0;
         for ( m = BDY(f); m; m = NEXT(m) ) {          for ( m = BDY(f); m; m = NEXT(m) ) {
                 NEXTNODE(mp0,mp);                  NEXTNODE(mp0,mp);
                 NEWDL(t,nv);                  NEWDL_NOINIT(t,nv);
                 d1 = m->dl;                  d1 = m->dl;
                 t->td = d->td+d1->td;                  t->td = d->td+d1->td;
                 for ( i = 0; i < nv; i++ )                  for ( i = 0; i < nv; i++ )
Line 619  LIST *rp;
Line 569  LIST *rp;
         }          }
         if ( fd0 ) NEXT(fd) = 0;          if ( fd0 ) NEXT(fd) = 0;
         setup_arrays(fd0,m,&s);          setup_arrays(fd0,m,&s);
           init_stat();
         x = gb_f4_mod(s,m);          x = gb_f4_mod(s,m);
         if ( !homogen ) {          if ( !homogen ) {
                 reduceall_mod(x,m,&xx); x = xx;                  reduceall_mod(x,m,&xx); x = xx;
Line 628  LIST *rp;
Line 579  LIST *rp;
         }          }
         if ( r0 ) NEXT(r) = 0;          if ( r0 ) NEXT(r) = 0;
         MKLIST(*rp,r0);          MKLIST(*rp,r0);
           print_stat();
 }  }
   
 NODE gb_f4(f)  NODE gb_f4(f)
Line 751  NODE f;
Line 703  NODE f;
   
 /* initial bases are monic */  /* initial bases are monic */
   
   unsigned int **psca;
   
 NODE gb_f4_mod(f,m)  NODE gb_f4_mod(f,m)
 NODE f;  NODE f;
 int m;  int m;
Line 766  int m;
Line 720  int m;
         int **spmat;          int **spmat;
         CDP *redmat;          CDP *redmat;
         int *colstat,*w,*w1;          int *colstat,*w,*w1;
         int rank,nred,nsp,nonzero,spcol;          int rank,nred,nsp,nsp0,nonzero,spcol;
         int *indred,*isred;          int *indred,*isred;
         CDP ri;          CDP ri;
           int pscalen;
         struct oEGT tmp0,tmp1,tmp2,eg_split_symb,eg_split_elim1,eg_split_elim2;          struct oEGT tmp0,tmp1,tmp2,eg_split_symb,eg_split_elim1,eg_split_elim2;
         extern struct oEGT eg_symb,eg_elim1,eg_elim2;          extern struct oEGT eg_symb,eg_elim1,eg_elim2;
   
           /* initialize coeffcient array list of ps[] */
           pscalen = pslen;
           psca = (unsigned int **)MALLOC(pscalen*sizeof(unsigned int *));
   
         init_eg(&eg_symb); init_eg(&eg_elim1); init_eg(&eg_elim2);          init_eg(&eg_symb); init_eg(&eg_elim1); init_eg(&eg_elim2);
         for ( gall = g = 0, d = 0, r = f; r; r = NEXT(r) ) {          for ( gall = g = 0, d = 0, r = f; r; r = NEXT(r) ) {
                 i = (int)BDY(r);                  i = (int)BDY(r);
                 d = updpairs(d,g,i);                  d = updpairs(d,g,i);
                 g = updbase(g,i);                  g = updbase(g,i);
                 gall = append_one(gall,i);                  gall = append_one(gall,i);
                   dptoca(ps[i],&psca[i]);
         }          }
         if ( gall )          if ( gall )
                 nv = ((DP)ps[(int)BDY(gall)])->nv;                  nv = ((DP)ps[(int)BDY(gall)])->nv;
Line 795  int m;
Line 755  int m;
                                 s0 = symb_merge(s0,dp_dllist(sp),nv);                                  s0 = symb_merge(s0,dp_dllist(sp),nv);
                         }                          }
                 }                  }
                   if ( DP_Print )
                           fprintf(asir_out,"initial spmat : %d x %d ",length(blist),length(s0));
                 /* s0 : all the terms appeared in symbolic reduction */                  /* s0 : all the terms appeared in symbolic reduction */
                 for ( s = s0, nred = 0; s; s = NEXT(s) ) {                  for ( s = s0, nred = 0; s; s = NEXT(s) ) {
                         for ( r = gall; r; r = NEXT(r) )                          for ( r = gall; r; r = NEXT(r) )
Line 811  int m;
Line 773  int m;
                                 nred++;                                  nred++;
                         }                          }
                 }                  }
                   if ( DP_Print )
                           fprintf(asir_out,"number of reducers : %d\n",nred);
   
                 /* the first nred polys in blist are reducers */                  /* the first nred polys in blist are reducers */
                 /* row = the number of all the polys */                  /* row = the number of all the polys */
Line 832  int m;
Line 796  int m;
                 redmat = (CDP *)MALLOC(nred*sizeof(CDP));                  redmat = (CDP *)MALLOC(nred*sizeof(CDP));
                 for ( i = 0, r = blist; i < nred; r = NEXT(r), i++ )                  for ( i = 0, r = blist; i < nred; r = NEXT(r), i++ )
                         _tf_to_vect_compress(BDY(r),at,&redmat[i]);                          _tf_to_vect_compress(BDY(r),at,&redmat[i]);
                 /* XXX */  
 /*              reduce_reducers_mod(redmat,nred,col,m); */  
                 /* register the position of the head term */                  /* register the position of the head term */
                 indred = (int *)MALLOC_ATOMIC(nred*sizeof(int));                  indred = (int *)MALLOC_ATOMIC(nred*sizeof(int));
                 bzero(indred,nred*sizeof(int));                  bzero(indred,nred*sizeof(int));
Line 841  int m;
Line 804  int m;
                 bzero(isred,col*sizeof(int));                  bzero(isred,col*sizeof(int));
                 for ( i = 0; i < nred; i++ ) {                  for ( i = 0; i < nred; i++ ) {
                         ri = redmat[i];                          ri = redmat[i];
                         indred[i] = ri->body[0].index;                          indred[i] = ri->body[0];
                         isred[indred[i]] = 1;                          isred[indred[i]] = 1;
                 }                  }
   
Line 878  int m;
Line 841  int m;
                         }                          }
                 }                  }
                 /* update nsp */                  /* update nsp */
                   nsp0 = nsp;
                 nsp = i;                  nsp = i;
   
                 /* XXX free redmat explicitly */                  /* XXX free redmat explicitly */
Line 913  int m;
Line 877  int m;
                         fprintf(asir_out,"\n");                          fprintf(asir_out,"\n");
                 }                  }
   
                   NZR += rank;
                   ZR += nsp0-rank;
   
                 if ( !rank )                  if ( !rank )
                         continue;                          continue;
   
Line 928  int m;
Line 895  int m;
                                 NEXT(mp) = 0;                                  NEXT(mp) = 0;
                                 MKDP(nv,mp0,nf); nf->sugar = dm->sugar;                                  MKDP(nv,mp0,nf); nf->sugar = dm->sugar;
                                 nh = newps_mod(nf,m);                                  nh = newps_mod(nf,m);
                                   if ( nh == pscalen ) {
                                           psca = (unsigned int **)
                                                   REALLOC(psca,2*pscalen*sizeof(unsigned int *));
                                           pscalen *= 2;
                                   }
                                   dptoca(ps[nh],&psca[nh]);
                                 d = updpairs(d,g,nh);                                  d = updpairs(d,g,nh);
                                 g = updbase(g,nh);                                  g = updbase(g,nh);
                                 gall = append_one(gall,nh);                                  gall = append_one(gall,nh);
Line 2196  void init_stat() {
Line 2169  void init_stat() {
         init_eg(&eg_nf); init_eg(&eg_nfm); init_eg(&eg_znfm);          init_eg(&eg_nf); init_eg(&eg_nfm); init_eg(&eg_znfm);
         init_eg(&eg_pz); init_eg(&eg_np);          init_eg(&eg_pz); init_eg(&eg_np);
         init_eg(&eg_ra); init_eg(&eg_mc); init_eg(&eg_gc);          init_eg(&eg_ra); init_eg(&eg_mc); init_eg(&eg_gc);
         ZR = NZR = TP = NBP = NFP = NDP = 0;          ZR = NZR = TP = NMP = NBP = NFP = NDP = 0;
 }  }
   
 void print_stat() {  void print_stat() {
Line 2513  VECT *rp;
Line 2486  VECT *rp;
         MKVECT(r,n); *rp = r;          MKVECT(r,n); *rp = r;
         for ( i = 0; i < n; i++ )          for ( i = 0; i < n; i++ )
                 mulq((Q)BDY(w)[i],(Q)c,(Q *)&BDY(r)[i]);                  mulq((Q)BDY(w)[i],(Q)c,(Q *)&BDY(r)[i]);
   }
   
   void dptoca(p,rp)
   DP p;
   unsigned int **rp;
   {
           int i;
           MP m;
           unsigned int *r;
   
           if ( !p )
                   *rp = 0;
           else {
                   for ( m = BDY(p), i = 0; m; m = NEXT(m), i++ );
                   *rp = r = (unsigned int *)MALLOC_ATOMIC(i*sizeof(unsigned int));
                   for ( m = BDY(p), i = 0; m; m = NEXT(m), i++ )
                           r[i] = ITOS(C(m));
           }
 }  }
   

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.35

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