QCLinearPartitioner.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_LINEAR_PARTITIONER_H_
00021 #define QC_LINEAR_PARTITIONER_H_
00022 
00023 #include <vector>
00024 
00025 #include "QCCommon.hpp"
00026 #include "QCPoint.hpp"
00027 #include "QCAtoms.hpp"
00028 #include "QCPartitioner.hpp"
00029 
00030 
00031 
00032 
00033 
00034 
00039 template <class TPSystem>
00040 class QCLinearPartitioner :
00041   public QCPartitioner<TPSystem>
00042 {
00043   
00045 public:
00046 
00047 
00048 
00052   QCLinearPartitioner (void);
00053   
00054 
00055 
00059   virtual ~QCLinearPartitioner (void);
00060 
00061 
00062 
00066   QCPartSubDomain& getDomain (int i) { return domains[i]; }
00067 
00068 
00069 
00070 
00076   virtual void initData (const QCGeneralData& data,
00077                          const QCFiles&       files,
00078                          const int *          load,
00079                          const int            sizeLoad);
00080 
00081 
00082 
00086   virtual void partitioning (TPSystem& mdsystem);
00087 
00088 
00089 
00093   const std::vector<QCAtomIn>& getAtomsInZone (int i) const { return atomsInZone[i]; }
00094 
00095 
00096 
00097   
00098 
00099 
00101 protected:
00102 
00103 
00107   void setLoad (const QCSystem& system);
00108 
00109   
00110   
00114   void setAtomZones (int nbAtoms);
00118   void extractDomains(TPSystem& system);
00122   void setToZero (void);
00126   void resetData (void);
00127 
00128 
00129 
00133   void computeInnerReference (const QCSystem& system);
00134 
00135 
00136 
00140   void projectOnInnerReference (QCSystem& system);
00141 
00142 
00143 
00147   void setNeighbors (void);
00148 
00149 
00150   
00154   void setXMinXMax (const QCSystem& root);
00155 
00156 
00157 
00161   void setAtomsInKernel  (const QCSystem& system);
00162 
00163 
00164 
00168   void setAtomsInBuffers (const QCSystem& system);
00172   bool equilibrateAOs (QCFloat buffer1, QCFloat buffer2);
00176   void sortFirstAxis (QCSystem& system);
00180   void sortEigenVects (QCFloat *eigenVals, QCFloat ** eigenVects, int dim);
00181 
00183 private:
00185 public:
00186 protected:
00190   static const int DIM = QCAtoms::DIMENSION;
00194   QCPoint3D  gravityCenter;
00195   int        partitionGrid[DIM];
00196   QCPoint3D  xAxis;
00197   QCPoint3D  yAxis;
00198   QCPoint3D  zAxis;
00199   QCFloat    inertiaMatrix[DIM][DIM];
00200 
00201   QCPartSubDomain       * domains;
00202   std::vector<QCAtomIn> * atomsInZone;
00203 
00204 
00205 private:
00206 
00207 
00208 
00209   
00210   
00211 };
00212 
00213 
00214 
00215 
00216 
00217 
00218 
00219 
00220 
00221 #endif // QC_LINEAR_PARTITIONER_H_

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