Possible bug in load transfer scheme
See original GitHub issueType of issue
What types of issue is it?
- Bugfix (non-breaking change which fixes an issue)
Description
The loads transfer scheme used in load_transfer.py
is different than that presented in the OpenAeroStruct journal article.
In the transfer loads script, it first computes the moments at the middle of the spar elements but does not transfer the moment to the nodes using the formula of “moment transport” in that the code doesn’t consider the moment arm between the node and the middle of the element.
Steps to reproduce issue
Run any aerostructural analysis and examine the load_transfer.py
component.
Current behavior
The moment arms are computed from the aerodynamic centers to the structural centers.
Expected behavior
The moment arms may need to be computed from the aerodynamic centers to the structural nodes; this theory should be double-checked as correct before implemented.
If the transfer needs correcting, the compute()
and compute_partials()
methods within that component would both need updating, as well as all impacted tests, namely any aerostructural test.
Issue Analytics
- State:
- Created 3 years ago
- Comments:6 (6 by maintainers)
Top GitHub Comments
@kanekosh If you have time, you could also do a similar optimization mesh convergence study (for fuelburn and wingbox mass) with this code: https://github.com/mdolab/OpenAeroStruct/blob/master/openaerostruct/docs/wingbox_mpt_opt_example.py (You’ll need to make the opt tol smaller than it currently is and then all you need to do is change the numbers of nodes.)
I have fixed the bug in
load_transger.py
, though I haven’t updated the tests yet so a PR is not ready. I am wondering if I can get quick comments/feedback before updating the tests. The new code can be found in my branch. @johnjasa @shamsheersc19Verification
To verify the new implementation, I did three checks.
1. Comparison with current implementation
I compared the aerostructural analysis of the new implementation to the current version of
mdolab/master
. I did not do any aerostructural optimization here.Here is the comparison of aero and structural responses. The test setup is the same as
examples/run_CRM.py
except for the mesh sizes.ny=5, nx=2
ny=15, nx=5
ny=45, nx=11
Since the error for the finest mesh was small enough, I believe the new implementation is correct. Also, I confirmed that the current code has been predicting larger stresses as Sham mentioned, which is good.
2. Partial derivatives
I ran unit tests in
transfer
, which runs OpenMDAO’scheck_partials()
, and they all passed. Therefore thecompute_partials()
is consistent withcompute()
. I also changed the mesh size and it was ok as well.3. Regression tests
As expected, all aerostructural regression tests have failed. But their values were not far apart: most of them are within a few % errors, except
test_aerostruct_wingbox_+weight_analysis
andtest_aerostruct_wingbox_analysis
which had ~20% errors.Questions
compute_partials()
you’re usingndarray.flatten()
with default args, which does its job in a C-style order. Is it okay to fix these comments, or am I missing something?Thanks!