Structuring data and generating caverns#

Functions to structure data and generate caverns with constraints.

References#

h2ss.functions.net_to_gross(dat_xr, slope=0.0009251759226446605, intercept=0.2616769604617021, max_ntg=0.75)[source]#

Estimate the net-to-gross for a given halite thickness.

Parameters#

dat_xrxarray.Dataset

Xarray dataset of the halite data

slopefloat

Slope of the net-to-gross linear regression

interceptfloat

y-intercept of the net-to-gross linear regression

max_ntgfloat

Maximum allowed value for the net-to-gross

Returns#

xarray.Dataset

Xarray dataset of the halite with net-to-gross information

h2ss.functions.zones_of_interest(dat_xr, constraints, roof_thickness=80, floor_thickness=10, max_ntg=0.75)[source]#

Generate zones of interest by applying thickness and depth constraints.

Parameters#

dat_xrxarray.Dataset

Xarray dataset of the halite data

constraintsdict[str, float]

Dictionary containing the following: "net_height": net cavern height [m]; "min_depth": minimum cavern depth [m]; "max_depth": maximum cavern depth [m]

roof_thicknessfloat

Salt roof thickness [m]

floor_thicknessfloat

Minimum salt floor thickness [m]

max_ntgfloat

Maximum allowed value for the net-to-gross

Returns#

tuple[geopandas.GeoDataFrame, xarray.Dataset]

A (multi)polygon geodataframe of the zones of interest and an Xarray dataset of the zones of interest

h2ss.functions.generate_caverns_square_grid(dat_extent, zones_df, diameter=85, separation=340)[source]#

Generate salt caverns using a regular square grid.

Parameters#

dat_extentgeopandas.GeoSeries

Extent of the data

zones_dfgeopandas.GeoDataFrame

Zones of interest

diameterfloat

Diameter of the cavern [m]

separationfloat

Cavern separation distance [m]

Returns#

geopandas.GeoDataFrame

A polygon geodataframe of potential caverns in the zone of interest

Notes#

Gridding method based on [1].

h2ss.functions.hexgrid_init(dat_extent, separation)[source]#

Initialise variables for generate_caverns_hexagonal_grid.

Parameters#

dat_extentgeopandas.GeoSeries

Extent of the data

separationfloat

Cavern separation distance [m]

Returns#

tuple[float, list[int], list[int]]

a, cols, and rows

h2ss.functions.generate_caverns_hexagonal_grid(dat_extent, zones_df, diameter=85, separation=340)[source]#

Generate caverns in a regular hexagonal grid.

Parameters#

dat_extentgeopandas.GeoSeries

Extent of the data

zones_dfgeopandas.GeoDataFrame

Zones of interest

diameterfloat

Diameter of the cavern [m]

separationfloat

Cavern separation distance [m]

Returns#

geopandas.GeoDataFrame

A polygon geodataframe of potential caverns

Notes#

The close-packed hexagonal grid configuration was proposed by [2]; this configuration provides around 15% more caverns compared to a square grid configuration. Hexagonal gridding method based on [3].

h2ss.functions.cavern_dataframe(dat_zone, cavern_df, depths, roof_thickness=80)[source]#

Merge halite data for each cavern location and create a dataframe.

Parameters#

dat_zonexarray.Dataset

Xarray dataset for the zone of interest

cavern_dfgeopandas.GeoDataFrame

Geodataframe of caverns within the zone of interest

depthsdict[str, float]

Dictionary of cavern top depth ranges [m] for labelling: "min": minimum depth; "min_opt": minimum optimal depth; "max_opt": maximum optimal depth; "max": maximum depth

roof_thicknessfloat

Salt roof thickness [m]

Returns#

geopandas.GeoDataFrame

The cavern geodataframe with halite height and depth data for only the thickest halite layer at each given point

h2ss.functions.label_caverns(cavern_df, depths, heights=None, roof_thickness=80, floor_thickness=10)[source]#

Label cavern dataframe by height and depth.

Parameters#

cavern_dfgeopandas.GeoDataFrame

Dataframe of potential caverns

depthsdict[str, float]

Dictionary of cavern top depth ranges [m] for labelling: "min": minimum depth; "min_opt": minimum optimal depth; "max_opt": maximum optimal depth; "max": maximum depth

heightslist[float] or None

List of fixed caverns heights [m] for labelling; if None, the actual height is used

roof_thicknessfloat

Salt roof thickness [m]

floor_thicknessfloat

Minimum salt floor thickness [m]

Returns#

geopandas.GeoDataFrame

A dataframe of potential caverns labelled by cavern height and top depth ranges

h2ss.functions.constraint_halite_edge(dat_xr, buffer=255)[source]#

The edge of each halite member as a constraint.

Parameters#

dat_xrxarray.Dataset

Xarray dataset of the halite data

bufferfloat

Buffer [m]

Returns#

dict[str, geopandas.GeoDataFrame]

Dictionary of GeoPandas geodataframes of the halite edge constraint for each halite member

Notes#

Set the buffer to 3 times the cavern diameter, i.e. the pillar width.

h2ss.functions.constraint_exploration_well(data_path, buffer=500)[source]#

Read exploration well data and generate constraint.

Parameters#

data_pathstr

Path to the Zip file

bufferfloat

Buffer [m]

Returns#

tuple[geopandas.GeoDataFrame, geopandas.GeoDataFrame]

Geodataframes of the dataset and buffer

Notes#

500 m buffer - suggested in the draft OREDP II p. 108 [4].

h2ss.functions.constraint_wind_farm(data_path)[source]#

Read data for wind farms.

Parameters#

data_pathstr

Path to the Zip file

dat_extentgeopandas.GeoSeries

Extent of the data

Returns#

geopandas.GeoDataFrame

Geodataframe of the dataset

Notes#

The shapes are used as is without a buffer - suggested for renewable energy test site areas in the draft OREDP II p. 109 [4].

h2ss.functions.constraint_shipping_routes(data_path, dat_extent, buffer=1852)[source]#

Read frequent shipping route data and generate constraint.

Parameters#

data_pathstr

Path to the Zip file

dat_extentgeopandas.GeoSeries

Extent of the data

bufferfloat

Buffer [m]

Returns#

tuple[geopandas.GeoDataFrame, geopandas.GeoDataFrame]

Geodataframes of the dataset and buffer

Notes#

1 NM (nautical mile) buffer - suggested in the draft OREDP II p. 108 [4]. 1 NM is equivalent to 1,852 m [5].

h2ss.functions.constraint_shipwrecks(data_path, dat_extent, buffer=100)[source]#

Read shipwreck data and generate constraint.

Parameters#

data_pathstr

Path to the Zip file

dat_extentgeopandas.GeoSeries

Extent of the data

bufferfloat

Buffer [m]

Returns#

tuple[geopandas.GeoDataFrame, geopandas.GeoDataFrame]

Geodataframes of the dataset and buffer

Notes#

Archaeological Exclusion Zones recommendation - 100 m buffer [6].

h2ss.functions.constraint_subsea_cables(data_path, dat_extent, buffer=750)[source]#

Read subsea cable data and generate constraint.

Parameters#

data_pathstr

Path to the GPKG file

dat_extentgeopandas.GeoSeries

Extent of the data

bufferfloat

Buffer [m]

Returns#

tuple[geopandas.GeoDataFrame, geopandas.GeoDataFrame]

Geodataframes of the dataset and buffer

Notes#

750 m buffer - suggested in the draft OREDP II p. 109-111 [4].

h2ss.functions.exclude_constraint(cavern_df, cavern_all, exclusions, key)[source]#

Exclude constraint by their dictionary key.

Parameters#

cavern_dfgeopandas.GeoDataFrame

Dataframe of available caverns

cavern_allgeopandas.GeoDataFrame

Dataframe of all caverns, i.e. available and excluded

exclusionsdict[str, geopandas.GeoDataFrame]

Dictionary of exclusions data

keystr

Key for the constraint in the dictionary; one of the following: "shipping": frequent shipping routes; "cables": subsea cables; "wind_farms": offshore wind farms; "wells": exporation wells; "shipwrecks": shipwrecks

Returns#

geopandas.GeoDataFrame

Dataframe of available caverns

h2ss.functions.generate_caverns_with_constraints(cavern_df, exclusions)[source]#

Add constraints to cavern configuration.

Parameters#

cavern_dfgeopandas.GeoDataFrame

Dataframe of available caverns

exclusionsdict[str, geopandas.GeoDataFrame]

Dictionary of exclusions data; "edge" must be present in the dictionary, but if any other of the following keys do not exist in the dictionary, the exclusion will be skipped: "edge": halite edge, dict[str, geopandas.GeoDataFrame]; "shipping": frequent shipping routes; "cables": subsea cables; "wind_farms": offshore wind farms; "wells": exporation wells; "shipwrecks": shipwrecks

Returns#

tuple[geopandas.GeoDataFrame, geopandas.GeoDataFrame]

Dataframe of available and excluded caverns

h2ss.functions.read_weibull_data(data_path_weibull, data_path_wind_farms)[source]#

Extract mean, max, and min Weibull parameters of wind speeds.

Parameters#

data_path_weibullstr

Path to the Weibull parameter data Zip file

data_path_wind_farmsstr

Path to the wind farm data Zip file

Returns#

pandas.DataFrame

Dataframe of k and C values for each wind farm

Notes#

Data extracted for each wind farm in the area of interest, i.e. Kish Basin: Codling, Dublin Array, and North Irish Sea Array.