Skip to content

Fuselage synthesis - #227

Open
Czarified wants to merge 18 commits into
mainfrom
fuselage_synthesis
Open

Fuselage synthesis#227
Czarified wants to merge 18 commits into
mainfrom
fuselage_synthesis

Conversation

@Czarified

Copy link
Copy Markdown
Owner

Finally rolling in a functional Fuselage Synthesis routine! This marks the first minor version release!

This has taken way too long, but I've got a working example script building and analyzing a Fuselage component. I like the data structure and execution speed. The accuracy isn't there yet, but now that all the pipes are connected, we can work on that in the future. I've left several TODO comments in the source files to keep track of this when the time comes.

This effort took significant refactoring and new class definitions. Some highlights:

  1. Loadcases are now a dedicated class with general definitions to contain all the potential input data that an aircraft flight case would need, to generate structural loads. This isn't complete, but some methods like panel flutter need the Mach and Altitude directly. They get these from the Loadcase object.
  2. Construction type support is limited right now to Longerons. These are primary style I'm interested in, and stringer construction is harder to calculate anyway. If stringer types are defined, they should raise NotImplementedErrors.
  3. The Fuselage class contains attributes for the relevant component models. So cover_model, frame_model, long_model are attributes of Fuselage and must be defined from instantiation. This isn't locking in the sizing of these, just the object they can reference. Materials and other sizing attributes can and are changed as part of the synthesis routine.
  4. Net Loads methods on the Fuselage are able to generate a Shear-Bending diagram and look up the fuselage loads at any arbitrary station by linearly interpolating on this diagram (the Fuselage.lookup_loads() method).

There's more updates but I'll leave it here. No one reads these except for me anyway. 😁

Started the example script for a generic Medium Transport. Included code to plot the station geometry in a grid.

This took way too long...
This makes the methods more flexible.
Putting the loads onto frames, and building up the fuselage.
Debugged the loads for the transport example. We've got basic shear-moment diagrams!
Fixed the net loads function to properly balance on my example case.
Still very much WIP, but committing now to save a snapshot.
Added size_shell weight calculations.
Swapped all the component classes to use instance variables for sizing methods.
Added new longeron_coords method to Fuselage, for the First Moment of Area method.
Still a heavy WIP and I'm not sure what all has changed since I last commited. Just sending this up as a new starting point.
Finally!! We've got a full-up routine hacked together!
Added logging for debug, and found the root of cover pressure unreasonable results.

Multiplied by gravitational acceleration instead of dividing, and had some unreasonable defaults.
Setting instance MinorFrame flange thickness after sizing prior to calculating area.

Added minimum gauge attribute with reasonable default.
Just some administrative stuff to comply with darglint and flake8.

Also commenting out the mypy sessions for local checks. We don't use mypy right now.
@Czarified Czarified self-assigned this Jul 25, 2026
@Czarified Czarified added enhancement New feature or request breaking Breaking Changes refactoring Refactoring labels Jul 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking Breaking Changes enhancement New feature or request refactoring Refactoring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant