00001 #ifndef QMCPsiPotential_H
00002 #define QMCPsiPotential_H
00003
00004 #include "QMCInput.h"
00005 #include "MathFunctions.h"
00006
00007 class JTS_ORBITAL
00008 {
00009 public:
00010 int spin; double occ;
00011 int numgaussians;
00012 int *l, *m, *n;
00013 double *x, *y, *z;
00014 double *coeff, *coeff0, *exponent;
00015
00016
00017
00018
00019 JTS_ORBITAL() {}
00020 virtual ~JTS_ORBITAL() {};
00021 };
00022
00023 class QMCPsiPotential
00024 {
00025 private:
00026 static QMCInput *qmc_input;
00027 static QMCBasisFunction *qmc_basis;
00028 static JTS_ORBITAL orbital;
00029
00030 static double NormGaussian(int l, int m, int n, double exponent);
00031 static double OverlapVGaussians(int l1, int m1, int n1, double exponent1,
00032 double x1, double y1, double z1, int l2,
00033 int m2, int n2, double exponent2, double x2,
00034 double y2, double z2, double xnuc,
00035 double ynuc, double znuc);
00036 static double DFactorial(int n);
00037 static double intpow(double x, int n);
00038 static void binomial_f(int l, int m, double a, double b, double *f);
00039 static void g_function(int suml, double *f, double ig, double p, double *g);
00040 static int CountGaussians();
00041 static int AllocateOrbitals();
00042 static void LoadOrbitals(int numgaussians);
00043 static void UseWavefunction(int wfnum, int spin);
00044
00045 public:
00046 QMCPsiPotential();
00047 virtual ~QMCPsiPotential();
00048
00049 static void Initialize(QMCInput *s_qmc_input);
00050 static double GetPoten(int orbital, int spin, double x, double y, double z);
00051 };
00052
00053 #endif
00054