[BACK]Return to nd.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2018 / engine

Diff for /OpenXM_contrib2/asir2018/engine/nd.c between version 1.42 and 1.43

version 1.42, 2020/12/03 07:58:54 version 1.43, 2020/12/05 03:27:20
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2018/engine/nd.c,v 1.41 2020/11/26 03:55:23 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2018/engine/nd.c,v 1.42 2020/12/03 07:58:54 noro Exp $ */
   
 #include "nd.h"  #include "nd.h"
   
Line 98  void dltondl(int n,DL dl,UINT *r);
Line 98  void dltondl(int n,DL dl,UINT *r);
 DP ndvtodp(int mod,NDV p);  DP ndvtodp(int mod,NDV p);
 DP ndtodp(int mod,ND p);  DP ndtodp(int mod,ND p);
 DPM ndvtodpm(int mod,NDV p);  DPM ndvtodpm(int mod,NDV p);
   NDV dptondv(int mod,DP p);
 NDV dpmtondv(int mod,DPM p);  NDV dpmtondv(int mod,DPM p);
   int dp_getdeg(DP p);
 int dpm_getdeg(DPM p,int *rank);  int dpm_getdeg(DPM p,int *rank);
 void dpm_ptozp(DPM p,Z *cont,DPM *r);  void dpm_ptozp(DPM p,Z *cont,DPM *r);
 int compdmm(int nv,DMM a,DMM b);  int compdmm(int nv,DMM a,DMM b);
Line 4285  void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int 
Line 4287  void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int 
                   }                    }
                 }                  }
             } else {              } else {
                 e = getdeg(tv->v,(P)BDY(t));                  if ( OID(BDY(t)) == O_DP ) {
                 max = MAX(e,max);                    e = dp_getdeg((DP)BDY(t));
                     max = MAX(e,max);
                   } else {
                     e = getdeg(tv->v,(P)BDY(t));
                     max = MAX(e,max);
                   }
             }              }
         }          }
     nd_setup_parameters(nvar,nd_nzlist?0:max);      nd_setup_parameters(nvar,nd_nzlist?0:max);
Line 4307  void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int 
Line 4314  void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int 
           b = (pointer)pltondv(CO,vv,zpl);            b = (pointer)pltondv(CO,vv,zpl);
         }          }
       } else {        } else {
         if ( !m && !nd_gentrace ) ptozp((P)BDY(t),1,&dmy,&zp);          if ( OID(BDY(t)) == O_DP ) {
         else zp = (P)BDY(t);            DP zdp;
         b = (pointer)ptondv(CO,vv,zp);  
             if ( !m && !nd_gentrace ) dp_ptozp((DP)BDY(t),&zdp);
             else zdp = (DP)BDY(t);
             b = (pointer)dptondv(m,zdp);
           } else {
             if ( !m && !nd_gentrace ) ptozp((P)BDY(t),1,&dmy,&zp);
             else zp = (P)BDY(t);
             b = (pointer)ptondv(CO,vv,zp);
           }
       }        }
       if ( ishomo )        if ( ishomo )
         ishomo = ishomo && ndv_ishomo(b);          ishomo = ishomo && ndv_ishomo(b);
Line 4477  void nd_sba(LIST f,LIST v,int m,int homo,int retdp,int
Line 4492  void nd_sba(LIST f,LIST v,int m,int homo,int retdp,int
   initd(ord);    initd(ord);
   for ( t = BDY(f), max = 1; t; t = NEXT(t) ) {    for ( t = BDY(f), max = 1; t; t = NEXT(t) ) {
     for ( tv = vv; tv; tv = NEXT(tv) ) {      for ( tv = vv; tv; tv = NEXT(tv) ) {
       e = getdeg(tv->v,(P)BDY(t));        if ( OID(BDY(t)) == O_DP ) {
       max = MAX(e,max);          e = dp_getdeg((DP)BDY(t));
           max = MAX(e,max);
         } else {
           e = getdeg(tv->v,(P)BDY(t));
           max = MAX(e,max);
         }
     }      }
   }    }
   nd_setup_parameters(nvar,max);    nd_setup_parameters(nvar,max);
   obpe = nd_bpe; oadv = nmv_adv; oepos = nd_epos; ompos = nd_mpos;    obpe = nd_bpe; oadv = nmv_adv; oepos = nd_epos; ompos = nd_mpos;
   ishomo = 1;    ishomo = 1;
   for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) {    for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) {
     if ( !m ) ptozp((P)BDY(t),1,&dmy,&zp);      if ( OID(BDY(t)) == O_DP ) {
     else zp = (P)BDY(t);        DP zdp;
     b = (pointer)ptondv(CO,vv,zp);  
         if ( !m ) dp_ptozp((DP)BDY(t),&zdp);
         else zdp = (DP)BDY(t);
         b = (pointer)dptondv(m,zdp);
       } else {
         if ( !m ) ptozp((P)BDY(t),1,&dmy,&zp);
         else zp = (P)BDY(t);
         b = (pointer)ptondv(CO,vv,zp);
       }
     if ( ishomo )      if ( ishomo )
       ishomo = ishomo && ndv_ishomo(b);        ishomo = ishomo && ndv_ishomo(b);
     if ( m ) ndv_mod(m,b);      if ( m ) ndv_mod(m,b);
Line 4868  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
Line 4896  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
                 }                  }
               }                }
             } else {              } else {
                 if ( OID(BDY(t)) == O_DP ) {
                   e = dp_getdeg((DP)BDY(t));
                   max = MAX(e,max);
                 } else {
                 e = getdeg(tv->v,(P)BDY(t));                  e = getdeg(tv->v,(P)BDY(t));
                 max = MAX(e,max);                  max = MAX(e,max);
                 }
             }              }
         }          }
     nd_setup_parameters(nvar,max);      nd_setup_parameters(nvar,max);
Line 4890  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
Line 4923  void nd_gr_trace(LIST f,LIST v,int trace,int homo,int 
             c = (pointer)pltondv(CO,vv,zpl);              c = (pointer)pltondv(CO,vv,zpl);
           }            }
         } else {          } else {
           if ( !nd_gentrace ) ptozp((P)BDY(t),1,&dmy,&zp);            if ( OID(BDY(t)) == O_DP ) {
           else zp = (P)BDY(t);              DP zdp;
           c = (pointer)ptondv(CO,vv,zp);  
               if ( !nd_gentrace ) dp_ptozp((DP)BDY(t),&zdp);
               else zdp = (DP)BDY(t);
               c = (pointer)dptondv(m,zdp);
             } else {
               if ( !nd_gentrace ) ptozp((P)BDY(t),1,&dmy,&zp);
               else zp = (P)BDY(t);
               c = (pointer)ptondv(CO,vv,zp);
             }
         }          }
         if ( ishomo )          if ( ishomo )
             ishomo = ishomo && ndv_ishomo(c);              ishomo = ishomo && ndv_ishomo(c);
Line 6757  int nmv_comp(NMV a,NMV b)
Line 6798  int nmv_comp(NMV a,NMV b)
   int t;    int t;
   t = DL_COMPARE(a->dl,b->dl);    t = DL_COMPARE(a->dl,b->dl);
   return -t;    return -t;
   }
   
   NDV dptondv(int mod,DP p)
   {
     NDV d;
     NMV m,m0;
     MP t;
     MP *a;
     int i,len,n;
   
     if ( !p ) return 0;
     for ( t = BDY(p), len = 0; t; t = NEXT(t), len++ );
     n = p->nv;
     if ( mod > 0 || mod == -1 )
       m0 = m = (NMV)MALLOC_ATOMIC_IGNORE_OFF_PAGE(len*nmv_adv);
     else
       m0 = m = MALLOC(len*nmv_adv);
     for ( i = 0, t = BDY(p); i < len; i++, NMV_ADV(m), t = NEXT(t) ) {
       dltondl(n,t->dl,DL(m));
       TD(DL(m)) = ndl_weight(DL(m));
       CZ(m) = (Z)t->c;
     }
     qsort(m0,len,nmv_adv,(int (*)(const void *,const void *))nmv_comp);
     MKNDV(NV(p),m0,len,d);
     SG(d) = SG(p);
     return d;
 }  }
   
 NDV dpmtondv(int mod,DPM p)  NDV dpmtondv(int mod,DPM p)

Legend:
Removed from v.1.42  
changed lines
  Added in v.1.43

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