Mercurial > repos > public > sbplib_julia
changeset 49:947f7579ba9c
Add Laplace2d
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 11 Jan 2019 11:16:37 +0100 |
parents | be53b58581a6 |
children | 2a7d0ed7ac10 |
files | diffOp.jl |
diffstat | 1 files changed, 41 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/diffOp.jl Fri Jan 11 11:16:22 2019 +0100 +++ b/diffOp.jl Fri Jan 11 11:16:37 2019 +0100 @@ -35,3 +35,44 @@ u .= L.a * u return nothing end + + +# Differential operator for a*d^2/dx^2 + a*d^2/dy^2 +struct Laplace2D <: DiffOp + grid + a + op +end + +# u = L*v +function apply!(L::Laplace2D, u::AbstractVector, v::AbstractVector) + u .= 0*u + h = grid.spacings(L.grid) + + li = LinearIndices(L.grid.numberOfPointsPerDim) + n_x, n_y = L.grid.numberOfPointsPerDim + + + # For each x + temp = zeros(eltype(u), n_y) + for i ∈ 1:n_x + + v_i = view(v, li[i,:]) + apply!(L.op, temp, v_i, h[2]) + + u[li[i,:]] += temp + end + + # For each y + temp = zeros(eltype(u), n_x) + for i ∈ 1:n_y + v_i = view(v, li[:,i]) + apply!(L.op, temp, v_i, h[1]) + + u[li[:,i]] += temp + end + + u .= L.a*u + + return nothing +end