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