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; }