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 QMCMolecule_H 00014 #define QMCMolecule_H 00015 00016 #include <string> 00017 #include <fstream> 00018 #include <iostream> 00019 #include <list> 00020 00021 #include "Array1D.h" 00022 #include "Array2D.h" 00023 #include "StringManipulation.h" 00024 00025 using namespace std; 00026 00027 00034 class QMCMolecule 00035 { 00036 public: 00040 QMCMolecule(); 00041 00047 void initialize(int nAtoms, int GridLevel); 00048 00054 int getNumberAtoms(); 00055 00061 int getNuclearCharge(); 00062 00067 Array1D <string> Atom_Labels; 00068 00073 Array2D <double> Atom_Positions; 00074 00079 Array1D <int> Z; 00080 00084 Array1D <int> Zeff; 00085 00090 Array1D<bool> usesPsuedo; 00091 00096 Array2D< string > psuedoTitle; 00097 00101 Array1D< Array2D<double> > Vlocal; 00102 00106 Array1D< Array1D< Array2D<double> > > Vnonlocal; 00107 00116 double evaluatePotential(Array2D<double> & V, double r); 00117 00122 Array1D< Array1D<double> > gridWeights; 00123 00129 Array1D< Array2D<double> > gridLegendre; 00130 00141 Array2D<double> getGrid(int nuc, double R, bool translate); 00142 00146 Array1D <string> NucleiTypes; 00147 00153 QMCMolecule operator=( const QMCMolecule & rhs ); 00154 00163 int findClosestNucleusIndex(Array2D<double> & x, int index); 00164 00168 friend istream& operator >>(istream& strm, QMCMolecule &rhs); 00169 00170 00174 friend ostream& operator <<(ostream& strm, QMCMolecule &rhs); 00175 00181 void readGeometry(string runfile); 00182 00189 int readPsuedoPotential(string runfile); 00190 00191 private: 00192 int Natoms; 00193 00199 int gridLevel; 00200 00206 Array1D< Array2D<double> > grid; 00207 00208 }; 00209 00210 #endif