[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.119 and 1.120

version 1.119, 2004/12/06 09:29:34 version 1.120, 2004/12/07 15:15:52
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.118 2004/12/04 09:39:27 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.119 2004/12/06 09:29:34 noro Exp $ */
   
 #include "nd.h"  #include "nd.h"
   
Line 2214  void ndv_setup(int mod,int trace,NODE f)
Line 2214  void ndv_setup(int mod,int trace,NODE f)
 struct order_spec *append_block(struct order_spec *spec,  struct order_spec *append_block(struct order_spec *spec,
     int nv,int nalg,int ord);      int nv,int nalg,int ord);
   
   void preprocess_algcoef(VL vv,VL av,struct order_spec *ord,LIST f,
           struct order_spec **ord1p,LIST *f1p,NODE *alistp)
   {
           NODE alist,t,s,r0,r;
           VL tv;
           P poly;
           DP d;
           Alg alpha,dp;
           DAlg inv,da,hc;
           MP m;
           int i,nvar,nalg;
           NumberField nf;
           LIST f1,f2;
           struct order_spec *current_spec;
   
           for ( nvar = 0, tv = vv; tv; tv = NEXT(tv), nvar++);
           for ( nalg = 0, tv = av; tv; tv = NEXT(tv), nalg++);
   
           for ( alist = 0, tv = av; tv; tv = NEXT(tv) ) {
                   NEXTNODE(alist,t); MKV(tv->v,poly);
                   MKAlg(poly,alpha); BDY(t) = (pointer)alpha;
                   tv->v = tv->v->priv;
           }
           NEXT(t) = 0;
   
           /* simplification, makeing polynomials monic */
           setfield_dalg(alist);
           obj_algtodalg(f,&f1);
           for ( t = BDY(f); t; t = NEXT(t) ) {
                   initd(ord); ptod(vv,vv,(P)BDY(t),&d);
                   hc = (DAlg)BDY(d)->c;
                   if ( NID(hc) == N_DA ) {
                           invdalg(hc,&inv);
                           for ( m = BDY(d); m; m = NEXT(m) ) {
                                   muldalg(inv,(DAlg)m->c,&da); m->c = (P)da;
                           }
                   }
                   initd(ord); dtop(vv,vv,d,&poly); BDY(f) = (pointer)poly;
           }
           obj_dalgtoalg(f1,&f);
   
           /* append alg vars to the var list */
           for ( tv = vv; NEXT(tv); tv = NEXT(tv) );
           NEXT(tv) = av;
   
           /* append a block to ord */
           *ord1p = append_block(ord,nvar,nalg,2);
   
           /* create generator list */
           nf = get_numberfield();
           for ( i = nalg-1, t = BDY(f); i >= 0; i-- ) {
                   MKAlg(nf->defpoly[i],dp);
                   MKNODE(s,dp,t); t = s;
           }
           MKLIST(f1,t);
           *alistp = alist;
           algobjtorat(f1,f1p);
   }
   
 void nd_gr(LIST f,LIST v,int m,int f4,struct order_spec *ord,LIST *rp)  void nd_gr(LIST f,LIST v,int m,int f4,struct order_spec *ord,LIST *rp)
 {  {
         VL tv,fv,vv,vc,av;          VL tv,fv,vv,vc,av;
Line 2226  void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe
Line 2285  void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe
         LIST f1,f2;          LIST f1,f2;
         Obj obj;          Obj obj;
         NumberField nf;          NumberField nf;
           struct order_spec *ord1;
   
         if ( !m && Demand ) nd_demand = 1;          if ( !m && Demand ) nd_demand = 1;
         else nd_demand = 0;          else nd_demand = 0;
Line 2250  void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe
Line 2310  void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe
                 nd_nalg = nalg;                  nd_nalg = nalg;
                 /* #i -> t#i */                  /* #i -> t#i */
                 if ( nalg ) {                  if ( nalg ) {
                         for ( alist = 0, tv = av; tv; tv = NEXT(tv) ) {                          preprocess_algcoef(vv,av,ord,f,&ord1,&f1,&alist);
                                 NEXTNODE(alist,t); MKV(tv->v,p);                          ord = ord1;
                                 MKAlg(p,alpha); BDY(t) = (pointer)alpha;                          f = f1;
                                 tv->v = tv->v->priv;  
                         }  
                         NEXT(t) = 0;  
                         for ( tv = vv; NEXT(tv); tv = NEXT(tv) );  
                         NEXT(tv) = av;  
                         ord = append_block(ord,nvar,nalg,2);  
                         nvar += nalg;  
                         setfield_dalg(alist);  
                         nf = get_numberfield();  
                         for ( i = nalg-1, t = BDY(f); i >= 0; i-- ) {  
                                 MKAlg(nf->defpoly[i],dp);  
                                 MKNODE(s,dp,t); t = s;  
                         }  
                         MKLIST(f1,t);  
                         algobjtorat(f1,&f2); f = f2;  
                 }                  }
                   nvar += nalg;
         }          }
         nd_init_ord(ord);          nd_init_ord(ord);
         for ( t = BDY(f), max = 0; t; t = NEXT(t) )          for ( t = BDY(f), max = 0; t; t = NEXT(t) )
Line 2311  void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe
Line 2357  void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe
   
 void nd_gr_trace(LIST f,LIST v,int trace,int homo,struct order_spec *ord,LIST *rp)  void nd_gr_trace(LIST f,LIST v,int trace,int homo,struct order_spec *ord,LIST *rp)
 {  {
         struct order_spec *ord1;  
         VL tv,fv,vv,vc,av;          VL tv,fv,vv,vc,av;
         NODE fd,fd0,in0,in,r,r0,t,s,cand,alist;          NODE fd,fd0,in0,in,r,r0,t,s,cand,alist;
         int m,nocheck,nvar,mindex,e,max;          int m,nocheck,nvar,mindex,e,max;
Line 2325  void nd_gr_trace(LIST f,LIST v,int trace,int homo,stru
Line 2370  void nd_gr_trace(LIST f,LIST v,int trace,int homo,stru
         LIST f1,f2;          LIST f1,f2;
         Obj obj;          Obj obj;
         NumberField nf;          NumberField nf;
           struct order_spec *ord1;
   
         get_vars((Obj)f,&fv); pltovl(v,&vv);          get_vars((Obj)f,&fv); pltovl(v,&vv);
         for ( nvar = 0, tv = vv; tv; tv = NEXT(tv), nvar++ );          for ( nvar = 0, tv = vv; tv; tv = NEXT(tv), nvar++ );
Line 2342  void nd_gr_trace(LIST f,LIST v,int trace,int homo,stru
Line 2388  void nd_gr_trace(LIST f,LIST v,int trace,int homo,stru
         nd_nalg = nalg;          nd_nalg = nalg;
         /* #i -> t#i */          /* #i -> t#i */
         if ( nalg ) {          if ( nalg ) {
                 for ( alist = 0, tv = av; tv; tv = NEXT(tv) ) {                  preprocess_algcoef(vv,av,ord,f,&ord1,&f1,&alist);
                         NEXTNODE(alist,t); MKV(tv->v,poly);                  ord = ord1;
                         MKAlg(poly,alpha); BDY(t) = (pointer)alpha;                  f = f1;
                         tv->v = tv->v->priv;  
                 }  
                 NEXT(t) = 0;  
                 for ( tv = vv; NEXT(tv); tv = NEXT(tv) );  
                 NEXT(tv) = av;  
                 ord = append_block(ord,nvar,nalg,2);  
                 nvar += nalg;  
                 setfield_dalg(alist);  
                 nf = get_numberfield();  
                 for ( i = nalg-1, t = BDY(f); i >= 0; i-- ) {  
                         MKAlg(nf->defpoly[i],dp);  
                         MKNODE(s,dp,t); t = s;  
                 }  
                 MKLIST(f1,t);  
                 algobjtorat(f1,&f2); f = f2;  
         }          }
           nvar += nalg;
   
         nocheck = 0;          nocheck = 0;
         mindex = 0;          mindex = 0;

Legend:
Removed from v.1.119  
changed lines
  Added in v.1.120

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