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..3b659990 100644 --- a/atlite/convert.py +++ b/atlite/convert.py @@ -23,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 @@ -36,6 +37,7 @@ from atlite.resource import ( get_cspinstallationconfig, get_solarpanelconfig, + get_waveenergyconverter, get_windturbineconfig, windturbine_smooth, ) @@ -653,7 +655,100 @@ def wind( ) -# irradiation +# 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. + + 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) + converter : dict + Dictionary defining the WEC characteristics, including: + 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 + ------- + 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(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, converter, **params): + """ + 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. + + 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(converter, str | Path): + converter = get_waveenergyconverter(converter) + + return cutout.convert_and_aggregate( + convert_func=convert_wave, converter=converter, **params + ) + + def convert_irradiation( ds, orientation, diff --git a/atlite/cutout.py b/atlite/cutout.py index 547ed388..5d77a7fe 100644 --- a/atlite/cutout.py +++ b/atlite/cutout.py @@ -44,6 +44,7 @@ soil_temperature, solar_thermal, temperature, + wave, wind, ) from atlite.data import available_features, cutout_prepare @@ -673,6 +674,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..217dfd29 100644 --- a/atlite/datasets/__init__.py +++ b/atlite/datasets/__init__.py @@ -6,6 +6,11 @@ atlite datasets. """ -from atlite.datasets import era5, gebco, sarah +from atlite.datasets import era5, gebco, mrel_wave, sarah -modules = {"era5": era5, "sarah": sarah, "gebco": gebco} +modules = { + "era5": era5, + "sarah": sarah, + "mrel_wave": mrel_wave, + "gebco": gebco, +} diff --git a/atlite/datasets/era5.py b/atlite/datasets/era5.py index f2f957a7..456c18cd 100644 --- a/atlite/datasets/era5.py +++ b/atlite/datasets/era5.py @@ -57,6 +57,7 @@ def nullcontext(): ], "temperature": ["temperature", "soil temperature", "dewpoint temperature"], "runoff": ["runoff"], + "wave": ["wave_height", "wave_period"], } static_features = {"height"} @@ -244,6 +245,53 @@ def sanitize_runoff(ds): 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): """ Get height data for given retrieval parameters. diff --git a/atlite/datasets/mrel_wave.py b/atlite/datasets/mrel_wave.py new file mode 100644 index 00000000..4595e9cd --- /dev/null +++ b/atlite/datasets/mrel_wave.py @@ -0,0 +1,116 @@ +# 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 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.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 + 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 sanitize_wave_height(ds): + """ + Sanitize retrieved wave height data. + """ + ds["wave_height"] = ds["wave_height"].clip(min=0.0) + return ds + + +def sanitize_wave_period(ds): + """ + Sanitize retrieved wave height data. + """ + ds["wave_period"] = ds["wave_period"].clip(min=0.0) + return ds + + +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)} + + +def get_data(cutout, feature, tmpdir, **creation_parameters): + """ + 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) + ds = _rename_and_clean_coords(ds, cutout) + bounds = _bounds(cutout.coords, pad=creation_parameters.get("pad", 0)) + ds = ds.sel(**bounds) + + # 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: + ds = sanitize_func(ds) + + return ds diff --git a/atlite/resource.py b/atlite/resource.py index 0cc0443a..b715e32f 100644 --- a/atlite/resource.py +++ b/atlite/resource.py @@ -31,6 +31,7 @@ WINDTURBINE_DIRECTORY = RESOURCE_DIRECTORY / "windturbine" SOLARPANEL_DIRECTORY = RESOURCE_DIRECTORY / "solarpanel" CSPINSTALLATION_DIRECTORY = RESOURCE_DIRECTORY / "cspinstallation" +WAVEENERGYCONVERTER_DIRECTORY = RESOURCE_DIRECTORY / "waveenergyconverter" if TYPE_CHECKING: from typing import TypedDict @@ -109,6 +110,26 @@ def get_windturbineconfig( return _validate_turbine_config_dict(conf, add_cutout_windspeed) +def get_waveenergyconverter(converter): + """ + 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(converter, (str | Path)) + + if isinstance(converter, str): + converter_path = waveenergyconverter[converter.replace(".yaml", "")] + + elif isinstance(converter, Path): + converter_path = converter + + with open(converter_path) as f: + conf = yaml.safe_load(f) + + return conf + + def get_solarpanelconfig(panel): """ Load the 'panel'.yaml file from local disk and provide a solar panel dict. @@ -512,6 +533,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")} +) 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/waveenergyconverter/Farshore_750kW.yaml b/atlite/resources/waveenergyconverter/Farshore_750kW.yaml new file mode 100644 index 00000000..17a3d49a --- /dev/null +++ b/atlite/resources/waveenergyconverter/Farshore_750kW.yaml @@ -0,0 +1,1139 @@ +# 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 + 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 diff --git a/atlite/resources/waveenergyconverter/Nearshore_400kW.yaml b/atlite/resources/waveenergyconverter/Nearshore_400kW.yaml new file mode 100644 index 00000000..34394acf --- /dev/null +++ b/atlite/resources/waveenergyconverter/Nearshore_400kW.yaml @@ -0,0 +1,1199 @@ +# 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 + 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/waveenergyconverter/Shallow_290kW.yaml b/atlite/resources/waveenergyconverter/Shallow_290kW.yaml new file mode 100644 index 00000000..27d07484 --- /dev/null +++ b/atlite/resources/waveenergyconverter/Shallow_290kW.yaml @@ -0,0 +1,1139 @@ +# 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 + 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 diff --git a/examples/create_cutout_ECHOWAVE.ipynb b/examples/create_cutout_ECHOWAVE.ipynb new file mode 100644 index 00000000..5c3817a9 --- /dev/null +++ b/examples/create_cutout_ECHOWAVE.ipynb @@ -0,0 +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 +} \ No newline at end of file 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