comparison DiffOps/src/laplace.jl @ 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 ccef055233a2
children fe9e8737ddfa
comparison
equal deleted inserted replaced
272:51e7de109c25 273:babc4288e6a6
50 50
51 LazyTensors.range_size(H::Quadrature{2}, domain_size::NTuple{2,Integer}) where T = size(H.grid) 51 LazyTensors.range_size(H::Quadrature{2}, domain_size::NTuple{2,Integer}) where T = size(H.grid)
52 LazyTensors.domain_size(H::Quadrature{2}, range_size::NTuple{2,Integer}) where T = size(H.grid) 52 LazyTensors.domain_size(H::Quadrature{2}, range_size::NTuple{2,Integer}) where T = size(H.grid)
53 53
54 # TODO: Dispatch on Tuple{Index{R1},Index{R2}}? 54 # TODO: Dispatch on Tuple{Index{R1},Index{R2}}?
55 @inline function LazyTensors.apply(H::Quadrature{2}, v::AbstractArray{T,2} where T, I::NTuple{2,Integer}) 55 @inline function LazyTensors.apply(H::Quadrature{2}, v::AbstractArray{T,2} where T, I::Tuple{Index{R1}, Index{R2}}) where {R1, R2}
56 I = CartesianIndex(I);
57 N = size(H.grid) 56 N = size(H.grid)
58 # Quadrature in x direction 57 # Quadrature in x direction
59 @inbounds q = apply_quadrature(H.op, spacing(H.grid)[1], v[I] , I[1], N[1]) 58 @inbounds q = apply_quadrature(H.op, spacing(H.grid)[1], v[I] , I[1], N[1])
60 # Quadrature in y-direction 59 # Quadrature in y-direction
61 @inbounds q = apply_quadrature(H.op, spacing(H.grid)[2], q, I[2], N[2]) 60 @inbounds q = apply_quadrature(H.op, spacing(H.grid)[2], q, I[2], N[2])
62 return q 61 return q
63 end 62 end
64 63
65 LazyTensors.apply_transpose(H::Quadrature{2}, v::AbstractArray{T,2} where T, I::NTuple{2,Integer}) = LazyTensors.apply(H,v,I) 64 function LazyTensors.apply(H::Quadrature{2}, v::AbstractArray{T,2} where T, i::NTuple{2,Integer})
65 I = Index{Unknown}.(i)
66 LazyTensors.apply(H, v, I)
67 end
68
69 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)
70
71 function LazyTensors.apply_transpose(H::Quadrature{2}, v::AbstractArray{T,2} where T, i::NTuple{2,Integer})
72 I = Index{Unknown}.(i)
73 LazyTensors.apply_transpose(H, v, I)
74 end
66 75
67 """ 76 """
68 InverseQuadrature{Dim,T<:Real,N,M,K} <: TensorMapping{T,Dim,Dim} 77 InverseQuadrature{Dim,T<:Real,N,M,K} <: TensorMapping{T,Dim,Dim}
69 78
70 Implements the inverse quadrature operator `inv(H)` of Dim dimension as a TensorMapping 79 Implements the inverse quadrature operator `inv(H)` of Dim dimension as a TensorMapping