{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Read Fortran Binary Data Files" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although most of the data files I work with in atmosphere, ocean, and climate science are in self describing formats, such as netCDF, grib, etc, I still sometimes encounter binary data files written in fortran direct or sequential access. I want to be able to read in these files and convert them to `xarray.Dataset` so I can use all the `xarray` methods and tools to process them.\n", "\n", "This notebook will demonstrate how to read a fortran binary sequential access file and convert it to an `xarray.Dataset`\n", "\n", "Thanks to Phil Pegion at University of Colorado/CIRES and NOAA/PSL for showing me how to do this." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I was given the location of the following file from a colleague (Thanks David Straus!). It consists of EOFs (spatial patterns of variability) based on anomalies of 500 hPa geopotential height and 250 hPa zonal winds. The file is located here on the COLA servers:\n", "```/project/mjo/straus/ERAI_T42/eofs/DJF/5day_means/eofs_Z500U250_PNA_DJF_T42.1980-2014.dat```\n", "\n", "A [GrADS](http://cola.gmu.edu/grads/) .ctl file was provided with the data. It has the important metadata that will be needed to know how to read the file. Here are its contents:\n", "\n", "```\n", "dset /project/mjo/straus/ERAI_T42/eofs/DJF/5day_means/eofs_Z500U250_PNA_DJF_T42.1980-2014.dat\n", "undef -9999.9\n", "title T42 gridded Minerva EOFs config Z500U250_PNA_DJF_T42\n", "options sequential yrev \n", "xdef 128 linear 0.0 2.8125\n", "ydef 64 LEVELS -87.86 -85.10 -82.31 -79.53 -76.74 -73.95 -71.16 -68.37\n", " -65.58 -62.79 -60.00 -57.21 -54.42 -51.63 -48.84 -46.04 -43.25 -40.46\n", " -37.67 -34.88 -32.09 -29.30 -26.51 -23.72 -20.93 -18.14 -15.35 -12.56\n", " -9.77 -6.98 -4.19 -1.40 1.40 4.19 6.98 9.77 12.56 15.35\n", " 18.14 20.93 23.72 26.51 29.30 32.09 34.88 37.67 40.46 43.25\n", " 46.04 48.84 51.63 54.42 57.21 60.00 62.79 65.58 68.37 71.16\n", " 73.95 76.74 79.53 82.31 85.10 87.86\n", "zdef 1 levels 1000\n", "tdef 50 linear 01dec1980 1dy\n", "vars 2\n", "geo 0 9 geo 500\n", "uwn 0 9 geo 250\n", "endvars\n", "```\n", "\n", "The key things to note from the .ctl file are:\n", "* lons = 128, start from 0.0 and increase in increments of 2.8125\n", "* lats = 64 and are specified\n", "* the file has 50 \"times\"; these correspond to 50 EOFs\n", "* there are 2 variables in the file, geo (500 hPa geopotential height) and uwn (250 hPa zonal wind)\n", "* under options, it says sequential, so our file is sequential access. This means that each record has 2 extra INTEGER*4 in it. One at the beginning of the record and one at the end of the record.\n", "* Missing data is indicated with values of -9999.9\n", "\n", "The format of the data file is based on the format that GrADS expects, described [here (http://cola.gmu.edu/grads/gadoc/aboutgriddeddata.html#structure). \n", "\n", "Each record is a grid of all lats and lons. The records are in the following order:\n", "\n", "1. Time 1, geo\n", "2. Time 1, uwn\n", "3. Time 2, geo\n", "4. Time 2, uwn\n", "5. ..." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from array import array\n", "import xarray as xr\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define the path and filename" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "path='/project/mjo/straus/ERAI_T42/eofs/DJF/5day_means/'\n", "fname='eofs_Z500U250_PNA_DJF_T42.1980-2014.dat'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define the dimensions of the data based on the .ctl file" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "nlons=128\n", "nlats=64\n", "neofs=50\n", "nvars=2\n", "missing_value=-9999.9" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define the coordinates of the data based on the .ctl file" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "# Define lats\n", "lats=[-87.86, -85.10, -82.31, -79.53, -76.74, -73.95, -71.16, -68.37, \\\n", " -65.58, -62.79, -60.00, -57.21, -54.42, -51.63, -48.84, -46.04, \\\n", " -43.25, -40.46, -37.67, -34.88, -32.09, -29.30, -26.51, -23.72, \\\n", " -20.93, -18.14, -15.35, -12.56, -9.77, -6.98, -4.19, -1.40, \\\n", " 1.40, 4.19, 6.98, 9.77, 12.56, 15.35, 18.14, 20.93, \\\n", " 23.72, 26.51, 29.30, 32.09, 34.88, 37.67, 40.46, 43.25, \\\n", " 46.04, 48.84, 51.63, 54.42, 57.21, 60.00, 62.79, 65.58, \\\n", " 68.37, 71.16, 73.95, 76.74, 79.53, 82.31, 85.10, 87.86]\n", "\n", "# Yrev in .ctl file indicates lats are reversed\n", "lats=lats[::-1]\n", "\n", "# Define lons\n", "lons=np.arange(128)*2.8125 + 0.0\n", "\n", "# Define times as a pandas date range\n", "eofs=np.arange(neofs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define the length of each record. Be sure to include the 2 extra integers for sequential access." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "recl=(nlons*nlats+2)*4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create empty array to store the data" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "data=np.zeros((neofs,nlats,nlons,nvars))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the data" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "# Open file\n", "luin = open(path+fname,'rb')\n", "\n", "# Loop over all times\n", "for e in range(neofs):\n", " \n", " # Loop over both variables\n", " for v in range(nvars):\n", " \n", " # Read in fortran record in bytes\n", " tmp=luin.read(recl) \n", " \n", " # Convert to single precision (real 32bit)\n", " tmp1=array('f',tmp) \n", " \n", " # Pull out data array (leaving behind fortran control records)for fortran sequential\n", " tmp2=tmp1[1:-1] \n", " \n", " # Create a 2d array (lat x lon) and store it in the data array\n", " data[e,:,:,v]=np.reshape(tmp2,(nlats,nlons)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Extract out our two variables" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "z500=data[:,:,:,0]\n", "u250=data[:,:,:,1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Take care of missing data by setting it to NAN" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "z500[z500<=missing_value]=np.nan\n", "u250[u250<=missing_value]=np.nan" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Put the data into an `xarray.Dataset`" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "# 500 hPa Geopotential Height\n", "z500_ds=xr.DataArray(z500,\n", " coords={'eofnum':eofs,\n", " 'lat':lats,\n", " 'lon': lons},\n", " dims=['eofnum','lat','lon']) \n", "z500_ds=z500_ds.to_dataset(name='z500')\n", "\n", "# 250 hPa Zonal Wind\n", "u250_ds=xr.DataArray(u250,\n", " coords={'eofnum':eofs,\n", " 'lat':lats,\n", " 'lon': lons},\n", " dims=['eofnum','lat','lon']) \n", "u250_ds=u250_ds.to_dataset(name='u250')\n", "\n", "# Merge to have both in the same `xarray.Dataset`\n", "ds=xr.merge([z500_ds,u250_ds])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This dataset has global values, but only contains valid data in a certain region. All other values are marked as missing. So, we will drop missing data for `lat` and `lon` where `all` the data are missing." ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "ds=ds.dropna(dim='lon',how='all').dropna(dim='lat',how='all')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have an `xarray.Dataset` with both variables in it" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", "Show/Hide data repr\n", "\n", "\n", "\n", "\n", "\n", "Show/Hide attributes\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
xarray.Dataset
" ], "text/plain": [ "\n", "Dimensions: (eofnum: 50, lat: 22, lon: 55)\n", "Coordinates:\n", " * eofnum (eofnum) int64 0 1 2 3 4 5 6 7 8 9 ... 41 42 43 44 45 46 47 48 49\n", " * lat (lat) float64 79.53 76.74 73.95 71.16 ... 29.3 26.51 23.72 20.93\n", " * lon (lon) float64 149.1 151.9 154.7 157.5 ... 292.5 295.3 298.1 300.9\n", "Data variables:\n", " z500 (eofnum, lat, lon) float64 -0.002158 -0.002206 ... 0.02298 0.02562\n", " u250 (eofnum, lat, lon) float64 0.001532 0.001246 ... 0.0007635 -0.01382" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see what our data look like" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.contourf(ds['z500'][0,:,:])" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.contourf(ds['u250'][0,:,:])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Write our data out to a netcdf file" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "ds.to_netcdf('eofs.nc')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python (aoes)", "language": "python", "name": "aoes" }, "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.6.10" } }, "nbformat": 4, "nbformat_minor": 4 }