[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.243 and 1.244

version 1.243, 2018/03/05 01:56:17 version 1.244, 2018/03/05 06:43:09
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.242 2017/09/17 02:34:02 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.243 2018/03/05 01:56:17 noro Exp $ */
   
 #include "nd.h"  #include "nd.h"
   
Line 6804  int nd_symbolic_preproc(PGeoBucket bucket,int trace,UI
Line 6804  int nd_symbolic_preproc(PGeoBucket bucket,int trace,UI
     return col;      return col;
 }  }
   
   void print_ndp(ND_pairs l)
   {
     ND_pairs t;
   
     for ( t = l; t; t = NEXT(t) )
       printf("[%d,%d] ",t->i1,t->i2);
     printf("\n");
   }
   
 NODE nd_f4(int m,int checkonly,int **indp)  NODE nd_f4(int m,int checkonly,int **indp)
 {  {
     int i,nh,stat,index,f4red;      int i,nh,stat,index,f4red;
     NODE r,g,tn0,tn,node;      NODE r,g,tn0,tn,node;
     ND_pairs d,l,t,ll0,ll;      ND_pairs d,l,t,ll0,ll,lh;
         LIST l0,l1;          LIST l0,l1;
     ND spol,red;      ND spol,red;
     NDV nf,redv;      NDV nf,redv;
Line 6822  NODE nd_f4(int m,int checkonly,int **indp)
Line 6831  NODE nd_f4(int m,int checkonly,int **indp)
     IndArray *imat;      IndArray *imat;
     int *rhead;      int *rhead;
     int spcol,sprow;      int spcol,sprow;
     int sugar;      int sugar,sugarh;
     PGeoBucket bucket;      PGeoBucket bucket;
     struct oEGT eg0,eg1,eg_f4;      struct oEGT eg0,eg1,eg_f4;
     Q i1,i2,sugarq;      Q i1,i2,sugarq;
Line 6831  NODE nd_f4(int m,int checkonly,int **indp)
Line 6840  NODE nd_f4(int m,int checkonly,int **indp)
 #endif  #endif
     g = 0; d = 0;      g = 0; d = 0;
     for ( i = 0; i < nd_psn; i++ ) {      for ( i = 0; i < nd_psn; i++ ) {
         if ( !nd_nzlist ) d = update_pairs(d,g,i,0);          d = update_pairs(d,g,i,0);
         g = update_base(g,i);          g = update_base(g,i);
     }      }
         nzlist = 0;          nzlist = 0;
     nzlist_t = nd_nzlist;      nzlist_t = nd_nzlist;
     f4red = 1;      f4red = 1;
     nd_last_nonzero = 0;      nd_last_nonzero = 0;
     while ( d || nzlist_t ) {      while ( d ) {
         get_eg(&eg0);          get_eg(&eg0);
         if ( nd_nzlist ) {          l = nd_minsugarp(d,&d);
           sugar = nd_sugarweight?l->sugar2:SG(l);
           if ( MaxDeg > 0 && sugar > MaxDeg ) break;
           if ( nzlist_t ) {
             node = BDY((LIST)BDY(nzlist_t));              node = BDY((LIST)BDY(nzlist_t));
             sugar = QTOS((Q)ARG0(node));              sugarh = QTOS((Q)ARG0(node));
             tn = BDY((LIST)ARG1(node));              tn = BDY((LIST)ARG1(node));
             if ( !tn ) {              if ( !tn ) {
               nzlist_t = NEXT(nzlist_t);                nzlist_t = NEXT(nzlist_t);
               continue;                continue;
             }              }
             /* tn = [[i1,i2],...] */              /* tn = [[i1,i2],...] */
             l = nd_ipairtospair(tn);              lh = nd_ipairtospair(tn);
         } else {  
             l = nd_minsugarp(d,&d);  
             sugar = nd_sugarweight?l->sugar2: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 ) {
             if ( !nd_nzlist ) {              for ( t = l; NEXT(t); t = NEXT(t) );
                 for ( t = l; NEXT(t); t = NEXT(t) );              NEXT(t) = d; d = l;
                 NEXT(t) = d; d = l;              d = nd_reconstruct(0,d);
                 d = nd_reconstruct(0,d);  
             }  
             continue;              continue;
         }          }
         if ( bucket->m < 0 ) continue;          if ( bucket->m < 0 ) continue;
Line 6877  NODE nd_f4(int m,int checkonly,int **indp)
Line 6883  NODE nd_f4(int m,int checkonly,int **indp)
         if ( DP_Print )          if ( DP_Print )
             fprintf(asir_out,"sugar=%d,symb=%.3fsec,",              fprintf(asir_out,"sugar=%d,symb=%.3fsec,",
                 sugar,eg_f4.exectime+eg_f4.gctime);                  sugar,eg_f4.exectime+eg_f4.gctime);
         nflist = nd_f4_red(m,l,0,s0vect,col,rp0,nd_gentrace?&ll:0);          nflist = nd_f4_red(m,nd_nzlist?lh:l,0,s0vect,col,rp0,nd_gentrace?&ll:0);
         if ( checkonly && nflist ) return 0;          if ( checkonly && nflist ) return 0;
         /* adding new bases */          /* adding new bases */
         if ( nflist ) nd_last_nonzero = f4red;          if ( nflist ) nd_last_nonzero = f4red;
Line 6893  NODE nd_f4(int m,int checkonly,int **indp)
Line 6899  NODE nd_f4(int m,int checkonly,int **indp)
                 nf = ndtondv(m,nf1);                  nf = ndtondv(m,nf1);
             }              }
             nh = ndv_newps(m,nf,0,1);              nh = ndv_newps(m,nf,0,1);
             if ( !nd_nzlist ) d = update_pairs(d,g,nh,0);              d = update_pairs(d,g,nh,0);
             g = update_base(g,nh);              g = update_base(g,nh);
         }          }
         if ( DP_Print ) {          if ( DP_Print ) {
Line 8794  void parse_nd_option(NODE opt)
Line 8800  void parse_nd_option(NODE opt)
                 else if ( !strcmp(key,"lf") )                  else if ( !strcmp(key,"lf") )
             nd_lf = value?1:0;              nd_lf = value?1:0;
                 else if ( !strcmp(key,"trace") ) {                  else if ( !strcmp(key,"trace") ) {
            u = BDY((LIST)value);             if ( value ) {
                    nd_nzlist = BDY((LIST)ARG2(u));                 u = BDY((LIST)value);
                    nd_bpe = QTOS((Q)ARG3(u));                         nd_nzlist = BDY((LIST)ARG2(u));
                          nd_bpe = QTOS((Q)ARG3(u));
              }
                 } else if ( !strcmp(key,"f4red") ) {                  } else if ( !strcmp(key,"f4red") ) {
                    nd_f4red = QTOS((Q)value);                     nd_f4red = QTOS((Q)value);
                 } else if ( !strcmp(key,"rank0") ) {                  } else if ( !strcmp(key,"rank0") ) {

Legend:
Removed from v.1.243  
changed lines
  Added in v.1.244

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