diff 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
line wrap: on
line diff
--- a/src/Grids/manifolds.jl	Fri Feb 07 08:44:36 2025 +0100
+++ b/src/Grids/manifolds.jl	Fri Feb 07 09:12:41 2025 +0100
@@ -68,23 +68,20 @@
 function connections(a::CartesianAtlas)
     c = Tuple{MultiBlockBoundary, MultiBlockBoundary}[]
 
-    N,M = size(a.charts)
-    for j ∈ 1:M, i ∈ 1:N-1
-        push!(c,
-            (
-                MultiBlockBoundary{(i,j), CartesianBoundary{1,UpperBoundary}}(),
-                MultiBlockBoundary{(i+1,j), CartesianBoundary{1,LowerBoundary}}(),
-            ),
-        )
-    end
-
-    for i ∈ 1:N, j ∈ 1:M-1
-        push!(c,
-            (
-                MultiBlockBoundary{(i,j), CartesianBoundary{2,UpperBoundary}}(),
-                MultiBlockBoundary{(i,j+1), CartesianBoundary{2,LowerBoundary}}(),
-            ),
-        )
+    for d ∈ 1:ndims(charts(a))
+        Is = eachslice(CartesianIndices(charts(a)); dims=d)
+        for i ∈ 1:length(Is)-1 # For each interface between slices
+            for jk ∈ eachindex(Is[i]) # For each block in slice
+                Iᵢⱼₖ = Tuple(Is[i][jk])
+                Iᵢ₊₁ⱼₖ = Tuple(Is[i+1][jk])
+                push!(c,
+                    (
+                        MultiBlockBoundary{Iᵢⱼₖ,   CartesianBoundary{d,UpperBoundary}}(),
+                        MultiBlockBoundary{Iᵢ₊₁ⱼₖ, CartesianBoundary{d,LowerBoundary}}(),
+                    )
+                )
+            end
+        end
     end
 
     return c