Weight Module¶
The Weight module in PhlyGreen computes the aircraft’s takeoff weight (WTO) through an iterative process that exploits the mission simulation workflow. The iterative process is necessary because the mission simulation workflow requires the takeoff weight as input, which is unknown a priori. It supports two fidelity levels:
- Class I – simplified empirical structural weight model
- Class II – detailed FLOPS-based component weight estimation
1. Overview of the Weight Estimation Process¶
PhlyGreen solves for the takeoff weight that satisfies the aircraft mass balance:
where it is evident that the fuel, battery, structure, and powertrain masses depend on the takeoff weight. More specifically, fuel and battery masses are solved for in the mission workflow, while the structure and powertrain masses are computed afterwards in the weight workflow.
This is rewritten into a root-finding function:
The algorithm finds \( W_{\text{TO}}^{\star} \) such that:
using the Brent root-finding method. Each iteration, thus, requires the evaluation of the mission workflow.
2. Weight Breakdown Components¶
PhlyGreen aggregates all mass contributions:
| Component | Traditional | Hybrid |
|---|---|---|
| Fuel weight | ✓ | ✓ |
| Battery weight | ✗ | ✓ |
| Structural weight | ✓ | ✓ |
| Powertrain weight | ✓ | ✓ thermal + electric |
| Payload + crew | ✓ | ✓ |
Each component is recomputed at every iteration of WTO, except for the payload and crew, which are given as input requirements by the user.
3. Fuel Weight from Mission Energy¶
The Mission module returns the energy required, in [J], depending on the aircraft configuration:
- Traditional:
E_f = mission.EvaluateMission(WTO)
- Hybrid:
(E_f, E_bat) = mission.EvaluateMission(WTO)
The fuel mass is computed as:
with \( e_f \) the fuel LHV [J/kg].
If user does not specify a final reserve:
4. Battery Weight in Hybrid Configurations¶
The battery mass computation differs between Class I and Class II models:
- Class I: Battery mass must satisfy both energy and peak power requirements:
where:
- \( e_{\text{bat}} \): battery specific energy [Wh/kg]
- \( p_{\text{bat}} \): battery specific power [W/kg]
- \( P_{\text{peak}} \): maximum electrical power demanded [W], stored in
mission.Max_PBatby the mission module.
The code stores which term dominates (WBatidx).
- Class II: Battery mass is computed by the battery sizing loop in the mission module and accessed via the
battery.pack_weightattribute.
5. Powertrain Weight¶
For both traditional and hybrid aircraft, powertrain mass scales with subsystem specific powers, hence it is a Class I estimation:
6. Structural Weight Models¶
6.1 Class I Model¶
The structural mass is computed with semi-empirical functions of the takeoff mass.
The function is accessed via the structures.StructuralWeight(WTO) method.
Class I is fast and used for conceptual studies.
6.2 Class II Model — FLOPS Implementation¶
If Class == "II", the code uses FLOPS_model.py, which estimates the masses of:
- Wing
- Fuselage
- Horizontal / vertical tail
- Landing gear
- Nacelle assemblies
- Propellers
- Systems and equipment
- Paint
The FLOPS component masses (in lb) are summed and converted to kg:
This model captures:
- aerodynamic load scaling
- geometric effects
- structural layout assumptions
7. Brent Root-Finding Loop¶
PhlyGreen solves:
with:
self.WTO = brenth(func, WTO_min, WTO_max, xtol=0.1)
The function returns:
W_total - WTO