Mercurial > repos > public > sbplib_julia
diff src/Grids/mapped_grid.jl @ 1877:21e5fe1545c0 refactor/lazy_tensors/elementwise_ops
Merge default
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Mon, 27 Jan 2025 16:56:04 +0100 |
parents | 516eaabf1169 |
children | edee7d677efb f93ba5832146 |
line wrap: on
line diff
--- a/src/Grids/mapped_grid.jl Fri Jan 10 19:45:11 2025 +0100 +++ b/src/Grids/mapped_grid.jl Mon Jan 27 16:56:04 2025 +0100 @@ -82,8 +82,8 @@ jacobian_components = (:, free_variable_indices) # Create grid function for boundary grid jacobian - boundary_jacobian = componentview((@view g.jacobian[b_indices...]) , jacobian_components...) - boundary_physicalcoordinates = @view g.physicalcoordinates[b_indices...] + boundary_jacobian = componentview((@view g.jacobian[b_indices]) , jacobian_components...) + boundary_physicalcoordinates = @view g.physicalcoordinates[b_indices] return MappedGrid( boundary_grid(g.logical_grid, id), @@ -92,27 +92,27 @@ ) end - +# TODO: Make sure all methods of `mapped_grid` are implemented correctly and tested. """ mapped_grid(x, J, size::Vararg{Int}) A `MappedGrid` with a default logical grid on the D-dimensional unit hyper -box [0,1]ᴰ. `x` and `J`are functions to be evaluated on the logical grid +box [0,1]ᴰ. `x` and `J` are functions to be evaluated on the logical grid and `size` determines the size of the logical grid. """ function mapped_grid(x, J, size::Vararg{Int}) D = length(size) - lg = equidistant_grid(ntuple(i->0., D), ntuple(i->1., D), size...) - return mapped_grid(lg, x, J) + lg = equidistant_grid(ntuple(i->0., D), ntuple(i->1., D), size...) # TODO: Clean this up with ParamaterSpace once feature/grids/manifolds is merged + return mapped_grid(x, J, lg) end """ - mapped_grid(lg::Grid, x, J) + mapped_grid(x, J, lg::Grid) A `MappedGrid` with logical grid `lg`. Physical coordinates and Jacobian are determined by the functions `x` and `J`. """ -function mapped_grid(lg::Grid, x, J) +function mapped_grid(x, J, lg::Grid) return MappedGrid( lg, map(x,lg), @@ -121,6 +121,17 @@ end """ + mapped_grid(x, J, parameterspace, size) + +A `MappedGrid` with logical grid `lg`. Physical coordinates and Jacobian are +determined by the functions `x` and `J`. +""" +function mapped_grid(x, J, parameterspace, size::Vararg{Int}) + lg = equidistant_grid(parameterspace, size...) + return mapped_grid(x, J, lg) +end + +""" metric_tensor(g::MappedGrid) The metric tensor of `g` as a grid function. @@ -171,14 +182,8 @@ The outward pointing normal as a grid function on the corresponding boundary grid. """ function normal(g::MappedGrid, boundary) - b_indices = boundary_indices(g, boundary) - σ = _boundary_sign(component_type(g), boundary) - - # TODO: Refactor this when `boundary_indices(g, ...)` has been made iterable. - return map(jacobian(g)[b_indices...]) do ∂x∂ξ - ∂ξ∂x = inv(∂x∂ξ) - k = grid_id(boundary) - σ*∂ξ∂x[k,:]/norm(∂ξ∂x[k,:]) + return map(boundary_indices(g, boundary)) do I + normal(g, boundary, Tuple(I)...) end end