version 1.176, 2009/09/24 07:13:00 |
version 1.177, 2009/10/12 10:43:45 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.175 2009/09/09 08:13:24 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.176 2009/09/24 07:13:00 noro Exp $ */ |
|
|
#include "nd.h" |
#include "nd.h" |
|
|
Line 2594 int ndv_newps(int m,NDV a,NDV aq) |
|
Line 2594 int ndv_newps(int m,NDV a,NDV aq) |
|
} |
} |
|
|
/* nd_tracelist = [[0,index,div],...,[nd_psn-1,index,div]] */ |
/* nd_tracelist = [[0,index,div],...,[nd_psn-1,index,div]] */ |
|
/* return 1 if success, 0 if failure (HC(a mod p)) */ |
|
|
void ndv_setup(int mod,int trace,NODE f,int dont_sort,int dont_removecont) |
int ndv_setup(int mod,int trace,NODE f,int dont_sort,int dont_removecont) |
{ |
{ |
int i,j,td,len,max; |
int i,j,td,len,max; |
NODE s,s0,f0,tn; |
NODE s,s0,f0,tn; |
Line 2649 void ndv_setup(int mod,int trace,NODE f,int dont_sort, |
|
Line 2650 void ndv_setup(int mod,int trace,NODE f,int dont_sort, |
|
register_hcf(a); |
register_hcf(a); |
am = nd_ps[i] = ndv_dup(mod,a); |
am = nd_ps[i] = ndv_dup(mod,a); |
ndv_mod(mod,am); |
ndv_mod(mod,am); |
|
if ( DL_COMPARE(HDL(am),HDL(a)) ) |
|
return 0; |
ndv_removecont(mod,am); |
ndv_removecont(mod,am); |
} else { |
} else { |
a = nd_ps[i] = ndv_dup(mod,w[i].p); |
a = nd_ps[i] = ndv_dup(mod,w[i].p); |
Line 2675 void ndv_setup(int mod,int trace,NODE f,int dont_sort, |
|
Line 2678 void ndv_setup(int mod,int trace,NODE f,int dont_sort, |
|
} |
} |
} |
} |
if ( nd_gentrace && nd_tracelist ) NEXT(tn) = 0; |
if ( nd_gentrace && nd_tracelist ) NEXT(tn) = 0; |
|
return 1; |
} |
} |
|
|
struct order_spec *append_block(struct order_spec *spec, |
struct order_spec *append_block(struct order_spec *spec, |
Line 3135 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
Line 3139 void nd_gr_trace(LIST f,LIST v,int trace,int homo,int |
|
while ( 1 ) { |
while ( 1 ) { |
if ( Demand ) |
if ( Demand ) |
nd_demand = 1; |
nd_demand = 1; |
ndv_setup(m,1,fd0,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); |
} |
} |
cand = f4?nd_f4_trace(m,&perm):nd_gb_trace(m,ishomo || homo,&perm); |
ret = ndv_setup(m,1,fd0,0,0); |
if ( !cand ) { |
if ( ret ) |
|
cand = f4?nd_f4_trace(m,&perm):nd_gb_trace(m,ishomo || homo,&perm); |
|
if ( !ret || !cand ) { |
/* failure */ |
/* failure */ |
if ( trace > 1 ) { *rp = 0; return; } |
if ( trace > 1 ) { *rp = 0; return; } |
else m = get_lprime(++mindex); |
else m = get_lprime(++mindex); |