[BACK]Return to red.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan

Diff for /OpenXM/src/kan96xx/Kan/red.c between version 1.5 and 1.9

version 1.5, 2003/07/30 09:00:52 version 1.9, 2004/09/13 11:24:11
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/kan96xx/Kan/red.c,v 1.4 2001/05/04 01:06:25 takayama Exp $ */  /* $OpenXM: OpenXM/src/kan96xx/Kan/red.c,v 1.8 2003/09/12 02:52:50 takayama Exp $ */
 #include <stdio.h>  #include <stdio.h>
 #include "datatype.h"  #include "datatype.h"
 #include "extern2.h"  #include "extern2.h"
Line 7 
Line 7 
 #define mymax(p,q) (p>q?p:q)  #define mymax(p,q) (p>q?p:q)
   
 int DebugReductionRed = 0;  int DebugReductionRed = 0;
   int DebugContentReduction = 0;
 extern int Sugar;  extern int Sugar;
   
 struct spValue sp_gen(f,g)  struct spValue sp_gen(f,g)
Line 151  POLY reduction1_gen_debug(f,g,needSyz,c,h)
Line 152  POLY reduction1_gen_debug(f,g,needSyz,c,h)
     getchar();      getchar();
     getchar();      getchar();
   }    }
   if (DebugReductionRed) {    if (DebugReductionRed & 1) {
     printf("%s --> %s\n",POLYToString(f,'*',1),POLYToString(f2,'*',1));      printf("%s --> %s\n",POLYToString(f,'*',1),POLYToString(f2,'*',1));
     }else if (DebugReductionRed & 2) {
       printf("(head) %s --> %s\n",POLYToString(head(f),'*',1),POLYToString(head(f2),'*',1));
   }    }
   
   f = f2;    f = f2;
   if (needSyz) {    if (needSyz) {
     *c = ppMult(sv.a,*c);      *c = ppMult(sv.a,*c);
Line 163  POLY reduction1_gen_debug(f,g,needSyz,c,h)
Line 167  POLY reduction1_gen_debug(f,g,needSyz,c,h)
   while ((*isReducible)(f,g)) {    while ((*isReducible)(f,g)) {
     sv = (*sp)(f,g);      sv = (*sp)(f,g);
     f2 = ppAddv(cpMult((sv.a)->coeffp,f),ppMult(sv.b,g));      f2 = ppAddv(cpMult((sv.a)->coeffp,f),ppMult(sv.b,g));
     if (DebugReductionRed) {      if (DebugReductionRed & 1) {
       printf("%s --> %s\n",POLYToString(f,'*',1),POLYToString(f2,'*',1));        printf("%s --> %s\n",POLYToString(f,'*',1),POLYToString(f2,'*',1));
           }else if (DebugReductionRed & 2) {
         printf("(head) %s --> %s\n",POLYToString(head(f),'*',1),POLYToString(head(f2),'*',1));
     }      }
     if (showLength) {printf(" [%d] ",pLength(f)); fflush(stdout);}      if (showLength) {printf(" [%d] ",pLength(f)); fflush(stdout);}
     if (!isOrdered(f2) || !isOrdered(f)) {      if (!isOrdered(f2) || !isOrdered(f)) {
Line 193  POLY reduction1_gen_debug(f,g,needSyz,c,h)
Line 199  POLY reduction1_gen_debug(f,g,needSyz,c,h)
       *h = ppAdd(ppMult(sv.a,*h),sv.b);        *h = ppAdd(ppMult(sv.a,*h),sv.b);
     }      }
   }    }
     if (DebugReductionRed & 2) printf("-----------  end of reduction_gen_debug\n");
   return(f);    return(f);
 }  }
   
Line 208  POLY reduction1_gen(f,g,needSyz,c,h)
Line 215  POLY reduction1_gen(f,g,needSyz,c,h)
   struct ring *rp;    struct ring *rp;
   struct spValue sv;    struct spValue sv;
   POLY f2;    POLY f2;
     extern DoCancel;
     static int crcount=0;
   
   if (needSyz) {    if (needSyz) {
     if (f ISZERO) { rp = CurrentRingp; } else {rp = f->m->ringp; }      if (f ISZERO) { rp = CurrentRingp; } else {rp = f->m->ringp; }
     *c = cxx(1,0,0,rp);      *c = cxx(1,0,0,rp);
     *h = ZERO;      *h = ZERO;
   }    }
     if ((DoCancel&4) && (f != POLYNULL)) shouldReduceContent(f,1);
   
   sv = (*sp)(f,g);    sv = (*sp)(f,g);
   f2 = ppAddv(cpMult((sv.a)->coeffp,f),ppMult(sv.b,g));    f2 = ppAddv(cpMult((sv.a)->coeffp,f),ppMult(sv.b,g));
Line 229  POLY reduction1_gen(f,g,needSyz,c,h)
Line 238  POLY reduction1_gen(f,g,needSyz,c,h)
     *h = ppAdd(ppMult(sv.a,*h),sv.b);      *h = ppAdd(ppMult(sv.a,*h),sv.b);
   }    }
   
   
   
   while ((*isReducible)(f,g)) {    while ((*isReducible)(f,g)) {
     sv = (*sp)(f,g);      sv = (*sp)(f,g);
     f2 = ppAddv(cpMult((sv.a)->coeffp,f),ppMult(sv.b,g));      f2 = ppAddv(cpMult((sv.a)->coeffp,f),ppMult(sv.b,g));
Line 242  POLY reduction1_gen(f,g,needSyz,c,h)
Line 253  POLY reduction1_gen(f,g,needSyz,c,h)
       *c = ppMult(sv.a,*c);        *c = ppMult(sv.a,*c);
       *h = ppAdd(ppMult(sv.a,*h),sv.b);        *h = ppAdd(ppMult(sv.a,*h),sv.b);
     }      }
   
           if ((DoCancel&4) && (f != POLYNULL)) {
             if (shouldReduceContent(f,0)) {
                   struct coeff *cont;
                   f = reduceContentOfPoly(f,&cont);
                   shouldReduceContent(f,1);
                   if (DebugContentReduction) {
                     printf("CoNT=%s ",coeffToString(cont));
                     if (crcount % 10 == 0) fflush(NULL);
                     crcount++;
                   }
             }
           }
   
   }    }
   return(f);    return(f);
 }  }
Line 325  POLY reduction_gen(f,gset,needSyz,syzp)
Line 350  POLY reduction_gen(f,gset,needSyz,syzp)
   
   extern struct ring *CurrentRingp;    extern struct ring *CurrentRingp;
   struct ring *rp;    struct ring *rp;
     extern DoCancel;
   
   if (needSyz) {    if (needSyz) {
     if (f ISZERO) { rp = CurrentRingp; } else { rp = f->m->ringp; }      if (f ISZERO) { rp = CurrentRingp; } else { rp = f->m->ringp; }
     cf = cxx(1,0,0,rp);      cf = cxx(1,0,0,rp);
     syz = ZERO;      syz = ZERO;
   }    }
     if (needSyz && DoCancel) {
           warningGradedSet("needSyz is not supported when DoCancel is turned on. DoCancel is set to 0.\n");
           DoCancel = 0;
     }
     if (DoCancel && (f != POLYNULL)) shouldReduceContent(f,1);
   
   reduced = 0; /* no */    reduced = 0; /* no */
   do {    do {
Line 347  POLY reduction_gen(f,gset,needSyz,syzp)
Line 378  POLY reduction_gen(f,gset,needSyz,syzp)
           if (f ISZERO) goto ss;            if (f ISZERO) goto ss;
           if ((*isReducible)(f,set->g[i])) {            if ((*isReducible)(f,set->g[i])) {
             f = (*reduction1)(f,set->g[i],needSyz,&cc,&cg);              f = (*reduction1)(f,set->g[i],needSyz,&cc,&cg);
   
               if (DoCancel && (f != POLYNULL)) {
                 if (shouldReduceContent(f,0)) {
                                   struct coeff *cont;
                   f = reduceContentOfPoly(f,&cont);
                   shouldReduceContent(f,1);
                   if (DebugContentReduction) printf("CONT=%s ",coeffToString(cont));
                             }
                           }
   
             if (needSyz) {              if (needSyz) {
               cf = ppMult(cc,cf);                cf = ppMult(cc,cf);
               syz = cpMult(toSyzCoeff(cc),syz);                syz = cpMult(toSyzCoeff(cc),syz);
Line 365  POLY reduction_gen(f,gset,needSyz,syzp)
Line 406  POLY reduction_gen(f,gset,needSyz,syzp)
     syzp->cf = cf;   /* cf is in the CurrentRingp */      syzp->cf = cf;   /* cf is in the CurrentRingp */
     syzp->syz = syz; /* syz is in the SyzRingp */      syzp->syz = syz; /* syz is in the SyzRingp */
   }    }
   
     if (DoCancel && (f != POLYNULL)) {
       if (f->m->ringp->p == 0) {
             struct coeff *cont;
             f = reduceContentOfPoly(f,&cont);
             if (DebugContentReduction) printf("cont=%s ",coeffToString(cont));
       }
     }
   
   return(f);    return(f);
 }  }
   
Line 611  void initSyzRingp() {
Line 661  void initSyzRingp() {
   if (ringName == NULL) errorGradedSet("No more memory.");    if (ringName == NULL) errorGradedSet("No more memory.");
   sprintf(ringName,"syzring%05d",ringSerial);    sprintf(ringName,"syzring%05d",ringSerial);
   SyzRingp->name = ringName;    SyzRingp->name = ringName;
     SyzRingp->partialEcart = 0;
 }  }
   
 POLY reductionCdr_except_grd_i(POLY f,struct gradedPolySet *gset,  POLY reductionCdr_except_grd_i(POLY f,struct gradedPolySet *gset,

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.9

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