.. _introduction: ============ Introduction ============ ``pyGeo`` is a package for generating and manipulating geometry, particularly for applications involving shape optimization. .. figure:: images/DPW4_FFD-27745.gif :width: 600 :align: center Manipulation of individual control points on an FFD volume of an airplane ---------- Background ---------- *Shape optimization* is a field of engineering that uses applied mathematics and computer simulation to find the best possible shape for an object, such as an aircraft or a ship. To do this, optimization software needs to perturb a baseline geometry into a new shape at each iteration. Users define *design variables* which map numeric inputs from the optimizer to changes in the geometry. Examples of geometric design variables include: - Span, aspect ratio, and sweep in a wing design problem - Freeboard, deadrise, and beam for a ship design problem - Blade length, twist distribution, and airfoil shape modes for a wind turbine problem The set of all geometric design variables and their effects on the baseline geometry is called a *parameterization*. Parameterizations are not unique, and choosing a good one is both an art and a science. There are two primary approaches to geometry parameterization: generative and deformative. In pyGeo, we primarily use a free form deformation (FFD) approach, which belongs to the latter category. This approach does not require the parameterization of the baseline geometry (as is the case for a generative approach such as CAD) because we only parameterized the changes with respect to the unperturbed geometry Some geometries that can be generated by a parameterization are not allowable for physical or other engineering reasons. For this reason, *geometric constraints* must often also be imposed (such as a minimum volume inside a car's cabin, or a wing thickness). ``pyGeo`` enables users to set up a variety of geometric parameterizations and geometric constraints. It is particularly useful for *gradient-based* optimization because it provides accurate derivatives of geometry with respect to the design variables. ------------------- Package Description ------------------- The package consists of the following high-level modules: - **DVGeometry** (short for "Design Variable Geometry") parameterizes and modifies geometry (pointsets) in shape optimization problems, using the free-form deformation (FFD) method - **DVGeometryMulti** parameterizes multiple geometric components using multiple FFDs and handles design changes near component intersections - **DVGeometryESP** enables CAD-based geometry parameterization using Engineering Sketch Pad (ESP) software - **DVGeometryVSP** enables conceptual geometry parameterization using the Vehicle Sketch Pad (OpenVSP) software - **DVConstraints** allows users to constrain important geometric parameters during optimization (such as thicknesses and volumes) - **pyGeo** generates spline surfaces, either from geometry files or user-defined wing surfaces