comparison src/SbpOperators/volumeops/volume_operator.jl @ 946:469ed954b493 feature/tensormapping_application_promotion

Allow volume_operator, boundary_operator, and constant_interior_scaling_operator to act on arbitrary arrays
author Jonatan Werpers <jonatan@werpers.com>
date Sat, 12 Mar 2022 22:26:23 +0100
parents ae28f1d7ef5e
children e79debd10f7d 1ba8a398af9c bbbc31953367
comparison
equal deleted inserted replaced
945:1f41cf9454f2 946:469ed954b493
41 closure_size(::VolumeOperator{T,N,M}) where {T,N,M} = M 41 closure_size(::VolumeOperator{T,N,M}) where {T,N,M} = M
42 42
43 LazyTensors.range_size(op::VolumeOperator) = op.size 43 LazyTensors.range_size(op::VolumeOperator) = op.size
44 LazyTensors.domain_size(op::VolumeOperator) = op.size 44 LazyTensors.domain_size(op::VolumeOperator) = op.size
45 45
46 function LazyTensors.apply(op::VolumeOperator{T}, v::AbstractVector{T}, i::Index{Lower}) where T 46 function LazyTensors.apply(op::VolumeOperator, v::AbstractVector, i::Index{Lower})
47 return @inbounds apply_stencil(op.closure_stencils[Int(i)], v, Int(i)) 47 return @inbounds apply_stencil(op.closure_stencils[Int(i)], v, Int(i))
48 end 48 end
49 49
50 function LazyTensors.apply(op::VolumeOperator{T}, v::AbstractVector{T}, i::Index{Interior}) where T 50 function LazyTensors.apply(op::VolumeOperator, v::AbstractVector, i::Index{Interior})
51 return apply_stencil(op.inner_stencil, v, Int(i)) 51 return apply_stencil(op.inner_stencil, v, Int(i))
52 end 52 end
53 53
54 function LazyTensors.apply(op::VolumeOperator{T}, v::AbstractVector{T}, i::Index{Upper}) where T 54 function LazyTensors.apply(op::VolumeOperator, v::AbstractVector, i::Index{Upper})
55 return @inbounds Int(op.parity)*apply_stencil_backwards(op.closure_stencils[op.size[1]-Int(i)+1], v, Int(i)) 55 return @inbounds Int(op.parity)*apply_stencil_backwards(op.closure_stencils[op.size[1]-Int(i)+1], v, Int(i))
56 end 56 end
57 57
58 function LazyTensors.apply(op::VolumeOperator{T}, v::AbstractVector{T}, i) where T 58 function LazyTensors.apply(op::VolumeOperator, v::AbstractVector, i)
59 r = getregion(i, closure_size(op), op.size[1]) 59 r = getregion(i, closure_size(op), op.size[1])
60 return LazyTensors.apply(op, v, Index(i, r)) 60 return LazyTensors.apply(op, v, Index(i, r))
61 end 61 end