Axes, Points, and Frames¶
In simulating flapping-wing dynamics and aerodynamics, Ptera Software uses several vector-valued quantities. To avoid ambiguity, these vectors often require additional details about their interpretation, such as axis systems, reference points, and reference frames. While generally simpler to denote, some scalar quantities can also require additional details to avoid ambiguity.
This document lays out Ptera Software’s notation for defining vectors and scalars using these constructs. The notation and terminology I use is an extended version of that introduced in “Flight Vehicle Aerodynamics” by Mark Drela.
Axis Systems vs. Reference Points vs. Reference Frames¶
An axis system, also called “axes,” contains information about three directions. In Ptera Software, all axes are Cartesian, meaning their three basis directions are linear, not angular.
Reference points, also called “points,” contain information about the location of a particular point in space.
Lastly, a reference frame, also called a “frame,” contains information about the location of an “observer,” and their motion relative to what is observed.
Consider the arbitrary vector r, which exists in 3D space. For now, let’s say that r is a force vector. In order to express r using components (x, y, z), we must, at a minimum, pick an axis system. If instead r is a position vector, we need both axes and a reference point to serve as an origin, so we must pick both before writing down r’s three components. The same is true if r is a moment, but now the reference point no longer serves as an origin, but instead the point about which the moment acts. Lastly, if r is some time derivative of position, such as a velocity or acceleration vector, then we no longer need a reference point, but we do require both an axis system and a reference frame. Finally, some scalar quantities, such as speed, also depend on an observer’s reference frame.
It is worth being precise about what a moment’s reference point does and does not mean when the moment is transformed. Because the reference point is the point the moment acts about, and not an origin, expressing the same moment in a different axis system is a pure rotation of its components, exactly like a force or a velocity; the reference point only records which moment it is, and has no bearing on the rotation. Changing a moment’s reference point is a separate, physical operation that requires its own formula rather than a coordinate transformation. A moment is therefore never re-referenced by a transformation’s translation; a homogeneous transform only ever rotates it, the same way it rotates a force or a velocity (in code, this is is_position set to False; see Angle Vectors and Transformations).
Due to the nested structure of Ptera Software’s geometry objects, in practice, many vector-valued quantities like positions and moments, use reference points and axes that are defined locally within a given object. For information on how axes are defined relative to one another, and how vectors can be transformed within an axis system, read through Angle Vectors and Transformations
Specifying Axes, Points, and Frames¶
Given the varied requirements for vector-valued quantities, it is important that we are very specific when assigning them variable names or referencing them in text. Also, due to the hierarchical structure of Ptera Software’s objects, additional specificity may be required depending on the context. For example, if we use a force vector within the Wing class that references wing axes, we still need to specify that this vector is given in wind axes, but we don’t (and can’t) specify which of the parent Airplane’s Wing’s axes we mean. In contrast, if we declare a variable inside the Wing class that references wing cross section axes, we must specify which of the Wing’s WingCrossSections’s axes we are referring to.
Patterns¶
There are four useful combinations of axes, points, and frames. For variables that fall into each of these three cases, we denote them by appending information to their variable names using IDs. When referencing the variables in comments and docstrings, we add this additional information parenthetically using names:
Axes without a point and without a frame
[variable name]_[axes ID]
“[variable name] (in [axes name])”
Axes without a point and with a frame
[variable name]_[axes ID]__[frame ID]
“[variable name] (in [axes name], observed from the [frame name])”
Axes with a point and without a frame
[variable name]_[axes ID]_[point ID]
“[variable name] (in [axes name], relative to the [point name])”
Only a frame (for scalar values like speed)
[variable name]__[frame ID]
“[variable name] (observed from the [frame name])”
The correct name and ID for a particular axis system, point, or frame depends on the level of context. However, in all cases IDs consist of a series of abbreviations, moving in scope from most specific to least specific. By contrast, names move from least specific to most specific. Also, in contrast with IDs, the exact syntax for names is slightly flexible to allow for the description to sound correct in plain English.
The standard abbreviations and names are given below for reference. See the section for a particular axis system, point, or frame for examples of the correct IDs and names in various contexts.
ID Abbreviations and Names¶
E: Earth
B: body
P: airplane
W: wind
Pr: problem
G: geometry
Gs: geometry axes (after accounting for symmetry)
Wn: wing
Wcs…: wing cross section
…i: inner
…o: outer
Wcsp: wing cross section parent
A…: airfoil
…i: inner
…o: outer
Eo: Earth origin
Cg: center of gravity (CG)
Cgs: CG (after accounting for symmetry)
Ler: leading edge root point
Lp: leading point
Lpp: leading point parent
Slep: strip leading edge point
…pp…: panel point
Fr…: front right
Fo…: forward outer
Fl…: front left
Fi…: forward inner
Bl…: back left
Bi…: backward inner
Br…: back right
Bo…: backward outer
C…: collocation
…r[m]c[n]: (m, n)
…hvp…: horseshoe vortex point
Fr…: front right
Fl…: front left
Bl…: back left
Br…: back right
…b…: bound
…w…: wake
…r[m]c[n]: (m, n)
…[n]: n
…rvp…: ring vortex point
Fr…: front right
Fl…: front left
Bl…: back left
Br…: back right
C…: centroid
…b…: bound
…w…: wake
…r[m]c[n]: (m, n)
…lvp…: line vortex point
S…: start
E…: end
C…: center
…f: front leg
…l: left leg
…b: back leg
…r: right leg
Axis Systems¶
1. The Earth axis system¶
Basis directions
+x: North
+y: East
+z: Down
Right-handed
Ownership: None
References
Text: …in Earth axes…
Variables: …_E…
2. Body axes¶
Basis directions
+x: Towards the front of the Airplane
+y: Towards the right of the Airplane
+z: Towards the bottom of the Airplane
Right-handed
Ownership: Airplane
Local reference examples
Text: …in body axes…
Variables: …_B…
Non-local reference examples
Text: …in the first Airplane’s body axes…
Variables: …_BP1…
3. Wind axes¶
Caveat: We assume a still airmass, so the freestream velocity observed from the body frame is solely due to the Airplane’s velocity observed from the Earth frame.
Basis directions
+x: In line with (parallel, not anti-parallel, to) Airplane’s velocity observed from the Earth frame
+y: In the direction perpendicular to first and third components*
+z: In the direction perpendicular to first and second components*
*There are infinite options for the second and third components that satisfy the perpendicularity requirement. Therefore, we define them using a thought experiment: Imagine three unit vectors pointing along the body axes’ basis directions. There is exactly one pair of angles, which we’ll call -alpha (note the negative sign) and beta, that we can use to perform a y-z extrinsic series (or, equivalently, a z-y’ intrinsic series) of rotations to construct wind axes from body axes that will exactly align the x-axis with Airplane’s velocity observed from the Earth frame. This series of rotations also constructs the wind axes +y and +z basis directions. The two angles alpha and beta are known as the angle of attack and the angle of sideslip. Wind axes are commonly defined using these angles. This is because they are intuitively understood by many aerodynamicists: in the simplest scenarios, a positive alpha corresponds to the Airplane’s nose pointing above its direction of travel (relative wind coming from below the aircraft), and a positive beta to its nose pointing to the left of its direction of travel (relative wind coming from the right of the aircraft). However, this can seem a bit cyclical, and it obscures some subtlety in their definition: defining alpha and beta using the convention described previously allows us to define lift as the aerodynamic force’s component in the wind axes’ -z basis direction, thereby making lift independent of sideslip.
Alternative way to think about basis directions (for small |alpha| and |beta|):
+x: Approximately towards the front of the Airplane
+y: Approximately towards the right of the Airplane
+z: Approximately towards the bottom of the Airplane
Right-handed
Ownership: SteadyProblem or UnsteadyProblem
Local reference examples
Text: …in wind axes…
Variables: …_W…
Non-local reference examples
Text: …in the first Problem’s wind axes…
Variables: …_WPr1…
4. Geometry axes¶
Basis directions
+x: Towards the back of the Airplane (aft)
+y: Towards the right of the Airplane
+z: Towards the top of Airplane
Right-handed
Ownership: Airplane
Local reference examples
Text: …in geometry axes…
Variables: …_G…
Non-local reference examples
Text: …in the first Airplane’s geometry axes…
Variables: …_GP1…
5. Geometry axes (after accounting for symmetry)¶
Basis directions: For a given Wing, the basis directions are identical to that Wing’s Airplane’s geometry axes if the Wing is non-symmetric or symmetric-continuous. For mirror-only Wings, the basis directions are that Wing’s Airplane’s geometry axes reflected about that Wing’s symmetry plane.
Right-handed for non-symmetric and symmetric-continuous Wings. Left-handed for mirror-only Wings.
Ownership: Wing
Local reference examples
Text: …in geometry axes (after accounting for symmetry)…
Variables: …_Gs…
Airplane-local reference examples
Text: …in geometry axes (after accounting for the first Wing’s symmetry)…
Variables: …_Gs1…
Non-local reference examples
Text: …in the first Airplane’s geometry axes (after accounting for its second Wing’s symmetry)…
Variables: …_Gs2P1…
6. Wing axes¶
Basis directions
+x: Towards the back of the Wing at its root
+y: From a Wing’s root towards its second WingCrossSection’s plane
+z: Towards the top surface of the Wing
Right-handed for non-symmetric and symmetric-continuous Wings. Left-handed for mirror-only Wings.
Ownership: Wing
Local reference examples
Text: …in wing axes…
Variables: …_Wn…
Airplane-local reference examples
Text: …in the first Wing’s axes…
Variables: …_Wn1…
Non-local reference examples
Text: …in the first Airplane’s second Wing’s axes…
Variables: …_Wn2P1…
7. Wing cross section axes¶
Basis directions
+x: Towards the trailing edge in the WingCrossSection’s plane
+y: Normal to the WingCrossSection’s plane in the direction of the next WingCrossSection
+z: Towards the top surface of the Wing
Right-handed for WingCrossSections of non-symmetric and symmetric-continuous Wings. Left-handed for WingCrossSections of mirror-only Wings.
Ownership: WingCrossSection
Local reference examples
Text: …in wing cross section axes…
Variables: …_Wcs…
Wing-local reference examples
Text: …in the first WingCrossSection’s axes…
Variables: …_Wcs1…
Airplane-local reference examples
Text: …in the second Wing’s third WingCrossSection’s axes…
Variables: …_Wcs3Wn2…
Non-local reference examples
Text: …in the first Airplane’s second Wing’s first WingCrossSection’s axes…
Variables: …_Wcs1Wn2P1…
8. Wing cross section parent axes¶
Basis directions: Identical to Wing axes for a Wing’s first WingCrossSection, and identical to the previous WingCrossSection’s axes for subsequent ones.
Right-handed for WingCrossSections of non-symmetric and symmetric-continuous Wings. Left-handed for WingCrossSections of mirror-only Wings.
Ownership: WingCrossSection
Local reference examples
Text: …in wing cross section parent axes…
Variables: …_Wcsp…
Wing-local reference examples
Text: …in the second WingCrossSection’s parent axes…
Variables: …_Wcsp1…
Airplane-local reference examples
Text: …in the second Wing’s third WingCrossSection’s parent axes…
Variables: …_Wcsp3Wn2…
Non-local reference examples
Text: …in the first Airplane’s second Wing’s first WingCrossSection’s parent axes…
Variables: …_Wcsp1Wn2P1…
9. Airfoil axes¶
Basis directions
+x: Chordwise towards the Airfoil’s trailing point
+y: Normal to the chord towards the Airfoil’s upper line
Two-dimensional
Ownership: Airfoil
Local reference examples
Text: …in airfoil axes…
Variables: …_A…
Wing-local reference examples
Text: …in the second WingCrossSection’s Airfoil’s axes…
Variables: …_AWcs2…
Airplane-local reference examples
Text: …in the second Wing’s third WingCrossSection’s Airfoil’s axes…
Variables: …_AWcs3Wn2…
Non-local reference examples
Text: …in the first Airplane’s second Wing’s first WingCrossSection’s Airfoil’s axes…
Variables: …_AWcs1Wn2P1…
Reference Points¶
1. Earth origin¶
A fixed point serving as the global spatial origin
Ownership: None
References
Text: …relative to the Earth origin…
Variables: …_Eo
2. CG¶
Position of the Airplane’s CG
Ownership: Airplane
Local reference examples
Text: …relative to the CG…
Variables: …_Cg
Non-local reference examples
Text: …relative to the first Airplane’s CG…
Variables: …_CgP1
3. CG (after accounting for symmetry)¶
For a non-symmetric or symmetric-continuous Wing, this identical to its Airplane’s CG. For mirror-only Wings, it is their Airplane’s CG reflected across that Wing’s symmetry plane.
Ownership: Wing
Local reference examples
Text: …relative to the CG (after accounting for symmetry)…
Variables: …_Cgs
Airplane-local reference examples
Text: …relative to the CG (after accounting for the first Wing’s symmetry)…
Variables: …_Cgs1
Non-local reference examples
Text: …relative to the first Airplane’s CG (after accounting for its second Wing’s symmetry)…
Variables: …_Cgs2P1
4. Leading edge root point¶
Root point of the Wing’s leading edge
Ownership: Wing
Local reference examples
Text: …relative to the leading edge root point…
Variables: …_Ler
Airplane-local reference examples
Text: …relative to the first Wing’s leading edge root point…
Variables: …_Ler1
Non-local reference examples
Text: …relative to the first Airplane’s second Wing’s leading edge root point…
Variables: …_Ler2P1
5. Leading point¶
The leading point of the WingCrossSection
Ownership: WingCrossSection
Local reference examples
Text: …relative to the leading point…
Variables: …_Lp
Wing-local reference examples
Text: …relative to the first WingCrossSection’s leading point…
Variables: …_Lp1
Airplane-local reference examples
Text: …relative to the second Wing’s first WingCrossSection’s leading point…
Variables: …_Lp1Wn2
Non-local reference examples
Text: …relative to the first Airplane’s second Wing’s first WingCrossSection’s leading point…
Variables: …_Lp1Wn2P1
6. Leading point parent¶
For a Wing’s first WingCrossSection, this is the Wing’s leading edge root point. For subsequent WingCrossSections, this is the previous WingCrossSection’s leading point.
Ownership: WingCrossSection
Local reference examples
Text: …relative to the leading point parent)
Variables: …_Lpp
Wing-local reference examples
Text: …relative to the first WingCrossSection’s leading point parent)
Variables: …_Lpp1
Airplane-local reference examples
Text: …relative to the second Wing’s first WingCrossSection’s leading point parent)
Variables: …_Lpp1Wn2
Non-local reference examples
Text: …relative to the first Airplane’s second Wing’s first WingCrossSection’s leading parent point…
Variables: …_Lpp1Wn2P1
7. Panel points¶
The front right, front left, back left, back right, and collocation points of a Panel
Ownership: Panel
Local reference examples
Text: …relative to the panel front right point…
Variables: …_Frpp
Wing-local reference examples
Text: …relative to the (3, 2) Panel’s front right point…
Variables: …_Frppr3c2
Airplane-local reference examples
Text: …relative to the second Wing’s (3, 2) Panel’s front right point…
Variables: …_Frppr3c2Wn2
Non-local reference examples
Text: …relative to the first Airplane’s second Wing’s (3, 2) Panel’s front right point…
Variables: …_Frppr3c2Wn2P1
8. Bound horseshoe vortex points¶
Only relevant in steady horseshoe vortex lattice method simulations
The front right, front left, back left, and back right points of a bound horseshoe vortex
Ownership: horseshoe vortex
Local reference examples
Text: …relative to the bound horseshoe vortex front right point…
Variables: …_Frbhvp
Wing-local reference examples
Text: …relative to the (3, 2) Panel’s bound horseshoe vortex’s front right point…
Variables: …_Frbhvpr3c2
Airplane-local reference examples
Text: …relative to the second Wing’s (3, 2) Panel’s bound horseshoe vortex’s front right point…
Variables: …_Frbhvpr3c2Wn2
Non-local reference examples
Text: …relative to the first Airplane’s second Wing’s (3, 2) Panel’s bound horseshoe vortex’s front right point…
Variables: …_Frbhvpr3c2Wn2P1
9. Bound ring vortex points¶
The front right, front left, back left, and back right points of a bound ring vortex
Ownership: ring vortex
Local reference examples
Text: …relative to the bound ring vortex front right point…
Variables: …_Frbrvp
Wing-local reference examples
Text: …relative to the (3, 2) Panel’s bound ring vortex’s front right point…
Variables: …_Frbrvpr3c2
Airplane-local reference examples
Text: …relative to the second Wing’s (3, 2) Panel’s bound ring vortex’s front right point…
Variables: …_Frbrvpr3c2Wn2
Non-local reference examples
Text: …relative to the first Airplane’s second Wing’s (3, 2) Panel’s bound ring vortex’s front right point…
Variables: …_Frbrvpr3c2Wn2P1
10. Wake horseshoe vortex points¶
Only relevant in steady horseshoe and steady ring vortex lattice method simulations
The front right, front left, back left, and back right points of a wake horseshoe vortex
Ownership: horseshoe vortex
Local reference examples
Text: …relative to the wake horseshoe vortex front right point…
Variables: …_Frwhvp
Wing-local reference examples
Text: …relative to the third wake horseshoe vortex’s front right point…
Variables: …_Frwhvp3
Airplane-local reference examples
Text: …relative to the second Wing’s third wake horseshoe vortex’s front right point…
Variables: …_Frwhvp3Wn2
Non-local reference examples
Text: …relative to the first Airplane’s second Wing’s third wake horseshoe vortex’s front right point…
Variables: …_Frwhvp3Wn2P1
11. Wake ring vortex points¶
Only relevant in unsteady ring vortex lattice method simulations
The front right, front left, back left, and back right points of a wake ring vortex
Ownership: ring vortex
Local reference examples
Text: …relative to the wake ring vortex front right point…
Variables: …_Frwrvp
Wing-local reference examples
Text: …relative to the (3, 2) wake ring vortex’s front right point…
Variables: …_Frwrvpr3c2
Airplane-local reference examples
Text: …relative to the second Wing’s (3, 2) wake ring vortex’s front right point…
Variables: …_Frwrvpr3c2Wn2
Non-local reference examples
Text: …relative to the first Airplane’s second Wing’s (3, 2) wake ring vortex’s front right point…
Variables: …_Frwrvpr3c2Wn2P1
12. Line vortex points¶
The start, end, and center points of a line vortex
Ownership: line vortex
Local reference examples
Text: …relative to the line vortex start point…
Variables: …_Slvp
Parent-vortex-local reference examples
Text: …relative to the bound horseshoe vortex’s front line vortex’s center point…
Variables: …_Clvpf
Wing-local reference examples
Text: …relative to the (3, 2) bound horseshoe vortex’s front line vortex’s center point…
Variables: …_ClvpfBhvr3c2
Airplane-local reference examples
Text: …relative to the second Wing’s (3, 2) bound horseshoe vortex’s front line vortex’s center point…
Variables: …_ClvpfBhvr3c2Wn2
Non-local reference examples
Text: …relative to the first Airplane’s second Wing’s (3, 2) bound horseshoe vortex’s front line vortex’s center point…
Variables: …_ClvpfBhvr3c2Wn2P1
13. Strip leading edge point (SLEP)¶
Only relevant in aeroelastic simulations
The front-left panel point of the root (innermost) panel of a spanwise strip. Each non-tip WingCrossSection defines one strip and therefore one SLEP. In stacked panel arrays,
_Slepis used without a numeric index to implicitly mean “relative to the SLEP of the panel’s own strip,” rather than referring to a single named point.Ownership: Wing
Local reference examples
Text: …relative to the strip leading edge point…
Variables: …_Slep
Wing-local reference examples
Text: …relative to the third strip’s leading edge point…
Variables: …_Slep3
Airplane-local reference examples
Text: …relative to the second Wing’s third strip’s leading edge point…
Variables: …_Slep3Wn2
Non-local reference examples
Text: …relative to the first Airplane’s second Wing’s third strip’s leading edge point…
Variables: …_Slep3Wn2P1
Reference Frames¶
1. Earth reference frame¶
Inertial
Attached rigidly to the Earth
Ownership: None
References
Text: …observed from the Earth frame…
Variables: …__E
2. Body reference frame¶
Non-inertial
Attached rigidly to the Airplane’s body
Ownership: Airplane
Local reference examples
Text: …observed from the body frame…
Variables …__B
Non-local reference examples
Text: …observed from the second Airplane’s body frame…
Variables …__BP2
3. Wing reference frame¶
Non-inertial
Attached rigidly to the root of a Wing’s leading edge
Ownership: Wing
Local reference examples
Text: …observed from the wing frame…
Variables …__Wn
Airplane-local reference examples
Text: …observed from the second Wing’s frame…
Variables …__Wn2
Non-local reference examples
Text: …observed from the fourth Airplane’s second Wing’s frame…
Variables …__Wn2P4
4. Wing cross section reference frame¶
Non-inertial
Attached rigidly to the leading point of a WingCrossSection
Ownership: WingCrossSection
Local reference examples
Text: …observed from the wing cross section frame…
Variables …__Wcs
Wing-local reference examples
Text: …observed from the third WingCrossSection’s frame…
Variables …__Wcs3
Airplane-local reference examples
Text: …observed from the second Wing’s third WingCrossSection’s frame…
Variables …__Wcs3Wn2
Non-local reference examples
Text: …observed from the fourth Airplane’s second Wing’s third WingCrossSection’s frame…
Variables …__Wcs3Wn2P4
5. Wing cross section parent reference frame¶
Non-inertial
Attached rigidly to the leading parent point of a WingCrossSection
Ownership: WingCrossSection
Local reference examples
Text: …observed from the wing cross section parent frame…
Variables …__Wcsp
Wing-local reference examples
Text: …observed from the third WingCrossSection’s parent frame…
Variables …__Wcsp3
Airplane-local reference examples
Text: …observed from the second Wing’s third WingCrossSection’s parent frame…
Variables …__Wcsp3Wn2
Non-local reference examples
Text: …observed from the fourth Airplane’s second Wing’s third WingCrossSection’s parent frame…
Variables …__Wcsp3Wn2P4