7.4. Calculating Dynamic Derivatives using Sliding Interfaces#
This tutorial demonstrates how to obtain dynamic stability derivatives by oscillating a wing enclosed in a sliding interface. For readersโ convenience, the geometry file and the Python script
is provided.
Geometry and Mesh#
In this example, the geometry is a wing with NACA0012 airfoil.
The chord \(c\) = 1 m and the span \(b\) = 2 m.
So the moment_length
= [\(b\)/2, \(c\), \(b\)/2] = [1, 1, 1].
The moment_center
is set at [0, 0, 0], which is the airfoil quarter-chord point and midspan of the wing.
As shown in the following figure, there is a cylindrical sliding interface enclosing the wing.
The radius of the cylinder is 1 m and the length is 2.5 m.
The rotational center is also located at [0, 0, 0] and the axis of rotation is along the y-axis.

Fig. 7.4.1 Wing enclosed in sliding interface#
The mesh was generated using the automated meshing workflow. For more information about this automated meshing workflow please see Automated Meshing.
Case Setup#
The entire simulation contains two cases:
Steady case with a fixed sliding interface for initializing the flow field.
Unsteady case with an oscillating sliding interface for collecting the data.
The steady case is quite trivial since the sliding interface is stationary.
As for the unsteady case, the key is to correctly set up the input expression of the rotation angle \(\theta\) with AngleExpression
:
Where \(A\) is the amplitude of oscillation in radians,
omega
is the nondimensional angular frequency of the oscillation,
and t
is the nondimensional time. Note that omega
and t
are nondimensional variables of the Flow360 solver.
In this case we set \(A=0.0349066\text{ rad}\), equivalent to \(2\)ยฐ, so the pitching angle of the wing is oscillating between \(\pm 2\)ยฐ.
omega
is typically computed from the number of flowthroughs per radian, denoted by \(n\).
In this example, we have \(n = 2.5\) flowthru/rad, which means when omega*t
changes 1 radian, the air will flow through 2.5 chord lengths.
In this tutorial, the freestream velocity \(U_\infty=50\) m/s.
The physical angular frequency is given by,
Since we have the freestream speed of sound \(C_\infty = 340.294\) m/s and gridUnit = 1 m. The nondimensional angular frequency can be written as,
Therefore, the sliding interface is set up as:
1cylinder = fl.Cylinder(
2 name = "cylinder",
3 axis=[0, 1, 0],
4 center=[0, 0, 0],
5 inner_radius=0,
6 outer_radius=1.0,
7 height=2.5,
8)
9fl.Rotation(
10 volumes=cylinder,
11 spec=fl.AngleExpression("0.0349066 * sin(0.05877271 * t)"),
12)
Another critical value we need to set up carefully is the nondimensional timeStepSize
.
In this example, each period is spilt into 100 steps, therefore,
Postprocessing#
Once the case is completed, the user can download the โtotal_forces_v2.csvโ, where the first column is physical_step
.
Note that the flowfield was initialized from a steady case, so the nondimensional time can be written as,
In this example, the angle of attack \(\alpha\) is always identical to the pitch angle \(\theta\),
Therefore, \(\dot{\alpha}\) is always identical to the pitch rate \(q\).
The \(\dot{\alpha}\) at time step i
can be obtained by finite differencing \(\alpha\) at the i-1
and i+1
time step
Note that the unit of \(\dot{\alpha}\) in the equation above is rad/flowthru.
As shown in the following plot, when \(\alpha=0\), \(\dot{\alpha}\) will reach the extrema.

Fig. 7.4.2 Time History of CMy, \(\alpha\) and \(\dot{\alpha}\). The blue and red dots show when \(\dot{\alpha}\) reaches the extrema.#
If we plot CMy versus \(\dot{\alpha}\) and linearly fit the points with \(\alpha=0\) (i.e. min/max \(\dot{\alpha}\)) the slope of the fitted line is the dynamic derivative:

Fig. 7.4.3 Dynamic Derivative \(dCMy/d\dot{\alpha}\) i.e. \(dCMy/dq\).#