[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.46 and 1.51

version 1.46, 2003/08/25 09:16:55 version 1.51, 2003/08/27 01:53:29
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.45 2003/08/25 08:57:31 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.50 2003/08/27 01:48:25 noro Exp $ */
   
 #include "ca.h"  #include "ca.h"
 #include "inline.h"  #include "inline.h"
Line 11 
Line 11 
 #define INLINE  #define INLINE
 #endif  #endif
   
 #define USE_GEOBUCKET 0  #define USE_GEOBUCKET 1
   
 #define REDTAB_LEN 32003  #define REDTAB_LEN 32003
   
Line 271  void nd_reconstruct_direct(int mod,NDV *ps,int len);
Line 271  void nd_reconstruct_direct(int mod,NDV *ps,int len);
 void nd_setup(int mod,int trace,NODE f);  void nd_setup(int mod,int trace,NODE f);
 void nd_setup_parameters();  void nd_setup_parameters();
 BlockMask nd_create_blockmask(struct order_spec *ord);  BlockMask nd_create_blockmask(struct order_spec *ord);
   int nd_get_exporigin(struct order_spec *ord);
   
 /* ND functions */  /* ND functions */
 int nd_check_candidate(NODE input,NODE cand);  int nd_check_candidate(NODE input,NODE cand);
Line 1617  NODE nd_reduceall(int m,NODE f)
Line 1618  NODE nd_reduceall(int m,NODE f)
         base.ps = (NDV *)ALLOCA((n-1)*sizeof(NDV));          base.ps = (NDV *)ALLOCA((n-1)*sizeof(NDV));
         base.bound = (unsigned int **)ALLOCA((n-1)*sizeof(unsigned int *));          base.bound = (unsigned int **)ALLOCA((n-1)*sizeof(unsigned int *));
         base.len = n-1;          base.len = n-1;
         for ( i = 0; i < n; i++ ) {          i = 0;
 again:          while ( i < n ) {
                 for ( j = 0; j < i; j++ ) {                  for ( j = 0; j < i; j++ ) {
                         base.ps[j] = ps[j]; base.bound[j] = bound[j];                          base.ps[j] = ps[j]; base.bound[j] = bound[j];
                 }                  }
Line 1627  again:
Line 1628  again:
                 }                  }
                 g = ndvtond(m,ps[i]);                  g = ndvtond(m,ps[i]);
                 stat = nd_nf_direct(m,g,&base,1,&nf);                  stat = nd_nf_direct(m,g,&base,1,&nf);
                 if ( !stat ) {                  if ( !stat )
                         nd_reconstruct_direct(m,ps,n);                          nd_reconstruct_direct(m,ps,n);
                         goto again;  
                 }  
                 else if ( !nf ) {                  else if ( !nf ) {
                         printf("."); fflush(stdout);                          printf("."); fflush(stdout);
                         ndv_free(ps[i]);                          ndv_free(ps[i]);
                         for ( j = i+1; j < n; j++ ) ps[j-1] = ps[j];                          for ( j = i+1; j < n; j++ ) {
                                   ps[j-1] = ps[j]; bound[j-1] = bound[j];
                           }
                         n--;                          n--;
                           base.len = n-1;
                 } else {                  } else {
                         printf("."); fflush(stdout);                          printf("."); fflush(stdout);
                         ndv_free(ps[i]);                          ndv_free(ps[i]);
Line 1643  again:
Line 1645  again:
                         ps[i] = ndtondv(m,nf);                          ps[i] = ndtondv(m,nf);
                         bound[i] = ndv_compute_bound(ps[i]);                          bound[i] = ndv_compute_bound(ps[i]);
                         nd_free(nf);                          nd_free(nf);
                           i++;
                 }                  }
         }          }
         printf("\n");          printf("\n");
Line 1999  void nd_gr(LIST f,LIST v,int m,struct order_spec *ord,
Line 2002  void nd_gr(LIST f,LIST v,int m,struct order_spec *ord,
         x = nd_gb(m,0);          x = nd_gb(m,0);
         fprintf(asir_out,"found=%d,notfirst=%d,create=%d\n",          fprintf(asir_out,"found=%d,notfirst=%d,create=%d\n",
                 nd_found,nd_notfirst,nd_create);                  nd_found,nd_notfirst,nd_create);
           x = nd_reducebase(x);
         x = nd_reduceall(m,x);          x = nd_reduceall(m,x);
         for ( r0 = 0, t = x; t; t = NEXT(t) ) {          for ( r0 = 0, t = x; t; t = NEXT(t) ) {
                 NEXTNODE(r0,r);                  NEXTNODE(r0,r);
Line 2062  void nd_gr_trace(LIST f,LIST v,int m,int homo,struct o
Line 2066  void nd_gr_trace(LIST f,LIST v,int m,int homo,struct o
                         initd(ord);                          initd(ord);
                         nd_init_ord(ord);                          nd_init_ord(ord);
                         nd_setup_parameters();                          nd_setup_parameters();
                         cand = nd_reducebase(cand);  
                 }                  }
                   cand = nd_reducebase(cand);
                 fprintf(asir_out,"found=%d,notfirst=%d,create=%d\n",                  fprintf(asir_out,"found=%d,notfirst=%d,create=%d\n",
                         nd_found,nd_notfirst,nd_create);                          nd_found,nd_notfirst,nd_create);
                 cand = nd_reduceall(0,cand);                  cand = nd_reduceall(0,cand);
Line 2347  void ndv_dehomogenize(NDV p,struct order_spec *ord)
Line 2351  void ndv_dehomogenize(NDV p,struct order_spec *ord)
   
         len = p->len;          len = p->len;
         newnvar = nd_nvar-1;          newnvar = nd_nvar-1;
         newexporigin = ord->ord.block.length+1;          newexporigin = nd_get_exporigin(ord);
         newwpd = newnvar/nd_epw+(newnvar%nd_epw?1:0)+newexporigin;          newwpd = newnvar/nd_epw+(newnvar%nd_epw?1:0)+newexporigin;
         for ( m = BDY(p), i = 0; i < len; NMV_ADV(m), i++ )          for ( m = BDY(p), i = 0; i < len; NMV_ADV(m), i++ )
                 ndl_dehomogenize(DL(m));                  ndl_dehomogenize(DL(m));
Line 2503  unsigned int *ndv_compute_bound(NDV p)
Line 2507  unsigned int *ndv_compute_bound(NDV p)
         return t;          return t;
 }  }
   
 void nd_setup_parameters() {  int nd_get_exporigin(struct order_spec *ord)
         int i,n,elen;  {
           switch ( ord->id ) {
         nd_epw = (sizeof(unsigned int)*8)/nd_bpe;  
         elen = nd_nvar/nd_epw+(nd_nvar%nd_epw?1:0);  
   
         switch ( nd_ord->id ) {  
                 case 0:                  case 0:
                         nd_exporigin = 1;                          return 1;
                         break;  
                 case 1:                  case 1:
                         /* block order */                          /* block order */
                         /* d[0]:weight d[1]:w0,...,d[nd_exporigin-1]:w(n-1) */                          /* d[0]:weight d[1]:w0,...,d[nd_exporigin-1]:w(n-1) */
                         nd_exporigin = nd_ord->ord.block.length+1;                          return ord->ord.block.length+1;
                         break;  
                 case 2:                  case 2:
                         error("nd_setup_parameters : matrix order is not supported yet.");                          error("nd_setup_parameters : matrix order is not supported yet.");
                         break;  
         }          }
   }
   
   void nd_setup_parameters() {
           int i,n,elen;
   
           nd_epw = (sizeof(unsigned int)*8)/nd_bpe;
           elen = nd_nvar/nd_epw+(nd_nvar%nd_epw?1:0);
   
           nd_exporigin = nd_get_exporigin(nd_ord);
         nd_wpd = nd_exporigin+elen;          nd_wpd = nd_exporigin+elen;
         nd_epos = (EPOS)MALLOC_ATOMIC(nd_nvar*sizeof(struct oEPOS));          nd_epos = (EPOS)MALLOC_ATOMIC(nd_nvar*sizeof(struct oEPOS));
         for ( i = 0; i < nd_nvar; i++ ) {          for ( i = 0; i < nd_nvar; i++ ) {

Legend:
Removed from v.1.46  
changed lines
  Added in v.1.51

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