00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef QMCThreeBodyJastrow_H
00014 #define QMCThreeBodyJastrow_H
00015
00016 #include <string>
00017
00018 #include "Array1D.h"
00019 #include "Array2D.h"
00020 #include "QMCInput.h"
00021 #include "QMCJastrowParameters.h"
00022 #include "QMCWalkerData.h"
00023
00024 using namespace std;
00025
00047 class QMCThreeBodyJastrow
00048 {
00049 public:
00050 QMCThreeBodyJastrow();
00051
00052 ~QMCThreeBodyJastrow();
00053
00059 void initialize(QMCInput * input);
00060
00069 void evaluate( QMCJastrowParameters & JP, QMCWalkerData * wData,
00070 Array2D<double> & X);
00071
00076 double get_p_a_ln(int ai);
00077
00082 Array2D<double> * get_p2_xa_ln(int ai);
00083
00088 double get_p3_xxa_ln(int ai);
00089
00101 double jastrowOnGrid(QMCJastrowParameters & JP,
00102 int E,
00103 Array2D<double> & R,
00104 Array2D<double> & grid,
00105 Array1D<double> & integrand);
00106
00107 protected:
00108 QMCWalkerData * wd;
00109
00110 Array1D<double> p_a;
00111 Array1D< Array2D<double> > p2_xa;
00112 Array1D<double> p3_xxa;
00113
00114 Array1D<QMCThreeBodyCorrelationFunctionParameters> * EupEdnNuclear;
00115 Array1D<QMCThreeBodyCorrelationFunctionParameters> * EupEupNuclear;
00116 Array1D<QMCThreeBodyCorrelationFunctionParameters> * EdnEdnNuclear;
00117
00118 private:
00119 void packageDerivatives();
00120
00121 void updateOne(QMCJastrowParameters & JP, Array2D<double> & X);
00122 void updateAll(QMCJastrowParameters & JP, Array2D<double> & X);
00123
00124 void collectForPair(int Electron1,
00125 int Electron2,
00126 int Nuclei,
00127 QMCThreeBodyCorrelationFunctionParameters * paramset);
00128
00129 };
00130 #endif