00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include<string>
00020 #include <iostream>
00021
00022 #include "QCCommon.hpp"
00023 #include "QCReader.hpp"
00024 #include "QCManager.hpp"
00025 #include "QCFiles.hpp"
00026 #include "QCGeneralData.hpp"
00027
00028 #include "QCPm3.hpp"
00029 #include "QCPm3Param.hpp"
00030 #include "QCDistMDSystem.hpp"
00031 #include "QCDCAlgo.hpp"
00032
00033 #if defined (QC_TRACE_IN_FILE)
00034 #include "QCTrace.hpp"
00035 #include "QCTools.hpp"
00036 #endif
00037
00038
00039 int main (int argc, char **argv)
00040 {
00041 const char *masterName = (argc>1)? argv[1] : "Master_DC.qci";
00042 const char *prefix = (argc>2)? argv[2] : QCCommon::datadir.c_str();
00043
00044 QCCommon::datadir = prefix ;
00045 QCCommon::outdir = prefix ;
00046
00047 const std::string path(".") ;
00048 std::string fileName;
00049
00050 QCManager<QCPm3T<QCPm3Param>, QCDistMDSystem<QCDCAlgo> > manager(argc,argv);
00051
00052 bool master = manager.getSystem().getRank() == 0 ;
00053
00054 QC_TRACE("MAIN manager.init on proc "<<manager.getSystem().getRank());
00055
00056 QCReader reader;
00057 QCFiles files;
00058 QCGeneralData data;
00059
00060 reader.readMasterFile(masterName, files, prefix);
00061 reader.readGeneralFile(files.getGeneralFile() + INPUT_SUFFIX, data, prefix);
00062
00063 manager.init(files, data, prefix);
00064
00065 #if defined (QC_TRACE_IN_FILE)
00066 std::cout << "Number of subdomains"<< manager.getSystem().getNbDomains()<<std::endl ;
00067 int nbSD = manager.getSystem().getNbDomains();
00068 qctrace = new QCTrace[nbSD] ;
00069 std::string traceName("qctrace_dist"), c;
00070 for( int i = 0 ; i <nbSD; ++i){
00071 c = traceName + "-" + intToString( manager.getSystem().getNproc())+"-"
00072 + intToString( manager.getSystem().getRank()) + "-" + intToString(i) + ".trace" ;
00073 qctrace[i].init(c,i,manager.getSystem().getRank()) ;
00074 qctrace[i].traceOff() ;
00075 qctrace[i].initModel(manager.getSystem().getSubDomain(i).getMatrices());
00076 }
00077 #endif
00078
00079
00080 if(master)
00081 {
00082
00083 cout << "################################################################"<<std::endl
00084 << "### ###"<<std::endl
00085 << "### Distributed version of the Divide & Conquer method ###"<<std::endl
00086 << "### ###"<<std::endl
00087 << "################################################################"<<std::endl ;
00088 }
00089 QC_TRACE("MAIN manager.runComputations() on process "<< manager.getSystem().getRank());
00090
00091 manager.runComputations();
00092
00093
00094 if (master){
00095 cout << ">>> FILES <<<\n" << manager.getFiles() << endl
00096 << ">>> GENERAL DATA <<<\n" << manager.getGeneralData() << endl;
00097
00098
00099 }
00100
00101 manager.getSystem().writeDensityOnFileAscii(manager ,".");
00102
00103 return QCPP_SUCCES;
00104 }