{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to create global grids"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import nes\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "import geopandas as gpd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Create dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define grid details"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "projection = 'global'\n",
    "inc_lat = 0.5\n",
    "inc_lon = 0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "nessy = nes.create_nes(projection=projection, inc_lat=inc_lat, inc_lon=inc_lon)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Read projection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Other Coordinate Operation Transformer: longlat>\n",
       "Description: PROJ-based coordinate operation\n",
       "Area of Use:\n",
       "- undefined"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nessy.projection"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'grid_mapping_name': 'latitude_longitude',\n",
       " 'semi_major_axis': 6378137.0,\n",
       " 'inverse_flattening': 0,\n",
       " 'inc_lat': 0.5,\n",
       " 'inc_lon': 0.5,\n",
       " 'lat_orig': -90,\n",
       " 'lon_orig': -180,\n",
       " 'n_lat': 360,\n",
       " 'n_lon': 720}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nessy.projection_data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>geometry</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>FID</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>POLYGON ((-180 -90, -179.5 -90, -179.5 -89.5, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>POLYGON ((-179.5 -90, -179 -90, -179 -89.5, -1...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>POLYGON ((-179 -90, -178.5 -90, -178.5 -89.5, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>POLYGON ((-178.5 -90, -178 -90, -178 -89.5, -1...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>POLYGON ((-178 -90, -177.5 -90, -177.5 -89.5, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>259195</th>\n",
       "      <td>POLYGON ((177.5 89.5, 178 89.5, 178 90, 177.5 ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>259196</th>\n",
       "      <td>POLYGON ((178 89.5, 178.5 89.5, 178.5 90, 178 ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>259197</th>\n",
       "      <td>POLYGON ((178.5 89.5, 179 89.5, 179 90, 178.5 ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>259198</th>\n",
       "      <td>POLYGON ((179 89.5, 179.5 89.5, 179.5 90, 179 ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>259199</th>\n",
       "      <td>POLYGON ((179.5 89.5, 180 89.5, 180 90, 179.5 ...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>259200 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                 geometry\n",
       "FID                                                      \n",
       "0       POLYGON ((-180 -90, -179.5 -90, -179.5 -89.5, ...\n",
       "1       POLYGON ((-179.5 -90, -179 -90, -179 -89.5, -1...\n",
       "2       POLYGON ((-179 -90, -178.5 -90, -178.5 -89.5, ...\n",
       "3       POLYGON ((-178.5 -90, -178 -90, -178 -89.5, -1...\n",
       "4       POLYGON ((-178 -90, -177.5 -90, -177.5 -89.5, ...\n",
       "...                                                   ...\n",
       "259195  POLYGON ((177.5 89.5, 178 89.5, 178 90, 177.5 ...\n",
       "259196  POLYGON ((178 89.5, 178.5 89.5, 178.5 90, 178 ...\n",
       "259197  POLYGON ((178.5 89.5, 179 89.5, 179 90, 178.5 ...\n",
       "259198  POLYGON ((179 89.5, 179.5 89.5, 179.5 90, 179 ...\n",
       "259199  POLYGON ((179.5 89.5, 180 89.5, 180 90, 179.5 ...\n",
       "\n",
       "[259200 rows x 1 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nessy.create_shapefile()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "[encoded data, 168968 characters]",
      "text/plain": [
       "<Figure size 1900x700 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, figsize=(19, 7))\n",
    "nessy.shapefile.plot(ax=ax, facecolor='blue', edgecolor='blue')\n",
    "countries = gpd.read_file('/gpfs/projects/bsc32/models/NES_tutorial_data/gadm_country_mask/gadm_country_ISO3166.shp')\n",
    "countries.plot(ax=ax, facecolor='none', edgecolor='black', linewidth=0.3)\n",
    "ax.margins(0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Write dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Write NetCDF"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Rank 000: Creating global_grid.nc\n",
      "Rank 000: NetCDF ready to write\n",
      "Rank 000: Dimensions done\n"
     ]
    }
   ],
   "source": [
    "nessy.to_netcdf('global_grid.nc', info=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Write shapefile"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/bsc/bsc032781/.local/lib/python3.9/site-packages/nes/nc_projections/default_nes.py:3805: UserWarning: No vertical level has been specified. The first one will be selected.\n",
      "  warn(msg)\n",
      "/home/bsc/bsc032781/.local/lib/python3.9/site-packages/nes/nc_projections/default_nes.py:3816: UserWarning: No time has been specified. The first one will be selected.\n",
      "  warn(msg)\n"
     ]
    }
   ],
   "source": [
    "nessy.to_shapefile('global_grid_shp')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "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.9.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
