Skip to content

Instantly share code, notes, and snippets.

@rsignell-usgs
Created November 12, 2023 19:04
Show Gist options
  • Save rsignell-usgs/8cd9e4d0fabd3cc8c508a400a3d11324 to your computer and use it in GitHub Desktop.
Save rsignell-usgs/8cd9e4d0fabd3cc8c508a400a3d11324 to your computer and use it in GitHub Desktop.
cnaps_example_intake.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "664564e4-d25c-43ea-974c-716beb4f4f00",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import numpy as np\n",
"from opendrift.readers import reader_ROMS_intake\n",
"from opendrift.models.oceandrift import OceanDrift\n",
"import intake\n",
"import xarray as xr"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "5653a5a8-e0fc-4fb2-8c3a-a872ed9e6688",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/plain": [
"['CNAPS_Forecast_Archive', 'CNAPS_Forecast_Archive_64', 'CNAPS_opendrift']"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"intake_catalog = 'https://mghp.osn.xsede.org/rsignellbucket1/rsignell/testing/cnaps.yml'\n",
"cat = intake.open_catalog(intake_catalog)\n",
"list(cat)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "82624a99-d8d7-4c13-84a3-f885e627fb34",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"dataset = 'CNAPS_opendrift'\n",
"ds = cat[dataset].to_dask()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "44256bf1-d2f5-44b6-b748-56c798599da3",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<div><svg style=\"position: absolute; width: 0; height: 0; overflow: hidden\">\n",
"<defs>\n",
"<symbol id=\"icon-database\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M16 0c-8.837 0-16 2.239-16 5v4c0 2.761 7.163 5 16 5s16-2.239 16-5v-4c0-2.761-7.163-5-16-5z\"></path>\n",
"<path d=\"M16 17c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"<path d=\"M16 26c-8.837 0-16-2.239-16-5v6c0 2.761 7.163 5 16 5s16-2.239 16-5v-6c0 2.761-7.163 5-16 5z\"></path>\n",
"</symbol>\n",
"<symbol id=\"icon-file-text2\" viewBox=\"0 0 32 32\">\n",
"<path d=\"M28.681 7.159c-0.694-0.947-1.662-2.053-2.724-3.116s-2.169-2.030-3.116-2.724c-1.612-1.182-2.393-1.319-2.841-1.319h-15.5c-1.378 0-2.5 1.121-2.5 2.5v27c0 1.378 1.122 2.5 2.5 2.5h23c1.378 0 2.5-1.122 2.5-2.5v-19.5c0-0.448-0.137-1.23-1.319-2.841zM24.543 5.457c0.959 0.959 1.712 1.825 2.268 2.543h-4.811v-4.811c0.718 0.556 1.584 1.309 2.543 2.268zM28 29.5c0 0.271-0.229 0.5-0.5 0.5h-23c-0.271 0-0.5-0.229-0.5-0.5v-27c0-0.271 0.229-0.5 0.5-0.5 0 0 15.499-0 15.5 0v7c0 0.552 0.448 1 1 1h7v19.5z\"></path>\n",
"<path d=\"M23 26h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 22h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"<path d=\"M23 18h-14c-0.552 0-1-0.448-1-1s0.448-1 1-1h14c0.552 0 1 0.448 1 1s-0.448 1-1 1z\"></path>\n",
"</symbol>\n",
"</defs>\n",
"</svg>\n",
"<style>/* CSS stylesheet for displaying xarray objects in jupyterlab.\n",
" *\n",
" */\n",
"\n",
":root {\n",
" --xr-font-color0: var(--jp-content-font-color0, rgba(0, 0, 0, 1));\n",
" --xr-font-color2: var(--jp-content-font-color2, rgba(0, 0, 0, 0.54));\n",
" --xr-font-color3: var(--jp-content-font-color3, rgba(0, 0, 0, 0.38));\n",
" --xr-border-color: var(--jp-border-color2, #e0e0e0);\n",
" --xr-disabled-color: var(--jp-layout-color3, #bdbdbd);\n",
" --xr-background-color: var(--jp-layout-color0, white);\n",
" --xr-background-color-row-even: var(--jp-layout-color1, white);\n",
" --xr-background-color-row-odd: var(--jp-layout-color2, #eeeeee);\n",
"}\n",
"\n",
"html[theme=dark],\n",
"body[data-theme=dark],\n",
"body.vscode-dark {\n",
" --xr-font-color0: rgba(255, 255, 255, 1);\n",
" --xr-font-color2: rgba(255, 255, 255, 0.54);\n",
" --xr-font-color3: rgba(255, 255, 255, 0.38);\n",
" --xr-border-color: #1F1F1F;\n",
" --xr-disabled-color: #515151;\n",
" --xr-background-color: #111111;\n",
" --xr-background-color-row-even: #111111;\n",
" --xr-background-color-row-odd: #313131;\n",
"}\n",
"\n",
".xr-wrap {\n",
" display: block !important;\n",
" min-width: 300px;\n",
" max-width: 700px;\n",
"}\n",
"\n",
".xr-text-repr-fallback {\n",
" /* fallback to plain text repr when CSS is not injected (untrusted notebook) */\n",
" display: none;\n",
"}\n",
"\n",
".xr-header {\n",
" padding-top: 6px;\n",
" padding-bottom: 6px;\n",
" margin-bottom: 4px;\n",
" border-bottom: solid 1px var(--xr-border-color);\n",
"}\n",
"\n",
".xr-header > div,\n",
".xr-header > ul {\n",
" display: inline;\n",
" margin-top: 0;\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-obj-type,\n",
".xr-array-name {\n",
" margin-left: 2px;\n",
" margin-right: 10px;\n",
"}\n",
"\n",
".xr-obj-type {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-sections {\n",
" padding-left: 0 !important;\n",
" display: grid;\n",
" grid-template-columns: 150px auto auto 1fr 20px 20px;\n",
"}\n",
"\n",
".xr-section-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-section-item input {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-item input + label {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label {\n",
" cursor: pointer;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-item input:enabled + label:hover {\n",
" color: var(--xr-font-color0);\n",
"}\n",
"\n",
".xr-section-summary {\n",
" grid-column: 1;\n",
" color: var(--xr-font-color2);\n",
" font-weight: 500;\n",
"}\n",
"\n",
".xr-section-summary > span {\n",
" display: inline-block;\n",
" padding-left: 0.5em;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label {\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-section-summary-in + label:before {\n",
" display: inline-block;\n",
" content: '►';\n",
" font-size: 11px;\n",
" width: 15px;\n",
" text-align: center;\n",
"}\n",
"\n",
".xr-section-summary-in:disabled + label:before {\n",
" color: var(--xr-disabled-color);\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label:before {\n",
" content: '▼';\n",
"}\n",
"\n",
".xr-section-summary-in:checked + label > span {\n",
" display: none;\n",
"}\n",
"\n",
".xr-section-summary,\n",
".xr-section-inline-details {\n",
" padding-top: 4px;\n",
" padding-bottom: 4px;\n",
"}\n",
"\n",
".xr-section-inline-details {\n",
" grid-column: 2 / -1;\n",
"}\n",
"\n",
".xr-section-details {\n",
" display: none;\n",
" grid-column: 1 / -1;\n",
" margin-bottom: 5px;\n",
"}\n",
"\n",
".xr-section-summary-in:checked ~ .xr-section-details {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-array-wrap {\n",
" grid-column: 1 / -1;\n",
" display: grid;\n",
" grid-template-columns: 20px auto;\n",
"}\n",
"\n",
".xr-array-wrap > label {\n",
" grid-column: 1;\n",
" vertical-align: top;\n",
"}\n",
"\n",
".xr-preview {\n",
" color: var(--xr-font-color3);\n",
"}\n",
"\n",
".xr-array-preview,\n",
".xr-array-data {\n",
" padding: 0 5px !important;\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-array-data,\n",
".xr-array-in:checked ~ .xr-array-preview {\n",
" display: none;\n",
"}\n",
"\n",
".xr-array-in:checked ~ .xr-array-data,\n",
".xr-array-preview {\n",
" display: inline-block;\n",
"}\n",
"\n",
".xr-dim-list {\n",
" display: inline-block !important;\n",
" list-style: none;\n",
" padding: 0 !important;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list li {\n",
" display: inline-block;\n",
" padding: 0;\n",
" margin: 0;\n",
"}\n",
"\n",
".xr-dim-list:before {\n",
" content: '(';\n",
"}\n",
"\n",
".xr-dim-list:after {\n",
" content: ')';\n",
"}\n",
"\n",
".xr-dim-list li:not(:last-child):after {\n",
" content: ',';\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-has-index {\n",
" font-weight: bold;\n",
"}\n",
"\n",
".xr-var-list,\n",
".xr-var-item {\n",
" display: contents;\n",
"}\n",
"\n",
".xr-var-item > div,\n",
".xr-var-item label,\n",
".xr-var-item > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-even);\n",
" margin-bottom: 0;\n",
"}\n",
"\n",
".xr-var-item > .xr-var-name:hover span {\n",
" padding-right: 5px;\n",
"}\n",
"\n",
".xr-var-list > li:nth-child(odd) > div,\n",
".xr-var-list > li:nth-child(odd) > label,\n",
".xr-var-list > li:nth-child(odd) > .xr-var-name span {\n",
" background-color: var(--xr-background-color-row-odd);\n",
"}\n",
"\n",
".xr-var-name {\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-var-dims {\n",
" grid-column: 2;\n",
"}\n",
"\n",
".xr-var-dtype {\n",
" grid-column: 3;\n",
" text-align: right;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-preview {\n",
" grid-column: 4;\n",
"}\n",
"\n",
".xr-index-preview {\n",
" grid-column: 2 / 5;\n",
" color: var(--xr-font-color2);\n",
"}\n",
"\n",
".xr-var-name,\n",
".xr-var-dims,\n",
".xr-var-dtype,\n",
".xr-preview,\n",
".xr-attrs dt {\n",
" white-space: nowrap;\n",
" overflow: hidden;\n",
" text-overflow: ellipsis;\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-var-name:hover,\n",
".xr-var-dims:hover,\n",
".xr-var-dtype:hover,\n",
".xr-attrs dt:hover {\n",
" overflow: visible;\n",
" width: auto;\n",
" z-index: 1;\n",
"}\n",
"\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" display: none;\n",
" background-color: var(--xr-background-color) !important;\n",
" padding-bottom: 5px !important;\n",
"}\n",
"\n",
".xr-var-attrs-in:checked ~ .xr-var-attrs,\n",
".xr-var-data-in:checked ~ .xr-var-data,\n",
".xr-index-data-in:checked ~ .xr-index-data {\n",
" display: block;\n",
"}\n",
"\n",
".xr-var-data > table {\n",
" float: right;\n",
"}\n",
"\n",
".xr-var-name span,\n",
".xr-var-data,\n",
".xr-index-name div,\n",
".xr-index-data,\n",
".xr-attrs {\n",
" padding-left: 25px !important;\n",
"}\n",
"\n",
".xr-attrs,\n",
".xr-var-attrs,\n",
".xr-var-data,\n",
".xr-index-data {\n",
" grid-column: 1 / -1;\n",
"}\n",
"\n",
"dl.xr-attrs {\n",
" padding: 0;\n",
" margin: 0;\n",
" display: grid;\n",
" grid-template-columns: 125px auto;\n",
"}\n",
"\n",
".xr-attrs dt,\n",
".xr-attrs dd {\n",
" padding: 0;\n",
" margin: 0;\n",
" float: left;\n",
" padding-right: 10px;\n",
" width: auto;\n",
"}\n",
"\n",
".xr-attrs dt {\n",
" font-weight: normal;\n",
" grid-column: 1;\n",
"}\n",
"\n",
".xr-attrs dt:hover span {\n",
" display: inline-block;\n",
" background: var(--xr-background-color);\n",
" padding-right: 10px;\n",
"}\n",
"\n",
".xr-attrs dd {\n",
" grid-column: 2;\n",
" white-space: pre-wrap;\n",
" word-break: break-all;\n",
"}\n",
"\n",
".xr-icon-database,\n",
".xr-icon-file-text2,\n",
".xr-no-icon {\n",
" display: inline-block;\n",
" vertical-align: middle;\n",
" width: 1em;\n",
" height: 1.5em !important;\n",
" stroke-width: 0;\n",
" stroke: currentColor;\n",
" fill: currentColor;\n",
"}\n",
"</style><pre class='xr-text-repr-fallback'>&lt;xarray.DataArray &#x27;u&#x27; (ocean_time: 57, s_rho: 36, eta_u: 482, xi_u: 401)&gt;\n",
"dask.array&lt;open_dataset-u, shape=(57, 36, 482, 401), dtype=float32, chunksize=(1, 36, 482, 401), chunktype=numpy.ndarray&gt;\n",
"Coordinates:\n",
" lat_u (eta_u, xi_u) float64 dask.array&lt;chunksize=(482, 401), meta=np.ndarray&gt;\n",
" lon_u (eta_u, xi_u) float64 dask.array&lt;chunksize=(482, 401), meta=np.ndarray&gt;\n",
" * ocean_time (ocean_time) float64 5.205e+09 5.205e+09 ... 5.206e+09 5.206e+09\n",
" * s_rho (s_rho) float64 -0.9861 -0.9583 -0.9306 ... -0.04167 -0.01389\n",
"Dimensions without coordinates: eta_u, xi_u\n",
"Attributes:\n",
" field: u-velocity, scalar, series\n",
" grid: grid\n",
" location: edge1\n",
" long_name: u-momentum component\n",
" time: ocean_time\n",
" units: meter second-1</pre><div class='xr-wrap' style='display:none'><div class='xr-header'><div class='xr-obj-type'>xarray.DataArray</div><div class='xr-array-name'>'u'</div><ul class='xr-dim-list'><li><span class='xr-has-index'>ocean_time</span>: 57</li><li><span class='xr-has-index'>s_rho</span>: 36</li><li><span>eta_u</span>: 482</li><li><span>xi_u</span>: 401</li></ul></div><ul class='xr-sections'><li class='xr-section-item'><div class='xr-array-wrap'><input id='section-b555018a-a690-4935-801d-a162a4bb1c46' class='xr-array-in' type='checkbox' checked><label for='section-b555018a-a690-4935-801d-a162a4bb1c46' title='Show/hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-array-preview xr-preview'><span>dask.array&lt;chunksize=(1, 36, 482, 401), meta=np.ndarray&gt;</span></div><div class='xr-array-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table style=\"border-collapse: collapse;\">\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.48 GiB </td>\n",
" <td> 26.54 MiB </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (57, 36, 482, 401) </td>\n",
" <td> (1, 36, 482, 401) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Dask graph </th>\n",
" <td colspan=\"2\"> 57 chunks in 2 graph layers </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Data type </th>\n",
" <td colspan=\"2\"> float32 numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"389\" height=\"191\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"39\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"25\" x2=\"39\" y2=\"25\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"25\" />\n",
" <line x1=\"2\" y1=\"0\" x2=\"2\" y2=\"25\" />\n",
" <line x1=\"3\" y1=\"0\" x2=\"3\" y2=\"25\" />\n",
" <line x1=\"4\" y1=\"0\" x2=\"4\" y2=\"25\" />\n",
" <line x1=\"5\" y1=\"0\" x2=\"5\" y2=\"25\" />\n",
" <line x1=\"6\" y1=\"0\" x2=\"6\" y2=\"25\" />\n",
" <line x1=\"8\" y1=\"0\" x2=\"8\" y2=\"25\" />\n",
" <line x1=\"9\" y1=\"0\" x2=\"9\" y2=\"25\" />\n",
" <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n",
" <line x1=\"11\" y1=\"0\" x2=\"11\" y2=\"25\" />\n",
" <line x1=\"13\" y1=\"0\" x2=\"13\" y2=\"25\" />\n",
" <line x1=\"14\" y1=\"0\" x2=\"14\" y2=\"25\" />\n",
" <line x1=\"15\" y1=\"0\" x2=\"15\" y2=\"25\" />\n",
" <line x1=\"16\" y1=\"0\" x2=\"16\" y2=\"25\" />\n",
" <line x1=\"18\" y1=\"0\" x2=\"18\" y2=\"25\" />\n",
" <line x1=\"19\" y1=\"0\" x2=\"19\" y2=\"25\" />\n",
" <line x1=\"20\" y1=\"0\" x2=\"20\" y2=\"25\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n",
" <line x1=\"22\" y1=\"0\" x2=\"22\" y2=\"25\" />\n",
" <line x1=\"24\" y1=\"0\" x2=\"24\" y2=\"25\" />\n",
" <line x1=\"25\" y1=\"0\" x2=\"25\" y2=\"25\" />\n",
" <line x1=\"27\" y1=\"0\" x2=\"27\" y2=\"25\" />\n",
" <line x1=\"27\" y1=\"0\" x2=\"27\" y2=\"25\" />\n",
" <line x1=\"29\" y1=\"0\" x2=\"29\" y2=\"25\" />\n",
" <line x1=\"30\" y1=\"0\" x2=\"30\" y2=\"25\" />\n",
" <line x1=\"31\" y1=\"0\" x2=\"31\" y2=\"25\" />\n",
" <line x1=\"33\" y1=\"0\" x2=\"33\" y2=\"25\" />\n",
" <line x1=\"33\" y1=\"0\" x2=\"33\" y2=\"25\" />\n",
" <line x1=\"35\" y1=\"0\" x2=\"35\" y2=\"25\" />\n",
" <line x1=\"36\" y1=\"0\" x2=\"36\" y2=\"25\" />\n",
" <line x1=\"38\" y1=\"0\" x2=\"38\" y2=\"25\" />\n",
" <line x1=\"39\" y1=\"0\" x2=\"39\" y2=\"25\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 39.504242741813265,0.0 39.504242741813265,25.412616514582485 0.0,25.412616514582485\" style=\"fill:#8B4903A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"19.752121\" y=\"45.412617\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >57</text>\n",
" <text x=\"59.504243\" y=\"12.706308\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(0,59.504243,12.706308)\">1</text>\n",
"\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"109\" y1=\"0\" x2=\"130\" y2=\"21\" style=\"stroke-width:2\" />\n",
" <line x1=\"109\" y1=\"120\" x2=\"130\" y2=\"141\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"109\" y1=\"0\" x2=\"109\" y2=\"120\" style=\"stroke-width:2\" />\n",
" <line x1=\"130\" y1=\"21\" x2=\"130\" y2=\"141\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"109.0,0.0 130.71983302769712,21.719833027697135 130.71983302769712,141.71983302769712 109.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"109\" y1=\"0\" x2=\"208\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"130\" y1=\"21\" x2=\"230\" y2=\"21\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"109\" y1=\"0\" x2=\"130\" y2=\"21\" style=\"stroke-width:2\" />\n",
" <line x1=\"208\" y1=\"0\" x2=\"230\" y2=\"21\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"109.0,0.0 208.83402489626556,0.0 230.5538579239627,21.719833027697135 130.71983302769712,21.719833027697135\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"130\" y1=\"21\" x2=\"230\" y2=\"21\" style=\"stroke-width:2\" />\n",
" <line x1=\"130\" y1=\"141\" x2=\"230\" y2=\"141\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"130\" y1=\"21\" x2=\"130\" y2=\"141\" style=\"stroke-width:2\" />\n",
" <line x1=\"230\" y1=\"21\" x2=\"230\" y2=\"141\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"130.71983302769712,21.719833027697135 230.55385792396268,21.719833027697135 230.55385792396268,141.71983302769712 130.71983302769712,141.71983302769712\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"180.636845\" y=\"161.719833\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >401</text>\n",
" <text x=\"250.553858\" y=\"81.719833\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,250.553858,81.719833)\">482</text>\n",
" <text x=\"109.859917\" y=\"150.859917\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(45,109.859917,150.859917)\">36</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></div></li><li class='xr-section-item'><input id='section-b9971b69-3603-4d8b-9146-f47bd62aa51a' class='xr-section-summary-in' type='checkbox' checked><label for='section-b9971b69-3603-4d8b-9146-f47bd62aa51a' class='xr-section-summary' >Coordinates: <span>(4)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-var-name'><span>lat_u</span></div><div class='xr-var-dims'>(eta_u, xi_u)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(482, 401), meta=np.ndarray&gt;</div><input id='attrs-841c40ef-ffa2-4cb8-bf16-97efbe634cb7' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-841c40ef-ffa2-4cb8-bf16-97efbe634cb7' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-8134acb6-ae9b-453c-8aa4-3ece14090bc7' class='xr-var-data-in' type='checkbox'><label for='data-8134acb6-ae9b-453c-8aa4-3ece14090bc7' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>field :</span></dt><dd>lat_u, scalar</dd><dt><span>long_name :</span></dt><dd>latitude of U-points</dd><dt><span>standard_name :</span></dt><dd>latitude</dd><dt><span>units :</span></dt><dd>degree_north</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table style=\"border-collapse: collapse;\">\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.47 MiB </td>\n",
" <td> 1.47 MiB </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (482, 401) </td>\n",
" <td> (482, 401) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Dask graph </th>\n",
" <td colspan=\"2\"> 1 chunks in 2 graph layers </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Data type </th>\n",
" <td colspan=\"2\"> float64 numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"149\" height=\"170\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"99\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"120\" x2=\"99\" y2=\"120\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"120\" style=\"stroke-width:2\" />\n",
" <line x1=\"99\" y1=\"0\" x2=\"99\" y2=\"120\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 99.83402489626556,0.0 99.83402489626556,120.0 0.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"49.917012\" y=\"140.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >401</text>\n",
" <text x=\"119.834025\" y=\"60.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,119.834025,60.000000)\">482</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span>lon_u</span></div><div class='xr-var-dims'>(eta_u, xi_u)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>dask.array&lt;chunksize=(482, 401), meta=np.ndarray&gt;</div><input id='attrs-38812043-08a5-48af-884d-92ecfd0e595c' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-38812043-08a5-48af-884d-92ecfd0e595c' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-60169bb9-5272-4652-8e11-7b2f7c46081e' class='xr-var-data-in' type='checkbox'><label for='data-60169bb9-5272-4652-8e11-7b2f7c46081e' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>field :</span></dt><dd>lon_u, scalar</dd><dt><span>long_name :</span></dt><dd>longitude of U-points</dd><dt><span>standard_name :</span></dt><dd>longitude</dd><dt><span>units :</span></dt><dd>degree_east</dd></dl></div><div class='xr-var-data'><table>\n",
" <tr>\n",
" <td>\n",
" <table style=\"border-collapse: collapse;\">\n",
" <thead>\n",
" <tr>\n",
" <td> </td>\n",
" <th> Array </th>\n",
" <th> Chunk </th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" \n",
" <tr>\n",
" <th> Bytes </th>\n",
" <td> 1.47 MiB </td>\n",
" <td> 1.47 MiB </td>\n",
" </tr>\n",
" \n",
" <tr>\n",
" <th> Shape </th>\n",
" <td> (482, 401) </td>\n",
" <td> (482, 401) </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Dask graph </th>\n",
" <td colspan=\"2\"> 1 chunks in 2 graph layers </td>\n",
" </tr>\n",
" <tr>\n",
" <th> Data type </th>\n",
" <td colspan=\"2\"> float64 numpy.ndarray </td>\n",
" </tr>\n",
" </tbody>\n",
" </table>\n",
" </td>\n",
" <td>\n",
" <svg width=\"149\" height=\"170\" style=\"stroke:rgb(0,0,0);stroke-width:1\" >\n",
"\n",
" <!-- Horizontal lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"99\" y2=\"0\" style=\"stroke-width:2\" />\n",
" <line x1=\"0\" y1=\"120\" x2=\"99\" y2=\"120\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Vertical lines -->\n",
" <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"120\" style=\"stroke-width:2\" />\n",
" <line x1=\"99\" y1=\"0\" x2=\"99\" y2=\"120\" style=\"stroke-width:2\" />\n",
"\n",
" <!-- Colored Rectangle -->\n",
" <polygon points=\"0.0,0.0 99.83402489626556,0.0 99.83402489626556,120.0 0.0,120.0\" style=\"fill:#ECB172A0;stroke-width:0\"/>\n",
"\n",
" <!-- Text -->\n",
" <text x=\"49.917012\" y=\"140.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" >401</text>\n",
" <text x=\"119.834025\" y=\"60.000000\" font-size=\"1.0rem\" font-weight=\"100\" text-anchor=\"middle\" transform=\"rotate(-90,119.834025,60.000000)\">482</text>\n",
"</svg>\n",
" </td>\n",
" </tr>\n",
"</table></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>ocean_time</span></div><div class='xr-var-dims'>(ocean_time)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>5.205e+09 5.205e+09 ... 5.206e+09</div><input id='attrs-7ebc2e76-9f5e-4831-8f74-50b18b243917' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-7ebc2e76-9f5e-4831-8f74-50b18b243917' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-1f96c471-c287-4326-bcb8-60d49fc19579' class='xr-var-data-in' type='checkbox'><label for='data-1f96c471-c287-4326-bcb8-60d49fc19579' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>calendar :</span></dt><dd>proleptic_gregorian</dd><dt><span>field :</span></dt><dd>time, scalar, series</dd><dt><span>long_name :</span></dt><dd>time since initialization</dd><dt><span>standard_name :</span></dt><dd>time</dd><dt><span>units :</span></dt><dd>seconds since 1858-11-17 00:00:00</dd></dl></div><div class='xr-var-data'><pre>array([5.205082e+09, 5.205092e+09, 5.205103e+09, 5.205114e+09, 5.205125e+09,\n",
" 5.205136e+09, 5.205146e+09, 5.205157e+09, 5.205168e+09, 5.205179e+09,\n",
" 5.205190e+09, 5.205200e+09, 5.205211e+09, 5.205222e+09, 5.205233e+09,\n",
" 5.205244e+09, 5.205254e+09, 5.205265e+09, 5.205276e+09, 5.205287e+09,\n",
" 5.205298e+09, 5.205308e+09, 5.205319e+09, 5.205330e+09, 5.205341e+09,\n",
" 5.205352e+09, 5.205362e+09, 5.205373e+09, 5.205384e+09, 5.205395e+09,\n",
" 5.205406e+09, 5.205416e+09, 5.205427e+09, 5.205438e+09, 5.205449e+09,\n",
" 5.205460e+09, 5.205470e+09, 5.205481e+09, 5.205492e+09, 5.205503e+09,\n",
" 5.205514e+09, 5.205524e+09, 5.205535e+09, 5.205546e+09, 5.205557e+09,\n",
" 5.205568e+09, 5.205578e+09, 5.205589e+09, 5.205600e+09, 5.205611e+09,\n",
" 5.205622e+09, 5.205632e+09, 5.205643e+09, 5.205654e+09, 5.205665e+09,\n",
" 5.205676e+09, 5.205686e+09])</pre></div></li><li class='xr-var-item'><div class='xr-var-name'><span class='xr-has-index'>s_rho</span></div><div class='xr-var-dims'>(s_rho)</div><div class='xr-var-dtype'>float64</div><div class='xr-var-preview xr-preview'>-0.9861 -0.9583 ... -0.01389</div><input id='attrs-a44cc8ad-608a-4c79-b603-7c7d1707b6e5' class='xr-var-attrs-in' type='checkbox' ><label for='attrs-a44cc8ad-608a-4c79-b603-7c7d1707b6e5' title='Show/Hide attributes'><svg class='icon xr-icon-file-text2'><use xlink:href='#icon-file-text2'></use></svg></label><input id='data-93fbc14f-0994-461d-bc4d-ba603cf76721' class='xr-var-data-in' type='checkbox'><label for='data-93fbc14f-0994-461d-bc4d-ba603cf76721' title='Show/Hide data repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-var-attrs'><dl class='xr-attrs'><dt><span>field :</span></dt><dd>s_rho, scalar</dd><dt><span>formula_terms :</span></dt><dd>s: s_rho C: Cs_r eta: zeta depth: h depth_c: hc</dd><dt><span>long_name :</span></dt><dd>S-coordinate at RHO-points</dd><dt><span>positive :</span></dt><dd>up</dd><dt><span>standard_name :</span></dt><dd>ocean_s_coordinate_g2</dd><dt><span>valid_max :</span></dt><dd>0.0</dd><dt><span>valid_min :</span></dt><dd>-1.0</dd></dl></div><div class='xr-var-data'><pre>array([-0.986111, -0.958333, -0.930556, -0.902778, -0.875 , -0.847222,\n",
" -0.819444, -0.791667, -0.763889, -0.736111, -0.708333, -0.680556,\n",
" -0.652778, -0.625 , -0.597222, -0.569444, -0.541667, -0.513889,\n",
" -0.486111, -0.458333, -0.430556, -0.402778, -0.375 , -0.347222,\n",
" -0.319444, -0.291667, -0.263889, -0.236111, -0.208333, -0.180556,\n",
" -0.152778, -0.125 , -0.097222, -0.069444, -0.041667, -0.013889])</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-0dad42a0-0c9a-4cfc-8a7d-b340974a8862' class='xr-section-summary-in' type='checkbox' ><label for='section-0dad42a0-0c9a-4cfc-8a7d-b340974a8862' class='xr-section-summary' >Indexes: <span>(2)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><ul class='xr-var-list'><li class='xr-var-item'><div class='xr-index-name'><div>ocean_time</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-844e236b-5f2b-4eb4-8c94-59046a85578a' class='xr-index-data-in' type='checkbox'/><label for='index-844e236b-5f2b-4eb4-8c94-59046a85578a' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([5205081600.0, 5205092400.0, 5205103200.0, 5205114000.0, 5205124800.0,\n",
" 5205135600.0, 5205146400.0, 5205157200.0, 5205168000.0, 5205178800.0,\n",
" 5205189600.0, 5205200400.0, 5205211200.0, 5205222000.0, 5205232800.0,\n",
" 5205243600.0, 5205254400.0, 5205265200.0, 5205276000.0, 5205286800.0,\n",
" 5205297600.0, 5205308400.0, 5205319200.0, 5205330000.0, 5205340800.0,\n",
" 5205351600.0, 5205362400.0, 5205373200.0, 5205384000.0, 5205394800.0,\n",
" 5205405600.0, 5205416400.0, 5205427200.0, 5205438000.0, 5205448800.0,\n",
" 5205459600.0, 5205470400.0, 5205481200.0, 5205492000.0, 5205502800.0,\n",
" 5205513600.0, 5205524400.0, 5205535200.0, 5205546000.0, 5205556800.0,\n",
" 5205567600.0, 5205578400.0, 5205589200.0, 5205600000.0, 5205610800.0,\n",
" 5205621600.0, 5205632400.0, 5205643200.0, 5205654000.0, 5205664800.0,\n",
" 5205675600.0, 5205686400.0],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;ocean_time&#x27;))</pre></div></li><li class='xr-var-item'><div class='xr-index-name'><div>s_rho</div></div><div class='xr-index-preview'>PandasIndex</div><div></div><input id='index-edbeb91f-a3e8-42bb-afb0-65f640c97dc5' class='xr-index-data-in' type='checkbox'/><label for='index-edbeb91f-a3e8-42bb-afb0-65f640c97dc5' title='Show/Hide index repr'><svg class='icon xr-icon-database'><use xlink:href='#icon-database'></use></svg></label><div class='xr-index-data'><pre>PandasIndex(Index([ -0.986111111111111, -0.9583333333333333, -0.9305555555555555,\n",
" -0.9027777777777777, -0.875, -0.8472222222222222,\n",
" -0.8194444444444444, -0.7916666666666666, -0.7638888888888888,\n",
" -0.736111111111111, -0.7083333333333333, -0.6805555555555555,\n",
" -0.6527777777777778, -0.625, -0.5972222222222222,\n",
" -0.5694444444444444, -0.5416666666666666, -0.5138888888888888,\n",
" -0.4861111111111111, -0.4583333333333333, -0.4305555555555555,\n",
" -0.40277777777777773, -0.375, -0.3472222222222222,\n",
" -0.3194444444444444, -0.29166666666666663, -0.2638888888888889,\n",
" -0.2361111111111111, -0.20833333333333331, -0.18055555555555555,\n",
" -0.15277777777777776, -0.125, -0.09722222222222221,\n",
" -0.06944444444444445, -0.041666666666666664, -0.013888888888888888],\n",
" dtype=&#x27;float64&#x27;, name=&#x27;s_rho&#x27;))</pre></div></li></ul></div></li><li class='xr-section-item'><input id='section-0cfcbc19-0936-42a9-b7e9-49ad97d4b2aa' class='xr-section-summary-in' type='checkbox' checked><label for='section-0cfcbc19-0936-42a9-b7e9-49ad97d4b2aa' class='xr-section-summary' >Attributes: <span>(6)</span></label><div class='xr-section-inline-details'></div><div class='xr-section-details'><dl class='xr-attrs'><dt><span>field :</span></dt><dd>u-velocity, scalar, series</dd><dt><span>grid :</span></dt><dd>grid</dd><dt><span>location :</span></dt><dd>edge1</dd><dt><span>long_name :</span></dt><dd>u-momentum component</dd><dt><span>time :</span></dt><dd>ocean_time</dd><dt><span>units :</span></dt><dd>meter second-1</dd></dl></div></li></ul></div></div>"
],
"text/plain": [
"<xarray.DataArray 'u' (ocean_time: 57, s_rho: 36, eta_u: 482, xi_u: 401)>\n",
"dask.array<open_dataset-u, shape=(57, 36, 482, 401), dtype=float32, chunksize=(1, 36, 482, 401), chunktype=numpy.ndarray>\n",
"Coordinates:\n",
" lat_u (eta_u, xi_u) float64 dask.array<chunksize=(482, 401), meta=np.ndarray>\n",
" lon_u (eta_u, xi_u) float64 dask.array<chunksize=(482, 401), meta=np.ndarray>\n",
" * ocean_time (ocean_time) float64 5.205e+09 5.205e+09 ... 5.206e+09 5.206e+09\n",
" * s_rho (s_rho) float64 -0.9861 -0.9583 -0.9306 ... -0.04167 -0.01389\n",
"Dimensions without coordinates: eta_u, xi_u\n",
"Attributes:\n",
" field: u-velocity, scalar, series\n",
" grid: grid\n",
" location: edge1\n",
" long_name: u-momentum component\n",
" time: ocean_time\n",
" units: meter second-1"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ds.u"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "8d2850d7-c351-46d1-b4d7-7d6ea7ce1201",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"12:25:15 INFO opendrift.models.basemodel:528: OpenDriftSimulation initialised (version 1.10.7)\n"
]
}
],
"source": [
"o = OceanDrift(loglevel=20) # Set loglevel to 0 for debug information"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "cc006743-bfb2-45a1-8ec9-50b2b7ea6b9c",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"12:25:15 INFO opendrift.readers.reader_ROMS_intake:94: Opening dataset: CNAPS_opendrift\n",
"12:25:18 INFO opendrift.readers.reader_ROMS_intake:173: Read GLS parameters from file.\n",
"12:25:18 WARNING opendrift.readers.basereader.structured:44: No proj string or projection could be derived, using 'fakeproj'. This assumes that the variables are structured and gridded approximately equidistantly on the surface (i.e. in meters). This must be guaranteed by the user. You can get rid of this warning by supplying a valid projection to the reader.\n",
"12:25:18 INFO opendrift.readers.basereader.structured:59: Making interpolator for lon,lat to x,y conversion...\n"
]
}
],
"source": [
"cnaps = reader_ROMS_intake.Reader(intake_catalog=intake_catalog, dataset=dataset)\n",
"o.add_reader(cnaps)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "77a07903-cce1-4d1d-a0d7-85b2c96c314e",
"metadata": {},
"outputs": [],
"source": [
"#%%\n",
"# Creating and adding reader for Nordic 4km current dataset\n",
"#nordic_native = reader_ROMS_native.Reader(o.test_data_folder() +\n",
"# '2Feb2016_Nordic_sigma_3d/Nordic-4km_SLEVELS_avg_00_subset2Feb2016.nc')\n",
"#o.add_reader(nordic_native)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "987800d3-6331-42c3-af26-6c8747331f05",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"12:25:27 INFO opendrift.models.basemodel.environment:219: Adding a dynamical landmask with max. priority based on assumed maximum speed of 1.0 m/s. Adding a customised landmask may be faster...\n",
"12:25:33 INFO opendrift.models.basemodel.environment:246: Fallback values will be used for the following variables which have no readers: \n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tx_wind: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \ty_wind: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tocean_vertical_diffusivity: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_wave_significant_height: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_wave_stokes_drift_x_velocity: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_wave_stokes_drift_y_velocity: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_wave_period_at_variance_spectral_density_maximum: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_swell_wave_to_direction: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_swell_wave_peak_period_from_variance_spectral_density: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_swell_wave_significant_height: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_wind_wave_to_direction: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_wind_wave_mean_period: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsea_surface_wind_wave_significant_height: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsurface_downward_x_stress: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tsurface_downward_y_stress: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tturbulent_kinetic_energy: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tturbulent_generic_length_scale: 0.000000\n",
"12:25:33 INFO opendrift.models.basemodel.environment:249: \tocean_mixed_layer_thickness: 50.000000\n"
]
}
],
"source": [
"#%%\n",
"# Seed elements at defined positions, depth and time\n",
"o.seed_elements(lon=-69.0, lat=42.0, radius=0, number=10,\n",
" z=np.linspace(0, -150, 10), time=cnaps.start_time)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "cfc73e7a-1538-4bec-b2e9-d3f66e45ff19",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"12:25:33 INFO opendrift.models.basemodel:1816: Duration, steps or end time not specified, running until end of first reader: 2023-11-03 00:00:00\n",
"12:25:33 INFO opendrift.models.basemodel:1816: Duration, steps or end time not specified, running until end of first reader: 2023-11-03 00:00:00\n",
"12:25:33 INFO opendrift.models.basemodel:891: Using existing reader for land_binary_mask\n",
"12:25:34 INFO opendrift.models.basemodel:903: All points are in ocean\n",
"12:25:34 INFO opendrift.models.basemodel.environment:670: ========================\n",
"12:25:34 ERROR opendrift.models.basemodel.environment:671: Index is out of bounds for axis 0 with size 57\n",
"Traceback (most recent call last):\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/models/basemodel/environment.py\", line 646, in get_environment\n",
" reader.get_variables_interpolated(\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/readers/basereader/variables.py\", line 889, in get_variables_interpolated\n",
" env, env_profiles = self.get_variables_interpolated_xy(\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/readers/basereader/variables.py\", line 755, in get_variables_interpolated_xy\n",
" env, env_profiles = self._get_variables_interpolated_(\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/readers/basereader/structured.py\", line 243, in _get_variables_interpolated_\n",
" self.get_variables(blockvariables_before, time_before,\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/readers/reader_ROMS_intake.py\", line 334, in get_variables\n",
" variables[par] = self.sea_floor_depth_below_sea_level[indy, indx]\n",
" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/xarray/core/variable.py\", line 811, in __getitem__\n",
" data = as_indexable(self._data)[indexer]\n",
" ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/xarray/core/indexing.py\", line 1446, in __getitem__\n",
" return self.array[key]\n",
" ~~~~~~~~~~^^^^^\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/dask/array/core.py\", line 1962, in __getitem__\n",
" index2 = normalize_index(index, self.shape)\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/dask/array/slicing.py\", line 917, in normalize_index\n",
" check_index(axis, i, d)\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/dask/array/slicing.py\", line 980, in check_index\n",
" raise IndexError(\n",
"IndexError: Index is out of bounds for axis 0 with size 57\n",
"12:25:34 INFO opendrift.models.basemodel.environment:673: ========================\n",
"12:25:34 INFO opendrift.models.basemodel:1989: 2023-10-27 00:00:00 - step 1 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel.environment:670: ========================\n",
"12:25:37 ERROR opendrift.models.basemodel.environment:671: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()\n",
"Traceback (most recent call last):\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/models/basemodel/environment.py\", line 646, in get_environment\n",
" reader.get_variables_interpolated(\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/readers/basereader/variables.py\", line 889, in get_variables_interpolated\n",
" env, env_profiles = self.get_variables_interpolated_xy(\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/readers/basereader/variables.py\", line 755, in get_variables_interpolated_xy\n",
" env, env_profiles = self._get_variables_interpolated_(\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/readers/basereader/structured.py\", line 243, in _get_variables_interpolated_\n",
" self.get_variables(blockvariables_before, time_before,\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/readers/reader_ROMS_intake.py\", line 294, in get_variables\n",
" self.z_rho_tot = depth.sdepth(Htot, self.hc, self.Cs_r,\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
" File \"/home/conda/global/e1003848400f1afa7580bb6fa3874f48f20b3522458965117a29babee3516098-20231112-153522-163623-16-opendrift/lib/python3.11/site-packages/opendrift/readers/roppy/depth.py\", line 72, in sdepth\n",
" if Vtransform == 1: # Default transform by Song and Haidvogel\n",
" ^^^^^^^^^^^^^^^\n",
"ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()\n",
"12:25:37 INFO opendrift.models.basemodel.environment:673: ========================\n",
"12:25:37 WARNING opendrift.models.basemodel.environment:678: Reader roms native is discarded after failing more times than allowed (1)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 01:00:00 - step 2 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 02:00:00 - step 3 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 03:00:00 - step 4 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 04:00:00 - step 5 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 05:00:00 - step 6 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 06:00:00 - step 7 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 07:00:00 - step 8 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 08:00:00 - step 9 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 09:00:00 - step 10 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 10:00:00 - step 11 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 11:00:00 - step 12 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 12:00:00 - step 13 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 13:00:00 - step 14 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 14:00:00 - step 15 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 15:00:00 - step 16 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 16:00:00 - step 17 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 17:00:00 - step 18 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 18:00:00 - step 19 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 19:00:00 - step 20 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 20:00:00 - step 21 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 21:00:00 - step 22 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 22:00:00 - step 23 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-27 23:00:00 - step 24 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 00:00:00 - step 25 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 01:00:00 - step 26 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 02:00:00 - step 27 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 03:00:00 - step 28 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 04:00:00 - step 29 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 05:00:00 - step 30 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 06:00:00 - step 31 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 07:00:00 - step 32 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 08:00:00 - step 33 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 09:00:00 - step 34 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 10:00:00 - step 35 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 11:00:00 - step 36 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 12:00:00 - step 37 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 13:00:00 - step 38 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 14:00:00 - step 39 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 15:00:00 - step 40 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 16:00:00 - step 41 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 17:00:00 - step 42 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 18:00:00 - step 43 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 19:00:00 - step 44 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 20:00:00 - step 45 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 21:00:00 - step 46 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 22:00:00 - step 47 of 168 - 10 active elements (0 deactivated)\n",
"12:25:37 INFO opendrift.models.basemodel:1989: 2023-10-28 23:00:00 - step 48 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 00:00:00 - step 49 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 01:00:00 - step 50 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 02:00:00 - step 51 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 03:00:00 - step 52 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 04:00:00 - step 53 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 05:00:00 - step 54 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 06:00:00 - step 55 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 07:00:00 - step 56 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 08:00:00 - step 57 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 09:00:00 - step 58 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 10:00:00 - step 59 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 11:00:00 - step 60 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 12:00:00 - step 61 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 13:00:00 - step 62 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 14:00:00 - step 63 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 15:00:00 - step 64 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 16:00:00 - step 65 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 17:00:00 - step 66 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 18:00:00 - step 67 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 19:00:00 - step 68 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 20:00:00 - step 69 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 21:00:00 - step 70 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 22:00:00 - step 71 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-29 23:00:00 - step 72 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 00:00:00 - step 73 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 01:00:00 - step 74 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 02:00:00 - step 75 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 03:00:00 - step 76 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 04:00:00 - step 77 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 05:00:00 - step 78 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 06:00:00 - step 79 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 07:00:00 - step 80 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 08:00:00 - step 81 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 09:00:00 - step 82 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 10:00:00 - step 83 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 11:00:00 - step 84 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 12:00:00 - step 85 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 13:00:00 - step 86 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 14:00:00 - step 87 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 15:00:00 - step 88 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 16:00:00 - step 89 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 17:00:00 - step 90 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 18:00:00 - step 91 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 19:00:00 - step 92 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 20:00:00 - step 93 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 21:00:00 - step 94 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 22:00:00 - step 95 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-30 23:00:00 - step 96 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 00:00:00 - step 97 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 01:00:00 - step 98 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 02:00:00 - step 99 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 03:00:00 - step 100 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 04:00:00 - step 101 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 05:00:00 - step 102 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 06:00:00 - step 103 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 07:00:00 - step 104 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 08:00:00 - step 105 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 09:00:00 - step 106 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 10:00:00 - step 107 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 11:00:00 - step 108 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 12:00:00 - step 109 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 13:00:00 - step 110 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 14:00:00 - step 111 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 15:00:00 - step 112 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 16:00:00 - step 113 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 17:00:00 - step 114 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 18:00:00 - step 115 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 19:00:00 - step 116 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 20:00:00 - step 117 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 21:00:00 - step 118 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 22:00:00 - step 119 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-10-31 23:00:00 - step 120 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-11-01 00:00:00 - step 121 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-11-01 01:00:00 - step 122 of 168 - 10 active elements (0 deactivated)\n",
"12:25:38 INFO opendrift.models.basemodel:1989: 2023-11-01 02:00:00 - step 123 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 03:00:00 - step 124 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 04:00:00 - step 125 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 05:00:00 - step 126 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 06:00:00 - step 127 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 07:00:00 - step 128 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 08:00:00 - step 129 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 09:00:00 - step 130 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 10:00:00 - step 131 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 11:00:00 - step 132 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 12:00:00 - step 133 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 13:00:00 - step 134 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 14:00:00 - step 135 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 15:00:00 - step 136 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 16:00:00 - step 137 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 17:00:00 - step 138 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 18:00:00 - step 139 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 19:00:00 - step 140 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 20:00:00 - step 141 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 21:00:00 - step 142 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 22:00:00 - step 143 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-01 23:00:00 - step 144 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 00:00:00 - step 145 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 01:00:00 - step 146 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 02:00:00 - step 147 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 03:00:00 - step 148 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 04:00:00 - step 149 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 05:00:00 - step 150 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 06:00:00 - step 151 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 07:00:00 - step 152 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 08:00:00 - step 153 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 09:00:00 - step 154 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 10:00:00 - step 155 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 11:00:00 - step 156 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 12:00:00 - step 157 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 13:00:00 - step 158 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 14:00:00 - step 159 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 15:00:00 - step 160 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 16:00:00 - step 161 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 17:00:00 - step 162 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 18:00:00 - step 163 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 19:00:00 - step 164 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 20:00:00 - step 165 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 21:00:00 - step 166 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 22:00:00 - step 167 of 168 - 10 active elements (0 deactivated)\n",
"12:25:39 INFO opendrift.models.basemodel:1989: 2023-11-02 23:00:00 - step 168 of 168 - 10 active elements (0 deactivated)\n"
]
}
],
"source": [
"#%%\n",
"# Running model\n",
"o.run(time_step=3600)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "ce2a6e95-bc4d-4932-bd12-5d9eace48402",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"12:25:39 WARNING opendrift.models.basemodel:2357: Plotting fast. This will make your plots less accurate.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"===========================\n",
"--------------------\n",
"Reader performance:\n",
"--------------------\n",
"global_landmask\n",
" 0:00:00.0 total\n",
" 0:00:00.0 preparing\n",
" 0:00:00.0 reading\n",
" 0:00:00.0 masking\n",
"--------------------\n",
"Performance:\n",
" 24.1 total time\n",
" 17.6 configuration\n",
" 1.0 preparing main loop\n",
" 1.0 moving elements to ocean\n",
" 5.4 main loop\n",
" 0.0 updating elements\n",
" 0.0 cleaning up\n",
"--------------------\n",
"===========================\n",
"Model:\tOceanDrift (OpenDrift version 1.10.7)\n",
"\t10 active Lagrangian3DArray particles (0 deactivated, 0 scheduled)\n",
"-------------------\n",
"Environment variables:\n",
" -----\n",
" land_binary_mask\n",
" 1) global_landmask\n",
" -----\n",
"Readers not added for the following variables:\n",
" ocean_mixed_layer_thickness\n",
" ocean_vertical_diffusivity\n",
" sea_floor_depth_below_sea_level\n",
" sea_surface_swell_wave_peak_period_from_variance_spectral_density\n",
" sea_surface_swell_wave_significant_height\n",
" sea_surface_swell_wave_to_direction\n",
" sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment\n",
" sea_surface_wave_period_at_variance_spectral_density_maximum\n",
" sea_surface_wave_significant_height\n",
" sea_surface_wave_stokes_drift_x_velocity\n",
" sea_surface_wave_stokes_drift_y_velocity\n",
" sea_surface_wind_wave_mean_period\n",
" sea_surface_wind_wave_significant_height\n",
" sea_surface_wind_wave_to_direction\n",
" surface_downward_x_stress\n",
" surface_downward_y_stress\n",
" turbulent_generic_length_scale\n",
" turbulent_kinetic_energy\n",
" upward_sea_water_velocity\n",
" x_sea_water_velocity\n",
" x_wind\n",
" y_sea_water_velocity\n",
" y_wind\n",
"\n",
"Discarded readers:\n",
" roms native (failed more than 1 times)\n",
"\n",
"Time:\n",
"\tStart: 2023-10-27 00:00:00 UTC\n",
"\tPresent: 2023-11-03 00:00:00 UTC\n",
"\tCalculation steps: 168 * 1:00:00 - total time: 7 days, 0:00:00\n",
"\tOutput steps: 169 * 1:00:00\n",
"===========================\n",
"\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA7MAAAK9CAYAAAD2YzurAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAACDi0lEQVR4nOzdd3xUVf7/8fekk4TeQmihLESaRECaSCcCioqIdMEVVwEF1JUuxRIQ1CguivxY7GABkUWqQlaRUKRZQECBpYYOkcQkk+T8/vCbMZMyTEJC5pLX8/HIw5lzzj333PuZwbxzp9iMMUYAAAAAAFiIV1EvAAAAAACAvCLMAgAAAAAshzALAAAAALAcwiwAAAAAwHIIswAAAAAAyyHMAgAAAAAshzALAAAAALAcwiwAAAAAwHIIswAAAAAAyyHMAkAxtGXLFt1///2qUqWK/Pz8FBISoj59+ig2Nraol5aNzWZz/Hh7e6ts2bK6+eab9Y9//ENbtmzJ01wxMTGy2WyKiYlxap87d67q1q0rPz8/2Ww2Xbp0SS+++KKWL19ecAeShTFGH330kTp16qSyZcvK399ftWvX1siRI3Xs2LFC229hmTZtmlOtAgMDVa1aNUVGRmru3Ln6/fff8zRfhw4d1KFDB6e2I0eOqGfPnipXrpxsNpvGjBmjzZs3a9q0abp06VLBHQwAwBIIswBQzMydO1dt27bV8ePH9dJLL+mrr77SnDlzdOLECd1222164403inqJ2WQE7U2bNmnJkiUaMmSItmzZotatW2v06NFuz3PLLbcoNjZWt9xyi6Nt9+7deuKJJ9SxY0dt2LBBsbGxKlmyZKGG2fT0dPXv318DBw5USEiI3nnnHa1du1ZjxozRihUr1KRJE3333XeFsu/CtmbNGsXGxmrNmjWaM2eOatSooWeeeUYNGzbUnj173J5n3rx5mjdvnlPb2LFjtXXrVv373/9WbGysxo4dq82bN2v69OmEWQAojgwAoNjYtGmT8fLyMnfeeaex2+1OfXa73dx5553Gy8vLbNq0qYhWmJ0kM3LkyGztqamp5qGHHjKSzLx581zOkZKSku14M3zwwQdGktm6datTe1BQkHnwwQfzvW5XXnzxRSPJzJw5M1tfXFycqVmzpqlcubK5ePFioey/MEydOtVIMmfPns3Wt3v3blO6dGlTo0YNk5SU5HKehISEXPvq1q1runfv7tQ2e/ZsI8kcPnw4X+sGAFgXV2YBoBiJioqSzWbTm2++KR8fH6c+Hx8fzZs3TzabTTNnznS0Z7x8dNeuXerdu7dKlSql0qVLa9CgQTp79my2fXz88cdq3bq1goKCFBwcrMjISO3atctpzNChQxUcHKxff/1VPXr0UHBwsKpXr66nnnpKycnJbh2Lt7e33njjDVWoUEGzZ892tGe8lPj999/XU089papVq8rf31+//vprtpcZd+jQQYMGDZIktWzZUjabTUOHDpXNZlNCQoLeffddx8tms77kNb9SUlI0e/Zs3XTTTXrmmWey9VeuXFlRUVE6ffq0Fi5c6NS3Zs0ade7cWaVLl1ZgYKBuuukmRUVFOY35/vvv1atXL5UrV04BAQGKiIjQJ5984jTm7NmzGjFihBo0aKDg4GBVqlRJnTp10rfffus07siRI7LZbJozZ45eeeUV1apVS8HBwWrdunWeXuJ98803a9KkSTp69Kg+/vhjR3uHDh3UqFEjffPNN2rTpo0CAwP10EMPOfoyznlG3X799VetXr3aUZOhQ4fqn//8pySpVq1ajvasLyMHANyYCLMAUEykpaVp48aNat68uapVq5bjmOrVq6tZs2basGGD0tLSnPruvfde1a1bV5999pmmTZum5cuXKzIyUna73THmxRdfVP/+/dWgQQN98sknev/99/X777+rXbt22rt3r9N8drtdvXr1UufOnfXFF1/ooYce0quvvqpZs2a5fUwlSpRQly5ddPjwYR0/ftypb8KECTp69Kjeeust/ec//1GlSpWybT9v3jxNnjxZkrRo0SLFxsZqypQpio2NVYkSJdSjRw/FxsYqNjY220te82vHjh26ePGievXqJZvNluOYu+66S15eXlq/fr2jbeHCherRo4fS09Mdx/TEE084HffGjRvVtm1bXbp0SW+99Za++OILNW3aVA888IDeeecdx7gLFy5IkqZOnaovv/xSixYtUu3atdWhQ4ccg+C//vUvrV+/XtHR0frwww+VkJCgHj166PLly24fd69evSRJ33zzjVP7qVOnNGjQIA0YMECrVq3SiBEjsm2b8fLwkJAQtW3b1lGT6dOn6/HHH5ckLVu2zNGe+WXkAIAbl8/VhwAAbgTnzp1TYmKiatWq5XJcrVq1tG3bNp0/f94pAPbu3VsvvfSS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ZIwxf/vb38y999571X0D8GyEWcDi5syZYySZO+64w8TGxmb7yWzfvn0mODjY3H777WbVqlVm2bJlplGjRiY0NNScOXPGMe7bb781JUqUMGFhYWbDhg3Z5sz8/Z69evUyU6ZMMUuXLjUxMTHmo48+Mt26dTOSzL/+9S+3juHMmTPm008/NZ9++qkZMmSIIzh++umnJiYmxmns888/b2w2m5k4caKJiYkxs2fPNv7+/mb48OEFfr4y3HHHHaZEiRLm0qVLbu0jw8aNG42Pj4+59957zfr1682HH35oqlevbho1apTtO04ffvhh4+/vb2bPnm1iYmLMxIkTjc1mMy+88ILTuJiYGOPt7W2mT59e6PvK7ZgkmX/84x9m8+bNZvv27Y5Q+cgjjxibzWbGjBlj1q5da+bPn28qVapkqlevbs6dO+dy3uL2ON6+fbtjbPXq1U2DBg0c948cOeLW/rp27WrKli1r3n77bbNhwwYzfPhwI8l88MEHjjGXLl0yLVq0MK+++qpZuXKl+frrr82bb75pwsPDTWBgYI6BLKsb8XFsjDGPP/64sdls5pFHHjHLly83a9euNc8//7wJDg42zZs3N8nJyTlu5yrMnj171jRr1sz4+fmZRx991HzxxRfmm2++MR9//LEZNGiQ8fb2Nrt373a5rk6dOpnWrVtna09ISHA8Rp566ikjyUybNs18+umnZtWqVU5jP/30U2Oz2UzPnj3NypUrzccff2waNWpkSpcubX799VfHuB9//NFMmzbNrFy50qxfv97MmTPHVKhQwTRv3tz8/vvvLte5Z88e065dO/P666+b1atXm6+//tpMmjTJeHl5mYkTJzrGPfjgg8bf398sWbLEbNu2zfzwww/GGGOuXLliIiIiTLVq1czLL79s1q9fb9auXWsWLFhg7r//frNlyxbHHJIcz5PFixebFStWmDvuuCPbH3RuvfVWM2PGDLN8+XLz3//+17z11lumfPny2c7nuXPnjCTz+uuvuzxGAJ6PMAtYXPv27Y2kXH+y+v77703nzp1NYGCgKVWqlLnnnnucfrkxxpipU6e6nDPz1YBZs2aZFi1amLJlyxpvb29Tvnx5ExkZaVauXOn2MWQEpJx+crpi9dprr5l69eoZPz8/U6NGDTN16lSTkpJSKOfr6NGjxsvLywwZMsTt48ls3bp1plWrViYgIMCUK1fODBkyxJw+fTrbuJSUFDN16lRTo0YN4+fnZ+rVq5fjL1oZ52rq1KmFvq/cTJgwwYSGhhovLy+nx0NaWpqZNWuWqVevnvH19TUVKlQwgwYNMseOHbvqnMXtcfzggw/mOja3K4JZ/f777+aJJ54wISEhxs/PzzRp0sQsXrzYaUxSUpJ5+OGHzU033WSCg4ONj4+PqVatmhk0aJDbr2Qw5sZ8HKenp5s333zTNG/e3AQGBho/Pz/zt7/9zYwbN85lkHMVZo0x5o8//jCvv/66ad26tSlVqpTx8fExoaGhpnfv3ubLL7+86roWLlxovL29zcmTJ53aDx8+nOtjpmbNmtnmWb58uWnRooUJCAgwpUuXNr169cpW8/3795vbb7/dlCtXzvj5+Zm6deuayZMnmytXrlx1nadPnzZDhw414eHhJigoyAQHB5smTZqYV1991emK8JEjR0y3bt1MyZIls631ypUrZvLkyaZ+/frGz8/PlC5d2jRu3NiMHTvW6SqsJDNy5Egzb948U6dOHePr62vCw8PNhx9+6LSm8ePHm+bNm5uyZcsaf39/U7t2bTN27Nhsf0xbuHCh8fX1ddoHAGuyGZPli7wAAABQJJKSklSjRg099dRTGjduXFEvxyPYbDaNHDlSb7zxRoHM165dO9WoUUMffvhhgcwHoOjwAVAAAAAeIiAgQNOnT9crr7yihISEol7ODeebb77R9u3b9dxzzxX1UgAUAJ+iXgAAAAD+8sgjj+jSpUs6dOiQ41PcUTDOnz+v9957T7Vr1y7qpQAoALzMGAAAAABgObzMGAAAAABgOYRZAAAAAIDlEGYBAAAAAJZDmAUAAAAAWA6fZuympKQkpaSkFPUyAAAAABQDfn5+CggIKOpleDTCrBuSkpJUq1YtxcXFFfVSAAAAABQDISEhOnz4MIHWBcKsG1JSUhQXF6djx46pVKlSRb2cYs9ut2vdunXq1q2bfH19i3o5xR718CzUw7NQD89CPTwL9fAs1MOzxMfHq3r16kpJSSHMukCYzYNSpUoRZj2A3W5XYGCgSpUqxT+2HoB6eBbq4Vmoh2ehHp6FengW6gEr4gOgAAAAAACWQ5gFAAAAAFgOYRYAAAAAYDm8ZxYAAADwAMYYpaamKi0t7brv2263y8fHR0lJSUWy/+LG29tbPj4+stlsRb0USyPMAgAAAEUsJSVFp06dUmJiYpHs3xijkJAQHTt2jIB1nQQGBqpKlSry8/Mr6qVYFmEWAAAAKELp6ek6fPiwvL29FRoaKj8/v+seKNPT03XlyhUFBwfLy4t3IhYmY4xSUlJ09uxZHT58WH/729845/lEmAUAAACKUEpKitLT01W9enUFBgYWyRrS09Md32lKsCp8JUqUkK+vr/73v//xXbLXgEcqAAAA4AEIkcUL9b52nEEAAAAAgOUQZgEAAAAAlkOYBQAAAJAvHTp00JgxY9wef+TIEdlsNu3evbtA542JiZHNZtOlS5dcjtuwYYPCw8OVnp7u9tzu6NOnj1555ZUCnRNXR5gFAAAAbgBxp+M0cd5EdZ7SWS3HtVTnKZ016c1JOn3mdKHtc9myZXruuefcHl+9enWdOnVKjRo1kpR7CM3rvO565plnNGnSJMf7VU+dOqUBAwaofv368vLyyjVAL126VA0aNJC/v78aNGigzz//3Kn/2Wef1QsvvKD4+PgCXzNyR5gFAAAALC5qUZRufuFmRZ2J0gafDdoWuE0bfDboxdMv6ubnb1bUoqhC2W+5cuVUsmRJt8d7e3srJCREPj6uv1Qlr/O6Y/PmzTp48KDuv/9+R1tycrIqVqyoSZMm6eabb85xu9jYWD3wwAMaPHiw9uzZo8GDB6tv377aunWrY0yTJk0UFhamDz/8sEDXDNcIswAAAICFRS2K0tRfpupM+TNS1q+ntUmny5/W1F+mFkqgzfpy4LCwML344ot66KGHVLJkSdWoUUNvv/22oz/zy4yPHDmijh07SpLKli0rm82moUOH5jjvBx98oObNm6tkyZIKCQnRgAEDdObMmTytdcmSJerWrZvT1+CEhYXptdde05AhQ1S6dOkct4uOjlbXrl01YcIEhYeHa8KECercubOio6OdxvXq1UuLFy/O05pwbQizAAAAgEXFnY5T9K5o2QPtLsfZA+16bddrhfqS4wwvv/yymjdvrl27dmnEiBF67LHH9Msvv2QbV716dS1dulSStH//fp06dUqvvfZajnOmpKToueee0549e7R8+XIdPnzYEXzd9c0336h58+Z5Pp7Y2Fh169bNqS0yMlKbN292arv11lu1bds2JScn53kfyB/CLAAAAGBRc5fN1Zly7l2hPF3utF5f+nohr0jq0aOHRowYobp162rcuHGqUKGCYmJiso3z9vZW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166dJOmjjz7SgAED5OXlpd9++02LFy/W8ePHFRoaKkl6+umntWbNGi1atEgvvvhijvMeOXLEMT4v4uLiVLlyZae2ypUrKy4uzqmtatWqSk5OVlxcnGrWrJnn/eDquDILAAAAWNSVK+4G2T8lJORt/NX89ttvGjBggGrXrq1SpUqpVq1akqSjR49Kknbv3q2IiAhHkM2PihUrqmvXro73nx4+fFixsbEaOHCgJGnnzp0yxqhevXoKDg52/Pz3v//N9pLnzP744w+nlxjnhc3mfB6NMdnaSpQoIUlKTEzM1z5wdVyZBQAAACwqONhcfVAmQUF5G381d911l6pXr64FCxYoNDRU6enpatSokVJSUiT9Feiu1cCBAzV69GjNnTtXH330kRo2bOj4gKb09HR5e3trx44d8vZ2vvIcHByc65wVKlTQxYsX87yWkJCQbFdhz5w5k+1q7YULFyT9GcZROLgyCwAAAFhUq1ZpktwNqOb/xheM8+fPa9++fZo8ebI6d+6sm266KVs4bNKkiXbv3u0Idln5+fkpLe3qa7rnnnuUlJSkNWvW6KOPPtKgQYMcfREREUpLS9OZM2dUt25dpx9XL1+OiIjQ3r173Tzav7Ru3Vrr1693alu3bp3atHF+7/JPP/2katWqqUKFCnneB9xDmAUAAAAs6vHHW6lSpc1XHyipcuXNeuKJ1gW277Jly6p8+fJ6++239euvv2rDhg168sknncb0799fISEhuueee/Tdd9/p0KFDWrp0qWJj//wgqrCwMB0+fFi7d+/WuXPncv2wpKCgIN19992aMmWK9u3bpwEDBjj66tWrp4EDB2rIkCFatmyZDh8+rO3bt2vWrFlatWpVruuPjIzUpk2bsrXv3r1bu3fv1pUrV3T27Fnt3r3bKfSOHj1a69at06xZs/TLL79o1qxZ+uqrr7J9J+23336b7YOiULAIswAAAIBFhYRU1Jgx8fL1jXM5ztc3TmPGxKty5YK7Sujl5aUlS5Zox44datSokcaOHavZs2c7jfHz89O6detUqVIl9ejRQ40bN9bMmTMdLwe+7777dMcdd6hjx46qWLGiy6+yGThwoPbs2aN27dqpRo0aTn2LFi3SkCFD9NRTT6l+/frq1auXtm7dqurVq+c636BBg7R3717t37/fqT0iIkIRERHasWOHPvroI0VERKhHjx6O/jZt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jz869U+ePFktWrTQ6tWrdeTIES1evNipPyAgQJMnT5bdbs/j0QIAAACA5ynOuSxfYfbKlSsaOHCgFixYoLJlyzr1DR48WM8++6y6dOni9nyxsbFq27atBgwYoLCwMHXr1k39+/fX999/7zTOx8dHISEhjp+KFSs69V+6dEkNGzZU48aNVatWLV2+fNmpv3///rp8+bIWLFiQxyMGAAAAAM9S3HNZvsLsyJEj1bNnzzydGFduu+027dixQ9u2bZMkHTp0SKtWrVLPnj2dxh08eFChoaGqVauW+vXrp0OHDjn1jx8/Xk888YT8/f21a9cuDRkyxKm/VKlSmjhxombMmKGEhIQCWTsAAAAAFIXinsvyHGaXLFminTt3KioqKt87zapfv3567rnndNttt8nX11d16tRRx44dNX78eMeYli1b6r333tPatWu1YMECxcXFqU2bNjp//rxjTPPmzXXixAkdO3ZMmzdvVnBwcLZ9jRgxQgEBAXrllVcKbP0AAAAAcD2RyySfvAw+duyYRo8erXXr1ikgICDfO80qJiZGL7zwgubNm6eWLVvq119/1ejRo1WlShVNmTJFktS9e3fH+MaNG6t169aqU6eO3n33XT355JOOvoxL3rnx9/fXjBkzNGrUKD322GN5Wqfdbuf9th4gowbUwjNQD89CPTwL9fAs1MOzUA/PQj08y9XqUNxzWQabMca4O3j58uW699575e3t7WhLS0uTzWaTl5eXkpOTHX1HjhxRrVq1tGvXLjVt2tTlvO3atVOrVq00e/ZsR9sHH3ygRx55RFeuXJGXV84XkLt27aq6devqzTffvOraO3TooKZNmyo6Olrp6elq2rSpOnXqpLCwMEVHR+vIkSO5bhsfH6/SpUvro48+UmBg4FX3BQAAAAD5lZiYqAEDBujy5csqVapUtv7imsuyytOV2c6dO2f7pKphw4YpPDxc48aNczqZeZGYmJjtxHh7e8sYo9yydnJysvbt26d27drleX9eXl6KiopS79698/RXgG7duuX4YML1ZbfbtX79enXt2lW+vr5FvZxij3p4FurhWaiHZ6EenoV6eBbq4Vni4+Nd9hf3XJYhT2G2ZMmSatSokVNbUFCQypcv72i/cOGCjh49qpMnT0qS9u/fL0mOT7qSpCFDhqhq1aqO13ffddddeuWVVxQREeG4nD1lyhT16tXLUYinn35ad911l2rUqKEzZ87o+eefV3x8vB588ME8H7Qk9ezZUy1bttT8+fNVuXJlt7bx9fXlye1BqIdnoR6ehXp4FurhWaiHZ6EenoV6eIar1aC457IMeQqz7lixYoWGDRvmuN+vXz9J0tSpUzVt2jRJ0tGjR50S/+TJk2Wz2TR58mSdOHFCFStW1F133aUXXnjBMeb48ePq37+/zp07p4oVK6pVq1basmWLatasme+1zpo1S23atMn39gAAAADgiYpDLsvTe2aLq4z3zOb2mnVcX3a7XatWrVKPHj34y6EHoB6ehXp4FurhWaiHZ6EenoV6eBbyh3vy9T2zAAAAAAAUJcIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHMIsAAAAAMByCLMAAAAAAMshzAIAAAAALIcwCwAAAACwHJ+iXoCVxMfHF/USIMlutysxMVHx8fHy9fUt6uUUe9TDs1APz0I9PAv18CzUw7NQD89C7nAPYdYNfn5+CgkJUfXq1Yt6KQAAAACKgZCQEPn5+RX1MjyazRhjinoRVpCUlKSUlJSiXgYAAACAYsDPz08BAQFFvQyPRpgFAAAAAFgOHwAFAAAAALAcwiwAAAAAwHIIswAAAAAAyyHMAgAAAAAshzALAAAAALAcwiwKxYkTJzRo0CCVL19egYGBatq0qXbs2OHoP336tIYOHarQ0FAFBgbqjjvu0MGDB13OuWzZMjVv3lxlypRRUFCQmjZtqvfff99pzJUrV9SvXz9VqVJF/fr1U0JCgiTprbfeUsmSJZWamuo01tfXV+3atXOa49tvv5XNZtOBAweu9TR4jMKox4IFC9SuXTuVLVtWZcuWVZcuXbRt2zanMdQjZ4VRj59//ln33XefwsLCZLPZFB0dnW0M9ci7gqjV/v371bZtW1WrVk0zZsxwtPfr10/du3d3Grt69WrZbDZNmTLFqf25555TaGhoIRyh57naOb9y5YpGjRqlatWqqUSJErrpppv05ptvupzTbrdrxowZqlOnjgICAnTzzTdrzZo1TmN4fuSsMOohSdHR0apfv75KlCih6tWra+zYsUpKSnKal3pkVxj16NChg2w2W7afnj17Os1LPeCJCLMocBcvXlTbtm3l6+ur1atXa+/evXr55ZdVpkwZSZIxRvfcc48OHTqkL774Qrt27VLNmjXVpUsXxz+OOSlXrpwmTZqk2NhY/fDDDxo2bJiGDRumtWvXOsZER0crODhY69atU2BgoOMX+o4dO+rKlSv6/vvvHWO//fZbhYSEaPv27UpMTHS0x8TEKDQ0VPXq1SvYE1NECqseMTEx6t+/vzZu3KjY2FjVqFFD3bp104kTJxxjqEd2hVWPxMRE1a5dWzNnzlRISEiOY6hH3hRUrUaOHKnBgwfriy++0H/+8x999913kv4875s2bXL6JTAmJkbVq1fXxo0bndYSExOjjh07Fv5BF7GrnXNJGjt2rNasWaMPPvhA+/bt09ixY/X444/riy++yHXeyZMna/78+Zo7d6727t2rRx99VPfee6927drlGMPzI7vCqseHH36o8ePHa+rUqdq3b58WLlyojz/+WBMmTHCMoR7ZFVY9li1bplOnTjl+fvrpJ3l7e+v+++93jKEe8FgGKGDjxo0zt912W679+/fvN5LMTz/95GhLTU015cqVMwsWLMjTviIiIszkyZMd95966ikza9YsY4wxs2bNMv/85z8dfaGhoSYqKspx/5lnnjEjR440DRo0MOvXr3e0d+rUyQwcODBP6/Bk16seqamppmTJkubdd991tFGP7K5HPWrWrGleffXVbO3UI28KqlbNmjUzW7ZsMSkpKaZXr17myy+/dNo+NjbWMfbWW281//rXv4yfn59JSEgwxhiTnJxsSpQoked/H63oaufcGGMaNmxoZsyY4dR2yy23OP2/IKsqVaqYN954w6nt7rvvdnos8/zIrrDqMXLkSNOpUyentieffNJpX9Qju8KqR1avvvqqKVmypLly5YqjjXrAU3FlFgVuxYoVat68ue6//35VqlRJERERWrBggaM/OTlZkhQQEOBo8/b2lp+fnzZt2uTWPowx+vrrr7V//37dfvvtjvZRo0Zp/vz58vX11aJFizR69GhHX4cOHZyudmzcuFEdOnRQ+/btHe0pKSmKjY29oa6AXI96SH9eGbTb7SpXrpyjjXpkd73qkRPqkTcFVasZM2aoa9euCgwMlJeXlyIjIyVJ9erVU2hoqOP8/v7779q5c6fuv/9+1alTx3EFd8uWLfrjjz+KxXm/2jmXpNtuu00rVqzQiRMnZIzRxo0bdeDAAcd5zUlycrJTnSSpRIkSTnXi+ZFdYdXjtttu044dOxxvTTl06JBWrVrl9LJW6pFdYdUjq4ULF6pfv34KCgpytFEPeKyizdK4Efn7+xt/f38zYcIEs3PnTvPWW2+ZgIAAxxW7lJQUU7NmTXP//febCxcumOTkZBMVFWUkmW7durmc+9KlSyYoKMj4+PgYf39/s3Dhwmxj0tLSzKlTp0x6erpT+9tvv22CgoKM3W438fHxxsfHx5w+fdosWbLEtGnTxhhjzH//+18jyfz2228FdDaKXmHWI7MRI0aYOnXqmD/++MOpnXo4ux71yO3KrDHUIy8KslZJSUnmzJkz2fYxYMAAx9gvv/zSNGjQwBhjzKOPPmomTpxojDFm+vTppnr16oV5qB7jaufcmD+vVA8ZMsRIMj4+PsbPz8+89957Luft37+/adCggTlw4IBJS0sz69atMyVKlDB+fn5O43h+OCusehhjzOuvv258fX2Nj4+PkWQee+yxbGOoh7PCrEeGrVu3Gklm69at2fqoBzwRYRYFztfX17Ru3dqp7fHHHzetWrVy3P/+++/NzTffbCQZb29vExkZabp37266d+/ucu60tDRz8OBBs2vXLjNnzhxTunRps3HjRrfWdfDgQSPJbN682emXxlOnThlfX19z5coVM336dFOjRo28HbCHK8x6ZJg1a5YpW7as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j1M7dfR8v/zyi9LT0zV//nzVrVtXP/30k4YPH66EhATNmTNHEnW0io8//lhjxozRvHnz1LZtW82fP1/du3fX3r17VaNGjaJe3tUZeIxFixaZ0qVL59o/b9480759e/P1118bSebixYtOfaVLlzZJSUmOtqioKBMaGmrS09MLcdXI6mp1zGzEiBGmY8eOjvvU0XPkVsdVq1YZLy8vc+LECUfb4sWLjb+/v7l8+bIxhjp6mrNnzxpJ5ptvvnG0xcfHG0nmq6++Msa4V1cULbvdbqpWrWr+3//7f7mOoY7WsWrVKhMeHm5+/vlnI8ns2rXLqY86Ws9LL71katWq5bhPHa3h1ltvNY8++qhTW3h4uBk/fnwRrShveJmxRezdu1czZszQe++9Jy+v7GWLjY1V+/btnb4bKjIyUidPntSRI0eu40qRF5cvX1a5cuUc96mj54uNjVWjRo0UGhrqaIuMjFRycrJ27NjhGEMdPUf58uV100036b333lNCQoJSU1M1f/58Va5cWc2aNZPkXl1RtHbu3KkTJ07Iy8tLERERqlKlirp3766ff/7ZMYY6WsPp06c1fPhwvf/++woMDMzWTx2tKaffaaijZ0tJSdGOHTvUrVs3p/Zu3bpp8+bNRbSqvCHMWkBycrL69++v2bNn53q5Py4uTpUrV3Zqy7gfFxdX6GtE3sXGxuqTTz7RP/7xD0cbdfR8OdWobNmy8vPzc9SIOnoWm82m9evXa9euXSpZsqQCAgL06quvas2aNY73RbtTVxStQ4cOSZKmTZumyZMna+XKlSpbtqzat2+vCxcuSKKOVmCM0dChQ/Xoo4+qefPmOY6hjtbz22+/ae7cuXr00UcdbdTR8507d05paWk5/s5ilRoRZgvJtGnTZLPZXP58//33bs01YcIE3XTTTRo0aJDLcTabzem++b8Pm8naDvcVZB0z+/nnn3X33Xfr2WefVdeuXZ36qGPBK+g65lQLY4xTO3UsfO7W1RijESNGqFKlSvr222+1bds23X333brzzjt16tQpx3zu1BUFz906pqenS5ImTZqk++67T82aNdOiRYtks9n06aefOuajjkXD3TrOnTtX8fHxmjBhgsv5qGPRyM//L0+ePKk77rhD999/vx5++GGnPupoDTn9zmKVGvEBUIVk1KhR6tevn8sxYWFhbs21YcMG/fjjj/rss88k/fVLcYUKFTRp0iRNnz5dISEh2f6CcubMGUnK9tcWuK8g65hh79696tSpk4YPH67Jkyc79VHHwlGQdQwJCdHWrVud2i5evKj/397dgza1x2Ecf1pvE4qmQ0xbXwmokzhZoQas9g0dHES30qFoRwuKdRAXFdLNSXARRLvVoYVCqS8Rq7iIBVM0iJ1MxTaioEJApRV+d/Dec29MwFNIevIP3w+c4ZwcDv/wkJw8nHP+WVlZ8TIix7XhN9dHjx5pampKX758UVNTk6RfMzemUimNjo7qwoULvnJFZfjNMZ/PS5J2797tbQ+Hw9qxY4fevXsnyd/nE5XhN8dkMqlnz54VPIYhSfv27VN/f79GR0fJMUCrPV8uLS2pq6tLiURCN27cKNiPHKtfLBbTunXrSv5mcSUjymyFxGIxxWKxshxrfHxc379/99ZnZ2d16tQpPX36VDt37pQkJRIJXbx4UcvLywqFQpKkBw8eaMuWLasuW/hPOXOUfl2R7e7u1sDAgEZGRopeJ8fKKGeOiURCIyMjyuVy2rx5s6RfGYXDYe/5S3JcG35z/fbtmyQVzTdQX1/vXe3zkysqw2+ObW1tCofDmp+f14EDByRJKysrymazisfjksgxSH5zvHbtmpLJpLe+tLSkI0eO6M6dO2pvb5dEjkFazflycXFRXV1d3l0Sv3/HkmP1C4VCamtrUyqV0vHjx73tqVRKx44dC3BkqxDMvFP4v4WFBUun03blyhXbsGGDpdNpS6fTls/nS+4/MzNTNJvx169frbW11fr6+uzVq1c2MTFhTU1NdvXq1TV6F/hTjplMxpqbm62/v99yuZy3fPz40TsGOQbvTzn+/PnT9uzZYz09PfbixQt7+PChbdu2zYaGhrxjkGN1+fTpk23cuNFOnDhhc3NzNj8/b+fPn7eGhgabm5szM3+5InhnzpyxrVu32v379+3Nmzc2ODhoLS0t9vnzZzMjRxe9ffu2aDZjcqx+i4uLtmvXLuvu7rb3798X/K75Fzm6YWxszBoaGuzmzZv2+vVrO3v2rK1fv96y2WzQQ/OFMlsFBgYGTFLRMjMzU3L/UmXWzOzly5fW0dFh4XDYNm3aZJcvX+ZvQNbQn3K8dOlSydfj8XjBccgxWH4+jwsLC3b06FFrbGy0aDRqQ0NDBX/DY0aO1WZ2dtYOHz5s0WjUIpGI7d+/36anpwv28ZMrgrW8vGzDw8PW0tJikUjEent7LZPJFOxDjm4pVWbNyLHa3bp1q+S58vfrZOTohuvXr1s8HrdQKGR79+61J0+eBD0k3+rM/nkAEwAAAAAARzCbMQAAAADAOZRZAAAAAIBzKLMAAAAAAOdQZgEAAAAAzqHMAgAAAACcQ5kFAAAAADiHMgsAAAAAcA5lFgAAAADgHMosAAAAAMA5lFkAAAAAgHMoswAAAAAA51BmAQAos2w2q7q6uqKls7Mz6KEBAFAz/gp6AAAA1Jrt27crl8t56x8+fFBvb68OHjwY4KgAAKgtdWZmQQ8CAIBa9ePHD3V2dqq5uVmTk5Oqr+emKAAAyoErswAAVNDg4KDy+bxSqRRFFgCAMqLMAgBQIclkUvfu3dPz588ViUSCHg4AADWF24wBAKiA8fFx9fX16e7du+rp6Ql6OAAA1BzKLAAAZZbJZNTe3q5z587p9OnT3vZQKKRoNBrgyAAAqB2UWQAAyuz27ds6efJk0fZDhw7p8ePHaz8gAABqEGUWAAAAAOAcplUEAAAAADiHMgsAAAAAcA5lFgAAAADgHMosAAAAAMA5lFkAAAAAgHMoswAAAAAA51BmAQAAAADOocwCAAAAAJxDmQUAAAAAOIcyCwAAAABwDmUWAAAAAOAcyiwAAAAAwDl/A6Zb0eDWtk7fAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 1100x740.098 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"(<GeoAxes: title={'center': 'OpenDrift - OceanDrift\\n2023-10-27 00:00 to 2023-11-03 00:00 UTC (169 steps)'}>,\n",
" <Figure size 1100x740.098 with 2 Axes>)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#%%\n",
"# Print and plot results, with lines colored by particle depth\n",
"print(o)\n",
"o.plot(linecolor='z', fast=True)\n",
"#o.animation()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "global-global-opendrift",
"language": "python",
"name": "conda-env-global-global-opendrift-py"
},
"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.11.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment