Source code for fastga_he.models.cost.lcc_learning_curve_discount

# This file is part of FAST-OAD_CS23-HE : A framework for rapid Overall Aircraft Design of Hybrid
# Electric Aircraft.
# Copyright (C) 2025 ISAE-SUPAERO

import numpy as np
import openmdao.api as om


[docs] class LCCLearningCurveDiscount(om.ExplicitComponent): """ Computation of the aircraft production learning curve discount factor for tooling and manufacturing. The computation is obtained from http://www.ae.metu.edu.tr/~ae452sc2/lecture8_cost.pdf. The learning curve percentage falls between 80% to 90% based on the results from :cite:`bongers:2017`. """
[docs] def setup(self): self.add_input( "data:cost:production:learning_curve_percentage", val=85.0, units="percent", desc="The percentage decrease in unit production cost after extensive learning", ) self.add_input( "data:cost:production:similar_aircraft_made", val=1.0, desc="The number of similar models of aircraft produced by the manufacturer", ) self.add_input( "data:cost:production:number_aircraft_5_years", val=np.nan, desc="Number of planned aircraft to be produced over a 5-year period or 60 months", ) self.add_output( "data:cost:production:maturity_discount", val=1.0, desc="The discount factor in manufacturing and tooling bsed on process maturity", ) self.declare_partials(of="*", wrt="*", method="exact")
[docs] def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): outputs["data:cost:production:maturity_discount"] = ( inputs["data:cost:production:similar_aircraft_made"] / inputs["data:cost:production:number_aircraft_5_years"] ) ** (np.log2(0.02 * inputs["data:cost:production:learning_curve_percentage"]) - 1.0)
[docs] def compute_partials(self, inputs, partials, discrete_inputs=None): aircraft_made = inputs["data:cost:production:similar_aircraft_made"] aircraft_planned = inputs["data:cost:production:number_aircraft_5_years"] factor = np.log2(0.02 * inputs["data:cost:production:learning_curve_percentage"]) partials[ "data:cost:production:maturity_discount", "data:cost:production:number_aircraft_5_years", ] = -(factor - 1.0) * (aircraft_made / aircraft_planned) ** factor / aircraft_made partials[ "data:cost:production:maturity_discount", "data:cost:production:similar_aircraft_made", ] = (factor - 1.0) * (aircraft_made / aircraft_planned) ** (factor - 1.0) / aircraft_made partials[ "data:cost:production:maturity_discount", "data:cost:production:learning_curve_percentage", ] = ( (aircraft_made / aircraft_planned) ** (factor - 1.0) * np.log(aircraft_made / aircraft_planned) / (inputs["data:cost:production:learning_curve_percentage"] * np.log(2.0)) )