[Git][debian-gis-team/nco][upstream] New upstream version 5.2.2
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Sat Mar 23 06:43:09 GMT 2024
Bas Couwenberg pushed to branch upstream at Debian GIS Project / nco
Commits:
bd579124 by Bas Couwenberg at 2024-03-23T07:34:07+01:00
New upstream version 5.2.2
- - - - -
30 changed files:
- CMakeLists.txt
- bld/Makefile
- bld/nco.spec
- bld/nco_dst.pl
- configure
- configure.ac
- configure.eg
- data/Makefile.am
- data/Makefile.in
- + data/ncchecker
- data/ncclimo
- data/ncremap
- debian/changelog
- doc/ANNOUNCE
- doc/ChangeLog
- doc/VERSION
- doc/debian.txt
- doc/index.shtml
- doc/nco.texi
- man/Makefile.am
- man/Makefile.in
- + man/ncchecker.1
- man/ncremap.1
- src/nco++/Makefile.old
- src/nco/nco.h
- src/nco/nco_ctl.c
- src/nco/nco_grp_utl.c
- src/nco/nco_mss_val.c
- src/nco/nco_rgr.c
- src/nco/nco_scm.c
Changes:
=====================================
CMakeLists.txt
=====================================
@@ -914,8 +914,8 @@ endif()
set(PERMISSIONS_DEFAULT OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
message("-- Building ${nco_targets}")
install(TARGETS ${nco_targets} RUNTIME DESTINATION . PERMISSIONS ${PERMISSIONS_DEFAULT})
-install(FILES data/ncremap data/ncclimo data/ncz2psx DESTINATION . PERMISSIONS ${PERMISSIONS_DEFAULT})
-message("-- Installing data/ncremap, data/ncclimo, data/ncz2psx to: " ${CMAKE_INSTALL_PREFIX})
+install(FILES data/ncremap data/ncclimo data/ncz2psx data/ncchecker DESTINATION . PERMISSIONS ${PERMISSIONS_DEFAULT})
+message("-- Installing data/ncremap, data/ncclimo, data/ncz2psx, data/ncchecker to: " ${CMAKE_INSTALL_PREFIX})
#//////////////////////////
# ncea->ncra
=====================================
bld/Makefile
=====================================
@@ -442,7 +442,7 @@ else
GSL_INC_FLG := $(shell ${GSL_CONFIG} --cflags)
endif # endif GSL_INC
ifdef GSL_LIB
- GSL_LIB_FLG := -L${GSL_LIB} -lgsl
+ GSL_LIB_FLG := -L${GSL_LIB} -lgsl -lgslcblas
else
GSL_LIB_FLG := $(shell ${GSL_CONFIG} --libs)
endif # endif GSL_LIB
@@ -551,7 +551,7 @@ CPP_PTH := $(foreach dir,${MDL_PTH},-I${dir})
# Variables having to do with binary executables created by module
MDL_BIN_TRG := ncap ncatted ncbo ncecat ncflint ncks ncpdq ncra ncrename ncwa # NCO binary targets
MDL_BIN_SYM_LNK := ncdiff ncea nces ncrcat # Symbolic links
-MDL_BIN_SPT := ncclimo ncremap ncz2psx # Scripts
+MDL_BIN_SPT := ncclimo ncremap ncz2psx ncchecker # Scripts
ifeq (${MPI},Y)
# MDL_MPI_TRG := mpncbo mpncecat mpncflint mpncpdq mpncra mpncwa # MPI binary targets
MDL_MPI_TRG := # MPI binary targets
@@ -1772,6 +1772,9 @@ endif
ncz2psx: ${MY_BIN_DIR}/ncz2psx
${MY_BIN_DIR}/ncz2psx: ${MY_DAT_DIR}/ncz2psx
/bin/cp -f ${MY_DAT_DIR}/ncz2psx ${MY_BIN_DIR}
+ncchecker: ${MY_BIN_DIR}/ncchecker
+${MY_BIN_DIR}/ncchecker: ${MY_DAT_DIR}/ncchecker
+ /bin/cp -f ${MY_DAT_DIR}/ncchecker ${MY_BIN_DIR}
bin: ${MDL_BIN_TRG} ${MDL_BIN_SPT}
binclean: bin_cln
bin_cln:
=====================================
bld/nco.spec
=====================================
@@ -2,17 +2,17 @@
# http://cvs.fedoraproject.org/viewvc/devel/nco/nco.spec?view=co
Name: nco
-Version: 5.2.0
+Version: 5.2.2
Release: 1%{?dist}
Summary: Programs that manipulate netCDF files
Group: Applications/Engineering
License: BSD
URL: http://nco.sf.net/
-# Obtain NCO version 5.2.0-1 tar.gz from Sourceforge using CVS:
+# Obtain NCO version 5.2.2-1 tar.gz from Sourceforge using CVS:
# cvs -d:pserver:anonymous at nco.cvs.sf.net:/cvsroot/nco login
-# cvs -z3 -d:pserver:anonymous at nco.cvs.sf.net:/cvsroot/nco co -r nco-5.2.0-1 -d nco-%{version} nco
-# tar czf nco-%{version}.tar.gz --exclude='nco-5.2.0/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.2.2-1 -d nco-%{version} nco
+# tar czf nco-%{version}.tar.gz --exclude='nco-5.2.2/debian*' --exclude='.cvsignore' --exclude=ncap_lex.c --exclude='ncap_yacc.[ch]' ./nco-%{version}
Source0: nco-%{version}.tar.gz
#Patch0: nco_install_C_headers.patch
#Patch1: nco_find_udunits-dat.patch
@@ -108,6 +108,9 @@ fi
# %{_libdir}/libnco++.so
%changelog
+* Fri Mar 22 2024 Charlie Zender <zender at uci.edu> - 5.2.2-1
+- new upstream 5.2.2
+
* Sun Feb 18 2024 Charlie Zender <zender at uci.edu> - 5.2.1-1
- new upstream 5.2.1
=====================================
bld/nco_dst.pl
=====================================
@@ -5,20 +5,20 @@
# Usage:
# Export tagged, public versions
-# /usr/bin/scp ${DATA}/nco-5.2.1.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
-
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln nco-5.2.1 # Build, do not release on SF
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --sf nco-5.2.1 # Build, release on SF
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --nst_all nco-5.2.1 # Install, do not build
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --nst_all nco-5.2.1 # Build and install
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_cnt nco-5.2.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_prs nco-5.2.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cgd_cnt nco-5.2.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cray_prs nco-5.2.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --bbl_cnt nco-5.2.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --blk_cnt nco-5.2.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --dat_cnt nco-5.2.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --ute_prs nco-5.2.1
+# /usr/bin/scp ${DATA}/nco-5.2.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.2.2 # Build, do not release on SF
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --sf nco-5.2.2 # Build, release on SF
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --nst_all nco-5.2.2 # Install, do not build
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --nst_all nco-5.2.2 # Build and install
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_cnt nco-5.2.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_prs nco-5.2.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cgd_cnt nco-5.2.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cray_prs nco-5.2.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --bbl_cnt nco-5.2.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --blk_cnt nco-5.2.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --dat_cnt nco-5.2.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --ute_prs nco-5.2.2
# Export daily snapshot
# ${HOME}/nco/bld/nco_dst.pl --dbg=2
@@ -256,7 +256,7 @@ if($bld){
# Set up FTP server
chdir $dst_pth_pfx or die "$prg_nm: ERROR unable to chdir to $dst_pth_pfx: $!\n"; # $! is system error string
cmd_prc("$cp_cmd $doc_fl ./$dst_vrs/doc"); # Copy derived documentation to source directory
- cmd_prc("$tar_cmd cvzf $dst_fl --exclude='nco-5.2.1/debian*' --exclude='.cvsignore' --exclude=ncap_lex.c --exclude=ncap_yacc.[ch] ./$dst_vrs"); # Create gzipped tarfile
+ cmd_prc("$tar_cmd cvzf $dst_fl --exclude='nco-5.2.2/debian*' --exclude='.cvsignore' --exclude=ncap_lex.c --exclude=ncap_yacc.[ch] ./$dst_vrs"); # Create gzipped tarfile
cmd_prc("$rsh_cmd $www_mch $rm_cmd $www_drc/src/$dst_fl"); # Remove any distribution with same name
if($dly_snp){cmd_prc("$rsh_cmd $www_mch $rm_cmd -r $www_drc/src/nco-????????.tar.gz");} # Remove previous daily snapshots from WWW server
cmd_prc("$rcp_cmd $dst_fl $www_mch:$www_drc/src"); # Copy local tarfile to WWW server
=====================================
configure
=====================================
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.72 for NCO netCDF Operators 5.2.1.
+# Generated by GNU Autoconf 2.72 for NCO netCDF Operators 5.2.2.
#
# Report bugs to <nco-bugs at lists.sourceforge.net>.
#
@@ -616,8 +616,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='NCO netCDF Operators'
PACKAGE_TARNAME='nco'
-PACKAGE_VERSION='5.2.1'
-PACKAGE_STRING='NCO netCDF Operators 5.2.1'
+PACKAGE_VERSION='5.2.2'
+PACKAGE_STRING='NCO netCDF Operators 5.2.2'
PACKAGE_BUGREPORT='nco-bugs at lists.sourceforge.net'
PACKAGE_URL=''
@@ -1424,7 +1424,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.2.1 to adapt to many kinds of systems.
+'configure' configures NCO netCDF Operators 5.2.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1496,7 +1496,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of NCO netCDF Operators 5.2.1:";;
+ short | recursive ) echo "Configuration of NCO netCDF Operators 5.2.2:";;
esac
cat <<\_ACEOF
@@ -1668,7 +1668,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-NCO netCDF Operators configure 5.2.1
+NCO netCDF Operators configure 5.2.2
generated by GNU Autoconf 2.72
Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2447,7 +2447,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.2.1, which was
+It was created by NCO netCDF Operators $as_me 5.2.2, which was
generated by GNU Autoconf 2.72. Invocation command line was
$ $0$ac_configure_args_raw
@@ -4366,7 +4366,7 @@ fi
# Define the identity of the package.
PACKAGE='nco'
- VERSION='5.2.1'
+ VERSION='5.2.2'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -22890,7 +22890,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.2.1, which was
+This file was extended by NCO netCDF Operators $as_me 5.2.2, which was
generated by GNU Autoconf 2.72. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -22958,7 +22958,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.2.1
+NCO netCDF Operators config.status 5.2.2
configured by $0, generated by GNU Autoconf 2.72,
with options \\"\$ac_cs_config\\"
=====================================
configure.ac
=====================================
@@ -56,7 +56,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.2.1],[nco-bugs at lists.sourceforge.net],[nco])
+AC_INIT([NCO netCDF Operators],[5.2.2],[nco-bugs at lists.sourceforge.net],[nco])
# Print GNU copyright in configure script
AC_COPYRIGHT
=====================================
configure.eg
=====================================
@@ -313,7 +313,7 @@ make install
# Latest sysadmin-compiled module usage:
# Personal recipe last modified: 20231026 (Use ~/anaconda rather than E3SMU)
# Personal recipe last borken: 20231026
-# Personal recipe last successful: 20231026
+# Personal recipe last successful: 20240221
# Current build error: 20231019 "configure: error: cannot find netCDF library"
# NB: aims4 and acme1 only accept connections from whitelisted domains (e.g., uci.edu)
cd ~/nco;/bin/rm -f *.foo;make distclean
@@ -331,18 +331,18 @@ scp nco.configure.foo nco.config.log.foo nco.libtool.foo nco.make.foo dust.ess.u
# Sysadmin upgrade request: https://www.olcf.ornl.gov/support/submit-ticket
# 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 modified: 20240221 (fix E3SMU paths, use anaconda, not bld/Makefile)
# Personal recipe last borken: 20231129 /gpfs/alpine/cli115/proj-shared/e3sm-unified/base/envs/e3sm_unified_1.9.1_login/lib/libnetcdf.so: undefined reference to `H5Pset_dxpl_mpio'
-# ../src/nco/nco_flt.c: In function ‘nco_qnt_mtd’: error: too many decimal points in number in expansion of macro ‘NCO_VERSION’
-# Personal recipe last successful: 20230512
+# Personal recipe last successful: 20240220
export LINUX_CC='gcc -std=c99 -pedantic -D_DEFAULT_SOURCE'
export LINUX_CXX='g++ -std=c++11'
export LINUX_FC='gfortran'
-export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lustre/orion/cli115/world-shared/e3sm-unified/base/envs/e3sm_unified_latest/lib
-export NETCDF_ROOT=/lustre/orion/cli115/world-shared/e3sm-unified/base/envs/e3sm_unified_latest
-export PATH=${PATH}:/lustre/orion/cli115/world-shared/e3sm-unified/base/envs/e3sm_unified_latest/bin
+export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/ccs/proj/cli115/software/e3sm-unified/base/envs/e3sm_unified_latest/lib
+export NETCDF_ROOT=/ccs/proj/cli115/software/e3sm-unified/base/envs/e3sm_unified_latest
+export PATH=${PATH}:/ccs/proj/cli115/software/e3sm-unified/base/envs/e3sm_unified_latest/bin
cd ~/nco;git reset --hard origin/master
-cd ~/nco/bld;make ANTLR_ROOT=${HOME} ANTLR_LIB=${MY_LIB_DIR} NETCDF_ROOT='/lustre/orion/cli115/world-shared/e3sm-unified/base/envs/e3sm_unified_latest' OPTS=D OMP=Y allinone;cd -
+cd ~/nco;CC=${LINUX_CC} CXX=${LINUX_CXX} NETCDF_ROOT=${HOME}/anaconda ./configure --disable-ccr --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.foo 2>&1
+# cd ~/nco/bld;make ANTLR_ROOT=${HOME} ANTLR_LIB=${MY_LIB_DIR} NETCDF_ROOT=${NETCDF_ROOT} OPTS=D OMP=Y allinone;cd -
# !Andes
# gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on blues/anvil
@@ -416,10 +416,10 @@ scp nco.configure.foo nco.config.log.foo nco.libtool.foo nco.make.foo dust.ess.u
# Latest ticket to build NCO: 20190525 ICS-40n99 (closed in 1 day!)
# Latest sysadmin-compiled module usage: module add nco # 20190524 default version is 4.7.9
# Personal recipe last modified: 20230917 (use conda gcc/g++ compilers so new libnetcdf links to C++ to resolve libicuuc dependencies)
-# Personal recipe last borken: 20231031 unable to link to conda libnetcdf due to GLIBC_PRIVATE errors. Seems to use /usr/bin/ld instead of conda?
+# Personal recipe last borken: 20231031 unable to link to conda libnetcdf due to GLIBC_PRIVATE errors. Seems to use /usr/bin/ld instead of conda? 20240221 error: cannot find netCDF library
# Personal recipe last successful: 20230917
module purge
-cd ~/nco;ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' NETCDF_ROOT="${HOME}/anaconda" ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.foo 2>&1
+cd ~/nco;CC=${LINUX_CC} CXX=${LINUX_CXX} NETCDF_ROOT=${HOME}/anaconda ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.foo 2>&1
cd ~/nco;ANTLR_ROOT=${HOME} CC='gcc' CXX='g++' ./configure --prefix=${HOME} --bindir=${MY_BIN_DIR} --datadir=${HOME}/nco/data --libdir=${MY_LIB_DIR} --mandir=${HOME}/nco/man > nco.configure.foo 2>&1
/bin/cp -f config.log nco.config.log.foo
/bin/cp -f libtool nco.libtool.foo
@@ -453,8 +453,8 @@ make install >> nco.make.foo 2>&1
# Sysadmin upgrade request: cislhelp at ucar.edu # NCAR Maintainer = Pat Nichols
# Latest ticket to build NCO: 216373 on 20180413
# Latest sysadmin-compiled module usage: module load netcdf/4.9.2 module load nco/5.1.6 # 20240107
-# Personal recipe last modified: 20240107
-# Personal recipe last borken: 20240107 (unable to compile antlr)
+# Personal recipe last modified: 20240107 (add -lgslcblas to bld/Makefile)
+# Personal recipe last borken: 20240107 (NCO base works, ncap2 unable to link to antlr)
# Personal recipe last successful: 20231103
# Derecho GNU:
module purge
@@ -484,12 +484,12 @@ export LINUX_FC='gfortran'
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HOME}/anaconda/lib
export NETCDF_ROOT=${HOME}/anaconda
export PATH=${PATH}:${HOME}/anaconda/bin
-#export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lustre/orion/cli115/world-shared/e3sm-unified/base/envs/e3sm_unified_latest/lib
-#export NETCDF_ROOT=/lustre/orion/cli115/world-shared/e3sm-unified/base/envs/e3sm_unified_latest
-#export PATH=${PATH}:/lustre/orion/cli115/world-shared/e3sm-unified/base/envs/e3sm_unified_latest/bin
+#export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/ccs/proj/cli115/software/e3sm-unified/base/envs/e3sm_unified_latest/lib
+#export NETCDF_ROOT=/ccs/proj/cli115/software/e3sm-unified/base/envs/e3sm_unified_latest
+#export PATH=${PATH}:/ccs/proj/cli115/software/e3sm-unified/base/envs/e3sm_unified_latest/bin
cd ~/nco;git reset --hard origin/master
cd ~/nco/bld;make ANTLR_ROOT=${HOME}/anaconda ANTLR_LIB=${HOME}/anaconda NETCDF_ROOT=${HOME}/anaconda OPTS=D OMP=Y allinone;cd -
-cd ~/nco/bld;make ANTLR_ROOT=${HOME} ANTLR_LIB=${MY_LIB_DIR} NETCDF_ROOT='/lustre/orion/cli115/world-shared/e3sm-unified/base/envs/e3sm_unified_latest' OPTS=D OMP=Y allinone;cd -
+cd ~/nco/bld;make ANTLR_ROOT=${HOME} ANTLR_LIB=${MY_LIB_DIR} NETCDF_ROOT='/ccs/proj/cli115/software/e3sm-unified/base/envs/e3sm_unified_latest' OPTS=D OMP=Y allinone;cd -
# !Frontier
# gcc/g++ Zender uses this to develop/install/update netCDF4-enabled NCO in personal directories on Perlmutter with GNU:
=====================================
data/Makefile.am
=====================================
@@ -117,7 +117,7 @@ all: ${test_data} ${test_symlink} ${test_data_netCDF4} ${test_zarr_data} ${test_
# Autoconf/automake instructions for scripts:
# https://www.gnu.org/software/automake/manual/html_node/Scripts.html
-dist_bin_SCRIPTS = ncclimo ncremap ncz2psx
+dist_bin_SCRIPTS = ncclimo ncremap ncz2psx ncchecker
EXTRA_DIST = big.cdl dsm.cdl hdn.cdl mrd.cdl in.cdl in_grp.cdl in_grp_1.cdl in_grp_2.cdl in_grp_3.cdl in_grp_4.cdl in_grp_5.cdl in_grp_6.cdl in_grp_7.cdl in_grp_8.cdl in_1.cdl in_2.cdl cmip5.cdl obs.cdl mdl_1.cdl split.cdl buggy.cdl in_rec_zero.cdl ncap.in ncap.in2 ncap2.in tst.nco
=====================================
data/Makefile.in
=====================================
@@ -313,7 +313,7 @@ test_zarr_symlink = h0001 h0002 h0003
# Autoconf/automake instructions for scripts:
# https://www.gnu.org/software/automake/manual/html_node/Scripts.html
-dist_bin_SCRIPTS = ncclimo ncremap ncz2psx
+dist_bin_SCRIPTS = ncclimo ncremap ncz2psx ncchecker
EXTRA_DIST = big.cdl dsm.cdl hdn.cdl mrd.cdl in.cdl in_grp.cdl in_grp_1.cdl in_grp_2.cdl in_grp_3.cdl in_grp_4.cdl in_grp_5.cdl in_grp_6.cdl in_grp_7.cdl in_grp_8.cdl in_1.cdl in_2.cdl cmip5.cdl obs.cdl mdl_1.cdl split.cdl buggy.cdl in_rec_zero.cdl ncap.in ncap.in2 ncap2.in tst.nco
# Automake manual section 14:
=====================================
data/ncchecker
=====================================
@@ -0,0 +1,528 @@
+#!/usr/bin/env bash
+
+# Purpose: Check data file against DIWG (and, eventually, other) recommendations
+
+# Copyright (C) 2023--present Charlie Zender, ... (Contribuing DIWG members---Add your names!)
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the 3-Clause BSD License for more details.
+
+# Prerequisites: Bash, NCO
+# Script could use other shells, e.g., dash (Debian default) after rewriting function definitions and loops
+# Debug with 'bash -x ncchecker --dbg=dbg_lvl' where 0 <= dbg_lvl <= 5
+
+# Insta-install:
+# scp ~/diwg/ncchecker dust.ess.uci.edu:bin
+# scp dust.ess.uci.edu:bin/ncchecker ${MY_BIN_DIR}
+
+# Set script name, directory, PID, run directory
+drc_pwd=${PWD}
+# Security: Explicitly unset IFS before wordsplitting, so Bash uses default IFS=<space><tab><newline>
+unset IFS
+# Set these before 'module' command which can overwrite ${BASH_SOURCE[0]}
+# NB: dash supports $0 syntax, not ${BASH_SOURCE[0]} syntax
+# http://stackoverflow.com/questions/59895/can-a-bash-script-tell-what-directory-its-stored-in
+spt_src="${BASH_SOURCE[0]}"
+[[ -z "${spt_src}" ]] && spt_src="${0}" # Use ${0} when BASH_SOURCE is unavailable (e.g., dash)
+while [ -h "${spt_src}" ]; do # Recursively resolve ${spt_src} until file is no longer a symlink
+ drc_spt="$( cd -P "$( dirname "${spt_src}" )" && pwd )"
+ spt_src="$(readlink "${spt_src}")"
+ [[ ${spt_src} != /* ]] && spt_src="${drc_spt}/${spt_src}" # If ${spt_src} was relative symlink, resolve it relative to path where symlink file was located
+done
+cmd_ln="${spt_src} ${@}"
+drc_spt="$( cd -P "$( dirname "${spt_src}" )" && pwd )"
+spt_nm=$(basename ${spt_src}) # [sng] Script name (unlike $0, ${BASH_SOURCE[0]} works well with 'source <script>')
+spt_pid=$$ # [nbr] Script PID (process ID)
+
+# Original Setup (prior to merger with NCO):
+# git clone git at github.com:diwg/diwg ~/diwg
+# ln -s ~/diwg/diwg_chk ~/bin/diwg_chk
+# ln -s ~/diwg/diwg_chk ~/sh/diwg_chk
+
+# Debugging and Benchmarking:
+# ncchecker ~/nco/data/in.nc ~/nco/data/in_4.nc
+# ncchecker ~/data/bm/elmv2_ne30pg2l15.nc
+# ncchecker ~/data/hdf/MODIS_L2N_20140304T1120.nc > ~/diwg.txt 2>&1 &
+# ncchecker ~/data/hdf/OMI-Aura_L2-OMAERUV_2013m1004t2338-o49057_v003-2013m1005t053932.nc
+
+# Production usage:
+# ncchecker --dbg=1 ~/nco/data/in_4.nc > ~/diwg.txt 2>&1 &
+# screen # Start screen
+# ncchecker --dbg=1 ~/nco/data/in_4.nc > ~/diwg.txt 2>&1 &
+# Ctl-A D # Detach screen
+# tail ~/diwg.txt # Monitor progress
+# screen -ls # List screens
+# screen -r <ID> # Re-attach screen
+
+# Configure paths at High-Performance Computer Centers (HPCCs) based on ${HOSTNAME}
+if [ -z "${HOSTNAME}" ]; then
+ if [ -f /bin/hostname ] && [ -x /bin/hostname ]; then
+ export HOSTNAME=`/bin/hostname`
+ elif [ -f /usr/bin/hostname ] && [ -x /usr/bin/hostname ]; then
+ export HOSTNAME=`/usr/bin/hostname`
+ fi # !hostname
+fi # HOSTNAME
+
+# Set NCO version and directory
+nco_exe=`which ncks`
+if [ -z "${nco_exe}" ]; then
+ echo "${spt_nm}: ERROR Unable to find NCO, \${nco_exe} = ${nco_exe}"
+ echo "${spt_nm}: HINT Carefully examine your environment setup (e.g., .bashrc) to avoid inadvertently overriding (with, e.g., conda-initialization) paths intended to be provided by an analysis-package environment (e.g., Anaconda)"
+ exit 1
+fi # !nco_exe
+# StackOverflow method finds NCO directory
+while [ -h "${nco_exe}" ]; do
+ drc_nco="$( cd -P "$( dirname "${nco_exe}" )" && pwd )"
+ nco_exe="$(readlink "${nco_exe}")"
+ [[ ${nco_exe} != /* ]] && nco_exe="${drc_nco}/${nco_exe}"
+done
+drc_nco="$( cd -P "$( dirname "${nco_exe}" )" && pwd )"
+nco_vrs=$(ncks --version 2>&1 > /dev/null | grep NCO | awk '{print $5}')
+nco_sng=$(ncks --version 2>&1 > /dev/null | grep NCO | awk -F '"' '{print $2}')
+
+# 20190218: Die quickly when NCO is found yet cannot run, e.g., due to linker errors
+if [ -z "${nco_vrs}" ]; then
+ echo "${spt_nm}: ERROR ${nco_exe} dies with error message on next line:"
+ $(ncks --version)
+ exit 1
+fi # !nco_vrs
+lbr_vrs=$(ncks --library 2>&1 > /dev/null | awk '{print $6}')
+
+# When running in a terminal window (not in an non-interactive batch queue)...
+if [ -n "${TERM}" ]; then
+ # Set fonts for legibility
+ if [ -x /usr/bin/tput ] && tput setaf 1 &> /dev/null; then
+ fnt_bld=`tput bold` # Bold
+ fnt_nrm=`tput sgr0` # Normal
+ fnt_rvr=`tput smso` # Reverse
+ fnt_tlc=`tput sitm` # Italic
+ else
+ fnt_bld="\e[1m" # Bold
+ fnt_nrm="\e[0m" # Normal
+ fnt_rvr="\e[07m" # Reverse
+ fnt_tlc="\e[3m" # Italic
+ fi # !tput
+fi # !TERM
+
+# Defaults for command-line options and some derived variables
+# Modify these defaults to save typing later
+caseid='elmforc.ERA5.c2018.0.25d' # [sng] Case ID
+dbg_lvl=0 # [nbr] Debugging level
+drc_in='' # [sng] Input file directory
+drc_in_xmp="${DATA}/era5/data_raw/1979" # [sng] Input file directory for examples
+drc_out='' # [sng] Output file directory
+drc_out_xmp="${DATA}/era5/data_out" # [sng] Output file directory for examples
+inp_aut='No' # [sng] Input file list automatically generated
+inp_glb='No' # [sng] Input file list from globbing directory
+inp_psn='No' # [sng] Input file list from positional arguments
+inp_std='No' # [sng] Input file list from stdin
+nco_opt='' # [sng] NCO options (e.g., '-6 -t 1')
+tst_flg='Yes' # [flg] Trigger test-selection code
+tst_lst='bnd,chr,mss,nan,tm,xtn' # [sng] Tests to conduct (subset of bnd,chr,mss,nan,tm,xtn)
+vrs_prn='No' # [sng] Print version information
+
+# NCO filters documented in http://nco.sf.net/nco.html#filter
+function ncvarlst { ncks --trd -m ${1} | grep -E ': type' | cut -f 1 -d ' ' | sed 's/://' | sort ; }
+function ncdmnlst { ncks --cdl -m ${1} | cut -d ':' -f 1 | cut -d '=' -s -f 1 ; }
+
+function fnc_usg_prn { # NB: dash supports fnc_nm (){} syntax, not function fnc_nm{} syntax
+ # Print usage
+ printf "${fnt_rvr}Basic usage:\n${fnt_nrm}${fnt_bld}${spt_nm} in.nc${fnt_nrm} # Default settings\n"
+ printf "${fnt_bld}${spt_nm} -t bnd,nan${fnt_nrm} # Short option syntax with explicit tests\n"
+ printf "${fnt_bld}${spt_nm} --tst=bnd,nan${fnt_nrm} # Long options with with explicit tests\n"
+ echo "Command-line options [long-option synonyms in ${fnt_tlc}italics${fnt_nrm}]:"
+# echo "${fnt_rvr}-3${fnt_nrm} Output file format CLASSIC (netCDF3 classic CDF1) [${fnt_tlc}fl_fmt, file_format=classic${fnt_nrm}]"
+# echo "${fnt_rvr}-4${fnt_nrm} Output file format NETCDF4 (netCDF4 extended HDF5) [${fnt_tlc}fl_fmt, file_format=netcdf4${fnt_nrm}]"
+# echo "${fnt_rvr}-5${fnt_nrm} Output file format 64BIT_DATA (netCDF3/PnetCDF CDF5) [${fnt_tlc}fl_fmt, file_format=64bit_data${fnt_nrm}]"
+# echo "${fnt_rvr}-6${fnt_nrm} Output file format 64BIT_OFFSET (netCDF3 64bit CDF2) [${fnt_tlc}fl_fmt, file_format=64bit_offset${fnt_nrm}]"
+# echo "${fnt_rvr}-7${fnt_nrm} Output file format NETCDF4_CLASSIC (netCDF4 classic HDF5) [${fnt_tlc}fl_fmt, file_format=netcdf4_classic${fnt_nrm}]"
+# echo "${fnt_rvr}-c${fnt_nrm} ${fnt_bld}caseid${fnt_nrm} Case ID string to generate output filenames (default ${fnt_bld}${caseid}${fnt_nrm}) [${fnt_tlc}caseid, case_id, case${fnt_nrm}]"
+ echo "${fnt_rvr}-d${fnt_nrm} ${fnt_bld}dbg_lvl${fnt_nrm} Debug level (default ${fnt_bld}${dbg_lvl}${fnt_nrm}) [${fnt_tlc}dbg_lvl, dbg, debug, debug_level${fnt_nrm}]"
+ echo "${fnt_rvr}-i${fnt_nrm} ${fnt_bld}drc_in${fnt_nrm} Input directory (default ${fnt_bld}${drc_in}${fnt_nrm}) [${fnt_tlc}drc_in, in_drc, dir_in, in_dir, input${fnt_nrm}]"
+# echo "${fnt_rvr}-j${fnt_nrm} ${fnt_bld}job_nbr${fnt_nrm} Job simultaneity for parallelism (default ${fnt_bld}${job_nbr}${fnt_nrm}) [${fnt_tlc}job_nbr, job_number, jobs${fnt_nrm}]"
+# echo "${fnt_rvr}-o${fnt_nrm} ${fnt_bld}drc_out${fnt_nrm} Output directory (default ${fnt_bld}${drc_out}${fnt_nrm}) [${fnt_tlc}drc_out, out_drc, dir_out, out_dir, output${fnt_nrm}]"
+ echo "${fnt_rvr}-p${fnt_nrm} ${fnt_bld}par_typ${fnt_nrm} Parallelism type (default ${fnt_bld}${par_typ}${fnt_nrm}) [${fnt_tlc}par_typ, par_md, parallel_type, parallel_mode, parallel${fnt_nrm}] [${fnt_tlc}serial | background | mpi${fnt_nrm}]"
+# echo " ${fnt_bld}--tpd_out${fnt_nrm} Timesteps-per-day in output (default ${fnt_bld}${tpd_out}${fnt_nrm}) [${fnt_tlc}tpd_out, tpd, timesteps_per_day${fnt_nrm}]"
+ echo " ${fnt_bld}--tests${fnt_nrm} Tests to conduct ('none' means none) (default ${fnt_bld}${tst_lst}${fnt_nrm} [${fnt_tlc}tst_lst, tst, test_list${fnt_nrm}]"
+ echo "${fnt_rvr}-v${fnt_nrm} ${fnt_bld}var_lst${fnt_nrm} Variable list (empty means all) (default ${fnt_bld}${var_lst}${fnt_nrm}) [${fnt_tlc}var_lst, variable_list, var, vars, variable, variables${fnt_nrm}]"
+ echo " ${fnt_bld}--version${fnt_nrm} Version and configuration information [${fnt_tlc}version, vrs, config, configuration, cnf${fnt_nrm}]"
+ echo "${fnt_rvr}-x${fnt_nrm} ${fnt_bld}--xcl_var${fnt_nrm} Exclude rather than extract var_lst [${fnt_tlc}xcl_var, xcl, exclude, exclude_variables${fnt_nrm}]"
+ printf "\n"
+ printf "${fnt_rvr}Examples:${fnt_nrm}\n"
+ printf "${fnt_bld}${spt_nm} in1.nc in2.nc${fnt_nrm} # Run all tests on two files\n"
+ printf "${fnt_bld}${spt_nm} -v var1,var2 in1.nc # Check only two variables\n"
+ printf "${fnt_bld}${spt_nm} *.nc${fnt_nrm} # Glob input files via wildcard\n"
+ printf "${fnt_bld}ls *.nc | ${spt_nm}${fnt_nrm} # Input files via stdin\n"
+ printf "${fnt_bld}${spt_nm} --dbg=2 *.nc${fnt_nrm} # Debug ${spt_nm}\n"
+ printf "${fnt_bld}${spt_nm} --tests=nan,mss *.nc # Select only two tests\n"
+ printf "${fnt_bld}${spt_nm} --tests=xtn,tm,nan,mss,chr,bnd *.nc${fnt_nrm} # Change test ordering\n"
+ printf "${fnt_bld}${spt_nm} "file://${HOME}/in_zarr4#mode=nczarr,file"${fnt_nrm} # Check Zarr object(s)\n"
+ printf "\nComplete documentation at http://nco.sf.net/nco.html#${spt_nm}\n\n"
+ exit 1
+} # !fnc_usg_prn()
+
+# Check argument number and complain accordingly
+arg_nbr=$#
+#printf "\ndbg: Number of arguments: ${arg_nbr}"
+if [ ${arg_nbr} -eq 0 ]; then
+ fnc_usg_prn
+fi # !arg_nbr
+
+# Parse command-line options:
+# http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-short-command-line-options (see method by Adam Katz)
+# http://tuxtweaks.com/2014/05/bash-getopts
+while getopts :34567c:d:f:i:o:p:s:v:x-: OPT; do
+ case ${OPT} in
+ 3) fl_fmt='3' ;; # File format
+ 4) fl_fmt='4' ;; # File format
+ 5) fl_fmt='5' ;; # File format
+ 6) fl_fmt='6' ;; # File format
+ 7) fl_fmt='7' ;; # File format
+ c) caseid="${OPTARG}" ;; # CASEID
+ d) dbg_lvl="${OPTARG}" ;; # Debugging level
+ f) fml_nm_usr="${OPTARG}" ;; # Family name
+ i) drc_in="${OPTARG}" ;; # Input directory
+ o) drc_out_usr="${OPTARG}" ;; # Output directory
+ p) par_typ="${OPTARG}" ;; # Parallelism type
+ v) var_lst="${OPTARG}" ;; # Variables
+ x) xcl_flg='Yes' ;; # Exclude variable list
+ -) LONG_OPTARG="${OPTARG#*=}"
+ case ${OPTARG} in
+ # Hereafter ${OPTARG} is long argument key, and ${LONG_OPTARG}, if any, is long argument value
+ # Long options with no argument, no short option counterpart
+ # Long options with argument, no short option counterpart
+ # Long options with short counterparts, ordered by short option key
+ caseid=?* | case_id=?* | case=?* ) caseid="${LONG_OPTARG}" ;; # -c # CASEID
+ dbg_lvl=?* | dbg=?* | debug=?* | debug_level=?* ) dbg_lvl="${LONG_OPTARG}" ;; # -d # Debugging level
+ drc_in=?* | in_drc=?* | dir_in=?* | in_dir=?* | input=?* ) drc_in="${LONG_OPTARG}" ;; # -i # Input directory
+ drc_out=?* | out_drc=?* | dir_out=?* | out_dir=?* | output=?* ) drc_out_usr="${LONG_OPTARG}" ;; # -o # Output directory
+ fl_fmt=?* | fmt_out=?* | file_format=?* | format_out=?* ) fl_fmt="${LONG_OPTARG}" ;; # # Output file format
+ fml_nm=?* | fml=?* | family_name=?* | family=?* ) fml_nm_usr="${LONG_OPTARG}" ;; # -f # Family name
+ hrd_pth | hard_path | npo | nco_path_override ) hrd_pth='Yes' ;; # # Use hard-coded paths on known machines (intentional no-op because already handled prior to getopt())
+ hrd_pth=?* | hard_path=?* | npo=?* | nco_path_override=?* ) echo "No argument allowed for --${OPTARG switch}" >&2; exit 1 ;; # # Use hard-coded paths on known machines
+ job_nbr=?* | job_number=?* | jobs=?* ) job_usr="${LONG_OPTARG}" ;; # -j # Job simultaneity
+ par_typ=?* | par_md=?* | parallel_type=?* | parallel_mode=?* | parallel=?* ) par_typ="${LONG_OPTARG}" ;; # -p # Parallelism type
+ tests=?* | tst_lst=?* | tst=?* | test_list=?* ) tst_lst="${LONG_OPTARG}" ;; # # Tests to conduct
+ tpd_out=?* | tpd=?* | timesteps_per_day=?* ) tpd_usr="${LONG_OPTARG}" ;; # # Timesteps-per-day in output
+ var_lst=?* | variable_list=?* | var=?* | vars=?* | variable=?* | variables=?* ) var_lst="${LONG_OPTARG}" ;; # -v # Variables
+ version | vrs | config | configuration | cnf ) vrs_prn='Yes' ;; # # Print version information
+ version=?* | vrs=?* | config=?* | configuration=?* | cnf=?* ) echo "No argument allowed for --${OPTARG switch}" >&2; exit 1 ;; # # Print version information
+ xcl_var | xcl | exclude | exclude_variables ) xcl_flg='Yes' ;; # # Exclude rather than extract variable list
+ xcl_var=?* | xcl=?* | exclude=?* | exclude_variables=?* ) echo "No argument allowed for --${OPTARG switch}" >&2; exit 1 ;; # # Exclude rather than extract variable list
+ '' ) break ;; # "--" terminates argument processing
+ * ) printf "\nERROR: Unrecognized option ${fnt_bld}--${OPTARG}${fnt_nrm}\n" >&2; fnc_usg_prn ;;
+ esac ;; # !OPTARG
+ \?) # Unrecognized option
+ printf "\nERROR: Option ${fnt_bld}-${OPTARG}${fnt_nrm} not recognized\n" >&2
+ fnc_usg_prn ;;
+ esac # !OPT
+done # !getopts
+shift $((OPTIND-1)) # Advance one argument
+psn_nbr=$#
+if [ ${psn_nbr} -ge 1 ]; then
+ inp_psn='Yes'
+ # 20200430 Input files on command-line mean we need not check standard-input
+ std_chk='No'
+fi # !psn_nbr
+
+if [ ${vrs_prn} = 'Yes' ]; then
+ printf "${spt_nm}, runs DIWG recommendation compliance checks, version ${nco_vrs} \"${nco_sng}\"\n"
+ printf "Authors: \n"
+ printf "Config: ${spt_nm} script located in directory ${drc_spt}\n"
+ printf "Config: NCO binaries located in directory ${drc_nco}, linked to netCDF library version ${lbr_vrs}\n"
+ if [ "${hrd_pth_fnd}" = 'Yes' ]; then
+ printf "Config: Employ NCO machine-dependent hardcoded paths/modules for ${HOSTNAME}. (If desired, turn-off NCO hardcoded paths with \"export NCO_PATH_OVERRIDE=No\").\n"
+ else
+ printf "Config: No hardcoded machine-dependent path/module overrides. (If desired, turn-on NCO hardcoded paths at supported national labs with \"export NCO_PATH_OVERRIDE=Yes\").\n"
+ fi # !hrd_pth_fnd
+ exit 0
+fi # !vrs_prn
+
+# Determine mode first (this helps determine other defaults)
+if [ ${tst_lst} = 'none' ]; then
+ tst_nbr=0
+ tst_flg='No'
+fi # !tst_lst
+
+if [ -z "${drc_in}" ]; then
+ drc_in="${drc_pwd}"
+else # !drc_in
+ if [ ! -d "${drc_in}" ]; then
+ echo "${spt_nm}: ERROR specified input directory \"${drc_in}\" does not exist"
+ exit 1
+ fi # !drc_in
+ drc_in_usr='Yes'
+fi # !drc_in
+
+# 20170807 Custom tests (code borrowed from ncremap seasons (csn) treatment)
+if [ "${tst_flg}" = 'Yes' ]; then
+
+ # Standard test enumeration
+ # Index into test definition table
+ tst_idx_srt=0 # [idx] Starting index for test enumeration
+ tst_bnd=0
+ tst_chr=1
+ tst_mss=2
+ tst_nan=3
+ tst_tm=4
+ tst_xtn=5
+ tst_nbr_max=6 # [nbr] Maximum number of tests in definitions database
+
+ # Test abbreviations, uppercase
+ tst_abb[${tst_bnd}]='BND'
+ tst_abb[${tst_chr}]='CHR'
+ tst_abb[${tst_mss}]='MSS'
+ tst_abb[${tst_nan}]='NAN'
+ tst_abb[${tst_tm}]='TM'
+ tst_abb[${tst_xtn}]='XTN'
+
+ # Test abbreviations, lowercase
+ tst_abb_lc[${tst_bnd}]='bnd'
+ tst_abb_lc[${tst_chr}]='chr'
+ tst_abb_lc[${tst_mss}]='mss'
+ tst_abb_lc[${tst_nan}]='nan'
+ tst_abb_lc[${tst_tm}]='tm'
+ tst_abb_lc[${tst_xtn}]='xtn'
+
+ # Recommendation (i.e., short exhortation) in ESDS RFC Title
+ tst_rcm[${tst_bnd}]='Use CF Bounds Attributes'
+ tst_rcm[${tst_chr}]='Identifier names shall comply with this regular expression: [A-Za-z][A-Za-z0-9_]*'
+ tst_rcm[${tst_mss}]='Avoid use of the missing_value attribute in new Earth Science data products'
+ tst_rcm[${tst_nan}]='Earth Science data products should avoid using Not-a-Number (NaN) in any field values or as an indicator of missing or invalid data'
+ tst_rcm[${tst_tm}]='Use Double Precision When Archiving Time in Seconds Since a Specific Epoch'
+ tst_rcm[${tst_xtn}]='Files created with the HDF5, HDF-EOS5, or netCDF APIs should have filename extensions \"h5\", \"he5\", or \"nc\", respectively'
+
+ # ESDS RFC Recommendation Number
+ tst_rfc[${tst_bnd}]='2.3'
+ tst_rfc[${tst_chr}]='3.1'
+ tst_rfc[${tst_mss}]='4.2'
+ tst_rfc[${tst_nan}]='3.7'
+ tst_rfc[${tst_tm}]='4.11'
+ tst_rfc[${tst_xtn}]='3.8'
+
+ # ESDS RFC Recommendation URL
+ tst_url[${tst_bnd}]='https://wiki.earthdata.nasa.gov/pages/viewpage.action?pageId=182296291'
+ tst_url[${tst_chr}]='https://wiki.earthdata.nasa.gov/display/ESDSWG/Character+Set+for+User-Defined+Group%2C+Variable%2C+and+Attribute+names'
+ tst_url[${tst_mss}]='https://wiki.earthdata.nasa.gov/display/ESDSWG/Avoid+Use+of+the+missing_value+Attribute'
+ tst_url[${tst_nan}]='https://wiki.earthdata.nasa.gov/display/ESDSWG/Not-a-Number+%28NaN%29+Value'
+ tst_url[${tst_tm}]='https://wiki.earthdata.nasa.gov/display/ESDSWG/Use+Double+Precision+When+Archiving+Time+in+Seconds+Since+a+Specific+Epoch'
+ tst_url[${tst_xtn}]='https://wiki.earthdata.nasa.gov/pages/viewpage.action?pageId=182297715'
+
+ # Test names "in English" (complete phrase "Test checks that ___")
+ tst_ngl[${tst_bnd}]='coordinates have bounds attributes'
+ tst_ngl[${tst_chr}]='identifier names comprised of legal characters'
+ tst_ngl[${tst_mss}]='variables do not have missing_value attributes'
+ tst_ngl[${tst_nan}]='data values do not contain NaN (or NaNf)'
+ tst_ngl[${tst_tm}]='time variables are stored in double precision'
+ tst_ngl[${tst_xtn}]='filename extension matches recommended list'
+
+ # Test short names (complete phrase "___ check passed/failed")
+ tst_sht[${tst_bnd}]='coordinate bounds'
+ tst_sht[${tst_chr}]='character-set'
+ tst_sht[${tst_mss}]='missing_value'
+ tst_sht[${tst_nan}]='NaN'
+ tst_sht[${tst_tm}]='precision of time variables'
+ tst_sht[${tst_xtn}]='filename extension'
+
+ # Test invocation options to ncks
+ tst_opt[${tst_bnd}]='--chk_bnd'
+ tst_opt[${tst_chr}]='--chk_chr'
+ tst_opt[${tst_mss}]='--chk_mss'
+ tst_opt[${tst_nan}]='--chk_nan'
+ tst_opt[${tst_tm}]='--chk_tm'
+ tst_opt[${tst_xtn}]='--chk_xtn'
+
+ # Which tests are requested?
+ # http://stackoverflow.com/questions/27702452/loop-through-a-comma-separated-shell-variable
+ tst_nbr=0 # [sng] Number of tests to conduct
+ for tst in ${tst_lst//,/ }; do
+ tst_rqs[${tst_nbr}]=${tst}
+ # NB: Requested seasons are 0-based, defined seasons are 0-based
+ for ((tst_dfn_idx=${tst_idx_srt};tst_dfn_idx<${tst_nbr_max};tst_dfn_idx++)); do
+ if [[ "${tst}" =~ "${tst_abb[${tst_dfn_idx}]}" ]] || [[ "${tst}" =~ "${tst_abb_lc[${tst_dfn_idx}]}" ]]; then
+ # Map requested to defined (r2d) tests and inverse (d2r)
+ # map_r2d[0]=3 means first test that user requested (i.e., in tst_lst) is fourth defined in table
+ # map_d2r[3]=0 means fourth defined test is first requested
+ map_r2d[${tst_nbr}]=${tst_dfn_idx}
+ map_d2r[${tst_dfn_idx}]=${tst_nbr}
+ let tst_nbr=${tst_nbr}+1
+ break
+ fi # !match
+ done # !tst_dfn_idx
+ if [ "${tst_dfn_idx}" -eq "${tst_nbr_max}" ]; then
+ printf "${spt_nm}: ERROR Requested test ${tst} not defined\n"
+ exit 1
+ fi # !match
+ done # !tst_lst
+
+fi # !tst_flg
+
+# Read files from stdin pipe, positional arguments, or directory glob
+#printf "dbg: inp_aut = ${inp_aut}\n"
+#printf "dbg: inp_glb = ${inp_glb}\n"
+#printf "dbg: inp_psn = ${inp_psn}\n"
+#printf "dbg: inp_std = ${inp_std}\n"
+
+# Derived variables
+if [ -n "${drc_out_usr}" ]; then
+ chr_fst=${drc_out_usr:0:1}
+ if [ "${chr_fst}" = '-' ]; then
+ printf "${spt_nm}: WARNING first character of user-specified output directory drc_out is \"${chr_fst}\", which looks like an option itself. Be sure the ${spt_nm} '-O' option is followed by an argument that specifies the output directory for processed files. The '-O' option requires a pathname argument, and should not be confused with the '-O' flag (which takes no argument) used in the rest of NCO to force overwriting files (${spt_nm} automatically overwrites existing output files).\n"
+ fi # !chr_fst
+ # Fancy %/ syntax removes trailing slash (e.g., from $TMPDIR)
+ drc_out="${drc_out_usr%/}"
+fi # !drc_out_usr
+
+# Doubly-derived variables
+
+if [ ${inp_glb} = 'Yes' ]; then
+ for fl in "${drc_in}"/*.nc "${drc_in}"/*.nc3 "${drc_in}"/*.nc4 "${drc_in}"/*.nc5 "${drc_in}"/*.nc6 "${drc_in}"/*.nc7 "${drc_in}"/*.cdf "${drc_in}"/*.hdf "${drc_in}"/*.he5 "${drc_in}"/*.h5 ; do
+ if [ -f "${fl}" ]; then
+ fl_in[${fl_nbr}]=${fl}
+ let fl_nbr=${fl_nbr}+1
+ fi # !file
+ done
+fi # !inp_glb
+if [ ${inp_psn} = 'Yes' ]; then
+ # Read any positional arguments
+ for ((psn_idx=1;psn_idx<=psn_nbr;psn_idx++)); do
+ fl_in[(${psn_idx}-1)]=${!psn_idx}
+ fl_nbr=${psn_nbr}
+ done # !psn_idx
+fi # !inp_psn
+if [ ${inp_std} = 'Yes' ]; then
+ # Input awaits on unit 0, i.e., on stdin
+ while read -r line; do # NeR05 p. 179
+ fl_in[${fl_nbr}]=${line}
+ let fl_nbr=${fl_nbr}+1
+ done < /dev/stdin
+fi # !inp_std
+
+# Create output directory
+if [ -n "${drc_out}" ] && [ ! -d "${drc_out}" ]; then
+ chr_fst=${drc_out:0:1}
+ if [ "${chr_fst}" = '-' ]; then
+ echo "${spt_nm}: ERROR Attempting to mkdir user-specified output directory \"${drc_out}\" will fail because directory name begins with '-' which is an option indicator"
+ echo "${spt_nm}: HINT Specify an output directory name that does not begin with '-'"
+ exit 1
+ fi # !chr_fst
+ cmd_mkd="mkdir -p ${drc_out}"
+ eval ${cmd_mkd}
+ if [ "$?" -ne 0 ]; then
+ printf "${spt_nm}: ERROR Failed to create output directory. Debug this:\n${cmd_mkd}\n"
+ printf "${spt_nm}: HINT Creating a directory requires proper write permissions\n"
+ exit 1
+ fi # !err
+fi # !drc_out
+
+# Print initial state
+if [ ${dbg_lvl} -ge 2 ]; then
+ printf "dbg: dbg_lvl = ${dbg_lvl}\n"
+ printf "dbg: drc_in = ${drc_in}\n"
+ printf "dbg: drc_out = ${drc_out}\n"
+ printf "dbg: hrd_pth = ${hrd_pth}\n"
+ printf "dbg: job_nbr = ${job_nbr}\n"
+ printf "dbg: mpi_flg = ${mpi_flg}\n"
+ printf "dbg: mpi_nbr = ${mpi_nbr}\n"
+ printf "dbg: nco_opt = ${nco_opt}\n"
+ printf "dbg: tst_lst = ${tst_lst}\n"
+ printf "dbg: tst_nbr = ${tst_nbr}\n"
+ printf "dbg: var_lst = ${var_lst}\n"
+ printf "dbg: xcl_flg = ${xcl_flg}\n"
+fi # !dbg
+if [ ${dbg_lvl} -ge 2 ]; then
+ psn_nbr=$#
+ if [ ${psn_nbr} -ge 1 ]; then
+ printf "dbg: Found ${psn_nbr} positional parameters (besides \$0):\n"
+ for ((psn_idx=1;psn_idx<=psn_nbr;psn_idx++)); do
+ printf "dbg: psn_arg[${psn_idx}] = ${!psn_idx}\n"
+ done # !psn_idx
+ fi # !psn_nbr
+ if [ "${fl_nbr}" -ge 1 ]; then
+ printf "dbg: Processing ${fl_nbr} raw input files:\n"
+ for ((fl_idx=0;fl_idx<fl_nbr;fl_idx++)); do
+ printf "dbg: fl_in[${fl_idx}] = ${fl_in[${fl_idx}]}\n"
+ done # !fl_idx
+ fi # !fl_nbr
+fi # !dbg
+
+# Human-readable summary
+date_srt=$(date +"%s")
+if [ ${dbg_lvl} -ge 0 ]; then
+ printf "ncchecker, a DIWG recommendation compliance checker, invoked with command:\n"
+ echo "${cmd_ln}"
+ printf "Started DIWG checker at `date`\n"
+ printf "# of recommendations that will be checked: ${tst_nbr}/${tst_nbr_max}\n"
+ printf "Recommendations that will be checked: "
+ for ((tst_idx=0;tst_idx<tst_nbr;tst_idx++)); do
+ idx_dfn=${map_r2d[${tst_idx}]}
+ printf "${tst_rfc[${idx_dfn}]} (${tst_sht[${idx_dfn}]}) "
+ done # !tst_idx
+ printf "\n"
+fi # !dbg
+
+if [ "${fl_nbr}" -lt 1 ]; then
+ echo "${spt_nm}: ERROR Checker did not receive any input files, fl_nbr = ${fl_nbr}"
+ exit 1
+fi # fl_nbr
+
+# Main Loop
+
+# Prepend input directory string to filename
+for ((fl_idx=0;fl_idx<fl_nbr;fl_idx++)); do
+ fl_out[${fl_idx}]="${drc_out}/$(basename ${fl_in[${fl_idx}]})"
+ #printf "fl_in[${fl_idx}] = ${fl_in[${fl_idx}]}\n"
+ #printf "fl_out[${fl_idx}] = ${fl_out[${fl_idx}]}\n"
+
+ printf "\nChecking file #${fl_idx}: ${fl_in[${fl_idx}]} ...\n"
+
+ for ((tst_idx=0;tst_idx<tst_nbr;tst_idx++)); do
+
+ let tst_idxp1=${tst_idx}+1
+ # Index of test in definition table
+ idx_dfn=${map_r2d[${tst_idx}]}
+
+ printf "\nTest ${tst_idxp1}: Check that ${tst_ngl[${idx_dfn}]} ...\n"
+ printf "Recommendation ${tst_rfc[${idx_dfn}]}: ${tst_rcm[${idx_dfn}]}\n"
+ echo "URL: ${tst_url[${idx_dfn}]}"
+ [[ ${dbg_lvl} -ge 0 ]] && date_chr=$(date +"%s")
+
+ cmd_tst[${fl_idx}]="ncks --dbg_lvl=${dbg_lvl} ${tst_opt[${idx_dfn}]} ${fl_in[${fl_idx}]}"
+
+ if [ ${dbg_lvl} -ge 2 ]; then
+ echo ${cmd_tst[${fl_idx}]}
+ fi # !dbg
+ if [ ${dbg_lvl} -le 1 ]; then
+ if [ -z "${par_opt}" ]; then
+ eval ${cmd_tst[${fl_idx}]}
+ if [ "$?" -ne 0 ]; then
+ printf "Result: FAILURE ${tst_sht[${idx_dfn}]} check failed. Reproduce this single check with:\n${cmd_tst[${fl_idx}]}\n"
+ else # !err
+ printf "Result: SUCCESS ${tst_sht[${idx_dfn}]} check passed.\n"
+ fi # !err
+ else # !par_opt
+ eval ${cmd_bnd[${fl_idx}]} ${par_opt} # eval always returns 0 on backgrounded processes
+ bnd_pid[${fl_idx}]=$!
+ fi # !par_opt
+ fi # !dbg
+
+ if [ ${dbg_lvl} -ge 1 ]; then
+ date_crr=$(date +"%s")
+ date_dff=$((date_crr-date_chr))
+ echo "Elapsed time for ${tst_sht[${idx_dfn}]} check = $((date_dff/60))m$((date_dff % 60))s"
+ fi # !dbg
+
+ done # !tst_idx
+
+done # !fl_idx
+
+date_end=$(date +"%s")
+if [ ${dbg_lvl} -ge 0 ]; then
+ printf "\nCompleted DIWG Compliance Checker at `date`\n"
+ date_dff=$((date_end-date_srt))
+ echo "Elapsed time $((date_dff/60))m$((date_dff % 60))s"
+fi # !dbg
+
+exit 0
=====================================
data/ncclimo
=====================================
@@ -146,7 +146,7 @@ if [ "${hrd_pth}" = 'Yes' ] && [ "${NCO_PATH_OVERRIDE}" = 'Yes' ]; then
module load esmf
fi # !ncremap
export PATH='/ccs/home/zender/bin_andes'\:${PATH}
- export LD_LIBRARY_PATH='/ccs/home/zender/lib_andes:/gpfs/alpine/proj-shared/cli115/e3sm-unified/base/envs/e3sm_unified_latest/lib'\:${LD_LIBRARY_PATH} ; ;;
+ export LD_LIBRARY_PATH='/ccs/home/zender/lib_andes:/ccs/proj/cli115/software/e3sm-unified/base/envs/e3sm_unified_latest/lib'\:${LD_LIBRARY_PATH} ; ;;
blues* | blogin* | b[0123456789][0123456789][0123456789] )
if [ ${spt_nm} = 'ncremap' ]; then
E3SMU_ROOT='/lcrc/soft/climate/e3sm-unified/base/envs/e3sm_unified_latest'
@@ -656,7 +656,7 @@ function fnc_usg_prn { # NB: dash supports fnc_nm (){} syntax, not function fnc_
echo "${fnt_rvr}-v${fnt_nrm} ${fnt_bld}var_lst${fnt_nrm} Variable list (empty means all) (default ${fnt_bld}${var_lst}${fnt_nrm}) [${fnt_tlc}var_lst, variable_list, var, vars, variable, variables${fnt_nrm}]"
echo " ${fnt_bld}--var_xtr${fnt_nrm} Extra variables for splitter timeseries (empty means none) (default ${fnt_bld}${var_xtr}${fnt_nrm}) [${fnt_tlc}var_xtr, var_extra, variables_extra, extra_variables${fnt_nrm}]"
echo " ${fnt_bld}--version${fnt_nrm} Version and configuration information [${fnt_tlc}version, vrs, config, configuration, cnf${fnt_nrm}]"
- echo " ${fnt_bld}--vrt_out${fnt_nrm} Vertical grid file for output (empty means none) (default ${fnt_bld}${vrt_out}${fnt_nrm}) [${fnt_tlc}vrt_out, vrt_fl, vrt, vrt_crd, vrt_grd_out${fnt_nrm}]"
+ echo " ${fnt_bld}--vrt_out${fnt_nrm} Vertical grid file for output (empty means none) (default ${fnt_bld}${vrt_out}${fnt_nrm}) [${fnt_tlc}vrt_out, vrt_fl, vrt, vrt_crd, vrt_grd_out${fnt_nrm}]"
echo " ${fnt_bld}--vrt_xtr${fnt_nrm} Vertical extrapolation type (empty means none) (default ${fnt_bld}${vrt_xtr}${fnt_nrm}) [${fnt_tlc}vrt_xtr, xtr_mth, extrapolation_type, extrapolation_method${fnt_nrm}] (mss_val|nrs_ngh)"
echo "${fnt_rvr}-X${fnt_nrm} ${fnt_bld}drc_xtn${fnt_nrm} Extended climo directory (default ${fnt_bld}${drc_xtn}${fnt_nrm}) [${fnt_tlc}drc_xtn, xtn_drc, extended_dir, extended_climo, extended${fnt_nrm}]"
echo "${fnt_rvr}-x${fnt_nrm} ${fnt_bld}drc_prv${fnt_nrm} Previous climo directory (default ${fnt_bld}${drc_prv}${fnt_nrm}) [${fnt_tlc}drc_prv, prv_drc, previous_dir, previous_climo, previous${fnt_nrm}]"
@@ -2793,7 +2793,7 @@ if [ "${tms_flg}" = 'Yes' ]; then
if [ "${rgn_avg}" = 'Yes' ]; then
for ((var_idx=var_idx_srt;var_idx<=var_idx_end;var_idx++)); do
- cmd_rgn="*rgn_nbr=3;defdim(\"rgn\",rgn_nbr);*${var_sbs[${var_idx}]}_tmp=0.0f*${var_sbs[${var_idx}]}.avg(\$${hrz_dmn});*${var_sbs[${var_idx}]}_rgn[time,rgn]=${var_sbs[${var_idx}]}_tmp;${var_sbs[${var_idx}]}_rgn at coordinates=\"region_name\";*${lat_nm}_area=${lat_nm}+0.0*${area_nm};*msk_sth=0*${lat_nm}_area.int();*msk_nrt=0*${lat_nm}_area.int();*idx_glb=0;*idx_nrt=1;*idx_sth=2;*rgn_len=19;defdim(\"rgn_len\",rgn_len);region_name[rgn,rgn_len]=\" \";region_name(idx_glb,0:5)=\"Global\";region_name(idx_nrt,:)=\"Northern Hemisphere\";region_name(idx_sth,:)=\"Southern Hemisphere\";region_name at long_name=\"${var_sbs[${var_idx}]} timeseries array contains area-weighted averages over these regions\";where(${lat_nm}_area < 0.0) msk_sth=1; elsewhere msk_nrt=1;${var_sbs[${var_idx}]}_rgn(:,idx_nrt)=((${var_sbs[${var_idx}]}*${area_wgt}*msk_nrt).avg(\$${hrz_dmn})/(${area_wgt}*msk_nrt).avg(\$${hrz_dmn})).float();${var_sbs[${var_idx}]}_rgn(:,idx_sth)=((${var_sbs[${var_idx}]}*${area_wgt}*msk_sth).avg(\$${hrz_dmn})/(${area_wgt}*msk_sth).avg(\$${hrz_dmn})).float();${var_sbs[${var_idx}]}_rgn(:,idx_glb)=((${var_sbs[${var_idx}]}*${area_wgt}).avg(\$${hrz_dmn})/${area_wgt}.avg(\$${hrz_dmn})).float();${var_sbs[${var_idx}]}=${var_sbs[${var_idx}]}_rgn;push(&${var_sbs[${var_idx}]}@cell_methods,\" area: mean\");if(exists(time_bnds)) time_bnds=time_bnds;"
+ cmd_rgn="*rgn_nbr=3;defdim(\"rgn\",rgn_nbr);*${var_sbs[${var_idx}]}_tmp=0.0f*${var_sbs[${var_idx}]}.avg(\$${hrz_dmn});*${var_sbs[${var_idx}]}_rgn[time,rgn]=${var_sbs[${var_idx}]}_tmp;${var_sbs[${var_idx}]}_rgn at coordinates=\"region_name\";*${lat_nm}_area=${lat_nm}+0.0*${area_nm};*msk_sth=0*${lat_nm}_area.int();*msk_nrt=0*${lat_nm}_area.int();*idx_glb=0;*idx_nrt=1;*idx_sth=2;*rgn_len=19;defdim(\"rgn_len\",rgn_len);region_name[rgn,rgn_len]=\" \";region_name(idx_glb,0:5)=\"Global\";region_name(idx_nrt,:)=\"Northern Hemisphere\";region_name(idx_sth,:)=\"Southern Hemisphere\";region_name at long_name=\"${var_sbs[${var_idx}]} timeseries array contains area-weighted averages over these regions\";where(${lat_nm}_area < 0.0) msk_sth=1; elsewhere msk_nrt=1;${var_sbs[${var_idx}]}_rgn(:,idx_nrt)=((${var_sbs[${var_idx}]}*${area_wgt}*msk_nrt).avg(\$${hrz_dmn})/(${area_wgt}*msk_nrt).avg(\$${hrz_dmn})).float();${var_sbs[${var_idx}]}_rgn(:,idx_sth)=((${var_sbs[${var_idx}]}*${area_wgt}*msk_sth).avg(\$${hrz_dmn})/(${area_wgt}*msk_sth).avg(\$${hrz_dmn})).float();${var_sbs[${var_idx}]}_rgn(:,idx_glb)=((${var_sbs[${var_idx}]}*${area_wgt}).avg(\$${hrz_dmn})/${area_wgt}.avg(\$${hrz_dmn})).float();${var_sbs[${var_idx}]}=${var_sbs[${var_idx}]}_rgn;push(&${var_sbs[${var_idx}]}@cell_methods,\" area: mean\");if(exists(time_bnds)) time_bnds=time_bnds;if(exists(time_bounds)) time_bounds=time_bounds;"
cmd_avg[${var_idx}]="${cmd_mpi[${var_idx}]} OMP_PROC_BIND=false ncap2 -O -v -s '${cmd_rgn}' ${fl_out[${var_idx}]} ${fl_out[${var_idx}]}"
# 20220817: Prior to today, --glb_avg used ncwa for global average
# As of NCO 5.1.1, --glb_avg is a deprecated synonym for --rgn_avg
=====================================
data/ncremap
=====================================
@@ -162,7 +162,7 @@ if [ "${hrd_pth}" = 'Yes' ] && [ "${NCO_PATH_OVERRIDE}" = 'Yes' ]; then
# 20190827: Must guarantee finding mpirun
source ${MODULESHOME}/init/sh # 20150607: PMC Ensures find module commands will be found
if [ ${spt_nm} = 'ncremap' ]; then
- E3SMU_ROOT='/gpfs/alpine/proj-shared/cli115/e3sm-unified/base/envs/e3sm_unified_latest'
+ E3SMU_ROOT='/ccs/proj/cli115/software/e3sm-unified/base/envs/e3sm_unified_latest'
fi # !ncremap
export PATH='/ccs/home/zender/bin_andes'\:${PATH}
export LD_LIBRARY_PATH='/ccs/home/zender/lib_andes'\:${LD_LIBRARY_PATH} ; ;;
@@ -751,7 +751,7 @@ function fnc_usg_prn { # NB: dash supports fnc_nm (){} syntax, not function fnc_
echo " ${fnt_bld}--vrt_in${fnt_nrm} Vertical grid file for input (empty means none) (default ${fnt_bld}${vrt_in}${fnt_nrm}) [${fnt_tlc}vrt_in, vrt_grd_in${fnt_nrm}]"
echo " ${fnt_bld}--vrt_nm${fnt_nrm} Vertical coordinate name (empty means \"plev\") (default ${fnt_bld}${vrt_nm}${fnt_nrm}) [${fnt_tlc}vrt_nm, plev_nm, vertical_coordinate_name${fnt_nrm}]"
echo " ${fnt_bld}--vrt_ntp${fnt_nrm} Vertical interpolation type (empty means none) (default ${fnt_bld}${vrt_ntp}${fnt_nrm}) [${fnt_tlc}vrt_ntp, ntp_mth, interpolation_type, interpolation_method${fnt_nrm}] (lin|log)"
- echo " ${fnt_bld}--vrt_out${fnt_nrm} Vertical grid file for output (empty means none) (default ${fnt_bld}${vrt_out}${fnt_nrm}) [${fnt_tlc}vrt_out, vrt_fl, vrt, vrt_crd, vrt_grd_out${fnt_nrm}]"
+ echo " ${fnt_bld}--vrt_out${fnt_nrm} Vertical grid file for output (empty means none) (default ${fnt_bld}${vrt_out}${fnt_nrm}) [${fnt_tlc}vrt_out, vrt_fl, vrt, vrt_crd, vrt_grd_out${fnt_nrm}]"
echo " ${fnt_bld}--vrt_xtr${fnt_nrm} Vertical extrapolation type (empty means none) (default ${fnt_bld}nrs_ngh${fnt_nrm}) [${fnt_tlc}vrt_xtr, xtr_mth, extrapolation_type, extrapolation_method${fnt_nrm}] (linear|mss_val|nrs_ngh|zero)"
echo "${fnt_rvr}-W${fnt_nrm} ${fnt_bld}wgt_opt${fnt_nrm} Weight-generator options (default ${fnt_bld}${wgt_opt_esmf}${fnt_nrm}) [${fnt_tlc}wgt_opt, esmf_opt, esmf_options, tempest_opt, tps_opt${fnt_nrm}]"
echo "${fnt_rvr}-w${fnt_nrm} ${fnt_bld}wgt_cmd${fnt_nrm} Weight-generator command (default ${fnt_bld}${wgt_exe_esmf}${fnt_nrm}) [${fnt_tlc}wgt_cmd, wgt_gnr, weight_command, weight_generator${fnt_nrm}]"
@@ -1246,7 +1246,7 @@ elif [ ${alg_typ} = 'se2fv_flx' ] || [ ${alg_typ} = 'mono_se2fv' ] || [ ${alg_ty
# NB: 20220922 TempestRemap began replacing the --mono* options with --method mono*
cnv_opt_src="-B -i GLOBAL_DOFS -r ${se_np_nbr}"
cnv_opt_dst="-B"
- wgt_opt_mbt="--method cgll --order ${se_np_nbr} --global_id GLOBAL_DOFS --method fv --monotonic 1 --global_id GLOBAL_ID"
+ wgt_opt_mbt="--method cgll --order ${se_np_nbr} --global_id GLOBAL_DOFS --method fv --monotonicity 1 --global_id GLOBAL_ID"
wgt_opt_tps="--in_type cgll --in_np ${se_np_nbr} --out_type fv --mono"
alg_opt='se2fv_flx'
wgt_typ='tempest'
@@ -1260,7 +1260,7 @@ elif [ ${alg_typ} = 'se2fv_stt' ] || [ ${alg_typ} = 'highorder_se2fv' ] || [ ${a
elif [ ${alg_typ} = 'se2fv_alt' ] || [ ${alg_typ} = 'intbilin_se2fv' ] || [ ${alg_typ} = 'accurate_monotone_nonconservative_se2fv' ]; then # alg_sng='intbilin'
cnv_opt_src="-B -i GLOBAL_DOFS -r ${se_np_nbr}"
cnv_opt_dst="-B"
- wgt_opt_mbt="--method cgll --order ${se_np_nbr} --method fv --monotonic 3 --noconserve"
+ wgt_opt_mbt="--method cgll --order ${se_np_nbr} --method fv --monotonicity 3 --noconserve"
wgt_opt_tps="--in_type cgll --in_np ${se_np_nbr} --out_type fv --mono3 --noconserve"
alg_opt='se2fv_alt'
wgt_typ='tempest'
@@ -1268,7 +1268,7 @@ elif [ ${alg_typ} = 'se2se' ] || [ ${alg_typ} = 'cs2cs' ] || [ ${alg_typ} = 'con
cnv_opt_src="-B -i GLOBAL_DOFS -r ${se_np_nbr}"
cnv_opt_dst="-B -i GLOBAL_DOFS -r ${se_np_nbr}"
# 20190227: Add mono for se2se per recommendation of Mark Taylor
- wgt_opt_mbt="--method cgll --order ${se_np_nbr} --method cgll --order ${se_np_nbr} --monotonic 1"
+ wgt_opt_mbt="--method cgll --order ${se_np_nbr} --method cgll --order ${se_np_nbr} --monotonicity 1"
wgt_opt_tps="--in_type cgll --in_np ${se_np_nbr} --out_type cgll --out_np ${se_np_nbr} --mono"
alg_opt='se2se'
wgt_typ='tempest'
@@ -1276,7 +1276,7 @@ elif [ ${alg_typ} = 'fv2se_flx' ] || [ ${alg_typ} = 'monotr_fv2se' ] || [ ${alg_
# NB: Generate mono map for opposite direction regridding (i.e., reverse switches and grids), then transpose
cnv_opt_src="-B"
cnv_opt_dst="-B -i GLOBAL_DOFS -r ${se_np_nbr}"
- wgt_opt_mbt="--method cgll --order ${se_np_nbr} --method fv --monotonic 1"
+ wgt_opt_mbt="--method cgll --order ${se_np_nbr} --method fv --monotonicity 1"
wgt_opt_tps="--in_type cgll --in_np ${se_np_nbr} --out_type fv --mono"
alg_opt='fv2se_flx'
wgt_typ='tempest'
@@ -1293,7 +1293,7 @@ elif [ ${alg_typ} = 'fv2se_alt' ] || [ ${alg_typ} = 'mono_fv2se' ] || [ ${alg_ty
cnv_opt_src="-B"
cnv_opt_dst="-B -i GLOBAL_DOFS -r ${se_np_nbr}"
# 20200525: Remove "--volumetric" from fv2se_mono per Mark Taylor modifying Confluence instructions
- wgt_opt_mbt="--method fv --order 1 --method cgll --order ${se_np_nbr} --monotonic 1"
+ wgt_opt_mbt="--method fv --order 1 --method cgll --order ${se_np_nbr} --monotonicity 1"
wgt_opt_tps="--in_type fv --in_np 1 --out_type cgll --out_np ${se_np_nbr} --mono"
alg_opt='fv2se_alt'
wgt_typ='tempest'
=====================================
debian/changelog
=====================================
@@ -1,8 +1,14 @@
+nco (5.2.2-1) unstable; urgency=low
+
+ * new upstream version Bambino: ncchecker; ncclimo: elm rgn_avg time_bounds; ncremap: xcl level, mbtr --monotonicity
+
+ -- Charlie Zender <zender at uci.edu> Fri, 22 March 2024 12:26:09 -0700
+
nco (5.2.1-1) unstable; urgency=low
* new upstream version Shabu Shabu: ncclimo/ncremap MPI script fix, nco_qnt_mtd() pedantic fix
- -- Charlie Zender <zender at uci.edu> Fri, 16 April 2024 12:26:08 -0700
+ -- Charlie Zender <zender at uci.edu> Sun, 18 February 2024 12:26:08 -0700
nco (5.2.0-1) unstable; urgency=low
=====================================
doc/ANNOUNCE
=====================================
@@ -1,131 +1,60 @@
$Header$ -*-text-*-
-netCDF Operators NCO version 5.2.1 sheepishly steps forward
+netCDF Operators NCO version 5.2.2 kangeroo forward
http://nco.sf.net (Homepage, Mailing lists, Help)
http://github.com/nco/nco (Source Code, Issues, Releases)
What's new?
-Version 5.2.1 fixes an issue with ncremap and ncclimo in MPI mode.
-Another small fix to enables GCC compilation in pedantic mode.
-No new features are implemented, but it was too late to recall 5.2.0.
-My apologies and thanks to the package maintainers.
+Version 5.2.2 introduces a new operator, ncchecker, that checks
+dataset compliance with a small yet growing number of
+recommendations. ncclimo no longer omits time_bounds from ELM/CLM
+regional averages. No new features are implemented.
+Skip this release if these changes are not important to you.
-Work on NCO 5.2.2 has commenced and aims to add support for Zarr S3
-stores, and to polish support for new codecs..
+Work on NCO 5.2.3 has commenced and aims to add support for Zarr S3
+stores, and to enhance the vertical regridder.
Enjoy,
Charlie
NEW FEATURES (full details always in ChangeLog):
-[These just repeat the changes in 5.2.0 since most peopld never used it]
-
-A. ncks can now help analyze initial condition and restart datasets
-produced by the E3SM ELM and CESM CLM/CTSM land-surface models.
-Whereas gridded history datasets from these ESMs use a standard
-gridded data format, these land-surface "restart files" employ a
-custom packing format that unwinds multi-dimensional data into
-sparse, 1-D (S1D) arrays that are not easily visualized. ncks can
-now convert these S1D files into gridded datasets where all dimensions
-are explicitly declared (rather than unrolled or "packed").
-Invoke this conversion feature with the --s1d option and point
-ncks to a file that contains the horizontal coordinates (which
-restart files do not explicitly contain) and the restart file.
-The output file is the fully gridded input file, with no loss
-of information:
-ncks --s1d --hrz=elmv3_history.nc elmv3_restart.nc out.nc
-The output file contains all input variables placed on a lat-lon or
-unstructured grid, with new dimensions for Plant Funtional Type (PFT)
-and multiple elevation class (MEC).
-http://nco.sf.net/nco.html#s1d
-
-B. ncclimo timeseries mode now supports all input methods (including
-automatic filename generation) long-supported by climo mode. Previously
-ncclimo (in timeseries mode) had to receive explicit lists of input
-files, either from stdin or from the command line. Now ncclimo will
-automatically generate the input file list for files that adhere to
-common CESM/E3SM naming conventions (usually for monthly average
-files). The syntax is identical to that long used in climo mode:
-% ncclimo --split -c $caseid -s 2000 -e 2024 -i $drc_in -o $drc_out
-http://nco.sf.net/nco.html#ncclimo
-
-C. ncremap supports --alg_lst=alg_lst, a comma-separated list of the
-algorithms that MWF-mode uses to create map-files. This option can
-be used to shorten or alter the default list, which is
-'esmfaave,esmfbilin,ncoaave,ncoidw,traave,trbilin,trfv2,trintbilin'.
-Each name in the list should be the primary name of an algorithm,
-not a synonym. For example, use 'esmfaave,traave' not
-'aave,fv2fv_flx' (the latter are backward-compatible synonyms
-for the former). The algorithm list must be consistent with grid-types
-supplied: ESMF algorithms work with meshes in ESMF, SCRIP, or UGRID
-formats. NCO algorithms only work with meshes in SCRIP format.
-TempestRemap algorithms work with meshes in ESMF, Exodus, SCRIP, or
-UGRID formats. On output, ncremap inserts each algorithm name into the
-output map-file name in this format: map_src_to_dst_alg.date.nc.
-For example,
-% ncremap -P mwf --alg_lst=esmfnstod,ncoaave,ncoidw,traave,trbilin \
- -s ocean.QU.240km.scrip.181106.nc -g ne11pg2.nc --nm_src=QU240 \
- --nm_dst=ne11pg2 --dt_sng=20240201
-...
-% ls map*
-map_QU240_to_ne11pg2_esmfnstod.20240201.nc
-map_QU240_to_ne11pg2_ncoaave.20240201.nc
-map_QU240_to_ne11pg2_ncoidw.20240201.nc
-map_QU240_to_ne11pg2_traave.20240201.nc
-map_QU240_to_ne11pg2_trbilin.20240201.nc
-map_ne11pg2_to_QU240_esmfnstod.20240201.nc
-map_ne11pg2_to_QU240_ncoaave.20240201.nc
-map_ne11pg2_to_QU240_ncoidw.20240201.nc
-map_ne11pg2_to_QU240_traave.20240201.nc
-map_ne11pg2_to_QU240_trbilin.20240201.nc
-
-http://nco.sf.net/nco.html#alg_lst
-http://nco.sf.net/nco.html#ncremap
-
-D. All NCO operators now support the draft CF Convention on encoding
-metadata that describes lossy compression applied to the dataset.
-See https://github.com/cf-convention/cf-conventions/issues/403.
-For example, all variables quantized by NCO now receive attributes
-that contain the level of quantization and that point to a
-container variable that describes the algorithm:
-
-% ncks -O -7 --cmp='btr|shf|zst' in.nc foo.nc
-% ncks -m -v ts foo.nc
- char compression_info ;
- char compression_info ;
- compression_info:family = "quantize" ;
- compression_info:algorithm = "BitRound" ;
- compression_info:implementation = "libnetcdf version 4.9.3-development" ;
- float ts(time,lat,lon) ;
- ts:standard_name = "surface_temperature" ;
- ts:lossy_compression = "compression_info" ;
- ts:lossy_compression_nsb = 9 ;
-
-http://nco.sf.net/nco.html#qnt
-
-E. ncks supports a new flag, --chk_bnd, that reports whether all
-coordinate variables in a file contain associated "bounds" variables.
-This check complies with CF Conventions and with NASA's Dataset
-Interoperability Working Group (DIWG) recommendations:
-$ ncks --chk_bnd ~/nco/data/in.nc
-ncks: WARNING nco_chk_bnd() reports coordinate Lat does not contain "bounds" attribute
-ncks: WARNING nco_chk_bnd() reports coordinate Lon does not contain "bounds" attribute
-ncks: INFO nco_chk_bnd() reports total number of coordinates without "bounds" attribute is 2
-http://nco.sf.net/nco.htlm/chk_bnd
-
-F. ncremap supports the TempestRemap trfv2 algorithm, a 2nd order FV
-reconstruction, that is cell-integrated on the target grid.
-ncremap --alg_typ=trfv2 -s grd_src.nc -g grd_dst.nc --map=map.nc
-http://nco.sf.net/nco.htlm/trfv2
+A. The new ncchecker command checks netCDF files for compliance with
+select best practices rules and recommendations from various data and
+metadata standards bodies. These include the Climate & Forecast (CF)
+Metadata Conventions and the NASA Dataset Interoperability Working Group
+(DIWG) recommendations. Only a small subset (six tests) of CF and
+DIWG recommendations are currently supported. The number of tests
+implemented, or, equivalently, of recommendations checked, is expected
+to grow.
+
+ncchecker in1.nc in2.nc # Run all tests on two files
+ncchecker -v var1,var2 in1.nc # Check only two variables
+ncchecker *.nc # Glob input files via wildcard
+ls *.nc | ncchecker # Input files via stdin
+ncchecker --dbg=2 *.nc # Debug ncchecker
+ncchecker --tests=nan,mss *.nc # Select only two tests
+ncchecker --tests=xtn,tm,nan,mss,chr,bnd *.nc # Change test ordering
+ncchecker file:///Users/zender/in_zarr4#mode=nczarr,file # Check Zarr object(s)
+
+The output contains counts of the location and number of failed tests,
+or prints "SUCCESS" for tests with no failures.
+http://nco.sf.net/nco.html#ncchecker
BUG FIXES:
-A. ncclimo fixes an error in the climatology_bounds variable
-output for the climatological December file in DJF-winter mode
-climos. JFD-winter mode climos (used by most people) are unaffected.
-There is no workaround. The solution is to upgrade.
-ncclimo --wnt_md=djf -c $caseid -s 2000 -e 2024 ...
+A. ncclimo fixes an error where it omitted the time_bounds variable
+from regional averages of ELM/CLM timeseries. The workaround is to
+manually append the variable. The solution is to upgrade.
+ncclimo --split --rgn_avg -c $caseid -s 2000 -e 2024 ...
+
+B. ncremap fixes an error where it used the wrong option to
+mbtempest to invoke monotonicity. Instead of "--monotonicity"
+it used "--monotonic", which is unknown to mbtempest.
+The workaround is to supply the correct option with ncremap
+--wgt_opt. The solution is to upgrade. Thanks to Walter Hannah of
+LLNL for reporting this mistake.
Full release statement at http://nco.sf.net/ANNOUNCE
=====================================
doc/ChangeLog
=====================================
@@ -1,3 +1,61 @@
+2024-03-22 Charlie Zender <zender at uci.edu>
+
+ * NCO 5.2.2 release procedure:
+ cd ~/nco;git commit -a -m 'Version 5.2.2: Bambino';git push
+ git tag -a 5.2.2 -m 'ncchecker; ncclimo: elm rgn_avg time_bounds; ncremap: xcl level, mbtr --monotonicity';git push --tags
+
+ * ncchecker tidy manpage, add to homepage, add to nco.texi
+
+2024-03-21 Charlie Zender <zender at uci.edu>
+
+ * NCO 5.2.2-alpha03 release procedure:
+ cd ~/nco;git commit -a -m 'Version 5.2.2-alpha03: Monkeybaut IPA';git push
+ git tag -a 5.2.2-alpha03 -m 'ncchecker RFC #s, tst_lst; ncclimo: elm rgn_avg time_bounds; ncremap: xcl level';git push --tags
+
+ * ncclimo: add "time_bounds" to ELM regional timeseries generated with --rgn_avg
+
+2024-03-20 Charlie Zender <zender at uci.edu>
+
+ * ncremap: add "level" to exclusion list for vertical interpolation
+
+2024-03-15 Charlie Zender <zender at uci.edu>
+
+ * Clarify use of $caseid in ncclimo for non-standard filenames
+
+2024-03-07 Charlie Zender <zender at uci.edu>
+
+ * ncchecker abstract all tests into template that uses info from test definition table
+
+ * ncchecker implement flexible test selection logic
+
+ * Rename diwg_chk to ncchecker
+
+2024-03-05 Charlie Zender <zender at uci.edu>
+
+ * diwg_chk: Add RFC recommendation numbers, sort tests in that order
+
+ * NCO 5.2.2-alpha02 release procedure:
+ cd ~/nco;git commit -a -m 'Version 5.2.2-alpha02: Broken Molar';git push
+ git tag -a 5.2.2-alpha02 -m 'diwg_chk; ncremap: --monotonicity';git push --tags
+
+ * Let it be known that ncap2 started linking correctly with MacOS again today
+
+ * Add diwg_chk, support distribution in autotools and CMake
+
+2024-02-27 Charlie Zender <zender at uci.edu>
+
+ * ncremap: Walter Hannah changed mbtempest argument name from "monotonic" to "monotonicity"
+
+2024-02-21 Charlie Zender <zender at uci.edu>
+
+ * NCO 5.2.2-alpha01 release procedure:
+ cd ~/nco;git commit -a -m 'Version 5.2.2-alpha01: IRS 1040';git push
+ git tag -a 5.2.2-alpha01 -m 'Functionally identical to 5.2.1 (adds -lgslcblas, fix andes paths)';git push --tags
+
+ * ncremap/ncclimo/configure.eg change Andes E3SMU paths to /ccs/proj/cli115/software/e3sm-unified
+
+ * bld/Makefile, nco++/Makefile add -lgslcblas for Derecho
+
2024-02-18 Charlie Zender <zender at uci.edu>
* NCO 5.2.1 release procedure:
=====================================
doc/VERSION
=====================================
@@ -1 +1 @@
-5.2.1
+5.2.2
=====================================
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.2.1
- First we create a clean source distribution of nco and place it in nco-5.2.1
+ For starters, we wish to create .debs of tagged releases, e.g., nco-5.2.2
+ First we create a clean source distribution of nco and place it in nco-5.2.2
Until we know what is necessary, however, we just copy a snapshot
2.1 Clean all build files from development directory
cd ~/nco;make distclean;cd bld;make clean;cd ~
tar cvzf ./nco/nco.tar.gz ./nco/*
-cd ~/nco;tar xvzf nco.tar.gz;mv nco nco-5.2.1
-/bin/rm nco.tar.gz;tar cvzf nco-5.2.1.tar.gz ./nco-5.2.1/*
-cd ~/nco/nco-5.2.1
-dh_make -e zender at uci.edu -f ../nco-5.2.1.tar.gz
+cd ~/nco;tar xvzf nco.tar.gz;mv nco nco-5.2.2
+/bin/rm nco.tar.gz;tar cvzf nco-5.2.2.tar.gz ./nco-5.2.2/*
+cd ~/nco/nco-5.2.2
+dh_make -e zender at uci.edu -f ../nco-5.2.2.tar.gz
2.2 The preceding steps created template debian files for a .deb,
Those files now reside in ~/nco/debian.
@@ -55,7 +55,7 @@ dh_make -e zender at uci.edu -f ../nco-5.2.1.tar.gz
from previous build
cd ~/nco;/bin/rm *.gz
- cd ~/nco/nco-5.2.1
+ cd ~/nco/nco-5.2.2
dpkg-buildpackage -rfakeroot > foo 2>&1
dpkg-buildpackage -rsudo > foo 2>&1
@@ -84,33 +84,33 @@ patch -p0 < nco_X.Y.Z-3.diff # Patch destination with Debian diff
make tags
# Put cute version-specific string in nco_ctl.c:nco_nmn_get()
# Install correct version numbers before updating Debian
-# tags-query replace 5.2.1 with X.Y.Z+1
+# tags-query replace 5.2.2 with X.Y.Z+1
# If tags-query replace does not work, be sure to manually change
# versions in configure.ac, debian/files, doc/ANNOUNCE, doc/debian.txt,
# doc/index.shtml, doc/nco.texi, bld/nco_dst.pl, doc/VERSION
# 20141201: Change NCO_VERSION_PATCH in src/nco.h!!!!!!!!!!!!!!!!!!!!!!
- cd ~/nco/debian;dch -b --force-distribution --distribution=unstable -v 5.2.1-1 # Update changelog (-b forces this version number)
+ cd ~/nco/debian;dch -b --force-distribution --distribution=unstable -v 5.2.2-1 # Update changelog (-b forces this version number)
emacs ~/nco/bld/nco.spec # Update changelog
# For unknown reason rules file may lose its executable bit
chmod a+x ~/nco/debian/rules
# Rebuild autotools so new version # propagates
cd ~/nco;aclocal;autoheader;automake --foreign;autoconf
# Save all files in emacs before tagging
- ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln nco-5.2.1
+ ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln nco-5.2.2
# Upload tarball to SF https://sourceforge.net/projects/nco/files
- cd;scp dust.ess.uci.edu:/var/www/html/nco/src/nco-5.2.1.tar.gz .
+ cd;scp dust.ess.uci.edu:/var/www/html/nco/src/nco-5.2.2.tar.gz .
7. Ubuntu PPA
https://help.launchpad.net/Packaging/PPA
-dput NCO nco_5.2.1-2~ppa1_source.changes
+dput NCO nco_5.2.2-2~ppa1_source.changes
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com
# Location of build diagnostics for mentors to help
-http://dust.ess.uci.edu/nco/src/nco_5.2.1-1.dpkg-buildpackage.txt
-http://dust.ess.uci.edu/nco/src/nco_5.2.1-1.dsc
-http://dust.ess.uci.edu/nco/src/nco_5.2.1-1_i386.changes
-http://dust.ess.uci.edu/nco/src/nco_5.2.1-1_i386.deb
-http://dust.ess.uci.edu/nco/src/nco_5.2.1.orig.tar.gz
+http://dust.ess.uci.edu/nco/src/nco_5.2.2-1.dpkg-buildpackage.txt
+http://dust.ess.uci.edu/nco/src/nco_5.2.2-1.dsc
+http://dust.ess.uci.edu/nco/src/nco_5.2.2-1_i386.changes
+http://dust.ess.uci.edu/nco/src/nco_5.2.2-1_i386.deb
+http://dust.ess.uci.edu/nco/src/nco_5.2.2.orig.tar.gz
# Becoming a Debian developer
http://www.debian.org/devel/join/newmaint
@@ -164,31 +164,31 @@ Matej Vela <vela at debian.org>, Daniel Baumann <daniel at debian.org>, Warren Turkal
# export LD_LIBRARY_PATH=/usr/lib:/lib:/usr/X11R6/lib
# sudo aptitude install antlr bison flex gsl-bin libgsl0-dev libantlr-dev netcdf-bin libnetcdfc7 libnetcdf-dev texinfo libcurl4-gnutls-dev libexpat1-dev libxml2-dev udunits-bin libudunits2-0 libudunits2-dev
cd ~/nco;cvc
-sudo /bin/rm -rf ${DATA}/nco-5.2.1 ${DATA}/nco_5.2.1* ${DATA}/debian # Cleanup last build. sudo necessary for removal because dpkg-buildpackage uses sudo?
-# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.2.1-1 -d nco-5.2.1 nco # Export based on tag
-cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -D "1 second ago" -d nco-5.2.1 nco # Export most recent
-tar cvzf ./nco_5.2.1.orig.tar.gz --exclude='nco-5.2.1/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.2.1
-/bin/rm -rf ${DATA}/nco-5.2.1 # Remove cvs-exported directory
-tar xvzf ./nco_5.2.1.orig.tar.gz # Untar to get directory without excluded files
-mkdir -p ${DATA}/nco-5.2.1/debian/source;cd ~/nco/debian;/bin/cp changelog compat control convert copyright doc-base files info rules ${DATA}/nco-5.2.1/debian;cd ~/nco/debian/source;/bin/cp format ${DATA}/nco-5.2.1/debian/source # Replace debian directory with _CURRENT_ (main trunk) settings
+sudo /bin/rm -rf ${DATA}/nco-5.2.2 ${DATA}/nco_5.2.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.2.2-1 -d nco-5.2.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.2.2 nco # Export most recent
+tar cvzf ./nco_5.2.2.orig.tar.gz --exclude='nco-5.2.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.2.2
+/bin/rm -rf ${DATA}/nco-5.2.2 # Remove cvs-exported directory
+tar xvzf ./nco_5.2.2.orig.tar.gz # Untar to get directory without excluded files
+mkdir -p ${DATA}/nco-5.2.2/debian/source;cd ~/nco/debian;/bin/cp changelog compat control convert copyright doc-base files info rules ${DATA}/nco-5.2.2/debian;cd ~/nco/debian/source;/bin/cp format ${DATA}/nco-5.2.2/debian/source # Replace debian directory with _CURRENT_ (main trunk) settings
#export DEB_BUILD_OPTIONS='disable-dap-netcdf disable-netcdf4 disable-udunits2'; # Disable optional packages based on available Debian support
-#cd ${DATA}/nco-5.2.1;dpkg-buildpackage -rsudo -uc -us > ~/foo.nco 2>&1 # -uc -us: Do not sign changes or source files
-#cd ${DATA}/nco-5.2.1;dpkg-buildpackage -rsudo -sa > ~/foo.nco 2>&1 # -sa: Include _orig.tar.gz in .changes
-cd ${DATA}/nco-5.2.1;dpkg-buildpackage -rsudo > ~/foo.nco 2>&1
+#cd ${DATA}/nco-5.2.2;dpkg-buildpackage -rsudo -uc -us > ~/foo.nco 2>&1 # -uc -us: Do not sign changes or source files
+#cd ${DATA}/nco-5.2.2;dpkg-buildpackage -rsudo -sa > ~/foo.nco 2>&1 # -sa: Include _orig.tar.gz in .changes
+cd ${DATA}/nco-5.2.2;dpkg-buildpackage -rsudo > ~/foo.nco 2>&1
sudo dpkg --remove nco
-sudo dpkg --install ${DATA}/nco_5.2.1-1_*.deb
+sudo dpkg --install ${DATA}/nco_5.2.2-1_*.deb
cd ~/nco/bld;MY_BIN_DIR=/usr/bin ../bm/nco_bm.pl --regress
# http://lintian.debian.org/full/zender@uci.edu.html
-lintian ${DATA}/nco_5.2.1-1_*.deb
-ls -l ${DATA}/nco_5.2.1*
+lintian ${DATA}/nco_5.2.2-1_*.deb
+ls -l ${DATA}/nco_5.2.2*
m ~/foo.nco
# Upload Ubuntu (rather than Debian) packages to websites
-scp ${DATA}/nco_5.2.1* dust.ess.uci.edu:/var/www/html/nco/src
-scp ${DATA}/nco_5.2.1* zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
+scp ${DATA}/nco_5.2.2* dust.ess.uci.edu:/var/www/html/nco/src
+scp ${DATA}/nco_5.2.2* zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
# NB: Make sure RPMs build before uploading to debian, since changing
# Debian versions is a PITA
# NB: Only upload pbuilder Debian Sid (not personal Ubuntu) .deb builds to Debian mentors
-# cd ${DATA};dupload -t mentors nco_5.2.1-1_*.changes
+# cd ${DATA};dupload -t mentors nco_5.2.2-1_*.changes
bsrc # Reset shell environment for regular development
# New build system #2
@@ -202,52 +202,52 @@ DIST=sid sudo pbuilder update # Update chroot before building package in it
# dget http://ftp.debian.org/debian/pool/main/n/nco/nco_3.9.0-1.dsc
# dget http://ftp.debian.org/debian/pool/main/n/netcdf/netcdf_3.6.1-1.dsc
# apt-get source nco # Get package source
-sudo /bin/rm /var/cache/pbuilder/result/nco_5.2.1* # Cleanup prior build
+sudo /bin/rm /var/cache/pbuilder/result/nco_5.2.2* # Cleanup prior build
# To pass DEB_BUILD_OPTIONS to pbuilder while using sudo, one must first
# modify sudoers with visudo to prevent sudo from resetting environment
#export DEB_BUILD_OPTIONS='disable-dap-netcdf disable-netcdf4 disable-udunits2'; # Disable optional packages based on available Debian support
-cd ${DATA};DIST=sid sudo pbuilder build nco_5.2.1-1.dsc > ~/foo.nco.pbuilder 2>&1
-cd /var/cache/pbuilder/result;debsign -k6F635D10 nco_5.2.1-1_*.changes
-lintian /var/cache/pbuilder/result/nco_5.2.1-1_*.deb
+cd ${DATA};DIST=sid sudo pbuilder build nco_5.2.2-1.dsc > ~/foo.nco.pbuilder 2>&1
+cd /var/cache/pbuilder/result;debsign -k6F635D10 nco_5.2.2-1_*.changes
+lintian /var/cache/pbuilder/result/nco_5.2.2-1_*.deb
sudo dpkg --remove nco
-sudo dpkg --install /var/cache/pbuilder/result/nco_5.2.1-1_*.deb
+sudo dpkg --install /var/cache/pbuilder/result/nco_5.2.2-1_*.deb
cd ~/nco/bld;MY_BIN_DIR=/usr/bin ../bm/nco_bm.pl --regress
# NB: Upload pbuilder Debian Sid packages to Debian mentors, but not
# to personal or NCO websites since most people use Ubuntu not Debian
# NB: Debian versions are a PITA, ensure RPMs build before uploading to Debian
-cd /var/cache/pbuilder/result;dupload -t mentors nco_5.2.1-1_*.changes
+cd /var/cache/pbuilder/result;dupload -t mentors nco_5.2.2-1_*.changes
# RPM builds as root
export rpm_root='/usr/src/redhat'
# export sudo_sng='' # sudo not-necessary when builing in user directories
export sudo_sng='sudo' # sudo necessary when building in system directories
cd ~/nco;cvc;cvu
-/bin/rm -rf ${DATA}/nco-5.2.1 ${DATA}/nco-5.2.1* # Cleanup last build
+/bin/rm -rf ${DATA}/nco-5.2.2 ${DATA}/nco-5.2.2* # Cleanup last build
${sudo_sng} /bin/rm -r -f \
-${rpm_root}/BUILD/nco-5.2.1 \
-${rpm_root}/RPMS/i386/nco-5.2.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-5.2.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-5.2.1-?.i386.rpm \
-${rpm_root}/SOURCES/nco-5.2.1.tar.gz \
-${rpm_root}/SPECS/nco-5.2.1.spec \
-${rpm_root}/SRPMS/nco-5.2.1-?.src.rpm
-cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.2.1-1 -d nco-5.2.1 nco # Export based on tag
-${sudo_sng} ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/SPECS/nco-5.2.1.spec
-tar cvzf ./nco-5.2.1.tar.gz --exclude='nco-5.2.1/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.2.1
-${sudo_sng} /bin/cp ${DATA}/nco-5.2.1.tar.gz ${rpm_root}/SOURCES
+${rpm_root}/BUILD/nco-5.2.2 \
+${rpm_root}/RPMS/i386/nco-5.2.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-5.2.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-5.2.2-?.i386.rpm \
+${rpm_root}/SOURCES/nco-5.2.2.tar.gz \
+${rpm_root}/SPECS/nco-5.2.2.spec \
+${rpm_root}/SRPMS/nco-5.2.2-?.src.rpm
+cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.2.2-1 -d nco-5.2.2 nco # Export based on tag
+${sudo_sng} ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/SPECS/nco-5.2.2.spec
+tar cvzf ./nco-5.2.2.tar.gz --exclude='nco-5.2.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.2.2
+${sudo_sng} /bin/cp ${DATA}/nco-5.2.2.tar.gz ${rpm_root}/SOURCES
cd ${rpm_root}/SPECS
-${sudo_sng} rpmbuild -ba --sign nco-5.2.1.spec > ~/foo.nco 2>&1
+${sudo_sng} rpmbuild -ba --sign nco-5.2.2.spec > ~/foo.nco 2>&1
scp \
-${rpm_root}/RPMS/i386/nco-5.2.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-5.2.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-5.2.1-?.i386.rpm \
-${rpm_root}/SRPMS/nco-5.2.1-?.src.rpm \
+${rpm_root}/RPMS/i386/nco-5.2.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-5.2.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-5.2.2-?.i386.rpm \
+${rpm_root}/SRPMS/nco-5.2.2-?.src.rpm \
dust.ess.uci.edu:/var/www/html/nco/src
scp \
-${rpm_root}/RPMS/i386/nco-5.2.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-5.2.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-5.2.1-?.i386.rpm \
-${rpm_root}/SRPMS/nco-5.2.1-?.src.rpm \
+${rpm_root}/RPMS/i386/nco-5.2.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-5.2.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-5.2.2-?.i386.rpm \
+${rpm_root}/SRPMS/nco-5.2.2-?.src.rpm \
zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
# RPM builds as user
@@ -256,33 +256,33 @@ zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
export rpm_root="${DATA}/rpm/nco"
#cd ~/nco;cvc;cvu # This risks committing unwanted *.[ch]pp files
mkdir -p ${DATA}/rpm/nco/TMP ${DATA}/rpm/nco/BUILD
-/bin/rm -rf ${DATA}/nco-5.2.1 ${DATA}/nco-5.2.1* # Cleanup last build
+/bin/rm -rf ${DATA}/nco-5.2.2 ${DATA}/nco-5.2.2* # Cleanup last build
/bin/rm -r -f \
-${rpm_root}/nco-5.2.1-?.src.rpm \
-${rpm_root}/nco-5.2.1.spec \
-${rpm_root}/nco-5.2.1.tar.gz \
-${rpm_root}/*/nco-5.2.1-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-5.2.1-?.*.rpm \
-${rpm_root}/*/nco-devel-5.2.1-?.*.rpm
-# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.2.1-1 -d nco-5.2.1 nco # Export based on tag
-cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -D "1 second ago" -dnco-5.2.1 nco # Export most recent and build as 5.2.1-1
-tar cvzf ./nco-5.2.1.tar.gz --exclude='nco-5.2.1/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.2.1
-/bin/cp ${DATA}/nco-5.2.1.tar.gz ${rpm_root}
+${rpm_root}/nco-5.2.2-?.src.rpm \
+${rpm_root}/nco-5.2.2.spec \
+${rpm_root}/nco-5.2.2.tar.gz \
+${rpm_root}/*/nco-5.2.2-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-5.2.2-?.*.rpm \
+${rpm_root}/*/nco-devel-5.2.2-?.*.rpm
+# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.2.2-1 -d nco-5.2.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.2.2 nco # Export most recent and build as 5.2.2-1
+tar cvzf ./nco-5.2.2.tar.gz --exclude='nco-5.2.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.2.2
+/bin/cp ${DATA}/nco-5.2.2.tar.gz ${rpm_root}
ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/nco.spec
cd ${rpm_root}
rpmbuild -ba --sign nco.spec > ~/foo.nco 2>&1
-rpmlint ${rpm_root}/*/nco-5.2.1-?.*.rpm
+rpmlint ${rpm_root}/*/nco-5.2.2-?.*.rpm
sudo yum remove nco
-sudo yum install ${rpm_root}/*/nco-5.2.1-?.*.rpm
+sudo yum install ${rpm_root}/*/nco-5.2.2-?.*.rpm
scp \
-${rpm_root}/*/nco-5.2.1-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-5.2.1-?.*.rpm \
-${rpm_root}/*/nco-devel-5.2.1-?.*.rpm \
-${rpm_root}/nco-5.2.1-?.*.src.rpm \
+${rpm_root}/*/nco-5.2.2-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-5.2.2-?.*.rpm \
+${rpm_root}/*/nco-devel-5.2.2-?.*.rpm \
+${rpm_root}/nco-5.2.2-?.*.src.rpm \
dust.ess.uci.edu:/var/www/html/nco/src
scp \
-${rpm_root}/*/nco-5.2.1-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-5.2.1-?.*.rpm \
-${rpm_root}/*/nco-devel-5.2.1-?.*.rpm \
-${rpm_root}/nco-5.2.1-?.*.src.rpm \
+${rpm_root}/*/nco-5.2.2-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-5.2.2-?.*.rpm \
+${rpm_root}/*/nco-devel-5.2.2-?.*.rpm \
+${rpm_root}/nco-5.2.2-?.*.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.2.1 released <!--#flastmod file="src/nco-5.2.1.tar.gz"-->
+Current stable NCO version is 5.2.2 released <!--#flastmod file="src/nco-5.2.2.tar.gz"-->
</h2>
<table border=0 width=100%>
@@ -155,7 +155,8 @@ and
<h2>Recent Releases & Milestones</h2>
<ul>
-<li>2024 Apr ??: 5.2.2 <i>In Progress...</i>
+<li>2024 Apr ??: 5.2.3 <i>In Progress...</i>
+<li>2024 Mar 22: 5.2.2 ncchecker
<li>2024 Feb 18: 5.2.1 Quick fix to 5.2.0
<li>2024 Feb 16: 5.2.0 S1D ELM restart unpacking
<li>2023 Nov 07: 5.1.9 ncremap updates
@@ -230,6 +231,7 @@ techniques for climate data analysis:
<li><a href="./nco.html#ncap2"><tt>ncap2</tt></a> netCDF Arithmetic Processor (<a href="./nco.html#xmp_ncap">examples</a>)</li>
<li><a href="./nco.html#ncatted"><tt>ncatted</tt></a> netCDF ATTribute EDitor (<a href="./nco.html#xmp_ncatted">examples</a>)</li>
<li><a href="./nco.html#ncbo"><tt>ncbo</tt></a> netCDF Binary Operator (addition, multiplication...) (<a href="./nco.html#xmp_ncbo">examples</a>)</li>
+<li><a href="./nco.html#ncchecker"><tt>ncchecker</tt></a> netCDF Compliance CHECKER (<a href="./nco.html#xmp_ncchecker">examples</a>)</li>
<li><a href="./nco.html#ncclimo"><tt>ncclimo</tt></a> netCDF CLIMatOlogy Generator (<a href="./nco.html#xmp_ncclimo">examples</a>)</li>
<li><a href="./nco.html#nces"><tt>nces</tt></a> netCDF Ensemble Statistics (<a href="./nco.html#xmp_nces">examples</a>)</li>
<li><a href="./nco.html#ncecat"><tt>ncecat</tt></a> netCDF Ensemble conCATenator (<a href="./nco.html#xmp_ncecat">examples</a>)</li>
@@ -651,15 +653,19 @@ 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.2.1 http://github.com/nco/nco.git nco-5.2.1</tt></a>.
+<tt>git clone -b 5.2.2 http://github.com/nco/nco.git nco-5.2.2</tt></a>.
<ul>
-<li><b>NCO 5.2.3</b>: (<i>Future</i>)
+<li><b>NCO 5.2.4</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.2.2</b>: (<i>In Progress, features in-progress or complete include</i>)
+<li><b>NCO 5.2.3</b>: (<i>In Progress, features in-progress or complete include</i>)
<tt>ncremap</tt> CF Convention for longitude vertices in map-files</li>
+<li><b>NCO 5.2.2</b>: (<i>Current Stable Release</i>)
+<tt>ncchecker</tt> debuts;
+<tt>ncclimo --rgn_avg</tt> includes <tt>time_bounds</tt> in ELM/CLM;
+<tt>ncremap</tt> MBTR <tt>--monotonicity</tt></li>
<li><b>NCO 5.2.1</b>: (<i>Current Stable Release</i>)
<tt>ncclimo/ncremap</tt> MPI fix</li>
<li><b>NCO 5.2.0</b>:
@@ -808,7 +814,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.2.1</a> Executables Anaconda-compatible. Maintained by Filipe Fernandes.</li>
+<li><a href="https://github.com/conda-forge/nco-feedstock">nco-5.2.2</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>
@@ -817,7 +823,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.2.1</a></li>
+<li><a href="http://www.debian.org">Debian</a> and <a href="http://www.ubuntu.com">Ubuntu</a> GNU/Linux-compatible Intel systems, prebuilt binary executable <a href="http://www.debian.org">deb</a>: <a href="http://packages.debian.org/testing/math/nco.html">nco-5.2.2</a></li>
-->
<a href="http://packages.debian.org/unstable/science/nco">Debian NCO</a> and
<a href="https://launchpad.net/ubuntu/+source/nco">Ubuntu NCO</a> homepages.
@@ -825,8 +831,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.2.1-1_i386.deb</tt>’):</dt>
-<li><a href="https://launchpad.net/ubuntu/+source/nco/5.2.1-1">nco_5.2.1-1_amd64.deb</a> : Executables AMD64-compatible</li>
+<dt>Debian package for most recent NCO release (install with, e.g., ‘<tt>dpkg --install nco_5.2.2-1_i386.deb</tt>’):</dt>
+<li><a href="https://launchpad.net/ubuntu/+source/nco/5.2.2-1">nco_5.2.2-1_amd64.deb</a> : Executables AMD64-compatible</li>
Thanks to Daniel Baumann, Sebastian Couwenberg, Barry deFreese, Francesco Lovergine,
Brian Mays, Rorik Peterson, and Matej Vela for their help packaging
NCO for Debian over the years.
@@ -868,12 +874,12 @@ Thanks to Gavin Burris and Kyle Wilcox for documenting build procedures for RHEL
<h3><a href="http://www.apple.com/macosx/">MacOS Darwin</a></h3>
<ul>
<!--
-# MacOS 14.2.1 (Ventura) systems (firn, sastrugi, spectral):
+# MacOS 14.3.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.2.1.macos.14.2.tar.gz nc*;scp ${DATA}/nco-5.2.1.macos.14.2.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
+cd ~/bin;tar cvzf ${DATA}/nco-5.2.2.macos.14.3.tar.gz nc*;scp ${DATA}/nco-5.2.2.macos.14.3.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.2.1.macos.14.2.tar.gz">nco-5.2.1.macos.14.2.tar.gz</a> (<!--#fsize file="src/nco-5.2.1.macos.14.2.tar.gz"-->): Executables MacOS 14.2-compatible (last updated <!--#flastmod file="src/nco-5.2.1.macos.14.2.tar.gz"-->). Maintained by NCO Project.</li>
+<li><a href="src/nco-5.2.2.macos.14.3.tar.gz">nco-5.2.2.macos.14.3.tar.gz</a> (<!--#fsize file="src/nco-5.2.2.macos.14.3.tar.gz"-->): Executables MacOS 14.3-compatible (last updated <!--#flastmod file="src/nco-5.2.2.macos.14.3.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.5. 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>
@@ -1076,12 +1082,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.2.1.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src -->
-<a href="https://github.com/nco/nco/archive/5.2.1.tar.gz">nco-5.2.1.tar.gz</a>
-(<!--#fsize file="src/nco-5.2.1.tar.gz"--> compressed tar-file)<br>
-<!--#exec cmd="openssl dgst -md5 src/nco-5.2.1.tar.gz"--><br>
-<!--#exec cmd="openssl dgst -sha1 src/nco-5.2.1.tar.gz"--><br>
-<!--#exec cmd="openssl dgst -sha256 src/nco-5.2.1.tar.gz"-->
+<!-- scp ${DATA}/nco-5.2.2.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src -->
+<a href="https://github.com/nco/nco/archive/5.2.2.tar.gz">nco-5.2.2.tar.gz</a>
+(<!--#fsize file="src/nco-5.2.2.tar.gz"--> compressed tar-file)<br>
+<!--#exec cmd="openssl dgst -md5 src/nco-5.2.2.tar.gz"--><br>
+<!--#exec cmd="openssl dgst -sha1 src/nco-5.2.2.tar.gz"--><br>
+<!--#exec cmd="openssl dgst -sha256 src/nco-5.2.2.tar.gz"-->
</li>
</ul>
@@ -1102,8 +1108,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.2.1</tt>:
-<p><tt>git clone https://github.com/nco/nco.git;cd nco;git checkout 5.2.1</tt></p>
+then checks out NCO version <tt>5.2.2</tt>:
+<p><tt>git clone https://github.com/nco/nco.git;cd nco;git checkout 5.2.2</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
@@ -1113,12 +1119,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.2.1</tt>) and the development version is that the
+(e.g., <tt>5.2.2</tt>) and the development version is that the
tagged release operators will print a valid version number (e.g.,
-<tt>5.2.1</tt>) when asked to do so with the <tt>-r</tt> flag
+<tt>5.2.2</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.2.1-alpha06</tt>).
+information (e.g., <tt>5.2.2-alpha06</tt>).
<!--
<a name="doxy"></a>
@@ -1301,9 +1307,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.2.1.tar.gz</dt>
-<dt>tar xvzf 5.2.1.tar.gz</dt>
-<dt>cd nco-5.2.1</dt>
+<dt>wget https://github.com/nco/nco/archive/5.2.2.tar.gz</dt>
+<dt>tar xvzf 5.2.2.tar.gz</dt>
+<dt>cd nco-5.2.2</dt>
<dt>./configure --prefix=/usr/local</dt>
<dt>make</dt>
<dt>sudo make install</dt>
=====================================
doc/nco.texi
=====================================
@@ -38,8 +38,8 @@ M-x texinfo-multiple-files-update
Usage:
export TEX='tex --src-specials'
cd ~/nco/doc;texi2dvi nco.texi;makeinfo --html --ifinfo --no-split --output=nco.html nco.texi;makeinfo nco.texi;dvips -o nco.ps nco.dvi;texi2dvi --pdf nco.texi;makeinfo --xml --ifinfo --no-split --output=nco.xml nco.texi;makeinfo --no-headers --output=nco.txt nco.texi
-cd ~/nco/doc;/usr/bin/scp index.shtml nco_news.shtml ChangeLog TODO VERSION nco.dvi nco.html nco.info* nco.pdf nco.ps nco.texi nco.txt nco.xml nco_rfr_crd.pdf ../README ../data/ncap.in ../data/ncap2.in zender,nco at web.sf.net:/home/project-web/nco/htdocs;cd -
-cd ~/nco/doc;/usr/bin/scp index.shtml nco_news.shtml ChangeLog TODO VERSION nco.dvi nco.html nco.info* nco.pdf nco.ps nco.texi nco.txt nco.xml nco_rfr_crd.pdf ../README ../data/ncap.in ../data/ncap2.in dust.ess.uci.edu:Sites/nco;cd -
+cd ~/nco/doc;/usr/bin/scp index.shtml nco_news.shtml ChangeLog TODO VERSION nco.dvi nco.html nco.info* nco.pdf nco.ps nco.texi nco.txt nco.xml ../README ../data/ncap.in ../data/ncap2.in zender,nco at web.sf.net:/home/project-web/nco/htdocs;cd -
+cd ~/nco/doc;/usr/bin/scp index.shtml nco_news.shtml ChangeLog TODO VERSION nco.dvi nco.html nco.info* nco.pdf nco.ps nco.texi nco.txt nco.xml ../README ../data/ncap.in ../data/ncap2.in dust.ess.uci.edu:Sites/nco;cd -
dvips -o nco.ps nco.dvi
dvips -Ppdf -G0 -o nco.ps nco.dvi
makeinfo --html --ifinfo --no-split --output=nco.html nco.texi
@@ -128,12 +128,12 @@ Octave TeXInfo manual shows clean TeXInfo structure
@setfilename nco.info
@c Define edition, date, ...
- at set nco-edition 5.2.1
- at set doc-edition 5.2.1
+ at set nco-edition 5.2.2
+ at set doc-edition 5.2.2
@set copyright-years 1995--2024
@set update-year 2024
- at set update-date 18 February 2024
- at set update-month February 2024
+ at set update-date 22 March 2024
+ at set update-month March 2024
@settitle @acronym{NCO} @value{nco-edition} User Guide
@@ -318,7 +318,7 @@ notice identical to this one except for the removal of this paragraph
@html
<meta name="Author" content="Charlie Zender">
<meta name="Keywords" content="NCO documentation, NCO User Guide,
-netCDF, operator, GCM, CCM, scientific data, ncbo, ncclimo, ncfe, ncecat,
+netCDF, operator, GCM, CCM, scientific data, ncbo, ncchecker, ncclimo, ncfe, ncecat,
ncflint, ncks, ncra, ncrcat, ncremap, ncrename, ncwa">
@end html
@html
@@ -13700,6 +13700,7 @@ described in any detail in the sections below.
* ncap2 netCDF Arithmetic Processor::
* ncatted netCDF Attribute Editor::
* ncbo netCDF Binary Operator::
+* ncchecker netCDF Compliance Checker::
* ncclimo netCDF Climatology Generator::
* ncecat netCDF Ensemble Concatenator::
* nces netCDF Ensemble Statistics::
@@ -16064,7 +16065,7 @@ print(timeNew);
// -25, -1, 23, 47, 71, 95, 119, 143, 167, 191 ;
tOld=time;
-// nb in this calendar NO Leap year
+// NB: Calendar=365_day has NO Leap year
tOld at calendar="365_day";
tOld at units="minutes since 2012-02-28 23:58:00.00";
@@ -18905,7 +18906,7 @@ pre-processing using other tools such as Awk, Perl, or Python.
<a name="ncmultiply"></a> <!-- http://nco.sf.net/nco.html#ncmultiply -->
<a name="ncdivide"></a> <!-- http://nco.sf.net/nco.html#ncdivide -->
@end html
- at node ncbo netCDF Binary Operator, ncclimo netCDF Climatology Generator, ncatted netCDF Attribute Editor, Reference Manual
+ at node ncbo netCDF Binary Operator, ncchecker netCDF Compliance Checker, ncatted netCDF Attribute Editor, Reference Manual
@section @command{ncbo} netCDF Binary Operator
@findex ncbo
@findex ncdiff
@@ -19341,13 +19342,83 @@ ncrcat t_anm_8589_??.nc t_anm_8589_0112.nc
@end example
@noindent
+ at page
+ at html
+<a name="ncchecker"></a> <!-- http://nco.sf.net/nco.html#ncchecker -->
+ at end html
+ at node ncchecker netCDF Compliance Checker, ncclimo netCDF Climatology Generator, ncbo netCDF Binary Operator, Reference Manual
+ at section @command{ncchecker} netCDF Compliance Checker
+ at cindex @acronym{CF}
+ at findex ncchecker
+
+ at noindent
+SYNTAX
+ at example
+ncchecker
+[-D @var{dbg}] [-i @var{drc_in}]
+[--tests=@var{tst_lst}]
+[-x] [-v @var{var}[, at dots{}]] [--version]
+[@var{input-files}]
+ at end example
+
+ at noindent
+DESCRIPTION
+
+ at html
+<a name="DIWG"></a> <!-- http://nco.sf.net/nco.html#DIWG -->
+ at end html
+ at cindex @acronym{DIWG}
+As of version 5.2.2 (March, 2024), @acronym{NCO} comes with the
+ at command{ncchecker} script.
+This command checks files for compliance with best practices rules and
+recommendations from various data and metadata standards bodies.
+These include the Climate & Forecast (@acronym{CF}) Metadata
+Conventions and the NASA Dataset Interoperability Working Group
+(@acronym{DIWG}) recommendations.
+Only a small subset (six tests) of @acronym{CF} or
+ at acronym{DIWG} recommendations are currently supported.
+The number of tests implemented, or, equivalently, of recommendations
+checked, is expected to grow.
+
+ at command{ncchecker} reads each data file in @var{input-files}, in
+ at var{drc_in}, or piped through standard input.
+It performs the checks requested in the @samp{--tests=@var{tst_lst}}
+option, if any (otherwise it performs all tests), and writes the
+results to @code{stdout}.
+The command supports some standard @acronym{NCO} options, including
+increasing the verbosity level with @samp{-D @var{dbg_lvl}},
+excluding variables with @samp{-x -v @var{var_lst}}, variable
+subsetting with @samp{-v @var{var_lst}}, and printing the
+version with @samp{--version}.
+The output contains counts of the location and number of failed tests,
+or prints ``SUCCESS'' for tests with no failures.
+
+ at noindent
+ at html
+<a name="xmp_ncchecker"></a> <!-- http://nco.sf.net/nco.html#xmp_ncchecker -->
+ at end html
+EXAMPLES
+
+ at example
+ at verbatim
+ncchecker in1.nc in2.nc # Run all tests on two files
+ncchecker -v var1,var2 in1.nc # Check only two variables
+ncchecker *.nc # Glob input files via wildcard
+ls *.nc | ncchecker # Input files via stdin
+ncchecker --dbg=2 *.nc # Debug ncchecker
+ncchecker --tests=nan,mss *.nc # Select only two tests
+ncchecker --tests=xtn,tm,nan,mss,chr,bnd *.nc # Change test ordering
+ncchecker file:///Users/zender/in_zarr4#mode=nczarr,file # Check Zarr object(s)
+ at end verbatim
+ at end example
+
@page
@html
<a name="ncclimo"></a> <!-- http://nco.sf.net/nco.html#ncclimo -->
<a name="ncsplit"></a> <!-- http://nco.sf.net/nco.html#ncsplit -->
<a name="ncsplit"></a> <!-- http://nco.sf.net/nco.html#splitter -->
@end html
- at node ncclimo netCDF Climatology Generator, ncecat netCDF Ensemble Concatenator, ncbo netCDF Binary Operator, Reference Manual
+ at node ncclimo netCDF Climatology Generator, ncecat netCDF Ensemble Concatenator, ncchecker netCDF Compliance Checker, Reference Manual
@section @command{ncclimo} netCDF Climatology Generator
@cindex climo
@cindex climatology
@@ -19370,6 +19441,7 @@ ncclimo [-3] [-4] [-5] [-6] [-7]
[--vrt_out=@var{vrt_fl}] [--vrt_xtr=@var{vrt_xtr}]
[-X @var{drc_xtn}] [-x @var{drc_prv}] [--xcl_var]
[-Y @var{rgr_xtn}] [-y @var{rgr_prv}] [--ypf=@var{ypf_max}]
+[@var{input-files}]
@end example
@noindent
@@ -19605,6 +19677,7 @@ The @samp{.cam.} and @samp{.h0.} bits are added internally to produce
the input filenames.
Modify these via the @option{-m @var{mdl_nm}} and @option{-h
@var{hst_nm}} options if needed.
+
For input files named slightly differently than standard
@acronym{CESM}'ish names, supply the filename (excluding the path
component) as the @var{caseid} and then @command{ncclimo} will attempt
@@ -19624,7 +19697,14 @@ digits that precede the suffix are @var{YYYYMM}-format), specify
@samp{-c merra2_198001.nc} and the prefix (@code{merra2}) will be
automatically abstracted and used to template and generate all the
filenames based on the specified @var{yr_srt} and @var{yr_end}.
-Please tell us any dataset filename regular expressions that you would
+ at example
+ at verbatim
+ncclimo --c merra2_198001.nc --start=1980 --end=1999
+ncclimo --c cesm_1980-01.nc --start=1980 --end=1999
+ncclimo --c eamxx_1980-01-00000.nc --start=1980 --end=1999
+ at end verbatim
+ at end example
+Please tell us any common dataset filename regular expressions that you would
like added to @command{ncclimo}'s internal database.
The @samp{--caseid=@var{caseid}} option is not mandatory in
@@ -25668,7 +25748,7 @@ ncremap [-3] [-4] [-5] [-6] [-7]
[--skl=@var{skl-file}] [--stdin] [-T @var{drc_tmp}] [-t @var{thr_nbr}]
[-U] [-u @var{unq_sfx}] [--ugrid=@var{ugrid-file}] [--uio]
[-V @var{rgr_var}] [-v @var{var_lst}[, at dots{}]] [--version] [--vrb=@var{vrb_lvl}]
-[--vrt_in=@var{vrt_fl}] [--vrt_out=@var{vrt_fl}] [--vrt_ntp=@var{vrt_ntp}] [--vrt_xtr=@var{vrt_xtr}]
+[--vrt_in=@var{vrt_fl}] [--vrt_out=@var{vrt_fl}] [--vrt_nm=@var{vrt_nm}] [--vrt_ntp=@var{vrt_ntp}] [--vrt_xtr=@var{vrt_xtr}]
[-W @var{wgt_opt}] [-w @var{wgt_cmd}] [-x @var{xtn_lst}[, at dots{}]] [--xcl_var]
[--xtr_nsp=@var{xtr_nsp}] [--xtr_xpn=@var{xtr_xpn}]
[@var{input-files}] [@var{output-file}]
@@ -30657,9 +30737,10 @@ RHEL and CentOS build scripts and bug reports.
@cindex Andrea Cimatoribus
@item Andrea Cimatoribus
@acronym{NCO} Spiral Logo
+ at cindex Walter Hannah
@cindex Martin Otte
@cindex Etienne Tourigny
- at item Martin Otte, Etienne Tourigny
+ at item Walter Hannah, Martin Otte, Etienne Tourigny
Single bug reports and fixes
@cindex Wenshan Wang
@item Wenshan Wang
=====================================
man/Makefile.am
=====================================
@@ -1,4 +1,4 @@
# $Header$ -*-makefile-*-
-man_MANS = ncap2.1 ncatted.1 ncbo.1 ncclimo.1 nces.1 ncecat.1 ncflint.1 ncks.1 nco.1 ncpdq.1 ncra.1 ncrcat.1 ncremap.1 ncrename.1 ncwa.1 ncz2psx.1
+man_MANS = ncap2.1 ncatted.1 ncbo.1 ncclimo.1 nces.1 ncecat.1 ncflint.1 ncks.1 nco.1 ncpdq.1 ncra.1 ncrcat.1 ncremap.1 ncrename.1 ncwa.1 ncz2psx.1 ncchecker.1
EXTRA_DIST = $(man_MANS)
=====================================
man/Makefile.in
=====================================
@@ -305,7 +305,7 @@ target_vendor = @target_vendor@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-man_MANS = ncap2.1 ncatted.1 ncbo.1 ncclimo.1 nces.1 ncecat.1 ncflint.1 ncks.1 nco.1 ncpdq.1 ncra.1 ncrcat.1 ncremap.1 ncrename.1 ncwa.1 ncz2psx.1
+man_MANS = ncap2.1 ncatted.1 ncbo.1 ncclimo.1 nces.1 ncecat.1 ncflint.1 ncks.1 nco.1 ncpdq.1 ncra.1 ncrcat.1 ncremap.1 ncrename.1 ncwa.1 ncz2psx.1 ncchecker.1
EXTRA_DIST = $(man_MANS)
all: all-am
=====================================
man/ncchecker.1
=====================================
@@ -0,0 +1,123 @@
+.\" $Header$ -*-nroff-*-
+.\" Purpose: ROFF man page for ncchecker
+.\" Usage:
+.\" nroff -man ~/nco/man/ncchecker.1 | less
+.TH NCCHECKER 1
+.SH NAME
+ncchecker \- netCDF Compliance Checker
+.SH SYNTAX
+ncchecker
+[\-d
+.IR dbg_lvl ]
+[\-i
+.IR drc_in ]
+[\--tests=
+.IR tst_lst ]
+[\-x] [\-v
+.IR var_lst ]
+[\--version ]
+.I input-files
+
+.SH DESCRIPTION
+.PP
+.B ncchecker
+checks files for compliance with best practices rules and
+recommendations from various data and metadata standards bodies.
+These include the Climate & Forecast (CF) Metadata Conventions
+and the NASA Dataset Interoperability Working Group (DIWG)
+recommendations.
+It reads
+.I input-files
+from
+.B stdin,
+or the command, performs checks requested in the
+.IR tests
+option, if any (otherwise it performs all tests), and writes the
+results to
+.B stdout.
+Some standard
+.B NCO
+options are supported, including
+increasing the verbosity level with
+[\-D
+.IR dbg_lvl ],
+excluding variables with
+[\-x]
+variable subsetting with
+[\-v
+.IR var_lst ],
+and printing the version with
+[\--version].
+The output contains counts of the location and number of failed tests,
+or prints "SUCCESS" for tests with no failures.
+
+.\" NB: Append man_end.txt here
+.\" $Header$ -*-nroff-*-
+.\" Purpose: Trailer file for common ending to NCO man pages
+.\" Usage:
+.\" Append this file to end of NCO man pages immediately after marker
+.\" that says "Append man_end.txt here"
+.SH AUTHOR
+.B NCO
+manual pages written by Charlie Zender.
+
+.SH "REPORTING BUGS"
+Report bugs to <http://sf.net/bugs/?group_id=3331>.
+
+.SH COPYRIGHT
+Copyright \(co 2023-present Charlie Zender
+.br
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+.SH "SEE ALSO"
+The full documentation for
+.B NCO
+is maintained as a Texinfo manual called the
+.B NCO Users Guide.
+Because
+.B NCO
+is mathematical in nature, the documentation includes TeX-intensive
+portions not viewable on character-based displays.
+Hence the only complete and authoritative versions of the
+.B NCO Users Guide
+are the PDF (recommended), DVI, and Postscript versions at
+<http://nco.sf.net/nco.pdf>, <http://nco.sf.net/nco.dvi>,
+and <http://nco.sf.net/nco.ps>, respectively.
+HTML and XML versions
+are available at <http://nco.sf.net/nco.html> and
+<http://nco.sf.net/nco.xml>, respectively.
+
+If the
+.B info
+and
+.B NCO
+programs are properly installed at your site, the command
+.IP
+.B info nco
+.PP
+should give you access to the complete manual, except for the
+TeX-intensive portions.
+
+.BR ncap (1),
+.BR ncap2 (1),
+.BR ncatted (1),
+.BR ncbo (1),
+.BR ncclimo (1),
+.BR nces (1),
+.BR ncecat (1),
+.BR ncflint (1),
+.BR ncz2psx (1),
+.BR ncks (1),
+.BR nco (1),
+.BR ncpdq (1),
+.BR ncra (1),
+.BR ncrcat (1),
+.BR ncremap (1),
+.BR ncrename (1),
+.BR ncwa (1)
+
+.SH HOMEPAGE
+The
+.B NCO
+homepage at <http://nco.sf.net> contains more information.
=====================================
man/ncremap.1
=====================================
@@ -139,6 +139,8 @@ ncremap
.IR vrt.nc ]
[\--vrt_out
.IR vrt.nc ]
+[\--vrt_nm
+.IR vrt_nm ]
[\--vrt_ntp=
.IR vrt_ntp ]
[\--vrt_xtr=
=====================================
src/nco++/Makefile.old
=====================================
@@ -339,7 +339,7 @@ else
GSL_INC_FLG := $(shell ${GSL_CONFIG} --cflags)
endif # endif GSL_INC
ifdef GSL_LIB
- GSL_LIB_FLG := -L${GSL_LIB} -lgsl
+ GSL_LIB_FLG := -L${GSL_LIB} -lgsl -lgslcblas
else
GSL_LIB_FLG := $(shell ${GSL_CONFIG} --libs)
endif # endif GSL_LIB
=====================================
src/nco/nco.h
=====================================
@@ -373,17 +373,17 @@ extern "C" {
# define NCO_VERSION_MINOR 2
#endif /* !NCO_VERSION_MINOR */
#ifndef NCO_VERSION_PATCH
-# define NCO_VERSION_PATCH 1
+# define NCO_VERSION_PATCH 2
#endif /* !NCO_VERSION_PATCH */
#ifndef NCO_VERSION_NOTE
-# define NCO_VERSION_NOTE "" /* Blank for final versions, non-blank (e.g., "-beta37") for pre-release versions */
+# define NCO_VERSION_NOTE "" /* Blank for final versions, non-blank (e.g., "-beta73") for pre-release versions */
#endif /* !NCO_VERSION_NOTE */
#ifndef NCO_LIB_VERSION
/* Define NC_LIB_VERSION as three-digit number for arithmetic comparisons by CPP */
# 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.2.1"
+# define NCO_VERSION "5.2.2"
#endif /* !NCO_VERSION */
/* Compatibility tokens new to netCDF4 netcdf.h: */
=====================================
src/nco/nco_ctl.c
=====================================
@@ -1172,7 +1172,7 @@ nco_usg_prn(void)
if(prg_lcl == ncatted) (void)fprintf(stdout,"-t, --typ_mch, type_match \tType-match attribute edits\n");
if(prg_lcl != ncatted) (void)fprintf(stdout,"-t, --thr_nbr, threads, omp_num_threads thr_nbr\tThread number for OpenMP\n");
} /* end if */
- if(strstr(opt_sng,"[-U]")) (void)fprintf(stdout,"-U, --unpack\tUnpack input file\n");
+ if(strstr(opt_sng,"[-U]")) (void)fprintf(stdout,"-U, --unpack\t\tUnpack input file\n");
if(strstr(opt_sng,"[-u")){
if(prg_lcl == ncks) (void)fprintf(stdout,"-u, --units\t\tToggle printing units of variables, if any\n");
if(prg_lcl == ncecat) (void)fprintf(stdout,"-u, --ulm_nm, rcd_nm\tNew unlimited (record) dimension name\n");
=====================================
src/nco/nco_grp_utl.c
=====================================
@@ -848,7 +848,7 @@ nco_xtr_mk /* [fnc] Check -v and -g input names and c
} /* !tbl_idx */
if(!flg_usr_mch_obj && !EXCLUDE_INPUT_LIST){
- (void)fprintf(stderr,"%s: ERROR %s reports user-supplied %s name or regular expression \'%s\' is not in and/or does not match contents of input file\n",nco_prg_nm_get(),fnc_nm,(obj_typ == nco_obj_typ_grp) ? "group" : "variable",usr_sng);
+ (void)fprintf(stderr,"%s: ERROR %s reports user-supplied %s name (or regular expression) \'%s\' is not in (or rx does not match any) contents of input file\n",nco_prg_nm_get(),fnc_nm,(obj_typ == nco_obj_typ_grp) ? "group" : "variable",usr_sng);
nco_exit(EXIT_FAILURE);
} /* !flg_usr_mch_obj */
/* Free dynamic memory */
@@ -2238,14 +2238,14 @@ nco_chk_bnd /* [fnc] Check coordinates for bounds attributes */
} /* !att_idx */
/* Is this a naughty coordinate? */
if(att_idx == att_nbr){
- (void)fprintf(stdout,"%s: WARNING %s reports coordinate %s lacks \"%s\" attribute\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,att_bnd);
+ (void)fprintf(stdout,"%s: WARNING %s coordinate %s lacks \"%s\" attribute\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,att_bnd);
brk_nbr++;
} /* !nm_cf_chk */
} /* !nco_obj_typ_var */
} /* !idx_tbl */
if(brk_nbr > 0){
- if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s reports total number of coordinates without \"%s\" attribute is %d\n",nco_prg_nm_get(),fnc_nm,att_bnd,brk_nbr);
+ if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s total number of coordinates without \"%s\" attribute is %d\n",nco_prg_nm_get(),fnc_nm,att_bnd,brk_nbr);
//nco_exit(EXIT_FAILURE);
} /* !brk_nbr */
@@ -2285,7 +2285,7 @@ nco_chk_chr /* [fnc] Check identifiers for NUG-non-compliant characters */
nm=var_trv.nm;
/* Is variable name CF-compliant? */
if(!nm_cf_chk(nm)){
- (void)fprintf(stdout,"%s: WARNING %s reports variable name \"%s\" is not CF-compliant\n",nco_prg_nm_get(),fnc_nm,nm);
+ (void)fprintf(stdout,"%s: WARNING %s variable name \"%s\" is not CF-compliant\n",nco_prg_nm_get(),fnc_nm,nm);
brk_nbr++;
} /* !nm_cf_chk */
@@ -2297,7 +2297,7 @@ nco_chk_chr /* [fnc] Check identifiers for NUG-non-compliant characters */
nm=att_nm;
/* Is attribute name CF-compliant? */
if(!nm_cf_chk(nm)){
- (void)fprintf(stdout,"%s: WARNING %s reports variable %s attribute name \"%s\" is not CF-compliant\n",nco_prg_nm_get(),fnc_nm,var_trv.nm,nm);
+ (void)fprintf(stdout,"%s: WARNING %s variable %s attribute name \"%s\" is not CF-compliant\n",nco_prg_nm_get(),fnc_nm,var_trv.nm,nm);
brk_nbr++;
} /* !nm_cf_chk */
} /* !att_idx */
@@ -2309,7 +2309,7 @@ nco_chk_chr /* [fnc] Check identifiers for NUG-non-compliant characters */
if(strcmp(var_trv.nm_fll,"/")){
/* Is group name CF-compliant? */
if(!nm_cf_chk(nm)){
- (void)fprintf(stdout,"%s: WARNING %s reports group name \"%s\" is not CF-compliant\n",nco_prg_nm_get(),fnc_nm,nm);
+ (void)fprintf(stdout,"%s: WARNING %s group name \"%s\" is not CF-compliant\n",nco_prg_nm_get(),fnc_nm,nm);
brk_nbr++;
} /* !nm_cf_chk */
} /* !root group */
@@ -2320,7 +2320,7 @@ nco_chk_chr /* [fnc] Check identifiers for NUG-non-compliant characters */
nm=att_nm;
/* Is global or group attribute name CF-compliant? */
if(!nm_cf_chk(nm)){
- (void)fprintf(stdout,"%s: WARNING %s reports group %s attribute name \"%s\" is not CF-compliant\n",nco_prg_nm_get(),fnc_nm,var_trv.nm_fll,nm);
+ (void)fprintf(stdout,"%s: WARNING %s group %s attribute name \"%s\" is not CF-compliant\n",nco_prg_nm_get(),fnc_nm,var_trv.nm_fll,nm);
brk_nbr++;
} /* !nm_cf_chk */
} /* !att_idx */
@@ -2332,13 +2332,13 @@ nco_chk_chr /* [fnc] Check identifiers for NUG-non-compliant characters */
nm=trv_tbl->lst_dmn[idx_tbl].nm;
/* Is dimension name CF-compliant? */
if(!nm_cf_chk(nm)){
- (void)fprintf(stdout,"%s: WARNING %s reports dimension name \"%s\" is not CF-compliant\n",nco_prg_nm_get(),fnc_nm,nm);
+ (void)fprintf(stdout,"%s: WARNING %s dimension name \"%s\" is not CF-compliant\n",nco_prg_nm_get(),fnc_nm,nm);
brk_nbr++;
} /* !nm_cf_chk */
} /* !idx_tbl */
if(brk_nbr > 0){
- if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s reports total number of identifiers with CF non-compliant names is %d\n",nco_prg_nm_get(),fnc_nm,brk_nbr);
+ if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s total number of identifiers with CF non-compliant names is %d\n",nco_prg_nm_get(),fnc_nm,brk_nbr);
//nco_exit(EXIT_FAILURE);
} /* !brk_nbr */
@@ -2396,7 +2396,7 @@ nco_chk_mss /* [fnc] Check variables+groups for missing_value attribute */
nm=att_nm;
/* Is this a naughty attribute? */
if(!strcmp(nm,att_ngt)){
- (void)fprintf(stdout,"%s: WARNING %s reports variable %s contains \"%s\" attribute\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nm);
+ (void)fprintf(stdout,"%s: WARNING %s variable %s contains \"%s\" attribute\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nm);
brk_nbr++;
} /* !nm_cf_chk */
} /* !att_idx */
@@ -2411,7 +2411,7 @@ nco_chk_mss /* [fnc] Check variables+groups for missing_value attribute */
nm=att_nm;
/* Is this a naughty attribute? */
if(!strcmp(nm,att_ngt)){
- (void)fprintf(stdout,"%s: WARNING %s reports group %s contains \"%s\" attribute\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nm);
+ (void)fprintf(stdout,"%s: WARNING %s group %s contains \"%s\" attribute\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nm);
brk_nbr++;
} /* !nm_cf_chk */
} /* !att_idx */
@@ -2419,7 +2419,7 @@ nco_chk_mss /* [fnc] Check variables+groups for missing_value attribute */
} /* !idx_tbl */
if(brk_nbr > 0){
- if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s reports total number of variables and/or groups with \"%s\" attribute is %d\n",nco_prg_nm_get(),fnc_nm,att_ngt,brk_nbr);
+ if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s total number of variables and/or groups with \"%s\" attribute is %d\n",nco_prg_nm_get(),fnc_nm,att_ngt,brk_nbr);
//nco_exit(EXIT_FAILURE);
} /* !brk_nbr */
@@ -2512,13 +2512,13 @@ nco_chk_nan /* [fnc] Check file for NaNs */
case FP_INFINITE: if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s[%ld]=%g is positive or negative infinity\n",var->nm,lmn,var->val.fp[lmn]); break; /* x is either positive infinity or negative infinity */
case FP_SUBNORMAL: if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s[%ld]=%g is subnormal\n",var->nm,lmn,var->val.fp[lmn]); break; /* x is too small to be represented in normalized format */
default:
- (void)fprintf(stdout,"%s: ERROR %s reports invalid return code for fpclassify() on variable %s element %ld\n",nco_prg_nm_get(),fnc_nm,var_trv.nm,lmn);
+ (void)fprintf(stdout,"%s: ERROR %s invalid return code for fpclassify() on variable %s element %ld\n",nco_prg_nm_get(),fnc_nm,var_trv.nm,lmn);
nco_exit(EXIT_FAILURE);
break;
} /* !rcd */
if(isnan(var->val.fp[lmn])){
flg_crr_var_has_nan=True;
- if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: WARNING %s reports variable %s has first NaNf at hyperslab element %ld\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,lmn);
+ if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: WARNING %s variable %s has first NaNf at hyperslab element %ld\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,lmn);
//nco_exit(EXIT_FAILURE);
/* Quit loop over elements, move on to next variable... */
break;
@@ -2536,13 +2536,13 @@ nco_chk_nan /* [fnc] Check file for NaNs */
case FP_INFINITE: if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s[%ld]=%g is positive or negative infinity\n",var->nm,lmn,var->val.dp[lmn]); break; /* x is either positive infinity or negative infinity */
case FP_SUBNORMAL: if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s[%ld]=%g is subnormal\n",var->nm,lmn,var->val.dp[lmn]); break; /* x is too small to be represented in normalized format */
default:
- (void)fprintf(stdout,"%s: ERROR %s reports invalid return code for fpclassify() on variable %s element %ld\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,lmn);
+ (void)fprintf(stdout,"%s: ERROR %s invalid return code for fpclassify() on variable %s element %ld\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,lmn);
nco_exit(EXIT_FAILURE);
break;
} /* !rcd */
if(isnan(var->val.dp[lmn])){
flg_crr_var_has_nan=True;
- if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: WARNING %s reports variable %s has first NaN at hyperslab element %ld\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,lmn);
+ if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: WARNING %s variable %s has first NaN at hyperslab element %ld\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,lmn);
//nco_exit(EXIT_FAILURE);
/* Quit loop over elements, move on to next variable... */
break;
@@ -2556,7 +2556,7 @@ nco_chk_nan /* [fnc] Check file for NaNs */
} /* !idx_tbl */
if(brk_nbr > 0){
- if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s reports total number of floating-point variables with NaN elements is %d\n",nco_prg_nm_get(),fnc_nm,brk_nbr);
+ if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s total number of floating-point variables with NaN elements is %d\n",nco_prg_nm_get(),fnc_nm,brk_nbr);
//nco_exit(EXIT_FAILURE);
} /* !brk_nbr */
@@ -2621,7 +2621,7 @@ nco_chk_tm /* [fnc] Check that time variables are double precision */
if(nco_dbg_lvl_get() >= nco_dbg_var) (void)fprintf(stdout,"%s: DEBUG %s type of variable %s is %s\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nco_typ_sng(var_trv.var_typ));
/* Is this a naughty time variable? */
if(var_trv.var_typ != NC_DOUBLE){
- (void)fprintf(stdout,"%s: WARNING %s reports variable %s is type %s not %s\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nco_typ_sng(var_trv.var_typ),"NC_DOUBLE");
+ (void)fprintf(stdout,"%s: WARNING %s variable %s is type %s not %s\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nco_typ_sng(var_trv.var_typ),"NC_DOUBLE");
brk_nbr++;
} /* !var_trv.var_typ */
/* Avoid double-counting, jump to next variable */
@@ -2649,14 +2649,14 @@ nco_chk_tm /* [fnc] Check that time variables are double precision */
att_val[att_sz]='\0';
}else if(att_typ == NC_STRING){
if(att_sz != 1L){
- (void)fprintf(stderr,"%s: WARNING %s reports \"%s\" attribute for variable %s is an %s array of size %ld. This violates the CF Conventions which requires a single string for this attribute. Will skip this variable.\n",nco_prg_nm_get(),fnc_nm,att_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nco_typ_sng(att_typ),att_sz);
+ (void)fprintf(stderr,"%s: WARNING %s \"%s\" attribute for variable %s is an %s array of size %ld. This violates the CF Conventions which requires a single string for this attribute. Will skip this variable.\n",nco_prg_nm_get(),fnc_nm,att_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nco_typ_sng(att_typ),att_sz);
continue;
} /* !att_sz */
rcd+=nco_get_att(grp_id,var_id,att_nm,(void *)att_val_sngp,att_typ);
/* De-reference the char ** NC_STRING array, a list now known to be of size one, into a normal char * string */
att_val=att_val_sngp[0];
}else{
- (void)fprintf(stderr,"%s: WARNING %s reports \"%s\" attribute for variable %s is type %s. This violates the CF Conventions which allow only datatypes %s and %s for attribute %s. NCO will skip this attribute.\n",nco_prg_nm_get(),fnc_nm,att_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nco_typ_sng(att_typ),nco_typ_sng(NC_CHAR),nco_typ_sng(NC_STRING),att_nm);
+ (void)fprintf(stderr,"%s: WARNING %s \"%s\" attribute for variable %s is type %s. This violates the CF Conventions which allow only datatypes %s and %s for attribute %s. NCO will skip this attribute.\n",nco_prg_nm_get(),fnc_nm,att_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nco_typ_sng(att_typ),nco_typ_sng(NC_CHAR),nco_typ_sng(NC_STRING),att_nm);
continue;
} /* !att_typ */
@@ -2665,7 +2665,7 @@ nco_chk_tm /* [fnc] Check that time variables are double precision */
/* Is this a naughty time variable? */
if(var_trv.var_typ != NC_DOUBLE){
- (void)fprintf(stdout,"%s: WARNING %s reports variable %s is type %s not %s\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nco_typ_sng(var_trv.var_typ),"NC_DOUBLE");
+ (void)fprintf(stdout,"%s: WARNING %s variable %s is type %s not %s\n",nco_prg_nm_get(),fnc_nm,(var_trv.grp_dpt == 0) ? var_trv.nm : var_trv.nm_fll,nco_typ_sng(var_trv.var_typ),"NC_DOUBLE");
brk_nbr++;
} /* !var_trv.var_typ */
@@ -2673,7 +2673,7 @@ nco_chk_tm /* [fnc] Check that time variables are double precision */
} /* !idx_tbl */
if(brk_nbr > 0){
- if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s reports total number of time variables not stored in double precision is %d\n",nco_prg_nm_get(),fnc_nm,brk_nbr);
+ if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s total number of time variables not stored in double precision is %d\n",nco_prg_nm_get(),fnc_nm,brk_nbr);
//nco_exit(EXIT_FAILURE);
} /* !brk_nbr */
@@ -2753,11 +2753,11 @@ nco_chk_xtn /* [fnc] Check filename extension */
if(flg_he5){
rcd=nco_inq_grp_full_ncid_flg(nc_id,grp_he5,&grp_id);
if(rcd == NC_ENOGRP){
- (void)fprintf(stdout,"%s: WARNING %s reports file with extension \"%s\" lacks HDF-EOS5 standard group \"%s\"\n",nco_prg_nm_get(),fnc_nm,sfx_he5,grp_he5);
+ (void)fprintf(stdout,"%s: WARNING %s file with extension \"%s\" lacks HDF-EOS5 standard group \"%s\"\n",nco_prg_nm_get(),fnc_nm,sfx_he5,grp_he5);
}else{ /* !rcd */
att_xtn_val=nco_char_att_get(grp_id,NC_GLOBAL,att_sng_he5);
- if(!att_xtn_val) (void)fprintf(stdout,"%s: WARNING %s reports file with extension \"%s\" lacks HDF-EOS5 standard global attribute \"%s\"\n",nco_prg_nm_get(),fnc_nm,sfx_he5,att_sng_he5);
- if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s: INFO %s reports value of HDF-EOS5 standard global attribute \"%s\" is \"%s\"\n",nco_prg_nm_get(),fnc_nm,att_sng_he5,att_xtn_val);
+ if(!att_xtn_val) (void)fprintf(stdout,"%s: WARNING %s file with extension \"%s\" lacks HDF-EOS5 standard global attribute \"%s\"\n",nco_prg_nm_get(),fnc_nm,sfx_he5,att_sng_he5);
+ if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s: INFO %s value of HDF-EOS5 standard global attribute \"%s\" is \"%s\"\n",nco_prg_nm_get(),fnc_nm,att_sng_he5,att_xtn_val);
if(att_xtn_val) att_xtn_val=(char *)nco_free(att_xtn_val);
} /* !rcd */
} /* !flg_he5 */
@@ -2766,24 +2766,24 @@ nco_chk_xtn /* [fnc] Check filename extension */
if(fl_fmt == NC_FORMAT_NETCDF4 || fl_fmt == NC_FORMAT_NETCDF4_CLASSIC){
att_xtn_val=nco_char_att_get(nc_id,NC_GLOBAL,att_sng_nc);
if(!att_xtn_val){
- (void)fprintf(stdout,"%s: WARNING %s reports %s file with extension \"%s\" lacks netCDF standard global attribute \"%s\"\n",nco_prg_nm_get(),fnc_nm,nco_fmt_sng(fl_fmt),sfx_nc,att_sng_nc);
+ (void)fprintf(stdout,"%s: WARNING %s %s file with extension \"%s\" lacks netCDF standard global attribute \"%s\"\n",nco_prg_nm_get(),fnc_nm,nco_fmt_sng(fl_fmt),sfx_nc,att_sng_nc);
rcd=nco_inq_grp_full_ncid_flg(nc_id,grp_he5,&grp_id);
if(rcd == NC_NOERR){
- (void)fprintf(stdout,"%s: WARNING %s reports file with extension \"%s\" contains HDF-EOS5 standard group \"%s\"\n",nco_prg_nm_get(),fnc_nm,sfx_he5,grp_he5);
+ (void)fprintf(stdout,"%s: WARNING %s file with extension \"%s\" contains HDF-EOS5 standard group \"%s\"\n",nco_prg_nm_get(),fnc_nm,sfx_he5,grp_he5);
}else{ /* !rcd */
rcd=NC_NOERR;
} /* !rcd */
} /* !att_xtn_val */
- if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s: INFO %s reports value of netCDF standard global attribute \"%s\" is \"%s\"\n",nco_prg_nm_get(),fnc_nm,att_sng_nc,att_xtn_val);
+ if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s: INFO %s value of netCDF standard global attribute \"%s\" is \"%s\"\n",nco_prg_nm_get(),fnc_nm,att_sng_nc,att_xtn_val);
if(att_xtn_val) att_xtn_val=(char *)nco_free(att_xtn_val);
}else{ /* !fl_fmt */
- if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s: INFO %s reports input file format is %s. This format has no mandatory global attributes that can be checked.\n",nco_prg_nm_get(),fnc_nm,nco_fmt_sng(fl_fmt));
+ if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s: INFO %s input file format is %s. This format has no mandatory global attributes that can be checked.\n",nco_prg_nm_get(),fnc_nm,nco_fmt_sng(fl_fmt));
} /* !fl_fmt */
} /* !flg_nc */
if(!flg_h5 && !flg_he5 && !flg_nc){
brk_nbr++;
- if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: WARNING %s reports filename extension \"%s\" is non-compliant\n",nco_prg_nm_get(),fnc_nm,sfx_sng ? sfx_sng : "(null)");
+ if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: WARNING %s filename extension \"%s\" is non-compliant\n",nco_prg_nm_get(),fnc_nm,sfx_sng ? sfx_sng : "(null)");
if(flg_nc4){
if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: HINT rename file with \"%s\" rather than \"%s\" extension\n",nco_prg_nm_get(),sfx_nc,sfx_sng);
@@ -2794,7 +2794,7 @@ nco_chk_xtn /* [fnc] Check filename extension */
if(fl_nm_dpl) fl_nm_dpl=(char *)nco_free(fl_nm_dpl);
if(brk_nbr > 0){
- if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s reports total number of non-compliant filename extensions is %d\n",nco_prg_nm_get(),fnc_nm,brk_nbr);
+ if(nco_dbg_lvl_get() >= nco_dbg_quiet) (void)fprintf(stdout,"%s: INFO %s total number of non-compliant filename extensions is %d\n",nco_prg_nm_get(),fnc_nm,brk_nbr);
} /* !brk_nbr */
return brk_nbr;
=====================================
src/nco/nco_mss_val.c
=====================================
@@ -390,7 +390,7 @@ nco_mss_val_get /* [fnc] Update number of attributes, missing value of variable
/* Warn when NCO looks for _FillValue and file has missing_value, and/or
warn when NCO looks for missing_value and file has _FillValue.
20101129: This is a long warning, only print when nco_dbg_lvl > 0 */
- if(nco_dbg_lvl_get() >= nco_dbg_std && has_fll_val && !var->has_mss_val && WRN_FIRST){
+ if(nco_dbg_lvl_get() >= nco_dbg_fl && has_fll_val && !var->has_mss_val && WRN_FIRST){
char sa[1000];
char sa1[1000];
char sa2[1000];
@@ -461,7 +461,7 @@ nco_mss_val_get_dbl /* [fnc] Return missing value of variable, if any, as double
/* Warn when NCO looks for _FillValue but file has missing_value, and/or
warn when NCO looks for missing_value but file has _FillValue.
20101129: This is a long warning, only print when nco_dbg_lvl > 0 */
- if(nco_dbg_lvl_get() >= nco_dbg_std && has_fll_val && !has_mss_val && WRN_FIRST){
+ if(nco_dbg_lvl_get() >= nco_dbg_fl && has_fll_val && !has_mss_val && WRN_FIRST){
char sa[1000];
char sa1[1000];
char sa2[1000];
@@ -493,7 +493,7 @@ nco_mss_val_get_unn /* [fnc] Return missing value of variable, if any, as double
int att_idx;
int var_nbr_att;
long att_sz;
- nco_bool has_fll_val=False; /* [flg] Has _FillValue attribute */
+ // nco_bool has_fll_val=False; /* [flg] Has _FillValue attribute */
nco_bool has_mss_val=False; /* [flg] Has missing value attribute */
nc_type att_typ;
@@ -503,7 +503,7 @@ nco_mss_val_get_unn /* [fnc] Return missing value of variable, if any, as double
for(att_idx=0;att_idx<var_nbr_att;att_idx++){
(void)nco_inq_attname(nc_id,var_id,att_idx,att_nm);
- if(WRN_FIRST && !(int)strcasecmp(att_nm,nco_not_mss_val_sng_get())) has_fll_val=True;
+ //if(WRN_FIRST && !(int)strcasecmp(att_nm,nco_not_mss_val_sng_get())) has_fll_val=True;
if((int)strcasecmp(att_nm,nco_mss_val_sng_get())) continue;
(void)nco_inq_att(nc_id,var_id,att_nm,&att_typ,&att_sz);
=====================================
src/nco/nco_rgr.c
=====================================
@@ -1706,7 +1706,7 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
if(flg_grd_in_prs){
rcd=nco_inq_varid(vrt_in_id,plev_nm_in,&lev_id);
if((rcd=nco_inq_varid_flg(in_id,ps_nm_in,&ps_id)) == NC_NOERR){ /* NB: Use in_id not vrt_in_id to search for PS in pure-pressure files since the surface pressure field is likely to be in the data file */
- /* Output file creation procedure discriminates between input surface pressure dimensioned as CAM/EAM vs. ECMWF */
+ /* Output file-creation procedure discriminates between input surface pressure dimensioned as CAM/EAM vs. ECMWF */
flg_grd_hyb_cameam=True;
if(flg_grd_out_hyb && (ps_id_tpl == NC_MIN_INT)) (void)fprintf(stderr,"%s: INFO %s detects spatially varying surface pressure field %s in pure-pressure input data file. %s will be copied directly from pure-pressure grid input dataset to, and used to construct the pressures of, the output hybrid-coordinate data file, where it will be named %s.\n",nco_prg_nm_get(),fnc_nm,ps_nm_in,ps_nm_in,ps_nm_out);
if(flg_grd_out_hyb && (ps_id_tpl != NC_MIN_INT)) (void)fprintf(stderr,"%s: INFO %s detects spatially varying surface pressure field in both vertical-grid file as %s, and in pure-pressure input data file as %s. The vertical grid-file takes precedence. %s will be copied directly from vertical-grid file to, and used to construct the pressures of, the output hybrid-coordinate data file, where it will be named %s. %s in input pure-pressure file will be ignored.\n",nco_prg_nm_get(),fnc_nm,ps_nm_tpl,ps_nm_in,ps_nm_tpl,ps_nm_out,ps_nm_in);
@@ -2628,6 +2628,7 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
ARGO: PRESSURE
CAM/EAM: hyai, hyam, hybi, hybm, ilev, lev, P0, PS
ECMWF: hyai, hyam, hybi, hybm, lev, lnsp
+ ERA5: level
MPAS-O: layerThickness, maxLevelCell, timeMonthly_avg_layerThickness, timeMonthly_avg_zMid, zMid
MPAS-O: refBottomDepth, vertCoordMovementWeights (derived 1D-profiles, no horizontal dimensions)
NCEP: plev
@@ -2635,7 +2636,7 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
SOSE: z
WOA: depth, depth_bnds, volume, zBroadcast
Run-time: dpt_nm_in, dpt_nm_out, plev_nm_in, plev_nm_out, ps_nm_in, ps_nm_tpl */
- const char *var_xcl_lst_fix[]={"/depth","/depth_bnds","/hyai","/hyam","/hybi","/hybm","/ilev","/lev","/layerThickness","/lnsp","/maxLevelCell","/P0","/plev","/PRESSURE","/refBottomDepth","/timeMonthly_avg_layerThickness","/timeMonthly_avg_zMid","/vertCoordMovementWeights","/volume","/z","/zBroadcast","/zMid"};
+ const char *var_xcl_lst_fix[]={"/depth","/depth_bnds","/hyai","/hyam","/hybi","/hybm","/ilev","/layerThickness","/lev","/level","/lnsp","/maxLevelCell","/P0","/plev","/PRESSURE","/refBottomDepth","/timeMonthly_avg_layerThickness","/timeMonthly_avg_zMid","/vertCoordMovementWeights","/volume","/z","/zBroadcast","/zMid"};
int var_xcl_fix_nbr=sizeof(var_xcl_lst_fix)/sizeof(char *); /* [nbr] Number of variables in fixed (compile-time) exclusion list */
/* Create list to hold both compile- and run-time exclusion variables */
char **var_xcl_lst=NULL; /* [sng] List of variables to exclude */
=====================================
src/nco/nco_scm.c
=====================================
@@ -210,7 +210,7 @@ nco_nmn_get(void) /* [fnc] Return mnemonic that describes 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 "Shabu Shabu";
+ return "Bambino";
} /* !nco_nmn_get() */
void
View it on GitLab: https://salsa.debian.org/debian-gis-team/nco/-/commit/bd5791241d9f91acad1bee1892e701280cef8019
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/nco/-/commit/bd5791241d9f91acad1bee1892e701280cef8019
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/20240323/d5d4024d/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list