comparison src/SbpOperators/boundaryops/boundary_operator.jl @ 960:e79debd10f7d feature/variable_derivatives

Merge feature/tensormapping_application_promotion
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 14 Mar 2022 10:14:38 +0100
parents b41180efb6c2 469ed954b493
children 3bb94ce74697
comparison
equal deleted inserted replaced
959:e9752c1e92f8 960:e79debd10f7d
60 closure_size(::BoundaryOperator{T,R,N}) where {T,R,N} = N 60 closure_size(::BoundaryOperator{T,R,N}) where {T,R,N} = N
61 61
62 LazyTensors.range_size(op::BoundaryOperator) = () 62 LazyTensors.range_size(op::BoundaryOperator) = ()
63 LazyTensors.domain_size(op::BoundaryOperator) = (op.size,) 63 LazyTensors.domain_size(op::BoundaryOperator) = (op.size,)
64 64
65 function LazyTensors.apply(op::BoundaryOperator{T,Lower}, v::AbstractVector{T}) where T 65 function LazyTensors.apply(op::BoundaryOperator{<:Any,Lower}, v::AbstractVector)
66 apply_stencil(op.stencil,v,1) 66 apply_stencil(op.stencil,v,1)
67 end 67 end
68 68
69 function LazyTensors.apply(op::BoundaryOperator{T,Upper}, v::AbstractVector{T}) where T 69 function LazyTensors.apply(op::BoundaryOperator{<:Any,Upper}, v::AbstractVector)
70 apply_stencil_backwards(op.stencil,v,op.size) 70 apply_stencil_backwards(op.stencil,v,op.size)
71 end 71 end
72 72
73 function LazyTensors.apply_transpose(op::BoundaryOperator{T,Lower}, v::AbstractArray{T,0}, i::Index{Lower}) where T 73 function LazyTensors.apply_transpose(op::BoundaryOperator{<:Any,Lower}, v::AbstractArray{<:Any,0}, i::Index{Lower})
74 return op.stencil[Int(i)-1]*v[] 74 return op.stencil[Int(i)-1]*v[]
75 end 75 end
76 76
77 function LazyTensors.apply_transpose(op::BoundaryOperator{T,Upper}, v::AbstractArray{T,0}, i::Index{Upper}) where T 77 function LazyTensors.apply_transpose(op::BoundaryOperator{<:Any,Upper}, v::AbstractArray{<:Any,0}, i::Index{Upper})
78 return op.stencil[op.size[1] - Int(i)]*v[] 78 return op.stencil[op.size[1] - Int(i)]*v[]
79 end 79 end
80 80
81 # Catch all combinations of Lower, Upper and Interior not caught by the two previous methods. 81 # Catch all combinations of Lower, Upper and Interior not caught by the two previous methods.
82 function LazyTensors.apply_transpose(op::BoundaryOperator{T}, v::AbstractArray{T,0}, i::Index) where T 82 function LazyTensors.apply_transpose(op::BoundaryOperator, v::AbstractArray{<:Any,0}, i::Index)
83 return zero(T) 83 return zero(eltype(v))
84 end 84 end
85 85
86 function LazyTensors.apply_transpose(op::BoundaryOperator{T}, v::AbstractArray{T,0}, i) where T 86 function LazyTensors.apply_transpose(op::BoundaryOperator, v::AbstractArray{<:Any,0}, i)
87 return LazyTensors.apply_transpose_with_region(op, v, closure_size(op), op.size[1], i) 87 return LazyTensors.apply_transpose_with_region(op, v, closure_size(op), op.size[1], i)
88 end 88 end