[关闭]
@why-math 2016-01-25T10:46:05.000000Z 字数 3826 阅读 829

Interface-fitted polyhedra mesh based on Cartesian mesh

科研笔记


Algorithm

Given a cube domain which include the interface with level set function , and a mesh size .

Generate the Cartesian mesh with size . Here is a matrix, are the three coordinates of -th node; is a matrix, and are the row indices of the eight vertex nodes of -th element in matrix, and represents -th small cube.

Find the interface small cubes. Here the interface elements inlcude:
1. exist at least two vertex nodes and with opposite sign, namely .
2. exist at least three vertex nodes on the interface, namely the value of on these three vertex nodes are 0.

Classify the small cubes by exterior cube,interiror cube and interface cubes,and label them by 1, -1 and 0, respectively.

Take all of the interface cubes which composite a new hex mesh , and find all the boundary faces of this new hex mesh. Notice that, these boundary faces are square faces, and they will be the faces of the polyhedra mesh we will construct to fit the interface.

Next let us try to find the triangle faces of the polyhedra mesh near the interface by Delaunay triangulation algorithm.

Firstly, find the cut edge and the cut points by interface . Find all the edges which is a matrix, and are the row indices of the two end nodes of -th edge. For a edge , if , we take it as cutted edge by interface . Then one can find the cutted points of all cutted edge by bisection method.

Seccondly, find the auxiliary points. For a interface cube, if it has at least one square face whos two opposite vertices on the interface by lucky coincidence, we call the center point of this square face as auxiliary points, and put all the cutted points, all the auxiliary points and all vertex nodes of all interface cubes together as a new point set . Then construct Delaunay mesh on . Here we add the auxiliary points to make sure the interface can be recovered certainly.

Next, we need to get rid of some unnecessary tets in , and just keep the tets in every interface cubes. Since is a cartesian mesh, so we can number every small cubes in these hex mesh. More inmportantly, given a points in domain , we can easily known wich small cubes it blong to. For a tet in , we compute its centroid point, and find the small cube element it blong to. If the small cube element is not a interface cubes, then get rid of this tet from .

The above process can't guarantee to get rid of all unnecessary tets in . So we need an another criterion, if four vertex nodes of a tet are in different cubes, we remove it from . One just need to compare the difference of the maximum and the minimum of the coordinates of the four vertex nodes on the same dimension, if the difference is bigger than size , this tet is unnecessary.

Now we have a tet mesh whos tets are all in interface cubes, and we still call this tet mesh as for convenience. Remember that, given a tet in , we know which small interface cube it blong to.

Next we split the tets in to two part: exterior tet set and interior tet set . For a tet in , if the minimum of the value of the four vertex nodes is -1, we put it into . And

For , find the triangle faces whos two neighbor tets on different small interface cubes, and the triangle faces whos three vertex nodes are on interface which are the interface triangles and their direction point outside of the interface. Pay attention that, here we don't find the boundary triangle faces of which are not interface triangles. Recall that, we have find the boundary square faces when we find all the interface cubes.

For , we do the same thing like on .

In most cases, every interface cube is cutted into two part and every one is a polyhedron. And we need to set a unique ID for these two part. For the interior part, we set its ID by the small interface cube index, e.g., ; for the polyhedron in the exterior part, we set its ID by . So when you find the square or triangle faces, remember record the polyhedron ID it blong to.

Of course the IDs of the polyhedra mesh we get are not continuous. One can make it continuous easily.

Currently, there are some complex cases which can't deal with by above algorithm. For example, the small interface cube is split into more parts than two. We need do more work to make the algorithm more robust. One key problem, how to reconstruct the three parts if a small interface cube is cutted into three or more than three parts by interface.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注