Mercurial > repos > public > sbplib_julia
view diffOp.jl @ 33:e8d7137b3f07
Raname apply(DiffOp) to apply!(DiffOp)
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 10 Jan 2019 14:46:15 +0100 |
parents | f2842e08d813 |
children | bb841977d198 |
line wrap: on
line source
abstract type DiffOp end function apply!(D::DiffOp, u::AbstractVector, v::AbstractVector) error("not implemented") end function innerProduct(D::DiffOp, u::AbstractVector, v::AbstractVector)::Real error("not implemented") end function matrixRepresentation(D::DiffOp) error("not implemented") end function boundaryCondition(D::DiffOp) error("not implemented") end function interface(Du::DiffOp, Dv::DiffOp, b::grid.BoundaryId; type) error("not implemented") end # Differential operator for a*d^2/dx^2 struct Laplace1D <: DiffOp grid a op end # u = L*v function apply!(L::Laplace1D, u::AbstractVector, v::AbstractVector) N = closureSize(L.op) M = length(v) h = scaling(L.grid) for i ∈ 1:N u[i] = apply(L.op.closureStencils[i], v, i)/h^2 end for i ∈ N+1:M-N u[i] = apply(L.op.innerStencil, i)/h^2 end for i ∈ M:-1:M-N+1 u[i] = apply(flip(L.op.closureStencils[M-i+1]), v, i)/h^2 end return nothing end