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]) |
