Mercurial > repos > public > sbplib_julia
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 |
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) |