Bug fix: properly partition networks containing one-sided gap-junction connections (#1774)
Replace the `partition_load_balance` function assumed that gap-junction connections are always double-sided (i.e. if gid `x` has a gap-junction connection from peer gid `y`, then gid `y` must also have a gap-junction connection from peer gid `x`). This used to be a requirement that was checked prior to #1682. Since then, single-sided gap-junctions are in principle allowed, but `partition_load_balance` still operates under the bidirectional gap-junction connection assumption resulting in some gids being present in multiple cell-groups. This PR modifies the `partition_load_balance` function to do the following: 1. On each rank, generate a gj_connection list per cell. (gj_connection list is a vector of gids that have an outgoing connection ending at the cell under consideration). 2. On each rank, gather all the gj_connection lists for each cell in the network. 3. On each rank, modify the global list of gj_conne...
Showing
- arbor/communication/dry_run_context.cpp 20 additions, 0 deletionsarbor/communication/dry_run_context.cpp
- arbor/communication/mpi.hpp 32 additions, 0 deletionsarbor/communication/mpi.hpp
- arbor/communication/mpi_context.cpp 5 additions, 0 deletionsarbor/communication/mpi_context.cpp
- arbor/distributed_context.hpp 15 additions, 0 deletionsarbor/distributed_context.hpp
- arbor/partition_load_balance.cpp 42 additions, 6 deletionsarbor/partition_load_balance.cpp
- test/unit-distributed/test_domain_decomposition.cpp 204 additions, 88 deletionstest/unit-distributed/test_domain_decomposition.cpp
- test/unit-distributed/test_mpi.cpp 34 additions, 0 deletionstest/unit-distributed/test_mpi.cpp
- test/unit/test_domain_decomposition.cpp 161 additions, 64 deletionstest/unit/test_domain_decomposition.cpp
Please register or sign in to comment