Data Structures#
- class tuduam.data_structures.Aerodynamics(*, cL_alpha: float | None = None, alpha_zero_lift: float | None = None, cd0: float | None = None, spanwise_points: int | None = None)[source]#
Bases:
Parent- alpha_zero_lift: float | None#
- cL_alpha: float | None#
- cd0: float | None#
“Zero lift drag coefficient
- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- spanwise_points: int | None#
“The spanwise points used in the Weissinger-L/Lifiting line method. Odd integer
- class tuduam.data_structures.Airfoil(*, cl_alpha: Annotated[float, Gt(gt=2)], thickness_to_chord: float | None = None)[source]#
Bases:
Parent- cl_alpha: float#
- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- thickness_to_chord: float | None#
- class tuduam.data_structures.Engine(*, n_engines: Annotated[int, Gt(gt=0)], diameter: float | None = None, thrust: float | None = None, mass: float | None = None, power_grav_density: float | None = None, power_vol_density: float | None = None, x_rotor_loc: List | None = None, x_rotor_rel_loc: List | None = None, y_rotor_loc: List | None = None, ignore_loc: List | None = None)[source]#
Bases:
Parent- diameter: float | None#
- ignore_loc: List | None#
“Index of which engne positions to ignore in the wingbox analysis. For example when the engine is placed on the fuselage
- mass: float | None#
- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- n_engines: int#
- power_grav_density: float | None#
- power_vol_density: float | None#
- thrust: float | None#
- x_rotor_loc: List | None#
“A list of the x coordinates of your engines for both sides. Thus if you have 4 engines in total, the list must be 4 elements long. eg [2,4,4,2]. See section about coordinate systems if you have questions regardign this.
- x_rotor_rel_loc: List | None#
“Same as x_rotor_locations but relative to the wing, that is the leading edge of the spanwise location of the engine. Negative values are infront the wing
- y_rotor_loc: List | None#
“A list of the y coordinates of your engines for both sides. Thus if you have 4 engines in total, the list must be 4 elements long and correspond to the elements x_rotor_locations. eg [-6,-3,3,6]. See section about coordinate systems if you have questions regardign this.
- class tuduam.data_structures.FlightPerformance(*, wingloading: float | None = None, cL_cruise: float | None = None, mission_energy: float | None = None, n_ult: float | None = None, v_cruise: float | None = None, h_cruise: float | None = None)[source]#
Bases:
Parent- cL_cruise: float | None#
- h_cruise: float | None#
“cruise altitude
- mission_energy: float | None#
- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- n_ult: float | None#
- v_cruise: float | None#
- wingloading: float | None#
- class tuduam.data_structures.Fuselage(*, length_fuselage: float | None = None, width_fuselage: float | None = None, height_fuselage: float | None = None, mass: float | None = None)[source]#
Bases:
Parent- height_fuselage: float | None#
- length_fuselage: float | None#
- mass: float | None#
- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- width_fuselage: float | None#
- class tuduam.data_structures.HybridPowertrain(*, fuel_cell_mass: float | None = None, battery_mass: float | None = None)[source]#
Bases:
Parent- battery_mass: float | None#
- fuel_cell_mass: float | None#
- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tuduam.data_structures.Material(*, safety_factor: float, post_buckling_ratio: float | None = None, young_modulus: float | None = None, load_factor: float | None = None, shear_modulus: float | None = None, poisson: float | None = None, density: float | None = None, sigma_yield: float | None = None, sigma_ultimate: float | None = None, shear_strength: float | None = None, beta_crippling: float | None = None, m_crippling: float | None = None, g_crippling: float | None = None)[source]#
Bases:
Parent- beta_crippling: float | None#
Material constant specific for crippling
- density: float | None#
- g_crippling: float | None#
Material constant specific for crippling Source
[1] T.H.G.Megson. Aerospace Structural Design an Analysis, 4th ed. Oxford, UK: Elsevier, 2007. isbn: -13: 978-0-75066-7395.
- load_factor: float | None#
- m_crippling: float | None#
Material constant specific for crippling
- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- poisson: float | None#
- post_buckling_ratio: float | None#
(PB) The ratio of the applied load to the bucklingload and, for post-buckled structures is greater than 1
Source
[1] Kassapoglou, C. (2010). page 145, Design and analysis of composite structures: With applications to aerospace structures. John Wiley & Sons.
- safety_factor: float#
- shear_modulus: float | None#
- shear_strength: float | None#
- sigma_ultimate: float | None#
- sigma_yield: float | None#
- young_modulus: float | None#
- class tuduam.data_structures.Parent[source]#
Bases:
BaseModel- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- class tuduam.data_structures.Propeller(*, n_blades: float, r_prop: float, rpm_cruise: float, xi_0: float, chord_arr: list | None = None, rad_arr: list | None = None, pitch_arr: list | None = None, tc_ratio: float | None = None)[source]#
Bases:
Parent- chord_arr: list | None#
“Array with the chords at each station
- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- n_blades: float#
The number of blades on the propellor
- pitch_arr: list | None#
“Array with the pitch at each station
- r_prop: float#
“Propeller radius
- rad_arr: list | None#
“Radial coordinates for each station
- rpm_cruise: float#
“The rotations per minute during cruise flight
- tc_ratio: float | None#
Thickness over chord ratio of the airfoil
- xi_0: float#
“Non-dimensional hub radius (r_hub/R) [-]
- class tuduam.data_structures.SingleWing(*, aspect_ratio: Annotated[float, Gt(gt=0), Le(le=20)], taper: Annotated[float, Gt(gt=0), Le(le=1)], quarterchord_sweep: float, washout: float, x_le_root_global: float | None = None, surface: float | None = None, span: float | None = None, chord_root: float | None = None, chord_tip: float | None = None, chord_mac: float | None = None, sweep_le: float | None = None, x_lemac_local: float | None = None, y_mac: float | None = None, mass: float | None = None, wingbox_start: float | None = None, wingbox_end: float | None = None, n_ribs: int | None = None, n_str: int | None = None, t_rib: float | None = None, spar_thickness: float | None = None, fl_thickness: float | None = None, stringer_height: float | None = None, stringer_width: float | None = None, stringer_thickness: float | None = None, skin_thickness: float | None = None, rib_loc: List | None = None)[source]#
Bases:
Parent- aspect_ratio: float#
- chord_mac: float | None#
- chord_root: float | None#
- chord_tip: float | None#
- fl_thickness: float | None#
- mass: float | None#
- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- n_ribs: int | None#
- n_str: int | None#
“The amount of stringers on one flange
- quarterchord_sweep: float#
- rib_loc: List | None#
“A list of the spanwise position of the ribs. Can be left to None as it will be automatically created. Howeve if pre-defined it will keep this list
- skin_thickness: float | None#
- span: float | None#
- spar_thickness: float | None#
- stringer_height: float | None#
- stringer_thickness: float | None#
- stringer_width: float | None#
- surface: float | None#
- sweep_le: float | None#
- t_rib: float | None#
- taper: float#
- washout: float#
“The geometric twist between the tip and root chord in radians. Negative value indicates washin i.e the tip is at a higher AoA.
- wingbox_end: float | None#
- wingbox_start: float | None#
- x_le_root_global: float | None#
“The coordinate of the leading edge of the root chord. Defines the positioning of the wing
- x_lemac_local: float | None#
- y_mac: float | None#
- class tuduam.data_structures.VTOL(*, mtom: float | None = None, oem: float | None = None)[source]#
Bases:
Parent- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- mtom: float | None#
- oem: float | None#
- class tuduam.data_structures.Wingbox(*, n_cell: int, spar_loc_nondim: list, str_cell: list | None = None, t_sk_cell: list | None = None, t_sp: float | None = None, area_str: float | None = None, t_st: float | None = None, w_st: float | None = None, h_st: float | None = None)[source]#
Bases:
Parent- area_str: float | None#
“Area of the stringer. Note that if you define area of the stringer. You can’t define stringers dimensions. The reason both options exists is a result of how the API developped over time and the requirement for stringer geometry for constraints.
- h_st: float | None#
“ Thickness of the stringer
- model_config = {'extra': 'forbid', 'validate_assignment': True}#
Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].
- n_cell: int#
“The amount of cells in the wingbox structure
- spar_loc_nondim: list#
“The location of the spar over the chord so dimensionless. Length should be n_cell - 1
- str_cell: list | None#
“List of stringers (both top and bottom) per cell. Length should be n_cell. Due to the discretization it also required to be an even number
- t_sk_cell: list | None#
The thickness of the skin in each cell, length should be equal to n_cell
- t_sp: float | None#
The thickness of the spars
- t_st: float | None#
“ Thickness of the stringer
- w_st: float | None#
“ Thickness of the stringer