OpenVSP and Pointwise Work Together to Simplify CFD on New Vehicle Designs
By Travis Carrigan
You are in the conceptual design phase of a project and looking at an unconventional design. What is the best way to rapidly iterate the design and perform a wide array of high-fidelity trade studies? The answer: parameterization.
Parameterizing the entire geometry allows you to quickly generate a self-constrained set of designs, and OpenVSP (www.openvsp.org) is making this easier for conceptual aircraft design.
OpenVSP is a parametric vehicle design tool that has been under development for NASA for more than 20 years. Over the past 10 years, development of OpenVSP has accelerated, with primary focus on providing efficient connections to increasingly sophisticated physics-based analysis tools. Today, OpenVSP has thousands of users throughout government, industry, and academia who recognize its ease of use, flexibility, and speed from idea to analysis result.
One of OpenVSP's main objectives is to reduce the burden of producing geometry-based input for higher-order, physics-based analysis such as computational fluid dynamics (CFD). By streamlining the process from concept to analysis, OpenVSP can help reduce the design cycle time dramatically and give engineers the ability to analyze unconventional designs and validate lower order empirical models. To do this efficiently, there is a need to quickly and automatically generate high quality viscous grids ready for simulation from an OpenVSP design. This prompted us to investigate two approaches to integrate OpenVSP and Pointwise.
OpenVSP Mesh to T-Rex
The first approach involves generating an isotropic unstructured surface mesh in OpenVSP using its CFD Mesh function and importing the resulting STL-formatted surface mesh into Pointwise. A Glyph script was written to import the STL, generate the farfield topology, assemble and initialize the viscous unstructured grid using T-Rex (anisotropic tetrahedral extrusion), and export the result to any CFD solver supported by Pointwise. This process is automatic and invisible to the designer. Only a handful of parameters have been exposed so that the designer can spend more time in OpenVSP with their model and effortlessly generate a viscous grid when necessary.
Figure 1: High quality, manifold STL geometries generated using OpenVSP's CFD Mesh utility. The orange aircraft is the Future Transport designed by Philip Barnes, while the multi-colored aircraft is a generic transport provided by Rob McDonald.
OpenVSP to Pointwise via STEP
It is best to work with the analytic surface definitions rather than discrete information when the user requires more control over the meshing process and needs anisotropy on the surface. Therefore, the second approach involves importing OpenVSP models using the STEP file format. Although OpenVSP's STEP export functionality is still in development, this article illustrates the validity of this approach and shows how Solid Meshing in Pointwise can be used to generate watertight models that enable automated surface and volume meshing.
Both approaches require the user to generate a surface mesh suitable for unstructured viscous meshing. Because the quality of the volume mesh generated by T-Rex is highly dependent on the quality of the surface mesh, I will start by introducing a collection of strategies and best practices for handling gaps, areas of high curvature, and sharp feature edges. These best practices are software agnostic and apply whether a user elects to generate a surface mesh using CFD Mesh or Pointwise.
Unstructured Viscous Meshing Best Practices
1. Meshing Small Gaps
Small gaps in features or between features pose a significant challenge for meshing. Capturing high gradients in these regions requires that the grid be sufficiently fine. The problem is further exacerbated by the fact that viscous resolution is often necessary and collisions in the extruding fronts become a concern. T-Rex, our unstructured viscous meshing tool, prevents collisions from occurring as fronts are marching away from the surface by use of a parameter called the Collision Buffer. The Collision Buffer can be thought of as a walking stick for the marching front. When the front detects an imminent collision, it will stop locally, and most likely prematurely if the resolution on the surface is not fine enough. If the fronts must stop before reaching isotropy, not much room is left for high quality isotropic tetrahedra to be developed once T-Rex has finished. Therefore, it is advised that a higher Collision Buffer be used in these situations to allow for additional room between advancing fronts for higher quality tetrahedra to be generated.
There is a point at which the Collision Buffer will not help improve the quality. This occurs when the surface spacing does not allow the extruding front to reach a nearly isotropic state before an imminent collision is detected. It does not matter how high the Collision Buffer is, the space left between the approaching fronts will not be large enough for high quality elements to be generated, as shown in Figure 4.
The recommended solution is to decrease the lateral grid spacing along the surface. This can be done using a separate domain, a baffle, or using curvature based refinement if underlying curvature exists. In any case, a reduced surface spacing means that the front will travel fewer steps before reaching isotropy. The goal is to set the surface spacing such that the front will reach a nearly isotropic state as the Collision Buffer kicks in so the resulting tetrahedra generated after T-Rex has finished will also be nearly isotropic.
2. Resolving High Curvature (Leading Edges)
Areas of high curvature, such as the leading edge of a wing, can be resolved using two different surface meshing techniques: anisotropic refinement (2-D T-Rex) and isotropic refinement.
Anisotropic refinement using 2-D T-Rex in Pointwise results in a lower cell/point count. This is because cells are packed normal to the leading edge and stretched in the spanwise direction. For a wing, the flow tends to impinge on the leading edge (or close to the leading edge) and split. While there is a component of the flow in the spanwise direction, this component is significantly smaller than the component traveling in the chordwise direction. With cells packed normal to the leading edge, gradients can be approximated more accurately. The secondary effect of using anisotropic refinement in areas of high curvature is a more regular discretization of the surface. This is, of course, compared to the irregular discretization encountered during isotropic surface refinement.
Isotropic refinement involves using isotropic elements (quads or triangles) to capture areas of high curvature. Though a valid technique, this often results in high surface cell/point counts due to the number of elements required to accurately resolve the geometry and resulting flow field. Rather than packing cells normal to the leading edge, cells must be packed in the spanwise direction. Either anisotropic refinement or isotropic refinement can be used in these situations, but if cell/point count is a major concern, we suggest using anisotropic refinement.
3. Handling Convex Corners (Trailing Edges)
The trailing edge of a wing can be geometrically represented in a number of ways. Most common trailing edges encountered are either sharp or blunt. A sharp trailing edge consists of a convex corner often more than 270 degrees and therefore requires special treatment when using T-Rex to generate the volume mesh. On the other hand, a blunt trailing edge will have two convex corners, each with an angle of less than 270 degrees and does not require any additional treatment.
If the trailing edge is sharp, ensure that the T-Rex parameter labeled Full Layers is set to zero to allow multiple normals during the extrusion. As T-Rex advances the faces off the surface, it will compute the cell face normals of adjacent elements. In doing so, T-Rex can detect concave and convex regions and react appropriately. With Full Layers turned off, T-Rex will elect to splay multiple marching normals off a convex corner. The number of normals used depends on the angle and is automatically chosen to allow the extruding front to wrap smoothly around the corner. The result can be seen in Figure 7.
One side effect of multiple normals is large volume ratios in the volume mesh. Without significantly increasing the cell count, this is unavoidable. While most modern solvers can account for this deficiency, large volume ratios can cause inconsistent interpolation errors that can affect the integrity of the solution. However, if only a single normal is used by setting Full Layers equal to unity or higher, poor skewness is often the result and is often less desirable than large volume ratios.
A blunt trailing edge is desired and realistic. With Full Layers set to unity or higher, a single normal is used in the marching direction at each convex corner. Because several elements are used to resolve the flat trailing edge, elements can still wrap smoothly around both corners and result in a high quality viscous volume mesh. It is true that at each corner there is a localized area of relatively high skewness, but this can be reduced significantly by decreasing the chordwise spacing at each corner.
Using OpenVSP and Pointwise Together
As mentioned in the introduction, there are two methods for going from conceptual design in OpenVSP to CFD meshing in Pointwise. The first involves generating the surface mesh in OpenVSP. The second involves transferring the geometry to Pointwise via STEP.
Surface Meshes from OpenVSP
Putting all the previous best practices to work, a surface mesh can be generated to yield a high quality viscous volume mesh. For OpenVSP users who wish to stay in OpenVSP, CFD Mesh can generate isotropic triangular surface grids. The result can be exported as an STL and imported into Pointwise as a surface mesh. This is an attractive solution for Glyph scripting and automating the volume meshing process with T-Rex.
When generating a surface mesh in OpenVSP, a number of facilities exist to control the surface mesh according to best practices. The global mesh controls are typically used to provide curvature based refinement and are analogous to Pointwise's unstructured surface meshing parameters. Therefore, a good rule of thumb is to set up the controls to provide sufficient resolution to the bulk geometry – features like the fuselage, wing, pod, and tail components. Do not worry about capturing the leading or trailing edges just yet.
Once an initial surface mesh has been generated, it is time to refine gaps, areas of high curvature, and convex features. Sources provide an efficient means of doing local refinement. In fact, because OpenVSP is parametric, a number of default sources exist for each component. For example, the default sources for a wing encompass the leading edge, trailing edge, root and tip. The location, size, and target triangle edge length for each source can be adjusted.
CFD Mesh will be illustrated by meshing the pylon and nacelle of the Future Transport aircraft. During the initial setup, the meshing values chosen were based solely on the bulk geometry and the minimum acceptable cell size values. A maximum edge length of 0.25 units and a minimum edge length of 0.01 units were used to accurately resolve the fuselage and main wing, but the smaller features lacked the surface mesh resolution ultimately desired. Adding default sources and locally refining them helped to further resolve the nacelle body while also helping to capture the leading and trailing edge of the pylon.
Once the surface mesh is complete, it can be exported to Pointwise as an STL. Pointwise can import the STL as either geometry or a surface mesh. When imported as a surface mesh, only the farfield domains need to be constructed to close the fluid volume around the aircraft. T-Rex can then be used to generate the final volume mesh.
Because the process of generating the volume mesh is easily reproducible, it has been scripted using our Glyph scripting language. Once the STL has been exported from OpenVSP, the user simply executes the script and it will import the STL as a surface mesh into Pointwise, generate the farfield domains, create the block, run T-Rex, and export the result to the solver of choice. Only a handful of parameters have been exposed to the user to further reduce complexity. In the end, the volume meshing process is nearly invisible to the user. Figures 15 and 16 show several cuts through the final volume mesh.
Figure 15: T-Rex generates prism elements (white) in the boundary layer region followed by tetrahedra (blue) in the farfield. The prism elements are able to march smoothly out of the concave corners constrained by the pylon-nacelle and pylon-body.
If multiple CAE boundary conditions must be specified on the surface, or if variable wall spacing is required, then it is advantageous to use the multi-solid STL option. In OpenVSP, surfaces can be assigned names prior to export. Upon import, Pointwise will recognize the various solids and import each as a separate domain. The result is a manifold collection of domains that have the same names specified in OpenVSP and can be used to provide additional control when generating the volume mesh and exporting to a CFD solver.
Geometry from OpenVSP
Analytic geometry is recommended if additional meshing control is necessary. The latest version of OpenVSP will support STEP export. Using this export option, each component is exported as a collection of B-spline surfaces. Upon import, Pointwise creates a quilt and model for each B-spline, topology that relates the final surface mesh to the underlying parameterization of the surfaces. Because the geometry is clean, models that represent the original components in OpenVSP can quickly be created. At this point, a collection of intersecting manifold models exists in Pointwise.
The models can be trimmed with each other using the Edit, Trim by Surfaces command in Pointwise. The trimming operation results in clean intersections whereby all internal geometry has been removed. The result can quickly be stitched into a single watertight model using the Assemble, Models command. And once the model has been created, quilts can be assembled to define regions that represent the original engineering intent of the aircraft. For example, quilts can be assembled to form the fuselage, the upper surface of the wing, and the lower surface of the wing. In Pointwise, each quilt when meshed receives a single unstructured domain. Therefore, quilting can be used to define the topology of the resulting surface mesh and enable automated surface meshing. This article describes how quilting can make surface meshing easier.
With the model created and the quilts defined, an initial isotropic surface mesh can be generated in a single click. However, one advantage of generating the surface mesh within Pointwise is the ability to create anisotropic surface elements to reduce the cell/point count. Therefore, 2-D T-Rex is used to resolve the leading and trailing edges of the wings, vertical, and horizontal stabilizers. Further refinement can be accomplished on a per domain level if necessary.
The last step is the creation of the farfield domains and initialization of the unstructured block using T-Rex. The process from import to volume mesh generation was done by hand for this example, but this webinar for the NASA CRM geometry demonstrates how easily it can be scripted.
A few months ago I had the pleasure of presenting this work at the OpenVSP Workshop in San Luis Obispo, California. More recently, at the Pointwise User Group Meeting in Anaheim, California, Rob McDonald, one of the primary developers of OpenVSP, and I further expanded upon this work and introduced additional ways (multi-solid STL & STEP export) that OpenVSP can interface with Pointwise. My hope is that this article serves as a reference for anyone interested in parametric design and users of both OpenVSP and Pointwise interested in performing viscous CFD calculations.
If you'd like to try the script that imports the OpenVSP generated surface mesh and automatically generates a volume mesh in Pointwise, please feel free to download the script VSP2CFD from the Glyph Script Exchange on GitHub. Just press the button below.