comparison src/Grids/manifolds.jl @ 1928:96b3e9c516fe feature/grids/manifolds

Make cartesian atlas work for any dimension
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 07 Feb 2025 09:12:41 +0100
parents fe18cdad2b27
children c5affb342e73
comparison
equal deleted inserted replaced
1927:fe18cdad2b27 1928:96b3e9c516fe
66 Base.size(a::CartesianAtlas) = size(a.charts) 66 Base.size(a::CartesianAtlas) = size(a.charts)
67 67
68 function connections(a::CartesianAtlas) 68 function connections(a::CartesianAtlas)
69 c = Tuple{MultiBlockBoundary, MultiBlockBoundary}[] 69 c = Tuple{MultiBlockBoundary, MultiBlockBoundary}[]
70 70
71 N,M = size(a.charts) 71 for d ∈ 1:ndims(charts(a))
72 for j ∈ 1:M, i ∈ 1:N-1 72 Is = eachslice(CartesianIndices(charts(a)); dims=d)
73 push!(c, 73 for i ∈ 1:length(Is)-1 # For each interface between slices
74 ( 74 for jk ∈ eachindex(Is[i]) # For each block in slice
75 MultiBlockBoundary{(i,j), CartesianBoundary{1,UpperBoundary}}(), 75 Iᵢⱼₖ = Tuple(Is[i][jk])
76 MultiBlockBoundary{(i+1,j), CartesianBoundary{1,LowerBoundary}}(), 76 Iᵢ₊₁ⱼₖ = Tuple(Is[i+1][jk])
77 ), 77 push!(c,
78 ) 78 (
79 end 79 MultiBlockBoundary{Iᵢⱼₖ, CartesianBoundary{d,UpperBoundary}}(),
80 80 MultiBlockBoundary{Iᵢ₊₁ⱼₖ, CartesianBoundary{d,LowerBoundary}}(),
81 for i ∈ 1:N, j ∈ 1:M-1 81 )
82 push!(c, 82 )
83 ( 83 end
84 MultiBlockBoundary{(i,j), CartesianBoundary{2,UpperBoundary}}(), 84 end
85 MultiBlockBoundary{(i,j+1), CartesianBoundary{2,LowerBoundary}}(),
86 ),
87 )
88 end 85 end
89 86
90 return c 87 return c
91 end 88 end
92 89