Analysis Framework¶
Terms are color coded in this framework to keep track of the several aspects of the code:
\(\color{green} \text{Transfer Scheme}\)
\(\color{blue} \text{Fluid Solver}\)
\(\color{orange} \text{Structural Solver}\)
\(\color{red} \text{Shape Parameterization}\)
MELD Transfer Scheme¶
The following residuals are computed in the forward direction for the MELD transfer scheme, which transfers displacements, loads, and heat flux.
Displacement Transfer Residual¶
\(\mathbf{u}_A\) - displacements of aerodynamic surface nodes
\(\mathbf{u}_S\) - displacements of structural nodes
\(\mathbf{x}\) - design variable vector (made up of \(\mathbf{x}_A\) and \(\mathbf{x}_S\))
\(\xi\) - action of the displacement transfer
Load Transfer Residual¶
\(\mathbf{f}_A\) - nodal forces on aerodynamic surface
\(\mathbf{f}_S\) - nodal forces on structure
\(\mathbf{u}_S\) - discplaments of structural nodes
\(\mathbf{x}\) - design variable vector (made up of \(\mathbf{x}_A\) and \(\mathbf{x}_S\))
\(\xi\) - action of the displacement transfer
Heat Flux Transfer Residual¶
\(\mathbf{h}_A\) - aerodynamic heat flux at the surface
\(\mathbf{h}_S\) - structure heat flux at the surface
\(\mathbf{W}\) - weight matrix for the temperature transfer
Temperature Residual¶
\(\mathbf{t}_A\) - aerodynamic temperatures at the structure surface
\(\mathbf{t}_S\) - structure temperatures at the surface
\(\mathbf{W}\) - weight matrix for the temperature transfer
FUN3D, Flow Solver¶
Flow Residual¶
\(\mathbf{q}\) - flow state vector
\(t\) - time
\(\mathbf{t}_A\) - aerodynamic surface mesh temperature
\(\mathbf{x}\) - design variable vector
\(\mathbf{x}_G\) - aerodynamic volume mesh
Force Integration Residual¶
\(\mathbf{f}_A\) - nodal forces on aerodynamic surface
\(\mathbf{x}_G\) - aerodynamic volume mesh
\(\phi\) - action of the force integration
Grid Deformation Residual¶
\(\mathbf{u}_A\) - displacements of aerodynamic surface nodes
\(\mathbf{x}\) - design variable vector
\(\mathbf{x}_{A0}\) - initial aerodynamic surface mesh (after shape changes)
\(\mathbf{x}_G\) - aerodynamic volume mesh
\(\mathbf{K}_G\) - mesh elasticity stiffness matrix based on \(\mathbf{ \hat{x} }_G\) (constant)
Heat Flux Integration Residual¶
\(\mathbf{h}_A\) - aerodynamic heat flux at the surface
\(\mathbf{q}\) - flow state vector
\(\mathbf{t}_A\) - aerodynamic temperatures at the structure surface
\(\mathbf{x}\) - design variable vector
\(\mathbf{x}_G\) - aerodynamic volume mesh
\(\varphi\) - action of the heat flux integration
TACS, Structure Solver¶
Structural Residual¶
\(\mathbf{f}_S\) - nodal forces on structure
\(\mathbf{u}_S\) - displacements of structural nodes
\(\mathbf{x}\) - design variable vector
Aeroelastic Framework¶
The forward solve path in FUNtoFEM goes through several steps. First, the surface displacements are computed inside FUNtoFEM, taking the displacement of structural nodes, \(\mathbf{u}_S\), as an input and solving for the displacements of aerodynamic surface nodes, \(\mathbf{u}_A\), in the displacement transfer residual, \(\mathbf{\color{green}D}\). The grid deformation residual, \(\mathbf{\color{blue}G}\), is then computed with the displacement of the aerodynamic surface nodes, \(\mathbf{u}_A\), as an input and solving for \(\mathbf{x}_G\), the aerodynamic volume mesh. This is then followed by the flow residual, \(\mathbf{\color{blue}A}\), and the force integration residual, \(\mathbf{\color{blue}F}\). These three residuals are internal to FUN3D. The load transfer residual, \(\mathbf{\color{green}L}\), is then solved inside FUNtoFEM. Finally, the structural residual, \(\mathbf{\color{orange}S}\), is computed in TACS.
The order of execution in the forward solve follows the list shown below. The underlined value is solved for at each step.
Aeroelastic Adjoint¶
The order of execution in the code follows:
The corresponding Lagrangian in the aeroelastic framework is given by:
Aerothermal Framework¶
The residuals for the aerodynamic governing equations are obtained using a discrete approximation of the following integral over each finite volume
An interface has been added to FUN3D for aerothermoelastic analysis using the FUNtoFEM framework. This interface provides routines for both force and heat flux integration, as well as the terms needed for the adjoint equations. Furthermore, the interface adds the required multidisciplinary components to the right-hand-side of the aerodynamic adjoint equations. The force integration is a function of the aerodynamic state variables and the node locations and constitutes a system of residuals written as:
The heat flux integration is also a function of the aerodynamic state variables and node locations and is written as
Aerothermal Adjoint¶
The Lagrangian for the aerothermal problem is formed by summing the function of interest with the products of the residuals for each analysis component combined with their corresponding adjoint, giving the following expression:
The adjoint equations are obtained by taking the derivative of the Lagrangian with respect to the state variables and setting it to zero. This results in the following coupled system of equations:
Aerothermoelastic Framework¶
The surface displacements are computed by solving the displacement transfer residuals and preserving rigid-body motion. The displacement transfer scheme is given by:
To obtain a consistent and conservative load transfer, the load transfer is derived based on the method of virtual work. The residual of the load transfer scheme is:
MELDThermal links each aerodynamic surface node, where a wall temperature will be specified, to a fixed number of the nearest structural nodes from which the structural temperature will be interpolated. This approach is analogous to the localization property of MELD such that each aerodynamic surface node receives temperature information from a limited number of structural nodes. The temperature of the aerodynamic surface node is then computed from the temperatures of the set of linked structural nodes:
The weights are computed based on the Euclidean distance between the aerodynamic node and the corresponding structural surface nodes:
The interpolation is repeated for all aerodynamic surface nodes, giving the temperature transfer residual:
Because FUN3D is a nondimensional code and heat flux does not scale linearly with a reference temperature, area-weighted temperature gradients at the wall are extracted from FUN3D. Inside FUNtoFEM, the thermal conductivity is then calculated at each aerodynamic surface node based on the corresponding aerodynamic temperatures. The area-weighted heat flux at the aerodynamic surface nodes is then calculated as a product of the temperature gradients and thermal conductivity values. The relationship between the area-weighted heat flux at the aerodynamic surface nodes and the resulting heat flux on the structural nodes is calculated in the same manner as the loads. Based on virtual work, the flux produced at a structural node by the force at an aerodynamic surface node is:
Symbol |
Variable Name |
Size |
Role |
---|---|---|---|
\(u_A\) |
aero_disps |
3 \(\times\) aero_nnodes |
FUN3D input |
\(t_A\) |
aero_temps |
aero_nnodes |
FUN3D input |
\(f_A\) |
aero_loads |
3 \(\times\) aero_nnodes |
FUN3D output |
\(h_A\) |
aero_flux |
aero_nnodes |
FUN3D output |
\(f_S\) |
struct_loads |
3 \(\times\) struct_nnodes |
TACS input |
\(h_S\) |
struct_flux |
struct_nnodes |
TACS input |
\(u_S\) |
struct_disps |
3 \(\times\) struct_nnodes |
TACS output |
\(t_S\) |
struct_temps |
struct_nnodes |
TACS output |
The body class members listed above use accessors to get them. aero_nnodes refers to the number of nodes on the aerodynamic surface mesh. Similarly, struct_nnodes refers to the number of nodes on the structural mesh. Where the size is indicated as 3 \(\times\) nnodes, the vector is structured as concatenated trios of (x, y, z) values.
Aerothermoelastic Adjoint¶
The aerothermoelastic adjoint equations are derived to be discretely consistent with the forward governing equations. The Lagrangian for the aerothermoelastic problem is formed by summing the function of interest with the products of the residuals for each analysis component combined with their corresponding adjoint, giving the following expression:
The adjoint equations are obtained by taking the derivative of the aerothermoelastic Lagrangian with respect to the state variables and setting it to zero. This results in the following coupled system of equations:
Once the solution for the adjoint equations has been obtained, the total derivative for the function of interest is computed as the derivative of the Lagrangian.
The abbreviation “AJP” is used for the “Adjoint-Jacobian Product.” The names of the AJP variables correspond to the off-diagonal terms of the partial derivative of the Lagrangian with respect to the variable in the forward path with the same name. The number of functions is abbreviated as nfuncs for a given scenario.
Expression |
Variable Name |
Size |
Role |
---|---|---|---|
\(\psi_G^T \frac{\partial G}{\partial u_A}\) |
aero_disps_ajp |
3 \(\times\) aero_nnodes \(\times\) nfuncs |
FUN3D output |
\(\psi_A^T \frac{\partial A}{\partial t_A} + \psi_H^T \frac{\partial H}{\partial t_A}\) |
aero_temps_ajp |
aero_nnodes \(\times\) nfuncs |
FUN3D output |
\(\psi_L^T \frac{\partial L}{\partial f_A}\) |
aero_loads_ajp |
3 \(\times\) aero_nnodes \(\times\) nfuncs |
FUN3D input |
\(\psi_Q^T \frac{\partial Q}{\partial h_A}\) |
aero_flux_ajp |
aero_nnodes \(\times\) nfuncs |
FUN3D input |
\(\psi_S^T \frac{\partial S}{\partial f_S}\) |
struct_loads_ajp |
3 \(\times\) struct_nnodes \(\times\) nfuncs |
TACS output |
\(\psi_S^T \frac{\partial S}{\partial h_S}\) |
struct_flux_ajp |
struct_nnodes \(\times\) nfuncs |
TACS output |
\(\psi_D^T \frac{\partial D}{\partial u_S} + \psi_L^T \frac{\partial L}{\partial u_S}\) |
struct_disps_ajp |
3 \(\times\) struct_nnodes \(\times\) nfuncs |
TACS input |
\(\psi_T^T \frac{\partial T}{\partial t_S}\) |
struct_temps_ajp |
struct_nnodes \(\times\) nfuncs |
TACS input |