{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sam Rabin's utility example notebook for 1-d files\n", "\n", "Contains code to show example uses of the functions I add to utils.py which are designed to work with 1-dimensional (i.e., not lat-lon gridded) CTSM output data.\n", "\n", "Questions or comments? Email me: sam dot rabin at gmail dot com." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define useful variables\n", "\n", "You will need to customize these to work with your system and data." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Your path to ctsm_py directory (i.e., where utils.py lives)\n", "my_ctsm_python_gallery = \"/Users/sam/Documents/git_repos/ctsm_python_gallery_myfork/ctsm_py/\"\n", "\n", "# Directory where input file(s) can be found\n", "indir = \"/Volumes/Reacher/CESM_runs/f10_f10_mg37/\"\n", "\n", "# Either the name of a file within $indir, or a pattern that will return a list of files.\n", "pattern = \"*h1.*-01-01-00000.nc\"\n", "\n", "# List of variables to import from file(s) in $indir matching $pattern. Additional variables will be imported as necessary if they will be useful in gridding any of these. So, e.g., since CPHASE \n", "myVars = [\"CPHASE\", \\\n", " \"GDDHARV\", \n", " \"GDDPLANT\", \n", " \"GPP\", \n", " \"GRAINC_TO_FOOD\", \n", " \"NPP\", \n", " \"TLAI\", \n", " \"TOTVEGC\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Import CTSM utils module" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import sys\n", "sys.path.append(my_ctsm_python_gallery)\n", "import utils" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Import a dataset.\n", "\n", "- Set `myVars=None` to import all variables.\n", "- Currently, the `myVegtypes` argument will import only patches with vegetation types that are managed crops. Set `myVegTypes=None` to import all patches. You can also set `myVegTypes=some_list` to import only patches with any of some arbitrary list of vegetation types." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
<xarray.Dataset>\n", "Dimensions: (patch: 1376, levgrnd: 25, levsoi: 20, levlak: 10, levdcmp: 25, time: 762, lon: 24, lat: 19, ivt: 79)\n", "Coordinates:\n", " * patch (patch) int64 547 548 549 550 ... 4716 4733 4734\n", " * levgrnd (levgrnd) float32 0.01 0.04 0.09 ... 28.87 42.0\n", " * levsoi (levsoi) float32 0.01 0.04 0.09 ... 5.95 6.94 8.03\n", " * levlak (levlak) float32 0.05 0.6 2.1 ... 25.6 34.33 44.78\n", " * levdcmp (levdcmp) float32 0.01 0.04 0.09 ... 28.87 42.0\n", " * time (time) object 2000-01-01 00:00:00 ... 2002-02-01...\n", " * lon (lon) float32 0.0 15.0 30.0 ... 315.0 330.0 345.0\n", " * lat (lat) float32 -90.0 -80.0 -70.0 ... 70.0 80.0 90.0\n", " * ivt (ivt) int64 0 1 2 3 4 5 6 ... 72 73 74 75 76 77 78\n", "Data variables: (12/24)\n", " patches1d_lon (patch) float64 dask.array<chunksize=(1376,), meta=np.ndarray>\n", " patches1d_lat (patch) float64 dask.array<chunksize=(1376,), meta=np.ndarray>\n", " patches1d_ixy (patch) float64 dask.array<chunksize=(1376,), meta=np.ndarray>\n", " patches1d_jxy (patch) float64 dask.array<chunksize=(1376,), meta=np.ndarray>\n", " patches1d_gi (patch) float64 dask.array<chunksize=(1376,), meta=np.ndarray>\n", " patches1d_li (patch) float64 dask.array<chunksize=(1376,), meta=np.ndarray>\n", " ... ...\n", " GRAINC_TO_FOOD (time, patch) float32 dask.array<chunksize=(365, 1376), meta=np.ndarray>\n", " NPP (time, patch) float32 dask.array<chunksize=(365, 1376), meta=np.ndarray>\n", " TLAI (time, patch) float32 dask.array<chunksize=(365, 1376), meta=np.ndarray>\n", " TOTVEGC (time, patch) float32 dask.array<chunksize=(365, 1376), meta=np.ndarray>\n", " vegtype_str (ivt) <U35 'not_vegetated' ... 'irrigated_tropic...\n", " patches1d_itype_veg_str (patch) <U35 'temperate_corn' ... 'rice'\n", "Attributes: (12/99)\n", " title: CLM History file information\n", " comment: NOTE: None of the variables are wei...\n", " Conventions: CF-1.0\n", " history: created on 10/19/21 16:32:21\n", " source: Community Terrestrial Systems Model\n", " hostname: cheyenne\n", " ... ...\n", " cft_irrigated_switchgrass: 60\n", " cft_tropical_corn: 61\n", " cft_irrigated_tropical_corn: 62\n", " cft_tropical_soybean: 63\n", " cft_irrigated_tropical_soybean: 64\n", " time_period_freq: day_1
array([ 547, 548, 549, ..., 4716, 4733, 4734])
array([1.000000e-02, 4.000000e-02, 9.000000e-02, 1.600000e-01, 2.600000e-01,\n", " 4.000000e-01, 5.800000e-01, 8.000000e-01, 1.060000e+00, 1.360000e+00,\n", " 1.700000e+00, 2.080000e+00, 2.500000e+00, 2.990000e+00, 3.580000e+00,\n", " 4.270000e+00, 5.060000e+00, 5.950000e+00, 6.940000e+00, 8.030000e+00,\n", " 9.795000e+00, 1.332777e+01, 1.948313e+01, 2.887072e+01, 4.199844e+01],\n", " dtype=float32)
array([0.01, 0.04, 0.09, 0.16, 0.26, 0.4 , 0.58, 0.8 , 1.06, 1.36, 1.7 , 2.08,\n", " 2.5 , 2.99, 3.58, 4.27, 5.06, 5.95, 6.94, 8.03], dtype=float32)
array([ 0.05 , 0.6 , 2.1 , 4.6 , 8.1 , 12.6 , 18.6 , 25.6 , 34.325,\n", " 44.775], dtype=float32)
array([1.000000e-02, 4.000000e-02, 9.000000e-02, 1.600000e-01, 2.600000e-01,\n", " 4.000000e-01, 5.800000e-01, 8.000000e-01, 1.060000e+00, 1.360000e+00,\n", " 1.700000e+00, 2.080000e+00, 2.500000e+00, 2.990000e+00, 3.580000e+00,\n", " 4.270000e+00, 5.060000e+00, 5.950000e+00, 6.940000e+00, 8.030000e+00,\n", " 9.795000e+00, 1.332777e+01, 1.948313e+01, 2.887072e+01, 4.199844e+01],\n", " dtype=float32)
array([cftime.DatetimeNoLeap(2000, 1, 1, 0, 0, 0, 0, has_year_zero=True),\n", " cftime.DatetimeNoLeap(2000, 1, 2, 0, 0, 0, 0, has_year_zero=True),\n", " cftime.DatetimeNoLeap(2000, 1, 3, 0, 0, 0, 0, has_year_zero=True), ...,\n", " cftime.DatetimeNoLeap(2002, 1, 30, 0, 0, 0, 0, has_year_zero=True),\n", " cftime.DatetimeNoLeap(2002, 1, 31, 0, 0, 0, 0, has_year_zero=True),\n", " cftime.DatetimeNoLeap(2002, 2, 1, 0, 0, 0, 0, has_year_zero=True)],\n", " dtype=object)
array([ 0., 15., 30., 45., 60., 75., 90., 105., 120., 135., 150., 165.,\n", " 180., 195., 210., 225., 240., 255., 270., 285., 300., 315., 330., 345.],\n", " dtype=float32)
array([-90., -80., -70., -60., -50., -40., -30., -20., -10., 0., 10., 20.,\n", " 30., 40., 50., 60., 70., 80., 90.], dtype=float32)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,\n", " 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,\n", " 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,\n", " 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,\n", " 72, 73, 74, 75, 76, 77, 78])
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
array([17, 18, 19, ..., 61, 19, 61])
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
\n",
"
| \n",
" \n", " \n", " | \n", "
array(['not_vegetated', 'needleleaf_evergreen_temperate_tree',\n", " 'needleleaf_evergreen_boreal_tree',\n", " 'needleleaf_deciduous_boreal_tree',\n", " 'broadleaf_evergreen_tropical_tree',\n", " 'broadleaf_evergreen_temperate_tree',\n", " 'broadleaf_deciduous_tropical_tree',\n", " 'broadleaf_deciduous_temperate_tree',\n", " 'broadleaf_deciduous_boreal_tree', 'broadleaf_evergreen_shrub',\n", " 'broadleaf_deciduous_temperate_shrub',\n", " 'broadleaf_deciduous_boreal_shrub', 'c3_arctic_grass',\n", " 'c3_non-arctic_grass', 'c4_grass', 'unmanaged_c3_crop',\n", " 'unmanaged_c3_irrigated', 'temperate_corn',\n", " 'irrigated_temperate_corn', 'spring_wheat',\n", " 'irrigated_spring_wheat', 'winter_wheat', 'irrigated_winter_wheat',\n", " 'soybean', 'irrigated_soybean', 'barley', 'irrigated_barley',\n", " 'winter_barley', 'irrigated_winter_barley', 'rye', 'irrigated_rye',\n", " 'winter_rye', 'irrigated_winter_rye', 'cassava',\n", " 'irrigated_cassava', 'citrus', 'irrigated_citrus', 'cocoa',\n", " 'irrigated_cocoa', 'coffee', 'irrigated_coffee', 'cotton',\n", " 'irrigated_cotton', 'datepalm', 'irrigated_datepalm',\n", " 'foddergrass', 'irrigated_foddergrass', 'grapes',\n", " 'irrigated_grapes', 'groundnuts', 'irrigated_groundnuts', 'millet',\n", " 'irrigated_millet', 'oilpalm', 'irrigated_oilpalm', 'potatoes',\n", " 'irrigated_potatoes', 'pulses', 'irrigated_pulses', 'rapeseed',\n", " 'irrigated_rapeseed', 'rice', 'irrigated_rice', 'sorghum',\n", " 'irrigated_sorghum', 'sugarbeet', 'irrigated_sugarbeet',\n", " 'sugarcane', 'irrigated_sugarcane', 'sunflower',\n", " 'irrigated_sunflower', 'miscanthus', 'irrigated_miscanthus',\n", " 'switchgrass', 'irrigated_switchgrass', 'tropical_corn',\n", " 'irrigated_tropical_corn', 'tropical_soybean',\n", " 'irrigated_tropical_soybean'], dtype='<U35')
array(['temperate_corn', 'irrigated_temperate_corn', 'spring_wheat', ...,\n", " 'rice', 'spring_wheat', 'rice'], dtype='<U35')
<xarray.DataArray (time: 762, patch: 1376)>\n", "array([[2., 2., 3., ..., 4., 4., 4.],\n", " [2., 2., 3., ..., 4., 4., 4.],\n", " [2., 2., 3., ..., 4., 4., 4.],\n", " ...,\n", " [2., 2., 3., ..., 4., 4., 4.],\n", " [2., 2., 3., ..., 4., 4., 4.],\n", " [2., 2., 3., ..., 4., 4., 4.]], dtype=float32)\n", "Coordinates:\n", " * time (time) object 2000-01-01 00:00:00 ... 2002-02-01 00:00:00\n", " * patch (patch) int64 547 548 549 550 573 574 ... 4625 4715 4716 4733 4734
array([[2., 2., 3., ..., 4., 4., 4.],\n", " [2., 2., 3., ..., 4., 4., 4.],\n", " [2., 2., 3., ..., 4., 4., 4.],\n", " ...,\n", " [2., 2., 3., ..., 4., 4., 4.],\n", " [2., 2., 3., ..., 4., 4., 4.],\n", " [2., 2., 3., ..., 4., 4., 4.]], dtype=float32)
array([cftime.DatetimeNoLeap(2000, 1, 1, 0, 0, 0, 0, has_year_zero=True),\n", " cftime.DatetimeNoLeap(2000, 1, 2, 0, 0, 0, 0, has_year_zero=True),\n", " cftime.DatetimeNoLeap(2000, 1, 3, 0, 0, 0, 0, has_year_zero=True), ...,\n", " cftime.DatetimeNoLeap(2002, 1, 30, 0, 0, 0, 0, has_year_zero=True),\n", " cftime.DatetimeNoLeap(2002, 1, 31, 0, 0, 0, 0, has_year_zero=True),\n", " cftime.DatetimeNoLeap(2002, 2, 1, 0, 0, 0, 0, has_year_zero=True)],\n", " dtype=object)
array([ 547, 548, 549, ..., 4716, 4733, 4734])