Mercurial > repos > public > sbplib_julia
annotate diffOp.jl @ 56:27a8d3021a1c cell_based_test
Convert apply functions to cell-based
| author | Ylva Rydin <ylva.rydin@telia.com> |
|---|---|
| date | Tue, 15 Jan 2019 12:26:06 +0100 |
| parents | c62ea0112d4d |
| children | 178a203f3e6d |
| rev | line source |
|---|---|
|
2
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
1 abstract type DiffOp end |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
2 |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
3 function apply(D::DiffOp, v::AbstractVector, i::Int) |
|
2
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
4 error("not implemented") |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
5 end |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
6 |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
7 function innerProduct(D::DiffOp, u::AbstractVector, v::AbstractVector)::Real |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
8 error("not implemented") |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
9 end |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
10 |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
11 function matrixRepresentation(D::DiffOp) |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
12 error("not implemented") |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
13 end |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
14 |
|
55
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
15 function boundaryCondition(D::DiffOp,b::Grid.BoundaryId,type)::(Closure, Penalty) |
|
2
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
16 error("not implemented") |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
17 end |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
18 |
|
54
4300a3fbd818
switch grid to Grid in diffOp
Ylva Rydin <ylva.rydin@telia.com>
parents:
49
diff
changeset
|
19 function interface(Du::DiffOp, Dv::DiffOp, b::Grid.BoundaryId; type) |
|
2
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
20 error("not implemented") |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
21 end |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
22 |
|
55
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
23 abstract type Closure end |
|
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
24 |
|
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
25 function apply(c::Closure, v::AbstractVector, i::Int) |
|
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
26 error("not implemented") |
|
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
27 end |
|
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
28 |
|
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
29 abstract type Penalty end |
|
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
30 |
|
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
31 function apply(c::Penalty, g, i::Int) |
|
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
32 error("not implemented") |
|
c62ea0112d4d
Add abstract types for Closure and Penalty
Ylva Rydin <ylva.rydin@telia.com>
parents:
54
diff
changeset
|
33 end |
|
2
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
34 |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
35 # DiffOp must have a grid!!! |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
36 function apply!(D::DiffOp, u::AbstractVector, v::AbstractVector) |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
37 for i ∈ 1:Grid.numberOfPoints(D.grid) |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
38 u[i] = apply(D, v, i) |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
39 end |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
40 |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
41 return nothing |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
42 end |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
43 |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
44 function apply(D::DiffOp, v::AbstractVector)::AbstractVector |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
45 u = zeros(eltype(v), size(v)) |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
46 apply!(D,v,u) |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
47 return u |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
48 end |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
49 |
|
2
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
50 # Differential operator for a*d^2/dx^2 |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
51 struct Laplace1D <: DiffOp |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
52 grid |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
53 a |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
54 op |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
55 end |
|
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
56 |
|
6
cb8e50ca9e15
Add attempt att apply methods for Laplace
Jonatan Werpers <jonatan@werpers.com>
parents:
2
diff
changeset
|
57 # u = L*v |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
58 function apply(L::Laplace1D, v::AbstractVector, i::Int) |
|
54
4300a3fbd818
switch grid to Grid in diffOp
Ylva Rydin <ylva.rydin@telia.com>
parents:
49
diff
changeset
|
59 h = Grid.spacings(L.grid)[1] |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
60 uᵢ = L.a * apply(L.op, h, v, i) |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
61 return uᵢ |
|
2
43be32298ae2
Add function to get closure size
Jonatan Werpers <jonatan@werpers.com>
parents:
0
diff
changeset
|
62 end |
| 49 | 63 |
| 64 | |
| 65 # Differential operator for a*d^2/dx^2 + a*d^2/dy^2 | |
| 66 struct Laplace2D <: DiffOp | |
| 67 grid | |
| 68 a | |
| 69 op | |
| 70 end | |
| 71 | |
| 72 # u = L*v | |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
73 function apply(L::Laplace2D, v::AbstractVector, i::Int) |
|
54
4300a3fbd818
switch grid to Grid in diffOp
Ylva Rydin <ylva.rydin@telia.com>
parents:
49
diff
changeset
|
74 h = Grid.spacings(L.grid) |
| 49 | 75 |
| 76 li = LinearIndices(L.grid.numberOfPointsPerDim) | |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
77 ci = CartesianIndices(L.grid.numberOfPointsPerDim) |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
78 I = ci[i] |
| 49 | 79 |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
80 # 2nd x-derivative |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
81 uᵢ = apply(L.op, h[1], view(v, li[:,I[2]]), I[1]) |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
82 # 2nd y-derivative |
|
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
83 uᵢ += apply(L.op, h[2], view(v, li[I[1],:]), I[2]) |
| 49 | 84 |
|
56
27a8d3021a1c
Convert apply functions to cell-based
Ylva Rydin <ylva.rydin@telia.com>
parents:
55
diff
changeset
|
85 return uᵢ |
| 49 | 86 end |
