Mercurial > repos > public > sbplib_julia
comparison src/SbpOperators/volumeops/derivatives/second_derivative_variable.jl @ 893:422c9f22cf92 feature/variable_derivatives
Make higher dimensions work
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 10 Feb 2022 10:02:33 +0100 |
parents | f72cc96a58c6 |
children | 5bbc3ea3821b |
comparison
equal
deleted
inserted
replaced
892:06c510d40ebb | 893:422c9f22cf92 |
---|---|
87 function apply_upper(op::SecondDerivativeVariable, v, I...) | 87 function apply_upper(op::SecondDerivativeVariable, v, I...) |
88 ṽ = derivative_view(op, v, I) | 88 ṽ = derivative_view(op, v, I) |
89 c̃ = derivative_view(op, op.coefficient, I) | 89 c̃ = derivative_view(op, op.coefficient, I) |
90 | 90 |
91 i = I[derivative_direction(op)] | 91 i = I[derivative_direction(op)] |
92 return @inbounds apply_stencil_backwards(op.closure_stencils[op.size[1]-i+1], c̃, ṽ, i) | 92 stencil = op.closure_stencils[op.size[derivative_direction(op)]-i+1] |
93 return @inbounds apply_stencil_backwards(stencil, c̃, ṽ, i) | |
93 end | 94 end |
94 | 95 |
95 function LazyTensors.apply(op::SecondDerivativeVariable, v::AbstractVector, I::Vararg{Index}) | 96 function LazyTensors.apply(op::SecondDerivativeVariable, v::AbstractArray, I::Vararg{Index}) |
96 if I[derivative_direction(op)] isa Index{Lower} | 97 if I[derivative_direction(op)] isa Index{Lower} |
97 return apply_lower(op, v, Int.(I)...) | 98 return apply_lower(op, v, Int.(I)...) |
98 elseif I[derivative_direction(op)] isa Index{Upper} | 99 elseif I[derivative_direction(op)] isa Index{Upper} |
99 return apply_upper(op, v, Int.(I)...) | 100 return apply_upper(op, v, Int.(I)...) |
100 else | 101 else |
101 return apply_interior(op, v, Int.(I)...) | 102 return apply_interior(op, v, Int.(I)...) |
102 end | 103 end |
103 end | 104 end |
104 | 105 |
105 function LazyTensors.apply(op::SecondDerivativeVariable, v::AbstractVector, I...) | 106 function LazyTensors.apply(op::SecondDerivativeVariable, v::AbstractArray, I...) |
106 i = I[derivative_direction(op)] | 107 dir = derivative_direction(op) |
107 r = getregion(i, closure_size(op), op.size[1]) | 108 |
108 return LazyTensors.apply(op, v, Index(i, r)) | 109 i = I[dir] |
110 r = getregion(i, closure_size(op), op.size[dir]) | |
111 | |
112 I = map(i->Index(i, Interior), I) | |
113 I = Base.setindex(I, Index(i, r), dir) | |
114 return LazyTensors.apply(op, v, I...) | |
109 end | 115 end |
110 | 116 |
111 # TODO: Rename SecondDerivativeVariable -> VariableSecondDerivative | 117 # TODO: Rename SecondDerivativeVariable -> VariableSecondDerivative |