{ "cells": [ { "cell_type": "markdown", "id": "70a6ebdd-7295-44ee-9654-65645b559196", "metadata": {}, "source": [ "# Comparing Transect Data at the Tanana River Test Site \n", "\n", "The TRTS is located near Nenana, Alaska, and was first investigated as a test site in 2008 after a CEC deployment in Eagle Alaska ended early due to debris-related issues. Since then, it has become an established test site with modular deployment infrastructure that can be adapted for different CEC deployments. The TRTS allows CECs to be tested in a harsh environment with cold temperatures, sediment, and heavy debris, representing the conditions of many remote Alaska river communities that could greatly benefit from ME. The following example will familiarize the user with the MHKiT DOLfYN and Delft3D modules by performing a Deflt3d numerical model validation of the Tanana River Test Site (TRTS) against field data.\n", "\n", "Start by importing the necessary python packages and MHKiT module." ] }, { "cell_type": "code", "execution_count": 1, "id": "447c788c-a042-4649-81c6-532fcd464c0e", "metadata": {}, "outputs": [], "source": [ "from os.path import abspath, dirname, join, normpath, relpath\n", "from matplotlib.pyplot import figure\n", "import scipy.interpolate as interp\n", "import matplotlib.pyplot as plt\n", "from datetime import datetime\n", "import xarray as xr\n", "import pandas as pd\n", "import numpy as np\n", "import scipy.io\n", "import netCDF4\n", "import math \n", "import utm\n", "# MHKiT Imports\n", "from mhkit.dolfyn.rotate import api as ap\n", "from mhkit.dolfyn.adp import api\n", "from mhkit import dolfyn as dlfn\n", "from mhkit.river.io import d3d \n", "from mhkit import river" ] }, { "cell_type": "markdown", "id": "552c226f-c933-4411-bcb0-bc012e74cfa4", "metadata": {}, "source": [ "## 1. Preparing the ADCP Field Data\n", "\n", "Acoustic Dopple Curent Profiler (ADCP) field data was collected in 2010 on the Tanana river near Nenana. From the picture shown below the flow can be seen enetering the picture from the bottom heading north. The figure further shows the two passes (Transects) of data collected. The data is collected using a barge used with a debris shield infront to protect instruments and test devices. The transect we are looking at are up-steam of the testing barge making them a good repesentiaion of the flow field the Curent Energy Convertes (CEC) are operating in. This transect data was collected using a Teledyne Rio Grand ADCP monted at the Bow of the boat facing downward. The boat faced and moved perpendicular to the river flow across the river as the ADCP was recording. \n", "\n", "In the next section we will import the two transects shown here into MHKiT and then interpolate these two passes into a single idealized transect for comparison with the simulated Deflt3D data.\n", "\n", "" ] }, { "cell_type": "markdown", "id": "e7cbf99b-302c-42a9-bc9a-f2029fbd5ed9", "metadata": {}, "source": [ "### ADCP: Importing Data\n", "\n", "The MHKiT DOLfYN api module can import `.PDO` and other binary formats from ADCP and ADV to an xarray. For this analysis we import two transect passes stored in the 'data' folder in `.PDO` format. For comparison to the numerical model we want to average the two transects into one xarray ('transect_1_2')." ] }, { "cell_type": "code", "execution_count": 2, "id": "079e0248-bb41-4c99-a954-19735dbe5e90", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Reading file data/river/ADCP_transect/tanana_transects_08_10_10_0_002_10-08-10_142214.PD0 ...\n", "\n", "Reading file data/river/ADCP_transect/tanana_transects_08_10_10_0_003_10-08-10_143335.PD0 ...\n" ] }, { "data": { "text/html": [ "
<xarray.Dataset>\n", "Dimensions: (time_gps: 1171, time: 1171, beam: 4, dir: 4, range: 47, x: 4, x*: 4, earth: 3, inst: 3)\n", "Coordinates:\n", " * time_gps (time_gps) datetime64[ns] 2010-08-10T22:28:17.200000...\n", " * time (time) datetime64[ns] 2010-08-10T14:28:15.559999942 ...\n", " * beam (beam) int32 1 2 3 4\n", " * dir (dir) <U3 'X' 'Y' 'Z' 'err'\n", " * range (range) float64 0.57 0.82 1.07 ... 11.57 11.82 12.07\n", " * x (x) int32 1 2 3 4\n", " * x* (x*) int32 1 2 3 4\n", " * earth (earth) <U1 'E' 'N' 'U'\n", " * inst (inst) <U1 'X' 'Y' 'Z'\n", "Data variables: (12/36)\n", " number (time) float64 3.652e+03 3.653e+03 ... 4.882e+03\n", " builtin_test_fail (time) float64 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n", " c_sound (time) float32 1.466e+03 1.466e+03 ... 1.466e+03\n", " depth (time) float32 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0\n", " pitch (time) float32 -0.1 -0.09 -0.21 ... -0.37 -0.29 -0.11\n", " roll (time) float32 3.33 3.32 3.33 3.49 ... 2.34 2.37 2.38\n", " ... ...\n", " rtk_age_gps (time_gps) float32 5.0 6.0 2.0 3.0 ... 2.0 2.0 3.0 3.0\n", " speed_over_grnd_gps (time_gps) float32 0.03549 0.03395 ... 0.2541 0.285\n", " dir_over_grnd_gps (time_gps) float32 115.5 94.08 6.931 ... 262.1 261.0\n", " hdwtime_gps (time_gps) datetime64[ns] 2010-08-10T14:28:15.559999...\n", " beam2inst_orientmat (x, x*) float64 1.462 -1.462 0.0 ... -1.034 -1.034\n", " orientmat (earth, inst, time) float64 -0.9037 -0.9025 ... 1.0 1.0\n", "Attributes: (12/38)\n", " inst_make: TRDI\n", " inst_type: ADCP\n", " rotate_vars: ['vel', 'vel_bt']\n", " has_imu: 0\n", " prog_ver: 10.16\n", " inst_model: Rio Grande\n", " ... ...\n", " false_target_threshold: 50\n", " transmit_lag_m: 0.08\n", " bandwidth: 0\n", " sourceprog: WINRIVER\n", " fs: 11.11111111111111\n", " vel_gps_corrected: 0
array(['2010-08-10T22:28:17.200000047', '2010-08-10T22:28:18.000000000',\n", " '2010-08-10T22:28:18.599999904', ..., '2010-08-10T22:39:44.400000095',\n", " '2010-08-10T22:39:45.200000047', '2010-08-10T22:39:45.799999952'],\n", " dtype='datetime64[ns]')
array(['2010-08-10T14:28:15.559999942', '2010-08-10T14:28:16.319999933',\n", " '2010-08-10T14:28:17.069999933', ..., '2010-08-10T14:39:42.710000038',\n", " '2010-08-10T14:39:43.500000000', '2010-08-10T14:39:44.279999971'],\n", " dtype='datetime64[ns]')
array([1, 2, 3, 4])
array(['X', 'Y', 'Z', 'err'], dtype='<U3')
array([ 0.57, 0.82, 1.07, 1.32, 1.57, 1.82, 2.07, 2.32, 2.57, 2.82,\n", " 3.07, 3.32, 3.57, 3.82, 4.07, 4.32, 4.57, 4.82, 5.07, 5.32,\n", " 5.57, 5.82, 6.07, 6.32, 6.57, 6.82, 7.07, 7.32, 7.57, 7.82,\n", " 8.07, 8.32, 8.57, 8.82, 9.07, 9.32, 9.57, 9.82, 10.07, 10.32,\n", " 10.57, 10.82, 11.07, 11.32, 11.57, 11.82, 12.07])
array([1, 2, 3, 4])
array([1, 2, 3, 4])
array(['E', 'N', 'U'], dtype='<U1')
array(['X', 'Y', 'Z'], dtype='<U1')
array([3652., 3653., 3654., ..., 4880., 4881., 4882.])
array([0., 0., 0., ..., 0., 0., 0.])
array([1466., 1466., 1466., ..., 1466., 1466., 1466.], dtype=float32)
array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)
array([-0.1 , -0.09, -0.21, ..., -0.37, -0.29, -0.11], dtype=float32)
array([3.33, 3.32, 3.33, ..., 2.34, 2.37, 2.38], dtype=float32)
array([154.65, 154.49, 155.01, ..., 162.91, 163.61, 163.03], dtype=float32)
array([15.2 , 15.25, 15.23, ..., 15.19, 15.18, 15.15], dtype=float32)
array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)
array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)
array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)
array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)
array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)
array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)
array([0., 0., 0., ..., 0., 0., 0.], dtype=float32)
array([[[ 0.057, -0.192, 0.121, ..., 0.129, 0.055, 0.133],\n", " [-0.058, -0.131, -0.119, ..., -0.006, -0.124, 0.043],\n", " [ 0.059, 0.406, 0.067, ..., 0.068, -0.213, -0.199],\n", " ...,\n", " [ nan, nan, nan, ..., nan, nan, nan],\n", " [ nan, nan, nan, ..., nan, nan, nan],\n", " [ nan, nan, nan, ..., nan, nan, nan]],\n", "\n", " [[-0.227, -0.047, -0.151, ..., -0.773, -0.553, -0.477],\n", " [ 0.023, -0.158, 0.204, ..., -0.961, -0.591, 0.123],\n", " [-0.303, -0.215, -0.019, ..., -0.672, -0.791, -0.384],\n", " ...,\n", " [ nan, nan, nan, ..., nan, nan, nan],\n", " [ nan, nan, nan, ..., nan, nan, nan],\n", " [ nan, nan, nan, ..., nan, nan, nan]],\n", "\n", " [[-0.01 , 0.022, -0.119, ..., 0.108, 0.186, 0.231],\n", " [-0.074, -0.01 , -0.06 , ..., 0.144, 0.185, 0.18 ],\n", " [-0.042, -0.013, -0.067, ..., 0.046, 0.163, 0.312],\n", " ...,\n", " [ nan, nan, nan, ..., nan, nan, nan],\n", " [ nan, nan, nan, ..., nan, nan, nan],\n", " [ nan, nan, nan, ..., nan, nan, nan]],\n", "\n", " [[ 0.26 , -0.043, -0.087, ..., -0.258, 0.088, -0.147],\n", " [ 0.102, 0.111, -0.204, ..., -0.072, 0.075, 0.225],\n", " [ 0.324, -0.038, 0.214, ..., -0.429, 0.558, 0.188],\n", " ...,\n", " [ nan, nan, nan, ..., nan, nan, nan],\n", " [ nan, nan, nan, ..., nan, nan, nan],\n", " [ nan, nan, nan, ..., nan, nan, nan]]],\n", " dtype=float32)
array([[[224., 229., 225., ..., 231., 227., 228.],\n", " [222., 222., 221., ..., 223., 224., 224.],\n", " [217., 215., 214., ..., 222., 220., 220.],\n", " ...,\n", " [ 53., 54., 54., ..., 51., 53., 54.],\n", " [ 52., 53., 52., ..., 53., 53., 49.],\n", " [ 54., 53., 52., ..., 51., 53., 52.]],\n", "\n", " [[207., 213., 210., ..., 212., 215., 212.],\n", " [212., 210., 205., ..., 213., 210., 209.],\n", " [201., 205., 204., ..., 206., 210., 207.],\n", " ...,\n", " [ 46., 51., 46., ..., 46., 44., 45.],\n", " [ 43., 55., 45., ..., 44., 45., 42.],\n", " [ 45., 51., 44., ..., 41., 45., 43.]],\n", "\n", " [[223., 226., 225., ..., 227., 230., 227.],\n", " [219., 220., 219., ..., 220., 224., 223.],\n", " [213., 213., 216., ..., 220., 218., 224.],\n", " ...,\n", " [ 49., 53., 51., ..., 55., 52., 48.],\n", " [ 52., 57., 52., ..., 53., 53., 49.],\n", " [ 50., 53., 50., ..., 50., 51., 50.]],\n", "\n", " [[215., 214., 217., ..., 216., 217., 218.],\n", " [215., 208., 211., ..., 210., 213., 213.],\n", " [207., 212., 203., ..., 205., 207., 211.],\n", " ...,\n", " [ 51., 57., 52., ..., 51., 55., 53.],\n", " [ 52., 58., 53., ..., 52., 53., 50.],\n", " [ 51., 60., 50., ..., 52., 52., 53.]]])
array([[[124., 118., 130., ..., 139., 122., 116.],\n", " [128., 140., 128., ..., 128., 126., 126.],\n", " [132., 119., 119., ..., 132., 118., 123.],\n", " ...,\n", " [ 18., 17., 19., ..., 23., 11., 25.],\n", " [ 11., 21., 22., ..., 24., 17., 19.],\n", " [ 17., 11., 11., ..., 9., 27., 27.]],\n", "\n", " [[128., 110., 118., ..., 127., 128., 140.],\n", " [126., 115., 127., ..., 136., 126., 108.],\n", " [128., 131., 120., ..., 133., 140., 121.],\n", " ...,\n", " [ 16., 14., 24., ..., 7., 14., 15.],\n", " [ 13., 11., 22., ..., 21., 19., 8.],\n", " [ 34., 18., 17., ..., 25., 33., 19.]],\n", "\n", " [[114., 132., 123., ..., 129., 132., 126.],\n", " [139., 142., 110., ..., 120., 120., 124.],\n", " [124., 122., 121., ..., 126., 123., 133.],\n", " ...,\n", " [ 12., 16., 17., ..., 7., 25., 31.],\n", " [ 11., 17., 17., ..., 21., 23., 35.],\n", " [ 17., 17., 11., ..., 11., 17., 24.]],\n", "\n", " [[118., 142., 130., ..., 133., 122., 130.],\n", " [142., 120., 137., ..., 129., 120., 130.],\n", " [110., 121., 126., ..., 125., 132., 120.],\n", " ...,\n", " [ 19., 13., 17., ..., 39., 14., 29.],\n", " [ 7., 25., 16., ..., 16., 13., 15.],\n", " [ 13., 25., 13., ..., 19., 24., 29.]]])
array([[[ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " ...,\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.]],\n", "\n", " [[ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " ...,\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.]],\n", "\n", " [[ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " ...,\n", " [100., 100., 100., ..., 100., 100., 100.],\n", " [100., 100., 100., ..., 100., 100., 100.],\n", " [100., 100., 100., ..., 100., 100., 100.]],\n", "\n", " [[100., 100., 100., ..., 100., 100., 100.],\n", " [100., 100., 100., ..., 100., 100., 100.],\n", " [100., 100., 100., ..., 100., 100., 100.],\n", " ...,\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.]]])
array([[3.95, 3.95, 3.96, ..., 3.6 , 3.54, 3.46],\n", " [2.55, 2.56, 2.57, ..., 2.71, 2.67, 2.62],\n", " [3.31, 3.32, 3.33, ..., 3.09, 3.04, 2.98],\n", " [2.87, 2.88, 2.88, ..., 3.09, 2.92, 2.98]], dtype=float32)
array([[ 6.3000e-02, -4.0000e-03, 3.9000e-02, ..., -2.6400e-01,\n", " -2.5200e-01, -2.5300e-01],\n", " [-3.7000e-02, 1.9000e-02, 1.5000e-02, ..., -1.0100e-01,\n", " -9.1000e-02, -9.2000e-02],\n", " [ 9.0000e-03, 0.0000e+00, 8.0000e-03, ..., -2.0000e-03,\n", " 5.0000e-03, -2.0000e-03],\n", " [-1.0000e-02, -6.0000e-03, -3.2768e+01, ..., 1.0000e-03,\n", " 0.0000e+00, 4.0000e-03]], dtype=float32)
array([[231., 243., 242., ..., 246., 250., 236.],\n", " [229., 239., 246., ..., 250., 253., 234.],\n", " [223., 237., 0., ..., 248., 246., 248.],\n", " [248., 244., 250., ..., 233., 239., 245.]])
array([[40., 40., 36., ..., 58., 63., 49.],\n", " [45., 38., 47., ..., 67., 79., 67.],\n", " [40., 43., 36., ..., 62., 53., 53.],\n", " [55., 54., 52., ..., 42., 63., 62.]])
array([[ 0., 0., 100., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [ 0., 0., 0., ..., 0., 0., 0.],\n", " [100., 100., 0., ..., 100., 100., 100.]])
array([64.560905, 64.560905, 64.560905, ..., 64.56095 , 64.56095 ,\n", " 64.56095 ], dtype=float32)
array([-149.06679, -149.06679, -149.06679, ..., -149.06676, -149.06676,\n", " -149.06677], dtype=float32)
array([9., 9., 9., ..., 9., 9., 9.])
array([ 9., 9., 9., ..., 10., 10., 10.])
array([0.9, 0.9, 0.9, ..., 0.8, 0.8, 0.8], dtype=float32)
array([108.483, 108.196, 108.208, ..., 108.659, 108.655, 108.668],\n", " dtype=float32)
array([5., 6., 2., ..., 2., 3., 3.], dtype=float32)
array([0.03549382, 0.03395062, 0.03858025, ..., 0.29166666, 0.25411522,\n", " 0.28497943], dtype=float32)
array([115.501, 94.077, 6.931, ..., 255.591, 262.114, 261.019],\n", " dtype=float32)
array(['2010-08-10T14:28:15.559999942', '2010-08-10T14:28:16.319999933',\n", " '2010-08-10T14:28:17.069999933', ...,\n", " '2010-08-10T14:39:42.710000038', '2010-08-10T14:39:43.500000000',\n", " '2010-08-10T14:39:44.279999971'], dtype='datetime64[ns]')
array([[ 1.4619022 , -1.4619022 , 0. , 0. ],\n", " [ 0. , 0. , -1.4619022 , 1.4619022 ],\n", " [ 0.26604444, 0.26604444, 0.26604444, 0.26604444],\n", " [ 1.03372096, 1.03372096, -1.03372096, -1.03372096]])
array([[[-0.90370917, -0.90251011, -0.90638149, ..., -0.95584428,\n", " -0.95936322, -0.95645773],\n", " [-0.42814681, -0.43066862, -0.42246014, ..., -0.29387355,\n", " -0.28217408, -0.29187089],\n", " [-0. , -0. , -0. , ..., -0. ,\n", " -0. , -0. ]],\n", "\n", " [[ 0.42814681, 0.43066862, 0.42246014, ..., 0.29387355,\n", " 0.28217408, 0.29187089],\n", " [-0.90370917, -0.90251011, -0.90638149, ..., -0.95584428,\n", " -0.95936322, -0.95645773],\n", " [ 0. , 0. , 0. , ..., 0. ,\n", " 0. , 0. ]],\n", "\n", " [[-0. , -0. , -0. , ..., -0. ,\n", " -0. , -0. ],\n", " [ 0. , 0. , 0. , ..., 0. ,\n", " 0. , 0. ],\n", " [ 1. , 1. , 1. , ..., 1. ,\n", " 1. , 1. ]]])
\n", " | utm_x | \n", "utm_y | \n", "waterdepth | \n", "east_velocity | \n", "north_velocity | \n", "vertical_velocity | \n", "
---|---|---|---|---|---|---|
0 | \n", "400953.813014 | \n", "7.161133e+06 | \n", "0.57 | \n", "-0.094245 | \n", "0.214233 | \n", "-0.010 | \n", "
1 | \n", "400953.813014 | \n", "7.161133e+06 | \n", "0.57 | \n", "0.181185 | \n", "0.079026 | \n", "0.022 | \n", "
2 | \n", "400953.813014 | \n", "7.161133e+06 | \n", "0.57 | \n", "-0.143789 | \n", "0.129486 | \n", "-0.119 | \n", "
3 | \n", "400953.813014 | \n", "7.161133e+06 | \n", "0.57 | \n", "-0.432847 | \n", "0.519561 | \n", "-0.095 | \n", "
4 | \n", "400953.813014 | \n", "7.161133e+06 | \n", "0.57 | \n", "-0.258352 | \n", "0.393507 | \n", "-0.106 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
36171 | \n", "400989.066656 | \n", "7.161150e+06 | \n", "8.07 | \n", "0.074346 | \n", "1.819609 | \n", "0.084 | \n", "
37323 | \n", "400993.746501 | \n", "7.161153e+06 | \n", "8.32 | \n", "0.409135 | \n", "0.774590 | \n", "0.055 | \n", "
37324 | \n", "400993.746501 | \n", "7.161153e+06 | \n", "8.32 | \n", "0.230414 | \n", "0.237873 | \n", "0.038 | \n", "
37328 | \n", "400992.412805 | \n", "7.161152e+06 | \n", "8.32 | \n", "0.381595 | \n", "0.560519 | \n", "0.104 | \n", "
37331 | \n", "400991.734048 | \n", "7.161151e+06 | \n", "8.32 | \n", "0.058718 | \n", "0.515059 | \n", "0.152 | \n", "
21850 rows × 6 columns
\n", "\n", " | east_velocity | \n", "north_velocity | \n", "vertical_velocity | \n", "magnitude | \n", "
---|---|---|---|---|
0 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
1 | \n", "-0.300636 | \n", "1.421535 | \n", "0.042712 | \n", "1.453605 | \n", "
2 | \n", "-0.758431 | \n", "1.832806 | \n", "-0.016720 | \n", "1.983601 | \n", "
3 | \n", "-0.972110 | \n", "2.340159 | \n", "-0.043599 | \n", "2.534412 | \n", "
4 | \n", "-1.011364 | \n", "2.046775 | \n", "-0.034462 | \n", "2.283273 | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
115 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
116 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
117 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
118 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
119 | \n", "NaN | \n", "NaN | \n", "NaN | \n", "NaN | \n", "
120 rows × 4 columns
\n", "