{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Create a cdo / paraview compatible grid file from a raw geos file\n", "=================================================================\n", "\n", "Copyright 2021 Florian Ziemen .\n", "This program is free software: you can redistribute it and/or modify it under the terms of the BSD-3-Clause license (see bottom for details)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import netCDF4 as nc\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "infile = nc.Dataset(\"geos.nc\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "vars = infile.variables" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "corner_lons = vars[\"corner_lons\"]\n", "corner_lats = vars[\"corner_lats\"]\n", "xlen = corner_lons.shape[2] - 1\n", "ylen = corner_lons.shape[1] - 1\n", "lats = vars[\"lats\"]\n", "lons = vars[\"lons\"]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "clon_bnds = np.array(\n", " (\n", " corner_lons[:, :-1, 1:],\n", " corner_lons[:, 1:, 1:],\n", " corner_lons[:, 1:, :-1],\n", " corner_lons[:, :-1, :-1],\n", " )\n", ").transpose(1, 2, 3, 0)\n", "clat_bnds = np.array(\n", " (\n", " corner_lats[:, :-1, 1:],\n", " corner_lats[:, 1:, 1:],\n", " corner_lats[:, 1:, :-1],\n", " corner_lats[:, :-1, :-1],\n", " )\n", ").transpose(1, 2, 3, 0)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "try:\n", " ds.close()\n", "except:\n", " pass\n", "ds = nc.Dataset(\"geos_grid.nc\", \"w\", format=\"NETCDF4\")\n", "nv = ds.createDimension(\"Ydim\", ylen)\n", "nv = ds.createDimension(\"Xdim\", xlen)\n", "nv = ds.createDimension(\"nf\", 6)\n", "nv = ds.createDimension(\"nv\", 4)\n", "clon = ds.createVariable(\"clon\", \"f8\", (\"nf\", \"Ydim\", \"Xdim\"))\n", "clat = ds.createVariable(\"clat\", \"f8\", (\"nf\", \"Ydim\", \"Xdim\"))\n", "lml = ds.createVariable(\"lml\", \"f4\", (\"nf\", \"Ydim\", \"Xdim\"))\n", "fclon_bnds = ds.createVariable(\"clon_bnds\", \"f8\", (\"nf\", \"Ydim\", \"Xdim\", \"nv\"))\n", "fclat_bnds = ds.createVariable(\"clat_bnds\", \"f8\", (\"nf\", \"Ydim\", \"Xdim\", \"nv\"))\n", "for x in [clon, clat, lml]:\n", " x.units = \"radian\"\n", " x.coordinates = \"clat clon\"\n", "clon.bounds = \"clon_bnds\"\n", "clat.bounds = \"clat_bnds\"\n", "clon.standard_name = \"longitude\"\n", "clat.standard_name = \"latitude\"\n", "\n", "clon[:] = lons[:] * np.pi / 180.0\n", "clat[:] = lats[:] * np.pi / 180.0\n", "lml[:] = clat[:] * clon[:]\n", "fclon_bnds[:] = clon_bnds[:] * np.pi / 180\n", "fclat_bnds[:] = clat_bnds[:] * np.pi / 180\n", "ds.close()" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[305.02597 305.02597 305. 305. ]\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.plot(clon_bnds[0, 0], clat_bnds[0, 0])\n", "print(clon_bnds[0, 0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n", "\n", "1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n", "\n", "2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n", "\n", "3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n", "\n", "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ] } ], "metadata": { "jupytext": { "formats": "ipynb,md:myst" }, "kernelspec": { "display_name": "Python 3", "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.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }