00001 #ifndef Cambridge2CorrelationFunction_H
00002 #define Cambridge2CorrelationFunction_H
00003
00004 #include "QMCCorrelationFunction.h"
00005 #include "QMCPolynomial.h"
00006
00007
00014 class Cambridge2CorrelationFunction : public QMCCorrelationFunction
00015 {
00016 protected:
00017 double FunctionValue;
00018 double dFunctionValue;
00019 double d2FunctionValue;
00020
00021 private:
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 bool active;
00032
00033
00034
00035
00036
00037 double g;
00038
00039
00040 int C;
00041
00042
00043 double L;
00044
00045 double f;
00046 double fL;
00047
00053 bool optimizeL;
00054
00055
00056 double alpha_0;
00057 double alpha_1;
00058
00059
00060
00061
00062 Polynomial alpha;
00063
00064
00065 double r;
00066
00067
00068 double d, d2, dpc;
00069 double dpc_r, dpc_rr;
00070 double dpc_L, dpc_Lr, dpc_Lrr;
00071 double d_a1_dL;
00072
00073 double P, dP_r, dP_rr;
00074 double dP_L, dP_Lr, dP_Lrr;
00075 public:
00076
00077 void initializeParameters(Array1D<int> & BeginningIndexOfParameterType,
00078 Array1D<double> &Parameters,
00079 Array1D<int> & BeginningIndexOfConstantType,
00080 Array1D<double> & Constants);
00081
00082 void evaluate( double r );
00083
00084 bool isSingular();
00085
00086 Array1D<Complex> getPoles();
00087
00088 double getFunctionValue();
00089 double getFunctionValue(double r);
00090
00091 double get_p_a(int ai);
00092
00093 double getFirstDerivativeValue();
00094 double get_p2_xa(int ai);
00095
00096 double getSecondDerivativeValue();
00097 double get_p3_xxa(int ai);
00098
00099 Array1D<double> getNumeratorCoeffs();
00100
00101 Array1D<double> getDenominatorCoeffs();
00102
00103 friend ostream& operator <<(ostream& strm, Cambridge2CorrelationFunction &rhs);
00104
00105 void print(ostream& strm);
00106 };
00107
00108 #endif