=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/nd.c,v retrieving revision 1.228 retrieving revision 1.230 diff -u -p -r1.228 -r1.230 --- OpenXM_contrib2/asir2000/engine/nd.c 2016/08/08 07:18:10 1.228 +++ OpenXM_contrib2/asir2000/engine/nd.c 2016/12/02 02:12:00 1.230 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.227 2016/07/11 08:00:30 noro Exp $ */ +/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.229 2016/11/17 05:33:20 noro Exp $ */ #include "nd.h" @@ -173,6 +173,8 @@ INLINE int nd_length(ND p) } } +extern int dp_negative_weight; + INLINE int ndl_reducible(UINT *d1,UINT *d2) { UINT u1,u2; @@ -180,7 +182,7 @@ INLINE int ndl_reducible(UINT *d1,UINT *d2) if ( nd_module && (MPOS(d1) != MPOS(d2)) ) return 0; - if ( TD(d1) < TD(d2) ) return 0; + if ( !dp_negative_weight && TD(d1) < TD(d2) ) return 0; #if USE_UNROLL switch ( nd_bpe ) { case 3: @@ -3052,6 +3054,8 @@ void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int ndv_alloc = 0; #endif get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&nd_vc); + if ( m && nd_vc ) + error("nd_{gr,f4} : computation over Fp(X) is unsupported. Use dp_gr_mod_main()."); for ( nvar = 0, tv = vv; tv; tv = NEXT(tv), nvar++ ); switch ( ord->id ) { case 1: @@ -6213,6 +6217,7 @@ NODE nd_f4(int m,int **indp) if ( QTOS((Q)ARG0(node)) == sugar ) break; } if ( tn ) { + nd_nzlist = NEXT(nd_nzlist); for ( t = l, ll0 = 0; t; t = NEXT(t) ) { for ( tn = BDY((LIST)ARG1(node)); tn; tn = NEXT(tn) ) { i1s = QTOS((Q)ARG0(BDY((LIST)BDY(tn))));