00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef QC_DENSITY_GTR_H_
00021 #define QC_DENSITY_GTR_H_
00022
00023
00024 #include "QCMatElemGtr.hpp"
00025
00026
00027 class QCSubDomain;
00028 class QCMatrix;
00029 class QCSymMatrix;
00034 template <class TPMatrix>
00035 class QCDensityGtr :
00036 public QCMatElemGtr<TPMatrix>
00037 {
00038
00040 public:
00041
00045 QCDensityGtr (void);
00046
00047
00048
00052 QCDensityGtr (int dimMatrix);
00053
00054
00055
00059 virtual ~QCDensityGtr (void);
00060
00061
00062
00063
00064
00065
00066
00067
00072 template <class TPManager>
00073 void initDiag (TPManager& manager, typename TPManager::TSystem::QCIterator& iter);
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083 template <class TPMatrix2>
00084 void computeElems (QCMemory& QCRestrict memory,
00085 const int nbElecOfSystem,
00086 QCMatElemGtr<TPMatrix2>& QCRestrict eigenVectC);
00087
00088
00092 template <class TPMatrix2>
00093 void computeElemsDC (QCMemory& QCRestrict memory,
00094 const int nbFilledOM,
00095 const int nbOccupiedOM,
00096 const int nbAOCoreShell1,
00097 const QCFloat * QCRestrict orbitalOccupN,
00098 QCMatElemGtr<TPMatrix2>& QCRestrict eigenVectCt);
00099
00100
00101
00105 template <class TPParam>
00106 void mergeDensity (const TPParam * QCRestrict parameters,
00107 QCSubDomain& QCRestrict workingDomain,
00108 QCSubDomain& QCRestrict remoteDomain,
00109 QCSymMatrix& QCRestrict remWeightedDensity,
00110 int remoteMapIdx,
00111 QCMatrix& QCRestrict wDensityAB,
00112 QCMatrix& QCRestrict interPAB,
00113 QCSymMatrix& QCRestrict wDensityAA);
00114
00115
00116
00117
00124 template <class TPMatrix2>
00125 inline void swapMatrix (QCDensityGtr<TPMatrix2>& densityP);
00126
00127
00128
00129
00130
00132 protected:
00133
00134
00136 private:
00137
00138
00139
00142 public:
00143 protected:
00144 private:
00145
00146 };
00147
00148
00149
00150
00157 template <class TPMatrix>
00158 template <class TPMatrix2>
00159 inline void
00160 QCDensityGtr<TPMatrix>::swapMatrix (QCDensityGtr<TPMatrix2>& densityP) {
00161 this->matrix.swap(densityP.getMatrix());
00162 }
00163
00164
00165
00166
00167
00168 #endif // QC_DENSITY_GTR_H_