Skip to content

Commit b22daa2

Browse files
authored
Compatibility with: FEniCS/dolfinx#3495 (#138)
1 parent 3a6936f commit b22daa2

File tree

3 files changed

+94
-104
lines changed

3 files changed

+94
-104
lines changed

cpp/ContactConstraint.h

+68-71
Original file line numberDiff line numberDiff line change
@@ -542,8 +542,8 @@ mpc_data<T> create_contact_slip_condition(
542542
const std::size_t out_collision_slaves = slave_indices_remote.size();
543543
std::vector<std::int32_t> num_slaves_recv(indegree + 1);
544544
MPI_Neighbor_allgather(
545-
&out_collision_slaves, 1, dolfinx::MPI::mpi_type<std::int32_t>(),
546-
num_slaves_recv.data(), 1, dolfinx::MPI::mpi_type<std::int32_t>(),
545+
&out_collision_slaves, 1, dolfinx::MPI::mpi_t<std::int32_t>,
546+
num_slaves_recv.data(), 1, dolfinx::MPI::mpi_t<std::int32_t>,
547547
neighborhood_comms[0]);
548548
num_slaves_recv.pop_back();
549549

@@ -555,9 +555,9 @@ mpc_data<T> create_contact_slip_condition(
555555
// Send data to neighbors and receive data
556556
std::vector<std::int32_t> recv_rems(disp.back());
557557
MPI_Neighbor_allgatherv(send_rems.data(), (int)send_rems.size(),
558-
dolfinx::MPI::mpi_type<std::int32_t>(),
559-
recv_rems.data(), num_slaves_recv.data(), disp.data(),
560-
dolfinx::MPI::mpi_type<std::int32_t>(),
558+
dolfinx::MPI::mpi_t<std::int32_t>, recv_rems.data(),
559+
num_slaves_recv.data(), disp.data(),
560+
dolfinx::MPI::mpi_t<std::int32_t>,
561561
neighborhood_comms[0]);
562562

563563
// Multiply recv size by three to accommodate vector coordinates and
@@ -574,14 +574,14 @@ mpc_data<T> create_contact_slip_condition(
574574
// Send slave normal and coordinate to neighbors
575575
std::vector<U> recv_coords(disp.back() * 3);
576576
MPI_Neighbor_allgatherv(coordinates_send.data(), (int)coordinates_send.size(),
577-
dolfinx::MPI::mpi_type<U>(), recv_coords.data(),
577+
dolfinx::MPI::mpi_t<U>, recv_coords.data(),
578578
num_slaves_recv3.data(), disp3.data(),
579-
dolfinx::MPI::mpi_type<U>(), neighborhood_comms[0]);
579+
dolfinx::MPI::mpi_t<U>, neighborhood_comms[0]);
580580
std::vector<U> slave_normals(disp.back() * 3);
581581
MPI_Neighbor_allgatherv(normals_send.data(), (int)normals_send.size(),
582-
dolfinx::MPI::mpi_type<U>(), slave_normals.data(),
582+
dolfinx::MPI::mpi_t<U>, slave_normals.data(),
583583
num_slaves_recv3.data(), disp3.data(),
584-
dolfinx::MPI::mpi_type<U>(), neighborhood_comms[0]);
584+
dolfinx::MPI::mpi_t<U>, neighborhood_comms[0]);
585585

586586
// Compute off-process contributions
587587
mpc_data<T> remote_data;
@@ -667,31 +667,30 @@ mpc_data<T> create_contact_slip_condition(
667667
std::vector<std::int32_t> remote_colliding_offsets(inc_disp_offsets.back());
668668
MPI_Ineighbor_alltoallv(
669669
offsets_remote.data(), num_out_offsets.data(), send_disp_offsets.data(),
670-
dolfinx::MPI::mpi_type<std::int32_t>(), remote_colliding_offsets.data(),
670+
dolfinx::MPI::mpi_t<std::int32_t>, remote_colliding_offsets.data(),
671671
num_inc_offsets.data(), inc_disp_offsets.data(),
672-
dolfinx::MPI::mpi_type<std::int32_t>(), neighborhood_comms[1],
673-
&requests[0]);
672+
dolfinx::MPI::mpi_t<std::int32_t>, neighborhood_comms[1], &requests[0]);
674673
// Receive colliding masters and relevant data from other processor
675674
std::vector<std::int64_t> remote_colliding_masters(disp_inc_masters.back());
676675
MPI_Ineighbor_alltoallv(
677676
remote_data.masters.data(), num_collision_masters.data(),
678-
send_disp_masters.data(), dolfinx::MPI::mpi_type<std::int64_t>(),
677+
send_disp_masters.data(), dolfinx::MPI::mpi_t<std::int64_t>,
679678
remote_colliding_masters.data(), inc_num_collision_masters.data(),
680-
disp_inc_masters.data(), dolfinx::MPI::mpi_type<std::int64_t>(),
679+
disp_inc_masters.data(), dolfinx::MPI::mpi_t<std::int64_t>,
681680
neighborhood_comms[1], &requests[1]);
682681
std::vector<T> remote_colliding_coeffs(disp_inc_masters.back());
683682
MPI_Ineighbor_alltoallv(
684683
remote_data.coeffs.data(), num_collision_masters.data(),
685-
send_disp_masters.data(), dolfinx::MPI::mpi_type<T>(),
684+
send_disp_masters.data(), dolfinx::MPI::mpi_t<T>,
686685
remote_colliding_coeffs.data(), inc_num_collision_masters.data(),
687-
disp_inc_masters.data(), dolfinx::MPI::mpi_type<T>(),
688-
neighborhood_comms[1], &requests[2]);
686+
disp_inc_masters.data(), dolfinx::MPI::mpi_t<T>, neighborhood_comms[1],
687+
&requests[2]);
689688
std::vector<std::int32_t> remote_colliding_owners(disp_inc_masters.back());
690689
MPI_Ineighbor_alltoallv(
691690
remote_data.owners.data(), num_collision_masters.data(),
692-
send_disp_masters.data(), dolfinx::MPI::mpi_type<std::int32_t>(),
691+
send_disp_masters.data(), dolfinx::MPI::mpi_t<std::int32_t>,
693692
remote_colliding_owners.data(), inc_num_collision_masters.data(),
694-
disp_inc_masters.data(), dolfinx::MPI::mpi_type<std::int32_t>(),
693+
disp_inc_masters.data(), dolfinx::MPI::mpi_t<std::int32_t>,
695694
neighborhood_comms[1], &requests[3]);
696695

697696
// Wait for offsets to be sent
@@ -1137,8 +1136,8 @@ mpc_data<T> create_contact_inelastic_condition(
11371136
const auto num_colliding_blocks = (int)blocks_wo_local_collision.size();
11381137
std::vector<std::int32_t> num_slave_blocks(indegree + 1);
11391138
MPI_Neighbor_allgather(
1140-
&num_colliding_blocks, 1, dolfinx::MPI::mpi_type<std::int32_t>(),
1141-
num_slave_blocks.data(), 1, dolfinx::MPI::mpi_type<std::int32_t>(),
1139+
&num_colliding_blocks, 1, dolfinx::MPI::mpi_t<std::int32_t>,
1140+
num_slave_blocks.data(), 1, dolfinx::MPI::mpi_t<std::int32_t>,
11421141
neighborhood_comms[0]);
11431142
num_slave_blocks.pop_back();
11441143

@@ -1151,9 +1150,9 @@ mpc_data<T> create_contact_inelastic_condition(
11511150
std::vector<std::int64_t> remote_slave_blocks(disp.back());
11521151
MPI_Neighbor_allgatherv(
11531152
blocks_wo_local_collision.data(), num_colliding_blocks,
1154-
dolfinx::MPI::mpi_type<std::int64_t>(), remote_slave_blocks.data(),
1155-
num_slave_blocks.data(), disp.data(),
1156-
dolfinx::MPI::mpi_type<std::int64_t>(), neighborhood_comms[0]);
1153+
dolfinx::MPI::mpi_t<std::int64_t>, remote_slave_blocks.data(),
1154+
num_slave_blocks.data(), disp.data(), dolfinx::MPI::mpi_t<std::int64_t>,
1155+
neighborhood_comms[0]);
11571156

11581157
// Multiply recv size by three to accommodate block coordinates
11591158
std::vector<std::int32_t> num_block_coordinates(indegree);
@@ -1165,11 +1164,10 @@ mpc_data<T> create_contact_inelastic_condition(
11651164

11661165
// Send slave coordinates to neighbors
11671166
std::vector<U> recv_coords(disp.back() * 3);
1168-
MPI_Neighbor_allgatherv(distribute_coordinates.data(),
1169-
(int)distribute_coordinates.size(),
1170-
dolfinx::MPI::mpi_type<U>(), recv_coords.data(),
1171-
num_block_coordinates.data(), coordinate_disp.data(),
1172-
dolfinx::MPI::mpi_type<U>(), neighborhood_comms[0]);
1167+
MPI_Neighbor_allgatherv(
1168+
distribute_coordinates.data(), (int)distribute_coordinates.size(),
1169+
dolfinx::MPI::mpi_t<U>, recv_coords.data(), num_block_coordinates.data(),
1170+
coordinate_disp.data(), dolfinx::MPI::mpi_t<U>, neighborhood_comms[0]);
11731171

11741172
// Vector for processes with slaves, mapping slaves with
11751173
// collision on this process
@@ -1334,9 +1332,9 @@ mpc_data<T> create_contact_inelastic_condition(
13341332
disp_inc_slave_blocks.back());
13351333
MPI_Neighbor_alltoallv(
13361334
found_slave_blocks.data(), num_found_slave_blocks.data(),
1337-
send_disp_slave_blocks.data(), dolfinx::MPI::mpi_type<std::int64_t>(),
1335+
send_disp_slave_blocks.data(), dolfinx::MPI::mpi_t<std::int64_t>,
13381336
remote_colliding_blocks.data(), inc_num_found_slave_blocks.data(),
1339-
disp_inc_slave_blocks.data(), dolfinx::MPI::mpi_type<std::int64_t>(),
1337+
disp_inc_slave_blocks.data(), dolfinx::MPI::mpi_t<std::int64_t>,
13401338
neighborhood_comms[1]);
13411339
std::vector<std::int32_t> recv_blocks_as_local(
13421340
remote_colliding_blocks.size());
@@ -1345,31 +1343,30 @@ mpc_data<T> create_contact_inelastic_condition(
13451343
disp_inc_slave_blocks.back());
13461344
MPI_Neighbor_alltoallv(
13471345
offset_for_blocks.data(), num_found_slave_blocks.data(),
1348-
send_disp_slave_blocks.data(), dolfinx::MPI::mpi_type<std::int32_t>(),
1346+
send_disp_slave_blocks.data(), dolfinx::MPI::mpi_t<std::int32_t>,
13491347
remote_colliding_offsets.data(), inc_num_found_slave_blocks.data(),
1350-
disp_inc_slave_blocks.data(), dolfinx::MPI::mpi_type<std::int32_t>(),
1348+
disp_inc_slave_blocks.data(), dolfinx::MPI::mpi_t<std::int32_t>,
13511349
neighborhood_comms[1]);
13521350
// Receive colliding masters and relevant data from other processor
13531351
std::vector<std::int64_t> remote_colliding_masters(disp_inc_masters.back());
13541352
MPI_Neighbor_alltoallv(
13551353
found_masters.data(), num_collision_masters.data(),
1356-
send_disp_masters.data(), dolfinx::MPI::mpi_type<std::int64_t>(),
1354+
send_disp_masters.data(), dolfinx::MPI::mpi_t<std::int64_t>,
13571355
remote_colliding_masters.data(), num_inc_masters.data(),
1358-
disp_inc_masters.data(), dolfinx::MPI::mpi_type<std::int64_t>(),
1356+
disp_inc_masters.data(), dolfinx::MPI::mpi_t<std::int64_t>,
13591357
neighborhood_comms[1]);
13601358
std::vector<T> remote_colliding_coeffs(disp_inc_masters.back());
13611359
MPI_Neighbor_alltoallv(found_coefficients.data(),
13621360
num_collision_masters.data(), send_disp_masters.data(),
1363-
dolfinx::MPI::mpi_type<T>(),
1364-
remote_colliding_coeffs.data(), num_inc_masters.data(),
1365-
disp_inc_masters.data(), dolfinx::MPI::mpi_type<T>(),
1366-
neighborhood_comms[1]);
1361+
dolfinx::MPI::mpi_t<T>, remote_colliding_coeffs.data(),
1362+
num_inc_masters.data(), disp_inc_masters.data(),
1363+
dolfinx::MPI::mpi_t<T>, neighborhood_comms[1]);
13671364
std::vector<std::int32_t> remote_colliding_owners(disp_inc_masters.back());
13681365
MPI_Neighbor_alltoallv(
13691366
found_owners.data(), num_collision_masters.data(),
1370-
send_disp_masters.data(), dolfinx::MPI::mpi_type<std::int32_t>(),
1367+
send_disp_masters.data(), dolfinx::MPI::mpi_t<std::int32_t>,
13711368
remote_colliding_owners.data(), num_inc_masters.data(),
1372-
disp_inc_masters.data(), dolfinx::MPI::mpi_type<std::int32_t>(),
1369+
disp_inc_masters.data(), dolfinx::MPI::mpi_t<std::int32_t>,
13731370
neighborhood_comms[1]);
13741371

13751372
// Create receive displacement of data per slave block
@@ -1390,9 +1387,9 @@ mpc_data<T> create_contact_inelastic_condition(
13901387
std::vector<std::int32_t> block_dofs_recv(inc_block_disp.back());
13911388
MPI_Neighbor_alltoallv(
13921389
offsets_in_blocks.data(), num_found_blocks.data(), send_block_disp.data(),
1393-
dolfinx::MPI::mpi_type<std::int32_t>(), block_dofs_recv.data(),
1390+
dolfinx::MPI::mpi_t<std::int32_t>, block_dofs_recv.data(),
13941391
recv_num_found_blocks.data(), inc_block_disp.data(),
1395-
dolfinx::MPI::mpi_type<std::int32_t>(), neighborhood_comms[1]);
1392+
dolfinx::MPI::mpi_t<std::int32_t>, neighborhood_comms[1]);
13961393

13971394
// Iterate through the processors
13981395
for (std::size_t i = 0; i < src_ranks_rev.size(); ++i)
@@ -1591,19 +1588,19 @@ mpc_data<T> create_contact_inelastic_condition(
15911588
disp_send_ghost_slaves.begin() + 1);
15921589

15931590
std::vector<std::int64_t> in_ghost_slaves(disp_recv_ghost_slaves.back());
1594-
MPI_Neighbor_alltoallv(
1595-
out_ghost_slaves.data(), num_send_slaves.data(),
1596-
disp_send_ghost_slaves.data(), dolfinx::MPI::mpi_type<std::int64_t>(),
1597-
in_ghost_slaves.data(), inc_num_slaves.data(),
1598-
disp_recv_ghost_slaves.data(), dolfinx::MPI::mpi_type<std::int64_t>(),
1599-
slave_to_ghost);
1591+
MPI_Neighbor_alltoallv(out_ghost_slaves.data(), num_send_slaves.data(),
1592+
disp_send_ghost_slaves.data(),
1593+
dolfinx::MPI::mpi_t<std::int64_t>,
1594+
in_ghost_slaves.data(), inc_num_slaves.data(),
1595+
disp_recv_ghost_slaves.data(),
1596+
dolfinx::MPI::mpi_t<std::int64_t>, slave_to_ghost);
16001597
std::vector<std::int32_t> in_ghost_offsets(disp_recv_ghost_slaves.back());
1601-
MPI_Neighbor_alltoallv(
1602-
out_ghost_offsets.data(), num_send_slaves.data(),
1603-
disp_send_ghost_slaves.data(), dolfinx::MPI::mpi_type<std::int32_t>(),
1604-
in_ghost_offsets.data(), inc_num_slaves.data(),
1605-
disp_recv_ghost_slaves.data(), dolfinx::MPI::mpi_type<std::int32_t>(),
1606-
slave_to_ghost);
1598+
MPI_Neighbor_alltoallv(out_ghost_offsets.data(), num_send_slaves.data(),
1599+
disp_send_ghost_slaves.data(),
1600+
dolfinx::MPI::mpi_t<std::int32_t>,
1601+
in_ghost_offsets.data(), inc_num_slaves.data(),
1602+
disp_recv_ghost_slaves.data(),
1603+
dolfinx::MPI::mpi_t<std::int32_t>, slave_to_ghost);
16071604

16081605
// Communicate size of communication of masters
16091606
std::vector<int> inc_num_masters(src_ranks_ghost.size() + 1);
@@ -1620,25 +1617,25 @@ mpc_data<T> create_contact_inelastic_condition(
16201617
std::partial_sum(num_send_masters.begin(), num_send_masters.end(),
16211618
disp_send_ghost_masters.begin() + 1);
16221619
std::vector<std::int64_t> in_ghost_masters(disp_recv_ghost_masters.back());
1623-
MPI_Neighbor_alltoallv(
1624-
out_ghost_masters.data(), num_send_masters.data(),
1625-
disp_send_ghost_masters.data(), dolfinx::MPI::mpi_type<std::int64_t>(),
1626-
in_ghost_masters.data(), inc_num_masters.data(),
1627-
disp_recv_ghost_masters.data(), dolfinx::MPI::mpi_type<std::int64_t>(),
1628-
slave_to_ghost);
1620+
MPI_Neighbor_alltoallv(out_ghost_masters.data(), num_send_masters.data(),
1621+
disp_send_ghost_masters.data(),
1622+
dolfinx::MPI::mpi_t<std::int64_t>,
1623+
in_ghost_masters.data(), inc_num_masters.data(),
1624+
disp_recv_ghost_masters.data(),
1625+
dolfinx::MPI::mpi_t<std::int64_t>, slave_to_ghost);
16291626
std::vector<T> in_ghost_coeffs(disp_recv_ghost_masters.back());
16301627
MPI_Neighbor_alltoallv(out_ghost_coeffs.data(), num_send_masters.data(),
1631-
disp_send_ghost_masters.data(),
1632-
dolfinx::MPI::mpi_type<T>(), in_ghost_coeffs.data(),
1633-
inc_num_masters.data(), disp_recv_ghost_masters.data(),
1634-
dolfinx::MPI::mpi_type<T>(), slave_to_ghost);
1628+
disp_send_ghost_masters.data(), dolfinx::MPI::mpi_t<T>,
1629+
in_ghost_coeffs.data(), inc_num_masters.data(),
1630+
disp_recv_ghost_masters.data(), dolfinx::MPI::mpi_t<T>,
1631+
slave_to_ghost);
16351632
std::vector<std::int32_t> in_ghost_owners(disp_recv_ghost_masters.back());
1636-
MPI_Neighbor_alltoallv(
1637-
out_ghost_owners.data(), num_send_masters.data(),
1638-
disp_send_ghost_masters.data(), dolfinx::MPI::mpi_type<std::int32_t>(),
1639-
in_ghost_owners.data(), inc_num_masters.data(),
1640-
disp_recv_ghost_masters.data(), dolfinx::MPI::mpi_type<std::int32_t>(),
1641-
slave_to_ghost);
1633+
MPI_Neighbor_alltoallv(out_ghost_owners.data(), num_send_masters.data(),
1634+
disp_send_ghost_masters.data(),
1635+
dolfinx::MPI::mpi_t<std::int32_t>,
1636+
in_ghost_owners.data(), inc_num_masters.data(),
1637+
disp_recv_ghost_masters.data(),
1638+
dolfinx::MPI::mpi_t<std::int32_t>, slave_to_ghost);
16421639

16431640
// Accumulate offsets of masters from different processors
16441641
std::vector<std::int32_t> ghost_offsets = {0};

cpp/PeriodicConstraint.h

+6-6
Original file line numberDiff line numberDiff line change
@@ -262,10 +262,10 @@ dolfinx_mpc::mpc_data<T> _create_periodic_condition(
262262

263263
// Compute number of receiving slaves
264264
std::vector<std::int32_t> num_recv_slaves(indegree + 1);
265-
MPI_Neighbor_alltoall(
266-
num_out_slaves.data(), 1, dolfinx::MPI::mpi_type<std::int32_t>(),
267-
num_recv_slaves.data(), 1, dolfinx::MPI::mpi_type<std::int32_t>(),
268-
slave_to_master);
265+
MPI_Neighbor_alltoall(num_out_slaves.data(), 1,
266+
dolfinx::MPI::mpi_t<std::int32_t>,
267+
num_recv_slaves.data(), 1,
268+
dolfinx::MPI::mpi_t<std::int32_t>, slave_to_master);
269269
num_out_slaves.pop_back();
270270
num_recv_slaves.pop_back();
271271
// Prepare data structures for sending information
@@ -332,8 +332,8 @@ dolfinx_mpc::mpc_data<T> _create_periodic_condition(
332332
// Communicate coordinates
333333
MPI_Neighbor_alltoallv(
334334
coords_out.data(), num_out_slaves.data(), disp_out.data(),
335-
dolfinx::MPI::mpi_type<U>(), coords_recvb.data(), num_recv_slaves.data(),
336-
disp_in.data(), dolfinx::MPI::mpi_type<U>(), slave_to_master);
335+
dolfinx::MPI::mpi_t<U>, coords_recvb.data(), num_recv_slaves.data(),
336+
disp_in.data(), dolfinx::MPI::mpi_t<U>, slave_to_master);
337337

338338
// Reset in_displacements to be per block for later usage
339339
auto d_3 = [](auto& num) { num /= 3; };

0 commit comments

Comments
 (0)