annotate src/SbpOperators/quadrature/inverse_quadrature.jl @ 346:acb60c4819dd refactor/combine_to_one_package

Close branch
author Jonatan Werpers <jonatan@werpers.com>
date Sat, 26 Sep 2020 15:27:24 +0200
parents 01b851161018
children 0844069ab5ff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
329
408c37b295c2 Refactor 1D tensor mapping in inverse quadrature to separate file, InverseDiagonalNorm. Add tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 328
diff changeset
1 export InverseQuadrature
302
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
2 """
329
408c37b295c2 Refactor 1D tensor mapping in inverse quadrature to separate file, InverseDiagonalNorm. Add tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 328
diff changeset
3 InverseQuadrature{Dim,T<:Real,M,K} <: TensorMapping{T,Dim,Dim}
302
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
4
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
5 Implements the inverse quadrature operator `Qi` of Dim dimension as a TensorOperator
329
408c37b295c2 Refactor 1D tensor mapping in inverse quadrature to separate file, InverseDiagonalNorm. Add tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 328
diff changeset
6 The multi-dimensional tensor operator consists of a tuple of 1D InverseDiagonalInnerProduct
302
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
7 tensor operators.
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
8 """
329
408c37b295c2 Refactor 1D tensor mapping in inverse quadrature to separate file, InverseDiagonalNorm. Add tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 328
diff changeset
9 struct InverseQuadrature{Dim,T<:Real,M} <: TensorOperator{T,Dim}
408c37b295c2 Refactor 1D tensor mapping in inverse quadrature to separate file, InverseDiagonalNorm. Add tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 328
diff changeset
10 Hi::NTuple{Dim,InverseDiagonalInnerProduct{T,M}}
302
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
11 end
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
12
305
bd09d67ebb22 Fix type errors in InverseQuadrature
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 302
diff changeset
13 LazyTensors.domain_size(Qi::InverseQuadrature{Dim}, range_size::NTuple{Dim,Integer}) where Dim = range_size
302
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
14
322
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
15 function LazyTensors.apply(Qi::InverseQuadrature{Dim,T}, v::AbstractArray{T,Dim}, I::Vararg{Index,Dim}) where {T,Dim}
302
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
16 error("not implemented")
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
17 end
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
18
322
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
19 @inline function LazyTensors.apply(Qi::InverseQuadrature{1,T}, v::AbstractVector{T}, I::Index) where T
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
20 @inbounds q = apply(Qi.Hi[1], v , I)
302
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
21 return q
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
22 end
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
23
322
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
24 @inline function LazyTensors.apply(Qi::InverseQuadrature{2,T}, v::AbstractArray{T,2}, I::Index, J::Index) where T
305
bd09d67ebb22 Fix type errors in InverseQuadrature
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 302
diff changeset
25 # InverseQuadrature in x direction
322
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
26 @inbounds vx = view(v, :, Int(J))
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
27 @inbounds qx_inv = apply(Qi.Hi[1], vx , I)
305
bd09d67ebb22 Fix type errors in InverseQuadrature
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 302
diff changeset
28 # InverseQuadrature in y-direction
322
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
29 @inbounds vy = view(v, Int(I), :)
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
30 @inbounds qy_inv = apply(Qi.Hi[2], vy, J)
302
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
31 return qx_inv*qy_inv
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
32 end
6fa2ba769ae3 Create 1D tensor mapping for inverse diagonal norm, and make the multi-dimensional inverse quadrature use those. Move InverseQudrature from laplace.jl into InverseQuadrature.jl
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents:
diff changeset
33
329
408c37b295c2 Refactor 1D tensor mapping in inverse quadrature to separate file, InverseDiagonalNorm. Add tests
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 328
diff changeset
34 LazyTensors.apply_transpose(Qi::InverseQuadrature{Dim,T}, v::AbstractArray{T,Dim}, I::Vararg{Index,Dim}) where {Dim,T} = LazyTensors.apply(Qi,v,I...)