comparison src/SbpOperators/volumeops/derivatives/second_derivative.jl @ 2093:17a41f0eddb0

Merge refactor/sbp_operators/direction_check
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 02 Mar 2026 15:54:31 +0100
parents e21c295fb2da
children
comparison
equal deleted inserted replaced
2086:53e5887457b9 2093:17a41f0eddb0
1 """ 1 """
2 second_derivative(g::EquidistantGrid, stencil_set, direction) 2 second_derivative(g::TensorGrid, stencil_set, dim)
3 3
4 Creates the second derivative operator `D2` as a `LazyTensor` 4 Creates the second derivative operator `D2` as a `LazyTensor`
5 5
6 `D2` approximates the second-derivative d²/dξ² on `g` along the coordinate 6 `D2` approximates the second-derivative d²/dξ² on `g` along the coordinate
7 dimension specified by `direction`. 7 dimension specified by `dim`.
8 8
9 See also: [`VolumeOperator`](@ref), [`LazyTensors.inflate`](@ref). 9 See also: [`VolumeOperator`](@ref), [`LazyTensors.inflate`](@ref).
10 """ 10 """
11 function second_derivative(g::TensorGrid, stencil_set, direction) 11 function second_derivative(g::TensorGrid, stencil_set, dim)
12 D₂ = second_derivative(g.grids[direction], stencil_set) 12 if dim ∉ 1:ndims(g)
13 return LazyTensors.inflate(D₂, size(g), direction) 13 throw(DomainError(dim, "Derivative direction must be in 1:$(ndims(g))."))
14 end
15 D₂ = second_derivative(g.grids[dim], stencil_set)
16 return LazyTensors.inflate(D₂, size(g), dim)
14 end 17 end
15 18
16 """ 19 """
17 second_derivative(g::EquidistantGrid, stencil_set::::StencilSet) 20 second_derivative(g::EquidistantGrid, stencil_set::::StencilSet)
18 21
23 inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"]) 26 inner_stencil = parse_stencil(stencil_set["D2"]["inner_stencil"])
24 closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"]) 27 closure_stencils = parse_stencil.(stencil_set["D2"]["closure_stencils"])
25 return second_derivative(g, inner_stencil, closure_stencils) 28 return second_derivative(g, inner_stencil, closure_stencils)
26 end 29 end
27 30
31 function second_derivative(g::EquidistantGrid, stencil_set::StencilSet, dim)
32 if dim != 1
33 throw(DomainError(dim, "Derivative direction must be 1."))
34 end
35 return second_derivative(g, stencil_set)
36 end
37
28 """ 38 """
29 second_derivative(g::EquidistantGrid, inner_stencil::Stencil, closure_stencils) 39 second_derivative(g::EquidistantGrid, inner_stencil::Stencil, closure_stencils)
30 40
31 The second derivative operator on an `EquidistantGrid`, given `inner_stencil` and 41 The second derivative operator on an `EquidistantGrid`, given `inner_stencil` and
32 `closure_stencils`. 42 `closure_stencils`.