00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef QMCWALKERDATA_H
00014 #define QMCWALKERDATA_H
00015
00016 #include <iostream>
00017 #include <sstream>
00018
00019 #include "Array1D.h"
00020 #include "Array2D.h"
00021 #include "QMCDouble.h"
00022 #include "QMCInput.h"
00023
00024 using namespace std;
00025
00033 class QMCWalkerData {
00034 public:
00035 QMCWalkerData();
00036 ~QMCWalkerData();
00037
00038 void initialize(int numDimensions, int numNucForceDim1, int numNucForceDim2);
00039
00057 void partialCopy( const QMCWalkerData & rhs );
00058
00064 int whichE;
00065
00073 Array2D<double> rij;
00074 Array3D<double> rij_uvec;
00075 Array2D<double> riA;
00076 Array3D<double> riA_uvec;
00077
00083 Array1D< Array2D<double> > Dc_invA;
00084 Array1D< Array2D<double> > Dc_invB;
00085 Array2D<qmcfloat> D_xxA;
00086 Array2D<qmcfloat> D_xxB;
00087 Array1D< Array2D<qmcfloat> > D_xA;
00088 Array1D< Array2D<qmcfloat> > D_xB;
00089
00090 Array1D<double> DcA, DcB;
00091 Array1D<double> rDc_xxA, rDc_xxB;
00092 Array3D<double> rDc_xA, rDc_xB;
00093
00094 Array1D<double> Chi_DensityA, Chi_DensityB;
00095
00113 Array2D<double> Uij;
00114
00118 Array3D<double> Uij_x;
00119
00123 Array2D<double> Uij_xx;
00124
00125 Array2D<double> UiA;
00126 Array3D<double> UiA_x;
00127 Array2D<double> UiA_xx;
00128
00129 Array2D<double> UijA;
00130 Array1D< Array2D<double> > UijA_x1;
00131 Array1D< Array2D<double> > UijA_x2;
00132 Array2D<double> UijA_xx;
00133
00138 QMCDouble D;
00139 Array2D<double> D_x;
00140 double D_xx;
00141
00146 double U;
00147 Array2D<double> U_x;
00148 double U_xx;
00149
00153 double localEnergy, kineticEnergy, potentialEnergy;
00154 double neEnergy, eeEnergy;
00155
00156 QMCDouble psi;
00157
00163 Array2D<double> gradPsiRatio;
00164
00172 Array2D<double> modifiedGradPsiRatio;
00173 double modificationRatio;
00174
00180 bool singular;
00181
00186 Array2D<double> nuclearDerivatives;
00187
00188 Array1D<double> chiDensity;
00189
00190
00191 Array1D<double> cs_LocalEnergy;
00192
00193 Array1D<double> cs_Weights;
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203 Array1D<double> rp_a;
00204
00205
00206
00207
00208
00209 Array1D<double> p3_xxa;
00210
00211 bool isSingular();
00212
00213 double getModifiedLocalEnergy();
00214 void zero();
00215 void writeConfigs(Array2D<double> & Positions, double weight);
00216 friend ostream& operator<<(ostream & strm, const QMCWalkerData & rhs);
00217
00225 void updateDistances(Array2D<double> & R);
00226
00227 };
00228
00229 #endif
00230
00231
00232
00233
00234