def install_transition_piece(vessel, tp, **kwargs): """ Process logic for installing a transition piece on a monopile at site. Subprocesses: - Reequip crane, ``vessel.crane.reequip()`` - Lower transition piece, ``tasks.lower_transition_piece()`` - Install connection, see below. - Jackdown, ``vessel.jacksys.jacking_time()`` (if a jackup vessel) The transition piece can either be installed with a bolted or a grouted connection. By default, ORBIT uses the bolted connection with the following task: - Bolt transition piece, ``tasks.bolt_transition_piece()`` ORBIT can also be configured to model a grouted connection by passing in `tp_connection_type='grouted'` as a `kwarg`. This process uses the following tasks: - Pump grout, ``tasks.pump_transition_piece_grout()`` - Cure grout, ``tasks.cure_transition_piece_grout()`` Parameters ---------- env : Environment vessel : Vessel tp : dict """ connection = kwargs.get("tp_connection_type", "bolted") reequip_time = vessel.crane.reequip(**kwargs) yield vessel.task( "Crane Reequip", reequip_time, constraints=vessel.transit_limits, **kwargs, ) yield lower_transition_piece(vessel, **kwargs) if connection == "bolted": yield bolt_transition_piece(vessel, **kwargs) elif connection == "grouted": yield pump_transition_piece_grout(vessel, **kwargs) yield cure_transition_piece_grout(vessel) else: raise Exception(f"Transition piece connection type '{connection}'" "not recognized. Must be 'bolted' or 'grouted'.") yield jackdown_if_required(vessel, **kwargs)
def install_topside(vessel, topside, **kwargs): """ Substation topside installation process. Subprocesses: - Crane reequip - Lift topside - Attach topside to substructure - Pump grout - Cure grout Parameters ---------- env : Environment vessel : Vessel topsdie : dict """ connection = kwargs.get("topside_connection_type", "bolted") reequip_time = vessel.crane.reequip(**kwargs) yield vessel.task_wrapper( "Crane Reequip", reequip_time, constraints=vessel.transit_limits, **kwargs, ) yield lift_topside(vessel) yield attach_topside(vessel) if connection == "bolted": yield bolt_transition_piece(vessel, **kwargs) elif connection == "grouted": yield pump_transition_piece_grout(vessel, **kwargs) yield cure_transition_piece_grout(vessel, **kwargs) else: raise Exception(f"Transition piece connection type '{connection}'" "not recognized. Must be 'bolted' or 'grouted'.") yield jackdown_if_required(vessel, **kwargs)
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, constraints=wtiv.transit_limits) yield install_nacelle(wtiv, nacelle, **kwargs) # Install turbine blades yield wtiv.task("Reequip", reequip_time, constraints=wtiv.transit_limits) 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) yield jackdown_if_required(wtiv, **kwargs) 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, constraints=vessel.transit_limits) yield install_nacelle(vessel, nacelle, **kwargs) # Install turbine blades yield vessel.task("Reequip", reequip_time, constraints=vessel.transit_limits) for _ in range(num_blades): blade = yield vessel.get_item_from_storage( "Blade", **kwargs) yield install_turbine_blade(vessel, blade, **kwargs) yield jackdown_if_required(vessel, **kwargs) 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!")