[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.225 and 1.229

version 1.225, 2016/03/31 02:42:43 version 1.229, 2016/11/17 05:33:20
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.224 2016/03/31 01:40:10 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.228 2016/08/08 07:18:10 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 658  int ndl_module_weight_compare(UINT *d1,UINT *d2)
Line 658  int ndl_module_weight_compare(UINT *d1,UINT *d2)
   s = 0;    s = 0;
   for ( j = 0; j < nd_nvar; j++ )    for ( j = 0; j < nd_nvar; j++ )
      s += (GET_EXP(d1,j)-GET_EXP(d2,j))*nd_poly_weight[j];       s += (GET_EXP(d1,j)-GET_EXP(d2,j))*nd_poly_weight[j];
   s += nd_module_weight[MPOS(d1)-1]-nd_module_weight[MPOS(d2)-1];    if ( MPOS(d1) >= 1 && MPOS(d2) >= 1 ) {
       s += nd_module_weight[MPOS(d1)-1]-nd_module_weight[MPOS(d2)-1];
     }
   if ( s > 0 ) return 1;    if ( s > 0 ) return 1;
   else if ( s < 0 ) return -1;    else if ( s < 0 ) return -1;
   else return 0;    else return 0;
Line 2003  NODE nd_gb(int m,int ishomo,int checkonly,int gensyz,i
Line 2005  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 2261  NODE nd_gb_trace(int m,int ishomo,int **indp)
Line 2264  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 2358  again:
Line 2362  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 3046  void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int 
Line 3052  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 3560  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
Line 3568  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 6199  NODE nd_f4(int m,int **indp)
Line 6208  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));
Line 6311  NODE nd_f4_trace(int m,int **indp)
Line 6321  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 6620  init_eg(&eg_search);
Line 6631  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 6674  init_eg(&eg_search);
Line 6687  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 6688  init_eg(&eg_search);
Line 6703  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.225  
changed lines
  Added in v.1.229

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