{ "cells": [ { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", "from dask.distributed import Client" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [], "source": [ "mesh = xr.open_dataset('/home/sallen/MEOPAR/grid/mesh_mask202108.nc')\n", "# the mask is 1 where there is water, we want the opposite. The meshmask has an extra dimension, hence the [0]\n", "tmask = 1 - mesh.tmask[0]\n", "area = ((1-tmask) * mesh.e1t[0] * mesh.e2t[0]).rename({'z':'depth', 'y':'gridY', 'x':'gridX'})" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [], "source": [ "chunk_sizes = {'time': 1, 'depth': 40, 'gridY': 898, 'gridX': 398}" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "year = 2019\n", "fname = 'SalishSeaCast_river_trace_day_avg_allR_00_40_{}0101_{}1231_meters_3d'.format(year, year)\n", "meters = xr.open_dataset('/ocean/cdonaldson/research_runs/hindcast_auto/transformations/3d_hindcast_meters/{}.nc'.format(fname),chunks=chunk_sizes)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:          (time: 365, depth: 40, gridY: 898, gridX: 398)\n",
       "Coordinates:\n",
       "  * time             (time) datetime64[ns] 2019-01-01T12:00:00 ... 2019-12-31...\n",
       "  * depth            (depth) float32 0.5 1.5 2.5 3.5 ... 360.7 387.6 414.5 441.5\n",
       "  * gridY            (gridY) int64 0 1 2 3 4 5 6 ... 891 892 893 894 895 896 897\n",
       "  * gridX            (gridX) int64 0 1 2 3 4 5 6 ... 391 392 393 394 395 396 397\n",
       "Data variables: (12/13)\n",
       "    nooksack_river   (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    skagit_river     (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    snohomish_river  (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    nisqually_river  (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    elwha_river      (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    cowichan_river   (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    ...               ...\n",
       "    puntledge_river  (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    salmon_river     (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    homathko_river   (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    squamish_river   (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    fraser_river     (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>\n",
       "    other_rivers     (time, depth, gridY, gridX) float64 dask.array<chunksize=(1, 40, 898, 398), meta=np.ndarray>
" ], "text/plain": [ "\n", "Dimensions: (time: 365, depth: 40, gridY: 898, gridX: 398)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2019-01-01T12:00:00 ... 2019-12-31...\n", " * depth (depth) float32 0.5 1.5 2.5 3.5 ... 360.7 387.6 414.5 441.5\n", " * gridY (gridY) int64 0 1 2 3 4 5 6 ... 891 892 893 894 895 896 897\n", " * gridX (gridX) int64 0 1 2 3 4 5 6 ... 391 392 393 394 395 396 397\n", "Data variables: (12/13)\n", " nooksack_river (time, depth, gridY, gridX) float64 dask.array\n", " skagit_river (time, depth, gridY, gridX) float64 dask.array\n", " snohomish_river (time, depth, gridY, gridX) float64 dask.array\n", " nisqually_river (time, depth, gridY, gridX) float64 dask.array\n", " elwha_river (time, depth, gridY, gridX) float64 dask.array\n", " cowichan_river (time, depth, gridY, gridX) float64 dask.array\n", " ... ...\n", " puntledge_river (time, depth, gridY, gridX) float64 dask.array\n", " salmon_river (time, depth, gridY, gridX) float64 dask.array\n", " homathko_river (time, depth, gridY, gridX) float64 dask.array\n", " squamish_river (time, depth, gridY, gridX) float64 dask.array\n", " fraser_river (time, depth, gridY, gridX) float64 dask.array\n", " other_rivers (time, depth, gridY, gridX) float64 dask.array" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "meters" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "client=Client(processes=True, n_workers=4, local_directory='/tmp/cdonaldson') # 4 is a good choice for n_workers even on salish, if I was the only person logged on or asked for space, could go as high as 16 but... be conscious of this\n", "# threads_per_worker = 1 if needed, netcdf is not threadsafe now so be realiable by specifying 1 (at expense of just some efficiency)" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "meters_sum = meters.sum(dim='depth')" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset>\n",
       "Dimensions:          (time: 365, gridY: 898, gridX: 398)\n",
       "Coordinates:\n",
       "  * time             (time) datetime64[ns] 2019-01-01T12:00:00 ... 2019-12-31...\n",
       "  * gridY            (gridY) int64 0 1 2 3 4 5 6 ... 891 892 893 894 895 896 897\n",
       "  * gridX            (gridX) int64 0 1 2 3 4 5 6 ... 391 392 393 394 395 396 397\n",
       "Data variables: (12/13)\n",
       "    nooksack_river   (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    skagit_river     (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    snohomish_river  (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    nisqually_river  (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    elwha_river      (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    cowichan_river   (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    ...               ...\n",
       "    puntledge_river  (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    salmon_river     (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    homathko_river   (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    squamish_river   (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    fraser_river     (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>\n",
       "    other_rivers     (time, gridY, gridX) float64 dask.array<chunksize=(1, 898, 398), meta=np.ndarray>
" ], "text/plain": [ "\n", "Dimensions: (time: 365, gridY: 898, gridX: 398)\n", "Coordinates:\n", " * time (time) datetime64[ns] 2019-01-01T12:00:00 ... 2019-12-31...\n", " * gridY (gridY) int64 0 1 2 3 4 5 6 ... 891 892 893 894 895 896 897\n", " * gridX (gridX) int64 0 1 2 3 4 5 6 ... 391 392 393 394 395 396 397\n", "Data variables: (12/13)\n", " nooksack_river (time, gridY, gridX) float64 dask.array\n", " skagit_river (time, gridY, gridX) float64 dask.array\n", " snohomish_river (time, gridY, gridX) float64 dask.array\n", " nisqually_river (time, gridY, gridX) float64 dask.array\n", " elwha_river (time, gridY, gridX) float64 dask.array\n", " cowichan_river (time, gridY, gridX) float64 dask.array\n", " ... ...\n", " puntledge_river (time, gridY, gridX) float64 dask.array\n", " salmon_river (time, gridY, gridX) float64 dask.array\n", " homathko_river (time, gridY, gridX) float64 dask.array\n", " squamish_river (time, gridY, gridX) float64 dask.array\n", " fraser_river (time, gridY, gridX) float64 dask.array\n", " other_rivers (time, gridY, gridX) float64 dask.array" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "meters_sum" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'SalishSeaCast_river_trace_day_avg_allR_00_40_20190101_20191231_meters_depsum'" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fname_save = fname[:-2] + 'depsum'\n", "fname_save" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "meters_sum.to_netcdf('/ocean/cdonaldson/research_runs/hindcast_auto/transformations/3d_hindcast_meters/{}.nc'.format(fname_save), engine=\"netcdf4\")" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [], "source": [ "client.close()" ] } ], "metadata": { "kernelspec": { "display_name": "analysis-cassidy", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 2 }