{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# MHKiT Wave Module \n", "The following example runs an application of the [MHKiT wave module](https://mhkit-software.github.io/MHKiT/mhkit-python/api.wave.html) to 1) read in NDBC data, 2) compute metrics from spectral data, 3) generate a capture length matrix, 4) calculate MAEP, and 5) plot the matrices.\n", "\n", "Start by importing the necessary python packages and MHKiT module." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "from mhkit import wave" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load NDBC Data \n", "\n", "We can use MHKiT to load data downloaded from https://www.ndbc.noaa.gov. \n" ] }, { "cell_type": "code", "execution_count": 2, "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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0.02000.03250.03750.04250.04750.05250.05750.06250.06750.0725...0.33000.34000.35000.36500.38500.40500.42500.44500.46500.4850
2018-01-01 00:40:000.00.00.00.00.00.030.040.090.220.22...0.070.080.070.070.030.010.020.010.010.0
2018-01-01 01:40:000.00.00.00.00.00.020.060.080.210.21...0.070.070.080.020.010.020.010.010.000.0
2018-01-01 02:40:000.00.00.00.00.00.000.080.070.140.32...0.080.060.050.030.030.020.010.010.000.0
2018-01-01 03:40:000.00.00.00.00.00.000.130.220.260.32...0.050.060.050.030.030.010.010.000.000.0
2018-01-01 04:40:000.00.00.00.00.00.030.140.170.370.40...0.060.120.040.040.020.010.010.010.010.0
\n", "

5 rows × 47 columns

\n", "
" ], "text/plain": [ " 0.0200 0.0325 0.0375 0.0425 0.0475 0.0525 0.0575 \\\n", "2018-01-01 00:40:00 0.0 0.0 0.0 0.0 0.0 0.03 0.04 \n", "2018-01-01 01:40:00 0.0 0.0 0.0 0.0 0.0 0.02 0.06 \n", "2018-01-01 02:40:00 0.0 0.0 0.0 0.0 0.0 0.00 0.08 \n", "2018-01-01 03:40:00 0.0 0.0 0.0 0.0 0.0 0.00 0.13 \n", "2018-01-01 04:40:00 0.0 0.0 0.0 0.0 0.0 0.03 0.14 \n", "\n", " 0.0625 0.0675 0.0725 ... 0.3300 0.3400 0.3500 \\\n", "2018-01-01 00:40:00 0.09 0.22 0.22 ... 0.07 0.08 0.07 \n", "2018-01-01 01:40:00 0.08 0.21 0.21 ... 0.07 0.07 0.08 \n", "2018-01-01 02:40:00 0.07 0.14 0.32 ... 0.08 0.06 0.05 \n", "2018-01-01 03:40:00 0.22 0.26 0.32 ... 0.05 0.06 0.05 \n", "2018-01-01 04:40:00 0.17 0.37 0.40 ... 0.06 0.12 0.04 \n", "\n", " 0.3650 0.3850 0.4050 0.4250 0.4450 0.4650 0.4850 \n", "2018-01-01 00:40:00 0.07 0.03 0.01 0.02 0.01 0.01 0.0 \n", "2018-01-01 01:40:00 0.02 0.01 0.02 0.01 0.01 0.00 0.0 \n", "2018-01-01 02:40:00 0.03 0.03 0.02 0.01 0.01 0.00 0.0 \n", "2018-01-01 03:40:00 0.03 0.03 0.01 0.01 0.00 0.00 0.0 \n", "2018-01-01 04:40:00 0.04 0.02 0.01 0.01 0.01 0.01 0.0 \n", "\n", "[5 rows x 47 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ndbc_data_file = \"data/wave/data.txt\"\n", "\n", "# ndbc.read_file outputs the NDBC file data into two variables.\n", "# raw_ndbc_data is a pandas DataFrame containing the file data.\n", "# meta contains the meta data, if available.\n", "[raw_ndbc_data, meta] = wave.io.ndbc.read_file(ndbc_data_file)\n", "raw_ndbc_data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The resulting DataFrame is spectra indexed (rows) by datetime with frequency as the columns. To use this data in MHKiT functions we must first transpose the DataFrame" ] }, { "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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
2018-01-01 00:40:002018-01-01 01:40:002018-01-01 02:40:002018-01-01 03:40:002018-01-01 04:40:002018-01-01 05:40:002018-01-01 06:40:002018-01-01 07:40:002018-01-01 08:40:002018-01-01 09:40:00...2018-01-31 14:40:002018-01-31 15:40:002018-01-31 16:40:002018-01-31 17:40:002018-01-31 18:40:002018-01-31 19:40:002018-01-31 20:40:002018-01-31 21:40:002018-01-31 22:40:002018-01-31 23:40:00
0.02000.00.00.00.00.00.000.00.00.00.0...0.000.00.00.00.000.00.00.00.00.0
0.03250.00.00.00.00.00.000.00.00.00.0...0.000.00.00.00.000.00.00.00.00.0
0.03750.00.00.00.00.00.000.00.00.00.0...0.000.00.00.00.000.00.00.00.00.0
0.04250.00.00.00.00.00.000.00.00.00.0...0.000.00.00.00.000.00.00.00.00.0
0.04750.00.00.00.00.00.010.00.00.00.0...0.060.00.00.00.070.00.00.00.00.0
\n", "

5 rows × 743 columns

\n", "
" ], "text/plain": [ " 2018-01-01 00:40:00 2018-01-01 01:40:00 2018-01-01 02:40:00 \\\n", "0.0200 0.0 0.0 0.0 \n", "0.0325 0.0 0.0 0.0 \n", "0.0375 0.0 0.0 0.0 \n", "0.0425 0.0 0.0 0.0 \n", "0.0475 0.0 0.0 0.0 \n", "\n", " 2018-01-01 03:40:00 2018-01-01 04:40:00 2018-01-01 05:40:00 \\\n", "0.0200 0.0 0.0 0.00 \n", "0.0325 0.0 0.0 0.00 \n", "0.0375 0.0 0.0 0.00 \n", "0.0425 0.0 0.0 0.00 \n", "0.0475 0.0 0.0 0.01 \n", "\n", " 2018-01-01 06:40:00 2018-01-01 07:40:00 2018-01-01 08:40:00 \\\n", "0.0200 0.0 0.0 0.0 \n", "0.0325 0.0 0.0 0.0 \n", "0.0375 0.0 0.0 0.0 \n", "0.0425 0.0 0.0 0.0 \n", "0.0475 0.0 0.0 0.0 \n", "\n", " 2018-01-01 09:40:00 ... 2018-01-31 14:40:00 2018-01-31 15:40:00 \\\n", "0.0200 0.0 ... 0.00 0.0 \n", "0.0325 0.0 ... 0.00 0.0 \n", "0.0375 0.0 ... 0.00 0.0 \n", "0.0425 0.0 ... 0.00 0.0 \n", "0.0475 0.0 ... 0.06 0.0 \n", "\n", " 2018-01-31 16:40:00 2018-01-31 17:40:00 2018-01-31 18:40:00 \\\n", "0.0200 0.0 0.0 0.00 \n", "0.0325 0.0 0.0 0.00 \n", "0.0375 0.0 0.0 0.00 \n", "0.0425 0.0 0.0 0.00 \n", "0.0475 0.0 0.0 0.07 \n", "\n", " 2018-01-31 19:40:00 2018-01-31 20:40:00 2018-01-31 21:40:00 \\\n", "0.0200 0.0 0.0 0.0 \n", "0.0325 0.0 0.0 0.0 \n", "0.0375 0.0 0.0 0.0 \n", "0.0425 0.0 0.0 0.0 \n", "0.0475 0.0 0.0 0.0 \n", "\n", " 2018-01-31 22:40:00 2018-01-31 23:40:00 \n", "0.0200 0.0 0.0 \n", "0.0325 0.0 0.0 \n", "0.0375 0.0 0.0 \n", "0.0425 0.0 0.0 \n", "0.0475 0.0 0.0 \n", "\n", "[5 rows x 743 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Transpose raw NDBC data\n", "ndbc_data = raw_ndbc_data.T\n", "ndbc_data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Compute Wave Metrics \n", "We will now use MHKiT to compute the significant wave height, energy period, and energy flux. " ] }, { "cell_type": "code", "execution_count": 4, "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", " \n", " \n", " \n", " \n", " \n", "
Te
2018-01-01 00:40:007.458731
2018-01-01 01:40:007.682413
2018-01-01 02:40:007.498263
2018-01-01 03:40:007.676198
2018-01-01 04:40:007.669476
\n", "
" ], "text/plain": [ " Te\n", "2018-01-01 00:40:00 7.458731\n", "2018-01-01 01:40:00 7.682413\n", "2018-01-01 02:40:00 7.498263\n", "2018-01-01 03:40:00 7.676198\n", "2018-01-01 04:40:00 7.669476" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Compute the enegy periods from the NDBC spectra data\n", "Te = wave.resource.energy_period(ndbc_data)\n", "Te.head()" ] }, { "cell_type": "code", "execution_count": 5, "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", " \n", " \n", " \n", " \n", " \n", "
Hm0
2018-01-01 00:40:000.939574
2018-01-01 01:40:001.001399
2018-01-01 02:40:000.924770
2018-01-01 03:40:000.962497
2018-01-01 04:40:000.989949
\n", "
" ], "text/plain": [ " Hm0\n", "2018-01-01 00:40:00 0.939574\n", "2018-01-01 01:40:00 1.001399\n", "2018-01-01 02:40:00 0.924770\n", "2018-01-01 03:40:00 0.962497\n", "2018-01-01 04:40:00 0.989949" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Compute the significant wave height from the NDBC spectra data\n", "Hm0 = wave.resource.significant_wave_height(ndbc_data)\n", "Hm0.head()" ] }, { "cell_type": "code", "execution_count": 6, "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", " \n", " \n", " \n", " \n", " \n", "
J
2018-01-01 00:40:003354.825613
2018-01-01 01:40:003916.541523
2018-01-01 02:40:003278.298930
2018-01-01 03:40:003664.246679
2018-01-01 04:40:003867.014933
\n", "
" ], "text/plain": [ " J\n", "2018-01-01 00:40:00 3354.825613\n", "2018-01-01 01:40:00 3916.541523\n", "2018-01-01 02:40:00 3278.298930\n", "2018-01-01 03:40:00 3664.246679\n", "2018-01-01 04:40:00 3867.014933" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Set water depth to 60 m\n", "h = 60\n", "\n", "# Compute the energy flux from the NDBC spectra data and water depth\n", "J = wave.resource.energy_flux(ndbc_data, h)\n", "J.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Conversion from DataFrames to Series\n", "MHKiT functions typically take in Pandas Series so that the function knows exactly which column to use. Pandas Series are one-dimensional ndarrays with axis labels which are most commonly encountered when a single column is requested from a DataFrame (e.g. `ndbc_data['2018-01-01 01:40:00']` returns a Pandas Series from the Pandas DataFrame of all frequencies at the specified time). \n", "\n", "To the above results (energy Period, energy flux, and significant wave height) were returned as DataFrames. For DataFrames which only have one column the conversion from DataFrame to Series can accomplished using the `squeeze` method. Alternatively we can call on the column header. Both methods are demonstrated below:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2018-01-01 00:40:00 7.458731\n", "2018-01-01 01:40:00 7.682413\n", "2018-01-01 02:40:00 7.498263\n", "2018-01-01 03:40:00 7.676198\n", "2018-01-01 04:40:00 7.669476\n", "Name: Te, dtype: float64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Convert the energy period DataFrame to a Series.\n", "Te = Te.squeeze()\n", "Te.head()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2018-01-01 00:40:00 0.939574\n", "2018-01-01 01:40:00 1.001399\n", "2018-01-01 02:40:00 0.924770\n", "2018-01-01 03:40:00 0.962497\n", "2018-01-01 04:40:00 0.989949\n", " ... \n", "2018-01-31 19:40:00 2.650811\n", "2018-01-31 20:40:00 3.086746\n", "2018-01-31 21:40:00 2.650358\n", "2018-01-31 22:40:00 2.941428\n", "2018-01-31 23:40:00 2.895928\n", "Name: Hm0, Length: 743, dtype: float64\n", "2018-01-01 00:40:00 3354.825613\n", "2018-01-01 01:40:00 3916.541523\n", "2018-01-01 02:40:00 3278.298930\n", "2018-01-01 03:40:00 3664.246679\n", "2018-01-01 04:40:00 3867.014933\n", " ... \n", "2018-01-31 19:40:00 37596.750775\n", "2018-01-31 20:40:00 52532.427635\n", "2018-01-31 21:40:00 38153.227517\n", "2018-01-31 22:40:00 50501.872907\n", "2018-01-31 23:40:00 47070.874952\n", "Name: J, Length: 743, dtype: float64\n" ] } ], "source": [ "# Alternatively, convert to Series by calling a specific column in the DataFrame\n", "Hm0 = Hm0[\"Hm0\"]\n", "print(Hm0)\n", "\n", "J = J[\"J\"]\n", "print(J)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generate Random Power Data\n", "\n", "For demonstration purposes, this example uses synthetic power data generated from statistical distributions. In a real application, the user would provide power values from a WEC. The data is stored in pandas Series, containing 743 points. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "# Set the random seed, to reproduce results\n", "np.random.seed(1)\n", "# Generate random power values\n", "P = pd.Series(np.random.normal(200, 40, 743), index=J.index)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Capture Length Matrices\n", "\n", "The following operations create capture length matrices, as specified by the IEC/TS 62600-100. But first, we need to calculate capture length and define bin centers. The mean capture length matrix is printed below. Keep in mind that this data has been artificially generated, so it may not be representative of what a real-world scatter diagram would look like." ] }, { "cell_type": "code", "execution_count": 10, "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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", "
0.01.02.03.04.05.06.07.08.09.010.011.012.013.014.015.016.0
0.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
0.5NaNNaNNaNNaNNaNNaNNaN0.1202860.053376NaNNaNNaNNaNNaNNaNNaNNaN
1.0NaNNaNNaNNaNNaNNaN0.1106860.0680700.0494520.065912NaN0.0565930.0299500.017234NaNNaNNaN
1.5NaNNaNNaNNaNNaNNaNNaN0.0197490.018673NaNNaN0.0124730.0112050.0123070.010432NaNNaN
2.0NaNNaNNaNNaNNaNNaNNaN0.0138820.0125470.0096720.0087700.0085850.0075250.0052720.007809NaNNaN
2.5NaNNaNNaNNaNNaNNaNNaNNaN0.0072440.0064880.0057880.0056520.0051800.0042600.0036230.004509NaN
3.0NaNNaNNaNNaNNaNNaNNaN0.0045000.0056600.0046910.0041090.0039520.0031040.0034080.0022910.001792NaN
3.5NaNNaNNaNNaNNaNNaNNaNNaN0.0039240.0036740.0030200.0027460.0022470.0020000.0022570.002033NaN
4.0NaNNaNNaNNaNNaNNaNNaNNaN0.0031850.0025130.0023860.0021470.0022460.0016050.001730NaNNaN
4.5NaNNaNNaNNaNNaNNaNNaNNaN0.0023430.0020870.0019190.0015900.001438NaNNaNNaNNaN
5.0NaNNaNNaNNaNNaNNaNNaNNaN0.0019130.0017200.0017160.0014110.0012190.001345NaNNaNNaN
5.5NaNNaNNaNNaNNaNNaNNaNNaN0.0021010.0015160.0013310.0009020.001033NaNNaNNaNNaN
6.0NaNNaNNaNNaNNaNNaNNaNNaNNaN0.0010970.000895NaN0.0008580.000987NaNNaNNaN
6.5NaNNaNNaNNaNNaNNaNNaNNaNNaN0.0008370.0010240.000419NaN0.000688NaNNaNNaN
7.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN0.0004610.000633NaNNaNNaN
7.5NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN0.000553NaNNaN0.0003120.000437NaNNaN
8.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN0.0004430.000351NaN
8.5NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN0.0004180.000405
9.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
9.5NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN0.000153NaN
10.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN0.000281
10.5NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN0.0002040.000225
\n", "
" ], "text/plain": [ " 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 \\\n", "0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "0.5 NaN NaN NaN NaN NaN NaN NaN 0.120286 0.053376 \n", "1.0 NaN NaN NaN NaN NaN NaN 0.110686 0.068070 0.049452 \n", "1.5 NaN NaN NaN NaN NaN NaN NaN 0.019749 0.018673 \n", "2.0 NaN NaN NaN NaN NaN NaN NaN 0.013882 0.012547 \n", "2.5 NaN NaN NaN NaN NaN NaN NaN NaN 0.007244 \n", "3.0 NaN NaN NaN NaN NaN NaN NaN 0.004500 0.005660 \n", "3.5 NaN NaN NaN NaN NaN NaN NaN NaN 0.003924 \n", "4.0 NaN NaN NaN NaN NaN NaN NaN NaN 0.003185 \n", "4.5 NaN NaN NaN NaN NaN NaN NaN NaN 0.002343 \n", "5.0 NaN NaN NaN NaN NaN NaN NaN NaN 0.001913 \n", "5.5 NaN NaN NaN NaN NaN NaN NaN NaN 0.002101 \n", "6.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "6.5 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "7.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "7.5 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "8.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "8.5 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "9.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "9.5 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "10.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "10.5 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "\n", " 9.0 10.0 11.0 12.0 13.0 14.0 15.0 \\\n", "0.0 NaN NaN NaN NaN NaN NaN NaN \n", "0.5 NaN NaN NaN NaN NaN NaN NaN \n", "1.0 0.065912 NaN 0.056593 0.029950 0.017234 NaN NaN \n", "1.5 NaN NaN 0.012473 0.011205 0.012307 0.010432 NaN \n", "2.0 0.009672 0.008770 0.008585 0.007525 0.005272 0.007809 NaN \n", "2.5 0.006488 0.005788 0.005652 0.005180 0.004260 0.003623 0.004509 \n", "3.0 0.004691 0.004109 0.003952 0.003104 0.003408 0.002291 0.001792 \n", "3.5 0.003674 0.003020 0.002746 0.002247 0.002000 0.002257 0.002033 \n", "4.0 0.002513 0.002386 0.002147 0.002246 0.001605 0.001730 NaN \n", "4.5 0.002087 0.001919 0.001590 0.001438 NaN NaN NaN \n", "5.0 0.001720 0.001716 0.001411 0.001219 0.001345 NaN NaN \n", "5.5 0.001516 0.001331 0.000902 0.001033 NaN NaN NaN \n", "6.0 0.001097 0.000895 NaN 0.000858 0.000987 NaN NaN \n", "6.5 0.000837 0.001024 0.000419 NaN 0.000688 NaN NaN \n", "7.0 NaN NaN NaN 0.000461 0.000633 NaN NaN \n", "7.5 NaN 0.000553 NaN NaN 0.000312 0.000437 NaN \n", "8.0 NaN NaN NaN NaN NaN 0.000443 0.000351 \n", "8.5 NaN NaN NaN NaN NaN NaN 0.000418 \n", "9.0 NaN NaN NaN NaN NaN NaN NaN \n", "9.5 NaN NaN NaN NaN NaN NaN 0.000153 \n", "10.0 NaN NaN NaN NaN NaN NaN NaN \n", "10.5 NaN NaN NaN NaN NaN NaN 0.000204 \n", "\n", " 16.0 \n", "0.0 NaN \n", "0.5 NaN \n", "1.0 NaN \n", "1.5 NaN \n", "2.0 NaN \n", "2.5 NaN \n", "3.0 NaN \n", "3.5 NaN \n", "4.0 NaN \n", "4.5 NaN \n", "5.0 NaN \n", "5.5 NaN \n", "6.0 NaN \n", "6.5 NaN \n", "7.0 NaN \n", "7.5 NaN \n", "8.0 NaN \n", "8.5 0.000405 \n", "9.0 NaN \n", "9.5 NaN \n", "10.0 0.000281 \n", "10.5 0.000225 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Calculate capture length\n", "L = wave.performance.capture_length(P, J)\n", "\n", "# Generate bins for Hm0 and Te, input format (start, stop, step_size)\n", "Hm0_bins = np.arange(0, Hm0.values.max() + 0.5, 0.5)\n", "Te_bins = np.arange(0, Te.values.max() + 1, 1)\n", "\n", "# Create capture length matrices using mean, standard deviation, count, min and max statistics\n", "LM_mean = wave.performance.capture_length_matrix(Hm0, Te, L, \"mean\", Hm0_bins, Te_bins)\n", "LM_std = wave.performance.capture_length_matrix(Hm0, Te, L, \"std\", Hm0_bins, Te_bins)\n", "LM_count = wave.performance.capture_length_matrix(\n", " Hm0, Te, L, \"count\", Hm0_bins, Te_bins\n", ")\n", "LM_min = wave.performance.capture_length_matrix(Hm0, Te, L, \"min\", Hm0_bins, Te_bins)\n", "LM_max = wave.performance.capture_length_matrix(Hm0, Te, L, \"max\", Hm0_bins, Te_bins)\n", "\n", "# Show mean capture length matrix\n", "LM_mean" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Additional capture length matrices can be computed, for example, the frequency matrix is computed below." ] }, { "cell_type": "code", "execution_count": 11, "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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", "
0.01.02.03.04.05.06.07.08.09.010.011.012.013.014.015.016.0
0.00.00.00.00.00.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
0.50.00.00.00.00.00.00.0000000.0026920.0013460.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
1.00.00.00.00.00.00.00.0013460.0067290.0040380.0013460.0000000.0026920.0026920.0013460.0000000.0000000.000000
1.50.00.00.00.00.00.00.0000000.0053840.0026920.0000000.0000000.0094210.0040380.0067290.0053840.0000000.000000
2.00.00.00.00.00.00.00.0000000.0026920.0053840.0188430.0188430.0296100.0215340.0013460.0026920.0000000.000000
2.50.00.00.00.00.00.00.0000000.0000000.0134590.0524900.0551820.0188430.0255720.0228800.0053840.0013460.000000
3.00.00.00.00.00.00.00.0000000.0013460.0215340.0444150.0471060.0201880.0121130.0107670.0107670.0013460.000000
3.50.00.00.00.00.00.00.0000000.0000000.0067290.0403770.0296100.0471060.0040380.0080750.0040380.0013460.000000
4.00.00.00.00.00.00.00.0000000.0000000.0094210.0174970.0296100.0403770.0026920.0040380.0053840.0000000.000000
4.50.00.00.00.00.00.00.0000000.0000000.0161510.0134590.0174970.0228800.0121130.0000000.0000000.0000000.000000
5.00.00.00.00.00.00.00.0000000.0000000.0026920.0080750.0080750.0107670.0228800.0013460.0000000.0000000.000000
5.50.00.00.00.00.00.00.0000000.0000000.0013460.0121130.0067290.0040380.0148050.0000000.0000000.0000000.000000
6.00.00.00.00.00.00.00.0000000.0000000.0000000.0026920.0026920.0000000.0053840.0013460.0000000.0000000.000000
6.50.00.00.00.00.00.00.0000000.0000000.0000000.0026920.0026920.0013460.0000000.0026920.0000000.0000000.000000
7.00.00.00.00.00.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0013460.0040380.0000000.0000000.000000
7.50.00.00.00.00.00.00.0000000.0000000.0000000.0000000.0013460.0000000.0000000.0013460.0080750.0000000.000000
8.00.00.00.00.00.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0026920.0026920.000000
8.50.00.00.00.00.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0013460.001346
9.00.00.00.00.00.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
9.50.00.00.00.00.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0013460.000000
10.00.00.00.00.00.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.001346
10.50.00.00.00.00.00.00.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0013460.001346
\n", "
" ], "text/plain": [ " 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 \\\n", "0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.002692 0.001346 \n", "1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.001346 0.006729 0.004038 \n", "1.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.005384 0.002692 \n", "2.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.002692 0.005384 \n", "2.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.013459 \n", "3.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.001346 0.021534 \n", "3.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.006729 \n", "4.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.009421 \n", "4.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.016151 \n", "5.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.002692 \n", "5.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.001346 \n", "6.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "6.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "7.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "7.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "8.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "8.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "9.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "9.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "10.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "10.5 0.0 0.0 0.0 0.0 0.0 0.0 0.000000 0.000000 0.000000 \n", "\n", " 9.0 10.0 11.0 12.0 13.0 14.0 15.0 \\\n", "0.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "0.5 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "1.0 0.001346 0.000000 0.002692 0.002692 0.001346 0.000000 0.000000 \n", "1.5 0.000000 0.000000 0.009421 0.004038 0.006729 0.005384 0.000000 \n", "2.0 0.018843 0.018843 0.029610 0.021534 0.001346 0.002692 0.000000 \n", "2.5 0.052490 0.055182 0.018843 0.025572 0.022880 0.005384 0.001346 \n", "3.0 0.044415 0.047106 0.020188 0.012113 0.010767 0.010767 0.001346 \n", "3.5 0.040377 0.029610 0.047106 0.004038 0.008075 0.004038 0.001346 \n", "4.0 0.017497 0.029610 0.040377 0.002692 0.004038 0.005384 0.000000 \n", "4.5 0.013459 0.017497 0.022880 0.012113 0.000000 0.000000 0.000000 \n", "5.0 0.008075 0.008075 0.010767 0.022880 0.001346 0.000000 0.000000 \n", "5.5 0.012113 0.006729 0.004038 0.014805 0.000000 0.000000 0.000000 \n", "6.0 0.002692 0.002692 0.000000 0.005384 0.001346 0.000000 0.000000 \n", "6.5 0.002692 0.002692 0.001346 0.000000 0.002692 0.000000 0.000000 \n", "7.0 0.000000 0.000000 0.000000 0.001346 0.004038 0.000000 0.000000 \n", "7.5 0.000000 0.001346 0.000000 0.000000 0.001346 0.008075 0.000000 \n", "8.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.002692 0.002692 \n", "8.5 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.001346 \n", "9.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "9.5 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.001346 \n", "10.0 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "10.5 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.001346 \n", "\n", " 16.0 \n", "0.0 0.000000 \n", "0.5 0.000000 \n", "1.0 0.000000 \n", "1.5 0.000000 \n", "2.0 0.000000 \n", "2.5 0.000000 \n", "3.0 0.000000 \n", "3.5 0.000000 \n", "4.0 0.000000 \n", "4.5 0.000000 \n", "5.0 0.000000 \n", "5.5 0.000000 \n", "6.0 0.000000 \n", "6.5 0.000000 \n", "7.0 0.000000 \n", "7.5 0.000000 \n", "8.0 0.000000 \n", "8.5 0.001346 \n", "9.0 0.000000 \n", "9.5 0.000000 \n", "10.0 0.001346 \n", "10.5 0.001346 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create capture length matrices using frequency\n", "LM_freq = wave.performance.capture_length_matrix(\n", " Hm0, Te, L, \"frequency\", Hm0_bins, Te_bins\n", ")\n", "\n", "# Show capture length matrix using frequency\n", "LM_freq" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `capture_length_matrix` function can also be used as an arbitrary matrix generator. To do this, simply pass a different Series in the place of capture length (L). For example, while not specified by the IEC standards, if the user doesn't have the omnidirectional wave flux, the average power matrix could hypothetically be generated in the following manner." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "# Demonstration of arbitrary matrix generator\n", "PM_mean_not_standard = wave.performance.capture_length_matrix(\n", " Hm0, Te, P, \"mean\", Hm0_bins, Te_bins\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `capture_length_matrix` function can also use a callable function as the statistic argument. For example, suppose that we wanted to generate a matrix with the variance of the capture length. We could achieve this by passing the NumPy variance function `np.var` into the `capture_length_matrix` function, as shown below." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Demonstration of passing a callable function to the matrix generator\n", "LM_variance = wave.performance.capture_length_matrix(\n", " Hm0, Te, L, np.var, Hm0_bins, Te_bins\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Power Matrices\n", "As specified in IEC/TS 62600-100, the power matrix is generated from the capture length matrix and wave energy flux matrix, as shown below" ] }, { "cell_type": "code", "execution_count": 14, "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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", "
0.01.02.03.04.05.06.07.08.09.010.011.012.013.014.015.016.0
0.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
0.5NaNNaNNaNNaNNaNNaNNaN224.996117.594NaNNaNNaNNaNNaNNaNNaNNaN
1.0NaNNaNNaNNaNNaNNaN212.762202.713188.707187.103NaN213.926174.154164.886NaNNaNNaN
1.5NaNNaNNaNNaNNaNNaNNaN176.402199.802NaNNaN201.883191.598221.705190.124NaNNaN
2.0NaNNaNNaNNaNNaNNaNNaN203.667216.857192.965201.633216.268209.634162.569232.530NaNNaN
2.5NaNNaNNaNNaNNaNNaNNaNNaN193.397203.529196.907212.883211.277202.760199.263272.421NaN
3.0NaNNaNNaNNaNNaNNaNNaN170.739216.459197.484200.895212.107193.837222.185169.497122.296NaN
3.5NaNNaNNaNNaNNaNNaNNaNNaN194.894214.108202.725206.901184.099186.077221.659186.201NaN
4.0NaNNaNNaNNaNNaNNaNNaNNaN217.289189.403201.362207.532207.971172.771213.854NaNNaN
4.5NaNNaNNaNNaNNaNNaNNaNNaN197.994194.238205.559203.195197.980NaNNaNNaNNaN
5.0NaNNaNNaNNaNNaNNaNNaNNaN198.149196.527222.219215.221204.002254.004NaNNaNNaN
5.5NaNNaNNaNNaNNaNNaNNaNNaN249.158212.561212.734168.655208.220NaNNaNNaNNaN
6.0NaNNaNNaNNaNNaNNaNNaNNaNNaN182.314159.418NaN208.418241.347NaNNaNNaN
6.5NaNNaNNaNNaNNaNNaNNaNNaNNaN164.712233.890110.517NaN207.919NaNNaNNaN
7.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN155.691229.022NaNNaNNaN
7.5NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN166.855NaNNaN128.897198.053NaNNaN
8.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN230.281184.510NaN
8.5NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN248.338264.534
9.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
9.5NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN116.230NaN
10.0NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN244.634
10.5NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN190.849212.411
\n", "
" ], "text/plain": [ " 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 \\\n", "0.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "0.5 NaN NaN NaN NaN NaN NaN NaN 224.996 117.594 NaN \n", "1.0 NaN NaN NaN NaN NaN NaN 212.762 202.713 188.707 187.103 \n", "1.5 NaN NaN NaN NaN NaN NaN NaN 176.402 199.802 NaN \n", "2.0 NaN NaN NaN NaN NaN NaN NaN 203.667 216.857 192.965 \n", "2.5 NaN NaN NaN NaN NaN NaN NaN NaN 193.397 203.529 \n", "3.0 NaN NaN NaN NaN NaN NaN NaN 170.739 216.459 197.484 \n", "3.5 NaN NaN NaN NaN NaN NaN NaN NaN 194.894 214.108 \n", "4.0 NaN NaN NaN NaN NaN NaN NaN NaN 217.289 189.403 \n", "4.5 NaN NaN NaN NaN NaN NaN NaN NaN 197.994 194.238 \n", "5.0 NaN NaN NaN NaN NaN NaN NaN NaN 198.149 196.527 \n", "5.5 NaN NaN NaN NaN NaN NaN NaN NaN 249.158 212.561 \n", "6.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN 182.314 \n", "6.5 NaN NaN NaN NaN NaN NaN NaN NaN NaN 164.712 \n", "7.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "7.5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "8.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "8.5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "9.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "9.5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "10.0 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "10.5 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "\n", " 10.0 11.0 12.0 13.0 14.0 15.0 16.0 \n", "0.0 NaN NaN NaN NaN NaN NaN NaN \n", "0.5 NaN NaN NaN NaN NaN NaN NaN \n", "1.0 NaN 213.926 174.154 164.886 NaN NaN NaN \n", "1.5 NaN 201.883 191.598 221.705 190.124 NaN NaN \n", "2.0 201.633 216.268 209.634 162.569 232.530 NaN NaN \n", "2.5 196.907 212.883 211.277 202.760 199.263 272.421 NaN \n", "3.0 200.895 212.107 193.837 222.185 169.497 122.296 NaN \n", "3.5 202.725 206.901 184.099 186.077 221.659 186.201 NaN \n", "4.0 201.362 207.532 207.971 172.771 213.854 NaN NaN \n", "4.5 205.559 203.195 197.980 NaN NaN NaN NaN \n", "5.0 222.219 215.221 204.002 254.004 NaN NaN NaN \n", "5.5 212.734 168.655 208.220 NaN NaN NaN NaN \n", "6.0 159.418 NaN 208.418 241.347 NaN NaN NaN \n", "6.5 233.890 110.517 NaN 207.919 NaN NaN NaN \n", "7.0 NaN NaN 155.691 229.022 NaN NaN NaN \n", "7.5 166.855 NaN NaN 128.897 198.053 NaN NaN \n", "8.0 NaN NaN NaN NaN 230.281 184.510 NaN \n", "8.5 NaN NaN NaN NaN NaN 248.338 264.534 \n", "9.0 NaN NaN NaN NaN NaN NaN NaN \n", "9.5 NaN NaN NaN NaN NaN 116.230 NaN \n", "10.0 NaN NaN NaN NaN NaN NaN 244.634 \n", "10.5 NaN NaN NaN NaN NaN 190.849 212.411 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create wave energy flux matrix using mean\n", "JM = wave.performance.wave_energy_flux_matrix(Hm0, Te, J, \"mean\", Hm0_bins, Te_bins)\n", "\n", "# Create power matrix using mean\n", "PM_mean = wave.performance.power_matrix(LM_mean, JM)\n", "\n", "# Create power matrix using standard deviation\n", "PM_std = wave.performance.power_matrix(LM_std, JM)\n", "\n", "# Show mean power matrix, round to 3 decimals\n", "PM_mean.round(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calculate MAEP\n", "There are two ways to calculate the mean annual energy production (MEAP). One is from capture length and wave energy flux matrices, the other is from time-series data, as shown below." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MAEP from timeseries = 1767087.527586333\n", "MAEP from matrices = 1781210.8652839188\n" ] } ], "source": [ "# Calcaulte maep from timeseries\n", "maep_timeseries = wave.performance.mean_annual_energy_production_timeseries(L, J)\n", "print(\"MAEP from timeseries = \", maep_timeseries)\n", "\n", "# Calcaulte maep from matrix\n", "maep_matrix = wave.performance.mean_annual_energy_production_matrix(\n", " LM_mean, JM, LM_freq\n", ")\n", "print(\"MAEP from matrices = \", maep_matrix)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Graphics\n", "The graphics function `plot_matrix` can be used to visualize results. It is important to note that the plotting function assumes the step size between bins to be linear." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot the capture length mean matrix\n", "ax = wave.graphics.plot_matrix(LM_mean)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The plotting function only requires the matrix as input, but the function can also take several other arguments.\n", "The list of optional arguments is: `xlabel, ylabel, zlabel, show_values, and ax`. The following uses these optional arguments. The matplotlib package is imported to define an axis with a larger figure size." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Customize the matrix plot\n", "import matplotlib.pylab as plt\n", "\n", "plt.figure(figsize=(6, 6))\n", "ax = plt.gca()\n", "wave.graphics.plot_matrix(\n", " PM_mean,\n", " xlabel=\"Te (s)\",\n", " ylabel=\"Hm0 (m)\",\n", " zlabel=\"Mean Power (kW)\",\n", " show_values=False,\n", " ax=ax,\n", ")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.8.8" } }, "nbformat": 4, "nbformat_minor": 4 }