=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/builtin/gr.c,v retrieving revision 1.5 retrieving revision 1.9 diff -u -p -r1.5 -r1.9 --- OpenXM_contrib2/asir2018/builtin/gr.c 2020/10/06 06:31:19 1.5 +++ OpenXM_contrib2/asir2018/builtin/gr.c 2022/09/10 04:04:51 1.9 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2018/builtin/gr.c,v 1.4 2020/02/22 06:23:35 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2018/builtin/gr.c,v 1.8 2021/02/17 22:18:39 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -84,7 +84,8 @@ static P *psc; static int *pss; static int psn,pslen; -static int NVars,CNVars; +static int NVars; +int CNVars; static VL VC; int PCoeffs; @@ -115,6 +116,7 @@ static int Max_mag = 0; static int Max_coef = 0; char *Demand = 0; static int PtozpRA = 0; +int ReversePOT = 0; int doing_f4; NODE TraceList; @@ -319,13 +321,15 @@ void dp_gr_main(LIST f,LIST v,Num homo,int modular,int if ( ord->id && NVars != ord->nv ) error("dp_gr_main : invalid order specification"); initd(ord); - // clear denominators - for ( r0 = 0, t = BDY(f); t; t = NEXT(t) ) { - ptozp((P)BDY(t),1,&cont,&pp); - NEXTNODE(r0,r); BDY(r) = (pointer)pp; + // clear denominators if the ground field is Q + if ( field == 0 ) { + for ( r0 = 0, t = BDY(f); t; t = NEXT(t) ) { + ptozp((P)BDY(t),1,&cont,&pp); + NEXTNODE(r0,r); BDY(r) = (pointer)pp; + } + if ( r0 ) NEXT(r) = 0; + MKLIST(f,r0); } - if ( r0 ) NEXT(r) = 0; - MKLIST(f,r0); if ( homo ) { homogenize_order(ord,NVars,&ord1); for ( fd0 = fi0 = 0, t = BDY(f); t; t = NEXT(t) ) { @@ -2346,6 +2350,8 @@ void dp_set_flag(Obj name,Obj value) MaxDeg = v; else if ( !strcmp(n,"NaiveSchreyer") ) NaiveSchreyer = v; + else if ( !strcmp(n,"ReversePOT") ) + ReversePOT = v; } void dp_make_flaglist(LIST *list) @@ -2362,8 +2368,8 @@ void dp_make_flaglist(LIST *list) if ( DP_Multiple ) { STOZ(DP_Multiple,nm); STOZ(Denominator,dn); divq((Q)nm,(Q)dn,&r); } else - v = 0; - MKNODE(n,v,0); MKSTR(name,"Content"); MKNODE(n1,name,n); n = n1; + r = 0; + MKNODE(n,r,0); MKSTR(name,"Content"); MKNODE(n1,name,n); n = n1; #endif MKNODE(n1,Dist,n); n = n1; MKSTR(name,"Dist"); MKNODE(n1,name,n); n = n1; STOZ(Reverse,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"Reverse"); MKNODE(n1,name,n); n = n1; @@ -2386,6 +2392,7 @@ void dp_make_flaglist(LIST *list) STOZ(NoGC,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"NoGC"); MKNODE(n1,name,n); n = n1; STOZ(NoCriB,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"NoCriB"); MKNODE(n1,name,n); n = n1; STOZ(NoSugar,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"NoSugar"); MKNODE(n1,name,n); n = n1; + STOZ(ReversePOT,v); MKNODE(n1,v,n); n = n1; MKSTR(name,"ReversePOT"); MKNODE(n1,name,n); n = n1; if ( Demand ) MKSTR(path,Demand); else