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}