Mercurial > repos > public > sbplib_julia
comparison src/SbpOperators/boundaryops/boundary_restriction.jl @ 569:2a7a258eaaa6 feature/boundary_ops
Collect documentation for BoundaryRestriction at the type definition
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Tue, 01 Dec 2020 15:21:01 +0100 |
| parents | ccb41095def6 |
| children | a8fe91861116 |
comparison
equal
deleted
inserted
replaced
| 568:34d9e10f0001 | 569:2a7a258eaaa6 |
|---|---|
| 21 export boundary_restriction | 21 export boundary_restriction |
| 22 | 22 |
| 23 """ | 23 """ |
| 24 BoundaryRestriction{T,N,R} <: TensorMapping{T,0,1} | 24 BoundaryRestriction{T,N,R} <: TensorMapping{T,0,1} |
| 25 | 25 |
| 26 Implements the boundary operator `e` as a TensorMapping | 26 Implements the boundary operator `e` for 1D as a TensorMapping |
| 27 `e` is the restriction of a grid function to the boundary using some `closureStencil`. | |
| 28 The boundary to restrict to is determined by `R`. | |
| 29 | |
| 30 `e'` is the prolongation of a zero dimensional array to the whole grid using the same `closureStencil`. | |
| 27 """ | 31 """ |
| 28 struct BoundaryRestriction{T,N,R<:Region} <: TensorMapping{T,0,1} | 32 struct BoundaryRestriction{T,N,R<:Region} <: TensorMapping{T,0,1} |
| 29 stencil::Stencil{T,N} | 33 stencil::Stencil{T,N} |
| 30 size::NTuple{1,Int} | 34 size::NTuple{1,Int} |
| 31 end | 35 end |
| 36 end | 40 end |
| 37 | 41 |
| 38 LazyTensors.range_size(e::BoundaryRestriction) = () | 42 LazyTensors.range_size(e::BoundaryRestriction) = () |
| 39 LazyTensors.domain_size(e::BoundaryRestriction) = e.size | 43 LazyTensors.domain_size(e::BoundaryRestriction) = e.size |
| 40 | 44 |
| 41 " Restricts a grid function v on a grid of size m to the scalar element v[1]" | |
| 42 function LazyTensors.apply(e::BoundaryRestriction{T,N,Lower}, v::AbstractVector{T}) where {T,N} | 45 function LazyTensors.apply(e::BoundaryRestriction{T,N,Lower}, v::AbstractVector{T}) where {T,N} |
| 43 apply_stencil(e.stencil,v,1) | 46 apply_stencil(e.stencil,v,1) |
| 44 end | 47 end |
| 45 | 48 |
| 46 " Restricts a grid function v on a grid of size m to the scalar element v[m]" | |
| 47 function LazyTensors.apply(e::BoundaryRestriction{T,N,Upper}, v::AbstractVector{T}) where {T,N} | 49 function LazyTensors.apply(e::BoundaryRestriction{T,N,Upper}, v::AbstractVector{T}) where {T,N} |
| 48 apply_stencil_backwards(e.stencil,v,e.size[1]) | 50 apply_stencil_backwards(e.stencil,v,e.size[1]) |
| 49 end | 51 end |
| 50 | 52 |
| 51 " Transpose of a restriction is an inflation or prolongation. | |
| 52 Inflates the scalar (1-element) vector to a vector of size of the grid" | |
| 53 function LazyTensors.apply_transpose(e::BoundaryRestriction{T,N,Lower}, v::AbstractArray{T,0}, i) where {T,N} | 53 function LazyTensors.apply_transpose(e::BoundaryRestriction{T,N,Lower}, v::AbstractArray{T,0}, i) where {T,N} |
| 54 @boundscheck if !(0 < Int(i) <= e.size[1]) | 54 @boundscheck if !(0 < Int(i) <= e.size[1]) |
| 55 throw(BoundsError()) | 55 throw(BoundsError()) |
| 56 end | 56 end |
| 57 return e.stencil[Int(i)-1]*v[] | 57 return e.stencil[Int(i)-1]*v[] |
| 58 end | 58 end |
| 59 | 59 |
| 60 " Transpose of a restriction is an inflation or prolongation. | |
| 61 Inflates the scalar (1-element) vector to a vector of size of the grid" | |
| 62 function LazyTensors.apply_transpose(e::BoundaryRestriction{T,N,Upper}, v::AbstractArray{T,0}, i) where {T,N} | 60 function LazyTensors.apply_transpose(e::BoundaryRestriction{T,N,Upper}, v::AbstractArray{T,0}, i) where {T,N} |
| 63 @boundscheck if !(0 < Int(i) <= e.size[1]) | 61 @boundscheck if !(0 < Int(i) <= e.size[1]) |
| 64 throw(BoundsError()) | 62 throw(BoundsError()) |
| 65 end | 63 end |
| 66 return e.stencil[e.size[1] - Int(i)]*v[] | 64 return e.stencil[e.size[1] - Int(i)]*v[] |
