Cube with a Pulled Corner

We start with a mesh of the unit cube. The edges of the tetrahedra have lengths close to 0.1. We move the cube to lie in the first octant. In the figures below, we show the modified condition number of the elements.

  cp ../../../data/geom/mesh/33/cube_1_1_1_0.1.txt mesh.txt
  python.exe ../../../data/geom/mesh/utilities/vertices_map.py translate mesh.txt mesh.txt 
cubePullCornerMesh.jpg

The initial mesh of the cube. The minimum modified condition number is 0.58; the mean is 0.86.

We distort the mesh by moving the vertices according to the following function:

  x = x + x * x + y * y + z * z
  y = y + x * x + y * y + z * z
  z = z + x * x + y * y + z * z 

The distortion reduces the quality of the mesh.

  python.exe ../../../data/geom/mesh/utilities/vertices_map.py distort mesh.txt distorted.txt 
cubePullCornerDistorted.jpg

The distorted mesh. The minimum modified condition number is 0.22; the mean is 0.82.

First we use refinement to deal with the edges that have been stretched by pulling out the corner. We split any edge longer than 0.2.

  utility/boundary33.exe distorted.txt boundary.txt
  optimization/refine33.exe -length=0.2 -manifold=boundary.txt -dihedralAngle=0.5 distorted.txt r1t0g0.txt 
cubePullCornerR1T0G0.jpg

The mesh after refinement based on edge length. There are 10,785 cells. The minimum modified condition number is 0.20; the mean is 0.77.

We apply cycles of topological optimization followed by a sweep of geometric optimization to improve the quality of the distorted mesh. We use a dihedral angle deviation of 0.5 to define edge features on the boundary. Intersecting edge features form corner features.

  optimization/topologicalOptimize3.exe -manifold=boundary.txt -angle=0.5 r1t0g0.txt r1t1g0.txt
  optimization/geometricOptimize3.exe -boundary=boundary.txt -dihedralAngle=0.5 r1t1g0.txt r1t1g1.txt
  optimization/topologicalOptimize3.exe -manifold=boundary.txt -angle=0.5 r1t1g1.txt r1t2g1.txt
  optimization/geometricOptimize3.exe -boundary=boundary.txt -dihedralAngle=0.5 r1t2g1.txt r1t2g2.txt
  optimization/topologicalOptimize3.exe -manifold=boundary.txt -angle=0.5 r1t2g2.txt r1t3g2.txt
  optimization/geometricOptimize3.exe -boundary=boundary.txt -dihedralAngle=0.5 r1t3g2.txt r1t3g3.txt 
cubePullCornerR1T1G1.jpg

1 optimization cycle. The minimum modified condition number is 0.27; the mean is 0.83.

cubePullCornerR1T2G2.jpg

2 optimization cycles. The minimum modified condition number is 0.39; the mean is 0.85.

cubePullCornerR1T3G3.jpg

3 optimization cycles. The minimum modified condition number is 0.44; the mean is 0.86.

The optimization improves the quality of the mesh while retaining its edge and corner features. Vertices on surface features have been allowed to move within their surface patches. Vertices on edge features have been allowed to move along edges. Vertices on corner features have been fixed.

Another refinement approach is to refine the cells that have become distorted. We refine the cells whose modified condition number is less than 0.5.

  utility/cellAttributes33.exe -mcn distorted.txt mcn.txt
  utility/selectCells.exe -upper=0.5 mcn.txt indices.txt
  optimization/refineCells33.exe indices.txt distorted.txt rq1t0g0.txt 
cubePullCornerRQ1T0G0.jpg

The mesh after refinement based on cell quality. There are 8,608 cells. The minimum modified condition number is 0.21; the mean is 0.80.

We note that refining based on quality results in fewer edge splits than the refinement above based on edge length. Again we apply cycles of topological optimization followed by a sweep of geometric optimization to improve the quality of the distorted mesh. In terms of mesh quality, we obtain similar results to the refinement based on edge length.

cubePullCornerRQ1T3G3.jpg

3 optimization cycles. The minimum modified condition number is 0.39; the mean is 0.87.

Generated on Thu Jun 30 02:14:57 2016 for Computational Geometry Package by  doxygen 1.6.3