comparison src/SbpOperators/quadrature/inverse_diagonal_quadrature.jl @ 558:9b5710ae6587 feature/quadrature_as_outer_product

Update documentation
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Sun, 29 Nov 2020 22:06:53 +0100
parents 3c18a15934a7
children 04d7b4eb63ef
comparison
equal deleted inserted replaced
557:3c18a15934a7 558:9b5710ae6587
1 """ 1 """
2 inverse_diagonal_quadrature(g,quadrature_closure) 2 inverse_diagonal_quadrature(g,quadrature_closure)
3 3
4 Constructs the diagonal quadrature inverse operator `Hi` on a grid of `Dim` dimensions as 4 Constructs the inverse `Hi` of a `DiagonalQuadrature` on a grid of `Dim` dimensions as
5 a `TensorMapping`. The one-dimensional operator is a InverseDiagonalQuadrature, while 5 a `TensorMapping`. The one-dimensional operator is a `InverseDiagonalQuadrature`, while
6 the multi-dimensional operator is the outer-product of the one-dimensional operators 6 the multi-dimensional operator is the outer-product of the one-dimensional operators
7 in each coordinate direction. 7 in each coordinate direction.
8 """ 8 """
9 function inverse_diagonal_quadrature(g::EquidistantGrid{Dim}, quadrature_closure) where Dim 9 function inverse_diagonal_quadrature(g::EquidistantGrid{Dim}, quadrature_closure) where Dim
10 Hi = InverseDiagonalQuadrature(restrict(g,1), quadrature_closure) 10 Hi = InverseDiagonalQuadrature(restrict(g,1), quadrature_closure)
17 17
18 18
19 """ 19 """
20 InverseDiagonalQuadrature{T,M} <: TensorMapping{T,1,1} 20 InverseDiagonalQuadrature{T,M} <: TensorMapping{T,1,1}
21 21
22 Implements the one-dimensional inverse diagonal quadrature operator as a `TensorMapping 22 Implements the inverse of a one-dimensional `DiagonalQuadrature` as a `TensorMapping`
23 TODO: Elaborate on properties 23 The operator is defined by the reciprocal of the quadrature interval length `h_inv`, the
24 reciprocal of the quadrature closure weights `closure` and the number of quadrature intervals `size`. The
25 interior stencil has the weight 1.
24 """ 26 """
25 struct InverseDiagonalQuadrature{T<:Real,M} <: TensorMapping{T,1,1} 27 struct InverseDiagonalQuadrature{T<:Real,M} <: TensorMapping{T,1,1}
26 h_inv::T 28 h_inv::T
27 closure::NTuple{M,T} 29 closure::NTuple{M,T}
28 size::Tuple{Int} 30 size::Tuple{Int}
29 end 31 end
30 export InverseDiagonalQuadrature 32 export InverseDiagonalQuadrature
31 33
34 """
35 InverseDiagonalQuadrature(g, quadrature_closure)
36
37 Constructs the `InverseDiagonalQuadrature` on the `EquidistantGrid` `g` with
38 closure given by the reciprocal of `quadrature_closure`.
39 """
32 function InverseDiagonalQuadrature(g::EquidistantGrid{1}, quadrature_closure) 40 function InverseDiagonalQuadrature(g::EquidistantGrid{1}, quadrature_closure)
33 return InverseDiagonalQuadrature(inverse_spacing(g)[1], 1 ./ quadrature_closure, size(g)) 41 return InverseDiagonalQuadrature(inverse_spacing(g)[1], 1 ./ quadrature_closure, size(g))
34 end 42 end
35 43
44 """
45 domain_size(Hi::InverseDiagonalQuadrature)
36 46
47 The size of an object in the range of `Hi`
48 """
37 LazyTensors.range_size(Hi::InverseDiagonalQuadrature) = Hi.size 49 LazyTensors.range_size(Hi::InverseDiagonalQuadrature) = Hi.size
50
51 """
52 domain_size(Hi::InverseDiagonalQuadrature)
53
54 The size of an object in the domain of `Hi`
55 """
38 LazyTensors.domain_size(Hi::InverseDiagonalQuadrature) = Hi.size 56 LazyTensors.domain_size(Hi::InverseDiagonalQuadrature) = Hi.size
39 57
40 58 """
59 apply(Hi::InverseDiagonalQuadrature{T}, v::AbstractVector{T}, i) where T
60 Implements the application `(Hi*v)[i]` an `Index{R}` where `R` is one of the regions
61 `Lower`,`Interior`,`Upper`. If `i` is another type of index (e.g an `Int`) it will first
62 be converted to an `Index{R}`.
63 """
41 function LazyTensors.apply(Hi::InverseDiagonalQuadrature{T}, v::AbstractVector{T}, I::Index{Lower}) where T 64 function LazyTensors.apply(Hi::InverseDiagonalQuadrature{T}, v::AbstractVector{T}, I::Index{Lower}) where T
42 return @inbounds Hi.h_inv*Hi.closure[Int(I)]*v[Int(I)] 65 return @inbounds Hi.h_inv*Hi.closure[Int(I)]*v[Int(I)]
43 end 66 end
44 67
45 function LazyTensors.apply(Hi::InverseDiagonalQuadrature{T}, v::AbstractVector{T}, I::Index{Upper}) where T 68 function LazyTensors.apply(Hi::InverseDiagonalQuadrature{T}, v::AbstractVector{T}, I::Index{Upper}) where T
58 end 81 end
59 82
60 LazyTensors.apply_transpose(Hi::InverseDiagonalQuadrature{T}, v::AbstractVector{T}, i) where T = LazyTensors.apply(Hi,v,i) 83 LazyTensors.apply_transpose(Hi::InverseDiagonalQuadrature{T}, v::AbstractVector{T}, i) where T = LazyTensors.apply(Hi,v,i)
61 84
62 """ 85 """
63 closure_size(H) 86 closure_size(Hi)
64 Returns the size of the closure stencil of a InverseDiagonalQuadrature `Hi`. 87 Returns the size of the closure stencil of a InverseDiagonalQuadrature `Hi`.
65 """ 88 """
66 closure_size(Hi::InverseDiagonalQuadrature{T,M}) where {T,M} = M 89 closure_size(Hi::InverseDiagonalQuadrature{T,M}) where {T,M} = M