QCMndo.hpp

Go to the documentation of this file.
00001 //*****************************************************************************//
00002 //                                                                             //
00003 //   Copyright (c) 2001                                                        //
00004 //      INRIA                                                                  //
00005 //      54600 VILLERS LES NANCY                                                //
00006 //      France                                                                 //
00007 //                                                                             //
00008 //*****************************************************************************//
00009 //                                                                             //
00010 //               *** NOTICE OF PROPRIETARY INFORMATION ***                     //
00011 //                                                                             //
00012 // The information contained in this file is considered proprietary and the    //
00013 // exclusive property of  INRIA. This information may not be disclosed,        //
00014 // duplicated or used, in whole or in part, for  any purpose  whatsoever       //
00015 // without express written authorization from INRIA                            //
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 /* parameterA */, 
00265                                         const TPParam* QCRestrict /* parameterB */, 
00266                                         const QCFloat&            /* rAB */) { 
00267   return QC_ZERO; 
00268 }
00269 
00270 
00271 
00272 
00278 template <class TPParam>
00279 inline QCFloat 
00280 QCMndoT<TPParam>::dExponentialExpansion (const TPParam* QCRestrict /* parameterA */,
00281                                          const TPParam* QCRestrict /* parameterB */,
00282                                          const QCFloat&            /* rAB */) { 
00283   return QC_ZERO; 
00284 }
00285 
00286 
00287 
00288 
00289 
00290 
00291 #endif // QC_MNDO_H_

Generated on Sat Jan 28 21:07:28 2006 for QC++ by  doxygen 1.4.4