Example #1
0
vector<double> pimc::pimc_run(int NumSteps, path p)
{
  int NumParticle=p.get_NumParticle();
 
  for (int steps=0; steps<NumSteps; steps++)
  {
      // for each particle try a center-of-mass random move
      for (int i=0; i<NumParticle; i++) 
      {
        int ptcl= (int) NumParticle*((double) rand() / (RAND_MAX)) ;         
        //cout<< ptcl << endl;
        if( CenterOfMassMove(p,ptcl) )
            cnumAccept += 1;
      }

      // for each particle try a staging move
      /*for (int i=0; i<NumParticle; i++)
      {
        int ptcl= (int) NumParticle*((double) rand() / (RAND_MAX)) ;
        if ( StagingMove(p,ptcl))
              snumAccept += 1;
      }*/

      // measure the energy
      if ( (steps % observableSkip == 0) && (steps > equilSkip) )
      {
          double E = p.Energy();
          EnergyTrace.push_back(E);
      }
  }

  cout<< "Acceptance Ratios:" <<endl;
  cout<< "Total Sampling:   " << NumSteps*NumParticle << endl;
  cout<< "Accepted CM:      " << cnumAccept <<endl; 
  cout<< "Accepted Stage:   " << snumAccept <<endl;
  cout<< "Center of Mass:   " << ((1.0*cnumAccept)/(NumSteps*NumParticle)) << endl;
  cout<< "Staging:          " << ((1.0*snumAccept)/(NumSteps*NumParticle)) << endl;
  return EnergyTrace;  

}