It is a file format that Dave Kinney (VSPAERO developer) and I recently created to support the evolution of VSPAERO. We iterated back and forth a few times and this is what we have right now. I would be open to input from other tool developers.
I documented the file format in the code
here. As with most code comments, it is already out of date. There were numerous changes Dave and I made along the way (the comment was the first idea). So, I have now updated the comment (will go into the next version), but accurate documentation is this:
nnode // Number of nodes
x1 y1 z1 // Nodal position. Also any future single-valued node-centered data that we desire to add.
x2 y2 z2
...
xnnode ynnode znnode // Last node
nface // Number of faces (currently only tris, but support polygons)
n1 i11 i12 i13...i1n // Number of points, index 1, 2, ... n for each face, right hand rule ordering for normals facing out.
n2 i21 i22 i23...i2n
...
nnface in1 in2... inn // Last polygon face
t1 u11 v11 u12 v12...u1n v1n // Tag number for face 1 followed by multi-valued nodal data -- currently parametric UV coordinate.
t2 u21 v21 u22 v22...u2n v2n // Also any other face-centered data that we desire to add.
...
tnface un1 vn2...unn vnn // Last tag, multi-valued nodal and face-centered data
nwake // Number of wake lines
n1 i11 i12 i13 i14...i1n // Number of points in wake line, indices in chain-order. Typically line wrapped at ten indices per line.
n2 i21 i22 i13 i24...i2n
...
nnwake in1 in2 in3 in4...inn // Last wake lineIf you don't trust the documentation (reasonable), you might trust the code -- there are two implementations of this file, the
CompGeom (with support
nodes,
faces,
data,
wake) and
CFDMesh version.
The U, V data makes it easier to treat unstructured wing meshes a bit like they were structured... Spanwise load distributions, strip-wise methods, etc. are easier than if you don't have any underlying structure. Also, it may improve the calculation when you go to take surface derivatives of the potential to calculate the surface velocities and pressure coefficient after solving.
Most file formats support either node-centered or face-centered data. Unfortunately, where two objects meet (think a sharp corner wing-body intersection), geometric properties at a common node can be multi-valued (think normal vector and U,V surface coordinates). We needed to support multi-valued U,V data at the nodes -- we considered a couple approaches, but settled on this one (ergo the changes in file format). Another good candidate would be to add multi-valued normal vectors. These would be based on the Bezier surfaces and therefore would be more accurate than you can calculate from the triangles.
The wake identification is there so you don't have to rely on any sort of heuristic based on normal vector angles to try to identify wakes. OpenVSP knows which components are wings - and it knows where the wakes are, so we use that information to make life easy. If you still want to specify a wake line at an aft facing step or something else, you're on your own. This will be a big benefit for rotors -- where the trailing edge sometimes points forward, making heuristic detection a little more tricky.
The file is set up to handle tris, quads, and n-sided polygons. This is more aspirational than reality -- VSPAERO does some work to reconstruct quads from the tris. It also does work to get rid of nasty sliver triangles and rebuild them into polygons. 'Some day' I would like OpenVSP to do some of that work based on information we already have. Until that happens, these files will be all tris.
Our other secret goal is to support mixed thick and thin representations with this file format. For example, the wings and propellers would be a thin (VLM) representation while bodies and fuselages would be thick (Panel) representation. The thin surfaces would still be trimmed by the thick surfaces. Version 3.22.0 added support for this idea for CompGeom (CFDMesh support will come). The VSPAERO solver already treats thick and thin geometry mostly the same, so the conversions to make this work should be modest. Finally, the OpenVSP GUI will need to be updated to allow the user to control and understand how to use mixed thick and thin models. (These changes will also overcome some current limitations in VSPAERO outputs, so OpenVSP will have to parse new data and present it in the Results Manager GUI).
The good news is, the mixed thick/thin business has absolutely no impact on the file format. So, if a tool (VSPAERO, DUST, Others?) wants to support mixed thick/thin models, they can do so. However, everything will still work fine for a user who chooses to write everything out as a thick (or thin) surface file.
Rob