NOTE: This workshop is based on the v0.9 release of WOMBAT, and as of October 26th, this is the current version in the develop branch.
First, import the necessary packages and make adjust some of the Pandas display settings.
from time import perf_counter
from pathlib import Path
import pandas as pd
from wombat import Simulation
from wombat.utilities import plot
pd.options.display.max_rows = 100
pd.options.display.max_columns = 100
Simulation
¶First, we create a variable for our library directory, relative to this notebook, and have Path
resolve it to ensure it exists. Then, we'll create a simulation for both an in situ and tow-to-port simulation (pre-configured in library/corewind/project/config/
).
Note that a random seed is being set at the simulation level so that the same results get produced every single time these are run.
library_path = Path("../library/corewind/").resolve()
sim_in_situ = Simulation(library_path=library_path, config="morro_bay_in_situ.yaml", random_seed=34)
sim_ttp = Simulation(library_path=library_path, config="morro_bay_tow_to_port.yaml", random_seed=34)
plot.plot_farm_layout(sim_in_situ.windfarm, plot_kwargs={"node_size": 200})
Simulation
creates that can be helpful for debugging¶Sometimes simulations fail, and when that happens we might need to dig into what's going, which is often at the service equipment level because that is where much of the strategy configuration is coming from.
First, we'll see that simulations have a service equipment dictionary controlled by the name
that we gave them.
list(sim_in_situ.service_equipment.keys())
['Crew Transfer Vessel 1', 'Crew Transfer Vessel 2', 'Crew Transfer Vessel 3', 'Crew Transfer Vessel 4', 'Crew Transfer Vessel 5', 'Crew Transfer Vessel 6', 'Crew Transfer Vessel 7', 'Cable Laying Vessel', 'Diving Support Vessel', 'Anchor Handling Tug', 'Heavy Lift Vessel']
list(sim_ttp.service_equipment.keys())
['Crew Transfer Vessel 1', 'Crew Transfer Vessel 2', 'Crew Transfer Vessel 3', 'Crew Transfer Vessel 4', 'Crew Transfer Vessel 5', 'Crew Transfer Vessel 6', 'Crew Transfer Vessel 7', 'Cable Laying Vessel', 'Diving Support Vessel', 'Anchor Handling Tug', 'Tugboat 1', 'Tugboat 2']
Now, let's confirm that our work shifts are set up to be what we discussed.
sim_in_situ.service_equipment["Crew Transfer Vessel 1"].settings.workday_start
6
sim_in_situ.service_equipment["Heavy Lift Vessel"].settings.workday_start
0
To run a simulation, all we have to do is call run()
and that will run it until the end of our configured simulation timeframe. Optionally, inputs such as until=
can be used to control how many simulation hours the simulation will be run (1 year = 8760 hours, but be weary of leap years in your weather timeseries).
start = perf_counter()
sim_in_situ.run()
end = perf_counter()
print(f"Run time: {(end - start):.2f} seconds")
Run time: 85.53 seconds
start = perf_counter()
sim_ttp.run()
end = perf_counter()
print(f"Run time: {(end - start):.2f} seconds")
Run time: 285.59 seconds
Now a metrics
object will be available through the Simulation
that gives access to the results methods, which provides all the metrics calculations that are pre-configured within WOMBAT, and gives access to the resulting energy, operations, and events logs.
Note that the time-based availability is much higher than the production-based availability, which is due to the fact that the time basis cares about if the farm is operational at all, compared to the actual operational levels. If we were to dig into the individual turbines, we would find that the two availabilities would look similar, though the time-based would still trend higher.
print("In Situ Availability")
print(f'Time-based: {sim_in_situ.metrics.time_based_availability("project", "windfarm").values[0][0]:.2%}')
print(f'Production-based: {sim_in_situ.metrics.production_based_availability("project", "windfarm").values[0][0]:.2%}')
print()
print("Tow-to-Port Availability")
print(f'Time-based: {sim_ttp.metrics.time_based_availability("project", "windfarm").values[0][0]:.2%}')
print(f'Production-based: {sim_ttp.metrics.production_based_availability("project", "windfarm").values[0][0]:.2%}')
In Situ Availability Time-based: 99.36% Production-based: 89.20% Tow-to-Port Availability Time-based: 98.14% Production-based: 92.49%
plot.plot_farm_availability(sim_in_situ, which="time")
plot.plot_farm_availability(sim_in_situ, which="energy")
plot.plot_farm_availability(sim_ttp)
In the in situ case, we can see a large dip in availability in January 2003, and in the tow-to-port case we can see a large dip around February 2007, so let's investiage a bit further by diving into the events and operations logs that are available through the Metrics
object.
ev_in_situ = sim_in_situ.metrics.events
op_in_situ = sim_in_situ.metrics.operations
op_in_situ.head()
env_datetime | env_time | WTG_0000 | WTG_0001 | WTG_0002 | WTG_0003 | WTG_0004 | WTG_0005 | WTG_0006 | WTG_0007 | WTG_0008 | WTG_0009 | WTG_0100 | WTG_0101 | WTG_0102 | WTG_0103 | WTG_0104 | WTG_0105 | WTG_0106 | WTG_0107 | WTG_0108 | WTG_0109 | WTG_0200 | WTG_0201 | WTG_0202 | WTG_0203 | WTG_0204 | WTG_0205 | WTG_0206 | WTG_0207 | WTG_0208 | WTG_0209 | WTG_0300 | WTG_0301 | WTG_0302 | WTG_0303 | WTG_0304 | WTG_0305 | WTG_0306 | WTG_0307 | WTG_0308 | WTG_0309 | WTG_0400 | WTG_0401 | WTG_0402 | WTG_0403 | WTG_0404 | WTG_0405 | WTG_0406 | WTG_0407 | WTG_0408 | WTG_0409 | WTG_0500 | WTG_0501 | WTG_0502 | WTG_0503 | WTG_0504 | WTG_0505 | WTG_0506 | WTG_0507 | WTG_0508 | WTG_0509 | WTG_0600 | WTG_0601 | WTG_0602 | WTG_0603 | WTG_0604 | WTG_0605 | WTG_0606 | WTG_0607 | WTG_0608 | WTG_0609 | WTG_0700 | WTG_0701 | WTG_0702 | WTG_0703 | WTG_0704 | WTG_0705 | WTG_0706 | WTG_0707 | WTG_0708 | WTG_0709 | SS1 | SS2 | windfarm | year | month | day | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
datetime | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2023-10-26 11:50:35.814094 | 2002-01-01 00:00:00 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1.0 | 2002 | 1 | 1 |
2023-10-26 11:50:35.833984 | 2002-01-01 01:00:00 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1.0 | 2002 | 1 | 1 |
2023-10-26 11:50:35.834149 | 2002-01-01 02:00:00 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1.0 | 2002 | 1 | 1 |
2023-10-26 11:50:35.834229 | 2002-01-01 03:00:00 | 3 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1.0 | 2002 | 1 | 1 |
2023-10-26 11:50:35.834306 | 2002-01-01 04:00:00 | 4 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1.0 | 2002 | 1 | 1 |
op_in_situ.loc[op_in_situ.windfarm < 0.45, ["env_datetime", "env_time", "windfarm"]].head(24)
env_datetime | env_time | windfarm | |
---|---|---|---|
datetime | |||
2023-10-26 11:50:37.783638 | 2003-01-20 11:00:00 | 9227 | 0.4375 |
2023-10-26 11:50:37.783910 | 2003-01-20 12:00:00 | 9228 | 0.0 |
2023-10-26 11:50:37.783980 | 2003-01-20 13:00:00 | 9229 | 0.0 |
2023-10-26 11:50:37.784044 | 2003-01-20 14:00:00 | 9230 | 0.0 |
2023-10-26 11:50:37.786237 | 2003-01-20 15:00:00 | 9231 | 0.0 |
2023-10-26 11:50:37.786428 | 2003-01-20 16:00:00 | 9232 | 0.0 |
2023-10-26 11:50:37.786499 | 2003-01-20 17:00:00 | 9233 | 0.0 |
2023-10-26 11:50:37.786637 | 2003-01-20 18:00:00 | 9234 | 0.0 |
2023-10-26 11:50:37.787928 | 2003-01-20 19:00:00 | 9235 | 0.0 |
2023-10-26 11:50:37.789044 | 2003-01-20 20:00:00 | 9236 | 0.0 |
2023-10-26 11:50:37.789116 | 2003-01-20 21:00:00 | 9237 | 0.0 |
2023-10-26 11:50:37.790587 | 2003-01-20 22:00:00 | 9238 | 0.0 |
2023-10-26 11:50:37.790729 | 2003-01-20 23:00:00 | 9239 | 0.0 |
2023-10-26 11:50:37.790921 | 2003-01-21 00:00:00 | 9240 | 0.0 |
2023-10-26 11:50:37.790984 | 2003-01-21 01:00:00 | 9241 | 0.0 |
2023-10-26 11:50:37.791046 | 2003-01-21 02:00:00 | 9242 | 0.0 |
2023-10-26 11:50:37.791111 | 2003-01-21 03:00:00 | 9243 | 0.0 |
2023-10-26 11:50:37.791173 | 2003-01-21 04:00:00 | 9244 | 0.0 |
2023-10-26 11:50:37.791237 | 2003-01-21 05:00:00 | 9245 | 0.0 |
2023-10-26 11:50:37.792320 | 2003-01-21 06:00:00 | 9246 | 0.0 |
2023-10-26 11:50:37.792423 | 2003-01-21 07:00:00 | 9247 | 0.0 |
2023-10-26 11:50:37.792963 | 2003-01-21 08:00:00 | 9248 | 0.0 |
2023-10-26 11:50:37.793906 | 2003-01-21 09:00:00 | 9249 | 0.0 |
2023-10-26 11:50:37.795220 | 2003-01-21 10:00:00 | 9250 | 0.0 |
ev_in_situ.head().T # transposed because of a bug in Jupyter Lab 4.0
datetime | 2023-10-26 11:50:32.070895 | 2023-10-26 11:50:32.077281 | 2023-10-26 11:50:32.083091 | 2023-10-26 11:50:32.088945 | 2023-10-26 11:50:32.094791 |
---|---|---|---|---|---|
env_datetime | 2002-01-01 00:00:00 | 2002-01-01 00:00:00 | 2002-01-01 00:00:00 | 2002-01-01 00:00:00 | 2002-01-01 00:00:00 |
env_time | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
agent | WTG_0000 | WTG_0001 | WTG_0002 | WTG_0003 | WTG_0004 |
action | subassemblies created: ['electrical_system', '... | subassemblies created: ['electrical_system', '... | subassemblies created: ['electrical_system', '... | subassemblies created: ['electrical_system', '... | subassemblies created: ['electrical_system', '... |
reason | windfarm initialization | windfarm initialization | windfarm initialization | windfarm initialization | windfarm initialization |
additional | initialization | initialization | initialization | initialization | initialization |
system_id | WTG_0000 | WTG_0001 | WTG_0002 | WTG_0003 | WTG_0004 |
system_name | WTG_0000 | WTG_0001 | WTG_0002 | WTG_0003 | WTG_0004 |
part_id | <NA> | <NA> | <NA> | <NA> | <NA> |
part_name | <NA> | <NA> | <NA> | <NA> | <NA> |
system_operating_level | 1 | 1 | 1 | 1 | 1 |
part_operating_level | 1 | 1 | 1 | 1 | 1 |
duration | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
distance_km | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
request_id | na | na | na | na | na |
location | na | na | na | na | na |
materials_cost | 0 | 0 | 0 | 0 | 0 |
hourly_labor_cost | 0 | 0 | 0 | 0 | 0 |
salary_labor_cost | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
total_labor_cost | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
equipment_cost | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
total_cost | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
year | 2002 | 2002 | 2002 | 2002 | 2002 |
month | 1 | 1 | 1 | 1 | 1 |
day | 1 | 1 | 1 | 1 | 1 |
# Get the core subset of columns to show
col_filter = ["env_datetime", "agent", "action", "reason", "additional", "system_id", "part_id", "request_id", "duration"]
So let's look for anything that seems like it could cause some major downtime around this timeframe.
ev_in_situ.loc[
ev_in_situ.env_datetime >= "2003-01-20",
col_filter
].head(50)
env_datetime | agent | action | reason | additional | system_id | part_id | request_id | duration | |
---|---|---|---|---|---|---|---|---|---|
datetime | |||||||||
2023-10-26 11:50:37.778064 | 2003-01-20 06:00:00 | Crew Transfer Vessel 5 | traveling | blades minor repair | traveling from port to site | WTG_0403 | rotor_blades | RPR00000381 | 1.809689 |
2023-10-26 11:50:37.778203 | 2003-01-20 06:00:00 | Crew Transfer Vessel 3 | traveling | major pitch system repair | traveling from port to site | WTG_0505 | hydraulic_system | RPR00000358 | 1.809705 |
2023-10-26 11:50:37.778341 | 2003-01-20 06:00:00 | Crew Transfer Vessel 6 | traveling | minor pitch system repair | traveling from port to site | WTG_0407 | hydraulic_system | RPR00000313 | 1.809707 |
2023-10-26 11:50:37.778477 | 2003-01-20 06:00:00 | Crew Transfer Vessel 1 | traveling | minor pitch system repair | traveling from port to site | WTG_0004 | hydraulic_system | RPR00000314 | 1.809725 |
2023-10-26 11:50:37.778614 | 2003-01-20 06:00:00 | Crew Transfer Vessel 4 | traveling | major pitch system repair | traveling from port to site | WTG_0409 | hydraulic_system | RPR00000319 | 1.809782 |
2023-10-26 11:50:37.778749 | 2003-01-20 06:00:00 | Crew Transfer Vessel 2 | traveling | direct drive generator minor repair | traveling from port to site | WTG_0500 | generator | RPR00000391 | 1.809821 |
2023-10-26 11:50:37.778882 | 2003-01-20 06:00:00 | Crew Transfer Vessel 7 | traveling | blades minor repair | traveling from port to site | WTG_0507 | rotor_blades | RPR00000382 | 1.809892 |
2023-10-26 11:50:37.779019 | 2003-01-20 07:48:34 | Crew Transfer Vessel 5 | complete travel | blades minor repair | arrived at WTG_0403 | WTG_0403 | rotor_blades | RPR00000381 | 0.0 |
2023-10-26 11:50:37.779088 | 2003-01-20 07:48:34 | Crew Transfer Vessel 5 | transferring crew | blades minor repair | transferring crew from Crew Transfer Vessel 5 ... | WTG_0403 | rotor_blades | RPR00000381 | 0.25 |
2023-10-26 11:50:37.779098 | 2003-01-20 07:48:35 | Crew Transfer Vessel 3 | complete travel | major pitch system repair | arrived at WTG_0505 | WTG_0505 | hydraulic_system | RPR00000358 | 0.0 |
2023-10-26 11:50:37.779161 | 2003-01-20 07:48:35 | Crew Transfer Vessel 3 | transferring crew | major pitch system repair | transferring crew from Crew Transfer Vessel 3 ... | WTG_0505 | hydraulic_system | RPR00000358 | 0.25 |
2023-10-26 11:50:37.779167 | 2003-01-20 07:48:35 | Crew Transfer Vessel 6 | complete travel | minor pitch system repair | arrived at WTG_0407 | WTG_0407 | hydraulic_system | RPR00000313 | 0.0 |
2023-10-26 11:50:37.779228 | 2003-01-20 07:48:35 | Crew Transfer Vessel 6 | transferring crew | minor pitch system repair | transferring crew from Crew Transfer Vessel 6 ... | WTG_0407 | hydraulic_system | RPR00000313 | 0.25 |
2023-10-26 11:50:37.779234 | 2003-01-20 07:48:35 | Crew Transfer Vessel 1 | complete travel | minor pitch system repair | arrived at WTG_0004 | WTG_0004 | hydraulic_system | RPR00000314 | 0.0 |
2023-10-26 11:50:37.779293 | 2003-01-20 07:48:35 | Crew Transfer Vessel 1 | transferring crew | minor pitch system repair | transferring crew from Crew Transfer Vessel 1 ... | WTG_0004 | hydraulic_system | RPR00000314 | 0.25 |
2023-10-26 11:50:37.779299 | 2003-01-20 07:48:35 | Crew Transfer Vessel 4 | complete travel | major pitch system repair | arrived at WTG_0409 | WTG_0409 | hydraulic_system | RPR00000319 | 0.0 |
2023-10-26 11:50:37.779359 | 2003-01-20 07:48:35 | Crew Transfer Vessel 4 | transferring crew | major pitch system repair | transferring crew from Crew Transfer Vessel 4 ... | WTG_0409 | hydraulic_system | RPR00000319 | 0.25 |
2023-10-26 11:50:37.779365 | 2003-01-20 07:48:35 | Crew Transfer Vessel 2 | complete travel | direct drive generator minor repair | arrived at WTG_0500 | WTG_0500 | generator | RPR00000391 | 0.0 |
2023-10-26 11:50:37.779423 | 2003-01-20 07:48:35 | Crew Transfer Vessel 2 | transferring crew | direct drive generator minor repair | transferring crew from Crew Transfer Vessel 2 ... | WTG_0500 | generator | RPR00000391 | 0.25 |
2023-10-26 11:50:37.779429 | 2003-01-20 07:48:36 | Crew Transfer Vessel 7 | complete travel | blades minor repair | arrived at WTG_0507 | WTG_0507 | rotor_blades | RPR00000382 | 0.0 |
2023-10-26 11:50:37.779491 | 2003-01-20 07:48:36 | Crew Transfer Vessel 7 | transferring crew | blades minor repair | transferring crew from Crew Transfer Vessel 7 ... | WTG_0507 | rotor_blades | RPR00000382 | 0.25 |
2023-10-26 11:50:37.779560 | 2003-01-20 08:03:34 | Crew Transfer Vessel 5 | complete transfer | blades minor repair | complete | WTG_0403 | rotor_blades | RPR00000381 | 0.0 |
2023-10-26 11:50:37.779648 | 2003-01-20 08:03:34 | Crew Transfer Vessel 5 | repair | blades minor repair | repair | WTG_0403 | rotor_blades | RPR00000381 | 0.410556 |
2023-10-26 11:50:37.779654 | 2003-01-20 08:03:35 | Crew Transfer Vessel 3 | complete transfer | major pitch system repair | complete | WTG_0505 | hydraulic_system | RPR00000358 | 0.0 |
2023-10-26 11:50:37.779916 | 2003-01-20 08:03:35 | Crew Transfer Vessel 3 | repair | major pitch system repair | repair | WTG_0505 | hydraulic_system | RPR00000358 | 6.12 |
2023-10-26 11:50:37.779922 | 2003-01-20 08:03:35 | Crew Transfer Vessel 6 | complete transfer | minor pitch system repair | complete | WTG_0407 | hydraulic_system | RPR00000313 | 0.0 |
2023-10-26 11:50:37.780101 | 2003-01-20 08:03:35 | Crew Transfer Vessel 6 | repair | minor pitch system repair | repair | WTG_0407 | hydraulic_system | RPR00000313 | 9.881944 |
2023-10-26 11:50:37.780109 | 2003-01-20 08:03:35 | Crew Transfer Vessel 1 | complete transfer | minor pitch system repair | complete | WTG_0004 | hydraulic_system | RPR00000314 | 0.0 |
2023-10-26 11:50:37.780229 | 2003-01-20 08:03:35 | Crew Transfer Vessel 1 | repair | minor pitch system repair | repair | WTG_0004 | hydraulic_system | RPR00000314 | 10.898333 |
2023-10-26 11:50:37.780235 | 2003-01-20 08:03:35 | Crew Transfer Vessel 4 | complete transfer | major pitch system repair | complete | WTG_0409 | hydraulic_system | RPR00000319 | 0.0 |
2023-10-26 11:50:37.780340 | 2003-01-20 08:03:35 | Crew Transfer Vessel 4 | repair | major pitch system repair | repair | WTG_0409 | hydraulic_system | RPR00000319 | 6.12 |
2023-10-26 11:50:37.780346 | 2003-01-20 08:03:35 | Crew Transfer Vessel 2 | complete transfer | direct drive generator minor repair | complete | WTG_0500 | generator | RPR00000391 | 0.0 |
2023-10-26 11:50:37.780449 | 2003-01-20 08:03:35 | Crew Transfer Vessel 2 | repair | direct drive generator minor repair | repair | WTG_0500 | generator | RPR00000391 | 1.603333 |
2023-10-26 11:50:37.780455 | 2003-01-20 08:03:36 | Crew Transfer Vessel 7 | complete transfer | blades minor repair | complete | WTG_0507 | rotor_blades | RPR00000382 | 0.0 |
2023-10-26 11:50:37.780559 | 2003-01-20 08:03:36 | Crew Transfer Vessel 7 | repair | blades minor repair | repair | WTG_0507 | rotor_blades | RPR00000382 | 2.5475 |
2023-10-26 11:50:37.780631 | 2003-01-20 08:28:12 | Crew Transfer Vessel 5 | transferring crew | blades minor repair | transferring crew from WTG_0403 to Crew Transf... | WTG_0403 | rotor_blades | RPR00000381 | 0.25 |
2023-10-26 11:50:37.780637 | 2003-01-20 08:43:12 | Crew Transfer Vessel 5 | complete transfer | blades minor repair | complete | WTG_0403 | rotor_blades | RPR00000381 | 0.0 |
2023-10-26 11:50:37.780780 | 2003-01-20 08:43:12 | Crew Transfer Vessel 5 | repair complete | blades minor repair | complete | WTG_0403 | rotor_blades | RPR00000381 | 0.0 |
2023-10-26 11:50:37.781404 | 2003-01-20 08:43:14 | Crew Transfer Vessel 5 | traveling | power converter minor repair | traveling from WTG_0403 to WTG_0704 | WTG_0704 | electrical_system | RPR00000315 | 0.184454 |
2023-10-26 11:50:37.781412 | 2003-01-20 08:54:19 | Crew Transfer Vessel 5 | complete travel | power converter minor repair | arrived at WTG_0704 | WTG_0704 | electrical_system | RPR00000315 | 0.0 |
2023-10-26 11:50:37.781673 | 2003-01-20 08:54:19 | Crew Transfer Vessel 5 | transferring crew | power converter minor repair | transferring crew from Crew Transfer Vessel 5 ... | WTG_0704 | electrical_system | RPR00000315 | 0.25 |
2023-10-26 11:50:37.781746 | 2003-01-20 09:09:19 | Crew Transfer Vessel 5 | complete transfer | power converter minor repair | complete | WTG_0704 | electrical_system | RPR00000315 | 0.0 |
2023-10-26 11:50:37.781847 | 2003-01-20 09:09:19 | Crew Transfer Vessel 5 | repair | power converter minor repair | repair | WTG_0704 | electrical_system | RPR00000315 | 12.594722 |
2023-10-26 11:50:37.781919 | 2003-01-20 09:39:47 | Crew Transfer Vessel 2 | transferring crew | direct drive generator minor repair | transferring crew from WTG_0500 to Crew Transf... | WTG_0500 | generator | RPR00000391 | 0.25 |
2023-10-26 11:50:37.781924 | 2003-01-20 09:54:47 | Crew Transfer Vessel 2 | complete transfer | direct drive generator minor repair | complete | WTG_0500 | generator | RPR00000391 | 0.0 |
2023-10-26 11:50:37.781976 | 2003-01-20 09:54:47 | Crew Transfer Vessel 2 | repair complete | direct drive generator minor repair | complete | WTG_0500 | generator | RPR00000391 | 0.0 |
2023-10-26 11:50:37.782602 | 2003-01-20 09:54:56 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from WTG_0500 to SS1 | SS1 | transformer | MNT00000325 | 0.212317 |
2023-10-26 11:50:37.782679 | 2003-01-20 10:07:41 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.782775 | 2003-01-20 10:07:41 | Crew Transfer Vessel 2 | transferring crew | oss annual inspection | transferring crew from Crew Transfer Vessel 2 ... | SS1 | transformer | MNT00000325 | 0.25 |
2023-10-26 11:50:37.782781 | 2003-01-20 10:22:41 | Crew Transfer Vessel 2 | complete transfer | oss annual inspection | complete | SS1 | transformer | MNT00000325 | 0.0 |
So, we have a substation inspection, so in order to operate on that it'll get shut down, which then shuts down all energy passing through it, which could cause some major curtailment. Now, let's see how long that might be lasting
ev_in_situ.loc[
ev_in_situ.env_datetime >= "2003-01-20 09:50",
col_filter
].head(20)
env_datetime | agent | action | reason | additional | system_id | part_id | request_id | duration | |
---|---|---|---|---|---|---|---|---|---|
datetime | |||||||||
2023-10-26 11:50:37.781924 | 2003-01-20 09:54:47 | Crew Transfer Vessel 2 | complete transfer | direct drive generator minor repair | complete | WTG_0500 | generator | RPR00000391 | 0.0 |
2023-10-26 11:50:37.781976 | 2003-01-20 09:54:47 | Crew Transfer Vessel 2 | repair complete | direct drive generator minor repair | complete | WTG_0500 | generator | RPR00000391 | 0.0 |
2023-10-26 11:50:37.782602 | 2003-01-20 09:54:56 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from WTG_0500 to SS1 | SS1 | transformer | MNT00000325 | 0.212317 |
2023-10-26 11:50:37.782679 | 2003-01-20 10:07:41 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.782775 | 2003-01-20 10:07:41 | Crew Transfer Vessel 2 | transferring crew | oss annual inspection | transferring crew from Crew Transfer Vessel 2 ... | SS1 | transformer | MNT00000325 | 0.25 |
2023-10-26 11:50:37.782781 | 2003-01-20 10:22:41 | Crew Transfer Vessel 2 | complete transfer | oss annual inspection | complete | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.782876 | 2003-01-20 10:22:41 | Crew Transfer Vessel 2 | maintenance | oss annual inspection | maintenance | SS1 | transformer | MNT00000325 | 11.371944 |
2023-10-26 11:50:37.782949 | 2003-01-20 10:36:27 | Crew Transfer Vessel 7 | transferring crew | blades minor repair | transferring crew from WTG_0507 to Crew Transf... | WTG_0507 | rotor_blades | RPR00000382 | 0.25 |
2023-10-26 11:50:37.782955 | 2003-01-20 10:51:27 | Crew Transfer Vessel 7 | complete transfer | blades minor repair | complete | WTG_0507 | rotor_blades | RPR00000382 | 0.0 |
2023-10-26 11:50:37.783007 | 2003-01-20 10:51:27 | Crew Transfer Vessel 7 | repair complete | blades minor repair | complete | WTG_0507 | rotor_blades | RPR00000382 | 0.0 |
2023-10-26 11:50:37.783632 | 2003-01-20 10:51:33 | Crew Transfer Vessel 7 | traveling | oss annual inspection | traveling from WTG_0507 to SS2 | SS2 | transformer | MNT00000326 | 0.467544 |
2023-10-26 11:50:37.783706 | 2003-01-20 11:19:36 | Crew Transfer Vessel 7 | complete travel | oss annual inspection | arrived at SS2 | SS2 | transformer | MNT00000326 | 0.0 |
2023-10-26 11:50:37.783803 | 2003-01-20 11:19:36 | Crew Transfer Vessel 7 | transferring crew | oss annual inspection | transferring crew from Crew Transfer Vessel 7 ... | SS2 | transformer | MNT00000326 | 0.25 |
2023-10-26 11:50:37.783809 | 2003-01-20 11:34:36 | Crew Transfer Vessel 7 | complete transfer | oss annual inspection | complete | SS2 | transformer | MNT00000326 | 0.0 |
2023-10-26 11:50:37.783905 | 2003-01-20 11:34:36 | Crew Transfer Vessel 7 | maintenance | oss annual inspection | maintenance | SS2 | transformer | MNT00000326 | 10.173333 |
2023-10-26 11:50:37.784173 | 2003-01-20 14:10:47 | Crew Transfer Vessel 3 | transferring crew | major pitch system repair | transferring crew from WTG_0505 to Crew Transf... | WTG_0505 | hydraulic_system | RPR00000358 | 0.25 |
2023-10-26 11:50:37.784239 | 2003-01-20 14:10:47 | Crew Transfer Vessel 4 | transferring crew | major pitch system repair | transferring crew from WTG_0409 to Crew Transf... | WTG_0409 | hydraulic_system | RPR00000319 | 0.25 |
2023-10-26 11:50:37.784246 | 2003-01-20 14:25:47 | Crew Transfer Vessel 3 | complete transfer | major pitch system repair | complete | WTG_0505 | hydraulic_system | RPR00000358 | 0.0 |
2023-10-26 11:50:37.784296 | 2003-01-20 14:25:47 | Crew Transfer Vessel 3 | repair complete | major pitch system repair | complete | WTG_0505 | hydraulic_system | RPR00000358 | 0.0 |
2023-10-26 11:50:37.784842 | 2003-01-20 14:25:47 | Crew Transfer Vessel 4 | complete transfer | major pitch system repair | complete | WTG_0409 | hydraulic_system | RPR00000319 | 0.0 |
Ok, so now it's clear that both substations are having simultaneous downtime, which will inevitable shut down the whole farm. Let's just see how long that might last for
ss1_maint = ev_in_situ.loc[
ev_in_situ.request_id == "MNT00000325",
col_filter
]
ss1_maint
env_datetime | agent | action | reason | additional | system_id | part_id | request_id | duration | |
---|---|---|---|---|---|---|---|---|---|
datetime | |||||||||
2023-10-26 11:50:37.673305 | 2003-01-01 00:00:00 | transformer | maintenance request | oss annual inspection | severity level 1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.782602 | 2003-01-20 09:54:56 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from WTG_0500 to SS1 | SS1 | transformer | MNT00000325 | 0.212317 |
2023-10-26 11:50:37.782679 | 2003-01-20 10:07:41 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.782775 | 2003-01-20 10:07:41 | Crew Transfer Vessel 2 | transferring crew | oss annual inspection | transferring crew from Crew Transfer Vessel 2 ... | SS1 | transformer | MNT00000325 | 0.25 |
2023-10-26 11:50:37.782781 | 2003-01-20 10:22:41 | Crew Transfer Vessel 2 | complete transfer | oss annual inspection | complete | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.782876 | 2003-01-20 10:22:41 | Crew Transfer Vessel 2 | maintenance | oss annual inspection | maintenance | SS1 | transformer | MNT00000325 | 11.371944 |
2023-10-26 11:50:37.789377 | 2003-01-20 21:45:00 | Crew Transfer Vessel 2 | transferring crew | oss annual inspection | transferring crew from SS1 to Crew Transfer Ve... | SS1 | transformer | MNT00000325 | 0.25 |
2023-10-26 11:50:37.789925 | 2003-01-20 22:00:00 | Crew Transfer Vessel 2 | complete transfer | oss annual inspection | complete | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.790052 | 2003-01-20 22:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from site to port | SS1 | transformer | MNT00000325 | 1.809738 |
2023-10-26 11:50:37.790836 | 2003-01-20 23:48:35 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at port | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.790848 | 2003-01-20 23:48:35 | Crew Transfer Vessel 2 | delay | oss annual inspection | work shift has ended; waiting for next shift t... | SS1 | transformer | MNT00000325 | 6.190278 |
2023-10-26 11:50:37.791487 | 2003-01-21 06:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from port to site | SS1 | transformer | MNT00000325 | 1.809753 |
2023-10-26 11:50:37.792490 | 2003-01-21 07:48:35 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.792561 | 2003-01-21 07:48:35 | Crew Transfer Vessel 2 | transferring crew | oss annual inspection | transferring crew from Crew Transfer Vessel 2 ... | SS1 | transformer | MNT00000325 | 0.25 |
2023-10-26 11:50:37.793031 | 2003-01-21 08:03:35 | Crew Transfer Vessel 2 | complete transfer | oss annual inspection | complete | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.793140 | 2003-01-21 08:03:35 | Crew Transfer Vessel 2 | maintenance | oss annual inspection | maintenance | SS1 | transformer | MNT00000325 | 8.940278 |
2023-10-26 11:50:37.797296 | 2003-01-21 17:00:00 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather delay | SS1 | transformer | MNT00000325 | 6.0 |
2023-10-26 11:50:37.798315 | 2003-01-21 23:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from site to port | SS1 | transformer | MNT00000325 | 1.809784 |
2023-10-26 11:50:37.799411 | 2003-01-22 00:48:35 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at port | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.799420 | 2003-01-22 00:48:35 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather delay | SS1 | transformer | MNT00000325 | 21.190216 |
2023-10-26 11:50:37.800941 | 2003-01-22 22:00:00 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather unsuitable to transfer crew | SS1 | transformer | MNT00000325 | 8.0 |
2023-10-26 11:50:37.801978 | 2003-01-23 06:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from port to site | SS1 | transformer | MNT00000325 | 1.809784 |
2023-10-26 11:50:37.802952 | 2003-01-23 07:48:35 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.803133 | 2003-01-23 07:48:35 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from site to port | SS1 | transformer | MNT00000325 | 1.619568 |
2023-10-26 11:50:37.804207 | 2003-01-23 09:25:46 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at port | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.804216 | 2003-01-23 09:25:46 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather delay | SS1 | transformer | MNT00000325 | 12.57071 |
2023-10-26 11:50:37.805191 | 2003-01-23 22:00:00 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather unsuitable to transfer crew | SS1 | transformer | MNT00000325 | 8.0 |
2023-10-26 11:50:37.806380 | 2003-01-24 06:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from port to site | SS1 | transformer | MNT00000325 | 1.809845 |
2023-10-26 11:50:37.807524 | 2003-01-24 07:48:36 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.807700 | 2003-01-24 07:48:36 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from site to port | SS1 | transformer | MNT00000325 | 1.619691 |
2023-10-26 11:50:37.808264 | 2003-01-24 09:25:47 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at port | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.808273 | 2003-01-24 09:25:47 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather delay | SS1 | transformer | MNT00000325 | 12.570309 |
2023-10-26 11:50:37.809212 | 2003-01-24 22:00:00 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather unsuitable to transfer crew | SS1 | transformer | MNT00000325 | 8.0 |
2023-10-26 11:50:37.809940 | 2003-01-25 06:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from port to site | SS1 | transformer | MNT00000325 | 1.809691 |
2023-10-26 11:50:37.810854 | 2003-01-25 07:48:35 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.811034 | 2003-01-25 07:48:35 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from site to port | SS1 | transformer | MNT00000325 | 1.619381 |
2023-10-26 11:50:37.812268 | 2003-01-25 09:25:44 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at port | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.812279 | 2003-01-25 09:25:44 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather delay | SS1 | transformer | MNT00000325 | 12.570897 |
2023-10-26 11:50:37.813264 | 2003-01-25 22:00:00 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather unsuitable to transfer crew | SS1 | transformer | MNT00000325 | 8.0 |
2023-10-26 11:50:37.814208 | 2003-01-26 06:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from port to site | SS1 | transformer | MNT00000325 | 1.809659 |
2023-10-26 11:50:37.815114 | 2003-01-26 07:48:34 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.815292 | 2003-01-26 07:48:34 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from site to port | SS1 | transformer | MNT00000325 | 1.619318 |
2023-10-26 11:50:37.816522 | 2003-01-26 09:25:44 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at port | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.816533 | 2003-01-26 09:25:44 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather delay | SS1 | transformer | MNT00000325 | 12.571238 |
2023-10-26 11:50:37.817601 | 2003-01-26 22:00:00 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather unsuitable to transfer crew | SS1 | transformer | MNT00000325 | 8.0 |
2023-10-26 11:50:37.819148 | 2003-01-27 06:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from port to site | SS1 | transformer | MNT00000325 | 1.809874 |
2023-10-26 11:50:37.820516 | 2003-01-27 07:48:36 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.820690 | 2003-01-27 07:48:36 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from site to port | SS1 | transformer | MNT00000325 | 1.619747 |
2023-10-26 11:50:37.820922 | 2003-01-27 09:25:47 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at port | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.820930 | 2003-01-27 09:25:47 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather delay | SS1 | transformer | MNT00000325 | 12.570253 |
2023-10-26 11:50:37.821786 | 2003-01-27 22:00:00 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather unsuitable to transfer crew | SS1 | transformer | MNT00000325 | 8.0 |
2023-10-26 11:50:37.822686 | 2003-01-28 06:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from port to site | SS1 | transformer | MNT00000325 | 1.809747 |
2023-10-26 11:50:37.823648 | 2003-01-28 07:48:35 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.823821 | 2003-01-28 07:48:35 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from site to port | SS1 | transformer | MNT00000325 | 1.619494 |
2023-10-26 11:50:37.824897 | 2003-01-28 09:25:45 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at port | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.824907 | 2003-01-28 09:25:45 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather delay | SS1 | transformer | MNT00000325 | 12.570784 |
2023-10-26 11:50:37.825943 | 2003-01-28 22:00:00 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather unsuitable to transfer crew | SS1 | transformer | MNT00000325 | 8.0 |
2023-10-26 11:50:37.826669 | 2003-01-29 06:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from port to site | SS1 | transformer | MNT00000325 | 1.809772 |
2023-10-26 11:50:37.827725 | 2003-01-29 07:48:35 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.827793 | 2003-01-29 07:48:35 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather delay | SS1 | transformer | MNT00000325 | 12.190278 |
2023-10-26 11:50:37.829335 | 2003-01-29 20:00:00 | Crew Transfer Vessel 2 | transferring crew | oss annual inspection | transferring crew from SS1 to Crew Transfer Ve... | SS1 | transformer | MNT00000325 | 0.25 |
2023-10-26 11:50:37.829833 | 2003-01-29 20:15:00 | Crew Transfer Vessel 2 | complete transfer | oss annual inspection | complete | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.829963 | 2003-01-29 20:15:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from site to port | SS1 | transformer | MNT00000325 | 1.059822 |
2023-10-26 11:50:37.830627 | 2003-01-29 21:18:35 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at port | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.830638 | 2003-01-29 21:18:35 | Crew Transfer Vessel 2 | delay | oss annual inspection | work shift has ended; waiting for next shift t... | SS1 | transformer | MNT00000325 | 8.690278 |
2023-10-26 11:50:37.832317 | 2003-01-30 06:00:00 | Crew Transfer Vessel 2 | traveling | oss annual inspection | traveling from port to site | SS1 | transformer | MNT00000325 | 1.809921 |
2023-10-26 11:50:37.832876 | 2003-01-30 07:48:36 | Crew Transfer Vessel 2 | complete travel | oss annual inspection | arrived at SS1 | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.832935 | 2003-01-30 07:48:36 | Crew Transfer Vessel 2 | delay | oss annual inspection | weather delay | SS1 | transformer | MNT00000325 | 4.19 |
2023-10-26 11:50:37.833433 | 2003-01-30 12:00:00 | Crew Transfer Vessel 2 | transferring crew | oss annual inspection | transferring crew from Crew Transfer Vessel 2 ... | SS1 | transformer | MNT00000325 | 0.25 |
2023-10-26 11:50:37.834529 | 2003-01-30 12:15:00 | Crew Transfer Vessel 2 | complete transfer | oss annual inspection | complete | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.834644 | 2003-01-30 12:15:00 | Crew Transfer Vessel 2 | maintenance | oss annual inspection | maintenance | SS1 | transformer | MNT00000325 | 3.687778 |
2023-10-26 11:50:37.838395 | 2003-01-30 15:56:16 | Crew Transfer Vessel 2 | transferring crew | oss annual inspection | transferring crew from SS1 to Crew Transfer Ve... | SS1 | transformer | MNT00000325 | 0.25 |
2023-10-26 11:50:37.838738 | 2003-01-30 16:11:16 | Crew Transfer Vessel 2 | complete transfer | oss annual inspection | complete | SS1 | transformer | MNT00000325 | 0.0 |
2023-10-26 11:50:37.838755 | 2003-01-30 16:11:16 | Crew Transfer Vessel 2 | maintenance complete | oss annual inspection | complete | SS1 | transformer | MNT00000325 | 0.0 |
So, the request is submitted, and 20 days later it's addressed, so let's figure out roughly how long the downtime actually is here. And then what about the other substation's maintenance?
ss1_maint = ss1_maint.loc[ss1_maint.agent == "Crew Transfer Vessel 2"]
ss1_maint.env_datetime.max() - ss1_maint.env_datetime.min()
Timedelta('10 days 06:16:20')
ss2_maint = ev_in_situ.loc[
ev_in_situ.request_id == "MNT00000326",
col_filter
]
ss2_maint.head()
env_datetime | agent | action | reason | additional | system_id | part_id | request_id | duration | |
---|---|---|---|---|---|---|---|---|---|
datetime | |||||||||
2023-10-26 11:50:37.673331 | 2003-01-01 00:00:00 | transformer | maintenance request | oss annual inspection | severity level 1 | SS2 | transformer | MNT00000326 | 0.0 |
2023-10-26 11:50:37.783632 | 2003-01-20 10:51:33 | Crew Transfer Vessel 7 | traveling | oss annual inspection | traveling from WTG_0507 to SS2 | SS2 | transformer | MNT00000326 | 0.467544 |
2023-10-26 11:50:37.783706 | 2003-01-20 11:19:36 | Crew Transfer Vessel 7 | complete travel | oss annual inspection | arrived at SS2 | SS2 | transformer | MNT00000326 | 0.0 |
2023-10-26 11:50:37.783803 | 2003-01-20 11:19:36 | Crew Transfer Vessel 7 | transferring crew | oss annual inspection | transferring crew from Crew Transfer Vessel 7 ... | SS2 | transformer | MNT00000326 | 0.25 |
2023-10-26 11:50:37.783809 | 2003-01-20 11:34:36 | Crew Transfer Vessel 7 | complete transfer | oss annual inspection | complete | SS2 | transformer | MNT00000326 | 0.0 |
ss2_maint = ss2_maint.loc[ss2_maint.agent == "Crew Transfer Vessel 7"]
ss2_maint.env_datetime.max() - ss2_maint.env_datetime.min()
Timedelta('10 days 06:31:39')
So there are 2 simultaneous dips in availability, first from maintenance on the the upstream substation (SS1), and then from maintenance on the main, interconnection-connected substation (SS2), which then causes a shutdown at the entire plant.
So then what happens for the tow-to-port case?
# Exercise for those that want to try it on their own
Now we can look at the OpEx and see how they compare from one scenario to the next, and break it down by other categories as needed or interested.
project_mw = sim_in_situ.windfarm.capacity / 1000
opex = sim_in_situ.metrics.opex("project")
opex.index = ["In Situ"]
opex.loc["Tow-to-Port", "OpEx"] = sim_ttp.metrics.opex("project").values[0]
opex["OpEx (€/MW/yr)"] = opex.OpEx / project_mw / 20
opex = opex.rename(columns={"OpEx": "OpEx (€)"})
opex.style.format("{:,.2f}")
OpEx (€) | OpEx (€/MW/yr) | |
---|---|---|
In Situ | 2,627,559,225.85 | 109,481.63 |
Tow-to-Port | 1,669,481,396.18 | 69,561.72 |
opex_breakdown = pd.concat(
[
sim_in_situ.metrics.equipment_costs("project"),
sim_in_situ.metrics.labor_costs("project"),
sim_in_situ.metrics.project_fixed_costs("project", "low"),
sim_in_situ.metrics.port_fees("project"),
],
axis=1
)
opex_breakdown.index = ["In Situ"]
opex_breakdown.loc["Tow-to-Port"] = pd.concat(
[
sim_ttp.metrics.equipment_costs("project"),
sim_ttp.metrics.labor_costs("project"),
sim_ttp.metrics.project_fixed_costs("project", "low"),
sim_ttp.metrics.port_fees("project"),
],
axis=1
).values[0]
opex_breakdown.style.format("{:,.2f}")
equipment_cost | total_labor_cost | operations | port_fees | |
---|---|---|---|---|
In Situ | 2,507,009,405.10 | 53,297,496.75 | 0.00 | 0.00 |
Tow-to-Port | 1,059,248,077.43 | 73,770,382.75 | 0.00 | 480,000,000.00 |
Why might the OpEx for tow-to-port be so low?
equipment_breakdown = pd.concat(
[
sim_in_situ.metrics.equipment_costs("project", by_equipment=True).T.rename(columns={0: "In Situ"}),
sim_ttp.metrics.equipment_costs("project", by_equipment=True).T.rename(columns={0: "Tow-to-Port"}),
],
join="outer",
axis=1,
).fillna(0)
equipment_breakdown.style.format("{:,.2f}")
/Users/rhammond/GitHub_Public/WOMBAT/wombat/core/post_processor.py:740: FutureWarning: <class 'pandas.core.arrays.string_.StringArray'>._reduce will require a `keepdims` parameter in the future costs = costs.fillna(costs.max(axis=0)).T /Users/rhammond/GitHub_Public/WOMBAT/wombat/core/post_processor.py:740: FutureWarning: <class 'pandas.core.arrays.string_.StringArray'>._reduce will require a `keepdims` parameter in the future costs = costs.fillna(costs.max(axis=0)).T
In Situ | Tow-to-Port | |
---|---|---|
Anchor Handling Tug | 183,182,504.92 | 355,551,986.65 |
Cable Laying Vessel | 156,923,649.78 | 133,852,669.25 |
Crew Transfer Vessel 1 | 25,563,370.47 | 25,562,764.84 |
Crew Transfer Vessel 2 | 25,563,357.03 | 25,562,764.04 |
Crew Transfer Vessel 3 | 25,563,348.17 | 25,562,740.47 |
Crew Transfer Vessel 4 | 25,563,351.85 | 25,562,717.86 |
Crew Transfer Vessel 5 | 25,563,349.01 | 25,562,704.46 |
Crew Transfer Vessel 6 | 25,563,372.45 | 25,562,723.04 |
Crew Transfer Vessel 7 | 25,563,360.51 | 25,562,710.29 |
Diving Support Vessel | 187,610,296.15 | 371,891,657.28 |
Heavy Lift Vessel | 1,800,349,444.77 | 0.00 |
Tugboat 1 | 0.00 | 9,583,450.35 |
Tugboat 2 | 0.00 | 9,429,188.89 |
It should be noted that there are a couple limitations to WOMBAT and this data:
In the future, timing TBD, those will be addressed, but for now they're limitations, and should be considered when configuring the tow-to-port costs to match up with expected results
Were the vessels used consistently throughout the simulation period? Note that the below metric probably needs to be updated to be more reflective of vessel inactive time, such as time between shifts, so there are some limitations to the current model
equipment_utilization = pd.concat(
[
sim_in_situ.metrics.service_equipment_utilization("project").T.rename(columns={0: "In Situ"}),
sim_ttp.metrics.service_equipment_utilization("project").T.rename(columns={0: "Tow-to-Port"}),
],
join="outer",
axis=1,
).fillna(0)
equipment_utilization.style.format("{:,.2f}")
In Situ | Tow-to-Port | |
---|---|---|
Anchor Handling Tug | 0.87 | 0.99 |
Cable Laying Vessel | 0.92 | 0.90 |
Crew Transfer Vessel 1 | 1.00 | 1.00 |
Crew Transfer Vessel 2 | 1.00 | 1.00 |
Crew Transfer Vessel 3 | 1.00 | 1.00 |
Crew Transfer Vessel 4 | 1.00 | 1.00 |
Crew Transfer Vessel 5 | 1.00 | 1.00 |
Crew Transfer Vessel 6 | 1.00 | 1.00 |
Crew Transfer Vessel 7 | 1.00 | 1.00 |
Diving Support Vessel | 0.96 | 0.98 |
Heavy Lift Vessel | 0.98 | 0.00 |
Tugboat 1 | 0.00 | 1.00 |
Tugboat 2 | 0.00 | 1.00 |
What if we also look at the task completion rate? It seems that the tow-to-port scenario isn't actually getting tasks completed, so let's dig deeper.
print("In Situ")
scheduled = sim_in_situ.metrics.task_completion_rate(which="scheduled", frequency="project").values[0][0]
unscheduled = sim_in_situ.metrics.task_completion_rate(which="unscheduled", frequency="project").values[0][0]
combined = sim_in_situ.metrics.task_completion_rate(which="both", frequency="project").values[0][0]
print(f" Scheduled Task Completion Rate: {scheduled:.2%}")
print(f"Unscheduled Task Completion Rate: {unscheduled:.2%}")
print(f" Overall Task Completion Rate: {combined:.2%}")
print()
print("Tow-to-Port")
scheduled = sim_ttp.metrics.task_completion_rate(which="scheduled", frequency="project").values[0][0]
unscheduled = sim_ttp.metrics.task_completion_rate(which="unscheduled", frequency="project").values[0][0]
combined = sim_ttp.metrics.task_completion_rate(which="both", frequency="project").values[0][0]
print(f" Scheduled Task Completion Rate: {scheduled:.2%}")
print(f"Unscheduled Task Completion Rate: {unscheduled:.2%}")
print(f" Overall Task Completion Rate: {combined:.2%}")
In Situ Scheduled Task Completion Rate: 94.41% Unscheduled Task Completion Rate: 93.88% Overall Task Completion Rate: 94.08% Tow-to-Port Scheduled Task Completion Rate: 71.11% Unscheduled Task Completion Rate: 75.97% Overall Task Completion Rate: 74.14%
So let's dig into how long it takes to start and complete repairs for each scenario
process_times = sim_ttp.metrics.process_times()
# Normalize the times for hours per failure, to understand the average waiting and repair time
time_columns = ["time_to_completion", "process_time", "downtime", "time_to_start"]
process_times.loc[:, time_columns] = process_times[time_columns].values / process_times.N.values.reshape(-1, 1)
# Sort and make it look nice
process_times.sort_values("time_to_completion", ascending=False).style.format("{:,.0f}")
time_to_completion | process_time | downtime | time_to_start | N | |
---|---|---|---|---|---|
category | |||||
yaw system major replacement | 26,740 | 110 | 110 | 26,630 | 2 |
minor ballast pump repair | 15,566 | 9 | 9 | 15,560 | 31 |
yaw system major repair | 14,458 | 35 | 310 | 14,149 | 14 |
main shaft major repair | 13,520 | 36 | 1,602 | 12,447 | 59 |
direct drive generator minor repair | 13,007 | 20 | 138 | 10,637 | 2,698 |
annual turbine inspection | 12,962 | 28 | 182 | 10,542 | 4,786 |
main shaft minor repair | 12,890 | 14 | 28 | 10,984 | 604 |
direct drive generator major repair | 12,478 | 39 | 676 | 9,200 | 130 |
structural annual inspection | 11,511 | 19 | 58 | 3,195 | 5,207 |
minor pitch system repair | 11,511 | 28 | 50 | 11,309 | 2,812 |
major pitch system repair | 11,236 | 60 | 88 | 10,937 | 571 |
blades minor repair | 10,529 | 32 | 128 | 10,395 | 1,158 |
marine growth removal | 10,155 | 41 | 72 | 2,624 | 661 |
power electrical system major replacement | 9,977 | 7 | 7 | 1 | 14 |
main shaft replacement | 9,921 | 98 | 296 | 7,400 | 27 |
buoyancy module replacement | 9,896 | 40 | 54 | 3,489 | 178 |
power converter major repair | 9,783 | 15 | 396 | 2,787 | 2,844 |
yaw system minor repair | 9,776 | 16 | 23 | 9,734 | 358 |
power converter replacement | 9,592 | 68 | 355 | 2,530 | 628 |
direct drive generator major replacement | 9,425 | 187 | 433 | 8,470 | 38 |
blades major repair | 9,273 | 25 | 25 | 9,178 | 20 |
structural subsea inspection | 8,566 | 6 | 50 | 2,069 | 2,493 |
power electrical system major repair | 8,415 | 11 | 86 | 1,103 | 153 |
power electrical system minor repair | 7,874 | 11 | 41 | 2,497 | 2,944 |
power converter minor repair | 7,685 | 13 | 38 | 2,230 | 4,508 |
major pitch system replacement | 3,814 | 80 | 104 | 3,735 | 3 |
array cable replacement | 1,082 | 761 | 0 | 348 | 24 |
array cable major repair | 950 | 517 | 0 | 462 | 41 |
mooring line major repair | 690 | 65 | 148 | 209 | 78 |
mooring line replacement | 559 | 88 | 136 | 339 | 61 |
export cable subsea inspection | 525 | 84 | 0 | 480 | 18 |
major anchor repair | 469 | 41 | 66 | 289 | 85 |
anchor replacement | 390 | 70 | 133 | 183 | 65 |
oss annual inspection | 271 | 198 | 198 | 136 | 38 |
oss minor repair | 87 | 76 | 76 | 23 | 6 |
blades major replacement | 0 | 0 | 0 | 0 | 1 |
How does that compare to the in situ case for some of our worst offenders?
process_times = sim_in_situ.metrics.process_times()
# Normalize the times for hours per failure, to understand the average waiting and repair time
time_columns = ["time_to_completion", "process_time", "downtime", "time_to_start"]
process_times.loc[:, time_columns] = process_times[time_columns].values / process_times.N.values.reshape(-1, 1)
# Sort and make it look nice
process_times.sort_values("time_to_completion", ascending=False).head(10).style.format("{:,.0f}")
time_to_completion | process_time | downtime | time_to_start | N | |
---|---|---|---|---|---|
category | |||||
power converter major repair | 9,672 | 4 | 4 | 77 | 1,030 |
power electrical system major repair | 7,822 | 27 | 27 | 712 | 48 |
major pitch system replacement | 7,717 | 228 | 228 | 7,557 | 2 |
main shaft major repair | 5,313 | 52 | 52 | 2,139 | 34 |
power converter replacement | 4,565 | 473 | 682 | 3,493 | 238 |
yaw system major replacement | 3,483 | 448 | 448 | 3,046 | 1 |
blades major replacement | 3,062 | 2,529 | 2,528 | 534 | 1 |
direct drive generator major repair | 2,083 | 85 | 85 | 2,010 | 42 |
structural subsea inspection | 1,480 | 35 | 90 | 1,434 | 1,108 |
structural annual inspection | 1,414 | 100 | 153 | 1,278 | 2,329 |
NOTE: just remember to delete the logged data when you're done because the CSV files can take up a lot space if you don't need them and are just experimenting
sim_in_situ.env.cleanup_log_files()
sim_ttp.env.cleanup_log_files()