00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef QMCJastrow_H
00014 #define QMCJastrow_H
00015
00016 #include <iostream>
00017 #include <math.h>
00018
00019 #include "Array2D.h"
00020 #include "QMCInput.h"
00021 #include "QMCJastrowParameters.h"
00022 #include "QMCJastrowElectronNuclear.h"
00023 #include "QMCJastrowElectronElectron.h"
00024 #include "QMCThreeBodyJastrow.h"
00025 #include "Stopwatch.h"
00026 #include "IeeeMath.h"
00027 #include "QMCWalkerData.h"
00028
00029 #ifdef QMC_GPU
00030 #include "GPUQMCJastrowElectronElectron.h"
00031 #endif
00032
00033 using namespace std;
00034
00035
00054 class QMCJastrow
00055 {
00056 public:
00057 QMCJastrow();
00058
00059 ~QMCJastrow();
00060
00066 void initialize(QMCInput * input);
00067
00080 void evaluate(Array1D<QMCWalkerData *> &walkerData,
00081 Array1D<Array2D<double>*> &X,
00082 int num, int start);
00083
00084 void evaluate(Array2D<double> & R);
00085
00086 #ifdef QMC_GPU
00087
00095 void setUpGPU(GLuint aElectrons, GLuint bElectrons, int num);
00096
00105 void gpuEvaluate(Array1D<Array2D<double>*> &X, int num);
00106
00107 #endif
00108
00117 void evaluate( QMCJastrowParameters & JP,
00118 Array1D<QMCWalkerData *> &walkerData,
00119 Array1D<Array2D<double>*> &X,
00120 int num, int start);
00121
00129 QMCDouble getJastrow(int which);
00130
00135 double get_p_a(int which, int ai);
00136
00145 double getLnJastrow(int which);
00146
00151 double get_p_a_ln(int which, int ai);
00152
00162 Array2D<double> * getGradientLnJastrow(int which);
00163
00168 Array2D<double> * get_p2_xa_ln(int which, int ai);
00169
00179 double getLaplacianLnJastrow(int which);
00180
00185 double get_p3_xxa_ln(int which, int ai);
00186
00187 void operator=(const QMCJastrow & rhs );
00188
00189 protected:
00190 Array1D<double> sum_U;
00191 Array1D< Array2D<double> > grad_sum_U;
00192 Array1D<double> laplacian_sum_U;
00193
00194 Array2D<double> p_a;
00195 Array2D< Array2D<double> > p2_xa;
00196 Array2D<double> p3_xxa;
00197
00198 private:
00199 QMCJastrowElectronNuclear JastrowElectronNuclear;
00200
00201 #ifdef QMC_GPU
00202 GPUQMCJastrowElectronElectron gpuJEE;
00203 #endif
00204
00205 QMCJastrowElectronElectron JastrowElectronElectron;
00206 QMCThreeBodyJastrow ThreeBodyJastrow;
00207 QMCInput* Input;
00208 };
00209
00210 #endif