comparison src/SbpOperators/quadrature/inverse_quadrature.jl @ 370:8e55dee6a1a1

Merge branch refactor/remove_dynamic_size_tensormapping
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 28 Sep 2020 22:56:54 +0200
parents 0546cb279fc2
children 011ca1639153
comparison
equal deleted inserted replaced
366:0af6da238d95 370:8e55dee6a1a1
1 export InverseQuadrature 1 export InverseQuadrature
2 """ 2 """
3 InverseQuadrature{Dim,T<:Real,M,K} <: TensorMapping{T,Dim,Dim} 3 InverseQuadrature{Dim,T<:Real,M,K} <: TensorMapping{T,Dim,Dim}
4 4
5 Implements the inverse quadrature operator `Qi` of Dim dimension as a TensorOperator 5 Implements the inverse quadrature operator `Qi` of Dim dimension as a TensorMapping
6 The multi-dimensional tensor operator consists of a tuple of 1D InverseDiagonalInnerProduct 6 The multi-dimensional tensor operator consists of a tuple of 1D InverseDiagonalInnerProduct
7 tensor operators. 7 tensor operators.
8 """ 8 """
9 struct InverseQuadrature{Dim,T<:Real,M} <: TensorOperator{T,Dim} 9 struct InverseQuadrature{Dim,T<:Real,M} <: TensorMapping{T,Dim,Dim}
10 Hi::NTuple{Dim,InverseDiagonalInnerProduct{T,M}} 10 Hi::NTuple{Dim,InverseDiagonalInnerProduct{T,M}}
11 end 11 end
12
13
14 function InverseQuadrature(g::EquidistantGrid{Dim}, quadratureClosure) where Dim
15 Hi = ()
16 for i ∈ 1:Dim
17 Hi = (Hi..., InverseDiagonalInnerProduct(restrict(g,i), quadratureClosure))
18 end
19
20 return InverseQuadrature(Hi)
21 end
22
23 LazyTensors.range_size(Hi::InverseQuadrature) = getindex.(range_size.(Hi.Hi),1)
24 LazyTensors.domain_size(Hi::InverseQuadrature) = getindex.(domain_size.(Hi.Hi),1)
12 25
13 LazyTensors.domain_size(Qi::InverseQuadrature{Dim}, range_size::NTuple{Dim,Integer}) where Dim = range_size 26 LazyTensors.domain_size(Qi::InverseQuadrature{Dim}, range_size::NTuple{Dim,Integer}) where Dim = range_size
14 27
15 function LazyTensors.apply(Qi::InverseQuadrature{Dim,T}, v::AbstractArray{T,Dim}, I::Vararg{Index,Dim}) where {T,Dim} 28 function LazyTensors.apply(Qi::InverseQuadrature{Dim,T}, v::AbstractArray{T,Dim}, I::Vararg{Index,Dim}) where {T,Dim}
16 error("not implemented") 29 error("not implemented")