annotate ext/SbplibMakieExt.jl @ 1655:51f23a0b07fa feature/sbp_operators/laplace_curvilinear

Add inner product and inverse inner product for mapped grids
author Jonatan Werpers <jonatan@werpers.com>
date Wed, 26 Jun 2024 15:15:32 +0200
parents 6a898e9bce62
children e2e468c45ed6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1583
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 module SbplibMakieExt
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 using Sbplib.Grids
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 using Makie
1626
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
5 using StaticArrays
1583
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 function verticies_and_faces_and_values(g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2})
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 ps = map(Tuple, g)[:]
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 values = gf[:]
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 N = length(ps)
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 faces = Vector{NTuple{3,Int}}()
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 n,m = size(g)
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 Li = LinearIndices((1:n, 1:m))
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 for i ∈ 1:n-1, j = 1:m-1
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 # Add point in the middle of the patch to preserve symmetries
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 push!(ps, Tuple((g[i,j] + g[i+1,j] + g[i+1,j+1] + g[i,j+1])/4))
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22 push!(values, (gf[i,j] + gf[i+1,j] + gf[i+1,j+1] + gf[i,j+1])/4)
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 push!(faces, (Li[i,j], Li[i+1,j], length(ps)))
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 push!(faces, (Li[i+1,j], Li[i+1,j+1], length(ps)))
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 push!(faces, (Li[i+1,j+1], Li[i,j+1], length(ps)))
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 push!(faces, (Li[i,j+1], Li[i,j], length(ps)))
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 end
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 verticies = permutedims(reinterpret(reshape,eltype(eltype(ps)), ps))
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 faces = permutedims(reinterpret(reshape,Int, faces))
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 return verticies, faces, values
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 end
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36
1632
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
37 ## Grids
1626
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
38
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
39 Makie.convert_arguments(::Type{<:Scatter}, g::Grid) = (reshape(map(Point,g),:),) # (map(Point,collect(g)[:]),)
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
40 function Makie.convert_arguments(::Type{<:Lines}, g::Grid{<:Any,2})
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
41 M = collect(g)
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
42
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
43 function cat_with_NaN(a,b)
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
44 vcat(a,[@SVector[NaN,NaN]],b)
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
45 end
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
46
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
47 xlines = reduce(cat_with_NaN, eachrow(M))
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
48 ylines = reduce(cat_with_NaN, eachcol(M))
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
49
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
50 return (cat_with_NaN(xlines,ylines),)
1583
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 end
1626
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
52
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
53 Makie.plot!(plot::Plot(Grid{<:Any,2})) = lines!(plot, plot.attributes, plot[1])
1632
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
54
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
55
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
56 ## Grid functions
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
57
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
58 ### 1D
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
59 function Makie.convert_arguments(::Type{<:Lines}, g::Grid{<:Any,1}, gf::AbstractArray{<:Any, 1})
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
60 (collect(g), gf)
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
61 end
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
62
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
63 function Makie.convert_arguments(::Type{<:Scatter}, g::Grid{<:Any,1}, gf::AbstractArray{<:Any, 1})
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
64 (collect(g), gf)
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
65 end
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
66
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
67 Makie.plot!(plot::Plot(Grid{<:Any,1}, AbstractArray{<:Any,1})) = lines!(plot, plot.attributes, plot[1], plot[2])
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
68
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
69 ### 2D
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
70 function Makie.convert_arguments(::Type{<:Surface}, g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2})
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
71 (getindex.(g,1), getindex.(g,2), gf)
1626
bf5927631b21 Add attempt at proper makie recipes for plotting a grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 1583
diff changeset
72 end
1632
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
73
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
74 function Makie.plot!(plot::Plot(Grid{<:Any,2},AbstractArray{<:Any, 2}))
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
75 r = @lift verticies_and_faces_and_values($(plot[1]), $(plot[2]))
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
76 v,f,c = (@lift $r[1]), (@lift $r[2]), (@lift $r[3])
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
77 mesh!(plot, plot.attributes, v, f;
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
78 color=c,
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
79 shading = NoShading,
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
80 )
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
81 end
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
82 # TBD: Can we define `mesh` instead of the above function and then forward plot! to that?
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
83
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
84 function Makie.convert_arguments(::Type{<:Scatter}, g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2})
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
85 ps = map(g,gf) do (x,y), z
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
86 @SVector[x,y,z]
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
87 end
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
88 (reshape(ps,:),)
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
89 end
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
90
6a898e9bce62 Fix Makie recipes for plotting grids and grid functions
Jonatan Werpers <jonatan@werpers.com>
parents: 1626
diff changeset
91 end