Mercurial > repos > public > sbplib_julia
comparison src/SbpOperators/volumeops/laplace/laplace.jl @ 1562:efa994405c38 feature/sbp_operators/laplace_curvilinear
Add attempt at laplace for mapped grids
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 25 Apr 2024 09:34:34 +0200 |
parents | 08f06bfacd5c |
children | d359d0d7fb12 |
comparison
equal
deleted
inserted
replaced
1561:6fdc81860b0c | 1562:efa994405c38 |
---|---|
50 Δ += LazyTensors.inflate(laplace(g.grids[d], stencil_set), size(g), d) | 50 Δ += LazyTensors.inflate(laplace(g.grids[d], stencil_set), size(g), d) |
51 end | 51 end |
52 return Δ | 52 return Δ |
53 end | 53 end |
54 laplace(g::EquidistantGrid, stencil_set) = second_derivative(g, stencil_set) | 54 laplace(g::EquidistantGrid, stencil_set) = second_derivative(g, stencil_set) |
55 | |
56 | |
57 function laplace(g::MappedGrid, stencil_set) | |
58 J = jacobian_determinant(g) | |
59 J⁻¹ = map(inv, J) | |
60 | |
61 Jḡ = map(*, J, ggeometric_tensor_inverse(g)) | |
62 lg = logicalgrid(g) | |
63 | |
64 return mapreduce(+, CartesianIndices(first(ḡ))) do I | |
65 i,j = I[1], I[2] | |
66 Jgⁱʲ = componentview(Jḡ, I[1], I[2]) | |
67 | |
68 if i == j | |
69 J⁻¹∘second_derivative_variable(lg, Jgⁱʲ, stencil_set, i) | |
70 else | |
71 Dᵢ = first_derivative(lg, stencil_set, i) | |
72 Dⱼ = first_derivative(lg, stencil_set, j) | |
73 J⁻¹∘Dᵢ∘DiagonalTensor(Jgⁱʲ)∘Dⱼ | |
74 end | |
75 end | |
76 end |