[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.147 and 1.149

version 1.147, 2006/11/27 07:54:41 version 1.149, 2006/12/04 01:40:51
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.146 2006/11/27 07:31:25 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.148 2006/11/28 02:17:54 noro Exp $ */
   
 #include "nd.h"  #include "nd.h"
   
Line 52  void nd_det_reconstruct(NDV **dm,int n,int j,NDV d);
Line 52  void nd_det_reconstruct(NDV **dm,int n,int j,NDV d);
 int nd_monic(int m,ND *p);  int nd_monic(int m,ND *p);
 NDV plain_vect_to_ndv_q(Q *mat,int col,UINT *s0vect);  NDV plain_vect_to_ndv_q(Q *mat,int col,UINT *s0vect);
   
   extern int Denominator,DP_Multiple;
   
 void nd_free_private_storage()  void nd_free_private_storage()
 {  {
         _nm_free_list = 0;          _nm_free_list = 0;
Line 1685  again:
Line 1687  again:
         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[(int)BDY(t)];
           if ( !checkonly && DP_Print ) { printf("nd_gb done.\n"); fflush(stdout); }
         return g;          return g;
 }  }
   
Line 1864  again:
Line 1867  again:
                 print_eg("invdalg",&eg_invdalg);                  print_eg("invdalg",&eg_invdalg);
                 print_eg("le",&eg_le);                  print_eg("le",&eg_le);
         }          }
           if ( DP_Print ) { printf("nd_gb_trace done.\n"); fflush(stdout); }
         return g;          return g;
 }  }
   
Line 2411  void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe
Line 2415  void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe
         if ( !m && Demand ) nd_demand = 1;          if ( !m && Demand ) nd_demand = 1;
         else nd_demand = 0;          else nd_demand = 0;
   
           if ( DP_Multiple )
                   nd_scale = ((double)DP_Multiple)/(double)(Denominator?Denominator:1);
 #if 0  #if 0
         ndv_alloc = 0;          ndv_alloc = 0;
 #endif  #endif
Line 2575  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
Line 2581  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
         struct order_spec *ord1;          struct order_spec *ord1;
         struct oEGT eg_check,eg0,eg1;          struct oEGT eg_check,eg0,eg1;
   
           if ( DP_Multiple )
                   nd_scale = ((double)DP_Multiple)/(double)(Denominator?Denominator:1);
   
         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);
         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 ) {
Line 3314  ND nd_copy(ND p)
Line 3323  ND nd_copy(ND p)
   
 int nd_sp(int mod,int trace,ND_pairs p,ND *rp)  int nd_sp(int mod,int trace,ND_pairs p,ND *rp)
 {  {
         NM m;          NM m1,m2;
         NDV p1,p2;          NDV p1,p2;
         ND t1,t2;          ND t1,t2;
         UINT *lcm;          UINT *lcm;
           P gp,tp;
           Q g,t;
         int td;          int td;
   
         if ( !mod && nd_demand ) {          if ( !mod && nd_demand ) {
Line 3330  int nd_sp(int mod,int trace,ND_pairs p,ND *rp)
Line 3341  int nd_sp(int mod,int trace,ND_pairs p,ND *rp)
                 }                  }
         }          }
         lcm = LCM(p);          lcm = LCM(p);
         NEWNM(m);          NEWNM(m1); ndl_sub(lcm,HDL(p1),DL(m1));
         CQ(m) = HCQ(p2);          if ( ndl_check_bound2(p->i1,DL(m1)) ) {
         ndl_sub(lcm,HDL(p1),DL(m));                  FREENM(m1); return 0;
         if ( ndl_check_bound2(p->i1,DL(m)) )  
                 return 0;  
         t1 = ndv_mul_nm(mod,m,p1);  
         if ( mod == -1 ) CM(m) = _chsgnsf(HCM(p1));  
         else if ( mod ) CM(m) = mod-HCM(p1);  
         else chsgnp(HCP(p1),&CP(m));  
         ndl_sub(lcm,HDL(p2),DL(m));  
         if ( ndl_check_bound2(p->i2,DL(m)) ) {  
                 nd_free(t1);  
                 return 0;  
         }          }
         t2 = ndv_mul_nm(mod,m,p2);          NEWNM(m2); ndl_sub(lcm,HDL(p2),DL(m2));
           if ( ndl_check_bound2(p->i2,DL(m2)) ) {
                   FREENM(m1); FREENM(m2); return 0;
           }
   
           if ( mod == -1 ) {
                   CM(m1) = HCM(p2); CM(m2) = _chsgnsf(HCM(p1));
           } else if ( mod ) {
                   CM(m1) = HCM(p2); CM(m2) = mod-HCM(p1);
           } else if ( nd_vc ) {
                   ezgcdpz(nd_vc,HCP(p1),HCP(p2),&gp);
                   divsp(nd_vc,HCP(p2),gp,&CP(m1));
                   divsp(nd_vc,HCP(p1),gp,&tp); chsgnp(tp,&CP(m2));
           } else {
                   igcd_cofactor(HCQ(p1),HCQ(p2),&g,&t,&CQ(m1)); chsgnq(t,&CQ(m2));
           }
           t1 = ndv_mul_nm(mod,m1,p1); t2 = ndv_mul_nm(mod,m2,p2);
         *rp = nd_add(mod,t1,t2);          *rp = nd_add(mod,t1,t2);
         FREENM(m);          FREENM(m1); FREENM(m2);
         return 1;          return 1;
 }  }
   

Legend:
Removed from v.1.147  
changed lines
  Added in v.1.149

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