}
//***************************************************************************************************************
-int Bellerophon::print(ostream& out, ostream& outAcc) {
+int Bellerophon::print(ostream& out, ostream& outAcc, string s) {
try {
int above1 = 0;
}
#ifdef USE_MPI
//***************************************************************************************************************
-int Bellerophon::print(MPI_File& out, MPI_File& outAcc) {
+int Bellerophon::print(MPI_File& out, MPI_File& outAcc, string s) {
try {
int pid;
numSeqsPerProcessor = iters / processors;
//each process hits this only once
- int startPos = pid * numSeqsPerProcessor;
+ unsigned long long startPos = pid * numSeqsPerProcessor;
if(pid == processors - 1){
numSeqsPerProcessor = iters - pid * numSeqsPerProcessor;
}
MPI_Recv(&length, 1, MPI_INT, j, 2001, MPI_COMM_WORLD, &status);
char* buf = new char[length];
- MPI_Recv(&buf, length, MPI_CHAR, j, 2001, MPI_COMM_WORLD, &status);
+ MPI_Recv(&buf[0], length, MPI_CHAR, j, 2001, MPI_COMM_WORLD, &status);
string temp = buf;
if (temp.length() > length) { temp = temp.substr(0, length); }
//played with this a bit, but it may be better to try user-defined datatypes with set string lengths??
vector<string> MPIBestSend = getBestWindow(lines[0]);
pref.clear();
-
+
//send your result to parent
for (int i = 0; i < numSeqs; i++) {
MPIBestSend.clear();
}
-
+ MPI_Barrier(MPI_COMM_WORLD); //make everyone wait - just in case
#else
//divide breakpoints between processors
- #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
+ #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
if(processors == 1){
lines.push_back(linePair(0, iters));
int numSeqsPerProcessor = iters / processors;
for (int i = 0; i < processors; i++) {
- int startPos = i * numSeqsPerProcessor;
+ unsigned long long startPos = i * numSeqsPerProcessor;
if(i == processors - 1){
numSeqsPerProcessor = iters - i * numSeqsPerProcessor;
}
int Bellerophon::createProcesses(vector<int> mid) {
try {
-#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
+#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix)
int process = 0;
int exitCommand = 1;
vector<int> processIDS;
string tempOut = outputDir + toString(getpid()) + ".temp";
writePrefs(tempOut, lines[process]);
exit(0);
- }else { m->mothurOut("unable to spawn the necessary processes."); m->mothurOutEndLine(); exit(0); }
+ }else {
+ m->mothurOut("[ERROR]: unable to spawn the necessary processes."); m->mothurOutEndLine();
+ for (int i = 0; i < processIDS.size(); i++) { kill (processIDS[i], SIGINT); }
+ exit(0);
+ }
}
//force parent to wait until all the processes are done
int Bellerophon::generatePreferences(vector<SeqMap> left, vector<SeqMap> right, int mid){
try {
- float dme = 0.0;
SeqMap::iterator itR;
SeqMap::iterator itL;
try {
ofstream outTemp;
- openOutputFile(file, outTemp);
+ m->openOutputFile(file, outTemp);
//lets you know what part of the pref matrix you are writing
outTemp << tempLine.start << '\t' << tempLine.num << endl;
for (int j = 0; j < numSeqs; j++) {
- if (m->control_pressed) { outTemp.close(); remove(file.c_str()); return 0; }
+ if (m->control_pressed) { outTemp.close(); m->mothurRemove(file); return 0; }
outTemp << pref[i][j].name << '\t' << pref[i][j].leftParent << '\t' << pref[i][j].rightParent << '\t';
outTemp << pref[i][j].score << '\t' << pref[i][j].closestLeft << '\t' << pref[i][j].closestRight << '\t' << pref[i][j].midpoint << endl;
try {
ifstream inTemp;
- openInputFile(file, inTemp);
+ m->openInputFile(file, inTemp);
int start, num;
//lets you know what part of the pref matrix you are writing
- inTemp >> start >> num; gobble(inTemp);
+ inTemp >> start >> num; m->gobble(inTemp);
for (int i = start; i < num; i++) {
for (int j = 0; j < numSeqs; j++) {
- if (m->control_pressed) { inTemp.close(); remove(file.c_str()); return 0; }
+ if (m->control_pressed) { inTemp.close(); m->mothurRemove(file); return 0; }
inTemp >> pref[i][j].name >> pref[i][j].leftParent >> pref[i][j].rightParent;
inTemp >> pref[i][j].score >> pref[i][j].closestLeft >> pref[i][j].closestRight >> pref[i][j].midpoint;
- gobble(inTemp);
+ m->gobble(inTemp);
}
}
inTemp.close();
- remove(file.c_str());
+ m->mothurRemove(file);
return 0;
}