Skip to content

Commit

Permalink
Vary line properties and add allocation examples
Browse files Browse the repository at this point in the history
  • Loading branch information
SouthEndMusic committed Oct 31, 2024
1 parent bbae8bb commit 3f4a9ec
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 25 deletions.
2 changes: 1 addition & 1 deletion Manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

julia_version = "1.11.1"
manifest_format = "2.0"
project_hash = "921c2f0c042509feb4a1950ec24084c1ad561dd0"
project_hash = "ecb70ca5008f6b49d97f55488305bbc1ef31ed96"

[[deps.ADTypes]]
git-tree-sha1 = "eea5d80188827b35333801ef97a40c2ed653b081"
Expand Down
1 change: 1 addition & 0 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Artifacts = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
BasicModelInterface = "59605e27-edc0-445a-b93d-c09a3a50b330"
CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
CodecZstd = "6b39b394-51ab-5f42-8807-6242bab2b4c2"
ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
Colors = "5ae59095-9a9b-59fe-a467-6f913c188581"
ComponentArrays = "b0b7db55-cfe3-40fc-9ded-d10e2dbeff66"
Configurations = "5218b696-f38b-4ac9-8b61-a12ec717816d"
Expand Down
76 changes: 52 additions & 24 deletions docs/dev/callstacks.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ function set_coordinates!(graph, nodes_per_depth, max_depth, plot_non_Ribasim)
else
count(i -> graph[i].mod == :Ribasim, nodes)
end
ys = n_nodes == 1 ? [0] : range(-1, 1, length = n_nodes)
ys = n_nodes == 1 ? [0.5] : range(0, 1, length = n_nodes)
idx = 1
for i in nodes
Expand All @@ -205,21 +205,28 @@ function set_coordinates!(graph, nodes_per_depth, max_depth, plot_non_Ribasim)
end
end
function plot_edges!(ax, graph, max_depth, n_points = 25)
for edge in edges(graph)
nm_src = graph[label_for(graph, edge.src)]
nm_dst = graph[label_for(graph, edge.dst)]
function plot_edges!(ax, graph, max_depth, nodes_per_depth; n_points = 25)
for depth in 0:(max_depth - 1)
nodes_at_depth = nodes_per_depth[depth]
n_nodes = length(nodes_at_depth)
for (idx, i) in enumerate(nodes_at_depth)
nm_src = graph[i]
for i_out in outneighbor_labels(graph, i)
nm_dst = graph[i_out]
(nm_dst.depth[] > max_depth) && continue
A = (nm_src.loc[2] - nm_dst.loc[2]) / 2
B = π / (nm_dst.loc[1] - nm_src.loc[1])
C = (nm_src.loc[2] + nm_dst.loc[2]) / 2
A = (nm_src.loc[2] - nm_dst.loc[2]) / 2
B = π / (nm_dst.loc[1] - nm_src.loc[1])
C = (nm_src.loc[2] + nm_dst.loc[2]) / 2
x = range(nm_src.loc[1], nm_dst.loc[1], length = n_points)
y = @. A * cos(B * (x - nm_src.loc[1])) + C
x = range(nm_src.loc[1], nm_dst.loc[1], length = n_points)
y = @. A * cos(B * (x - nm_src.loc[1])) + C
lines!(ax, x, y; color = :black)
color = RGB((0.8 * rand(3))...)
linestyle = (nm_src.file == nm_dst.file) ? :solid : :dash
lines!(ax, x, y; color, linestyle)
end
end
end
end
Expand Down Expand Up @@ -250,7 +257,7 @@ function plot_graph(
squash_methods::Vector{Symbol} = Symbol[],
)
delete!(theme(nothing), :resolution) # Needed because of a refactor in Makie going from resolution to size
f = Figure(; size = size)
f = Figure(; size = size, xlabel = "depth")
ax = Axis(f[1, 1])
graph = copy(graph_orig)
Expand All @@ -259,23 +266,34 @@ function plot_graph(
cut_generated_calls!(graph)
nodes_per_depth = get_node_depths(graph)
max_depth = min(max_depth, maximum(keys(nodes_per_depth)))
# Squash per depth nodes with the same name into one
squash_per_depth && squash!(graph, nodes_per_depth, max_depth, squash_methods)
set_coordinates!(graph, nodes_per_depth, max_depth, plot_non_Ribasim)
plot_edges!(ax, graph, max_depth)
plot_edges!(ax, graph, max_depth, nodes_per_depth)
files = sort(unique(graph[i].file for i in labels(graph) if graph[i].mod == :Ribasim))
colors = distinguishable_colors(length(files)+1)[end:-1:2]
color_dict = OrderedDict(zip(files, colors))
plot_labels!(ax, graph, max_depth, color_dict)
# Build legend
elements = LegendElement[MarkerElement(color = c, marker = :rect) for c in values(color_dict)]
descriptions = String.(files)
push!(elements, LineElement(color = :black, linestyle = :dash))
push!(descriptions, "between scripts")
push!(elements, LineElement(color = :black, linestyle = :solid))
push!(descriptions, "within a script")
Legend(
f[1,2],
[MarkerElement(color = c, marker = :rect) for c in values(color_dict)],
String.(files)
elements,
descriptions
)
f
Expand All @@ -284,6 +302,9 @@ end
#############################################
using Ribasim
using Random
Random.seed!(1)
```

## Parameter initialization
Expand All @@ -301,7 +322,7 @@ close(db)
plot_graph(
graph;
size = (1500, 1200),
size = (1800, 1200),
squash_methods = [
:n_neighbor_bounds_flow,
:n_neighbor_bounds_control,
Expand All @@ -320,14 +341,21 @@ model = Ribasim.Model(toml_path)
du = get_du(model.integrator)
(; u, p, t) = model.integrator
graph, verts = tracecall((Ribasim,), Ribasim.water_balance!, (du, u, p, t))
plot_graph(graph)
plot_graph(graph, size = (1600, 1000))
```

## Allocation initialization
```{julia}
# TODO:
# - Fix y coordinate of nodes that have no outneighbors
# - Remove nodes (and everything downstream) from non-Ribasim calls
# - Color boxes by file name and add legend
# - Add boxes around names
# - Let connection lines emerge from box boundaries
# | code-fold: true
toml_path = normpath(@__DIR__, "../../generated_testmodels/main_network_with_subnetworks/ribasim.toml")
model = Ribasim.Model(toml_path)
# graph, verts = tracecall((Ribasim,), Ribasim.initialize_allocation!, (model.integrator.p, model.config))
# plot_graph(graph)
```

## Allocation run
```{julia}
# | code-fold: true
graph, verts = tracecall((Ribasim,), Ribasim.update_allocation!, (model.integrator,))
plot_graph(graph, size = (1600, 1000))
```

0 comments on commit 3f4a9ec

Please sign in to comment.