]> git.donarmstrong.com Git - mothur.git/blobdiff - aligncommand.cpp
made get.oturep more memory efficient by breaking the work into 2 pieces.
[mothur.git] / aligncommand.cpp
index 38afa3543a0218bcef7602d61a71d9d8e8332f36..a246ecc5806320efeadda6fa82f67fd2f2d99e21 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
@@ -301,8 +308,9 @@ int AlignCommand::execute(){
                                        \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
@@ -321,8 +329,9 @@ int AlignCommand::execute(){
                                        \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