{"cells":[{"cell_type":"markdown","id":"2d857022","metadata":{"id":"2d857022"},"source":["# Interpolación a retícula regular"]},{"cell_type":"markdown","id":"138fa71b","metadata":{"id":"138fa71b"},"source":["(Última actualización 1 sep 2023)\n","\n","| En esta notebook mostramos cómo transformar los datos que se encuentran en la proyección Conforme de Lambert a una proyección cilíndrica de modo que queden en una retícula regular.\n","| *We show an example of how to transform a dataset that is in a Lambert conformal projection to a regular grid (equirectangular projection).*"]},{"cell_type":"code","source":["# En caso de utilizar Google Colab, descomentar las siguientes líneas\n","# In case of using Google Colab, uncomment the following lines\n","\n","#!pip install -q condacolab\n","#import condacolab\n","#condacolab.install()\n","#!conda install -c conda-forge xesmf \"esmpy<8.4\""],"metadata":{"id":"rte6AFb3kZF-"},"id":"rte6AFb3kZF-","execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"id":"f6bd0056","metadata":{"id":"f6bd0056"},"outputs":[],"source":["# Importamos las librerías necesarias\n","# We import the necesssary libraries\n","import xarray as xr\n","import h5netcdf\n","import datetime\n","import xesmf as xe"]},{"cell_type":"markdown","id":"47b460d9","metadata":{"id":"47b460d9"},"source":["| Definimos la fecha de inicialización y el plazo de pronóstico a interpolar:\n","| *We define the forecast initialization date and the desired forecast lead time:*\n"]},{"cell_type":"code","execution_count":null,"id":"3ace92d0","metadata":{"id":"3ace92d0"},"outputs":[],"source":["init_year = 2022\n","init_month = 4\n","init_day = 1\n","init_hour = 0\n","INIT_DATE = datetime.datetime(init_year, init_month, init_day, init_hour)\n","\n","lead_time = 12"]},{"cell_type":"markdown","id":"243b48fe","metadata":{"id":"243b48fe"},"source":["| Leemos el archivo que posee el dato buscado:\n","| *We read the file containing the information we are looking for:*"]},{"cell_type":"code","execution_count":null,"id":"cc21a1dc","metadata":{"id":"cc21a1dc"},"outputs":[],"source":["# Descomentar la opción elegida:\n","\n","# --------\n","# Opción 1: Para acceder a los archivos online\n","# Option 1: To access files online\n","#! pip install s3fs\n","#import s3fs\n","#s3_file = f'smn-ar-wrf/DATA/WRF/DET/{INIT_DATE:%Y/%m/%d/%H}/WRFDETAR_01H_{INIT_DATE:%Y%m%d_%H}_{lead_time:03d}.nc'\n","#fs = s3fs.S3FileSystem(anon=True)\n","#if fs.exists(s3_file):\n","# f = fs.open(s3_file)\n","# ds = xr.open_dataset(f, decode_coords = 'all', engine = 'h5netcdf')\n","#else:\n","# print('The file does not exist')\n","# --------\n","\n","# --------\n","# Opción 2: Para abrir un archivo ya descargado\n","# Option 2: To open an already downloaded file\n","#filename = 'WRFDETAR_01H_{:%Y%m%d_%H}_{:03d}.nc'.format(INIT_DATE,lead_time)\n","#ds = xr.open_dataset(filename, decode_coords = 'all', engine = 'h5netcdf')\n","# --------"]},{"cell_type":"markdown","id":"69efd6c5","metadata":{"id":"69efd6c5"},"source":["| Definimos la nueva retícula a la que se quiere interpolar:\n","| *We define the target regular grid:*"]},{"cell_type":"code","execution_count":null,"id":"35dcf23f","metadata":{"id":"35dcf23f"},"outputs":[],"source":["resolution_lat = 0.1\n","resolution_lon = 0.1\n","lat_min = -56\n","lat_max = -19\n","lon_min = -76\n","lon_max = -48\n","\n","new_grid = xe.util.grid_2d(lon_min - resolution_lon/2, lon_max, resolution_lon,\n"," lat_min - resolution_lat/2, lat_max, resolution_lat)"]},{"cell_type":"markdown","id":"f5bad046","metadata":{"id":"f5bad046"},"source":["| Realizamos la interpolación:\n","| *We performe the interpolation:*"]},{"cell_type":"code","execution_count":null,"id":"cdbdfa57","metadata":{"id":"cdbdfa57","colab":{"base_uri":"https://localhost:8080/"},"outputId":"8b7e081c-1290-4312-d82d-a2ef700014bd","executionInfo":{"status":"ok","timestamp":1690474387253,"user_tz":180,"elapsed":31379,"user":{"displayName":"Federico Cutraro","userId":"17057351904426812022"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["\n","Dimensions: (time: 1, y: 370, x: 280)\n","Coordinates:\n"," Lambert_Conformal float32 ...\n"," * time (time) datetime64[ns] 2022-04-01T12:00:00\n"," lat (y, x) float64 -56.0 -56.0 -56.0 ... -19.1 -19.1 -19.1\n"," lon (y, x) float64 -76.0 -75.9 -75.8 ... -48.3 -48.2 -48.1\n","Dimensions without coordinates: y, x\n","Data variables:\n"," PP (time, y, x) float32 0.001074 0.001887 ... 0.0 0.0\n"," T2 (time, y, x) float32 5.486 5.433 5.269 ... 23.87 22.85\n"," HR2 (time, y, x) float32 85.47 86.79 87.88 ... 62.78 66.72\n"," dirViento10 (time, y, x) float32 290.7 290.4 289.0 ... 91.19 96.44\n"," magViento10 (time, y, x) float32 12.31 11.37 10.67 ... 5.078 4.127\n","Attributes: (12/20)\n"," title: Python PostProcessing for SMN WRF-ARW Deterministic SFC\n"," institution: Servicio Meteorologico Nacional\n"," source: OUTPUT FROM WRF V4.0 MODEL\n"," start_lat: -54.386837\n"," start_lon: -94.33081\n"," end_lat: -11.645958\n"," ... ...\n"," DX: 4000.0\n"," DY: 4000.0\n"," START_DATE: 2022-04-01_00:00:00\n"," Conventions: CF-1.8\n"," NCO: netCDF Operators version 4.7.5 (Homepage = http://nco.sf....\n"," regrid_method: bilinear\n"]}],"source":["regridder = xe.Regridder(ds, new_grid, 'bilinear')\n","ds_interpolated = regridder(ds, keep_attrs = True)\n","print(ds_interpolated)"]}],"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.11"},"colab":{"provenance":[]}},"nbformat":4,"nbformat_minor":5}