version 1.208, 2013/09/15 04:30:28 |
version 1.209, 2013/09/25 02:36:24 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.207 2013/09/12 06:46:16 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.208 2013/09/15 04:30:28 noro Exp $ */ |
|
|
#include "nd.h" |
#include "nd.h" |
|
|
Line 54 static NODE nd_tracelist; |
|
Line 54 static NODE nd_tracelist; |
|
static NODE nd_alltracelist; |
static NODE nd_alltracelist; |
static int nd_gentrace,nd_gensyz,nd_nora,nd_newelim,nd_intersect; |
static int nd_gentrace,nd_gensyz,nd_nora,nd_newelim,nd_intersect; |
static int *nd_gbblock; |
static int *nd_gbblock; |
static NODE nd_nzlist; |
static NODE nd_nzlist,nd_check_splist; |
|
static int nd_splist; |
|
|
NumberField get_numberfield(); |
NumberField get_numberfield(); |
UINT *nd_det_compute_bound(NDV **dm,int n,int j); |
UINT *nd_det_compute_bound(NDV **dm,int n,int j); |
Line 1868 int do_diagonalize(int sugar,int m) |
|
Line 1869 int do_diagonalize(int sugar,int m) |
|
return 1; |
return 1; |
} |
} |
|
|
|
LIST compute_splist() |
|
{ |
|
NODE g,tn0,tn,node; |
|
LIST l0; |
|
ND_pairs d,t; |
|
int i; |
|
Q i1,i2; |
|
|
|
g = 0; d = 0; |
|
for ( i = 0; i < nd_psn; i++ ) { |
|
d = update_pairs(d,g,i,0); |
|
g = update_base(g,i); |
|
} |
|
for ( t = d, tn0 = 0; t; t = NEXT(t) ) { |
|
NEXTNODE(tn0,tn); |
|
STOQ(t->i1,i1); STOQ(t->i2,i2); |
|
node = mknode(2,i1,i2); MKLIST(l0,node); |
|
BDY(tn) = l0; |
|
} |
|
if ( tn0 ) NEXT(tn) = 0; MKLIST(l0,tn0); |
|
return l0; |
|
} |
|
|
/* return value = 0 => input is not a GB */ |
/* return value = 0 => input is not a GB */ |
|
|
NODE nd_gb(int m,int ishomo,int checkonly,int gensyz,int **indp) |
NODE nd_gb(int m,int ishomo,int checkonly,int gensyz,int **indp) |
|
|
return g; |
return g; |
} |
} |
|
|
|
/* splist = [[i1,i2],...] */ |
|
|
|
int check_splist(int m,NODE splist) |
|
{ |
|
NODE t,p; |
|
ND_pairs d,r,l; |
|
int stat; |
|
ND h,nf; |
|
|
|
for ( d = 0, t = splist; t; t = NEXT(t) ) { |
|
p = BDY((LIST)BDY(t)); |
|
NEXTND_pairs(d,r); |
|
r->i1 = QTOS((Q)ARG0(p)); r->i2 = QTOS((Q)ARG1(p)); |
|
ndl_lcm(DL(nd_psh[r->i1]),DL(nd_psh[r->i2]),r->lcm); |
|
SG(r) = TD(LCM(r)); /* XXX */ |
|
} |
|
if ( d ) NEXT(r) = 0; |
|
|
|
while ( d ) { |
|
again: |
|
l = nd_minp(d,&d); |
|
stat = nd_sp(m,0,l,&h); |
|
if ( !stat ) { |
|
NEXT(l) = d; d = l; |
|
d = nd_reconstruct(0,d); |
|
goto again; |
|
} |
|
stat = nd_nf(m,0,h,nd_ps,!Top,0,&nf); |
|
if ( !stat ) { |
|
NEXT(l) = d; d = l; |
|
d = nd_reconstruct(0,d); |
|
goto again; |
|
} else if ( nf ) return 0; |
|
if ( DP_Print) { printf("."); fflush(stdout); } |
|
} |
|
if ( DP_Print) { printf("done.\n"); fflush(stdout); } |
|
return 1; |
|
} |
|
|
int do_diagonalize_trace(int sugar,int m) |
int do_diagonalize_trace(int sugar,int m) |
{ |
{ |
int i,nh,stat; |
int i,nh,stat; |
Line 2917 void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int |
|
Line 2980 void nd_gr(LIST f,LIST v,int m,int homo,int retdp,int |
|
ndv_homogenize((NDV)BDY(t),obpe,oadv,oepos,ompos); |
ndv_homogenize((NDV)BDY(t),obpe,oadv,oepos,ompos); |
} |
} |
|
|
ndv_setup(m,0,fd0,nd_gbblock?1:0,0); |
ndv_setup(m,0,fd0,(nd_gbblock||nd_splist)?1:0,0); |
if ( nd_gentrace ) { |
if ( nd_gentrace ) { |
MKLIST(l1,nd_tracelist); MKNODE(nd_alltracelist,l1,0); |
MKLIST(l1,nd_tracelist); MKNODE(nd_alltracelist,l1,0); |
} |
} |
|
if ( nd_splist ) { |
|
*rp = compute_splist(); |
|
return; |
|
} |
|
if ( nd_check_splist ) { |
|
if ( check_splist(m,nd_check_splist) ) *rp = (LIST)ONE; |
|
else *rp = 0; |
|
return; |
|
} |
x = f4?nd_f4(m,&perm):nd_gb(m,ishomo || homo,0,0,&perm); |
x = f4?nd_f4(m,&perm):nd_gb(m,ishomo || homo,0,0,&perm); |
if ( !x ) { |
if ( !x ) { |
*rp = 0; return; |
*rp = 0; return; |
Line 5697 int nd_symbolic_preproc(PGeoBucket bucket,int trace,UI |
|
Line 5769 int nd_symbolic_preproc(PGeoBucket bucket,int trace,UI |
|
return col; |
return col; |
} |
} |
|
|
|
|
NODE nd_f4(int m,int **indp) |
NODE nd_f4(int m,int **indp) |
{ |
{ |
int i,nh,stat,index; |
int i,nh,stat,index; |
Line 5738 NODE nd_f4(int m,int **indp) |
|
Line 5809 NODE nd_f4(int m,int **indp) |
|
node = BDY((LIST)BDY(tn)); |
node = BDY((LIST)BDY(tn)); |
if ( QTOS((Q)ARG0(node)) == sugar ) break; |
if ( QTOS((Q)ARG0(node)) == sugar ) break; |
} |
} |
if ( !tn ) error("nd_f4 : inconsistend non-zero list"); |
if ( !tn ) error("nd_f4 : inconsistent non-zero list"); |
for ( t = l, ll0 = 0; t; t = NEXT(t) ) { |
for ( t = l, ll0 = 0; t; t = NEXT(t) ) { |
for ( tn = BDY((LIST)ARG1(node)); tn; tn = NEXT(tn) ) { |
for ( tn = BDY((LIST)ARG1(node)); tn; tn = NEXT(tn) ) { |
i1s = QTOS((Q)ARG0(BDY((LIST)BDY(tn)))); |
i1s = QTOS((Q)ARG0(BDY((LIST)BDY(tn)))); |
Line 7292 void parse_nd_option(NODE opt) |
|
Line 7363 void parse_nd_option(NODE opt) |
|
|
|
nd_gentrace = 0; nd_gensyz = 0; nd_nora = 0; nd_gbblock = 0; |
nd_gentrace = 0; nd_gensyz = 0; nd_nora = 0; nd_gbblock = 0; |
nd_newelim = 0; nd_intersect = 0; nd_nzlist = 0; |
nd_newelim = 0; nd_intersect = 0; nd_nzlist = 0; |
|
nd_splist = 0; nd_check_splist = 0; |
for ( t = opt; t; t = NEXT(t) ) { |
for ( t = opt; t; t = NEXT(t) ) { |
p = BDY((LIST)BDY(t)); |
p = BDY((LIST)BDY(t)); |
key = BDY((STRING)BDY(p)); |
key = BDY((STRING)BDY(p)); |
Line 7321 void parse_nd_option(NODE opt) |
|
Line 7393 void parse_nd_option(NODE opt) |
|
u = BDY((LIST)value); |
u = BDY((LIST)value); |
nd_nzlist = BDY((LIST)ARG2(u)); |
nd_nzlist = BDY((LIST)ARG2(u)); |
nd_bpe = QTOS((Q)ARG3(u)); |
nd_bpe = QTOS((Q)ARG3(u)); |
|
} else if ( !strcmp(key,"splist") ) |
|
nd_splist = value?1:0; |
|
else if ( !strcmp(key,"check_splist") ) { |
|
nd_check_splist = BDY((LIST)value); |
} |
} |
} |
} |
} |
} |