# A way to store the "shape" of a convec polygon and divide them in fix grid in Taichi

Hi guys, I am having a bit of trouble with descibing a polygon in a 2d grid, hoping someone could suggest anything. Thx in advance

I couldn’t find a proper way to handle geometry of an cell using immerased boundary method in a fixed grid i.e. 1000 x 1000. My overall goal is to re-implemente the LBIBCell in Taichi. However, it seems pretty difficult to for me to think of a way for the shape of a polygon (cell) in lattice grid in Taichi.

I have the code here: https://github.com/wyq977/taichi_lbibcell
As shown in the gif on homepage, the simulation went well for Computational fluid dynamics (CFD) using Lattice Boltzmann methods, inspired by LBM_Taichi.

Since I cannot init. another variable to store upon each iteration, one has to come up with a plan to store a list of points (f32 or f64) and their connection.

Also, because the polygon (cell) are subject to tension/forces between each other, increasing mass (not described here) one has to find a way to remesh the polygon and finally divide along the longest axis or a random axis (representing cell division).

To put it simply, one has to come up with the following functionality to describe the reaction-diffusion as well as the fluid dynamics:

1. Find the cloestest lattice grid `point(i, j)` to the polygon geometry, (kind of done, see below, i, j are integer
2. Mark the cloestest as inner or outer
3. Remesh the geometry:
• For example, the 4 points for the cubes are too far away from each other, more points have to be inserted between those 4 points to capture the forces (tension)
4. Divide a polygon along certain axis

In the final version or current LBIBCell, the number of cells are not fixed due to division.

``````        self.boundary = ti.Vector.field(2, dtype=ti.f32, shape=(4,)) # store 4 points of a cube
``````

Currently, I could have one or mulutple variables representing multiple polygon (cell) geometry in the beginning. But the problem with that, I limit the resolution of the polygon since I cannot change/remesh edges/connecion later in simulation.

Ideal situation would be like this:

LBIBCell’s way to finding cloest grid points, figure of illustration below

1. for each edge (connection) AB, calculate all the coordiantes of points that AB intersects with grid line (x=1, 2,… and y = 1,2,…),basically finds the y=ax +b from AB cooridnates
2. Finds the closts grid point `p(i, j)` to those intersection
3. Find out the ones that are outside of the polygon

Since polygon like ABCDE may have edges horizontally or vertically align with the gird/axis, a little pertubation will be done before to avoid cases like AB is parallel to x = 0 or y = 0.

Thx you guys in advance and any suggestions would be much appreciated

Due to the limits on url in the forum for new users: the github issue might be a bit more informative: https://github.com/wyq977/taichi_lbibcell/issues/1

The idea is inspired by the homework:Homework0 计算流体力学视角的流体求解器