Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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!")
Exemple #4
0
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!")