Mercurial > repos > public > sbplib_julia
comparison DiffOps/src/laplace.jl @ 242:9819243102dd boundary_conditions
Add test for and fix apply(::BoundaryValue)
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 26 Jun 2019 20:24:21 +0200 |
parents | 60011a10e17d |
children | a827568fc251 |
comparison
equal
deleted
inserted
replaced
241:1128ab4f5758 | 242:9819243102dd |
---|---|
10 end | 10 end |
11 export NormalDerivative | 11 export NormalDerivative |
12 | 12 |
13 # Not correct abstraction level | 13 # Not correct abstraction level |
14 # TODO: Not type stable D:< | 14 # TODO: Not type stable D:< |
15 function apply(d::NormalDerivative, v::AbstractArray, I::NTuple{2,Int}) | 15 function LazyTensors.apply(d::NormalDerivative, v::AbstractArray, I::NTuple{2,Int}) |
16 i = I[dim(d.bId)] | 16 i = I[dim(d.bId)] |
17 j = I[3-dim(d.bId)] | 17 j = I[3-dim(d.bId)] |
18 N_i = d.grid.size[dim(d.bId)] | 18 N_i = d.grid.size[dim(d.bId)] |
19 | 19 |
20 r = getregion(i, closureSize(d.op), N_i) | 20 r = getregion(i, closureSize(d.op), N_i) |
29 elseif r == Upper | 29 elseif r == Upper |
30 return d.grid.inverse_spacing[dim(d.bId)]*d.op.dClosure[N_i-j]*v[j] | 30 return d.grid.inverse_spacing[dim(d.bId)]*d.op.dClosure[N_i-j]*v[j] |
31 end | 31 end |
32 end | 32 end |
33 | 33 |
34 function apply_transpose(d::NormalDerivative, v::AbstractArray, I::NTuple{1,Int}) | 34 function LazyTensors.apply_transpose(d::NormalDerivative, v::AbstractArray, I::NTuple{1,Int}) |
35 u = selectdim(v,3-dim(d.bId),I) | 35 u = selectdim(v,3-dim(d.bId),I) |
36 return apply_d(d.op, d.grid.inverse_spacing[dim(d.bId)], u, region(d.bId)) | 36 return apply_d(d.op, d.grid.inverse_spacing[dim(d.bId)], u, region(d.bId)) |
37 end | 37 end |
38 | 38 |
39 | 39 |
55 LazyTensors.domain_size(e::BoundaryValue{T}, range_size::NTuple{2,Integer}) where T = (range_size[3-dim(e.bId)],); | 55 LazyTensors.domain_size(e::BoundaryValue{T}, range_size::NTuple{2,Integer}) where T = (range_size[3-dim(e.bId)],); |
56 | 56 |
57 function LazyTensors.apply(e::BoundaryValue, v::AbstractArray, I::NTuple{2,Int}) | 57 function LazyTensors.apply(e::BoundaryValue, v::AbstractArray, I::NTuple{2,Int}) |
58 i = I[dim(e.bId)] | 58 i = I[dim(e.bId)] |
59 j = I[3-dim(e.bId)] | 59 j = I[3-dim(e.bId)] |
60 N_i = e.grid.size[dim(e.bId)] | 60 N_i = size(e.grid)[dim(e.bId)] |
61 | 61 |
62 r = getregion(i, closureSize(e.op), N_i) | 62 if region(e.bId) == Lower |
63 | 63 # NOTE: closures are indexed by offset. Fix this D:< |
64 if r != region(e.bId) | |
65 return 0 | |
66 end | |
67 | |
68 if r == Lower | |
69 # Note, closures are indexed by offset. Fix this D:< | |
70 return e.op.eClosure[i-1]*v[j] | 64 return e.op.eClosure[i-1]*v[j] |
71 elseif r == Upper | 65 elseif region(e.bId) == Upper |
72 return e.op.eClosure[N_i-j]*v[j] | 66 return e.op.eClosure[N_i-i]*v[j] |
73 end | 67 end |
74 end | 68 end |
75 | 69 |
76 function LazyTensors.apply_transpose(e::BoundaryValue, v::AbstractArray, I::NTuple{1,Int}) | 70 function LazyTensors.apply_transpose(e::BoundaryValue, v::AbstractArray, I::NTuple{1,Int}) |
77 u = selectdim(v,3-dim(e.bId),I[1]) | 71 u = selectdim(v,3-dim(e.bId),I[1]) |