comparison src/SbpOperators/quadrature/diagonal_quadrature.jl @ 546:09ae5b519b4c feature/quadrature_as_outer_product

Update documentation
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 27 Nov 2020 12:33:10 +0100
parents 576c6d1acc28
children 3c18a15934a7
comparison
equal deleted inserted replaced
545:ff412b29db31 546:09ae5b519b4c
16 export diagonal_quadrature 16 export diagonal_quadrature
17 17
18 """ 18 """
19 DiagonalQuadrature{T,M} <: TensorMapping{T,1,1} 19 DiagonalQuadrature{T,M} <: TensorMapping{T,1,1}
20 20
21 Implements the one-dimensional diagonal quadrature operator as a `TensorMapping 21 Implements the one-dimensional diagonal quadrature operator as a `TensorMapping`
22 TODO: Elaborate on properties 22 The quadrature is defined by the quadrature interval length `h`, the quadrature
23 closure weights `closure` and the number of quadrature intervals `size`. The
24 interior stencil has the weight 1.
23 """ 25 """
24 struct DiagonalQuadrature{T,M} <: TensorMapping{T,1,1} 26 struct DiagonalQuadrature{T,M} <: TensorMapping{T,1,1}
25 h::T 27 h::T
26 closure::NTuple{M,T} 28 closure::NTuple{M,T}
27 size::Tuple{Int} 29 size::Tuple{Int}
29 export DiagonalQuadrature 31 export DiagonalQuadrature
30 32
31 """ 33 """
32 DiagonalQuadrature(g, quadrature_closure) 34 DiagonalQuadrature(g, quadrature_closure)
33 35
34 Constructs the `DiagonalQuadrature` defined by the `EquidistantGrid` `g` and 36 Constructs the `DiagonalQuadrature` `H` on the `EquidistantGrid` `g` with
35 closure stencil `quadrature_closure`. 37 `H.closure` specified by `quadrature_closure`.
36 """ 38 """
37 function DiagonalQuadrature(g::EquidistantGrid{1}, quadrature_closure) 39 function DiagonalQuadrature(g::EquidistantGrid{1}, quadrature_closure)
38 return DiagonalQuadrature(spacing(g)[1], quadrature_closure, size(g)) 40 return DiagonalQuadrature(spacing(g)[1], quadrature_closure, size(g))
39 end 41 end
40 42
41 LazyTensors.range_size(H::DiagonalQuadrature) = H.size 43 LazyTensors.range_size(H::DiagonalQuadrature) = H.size
42 LazyTensors.domain_size(H::DiagonalQuadrature) = H.size 44 LazyTensors.domain_size(H::DiagonalQuadrature) = H.size
43 45
44 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index) where T 46 """
45 return @inbounds apply(H, v, I) 47 apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index) where T
46 end 48 Implements the application `(H*v)[i]` an `Index{R}` where `R` is one of the regions
47 49 `Lower`,`Interior`,`Upper`,`Unknown`.
50 """
48 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index{Lower}) where T 51 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index{Lower}) where T
49 return @inbounds H.h*H.closure[Int(I)]*v[Int(I)] 52 return @inbounds H.h*H.closure[Int(I)]*v[Int(I)]
50 end 53 end
51 54
52 function LazyTensors.apply(H::DiagonalQuadrature{T},v::AbstractVector{T}, I::Index{Upper}) where T 55 function LazyTensors.apply(H::DiagonalQuadrature{T},v::AbstractVector{T}, I::Index{Upper}) where T
56 59
57 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index{Interior}) where T 60 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index{Interior}) where T
58 return @inbounds H.h*v[Int(I)] 61 return @inbounds H.h*v[Int(I)]
59 end 62 end
60 63
61 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, index::Index{Unknown}) where T 64 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index{Unknown}) where T
62 N = length(v); 65 N = length(v);
63 r = getregion(Int(index), closure_size(H), N) 66 r = getregion(Int(I), closure_size(H), N)
64 i = Index(Int(index), r) 67 i = Index(Int(I), r)
65 return LazyTensors.apply(H, v, i) 68 return LazyTensors.apply(H, v, i)
66 end 69 end
67 70
68 LazyTensors.apply_transpose(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index) where T = LazyTensors.apply(H,v,I) 71 """
72 apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index) where T
73 Implements the application (H'*v)[I]. The operator is self-adjoint.
74 """
75 LazyTensors.apply_transpose(H::DiagonalQuadrature, v::AbstractVector, I) = LazyTensors.apply(H,v,I)
69 76
70 """ 77 """
71 closure_size(H) 78 closure_size(H)
72 Returns the size of the closure stencil of a DiagonalQuadrature `H`. 79 Returns the size of the closure stencil of a DiagonalQuadrature `H`.
73 """ 80 """