00001
00002
00003
00004
00005
00006
00007
00008 #ifndef QMCNuclearForces_H
00009 #define QMCNuclearForces_H
00010
00011 #include <iostream>
00012
00013 #include "Array1D.h"
00014 #include "Array2D.h"
00015 #include "QMCInput.h"
00016 #include "Random.h"
00017 #include "CubicSpline.h"
00018 #include "QMCWalkerData.h"
00019 #include "fastfunctions.h"
00020
00021 using namespace std;
00022
00029 class QMCNuclearForces
00030 {
00031 public:
00035 QMCNuclearForces();
00036 ~QMCNuclearForces();
00037
00043 void initialize(QMCInput *input);
00044
00052 void evaluate(Array1D< QMCWalkerData *> &walkerData,
00053 Array1D<Array2D<double> * > &xData, int num);
00054
00062 void evaluate(QMCWalkerData &walkerData, Array2D<double> &xData);
00063
00064 double getTemperTerm(int nuc, int q, double r);
00065
00073 void calcCoefficients(int whichNucleus);
00074
00089 void waveMemorization(int whichNucleus, int numKnots, double radialCutoff);
00090
00095 void calculateNuclearContributions();
00096
00105 void getDensities(Array2D<double> & X, Array1D<qmcfloat> & densities);
00106
00110 void printCubeLengths(Array2D<double> & points);
00111
00115 void printPoints(Array2D<double> & points);
00116
00121 void generateCube(Array2D<double> & cube, double length);
00122
00130 void randomlyRotate(Array2D<double> & points, double scale);
00131
00136 static int getNumBins()
00137 {
00138 return 100;
00139 }
00140
00146 void operator=( const QMCNuclearForces & rhs );
00147
00148 private:
00149 QMCInput *Input;
00150 QMCBasisFunction *BF;
00151 QMCWavefunction *WF;
00152
00156 double fittingWeightM;
00157
00162 double numSamplesPerArea;
00163
00168 Array1D<int> numPolyBasisF;
00169
00173 Array2D< Array1D<double> > basisCoeffs;
00174
00179 Array1D< Array1D<double> > radialPoints;
00180
00185 Array2D< Array1D<double> > waveValuesHF;
00186
00190 Array2D< CubicSpline > waveValuesHFSpline;
00191
00195 Array2D<double> nucleusContributions;
00196
00200 Array2D<qmcfloat> orbitals;
00201
00205 Array2D<qmcfloat> Chi;
00206
00210 CubicSpline spliner;
00211 };
00212
00213 #endif