]> git.donarmstrong.com Git - mothur.git/blobdiff - aligncommand.cpp
finished cluster.split adding classify method.
[mothur.git] / aligncommand.cpp
index 38afa3543a0218bcef7602d61a71d9d8e8332f36..03992dcd04e966f6b0765c9c1a2a0d651b6e283e 100644 (file)
@@ -267,28 +267,35 @@ int AlignCommand::execute(){
                                int outMode=MPI_MODE_CREATE|MPI_MODE_WRONLY; \r
                                int inMode=MPI_MODE_RDONLY; \r
                                \r
-                               char* outAlignFilename = new char[alignFileName.length()];\r
-                               memcpy(outAlignFilename, alignFileName.c_str(), alignFileName.length());\r
-\r
-                               char* outReportFilename = new char[reportFileName.length()];\r
-                               memcpy(outReportFilename, reportFileName.c_str(), reportFileName.length());\r
+                               //char* outAlignFilename = new char[alignFileName.length()];\r
+                               //memcpy(outAlignFilename, alignFileName.c_str(), alignFileName.length());\r
+                               \r
+                               char outAlignFilename[1024];\r
+                               strcpy(outAlignFilename, alignFileName.c_str());\r
 \r
-                               char* outAccnosFilename = new char[accnosFileName.length()];\r
-                               memcpy(outAccnosFilename, accnosFileName.c_str(), accnosFileName.length());\r
+                               //char* outReportFilename = new char[reportFileName.length()];\r
+                               //memcpy(outReportFilename, reportFileName.c_str(), reportFileName.length());\r
+                               \r
+                               char outReportFilename[1024];\r
+                               strcpy(outReportFilename, reportFileName.c_str());\r
 \r
-                               char* inFileName = new char[candidateFileNames[s].length()];\r
-                               memcpy(inFileName, candidateFileNames[s].c_str(), candidateFileNames[s].length());\r
+                               //char* outAccnosFilename = new char[accnosFileName.length()];\r
+                               //memcpy(outAccnosFilename, accnosFileName.c_str(), accnosFileName.length());\r
+                               \r
+                               char outAccnosFilename[1024];\r
+                               strcpy(outAccnosFilename, accnosFileName.c_str());\r
 \r
+                               //char* inFileName = new char[candidateFileNames[s].length()];\r
+                               //memcpy(inFileName, candidateFileNames[s].c_str(), candidateFileNames[s].length());\r
+                               \r
+                               char inFileName[1024];\r
+                               strcpy(inFileName, candidateFileNames[s].c_str());\r
+                               \r
                                MPI_File_open(MPI_COMM_WORLD, inFileName, inMode, MPI_INFO_NULL, &inMPI);  //comm, filename, mode, info, filepointer\r
                                MPI_File_open(MPI_COMM_WORLD, outAlignFilename, outMode, MPI_INFO_NULL, &outMPIAlign);\r
                                MPI_File_open(MPI_COMM_WORLD, outReportFilename, outMode, MPI_INFO_NULL, &outMPIReport);\r
                                MPI_File_open(MPI_COMM_WORLD, outAccnosFilename, outMode, MPI_INFO_NULL, &outMPIAccnos);\r
                                \r
-                               delete outAlignFilename;\r
-                               delete inFileName;\r
-                               delete outReportFilename;\r
-                               delete outAccnosFilename;\r
-\r
                                if (m->control_pressed) { MPI_File_close(&inMPI);  MPI_File_close(&outMPIAlign);  MPI_File_close(&outMPIReport);  MPI_File_close(&outMPIAccnos); return 0; }\r
                                \r
                                if (pid == 0) { //you are the root process \r
@@ -296,13 +303,16 @@ int AlignCommand::execute(){
                                        MPIPos = setFilePosFasta(candidateFileNames[s], numFastaSeqs); //fills MPIPos, returns numSeqs\r
                                        \r
                                        //send file positions to all processes\r
-                                       MPI_Bcast(&numFastaSeqs, 1, MPI_INT, 0, MPI_COMM_WORLD);  //send numSeqs\r
-                                       MPI_Bcast(&MPIPos[0], (numFastaSeqs+1), MPI_LONG, 0, MPI_COMM_WORLD); //send file pos   \r
+                                       for(int i = 1; i < processors; i++) { \r
+                                               MPI_Send(&numFastaSeqs, 1, MPI_INT, i, tag, MPI_COMM_WORLD);\r
+                                               MPI_Send(&MPIPos[0], (numFastaSeqs+1), MPI_LONG, i, tag, MPI_COMM_WORLD);\r
+                                       }\r
                                        \r
                                        //figure out how many sequences you have to align\r
                                        numSeqsPerProcessor = numFastaSeqs / processors;\r
-                                       if(pid == (processors - 1)){    numSeqsPerProcessor = numFastaSeqs - pid * numSeqsPerProcessor;         }\r
                                        int startIndex =  pid * numSeqsPerProcessor;\r
+                                       if(pid == (processors - 1)){    numSeqsPerProcessor = numFastaSeqs - pid * numSeqsPerProcessor;         }\r
+                                       \r
                                \r
                                        //align your part\r
                                        driverMPI(startIndex, numSeqsPerProcessor, inMPI, outMPIAlign, outMPIReport, outMPIAccnos, MPIPos);\r
@@ -315,14 +325,16 @@ int AlignCommand::execute(){
                                                if (tempResult != 0) { MPIWroteAccnos = true; }\r
                                        }\r
                                }else{ //you are a child process\r
-                                       MPI_Bcast(&numFastaSeqs, 1, MPI_INT, 0, MPI_COMM_WORLD); //get numSeqs\r
+                                       MPI_Recv(&numFastaSeqs, 1, MPI_INT, 0, tag, MPI_COMM_WORLD, &status);\r
                                        MPIPos.resize(numFastaSeqs+1);\r
-                                       MPI_Bcast(&MPIPos[0], (numFastaSeqs+1), MPI_LONG, 0, MPI_COMM_WORLD); //get file positions\r
+                                       MPI_Recv(&MPIPos[0], (numFastaSeqs+1), MPI_LONG, 0, tag, MPI_COMM_WORLD, &status);\r
+\r
                                        \r
                                        //figure out how many sequences you have to align\r
                                        numSeqsPerProcessor = numFastaSeqs / processors;\r
-                                       if(pid == (processors - 1)){    numSeqsPerProcessor = numFastaSeqs - pid * numSeqsPerProcessor;         }\r
                                        int startIndex =  pid * numSeqsPerProcessor;\r
+                                       if(pid == (processors - 1)){    numSeqsPerProcessor = numFastaSeqs - pid * numSeqsPerProcessor;         }\r
+                                       \r
                                        \r
                                        //align your part\r
                                        driverMPI(startIndex, numSeqsPerProcessor, inMPI, outMPIAlign, outMPIReport, outMPIAccnos, MPIPos);\r