diff --git a/bh_tree_mpi/simulation/MpiSimulation.cpp b/bh_tree_mpi/simulation/MpiSimulation.cpp index 4e43e46fa873fb1d552bf2b59dcff19a750402ca..18bc98dde115cc8d3c25d2c62d42f8a19a1d8bc8 100644 --- a/bh_tree_mpi/simulation/MpiSimulation.cpp +++ b/bh_tree_mpi/simulation/MpiSimulation.cpp @@ -207,105 +207,14 @@ namespace nbody { this->send(this->tree->copyRefinements(this->domains[i]), i); } } - int received = 0; - while (received < this->parallelSize - 1) { - vector buffer; - - this->recv(buffer, MPI_ANY_SOURCE); - //cout << "recved " + buffer.size() << endl; - //print(this->parallelRank, buffer); - received++; - } - /* - vector > sendRefinements; - MPI_Request* sendRequests = new MPI_Request[this->parallelSize]; - - for (int i = 0; i < this->parallelSize; i++) { - if (i != this->parallelRank) { - sendRefinements.push_back(this->tree->copyRefinements(this->domains[i])); - MPI_Isend(&sendRefinements[i], (int) sendRefinements[i].size(), this->bodyType, i, 0, MPI_COMM_WORLD, &sendRequests[i]); - } else { - sendRefinements.push_back(vector()); - } - } - - int received = 0; - Body** data = new Body*[this->parallelSize]; - MPI_Request* recvRequests = new MPI_Request[this->parallelSize]; - - for (int i = 0; i < this->parallelSize; i++) { - data[i] = NULL; - } - while (received < this->parallelSize - 1) { - for (int i = 0; i < this->parallelSize; i++) { - if (i != this->parallelRank && data[i] == NULL) { - int ready; - MPI_Status probeStatus; - - MPI_Iprobe(i, 0, MPI_COMM_WORLD, &ready, &probeStatus); - if (ready) { - int count; - MPI_Status status; - - MPI_Get_count(&probeStatus, this->bodyType, &count); - data[i] = new Body[count]; - MPI_Irecv(&data[i][0], count, this->bodyType, i, 0, MPI_COMM_WORLD, &recvRequests[i]); - MPI_Wait(&recvRequests[i], &status); - cout << this->parallelRank << ": " << count << " from " << i << " received" << endl; - } - } - } - } - delete[] sendRequests; - delete[] recvRequests; - for (int i = 0; i < this->parallelSize; i++) { - delete[] data[i]; - } - delete[] data; - */ - /* - int* lengths = new int[this->parallelSize]; - - for (int i = 0; i < this->parallelSize; i++) { - if (i != this->parallelRank) { - refinements.push_back(this->tree->copyRefinements(this->domains[i])); - } else { - refinements.push_back(vector()); - } - lengths[i] = refinements.back().size(); - } - MPI_Alltoall(lengths, 1, MPI_INT, lengths, 1, MPI_INT, MPI_COMM_WORLD); - for (int i = 0; i < this->parallelSize; i++) { - if (i != this->parallelRank) { - MPI_Send(&(refinements[i][0]), (int) refinements[i].size(), this->bodyType, i, 0, MPI_COMM_WORLD); - } - } - for (int i = 0; i < this->parallelSize; i++) { - if (i != this->parallelRank) { - MPI_Recv() - } - } - delete[] lengths; - */ //receive bodies and integrate them into local tree for simulation - - /* - int received = 0; - while (received < this->parallelSize - 1) { + for (int i = 0; i < this->parallelSize - 1; i++) { vector refinements; - //int source = this->recv(refinements); - //cout << "refR: " << this->parallelRank << " <- " << source << ": " << refinements.size() << endl; - //this->tree->mergeLET(refinements); - //integrate bodies in order of arrival to do communication/computation overlapping - this->comms[0].recvBlocking(MPI_ANY_SOURCE, refinements); - + this->recv(refinements, MPI_ANY_SOURCE); this->tree->mergeLET(refinements); - //this->tree.getRootBB().print(); - received++; } - */ if (!this->tree->isCorrect()) { cout << "WRONG" << endl; } @@ -320,7 +229,7 @@ namespace nbody { this->tree->build(this->bodies); } */ - this->tree->build(this->bodies); + this->tree->build(this->bodies, this->overallDomain); if (!this->tree->isCorrect()) { cout << "wrong tree" << endl; } else {