Source code for fastga_he.models.environmental_impacts.lca_kerosene_per_fu

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

import numpy as np
import openmdao.api as om


[docs] class LCAKerosenePerFU(om.ExplicitComponent):
[docs] def initialize(self): self.options.declare( name="tanks_name_list", default=None, types=list, desc="List of names of the tanks, inside the powertrain, that store kerosene", allow_none=False, ) self.options.declare( name="tanks_type_list", default=None, types=list, desc="List of types of the tanks, inside the powertrain, that store kerosene", allow_none=False, )
[docs] def setup(self): tanks_names = self.options["tanks_name_list"] tanks_types = self.options["tanks_type_list"] self.add_input(name="data:environmental_impact:flight_per_fu", val=np.nan) self.add_input(name="data:environmental_impact:aircraft_per_fu", val=np.nan) self.add_input(name="data:environmental_impact:line_test:mission_ratio", val=np.nan) self.add_input(name="data:environmental_impact:delivery:mission_ratio", val=np.nan) self.add_output( name="data:LCA:operation:he_power_train:kerosene:mass_per_fu", units="kg", val=0.0 ) self.declare_partials( of="data:LCA:operation:he_power_train:kerosene:mass_per_fu", wrt="data:environmental_impact:flight_per_fu", method="exact", ) self.add_output( name="data:LCA:manufacturing:he_power_train:kerosene:mass_per_fu", units="kg", val=0.0 ) self.declare_partials( of="data:LCA:manufacturing:he_power_train:kerosene:mass_per_fu", wrt=[ "data:environmental_impact:aircraft_per_fu", "data:environmental_impact:line_test:mission_ratio", ], method="exact", ) self.add_output( name="data:LCA:distribution:he_power_train:kerosene:mass_per_fu", units="kg", val=0.0, ) self.declare_partials( of="data:LCA:distribution:he_power_train:kerosene:mass_per_fu", wrt=[ "data:environmental_impact:aircraft_per_fu", "data:environmental_impact:delivery:mission_ratio", ], method="exact", ) for tank_name, tank_type in zip(tanks_names, tanks_types): input_name = ( "data:propulsion:he_power_train:" + tank_type + ":" + tank_name + ":fuel_consumed_main_route" ) self.add_input(input_name, units="kg", val=np.nan) self.declare_partials(of="*", wrt=input_name, method="exact")
[docs] def compute(self, inputs, outputs, discrete_inputs=None, discrete_outputs=None): tanks_names = self.options["tanks_name_list"] tanks_types = self.options["tanks_type_list"] total_fuel = 0 for tank_name, tank_type in zip(tanks_names, tanks_types): total_fuel += inputs[ "data:propulsion:he_power_train:" + tank_type + ":" + tank_name + ":fuel_consumed_main_route" ] outputs["data:LCA:operation:he_power_train:kerosene:mass_per_fu"] = ( total_fuel * inputs["data:environmental_impact:flight_per_fu"] ) outputs["data:LCA:manufacturing:he_power_train:kerosene:mass_per_fu"] = ( inputs["data:environmental_impact:line_test:mission_ratio"] * total_fuel * inputs["data:environmental_impact:aircraft_per_fu"] ) outputs["data:LCA:distribution:he_power_train:kerosene:mass_per_fu"] = ( inputs["data:environmental_impact:delivery:mission_ratio"] * total_fuel * inputs["data:environmental_impact:aircraft_per_fu"] )
[docs] def compute_partials(self, inputs, partials, discrete_inputs=None): tanks_names = self.options["tanks_name_list"] tanks_types = self.options["tanks_type_list"] partial_flight_per_fu = 0 for tank_name, tank_type in zip(tanks_names, tanks_types): partials[ "data:LCA:operation:he_power_train:kerosene:mass_per_fu", "data:propulsion:he_power_train:" + tank_type + ":" + tank_name + ":fuel_consumed_main_route", ] = inputs["data:environmental_impact:flight_per_fu"] partials[ "data:LCA:manufacturing:he_power_train:kerosene:mass_per_fu", "data:propulsion:he_power_train:" + tank_type + ":" + tank_name + ":fuel_consumed_main_route", ] = ( inputs["data:environmental_impact:line_test:mission_ratio"] * inputs["data:environmental_impact:aircraft_per_fu"] ) partials[ "data:LCA:distribution:he_power_train:kerosene:mass_per_fu", "data:propulsion:he_power_train:" + tank_type + ":" + tank_name + ":fuel_consumed_main_route", ] = ( inputs["data:environmental_impact:delivery:mission_ratio"] * inputs["data:environmental_impact:aircraft_per_fu"] ) partial_flight_per_fu += inputs[ "data:propulsion:he_power_train:" + tank_type + ":" + tank_name + ":fuel_consumed_main_route" ] partials[ "data:LCA:operation:he_power_train:kerosene:mass_per_fu", "data:environmental_impact:flight_per_fu", ] = partial_flight_per_fu partials[ "data:LCA:manufacturing:he_power_train:kerosene:mass_per_fu", "data:environmental_impact:aircraft_per_fu", ] = inputs["data:environmental_impact:line_test:mission_ratio"] * partial_flight_per_fu partials[ "data:LCA:manufacturing:he_power_train:kerosene:mass_per_fu", "data:environmental_impact:line_test:mission_ratio", ] = inputs["data:environmental_impact:aircraft_per_fu"] * partial_flight_per_fu partials[ "data:LCA:distribution:he_power_train:kerosene:mass_per_fu", "data:environmental_impact:aircraft_per_fu", ] = inputs["data:environmental_impact:delivery:mission_ratio"] * partial_flight_per_fu partials[ "data:LCA:distribution:he_power_train:kerosene:mass_per_fu", "data:environmental_impact:delivery:mission_ratio", ] = inputs["data:environmental_impact:aircraft_per_fu"] * partial_flight_per_fu