comparison src/SbpOperators/quadrature/diagonal_quadrature.jl @ 557:3c18a15934a7 feature/quadrature_as_outer_product

Merge in default
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Sun, 29 Nov 2020 21:52:44 +0100
parents src/SbpOperators/quadrature/diagonal_inner_product.jl@1a53eb83ed24 src/SbpOperators/quadrature/diagonal_inner_product.jl@09ae5b519b4c
children 9b5710ae6587
comparison
equal deleted inserted replaced
554:dab9df9c4d66 557:3c18a15934a7
42 42
43 LazyTensors.range_size(H::DiagonalQuadrature) = H.size 43 LazyTensors.range_size(H::DiagonalQuadrature) = H.size
44 LazyTensors.domain_size(H::DiagonalQuadrature) = H.size 44 LazyTensors.domain_size(H::DiagonalQuadrature) = H.size
45 45
46 """ 46 """
47 apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index) where T 47 apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, i) where T
48 Implements the application `(H*v)[i]` an `Index{R}` where `R` is one of the regions 48 Implements the application `(H*v)[i]` an `Index{R}` where `R` is one of the regions
49 `Lower`,`Interior`,`Upper`,`Unknown`. 49 `Lower`,`Interior`,`Upper`.
50 """ 50 """
51 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
52 return @inbounds H.h*H.closure[Int(I)]*v[Int(I)] 52 return @inbounds H.h*H.closure[Int(i)]*v[Int(i)]
53 end 53 end
54 54
55 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 N = length(v); 56 N = length(v);
57 return @inbounds H.h*H.closure[N-Int(I)+1]*v[Int(I)] 57 return @inbounds H.h*H.closure[N-Int(i)+1]*v[Int(i)]
58 end 58 end
59 59
60 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
61 return @inbounds H.h*v[Int(I)] 61 return @inbounds H.h*v[Int(i)]
62 end 62 end
63 63
64 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index{Unknown}) where T 64 function LazyTensors.apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, i) where T
65 N = length(v); 65 N = length(v);
66 r = getregion(Int(I), closure_size(H), N) 66 r = getregion(i, closure_size(H), N)
67 i = Index(Int(I), r) 67
68 return LazyTensors.apply(H, v, i) 68 return LazyTensors.apply(H, v, Index(i, r))
69 end 69 end
70 70
71 """ 71 """
72 apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index) where T 72 apply(H::DiagonalQuadrature{T}, v::AbstractVector{T}, I::Index) where T
73 Implements the application (H'*v)[I]. The operator is self-adjoint. 73 Implements the application (H'*v)[I]. The operator is self-adjoint.
74 """ 74 """
75 LazyTensors.apply_transpose(H::DiagonalQuadrature, v::AbstractVector, I) = LazyTensors.apply(H,v,I) 75 LazyTensors.apply_transpose(H::DiagonalQuadrature{T}, v::AbstractVector{T}, i) where T = LazyTensors.apply(H,v,i)
76 76
77 """ 77 """
78 closure_size(H) 78 closure_size(H)
79 Returns the size of the closure stencil of a DiagonalQuadrature `H`. 79 Returns the size of the closure stencil of a DiagonalQuadrature `H`.
80 """ 80 """
81 closure_size(H::DiagonalQuadrature{T,M}) where {T,M} = M 81 closure_size(H::DiagonalQuadrature{T,M}) where {T,M} = M
82 export closure_size