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 |
