Skip to content
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

Open
wants to merge 39 commits into
base: main
Choose a base branch
from

Conversation

vishhwamehta
Copy link

Purpose

Expected time until merged

Type of change

  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (non-backwards-compatible fix or feature)
  • Code style update (formatting, renaming)
  • Refactoring (no functional changes, no API changes)
  • Documentation update
  • Maintenance update
  • Other (please describe)

Testing

Checklist

  • I have run flake8 and black to make sure the Python code adheres to PEP-8 and is consistently formatted
  • I have formatted the Fortran code with fprettify or C/C++ code with clang-format as applicable
  • I have run unit and regression tests which pass locally with my changes
  • I have added new tests that prove my fix is effective or that my feature works
  • I have added necessary documentation

@A-CGray A-CGray self-requested a review August 2, 2024 20:05
@shamsheersc19
Copy link
Contributor

shamsheersc19 commented Aug 20, 2024

I'd like to help review this. How have you verified the modeling, or how are you planning to verify the modeling? Would it be possible to reproduce the pareto front in Brooks et al. [https://www.researchgate.net/publication/341054094_Aerostructural_Tradeoffs_for_Tow-Steered_Composite_Wings]?
image

Or this by Kennedy et al. [https://websites.umich.edu/~mdolaboratory/pdf/Kennedy2014b.pdf]?
image

@A-CGray
Copy link
Member

A-CGray commented Aug 26, 2024

Yeah I think we could generate a pareto something like that based on the existing CRM example in the repo. In terms of actually verifying the correctness of the implementation, the Tsai-Wu strength ratio should be mathematically identical to Von Mises when you use isotropic material properties so we can run a case using this new code using isotropic properties and check that it gives the same result as the existing von mises code.

openaerostruct/structures/spatial_beam_functionals.py Outdated Show resolved Hide resolved
openaerostruct/structures/spatial_beam_functionals.py Outdated Show resolved Hide resolved
openaerostruct/structures/spatial_beam_setup.py Outdated Show resolved Hide resolved
@vishhwamehta
Copy link
Author

compositeModelPareto
@shamsheersc19 Please let me know if I need to add something in addition to this plot to the repo. We have also prepared a walkthrough file for the composite model which should assist the users to use this feature properly.

@A-CGray A-CGray marked this pull request as ready for review October 23, 2024 14:46
@A-CGray A-CGray requested a review from a team as a code owner October 23, 2024 14:46
@A-CGray A-CGray requested review from lamkina and kanekosh and removed request for lamkina October 23, 2024 14:46
@A-CGray
Copy link
Member

A-CGray commented Oct 23, 2024

@shamsheersc19 GitHub won't let me add you as a reviewer, but please feel free to review anyway

@A-CGray A-CGray self-requested a review October 28, 2024 14:51
@shamsheersc19
Copy link
Contributor

Thanks! I'll try to catch up, but please don't let me hold anything up.

Copy link
Contributor

@kanekosh kanekosh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for adding nice new feature (and also introducing safety factor parameter, which is pretty nice)

Besides the above comments, could you manually check if the figures generated by plot_wing and plot_wingbox properly show the maximum stress in the spanwise stress plot? I think they refer to surface["yield"] to plot the failure limit line. Now we have safety factor defined seperately, I believe these plotting scripts also needs to be updated.


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:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo?

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:\\
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo: ":\" ?

\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:
Copy link
Contributor

Choose a reason for hiding this comment

The 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)



The failure is determined by the value of :math:`\hat{g}_{KS}(\rho, g)` exceeding 0.

Copy link
Contributor

Choose a reason for hiding this comment

The 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.

import openmdao.api as om


def TransformationMatrix(theta):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not critical, but I'd use lower case and underscores for function names. Same for the computeCompositeStiffness function

https://peps.python.org/pep-0008/#function-and-variable-names


prob.run_model()

print(prob["AS_point_0.fuelburn"][0])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test looks like only printing the results and not checking any value. It should have assert_near_equals to check the analysis outputs against reference values for key outputs, including tsaiwu_sr.

prob.setup()

prob.run_driver()

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as my comments on the analysis test. This test should have assert_near_equals to check the optimization outputs against reference values for key outputs, including tsaiwu_sr.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants