| version 1.52, 2003/07/16 05:31:21 |
version 1.55, 2003/12/25 08:46:19 |
|
|
| * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
| * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
| * |
* |
| * $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.51 2003/07/09 07:11:07 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/gr.c,v 1.54 2003/10/08 09:09:04 noro Exp $ |
| */ |
*/ |
| #include "ca.h" |
#include "ca.h" |
| #include "parse.h" |
#include "parse.h" |
|
|
| int GenTrace = 0; |
int GenTrace = 0; |
| int OXCheck = -1; |
int OXCheck = -1; |
| |
|
| static int NoSugar = 0; |
int NoSugar = 0; |
| static int NoCriB = 0; |
static int NoCriB = 0; |
| static int NoGC = 0; |
static int NoGC = 0; |
| static int NoMC = 0; |
static int NoMC = 0; |
| Line 105 static int NoRA = 0; |
|
| Line 105 static int NoRA = 0; |
|
| static int ShowMag = 0; |
static int ShowMag = 0; |
| static int Stat = 0; |
static int Stat = 0; |
| static int Denominator = 1; |
static int Denominator = 1; |
| static int Top = 0; |
int Top = 0; |
| static int Reverse = 0; |
int Reverse = 0; |
| static int Max_mag = 0; |
static int Max_mag = 0; |
| static int Max_coef = 0; |
static int Max_coef = 0; |
| static char *Demand = 0; |
char *Demand = 0; |
| static int PtozpRA = 0; |
static int PtozpRA = 0; |
| |
|
| int doing_f4; |
int doing_f4; |
| Line 304 void dp_gr_main(LIST f,LIST v,Num homo,int modular,int |
|
| Line 304 void dp_gr_main(LIST f,LIST v,Num homo,int modular,int |
|
| NODE fd,fd0,fi,fi0,r,r0,t,subst,x,s,xx; |
NODE fd,fd0,fi,fi0,r,r0,t,subst,x,s,xx; |
| NODE ind,ind0; |
NODE ind,ind0; |
| LIST trace,gbindex; |
LIST trace,gbindex; |
| |
int input_is_dp = 0; |
| |
|
| mindex = 0; nochk = 0; dp_fcoeffs = field; |
mindex = 0; nochk = 0; dp_fcoeffs = field; |
| get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); |
get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); |
| Line 316 void dp_gr_main(LIST f,LIST v,Num homo,int modular,int |
|
| Line 317 void dp_gr_main(LIST f,LIST v,Num homo,int modular,int |
|
| homogenize_order(ord,NVars,&ord1); |
homogenize_order(ord,NVars,&ord1); |
| for ( fd0 = fi0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
for ( fd0 = fi0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
| NEXTNODE(fd0,fd); NEXTNODE(fi0,fi); |
NEXTNODE(fd0,fd); NEXTNODE(fi0,fi); |
| ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fi)); dp_homo((DP)BDY(fi),(DP *)&BDY(fd)); |
if ( BDY(t) && OID(BDY(t)) == O_DP ) { |
| |
dp_sort((DP)BDY(t),(DP *)&BDY(fi)); input_is_dp = 1; |
| |
} else |
| |
ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fi)); |
| |
dp_homo((DP)BDY(fi),(DP *)&BDY(fd)); |
| } |
} |
| if ( fd0 ) NEXT(fd) = 0; |
if ( fd0 ) NEXT(fd) = 0; |
| if ( fi0 ) NEXT(fi) = 0; |
if ( fi0 ) NEXT(fi) = 0; |
| initd(&ord1); |
initd(&ord1); |
| } else { |
} else { |
| for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
| NEXTNODE(fd0,fd); ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fd)); |
NEXTNODE(fd0,fd); |
| |
if ( BDY(t) && OID(BDY(t)) == O_DP ) { |
| |
dp_sort((DP)BDY(t),(DP *)&BDY(fd)); input_is_dp = 1; |
| |
} else |
| |
ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fd)); |
| } |
} |
| if ( fd0 ) NEXT(fd) = 0; |
if ( fd0 ) NEXT(fd) = 0; |
| fi0 = fd0; |
fi0 = fd0; |
| Line 371 void dp_gr_main(LIST f,LIST v,Num homo,int modular,int |
|
| Line 380 void dp_gr_main(LIST f,LIST v,Num homo,int modular,int |
|
| } |
} |
| for ( r0 = 0, ind0 = 0; x; x = NEXT(x) ) { |
for ( r0 = 0, ind0 = 0; x; x = NEXT(x) ) { |
| NEXTNODE(r0,r); dp_load((int)BDY(x),&ps[(int)BDY(x)]); |
NEXTNODE(r0,r); dp_load((int)BDY(x),&ps[(int)BDY(x)]); |
| dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r)); |
if ( input_is_dp ) |
| |
BDY(r) = (pointer)ps[(int)BDY(x)]; |
| |
else |
| |
dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r)); |
| NEXTNODE(ind0,ind); |
NEXTNODE(ind0,ind); |
| STOQ((int)BDY(x),q); BDY(ind) = q; |
STOQ((int)BDY(x),q); BDY(ind) = q; |
| } |
} |
| Line 401 void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struc |
|
| Line 413 void dp_gr_mod_main(LIST f,LIST v,Num homo,int m,struc |
|
| VL fv,vv,vc; |
VL fv,vv,vc; |
| NODE fd,fd0,r,r0,t,x,s,xx; |
NODE fd,fd0,r,r0,t,x,s,xx; |
| DP a,b,c; |
DP a,b,c; |
| extern struct oEGT eg_red_mod; |
extern struct oEGT eg_red_mod; |
| |
int input_is_dp = 0; |
| |
|
| get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); |
get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); |
| NVars = length((NODE)vv); PCoeffs = vc ? 1 : 0; VC = vc; |
NVars = length((NODE)vv); PCoeffs = vc ? 1 : 0; VC = vc; |
| Line 411 extern struct oEGT eg_red_mod; |
|
| Line 424 extern struct oEGT eg_red_mod; |
|
| initd(ord); |
initd(ord); |
| if ( homo ) { |
if ( homo ) { |
| for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
| ptod(CO,vv,(P)BDY(t),&a); dp_homo(a,&b); |
if ( BDY(t) && OID(BDY(t)) == O_DP ) { |
| |
dp_sort((DP)BDY(t),&a); input_is_dp = 1; |
| |
} else |
| |
ptod(CO,vv,(P)BDY(t),&a); |
| |
dp_homo(a,&b); |
| if ( PCoeffs ) |
if ( PCoeffs ) |
| dp_mod(b,m,0,&c); |
dp_mod(b,m,0,&c); |
| else |
else |
| Line 423 extern struct oEGT eg_red_mod; |
|
| Line 440 extern struct oEGT eg_red_mod; |
|
| homogenize_order(ord,NVars,&ord1); initd(&ord1); |
homogenize_order(ord,NVars,&ord1); initd(&ord1); |
| } else { |
} else { |
| for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
| ptod(CO,vv,(P)BDY(t),&b); |
if ( BDY(t) && OID(BDY(t)) == O_DP ) { |
| |
dp_sort((DP)BDY(t),&b); input_is_dp = 1; |
| |
} else |
| |
ptod(CO,vv,(P)BDY(t),&b); |
| if ( PCoeffs ) |
if ( PCoeffs ) |
| dp_mod(b,m,0,&c); |
dp_mod(b,m,0,&c); |
| else |
else |
| Line 465 void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L |
|
| Line 485 void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L |
|
| int homogen; |
int homogen; |
| VL fv,vv,vc; |
VL fv,vv,vc; |
| NODE fd,fd0,r,r0,t,x,s,xx; |
NODE fd,fd0,r,r0,t,x,s,xx; |
| |
int input_is_dp = 0; |
| |
|
| dp_fcoeffs = 0; |
dp_fcoeffs = 0; |
| get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); |
get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); |
| Line 474 void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L |
|
| Line 495 void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L |
|
| error("dp_f4_main : invalid order specification"); |
error("dp_f4_main : invalid order specification"); |
| initd(ord); |
initd(ord); |
| for ( fd0 = 0, t = BDY(f), homogen = 1; t; t = NEXT(t) ) { |
for ( fd0 = 0, t = BDY(f), homogen = 1; t; t = NEXT(t) ) { |
| NEXTNODE(fd0,fd); ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fd)); |
NEXTNODE(fd0,fd); |
| |
if ( BDY(t) && OID(BDY(t)) == O_DP ) { |
| |
dp_sort((DP)BDY(t),(DP *)&BDY(fd)); input_is_dp = 1; |
| |
} else |
| |
ptod(CO,vv,(P)BDY(t),(DP *)&BDY(fd)); |
| if ( homogen ) |
if ( homogen ) |
| homogen = dp_homogeneous(BDY(fd)); |
homogen = dp_homogeneous(BDY(fd)); |
| } |
} |
| Line 486 void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L |
|
| Line 511 void dp_f4_main(LIST f,LIST v,struct order_spec *ord,L |
|
| } |
} |
| for ( r0 = 0; x; x = NEXT(x) ) { |
for ( r0 = 0; x; x = NEXT(x) ) { |
| NEXTNODE(r0,r); dp_load((int)BDY(x),&ps[(int)BDY(x)]); |
NEXTNODE(r0,r); dp_load((int)BDY(x),&ps[(int)BDY(x)]); |
| dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r)); |
if ( input_is_dp ) |
| |
BDY(r) = (pointer)ps[(int)BDY(x)]; |
| |
else |
| |
dtop(CO,vv,ps[(int)BDY(x)],(P *)&BDY(r)); |
| } |
} |
| if ( r0 ) NEXT(r) = 0; |
if ( r0 ) NEXT(r) = 0; |
| MKLIST(*rp,r0); |
MKLIST(*rp,r0); |
| Line 498 void dp_f4_mod_main(LIST f,LIST v,int m,struct order_s |
|
| Line 526 void dp_f4_mod_main(LIST f,LIST v,int m,struct order_s |
|
| VL fv,vv,vc; |
VL fv,vv,vc; |
| DP b,c,c1; |
DP b,c,c1; |
| NODE fd,fd0,r,r0,t,x,s,xx; |
NODE fd,fd0,r,r0,t,x,s,xx; |
| |
int input_is_dp = 0; |
| |
|
| dp_fcoeffs = 0; |
dp_fcoeffs = 0; |
| get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); |
get_vars((Obj)f,&fv); pltovl(v,&vv); vlminus(fv,vv,&vc); |
| Line 507 void dp_f4_mod_main(LIST f,LIST v,int m,struct order_s |
|
| Line 536 void dp_f4_mod_main(LIST f,LIST v,int m,struct order_s |
|
| error("dp_f4_mod_main : invalid order specification"); |
error("dp_f4_mod_main : invalid order specification"); |
| initd(ord); |
initd(ord); |
| for ( fd0 = 0, t = BDY(f), homogen = 1; t; t = NEXT(t) ) { |
for ( fd0 = 0, t = BDY(f), homogen = 1; t; t = NEXT(t) ) { |
| ptod(CO,vv,(P)BDY(t),&b); |
if ( BDY(t) && OID(BDY(t)) == O_DP ) { |
| |
dp_sort((DP)BDY(t),&b); input_is_dp = 1; |
| |
} else |
| |
ptod(CO,vv,(P)BDY(t),&b); |
| if ( homogen ) |
if ( homogen ) |
| homogen = dp_homogeneous(b); |
homogen = dp_homogeneous(b); |
| _dp_mod(b,m,0,&c); |
_dp_mod(b,m,0,&c); |