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
Noneor 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.
- _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.
- create_layout_df()[source]#
Creates a Pandas DataFrame layout.
- Return type:
DataFrame- Returns:
pd.DataFrame -- Wind farm layout compatible with the
CustomArrayDesignLayoutor 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
folderis 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
folderis not one of "cables" or "plant".
- _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.
- 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>#