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