Skip to content
Snippets Groups Projects
Commit cda108fc authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Begin use of item ids to create dispatching messages

- need to read item ids from the mesh
- need to generate ids for non specified ones (e.g. Gmsh does not provide
  numbers for all boundary elements)
parent e17ef06f
No related branches found
No related tags found
1 merge request!11Feature/mpi
......@@ -177,14 +177,14 @@ void GmshReader::_dispatch()
Partitioner P;
Array<int> cell_new_owner = P.partition(mesh_graph);
const std::vector<Array<const int>> cell_to_send_by_proc
const std::vector<Array<const CellId>> cell_to_send_by_proc
= [&] () {
std::vector<std::vector<int>> cell_vector_to_send_by_proc(commSize());
std::vector<std::vector<CellId>> cell_vector_to_send_by_proc(commSize());
for (size_t i=0; i<cell_new_owner.size(); ++i) {
cell_vector_to_send_by_proc[cell_new_owner[i]].push_back(i);
cell_vector_to_send_by_proc[cell_new_owner[i]].push_back(CellId{i});
}
std::vector<Array<const int>> cell_to_send_by_proc(commSize());
std::vector<Array<const CellId>> cell_to_send_by_proc(commSize());
for (size_t i=0; i<commSize(); ++i) {
cell_to_send_by_proc[i] = convert_to_array(cell_vector_to_send_by_proc[i]);
}
......@@ -192,6 +192,20 @@ void GmshReader::_dispatch()
return std::move(cell_to_send_by_proc);
} ();
const std::vector<Array<const int>> cell_number_to_send_by_proc
= [&] () {
std::vector<Array<const int>> cell_number_to_send_by_proc(commSize());
for (size_t i=0; i<commSize(); ++i) {
const Array<const CellId>& cell_list = cell_to_send_by_proc[i];
Array<int> cell_number_list(cell_list.size());
parallel_for (cell_list.size(), PASTIS_LAMBDA(const CellId& cell_id) {
#warning must use table of cell numbers
cell_number_list[cell_id] = cell_list[cell_id];
});
cell_number_to_send_by_proc[i] = cell_number_list;
}
return std::move(cell_number_to_send_by_proc);
} ();
Array<int> nb_cell_to_send_by_proc(commSize());
for (size_t i=0; i<commSize(); ++i) {
......@@ -206,22 +220,30 @@ void GmshReader::_dispatch()
+ Sum(nb_cell_to_recv_by_proc)
- Sum(nb_cell_to_send_by_proc);
std::vector<Array<int>> recv_cell_by_proc(commSize());
std::vector<Array<int>> recv_cell_number_by_proc(commSize());
for (size_t i=0; i<commSize(); ++i) {
recv_cell_by_proc[i] = Array<int>(nb_cell_to_recv_by_proc[i]);
recv_cell_number_by_proc[i] = Array<int>(nb_cell_to_recv_by_proc[i]);
}
exchange(cell_to_send_by_proc, recv_cell_by_proc);
exchange(cell_number_to_send_by_proc, recv_cell_number_by_proc);
Array<int> new_cell_id(new_cell_number);
// std::vector<Array<CellType>> cell_type_to_send_by_proc
// = [&] () {
// CellValue<const CellType> cell_type = mesh.connectivity().cellType();
// std::vector<std::vector<CellType>> cell_type_vector_to_send_by_proc(commSize());
// for (CellId i=0; i<mesh.numberOfCells(); ++i) {
// cell_type_vector_to_send_by_proc[cell_new_owner[i]].push_back(cell_type[i]);
// }
// return cell_type_vector_to_send_by_proc;
// } ();
for (int i_rank=0; i_rank < commSize(); ++i_rank) {
if (commRank() == i_rank) {
std::cout << "----- rank=" << i_rank << " -----\n";
for (int j_rank=0; j_rank < commSize(); ++j_rank) {
std::cout << "recv from " << j_rank << ':';
for (size_t i=0; i<recv_cell_by_proc[j_rank].size(); ++i) {
std::cout << ' ' << recv_cell_by_proc[j_rank][i];
for (size_t i=0; i<recv_cell_number_by_proc[j_rank].size(); ++i) {
std::cout << ' ' << recv_cell_number_by_proc[j_rank][i];
}
std::cout << '\n' << std::flush;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment