00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef QMCElectronNucleusCusp_H
00015 #define QMCElectronNucleusCusp_H
00016
00017 #include <iostream>
00018
00019 #include "Array1D.h"
00020 #include "Array2D.h"
00021 #include "QMCInput.h"
00022 #include "QMCElectronNucleusCuspParameters.h"
00023 #include "QMCBasisFunction.h"
00024 #include "QMCBasisFunctionCoefficients.h"
00025 #include "QMCMolecule.h"
00026 #include "Polynomial.h"
00027 #include <math.h>
00028
00029 using namespace std;
00030
00039 class QMCElectronNucleusCusp
00040 {
00041 private:
00042
00043 QMCInput* Input;
00044
00049 Array2D<QMCElectronNucleusCuspParameters> ORParams;
00050
00054 Array2D<qmcfloat> ORWF_coeffs;
00055
00056 QMCBasisFunction* BF;
00057 QMCBasisFunctionCoefficients* BF_coeffs;
00058 QMCMolecule* Molecule;
00059
00065 Array2D<qmcfloat> sTypeCoeffs;
00066
00071 Polynomial idealCurve;
00072
00076 Array1D<double> idealCurveParams;
00077
00081 int Z;
00082
00083 int norbitals,natoms;
00084
00088 double rc;
00089
00094 double n0;
00095
00102 void determineRc();
00103
00113 void setSTypeCoeffs(int nuc, int orb);
00114
00121 double getOrigLocalEnergy(double r_orig);
00122
00129 double evaluateOrigOrbital(double r_orig);
00130
00138 double getOrigGradient(double r_orig);
00139
00148 QMCElectronNucleusCuspParameters fitOrbitalParameters();
00149
00150 public:
00151
00152 QMCElectronNucleusCusp();
00153
00154 void initialize(QMCInput* input, const Array2D<qmcfloat>& WFCoeffs);
00155
00165 void replaceCusps(Array2D<double> & X,
00166 int Start, int Stop,
00167 Array2D<qmcfloat> & D,
00168 Array2D<qmcfloat> & GradX,
00169 Array2D<qmcfloat> & GradY,
00170 Array2D<qmcfloat> & GradZ,
00171 Array2D<qmcfloat> & Laplacian_D);
00172
00173 void replaceCusps(Array2D<double> & X,
00174 int Start, int Stop,
00175 Array2D<qmcfloat> & D);
00179 void fitReplacementOrbitals();
00180
00186 void operator=(const QMCElectronNucleusCusp& rhs);
00187
00191 friend ostream& operator <<(ostream& strm, QMCElectronNucleusCusp &rhs);
00192 };
00193 #endif