Skip to content

Curved Meshing

Daniel Zaide edited this page Feb 19, 2016 · 19 revisions

Curved Meshing Support

This wiki will describe the current status of curved meshing in CRV, and the current and upcoming work.

Documentation

Doxygen exists for all header files in the crv directory, using make doc from the build directory. Mathematical details are found in bezier.tex in the crv directory, and can be compiled from the build directory using bash ../latex.sh

Curved Shapes

Only simplices are supported at this time for 2D (x-y) and 3D meshes. There is no support for surface meshes at this time.

The following curved entities are supported

  • 2nd order Lagrange, all shapes
  • 2nd-6th order Full Bezier Simplices
  • 2nd-6th order Blended Bezier Simplices
  • 4th order Full G1 tetrahedra (G1 Triangles on the model boundaries, Bezier Tetrahedra elsewhere)
  • 4th order Blended G1 tetrahedra (G1 Triangles on the model boundaries, Blended Tetrahedra elsewhere)

In theory, up to 18th order Bezier Simplices are supported, however the integration points only go up to 6th order, so there would be an error when trying to measure areas or volumes.

Curved Meshing Algorithm

Given a linear mesh and a geometry (Parasolid File, analytic geometry definition), boundary edges and triangles can be snapped to the geometry at node locations in parametric space.

The current set of points used are from Chen and Babuska, 1995, and are better for interpolating than evenly spaced locations.

For Bezier entities, interpolating point locations are converted to Bezier control points. On the interior, the mesh remains linear, thus only meshes with convex domains can be safely curved at this time.

The algorithm is as follows for Bezier entities:

  1. For each entity on the boundary, snap the nodes to the CAD geometry, resulting in each high order node interpolating the geometry. This is done hierarchically, edges then faces.
  2. Synchronize all part boundaries across cores.
  3. Convert the interpolating points to Bezier control points using the transformation matrix going downward, with internal nodes on the tetrahedron, followed by internal nodes on the triangle and finally edge nodes converted to control points.
  4. Synchronize all part boundaries across cores.

This procedure works reasonably well in parallel. There are still several questions about how often this needs to be done, but once other operations (shape correction, refinement, coarsening), the time spent in the initialization of the curved mesh will be less critical.

Nektar++

Nektar++ is currently modified to call APF for mesh queries. This is achieved using a Nektar++ input XML file with information about the APF mesh and Parasolid Geometry. All spatial location and Jacobian queries are made through APF, with information such as surface normals calculated from the Jacobian matrix.

  • Flow between two plates, domain is a cube.
  • Poisson's Equation on a sphere.
  • Hagen-Poiseuille Flow through a Cylinder

Current Work

Current work is on implementing adaptive quality checks, using the convergence property of the Bezier control points to calculate the bounds of Jacobian determinant, and thus determine validity of curved triangles and tetrahedra.

To do list

The current to do list consists of porting mesh modification operations from FMDB to APF, See Kai's 2014 paper.

  • Entity Reshaping
  • Refinement
  • Coarsening
Clone this wiki locally