Mercurial > repos > public > sbplib_julia
annotate src/SbpOperators/quadrature/inverse_quadrature.jl @ 601:b05f542b2e8f refactor/toml_operator_format
Export relevant functions and move export of read_D2_operator to readoperator.jl
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Sat, 05 Dec 2020 12:59:51 +0100 |
parents | 011ca1639153 |
children |
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 |
368
0546cb279fc2
Fix breaking tests by fixing calls to subgrid/restrict
Jonatan Werpers <jonatan@werpers.com>
parents:
356
diff
changeset
|
17 Hi = (Hi..., InverseDiagonalInnerProduct(restrict(g,i), quadratureClosure)) |
356
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 |
542
011ca1639153
Remove Index{Unknown} and replace with general Any implementations
Jonatan Werpers <jonatan@werpers.com>
parents:
368
diff
changeset
|
28 function LazyTensors.apply(Qi::InverseQuadrature{Dim,T}, v::AbstractArray{T,Dim}, I::Vararg{Any,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 |
542
011ca1639153
Remove Index{Unknown} and replace with general Any implementations
Jonatan Werpers <jonatan@werpers.com>
parents:
368
diff
changeset
|
32 @inline function LazyTensors.apply(Qi::InverseQuadrature{1,T}, v::AbstractVector{T}, i) where T |
011ca1639153
Remove Index{Unknown} and replace with general Any implementations
Jonatan Werpers <jonatan@werpers.com>
parents:
368
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 |
542
011ca1639153
Remove Index{Unknown} and replace with general Any implementations
Jonatan Werpers <jonatan@werpers.com>
parents:
368
diff
changeset
|
37 @inline function LazyTensors.apply(Qi::InverseQuadrature{2,T}, v::AbstractArray{T,2}, i,j) 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 |
542
011ca1639153
Remove Index{Unknown} and replace with general Any implementations
Jonatan Werpers <jonatan@werpers.com>
parents:
368
diff
changeset
|
39 @inbounds vx = view(v, :, Int(j)) |
011ca1639153
Remove Index{Unknown} and replace with general Any implementations
Jonatan Werpers <jonatan@werpers.com>
parents:
368
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 |
542
011ca1639153
Remove Index{Unknown} and replace with general Any implementations
Jonatan Werpers <jonatan@werpers.com>
parents:
368
diff
changeset
|
42 @inbounds vy = view(v, Int(i), :) |
011ca1639153
Remove Index{Unknown} and replace with general Any implementations
Jonatan Werpers <jonatan@werpers.com>
parents:
368
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 |
542
011ca1639153
Remove Index{Unknown} and replace with general Any implementations
Jonatan Werpers <jonatan@werpers.com>
parents:
368
diff
changeset
|
47 LazyTensors.apply_transpose(Qi::InverseQuadrature{Dim,T}, v::AbstractArray{T,Dim}, I::Vararg{Any,Dim}) where {Dim,T} = LazyTensors.apply(Qi,v,I...) |