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_KIMIKA_PARTITIONER_H_ 00021 #define QC_KIMIKA_PARTITIONER_H_ 00022 00026 #define MPIPP_H 00027 00028 #if defined ( LAM_MPI ) 00029 00030 00031 #endif 00032 // 00033 // Kimika (Scotch) includes 00034 00035 extern "C" { 00036 #include "common.h" 00037 #include "atoms.h" 00038 #include "atoms_chain.h" 00039 #include "atoms_part.h" 00040 } 00041 00042 #include <string> 00043 00044 #include "QCPartitioner.hpp" 00045 #include "QCDistMDSystem.hpp" 00046 #include "QCDCAlgo.hpp" 00047 00048 00049 00050 00055 template <class TPSystem> 00056 class QCKimikaPartitioner : public QCPartitioner<TPSystem> 00057 { 00058 00060 public: 00064 QCKimikaPartitioner (void); 00065 00069 virtual ~QCKimikaPartitioner (void); 00073 virtual void init (const QCGeneralData& data, 00074 const QCFiles& files, 00075 const int * load, 00076 const int sizeLoad); 00080 virtual void partitioning (TPSystem& mdsystem); 00084 void writeInventorFiles (const QCSystem& root); 00088 #ifdef DEV_OL 00089 void writeInFileV1 ( std::ofstream & out, const QCDistMDSystem<QCDCAlgo> & system ); 00090 #endif 00091 // 00092 00094 protected: 00095 00096 00100 void setAtomsInKernel (void); 00101 00102 00106 void allocStructures (void); 00107 00108 00112 void resetStructures (void); 00113 00114 00115 00119 void setAtomsInBuffers (const AtomsGraph& grandat); 00120 00121 00125 void setAtomsInBuffersDixon (const AtomsGraph& grandat); 00126 00127 00131 void setAtomsInBuffersStd (const AtomsGraph& grandat); 00132 00133 00137 void extractDomains (TPSystem& mdsystem); 00138 00139 00143 void finalize (void); 00144 00145 00149 void initAtomsList (AtomsList& listdat, const QCSystem& root); 00150 00151 void initAtomsListTest (AtomsList& listdat, AtomsGraph& grafdata) ; 00155 void initFragChain (const QCSystem& root); 00156 00157 00161 void initPartChain (void); 00162 // 00163 // 00164 // 00165 00166 00167 00168 00169 00170 00171 00173 private: 00174 void printGlobalTab(const std::string & msg) ; 00175 00176 void printPartTab(const std::string & msg); 00177 00178 00181 public: 00182 protected: 00183 00187 int * frag_nexttab; 00188 int * frag_firsttab; 00192 int * sd_nexttab; 00193 int * sd_firsttab; 00194 00195 00199 // 00202 int parttab_size; 00205 int * QCRestrict parttab; 00206 AtomsPartGlobal * QCRestrict globtab; 00207 int * QCRestrict lnumtab; 00208 int * QCRestrict lcortab; 00209 int * QCRestrict lovltab; 00210 std::string _fileName ; 00211 00212 00213 00214 private: 00215 00216 }; 00217 00218 00219 00220 00221 #endif // QC_KIMIKA_PARTITIONER_H_