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

Diff for /OpenXM_contrib2/asir2000/engine/nd.c between version 1.226 and 1.230

version 1.226, 2016/04/05 04:21:18 version 1.230, 2016/12/02 02:12:00
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.225 2016/03/31 02:42:43 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.229 2016/11/17 05:33:20 noro Exp $ */
   
 #include "nd.h"  #include "nd.h"
   
Line 93  ND ndgztond(ND p);
Line 93  ND ndgztond(ND p);
 void Pdp_set_weight(NODE,VECT *);  void Pdp_set_weight(NODE,VECT *);
 void Pox_cmo_rpc(NODE,Obj *);  void Pox_cmo_rpc(NODE,Obj *);
   
 extern int Denominator,DP_Multiple;  extern int Denominator,DP_Multiple,MaxDeg;
   
 #define BLEN (8*sizeof(unsigned long))  #define BLEN (8*sizeof(unsigned long))
   
Line 173  INLINE int nd_length(ND p)
Line 173  INLINE int nd_length(ND p)
     }      }
 }  }
   
   extern int dp_negative_weight;
   
 INLINE int ndl_reducible(UINT *d1,UINT *d2)  INLINE int ndl_reducible(UINT *d1,UINT *d2)
 {  {
     UINT u1,u2;      UINT u1,u2;
Line 180  INLINE int ndl_reducible(UINT *d1,UINT *d2)
Line 182  INLINE int ndl_reducible(UINT *d1,UINT *d2)
   
     if ( nd_module && (MPOS(d1) != MPOS(d2)) ) return 0;      if ( nd_module && (MPOS(d1) != MPOS(d2)) ) return 0;
   
     if ( TD(d1) < TD(d2) ) return 0;      if ( !dp_negative_weight && TD(d1) < TD(d2) ) return 0;
 #if USE_UNROLL  #if USE_UNROLL
     switch ( nd_bpe ) {      switch ( nd_bpe ) {
         case 3:          case 3:
Line 2005  NODE nd_gb(int m,int ishomo,int checkonly,int gensyz,i
Line 2007  NODE nd_gb(int m,int ishomo,int checkonly,int gensyz,i
     while ( d ) {      while ( d ) {
 again:  again:
         l = nd_minp(d,&d);          l = nd_minp(d,&d);
           if ( MaxDeg > 0 && SG(l) > MaxDeg ) break;
         if ( SG(l) != sugar ) {          if ( SG(l) != sugar ) {
             if ( ishomo ) {              if ( ishomo ) {
                 diag_count = 0;                  diag_count = 0;
Line 2263  NODE nd_gb_trace(int m,int ishomo,int **indp)
Line 2266  NODE nd_gb_trace(int m,int ishomo,int **indp)
     while ( d ) {      while ( d ) {
 again:  again:
         l = nd_minp(d,&d);          l = nd_minp(d,&d);
           if ( MaxDeg > 0 && SG(l) > MaxDeg ) break;
         if ( SG(l) != sugar ) {          if ( SG(l) != sugar ) {
 #if 1  #if 1
             if ( ishomo ) {              if ( ishomo ) {
Line 2360  again:
Line 2364  again:
         FREENDP(l);          FREENDP(l);
     }      }
     if ( nd_nalg ) {      if ( nd_nalg ) {
         print_eg("monic",&eg_monic);          if ( DP_Print ) {
         print_eg("invdalg",&eg_invdalg);            print_eg("monic",&eg_monic);
         print_eg("le",&eg_le);            print_eg("invdalg",&eg_invdalg);
             print_eg("le",&eg_le);
           }
     }      }
         conv_ilist(nd_demand,1,g,indp);          conv_ilist(nd_demand,1,g,indp);
     if ( DP_Print ) { printf("nd_gb_trace done.\n"); fflush(stdout); }      if ( DP_Print ) { printf("nd_gb_trace done.\n"); fflush(stdout); }
Line 3048  void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int 
Line 3054  void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int 
     ndv_alloc = 0;      ndv_alloc = 0;
 #endif  #endif
     get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&nd_vc);      get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&nd_vc);
       if ( m && nd_vc )
          error("nd_{gr,f4} : computation over Fp(X) is unsupported. Use dp_gr_mod_main().");
     for ( nvar = 0, tv = vv; tv; tv = NEXT(tv), nvar++ );      for ( nvar = 0, tv = vv; tv; tv = NEXT(tv), nvar++ );
     switch ( ord->id ) {      switch ( ord->id ) {
         case 1:          case 1:
Line 3562  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
Line 3570  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
         for ( t = fd0; t; t = NEXT(t) )          for ( t = fd0; t; t = NEXT(t) )
             ndv_homogenize((NDV)BDY(t),obpe,oadv,oepos,ompos);              ndv_homogenize((NDV)BDY(t),obpe,oadv,oepos,ompos);
     }      }
       if ( MaxDeg > 0 ) nocheck = 1;
     while ( 1 ) {      while ( 1 ) {
                 tl1 = tl2 = tl3 = tl4 = 0;                  tl1 = tl2 = tl3 = tl4 = 0;
         if ( Demand )          if ( Demand )
Line 6201  NODE nd_f4(int m,int **indp)
Line 6210  NODE nd_f4(int m,int **indp)
         get_eg(&eg0);          get_eg(&eg0);
         l = nd_minsugarp(d,&d);          l = nd_minsugarp(d,&d);
         sugar = SG(l);          sugar = SG(l);
           if ( MaxDeg > 0 && sugar > MaxDeg ) break;
         if ( nd_nzlist ) {          if ( nd_nzlist ) {
             for ( tn = nd_nzlist; tn; tn = NEXT(tn) ) {              for ( tn = nd_nzlist; tn; tn = NEXT(tn) ) {
                 node = BDY((LIST)BDY(tn));                  node = BDY((LIST)BDY(tn));
                             if ( QTOS((Q)ARG0(node)) == sugar ) break;                              if ( QTOS((Q)ARG0(node)) == sugar ) break;
             }              }
                         if ( tn ) {                          if ( tn ) {
                   nd_nzlist = NEXT(nd_nzlist);
                                 for ( t = l, ll0 = 0; t; t = NEXT(t) ) {                                  for ( t = l, ll0 = 0; t; t = NEXT(t) ) {
                         for ( tn = BDY((LIST)ARG1(node)); tn; tn = NEXT(tn) ) {                          for ( tn = BDY((LIST)ARG1(node)); tn; tn = NEXT(tn) ) {
                                         i1s = QTOS((Q)ARG0(BDY((LIST)BDY(tn))));                                          i1s = QTOS((Q)ARG0(BDY((LIST)BDY(tn))));
Line 6313  NODE nd_f4_trace(int m,int **indp)
Line 6324  NODE nd_f4_trace(int m,int **indp)
         get_eg(&eg0);          get_eg(&eg0);
         l = nd_minsugarp(d,&d);          l = nd_minsugarp(d,&d);
         sugar = SG(l);          sugar = SG(l);
           if ( MaxDeg > 0 && sugar > MaxDeg ) break;
         bucket = create_pbucket();          bucket = create_pbucket();
         stat = nd_sp_f4(m,0,l,bucket);          stat = nd_sp_f4(m,0,l,bucket);
         if ( !stat ) {          if ( !stat ) {
Line 6622  init_eg(&eg_search);
Line 6634  init_eg(&eg_search);
                 }                  }
         }          }
         mat->row = i;          mat->row = i;
     fprintf(asir_out,"%dx%d,",mat->row,mat->col); fflush(asir_out);      if ( DP_Print ) {
         fprintf(asir_out,"%dx%d,",mat->row,mat->col); fflush(asir_out);
       }
         size = ((col+BLEN-1)/BLEN)*sizeof(unsigned long);          size = ((col+BLEN-1)/BLEN)*sizeof(unsigned long);
         v = CALLOC((col+BLEN-1)/BLEN,sizeof(unsigned long));          v = CALLOC((col+BLEN-1)/BLEN,sizeof(unsigned long));
     for ( rp = rp0, i = 0; rp; rp = NEXT(rp), i++ ) {      for ( rp = rp0, i = 0; rp; rp = NEXT(rp), i++ ) {
Line 6676  init_eg(&eg_search);
Line 6690  init_eg(&eg_search);
     for ( i = 0; i < col; i++ ) rhead[i] = 0;      for ( i = 0; i < col; i++ ) rhead[i] = 0;
   
     /* construction of index arrays */      /* construction of index arrays */
         fprintf(stderr,"%dx%d,",nsp+nred,col);      if ( DP_Print ) {
             fprintf(stderr,"%dx%d,",nsp+nred,col);
       }
     rvect = (NM_ind_pair *)ALLOCA(nred*sizeof(NM_ind_pair));      rvect = (NM_ind_pair *)ALLOCA(nred*sizeof(NM_ind_pair));
     s0hash = (int *)ALLOCA(col*sizeof(int));      s0hash = (int *)ALLOCA(col*sizeof(int));
     for ( i = 0, s = s0vect; i < col; i++, s += nd_wpd )      for ( i = 0, s = s0vect; i < col; i++, s += nd_wpd )
Line 6690  init_eg(&eg_search);
Line 6706  init_eg(&eg_search);
         r0 = nd_f4_red_main(m,sp0,nsp,s0vect,col,rvect,rhead,imat,nred,nz);          r0 = nd_f4_red_main(m,sp0,nsp,s0vect,col,rvect,rhead,imat,nred,nz);
     else      else
         r0 = nd_f4_red_gz_main(sp0,nsp,trace,s0vect,col,rvect,rhead,imat,nred);          r0 = nd_f4_red_gz_main(sp0,nsp,trace,s0vect,col,rvect,rhead,imat,nred);
 print_eg("search",&eg_search);      if ( DP_Print ) print_eg("search",&eg_search);
     return r0;      return r0;
 }  }
   

Legend:
Removed from v.1.226  
changed lines
  Added in v.1.230

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