Skip to main content
The LCC model breaks total operating cost into two buckets — fixed (independent of how much you fly) and variable (scale with flight hours) — then integrates them over the service life to produce life cycle totals and revenue metrics.

Cost taxonomy

Total Annual Cost
├── Fixed Costs
│   ├── Financing & Asset
│   │   ├── Annual Amortization        (loan repayment)
│   │   ├── Annual Depreciation        (straight-line residual loss)
│   │   └── Landing Site Support       (vertiport fees × hours)
│   ├── Insurance
│   │   ├── Hull Insurance
│   │   └── Liability Insurance        (+10% for autonomous aircraft)
│   ├── Facilities & Admin
│   │   ├── Maintenance Software
│   │   ├── Miscellaneous Service
│   │   ├── Property Tax
│   │   └── Hangar & Office Expenses
│   └── Personnel
│       ├── Pilot Salaries
│       ├── Staff Salaries
│       ├── Personnel Benefits
│       └── Annual Training Cost
└── Variable Costs (per flight hour × annual hours)
    ├── Fuel Cost
    ├── Maintenance Labor
    ├── Scheduled Parts
    ├── Midlife Inspection Reserve
    ├── Propeller Allowance
    ├── Engine Overhaul Reserve
    ├── Modernisation Reserve
    ├── Paint Reserve
    ├── Refurbishing Reserve
    ├── Battery Replacement Reserve    (electric/hybrid only)
    ├── Miscellaneous Trip Expenses
    └── Landing Fees

Fixed cost calculations

Financing

The model uses a standard amortizing loan formula:
Loan amount        = Purchase price × Finance_Percent
Monthly rate (r)   = Interest_Rate / 12
n                  = Life_Cycle_Time × 12   (number of monthly payments)

Monthly payment    = Loan × r(1+r)^n / ((1+r)^n − 1)
Annual amortization = Monthly payment × 12

Depreciation

Straight-line over the service life:
Resale value        = Purchase price × Resale_Percent
Annual depreciation = (Purchase price − Resale value) / Life_Cycle_Time

Autonomous aircraft adjustments

When Number_of_Pilots = 0:
  • Automation_Cost_Base is added to the purchase price
  • Liability insurance is multiplied by 1.10 (10% surcharge)
  • Pilot salaries and pilot training are zero

Personnel

Pilots per aircraft = Number_of_Pilots × crews (from lookup)
Pilot salaries      = Annual_Pilot_Salary × Pilots_per_Aircraft
Benefits            = Pilot_Salary × Percent_Salaries_to_Benefits × Pilots_per_Aircraft
Training            = Maintenance_Training_Cost + Pilot_Training_Cost × Pilots_per_Aircraft

Variable cost calculations

All variable costs are expressed per flight hour and then multiplied by Flight_Hours_per_Year to get annual totals.

Amortised reserve costs

Replacement/overhaul costs are spread across the interval between events:
Engine overhaul reserve  = (Engine_Overhaul_Cost × Number_of_Engines) / Engine_Overhaul_Interval
Modernisation reserve    = Modernisation_Cost / Modernisation_Interval
Paint reserve            = Paint_Cost / Paint_Interval
Refurbishing reserve     = Refurbishing_Cost / Refurbishing_Interval
Battery reserve          = Battery_Cost / Battery_Life
Propeller allowance      = Propeller_Cost / Propeller_Life

Landing fees

Flights per hour  = 1 / Flight_Time_Hours
                  = Aircraft_Speed / Mission_Stage_Length
Landing fees/hour = Flights_per_Hour × Landing_Fee

Life cycle simulation

Annual costs are constant (no inflation model by default), so the ODE right-hand side is a constant vector. The state vector tracks ten cumulative quantities:
IndexState variable
0Cumulative amortization
1Cumulative total costs
2Cumulative fixed costs
3Reserved
4Reserved
5Cumulative personnel costs
6Cumulative training costs
7Cumulative variable costs
8Total flight hours
9Cumulative landing fees
Initial conditions include the down payment (purchase price × (1 − Finance_Percent)) and the first-year training cost as upfront charges at t = 0. Integration runs from year 0 to Life_Cycle_Time using SciPy’s solve_ivp with RK45 (relative tolerance 1e-6, absolute tolerance 1e-8).

Revenue metrics

After simulation, calculate_metrics() derives two revenue-facing metrics:

Revenue CASM

Cost per available seat-nautical mile — the standard airline profitability metric:
Revenue hours     = Flight_Hours_per_Year × (1 − Percent_Repositioning_Flight_Hours)
Revenue nm/year   = Revenue_hours × Aircraft_Speed  (statute miles → nm via 1.151 factor)
Seat-nm/year      = Revenue nm/year × Aircraft_PAX_Seats

Revenue CASM      = Life_Cycle_Total_Cost × (1 + Profit_Margin) / (Seat-nm over life cycle)

Fare per passenger-nautical mile

Fare per pax-nm   = Revenue_CASM / 5
The /5 factor normalises CASM to a per-passenger basis assuming an average load factor. This is a planning-level estimate — adjust Aircraft_PAX_Seats and your profit margin to model different load scenarios.

Comparison outputs

run_comparison() returns a DataFrame with one row per aircraft, sorted by Revenue CASM:
ColumnDescription
AircraftDisplay name parsed from filename
Revenue_CASMRevenue cost per available seat-nm
Fare_per_Pax_NMRequired fare per passenger-nm
Total_Annual_CostsAnnual fixed + variable costs
Life_Cycle_Total_CostCumulative cost over service life
Annual_Fixed_CostsFixed cost subtotal
Annual_Variable_CostsVariable cost subtotal
Aircraft_Purchase_PriceAcquisition cost
Variable_Cost_per_HourTotal variable cost per flight hour
Aircraft_SpeedAverage cruise speed (knots)
Pilots_per_AircraftEffective pilot count
PAX_SeatsPassenger seat count