Source code for fastga_he.models.cost.lcc_annual_loan_cost

# 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 LCCAnnualLoanCost(om.ExplicitComponent): """ Computation of the yearly loan payment of standard mortgage formula from :cite:`gudmundsson:2013`. The 7% interest rate is applied typically with down payment of 10-20% and a good credit record. """
[docs] def setup(self): self.add_input( "data:cost:operation:loan_principal", units="USD", val=np.nan, ) self.add_input( "data:cost:operation:annual_interest_rate", val=0.07, desc="Annual interest rate of aircraft financing loan", ) self.add_input( "data:cost:operation:pay_period", val=15.0, units="yr", desc="Number of years to pay back, normally ranges between 10-20 years", ) self.add_output( "data:cost:operation:annual_loan_cost", val=15.0, units="USD/yr", desc="Annual loan cost of the aircraft", ) self.declare_partials("*", "*", method="exact")
[docs] def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): principal = inputs["data:cost:operation:loan_principal"] r_interest = inputs["data:cost:operation:annual_interest_rate"] period = inputs["data:cost:operation:pay_period"] outputs["data:cost:operation:annual_loan_cost"] = ( principal * r_interest / (1.0 - (1.0 + r_interest) ** -period) )
[docs] def compute_partials(self, inputs, partials, discrete_inputs=None): principal = inputs["data:cost:operation:loan_principal"] r_interest = inputs["data:cost:operation:annual_interest_rate"] period = inputs["data:cost:operation:pay_period"] partials["data:cost:operation:annual_loan_cost", "data:cost:operation:loan_principal"] = ( r_interest / (1.0 - (1.0 + r_interest) ** -period) ) partials[ "data:cost:operation:annual_loan_cost", "data:cost:operation:annual_interest_rate" ] = ( principal * (r_interest + 1.0) ** (period - 1.0) * ((r_interest + 1.0) ** (period + 1.0) - (period + 1.0) * r_interest - 1.0) / ((r_interest + 1.0) ** period - 1.0) ** 2.0 ) partials["data:cost:operation:annual_loan_cost", "data:cost:operation:pay_period"] = ( -principal * r_interest * (r_interest + 1.0) ** period * np.log(r_interest + 1.0) / ((r_interest + 1.0) ** period - 1.0) ** 2.0 )