[Git][debian-gis-team/nco][upstream] New upstream version 5.1.3

Bas Couwenberg (@sebastic) gitlab at salsa.debian.org
Tue Nov 29 04:36:38 GMT 2022



Bas Couwenberg pushed to branch upstream at Debian GIS Project / nco


Commits:
59bdc55c by Bas Couwenberg at 2022-11-29T05:22:33+01:00
New upstream version 5.1.3
- - - - -


15 changed files:

- bld/nco.spec
- bld/nco_dst.pl
- configure
- configure.ac
- configure.eg
- debian/changelog
- doc/ANNOUNCE
- doc/ChangeLog
- doc/VERSION
- doc/debian.txt
- doc/index.shtml
- doc/nco.texi
- src/nco/nco.h
- src/nco/nco_rgr.c
- src/nco/nco_scm.c


Changes:

=====================================
bld/nco.spec
=====================================
@@ -2,17 +2,17 @@
 # http://cvs.fedoraproject.org/viewvc/devel/nco/nco.spec?view=co
 
 Name:           nco
-Version:        5.1.2
+Version:        5.1.3
 Release:        1%{?dist}
 Summary:        Programs that manipulate netCDF files
 Group:          Applications/Engineering
 License:        BSD
 URL:            http://nco.sf.net/
 
-# Obtain NCO version 5.1.2-1 tar.gz from Sourceforge using CVS:
+# Obtain NCO version 5.1.3-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-5.1.2-1 -d nco-%{version} nco
-# tar czf nco-%{version}.tar.gz --exclude='nco-5.1.2/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-5.1.3-1 -d nco-%{version} nco
+# tar czf nco-%{version}.tar.gz --exclude='nco-5.1.3/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
+* Mon Nov 28 2022 Charlie Zender <zender at uci.edu> - 5.1.3-1
+- new upstream 5.1.3
+
 * Fri Nov 18 2022 Charlie Zender <zender at uci.edu> - 5.1.2-1
 - new upstream 5.1.2
 


=====================================
bld/nco_dst.pl
=====================================
@@ -5,20 +5,20 @@
 
 # Usage:
 # Export tagged, public versions
-# /usr/bin/scp ${DATA}/nco-5.1.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-5.1.2 # Build, do not release on SF
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --sf nco-5.1.2 # Build, release on SF
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --nst_all nco-5.1.2 # Install, do not build
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --nst_all nco-5.1.2 # Build and install
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_cnt nco-5.1.2
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_prs nco-5.1.2
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cgd_cnt nco-5.1.2
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cray_prs nco-5.1.2
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --bbl_cnt nco-5.1.2
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --blk_cnt nco-5.1.2
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --dat_cnt nco-5.1.2
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --ute_prs nco-5.1.2
+# /usr/bin/scp ${DATA}/nco-5.1.3.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-5.1.3 # Build, do not release on SF
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --sf nco-5.1.3 # Build, release on SF
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --nst_all nco-5.1.3 # Install, do not build
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --nst_all nco-5.1.3 # Build and install
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_cnt nco-5.1.3
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_prs nco-5.1.3
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cgd_cnt nco-5.1.3
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cray_prs nco-5.1.3
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --bbl_cnt nco-5.1.3
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --blk_cnt nco-5.1.3
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --dat_cnt nco-5.1.3
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --ute_prs nco-5.1.3
 
 # 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-5.1.2/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-5.1.3/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


=====================================
configure
=====================================
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for NCO netCDF Operators 5.1.2.
+# Generated by GNU Autoconf 2.71 for NCO netCDF Operators 5.1.3-alpha02.
 #
 # Report bugs to <nco-bugs at lists.sourceforge.net>.
 #
@@ -623,8 +623,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='NCO netCDF Operators'
 PACKAGE_TARNAME='nco'
-PACKAGE_VERSION='5.1.2'
-PACKAGE_STRING='NCO netCDF Operators 5.1.2'
+PACKAGE_VERSION='5.1.3-alpha02'
+PACKAGE_STRING='NCO netCDF Operators 5.1.3-alpha02'
 PACKAGE_BUGREPORT='nco-bugs at lists.sourceforge.net'
 PACKAGE_URL=''
 
@@ -1431,7 +1431,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 5.1.2 to adapt to many kinds of systems.
+\`configure' configures NCO netCDF Operators 5.1.3-alpha02 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1503,7 +1503,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of NCO netCDF Operators 5.1.2:";;
+     short | recursive ) echo "Configuration of NCO netCDF Operators 5.1.3-alpha02:";;
    esac
   cat <<\_ACEOF
 
@@ -1677,7 +1677,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-NCO netCDF Operators configure 5.1.2
+NCO netCDF Operators configure 5.1.3-alpha02
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2433,7 +2433,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 5.1.2, which was
+It was created by NCO netCDF Operators $as_me 5.1.3-alpha02, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -4320,7 +4320,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='nco'
- VERSION='5.1.2'
+ VERSION='5.1.3-alpha02'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -22753,7 +22753,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 5.1.2, which was
+This file was extended by NCO netCDF Operators $as_me 5.1.3-alpha02, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -22821,7 +22821,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-NCO netCDF Operators config.status 5.1.2
+NCO netCDF Operators config.status 5.1.3-alpha02
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 


=====================================
configure.ac
=====================================
@@ -55,7 +55,7 @@
 # 20170808: Choose between traditional version and Git-based version
 # If Git, consider that Linux dynamic libraries will have full messy name, MacOS will not
 # https://stackoverflow.com/questions/43526939/how-to-insert-git-based-version-in-autoconf-managed-project
-AC_INIT([NCO netCDF Operators],[5.1.2],[nco-bugs at lists.sourceforge.net],[nco])
+AC_INIT([NCO netCDF Operators],[5.1.3],[nco-bugs at lists.sourceforge.net],[nco])
 
 # Print GNU copyright in configure script
 AC_COPYRIGHT


=====================================
configure.eg
=====================================
@@ -310,7 +310,7 @@ make install
 # Sysadmin upgrade request: 
 # Latest sysadmin-compiled module usage: 
 # Personal recipe last modified: 20210817 (search e3sm-u_latest)
-# Personal recipe last used successfully: 20221028
+# Personal recipe last used successfully: 20221118
 # NB: aims4 and acme1 only accept connections from whitelisted domains (e.g., uci.edu)
 cd ~/nco;/bin/rm -f *.foo;make distclean
 export PATH=${MY_BIN_DIR}:'/usr/local/e3sm_unified/envs/base/envs/e3sm_unified_latest/bin':${PATH}
@@ -330,7 +330,7 @@ scp nco.configure.foo nco.config.log.foo nco.libtool.foo nco.make.foo dust.ess.u
 # Latest ticket to build NCO: 381695 on 20180413
 # Latest sysadmin-compiled module usage: module load netcdf-c/4.7.4 nco/4.9.3 # 20201208
 # Personal recipe last modified: 20221019 (link -lantlr from MY_LIB_DIR not HOME/lib)
-# Personal recipe last used successfully: 20221028
+# Personal recipe last used successfully: 20221118
 export LINUX_CC='gcc -std=c99 -pedantic -D_DEFAULT_SOURCE'
 export LINUX_CXX='g++ -std=c++11'
 export LINUX_FC='gfortran'
@@ -364,7 +364,7 @@ scp nco.configure.foo nco.config.log.foo nco.libtool.foo nco.make.foo dust.ess.u
 # Latest ticket to build NCO: 216373 on 20180413
 # Latest sysadmin-compiled module usage: module load netcdf/4.6.1 module load nco/4.7.4 # 20180417
 # Personal recipe last modified: 20190813
-# Personal recipe last used successfully: 20221028
+# Personal recipe last used successfully: 20221118
 # Personal recipe last failed: 20190812 (antlr needed GCC 9.1.0 recompile)
 # Cheyenne GNU:
 module purge
@@ -387,7 +387,7 @@ cd ~/nco/bld;make ANTLR_ROOT=${HOME} GSL_ROOT='/glade/u/apps/ch/opt/gsl/2.4/gnu/
 # Latest ticket to build NCO: AREQ0215917 on 20180413
 # Latest sysadmin-compiled module usage: module load netcdf-c/4.7.4-a4uk6zy # gcc netCDF 4.7.4
 # Personal recipe last modified: 20221004 (use Anaconda)
-# Personal recipe last used successfully: 20221028
+# Personal recipe last used successfully: 20221118
 cd ~/nco;/bin/rm -f *.foo;make distclean
 module load gcc/9.2.0-ugetvbp
 module load openmpi/4.0.4-hpcx-hghvhj5
@@ -406,7 +406,7 @@ scp nco.configure.foo nco.config.log.foo nco.libtool.foo nco.make.foo dust.ess.u
 
 # 20210104 Compy with Intel compilers
 # Personal recipe last modified: 20220919
-# Personal recipe last used successfully: 20221028
+# Personal recipe last used successfully: 20221118
 source /share/apps/intel/2020/compilers_and_libraries_2020.0.166/linux/bin/compilervars.sh intel64 # Compy
 module purge
 module load intel/20.0.0
@@ -465,7 +465,7 @@ scp nco.configure.foo nco.config.log.foo nco.libtool.foo nco.make.foo dust.ess.u
 # Latest ticket to build NCO: INC0118469 on 20180413
 # Latest sysadmin-compiled module usage: module load nco/5.0.1 # 20220701
 # Personal recipe last modified: 20220701
-# Personal recipe last used successfully: 20221028
+# Personal recipe last used successfully: 20221118
 module purge # After login, purge before load or risk this: "error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory"
 module load PrgEnv-intel
 module load cray-netcdf
@@ -556,7 +556,7 @@ scp nco.configure.foo nco.config.log.foo nco.libtool.foo nco.make.foo dust.ess.u
 # Latest ticket to build NCO: INC0118469 on 20180413
 # Latest sysadmin-compiled module usage: 
 # Personal recipe last modified: 20220630
-# Personal recipe last used successfully: 20221028
+# Personal recipe last used successfully: 20221118
 module load PrgEnv-gnu
 module load gcc/11.2.0
 module load cray-hdf5/1.12.1.1


=====================================
debian/changelog
=====================================
@@ -1,3 +1,9 @@
+nco (5.1.3-1) unstable; urgency=low
+
+  * new upstream version Mauna Loa: ncremap automagical hrz_mrv determination/usage
+
+ -- Charlie Zender <zender at uci.edu>  Mon, 28 Nov 2022 12:25:59 -0700
+
 nco (5.1.2-1) unstable; urgency=low
 
   * new upstream version Guerilla Poetry: ncclimo/ncremap: -P eamxx, --npo, hrd_pth; ncremap ps_nm_in, vrt_in, vrt_out


=====================================
doc/ANNOUNCE
=====================================
@@ -1,17 +1,19 @@
 $Header$ -*-text-*-
 
-netCDF Operators NCO version 5.1.2 accede to the Silicon Throne
+netCDF Operators NCO version 5.1.3 erupt
 
 http://nco.sf.net (Homepage, Mailing lists, Help)
-http://github.com/nco (Source Code, Issues, Releases, Developers)
+http://github.com/nc/ncoo (Source Code, Issues, Releases)
 
 What's new?
-Version 5.1.2 improves support for horizontal regridding, vertical
-interpolation, or both, on ultra high-resolution model output.
-Users of such functionality may benefit from upgrading, otherwise
-this release can be skipped.
-
-Work on NCO 5.1.3 has commenced and aims to add support for Zarr S3
+Version 5.1.3 improves the speed of vertical interpolation for
+fields whose most-rapidly-varying dimension is the vertical (not
+horizontal). This dramatically improves interpolation speed for
+EAMxx/SCREAM files. This release also fixes and issue in using
+ncremap to invoke the interpolation. Other than that, this release can
+be skipped. 
+
+Work on NCO 5.1.4 has commenced and aims to add support for Zarr S3 
 stores and to polish support for new codecs.
 
 Enjoy,
@@ -19,88 +21,23 @@ Charlie
 
 NEW FEATURES (full details always in ChangeLog):
 
-A. ncremap supports new options --vrt_in=vrt.nc and --ps_nm=ps_nm.
-The argument to --vrt_in is a vertical coordinate file that contains
-the pure or hybrid pressure information for the input data to be
-vertically interpolated. Previously, this information was required
-to be present in the input data file. However, SCREAM/EAMxx and
-other ultra-high resolution models may choose to output the grid
-information in separate files from the geophysical fields. This
-can save considerable space, especially for hybrid sigma-pressure
-coordinates with time-varying surface pressure. To complement the
---vrt_in option, there is now a --vrt_out option to explicitly
-identify the file containing the output vertical grid. The best
-practice is now to use --vrt_out (instead of --vrt or --vrt_fl,
-which still work) to specify the output vertical grid and clearly
-distinguish it from the input vertical grid, if any.
-ncremap --vrt_out=vrt2.nc # Output vertical grid option new name
-ncremap --vrt_in=vrt1.nc --vrt_out=vrt2.nc ... # Specify both grids
-Thanks to Paul Ullrich (UCD) for suggesting these options.
+A. ncremap can now vertically interpolate files/fields whose most
+rapidly varying dimension is the vertical without having to first
+permute the dimensions to be most rapidly varying in the horizontal
+dimension(s). This speeds up vertical interpolation of EAMxx/SCREAM
+fields dramatically (a factor of about three).
+ncremap --vrt_out=vrt.nc in.nc out.nc
+ncremap -P eamxx --vrt_out=vrt.nc in.nc out.nc
 http://nco.sf.net/nco.html#ncremap
-http://nco.sf.net/nco.html#vrt_in
 http://nco.sf.net/nco.html#vrt_out
 
-B. Previously the vertical interpolation feature required that the
-surface pressure field for hybrid coordinates be named PS.
-Now the name of the surface pressure field can be changed using the
-convenient ps_nm option. Moreover, if the argument of --ps_nm 
-includes a filepath separator (slash or backslash), then the
-portion preceding the final separator will be treated as a filename 
-path, and the final portion will be treated as the surface pressure
-variable name:
-ncremap --ps_nm=ps ... # Surface pressure is ps not PS 
-ncremap --ps_nm=/path/to/vrt.nc/ps ... # Use ps from vrt.nc
-http://nco.sf.net/nco.html#ncremap
-http://nco.sf.net/nco.html#ps_nm
-
-C. ncclimo and ncremap support a new procedure type option, -P eamxx.
-This option automatically generates ncremap flags useful for E3SM
-EAMxx datasets. In addition to their typically ginormous size, these
-datasets have different dimension and variable names than EAM/CAM.
-Current -P eamxx causes ncremap to do two actions automatically:
-(1) Permute the horizontal dimensions to be most rapidly varying by 
-generating the option --pdq_opt=ilev,lev,dim2,col prior to horizontal
-regridding. (2) Search for surface pressure under the name ps instead
-of PS prior to vertical interpolation of hybrid-pressure grids.
-ncremap --pdq_opt=ilev,lev,dim2,col # Manual dimension permutation
-ncremap --ps_nm=ps # Manual surface pressure renaming from PS to ps
-ncremap -P eamxx # Both options automagically
-Thanks to Paul Ullrich (UCD) for suggesting these options.
-http://nco.sf.net/nco.html#ncremap
-http://nco.sf.net/nco.html#prc_typ
-
-D. ncremap has changed the default behavoir of outputting the
-staggered grid to finite volume (FV) destination grids from opt-out
-to opt-in. This means that it is no longer necessary to specify
---no_stg_grd when regridding. Instead, it is necessary to specify
---stg_grd when the staggered grid (including variables slat and slon) 
-is desired as additional information in the regridded file. 
-ncremap --no_stg_grd ... # Old method of opting out
-ncremap ...              # New default behavior
-ncremap --stg_grd ...    # Recovers old default behavior
-http://nco.sf.net/nco.html#stg_grd
-
-E. ncremap vertical interpolation routines now recognize variables
-with names T_mid and VerticalLayerMidpoint as containing temperature
-and geopotential height, respectively. These variable names are used
-in SCREAM/EAMxx. The default extrapolation for these variables now
-behaves the same as T and Z3 for EAM/CAM datasets.
-http://nco.sf.net/nco.html#vrt_ntp
-http://nco.sf.net/nco.html#vrt_xtr
-
-F. ncz2psx now has a man page.
-Full documentation for ncz2psx is expected to become available
-once NCO fully supports the Amazon S3 scheme for NCZarr in 2023.
-http://nco.sf.net/nco.html#ncz2psx
-
 BUG FIXES:
    
-A. Some operators in NCO 5.1.1 would segfault instead of printing
-usage information when called without any arguments. 5.1.2 fixes this.
-
-B. Previous versions of ncks accidentally printed the ncgen command
-to generate binary from CDL files assuming the input file was
-NC_FORMAT_64BIT_OFFSET instead of its actual type. 5.1.2 fixes this.
+A. ncremap in version 5.1.2 (but not 5.1.1 or earlier) by default
+does the wrong thing when trying to vertically interpolate raw
+EAMxx/SCREAM files. The workaround is to manually permute the
+data vary most rapidly in the  horizontal dimension. The fix is to
+upgrade.
 
 Full release statement at http://nco.sf.net/ANNOUNCE
     


=====================================
doc/ChangeLog
=====================================
@@ -1,3 +1,32 @@
+2022-11-28  Charlie Zender  <zender at uci.edu>
+
+	* NCO 5.1.3 release procedure:
+	cd ~/nco;git commit -a -m 'Version 5.1.3: Mauna Loa';git push
+	git tag -a 5.1.3 -m 'ncremap automagical hrz_mrv determination/usage';git push --tags
+
+	* NCO 5.1.3-alpha02 release procedure:
+	cd ~/nco;git commit -a -m 'Version 5.1.3-alpha02: Thai Massage';git push
+	git tag -a 5.1.3-alpha02 -m 'ncremap automagical hrz_mrv determination/usage';git push --tags
+
+2022-11-25  Charlie Zender  <zender at uci.edu>
+
+	* Realize that 20221108 change in 5.1.2 broke nco_ntp_vrt() for vrt_mrv data like eamxx
+	because datasets were no longer permuted to hrz_mrv that nco_ntp_vrt() assumed
+
+	* nco_ntp_vrt() use flg_hrz_mrv, appears to work
+
+	* nco_ntp_vrt() add stubs to automagically determine flg_hrz_mrv/flr_vrt_mrv
+
+	* nco_map_rgr() assign col_nm_in to ncol_p not ncol_d
+
+2022-11-23  Charlie Zender  <zender at uci.edu>
+
+	* NCO 5.1.3-alpha01 release procedure:
+	cd ~/nco;git commit -a -m 'Version 5.1.3-alpha01: Tavern House';git push
+	git tag -a 5.1.3-alpha01 -m 'Functionally identical to 5.1.2';git push --tags
+
+	* Simplify vertical interpolation if input vertical dimension is most-rapidly-varying (--vrt_mrv)
+
 2022-11-18  Charlie Zender  <zender at uci.edu>
 
 	* NCO 5.1.2 release procedure:


=====================================
doc/VERSION
=====================================
@@ -1 +1 @@
-5.1.2
+5.1.3


=====================================
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-5.1.2
-   First we create a clean source distribution of nco and place it in nco-5.1.2
+   For starters, we wish to create .debs of tagged releases, e.g., nco-5.1.3
+   First we create a clean source distribution of nco and place it in nco-5.1.3
    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-5.1.2
-/bin/rm nco.tar.gz;tar cvzf nco-5.1.2.tar.gz ./nco-5.1.2/*
-cd ~/nco/nco-5.1.2
-dh_make -e zender at uci.edu -f ../nco-5.1.2.tar.gz
+cd ~/nco;tar xvzf nco.tar.gz;mv nco nco-5.1.3
+/bin/rm nco.tar.gz;tar cvzf nco-5.1.3.tar.gz ./nco-5.1.3/*
+cd ~/nco/nco-5.1.3
+dh_make -e zender at uci.edu -f ../nco-5.1.3.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-5.1.2.tar.gz
    from previous build
 
    cd ~/nco;/bin/rm *.gz
-   cd ~/nco/nco-5.1.2
+   cd ~/nco/nco-5.1.3
    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 5.1.2 with X.Y.Z+1
+# tags-query replace 5.1.3 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 5.1.2-1 # Update changelog (-b forces this version number)
+   cd ~/nco/debian;dch -b --force-distribution --distribution=unstable -v 5.1.3-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-5.1.2
+   ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln nco-5.1.3
 # Upload tarball to SF https://sourceforge.net/projects/nco/files 
-   cd;scp dust.ess.uci.edu:/var/www/html/nco/src/nco-5.1.2.tar.gz .
+   cd;scp dust.ess.uci.edu:/var/www/html/nco/src/nco-5.1.3.tar.gz .
 
 7. Ubuntu PPA
 https://help.launchpad.net/Packaging/PPA
-dput NCO nco_5.1.2-2~ppa1_source.changes
+dput NCO nco_5.1.3-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_5.1.2-1.dpkg-buildpackage.txt
-http://dust.ess.uci.edu/nco/src/nco_5.1.2-1.dsc
-http://dust.ess.uci.edu/nco/src/nco_5.1.2-1_i386.changes
-http://dust.ess.uci.edu/nco/src/nco_5.1.2-1_i386.deb
-http://dust.ess.uci.edu/nco/src/nco_5.1.2.orig.tar.gz
+http://dust.ess.uci.edu/nco/src/nco_5.1.3-1.dpkg-buildpackage.txt
+http://dust.ess.uci.edu/nco/src/nco_5.1.3-1.dsc
+http://dust.ess.uci.edu/nco/src/nco_5.1.3-1_i386.changes
+http://dust.ess.uci.edu/nco/src/nco_5.1.3-1_i386.deb
+http://dust.ess.uci.edu/nco/src/nco_5.1.3.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-5.1.2 ${DATA}/nco_5.1.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-5.1.2-1 -d nco-5.1.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-5.1.2 nco # Export most recent
-tar cvzf ./nco_5.1.2.orig.tar.gz --exclude='nco-5.1.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.1.2 
-/bin/rm -rf ${DATA}/nco-5.1.2 # Remove cvs-exported directory
-tar xvzf ./nco_5.1.2.orig.tar.gz # Untar to get directory without excluded files
-mkdir -p ${DATA}/nco-5.1.2/debian/source;cd ~/nco/debian;/bin/cp changelog compat control convert copyright doc-base files info rules ${DATA}/nco-5.1.2/debian;cd ~/nco/debian/source;/bin/cp format ${DATA}/nco-5.1.2/debian/source # Replace debian directory with _CURRENT_ (main trunk) settings
+sudo /bin/rm -rf ${DATA}/nco-5.1.3 ${DATA}/nco_5.1.3* ${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-5.1.3-1 -d nco-5.1.3 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-5.1.3 nco # Export most recent
+tar cvzf ./nco_5.1.3.orig.tar.gz --exclude='nco-5.1.3/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.1.3 
+/bin/rm -rf ${DATA}/nco-5.1.3 # Remove cvs-exported directory
+tar xvzf ./nco_5.1.3.orig.tar.gz # Untar to get directory without excluded files
+mkdir -p ${DATA}/nco-5.1.3/debian/source;cd ~/nco/debian;/bin/cp changelog compat control convert copyright doc-base files info rules ${DATA}/nco-5.1.3/debian;cd ~/nco/debian/source;/bin/cp format ${DATA}/nco-5.1.3/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-5.1.2;dpkg-buildpackage -rsudo -uc -us > ~/foo.nco 2>&1 # -uc -us: Do not sign changes or source files
-#cd ${DATA}/nco-5.1.2;dpkg-buildpackage -rsudo -sa > ~/foo.nco 2>&1 # -sa: Include _orig.tar.gz in .changes 
-cd ${DATA}/nco-5.1.2;dpkg-buildpackage -rsudo > ~/foo.nco 2>&1
+#cd ${DATA}/nco-5.1.3;dpkg-buildpackage -rsudo -uc -us > ~/foo.nco 2>&1 # -uc -us: Do not sign changes or source files
+#cd ${DATA}/nco-5.1.3;dpkg-buildpackage -rsudo -sa > ~/foo.nco 2>&1 # -sa: Include _orig.tar.gz in .changes 
+cd ${DATA}/nco-5.1.3;dpkg-buildpackage -rsudo > ~/foo.nco 2>&1
 sudo dpkg --remove nco
-sudo dpkg --install ${DATA}/nco_5.1.2-1_*.deb
+sudo dpkg --install ${DATA}/nco_5.1.3-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_5.1.2-1_*.deb
-ls -l ${DATA}/nco_5.1.2*
+lintian ${DATA}/nco_5.1.3-1_*.deb
+ls -l ${DATA}/nco_5.1.3*
 m ~/foo.nco
 # Upload Ubuntu (rather than Debian) packages to websites
-scp ${DATA}/nco_5.1.2* dust.ess.uci.edu:/var/www/html/nco/src
-scp ${DATA}/nco_5.1.2* zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
+scp ${DATA}/nco_5.1.3* dust.ess.uci.edu:/var/www/html/nco/src
+scp ${DATA}/nco_5.1.3* 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_5.1.2-1_*.changes
+# cd ${DATA};dupload -t mentors nco_5.1.3-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_5.1.2* # Cleanup prior build
+sudo /bin/rm /var/cache/pbuilder/result/nco_5.1.3* # 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_5.1.2-1.dsc > ~/foo.nco.pbuilder 2>&1
-cd /var/cache/pbuilder/result;debsign -k6F635D10 nco_5.1.2-1_*.changes
-lintian /var/cache/pbuilder/result/nco_5.1.2-1_*.deb
+cd ${DATA};DIST=sid sudo pbuilder build nco_5.1.3-1.dsc > ~/foo.nco.pbuilder 2>&1
+cd /var/cache/pbuilder/result;debsign -k6F635D10 nco_5.1.3-1_*.changes
+lintian /var/cache/pbuilder/result/nco_5.1.3-1_*.deb
 sudo dpkg --remove nco
-sudo dpkg --install /var/cache/pbuilder/result/nco_5.1.2-1_*.deb
+sudo dpkg --install /var/cache/pbuilder/result/nco_5.1.3-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_5.1.2-1_*.changes
+cd /var/cache/pbuilder/result;dupload -t mentors nco_5.1.3-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-5.1.2 ${DATA}/nco-5.1.2* # Cleanup last build
+/bin/rm -rf ${DATA}/nco-5.1.3 ${DATA}/nco-5.1.3* # Cleanup last build
 ${sudo_sng} /bin/rm -r -f \
-${rpm_root}/BUILD/nco-5.1.2 \
-${rpm_root}/RPMS/i386/nco-5.1.2-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-5.1.2-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-5.1.2-?.i386.rpm \
-${rpm_root}/SOURCES/nco-5.1.2.tar.gz \
-${rpm_root}/SPECS/nco-5.1.2.spec \
-${rpm_root}/SRPMS/nco-5.1.2-?.src.rpm
-cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.1.2-1 -d nco-5.1.2 nco # Export based on tag
-${sudo_sng} ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/SPECS/nco-5.1.2.spec
-tar cvzf ./nco-5.1.2.tar.gz --exclude='nco-5.1.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.1.2 
-${sudo_sng} /bin/cp ${DATA}/nco-5.1.2.tar.gz ${rpm_root}/SOURCES
+${rpm_root}/BUILD/nco-5.1.3 \
+${rpm_root}/RPMS/i386/nco-5.1.3-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-5.1.3-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-5.1.3-?.i386.rpm \
+${rpm_root}/SOURCES/nco-5.1.3.tar.gz \
+${rpm_root}/SPECS/nco-5.1.3.spec \
+${rpm_root}/SRPMS/nco-5.1.3-?.src.rpm
+cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.1.3-1 -d nco-5.1.3 nco # Export based on tag
+${sudo_sng} ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/SPECS/nco-5.1.3.spec
+tar cvzf ./nco-5.1.3.tar.gz --exclude='nco-5.1.3/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.1.3 
+${sudo_sng} /bin/cp ${DATA}/nco-5.1.3.tar.gz ${rpm_root}/SOURCES
 cd ${rpm_root}/SPECS
-${sudo_sng} rpmbuild -ba --sign nco-5.1.2.spec > ~/foo.nco 2>&1
+${sudo_sng} rpmbuild -ba --sign nco-5.1.3.spec > ~/foo.nco 2>&1
 scp \
-${rpm_root}/RPMS/i386/nco-5.1.2-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-5.1.2-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-5.1.2-?.i386.rpm \
-${rpm_root}/SRPMS/nco-5.1.2-?.src.rpm \
+${rpm_root}/RPMS/i386/nco-5.1.3-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-5.1.3-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-5.1.3-?.i386.rpm \
+${rpm_root}/SRPMS/nco-5.1.3-?.src.rpm \
 dust.ess.uci.edu:/var/www/html/nco/src
 scp \
-${rpm_root}/RPMS/i386/nco-5.1.2-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-5.1.2-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-5.1.2-?.i386.rpm \
-${rpm_root}/SRPMS/nco-5.1.2-?.src.rpm \
+${rpm_root}/RPMS/i386/nco-5.1.3-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-5.1.3-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-5.1.3-?.i386.rpm \
+${rpm_root}/SRPMS/nco-5.1.3-?.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-5.1.2 ${DATA}/nco-5.1.2* # Cleanup last build
+/bin/rm -rf ${DATA}/nco-5.1.3 ${DATA}/nco-5.1.3* # Cleanup last build
 /bin/rm -r -f \
-${rpm_root}/nco-5.1.2-?.src.rpm \
-${rpm_root}/nco-5.1.2.spec \
-${rpm_root}/nco-5.1.2.tar.gz \
-${rpm_root}/*/nco-5.1.2-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-5.1.2-?.*.rpm \
-${rpm_root}/*/nco-devel-5.1.2-?.*.rpm
-# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.1.2-1 -d nco-5.1.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-5.1.2 nco # Export most recent and build as 5.1.2-1
-tar cvzf ./nco-5.1.2.tar.gz --exclude='nco-5.1.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.1.2 
-/bin/cp ${DATA}/nco-5.1.2.tar.gz ${rpm_root}
+${rpm_root}/nco-5.1.3-?.src.rpm \
+${rpm_root}/nco-5.1.3.spec \
+${rpm_root}/nco-5.1.3.tar.gz \
+${rpm_root}/*/nco-5.1.3-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-5.1.3-?.*.rpm \
+${rpm_root}/*/nco-devel-5.1.3-?.*.rpm
+# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.1.3-1 -d nco-5.1.3 nco # Export based on tag
+cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -D "1 second ago" -dnco-5.1.3 nco # Export most recent and build as 5.1.3-1
+tar cvzf ./nco-5.1.3.tar.gz --exclude='nco-5.1.3/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.1.3 
+/bin/cp ${DATA}/nco-5.1.3.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-5.1.2-?.*.rpm
+rpmlint ${rpm_root}/*/nco-5.1.3-?.*.rpm
 sudo yum remove nco
-sudo yum install ${rpm_root}/*/nco-5.1.2-?.*.rpm
+sudo yum install ${rpm_root}/*/nco-5.1.3-?.*.rpm
 scp \
-${rpm_root}/*/nco-5.1.2-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-5.1.2-?.*.rpm \
-${rpm_root}/*/nco-devel-5.1.2-?.*.rpm \
-${rpm_root}/nco-5.1.2-?.*.src.rpm \
+${rpm_root}/*/nco-5.1.3-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-5.1.3-?.*.rpm \
+${rpm_root}/*/nco-devel-5.1.3-?.*.rpm \
+${rpm_root}/nco-5.1.3-?.*.src.rpm \
 dust.ess.uci.edu:/var/www/html/nco/src
 scp \
-${rpm_root}/*/nco-5.1.2-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-5.1.2-?.*.rpm \
-${rpm_root}/*/nco-devel-5.1.2-?.*.rpm \
-${rpm_root}/nco-5.1.2-?.*.src.rpm \
+${rpm_root}/*/nco-5.1.3-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-5.1.3-?.*.rpm \
+${rpm_root}/*/nco-devel-5.1.3-?.*.rpm \
+${rpm_root}/nco-5.1.3-?.*.src.rpm \
 zender,nco at web.sf.net:/home/project-web/nco/htdocs/src


=====================================
doc/index.shtml
=====================================
@@ -71,7 +71,7 @@ Try to disable Spammers' machines:
 <p><h1 align="center">Bienvenue sur le netCDF Operator (NCO) site</h1>
 
 <p><h2>
-Current stable NCO version is 5.1.2 released <!--#flastmod file="src/nco-5.1.2.tar.gz"-->
+Current stable NCO version is 5.1.3 released <!--#flastmod file="src/nco-5.1.3.tar.gz"-->
 </h2>
 
 <table border=0 width=100%>
@@ -155,7 +155,8 @@ and
 <h2>Recent Releases & Milestones</h2>
 
 <ul>
-<li>2023 Jan ??: 5.1.3 <i>In Progress...</i>
+<li>2024 Nov 28: 5.1.4 <i>In Progress...</i>
+<li>2023 Nov 28: 5.1.3 EAMxx fix
 <li>2023 Nov 18: 5.1.2 EAMxx
 <li>2022 Oct 28: 5.1.1 NCZarr, stdin
 <li>2022 Jul 12: 5.1.0 Compression filters
@@ -603,16 +604,18 @@ 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 5.1.2 http://github.com/nco/nco.git nco-5.1.2</tt></a>.
+<tt>git clone -b 5.1.3 http://github.com/nco/nco.git nco-5.1.3</tt></a>.
 <ul>
-<li><b>NCO 5.1.4</b>: (<i>Future</i>)
+<li><b>NCO 5.1.5</b>: (<i>Future</i>)
 netCDF4 user-defined types support;
 <tt>ncks --xtn</tt> better extensive variable treatment?;
 <tt>ncks --bsa</tt> Byte-swap algoritm;
 <tt>ncremap</tt> small-circle weights;</li>
-<li><b>NCO 5.1.3</b>: (<i>In Progress, features in-progress or complete include</i>)
+<li><b>NCO 5.1.4</b>: (<i>In Progress, features in-progress or complete include</i>)
 <tt>all --cmp_sng</tt> accept human-legible floating-point, unsigned codec parameters</li>
-<li><b>NCO 5.1.2</b>: (<i>Current Stable Release</i>)
+<li><b>NCO 5.1.3</b>: (<i>Current Stable Release</i>)
+<tt>ncremap</tt> column-MRV vertical interpolation</li>
+<li><b>NCO 5.1.2</b>: 
 <tt>ncremap --vrt_in, --vrt_out, --ps_nm</tt>;
 <tt>ncclimo/ncremap -P eamxx</tt></li>
 <li><b>NCO 5.1.1</b>: 
@@ -719,7 +722,7 @@ Or, alternatively, permanently add conda-forge (which teems with goodies besides
 ‘<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-5.1.2</a> Executables Anaconda-compatible. Maintained by Filipe Fernandes.</li>
+<li><a href="https://github.com/conda-forge/nco-feedstock">nco-5.1.3</a> Executables Anaconda-compatible. Maintained by Filipe Fernandes.</li>
 Thanks to Rich Signell, Filipe Fernandes, Pedro Vicente, Xylar Asay-Davis and others for developing and maintaining the NCO package for conda.
 </ul>
 
@@ -728,7 +731,7 @@ Thanks to Rich Signell, Filipe Fernandes, Pedro Vicente, Xylar Asay-Davis and ot
 <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-5.1.2</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-5.1.3</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.
@@ -736,8 +739,8 @@ Thanks to Rich Signell, Filipe Fernandes, Pedro Vicente, Xylar Asay-Davis and ot
 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_5.1.2-1_i386.deb</tt>’):</dt>
-<li><a href="https://launchpad.net/ubuntu/+source/nco/5.1.2-1">nco_5.1.2-1_amd64.deb</a> : Executables AMD64-compatible</li>
+<dt>Debian package for most recent NCO release (install with, e.g., ‘<tt>dpkg --install nco_5.1.3-1_i386.deb</tt>’):</dt>
+<li><a href="https://launchpad.net/ubuntu/+source/nco/5.1.3-1">nco_5.1.3-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. 
@@ -779,12 +782,12 @@ Thanks to Gavin Burris and Kyle Wilcox for documenting build procedures for RHEL
 <h3><a href="http://www.apple.com/macosx/">Mac OS Darwin</a></h3>
 <ul>
 <!-- 
-# MacOS 13.0 (Ventura) systems (firn, sastrugi, spectral):
+# MacOS 13.0.1 (Ventura) systems (firn, sastrugi, spectral):
 /usr/bin/scp ~/nco/doc/index.shtml zender,nco at web.sf.net:/home/project-web/nco/htdocs
-cd ~/bin;tar cvzf ${DATA}/nco-5.1.2.macos.13.0.tar.gz nc*;scp ${DATA}/nco-5.1.2.macos.13.0.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
+cd ~/bin;tar cvzf ${DATA}/nco-5.1.3.macos.13.0.tar.gz nc*;scp ${DATA}/nco-5.1.3.macos.13.0.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-5.1.2.macos.13.0.tar.gz">nco-5.1.2.macos.13.0.tar.gz</a> (<!--#fsize file="src/nco-5.1.2.macos.13.0.tar.gz"-->): Executables MacOS 13.0-compatible (last updated <!--#flastmod file="src/nco-5.1.2.macos.13.0.tar.gz"-->). Maintained by NCO Project.</li>
+<li><a href="src/nco-5.1.3.macos.13.0.tar.gz">nco-5.1.3.macos.13.0.tar.gz</a> (<!--#fsize file="src/nco-5.1.3.macos.13.0.tar.gz"-->): Executables MacOS 13.0-compatible (last updated <!--#flastmod file="src/nco-5.1.3.macos.13.0.tar.gz"-->). Maintained by NCO Project.</li>
 <li><a href="http://fink.sf.net">Fink</a> packages for <a href="http://fink.sf.net/pdb/package.php/nco">NCO</a>: Currently NCO 4.9.5. Maintained by Alexander Hansen.</li> 
 <li><a href="http://brew.sh">Homebrew</a> packages for <a href="https://formulae.brew.sh/formula/nco">NCO</a>: Currently NCO 5.1.1. Install with ‘<tt>brew install nco</tt>’. Maintained by Carlo Cabrera, Ian Lancaster, Alejandro Soto, and others over the years.</li> 
 <li><a href="http://trac.macosforge.org/projects/macports/wiki">MacPorts</a> infrastructure for <a href="https://ports.macports.org/port/nco">NCO</a>: <a href="https://ports.macports.org/port/nco">Portfile</a>: Currently NCO 5.1.1. Install with ‘<tt>sudo port install nco</tt>’. Maintained by Takeshi Enomoto.</li>
@@ -987,12 +990,12 @@ On the <a href="https://sourceforge.net/p/nco/bugs">Bug Tickets</a> site.</li>
 The simplest way to acquire the source is to download the compressed tarball:
 <ul>
 <li>
-<!-- scp ${DATA}/nco-5.1.2.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src -->
-<a href="https://github.com/nco/nco/archive/5.1.2.tar.gz">nco-5.1.2.tar.gz</a> 
-(<!--#fsize file="src/nco-5.1.2.tar.gz"--> compressed tar-file)<br>
-<!--#exec cmd="openssl dgst -md5 src/nco-5.1.2.tar.gz"--><br>
-<!--#exec cmd="openssl dgst -sha1 src/nco-5.1.2.tar.gz"--><br>
-<!--#exec cmd="openssl dgst -sha256 src/nco-5.1.2.tar.gz"--> 
+<!-- scp ${DATA}/nco-5.1.3.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src -->
+<a href="https://github.com/nco/nco/archive/5.1.3.tar.gz">nco-5.1.3.tar.gz</a> 
+(<!--#fsize file="src/nco-5.1.3.tar.gz"--> compressed tar-file)<br>
+<!--#exec cmd="openssl dgst -md5 src/nco-5.1.3.tar.gz"--><br>
+<!--#exec cmd="openssl dgst -sha1 src/nco-5.1.3.tar.gz"--><br>
+<!--#exec cmd="openssl dgst -sha256 src/nco-5.1.3.tar.gz"--> 
 </li>
 </ul>
 
@@ -1013,8 +1016,8 @@ To avoid the churn that comes with using the latest snapshot,
 potential contributors may wish to retrieve a recent tagged (i.e.,
 stable and released) version, 
 This command retrieves the entire NCO repository (< 20 MB) and
-then checks out NCO version <tt>5.1.2</tt>:
-<p><tt>git clone https://github.com/nco/nco.git;cd nco;git checkout 5.1.2</tt></p>
+then checks out NCO version <tt>5.1.3</tt>:
+<p><tt>git clone https://github.com/nco/nco.git;cd nco;git checkout 5.1.3</tt></p>
 However, the most efficient way to actively track and develop NCO is to
 retrieve the current (“bleeding edge”) NCO snapshot.
 This command retrieves the latest NCO master branch into a local
@@ -1024,12 +1027,12 @@ 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>5.1.2</tt>) and the development version is that the
+(e.g., <tt>5.1.3</tt>) and the development version is that the
 tagged release operators will print a valid version number (e.g.,
-<tt>5.1.2</tt>) when asked to do so with the <tt>-r</tt> flag
+<tt>5.1.3</tt>) when asked to do so with the <tt>-r</tt> flag
 (e.g., <tt>ncks -r</tt>).
 Snapshots will include the sub-version and patch-level in the version
-information (e.g., <tt>5.1.2-alpha06</tt>). 
+information (e.g., <tt>5.1.3-alpha06</tt>). 
 
 <!--
 <a name="doxy"></a>
@@ -1211,9 +1214,9 @@ As of 20131101 there is no Cygwin package for ANTLR, and the Cygwin netCDF packa
 
 <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/5.1.2.tar.gz</dt>
-<dt>tar xvzf 5.1.2.tar.gz</dt>
-<dt>cd nco-5.1.2</dt>
+<dt>wget https://github.com/nco/nco/archive/5.1.3.tar.gz</dt>
+<dt>tar xvzf 5.1.3.tar.gz</dt>
+<dt>cd nco-5.1.3</dt>
 <dt>./configure --prefix=/usr/local</dt>
 <dt>make</dt>
 <dt>sudo make install</dt>


=====================================
doc/nco.texi
=====================================
@@ -128,8 +128,8 @@ Octave TeXInfo manual shows clean TeXInfo structure
 @setfilename nco.info
 
 @c Define edition, date, ...
- at set nco-edition 5.1.2
- at set doc-edition 5.1.2
+ at set nco-edition 5.1.3
+ at set doc-edition 5.1.3
 @set copyright-years 1995--2022
 @set update-year 2022
 @set update-date 18 November 2022


=====================================
src/nco/nco.h
=====================================
@@ -366,7 +366,7 @@ extern "C" {
 # define NCO_VERSION_MINOR 1
 #endif /* !NCO_VERSION_MINOR */
 #ifndef NCO_VERSION_PATCH
-# define NCO_VERSION_PATCH 2
+# define NCO_VERSION_PATCH 3
 #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 */
@@ -376,7 +376,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 "5.1.2"
+# define NCO_VERSION "5.1.3"
 #endif /* !NCO_VERSION */
 
 /* Compatibility tokens new to netCDF4 netcdf.h: */


=====================================
src/nco/nco_rgr.c
=====================================
@@ -909,6 +909,10 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
      prs_mdp[time,lev,col]=P0*hyam[lev] +PS[time,col]*hybm[lev]
      prs_ntf[time,lev,col]=P0*hyai[ilev]+PS[time,col]*hybi[ilev] */
 
+  /* Formula-terms for hybrid pressure vertical grid on unstructured SCREAM/EAMxx horizontal grid:
+     prs_mdp[time,col,lev]=P0*hyam[lev] +PS[time,col]*hybm[lev]
+     prs_ntf[time,col,lev]=P0*hyai[ilev]+PS[time,col]*hybi[ilev] */
+
   /* Formula-terms for hybrid pressure vertical grid on ECMWF RLL horizontal grid:
      prs_mdp[time,lev,lat,lon]=hyam[lev] +exp(lnsp[time,lat,lon])*hybm[lev]
      prs_ntf[time,lev,lat,lon]=hyai[ilev]+exp(lnsp[time,lat,lon])*hybi[ilev] */
@@ -936,6 +940,7 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
   nco_bool flg_grd_out_dpt=False; /* [flg] Output depth coordinate vertical grid */
   nco_bool flg_grd_out_hyb=False; /* [flg] Output hybrid coordinate vertical grid */
   nco_bool flg_grd_out_prs=False; /* [flg] Output pressure coordinate vertical grid */
+  nco_bool flg_hrz_mrv=True; /* [flg] Horizontal dimension is Most-Rapidly-Varying */
   nco_bool flg_vrt_tm=False; /* [flg] Output depends on time-varying vertical grid */
   nco_grd_vrt_typ_enm nco_vrt_grd_in=nco_vrt_grd_nil; /* [enm] Vertical grid type for input grid */
   nco_grd_vrt_typ_enm nco_vrt_grd_out=nco_vrt_grd_nil; /* [enm] Vertical grid type for output grid */
@@ -1016,8 +1021,9 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
   int dmn_id_ilev_in=NC_MIN_INT; /* [id] Dimension ID for interface level in file to be interpolated */
   int dmn_id_lev_in=NC_MIN_INT; /* [id] Dimension ID for midpoint level in file to be interpolated */
   int dmn_id_tm_in=NC_MIN_INT; /* [id] Dimension ID for time in file to be interpolated */
-  int dmn_nbr_rec; /* [nbr] Number of unlimited dimensions */
   int dmn_idx_tm_in=NC_MIN_INT; /* [idx] Index of record coordinate in input hybrid coordinate PS field */
+  int dmn_hrz_nbr=0; /* [nbr] Number of horizontal dimensions in vertical MRV files */
+  int dmn_nbr_rec; /* [nbr] Number of unlimited dimensions */
   long *dmn_cnt_in=NULL;
   long *dmn_cnt_out=NULL;
   long *dmn_srt=NULL;
@@ -1029,6 +1035,9 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
   long tm_nbr=1L; /* [idx] Number of timesteps in vertical grid */
   long tm_nbr_in=1L; /* [nbr] Number of timesteps in input vertical grid definition */
   long tm_nbr_out=1L; /* [nbr] Number of timesetps in output vertical grid definition */
+  nco_bool flg_grd_hrz_0D=False; /* [flg] Input data is single vertical column */
+  nco_bool flg_grd_hrz_1D=False; /* [flg] Input data is 1D (unstructured) array of vertical columns */
+  nco_bool flg_grd_hrz_2D=False; /* [flg] Input data is 2D (structured) array of vertical columns */
   size_t grd_idx; /* [idx] Gridcell index */
   size_t grd_sz_in=1L; /* [nbr] Number of elements in single layer of input grid */
   size_t grd_sz_out=1L; /* [nbr] Number of elements in single layer of output grid */
@@ -1068,11 +1077,16 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
 	for(rec_idx=0;rec_idx<dmn_nbr_rec;rec_idx++)
 	  if(dmn_ids_out[dmn_idx] == dmn_ids_rec[rec_idx])
 	    break; 
-	if(rec_idx == dmn_nbr_rec || dmn_nbr_out == 1) grd_sz_out*=dmn_cnt_out[dmn_idx];
+	if(rec_idx == dmn_nbr_rec || dmn_nbr_out == 1){
+	  /* This PS dimension is not record dimension, or is sole PS dimension */
+	  grd_sz_out*=dmn_cnt_out[dmn_idx];
+	  dmn_hrz_nbr++;
+	} /* !rec_idx, !dmn_nbr_out */
 	if(rec_idx != dmn_nbr_rec && dmn_nbr_out > 1 && dmn_cnt_out[dmn_idx] > 1L){
+	  /* Multi-dimensional PS contains this multi-element record dimension, which we assume is time (not space) */
 	  tm_nbr_out=dmn_cnt_out[dmn_idx];
 	  if(tm_nbr_out > 1L) flg_vrt_tm=True;
-	} /* tm_nbr_out > 1 */
+	} /* !rec_idx, !dmn_nbr_out, !dmn_cnt_out */
 	dmn_srt[dmn_idx]=0L;
       } /* !dmn_idx */
       if(dmn_ids_rec) dmn_ids_rec=(int *)nco_free(dmn_ids_rec);
@@ -1313,8 +1327,8 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
     rcd=nco_inq_dimname(vrt_in_id,dmn_id_lev_in,dmn_nm);
     lev_nm_in=strdup(dmn_nm);
     /* 20221103:
-       Interface and midpoint dimension names are only guaranteed to both exist in vrt_in_id, not in_id
-       Use vrt_in_id to get their names and sizes, then be sure to leave this block with IDs from in_id
+       Interface and midpoint dimension names are only guaranteed to both exist together in vrt_in_id, not in_id
+       Use vrt_in_id to get their names and sizes, then gather and exit this block with their IDs from in_id
        Following blocks only use those IDs to determine vertical grid of input variables from in_id
        Either one (but not both) of the midpoint and interface level IDs may be undefined in in_id
        Moreover, determining which dimension, if any, is midpoint and interface in in_id is non-trivial
@@ -1363,19 +1377,20 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
 	  /* Yes. Do any dimensions vary more rapidly than lev? */
 	  if(dmn_idx < dmn_nbr_in-1){
 	    /* Yes. Assume remaining dimensions are horizontal spatial dimensions */
-	    char var_nm[NC_MAX_NAME+1L];
-	    (void)nc_inq_varname(in_id,var_idx,var_nm);
 	    for(int dmn_idx_hrz=dmn_idx+1;dmn_idx_hrz<dmn_nbr_in;dmn_idx_hrz++){
 	      rcd=nco_inq_dimlen(in_id,dmn_ids_in[dmn_idx_hrz],dmn_cnt_in+dmn_idx_hrz);
 	      grd_sz_in*=dmn_cnt_in[dmn_idx_hrz];
 	    } /* !dmn_idx_hrz */
 	    break;
+	  }else{ /* !dmn_idx */
+	    flg_hrz_mrv=False;
+	    break;
 	  } /* !dmn_idx */
 	} /* !dmn_idx */
       } /* !var_idx */
       if(nco_dbg_lvl_get() >= nco_dbg_std)
 	if(var_idx == var_nbr)
-	  (void)fprintf(stdout,"%s: INFO %s reports input file has no variables with multiple dimensions, i.e., input appears to be vertical only, with no horizontal extent\n",nco_prg_nm_get(),fnc_nm);
+	  (void)fprintf(stdout,"%s: INFO %s reports input file has no variables with multiple dimensions, i.e., input could be vertical only, with no horizontal extent\n",nco_prg_nm_get(),fnc_nm);
       grd_sz_out=grd_sz_in;
     } /* !flg_grd_out_hyb */
   } /* !flg_grd_in_prs */
@@ -1436,19 +1451,24 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
 	rcd=nco_inq_dimlen(fl_ps_id,dmn_ids_in[dmn_idx],dmn_cnt_in+dmn_idx);
 	/* 20190330: Allow possibility that PS has time dimension > 1 
 	   We want horizontal not temporal dimensions to contribute to grd_sz 
-	   Temporal dimension is usually unlimited 
+	   Temporal dimension is usually unlimited
 	   Only multiply grd_sz by fixed (non-unlimited) dimension sizes
 	   Corner-case exception when PS spatial dimension on unstructured grid is unlimited */
 	for(rec_idx=0;rec_idx<dmn_nbr_rec;rec_idx++)
 	  if(dmn_ids_in[dmn_idx] == dmn_ids_rec[rec_idx])
 	    break; 
-	if(rec_idx == dmn_nbr_rec || dmn_nbr_in == 1) grd_sz_in*=dmn_cnt_in[dmn_idx];
+	if(rec_idx == dmn_nbr_rec || dmn_nbr_in == 1){
+	  /* This PS dimension is not record dimension, or is sole PS dimension */
+	  grd_sz_in*=dmn_cnt_in[dmn_idx];
+	  dmn_hrz_nbr++;
+	} /* !rec_idx, !dmn_nbr_in */
 	if(rec_idx != dmn_nbr_rec && dmn_nbr_in > 1 && dmn_cnt_in[dmn_idx] > 1L){
+	  /* Multi-dimensional PS contains this multi-element record dimension, which we assume is time (not space) */
 	  dmn_id_tm_in=dmn_ids_in[dmn_idx];
 	  dmn_idx_tm_in=dmn_idx;
 	  tm_nbr_in=dmn_cnt_in[dmn_idx_tm_in];
 	  if(tm_nbr_in > 1L) flg_vrt_tm=True;
-	} /* tm_nbr_in > 1 */
+	} /* !rec_idx, !dmn_nbr_out, !dmn_cnt_out */
 	dmn_srt[dmn_idx]=0L;
       } /* !dmn_idx */
 
@@ -1456,7 +1476,7 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
       dmn_nbr_ps=dmn_nbr_out=dmn_nbr_in;
       dmn_ids_out=(int *)nco_malloc(dmn_nbr_out*sizeof(int));
       dmn_cnt_out=(long *)nco_malloc((dmn_nbr_out+1)*sizeof(long));
-      /* fxm: next line works for hyb_in and is buggy for prs_in */
+      /* fxm: next line works for hyb_in and is buggy for prs_in? */
       /* 20221102: Why copy input IDs to output arrays, you ask? Because these output arrays are only used to define PS in output */
       memcpy(dmn_ids_out,dmn_ids_in,dmn_nbr_in*sizeof(int));
       memcpy(dmn_cnt_out,dmn_cnt_in,dmn_nbr_in*sizeof(long));
@@ -1515,7 +1535,7 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
     }else{
       memcpy(ps_out,ps_in,tm_nbr_in*grd_sz_in*nco_typ_lng(var_typ_rgr));
     } /* !ps_id_tpl */
-  } /* ! */
+  } /* !flg_grd_in_hyb, !flg_grd_out_hyb */
 
   /* Compare input and output surface pressure fields to determine whether subterranean extrapolation required */
   nco_bool flg_add_msv_att; /* [flg] Extrapolation requires _FillValue */
@@ -1858,7 +1878,7 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
       /* If variable has not been defined, define it */
       if(rcd != NC_NOERR){
 	if(trv.flg_rgr){
-	  /* Interpolate */
+	  /* Muck with interpolated-variable metadata */
 	  rcd=nco_inq_vardimid(in_id,var_id_in,dmn_id_in);
 	  rcd=nco_inq_var_packing(in_id,var_id_in,&flg_pck);
 	  if(flg_pck) (void)fprintf(stdout,"%s: WARNING %s reports variable \"%s\" is packed so results unpredictable. HINT: If regridded values seems weird, retry after unpacking input file with, e.g., \"ncpdq -U in.nc out.nc\"\n",nco_prg_nm_get(),fnc_nm,var_nm);
@@ -1868,15 +1888,18 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
 	      /* Change ilev dimension */
 	      dmn_id_out[dmn_idx]=dmn_id_ilev_out;
 	      dmn_cnt_out[dmn_idx]=ilev_nbr_out;
+	      if(dmn_nbr_in > 1 && dmn_idx == dmn_nbr_in-1) flg_hrz_mrv=False;
 	    }else if(!strcmp(dmn_nm,lev_nm_in)){
 	      /* Change lev dimension */
 	      dmn_id_out[dmn_idx]=dmn_id_lev_out;
 	      dmn_cnt_out[dmn_idx]=lev_nbr_out;
+	      if(dmn_nbr_in > 1 && dmn_idx == dmn_nbr_in-1) flg_hrz_mrv=False;
 	    }else{
-	      /* Dimensions ilev/lev_nm_in have already been defined as ilev/lev_nm_out, replicate all other dimensions */
+	      /* For non-vertical dimensions, obtain output dimension ID associated with input dimension name */
 	      rcd=nco_inq_dimid_flg(out_id,dmn_nm,dmn_id_out+dmn_idx);
 	    } /* !ilev */
 	    if(rcd != NC_NOERR){
+	      /* Dimensions ilev/lev_nm_in have already been defined as ilev/lev_nm_out, replicate all non-vertical dimensions */ 
 	      rcd=nco_inq_dimlen(in_id,dmn_id_in[dmn_idx],dmn_cnt_out+dmn_idx);
 	      /* Check-for and, if found, retain record dimension property */
 	      for(int dmn_rec_idx=0;dmn_rec_idx < dmn_nbr_rec;dmn_rec_idx++)
@@ -1886,7 +1909,7 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
 	    } /* !rcd */
 	  } /* !dmn_idx */
 	}else{ /* !flg_rgr */
-	  /* Replicate non-interpolated variables */
+	  /* Replicate non-interpolated variable metadata */
 	  rcd=nco_inq_vardimid(in_id,var_id_in,dmn_id_in);
 	  for(dmn_idx=0;dmn_idx<dmn_nbr_in;dmn_idx++){
 	    rcd=nco_inq_dimname(in_id,dmn_id_in[dmn_idx],dmn_nm);
@@ -1974,6 +1997,13 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
   int thr_idx; /* [idx] Thread index */
   size_t grd_nbr=grd_sz_in; /* [nbr] Horizonal grid size */
   size_t idx_dbg=rgr->idx_dbg;
+
+  /* Results of heuristic method of determining whether vertical or horizontal MRV dimension */
+  if(dmn_hrz_nbr == 0 || grd_sz_in == 1L){flg_grd_hrz_0D=True;}
+  else if(dmn_hrz_nbr == 1){flg_grd_hrz_1D=True;}
+  else if(dmn_hrz_nbr == 2){flg_grd_hrz_2D=True;}
+  if(nco_dbg_lvl_get() >= nco_dbg_scl) (void)fprintf(stdout,"%s: INFO %s reports flg_hrz_mrv = %d, dmn_hrz_nbr = %d, grd_sz_in = %ld, flg_grd_hrz_0D = %d, flg_grd_hrz_1D = %d, flg_grd_hrz_2D = %d\n",nco_prg_nm_get(),fnc_nm,flg_hrz_mrv,dmn_hrz_nbr,grd_sz_in,flg_grd_hrz_0D,flg_grd_hrz_1D,flg_grd_hrz_2D);
+  assert(dmn_hrz_nbr <= 2);
   
   /* Using naked stdin/stdout/stderr in parallel region generates warning
      Copy appropriate filehandle to variable scoped as shared in parallel clause */
@@ -1988,25 +2018,47 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
     idx_fst=tm_idx*grd_sz_in;
     
     if(need_prs_mdp){
-      /* Allocate and define midpoint pressures */
+      /* Allocate midpoint pressures first timestep only */
       if(tm_idx == 0) prs_mdp_in=(double *)nco_malloc_dbg(grd_sz_in*lev_nbr_in*nco_typ_lng(var_typ_rgr),fnc_nm,"Unable to malloc() prs_mdp_in value buffer");
       if(tm_idx == 0) prs_mdp_out=(double *)nco_malloc_dbg(grd_sz_out*lev_nbr_out*nco_typ_lng(var_typ_rgr),fnc_nm,"Unable to malloc() prs_mdp_out value buffer");
-      if(flg_grd_in_hyb)
-	for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
-	  for(lev_idx=0;lev_idx<lev_nbr_in;lev_idx++)
-	    prs_mdp_in[grd_idx+lev_idx*grd_sz_in]=p0_in*hyam_in[lev_idx]+ps_in[idx_fst+grd_idx]*hybm_in[lev_idx];
-      if(flg_grd_out_hyb)
-	for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
-	  for(lev_idx=0;lev_idx<lev_nbr_out;lev_idx++)
-	    prs_mdp_out[grd_idx+lev_idx*grd_sz_out]=p0_out*hyam_out[lev_idx]+ps_out[idx_fst+grd_idx]*hybm_out[lev_idx];
-      if(flg_grd_in_prs)
-	for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
-	  for(lev_idx=0;lev_idx<lev_nbr_in;lev_idx++)
-	    prs_mdp_in[grd_idx+lev_idx*grd_sz_in]=lev_in[lev_idx];
-      if(flg_grd_out_prs)
-	for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
-	  for(lev_idx=0;lev_idx<lev_nbr_out;lev_idx++)
-	    prs_mdp_out[grd_idx+lev_idx*grd_sz_out]=lev_out[lev_idx];
+      /* Update midpoint pressures every timestep */
+      if(flg_hrz_mrv){
+	/* 3D pressure arrays ordered [vrt,hrz] */
+	if(flg_grd_in_hyb)
+	  for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
+	    for(lev_idx=0;lev_idx<lev_nbr_in;lev_idx++)
+	      prs_mdp_in[grd_idx+lev_idx*grd_sz_in]=p0_in*hyam_in[lev_idx]+ps_in[idx_fst+grd_idx]*hybm_in[lev_idx];
+	if(flg_grd_out_hyb)
+	  for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
+	    for(lev_idx=0;lev_idx<lev_nbr_out;lev_idx++)
+	      prs_mdp_out[grd_idx+lev_idx*grd_sz_out]=p0_out*hyam_out[lev_idx]+ps_out[idx_fst+grd_idx]*hybm_out[lev_idx];
+	if(flg_grd_in_prs)
+	  for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
+	    for(lev_idx=0;lev_idx<lev_nbr_in;lev_idx++)
+	      prs_mdp_in[grd_idx+lev_idx*grd_sz_in]=lev_in[lev_idx];
+	if(flg_grd_out_prs)
+	  for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
+	    for(lev_idx=0;lev_idx<lev_nbr_out;lev_idx++)
+	      prs_mdp_out[grd_idx+lev_idx*grd_sz_out]=lev_out[lev_idx];
+      }else{ /* !flg_hrz_mrv */
+	/* 3D pressure arrays ordered [hrz,vrt] */
+	if(flg_grd_in_hyb)
+	  for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
+	    for(lev_idx=0;lev_idx<lev_nbr_in;lev_idx++)
+	      prs_mdp_in[lev_idx+grd_idx*lev_nbr_in]=p0_in*hyam_in[lev_idx]+ps_in[idx_fst+grd_idx]*hybm_in[lev_idx];
+	if(flg_grd_out_hyb)
+	  for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
+	    for(lev_idx=0;lev_idx<lev_nbr_out;lev_idx++)
+	      prs_mdp_out[lev_idx+grd_idx*lev_nbr_out]=p0_out*hyam_out[lev_idx]+ps_out[idx_fst+grd_idx]*hybm_out[lev_idx];
+	if(flg_grd_in_prs)
+	  for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
+	    for(lev_idx=0;lev_idx<lev_nbr_in;lev_idx++)
+	      prs_mdp_in[lev_idx+grd_idx*lev_nbr_in]=lev_in[lev_idx];
+	if(flg_grd_out_prs)
+	  for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
+	    for(lev_idx=0;lev_idx<lev_nbr_out;lev_idx++)
+	      prs_mdp_out[lev_idx+grd_idx*lev_nbr_out]=lev_out[lev_idx];
+      } /* !flg_hrz_mrv */
       if(flg_ntp_log){
 	var_sz_in=grd_sz_in*lev_nbr_in;
 	for(idx_in=0;idx_in<var_sz_in;idx_in++) prs_mdp_in[idx_in]=log(prs_mdp_in[idx_in]);
@@ -2016,25 +2068,45 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
     } /* !need_prs_mdp */
 
     if(need_prs_ntf){
-      /* Allocate and define interface pressures */
+      /* Allocate interface pressures first timestep only */
       if(tm_idx == 0) prs_ntf_in=(double *)nco_malloc_dbg(grd_sz_in*ilev_nbr_in*nco_typ_lng(var_typ_rgr),fnc_nm,"Unable to malloc() prs_ntf_in value buffer");
       if(tm_idx == 0) prs_ntf_out=(double *)nco_malloc_dbg(grd_sz_out*ilev_nbr_out*nco_typ_lng(var_typ_rgr),fnc_nm,"Unable to malloc() prs_ntf_out value buffer");
-      if(flg_grd_in_hyb)
-	for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
-	  for(ilev_idx=0;ilev_idx<ilev_nbr_in;ilev_idx++)
-	    prs_ntf_in[grd_idx+ilev_idx*grd_sz_in]=p0_in*hyai_in[ilev_idx]+ps_in[idx_fst+grd_idx]*hybi_in[ilev_idx];
-      if(flg_grd_out_hyb)
-	for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
-	  for(ilev_idx=0;ilev_idx<ilev_nbr_out;ilev_idx++)
-	    prs_ntf_out[grd_idx+ilev_idx*grd_sz_out]=p0_out*hyai_out[ilev_idx]+ps_out[idx_fst+grd_idx]*hybi_out[ilev_idx];
-      if(flg_grd_in_prs)
-	for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
-	  for(ilev_idx=0;ilev_idx<ilev_nbr_in;ilev_idx++)
-	    prs_ntf_in[grd_idx+ilev_idx*grd_sz_in]=lev_in[ilev_idx];
-      if(flg_grd_out_prs)
-	for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
-	  for(ilev_idx=0;ilev_idx<ilev_nbr_out;ilev_idx++)
-	    prs_ntf_out[grd_idx+ilev_idx*grd_sz_out]=lev_out[ilev_idx];
+      /* Update interface pressures every timestep */
+      if(flg_hrz_mrv){
+	if(flg_grd_in_hyb)
+	  for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
+	    for(ilev_idx=0;ilev_idx<ilev_nbr_in;ilev_idx++)
+	      prs_ntf_in[grd_idx+ilev_idx*grd_sz_in]=p0_in*hyai_in[ilev_idx]+ps_in[idx_fst+grd_idx]*hybi_in[ilev_idx];
+	if(flg_grd_out_hyb)
+	  for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
+	    for(ilev_idx=0;ilev_idx<ilev_nbr_out;ilev_idx++)
+	      prs_ntf_out[grd_idx+ilev_idx*grd_sz_out]=p0_out*hyai_out[ilev_idx]+ps_out[idx_fst+grd_idx]*hybi_out[ilev_idx];
+	if(flg_grd_in_prs)
+	  for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
+	    for(ilev_idx=0;ilev_idx<ilev_nbr_in;ilev_idx++)
+	      prs_ntf_in[grd_idx+ilev_idx*grd_sz_in]=lev_in[ilev_idx];
+	if(flg_grd_out_prs)
+	  for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
+	    for(ilev_idx=0;ilev_idx<ilev_nbr_out;ilev_idx++)
+	      prs_ntf_out[grd_idx+ilev_idx*grd_sz_out]=lev_out[ilev_idx];
+      }else{ /* !flg_hrz_mrv */
+	if(flg_grd_in_hyb)
+	  for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
+	    for(ilev_idx=0;ilev_idx<ilev_nbr_in;ilev_idx++)
+	      prs_ntf_in[ilev_idx+grd_idx*ilev_nbr_in]=p0_in*hyai_in[ilev_idx]+ps_in[idx_fst+grd_idx]*hybi_in[ilev_idx];
+	if(flg_grd_out_hyb)
+	  for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
+	    for(ilev_idx=0;ilev_idx<ilev_nbr_out;ilev_idx++)
+	      prs_ntf_out[ilev_idx+grd_idx*ilev_nbr_out]=p0_out*hyai_out[ilev_idx]+ps_out[idx_fst+grd_idx]*hybi_out[ilev_idx];
+	if(flg_grd_in_prs)
+	  for(grd_idx=0;grd_idx<grd_sz_in;grd_idx++)
+	    for(ilev_idx=0;ilev_idx<ilev_nbr_in;ilev_idx++)
+	      prs_ntf_in[ilev_idx+grd_idx*ilev_nbr_in]=lev_in[ilev_idx];
+	if(flg_grd_out_prs)
+	  for(grd_idx=0;grd_idx<grd_sz_out;grd_idx++)
+	    for(ilev_idx=0;ilev_idx<ilev_nbr_out;ilev_idx++)
+	      prs_ntf_out[ilev_idx+grd_idx*ilev_nbr_out]=lev_out[ilev_idx];
+      } /* !flg_hrz_mrv */
       if(flg_ntp_log){
 	var_sz_in=grd_sz_in*ilev_nbr_in;
 	for(idx_in=0;idx_in<var_sz_in;idx_in++) prs_ntf_in[idx_in]=log(prs_ntf_in[idx_in]);
@@ -2060,15 +2132,15 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
 # endif /* 900 */
 #endif /* !__GNUC__ */
 #if defined( __INTEL_COMPILER)
-#  pragma omp parallel for default(none) firstprivate(has_ilev,has_lev,has_tm,var_val_dbl_in,var_val_dbl_out) private(dmn_cnt_in,dmn_cnt_out,dmn_id_in,dmn_id_out,dmn_idx,dmn_nbr_in,dmn_nbr_out,dmn_nbr_max,dmn_nm,dmn_srt,grd_idx,has_mss_val,idx_in,idx_out,idx_tbl,in_id,lvl_idx_in,lvl_idx_out,lvl_nbr_in,lvl_nbr_out,mss_val_cmp_dbl,mss_val_dbl,prs_ntp_in,prs_ntp_out,rcd,thr_idx,trv,var_id_in,var_id_out,var_nm,var_sz_in,var_sz_out,var_typ_out,var_typ_rgr) shared(dmn_id_ilev_in,dmn_id_ilev_out,dmn_id_lev_in,dmn_id_lev_out,dmn_id_tm_in,flg_ntp_log,flg_vrt_tm,fnc_nm,grd_nbr,idx_dbg,ilev_nbr_in,ilev_nbr_out,lev_nbr_in,lev_nbr_out,out_id,prs_mdp_in,prs_mdp_out,prs_ntf_in,prs_ntf_out,tm_idx,xtr_mth)
+#  pragma omp parallel for default(none) firstprivate(has_ilev,has_lev,has_tm,var_val_dbl_in,var_val_dbl_out) private(dmn_cnt_in,dmn_cnt_out,dmn_id_in,dmn_id_out,dmn_idx,dmn_nbr_in,dmn_nbr_out,dmn_nbr_max,dmn_nm,dmn_srt,grd_idx,has_mss_val,idx_in,idx_out,idx_tbl,in_id,lvl_idx_in,lvl_idx_out,lvl_nbr_in,lvl_nbr_out,mss_val_cmp_dbl,mss_val_dbl,prs_ntp_in,prs_ntp_out,rcd,thr_idx,trv,var_id_in,var_id_out,var_nm,var_sz_in,var_sz_out,var_typ_out,var_typ_rgr) shared(dmn_id_ilev_in,dmn_id_ilev_out,dmn_id_lev_in,dmn_id_lev_out,dmn_id_tm_in,flg_hrz_mrv,flg_ntp_log,flg_vrt_tm,fnc_nm,grd_nbr,idx_dbg,ilev_nbr_in,ilev_nbr_out,lev_nbr_in,lev_nbr_out,out_id,prs_mdp_in,prs_mdp_out,prs_ntf_in,prs_ntf_out,tm_idx,xtr_mth)
 #else /* !__INTEL_COMPILER */
 # ifdef GXX_OLD_OPENMP_SHARED_TREATMENT
-#  pragma omp parallel for default(none) firstprivate(has_ilev,has_lev,has_tm,var_val_dbl_in,var_val_dbl_out) private(dmn_cnt_in,dmn_cnt_out,dmn_id_in,dmn_id_out,dmn_idx,dmn_nbr_in,dmn_nbr_out,dmn_nbr_max,dmn_nm,dmn_srt,grd_idx,has_mss_val,idx_in,idx_out,idx_tbl,in_id,lvl_idx_in,lvl_idx_out,lvl_nbr_in,lvl_nbr_out,mss_val_cmp_dbl,mss_val_dbl,prs_ntp_in,prs_ntp_out,rcd,thr_idx,trv,var_id_in,var_id_out,var_nm,var_sz_in,var_sz_out,var_typ_out,var_typ_rgr) shared(dmn_id_ilev_in,dmn_id_ilev_out,dmn_id_lev_in,dmn_id_lev_out,dmn_id_tm_in,flg_ntp_log,flg_vrt_tm,fnc_nm,grd_nbr,idx_dbg,ilev_nbr_in,ilev_nbr_out,lev_nbr_in,lev_nbr_out,out_id,prs_mdp_in,prs_mdp_out,prs_ntf_in,prs_ntf_out,tm_idx,xtr_mth)
+#  pragma omp parallel for default(none) firstprivate(has_ilev,has_lev,has_tm,var_val_dbl_in,var_val_dbl_out) private(dmn_cnt_in,dmn_cnt_out,dmn_id_in,dmn_id_out,dmn_idx,dmn_nbr_in,dmn_nbr_out,dmn_nbr_max,dmn_nm,dmn_srt,grd_idx,has_mss_val,idx_in,idx_out,idx_tbl,in_id,lvl_idx_in,lvl_idx_out,lvl_nbr_in,lvl_nbr_out,mss_val_cmp_dbl,mss_val_dbl,prs_ntp_in,prs_ntp_out,rcd,thr_idx,trv,var_id_in,var_id_out,var_nm,var_sz_in,var_sz_out,var_typ_out,var_typ_rgr) shared(dmn_id_ilev_in,dmn_id_ilev_out,dmn_id_lev_in,dmn_id_lev_out,dmn_id_tm_in,flg_hrz_mrv,flg_ntp_log,flg_vrt_tm,fnc_nm,grd_nbr,idx_dbg,ilev_nbr_in,ilev_nbr_out,lev_nbr_in,lev_nbr_out,out_id,prs_mdp_in,prs_mdp_out,prs_ntf_in,prs_ntf_out,tm_idx,xtr_mth)
 # else /* !old g++ */
 #  if defined(GXX_WITH_OPENMP5_GPU_SUPPORT) && 0
 #   pragma omp target teams distribute parallel for
 #  else
-#   pragma omp parallel for firstprivate(has_ilev,has_lev,has_tm,var_val_dbl_in,var_val_dbl_out) private(dmn_cnt_in,dmn_cnt_out,dmn_id_in,dmn_id_out,dmn_idx,dmn_nbr_in,dmn_nbr_out,dmn_nbr_max,dmn_nm,dmn_srt,grd_idx,has_mss_val,idx_in,idx_out,idx_tbl,in_id,lvl_idx_in,lvl_idx_out,lvl_nbr_in,lvl_nbr_out,mss_val_cmp_dbl,mss_val_dbl,prs_ntp_in,prs_ntp_out,rcd,thr_idx,trv,var_id_in,var_id_out,var_nm,var_sz_in,var_sz_out,var_typ_out,var_typ_rgr) shared(dmn_id_ilev_in,dmn_id_ilev_out,dmn_id_lev_in,dmn_id_lev_out,dmn_id_tm_in,flg_ntp_log,flg_vrt_tm,grd_nbr,idx_dbg,ilev_nbr_in,ilev_nbr_out,lev_nbr_in,lev_nbr_out,out_id,prs_mdp_in,prs_mdp_out,prs_ntf_in,prs_ntf_out,tm_idx,xtr_mth)
+#   pragma omp parallel for firstprivate(has_ilev,has_lev,has_tm,var_val_dbl_in,var_val_dbl_out) private(dmn_cnt_in,dmn_cnt_out,dmn_id_in,dmn_id_out,dmn_idx,dmn_nbr_in,dmn_nbr_out,dmn_nbr_max,dmn_nm,dmn_srt,grd_idx,has_mss_val,idx_in,idx_out,idx_tbl,in_id,lvl_idx_in,lvl_idx_out,lvl_nbr_in,lvl_nbr_out,mss_val_cmp_dbl,mss_val_dbl,prs_ntp_in,prs_ntp_out,rcd,thr_idx,trv,var_id_in,var_id_out,var_nm,var_sz_in,var_sz_out,var_typ_out,var_typ_rgr) shared(dmn_id_ilev_in,dmn_id_ilev_out,dmn_id_lev_in,dmn_id_lev_out,dmn_id_tm_in,flg_hrz_mrv,flg_ntp_log,flg_vrt_tm,grd_nbr,idx_dbg,ilev_nbr_in,ilev_nbr_out,lev_nbr_in,lev_nbr_out,out_id,prs_mdp_in,prs_mdp_out,prs_ntf_in,prs_ntf_out,tm_idx,xtr_mth)
 #  endif /* !GCC > 9.0 */
 # endif /* !GCC < 4.9 */
 #endif /* !__INTEL_COMPILER */
@@ -2193,11 +2265,19 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
 	  nco_bool out_ncr; /* [flg] Output coordinate monotonically increases */
 	  
 	  /* Determine monotonicity direction only once, based on first vertical column */
-	  if(prs_ntp_in[grd_nbr]-prs_ntp_in[0] > 0.0) in_ncr=True; else in_ncr=False;
-	  out_ncr=True;
-	  if(out_nbr > 1)
-	    if(prs_ntp_out[grd_nbr]-prs_ntp_out[0] < 0.0)
-	      out_ncr=False;
+	  if(flg_hrz_mrv){
+	    if(prs_ntp_in[grd_nbr]-prs_ntp_in[0] > 0.0) in_ncr=True; else in_ncr=False;
+	    out_ncr=True;
+	    if(out_nbr > 1)
+	      if(prs_ntp_out[grd_nbr]-prs_ntp_out[0] < 0.0)
+		out_ncr=False;
+	  }else{ /* !flg_hrz_mrv */
+	    if(prs_ntp_in[1]-prs_ntp_in[0] > 0.0) in_ncr=True; else in_ncr=False;
+	    out_ncr=True;
+	    if(out_nbr > 1)
+	      if(prs_ntp_out[1]-prs_ntp_out[0] < 0.0)
+		out_ncr=False;
+	  } /* !flg_hrz_mrv */
 	  
 	  /* If necessary, allocate (once, and re-use it) additional memory to hold reversed arrays */
 	  if(!in_ncr){
@@ -2226,16 +2306,28 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
 	  for(grd_idx=0;grd_idx<grd_nbr;grd_idx++){
 	    
 	    /* Initialize pseudo-1D variables with consecutive memory addresses to avoid indirection */
-	    for(lvl_idx_in=0;lvl_idx_in<lvl_nbr_in;lvl_idx_in++){
-	      idx_in=grd_idx+lvl_idx_in*grd_nbr;
-	      crd_in[lvl_idx_in]=prs_ntp_in[idx_in];
-	      dat_in[lvl_idx_in]=var_val_dbl_in[idx_in];
-	    } /* !lvl_idx_in */
-	    for(lvl_idx_out=0;lvl_idx_out<lvl_nbr_out;lvl_idx_out++){
-	      idx_out=grd_idx+lvl_idx_out*grd_nbr;
-	      crd_out[lvl_idx_out]=prs_ntp_out[idx_out];
-	    } /* !lvl_idx_out */
-	    
+	    if(flg_hrz_mrv){
+	      for(lvl_idx_in=0;lvl_idx_in<lvl_nbr_in;lvl_idx_in++){
+		idx_in=grd_idx+lvl_idx_in*grd_nbr;
+		crd_in[lvl_idx_in]=prs_ntp_in[idx_in];
+		dat_in[lvl_idx_in]=var_val_dbl_in[idx_in];
+	      } /* !lvl_idx_in */
+	      for(lvl_idx_out=0;lvl_idx_out<lvl_nbr_out;lvl_idx_out++){
+		idx_out=grd_idx+lvl_idx_out*grd_nbr;
+		crd_out[lvl_idx_out]=prs_ntp_out[idx_out];
+	      } /* !lvl_idx_out */
+	    }else{ /* !flg_hrz_mrv */
+	      for(lvl_idx_in=0;lvl_idx_in<lvl_nbr_in;lvl_idx_in++){
+		idx_in=grd_idx*lvl_nbr_in+lvl_idx_in;
+		crd_in[lvl_idx_in]=prs_ntp_in[idx_in];
+		dat_in[lvl_idx_in]=var_val_dbl_in[idx_in];
+	      } /* !lvl_idx_in */
+	      for(lvl_idx_out=0;lvl_idx_out<lvl_nbr_out;lvl_idx_out++){
+		idx_out=grd_idx*lvl_nbr_out+lvl_idx_out;
+		crd_out[lvl_idx_out]=prs_ntp_out[idx_out];
+	      } /* !lvl_idx_out */
+	    } /* !flg_hrz_mrv */
+	      
 	    /* Interpolation code easier to write/debug if crd_in and crd_out both monotonically increase
 	       However, monotonically decreasing coordinates useful in many cases, such as depth coordinate, 
 	       and pressure levels arranged largest to smallest (favored by CMIP)
@@ -2398,10 +2490,17 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
 	    // End of vec.hh code
 	    
 	    /* Copy answers into output array */
-	    for(lvl_idx_out=0;lvl_idx_out<lvl_nbr_out;lvl_idx_out++){
-	      idx_out=grd_idx+lvl_idx_out*grd_nbr;
-	      var_val_dbl_out[idx_out]=dat_out[lvl_idx_out];
-	    } /* !lvl_idx_out */
+	    if(flg_hrz_mrv){
+	      for(lvl_idx_out=0;lvl_idx_out<lvl_nbr_out;lvl_idx_out++){
+		idx_out=grd_idx+lvl_idx_out*grd_nbr;
+		var_val_dbl_out[idx_out]=dat_out[lvl_idx_out];
+	      } /* !lvl_idx_out */
+	    }else{ /* !flg_hrz_mrv */
+	      for(lvl_idx_out=0;lvl_idx_out<lvl_nbr_out;lvl_idx_out++){
+		idx_out=grd_idx*lvl_nbr_out+lvl_idx_out;
+		var_val_dbl_out[idx_out]=dat_out[lvl_idx_out];
+	      } /* !lvl_idx_out */
+	    } /* !flg_hrz_mrv */
 	    
 	    if(nco_dbg_lvl_get() >= nco_dbg_io && grd_idx == idx_dbg){
 	      (void)fprintf(fp_stdout,"%s: DEBUG %s variable %s at idx_dbg = %lu\n",nco_prg_nm_get(),fnc_nm,var_nm,idx_dbg);
@@ -3000,7 +3099,7 @@ nco_rgr_wgt /* [fnc] Regrid with external weights */
   /* Check-for and workaround faulty Tempest and MPAS-O/I grid sizes */
   if(flg_grd_in_1D && (mpf.src_grid_size != dmn_sz_in_int[0])){
     (void)fprintf(stdout,"%s: INFO %s reports input grid dimension sizes disagree: mpf.src_grid_size = %ld != %d = dmn_sz_in[0]. Problem may be caused by incorrect src_grid_dims variable. This is a known issue with some TempestRemap mapfiles generated prior to ~20150901, and in some ESMF mapfiles for MPAS-O/I. This problem can be safely ignored if workaround succeeds. Attempting workaround ...\n",nco_prg_nm_get(),fnc_nm,mpf.src_grid_size,dmn_sz_in_int[0]);
-      dmn_sz_in_int[0]=mpf.src_grid_size;
+    dmn_sz_in_int[0]=mpf.src_grid_size;
   } /* !bug */
   if(flg_grd_out_1D && (mpf.dst_grid_size != dmn_sz_out_int[0])){
     (void)fprintf(stdout,"%s: INFO %s reports output grid dimension sizes disagree: mpf.dst_grid_size = %ld != %d = dmn_sz_out[0]. Problem may be caused by incorrect dst_grid_dims variable. This is a known issue with some TempestRemap mapfiles generated prior to ~20150901, and in some ESMF mapfiles for MPAS-O/I. This problem can be safely ignored if workaround succeeds. Attempting workaround ...\n",nco_prg_nm_get(),fnc_nm,mpf.dst_grid_size,dmn_sz_out_int[0]);
@@ -3810,7 +3909,7 @@ nco_rgr_wgt /* [fnc] Regrid with external weights */
     else if((rcd=nco_inq_dimid_flg(in_id,"nCells",&dmn_id_col)) == NC_NOERR) col_nm_in=strdup("nCells"); /* MPAS-O/I */
     else if((rcd=nco_inq_dimid_flg(in_id,"nEdges",&dmn_id_col)) == NC_NOERR) col_nm_in=strdup("nEdges"); /* MPAS-O/I */
     else if((rcd=nco_inq_dimid_flg(in_id,"ncol_d",&dmn_id_col)) == NC_NOERR) col_nm_in=strdup("ncol_d"); /* EAM dynamics grid */
-    else if((rcd=nco_inq_dimid_flg(in_id,"ncol_p",&dmn_id_col)) == NC_NOERR) col_nm_in=strdup("ncol_d"); /* EAM physics grid */
+    else if((rcd=nco_inq_dimid_flg(in_id,"ncol_p",&dmn_id_col)) == NC_NOERR) col_nm_in=strdup("ncol_p"); /* EAM physics grid */
     else if((rcd=nco_inq_dimid_flg(in_id,"sounding_id",&dmn_id_col)) == NC_NOERR) col_nm_in=strdup("sounding_id"); /* OCO2 */
     /* 20180605: Database matches to above names may be false-positives
        ALM/CLM/CTSM/ELM store all possible dimension names that archived variables could use


=====================================
src/nco/nco_scm.c
=====================================
@@ -205,10 +205,10 @@ nco_lbr_vrs_prn(void) /* [fnc] Print netCDF library version */
 const char * /* O [sng] Mnemonic that describes current NCO version */
 nco_nmn_get(void) /* [fnc] Return mnemonic that describes current NCO version */
 { 
-  /* Purpose: Return mnemonic describing current NCO version 
+  /* Purpose: Return mnemonic describing current NCO version
      20191221: ncremap/ncclimo print left quote and first word of this string, so one-word strings look best 
      20200117: fixed this limitation, multi-word versions work fine */
-  return "Guerilla Poetry";
+  return "Mauna Loa";
 } /* !nco_nmn_get() */
 
 void



View it on GitLab: https://salsa.debian.org/debian-gis-team/nco/-/commit/59bdc55c915e0cccb04697c1ebb15878bf2a2142

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/nco/-/commit/59bdc55c915e0cccb04697c1ebb15878bf2a2142
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20221129/bebc78b0/attachment-0001.htm>


More information about the Pkg-grass-devel mailing list