Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Goals\n",
"This notebook explains how to open a netcdf file, read metadata, and read variables in R. \n",
"- 'RNetCDF' library is used. More information is available at # https://github.com/mjwoods/RNetCDF\n",
"- Man pages for RNetCDF is available at https://rdrr.io/cran/RNetCDF/man/\n",
"\n",
"## Prerequisite\n",
"Make sure you have access to the directory where netCDF files exist. \n",
"- This notebook reads netcdf files stored in /depot/ssg/geoshare/data/GLASS/INFEWS/"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] \"/depot/ssg/geoshare/data/GLASS/INFEWS/DOE_Flood/historical/MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET/daily/daily/wbm_1950.nc\"\n",
"[1] 65536\n",
"attr(,\"handle_ptr\")\n",
"<pointer: 0x445ae60>\n",
"attr(,\"class\")\n",
"[1] \"NetCDF\"\n"
]
}
],
"source": [
"library('RNetCDF')\n",
"\n",
"\n",
"# set path and filename\n",
"ncpath <- \"/depot/ssg/geoshare/data/GLASS/INFEWS/DOE_Flood/historical/MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET/daily/daily/\"\n",
"ncname <- \"wbm_1950\"\n",
"ncfname <- paste(ncpath, ncname, \".nc\", sep=\"\")\n",
"print(ncfname)\n",
"\n",
"# open a netCDF file\n",
"ncin <- open.nc(ncfname, write=FALSE)\n",
"print(ncin)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## print.nc: Print Summary Information About a NetCDF Dataset"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"netcdf netcdf4 {\n",
"dimensions:\n",
"\ttime = UNLIMITED ; // (365 currently)\n",
"\tlat = 425 ;\n",
"\tlon = 807 ;\n",
"variables:\n",
"\tNC_INT time(time) ;\n",
"\t\tNC_CHAR time:long_name = \"Time\" ;\n",
"\t\tNC_CHAR time:units = \"days since 1900-01-01\" ;\n",
"\t\tNC_CHAR time:calendar = \"standard\" ;\n",
"\t\tNC_CHAR time:resolution = \"daily\" ;\n",
"\tNC_DOUBLE lat(lat) ;\n",
"\t\tNC_CHAR lat:standard_name = \"latitude\" ;\n",
"\t\tNC_CHAR lat:long_name = \"latitude\" ;\n",
"\t\tNC_CHAR lat:units = \"degrees_north\" ;\n",
"\tNC_DOUBLE lon(lon) ;\n",
"\t\tNC_CHAR lon:units = \"degrees_east\" ;\n",
"\t\tNC_CHAR lon:long_name = \"longitude\" ;\n",
"\t\tNC_CHAR lon:standard_name = \"longitude\" ;\n",
"\tNC_CHAR crs ;\n",
"\t\tNC_CHAR crs:srs_ref = \"epsg:4326\" ;\n",
"\t\tNC_CHAR crs:spatial_ref = \"GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]\" ;\n",
"\t\tNC_CHAR crs:GeoTransform = \"-127.83333333333 0.083333333333 0 57.166666666525 0 -0.083333333333\" ;\n",
"\t\tNC_CHAR crs:srs_wkt = \"GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AXIS[\"Latitude\",NORTH],AXIS[\"Longitude\",EAST],AUTHORITY[\"EPSG\",\"4326\"]]\" ;\n",
"\tNC_FLOAT runoff(lon, lat, time) ;\n",
"\t\tNC_FLOAT runoff:_FillValue = -9999 ;\n",
"\t\tNC_CHAR runoff:grid_mapping = \"crs\" ;\n",
"\t\tNC_CHAR runoff:long_name = \"Runoff\" ;\n",
"\t\tNC_FLOAT runoff:missing_value = -9999 ;\n",
"\t\tNC_CHAR runoff:reference_area = \"full grid cell area\" ;\n",
"\t\tNC_CHAR runoff:units = \"mm/day\" ;\n",
"\tNC_FLOAT discharge(lon, lat, time) ;\n",
"\t\tNC_CHAR discharge:grid_mapping = \"crs\" ;\n",
"\t\tNC_CHAR discharge:long_name = \"Discharge by LRR routing\" ;\n",
"\t\tNC_FLOAT discharge:missing_value = -9999 ;\n",
"\t\tNC_CHAR discharge:units = \"m3/sec\" ;\n",
"\tNC_FLOAT baseflow(lon, lat, time) ;\n",
"\t\tNC_CHAR baseflow:grid_mapping = \"crs\" ;\n",
"\t\tNC_CHAR baseflow:long_name = \"Baseflow\" ;\n",
"\t\tNC_FLOAT baseflow:missing_value = -9999 ;\n",
"\t\tNC_CHAR baseflow:reference_area = \"full grid cell area\" ;\n",
"\t\tNC_CHAR baseflow:units = \"mm/day\" ;\n",
"\tNC_FLOAT airT(lon, lat, time) ;\n",
"\t\tNC_CHAR airT:grid_mapping = \"crs\" ;\n",
"\t\tNC_CHAR airT:long_name = \"Temperature\" ;\n",
"\t\tNC_FLOAT airT:missing_value = -9999 ;\n",
"\t\tNC_CHAR airT:units = \"deg C\" ;\n",
"\tNC_FLOAT precip(lon, lat, time) ;\n",
"\t\tNC_CHAR precip:grid_mapping = \"crs\" ;\n",
"\t\tNC_CHAR precip:long_name = \"Precipitation\" ;\n",
"\t\tNC_FLOAT precip:missing_value = -9999 ;\n",
"\t\tNC_CHAR precip:units = \"mm/day\" ;\n",
"\n",
"// global attributes:\n",
"\t\tNC_CHAR :Conventions = \"CF-1.6\" ;\n",
"\t\tNC_CHAR :history = \"Created on 2021-04-18 by Danielle Grogan (Danielle.Grogan@unh.edu)\" ;\n",
"\t\tNC_CHAR :NetCDF_version = \"NetCDF.4.21\" ;\n",
"\t\tNC_CHAR :institution = \"Water Systems Analysis Group (WSAG), the University of New Hampshire (UNH)\" ;\n",
"\t\tNC_CHAR :FilePath = \"/net/nfs/squam/raid/data/WBM_TrANS/DOE_Flood/historical/MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET/daily/wbm_1950.nc\" ;\n",
"\t\tNC_CHAR :title = \"WBM-TrANS data\" ;\n",
"\t\tNC_CHAR :Projection = \"epsg:4326\" ;\n",
"\t\tNC_CHAR :WBM_VERSION = \"21.3.2\" ;\n",
"\t\tNC_CHAR :PDL_VERSION = \"2.019\" ;\n",
"\t\tNC_CHAR :PERL_VERSION = \"5.026001\" ;\n",
"\t\tNC_CHAR :GDAL_VERSION = \"GDAL 3.0.0, released 2019/05/05\" ;\n",
"\t\tNC_CHAR :WBM_RUN_ID = \"flood_MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET_historical\" ;\n",
"\t\tNC_CHAR :WBM_RUN_Init = \"/net/nfs/zero/data3/WBM_TrANS/wbm_run_files/Projects/DOE_Flood/flood_MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET_historical.init\" ;\n",
"\t\tNC_CHAR :WBM_Start_time = \"2021-04-17 at 10:30:32\" ;\n",
"\t\tNC_CHAR :SYSTEM_NAME = \"yukon\" ;\n",
"\t\tNC_CHAR :Script_dir = \"/net/home/eos/dgrogan/wbm_repos/wbm_trans/\" ;\n",
"\t\tNC_CHAR :runIO_Comment = \"CONUS flood simulations for DOE project with Purdue\" ;\n",
"\t\tNC_CHAR :runIO_Project = \"DOE\" ;\n",
"\t\tNC_CHAR :runIO_MT_Code_Name = \"{MT_ID => 'flood_MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET_historical',Output_dir => '/net/nfs/squam/raid/data/WBM_TrANS/DOE_Flood/historical/MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET/',Run_End => '2005-12-31',Run_Start => '1950-01-01'}\" ;\n",
"\t\tNC_CHAR :runIO_spinup_state_ID = \"\" ;\n",
"\t\tNC_CHAR :runIO_Spinup_Loops = \"6\" ;\n",
"\t\tNC_CHAR :runIO_Spinup_Start = \"1950-01-01\" ;\n",
"\t\tNC_CHAR :runIO_Spinup_End = \"1954-12-31\" ;\n",
"\t\tNC_CHAR :runIO_Output_vars = \"runoff discharge baseflow airT precip\" ;\n",
"\t\tNC_CHAR :runIO_MT_Precip = \"{Primary => 'prec.hist.MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET_d'}\" ;\n",
"\t\tNC_CHAR :runIO_precipFraction = \"\" ;\n",
"\t\tNC_CHAR :runIO_MT_airT = \"{Primary => 'tmean.hist.MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET_d'}\" ;\n",
"\t\tNC_CHAR :runIO_Network = \"/net/nfs/zero/data3/WBM_TrANS/data/hyd_5m_CONUS_mississippi_patched.asc\" ;\n",
"\t\tNC_CHAR :runIO_Routing = \"LRR\" ;\n",
"\t\tNC_CHAR :runIO_wbmParam = \"\" ;\n",
"\t\tNC_CHAR :runIO_ConnectivityNetwork = \"\" ;\n",
"\t\tNC_CHAR :runIO_Reservoirs = \"/net/nfs/zero/home/WBM_TrANS/data_init_files/dams/HydConDams_NAmer_v0.2c.init\" ;\n",
"\t\tNC_CHAR :runIO_soilAWCapacity = \"NETCDF:/net/nfs/zero/home/WBM_TrANS/data/HarmSoilData/Harmonized-SoilMap_AWC-mm_6min.nc:Band1\" ;\n",
"\t\tNC_CHAR :runIO_FieldCap = \"\" ;\n",
"\t\tNC_CHAR :runIO_WiltingPoint = \"\" ;\n",
"\t\tNC_CHAR :runIO_rootingDepth = \"NETCDF:/net/nfs/zero/home/WBM_TrANS/data/Global_Terrain_RootDepthWBM_LTXXXX_30min.nc:STNetwork\" ;\n",
"\t\tNC_CHAR :runIO_PET = \"\" ;\n",
"\t\tNC_CHAR :runIO_MT_windU = \"\" ;\n",
"\t\tNC_CHAR :runIO_MT_windV = \"\" ;\n",
"\t\tNC_CHAR :runIO_MT_cloudFr = \"\" ;\n",
"\t\tNC_CHAR :runIO_MT_humidity = \"\" ;\n",
"\t\tNC_CHAR :runIO_MT_albedo = \"\" ;\n",
"\t\tNC_CHAR :runIO_airT_yc = \"\" ;\n",
"\t\tNC_CHAR :runIO_openWaterEvap = \"\" ;\n",
"\t\tNC_CHAR :runIO_Glaciers = \"\" ;\n",
"\t\tNC_CHAR :runIO_Aquifers = \"\" ;\n",
"\t\tNC_CHAR :runIO_Springs = \"\" ;\n",
"\t\tNC_CHAR :runIO_snowBands = \"\" ;\n",
"\t\tNC_CHAR :runIO_lapseDownscale = \"\" ;\n",
"\t\tNC_CHAR :runIO_DIN = \"\" ;\n",
"\t\tNC_CHAR :runIO_Runoff_mask = \"\" ;\n",
"\t\tNC_CHAR :runIO_Impervious = \"/net/nfs/ipswich/raid/atlas/data/impervious/imp.asc\" ;\n",
"\t\tNC_CHAR :runIO_openWater = \"{MaskDataset => '/net/nfs/ipswich/raid/atlas/data/UMD_landcover/zero_6min.tif',openWaterMaskValue => 0}\" ;\n",
"\t\tNC_CHAR :runIO_canopyHt = \"\" ;\n",
"\t\tNC_CHAR :runIO_MT_LAI = \"\" ;\n",
"\t\tNC_CHAR :runIO_WaterDemand = \"\" ;\n",
"\t\tNC_CHAR :runIO_landCollapse = \"average\" ;\n",
"\t\tNC_CHAR :runIO_LandCover = \"\" ;\n",
"\t\tNC_CHAR :runIO_Irrigation = \"{CropAreaFrac => '/net/nfs/squam/raid/data/GLEAM/GAEZ_crop_frac/GAEZ_Pasture_Total.tif',CropParFile => '/net/nfs/zero/data3/WBM_TrANS/spreadsheets/GAEZ-2010_CropParameters_Pasture.csv',ExtraCoeff => 1,IrrEfficiency => 'NETCDF:/net/nfs/zero/data3/WBM_TrANS/data/Global_Crops_IrrEfficiencyGlobalExtent_30min.nc:IrrEfficiency',Order => 1,ReturnCoeff => '0.5',SW_GW_ratio => 'NETCDF:/net/nfs/zero/data3/WBM_TrANS/data/FAO_SWGW_ratio.nc:swgwRatio',SearchDist => 100,ricePaddyDepth => 50,ricePercolation => 'NETCDF:/net/nfs/zero/data3/WBM_TrANS/data/RicePercolationRate.nc:RicePercolationRate'}\" ;\n",
"\t\tNC_CHAR :runIO_WM_mod_precip = \"\" ;\n",
"\t\tNC_CHAR :runIO_WM_obs_precip = \"\" ;\n",
"\t\tNC_CHAR :runIO_WM_mod_airT = \"\" ;\n",
"\t\tNC_CHAR :runIO_WM_obs_airT = \"\" ;\n",
"\t\tNC_CHAR :runIO_PostProcessing = \"{Forks => 8,Polygon_Aggregation => '',Run => '',TA_multi_year_start => '',TA_multi_year_timestep => '',Temporal_Aggregation => ''}\" ;\n",
"\t\tNC_CHAR :runIO_WaterRights = \"\" ;\n",
"\t\tNC_CHAR :runIO_USGS = \"\" ;\n",
"\t\tNC_CHAR :runIO_spool = \"/net/nfs/yukon/WBM_spool/hyd_5m_CONUS_mississippi_patched/\" ;\n",
"\t\tNC_CHAR :runIO_Output_TS = \"daily\" ;\n",
"\t\tNC_CHAR :runIO_Run_Start = \"1950-01-01\" ;\n",
"\t\tNC_CHAR :runIO_Run_End = \"2005-12-31\" ;\n",
"\t\tNC_CHAR :runIO_Output_dir = \"/net/nfs/squam/raid/data/WBM_TrANS/DOE_Flood/historical/MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET\" ;\n",
"\t\tNC_CHAR :runIO_Input_MT = \"/net/nfs/yukon/raid0/data/RIMS/MagicTable/CGI_Names.csv\" ;\n",
"\t\tNC_CHAR :runIO_Output_MT = \"/net/nfs/squam/raid/data/WBM_TrANS/DOE_Flood/historical/MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET/flood_MPI-ESM-LR.WRF.day.NAM-22i.mbcn-gridMET_historical.MT.csv\" ;\n",
"}\n"
]
}
],
"source": [
"print.nc(ncin)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<dl>\n",
"\t<dt>$ndims</dt>\n",
"\t\t<dd>3</dd>\n",
"\t<dt>$nvars</dt>\n",
"\t\t<dd>9</dd>\n",
"\t<dt>$ngatts</dt>\n",
"\t\t<dd>73</dd>\n",
"\t<dt>$unlimdimid</dt>\n",
"\t\t<dd>0</dd>\n",
"\t<dt>$format</dt>\n",
"\t\t<dd>'netcdf4'</dd>\n",
"\t<dt>$libvers</dt>\n",
"\t\t<dd>'4.5.0 of Apr 26 2020 03:53:51 $'</dd>\n",
"</dl>\n"
],
"text/latex": [
"\\begin{description}\n",
"\\item[\\$ndims] 3\n",
"\\item[\\$nvars] 9\n",
"\\item[\\$ngatts] 73\n",
"\\item[\\$unlimdimid] 0\n",
"\\item[\\$format] 'netcdf4'\n",
"\\item[\\$libvers] '4.5.0 of Apr 26 2020 03:53:51 \\$'\n",
"\\end{description}\n"
],
"text/markdown": [
"$ndims\n",
": 3\n",
"$nvars\n",
": 9\n",
"$ngatts\n",
": 73\n",
"$unlimdimid\n",
": 0\n",
"$format\n",
": 'netcdf4'\n",
"$libvers\n",
": '4.5.0 of Apr 26 2020 03:53:51 $'\n",
"\n",
"\n"
],
"text/plain": [
"$ndims\n",
"[1] 3\n",
"\n",
"$nvars\n",
"[1] 9\n",
"\n",
"$ngatts\n",
"[1] 73\n",
"\n",
"$unlimdimid\n",
"[1] 0\n",
"\n",
"$format\n",
"[1] \"netcdf4\"\n",
"\n",
"$libvers\n",
"[1] \"4.5.0 of Apr 26 2020 03:53:51 $\"\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## Inquire about the dataset\n",
"file.inq.nc(ncin)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## dim.inq.nc: Inquire About a NetCDF Dimension\n",
"\n",
"This function returns information about a NetCDF dimension. Information about a dimension include its name, its ID, its length and a flag if it is the unlimited dimension of this NetCDF dataset, if any. The length of the unlimited dimension, if any, is the number of records written so far."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"$id\n",
"[1] 0\n",
"\n",
"$name\n",
"[1] \"time\"\n",
"\n",
"$length\n",
"[1] 365\n",
"\n",
"$unlim\n",
"[1] TRUE\n",
"\n"
]
}
],
"source": [
"## Inquire about the dimensions\n",
"print(dim.inq.nc(ncin, 0))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Create output directory if not exist\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] \"Dir already exists!\"\n"
]
}
],
"source": [
"## Provide the dir name(i.e sub dir) that you want to create under main dir:\n",
"main_dir <- \".\"\n",
"sub_dir <- \"OUTPUT\"\n",
"output_dir <- file.path(main_dir, sub_dir)\n",
"\n",
"if (!dir.exists(output_dir)){\n",
" dir.create(output_dir)\n",
"} else {\n",
" print(\"Dir already exists!\")\n",
"}\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Write to a file \n",
"\n",
"We can redirect the standard output to another file-like object by changing the stdout object. However, for convenience we can do this directly from within the print() function by specifying the output location with the file parameter"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1] \"./OUTPUT/out.r.txt\"\n"
]
}
],
"source": [
"filename <- 'out.r.txt'\n",
"output_file <- paste(output_dir, filename, sep='/' )\n",
"print(output_file)\n",
"# write to a file\n",
"# Save the print(nc) dump to a text file\n",
"{\n",
" sink(output_file)\n",
" print.nc(ncin)\n",
" sink()\n",
"}\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Cleanup"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"close.nc(ncin)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "R 4.0.0",
"language": "R",
"name": "ir-4.0.0"
},
"language_info": {
"codemirror_mode": "r",
"file_extension": ".r",
"mimetype": "text/x-r-source",
"name": "R",
"pygments_lexer": "r",
"version": "4.0.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}