The current preferred method of geometry control in Jetstream is through Free Form Deformation (FFD) volumes and Axial Curves. This method was implemented by Hugo Gagnon. The underlying method is described in his thesis, here, although it has since been expanded, namely through the "Axial Control" interface described here. This page will describe its use in Jetstream.
An FFD volume is a NURBS volume that surrounds the geometry to be controlled. The B-spline control points of the geometry are then embedded inside the FFD volume. As the FFD volume is modified by changing the coordinates of the FFD control points, the underlying NURBS volume changes, and anything embedded inside it, such as the surface B-spline control points, are moved along with it. The FFD volume is often thought of as a block of rubber, so whenever it is deformed, anything embedded inside the rubber will move accordingly. In its most simple form, the x,y,z, coordinates of the FFD control points can be the geometric design variables. While very general, this isn't the most intuitive or straight forward way to control a wing geometry (although this approach is used for things such as ducts which don't have a wing form). For this, a second level of control is added: the axial curves and cross sections (called "xsec"s). Axial curves are a NURBS curve to which the FFD volumes are attached. As the control points of the axial curve are moved, the FFD moves with it. This is a simple way of controlling the wing planform. To control section parameters such as chord, twist, and section shape, slices of the FFD control polygon are taken at each spanwise index and grouped in to xsecs. These xsecs are tied to the axial curve and have their own local coordinate system to easily control section shape, twist, and chord. All of these control entities are illustrated in the image below.
In Jetstream, the use of FFDs is specified by setting jtstrm%ffd = .true., and if axial curves/xsecs are to be used, then jtstrm%axlffd = .true. is also required.
The files needed by Jetstream include
ffd.b: This is a binary file that specifies the FFD volume control points, knots, etc. that define the FFD volume(s).
axial.b: This is a binary file the specifies the axial curve control points, knots, etc. that define the axial curve(s).
axial.con: This is a text file that contains information about the FFD and axial curves, most importantly, what degrees of freedom (DOF) are active during an optimization. This file is described in detail below.
patch.con: This is a text file that specifies which face of which block is a B-spline surface patch. It is generated by the grid utility create_patch. When used with FFDs, it also lists which B-spline control points are embedded in which FFD. This last modification is made by Genair when the above files are created.
These are all generated by Genair. See Appendix A in the Genair manual here for instructions on how to generate these files from your Genair models and grids.
A sample axial.con file is shown below for a wing with two axials (and hence two FFDs).
The first block in the axial.con file specifies information about the xsecs on each axial, including the number of xsecs per axial and their parametric location along the curve. These are generated by Genair and should not be changed. The only thing that should be changes is the DOF of each xsec. This controls what geometric freedom, including twist, chord, and section shape is available to the optimizer at each xsec. The activity of these variables is turned on/off by assigning a bit of either 0 or 1 for each. This gives a bit number with three entries which can then be converted to a decimal number between 0-7 which is used in the input. Note that bit numbers are specified right-to-left. This conversion is done such as:
| shape | chord | twist || Decimal input |
-------------------------------------------
0 0 0 0 <-- none active
0 0 1 1 <-- twist active
. . . .
. . . .
. . . .
. . . .
1 1 0 6 <-- chord and shape active
1 1 1 7 <-- all active
So, in the axial.con file example above, the root section has section shape freedom and all the remaining sections have twist and section shape freedom.
The second block in the axial.con file specifies information about the axial control points. The "point", "type" (type specifies if the point is junction between two axials or not), "axial", and "index" entries are generated by Genair and only the DOF entry should be modified. The geometric design variables for the axial curves are the x, y, z, coordinates of the axial control points. A similar binary to decimal specification is used for the axial point freedom as for the xsec freedom, as shown below:
| delta z | delta y | delta x || Decimal input |
-------------------------------------------------
0 0 0 0 <-- none active
0 0 1 1 <-- x active
. . . .
. . . .
. . . .
. . . .
1 1 0 6 <-- y and z active
1 1 1 7 <-- all active