version 1.137, 2006/06/11 06:57:54 |
version 1.145, 2006/08/26 05:38:06 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.136 2006/06/11 06:01:55 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.144 2006/08/26 03:09:55 noro Exp $ */ |
|
|
#include "nd.h" |
#include "nd.h" |
|
|
Line 1592 NODE nd_gb(int m,int ishomo,int checkonly) |
|
Line 1592 NODE nd_gb(int m,int ishomo,int checkonly) |
|
NDV nfv; |
NDV nfv; |
Q q,num,den; |
Q q,num,den; |
union oNDC dn; |
union oNDC dn; |
|
int diag_count = 0; |
|
|
g = 0; d = 0; |
g = 0; d = 0; |
for ( i = 0; i < nd_psn; i++ ) { |
for ( i = 0; i < nd_psn; i++ ) { |
|
|
l = nd_minp(d,&d); |
l = nd_minp(d,&d); |
if ( SG(l) != sugar ) { |
if ( SG(l) != sugar ) { |
if ( ishomo ) { |
if ( ishomo ) { |
|
diag_count = 0; |
stat = do_diagonalize(sugar,m); |
stat = do_diagonalize(sugar,m); |
if ( !stat ) { |
if ( !stat ) { |
NEXT(l) = d; d = l; |
NEXT(l) = d; d = l; |
|
|
} |
} |
nfv = ndtondv(m,nf); nd_free(nf); |
nfv = ndtondv(m,nf); nd_free(nf); |
nh = ndv_newps(m,nfv,0); |
nh = ndv_newps(m,nfv,0); |
|
if ( !m && (ishomo && ++diag_count == diag_period) ) { |
|
diag_count = 0; |
|
stat = do_diagonalize(sugar,m); |
|
if ( !stat ) { |
|
NEXT(l) = d; d = l; |
|
d = nd_reconstruct(1,d); |
|
goto again; |
|
} |
|
} |
d = update_pairs(d,g,nh); |
d = update_pairs(d,g,nh); |
g = update_base(g,nh); |
g = update_base(g,nh); |
FREENDP(l); |
FREENDP(l); |
Line 2208 void ndv_setup(int mod,int trace,NODE f,int dont_sort) |
|
Line 2219 void ndv_setup(int mod,int trace,NODE f,int dont_sort) |
|
for ( nd_psn = 0, s = f; s; s = NEXT(s) ) if ( BDY(s) ) nd_psn++; |
for ( nd_psn = 0, s = f; s; s = NEXT(s) ) if ( BDY(s) ) nd_psn++; |
w = (NDV *)ALLOCA(nd_psn*sizeof(NDV)); |
w = (NDV *)ALLOCA(nd_psn*sizeof(NDV)); |
for ( i = 0, s = f; s; s = NEXT(s) ) if ( BDY(s) ) w[i++] = BDY(s); |
for ( i = 0, s = f; s; s = NEXT(s) ) if ( BDY(s) ) w[i++] = BDY(s); |
if ( !dont_sort ) |
if ( !dont_sort ) { |
qsort(w,nd_psn,sizeof(NDV), |
/* XXX heuristic */ |
(int (*)(const void *,const void *))ndv_compare); |
if ( !nd_ord->id && (nd_ord->ord.simple<2) ) |
|
qsort(w,nd_psn,sizeof(NDV), |
|
(int (*)(const void *,const void *))ndv_compare_rev); |
|
else |
|
qsort(w,nd_psn,sizeof(NDV), |
|
(int (*)(const void *,const void *))ndv_compare); |
|
} |
nd_pslen = 2*nd_psn; |
nd_pslen = 2*nd_psn; |
nd_ps = (NDV *)MALLOC(nd_pslen*sizeof(NDV)); |
nd_ps = (NDV *)MALLOC(nd_pslen*sizeof(NDV)); |
nd_ps_trace = (NDV *)MALLOC(nd_pslen*sizeof(NDV)); |
nd_ps_trace = (NDV *)MALLOC(nd_pslen*sizeof(NDV)); |
Line 2359 void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe |
|
Line 2376 void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe |
|
NDV b; |
NDV b; |
int ishomo,nalg; |
int ishomo,nalg; |
Alg alpha,dp; |
Alg alpha,dp; |
P p; |
P p,zp; |
|
Q dmy; |
LIST f1,f2; |
LIST f1,f2; |
Obj obj; |
Obj obj; |
NumberField nf; |
NumberField nf; |
Line 2405 void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe |
|
Line 2423 void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe |
|
nd_setup_parameters(nvar,max); |
nd_setup_parameters(nvar,max); |
ishomo = 1; |
ishomo = 1; |
for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
b = (pointer)ptondv(CO,vv,(P)BDY(t)); |
ptozp((P)BDY(t),1,&dmy,&zp); |
|
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 2438 void nd_gr_postproc(LIST f,LIST v,int m,struct order_s |
|
Line 2457 void nd_gr_postproc(LIST f,LIST v,int m,struct order_s |
|
NDV b; |
NDV b; |
int ishomo,nalg; |
int ishomo,nalg; |
Alg alpha,dp; |
Alg alpha,dp; |
P p; |
P p,zp; |
|
Q dmy; |
LIST f1,f2; |
LIST f1,f2; |
Obj obj; |
Obj obj; |
NumberField nf; |
NumberField nf; |
Line 2478 void nd_gr_postproc(LIST f,LIST v,int m,struct order_s |
|
Line 2498 void nd_gr_postproc(LIST f,LIST v,int m,struct order_s |
|
nd_setup_parameters(nvar,max); |
nd_setup_parameters(nvar,max); |
ishomo = 1; |
ishomo = 1; |
for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
for ( fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
b = (pointer)ptondv(CO,vv,(P)BDY(t)); |
ptozp((P)BDY(t),1,&dmy,&zp); |
|
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 2517 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
Line 2538 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
int m,nocheck,nvar,mindex,e,max; |
int m,nocheck,nvar,mindex,e,max; |
NDV c; |
NDV c; |
NMV a; |
NMV a; |
P p; |
P p,zp; |
|
Q dmy; |
EPOS oepos; |
EPOS oepos; |
int obpe,oadv,wmax,i,len,cbpe,ishomo,nalg; |
int obpe,oadv,wmax,i,len,cbpe,ishomo,nalg; |
Alg alpha,dp; |
Alg alpha,dp; |
Line 2526 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
Line 2548 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
Obj obj; |
Obj obj; |
NumberField nf; |
NumberField nf; |
struct order_spec *ord1; |
struct order_spec *ord1; |
|
struct oEGT eg_check,eg0,eg1; |
|
|
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 2572 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
Line 2595 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
obpe = nd_bpe; oadv = nmv_adv; oepos = nd_epos; |
obpe = nd_bpe; oadv = nmv_adv; oepos = nd_epos; |
ishomo = 1; |
ishomo = 1; |
for ( in0 = 0, fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
for ( in0 = 0, fd0 = 0, t = BDY(f); t; t = NEXT(t) ) { |
c = ptondv(CO,vv,(P)BDY(t)); |
ptozp((P)BDY(t),1,&dmy,&zp); |
|
c = (pointer)ptondv(CO,vv,zp); |
if ( ishomo ) |
if ( ishomo ) |
ishomo = ishomo && ndv_ishomo(c); |
ishomo = ishomo && ndv_ishomo(c); |
if ( c ) { |
if ( c ) { |
Line 2617 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
Line 2641 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
cbpe = nd_bpe; |
cbpe = nd_bpe; |
if ( nocheck ) |
if ( nocheck ) |
break; |
break; |
|
get_eg(&eg0); |
if ( ndv_check_candidate(in0,obpe,oadv,oepos,cand) ) |
if ( ndv_check_candidate(in0,obpe,oadv,oepos,cand) ) |
/* success */ |
/* success */ |
break; |
break; |
Line 2636 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
Line 2661 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
} |
} |
} |
} |
} |
} |
|
get_eg(&eg1); init_eg(&eg_check); add_eg(&eg_check,&eg0,&eg1); |
|
if ( DP_Print ) |
|
fprintf(asir_out,"check=%fsec\n",eg_check.exectime+eg_check.gctime); |
/* dp->p */ |
/* dp->p */ |
nd_bpe = cbpe; |
nd_bpe = cbpe; |
nd_setup_parameters(nd_nvar,0); |
nd_setup_parameters(nd_nvar,0); |
Line 4874 NODE nd_f4_red_q_main(ND_pairs sp0,int nsp,int trace,U |
|
Line 4902 NODE nd_f4_red_q_main(ND_pairs sp0,int nsp,int trace,U |
|
SG((NDV)w[rank-i-1]) = spsugar[i]; |
SG((NDV)w[rank-i-1]) = spsugar[i]; |
/* GC_free(spmat[i]); */ |
/* GC_free(spmat[i]); */ |
} |
} |
#if 1 |
#if 0 |
qsort(w,rank,sizeof(NDV), |
qsort(w,rank,sizeof(NDV), |
(int (*)(const void *,const void *))ndv_compare); |
(int (*)(const void *,const void *))ndv_compare); |
#endif |
#endif |