00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef QC_OVERLAP_GTR_H_
00021 #define QC_OVERLAP_GTR_H_
00022
00023
00024 #include "QCMatrix.hpp"
00025 #include "QCMatElemGtr.hpp"
00026 #include "QCCommon.hpp"
00027 #include "QCPoint.hpp"
00028 #include "QCFortran.hpp"
00029 #include "QCMndoParam.hpp"
00030
00031
00032
00038 template <class TPMatrix>
00039 class QCOverlapGtr : public QCMatElemGtr<TPMatrix>
00040 {
00041
00043 public:
00044
00045
00049 QCOverlapGtr (void);
00050
00051
00052
00056 QCOverlapGtr (const int& dim);
00057
00058
00059
00063 virtual ~QCOverlapGtr (void);
00064
00065
00066
00070 template <class TPManager>
00071 static void FillExpHalfVector (TPManager& manager);
00072
00073
00074
00078 static void DestroyExpHalfVector (void);
00079
00080
00081
00085 template <class TPManager>
00086 void computeElems (TPManager& manager,
00087 typename TPManager::TSystem::QCIterator& workingSystem,
00088 const QCPoint3D& shift = QC_ORIGIN3D);
00089
00090
00091
00095 template <class TPParam>
00096 void computeElems (const TPParam * QCRestrict parameters,
00097 const QCSystem& QCRestrict system,
00098 QCMatrix& QCRestrict overlapSAB,
00099 int nbMaxOrbTypes,
00100 const QCPoint3D& QCRestrict shift = QC_ORIGIN3D);
00101
00102
00103
00104
00108 template <class TPManager>
00109 void computeDerivatives (TPManager& managerInst,
00110 typename TPManager::TSystem::QCIterator& workingSystem,
00111 const QCPoint3D& shift,
00112 const QCFloat& QCRestrict inv2DeltaQ = QC_ZERO);
00113
00114
00115
00116
00117
00121 template <class TPParam>
00122 void computeElemsAux (const QCPoint3D& QCRestrict coordsA,
00123 const TPParam& QCRestrict paramA,
00124 int expHalfIndexA,
00125 const QCPoint3D& QCRestrict coordsB,
00126 const TPParam& QCRestrict paramB,
00127 int expHalfIndexB,
00128 QCMatrix& QCRestrict overlapSAB,
00129 const QCPoint3D& shift = QC_ORIGIN3D);
00130
00131
00132
00133
00135 protected:
00136
00137
00139 private:
00140
00145 template <class TPParam>
00146 static void FillQuantNumNVector (const TPParam *QCRestrict params,
00147 const int& nbParameter,
00148 int* QCRestrict quantNumNVectors);
00149
00150
00155 template <class TPParam>
00156 static void FillDzetaVector (const TPParam *QCRestrict params,
00157 const int& nbParameters,
00158 const int& nbMaxOrbTypes,
00159 QCFloat* QCRestrict dzetaVector);
00160
00161
00164 public:
00165 protected:
00166 private:
00167
00173 static QCFloat *ExpHalfVector;
00174
00175 };
00176
00177
00178
00179
00180 #endif // QC_OVERLAP_GTR_H_