version 1.121, 2004/12/09 08:56:43 |
version 1.124, 2005/02/09 07:58:43 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.120 2004/12/07 15:15:52 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.123 2005/01/23 14:03:48 noro Exp $ */ |
|
|
#include "nd.h" |
#include "nd.h" |
|
|
Line 1537 ND normalize_pbucket(int mod,PGeoBucket g) |
|
Line 1537 ND normalize_pbucket(int mod,PGeoBucket g) |
|
return r; |
return r; |
} |
} |
|
|
void do_diagonalize(int sugar,int m) |
int do_diagonalize(int sugar,int m) |
{ |
{ |
int i,nh,stat; |
int i,nh,stat; |
NODE r,g,t; |
NODE r,g,t; |
Line 1553 void do_diagonalize(int sugar,int m) |
|
Line 1553 void do_diagonalize(int sugar,int m) |
|
nfv = nd_ps[i]; |
nfv = nd_ps[i]; |
s = ndvtond(m,nfv); |
s = ndvtond(m,nfv); |
s = nd_separate_head(s,&head); |
s = nd_separate_head(s,&head); |
nd_nf(m,s,nd_ps,1,&dn,&nf); |
stat = nd_nf(m,s,nd_ps,1,&dn,&nf); |
|
if ( !stat ) return 0; |
if ( !m ) { |
if ( !m ) { |
NTOQ(NM(dn.z),SGN(dn.z),num); |
NTOQ(NM(dn.z),SGN(dn.z),num); |
mulq(HCQ(head),num,&q); HCQ(head) = q; |
mulq(HCQ(head),num,&q); HCQ(head) = q; |
Line 1574 void do_diagonalize(int sugar,int m) |
|
Line 1575 void do_diagonalize(int sugar,int m) |
|
} else |
} else |
nd_ps[i] = nfv; |
nd_ps[i] = nfv; |
} |
} |
|
return 1; |
} |
} |
|
|
/* return value = 0 => input is not a GB */ |
/* return value = 0 => input is not a GB */ |
Line 1599 NODE nd_gb(int m,int ishomo,int checkonly) |
|
Line 1601 NODE nd_gb(int m,int ishomo,int checkonly) |
|
again: |
again: |
l = nd_minp(d,&d); |
l = nd_minp(d,&d); |
if ( SG(l) != sugar ) { |
if ( SG(l) != sugar ) { |
if ( ishomo ) do_diagonalize(sugar,m); |
if ( ishomo ) { |
|
stat = do_diagonalize(sugar,m); |
|
if ( !stat ) { |
|
NEXT(l) = d; d = l; |
|
d = nd_reconstruct(0,d); |
|
goto again; |
|
} |
|
} |
sugar = SG(l); |
sugar = SG(l); |
if ( DP_Print ) fprintf(asir_out,"%d",sugar); |
if ( DP_Print ) fprintf(asir_out,"%d",sugar); |
} |
} |
|
|
return g; |
return g; |
} |
} |
|
|
void do_diagonalize_trace(int sugar,int m) |
int do_diagonalize_trace(int sugar,int m) |
{ |
{ |
int i,nh,stat; |
int i,nh,stat; |
NODE r,g,t; |
NODE r,g,t; |
Line 1659 void do_diagonalize_trace(int sugar,int m) |
|
Line 1667 void do_diagonalize_trace(int sugar,int m) |
|
/* for nd_ps */ |
/* for nd_ps */ |
s = ndvtond(m,nd_ps[i]); |
s = ndvtond(m,nd_ps[i]); |
s = nd_separate_head(s,&head); |
s = nd_separate_head(s,&head); |
nd_nf_pbucket(m,s,nd_ps,1,&nf); |
stat = nd_nf_pbucket(m,s,nd_ps,1,&nf); |
|
if ( !stat ) return 0; |
nf = nd_add(m,head,nf); |
nf = nd_add(m,head,nf); |
ndv_free(nd_ps[i]); |
ndv_free(nd_ps[i]); |
nd_ps[i] = ndtondv(m,nf); |
nd_ps[i] = ndtondv(m,nf); |
Line 1672 void do_diagonalize_trace(int sugar,int m) |
|
Line 1681 void do_diagonalize_trace(int sugar,int m) |
|
nfv = nd_ps_trace[i]; |
nfv = nd_ps_trace[i]; |
s = ndvtond(0,nfv); |
s = ndvtond(0,nfv); |
s = nd_separate_head(s,&head); |
s = nd_separate_head(s,&head); |
nd_nf(0,s,nd_ps_trace,1,&dn,&nf); |
stat = nd_nf(0,s,nd_ps_trace,1,&dn,&nf); |
|
if ( !stat ) return 0; |
NTOQ(NM(dn.z),SGN(dn.z),num); |
NTOQ(NM(dn.z),SGN(dn.z),num); |
mulq(HCQ(head),num,&q); HCQ(head) = q; |
mulq(HCQ(head),num,&q); HCQ(head) = q; |
if ( DN(dn.z) ) { |
if ( DN(dn.z) ) { |
Line 1691 void do_diagonalize_trace(int sugar,int m) |
|
Line 1701 void do_diagonalize_trace(int sugar,int m) |
|
} else |
} else |
nd_ps_trace[i] = nfv; |
nd_ps_trace[i] = nfv; |
} |
} |
|
return 1; |
} |
} |
|
|
static struct oEGT eg_invdalg; |
static struct oEGT eg_invdalg; |
Line 1721 NODE nd_gb_trace(int m,int ishomo) |
|
Line 1732 NODE nd_gb_trace(int m,int ishomo) |
|
again: |
again: |
l = nd_minp(d,&d); |
l = nd_minp(d,&d); |
if ( SG(l) != sugar ) { |
if ( SG(l) != sugar ) { |
if ( ishomo ) do_diagonalize_trace(sugar,m); |
if ( ishomo ) { |
|
stat = do_diagonalize_trace(sugar,m); |
|
if ( !stat ) { |
|
NEXT(l) = d; d = l; |
|
d = nd_reconstruct(1,d); |
|
goto again; |
|
} |
|
} |
sugar = SG(l); |
sugar = SG(l); |
if ( DP_Print ) fprintf(asir_out,"%d",sugar); |
if ( DP_Print ) fprintf(asir_out,"%d",sugar); |
} |
} |
Line 2348 void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe |
|
Line 2366 void nd_gr(LIST f,LIST v,int m,int f4,struct order_spe |
|
break; |
break; |
} |
} |
nd_nalg = 0; |
nd_nalg = 0; |
|
av = 0; |
if ( !m ) { |
if ( !m ) { |
get_algtree((Obj)f,&av); |
get_algtree((Obj)f,&av); |
for ( nalg = 0, tv = av; tv; tv = NEXT(tv), nalg++ ); |
for ( nalg = 0, tv = av; tv; tv = NEXT(tv), nalg++ ); |
Line 2468 void nd_gr_trace(LIST f,LIST v,int trace,int homo,stru |
|
Line 2487 void nd_gr_trace(LIST f,LIST v,int trace,int homo,stru |
|
if ( in0 ) NEXT(in) = 0; |
if ( in0 ) NEXT(in) = 0; |
if ( fd0 ) NEXT(fd) = 0; |
if ( fd0 ) NEXT(fd) = 0; |
if ( !ishomo && homo ) { |
if ( !ishomo && homo ) { |
for ( t = in0, wmax = 0; t; t = NEXT(t) ) { |
for ( t = in0, wmax = max; t; t = NEXT(t) ) { |
c = (NDV)BDY(t); len = LEN(c); |
c = (NDV)BDY(t); len = LEN(c); |
for ( a = BDY(c), i = 0; i < len; i++, NMV_ADV(a) ) |
for ( a = BDY(c), i = 0; i < len; i++, NMV_ADV(a) ) |
wmax = MAX(TD(DL(a)),wmax); |
wmax = MAX(TD(DL(a)),wmax); |
Line 3396 ND nd_quo(int mod,PGeoBucket bucket,NDV d) |
|
Line 3415 ND nd_quo(int mod,PGeoBucket bucket,NDV d) |
|
ND p,t,r; |
ND p,t,r; |
N tnm; |
N tnm; |
|
|
if ( !p ) return 0; |
if ( bucket->m < 0 ) return 0; |
else { |
else { |
nv = NV(d); |
nv = NV(d); |
mq0 = 0; |
mq0 = 0; |