Data Structures#
- pydantic model tuduam.data_structures.Aerodynamics[source]#
Bases:
Parent
Show JSON schema
{ "title": "Aerodynamics", "type": "object", "properties": { "cL_alpha": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Cl Alpha" }, "alpha_zero_lift": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Alpha Zero Lift" }, "cd0": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Cd0" }, "spanwise_points": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Spanwise Points" } }, "additionalProperties": false }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field alpha_zero_lift: float | None = None#
- field cL_alpha: float | None = None#
- field cd0: float | None = None#
“Zero lift drag coefficient
- field spanwise_points: int | None = None#
“The spanwise points used in the Weissinger-L/Lifiting line method. Odd integer
- pydantic model tuduam.data_structures.Airfoil[source]#
Bases:
Parent
Show JSON schema
{ "title": "Airfoil", "type": "object", "properties": { "cl_alpha": { "exclusiveMinimum": 2.0, "title": "Cl Alpha", "type": "number" }, "thickness_to_chord": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Thickness To Chord" } }, "additionalProperties": false, "required": [ "cl_alpha" ] }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field cl_alpha: float [Required]#
- Constraints:
gt = 2
- field thickness_to_chord: float | None = None#
- pydantic model tuduam.data_structures.Engine[source]#
Bases:
Parent
Show JSON schema
{ "title": "Engine", "type": "object", "properties": { "n_engines": { "exclusiveMinimum": 0, "title": "N Engines", "type": "integer" }, "diameter": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Diameter" }, "thrust": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Thrust" }, "mass": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Mass" }, "power_grav_density": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Power Grav Density" }, "power_vol_density": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Power Vol Density" }, "x_rotor_loc": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "X Rotor Loc" }, "x_rotor_rel_loc": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "X Rotor Rel Loc" }, "y_rotor_loc": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Y Rotor Loc" }, "ignore_loc": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Ignore Loc" } }, "additionalProperties": false, "required": [ "n_engines" ] }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field diameter: float | None = None#
- field ignore_loc: List | None = None#
“Index of which engne positions to ignore in the wingbox analysis. For example when the engine is placed on the fuselage
- field mass: float | None = None#
- field n_engines: int [Required]#
- Constraints:
gt = 0
- field power_grav_density: float | None = None#
- field power_vol_density: float | None = None#
- field thrust: float | None = None#
- field x_rotor_loc: List | None = 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.
- field x_rotor_rel_loc: List | None = 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
- field y_rotor_loc: List | None = 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.
- pydantic model tuduam.data_structures.FlightPerformance[source]#
Bases:
Parent
Show JSON schema
{ "title": "FlightPerformance", "type": "object", "properties": { "wingloading": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Wingloading" }, "cL_cruise": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Cl Cruise" }, "mission_energy": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Mission Energy" }, "n_ult": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "N Ult" }, "v_cruise": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "V Cruise" }, "h_cruise": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "H Cruise" } }, "additionalProperties": false }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field cL_cruise: float | None = None#
- field h_cruise: float | None = None#
“cruise altitude
- field mission_energy: float | None = None#
- field n_ult: float | None = None#
- field v_cruise: float | None = None#
- field wingloading: float | None = None#
- pydantic model tuduam.data_structures.Fuselage[source]#
Bases:
Parent
Show JSON schema
{ "title": "Fuselage", "type": "object", "properties": { "length_fuselage": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Length Fuselage" }, "width_fuselage": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Width Fuselage" }, "height_fuselage": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Height Fuselage" }, "mass": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Mass" } }, "additionalProperties": false }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field height_fuselage: float | None = None#
- field length_fuselage: float | None = None#
- field mass: float | None = None#
- field width_fuselage: float | None = None#
- pydantic model tuduam.data_structures.HybridPowertrain[source]#
Bases:
Parent
Show JSON schema
{ "title": "HybridPowertrain", "type": "object", "properties": { "fuel_cell_mass": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Fuel Cell Mass" }, "battery_mass": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Battery Mass" } }, "additionalProperties": false }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field battery_mass: float | None = None#
- field fuel_cell_mass: float | None = None#
- pydantic model tuduam.data_structures.Material[source]#
Bases:
Parent
Show JSON schema
{ "title": "Material", "type": "object", "properties": { "safety_factor": { "title": "Safety Factor", "type": "number" }, "post_buckling_ratio": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Post Buckling Ratio" }, "young_modulus": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Young Modulus" }, "load_factor": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Load Factor" }, "shear_modulus": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Shear Modulus" }, "poisson": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Poisson" }, "density": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Density" }, "sigma_yield": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Sigma Yield" }, "sigma_ultimate": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Sigma Ultimate" }, "shear_strength": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Shear Strength" }, "beta_crippling": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Beta Crippling" }, "m_crippling": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "M Crippling" }, "g_crippling": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "G Crippling" } }, "additionalProperties": false, "required": [ "safety_factor" ] }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field beta_crippling: float | None = None#
Material constant specific for crippling
- field density: float | None = None#
- field g_crippling: float | None = 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.
- field load_factor: float | None = None#
- field m_crippling: float | None = None#
Material constant specific for crippling
- field poisson: float | None = None#
- field post_buckling_ratio: float | None = 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.
- field safety_factor: float [Required]#
- field shear_modulus: float | None = None#
- field shear_strength: float | None = None#
- field sigma_ultimate: float | None = None#
- field sigma_yield: float | None = None#
- field young_modulus: float | None = None#
- pydantic model tuduam.data_structures.Parent[source]#
Bases:
BaseModel
Show JSON schema
{ "title": "Parent", "type": "object", "properties": {}, "additionalProperties": false }
- Config:
extra: str = forbid
validate_assignment: bool = True
- pydantic model tuduam.data_structures.Propeller[source]#
Bases:
Parent
Show JSON schema
{ "title": "Propeller", "type": "object", "properties": { "n_blades": { "title": "N Blades", "type": "number" }, "r_prop": { "title": "R Prop", "type": "number" }, "rpm_cruise": { "title": "Rpm Cruise", "type": "number" }, "xi_0": { "title": "Xi 0", "type": "number" }, "chord_arr": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Chord Arr" }, "rad_arr": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Rad Arr" }, "pitch_arr": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Pitch Arr" }, "tc_ratio": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Tc Ratio" } }, "additionalProperties": false, "required": [ "n_blades", "r_prop", "rpm_cruise", "xi_0" ] }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field chord_arr: list | None = None#
“Array with the chords at each station
- field n_blades: float [Required]#
The number of blades on the propellor
- field pitch_arr: list | None = None#
“Array with the pitch at each station
- field r_prop: float [Required]#
“Propeller radius
- field rad_arr: list | None = None#
“Radial coordinates for each station
- field rpm_cruise: float [Required]#
“The rotations per minute during cruise flight
- field tc_ratio: float | None = None#
Thickness over chord ratio of the airfoil
- field xi_0: float [Required]#
“Non-dimensional hub radius (r_hub/R) [-]
- pydantic model tuduam.data_structures.SingleWing[source]#
Bases:
Parent
Show JSON schema
{ "title": "SingleWing", "type": "object", "properties": { "aspect_ratio": { "exclusiveMinimum": 0.0, "maximum": 20.0, "title": "Aspect Ratio", "type": "number" }, "taper": { "exclusiveMinimum": 0.0, "maximum": 1.0, "title": "Taper", "type": "number" }, "quarterchord_sweep": { "title": "Quarterchord Sweep", "type": "number" }, "washout": { "title": "Washout", "type": "number" }, "x_le_root_global": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "X Le Root Global" }, "surface": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Surface" }, "span": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Span" }, "chord_root": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Chord Root" }, "chord_tip": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Chord Tip" }, "chord_mac": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Chord Mac" }, "sweep_le": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Sweep Le" }, "x_lemac_local": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "X Lemac Local" }, "y_mac": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Y Mac" }, "mass": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Mass" }, "wingbox_start": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Wingbox Start" }, "wingbox_end": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Wingbox End" }, "n_ribs": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "N Ribs" }, "n_str": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "N Str" }, "t_rib": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "T Rib" }, "spar_thickness": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Spar Thickness" }, "fl_thickness": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Fl Thickness" }, "stringer_height": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Stringer Height" }, "stringer_width": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Stringer Width" }, "stringer_thickness": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Stringer Thickness" }, "skin_thickness": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Skin Thickness" }, "rib_loc": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Rib Loc" } }, "additionalProperties": false, "required": [ "aspect_ratio", "taper", "quarterchord_sweep", "washout" ] }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field aspect_ratio: float [Required]#
- Constraints:
gt = 0
le = 20
- field chord_mac: float | None = None#
- field chord_root: float | None = None#
- field chord_tip: float | None = None#
- field fl_thickness: float | None = None#
- field mass: float | None = None#
- field n_ribs: int | None = None#
- field n_str: int | None = None#
“The amount of stringers on one flange
- field quarterchord_sweep: float [Required]#
- field rib_loc: List | None = 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
- field skin_thickness: float | None = None#
- field span: float | None = None#
- field spar_thickness: float | None = None#
- field stringer_height: float | None = None#
- field stringer_thickness: float | None = None#
- field stringer_width: float | None = None#
- field surface: float | None = None#
- field sweep_le: float | None = None#
- field t_rib: float | None = None#
- field taper: float [Required]#
- Constraints:
gt = 0
le = 1
- field washout: float [Required]#
“The geometric twist between the tip and root chord in radians. Negative value indicates washin i.e the tip is at a higher AoA.
- field wingbox_end: float | None = None#
- field wingbox_start: float | None = None#
- field x_le_root_global: float | None = None#
“The coordinate of the leading edge of the root chord. Defines the positioning of the wing
- field x_lemac_local: float | None = None#
- field y_mac: float | None = None#
- pydantic model tuduam.data_structures.VTOL[source]#
Bases:
Parent
Show JSON schema
{ "title": "VTOL", "type": "object", "properties": { "mtom": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Mtom" }, "oem": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Oem" } }, "additionalProperties": false }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field mtom: float | None = None#
- field oem: float | None = None#
- pydantic model tuduam.data_structures.Wingbox[source]#
Bases:
Parent
Show JSON schema
{ "title": "Wingbox", "type": "object", "properties": { "n_cell": { "title": "N Cell", "type": "integer" }, "spar_loc_nondim": { "items": {}, "title": "Spar Loc Nondim", "type": "array" }, "str_cell": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "Str Cell" }, "t_sk_cell": { "anyOf": [ { "items": {}, "type": "array" }, { "type": "null" } ], "default": null, "title": "T Sk Cell" }, "t_sp": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "T Sp" }, "area_str": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "Area Str" }, "t_st": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "T St" }, "w_st": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "W St" }, "h_st": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "default": null, "title": "H St" } }, "additionalProperties": false, "required": [ "n_cell", "spar_loc_nondim" ] }
- Config:
extra: str = forbid
validate_assignment: bool = True
- Fields:
- field area_str: float | None = 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.
- field h_st: float | None = None#
“ Thickness of the stringer
- field n_cell: int [Required]#
“The amount of cells in the wingbox structure
- field spar_loc_nondim: list [Required]#
“The location of the spar over the chord so dimensionless. Length should be n_cell - 1
- field str_cell: list | None = 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
- field t_sk_cell: list | None = None#
The thickness of the skin in each cell, length should be equal to n_cell
- field t_sp: float | None = None#
The thickness of the spars
- field t_st: float | None = None#
“ Thickness of the stringer
- field w_st: float | None = None#
“ Thickness of the stringer