annotate benchmarks/laplace_benchmark.jl @ 876:4f3924293894 laplace_benchmarks

Add examples and benchmarks folders
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Thu, 27 Jan 2022 11:00:31 +0100
parents laplace_benchmark.jl@9929c99754fb
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
873
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
1 using Sbplib.Grids, Sbplib.SbpOperators, Sbplib.LazyTensors, Sbplib.RegionIndices
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
2 using Profile, BenchmarkTools
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
3
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
4 function apply_laplace!(f, u, L, inds)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
5 for I in inds
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
6 f[I] = (L*u)[I]
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
7 end
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
8 end
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
9
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
10 apply_laplace!(f, u, L) = apply_laplace!(f, u, L, eachindex(u))
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
11
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
12 region_indices(L, N, ::Lower) = map(x->Index{Lower}(x),1:closure_size(L))
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
13 region_indices(L, N, ::Interior) = map(x->Index{Interior}(x),closure_size(L)+1:N-closure_size(L))
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
14 region_indices(L, N, ::Upper) = map(x->Index{Upper}(x),N-closure_size(L)+1:N)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
15
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
16 function get_region_indices(L,N)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
17 ind_lower = region_indices(L, N, Lower())
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
18 ind_interior = region_indices(L, N, Interior())
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
19 ind_upper = region_indices(L, N, Upper())
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
20 return (ind_lower, ind_interior, ind_upper)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
21 end
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
22
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
23 function apply_laplace_regions!(f, u, L, region_inds)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
24 apply_laplace!(f, u, L, region_inds[1])
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
25 apply_laplace!(f, u, L, region_inds[2])
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
26 apply_laplace!(f, u, L, region_inds[3])
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
27 end
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
28
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
29 # Domain
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
30 N = 4001
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
31 g = EquidistantGrid(N,0.,1.)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
32
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
33 # Operators
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
34 L = Laplace(g,sbp_operators_path()*"standard_diagonal.toml"; order=4)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
35 u = evalOn(g,x->x^2)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
36 f = similar(u)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
37
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
38 apply_laplace!(f,u,L) #ensure compilation
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
39 @btime apply_laplace!(f,u,L)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
40 rinds = get_region_indices(L,N)
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
41 apply_laplace_regions!(f,u,L,rinds) #ensure compilation
9929c99754fb Add some benchmarks using the Laplace Operator Set
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
42 @btime apply_laplace_regions!(f,u,L,rinds)