From e33013da7674a862bb5f820a92f928b5028bac89 Mon Sep 17 00:00:00 2001
From: Florian Atteneder <florian.atteneder@uni-jena.de>
Date: Mon, 20 Nov 2023 23:36:31 +0100
Subject: [PATCH] wip

---
 src/amr.jl | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 src/amr.jl

diff --git a/src/amr.jl b/src/amr.jl
new file mode 100644
index 00000000..81bcb5c0
--- /dev/null
+++ b/src/amr.jl
@@ -0,0 +1,46 @@
+struct AdaptiveMesh{TMesh<:Mesh} <: AbstractMesh
+  mesh::TMesh
+end
+
+
+const AMesh{T} where T = AdaptiveMesh{T}
+
+
+regrid!(mesh, cache, evolution) = nothing
+
+
+function regrid!(amesh::AMesh{Mesh1d}, cache, evolution::Evolution)
+  # compute new tree layout
+  newtree = compute_tree_layout(amesh.mesh, cache, evolution)
+  # legalize new tree layout
+  # set up new mesh for new tree layout
+  # resize evolution.stages and use them as caches for interpolation (could also use any
+  # of the static variables from the cache)
+  # interpolate data from old mesh to new mesh
+  # resize all caches
+end
+
+
+function compute_tree_layout(mesh::Mesh1d, cache, evolution)
+  # dummy method
+  nc = n_cells(mesh.tree)
+  flags = rand((-1,0,1), nc)
+  legalize!(flags, mesh.tree.cells)
+  # setup refined tree??
+end
+
+
+function legalize!(flags, cells)
+  # search all -1s and check their neighbors
+  for (i,f) in zip(flags)
+    f == -1 || continue
+    c = cells[i]
+    il, ir = c.neighbors
+    if has_neighbor(c, Cart1d.Xmin) && flags[il] == 1
+      flags[il] = 0
+    end
+    if has_neighbor(c, Cart1d.Xmax) && flags[ir] == 1
+      flags[il] = 0
+    end
+  end
+end
-- 
GitLab