comparison src/Grids/mapped_grid.jl @ 1659:3bbcd496e021 feature/grids/curvilinear

Add function for computing the normal at the boundary of a mapped grid as a grid function
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 28 Jun 2024 17:02:47 +0200
parents 64452a678e7a
children 6d196fb85133 5ea0299b45b4
comparison
equal deleted inserted replaced
1649:b02917bcd7d5 1659:3bbcd496e021
78 return map(jacobian(g)) do ∂x∂ξ 78 return map(jacobian(g)) do ∂x∂ξ
79 inv(∂x∂ξ'*∂x∂ξ) 79 inv(∂x∂ξ'*∂x∂ξ)
80 end 80 end
81 end 81 end
82 82
83 """
84 normal(g::MappedGrid, boundary)
85
86 The outward pointing normal as a grid function on the boundary
87 """
88 function normal(g::MappedGrid, boundary)
89 b_indices = boundary_indices(g, boundary)
90 σ =_boundary_sign(component_type(g), boundary)
91 return map(jacobian(g)[b_indices...]) do ∂x∂ξ
92 ∂ξ∂x = inv(∂x∂ξ)
93 k = grid_id(boundary)
94 σ*∂ξ∂x[k,:]/norm(∂ξ∂x[k,:])
95 end
96 end
97
98 function _boundary_sign(T, boundary)
99 if boundary_id(boundary) == Upper()
100 return one(T)
101 elseif boundary_id(boundary) == Lower()
102 return -one(T)
103 else
104 throw(ArgumentError("The boundary identifier must be either `Lower()` or `Upper()`"))
105 end
106 end