annotate 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
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
356
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
5 Implements the inverse quadrature operator `Qi` of Dim dimension as a TensorMapping
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 """
356
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
9 struct InverseQuadrature{Dim,T<:Real,M} <: TensorMapping{T,Dim,Dim}
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
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
356
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
13
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
14 function InverseQuadrature(g::EquidistantGrid{Dim}, quadratureClosure) where Dim
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
15 Hi = ()
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
16 for i ∈ 1:Dim
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
17 Hi = (Hi..., InverseDiagonalInnerProduct(subgrid(g,i), quadratureClosure))
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
18 end
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
19
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
20 return InverseQuadrature(Hi)
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
21 end
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
22
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
23 LazyTensors.range_size(Hi::InverseQuadrature) = getindex.(range_size.(Hi.Hi),1)
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
24 LazyTensors.domain_size(Hi::InverseQuadrature) = getindex.(domain_size.(Hi.Hi),1)
0844069ab5ff Reinclude SbpOperators and fix most of the code and tests there.
Jonatan Werpers <jonatan@werpers.com>
parents: 333
diff changeset
25
305
bd09d67ebb22 Fix type errors in InverseQuadrature
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 302
diff changeset
26 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
27
322
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
28 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
29 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
30 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
31
322
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
32 @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
33 @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
34 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
35 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
36
322
777063b6f049 Dispatch applys on vararg Index instead of tuples
Vidar Stiernström <vidar.stiernstrom@it.uu.se>
parents: 305
diff changeset
37 @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
38 # 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
39 @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
40 @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
41 # 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
42 @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
43 @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
44 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
45 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
46
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
47 LazyTensors.apply_transpose(Qi::InverseQuadrature{Dim,T}, v::AbstractArray{T,Dim}, I::Vararg{Index,Dim}) where {Dim,T} = LazyTensors.apply(Qi,v,I...)