[nco] 01/08: New upstream version 4.7.2

Bas Couwenberg sebastic at debian.org
Thu Jan 25 19:18:44 UTC 2018


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository nco.

commit 0afd562d5a59c5803550b337c17f6b93d133bfb9
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Thu Jan 25 19:52:59 2018 +0100

    New upstream version 4.7.2
---
 CMakeLists.txt            |  121 +-
 bld/Makefile              |    5 +-
 bld/nco.spec              |   11 +-
 bld/nco_dst.pl            |   30 +-
 bm/NCO_bm.pm              |    2 +-
 bm/nco_bm.pl              |    2 +-
 cmake/README.md           |  173 +++
 cmake/bld.bat             |  305 +++++
 cmake/build.bat           |    1 +
 cmake/clone.bat           |   13 +
 cmake/dep.bat             |  122 ++
 cmake/in.nc.txt           | 2760 +++++++++++++++++++++++++++++++++++++++++++++
 cmake/in_grp.nc.txt       |  603 ++++++++++
 configure                 |   20 +-
 configure.ac              |    4 +-
 configure.eg              |  217 ++--
 data/in.cdl               |   27 +-
 data/ncclimo              |  147 +--
 data/ncremap              |  141 ++-
 debian/changelog          |    6 +
 doc/ANNOUNCE              |  141 ++-
 doc/ChangeLog             |   90 ++
 doc/VERSION               |    2 +-
 doc/debian.txt            |  162 +--
 doc/index.shtml           |   63 +-
 doc/nco.texi              |  336 ++++--
 man/ncap.1                |    2 +-
 man/ncap2.1               |    2 +-
 man/ncatted.1             |    2 +-
 man/ncbo.1                |    2 +-
 man/ncclimo.1             |    2 +-
 man/ncecat.1              |    2 +-
 man/nces.1                |    2 +-
 man/ncflint.1             |    2 +-
 man/ncks.1                |    2 +-
 man/nco.1                 |    2 +-
 man/ncpdq.1               |    2 +-
 man/ncra.1                |    2 +-
 man/ncrcat.1              |    2 +-
 man/ncremap.1             |    5 +-
 man/ncrename.1            |    2 +-
 man/ncwa.1                |    2 +-
 src/nco++/Makefile.old    |    2 +-
 src/nco++/fmc_all_cls.cc  |   19 +-
 src/nco++/fmc_all_cls.hh  |    3 +-
 src/nco++/fmc_cls.hh      |    2 +-
 src/nco++/fmc_gsl_cls.cc  |    2 +-
 src/nco++/fmc_gsl_cls.hh  |    2 +-
 src/nco++/libnco++.hh     |    2 +-
 src/nco++/ncap2.cc        |    2 +-
 src/nco++/ncap2_utl.cc    |    2 +-
 src/nco++/ncoGrammer.g    |    2 +-
 src/nco++/nco_gsl.c       |    2 +-
 src/nco++/nco_gsl.h       |    2 +-
 src/nco++/prs_cls.cc      |    2 +-
 src/nco++/prs_cls.hh      |    2 +-
 src/nco++/sdo_utl.cc      |    2 +-
 src/nco++/sdo_utl.hh      |    2 +-
 src/nco/libnco.h          |    2 +-
 src/nco/mpncbo.c          |    2 +-
 src/nco/mpncecat.c        |    2 +-
 src/nco/mpncflint.c       |    2 +-
 src/nco/mpncpdq.c         |    2 +-
 src/nco/mpncra.c          |    2 +-
 src/nco/mpncwa.c          |    2 +-
 src/nco/ncap.c            |    2 +-
 src/nco/ncap.h            |    2 +-
 src/nco/ncap_utl.c        |    2 +-
 src/nco/ncap_yacc.y       |    2 +-
 src/nco/ncatted.c         |    2 +-
 src/nco/ncbo.c            |    2 +-
 src/nco/ncecat.c          |    2 +-
 src/nco/ncflint.c         |    2 +-
 src/nco/ncks.c            |    2 +-
 src/nco/nco.h             |    6 +-
 src/nco/nco_att_utl.c     |    2 +-
 src/nco/nco_att_utl.h     |    2 +-
 src/nco/nco_aux.c         |    2 +-
 src/nco/nco_aux.h         |    2 +-
 src/nco/nco_bnr.c         |    2 +-
 src/nco/nco_bnr.h         |    2 +-
 src/nco/nco_cln_utl.c     |   13 +-
 src/nco/nco_cln_utl.h     |   12 +-
 src/nco/nco_cnf_dmn.c     |    2 +-
 src/nco/nco_cnf_dmn.h     |    2 +-
 src/nco/nco_cnf_typ.c     |    2 +-
 src/nco/nco_cnf_typ.h     |    2 +-
 src/nco/nco_cnk.c         |    2 +-
 src/nco/nco_cnk.h         |    2 +-
 src/nco/nco_cnv_arm.c     |    2 +-
 src/nco/nco_cnv_arm.h     |    2 +-
 src/nco/nco_cnv_csm.c     |    2 +-
 src/nco/nco_cnv_csm.h     |    2 +-
 src/nco/nco_ctl.c         |    4 +-
 src/nco/nco_ctl.h         |    2 +-
 src/nco/nco_dbg.c         |    2 +-
 src/nco/nco_dbg.h         |    2 +-
 src/nco/nco_dmn_utl.c     |    2 +-
 src/nco/nco_dmn_utl.h     |    2 +-
 src/nco/nco_fl_utl.c      |    2 +-
 src/nco/nco_fl_utl.h      |    2 +-
 src/nco/nco_grp_trv.c     |    2 +-
 src/nco/nco_grp_trv.h     |    2 +-
 src/nco/nco_grp_utl.c     |   80 +-
 src/nco/nco_grp_utl.h     |    2 +-
 src/nco/nco_lmt.c         |    2 +-
 src/nco/nco_lmt.h         |    2 +-
 src/nco/nco_lst_utl.c     |    2 +-
 src/nco/nco_lst_utl.h     |    2 +-
 src/nco/nco_md5.c         |    2 +-
 src/nco/nco_md5.h         |    2 +-
 src/nco/nco_mmr.c         |    2 +-
 src/nco/nco_mmr.h         |    2 +-
 src/nco/nco_mpi.h         |    2 +-
 src/nco/nco_msa.c         |    2 +-
 src/nco/nco_msa.h         |    2 +-
 src/nco/nco_mss_val.c     |    2 +-
 src/nco/nco_mss_val.h     |    2 +-
 src/nco/nco_mta.c         |    2 +-
 src/nco/nco_mta.h         |    2 +-
 src/nco/nco_netcdf.c      |   14 +-
 src/nco/nco_netcdf.h      |    7 +-
 src/nco/nco_omp.c         |    2 +-
 src/nco/nco_omp.h         |    2 +-
 src/nco/nco_pck.c         |    2 +-
 src/nco/nco_pck.h         |    2 +-
 src/nco/nco_ppc.c         |    2 +-
 src/nco/nco_ppc.h         |    2 +-
 src/nco/nco_prn.c         |    6 +-
 src/nco/nco_prn.h         |    2 +-
 src/nco/nco_rec_var.c     |    2 +-
 src/nco/nco_rec_var.h     |    2 +-
 src/nco/nco_rgr.c         |    2 +-
 src/nco/nco_rgr.h         |    2 +-
 src/nco/nco_rth_flt.c     |    2 +-
 src/nco/nco_rth_flt.h     |    2 +-
 src/nco/nco_rth_utl.c     |    2 +-
 src/nco/nco_rth_utl.h     |    2 +-
 src/nco/nco_scl_utl.c     |    2 +-
 src/nco/nco_scl_utl.h     |    2 +-
 src/nco/nco_scm.c         |    4 +-
 src/nco/nco_scm.h         |    2 +-
 src/nco/nco_sld.c         |    2 +-
 src/nco/nco_sld.h         |    2 +-
 src/nco/nco_sng_utl.c     |    2 +-
 src/nco/nco_sng_utl.h     |    5 +-
 src/nco/nco_srm.c         |    2 +-
 src/nco/nco_srm.h         |    2 +-
 src/nco/nco_typ.h         |    2 +-
 src/nco/nco_var_avg.c     |    2 +-
 src/nco/nco_var_avg.h     |    2 +-
 src/nco/nco_var_lst.c     |    4 +-
 src/nco/nco_var_lst.h     |    2 +-
 src/nco/nco_var_rth.c     |    2 +-
 src/nco/nco_var_rth.h     |    2 +-
 src/nco/nco_var_scv.c     |    2 +-
 src/nco/nco_var_scv.h     |    2 +-
 src/nco/nco_var_utl.c     |    2 +-
 src/nco/nco_var_utl.h     |    2 +-
 src/nco/ncpdq.c           |    2 +-
 src/nco/ncra.c            |    6 +-
 src/nco/ncrename.c        |    2 +-
 src/nco/ncwa.c            |    2 +-
 src/nco_c++/Makefile.old  |    2 +-
 src/nco_c++/libnco_c++.hh |    2 +-
 src/nco_c++/nco_att.cc    |    2 +-
 src/nco_c++/nco_att.hh    |    2 +-
 src/nco_c++/nco_dmn.cc    |    2 +-
 src/nco_c++/nco_dmn.hh    |    2 +-
 src/nco_c++/nco_fl.cc     |    2 +-
 src/nco_c++/nco_fl.hh     |    2 +-
 src/nco_c++/nco_hgh.cc    |    2 +-
 src/nco_c++/nco_hgh.hh    |    2 +-
 src/nco_c++/nco_utl.cc    |    2 +-
 src/nco_c++/nco_utl.hh    |    2 +-
 src/nco_c++/nco_var.cc    |    2 +-
 src/nco_c++/nco_var.hh    |    2 +-
 177 files changed, 5204 insertions(+), 760 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5c5d78c..90cf981 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -50,11 +50,16 @@ endif()
 
 #/////////////////////////////////////////////////////////////////////////////////////
 #general C/C++ build flags
+#on single-configuration generators (Unix Makefiles, NMake Makefiles) use Debug as default
+#on multi-configuration generators (Visual Studio, Xcode) define only 2 types: Debug;Release
 #/////////////////////////////////////////////////////////////////////////////////////
 
-set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build.")
-set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build static libs.")
+set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
+if(CMAKE_CONFIGURATION_TYPES)
+  set(CMAKE_CONFIGURATION_TYPES "Debug;Release")
+endif()
 
+set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build static libs.")
 if (NOT BUILD_SHARED_LIBS)
   add_definitions(-DENABLE_STATIC)
 endif()
@@ -87,6 +92,18 @@ if(netcdf_root)
   message("${color_blue}-- Using user defined netCDF location: ${netcdf_root}${color_reset}")
 endif()
 
+#//////////////////////////
+#a user defined -DNETCDF_INCLUDE was specified; check if it really exists :-)
+#//////////////////////////
+
+if(NETCDF_INCLUDE)
+  if(EXISTS "${NETCDF_INCLUDE}/netcdf.h")
+    message("-- Using ${NETCDF_INCLUDE}/netcdf.h")
+  else()
+    message(FATAL_ERROR "${color_red}netcdf.h not found at ${NETCDF_INCLUDE}${color_reset}")
+  endif()
+endif()
+
 find_path(NETCDF_INCLUDE netcdf.h ${find_opt})
 if(NOT NETCDF_INCLUDE)
   message(FATAL_ERROR "${color_red}netcdf.h header file not found${color_reset}")
@@ -94,6 +111,18 @@ else()
   message("-- Found netcdf.h header file at: " ${NETCDF_INCLUDE})
 endif()
 
+#//////////////////////////
+#a user defined -DNETCDF_LIBRARY was specified; check if it really exists :-)
+#//////////////////////////
+
+if(NETCDF_LIBRARY)
+  if(EXISTS "${NETCDF_LIBRARY}")
+    message("-- Using ${NETCDF_LIBRARY}")
+  else()
+    message(FATAL_ERROR "${color_red}Specified ${NETCDF_LIBRARY} does not exist${color_reset}")
+  endif()
+endif()
+
 find_library(NETCDF_LIBRARY NAMES netcdf PATHS ${NETCDF_LIBRARY_PATH} NO_DEFAULT_PATH)
 find_library(NETCDF_LIBRARY NAMES netcdf ${find_opt})
 if(NOT NETCDF_LIBRARY)
@@ -122,14 +151,25 @@ if (has_nc_inq_format)
   add_definitions(-DHAVE_NC_INQ_FORMAT)
 endif()
 
-find_path(netcdf_mem_h netcdf_mem.h)
-if (netcdf_mem_h)
-  message("-- Found netcdf_mem.h in: " ${netcdf_mem_h})
+find_path(path_netcdf_mem_h netcdf_mem.h PATHS ${NETCDF_INCLUDE})
+if (path_netcdf_mem_h)
+  message("-- Found netcdf_mem.h in: " ${path_netcdf_mem_h})
+endif()
+
+check_library_exists(${NETCDF_LIBRARY} nc_open_mem "" has_nc_open_mem)
+if (has_nc_open_mem)
+  message("-- Found nc_open_mem in: " ${NETCDF_LIBRARY})
+endif()
+
+if (has_nc_open_mem AND path_netcdf_mem_h)
   add_definitions(-DHAVE_NETCDF_MEM_H)
+  message("-- NetCDF diskless functionaliy enabled")
 else()
-  message("-- NetCDF diskless functionaliy not available, netcdf_mem.h not found")
+  message("-- NetCDF diskless functionaliy not available, netcdf_mem.h or nc_open_mem not found")
 endif()
 
+
+
 #/////////////////////////////////////////////////////////////////////////////////////
 #HDF5
 #/////////////////////////////////////////////////////////////////////////////////////
@@ -249,26 +289,31 @@ endif()
 #compile as C++/static CRT on Visual Studio and as C99 on UNIX
 #//////////////////////////
 
-set(NCO_MSVC_USE_MT yes CACHE BOOL "Use MT flags when compiling in MSVC")
-
 if (MSVC)
-  add_definitions( "/D_CRT_SECURE_NO_WARNINGS /D_CRT_NONSTDC_NO_DEPRECATE" )
-
-  if (NCO_MSVC_USE_MT)
-     foreach(CompilerFlag CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
-                          CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
-                          CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
-                          CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
-       string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
-     endforeach()
+  set(MSVC_USE_STATIC_CRT ON CACHE BOOL "Use /MT flag (static CRT) when compiling in MSVC")
+  if (MSVC_USE_STATIC_CRT)
+    message("-- Using static CRT ${MSVC_USE_STATIC_CRT}")
+    foreach(flag_var CMAKE_CXX_FLAGS_DEBUG 
+      CMAKE_CXX_FLAGS_RELEASE
+      CMAKE_CXX_FLAGS_MINSIZEREL 
+      CMAKE_CXX_FLAGS_RELWITHDEBINFO
+      CMAKE_C_FLAGS_DEBUG 
+      CMAKE_C_FLAGS_RELEASE
+      CMAKE_C_FLAGS_MINSIZEREL 
+      CMAKE_C_FLAGS_RELWITHDEBINFO)
+    string(REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+    endforeach()
   endif()
 
   #//////////////////////////
   #compile as C++ Code (/TP)
   #//////////////////////////
-  foreach(CompilerFlag CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
-                       CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
-    set(${CompilerFlag} "/TP ${${CompilerFlag}}")
+  
+  foreach(flag_var CMAKE_C_FLAGS_DEBUG 
+    CMAKE_C_FLAGS_RELEASE
+    CMAKE_C_FLAGS_MINSIZEREL 
+    CMAKE_C_FLAGS_RELWITHDEBINFO)
+  set(${flag_var} "/TP ${${flag_var}}")
   endforeach()
 
   #//////////////////////////
@@ -279,29 +324,29 @@ if (MSVC)
 
 else (MSVC)
 
-#//////////////////////////
-#compile as C99
-#//////////////////////////
+  #//////////////////////////
+  #compile as C99
+  #//////////////////////////
 
-if(CMAKE_VERSION VERSION_LESS "3.1")
-  if(CMAKE_COMPILER_IS_GNUCC)
-    set(CMAKE_C_FLAGS "--std=gnu99 ${CMAKE_C_FLAGS}")
+  if(CMAKE_VERSION VERSION_LESS "3.1")
+    if(CMAKE_COMPILER_IS_GNUCC)
+      set(CMAKE_C_FLAGS "--std=gnu99 ${CMAKE_C_FLAGS}")
+    endif()
+  else()
+    set(CMAKE_C_STANDARD 99)
   endif()
-else()
-  set(CMAKE_C_STANDARD 99)
-endif()
 
-#//////////////////////////
-# other gcc flags
-#//////////////////////////
+  #//////////////////////////
+  # other gcc flags
+  #//////////////////////////
 
-if(CMAKE_COMPILER_IS_GNUCC)
-  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
-   set(CMAKE_C_FLAGS "-D_BSD_SOURCE -D_POSIX_SOURCE ${CMAKE_C_FLAGS}")
-  else()
-   set(CMAKE_C_FLAGS "-D_DEFAULT_SOURCE ${CMAKE_C_FLAGS}")
+  if(CMAKE_COMPILER_IS_GNUCC)
+    if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
+     set(CMAKE_C_FLAGS "-D_BSD_SOURCE -D_POSIX_SOURCE ${CMAKE_C_FLAGS}")
+    else()
+     set(CMAKE_C_FLAGS "-D_DEFAULT_SOURCE ${CMAKE_C_FLAGS}")
+    endif()
   endif()
-endif()
 
 endif(MSVC)
 
diff --git a/bld/Makefile b/bld/Makefile
index de1eb47..4742212 100644
--- a/bld/Makefile
+++ b/bld/Makefile
@@ -3,7 +3,7 @@
 # Purpose: GNU Makefile for NCO module nco
 # Requires GNU Make---AT&T Make chokes on GNU syntax
 
-# Copyright (C) 1994--2017 Charlie Zender
+# Copyright (C) 1994--2018 Charlie Zender
 # License: GNU General Public License (GPL) Version 3
 # See http://www.gnu.org/copyleft/gpl.html for full license text
 
@@ -15,17 +15,18 @@
 # Machine build parameters
 #                         Source     Method   Packages Compiler
 # aerosol.ess.uci.edu: NCO          Configure All else clang
+# cheyenne.ucar.edu  : NCO          Makefile  All else Intel
 # cooley.alcf.anl.g  : NCO          Configure All else GCC
 # edison.nersc.gov   : NCO          Configure All else Intel
 # firn.ess.uci.edu   : NCO          Configure All else clang
 # frazil.ess.uci.edu : NCO          Configure All else clang
 # glace.ess.uci.edu  : NCO          CMake     All else GCC
 # grele.ess.uci.edu  : NCO          Makefile  All else GCC
+# katabatic.ess.uci.e: NCO                    All else clang
 # rhea.ccs.ornl.gov  : NCO          Makefile  All else GCC
 # roulee.ess.uci.edu : NCO + netCDF Makefile  All else GCC
 # skyglow.ess.uci.edu: NCO + netCDF Configure All else GCC
 # travis CI          : NCO          Configure All else gcc,clang,g++
-# yellowstone.ucar.e : NCO          Makefile  All else Intel
 
 # Usage (testing):
 # make tst                           # Vanilla regression test
diff --git a/bld/nco.spec b/bld/nco.spec
index 545f62f..2151837 100644
--- a/bld/nco.spec
+++ b/bld/nco.spec
@@ -2,17 +2,17 @@
 # http://cvs.fedoraproject.org/viewvc/devel/nco/nco.spec?view=co
 
 Name:           nco
-Version:        4.7.1
+Version:        4.7.2
 Release:        1%{?dist}
 Summary:        Programs that manipulate netCDF files
 Group:          Applications/Engineering
 License:        GPL3
 URL:            http://nco.sf.net/
 
-# Obtain NCO version 4.7.1-1 tar.gz from Sourceforge using CVS:
+# Obtain NCO version 4.7.2-1 tar.gz from Sourceforge using CVS:
 # cvs -d:pserver:anonymous at nco.cvs.sf.net:/cvsroot/nco login
-# cvs -z3 -d:pserver:anonymous at nco.cvs.sf.net:/cvsroot/nco co -r nco-4.7.1-1 -d nco-%{version} nco
-# tar czf nco-%{version}.tar.gz --exclude='nco-4.7.1/debian*' --exclude='.cvsignore' --exclude=ncap_lex.c --exclude='ncap_yacc.[ch]' ./nco-%{version}
+# cvs -z3 -d:pserver:anonymous at nco.cvs.sf.net:/cvsroot/nco co -r nco-4.7.2-1 -d nco-%{version} nco
+# tar czf nco-%{version}.tar.gz --exclude='nco-4.7.2/debian*' --exclude='.cvsignore' --exclude=ncap_lex.c --exclude='ncap_yacc.[ch]' ./nco-%{version}
 Source0:        nco-%{version}.tar.gz
 #Patch0:		nco_install_C_headers.patch
 #Patch1:         nco_find_udunits-dat.patch
@@ -108,6 +108,9 @@ fi
 # %{_libdir}/libnco++.so
 
 %changelog
+* Thu Jan 21 2018 Charlie Zender <zender at uci.edu> - 4.7.2-1
+- new upstream 4.7.2
+
 * Thu Dec 21 2017 Charlie Zender <zender at uci.edu> - 4.7.1-1
 - new upstream 4.7.1
 
diff --git a/bld/nco_dst.pl b/bld/nco_dst.pl
index 51fa9ee..5b9130f 100755
--- a/bld/nco_dst.pl
+++ b/bld/nco_dst.pl
@@ -5,20 +5,20 @@
 
 # Usage:
 # Export tagged, public versions
-# /usr/bin/scp ${DATA}/nco-4.7.1.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
-
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln nco-4.7.1 # Build, do not release on SF
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --sf nco-4.7.1 # Build, release on SF
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --nst_all nco-4.7.1 # Install, do not build
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --nst_all nco-4.7.1 # Build and install
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_cnt nco-4.7.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_prs nco-4.7.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cgd_cnt nco-4.7.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cray_prs nco-4.7.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --bbl_cnt nco-4.7.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --blk_cnt nco-4.7.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --dat_cnt nco-4.7.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --ute_prs nco-4.7.1
+# /usr/bin/scp ${DATA}/nco-4.7.2.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
+
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln nco-4.7.2 # Build, do not release on SF
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --sf nco-4.7.2 # Build, release on SF
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --nst_all nco-4.7.2 # Install, do not build
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --nst_all nco-4.7.2 # Build and install
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_cnt nco-4.7.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_prs nco-4.7.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cgd_cnt nco-4.7.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cray_prs nco-4.7.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --bbl_cnt nco-4.7.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --blk_cnt nco-4.7.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --dat_cnt nco-4.7.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --ute_prs nco-4.7.2
 
 # Export daily snapshot
 # ${HOME}/nco/bld/nco_dst.pl --dbg=2 
@@ -256,7 +256,7 @@ if($bld){
 # Set up FTP server
     chdir $dst_pth_pfx or die "$prg_nm: ERROR unable to chdir to $dst_pth_pfx: $!\n"; # $! is system error string
     cmd_prc("$cp_cmd $doc_fl ./$dst_vrs/doc"); # Copy derived documentation to source directory
-    cmd_prc("$tar_cmd cvzf $dst_fl --exclude='nco-4.7.1/debian*' --exclude='.cvsignore' --exclude=ncap_lex.c --exclude=ncap_yacc.[ch] ./$dst_vrs"); # Create gzipped tarfile
+    cmd_prc("$tar_cmd cvzf $dst_fl --exclude='nco-4.7.2/debian*' --exclude='.cvsignore' --exclude=ncap_lex.c --exclude=ncap_yacc.[ch] ./$dst_vrs"); # Create gzipped tarfile
     cmd_prc("$rsh_cmd $www_mch $rm_cmd $www_drc/src/$dst_fl"); # Remove any distribution with same name
     if($dly_snp){cmd_prc("$rsh_cmd $www_mch $rm_cmd -r $www_drc/src/nco-????????.tar.gz");} # Remove previous daily snapshots from WWW server
     cmd_prc("$rcp_cmd $dst_fl $www_mch:$www_drc/src"); # Copy local tarfile to WWW server
diff --git a/bm/NCO_bm.pm b/bm/NCO_bm.pm
index be1fa1f..25bc148 100644
--- a/bm/NCO_bm.pm
+++ b/bm/NCO_bm.pm
@@ -136,7 +136,7 @@ appending history to file.
 This script is part of the netCDF Operators package:
 http://nco.sf.net
 
-Copyright 1995--2017 Charlie Zender
+Copyright 1995--2018 Charlie Zender
 
 USAGE
 exit(0);
diff --git a/bm/nco_bm.pl b/bm/nco_bm.pl
index 7fd1e8d..d119428 100755
--- a/bm/nco_bm.pl
+++ b/bm/nco_bm.pl
@@ -374,7 +374,7 @@ $server_name="sand.ess.uci.edu";  #change this to dust.ess.uci.edu?
 $server_ip="128.200.14.132";
 $server_port=29659;
 
-if($usg){bm_usg()};
+if($usg){NCO_bm::bm_usg()};
 if(0){tst_tm_hrz();} # Test hires timer - needs explicit code mod to do this
 
 if($iosockfound){
diff --git a/cmake/README.md b/cmake/README.md
new file mode 100644
index 0000000..24ccfa3
--- /dev/null
+++ b/cmake/README.md
@@ -0,0 +1,173 @@
+# nco_bld
+build NCO and its dependencies on Windows
+
+https://github.com/nco/nco
+
+Do
+
+```
+clone.bat
+bld.bat
+```
+
+this git clones and builds the following NCO dependency libraries
+
+```
+zlib
+szip
+hdf5
+curl
+netcdf
+expat
+udunits
+gsl
+antlr
+```
+
+## Options
+
+Use static linking of the C Run-time Library (CRT)
+
+```
+bld crt
+```
+
+# Changes needed
+
+
+## hdf5
+
+edit CMakeLists.txt at root and add for case when static linking of the C Run-time Library (CRT)
+
+```
+INCLUDE(config/cmake/UserMacros/WINDOWS_MT.cmake)
+```
+
+## netcdf
+
+edit CMakeLists.txt and add an option to detect the HDF5 HL library
+
+```
+INCLUDE_DIRECTORIES(${HDF5_HL_INCLUDE_DIR})
+```
+
+# NCO CMake build
+
+NCO should detect the ZLIB dependency in HDF5 as
+
+```
+-- Looking for H5Z_DEFLATE in I:/nco/cmake/hdf5/build/bin/Debug/libhdf5_D.lib
+-- Looking for H5Z_DEFLATE in I:/nco/cmake/hdf5/build/bin/Debug/libhdf5_D.lib - found
+-- ZLIB library is needed...
+```
+
+the netcdf function detection should be
+
+```
+-- Found netcdf library at: I:/nco/cmake/netcdf-c/build/liblib/Debug/netcdf.lib
+-- Looking for nc_inq_path in I:/nco/cmake/netcdf-c/build/liblib/Debug/netcdf.lib
+-- Looking for nc_inq_path in I:/nco/cmake/netcdf-c/build/liblib/Debug/netcdf.lib - found
+```
+
+# NCO tests
+
+```
+ncks.exe -v lat http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/cmap/enh/precip.mon.mean.nc
+```
+
+it requires curl built with WinSSL (default)
+
+# Changes needed for static CRT
+
+To static linking of the C Run-time Library (CRT), these changes must be made for the following libraries,
+in the CMakeLists.txt file
+
+```
+set(MSVC_USE_STATIC_CRT off CACHE BOOL "Use MT flags when compiling in MSVC")
+if (MSVC)
+  if (MSVC_USE_STATIC_CRT)
+     message("-- Using static CRT ${MSVC_USE_STATIC_CRT}")
+     foreach(flag_var CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
+                          CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
+                          CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
+                          CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
+       string(REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+     endforeach()
+  endif()
+endif()
+```
+
+## zlib
+
+git clone https://github.com/madler/zlib
+
+## szip
+
+git clone https://github.com/soumagne/szip
+
+## expat (dependency for UDUNITS-2)
+
+git clone https://github.com/libexpat/libexpat
+
+## UDUNITS-2
+
+git clone https://github.com/Unidata/UDUNITS-2
+
+
+# Changes needed for ZLIB and SZIP detection in NCO
+
+
+## hdf5
+
+edit hdf5-static.vcxproj and add full path of ZLIB and SZIP libraries as dependencies
+
+```
+<Lib>
+<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
+<AdditionalDependencies>I:\nco\cmake\zlib\build\Debug\zlibstaticd.lib;I:\nco\cmake\szip\build\bin\Debug\libszip_D.lib</AdditionalDependencies>
+</Lib>
+```
+
+## netcdf
+
+edit netcdf.vcxproj and add full path of HDF5 and curl libraries as dependencies
+
+```
+<Lib>
+<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
+<AdditionalDependencies>I:\nco\cmake\hdf5\build\bin\Debug\libhdf5_hl_D.lib;I:\nco\cmake\hdf5\build\bin\Debug\libhdf5_D.lib;I:\nco\cmake\curl\builds\libcurl-vc14-x64-debug-static-ipv6-sspi-winssl\lib\libcurl_a_debug.lib;%(AdditionalDependencies)</AdditionalDependencies>
+</Lib>
+```
+
+
+# List of dependencies
+
+```
+git clone https://github.com/Unidata/netcdf-c
+pushd netcdf-c
+git checkout tags/v4.5.0
+popd
+git clone https://github.com/curl/curl
+git clone https://github.com/madler/zlib
+git clone https://github.com/soumagne/szip
+git clone https://github.com/live-clones/hdf5
+git clone https://github.com/Unidata/UDUNITS-2
+git clone https://github.com/libexpat/libexpat
+git clone https://github.com/ampl/gsl
+git clone https://github.com/Distrotech/antlr2
+```
+
+
+## Changes needed for libcurl if building with CMake
+
+edit libcurl.vcxproj to include ws2_32.lib as library dependenccy and set LinkLibraryDependencies as true
+
+```
+<Lib>
+<AdditionalOptions>%(AdditionalOptions) /machine:x64</AdditionalOptions>
+<AdditionalDependencies>ws2_32.lib</AdditionalDependencies>
+</Lib>
+<ProjectReference>
+<LinkLibraryDependencies>true</LinkLibraryDependencies>
+</ProjectReference>
+```
\ No newline at end of file
diff --git a/cmake/bld.bat b/cmake/bld.bat
new file mode 100644
index 0000000..9ca4a6c
--- /dev/null
+++ b/cmake/bld.bat
@@ -0,0 +1,305 @@
+:: cmake build all NCO dependencies obtained with 'git clone'
+:: Pedro Vicente
+
+ at echo off
+if not defined DevEnvDir (
+ echo "%VS140COMNTOOLS%VsDevCmd.bat" 
+ call "%VS140COMNTOOLS%VsDevCmd.bat" 
+ echo "%VCINSTALLDIR%vcvarsall.bat" amd64
+ call "%VCINSTALLDIR%vcvarsall.bat" amd64
+ if errorlevel 1 goto :eof
+)
+
+if "%~1" == "crt" (
+  set STATIC_CRT=ON
+) else (
+  set STATIC_CRT=OFF
+)
+set MSVC_VERSION="Visual Studio 14 2015 Win64"
+echo using static crt %STATIC_CRT%
+echo using %MSVC_VERSION%
+
+:: replace the character string '\' with '/' needed for cmake
+set root_win=%cd%
+set root=%root_win:\=/%
+echo cmake root is %root%
+
+:build_zlib
+if exist %root_win%\zlib\build\zlib.sln (
+ echo skipping zlib build
+ goto build_szip
+) else (
+  echo building zlib
+  pushd zlib
+  mkdir build
+  pushd build
+  cmake .. -G %MSVC_VERSION% ^
+           -DMSVC_USE_STATIC_CRT=%STATIC_CRT% ^
+           -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+           -DBUILD_SHARED_LIBS=OFF
+  msbuild zlib.sln /target:build /property:configuration=debug
+  cp %root%\zlib\build\zconf.h %root%\zlib
+  popd
+  popd
+  if errorlevel 1 goto :eof
+)
+
+:build_szip
+if exist %root_win%\szip\build\SZIP.sln (
+ echo skipping szip build
+ goto build_hdf5
+) else (
+  echo building szip
+  pushd szip
+  mkdir build
+  pushd build
+  cmake .. -G %MSVC_VERSION% ^
+           -DMSVC_USE_STATIC_CRT=%STATIC_CRT% ^
+           -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+           -DBUILD_SHARED_LIBS=OFF ^
+           -DBUILD_TESTING=OFF
+  msbuild SZIP.sln /target:build /property:configuration=debug
+  popd
+  popd
+  if errorlevel 1 goto :eof
+)
+
+:build_hdf5
+if exist %root_win%\hdf5\build\bin\Debug\h5dump.exe (
+ echo skipping hdf5 build
+ goto build_curl
+) else (
+  echo building hdf5
+  pushd hdf5
+  mkdir build
+  pushd build
+  cmake .. -G %MSVC_VERSION% ^
+           -DBUILD_STATIC_CRT_LIBS=%STATIC_CRT% ^
+           -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+           -DBUILD_SHARED_LIBS=OFF ^
+           -DBUILD_STATIC_EXECS=ON ^
+           -DBUILD_TESTING=OFF ^
+           -DHDF5_BUILD_EXAMPLES=OFF ^
+           -DHDF5_BUILD_CPP_LIB=OFF ^
+           -DHDF5_ENABLE_Z_LIB_SUPPORT=ON ^
+           -DH5_ZLIB_HEADER=%root%/zlib/zlib.h ^
+           -DZLIB_STATIC_LIBRARY:FILEPATH=%root%/zlib/build/Debug/zlibstaticd.lib ^
+           -DZLIB_INCLUDE_DIRS:PATH=%root%/zlib ^
+           -DHDF5_ENABLE_SZIP_SUPPORT=ON ^
+           -DSZIP_USE_EXTERNAL=ON ^
+           -DSZIP_FOUND=ON ^
+           -DSZIP_STATIC_LIBRARY:FILEPATH=%root%/szip/build/bin/Debug/libszip_D.lib ^
+           -DSZIP_INCLUDE_DIRS:PATH=%root%/szip/src
+  msbuild HDF5.sln /target:build /property:configuration=debug
+  popd
+  popd
+  if errorlevel 1 goto :eof
+)
+
+
+:build_curl
+if exist %root_win%\curl\builds\libcurl-vc14-x64-debug-static-ipv6-sspi-winssl\lib\libcurl_a_debug.lib (
+ echo skipping curl build
+ goto build_netcdf
+) else (
+  echo building curl
+  pushd curl
+  call buildconf.bat
+  pushd winbuild
+  @echo on
+  if %STATIC_CRT% == ON (
+   nmake /f Makefile.vc mode=static vc=14 debug=yes gen_pdb=yes MACHINE=x64 RTLIBCFG=static
+  ) else (
+   nmake /f Makefile.vc mode=static vc=14 debug=yes gen_pdb=yes MACHINE=x64
+  )
+  @echo off
+  popd
+  popd
+  if errorlevel 1 goto :eof
+)
+
+
+:build_netcdf
+if exist %root_win%\netcdf-c\build\ncdump\ncdump.exe (
+ echo skipping netcdf build
+ goto test_netcdf
+) else (
+  echo building netcdf
+  pushd netcdf-c
+  mkdir build
+  pushd build
+  cmake .. -G %MSVC_VERSION% ^
+           -DNC_USE_STATIC_CRT=%STATIC_CRT% ^
+           -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+           -DENABLE_TESTS=OFF ^
+           -DBUILD_SHARED_LIBS=OFF ^
+           -DHDF5_HL_LIBRARY=%root%/hdf5/build/bin/Debug/libhdf5_hl_D.lib ^
+           -DHDF5_C_LIBRARY=%root%/hdf5/build/bin/Debug/libhdf5_D.lib ^
+           -DHDF5_INCLUDE_DIR=%root%/hdf5/src ^
+           -DZLIB_LIBRARY:FILE=%root%/zlib/build/Debug/zlibstaticd.lib ^
+           -DSZIP_LIBRARY:FILE=%root%/szip/build/bin/Debug/libszip_D.lib ^
+           -DZLIB_INCLUDE_DIR:PATH=%root%/zlib ^
+           -DHAVE_HDF5_H=%root%/hdf5/build ^
+           -DHDF5_HL_INCLUDE_DIR=%root%/hdf5/hl/src ^
+           -DCURL_LIBRARY=%root%/curl/builds/libcurl-vc14-x64-debug-static-ipv6-sspi-winssl/lib/libcurl_a_debug.lib ^
+           -DCURL_INCLUDE_DIR=%root%/curl/include
+  msbuild netcdf.sln /target:build /property:configuration=debug
+  popd
+  popd
+  if errorlevel 1 goto :eof
+)
+
+
+:test_netcdf
+if exist %root_win%\netcdf-c\build\ncdump\ncdump.exe (
+ echo testing netcdf build
+ @echo on
+ %root_win%\netcdf-c\build\ncdump\ncdump.exe -k http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/cmap/enh/precip.mon.mean.nc
+ @echo off
+ @echo.
+ goto build_expat
+)
+
+:build_expat
+if exist %root_win%\libexpat\expat\build\expat.sln (
+ echo skipping expat build
+ goto build_udunits
+) else (
+  echo building expat
+  pushd libexpat
+  pushd expat
+  mkdir build
+  pushd build
+  cmake .. -G %MSVC_VERSION% ^
+           -DMSVC_USE_STATIC_CRT=%STATIC_CRT% ^
+           -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+           -DBUILD_SHARED_LIBS=OFF ^
+           -DBUILD_shared=OFF
+  msbuild expat.sln /target:build /property:configuration=debug
+  popd
+  popd
+  popd
+  if errorlevel 1 goto :eof
+)
+
+
+:build_udunits
+if exist %root_win%\UDUNITS-2\build\udunits.sln (
+ echo skipping udunits build
+ goto build_gsl
+) else (
+  echo building udunits
+  pushd UDUNITS-2
+  mkdir build
+  pushd build
+  cmake .. -G %MSVC_VERSION% ^
+           -DMSVC_USE_STATIC_CRT=%STATIC_CRT% ^
+           -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+           -DBUILD_SHARED_LIBS=OFF ^
+           -DEXPAT_INCLUDE_DIR=%root%/libexpat/expat/lib ^
+           -DEXPAT_LIBRARY=%root%/libexpat/expat/build/Debug/expatd.lib
+  msbuild udunits.sln /target:build /property:configuration=debug
+  popd
+  popd
+  if errorlevel 1 goto :eof
+)
+
+
+:build_gsl
+if exist %root_win%\GSL\build\GSL.sln (
+ echo skipping gsl build
+ goto build_antlr
+) else (
+  echo building gsl
+  pushd GSL
+  mkdir build
+  pushd build
+  if %STATIC_CRT%==ON (
+  set DYNAMIC_CRT=OFF
+  ) else (
+  set DYNAMIC_CRT=ON
+  )
+  echo using dynamic CRT %DYNAMIC_CRT%
+  cmake .. -G %MSVC_VERSION% ^
+           -DMSVC_RUNTIME_DYNAMIC=%DYNAMIC_CRT% ^
+           -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+           -DBUILD_SHARED_LIBS=OFF ^
+           -DGSL_DISABLE_TESTS=ON
+  msbuild GSL.sln /target:build /property:configuration=debug
+  popd
+  popd
+  if errorlevel 1 goto :eof
+)
+
+:build_antlr
+if exist %root_win%\antlr2\lib\cpp\build\Project.sln (
+ echo skipping antlr build
+ goto build_nco
+) else (
+  echo building antlr
+  pushd antlr2
+  pushd lib
+  pushd cpp
+  mkdir build
+  pushd build
+  cmake .. -G %MSVC_VERSION% ^
+           -DMSVC_USE_STATIC_CRT=%STATIC_CRT% ^
+           -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+           -DBUILD_SHARED_LIBS=OFF
+  msbuild Project.sln /target:build /property:configuration=debug
+  popd
+  popd
+  popd
+  popd
+  if errorlevel 1 goto :eof
+)
+
+
+
+:build_nco
+if exist Debug\ncks.exe (
+ echo skipping nco build
+ goto test_nco
+) else (
+  echo building NCO
+  rm -rf CMakeCache.txt CMakeFiles
+  cmake .. -G %MSVC_VERSION% ^
+  -DMSVC_USE_STATIC_CRT=%STATIC_CRT% ^
+  -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+  -DNETCDF_INCLUDE:PATH=%root%/netcdf-c/include ^
+  -DNETCDF_LIBRARY:FILE=%root%/netcdf-c/build/liblib/Debug/netcdf.lib ^
+  -DHDF5_LIBRARY:FILE=%root%/hdf5/build/bin/Debug/libhdf5_D.lib ^
+  -DHDF5_HL_LIBRARY:FILE=%root%/hdf5/build/bin/Debug/libhdf5_hl_D.lib ^
+  -DZLIB_LIBRARY:FILE=%root%/zlib/build/Debug/zlibstaticd.lib ^
+  -DSZIP_LIBRARY:FILE=%root%/szip/build/bin/Debug/libszip_D.lib ^
+  -DCURL_LIBRARY:FILE=%root%/curl/builds/libcurl-vc14-x64-debug-static-ipv6-sspi-winssl/lib/libcurl_a_debug.lib ^
+  -DUDUNITS2_INCLUDE:PATH=%root%/UDUNITS-2/lib ^
+  -DUDUNITS2_LIBRARY:FILE=%root%/UDUNITS-2/build/lib/Debug/udunits2.lib ^
+  -DEXPAT_LIBRARY:FILE=%root%/libexpat/expat/build/Debug/expatd.lib ^
+  -DGSL_INCLUDE:PATH=%root%/gsl/build ^
+  -DGSL_LIBRARY:FILE=%root%/gsl/build/Debug/gsl.lib ^
+  -DGSL_CBLAS_LIBRARY:FILE=%root%/gsl/build/Debug/gslcblas.lib ^
+  -DANTLR_INCLUDE:PATH=%root%/antlr2/lib/cpp ^
+  -DANTLR_LIBRARY:FILE=%root%/antlr2/lib/cpp/build/Debug/antlr.lib 
+  msbuild nco.sln /target:build /property:configuration=debug
+  if errorlevel 1 goto :eof
+)
+
+:test_nco
+ at echo on
+%root_win%\netcdf-c\build\ncgen\ncgen.exe -k netCDF-4 -b -o %root_win%\..\data\in_grp.nc %root_win%\..\data\in_grp.cdl
+%root_win%\netcdf-c\build\ncgen\ncgen.exe -k netCDF-4 -b -o %root_win%\..\data\in.nc %root_win%\..\data\in.cdl
+%root_win%\Debug\ncks.exe --jsn_fmt 2 -C -g g10 -v two_dmn_rec_var %root_win%\..\data\in_grp.nc
+%root_win%\Debug\ncks.exe -v lat http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/cmap/enh/precip.mon.mean.nc
+
+:: generate text files in_grp.nc.gen.txt from in_grp.nc and in.nc and use tool FC to compare contents 
+:: with pre-existing in_grp.nc.txt, in.nc.txt, generated in Linux
+:: generation of in_grp.nc.gen.txt must be done in 'data' folder so that paths match
+
+ at pushd %root_win%\..\data
+%root_win%\Debug\ncks.exe in_grp.nc > %root_win%\in_grp.nc.gen.txt 
+%root_win%\Debug\ncks.exe in.nc > %root_win%\in.nc.gen.txt 
+ at popd
+fc in_grp.nc.gen.txt in_grp.nc.txt
+fc in.nc.gen.txt in.nc.txt
+echo done
\ No newline at end of file
diff --git a/cmake/build.bat b/cmake/build.bat
index 17c0542..04711d7 100644
--- a/cmake/build.bat
+++ b/cmake/build.bat
@@ -14,5 +14,6 @@ cmake .. ^
 -DGSL_INCLUDE:PATH=I:/gsl-1.8/src ^
 -DGSL_LIBRARY:FILE=I:/gsl-1.8/src/gsl/1.8/gsl-1.8/VC8/libgsl/Debug-StaticLib/libgsl_d.lib ^
 -DGSL_CBLAS_LIBRARY:FILE=I:/gsl-1.8/src/gsl/1.8/gsl-1.8/VC8/libgslcblas/Debug-StaticLib/libgslcblas_d.lib
+msbuild nco.sln /target:build /property:configuration=debug
 
 
diff --git a/cmake/clone.bat b/cmake/clone.bat
new file mode 100644
index 0000000..79458e6
--- /dev/null
+++ b/cmake/clone.bat
@@ -0,0 +1,13 @@
+
+git clone https://github.com/Unidata/netcdf-c
+pushd netcdf-c
+git checkout tags/v4.5.0
+popd
+git clone https://github.com/curl/curl
+git clone https://github.com/madler/zlib
+git clone https://github.com/soumagne/szip
+git clone https://github.com/live-clones/hdf5
+git clone https://github.com/Unidata/UDUNITS-2
+git clone https://github.com/libexpat/libexpat
+git clone https://github.com/ampl/gsl
+git clone https://github.com/Distrotech/antlr2
\ No newline at end of file
diff --git a/cmake/dep.bat b/cmake/dep.bat
new file mode 100644
index 0000000..21e16ef
--- /dev/null
+++ b/cmake/dep.bat
@@ -0,0 +1,122 @@
+:: cmake build all NCO dependencies obtained with 'git clone' using nmake
+:: Pedro Vicente
+
+ at echo off
+ at call "%VS140COMNTOOLS%VsDevCmd.bat" amd64
+
+:: replace the character string '\' with '/' needed for cmake
+set temp=%cd%
+set root=%temp:\=/%
+echo root is %root%
+
+pushd zlib
+if exist build\Makefile (
+ echo skipping zlib build
+ popd
+ goto build_hdf5
+) else (
+  echo building zlib
+  mkdir build
+  pushd build
+  cmake .. -G "NMake Makefiles" ^
+           -DCMAKE_BUILD_TYPE=Debug ^
+           -DBUILD_SHARED_LIBS=OFF
+  nmake
+  popd
+  popd
+)
+
+:build_hdf5
+pushd hdf5
+if exist build\Makefile (
+ echo skipping hdf5 build
+ popd
+ goto build_curl
+) else (
+  echo building hdf5
+  mkdir build
+  pushd build
+  cmake .. -G "NMake Makefiles" ^
+           -DCMAKE_BUILD_TYPE=Debug ^
+           -DBUILD_SHARED_LIBS=OFF ^
+           -DBUILD_STATIC_EXECS=ON ^
+           -DBUILD_TESTING=OFF ^
+           -DHDF5_BUILD_EXAMPLES=OFF ^
+           -DHDF5_BUILD_CPP_LIB=OFF
+  nmake
+  popd
+  popd
+)
+
+:build_curl
+pushd curl
+if exist build\Makefile (
+ echo skipping curl build
+ popd
+ goto build_netcdf
+) else (
+  echo building curl
+  mkdir build
+  pushd build
+  cmake .. -G "NMake Makefiles" ^
+           -DCMAKE_BUILD_TYPE=Debug ^
+           -DBUILD_SHARED_LIBS=OFF ^
+           -DBUILD_TESTING=OFF
+  nmake
+  popd
+  popd
+)
+
+:build_netcdf
+pushd netcdf-c
+if exist build\ncdump\ncdump.exe (
+ echo skipping netcdf build
+ popd
+ goto test_netcdf
+) else (
+  echo building netcdf
+  mkdir build
+  pushd build
+  cmake .. -G "NMake Makefiles" ^
+           -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+           -DENABLE_TESTS=OFF ^
+           -DCMAKE_BUILD_TYPE=Debug ^
+           -DBUILD_SHARED_LIBS=OFF ^
+           -DHDF5_HL_LIBRARY=%root%/hdf5/build/bin/libhdf5_hl_D.lib ^
+           -DHDF5_C_LIBRARY=%root%/hdf5/build/bin/libhdf5_D.lib ^
+           -DHDF5_INCLUDE_DIR=%root%/hdf5/src ^
+           -DZLIB_LIBRARY:FILE=%root%/zlib/build/zlibstaticd.lib ^
+           -DZLIB_INCLUDE_DIR:PATH=%root%/zlib ^
+           -DHAVE_HDF5_H=%root%/hdf5/build ^
+           -DHDF5_HL_INCLUDE_DIR=%root%/hdf5/hl/src ^
+           -DCURL_LIBRARY=%root%/curl/build/lib/libcurl-d_imp.lib ^
+           -DCURL_INCLUDE_DIR=%root%/curl/include
+  nmake
+  popd
+  popd
+)
+
+:test_netcdf
+if exist %root%\netcdf-c\build\ncdump\ncdump.exe (
+ echo testing netcdf build
+ pushd netcdf-c
+ pushd build
+ pushd ncdump
+ cp %root%\curl\build\lib\libcurl-d.dll %root%\netcdf-c\build\ncdump
+ ncdump http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/cmap/enh/precip.mon.mean.nc
+ popd
+ popd
+ popd
+ goto build_nco
+)
+
+:build_nco
+cmake .. ^
+-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON ^
+-DMSVC_USE_STATIC_CRT=OFF ^
+-DNETCDF_INCLUDE:PATH=%root%/netcdf-c/include ^
+-DNETCDF_LIBRARY:FILE=%root%/netcdf-c/build/liblib/netcdf.lib ^
+-DHDF5_LIBRARY:FILE=%root%/hdf5/build/bin/libhdf5_D.lib ^
+-DHDF5_HL_LIBRARY:FILE=%root%/hdf5/build/bin/libhdf5_hl_D.lib ^
+-DZLIB_LIBRARY:FILE=%root%/zlib/build/zlibstaticd.lib ^
+-DCURL_LIBRARY:FILE=%root%/curl/build/lib/libcurl-d_imp.lib
\ No newline at end of file
diff --git a/cmake/in.nc.txt b/cmake/in.nc.txt
new file mode 100644
index 0000000..235470a
--- /dev/null
+++ b/cmake/in.nc.txt
@@ -0,0 +1,2760 @@
+netcdf in {
+  dimensions:
+    Lat = 2 ;
+    Lon = 4 ;
+    bnd = 2 ;
+    char_dmn_lng04 = 4 ;
+    char_dmn_lng26 = 26 ;
+    char_dmn_lng80 = 80 ;
+    date_dmn = 5 ;
+    dgn = 1 ;
+    fl_dmn = 3 ;
+    gds_crd = 8 ;
+    gds_ncd = 8 ;
+    ilev = 4 ;
+    lat = 2 ;
+    lat_T42 = 64 ;
+    lat_cal = 10 ;
+    lat_grd = 3 ;
+    lat_times_lon = 8 ;
+    lev = 3 ;
+    lon = 4 ;
+    lon_T42 = 128 ;
+    lon_cal = 10 ;
+    lon_grd = 5 ;
+    lsmlev = 6 ;
+    rlev = 3 ;
+    time = UNLIMITED ; // (10 currently)
+    time_udunits = 3 ;
+    vrt_nbr = 2 ;
+    wvl = 2 ;
+
+  variables:
+    float AQ01 ;
+
+    float H2O ;
+
+    float H2OH2O ;
+
+    float H2O_ice ;
+
+    float H2O_lqd ;
+
+    float H2SO4 ;
+
+    double Lat(Lat) ;
+      Lat:long_name = "Latitude" ;
+      Lat:units = "degrees_north" ;
+      Lat:purpose = "Latitude paired with Longitude coordinate originally stored as -180 to 180." ;
+
+    double LatLon(Lat,Lon) ;
+      LatLon:long_name = "2D variable originally stored on -180 to 180 longitude grid" ;
+      LatLon:units = "fraction" ;
+      LatLon:purpose = "Demonstrate remapping of [-180,180) to [0,360) longitude-grid data" ;
+
+    double Lon(Lon) ;
+      Lon:long_name = "Longitude" ;
+      Lon:units = "degrees" ;
+      Lon:purpose = "Longitude coordinate originally stored as -180 to 180" ;
+      Lon:notes = "Longitude = [-180.0,180.0) is not CF-compliant, yet is common" ;
+
+    float ORO(lat,lon) ;
+      ORO:long_name = "Orography, an enumerated yet continuous type: ocean=0.0, land=1.0, sea ice=2.0" ;
+      ORO:units = "fraction" ;
+
+    float P0 ;
+      P0:long_name = "reference pressure" ;
+      P0:units = "pascal" ;
+
+    float PS(time,lat,lon) ;
+      PS:long_name = "surface pressure" ;
+      PS:units = "pascal" ;
+
+    float Q ;
+
+    float Q01 ;
+
+    float Q01Q ;
+
+    float Q02 ;
+
+    float Q03 ;
+
+    float Q04 ;
+
+    float Q05 ;
+
+    float Q06 ;
+
+    float Q07 ;
+
+    float Q08 ;
+
+    float Q09 ;
+
+    float Q1 ;
+
+    float Q10 ;
+
+    float Q100 ;
+
+    float Q11 ;
+
+    float Q12 ;
+
+    float Q13 ;
+
+    float Q14 ;
+
+    float Q15 ;
+
+    float Q16 ;
+
+    float Q17 ;
+
+    float Q18 ;
+
+    float Q19 ;
+
+    float Q20 ;
+
+    float Q21 ;
+
+    float Q22 ;
+
+    float Q23 ;
+
+    float Q24 ;
+
+    float Q25 ;
+
+    float Q26 ;
+
+    float Q27 ;
+
+    float Q28 ;
+
+    float Q29 ;
+
+    float Q30 ;
+
+    float Q31 ;
+
+    float Q32 ;
+
+    float Q33 ;
+
+    float Q34 ;
+
+    float Q35 ;
+
+    float Q36 ;
+
+    float Q37 ;
+
+    float Q38 ;
+
+    float Q39 ;
+
+    float Q40 ;
+
+    float Q41 ;
+
+    float Q42 ;
+
+    float Q43 ;
+
+    float Q44 ;
+
+    float Q45 ;
+
+    float Q46 ;
+
+    float Q47 ;
+
+    float Q48 ;
+
+    float Q49 ;
+
+    float Q50 ;
+
+    float Q51 ;
+
+    float Q52 ;
+
+    float Q53 ;
+
+    float Q54 ;
+
+    float Q55 ;
+
+    float Q56 ;
+
+    float Q57 ;
+
+    float Q58 ;
+
+    float Q59 ;
+
+    float Q60 ;
+
+    float Q61 ;
+
+    float Q62 ;
+
+    float Q63 ;
+
+    float Q64 ;
+
+    float Q65 ;
+
+    float Q66 ;
+
+    float Q67 ;
+
+    float Q68 ;
+
+    float Q69 ;
+
+    float Q70 ;
+
+    float Q71 ;
+
+    float Q72 ;
+
+    float Q73 ;
+
+    float Q74 ;
+
+    float Q75 ;
+
+    float Q76 ;
+
+    float Q77 ;
+
+    float Q78 ;
+
+    float Q79 ;
+
+    float Q80 ;
+
+    float Q81 ;
+
+    float Q82 ;
+
+    float Q83 ;
+
+    float Q84 ;
+
+    float Q85 ;
+
+    float Q86 ;
+
+    float Q87 ;
+
+    float Q88 ;
+
+    float Q89 ;
+
+    float Q90 ;
+
+    float Q91 ;
+
+    float Q92 ;
+
+    float Q93 ;
+
+    float Q94 ;
+
+    float Q95 ;
+
+    float Q96 ;
+
+    float Q97 ;
+
+    float Q98 ;
+
+    float Q99 ;
+
+    float QA01 ;
+
+    float QQ01 ;
+
+    int RDM(time) ;
+
+    float SALT(time) ;
+      SALT:long_name = "record variable, float packed as float, with float missing values" ;
+      SALT:purpose = "CESM POP2 ocean model packs SALT, WVEL etc this way" ;
+      SALT:_FillValue = -9.96921e+33f ;
+      SALT:scale_factor = 1000. ;
+
+    char albers_conical_equal_area ;
+      albers_conical_equal_area:long_name = "Albers Conical Equal Area Projection" ;
+      albers_conical_equal_area:purpose = "Test that this grid_mapping is propagated with all associated variables (like cnv_CF_grd)" ;
+      albers_conical_equal_area:grid_mapping_name = "albers_conical_equal_area" ;
+      albers_conical_equal_area:false_easting = 0. ;
+      albers_conical_equal_area:false_northing = 0. ;
+      albers_conical_equal_area:latitude_of_projection_origin = 40. ;
+      albers_conical_equal_area:longitude_of_central_meridian = -101. ;
+      albers_conical_equal_area:standard_parallel = 20., 60. ;
+      albers_conical_equal_area:longitude_of_prime_meridian = 0. ;
+      albers_conical_equal_area:semi_major_axis = 6378137. ;
+
+    float area(lat) ;
+      area:long_name = "area" ;
+      area:units = "meter2" ;
+
+    float area2(lat) ;
+      area2:long_name = "area version 2" ;
+      area2:units = "meter2" ;
+
+    float area_asm(lat) ;
+      area_asm:long_name = "area asymmetric" ;
+      area_asm:units = "meter2" ;
+
+    double areacella(lat,lon) ;
+      areacella:standard_name = "area" ;
+      areacella:long_name = "area" ;
+      areacella:units = "meter2" ;
+      areacella:purpose = "Variable to hold cell areas of 2D fields. Intended to be pointed to by cell_measures attribute of 2D fields. Would have named it plain-old area but too many regression tests already depend on 1D float area below. areacella is name used by ESGF-distributed versions of some CESM simulations anyway, e.g., baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation gridspecFile: gridspec_atmos_fx_CCSM4_amip_r0i0p0.nc areacella: areacella_fx_CCSM4_amip_r0i0p0.nc" ;
+
+    int att_sng ;
+      att_sng:nul_sng = 48b ;
+      att_sng:empty_sng = "" ;
+      att_sng:space_sng = " " ;
+      att_sng:zero_sng = "0" ;
+
+    float att_var(time) ;
+      att_var:byte_att = 0b, 1b, 2b, 127b, -128b, -127b, -2b, -1b ;
+      att_var:char_att = "Sentence one.\n",
+        "Sentence two.\n" ;
+      att_var:short_att = 37s ;
+      att_var:int_att = 73 ;
+      att_var:long_att = 73 ;
+      att_var:float_att = 73.f, 72.f, 71.f, 70.01f, 69.001f, 68.01f, 67.01f ;
+      att_var:double_att = 73., 72., 71., 70.01, 69.001, 68.01, 67.010001 ;
+
+    int att_var_jsn ;
+      att_var_jsn:char\ att\ with\ whitespace = "cf-json.org <http://cf-json.org>" ;
+      att_var_jsn:double\ att\ with\ whitespace = 3.14 ;
+      att_var_jsn:int\ att\ with\ whitespace = 1 ;
+      att_var_jsn:int_array\ att\ with\ whitespace = 1, 2 ;
+
+    int att_var_spc_chr ;
+      att_var_spc_chr:space\ in\ name = "foo" ;
+      att_var_spc_chr:comma_in_name\, = "foo" ;
+      att_var_spc_chr:lt_in_name\< = "foo" ;
+      att_var_spc_chr:gt_in_name\> = "foo" ;
+      att_var_spc_chr:hash_in_name\# = "foo" ;
+      att_var_spc_chr:xclaim_in_name\! = "foo" ;
+      att_var_spc_chr:dollar_in_name\$ = "foo" ;
+      att_var_spc_chr:ampersand_in_name\& = "foo" ;
+      att_var_spc_chr:equals_in_name\= = "foo" ;
+      att_var_spc_chr:semicolon_in_name\; = "foo" ;
+      att_var_spc_chr:colon_in_name\: = "foo" ;
+      att_var_spc_chr:lbrace_in_name\{ = "foo" ;
+      att_var_spc_chr:rbrace_in_name\} = "foo" ;
+      att_var_spc_chr:lparen_in_name\( = "foo" ;
+      att_var_spc_chr:rparen_in_name\) = "foo" ;
+      att_var_spc_chr:lbracket_in_name\[ = "foo" ;
+      att_var_spc_chr:rbracket_in_name\] = "foo" ;
+      att_var_spc_chr:plus_in_name+ = "foo" ;
+      att_var_spc_chr:hyphen_in_name- = "foo" ;
+      att_var_spc_chr:at_in_name@ = "foo" ;
+
+    int bnd_var(lev,bnd) ;
+      bnd_var:byte_att = 48b ;
+      bnd_var:char_att = "Sentence one.\n",
+        "Sentence two.\n" ;
+      bnd_var:short_att = 37s ;
+      bnd_var:int_att = 73 ;
+      bnd_var:long_att = 73 ;
+      bnd_var:float_att = 73.f ;
+      bnd_var:double_att = 73. ;
+
+    byte byt_2D(lat,lon) ;
+
+    byte byt_3D(lat,lev,lon) ;
+
+    byte byt_3D_rec(time,lat,lon) ;
+
+    byte byt_arr(lat,lon) ;
+      byt_arr:long_name = "byte array" ;
+
+    byte byte_var ;
+      byte_var:long_name = "byte" ;
+
+    byte byte_var_neg ;
+      byte_var_neg:long_name = "negative byte" ;
+
+    char char_var ;
+      char_var:long_name = "char" ;
+
+    char char_var_1D_arr(time) ;
+      char_var_1D_arr:long_name = "char-type 1D variable array" ;
+
+    char char_var_2D_arr(lat,lon) ;
+      char_var_2D_arr:long_name = "char-type 2D variable array" ;
+
+    char char_var_nul ;
+      char_var_nul:long_name = "Character variable containing one NUL specified as empty string: \"\"" ;
+
+    char char_var_nul_c_format ;
+      char_var_nul_c_format:long_name = "Character variable containing one NUL specified in C-format: \'\\0\'" ;
+
+    char char_var_space ;
+      char_var_space:long_name = "Character variable with whitespace on ends" ;
+
+    char char_var_zero ;
+      char_var_zero:long_name = "Character variable containing zero" ;
+
+    float climatology_bounds(time,vrt_nbr) ;
+      climatology_bounds:purpose = "Variable containing CF-compliant climatology bounds for time dimension" ;
+
+    float cnv_CF_crd(gds_crd) ;
+      cnv_CF_crd:long_name = "test CF coordinates conventions" ;
+      cnv_CF_crd:coordinates = "lat_gds lon_gds " ;
+      cnv_CF_crd:reason = "Test whether coordinates attribute strings that end with a space break after nco_var_lst_crd_ass_add() call to nco_lst_prs_2d()" ;
+
+    float cnv_CF_grd(lat,lon) ;
+      cnv_CF_grd:long_name = "test CF grid_mapping convention" ;
+      cnv_CF_grd:grid_mapping = "albers_conical_equal_area" ;
+      cnv_CF_grd:purpose = "Test whether grid_mapping is propagated with coordinate" ;
+
+    float cnv_CF_ncl(time) ;
+      cnv_CF_ncl:long_name = "test CF ancillary_variables convention" ;
+      cnv_CF_ncl:standard_name = "specific_humidity" ;
+      cnv_CF_ncl:ancillary_variables = "cnv_CF_ncl_var_1 cnv_CF_ncl_var_2" ;
+      cnv_CF_ncl:purpose = "Main variable that has ancillary variables named cnv_CF_ncl_var_1 and cnv_CF_ncl_var_2" ;
+
+    float cnv_CF_ncl_var_1(time) ;
+      cnv_CF_ncl_var_1:long_name = "test CF ancillary_variables convention" ;
+      cnv_CF_ncl_var_1:standard_name = "specific_humidity standard_error" ;
+      cnv_CF_ncl_var_1:purpose = "Ancillary variable for cnv_CF_ncl. Other ancillary variable is cnv_CF_ncl_var_2." ;
+
+    float cnv_CF_ncl_var_2(time) ;
+      cnv_CF_ncl_var_2:long_name = "test CF ancillary_variables convention" ;
+      cnv_CF_ncl_var_2:standard_name = "specific_humidity detection_limit" ;
+      cnv_CF_ncl_var_2:purpose = "Ancillary variable for cnv_CF_ncl. Other ancillary variable is cnv_CF_ncl_var_1." ;
+
+    int date(time) ;
+      date:long_name = "current date as 6- or 8-digit integer (YYMMDD or YYYYMMDD)" ;
+
+    int date_int(date_dmn) ;
+      date_int:long_name = "Date (as array of ints: YYYY,MM,DD,HH,MM)" ;
+
+    char date_rec(time,char_dmn_lng26) ;
+      date_rec:long_name = "A record variable of date strings" ;
+      date_rec:units = "[sng]" ;
+
+    char date_sng(char_dmn_lng26) ;
+      date_sng:long_name = "A single date string" ;
+      date_sng:units = "[sng]" ;
+
+    float dgn(dgn) ;
+      dgn:long_name = "degenerate coordinate (dgn means degenerate, i.e., of size 1)" ;
+
+    float dgn_var(dgn) ;
+      dgn_var:long_name = "degenerate variable (dgn means degenerate, i.e., of size 1)" ;
+
+    double double_var ;
+      double_var:long_name = "double" ;
+
+    double double_var2 ;
+      double_var2:long_name = "double" ;
+      double_var2:_FillValue = 1.e+36 ;
+
+    float dps_dry ;
+      dps_dry:long_name = "Dry Deposition" ;
+
+    float dps_ttl ;
+      dps_ttl:long_name = "Total Deposition" ;
+
+    float dps_wet ;
+      dps_wet:long_name = "Wet Deposition" ;
+
+    double e_dbl ;
+      e_dbl:long_name = "e, natural logarithm base" ;
+
+    float e_flt ;
+      e_flt:long_name = "e, natural logarithm base" ;
+
+    char fl_dmn(fl_dmn) ;
+      fl_dmn:long_name = "Character coordinate" ;
+      fl_dmn:units = "[chr]" ;
+
+    char fl_nm(char_dmn_lng80) ;
+      fl_nm:long_name = "Variable contains a file name" ;
+
+    char fl_nm_arr(fl_dmn,char_dmn_lng80) ;
+      fl_nm_arr:long_name = "Variable that contains a short array of file names" ;
+      fl_nm_arr:units = "[sng]" ;
+
+    char fl_nm_rec(time,char_dmn_lng80) ;
+      fl_nm_rec:long_name = "A record variable of file names" ;
+      fl_nm_rec:units = "[sng]" ;
+
+    float fll_val(lon) ;
+      fll_val:long_name = "_FillValue example" ;
+      fll_val:_FillValue = -999.f ;
+
+    float fll_val_mss_val(lon) ;
+      fll_val_mss_val:long_name = "_FillValue example" ;
+      fll_val_mss_val:_FillValue = -999.f ;
+      fll_val_mss_val:missing_value = -999.f ;
+
+    float float_var ;
+      float_var:long_name = "float" ;
+
+    float four ;
+      four:long_name = "four" ;
+
+    float four_dmn_rec_var(time,lat,lev,lon) ;
+      four_dmn_rec_var:long_name = "four dimensional record variable" ;
+      four_dmn_rec_var:units = "watt meter-2" ;
+      four_dmn_rec_var:coordinates = "time lat lev lon" ;
+
+    float g ;
+      g:long_name = "g" ;
+
+    float gds_3dvar(time,gds_crd) ;
+      gds_3dvar:long_name = "Geodesic variable" ;
+      gds_3dvar:units = "meter" ;
+      gds_3dvar:coordinates = "lat_gds lon_gds" ;
+      gds_3dvar:purpose = "Test auxiliary coordinates like those that define geodesic grids" ;
+
+    float gds_crd(gds_crd) ;
+      gds_crd:long_name = "Geodesic coordinate" ;
+      gds_crd:units = "degree" ;
+      gds_crd:purpose = "enumerated coordinate like those that might define points in a geodesic grid" ;
+      gds_crd:coordinates = "lat_gds lon_gds" ;
+
+    float gds_var(gds_crd) ;
+      gds_var:long_name = "Geodesic variable" ;
+      gds_var:units = "meter" ;
+      gds_var:purpose = "Test auxiliary coordinates like those that define geodesic grids" ;
+      gds_var:coordinates = "lat_gds lon_gds" ;
+
+    float gds_var_ncd(gds_ncd) ;
+      gds_var_ncd:long_name = "Geodesic variable on non-coordinate grid" ;
+      gds_var_ncd:units = "meter" ;
+      gds_var_ncd:purpose = "Test auxiliary coordinates like those that define geodesic grids but where underlying dimension is a non-coordinate dimension" ;
+      gds_var_ncd:coordinates = "lat_gds_ncd lon_gds_ncd" ;
+
+    float grv_sfc ;
+      grv_sfc:long_name = "Surface gravity on Earth" ;
+      grv_sfc:units = "meter second-2" ;
+
+    float gw(lat) ;
+      gw:long_name = "gw variable like gw" ;
+      gw:units = "fraction" ;
+
+    float gw_T42(lat_T42) ;
+      gw_T42:long_name = "gw variable like gw_T42" ;
+      gw_T42:units = "fraction" ;
+
+    float hyai(ilev) ;
+      hyai:long_name = "hybrid A coefficient at layer interfaces" ;
+
+    float hyam(lev) ;
+      hyam:long_name = "hybrid A coefficient at layer midpoints" ;
+
+    float hybi(ilev) ;
+      hybi:long_name = "hybrid B coefficient at layer interfaces" ;
+
+    float hybm(lev) ;
+      hybm:long_name = "hybrid B coefficient at layer midpoints" ;
+
+    float ilev(ilev) ;
+      ilev:purpose = "Monotonically increasing coordinate pressure" ;
+      ilev:long_name = "hybrid level at interfaces (1000*(A+B))" ;
+      ilev:units = "hPa" ;
+      ilev:positive = "down" ;
+      ilev:A_var = "hyai" ;
+      ilev:B_var = "hybi" ;
+      ilev:P0_var = "P0" ;
+      ilev:PS_var = "PS" ;
+      ilev:standard_name = "atmosphere_hybrid_sigma_pressure_coordinate" ;
+      ilev:formula_terms = "a: hyai b: hybi p0: P0 ps: PS" ;
+      ilev:formula_readable = "prs_ntf[time,lat,lon,ilev]=P0*hyai+PS*hybi" ;
+
+    int int_var ;
+      int_var:long_name = "int" ;
+
+    float lat(lat) ;
+      lat:long_name = "Latitude (typically midpoints)" ;
+      lat:units = "degrees_north" ;
+      lat:bounds = "lat_bnd" ;
+
+    float lat_1D_rct(lat_times_lon) ;
+      lat_1D_rct:long_name = "Latitude for 2D rectangular grid stored as 1D arrays" ;
+      lat_1D_rct:units = "degrees_north" ;
+
+    float lat_1D_rrg(lat_times_lon) ;
+      lat_1D_rrg:long_name = "Latitude for 2D irregular grid stored as 1D arrays" ;
+      lat_1D_rrg:units = "degrees_north" ;
+
+    float lat_2D_rct(lat,lon) ;
+      lat_2D_rct:long_name = "Latitude for 2D rectangular grid stored as 2D array" ;
+      lat_2D_rct:units = "degrees_north" ;
+
+    float lat_2D_rrg(lat,lon) ;
+      lat_2D_rrg:long_name = "Latitude for 2D irregular grid stored as 2D array" ;
+      lat_2D_rrg:units = "degrees_north" ;
+
+    float lat_T42(lat_T42) ;
+
+    float lat_bnd(lat,vrt_nbr) ;
+      lat_bnd:purpose = "Cell boundaries for lat coordinate" ;
+
+    double lat_cal(lat_cal) ;
+      lat_cal:long_name = "lat_cal" ;
+      lat_cal:units = "days since 1964-2-28" ;
+      lat_cal:calendar = "360_day" ;
+
+    float lat_cpy(lat) ;
+
+    double lat_gds(gds_crd) ;
+      lat_gds:long_name = "Latitude" ;
+      lat_gds:standard_name = "latitude" ;
+      lat_gds:units = "degree" ;
+      lat_gds:purpose = "1-D latitude coordinate referred to by geodesic grid variables" ;
+
+    double lat_gds_ncd(gds_ncd) ;
+      lat_gds_ncd:long_name = "Latitude" ;
+      lat_gds_ncd:standard_name = "latitude" ;
+      lat_gds_ncd:units = "degree" ;
+      lat_gds_ncd:purpose = "1-D latitude coordinate referred to by \"non-coordinate\" (ncd) geodesic grid variables" ;
+
+    float lat_grd(lat_grd) ;
+      lat_grd:long_name = "Latitude grid (typically interfaces)" ;
+      lat_grd:units = "degrees_north" ;
+
+    int lat_times_lon(lat_times_lon) ;
+      lat_times_lon:long_name = "Element index (i.e., C-based storage order) for 2D coordinate grids stored as 1D arrays" ;
+
+    int lat_times_lon_nbr ;
+      lat_times_lon_nbr:long_name = "Number of elements in 2D coordinate grids. Rectangular and irregular test grids have this many total elements. The coordinates and elements are stored as 1D or 2D arrays for grid types 1D and 2D respectively." ;
+
+    float lat_var(lat) ;
+
+    float lat_wgt(lat) ;
+
+    float lev(lev) ;
+      lev:purpose = "Monotonically increasing coordinate pressure" ;
+      lev:long_name = "hybrid level at midpoints (1000*(A+B))" ;
+      lev:units = "hPa" ;
+      lev:positive = "down" ;
+      lev:A_var = "hyam" ;
+      lev:B_var = "hybm" ;
+      lev:P0_var = "P0" ;
+      lev:PS_var = "PS" ;
+      lev:bounds = "lev_bnd" ;
+      lev:standard_name = "atmosphere_hybrid_sigma_pressure_coordinate" ;
+      lev:formula_terms = "a: hyam b: hybm p0: P0 ps: PS" ;
+      lev:formula_readable = "prs_mdp[time,lat,lon,lev]=P0*hyam+PS*hybm" ;
+
+    float lev_bnd(lev,vrt_nbr) ;
+      lev_bnd:purpose = "Cell boundaries for lev coordinate" ;
+
+    float lev_cpy(lev) ;
+
+    float lev_var(lev) ;
+      lev_var:long_name = "lev_var" ;
+
+    float lev_wgt(lev) ;
+      lev_wgt:long_name = "lev_wgt" ;
+
+    float lon(lon) ;
+      lon:long_name = "Longitude (typically midpoints)" ;
+      lon:units = "degrees_east" ;
+
+    float lon_1D_rct(lat_times_lon) ;
+      lon_1D_rct:long_name = "Longitude for 2D rectangular grid stored as 1D arrays" ;
+      lon_1D_rct:units = "degrees_east" ;
+
+    float lon_1D_rrg(lat_times_lon) ;
+      lon_1D_rrg:long_name = "Longitude for 2D irregular grid stored as 1D arrays" ;
+      lon_1D_rrg:units = "degrees_east" ;
+
+    float lon_2D_rct(lat,lon) ;
+      lon_2D_rct:long_name = "Longitude for 2D rectangular grid stored as 2D array" ;
+      lon_2D_rct:units = "degrees_east" ;
+
+    float lon_2D_rrg(lat,lon) ;
+      lon_2D_rrg:long_name = "Longitude for 2D irregular grid stored as 2D array" ;
+      lon_2D_rrg:units = "degrees_east" ;
+
+    float lon_T42(lon_T42) ;
+
+    double lon_cal(lon_cal) ;
+      lon_cal:long_name = "lon_cal" ;
+      lon_cal:units = "days since 1964-2-28" ;
+      lon_cal:calendar = "365_day" ;
+
+    double lon_gds(gds_crd) ;
+      lon_gds:long_name = "Longitude" ;
+      lon_gds:standard_name = "longitude" ;
+      lon_gds:units = "degree" ;
+      lon_gds:purpose = "1-D longitude coordinate referred to by geodesic grid variables" ;
+
+    double lon_gds_ncd(gds_ncd) ;
+      lon_gds_ncd:long_name = "Longitude" ;
+      lon_gds_ncd:standard_name = "longitude" ;
+      lon_gds_ncd:units = "degree" ;
+      lon_gds_ncd:purpose = "1-D longitude coordinate referred to by \"non-coordinate\" (ncd) geodesic grid variables" ;
+
+    float lon_grd(lon_grd) ;
+      lon_grd:long_name = "Longitude grid (typically interfaces)" ;
+      lon_grd:units = "degrees_east" ;
+
+    float lon_wgt(lon) ;
+      lon_wgt:long_name = "Gaussian weights" ;
+      lon_wgt:purpose = "Gaussian weights which sum to two for n = 4. These weights all have floor of 0.0 so should cause SIGFPE when applied to integer types in weighted average." ;
+
+    double lond(lon) ;
+      lond:long_name = "Longitude (typically midpoints), double precision" ;
+      lond:units = "degrees_east" ;
+
+    float lonf(lon) ;
+      lonf:long_name = "Longitude (typically midpoints), single precision" ;
+      lonf:units = "degrees_east" ;
+
+    int long_var ;
+      long_var:long_name = "long" ;
+      long_var:purpose = "Variable of CDL type=long, which is deprecated for int. Included to test back-compatibility" ;
+
+    float lsmlev(lsmlev) ;
+      lsmlev:purpose = "Homebrew level coordinate for LSM" ;
+      lsmlev:long_name = "Soil depth" ;
+      lsmlev:units = "meter" ;
+
+    float mask(lat,lon) ;
+      mask:long_name = "Purpose is to mask a variable like ORO" ;
+      mask:units = "fraction" ;
+
+    char md5_a ;
+      md5_a:long_name = "the letter a" ;
+      md5_a:purpose = "String with known MD5 digest" ;
+      md5_a:MD5_known_checksum = "0cc175b9c0f1b6a831c399e269772661" ;
+
+    char md5_abc(lev) ;
+      md5_abc:long_name = "the letters abc" ;
+      md5_abc:purpose = "String with known MD5 digest" ;
+      md5_abc:MD5_known_checksum = "900150983cd24fb0d6963f7d28e17f72" ;
+
+    float mmr_CO2 ;
+      mmr_CO2:long_name = "Mass mixing ratio of CO2" ;
+      mmr_CO2:units = "kilogram kilogram-1" ;
+
+    float msk_prt_mss_prt(lon) ;
+      msk_prt_mss_prt:long_name = "partial mask, partial missing value example" ;
+      msk_prt_mss_prt:_FillValue = 1.e+36f ;
+
+    float mss_val(lon) ;
+      mss_val:long_name = "partial missing value example" ;
+      mss_val:_FillValue = 1.e+36f ;
+
+    float mss_val_all(lon) ;
+      mss_val_all:long_name = "all missing values example" ;
+      mss_val_all:_FillValue = 1.e+36f ;
+
+    float mss_val_fst(lon) ;
+      mss_val_fst:long_name = "offset partial missing value example" ;
+      mss_val_fst:_FillValue = -999.f ;
+
+    float mss_val_scl ;
+      mss_val_scl:long_name = "scalar missing value" ;
+      mss_val_scl:_FillValue = 1.e+36f ;
+
+    float mss_val_scl_sml ;
+      mss_val_scl_sml:long_name = "scalar missing value" ;
+      mss_val_scl_sml:purpose = "Unlike mss_val_scl, mss_val_scl_sml has a missing value that fits within any packed data type range" ;
+      mss_val_scl_sml:_FillValue = 10000.f ;
+
+    float nan_arr(lat) ;
+      nan_arr:long_name = "Intended for array representation of IEEE NaN" ;
+      nan_arr:note = "20120308 Apparently netCDF ncgen chokes on variable names of nan and NaN" ;
+      nan_arr:note2 = "20120330 netCDF ncgen on AIX/bluefire chokes on variable/attribute values of nan" ;
+      nan_arr:note3 = "20120625 netCDF ncgen on netCDF 4.1.1 on apparently chokes on variable/attribute values of nan" ;
+      nan_arr:note4 = "If your NCO build fails because your version of netCDF does not support nan, then cd to the directory that contains the file nco/data/in.cdl and run the command in note5 first and then try to build again" ;
+      nan_arr:note5 = "sed -e \'s/nan;/1.0f;/\' in.cdl > foo.cdl;ncgen -b -o in.nc foo.cdl" ;
+      nan_arr:note6 = "It is too troublesome to distribute in.cdl with references to NaNs because users always build with old netCDF versions that do not support it. So just comment out nan\'s for now." ;
+      nan_arr:_FillValue = 1.f ;
+
+    float nan_scl ;
+      nan_scl:long_name = "Intended for scalar representation of IEEE NaN" ;
+      nan_scl:note = "20120308 Apparently netCDF ncgen chokes on variable names of nan and NaN" ;
+      nan_scl:note2 = "20120330 netCDF ncgen on AIX/bluefire chokes on variable/attribute values of nan" ;
+      nan_scl:note3 = "20120625 netCDF ncgen on netCDF 4.1.1 on apparently chokes on variable/attribute values of nan" ;
+      nan_scl:note6 = "It is too troublesome to distribute in.cdl with references to NaNs because users always build with old netCDF versions that do not support it. So just comment out nan\'s for now." ;
+      nan_scl:_FillValue = 1.f ;
+
+    int nbdate ;
+      nbdate:long_name = "base date as 6- or 8-digit integer (YYMMDD or YYYYMMDD)" ;
+
+    float negative_one ;
+      negative_one:long_name = "negative one" ;
+
+    float nm_pnd ;
+      nm_pnd:long_name = "Variable name with pound symbol (invalid)" ;
+
+    float nm_spc ;
+      nm_spc:long_name = "Variable name with space (invalid)" ;
+
+    float no_mss_val(lon) ;
+      no_mss_val:long_name = "no missing value" ;
+
+    char non_nul_trm_char_one_dmn(char_dmn_lng04) ;
+      non_nul_trm_char_one_dmn:long_name = "Variable contains a one-dimensional array of characters that is not NUL-terminated" ;
+      non_nul_trm_char_one_dmn:units = "[chr]" ;
+
+    char non_nul_trm_char_two_dmn(fl_dmn,char_dmn_lng04) ;
+      non_nul_trm_char_two_dmn:long_name = "Variable contains a two-dimensional array of characters that are not NUL-terminated" ;
+      non_nul_trm_char_two_dmn:units = "[chr]" ;
+
+    short non_rec_var_flt_pck(lon) ;
+      non_rec_var_flt_pck:long_name = "regular variable, float, packed into short" ;
+      non_rec_var_flt_pck:purpose = "Demonstrate that non-rec dim packed vars are handled correctly" ;
+      non_rec_var_flt_pck:scale_factor = 0.1f ;
+      non_rec_var_flt_pck:add_offset = 100.f ;
+
+    int od(time) ;
+
+    float one ;
+      one:long_name = "one" ;
+
+    int one_dmn_int_val_one(lat) ;
+
+    int one_dmn_int_val_two(lat) ;
+
+    int one_dmn_rec_var(time) ;
+      one_dmn_rec_var:long_name = "one dimensional record variable" ;
+      one_dmn_rec_var:coordinates = "time" ;
+      one_dmn_rec_var:units = "kelvin" ;
+
+    float one_dmn_rec_var__FillValue(time) ;
+      one_dmn_rec_var__FillValue:long_name = "One dimensional record variable with missing data indicated by _FillValue attribute only. No missing_value attribute exists." ;
+      one_dmn_rec_var__FillValue:_FillValue = 1.e+36f ;
+
+    float one_dmn_rec_var_dbl(time) ;
+      one_dmn_rec_var_dbl:long_name = "one dimensional record variable, double precision" ;
+      one_dmn_rec_var_dbl:units = "second" ;
+
+    float one_dmn_rec_var_flt(time) ;
+      one_dmn_rec_var_flt:long_name = "one dimensional record variable, single precision" ;
+
+    float one_dmn_rec_var_flt_mss(time) ;
+      one_dmn_rec_var_flt_mss:long_name = "one dimensional record variable, single precision, missing values" ;
+      one_dmn_rec_var_flt_mss:_FillValue = 1.e+36f ;
+
+    float one_dmn_rec_var_flt_mss_scl(time) ;
+      one_dmn_rec_var_flt_mss_scl:long_name = "one dimensional record variable, single precision, missing values, scaled" ;
+      one_dmn_rec_var_flt_mss_scl:scale_factor = 1.f ;
+      one_dmn_rec_var_flt_mss_scl:_FillValue = 1.e+36f ;
+
+    float one_dmn_rec_var_flt_scl(time) ;
+      one_dmn_rec_var_flt_scl:long_name = "one dimensional record variable, single precision, scaled" ;
+      one_dmn_rec_var_flt_scl:scale_factor = 1.f ;
+
+    int one_dmn_rec_var_mdn(time) ;
+      one_dmn_rec_var_mdn:long_name = "one dimensional record variable to test median" ;
+
+    int one_dmn_rec_var_mdn__FillValue(time) ;
+      one_dmn_rec_var_mdn__FillValue:long_name = "one dimensional record variable to test median with _FillValue" ;
+      one_dmn_rec_var_mdn__FillValue:_FillValue = -999 ;
+
+    float one_dmn_rec_var_missing_value(time) ;
+      one_dmn_rec_var_missing_value:long_name = "One dimensional record variable with missing data indicated by missing_value attribute only. No _FillValue attribute exists." ;
+      one_dmn_rec_var_missing_value:missing_value = 1.e+36f ;
+
+    float one_dmn_rec_var_mss_val(time) ;
+      one_dmn_rec_var_mss_val:long_name = "One dimensional record variable with all missing data." ;
+      one_dmn_rec_var_mss_val:_FillValue = 1.e+36f ;
+
+    float one_dmn_rec_var_mss_val_arr(time) ;
+      one_dmn_rec_var_mss_val_arr:long_name = "One dimensional record variable with missing data indicated by a _FillValue attribute that is an array. This can be tested with ncrcat. 20120905: ncgen chokes on _FillValue arrays and produces this error: _FillValue: must be a single (possibly compound) value. Deprecate the array for normal use since it prevents ncgen from completing. Uncommment following line when testing for compatibility with software changes." ;
+      one_dmn_rec_var_mss_val_arr:_FillValue = 1.f ;
+
+    char one_dmn_rec_var_sng(time) ;
+      one_dmn_rec_var_sng:long_name = "one dimensional record variable of string" ;
+      one_dmn_rec_var_sng:NB = "20131222: HDF4 ncgen fails on this variable: /usr/bin/hncgen -b -o ~/in.hdf ~/nco/data/in.cdl produces error message that \"string won\'t fit in this variable\"" ;
+
+    int one_dmn_rec_var_unsorted(time) ;
+      one_dmn_rec_var_unsorted:long_name = "one dimensional record variable, unsorted" ;
+
+    float one_dmn_rec_var_unsorted__FillValue(time) ;
+      one_dmn_rec_var_unsorted__FillValue:long_name = "Unsorted, one dimensional record variable with missing data indicated by _FillValue attribute only. No missing_value attribute exists." ;
+      one_dmn_rec_var_unsorted__FillValue:_FillValue = 1.e+36f ;
+
+    double one_dmn_rec_wgt(time) ;
+      one_dmn_rec_wgt:long_name = "one dimensional record variable weight" ;
+
+    float one_dmn_var(bnd) ;
+
+    float orog(lat,lon) ;
+      orog:long_name = "Orography, an enumerated yet continuous type: ocean=0.0, land=1.0, sea ice=2.0" ;
+      orog:units = "fraction" ;
+      orog:original_name = "ORO" ;
+      orog:cell_measures = "area: areacella" ;
+      orog:purpose = "Replicate processing of files produced by CESM and distributed on ESGF" ;
+
+    float orog2(lat,lon) ;
+      orog2:long_name = "Value of 1 everywhere on latxlon grid" ;
+      orog2:units = "fraction" ;
+      orog2:purpose = "debug TODO nco1138" ;
+
+    float orog3(lat,lon) ;
+      orog3:long_name = "Value of 0 first half, 1 second half on latxlon grid" ;
+      orog3:units = "fraction" ;
+      orog3:purpose = "debug TODO nco1138" ;
+
+    short pck ;
+      pck:long_name = "Scalar variable, double, packed as short" ;
+      pck:note = "Original packed value was 1s with scale_factor = 2.0d and add_offset = 1.0d. Unpacked value (netCDF convention) should be 3.0 = 2.0d*1s + 1.0d. Unpacked value (HDF convention) should be 0.0 = 2.0d*(1s-1.0d). NCO algorithms would pack this variable as scale_factor = 0.0d and add_offset = 3.0d." ;
+      pck:scale_factor = 2. ;
+      pck:add_offset = 1. ;
+
+    short pck_3 ;
+      pck_3:long_name = "Scalar variable, double, packed as short" ;
+      pck_3:note = "Original packed value was 1s with scale_factor = 2.0d and add_offset = 1.0d. Unpacked value (netCDF convention) should be 3.0 = 2.0d*1s + 1.0d. Unpacked value (HDF convention) should be 0.0 = 2.0d*(1s-1.0d). NCO algorithms would pack this variable as scale_factor = 0.0d and add_offset = 3.0d." ;
+      pck_3:scale_factor = 2. ;
+      pck_3:add_offset = 1. ;
+
+    short pck_5 ;
+      pck_5:long_name = "Scalar variable, double, packed as short" ;
+      pck_5:note = "Original packed value was 2s with scale_factor = 2.0d and add_offset = 1.0d. Unpacked value (netCDF convention) should be 5.0 = 2.0d*2s + 1.0d. Unpacked value (HDF convention) should be 2.0 = 2.0d*(2s-1.0d). NCO algorithms would pack this variable as scale_factor = 0.0d and add_offset = 5.0d." ;
+      pck_5:scale_factor = 2. ;
+      pck_5:add_offset = 1. ;
+
+    short pck_7 ;
+      pck_7:long_name = "Scalar variable, double, packed as short" ;
+      pck_7:note = "Original packed value was 1s with scale_factor = 4.0d and add_offset = 3.0d. Unpacked value (netCDF convention) should be 7.0 = 4.0d*1s + 3.0d. Unpacked value (HDF convention) should be -8.0 = 4.0d*(1s-3.0d). NCO algorithms would pack this variable as scale_factor = 0.0d and add_offset = 7.0d." ;
+      pck_7:scale_factor = 4. ;
+      pck_7:add_offset = 3. ;
+
+    short pck_arr(lon) ;
+      pck_arr:long_name = "Array variable, double, packed as short" ;
+      pck_arr:note = "Packed value is -32767s, 0s, 1s, 32767s, unpacked is same in double" ;
+      pck_arr:scale_factor = 1. ;
+      pck_arr:add_offset = 0. ;
+
+    double pi ;
+      pi:long_name = "Pi" ;
+      pi:units = "fraction" ;
+
+    double pi_arr_dbl(lat,lon) ;
+      pi_arr_dbl:long_name = "Pi array double precision" ;
+      pi_arr_dbl:units = "fraction" ;
+
+    float pi_arr_flt(lat,lon) ;
+      pi_arr_flt:long_name = "Pi array single precision" ;
+      pi_arr_flt:units = "fraction" ;
+
+    float ppc_bgr(time) ;
+      ppc_bgr:long_name = "Precision-Preserving Compression, bigger numbers" ;
+      ppc_bgr:purpose = "test --ppc switches" ;
+      ppc_bgr:original_values = "1234567890e20,1234567890e19,1234567890e18,1234567890e17,1234567890e16,1234567890e15,1234567890e14,1234567890e13,1234567890e12,1234567890e11" ;
+
+    float ppc_bgr_scl ;
+      ppc_bgr_scl:long_name = "Precision-Preserving Compression, bigger numbers, scalar" ;
+      ppc_bgr_scl:purpose = "test --ppc switches" ;
+      ppc_bgr_scl:original_value = "1234567890e11" ;
+
+    double ppc_big(time) ;
+      ppc_big:long_name = "Precision-Preserving Compression, big numbers" ;
+      ppc_big:purpose = "test --ppc switches" ;
+      ppc_big:original_values = "123456789e-10,123456789e-9,123456789e-8,123456789e-7,123456789e-6,123456789e-5,123456789e-4,123456789e-3,123456789e-2,123456789e-1" ;
+
+    double ppc_dbl(time) ;
+      ppc_dbl:long_name = "Precision-Preserving Compression, double precision" ;
+      ppc_dbl:purpose = "test --ppc switches" ;
+      ppc_dbl:original_values = "0.0,0.1,0.12,0.123,0.1234,0.12345,0.123456,0.1234567,0.12345678,0.123456789" ;
+
+    float ppc_flt(time) ;
+      ppc_flt:long_name = "Precision-Preserving Compression, single precision" ;
+      ppc_flt:purpose = "test --ppc switches" ;
+      ppc_flt:original_values = "0.0,0.1,0.12,0.123,0.1234,0.12345,0.123456,0.1234567,0.12345678,0.123456789" ;
+
+    double ppc_hgh(time) ;
+      ppc_hgh:long_name = "Precision-Preserving Compression, high precision" ;
+      ppc_hgh:purpose = "test --ppc switches" ;
+
+    double ppc_hgr(time) ;
+      ppc_hgr:long_name = "Precision-Preserving Compression, higher precision" ;
+      ppc_hgr:purpose = "test --ppc switches" ;
+
+    double ppc_zro_dbl(time) ;
+      ppc_zro_dbl:long_name = "array of double precision floating point zeros" ;
+
+    float ppc_zro_flt(time) ;
+      ppc_zro_flt:long_name = "array of single precision floating point zeros" ;
+
+    int ppc_zro_int(time) ;
+      ppc_zro_int:long_name = "array of integer zeros" ;
+
+    float prs_sfc(time,lat,lon) ;
+      prs_sfc:long_name = "Surface pressure" ;
+      prs_sfc:units = "pascal" ;
+
+    double rec_var_dbl(time) ;
+      rec_var_dbl:long_name = "record variable, double" ;
+
+    short rec_var_dbl_mss_val_dbl_pck(time) ;
+      rec_var_dbl_mss_val_dbl_pck:long_name = "record variable, double, packed as short, with double missing values" ;
+      rec_var_dbl_mss_val_dbl_pck:purpose = "Packed version of rec_var_dbl_mss_val_dbl_upk" ;
+      rec_var_dbl_mss_val_dbl_pck:_FillValue = -999s ;
+      rec_var_dbl_mss_val_dbl_pck:missing_value = -999. ;
+      rec_var_dbl_mss_val_dbl_pck:scale_factor = -9.15541313801785e-05 ;
+      rec_var_dbl_mss_val_dbl_pck:add_offset = 5. ;
+
+    int rec_var_dbl_mss_val_dbl_pck_lng(time) ;
+      rec_var_dbl_mss_val_dbl_pck_lng:long_name = "record variable, double packed as long, with double missing values" ;
+      rec_var_dbl_mss_val_dbl_pck_lng:purpose = "although not usual, packing doubles into longs (rather than shorts) offers considerable space savings" ;
+      rec_var_dbl_mss_val_dbl_pck_lng:_FillValue = -999 ;
+      rec_var_dbl_mss_val_dbl_pck_lng:missing_value = -999. ;
+      rec_var_dbl_mss_val_dbl_pck_lng:scale_factor = -9.15541313801785e-05 ;
+      rec_var_dbl_mss_val_dbl_pck_lng:add_offset = 5. ;
+
+    double rec_var_dbl_mss_val_dbl_upk(time) ;
+      rec_var_dbl_mss_val_dbl_upk:long_name = "record variable, double, with double missing values" ;
+      rec_var_dbl_mss_val_dbl_upk:purpose = "This variable is used to generate the packed variable rec_var_dbl_mss_val_dbl_pck, so its _FillValue should not be out of range, i.e., it should be representable by a short. However, the _FillValue should itself be the same type as the unpacked variable, NC_DOUBLE in this case." ;
+      rec_var_dbl_mss_val_dbl_upk:_FillValue = -999. ;
+      rec_var_dbl_mss_val_dbl_upk:missing_value = -999. ;
+
+    short rec_var_dbl_mss_val_sht_pck(time) ;
+      rec_var_dbl_mss_val_sht_pck:long_name = "record variable, double, packed as short, with short missing values" ;
+      rec_var_dbl_mss_val_sht_pck:purpose = "Packed version of rec_var_dbl_mss_val_sht_upk" ;
+      rec_var_dbl_mss_val_sht_pck:_FillValue = -999s ;
+      rec_var_dbl_mss_val_sht_pck:missing_value = -999s ;
+      rec_var_dbl_mss_val_sht_pck:scale_factor = -9.15541313801785e-05 ;
+      rec_var_dbl_mss_val_sht_pck:add_offset = 5. ;
+
+    short rec_var_dbl_mss_val_sht_pck_sht(time) ;
+      rec_var_dbl_mss_val_sht_pck_sht:long_name = "record variable, double packed as short, with short missing values" ;
+      rec_var_dbl_mss_val_sht_pck_sht:_FillValue = -999s ;
+      rec_var_dbl_mss_val_sht_pck_sht:scale_factor = -9.15541313801785e-05 ;
+      rec_var_dbl_mss_val_sht_pck_sht:add_offset = 5. ;
+
+    double rec_var_dbl_mss_val_sht_upk(time) ;
+      rec_var_dbl_mss_val_sht_upk:long_name = "record variable, double, with double missing values" ;
+      rec_var_dbl_mss_val_sht_upk:purpose = "This variable is used to generate the packed variable rec_var_dbl_mss_val_sht_pck, so its _FillValue should not be out of range, i.e., it should be representable by a short. However, the _FillValue should itself be the same type as the unpacked variable, NC_DOUBLE in this case." ;
+      rec_var_dbl_mss_val_sht_upk:_FillValue = -999. ;
+      rec_var_dbl_mss_val_sht_upk:missing_value = -999s ;
+
+    short rec_var_dbl_pck(time) ;
+      rec_var_dbl_pck:long_name = "record variable, double, packed into short" ;
+      rec_var_dbl_pck:purpose = "Demonstrate that rounding of means of packed data are handled correctly" ;
+      rec_var_dbl_pck:scale_factor = 0.1 ;
+      rec_var_dbl_pck:add_offset = 100. ;
+
+    float rec_var_flt(time) ;
+      rec_var_flt:long_name = "record variable, float" ;
+
+    float rec_var_flt_mss_val_dbl(time) ;
+      rec_var_flt_mss_val_dbl:long_name = "record variable, float, with double missing values" ;
+      rec_var_flt_mss_val_dbl:_FillValue = 1.e+36f ;
+      rec_var_flt_mss_val_dbl:missing_value = 1.e+36f ;
+      rec_var_flt_mss_val_dbl:note = "The correct average of this variable is 5.0. The correct sum of this variable is 35." ;
+
+    float rec_var_flt_mss_val_flt(time) ;
+      rec_var_flt_mss_val_flt:long_name = "record variable, float, with float missing values" ;
+      rec_var_flt_mss_val_flt:_FillValue = 1.e+36f ;
+
+    float rec_var_flt_mss_val_flt_all(time) ;
+      rec_var_flt_mss_val_flt_all:long_name = "record variable, float, with float missing values in every position" ;
+      rec_var_flt_mss_val_flt_all:_FillValue = 1.e+36f ;
+
+    float rec_var_flt_mss_val_flt_all_but_one(time) ;
+      rec_var_flt_mss_val_flt_all_but_one:long_name = "record variable, float, with float missing values in every position but one" ;
+      rec_var_flt_mss_val_flt_all_but_one:_FillValue = 1.e+36f ;
+
+    float rec_var_flt_mss_val_flt_all_but_two(time) ;
+      rec_var_flt_mss_val_flt_all_but_two:long_name = "record variable, float, with float missing values in every position but two" ;
+      rec_var_flt_mss_val_flt_all_but_two:_FillValue = 1.e+36f ;
+
+    float rec_var_flt_mss_val_flt_pck_flt(time) ;
+      rec_var_flt_mss_val_flt_pck_flt:long_name = "record variable, float packed as float, with float missing values" ;
+      rec_var_flt_mss_val_flt_pck_flt:purpose = "CESM POP2 ocean model packs SALT, WVEL etc this way" ;
+      rec_var_flt_mss_val_flt_pck_flt:_FillValue = -9.96921e+33f ;
+      rec_var_flt_mss_val_flt_pck_flt:scale_factor = 1000. ;
+
+    float rec_var_flt_mss_val_int(time) ;
+      rec_var_flt_mss_val_int:long_name = "record variable, float, with integer missing values" ;
+      rec_var_flt_mss_val_int:_FillValue = -999.f ;
+      rec_var_flt_mss_val_int:missing_value = -999 ;
+
+    short rec_var_flt_pck(time) ;
+      rec_var_flt_pck:long_name = "record variable, float, packed into short" ;
+      rec_var_flt_pck:purpose = "Demonstrate that rounding of means of packed data are handled correctly" ;
+      rec_var_flt_pck:scale_factor = 0.1f ;
+      rec_var_flt_pck:add_offset = 100.f ;
+
+    int rec_var_int_mss_val_dbl(time) ;
+      rec_var_int_mss_val_dbl:long_name = "record variable, integer, with double missing values" ;
+      rec_var_int_mss_val_dbl:_FillValue = -999 ;
+      rec_var_int_mss_val_dbl:missing_value = -999. ;
+
+    int rec_var_int_mss_val_flt(time) ;
+      rec_var_int_mss_val_flt:long_name = "record variable, integer, with float missing values" ;
+      rec_var_int_mss_val_flt:_FillValue = -999 ;
+      rec_var_int_mss_val_flt:missing_value = -999.f ;
+
+    int rec_var_int_mss_val_int(time) ;
+      rec_var_int_mss_val_int:long_name = "record variable, integer, with integer missing values" ;
+      rec_var_int_mss_val_int:_FillValue = -999 ;
+
+    short rec_var_pck_scale_factor_only(time) ;
+      rec_var_pck_scale_factor_only:long_name = "Array packed with scale factor only" ;
+      rec_var_pck_scale_factor_only:note = "Original packed value was 1s..10s with scale_factor = 10.0d no add_offset. Unpacked value should be 10.0 = 10.0d*1s + 0.0d through 100 = 10.0d*1s + 0.0d. Average value should be 55." ;
+      rec_var_pck_scale_factor_only:scale_factor = 10. ;
+
+    float rlev(rlev) ;
+      rlev:purpose = "Monotonically decreasing coordinate pressure" ;
+
+    float rz(rlev) ;
+      rz:long_name = "Height" ;
+      rz:units = "meter" ;
+      rz:purpose = "Height stored with a monotonically decreasing coordinate" ;
+
+    float scalar_var ;
+      scalar_var:long_name = "scalar variable" ;
+      scalar_var:units = "fraction" ;
+      scalar_var:_FillValue = 1.e+36f ;
+
+    short scl_dbl_pck ;
+      scl_dbl_pck:long_name = "scalar variable, double, packed" ;
+      scl_dbl_pck:purpose = "Packed version of number with ncdiff subtraction bug" ;
+      scl_dbl_pck:scale_factor = -9.15541313801785e-05 ;
+      scl_dbl_pck:add_offset = 5. ;
+
+    short short_var ;
+      short_var:long_name = "short" ;
+
+    float td(time,dgn) ;
+      td:long_name = "two dimensional record variable stored in td (time,dgn) order (dgn means degenerate, i.e., of size 1)" ;
+
+    int th(time,lat,lon) ;
+      th:long_name = "three dimensional record variable" ;
+      th:units = "watt meter-2" ;
+      th:_FillValue = -99 ;
+
+    float three ;
+      three:long_name = "three" ;
+
+    float three_dmn_rec_var(time,lat,lon) ;
+      three_dmn_rec_var:long_name = "three dimensional record variable" ;
+      three_dmn_rec_var:units = "watt meter-2" ;
+      three_dmn_rec_var:_FillValue = -99.f ;
+
+    short three_dmn_rec_var_pck(time,lat,lon) ;
+      three_dmn_rec_var_pck:long_name = "three dimensional record variable" ;
+      three_dmn_rec_var_pck:purpose = "should unpack into identical values with three_dmn_rec_var (i.e., 1..80)" ;
+      three_dmn_rec_var_pck:units = "watt meter-2" ;
+      three_dmn_rec_var_pck:_FillValue = -99s ;
+      three_dmn_rec_var_pck:add_offset = 40.5f ;
+      three_dmn_rec_var_pck:scale_factor = -0.001205518f ;
+
+    float three_dmn_var(lat,lev,lon) ;
+      three_dmn_var:long_name = "three dimensional variable with CCM coordinate convention C=[lat,lev,lon], Fortran=(lon,lev,lat)" ;
+      three_dmn_var:units = "fraction" ;
+
+    float three_dmn_var_crd(lev,lat,lon) ;
+      three_dmn_var_crd:long_name = "three dimensional variable with COORDS coordinate convention C=[lev,lat,lon], Fortran=(lon,lat,lev)" ;
+      three_dmn_var_crd:units = "fraction" ;
+
+    double three_dmn_var_dbl(time,lat,lon) ;
+      three_dmn_var_dbl:long_name = "three dimensional record variable of type double" ;
+      three_dmn_var_dbl:units = "watt meter-2" ;
+      three_dmn_var_dbl:_FillValue = -99. ;
+
+    int three_dmn_var_int(time,lat,lon) ;
+      three_dmn_var_int:long_name = "three dimensional record variable of type int" ;
+      three_dmn_var_int:units = "watt meter-2" ;
+      three_dmn_var_int:_FillValue = -99 ;
+
+    short three_dmn_var_sht(time,lat,lon) ;
+      three_dmn_var_sht:long_name = "three dimensional record variable" ;
+      three_dmn_var_sht:units = "watt meter-2" ;
+      three_dmn_var_sht:_FillValue = -99s ;
+
+    double time(time) ;
+      time:long_name = "time" ;
+      time:units = "days since 1964-03-12 12:09:00 -9:00" ;
+      time:calendar = "gregorian" ;
+      time:bounds = "time_bnds" ;
+      time:climatology = "climatology_bounds" ;
+
+    float time_bnds(time,vrt_nbr) ;
+      time_bnds:purpose = "Cell boundaries for time coordinate" ;
+
+    float time_lon(time,lon) ;
+      time_lon:long_name = "Record variable of longitude coordinate" ;
+
+    double time_udunits(time_udunits) ;
+      time_udunits:units = "hours since 1900-01-01 00:00:0.0" ;
+      time_udunits:delta_t = "0000-00-00 06:00:0.0" ;
+      time_udunits:purpose = "The dates specified in this variable are ~1999-12-08" ;
+
+    double tm_360 ;
+      tm_360:units = "days since 2013-01-01" ;
+      tm_360:calendar = "360_day" ;
+
+    double tm_365 ;
+      tm_365:units = "days since 2013-01-01" ;
+      tm_365:calendar = "365_day" ;
+
+    double tm_366 ;
+      tm_366:units = "days since 2013-01-01" ;
+      tm_366:calendar = "366_day" ;
+
+    double tm_grg ;
+      tm_grg:units = "days since 2013-01-01" ;
+      tm_grg:calendar = "gregorian" ;
+
+    double tm_jln ;
+      tm_jln:units = "days since 2013-01-01" ;
+      tm_jln:calendar = "julian" ;
+
+    double tm_scn ;
+      tm_scn:units = "seconds since 2013-01-01" ;
+
+    double tm_std ;
+      tm_std:units = "days since 2013-01-01" ;
+
+    float tpt(time) ;
+      tpt:long_name = "Temperature" ;
+      tpt:units = "kelvin" ;
+      tpt:hieght = "Leave hieght mispelled for NCO User\'s guide example" ;
+
+    double tpt_dbl(time) ;
+      tpt_dbl:long_name = "Temperature stored as double precision floating point" ;
+      tpt_dbl:units = "kelvin" ;
+
+    float tpt_flt(time) ;
+      tpt_flt:long_name = "Temperature stored as single precision floating point" ;
+      tpt_flt:units = "kelvin" ;
+
+    float two ;
+      two:long_name = "two" ;
+
+    float two_dmn_rec_var(time,lev) ;
+      two_dmn_rec_var:long_name = "two dimensional record variable" ;
+      two_dmn_rec_var:units = "watt meter-2" ;
+
+    char two_dmn_rec_var_sng(time,lev) ;
+      two_dmn_rec_var_sng:long_name = "two dimensional record variable of string" ;
+
+    float two_dmn_var(lat,lev) ;
+      two_dmn_var:long_name = "two dimensional variable" ;
+      two_dmn_var:units = "fraction" ;
+
+    float tx(time,lon) ;
+      tx:long_name = "two dimensional record variable stored in tx (time,lon) order" ;
+
+    float txyz(time,lon,lat,lev) ;
+      txyz:long_name = "four dimensional record variable stored in txyz (time,lon,lat,lev) order" ;
+
+    float ty(time,lat) ;
+      ty:long_name = "two dimensional record variable stored in ty (time,lat) order" ;
+
+    float tyz(time,lat,lev) ;
+      tyz:long_name = "three dimensional record variable stored in tyz (time,lat,lev) order" ;
+
+    float tz(time,lev) ;
+      tz:long_name = "two dimensional record variable stored in tz (time,lev) order" ;
+
+    float u(time) ;
+      u:long_name = "Zonal wind speed" ;
+      u:units = "meter second-1" ;
+
+    double upk ;
+      upk:long_name = "Unpacked scalar variable" ;
+      upk:note = "Unpacked value is 3.0d0, upk=unpack(pck)= 2.0d0*1s + 1.0d0 = 3.0d0. Packing this variable should create an NC_SHORT scalar = 0s with packing attribute add_offset=3.0d and either no scale_factor (ncap) or scale_factor = 0.0d (ncpdq)." ;
+
+    double upk_arr(lon) ;
+      upk_arr:long_name = "Unpacked array" ;
+      upk_arr:note = "Unpacked value is -32767.d, 0.d, 1.d, 32767.d, packed is same in short. Packing algorithm should yield an NC_SHORT array = [] with packing attributes scale_factor=1.0d, add_offset=0.0d" ;
+
+    float v(time) ;
+      v:long_name = "Meridional wind speed" ;
+      v:units = "meter second-1" ;
+
+    float val_eminusten ;
+      val_eminusten:long_name = "Floating point number with exponent ending in zero to test sng_trm_trl_zro()" ;
+      val_eminusten:att_eminusten = 1.1e-10f ;
+
+    float val_half ;
+      val_half:long_name = "Scalar with value 0.5" ;
+      val_half:_FillValue = 1.e+36f ;
+
+    float val_half_half(lat) ;
+      val_half_half:long_name = "0.5,0.5" ;
+      val_half_half:_FillValue = 1.e+36f ;
+
+    short val_max_max_sht(lat) ;
+      val_max_max_sht:long_name = "17000, 17000" ;
+      val_max_max_sht:_FillValue = -99s ;
+
+    int val_one_int ;
+      val_one_int:long_name = "scalar integer equal to 1" ;
+      val_one_int:_FillValue = -99 ;
+
+    float val_one_mss(lat) ;
+      val_one_mss:long_name = "one regular value, one missing value" ;
+      val_one_mss:_FillValue = 1.e+36f ;
+
+    int val_one_mss_int(lat) ;
+      val_one_mss_int:long_name = "1, mss_val" ;
+      val_one_mss_int:_FillValue = -99 ;
+
+    int val_one_one_int(lat) ;
+      val_one_one_int:long_name = "1, 1" ;
+      val_one_one_int:_FillValue = -99 ;
+
+    float var_1D_rct(lat_times_lon) ;
+      var_1D_rct:long_name = "Variable for 2D rectangular grid stored as 1D arrays" ;
+
+    float var_1D_rrg(lat_times_lon) ;
+      var_1D_rrg:long_name = "Variable for 2D irregular grid stored as 1D arrays" ;
+
+    float var_2D_rct(lat,lon) ;
+      var_2D_rct:long_name = "Variable for 2D rectangular grid stored as 2D array" ;
+
+    float var_2D_rrg(lat,lon) ;
+      var_2D_rrg:long_name = "Variable for 2D irregular grid stored as 2D array" ;
+
+    float var_msk(lat,lon) ;
+      var_msk:long_name = "Float field for testing masks and wheres" ;
+      var_msk:units = "fraction" ;
+
+    float var_mss_0(lon) ;
+      var_mss_0:purpose = "Test mismatched missing values in variables, masks, and weights. Missing element index 0." ;
+      var_mss_0:_FillValue = 1.e+36f ;
+
+    float var_mss_1(lon) ;
+      var_mss_1:purpose = "Test mismatched missing values in variables, masks, and weights. Missing element index 1." ;
+      var_mss_1:_FillValue = 1.e+36f ;
+
+    float var_mss_2(lon) ;
+      var_mss_2:purpose = "Test mismatched missing values in variables, masks, and weights. Missing element index 2." ;
+      var_mss_2:_FillValue = 1.e+36f ;
+
+    float var_mss_3(lon) ;
+      var_mss_3:purpose = "Test mismatched missing values in variables, masks, and weights. Missing element index 3." ;
+      var_mss_3:_FillValue = 1.e+36f ;
+
+    float var_mss_nil(lon) ;
+      var_mss_nil:purpose = "Test mismatched missing values in variables, masks, and weights. Missing no elements." ;
+      var_mss_nil:_FillValue = 1.e+36f ;
+
+    float var_nm-dash ;
+      var_nm-dash:long_name = "Variable and attribute names include dash characters" ;
+      var_nm-dash:att_nm-dash = 1.e+36f ;
+
+    float vld_rng(time) ;
+      vld_rng:long_name = "Temperature" ;
+      vld_rng:purpose = "Array containing _FillValue at some locations, out-of-range values at other locations, and valid data in the remainder" ;
+      vld_rng:_FillValue = -999.f ;
+      vld_rng:valid_min = 180.f ;
+      vld_rng:valid_max = 360.f ;
+
+    float vmr_CO2 ;
+      vmr_CO2:long_name = "Volumetric mixing ratio of CO2" ;
+      vmr_CO2:units = "molecule molecule-1" ;
+
+    float weight(lat) ;
+      weight:long_name = "Gaussian weight" ;
+      weight:units = "fraction" ;
+
+    float wgt_one(lat) ;
+      wgt_one:long_name = "all values are one" ;
+
+    float wnd_spd(time,lat,lon) ;
+      wnd_spd:long_name = "wind speed" ;
+      wnd_spd:units = "meter second-1" ;
+      wnd_spd:_FillValue = -999.f ;
+
+    float wvl(wvl) ;
+      wvl:long_name = "Wavelength" ;
+      wvl:units = "meter" ;
+
+    float xyz(lon,lat,lev) ;
+      xyz:long_name = "three dimensional variable stored in xyz (lon,lat,lev) order" ;
+
+    float z(lev) ;
+      z:long_name = "Height" ;
+      z:units = "meter" ;
+      z:purpose = "Height stored with a monotonically increasing coordinate" ;
+
+    float zero ;
+      zero:long_name = "zero" ;
+
+    float zg(time,lev,lon) ;
+      zg:long_name = "three dimensional record variable to demonstrate hyperslab bug" ;
+      zg:units = "watt meter-2" ;
+      zg:_FillValue = -99.f ;
+
+  // global attributes:
+    :Conventions = "CF-1.5" ;
+    :history = "History global attribute.\n",
+      "Textual attributes like history often have embedded newlines like this.\n",
+      "Such newlines should serve as linebreaks on the screen to enhance legibility like this.\n",
+      "Friendly CDL converters print a single NC_CHAR attribute as a comma-separated list of strings where each embedded delimiter marks a linebreak. This makes poetry embedded in CDL much nicer to read (except for the printed literal \\n\'s---those are an eyesore):\n",
+      "\n",
+      "A POET by Hafiz\n",
+      "\n",
+      "A poet is someone\n",
+      "Who can pour light into a cup,\n",
+      "Then raise it to nourish\n",
+      "Your beautiful parched, holy mouth\n" ;
+    :lorem_ipsum = "The Lorem Ipsum attribute demonstrates the legibility of text without embedded linebreaks:\n",
+      "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Lady Gaga amat indueris vestimento laetus. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ;
+    :julian_day = 200000.04 ;
+    :RCS_Header = "$Header$" ;
+
+
+  data:
+    AQ01 = 1e+36 ; 
+
+    H2O = 1 ; 
+
+    H2OH2O = 1 ; 
+
+    H2O_ice = 1 ; 
+
+    H2O_lqd = 1 ; 
+
+    H2SO4 = 1 ; 
+
+    Lat = -45, 45 ; 
+
+    LatLon = 
+    0, 1, 2, 3, 
+    4, 5, 6, 7 ; 
+
+    Lon = -180, -90, 0, 90 ; 
+
+    ORO = 
+    0, 1, 0, 0, 
+    1, 1, 0, 2 ; 
+
+    P0 = 100000 ; 
+
+    PS = 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325, 
+    101325, 101325, 101325, 101325 ; 
+
+    Q = 1e+36 ; 
+
+    Q01 = 1 ; 
+
+    Q01Q = 1e+36 ; 
+
+    Q02 = 2 ; 
+
+    Q03 = 3 ; 
+
+    Q04 = 4 ; 
+
+    Q05 = 5 ; 
+
+    Q06 = 6 ; 
+
+    Q07 = 7 ; 
+
+    Q08 = 8 ; 
+
+    Q09 = 9 ; 
+
+    Q1 = 1e+36 ; 
+
+    Q10 = 10 ; 
+
+    Q100 = 100 ; 
+
+    Q11 = 11 ; 
+
+    Q12 = 12 ; 
+
+    Q13 = 13 ; 
+
+    Q14 = 14 ; 
+
+    Q15 = 15 ; 
+
+    Q16 = 16 ; 
+
+    Q17 = 17 ; 
+
+    Q18 = 18 ; 
+
+    Q19 = 19 ; 
+
+    Q20 = 20 ; 
+
+    Q21 = 21 ; 
+
+    Q22 = 22 ; 
+
+    Q23 = 23 ; 
+
+    Q24 = 24 ; 
+
+    Q25 = 25 ; 
+
+    Q26 = 26 ; 
+
+    Q27 = 27 ; 
+
+    Q28 = 28 ; 
+
+    Q29 = 29 ; 
+
+    Q30 = 30 ; 
+
+    Q31 = 31 ; 
+
+    Q32 = 32 ; 
+
+    Q33 = 33 ; 
+
+    Q34 = 34 ; 
+
+    Q35 = 35 ; 
+
+    Q36 = 36 ; 
+
+    Q37 = 37 ; 
+
+    Q38 = 38 ; 
+
+    Q39 = 39 ; 
+
+    Q40 = 40 ; 
+
+    Q41 = 41 ; 
+
+    Q42 = 42 ; 
+
+    Q43 = 43 ; 
+
+    Q44 = 44 ; 
+
+    Q45 = 45 ; 
+
+    Q46 = 46 ; 
+
+    Q47 = 47 ; 
+
+    Q48 = 48 ; 
+
+    Q49 = 49 ; 
+
+    Q50 = 50 ; 
+
+    Q51 = 51 ; 
+
+    Q52 = 52 ; 
+
+    Q53 = 53 ; 
+
+    Q54 = 54 ; 
+
+    Q55 = 55 ; 
+
+    Q56 = 56 ; 
+
+    Q57 = 57 ; 
+
+    Q58 = 58 ; 
+
+    Q59 = 59 ; 
+
+    Q60 = 60 ; 
+
+    Q61 = 61 ; 
+
+    Q62 = 62 ; 
+
+    Q63 = 63 ; 
+
+    Q64 = 64 ; 
+
+    Q65 = 65 ; 
+
+    Q66 = 66 ; 
+
+    Q67 = 67 ; 
+
+    Q68 = 68 ; 
+
+    Q69 = 69 ; 
+
+    Q70 = 70 ; 
+
+    Q71 = 71 ; 
+
+    Q72 = 72 ; 
+
+    Q73 = 73 ; 
+
+    Q74 = 74 ; 
+
+    Q75 = 75 ; 
+
+    Q76 = 76 ; 
+
+    Q77 = 77 ; 
+
+    Q78 = 78 ; 
+
+    Q79 = 79 ; 
+
+    Q80 = 80 ; 
+
+    Q81 = 81 ; 
+
+    Q82 = 82 ; 
+
+    Q83 = 83 ; 
+
+    Q84 = 84 ; 
+
+    Q85 = 85 ; 
+
+    Q86 = 86 ; 
+
+    Q87 = 87 ; 
+
+    Q88 = 88 ; 
+
+    Q89 = 89 ; 
+
+    Q90 = 90 ; 
+
+    Q91 = 91 ; 
+
+    Q92 = 92 ; 
+
+    Q93 = 93 ; 
+
+    Q94 = 94 ; 
+
+    Q95 = 95 ; 
+
+    Q96 = 96 ; 
+
+    Q97 = 97 ; 
+
+    Q98 = 98 ; 
+
+    Q99 = 99 ; 
+
+    QA01 = 1e+36 ; 
+
+    QQ01 = 1e+36 ; 
+
+    RDM = 1, 9, 36, 84, 126, 126, 84, 36, 9, 1 ; 
+
+    SALT = _, 0.032, 0.033, 0.034, 0.035, 0.036, 0.037, 0.038, _, _ ; 
+
+    albers_conical_equal_area = "" ; 
+
+    area = 10, 10 ; 
+
+    area2 = 20, 5 ; 
+
+    area_asm = 1, 2 ; 
+
+    areacella = 
+    1, 1, 2, 2, 
+    3, 3, 4, 4 ; 
+
+    att_sng = 20 ; 
+
+    att_var = 10, 10.1, 10.2, 10.3, 10.40101, 10.5, 10.6, 10.7, 10.8, 10.99 ; 
+
+    att_var_jsn = 73 ; 
+
+    att_var_spc_chr = 73 ; 
+
+    bnd_var = 
+    1, 2, 
+    3, 4, 
+    5, 6 ; 
+
+    byt_2D = 
+    0, 1, 2, 3, 
+    4, 5, 6, 7 ; 
+
+    byt_3D = 
+    0, 1, 2, 3, 
+    4, 5, 6, 7, 
+    8, 9, 10, 11, 
+    12, 13, 14, 15, 
+    16, 17, 18, 19, 
+    20, 21, 22, 23 ; 
+
+    byt_3D_rec = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8, 
+    9, 10, 11, 12, 
+    13, 14, 15, 16, 
+    17, 18, 19, 20, 
+    21, 22, 23, 24, 
+    25, 26, 27, 28, 
+    29, 30, 31, 32, 
+    33, 34, 35, 36, 
+    37, 38, 39, 40, 
+    41, 42, 43, 44, 
+    45, 46, 47, 48, 
+    49, 50, 51, 52, 
+    53, 54, 55, 56, 
+    57, 58, 59, 60, 
+    61, 62, 63, 64, 
+    65, 66, 67, 68, 
+    69, 70, 71, 72, 
+    73, 74, 75, 76, 
+    77, 78, 79, 80 ; 
+
+    byt_arr = 
+    0, 1, 2, 3, 
+    4, 5, 6, 7 ; 
+
+    byte_var = 122 ; 
+
+    byte_var_neg = -122 ; 
+
+    char_var = "z" ; 
+
+    char_var_1D_arr = "two words" ; 
+
+    char_var_2D_arr = 
+    "one", 
+    "two" ; 
+
+    char_var_nul = "" ; 
+
+    char_var_nul_c_format = "0" ; 
+
+    char_var_space = " " ; 
+
+    char_var_zero = "0" ; 
+
+    climatology_bounds = 
+    0.5, 1.5, 
+    1.5, 2.5, 
+    2.5, 3.5, 
+    3.5, 4.5, 
+    4.5, 5.5, 
+    5.5, 6.5, 
+    6.5, 7.5, 
+    7.5, 8.5, 
+    8.5, 9.5, 
+    9.5, 10.5 ; 
+
+    cnv_CF_crd = 273.1, 273.2, 273.3, 273.4, 273.5, 273.6, 273.7, 273.8 ; 
+
+    cnv_CF_grd = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8 ; 
+
+    cnv_CF_ncl = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    cnv_CF_ncl_var_1 = 11, 22, 23, 24, 25, 26, 27, 28, 29, 30 ; 
+
+    cnv_CF_ncl_var_2 = 21, 32, 33, 34, 35, 36, 37, 38, 39, 40 ; 
+
+    date = 640224, 640225, 640226, 640227, 640228, 640301, 640302, 640303, 640304, 640305 ; 
+
+    date_int = 1964, 3, 12, 12, 9 ; 
+
+    date_rec = 
+    "2010-11-01T00:00:00.000000", 
+    "2010-11-01T01:00:00.000000", 
+    "2010-11-01T02:00:00.000000", 
+    "2010-11-01T03:00:00.000000", 
+    "2010-11-01T04:00:00.000000", 
+    "2010-11-01T05:00:00.000000", 
+    "2010-11-01T06:00:00.000000", 
+    "2010-11-01T07:00:00.000000", 
+    "2010-11-01T08:00:00.000000", 
+    "2010-11-01T09:00:00.000000" ; 
+
+    date_sng = "2010-11-01T00:00:00.000000" ; 
+
+    dgn = 73 ; 
+
+    dgn_var = 73 ; 
+
+    double_var = 10 ; 
+
+    double_var2 = 10 ; 
+
+    dps_dry = 73 ; 
+
+    dps_ttl = 73 ; 
+
+    dps_wet = 73 ; 
+
+    e_dbl = 2.71828182846 ; 
+
+    e_flt = 2.718282 ; 
+
+    fl_dmn = "ab3" ; 
+
+    fl_nm = "/home/zender/nco/data/in.cdl" ; 
+
+    fl_nm_arr = 
+    "/data/zender/dstccm04/dstccm04_8589_01.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_02.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_03.nc" ; 
+
+    fl_nm_rec = 
+    "/data/zender/dstccm04/dstccm04_8589_01.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_02.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_03.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_04.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_05.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_06.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_07.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_08.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_09.nc", 
+    "/data/zender/dstccm04/dstccm04_8589_10.nc" ; 
+
+    fll_val = 73, _, 73, _ ; 
+
+    fll_val_mss_val = 73, _, 73, _ ; 
+
+    float_var = 10 ; 
+
+    four = 4 ; 
+
+    four_dmn_rec_var = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8, 
+    9, 10, 11, 12, 
+    13, 14, 15, 16, 
+    17, 18, 19, 20, 
+    21, 22, 23, 24, 
+    25, 26, 27, 28, 
+    29, 30, 31, 32, 
+    33, 34, 35, 36, 
+    37, 38, 39, 40, 
+    41, 42, 43, 44, 
+    45, 46, 47, 48, 
+    49, 50, 51, 52, 
+    53, 54, 55, 56, 
+    57, 58, 59, 60, 
+    61, 62, 63, 64, 
+    65, 66, 67, 68, 
+    69, 70, 71, 72, 
+    73, 74, 75, 76, 
+    77, 78, 79, 80, 
+    81, 82, 83, 84, 
+    85, 86, 87, 88, 
+    89, 90, 91, 92, 
+    93, 94, 95, 96, 
+    97, 98, 99, 100, 
+    101, 102, 103, 104, 
+    105, 106, 107, 108, 
+    109, 110, 111, 112, 
+    113, 114, 115, 116, 
+    117, 118, 119, 120, 
+    121, 122, 123, 124, 
+    125, 126, 127, 128, 
+    129, 130, 131, 132, 
+    133, 134, 135, 136, 
+    137, 138, 139, 140, 
+    141, 142, 143, 144, 
+    145, 146, 147, 148, 
+    149, 150, 151, 152, 
+    153, 154, 155, 156, 
+    157, 158, 159, 160, 
+    161, 162, 163, 164, 
+    165, 166, 167, 168, 
+    169, 170, 171, 172, 
+    173, 174, 175, 176, 
+    177, 178, 179, 180, 
+    181, 182, 183, 184, 
+    185, 186, 187, 188, 
+    189, 190, 191, 192, 
+    193, 194, 195, 196, 
+    197, 198, 199, 200, 
+    201, 202, 203, 204, 
+    205, 206, 207, 208, 
+    209, 210, 211, 212, 
+    213, 214, 215, 216, 
+    217, 218, 219, 220, 
+    221, 222, 223, 224, 
+    225, 226, 227, 228, 
+    229, 230, 231, 232, 
+    233, 234, 235, 236, 
+    237, 238, 239, 240 ; 
+
+    g = 9.8 ; 
+
+    gds_3dvar = 
+    273.1, 273.2, 273.3, 273.4, 273.5, 273.6, 273.7, 273.8, 
+    274.1, 274.2, 274.3, 274.4, 274.5, 274.6, 274.7, 274.8, 
+    275.1, 275.2, 275.3, 275.4, 275.5, 274.5, 275.7, 275.8, 
+    276.1, 276.2, 276.3, 276.4, 276.5, 276.5, 276.7, 276.8, 
+    277.1, 277.2, 277.3, 277.4, 277.5, 277.5, 277.7, 277.8, 
+    278.1, 278.2, 278.3, 278.4, 278.5, 278.6, 278.7, 278.8, 
+    279.1, 279.2, 279.3, 279.4, 279.5, 279.9, 279.7, 279.8, 
+    280.1, 280.2, 280.3, 280.4, 280.5, 280.9, 280.7, 280.8, 
+    281.1, 281.2, 281.3, 281.4, 281.5, 281.9, 281.7, 281.8, 
+    282.1, 282.2, 282.3, 282.4, 282.5, 282.9, 282.7, 282.8 ; 
+
+    gds_crd = 0, 1, 2, 3, 4, 5, 6, 7 ; 
+
+    gds_var = 273.1, 273.2, 273.3, 273.4, 273.5, 273.6, 273.7, 273.8 ; 
+
+    gds_var_ncd = 273.1, 273.2, 273.3, 273.4, 273.5, 273.6, 273.7, 273.8 ; 
+
+    grv_sfc = 9.80665 ; 
+
+    gw = 10, 10 ; 
+
+    gw_T42 = -87.8638, -85.09653, -82.31291, -79.5256, -76.7369, -73.94752, -71.15775, -68.36776, -65.57761, -62.78735, -59.99702, -57.20663, -54.4162, -51.62573, -48.83524, -46.04473, -43.2542, -40.46365, -37.67309, -34.88252, -32.09195, -29.30136, -26.51077, -23.72017, -20.92957, -18.13897, -15.34836, -12.55776, -9.767146, -6.976534, -4.185921, -1.395307, 1.395307, 4.185921, 6.976534, 9.767146, 12.55776, 15.34836, 18.13897, 20.92957, 23.72017, 26.51077, 29.30136, 32.09195, 34.88252, 37 [...]
+
+    hyai = 0.002255, 0.0438226, 0, 0 ; 
+
+    hyam = 0.0036, 0.0019894, 0 ; 
+
+    hybi = 0, 0.457453, 0.985, 1 ; 
+
+    hybm = 0, 0.52, 0.992 ; 
+
+    ilev = 50, 200, 750, 1005 ; 
+
+    int_var = 10 ; 
+
+    lat = -90, 90 ; 
+
+    lat_1D_rct = -90, -90, -90, -90, 90, 90, 90, 90 ; 
+
+    lat_1D_rrg = -90, -30, -30, 0, 0, 30, 30, 90 ; 
+
+    lat_2D_rct = 
+    -90, -90, -90, -90, 
+    90, 90, 90, 90 ; 
+
+    lat_2D_rrg = 
+    -90, -30, -30, 0, 
+    0, 30, 30, 90 ; 
+
+    lat_T42 = -88.24009, -85.09245, -82.31198, -79.52525, -76.73673, -73.94742, -71.1577, -68.36772, -65.57758, -62.78733, -59.99701, -57.20662, -54.41619, -51.62573, -48.83524, -46.04472, -43.25419, -40.46365, -37.67309, -34.88252, -32.09194, -29.30136, -26.51077, -23.72017, -20.92957, -18.13897, -15.34836, -12.55776, -9.767145, -6.976533, -4.185921, -1.395307, 1.395307, 4.185921, 6.976533, 9.767145, 12.55776, 15.34836, 18.13897, 20.92957, 23.72017, 26.51077, 29.30136, 32.09194, 34.8825 [...]
+
+    lat_bnd = 
+    -90, 0, 
+    0, 90 ; 
+
+    lat_cal = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    lat_cpy = -90, 90 ; 
+
+    lat_gds = -90, -30, -30, 0, 0, 30, 30, 90 ; 
+
+    lat_gds_ncd = -90, -30, -30, 0, 0, 30, 30, 90 ; 
+
+    lat_grd = -90, 0, 90 ; 
+
+    lat_times_lon = 0, 1, 2, 3, 4, 5, 6, 7 ; 
+
+    lat_times_lon_nbr = 8 ; 
+
+    lat_var = 1, 2 ; 
+
+    lat_wgt = 1, 2 ; 
+
+    lev = 100, 500, 1000 ; 
+
+    lev_bnd = 
+    0, 300, 
+    300, 750, 
+    750, 1013.25 ; 
+
+    lev_cpy = 100, 500, 1000 ; 
+
+    lev_var = 100, 500, 1000 ; 
+
+    lev_wgt = 10, 2, 1 ; 
+
+    lon = 0, 90, 180, 270 ; 
+
+    lon_1D_rct = 0, 90, 180, 270, 0, 90, 180, 270 ; 
+
+    lon_1D_rrg = 0, 0, 180, 0, 180, 0, 180, 0 ; 
+
+    lon_2D_rct = 
+    0, 90, 180, 270, 
+    0, 90, 180, 270 ; 
+
+    lon_2D_rrg = 
+    0, 0, 180, 0, 
+    180, 0, 180, 0 ; 
+
+    lon_T42 = 0, 2.8125, 5.625, 8.4375, 11.25, 14.0625, 16.875, 19.6875, 22.5, 25.3125, 28.125, 30.9375, 33.75, 36.5625, 39.375, 42.1875, 45, 47.8125, 50.625, 53.4375, 56.25, 59.0625, 61.875, 64.6875, 67.5, 70.3125, 73.125, 75.9375, 78.75, 81.5625, 84.375, 87.1875, 90, 92.8125, 95.625, 98.4375, 101.25, 104.0625, 106.875, 109.6875, 112.5, 115.3125, 118.125, 120.9375, 123.75, 126.5625, 129.375, 132.1875, 135, 137.8125, 140.625, 143.4375, 146.25, 149.0625, 151.875, 154.6875, 157.5, 160.3125 [...]
+
+    lon_cal = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    lon_gds = 0, 0, 180, 0, 180, 0, 180, 0 ; 
+
+    lon_gds_ncd = 0, 0, 180, 0, 180, 0, 180, 0 ; 
+
+    lon_grd = -45, 45, 135, 225, 315 ; 
+
+    lon_wgt = 0.347855, 0.652145, 0.652145, 0.347855 ; 
+
+    lond = 0, 90, 180, 270 ; 
+
+    lonf = 0, 90, 180, 270 ; 
+
+    long_var = 10 ; 
+
+    lsmlev = 0.05, 0.1, 0.2, 0.5, 1, 3 ; 
+
+    mask = 
+    0, 1, 0, 0, 
+    1, 1, 0, 1 ; 
+
+    md5_a = "a" ; 
+
+    md5_abc = "abc" ; 
+
+    mmr_CO2 = 0.000611 ; 
+
+    msk_prt_mss_prt = 0.5, _, 1.5, _ ; 
+
+    mss_val = 73, _, 73, _ ; 
+
+    mss_val_all = _, _, _, _ ; 
+
+    mss_val_fst = _, 73, _, 73 ; 
+
+    mss_val_scl = _ ; 
+
+    mss_val_scl_sml = _ ; 
+
+    nan_arr = 0, 73 ; 
+
+    nan_scl = _ ; 
+
+    nbdate = 640224 ; 
+
+    negative_one = -1 ; 
+
+    nm_pnd = 1 ; 
+
+    nm_spc = 1 ; 
+
+    no_mss_val = 73, 1e+36, 73, 1e+36 ; 
+
+    non_nul_trm_char_one_dmn = "ab" ; 
+
+    non_nul_trm_char_two_dmn = 
+    "abcd", 
+    "efgh", 
+    "ijkm" ; 
+
+    non_rec_var_flt_pck = 1, 2, 3, 4 ; 
+
+    od = 20, 22, 24, 26, 28, 30, 32, 34, 36, 38 ; 
+
+    one = 1 ; 
+
+    one_dmn_int_val_one = 1, 1 ; 
+
+    one_dmn_int_val_two = 2, 2 ; 
+
+    one_dmn_rec_var = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    one_dmn_rec_var__FillValue = 1, 2, 3, 4, 5, 6, 7, 8, 9, _ ; 
+
+    one_dmn_rec_var_dbl = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    one_dmn_rec_var_flt = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    one_dmn_rec_var_flt_mss = _, 2, 3, 4, 5, 6, 7, 8, 9, _ ; 
+
+    one_dmn_rec_var_flt_mss_scl = _, 2, 3, 4, 5, 6, 7, 8, 9, _ ; 
+
+    one_dmn_rec_var_flt_scl = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    one_dmn_rec_var_mdn = 1, 1, 2, 2, 2, 2, 10, 10, 10, 10 ; 
+
+    one_dmn_rec_var_mdn__FillValue = 1, _, 2, 2, _, _, 10, 10, 10, _ ; 
+
+    one_dmn_rec_var_missing_value = 1, 2, 3, 4, 5, 6, 7, 8, 9, 1e+36 ; 
+
+    one_dmn_rec_var_mss_val = _, _, _, _, _, _, _, _, _, _ ; 
+
+    one_dmn_rec_var_mss_val_arr = _, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    one_dmn_rec_var_sng = "Hello Worl" ; 
+
+    one_dmn_rec_var_unsorted = 10, 4, 6, 2, 8, 1, 9, 7, 3, 5 ; 
+
+    one_dmn_rec_var_unsorted__FillValue = _, 4, 6, 2, 8, 1, 9, 7, 3, 5 ; 
+
+    one_dmn_rec_wgt = 2, 1, 0, 0, 0, 0, 0, 0, 0, 0 ; 
+
+    one_dmn_var = 1, 10 ; 
+
+    orog = 
+    0, 1, 0, 0, 
+    1, 1, 0, 2 ; 
+
+    orog2 = 
+    1, 1, 1, 1, 
+    1, 1, 1, 1 ; 
+
+    orog3 = 
+    0, 0, 0, 0, 
+    1, 1, 1, 1 ; 
+
+    pck = 1 ; 
+
+    pck_3 = 1 ; 
+
+    pck_5 = 2 ; 
+
+    pck_7 = 1 ; 
+
+    pck_arr = -32767, 0, 1, 32767 ; 
+
+    pi = 3.14159265358979 ; 
+
+    pi_arr_dbl = 
+    3.14159265358979, 3.14159265358979, 3.14159265358979, 3.14159265358979, 
+    3.14159265358979, 3.14159265358979, 3.14159265358979, 3.14159265358979 ; 
+
+    pi_arr_flt = 
+    3.141593, 3.141593, 3.141593, 3.141593, 
+    3.141593, 3.141593, 3.141593, 3.141593 ; 
+
+    ppc_bgr = 1.234568e+29, 1.234568e+28, 1.234568e+27, 1.234568e+26, 1.234568e+25, 1.234568e+24, 1.234568e+23, 1.234568e+22, 1.234568e+21, 1.234568e+20 ; 
+
+    ppc_bgr_scl = 1.234568e+20 ; 
+
+    ppc_big = 0.0123456789, 0.123456789, 1.23456789, 12.3456789, 123.456789, 1234.56789, 12345.6789, 123456.789, 1234567.89, 12345678.9 ; 
+
+    ppc_dbl = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.12345678, 0.123456789 ; 
+
+    ppc_flt = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.1234568, 0.1234568 ; 
+
+    ppc_hgh = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.12345678, 0.123456789 ; 
+
+    ppc_hgr = 0.123456789, 0.12345678901, 0.123456789012, 0.1234567890123, 0.12345678901234, 0.123456789012345, 0.123456789012346, 0.123456789012346, 0.123456789012346, 0.123456789012346 ; 
+
+    ppc_zro_dbl = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; 
+
+    ppc_zro_flt = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; 
+
+    ppc_zro_int = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; 
+
+    prs_sfc = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8, 
+    9, 10, 11, 12, 
+    13, 14, 15, 16, 
+    17, 18, 19, 20, 
+    21, 22, 23, 24, 
+    25, 26, 27, 28, 
+    29, 30, 31, 32, 
+    33, 34, 35, 36, 
+    37, 38, 39, 40, 
+    41, 42, 43, 44, 
+    45, 46, 47, 48, 
+    49, 50, 51, 52, 
+    53, 54, 55, 56, 
+    57, 58, 59, 60, 
+    61, 62, 63, 64, 
+    65, 66, 67, 68, 
+    69, 70, 71, 72, 
+    73, 74, 75, 76, 
+    77, 78, 79, 80 ; 
+
+    rec_var_dbl = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    rec_var_dbl_mss_val_dbl_pck = _, 32767, 21845, 10922, 0, -10922, -21845, -32767, _, _ ; 
+
+    rec_var_dbl_mss_val_dbl_pck_lng = _, 32767, 21845, 10922, 0, -10922, -21845, -32767, _, _ ; 
+
+    rec_var_dbl_mss_val_dbl_upk = _, 2, 3, 4, 5, 6, 7, 8, _, _ ; 
+
+    rec_var_dbl_mss_val_sht_pck = _, 32767, 21845, 10922, 0, -10922, -21845, -32767, _, _ ; 
+
+    rec_var_dbl_mss_val_sht_pck_sht = _, 32767, 21845, 10922, 0, -10922, -21845, -32767, _, _ ; 
+
+    rec_var_dbl_mss_val_sht_upk = _, 2, 3, 4, 5, 6, 7, 8, _, _ ; 
+
+    rec_var_dbl_pck = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    rec_var_flt = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    rec_var_flt_mss_val_dbl = _, 2, 3, 4, 5, 6, 7, 8, _, _ ; 
+
+    rec_var_flt_mss_val_flt = _, 2, 3, 4, 5, 6, 7, 8, _, _ ; 
+
+    rec_var_flt_mss_val_flt_all = _, _, _, _, _, _, _, _, _, _ ; 
+
+    rec_var_flt_mss_val_flt_all_but_one = _, _, _, _, 5, _, _, _, _, _ ; 
+
+    rec_var_flt_mss_val_flt_all_but_two = _, _, _, _, 5, _, _, _, _, 10 ; 
+
+    rec_var_flt_mss_val_flt_pck_flt = _, 0.032, 0.033, 0.034, 0.035, 0.036, 0.037, 0.038, _, _ ; 
+
+    rec_var_flt_mss_val_int = _, 2, 3, 4, 5, 6, 7, 8, _, _ ; 
+
+    rec_var_flt_pck = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    rec_var_int_mss_val_dbl = _, 2, 3, 4, 5, 6, 7, 8, _, _ ; 
+
+    rec_var_int_mss_val_flt = _, 2, 3, 4, 5, 6, 7, 8, _, _ ; 
+
+    rec_var_int_mss_val_int = _, 2, 3, 4, 5, 6, 7, 8, _, _ ; 
+
+    rec_var_pck_scale_factor_only = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    rlev = 1000, 500, 100 ; 
+
+    rz = 0, 5000, 17000 ; 
+
+    scalar_var = 10 ; 
+
+    scl_dbl_pck = 10922 ; 
+
+    short_var = 10 ; 
+
+    td = 
+    1, 
+    2, 
+    3, 
+    4, 
+    5, 
+    6, 
+    7, 
+    8, 
+    9, 
+    10 ; 
+
+    th = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8, 
+    9, 10, 11, 12, 
+    13, 14, 15, 16, 
+    17, 18, 19, 20, 
+    21, 22, 23, 24, 
+    _, _, _, _, 
+    _, _, _, _, 
+    33, 34, 35, 36, 
+    37, 38, 39, 40, 
+    41, 42, 43, 44, 
+    45, 46, 47, 48, 
+    49, 50, 51, 52, 
+    53, 54, 55, 56, 
+    _, 58, 59, 60, 
+    61, 62, 63, 64, 
+    65, 66, 67, 68, 
+    69, 70, 71, 72, 
+    _, 74, 75, 76, 
+    77, 78, 79, _ ; 
+
+    three = 3 ; 
+
+    three_dmn_rec_var = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8, 
+    9, 10, 11, 12, 
+    13, 14, 15, 16, 
+    17, 18, 19, 20, 
+    21, 22, 23, 24, 
+    25, 26, 27, 28, 
+    29, 30, 31, 32, 
+    33, 34, 35, 36, 
+    37, 38, 39, 40, 
+    41, 42, 43, 44, 
+    45, 46, 47, 48, 
+    49, 50, 51, 52, 
+    53, 54, 55, 56, 
+    57, 58, 59, 60, 
+    61, 62, 63, 64, 
+    65, 66, 67, 68, 
+    69, 70, 71, 72, 
+    73, 74, 75, 76, 
+    77, 78, 79, 80 ; 
+
+    three_dmn_rec_var_pck = 
+    32766, 31936, 31107, 30277, 
+    29448, 28618, 27789, 26959, 
+    26130, 25300, 24471, 23641, 
+    22812, 21982, 21153, 20323, 
+    19494, 18664, 17835, 17005, 
+    16176, 15346, 14517, 13687, 
+    12858, 12028, 11199, 10369, 
+    9539, 8710, 7880, 7051, 
+    6221, 5392, 4562, 3733, 
+    2903, 2074, 1244, 415, 
+    -415, -1244, -2074, -2903, 
+    -3733, -4562, -5392, -6221, 
+    -7051, -7880, -8710, -9539, 
+    -10369, -11199, -12028, -12858, 
+    -13687, -14517, -15346, -16176, 
+    -17005, -17835, -18664, -19494, 
+    -20323, -21153, -21982, -22812, 
+    -23641, -24471, -25300, -26130, 
+    -26959, -27789, -28618, -29448, 
+    -30277, -31107, -31936, -32766 ; 
+
+    three_dmn_var = 
+    0, 1, 2, 3, 
+    4, 5, 6, 7, 
+    8, 9, 10, 11, 
+    12, 13, 14, 15, 
+    16, 17, 18, 19, 
+    20, 21, 22, 23 ; 
+
+    three_dmn_var_crd = 
+    0, 1, 2, 3, 
+    12, 13, 14, 15, 
+    4, 5, 6, 7, 
+    16, 17, 18, 19, 
+    8, 9, 10, 11, 
+    20, 21, 22, 23 ; 
+
+    three_dmn_var_dbl = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8, 
+    9, 10, 11, 12, 
+    13, 14, 15, 16, 
+    17, 18, 19, 20, 
+    21, 22, 23, 24, 
+    _, _, _, _, 
+    _, _, _, _, 
+    33, 34, 35, 36, 
+    37, 38, 39, 40, 
+    41, 42, 43, 44, 
+    45, 46, 47, 48, 
+    49, 50, 51, 52, 
+    53, 54, 55, 56, 
+    _, 58, 59, 60, 
+    61, 62, 63, 64, 
+    65, 66, 67, 68, 
+    69, 70, 71, 72, 
+    _, 74, 75, 76, 
+    77, 78, 79, _ ; 
+
+    three_dmn_var_int = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8, 
+    9, 10, 11, 12, 
+    13, 14, 15, 16, 
+    _, _, _, _, 
+    _, _, _, _, 
+    25, 26, 27, 28, 
+    29, 30, 31, 32, 
+    33, 34, 35, 36, 
+    37, 38, 39, 40, 
+    41, _, 43, 44, 
+    45, 46, 47, 48, 
+    49, 50, 51, 52, 
+    53, 54, 55, 56, 
+    _, 58, 59, 60, 
+    _, 62, 63, 64, 
+    65, _, 67, 68, 
+    69, 70, 71, 72, 
+    _, 74, 75, _, 
+    77, 78, 79, 80 ; 
+
+    three_dmn_var_sht = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8, 
+    _, 10, 11, 12, 
+    13, 14, 15, 16, 
+    17, 18, 19, 20, 
+    21, 22, 23, 24, 
+    25, 26, 27, 28, 
+    29, 30, 31, 32, 
+    _, 34, 35, _, 
+    37, 38, 39, 40, 
+    41, 42, 43, 44, 
+    _, 46, 47, 48, 
+    49, 50, 51, 52, 
+    53, 54, 55, 56, 
+    57, 58, 59, _, 
+    61, 62, 63, 64, 
+    65, 66, 67, 68, 
+    69, 70, 71, 72, 
+    _, _, _, _, 
+    _, _, _, _ ; 
+
+    time = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    time_bnds = 
+    0.5, 1.5, 
+    1.5, 2.5, 
+    2.5, 3.5, 
+    3.5, 4.5, 
+    4.5, 5.5, 
+    5.5, 6.5, 
+    6.5, 7.5, 
+    7.5, 8.5, 
+    8.5, 9.5, 
+    9.5, 10.5 ; 
+
+    time_lon = 
+    0, 90, 180, 270, 
+    0, 90, 180, 270, 
+    0, 90, 180, 270, 
+    0, 90, 180, 270, 
+    0, 90, 180, 270, 
+    0, 90, 180, 270, 
+    0, 90, 180, 270, 
+    0, 90, 180, 270, 
+    0, 90, 180, 270, 
+    0, 90, 180, 270 ; 
+
+    time_udunits = 876012, 876018, 876024 ; 
+
+    tm_360 = 59 ; 
+
+    tm_365 = 59 ; 
+
+    tm_366 = 59 ; 
+
+    tm_grg = 59 ; 
+
+    tm_jln = 59 ; 
+
+    tm_scn = 59 ; 
+
+    tm_std = 59 ; 
+
+    tpt = 273.1, 273.2, 273.3, 273.4, 273.5, 273.6, 273.7, 273.8, 273.9, 274 ; 
+
+    tpt_dbl = 273.1, 273.2, 273.3, 273.4, 273.5, 273.6, 273.7, 273.8, 273.9, 274 ; 
+
+    tpt_flt = 273.1, 273.2, 273.3, 273.4, 273.5, 273.6, 273.7, 273.8, 273.9, 274 ; 
+
+    two = 2 ; 
+
+    two_dmn_rec_var = 
+    1, 2, 3, 
+    1, 2.1, 3, 
+    1, 2.2, 3, 
+    1, 2.3, 3, 
+    1, 2.4, 3, 
+    1, 2.5, 3, 
+    1, 2.6, 3, 
+    1, 2.7, 3, 
+    1, 2.8, 3, 
+    1, 2.9, 3 ; 
+
+    two_dmn_rec_var_sng = 
+    "abc", 
+    "bcd", 
+    "cde", 
+    "def", 
+    "efg", 
+    "fgh", 
+    "ghi", 
+    "hij", 
+    "jkl", 
+    "klm" ; 
+
+    two_dmn_var = 
+    1.5, 5.5, 9.5, 
+    13.5, 17.5, 21.5 ; 
+
+    tx = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8, 
+    9, 10, 11, 12, 
+    13, 14, 15, 16, 
+    17, 18, 19, 20, 
+    21, 22, 23, 24, 
+    25, 26, 27, 28, 
+    29, 30, 31, 32, 
+    33, 34, 35, 36, 
+    37, 38, 39, 40 ; 
+
+    txyz = 
+    1, 2, 3, 
+    4, 5, 6, 
+    7, 8, 9, 
+    10, 11, 12, 
+    13, 14, 15, 
+    16, 17, 18, 
+    19, 20, 21, 
+    22, 23, 24, 
+    25, 26, 27, 
+    28, 29, 30, 
+    31, 32, 33, 
+    34, 35, 36, 
+    37, 38, 39, 
+    40, 41, 42, 
+    43, 44, 45, 
+    46, 47, 48, 
+    49, 50, 51, 
+    52, 53, 54, 
+    55, 56, 57, 
+    58, 59, 60, 
+    61, 62, 63, 
+    64, 65, 66, 
+    67, 68, 69, 
+    70, 71, 72, 
+    73, 74, 75, 
+    76, 77, 78, 
+    79, 80, 81, 
+    82, 83, 84, 
+    85, 86, 87, 
+    88, 89, 90, 
+    91, 92, 93, 
+    94, 95, 96, 
+    97, 98, 99, 
+    100, 101, 102, 
+    103, 104, 105, 
+    106, 107, 108, 
+    109, 110, 111, 
+    112, 113, 114, 
+    115, 116, 117, 
+    118, 119, 120, 
+    121, 122, 123, 
+    124, 125, 126, 
+    127, 128, 129, 
+    130, 131, 132, 
+    133, 134, 135, 
+    136, 137, 138, 
+    139, 140, 141, 
+    142, 143, 144, 
+    145, 146, 147, 
+    148, 149, 150, 
+    151, 152, 153, 
+    154, 155, 156, 
+    157, 158, 159, 
+    160, 161, 162, 
+    163, 164, 165, 
+    166, 167, 168, 
+    169, 170, 171, 
+    172, 173, 174, 
+    175, 176, 177, 
+    178, 179, 180, 
+    181, 182, 183, 
+    184, 185, 186, 
+    187, 188, 189, 
+    190, 191, 192, 
+    193, 194, 195, 
+    196, 197, 198, 
+    199, 200, 201, 
+    202, 203, 204, 
+    205, 206, 207, 
+    208, 209, 210, 
+    211, 212, 213, 
+    214, 215, 216, 
+    217, 218, 219, 
+    220, 221, 222, 
+    223, 224, 225, 
+    226, 227, 228, 
+    229, 230, 231, 
+    232, 233, 234, 
+    235, 236, 237, 
+    238, 239, 240 ; 
+
+    ty = 
+    1, 2, 
+    3, 4, 
+    5, 6, 
+    7, 8, 
+    9, 10, 
+    11, 12, 
+    13, 14, 
+    15, 16, 
+    17, 18, 
+    19, 20 ; 
+
+    tyz = 
+    1, 2, 3, 
+    4, 5, 6, 
+    7, 8, 9, 
+    10, 11, 12, 
+    13, 14, 15, 
+    16, 17, 18, 
+    19, 20, 21, 
+    22, 23, 24, 
+    25, 26, 27, 
+    28, 29, 30, 
+    31, 32, 33, 
+    34, 35, 36, 
+    37, 38, 39, 
+    40, 41, 42, 
+    43, 44, 45, 
+    46, 47, 48, 
+    49, 50, 51, 
+    52, 53, 54, 
+    55, 56, 57, 
+    58, 59, 60 ; 
+
+    tz = 
+    1, 2, 3, 
+    4, 5, 6, 
+    7, 8, 9, 
+    10, 11, 12, 
+    13, 14, 15, 
+    16, 17, 18, 
+    19, 20, 21, 
+    22, 23, 24, 
+    25, 26, 27, 
+    28, 29, 30 ; 
+
+    u = 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 ; 
+
+    upk = 3 ; 
+
+    upk_arr = -32767, 0, 1, 32767 ; 
+
+    v = 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 ; 
+
+    val_eminusten = 1.1e-10 ; 
+
+    val_half = 0.5 ; 
+
+    val_half_half = 0.5, 0.5 ; 
+
+    val_max_max_sht = 17000, 17000 ; 
+
+    val_one_int = 1 ; 
+
+    val_one_mss = 1, _ ; 
+
+    val_one_mss_int = 1, _ ; 
+
+    val_one_one_int = 1, 1 ; 
+
+    var_1D_rct = 0, 1, 0, 0, 1, 1, 0, 2 ; 
+
+    var_1D_rrg = 0, 1, 0, 0, 1, 1, 0, 2 ; 
+
+    var_2D_rct = 
+    0, 1, 0, 0, 
+    1, 1, 0, 2 ; 
+
+    var_2D_rrg = 
+    0, 1, 0, 0, 
+    1, 1, 0, 2 ; 
+
+    var_msk = 
+    0, 1, 0, 0, 
+    1, 1, 0, 2 ; 
+
+    var_mss_0 = _, 1, 2, 3 ; 
+
+    var_mss_1 = 0, _, 2, 3 ; 
+
+    var_mss_2 = 0, 1, _, 3 ; 
+
+    var_mss_3 = 0, 1, 2, _ ; 
+
+    var_mss_nil = 0, 1, 2, 3 ; 
+
+    var_nm-dash = 1 ; 
+
+    vld_rng = 273, _, 180, 179, 273, 360, 361, 1e+36, -1e+36, 273 ; 
+
+    vmr_CO2 = 0.0004 ; 
+
+    weight = 10, 10 ; 
+
+    wgt_one = 1, 1 ; 
+
+    wnd_spd = 
+    _, 0.5, 1.5, 0.5, 
+    1.5, 0.5, 1.5, 0.5, 
+    0.5, _, 0.5, 0.5, 
+    0.5, 0.5, 0.5, 0.5, 
+    0.5, 1.5, _, 1.5, 
+    0.5, 1.5, 0.5, 1.5, 
+    0.5, 0.5, 0.5, _, 
+    0.5, 0.5, 0.5, 0.5, 
+    1.5, 1.5, 1.5, 1.5, 
+    _, 1.5, 1.5, 1.5, 
+    0.5, 0.5, 0.5, 0.5, 
+    0.5, _, 0.5, 0.5, 
+    2.5, 2.5, 2.5, 2.5, 
+    2.5, 2.5, _, 2.5, 
+    0.5, 0.5, 0.5, 0.5, 
+    0.5, 0.5, 0.5, _, 
+    0.5, 0.5, 0.5, 0.5, 
+    0.5, 0.5, 0.5, 0.5, 
+    0.5, 0.5, 2.5, 0.5, 
+    0.5, 2.5, 0.5, 0.5 ; 
+
+    wvl = 5e-07, 1e-06 ; 
+
+    xyz = 
+    0, 1, 2, 
+    3, 4, 5, 
+    6, 7, 8, 
+    9, 10, 11, 
+    12, 13, 14, 
+    15, 16, 17, 
+    18, 19, 20, 
+    21, 22, 23 ; 
+
+    z = 17000, 5000, 0 ; 
+
+    zero = 0 ; 
+
+    zg = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8, 
+    9, 10, 11, 12, 
+    13, 14, 15, 16, 
+    17, 18, 19, 20, 
+    21, 22, 23, 24, 
+    25, 26, 27, 28, 
+    29, 30, 31, 32, 
+    33, 34, 35, 36, 
+    37, 38, 39, 40, 
+    41, 42, 43, 44, 
+    45, 46, 47, 48, 
+    49, 50, 51, 52, 
+    53, 54, 55, 56, 
+    57, 58, 59, 60, 
+    61, 62, 63, 64, 
+    65, 66, 67, 68, 
+    69, 70, 71, 72, 
+    73, 74, 75, 76, 
+    77, 78, 79, 80, 
+    81, 82, 83, 84, 
+    85, 86, 87, 88, 
+    89, 90, 91, 92, 
+    93, 94, 95, 96, 
+    97, 98, 99, 100, 
+    101, 102, 103, 104, 
+    105, 106, 107, 108, 
+    109, 110, 111, 112, 
+    113, 114, 115, 116, 
+    117, 118, 119, 120 ; 
+
+} // group /
diff --git a/cmake/in_grp.nc.txt b/cmake/in_grp.nc.txt
new file mode 100644
index 0000000..de8b99f
--- /dev/null
+++ b/cmake/in_grp.nc.txt
@@ -0,0 +1,603 @@
+netcdf in_grp {
+  dimensions:
+    coord = 2 ;
+    gds_crd = 8 ;
+    lat = 2 ;
+    lev = 3 ;
+    lon = 4 ;
+    time = UNLIMITED ; // (10 currently)
+    vrt_nbr = 2 ;
+
+  variables:
+    float area(lat) ;
+      area:units = "meter2" ;
+
+    float att_var(time) ;
+      att_var:byte_att = 0b, 1b, 2b, 127b, -128b, -127b, -2b, -1b ;
+      att_var:char_att = "Sentence one.\n",
+        "Sentence two.\n" ;
+      att_var:short_att = 37s ;
+      att_var:int_att = 73 ;
+      att_var:long_att = 73 ;
+      att_var:float_att = 73.f, 72.f, 71.f, 70.01f, 69.001f, 68.01f, 67.01f ;
+      att_var:double_att = 73., 72., 71., 70.01, 69.001, 68.01, 67.010001 ;
+
+    int att_var_jsn ;
+      att_var_jsn:char\ att\ with\ whitespace = "cf-json.org <http://cf-json.org>" ;
+      att_var_jsn:double\ att\ with\ whitespace = 3.14 ;
+      att_var_jsn:int\ att\ with\ whitespace = 1 ;
+      att_var_jsn:int_array\ att\ with\ whitespace = 1, 2 ;
+      string att_var_jsn:string_array\ att\ with\ whitespace = "1", "2" ;
+
+    int att_var_spc_chr ;
+      att_var_spc_chr:space\ in\ name = "foo" ;
+      att_var_spc_chr:comma_in_name\, = "foo" ;
+      att_var_spc_chr:lt_in_name\< = "foo" ;
+      att_var_spc_chr:gt_in_name\> = "foo" ;
+      att_var_spc_chr:hash_in_name\# = "foo" ;
+      att_var_spc_chr:xclaim_in_name\! = "foo" ;
+      att_var_spc_chr:dollar_in_name\$ = "foo" ;
+      att_var_spc_chr:ampersand_in_name\& = "foo" ;
+      att_var_spc_chr:equals_in_name\= = "foo" ;
+      att_var_spc_chr:semicolon_in_name\; = "foo" ;
+      att_var_spc_chr:colon_in_name\: = "foo" ;
+      att_var_spc_chr:lbrace_in_name\{ = "foo" ;
+      att_var_spc_chr:rbrace_in_name\} = "foo" ;
+      att_var_spc_chr:lparen_in_name\( = "foo" ;
+      att_var_spc_chr:rparen_in_name\) = "foo" ;
+      att_var_spc_chr:lbracket_in_name\[ = "foo" ;
+      att_var_spc_chr:rbracket_in_name\] = "foo" ;
+      att_var_spc_chr:plus_in_name+ = "foo" ;
+      att_var_spc_chr:hyphen_in_name- = "foo" ;
+      att_var_spc_chr:at_in_name@ = "foo" ;
+
+    float lat(lat) ;
+      lat:units = "degrees_north" ;
+
+    float lat_lon(lat,lon) ;
+
+    float lev(lev) ;
+      lev:units = "hybrid_sigma_pressure" ;
+      lev:bounds = "lev_bnd" ;
+
+    float lev_bnd(lev,vrt_nbr) ;
+      lev_bnd:purpose = "Cell boundaries for lev coordinate" ;
+
+    float lon(lon) ;
+      lon:units = "degrees_east" ;
+
+    float non_coord(coord) ;
+      non_coord:purpose = "Test whether netCDF4 supports renaming non-coordinates to coordinates" ;
+
+    float one ;
+
+    double ppc_big(time) ;
+
+    double ppc_dbl(time) ;
+      ppc_dbl:long_name = "Precision-Preserving Compression, big numbers" ;
+      ppc_dbl:purpose = "test --ppc switches" ;
+      ppc_dbl:original_values = "123456789e-10,123456789e-9,123456789e-8,123456789e-7,123456789e-6,123456789e-5,123456789e-4,123456789e-3,123456789e-2,123456789e-1" ;
+
+    float ppc_flt(time) ;
+      ppc_flt:long_name = "Precision-Preserving Compression, single precision" ;
+      ppc_flt:purpose = "test --ppc switches" ;
+      ppc_flt:original_values = "0.0,0.1,0.12,0.123,0.1234,0.12345,0.123456,0.1234567,0.12345678,0.123456789" ;
+
+    float scl ;
+
+    double time(time) ;
+
+    int unique ;
+      unique:purpose = "the only variable of this name in this file, to test smallest possible access requests" ;
+
+    float val_one_mss(lat) ;
+      val_one_mss:long_name = "one regular value, one missing value" ;
+      val_one_mss:_FillValue = 1.e+36f ;
+
+  // global attributes:
+    :Conventions = "CF-1.0" ;
+    :history = "History global attribute.\n" ;
+    :julian_day = 200000.04 ;
+    :RCS_Header = "$Header$" ;
+
+
+  data:
+    area = 10, 10 ; 
+
+    att_var = 10, 10.1, 10.2, 10.3, 10.40101, 10.5, 10.6, 10.7, 10.8, 10.99 ; 
+
+    att_var_jsn = 73 ; 
+
+    att_var_spc_chr = 73 ; 
+
+    lat = -90, 90 ; 
+
+    lat_lon = 
+    1, 2, 3, 4, 
+    5, 6, 7, 8 ; 
+
+    lev = 100, 500, 1000 ; 
+
+    lev_bnd = 
+    0, 300, 
+    300, 750, 
+    750, 1013.25 ; 
+
+    lon = 0, 90, 180, 270 ; 
+
+    non_coord = 9.96921e+36, 9.96921e+36 ; 
+
+    one = 1 ; 
+
+    ppc_big = 0.0123456789, 0.123456789, 1.23456789, 12.3456789, 123.456789, 1234.56789, 12345.6789, 123456.789, 1234567.89, 12345678.9 ; 
+
+    ppc_dbl = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.12345678, 0.123456789 ; 
+
+    ppc_flt = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.1234568, 0.1234568 ; 
+
+    scl = 1 ; 
+
+    time = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+    unique = 73 ; 
+
+    val_one_mss = 1, _ ; 
+
+  group: g1 {
+
+    variables:
+      int g1v1 ;
+
+      int g1v2 ;
+
+      float lon(lon) ;
+        lon:units = "degrees_east" ;
+
+      double ppc_big(time) ;
+
+      double ppc_dbl(time) ;
+        ppc_dbl:long_name = "Precision-Preserving Compression, big numbers" ;
+        ppc_dbl:purpose = "test --ppc switches" ;
+        ppc_dbl:original_values = "123456789e-10,123456789e-9,123456789e-8,123456789e-7,123456789e-6,123456789e-5,123456789e-4,123456789e-3,123456789e-2,123456789e-1" ;
+
+      float ppc_flt(time) ;
+        ppc_flt:long_name = "Precision-Preserving Compression, single precision" ;
+        ppc_flt:purpose = "test --ppc switches" ;
+        ppc_flt:original_values = "0.0,0.1,0.12,0.123,0.1234,0.12345,0.123456,0.1234567,0.12345678,0.123456789" ;
+
+      float scl ;
+
+      int v1 ;
+
+    // group attributes:
+      :history = "History group attribute.\n" ;
+
+    data:
+      g1v1 = 1 ; 
+
+      g1v2 = 2 ; 
+
+      lon = 0, 90, 180, 270 ; 
+
+      ppc_big = 0.0123456789, 0.123456789, 1.23456789, 12.3456789, 123.456789, 1234.56789, 12345.6789, 123456.789, 1234567.89, 12345678.9 ; 
+
+      ppc_dbl = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.12345678, 0.123456789 ; 
+
+      ppc_flt = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.1234568, 0.1234568 ; 
+
+      scl = 1.1 ; 
+
+      v1 = 1 ; 
+
+    group: g1g1 {
+
+      variables:
+        double ppc_big(time) ;
+
+        double ppc_dbl(time) ;
+          ppc_dbl:long_name = "Precision-Preserving Compression, big numbers" ;
+          ppc_dbl:purpose = "test --ppc switches" ;
+          ppc_dbl:original_values = "123456789e-10,123456789e-9,123456789e-8,123456789e-7,123456789e-6,123456789e-5,123456789e-4,123456789e-3,123456789e-2,123456789e-1" ;
+
+        float ppc_flt(time) ;
+          ppc_flt:long_name = "Precision-Preserving Compression, single precision" ;
+          ppc_flt:purpose = "test --ppc switches" ;
+          ppc_flt:original_values = "0.0,0.1,0.12,0.123,0.1234,0.12345,0.123456,0.1234567,0.12345678,0.123456789" ;
+
+        float scl ;
+
+        int v1 ;
+
+      data:
+        ppc_big = 0.0123456789, 0.123456789, 1.23456789, 12.3456789, 123.456789, 1234.56789, 12345.6789, 123456.789, 1234567.89, 12345678.9 ; 
+
+        ppc_dbl = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.12345678, 0.123456789 ; 
+
+        ppc_flt = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.1234568, 0.1234568 ; 
+
+        scl = 1.11 ; 
+
+        v1 = 11 ; 
+
+    } // group /g1/g1g1
+    group: g1\:g2 {
+
+      // group attributes:
+        :purpose = "group name with semi-special character, a colon (makes CDL-parsing hard)" ;
+        :csznote = "As of 20131006, ncks skips groups whose names contain special characters. ncdump handles them fine. e.g.,\n",
+          "ncgen -k netCDF-4 -b -o ~/nco/data/in_grp.nc ~/nco/data/in_grp.cdl\n",
+          "ncks --cdl -m -g g1 ~/nco/data/in_grp.nc | m\n",
+          "ncdump -h -g g1 ~/nco/data/in_grp.nc | m\n" ;
+    } // group /g1/g1\:g2
+  } // group /g1
+  group: g2 {
+
+    variables:
+      float lon(lon) ;
+
+      float scl ;
+
+      double time(time) ;
+
+    data:
+      lon = 0, 90, 180, 270 ; 
+
+      scl = 1.2 ; 
+
+      time = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+  } // group /g2
+  group: g4 {
+
+    variables:
+      int one_dmn_rec_var(time) ;
+        one_dmn_rec_var:long_name = "one dimensional record variable" ;
+        one_dmn_rec_var:units = "kelvin" ;
+
+      double ppc_big(time) ;
+
+      double ppc_dbl(time) ;
+        ppc_dbl:long_name = "Precision-Preserving Compression, big numbers" ;
+        ppc_dbl:purpose = "test --ppc switches" ;
+        ppc_dbl:original_values = "123456789e-10,123456789e-9,123456789e-8,123456789e-7,123456789e-6,123456789e-5,123456789e-4,123456789e-3,123456789e-2,123456789e-1" ;
+
+      float ppc_flt(time) ;
+        ppc_flt:long_name = "Precision-Preserving Compression, single precision" ;
+        ppc_flt:purpose = "test --ppc switches" ;
+        ppc_flt:original_values = "0.0,0.1,0.12,0.123,0.1234,0.12345,0.123456,0.1234567,0.12345678,0.123456789" ;
+
+    data:
+      one_dmn_rec_var = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+      ppc_big = 0.0123456789, 0.123456789, 1.23456789, 12.3456789, 123.456789, 1234.56789, 12345.6789, 123456.789, 1234567.89, 12345678.9 ; 
+
+      ppc_dbl = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.12345678, 0.123456789 ; 
+
+      ppc_flt = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.1234568, 0.1234568 ; 
+
+  } // group /g4
+  group: g5 {
+    dimensions:
+      time51 = UNLIMITED ; // (2 currently)
+      time52 = UNLIMITED ; // (10 currently)
+
+    variables:
+      int one_dmn_rec_var(time52) ;
+        one_dmn_rec_var:long_name = "one dimensional record variable" ;
+        one_dmn_rec_var:units = "kelvin" ;
+
+      double time51(time51) ;
+
+      double time52(time52) ;
+
+    data:
+      one_dmn_rec_var = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+      time51 = 1, 2 ; 
+
+      time52 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; 
+
+  } // group /g5
+  group: g6 {
+
+    variables:
+      float area(lat) ;
+
+      float area1(lat) ;
+
+    data:
+      area = 20, 30 ; 
+
+      area1 = 21, 31 ; 
+
+    group: g6g1 {
+
+      variables:
+        float area(lat) ;
+
+      data:
+        area = 40, 50 ; 
+
+    } // group /g6/g6g1
+  } // group /g6
+  group: g7 {
+
+    variables:
+      float gds_crd(gds_crd) ;
+        gds_crd:long_name = "Geodesic coordinate" ;
+        gds_crd:units = "degree" ;
+        gds_crd:purpose = "enumerated coordinate like those that might define points in a geodesic grid" ;
+        gds_crd:coordinates = "lat_gds lon_gds" ;
+
+      double lat_gds(gds_crd) ;
+        lat_gds:units = "degree" ;
+        lat_gds:long_name = "Latitude" ;
+        lat_gds:standard_name = "latitude" ;
+        lat_gds:purpose = "1-D latitude coordinate referred to by geodesic grid variables" ;
+
+      double lon_gds(gds_crd) ;
+        lon_gds:long_name = "Longitude" ;
+        lon_gds:standard_name = "longitude" ;
+        lon_gds:units = "degree" ;
+        lon_gds:purpose = "1-D longitude coordinate referred to by geodesic grid variables" ;
+
+      double ppc_big(time) ;
+
+      double ppc_dbl(time) ;
+        ppc_dbl:long_name = "Precision-Preserving Compression, big numbers" ;
+        ppc_dbl:purpose = "test --ppc switches" ;
+        ppc_dbl:original_values = "123456789e-10,123456789e-9,123456789e-8,123456789e-7,123456789e-6,123456789e-5,123456789e-4,123456789e-3,123456789e-2,123456789e-1" ;
+
+      float ppc_flt(time) ;
+        ppc_flt:long_name = "Precision-Preserving Compression, single precision" ;
+        ppc_flt:purpose = "test --ppc switches" ;
+        ppc_flt:original_values = "0.0,0.1,0.12,0.123,0.1234,0.12345,0.123456,0.1234567,0.12345678,0.123456789" ;
+
+    data:
+      gds_crd = 0, 1, 2, 3, 4, 5, 6, 7 ; 
+
+      lat_gds = -90, -30, -30, 0, 0, 30, 30, 90 ; 
+
+      lon_gds = 0, 0, 180, 0, 180, 0, 180, 0 ; 
+
+      ppc_big = 0.0123456789, 0.123456789, 1.23456789, 12.3456789, 123.456789, 1234.56789, 12345.6789, 123456.789, 1234567.89, 12345678.9 ; 
+
+      ppc_dbl = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.12345678, 0.123456789 ; 
+
+      ppc_flt = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.1234568, 0.1234568 ; 
+
+    group: g7g1 {
+
+      variables:
+        float gds_var(gds_crd) ;
+          gds_var:units = "meter" ;
+          gds_var:coordinates = "lat_gds lon_gds" ;
+
+      data:
+        gds_var = 273.1, 273.2, 273.3, 273.4, 273.5, 273.6, 273.7, 273.8 ; 
+
+    } // group /g7/g7g1
+  } // group /g7
+  group: g8 {
+    group: g8g1 {
+      group: g8g1g1 {
+        group: g8g1g1g1 {
+
+          // group attributes:
+            :mtd_grp = "Group metadata from g8g1g1g1, a leaf-group with no variables, to test whether metadata-only leaf groups are copied and/or printed" ;
+            :answer = "Twerking" ;
+        } // group /g8/g8g1/g8g1g1/g8g1g1g1
+      } // group /g8/g8g1/g8g1g1
+    } // group /g8/g8g1
+  } // group /g8
+  group: g9 {
+    group: g9g1 {
+
+      variables:
+        int v6 ;
+
+      data:
+        v6 = 63 ; 
+
+      group: g9g1g1 {
+        group: g9g1g1g1 {
+
+          // group attributes:
+            :mtd_grp = "Group metadata from g9g1g1g1, a group with no variables, to test whether group metadata are copied to ancestor groups of extracted variables" ;
+          group: g9g1g1g1g1 {
+            group: g9g1g1g1g1g1 {
+              group: g9g1g1g1g1g1g1 {
+
+                variables:
+                  double ppc_big(time) ;
+
+                  double ppc_dbl(time) ;
+                    ppc_dbl:long_name = "Precision-Preserving Compression, big numbers" ;
+                    ppc_dbl:purpose = "test --ppc switches" ;
+                    ppc_dbl:original_values = "123456789e-10,123456789e-9,123456789e-8,123456789e-7,123456789e-6,123456789e-5,123456789e-4,123456789e-3,123456789e-2,123456789e-1" ;
+
+                  float ppc_flt(time) ;
+                    ppc_flt:long_name = "Precision-Preserving Compression, single precision" ;
+                    ppc_flt:purpose = "test --ppc switches" ;
+                    ppc_flt:original_values = "0.0,0.1,0.12,0.123,0.1234,0.12345,0.123456,0.1234567,0.12345678,0.123456789" ;
+
+                  int v7 ;
+
+                data:
+                  ppc_big = 0.0123456789, 0.123456789, 1.23456789, 12.3456789, 123.456789, 1234.56789, 12345.6789, 123456.789, 1234567.89, 12345678.9 ; 
+
+                  ppc_dbl = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.12345678, 0.123456789 ; 
+
+                  ppc_flt = 0, 0.1, 0.12, 0.123, 0.1234, 0.12345, 0.123456, 0.1234567, 0.1234568, 0.1234568 ; 
+
+                  v7 = 73 ; 
+
+              } // group /g9/g9g1/g9g1g1/g9g1g1g1/g9g1g1g1g1/g9g1g1g1g1g1/g9g1g1g1g1g1g1
+            } // group /g9/g9g1/g9g1g1/g9g1g1g1/g9g1g1g1g1/g9g1g1g1g1g1
+          } // group /g9/g9g1/g9g1g1/g9g1g1g1/g9g1g1g1g1
+        } // group /g9/g9g1/g9g1g1/g9g1g1g1
+      } // group /g9/g9g1/g9g1g1
+    } // group /g9/g9g1
+  } // group /g9
+  group: g10 {
+
+    variables:
+      float three_dmn_rec_var(time,lat,lon) ;
+        three_dmn_rec_var:units = "watt meter-2" ;
+
+      float two_dmn_rec_var(time,lev) ;
+
+    data:
+      three_dmn_rec_var = 
+      1, 2, 3, 4, 
+      5, 6, 7, 8, 
+      9, 10, 11, 12, 
+      13, 14, 15, 16, 
+      17, 18, 19, 20, 
+      21, 22, 23, 24, 
+      25, 26, 27, 28, 
+      29, 30, 31, 32, 
+      33, 34, 35, 36, 
+      37, 38, 39, 40, 
+      41, 42, 43, 44, 
+      45, 46, 47, 48, 
+      49, 50, 51, 52, 
+      53, 54, 55, 56, 
+      57, 58, 59, 60, 
+      61, 62, 63, 64, 
+      65, 66, 67, 68, 
+      69, 70, 71, 72, 
+      73, 74, 75, 76, 
+      77, 78, 79, 80 ; 
+
+      two_dmn_rec_var = 
+      1, 2, 3, 
+      1, 2.1, 3, 
+      1, 2.2, 3, 
+      1, 2.3, 3, 
+      1, 2.4, 3, 
+      1, 2.5, 3, 
+      1, 2.6, 3, 
+      1, 2.7, 3, 
+      1, 2.8, 3, 
+      1, 2.9, 3 ; 
+
+  } // group /g10
+  group: g11 {
+
+    variables:
+      byte byte_var ;
+        byte_var:long_name = "byte-type variable" ;
+
+      char char_var ;
+        char_var:long_name = "char-type variable" ;
+
+      char char_var_arr(time) ;
+        char_var_arr:long_name = "char-type variable array" ;
+
+      double double_var ;
+        double_var:long_name = "double-type variable" ;
+
+      float float_var ;
+        float_var:long_name = "float-type variable" ;
+
+      int64 int64_var ;
+        int64_var:long_name = "int64-type variable" ;
+
+      int int_var ;
+        int_var:long_name = "int-type variable" ;
+
+      int long_var ;
+        long_var:long_name = "long-type variable" ;
+        long_var:purpose = "Variable of CDL type=long, which is deprecated for int. Included to test back-compatibility" ;
+
+      short short_var ;
+        short_var:long_name = "short-type variable" ;
+
+      string string_arr(lat) ;
+        string_arr:long_name = "string-type array variable" ;
+
+      string string_rec_arr(time) ;
+        string_rec_arr:long_name = "string-type record array variable" ;
+
+      string string_var ;
+        string_var:long_name = "string-type variable" ;
+
+      ubyte ubyte_var ;
+        ubyte_var:long_name = "ubyte-type variable" ;
+
+      uint64 uint64_var ;
+        uint64_var:long_name = "uint64-type variable" ;
+
+      uint uint_arr(lat) ;
+        uint_arr:long_name = "uint-type array variable" ;
+
+      uint uint_var ;
+        uint_var:long_name = "uint-type variable" ;
+        uint_var:_FillValue = 73ul ;
+        uint_var:purpose = "_FillValue attribute tests whether NcML parser inadvertently creates two _FillValues for unsigned types" ;
+
+      ushort ushort_var ;
+        ushort_var:long_name = "ushort-type variable" ;
+
+    data:
+      byte_var = 122 ; 
+
+      char_var = "z" ; 
+
+      char_var_arr = "two words" ; 
+
+      double_var = 10 ; 
+
+      float_var = 10 ; 
+
+      int64_var = 9223372036854775807 ; 
+
+      int_var = 10 ; 
+
+      long_var = 10 ; 
+
+      short_var = 10 ; 
+
+      string_arr = "Stanza 1", "Stanza 2" ; 
+
+      string_rec_arr = "One little ", "two little ", "three little indians, ", "four little ", "five little ", "six little indians, ", "seven little ", "eight little ", "nine little indians, ", "ten little indian boys." ; 
+
+      string_var = "If you prick us, do we not bleed? If you tickle us, do we not laugh? If you poison us, do we not die? And if you wrong us, shall we not revenge?" ; 
+
+      ubyte_var = 122 ; 
+
+      uint64_var = 0 ; 
+
+      uint_arr = 4294967295, 4294967295 ; 
+
+      uint_var = 0 ; 
+
+      ushort_var = 65535 ; 
+
+  } // group /g11
+  group: g12 {
+
+    // group attributes:
+      :space\ in\ name = "foo" ;
+      :comma_in_name\, = "foo" ;
+      :lt_in_name\< = "foo" ;
+      :gt_in_name\> = "foo" ;
+      :hash_in_name\# = "foo" ;
+      :xclaim_in_name\! = "foo" ;
+      :dollar_in_name\$ = "foo" ;
+      :ampersand_in_name\& = "foo" ;
+      :equals_in_name\= = "foo" ;
+      :semicolon_in_name\; = "foo" ;
+      :colon_in_name\: = "foo" ;
+      :lbrace_in_name\{ = "foo" ;
+      :rbrace_in_name\} = "foo" ;
+      :lparen_in_name\( = "foo" ;
+      :rparen_in_name\) = "foo" ;
+      :lbracket_in_name\[ = "foo" ;
+      :rbracket_in_name\] = "foo" ;
+      :plus_in_name+ = "foo" ;
+      :hyphen_in_name- = "foo" ;
+      :at_in_name@ = "foo" ;
+  } // group /g12
+} // group /
diff --git a/configure b/configure
index e319021..eacbe0e 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for NCO netCDF Operators 4.7.1.
+# Generated by GNU Autoconf 2.69 for NCO netCDF Operators 4.7.2.
 #
 # Report bugs to <nco-bugs at lists.sourceforge.net>.
 #
@@ -592,8 +592,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='NCO netCDF Operators'
 PACKAGE_TARNAME='nco'
-PACKAGE_VERSION='4.7.1'
-PACKAGE_STRING='NCO netCDF Operators 4.7.1'
+PACKAGE_VERSION='4.7.2'
+PACKAGE_STRING='NCO netCDF Operators 4.7.2'
 PACKAGE_BUGREPORT='nco-bugs at lists.sourceforge.net'
 PACKAGE_URL=''
 
@@ -1394,7 +1394,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures NCO netCDF Operators 4.7.1 to adapt to many kinds of systems.
+\`configure' configures NCO netCDF Operators 4.7.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1465,7 +1465,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of NCO netCDF Operators 4.7.1:";;
+     short | recursive ) echo "Configuration of NCO netCDF Operators 4.7.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1633,7 +1633,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-NCO netCDF Operators configure 4.7.1
+NCO netCDF Operators configure 4.7.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2499,7 +2499,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by NCO netCDF Operators $as_me 4.7.1, which was
+It was created by NCO netCDF Operators $as_me 4.7.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3755,7 +3755,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='nco'
- VERSION='4.7.1'
+ VERSION='4.7.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -21548,7 +21548,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by NCO netCDF Operators $as_me 4.7.1, which was
+This file was extended by NCO netCDF Operators $as_me 4.7.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -21614,7 +21614,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-NCO netCDF Operators config.status 4.7.1
+NCO netCDF Operators config.status 4.7.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index 8c4be7b..0344f97 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@
 # Purpose: Template autoconf uses to generate NCO configure script
 # Newer convention names this file configure.ac, rather than configure.in
 
-# Copyright (C) 2003--2017 Charlie Zender
+# Copyright (C) 2003--2018 Charlie Zender
 # License: GNU General Public License (GPL) Version 3
 # See http://www.gnu.org/copyleft/gpl.html for full license text
 
@@ -54,7 +54,7 @@
 # 20170808: Choose between traditional version and Git-based version
 # If Git, consider that Linux dynamic libraries will have full messy name, MacOSX will not
 # https://stackoverflow.com/questions/43526939/how-to-insert-git-based-version-in-autoconf-managed-project
-AC_INIT([NCO netCDF Operators],[4.7.1],[nco-bugs at lists.sourceforge.net],[nco])
+AC_INIT([NCO netCDF Operators],[4.7.2],[nco-bugs at lists.sourceforge.net],[nco])
 #AC_INIT([NCO netCDF Operators],m4_esyscmd([git describe --abbrev=7 --dirty --always --tags | tr -d '\n']),[nco-bugs at lists.sourceforge.net],[nco])
 
 # Print GNU copyright in configure script
diff --git a/configure.eg b/configure.eg
index 2fbdfcb..8a1f4a8 100644
--- a/configure.eg
+++ b/configure.eg
@@ -276,6 +276,14 @@ cd ~/nco/cmake
 cmake .. -DCMAKE_INSTALL_PREFIX=${HOME}
 make install
 
+# clang Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories with CMake:
+# Generic when netCDF is in ~/anaconda (MacOS katabatic)
+export GNU_TRP=`~/nco/autobld/config.guess`
+cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
+cd ~/nco/cmake
+cmake .. -DCMAKE_INSTALL_PREFIX=${HOME} -DNETCDF_INCLUDE:PATH=${NETCDF_INC} -DNETCDF_LIBRARY:FILE=${NETCDF_LIB}/libnetcdf.a -DHDF5_LIBRARY:FILE=${NETCDF_LIB}/libhdf5.a -DHDF5_HL_LIBRARY:FILE=${NETCDF_LIB}/libhdf5.a
+make install
+
 # gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in system directories with CMake:
 # Generic when netCDF is in /usr (Ubuntu glace, Fedora skyglow)
 cd ~/nco/cmake
@@ -294,16 +302,14 @@ cd ~/nco/cmake
 cmake .. -DCMAKE_INSTALL_PREFIX=${HOME} -DNETCDF_INCLUDE:PATH=${NETCDF_INC} -DNETCDF_LIBRARY:FILE=${NETCDF_LIB}/libnetcdf.a -DHDF5_LIBRARY:FILE=${NETCDF_LIB}/libhdf5.a -DHDF5_HL_LIBRARY:FILE=${NETCDF_LIB}/libhdf5.a # Glace
 make install
 
-# 20150901: gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on cooley:
-# Sysadmin upgrade request: 20170825
-# Latest ticket: alcf-support #345910
-# Latest sysadmin-compiled module usage: soft add +nco-4.6.8, soft add +netcdf-4.4.1.1
-# Personal recipe last modified: 20170825
-# Personal recipe last used successfully: 20171108
+# gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on aims4:
+# Sysadmin upgrade request: 
+# Latest sysadmin-compiled module usage: 
+# Personal recipe last modified: 2016??
+# Personal recipe last used successfully: 20171221
 export GNU_TRP=`~/nco/autobld/config.guess`
 cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
-cd ~/nco;git reset --hard origin/master
-ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT='/soft/libraries/unsupported/netcdf-4.4.1.1' UDUNITS2_PATH=${HOME} ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
+ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT='/usr/local/uvcdat/2016-01-21/Externals' UDUNITS2_PATH='/usr/local/uvcdat/2016-01-21/Externals' ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
 /bin/cp -f config.log nco.config.log.${GNU_TRP}.foo
 /bin/cp -f libtool nco.libtool.${GNU_TRP}.foo
 make clean;make > nco.make.${GNU_TRP}.foo 2>&1
@@ -311,14 +317,24 @@ make check >> nco.make.${GNU_TRP}.foo 2>&1
 make install >> nco.make.${GNU_TRP}.foo 2>&1
 scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU_TRP}.foo nco.make.${GNU_TRP}.foo dust.ess.uci.edu:Sites/nco/rgr
 
-# 20160421: gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on mira:
-# Sysadmin upgrade request: 20170825
-# Latest sysadmin-compiled module usage:  # fxm
-# Personal recipe last modified: 2016??
-# Personal recipe last used successfully: 2016??
+# gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on blues/anvil
+# LCRC uses Spack module written and tested by Adam Stewart: https://github.com/LLNL/spack/pull/4370/files
+# spack install --run-tests nco%gcc ^netcdf at 4.4.0
+# Sysadmin upgrade request: support at lcrc.anl.gov
+# Latest ticket: AREQ0159277 on 20170526
+# Latest sysadmin-compiled module usage: soft add +nco-4.6.7 # 20170526
+# Personal recipe last modified: 20161223
+# Personal recipe last used successfully: 20171221
+# fails to link to udunits...why?
+# nm -a /soft/udunits/2.1.21/lib/libudunits2.a | grep ut_read_xml
+# First use: 20161223 Latest use: 20161223
+# soft add +antlr-2.7.7 # 20161223 this ANTLR appears to be stock and not NCO-compatible
+# soft add +udunits-2.1.21 # 20161223 this UDUnits was compiled without -fPIC so fails with NCO
+soft add +netcdf-4.3.3.1-gnu5.2-serial
+soft add +gsl-2.3
 export GNU_TRP=`~/nco/autobld/config.guess`
 cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
-ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT='/soft/libraries/netcdf/current' UDUNITS2_PATH=${HOME} ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
+ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT='/soft/netcdf_serial/4.3.3.1/gnu-5.2' UDUNITS2_PATH=${HOME} ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
 /bin/cp -f config.log nco.config.log.${GNU_TRP}.foo
 /bin/cp -f libtool nco.libtool.${GNU_TRP}.foo
 make clean;make > nco.make.${GNU_TRP}.foo 2>&1
@@ -326,16 +342,34 @@ make check >> nco.make.${GNU_TRP}.foo 2>&1
 make install >> nco.make.${GNU_TRP}.foo 2>&1
 scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU_TRP}.foo nco.make.${GNU_TRP}.foo dust.ess.uci.edu:Sites/nco/rgr
 
-# 20160421: gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on roger:
-# Sysadmin upgrade request: Yan Liu <yanliu at illinois.edu>
-# Latest sysadmin-compiled module usage: module load nco/4.6.5 # 20170315
-# Personal recipe last modified: 20170424
-# Personal recipe last used successfully: 20170424
-module load netcdf/4.4.0
-module load udunits
+# icc/icpc 20171013 Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on cheyenne:
+# Sysadmin upgrade request: cislhelp at ucar.edu
+# Latest ticket: fxm on fxm
+# Latest sysadmin-compiled module usage: module load nco/4.6.9 # 20171002
+# Personal recipe last modified: 20180112
+# Personal recipe last used successfully: 20180112 (except ncap2, which would require backporting to intel 16.0.3 to get gsl)
+module purge
+module load ncarenv intel ncarcompilers mpt netcdf
+module add intel
+module add netcdf
+module add mpt
+export PATH=${PATH}:/opt/pbs/bin # needed for qsub
+export PATH=${PATH}:/glade/u/apps/ch/opt/netcdf/4.4.1.1/intel/17.0.1/bin # needed for ncgen
+export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/glade/u/apps/ch/opt/netcdf/4.4.1.1/intel/17.0.1/lib:/glade/u/apps/ch/opt/udunits/2.2.20/gnu/4.8.2/lib # needed to run NCO
+cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
+cd ~/nco;git reset --hard origin/master
+cd ~/nco/bld;make NETCDF_ROOT='/glade/u/apps/ch/opt/netcdf/4.4.1.1/intel/17.0.1' UDUNITS_INC='/glade/u/apps/ch/opt/udunits/2.2.20/gnu/4.8.2/include' UDUNITS_LIB='/glade/u/apps/ch/opt/udunits/2.2.20/gnu/4.8.2/lib' OPTS=D allinone;cd -
+
+# 20150901: gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on cooley:
+# Sysadmin upgrade request: 20170825
+# Latest ticket: alcf-support #345910
+# Latest sysadmin-compiled module usage: soft add +nco-4.6.8, soft add +netcdf-4.4.1.1
+# Personal recipe last modified: 20170825
+# Personal recipe last used successfully: 20171221
 export GNU_TRP=`~/nco/autobld/config.guess`
 cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
-ANTLR_ROOT=${HOME} ANTLR_LIB=${HOME}/lib CC='gcc' CXX='g++' UDUNITS2_PATH='/sw/udunits-2.1.24' ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
+cd ~/nco;git reset --hard origin/master
+ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT='/soft/libraries/unsupported/netcdf-4.4.1.1' UDUNITS2_PATH=${HOME} ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
 /bin/cp -f config.log nco.config.log.${GNU_TRP}.foo
 /bin/cp -f libtool nco.libtool.${GNU_TRP}.foo
 make clean;make > nco.make.${GNU_TRP}.foo 2>&1
@@ -347,7 +381,7 @@ scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU
 # Sysadmin upgrade request: https://nersc.service-now.com/navpage.do
 # Latest sysadmin-compiled module usage: module load nco/4.6.7 # 20170612 (without ncap2)
 # Personal recipe last modified: 20170411
-# Personal recipe last used successfully: 20171108
+# Personal recipe last used successfully: 20171221
 module load szip
 module load gsl
 module load udunits
@@ -368,7 +402,7 @@ scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU
 # Latest ticket: INC0106410 on 20170804
 # Latest sysadmin-compiled module usage: module load nco/4.6.7 # 20170809 (with ncap2)
 # Personal recipe last modified: 20170807
-# Personal recipe last used successfully: 20171108
+# Personal recipe last used successfully: 20171221
 module load szip
 module load gsl
 module load udunits2
@@ -383,50 +417,14 @@ make check >> nco.make.${GNU_TRP}.foo 2>&1
 make install >> nco.make.${GNU_TRP}.foo 2>&1
 scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU_TRP}.foo nco.make.${GNU_TRP}.foo dust.ess.uci.edu:Sites/nco/rgr
 
-# gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on aims4:
-# Sysadmin upgrade request: 
-# Latest sysadmin-compiled module usage: 
+# 20160421: gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on mira:
+# Sysadmin upgrade request: 20170825
+# Latest sysadmin-compiled module usage:  # fxm
 # Personal recipe last modified: 2016??
-# Personal recipe last used successfully: 20171108
-export GNU_TRP=`~/nco/autobld/config.guess`
-cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
-ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT='/usr/local/uvcdat/2016-01-21/Externals' UDUNITS2_PATH='/usr/local/uvcdat/2016-01-21/Externals' ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
-/bin/cp -f config.log nco.config.log.${GNU_TRP}.foo
-/bin/cp -f libtool nco.libtool.${GNU_TRP}.foo
-make clean;make > nco.make.${GNU_TRP}.foo 2>&1
-make check >> nco.make.${GNU_TRP}.foo 2>&1
-make install >> nco.make.${GNU_TRP}.foo 2>&1
-scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU_TRP}.foo nco.make.${GNU_TRP}.foo dust.ess.uci.edu:Sites/nco/rgr
-
-# gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on blues/anvil
-# LCRC uses Spack module written and tested by Adam Stewart: https://github.com/LLNL/spack/pull/4370/files
-# spack install --run-tests nco%gcc ^netcdf at 4.4.0
-# Sysadmin upgrade request: support at lcrc.anl.gov
-# Latest ticket: AREQ0159277 on 20170526
-# Latest sysadmin-compiled module usage: soft add +nco-4.6.7 # 20170526
-# Personal recipe last modified: 20161223
-# Personal recipe last used successfully: 20171108
-# fails to link to udunits...why?
-# nm -a /soft/udunits/2.1.21/lib/libudunits2.a | grep ut_read_xml
-# First use: 20161223 Latest use: 20161223
-# soft add +antlr-2.7.7 # 20161223 this ANTLR appears to be stock and not NCO-compatible
-# soft add +udunits-2.1.21 # 20161223 this UDUnits was compiled without -fPIC so fails with NCO
-soft add +netcdf-4.3.3.1-gnu5.2-serial
-soft add +gsl-2.3
-export GNU_TRP=`~/nco/autobld/config.guess`
-cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
-ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT='/soft/netcdf_serial/4.3.3.1/gnu-5.2' UDUNITS2_PATH=${HOME} ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
-/bin/cp -f config.log nco.config.log.${GNU_TRP}.foo
-/bin/cp -f libtool nco.libtool.${GNU_TRP}.foo
-make clean;make > nco.make.${GNU_TRP}.foo 2>&1
-make check >> nco.make.${GNU_TRP}.foo 2>&1
-make install >> nco.make.${GNU_TRP}.foo 2>&1
-scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU_TRP}.foo nco.make.${GNU_TRP}.foo dust.ess.uci.edu:Sites/nco/rgr
-
-# gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on pileus:
+# Personal recipe last used successfully: 2016??
 export GNU_TRP=`~/nco/autobld/config.guess`
 cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
-ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT='/opt/ACME/uvcdat-2.2-build/install/Externals' UDUNITS2_PATH='/opt/ACME/uvcdat-2.2-build/install/Externals' ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
+ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT='/soft/libraries/netcdf/current' UDUNITS2_PATH=${HOME} ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
 /bin/cp -f config.log nco.config.log.${GNU_TRP}.foo
 /bin/cp -f libtool nco.libtool.${GNU_TRP}.foo
 make clean;make > nco.make.${GNU_TRP}.foo 2>&1
@@ -434,36 +432,12 @@ make check >> nco.make.${GNU_TRP}.foo 2>&1
 make install >> nco.make.${GNU_TRP}.foo 2>&1
 scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU_TRP}.foo nco.make.${GNU_TRP}.foo dust.ess.uci.edu:Sites/nco/rgr
 
-# icc/icpc 20160217 Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on yellowstone:
-# Sysadmin upgrade request: cislhelp at ucar.edu
-# Latest ticket: 172597 on 20170526
-# Latest sysadmin-compiled module usage: module load nco/4.6.9 # 20171002
-# Personal recipe last modified: 20170812
-# Personal recipe last used successfully: 20171108
-module add intel/16.0.3;module add gsl;module add netcdf/4.4.1;
-export PATH=${PATH}:/glade/apps/opt/netcdf/4.4.1/intel/16.0.3/bin # needed for ncgen
-export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/glade/apps/opt/netcdf/4.4.1/intel/16.0.3/lib # needed to run NCO
-cd ~/nco;git pull
-cd ~/nco/bld;make NETCDF_ROOT='/glade/apps/opt/netcdf/4.4.1/intel/16.0.3' UDUNITS_INC='/glade/apps/opt/udunits/2.1.24/intel/12.1.4/include' UDUNITS_LIB='/glade/apps/opt/udunits/2.1.24/intel/12.1.4/lib' OPTS=D allinone;cd -
-
-# icc/icpc 20171013 Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on cheyenne:
-# Sysadmin upgrade request: cislhelp at ucar.edu
-# Latest ticket: fxm on fxm
-# Latest sysadmin-compiled module usage: module load nco/4.6.9 # 20171002
-# Personal recipe last modified: 20171013
-# Personal recipe last used successfully: 20171013 (except ncap2, which would require backporting to inter 16.0.3 to get gsl)
-module add gsl
-export PATH=${PATH}:/glade/u/apps/ch/opt/netcdf/4.4.1.1/intel/17.0.1/bin # needed for ncgen
-export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/glade/u/apps/ch/opt/netcdf/4.4.1.1/intel/17.0.1/lib:/glade/u/apps/ch/opt/udunits/2.2.20/gnu/4.8.2/lib # needed to run NCO
-cd ~/nco;git reset --hard origin/master
-cd ~/nco/bld;make NETCDF_ROOT='/glade/u/apps/ch/opt/netcdf/4.4.1.1/intel/17.0.1' UDUNITS_INC='/glade/u/apps/ch/opt/udunits/2.2.20/gnu/4.8.2/include' UDUNITS_LIB='/glade/u/apps/ch/opt/udunits/2.2.20/gnu/4.8.2/lib' OPTS=D allinone;cd -
-
 # gcc/g++ 20160107 Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on rhea:
 # Sysadmin upgrade request: https://www.olcf.ornl.gov/support/submit-ticket
 # Latest ticket: 358890 on 20170526
 # Latest sysadmin-compiled module usage: module load nco/4.6.6 # 20170515
 # Personal recipe last modified: 20170814
-# Personal recipe last used successfully: 20171108
+# Personal recipe last used successfully: 20171221
 export LINUX_CC='gcc -std=c99 -pedantic -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE'
 export LINUX_CXX='g++ -std=c++11'
 export LINUX_FC='gfortran'
@@ -477,12 +451,49 @@ export PATH=/autofs/nccs-svm1_sw/rhea/.swci/0-core/opt/spack/20170224/linux-rhel
 cd ~/nco;git reset --hard origin/master
 cd ~/nco/bld;make ANTLR_ROOT=${HOME} NETCDF_ROOT='/autofs/nccs-svm1_sw/rhea/.swci/0-core/opt/spack/20170224/linux-rhel6-x86_64/gcc-4.4.7/netcdf-4.4.1-uroyzcwi6fc3kerfidguoof7g2vimo57' SZ=Y SZ_LIB='/sw/redhat6/szip/2.1/rhel6.6_gnu4.8.2/lib' UDUNITS_INC='/sw/redhat6/udunits/2.1.24/rhel6.4_intel13.1.3/include' UDUNITS_LIB='/sw/redhat6/udunits/2.1.24/rhel6.4_intel13.1.3/lib' OPTS=D OMP=Y allinone;cd -
 
+# 20160421: gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on roger:
+# Sysadmin upgrade request: Yan Liu <yanliu at illinois.edu>
+# Latest sysadmin-compiled module usage: module load nco/4.6.5 # 20170315
+# Personal recipe last modified: 20170424
+# Personal recipe last used successfully: 20170424
+module load netcdf/4.4.0
+module load udunits
+export GNU_TRP=`~/nco/autobld/config.guess`
+cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
+ANTLR_ROOT=${HOME} ANTLR_LIB=${HOME}/lib CC='gcc' CXX='g++' UDUNITS2_PATH='/sw/udunits-2.1.24' ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
+/bin/cp -f config.log nco.config.log.${GNU_TRP}.foo
+/bin/cp -f libtool nco.libtool.${GNU_TRP}.foo
+make clean;make > nco.make.${GNU_TRP}.foo 2>&1
+make check >> nco.make.${GNU_TRP}.foo 2>&1
+make install >> nco.make.${GNU_TRP}.foo 2>&1
+scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU_TRP}.foo nco.make.${GNU_TRP}.foo dust.ess.uci.edu:Sites/nco/rgr
+
+# 20180124: gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on theta:
+# Sysadmin upgrade request: 
+# Latest sysadmin-compiled module usage:  # fxm
+# Personal recipe last modified: 20180124
+# Problem is that .bashrc resets PATH so cannot find icc/gcc ...
+# Personal recipe last used successfully: fxm
+export GNU_TRP=`~/nco/autobld/config.guess`
+cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
+module load cray-netcdf
+#module add PrgEnv-intel
+#module swap PrgEnv-intel PrgEnv-gnu
+#module swap PrgEnv-gnu PrgEnv-intel
+ANTLR_ROOT=${HOME} ANTLR_LIB=${HOME}/lib_theta CC='icc' CXX='icpc' GSL_ROOT='csz_not_available_yet' NETCDF_INC='/opt/cray/pe/netcdf/4.4.1.1.6/intel/16.0/include' NETCDF_LIB='/opt/cray/pe/netcdf/4.4.1.1.6/intel/16.0/lib' NETCDF_ROOT='/opt/cray/pe/netcdf/4.4.1.1.6' UDUNITS2_PATH='csz_not_available_yet' ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
+/bin/cp -f config.log nco.config.log.${GNU_TRP}.foo
+/bin/cp -f libtool nco.libtool.${GNU_TRP}.foo
+make clean;make > nco.make.${GNU_TRP}.foo 2>&1
+make check >> nco.make.${GNU_TRP}.foo 2>&1
+make install >> nco.make.${GNU_TRP}.foo 2>&1
+scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU_TRP}.foo nco.make.${GNU_TRP}.foo dust.ess.uci.edu:Sites/nco/rgr
+
 # gcc/g++ 20160420 Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on titan:
 # Sysadmin upgrade request: https://www.olcf.ornl.gov/support/submit-ticket
 # Latest ticket: 347675 on 20170316
 # Latest sysadmin-compiled module usage: module load nco/4.6.6 # 20170411
 # Personal recipe last modified: 20170814
-# Personal recipe last used successfully: 20171108
+# Personal recipe last used successfully: 20171221
 export LINUX_CC='gcc -std=c99 -pedantic -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE'
 module add gcc # change GCC from v 4.3.4 to 4.9.0
 #module add gsl # not used yet
@@ -635,6 +646,30 @@ make clean;make > nco.make.${GNU_TRP}.foo 2>&1
 make check >> nco.make.${GNU_TRP}.foo 2>&1
 make install >> nco.make.${GNU_TRP}.foo 2>&1
 scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.make.${GNU_TRP}.foo dust.ess.uci.edu:Sites/nco/rgr
+
+# Old machines:
+# gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on pileus:
+export GNU_TRP=`~/nco/autobld/config.guess`
+cd ~/nco;/bin/rm -f *.${GNU_TRP}.foo;make distclean
+ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT='/opt/ACME/uvcdat-2.2-build/install/Externals' UDUNITS2_PATH='/opt/ACME/uvcdat-2.2-build/install/Externals' ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.${GNU_TRP}.foo 2>&1
+/bin/cp -f config.log nco.config.log.${GNU_TRP}.foo
+/bin/cp -f libtool nco.libtool.${GNU_TRP}.foo
+make clean;make > nco.make.${GNU_TRP}.foo 2>&1
+make check >> nco.make.${GNU_TRP}.foo 2>&1
+make install >> nco.make.${GNU_TRP}.foo 2>&1
+scp nco.configure.${GNU_TRP}.foo nco.config.log.${GNU_TRP}.foo nco.libtool.${GNU_TRP}.foo nco.make.${GNU_TRP}.foo dust.ess.uci.edu:Sites/nco/rgr
+
+# icc/icpc 20160217 Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on yellowstone:
+# Sysadmin upgrade request: cislhelp at ucar.edu
+# Latest ticket: 172597 on 20170526
+# Latest sysadmin-compiled module usage: module load nco/4.6.9 # 20171002
+# Personal recipe last modified: 20170812
+# Personal recipe last used successfully: 20171108
+module add intel/16.0.3;module add gsl;module add netcdf/4.4.1;
+export PATH=${PATH}:/glade/apps/opt/netcdf/4.4.1/intel/16.0.3/bin # needed for ncgen
+export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/glade/apps/opt/netcdf/4.4.1/intel/16.0.3/lib # needed to run NCO
+cd ~/nco;git reset --hard origin/master
+cd ~/nco/bld;make NETCDF_ROOT='/glade/apps/opt/netcdf/4.4.1/intel/16.0.3' UDUNITS_INC='/glade/apps/opt/udunits/2.1.24/intel/12.1.4/include' UDUNITS_LIB='/glade/apps/opt/udunits/2.1.24/intel/12.1.4/lib' OPTS=D allinone;cd -
 ************************************************************************
 End LINUX
 ************************************************************************
diff --git a/data/in.cdl b/data/in.cdl
index 5756b9e..9c9ab70 100644
--- a/data/in.cdl
+++ b/data/in.cdl
@@ -627,7 +627,13 @@ variables:
 	char_var_space:long_name = "Character variable with whitespace on ends";
 
 	char char_var_nul;
-	char_var_nul:long_name = "Character variable containing one NUL";
+	char_var_nul:long_name = "Character variable containing one NUL specified as empty string: \"\"";
+
+	char char_var_nul_c_format;
+	char_var_nul_c_format:long_name = "Character variable containing one NUL specified in C-format: \'\\0\'";
+
+	char char_var_zero;
+	char_var_zero:long_name = "Character variable containing zero";
 
 	char char_var_1D_arr(time);
         char_var_1D_arr:long_name = "char-type 1D variable array";
@@ -799,6 +805,13 @@ variables:
 	att_var_spc_chr:hyphen_in_name- = "foo";
 	att_var_spc_chr:at_in_name@ = "foo";
 
+	// Purpose test special chars in char atts 
+        int att_sng;
+        att_sng:nul_sng = '\0';
+	att_sng:empty_sng = "";
+        att_sng:space_sng = " ";
+	att_sng:zero_sng = "0";
+	
 	int bnd_var(lev,bnd);
 	bnd_var:byte_att = '\0';
 	bnd_var:char_att = "Sentence one.\nSentence two.\n";
@@ -1342,6 +1355,7 @@ data:
 	att_var=10.0,10.1,10.20,10.3000,10.40101,10.500001,10.60000001,10.7000001,10.80,10.9900;
 	att_var_jsn=73;
 	att_var_spc_chr=73;
+	att_sng=20;
 	area=10.,10.;
 	area2=20.,5.;
 	area_asm=1.,2.;
@@ -1366,11 +1380,20 @@ data:
 	// 20131015: This confuses the XML parser
 	//	char_var_multinul="\b\n\0";
 	// char_var_multinul='0','\n','\0';
-	char_var_nul='\0';
+	// 20180111: Historically we specified char_var_nul as '\0'
+	// However, ncgen apparently turns '\0' into a zero
+	// "correct" (meaning ncgen-supported) way to specify a scalar NUL character is with ""
+	// As of today we specify char_var_nul as "" and char_var_nul_c_format as '\0'
+	// char_var_nul_c_format indicates what happens when specifying characters in C-format
+	// I think ncgen should support C-format byte codes for characters, though ncgen does not yet do so correctly
+	char_var_nul="";
+	char_var_nul_c_format='\0';
+	char_var_zero="0";
 	char_var_space=" ";
         char_var_1D_arr="two words";
         char_var_2D_arr="one","two";
         cnv_CF_grd=1,2,3,4,5,6,7,8;
+	albers_conical_equal_area="";
 	cnv_CF_crd=273.1,273.2,273.3,273.4,273.5,273.6,273.7,273.8;
 	cnv_CF_ncl=1.,2.,3.,4.,5.,6.,7.,8.,9.,10.;
 	cnv_CF_ncl_var_1=11.,22.,23.,24.,25.,26.,27.,28.,29.,30.;
diff --git a/data/ncclimo b/data/ncclimo
index 57ec464..c070d81 100755
--- a/data/ncclimo
+++ b/data/ncclimo
@@ -3,7 +3,7 @@
 # Purpose: Climatology script tailored to CESM'ish monthly input and E3SM/ACME output guidelines
 # Produces and optionally regrids climatological monthly means, seasonal means, annual mean
 
-# Copyright (C) 2015--2017 Charlie Zender
+# Copyright (C) 2015--2018 Charlie Zender
 # This file is part of NCO, the netCDF Operators. NCO is free software.
 # You may redistribute and/or modify NCO under the terms of the 
 # GNU General Public License (GPL) Version 3.
@@ -39,13 +39,13 @@
 # Insta-install:
 # scp ~/nco/data/ncclimo aims4.llnl.gov:bin
 # scp ~/nco/data/ncclimo blues.lcrc.anl.gov:bin
+# scp ~/nco/data/ncclimo cheyenne.ucar.edu:bin
 # scp ~/nco/data/ncclimo cooley.alcf.anl.gov:bin
 # scp ~/nco/data/ncclimo cori.nersc.gov:bin_cori
 # scp ~/nco/data/ncclimo dust.ess.uci.edu:bin
 # scp ~/nco/data/ncclimo edison.nersc.gov:bin_edison
 # scp ~/nco/data/ncclimo rhea.ccs.ornl.gov:bin_rhea
 # scp ~/nco/data/ncclimo skyglow.ess.uci.edu:bin
-# scp ~/nco/data/ncclimo yellowstone.ucar.edu:bin
 # scp dust.ess.uci.edu:nco/data/ncclimo ~/bin
 
 # Set script name, directory, PID, run directory
@@ -78,11 +78,12 @@ if [ -z "${DATA}" ]; then
     case "${HOSTNAME}" in 
 	constance* | node* ) DATA='/scratch' ; ;; # PNNL
 	blues* | blogin* | b[0123456789][0123456789][0123456789] ) DATA="/lcrc/project/ACME/${USER}" ; ;; # ALCF blues compute nodes named bNNN, 36|64 cores|GB/node 
-	cooley* | cc[0123456789][0123456789][0123456789] | mira* ) DATA="/projects/HiRes_EarthSys/${USER}" ; ;; # ALCF cooley compute nodes named ccNNN, 384 GB/node 
+	*cheyenne* ) DATA="/glade/p/work/${USER}" ; ;; # NCAR cheyenne compute nodes named, e.g., r8i0n8, r5i3n16, r12i5n29 ... 18|(64/128) cores|GB/node (cheyenne login nodes 256 GB)
+	cooley* | cc[0123456789][0123456789][0123456789] | mira* ) DATA="/projects/HiRes_EarthSys_2/${USER}" ; ;; # ALCF cooley compute nodes named ccNNN, 384 GB/node 
 	cori* | edison* ) DATA="${SCRATCH}" ; ;; # NERSC cori/edison compute nodes all named nidNNNNN, edison 24|64 cores|GB/node; cori 32|(96/128) cores|GB/node (knl/haswell) (cori login nodes 512 GB)
 	pileus* ) DATA="/lustre/atlas/world-shared/cli115/${USER}" ; ;; # OLCF CADES
 	rhea* | titan* ) DATA="/lustre/atlas/world-shared/cli115/${USER}" ; ;; # OLCF rhea compute nodes named rheaNNN, 128 GB/node
-	ys* ) DATA="/glade/p/work/${USER}" ; ;; # NCAR yellowstone compute nodes named ysNNN, 32 GB/node
+	theta* ) DATA="/projects/ClimateEnergy_2/${USER}" ; ;; # ALCF theta compute nodes named fxm, 64|192 cores|GB/node 
 	* ) DATA='/tmp' ; ;; # Other
     esac # !HOSTNAME
 fi # DATA
@@ -114,6 +115,17 @@ if [ "${hrd_pth}" != 'No' ] && [ "${NCO_PATH_OVERRIDE}" != 'No' ]; then
 	mira* )
 	    export PATH='/home/zender/bin_mira'\:${PATH}
 	    export LD_LIBRARY_PATH='/soft/libraries/netcdf/current/library:/home/zender/lib_mira'\:${LD_LIBRARY_PATH} ; ;;
+	*cheyenne* )
+	    # 20180112: Cheyenne support not yet tested in batch mode
+	    if [ ${spt_nm} = 'ncremap' ]; then
+		# On cheyenne, module load ncl installs ERWG in /glade/u/apps/ch/opt/ncl/6.4.0/intel/17.0.1/bin (i.e., ${NCARG_ROOT}/bin)
+		module load ncl
+	    fi # !ncremap
+	    if [ -n "${NCARG_ROOT}" ]; then
+		export PATH="${PATH}:/glade/u/apps/ch/opt/ncl/6.4.0/intel/17.0.1/bin"
+	    fi # !NCARG_ROOT
+            export PATH='/glade/u/home/zender/bin'\:${PATH}
+            export LD_LIBRARY_PATH='/glade/u/apps/ch/opt/netcdf/4.4.1.1/intel/17.0.1/lib:/glade/u/home/zender/lib'\:${LD_LIBRARY_PATH} ; ;;
 	cori* )
 	    # 20160407: Separate cori from edison binary locations to allow for different system libraries
 	    # 20160420: module load gsl, udunits required for non-interactive batch submissions by Wuyin Lin
@@ -179,17 +191,6 @@ if [ "${hrd_pth}" != 'No' ] && [ "${NCO_PATH_OVERRIDE}" != 'No' ]; then
 	    fi # !NCARG_ROOT
             export PATH='/ccs/home/zender/bin_titan'\:${PATH}
 	    export LD_LIBRARY_PATH='/opt/cray/netcdf/4.4.1.1/GNU/49/lib:/sw/xk6/udunits/2.1.24/sl_gcc4.5.3/lib:/ccs/home/zender/lib_titan'\:${LD_LIBRARY_PATH} ; ;;
-	ys* )
-	    # 20151018: Yellowstone support not yet tested in batch mode
-	    if [ ${spt_nm} = 'ncremap' ]; then
-		# On yellowstone, module load ncl installs ERWG in /glade/apps/opt/ncl/6.4.0/intel/12.1.5/bin (not in ${NCARG_ROOT}/bin)
-		module load ncl
-	    fi # !ncremap
-	    if [ -n "${NCARG_ROOT}" ]; then
-		export PATH="${PATH}:/glade/apps/opt/ncl/6.4.0/intel/12.1.5/bin"
-	    fi # !NCARG_ROOT
-            export PATH='/glade/u/home/zender/bin'\:${PATH}
-            export LD_LIBRARY_PATH='/glade/apps/opt/netcdf/4.4.1/intel/16.0.3/lib:/glade/u/home/zender/lib'\:${LD_LIBRARY_PATH} ; ;;
 	* ) # Default fall-through
 	    hrd_pth_fnd='No' ; ;;
     esac # !HOSTNAME
@@ -266,6 +267,9 @@ fi # !hrd_pth && !NCO_PATH_OVERRIDE
 # http://www.mcs.anl.gov/hs/software/systems/softenv/softenv-intro.html
 # http://www.alcf.anl.gov/user-guides/using-cobalt-cooley
 # https://www.alcf.anl.gov/user-guides/cobalt-job-control
+# NCAR PBSPro:
+# https://www2.cisl.ucar.edu/resources/computational-systems/cheyenne/quick-start-cheyenne
+# https://www2.cisl.ucar.edu/resources/computational-systems/cheyenne/running-jobs/submitting-jobs-pbs
 # NERSC SLURM:
 # https://www.nersc.gov/users/computational-systems/cori/running-jobs/slurm-introduction
 # https://www.nersc.gov/users/computational-systems/cori/running-jobs/for-edison-users/torque-moab-vs-slurm-comparisons
@@ -278,23 +282,25 @@ fi # !hrd_pth && !NCO_PATH_OVERRIDE
 # Requesting interactive nodes, Submitting non-interactive batch jobs, Monitoring queues, Deleting jobs:
 # Cobalt: qsub -I,   qsub,  qstat,    qdel
 # PBS:    qsub -I,   qsub,  qstat,    qdel
+# PBSPro: qsub -I,   qsub,  qstat,    qdel
 # SLURM:   salloc, sbatch, squeue, scancel
 # Interactive queue: a) Reserve nodes and acquire prompt on control node b) Execute ncclimo command interactively
 #   Blues:  qsub -I -A ACME -q acme -l nodes=12 -l walltime=00:30:00 -N ncclimo
+#   Cheyenne: qsub -I -A SCSG0002 -l select=12:ncpus=36:mpiprocs=1 -l walltime=00:30:00 -q regular -N ncclimo
 #   Cooley: qsub -I -A HiRes_EarthSys --nodecount=12 --time=00:30:00 --jobname=ncclimo
 #   Cori:   salloc  -A acme --nodes=12 --partition=debug --time=00:30:00 --job-name=ncclimo # NB: 30 minute limit, Edison too
 #   Hopper: qsub -I -A acme -V -l mppwidth=288 -l walltime=00:30:00 -q debug -N ncclimo # deprecated, old Edison
 #   Rhea:   qsub -I -A CLI115 -V -l nodes=12 -l walltime=00:30:00 -N ncclimo # Bigmem: -l partition=gpu
-#   Yellow: fxm # Bigmem: 
 # Non-interactive batch procedure: a) Store ncclimo command in ncclimo.[cobalt|pbs|slurm] b) qsub ncclimo.[cobalt|pbs|slurm]
 # Non-interactive batch queue differences (besides argument syntax):
 # 1. Cobalt and SLURM require initial 'shebang' line to specify the shell interpreter (not required on PBS)
 # 2. Cobalt appends stdout/stderr to existing output files, if any, whereas PBS overwrites existing files
-# 3. Cobalt uses ${COBALT_NODEFILE} and (NA) whereas PBS uses ${PBS_NODEFILE} and ${PBS_NUM_PPN}, respectively, and SLURM uses ${SLURM_NODELIST} and ${SLURM_CPUS_ON_NODE}, respectively
+# 3. Cobalt uses ${COBALT_NODEFILE} and (NA) whereas PBS (and PBSPro) use ${PBS_NODEFILE} and ${PBS_NUM_PPN}, respectively, and SLURM uses ${SLURM_NODELIST} and ${SLURM_CPUS_ON_NODE}, respectively
 # 4. SLURM automatically combines stdout and stderr, yet does not understand tilde (~ = home directory) expansion in error/output filenames
 # 5. After merger of Cori Phase 1 Haswell and Phase 2 KNL cabinets in ~2017, SLURM on Cori requires Quality-of-Service (QOS) argument, either -C haswell or -C knl
 # Differences 1 & 2 impose slightly different invocations; difference 3 requires abstracting environment variables; difference 4 requires omitting ~'s; difference 5 requires -C argument on Cori only
 #   Blues a):  echo "ncclimo -a scd -d 1 -p mpi -c famipc5_ne30_v0.3_00003 -s 1980 -e 1983 -i ${DATA}/ne30/raw -o ${DATA}/ne30/clm -r ${DATA}/maps/map_ne30np4_to_fv129x256_aave.20150901.nc" > ~/ncclimo.pbs;chmod a+x ~/ncclimo.pbs
+#   Cheyenne a) echo "ncclimo -a scd -d 1 -p mpi -c famipc5_ne30_v0.3_00003 -s 1980 -e 1983 -i ${DATA}/ne30/raw -o ${DATA}/ne30/clm -r ${DATA}/maps/map_ne30np4_to_fv129x256_aave.20150901.nc" > ~/ncclimo.pbs;chmod a+x ~/ncclimo.pbs
 #   Cooley a): /bin/rm -f ~/ncclimo.err  ~/ncclimo.out
 #              echo '#!/bin/bash' > ~/ncclimo.cobalt
 #              echo "ncclimo -d 1 -p mpi -c b1850c5_m2a -s 55 -e 58 -i /home/taylorm/scratch1.qtang/b1850c5_m2a/run -o ${DATA}/ne120/clm" >> ~/ncclimo.cobalt;chmod a+x ~/ncclimo.cobalt
@@ -302,6 +308,7 @@ fi # !hrd_pth && !NCO_PATH_OVERRIDE
 #                   echo "ncclimo -a scd -d 1 -p mpi -c famipc5_ne30_v0.3_00003 -s 1980 -e 1983 -i ${DATA}/ne30/raw -o ${DATA}/ne30/clm -r ${DATA}/maps/map_ne30np4_to_fv129x256_aave.20150901.nc" >> ~/ncclimo.slurm;chmod a+x ~/ncclimo.slurm
 #   Rhea a):   echo "ncclimo -a scd -d 1 -p mpi -c famipc5_ne120_v0.3_00003 -s 1980 -e 1983 -i /lustre/atlas1/cli115/world-shared/mbranst/famipc5_ne120_v0.3_00003-wget-test -o ${DATA}/ne120/clm -r ${DATA}/maps/map_ne120np4_to_fv257x512_aave.20150901.nc"  > ~/ncclimo.pbs;chmod a+x ~/ncclimo.pbs
 #   Blues b):  qsub -A ACME -q acme -l nodes=1 -l walltime=00:30:00 -N ncclimo -j oe -m e -o ~/ncclimo.out ~/ncclimo.pbs
+#   Cheyenne b): qsub -A SCSG0002 -l select=12:ncpus=36:mpiprocs=1 -l walltime=00:30:00 -q regular -N ncclimo -j oe -m e -o ~/ncclimo.out ~/ncclimo.pbs
 #   Cooley b): qsub -A HiRes_EarthSys --nodecount=12 --time=00:30:00 --jobname ncclimo --error ~/ncclimo.err --output ~/ncclimo.out --notify zender at uci.edu ~/ncclimo.cobalt
 #   Cori b): sbatch -A acme -C haswell --nodes=12 --time=00:30:00 --partition=debug --job-name=ncclimo --mail-type=END --output=${HOME}/ncclimo.out ~/ncclimo.slurm
 #   Edison b): sbatch -A acme --nodes=12 --time=00:30:00 --partition=debug --job-name=ncclimo --mail-type=END --output=${HOME}/ncclimo.out ~/ncclimo.slurm
@@ -499,7 +506,7 @@ function fnc_usg_prn { # NB: dash supports fnc_nm (){} syntax, not function fnc_
     echo "${fnt_rvr}-h${fnt_nrm} ${fnt_bld}hst_nm${fnt_nrm}   History volume name (default ${fnt_bld}${hst_nm}${fnt_nrm}) [${fnt_tlc}hst_nm, history_name, history${fnt_nrm}]"
     echo "${fnt_rvr}-i${fnt_nrm} ${fnt_bld}drc_in${fnt_nrm}   Input directory (default ${fnt_bld}${drc_in}${fnt_nrm}) [${fnt_tlc}drc_in, in_drc, dir_in, in_dir, input${fnt_nrm}]"
     echo "${fnt_rvr}-j${fnt_nrm} ${fnt_bld}job_nbr${fnt_nrm}  Job simultaneity for parallelism (default ${fnt_bld}${job_nbr}${fnt_nrm}) [${fnt_tlc}job_nbr, job_number, jobs${fnt_nrm}]"
-    echo " ${fnt_bld}-L${fnt_nrm}  Deflate level (empty is none) (default ${fnt_bld}${dfl_lvl}${fnt_nrm}) [${fnt_tlc}dfl_lvl, dfl, deflate${fnt_nrm}]"
+    echo "${fnt_rvr}-L${fnt_nrm} ${fnt_bld}dfl_lvl${fnt_nrm}  Deflate level (empty is none) (default ${fnt_bld}${dfl_lvl}${fnt_nrm}) [${fnt_tlc}dfl_lvl, dfl, deflate${fnt_nrm}]"
     echo "${fnt_rvr}-l${fnt_nrm} ${fnt_bld}lnk_flg${fnt_nrm}  Link E3SM/ACME-climo to AMWG-climo filenames (default ${fnt_bld}${lnk_flg}${fnt_nrm}) [${fnt_tlc}lnk_flg, link_flag, no_amwg_links${fnt_nrm}]"
     echo "${fnt_rvr}-m${fnt_nrm} ${fnt_bld}mdl_nm${fnt_nrm}   Model name (default ${fnt_bld}${mdl_nm}${fnt_nrm}) [${fnt_tlc}mdl_nm, model_name, model${fnt_nrm}]"
     echo "${fnt_rvr}-n${fnt_nrm} ${fnt_bld}nco_opt${fnt_nrm}  NCO options (empty means none) (default ${fnt_bld}${nco_opt}${fnt_nrm}) [${fnt_tlc}nco_opt, nco, nco_options${fnt_nrm}]"
@@ -535,6 +542,7 @@ function fnc_usg_prn { # NB: dash supports fnc_nm (){} syntax, not function fnc_
     printf "${fnt_bld}ncclimo -a sdd -c ${caseid_xmp} -m cam -S 41 -E 50 -x ${drc_rgr_xmp}/0041-0050 -s 51 -e 60 -i ${drc_rgr_xmp}/0051-0060 -X ${drc_rgr_xmp}/0041-0060 ${fnt_nrm}# Combine two climos\n\n"
     printf "${fnt_rvr}Interactive batch queues:${fnt_nrm}\n"
     printf "blues : qsub -I -A ACME -q acme -l nodes=1 -l walltime=00:30:00 -N ncclimo\n"
+    printf "cheyenne: qsub -I -A SCSG0002 -l select=1:ncpus=36:mpiprocs=1 -l walltime=00:30:00 -q regular -N ncclimo\n"
     printf "cooley: qsub -I -A HiRes_EarthSys --nodecount=1 --time=00:30:00 --jobname=ncclimo\n"
     printf "cori  : salloc  -A acme --nodes=1 --time=00:30:00 --partition=debug --job-name=ncclimo\n"
     printf "edison: salloc  -A acme --nodes=1 --time=00:30:00 --partition=debug --job-name=ncclimo\n"
@@ -690,7 +698,7 @@ if [ ${psn_nbr} -ge 1 ]; then
 fi # !psn_nbr
 if [ ${vrs_prn} = 'Yes' ]; then
     printf "${spt_nm}, the NCO climatology operator, version ${nco_vrs}\n"
-    printf "Copyright (C) 2016--2017 Charlie Zender\n"
+    printf "Copyright (C) 2016--2018 Charlie Zender\n"
     printf "This program is part of NCO, the netCDF Operators\n"
     printf "NCO is free software and comes with a BIG FAT KISS and ABSOLUTELY NO WARRANTY\n"
     printf "You may redistribute and/or modify NCO under the terms of the\n"
@@ -698,8 +706,8 @@ if [ ${vrs_prn} = 'Yes' ]; then
     printf "GPL: http://www.gnu.org/copyleft/gpl.html\n"
     printf "LICENSE: https://github.com/nco/nco/tree/master/LICENSE\n"
     printf "Config: ${spt_nm} running from directory ${drc_spt}\n"
-    printf "Config: calling NCO binaries in directory ${drc_nco}\n"
-    printf "Config: binaries linked to netCDF library version ${lbr_vrs}\n"
+    printf "Config: Calling NCO binaries in directory ${drc_nco}\n"
+    printf "Config: Binaries linked to netCDF library version ${lbr_vrs}\n"
     if [ "${hrd_pth_fnd}" = 'Yes' ]; then
 	printf "Config: Employ NCO machine-dependent hardcoded paths/modules for ${HOSTNAME}\n"
 	printf "Config: (Turn-off NCO hardcoded paths with \"export NCO_PATH_OVERRIDE=No\")\n"
@@ -1095,11 +1103,11 @@ if [ "${sbs_flg}" = 'Yes' ]; then
     let sgm_rmd=${yr_sbs}%${ypf_max}
     if [ ${sgm_rmd} -ne 0 ]; then
 	let sgm_nbr=${sgm_nbr}+1
-	let sgm_nbrm1=${sgm_nbr}-1
 	sgm_flg='Yes'
     else # !sgm_rmd
 	sgm_flg='No'
     fi # !sgm_rmd  
+    let sgm_nbrm1=${sgm_nbr}-1
 
 else # !sbs_flg
 
@@ -1317,6 +1325,15 @@ if [ "${mpi_flg}" = 'Yes' ]; then
 	    fi # !sbs_flg
 	    case "${HOSTNAME}" in 
 		# 20160502: Remove tasks-per-node limits (ntasks, npernode) so round-robin algorithm can schedule multiple jobs on same node
+		*cheyenne* )
+		    # 20180120: Non-interactive batch jobs at NCAR return HOSTNAME as cheyenne?
+		    # Cheyenne prefers 'mpiexec_mpt dplace -s 1 ncclimo ...'
+		    # Unsure how to specify nd_nm to mpiexec_mpt
+		    # mpirun from SGI MPT does not accept '-H nd_nm', unlike regular PBS
+		    # PBSPro considers ncclimo a 'non-MPT application' so must set MPI_SHEPHERD=true
+		    export MPI_SHEPHERD=true
+#		    cmd_mpi[${mpi_idx}]="mpiexec_mpt dplace ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -n 1" ; ;; # PBSPro
+		    cmd_mpi[${mpi_idx}]="mpirun ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -n 1" ; ;; # PBSPro
 		constance* | cori* | edison* | nid* | node* )
 		    # 20160502: Non-interactive batch jobs at NERSC return HOSTNAME as nid*, not cori* or edison*
 		    # 20160803: Non-interactive batch jobs at PNNL return HOSTNAME as node*, not constance*
@@ -1326,6 +1343,10 @@ if [ "${mpi_flg}" = 'Yes' ]; then
 		hopper* )
 		    # NB: NERSC migrated from aprun to srun in 201601. Hopper commands will soon be deprecated.
 		    cmd_mpi[${mpi_idx}]="aprun -L ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -n 1" ; ;; # NERSC
+		theta* )
+		    # NB: ALCF Theta (not cooley or mira) uses aprun:
+		    # https://www.alcf.anl.gov/user-guides/example-program-and-makefile-xc40
+		    cmd_mpi[${mpi_idx}]="aprun -L ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -n 1" ; ;; # ALCF Theta
 		* )
 		    cmd_mpi[${mpi_idx}]="mpirun -H ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -n 1" ; ;; # Other (Cobalt, PBS)
 #		    cmd_mpi[${mpi_idx}]="mpirun -H ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -npernode 1 -n 1" ; ;; # Other
@@ -1412,20 +1433,6 @@ if [ ${dbg_lvl} -ge 2 ]; then
 	    printf "dbg: Requested season index ${csn_idx} (\"${csn_rqs[${csn_idx}]}\") is defined season index ${map_r2d[${csn_idx}]} (\"${csn_abb[${map_r2d[${csn_idx}]}]}\")\n"
 	done # !csn_idx
     fi # !csn
-    if [ "${sbs_flg}" = 'Yes' ]; then
-	printf "dbg: Will split into files for ${var_nbr} variables:\n"
-	for ((var_idx=0;var_idx<${var_nbr};var_idx++)); do
-	    printf "${var_sbs[${var_idx}]}\n"
-	done # !var_idx
-	printf "dbg: Will split timeseries into ${sgm_nbr} segments:\n"
-	for ((sgm_idx=0;sgm_idx<${sgm_nbr};sgm_idx++)); do
-	    printf "Segment ${sgm_idx} months: ${yyyy_srt_sgm[${sgm_idx}]}01--${yyyy_end_sgm[${sgm_idx}]}12\n"
-	done # !sgm_idx
-	printf "dbg: Will split ${fl_nbr} files into ${sgm_nbr} segments:\n"
-	for ((sgm_idx=0;sgm_idx<${sgm_nbr};sgm_idx++)); do
-	    printf "${fl_sgm[${sgm_idx}]}\n"
-	done # !sgm_idx
-    fi # !sbs
 fi # !dbg
 if [ ${dbg_lvl} -ge 2 ]; then
     printf "dbg: yyyy_srt   = ${yyyy_srt}\n"
@@ -1681,10 +1688,10 @@ if [ "${sbs_flg}" = 'Yes' ]; then
 	let fl_idx_end=${fl_idx_srt}+${ypf_max}*${fpy}
 	let yr_srt_sgm=${yr_srt_rth}+${sgm_idx}*${ypf_max}
 	let yr_end_sgm=${yr_srt_sgm}+${ypf_max}-1
-	if [ ${sgm_rmd} -ne 0 ]; then
+	if [ ${sgm_rmd} -ne 0 ] && [ ${sgm_idx} -eq ${sgm_nbrm1} ]; then
 	    let fl_idx_end=${fl_idx_srt}+${sgm_rmd}*${fpy}
 	    let yr_end_sgm=${yr_srt_sgm}+${sgm_rmd}-1
-	fi # !sgm_rmd
+	fi # !sgm_nbrm1
 	for ((fl_idx=fl_idx_srt;fl_idx<fl_idx_end;fl_idx++)); do
 	    fl_sgm[${sgm_idx}]="${fl_sgm[${sgm_idx}]} ${fl_in[${fl_idx}]}"
 	    yyyy_srt_sgm[${sgm_idx}]=`printf "%04d" ${yr_srt_sgm}`
@@ -1701,6 +1708,21 @@ if [ "${sbs_flg}" = 'Yes' ]; then
 
     done # !sgm_idx
 
+    if [ ${dbg_lvl} -ge 2 ]; then
+	printf "dbg: Will split into files for ${var_nbr} variable(s):\n"
+	for ((var_idx=0;var_idx<${var_nbr};var_idx++)); do
+	    printf "${var_sbs[${var_idx}]}\n"
+	done # !var_idx
+	printf "dbg: Will split timeseries into ${sgm_nbr} segment(s):\n"
+	for ((sgm_idx=0;sgm_idx<${sgm_nbr};sgm_idx++)); do
+	    printf "Segment ${sgm_idx} months: ${yyyy_srt_sgm[${sgm_idx}]}01--${yyyy_end_sgm[${sgm_idx}]}12\n"
+	done # !sgm_idx
+#	printf "dbg: Will split ${fl_nbr} files into ${sgm_nbr} segment(s):\n"
+#	for ((sgm_idx=0;sgm_idx<${sgm_nbr};sgm_idx++)); do
+#	    printf "${fl_sgm[${sgm_idx}]}\n"
+#	done # !sgm_idx
+    fi # !dbg
+
     # Create template output filenames (to avoid Bash 2D string arrays)
     for ((sgm_idx=0;sgm_idx<sgm_nbr;sgm_idx++)); do
 	if [ -z "${fml_nm_usr}" ]; then 
@@ -1763,7 +1785,7 @@ if [ "${sbs_flg}" = 'Yes' ]; then
 		let bch_flg=$(((var_idx+1) % job_nbr))
 		#printf "${spt_nm}: var_idx = ${var_idx}, bch_idx = ${bch_idx}, bch_flg = ${bch_flg}\n"
 		if [ ${bch_flg} -eq 0 ]; then
-		    if [ ${dbg_lvl} -ge 1 ]; then
+		    if [ ${dbg_lvl} -ge 1 ] && [ ${idx_srt} -le ${idx_end} ]; then
 			printf "${spt_nm}: Waiting for batch ${bch_idx} to finish at var_idx = ${var_idx}...\n"
 		    fi # !dbg
 		    for ((pid_idx=${idx_srt};pid_idx<=${idx_end};pid_idx++)); do
@@ -1785,7 +1807,9 @@ if [ "${sbs_flg}" = 'Yes' ]; then
 	    let bch_flg=$((var_nbr % job_nbr))
 	    if [ ${bch_flg} -ne 0 ]; then
 		let bch_idx=$((bch_idx+1))
-		printf "${spt_nm}: Waiting for (partial) batch ${bch_idx} to finish...\n"
+		if [ ${dbg_lvl} -ge 1 ] && [ ${idx_srt} -lt ${var_nbr} ]; then
+		    printf "${spt_nm}: Waiting for (partial) batch ${bch_idx} to finish...\n"
+		fi # !dbg
 		for ((pid_idx=${idx_srt};pid_idx<${var_nbr};pid_idx++)); do
 		    wait ${sbs_pid[${pid_idx}]}
 		    if [ $? -ne 0 ]; then
@@ -1830,7 +1854,7 @@ if [ "${sbs_flg}" = 'Yes' ]; then
 		    let bch_flg=$(((var_idx+1) % job_nbr))
 		    #printf "${spt_nm}: var_idx = ${var_idx}, bch_idx = ${bch_idx}, bch_flg = ${bch_flg}\n"
 		    if [ ${bch_flg} -eq 0 ]; then
-			if [ ${dbg_lvl} -ge 1 ]; then
+			if [ ${dbg_lvl} -ge 1 ] && [ ${idx_srt} -le ${idx_end} ]; then
 			    printf "${spt_nm}: Waiting for batch ${bch_idx} to finish at var_idx = ${var_idx}...\n"
 			fi # !dbg
 			for ((pid_idx=${idx_srt};pid_idx<=${idx_end};pid_idx++)); do
@@ -1852,7 +1876,9 @@ if [ "${sbs_flg}" = 'Yes' ]; then
 		let bch_flg=$((var_nbr % job_nbr))
 		if [ ${bch_flg} -ne 0 ]; then
 		    let bch_idx=$((bch_idx+1))
-		    printf "${spt_nm}: Waiting for (partial) batch ${bch_idx} to finish...\n"
+		    if [ ${dbg_lvl} -ge 1 ] && [ ${idx_srt} -lt ${var_nbr} ]; then
+			printf "${spt_nm}: Waiting for (partial) batch ${bch_idx} to finish...\n"
+		    fi # !dbg
 		    for ((pid_idx=${idx_srt};pid_idx<${var_nbr};pid_idx++)); do
 			wait ${rgr_pid[${pid_idx}]}
 			if [ $? -ne 0 ]; then
@@ -2032,7 +2058,7 @@ if [ "${clm_flg}" = 'Yes' ] && [ "${clm_md}" = 'dly' ]; then
 	    let bch_flg=$(((clm_idx+1) % job_nbr))
 	    #printf "${spt_nm}: clm_idx = ${clm_idx}, bch_idx = ${bch_idx}, bch_flg = ${bch_flg}\n"
 	    if [ ${bch_flg} -eq 0 ]; then
-		if [ ${dbg_lvl} -ge 1 ]; then
+		if [ ${dbg_lvl} -ge 1 ] && [ ${idx_srt} -le ${idx_end} ]; then
 		    printf "${spt_nm}: Waiting for batch ${bch_idx} to finish at clm_idx = ${clm_idx}...\n"
 		fi # !dbg
 		for ((pid_idx=${idx_srt};pid_idx<=${idx_end};pid_idx++)); do
@@ -2054,7 +2080,9 @@ if [ "${clm_flg}" = 'Yes' ] && [ "${clm_md}" = 'dly' ]; then
 	let bch_flg=$((clm_nbr % job_nbr))
 	if [ ${bch_flg} -ne 0 ]; then
 	    let bch_idx=$((bch_idx+1))
-	    printf "${spt_nm}: Waiting for (partial) batch ${bch_idx} to finish...\n"
+	    if [ ${dbg_lvl} -ge 1 ] && [ ${idx_srt} -lt ${clm_nbr} ]; then
+		printf "${spt_nm}: Waiting for (partial) batch ${bch_idx} to finish...\n"
+	    fi # !dbg
 	    for ((pid_idx=${idx_srt};pid_idx<${clm_nbr};pid_idx++)); do
 		wait ${clm_pid[${pid_idx}]}
 		if [ $? -ne 0 ]; then
@@ -2098,7 +2126,7 @@ if [ "${clm_flg}" = 'Yes' ] && [ "${clm_md}" = 'dly' ]; then
 		let bch_flg=$(((clm_idx+1) % job_nbr))
 		#printf "${spt_nm}: clm_idx = ${clm_idx}, bch_idx = ${bch_idx}, bch_flg = ${bch_flg}\n"
 		if [ ${bch_flg} -eq 0 ]; then
-		    if [ ${dbg_lvl} -ge 1 ]; then
+		    if [ ${dbg_lvl} -ge 1 ] && [ ${idx_srt} -le ${idx_end} ]; then
 			printf "${spt_nm}: Waiting for batch ${bch_idx} to finish at clm_idx = ${clm_idx}...\n"
 		    fi # !dbg
 		    for ((pid_idx=${idx_srt};pid_idx<=${idx_end};pid_idx++)); do
@@ -2120,7 +2148,9 @@ if [ "${clm_flg}" = 'Yes' ] && [ "${clm_md}" = 'dly' ]; then
 	    let bch_flg=$((clm_nbr % job_nbr))
 	    if [ ${bch_flg} -ne 0 ]; then
 		let bch_idx=$((bch_idx+1))
-		printf "${spt_nm}: Waiting for (partial) batch ${bch_idx} to finish...\n"
+		if [ ${dbg_lvl} -ge 1 ] && [ ${idx_srt} -lt ${clm_nbr} ]; then
+		    printf "${spt_nm}: Waiting for (partial) batch ${bch_idx} to finish...\n"
+		fi # !dbg
 		for ((pid_idx=${idx_srt};pid_idx<${clm_nbr};pid_idx++)); do
 		    wait ${rgr_pid[${pid_idx}]}
 		    if [ $? -ne 0 ]; then
@@ -2620,13 +2650,6 @@ else # !xtn_flg extended climos
     
 fi # !xtn_flg extended climos
 
-date_end=$(date +"%s")
-if [ -n "${caseid}" ]; then
-    printf "Completed ${yr_nbr_xtn}-year climatology operations for dataset ${caseid} at `date`\n"
-else # !caseid
-    printf "Completed ${yr_nbr_xtn}-year climatology operations for input data at `date`\n"
-fi # !caseid
-date_dff=$((date_end-date_srt))
 if [ "${clm_flg}" = 'Yes' ]; then
     if [ "${clm_md}" = 'dly' ]; then
 	echo "Quick plots of last climatological daily mean:"
@@ -2653,7 +2676,6 @@ if [ "${clm_flg}" = 'Yes' ]; then
 	    echo "panoply ${fl_out[${idx_lst}]} &"
 	fi # !rgr_map    
     fi # !yr_srt_prv
-    echo "Elapsed time $((date_dff/60))m$((date_dff % 60))s"
 fi # !clm_flg
 if [ "${sbs_flg}" = 'Yes' ]; then
     echo "Quick plots of last variable split in last segment:"
@@ -2666,14 +2688,13 @@ if [ "${sbs_flg}" = 'Yes' ]; then
 	echo "panoply ${fl_out[${idx_lst}]} &"
     fi # !rgr_map    
 fi # !sbs_flg
-
-# PMC: add SMB's Git (SHA1) hash info to climo files
-# Assumes utility to add Git hash resides in ../utils/add_git_hash_to_netcdf_metadata
-#for ((clm_idx=1;clm_idx<=clm_nbr;clm_idx++)); do
-#    fl_out_lst="${fl_out_lst} ${fl_out[${clm_idx}]}"
-#done
-# CSZ: 20150826 disable until less fragile (than relative path) solution is found 
-#cd ${drc_spt}
-# ../utils/add_git_hash_to_netcdf_metadata ${fl_out_lst}
+date_end=$(date +"%s")
+if [ -n "${caseid}" ]; then
+    printf "Completed ${yr_nbr_xtn}-year climatology operations for dataset ${caseid} at `date`\n"
+else # !caseid
+    printf "Completed ${yr_nbr_xtn}-year climatology operations for input data at `date`\n"
+fi # !caseid
+date_dff=$((date_end-date_srt))
+echo "Elapsed time $((date_dff/60))m$((date_dff % 60))s"
 
 exit 0
diff --git a/data/ncremap b/data/ncremap
index 3dfce56..08679fe 100755
--- a/data/ncremap
+++ b/data/ncremap
@@ -2,7 +2,7 @@
 
 # Purpose: Regrid (subsets of) netCDF files between different Swath, Curvilinear, Rectangular, and Unstructured data (SCRUD) grids, generate any required/requested global or regional rectangular grid, output SCRIP, UGRID, and/or skeleton data formats
 
-# Copyright (C) 2015--2017 Charlie Zender
+# Copyright (C) 2015--2018 Charlie Zender
 # This file is part of NCO, the netCDF Operators. NCO is free software.
 # You may redistribute and/or modify NCO under the terms of the 
 # GNU General Public License (GPL) Version 3.
@@ -48,12 +48,12 @@
 # Insta-install:
 # scp ~/nco/data/ncremap aims4.llnl.gov:bin
 # scp ~/nco/data/ncremap blues.lcrc.anl.gov:bin
+# scp ~/nco/data/ncremap cheyenne.ucar.edu:bin
 # scp ~/nco/data/ncremap cooley.alcf.anl.gov:bin
 # scp ~/nco/data/ncremap cori.nersc.gov:bin_cori
 # scp ~/nco/data/ncremap edison.nersc.gov:bin_edison
 # scp ~/nco/data/ncremap rhea.ccs.ornl.gov:bin_rhea
 # scp ~/nco/data/ncremap skyglow.ess.uci.edu:bin
-# scp ~/nco/data/ncremap yellowstone.ucar.edu:bin
 # scp dust.ess.uci.edu:nco/data/ncremap ~/bin
 
 # Set script name, directory, PID, run directory
@@ -85,19 +85,19 @@ fi # HOSTNAME
 if [ -z "${DATA}" ]; then
     case "${HOSTNAME}" in 
 	constance* | node* ) DATA='/scratch' ; ;; # PNNL
-	blues* | blogin* | b[0123456789][0123456789][0123456789] ) DATA="/lcrc/project/ACME/${USER}" ; ;; # ALCF blues compute nodes named bNNN, 16|64 cores|GB/node 
+	blues* | blogin* | b[0123456789][0123456789][0123456789] ) DATA="/lcrc/project/ACME/${USER}" ; ;; # ALCF blues compute nodes named bNNN, 36|64 cores|GB/node 
+	*cheyenne* ) DATA="/glade/p/work/${USER}" ; ;; # NCAR cheyenne compute nodes named cheyenneNNN, 18|(64/128) cores|GB/node (cheyenne login nodes 256 GB)
 	cooley* | cc[0123456789][0123456789][0123456789] | mira* ) DATA="/projects/HiRes_EarthSys/${USER}" ; ;; # ALCF cooley compute nodes named ccNNN, 384 GB/node 
-	cori* | edison* ) DATA="${SCRATCH}" ; ;; # NERSC cori/edison compute nodes all named nidNNNNN, edison 24|64 cores|GB/node; cori 32|128 cores|GB/node (cori login nodes 512 GB)
+	cori* | edison* ) DATA="${SCRATCH}" ; ;; # NERSC cori/edison compute nodes all named nidNNNNN, edison 24|64 cores|GB/node; cori 32|(96/128) cores|GB/node (knl/haswell) (cori login nodes 512 GB)
 	pileus* ) DATA="/lustre/atlas/world-shared/cli115/${USER}" ; ;; # OLCF CADES
 	rhea* | titan* ) DATA="/lustre/atlas/world-shared/cli115/${USER}" ; ;; # OLCF rhea compute nodes named rheaNNN, 128 GB/node
-	ys* ) DATA="/glade/p/work/${USER}" ; ;; # NCAR yellowstone compute nodes named ysNNN, 32 GB/node
 	* ) DATA='/tmp' ; ;; # Other
     esac # !HOSTNAME
 fi # DATA
 
 # Ensure batch jobs access correct 'mpirun' (or, with SLURM, 'srun') command, netCDF library, and NCO executables and library
 # 20170914 Entire block is identical between ncclimo and ncremap---keep it that way!
-# hrd_pth a placeholder no-op that could one day be used as a command-line option to control environment
+# hrd_pth is a placeholder no-op that could be a command-line option to control environment
 # Set NCO_PATH_OVERRIDE to 'No' to prevent NCO from executing next block that overrides PATH:
 # export NCO_PATH_OVERRIDE='No'
 hrd_pth='Yes' # [sng] Hard-code machine-dependent paths/modules if HOSTNAME in database
@@ -122,6 +122,17 @@ if [ "${hrd_pth}" != 'No' ] && [ "${NCO_PATH_OVERRIDE}" != 'No' ]; then
 	mira* )
 	    export PATH='/home/zender/bin_mira'\:${PATH}
 	    export LD_LIBRARY_PATH='/soft/libraries/netcdf/current/library:/home/zender/lib_mira'\:${LD_LIBRARY_PATH} ; ;;
+	*cheyenne* )
+	    # 20180112: Cheyenne support not yet tested in batch mode
+	    if [ ${spt_nm} = 'ncremap' ]; then
+		# On cheyenne, module load ncl installs ERWG in /glade/u/apps/ch/opt/ncl/6.4.0/intel/17.0.1/bin (i.e., ${NCARG_ROOT}/bin)
+		module load ncl
+	    fi # !ncremap
+	    if [ -n "${NCARG_ROOT}" ]; then
+		export PATH="${PATH}:/glade/u/apps/ch/opt/ncl/6.4.0/intel/17.0.1/bin"
+	    fi # !NCARG_ROOT
+            export PATH='/glade/u/home/zender/bin'\:${PATH}
+            export LD_LIBRARY_PATH='/glade/u/apps/ch/opt/netcdf/4.4.1.1/intel/17.0.1/lib:/glade/u/home/zender/lib'\:${LD_LIBRARY_PATH} ; ;;
 	cori* )
 	    # 20160407: Separate cori from edison binary locations to allow for different system libraries
 	    # 20160420: module load gsl, udunits required for non-interactive batch submissions by Wuyin Lin
@@ -187,17 +198,6 @@ if [ "${hrd_pth}" != 'No' ] && [ "${NCO_PATH_OVERRIDE}" != 'No' ]; then
 	    fi # !NCARG_ROOT
             export PATH='/ccs/home/zender/bin_titan'\:${PATH}
 	    export LD_LIBRARY_PATH='/opt/cray/netcdf/4.4.1.1/GNU/49/lib:/sw/xk6/udunits/2.1.24/sl_gcc4.5.3/lib:/ccs/home/zender/lib_titan'\:${LD_LIBRARY_PATH} ; ;;
-	ys* )
-	    # 20151018: Yellowstone support not yet tested in batch mode
-	    if [ ${spt_nm} = 'ncremap' ]; then
-		# On yellowstone, module load ncl installs ERWG in /glade/apps/opt/ncl/6.4.0/intel/12.1.5/bin (not in ${NCARG_ROOT}/bin)
-		module load ncl
-	    fi # !ncremap
-	    if [ -n "${NCARG_ROOT}" ]; then
-		export PATH="${PATH}:/glade/apps/opt/ncl/6.4.0/intel/12.1.5/bin"
-	    fi # !NCARG_ROOT
-            export PATH='/glade/u/home/zender/bin'\:${PATH}
-            export LD_LIBRARY_PATH='/glade/apps/opt/netcdf/4.4.1/intel/16.0.3/lib:/glade/u/home/zender/lib'\:${LD_LIBRARY_PATH} ; ;;
 	* ) # Default fall-through
 	    hrd_pth_fnd='No' ; ;;
     esac # !HOSTNAME
@@ -237,9 +237,10 @@ fi # !hrd_pth && !NCO_PATH_OVERRIDE
 # New MPAS filename conventions (as of ~201612):
 # ncremap -P mpas -i ${DATA}/hdf/mpaso.hist.am.timeSeriesStatsMonthly.0001-01-01.nc -m ${DATA}/maps/map_oEC60to30_to_t62_bilin.20160301.nc -O ~/rgr
 # ncremap -P mpas -i ${DATA}/hdf/mpascice.hist.am.timeSeriesStatsMonthly.0251-01-01.nc -m ${DATA}/maps/map_oEC60to30_to_t62_bilin.20160301.nc -O ~/rgr
+# ncremap -P mpas --mss_val=-1.0e36 -s ${DATA}/grids/ais20km.150910.SCRIP.nc -i ${DATA}/hdf/ais20km.20180117.nc -g ${DATA}/grids/129x256_SCRIP.20150901.nc -o ~/foo.nc
 # E3SM/ACME benchmarks:
-# ncremap -v FSNT,AODVIS -a conserve -i ${DATA}/ne30/raw/famipc5_ne30_v0.3_00003.cam.h0.1979-01.nc -m ${DATA}/maps/map_ne30np4_to_fv129x256_aave.20150901.nc -o ~/foo.nc
-# ncremap -v FSNT,AODVIS -i ${DATA}/ne30/raw/famipc5_ne30_v0.3_00003.cam.h0.1979-01.nc -s ${DATA}/grids/ne30np4_pentagons.091226.nc -g ${DATA}/grids/129x256_SCRIP.20150901.nc -o ~/foo.nc
+# ncremap -v FSNT,AODVIS -i ${DATA}/ne30/raw/famipc5_ne30_v0.3_00003.cam.h0.1979-01.nc -m ${DATA}/maps/map_ne30np4_to_fv129x256_aave.20150901.nc -o ~/foo.nc
+# ncremap -v FSNT,AODVIS -a conserve -i ${DATA}/ne30/raw/famipc5_ne30_v0.3_00003.cam.h0.1979-01.nc -s ${DATA}/grids/ne30np4_pentagons.091226.nc -g ${DATA}/grids/129x256_SCRIP.20150901.nc -o ~/foo.nc
 # ncremap -v FSNT,AODVIS -a tempest -i ${DATA}/ne30/raw/famipc5_ne30_v0.3_00003.cam.h0.1979-01.nc -s ${DATA}/grids/ne30np4_pentagons.091226.nc -g ${DATA}/grids/129x256_SCRIP.20150901.nc -o ~/foo.nc
 # Positional arguments:
 # ncremap --var=FSNT,AODVIS --map=${DATA}/maps/map_ne30np4_to_fv129x256_aave.20150901.nc --drc_out=~/rgr ${DATA}/ne30/raw/famipc5_ne30_v0.3_00003.cam.h0.1979-??.nc
@@ -263,8 +264,11 @@ fi # !hrd_pth && !NCO_PATH_OVERRIDE
 # ncremap -v FSNT,AODVIS -s ${DATA}/grids/ne30np4_pentagons.091226.nc -i ${DATA}/ne30/raw/famipc5_ne30_v0.3_00003.cam.h0.1979-01.nc -d ${DATA}/dstmch90/dstmch90_clm.nc -o ~/foo.nc
 # TempestRemap boutique:
 # GenerateCSMesh --alt --res 30 --file ${DATA}/grids/ne30.g
-# ncremap --dbg=1 --src_grd=${DATA}/grids/ne30.g --dst_grd=${DATA}/grids/129x256_SCRIP.20150901.nc -m ~/map_ne30np4_to_fv129x256_mono.20180101.nc -a se2fv_flx
-# ncremap --dbg=1 --src_grd=${DATA}/grids/ne30.g --se_mtd=${DATA}/grids/ne30np4_latlon.091226.nc --dst_grd=${DATA}/grids/129x256_SCRIP.20150901.nc -m ~/map_ne30np4_to_fv129x256_mono.20180101.nc -a se2fv_flx
+# ncremap --dbg=1 -a se2fv_flx --src_grd=${DATA}/grids/ne30.g --dst_grd=${DATA}/grids/129x256_SCRIP.20150901.nc -m ~/map_ne30np4_to_fv129x256_mono.20180101.nc
+# ncremap --dbg=1 -i ${DATA}/ne30/raw/famipc5_ne30_v0.3_00003.cam.h0.1979-01.nc -m ~/map_ne30np4_to_fv129x256_mono.20180301.nc -o ~/foo_fv129x256.nc
+# ncremap --dbg=1 -a fv2se_stt --src_grd=${DATA}/grids/129x256_SCRIP.20150901.nc --dst_grd=${DATA}/grids/ne30.g -m ~/map_fv129x256_to_ne30np4_highorder.20180301.nc
+# ncremap --dbg=1 -i ~/foo_fv129x256.nc -m ~/map_fv129x256_to_ne30np4_highorder.20180301.nc -o ~/foo_ne30.nc
+# ncremap --dbg=1 -a se2fv_flx --src_grd=${DATA}/grids/ne30.g --se_mtd=${DATA}/grids/ne30np4_latlon.091226.nc --dst_grd=${DATA}/grids/129x256_SCRIP.20150901.nc -m ~/map_ne30np4_to_fv129x256_mono.20180301.nc
 # Debugging and Benchmarking:
 # ncremap -D 1 -i ${DATA}/sld/raw/AIRS.2014.10.01.202.L2.TSurfStd.Regrid010.1DLatLon.hole.nc -d ${DATA}/dstmch90/dstmch90_clm.nc -o ~/foo.nc > ~/ncremap.out 2>&1 &
 
@@ -347,6 +351,8 @@ inp_psn='No' # [sng] Input file list from positional arguments
 inp_std='No' # [sng] Input file list from stdin
 job_nbr=2 # [nbr] Job simultaneity for parallelism
 map_fl='' # [sng] Map-file
+map_rsl_fl='' # [sng] File containing results of weight-generation command (i.e., map_fl or map_trn_fl for monotr)
+map_trn_fl='' # [sng] Map-file transpose (for Tempest)
 map_xmp='map.nc' # [sng] Map-file for examples
 mlt_map_flg='Yes' # [sng] Multi-map flag
 mpi_flg='No' # [sng] Parallelize over nodes
@@ -354,6 +360,8 @@ msh_fl='' # [sng] Mesh-file (for Tempest)
 msk_dst='' # [sng] Mask-template variable in destination file
 msk_out='' # [sng] Mask variable in regridded file
 msk_src='' # [sng] Mask-template variable in source file
+mss_val='-9.99999979021476795361e+33' # [frc] Missing value for MPAS (ocean+seaice)
+#mss_val='-1.0e36' # [frc] Missing value for MPAS (landice)
 nco_opt='-O --no_tmp_fl' # [sng] NCO defaults (e.g., '-O -6 -t 1')
 nco_usr='' # [sng] NCO user-configurable options (e.g., '-D 1')
 nd_nbr=1 # [nbr] Number of nodes
@@ -370,6 +378,7 @@ sgs_nrm='1.0' # [frc] Sub-grid normalization
 std_flg='No' # [sng] Input available from pipe to stdin
 thr_nbr=2 # [nbr] Thread number for regridder
 tmp_out_fl='ncremap_grd_tmp.nc' # [sng] Temporary output file
+trn_map='' # [flg] Tempest transpose map (i.e., fv2se_flx == monotr)
 ugrid_fl='' # [sng] UGRID file
 unq_sfx=".pid${spt_pid}" # [sng] Unique suffix
 #var_lst='FSNT,AODVIS' # [sng] Variables to process (empty means all)
@@ -425,12 +434,13 @@ function fnc_usg_prn { # NB: dash supports fnc_nm (){} syntax, not function fnc_
     echo "${fnt_rvr}-I${fnt_nrm} ${fnt_bld}drc_in${fnt_nrm}   Input directory (empty means none) (default ${fnt_bld}${drc_in}${fnt_nrm}) [${fnt_tlc}drc_in, in_drc, dir_in, in_dir, input${fnt_nrm}]"
     echo "${fnt_rvr}-i${fnt_nrm} ${fnt_bld}in_fl${fnt_nrm}    Input file (empty means pipe to stdin or drc_in) (default ${fnt_bld}${in_fl}${fnt_nrm}) [${fnt_tlc}in_fl, in_file, input_file${fnt_nrm}]"
     echo "${fnt_rvr}-j${fnt_nrm} ${fnt_bld}job_nbr${fnt_nrm}  Job simultaneity for parallelism (default ${fnt_bld}${job_nbr}${fnt_nrm}) [${fnt_tlc}job_nbr, job_number, jobs${fnt_nrm}]"
-    echo " ${fnt_bld}-L${fnt_nrm}  Deflate level (empty is none) (default ${fnt_bld}${dfl_lvl}${fnt_nrm}) [${fnt_tlc}dfl_lvl, dfl, deflate${fnt_nrm}]"
+    echo "${fnt_rvr}-L${fnt_nrm} ${fnt_bld}dfl_lvl${fnt_nrm}  Deflate level (empty is none) (default ${fnt_bld}${dfl_lvl}${fnt_nrm}) [${fnt_tlc}dfl_lvl, dfl, deflate${fnt_nrm}]"
     echo "${fnt_rvr}-M${fnt_nrm}          Multi-map-file toggle (unset means generate one map-file per input file) [${fnt_tlc}mlt_map, no_multimap${fnt_nrm}]"
     echo "${fnt_rvr}-m${fnt_nrm} ${fnt_bld}map_fl${fnt_nrm}   Map-file (empty means generate internally) (default ${fnt_bld}${map_fl}${fnt_nrm}) [${fnt_tlc}map_fl, map, map_file, rgr_map, regrid_map${fnt_nrm}]"
     echo " ${fnt_bld}--msk_dst${fnt_nrm}  Mask-template variable in destination file (empty means none) (default ${fnt_bld}${msk_dst}${fnt_nrm}) [${fnt_tlc}msk_dst, dst_msk, mask_destination, mask_dst${fnt_nrm}]"
     echo " ${fnt_bld}--msk_out${fnt_nrm}  Mask variable in regridded file (empty means none) (default ${fnt_bld}${msk_out}${fnt_nrm}) [${fnt_tlc}msk_out, out_msk, mask_output, mask_rgr${fnt_nrm}]"
     echo " ${fnt_bld}--msk_src${fnt_nrm}  Mask-template variable in source file (empty means none) (default ${fnt_bld}${msk_src}${fnt_nrm}) [${fnt_tlc}msk_src, src_msk, mask_source, mask_src${fnt_nrm}]"
+    echo " ${fnt_bld}--mss_val${fnt_nrm}  Missing value for MPAS (empty means none) (default ${fnt_bld}${mss_val}${fnt_nrm}) [${fnt_tlc}mss_val, fll_val, missing_value, fill_value${fnt_nrm}]"
     echo "${fnt_rvr}-n${fnt_nrm} ${fnt_bld}nco_opt${fnt_nrm}  NCO options (empty means none) (default ${fnt_bld}${nco_opt}${fnt_nrm}) [${fnt_tlc}nco_opt, nco_options${fnt_nrm}]"
     echo " ${fnt_bld}--no_cll_msr${fnt_nrm}  Omit cell_measures variables (e.g., 'area') [${fnt_tlc}no_area, no_cll_msr, no_cell_measures${fnt_nrm}]"
     echo " ${fnt_bld}--no_frm_trm${fnt_nrm}  Omit formula_terms variables (e.g., 'hyba', 'PS') [${fnt_tlc}no_frm_trm, no_formula_terms${fnt_nrm}]"
@@ -564,6 +574,7 @@ while getopts :34567a:CD:d:f:g:G:h:I:i:j:L:Mm:n:O:o:P:p:R:r:s:T:t:Uu:V:v:W:w:x:-
 	       msk_dst=?* | dst_msk=?* | mask_destination=?* | mask_dst=?* ) msk_dst="${LONG_OPTARG}" ;; # # Mask-template variable in destination file
 	       msk_out=?* | out_msk=?* | mask_output=?* | mask_out=?* ) msk_out="${LONG_OPTARG}" ;; # # Mask variable in regridded file
 	       msk_src=?* | src_msk=?* | mask_source=?* | mask_src=?* ) msk_src="${LONG_OPTARG}" ;; # # Mask-template variable in source file
+	       mss_val=?* | fll_val=?* | missing_value=?* | fill_value=?* ) mss_val="${LONG_OPTARG}" ;; # # Missing value for MPAS
 	       nco_opt=?* | nco=?* | nco_options=?* ) nco_usr="${LONG_OPTARG}" ;; # -n # NCO options
 	       no_area | no_cll_msr | no_cell_measures ) no_cll_msr='Yes' ;; # # Omit cell_measures variables
 	       no_area=?* | no_cell_msr=?* | no_cell_measures=?* ) echo "No argument allowed for --${OPTARG switch}" >&2; exit 1 ;; # # Omit cell_measures variables
@@ -616,7 +627,7 @@ if [ ${psn_nbr} -ge 1 ]; then
 fi # !psn_nbr
 if [ ${vrs_prn} = 'Yes' ]; then
     printf "${spt_nm}, the NCO regridder and map- and grid-generator, version ${nco_vrs}\n"
-    printf "Copyright (C) 2016--2017 Charlie Zender\n"
+    printf "Copyright (C) 2016--2018 Charlie Zender\n"
     printf "This program is part of NCO, the netCDF Operators\n"
     printf "NCO is free software and comes with a BIG FAT KISS and ABSOLUTELY NO WARRANTY\n"
     printf "You may redistribute and/or modify NCO under the terms of the\n"
@@ -624,8 +635,8 @@ if [ ${vrs_prn} = 'Yes' ]; then
     printf "GPL: http://www.gnu.org/copyleft/gpl.html\n"
     printf "LICENSE: https://github.com/nco/nco/tree/master/LICENSE\n"
     printf "Config: ${spt_nm} running from directory ${drc_spt}\n"
-    printf "Config: calling NCO binaries in directory ${drc_nco}\n"
-    printf "Config: binaries linked to netCDF library version ${lbr_vrs}\n"
+    printf "Config: Calling NCO binaries in directory ${drc_nco}\n"
+    printf "Config: Binaries linked to netCDF library version ${lbr_vrs}\n"
     if [ "${hrd_pth_fnd}" = 'Yes' ]; then
 	printf "Config: Employ NCO machine-dependent hardcoded paths/modules for ${HOSTNAME}\n"
 	printf "Config: (Turn-off NCO hardcoded paths with \"export NCO_PATH_OVERRIDE=No\")\n"
@@ -761,7 +772,7 @@ elif [ ${alg_typ} = 'tempest' ] || [ ${alg_typ} = 'tps' ] || [ ${alg_typ} = 'tmp
     # 20171108 'tempest' invokes TempestRemap with no automatic options, suitable for RLL re-mapping?
     # 20171108 TempestRemap boutique options based on particular remapping type
     # https://acme-climate.atlassian.net/wiki/spaces/Docs/pages/178848194/Transition+to+TempestRemap+for+Atmosphere+grids
-    # map_tag in comments is for E3SM naming convention map_src_to_dst_${map_tag}.20180101.nc
+    # map_tag in comments is for E3SM naming convention map_src_to_dst_${map_tag}.20180301.nc
     alg_opt='tempest'
     wgt_typ='tempest'
 elif [ ${alg_typ} = 'se2fv_flx' ] || [ ${alg_typ} = 'mono_se2fv' ] || [ ${alg_typ} = 'conservative_monotone_se2fv' ]; then # map_tag='mono'
@@ -783,13 +794,13 @@ elif [ ${alg_typ} = 'se2fv_alt' ] || [ ${alg_typ} = 'intbilin_se2fv' ] || [ ${al
     fi # !gll_fl
     wgt_typ='tempest'
 elif [ ${alg_typ} = 'fv2se_flx' ] || [ ${alg_typ} = 'monotr_fv2se' ] || [ ${alg_typ} = 'conservative_monotone_fv2se' ]; then # map_tag='monotr'
+    # NB: Generate mono map for opposite direction regridding (i.e., reverse switches and grids), then transpose
     wgt_opt_tps="--in_type cgll --in_np 4 --out_type fv --out_double --mono"
     if [ -n "${gll_fl}" ]; then
 	wgt_opt_tps="--in_meta ${gll_fl} ${wgt_opt_tps}"
     fi # !gll_fl
     wgt_typ='tempest'
-    # fxm: transpose maps need additional call:
-    # ./GenerateTransposeMap --in map_atm2ocn_mono.nc --out map_ocn2atm_monotr.nc
+    trn_map='Yes'
 elif [ ${alg_typ} = 'fv2se_stt' ] || [ ${alg_typ} = 'highorder_fv2se' ] || [ ${alg_typ} = 'accurate_conservative_nonmonotone_fv2se' ]; then # map_tag='highorder'
     wgt_opt_tps="--in_type fv --in_np 2 --out_type cgll --out_np 4 --out_double --volumetric"
     if [ -n "${gll_fl}" ]; then
@@ -949,7 +960,8 @@ if [ "${prc_typ}" = 'mod04' ]; then
 fi # !mod04
 if [ "${prc_typ}" = 'mpas' ]; then 
 #    pdq_opt='-a Time,nVertLevels,maxEdges,MaxEdges2,nEdges,nCells' # Ocean
-#    pdq_opt='-a Time,nCategories,ONE,nEdges,nCells' # Ice
+#    pdq_opt='-a Time,nCategories,ONE,nEdges,nCells' # SeaIce
+#    pdq_opt='-a Time,nCategories,TWO,nEdges,nCells' # LandIce
     pdq_opt='-a Time,nVertLevels,maxEdges,MaxEdges2,nCategories,ONE,nEdges,nCells' # Ocean and Ice in one swell foop
     if [ -n "${rnr_thr}" ]; then 
 	# Setting rnr_thr='off' in MPAS mode turns-off renormalization
@@ -1067,16 +1079,21 @@ else # !map_fl
     fi # !tempest
     map_fl=${map_fl_dfl}
 fi # !map_fl
+map_rsl_fl=${map_fl}
 if [ "${map_mk}" = 'Yes' ] && [ "${wgt_typ}" = 'tempest' ]; then 
     msh_fl_dfl="${drc_tmp}/ncremap_tmp_msh_ovr_${wgt_typ}.g${unq_sfx}" # [sng] Mesh-file default
     msh_fl=${msh_fl_dfl}
+    if [ "${trn_map}" = 'Yes' ]; then 
+	map_trn_fl="${drc_tmp}/ncremap_tmp_map_trn_${wgt_typ}.nc${unq_sfx}" # [sng] Map-file transpose default
+	map_rsl_fl=${map_trn_fl}
+    fi # !trn_map
 fi # !tempest
 
 # Read files from stdin pipe, positional arguments, or directory glob
 # Code block taken from ncclimo
 # ncclimo sets inp_aut flag when file list is automatically (i.e., internally) generated
 # ncremap uses convention that input files specified with -i set inp_aut flag
-# That way, ncremap code block looks closer to ncclimo with introducing a new "inp_cmd" flag
+# That way, ncremap code block looks closer to ncclimo without introducing a new "inp_cmd" flag
 #printf "dbg: inp_aut  = ${inp_aut}\n"
 #printf "dbg: inp_glb  = ${inp_glb}\n"
 #printf "dbg: inp_psn  = ${inp_psn}\n"
@@ -1112,6 +1129,7 @@ if [ ${inp_psn} = 'Yes' ]; then
 	fl_nbr=1
     elif [ ${psn_nbr} -eq 2 ]; then
 	if [ -z "${out_fl}" ]; then
+	    fl_in[0]=${1}
 	    out_fl=${2}
 	    out_usr_flg='Yes'
 	    fl_nbr=1
@@ -1208,11 +1226,16 @@ if [ ${dbg_lvl} -ge 2 ]; then
     printf "dbg: drc_tmp  = ${drc_tmp}\n"
     printf "dbg: dst_fl   = ${dst_fl}\n"
     printf "dbg: fl_fmt   = ${fl_fmt}\n"
+    printf "dbg: fl_nbr   = ${fl_nbr}\n"
     printf "dbg: gaa_sng  = ${gaa_sng}\n"
     printf "dbg: gll_fl   = ${gll_fl}\n"
     printf "dbg: grd_dst  = ${grd_dst}\n"
     printf "dbg: grd_sng  = ${grd_sng}\n"
     printf "dbg: grd_src  = ${grd_src}\n"
+    printf "dbg: inp_aut  = ${inp_aut}\n"
+    printf "dbg: inp_glb  = ${inp_glb}\n"
+    printf "dbg: inp_psn  = ${inp_psn}\n"
+    printf "dbg: inp_std  = ${inp_std}\n"
     printf "dbg: hdr_pad  = ${hdr_pad}\n"
     printf "dbg: hrd_pth  = ${hrd_pth}\n"
     printf "dbg: job_nbr  = ${job_nbr}\n"
@@ -1327,9 +1350,9 @@ if [ ${vrb_lvl} -ge ${vrb_3} ]; then
 	fi # !pdq_typ
     fi # !pdq_opt
     if [ "${prc_typ}" = 'mpas' ]; then
-	printf "Input assumed to be MPAS-O/I data: will renormalize (with --rnr=0.0) regridding\n"
+	printf "Input assumed to be MPAS data: will renormalize (with --rnr=0.0) regridding\n"
 	if [ "${clm_flg}" = 'No' ]; then
- 	    printf "Input assumed to be barenaked of attributes: will annotate NC_DOUBLE variables with _FillValue prior to regridding\n"
+ 	    printf "Input assumed to be barenaked of attributes: will annotate NC_DOUBLE variables with _FillValue = ${mss_val} prior to regridding\n"
 	fi # !clm_flg
     fi # !mpas
     if [ "${prc_typ}" = 'sgs' ]; then 
@@ -1634,6 +1657,12 @@ if [ "${grd_src_usr_flg}" = 'Yes' ] || [ "${prc_typ}" = 'sgs' ]; then
     if [ "${wgt_typ}" = 'tempest' ]; then 
 	cmd_msh[${fl_idx}]="GenerateOverlapMesh --a ${grd_src} --b ${grd_dst} --out ${msh_fl} > /dev/null"
 	cmd_map[${fl_idx}]="${wgt_cmd} --in_mesh ${grd_src} --out_mesh ${grd_dst} --ov_mesh ${msh_fl} --out_map ${map_fl} ${wgt_opt} > /dev/null"
+	if [ "${trn_map}" = 'Yes' ]; then 
+	    # NB: Generate mono map for opposite direction regridding (i.e., reverse switches and grids), then transpose
+	    cmd_msh[${fl_idx}]="GenerateOverlapMesh --a ${grd_dst} --b ${grd_src} --out ${msh_fl} > /dev/null"
+	    cmd_map[${fl_idx}]="${wgt_cmd} --in_mesh ${grd_dst} --out_mesh ${grd_src} --ov_mesh ${msh_fl} --out_map ${map_trn_fl} ${wgt_opt} > /dev/null"
+	    cmd_trn[${fl_idx}]="GenerateTransposeMap --in ${map_trn_fl} --out ${map_fl} > /dev/null"
+	fi # !trn_map
 	if [ ${dbg_lvl} -ge 1 ]; then
 	    echo ${cmd_msh[${fl_idx}]}
 	fi # !dbg
@@ -1650,7 +1679,7 @@ if [ "${grd_src_usr_flg}" = 'Yes' ] || [ "${prc_typ}" = 'sgs' ]; then
     fi # !dbg
     if [ ${dbg_lvl} -ne 2 ]; then
 	eval ${cmd_map[${fl_idx}]}
-	if [ $? -ne 0 ] || [ ! -f ${map_fl} ]; then
+	if [ $? -ne 0 ] || [ ! -f ${map_rsl_fl} ]; then
 	    printf "${spt_nm}: ERROR Failed to generate map-file. Debug this:\n${cmd_map[${fl_idx}]}\n"
 	    if [ "${wgt_typ}" = 'esmf' ]; then 
 		printf "${spt_nm}: HINT When ESMF fails to generate map-files, it often puts additional debugging information in the file named PET0.RegridWeightGen.Log in the invocation directory (${drc_pwd})\n"
@@ -1662,7 +1691,7 @@ if [ "${grd_src_usr_flg}" = 'Yes' ] || [ "${prc_typ}" = 'sgs' ]; then
 	    if [ "${wgt_typ}" = 'tempest' ]; then 
 		hst_att="${hst_att};${cmd_msh[${fl_idx}]}"
 	    fi # !tempest
-	    cmd_att[${fl_idx}]="ncatted -O ${gaa_sng} --gaa history='${hst_att}' ${map_fl}"
+	    cmd_att[${fl_idx}]="ncatted -O ${gaa_sng} --gaa history='${hst_att}' ${map_rsl_fl}"
 	    eval ${cmd_att[${fl_idx}]}
 	    if [ $? -ne 0 ]; then
 		printf "${spt_nm}: ERROR Failed to annotate map-file. Debug this:\n${cmd_att[${fl_idx}]}\n"
@@ -1670,6 +1699,18 @@ if [ "${grd_src_usr_flg}" = 'Yes' ] || [ "${prc_typ}" = 'sgs' ]; then
 	    fi # !err
 	fi # !map_usr_flg
     fi # !dbg
+    if [ "${trn_map}" = 'Yes' ]; then 
+	if [ ${dbg_lvl} -ge 1 ]; then
+	    echo ${cmd_trn[${fl_idx}]}
+	fi # !dbg
+	if [ ${dbg_lvl} -ne 2 ]; then
+	    eval ${cmd_trn[${fl_idx}]}
+	    if [ $? -ne 0 ] || [ ! -f ${map_fl} ]; then
+		printf "${spt_nm}: ERROR Failed to transpose map-file. Debug this:\n${cmd_trn[${fl_idx}]}\n"
+		exit 1
+	    fi # !err
+	fi # !dbg
+    fi # !trn_map
     # Set map_mk to something besides 'Yes' to avoid re-generating map within file loop
     map_mk='Already made map once. Never again.'
 fi # !grd_src_usr_flg
@@ -1774,6 +1815,12 @@ for ((fl_idx=0;fl_idx<${fl_nbr};fl_idx++)); do
 	    printf "Mesh-File: ${msh_fl}\n"
 	    cmd_msh[${fl_idx}]="GenerateOverlapMesh --a ${grd_src} --b ${grd_dst} --out ${msh_fl} > /dev/null"
 	    cmd_map[${fl_idx}]="${wgt_cmd} --in_mesh ${grd_src} --out_mesh ${grd_dst} --ov_mesh ${msh_fl} --out_map ${map_fl} ${wgt_opt} > /dev/null"
+	    if [ "${trn_map}" = 'Yes' ]; then 
+		# NB: Generate mono map for opposite direction regridding (i.e., reverse switches and grids), then transpose
+		cmd_msh[${fl_idx}]="GenerateOverlapMesh --a ${grd_dst} --b ${grd_src} --out ${msh_fl} > /dev/null"
+		cmd_map[${fl_idx}]="${wgt_cmd} --in_mesh ${grd_dst} --out_mesh ${grd_src} --ov_mesh ${msh_fl} --out_map ${map_trn_fl} ${wgt_opt} > /dev/null"
+		cmd_trn[${fl_idx}]="GenerateTransposeMap --in ${map_trn_fl} --out ${map_fl} > /dev/null"
+	    fi # !trn_map
 	    if [ ${dbg_lvl} -ge 1 ]; then
 		echo ${cmd_msh[${fl_idx}]}
 	    fi # !dbg
@@ -1792,7 +1839,7 @@ for ((fl_idx=0;fl_idx<${fl_nbr};fl_idx++)); do
 	fi # !dbg
 	if [ ${dbg_lvl} -ne 2 ]; then
 	    eval ${cmd_map[${fl_idx}]}
-	    if [ $? -ne 0 ] || [ ! -f ${map_fl} ]; then
+	    if [ $? -ne 0 ] || [ ! -f ${map_rsl_fl} ]; then
 		printf "${spt_nm}: ERROR Failed to generate map-file. Debug this:\n${cmd_map[${fl_idx}]}\n"
 		if [ "${wgt_typ}" = 'esmf' ]; then 
 		    printf "${spt_nm}: HINT When ESMF fails to generate map-files, it often puts additional debugging information in the file named PET0.RegridWeightGen.Log in the invocation directory (${drc_pwd})\n"
@@ -1801,7 +1848,7 @@ for ((fl_idx=0;fl_idx<${fl_nbr};fl_idx++)); do
 	    fi # !err
 	    if [ "${map_usr_flg}" = 'Yes' ]; then
 		hst_att="`date`: ${cmd_ln};${cmd_map[${fl_idx}]}"
-		cmd_att[${fl_idx}]="ncatted -O ${gaa_sng} --gaa history='${hst_att}' ${map_fl}"
+		cmd_att[${fl_idx}]="ncatted -O ${gaa_sng} --gaa history='${hst_att}' ${map_rsl_fl}"
 		eval ${cmd_att[${fl_idx}]}
 		if [ $? -ne 0 ]; then
 		    printf "${spt_nm}: ERROR Failed to annotate map-file. Debug this:\n${cmd_att[${fl_idx}]}\n"
@@ -1809,6 +1856,18 @@ for ((fl_idx=0;fl_idx<${fl_nbr};fl_idx++)); do
 		fi # !err
 	    fi # !map_usr_flg
 	fi # !dbg
+	if [ "${trn_map}" = 'Yes' ]; then 
+	    if [ ${dbg_lvl} -ge 1 ]; then
+		echo ${cmd_trn[${fl_idx}]}
+	    fi # !dbg
+	    if [ ${dbg_lvl} -ne 2 ]; then
+		eval ${cmd_trn[${fl_idx}]}
+		if [ $? -ne 0 ] || [ ! -f ${map_fl} ]; then
+		    printf "${spt_nm}: ERROR Failed to transpose map-file. Debug this:\n${cmd_trn[${fl_idx}]}\n"
+		    exit 1
+		fi # !err
+	    fi # !dbg
+	fi # !trn_map
 
 	# Prevent creating new source gridfile and map-file after first iteration
 	if [ "${mlt_map_flg}" = 'No' ] && [ ${fl_idx} -eq 0 ]; then 
@@ -1820,7 +1879,7 @@ for ((fl_idx=0;fl_idx<${fl_nbr};fl_idx++)); do
     # Block 4: Special cases
     # Block 4a: Add missing metadata to MPAS files unless script was invoked by ncclimo (it makes no sense to give naked files to ncclimo and then annotate here, so assume ncclimo is working with annotated files)
     if [ "${prc_typ}" = 'mpas' ] && [ "${clm_flg}" = 'No' ]; then
-	cmd_att[${fl_idx}]="ncatted -O -t -a _FillValue,,o,d,-9.99999979021476795361e+33 ${in_fl} ${att_fl};"
+	cmd_att[${fl_idx}]="ncatted -O -t -a _FillValue,,o,d,${mss_val} ${in_fl} ${att_fl};"
 	if [ ${vrb_lvl} -ge ${vrb_2} ]; then
 	    printf "att(in)  : ${in_fl}\n"
 	    printf "att(out) : ${att_fl}\n"
@@ -1890,7 +1949,7 @@ for ((fl_idx=0;fl_idx<${fl_nbr};fl_idx++)); do
 	let bch_flg=$(((fl_idx+1) % job_nbr))
 	#printf "${spt_nm}: fl_idx = ${fl_idx}, bch_idx = ${bch_idx}, bch_flg = ${bch_flg}\n"
 	if [ ${bch_flg} -eq 0 ]; then
-	    if [ ${dbg_lvl} -ge 1 ]; then
+	    if [ ${dbg_lvl} -ge 1 ] && [ ${idx_srt} -le ${idx_end} ]; then
 		printf "${spt_nm}: Waiting for batch ${bch_idx} to finish at fl_idx = ${fl_idx}...\n"
 	    fi # !dbg
 	    for ((pid_idx=${idx_srt};pid_idx<=${idx_end};pid_idx++)); do
@@ -1929,7 +1988,9 @@ if [ -n "${par_opt}" ]; then
     let bch_flg=$((fl_nbr % job_nbr))
     if [ ${bch_flg} -ne 0 ]; then
 	let bch_idx=$((bch_idx+1))
-	printf "${spt_nm}: Waiting for (partial) batch ${bch_idx} to finish...\n"
+	if [ ${dbg_lvl} -ge 1 ] && [ ${idx_srt} -lt ${fl_nbr} ]; then
+	    printf "${spt_nm}: Waiting for (partial) batch ${bch_idx} to finish...\n"
+	fi # !idx_srt
 	for ((pid_idx=${idx_srt};pid_idx<${fl_nbr};pid_idx++)); do
 	    wait ${rgr_pid[${pid_idx}]}
 	    if [ $? -ne 0 ]; then
@@ -1999,7 +2060,7 @@ if [ "${cln_flg}" = 'Yes' ]; then
     if [ ${vrb_lvl} -ge ${vrb_3} ]; then
 	printf "Clean-up intermediate files...\n"
     fi # !vrb_lvl
-    /bin/rm -f ${att_fl} ${frc_in_sgs} ${frc_out_sgs} ${grd_dst_sgs} ${grd_dst_dfl} ${grd_src_sgs} ${grd_src_dfl} ${hnt_dst_fl} ${hnt_src_fl} ${map_fl_dfl} ${msh_fl_dfl} ${ncwa_fl} ${pdq_fl} ${tmp_out_fl} ${znl_fl/znl/znl1} ${znl_fl/znl/znl2}
+    /bin/rm -f ${att_fl} ${frc_in_sgs} ${frc_out_sgs} ${grd_dst_sgs} ${grd_dst_dfl} ${grd_src_sgs} ${grd_src_dfl} ${hnt_dst_fl} ${hnt_src_fl} ${map_fl_dfl} ${map_trn_fl} ${msh_fl_dfl} ${ncwa_fl} ${pdq_fl} ${tmp_out_fl} ${znl_fl/znl/znl1} ${znl_fl/znl/znl2}
 else # !cln_flg
     if [ ${vrb_lvl} -ge ${vrb_3} ]; then
 	printf "Explicitly instructed not to clean-up intermediate files.\n"
diff --git a/debian/changelog b/debian/changelog
index d1e176e..e1ed621 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+nco (4.7.2-1) unstable; urgency=low
+
+  * new upstream version fxm
+
+ -- Charlie Zender <zender at uci.edu>  Thu, 21 Jan 2017 12:25:28 -0700
+
 nco (4.7.1-1) unstable; urgency=low
 
   * new upstream version WIN64 ABI; Conda Windows; JSON tweaks; fix clm_md=dly,ann
diff --git a/doc/ANNOUNCE b/doc/ANNOUNCE
index d33c80a..e81523b 100644
--- a/doc/ANNOUNCE
+++ b/doc/ANNOUNCE
@@ -1,26 +1,21 @@
 $Header$ -*-text-*-
 
-The netCDF Operators NCO version 4.7.1 have escaped.
+The netCDF Operators NCO version 4.7.2 have slithered out.
 
 http://nco.sf.net (Homepage, Mailing lists, Help)
 http://github.com/nco (Source Code, Releases, Developers)
 
 What's new?
-Version 4.7.1 contains mostly minor fixes and few new features.
-One major improvement, long in development, is a Conda Windows port. 
-Most NCO functionality is now easily available to Windows users
-through the Conda distribution. 
-
-Pedro Vicente turned his Windows scripts into a CMake implementation. 
-Building on Pedro's CMake contribution, a team of about six volunteers
-used, refined, or implemented Windows ports for the full NCO software
-stack. Filipe Fernandez coordinated the Conda work, added AppVeyor
-support, and brought in extra help and testing. Pedro and Isuru
-Fernando tracked down bugs and improved the build matrix.
-No one person could have accomplished this.
-The power of Open Source development is awesome.
-
-Work on NCO 4.7.1 has commenced. Planned changes include
+Version 4.7.2 contains one new cool feature for ncremap, one important
+bugfix for the splitter, and assorted minor improvements and fixes.
+ncremap now implements E3SM-recommended Tempest remapping algorithms
+for all combinations of FV<->SE remapping for flux and state variables. 
+The ncclimo splitter functionality has an important bugfix for cases
+when the total number requested time-periods (usually years) of
+averaging is not evenly divisible by the maximum number of
+time-periods per output-file.
+
+Work on NCO 4.7.3 has commenced. Planned changes include
 better diagnosis and workarounds for the netCDF CDF5 bug,
 parallel weight generation by ncremap, and possibly workarounds for 
 using quotation marks with ncap2 in Windows.
@@ -30,66 +25,66 @@ Charlie
 
 NEW FEATURES (full details always in ChangeLog):
 
-A. NCO Conda package for Windows: All NCO binaries are thought
-   to work correctly, although the regression test script itself
-   (which is written in Perl) has not yet been run on Windows.
-   Windows' idiosyncratic quoting rules can interfere with ncap2
-   (try running from Powershell to use UNIXy quotes).
-   The two scripted operators, ncclimo and ncremap, are problematic.
-   As sophisticated Bash scripts, these do not work on Windows.
-   Volunteers to port them to a Windows-friendly language (e.g.,
-   Python) are welcome! 
-   Within a few days of release, try this Windows install command:
-   conda install -c conda-forge nco   
-   http://nco.sf.net/nco.html#conda
+A. ncremap implements E3SM-recommended Tempest remapping algorithms. 
+   ncremap can now easily generate and use the each of the six
+   E3SM-recommended mappings between FV<->SE flux & state variables.
+   ncremap automatically employs the "boutique" TempestRemap options 
+   so long as Tempest2 is installed.
+   ncremap -a se2fv_flx --src_grd=ne30.g --dst_grd=fv.nc -m map.nc
+   ncremap -m map.nc in.nc out.nc
+   Canonical algorithm names are se2fv_flx, se2fv_stt, se2fv_alt,
+   fv2se_flx, fv2se_stt, fv2se_alt.
+   http://nco.sf.net/nco.html#ncremap
    
-B. ncclimo in daily mode now handles stdin input more cleverly.
-   Piping or redirecting filename lists to ncclimo --clm_md=dly
-   is the easiest way to feed huge lists of filenames to ncclimo.
-   However, these lists are often dominated in size by the path
-   component of the filename, rather than the filename itself.
-   Now ncclimo allows specification of the path with -i drc_in,
-   and it will prepend that path to the standard input names.
-   Previously it prepended the current working directory.
-   This functionality allows easy retention of the full
-   provenance of the input files, without requiring repetitive
-   inclusion of long pathnames in the filenames.
-   ls *.clm2.h0.* | ncclimo -c caseid -C dly -s 1960 -e 2005 -i data
+B. ncremap supports "canonical" NCO argument ordering.
+   Canonical ordering is: command [options] [input] [output].
+   Previously ncremap required the use of options (like -i
+   and -o) or pipes to supply filenames:
+   ncremap -m map.nc -i in.nc -o out.nc
+   ncremap -m map.nc -o out.nc in.nc
+   ncremap -m map.nc -O out_dir in1.nc in2.nc
+   ls in.nc | ncremap -m map.nc -o out.nc
+   ncremap -m map.nc -o out.nc < in.nc
+   Now ncremap finally supports the canonical ordering of command line
+   arguments most frequently desired for one-off regridding, where a
+   single input and output filename are supplied as command-line
+   positional arguments without switches, pipes, or redirection:
+   ncremap -m map.nc in.nc out.nc
+   http://nco.sf.net/nco.html#ncremap
+   http://nco.sf.net/nco.html#alg_typ
+
+C. ncremap support a --mss_val=val option for MPAS data.
+   ncremap pre-processes MPAS datasets (indicated with -P mpas) and
+   annotates their floating point variables with the _FillValue
+   attribute. By default it sets _FillValue to the correct value
+   for MPAS ocean and sea-ice models. However, the MPAS land-ice model
+   uses a different missing value. Hence this option is usually
+   invoked as --mss_val=-1.0e36 to facilitate processing of
+   MPAS land-ice datasets. 
+   ncremap -P mpas --mss_val=-1.0e36 -s ais.nc -i data.nc -g fv.nc -o out.nc
+   http://nco.sf.net/nco.html#ncremap
+   http://nco.sf.net/nco.html#mss_val_ncremap
+
+D. ncclimo has improved support for NCAR cheyenne batch queues
+   Previously ncclimo -p mpi failed on Cheyenne due to differences
+   between SGI MPT mpirun and "normal" mpirun syntax.
+   Now ncclimo uses mpirun syntax expected by SGI MPT on cheyenne.
+   qsub -A SCSG0002 -l select=12:ncpus=36:mpiprocs=1 -l \
+   walltime=00:30:00 -q regular -N ncclimo -j oe -m e -o ~/ncclimo.out 
    http://nco.sf.net/nco.html#ncclimo
 
-C. JSON printing of netCDF3 strings, i.e., character arrays,
-   has changed. Previously ncks printed square brackets around
-   the string, as with numeric arrays. However this was somewhat
-   redundant since the quotation marks around a JSON string already
-   indicate an array of characters. Now ncks omits the inner-most
-   (i.e., most rapidly varying) set of brackets from the printing of
-   character arrays: 
-   ncks --jsn_fmt=2 -C -H -v char_var_2D_arr ~/nco/data/in.nc
-   {
-     "dimensions": {
-         "lat": 2,
-         "lon": 4
-      },
-      "variables": {
-         "char_var_2D_arr": {
-         "shape": ["lat", "lon"],
-         "type": "char",
-         "data": ["one", "two"]
-    ...
-
-   This is instead of "data": [["one"], ["two"]]
-   in the last line. 
-   http://nco.sf.net/nco.html#json
-
 BUG FIXES:
 
-A. Fix bug where ncclimo --clm_md=dly/ann expected a season list.
-   This bug was inadvertently introduced with season code in 4.6.8.
-   The workaround is to use NCO <= 4.6.7 or upgrade to 4.7.1.
-
-B. ncks in JSON, CDL, and XML modes now prints a single NUL as "".
-   Previously a scalar NUL printed as "0", as in ncdump's CDL.
-   However, we think this is a bug in ncdump since NUL is not zero.
+A. Fix ncclimo splitter bug when the total number requested
+   time-periods (usually years) of averaging is not evenly divisible
+   by the maximum number of time-periods per output-file.
+   Previously the splitter would omit time-series segments.
+   The workaround for NCO < 4.7.2 is to specify a maximum number
+   of years-per-file that evenly divides the total number of years.
+   For example, split a 75 year climatology by setting --ypf
+   to 1, 3, 5, 15, 25, or 75 or greater.
+   The solution is to upgrade to 4.7.2.
+   Then you can use the default (ypf=50) or any other value.
 
 Full release statement at http://nco.sf.net/ANNOUNCE
 
@@ -97,9 +92,9 @@ KNOWN PROBLEMS DUE TO NCO:
 
    This section of ANNOUNCE reports and reminds users of the
    existence and severity of known, not yet fixed, problems. 
-   These problems occur with NCO 4.7.1 built/tested under
+   These problems occur with NCO 4.7.2 built/tested under
    MacOS 10.13.2 with netCDF 4.4.1.1 on HDF5 1.10.1 and with
-   Linux with netCDF 4.5.1-development (20171220) on HDF5 1.8.19.
+   Linux with netCDF 4.5.1-development (20180110) on HDF5 1.8.19.
 
 A. NOT YET FIXED (NCO problem)
    Correctly read arrays of NC_STRING with embedded delimiters in ncatted arguments
diff --git a/doc/ChangeLog b/doc/ChangeLog
index 3b4f745..7a04b9c 100644
--- a/doc/ChangeLog
+++ b/doc/ChangeLog
@@ -1,3 +1,93 @@
+2018-01-25  Charlie Zender  <zender at uci.edu>
+
+	* NCO 4.7.2 release procedure:
+	cd ~/nco;git commit -a -m 'Version 4.7.2: Sapiens';git push
+	git tag -a 4.7.2 -m 'Sapiens: splitter ypf, tempest2 boutique, ncremap psn arg, cheyenne';git push --tags
+
+	* ncclimo: provisional, lackluster support for Theta
+
+2018-01-20  Charlie Zender  <zender at uci.edu>
+
+	* NCO 4.7.2-beta01 release procedure:
+	cd ~/nco;git commit -a -m 'Version 4.7.2-beta01: Flighty';git push
+	git tag -a 4.7.2-beta01 -m 'Flighty: splitter ypf, tempest2 boutique, ncremap psn arg, cheyenne';git push --tags
+
+	* ncclimo fully working on cheyenne
+
+2018-01-19  Charlie Zender  <zender at uci.edu>
+
+	* ncclimo fails on cheyenne non-interactive compute nodes due to mpirun issues
+
+	* Verified ncclimo bck mode works on cheyenne interactive compute nodes
+
+	* Include cheyenne compute nodes in list of hardcoded paths to add
+
+	* Tweak ncremap, ncclimo usage strings
+
+2018-01-18  Charlie Zender  <zender at uci.edu>
+
+	* Add and document ncremap --mss_val to support MPAS-LI datasets
+
+	* #include "nco_cln_utl.h" in fmc_all_cls.hh to prototype nco_cln_prs_tm() and fix compilation error on edison
+
+2018-01-12  Charlie Zender  <zender at uci.edu>
+
+	* Update ncremap/ncclimo to use latest cheyenne paths, deprecate yellowstone
+
+	* Successful Tempest2 builds on MacOS, now ncremap is cross-platform again
+
+	* Update CF references to version 1.7 in nco.texi
+
+	* Add latitude, longitude to empirical list of fixed variables in nco_var_is_fix()
+	This is necessary because JAWS will use these as scalar coordinate variables
+
+	* Tidy ncremap and ncclimo debug output when waiting for PIDs
+
+2018-01-11  Charlie Zender  <zender at uci.edu>
+
+	* NCO 4.7.2-alpha02 release procedure:
+	cd ~/nco;git commit -a -m 'Version 4.7.2-alpha02: Sucko Stucco';git push
+	git tag -a 4.7.2-alpha02 -m 'Sucko Stucco: splitter segments fixed, tempest2 boutique support';git push --tags
+
+	* Correct splitter file segmentation when sgm_rmd != 0. Fixes serious bug reported by Sterling Baldwin.
+	Until now, all subsets miss years when sgm_rmd != 0, i.e., when	yr_nbr%ypf_max != 0
+	Workaround for NCO pre-4.7.2 is to set ypf_max such that yr_nbr%ypf_max == 0
+
+	* Restore elapsed time to splitter output
+
+	* Correctly handle and document special case of NCO canonical format: ncremap -m map.nc in.nc out.nc
+
+	* ncremap check for and modify map_rsl_fl instead of map_fl
+
+	* Rename and implement char_var_nul and char_var_nul_c_format more precisely in accord with ncgen usage
+
+2018-01-10  Charlie Zender  <zender at uci.edu>
+
+	* Add GenerateTransposeMap to support fv2se_flx (monotr)
+
+	* Verify that ncremap se2fv_flx (mono) and fv2se_stt (highorder) work with Tempest2 (Tempest1 fv2se_stt is buggy)
+
+2018-01-10 Henry Butowsky  <henryb at hush.com>
+
+	* Print scalar char of NUL as "" only if it is defined in data section as ""
+	  if defined in data section as '\0' then "0" is printed (as per ncdump)
+
+2018-01-09  Charlie Zender  <zender at uci.edu>
+
+	* Print offending var/dim/group name when nco_rename_* returns NC_ENAMEINUSE
+
+2018-01-04  Charlie Zender  <zender at uci.edu>
+
+	* NCO 4.7.2-alpha01 release procedure:
+	cd ~/nco;git commit -a -m 'Version 4.7.2-alpha01: Orphan Black';git push
+	git tag -a 4.7.2-alpha01 -m 'Orphan Black: Functionally equivalent to Ajudar (4.7.1)';git push --tags
+
+	* Update copyright year to 2018, and version tags
+
+	* Update rationale and effects for --trd/--cdl defaults in nco.texi
+
+	* Pedro implemented CMake improvements and flexibility for Windows builds
+
 2017-12-21  Charlie Zender  <zender at uci.edu>
 
 	* NCO 4.7.1 release procedure:
diff --git a/doc/VERSION b/doc/VERSION
index 7c66fca..af9764a 100644
--- a/doc/VERSION
+++ b/doc/VERSION
@@ -1 +1 @@
-4.7.1
+4.7.2
diff --git a/doc/debian.txt b/doc/debian.txt
index e5f72bc..9ca6fcc 100644
--- a/doc/debian.txt
+++ b/doc/debian.txt
@@ -29,18 +29,18 @@ apt-get install dh-make debhelper devscripts fakeroot gnupg debian-policy develo
 
 2. Debian build procedure recommends placing entire package source in
    subdirectory of main package. 
-   For starters, we wish to create .debs of tagged releases, e.g., nco-4.7.1
-   First we create a clean source distribution of nco and place it in nco-4.7.1
+   For starters, we wish to create .debs of tagged releases, e.g., nco-4.7.2
+   First we create a clean source distribution of nco and place it in nco-4.7.2
    Until we know what is necessary, however, we just copy a snapshot
    
    2.1 Clean all build files from development directory
 
 cd ~/nco;make distclean;cd bld;make clean;cd ~
 tar cvzf ./nco/nco.tar.gz ./nco/*
-cd ~/nco;tar xvzf nco.tar.gz;mv nco nco-4.7.1
-/bin/rm nco.tar.gz;tar cvzf nco-4.7.1.tar.gz ./nco-4.7.1/*
-cd ~/nco/nco-4.7.1
-dh_make -e zender at uci.edu -f ../nco-4.7.1.tar.gz
+cd ~/nco;tar xvzf nco.tar.gz;mv nco nco-4.7.2
+/bin/rm nco.tar.gz;tar cvzf nco-4.7.2.tar.gz ./nco-4.7.2/*
+cd ~/nco/nco-4.7.2
+dh_make -e zender at uci.edu -f ../nco-4.7.2.tar.gz
 
     2.2 The preceding steps created template debian files for a .deb,
     Those files now reside in ~/nco/debian.
@@ -55,7 +55,7 @@ dh_make -e zender at uci.edu -f ../nco-4.7.1.tar.gz
    from previous build
 
    cd ~/nco;/bin/rm *.gz
-   cd ~/nco/nco-4.7.1
+   cd ~/nco/nco-4.7.2
    dpkg-buildpackage -rfakeroot > foo 2>&1
    dpkg-buildpackage -rsudo > foo 2>&1
 
@@ -84,33 +84,33 @@ patch -p0 < nco_X.Y.Z-3.diff   # Patch destination with Debian diff
    make tags
 # Put cute version-specific string in nco_ctl.c:nco_nmn_get()
 # Install correct version numbers before updating Debian
-# tags-query replace 4.7.1 with X.Y.Z+1
+# tags-query replace 4.7.2 with X.Y.Z+1
 # If tags-query replace does not work, be sure to manually change
 # versions in configure.ac, debian/files, doc/ANNOUNCE, doc/debian.txt,
 # doc/index.shtml, doc/nco.texi, bld/nco_dst.pl, doc/VERSION
 # 20141201: Change NCO_VERSION_PATCH in src/nco.h!!!!!!!!!!!!!!!!!!!!!!
-   cd ~/nco/debian;dch -b --force-distribution --distribution=unstable -v 4.7.1-1 # Update changelog (-b forces this version number)
+   cd ~/nco/debian;dch -b --force-distribution --distribution=unstable -v 4.7.2-1 # Update changelog (-b forces this version number)
    emacs ~/nco/bld/nco.spec # Update changelog
 # For unknown reason rules file may lose its executable bit
    chmod a+x ~/nco/debian/rules
 # Rebuild autotools so new version # propagates
    cd ~/nco;aclocal;autoheader;automake --foreign;autoconf
 # Save all files in emacs before tagging
-   ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln nco-4.7.1
+   ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln nco-4.7.2
 # Upload tarball to SF https://sourceforge.net/projects/nco/files 
-   cd;scp dust.ess.uci.edu:/var/www/html/nco/src/nco-4.7.1.tar.gz .
+   cd;scp dust.ess.uci.edu:/var/www/html/nco/src/nco-4.7.2.tar.gz .
 
 7. Ubuntu PPA
 https://help.launchpad.net/Packaging/PPA
-dput NCO nco_4.7.1-2~ppa1_source.changes
+dput NCO nco_4.7.2-2~ppa1_source.changes
 sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com
 
 # Location of build diagnostics for mentors to help 
-http://dust.ess.uci.edu/nco/src/nco_4.7.1-1.dpkg-buildpackage.txt
-http://dust.ess.uci.edu/nco/src/nco_4.7.1-1.dsc
-http://dust.ess.uci.edu/nco/src/nco_4.7.1-1_i386.changes
-http://dust.ess.uci.edu/nco/src/nco_4.7.1-1_i386.deb
-http://dust.ess.uci.edu/nco/src/nco_4.7.1.orig.tar.gz
+http://dust.ess.uci.edu/nco/src/nco_4.7.2-1.dpkg-buildpackage.txt
+http://dust.ess.uci.edu/nco/src/nco_4.7.2-1.dsc
+http://dust.ess.uci.edu/nco/src/nco_4.7.2-1_i386.changes
+http://dust.ess.uci.edu/nco/src/nco_4.7.2-1_i386.deb
+http://dust.ess.uci.edu/nco/src/nco_4.7.2.orig.tar.gz
 
 # Becoming a Debian developer
 http://www.debian.org/devel/join/newmaint
@@ -164,31 +164,31 @@ Matej Vela <vela at debian.org>, Daniel Baumann <daniel at debian.org>, Warren Turkal
 # export LD_LIBRARY_PATH=/usr/lib:/lib:/usr/X11R6/lib
 # sudo aptitude install antlr bison flex gsl-bin libgsl0-dev libantlr-dev netcdf-bin libnetcdfc7 libnetcdf-dev texinfo libcurl4-gnutls-dev libexpat1-dev libxml2-dev udunits-bin libudunits2-0 libudunits2-dev
 cd ~/nco;cvc
-sudo /bin/rm -rf ${DATA}/nco-4.7.1 ${DATA}/nco_4.7.1* ${DATA}/debian # Cleanup last build. sudo necessary for removal because dpkg-buildpackage uses sudo?
-# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-4.7.1-1 -d nco-4.7.1 nco # Export based on tag
-cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -D "1 second ago" -d nco-4.7.1 nco # Export most recent
-tar cvzf ./nco_4.7.1.orig.tar.gz --exclude='nco-4.7.1/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-4.7.1 
-/bin/rm -rf ${DATA}/nco-4.7.1 # Remove cvs-exported directory
-tar xvzf ./nco_4.7.1.orig.tar.gz # Untar to get directory without excluded files
-mkdir -p ${DATA}/nco-4.7.1/debian/source;cd ~/nco/debian;/bin/cp changelog compat control convert copyright doc-base files info rules ${DATA}/nco-4.7.1/debian;cd ~/nco/debian/source;/bin/cp format ${DATA}/nco-4.7.1/debian/source # Replace debian directory with _CURRENT_ (main trunk) settings
+sudo /bin/rm -rf ${DATA}/nco-4.7.2 ${DATA}/nco_4.7.2* ${DATA}/debian # Cleanup last build. sudo necessary for removal because dpkg-buildpackage uses sudo?
+# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-4.7.2-1 -d nco-4.7.2 nco # Export based on tag
+cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -D "1 second ago" -d nco-4.7.2 nco # Export most recent
+tar cvzf ./nco_4.7.2.orig.tar.gz --exclude='nco-4.7.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-4.7.2 
+/bin/rm -rf ${DATA}/nco-4.7.2 # Remove cvs-exported directory
+tar xvzf ./nco_4.7.2.orig.tar.gz # Untar to get directory without excluded files
+mkdir -p ${DATA}/nco-4.7.2/debian/source;cd ~/nco/debian;/bin/cp changelog compat control convert copyright doc-base files info rules ${DATA}/nco-4.7.2/debian;cd ~/nco/debian/source;/bin/cp format ${DATA}/nco-4.7.2/debian/source # Replace debian directory with _CURRENT_ (main trunk) settings
 #export DEB_BUILD_OPTIONS='disable-dap-netcdf disable-netcdf4 disable-udunits2'; # Disable optional packages based on available Debian support
-#cd ${DATA}/nco-4.7.1;dpkg-buildpackage -rsudo -uc -us > ~/foo.nco 2>&1 # -uc -us: Do not sign changes or source files
-#cd ${DATA}/nco-4.7.1;dpkg-buildpackage -rsudo -sa > ~/foo.nco 2>&1 # -sa: Include _orig.tar.gz in .changes 
-cd ${DATA}/nco-4.7.1;dpkg-buildpackage -rsudo > ~/foo.nco 2>&1
+#cd ${DATA}/nco-4.7.2;dpkg-buildpackage -rsudo -uc -us > ~/foo.nco 2>&1 # -uc -us: Do not sign changes or source files
+#cd ${DATA}/nco-4.7.2;dpkg-buildpackage -rsudo -sa > ~/foo.nco 2>&1 # -sa: Include _orig.tar.gz in .changes 
+cd ${DATA}/nco-4.7.2;dpkg-buildpackage -rsudo > ~/foo.nco 2>&1
 sudo dpkg --remove nco
-sudo dpkg --install ${DATA}/nco_4.7.1-1_*.deb
+sudo dpkg --install ${DATA}/nco_4.7.2-1_*.deb
 cd ~/nco/bld;MY_BIN_DIR=/usr/bin ../bm/nco_bm.pl --regress
 # http://lintian.debian.org/full/zender@uci.edu.html
-lintian ${DATA}/nco_4.7.1-1_*.deb
-ls -l ${DATA}/nco_4.7.1*
+lintian ${DATA}/nco_4.7.2-1_*.deb
+ls -l ${DATA}/nco_4.7.2*
 m ~/foo.nco
 # Upload Ubuntu (rather than Debian) packages to websites
-scp ${DATA}/nco_4.7.1* dust.ess.uci.edu:/var/www/html/nco/src
-scp ${DATA}/nco_4.7.1* zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
+scp ${DATA}/nco_4.7.2* dust.ess.uci.edu:/var/www/html/nco/src
+scp ${DATA}/nco_4.7.2* zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
 # NB: Make sure RPMs build before uploading to debian, since changing
 # Debian versions is a PITA
 # NB: Only upload pbuilder Debian Sid (not personal Ubuntu) .deb builds to Debian mentors
-# cd ${DATA};dupload -t mentors nco_4.7.1-1_*.changes
+# cd ${DATA};dupload -t mentors nco_4.7.2-1_*.changes
 bsrc # Reset shell environment for regular development
 
 # New build system #2
@@ -202,52 +202,52 @@ DIST=sid sudo pbuilder update # Update chroot before building package in it
 # dget http://ftp.debian.org/debian/pool/main/n/nco/nco_3.9.0-1.dsc
 # dget http://ftp.debian.org/debian/pool/main/n/netcdf/netcdf_3.6.1-1.dsc
 # apt-get source nco # Get package source
-sudo /bin/rm /var/cache/pbuilder/result/nco_4.7.1* # Cleanup prior build
+sudo /bin/rm /var/cache/pbuilder/result/nco_4.7.2* # Cleanup prior build
 # To pass DEB_BUILD_OPTIONS to pbuilder while using sudo, one must first
 # modify sudoers with visudo to prevent sudo from resetting environment
 #export DEB_BUILD_OPTIONS='disable-dap-netcdf disable-netcdf4 disable-udunits2'; # Disable optional packages based on available Debian support
-cd ${DATA};DIST=sid sudo pbuilder build nco_4.7.1-1.dsc > ~/foo.nco.pbuilder 2>&1
-cd /var/cache/pbuilder/result;debsign -k6F635D10 nco_4.7.1-1_*.changes
-lintian /var/cache/pbuilder/result/nco_4.7.1-1_*.deb
+cd ${DATA};DIST=sid sudo pbuilder build nco_4.7.2-1.dsc > ~/foo.nco.pbuilder 2>&1
+cd /var/cache/pbuilder/result;debsign -k6F635D10 nco_4.7.2-1_*.changes
+lintian /var/cache/pbuilder/result/nco_4.7.2-1_*.deb
 sudo dpkg --remove nco
-sudo dpkg --install /var/cache/pbuilder/result/nco_4.7.1-1_*.deb
+sudo dpkg --install /var/cache/pbuilder/result/nco_4.7.2-1_*.deb
 cd ~/nco/bld;MY_BIN_DIR=/usr/bin ../bm/nco_bm.pl --regress
 # NB: Upload pbuilder Debian Sid packages to Debian mentors, but not
 # to personal or NCO websites since most people use Ubuntu not Debian
 # NB: Debian versions are a PITA, ensure RPMs build before uploading to Debian
-cd /var/cache/pbuilder/result;dupload -t mentors nco_4.7.1-1_*.changes
+cd /var/cache/pbuilder/result;dupload -t mentors nco_4.7.2-1_*.changes
 
 # RPM builds as root
 export rpm_root='/usr/src/redhat'
 # export sudo_sng='' # sudo not-necessary when builing in user directories
 export sudo_sng='sudo' # sudo necessary when building in system directories
 cd ~/nco;cvc;cvu
-/bin/rm -rf ${DATA}/nco-4.7.1 ${DATA}/nco-4.7.1* # Cleanup last build
+/bin/rm -rf ${DATA}/nco-4.7.2 ${DATA}/nco-4.7.2* # Cleanup last build
 ${sudo_sng} /bin/rm -r -f \
-${rpm_root}/BUILD/nco-4.7.1 \
-${rpm_root}/RPMS/i386/nco-4.7.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-4.7.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-4.7.1-?.i386.rpm \
-${rpm_root}/SOURCES/nco-4.7.1.tar.gz \
-${rpm_root}/SPECS/nco-4.7.1.spec \
-${rpm_root}/SRPMS/nco-4.7.1-?.src.rpm
-cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-4.7.1-1 -d nco-4.7.1 nco # Export based on tag
-${sudo_sng} ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/SPECS/nco-4.7.1.spec
-tar cvzf ./nco-4.7.1.tar.gz --exclude='nco-4.7.1/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-4.7.1 
-${sudo_sng} /bin/cp ${DATA}/nco-4.7.1.tar.gz ${rpm_root}/SOURCES
+${rpm_root}/BUILD/nco-4.7.2 \
+${rpm_root}/RPMS/i386/nco-4.7.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-4.7.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-4.7.2-?.i386.rpm \
+${rpm_root}/SOURCES/nco-4.7.2.tar.gz \
+${rpm_root}/SPECS/nco-4.7.2.spec \
+${rpm_root}/SRPMS/nco-4.7.2-?.src.rpm
+cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-4.7.2-1 -d nco-4.7.2 nco # Export based on tag
+${sudo_sng} ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/SPECS/nco-4.7.2.spec
+tar cvzf ./nco-4.7.2.tar.gz --exclude='nco-4.7.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-4.7.2 
+${sudo_sng} /bin/cp ${DATA}/nco-4.7.2.tar.gz ${rpm_root}/SOURCES
 cd ${rpm_root}/SPECS
-${sudo_sng} rpmbuild -ba --sign nco-4.7.1.spec > ~/foo.nco 2>&1
+${sudo_sng} rpmbuild -ba --sign nco-4.7.2.spec > ~/foo.nco 2>&1
 scp \
-${rpm_root}/RPMS/i386/nco-4.7.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-4.7.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-4.7.1-?.i386.rpm \
-${rpm_root}/SRPMS/nco-4.7.1-?.src.rpm \
+${rpm_root}/RPMS/i386/nco-4.7.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-4.7.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-4.7.2-?.i386.rpm \
+${rpm_root}/SRPMS/nco-4.7.2-?.src.rpm \
 dust.ess.uci.edu:/var/www/html/nco/src
 scp \
-${rpm_root}/RPMS/i386/nco-4.7.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-4.7.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-4.7.1-?.i386.rpm \
-${rpm_root}/SRPMS/nco-4.7.1-?.src.rpm \
+${rpm_root}/RPMS/i386/nco-4.7.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-4.7.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-4.7.2-?.i386.rpm \
+${rpm_root}/SRPMS/nco-4.7.2-?.src.rpm \
 zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
 
 # RPM builds as user
@@ -256,33 +256,33 @@ zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
 export rpm_root="${DATA}/rpm/nco"
 #cd ~/nco;cvc;cvu # This risks committing unwanted *.[ch]pp files
 mkdir -p ${DATA}/rpm/nco/TMP ${DATA}/rpm/nco/BUILD
-/bin/rm -rf ${DATA}/nco-4.7.1 ${DATA}/nco-4.7.1* # Cleanup last build
+/bin/rm -rf ${DATA}/nco-4.7.2 ${DATA}/nco-4.7.2* # Cleanup last build
 /bin/rm -r -f \
-${rpm_root}/nco-4.7.1-?.src.rpm \
-${rpm_root}/nco-4.7.1.spec \
-${rpm_root}/nco-4.7.1.tar.gz \
-${rpm_root}/*/nco-4.7.1-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-4.7.1-?.*.rpm \
-${rpm_root}/*/nco-devel-4.7.1-?.*.rpm
-# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-4.7.1-1 -d nco-4.7.1 nco # Export based on tag
-cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -D "1 second ago" -dnco-4.7.1 nco # Export most recent and build as 4.7.1-1
-tar cvzf ./nco-4.7.1.tar.gz --exclude='nco-4.7.1/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-4.7.1 
-/bin/cp ${DATA}/nco-4.7.1.tar.gz ${rpm_root}
+${rpm_root}/nco-4.7.2-?.src.rpm \
+${rpm_root}/nco-4.7.2.spec \
+${rpm_root}/nco-4.7.2.tar.gz \
+${rpm_root}/*/nco-4.7.2-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-4.7.2-?.*.rpm \
+${rpm_root}/*/nco-devel-4.7.2-?.*.rpm
+# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-4.7.2-1 -d nco-4.7.2 nco # Export based on tag
+cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -D "1 second ago" -dnco-4.7.2 nco # Export most recent and build as 4.7.2-1
+tar cvzf ./nco-4.7.2.tar.gz --exclude='nco-4.7.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-4.7.2 
+/bin/cp ${DATA}/nco-4.7.2.tar.gz ${rpm_root}
 ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/nco.spec
 cd ${rpm_root}
 rpmbuild -ba --sign nco.spec > ~/foo.nco 2>&1
-rpmlint ${rpm_root}/*/nco-4.7.1-?.*.rpm
+rpmlint ${rpm_root}/*/nco-4.7.2-?.*.rpm
 sudo yum remove nco
-sudo yum install ${rpm_root}/*/nco-4.7.1-?.*.rpm
+sudo yum install ${rpm_root}/*/nco-4.7.2-?.*.rpm
 scp \
-${rpm_root}/*/nco-4.7.1-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-4.7.1-?.*.rpm \
-${rpm_root}/*/nco-devel-4.7.1-?.*.rpm \
-${rpm_root}/nco-4.7.1-?.*.src.rpm \
+${rpm_root}/*/nco-4.7.2-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-4.7.2-?.*.rpm \
+${rpm_root}/*/nco-devel-4.7.2-?.*.rpm \
+${rpm_root}/nco-4.7.2-?.*.src.rpm \
 dust.ess.uci.edu:/var/www/html/nco/src
 scp \
-${rpm_root}/*/nco-4.7.1-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-4.7.1-?.*.rpm \
-${rpm_root}/*/nco-devel-4.7.1-?.*.rpm \
-${rpm_root}/nco-4.7.1-?.*.src.rpm \
+${rpm_root}/*/nco-4.7.2-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-4.7.2-?.*.rpm \
+${rpm_root}/*/nco-devel-4.7.2-?.*.rpm \
+${rpm_root}/nco-4.7.2-?.*.src.rpm \
 zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
diff --git a/doc/index.shtml b/doc/index.shtml
index 962f3ad..5f3665c 100644
--- a/doc/index.shtml
+++ b/doc/index.shtml
@@ -149,7 +149,8 @@ and
 <h2>Recent Releases & Milestones</h2>
 
 <ul>
-<li>2017 Jan ??: 4.7.2 <i>In Progress...</i>
+<li>2018 Feb ??: 4.7.3 <i>In Progress...</i>
+<li>2018 Jan 25: 4.7.2 Tempest2
 <li>2017 Dec 21: 4.7.1 Conda Windows port
 <li>2017 Nov 08: 4.7.0 Sundry features/fixes
 <li>2017 Sep 18: 4.6.9 CDF5, CMake
@@ -617,17 +618,21 @@ Identical copies of those tarballs are also stored
 <a href="http://nco.sf.net/src">here</a> on SourceForge for historical
 continuity.
 You may retrieve the source of tagged versions directly with, e.g.,
-<tt>git clone -b 4.7.1 http://github.com/nco/nco.git nco-4.7.1</tt></a>.
+<tt>git clone -b 4.7.2 http://github.com/nco/nco.git nco-4.7.2</tt></a>.
 <ul>
-<li><b>NCO 4.7.3</b>: (<i>Future</i>)
+<li><b>NCO 4.7.4</b>: (<i>Future</i>)
 Chunking bytes not elements;
 extensive hashing?;
 netCDF4 compound types?;</li>
-<li><b>NCO 4.7.2</b>: (<i>In Progress, features in-progress or complete include</i>) 
+<li><b>NCO 4.7.3</b>: (<i>In Progress, features in-progress or complete include</i>) 
 <tt>ncclimo -v</tt> splitter support for regular expressions;
 <tt>ncks --xtn</tt> better extensive variable treatment;
 <tt>ncremap</tt> generate weights;</li>
-<li><b>NCO 4.7.1</b>: (<i>Current Stable Release</i>)
+<li><b>NCO 4.7.2</b>: (<i>Current Stable Release</i>)
+<tt>ncclimo</tt> splitter <i>ypf</i> bugfix;
+<tt>ncremap</tt> canonical positional arguments;
+<tt>ncremap</tt> TempestRemap2 support;</li>
+<li><b>NCO 4.7.1</b>: 
 Conda Windows port;
 <tt>ncclimo --clm_md=dly/ann</tt> fix;
 JSON tweaks;</li>
@@ -764,7 +769,7 @@ goodies besides NCO) to your automatically-searched channels with
 ‘<tt>conda config --add channels conda-forge</tt>’, then
 install NCO with ‘<tt>conda install nco</tt>’.
 The default NCO installed by <tt>conda</tt> is generally within a month of the latest release. 
-<li><a href="https://github.com/conda-forge/nco-feedstock">nco-4.7.1</a> Executables Anaconda-compatible. Maintained by Filipe Fernandes.</li>
+<li><a href="https://github.com/conda-forge/nco-feedstock">nco-4.7.2</a> Executables Anaconda-compatible. Maintained by Filipe Fernandes.</li>
 Thanks to Rich Signell, Filipe Fernandes, Pedro Vicente, and others for developing and maintaining the NCO package for conda.
 </ul>
 
@@ -773,7 +778,7 @@ Thanks to Rich Signell, Filipe Fernandes, Pedro Vicente, and others for developi
 <h3><a href="http://www.debian.org">Debian</a> and <a href="http://www.ubuntu.com">Ubuntu</a> GNU/Linux</a></h3>
 <ul>
 <!--
-<li><a href="http://www.debian.org">Debian</a> and <a href="http://www.ubuntu.com">Ubuntu</a> GNU/Linux-compatible Intel systems, prebuilt binary executable <a href="http://www.debian.org">deb</a>: <a href="http://packages.debian.org/testing/math/nco.html">nco-4.7.1</a></li>
+<li><a href="http://www.debian.org">Debian</a> and <a href="http://www.ubuntu.com">Ubuntu</a> GNU/Linux-compatible Intel systems, prebuilt binary executable <a href="http://www.debian.org">deb</a>: <a href="http://packages.debian.org/testing/math/nco.html">nco-4.7.2</a></li>
 -->
 <a href="http://packages.debian.org/unstable/science/nco">Debian NCO</a> and 
 <a href="https://launchpad.net/ubuntu/+source/nco">Ubuntu NCO</a> homepages.
@@ -781,8 +786,8 @@ Thanks to Rich Signell, Filipe Fernandes, Pedro Vicente, and others for developi
 NCO packages in the Debian/Ubuntu repositories (e.g., Sid and Raring) generally lag the packages distributed here by 6–12 months.
 <a name="beta"></a><a name="prerelease"> <!-- http://nco.sf.net#beta -->
 Newer (beta- or pre-release) packages are often available for intrepid Debian/Ubuntu users as described <a href="https://github.com/nco/nco/tree/master/doc/beta.txt">here</a>.
-<dt>Debian package for most recent NCO release (install with, e.g., ‘<tt>dpkg --install nco_4.7.1-1_i386.deb</tt>’):</dt>
-<li><a href="https://launchpad.net/ubuntu/+source/nco/4.7.1-1">nco_4.7.1-1_amd64.deb</a> : Executables AMD64-compatible</li>
+<dt>Debian package for most recent NCO release (install with, e.g., ‘<tt>dpkg --install nco_4.7.2-1_i386.deb</tt>’):</dt>
+<li><a href="https://launchpad.net/ubuntu/+source/nco/4.7.2-1">nco_4.7.2-1_amd64.deb</a> : Executables AMD64-compatible</li>
 Thanks to Daniel Baumann, Sebastian Couwenberg, Barry deFreese, Francesco Lovergine, 
 Brian Mays, Rorik Peterson, and Matej Vela for their help packaging
 NCO for Debian over the years. 
@@ -824,12 +829,12 @@ Thanks to Gavin Burris and Kyle Wilcox for documenting build procedures for RHEL
 <h3><a href="http://www.apple.com/macosx/">Mac OS X/Darwin</a></h3>
 <ul>
 <!-- 
-# Mac OS X 10.12 (Sierra) systems (aerosol):
+# Mac OS X 10.13 (High Sierra) systems (aerosol):
 /usr/bin/scp ~/nco/doc/index.shtml zender,nco at web.sf.net:/home/project-web/nco/htdocs
-cd ~/bin;tar cvzf ${DATA}/nco-4.7.1.macosx.10.12.tar.gz nc*;scp ${DATA}/nco-4.7.1.macosx.10.12.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
+cd ~/bin;tar cvzf ${DATA}/nco-4.7.2.macosx.10.13.tar.gz nc*;scp ${DATA}/nco-4.7.2.macosx.10.13.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
 -->
 The most up-to-date executables are probably those in the tarball below. Those unfamiliar with installing executables from tarballs may try the (older) <a href="http://en.wikipedia.org/wiki/Apple_Disk_Image">DMG</a> files (you may need to add <tt>/opt/local/bin</tt> to your executable path to access those operators).
-<li><a href="src/nco-4.7.1.macosx.10.12.tar.gz">nco-4.7.1.macosx.10.12.tar.gz</a> (<!--#fsize file="src/nco-4.7.1.macosx.10.12.tar.gz"-->): Executables MacOSX 10.12-compatible (last updated <!--#flastmod file="src/nco-4.7.1.macosx.10.12.tar.gz"-->). 
+<li><a href="src/nco-4.7.2.macosx.10.13.tar.gz">nco-4.7.2.macosx.10.13.tar.gz</a> (<!--#fsize file="src/nco-4.7.2.macosx.10.13.tar.gz"-->): Executables MacOSX 10.13-compatible (last updated <!--#flastmod file="src/nco-4.7.2.macosx.10.13.tar.gz"-->). 
 (NB: These executables require
   the <a href="http://trac.macosforge.org/projects/macports/wiki">MacPorts</a>
   <a href="#bld_macports">dependencies</a> for <a href="http://svn.macports.org/repository/macports/trunk/dports/science/nco">NCO</a>). Maintained by NCO Project.</li>
@@ -844,16 +849,16 @@ The most up-to-date executables are probably those in the tarball below. Those u
 <a name="windows"></a> <!-- http://nco.sf.net#windows -->
 <h3><a href="http://www.microsoft.com">Microsoft Windows</a>
 (native build, compiled with <a href="https://www.visualstudio.com/en-us/visual-studio-homepage-vs.aspx">Visual Studio 2015</a>, use this if unsure)</h3>
-These native Windows executables should be stand-alone, i.e., not
+These native Windows executables (64bit) are stand-alone, i.e., do not
 require users to have any additional software. 
 This is a new feature as of 20120615, please send us feedback. 
-To build NCO from source yourself using MSVC with CMake, please see nco/cmake/build.bat.
+To build NCO from source yourself using MSVC with CMake, please see example in <tt>nco/cmake/build.bat</tt>.
 <ul>
 <!-- Copy files from http://glace.ess.uci.edu
 /usr/bin/scp /home/pvicente/nco/doc/index.shtml pvicente,nco at web.sf.net:/home/project-web/nco/htdocs
-/usr/bin/scp /home/pvicente/windows_setup/nco-4.7.0.windows.mvs.exe pvicente,nco at web.sf.net:/home/project-web/nco/htdocs/src
+/usr/bin/scp /home/pvicente/windows_setup/nco-4.7.1.windows.mvs.exe pvicente,nco at web.sf.net:/home/project-web/nco/htdocs/src
 -->
-<li><a href="src/nco-4.7.0.windows.mvs.exe">nco-4.7.0.windows.mvs.exe</a> (<!--#fsize file="src/nco-4.7.0.windows.mvs.exe"-->) : Windows Self-Extracting Installer (last updated <!--#flastmod file="src/nco-4.7.0.windows.mvs.exe"-->). Maintained by Pedro Vicente.</li>
+<li><a href="src/nco-4.7.1.windows.mvs.exe">nco-4.7.1.windows.mvs.exe</a> (<!--#fsize file="src/nco-4.7.1.windows.mvs.exe"-->) : Windows Self-Extracting Installer (last updated <!--#flastmod file="src/nco-4.7.1.windows.mvs.exe"-->). Maintained by Pedro Vicente.</li>
 </ul>
 
 <a name="cygwin"></a> <!-- http://nco.sf.net#cygwin -->
@@ -1024,12 +1029,12 @@ site.</li>
 The simplest way to acquire the source is to download the compressed tarball:
 <ul>
 <li>
-<!-- scp ${DATA}/nco-4.7.1.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src -->
-<a href="https://github.com/nco/nco/archive/4.7.1.tar.gz">nco-4.7.1.tar.gz</a> 
-(<!--#fsize file="src/nco-4.7.1.tar.gz"--> compressed tar-file)<br>
-<!--#exec cmd="openssl dgst -md5 src/nco-4.7.1.tar.gz"--><br>
-<!--#exec cmd="openssl dgst -sha1 src/nco-4.7.1.tar.gz"--><br>
-<!--#exec cmd="openssl dgst -sha256 src/nco-4.7.1.tar.gz"--> 
+<!-- scp ${DATA}/nco-4.7.2.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src -->
+<a href="https://github.com/nco/nco/archive/4.7.2.tar.gz">nco-4.7.2.tar.gz</a> 
+(<!--#fsize file="src/nco-4.7.2.tar.gz"--> compressed tar-file)<br>
+<!--#exec cmd="openssl dgst -md5 src/nco-4.7.2.tar.gz"--><br>
+<!--#exec cmd="openssl dgst -sha1 src/nco-4.7.2.tar.gz"--><br>
+<!--#exec cmd="openssl dgst -sha256 src/nco-4.7.2.tar.gz"--> 
 </li>
 </ul>
 
@@ -1048,8 +1053,8 @@ You may retrieve any NCO distribution you wish from
 <a href="https://help.github.com">GitHub</a>. 
 Usually you wish to retrieve a recent tagged (i.e., released) version.
 This command retrieves the entire NCO repository (< 20 MB) and
-then checks out NCO version <tt>4.7.1</tt>:
-<p><tt>git clone https://github.com/nco/nco.git;cd nco;git checkout 4.7.1</tt></p>
+then checks out NCO version <tt>4.7.2</tt>:
+<p><tt>git clone https://github.com/nco/nco.git;cd nco;git checkout 4.7.2</tt></p>
 These commands retrieve the current (“bleeding edge”)
 development version of NCO into a local directory named <tt>nco</tt>:
 <p><tt>git clone https://github.com/nco/nco.git ~/nco</tt></p> or
@@ -1057,9 +1062,9 @@ development version of NCO into a local directory named <tt>nco</tt>:
 Track changes to the development version using
 <p><tt>cd nco;git pull</tt></p>
 One difference between running a "tagged" release 
-(e.g., <tt>4.7.1</tt>) and the development version is that the
+(e.g., <tt>4.7.2</tt>) and the development version is that the
 tagged release operators will print a valid version number (e.g.,
-<tt>4.7.1</tt>) when asked to do so with the <tt>-r</tt> flag
+<tt>4.7.2</tt>) when asked to do so with the <tt>-r</tt> flag
 (e.g., <tt>ncks -r</tt>).
 The development version simply places today's date in place of the
 version.
@@ -1207,9 +1212,9 @@ As of 20131101 there is no Cygwin package for ANTLR, and the netCDF package does
 
 <li>Once you have installed the pre-requisites as shown above, you may then build the latest stable NCO and install it in, e.g., <tt>/usr/local</tt> with: 
 <tt>
-<dt>wget https://github.com/nco/nco/archive/4.7.1.tar.gz</dt>
-<dt>tar xvzf 4.7.1.tar.gz</dt>
-<dt>cd nco-4.7.1</dt>
+<dt>wget https://github.com/nco/nco/archive/4.7.2.tar.gz</dt>
+<dt>tar xvzf 4.7.2.tar.gz</dt>
+<dt>cd nco-4.7.2</dt>
 <dt>./configure --prefix=/usr/local</dt>
 <dt>make</dt>
 <dt>sudo make install</dt>
diff --git a/doc/nco.texi b/doc/nco.texi
index 32b38b3..10a3f47 100644
--- a/doc/nco.texi
+++ b/doc/nco.texi
@@ -12,7 +12,7 @@ Purpose: TeXInfo documentation for netCDF Operators (NCO)
 
 URL: http://nco.sf.net/nco.texi
 
-Copyright (C) 1995--2017 Charlie Zender
+Copyright (C) 1995--2018 Charlie Zender
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3
 or any later version published by the Free Software Foundation;
@@ -119,12 +119,12 @@ Octave TeXInfo manual shows clean TeXInfo structure
 @setfilename nco.info
 
 @c Define edition, date, ...
- at set nco-edition 4.7.1
- at set doc-edition 4.7.1
- at set copyright-years 1995--2017
- at set update-year 2017
- at set update-date 21 December 2017
- at set update-month December 2017
+ at set nco-edition 4.7.2
+ at set doc-edition 4.7.2
+ at set copyright-years 1995--2018
+ at set update-year 2018
+ at set update-date 22 January 2018
+ at set update-month January 2018
 
 @settitle @acronym{NCO} @value{nco-edition} User Guide
 
@@ -1024,7 +1024,7 @@ issues.
 <a name="cnd"></a> <!-- http://nco.sf.net/nco.html#cnd -->
 <a name="conda"></a> <!-- http://nco.sf.net/nco.html#conda -->
 @end html
-As of @acronym{NCO} version 4.7.1 (September, 2017) the Conda package
+As of @acronym{NCO} version 4.7.1 (December, 2017) the Conda package
 for @acronym{NCO} is available from the @code{conda-forge} channel on
 all three smithies: Linux, MacOS, and Windows. 
 @example
@@ -3820,6 +3820,7 @@ It may occasionally be useful to use @acronym{NCO} to transfer files
 when your other preferred methods are not available locally.
 
 @html
+<a name="conversion"></a> <!-- http://nco.sf.net/nco.html#conversion -->
 <a name="fl_fmt"></a> <!-- http://nco.sf.net/nco.html#fl_fmt -->
 <a name="hdf"></a> <!-- http://nco.sf.net/nco.html#hdf -->
 <a name="cdf5"></a> <!-- http://nco.sf.net/nco.html#cdf5 -->
@@ -5315,6 +5316,7 @@ A @acronym{PDF} version of these instructions is available
 @uref{http://dust.ess.uci.edu/diwg/ncdismember.pdf, here}.
 
 @html
+<a name="fortran"></a> <!-- http://nco.sf.net/nco.html#fortran -->
 <a name="ftn"></a> <!-- http://nco.sf.net/nco.html#ftn -->
 <a name="-F"></a> <!-- http://nco.sf.net/nco.html#-F -->
 @end html
@@ -6128,7 +6130,7 @@ the @command{ncap2} @code{where} statement for such grids
 This feature works on datasets that associate coordinate variables to 
 grid-mappings using the @acronym{CF}-convention (@pxref{CF Conventions})   
 @code{coordinates} and @code{standard_name} attributes described 
- at uref{http://cfconventions.org/1.6.html#coordinate-system, here}. 
+ at uref{http://cfconventions.org/cf-conventions/cf-conventions.html#coordinate-system, here}. 
 Currently, @acronym{NCO} understands auxiliary coordinate variables 
 pointed to by the @code{standard_name} attributes for @var{latitude} and  
 @var{longitude}.   
@@ -9710,8 +9712,8 @@ Thus for @code{NC_SHORT}, @math{ndrv = 65536 - 2 = 65534}.
 Less often, the variable may be packed into type @code{NC_CHAR}, 
 where @math{ndrv = 2^{8} - 2 = 256 - 2 = 254}, or type @code{NC_INT} where
 where @math{ndrv = 2^{32} - 2 = 4294967295 - 2 = 4294967293}.
-One useful feature of (lossy) netCDF packing algorithm is that
-additional, loss-less packing algorithms perform well on top of it. 
+One useful feature of the (lossy) netCDF packing algorithm is that 
+lossless packing algorithms perform well on top of it. 
 
 @html
 <a name="upk"></a> <!-- http://nco.sf.net/nco.html#upk -->
@@ -9758,14 +9760,13 @@ unpacked data, i.e., @code{int}, @code{float} or @code{double}.
 @cindex interoperability
 @cindex @acronym{HDF} unpacking
 Many (most?) files originally written in @acronym{HDF4} format use
-poorly documented @acronym{HDF} packing/unpacking algorithms that are
-incompatible and easily confused with the netCDF packing algorithm 
-described above.   
+poorly documented packing/unpacking algorithms that are incompatible and
+easily confused with the netCDF packing algorithm described above.   
 The unpacking component of the ``conventional'' @acronym{HDF} algorithm
 (described @uref{http://www.hdfgroup.org/HDF5/doc/UG/UG_frame10Datasets.html, here}
 and in Section 3.10.6 of the @acronym{HDF4} Users Guide
 @uref{http://www.hdfgroup.org/release4/doc/UsrGuide_html/UG_PDF.pdf,
-here}) 
+here}, 
 and in the @acronym{FAQ} for @acronym{MODIS} @acronym{MOD08} data
 @uref{http://modis-atmos.gsfc.nasa.gov/MOD08_D3/faq.html, here}) 
 is
@@ -9801,27 +9802,11 @@ for @acronym{MODIS} @acronym{MOD04} data is the same as the netCDF
 algorithm.
 
 @ignore
-Unfortunately, @acronym{HDF} packing is hard to understand and
-documentation is often lacking.
-Many @acronym{MODIS} @acronym{HDF4} datasets use what we used to call
-``the @acronym{HDF} algorithm'', until we realized there was more than
-one incompatible (with netCDF) @acronym{HDF} algorithm.
-These include @acronym{MODIS} @acronym{MOD10CM} datasets.
-However, we must discriminate between @acronym{HDF4} and @acronym{HDF5}  
-packing. 
- at acronym{HDF4}, or at least some @acronym{HDF4} datasets implement the
-``@acronym{HDF} algorithm'', aka linear @code{scale_factor} and 
- at code{add_offset} in the other order from netCDF. 
 @acronym{HDF5} only implements D-scaling, aka, decimal-scaling
 bit-packing. 
 D-Scaling uses @code{add_offset} as a minimum data value, and
 @code{scale_factor} as the integer power @w{of 10} by which the
 @code{add_offset} corrected data are divided before storage.
-
- at cindex scale-offset compression
- at cindex scale-offset filter
- at acronym{HDF} also calls this @dfn{scale-offset compression} and the
- at dfn{scale-offset filter}.
 @end ignore
 Confusingly, the (incompatible) netCDF and @acronym{HDF} algorithms both 
 store their parameters in attributes with the same names
@@ -11420,7 +11405,7 @@ or alter the @code{Conventions} attribute.
 As of @acronym{NCO} version 4.0.8 (April, 2011), @acronym{NCO} 
 supports the @acronym{CF} @code{bounds} convention for cell boundaries 
 described 
- at uref{http://cfconventions.org/1.6.html#cell-boundaries, here}.
+ at uref{http://cfconventions.org/cf-conventions/cf-conventions.html#cell-boundaries, here}.
 This convention allows coordinate variables (including multidimensional
 coordinates) to describe the boundaries of their cells.
 This is done by naming the variable which contains the bounds in
@@ -11470,7 +11455,7 @@ Climatology variables are subject to the user-specified override switches
 As of @acronym{NCO} version 4.4.5 (July, 2014), @acronym{NCO} 
 supports the @acronym{CF} @code{ancillary_variables} convention for 
 described 
- at uref{http://cfconventions.org/1.6.html#ancillary-data, here}.
+ at uref{http://cfconventions.org/cf-conventions/cf-conventions.html#ancillary-data, here}.
 This convention allows ancillary variables to be associated with one or
 more primary variables.
 @acronym{NCO} attaches any such variables to the extraction list along 
@@ -11492,7 +11477,7 @@ Ancillary variables are subject to the user-specified override switches
 As of @acronym{NCO} version 4.6.4 (January, 2017), @acronym{NCO} 
 supports the @acronym{CF} @code{cell_measures} convention 
 described 
- at uref{http://cfconventions.org/1.6.html#cell-measures, here}.
+ at uref{http://cfconventions.org/cf-conventions/cf-conventions.html#cell-measures, here}.
 This convention allows variables to indicate which other variable or
 variables contains area or volume information about a gridcell.
 These measures variables are pointed to by the @code{cell_measures}
@@ -11536,7 +11521,7 @@ These options are available in all operators that perform subsetting
 As of @acronym{NCO} version 4.6.4 (January, 2017), @acronym{NCO} 
 supports the @acronym{CF} @code{formula_terms} convention 
 described 
- at uref{http://cfconventions.org/1.6.html#formula-terms, here}.
+ at uref{http://cfconventions.org/cf-conventions/cf-conventions.html#formula-terms, here}.
 This convention encodes formulas used to construct (usually vertical)
 coordinate grids.
 The @acronym{CDL} specification of a vertical coordinate formula for
@@ -11608,7 +11593,7 @@ switches (including @samp{-c} and @samp{-C}) described in
 @cindex @code{--crd}
 As of @acronym{NCO} version 3.9.6 (January, 2009), @acronym{NCO}
 supports the @acronym{CF} @code{coordinates} convention described 
- at uref{http://cfconventions.org/1.6.html#coordinate-system, here}. 
+ at uref{http://cfconventions.org/cf-conventions/cf-conventions.html#coordinate-system, here}. 
 This convention allows variables to specify additional coordinates
 (including mult-idimensional coordinates) in a space-separated string 
 attribute named @code{coordinates}. 
@@ -11627,7 +11612,7 @@ In particular, @command{ncwa} eliminates from the @code{coordinates}
 attribute any dimension that it collapses, e.g., by averaging.
 The former presence of this dimension will usually be indicated by the 
 @acronym{CF} @code{cell_methods} convention described 
- at uref{http://cfconventions.org/1.6.html#cell-methods, here}.
+ at uref{http://cfconventions.org/cf-conventions/cf-conventions.html#cell-methods, here}.
 Hence the @acronym{CF} @code{cell_methods} and @code{coordinates} 
 conventions can be said to work in tandem to characterize the state and
 history of a variable's analysis.
@@ -11647,7 +11632,7 @@ history of a variable's analysis.
 @cindex cell methods convention
 As of @acronym{NCO} version 4.4.2 (February, 2014), @acronym{NCO} 
 supports some of the @acronym{CF} @code{cell_methods} 
- at uref{http://cfconventions.org/1.6.html#cell-methods, convention}
+ at uref{http://cfconventions.org/cf-conventions/cf-conventions.html#cell-methods, convention}
 to describe the analysis procedures that have been applied to data.
 The convention creates (or appends to an existing) @code{cell_methods}
 attribute a space-separated list of couplets of the form @var{dmn: op}
@@ -11908,6 +11893,7 @@ already contain the appended dimensions.
 * Operator precedence and associativity ::
 * ID Quoting::
 * create_bounds() function::
+* solar_zenith_angle function::
 @end menu
 
 @html
@@ -16181,7 +16167,7 @@ netcdf-4.0 Final  2008/08/28@*
 @end example
 @c End HMB documentation
 
- at node create_bounds() function,  , ID Quoting, ncap2 netCDF Arithmetic Processor
+ at node create_bounds() function, solar_zenith_angle function , ID Quoting, ncap2 netCDF Arithmetic Processor
 @subsection create_bounds() function
 @cindex create_bounds() function
 The @command{ncap2} custom function 'create_bounds()' takes any monotonic 1D coordinate variable with regular or irregular (e.g., Gaussian) spacing and creates a bounds variable.
@@ -16212,6 +16198,38 @@ defdim("nv",2);
 climatology_bounds=create_bounds(time,$nv,"climatology_bounds");
 @end example
 
+ at node solar_zenith_angle function, , ncap2 netCDF Arithmetic Processor
+ at subsection solar_zenith_angle function
+ at cindex solar_zenith_angle function
+
+ at emph{<zenith_out>=solar_zenith_angle( <time_in>, <latitude in>)}  
+
+This function takes two arguments, mean local solar time and latitude.
+Calculation and output is done with type @code{NC_DOUBLE}.
+The calendar attribute for <time_in> in is NOT read and is assumed to be
+Gregorian (this is the calendar that UDUnits uses).
+As part of the calculation <time_in> is converted to days since start of
+year.
+For some  input units e.g., seconds, this function may produce
+gobbledygook.
+The output <zenith_out> is in @code{degrees}. 
+For more details of the algorithm used please examine the function
+ at code{solar_geometry()} in @code{fmc_all_cls.cc}.
+Note that this routine does not account for the equation of time,
+and so can be in error by the angular equivalent of up to about fifteen
+minutes time depending on the day of year.
+
+ at example
+my_time[time]=@{10.50, 11.0, 11.50, 12.0, 12.5, 13.0, 13.5, 14.0, 14.50, 15.00@};  
+my_time@@units="hours since 2017-06-21";
+
+// Assume we are at Equator
+latitude=0.0;
+
+// 32.05428, 27.61159, 24.55934, 23.45467, 24.55947, 27.61184, 32.05458, 37.39353, 43.29914, 49.55782 ;
+zenith=solar_zenith_angle(my_time,latitude);
+ at end example
+
 @page
 @html
 <a name="ncatted"></a> <!-- http://nco.sf.net/nco.html#ncatted -->
@@ -17257,7 +17275,7 @@ ncclimo [-3] [-4] [-5] [-6] [-7]
 [-a @var{dec_md}] [-C @var{clm_md}] [-c @var{caseid}] [-d @var{dbg_lvl}]
 [-E @var{yr_prv}] [-e @var{yr_end}] [-f @var{fml_nm}] [--fl_fmt=@var{fl_fmt}] [-h @var{hst_nm}] [-i @var{drc_in}]
 [-j @var{job_nbr}] [-L @var{dfl_lvl}] [-l @var{lnk_flg}] [-m @var{mdl_nm}] [-n @var{nco_opt}] 
-[--no_cll_msr ] [--no_frm_trm] [--no_ntv_tms] [--no_stg_grd]
+[--no_cll_msr] [--no_frm_trm] [--no_ntv_tms] [--no_stg_grd]
 [-O @var{drc_rgr}] [-o @var{drc_out}] [-p @var{par_typ}] [--ppc=@var{ppc_prc}]
 [-R @var{rgr_opt}] [-r @var{rgr_map}]
 [-S @var{yr_prv}] [-s @var{yr_srt}] [--seasons=@var{csn_lst}] [--stdin] 
@@ -19942,6 +19960,28 @@ netcdf in {
 } // group /
 @end verbatim
 @end example
+Users should note the @acronym{NCO}'s @acronym{CDL} mode outputs
+successively more verbose additional diagnostic information in
+ at acronym{CDL} comments as the level of debugging increases from
+zero to two.
+For example printing the above with @samp{-D 2} yields
+ at example
+ at verbatim
+zender at roulee:~$ ncks -D 2 --cdl -v one ~/nco/data/in.nc
+netcdf in {
+  // ncgen -k classic -b -o in.nc in.cdl
+
+  variables:
+    float one ; // RAM size = 1*sizeof(NC_FLOAT) = 1*4 = 4 bytes, ID = 147
+      one:long_name = "one" ; // char
+
+  data:
+    one = 1 ; 
+
+} // group /
+ at end verbatim
+ at end example
+
 @command{ncgen} converts @acronym{CDL}-mode output into a netCDF file:
 @example
 ncks -v one ~/nco/data/in.nc > ~/in.cdl
@@ -20519,14 +20559,15 @@ mode.
 Much of this manual contains output printed in traditional mode,
 which places one value per line, with complete dimensional
 information.
-Tradiational-mode metadata output includes lower-level information,
+Traditional-mode metadata output includes lower-level information,
 such as @acronym{RAM} usage and internal variable IDs, than
 @acronym{CDL}.  
-However, @acronym{CDL} is more useful than traditional mode for most
+While this is useful for some developers and user, @acronym{CDL} has,
+over the years, become more useful than traditional mode for most
 users.  
-In summer 2017 @acronym{CDL} will become the default printing mode.
-Traditional mode will still be accessible using the @samp{--trd}
-option. 
+As of @acronym{NCO} version 4.6.9 (September, 2017) @acronym{CDL} became 
+the default printing mode. 
+Traditional printing mode is accessed via the @samp{--trd} option.  
 
 @html
 <a name="units"></a> <!-- http://nco.sf.net/nco.html#units -->
@@ -22114,14 +22155,17 @@ SYNTAX
 ncremap [-3] [-4] [-5] [-6] [-7] 
 [-a @var{alg_typ}] [-D @var{dbg_lvl}] [-d @var{dst_fl}] [--fl_fmt=@var{fl_fmt}] 
 [-G @var{grd_sng}] [-g @var{grd_dst}] [-I @var{drc_in}] [-i @var{input-file}] [-j @var{job_nbr}]
-[-L @var{dfl_lvl}] [-M] [-m @var{map_fl}] [--msk_dst=@var{msk_dst}] [--msk_out=@var{msk_out}] [--msk_src=@var{msk_src}]
-[-n @var{nco_opt}] [--no_cll_msr ] [--no_frm_trm] [--no_stg_grd]
+[-L @var{dfl_lvl}] [-M] [-m @var{map_fl}]
+[--msk_dst=@var{msk_dst}] [--msk_out=@var{msk_out}] [--msk_src=@var{msk_src}] [--mss_val=@var{mss_val}]
+[-n @var{nco_opt}] [--no_cll_msr] [--no_frm_trm] [--no_stg_grd]
 [-O @var{drc_out}] [-o @var{output-file}] [-P @var{prc_typ}] [-p @var{par_typ}]
 [-R @var{rgr_opt}] [--rgn_dst] [--rgn_src]
 [-s @var{grd_src}] [--sgs_frc=@var{sgs_frc}] [--sgs_msk=@var{sgs_msk}] [--sgs_nrm=@var{sgs_nrm}]
-[--stdin] [-T @var{drc_tmp}] [-t @var{thr_nbr}] [-U] [-u @var{unq_sfx}] [--ugrid=@var{ugrid-file}]
+[--stdin] [-T @var{drc_tmp}] [-t @var{thr_nbr}]
+[-U] [-u @var{unq_sfx}] [--ugrid=@var{ugrid-file}]
 [-V @var{rgr_var}] [-v @var{var_lst}[, at dots{}]] [--version] [--vrb=@var{vrb_lvl}] 
-[-W @var{wgt_opt}] [-w @var{wgt_cmd}] [-x @var{xtn_lst}[, at dots{}]] 
+[-W @var{wgt_opt}] [-w @var{wgt_cmd}] [-x @var{xtn_lst}[, at dots{}]]
+[@var{input-file(s)}] [@var{output-file}]
 @end example
 
 @noindent
@@ -22230,7 +22274,7 @@ Features common to many operators are described in
 Specifies the interpolation algorithm for weight-generation for use by
 @command{ESMF_RegridWeightGen} (@acronym{ERWG}) and/or TempestRemap.
 @command{ncremap} unbundles this algorithm choice from the rest of
-the weight-generator invocation syntax because user more frequently
+the weight-generator invocation syntax because users more frequently
 change interpolation algorithms than other options
 (that can be changed with @samp{-E @var{esmf_opt}}).
 The @var{alg_typ} argument must be @code{tempest} or one of
@@ -22245,6 +22289,86 @@ See @acronym{ERWG} documentation
 for detailed descriptions of @acronym{ERWG} algorithms.
 Specifying @code{tempest} invokes TempestRemap weight-generation.
 
+ at cindex TempestRemap
+ at cindex Tempest2
+ at cindex @code{se2fv_flx}
+ at cindex @code{fv2se_flx}
+ at cindex @code{se2fv_stt}
+ at cindex @code{fv2se_stt}
+ at cindex @code{se2fv_alt}
+ at cindex @code{fv2se_alt}
+ at cindex @code{mono_se2fv}
+ at cindex @code{conservative_monotone_se2fv}
+ at cindex @code{monotr_fv2se}
+ at cindex @code{conservative_monotone_fv2se}
+ at cindex @code{highorder_se2fv}
+ at cindex @code{accurate_conservative_nonmonotone_se2fv}
+ at cindex @code{highorder_fv2se}
+ at cindex @code{accurate_conservative_nonmonotone_fv2se}
+ at cindex @code{intbilin_se2fv}
+ at cindex @code{accurate_monotone_nonconservative_se2fv}
+ at cindex @code{mono_fv2se}
+ at cindex @code{conservative_monotone_fv2se_alt}
+As of @acronym{NCO} version 4.7.2 (January, 2018), @command{ncremap}
+implements @acronym{E3SM}-recommended settings for TempestRemap
+algorithms. 
+ at command{ncremap} can now easily generate and use each of the six 
+ at acronym{E3SM}-recommended mappings between @acronym{FV} and
+ at acronym{SE} flux, state, and other variables.
+ at command{ncremap} automatically employs the specialized ``boutique''
+TempestRemap options for these algorithms.
+This support requires TempestRemap version 2.0.0 or later (some option
+combinations fail with earlier versions). 
+
+Generate and use the recommended weights to remap fluxes from
+ at acronym{SE} to @acronym{FV} grids, for example, with
+ at example
+ at verbatim
+ncremap -a se2fv_flx --src_grd=se.g --dst_grd=fv.nc -m map.nc
+ncremap -m map.nc in.nc out.nc
+ at end verbatim
+ at end example
+This causes @command{ncremap} to automatically invoke TempestRemap with
+the boutique options 
+ at samp{--in_type cgll --in_np 4 --out_type fv --out_double --mono}
+that are recommended by @acronym{E3SM} for conservative and monotone
+remapping of fluxes.
+It is equivalent to, yet simpler to remember and invoke than 
+ at example
+ at verbatim
+ncremap -a tempest --src_grd=se.g --dst_grd=fv.nc -m map.nc \
+        -W '--in_type cgll --in_np 4 --out_type fv --out_double --mono'
+ at end verbatim
+ at end example
+
+The full list of supported canonical algorithm names, their synonyms,
+and boutique options passed to @command{GenerateOfflineMap}) are:
+ at table @asis
+ at item @code{se2fv_flx} (synonyms @code{mono_se2fv}, @code{conservative_monotone_se2fv})
+Options: @samp{--in_type cgll --in_np 4 --out_type fv --out_double --mono}
+ at item @code{fv2se_flx} (synonyms @code{monotr_fv2se}, @code{conservative_monotone_fv2se}),
+Options: @samp{--in_type cgll --in_np 4 --out_type fv --out_double --mono}.
+For @code{fv2se_flx} the weights are generated with options identical to
+ at code{se2fv_flx}, and then the transpose of the resulting weight matrix
+is employed. 
+ at item @code{se2fv_stt} (synonyms @code{highorder_se2fv}, @code{accurate_conservative_nonmonotone_se2fv}),
+Options: @samp{--in_type cgll --in_np 4 --out_type fv --out_double}
+ at item @code{fv2se_stt} (synonyms @code{highorder_fv2se}, @code{accurate_conservative_nonmonotone_fv2se}),
+Options: @samp{--in_type fv --in_np 2 --out_type cgll --out_np 4 --out_double --volumetric}
+ at item @code{se2fv_alt} (synonyms @code{intbilin_se2fv}, @code{accurate_monotone_nonconservative_se2fv}),
+Options: @samp{--in_type cgll --in_np 4 --out_type fv --out_double --mono3 --noconserve}
+ at item @code{fv2se_alt} (synonyms @code{mono_fv2se}, @code{conservative_monotone_fv2se_alt}).
+Options: @samp{--in_type fv --in_np 1 --out_type cgll --out_np 4 --out_double --mono --volumetric}
+ at end table
+Thus these boutique options are specialized for @acronym{SE} grids with
+fourth order resolution (@math{@var{np} = 4}).
+Full documentation of the @acronym{E3SM}-recommended boutique options
+for TempestRemap is
+ at uref{https://acme-climate.atlassian.net/wiki/spaces/Docs/pages/178848194/Transition+to+TempestRemap+for+Atmosphere+grids, here}
+(may require @acronym{E3SM}-authorization to view).
+Let us know iff you would like other boutique TempestRemap switch sets
+added as canonical options for @command{ncremap}.
+
 @html
 <a name="dbg_lvl"></a> <!-- http://nco.sf.net/nco.html#dbg_lvl -->
 @end html
@@ -22314,7 +22438,6 @@ produce the remapping weights.
 @cindex @code{--fl_fmt_ncremap}
 @cindex @code{--file_format_ncremap}
 @cindex @code{-3}
- at cindex @code{-3}
 @cindex @code{-4}
 @cindex @code{-5}
 @cindex @code{-6}
@@ -22325,14 +22448,18 @@ has long supported (@pxref{File Formats and Conversion}).
 This includes short flags (e.g., @samp{-4}) and key-value options (e.g., 
 @samp{--fl_fmt=netcdf4}) though not long-flags without values
 (e.g., @samp{--netcdf4}).
-However, @command{ncremap} can only the full suite of file format
+However, @command{ncremap} can only apply the full suite of file format 
 options to files that it creates, i.e., regridded files.
 The weight generators (@acronym{ERWG} and TempestRemap) are limited
-in the file formats that they can read and write.
+in the file formats that they read and write.
 Currently (August, 2017), @acronym{ERWG} supports @code{CLASSIC},
 @code{64BIT_OFFSET}, and @code{NETCDF4}, while TempestRemap
 supports only @code{CLASSIC}.
-The weightfiles produced are limited to these formats.
+These can of course be converted to other formats using @command{ncks}
+(@pxref{File Formats and Conversion}).
+However, map-files @emph{produced} in other non- at code{CLASSIC} formats
+can remap significantly larger grids than @code{CLASSIC}-format
+map-files. 
 
 @html
 <a name="grd_sng"></a> <!-- http://nco.sf.net/nco.html#grd_sng -->
@@ -22386,8 +22513,9 @@ When multiple files are regridded, each output file takes the name
 of the corresponding input file.
 There is no namespace conflict because the input and output files are in
 separate directories. 
-Note that @command{ncremap} can instead accept the list of input files
-through standard input, e.g., @samp{ls *.nc | ncremap ...}. 
+Note that @command{ncremap} can instead accept a list of input files
+through standard input (e.g., @samp{ls *.nc | ncremap ...}) or as
+positional command-line arguments (e.g., @samp{ncremap in1.nc in2.nc ...}).
 
 @html
 <a name="in_fl"></a> <!-- http://nco.sf.net/nco.html#in_fl -->
@@ -22414,8 +22542,14 @@ then @acronym{NCO} will guess (for rectangular grids) or interpolate
 Unstructured grids must supply cell boundary information, as it cannot
 be interpolated or guessed-at.
 @var{in_fl} is not modified, and may have read-only permissions.
-Note that @command{ncremap} can instead accept the input file name
-through standard input, e.g., @samp{ls *.nc | ncremap ...}. 
+Note that @command{ncremap} can instead accept input file name(s)
+through standard input (e.g., @samp{ls *.nc | ncremap ...}) or as
+positional command-line arguments (e.g.,
+ at samp{ncremap in1.nc in2.nc ...}).
+When one or three-or-more positional arguments are given, they are
+all interpreted as input filename(s).  
+Two positional arguments are interpreted as a single @var{input-file}
+and its corresponding @var{output-file}.
 
 @html
 <a name="job_nbr"></a> <!-- http://nco.sf.net/nco.html#job_nbr -->
@@ -22636,6 +22770,26 @@ This guarantees that all points in the inferred source grid will be
 unmasked.  
 
 @html
+<a name="--mss_val"></a> <!-- http://nco.sf.net/nco.html#--mss_val -->
+<a name="mss_val_ncremap"></a> <!-- http://nco.sf.net/nco.html#mss_val_ncremap -->
+ at end html
+ at cindex @code{--mss_val=@var{mss_val}}
+ at cindex @var{mss_val}
+ at cindex @code{--mss_val}
+ at cindex @code{--fll_val}
+ at cindex @code{--missing_value}
+ at cindex @code{--fill_value}
+ at item --mss_val=@var{mss_val} (@code{--mss_val}, @code{--fll_val}, @code{--missing_value}, @code{--fill_value})
+Specifies the numeric value that indicates missing data when processing
+ at acronym{MPAS} datasets, i.e., when @samp{-P mpas} is invoked.
+The default missing value is @code{-9.99999979021476795361e+33} which is
+correct for the @acronym{MPAS} ocean and sea-ice models.
+Currently (January, 2018) the @acronym{MPAS} land-ice model uses
+ at code{-1.0e36} for missing values.
+Hence this option is usually invoked as @samp{--mss_val=-1.0e36} to
+facilitate processing of @acronym{MPAS} land-ice datasets.
+
+ at html
 <a name="nco_opt"></a> <!-- http://nco.sf.net/nco.html#nco_opt -->
 @end html
 @cindex @code{-n @var{nco_opt}}
@@ -22720,6 +22874,8 @@ If @var{out_fl} already exists it will be overwritten.
 Specifying @var{out_fl} when there are multiple input files (i.e., from
 using @samp{-I @var{in_drc}} or standard input) generates an error 
 (output files will be named the same as input files).
+Two positional arguments are interpreted as a single @var{input-file}
+and its corresponding @var{output-file}.
 
 @html
 <a name="prc_typ"></a> <!-- http://nco.sf.net/nco.html#prc_typ -->
@@ -22740,8 +22896,9 @@ using @samp{-I @var{in_drc}} or standard input) generates an error
 @cindex @code{--procedure}
 @item -P @var{prc_typ} (@code{--prc_typ}, @code{--pdq_typ}, @code{--prm_typ}, @code{--procedure})
 Specifies the permutation mode desired.
-As of January~15, 2016, one can tell @command{ncremap} to invoke special
-processing procedures for different types of input data.
+As of @acronym{NCO} version 4.5.5 (February, 2016), one can tell
+ at command{ncremap} to invoke special processing procedures for different
+types of input data. 
 For instance, to automatically permute the dimensions in the data file
 prior to regridding for a limited (though growing) number of data-file
 types that encounter the @command{ncremap} limitation concerning
@@ -23039,21 +23196,6 @@ Thus @acronym{NCO} will call @acronym{ERWG} only once, and will use that
 @var{map_fl} to regrid every @var{input-file}.
 
 @html
-<a name="tempest_opt"></a> <!-- http://nco.sf.net/nco.html#tempest_opt -->
- at end html
- at cindex @code{-T @var{tempest_opt}}
- at cindex @var{tempest_opt}
- at cindex @code{--tempest_opt}
- at cindex @code{--tps_opt}
- at cindex @code{--tempest}
- at cindex @code{--tempest_options}
- at item -T @var{tempest_opt} (@code{--tps_opt}, @code{--tempest_opt}, @code{--tempest}, @code{--tempest_options})
- at command{ncremap} passes @var{tempest_opt} directly through to
- at command{GenerateOfflineMap} (not to @command{GenerateOverlapMesh}).
-The user-specified contents of @var{tempest_opt} supercede its default
-contents, which are currently empty.
-
- at html
 <a name="tmp_drc"></a> <!-- http://nco.sf.net/nco.html#tmp_drc -->
 @end html
 @cindex @code{-T @var{tmp_drc}}
@@ -23144,7 +23286,7 @@ The @samp{-V} option tells @command{ncremap} to use the same grid as
 @var{var_rgr} in the input file.
 If @var{var_rgr} adheres to the @acronym{CF} @code{coordinates}
 convention described 
- at uref{http://cfconventions.org/1.6.html#coordinate-system, here},
+ at uref{http://cfconventions.org/cf-conventions/cf-conventions.html#coordinate-system, here},
 then @command{ncclimo} will infer the grid as represented by those
 coordinate variables.
 This option simplifies inferring grids when the grid coordinate names 
@@ -23250,9 +23392,11 @@ passed to the regridder (@command{ncks}) for additional diagnostics.
 @cindex @code{--tempest_options}
 @cindex @code{--esmf_opt}
 @cindex @code{--esmf_options}
- at item -W @var{wgt_opt} (@code{--wgt_opt}, @code{--weight_options}, @code{--esmf_opt}, @code{--esmf_options}, @code{--tps_opt}, @code{--tempest_options}, )
+ at item -W @var{wgt_opt} (@code{--wgt_opt}, @code{--weight_options}, @code{--esmf_opt}, @code{--esmf_options}, @code{--tps_opt}, @code{--tempest_options})
 @command{ncremap} passes @var{wgt_opt} directly through to the 
-weight-generator (currently @acronym{ERWG} or GenerateOfflineMap). 
+weight-generator (currently @acronym{ERWG} or
+TempestRemap's @command{GenerateOfflineMap}) (and not to
+ at command{GenerateOverlapMesh}).
 The user-specified contents of @var{wgt_opt}, if any, supercede the
 default contents for the weight-generator.
 The default option for @acronym{ERWG} is @samp{--ignore_unmapped}).
@@ -23261,16 +23405,20 @@ options.
 For example, to cause @acronym{ERWG} to output to a netCDF4 file,  
 pass @samp{-W "--netcdf4"} to @command{ncremap}.
 
-GenerateOfflineMap is, by default, run without any options.
+By default, @command{ncremap} runs @command{GenerateOfflineMap} without
+any options. 
 To cause @command{GenerateOfflineMap} to use a @code{_FillValue} of
- at math{-1}, pass @samp{-W "--fillvalue -1.0"} to @command{ncremap}.
+ at math{-1}, pass @samp{-W '--fillvalue -1.0'} to @command{ncremap}.
 Other common options include enforcing monotonicity (which is not the
 default in TempestRemap) constraints. 
 To guarantee monotonicity in regridding from Finite Volume @acronym{FV} 
 to @acronym{FV} maps (e.g., @acronym{MPAS}-to-rectangular), pass 
- at samp{-W "-in_np 1"} to @command{ncremap}.
+ at samp{-W '-in_np 1'} to @command{ncremap}.
 To guarantee monotonicity in regridding from Finite Element @acronym{FE} 
-to @acronym{FV} maps, pass @samp{-W "--mono"}.
+to @acronym{FV} maps, pass @samp{-W '--mono'}.
+Common sets of specialized options recommended for TempestRemap are
+collected into six boutique algorithms invokable with @samp{--alg_typ}
+as described above.
 
 @html
 <a name="wgt_cmd"></a> <!-- http://nco.sf.net/nco.html#wgt_cmd -->
@@ -23324,7 +23472,7 @@ two equivalent horizontal dimensions, as the final two dimensions in
 @var{in_fl}.
 Fields with other dimension orders (e.g., @samp{lat,lev,lon}) will not
 regrid properly. 
-To workaround this limitation for the time-being, one can employ 
+To workaround this limitation one can employ 
 @command{ncpdq} (@pxref{ncpdq netCDF Permute Dimensions Quickly})
 to permute the dimensions before (and un-permute them after) regridding.
 @command{ncremap} utilizes this method internally for some common
@@ -23342,9 +23490,9 @@ ncremap -R "--rgr col_nm=nCells" -i mpas_ncpdq.nc -m mpas120_to_t62.nc -O ~/rgr
 The previous two examples occur so frequently that @command{ncremap} has
 been specially equipped to handle @acronym{AIRS} and @acronym{MPAS}
 files. 
-As of 20160115, the following @command{ncremap} commands with the
- at samp{-P @var{prc_typ}} option automagically perform all required
-permutation and renaming necessary:
+As of @acronym{NCO} version 4.5.5 (February, 2016), the following
+ at command{ncremap} commands with the @samp{-P @var{prc_typ}} option
+automagically perform all required permutation and renaming necessary: 
 @example
 # AIRS Level2 vertical profiles
 ncremap -P airs -i AIRS_L2.nc -d dst_1x1.nc -O ~/rgr
@@ -23433,6 +23581,22 @@ ncremap -i in.nc  -m map.nc -o out.nc
 ncremap -I drc_in -m map.nc -O regrid
 @end example
 
+As of @acronym{NCO} version 4.7.2 (January, 2018), @command{ncremap}
+supports ``canonical'' argument ordering of command line arguments most
+frequently desired for one-off regridding, where a single input and
+output filename are supplied as command-line positional arguments
+without switches, pipes, or redirection: 
+ at example
+ncremap -m map.nc in.nc out.nc # Requires 4.7.2+
+ncremap -m map.nc -i in.nc -o out.nc
+ncremap -m map.nc -o out.nc in.nc
+ncremap -m map.nc -O out_dir in1.nc in2.nc
+ncremap -m map.nc -o out.nc < in.nc
+ls in.nc | ncremap -m map.nc -o out.nc
+ at end example
+These are all equivalent methods, but the canonical ordering shown in
+the first example only works in @acronym{NCO} version 4.7.2 and later.
+
 @command{ncremap} annotates the gridfiles and mapfiles that it creates
 with helpful metadata containing the full provenance of the command.
 Consequently, @command{ncremap} is a sensible tool for generating
diff --git a/man/ncap.1 b/man/ncap.1
index 1ae5ef1..049ea43 100644
--- a/man/ncap.1
+++ b/man/ncap.1
@@ -108,7 +108,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncap2.1 b/man/ncap2.1
index ca61649..d542e28 100644
--- a/man/ncap2.1
+++ b/man/ncap2.1
@@ -112,7 +112,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncatted.1 b/man/ncatted.1
index 0143f3e..82f02d5 100644
--- a/man/ncatted.1
+++ b/man/ncatted.1
@@ -507,7 +507,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncbo.1 b/man/ncbo.1
index a5da417..5275828 100644
--- a/man/ncbo.1
+++ b/man/ncbo.1
@@ -356,7 +356,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncclimo.1 b/man/ncclimo.1
index 404548e..aacea78 100644
--- a/man/ncclimo.1
+++ b/man/ncclimo.1
@@ -87,7 +87,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncecat.1 b/man/ncecat.1
index f0e5ba6..1b001f2 100644
--- a/man/ncecat.1
+++ b/man/ncecat.1
@@ -142,7 +142,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/nces.1 b/man/nces.1
index 9b47e14..445a410 100644
--- a/man/nces.1
+++ b/man/nces.1
@@ -155,7 +155,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncflint.1 b/man/ncflint.1
index fb004c9..c6b9e09 100644
--- a/man/ncflint.1
+++ b/man/ncflint.1
@@ -192,7 +192,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncks.1 b/man/ncks.1
index 3adfd5f..96852db 100644
--- a/man/ncks.1
+++ b/man/ncks.1
@@ -624,7 +624,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/nco.1 b/man/nco.1
index ab9ed41..0996f9c 100644
--- a/man/nco.1
+++ b/man/nco.1
@@ -126,7 +126,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncpdq.1 b/man/ncpdq.1
index 0dfc59d..9c7acb9 100644
--- a/man/ncpdq.1
+++ b/man/ncpdq.1
@@ -140,7 +140,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncra.1 b/man/ncra.1
index e032fdf..2eb4434 100644
--- a/man/ncra.1
+++ b/man/ncra.1
@@ -169,7 +169,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncrcat.1 b/man/ncrcat.1
index 079c46c..6e759a9 100644
--- a/man/ncrcat.1
+++ b/man/ncrcat.1
@@ -186,7 +186,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncremap.1 b/man/ncremap.1
index 0dcf8cf..8d59326 100644
--- a/man/ncremap.1
+++ b/man/ncremap.1
@@ -28,7 +28,8 @@ ncremap
 .IR map_fl ] [\--msk_dst =
 .IR msk_dst ] [\--msk_out =
 .IR msk_out ] [\--msk_src =
-.IR msk_src ] [\-n
+.IR msk_src ] [\--mss_val =
+.IR mss_val ] [\-n
 .IR nco_usr ] 
 [\--no_cll_msr ] [\--no_frm_trm] [\--no_stg_grd]
 [\-O
@@ -87,7 +88,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncrename.1 b/man/ncrename.1
index 0dcacec..f2a1891 100644
--- a/man/ncrename.1
+++ b/man/ncrename.1
@@ -208,7 +208,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/man/ncwa.1 b/man/ncwa.1
index d3ac74e..a08d43c 100644
--- a/man/ncwa.1
+++ b/man/ncwa.1
@@ -225,7 +225,7 @@ manual pages written by Charlie Zender and originally formatted by Brian Mays.
 Report bugs to <http://sf.net/bugs/?group_id=3331>.
 
 .SH COPYRIGHT
-Copyright \(co 1995-2017 Charlie Zender
+Copyright \(co 1995-2018 Charlie Zender
 .br
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
diff --git a/src/nco++/Makefile.old b/src/nco++/Makefile.old
index e6e371b..76d9a3f 100644
--- a/src/nco++/Makefile.old
+++ b/src/nco++/Makefile.old
@@ -3,7 +3,7 @@
 # Purpose: Makefile for NCO C++ directory nco++
 # Requires GNU Make---AT&T Make chokes on GNU syntax
 
-# Copyright (C) 1994--2017 Charlie Zender
+# Copyright (C) 1994--2018 Charlie Zender
 # License: GNU General Public License (GPL) Version 3
 # See http://www.gnu.org/copyleft/gpl.html for full license text
 
diff --git a/src/nco++/fmc_all_cls.cc b/src/nco++/fmc_all_cls.cc
index 68e230d..2754e0a 100644
--- a/src/nco++/fmc_all_cls.cc
+++ b/src/nco++/fmc_all_cls.cc
@@ -2,7 +2,7 @@
 
 /* Purpose: netCDF arithmetic processor class methods: families of functions/methods */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -5783,15 +5783,8 @@ var_sct *vlist_cls::push_fnd(bool &is_mtd, std::vector<RefAST> &vtr_args, fmc_cl
    if( calendar_in_sng.size())
      cln_typ=nco_cln_get_cln_typ(calendar_in_sng.c_str());
 
-   
-
-
-   #ifdef ENABLE_UDUNITS
-   # ifdef HAVE_UDUNITS2_H
-       rcd=nco_cln_clc_dbl_var_dff(units_in_sng.c_str(),units_out_sng,cln_typ,(double*)NULL, var);
-   #endif
-   #endif
-   
+     rcd=nco_cln_clc_dbl_var_dff(units_in_sng.c_str(),units_out_sng,cln_typ,(double*)NULL, var);
+    
    if(rcd!=NCO_NOERR)
       err_prn(sfnm, "Udunits was unable to convert data in the var '"+std::string(var->nm)+"' from '" +std::string(units_in_sng) +"' to '"+std::string(units_out_sng)+"'\n");
 
@@ -5909,11 +5902,7 @@ var_sct *udunits_cls::strftime_fnd(bool &is_mtd, std::vector<RefAST> &args_vtr,
       cln_typ=cln_nil;
 
 
-    #ifdef ENABLE_UDUNITS
-    # ifdef HAVE_UDUNITS2_H
-       rcd=nco_cln_clc_dbl_var_dff(units_in_sng.c_str(),units_out_sng.c_str(),cln_typ,(double*)NULL, var);
-     #endif
-    #endif
+    rcd=nco_cln_clc_dbl_var_dff(units_in_sng.c_str(),units_out_sng.c_str(),cln_typ,(double*)NULL, var);
 
     if(rcd!=NCO_NOERR)
          err_prn(sfnm, "Udunits was unable to convert data in the var '"+std::string(var->nm)+"' from '" +units_in_sng +"' to '"+units_out_sng+"'\n");
diff --git a/src/nco++/fmc_all_cls.hh b/src/nco++/fmc_all_cls.hh
index 5338a55..4f0474c 100644
--- a/src/nco++/fmc_all_cls.hh
+++ b/src/nco++/fmc_all_cls.hh
@@ -1,6 +1,6 @@
 /* Purpose: netCDF arithmetic processor class methods */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -19,6 +19,7 @@
 #include "ncoTree.hpp"
 #include "ncap2_utl.hh"
 #include "vtl_cls.hh"
+#include "nco_cln_utl.h" /* Calendar utilities */
 #include "nco_rth_flt.h" /* Float-precision arithmetic, MSVC macros */
 
 #include "sym_cls.hh" // holder for float/double math function pointers
diff --git a/src/nco++/fmc_cls.hh b/src/nco++/fmc_cls.hh
index 90890e0..da213f7 100644
--- a/src/nco++/fmc_cls.hh
+++ b/src/nco++/fmc_cls.hh
@@ -1,6 +1,6 @@
 /* Purpose: netCDF arithmetic processor class methods */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco++/fmc_gsl_cls.cc b/src/nco++/fmc_gsl_cls.cc
index 735af19..cda2b91 100644
--- a/src/nco++/fmc_gsl_cls.cc
+++ b/src/nco++/fmc_gsl_cls.cc
@@ -2,7 +2,7 @@
 
 /* Purpose: netCDF arithmetic processor class methods for GSL */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco++/fmc_gsl_cls.hh b/src/nco++/fmc_gsl_cls.hh
index e587ce7..6043add 100644
--- a/src/nco++/fmc_gsl_cls.hh
+++ b/src/nco++/fmc_gsl_cls.hh
@@ -1,6 +1,6 @@
 /* Purpose: netCDF arithmetic processor class methods */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco++/libnco++.hh b/src/nco++/libnco++.hh
index 5715413..4b48e59 100644
--- a/src/nco++/libnco++.hh
+++ b/src/nco++/libnco++.hh
@@ -2,7 +2,7 @@
 
 // Purpose: Prototypes, typedefs, and global variables for libnco++
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco++/ncap2.cc b/src/nco++/ncap2.cc
index 6c2e036..5138210 100644
--- a/src/nco++/ncap2.cc
+++ b/src/nco++/ncap2.cc
@@ -4,7 +4,7 @@
 
 /* Purpose: Compute user-defined derived fields using forward algebraic notation applied to netCDF files */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco++/ncap2_utl.cc b/src/nco++/ncap2_utl.cc
index 0e6b1af..377f06a 100644
--- a/src/nco++/ncap2_utl.cc
+++ b/src/nco++/ncap2_utl.cc
@@ -2,7 +2,7 @@
 
 /* Purpose: netCDF arithmetic processor */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco++/ncoGrammer.g b/src/nco++/ncoGrammer.g
index d894e57..f8571da 100644
--- a/src/nco++/ncoGrammer.g
+++ b/src/nco++/ncoGrammer.g
@@ -3,7 +3,7 @@ header {
 
 /* Purpose: ANTLR Grammar and support files for ncap2 */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco++/nco_gsl.c b/src/nco++/nco_gsl.c
index b304d5f..a4c243b 100644
--- a/src/nco++/nco_gsl.c
+++ b/src/nco++/nco_gsl.c
@@ -9,7 +9,7 @@
    GSL and NCO are both distributed under the GPL3 license.
    The GSL code is copyright by its respective authors.
    The NCO modifications that provide missing value support are, in addition, 
-   Copyright (C) 2013--2017 Charlie Zender
+   Copyright (C) 2013--2018 Charlie Zender
    License: GNU General Public License (GPL) Version 3
    See http://www.gnu.org/copyleft/gpl.html for full license text
 
diff --git a/src/nco++/nco_gsl.h b/src/nco++/nco_gsl.h
index 2151f94..33e9229 100644
--- a/src/nco++/nco_gsl.h
+++ b/src/nco++/nco_gsl.h
@@ -9,7 +9,7 @@
    GSL and NCO are both distributed under the GPL3 license.
    The GSL code is copyright by its respective authors.
    The NCO modifications that provide missing value support are, in addition, 
-   Copyright (C) 2013--2017 Charlie Zender
+   Copyright (C) 2013--2018 Charlie Zender
    License: GNU General Public License (GPL) Version 3
    See http://www.gnu.org/copyleft/gpl.html for full license text
 
diff --git a/src/nco++/prs_cls.cc b/src/nco++/prs_cls.cc
index 34fe728..05b6622 100644
--- a/src/nco++/prs_cls.cc
+++ b/src/nco++/prs_cls.cc
@@ -3,7 +3,7 @@
 /* Purpose: netCDF arithmetic processor */
 /* prs_cls -- symbol table - class methods */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco++/prs_cls.hh b/src/nco++/prs_cls.hh
index 75e1a48..cb5faff 100644
--- a/src/nco++/prs_cls.hh
+++ b/src/nco++/prs_cls.hh
@@ -1,7 +1,7 @@
 /* Purpose: netCDF arithmetic processor -  */
 /* prs_cls -- symbol table - data members & class methods */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco++/sdo_utl.cc b/src/nco++/sdo_utl.cc
index 8c98fe0..5eb2554 100644
--- a/src/nco++/sdo_utl.cc
+++ b/src/nco++/sdo_utl.cc
@@ -2,7 +2,7 @@
 
 // Purpose: Implementation (declaration) of SDO stand-alone utilities 
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco++/sdo_utl.hh b/src/nco++/sdo_utl.hh
index 7ff5b4d..5f91842 100644
--- a/src/nco++/sdo_utl.hh
+++ b/src/nco++/sdo_utl.hh
@@ -2,7 +2,7 @@
 
 // Purpose: Description (definition) of SDO stand-alone utilities
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/libnco.h b/src/nco/libnco.h
index ae825ef..2dc015a 100644
--- a/src/nco/libnco.h
+++ b/src/nco/libnco.h
@@ -2,7 +2,7 @@
 
 /* Purpose: netCDF Operator (NCO) library */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/mpncbo.c b/src/nco/mpncbo.c
index 1306238..1254ba5 100644
--- a/src/nco/mpncbo.c
+++ b/src/nco/mpncbo.c
@@ -5,7 +5,7 @@
 /* Purpose: Compute sum, difference, product, or ratio of specified hyperslabs of specfied variables
    from two input netCDF files and output them to a single file. */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/mpncecat.c b/src/nco/mpncecat.c
index 94ae001..90d7157 100644
--- a/src/nco/mpncecat.c
+++ b/src/nco/mpncecat.c
@@ -4,7 +4,7 @@
 
 /* Purpose: Join variables across files into a new record variable */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/mpncflint.c b/src/nco/mpncflint.c
index 09ead86..15f5e07 100644
--- a/src/nco/mpncflint.c
+++ b/src/nco/mpncflint.c
@@ -4,7 +4,7 @@
 
 /* Purpose: Linearly interpolate a third netCDF file from two input files */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/mpncpdq.c b/src/nco/mpncpdq.c
index 859d41b..6dfcfa3 100644
--- a/src/nco/mpncpdq.c
+++ b/src/nco/mpncpdq.c
@@ -4,7 +4,7 @@
 
 /* Purpose: Pack, re-dimension, query single netCDF file and output to a single file */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/mpncra.c b/src/nco/mpncra.c
index e0fcce7..b901e04 100644
--- a/src/nco/mpncra.c
+++ b/src/nco/mpncra.c
@@ -9,7 +9,7 @@
    specfied variables of multiple input netCDF files and output them 
    to a single file. */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/mpncwa.c b/src/nco/mpncwa.c
index c960f92..b582ca4 100644
--- a/src/nco/mpncwa.c
+++ b/src/nco/mpncwa.c
@@ -5,7 +5,7 @@
 /* Purpose: Compute averages of specified hyperslabs of specfied variables
    in a single input netCDF file and output them to a single file. */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/ncap.c b/src/nco/ncap.c
index 6fc1d03..f29184f 100644
--- a/src/nco/ncap.c
+++ b/src/nco/ncap.c
@@ -4,7 +4,7 @@
 
 /* Purpose: Compute user-defined derived fields using forward algebraic notation applied to netCDF files */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/ncap.h b/src/nco/ncap.h
index 79361a1..2a6085c 100644
--- a/src/nco/ncap.h
+++ b/src/nco/ncap.h
@@ -2,7 +2,7 @@
 
 /* Purpose: netCDF arithmetic processor definitions and function prototypes for ncap.c, ncap_utl.c, ncap_lex.l, and ncap_yacc.y */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/ncap_utl.c b/src/nco/ncap_utl.c
index 8f99b68..cd83534 100644
--- a/src/nco/ncap_utl.c
+++ b/src/nco/ncap_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: netCDF arithmetic processor */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/ncap_yacc.y b/src/nco/ncap_yacc.y
index 80c8ee9..5c24098 100644
--- a/src/nco/ncap_yacc.y
+++ b/src/nco/ncap_yacc.y
@@ -4,7 +4,7 @@
   
 /* Purpose: Grammar parser for ncap */
   
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/ncatted.c b/src/nco/ncatted.c
index 6906dc1..4a30a5b 100644
--- a/src/nco/ncatted.c
+++ b/src/nco/ncatted.c
@@ -4,7 +4,7 @@
 
 /* Purpose: Add, create, delete, or overwrite attributes in a netCDF file */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/ncbo.c b/src/nco/ncbo.c
index fb12ddf..32e5f10 100644
--- a/src/nco/ncbo.c
+++ b/src/nco/ncbo.c
@@ -5,7 +5,7 @@
 /* Purpose: Compute sum, difference, product, or ratio of specified hyperslabs of specfied variables
    from two input netCDF files and output them to a single file. */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/ncecat.c b/src/nco/ncecat.c
index 91c4acd..5b5c852 100644
--- a/src/nco/ncecat.c
+++ b/src/nco/ncecat.c
@@ -4,7 +4,7 @@
 
 /* Purpose: Join variables across files with new record variable or aggregate files as groups */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/ncflint.c b/src/nco/ncflint.c
index 669e84a..3473bce 100644
--- a/src/nco/ncflint.c
+++ b/src/nco/ncflint.c
@@ -4,7 +4,7 @@
 
 /* Purpose: Linearly interpolate a third netCDF file from two input files */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/ncks.c b/src/nco/ncks.c
index b741b46..eba92cf 100644
--- a/src/nco/ncks.c
+++ b/src/nco/ncks.c
@@ -5,7 +5,7 @@
 /* Purpose: Extract (subsets of) variables from a netCDF file 
    Print them to screen, copy them to another file, or regrid them */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/nco.h b/src/nco/nco.h
index 19f796e..9812282 100644
--- a/src/nco/nco.h
+++ b/src/nco/nco.h
@@ -2,7 +2,7 @@
 
 /* Purpose: netCDF Operator (NCO) definitions */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -344,7 +344,7 @@ extern "C" {
 # define NCO_VERSION_MINOR 7
 #endif /* !NCO_VERSION_MINOR */
 #ifndef NCO_VERSION_PATCH
-# define NCO_VERSION_PATCH 1
+# define NCO_VERSION_PATCH 2
 #endif /* !NCO_VERSION_PATCH */
 #ifndef NCO_VERSION_NOTE
 # define NCO_VERSION_NOTE "" /* Blank for final versions, non-blank (e.g., "-beta37") for pre-release versions */
@@ -354,7 +354,7 @@ extern "C" {
 # define NCO_LIB_VERSION ( NCO_VERSION_MAJOR * 100 + NCO_VERSION_MINOR * 10 + NCO_VERSION_PATCH )
 #endif /* !NCO_LIB_VERSION */
 #ifndef NCO_VERSION
-# define NCO_VERSION "4.7.1"
+# define NCO_VERSION "4.7.2"
 #endif /* !NCO_VERSION */
 
 /* Compatibility tokens new to netCDF4 netcdf.h: */
diff --git a/src/nco/nco_att_utl.c b/src/nco/nco_att_utl.c
index 8580aad..f486993 100644
--- a/src/nco/nco_att_utl.c
+++ b/src/nco/nco_att_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Attribute utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_att_utl.h b/src/nco/nco_att_utl.h
index c50b2a4..0a9ee13 100644
--- a/src/nco/nco_att_utl.h
+++ b/src/nco/nco_att_utl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Attribute utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_aux.c b/src/nco/nco_aux.c
index 01d59d4..e1135a1 100644
--- a/src/nco/nco_aux.c
+++ b/src/nco/nco_aux.c
@@ -1,6 +1,6 @@
 /* $Header$ */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_aux.h b/src/nco/nco_aux.h
index e448ce3..1d0af13 100644
--- a/src/nco/nco_aux.h
+++ b/src/nco/nco_aux.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Sub-set cell-based grids using auxiliary coordinate variable */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_bnr.c b/src/nco/nco_bnr.c
index 9142646..aba4e5d 100644
--- a/src/nco/nco_bnr.c
+++ b/src/nco/nco_bnr.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Binary file utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_bnr.h b/src/nco/nco_bnr.h
index 7d43608..880d5ad 100644
--- a/src/nco/nco_bnr.h
+++ b/src/nco/nco_bnr.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Binary file utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_cln_utl.c b/src/nco/nco_cln_utl.c
index 64130df..026b5bc 100644
--- a/src/nco/nco_cln_utl.c
+++ b/src/nco/nco_cln_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Calendar utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -537,6 +537,17 @@ nco_cln_var_prs
   return NCO_ERR;
 } /*  !nco_cln_var_prs() */
 
+int /* [rcd] Successful conversion returns NCO_NOERR */
+nco_cln_prs_tm /* UDUnits2 Extract time stamp from parsed UDUnits string */
+(const char *unt_sng, /* I [ptr] units attribute string */
+ tm_cln_sct *tm_in) /* O [sct] Time structure to be populated */
+{
+
+  (void)fprintf(stderr,"%s: WARNING NCO was built without UDUnits. NCO is therefore unable to interpret the string \"%s\".\n:  HINT Re-build or re-install NCO enabled with UDUnits.\n",nco_prg_nm_get(),unt_sng);
+
+  return NCO_ERR;
+}
+
 #endif /* !ENABLE_UDUNITS */
 
 #ifdef ENABLE_UDUNITS
diff --git a/src/nco/nco_cln_utl.h b/src/nco/nco_cln_utl.h
index e32ddf2..b04d680 100644
--- a/src/nco/nco_cln_utl.h
+++ b/src/nco/nco_cln_utl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Calendar utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -168,6 +168,12 @@ extern "C" {
    const char *unit_sng, /* I [sng] Units string */
    char *lgb_sng); /* O [sng] Legible version of input string */
 
+  int /* [flg] NCO_NOERR or NCO_ERR */
+  nco_cln_prs_tm /* Extract time stamp from a parsed udunits string */
+  (const char *unt_sng, /* I [ptr] units attribute string */  
+   tm_cln_sct *tm_in); /*  O [sct] struct to be populated */
+
+
 #ifdef ENABLE_UDUNITS
 # ifdef HAVE_UDUNITS2_H
 
@@ -190,10 +196,6 @@ extern "C" {
    double *rgn_val, /* I/O [ptr] time diff in units based on fl_bs_sng */ 
    var_sct *var);   /* I/O [ptr]  */ 
   
-  int /* [flg] NCO_NOERR or NCO_ERR */
-  nco_cln_prs_tm /* Extract time stamp from a parsed udunits string */
-  (const char *unt_sng, /* I [ptr] units attribute string */  
-   tm_cln_sct *tm_in); /*  O [sct] struct to be populated */
 
 # endif /* !HAVE_UDUNITS2_H */
 #endif /* !ENABLE_UDUNITS */
diff --git a/src/nco/nco_cnf_dmn.c b/src/nco/nco_cnf_dmn.c
index 9e431ee..a7f1cac 100644
--- a/src/nco/nco_cnf_dmn.c
+++ b/src/nco/nco_cnf_dmn.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Conform dimensions between variables */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_cnf_dmn.h b/src/nco/nco_cnf_dmn.h
index 82cbd1c..bb6f4cf 100644
--- a/src/nco/nco_cnf_dmn.h
+++ b/src/nco/nco_cnf_dmn.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Conform dimensions */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_cnf_typ.c b/src/nco/nco_cnf_typ.c
index 8c92600..1e1ea3a 100644
--- a/src/nco/nco_cnf_typ.c
+++ b/src/nco/nco_cnf_typ.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Conform variable types */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_cnf_typ.h b/src/nco/nco_cnf_typ.h
index da245c4..cba332a 100644
--- a/src/nco/nco_cnf_typ.h
+++ b/src/nco/nco_cnf_typ.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Conform variable types */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_cnk.c b/src/nco/nco_cnk.c
index 25a7037..23a64ea 100644
--- a/src/nco/nco_cnk.c
+++ b/src/nco/nco_cnk.c
@@ -2,7 +2,7 @@
 
 /* Purpose: NCO utilities for chunking */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_cnk.h b/src/nco/nco_cnk.h
index 7b18f4e..e15a8e0 100644
--- a/src/nco/nco_cnk.h
+++ b/src/nco/nco_cnk.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Description (definition) of chunking functions */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_cnv_arm.c b/src/nco/nco_cnv_arm.c
index 01941b3..099e30f 100644
--- a/src/nco/nco_cnv_arm.c
+++ b/src/nco/nco_cnv_arm.c
@@ -2,7 +2,7 @@
 
 /* Purpose: ARM conventions, e.g., http://www.arm.gov/data/time.stm */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_cnv_arm.h b/src/nco/nco_cnv_arm.h
index 00dea4b..aabca63 100644
--- a/src/nco/nco_cnv_arm.h
+++ b/src/nco/nco_cnv_arm.h
@@ -2,7 +2,7 @@
 
 /* Purpose: ARM conventions */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_cnv_csm.c b/src/nco/nco_cnv_csm.c
index 3c23b02..bef9cda 100644
--- a/src/nco/nco_cnv_csm.c
+++ b/src/nco/nco_cnv_csm.c
@@ -2,7 +2,7 @@
 
 /* Purpose: CCM/CCSM/CF conventions */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_cnv_csm.h b/src/nco/nco_cnv_csm.h
index f16192d..e9b6756 100644
--- a/src/nco/nco_cnv_csm.h
+++ b/src/nco/nco_cnv_csm.h
@@ -2,7 +2,7 @@
 
 /* Purpose: CCM/CCSM/CF conventions */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_ctl.c b/src/nco/nco_ctl.c
index e705f2e..2f4db79 100644
--- a/src/nco/nco_ctl.c
+++ b/src/nco/nco_ctl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Program flow control functions */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -850,7 +850,7 @@ nco_nmn_get(void) /* [fnc] Return mnemonic that describes current NCO version */
 { 
   /* Purpose: Return mnemonic describing current NCO version
      Always include terminal \n so mnemonic does not dangle */
-  return "Mnemonic: Ajudar\n";
+  return "Mnemonic: Sapiens\n";
 } /* end nco_nmn_get() */
 
 char * /* O [sng] nm_in stripped of any path (i.e., program name stub) */ 
diff --git a/src/nco/nco_ctl.h b/src/nco/nco_ctl.h
index 7d87acf..78a0415 100644
--- a/src/nco/nco_ctl.h
+++ b/src/nco/nco_ctl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Program flow control functions */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_dbg.c b/src/nco/nco_dbg.c
index 266cb66..17b591d 100644
--- a/src/nco/nco_dbg.c
+++ b/src/nco/nco_dbg.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Debugging */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_dbg.h b/src/nco/nco_dbg.h
index 433698c..d049ed3 100644
--- a/src/nco/nco_dbg.h
+++ b/src/nco/nco_dbg.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Debugging */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_dmn_utl.c b/src/nco/nco_dmn_utl.c
index 83d4690..b96ee69 100644
--- a/src/nco/nco_dmn_utl.c
+++ b/src/nco/nco_dmn_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Dimension utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_dmn_utl.h b/src/nco/nco_dmn_utl.h
index bb77fd9..56d0d53 100644
--- a/src/nco/nco_dmn_utl.h
+++ b/src/nco/nco_dmn_utl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Dimension utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_fl_utl.c b/src/nco/nco_fl_utl.c
index b5f8530..5aa9f3f 100644
--- a/src/nco/nco_fl_utl.c
+++ b/src/nco/nco_fl_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: File manipulation */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_fl_utl.h b/src/nco/nco_fl_utl.h
index ebcc353..73ac8f7 100644
--- a/src/nco/nco_fl_utl.h
+++ b/src/nco/nco_fl_utl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: File manipulation */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_grp_trv.c b/src/nco/nco_grp_trv.c
index 30e5197..f8668f7 100644
--- a/src/nco/nco_grp_trv.c
+++ b/src/nco/nco_grp_trv.c
@@ -2,7 +2,7 @@
 
 /* Purpose: netCDF4 traversal storage */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_grp_trv.h b/src/nco/nco_grp_trv.h
index 37868fb..71b18ca 100644
--- a/src/nco/nco_grp_trv.h
+++ b/src/nco/nco_grp_trv.h
@@ -2,7 +2,7 @@
 
 /* Purpose: netCDF4 traversal storage */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_grp_utl.c b/src/nco/nco_grp_utl.c
index b3841ea..2cd9fff 100644
--- a/src/nco/nco_grp_utl.c
+++ b/src/nco/nco_grp_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Group utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -2152,46 +2152,46 @@ nco_bld_dmn_ids_trv                   /* [fnc] Build dimension info for all vari
         } /* endif dbg */
         if(strcmp(var_trv.var_dmn[idx_dmn_var].dmn_nm,dmn_trv->nm)){
 
-        /* Test case generates duplicated dimension IDs in netCDF file
-
-        ncks -O  -v two_dmn_rec_var in_grp.nc out.nc
-
-        defines new dimensions for the file, as
-
-        ID=0 index [0]:</time> 
-        ID=1 index [1]:</lev> 
-        ID=2 index [0]:</g8/lev> 
-        ID=3 index [1]:</g8/vrt_nbr> 
-        ID=4 index [1]:</vrt_nbr> 
-
-        but the resulting file, when read, has the following IDs
-
-        dimensions:
-        #0,time = UNLIMITED ; // (10 currently)
-        #1,lev = 3 ;
-        #4,vrt_nbr = 2 ;
-
-        group: g8 {
-        dimensions:
-        #0,lev = 3 ;
-        #1,vrt_nbr = 2 ;
-
-        From: "Unidata netCDF Support" <support-netcdf at unidata.ucar.edu>
-        To: <pvicente at uci.edu>
-        Sent: Tuesday, March 12, 2013 5:02 AM
-        Subject: [netCDF #SHH-257980]: Re: [netcdfgroup] Dimensions IDs
-
-        > Your Ticket has been received, and a Unidata staff member will review it and reply accordingly. Listed below are details of this new Ticket. Please make sure the Ticket ID remains in the Subject: line on all correspondence related to this Ticket.
-        > 
-        >    Ticket ID: SHH-257980
-        >    Subject: Re: [netcdfgroup] Dimensions IDs
-        >    Department: Support netCDF
-        >    Priority: Normal
-        >    Status: Open
-        */
-
+	  /* Test case generates duplicated dimension IDs in netCDF file:
+	     
+	     ncks -O  -v two_dmn_rec_var in_grp.nc out.nc
+	     
+	     defines new dimensions for the file, as
+	     
+	     ID=0 index [0]:</time> 
+	     ID=1 index [1]:</lev> 
+	     ID=2 index [0]:</g8/lev> 
+	     ID=3 index [1]:</g8/vrt_nbr> 
+	     ID=4 index [1]:</vrt_nbr> 
+	     
+	     but the resulting file, when read, has the following IDs
+	     
+	     dimensions:
+	     #0,time = UNLIMITED ; // (10 currently)
+	     #1,lev = 3 ;
+	     #4,vrt_nbr = 2 ;
+	     
+	     group: g8 {
+	     dimensions:
+	     #0,lev = 3 ;
+	     #1,vrt_nbr = 2 ;
+	     
+	     From: "Unidata netCDF Support" <support-netcdf at unidata.ucar.edu>
+	     To: <pvicente at uci.edu>
+	     Sent: Tuesday, March 12, 2013 5:02 AM
+	     Subject: [netCDF #SHH-257980]: Re: [netcdfgroup] Dimensions IDs
+	     
+	     > Your Ticket has been received, and a Unidata staff member will review it and reply accordingly. Listed below are details of this new Ticket. Please make sure the Ticket ID remains in the Subject: line on all correspondence related to this Ticket.
+	     > 
+	     >    Ticket ID: SHH-257980
+	     >    Subject: Re: [netcdfgroup] Dimensions IDs
+	     >    Department: Support netCDF
+	     >    Priority: Normal
+	     >    Status: Open
+	  */
+	  
           (void)fprintf(stdout,"%s: INFO %s reports variable <%s> with duplicate dimensions\n",nco_prg_nm_get(),fnc_nm,var_trv.nm_fll);
-          (void)fprintf(stdout,"%s: ERROR netCDF file with duplicate dimension IDs detected. Please use netCDF version at least 4.3.0.\n",nco_prg_nm_get());
+          (void)fprintf(stdout,"%s: ERROR netCDF file with duplicate dimension IDs detected. Please use netCDF version at least 4.3.0. NB: Simultaneously renaming multiple dimensions with ncrename can trigger this bug with netCDF versions up to 4.5.1 (current as of 20180119).\n",nco_prg_nm_get());
           (void)nco_prn_trv_tbl(nc_id,trv_tbl);
           nco_exit(EXIT_FAILURE);
         }
diff --git a/src/nco/nco_grp_utl.h b/src/nco/nco_grp_utl.h
index b0cfff9..0c3fc1a 100644
--- a/src/nco/nco_grp_utl.h
+++ b/src/nco/nco_grp_utl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Group utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_lmt.c b/src/nco/nco_lmt.c
index b77adc1..bbb4a88 100644
--- a/src/nco/nco_lmt.c
+++ b/src/nco/nco_lmt.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Hyperslab limits */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_lmt.h b/src/nco/nco_lmt.h
index 36a09b2..f4619d0 100644
--- a/src/nco/nco_lmt.h
+++ b/src/nco/nco_lmt.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Hyperslab limits */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_lst_utl.c b/src/nco/nco_lst_utl.c
index 06437ae..f32a019 100644
--- a/src/nco/nco_lst_utl.c
+++ b/src/nco/nco_lst_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: List utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_lst_utl.h b/src/nco/nco_lst_utl.h
index 495e31f..b01747b 100644
--- a/src/nco/nco_lst_utl.h
+++ b/src/nco/nco_lst_utl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: List utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_md5.c b/src/nco/nco_md5.c
index 13474f6..ebe2e33 100644
--- a/src/nco/nco_md5.c
+++ b/src/nco/nco_md5.c
@@ -2,7 +2,7 @@
 
 /* Purpose: NCO utilities for MD5 digests */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_md5.h b/src/nco/nco_md5.h
index acd59ed..0be4bac 100644
--- a/src/nco/nco_md5.h
+++ b/src/nco/nco_md5.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Description (definition) of MD5 digest functions */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_mmr.c b/src/nco/nco_mmr.c
index 5454c41..a8d888c 100644
--- a/src/nco/nco_mmr.c
+++ b/src/nco/nco_mmr.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Memory management */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_mmr.h b/src/nco/nco_mmr.h
index ae64cc8..e710631 100644
--- a/src/nco/nco_mmr.h
+++ b/src/nco/nco_mmr.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Memory management */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_mpi.h b/src/nco/nco_mpi.h
index e7b6ef3..a417d39 100644
--- a/src/nco/nco_mpi.h
+++ b/src/nco/nco_mpi.h
@@ -13,7 +13,7 @@
    Should _any_ MPI dependencies be in libnco.a?
    Cross-platform link weirdness (e.g., AIX) makes MPI dependencies in libnco.a fragile */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_msa.c b/src/nco/nco_msa.c
index bcdd113..2b08353 100644
--- a/src/nco/nco_msa.c
+++ b/src/nco/nco_msa.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Multi-slabbing algorithm */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_msa.h b/src/nco/nco_msa.h
index 36f32ed..4ecfe27 100644
--- a/src/nco/nco_msa.h
+++ b/src/nco/nco_msa.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Multi-slabbing algorithm */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_mss_val.c b/src/nco/nco_mss_val.c
index 5524507..71dee77 100644
--- a/src/nco/nco_mss_val.c
+++ b/src/nco/nco_mss_val.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Missing value utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_mss_val.h b/src/nco/nco_mss_val.h
index 6c3dd96..d11dbb1 100644
--- a/src/nco/nco_mss_val.h
+++ b/src/nco/nco_mss_val.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Missing value utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_mta.c b/src/nco/nco_mta.c
index 1a27d2e..f1b8daf 100644
--- a/src/nco/nco_mta.c
+++ b/src/nco/nco_mta.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Multi-argument utilities */
 
-/* Copyright (C) 2016--2017 Charlie Zender
+/* Copyright (C) 2016--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file
diff --git a/src/nco/nco_mta.h b/src/nco/nco_mta.h
index 3ad2f13..773b91a 100644
--- a/src/nco/nco_mta.h
+++ b/src/nco/nco_mta.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Multi-argument parsing */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_netcdf.c b/src/nco/nco_netcdf.c
index 58e7a7a..4b98f19 100644
--- a/src/nco/nco_netcdf.c
+++ b/src/nco/nco_netcdf.c
@@ -2,7 +2,7 @@
 
 /* Purpose: NCO wrappers for netCDF C library */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -1191,8 +1191,12 @@ int
 nco_rename_grp(int grp_id,const char * const grp_nm)
 {
   /* Purpose: Wrapper for nc_rename_grp() */
+  const char fnc_nm[]="nco_rename_grp()";
   int rcd;
   rcd=nc_rename_grp(grp_id,grp_nm);
+  if(rcd == NC_ENAMEINUSE){
+    (void)fprintf(stdout,"ERROR: %s cannot define group name \"%s\" which is already in use\n",fnc_nm,grp_nm);
+  } /* endif */
   if(rcd != NC_NOERR) nco_err_exit(rcd,"nco_rename_grp()");
   return rcd;
 } /* end nco_rename_grp() */
@@ -1450,8 +1454,12 @@ int
 nco_rename_dim(const int nc_id,const int dmn_id,const char * const dmn_nm)
 {
   /* Purpose: Wrapper for nc_rename_dim() */
+  const char fnc_nm[]="nco_rename_dim()";
   int rcd;
   rcd=nc_rename_dim(nc_id,dmn_id,dmn_nm);
+  if(rcd == NC_ENAMEINUSE){
+    (void)fprintf(stdout,"ERROR: %s cannot define dimension name \"%s\" which is already in use\n",fnc_nm,dmn_nm);
+  } /* endif */
   if(rcd != NC_NOERR) nco_err_exit(rcd,"nco_rename_dim()");
   return rcd;
 }  /* end nco_inq_rename_dim */
@@ -1828,8 +1836,12 @@ int
 nco_rename_var(const int nc_id,const int var_id,const char * const var_nm)
 {
   /* Purpose: Wrapper for nc_rename_var() */
+  const char fnc_nm[]="nco_rename_var()";
   int rcd;
   rcd=nc_rename_var(nc_id,var_id,var_nm);
+  if(rcd == NC_ENAMEINUSE){
+    (void)fprintf(stdout,"ERROR: %s cannot define variable name \"%s\" which is already in use\n",fnc_nm,var_nm);
+  } /* endif */
   if(rcd != NC_NOERR) nco_err_exit(rcd,"nco_rename_var()");
   return rcd;
 } /* end nco_rename_var */
diff --git a/src/nco/nco_netcdf.h b/src/nco/nco_netcdf.h
index a27326f..2dc070a 100644
--- a/src/nco/nco_netcdf.h
+++ b/src/nco/nco_netcdf.h
@@ -2,7 +2,7 @@
 
 /* Purpose: NCO wrappers for netCDF C library */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -467,7 +467,10 @@ int nco_get_att(const int nc_id,const int var_id,const char * const att_nm,void
      to manually copy netcdf_mem.h into /usr/include (has anyone tested whether that really solves the problem?)
      Option 2 is to add test/symbol in build-engine, e.g., 
      #if defined(HAVE_NETCDF_MEM_H)
-     which requires additional build tests in Autoconf/CMake/Makefile */
+     which requires additional build tests in Autoconf/CMake/Makefile 
+     20180106 For CMake this is correctly done by detecting both the existence of
+     netcdf_mem.h and symbol nc_open_mem in the netCDF library and defining HAVE_NETCDF_MEM_H 
+     only when both exist */
 #ifdef HAVE_NETCDF_MEM_H
 # include <netcdf_mem.h> /* nc_open_mem() defined in netCDF >= 4.4.0 */
 #else /* 4.4.0 */
diff --git a/src/nco/nco_omp.c b/src/nco/nco_omp.c
index 7e60a21..bb44d2a 100644
--- a/src/nco/nco_omp.c
+++ b/src/nco/nco_omp.c
@@ -2,7 +2,7 @@
 
 /* Purpose: OpenMP utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_omp.h b/src/nco/nco_omp.h
index f05af12..e3f7d92 100644
--- a/src/nco/nco_omp.h
+++ b/src/nco/nco_omp.h
@@ -2,7 +2,7 @@
 
 /* Purpose: OpenMP utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_pck.c b/src/nco/nco_pck.c
index 2cfd078..866f286 100644
--- a/src/nco/nco_pck.c
+++ b/src/nco/nco_pck.c
@@ -2,7 +2,7 @@
 
 /* Purpose: NCO utilities for packing and unpacking variables */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_pck.h b/src/nco/nco_pck.h
index 032a16f..8a284c0 100644
--- a/src/nco/nco_pck.h
+++ b/src/nco/nco_pck.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Description (definition) of packing/unpacking functions */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_ppc.c b/src/nco/nco_ppc.c
index 9fe3b8f..5a715db 100644
--- a/src/nco/nco_ppc.c
+++ b/src/nco/nco_ppc.c
@@ -2,7 +2,7 @@
 
 /* Purpose: NCO utilities for Precision-Preserving Compression (PPC) */
 
-/* Copyright (C) 2015--2017 Charlie Zender
+/* Copyright (C) 2015--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_ppc.h b/src/nco/nco_ppc.h
index 0021dad..edec18a 100644
--- a/src/nco/nco_ppc.h
+++ b/src/nco/nco_ppc.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Description (definition) of Precision-Preserving Compression (PPC) functions */
 
-/* Copyright (C) 2015--2017 Charlie Zender
+/* Copyright (C) 2015--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_prn.c b/src/nco/nco_prn.c
index 8e8c762..e56bab4 100644
--- a/src/nco/nco_prn.c
+++ b/src/nco/nco_prn.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Print variables, attributes, metadata */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -1974,8 +1974,8 @@ nco_prn_var_val_trv /* [fnc] Print variable data (GTT version) */
           chr_val=var->val.cp[lmn];
           if(var->nbr_dim == 0){
             if(CDL||TRD||JSN) (void)fprintf(stdout,"\"");
-	    /* the NetCDF standard is to print nul as "0" but  we shall  print "" for all formats */    
-            if(chr_val != '0' )
+	    /* the NetCDF standard is to print nul as "0" but  we shall  print "" for all formats */
+            if(chr_val != 0 )
 	       (void)fprintf(stdout,"%s",(*chr2sng_sf)(chr_val,val_sng));
             if(CDL||TRD||JSN) (void)fprintf(stdout,"\"");
             val_sng[0]='\0'; /* Re-initialize with NUL byte to be safe */
diff --git a/src/nco/nco_prn.h b/src/nco/nco_prn.h
index b77dd20..9ec6be1 100644
--- a/src/nco/nco_prn.h
+++ b/src/nco/nco_prn.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Print variables, attributes, metadata */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_rec_var.c b/src/nco/nco_rec_var.c
index 6b65cf4..8aa4323 100644
--- a/src/nco/nco_rec_var.c
+++ b/src/nco/nco_rec_var.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Record variable utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_rec_var.h b/src/nco/nco_rec_var.h
index 255a58b..b6dd683 100644
--- a/src/nco/nco_rec_var.h
+++ b/src/nco/nco_rec_var.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Record variable utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_rgr.c b/src/nco/nco_rgr.c
index 33de13d..6deab2c 100644
--- a/src/nco/nco_rgr.c
+++ b/src/nco/nco_rgr.c
@@ -2,7 +2,7 @@
 
 /* Purpose: NCO regridding utilities */
 
-/* Copyright (C) 2015--2017 Charlie Zender
+/* Copyright (C) 2015--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_rgr.h b/src/nco/nco_rgr.h
index dab0795..62bb540 100644
--- a/src/nco/nco_rgr.h
+++ b/src/nco/nco_rgr.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Description (definition) of regridding functions */
 
-/* Copyright (C) 2015--2017 Charlie Zender
+/* Copyright (C) 2015--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_rth_flt.c b/src/nco/nco_rth_flt.c
index 06cf14f..51bf053 100644
--- a/src/nco/nco_rth_flt.c
+++ b/src/nco/nco_rth_flt.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Float-precision arithmetic, MSVC macros */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_rth_flt.h b/src/nco/nco_rth_flt.h
index 04aad0e..ef93e41 100644
--- a/src/nco/nco_rth_flt.h
+++ b/src/nco/nco_rth_flt.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Float-precision arithmetic, MSVC macros */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_rth_utl.c b/src/nco/nco_rth_utl.c
index 767605e..aaa2323 100644
--- a/src/nco/nco_rth_utl.c
+++ b/src/nco/nco_rth_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Arithmetic controls and utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_rth_utl.h b/src/nco/nco_rth_utl.h
index 6f4fe96..47f7537 100644
--- a/src/nco/nco_rth_utl.h
+++ b/src/nco/nco_rth_utl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Arithmetic controls and utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_scl_utl.c b/src/nco/nco_scl_utl.c
index 86c6515..e3c9a6b 100644
--- a/src/nco/nco_scl_utl.c
+++ b/src/nco/nco_scl_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Scalar utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_scl_utl.h b/src/nco/nco_scl_utl.h
index 94b8069..8d34a7f 100644
--- a/src/nco/nco_scl_utl.h
+++ b/src/nco/nco_scl_utl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Scalar utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_scm.c b/src/nco/nco_scm.c
index 7f3e79b..d8c7e6e 100644
--- a/src/nco/nco_scm.c
+++ b/src/nco/nco_scm.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Software configuration management */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -148,7 +148,7 @@ void
 nco_cpy_prn(void) /* [fnc] Print copyright notice */
 {
   /* Purpose: Print copyright notice */
-  (void)fprintf(stderr,"Copyright (C) 1995--2017 Charlie Zender\n");
+  (void)fprintf(stderr,"Copyright (C) 1995--2018 Charlie Zender\n");
   (void)fprintf(stdout,"This program is part of NCO, the netCDF Operators.\nNCO is free software and comes with a BIG FAT KISS and ABSOLUTELY NO WARRANTY\nYou may redistribute and/or modify NCO under the terms of the\nGNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file\nGPL: http://www.gnu.org/copyleft/gpl.html\nLICENSE: https://github.com/nco/nco/tree/master/LICENSE\n");
 } /* end copyright_prn() */
 
diff --git a/src/nco/nco_scm.h b/src/nco/nco_scm.h
index fe64b2c..6a732f1 100644
--- a/src/nco/nco_scm.h
+++ b/src/nco/nco_scm.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Software configuration management */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_sld.c b/src/nco/nco_sld.c
index 431854a..784b482 100644
--- a/src/nco/nco_sld.c
+++ b/src/nco/nco_sld.c
@@ -2,7 +2,7 @@
 
 /* Purpose: NCO utilities for Swath-Like Data (SLD) */
 
-/* Copyright (C) 2015--2017 Charlie Zender
+/* Copyright (C) 2015--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_sld.h b/src/nco/nco_sld.h
index 60bb9bd..06db79f 100644
--- a/src/nco/nco_sld.h
+++ b/src/nco/nco_sld.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Description (definition) of Swath-Like Data (SLD) functions */
 
-/* Copyright (C) 2015--2017 Charlie Zender
+/* Copyright (C) 2015--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_sng_utl.c b/src/nco/nco_sng_utl.c
index 8e30e19..8b8cf30 100644
--- a/src/nco/nco_sng_utl.c
+++ b/src/nco/nco_sng_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: String utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_sng_utl.h b/src/nco/nco_sng_utl.h
index 829f5e7..a6863a8 100644
--- a/src/nco/nco_sng_utl.h
+++ b/src/nco/nco_sng_utl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: String utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -26,8 +26,7 @@
 
 #ifdef _MSC_VER
 # define NEED_STRSEP
-//# define NEED_STRCASECMP (netcdf defines strcasecmp for MSVC)
-# define strncasecmp _strnicmp // (but not strncasecmp)
+# define NEED_STRCASECMP 
 # define NEED_STRCASESTR
 #endif /* !_MSC_VER */
 
diff --git a/src/nco/nco_srm.c b/src/nco/nco_srm.c
index 8bc937e..5fb0754 100644
--- a/src/nco/nco_srm.c
+++ b/src/nco/nco_srm.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Streams */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_srm.h b/src/nco/nco_srm.h
index 9fc974c..c5c83e7 100644
--- a/src/nco/nco_srm.h
+++ b/src/nco/nco_srm.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Streams */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_typ.h b/src/nco/nco_typ.h
index c7aed0d..a629321 100644
--- a/src/nco/nco_typ.h
+++ b/src/nco/nco_typ.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Type definitions, opaque types */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_var_avg.c b/src/nco/nco_var_avg.c
index dc04429..1c57300 100644
--- a/src/nco/nco_var_avg.c
+++ b/src/nco/nco_var_avg.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Average variables */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_var_avg.h b/src/nco/nco_var_avg.h
index c323140..642ede6 100644
--- a/src/nco/nco_var_avg.h
+++ b/src/nco/nco_var_avg.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Average variables */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_var_lst.c b/src/nco/nco_var_lst.c
index 15828f1..7a287b7 100644
--- a/src/nco/nco_var_lst.c
+++ b/src/nco/nco_var_lst.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Variable list utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
@@ -1295,7 +1295,7 @@ nco_var_is_fix                               /* [fnc] Variable should be treated
   
   /* Conditions #1 and #2 are already implemented above in the case() statement */
   /* Check condition #4 above: */
-  if(is_sz_rnk_prv_rth_opr && (!strcmp(var_nm,"lat") || !strcmp(var_nm,"lon") || !strcmp(var_nm,"lev") || !strcmp(var_nm,"longxy") || !strcmp(var_nm,"latixy") )) var_is_fix=True;
+  if(is_sz_rnk_prv_rth_opr && (!strcmp(var_nm,"lat") || !strcmp(var_nm,"lon") || !strcmp(var_nm,"lev") || !strcmp(var_nm,"longxy") || !strcmp(var_nm,"latixy") || !strcmp(var_nm,"latitude") || !strcmp(var_nm,"longitude") )) var_is_fix=True;
 
   return var_is_fix;
 
diff --git a/src/nco/nco_var_lst.h b/src/nco/nco_var_lst.h
index 22d86ea..c1e6e54 100644
--- a/src/nco/nco_var_lst.h
+++ b/src/nco/nco_var_lst.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Variable list utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_var_rth.c b/src/nco/nco_var_rth.c
index 9be0db3..775824b 100644
--- a/src/nco/nco_var_rth.c
+++ b/src/nco/nco_var_rth.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Variable arithmetic */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_var_rth.h b/src/nco/nco_var_rth.h
index 79b0f7d..abf4dfb 100644
--- a/src/nco/nco_var_rth.h
+++ b/src/nco/nco_var_rth.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Variable arithmetic */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_var_scv.c b/src/nco/nco_var_scv.c
index e996253..5a7e166 100644
--- a/src/nco/nco_var_scv.c
+++ b/src/nco/nco_var_scv.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Arithmetic between variables and scalar values */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_var_scv.h b/src/nco/nco_var_scv.h
index e4c8e52..b26e592 100644
--- a/src/nco/nco_var_scv.h
+++ b/src/nco/nco_var_scv.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Arithmetic between variables and scalar values */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_var_utl.c b/src/nco/nco_var_utl.c
index cdf8cfe..967d305 100644
--- a/src/nco/nco_var_utl.c
+++ b/src/nco/nco_var_utl.c
@@ -2,7 +2,7 @@
 
 /* Purpose: Variable utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/nco_var_utl.h b/src/nco/nco_var_utl.h
index 53314ca..493ef2d 100644
--- a/src/nco/nco_var_utl.h
+++ b/src/nco/nco_var_utl.h
@@ -2,7 +2,7 @@
 
 /* Purpose: Variable utilities */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco/ncpdq.c b/src/nco/ncpdq.c
index 1abb489..0e77a58 100644
--- a/src/nco/ncpdq.c
+++ b/src/nco/ncpdq.c
@@ -4,7 +4,7 @@
 
 /* Purpose: Pack, re-dimension, query single netCDF file and output to a single file */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/ncra.c b/src/nco/ncra.c
index 148d5e3..118a26e 100644
--- a/src/nco/ncra.c
+++ b/src/nco/ncra.c
@@ -9,7 +9,7 @@
    specfied variables of multiple input netCDF files and output them 
    to a single file. */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
@@ -937,7 +937,7 @@ main(int argc,char **argv)
 
       /* Input file must have either (but not both) time bounds or climatology bounds */
       if(cb->tm_bnd_in && cb->clm_bnd_in){
-	(void)fprintf(stderr,"%s: WARNING Climatology bounds invoked on time coordinate with both time bounds attribute \"%s\" and climatology bounds attribute \"%s\". Results would be ambiguous. Turning-off climatology bounds mode.\n",nco_prg_nm_get(),bnd_sng,clm_sng);
+	(void)fprintf(stderr,"%s: WARNING Climatology bounds invoked on time coordinate with both time bounds attribute \"%s\" (value = \"%s\") and climatology bounds attribute \"%s\" (value = \"%s\"). Results would be ambiguous. Turning-off climatology bounds mode.\n",nco_prg_nm_get(),bnd_sng,cb->tm_bnd_nm,clm_sng,cb->clm_bnd_nm);
 	flg_cb=False;
 	goto skp_cb;
       } /* !(cb->tm_bnd_in && cb->clm_bnd_in) */
@@ -957,7 +957,7 @@ main(int argc,char **argv)
     if(flg_c2b && cb->clm_bnd_in) cb->clm2bnd=True;
     if(cb->clm_bnd_in) cb->clm2clm=True;
     if(cb->tm_bnd_in) cb->bnd2clm=True;
-    
+
     if(cb->tm_bnd_in){
       rcd=nco_inq_varid_flg(in_id,cb->tm_bnd_nm,&cb->tm_bnd_id_in); 
       if(cb->tm_bnd_id_in == NC_MIN_INT){
diff --git a/src/nco/ncrename.c b/src/nco/ncrename.c
index 139674d..749c800 100644
--- a/src/nco/ncrename.c
+++ b/src/nco/ncrename.c
@@ -4,7 +4,7 @@
 
 /* Purpose: Rename dimensions, variables, and attributes of a netCDF file */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco/ncwa.c b/src/nco/ncwa.c
index 8dbea15..7192f27 100644
--- a/src/nco/ncwa.c
+++ b/src/nco/ncwa.c
@@ -5,7 +5,7 @@
 /* Purpose: Compute averages of specified hyperslabs of specfied variables
    in a single input netCDF file and output them to a single file. */
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3.
diff --git a/src/nco_c++/Makefile.old b/src/nco_c++/Makefile.old
index 8e2dd82..76fa3a2 100644
--- a/src/nco_c++/Makefile.old
+++ b/src/nco_c++/Makefile.old
@@ -3,7 +3,7 @@
 # Purpose: Makefile for libnco_c++ module nco_c++
 # Requires GNU Make---AT&T Make chokes on GNU syntax
 
-# Copyright (C) 1994--2017 Charlie Zender
+# Copyright (C) 1994--2018 Charlie Zender
 # License: GNU General Public License (GPL) Version 3
 # See http://www.gnu.org/copyleft/gpl.html for full license text
 
diff --git a/src/nco_c++/libnco_c++.hh b/src/nco_c++/libnco_c++.hh
index cb96838..4ad66b4 100644
--- a/src/nco_c++/libnco_c++.hh
+++ b/src/nco_c++/libnco_c++.hh
@@ -2,7 +2,7 @@
 
 // Purpose: Prototypes, typedefs, and global variables for libnco_c++
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_att.cc b/src/nco_c++/nco_att.cc
index 733fa8e..e2171c0 100644
--- a/src/nco_c++/nco_att.cc
+++ b/src/nco_c++/nco_att.cc
@@ -2,7 +2,7 @@
 
 // Implementation (declaration) of C++ interface to netCDF attribute routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_att.hh b/src/nco_c++/nco_att.hh
index c081523..d8e6b62 100644
--- a/src/nco_c++/nco_att.hh
+++ b/src/nco_c++/nco_att.hh
@@ -2,7 +2,7 @@
 
 // Purpose: Description (definition) of C++ interface to netCDF attribute routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_dmn.cc b/src/nco_c++/nco_dmn.cc
index a885c91..2177840 100644
--- a/src/nco_c++/nco_dmn.cc
+++ b/src/nco_c++/nco_dmn.cc
@@ -2,7 +2,7 @@
 
 // Implementation (declaration) of C++ interface to netCDF dimension routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_dmn.hh b/src/nco_c++/nco_dmn.hh
index e64c42a..9c0f3c5 100644
--- a/src/nco_c++/nco_dmn.hh
+++ b/src/nco_c++/nco_dmn.hh
@@ -2,7 +2,7 @@
 
 // Purpose: Description (definition) of C++ interface to netCDF dimension routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_fl.cc b/src/nco_c++/nco_fl.cc
index fa6ca45..9982468 100644
--- a/src/nco_c++/nco_fl.cc
+++ b/src/nco_c++/nco_fl.cc
@@ -2,7 +2,7 @@
 
 // Purpose: Implementation (declaration) of C++ interface to netCDF file-level routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_fl.hh b/src/nco_c++/nco_fl.hh
index eff6733..9ef3e29 100644
--- a/src/nco_c++/nco_fl.hh
+++ b/src/nco_c++/nco_fl.hh
@@ -2,7 +2,7 @@
 
 // Purpose: Description (definition) of C++ interface to netCDF file-level routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_hgh.cc b/src/nco_c++/nco_hgh.cc
index 879706d..59def26 100644
--- a/src/nco_c++/nco_hgh.cc
+++ b/src/nco_c++/nco_hgh.cc
@@ -2,7 +2,7 @@
 
 // Implementation (declaration) of C++ interface to high-level NCO utilities
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_hgh.hh b/src/nco_c++/nco_hgh.hh
index fdfe7d2..3590e96 100644
--- a/src/nco_c++/nco_hgh.hh
+++ b/src/nco_c++/nco_hgh.hh
@@ -2,7 +2,7 @@
 
 // Purpose: Description (definition) of high-level NCO routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_utl.cc b/src/nco_c++/nco_utl.cc
index c529cef..12eadab 100644
--- a/src/nco_c++/nco_utl.cc
+++ b/src/nco_c++/nco_utl.cc
@@ -2,7 +2,7 @@
 
 // Implementation (declaration) of C++ interface utilities for netCDF routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_utl.hh b/src/nco_c++/nco_utl.hh
index 3d8d5d3..680b14e 100644
--- a/src/nco_c++/nco_utl.hh
+++ b/src/nco_c++/nco_utl.hh
@@ -2,7 +2,7 @@
 
 // Purpose: Description (definition) of C++ interface utilities for netCDF routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_var.cc b/src/nco_c++/nco_var.cc
index e6d12e4..f209c31 100644
--- a/src/nco_c++/nco_var.cc
+++ b/src/nco_c++/nco_var.cc
@@ -2,7 +2,7 @@
 
 // Purpose: Implementation (declaration) of C++ interface to netCDF variable routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */
diff --git a/src/nco_c++/nco_var.hh b/src/nco_c++/nco_var.hh
index 37d63bd..8063be6 100644
--- a/src/nco_c++/nco_var.hh
+++ b/src/nco_c++/nco_var.hh
@@ -2,7 +2,7 @@
 
 // Purpose: Description (definition) of C++ interface to netCDF variable routines
 
-/* Copyright (C) 1995--2017 Charlie Zender
+/* Copyright (C) 1995--2018 Charlie Zender
    This file is part of NCO, the netCDF Operators. NCO is free software.
    You may redistribute and/or modify NCO under the terms of the 
    GNU General Public License (GPL) Version 3 with exceptions described in the LICENSE file */

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/nco.git



More information about the Pkg-grass-devel mailing list