Array System Design

Contents

Array System Design#

For detailed methodology, please see Array System Design.

class ORBIT.phases.design.ArraySystemDesign(config, **kwargs)[source]#

The design phase for an array cabling system.

system#

A Plant object for wind farm specifications.

Type:

Plant

cables#

A dictionary of Cable objects sorted from smallest to largest.

Type:

collections.OrderedDict

full_string#

A list of Cable.name that represents the longest (in turbine connections) possible string.

Type:

list

partial_string#

A list of Cable.name that represents the leftover turbines that could not create another full_string to complete the layout.

Type:

list

num_turbines_full_string#

Number of turbines on a full_string.

Type:

int

num_turbines_partial_string#

Number of turbines on a partial_string.

Type:

int

num_full_strings#

Number of full strings required to connect the wind farm.

Type:

int

num_partial_strings#

Number of partial strings required to connect the wind farm.

Type:

int

num_strings#

Total number of strings in the system.

Type:

int

turbines_x#

The relative x-coordinates of every turbine.

Type:

np.ndarray, [num_strings, num_turbines_full_string]

turbines_y#

The relative y-coordinates of every turbines.

Type:

np.ndarray, [num_strings, num_turbines_full_string]

oss_x#

The relative x-coordinates for the OSS.

Type:

float

oss_y#

The relative y-coordinates for the OSS.

Type:

float

coordinates#

The relative (x, y) coordinates for the entire wind farm with the first column representing the OSS.

Type:

np.ndarray, [num_strings, num_turbines_full_string + 1, 2]

sections_distances#

The Euclidean distance between any two points in a string extending outward from the OSS.

Type:

np.ndarray, [num_strings, num_turbines_full_string]

sections_cable_lengths#

sections_distances + 2 * system.site_depth to account for the water depth at each turbine.

Type:

np.ndarray, [num_strings, num_turbines_full_string]

sections_cables#

The type of cable being used to connect turbines in a string. All values are either None or Cable.name.

Type:

np.ndarray, [num_strings, num_turbines_full_string]

expected_config = {'array_system_design': {'average_exclusion_percent': 'float (optional)', 'cables': 'list | str', 'floating_cable_depth': 'm (optional, default: water depth)', 'touchdown_distance': 'm (optional, default: 0)'}, 'plant': {'layout': 'str', 'num_turbines': 'int', 'row_spacing': 'rotor diameters', 'substation_distance': 'km', 'turbine_distance': 'km (optional)', 'turbine_spacing': 'rotor diameters'}, 'site': {'depth': 'm'}, 'turbine': {'rotor_diameter': 'm', 'turbine_rating': 'MW'}}#
output_config = {'array_system': {'cables': 'dict', 'system_cost': 'USD'}}#
property total_length#

Returns total array system length.

property total_cable_cost#

Returns total array system cable cost.

property detailed_output#

Returns array system design outputs.

_compute_euclidean_distance()[source]#

Calculates the distance between two cartesian coordinate points.

Returns:

np.ndarray -- The Euclidean distance between subsequent pairs of turbines in a string for all strings in the windfarm.

_compute_maximum_turbines_per_cable()[source]#

Calculates the maximum turbines that each cable can support and adds it to the Cable object.

_compute_string(max_turbines_per_string)[source]#

Calculates the maximum number of turbines that each cable type can support and builds a string (as a list) of cable types that is of length of max_turbines_per_string or the maximum number of turbines that the largest cable can support, whichever is lower.

Parameters:

max_turbines_per_string (int) -- The maximum number of turbines that can be supported on a single string given the cable(s) properties.

Returns:

cable_layout (list) -- A list of cables required to create an the maximum length string possible given cables and max_turbines_per_string. The order of the cabling is from largest to smallest cable type with the Cable.name as the list entry.

create_strings()[source]#

Calculates the required full and partial string design.

Note

For custom layouts this is to provide guidance on the number of strings.

_design_grid_layout()[source]#

Makes the coordinates of a default grid layout.

_design_ring_layout()[source]#

Creates the coordinates of a default ring layout.

_create_wind_farm_layout()[source]#

Creates a list of substation-to-string distances based off the layout of the wind farm.

_create_cable_section_lengths()[source]#

For each cable compute the number of section lengths required to complete the array cabling.

run()[source]#

Runs all the functions to create an array sytem.

create_layout_df()[source]#

Creates a Pandas DataFrame layout.

Return type:

DataFrame

Returns:

pd.DataFrame -- Wind farm layout compatible with the CustomArrayDesignLayout or for use with external models.

save_layout(save_name, return_df=False, folder='cables')[source]#

Outputs a csv of the substation and turbine positional and cable related components.

Parameters:
  • save_name (str) -- The name of the file without an extension to be saved to <library_path>/cables/<save_name>.csv.

  • return_df (bool, optional) -- If true, returns layout_df, a pandas.DataFrame of the cabling layout, by default False.

  • folder (str, optional) -- If "cables", then the layout will saved to the "cables" folder, and if "plant", then the layout will be saved to the "project/plant" folder.

Returns:

pd.DataFrame -- The DataFrame with the layout data.

Raises:

ValueError -- Raised if folder is not one of "cables" or "plant".

_plot_oss(ax)[source]#

Adds the offshore substation(s) to the plot.

Colors are a selection of the colorblind pallette from Bokeh: bokeh/bokeh

Parameters:

ax (matplotlib.axes) -- Axis object to add the substation(s) to.

plot_array_system(show=True, save_path_name=None, return_fig=False)[source]#

Plot the array cabling system.

Parameters:
  • show (bool, default: True) -- If True the plot will be output inline or to screen.

  • save_path_name (str, default: None) -- The <path_to_file>/<file_name> of where to save the created plot. If None then the plot will not be saved.

  • return_fig (bool, default: False) -- If true, the figure (fig) and axes (ax) objects will be returned.

Returns:

  • fig (matplotlib.pyplot.figure) -- The matplotlib figure object. This will contain the overarching figure settings, and can be manipulated to change dimensions, resolotion, and etc.

  • ax (matplotlib.pyplot.axes) -- The matplotlib axes object. This will contain the actual plot settings, and can be manipulated to add annotations, or other elements.

_abc_impl = <_abc._abc_data object>#
class ORBIT.phases.design.CustomArraySystemDesign(config, distance=False, **kwargs)[source]#

Custom array system design phase.

Parameters:

ArraySystemDesign (ArraySystemDesign) -- Array system design phase.

Returns:

[type] -- [description]

Raises:
  • ValueError -- [description]

  • ValueError -- [description]

  • ValueError -- [description]

expected_config = {'array_system_design': {'average_exclusion_percent': 'float (optional)', 'cables': 'list | str', 'distance': 'bool (optional)', 'location_data': 'str'}, 'plant': {'layout': 'str | pd.DataFrame', 'num_turbines': 'int'}, 'site': {'depth': 'str'}, 'turbine': {'turbine_rating': 'int | float'}}#
COLUMNS = ['id', 'substation_id', 'name', 'latitude', 'longitude', 'string', 'order', 'cable_length', 'bury_speed']#
REQUIRED = ['id', 'substation_id', 'substation_name', 'substation_latitude', 'substation_longitude', 'turbine_name', 'turbine_latitude', 'turbine_longitude', 'string', 'order']#
OPTIONAL = ['cable_length', 'bury_speed']#
create_project_csv(save_name, folder='cables')[source]#

Creates a base CSV in <library_path>/cables/.

Parameters:

save_name ([type]) -- [description]

Raises:

ValueError -- Raised if folder is not one of "cables" or "plant".

_format_windfarm_data()[source]#
_initialize_custom_data()[source]#
_check_optional_input()[source]#

Ensures that the optionally input parameters have valid data and were all filled out.

_compute_haversine_distance()[source]#

Computes the haversine distance between two subsequent pairs in a string for all strings.

Returns:

np.ndarray -- Haversine distance between all coordinate pairs in a string

_create_windfarm_layout()[source]#
Creates the custom windfarm layout that includes
windfarm_x: x-coordinates with a corresponding OSS in the first

column. Shape: n_strings x (num_turbines_full_string + 1).

windfarm_y: y-coordinates with a corresponding OSS in the first

column. Shape: n_strings x (num_turbines_full_string + 1).

sections_cables_lenghts: custom cable lengths provided as an

optional column in the location_data. Shape: n_strings x num_turbines_full_string.

sections_bury_speeds: custom cable bury speeds provided as an

optional column in the location_data. Shape: n_strings x num_turbines_full_string.

run()[source]#

Runs the design model.

property cable_lengths_by_type_speed#

Creates a dictionary of tuples with section lengths and cable burying speeds if non-zero entries were provided, otherwise this is equal to cable_lengths_by_type.

Returns:

dict -- A dictionary of the section lengths and burying speeds required for each type of cable to fully connect the array cabling system. E.g.: {Cable.name: [(float, float)]}

create_layout_df()[source]#

Creates a Pandas DataFrame layout.

Return type:

DataFrame

Returns:

pd.DataFrame -- The wind farm layout returned back in its original form.

_abc_impl = <_abc._abc_data object>#