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 QMCMikesBetterWalkerInitialization_H 00014 #define QMCMikesBetterWalkerInitialization_H 00015 00016 #include "QMCInput.h" 00017 #include "QMCInitializeWalker.h" 00018 #include "Random.h" 00019 #include "AtomicOrbitalInverter.h" 00020 00021 using namespace std; 00022 00031 class QMCMikesBetterWalkerInitialization : public QMCInitializeWalker 00032 { 00033 public: 00039 QMCMikesBetterWalkerInitialization( QMCInput *input ); 00040 00041 00042 Array2D<double> initializeWalkerPosition(); 00043 00044 private: 00045 QMCInput *Input; 00046 AtomicOrbitalInverter AOI; 00047 00048 Array3D<double> initializeBunchOfWalkersPosition(); 00049 Array2D<double> FindBestWalker(Array3D<double> &bunchR); 00050 void FixConstraints(Array2D<double> &Occupations); 00051 double ObjectiveFunctionForWalkers(Array3D<double> &bunchR,Array2D<double> &Occupations); 00052 void GradObjectiveFunctionForWalkers(Array3D<double> &bunchR, 00053 Array2D<double> &Occupations, 00054 Array2D<double> &GradOccupations); 00055 void BoundGradOccupations(Array2D<double> &GradOccupations,double bound); 00056 void MoveOccupations(Array2D<double> &Occupations, 00057 Array2D<double> &GradOccupations, 00058 double dr); 00059 double Energy_parallel(double r); 00060 double Energy_opposite(double r); 00061 double Energy_el_nuclr(double r, int charge); 00062 }; 00063 00064 #endif