00001 // QMcBeaver 00002 // 00003 // Constructed by 00004 // 00005 // Michael Todd Feldmann 00006 // and 00007 // David Randall "Chip" Kent IV 00008 // 00009 // Copyright 2000. All rights reserved. 00010 // 00011 // drkent@users.sourceforge.net mtfeldmann@users.sourceforge.net 00012 00013 #ifndef QMCJastrowParameters_H 00014 #define QMCJastrowParameters_H 00015 00016 #include <iostream> 00017 #include <fstream> 00018 #include <string> 00019 #include <list> 00020 00021 #include "Array1D.h" 00022 #include "QMCCorrelationFunctionParameters.h" 00023 #include "QMCThreeBodyCorrelationFunctionParameters.h" 00024 00025 using namespace std; 00026 00049 class QMCJastrowParameters 00050 { 00051 public: 00055 QMCJastrowParameters(); 00056 00063 QMCJastrowParameters(const QMCJastrowParameters & rhs); 00064 00071 void setJWParameters(Array1D<double> & params, int shift); 00072 00077 void print(ostream & strm); 00078 00085 void getJWParameters(Array1D<double> & params, int shift); 00086 00091 Array1D<double> getJWParameters(); 00092 00096 int getNumberJWParameters(); 00097 00102 int getNumberEEParameters(); 00103 00104 int getNumberEupEdnParameters(); 00105 int getNumberEupEupParameters(); 00106 int getNumberEdnEdnParameters(); 00107 00112 int getNumberNEParameters(); 00113 00118 int getNumberNEupParameters(); 00119 00124 int getNumberNEupEdnParameters(); 00125 00130 int getNumberNEupEupParameters(); 00131 00136 int getNumberNEdnEdnParameters(); 00137 00143 Array1D<Complex> getPoles(); 00144 00145 // calculates a penalty function for getting singular parameters 00146 double calculate_penalty_function(); 00147 00148 // calculates a penalty function for getting singular parameters 00149 static double calculate_penalty_function(Array1D<Complex> & poles); 00150 00157 QMCCorrelationFunctionParameters * getElectronUpElectronDownParameters(); 00158 00165 QMCCorrelationFunctionParameters * getElectronUpElectronUpParameters(); 00166 00167 00174 QMCCorrelationFunctionParameters * getElectronDownElectronDownParameters(); 00175 00176 00183 Array1D<QMCCorrelationFunctionParameters> * getElectronUpNuclearParameters(); 00184 00185 00192 Array1D<QMCCorrelationFunctionParameters> * 00193 getElectronDownNuclearParameters(); 00194 00199 Array1D<QMCThreeBodyCorrelationFunctionParameters> * 00200 getElectronUpElectronDownNuclearParameters(); 00201 00206 Array1D<QMCThreeBodyCorrelationFunctionParameters> * 00207 getElectronUpElectronUpNuclearParameters(); 00208 00213 Array1D<QMCThreeBodyCorrelationFunctionParameters> * 00214 getElectronDownElectronDownNuclearParameters(); 00215 00220 Array1D<string> * getNucleiTypes(); 00221 00227 void operator=( const QMCJastrowParameters & rhs ); 00228 00241 void read(Array1D<string> & nucleitypes, bool linkparams, 00242 bool nucCuspReplacement, int nelup, int neldn, string runfile); 00243 00247 friend ostream & operator<<(ostream &strm, QMCJastrowParameters & rhs); 00248 00249 private: 00250 int NumberOfEEParameters; 00251 int NumberOfEupEdnParameters; 00252 int NumberOfEupEupParameters; 00253 int NumberOfEdnEdnParameters; 00254 00255 int NumberOfNEParameters; 00256 int NumberOfNEupParameters; 00257 00258 Array1D<QMCCorrelationFunctionParameters> EupNuclear; 00259 Array1D<QMCCorrelationFunctionParameters> EdnNuclear; 00260 QMCCorrelationFunctionParameters EupEdn; 00261 QMCCorrelationFunctionParameters EupEup; 00262 QMCCorrelationFunctionParameters EdnEdn; 00263 00264 int NumberOfNEupEdnParameters; 00265 int NumberOfNEupEupParameters; 00266 int NumberOfNEdnEdnParameters; 00267 00268 Array1D<QMCThreeBodyCorrelationFunctionParameters> EupEdnNuclear; 00269 Array1D<QMCThreeBodyCorrelationFunctionParameters> EupEupNuclear; 00270 Array1D<QMCThreeBodyCorrelationFunctionParameters> EdnEdnNuclear; 00271 00272 bool EquivalentElectronUpDownParams; 00273 Array1D<string> NucleiTypes; 00274 int NumberOfElectronsUp; 00275 int NumberOfElectronsDown; 00276 }; 00277 00278 #endif