QMCWalkerData Class Reference

The QMCWalkerData data type is meant to hold all the information calculated by QMCFunction that is useful to QMCWalker. More...

#include <QMCWalkerData.h>

List of all members.

Public Member Functions

 QMCWalkerData ()
 The QMCWalkerData data type is meant to hold all the information calculated by QMCFunction that is useful to QMCWalker.
 ~QMCWalkerData ()
void initialize (int numDimensions, int numNucForceDim1, int numNucForceDim2)
void partialCopy (const QMCWalkerData &rhs)
 When we're proposing a trial move, we need to save some data from the original position.
bool isSingular ()
double getModifiedLocalEnergy ()
void zero ()
void writeConfigs (Array2D< double > &Positions, double weight)
void updateDistances (Array2D< double > &R)
 Once we've moved an electron, we want to update the arrays in QMCWalkerData which contain the interparticle distances, as well as electron-electron unit vectors.

Public Attributes

int whichE
 When we're updating all electrons, whichE will be set to -1.
Array2D< double > rij
 Several parts of the code use the interparticle distances and unit vectors, so we only want to calculate them once.
Array3D< double > rij_uvec
Array2D< double > riA
Array3D< double > riA_uvec
Array1D< Array2D< double > > Dc_invA
 These are raw data for the calculation of the determinant part of the wavefunction.
Array1D< Array2D< double > > Dc_invB
Array2D< qmcfloatD_xxA
Array2D< qmcfloatD_xxB
Array1D< Array2D< qmcfloat > > D_xA
Array1D< Array2D< qmcfloat > > D_xB
Array1D< double > DcA
Array1D< double > DcB
Array1D< double > rDc_xxA
Array1D< double > rDc_xxB
Array3D< double > rDc_xA
Array3D< double > rDc_xB
Array1D< double > Chi_DensityA
Array1D< double > Chi_DensityB
Array2D< double > Uij
 These are the raw data specifically from the Jastrow part of the wavefunction.
Array3D< double > Uij_x
 $\nabla\ln(J)=\nabla\sum{u_{i,j}(r_{i,j})}$
Array2D< double > Uij_xx
 $\nabla^2\ln(J)=\nabla^2\sum{u_{i,j}(r_{i,j})}$
Array2D< double > UiA
Array3D< double > UiA_x
Array2D< double > UiA_xx
Array2D< double > UijA
Array1D< Array2D< double > > UijA_x1
Array1D< Array2D< double > > UijA_x2
Array2D< double > UijA_xx
QMCDouble D
 These are intermediate data specifically from the determinant part of the wavefunction.
Array2D< double > D_x
double D_xx
double U
 These are the intermediate data specifically from the Jastrow part of the wavefunction.
Array2D< double > U_x
double U_xx
double localEnergy
 These are the final values for the wavefunction.
double kineticEnergy
double potentialEnergy
double neEnergy
double eeEnergy
QMCDouble psi
Array2D< double > gradPsiRatio
 Gets the ratio of the wavefunction gradient to the wavefunction value at the last evaluated electronic configuration.
Array2D< double > modifiedGradPsiRatio
 Gets a modified version of the ratio of the wavefunction gradient to the wavefunction value at the last evaluated electronic configuration.
double modificationRatio
bool singular
 This is set to true if there is any known numerical problem with the wavefunction.
Array2D< double > nuclearDerivatives
 This holds derivatives of the Hamiltonian (Hellman-Feynmann theorem) evaluated with respect to each nucleus.
Array1D< double > chiDensity
Array1D< double > cs_LocalEnergy
Array1D< double > cs_Weights
Array1D< double > rp_a
Array1D< double > p3_xxa

Friends

ostream & operator<< (ostream &strm, const QMCWalkerData &rhs)


Detailed Description

The QMCWalkerData data type is meant to hold all the information calculated by QMCFunction that is useful to QMCWalker.

This should in effect decouple QMCFunction and QMCWalker from each other enabling QMCFunction to be treated a little bit differently without significant modifications to QMCWalker.

Definition at line 33 of file QMCWalkerData.h.


Constructor & Destructor Documentation

QMCWalkerData::QMCWalkerData (  ) 

The QMCWalkerData data type is meant to hold all the information calculated by QMCFunction that is useful to QMCWalker.

This should in effect decouple QMCFunction and QMCWalker from each other enabling QMCFunction to be treated a little bit differently without significant modifications to QMCWalker.

Definition at line 24 of file QMCWalkerData.cpp.

QMCWalkerData::~QMCWalkerData (  ) 

Definition at line 28 of file QMCWalkerData.cpp.


Member Function Documentation

void QMCWalkerData::initialize ( int  numDimensions,
int  numNucForceDim1,
int  numNucForceDim2 
)

void QMCWalkerData::partialCopy ( const QMCWalkerData rhs  ) 

When we're proposing a trial move, we need to save some data from the original position.

This function copies only the data we know we need to keep around in order to calculate the acceptance probability.

However, if the move is not accepted, then we'll need all of this data back again if we're doing one electron updates.

The question is whether it's faster to save all the data in this class, or to recalculate the data only if we need it. If we have a lot of electrons, then this represents a lot of data. Furthermore, the acceptance probability is probably high.

I think it's faster to "update" the trial data back to the original data if the move is not accepted.

Definition at line 32 of file QMCWalkerData.cpp.

References D, D_x, D_xx, eeEnergy, gradPsiRatio, kineticEnergy, localEnergy, modifiedGradPsiRatio, neEnergy, potentialEnergy, psi, riA, riA_uvec, and singular.

Referenced by QMCWalker::createChildWalkers().

bool QMCWalkerData::isSingular (  ) 

Definition at line 222 of file QMCWalkerData.cpp.

References D_xx, IeeeMath::isNaN(), kineticEnergy, potentialEnergy, singular, and U_xx.

Referenced by QMCWalker::isSingular().

double QMCWalkerData::getModifiedLocalEnergy (  ) 

void QMCWalkerData::zero (  ) 

void QMCWalkerData::writeConfigs ( Array2D< double > &  Positions,
double  weight 
)

void QMCWalkerData::updateDistances ( Array2D< double > &  R  ) 

Once we've moved an electron, we want to update the arrays in QMCWalkerData which contain the interparticle distances, as well as electron-electron unit vectors.

The purpose is so that we only have to calculate this stuff once, and then everybody else just gets the saved data.

Definition at line 298 of file QMCWalkerData.cpp.

References QMCMolecule::Atom_Positions, Array2D< T >::dim1(), QMCMolecule::getNumberAtoms(), globalInput, QMCInput::Molecule, riA, riA_uvec, MathFunctions::rij(), rij, rij_uvec, and whichE.

Referenced by QMCJastrow::evaluate(), QMCSurfer::mainMenu(), QMCWalker::moveElectrons(), QMCWalker::processPropagation(), QMCWalker::readXML(), QMCSurfer::scanEnergies(), and QMCWalker::setR().


Friends And Related Function Documentation

ostream& operator<< ( ostream &  strm,
const QMCWalkerData rhs 
) [friend]

Definition at line 236 of file QMCWalkerData.cpp.


Member Data Documentation

Several parts of the code use the interparticle distances and unit vectors, so we only want to calculate them once.

rij is for electron-electron distances riA is for electron-nucleus distances

Definition at line 73 of file QMCWalkerData.h.

Referenced by QMCPotential_Energy::calc_P_ee(), QMCThreeBodyJastrow::collectForPair(), QMCJastrowElectronElectron::collectForPair(), initialize(), and updateDistances().

These are raw data for the calculation of the determinant part of the wavefunction.

We need to save all of this if we're updating one electron at a time.

Definition at line 83 of file QMCWalkerData.h.

Referenced by QMCPotential_Energy::evaluatePsuedoPotential(), and initialize().

Definition at line 84 of file QMCWalkerData.h.

Referenced by QMCPotential_Energy::evaluatePsuedoPotential(), and initialize().

Definition at line 85 of file QMCWalkerData.h.

Referenced by initialize().

Definition at line 86 of file QMCWalkerData.h.

Referenced by initialize().

Definition at line 87 of file QMCWalkerData.h.

Referenced by initialize().

Definition at line 88 of file QMCWalkerData.h.

Referenced by initialize().

Definition at line 90 of file QMCWalkerData.h.

Referenced by QMCPotential_Energy::evaluatePsuedoPotential(), and initialize().

Definition at line 90 of file QMCWalkerData.h.

Referenced by QMCPotential_Energy::evaluatePsuedoPotential(), and initialize().

Definition at line 91 of file QMCWalkerData.h.

Referenced by initialize().

Definition at line 91 of file QMCWalkerData.h.

Referenced by initialize().

Definition at line 92 of file QMCWalkerData.h.

Referenced by initialize().

Definition at line 92 of file QMCWalkerData.h.

Referenced by initialize().

Definition at line 94 of file QMCWalkerData.h.

Definition at line 94 of file QMCWalkerData.h.

These are the raw data specifically from the Jastrow part of the wavefunction.

We want to remember all the calculated Jastrow data. This data is needed for an efficient implementation of one electron updates, since we need to remember the Jastrow evaluations for all the other electrons.

Uij is for the electron-electron jastrows UiA is for the electron-nucleus jastrows UijA is for the 3 particle jastrows $\ln(J)=\sum{u_{i,j}(r_{i,j})}$

Definition at line 113 of file QMCWalkerData.h.

Referenced by QMCJastrowElectronElectron::collectForPair(), and initialize().

$\nabla\ln(J)=\nabla\sum{u_{i,j}(r_{i,j})}$

Definition at line 118 of file QMCWalkerData.h.

Referenced by QMCJastrowElectronElectron::collectForPair(), and initialize().

$\nabla^2\ln(J)=\nabla^2\sum{u_{i,j}(r_{i,j})}$

Definition at line 123 of file QMCWalkerData.h.

Referenced by QMCJastrowElectronElectron::collectForPair(), and initialize().

Definition at line 125 of file QMCWalkerData.h.

Referenced by QMCJastrowElectronNuclear::evaluate(), and initialize().

Definition at line 126 of file QMCWalkerData.h.

Referenced by QMCJastrowElectronNuclear::evaluate(), and initialize().

Definition at line 127 of file QMCWalkerData.h.

Referenced by QMCJastrowElectronNuclear::evaluate(), and initialize().

These are intermediate data specifically from the determinant part of the wavefunction.

Definition at line 138 of file QMCWalkerData.h.

Referenced by QMCSCFJastrow::calculate_CorrelatedSampling(), QMCSCFJastrow::calculate_OrbitalDerivatives(), QMCSCFJastrow::calculate_Psi_quantities(), initialize(), operator<<(), partialCopy(), and QMCSCFJastrow::update_SCF().

These are the intermediate data specifically from the Jastrow part of the wavefunction.

Definition at line 146 of file QMCWalkerData.h.

Referenced by QMCJastrowElectronElectron::collectForPair(), QMCJastrowElectronNuclear::evaluate(), initialize(), operator<<(), QMCSurfer::scanEnergies(), QMCThreeBodyJastrow::updateAll(), QMCThreeBodyJastrow::updateOne(), and writeConfigs().

Gets the ratio of the wavefunction gradient to the wavefunction value at the last evaluated electronic configuration.

This is also known as the quantum force.

Definition at line 163 of file QMCWalkerData.h.

Referenced by QMCSCFJastrow::calculate_Modified_Grad_PsiRatio(), QMCSCFJastrow::calculate_Psi_quantities(), QMCWalker::calculateObservables(), initialize(), partialCopy(), and QMCWalker::reweight_walker().

Gets a modified version of the ratio of the wavefunction gradient to the wavefunction value at the last evaluated electronic configuration.

The modifications typically help deal with singularities near nodes, and the particular type of modification can be selected. This is also known as the modified quantum force.

Definition at line 172 of file QMCWalkerData.h.

Referenced by QMCSCFJastrow::calculate_Modified_Grad_PsiRatio(), QMCWalker::calculateReverseGreensFunctionImportanceSampling(), QMCWalker::calculateReverseGreensFunctionUmrigar93AcceleratedSampling(), QMCWalker::calculateReverseGreensFunctionUmrigar93ImportanceSampling(), initialize(), QMCWalker::moveElectronsImportanceSampling(), QMCWalker::moveElectronsUmrigar93AcceleratedSampling(), QMCWalker::moveElectronsUmrigar93ImportanceSampling(), partialCopy(), and QMCWalker::reweight_walker().

This is set to true if there is any known numerical problem with the wavefunction.

If true, then it shouldn't be added to any averages.

Definition at line 180 of file QMCWalkerData.h.

Referenced by QMCSCFJastrow::calculate_Modified_Grad_PsiRatio(), QMCSCFJastrow::calculate_Psi_quantities(), QMCSCFJastrow::evaluate(), initialize(), isSingular(), operator<<(), and partialCopy().

This holds derivatives of the Hamiltonian (Hellman-Feynmann theorem) evaluated with respect to each nucleus.

Definition at line 186 of file QMCWalkerData.h.

Referenced by QMCWalker::calculateObservables(), and initialize().


The documentation for this class was generated from the following files:

Generated on Sat Jul 5 16:14:06 2008 for QMcBeaver by  doxygen 1.5.6