void Position::init_evaluate() { #ifdef EVAL_TWIG Evaluater::init(); #else FILE *fp = NULL; size_t size; int iret = 0; #if !defined(USE_FVKPP2) || defined(TEST_FVKPP) //KPP do { fp = fopen(FV_KPP, "rb"); if (fp == NULL) { iret = -2; break; } size = nsquare * fe_end * fe_end; if (fread(kpp3, sizeof(int16_t), size, fp) != size){ iret = -2; break; } if (fgetc(fp) != EOF) { iret = -2; break; } } while (0); if (fp) fclose(fp); #endif #if defined(USE_FVKPP2) pc_on_pc_entry *pc_on_sq = new pc_on_pc_entry[nsquare]; do { fp = fopen(FV_KPP2, "rb"); if (fp == NULL) { iret = -2; break; } size = nsquare * pos_n; if (fread(pc_on_sq, sizeof(short), size, fp) != size){ iret = -2; break; } if (fgetc(fp) != EOF) { iret = -2; break; } } while (0); if (fp) fclose(fp); for (int sq = 0; sq < nsquare; ++sq) { for (int k = 0; k < fe_end; k++){ for (int j = 0; j < fe_end; j++){ short value = (k <= j ? PcPcOnSq(sq, j, k) : PcPcOnSq(sq, k, j)); #if defined(TEST_FVKPP) if (kpp3[sq][k][j] != value) { std::cerr << "Failed to load '"FV_KPP2"' file." << std::endl; iret = -3; exit(-1); } #endif kpp3[sq][k][j] = value; } } } delete[] pc_on_sq; pc_on_sq = NULL; #endif //KKP do { fp = fopen(FV_KKP, "rb"); if (fp == NULL) { iret = -2; break; } size = nsquare * nsquare * fe_end; if (fread(kkp, sizeof(int32_t), size, fp) != size){ iret = -2; break; } if (fgetc(fp) != EOF) { iret = -2; break; } } while (0); if (fp) fclose(fp); //KK do { fp = fopen(FV_KK, "rb"); if (fp == NULL) { iret = -2; break; } size = nsquare * nsquare; if (fread(kk, sizeof(int32_t), size, fp) != size){ iret = -2; break; } if (fgetc(fp) != EOF) { iret = -2; break; } } while (0); if (fp) fclose(fp); if (iret < 0) { std::cerr << "Can't load '*_synthesized' file." << std::endl; exit(-1); } #endif }
static void fv_sym( void ) { int q, r, il, ir, ir0, jl, jr, k0l, k0r, k1l, k1r; for ( k0l = 0; k0l < nsquare; k0l++ ) { q = k0l / nfile; r = k0l % nfile; k0r = q*nfile + nfile-1-r; if ( k0l > k0r ) { continue; } for ( il = 0; il < fe_end; il++ ) { if ( il < fe_hand_end ) { ir0 = il; } else { q = ( il- fe_hand_end ) / nfile; r = ( il- fe_hand_end ) % nfile; ir0 = q*nfile + nfile-1-r + fe_hand_end; } for ( jl = 0; jl <= il; jl++ ) { if ( jl < fe_hand_end ) { ir = ir0; jr = jl; } else { q = ( jl - fe_hand_end ) / nfile; r = ( jl - fe_hand_end ) % nfile; jr = q*nfile + nfile-1-r + fe_hand_end; if ( jr > ir0 ) { ir = jr; jr = ir0; } else { ir = ir0; } } if ( k0l == k0r && il*(il+1)/2+jl >= ir*(ir+1)/2+jr ) { continue; } PcPcOnSq(k0l,il,jl) = PcPcOnSq(k0r,ir,jr); } } } for ( k0l = 0; k0l < nsquare; k0l++ ) { q = k0l / nfile; r = k0l % nfile; k0r = q*nfile + nfile-1-r; if ( k0l > k0r ) { continue; } for ( k1l = 0; k1l < nsquare; k1l++ ) { q = k1l / nfile; r = k1l % nfile; k1r = q*nfile + nfile-1-r; if ( k0l == k0r && k1l > k1r ) { continue; } for ( il = 0; il < kkp_end; il++ ) { if ( il < kkp_hand_end ) { ir = il; } else { q = ( il- kkp_hand_end ) / nfile; r = ( il- kkp_hand_end ) % nfile; ir = q*nfile + nfile-1-r + kkp_hand_end; } if ( k0l == k0r && k1l == k1r && il >= ir ) { continue; } kkp[k0l][k1l][il] = kkp[k0r][k1r][ir]; } } } }