Mercurial > repos > public > sbplib_julia
changeset 273:babc4288e6a6 boundary_conditions
Dispatch apply(Quadrature) etc on region indices and create utility wrapper function dispatching on standard ints
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Mon, 06 Jan 2020 10:48:38 +0100 |
parents | 51e7de109c25 |
children | 11010bb74260 |
files | DiffOps/src/laplace.jl |
diffstat | 1 files changed, 12 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/DiffOps/src/laplace.jl Thu Dec 05 11:57:39 2019 +0100 +++ b/DiffOps/src/laplace.jl Mon Jan 06 10:48:38 2020 +0100 @@ -52,8 +52,7 @@ LazyTensors.domain_size(H::Quadrature{2}, range_size::NTuple{2,Integer}) where T = size(H.grid) # TODO: Dispatch on Tuple{Index{R1},Index{R2}}? -@inline function LazyTensors.apply(H::Quadrature{2}, v::AbstractArray{T,2} where T, I::NTuple{2,Integer}) - I = CartesianIndex(I); +@inline function LazyTensors.apply(H::Quadrature{2}, v::AbstractArray{T,2} where T, I::Tuple{Index{R1}, Index{R2}}) where {R1, R2} N = size(H.grid) # Quadrature in x direction @inbounds q = apply_quadrature(H.op, spacing(H.grid)[1], v[I] , I[1], N[1]) @@ -62,7 +61,17 @@ return q end -LazyTensors.apply_transpose(H::Quadrature{2}, v::AbstractArray{T,2} where T, I::NTuple{2,Integer}) = LazyTensors.apply(H,v,I) +function LazyTensors.apply(H::Quadrature{2}, v::AbstractArray{T,2} where T, i::NTuple{2,Integer}) + I = Index{Unknown}.(i) + LazyTensors.apply(H, v, I) +end + +LazyTensors.apply_transpose(H::Quadrature{2}, v::AbstractArray{T,2} where T, I::Tuple{Index{R1}, Index{R2}} where {R1, R2}) = LazyTensors.apply(H,v,I) + +function LazyTensors.apply_transpose(H::Quadrature{2}, v::AbstractArray{T,2} where T, i::NTuple{2,Integer}) + I = Index{Unknown}.(i) + LazyTensors.apply_transpose(H, v, I) +end """ InverseQuadrature{Dim,T<:Real,N,M,K} <: TensorMapping{T,Dim,Dim}