[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.157 and 1.162

version 1.157, 2009/01/04 05:44:51 version 1.162, 2009/01/05 02:47:39
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.156 2008/05/23 01:24:21 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.161 2009/01/05 02:08:18 noro Exp $ */
   
 #include "nd.h"  #include "nd.h"
   
Line 46  static int nd_worb_len;
Line 46  static int nd_worb_len;
 static int nd_found,nd_create,nd_notfirst;  static int nd_found,nd_create,nd_notfirst;
 static int nmv_adv;  static int nmv_adv;
 static int nd_demand;  static int nd_demand;
 static int nd_module,nd_istop,nd_mpos;  static int nd_module,nd_ispot,nd_mpos;
   
 NumberField get_numberfield();  NumberField get_numberfield();
 UINT *nd_det_compute_bound(NDV **dm,int n,int j);  UINT *nd_det_compute_bound(NDV **dm,int n,int j);
Line 57  NDV plain_vect_to_ndv_q(Q *mat,int col,UINT *s0vect);
Line 57  NDV plain_vect_to_ndv_q(Q *mat,int col,UINT *s0vect);
 LIST ndvtopl(int mod,VL vl,VL dvl,NDV p,int rank);  LIST ndvtopl(int mod,VL vl,VL dvl,NDV p,int rank);
 NDV pltondv(VL vl,VL dvl,LIST p);  NDV pltondv(VL vl,VL dvl,LIST p);
 void pltozpl(LIST l,Q *cont,LIST *pp);  void pltozpl(LIST l,Q *cont,LIST *pp);
 void ndl_lcm_nocheck(UINT *d1,unsigned *d2,UINT *d);  void ndl_max(UINT *d1,unsigned *d2,UINT *d);
   pointer GC_malloc_atomic_ignore_off_page(int);
   
 extern int Denominator,DP_Multiple;  extern int Denominator,DP_Multiple;
   
Line 368  void ndl_lcm(UINT *d1,unsigned *d2,UINT *d)
Line 369  void ndl_lcm(UINT *d1,unsigned *d2,UINT *d)
     if ( nd_module ) MPOS(d) = MPOS(d1);      if ( nd_module ) MPOS(d) = MPOS(d1);
 }  }
   
 void ndl_lcm_nocheck(UINT *d1,unsigned *d2,UINT *d)  void ndl_max(UINT *d1,unsigned *d2,UINT *d)
 {  {
     UINT t1,t2,u,u1,u2;      UINT t1,t2,u,u1,u2;
     int i,j,l;      int i,j,l;
   
 #if USE_UNROLL  
     switch ( nd_bpe ) {  
         case 3:  
             for ( i = nd_exporigin; i < nd_wpd; i++ ) {  
                 u1 = d1[i]; u2 = d2[i];  
                 t1 = (u1&0x38000000); t2 = (u2&0x38000000); u = t1>t2?t1:t2;  
                 t1 = (u1& 0x7000000); t2 = (u2& 0x7000000); u |= t1>t2?t1:t2;  
                 t1 = (u1&  0xe00000); t2 = (u2&  0xe00000); u |= t1>t2?t1:t2;  
                 t1 = (u1&  0x1c0000); t2 = (u2&  0x1c0000); u |= t1>t2?t1:t2;  
                 t1 = (u1&   0x38000); t2 = (u2&   0x38000); u |= t1>t2?t1:t2;  
                 t1 = (u1&    0x7000); t2 = (u2&    0x7000); u |= t1>t2?t1:t2;  
                 t1 = (u1&     0xe00); t2 = (u2&     0xe00); u |= t1>t2?t1:t2;  
                 t1 = (u1&     0x1c0); t2 = (u2&     0x1c0); u |= t1>t2?t1:t2;  
                 t1 = (u1&      0x38); t2 = (u2&      0x38); u |= t1>t2?t1:t2;  
                 t1 = (u1&       0x7); t2 = (u2&       0x7); u |= t1>t2?t1:t2;  
                 d[i] = u;  
             }  
             break;  
         case 4:  
             for ( i = nd_exporigin; i < nd_wpd; i++ ) {  
                 u1 = d1[i]; u2 = d2[i];  
                 t1 = (u1&0xf0000000); t2 = (u2&0xf0000000); u = t1>t2?t1:t2;  
                 t1 = (u1& 0xf000000); t2 = (u2& 0xf000000); u |= t1>t2?t1:t2;  
                 t1 = (u1&  0xf00000); t2 = (u2&  0xf00000); u |= t1>t2?t1:t2;  
                 t1 = (u1&   0xf0000); t2 = (u2&   0xf0000); u |= t1>t2?t1:t2;  
                 t1 = (u1&    0xf000); t2 = (u2&    0xf000); u |= t1>t2?t1:t2;  
                 t1 = (u1&     0xf00); t2 = (u2&     0xf00); u |= t1>t2?t1:t2;  
                 t1 = (u1&      0xf0); t2 = (u2&      0xf0); u |= t1>t2?t1:t2;  
                 t1 = (u1&       0xf); t2 = (u2&       0xf); u |= t1>t2?t1:t2;  
                 d[i] = u;  
             }  
             break;  
         case 6:  
             for ( i = nd_exporigin; i < nd_wpd; i++ ) {  
                 u1 = d1[i]; u2 = d2[i];  
                 t1 = (u1&0x3f000000); t2 = (u2&0x3f000000); u = t1>t2?t1:t2;  
                 t1 = (u1&  0xfc0000); t2 = (u2&  0xfc0000); u |= t1>t2?t1:t2;  
                 t1 = (u1&   0x3f000); t2 = (u2&   0x3f000); u |= t1>t2?t1:t2;  
                 t1 = (u1&     0xfc0); t2 = (u2&     0xfc0); u |= t1>t2?t1:t2;  
                 t1 = (u1&      0x3f); t2 = (u2&      0x3f); u |= t1>t2?t1:t2;  
                 d[i] = u;  
             }  
             break;  
         case 8:  
             for ( i = nd_exporigin; i < nd_wpd; i++ ) {  
                 u1 = d1[i]; u2 = d2[i];  
                 t1 = (u1&0xff000000); t2 = (u2&0xff000000); u = t1>t2?t1:t2;  
                 t1 = (u1&  0xff0000); t2 = (u2&  0xff0000); u |= t1>t2?t1:t2;  
                 t1 = (u1&    0xff00); t2 = (u2&    0xff00); u |= t1>t2?t1:t2;  
                 t1 = (u1&      0xff); t2 = (u2&      0xff); u |= t1>t2?t1:t2;  
                 d[i] = u;  
             }  
             break;  
         case 16:  
             for ( i = nd_exporigin; i < nd_wpd; i++ ) {  
                 u1 = d1[i]; u2 = d2[i];  
                 t1 = (u1&0xffff0000); t2 = (u2&0xffff0000); u = t1>t2?t1:t2;  
                 t1 = (u1&    0xffff); t2 = (u2&    0xffff); u |= t1>t2?t1:t2;  
                 d[i] = u;  
             }  
             break;  
         case 32:  
             for ( i = nd_exporigin; i < nd_wpd; i++ ) {  
                 u1 = d1[i]; u2 = d2[i];  
                 d[i] = u1>u2?u1:u2;  
             }  
             break;  
         default:  
             for ( i = nd_exporigin; i < nd_wpd; i++ ) {  
                 u1 = d1[i]; u2 = d2[i];  
                 for ( j = 0, u = 0; j < nd_epw; j++ ) {  
                     t1 = (u1&nd_mask[j]); t2 = (u2&nd_mask[j]); u |= t1>t2?t1:t2;  
                 }  
                 d[i] = u;  
             }  
             break;  
     }  
 #else  
     for ( i = nd_exporigin; i < nd_wpd; i++ ) {      for ( i = nd_exporigin; i < nd_wpd; i++ ) {
         u1 = d1[i]; u2 = d2[i];          u1 = d1[i]; u2 = d2[i];
         for ( j = 0, u = 0; j < nd_epw; j++ ) {          for ( j = 0, u = 0; j < nd_epw; j++ ) {
Line 458  void ndl_lcm_nocheck(UINT *d1,unsigned *d2,UINT *d)
Line 381  void ndl_lcm_nocheck(UINT *d1,unsigned *d2,UINT *d)
         }          }
         d[i] = u;          d[i] = u;
     }      }
 #endif  
     TD(d) = ndl_weight(d);  
     if ( nd_blockmask ) ndl_weight_mask(d);  
     if ( nd_module ) MPOS(d) = MPOS(d1);  
 }  }
   
 int ndl_weight(UINT *d)  int ndl_weight(UINT *d)
Line 480  int ndl_weight(UINT *d)
Line 399  int ndl_weight(UINT *d)
             for ( j = 0; j < nd_epw; j++, u>>=nd_bpe )              for ( j = 0; j < nd_epw; j++, u>>=nd_bpe )
                 t += (u&nd_mask0);                  t += (u&nd_mask0);
         }          }
           if ( nd_module && current_module_weight_vector && MPOS(d) )
                   t += current_module_weight_vector[MPOS(d)];
     return t;      return t;
 }  }
   
Line 649  int ndl_module_grlex_compare(UINT *d1,UINT *d2)
Line 570  int ndl_module_grlex_compare(UINT *d1,UINT *d2)
 {  {
     int i;      int i;
   
     if ( nd_istop ) {      if ( nd_ispot ) {
         if ( MPOS(d1) < MPOS(d2) ) return 1;          if ( MPOS(d1) < MPOS(d2) ) return 1;
         else if ( MPOS(d1) > MPOS(d2) ) return -1;          else if ( MPOS(d1) > MPOS(d2) ) return -1;
     }      }
Line 658  int ndl_module_grlex_compare(UINT *d1,UINT *d2)
Line 579  int ndl_module_grlex_compare(UINT *d1,UINT *d2)
     for ( i = nd_nvar-1; i >= 0; i-- )      for ( i = nd_nvar-1; i >= 0; i-- )
         if ( GET_EXP(d1,i) < GET_EXP(d2,i) ) return 1;          if ( GET_EXP(d1,i) < GET_EXP(d2,i) ) return 1;
         else if ( GET_EXP(d1,i) > GET_EXP(d2,i) ) return -1;          else if ( GET_EXP(d1,i) > GET_EXP(d2,i) ) return -1;
     if ( !nd_istop ) {      if ( !nd_ispot ) {
         if ( MPOS(d1) < MPOS(d2) ) return 1;          if ( MPOS(d1) < MPOS(d2) ) return 1;
         else if ( MPOS(d1) > MPOS(d2) ) return -1;          else if ( MPOS(d1) > MPOS(d2) ) return -1;
     }      }
Line 669  int ndl_module_glex_compare(UINT *d1,UINT *d2)
Line 590  int ndl_module_glex_compare(UINT *d1,UINT *d2)
 {  {
     int i;      int i;
   
     if ( nd_istop ) {      if ( nd_ispot ) {
         if ( MPOS(d1) < MPOS(d2) ) return 1;          if ( MPOS(d1) < MPOS(d2) ) return 1;
         else if ( MPOS(d1) > MPOS(d2) ) return -1;          else if ( MPOS(d1) > MPOS(d2) ) return -1;
     }      }
Line 678  int ndl_module_glex_compare(UINT *d1,UINT *d2)
Line 599  int ndl_module_glex_compare(UINT *d1,UINT *d2)
     for ( i = 0; i < nd_nvar; i++ )      for ( i = 0; i < nd_nvar; i++ )
         if ( GET_EXP(d1,i) > GET_EXP(d2,i) ) return 1;          if ( GET_EXP(d1,i) > GET_EXP(d2,i) ) return 1;
         else if ( GET_EXP(d1,i) < GET_EXP(d2,i) ) return -1;          else if ( GET_EXP(d1,i) < GET_EXP(d2,i) ) return -1;
     if ( !nd_istop ) {      if ( !nd_ispot ) {
         if ( MPOS(d1) < MPOS(d2) ) return 1;          if ( MPOS(d1) < MPOS(d2) ) return 1;
         else if ( MPOS(d1) > MPOS(d2) ) return -1;          else if ( MPOS(d1) > MPOS(d2) ) return -1;
     }      }
Line 689  int ndl_module_lex_compare(UINT *d1,UINT *d2)
Line 610  int ndl_module_lex_compare(UINT *d1,UINT *d2)
 {  {
     int i;      int i;
   
     if ( nd_istop ) {      if ( nd_ispot ) {
         if ( MPOS(d1) < MPOS(d2) ) return 1;          if ( MPOS(d1) < MPOS(d2) ) return 1;
         else if ( MPOS(d1) > MPOS(d2) ) return -1;          else if ( MPOS(d1) > MPOS(d2) ) return -1;
     }      }
     for ( i = 0; i < nd_nvar; i++ )      for ( i = 0; i < nd_nvar; i++ )
         if ( GET_EXP(d1,i) > GET_EXP(d2,i) ) return 1;          if ( GET_EXP(d1,i) > GET_EXP(d2,i) ) return 1;
         else if ( GET_EXP(d1,i) < GET_EXP(d2,i) ) return -1;          else if ( GET_EXP(d1,i) < GET_EXP(d2,i) ) return -1;
     if ( !nd_istop ) {      if ( !nd_ispot ) {
         if ( MPOS(d1) < MPOS(d2) ) return 1;          if ( MPOS(d1) < MPOS(d2) ) return 1;
         else if ( MPOS(d1) > MPOS(d2) ) return -1;          else if ( MPOS(d1) > MPOS(d2) ) return -1;
     }      }
Line 707  int ndl_module_block_compare(UINT *d1,UINT *d2)
Line 628  int ndl_module_block_compare(UINT *d1,UINT *d2)
 {  {
     int i,c;      int i,c;
   
     if ( nd_istop ) {      if ( nd_ispot ) {
         if ( MPOS(d1) < MPOS(d2) ) return 1;          if ( MPOS(d1) < MPOS(d2) ) return 1;
         else if ( MPOS(d1) > MPOS(d2) ) return -1;          else if ( MPOS(d1) > MPOS(d2) ) return -1;
     }      }
     if ( c = ndl_block_compare(d1,d2) ) return c;      if ( c = ndl_block_compare(d1,d2) ) return c;
     if ( !nd_istop ) {      if ( !nd_ispot ) {
         if ( MPOS(d1) < MPOS(d2) ) return 1;          if ( MPOS(d1) < MPOS(d2) ) return 1;
         else if ( MPOS(d1) > MPOS(d2) ) return -1;          else if ( MPOS(d1) > MPOS(d2) ) return -1;
     }      }
Line 723  int ndl_module_matrix_compare(UINT *d1,UINT *d2)
Line 644  int ndl_module_matrix_compare(UINT *d1,UINT *d2)
 {  {
     int i,c;      int i,c;
   
     if ( nd_istop ) {      if ( nd_ispot ) {
         if ( MPOS(d1) < MPOS(d2) ) return 1;          if ( MPOS(d1) < MPOS(d2) ) return 1;
         else if ( MPOS(d1) > MPOS(d2) ) return -1;          else if ( MPOS(d1) > MPOS(d2) ) return -1;
     }      }
     if ( c = ndl_matrix_compare(d1,d2) ) return c;      if ( c = ndl_matrix_compare(d1,d2) ) return c;
     if ( !nd_istop ) {      if ( !nd_ispot ) {
         if ( MPOS(d1) < MPOS(d2) ) return 1;          if ( MPOS(d1) < MPOS(d2) ) return 1;
         else if ( MPOS(d1) > MPOS(d2) ) return -1;          else if ( MPOS(d1) > MPOS(d2) ) return -1;
     }      }
Line 739  int ndl_module_composite_compare(UINT *d1,UINT *d2)
Line 660  int ndl_module_composite_compare(UINT *d1,UINT *d2)
 {  {
     int i,c;      int i,c;
   
     if ( nd_istop ) {      if ( nd_ispot ) {
         if ( MPOS(d1) > MPOS(d2) ) return 1;          if ( MPOS(d1) > MPOS(d2) ) return 1;
         else if ( MPOS(d1) < MPOS(d2) ) return -1;          else if ( MPOS(d1) < MPOS(d2) ) return -1;
     }      }
     if ( c = ndl_composite_compare(d1,d2) ) return c;      if ( c = ndl_composite_compare(d1,d2) ) return c;
     if ( !nd_istop ) {      if ( !nd_ispot ) {
         if ( MPOS(d1) > MPOS(d2) ) return 1;          if ( MPOS(d1) > MPOS(d2) ) return 1;
         else if ( MPOS(d1) < MPOS(d2) ) return -1;          else if ( MPOS(d1) < MPOS(d2) ) return -1;
     }      }
Line 806  INLINE void ndl_add(UINT *d1,UINT *d2,UINT *d)
Line 727  INLINE void ndl_add(UINT *d1,UINT *d2,UINT *d)
 {  {
     int i;      int i;
   
       if ( nd_module ) {
           if ( MPOS(d1) && MPOS(d2) && (MPOS(d1) != MPOS(d2)) )
               error("ndl_add : invalid operation");
       }
 #if 1  #if 1
     switch ( nd_wpd ) {      switch ( nd_wpd ) {
         case 2:          case 2:
Line 824  INLINE void ndl_add(UINT *d1,UINT *d2,UINT *d)
Line 749  INLINE void ndl_add(UINT *d1,UINT *d2,UINT *d)
 #else  #else
     for ( i = 0; i < nd_wpd; i++ ) d[i] = d1[i]+d2[i];      for ( i = 0; i < nd_wpd; i++ ) d[i] = d1[i]+d2[i];
 #endif  #endif
     if ( nd_module ) {  
         if ( MPOS(d1) && MPOS(d2) && (MPOS(d1) != MPOS(d2)) )  
             error("ndl_add : invalid operation");  
         MPOS(d) = MPOS(d1);  
     }  
 }  }
   
 /* d1 += d2 */  /* d1 += d2 */
Line 836  INLINE void ndl_addto(UINT *d1,UINT *d2)
Line 756  INLINE void ndl_addto(UINT *d1,UINT *d2)
 {  {
     int i;      int i;
   
       if ( nd_module ) {
           if ( MPOS(d1) && MPOS(d2) && (MPOS(d1) != MPOS(d2)) )
               error("ndl_addto : invalid operation");
       }
 #if 1  #if 1
     switch ( nd_wpd ) {      switch ( nd_wpd ) {
         case 2:          case 2:
Line 854  INLINE void ndl_addto(UINT *d1,UINT *d2)
Line 778  INLINE void ndl_addto(UINT *d1,UINT *d2)
 #else  #else
     for ( i = 0; i < nd_wpd; i++ ) d1[i] += d2[i];      for ( i = 0; i < nd_wpd; i++ ) d1[i] += d2[i];
 #endif  #endif
     if ( nd_module ) {  
         if ( MPOS(d1) && MPOS(d2) && (MPOS(d1) != MPOS(d2)) )  
             error("ndl_addto : invalid operation");  
         MPOS(d1) = MPOS(d2);  
     }  
 }  }
   
 INLINE void ndl_sub(UINT *d1,UINT *d2,UINT *d)  INLINE void ndl_sub(UINT *d1,UINT *d2,UINT *d)
Line 1972  again:
Line 1891  again:
     }      }
     if ( nd_demand )      if ( nd_demand )
         for ( t = g; t; t = NEXT(t) )          for ( t = g; t; t = NEXT(t) )
             BDY(t) = (pointer)ndv_load((int)BDY(t));              BDY(t) = (pointer)ndv_load((long)BDY(t));
     else      else
         for ( t = g; t; t = NEXT(t) )          for ( t = g; t; t = NEXT(t) )
             BDY(t) = (pointer)nd_ps[(int)BDY(t)];              BDY(t) = (pointer)nd_ps[(long)BDY(t)];
     if ( !checkonly && DP_Print ) { printf("nd_gb done.\n"); fflush(stdout); }      if ( !checkonly && DP_Print ) { printf("nd_gb done.\n"); fflush(stdout); }
     return g;      return g;
 }  }
Line 2152  again:
Line 2071  again:
     }      }
     if ( nd_demand )      if ( nd_demand )
         for ( t = g; t; t = NEXT(t) )          for ( t = g; t; t = NEXT(t) )
             BDY(t) = (pointer)ndv_load((int)BDY(t));              BDY(t) = (pointer)ndv_load((long)BDY(t));
     else      else
         for ( t = g; t; t = NEXT(t) )          for ( t = g; t; t = NEXT(t) )
             BDY(t) = (pointer)nd_ps_trace[(int)BDY(t)];              BDY(t) = (pointer)nd_ps_trace[(long)BDY(t)];
     if ( nd_nalg ) {      if ( nd_nalg ) {
         print_eg("monic",&eg_monic);          print_eg("monic",&eg_monic);
         print_eg("invdalg",&eg_invdalg);          print_eg("invdalg",&eg_invdalg);
Line 2262  ND_pairs nd_newpairs( NODE g, int t )
Line 2181  ND_pairs nd_newpairs( NODE g, int t )
     dl = DL(nd_psh[t]);      dl = DL(nd_psh[t]);
     ts = SG(nd_psh[t]) - TD(dl);      ts = SG(nd_psh[t]) - TD(dl);
     for ( r0 = 0, h = g; h; h = NEXT(h) ) {      for ( r0 = 0, h = g; h; h = NEXT(h) ) {
         if ( nd_module && (MPOS(DL(nd_psh[(int)BDY(h)])) != MPOS(dl)) )          if ( nd_module && (MPOS(DL(nd_psh[(long)BDY(h)])) != MPOS(dl)) )
                 continue;                  continue;
         NEXTND_pairs(r0,r);          NEXTND_pairs(r0,r);
         r->i1 = (int)BDY(h);          r->i1 = (long)BDY(h);
         r->i2 = t;          r->i2 = t;
         ndl_lcm(DL(nd_psh[r->i1]),dl,r->lcm);          ndl_lcm(DL(nd_psh[r->i1]),dl,r->lcm);
         s = SG(nd_psh[r->i1])-TD(DL(nd_psh[r->i1]));          s = SG(nd_psh[r->i1])-TD(DL(nd_psh[r->i1]));
Line 2423  NODE update_base(NODE nd,int ndp)
Line 2342  NODE update_base(NODE nd,int ndp)
   
     dl = DL(nd_psh[ndp]);      dl = DL(nd_psh[ndp]);
     for ( head = last = 0, p = nd; p; ) {      for ( head = last = 0, p = nd; p; ) {
         dln = DL(nd_psh[(int)BDY(p)]);          dln = DL(nd_psh[(long)BDY(p)]);
         if ( ndl_reducible( dln, dl ) ) {          if ( ndl_reducible( dln, dl ) ) {
             p = NEXT(p);              p = NEXT(p);
             if ( last ) NEXT(last) = p;              if ( last ) NEXT(last) = p;
Line 2871  void nd_gr_postproc(LIST f,LIST v,int m,struct order_s
Line 2790  void nd_gr_postproc(LIST f,LIST v,int m,struct order_s
         }          }
     } else {      } else {
         for ( t = x; t; t = NEXT(t) )          for ( t = x; t; t = NEXT(t) )
             BDY(t) = (pointer)nd_ps[(int)BDY(t)];              BDY(t) = (pointer)nd_ps[(long)BDY(t)];
     }      }
     x = ndv_reducebase(x);      x = ndv_reducebase(x);
     x = ndv_reduceall(m,x);      x = ndv_reduceall(m,x);
Line 2895  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
Line 2814  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
     P p,zp;      P p,zp;
     Q dmy;      Q dmy;
     EPOS oepos;      EPOS oepos;
     int obpe,oadv,wmax,i,len,cbpe,ishomo,nalg;      int obpe,oadv,wmax,i,len,cbpe,ishomo,nalg,mrank,trank;
     Alg alpha,dp;      Alg alpha,dp;
     P poly;      P poly;
     LIST f1,f2;      LIST f1,f2,zpl;
     Obj obj;      Obj obj;
     NumberField nf;      NumberField nf;
     struct order_spec *ord1;      struct order_spec *ord1;
Line 2942  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
Line 2861  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
         nocheck = 1;          nocheck = 1;
     }      }
     m = trace > 1 ? trace : get_lprime(mindex);      m = trace > 1 ? trace : get_lprime(mindex);
       nd_init_ord(ord);
       mrank = 0;
     for ( t = BDY(f), max = 0; t; t = NEXT(t) )      for ( t = BDY(f), max = 0; t; t = NEXT(t) )
         for ( tv = vv; tv; tv = NEXT(tv) ) {          for ( tv = vv; tv; tv = NEXT(tv) ) {
             e = getdeg(tv->v,(P)BDY(t));              if ( nd_module ) {
             max = MAX(e,max);                  s = BDY((LIST)BDY(t));
                   trank = length(s);
                   mrank = MAX(mrank,trank);
                   for ( ; s; s = NEXT(s) ) {
                       e = getdeg(tv->v,(P)BDY(s));
                       max = MAX(e,max);
                   }
               } else {
                   e = getdeg(tv->v,(P)BDY(t));
                   max = MAX(e,max);
               }
         }          }
     nd_init_ord(ord);  
     nd_setup_parameters(nvar,max);      nd_setup_parameters(nvar,max);
     obpe = nd_bpe; oadv = nmv_adv; oepos = nd_epos;      obpe = nd_bpe; oadv = nmv_adv; oepos = nd_epos;
     ishomo = 1;      ishomo = 1;
     for ( in0 = 0, fd0 = 0, t = BDY(f); t; t = NEXT(t) ) {      for ( in0 = 0, fd0 = 0, t = BDY(f); t; t = NEXT(t) ) {
         ptozp((P)BDY(t),1,&dmy,&zp);          if ( nd_module ) {
         c = (pointer)ptondv(CO,vv,zp);              pltozpl((LIST)BDY(t),&dmy,&zpl);
               c = (pointer)pltondv(CO,vv,zpl);
           } else {
               ptozp((P)BDY(t),1,&dmy,&zp);
               c = (pointer)ptondv(CO,vv,zp);
           }
         if ( ishomo )          if ( ishomo )
             ishomo = ishomo && ndv_ishomo(c);              ishomo = ishomo && ndv_ishomo(c);
         if ( c ) {          if ( c ) {
Line 3024  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
Line 2959  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
     /* dp->p */      /* dp->p */
     nd_bpe = cbpe;      nd_bpe = cbpe;
     nd_setup_parameters(nd_nvar,0);      nd_setup_parameters(nd_nvar,0);
     for ( r = cand; r; r = NEXT(r) )      for ( r = cand; r; r = NEXT(r) ) {
         BDY(r) = (pointer)ndvtop(0,CO,vv,BDY(r));          if ( nd_module ) BDY(r) = ndvtopl(0,CO,vv,BDY(r),mrank);
           else BDY(r) = (pointer)ndvtop(0,CO,vv,BDY(r));
       }
     if ( nalg )      if ( nalg )
         cand = postprocess_algcoef(av,alist,cand);          cand = postprocess_algcoef(av,alist,cand);
     MKLIST(*rp,cand);      MKLIST(*rp,cand);
Line 3456  UINT *ndv_compute_bound(NDV p)
Line 3393  UINT *ndv_compute_bound(NDV p)
     len = LEN(p);      len = LEN(p);
     m = BDY(p); ndl_copy(DL(m),d1); NMV_ADV(m);      m = BDY(p); ndl_copy(DL(m),d1); NMV_ADV(m);
     for ( i = 1; i < len; i++, NMV_ADV(m) ) {      for ( i = 1; i < len; i++, NMV_ADV(m) ) {
         ndl_lcm_nocheck(DL(m),d1,d2);          ndl_max(DL(m),d1,d2);
         t = d1; d1 = d2; d2 = t;          t = d1; d1 = d2; d2 = t;
     }      }
     l = nd_nvar+31;      l = nd_nvar+31;
Line 4516  void nd_init_ord(struct order_spec *ord)
Line 4453  void nd_init_ord(struct order_spec *ord)
   
         /* module order */          /* module order */
         case 256:          case 256:
             nd_istop = ord->istop;              nd_ispot = ord->ispot;
             nd_dcomp = -1;              nd_dcomp = -1;
             nd_isrlex = 0;              nd_isrlex = 0;
             switch ( ord->ord.simple ) {              switch ( ord->ord.simple ) {
Line 5226  NODE nd_f4(int m)
Line 5163  NODE nd_f4(int m)
             g = update_base(g,nh);              g = update_base(g,nh);
         }          }
     }      }
     for ( r = g; r; r = NEXT(r) ) BDY(r) = (pointer)nd_ps[(int)BDY(r)];      for ( r = g; r; r = NEXT(r) ) BDY(r) = (pointer)nd_ps[(long)BDY(r)];
 #if 0  #if 0
     fprintf(asir_out,"ndv_alloc=%d\n",ndv_alloc);      fprintf(asir_out,"ndv_alloc=%d\n",ndv_alloc);
 #endif  #endif
Line 5326  NODE nd_f4_trace(int m)
Line 5263  NODE nd_f4_trace(int m)
             g = update_base(g,nh);              g = update_base(g,nh);
         }          }
     }      }
     for ( r = g; r; r = NEXT(r) ) BDY(r) = (pointer)nd_ps_trace[(int)BDY(r)];      for ( r = g; r; r = NEXT(r) ) BDY(r) = (pointer)nd_ps_trace[(long)BDY(r)];
 #if 0  #if 0
     fprintf(asir_out,"ndv_alloc=%d\n",ndv_alloc);      fprintf(asir_out,"ndv_alloc=%d\n",ndv_alloc);
 #endif  #endif

Legend:
Removed from v.1.157  
changed lines
  Added in v.1.162

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