"
],
"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",
"
0.0
\n",
"
1.0
\n",
"
2.0
\n",
"
3.0
\n",
"
4.0
\n",
"
5.0
\n",
"
6.0
\n",
"
7.0
\n",
"
8.0
\n",
"
9.0
\n",
"
10.0
\n",
"
11.0
\n",
"
12.0
\n",
"
13.0
\n",
"
14.0
\n",
"
15.0
\n",
"
16.0
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
0.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.120286
\n",
"
0.053376
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
1.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.110686
\n",
"
0.068070
\n",
"
0.049452
\n",
"
0.065912
\n",
"
NaN
\n",
"
0.056593
\n",
"
0.029950
\n",
"
0.017234
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
1.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.019749
\n",
"
0.018673
\n",
"
NaN
\n",
"
NaN
\n",
"
0.012473
\n",
"
0.011205
\n",
"
0.012307
\n",
"
0.010432
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
2.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.013882
\n",
"
0.012547
\n",
"
0.009672
\n",
"
0.008770
\n",
"
0.008585
\n",
"
0.007525
\n",
"
0.005272
\n",
"
0.007809
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
2.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.007244
\n",
"
0.006488
\n",
"
0.005788
\n",
"
0.005652
\n",
"
0.005180
\n",
"
0.004260
\n",
"
0.003623
\n",
"
0.004509
\n",
"
NaN
\n",
"
\n",
"
\n",
"
3.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.004500
\n",
"
0.005660
\n",
"
0.004691
\n",
"
0.004109
\n",
"
0.003952
\n",
"
0.003104
\n",
"
0.003408
\n",
"
0.002291
\n",
"
0.001792
\n",
"
NaN
\n",
"
\n",
"
\n",
"
3.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.003924
\n",
"
0.003674
\n",
"
0.003020
\n",
"
0.002746
\n",
"
0.002247
\n",
"
0.002000
\n",
"
0.002257
\n",
"
0.002033
\n",
"
NaN
\n",
"
\n",
"
\n",
"
4.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.003185
\n",
"
0.002513
\n",
"
0.002386
\n",
"
0.002147
\n",
"
0.002246
\n",
"
0.001605
\n",
"
0.001730
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
4.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.002343
\n",
"
0.002087
\n",
"
0.001919
\n",
"
0.001590
\n",
"
0.001438
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
5.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.001913
\n",
"
0.001720
\n",
"
0.001716
\n",
"
0.001411
\n",
"
0.001219
\n",
"
0.001345
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
5.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.002101
\n",
"
0.001516
\n",
"
0.001331
\n",
"
0.000902
\n",
"
0.001033
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
6.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.001097
\n",
"
0.000895
\n",
"
NaN
\n",
"
0.000858
\n",
"
0.000987
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
6.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.000837
\n",
"
0.001024
\n",
"
0.000419
\n",
"
NaN
\n",
"
0.000688
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
7.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.000461
\n",
"
0.000633
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
7.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.000553
\n",
"
NaN
\n",
"
NaN
\n",
"
0.000312
\n",
"
0.000437
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
8.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.000443
\n",
"
0.000351
\n",
"
NaN
\n",
"
\n",
"
\n",
"
8.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.000418
\n",
"
0.000405
\n",
"
\n",
"
\n",
"
9.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
9.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.000153
\n",
"
NaN
\n",
"
\n",
"
\n",
"
10.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.000281
\n",
"
\n",
"
\n",
"
10.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0.000204
\n",
"
0.000225
\n",
"
\n",
" \n",
"
\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",
"
0.0
\n",
"
1.0
\n",
"
2.0
\n",
"
3.0
\n",
"
4.0
\n",
"
5.0
\n",
"
6.0
\n",
"
7.0
\n",
"
8.0
\n",
"
9.0
\n",
"
10.0
\n",
"
11.0
\n",
"
12.0
\n",
"
13.0
\n",
"
14.0
\n",
"
15.0
\n",
"
16.0
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
0.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.002692
\n",
"
0.001346
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
1.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.001346
\n",
"
0.006729
\n",
"
0.004038
\n",
"
0.001346
\n",
"
0.000000
\n",
"
0.002692
\n",
"
0.002692
\n",
"
0.001346
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
1.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.005384
\n",
"
0.002692
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.009421
\n",
"
0.004038
\n",
"
0.006729
\n",
"
0.005384
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
2.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.002692
\n",
"
0.005384
\n",
"
0.018843
\n",
"
0.018843
\n",
"
0.029610
\n",
"
0.021534
\n",
"
0.001346
\n",
"
0.002692
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
2.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.013459
\n",
"
0.052490
\n",
"
0.055182
\n",
"
0.018843
\n",
"
0.025572
\n",
"
0.022880
\n",
"
0.005384
\n",
"
0.001346
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
3.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.001346
\n",
"
0.021534
\n",
"
0.044415
\n",
"
0.047106
\n",
"
0.020188
\n",
"
0.012113
\n",
"
0.010767
\n",
"
0.010767
\n",
"
0.001346
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
3.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.006729
\n",
"
0.040377
\n",
"
0.029610
\n",
"
0.047106
\n",
"
0.004038
\n",
"
0.008075
\n",
"
0.004038
\n",
"
0.001346
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
4.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.009421
\n",
"
0.017497
\n",
"
0.029610
\n",
"
0.040377
\n",
"
0.002692
\n",
"
0.004038
\n",
"
0.005384
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
4.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.016151
\n",
"
0.013459
\n",
"
0.017497
\n",
"
0.022880
\n",
"
0.012113
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
5.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.002692
\n",
"
0.008075
\n",
"
0.008075
\n",
"
0.010767
\n",
"
0.022880
\n",
"
0.001346
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
5.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.001346
\n",
"
0.012113
\n",
"
0.006729
\n",
"
0.004038
\n",
"
0.014805
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
6.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.002692
\n",
"
0.002692
\n",
"
0.000000
\n",
"
0.005384
\n",
"
0.001346
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
6.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.002692
\n",
"
0.002692
\n",
"
0.001346
\n",
"
0.000000
\n",
"
0.002692
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
7.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.001346
\n",
"
0.004038
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
7.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.001346
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.001346
\n",
"
0.008075
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
8.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.002692
\n",
"
0.002692
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
8.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.001346
\n",
"
0.001346
\n",
"
\n",
"
\n",
"
9.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
9.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.001346
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
10.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.001346
\n",
"
\n",
"
\n",
"
10.5
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.0
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.000000
\n",
"
0.001346
\n",
"
0.001346
\n",
"
\n",
" \n",
"
\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",
"
0.0
\n",
"
1.0
\n",
"
2.0
\n",
"
3.0
\n",
"
4.0
\n",
"
5.0
\n",
"
6.0
\n",
"
7.0
\n",
"
8.0
\n",
"
9.0
\n",
"
10.0
\n",
"
11.0
\n",
"
12.0
\n",
"
13.0
\n",
"
14.0
\n",
"
15.0
\n",
"
16.0
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
0.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
224.996
\n",
"
117.594
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
1.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
212.762
\n",
"
202.713
\n",
"
188.707
\n",
"
187.103
\n",
"
NaN
\n",
"
213.926
\n",
"
174.154
\n",
"
164.886
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
1.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
176.402
\n",
"
199.802
\n",
"
NaN
\n",
"
NaN
\n",
"
201.883
\n",
"
191.598
\n",
"
221.705
\n",
"
190.124
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
2.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
203.667
\n",
"
216.857
\n",
"
192.965
\n",
"
201.633
\n",
"
216.268
\n",
"
209.634
\n",
"
162.569
\n",
"
232.530
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
2.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
193.397
\n",
"
203.529
\n",
"
196.907
\n",
"
212.883
\n",
"
211.277
\n",
"
202.760
\n",
"
199.263
\n",
"
272.421
\n",
"
NaN
\n",
"
\n",
"
\n",
"
3.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
170.739
\n",
"
216.459
\n",
"
197.484
\n",
"
200.895
\n",
"
212.107
\n",
"
193.837
\n",
"
222.185
\n",
"
169.497
\n",
"
122.296
\n",
"
NaN
\n",
"
\n",
"
\n",
"
3.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
194.894
\n",
"
214.108
\n",
"
202.725
\n",
"
206.901
\n",
"
184.099
\n",
"
186.077
\n",
"
221.659
\n",
"
186.201
\n",
"
NaN
\n",
"
\n",
"
\n",
"
4.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
217.289
\n",
"
189.403
\n",
"
201.362
\n",
"
207.532
\n",
"
207.971
\n",
"
172.771
\n",
"
213.854
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
4.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
197.994
\n",
"
194.238
\n",
"
205.559
\n",
"
203.195
\n",
"
197.980
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
5.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
198.149
\n",
"
196.527
\n",
"
222.219
\n",
"
215.221
\n",
"
204.002
\n",
"
254.004
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
5.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
249.158
\n",
"
212.561
\n",
"
212.734
\n",
"
168.655
\n",
"
208.220
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
6.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
182.314
\n",
"
159.418
\n",
"
NaN
\n",
"
208.418
\n",
"
241.347
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
6.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
164.712
\n",
"
233.890
\n",
"
110.517
\n",
"
NaN
\n",
"
207.919
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
7.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
155.691
\n",
"
229.022
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
7.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
166.855
\n",
"
NaN
\n",
"
NaN
\n",
"
128.897
\n",
"
198.053
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
8.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
230.281
\n",
"
184.510
\n",
"
NaN
\n",
"
\n",
"
\n",
"
8.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
248.338
\n",
"
264.534
\n",
"
\n",
"
\n",
"
9.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
\n",
"
\n",
"
9.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
116.230
\n",
"
NaN
\n",
"
\n",
"
\n",
"
10.0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
244.634
\n",
"
\n",
"
\n",
"
10.5
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
190.849
\n",
"
212.411
\n",
"
\n",
" \n",
"
\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": [
"