Skip to content

Commit e61baf6

Browse files
committed
Clean up
1 parent 4a9a2dc commit e61baf6

File tree

2 files changed

+1216
-32
lines changed

2 files changed

+1216
-32
lines changed

SphWaterfall/SphWaterfall/src/simulation/SphManager.cpp

+30-32
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,8 @@ Vector3 SphManager::computeViscosityAcceleration(SphParticle& particle) {
274274
void SphManager::exchangeRimParticles(SphParticle::ParticleType particle_type) {
275275
// target domain id, source domain id, rim particles from source in direction of target domain
276276
std::unordered_map<int, std::unordered_map<int, std::unordered_map<int, std::vector<SphParticle>>>> target_source_map;
277-
std::vector<std::array<int, 5>> meta_list;
278-
std::vector<std::array<int, 2>> size_list;
277+
std::vector<std::vector<int>> meta_list;
278+
std::vector<int> size_list;
279279
std::vector<MPI_Request> requests;
280280
std::unordered_map<int, std::unordered_map<int, std::vector<SphParticle>>> new_rim_particles;
281281
int target_domain_id, source_domain_id;
@@ -302,17 +302,15 @@ void SphManager::exchangeRimParticles(SphParticle::ParticleType particle_type) {
302302
// send meta meta data
303303
for (int i = 0; i < slave_comm_size; i++) {
304304
if (i != mpi_rank) {
305-
int meta_count = META_RIM_TAG;
306305
int size = 0;
307306
for (auto& target : target_source_map[i]) {
308307
size += static_cast<int>(target.second.size());
309308
}
310-
size_list.push_back({ size, meta_count});
309+
size_list.push_back(size);
311310

312311
requests.push_back(MPI_Request());
313-
std::cout << mpi_rank << " send meta meta for " << size_list.back()[0] << " to " << i << std::endl;
314-
MPI_Isend(size_list.back().data(), 2, MPI_INT, i, META_META_RIM_TAG, slave_comm, &requests.back());
315-
meta_count+= size;
312+
std::cout << mpi_rank << " send meta meta for " << size_list.back() << " to " << i << std::endl;
313+
MPI_Isend(&size_list.back(), 1, MPI_INT, i, META_META_RIM_TAG, slave_comm, &requests.back());
316314
}
317315
}
318316
MPI_Waitall(requests.size(), requests.data(), MPI_STATUS_IGNORE);
@@ -323,56 +321,56 @@ void SphManager::exchangeRimParticles(SphParticle::ParticleType particle_type) {
323321
// receive meta meta from all other processors and post meta receives
324322
for (int i = 0; i < slave_comm_size; i++) {
325323
if (i != mpi_rank) {
326-
std::array<int, 2> meta_meta;
327-
MPI_Recv(meta_meta.data(), 2, MPI_INT, i, META_META_RIM_TAG, slave_comm, MPI_STATUS_IGNORE);
328-
for (int l = 0; l < meta_meta[0]; l++) {
329-
int tag = meta_meta[1] + l;
330-
meta_list.push_back(std::array<int, 5>());
331-
requests.push_back(MPI_Request());
332-
MPI_Irecv(meta_list.back().data() + 1, 5, MPI_INT, i, tag, slave_comm, &requests.back());
333-
std::cout << mpi_rank << " post meta Tag " << tag << " receive for " << i << std::endl;
334-
meta_list.back()[0] = i;
335-
}
336-
//std::cout << mpi_rank << " post " << meta_meta[0] << " >= Tag " << meta_meta[1] << " receives for " << i << std::endl;
324+
int meta_count;
325+
requests.push_back(MPI_Request());
326+
MPI_Recv(&meta_count, 2, MPI_INT, i, META_META_RIM_TAG, slave_comm, MPI_STATUS_IGNORE);
327+
meta_list.push_back(std::vector<int>(1 + meta_count * 4));
328+
MPI_Irecv(meta_list.back().data() + 1, 4 * meta_count, MPI_INT, i, META_RIM_TAG, slave_comm, &requests.back());
329+
meta_list.back()[0] = i;
330+
//std::cout << mpi_rank << " post " << meta_count[0] << " >= Tag " << meta_count[1] << " receives for " << i << std::endl;
337331
}
338332
}
339333
std::cout << mpi_rank << " finished posting meta receives" << std::endl;
340334
MPI_Barrier(slave_comm);
341335

342-
343336
// send meta data
344337
for (int i = 0; i < slave_comm_size; i++) {
345338
if (i != mpi_rank) {
346-
int meta_count = META_RIM_TAG;
347339
int count = RIM_TAG;
348340
for (auto& target : target_source_map[i]) {
341+
std::vector<int> meta;
349342
for (auto& source : target.second) {
350343
// target domain id, source domain id, tag der richtigen Nachricht, größe der richtigen Nachricht
351-
std::array<int, 4> meta = { target.first , source.first, count, static_cast<int>(source.second.size()) };
352-
MPI_Ssend(meta.data(), 4, MPI_INT, i, meta_count, slave_comm);
353-
354-
std::cout << mpi_rank << " send meta " << meta_count << " tag " << count << " for " << meta[3] << " to " << i << std::endl;
355-
344+
meta.push_back(target.first);
345+
meta.push_back(source.first);
346+
meta.push_back(count);
347+
meta.push_back(static_cast<int>(source.second.size()));
356348
// increment unique tag
357349
count++;
358-
meta_count++;
359350
}
351+
MPI_Ssend(meta.data(), meta.size() , MPI_INT, i, META_RIM_TAG, slave_comm);
360352
}
361353
}
362354
}
363355

364-
for (auto& request : requests) {
365-
std::cout << mpi_rank << " failed sending meta with code " << MPI_Wait(&request, MPI_STATUS_IGNORE) << std::endl;
366-
}
356+
MPI_Waitall(requests.size(), requests.data(), MPI_STATUS_IGNORE);
367357
requests.clear();
368358
std::cout << mpi_rank << " finished sending meta" << std::endl;
369359
MPI_Barrier(slave_comm);
370360

371361
// post receive for particles
372362
for (auto& each_meta : meta_list) {
373-
new_rim_particles[each_meta[1]][each_meta[2]] = std::vector<SphParticle>(each_meta[4]);
374-
requests.push_back(MPI_Request());
375-
MPI_Irecv(new_rim_particles[each_meta[1]][each_meta[2]].data(), each_meta[4] * sizeof(SphParticle), MPI_BYTE, each_meta[0], each_meta[3], slave_comm, &requests.back());
363+
int process_id = each_meta[0];
364+
int meta_count = each_meta.size() / 4;
365+
for (int i = 0; i < meta_count; i++) {
366+
int target = each_meta[1 + i * 4];
367+
int source = each_meta[2 + i * 4];
368+
int tag = each_meta[3 + i * 4];
369+
int count = each_meta[4 + i * 4];
370+
new_rim_particles[target][source] = std::vector<SphParticle>(count);
371+
requests.push_back(MPI_Request());
372+
MPI_Irecv(new_rim_particles[target][source].data(), count * sizeof(SphParticle), MPI_BYTE, process_id, tag, slave_comm, &requests.back());
373+
}
376374
std::cout << mpi_rank << " post receive Tag " << each_meta[3] << " for " << each_meta[4] << " to " << each_meta[0] << std::endl;
377375
}
378376

0 commit comments

Comments
 (0)