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