[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.32

version 1.31, 2001/09/17 02:47:07 version 1.32, 2001/09/17 07:16:58
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: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.31 2001/09/17 02:47:07 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 93  extern int do_weyl;
Line 93  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 228  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 248  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 short *)MALLOC_ATOMIC(sizeof(unsigned short)*len);
   
         NEWDL(s,nv);          NEWDL(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++ ) {
Line 281  CDP *b;
Line 258  CDP *b;
                 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 751  NODE f;
Line 704  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 769  int m;
Line 724  int m;
         int rank,nred,nsp,nonzero,spcol;          int rank,nred,nsp,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 832  int m;
Line 793  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 801  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 928  int m;
Line 888  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 2513  VECT *rp;
Line 2479  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.32

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