[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