We can’t call it “what I did this summer” because Michael Honke was our first fall semester intern. But believe it or not, his time with us is already over and he gave his final presentation a couple weeks ago. I’m certain you’ll find his work interesting. Here are Michael, Mike Jefferies (Manager of Product Development) and Pat Baker (Director of Product Development).
Back in October, Michael Honke started his role as Scientific Technologist on our Product Development team. He came to us from the University of Waterloo in Canada where he is completing a masters degree in computer science. Prior to that, Michael had earned his undergraduate degree in Physics from the University of Winnipeg. Our Product Development team is responsible for all the code in the Pointwise software so Michael was going to be doing a lot of programming.
Adding Boundary Condition Support to Mesh File I/O
Michael’s first task was to extend some of our plugins (how Pointwise reads and writes various file formats and how you can customize the product by adding your own) by adding support for reading and writing boundary and volume conditions, a capability to be delivered in V18.3 R2. Michael added this capability to the plugins for FUN3D, CFD++, SU2, CRUNCH, and Gmsh. Now when you import a mesh from FUN3D, for example, the boundary conditions come with it. And after you’ve done your meshing work, those same boundary conditions are exported to a new file.
(Along the way Michael discovered a bug in Microsoft’s C++ compiler when building the optimized version of the code. Debug build worked just fine. He found it by looking at the assembly code, something no intern at Pointwise has ever done before.)
Incorporating the Asset Import Library
In order to expand Pointwise’s support for discrete geometry, Michael incorporated the open-source Asset Import Library to give the Pointwise import capability for over 40 file formats including OBJ and PLY. He did this by implementing the Common Asset Reader that operates as a separate process through which the import library reads the file and converts the data to an internal format. This very similar to how Pointwise reads native CAD files.
This new I/O capability is planned for release later in 2020.
Threading, Point Coloring, and Mesh Smoothing
A previous summer intern had implemented a point coloring method for improving the performance of mesh smoothing. Michael updated the algorithm used for the coloring (Catalyurek et al. 2012) and implemented a threaded version of it. This particular algorithm might be called sloppy in the sense that it first colors all the mesh nodes without regard to thread boundaries and then corrects any errors in a post-processing sweep. The performance turned out to be quite good as shown in the chart below for a computer with 20 threads.
For fun, Michael plotted the colors of all the nodes in a simple tetrahedral mesh for a cube.
And Now For Something Completely Different
We are currently generalizing Pointwise’s mesh data structures to support polyhedra using half-edge and half-face data structures. This is on-going work but far enough along that Michael could test it by assembling the Voronoi dual of an unstructured triangle mesh inside Pointwise by fitting that data into the new data structures. This worked out quite well as evidenced by the Voronoi mesh shown below for the upper surface of the wing of the ESAV notional aircraft.
Michael didn’t stop with a surface mesh and continued with the Voronoi dual of a tetrahedral mesh for an engine nacelle as shown below.
Michael’s work validated the groundwork we had already laid and moved us a step closer to bringing this into the production code.
Let’s have Michael summarize his time at Pointwise:
“I was able to develop actual parts of Pointwise that are now included in the main product. My experience was more of being a full-time developer, rather than an intern with a project.”
If you’d like to benefit from the fruits of Michael’s labor, now would be the time to request a free trial license of Pointwise for use generating your own CFD meshes.
P.S. Thanks to Prof. Christopher Batty at Waterloo for pointing Michael in our direction.
Was it standard Half Edge data structure? How do you deal with non-manifold edges in your DS implementation ?
The data structure uses simple vertex lists, but is convertible to a compact array based half edge data structure (similar to that described by Alumbaugh and Jiao http://www.ams.sunysb.edu/~jiao/papers/compact_mds.pdf) when connectivity of that type is needed, but only if the mesh edges are all manifold.
Pingback: Survey Results: Mesh Types, Part 2 | Another Fine Mesh
Pingback: Recombination of Voxel Transition Cells for OpenFOAM Meshes | Another Fine Mesh