[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.56 and 1.62

version 1.56, 2003/12/26 02:38:10 version 1.62, 2006/12/04 01:40:51
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.55 2003/12/25 08:46:19 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.61 2006/06/09 09:59:12 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 69  double get_rtime(); 
Line 69  double get_rtime(); 
   
 struct oEGT eg_nf,eg_nfm;  struct oEGT eg_nf,eg_nfm;
 struct oEGT eg_znfm,eg_pz,eg_np,eg_ra,eg_mc,eg_gc;  struct oEGT eg_znfm,eg_pz,eg_np,eg_ra,eg_mc,eg_gc;
 int TP,NBP,NMP,NFP,NDP,ZR,NZR;  int TP,N_BP,NMP,NFP,NDP,ZR,NZR;
   
 extern int (*cmpdl)();  extern int (*cmpdl)();
 extern int do_weyl;  extern int do_weyl;
Line 104  static int NoMC = 0;
Line 104  static int NoMC = 0;
 static int NoRA = 0;  static int NoRA = 0;
 static int ShowMag = 0;  static int ShowMag = 0;
 static int Stat = 0;  static int Stat = 0;
 static int Denominator = 1;  int Denominator = 1;
 int Top = 0;  int Top = 0;
 int Reverse = 0;  int Reverse = 0;
 static int Max_mag = 0;  static int Max_mag = 0;
Line 298  void pdl(NODE f)
Line 298  void pdl(NODE f)
 void dp_gr_main(LIST f,LIST v,Num homo,int modular,int field,struct order_spec *ord,LIST *rp)  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int field,struct order_spec *ord,LIST *rp)
 {  {
         int i,mindex,m,nochk;          int i,mindex,m,nochk;
         struct order_spec ord1;          struct order_spec *ord1;
         Q q;          Q q;
         VL fv,vv,vc;          VL fv,vv,vc;
         NODE fd,fd0,fi,fi0,r,r0,t,subst,x,s,xx;          NODE fd,fd0,fi,fi0,r,r0,t,subst,x,s,xx;
Line 325  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int
Line 325  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int
                 }                  }
                 if ( fd0 ) NEXT(fd) = 0;                  if ( fd0 ) NEXT(fd) = 0;
                 if ( fi0 ) NEXT(fi) = 0;                  if ( fi0 ) NEXT(fi) = 0;
                 initd(&ord1);                  initd(ord1);
         } else {          } else {
                 for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) {                  for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) {
                         NEXTNODE(fd0,fd);                          NEXTNODE(fd0,fd);
Line 349  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int
Line 349  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int
         init_stat();          init_stat();
         while ( 1 ) {          while ( 1 ) {
                 if ( homo ) {                  if ( homo ) {
                         initd(&ord1); CNVars = NVars+1;                          initd(ord1); CNVars = NVars+1;
                 }                  }
                 if ( DP_Print && modular ) {                  if ( DP_Print && modular ) {
                         fprintf(asir_out,"mod= %d, eval = ",m); printsubst(subst);                          fprintf(asir_out,"mod= %d, eval = ",m); printsubst(subst);
Line 407  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int
Line 407  void dp_gr_main(LIST f,LIST v,Num homo,int modular,int
                 fprintf(asir_out,"\nMax_mag=%d, Max_coef=%d\n",Max_mag, Max_coef);                  fprintf(asir_out,"\nMax_mag=%d, Max_coef=%d\n",Max_mag, Max_coef);
 }  }
   
   void dp_interreduce(LIST f,LIST v,int field,struct order_spec *ord,LIST *rp)
   {
           int i,mindex,m,nochk;
           struct order_spec *ord1;
           Q q;
           VL fv,vv,vc;
           NODE fd,fd0,fi,fi0,r,r0,t,subst,x,s,xx;
           NODE ind,ind0;
           LIST trace,gbindex;
           int input_is_dp = 0;
   
           mindex = 0; nochk = 0; dp_fcoeffs = field;
           get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc);
           NVars = length((NODE)vv); PCoeffs = vc ? 1 : 0; VC = vc;
           CNVars = NVars;
           if ( ord->id && NVars != ord->nv )
                   error("dp_interreduce : invalid order specification");
           initd(ord);
           for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) {
                   NEXTNODE(fd0,fd);
                   if ( BDY(t) && OID(BDY(t)) == O_DP ) {
                           dp_sort((DP)BDY(t),(DP *)&BDY(fd)); input_is_dp = 1;
                   } else
                           ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fd));
           }
           if ( fd0 ) NEXT(fd) = 0;
           fi0 = fd0;
           setup_arrays(fd0,0,&s);
           init_stat();
           x = s;
           reduceall(x,&xx); x = xx;
           for ( r0 = 0, ind0 = 0; x; x = NEXT(x) ) {
                   NEXTNODE(r0,r); dp_load((int)BDY(x),&ps[(int)BDY(x)]);
                   if ( input_is_dp )
                           BDY(r) = (pointer)ps[(int)BDY(x)];
                   else
                           dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r));
                   NEXTNODE(ind0,ind);
                   STOQ((int)BDY(x),q); BDY(ind) = q;
           }
           if ( r0 ) NEXT(r) = 0;
           if ( ind0 ) NEXT(ind) = 0;
           MKLIST(*rp,r0);
           MKLIST(gbindex,ind0);
   }
   
 void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struct order_spec *ord,LIST *rp)  void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struct order_spec *ord,LIST *rp)
 {  {
         struct order_spec ord1;          struct order_spec *ord1;
         VL fv,vv,vc;          VL fv,vv,vc;
         NODE fd,fd0,r,r0,t,x,s,xx;          NODE fd,fd0,r,r0,t,x,s,xx;
         DP a,b,c;          DP a,b,c;
Line 437  void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struc
Line 483  void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struc
                                 NEXTNODE(fd0,fd); BDY(fd) = (pointer)c;                                  NEXTNODE(fd0,fd); BDY(fd) = (pointer)c;
                         }                          }
                 }                  }
                 homogenize_order(ord,NVars,&ord1); initd(&ord1);                  homogenize_order(ord,NVars,&ord1); initd(ord1);
         } else {          } else {
                 for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) {                  for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) {
                         if ( BDY(t) && OID(BDY(t)) == O_DP ) {                          if ( BDY(t) && OID(BDY(t)) == O_DP ) {
Line 457  void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struc
Line 503  void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struc
         setup_arrays(fd0,m,&s);          setup_arrays(fd0,m,&s);
         init_stat();          init_stat();
         if ( homo ) {          if ( homo ) {
                 initd(&ord1); CNVars = NVars+1;                  initd(ord1); CNVars = NVars+1;
         }          }
 /* init_eg(&eg_red_mod); */  /* init_eg(&eg_red_mod); */
         x = gb_mod(s,m);          x = gb_mod(s,m);
Line 1139  void pltovl(LIST l,VL *vl)
Line 1185  void pltovl(LIST l,VL *vl)
         *vl = r0;          *vl = r0;
 }  }
   
   void vltopl(VL vl,LIST *l)
   {
           VL n;
           NODE r,r0;
           P p;
   
           n = vl;
           for ( r0 = 0; n; n = NEXT(n) ) {
                   NEXTNODE(r0,r); MKV(n->v,p); BDY(r) = (pointer)p;
           }
           if ( r0 ) NEXT(r) = 0;
           MKLIST(*l,r0);
   }
   
 void makesubst(VL v,NODE *s)  void makesubst(VL v,NODE *s)
 {  {
         NODE r,r0;          NODE r,r0;
Line 1369  void reduceall(NODE in,NODE *h)
Line 1429  void reduceall(NODE in,NODE *h)
         w = (int *)ALLOCA(n*sizeof(int));          w = (int *)ALLOCA(n*sizeof(int));
         for ( i = 0, t = r; i < n; i++, t = NEXT(t) )          for ( i = 0, t = r; i < n; i++, t = NEXT(t) )
                 w[i] = (int)BDY(t);                  w[i] = (int)BDY(t);
           /* w[i] < 0 : reduced to 0 */
         for ( i = 0; i < n; i++ ) {          for ( i = 0; i < n; i++ ) {
                 for ( top = 0, j = n-1; j >= 0; j-- )                  for ( top = 0, j = n-1; j >= 0; j-- )
                         if ( j != i ) {                          if ( w[j] >= 0 && j != i ) {
                                 MKNODE(t,(pointer)w[j],top); top = t;                                  MKNODE(t,(pointer)w[j],top); top = t;
                         }                          }
                 get_eg(&tmp0);                  get_eg(&tmp0);
Line 1393  void reduceall(NODE in,NODE *h)
Line 1454  void reduceall(NODE in,NODE *h)
                 if ( DP_Print || DP_PrintShort ) {                  if ( DP_Print || DP_PrintShort ) {
                         fprintf(asir_out,"."); fflush(asir_out);                          fprintf(asir_out,"."); fflush(asir_out);
                 }                  }
                 w[i] = newps(g1,0,(NODE)0);                  if ( g1 ) {
                           w[i] = newps(g1,0,(NODE)0);
                   } else {
                           w[i] = -1;
                   }
         }          }
         for ( top = 0, j = n-1; j >= 0; j-- ) {          for ( top = 0, j = n-1; j >= 0; j-- ) {
                 MKNODE(t,(pointer)w[j],top); top = t;                  if ( w[j] >= 0 ) {
                           MKNODE(t,(pointer)w[j],top); top = t;
                   }
         }          }
         *h = top;          *h = top;
         if ( DP_Print || DP_PrintShort )          if ( DP_Print || DP_PrintShort )
Line 1422  void reduceall_mod(NODE in,int m,NODE *h)
Line 1489  void reduceall_mod(NODE in,int m,NODE *h)
         w = (int *)ALLOCA(n*sizeof(int));          w = (int *)ALLOCA(n*sizeof(int));
         for ( i = 0, t = r; i < n; i++, t = NEXT(t) )          for ( i = 0, t = r; i < n; i++, t = NEXT(t) )
                 w[i] = (int)BDY(t);                  w[i] = (int)BDY(t);
           /* w[i] < 0 : reduced to 0 */
         for ( i = 0; i < n; i++ ) {          for ( i = 0; i < n; i++ ) {
                 for ( top = 0, j = n-1; j >= 0; j-- )                  for ( top = 0, j = n-1; j >= 0; j-- )
                         if ( j != i ) {                          if ( w[j] >= 0 && j != i ) {
                                 MKNODE(t,(pointer)w[j],top); top = t;                                  MKNODE(t,(pointer)w[j],top); top = t;
                         }                          }
                 get_eg(&tmp0);                  get_eg(&tmp0);
Line 1438  void reduceall_mod(NODE in,int m,NODE *h)
Line 1506  void reduceall_mod(NODE in,int m,NODE *h)
                 if ( DP_Print || DP_PrintShort ) {                  if ( DP_Print || DP_PrintShort ) {
                         fprintf(asir_out,"."); fflush(asir_out);                          fprintf(asir_out,"."); fflush(asir_out);
                 }                  }
                 w[i] = newps_mod(g,m);                  if ( g ) {
                           w[i] = newps_mod(g,m);
                   } else {
                           w[i] = -1;
                   }
         }          }
         for ( top = 0, j = n-1; j >= 0; j-- ) {          for ( top = 0, j = n-1; j >= 0; j-- ) {
                 MKNODE(t,(pointer)w[j],top); top = t;                  if ( w[j] >= 0 ) {
                           MKNODE(t,(pointer)w[j],top); top = t;
                   }
         }          }
         *h = top;          *h = top;
         if ( DP_Print || DP_PrintShort )          if ( DP_Print || DP_PrintShort )
Line 1856  DP_pairs updpairs( DP_pairs d, NODE /* of index */ g, 
Line 1930  DP_pairs updpairs( DP_pairs d, NODE /* of index */ g, 
         if ( !NoCriB && d ) {          if ( !NoCriB && d ) {
                 dl = DPPlength(d);                  dl = DPPlength(d);
                 d = criterion_B( d, t );                  d = criterion_B( d, t );
                 dl -= DPPlength(d); NBP += dl;                  dl -= DPPlength(d); N_BP += dl;
         }          }
         d1 = newpairs( g, t );          d1 = newpairs( g, t );
         if ( NEXT(d1) ) {          if ( NEXT(d1) ) {
Line 2343  void init_stat() {
Line 2417  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 = NMP = NBP = NFP = NDP = 0;          ZR = NZR = TP = NMP = N_BP = NFP = NDP = 0;
 }  }
   
 void print_stat() {  void print_stat() {
Line 2352  void print_stat() {
Line 2426  void print_stat() {
         print_eg("NF",&eg_nf); print_eg("NFM",&eg_nfm); print_eg("ZNFM",&eg_znfm);          print_eg("NF",&eg_nf); print_eg("NFM",&eg_nfm); print_eg("ZNFM",&eg_znfm);
         print_eg("PZ",&eg_pz); print_eg("NP",&eg_np);          print_eg("PZ",&eg_pz); print_eg("NP",&eg_np);
         print_eg("RA",&eg_ra); print_eg("MC",&eg_mc); print_eg("GC",&eg_gc);          print_eg("RA",&eg_ra); print_eg("MC",&eg_mc); print_eg("GC",&eg_gc);
         fprintf(asir_out,"T=%d,B=%d M=%d F=%d D=%d ZR=%d NZR=%d\n",TP,NBP,NMP,NFP,NDP,ZR,NZR);          fprintf(asir_out,"T=%d,B=%d M=%d F=%d D=%d ZR=%d NZR=%d\n",TP,N_BP,NMP,NFP,NDP,ZR,NZR);
 }  }
   
 /*  /*

Legend:
Removed from v.1.56  
changed lines
  Added in v.1.62

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