Skip to content

Commit

Permalink
Important bug fixed that influenced quay length (both in agribulk and…
Browse files Browse the repository at this point in the history
… container
  • Loading branch information
markvankoningsveld committed Feb 16, 2020
1 parent f485609 commit 679f554
Show file tree
Hide file tree
Showing 8 changed files with 50 additions and 30 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.rst
Expand Up @@ -2,6 +2,11 @@
Changelog
=========

Version 0.6.0
===========

- Updated container code

Version 0.5.0
===========

Expand Down
4 changes: 4 additions & 0 deletions HISTORY.rst
Expand Up @@ -2,6 +2,10 @@
History
=======

v0.6.0 (2020-02-14)
------------------

* Updated the container code and example

v0.5.0 (2020-01-24)
------------------
Expand Down
2 changes: 1 addition & 1 deletion opentisim/__init__.py
Expand Up @@ -4,5 +4,5 @@

__author__ = """Mark van Koningsveld"""
__email__ = 'm.vankoningsveld@tudelft.nl'
__version__ = 'v.0.5.0'
__version__ = 'v.0.6.0'

26 changes: 17 additions & 9 deletions opentisim/agribulk_system.py
Expand Up @@ -242,10 +242,15 @@ def berth_invest(self, year, handysize, handymax, panamax):
berths = len(core.find_elements(self, Berth))
quay_walls = len(core.find_elements(self, Quay_wall))
if berths > quay_walls:
length_v = max(agribulk_defaults.handysize_data["LOA"], agribulk_defaults.handymax_data["LOA"],
agribulk_defaults.panamax_data["LOA"]) # average size
draft = max(agribulk_defaults.handysize_data["draft"], agribulk_defaults.handymax_data["draft"],
agribulk_defaults.panamax_data["draft"])
# bug fixed, should only take the value of the vessels that actually come
length_v = max(
(not agribulk_defaults.maize_data['handysize_perc'] == 0) * agribulk_defaults.handysize_data["LOA"],
(not agribulk_defaults.maize_data['handymax_perc'] == 0) * agribulk_defaults.handymax_data["LOA"],
(not agribulk_defaults.maize_data['panamax_perc'] == 0) * agribulk_defaults.panamax_data["LOA"]) # max size
draft = max(
(not agribulk_defaults.maize_data['handysize_perc'] == 0) * agribulk_defaults.handysize_data["draft"],
(not agribulk_defaults.maize_data['handymax_perc'] == 0) * agribulk_defaults.handymax_data["draft"],
(not agribulk_defaults.maize_data['panamax_perc'] == 0) * agribulk_defaults.panamax_data["draft"])

# apply PIANC 2014:
# see Ijzermans, 2019 - infrastructure.py line 107 - 111
Expand Down Expand Up @@ -315,18 +320,21 @@ def quay_invest(self, year, length, depth):
# add length and depth to the elements (useful for later reporting)
quay_wall.length = length
quay_wall.depth = depth
quay_wall.retaining_height = 2 * (depth + quay_wall.freeboard)

# - capex
unit_rate = int(quay_wall.Gijt_constant_2 * 2 * (depth + quay_wall.freeboard))
mobilisation = int(max((length * unit_rate * quay_wall.mobilisation_perc), quay_wall.mobilisation_min))
quay_wall.unit_rate = int(quay_wall.Gijt_constant_2 * 2 * (depth + quay_wall.freeboard))
mobilisation = int(max((length * quay_wall.unit_rate * quay_wall.mobilisation_perc), quay_wall.mobilisation_min))
# Todo: consider adding cost of apron and cost of land here (compare containers)
quay_wall.capex = int(length * unit_rate + mobilisation)

quay_wall.capex = int(length * quay_wall.unit_rate + mobilisation)

# - opex
quay_wall.insurance = unit_rate * length * quay_wall.insurance_perc
quay_wall.maintenance = unit_rate * length * quay_wall.maintenance_perc
quay_wall.insurance = quay_wall.unit_rate * length * quay_wall.insurance_perc
quay_wall.maintenance = quay_wall.unit_rate * length * quay_wall.maintenance_perc
quay_wall.year_online = year + quay_wall.delivery_time

# - land use
# Todo: consider adding a landuse section here (compare containers)

# add cash flow information to quay_wall object in a dataframe
Expand Down
11 changes: 5 additions & 6 deletions opentisim/container_defaults.py
Expand Up @@ -422,12 +422,11 @@
# *** Default inputs: Commodity class ***

container_data = {"name": 'Laden',
"handling_fee": 150,
"handysize_perc": 0,
"handymax_perc": 0,
"panamax_perc": 100,
"historic_data": pd.DataFrame(data={'year': [2014, 2015, 2016, 2017, 2018],
'volume': [1_000_000, 1_100_000, 1_250_000, 1_400_000, 1_500_000]})}
"handling_fee": 150,
"handysize_perc": 0,
"handymax_perc": 0,
"panamax_perc": 100,
"historic_data": []}


# *** Default inputs: Vessel class ***
Expand Down
29 changes: 16 additions & 13 deletions opentisim/container_system.py
Expand Up @@ -324,12 +324,15 @@ def berth_invest(self, year, handysize, handymax, panamax):
berths = len(core.find_elements(self, Berth))
quay_walls = len(core.find_elements(self, Quay_wall))
if berths > quay_walls:
length_v = max(container_defaults.handysize_data["LOA"], container_defaults.handymax_data["LOA"],
container_defaults.panamax_data["LOA"]) # average size
draft = max(container_defaults.handysize_data["draft"], container_defaults.handymax_data["draft"],
container_defaults.panamax_data["draft"])

quay_wall = Quay_wall(**container_defaults.quay_wall_data)
# bug fixed, should only take the value of the vessels that actually come
length_v = max(
(not container_defaults.container_data['handysize_perc'] == 0) * container_defaults.handysize_data["LOA"],
(not container_defaults.container_data['handymax_perc'] == 0) * container_defaults.handymax_data["LOA"],
(not container_defaults.container_data['panamax_perc'] == 0) * container_defaults.panamax_data["LOA"]) # average size
draft = max(
(not container_defaults.container_data['handysize_perc'] == 0) * container_defaults.handysize_data["draft"],
(not container_defaults.container_data['handymax_perc'] == 0) * container_defaults.handymax_data["draft"],
(not container_defaults.container_data['panamax_perc'] == 0) * container_defaults.panamax_data["draft"])

# apply PIANC 2014:
# see Ijzermans, 2019 - infrastructure.py line 107 - 111
Expand All @@ -343,6 +346,7 @@ def berth_invest(self, year, handysize, handymax, panamax):
length = 1.1 * berths * (length_v + 15) - 1.1 * (berths - 1) * (length_v + 15)

# - depth
quay_wall = Quay_wall(**container_defaults.quay_wall_data)
depth = np.sum([draft, quay_wall.max_sinkage, quay_wall.wave_motion, quay_wall.safety_margin])
self.quay_invest(year, length, depth)

Expand Down Expand Up @@ -398,19 +402,18 @@ def quay_invest(self, year, length, depth):
# add length and depth to the elements (useful for later reporting)
quay_wall.length = length
quay_wall.depth = depth
quay_wall.retaining_height = 2 * (depth + quay_wall.freeboard)

# - capex
# Todo: check this. Clearly some error was introduced here (now made equal to agribulk example)
# unit_rate = int(quay_wall.Gijt_constant * (depth * 2 + quay_wall.freeboard) ** quay_wall.Gijt_coefficient)
unit_rate = int(quay_wall.Gijt_constant_2 * 2 * (depth + quay_wall.freeboard))
mobilisation = int(max((length * unit_rate * quay_wall.mobilisation_perc), quay_wall.mobilisation_min))
quay_wall.unit_rate = int(quay_wall.Gijt_constant_2 * 2 * (depth + quay_wall.freeboard))
mobilisation = int(max((length * quay_wall.unit_rate * quay_wall.mobilisation_perc), quay_wall.mobilisation_min))
apron_pavement = length * quay_wall.apron_width * quay_wall.apron_pavement
cost_of_land = length * quay_wall.apron_width * self.land_price
quay_wall.capex = int(length * unit_rate + mobilisation + apron_pavement + cost_of_land)
quay_wall.capex = int(length * quay_wall.unit_rate + mobilisation + apron_pavement + cost_of_land)

# - opex
quay_wall.insurance = unit_rate * length * quay_wall.insurance_perc
quay_wall.maintenance = unit_rate * length * quay_wall.maintenance_perc
quay_wall.insurance = quay_wall.unit_rate * length * quay_wall.insurance_perc
quay_wall.maintenance = quay_wall.unit_rate * length * quay_wall.maintenance_perc
quay_wall.year_online = year + quay_wall.delivery_time

# - land use
Expand Down
1 change: 1 addition & 0 deletions opentisim/hydrogen_system.py
Expand Up @@ -36,6 +36,7 @@ def __init__(self, startyear=2019, lifecycle=20, operational_hours=5840, debug=F
self.h2retrieval_type_defaults = h2retrieval_type_defaults

# triggers for the various elements (berth, storage and h2retrieval)
self.allowable_waiting_service_time_ratio_berth = allowable_waiting_service_time_ratio_berth
self.allowable_berth_occupancy = allowable_berth_occupancy
self.allowable_dwelltime = allowable_dwelltime
self.h2retrieval_trigger = h2retrieval_trigger
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -69,6 +69,6 @@
test_suite="tests",
tests_require=tests_require,
url="https://github.com/TUDelft-CITG/OpenTISim",
version="v0.5.0",
version="v0.6.0",
zip_safe=False,
)

0 comments on commit 679f554

Please sign in to comment.