From 5f877459900f468b27b9d65cb76c5f42f556dfa2 Mon Sep 17 00:00:00 2001 From: lmezilis Date: Thu, 16 Oct 2025 12:52:41 +0200 Subject: [PATCH 01/29] atlite-mrel first commit --- .gitignore | 1 + atlite/convert.py | 64 + atlite/cutout.py | 3 + atlite/datasets/__init__.py | 10 +- atlite/datasets/cerra.py | 69 + atlite/datasets/era5.py | 44 +- atlite/datasets/mrel_wave.py | 120 ++ atlite/resource.py | 20 + .../wecgenerator/Farshore_750kW.yaml | 1115 ++++++++++++++++ .../wecgenerator/Nearshore_400kW.yaml | 1175 +++++++++++++++++ .../resources/wecgenerator/Shallow_290kW.yaml | 1115 ++++++++++++++++ 11 files changed, 3733 insertions(+), 3 deletions(-) create mode 100644 atlite/datasets/cerra.py create mode 100644 atlite/datasets/mrel_wave.py create mode 100644 atlite/resources/wecgenerator/Farshore_750kW.yaml create mode 100644 atlite/resources/wecgenerator/Nearshore_400kW.yaml create mode 100644 atlite/resources/wecgenerator/Shallow_290kW.yaml diff --git a/.gitignore b/.gitignore index 1e8e66cc..53111aef 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ paper # Ignore IDE project files .idea/ .vscode +.vs diff --git a/atlite/convert.py b/atlite/convert.py index 96a2974e..f23aef21 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -38,6 +38,7 @@ get_solarpanelconfig, get_windturbineconfig, windturbine_smooth, + get_wecgeneratorconfig, ) logger = logging.getLogger(__name__) @@ -653,6 +654,69 @@ def wind( ) +# #wave +def convert_wave(ds, wec_type): + + power_matrix = pd.DataFrame.from_dict(wec_type['Power_Matrix']) + + max_pow = power_matrix.to_numpy().max() + + Hs = np.ceil(ds['wave_height']*2)/2 + Tp = np.ceil(ds['wave_period']*2)/2 + + Hs_list = Hs.to_numpy().flatten().tolist() + Tp_list = Tp.to_numpy().flatten().tolist() + + # empty list for result + power_list = [] + cases = len(Hs_list) + count = 0 + + # for loop to loop through Hs and Tp pairs and get the power output and capacity factor + for Hs_ind, Tp_ind in zip(Hs_list, Tp_list): + if count % 1000000 == 0: + print('Case {} of {}: {} %'.format(count, cases, count/cases *100)) + + if np.isnan(Hs_ind) or np.isnan(Tp_ind): + power_list.append(0) + elif Hs_ind > 10 or Tp_ind > 18: + power_list.append(0) + else: + generated_power = power_matrix.loc[Hs_ind, Tp_ind] + power_list.append(generated_power/max_pow) + count += 1 + + # results list to numpy array + power_list_np = np.array(power_list) + + power_list_np = power_list_np.reshape(Hs.shape) + + da = xr.DataArray(power_list_np, + coords = Hs.coords, + dims = Hs.dims, + name = 'Power generated') + da.attrs["units"] = "kWh/kWp" + da = da.rename("specific generation") + da = da.fillna(0) + + return da + +def wave(cutout, wec_type, **params): + """ + Generate wave generation time series + + evaluates the significant wave height (Hs) and wave peak period (Tp) + and assesses the power output with the chosen power matrix for each time step and grid cell + """ + if isinstance(wec_type, (str, Path)): + wec_type = get_wecgeneratorconfig(wec_type) + + return cutout.convert_and_aggregate( + convert_func = convert_wave, wec_type = wec_type , **params + ) + + + # irradiation def convert_irradiation( ds, diff --git a/atlite/cutout.py b/atlite/cutout.py index 5dceec1f..52559dca 100644 --- a/atlite/cutout.py +++ b/atlite/cutout.py @@ -45,6 +45,7 @@ solar_thermal, temperature, wind, + wave, ) from atlite.data import available_features, cutout_prepare from atlite.datasets import modules as datamodules @@ -661,6 +662,8 @@ def layout_from_capacity_list(self, data, col="Capacity"): wind = wind + wave = wave + irradiation = irradiation pv = pv diff --git a/atlite/datasets/__init__.py b/atlite/datasets/__init__.py index 045c59d8..852f7e50 100644 --- a/atlite/datasets/__init__.py +++ b/atlite/datasets/__init__.py @@ -6,6 +6,12 @@ atlite datasets. """ -from atlite.datasets import era5, gebco, sarah +from atlite.datasets import era5, gebco, sarah, cerra, mrel_wave -modules = {"era5": era5, "sarah": sarah, "gebco": gebco} +modules = { + "era5": era5, + "sarah": sarah, + "mrel_wave": mrel_wave, + "cerra": cerra, + "gebco": gebco, + } diff --git a/atlite/datasets/cerra.py b/atlite/datasets/cerra.py new file mode 100644 index 00000000..278224df --- /dev/null +++ b/atlite/datasets/cerra.py @@ -0,0 +1,69 @@ + +""" +In order to create a CERRA cutout, the data must be manually downloaded from the Climate Data Store. +The variable used is "10m wind speed" and there is not a direction component in it. +This 10m wind speed was transformed into a 100m wind speed in order to follow the rest of atlite's processes. +""" + +import xarray as xr +import numpy as np + +import logging +from rasterio.warp import Resampling +from atlite.gis import regrid + +logger = logging.getLogger(__name__) + +crs = 4326 +dx = 0.05 +dy = 0.05 + +features = { + "wind": ["wnd100m", "roughness"] + } + +def as_slice(bounds, pad=True): + """ + Convert coordinate bounds to slice and pad by 0.01. + """ + if not isinstance(bounds, slice): + bounds = bounds + (-0.01, 0.01) + bounds = slice(*bounds) + return bounds + +def get_data(cutout, feature, tmpdir, **creation_parameters): + """ + Retrieve data from a local CERRA dataset and process it. + """ + coords = cutout.coords + + if "data_path" not in creation_parameters: + logger.error('Argument "data_path" not defined') + raise ValueError('Argument "data_path" not defined') + path = creation_parameters["data_path"] + + ds = xr.open_dataset(path) + + ds = ds.sel(x=as_slice(cutout.extent[:2]), y=as_slice(cutout.extent[2:])) + ds = ds.assign_coords( + x=ds.x.astype(float).round(4), y=ds.y.astype(float).round(4) + ) + + if (cutout.dx != dx) or (cutout.dy != dy): + ds = regrid(ds, coords["x"], coords["y"], resampling=Resampling.average) + + if 'sr' in ds: + ds = ds.rename({"sr": "roughness"}) + + logger.info("Calculating 100 metre wind speed") + if 'si10' in ds and 'roughness' in ds: + ds["wnd100m"] = (ds["si10"] * (np.log(100 / ds["roughness"]) / np.log(10 / ds["roughness"]))).assign_attrs( + units="m s**-1", long_name="100 metre wind speed") + ds = ds.drop_vars("si10") + + ds = ds.assign_coords(x=ds.coords["x"], y=ds.coords["y"]) + + logger.info("Resampling to 1H.") + ds = ds.resample(time='1h').interpolate("linear") + + return ds diff --git a/atlite/datasets/era5.py b/atlite/datasets/era5.py index 2b5d547c..bb189545 100644 --- a/atlite/datasets/era5.py +++ b/atlite/datasets/era5.py @@ -44,7 +44,7 @@ def nullcontext(): features = { "height": ["height"], - "wind": ["wnd100m", "wnd_shear_exp", "wnd_azimuth", "roughness"], + "wind": ["wnd100m", "wnd_azimuth", "roughness"], "influx": [ "influx_toa", "influx_direct", @@ -55,6 +55,8 @@ def nullcontext(): ], "temperature": ["temperature", "soil temperature", "dewpoint temperature"], "runoff": ["runoff"], + "wave_height" : ["wave_height"], + "wave_period" : ["wave_period"], } static_features = {"height"} @@ -243,6 +245,46 @@ def sanitize_runoff(ds): ds["runoff"] = ds["runoff"].clip(min=0.0) return ds +def get_data_wave_height(retrieval_params): + """ + Get wave height data for given retrieval parameters. + """ + ds = retrieve_data( + variable=[ + "significant_height_of_combined_wind_waves_and_swell", + ], + **retrieval_params, + ) + ds = _rename_and_clean_coords(ds) + ds = ds.rename({"swh": "wave_height"}) + + return ds + +def sanitize_wave_height(ds): + """ + Sanitize retrieved wave height data. + """ + ds["wave_height"] = ds["wave_height"].clip(min=0.0) + return ds + +def get_data_wave_period(retrieval_params): + """ + Get wave period data for given retrieval parameters. + """ + ds = retrieve_data( + variable=["peak_wave_period"],**retrieval_params,) + + ds = _rename_and_clean_coords(ds) + ds = ds.rename({"pp1d": "wave_period"}) + + return ds + +def sanitize_wave_period(ds): + """ + Sanitize retrieved wave period data. + """ + ds["wave_period"] = ds["wave_period"].clip(min=0.0) + return ds def get_data_height(retrieval_params): """ diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py new file mode 100644 index 00000000..f6208232 --- /dev/null +++ b/atlite/datasets/mrel_wave.py @@ -0,0 +1,120 @@ + + +import xarray as xr +import numpy as np +import logging +from rasterio.warp import Resampling +from atlite.gis import regrid + +logger = logging.getLogger(__name__) + +crs = 4326 +dx = 0.0625 +dy = 0.04 + +features = { + "wave_height" : ["wave_height"], + "wave_period" : ["wave_period"] +} + +def _rename_and_clean_coords(ds): + """ + Rename 'longitude' and 'latitude' columns to 'x' and 'y' and fix roundings. + + Optionally (add_lon_lat, default:True) preserves latitude and + longitude columns as 'lat' and 'lon'. + """ + ds = ds.rename({"longitude": "x", "latitude": "y"}) + + ds = ds.assign_coords( + x=np.round(ds.x.astype(float), 5), y=np.round(ds.y.astype(float), 5) + ) + + + return ds + + +def get_data_wave_height(ds): + + ds = ds.rename({"hs": "wave_height"}) + ds["wave_height"] = ds["wave_height"].clip(min=0.0) + + return ds + +def get_data_wave_period(ds): + + ds = ds.rename({"tp": "wave_period"}) + # ds["wave_period"] = (1 / ds["wave_period"]) + ds["wave_period"] = ds["wave_period"].clip(min=0.0) + + return ds + +def as_slice(bounds, pad=True): + """ + Convert coordinate bounds to slice and pad by 0.01. + """ + if not isinstance(bounds, slice): + bounds = bounds + (-0.01, 0.01) + bounds = slice(*bounds) + return bounds + +def get_data(cutout, feature, tmpdir, **creation_parameters): + + coords = cutout.coords + + if "data_path" not in creation_parameters: + logger.error('Argument "data_path" not defined') + raise ValueError('Argument "data_path" not defined') + path = creation_parameters["data_path"] + + ds = xr.open_dataset(path) + + if 'longitude' in ds and 'latitude' in ds: + ds = ds.rename({"longitude": "x", "latitude": "y"}) + + ds = ds.sel(x=as_slice(cutout.extent[:2]), y=as_slice(cutout.extent[2:])) + ds = ds.assign_coords( + x=ds.x.astype(float).round(4), y=ds.y.astype(float).round(4) + ) + + if (cutout.dx != dx) or (cutout.dy != dy): + ds = regrid(ds, coords["x"], coords["y"], resampling=Resampling.average) + + + # coords = cutout.coords + + # if "data_path" not in creation_parameters: + # logger.error('Argument "data_path" not defined') + # return None + + # path = creation_parameters["data_path"] + + # logger.info(f"Opening dataset from {path}") + # ds = xr.open_dataset(path, chunks=cutout.chunks) + # ds = _rename_and_clean_coords(ds) + + variables = ds.data_vars + + + for var in variables: + if var not in ['hs', 'tp']: + ds = ds.drop_vars(var) + + + + # ds = ds.sel(x=as_slice(cutout.extent[:2]), y=as_slice(cutout.extent[2:])) + + # if (cutout.dx != dx) or (cutout.dy != dy): + # ds = regrid(ds, coords["x"], coords["y"], resampling=Resampling.average) + + logger.info("Obtaining wave data.") + + ds = get_data_wave_height(ds) + ds = get_data_wave_period(ds) + + # ds = ds.assign_coords(x=ds.coords["x"], y=ds.coords["y"]) + + return ds + + + diff --git a/atlite/resource.py b/atlite/resource.py index 22c5d24f..5eb753ea 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -32,6 +32,7 @@ WINDTURBINE_DIRECTORY = RESOURCE_DIRECTORY / "windturbine" SOLARPANEL_DIRECTORY = RESOURCE_DIRECTORY / "solarpanel" CSPINSTALLATION_DIRECTORY = RESOURCE_DIRECTORY / "cspinstallation" +WECGENERATOR_DIRECTORY = RESOURCE_DIRECTORY / "wecgenerator" if TYPE_CHECKING: from typing import TypedDict @@ -113,6 +114,24 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) +def get_wecgeneratorconfig(wec_type): + """ + Load the wec wec_type power matrix + the configuration can either be one from local storage then 'turbine' is + considered part of the file base name '.yaml' + """ + assert isinstance(wec_type, (str | Path)) + + if isinstance(wec_type, str): + wec_type_path = wecgenerators[wec_type.replace(".yaml", "")] + + elif isinstance(wec_type, Path): + wec_type_path = wec_type + + with open(wec_type_path) as f: + conf = yaml.safe_load(f) + + return conf def get_solarpanelconfig(panel): """ @@ -517,6 +536,7 @@ def get_oedb_windturbineconfig( # Global caches _oedb_turbines = None windturbines = arrowdict({p.stem: p for p in WINDTURBINE_DIRECTORY.glob("*.yaml")}) +wecgenerators = arrowdict({p.stem: p for p in WECGENERATOR_DIRECTORY.glob("*.yaml")}) solarpanels = arrowdict({p.stem: p for p in SOLARPANEL_DIRECTORY.glob("*.yaml")}) cspinstallations = arrowdict( {p.stem: p for p in CSPINSTALLATION_DIRECTORY.glob("*.yaml")} diff --git a/atlite/resources/wecgenerator/Farshore_750kW.yaml b/atlite/resources/wecgenerator/Farshore_750kW.yaml new file mode 100644 index 00000000..e728593d --- /dev/null +++ b/atlite/resources/wecgenerator/Farshore_750kW.yaml @@ -0,0 +1,1115 @@ +# WEC generator power matrix + +name: Farshore + +Power_Matrix: + 0.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 0.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 1.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 1.5: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 2.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 2.5: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 3.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 3.5: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 4.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 4.5: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 5.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 32 + 2.0: 57 + 2.5: 89 + 3.0: 129 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 5.5: + 0.0: 0 + 0.5: 0 + 1.0: 22 + 1.5: 50 + 2.0: 88 + 2.5: 138 + 3.0: 198 + 3.5: 270 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 6.0: + 0.0: 0 + 0.5: 0 + 1.0: 29 + 1.5: 65 + 2.0: 115 + 2.5: 180 + 3.0: 260 + 3.5: 354 + 4.0: 462 + 4.5: 544 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 6.5: + 0.0: 0 + 0.5: 0 + 1.0: 34 + 1.5: 76 + 2.0: 136 + 2.5: 212 + 3.0: 305 + 3.5: 415 + 4.0: 502 + 4.5: 635 + 5.0: 739 + 5.5: 750 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 7.0: + 0.0: 0 + 0.5: 0 + 1.0: 37 + 1.5: 83 + 2.0: 148 + 2.5: 231 + 3.0: 332 + 3.5: 438 + 4.0: 540 + 4.5: 642 + 5.0: 726 + 5.5: 750 + 6.0: 750 + 6.5: 750 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 7.5: + 0.0: 0 + 0.5: 0 + 1.0: 38 + 1.5: 86 + 2.0: 153 + 2.5: 238 + 3.0: 340 + 3.5: 440 + 4.0: 546 + 4.5: 648 + 5.0: 731 + 5.5: 750 + 6.0: 750 + 6.5: 750 + 7.0: 750 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 8.0: + 0.0: 0 + 0.5: 0 + 1.0: 38 + 1.5: 86 + 2.0: 152 + 2.5: 238 + 3.0: 332 + 3.5: 424 + 4.0: 530 + 4.5: 628 + 5.0: 707 + 5.5: 750 + 6.0: 750 + 6.5: 750 + 7.0: 750 + 7.5: 750 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 8.5: + 0.0: 0 + 0.5: 0 + 1.0: 37 + 1.5: 83 + 2.0: 147 + 2.5: 230 + 3.0: 315 + 3.5: 404 + 4.0: 499 + 4.5: 590 + 5.0: 687 + 5.5: 750 + 6.0: 750 + 6.5: 750 + 7.0: 750 + 7.5: 750 + 8.0: 750 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 9.0: + 0.0: 0 + 0.5: 0 + 1.0: 35 + 1.5: 78 + 2.0: 138 + 2.5: 218 + 3.0: 292 + 3.5: 377 + 4.0: 475 + 4.5: 562 + 5.0: 670 + 5.5: 737 + 6.0: 750 + 6.5: 750 + 7.0: 750 + 7.5: 750 + 8.0: 750 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 9.5: + 0.0: 0 + 0.5: 0 + 1.0: 32 + 1.5: 72 + 2.0: 127 + 2.5: 199 + 3.0: 266 + 3.5: 362 + 4.0: 429 + 4.5: 528 + 5.0: 607 + 5.5: 667 + 6.0: 750 + 6.5: 750 + 7.0: 750 + 7.5: 750 + 8.0: 750 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 10.0: + 0.0: 0 + 0.5: 0 + 1.0: 29 + 1.5: 65 + 2.0: 118 + 2.5: 181 + 3.0: 240 + 3.5: 326 + 4.0: 384 + 4.5: 473 + 5.0: 557 + 5.5: 658 + 6.0: 711 + 6.5: 750 + 7.0: 750 + 7.5: 750 + 8.0: 750 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 10.5: + 0.0: 0 + 0.5: 0 + 1.0: 26 + 1.5: 59 + 2.0: 104 + 2.5: 183 + 3.0: 219 + 3.5: 292 + 4.0: 366 + 4.5: 432 + 5.0: 521 + 5.5: 586 + 6.0: 633 + 6.5: 743 + 7.0: 750 + 7.5: 750 + 8.0: 750 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 11.0: + 0.0: 0 + 0.5: 0 + 1.0: 23 + 1.5: 53 + 2.0: 93 + 2.5: 146 + 3.0: 210 + 3.5: 260 + 4.0: 339 + 4.5: 382 + 5.0: 472 + 5.5: 530 + 6.0: 619 + 6.5: 658 + 7.0: 750 + 7.5: 750 + 8.0: 750 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 11.5: + 0.0: 0 + 0.5: 0 + 1.0: 21 + 1.5: 47 + 2.0: 83 + 2.5: 130 + 3.0: 188 + 3.5: 230 + 4.0: 301 + 4.5: 359 + 5.0: 417 + 5.5: 476 + 6.0: 558 + 6.5: 621 + 7.0: 676 + 7.5: 750 + 8.0: 750 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 12.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 42 + 2.0: 74 + 2.5: 118 + 3.0: 187 + 3.5: 215 + 4.0: 267 + 4.5: 338 + 5.0: 369 + 5.5: 446 + 6.0: 512 + 6.5: 579 + 7.0: 613 + 7.5: 686 + 8.0: 750 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 12.5: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 37 + 2.0: 66 + 2.5: 103 + 3.0: 149 + 3.5: 202 + 4.0: 237 + 4.5: 300 + 5.0: 348 + 5.5: 395 + 6.0: 470 + 6.5: 512 + 7.0: 584 + 7.5: 622 + 8.0: 690 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 13.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 33 + 2.0: 59 + 2.5: 92 + 3.0: 132 + 3.5: 180 + 4.0: 213 + 4.5: 266 + 5.0: 328 + 5.5: 355 + 6.0: 415 + 6.5: 481 + 7.0: 525 + 7.5: 593 + 8.0: 625 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 13.5: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 14.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 14.5: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 15.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 15.5: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 16.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 16.5: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 17.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 17.5: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 + 18.0: + 0.0: 0 + 0.5: 0 + 1.0: 0 + 1.5: 0 + 2.0: 0 + 2.5: 0 + 3.0: 0 + 3.5: 0 + 4.0: 0 + 4.5: 0 + 5.0: 0 + 5.5: 0 + 6.0: 0 + 6.5: 0 + 7.0: 0 + 7.5: 0 + 8.0: 0 + 8.5: 0 + 9.0: 0 + 9.5: 0 + 10.0: 0 + 10.5: 0 + 11.0: 0 + 11.5: 0 + 12.0: 0 + 12.5: 0 + 13.0: 0 + 13.5: 0 + 14.0: 0 \ No newline at end of file diff --git a/atlite/resources/wecgenerator/Nearshore_400kW.yaml b/atlite/resources/wecgenerator/Nearshore_400kW.yaml new file mode 100644 index 00000000..e1725c4e --- /dev/null +++ b/atlite/resources/wecgenerator/Nearshore_400kW.yaml @@ -0,0 +1,1175 @@ + + +name: Nearshore + +Power_Matrix: + 0.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 0.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 1.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 1.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.03 + 1.5: 0.07 + 2.0: 0.13 + 2.5: 0.2 + 3.0: 0.29 + 3.5: 0.39 + 4.0: 0.51 + 4.5: 0.64 + 5.0: 0.8 + 5.5: 0.96 + 6.0: 1.15 + 6.5: 1.34 + 7.0: 1.56 + 7.5: 1.79 + 8.0: 2.04 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 2.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.37 + 1.5: 0.82 + 2.0: 1.46 + 2.5: 2.29 + 3.0: 3.29 + 3.5: 4.48 + 4.0: 5.86 + 4.5: 7.41 + 5.0: 9.15 + 5.5: 11.07 + 6.0: 13.18 + 6.5: 15.47 + 7.0: 17.94 + 7.5: 20.59 + 8.0: 23.43 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 2.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 1.47 + 1.5: 3.32 + 2.0: 5.9 + 2.5: 9.22 + 3.0: 13.27 + 3.5: 18.06 + 4.0: 23.59 + 4.5: 29.86 + 5.0: 36.87 + 5.5: 44.61 + 6.0: 53.09 + 6.5: 62.3 + 7.0: 72.26 + 7.5: 82.95 + 8.0: 94.38 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 3.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 3.53 + 1.5: 7.94 + 2.0: 14.11 + 2.5: 22.05 + 3.0: 31.75 + 3.5: 43.21 + 4.0: 56.44 + 4.5: 71.43 + 5.0: 88.19 + 5.5: 106.71 + 6.0: 127.0 + 6.5: 149.04 + 7.0: 172.85 + 7.5: 198.43 + 8.0: 225.77 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 3.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 6.47 + 1.5: 14.55 + 2.0: 25.87 + 2.5: 40.43 + 3.0: 58.22 + 3.5: 79.24 + 4.0: 103.5 + 4.5: 130.99 + 5.0: 161.72 + 5.5: 195.68 + 6.0: 232.87 + 6.5: 273.3 + 7.0: 316.96 + 7.5: 363.86 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 4.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 9.88 + 1.5: 22.22 + 2.0: 39.51 + 2.5: 61.73 + 3.0: 88.89 + 3.5: 120.99 + 4.0: 158.03 + 4.5: 200.0 + 5.0: 246.91 + 5.5: 298.77 + 6.0: 355.56 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 4.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 13.63 + 1.5: 30.66 + 2.0: 54.51 + 2.5: 85.17 + 3.0: 122.64 + 3.5: 166.93 + 4.0: 218.03 + 4.5: 275.94 + 5.0: 340.67 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 5.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 17.5 + 1.5: 39.38 + 2.0: 70.01 + 2.5: 109.39 + 3.0: 157.52 + 3.5: 214.4 + 4.0: 280.03 + 4.5: 354.41 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 5.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 20.74 + 1.5: 46.67 + 2.0: 82.96 + 2.5: 129.63 + 3.0: 186.66 + 3.5: 254.07 + 4.0: 331.84 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 6.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 24.26 + 1.5: 54.58 + 2.0: 97.04 + 2.5: 151.62 + 3.0: 218.33 + 3.5: 297.17 + 4.0: 388.14 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 6.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 27.66 + 1.5: 62.24 + 2.0: 110.65 + 2.5: 172.88 + 3.0: 248.95 + 3.5: 338.85 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 7.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 30.93 + 1.5: 69.58 + 2.0: 123.7 + 2.5: 193.29 + 3.0: 278.33 + 3.5: 378.84 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 7.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 32.38 + 1.5: 72.85 + 2.0: 129.51 + 2.5: 202.36 + 3.0: 291.39 + 3.5: 396.62 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 8.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 34.69 + 1.5: 78.05 + 2.0: 138.75 + 2.5: 216.8 + 3.0: 312.19 + 3.5: 400.0 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 8.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 37.14 + 1.5: 83.57 + 2.0: 148.56 + 2.5: 232.13 + 3.0: 334.26 + 3.5: 400.0 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 9.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 37.11 + 1.5: 83.5 + 2.0: 148.45 + 2.5: 231.95 + 3.0: 334.01 + 3.5: 400.0 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 9.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 38.62 + 1.5: 86.9 + 2.0: 154.5 + 2.5: 241.4 + 3.0: 347.62 + 3.5: 400.0 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 10.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 37.8 + 1.5: 85.04 + 2.0: 151.19 + 2.5: 236.23 + 3.0: 340.18 + 3.5: 400.0 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 10.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 36.16 + 1.5: 81.37 + 2.0: 144.66 + 2.5: 226.03 + 3.0: 325.48 + 3.5: 400.0 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 11.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 35.4 + 1.5: 79.65 + 2.0: 141.61 + 2.5: 221.26 + 3.0: 318.62 + 3.5: 400.0 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 11.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 32.6 + 1.5: 73.35 + 2.0: 130.41 + 2.5: 203.76 + 3.0: 293.42 + 3.5: 399.38 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 12.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 29.79 + 1.5: 67.04 + 2.0: 119.18 + 2.5: 186.21 + 3.0: 268.15 + 3.5: 364.98 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 12.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 28.84 + 1.5: 64.89 + 2.0: 115.36 + 2.5: 180.25 + 3.0: 259.56 + 3.5: 353.28 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 13.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 26.29 + 1.5: 59.15 + 2.0: 105.15 + 2.5: 164.3 + 3.0: 236.6 + 3.5: 322.03 + 4.0: 400.0 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 13.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 24.16 + 1.5: 54.35 + 2.0: 96.63 + 2.5: 150.98 + 3.0: 217.41 + 3.5: 295.92 + 4.0: 386.5 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 14.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 22.1 + 1.5: 49.73 + 2.0: 88.4 + 2.5: 138.13 + 3.0: 198.91 + 3.5: 270.74 + 4.0: 353.62 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 14.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 21.44 + 1.5: 48.25 + 2.0: 85.77 + 2.5: 134.02 + 3.0: 192.99 + 3.5: 262.68 + 4.0: 343.1 + 4.5: 400.0 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 15.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 19.75 + 1.5: 44.43 + 2.0: 78.99 + 2.5: 123.42 + 3.0: 177.73 + 3.5: 241.91 + 4.0: 315.96 + 4.5: 399.89 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 15.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 18.1 + 1.5: 40.73 + 2.0: 72.4 + 2.5: 113.13 + 3.0: 162.91 + 3.5: 221.74 + 4.0: 289.62 + 4.5: 366.55 + 5.0: 400.0 + 5.5: 400.0 + 6.0: 400.0 + 6.5: 400.0 + 7.0: 400.0 + 7.5: 400.0 + 8.0: 400.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 16.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 16.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 17.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 17.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 18.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 18.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 19.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 diff --git a/atlite/resources/wecgenerator/Shallow_290kW.yaml b/atlite/resources/wecgenerator/Shallow_290kW.yaml new file mode 100644 index 00000000..322163db --- /dev/null +++ b/atlite/resources/wecgenerator/Shallow_290kW.yaml @@ -0,0 +1,1115 @@ + + +name: Shallow + +Power_Matrix: + 0.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 0.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 1.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 1.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 2.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 2.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 3.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 3.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 4.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 4.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 10.0 + 2.0: 40.0 + 2.5: 70.0 + 3.0: 96.0 + 3.5: 120.5 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 5.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 20.0 + 2.0: 80.0 + 2.5: 140.0 + 3.0: 192.0 + 3.5: 241.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 5.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 25.0 + 2.0: 82.5 + 2.5: 143.5 + 3.0: 194.5 + 3.5: 239.0 + 4.0: 135.5 + 4.5: 145.5 + 5.0: 145.5 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 6.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 30.0 + 2.0: 85.0 + 2.5: 147.0 + 3.0: 197.0 + 3.5: 237.0 + 4.0: 271.0 + 4.5: 291.0 + 5.0: 291.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 6.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 34.0 + 2.0: 88.5 + 2.5: 149.5 + 3.0: 202.5 + 3.5: 237.0 + 4.0: 271.5 + 4.5: 290.5 + 5.0: 290.5 + 5.5: 145.0 + 6.0: 145.0 + 6.5: 145.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 7.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 38.0 + 2.0: 92.0 + 2.5: 152.0 + 3.0: 208.0 + 3.5: 237.0 + 4.0: 272.0 + 4.5: 290.0 + 5.0: 290.0 + 5.5: 290.0 + 6.0: 290.0 + 6.5: 290.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 7.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 40.0 + 2.0: 94.5 + 2.5: 155.0 + 3.0: 205.0 + 3.5: 239.0 + 4.0: 270.5 + 4.5: 290.0 + 5.0: 290.0 + 5.5: 290.0 + 6.0: 290.0 + 6.5: 290.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 8.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 42.0 + 2.0: 97.0 + 2.5: 158.0 + 3.0: 202.0 + 3.5: 241.0 + 4.0: 269.0 + 4.5: 290.0 + 5.0: 290.0 + 5.5: 290.0 + 6.0: 290.0 + 6.5: 290.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 8.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 43.0 + 2.0: 99.5 + 2.5: 156.5 + 3.0: 202.5 + 3.5: 242.0 + 4.0: 268.5 + 4.5: 285.0 + 5.0: 285.0 + 5.5: 285.0 + 6.0: 285.0 + 6.5: 285.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 9.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 44.0 + 2.0: 102.0 + 2.5: 155.0 + 3.0: 203.0 + 3.5: 243.0 + 4.0: 268.0 + 4.5: 280.0 + 5.0: 280.0 + 5.5: 280.0 + 6.0: 280.0 + 6.5: 280.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 9.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 44.0 + 2.0: 102.5 + 2.5: 155.0 + 3.0: 206.0 + 3.5: 236.5 + 4.0: 267.5 + 4.5: 283.5 + 5.0: 283.5 + 5.5: 283.5 + 6.0: 283.5 + 6.5: 283.5 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 10.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 44.0 + 2.0: 103.0 + 2.5: 155.0 + 3.0: 209.0 + 3.5: 230.0 + 4.0: 267.0 + 4.5: 287.0 + 5.0: 287.0 + 5.5: 287.0 + 6.0: 287.0 + 6.5: 287.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 10.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.5 + 1.5: 44.5 + 2.0: 103.5 + 2.5: 157.5 + 3.0: 210.0 + 3.5: 233.0 + 4.0: 268.5 + 4.5: 281.5 + 5.0: 281.5 + 5.5: 281.5 + 6.0: 281.5 + 6.5: 281.5 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 11.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 1.0 + 1.5: 45.0 + 2.0: 104.0 + 2.5: 160.0 + 3.0: 211.0 + 3.5: 236.0 + 4.0: 270.0 + 4.5: 276.0 + 5.0: 276.0 + 5.5: 276.0 + 6.0: 276.0 + 6.5: 276.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 11.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 2.0 + 1.5: 46.0 + 2.0: 102.0 + 2.5: 160.5 + 3.0: 206.0 + 3.5: 233.5 + 4.0: 265.0 + 4.5: 277.0 + 5.0: 277.0 + 5.5: 277.0 + 6.0: 277.0 + 6.5: 277.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 12.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 3.0 + 1.5: 47.0 + 2.0: 100.0 + 2.5: 161.0 + 3.0: 201.0 + 3.5: 231.0 + 4.0: 260.0 + 4.5: 278.0 + 5.0: 278.0 + 5.5: 278.0 + 6.0: 278.0 + 6.5: 278.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 12.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 1.5 + 1.5: 25.0 + 2.0: 72.5 + 2.5: 132.5 + 3.0: 178.5 + 3.5: 217.5 + 4.0: 247.5 + 4.5: 269.0 + 5.0: 277.5 + 5.5: 277.5 + 6.0: 277.5 + 6.5: 277.5 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 13.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 3.0 + 2.0: 45.0 + 2.5: 104.0 + 3.0: 156.0 + 3.5: 204.0 + 4.0: 235.0 + 4.5: 260.0 + 5.0: 277.0 + 5.5: 277.0 + 6.0: 277.0 + 6.5: 277.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 13.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 1.5 + 2.0: 22.5 + 2.5: 52.0 + 3.0: 78.0 + 3.5: 102.0 + 4.0: 117.5 + 4.5: 130.0 + 5.0: 138.5 + 5.5: 138.5 + 6.0: 138.5 + 6.5: 138.5 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 14.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 14.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 15.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 15.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 16.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 16.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 17.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 17.5: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 + 18.0: + 0.0: 0.0 + 0.5: 0.0 + 1.0: 0.0 + 1.5: 0.0 + 2.0: 0.0 + 2.5: 0.0 + 3.0: 0.0 + 3.5: 0.0 + 4.0: 0.0 + 4.5: 0.0 + 5.0: 0.0 + 5.5: 0.0 + 6.0: 0.0 + 6.5: 0.0 + 7.0: 0.0 + 7.5: 0.0 + 8.0: 0.0 + 8.5: 0.0 + 9.0: 0.0 + 9.5: 0.0 + 10.0: 0.0 + 10.5: 0.0 + 11.0: 0.0 + 11.5: 0.0 + 12.0: 0.0 + 12.5: 0.0 + 13.0: 0.0 + 13.5: 0.0 + 14.0: 0.0 From 20045e1f9ad19446be68859c533acacceb49dfd6 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 12:53:09 +0000 Subject: [PATCH 02/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 26 +++++++------- atlite/cutout.py | 2 +- atlite/datasets/__init__.py | 14 ++++---- atlite/datasets/cerra.py | 35 +++++++++--------- atlite/datasets/era5.py | 15 +++++--- atlite/datasets/mrel_wave.py | 36 +++++++------------ atlite/resource.py | 2 ++ .../wecgenerator/Farshore_750kW.yaml | 2 +- .../wecgenerator/Nearshore_400kW.yaml | 1 - .../resources/wecgenerator/Shallow_290kW.yaml | 1 - 10 files changed, 63 insertions(+), 71 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index f23aef21..e3cba9e6 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -36,9 +36,9 @@ from atlite.resource import ( get_cspinstallationconfig, get_solarpanelconfig, + get_wecgeneratorconfig, get_windturbineconfig, windturbine_smooth, - get_wecgeneratorconfig, ) logger = logging.getLogger(__name__) @@ -656,13 +656,12 @@ def wind( # #wave def convert_wave(ds, wec_type): - - power_matrix = pd.DataFrame.from_dict(wec_type['Power_Matrix']) + power_matrix = pd.DataFrame.from_dict(wec_type["Power_Matrix"]) max_pow = power_matrix.to_numpy().max() - - Hs = np.ceil(ds['wave_height']*2)/2 - Tp = np.ceil(ds['wave_period']*2)/2 + + Hs = np.ceil(ds["wave_height"] * 2) / 2 + Tp = np.ceil(ds["wave_period"] * 2) / 2 Hs_list = Hs.to_numpy().flatten().tolist() Tp_list = Tp.to_numpy().flatten().tolist() @@ -675,7 +674,7 @@ def convert_wave(ds, wec_type): # for loop to loop through Hs and Tp pairs and get the power output and capacity factor for Hs_ind, Tp_ind in zip(Hs_list, Tp_list): if count % 1000000 == 0: - print('Case {} of {}: {} %'.format(count, cases, count/cases *100)) + print(f"Case {count} of {cases}: {count / cases * 100} %") if np.isnan(Hs_ind) or np.isnan(Tp_ind): power_list.append(0) @@ -683,7 +682,7 @@ def convert_wave(ds, wec_type): power_list.append(0) else: generated_power = power_matrix.loc[Hs_ind, Tp_ind] - power_list.append(generated_power/max_pow) + power_list.append(generated_power / max_pow) count += 1 # results list to numpy array @@ -691,16 +690,16 @@ def convert_wave(ds, wec_type): power_list_np = power_list_np.reshape(Hs.shape) - da = xr.DataArray(power_list_np, - coords = Hs.coords, - dims = Hs.dims, - name = 'Power generated') + da = xr.DataArray( + power_list_np, coords=Hs.coords, dims=Hs.dims, name="Power generated" + ) da.attrs["units"] = "kWh/kWp" da = da.rename("specific generation") da = da.fillna(0) return da + def wave(cutout, wec_type, **params): """ Generate wave generation time series @@ -712,11 +711,10 @@ def wave(cutout, wec_type, **params): wec_type = get_wecgeneratorconfig(wec_type) return cutout.convert_and_aggregate( - convert_func = convert_wave, wec_type = wec_type , **params + convert_func=convert_wave, wec_type=wec_type, **params ) - # irradiation def convert_irradiation( ds, diff --git a/atlite/cutout.py b/atlite/cutout.py index 52559dca..4972ea46 100644 --- a/atlite/cutout.py +++ b/atlite/cutout.py @@ -44,8 +44,8 @@ soil_temperature, solar_thermal, temperature, - wind, wave, + wind, ) from atlite.data import available_features, cutout_prepare from atlite.datasets import modules as datamodules diff --git a/atlite/datasets/__init__.py b/atlite/datasets/__init__.py index 852f7e50..58198598 100644 --- a/atlite/datasets/__init__.py +++ b/atlite/datasets/__init__.py @@ -6,12 +6,12 @@ atlite datasets. """ -from atlite.datasets import era5, gebco, sarah, cerra, mrel_wave +from atlite.datasets import cerra, era5, gebco, mrel_wave, sarah modules = { - "era5": era5, - "sarah": sarah, - "mrel_wave": mrel_wave, - "cerra": cerra, - "gebco": gebco, - } + "era5": era5, + "sarah": sarah, + "mrel_wave": mrel_wave, + "cerra": cerra, + "gebco": gebco, +} diff --git a/atlite/datasets/cerra.py b/atlite/datasets/cerra.py index 278224df..ecf7e0a2 100644 --- a/atlite/datasets/cerra.py +++ b/atlite/datasets/cerra.py @@ -1,26 +1,25 @@ - """ In order to create a CERRA cutout, the data must be manually downloaded from the Climate Data Store. The variable used is "10m wind speed" and there is not a direction component in it. -This 10m wind speed was transformed into a 100m wind speed in order to follow the rest of atlite's processes. +This 10m wind speed was transformed into a 100m wind speed in order to follow the rest of atlite's processes. """ -import xarray as xr -import numpy as np - import logging + +import numpy as np +import xarray as xr from rasterio.warp import Resampling + from atlite.gis import regrid logger = logging.getLogger(__name__) -crs = 4326 +crs = 4326 dx = 0.05 dy = 0.05 -features = { - "wind": ["wnd100m", "roughness"] - } +features = {"wind": ["wnd100m", "roughness"]} + def as_slice(bounds, pad=True): """ @@ -31,6 +30,7 @@ def as_slice(bounds, pad=True): bounds = slice(*bounds) return bounds + def get_data(cutout, feature, tmpdir, **creation_parameters): """ Retrieve data from a local CERRA dataset and process it. @@ -45,25 +45,24 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = xr.open_dataset(path) ds = ds.sel(x=as_slice(cutout.extent[:2]), y=as_slice(cutout.extent[2:])) - ds = ds.assign_coords( - x=ds.x.astype(float).round(4), y=ds.y.astype(float).round(4) - ) + ds = ds.assign_coords(x=ds.x.astype(float).round(4), y=ds.y.astype(float).round(4)) if (cutout.dx != dx) or (cutout.dy != dy): ds = regrid(ds, coords["x"], coords["y"], resampling=Resampling.average) - - if 'sr' in ds: + + if "sr" in ds: ds = ds.rename({"sr": "roughness"}) logger.info("Calculating 100 metre wind speed") - if 'si10' in ds and 'roughness' in ds: - ds["wnd100m"] = (ds["si10"] * (np.log(100 / ds["roughness"]) / np.log(10 / ds["roughness"]))).assign_attrs( - units="m s**-1", long_name="100 metre wind speed") + if "si10" in ds and "roughness" in ds: + ds["wnd100m"] = ( + ds["si10"] * (np.log(100 / ds["roughness"]) / np.log(10 / ds["roughness"])) + ).assign_attrs(units="m s**-1", long_name="100 metre wind speed") ds = ds.drop_vars("si10") ds = ds.assign_coords(x=ds.coords["x"], y=ds.coords["y"]) logger.info("Resampling to 1H.") - ds = ds.resample(time='1h').interpolate("linear") + ds = ds.resample(time="1h").interpolate("linear") return ds diff --git a/atlite/datasets/era5.py b/atlite/datasets/era5.py index bb189545..93e9e6f0 100644 --- a/atlite/datasets/era5.py +++ b/atlite/datasets/era5.py @@ -55,8 +55,8 @@ def nullcontext(): ], "temperature": ["temperature", "soil temperature", "dewpoint temperature"], "runoff": ["runoff"], - "wave_height" : ["wave_height"], - "wave_period" : ["wave_period"], + "wave_height": ["wave_height"], + "wave_period": ["wave_period"], } static_features = {"height"} @@ -245,6 +245,7 @@ def sanitize_runoff(ds): ds["runoff"] = ds["runoff"].clip(min=0.0) return ds + def get_data_wave_height(retrieval_params): """ Get wave height data for given retrieval parameters. @@ -260,6 +261,7 @@ def get_data_wave_height(retrieval_params): return ds + def sanitize_wave_height(ds): """ Sanitize retrieved wave height data. @@ -267,18 +269,22 @@ def sanitize_wave_height(ds): ds["wave_height"] = ds["wave_height"].clip(min=0.0) return ds + def get_data_wave_period(retrieval_params): """ Get wave period data for given retrieval parameters. """ ds = retrieve_data( - variable=["peak_wave_period"],**retrieval_params,) - + variable=["peak_wave_period"], + **retrieval_params, + ) + ds = _rename_and_clean_coords(ds) ds = ds.rename({"pp1d": "wave_period"}) return ds + def sanitize_wave_period(ds): """ Sanitize retrieved wave period data. @@ -286,6 +292,7 @@ def sanitize_wave_period(ds): ds["wave_period"] = ds["wave_period"].clip(min=0.0) return ds + def get_data_height(retrieval_params): """ Get height data for given retrieval parameters. diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index f6208232..4744f886 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -1,10 +1,10 @@ +import logging - -import xarray as xr import numpy as np -import logging +import xarray as xr from rasterio.warp import Resampling -from atlite.gis import regrid + +from atlite.gis import regrid logger = logging.getLogger(__name__) @@ -12,10 +12,8 @@ dx = 0.0625 dy = 0.04 -features = { - "wave_height" : ["wave_height"], - "wave_period" : ["wave_period"] -} +features = {"wave_height": ["wave_height"], "wave_period": ["wave_period"]} + def _rename_and_clean_coords(ds): """ @@ -30,25 +28,24 @@ def _rename_and_clean_coords(ds): x=np.round(ds.x.astype(float), 5), y=np.round(ds.y.astype(float), 5) ) - return ds def get_data_wave_height(ds): - ds = ds.rename({"hs": "wave_height"}) ds["wave_height"] = ds["wave_height"].clip(min=0.0) return ds -def get_data_wave_period(ds): +def get_data_wave_period(ds): ds = ds.rename({"tp": "wave_period"}) # ds["wave_period"] = (1 / ds["wave_period"]) ds["wave_period"] = ds["wave_period"].clip(min=0.0) return ds + def as_slice(bounds, pad=True): """ Convert coordinate bounds to slice and pad by 0.01. @@ -58,8 +55,8 @@ def as_slice(bounds, pad=True): bounds = slice(*bounds) return bounds -def get_data(cutout, feature, tmpdir, **creation_parameters): +def get_data(cutout, feature, tmpdir, **creation_parameters): coords = cutout.coords if "data_path" not in creation_parameters: @@ -69,17 +66,14 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = xr.open_dataset(path) - if 'longitude' in ds and 'latitude' in ds: + if "longitude" in ds and "latitude" in ds: ds = ds.rename({"longitude": "x", "latitude": "y"}) ds = ds.sel(x=as_slice(cutout.extent[:2]), y=as_slice(cutout.extent[2:])) - ds = ds.assign_coords( - x=ds.x.astype(float).round(4), y=ds.y.astype(float).round(4) - ) + ds = ds.assign_coords(x=ds.x.astype(float).round(4), y=ds.y.astype(float).round(4)) if (cutout.dx != dx) or (cutout.dy != dy): ds = regrid(ds, coords["x"], coords["y"], resampling=Resampling.average) - # coords = cutout.coords @@ -95,13 +89,10 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): variables = ds.data_vars - for var in variables: - if var not in ['hs', 'tp']: + if var not in ["hs", "tp"]: ds = ds.drop_vars(var) - - # ds = ds.sel(x=as_slice(cutout.extent[:2]), y=as_slice(cutout.extent[2:])) # if (cutout.dx != dx) or (cutout.dy != dy): @@ -115,6 +106,3 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): # ds = ds.assign_coords(x=ds.coords["x"], y=ds.coords["y"]) return ds - - - diff --git a/atlite/resource.py b/atlite/resource.py index 5eb753ea..d2908f83 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,6 +114,7 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) + def get_wecgeneratorconfig(wec_type): """ Load the wec wec_type power matrix @@ -133,6 +134,7 @@ def get_wecgeneratorconfig(wec_type): return conf + def get_solarpanelconfig(panel): """ Load the 'panel'.yaml file from local disk and provide a solar panel dict. diff --git a/atlite/resources/wecgenerator/Farshore_750kW.yaml b/atlite/resources/wecgenerator/Farshore_750kW.yaml index e728593d..9aaa8734 100644 --- a/atlite/resources/wecgenerator/Farshore_750kW.yaml +++ b/atlite/resources/wecgenerator/Farshore_750kW.yaml @@ -1112,4 +1112,4 @@ Power_Matrix: 12.5: 0 13.0: 0 13.5: 0 - 14.0: 0 \ No newline at end of file + 14.0: 0 diff --git a/atlite/resources/wecgenerator/Nearshore_400kW.yaml b/atlite/resources/wecgenerator/Nearshore_400kW.yaml index e1725c4e..b29bdbe6 100644 --- a/atlite/resources/wecgenerator/Nearshore_400kW.yaml +++ b/atlite/resources/wecgenerator/Nearshore_400kW.yaml @@ -1,5 +1,4 @@ - name: Nearshore Power_Matrix: diff --git a/atlite/resources/wecgenerator/Shallow_290kW.yaml b/atlite/resources/wecgenerator/Shallow_290kW.yaml index 322163db..a07e64ad 100644 --- a/atlite/resources/wecgenerator/Shallow_290kW.yaml +++ b/atlite/resources/wecgenerator/Shallow_290kW.yaml @@ -1,5 +1,4 @@ - name: Shallow Power_Matrix: From ffb156d9056062f3b2315cf2ee9caca3ab689bff Mon Sep 17 00:00:00 2001 From: lmezilis Date: Fri, 7 Nov 2025 18:27:04 +0100 Subject: [PATCH 03/29] code resolutions for merge --- atlite/convert.py | 64 ++++++-- atlite/datasets/era5.py | 5 +- atlite/datasets/mrel_wave.py | 140 ++++++++---------- atlite/resource.py | 4 +- .../wecgenerator/Farshore_750kW.yaml | 26 +++- .../wecgenerator/Nearshore_400kW.yaml | 24 +++ .../resources/wecgenerator/Shallow_290kW.yaml | 24 +++ 7 files changed, 196 insertions(+), 91 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index f23aef21..0869bcad 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -654,8 +654,38 @@ def wind( ) -# #wave +# wave def convert_wave(ds, wec_type): + """ + Convert wave height (Hs) and wave peak period (Tp) data into normalized power output + using the device-specific Wave Energy Converter (WEC) power matrix. + + This function matches each combination of significant wave height and peak period + in the dataset to a corresponding power output from the WEC power matrix. + The resulting power output is normalized by the maximum possible output (capacity) + to obtain the specific generation profile. + + Parameters + ---------- + ds : xarray.Dataset + Input dataset (cutout) containing two variables: + 'wave_height' : significant wave height (m) + 'wave_period' : peak wave period (s) + wec_type : dict + Dictionary defining the WEC characteristics, including: + 'Power_Matrix' : a power matrix dictionary stored in "resources\wecgenerator" + + Returns + ------- + xarray.DataArray + DataArray of specific power generation values (normalized power output). + + Notes + ----- + A progress message is printed every one million cases to track computation. + + + """ power_matrix = pd.DataFrame.from_dict(wec_type['Power_Matrix']) @@ -676,11 +706,8 @@ def convert_wave(ds, wec_type): for Hs_ind, Tp_ind in zip(Hs_list, Tp_list): if count % 1000000 == 0: print('Case {} of {}: {} %'.format(count, cases, count/cases *100)) - if np.isnan(Hs_ind) or np.isnan(Tp_ind): power_list.append(0) - elif Hs_ind > 10 or Tp_ind > 18: - power_list.append(0) else: generated_power = power_matrix.loc[Hs_ind, Tp_ind] power_list.append(generated_power/max_pow) @@ -703,20 +730,37 @@ def convert_wave(ds, wec_type): def wave(cutout, wec_type, **params): """ - Generate wave generation time series + Compute wave energy generation time series for a given cutout and Wave Energy Converter (WEC) type. + + Parameters + ---------- + cutout : atlite.Cutout + Atlite cutout object containing wave-related data (e.g., `wave_height`, `wave_period`). + wec_type : str, pathlib.Path, or dict + WEC configuration describing the device's power characteristics. - evaluates the significant wave height (Hs) and wave peak period (Tp) - and assesses the power output with the chosen power matrix for each time step and grid cell + Returns + ------- + xarray.DataArray + Time series of normalized wave power generation for the entire cutout area, with units of "kWh/kWp". + The dimensions and resolution follow the input cutout and aggregation parameters. + + References + ---------- + [1] Lavidas G., Mezilis L., Alday M., Baki H., Tan J., Jain A., Engelfried T. and Raghavan V., + Marine renewables in Energy Systems: Impacts of climate data, generators, energy policies, + opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, + 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. """ if isinstance(wec_type, (str, Path)): wec_type = get_wecgeneratorconfig(wec_type) return cutout.convert_and_aggregate( - convert_func = convert_wave, wec_type = wec_type , **params + convert_func = convert_wave, + wec_type = wec_type , + **params ) - - # irradiation def convert_irradiation( ds, diff --git a/atlite/datasets/era5.py b/atlite/datasets/era5.py index bb189545..960bb3f5 100644 --- a/atlite/datasets/era5.py +++ b/atlite/datasets/era5.py @@ -44,7 +44,7 @@ def nullcontext(): features = { "height": ["height"], - "wind": ["wnd100m", "wnd_azimuth", "roughness"], + "wind": ["wnd100m", "wnd_shear_exp", "wnd_azimuth", "roughness"], "influx": [ "influx_toa", "influx_direct", @@ -55,8 +55,7 @@ def nullcontext(): ], "temperature": ["temperature", "soil temperature", "dewpoint temperature"], "runoff": ["runoff"], - "wave_height" : ["wave_height"], - "wave_period" : ["wave_period"], + "wave" : ["wave_height", "wave_period"] } static_features = {"height"} diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index f6208232..422295af 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -1,4 +1,14 @@ - +# SPDX-FileCopyrightText: Contributors to atlite +# +# SPDX-License-Identifier: MIT +""" +Module for curating the already downloaded wave data of MREL (ECHOWAVE). + +For further reference see: +[1] Matías A., George L., The ECHOWAVE Hindcast: A 30-years high resolution database +for wave energy applications in North Atlantic European waters, Renewable Energy, +Volume 236, 2024, 121391,ISSN 0960-1481, https://doi.org/10.1016/j.renene.2024.121391 +""" import xarray as xr import numpy as np @@ -12,109 +22,89 @@ dx = 0.0625 dy = 0.04 -features = { - "wave_height" : ["wave_height"], - "wave_period" : ["wave_period"] -} +features = {"hs": "wave_height", "tp": "wave_period"} -def _rename_and_clean_coords(ds): +def _rename_and_clean_coords(ds, cutout): """ - Rename 'longitude' and 'latitude' columns to 'x' and 'y' and fix roundings. - - Optionally (add_lon_lat, default:True) preserves latitude and - longitude columns as 'lat' and 'lon'. + Rename 'longitude' and 'latitude' columns to 'x' and 'y', fix roundings and grid dimensions. """ - ds = ds.rename({"longitude": "x", "latitude": "y"}) - + coords = cutout.coords + if 'longitude' in ds and 'latitude' in ds: + ds = ds.rename({"longitude": "x", "latitude": "y"}) + # round coords since cds coords are float32 which would lead to mismatches ds = ds.assign_coords( x=np.round(ds.x.astype(float), 5), y=np.round(ds.y.astype(float), 5) ) - + if (cutout.dx != dx) or (cutout.dy != dy): + ds = regrid(ds, coords["x"], coords["y"], resampling=Resampling.average) return ds - -def get_data_wave_height(ds): - +def sanitize_wave_height(ds): + """ + Rename and sanitize retrieved wave height data. + """ ds = ds.rename({"hs": "wave_height"}) ds["wave_height"] = ds["wave_height"].clip(min=0.0) - return ds -def get_data_wave_period(ds): - +def sanitize_wave_period(ds): + """ + Rename and sanitize retrieved wave height data. + """ ds = ds.rename({"tp": "wave_period"}) - # ds["wave_period"] = (1 / ds["wave_period"]) ds["wave_period"] = ds["wave_period"].clip(min=0.0) - return ds -def as_slice(bounds, pad=True): +def _bounds(coords, pad: float=0) -> dict[str, slice]: """ - Convert coordinate bounds to slice and pad by 0.01. + Convert coordinate bounds to slice and pad if requested. """ - if not isinstance(bounds, slice): - bounds = bounds + (-0.01, 0.01) - bounds = slice(*bounds) - return bounds + x0, x1 = coords["x"].min().item() - pad, coords["x"].max().item() + pad + y0, y1 = coords["y"].min().item() - pad, coords["y"].max().item() + pad + + return {"x": slice(x0, x1), "y": slice(y0, y1)} def get_data(cutout, feature, tmpdir, **creation_parameters): - - coords = cutout.coords - + """ + Load stored MREL (ECHOWAVE) data and reformat to matching the given cutout. + + This function loads and resamples the stored MREL data for a given + `atlite.Cutout`. + + Parameters + ---------- + cutout : atlite.Cutout + feature : str + Name of the feature data to retrieve. Must be in + `atlite.datasets.mrel_wave.features` + **creation_parameters : + Mandatory arguments are: + * 'data_path', str. Directory of the stored MREL data. + + Returns + ------- + xarray.Dataset + Dataset of dask arrays of the retrieved variables. + """ + if "data_path" not in creation_parameters: logger.error('Argument "data_path" not defined') raise ValueError('Argument "data_path" not defined') path = creation_parameters["data_path"] ds = xr.open_dataset(path) - - if 'longitude' in ds and 'latitude' in ds: - ds = ds.rename({"longitude": "x", "latitude": "y"}) - - ds = ds.sel(x=as_slice(cutout.extent[:2]), y=as_slice(cutout.extent[2:])) - ds = ds.assign_coords( - x=ds.x.astype(float).round(4), y=ds.y.astype(float).round(4) - ) - - if (cutout.dx != dx) or (cutout.dy != dy): - ds = regrid(ds, coords["x"], coords["y"], resampling=Resampling.average) + ds = _rename_and_clean_coords(ds, cutout) + bounds = _bounds(cutout.coords, pad=creation_parameters.get("pad", 0)) + ds = ds.sel(**bounds) - - # coords = cutout.coords - - # if "data_path" not in creation_parameters: - # logger.error('Argument "data_path" not defined') - # return None - - # path = creation_parameters["data_path"] - - # logger.info(f"Opening dataset from {path}") - # ds = xr.open_dataset(path, chunks=cutout.chunks) - # ds = _rename_and_clean_coords(ds) - - variables = ds.data_vars - - - for var in variables: - if var not in ['hs', 'tp']: - ds = ds.drop_vars(var) - - - - # ds = ds.sel(x=as_slice(cutout.extent[:2]), y=as_slice(cutout.extent[2:])) - - # if (cutout.dx != dx) or (cutout.dy != dy): - # ds = regrid(ds, coords["x"], coords["y"], resampling=Resampling.average) - - logger.info("Obtaining wave data.") - - ds = get_data_wave_height(ds) - ds = get_data_wave_period(ds) - - # ds = ds.assign_coords(x=ds.coords["x"], y=ds.coords["y"]) - + ds = ds[list(features.values())].rename(features) + for feature in features.values(): + sanitize_func = globals().get(f"sanitize_{feature}") + if sanitize_func is not None: + ds = sanitize_func(ds) return ds + diff --git a/atlite/resource.py b/atlite/resource.py index 5eb753ea..a7cb9a83 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -117,8 +117,8 @@ def get_windturbineconfig( def get_wecgeneratorconfig(wec_type): """ Load the wec wec_type power matrix - the configuration can either be one from local storage then 'turbine' is - considered part of the file base name '.yaml' + the configuration can either be one from local storage then 'wec_type' is + considered part of the file base name '.yaml' """ assert isinstance(wec_type, (str | Path)) diff --git a/atlite/resources/wecgenerator/Farshore_750kW.yaml b/atlite/resources/wecgenerator/Farshore_750kW.yaml index e728593d..93ec19f3 100644 --- a/atlite/resources/wecgenerator/Farshore_750kW.yaml +++ b/atlite/resources/wecgenerator/Farshore_750kW.yaml @@ -1,7 +1,31 @@ -# WEC generator power matrix +# SPDX-FileCopyrightText: Contributors to atlite +# +# SPDX-License-Identifier: CC-BY-4.0 + +# WEC generator power matrix dictionary. +# +# References that include the methodology, equations of motions and controls +# for obtaining the power matrix, device sources, and energy system model applications (pypsa-eur): +# +# [1] Raghavan, V, Alday G., M, Metrikine, A, & Lavidas, G. "Wave Energy Farm Assessment in Real Wave +# Climates: The North Sea." Proceedings of the ASME 2024 43rd International Conference on Ocean, +# Offshore and Arctic Engineering. Volume 7: Ocean Renewable Energy. Singapore, Singapore. June 9–14, +# 2024. V007T09A062. ASME. https://doi.org/10.1115/OMAE2024-120946 +# +# [2] Lavidas G., Mezilis L., Alday M., Baki H., Tan J., Jain A., Engelfried T. and Raghavan V., +# Marine renewables in Energy Systems: Impacts of climate data, generators, energy policies, +# opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, +# 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. name: Farshore +# A nested dictionary that defines the power output for combinations of wave_period (tp) and wave_height (hs). +# The outer keys represent the wave_period (s), the inner keys represent wave_height (m) +# and the values represent the power output (kW) +# Power_Matrix: +# 'wave_period_0': +# 'wave_height_0':'power_output' +# 'wave_height_1':'power_output' Power_Matrix: 0.0: 0.0: 0.0 diff --git a/atlite/resources/wecgenerator/Nearshore_400kW.yaml b/atlite/resources/wecgenerator/Nearshore_400kW.yaml index e1725c4e..34394acf 100644 --- a/atlite/resources/wecgenerator/Nearshore_400kW.yaml +++ b/atlite/resources/wecgenerator/Nearshore_400kW.yaml @@ -1,7 +1,31 @@ +# SPDX-FileCopyrightText: Contributors to atlite +# +# SPDX-License-Identifier: CC-BY-4.0 +# WEC generator power matrix dictionary. +# +# References that include the methodology, equations of motions and controls +# for obtaining the power matrix, device sources, and energy system model applications (pypsa-eur): +# +# [1] Raghavan, V, Alday G., M, Metrikine, A, & Lavidas, G. "Wave Energy Farm Assessment in Real Wave +# Climates: The North Sea." Proceedings of the ASME 2024 43rd International Conference on Ocean, +# Offshore and Arctic Engineering. Volume 7: Ocean Renewable Energy. Singapore, Singapore. June 9–14, +# 2024. V007T09A062. ASME. https://doi.org/10.1115/OMAE2024-120946 +# +# [2] Lavidas G., Mezilis L., Alday M., Baki H., Tan J., Jain A., Engelfried T. and Raghavan V., +# Marine renewables in Energy Systems: Impacts of climate data, generators, energy policies, +# opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, +# 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. name: Nearshore +# A nested dictionary that defines the power output for combinations of wave_period (tp) and wave_height (hs). +# The outer keys represent the wave_period (s), the inner keys represent wave_height (m) +# and the values represent the power output (kW) +# Power_Matrix: +# 'wave_period_0': +# 'wave_height_0':'power_output' +# 'wave_height_1':'power_output' Power_Matrix: 0.0: 0.0: 0.0 diff --git a/atlite/resources/wecgenerator/Shallow_290kW.yaml b/atlite/resources/wecgenerator/Shallow_290kW.yaml index 322163db..27d07484 100644 --- a/atlite/resources/wecgenerator/Shallow_290kW.yaml +++ b/atlite/resources/wecgenerator/Shallow_290kW.yaml @@ -1,7 +1,31 @@ +# SPDX-FileCopyrightText: Contributors to atlite +# +# SPDX-License-Identifier: CC-BY-4.0 +# WEC generator power matrix dictionary. +# +# References that include the methodology, equations of motions and controls +# for obtaining the power matrix, device sources, and energy system model applications (pypsa-eur): +# +# [1] Raghavan, V, Alday G., M, Metrikine, A, & Lavidas, G. "Wave Energy Farm Assessment in Real Wave +# Climates: The North Sea." Proceedings of the ASME 2024 43rd International Conference on Ocean, +# Offshore and Arctic Engineering. Volume 7: Ocean Renewable Energy. Singapore, Singapore. June 9–14, +# 2024. V007T09A062. ASME. https://doi.org/10.1115/OMAE2024-120946 +# +# [2] Lavidas G., Mezilis L., Alday M., Baki H., Tan J., Jain A., Engelfried T. and Raghavan V., +# Marine renewables in Energy Systems: Impacts of climate data, generators, energy policies, +# opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, +# 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. name: Shallow +# A nested dictionary that defines the power output for combinations of wave_period (tp) and wave_height (hs). +# The outer keys represent the wave_period (s), the inner keys represent wave_height (m) +# and the values represent the power output (kW) +# Power_Matrix: +# 'wave_period_0': +# 'wave_height_0':'power_output' +# 'wave_height_1':'power_output' Power_Matrix: 0.0: 0.0: 0.0 From dcffaef0cca018e7947512860abb33747648884e Mon Sep 17 00:00:00 2001 From: lmezilis Date: Fri, 7 Nov 2025 19:13:33 +0100 Subject: [PATCH 04/29] commit to fork --- atlite/convert.py | 22 +------------------ atlite/datasets/mrel_wave.py | 2 ++ .../wecgenerator/Nearshore_400kW.yaml | 3 --- .../resources/wecgenerator/Shallow_290kW.yaml | 3 --- 4 files changed, 3 insertions(+), 27 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index ec06dada..8d7b6f83 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -656,7 +656,6 @@ def wind( # wave def convert_wave(ds, wec_type): -<<<<<<< HEAD """ Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. @@ -689,9 +688,7 @@ def convert_wave(ds, wec_type): """ power_matrix = pd.DataFrame.from_dict(wec_type['Power_Matrix']) -======= - power_matrix = pd.DataFrame.from_dict(wec_type["Power_Matrix"]) ->>>>>>> 20045e1f9ad19446be68859c533acacceb49dfd6 + max_pow = power_matrix.to_numpy().max() @@ -709,13 +706,6 @@ def convert_wave(ds, wec_type): # for loop to loop through Hs and Tp pairs and get the power output and capacity factor for Hs_ind, Tp_ind in zip(Hs_list, Tp_list): if count % 1000000 == 0: -<<<<<<< HEAD - print('Case {} of {}: {} %'.format(count, cases, count/cases *100)) -======= - print(f"Case {count} of {cases}: {count / cases * 100} %") - ->>>>>>> 20045e1f9ad19446be68859c533acacceb49dfd6 - if np.isnan(Hs_ind) or np.isnan(Tp_ind): power_list.append(0) else: generated_power = power_matrix.loc[Hs_ind, Tp_ind] @@ -765,19 +755,9 @@ def wave(cutout, wec_type, **params): wec_type = get_wecgeneratorconfig(wec_type) return cutout.convert_and_aggregate( -<<<<<<< HEAD - convert_func = convert_wave, wec_type = wec_type , **params ) - -======= - convert_func=convert_wave, wec_type=wec_type, **params - ) - - ->>>>>>> 20045e1f9ad19446be68859c533acacceb49dfd6 -# irradiation def convert_irradiation( ds, orientation, diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index 190ce858..7c44be37 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -10,6 +10,8 @@ Volume 236, 2024, 121391,ISSN 0960-1481, https://doi.org/10.1016/j.renene.2024.121391 """ +import logging +import numpy as np import xarray as xr from rasterio.warp import Resampling diff --git a/atlite/resources/wecgenerator/Nearshore_400kW.yaml b/atlite/resources/wecgenerator/Nearshore_400kW.yaml index 1ec12f0e..34394acf 100644 --- a/atlite/resources/wecgenerator/Nearshore_400kW.yaml +++ b/atlite/resources/wecgenerator/Nearshore_400kW.yaml @@ -2,7 +2,6 @@ # # SPDX-License-Identifier: CC-BY-4.0 -<<<<<<< HEAD # WEC generator power matrix dictionary. # # References that include the methodology, equations of motions and controls @@ -18,8 +17,6 @@ # opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, # 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. -======= ->>>>>>> 20045e1f9ad19446be68859c533acacceb49dfd6 name: Nearshore # A nested dictionary that defines the power output for combinations of wave_period (tp) and wave_height (hs). diff --git a/atlite/resources/wecgenerator/Shallow_290kW.yaml b/atlite/resources/wecgenerator/Shallow_290kW.yaml index b04550e5..27d07484 100644 --- a/atlite/resources/wecgenerator/Shallow_290kW.yaml +++ b/atlite/resources/wecgenerator/Shallow_290kW.yaml @@ -2,7 +2,6 @@ # # SPDX-License-Identifier: CC-BY-4.0 -<<<<<<< HEAD # WEC generator power matrix dictionary. # # References that include the methodology, equations of motions and controls @@ -18,8 +17,6 @@ # opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, # 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. -======= ->>>>>>> 20045e1f9ad19446be68859c533acacceb49dfd6 name: Shallow # A nested dictionary that defines the power output for combinations of wave_period (tp) and wave_height (hs). From 3383ebccddc883d271fa5ba7536860a20411b80f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 7 Nov 2025 18:16:56 +0000 Subject: [PATCH 05/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 26 ++++++++++++-------------- atlite/datasets/era5.py | 2 +- atlite/datasets/mrel_wave.py | 27 +++++++++++++++------------ 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index 8d7b6f83..37b9c041 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -656,7 +656,7 @@ def wind( # wave def convert_wave(ds, wec_type): - """ + r""" Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. @@ -674,7 +674,7 @@ def convert_wave(ds, wec_type): wec_type : dict Dictionary defining the WEC characteristics, including: 'Power_Matrix' : a power matrix dictionary stored in "resources\wecgenerator" - + Returns ------- xarray.DataArray @@ -684,11 +684,10 @@ def convert_wave(ds, wec_type): ----- A progress message is printed every one million cases to track computation. - - """ - power_matrix = pd.DataFrame.from_dict(wec_type['Power_Matrix']) + """ + power_matrix = pd.DataFrame.from_dict(wec_type["Power_Matrix"]) max_pow = power_matrix.to_numpy().max() @@ -743,21 +742,20 @@ def wave(cutout, wec_type, **params): xarray.DataArray Time series of normalized wave power generation for the entire cutout area, with units of "kWh/kWp". The dimensions and resolution follow the input cutout and aggregation parameters. - + References ---------- - [1] Lavidas G., Mezilis L., Alday M., Baki H., Tan J., Jain A., Engelfried T. and Raghavan V., - Marine renewables in Energy Systems: Impacts of climate data, generators, energy policies, - opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, - 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. + [1] Lavidas G., Mezilis L., Alday M., Baki H., Tan J., Jain A., Engelfried T. and Raghavan V., + Marine renewables in Energy Systems: Impacts of climate data, generators, energy policies, + opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, + 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. """ if isinstance(wec_type, (str, Path)): wec_type = get_wecgeneratorconfig(wec_type) - return cutout.convert_and_aggregate( - wec_type = wec_type , - **params - ) + return cutout.convert_and_aggregate(wec_type=wec_type, **params) + + def convert_irradiation( ds, orientation, diff --git a/atlite/datasets/era5.py b/atlite/datasets/era5.py index 1794715f..09f3cc53 100644 --- a/atlite/datasets/era5.py +++ b/atlite/datasets/era5.py @@ -55,7 +55,7 @@ def nullcontext(): ], "temperature": ["temperature", "soil temperature", "dewpoint temperature"], "runoff": ["runoff"], - "wave" : ["wave_height", "wave_period"] + "wave": ["wave_height", "wave_period"], } static_features = {"height"} diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index 7c44be37..6aaedd5f 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -5,12 +5,13 @@ Module for curating the already downloaded wave data of MREL (ECHOWAVE). For further reference see: -[1] Matías A., George L., The ECHOWAVE Hindcast: A 30-years high resolution database -for wave energy applications in North Atlantic European waters, Renewable Energy, +[1] Matías A., George L., The ECHOWAVE Hindcast: A 30-years high resolution database +for wave energy applications in North Atlantic European waters, Renewable Energy, Volume 236, 2024, 121391,ISSN 0960-1481, https://doi.org/10.1016/j.renene.2024.121391 """ import logging + import numpy as np import xarray as xr from rasterio.warp import Resampling @@ -25,12 +26,13 @@ features = {"hs": "wave_height", "tp": "wave_period"} + def _rename_and_clean_coords(ds, cutout): """ Rename 'longitude' and 'latitude' columns to 'x' and 'y', fix roundings and grid dimensions. """ coords = cutout.coords - if 'longitude' in ds and 'latitude' in ds: + if "longitude" in ds and "latitude" in ds: ds = ds.rename({"longitude": "x", "latitude": "y"}) # round coords since cds coords are float32 which would lead to mismatches ds = ds.assign_coords( @@ -41,6 +43,7 @@ def _rename_and_clean_coords(ds, cutout): return ds + def sanitize_wave_height(ds): """ Rename and sanitize retrieved wave height data. @@ -49,6 +52,7 @@ def sanitize_wave_height(ds): ds["wave_height"] = ds["wave_height"].clip(min=0.0) return ds + def sanitize_wave_period(ds): """ Rename and sanitize retrieved wave height data. @@ -57,13 +61,14 @@ def sanitize_wave_period(ds): ds["wave_period"] = ds["wave_period"].clip(min=0.0) return ds -def _bounds(coords, pad: float=0) -> dict[str, slice]: + +def _bounds(coords, pad: float = 0) -> dict[str, slice]: """ Convert coordinate bounds to slice and pad if requested. """ x0, x1 = coords["x"].min().item() - pad, coords["x"].max().item() + pad y0, y1 = coords["y"].min().item() - pad, coords["y"].max().item() + pad - + return {"x": slice(x0, x1), "y": slice(y0, y1)} @@ -83,13 +88,13 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): **creation_parameters : Mandatory arguments are: * 'data_path', str. Directory of the stored MREL data. - + Returns ------- xarray.Dataset Dataset of dask arrays of the retrieved variables. """ - + if "data_path" not in creation_parameters: logger.error('Argument "data_path" not defined') raise ValueError('Argument "data_path" not defined') @@ -99,13 +104,11 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = _rename_and_clean_coords(ds, cutout) bounds = _bounds(cutout.coords, pad=creation_parameters.get("pad", 0)) ds = ds.sel(**bounds) - + ds = ds[list(features.values())].rename(features) for feature in features.values(): sanitize_func = globals().get(f"sanitize_{feature}") if sanitize_func is not None: - ds = sanitize_func(ds) - - return ds - + ds = sanitize_func(ds) + return ds From 7b6872f10ceb2499129db89026314ba2b46e6742 Mon Sep 17 00:00:00 2001 From: lmezilis Date: Mon, 10 Nov 2025 10:21:11 +0100 Subject: [PATCH 06/29] fix count message error --- atlite/convert.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/atlite/convert.py b/atlite/convert.py index 8d7b6f83..3333cdff 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -706,6 +706,8 @@ def convert_wave(ds, wec_type): # for loop to loop through Hs and Tp pairs and get the power output and capacity factor for Hs_ind, Tp_ind in zip(Hs_list, Tp_list): if count % 1000000 == 0: + print('Case {} of {}: %'.format(count, cases, count/cases *100)) + if np.isnan(Hs_ind) or np.isnan(Tp_ind): power_list.append(0) else: generated_power = power_matrix.loc[Hs_ind, Tp_ind] From 1b7efd7d6f84fa0aeedbd0c7ad558de1c2973b37 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 09:21:27 +0000 Subject: [PATCH 07/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atlite/convert.py b/atlite/convert.py index 92bdb2c4..b1b8eadd 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -705,7 +705,7 @@ def convert_wave(ds, wec_type): # for loop to loop through Hs and Tp pairs and get the power output and capacity factor for Hs_ind, Tp_ind in zip(Hs_list, Tp_list): if count % 1000000 == 0: - print('Case {} of {}: %'.format(count, cases, count/cases *100)) + print(f"Case {count} of {cases}: %") if np.isnan(Hs_ind) or np.isnan(Tp_ind): power_list.append(0) else: From 70674908bf1149a279819cf0b8e800f040dc36ba Mon Sep 17 00:00:00 2001 From: lmezilis Date: Mon, 10 Nov 2025 10:34:47 +0100 Subject: [PATCH 08/29] fix docstring --- atlite/convert.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index 92bdb2c4..0d87d263 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -656,7 +656,7 @@ def wind( # wave def convert_wave(ds, wec_type): - r""" + """ Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. @@ -683,12 +683,9 @@ def convert_wave(ds, wec_type): Notes ----- A progress message is printed every one million cases to track computation. - - """ power_matrix = pd.DataFrame.from_dict(wec_type["Power_Matrix"]) - max_pow = power_matrix.to_numpy().max() Hs = np.ceil(ds["wave_height"] * 2) / 2 From 7aaae5008673ba0a0ed08cfbb11509c7dfaae6cc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 09:35:02 +0000 Subject: [PATCH 09/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atlite/convert.py b/atlite/convert.py index 6081bbad..67ffa4fb 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -656,7 +656,7 @@ def wind( # wave def convert_wave(ds, wec_type): - """ + r""" Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. From a1a2aaaa3df5d24d6aeca917bc3902ca192a5fec Mon Sep 17 00:00:00 2001 From: lmezilis Date: Mon, 10 Nov 2025 10:38:37 +0100 Subject: [PATCH 10/29] fix syntax --- atlite/convert.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atlite/convert.py b/atlite/convert.py index 6081bbad..8af72461 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -749,7 +749,7 @@ def wave(cutout, wec_type, **params): opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. """ - if isinstance(wec_type, (str, Path)): + if isinstance(wec_type, str | Path): wec_type = get_wecgeneratorconfig(wec_type) return cutout.convert_and_aggregate(wec_type=wec_type, **params) From 76f94fdb90e859f978b087f7803a76e6320b11c1 Mon Sep 17 00:00:00 2001 From: lmezilis Date: Mon, 10 Nov 2025 10:40:15 +0100 Subject: [PATCH 11/29] copyrights cerra --- atlite/datasets/cerra.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/atlite/datasets/cerra.py b/atlite/datasets/cerra.py index ecf7e0a2..ff3146f5 100644 --- a/atlite/datasets/cerra.py +++ b/atlite/datasets/cerra.py @@ -1,3 +1,7 @@ +# SPDX-FileCopyrightText: Contributors to atlite +# +# SPDX-License-Identifier: MIT + """ In order to create a CERRA cutout, the data must be manually downloaded from the Climate Data Store. The variable used is "10m wind speed" and there is not a direction component in it. From 5f6cfe2f81c1d3b7018b3c26bad6e3795e485900 Mon Sep 17 00:00:00 2001 From: lmezilis Date: Tue, 11 Nov 2025 13:22:56 +0100 Subject: [PATCH 12/29] fix syntax --- atlite/convert.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index 55d168d3..fe66e24f 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -656,7 +656,7 @@ def wind( # wave def convert_wave(ds, wec_type): - r""" + """ Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. @@ -669,11 +669,11 @@ def convert_wave(ds, wec_type): ---------- ds : xarray.Dataset Input dataset (cutout) containing two variables: - 'wave_height' : significant wave height (m) - 'wave_period' : peak wave period (s) + wave_height: significant wave height (m) + wave_period: peak wave period (s) wec_type : dict Dictionary defining the WEC characteristics, including: - 'Power_Matrix' : a power matrix dictionary stored in "resources\wecgenerator" + Power_Matrix: a power matrix dictionary stored in "resources\wecgenerator" Returns ------- From 39eefe6d9dceef900211617415f11b077e9a7b30 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 12:23:11 +0000 Subject: [PATCH 13/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atlite/convert.py b/atlite/convert.py index fe66e24f..40b5cb2d 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -656,7 +656,7 @@ def wind( # wave def convert_wave(ds, wec_type): - """ + r""" Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. From ba748f4504306de0cfda712cd01e1672eaec37c2 Mon Sep 17 00:00:00 2001 From: lmezilis Date: Tue, 11 Nov 2025 14:01:13 +0100 Subject: [PATCH 14/29] convert func --- atlite/convert.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/atlite/convert.py b/atlite/convert.py index fe66e24f..fe1a2a40 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -752,7 +752,10 @@ def wave(cutout, wec_type, **params): if isinstance(wec_type, str | Path): wec_type = get_wecgeneratorconfig(wec_type) - return cutout.convert_and_aggregate(wec_type=wec_type, **params) + return cutout.convert_and_aggregate( + convert_func=convert_wave, + wec_type=wec_type, + **params) def convert_irradiation( From 1de851da4c88d1f653abbe4ec1e2423d1c6bcf11 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 13:02:07 +0000 Subject: [PATCH 15/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index e2c4e9b5..39373b58 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -753,9 +753,8 @@ def wave(cutout, wec_type, **params): wec_type = get_wecgeneratorconfig(wec_type) return cutout.convert_and_aggregate( - convert_func=convert_wave, - wec_type=wec_type, - **params) + convert_func=convert_wave, wec_type=wec_type, **params + ) def convert_irradiation( From 83ae74a0ecfd12c40897e6adf618d1b22b87807f Mon Sep 17 00:00:00 2001 From: lmezilis Date: Fri, 14 Nov 2025 11:34:54 +0100 Subject: [PATCH 16/29] wec renaming --- atlite/convert.py | 18 ++++++++++-------- atlite/datasets/mrel_wave.py | 6 ++---- atlite/resource.py | 19 +++++++++---------- .../Farshore_750kW.yaml | 0 .../Nearshore_400kW.yaml | 0 .../Shallow_290kW.yaml | 0 6 files changed, 21 insertions(+), 22 deletions(-) rename atlite/resources/{wecgenerator => waveenergyconverter}/Farshore_750kW.yaml (100%) rename atlite/resources/{wecgenerator => waveenergyconverter}/Nearshore_400kW.yaml (100%) rename atlite/resources/{wecgenerator => waveenergyconverter}/Shallow_290kW.yaml (100%) diff --git a/atlite/convert.py b/atlite/convert.py index e2c4e9b5..f5539dbf 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -36,7 +36,7 @@ from atlite.resource import ( get_cspinstallationconfig, get_solarpanelconfig, - get_wecgeneratorconfig, + get_waveenergyconverter, get_windturbineconfig, windturbine_smooth, ) @@ -655,8 +655,8 @@ def wind( # wave -def convert_wave(ds, wec_type): - r""" +def convert_wave(ds, wec): + """ Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. @@ -685,7 +685,7 @@ def convert_wave(ds, wec_type): A progress message is printed every one million cases to track computation. """ - power_matrix = pd.DataFrame.from_dict(wec_type["Power_Matrix"]) + power_matrix = pd.DataFrame.from_dict(wec["Power_Matrix"]) max_pow = power_matrix.to_numpy().max() Hs = np.ceil(ds["wave_height"] * 2) / 2 @@ -705,6 +705,8 @@ def convert_wave(ds, wec_type): print(f"Case {count} of {cases}: %") if np.isnan(Hs_ind) or np.isnan(Tp_ind): power_list.append(0) + elif Hs_ind > 10 or Tp_ind > 18: + power_list.append(0) else: generated_power = power_matrix.loc[Hs_ind, Tp_ind] power_list.append(generated_power / max_pow) @@ -725,7 +727,7 @@ def convert_wave(ds, wec_type): return da -def wave(cutout, wec_type, **params): +def wave(cutout, wec, **params): """ Compute wave energy generation time series for a given cutout and Wave Energy Converter (WEC) type. @@ -749,12 +751,12 @@ def wave(cutout, wec_type, **params): opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. """ - if isinstance(wec_type, str | Path): - wec_type = get_wecgeneratorconfig(wec_type) + if isinstance(wec, str | Path): + wec = get_waveenergyconverter(wec) return cutout.convert_and_aggregate( convert_func=convert_wave, - wec_type=wec_type, + wec=wec, **params) diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index 6aaedd5f..25f8c72a 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -46,18 +46,16 @@ def _rename_and_clean_coords(ds, cutout): def sanitize_wave_height(ds): """ - Rename and sanitize retrieved wave height data. + Sanitize retrieved wave height data. """ - ds = ds.rename({"hs": "wave_height"}) ds["wave_height"] = ds["wave_height"].clip(min=0.0) return ds def sanitize_wave_period(ds): """ - Rename and sanitize retrieved wave height data. + Sanitize retrieved wave height data. """ - ds = ds.rename({"tp": "wave_period"}) ds["wave_period"] = ds["wave_period"].clip(min=0.0) return ds diff --git a/atlite/resource.py b/atlite/resource.py index a09242ad..c81bd034 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -32,7 +32,7 @@ WINDTURBINE_DIRECTORY = RESOURCE_DIRECTORY / "windturbine" SOLARPANEL_DIRECTORY = RESOURCE_DIRECTORY / "solarpanel" CSPINSTALLATION_DIRECTORY = RESOURCE_DIRECTORY / "cspinstallation" -WECGENERATOR_DIRECTORY = RESOURCE_DIRECTORY / "wecgenerator" +WAVEENERGYCONVERTER_DIRECTORY = RESOURCE_DIRECTORY / "waveenergyconverter" if TYPE_CHECKING: from typing import TypedDict @@ -114,22 +114,21 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) - -def get_wecgeneratorconfig(wec_type): +def get_waveenergyconverter(wec): """ Load the wec wec_type power matrix the configuration can either be one from local storage then 'wec_type' is considered part of the file base name '.yaml' """ - assert isinstance(wec_type, (str | Path)) + assert isinstance(wec, (str | Path)) - if isinstance(wec_type, str): - wec_type_path = wecgenerators[wec_type.replace(".yaml", "")] + if isinstance(wec, str): + wec_path = waveenergyconverter[wec.replace(".yaml", "")] - elif isinstance(wec_type, Path): - wec_type_path = wec_type + elif isinstance(wec, Path): + wec_path = wec - with open(wec_type_path) as f: + with open(wec_path) as f: conf = yaml.safe_load(f) return conf @@ -538,7 +537,7 @@ def get_oedb_windturbineconfig( # Global caches _oedb_turbines = None windturbines = arrowdict({p.stem: p for p in WINDTURBINE_DIRECTORY.glob("*.yaml")}) -wecgenerators = arrowdict({p.stem: p for p in WECGENERATOR_DIRECTORY.glob("*.yaml")}) +waveenergyconverter = arrowdict({p.stem: p for p in WAVEENERGYCONVERTER_DIRECTORY.glob("*.yaml")}) solarpanels = arrowdict({p.stem: p for p in SOLARPANEL_DIRECTORY.glob("*.yaml")}) cspinstallations = arrowdict( {p.stem: p for p in CSPINSTALLATION_DIRECTORY.glob("*.yaml")} diff --git a/atlite/resources/wecgenerator/Farshore_750kW.yaml b/atlite/resources/waveenergyconverter/Farshore_750kW.yaml similarity index 100% rename from atlite/resources/wecgenerator/Farshore_750kW.yaml rename to atlite/resources/waveenergyconverter/Farshore_750kW.yaml diff --git a/atlite/resources/wecgenerator/Nearshore_400kW.yaml b/atlite/resources/waveenergyconverter/Nearshore_400kW.yaml similarity index 100% rename from atlite/resources/wecgenerator/Nearshore_400kW.yaml rename to atlite/resources/waveenergyconverter/Nearshore_400kW.yaml diff --git a/atlite/resources/wecgenerator/Shallow_290kW.yaml b/atlite/resources/waveenergyconverter/Shallow_290kW.yaml similarity index 100% rename from atlite/resources/wecgenerator/Shallow_290kW.yaml rename to atlite/resources/waveenergyconverter/Shallow_290kW.yaml From 400b591f833bc55cd2993bc2fabae805cf09b01c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 14 Nov 2025 10:43:50 +0000 Subject: [PATCH 17/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 7 ++----- atlite/resource.py | 5 ++++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index f5539dbf..d5c1c7e4 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -656,7 +656,7 @@ def wind( # wave def convert_wave(ds, wec): - """ + r""" Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. @@ -754,10 +754,7 @@ def wave(cutout, wec, **params): if isinstance(wec, str | Path): wec = get_waveenergyconverter(wec) - return cutout.convert_and_aggregate( - convert_func=convert_wave, - wec=wec, - **params) + return cutout.convert_and_aggregate(convert_func=convert_wave, wec=wec, **params) def convert_irradiation( diff --git a/atlite/resource.py b/atlite/resource.py index c81bd034..64844f9f 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,6 +114,7 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) + def get_waveenergyconverter(wec): """ Load the wec wec_type power matrix @@ -537,7 +538,9 @@ def get_oedb_windturbineconfig( # Global caches _oedb_turbines = None windturbines = arrowdict({p.stem: p for p in WINDTURBINE_DIRECTORY.glob("*.yaml")}) -waveenergyconverter = arrowdict({p.stem: p for p in WAVEENERGYCONVERTER_DIRECTORY.glob("*.yaml")}) +waveenergyconverter = arrowdict( + {p.stem: p for p in WAVEENERGYCONVERTER_DIRECTORY.glob("*.yaml")} +) solarpanels = arrowdict({p.stem: p for p in SOLARPANEL_DIRECTORY.glob("*.yaml")}) cspinstallations = arrowdict( {p.stem: p for p in CSPINSTALLATION_DIRECTORY.glob("*.yaml")} From 4a3e2a27ba01dda78cc7fac5d8d98b4d590cc1c7 Mon Sep 17 00:00:00 2001 From: lmezilis Date: Thu, 20 Nov 2025 15:59:12 +0100 Subject: [PATCH 18/29] cutout example MREL --- examples/create_cutout_ECHOWAVE.ipynb | 287 ++++++++++++++++++ examples/create_cutout_ECHOWAVE.ipynb.license | 3 + examples/mrel_era5.png | Bin 0 -> 174607 bytes 3 files changed, 290 insertions(+) create mode 100644 examples/create_cutout_ECHOWAVE.ipynb create mode 100644 examples/create_cutout_ECHOWAVE.ipynb.license create mode 100644 examples/mrel_era5.png diff --git a/examples/create_cutout_ECHOWAVE.ipynb b/examples/create_cutout_ECHOWAVE.ipynb new file mode 100644 index 00000000..cefca12a --- /dev/null +++ b/examples/create_cutout_ECHOWAVE.ipynb @@ -0,0 +1,287 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Creating a Cutout with the MREL (ECHOWAVE) dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This walkthrough describes the process of creating a cutout using the [MREL (ECHOWAVE)](https://opendap.4tu.nl/thredds/catalog/data2/djht/f359cd0f-d135-416c-9118-e79dccba57b9/1/catalog.html). \n", + "\n", + "The repository contains datasets for multiple years, ranging from 1990 to 2021 for the region of North-West Europe. A downloaded ECHOWAVE dataset contains extensive information on wave, wind and currents variables and more. For the purposes of the `mrel_wave` module only two wave components are used: `hs: wave height (m)`, and `fp: peak wave frequency (Hz)` (which is transformed into `tp: wave peak period (m)`). These provide the combinations of climate variables used in the `Power_Matrix` to convert metocean data to power.\n", + "\n", + "> **Notes**:\n", + ">\n", + "> 1. For creating a cutout from this dataset, you need to download large files and your computers memory needs to be able to handle these as well.\n", + ">\n", + "> 2. The `era5` module has been updated aswell to include the same wave variables under the `wave` feature, so a user has the option to use wave energy converters with an ERA5 dataset. Their memory usage is significantly lower as the grid resolution is also lower." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Downloading the data set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To download the dataset from the TUDelft repository (OPeNDAP data service):\n", + "\n", + "https://opendap.4tu.nl/thredds/catalog/data2/djht/f359cd0f-d135-416c-9118-e79dccba57b9/1/catalog.html\n", + "\n", + "Variables that are downloaded \n", + "\n", + "| variable | time span\n", + "| --- | --- |\n", + "| MAPSTA | status map\n", + "| crs | None\n", + "| dpt | depth\n", + "| ucur | eastward current\n", + "| vcur | northward current\n", + "| uwnd | eastward_wind\n", + "| vwnd | northward_wind\n", + "| wlv | sea surface height above sea level\n", + "| ice | sea ice area fraction\n", + "| hs | significant height of wind and swell waves\n", + "| lm | mean wave length\n", + "| t02 | mean period T02\n", + "| t01 | mean period T01\n", + "| fp | wave peak frequency\n", + "| dir | wave mean direction\n", + "| spr | directional spread\n", + "| dp | peak direction\n", + "| phs0 | wave significant height partition 0\n", + "| phs1 | wave significant height partition 1\n", + "| phs2 | wave significant height partition 2\n", + "| ptp0 | peak period partition 0\n", + "| ptp1 | peak period partition 1\n", + "| ptp2 | peak period partition 2\n", + "| pdir0 | wave mean direction partition 0\n", + "| pdir1 | wave mean direction partition 1\n", + "| pdir2 | wave mean direction partition 2\n", + "| pdp0 | peak direction partition 0\n", + "| pdp1 | peak direction partition 1\n", + "| pdp2 | peak direction partition 2\n", + "\n", + "* Directly download each file manually and store them in a new folder.\n", + "* Use the script below to merge the datasets into one, and keep only the used variables (highlighted above).\n", + "\n", + "The **documentation** of the datasets can be found [here](https://data.4tu.nl/datasets/f359cd0f-d135-416c-9118-e79dccba57b9/1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os \n", + "import xarray as xr\n", + "\n", + "# edit your folder path\n", + "your_directory = \"path/to/folder\"\n", + "\n", + "files = [os.path.join(your_directory, f) for f in os.listdir(your_directory) if f.endswith(\".nc\")]\n", + "datasets = [xr.open_dataset(f, chunks={\"time\": 100})[[\"fp\", \"hs\"]] for f in files]\n", + "\n", + "ds = xr.concat(datasets, dim=\"time\")\n", + "\n", + "# example years\n", + "year = '2018'\n", + "month = '01-03'\n", + "ds.to_netcdf(os.path.join(your_directory, f\"TU-MREL-2M_{year}_{month}.nc\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Specifying the cutout" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import the package and set recommended logging settings:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "import atlite\n", + "\n", + "logging.basicConfig(level=logging.INFO)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:atlite.cutout:Building new cutout ...path\\to\\mrel_NW_europe_2018_02.nc\n" + ] + } + ], + "source": [ + "cutout = atlite.Cutout(\n", + " path=\"...path/to/mrel_NW_europe_2018_02.nc\",\n", + " data_path=\"...path/to/TU-MREL_EU_ATL-2M_201802.nc\",\n", + " module=\"mrel_wave\",\n", + " x=slice(-12., 9.),\n", + " y=slice(40., 62.),\n", + " dx = 0.03,\n", + " dy = 0.03,\n", + " time=slice(\"2018-02-01\", \"2018-02-28\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparison with ERA5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The ECHOWAVE dataset has a horizontal resolution of 0.03 degrees per direction. This results in a better representation of the coastlines, which is critical for wave devices deployment. \n", + "\n", + "Comparing it with the ERA5 dataset, which has a resolution of 0.3 degrees, we see that the gaps of ECHOWAVE near the shores are smaller, but also the level of accuracy is higher. In the picture below, which shows Northern Ireland, we can see that the incoming waves from the Atlantic have significantly higher wave height `hs` values in the ECHOWAVE dataset, while those resources can reach the coasts of the island. On the other hand ERA5, has a difficulty showcasing both coastline and resource accuracy. This is a significant improvement for wave device deployment as it increases their availability.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Echowave](mrel_era5.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see what the available features that is the available weather data variables are." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.available_features.to_frame()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preparing the Cutout\n", + "\n", + "No matter which dataset you use, this is where all the work actually happens.\n", + "This can be fast or take some or a lot of time and resources, among others depending on\n", + "your computer ressources." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.prepare()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Querying the cutout gives us basic information on which data is contained and can already be used." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inspecting the Cutout" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout # basic information" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.data.attrs # cutout meta data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.prepared_features # included weather variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.data # access to underlying xarray data" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pypsa-eur", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/examples/create_cutout_ECHOWAVE.ipynb.license b/examples/create_cutout_ECHOWAVE.ipynb.license new file mode 100644 index 00000000..6bf7929c --- /dev/null +++ b/examples/create_cutout_ECHOWAVE.ipynb.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: Contributors to atlite + +SPDX-License-Identifier: MIT diff --git a/examples/mrel_era5.png b/examples/mrel_era5.png new file mode 100644 index 0000000000000000000000000000000000000000..ea355e2d70c370df67b06ed460a9e42d04ad8e49 GIT binary patch literal 174607 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 A Date: Thu, 20 Nov 2025 15:06:29 +0000 Subject: [PATCH 19/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- examples/create_cutout_ECHOWAVE.ipynb | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/examples/create_cutout_ECHOWAVE.ipynb b/examples/create_cutout_ECHOWAVE.ipynb index cefca12a..c8a468eb 100644 --- a/examples/create_cutout_ECHOWAVE.ipynb +++ b/examples/create_cutout_ECHOWAVE.ipynb @@ -83,20 +83,25 @@ "metadata": {}, "outputs": [], "source": [ - "import os \n", + "import os\n", + "\n", "import xarray as xr\n", "\n", "# edit your folder path\n", "your_directory = \"path/to/folder\"\n", "\n", - "files = [os.path.join(your_directory, f) for f in os.listdir(your_directory) if f.endswith(\".nc\")]\n", + "files = [\n", + " os.path.join(your_directory, f)\n", + " for f in os.listdir(your_directory)\n", + " if f.endswith(\".nc\")\n", + "]\n", "datasets = [xr.open_dataset(f, chunks={\"time\": 100})[[\"fp\", \"hs\"]] for f in files]\n", "\n", "ds = xr.concat(datasets, dim=\"time\")\n", "\n", "# example years\n", - "year = '2018'\n", - "month = '01-03'\n", + "year = \"2018\"\n", + "month = \"01-03\"\n", "ds.to_netcdf(os.path.join(your_directory, f\"TU-MREL-2M_{year}_{month}.nc\"))" ] }, @@ -145,10 +150,10 @@ " path=\"...path/to/mrel_NW_europe_2018_02.nc\",\n", " data_path=\"...path/to/TU-MREL_EU_ATL-2M_201802.nc\",\n", " module=\"mrel_wave\",\n", - " x=slice(-12., 9.),\n", - " y=slice(40., 62.),\n", - " dx = 0.03,\n", - " dy = 0.03,\n", + " x=slice(-12.0, 9.0),\n", + " y=slice(40.0, 62.0),\n", + " dx=0.03,\n", + " dy=0.03,\n", " time=slice(\"2018-02-01\", \"2018-02-28\"),\n", ")" ] From 66a2d655e248af9ddf7ea6b1eedcb30800ba3f12 Mon Sep 17 00:00:00 2001 From: lmezilis Date: Thu, 20 Nov 2025 10:23:32 +0100 Subject: [PATCH 20/29] update convert function --- atlite/convert.py | 81 ++++++++++++--------------- atlite/datasets/__init__.py | 3 +- atlite/datasets/cerra.py | 72 ------------------------ atlite/datasets/mrel_wave.py | 15 ++--- atlite/resource.py | 17 +++--- examples/create_cutout_ECHOWAVE.ipynb | 81 +++++++++++++++++++++++++++ 6 files changed, 134 insertions(+), 135 deletions(-) delete mode 100644 atlite/datasets/cerra.py diff --git a/atlite/convert.py b/atlite/convert.py index d5c1c7e4..c7a028bd 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -13,6 +13,7 @@ from operator import itemgetter from pathlib import Path from typing import TYPE_CHECKING +from tqdm import tqdm import geopandas as gpd import numpy as np @@ -655,8 +656,8 @@ def wind( # wave -def convert_wave(ds, wec): - r""" +def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: + """ Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. @@ -664,16 +665,18 @@ def convert_wave(ds, wec): in the dataset to a corresponding power output from the WEC power matrix. The resulting power output is normalized by the maximum possible output (capacity) to obtain the specific generation profile. - + Parameters ---------- ds : xarray.Dataset Input dataset (cutout) containing two variables: wave_height: significant wave height (m) wave_period: peak wave period (s) - wec_type : dict + converter : dict Dictionary defining the WEC characteristics, including: - Power_Matrix: a power matrix dictionary stored in "resources\wecgenerator" + Power_Matrix: a power matrix dictionary stored in `resources\wecgenerator` + time_chunk_size : int + Size of time chunks for processing large datasets, to limit memory spikes. Default is 100. Returns ------- @@ -684,50 +687,35 @@ def convert_wave(ds, wec): ----- A progress message is printed every one million cases to track computation. """ - - power_matrix = pd.DataFrame.from_dict(wec["Power_Matrix"]) - max_pow = power_matrix.to_numpy().max() - - Hs = np.ceil(ds["wave_height"] * 2) / 2 - Tp = np.ceil(ds["wave_period"] * 2) / 2 - - Hs_list = Hs.to_numpy().flatten().tolist() - Tp_list = Tp.to_numpy().flatten().tolist() - - # empty list for result - power_list = [] - cases = len(Hs_list) - count = 0 - - # for loop to loop through Hs and Tp pairs and get the power output and capacity factor - for Hs_ind, Tp_ind in zip(Hs_list, Tp_list): - if count % 1000000 == 0: - print(f"Case {count} of {cases}: %") - if np.isnan(Hs_ind) or np.isnan(Tp_ind): - power_list.append(0) - elif Hs_ind > 10 or Tp_ind > 18: - power_list.append(0) - else: - generated_power = power_matrix.loc[Hs_ind, Tp_ind] - power_list.append(generated_power / max_pow) - count += 1 - - # results list to numpy array - power_list_np = np.array(power_list) - - power_list_np = power_list_np.reshape(Hs.shape) - - da = xr.DataArray( - power_list_np, coords=Hs.coords, dims=Hs.dims, name="Power generated" + power_matrix = ( + pd.DataFrame.from_dict(converter["Power_Matrix"]) + .stack() + .rename_axis(index=["wave_height", "wave_period"]) + .where(lambda x: x > 0) + .dropna() + .to_xarray() ) + + results = [] + steps = np.arange(0, len(ds.time), step=100) + + for step in tqdm(steps, desc="Processing wave data chunks", total=len(steps), unit="time chunk"): + ds_ = ds.isel(time=slice(step, step + time_chunk_size)) + cf = power_matrix.interp( + {"wave_height": ds_.wave_height, "wave_period": ds_.wave_period}, + method="nearest", + ) + results.append(cf) + + da = xr.concat(results, dim="time") da.attrs["units"] = "kWh/kWp" da = da.rename("specific generation") da = da.fillna(0) - + return da -def wave(cutout, wec, **params): +def wave(cutout, converter, **params): """ Compute wave energy generation time series for a given cutout and Wave Energy Converter (WEC) type. @@ -751,10 +739,13 @@ def wave(cutout, wec, **params): opportunities, and untapped potential for 100% decarbonised systems. Energy, Volume 336, 2025, 138359, ISSN 0360-5442, https://doi.org/10.1016/j.energy.2025.138359. """ - if isinstance(wec, str | Path): - wec = get_waveenergyconverter(wec) + if isinstance(converter, str | Path): + converter = get_waveenergyconverter(converter) - return cutout.convert_and_aggregate(convert_func=convert_wave, wec=wec, **params) + return cutout.convert_and_aggregate( + convert_func=convert_wave, + converter=converter, + **params) def convert_irradiation( diff --git a/atlite/datasets/__init__.py b/atlite/datasets/__init__.py index 58198598..249eb8af 100644 --- a/atlite/datasets/__init__.py +++ b/atlite/datasets/__init__.py @@ -6,12 +6,11 @@ atlite datasets. """ -from atlite.datasets import cerra, era5, gebco, mrel_wave, sarah +from atlite.datasets import era5, gebco, mrel_wave, sarah modules = { "era5": era5, "sarah": sarah, "mrel_wave": mrel_wave, - "cerra": cerra, "gebco": gebco, } diff --git a/atlite/datasets/cerra.py b/atlite/datasets/cerra.py deleted file mode 100644 index ff3146f5..00000000 --- a/atlite/datasets/cerra.py +++ /dev/null @@ -1,72 +0,0 @@ -# SPDX-FileCopyrightText: Contributors to atlite -# -# SPDX-License-Identifier: MIT - -""" -In order to create a CERRA cutout, the data must be manually downloaded from the Climate Data Store. -The variable used is "10m wind speed" and there is not a direction component in it. -This 10m wind speed was transformed into a 100m wind speed in order to follow the rest of atlite's processes. -""" - -import logging - -import numpy as np -import xarray as xr -from rasterio.warp import Resampling - -from atlite.gis import regrid - -logger = logging.getLogger(__name__) - -crs = 4326 -dx = 0.05 -dy = 0.05 - -features = {"wind": ["wnd100m", "roughness"]} - - -def as_slice(bounds, pad=True): - """ - Convert coordinate bounds to slice and pad by 0.01. - """ - if not isinstance(bounds, slice): - bounds = bounds + (-0.01, 0.01) - bounds = slice(*bounds) - return bounds - - -def get_data(cutout, feature, tmpdir, **creation_parameters): - """ - Retrieve data from a local CERRA dataset and process it. - """ - coords = cutout.coords - - if "data_path" not in creation_parameters: - logger.error('Argument "data_path" not defined') - raise ValueError('Argument "data_path" not defined') - path = creation_parameters["data_path"] - - ds = xr.open_dataset(path) - - ds = ds.sel(x=as_slice(cutout.extent[:2]), y=as_slice(cutout.extent[2:])) - ds = ds.assign_coords(x=ds.x.astype(float).round(4), y=ds.y.astype(float).round(4)) - - if (cutout.dx != dx) or (cutout.dy != dy): - ds = regrid(ds, coords["x"], coords["y"], resampling=Resampling.average) - - if "sr" in ds: - ds = ds.rename({"sr": "roughness"}) - - logger.info("Calculating 100 metre wind speed") - if "si10" in ds and "roughness" in ds: - ds["wnd100m"] = ( - ds["si10"] * (np.log(100 / ds["roughness"]) / np.log(10 / ds["roughness"])) - ).assign_attrs(units="m s**-1", long_name="100 metre wind speed") - ds = ds.drop_vars("si10") - - ds = ds.assign_coords(x=ds.coords["x"], y=ds.coords["y"]) - - logger.info("Resampling to 1H.") - ds = ds.resample(time="1h").interpolate("linear") - - return ds diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index 25f8c72a..6d435ffe 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -11,7 +11,6 @@ """ import logging - import numpy as np import xarray as xr from rasterio.warp import Resampling @@ -21,17 +20,17 @@ logger = logging.getLogger(__name__) crs = 4326 -dx = 0.0625 -dy = 0.04 - -features = {"hs": "wave_height", "tp": "wave_period"} +dx = 0.03 +dy = 0.03 +features = {"hs": "wave_height", "fp": "wave_period"} def _rename_and_clean_coords(ds, cutout): """ Rename 'longitude' and 'latitude' columns to 'x' and 'y', fix roundings and grid dimensions. """ coords = cutout.coords + if "longitude" in ds and "latitude" in ds: ds = ds.rename({"longitude": "x", "latitude": "y"}) # round coords since cds coords are float32 which would lead to mismatches @@ -69,7 +68,6 @@ def _bounds(coords, pad: float = 0) -> dict[str, slice]: return {"x": slice(x0, x1), "y": slice(y0, y1)} - def get_data(cutout, feature, tmpdir, **creation_parameters): """ Load stored MREL (ECHOWAVE) data and reformat to matching the given cutout. @@ -103,7 +101,10 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): bounds = _bounds(cutout.coords, pad=creation_parameters.get("pad", 0)) ds = ds.sel(**bounds) - ds = ds[list(features.values())].rename(features) + # invert the wave peak frequency to obrain wave peak period + ds['tp'] = (1 / ds['fp']) + + ds = ds[list(features.keys())].rename(features) for feature in features.values(): sanitize_func = globals().get(f"sanitize_{feature}") if sanitize_func is not None: diff --git a/atlite/resource.py b/atlite/resource.py index 64844f9f..50e7c80b 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,22 +114,21 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) - -def get_waveenergyconverter(wec): +def get_waveenergyconverter(converter): """ - Load the wec wec_type power matrix + Load the wave energy converter power matrix the configuration can either be one from local storage then 'wec_type' is considered part of the file base name '.yaml' """ - assert isinstance(wec, (str | Path)) + assert isinstance(converter, (str | Path)) - if isinstance(wec, str): - wec_path = waveenergyconverter[wec.replace(".yaml", "")] + if isinstance(converter, str): + converter_path = waveenergyconverter[converter.replace(".yaml", "")] - elif isinstance(wec, Path): - wec_path = wec + elif isinstance(converter, Path): + converter_path = converter - with open(wec_path) as f: + with open(converter_path) as f: conf = yaml.safe_load(f) return conf diff --git a/examples/create_cutout_ECHOWAVE.ipynb b/examples/create_cutout_ECHOWAVE.ipynb index cefca12a..caaff0f9 100644 --- a/examples/create_cutout_ECHOWAVE.ipynb +++ b/examples/create_cutout_ECHOWAVE.ipynb @@ -72,14 +72,22 @@ "| pdp2 | peak direction partition 2\n", "\n", "* Directly download each file manually and store them in a new folder.\n", +<<<<<<< HEAD "* Use the script below to merge the datasets into one, and keep only the used variables (highlighted above).\n", +======= + "* Use the following script to merge the datasets into one, and keep only the used variables (highlighted above).\n", +>>>>>>> dbe3302 (update convert function) "\n", "The **documentation** of the datasets can be found [here](https://data.4tu.nl/datasets/f359cd0f-d135-416c-9118-e79dccba57b9/1)" ] }, { "cell_type": "code", +<<<<<<< HEAD "execution_count": null, +======= + "execution_count": 4, +>>>>>>> dbe3302 (update convert function) "metadata": {}, "outputs": [], "source": [ @@ -94,7 +102,11 @@ "\n", "ds = xr.concat(datasets, dim=\"time\")\n", "\n", +<<<<<<< HEAD "# example years\n", +======= + "# change this for the correct time \n", +>>>>>>> dbe3302 (update convert function) "year = '2018'\n", "month = '01-03'\n", "ds.to_netcdf(os.path.join(your_directory, f\"TU-MREL-2M_{year}_{month}.nc\"))" @@ -157,6 +169,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ +<<<<<<< HEAD "## Comparison with ERA5" ] }, @@ -180,14 +193,78 @@ "cell_type": "markdown", "metadata": {}, "source": [ +======= +>>>>>>> dbe3302 (update convert function) "Let's see what the available features that is the available weather data variables are." ] }, { "cell_type": "code", +<<<<<<< HEAD "execution_count": null, "metadata": {}, "outputs": [], +======= + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "

\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
variables
modulefeature
mrel_wavehswave_height
t01wave_period
\n", + "
" + ], + "text/plain": [ + " variables\n", + "module feature \n", + "mrel_wave hs wave_height\n", + " t01 wave_period" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], +>>>>>>> dbe3302 (update convert function) "source": [ "cutout.available_features.to_frame()" ] @@ -200,7 +277,11 @@ "\n", "No matter which dataset you use, this is where all the work actually happens.\n", "This can be fast or take some or a lot of time and resources, among others depending on\n", +<<<<<<< HEAD "your computer ressources." +======= + "your computer ressources (especially memory for SARAH-2)." +>>>>>>> dbe3302 (update convert function) ] }, { From 58d0a2c378de3affb58553d0b0469c011c97f5c2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 15:15:23 +0000 Subject: [PATCH 21/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 23 +- atlite/datasets/__init__.py | 2 +- atlite/datasets/mrel_wave.py | 9 +- atlite/resource.py | 1 + examples/create_cutout_ECHOWAVE.ipynb | 694 +++++++++++++------------- 5 files changed, 367 insertions(+), 362 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index c7a028bd..3b659990 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -13,7 +13,6 @@ from operator import itemgetter from pathlib import Path from typing import TYPE_CHECKING -from tqdm import tqdm import geopandas as gpd import numpy as np @@ -24,6 +23,7 @@ from dask.diagnostics import ProgressBar from numpy import pi from scipy.sparse import csr_matrix +from tqdm import tqdm from atlite import csp as cspm from atlite import hydro as hydrom @@ -657,7 +657,7 @@ def wind( # wave def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: - """ + r""" Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. @@ -665,7 +665,7 @@ def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: in the dataset to a corresponding power output from the WEC power matrix. The resulting power output is normalized by the maximum possible output (capacity) to obtain the specific generation profile. - + Parameters ---------- ds : xarray.Dataset @@ -695,23 +695,25 @@ def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: .dropna() .to_xarray() ) - + results = [] steps = np.arange(0, len(ds.time), step=100) - - for step in tqdm(steps, desc="Processing wave data chunks", total=len(steps), unit="time chunk"): + + for step in tqdm( + steps, desc="Processing wave data chunks", total=len(steps), unit="time chunk" + ): ds_ = ds.isel(time=slice(step, step + time_chunk_size)) cf = power_matrix.interp( {"wave_height": ds_.wave_height, "wave_period": ds_.wave_period}, method="nearest", ) results.append(cf) - + da = xr.concat(results, dim="time") da.attrs["units"] = "kWh/kWp" da = da.rename("specific generation") da = da.fillna(0) - + return da @@ -743,9 +745,8 @@ def wave(cutout, converter, **params): converter = get_waveenergyconverter(converter) return cutout.convert_and_aggregate( - convert_func=convert_wave, - converter=converter, - **params) + convert_func=convert_wave, converter=converter, **params + ) def convert_irradiation( diff --git a/atlite/datasets/__init__.py b/atlite/datasets/__init__.py index 249eb8af..217dfd29 100644 --- a/atlite/datasets/__init__.py +++ b/atlite/datasets/__init__.py @@ -6,7 +6,7 @@ atlite datasets. """ -from atlite.datasets import era5, gebco, mrel_wave, sarah +from atlite.datasets import era5, gebco, mrel_wave, sarah modules = { "era5": era5, diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index 6d435ffe..4595e9cd 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -11,6 +11,7 @@ """ import logging + import numpy as np import xarray as xr from rasterio.warp import Resampling @@ -25,12 +26,13 @@ features = {"hs": "wave_height", "fp": "wave_period"} + def _rename_and_clean_coords(ds, cutout): """ Rename 'longitude' and 'latitude' columns to 'x' and 'y', fix roundings and grid dimensions. """ coords = cutout.coords - + if "longitude" in ds and "latitude" in ds: ds = ds.rename({"longitude": "x", "latitude": "y"}) # round coords since cds coords are float32 which would lead to mismatches @@ -68,6 +70,7 @@ def _bounds(coords, pad: float = 0) -> dict[str, slice]: return {"x": slice(x0, x1), "y": slice(y0, y1)} + def get_data(cutout, feature, tmpdir, **creation_parameters): """ Load stored MREL (ECHOWAVE) data and reformat to matching the given cutout. @@ -102,8 +105,8 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = ds.sel(**bounds) # invert the wave peak frequency to obrain wave peak period - ds['tp'] = (1 / ds['fp']) - + ds["tp"] = 1 / ds["fp"] + ds = ds[list(features.keys())].rename(features) for feature in features.values(): sanitize_func = globals().get(f"sanitize_{feature}") diff --git a/atlite/resource.py b/atlite/resource.py index 50e7c80b..882c526e 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,6 +114,7 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) + def get_waveenergyconverter(converter): """ Load the wave energy converter power matrix diff --git a/examples/create_cutout_ECHOWAVE.ipynb b/examples/create_cutout_ECHOWAVE.ipynb index 93ca9234..073d03a5 100644 --- a/examples/create_cutout_ECHOWAVE.ipynb +++ b/examples/create_cutout_ECHOWAVE.ipynb @@ -1,349 +1,349 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Creating a Cutout with the MREL (ECHOWAVE) dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This walkthrough describes the process of creating a cutout using the [MREL (ECHOWAVE)](https://opendap.4tu.nl/thredds/catalog/data2/djht/f359cd0f-d135-416c-9118-e79dccba57b9/1/catalog.html). \n", - "\n", - "The repository contains datasets for multiple years, ranging from 1990 to 2021 for the region of North-West Europe. A downloaded ECHOWAVE dataset contains extensive information on wave, wind and currents variables and more. For the purposes of the `mrel_wave` module only two wave components are used: `hs: wave height (m)`, and `fp: peak wave frequency (Hz)` (which is transformed into `tp: wave peak period (m)`). These provide the combinations of climate variables used in the `Power_Matrix` to convert metocean data to power.\n", - "\n", - "> **Notes**:\n", - ">\n", - "> 1. For creating a cutout from this dataset, you need to download large files and your computers memory needs to be able to handle these as well.\n", - ">\n", - "> 2. The `era5` module has been updated aswell to include the same wave variables under the `wave` feature, so a user has the option to use wave energy converters with an ERA5 dataset. Their memory usage is significantly lower as the grid resolution is also lower." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Downloading the data set" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To download the dataset from the TUDelft repository (OPeNDAP data service):\n", - "\n", - "https://opendap.4tu.nl/thredds/catalog/data2/djht/f359cd0f-d135-416c-9118-e79dccba57b9/1/catalog.html\n", - "\n", - "Variables that are downloaded \n", - "\n", - "| variable | time span\n", - "| --- | --- |\n", - "| MAPSTA | status map\n", - "| crs | None\n", - "| dpt | depth\n", - "| ucur | eastward current\n", - "| vcur | northward current\n", - "| uwnd | eastward_wind\n", - "| vwnd | northward_wind\n", - "| wlv | sea surface height above sea level\n", - "| ice | sea ice area fraction\n", - "| hs | significant height of wind and swell waves\n", - "| lm | mean wave length\n", - "| t02 | mean period T02\n", - "| t01 | mean period T01\n", - "| fp | wave peak frequency\n", - "| dir | wave mean direction\n", - "| spr | directional spread\n", - "| dp | peak direction\n", - "| phs0 | wave significant height partition 0\n", - "| phs1 | wave significant height partition 1\n", - "| phs2 | wave significant height partition 2\n", - "| ptp0 | peak period partition 0\n", - "| ptp1 | peak period partition 1\n", - "| ptp2 | peak period partition 2\n", - "| pdir0 | wave mean direction partition 0\n", - "| pdir1 | wave mean direction partition 1\n", - "| pdir2 | wave mean direction partition 2\n", - "| pdp0 | peak direction partition 0\n", - "| pdp1 | peak direction partition 1\n", - "| pdp2 | peak direction partition 2\n", - "\n", - "* Directly download each file manually and store them in a new folder.\n", - "* Use the following script to merge the datasets into one, and keep only the used variables (highlighted above).\n", - "\n", - "The **documentation** of the datasets can be found [here](https://data.4tu.nl/datasets/f359cd0f-d135-416c-9118-e79dccba57b9/1)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "import xarray as xr\n", - "\n", - "# edit your folder path\n", - "your_directory = \"path/to/folder\"\n", - "\n", - "files = [\n", - " os.path.join(your_directory, f)\n", - " for f in os.listdir(your_directory)\n", - " if f.endswith(\".nc\")\n", - "]\n", - "datasets = [xr.open_dataset(f, chunks={\"time\": 100})[[\"fp\", \"hs\"]] for f in files]\n", - "\n", - "ds = xr.concat(datasets, dim=\"time\")\n", - "\n", - "# example years\n", - "\n", - "year = '2018'\n", - "month = '01-03'\n", - "ds.to_netcdf(os.path.join(your_directory, f\"TU-MREL-2M_{year}_{month}.nc\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Specifying the cutout" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Import the package and set recommended logging settings:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "import atlite\n", - "\n", - "logging.basicConfig(level=logging.INFO)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:atlite.cutout:Building new cutout ...path\\to\\mrel_NW_europe_2018_02.nc\n" - ] - } - ], - "source": [ - "cutout = atlite.Cutout(\n", - " path=\"...path/to/mrel_NW_europe_2018_02.nc\",\n", - " data_path=\"...path/to/TU-MREL_EU_ATL-2M_201802.nc\",\n", - " module=\"mrel_wave\",\n", - " x=slice(-12.0, 9.0),\n", - " y=slice(40.0, 62.0),\n", - " dx=0.03,\n", - " dy=0.03,\n", - " time=slice(\"2018-02-01\", \"2018-02-28\"),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Comparison with ERA5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The ECHOWAVE dataset has a horizontal resolution of 0.03 degrees per direction. This results in a better representation of the coastlines, which is critical for wave devices deployment. \n", - "\n", - "Comparing it with the ERA5 dataset, which has a resolution of 0.3 degrees, we see that the gaps of ECHOWAVE near the shores are smaller, but also the level of accuracy is higher. In the picture below, which shows Northern Ireland, we can see that the incoming waves from the Atlantic have significantly higher wave height `hs` values in the ECHOWAVE dataset, while those resources can reach the coasts of the island. On the other hand ERA5, has a difficulty showcasing both coastline and resource accuracy. This is a significant improvement for wave device deployment as it increases their availability.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![Echowave](mrel_era5.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's see what the available features that is the available weather data variables are." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
variables
modulefeature
mrel_wavehswave_height
t01wave_period
\n", - "
" - ], - "text/plain": [ - " variables\n", - "module feature \n", - "mrel_wave hs wave_height\n", - " t01 wave_period" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "cutout.available_features.to_frame()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Preparing the Cutout\n", - "\n", - "No matter which dataset you use, this is where all the work actually happens.\n", - "This can be fast or take some or a lot of time and resources, among others depending on\n", - "your computer ressources." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout.prepare()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Querying the cutout gives us basic information on which data is contained and can already be used." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Inspecting the Cutout" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout # basic information" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout.data.attrs # cutout meta data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout.prepared_features # included weather variables" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout.data # access to underlying xarray data" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pypsa-eur", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Creating a Cutout with the MREL (ECHOWAVE) dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This walkthrough describes the process of creating a cutout using the [MREL (ECHOWAVE)](https://opendap.4tu.nl/thredds/catalog/data2/djht/f359cd0f-d135-416c-9118-e79dccba57b9/1/catalog.html). \n", + "\n", + "The repository contains datasets for multiple years, ranging from 1990 to 2021 for the region of North-West Europe. A downloaded ECHOWAVE dataset contains extensive information on wave, wind and currents variables and more. For the purposes of the `mrel_wave` module only two wave components are used: `hs: wave height (m)`, and `fp: peak wave frequency (Hz)` (which is transformed into `tp: wave peak period (m)`). These provide the combinations of climate variables used in the `Power_Matrix` to convert metocean data to power.\n", + "\n", + "> **Notes**:\n", + ">\n", + "> 1. For creating a cutout from this dataset, you need to download large files and your computers memory needs to be able to handle these as well.\n", + ">\n", + "> 2. The `era5` module has been updated aswell to include the same wave variables under the `wave` feature, so a user has the option to use wave energy converters with an ERA5 dataset. Their memory usage is significantly lower as the grid resolution is also lower." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Downloading the data set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To download the dataset from the TUDelft repository (OPeNDAP data service):\n", + "\n", + "https://opendap.4tu.nl/thredds/catalog/data2/djht/f359cd0f-d135-416c-9118-e79dccba57b9/1/catalog.html\n", + "\n", + "Variables that are downloaded \n", + "\n", + "| variable | time span\n", + "| --- | --- |\n", + "| MAPSTA | status map\n", + "| crs | None\n", + "| dpt | depth\n", + "| ucur | eastward current\n", + "| vcur | northward current\n", + "| uwnd | eastward_wind\n", + "| vwnd | northward_wind\n", + "| wlv | sea surface height above sea level\n", + "| ice | sea ice area fraction\n", + "| hs | significant height of wind and swell waves\n", + "| lm | mean wave length\n", + "| t02 | mean period T02\n", + "| t01 | mean period T01\n", + "| fp | wave peak frequency\n", + "| dir | wave mean direction\n", + "| spr | directional spread\n", + "| dp | peak direction\n", + "| phs0 | wave significant height partition 0\n", + "| phs1 | wave significant height partition 1\n", + "| phs2 | wave significant height partition 2\n", + "| ptp0 | peak period partition 0\n", + "| ptp1 | peak period partition 1\n", + "| ptp2 | peak period partition 2\n", + "| pdir0 | wave mean direction partition 0\n", + "| pdir1 | wave mean direction partition 1\n", + "| pdir2 | wave mean direction partition 2\n", + "| pdp0 | peak direction partition 0\n", + "| pdp1 | peak direction partition 1\n", + "| pdp2 | peak direction partition 2\n", + "\n", + "* Directly download each file manually and store them in a new folder.\n", + "* Use the following script to merge the datasets into one, and keep only the used variables (highlighted above).\n", + "\n", + "The **documentation** of the datasets can be found [here](https://data.4tu.nl/datasets/f359cd0f-d135-416c-9118-e79dccba57b9/1)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import xarray as xr\n", + "\n", + "# edit your folder path\n", + "your_directory = \"path/to/folder\"\n", + "\n", + "files = [\n", + " os.path.join(your_directory, f)\n", + " for f in os.listdir(your_directory)\n", + " if f.endswith(\".nc\")\n", + "]\n", + "datasets = [xr.open_dataset(f, chunks={\"time\": 100})[[\"fp\", \"hs\"]] for f in files]\n", + "\n", + "ds = xr.concat(datasets, dim=\"time\")\n", + "\n", + "# example years\n", + "\n", + "year = \"2018\"\n", + "month = \"01-03\"\n", + "ds.to_netcdf(os.path.join(your_directory, f\"TU-MREL-2M_{year}_{month}.nc\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Specifying the cutout" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import the package and set recommended logging settings:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "import atlite\n", + "\n", + "logging.basicConfig(level=logging.INFO)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:atlite.cutout:Building new cutout ...path\\to\\mrel_NW_europe_2018_02.nc\n" + ] + } + ], + "source": [ + "cutout = atlite.Cutout(\n", + " path=\"...path/to/mrel_NW_europe_2018_02.nc\",\n", + " data_path=\"...path/to/TU-MREL_EU_ATL-2M_201802.nc\",\n", + " module=\"mrel_wave\",\n", + " x=slice(-12.0, 9.0),\n", + " y=slice(40.0, 62.0),\n", + " dx=0.03,\n", + " dy=0.03,\n", + " time=slice(\"2018-02-01\", \"2018-02-28\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparison with ERA5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The ECHOWAVE dataset has a horizontal resolution of 0.03 degrees per direction. This results in a better representation of the coastlines, which is critical for wave devices deployment. \n", + "\n", + "Comparing it with the ERA5 dataset, which has a resolution of 0.3 degrees, we see that the gaps of ECHOWAVE near the shores are smaller, but also the level of accuracy is higher. In the picture below, which shows Northern Ireland, we can see that the incoming waves from the Atlantic have significantly higher wave height `hs` values in the ECHOWAVE dataset, while those resources can reach the coasts of the island. On the other hand ERA5, has a difficulty showcasing both coastline and resource accuracy. This is a significant improvement for wave device deployment as it increases their availability.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Echowave](mrel_era5.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see what the available features that is the available weather data variables are." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
variables
modulefeature
mrel_wavehswave_height
t01wave_period
\n", + "
" + ], + "text/plain": [ + " variables\n", + "module feature \n", + "mrel_wave hs wave_height\n", + " t01 wave_period" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cutout.available_features.to_frame()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preparing the Cutout\n", + "\n", + "No matter which dataset you use, this is where all the work actually happens.\n", + "This can be fast or take some or a lot of time and resources, among others depending on\n", + "your computer ressources." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.prepare()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Querying the cutout gives us basic information on which data is contained and can already be used." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inspecting the Cutout" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout # basic information" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.data.attrs # cutout meta data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.prepared_features # included weather variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.data # access to underlying xarray data" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pypsa-eur", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 } \ No newline at end of file From a63d82c0f4fdfd16b0f1be014a64a3edd5d6c61a Mon Sep 17 00:00:00 2001 From: lmezilis Date: Thu, 20 Nov 2025 16:16:07 +0100 Subject: [PATCH 22/29] fix output --- examples/create_cutout_ECHOWAVE.ipynb | 62 ++------------------------- 1 file changed, 3 insertions(+), 59 deletions(-) diff --git a/examples/create_cutout_ECHOWAVE.ipynb b/examples/create_cutout_ECHOWAVE.ipynb index 93ca9234..6daeb8d6 100644 --- a/examples/create_cutout_ECHOWAVE.ipynb +++ b/examples/create_cutout_ECHOWAVE.ipynb @@ -191,65 +191,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
variables
modulefeature
mrel_wavehswave_height
t01wave_period
\n", - "
" - ], - "text/plain": [ - " variables\n", - "module feature \n", - "mrel_wave hs wave_height\n", - " t01 wave_period" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "cutout.available_features.to_frame()" ] @@ -346,4 +290,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} \ No newline at end of file +} From 0c50fa99cd14b7f866094d8cdba034eaf33df6f9 Mon Sep 17 00:00:00 2001 From: lmezilis Date: Thu, 20 Nov 2025 16:20:12 +0100 Subject: [PATCH 23/29] update commit --- atlite/convert.py | 23 ++++++++++++----------- atlite/datasets/__init__.py | 2 +- atlite/datasets/mrel_wave.py | 9 ++++++--- atlite/resource.py | 1 + examples/create_cutout_ECHOWAVE.ipynb | 2 +- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index c7a028bd..3b659990 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -13,7 +13,6 @@ from operator import itemgetter from pathlib import Path from typing import TYPE_CHECKING -from tqdm import tqdm import geopandas as gpd import numpy as np @@ -24,6 +23,7 @@ from dask.diagnostics import ProgressBar from numpy import pi from scipy.sparse import csr_matrix +from tqdm import tqdm from atlite import csp as cspm from atlite import hydro as hydrom @@ -657,7 +657,7 @@ def wind( # wave def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: - """ + r""" Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. @@ -665,7 +665,7 @@ def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: in the dataset to a corresponding power output from the WEC power matrix. The resulting power output is normalized by the maximum possible output (capacity) to obtain the specific generation profile. - + Parameters ---------- ds : xarray.Dataset @@ -695,23 +695,25 @@ def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: .dropna() .to_xarray() ) - + results = [] steps = np.arange(0, len(ds.time), step=100) - - for step in tqdm(steps, desc="Processing wave data chunks", total=len(steps), unit="time chunk"): + + for step in tqdm( + steps, desc="Processing wave data chunks", total=len(steps), unit="time chunk" + ): ds_ = ds.isel(time=slice(step, step + time_chunk_size)) cf = power_matrix.interp( {"wave_height": ds_.wave_height, "wave_period": ds_.wave_period}, method="nearest", ) results.append(cf) - + da = xr.concat(results, dim="time") da.attrs["units"] = "kWh/kWp" da = da.rename("specific generation") da = da.fillna(0) - + return da @@ -743,9 +745,8 @@ def wave(cutout, converter, **params): converter = get_waveenergyconverter(converter) return cutout.convert_and_aggregate( - convert_func=convert_wave, - converter=converter, - **params) + convert_func=convert_wave, converter=converter, **params + ) def convert_irradiation( diff --git a/atlite/datasets/__init__.py b/atlite/datasets/__init__.py index 249eb8af..217dfd29 100644 --- a/atlite/datasets/__init__.py +++ b/atlite/datasets/__init__.py @@ -6,7 +6,7 @@ atlite datasets. """ -from atlite.datasets import era5, gebco, mrel_wave, sarah +from atlite.datasets import era5, gebco, mrel_wave, sarah modules = { "era5": era5, diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index 6d435ffe..4595e9cd 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -11,6 +11,7 @@ """ import logging + import numpy as np import xarray as xr from rasterio.warp import Resampling @@ -25,12 +26,13 @@ features = {"hs": "wave_height", "fp": "wave_period"} + def _rename_and_clean_coords(ds, cutout): """ Rename 'longitude' and 'latitude' columns to 'x' and 'y', fix roundings and grid dimensions. """ coords = cutout.coords - + if "longitude" in ds and "latitude" in ds: ds = ds.rename({"longitude": "x", "latitude": "y"}) # round coords since cds coords are float32 which would lead to mismatches @@ -68,6 +70,7 @@ def _bounds(coords, pad: float = 0) -> dict[str, slice]: return {"x": slice(x0, x1), "y": slice(y0, y1)} + def get_data(cutout, feature, tmpdir, **creation_parameters): """ Load stored MREL (ECHOWAVE) data and reformat to matching the given cutout. @@ -102,8 +105,8 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = ds.sel(**bounds) # invert the wave peak frequency to obrain wave peak period - ds['tp'] = (1 / ds['fp']) - + ds["tp"] = 1 / ds["fp"] + ds = ds[list(features.keys())].rename(features) for feature in features.values(): sanitize_func = globals().get(f"sanitize_{feature}") diff --git a/atlite/resource.py b/atlite/resource.py index 50e7c80b..882c526e 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,6 +114,7 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) + def get_waveenergyconverter(converter): """ Load the wave energy converter power matrix diff --git a/examples/create_cutout_ECHOWAVE.ipynb b/examples/create_cutout_ECHOWAVE.ipynb index 6daeb8d6..6e82febe 100644 --- a/examples/create_cutout_ECHOWAVE.ipynb +++ b/examples/create_cutout_ECHOWAVE.ipynb @@ -290,4 +290,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file From d53fdd6d0ba367ffee2618169d71b26850240eb5 Mon Sep 17 00:00:00 2001 From: lmezilis Date: Thu, 20 Nov 2025 16:20:36 +0100 Subject: [PATCH 24/29] correct syntax --- atlite/convert.py | 2 +- atlite/datasets/mrel_wave.py | 2 +- atlite/resource.py | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index 3b659990..e9e899b9 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -657,7 +657,7 @@ def wind( # wave def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: - r""" + """ Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index 4595e9cd..c4a7fea1 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -105,7 +105,7 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = ds.sel(**bounds) # invert the wave peak frequency to obrain wave peak period - ds["tp"] = 1 / ds["fp"] + ds["tp"] = (1 / ds["fp"]) ds = ds[list(features.keys())].rename(features) for feature in features.values(): diff --git a/atlite/resource.py b/atlite/resource.py index 882c526e..50e7c80b 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,7 +114,6 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) - def get_waveenergyconverter(converter): """ Load the wave energy converter power matrix From 5cc55a8d0134c8b1f2e635fc66ddf2cff379f66f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 15:22:02 +0000 Subject: [PATCH 25/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 2 +- atlite/datasets/mrel_wave.py | 2 +- atlite/resource.py | 1 + examples/create_cutout_ECHOWAVE.ipynb | 582 +++++++++++++------------- 4 files changed, 294 insertions(+), 293 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index e9e899b9..3b659990 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -657,7 +657,7 @@ def wind( # wave def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: - """ + r""" Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index c4a7fea1..4595e9cd 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -105,7 +105,7 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = ds.sel(**bounds) # invert the wave peak frequency to obrain wave peak period - ds["tp"] = (1 / ds["fp"]) + ds["tp"] = 1 / ds["fp"] ds = ds[list(features.keys())].rename(features) for feature in features.values(): diff --git a/atlite/resource.py b/atlite/resource.py index 50e7c80b..882c526e 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,6 +114,7 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) + def get_waveenergyconverter(converter): """ Load the wave energy converter power matrix diff --git a/examples/create_cutout_ECHOWAVE.ipynb b/examples/create_cutout_ECHOWAVE.ipynb index 6e82febe..5c3817a9 100644 --- a/examples/create_cutout_ECHOWAVE.ipynb +++ b/examples/create_cutout_ECHOWAVE.ipynb @@ -1,293 +1,293 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Creating a Cutout with the MREL (ECHOWAVE) dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This walkthrough describes the process of creating a cutout using the [MREL (ECHOWAVE)](https://opendap.4tu.nl/thredds/catalog/data2/djht/f359cd0f-d135-416c-9118-e79dccba57b9/1/catalog.html). \n", - "\n", - "The repository contains datasets for multiple years, ranging from 1990 to 2021 for the region of North-West Europe. A downloaded ECHOWAVE dataset contains extensive information on wave, wind and currents variables and more. For the purposes of the `mrel_wave` module only two wave components are used: `hs: wave height (m)`, and `fp: peak wave frequency (Hz)` (which is transformed into `tp: wave peak period (m)`). These provide the combinations of climate variables used in the `Power_Matrix` to convert metocean data to power.\n", - "\n", - "> **Notes**:\n", - ">\n", - "> 1. For creating a cutout from this dataset, you need to download large files and your computers memory needs to be able to handle these as well.\n", - ">\n", - "> 2. The `era5` module has been updated aswell to include the same wave variables under the `wave` feature, so a user has the option to use wave energy converters with an ERA5 dataset. Their memory usage is significantly lower as the grid resolution is also lower." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Downloading the data set" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To download the dataset from the TUDelft repository (OPeNDAP data service):\n", - "\n", - "https://opendap.4tu.nl/thredds/catalog/data2/djht/f359cd0f-d135-416c-9118-e79dccba57b9/1/catalog.html\n", - "\n", - "Variables that are downloaded \n", - "\n", - "| variable | time span\n", - "| --- | --- |\n", - "| MAPSTA | status map\n", - "| crs | None\n", - "| dpt | depth\n", - "| ucur | eastward current\n", - "| vcur | northward current\n", - "| uwnd | eastward_wind\n", - "| vwnd | northward_wind\n", - "| wlv | sea surface height above sea level\n", - "| ice | sea ice area fraction\n", - "| hs | significant height of wind and swell waves\n", - "| lm | mean wave length\n", - "| t02 | mean period T02\n", - "| t01 | mean period T01\n", - "| fp | wave peak frequency\n", - "| dir | wave mean direction\n", - "| spr | directional spread\n", - "| dp | peak direction\n", - "| phs0 | wave significant height partition 0\n", - "| phs1 | wave significant height partition 1\n", - "| phs2 | wave significant height partition 2\n", - "| ptp0 | peak period partition 0\n", - "| ptp1 | peak period partition 1\n", - "| ptp2 | peak period partition 2\n", - "| pdir0 | wave mean direction partition 0\n", - "| pdir1 | wave mean direction partition 1\n", - "| pdir2 | wave mean direction partition 2\n", - "| pdp0 | peak direction partition 0\n", - "| pdp1 | peak direction partition 1\n", - "| pdp2 | peak direction partition 2\n", - "\n", - "* Directly download each file manually and store them in a new folder.\n", - "* Use the following script to merge the datasets into one, and keep only the used variables (highlighted above).\n", - "\n", - "The **documentation** of the datasets can be found [here](https://data.4tu.nl/datasets/f359cd0f-d135-416c-9118-e79dccba57b9/1)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "\n", - "import xarray as xr\n", - "\n", - "# edit your folder path\n", - "your_directory = \"path/to/folder\"\n", - "\n", - "files = [\n", - " os.path.join(your_directory, f)\n", - " for f in os.listdir(your_directory)\n", - " if f.endswith(\".nc\")\n", - "]\n", - "datasets = [xr.open_dataset(f, chunks={\"time\": 100})[[\"fp\", \"hs\"]] for f in files]\n", - "\n", - "ds = xr.concat(datasets, dim=\"time\")\n", - "\n", - "# example years\n", - "\n", - "year = '2018'\n", - "month = '01-03'\n", - "ds.to_netcdf(os.path.join(your_directory, f\"TU-MREL-2M_{year}_{month}.nc\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Specifying the cutout" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Import the package and set recommended logging settings:" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "import atlite\n", - "\n", - "logging.basicConfig(level=logging.INFO)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:atlite.cutout:Building new cutout ...path\\to\\mrel_NW_europe_2018_02.nc\n" - ] - } - ], - "source": [ - "cutout = atlite.Cutout(\n", - " path=\"...path/to/mrel_NW_europe_2018_02.nc\",\n", - " data_path=\"...path/to/TU-MREL_EU_ATL-2M_201802.nc\",\n", - " module=\"mrel_wave\",\n", - " x=slice(-12.0, 9.0),\n", - " y=slice(40.0, 62.0),\n", - " dx=0.03,\n", - " dy=0.03,\n", - " time=slice(\"2018-02-01\", \"2018-02-28\"),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Comparison with ERA5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The ECHOWAVE dataset has a horizontal resolution of 0.03 degrees per direction. This results in a better representation of the coastlines, which is critical for wave devices deployment. \n", - "\n", - "Comparing it with the ERA5 dataset, which has a resolution of 0.3 degrees, we see that the gaps of ECHOWAVE near the shores are smaller, but also the level of accuracy is higher. In the picture below, which shows Northern Ireland, we can see that the incoming waves from the Atlantic have significantly higher wave height `hs` values in the ECHOWAVE dataset, while those resources can reach the coasts of the island. On the other hand ERA5, has a difficulty showcasing both coastline and resource accuracy. This is a significant improvement for wave device deployment as it increases their availability.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![Echowave](mrel_era5.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's see what the available features that is the available weather data variables are." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout.available_features.to_frame()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Preparing the Cutout\n", - "\n", - "No matter which dataset you use, this is where all the work actually happens.\n", - "This can be fast or take some or a lot of time and resources, among others depending on\n", - "your computer ressources." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout.prepare()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Querying the cutout gives us basic information on which data is contained and can already be used." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Inspecting the Cutout" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout # basic information" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout.data.attrs # cutout meta data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout.prepared_features # included weather variables" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cutout.data # access to underlying xarray data" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "pypsa-eur", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Creating a Cutout with the MREL (ECHOWAVE) dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This walkthrough describes the process of creating a cutout using the [MREL (ECHOWAVE)](https://opendap.4tu.nl/thredds/catalog/data2/djht/f359cd0f-d135-416c-9118-e79dccba57b9/1/catalog.html). \n", + "\n", + "The repository contains datasets for multiple years, ranging from 1990 to 2021 for the region of North-West Europe. A downloaded ECHOWAVE dataset contains extensive information on wave, wind and currents variables and more. For the purposes of the `mrel_wave` module only two wave components are used: `hs: wave height (m)`, and `fp: peak wave frequency (Hz)` (which is transformed into `tp: wave peak period (m)`). These provide the combinations of climate variables used in the `Power_Matrix` to convert metocean data to power.\n", + "\n", + "> **Notes**:\n", + ">\n", + "> 1. For creating a cutout from this dataset, you need to download large files and your computers memory needs to be able to handle these as well.\n", + ">\n", + "> 2. The `era5` module has been updated aswell to include the same wave variables under the `wave` feature, so a user has the option to use wave energy converters with an ERA5 dataset. Their memory usage is significantly lower as the grid resolution is also lower." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Downloading the data set" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To download the dataset from the TUDelft repository (OPeNDAP data service):\n", + "\n", + "https://opendap.4tu.nl/thredds/catalog/data2/djht/f359cd0f-d135-416c-9118-e79dccba57b9/1/catalog.html\n", + "\n", + "Variables that are downloaded \n", + "\n", + "| variable | time span\n", + "| --- | --- |\n", + "| MAPSTA | status map\n", + "| crs | None\n", + "| dpt | depth\n", + "| ucur | eastward current\n", + "| vcur | northward current\n", + "| uwnd | eastward_wind\n", + "| vwnd | northward_wind\n", + "| wlv | sea surface height above sea level\n", + "| ice | sea ice area fraction\n", + "| hs | significant height of wind and swell waves\n", + "| lm | mean wave length\n", + "| t02 | mean period T02\n", + "| t01 | mean period T01\n", + "| fp | wave peak frequency\n", + "| dir | wave mean direction\n", + "| spr | directional spread\n", + "| dp | peak direction\n", + "| phs0 | wave significant height partition 0\n", + "| phs1 | wave significant height partition 1\n", + "| phs2 | wave significant height partition 2\n", + "| ptp0 | peak period partition 0\n", + "| ptp1 | peak period partition 1\n", + "| ptp2 | peak period partition 2\n", + "| pdir0 | wave mean direction partition 0\n", + "| pdir1 | wave mean direction partition 1\n", + "| pdir2 | wave mean direction partition 2\n", + "| pdp0 | peak direction partition 0\n", + "| pdp1 | peak direction partition 1\n", + "| pdp2 | peak direction partition 2\n", + "\n", + "* Directly download each file manually and store them in a new folder.\n", + "* Use the following script to merge the datasets into one, and keep only the used variables (highlighted above).\n", + "\n", + "The **documentation** of the datasets can be found [here](https://data.4tu.nl/datasets/f359cd0f-d135-416c-9118-e79dccba57b9/1)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import xarray as xr\n", + "\n", + "# edit your folder path\n", + "your_directory = \"path/to/folder\"\n", + "\n", + "files = [\n", + " os.path.join(your_directory, f)\n", + " for f in os.listdir(your_directory)\n", + " if f.endswith(\".nc\")\n", + "]\n", + "datasets = [xr.open_dataset(f, chunks={\"time\": 100})[[\"fp\", \"hs\"]] for f in files]\n", + "\n", + "ds = xr.concat(datasets, dim=\"time\")\n", + "\n", + "# example years\n", + "\n", + "year = \"2018\"\n", + "month = \"01-03\"\n", + "ds.to_netcdf(os.path.join(your_directory, f\"TU-MREL-2M_{year}_{month}.nc\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Specifying the cutout" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Import the package and set recommended logging settings:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "import atlite\n", + "\n", + "logging.basicConfig(level=logging.INFO)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:atlite.cutout:Building new cutout ...path\\to\\mrel_NW_europe_2018_02.nc\n" + ] + } + ], + "source": [ + "cutout = atlite.Cutout(\n", + " path=\"...path/to/mrel_NW_europe_2018_02.nc\",\n", + " data_path=\"...path/to/TU-MREL_EU_ATL-2M_201802.nc\",\n", + " module=\"mrel_wave\",\n", + " x=slice(-12.0, 9.0),\n", + " y=slice(40.0, 62.0),\n", + " dx=0.03,\n", + " dy=0.03,\n", + " time=slice(\"2018-02-01\", \"2018-02-28\"),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparison with ERA5" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The ECHOWAVE dataset has a horizontal resolution of 0.03 degrees per direction. This results in a better representation of the coastlines, which is critical for wave devices deployment. \n", + "\n", + "Comparing it with the ERA5 dataset, which has a resolution of 0.3 degrees, we see that the gaps of ECHOWAVE near the shores are smaller, but also the level of accuracy is higher. In the picture below, which shows Northern Ireland, we can see that the incoming waves from the Atlantic have significantly higher wave height `hs` values in the ECHOWAVE dataset, while those resources can reach the coasts of the island. On the other hand ERA5, has a difficulty showcasing both coastline and resource accuracy. This is a significant improvement for wave device deployment as it increases their availability.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Echowave](mrel_era5.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see what the available features that is the available weather data variables are." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.available_features.to_frame()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preparing the Cutout\n", + "\n", + "No matter which dataset you use, this is where all the work actually happens.\n", + "This can be fast or take some or a lot of time and resources, among others depending on\n", + "your computer ressources." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.prepare()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Querying the cutout gives us basic information on which data is contained and can already be used." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inspecting the Cutout" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout # basic information" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.data.attrs # cutout meta data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.prepared_features # included weather variables" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cutout.data # access to underlying xarray data" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "pypsa-eur", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.12" + } + }, + "nbformat": 4, + "nbformat_minor": 4 } \ No newline at end of file From 8b4ae18eb9bc2d4da8bf98fc9dbc88e52248ea4a Mon Sep 17 00:00:00 2001 From: lmezilis Date: Thu, 20 Nov 2025 16:30:45 +0100 Subject: [PATCH 26/29] syntax corrections --- atlite/convert.py | 2 +- atlite/datasets/mrel_wave.py | 2 +- atlite/resource.py | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index 3b659990..e9e899b9 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -657,7 +657,7 @@ def wind( # wave def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: - r""" + """ Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index 4595e9cd..c4a7fea1 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -105,7 +105,7 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = ds.sel(**bounds) # invert the wave peak frequency to obrain wave peak period - ds["tp"] = 1 / ds["fp"] + ds["tp"] = (1 / ds["fp"]) ds = ds[list(features.keys())].rename(features) for feature in features.values(): diff --git a/atlite/resource.py b/atlite/resource.py index 882c526e..50e7c80b 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,7 +114,6 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) - def get_waveenergyconverter(converter): """ Load the wave energy converter power matrix From 9b7cae6566976bca397cb4af4e778215c9f2df03 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 20 Nov 2025 15:31:27 +0000 Subject: [PATCH 27/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 2 +- atlite/datasets/mrel_wave.py | 2 +- atlite/resource.py | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index e9e899b9..3b659990 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -657,7 +657,7 @@ def wind( # wave def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: - """ + r""" Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index c4a7fea1..4595e9cd 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -105,7 +105,7 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = ds.sel(**bounds) # invert the wave peak frequency to obrain wave peak period - ds["tp"] = (1 / ds["fp"]) + ds["tp"] = 1 / ds["fp"] ds = ds[list(features.keys())].rename(features) for feature in features.values(): diff --git a/atlite/resource.py b/atlite/resource.py index 50e7c80b..882c526e 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,6 +114,7 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) + def get_waveenergyconverter(converter): """ Load the wave energy converter power matrix From b06dfd363f7692e4e4e5647772e4c15b41f0142c Mon Sep 17 00:00:00 2001 From: lmezilis Date: Thu, 20 Nov 2025 18:42:34 +0100 Subject: [PATCH 28/29] delete picture --- atlite/convert.py | 2 +- atlite/datasets/mrel_wave.py | 2 +- atlite/resource.py | 1 - examples/mrel_era5.png | Bin 174607 -> 0 bytes 4 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 examples/mrel_era5.png diff --git a/atlite/convert.py b/atlite/convert.py index 3b659990..e9e899b9 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -657,7 +657,7 @@ def wind( # wave def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: - r""" + """ Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index 4595e9cd..c4a7fea1 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -105,7 +105,7 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = ds.sel(**bounds) # invert the wave peak frequency to obrain wave peak period - ds["tp"] = 1 / ds["fp"] + ds["tp"] = (1 / ds["fp"]) ds = ds[list(features.keys())].rename(features) for feature in features.values(): diff --git a/atlite/resource.py b/atlite/resource.py index 882c526e..50e7c80b 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,7 +114,6 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) - def get_waveenergyconverter(converter): """ Load the wave energy converter power matrix diff --git a/examples/mrel_era5.png b/examples/mrel_era5.png deleted file mode 100644 index ea355e2d70c370df67b06ed460a9e42d04ad8e49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174607 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 A Date: Thu, 20 Nov 2025 17:42:47 +0000 Subject: [PATCH 29/29] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- atlite/convert.py | 2 +- atlite/datasets/mrel_wave.py | 2 +- atlite/resource.py | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/atlite/convert.py b/atlite/convert.py index e9e899b9..3b659990 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -657,7 +657,7 @@ def wind( # wave def convert_wave(ds, converter, time_chunk_size: int = 100) -> xr.DataArray: - """ + r""" Convert wave height (Hs) and wave peak period (Tp) data into normalized power output using the device-specific Wave Energy Converter (WEC) power matrix. diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py index c4a7fea1..4595e9cd 100644 --- a/atlite/datasets/mrel_wave.py +++ b/atlite/datasets/mrel_wave.py @@ -105,7 +105,7 @@ def get_data(cutout, feature, tmpdir, **creation_parameters): ds = ds.sel(**bounds) # invert the wave peak frequency to obrain wave peak period - ds["tp"] = (1 / ds["fp"]) + ds["tp"] = 1 / ds["fp"] ds = ds[list(features.keys())].rename(features) for feature in features.values(): diff --git a/atlite/resource.py b/atlite/resource.py index 50e7c80b..882c526e 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -114,6 +114,7 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) + def get_waveenergyconverter(converter): """ Load the wave energy converter power matrix