Mercurial > repos > public > sbplib_julia
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 |
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...) |