Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uni-directional gap junctions #1767

Closed
schmitts opened this issue Nov 17, 2021 · 1 comment · Fixed by #1774
Closed

Uni-directional gap junctions #1767

schmitts opened this issue Nov 17, 2021 · 1 comment · Fixed by #1774
Assignees
Labels
Milestone

Comments

@schmitts
Copy link
Contributor

The attached example configures a uni-directional gap junction and yields using ed957368b8d6607d15dbc4a3c9a655acca51ee69:

cell_description(self, gid=1)
cell_description(self, gid=0)
cell_description(self, gid=1)
Traceback (most recent call last):
  File "./two_cell_gap_junctions.py", line 154, in <module>
    sim = arbor.simulation(recipe, domains, context)
RuntimeError: label_resolution_map: duplicate gid

The cell description is called twice for gid=1. Changing the script to bi-directional gap junctions makes the error disappear.

two_cell_gap_junctions.py.gz

@noraabiakar
Copy link
Contributor

Thanks for opening the ticket. Uni-directional gap-junctions should be supported in principle, but there's a latent bug in the domain decomposition that fails to account for them. It causes a gid to be included in multiple cell-groups. I will work on a fix.

@akuesters akuesters added this to the v0.6 milestone Nov 23, 2021
bcumming pushed a commit that referenced this issue Jan 6, 2022
…n 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_connections in the network to make all gj_connections bidirectional. 
4. On each rank, use the global list of gj_connections in the network to partition the graph. 

Fixes #1767.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment