QCPartSubDomain.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_PART_SUBDOMAIN_H_
00021 #define QC_PART_SUBDOMAIN_H_
00022 
00023 
00024 
00025 #include <vector>
00026 
00027 #include "QCAtoms.hpp"
00028 
00033 class QCPartSubDomain
00034 {
00035 
00037 public:
00041   QCPartSubDomain (void);
00045   ~QCPartSubDomain (void);
00049   int   getId (void)           const { return id; }
00053   int   getNbAtoms (void)      const { return nbAtoms; }
00057   int   getNbNeighbors (void)  const { return neighborsIdxs.size(); }
00061   int   getNeighborIdx (int i) const { return neighborsIdxs[i]; }
00065   int   getNeighborPos (int id) const {
00066     int pos = -1;
00067     for (unsigned int i = 0; i < neighborsIdxs.size(); ++i) {
00068       if (neighborsIdxs[i] == id) {
00069         pos = i;
00070         break;
00071       }
00072     }
00073     return pos;
00074   }
00075   
00076 
00077 
00081   void getXMin (QCPoint3D& copy) const { 
00082     copy[COORDX] = xMin[COORDX];
00083     copy[COORDY] = xMin[COORDY];
00084     copy[COORDZ] = xMin[COORDZ];
00085   }
00086   
00087 
00091   void getXMax (QCPoint3D& copy) const { 
00092     copy[COORDX] = xMax[COORDX];
00093     copy[COORDY] = xMax[COORDY];
00094     copy[COORDZ] = xMax[COORDZ];
00095   }
00096   
00097 
00101   int   getNbAtomsKernel (void) const { return atomsInKernel.size(); }
00102   
00103 
00107   int * getLocalNum (void) { return localNum; }
00108   
00109 
00113   vector<int>& getAtomsInKernel (void) { return atomsInKernel; }
00114   
00115 
00119   vector<int>& getAtomsInShell1 (int i) { return atomsInShell1[i]; }
00120   int    getNbAtomsShell1 (int i) const { return atomsInShell1[i].size(); }
00121 
00125   vector<int>& getAtomsInShell2 (int i) { return atomsInShell2[i]; }
00127   int    getNbAtomsShell2 (int i) const { return atomsInShell2[i].size(); }
00128 
00132   int getNbShared (int i) const { return (getNbAtomsShell1 (i) +
00133                                           getNbAtomsShell2 (i)); }
00134 
00135 
00139   vector<int>& getAtomIsInKernel (void) { return atomIsInKernel; }
00140   
00141 
00145   QCFloat getXLength (void) const { return xMax[0] - xMin[0] ;}
00146 
00147 
00148   
00152   int getLoad (void) const
00153   { return weight[QC_CORE] +  weight[QC_SHELL1] +  weight[QC_SHELL2]; }
00154 
00155 
00156 
00160     int getLocalNumberOfSubdomain (int num) { 
00161     for (int i = 0 ; i < static_cast<int>(neighborsIdxs.size()); ++i) {
00162       if(neighborsIdxs[i] == num) {
00163         return i ;
00164       }
00165     }
00166     return -1; 
00167   }
00168 
00169 
00173   void setIds (int anId, int idx, int idy=0, int idz=0) { 
00174     id = anId; 
00175     localNum[COORDX] = idx;
00176     localNum[COORDY] = idy;
00177     localNum[COORDZ] = idz;
00178   }
00179   
00180   
00184   void setXMin (const QCPoint3D& p) {
00185     xMin[COORDX] = p[COORDX];
00186     xMin[COORDY] = p[COORDY];
00187     xMin[COORDZ] = p[COORDZ];
00188   }
00189 
00190 
00194   void setXMax (const QCPoint3D& p) {
00195     xMax[COORDX] = p[COORDX];
00196     xMax[COORDY] = p[COORDY];
00197     xMax[COORDZ] = p[COORDZ];
00198   }
00199 
00200 
00204   void setLoadInKernel (int l) { weight[QC_CORE] = l;}
00205   
00206 
00210   void setLoadInShell1 (int l) { weight[QC_SHELL1] = l;}
00211   
00212 
00216   void setLoadInShell2 (int l) { weight[QC_SHELL2] = l;}
00217 
00218 
00222   void addIndexInKernel (int num) { 
00223     atomsInKernel.push_back(num); 
00224     ++nbAtomsCore; 
00225     ++nbAtoms; 
00226   }
00227   
00228 
00232   void addIndexInOverlap (int i, int num) { 
00233     atomsInShell1[i].push_back(num);
00234     ++nbAtomsShell1;
00235     ++nbAtoms;
00236   }
00237   
00238   
00242   void addIndexInCut (int i, int num) {
00243     atomsInShell2[i].push_back(num);
00244     ++nbAtomsShell2;
00245     ++nbAtoms;
00246   }
00250   void computeNumbers (void);
00251 
00252 
00253 
00257   void resetData (void);
00258 
00259 
00260   
00264   void addNeighbor (int idx) { neighborsIdxs.push_back(idx); }
00265 
00266 
00267   
00271   void addNeighbors (int * idxs, int nb) {
00272     int i, j;
00273     neighborsIdxs.resize(nb);
00274     for (i = 0, j = 0; j < nb; ++i) {
00275       if (idxs[i]) {
00276         neighborsIdxs[j] = i;
00277         //      cout << "added " << i << " to " << id << " neighbors"
00278         //           << endl;
00279         ++j;
00280       }
00281     }
00282   }
00283 
00284 
00285 
00286 
00290   bool initNbOverlapDomain(void);
00291 
00292 
00293 
00297   void addAtomsInKernel (const QCAtoms& atoms, bool useFrag);
00298 
00299 
00300 
00304   void addAtomsInBuffers (const QCAtoms& atoms, 
00305                           QCPartSubDomain& domain,
00306                           int     localOverlapSubDomain,
00307                           QCFloat buffer1,
00308                           QCFloat buffer2,
00309                           bool    useFrag);
00310 
00311 
00315   vector<int>& getSharedAtomsVect (void) { return nbSharedAtoms; }
00316   //
00317   int getSharedAtoms (int i) const { return nbSharedAtoms[i]; }
00318   //
00319   int & getNbOverlp (void) { return nbOverlp; }
00323   void write (void) ;
00324   //
00325 
00326 
00328 protected:
00329 
00330 
00331 
00333 private:
00334 
00335 
00336 
00337 
00340 public:
00341 protected:
00342 private:
00343 
00347   static const int DIM = QCAtoms::DIMENSION;
00348   int          id;
00349   int          localNum[DIM];
00350   int          nbAtoms;
00351   int          nbAtomsCore;
00352   int          nbAtomsShell1;
00353   int          nbAtomsShell2;
00354   int          weight[NB_ZONES];
00355   QCPoint3D    xMin;
00356   QCPoint3D    xMax;
00357   QCFloat      boxDims[DIM];
00359   vector<int>  neighborsIdxs;
00360   vector<int>  atomsInKernel;
00361   vector<int>  atomIsInKernel;
00362   vector<int> *atomsInShell1;
00363   vector<int> *atomsInShell2;
00364   vector<int>  nbSharedAtoms;
00365   int          nbOverlp;
00366 
00367 };
00368 
00369 
00370 #endif // QC_PART_SUBDOMAIN_H_

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