In the process of setting vehicle parameters, the carculator
attempts to design optimally sized cars from scratch.
It does so using an iterative approach:
while diff > 0.00001:
old_driving_mass = self["driving mass"].sum().values
self.set_vehicle_mass()
self.set_power_parameters()
(...)
diff = (self["driving mass"].sum().values - old_driving_mass) / self[
"driving mass"
].sum()
The iterative approach is required because (highly simplified) vehicle parameters are interdependent:
weight(power)
and power(weight)
For each vehicle size class, it assumes a starting value for weight/power is provided. The interdependent vehicle parameters are then solved for iteratively.
In contrast, "sizing" aircraft from scratch is unlikely to be a viable approach. Sizing aircraft is a complex undertaking that needs to account for many business parameters that we could not hope to capture. For instance, while an Airbus A380 in all-economy seating configuration would have excellent fuel efficiency/pax, industry now considers the very concept a failure.
It would therefore be prudent to use aircraft parameters from existing proposals (such as the MIT D8 Concept), where all these considerations have already been considered.
@julienmctighe found similar approaches in literature (email from 19.01.2024):
After a quick review of studies with sensitivity analysis, I agree it may be difficult to size aircraft up or down in seating capacity. Most treat seating capacity as fixed and report sensitivity to technology assumptions (LH2 tank efficiency, FC energy density) or design decisions (tank location, material, vent pressure). I have included two examples below.
Onorato 2022 - https://doi.org/10.1007/s13272-022-00601-6
Design decisions (see Section 4 Results)
Karpuk 2023 - https://doi.org/10.3390/aerospace10060566
Technology sensitivity (see Section 4.2.3. Technology Sensitivity of Hydrogen BWB Aircraft)
It therefore seems that we need to have not a "sizing" function, but a "weight and balance"
calculation function. This function would compute the fuel required per trip:
def calculate_fuel(distance: int, payload: int, mtow: int, maxfuelweight: int) -> float:
(...)
return fuel_weight