Jetstream is setup with a number of constraints for the most common optimization problems, such as geometric or lift constraints. This guide will describe the most frequently used ones. This guide will assume that you are using the Axial Control Framework. This implies that all the constraints discussed here (as well as some more specialized ones which won't be described here) are implemented in initAxialCtrlOptimize and usrfunAxlCtrl. If you are doing a more specialized problem, such a flutter-constrained optimization of using the PMDO framework, speak to a senior lab member to get more information.
Linear geometric constraints, namely those that act on the FFD or Axial curve point, for the Axial Control Framework are described on the Axial Control Framework page.
Nonlinear geometric constraints are those that are typically calculated on the geometry itself, often on the patches, instead of the FFD or axial curve points. These include:
Projected area constraint: This constrains the area projected in the jtstrm%prj_area_di direction (defaults to 3) to be equal to some value. It is an equality constraint. It is activated with jtstrm% prj_area_cnstrnt and the target is set with jtstrm% prj_area. This constraint should only be active if there is planform freedom including chord and/or span otherwise it is likely to be infeasible.
Surface area constraint: This constrains the surface area to be some value. Activated with jtstrm% area_cnstrnt and is constrained to the value set in jtstrm% area. It is rarely used.
Volume constraint: This constrains the internal volume to be greater than or equal to the target value. It is activated with jtstrm% vol_cnstrnt and the minimum bound is set with jtstrm% volume.
Warning: The quadrature method used to calculate the volume assumes that the volume to be calculated is completely enclosed (for the code, this means enclosed by surfaces whose block type is 1 or >= 100.) That is, there cannot be any "holes" in the geometry. This is generally not a problem, however, the volume calculation routines have the option to only calculate the volume contributions of certain blocks. If one is not careful, using this feature would produce erroneous results! Consult a senior lab member or the source code to learn more.
Thickness constraints: See Thickness constraints
Sectional area constraints: See Sectional Area Constraints
Leading edge radius constraints: See Leading Edge Radius Constraints
Internal shape constraint: This constraint forces the surface to be "outside" of a shape specified by an internal shape file. This can be used, for example, to make sure the surface of a hybrid wing-body does not violate a cabin shape. It is activated with jtstrm% internal_shape = .true. and a shape file specified by jtstrm% intshape_file. The shape file is a Tecplot formatted file in BLOCK format, with the X, Y, Z coordinates of a mesh that defines the shape. Two Zones are required: The first defines the lower surface of the shape and the second is the upper surface of the shape. This order is important since the aerodynamic surface is forced to lie below (lower z) than the surface defined in the first Zone and above (higher z) than that defined in the second Zone. A sample cabin shape is illustrated below.
Common aerodynamic constraints that are available for most cases include:
Lift constraint: Lift equality constraint activated with op_pts% lift_cnstrnt(:) for each operating point, with the target value specified with op_pts% cltars(:). Like all forces/coefficients in Jetstream, the lift target is specified in C_L * S with S in grid-units. E.g. if the target C_L is 0.5 and the wing area after nondimensionalization is 2.80 then the lift target value would be 1.40.
Moment equality constraint: Pitching moment equality constraint activated with op_pts% mmnt_cnstrnt(:) for each operating point, with the target value specified with op_pts% cmtars(:). Like all forces/coefficients in Jetstream, the target is specified in C_M * S with S in grid-units. The moment reference point is specified by diablo% sumpt(1:3). This constraint should only be active at one operating point (unless control surfaces are active) otherwise the optimization problem is likely to be infeasible.
Moment inequality constraint: Pitching moment inequality constraint activated with op_pts% mmntieq_cnstrnt(:) for each operating point, with the target value specified with op_pts% cmtars(:). Like all forces/coefficients in Jetstream, the target is specified in C_M * S with S in grid-units. The moment reference point is specified by diablo% sumpt(1:3). Whether the constraint is a minimum or maximum constraint can be set with op_pts% cmtars_ftarg(:) where +1 corresponds to a lower bound on C_M (the default) and -1 corresponds to an upper bound.
Bending moment constraint: A bending moment constraint is activated with op_pts% bend_cnstrnt(:) and the upper bound is set with op_pts% bend_upp(:).
Static margin constraint: A static margin constraint is activated with op_pts% mrgn_cnstrnt(:) with the lower bound set with op_pts% mrgn_low(:). The bound is specified in fraction of the reference length used to nondimensionalize the grid. For example, if the MAC is used to nondimensionalize the grid, then the bound would be specified as a fraction of the MAC as is conventionally done. The same moment reference point specified in diablo% sumpt(1:3) as used for the pitching moment constraint is used. This constraint should only be applied at one operating point, otherwise the optimization problem is likely to be infeasible.