Path Integral Quantum Monte Carlo

The base class that all moves will be derived from. More...
#include <move.h>
Public Member Functions  
MoveBase (Path &, ActionBase *, MTRand &, ensemble _operateOnConfig=ANY, bool _varLength=false)  
Move naming conventions:  
virtual  ~MoveBase () 
Destructor.  
virtual string  getName () 
return the move name  
double  getAcceptanceRatio () 
Get the acceptance ratio.  
double  getTotAcceptanceRatio () 
Get the total acceptance ratio.  
double  getAcceptanceRatioLevel (int n) 
Get the acceptance ratio by level.  
int  getNumAttempted () 
Get the number of moves attempted.  
int  getNumAccepted () 
Get the number of moves accepted.  
int  getNumAttemptedLevel (int n) 
Get the number of moves attempted by level.  
int  getNumAcceptedLevel (int n) 
Get the number of moves accepted by level.  
virtual bool  attemptMove ()=0 
Attempt the move (will be overloaded).  
void  resetTotAccept () 
Reset the total accepted counter.  
void  resetAccept () 
Reset the number accepted counter.  
Public Attributes  
ensemble  operateOnConfig 
What configurations do we operate on?  
bool  variableLength 
Does the move have a variable length?  
string  name1 
Protected Member Functions  
virtual void  keepMove () 
Keep the move.  
virtual void  undoMove ()=0 
undo the move  
dVec  newStagingPosition (const beadLocator &, const beadLocator &, const int, const int) 
Returns a new staging position which will exactly sample the kinetic action.  
dVec  newStagingPosition (const beadLocator &, const beadLocator &, const int, const int, iVec &) 
Returns a new staging position which will exactly sample the kinetic action in different winding sectors.  
iVec  sampleWindingSector (const beadLocator &, const beadLocator &, const int, double &) 
Obtain a winding sector for a stagelike move.  
iVec  getWindingNumber (const beadLocator &, const beadLocator &) 
Find the winding number for a path between two beads.  
dVec  newFreeParticlePosition (const beadLocator &) 
Generates a new position, which exactly samples the free particle density matrix.  
dVec  newBisectionPosition (const beadLocator &, const int) 
Returns a new bisection position which will exactly sample the kinetic action.  
void  printMoveState (string) 
void  checkMove (int, double) 
Protected Attributes  
Path &  path 
A reference to the paths.  
ActionBase *  actionPtr 
A base pointer to the action.  
MTRand &  random 
A reference to the RNG.  
bool  success 
Did we sucessfully perform a move?  
uint32  numAccepted 
The number of accepted moves.  
uint32  numAttempted 
The number of attempted moves.  
int  numToMove 
The number of particles moved.  
int  numLevels 
Array< uint32, 1 >  numAcceptedLevel 
The number of moves accepted at each level.  
Array< uint32, 1 >  numAttemptedLevel 
The number of moves attempted at each level.  
Array< dVec, 1 >  originalPos 
The original particle positions.  
Array< dVec, 1 >  newPos 
New particle positions.  
vector< iVec >  winding 
The winding vectors.  
vector< int >  windingSector 
Used to index different winding sectors.  
vector< double >  cumrho0 
Used for towersampling winding sectors.  
int  maxWind 
The largest winding number.  
int  numWind 
The total number of winding vectors.  
double  oldAction 
The original potential action.  
double  newAction 
The new potential action.  
double  deltaAction 
The action difference.  
double  sqrt2LambdaTau 
sqrt(2 * Lambda * tau)  
double  sqrtLambdaTau 
sqrt(Lambda * tau)  
beadLocator  nBeadIndex 
Neighbor bead index.  
dVec  neighborPos 
Staging neighbor position.  
dVec  newRanPos 
Staing random position.  
double  newK 
double  oldK 
The old and new kinetic action.  
double  newV 
double  oldV 
The old and new potential action.  
Static Protected Attributes  
static uint32  totAccepted = 0 
The total number of moves accepted.  
static uint32  totAttempted = 0 
The total number of moves attempted.  
Friends  
class  PathIntegralMonteCarlo 
The base class that all moves will be derived from.
There will be a bunch of different types of moves, those which move individual particles, the center of mass of an entire worldine loop etc. They will all share the basic functionality defined here.
MoveBase::MoveBase  (  Path &  _path, 
ActionBase *  _actionPtr,  
MTRand &  _random,  
ensemble  _operateOnConfig = ANY , 

bool  _varLength = false 

) 
virtual bool MoveBase::attemptMove  (  )  [pure virtual] 
Attempt the move (will be overloaded).
Implemented in SwapTailMove, SwapHeadMove, RecedeTailMove, RecedeHeadMove, AdvanceTailMove, AdvanceHeadMove, RemoveMove, InsertMove, CloseMove, OpenMove, BisectionMove, StagingMove, CenterOfMassMove, SwapBreakMove, MidStagingMove, EndStagingMove, and DisplaceMove.
double MoveBase::getAcceptanceRatio  (  )  [inline] 
double MoveBase::getAcceptanceRatioLevel  (  int  n  )  [inline] 
double MoveBase::getTotAcceptanceRatio  (  )  [inline] 
iVec MoveBase::getWindingNumber  (  const beadLocator &  startBead, 
const beadLocator &  endBead  
)  [protected] 
Find the winding number for a path between two beads.
Find the winding number for a given path between two beads.
By following a trajectory between two beads, accumulate the winding number by tracking when periodic boundary conditions are invoked.
startBead  The index of the start of the stage 
endBead  The index of the final bead in the stage 
DEBUG void MoveBase::keepMove  (  )  [protected, virtual] 
dVec MoveBase::newBisectionPosition  (  const beadLocator &  beadIndex, 
const int  lshift  
)  [protected] 
Returns a new bisection position which will exactly sample the kinetic action.
beadIndex  The bead that we want a new position for 
lshift  The number of time slices between beads moved at this level 
dVec MoveBase::newFreeParticlePosition  (  const beadLocator &  neighborIndex  )  [protected] 
Generates a new position, which exactly samples the free particle density matrix.
Compute a position which is selected from a guassian distribution with a mean at a neighboring position, and variance equal to 2 * lambda * tau.
neighborIndex  the beadLocator for a neighboring bead 
dVec MoveBase::newStagingPosition  (  const beadLocator &  neighborIndex, 
const beadLocator &  endIndex,  
const int  stageLength,  
const int  k  
)  [protected] 
Returns a new staging position which will exactly sample the kinetic action.
neighborIndex  The index of the bead to be updated's neighbor 
endIndex  The index of the final bead in the stage 
stageLength  The length of the stage 
k  The position along the stage 
dVec MoveBase::newStagingPosition  (  const beadLocator &  neighborIndex, 
const beadLocator &  endIndex,  
const int  stageLength,  
const int  k,  
iVec &  wind  
)  [protected] 
Returns a new staging position which will exactly sample the kinetic action in different winding sectors.
neighborIndex  The index of the bead to be updated's neighbor 
endIndex  The index of the final bead in the stage 
stageLength  The length of the stage 
k  The position along the stage 
iVec MoveBase::sampleWindingSector  (  const beadLocator &  startBead, 
const beadLocator &  endBead,  
const int  stageLength,  
double &  totalrho0  
)  [protected] 
Obtain a winding sector for a stagelike move.
Determine the winding sector to sample for a stage like move.
Perform tower sampling to select a winding sector from the free particle kinetic density matrix.
startBead  The index of the start of the stage 
endBead  The index of the final bead in the stage 
stageLength  The length of the stage 