Source code for oemof.eesyplan.facades.converters.Electrolyzer

from oemof.eesyplan.investment import _create_invest_if_wanted
from oemof.solph import Flow
from oemof.solph.components import Converter


[docs] class Electrolyzer(Converter):
[docs] def __init__( self, name, bus_in_electricity, bus_out_h2, project_data, bus_out_heat=None, efficiency=0.3, efficiency_heat=0.6, age_installed=0, installed_capacity=0, capex_var=1000, capex_fix=0, opex_fix=10, opex_var=0, lifetime=20, optimize_cap=True, maximum_capacity=float("+inf"), ): """ Electrolyzer for hydrogen production. This class represents an electrolyzer that converts electrical energy into hydrogen gas through electrolysis, producing both hydrogen and waste heat. .. important :: The efficiency parameter determines the conversion rate from electricity to hydrogen. :Structure: *input* 1. el_bus : Electricity *output* 1. heat_bus : Heat 2. h2_bus : H2 Parameters ---------- name : str Name of the asset. age_installed : int, default=0 Number of years the asset has already been in operation. installed_capacity : float, default=0 Already existing installed capacity. capex_fix : float, default=1000 Specific investment costs of the asset related to the installed capacity (CAPEX). capex_var : float, default=1000 Specific investment costs of the asset related to the installed capacity (CAPEX). opex_fix : float, default=10 Specific operational and maintenance costs of the asset related to the installed capacity (OPEX_fix). opex_var : float, default=0.01 Costs associated with a flow through/from the asset (OPEX_var or fuel costs). lifetime : int, default=20 Number of operational years of the asset until it has to be replaced. optimize_cap : bool, default=False Choose if capacity optimization should be performed for this asset. maximum_capacity : float or None, default=None Maximum total capacity of an asset that can be installed at the project site. efficiency : float, default=0.8 Ratio of energy output to energy input. efficiency_heat : float, default=0.6 TODO find a good attribute name and description Examples -------- >>> from oemof.eesyplan import Project >>> from oemof.solph import Bus >>> el_bus_in = Bus(label="el_bus_in") >>> heat_bus_out = Bus(label="heat_bus_out") >>> h2_bus_out = Bus(label="h2_bus_out") >>> my_electrolyzer = Electrolyzer( ... name="Electrolyzer", ... bus_in_electricity=el_bus_in, ... bus_out_heat=heat_bus_out, ... bus_out_h2=h2_bus_out, ... age_installed=0, ... installed_capacity=0, ... capex_var=1000, ... opex_fix=1000, ... lifetime=20, ... maximum_capacity=None, ... efficiency=0.9, ... efficiency_heat=0.1, ... opex_var=0, ... optimize_cap=True, ... project_data=Project( ... name="Project_X", lifetime=20, tax=0, ... discount_factor=0.01), ... ) >>> electrolyzer_no_heat = Electrolyzer( ... name="Electrolyzer", ... bus_in_electricity=el_bus_in, ... bus_out_h2=h2_bus_out, ... age_installed=0, ... installed_capacity=0, ... capex_var=1000, ... opex_fix=1000, ... lifetime=20, ... maximum_capacity=None, ... efficiency=0.9, ... opex_var=0, ... optimize_cap=True, ... project_data=Project( ... name="Project_X", lifetime=20, tax=0, ... discount_factor=0.01), ... ) """ nv = _create_invest_if_wanted( optimise_cap=optimize_cap, capex_var=capex_var, opex_fix=opex_fix, lifetime=lifetime, age_installed=age_installed, existing_capacity=installed_capacity, maximum_capacity=maximum_capacity, project_data=project_data, ) inputs = {bus_in_electricity: Flow()} outputs = { bus_out_h2: Flow( nominal_capacity=nv, variable_costs=opex_var, ) } if bus_out_heat is not None: outputs[bus_out_heat] = Flow() self.name = name self.age_installed = age_installed self.installed_capacity = installed_capacity self.capex_fix = capex_fix self.capex_var = capex_var self.opex_fix = opex_fix self.opex_var = opex_var self.lifetime = lifetime self.maximum_capacity = maximum_capacity self.efficiency = efficiency self.efficiency_heat = efficiency_heat super().__init__( label=name, outputs=outputs, inputs=inputs, conversion_factors={ bus_out_h2: efficiency, bus_out_heat: efficiency_heat, }, )