{ "cells": [ { "cell_type": "markdown", "id": "43c330a3-ef0d-4328-8b27-edee620031bb", "metadata": {}, "source": [ "### Temperature Animation\n", "\n", "Create an animation of the surface temperature across the entire AUS2200 domain for a complete simulation in parallel using Xarray." ] }, { "cell_type": "code", "execution_count": null, "id": "9a7d4353-bcdb-4311-82da-32092fe13683", "metadata": {}, "outputs": [], "source": [ "import xarray as xr\n", "from glob import glob\n", "from dask.distributed import Client\n", "import matplotlib.pyplot as plt\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "id": "88786b5a-1b8a-48a6-ac4b-cb5551257743", "metadata": {}, "outputs": [], "source": [ "file_list = sorted(glob('/g/data/gx60/dr4292/experiments/ECL-shifted-evolvingSST/netcdf/u-cs142-20160603T0000-continuous-140E-evolvingSST/*/aus2200/d0198/RA3/um/umnsa_spec*'))" ] }, { "cell_type": "code", "execution_count": 3, "id": "8d43d79a-2965-43aa-b44f-db287a3df162", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-06-11 12:23:33,952 - distributed.preloading - INFO - Creating preload: /g/data/hh5/public/apps/dask-optimiser/schedplugin.py\n", "2024-06-11 12:23:33,984 - distributed.utils - INFO - Reload module schedplugin from .py file\n", "2024-06-11 12:23:34,048 - distributed.preloading - INFO - Import preload module: /g/data/hh5/public/apps/dask-optimiser/schedplugin.py\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Modifying workers\n" ] }, { "data": { "text/html": [ "
\n", "
\n", "
\n", "

Client

\n", "

Client-9a08e09b-2799-11ef-a20f-00000813fe80

\n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "
Connection method: Cluster objectCluster type: distributed.LocalCluster
\n", " Dashboard: /node/gadi-cpu-spr-0098.gadi.nci.org.au/52617/proxy/8787/status\n", "
\n", "\n", " \n", " \n", " \n", "\n", " \n", "
\n", "

Cluster Info

\n", "
\n", "
\n", "
\n", "
\n", "

LocalCluster

\n", "

95fafa1a

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", "
\n", " Dashboard: /node/gadi-cpu-spr-0098.gadi.nci.org.au/52617/proxy/8787/status\n", " \n", " Workers: 4\n", "
\n", " Total threads: 4\n", " \n", " Total memory: 0 B\n", "
Status: runningUsing processes: True
\n", "\n", "
\n", " \n", "

Scheduler Info

\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "

Scheduler

\n", "

Scheduler-0f745ce2-8ff3-47d4-82bb-54d95d456290

\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Comm: tcp://127.0.0.1:35419\n", " \n", " Workers: 4\n", "
\n", " Dashboard: /node/gadi-cpu-spr-0098.gadi.nci.org.au/52617/proxy/8787/status\n", " \n", " Total threads: 4\n", "
\n", " Started: Just now\n", " \n", " Total memory: 0 B\n", "
\n", "
\n", "
\n", "\n", "
\n", " \n", "

Workers

\n", "
\n", "\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 0

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:39799\n", " \n", " Total threads: 1\n", "
\n", " Dashboard: /node/gadi-cpu-spr-0098.gadi.nci.org.au/52617/proxy/35585/status\n", " \n", " Memory: 0 B\n", "
\n", " Nanny: tcp://127.0.0.1:45567\n", "
\n", " Local directory: /jobfs/117857481.gadi-pbs/dask-scratch-space/worker-svqrc4hr\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 1

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:40109\n", " \n", " Total threads: 1\n", "
\n", " Dashboard: /node/gadi-cpu-spr-0098.gadi.nci.org.au/52617/proxy/41377/status\n", " \n", " Memory: 0 B\n", "
\n", " Nanny: tcp://127.0.0.1:32889\n", "
\n", " Local directory: /jobfs/117857481.gadi-pbs/dask-scratch-space/worker-1vri8v2j\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 2

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:43757\n", " \n", " Total threads: 1\n", "
\n", " Dashboard: /node/gadi-cpu-spr-0098.gadi.nci.org.au/52617/proxy/33443/status\n", " \n", " Memory: 0 B\n", "
\n", " Nanny: tcp://127.0.0.1:34421\n", "
\n", " Local directory: /jobfs/117857481.gadi-pbs/dask-scratch-space/worker-8kub71ir\n", "
\n", "
\n", "
\n", "
\n", " \n", "
\n", "
\n", "
\n", "
\n", " \n", "

Worker: 3

\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", " \n", "\n", " \n", "\n", "
\n", " Comm: tcp://127.0.0.1:46723\n", " \n", " Total threads: 1\n", "
\n", " Dashboard: /node/gadi-cpu-spr-0098.gadi.nci.org.au/52617/proxy/41219/status\n", " \n", " Memory: 0 B\n", "
\n", " Nanny: tcp://127.0.0.1:41795\n", "
\n", " Local directory: /jobfs/117857481.gadi-pbs/dask-scratch-space/worker-bp1yuo9k\n", "
\n", "
\n", "
\n", "
\n", " \n", "\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", " \n", "\n", "
\n", "
" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "client=Client()\n", "client" ] }, { "cell_type": "code", "execution_count": 4, "id": "beb713cd-5f9f-4fd2-8b01-7649de2a1e3b", "metadata": {}, "outputs": [], "source": [ "mf_ds = xr.open_mfdataset(file_list,preprocess=lambda x: x['fld_s00i024'],parallel=True,chunks={'lat':-1,'lon':-1})" ] }, { "cell_type": "code", "execution_count": 5, "id": "de381673-e463-4685-ae84-a1c2aa54606d", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
<xarray.Dataset> Size: 16GB\n",
       "Dimensions:                   (time: 720, lat: 2120, lon: 2600)\n",
       "Coordinates:\n",
       "  * time                      (time) datetime64[ns] 6kB 2016-06-03T00:10:00 ....\n",
       "  * lat                       (lat) float64 17kB -48.79 -48.77 ... -6.852 -6.832\n",
       "  * lon                       (lon) float64 21kB 114.3 114.3 ... 165.7 165.7\n",
       "    theta_level_height        float64 8B 5.0\n",
       "    model_theta_level_number  int32 4B 1\n",
       "    sigma_theta               float64 8B 0.9994\n",
       "    height                    float64 8B 10.0\n",
       "    height_0                  float64 8B 1.5\n",
       "Data variables:\n",
       "    fld_s00i024               (time, lat, lon) float32 16GB dask.array<chunksize=(1, 2120, 2600), meta=np.ndarray>
" ], "text/plain": [ " Size: 16GB\n", "Dimensions: (time: 720, lat: 2120, lon: 2600)\n", "Coordinates:\n", " * time (time) datetime64[ns] 6kB 2016-06-03T00:10:00 ....\n", " * lat (lat) float64 17kB -48.79 -48.77 ... -6.852 -6.832\n", " * lon (lon) float64 21kB 114.3 114.3 ... 165.7 165.7\n", " theta_level_height float64 8B 5.0\n", " model_theta_level_number int32 4B 1\n", " sigma_theta float64 8B 0.9994\n", " height float64 8B 10.0\n", " height_0 float64 8B 1.5\n", "Data variables:\n", " fld_s00i024 (time, lat, lon) float32 16GB dask.array" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mf_ds" ] }, { "cell_type": "code", "execution_count": 6, "id": "bc74d6d0-b163-4f47-8625-31c3b01525c8", "metadata": {}, "outputs": [], "source": [ "def make_frame(f,ts,i,lat,lon):\n", " fig = plt.figure()\n", " ax=fig.add_subplot(111)\n", " pc = ax.pcolormesh(lon,lat,f - 273.15,shading='nearest',vmin=-5,vmax=45)\n", " fig.colorbar(pc,label=\"Surface Temperature (°C)\")\n", " t = pd.to_datetime(ts)\n", " plt.title(str(ts))\n", " plt.savefig(f'/home/563/dr4292/animation/frame{i:04}.png')\n", " return i" ] }, { "cell_type": "code", "execution_count": 7, "id": "a09947ac-fd5d-4091-9e22-e7e142e5bc5a", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "out = xr.apply_ufunc(make_frame,\n", " mf_ds['fld_s00i024'],\n", " mf_ds['fld_s00i024'].time,\n", " xr.DataArray([i for i in range(720)],{'time':mf_ds.time}),\n", " mf_ds['fld_s00i024'].lat,\n", " mf_ds['fld_s00i024'].lon,\n", " input_core_dims=[['lat','lon'],[],[],['lat',],['lon',]],\n", " exclude_dims=set((\"lat\",\"lon\")),\n", " vectorize=True,\n", " dask=\"parallelized\"\n", ")\n", "#for i,f in enumerate(mf_ds['fld_s00i024']):\n", "# f.plot(vmin=260, vmax=350)\n", "# plt.savefig(f'/home/563/dr4292/animation/frame{i:04}.png')\n", "# plt.close()" ] }, { "cell_type": "code", "execution_count": null, "id": "822038d3-438e-4c51-944d-9ede546d4443", "metadata": {}, "outputs": [], "source": [ "out.compute()" ] }, { "cell_type": "code", "execution_count": null, "id": "e7534694-e579-4d97-90eb-1b485da7594d", "metadata": {}, "outputs": [], "source": [ "!ffmpeg -framerate 10 -pattern_type glob -i '/home/563/dr4292/animation/frame*.png' -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4" ] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:analysis3-unstable]", "language": "python", "name": "conda-env-analysis3-unstable-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.10.14" } }, "nbformat": 4, "nbformat_minor": 5 }