-
Notifications
You must be signed in to change notification settings - Fork 119
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a failure criteria for using Composite Materials (Tsai Wu Failure Criteria) #444
base: main
Are you sure you want to change the base?
Changes from all commits
5eb646f
fe4c98d
172358b
a93d002
f24412f
b1dfd08
fb7f79f
d981854
92074f7
720216b
c2b25e7
09de0aa
052ecdb
64c5b8a
adff022
319a172
8ce1867
40ca8db
af4c36f
a415013
f386a44
f7710bb
8977de6
88f47a5
96c0cd0
2c53537
9c52af8
c2f5734
2e33dd5
a22061b
454b0a1
906f585
0205b35
e98d007
1620271
78107d4
cfd8706
bd1aa92
2e6e9c0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,7 @@ | ||
""" | ||
Class definition for the MeshPointForces component. | ||
""" | ||
|
||
import numpy as np | ||
import openmdao.api as om | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
.. _Composites Walkthrough: | ||
|
||
A walkthrough of the composites model | ||
===================================== | ||
|
||
This page will walk you through the composites model in OpenAeroStruct. | ||
The composites module allows you to define composite material properties and laminate layups for the wing structure. | ||
|
||
.. literalinclude:: ../composite_wingbox_mpt_opt_example.py | ||
:start-after: checkpoint 7 | ||
:end-before: checkpoint 8 | ||
|
||
Here, ``useComposite`` is a boolean variable that is set to True to enable the composites model and ``safety_factor`` is the factor of safety used for determining the Tsai-Wu based failure | ||
criteria of the composite material. The composite material properties are defined using the following variables: | ||
|
||
- ``ply_angles`` is a list of the angles of the plies with respect to the x-axis. | ||
- ``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). | ||
- ``E1`` is the modulus of elasticity in the fiber direction. | ||
- ``E2`` is the modulus of elasticity in the transverse direction. | ||
- ``G12`` is the shear modulus. | ||
- ``nu12`` is the Poisson's ratio. | ||
- ``sigma_t1`` is the tensile strength in the fiber direction. | ||
- ``sigma_c1`` is the compressive strength in the fiber direction. | ||
- ``sigma_t2`` is the tensile strength in the transverse direction. | ||
- ``sigma_c2`` is the compressive strength in the transverse direction. | ||
- ``sigma_12max`` is the maximum shear strength. | ||
|
||
.. note:: | ||
The composites failure model doesn't use the ``strength_factor_for_upper_skin`` option from the surface dictionary. | ||
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``. | ||
|
||
Currently, the moduli of elasticity of the entire FEM spatial beam model are assumed to be isotropic | ||
in 2D plane so as to not change the entire model and is left for the future works. The values of the | ||
moduli of elasticity are found using The unidirectional ply properties are used to find the stiffness matrix of the plies: | ||
|
||
.. math:: | ||
|
||
Q = \begin{bmatrix} | ||
\frac{E_1}{1-\nu_{12}\nu_{21}} & \frac{\nu_{21}E_2}{1-\nu_{12}\nu_{21}} & 0 \\ | ||
\frac{\nu_{12}E_1}{1-\nu_{12}\nu_{21}} & \frac{E_2}{1-\nu_{12}\nu_{21}} & 0 \\ | ||
0 & 0 & G_{12} | ||
\end{bmatrix} | ||
|
||
where :math:`E_1` and :math:`E_2` are the moduli of elasticity in the fiber direction and transverse direction, respectively, | ||
:math:`\nu_{12}` and :math:`\nu_{21}` are the Poisson's ratios, and :math:`G_{12}` is the shear modulus. | ||
|
||
The transformed reduced stiffness matrix is found using the following equation: | ||
|
||
.. math:: | ||
|
||
\bar{Q} = T^T Q T | ||
|
||
where :math:`T` is the transformation matrix. The transformation matrix is found using the following equation: | ||
|
||
.. math:: | ||
|
||
T = \begin{bmatrix} | ||
\cos \theta & \sin \theta & 0 \\ | ||
-\sin \theta & \cos \theta & 0 \\ | ||
0 & 0 & 1 | ||
\end{bmatrix} | ||
|
||
where :math:`\theta` is the angle of the ply with respect to the x-axis. | ||
|
||
The effective reduced stiffness matrix for the laminate is found using the weighted sum of the reduced stiffness matrices of the plies, | ||
using their respective ply fraction constituition: | ||
|
||
.. math:: | ||
|
||
Q_{eff} = \sum_{i=1}^{n} f_i Q_{bar_i} | ||
|
||
where :math:`f_i` is the ply fraction of the :math:`i^{th}` ply. | ||
|
||
The effective compliance matrix is found using the following equation: | ||
|
||
.. math:: | ||
|
||
S_{eff} = Q_{eff}^{-1} | ||
|
||
The effective laminate properties are found using the following equations: | ||
|
||
.. math:: | ||
E_{11} = \frac{1}{S_{eff_{11}}}\\ | ||
G = \frac{1}{S_{eff_{66}}} | ||
|
||
These moduli of elasticility values are hence used to determine the stiffness matrix of the entire FEM spatial beam model. Thereafter, at the 4 critical points in the wingbox (mentioned in the aerostruct-wingbox walkthrough), | ||
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:\\ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Typo: ":\" ? |
||
using the transformation: | ||
|
||
.. math:: | ||
|
||
\begin{pmatrix} | ||
\epsilon_1 \\ | ||
\epsilon_2 \\ | ||
\gamma_{12} | ||
\end{pmatrix} | ||
= | ||
[T] | ||
\begin{pmatrix} | ||
\epsilon_x \\ | ||
\epsilon_y \\ | ||
\gamma_{xy} | ||
\end{pmatrix} | ||
|
||
The strains are then used to calculate the stresses in the laminate using the following equation: | ||
|
||
.. math:: | ||
|
||
\begin{pmatrix} | ||
\sigma_1 \\ | ||
\sigma_2 \\ | ||
\tau_{12} | ||
\end{pmatrix} | ||
= | ||
[Q] | ||
\begin{pmatrix} | ||
\epsilon_1 \\ | ||
\epsilon_2 \\ | ||
\gamma_{12} | ||
\end{pmatrix} | ||
|
||
These local axial and shear stresses are then utilized to calculate the value of the **Strength Ratios** for each ply using Equation 5, where the coefficients are defined by: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You refer to Eq. 5, but in the readthedocs equations are not numbered (there might be a way to show equation numbers, I'm not sure though) |
||
|
||
.. math:: | ||
|
||
F_{11} = \frac{1}{S_L^{(+)} S_L^{(-)}} \quad \text{and} \quad F_1 = \frac{1}{S_L^{(+)}} - \frac{1}{S_L^{(-)}} | ||
|
||
.. math:: | ||
|
||
F_{22} = \frac{1}{S_T^{(+)} S_T^{(-)}} \quad \text{and} \quad F_2 = \frac{1}{S_T^{(+)}} - \frac{1}{S_T^{(-)}} | ||
|
||
.. math:: | ||
|
||
F_{66} = \frac{1}{2 S_{LT}^{2}} | ||
|
||
where :math:`S_L^{(+)} \text{and} S_L^{(-)}` are the longitudinal strengths in tension and compression respectively, | ||
:math:`S_T^{(+)} \text{and} S_T^{(-)}` are the transverse strengths in tension and compression respectively and | ||
:math:`S_{LT}^{(+)}` is the shear strength of a ply. The strength ratios are then used to calculate the Tsai-Wu based failure criteria for each ply. | ||
The Tsai-Wu failure criteria is given by: | ||
|
||
.. math:: | ||
|
||
F_1 \sigma_1 + F_2 \sigma_2 + F_{11} \sigma_1^2 + F_{22} \sigma_2^2 + F_{66} \tau_{12}^2 = 1 | ||
|
||
In order to implement the safety factor in the Tsai-Wu failure criteria, the equation is re-written as: | ||
|
||
.. math:: | ||
a &= F_1 \sigma_1 + F_2 \sigma_2 \\ | ||
b &= F_{11} \sigma_1^2 + F_{22} \sigma_2^2 + F_{12} \sigma_1 \sigma_2 | ||
|
||
We hence caclulate the **Strength Ratios** using the formula: | ||
|
||
.. math:: | ||
|
||
SR = \frac{1}{2} (a + \sqrt{a^2 + 4 b}) | ||
|
||
The strength ratio values hence calculated for each ply (determined by the length of ``ply_angles``) at each critical point (4 total), | ||
(hence 4 x ``numplies`` strength ratio values for each beam element) for all beam elements are aggregated using a **KS Aggregate** function: | ||
|
||
.. math:: | ||
|
||
\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) | ||
|
||
|
||
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: | ||
|
||
.. math:: | ||
|
||
SR_{\text{lim}} = \frac{1}{FOS} | ||
|
||
|
||
The failure is determined by the value of :math:`\hat{g}_{KS}(\rho, g)` exceeding 0. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Before showing the results below, I think it'd be nice to add something like "you can find the complete runscript for the composites model here: " or maybe embed the runscript. Are the surface dict additions the only changes required to run the composite model? If so, it should be clarified here (e.g. "we don't need any other changes in the runscripts besides additional entries in the surface dict" or something like that) Also, adding subsections (e.g. "Model", "Example", "Results", etc) in this doc page would make it easier to navigate this page. |
||
The effect of using composites can be seen in the following figure. A Pareto-optimal front is generated for the wingbox model using Isotropic (Almunim) and Orthotropic (Carbon Fiber Reinforced Polymer) materials. | ||
|
||
.. image:: /advanced_features/figs/compositeModelPareto.png | ||
:width: 600 | ||
:align: center |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Typo?