LinearAeroelastic
- class sharpy.linear.assembler.linearaeroelastic.LinearAeroelastic[source]
Assemble a linearised aeroelastic system
The aeroelastic system can be seen as the coupling between a linearised aerodynamic system (System 1) and a linearised beam system (System 2).
The coupled system retains inputs and outputs from both systems such that
\[\mathbf{u} = [\mathbf{u}_1;\, \mathbf{u}_2]\]and the outputs are also ordered in a similar fashion
\[\mathbf{y} = [\mathbf{y}_1;\, \mathbf{y}_2]\]Reference the individual systems for the particular ordering of the respective input and output variables.
The settings that this solver accepts are given by a dictionary, with the following key-value pairs:
Name
Type
Description
Default
aero_settings
dict
Linear UVLM settings
None
beam_settings
dict
Linear Beam settings
None
uvlm_filename
str
Path to .data.h5 file containing UVLM/ROM state space to load
track_body
bool
UVLM inputs and outputs projected to coincide with lattice at linearisation
True
use_euler
bool
Parametrise orientations in terms of Euler angles
True
- assemble()[source]
Assembly of the linearised aeroelastic system.
The UVLM state-space system has already been assembled. Prior to assembling the beam’s first order state-space, the damping and stiffness matrices have to be modified to include the damping and stiffenning terms that arise from the linearisation of the aeordynamic forces with respect to the A frame of reference. See
sharpy.linear.src.lin_aeroela.get_gebm2uvlm_gains()
for details on the linearisation.Then the beam is assembled as per the given settings in normalised time if the aerodynamic system has been scaled. The discrete time systems of the UVLM and the beam must have the same time step.
The UVLM inputs and outputs are then projected onto the structural degrees of freedom (obviously with the exception of external gusts and control surfaces). Hence, the gains \(\mathbf{K}_{sa}\) and \(\mathbf{K}_{as}\) are added to the output and input of the UVLM system, respectively. These gains perform the following relation:
\[\begin{split}\begin{bmatrix}\zeta \\ \zeta' \\ u_g \\ \delta \end{bmatrix} = \mathbf{K}_{as} \begin{bmatrix} \eta \\ \eta' \\ u_g \\ \delta \end{bmatrix} =\end{split}\]\[\mathbf{N}_{nodes} = \mathbf{K}_{sa} \mathbf{f}_{vertices}\]If the beam is expressed in modal form, the UVLM is further projected onto the beam’s modes to have the following input/output structure:
Returns:
- get_gebm2uvlm_gains(data)[source]
Provides:
the gain matrices required to connect the linearised GEBM and UVLM
inputs/outputs
the stiffening and damping factors to be added to the linearised GEBM equations in order to account for non-zero aerodynamic loads at the linearisation point.
The function produces the gain matrices:
Kdisp
: gains from GEBM to UVLM grid displacementsKvel_disp
: influence of GEBM dofs displacements to UVLM grid velocities.Kvel_vel
: influence of GEBM dofs displacements to UVLM grid displacements.Kforces
(UVLM->GEBM) dimensions are the transpose than theKdisp and Kvel* matrices. Hence, when allocation this term,
ii
andjj
indices will unintuitively refer to columns and rows,
respectively.
And the stiffening/damping terms accounting for non-zero aerodynamic forces at the linearisation point:
Kss
: stiffness factor (flexible dof -> flexible dof) accounting for non-zero forces at the linearisation point.Csr
: damping factor (rigid dof -> flexible dof)Crs
: damping factor (flexible dof -> rigid dof)Crr
: damping factor (rigid dof -> rigid dof)
Stiffening and damping related terms due to the non-zero aerodynamic forces at the linearisation point:
\[\mathbf{F}_{A,n} = C^{AG}(\mathbf{\chi})\sum_j \mathbf{f}_{G,j} \rightarrow \delta\mathbf{F}_{A,n} = C^{AG}_0 \sum_j \delta\mathbf{f}_{G,j} + \frac{\partial}{\partial\chi}(C^{AG}\sum_j \mathbf{f}_{G,j}^0)\delta\chi\]The term multiplied by the variation in the quaternion, \(\delta\chi\), couples the forces with the rigid body equations and becomes part of \(\mathbf{C}_{sr}\).
Similarly, the linearisation of the moments results in expression that contribute to the stiffness and damping matrices.
\[\mathbf{M}_{B,n} = \sum_j \tilde{X}_B C^{BA}(\Psi)C^{AG}(\chi)\mathbf{f}_{G,j}\]\[\delta\mathbf{M}_{B,n} = \sum_j \tilde{X}_B\left(C_0^{BG}\delta\mathbf{f}_{G,j} + \frac{\partial}{\partial\Psi}(C^{BA}\delta\mathbf{f}^0_{A,j})\delta\Psi + \frac{\partial}{\partial\chi}(C^{BA}_0 C^{AG} \mathbf{f}_{G,j})\delta\chi\right)\]The linearised equations of motion for the geometrically exact beam model take the input term \(\delta \mathbf{Q}_n = \{\delta\mathbf{F}_{A,n},\, T_0^T\delta\mathbf{M}_{B,n}\}\), which means that the moments should be provided as \(T^T(\Psi)\mathbf{M}_B\) instead of \(\mathbf{M}_A = C^{AB}\mathbf{M}_B\), where \(T(\Psi)\) is the tangential operator.
\[\delta(T^T\mathbf{M}_B) = T^T_0\delta\mathbf{M}_B + \frac{\partial}{\partial\Psi}(T^T\delta\mathbf{M}_B^0)\delta\Psi\]is the linearised expression for the moments, where the first term would correspond to the input terms to the beam equations and the second arises due to the non-zero aerodynamic moment at the linearisation point and must be subtracted (since it comes from the forces) to form part of \(\mathbf{K}_{ss}\). In addition, the \(\delta\mathbf{M}_B\) term depends on both \(\delta\Psi\) and \(\delta\chi\), therefore those terms would also contribute to \(\mathbf{K}_{ss}\) and \(\mathbf{C}_{sr}\), respectively.
The contribution from the total forces and moments will be accounted for in \(\mathbf{C}_{rr}\) and \(\mathbf{C}_{rs}\).
\[\delta\mathbf{F}_{tot,A} = \sum_n\left(C^{GA}_0 \sum_j \delta\mathbf{f}_{G,j} + \frac{\partial}{\partial\chi}(C^{AG}\sum_j \mathbf{f}_{G,j}^0)\delta\chi\right)\]Therefore, after running this method, the beam matrices will be updated as:
>>> K_beam[:flex_dof, :flex_dof] += Kss >>> C_beam[:flex_dof, -rigid_dof:] += Csr >>> C_beam[-rigid_dof:, :flex_dof] += Crs >>> C_beam[-rigid_dof:, -rigid_dof:] += Crr
Track body option
The
track_body
setting restricts the UVLM grid to linear translation motions and therefore should be used to ensure that the forces are computed using the reference linearisation frame.The UVLM and beam are linearised about a reference equilibrium condition. The UVLM is defined in the inertial reference frame while the beam employs the body attached frame and therefore a projection from one frame onto another is required during the coupling process.
However, the inputs to the UVLM (i.e. the lattice grid coordinates) are obtained from the beam deformation which is expressed in A frame and therefore the grid coordinates need to be projected onto the inertial frame
G
. As the beam rotates, the projection onto theG
frame of the lattice grid coordinates will result in a grid that is not coincident with that at the linearisation reference and therefore the grid coordinates must be projected onto the original frame, which will be referred to asU
. The transformation between the inertial frameG
and theU
frame is a function of the rotation of theA
frame and the original position:\[C^{UG}(\chi) = C^{GA}(\chi_0)C^{AG}(\chi)\]Therefore, the grid coordinates obtained in
A
frame and projected onto theG
frame can be transformed to theU
frame using\[\zeta_U = C^{UG}(\chi) \zeta_G\]which allows the grid lattice coordinates to be projected onto the original linearisation frame.
In a similar fashion, the output lattice vertex forces of the UVLM are defined in the original linearisation frame
U
and need to be transformed onto the inertial frameG
prior to projecting them onto theA
frame to use them as the input forces to the beam system.\[\boldsymbol{f}_G = C^{GU}(\chi)\boldsymbol{f}_U\]The linearisation of the above relations lead to the following expressions that have to be added to the coupling matrices:
Kdisp_vel
terms:\[\delta\boldsymbol{\zeta}_U= C^{GA}_0 \frac{\partial}{\partial \boldsymbol{\chi}} \left(C^{AG}\boldsymbol{\zeta}_{G,0}\right)\delta\boldsymbol{\chi} + \delta\boldsymbol{\zeta}_G\]Kvel_vel
terms:\[\delta\dot{\boldsymbol{\zeta}}_U= C^{GA}_0 \frac{\partial}{\partial \boldsymbol{\chi}} \left(C^{AG}\dot{\boldsymbol{\zeta}}_{G,0}\right)\delta\boldsymbol{\chi} + \delta\dot{\boldsymbol{\zeta}}_G\]
The transformation of the forces and moments introduces terms that are functions of the orientation and are included as stiffening and damping terms in the beam’s matrices:
Csr
damping terms relating to translation forces:\[C_{sr}^{tra} -= \frac{\partial}{\partial\boldsymbol{\chi}} \left(C^{GA} C^{AG}_0 \boldsymbol{f}_{G,0}\right)\delta\boldsymbol{\chi}\]Csr
damping terms related to moments:\[C_{sr}^{rot} -= T^\top\widetilde{\mathbf{X}}_B C^{BG} \frac{\partial}{\partial\boldsymbol{\chi}} \left(C^{GA} C^{AG}_0 \boldsymbol{f}_{G,0}\right)\delta\boldsymbol{\chi}\]
The
track_body
setting.When
track_body
is enabled, the UVLM grid is no longer coincident with the inertial reference frame throughout the simulation but rather it is able to rotate as theA
frame rotates. This is to simulate a free flying vehicle, where, for instance, the orientation does not affect the aerodynamics. The UVLM defined in this frame of reference, namedU
, satisfies the following convention:The
U
frame is coincident with theG
frame at the time of linearisation.The
U
frame rotates as theA
frame rotates.
Transformations related to the
U
frame of reference:The angle between the
U
frame and theA
frame is always constant and equal to \(\boldsymbol{\Theta}_0\).The angle between the
A
frame and theG
frame is \(\boldsymbol{\Theta}=\boldsymbol{\Theta}_0 + \delta\boldsymbol{\Theta}\)The projection of a vector expressed in the
G
frame onto theU
frame is expressed by:\[\boldsymbol{v}^U = C^{GA}_0 C^{AG} \boldsymbol{v}^G\]The reverse, a projection of a vector expressed in the
U
frame onto theG
frame, is expressed by\[\boldsymbol{v}^U = C^{GA} C^{AG}_0 \boldsymbol{v}^U\]
The effect this has on the aeroelastic coupling between the UVLM and the structural dynamics is that the orientation and change of orientation of the vehicle has no effect on the aerodynamics. The aerodynamics are solely affected by the contribution of the 6-rigid body velocities (as well as the flexible DOFs velocities).
- to_nodal_coordinates()[source]
Transforms the outputs of the system to nodal coordinates if they were previously expressed in modal space
- update(u_infty)[source]
Updates the aeroelastic scaled system with the new reference velocity.
Only the beam equations need updating since the only dependency in the forward flight velocity resides there.
- Parameters:
u_infty (float) – New reference velocity
- Returns:
Updated aeroelastic state-space system
- Return type: