Mercurial > repos > public > sbplib_julia
changeset 173:fabd475bb258 boundary_conditions
Move definition of BoundaryValue before definition of Laplace
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 21 May 2019 16:31:19 +0200 |
parents | a8bc71608588 |
children | 187295479984 |
files | diffOp.jl |
diffstat | 1 files changed, 31 insertions(+), 31 deletions(-) [+] |
line wrap: on
line diff
--- a/diffOp.jl Tue May 21 16:27:15 2019 +0200 +++ b/diffOp.jl Tue May 21 16:31:19 2019 +0200 @@ -130,11 +130,41 @@ end end +struct BoundaryValue{N,M,K} + op::D2{Float64,N,M,K} + grid::EquidistantGrid + bId::CartesianBoundary +end + +function apply(e::BoundaryValue, v::AbstractArray, I::Tuple{Integer,Integer}) + i = I[dim(e.bId)] + j = I[3-dim(e.bId)] + N_i = e.grid.size[dim(e.bId)] + + r = getregion(i, closureSize(e.op), N_i) + + if r != region(e.bId) + return 0 + end + + if r == Lower + # Note, closures are indexed by offset. Fix this D:< + return e.op.eClosure[i-1]*v[j] + elseif r == Upper + return e.op.eClosure[N_i-j]*v[j] + end +end + +function apply_transpose(e::BoundaryValue, v::AbstractArray, I::Integer) + u = selectdim(v,3-dim(e.bId),I) + return apply_e(e.op, u, region(e.bId)) +end + struct Laplace{Dim,T<:Real,N,M,K} <: DiffOpCartesian{Dim} grid::EquidistantGrid{Dim,T} a::T op::D2{Float64,N,M,K} - # e::BoundaryValue + e::BoundaryValue d::NormalDerivative end @@ -168,36 +198,6 @@ end -struct BoundaryValue{N,M,K} - op::D2{Float64,N,M,K} - grid::EquidistantGrid - bId::CartesianBoundary -end - -function apply(e::BoundaryValue, v::AbstractArray, I::Tuple{Integer,Integer}) - i = I[dim(e.bId)] - j = I[3-dim(e.bId)] - N_i = e.grid.size[dim(e.bId)] - - r = getregion(i, closureSize(e.op), N_i) - - if r != region(e.bId) - return 0 - end - - if r == Lower - # Note, closures are indexed by offset. Fix this D:< - return e.op.eClosure[i-1]*v[j] - elseif r == Upper - return e.op.eClosure[N_i-j]*v[j] - end -end - -function apply_transpose(e::BoundaryValue, v::AbstractArray, I::Integer) - u = selectdim(v,3-dim(e.bId),I) - return apply_e(e.op, u, region(e.bId)) -end - """ A BoundaryCondition should implement the method