Esempio n. 1
0
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
}
Esempio n. 2
0
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];
      }
    }
  }
}