=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/engine/nd.c,v retrieving revision 1.56 retrieving revision 1.60 diff -u -p -r1.56 -r1.60 --- OpenXM_contrib2/asir2018/engine/nd.c 2021/12/05 22:41:04 1.56 +++ OpenXM_contrib2/asir2018/engine/nd.c 2021/12/17 23:53:13 1.60 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM_contrib2/asir2018/engine/nd.c,v 1.55 2021/11/29 09:19:33 noro Exp $ */ +/* $OpenXM: OpenXM_contrib2/asir2018/engine/nd.c,v 1.59 2021/12/14 01:02:40 noro Exp $ */ #include "nd.h" @@ -2505,6 +2505,7 @@ void setup_hpdata(HPDATA final,HPDATA current) final->n = n = nd_nvar; final->hn = (P)BDY(nd_hpdata); +#if 0 if ( NEXT(nd_hpdata) != 0 && (weight=(LIST)BDY(NEXT(nd_hpdata))) != 0 ) { wlen = length(BDY(weight)); if ( n != wlen ) @@ -2514,6 +2515,9 @@ void setup_hpdata(HPDATA final,HPDATA current) w[i] = ZTOS((Z)BDY(nd)); } else w = 0; +#else + w = current_dl_weight_vector; +#endif MKVECT(x,n); for ( i = 0; i < n; i++ ) { NEWDL(dl,n); dl->d[i] = 1; dl->td = 1; BDY(x)[i] = dl; @@ -2541,7 +2545,7 @@ int comp_hn(P a, P b) DCP dc; subp(CO,a,b,&s); - if ( !s ) return 99999999; /* XXX */ + if ( !s ) return -1; else if ( OID(s) == 1 ) return 0; else { for ( dc = DC(s); NEXT(dc); dc = NEXT(dc) ); @@ -2704,17 +2708,19 @@ get_eg(&eg2); add_eg(&eg_update,&eg1,&eg2); g = update_base(g,nh); FREENDP(l); if ( nd_hpdata ) { - int dg; + int dg,sugar0; update_hpdata(¤t_hpdata,nh); dg = comp_hn(final_hpdata.hn,current_hpdata.hn); - if ( dg > sugar ) { - printexpr(CO,(Obj)current_hpdata.hn); printf("\n"); + if ( dg < 0 ) { + fprintf(asir_out,"We found a gb\n"); + d = 0; } - while ( d && dg > sugar ) { - if ( DP_Print ) fprintf(asir_out,"sugar=%d done.\n",sugar); - d = nd_remove_same_sugar(d,sugar); - sugar++; + sugar0 = sugar; + while ( d && dg > sugar0 ) { + if ( DP_Print ) { fprintf(asir_out,"[%d]",sugar0); fflush(asir_out); } + d = nd_remove_same_sugar(d,sugar0); + sugar0++; } } } else { @@ -2726,14 +2732,14 @@ get_eg(&eg2); add_eg(&eg_update,&eg1,&eg2); MKNODE(t,list,nd_alltracelist); nd_alltracelist = t; nd_tracelist = 0; } - if ( DP_Print ) { printf("."); fflush(stdout); } + if ( DP_Print ) { fprintf(asir_out,"."); fflush(asir_out); } FREENDP(l); } } conv_ilist(nd_demand,0,g,indp); if ( !checkonly && DP_Print ) { - printf("\nnd_gb done. Nnd_add=%d,Npairs=%d, Nnfnz=%d,Nnfz=%d,",Nnd_add,Npairs,Nnfnz,Nnfz); - printf("Nremoved=%d\n",NcriB+NcriMF+Ncri2); + fprintf(asir_out,"\nnd_gb done. Nbase=%d,Nnd_add=%d,Npairs=%d, Nnfnz=%d,Nnfz=%d,",nd_psn,Nnd_add,Npairs,Nnfnz,Nnfz); + fprintf(asir_out,"Nremoved=%d\n",NcriB+NcriMF+Ncri2); fflush(asir_out); } if ( DP_Print ) { @@ -3187,7 +3193,7 @@ get_eg(&eg2); add_eg(&eg_remove,&eg1,&eg2); g = conv_ilist_s(nd_demand,0,indp); if ( DP_Print ) { printf("\ndlen=%d,nd_sba done. nd_add=%d,Nsyz=%d,Nsamesig=%d,Nnominimal=%d\n",dlen,Nnd_add,Nsyz,Nsamesig,Nnominimal); - printf("Nnfnz=%d,Nnfz=%d,Nnfsingular=%d\n",Nnfnz,Nnfz,Nnfs); + printf("Nbase=%d,Nnfnz=%d,Nnfz=%d,Nnfsingular=%d\n",Nnfnz,Nnfz,Nnfs,nd_psn); fflush(stdout); if ( nd_sba_redundant_check ) printf("Nredundant=%d\n",Nredundant); @@ -3505,24 +3511,26 @@ again: d = update_pairs(d,g,nh,0); g = update_base(g,nh); if ( nd_hpdata ) { - int dg; + int dg,sugar0; update_hpdata(¤t_hpdata,nh); dg = comp_hn(final_hpdata.hn,current_hpdata.hn); - if ( dg > sugar ) { - printexpr(CO,(Obj)current_hpdata.hn); printf("\n"); + if ( dg < 0 ) { + fprintf(asir_out,"We found a gb\n"); + d = 0; } - while ( d && dg > sugar ) { - if ( DP_Print ) fprintf(asir_out,"sugar=%d done.\n",sugar); - d = nd_remove_same_sugar(d,sugar); - sugar++; + sugar0 = sugar; + while ( d && dg > sugar0 ) { + if ( DP_Print ) { fprintf(asir_out,"[%d]",sugar0); fflush(asir_out); } + d = nd_remove_same_sugar(d,sugar0); + sugar0++; } } } else { - if ( DP_Print ) { printf("*"); fflush(stdout); } + if ( DP_Print ) { fprintf(asir_out,"*"); fflush(asir_out); } } } else { - if ( DP_Print ) { printf("."); fflush(stdout); } + if ( DP_Print ) { fprintf(asir_out,"."); fflush(asir_out); } } FREENDP(l); } @@ -3534,7 +3542,7 @@ again: } } conv_ilist(nd_demand,1,g,indp); - if ( DP_Print ) { printf("\nnd_gb_trace done.\n"); fflush(stdout); } + if ( DP_Print ) { fprintf(asir_out,"\nnd_gb_trace done. Nbase=%d\n",nd_psn); fflush(asir_out); } return g; }