Esempio n. 1
0
VMCUpdatePbyP::RealType VMCUpdatePbyP::advanceWalkerForEE(Walker_t& w1, vector<PosType>& dR, vector<int>& iats, vector<int>& rs, vector<RealType>& ratios)
{
  Walker_t::Buffer_t& w_buffer(w1.DataSet);
  W.loadWalker(w1,true);
  Psi.copyFromBuffer(W,w_buffer);
  vector<RealType> runningratio(3,1.0);
  int sh(0);
  int nshells(ratios.size()/3);
  vector<RealType> orb_ratios;
//                 accumulate ratios on the way there
  for(int itz(0); itz<(iats.size()-1); itz++)
  {
    int iat=iats[itz];
    W.makeMove(iat,dR[itz]);
    RealType ratio = Psi.ratioVector(W,iat,orb_ratios);
    runningratio[0]*=ratio;
    runningratio[1]*=orb_ratios[0];
    runningratio[2]*=ratio/orb_ratios[0];
    W.acceptMove(iat);
    Psi.acceptMove(W,iat);
    while(itz+1==rs[sh])
    {
      ratios[sh]=runningratio[0];
      ratios[nshells+sh]=runningratio[1];
      ratios[nshells*2+sh++]=runningratio[2];
    }
  }
  //we get to reject the last move
  {
    int iat=iats[iats.size()-1];
    W.makeMove(iat,dR[iats.size()-1]);
    RealType ratio = Psi.ratioVector(W,iat,orb_ratios);
    runningratio[0]*=ratio;
    runningratio[1]*=orb_ratios[0];
    runningratio[2]*=ratio/orb_ratios[0];
    W.rejectMove(iat);
    Psi.rejectMove(iat);
    while(nshells*2+sh < ratios.size())
    {
      ratios[sh]=runningratio[0];
      ratios[nshells+sh]=runningratio[1];
      ratios[nshells*2+sh++]=runningratio[2];
    }
  }
//                 put the particles back
  for(int itz(0); itz<iats.size(); itz++)
    dR[itz]*=-1;
  for(int itz(iats.size()-2); itz>=0; itz--)
  {
    int iat=iats[itz];
    W.makeMove(iat,dR[itz]);
    RealType ratio = Psi.ratio(W,iat);
    W.acceptMove(iat);
    Psi.acceptMove(W,iat);
  }
//     Psi.updateBuffer(W,w_buffer,false);
//     W.saveWalker(thisWalker);
  return runningratio[0];
}
Esempio n. 2
0
/* wrapper for R */
void R_runningratio(int *n, double *pos, double *numerator, double *denominator,
                    int *n_result, double *resultpos, double *result, double *window)
{
    runningratio(*n, pos, numerator, denominator, *n_result, resultpos, result, *window);
}