We are looking at the connectivity between lakes and the ability of fish to pass between them, considering that downstream presents no barriers for these fish but swimming upstream does (barriers = steep gradients embedded in the stream network).
The best solution I have found is to build a geometric network, and run "trace upstream" and "trace downstream". My problem solving drops when I have to figure out how automate it for all 391 lake points, so that the output looks the same as you would get from running an OD Cost Matrix except instead of resistance values I would simply have "connected" or "not connected" or; even a table that resembles a spatial join where each unique waterbody ID has a corresponding record for each lake that it is connected to, as a fish is able to swim.
I have attempted using ModelBuilder and inserting iterate functions to loop through each record in the lake points feature class before the trace operation, but I am not getting the results that I would like (ie either it outputs the exact same feature class or it only outputs the last point). I am not highly experienced in ModelBuilder either so my sequence of functions may not be correct.