annotate ext/SbplibMakieExt.jl @ 1647:0685d97ebcb0 feature/sbp_operators/laplace_curvilinear

Start adding test for laplace on mapped grid
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 02 May 2024 14:48:03 +0200
parents 2a9ec1e2abad
children bf5927631b21
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
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5
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 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
8 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
9 values = gf[:]
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 N = length(ps)
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 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
14
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 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
16 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
17 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
18
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 # 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
20 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
21 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
22
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 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
24 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
25 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
26 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
27 end
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 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
30 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
31
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 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
33 end
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34
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 function make_plot(g,gf)
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 v,f,c = verticies_and_faces_and_values(g,gf)
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 mesh(v,f,color=c,
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 shading = NoShading,
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 )
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 end
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 # scatter(collect(g)[:])
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 function Makie.surface(g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2}; kwargs...)
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 surface(getindex.(g,1), getindex.(g,2), gf;
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 shading = NoShading,
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 kwargs...,
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 )
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 end
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 function Makie.mesh(g::Grid{<:Any,2}, gf::AbstractArray{<:Any, 2}; kwargs...)
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 v,f,c = verticies_and_faces_and_values(g, gf)
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54 mesh(v,f,color=c,
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 shading = NoShading,
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 kwargs...,
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 )
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 end
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 function Makie.plot!(plot::Plot(Grid{<:Any,2},AbstractArray{<:Any, 2}))
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 # TODO: How to handle kwargs?
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 # v,f,c = verticies_and_faces_and_values(plot[1], plot[2])
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 r = @lift verticies_and_faces_and_values($(plot[1]), $(plot[2]))
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 v,f,c = (@lift $r[1]), (@lift $r[2]), (@lift $r[3])
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 mesh!(plot, v, f, color=c,
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 shading = NoShading,
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 )
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 end
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 Makie.convert_arguments(::Type{<:Scatter}, g::Grid) = (map(Tuple,collect(g)[:]),)
2a9ec1e2abad Add package extensions for Makie and Plots to plot grids and charts
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 end