comparison diffOp.jl @ 62:17b971a0b852 cell_based_test

Inline all the things
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 17 Jan 2019 10:53:12 +0100
parents 7ab0043aca53
children
comparison
equal deleted inserted replaced
60:7ab0043aca53 62:17b971a0b852
36 function apply!(D::DiffOp, u::AbstractVector, v::AbstractVector) 36 function apply!(D::DiffOp, u::AbstractVector, v::AbstractVector)
37 li = LinearIndices(D.grid.numberOfPointsPerDim) 37 li = LinearIndices(D.grid.numberOfPointsPerDim)
38 38
39 Nx, Ny = D.grid.numberOfPointsPerDim 39 Nx, Ny = D.grid.numberOfPointsPerDim
40 40
41 h = Grid.spacings(D.grid)
42 li = LinearIndices(D.grid.numberOfPointsPerDim)
43 ci = CartesianIndices(D.grid.numberOfPointsPerDim)
44 is = D.op.innerStencil
41 for i ∈ view(li, 5:Nx-4, 5:Ny-4) 45 for i ∈ view(li, 5:Nx-4, 5:Ny-4)
42 u[i] = apply(D, v, i) 46 I = ci[i]
47
48
49 u[i] = zero(eltype(v))
50 for j ∈ is.range[1]:is.range[2]
51 u[i] += is[j]*v[(I[2]-1)*Nx - 1 + I[1]+j]/h[1]^2
52 end
53
54 for j ∈ is.range[1]:is.range[2]
55 u[i] += is[j]*v[(I[2]-1)*Nx - 1 + I[1]+ j*Nx]/h[2]^2
56 end
43 end 57 end
44 58
45 return nothing 59 return nothing
46 end 60 end
47 61
79 93
80 li = LinearIndices(L.grid.numberOfPointsPerDim) 94 li = LinearIndices(L.grid.numberOfPointsPerDim)
81 ci = CartesianIndices(L.grid.numberOfPointsPerDim) 95 ci = CartesianIndices(L.grid.numberOfPointsPerDim)
82 I = ci[i] 96 I = ci[i]
83 97
84 # 2nd x-derivative 98 uᵢ = apply(L.op.innerStencil, view(v, li[:,I[2]]), I[1])/h[1]^2
85 uᵢ = apply(L.op, h[1], view(v, li[:,I[2]]), I[1]) 99 uᵢ += apply(L.op.innerStencil, view(v, li[I[1],:]), I[2])/h[2]^2
86 # 2nd y-derivative
87 uᵢ += apply(L.op, h[2], view(v, li[I[1],:]), I[2])
88 100
89 return uᵢ 101 return uᵢ
90 end 102 end