comparison DiffOps/src/laplace.jl @ 245:d9e262cb2e8d boundary_conditions

Rename apply_e and _d to _e_T and _d_T. Implement _e _d and using them in laplace.jl
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 27 Jun 2019 12:49:58 +0200
parents a827568fc251
children 3d83b4d78b55 05e7bbe0af97
comparison
equal deleted inserted replaced
244:a827568fc251 245:d9e262cb2e8d
20 function LazyTensors.apply(d::NormalDerivative, v::AbstractArray, I::NTuple{2,Int}) 20 function LazyTensors.apply(d::NormalDerivative, v::AbstractArray, I::NTuple{2,Int})
21 i = I[dim(d.bId)] 21 i = I[dim(d.bId)]
22 j = I[3-dim(d.bId)] 22 j = I[3-dim(d.bId)]
23 N_i = size(d.grid)[dim(d.bId)] 23 N_i = size(d.grid)[dim(d.bId)]
24 24
25 if region(d.bId) == Lower 25 h_inv = d.grid.inverse_spacing[dim(d.bId)]
26 # Note, closures are indexed by offset. Fix this D:< 26 return apply_d(d.op, h_inv, v[j], N_i, i, region(d.bId))
27 return d.grid.inverse_spacing[dim(d.bId)]*d.op.dClosure[i-1]*v[j]
28 elseif region(d.bId) == Upper
29 return -d.grid.inverse_spacing[dim(d.bId)]*d.op.dClosure[N_i-i]*v[j]
30 end
31 end 27 end
32 28
33 function LazyTensors.apply_transpose(d::NormalDerivative, v::AbstractArray, I::NTuple{1,Int}) 29 function LazyTensors.apply_transpose(d::NormalDerivative, v::AbstractArray, I::NTuple{1,Int})
34 u = selectdim(v,3-dim(d.bId),I[1]) 30 u = selectdim(v,3-dim(d.bId),I[1])
35 return apply_d(d.op, d.grid.inverse_spacing[dim(d.bId)], u, region(d.bId)) 31 return apply_d_T(d.op, d.grid.inverse_spacing[dim(d.bId)], u, region(d.bId))
36 end 32 end
37 33
38 34
39 """ 35 """
40 BoundaryValue{T,N,M,K} <: TensorMapping{T,2,1} 36 BoundaryValue{T,N,M,K} <: TensorMapping{T,2,1}
56 function LazyTensors.apply(e::BoundaryValue, v::AbstractArray, I::NTuple{2,Int}) 52 function LazyTensors.apply(e::BoundaryValue, v::AbstractArray, I::NTuple{2,Int})
57 i = I[dim(e.bId)] 53 i = I[dim(e.bId)]
58 j = I[3-dim(e.bId)] 54 j = I[3-dim(e.bId)]
59 N_i = size(e.grid)[dim(e.bId)] 55 N_i = size(e.grid)[dim(e.bId)]
60 56
61 if region(e.bId) == Lower 57 return apply_e(e.op, v[j], N_i, i, region(e.bId))
62 # NOTE: closures are indexed by offset. Fix this D:<
63 return e.op.eClosure[i-1]*v[j]
64 elseif region(e.bId) == Upper
65 return e.op.eClosure[N_i-i]*v[j]
66 end
67 end 58 end
68 59
69 function LazyTensors.apply_transpose(e::BoundaryValue, v::AbstractArray, I::NTuple{1,Int}) 60 function LazyTensors.apply_transpose(e::BoundaryValue, v::AbstractArray, I::NTuple{1,Int})
70 u = selectdim(v,3-dim(e.bId),I[1]) 61 u = selectdim(v,3-dim(e.bId),I[1])
71 return apply_e(e.op, u, region(e.bId)) 62 return apply_e_T(e.op, u, region(e.bId))
72 end 63 end
73 64
74 65
75 66
76 struct Laplace{Dim,T<:Real,N,M,K} <: DiffOpCartesian{Dim} 67 struct Laplace{Dim,T<:Real,N,M,K} <: DiffOpCartesian{Dim}