|
| 1 | +.. _Composites Walkthrough: |
| 2 | + |
| 3 | +Composite Material |
| 4 | +================== |
| 5 | + |
| 6 | +This page will walk you through the composites model in OpenAeroStruct. |
| 7 | +The composites module allows you to define composite material properties and laminate layups for the wing structure. |
| 8 | + |
| 9 | +Model setup |
| 10 | +----------- |
| 11 | + |
| 12 | +First, define the following parameters in the `surface` dictionary: |
| 13 | + |
| 14 | +- ``useComposite`` is a boolean variable that is set to True to enable the composites model mode. |
| 15 | +- ``safety_factor`` is the factor of safety used for determining the Tsai-Wu based failure |
| 16 | +- ``ply_angles`` is a list of the angles of the plies with respect to the x-axis. |
| 17 | +- ``ply_fractions`` is a list of the ply fractions of the plies. (Should be the same length as ``ply_angles``, with the sum of the fractions equal to 1). |
| 18 | +- ``E1`` is the modulus of elasticity in the fiber direction. |
| 19 | +- ``E2`` is the modulus of elasticity in the transverse direction. |
| 20 | +- ``G12`` is the shear modulus. |
| 21 | +- ``nu12`` is the Poisson's ratio. |
| 22 | +- ``sigma_t1`` is the tensile strength in the fiber direction. |
| 23 | +- ``sigma_c1`` is the compressive strength in the fiber direction. |
| 24 | +- ``sigma_t2`` is the tensile strength in the transverse direction. |
| 25 | +- ``sigma_c2`` is the compressive strength in the transverse direction. |
| 26 | +- ``sigma_12max`` is the maximum shear strength. |
| 27 | + |
| 28 | +.. note:: |
| 29 | + The composites failure model doesn't use the ``strength_factor_for_upper_skin`` option from the surface dictionary. |
| 30 | + If you want to apply a knockdown factor on the compressive strength to account for buckling, you should scale down the values of ``sigma_c1`` and ``sigma_c2``. |
| 31 | + |
| 32 | +Next, call a utility function to compute the effective E and G for the composite material. |
| 33 | +The following function adds ``E`` and ``G`` to ``surface``. |
| 34 | + |
| 35 | +.. code-block:: python |
| 36 | +
|
| 37 | + from openaerostruct.structures.utils import compute_composite_stiffness |
| 38 | + compute_composite_stiffness(surf_dict) |
| 39 | +
|
| 40 | +The rest of the model setup is the same as aluminum wing aerostructural problems. |
| 41 | +OpenAeroStruct will compute the failure metric based on the Tsai-Wu failure criterion instead of the von Mises failure criterion when we set ``useComposite`` to True. |
| 42 | +But this is done automatically within ``AerostructPoint``, so you don't need to do anything about it. |
| 43 | + |
| 44 | +Theory |
| 45 | +------ |
| 46 | + |
| 47 | +Approximation of the Moduli of Elasticity |
| 48 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 49 | + |
| 50 | +Currently, the moduli of elasticity of the entire FEM spatial beam model are assumed to be isotropic |
| 51 | +in 2D plane so as to not change the entire model and is left for the future works. |
| 52 | +The values of the moduli of elasticity are found using the following procedure. |
| 53 | + |
| 54 | +The unidirectional ply properties are used to find the stiffness matrix of the plies: |
| 55 | + |
| 56 | +.. math:: |
| 57 | +
|
| 58 | + Q = \begin{bmatrix} |
| 59 | + \frac{E_1}{1-\nu_{12}\nu_{21}} & \frac{\nu_{21}E_2}{1-\nu_{12}\nu_{21}} & 0 \\ |
| 60 | + \frac{\nu_{12}E_1}{1-\nu_{12}\nu_{21}} & \frac{E_2}{1-\nu_{12}\nu_{21}} & 0 \\ |
| 61 | + 0 & 0 & G_{12} |
| 62 | + \end{bmatrix} |
| 63 | +
|
| 64 | +where :math:`E_1` and :math:`E_2` are the moduli of elasticity in the fiber direction and transverse direction, respectively, |
| 65 | +:math:`\nu_{12}` and :math:`\nu_{21}` are the Poisson's ratios, and :math:`G_{12}` is the shear modulus. |
| 66 | + |
| 67 | +We then transform the stiffness matrix of each ply as a function of the ply angle by |
| 68 | + |
| 69 | +.. math:: |
| 70 | +
|
| 71 | + \bar{Q} = T_\sigma Q T_\varepsilon^{-1} |
| 72 | +
|
| 73 | +where :math:`T_\sigma`, :math:`T_\varepsilon` are the stress and strain transformation matrices, respectively. |
| 74 | + |
| 75 | +The effective stiffness matrix for the laminate is found using the weighted sum of the stiffness matrices of the plies, |
| 76 | +using their respective ply fraction: |
| 77 | + |
| 78 | +.. math:: |
| 79 | +
|
| 80 | + Q_{eff} = \sum_{i=1}^{n} f_i \bar{Q}_i |
| 81 | +
|
| 82 | +where :math:`f_i` is the ply fraction of the :math:`i^{th}` ply. |
| 83 | + |
| 84 | +The effective compliance matrix is found using the following equation: |
| 85 | + |
| 86 | +.. math:: |
| 87 | +
|
| 88 | + S_{eff} = Q_{eff}^{-1} |
| 89 | +
|
| 90 | +The effective laminate properties are found using the following equations: |
| 91 | + |
| 92 | +.. math:: |
| 93 | + E = \frac{1}{S_{eff_{11}}}\\ |
| 94 | + G = \frac{1}{S_{eff_{66}}} |
| 95 | +
|
| 96 | +These moduli of elasticity values are hence used to determine the stiffness matrix of the entire FEM spatial beam model. |
| 97 | + |
| 98 | +Tsai-Wu Failure Criterion |
| 99 | +~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 100 | + |
| 101 | +Thereafter, at the 4 critical points in the wingbox (mentioned in the aerostruct-wingbox walkthrough), |
| 102 | +the strains are calculated for each of the constituent plies by transforming the strains at the critical points to the laminate coordinate system. This is done using the following equation: |
| 103 | + |
| 104 | +.. math:: |
| 105 | +
|
| 106 | + \begin{pmatrix} |
| 107 | + \epsilon_1 \\ |
| 108 | + \epsilon_2 \\ |
| 109 | + \gamma_{12} |
| 110 | + \end{pmatrix} |
| 111 | + = |
| 112 | + [T_\varepsilon] |
| 113 | + \begin{pmatrix} |
| 114 | + \epsilon_x \\ |
| 115 | + \epsilon_y \\ |
| 116 | + \gamma_{xy} |
| 117 | + \end{pmatrix} |
| 118 | +
|
| 119 | +The strains are then used to calculate the stresses in the laminate using the following equation: |
| 120 | + |
| 121 | +.. math:: |
| 122 | +
|
| 123 | + \begin{pmatrix} |
| 124 | + \sigma_1 \\ |
| 125 | + \sigma_2 \\ |
| 126 | + \tau_{12} |
| 127 | + \end{pmatrix} |
| 128 | + = |
| 129 | + [Q] |
| 130 | + \begin{pmatrix} |
| 131 | + \epsilon_1 \\ |
| 132 | + \epsilon_2 \\ |
| 133 | + \gamma_{12} |
| 134 | + \end{pmatrix} |
| 135 | +
|
| 136 | +These local axial and shear stresses are then utilized to calculate the value of the **Strength Ratios**, where the coefficients are defined by: |
| 137 | + |
| 138 | +.. math:: |
| 139 | +
|
| 140 | + F_{11} = \frac{1}{S_L^{(+)} S_L^{(-)}} \quad \text{and} \quad F_1 = \frac{1}{S_L^{(+)}} - \frac{1}{S_L^{(-)}} |
| 141 | +
|
| 142 | +.. math:: |
| 143 | +
|
| 144 | + F_{22} = \frac{1}{S_T^{(+)} S_T^{(-)}} \quad \text{and} \quad F_2 = \frac{1}{S_T^{(+)}} - \frac{1}{S_T^{(-)}} |
| 145 | +
|
| 146 | +.. math:: |
| 147 | +
|
| 148 | + F_{66} = \frac{1}{2 S_{LT}^{2}} |
| 149 | +
|
| 150 | +where :math:`S_L^{(+)} \text{and} S_L^{(-)}` are the longitudinal strengths in tension and compression respectively, |
| 151 | +:math:`S_T^{(+)} \text{and} S_T^{(-)}` are the transverse strengths in tension and compression respectively and |
| 152 | +:math:`S_{LT}^{(+)}` is the shear strength of a ply. The strength ratios are then used to calculate the Tsai-Wu based failure criterion for each ply. |
| 153 | +The Tsai-Wu failure criterion is given by: |
| 154 | + |
| 155 | +.. math:: |
| 156 | +
|
| 157 | + F_1 \sigma_1 + F_2 \sigma_2 + F_{11} \sigma_1^2 + F_{22} \sigma_2^2 + F_{66} \tau_{12}^2 = 1 |
| 158 | +
|
| 159 | +In order to implement the safety factor in the Tsai-Wu failure criterion, the equation is re-written as: |
| 160 | + |
| 161 | +.. math:: |
| 162 | + a &= F_1 \sigma_1 + F_2 \sigma_2 \\ |
| 163 | + b &= F_{11} \sigma_1^2 + F_{22} \sigma_2^2 + F_{12} \sigma_1 \sigma_2 |
| 164 | +
|
| 165 | +We hence calculate the **Strength Ratios** using the formula: |
| 166 | + |
| 167 | +.. math:: |
| 168 | +
|
| 169 | + SR = \frac{1}{2} (a + \sqrt{a^2 + 4 b}) |
| 170 | +
|
| 171 | +The strength ratio values hence calculated for each ply (determined by the length of ``ply_angles``) at each critical point (4 total), |
| 172 | +(hence 4 x ``numplies`` strength ratio values for each beam element) for all beam elements are aggregated using a **KS Aggregate** function: |
| 173 | + |
| 174 | +.. math:: |
| 175 | +
|
| 176 | + \hat{g}_{KS}(\rho, g) = \max_j g_j + \frac{1}{\rho} \ln \left( \sum_{j=1}^{n_g} \exp \left( \rho (g_j - \max_j g_j) \right) \right) |
| 177 | +
|
| 178 | +
|
| 179 | +where :math:`g` is :math:`\left( \frac{SR}{SR_{\text{lim}}} - 1 \right)` value for each ply and :math:`SR_{\text{lim}}` is defined as: |
| 180 | + |
| 181 | +.. math:: |
| 182 | +
|
| 183 | + SR_{\text{lim}} = \frac{1}{\text{safety factor}} |
| 184 | +
|
| 185 | +
|
| 186 | +The failure is determined by the value of :math:`\hat{g}_{KS}(\rho, g)` exceeding 0. |
| 187 | + |
| 188 | + |
| 189 | +Example runscript |
| 190 | +----------------- |
| 191 | + |
| 192 | +Here is an example runscript of composite wing aerostructural optimization. |
| 193 | +This roughly follows the setup of "Simple Transonic Wing" by `Gray and Martins 2024 <https://www.researchgate.net/publication/377154425_A_Proposed_Benchmark_Model_for_Practical_Aeroelastic_Optimization_of_Aircraft_Wings>`_. |
| 194 | + |
| 195 | +.. embed-code:: |
| 196 | + ../examples/run_aerostruct_composite_benchmark_wing.py |
0 commit comments