{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# MHKiT SWAN Example\n", "\n", "This example notebook demonstrates the input and plotting of output data from the software [Simulating WAves Nearshore (SWAN)](http://swanmodel.sourceforge.net/) using MHKiT. In this example the [SNL-SWAN](https://github.com/SNL-WaterPower/SNL-SWAN) tutorial was run for a wave energy converter. The output was written in ASCII and binary (*.mat) files. This MHKiT example notebook demonstrates how to import these different files into MHKiT and plot the output data. First, we will import the MHKiT SWAN package and the other Python packages needed for this example. Secondly, we will create an operating system independent path to the folder housing the SWAN data used in this example `swan_data_folder` using the `join` funtion. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from mhkit.wave.io import swan\n", "import matplotlib.pyplot as plt\n", "from os.path import join\n", "import pandas as pd\n", "\n", "swan_data_folder = join('data','wave','swan')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Supported SWAN Output Files\n", "\n", "MHKiT currenlty supports block and table SWAN output files in ASCII or binary (*.mat) files. Detailed descriptions of these file types may be found in the [SWAN User Manual](http://swanmodel.sourceforge.net/download/zip/swanuse.pdf). In the following cells, SWAN table and block data will be imported, discussed, and plotted. Three SWAN output files will be imported:\n", " 1. An ASCII table file ('SWANOUT.DAT'), \n", " 2. An ASCII block file ('SWANOUTBlock.DAT') \n", " 3. A binary block file ('SWANOUT.mat') " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "swan_table_file = join(swan_data_folder, 'SWANOUT.DAT')\n", "swan_block_file = join(swan_data_folder, 'SWANOUTBlock.DAT')\n", "swan_block_mat_file = join(swan_data_folder, 'SWANOUT.mat')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load SWAN Files with MHKiT\n", "\n", "To load a supported SWAN file simply call the `swan.read_table` or `swan.read_block` as appropriate for the swan output. The MHKiT function will read in the SWAN output and return the data as a DataFrame for table data or a dictionary of DataFrames for block data with multiple quantities of interest written to the file. The MHKiT SWAN read function will also return any metadata that the file may contain which will vary based on the file type and options specified in the SWAN run. MHKiT requires that for block data written in ASCII format that the file was written with headers. The `swan.read_block` function accepts both binary and ASCII format by assuming that any non-'.mat' extension is ASCII format." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## SWAN Table Data and Metadata\n", "\n", "The SWAN output table is parsed from the MHKiT funtion `swan.read_table` into a DataFrame that is displayed below. The DataFrame columns contain a series of x-points ('Xp'), y-points ('Yp'), and keyword values at a given (x,y) point. The keywords are specified in the SWAN user manual and here can be seen as: 'Hsig' (significant wave height), 'Dir' (average wave direction), 'RTpeak' (Relative peak period), 'TDir' (direction of the energy transport). " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | Xp | \n", "Yp | \n", "Hsig | \n", "Dir | \n", "RTpeak | \n", "TDir | \n", "
---|---|---|---|---|---|---|
0 | \n", "0.0 | \n", "0.0 | \n", "1.00106 | \n", "0.000 | \n", "9.5726 | \n", "0.000 | \n", "
1 | \n", "10.0 | \n", "0.0 | \n", "1.00106 | \n", "0.000 | \n", "9.5726 | \n", "0.000 | \n", "
2 | \n", "20.0 | \n", "0.0 | \n", "1.00106 | \n", "0.000 | \n", "9.5726 | \n", "0.000 | \n", "
3 | \n", "30.0 | \n", "0.0 | \n", "1.00106 | \n", "0.000 | \n", "9.5726 | \n", "0.000 | \n", "
4 | \n", "40.0 | \n", "0.0 | \n", "1.00106 | \n", "0.000 | \n", "9.5726 | \n", "0.000 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
10196 | \n", "960.0 | \n", "1000.0 | \n", "1.00091 | \n", "359.990 | \n", "9.5726 | \n", "359.991 | \n", "
10197 | \n", "970.0 | \n", "1000.0 | \n", "1.00089 | \n", "359.988 | \n", "9.5726 | \n", "359.989 | \n", "
10198 | \n", "980.0 | \n", "1000.0 | \n", "1.00086 | \n", "359.986 | \n", "9.5726 | \n", "359.987 | \n", "
10199 | \n", "990.0 | \n", "1000.0 | \n", "1.00083 | \n", "359.984 | \n", "9.5726 | \n", "359.985 | \n", "
10200 | \n", "1000.0 | \n", "1000.0 | \n", "1.00079 | \n", "359.981 | \n", "9.5726 | \n", "359.982 | \n", "
10201 rows × 6 columns
\n", "\n", " | 0 | \n", "1 | \n", "2 | \n", "3 | \n", "4 | \n", "5 | \n", "6 | \n", "7 | \n", "8 | \n", "9 | \n", "... | \n", "91 | \n", "92 | \n", "93 | \n", "94 | \n", "95 | \n", "96 | \n", "97 | \n", "98 | \n", "99 | \n", "100 | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
100 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "
99 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "
98 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "
97 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "
96 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
4 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "
3 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "
2 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "
1 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "
0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "... | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "1.0 | \n", "
101 rows × 101 columns
\n", "\n", " | 0 | \n", "1 | \n", "2 | \n", "3 | \n", "4 | \n", "5 | \n", "6 | \n", "7 | \n", "8 | \n", "9 | \n", "... | \n", "91 | \n", "92 | \n", "93 | \n", "94 | \n", "95 | \n", "96 | \n", "97 | \n", "98 | \n", "99 | \n", "100 | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "1.001056 | \n", "1.001056 | \n", "1.001055 | \n", "1.001055 | \n", "1.001055 | \n", "1.001055 | \n", "1.001054 | \n", "1.001054 | \n", "1.001054 | \n", "1.001053 | \n", "... | \n", "1.000756 | \n", "1.000708 | \n", "1.000654 | \n", "1.000595 | \n", "1.000529 | \n", "1.000456 | \n", "1.000376 | \n", "1.000289 | \n", "1.000195 | \n", "1.000088 | \n", "
1 | \n", "1.001056 | \n", "1.001055 | \n", "1.001055 | \n", "1.001054 | \n", "1.001054 | \n", "1.001054 | \n", "1.001053 | \n", "1.001053 | \n", "1.001052 | \n", "1.001052 | \n", "... | \n", "1.000698 | \n", "1.000641 | \n", "1.000579 | \n", "1.000509 | \n", "1.000432 | \n", "1.000348 | \n", "1.000256 | \n", "1.000156 | \n", "1.000047 | \n", "0.999916 | \n", "
2 | \n", "1.001056 | \n", "1.001055 | \n", "1.001055 | \n", "1.001054 | \n", "1.001054 | \n", "1.001053 | \n", "1.001052 | \n", "1.001052 | \n", "1.001051 | \n", "1.001051 | \n", "... | \n", "1.000615 | \n", "1.000548 | \n", "1.000473 | \n", "1.000390 | \n", "1.000299 | \n", "1.000200 | \n", "1.000092 | \n", "0.999976 | \n", "0.999850 | \n", "0.999699 | \n", "
3 | \n", "1.001056 | \n", "1.001055 | \n", "1.001055 | \n", "1.001054 | \n", "1.001054 | \n", "1.001053 | \n", "1.001052 | \n", "1.001052 | \n", "1.001051 | \n", "1.001051 | \n", "... | \n", "1.000515 | \n", "1.000434 | \n", "1.000345 | \n", "1.000247 | \n", "1.000140 | \n", "1.000023 | \n", "0.999897 | \n", "0.999762 | \n", "0.999616 | \n", "0.999444 | \n", "
4 | \n", "1.001056 | \n", "1.001055 | \n", "1.001055 | \n", "1.001054 | \n", "1.001054 | \n", "1.001053 | \n", "1.001052 | \n", "1.001052 | \n", "1.001051 | \n", "1.001050 | \n", "... | \n", "1.000392 | \n", "1.000295 | \n", "1.000189 | \n", "1.000073 | \n", "0.999947 | \n", "0.999811 | \n", "0.999665 | \n", "0.999508 | \n", "0.999340 | \n", "0.999143 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
96 | \n", "1.001056 | \n", "1.001055 | \n", "1.001055 | \n", "1.001054 | \n", "1.001054 | \n", "1.001053 | \n", "1.001052 | \n", "1.001052 | \n", "1.001051 | \n", "1.001050 | \n", "... | \n", "1.000917 | \n", "1.000893 | \n", "1.000865 | \n", "1.000833 | \n", "1.000795 | \n", "1.000752 | \n", "1.000703 | \n", "1.000648 | \n", "1.000586 | \n", "1.000506 | \n", "
97 | \n", "1.001056 | \n", "1.001055 | \n", "1.001055 | \n", "1.001054 | \n", "1.001054 | \n", "1.001053 | \n", "1.001052 | \n", "1.001052 | \n", "1.001051 | \n", "1.001051 | \n", "... | \n", "1.000941 | \n", "1.000921 | \n", "1.000899 | \n", "1.000872 | \n", "1.000841 | \n", "1.000806 | \n", "1.000765 | \n", "1.000720 | \n", "1.000668 | \n", "1.000599 | \n", "
98 | \n", "1.001056 | \n", "1.001055 | \n", "1.001055 | \n", "1.001054 | \n", "1.001054 | \n", "1.001053 | \n", "1.001052 | \n", "1.001052 | \n", "1.001051 | \n", "1.001051 | \n", "... | \n", "1.000960 | \n", "1.000945 | \n", "1.000926 | \n", "1.000905 | \n", "1.000879 | \n", "1.000850 | \n", "1.000817 | \n", "1.000779 | \n", "1.000735 | \n", "1.000678 | \n", "
99 | \n", "1.001056 | \n", "1.001055 | \n", "1.001055 | \n", "1.001054 | \n", "1.001054 | \n", "1.001053 | \n", "1.001053 | \n", "1.001052 | \n", "1.001052 | \n", "1.001052 | \n", "... | \n", "1.000976 | \n", "1.000964 | \n", "1.000949 | \n", "1.000931 | \n", "1.000911 | \n", "1.000887 | \n", "1.000859 | \n", "1.000827 | \n", "1.000791 | \n", "1.000743 | \n", "
100 | \n", "1.001056 | \n", "1.001055 | \n", "1.001055 | \n", "1.001055 | \n", "1.001055 | \n", "1.001054 | \n", "1.001054 | \n", "1.001054 | \n", "1.001053 | \n", "1.001053 | \n", "... | \n", "1.000988 | \n", "1.000978 | \n", "1.000965 | \n", "1.000951 | \n", "1.000933 | \n", "1.000913 | \n", "1.000889 | \n", "1.000862 | \n", "1.000832 | \n", "1.000793 | \n", "
101 rows × 101 columns
\n", "\n", " | x | \n", "y | \n", "Significant wave height | \n", "Average wave direction | \n", "Relative peak period | \n", "direction of the energy transport | \n", "
---|---|---|---|---|---|---|
100 | \n", "0 | \n", "0 | \n", "1.0 | \n", "0.0 | \n", "9.6 | \n", "0.0 | \n", "
99 | \n", "0 | \n", "1 | \n", "1.0 | \n", "0.0 | \n", "9.6 | \n", "0.0 | \n", "
98 | \n", "0 | \n", "2 | \n", "1.0 | \n", "0.0 | \n", "9.6 | \n", "0.0 | \n", "
97 | \n", "0 | \n", "3 | \n", "1.0 | \n", "0.0 | \n", "9.6 | \n", "0.0 | \n", "
96 | \n", "0 | \n", "4 | \n", "1.0 | \n", "0.0 | \n", "9.6 | \n", "0.0 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
10104 | \n", "100 | \n", "96 | \n", "1.0 | \n", "NaN | \n", "9.6 | \n", "NaN | \n", "
10103 | \n", "100 | \n", "97 | \n", "1.0 | \n", "NaN | \n", "9.6 | \n", "NaN | \n", "
10102 | \n", "100 | \n", "98 | \n", "1.0 | \n", "NaN | \n", "9.6 | \n", "NaN | \n", "
10101 | \n", "100 | \n", "99 | \n", "1.0 | \n", "NaN | \n", "9.6 | \n", "NaN | \n", "
10100 | \n", "100 | \n", "100 | \n", "1.0 | \n", "NaN | \n", "9.6 | \n", "NaN | \n", "
10201 rows × 6 columns
\n", "