def install_oss_from_queue(vessel, queue, substations, distance, **kwargs): """ Installs offshore subsations and substructures from queue of feeder barges. Parameters ---------- env : Environment vessel : Vessel queue : simpy.Resource Queue object to shuttle to. number : int Number of substructures to install. distance : int | float Distance from site to port (km). """ n = 0 while n < substations: if vessel.at_port: # Transit to site vessel.at_port = False yield vessel.transit(distance) vessel.at_site = True if vessel.at_site: if queue.vessel: # Prep for monopile install yield prep_for_site_operations(vessel, survey_required=True, **kwargs) # Get monopile monopile = yield vessel.get_item_from_storage( "Monopile", vessel=queue.vessel, **kwargs) yield upend_monopile(vessel, monopile.length, **kwargs) yield install_monopile(vessel, monopile, **kwargs) # Get topside topside = yield vessel.get_item_from_storage( "Topside", vessel=queue.vessel, release=True, **kwargs) yield install_topside(vessel, topside, **kwargs) n += 1 else: start = vessel.env.now yield queue.activate delay_time = vessel.env.now - start vessel.submit_action_log("Delay", delay_time, location="Site") # Transit to port vessel.at_site = False yield vessel.transit(distance) vessel.at_port = True vessel.submit_debug_log( message="Monopile installation complete!", progress="Offshore Substation", )
def install_monopiles_from_queue(wtiv, queue, monopiles, distance, **kwargs): """ Logic that a Wind Turbine Installation Vessel (WTIV) uses to install monopiles and transition pieces from queue of feeder barges. Parameters ---------- env : simulation.Environment SimPy environment that the simulation runs in. wtiv : vessels.Vessel Vessel object that represents the WTIV. queue : simpy.Resource Queue object to interact with active feeder barge. number : int Total monopiles to install. distance : int | float Distance from site to port (km). """ n = 0 while n < monopiles: if wtiv.at_port: # Transit to site wtiv.at_port = False yield wtiv.transit(distance) wtiv.at_site = True if wtiv.at_site: if queue.vessel: # Prep for monopile install yield prep_for_site_operations(wtiv, survey_required=True, **kwargs) # Get monopile monopile = yield wtiv.get_item_from_storage("Monopile", vessel=queue.vessel, **kwargs) yield upend_monopile(wtiv, monopile.length, **kwargs) yield install_monopile(wtiv, monopile, **kwargs) # Get transition piece from active feeder tp = yield wtiv.get_item_from_storage( "TransitionPiece", vessel=queue.vessel, release=True, **kwargs, ) # Install transition piece yield install_transition_piece(wtiv, tp, **kwargs) wtiv.submit_debug_log(progress="Substructure") n += 1 else: start = wtiv.env.now yield queue.activate delay_time = wtiv.env.now - start wtiv.submit_action_log("Delay", delay_time, location="Site") # Transit to port wtiv.at_site = False yield wtiv.transit(distance) wtiv.at_port = True wtiv.submit_debug_log(message="Monopile installation complete!")
def solo_install_monopiles(vessel, port, distance, monopiles, **kwargs): """ TODO: Logic that a Wind Turbine Installation Vessel (WTIV) uses during a single monopile installation process. Parameters ---------- vessel : vessels.Vessel Vessel object that represents the WTIV. port : Port distance : int | float Distance between port and site (km). monopiles : int Total monopiles to install. """ component_list = ["Monopile", "TransitionPiece"] n = 0 while n < monopiles: if vessel.at_port: try: # Get substructure + transition piece from port yield get_list_of_items_from_port(vessel, port, component_list, **kwargs) except ItemNotFound: # If no items are at port and vessel.storage.items is empty, # the job is done if not vessel.storage.items: vessel.submit_debug_log(message="Item not found. Shutting down.") break # Transit to site vessel.update_trip_data() vessel.at_port = False yield vessel.transit(distance) vessel.at_site = True if vessel.at_site: if vessel.storage.items: # Prep for monopile install yield prep_for_site_operations(vessel, survey_required=True, **kwargs) # Get monopile from internal storage monopile = yield vessel.get_item_from_storage("Monopile", **kwargs) yield upend_monopile(vessel, monopile.length, **kwargs) yield install_monopile(vessel, monopile, **kwargs) # Get transition piece from internal storage tp = yield vessel.get_item_from_storage("TransitionPiece", **kwargs) yield install_transition_piece(vessel, tp, **kwargs) vessel.submit_debug_log(progress="Substructure") n += 1 else: # Transit to port vessel.at_site = False yield vessel.transit(distance) vessel.at_port = True vessel.submit_debug_log(message="Monopile installation complete!")
def install_turbine_components_from_queue( wtiv, queue, distance, turbines, tower_sections, num_blades, **kwargs ): """ Logic that a Wind Turbine Installation Vessel (WTIV) uses to install turbine componenets from a queue of feeder barges. Parameters ---------- env : simulation.Environment SimPy environment that the simulation runs in. wtiv : vessels.Vessel Vessel object that represents the WTIV. queue : simpy.Resource Queue object to interact with active feeder barge. component_list : dict Turbine components to retrieve and install. number : int Total turbine component sets to install. distance : int | float Distance from site to port (km). """ reequip_time = wtiv.crane.reequip(**kwargs) n = 0 while n < turbines: if wtiv.at_port: # Transit to site wtiv.at_port = False yield wtiv.transit(distance) wtiv.at_site = True if wtiv.at_site: if queue.vessel: # Prep for turbine install yield prep_for_site_operations(wtiv, **kwargs) for i in range(tower_sections): # Get tower section section = yield wtiv.get_item_from_storage( "TowerSection", vessel=queue.vessel, **kwargs ) # Install tower section height = section.length * (i + 1) yield install_tower_section( wtiv, section, height, **kwargs ) # Get turbine nacelle nacelle = yield wtiv.get_item_from_storage( "Nacelle", vessel=queue.vessel, **kwargs ) # Install nacelle yield wtiv.task("Reequip", reequip_time) yield install_nacelle(wtiv, nacelle, **kwargs) # Install turbine blades yield wtiv.task("Reequip", reequip_time) for i in range(num_blades): release = True if i + 1 == num_blades else False blade = yield wtiv.get_item_from_storage( "Blade", vessel=queue.vessel, release=release, **kwargs ) yield install_turbine_blade(wtiv, blade, **kwargs) # Jack-down site_depth = kwargs.get("site_depth", None) extension = kwargs.get("extension", site_depth + 10) jackdown_time = wtiv.jacksys.jacking_time( extension, site_depth ) yield wtiv.task( "Jackdown", jackdown_time, constraints=wtiv.transit_limits ) wtiv.submit_debug_log(progress="Turbine") n += 1 else: start = wtiv.env.now yield queue.activate delay_time = wtiv.env.now - start wtiv.submit_action_log("Delay", delay_time, location="Site") # Transit to port wtiv.at_site = False yield wtiv.transit(distance) wtiv.at_port = True wtiv.submit_debug_log(message="Turbine installation complete!")
def solo_install_turbines( vessel, port, distance, turbines, tower_sections, num_blades, **kwargs ): """ Logic that a Wind Turbine Installation Vessel (WTIV) uses during a single turbine installation process. Parameters ---------- vessel : vessels.Vessel Vessel object that represents the WTIV. distance : int | float Distance between port and site (km). component_list : dict Turbine components to retrieve and install. number : int Total turbine component sets to install. """ reequip_time = vessel.crane.reequip(**kwargs) component_list = [ *np.repeat("TowerSection", tower_sections), "Nacelle", *np.repeat("Blade", num_blades), ] n = 0 while n < turbines: if vessel.at_port: try: # Get turbine components yield get_list_of_items_from_port( vessel, port, component_list, **kwargs ) except ItemNotFound: # If no items are at port and vessel.storage.items is empty, # the job is done if not vessel.storage.items: vessel.submit_debug_log( message="Item not found. Shutting down." ) break # Transit to site vessel.update_trip_data() vessel.at_port = False yield vessel.transit(distance) vessel.at_site = True if vessel.at_site: if vessel.storage.items: yield prep_for_site_operations(vessel, **kwargs) for i in range(tower_sections): # Get tower section section = yield vessel.get_item_from_storage( "TowerSection", **kwargs ) # Install tower section height = section.length * (i + 1) yield install_tower_section( vessel, section, height, **kwargs ) # Get turbine nacelle nacelle = yield vessel.get_item_from_storage( "Nacelle", **kwargs ) # Install nacelle yield vessel.task("Reequip", reequip_time) yield install_nacelle(vessel, nacelle, **kwargs) # Install turbine blades yield vessel.task("Reequip", reequip_time) for _ in range(num_blades): blade = yield vessel.get_item_from_storage( "Blade", **kwargs ) yield install_turbine_blade(vessel, blade, **kwargs) # Jack-down site_depth = kwargs.get("site_depth", None) extension = kwargs.get("extension", site_depth + 10) jackdown_time = vessel.jacksys.jacking_time( extension, site_depth ) yield vessel.task( "Jackdown", jackdown_time, constraints=vessel.transit_limits, ) vessel.submit_debug_log(progress="Turbine") n += 1 else: # Transit to port vessel.at_site = False yield vessel.transit(distance) vessel.at_port = True vessel.submit_debug_log(message="Turbine installation complete!")