version 1.201, 2013/01/30 07:44:48 |
version 1.203, 2013/01/31 01:13:47 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.200 2012/12/17 07:20:44 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/engine/nd.c,v 1.202 2013/01/30 08:03:18 noro Exp $ */ |
|
|
#include "nd.h" |
#include "nd.h" |
|
|
struct oEGT eg_search; |
struct oEGT eg_search; |
|
|
int diag_period = 6; |
int diag_period = 6; |
|
int weight_check = 1; |
int (*ndl_compare_function)(UINT *a1,UINT *a2); |
int (*ndl_compare_function)(UINT *a1,UINT *a2); |
int nd_dcomp; |
int nd_dcomp; |
NM _nm_free_list; |
NM _nm_free_list; |
Line 3952 void nd_setup_parameters(int nvar,int max) { |
|
Line 3953 void nd_setup_parameters(int nvar,int max) { |
|
else if ( max < 65536 ) nd_bpe = 16; |
else if ( max < 65536 ) nd_bpe = 16; |
else nd_bpe = 32; |
else nd_bpe = 32; |
} |
} |
if ( !do_weyl && current_dl_weight_vector ) { |
if ( !do_weyl && weight_check && (current_dl_weight_vector || nd_matrix) ) { |
UINT t; |
UINT t; |
/* t = max(weights) */ |
int st; |
for ( i = 0, t = 0; i < nd_nvar; i++ ) |
int *v; |
if ( t < current_dl_weight_vector[i] ) |
/* t = max(weights) */ |
t = current_dl_weight_vector[i]; |
t = 0; |
/* i = bitsize of t */ |
if ( current_dl_weight_vector ) |
for ( i = 0; t; t >>=1, i++ ); |
for ( i = 0, t = 0; i < nd_nvar; i++ ) { |
/* i += bitsize of nd_nvar */ |
if ( (st=current_dl_weight_vector[i]) < 0 ) st = -st; |
for ( t = nd_nvar; t; t >>=1, i++); |
if ( t < st ) t = st; |
/* nd_bpe+i = bitsize of max(weights)*max(exp)*nd_nvar */ |
} |
if ( (nd_bpe+i) >= 31 ) |
if ( nd_matrix ) |
error("nd_setup_parameters : too large weight"); |
for ( i = 0; i < nd_matrix_len; i++ ) |
} |
for ( j = 0, v = nd_matrix[i]; j < nd_nvar; j++ ) { |
|
if ( (st=v[j]) < 0 ) st = -st; |
|
if ( t < st ) t = st; |
|
} |
|
/* i = bitsize of t */ |
|
for ( i = 0; t; t >>=1, i++ ); |
|
/* i += bitsize of nd_nvar */ |
|
for ( t = nd_nvar; t; t >>=1, i++); |
|
/* nd_bpe+i = bitsize of max(weights)*max(exp)*nd_nvar */ |
|
if ( (nd_bpe+i) >= 31 ) |
|
error("nd_setup_parameters : too large weight"); |
|
} |
nd_epw = (sizeof(UINT)*8)/nd_bpe; |
nd_epw = (sizeof(UINT)*8)/nd_bpe; |
elen = nd_nvar/nd_epw+(nd_nvar%nd_epw?1:0); |
elen = nd_nvar/nd_epw+(nd_nvar%nd_epw?1:0); |
nd_exporigin = nd_get_exporigin(nd_ord); |
nd_exporigin = nd_get_exporigin(nd_ord); |
Line 4945 NODE ndv_reducebase(NODE x,int *perm) |
|
Line 4957 NODE ndv_reducebase(NODE x,int *perm) |
|
void nd_init_ord(struct order_spec *ord) |
void nd_init_ord(struct order_spec *ord) |
{ |
{ |
nd_module = (ord->id >= 256); |
nd_module = (ord->id >= 256); |
|
nd_matrix = 0; |
|
nd_matrix_len = 0; |
switch ( ord->id ) { |
switch ( ord->id ) { |
case 0: |
case 0: |
switch ( ord->ord.simple ) { |
switch ( ord->ord.simple ) { |