comparison src/SbpOperators/quadrature/inverse_quadrature.jl @ 356:0844069ab5ff refactor/remove_dynamic_size_tensormapping

Reinclude SbpOperators and fix most of the code and tests there.
author Jonatan Werpers <jonatan@werpers.com>
date Sun, 27 Sep 2020 22:51:31 +0200
parents 01b851161018
children 0546cb279fc2
comparison
equal deleted inserted replaced
355:5c9212a8ee4f 356:0844069ab5ff
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(subgrid(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")