Mercurial > repos > public > sbplib_julia
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 |