We consider point configurations in the 3-torus
As energy functional, we choose the Riesz energy, which is monotonic and purely dependend on the particles' diestance:
-
3D: The energy functional is considered between all points. -
2D: All points are projected into the same plane by setting$z=0$ . Then, we consider distances between all points in that plane, forgetting about the third dimension. -
2D-3: Since our ultimate goal is to place catenoidal necks where the points lie, for any point only adjacent layers should play a role in determining the energy functional. To model this, for each point a copy is placed in the layer below and above, shadowing its behavior. Then, interactions occuring between points inside a layer are considered.
In each of these cases, the last step of the optimization procedure is to sufficiently separate the points so the catenoidal necks don't intersect. This is done by a heavy penalization when points are too close in the Manhattan distance.
julia> ]
(@v1.8) pkg> add DisorderedPointClusters
The method generateGridLayers takes as input the fineness of the grid (50), the amount of points that are placed per layer (7), the amount of parallel planes (6) and the radius of the catenoidal necks (3). In addition, there are a few options that may be changed, such as maxIter determining the amount of Monte Carlo steps, monteCarloStartPoints determining the amount of repetitions, MD_Method which chooses between the three discussed options of energy associated to the catenoids or NGrid2 allowing for non-square grids.
julia> generateGridLayers(50, 7, 4, 3; MD_Method="2D-3", maxIter = 35000, monteCarloStartPoints = 2)
This input results in the following image:
