Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 41 additions & 103 deletions src/oemof/eesyplan/components/storages/ElectricalStorage.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,27 @@
from math import sqrt
from oemof.eesyplan.components.storages.storage import EnergyStorage

from oemof.eesyplan.investment import _create_invest_if_wanted
from oemof.solph import Flow
from oemof.solph import Investment
from oemof.solph.components import GenericStorage


class ElectricalStorage(GenericStorage):
class ElectricalStorage(EnergyStorage):
def __init__(
self,
name,
bus_in_electricity,
age_installed,
installed_capacity,
capex_var,
opex_fix,
opex_var,
lifetime,
optimize_cap,
soc_max,
soc_min,
crate, # ToDo: Distinguish input and output and change to c_rate
efficiency, # ToDo: Distinguish input and output
# # Keep in mind for thermal storages
# fixed_thermal_losses_relative,
# fixed_thermal_losses_absolute,
project_data,
capex_fix=0.0,
self_discharge=0.0,
installed_capacity,
bus_in_electricity,
bus_out_electricity=None,
age_installed=0,
capex_var=0,
opex_fix=0,
opex_var=0,
lifetime=None,
optimize_cap=False,
soc_max=1,
soc_min=0,
self_discharge=0.0,
efficiency_charge=1.0,
efficiency_discharge=1.0,
c_rate_charge=1.0,
c_rate_discharge=None,
maximum_capacity=float("+inf"),
):
"""
Expand Down Expand Up @@ -65,19 +58,11 @@ def __init__(
>>> el_bus = CarrierBus(name="my_electricity_bus")
>>> my_bess = ElectricalStorage(
... name="lithium_battery_system",
... project_data=my_project,
... bus_in_electricity=el_bus,
... age_installed=0,
... installed_capacity=10,
... capex_var=3,
... opex_fix=5,
... opex_var=0.,
... lifetime=10,
... optimize_cap=False,
... soc_max=1,
... soc_min=0,
... crate=1,
... efficiency=0.99,
... project_data=my_project,
... c_rate_charge=0.7,
... c_rate_discharge=0.8,
... self_discharge=0.0001,
... )
>>> my_invest_bess = ElectricalStorage(
Expand All @@ -88,83 +73,36 @@ def __init__(
... installed_capacity=0,
... capex_var=3,
... opex_fix=5,
... opex_var=0.,
... opex_var=0,
... lifetime=10,
... optimize_cap=True,
... soc_max=1,
... soc_min=0,
... crate=1,
... efficiency=0.99,
... c_rate_charge=0.7,
... c_rate_discharge=0.8,
... efficiency_charge=0.99,
... project_data=my_project,
... self_discharge=0.0001,
... )
"""

nv = _create_invest_if_wanted(
optimise_cap=optimize_cap,
super().__init__(
name,
project_data=project_data,
installed_capacity=installed_capacity,
bus_in=bus_in_electricity,
bus_out=bus_out_electricity,
age_installed=age_installed,
capex_var=capex_var,
opex_fix=opex_fix,
opex_var=opex_var,
lifetime=lifetime,
age_installed=age_installed,
existing_capacity=installed_capacity,
maximum_capacity=maximum_capacity,
project_data=project_data,
)

self.bus_in_electricity = bus_in_electricity
self.bus_out_electricity = bus_out_electricity
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.optimize_cap = optimize_cap
self.maximum_capacity = maximum_capacity

self.self_discharge = self_discharge
self.efficiency = sqrt(efficiency)

if optimize_cap:
self.capacity_charge = Investment()
self.capacity_discharge = Investment()
self.crate_charge = crate
self.crate_discharge = crate
else:
self.capacity_charge = nv * crate
self.capacity_discharge = nv * crate
self.crate_charge = None
self.crate_discharge = None

if bus_out_electricity is None:
bus_out_electricity = bus_in_electricity

super().__init__(
label=name,
nominal_capacity=nv,
inputs={
bus_in_electricity: Flow(
nominal_capacity=self.capacity_charge,
variable_costs=opex_var,
)
},
outputs={
bus_out_electricity: Flow(
nominal_capacity=self.capacity_discharge
)
},
loss_rate=self.self_discharge,
min_storage_level=soc_min,
max_storage_level=soc_max,
balanced=True,
initial_storage_level=None,
inflow_conversion_factor=self.efficiency,
outflow_conversion_factor=self.efficiency,
invest_relation_input_capacity=self.crate_charge,
invest_relation_output_capacity=self.crate_charge,
# # Keep in mind for thermal storages
# fixed_losses_absolute=fixed_thermal_losses_absolute,
# fixed_losses_relative=fixed_thermal_losses_relative,
optimize_cap=optimize_cap,
soc_max=soc_max,
soc_min=soc_min,
energy_losses_relative=self_discharge,
efficiency_charge=efficiency_charge,
efficiency_discharge=efficiency_discharge,
theoretical_time_charge=c_rate_charge, # hours
theoretical_time_discharge=c_rate_discharge, # hours
maximum_capacity_investment=maximum_capacity,
)
137 changes: 48 additions & 89 deletions src/oemof/eesyplan/components/storages/FuelStorage.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,28 @@
from math import sqrt
from oemof.eesyplan.components.storages.storage import EnergyStorage

from oemof.eesyplan.investment import _create_invest_if_wanted
from oemof.solph import Flow
from oemof.solph import Investment
from oemof.solph.components import GenericStorage


class FuelStorage(GenericStorage):
class FuelStorage(EnergyStorage):
def __init__(
self,
name,
bus_in_fuel,
age_installed,
installed_capacity,
capex_var,
opex_fix,
opex_var,
lifetime,
optimize_cap,
soc_max,
soc_min,
crate, # ToDo: Distinguish input and output and change to c_rate
efficiency, # ToDo: Distinguish input and output
project_data,
capex_fix=0.0,
self_discharge=0.0,
installed_capacity,
bus_in_fuel,
bus_out_fuel=None,
maximum_capacity=float("+inf"),
age_installed=0,
capex_var=0,
opex_fix=0,
opex_var=0,
lifetime=None,
optimize_cap=False,
soc_max=1,
soc_min=0,
c_rate_charge=1.0,
c_rate_discharge=None,
efficiency_charge=1.0,
efficiency_discharge=1.0,
energy_losses_relative=0.0,
maximum_capacity_investment=float("+inf"),
):
"""
Fuel Energy Storage System (FESS).
Expand Down Expand Up @@ -60,90 +56,53 @@ def __init__(
... discount_factor=0.01
... )
>>> fuel_bus = CarrierBus(name="gas_bus")
>>> my_storage = FuelStorage(
... name="gas_storage_tank",
>>> my_bess = FuelStorage(
... name="gas storage tank",
... project_data=my_project,
... bus_in_fuel=fuel_bus,
... age_installed=0,
... installed_capacity=10,
... capex_var=3,
... opex_fix=5,
... opex_var=0.,
... lifetime=10,
... optimize_cap=False,
... soc_max=1,
... soc_min=0,
... crate=1,
... efficiency=0.99,
... project_data=my_project,
... self_discharge=0.0001,
... c_rate_charge=0.7,
... c_rate_discharge=0.8,
... energy_losses_relative=0.0001,
... )
>>> my_invest_storage = FuelStorage(
... name="gas_storage_tank_extension",
>>> my_invest_bess = FuelStorage(
... name="gas storage tank extension",
... bus_in_fuel=fuel_bus,
... bus_out_fuel=fuel_bus,
... age_installed=0,
... installed_capacity=0,
... capex_var=3,
... opex_fix=5,
... opex_var=0.,
... opex_var=0,
... lifetime=10,
... optimize_cap=True,
... soc_max=1,
... soc_min=0,
... crate=1,
... efficiency=0.99,
... c_rate_charge=0.7,
... c_rate_discharge=0.8,
... efficiency_charge=0.99,
... project_data=my_project,
... self_discharge=0.0001,
... energy_losses_relative=0.0001,
... )
"""

nv = _create_invest_if_wanted(
optimise_cap=optimize_cap,
super().__init__(
name,
project_data=project_data,
installed_capacity=installed_capacity,
bus_in=bus_in_fuel,
bus_out=bus_out_fuel,
age_installed=age_installed,
capex_var=capex_var,
opex_fix=opex_fix,
opex_var=opex_var,
lifetime=lifetime,
age_installed=age_installed,
existing_capacity=installed_capacity,
maximum_capacity=maximum_capacity,
project_data=project_data,
)

self.self_discharge = self_discharge
self.efficiency = sqrt(efficiency)

if optimize_cap:
self.capacity_charge = Investment()
self.capacity_discharge = Investment()
self.crate_charge = crate
self.crate_discharge = crate
else:
self.capacity_charge = nv * crate
self.capacity_discharge = nv * crate
self.crate_charge = None
self.crate_discharge = None

if bus_out_fuel is None:
bus_out_fuel = bus_in_fuel

super().__init__(
label=name,
nominal_capacity=nv,
inputs={
bus_in_fuel: Flow(
nominal_capacity=self.capacity_charge,
variable_costs=opex_var,
)
},
outputs={
bus_out_fuel: Flow(nominal_capacity=self.capacity_discharge)
},
loss_rate=self.self_discharge,
min_storage_level=soc_min,
max_storage_level=soc_max,
balanced=True,
initial_storage_level=None,
inflow_conversion_factor=self.efficiency,
outflow_conversion_factor=self.efficiency,
invest_relation_input_capacity=self.crate_charge,
invest_relation_output_capacity=self.crate_charge,
optimize_cap=optimize_cap,
soc_max=soc_max,
soc_min=soc_min,
energy_losses_relative=energy_losses_relative,
efficiency_charge=efficiency_charge,
efficiency_discharge=efficiency_discharge,
theoretical_time_charge=c_rate_charge, # hours
theoretical_time_discharge=c_rate_discharge, # hours
maximum_capacity_investment=maximum_capacity_investment,
)
Loading
Loading