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

classmethod load_from_json(file_path: Path)[source]#
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