{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# ModVege results - Moorepark time series distribution" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "import glob\n", "import itertools\n", "import numpy as np\n", "from datetime import datetime, timezone\n", "import geopandas as gpd\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import xarray as xr\n", "import climag.climag_plot as cplt" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "# met station coords\n", "# Wexford,4015,ENNISCORTHY (Brownswood),18,297870,135550,1983,(null)\n", "LON, LAT = -6.56083, 52.46306" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# Ireland boundary\n", "GPKG_BOUNDARY = os.path.join(\"data\", \"boundaries\", \"boundaries_all.gpkg\")\n", "ie_bbox = gpd.read_file(GPKG_BOUNDARY, layer=\"ne_10m_land_2157_IE_BBOX_DIFF\")" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "BASE_DIR = os.path.join(\"data\", \"ModVege\", \"EURO-CORDEX\")\n", "TEMP_DIR = os.path.join(BASE_DIR, \"stats\")\n", "os.makedirs(TEMP_DIR, exist_ok=True)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "datasets = {}\n", "\n", "for exp, model, data in itertools.product(\n", " [\"historical\", \"rcp45\", \"rcp85\"],\n", " [\"CNRM-CM5\", \"EC-EARTH\", \"HadGEM2-ES\", \"MPI-ESM-LR\"],\n", " [\"EURO-CORDEX\", \"HiResIreland\"],\n", "):\n", " # auto-rechunking may cause NotImplementedError with object dtype\n", " # where it will not be able to estimate the size in bytes of object data\n", " if model == \"HadGEM2-ES\":\n", " CHUNKS = 300\n", " else:\n", " CHUNKS = \"auto\"\n", "\n", " datasets[f\"{data}_{model}_{exp}\"] = xr.open_mfdataset(\n", " glob.glob(\n", " os.path.join(\n", " \"data\",\n", " \"ModVege\",\n", " data,\n", " exp,\n", " model,\n", " f\"*{data}*{model}*{exp}*.nc\",\n", " )\n", " ),\n", " chunks=CHUNKS,\n", " decode_coords=\"all\",\n", " )\n", "\n", " # convert HadGEM2-ES data back to 360-day calendar\n", " # this ensures that the correct weighting is applied when calculating\n", " # the weighted average\n", " if model == \"HadGEM2-ES\":\n", " datasets[f\"{data}_{model}_{exp}\"] = datasets[\n", " f\"{data}_{model}_{exp}\"\n", " ].convert_calendar(\"360_day\", align_on=\"year\")\n", "\n", "# remove spin-up year\n", "for key in datasets.keys():\n", " if \"historical\" in key:\n", " datasets[key] = datasets[key].sel(time=slice(\"1976\", \"2005\"))\n", " else:\n", " datasets[key] = datasets[key].sel(time=slice(\"2041\", \"2070\"))\n", " # # normalise to keep only date in time\n", " # datasets[key][\"time\"] = datasets[key].indexes[\"time\"].normalize()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['EURO-CORDEX_CNRM-CM5_historical',\n", " 'HiResIreland_CNRM-CM5_historical',\n", " 'EURO-CORDEX_EC-EARTH_historical',\n", " 'HiResIreland_EC-EARTH_historical',\n", " 'EURO-CORDEX_HadGEM2-ES_historical',\n", " 'HiResIreland_HadGEM2-ES_historical',\n", " 'EURO-CORDEX_MPI-ESM-LR_historical',\n", " 'HiResIreland_MPI-ESM-LR_historical',\n", " 'EURO-CORDEX_CNRM-CM5_rcp45',\n", " 'HiResIreland_CNRM-CM5_rcp45',\n", " 'EURO-CORDEX_EC-EARTH_rcp45',\n", " 'HiResIreland_EC-EARTH_rcp45',\n", " 'EURO-CORDEX_HadGEM2-ES_rcp45',\n", " 'HiResIreland_HadGEM2-ES_rcp45',\n", " 'EURO-CORDEX_MPI-ESM-LR_rcp45',\n", " 'HiResIreland_MPI-ESM-LR_rcp45',\n", " 'EURO-CORDEX_CNRM-CM5_rcp85',\n", " 'HiResIreland_CNRM-CM5_rcp85',\n", " 'EURO-CORDEX_EC-EARTH_rcp85',\n", " 'HiResIreland_EC-EARTH_rcp85',\n", " 'EURO-CORDEX_HadGEM2-ES_rcp85',\n", " 'HiResIreland_HadGEM2-ES_rcp85',\n", " 'EURO-CORDEX_MPI-ESM-LR_rcp85',\n", " 'HiResIreland_MPI-ESM-LR_rcp85']" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(datasets.keys())" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<xarray.Dataset>\n",
"Dimensions: (rlat: 33, rlon: 37, time: 10957, bnds: 2)\n",
"Coordinates:\n",
" lat (rlat, rlon) float64 dask.array<chunksize=(33, 37), meta=np.ndarray>\n",
" lon (rlat, rlon) float64 dask.array<chunksize=(33, 37), meta=np.ndarray>\n",
" * rlat (rlat) float64 3.685 3.795 3.905 4.015 ... 6.985 7.095 7.205\n",
" * rlon (rlon) float64 -17.27 -17.16 -17.05 ... -13.53 -13.41 -13.3\n",
" * time (time) datetime64[ns] 2041-01-01T12:00:00 ... 2070-12-31T12...\n",
" height float64 2.0\n",
" rotated_pole |S1 b''\n",
" time_bnds (time, bnds) datetime64[ns] dask.array<chunksize=(365, 2), meta=np.ndarray>\n",
" spatial_ref int64 0\n",
"Dimensions without coordinates: bnds\n",
"Data variables: (12/24)\n",
" bm_gv (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" bm_gr (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" bm_dv (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" bm_dr (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" age_gv (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" age_gr (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" ... ...\n",
" sen_gv (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" sen_gr (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" abs_dv (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" abs_dr (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" omd_gv (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
" omd_gr (time, rlat, rlon) float32 dask.array<chunksize=(365, 33, 37), meta=np.ndarray>\n",
"Attributes:\n",
" creation_date: 2023-03-11 00:11:26.834262+00:00\n",
" contact: nstreethran@ucc.ie\n",
" frequency: day\n",
" references: https://github.com/ClimAg\n",
" input_dataset: IE_EURO-CORDEX_RCA4_EC-EARTH_rcp45