Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Battery electric vehicle meta facade #152

Open
wants to merge 28 commits into
base: feature/battery-electric-vehicle
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
8a274ae
add individual mobility sector facade from example (commit 6383a86)
JonasJeckstadt Jan 16, 2024
e62800c
adjust parameters (WIP)
JonasJeckstadt Jan 16, 2024
1d8365f
work on test for mobility_facade.
JonasJeckstadt Jan 18, 2024
199ee82
remove pkm_demand from IndividualMobilitySector facade.
JonasJeckstadt Jan 18, 2024
dde0974
remove transport_commodity_bus definition within IndividualMobilitySe…
JonasJeckstadt Jan 18, 2024
3ceb07e
fix label for Bev within IndividualMobilitySectror facade
JonasJeckstadt Jan 18, 2024
2f4d818
adjust IndividualMobilitySector facade to run with mobility_facade test
JonasJeckstadt Jan 18, 2024
9e50cad
Fix errors in docstring of Bev().
JonasJeckstadt Jan 22, 2024
660ba2c
Adjust parameters in IndividualMobilitySector facade (WIP).
JonasJeckstadt Jan 24, 2024
741c8cf
Update docstring of IndividualMobilitySector facade.
JonasJeckstadt Jan 25, 2024
2b75daa
Fix error with calculation of storage capacity.
JonasJeckstadt Feb 5, 2024
619e59a
Add invest_c_rate selection function to Bev() component.
JonasJeckstadt Feb 5, 2024
2dfb14f
Test _invest_c_rate method and fix issues.
JonasJeckstadt Feb 6, 2024
9d0ec2f
Adjust parameter definition of Bev and IndividualMobilitySector facad…
JonasJeckstadt Feb 8, 2024
39aa985
Update mobility_facade test.
JonasJeckstadt Feb 8, 2024
ffbad2f
Remove unused parameters from Bev facade and improve docstring.
JonasJeckstadt Feb 14, 2024
f90d68b
Add parameter availability_flex and availability_inflex.
JonasJeckstadt Feb 15, 2024
9210969
Merge branch 'feature/battery-electric-vehicle' into feature/battery-…
nailend Feb 26, 2024
81656fb
Fix minor error.
JonasJeckstadt Feb 26, 2024
638de45
Change processing of capacity value so it is used for flex and inflex…
JonasJeckstadt Mar 4, 2024
e169c37
Rename Bev classes
nailend Mar 13, 2024
8cf7a93
Adhere to pep8
nailend Mar 13, 2024
90faf86
Adjust BevTech name
nailend Mar 13, 2024
de58761
Update typemap
nailend Mar 13, 2024
85d350b
Add new imports
nailend Mar 27, 2024
5684b35
Bulk commit all changes
nailend Mar 27, 2024
eec7361
Test BEV fleet
nailend Mar 27, 2024
88e268b
Update graph plotting
nailend Mar 27, 2024
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
Prev Previous commit
Next Next commit
adjust IndividualMobilitySector facade to run with mobility_facade test
JonasJeckstadt committed Jan 18, 2024
commit 2f4d818b3a3a4870bb33fe738b6d8ad5c815a18d
104 changes: 59 additions & 45 deletions src/oemof/tabular/facades/experimental/battery_electric_vehicle.py
Original file line number Diff line number Diff line change
@@ -531,7 +531,7 @@ class IndividualMobilitySector(Facade):

max_storage_level: Union[float, Sequence[float]] = 1

# drive_power: int todo: s.u.
drive_power: int = 0 # todo: ?

drive_consumption: Sequence[float] = None

@@ -549,9 +549,11 @@ class IndividualMobilitySector(Facade):

efficiency_mob_electrical: float = 1 #todo: unit?

efficiency_charging: float = 1 # todo: added for test

pkm_conversion_rate: float = 1 # todo: unit?

# expandable: bool = False todo: ?
expandable: bool = False # todo: ?

lifetime: int = 20

@@ -563,10 +565,12 @@ class IndividualMobilitySector(Facade):

# bev_capacity=, todo:?

bev_invest_cost: Sequence[float] = None
bev_invest_costs: Sequence[float] = None

fixed_costs: Union[float, Sequence[float]] = 0

fixed_investment_costs: float = 0

variable_costs: Union[float, Sequence[float]] = 0

# balanced=, todo:?
@@ -577,11 +581,14 @@ class IndividualMobilitySector(Facade):

# max_charging_power: Union[float, Sequence[float]] todo: s.u.

commodity_conversion_rate: float = 1 # todo: added for test

def build_solph_components(self):

mobility_nodes = [self.transport_commodity_bus]

bev_controlled_g2v = Bev(
type="bev",
label=self.label+"_G2V",
electricity_bus=self.electricity_bus,
commodity_bus=self.transport_commodity_bus,
@@ -590,36 +597,38 @@ def build_solph_components(self):
availability=self.availability,
storage_capacity=self.storage_capacity_g2v,
# initial_storage_capacity=, ToDo: weglassen?
min_storage_level=self.min_storage_level,
max_storage_level=self.max_storage_level,
# drive_power=self.drive_power, ToDo: wofür?
drive_consumption=self.drive_consumption,
# min_storage_level=self.min_storage_level, #todo: deactivated for test
# max_storage_level=self.max_storage_level, #todo: deactivated for test
drive_power=self.drive_power, #ToDo: wofür? activated for test
# drive_consumption=self.drive_consumption, #todo: deactivated for test
v2g=False,
loss_rate=self.loss_rate,
efficiency_mob_g2v=self.efficiency_mob_g2v,
efficiency_mob_v2g=0,
efficiency_sto_in=self.efficiency_sto_in,
efficiency_sto_out=self.efficiency_sto_out,
efficiency_mob_electrical=self.efficiency_mob_electrical,
pkm_conversion_rate=self.pkm_conversion_rate,
# expandable=, todo: ?
# loss_rate=self.loss_rate, #todo: deactivated for test
# efficiency_mob_g2v=self.efficiency_mob_g2v, # Todo: deactivated for test
# efficiency_mob_v2g=0, # Todo: deactivated for test
# efficiency_sto_in=self.efficiency_sto_in, # Todo: deactivated for test
# efficiency_sto_out=self.efficiency_sto_out, # Todo: deactivated for test
# efficiency_mob_electrical=self.efficiency_mob_electrical, # Todo: deactivated for test
# pkm_conversion_rate=self.pkm_conversion_rate, Todo: deactivated for test
expandable=self.expandable, #todo: ?, activated for test
lifetime=self.lifetime,
# age=, todo: ?
invest_c_rate=self.invest_c_rate,
bev_storage_capacity=self.bev_storage_capacity,
# bev_storage_capacity=self.bev_storage_capacity, Todo: deactivated for test
# bev_capacity=, todo:?
bev_invest_cost=self.bev_invest_cost,
fixed_costs=self.fixed_costs,
bev_invest_costs=self.bev_invest_costs,
# fixed_costs=self.fixed_costs, todo: deactivated for test
fixed_investment_costs=self.fixed_investment_costs, # todo: added for test
variable_costs=self.variable_costs,
# balanced=, todo:?
input_parameters=field(default_factory=dict),
# output_parameters=, todo: weglassen?
# max_charging_power=self.max_charging_power, ToDo: was ist das hier?
commodity_conversion_rate=self.commodity_conversion_rate #todo: added for test
)

mobility_nodes.append(bev_controlled_g2v)

bev_controlled_v2g = Bev(
type="bev",
label=self.label+"_V2G",
electricity_bus=self.electricity_bus,
commodity_bus=self.transport_commodity_bus,
@@ -631,33 +640,36 @@ def build_solph_components(self):
min_storage_level=self.min_storage_level,
max_storage_level=self.max_storage_level,
# drive_power=self.drive_power, ToDo: wofür?
drive_consumption=self.drive_consumption,
# drive_consumption=self.drive_consumption, todo: deactivated for test
v2g=True,
loss_rate=self.loss_rate,
efficiency_mob_g2v=self.efficiency_mob_g2v,
efficiency_mob_v2g=self.efficiency_mob_v2g,
efficiency_sto_in=self.efficiency_sto_in,
efficiency_sto_out=self.efficiency_sto_out,
efficiency_mob_electrical=self.efficiency_mob_electrical,
pkm_conversion_rate=self.pkm_conversion_rate,
# expandable=, todo: ?
# efficiency_mob_g2v=self.efficiency_mob_g2v, # Todo: deactivated for test
# efficiency_mob_v2g=self.efficiency_mob_v2g, # Todo: deactivated for test
# efficiency_sto_in=self.efficiency_sto_in, # Todo: deactivated for test
# efficiency_sto_out=self.efficiency_sto_out, # Todo: deactivated for test
# efficiency_mob_electrical=self.efficiency_mob_electrical, # Todo: deactivated for test
efficiency_charging=self.efficiency_charging, #todo: added for test
# pkm_conversion_rate=self.pkm_conversion_rate, #todo: deactivated for test
expandable=self.expandable, #todo: ?, activated for test
lifetime=self.lifetime,
# age=, todo: ?
invest_c_rate=self.invest_c_rate,
bev_storage_capacity=self.bev_storage_capacity,
# bev_storage_capacity=self.bev_storage_capacity, #todo: deactivated for test
# bev_capacity=, todo:?
bev_invest_cost=self.bev_invest_cost,
fixed_costs=self.fixed_costs,
bev_invest_costs=self.bev_invest_costs,
# fixed_costs=self.fixed_costs, #todo: deactivated for test
fixed_investment_costs=self.fixed_investment_costs, # todo: added for test
variable_costs=self.variable_costs,
# balanced=, todo:?
input_parameters=field(default_factory=dict),
# output_parameters=, todo: weglassen?
# max_charging_power=self.max_charging_power, ToDo: was ist das hier?
commodity_conversion_rate=self.commodity_conversion_rate # todo: added for test
)

mobility_nodes.append(bev_controlled_v2g)

bev_inflex = Bev(
type="bev",
label=self.label+"_Inflex",
electricity_bus=self.electricity_bus,
commodity_bus=self.transport_commodity_bus,
@@ -666,30 +678,32 @@ def build_solph_components(self):
availability=self.availability,
storage_capacity=self.storage_capacity_inflex,
# initial_storage_capacity=, ToDo: weglassen?
min_storage_level=self.min_storage_level,
max_storage_level=self.max_storage_level,
# drive_power=self.drive_power, ToDo: wofür?
drive_consumption=self.drive_consumption,
# min_storage_level=self.min_storage_level, #todo: deactivated for test
# max_storage_level=self.max_storage_level, #todo: deactivated for test
drive_power=self.drive_power, # ToDo: wofür?, activated for test
# drive_consumption=self.drive_consumption, #todo: deactivated for test
v2g=False,
loss_rate=self.loss_rate,
efficiency_mob_g2v=self.efficiency_mob_g2v,
efficiency_mob_v2g=0,
efficiency_sto_in=self.efficiency_sto_in,
efficiency_sto_out=self.efficiency_sto_out,
efficiency_mob_electrical=self.efficiency_mob_electrical,
pkm_conversion_rate=self.pkm_conversion_rate,
# expandable=, todo: ?
# loss_rate=self.loss_rate, #todo: deactivated for test
# efficiency_mob_g2v=self.efficiency_mob_g2v, # Todo: deactivated for test
# efficiency_mob_v2g=0, # Todo: deactivated for test
# efficiency_sto_in=self.efficiency_sto_in, # Todo: deactivated for test
# efficiency_sto_out=self.efficiency_sto_out, # Todo: deactivated for test
# efficiency_mob_electrical=self.efficiency_mob_electrical, # Todo: deactivated for test
# pkm_conversion_rate=self.pkm_conversion_rate, # Todo: deactivated for test
expandable=self.expandable, #todo: ?
lifetime=self.lifetime,
# age=, todo: ?
invest_c_rate=self.invest_c_rate,
bev_storage_capacity=self.bev_storage_capacity,
# bev_capacity=, todo:?
bev_invest_cost=self.bev_invest_cost,
fixed_costs=self.fixed_costs,
bev_invest_costs=self.bev_invest_costs,
# fixed_costs=self.fixed_costs, # todo: deactivated for test
fixed_investment_costs=self.fixed_investment_costs, # todo: added for test
variable_costs=self.variable_costs,
# balanced=, todo:?
input_parameters=self.input_parameters_inflex,
# output_parameters=, todo: weglassen?
commodity_conversion_rate=self.commodity_conversion_rate # todo: added for test
)

mobility_nodes.append(bev_inflex)
22 changes: 12 additions & 10 deletions tests/mobility_facade.py
Original file line number Diff line number Diff line change
@@ -181,7 +181,7 @@
bev = IndividualMobilitySector(
label="ind_mob_sec",
electricity_bus=el_bus,
# transport_commodity_bus: Bus = None Todo: nötig? wird unten angelegt
transport_commodity_bus=indiv_mob,
charging_power_g2v=200,
charging_power_v2g=200,
charging_power_inflex=200,
@@ -191,31 +191,33 @@
storage_capacity_v2g=200,
storage_capacity_inflex=200,
# initial_storage_capacity=, ToDo: weglassen?
#min_storage_level=[0.1, 0.2, 0.15, 0.15],
#max_storage_level=[0.9, 0.95, 0.92, 0.92],
# drive_power: int todo: ?
min_storage_level=(len(date_time_index) + 0) * [0],
max_storage_level=(len(date_time_index) + 0) * [0.9],
drive_power=100, #todo: ?
#drive_consumption: Sequence = None
#v2g: bool = (False,) # todo: hier notwendig? wird unten hard-gecoded
#loss_rate: float = 0
loss_rate=0.01,
#efficiency_mob_g2v: float = 1
#efficiency_mob_v2g: float = 1
#efficiency_sto_in: float = 1
#efficiency_sto_out: float = 1
#efficiency_mob_electrical: float # = 1 todo: unit?
pkm_conversion_rate=0.7, # todo: unit?
# expandable: bool = False todo: ?
efficiency_charging=1, # todo: added for test
# pkm_conversion_rate=0.7, # todo: unit? deactivated for test
expandable=True, #todo: ?
lifetime=10,
# age=, todo: ?
invest_c_rate=60 / 20,
#bev_storage_capacity: int
# bev_capacity=, todo:?
bev_invest_cost=2,
fixed_costs=1,
bev_invest_costs=2,
# fixed_costs=1, todo: deactivated for test
fixed_investment_costs=1,
variable_costs=3,
# balanced=, todo:?
input_parameters_inflex={
"fix": len(periods) * [0, 0, 0]
}, # fixed relative charging profile
commodity_conversion_rate=0.7, # todo: added for test
)
energysystem.add(bev)