00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef QC_MNDO_H_
00021 #define QC_MNDO_H_
00022
00023
00024 #include "QCCommon.hpp"
00025 #include "QCModel.hpp"
00026 #include "QCReader.hpp"
00027 #include "QCPoint.hpp"
00028
00029 template <class TPMatrix> class QCDensityGtr;
00030
00031
00036
00039 class QCMndo : public QCModel
00040 {
00041
00043 public:
00044
00048 QCMndo (const int& nbAOsp, const int& nbAOspd);
00049
00050
00051
00055 virtual ~QCMndo (void);
00056
00057
00058
00062 template <class TPManager>
00063 QCFloat computeCoreEnergy (TPManager& manager,
00064 typename TPManager::TSystem::QCIterator& iter);
00065
00066
00067
00071 template <class TPIterator>
00072 QCFloat computeElecEnergy (TPIterator& workingSystem,
00073 QCDensityGtr<QCSymMatrix>& QCRestrict densityP);
00074
00075
00076
00080 template <class TPManager>
00081 void deriveElecEnergy (TPManager& manager,
00082 typename TPManager::TSystem::QCIterator& workingSystem,
00083 const QCPoint3D& shift,
00084 QCFloat * QCRestrict dRepIntegralSSVector);
00085
00086
00090 template <class TPManager>
00091 void deriveCoreEnergy (TPManager& manager,
00092 typename TPManager::TSystem::QCIterator& workingSystem,
00093 QCFloat * QCRestrict dRepIntegralSSVector);
00094
00095
00096
00100 void dispatchDerivative (QCSystem& system,
00101 QCFloat deOnDxj,
00102 QCFloat deOnDyj,
00103 QCFloat deOnDzj,
00104 int i,
00105 int j);
00106
00107
00108
00109
00110
00112 protected:
00113
00114
00118 bool isOHorNH (int atomicNbX, int atomicNbY) {
00119 return ( (atomicNbX == 7 || atomicNbX == 8) && (atomicNbY == 1) );
00120 }
00121
00122
00128 QCFloat sometimesR (int atomicNbX, int atomicNbY, const QCFloat& rAB) {
00129 QCFloat rFactor = QC_ONE;
00130
00131 if (isOHorNH(atomicNbX, atomicNbY)) {
00132 rFactor = rAB;
00133 }
00134 return rFactor;
00135 }
00136
00137
00138
00139
00140
00141
00143 private:
00144
00145
00148 public:
00149
00155 static const int NbMaxOrbTypes;
00156
00161 static const int NbMaxAtomTypes;
00162
00163
00164 protected:
00165 private:
00166
00167 };
00168
00169
00170
00171
00172
00178 template <class TPParam>
00179 class QCMndoT : public QCMndo
00180 {
00181
00183 public:
00184
00185
00191 typedef TPParam TParam;
00192
00193
00194
00198 QCMndoT (void);
00199
00200
00204 virtual ~QCMndoT (void);
00205
00206
00210 const string& getParameterName (void) { return TPParam::getName(); };
00211
00212
00213
00219 inline QCFloat exponentialExpansion (const TPParam* QCRestrict parameterA,
00220 const TPParam* QCRestrict parameterB,
00221 const QCFloat& rAB);
00222
00223
00224
00230 inline QCFloat dExponentialExpansion (const TPParam* QCRestrict parameterA,
00231 const TPParam* QCRestrict parameterB,
00232 const QCFloat& rAB);
00233
00234
00235
00236
00238 protected:
00239
00240
00242 private:
00243
00244
00245
00246
00249 public:
00250 protected:
00251 private:
00252
00253 };
00254
00255
00256
00262 template <class TPParam>
00263 inline QCFloat
00264 QCMndoT<TPParam>::exponentialExpansion (const TPParam* QCRestrict ,
00265 const TPParam* QCRestrict ,
00266 const QCFloat& ) {
00267 return QC_ZERO;
00268 }
00269
00270
00271
00272
00278 template <class TPParam>
00279 inline QCFloat
00280 QCMndoT<TPParam>::dExponentialExpansion (const TPParam* QCRestrict ,
00281 const TPParam* QCRestrict ,
00282 const QCFloat& ) {
00283 return QC_ZERO;
00284 }
00285
00286
00287
00288
00289
00290
00291 #endif // QC_MNDO_H_