[Git][debian-gis-team/nco][upstream] New upstream version 5.3.2
Bas Couwenberg (@sebastic)
gitlab at salsa.debian.org
Thu Feb 6 04:41:19 GMT 2025
Bas Couwenberg pushed to branch upstream at Debian GIS Project / nco
Commits:
52ceefe0 by Bas Couwenberg at 2025-02-06T05:32:42+01:00
New upstream version 5.3.2
- - - - -
19 changed files:
- .appveyor.yml
- bld/nco.spec
- bld/nco_dst.pl
- configure
- configure.ac
- data/ncclimo
- data/ncremap
- debian/changelog
- doc/ANNOUNCE
- doc/ChangeLog
- doc/VERSION
- doc/debian.txt
- doc/index.shtml
- doc/nco.texi
- src/nco/nco.h
- src/nco/nco_ctl.c
- src/nco/nco_grp_utl.c
- src/nco/nco_rgr.c
- src/nco/nco_scm.c
Changes:
=====================================
.appveyor.yml
=====================================
@@ -8,16 +8,10 @@ platform:
- x64
image:
- - Visual Studio 2015
+ - Visual Studio 2022
init:
- # We need to define these b/c we are not using conda-build.
- - "ECHO %MINICONDA%"
- - if "%APPVEYOR_BUILD_WORKER_IMAGE%" == "Visual Studio 2015" set VCVARPATH="C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat"
- - if "%APPVEYOR_BUILD_WORKER_IMAGE%" == "Visual Studio 2015" set VCARGUMENT=%PLATFORM%
- - if "%APPVEYOR_BUILD_WORKER_IMAGE%" == "Previous Visual Studio 2017" if "%PLATFORM%" == "x64" set VCVARPATH="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
- - echo "%VCVARPATH% %VCARGUMENT%"
- - "%VCVARPATH% %VCARGUMENT%"
+ - call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"
install:
# If there is a newer build queued for the same PR, cancel this one.
=====================================
bld/nco.spec
=====================================
@@ -2,17 +2,17 @@
# http://cvs.fedoraproject.org/viewvc/devel/nco/nco.spec?view=co
Name: nco
-Version: 5.3.1
+Version: 5.3.2
Release: 1%{?dist}
Summary: Programs that manipulate netCDF files
Group: Applications/Engineering
License: BSD
URL: http://nco.sf.net/
-# Obtain NCO version 5.3.1-1 tar.gz from Sourceforge using CVS:
+# Obtain NCO version 5.3.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.3.1-1 -d nco-%{version} nco
-# tar czf nco-%{version}.tar.gz --exclude='nco-5.3.1/debian*' --exclude='.cvsignore' --exclude=ncap_lex.c --exclude='ncap_yacc.[ch]' ./nco-%{version}
+# cvs -z3 -d:pserver:anonymous at nco.cvs.sf.net:/cvsroot/nco co -r nco-5.3.2-1 -d nco-%{version} nco
+# tar czf nco-%{version}.tar.gz --exclude='nco-5.3.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
+* Wed Feb 05 2025 Charlie Zender <zender at uci.edu> - 5.3.2-1
+- new upstream 5.3.2
+
* Sun Jan 12 2025 Charlie Zender <zender at uci.edu> - 5.3.1-1
- new upstream 5.3.1
=====================================
bld/nco_dst.pl
=====================================
@@ -5,20 +5,20 @@
# Usage:
# Export tagged, public versions
-# /usr/bin/scp ${DATA}/nco-5.3.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.3.1 # Build, do not release on SF
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --sf nco-5.3.1 # Build, release on SF
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --nst_all nco-5.3.1 # Install, do not build
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --nst_all nco-5.3.1 # Build and install
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_cnt nco-5.3.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_prs nco-5.3.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cgd_cnt nco-5.3.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cray_prs nco-5.3.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --bbl_cnt nco-5.3.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --blk_cnt nco-5.3.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --dat_cnt nco-5.3.1
-# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --ute_prs nco-5.3.1
+# /usr/bin/scp ${DATA}/nco-5.3.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.3.2 # Build, do not release on SF
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --sf nco-5.3.2 # Build, release on SF
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --nst_all nco-5.3.2 # Install, do not build
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln --nst_all nco-5.3.2 # Build and install
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_cnt nco-5.3.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --acd_prs nco-5.3.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cgd_cnt nco-5.3.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --cray_prs nco-5.3.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --bbl_cnt nco-5.3.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --blk_cnt nco-5.3.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --dat_cnt nco-5.3.2
+# ${HOME}/nco/bld/nco_dst.pl --dbg=2 --cln --ute_prs nco-5.3.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.3.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.3.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.3.1.
+# Generated by GNU Autoconf 2.72 for NCO netCDF Operators 5.3.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.3.1'
-PACKAGE_STRING='NCO netCDF Operators 5.3.1'
+PACKAGE_VERSION='5.3.2'
+PACKAGE_STRING='NCO netCDF Operators 5.3.2'
PACKAGE_BUGREPORT='nco-bugs at lists.sourceforge.net'
PACKAGE_URL=''
@@ -1426,7 +1426,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.3.1 to adapt to many kinds of systems.
+'configure' configures NCO netCDF Operators 5.3.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1498,7 +1498,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of NCO netCDF Operators 5.3.1:";;
+ short | recursive ) echo "Configuration of NCO netCDF Operators 5.3.2:";;
esac
cat <<\_ACEOF
@@ -1670,7 +1670,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-NCO netCDF Operators configure 5.3.1
+NCO netCDF Operators configure 5.3.2
generated by GNU Autoconf 2.72
Copyright (C) 2023 Free Software Foundation, Inc.
@@ -2449,7 +2449,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.3.1, which was
+It was created by NCO netCDF Operators $as_me 5.3.2, which was
generated by GNU Autoconf 2.72. Invocation command line was
$ $0$ac_configure_args_raw
@@ -4549,7 +4549,7 @@ fi
# Define the identity of the package.
PACKAGE='nco'
- VERSION='5.3.1'
+ VERSION='5.3.2'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -23047,7 +23047,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.3.1, which was
+This file was extended by NCO netCDF Operators $as_me 5.3.2, which was
generated by GNU Autoconf 2.72. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -23115,7 +23115,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.3.1
+NCO netCDF Operators config.status 5.3.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.3.1],[nco-bugs at lists.sourceforge.net],[nco])
+AC_INIT([NCO netCDF Operators],[5.3.2],[nco-bugs at lists.sourceforge.net],[nco])
# Print GNU copyright in configure script
AC_COPYRIGHT
=====================================
data/ncclimo
=====================================
@@ -2062,7 +2062,9 @@ if [ "${mpi_flg}" = 'Yes' ]; then
# cmd_mpi[${mpi_idx}]="mpiexec_mpt dplace ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -n 1" ; ;; # PBSPro
cmd_mpi[${mpi_idx}]="mpirun ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -n 1" ; ;; # PBSPro
* )
- cmd_mpi[${mpi_idx}]="mpirun -H ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -n 1" ; ;; # Other (PBS)
+ # 20250122: Shift default node manager from mpirun to srun
+ cmd_mpi[${mpi_idx}]="srun --nodelist ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} --nodes=1" ; ;; # SLURM
+# cmd_mpi[${mpi_idx}]="mpirun -H ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -n 1" ; ;; # Other (PBS)
# cmd_mpi[${mpi_idx}]="mpirun -H ${nd_nm[$((${mpi_idx_zro} % ${nd_nbr}))]} -npernode 1 -n 1" ; ;; # Other
esac # !HOSTNAME
case "${HOSTNAME}" in
=====================================
data/ncremap
=====================================
@@ -1380,7 +1380,9 @@ if [ -n "${mpi_nbr_usr}" ]; then
frontier* ) mpi_pfx="srun -n ${mpi_nbr}" ; ;;
login[0123456789][0123456789] ) mpi_pfx="srun -n ${mpi_nbr}" ; ;;
perlmutter* | nid[0123456789][0123456789][0123456789][0123456789][0123456789][0123456789] ) mpi_pfx="srun -n ${mpi_nbr}" ; ;;
- * ) mpi_pfx="mpirun -n ${mpi_nbr}" ; ;; # Other
+ # 20250122: Shift default node manager from mpirun to srun
+ # * ) mpi_pfx="mpirun -n ${mpi_nbr}" ; ;; # Default
+ * ) mpi_pfx="srun -n ${mpi_nbr}" ; ;; # Default
esac # !HOSTNAME
fi # !mpi_nbr
if [ -n "${mpi_pfx_usr}" ]; then
@@ -2438,7 +2440,7 @@ if [ ${dbg_lvl} -ge 2 ]; then
printf "dbg: xtr_xpn = ${xtr_xpn}\n"
printf "dbg: Will regrid ${fl_nbr} files:\n"
for ((fl_idx=0;fl_idx<${fl_nbr};fl_idx++)); do
- printf "${fl_in[${fl_idx}]}\n"
+ printf "\${fl_in[${fl_idx}]} = ${fl_in[${fl_idx}]}\n"
done # !fl_idx
fi # !dbg
if [ ${dbg_lvl} -ge 2 ]; then
@@ -3012,9 +3014,11 @@ for ((bch_idx=0;bch_idx<bch_nbr;bch_idx++)); do
else # !out_usr_flg
out_fl="${drc_out}/$(basename "${in_fl}")"
fi # !out_fl
- if [ "${in_fl}" = "${out_fl}" ]; then
- echo "ERROR: Input file = Output file = ${in_fl}"
- echo "HINT: To prevent inadvertent data loss, ${spt_nm} insists that Input file and Output filenames differ"
+ # Test whether input and output filenames point to the same file (i.e., same device and inode numbers)
+ if [ "${in_fl}" -ef "${out_fl}" ]; then
+ # if [ "${in_fl}" = "${out_fl}" ]; then
+ echo "ERROR: Input file = ${in_fl} and Output file = ${out_fl} point to the same file, i.e., point to the same device and inode numbers"
+ echo "HINT: To prevent inadvertent data loss/corruption, ${spt_nm} insists that the Input and Output files be distinct. Retry command after renaming the Output file to a distinct location."
exit 1
fi # !basename
fl_in[${fl_idx}]=${in_fl}
=====================================
debian/changelog
=====================================
@@ -1,3 +1,9 @@
+nco (5.3.2-1) unstable; urgency=low
+
+ * new upstream version Prime Rib: all: fix qnt w/ grp; ncremap: ECMWF/IFS CAMS lnsp lev_2, ps_nm_out mtd, hyb cff cf mtd, fix ECMWF/IFS ntp ERROR/HINT, inode dpl, srun default
+
+ -- Charlie Zender <zender at uci.edu> Wed, 05 Feb 2025 12:26:19 -0700
+
nco (5.3.1-1) unstable; urgency=low
* new upstream version Dark Sunset (Farewell Palisades and Altadena): ncks: autoconversion in regridder/interpolator; ncremap: PS fix tm dmn, ERA5 t MERRA2 H, PM --npo
=====================================
doc/ANNOUNCE
=====================================
@@ -1,18 +1,17 @@
$Header$ -*-text-*-
-netCDF Operators NCO version 5.3.1 howl at the Moon
+netCDF Operators NCO version 5.3.2 hit the streets
http://nco.sf.net (Homepage, Mailing lists, Help)
http://github.com/nco/nco (Source Code, Issues, Releases)
What's new?
-Version 5.3.1 adds features and fixes to ncremap and ncclimo.
-The new autoconversion feature allows these scripts to automagically
-convert netCDF4 string variables to netCDF3 character arrays.
-The improved treatment of fixed time dimensions allows ncclimo to work
-with raw MERRA2 files. Together these improvements make possible
-regridding and vertical interpolation of the new formatting of
-Copernicus Data Store (CDS) files used for, e.g., ERA5.
+Version 5.3.2 mainly adds features and fixes to ncremap and
+quantization. Support for vertical interpolation of ECMWF
+IFS, and CAMS-format hybrid sigma-pressure vertical coordinate
+datasets has been improved. And the output is more CF-compliant.
+All arithmetic operators are once again able to use NCO quantization
+algorithms on variables in non-root groups.
Skip this release if these changes do not interest you.
Work on 5.3.3 is underway and includes improved NC_STRING
@@ -23,102 +22,60 @@ Charlie
NEW FEATURES (full details always in ChangeLog):
-A. Autoconversion of NC_STRING variables, i.e., automatic conversion
-from type NC_STRING to NC_CHAR as dictated by choosing a netCDF3
-output from a netCDF4 input file, work for all attributes, but not for
-all variables. This is because attributes are at most one-dimensional
-and may be of any size whereas variables require gridded dimensions
-that usually do not fit the ragged sizes of text strings.
-Hence scalar NC_STRING attributes are correctly converted to and
-stored as NC_CHAR attributes in the netCDF3 output file, but
-not all NC_STRING variables are correctly converted.
-
-As of version 5.3.1, NCO has two distinct levels of support for
-autoconversion of NC_STRING variables. ncremap fully supports
-autoconversion of scalar NC_STRING variables in both horizontal
-regridder and vertical interpolation mode. This means that ncremap
-will produce netCDF3 output files from netCDF4 input files (if
-requested) and that any NC_STRING variables in the input files will be
-translated to NC_CHAR arrays in the netCDF3 output files. There is no
-loss of information since the entire contents of the string is
-preserved in the character array. Autoconversion stores the character
-array with a new dimension named sng_lng_X where X is the smallest
-power of ten between 10 and 10000 that is capable of containing the
-string contents (including the terminating NUL character).
-This type of variable autoconversion fails if the input string length
-exceeds 10000 (this is a safety measure, and could be expanded if
-people lobby me).
-
-All operators besides ncremap currently retain only the first
-character of the input NC_STRING array. This loses information.
-We are working to implement the same feature that ncremap enjoys.
-Both types of autoconversion fail if the input string variable is
-multidimensional, i.e., an array of type NC_STRING. A feature to solve
-that case is tractable, though we have not yet received any requests
-for it.
-
-Thanks to Waler Hannah (LLNL) for prompting this feature.
-http://nco.sf.net/nco.html#autoconversion
-http://nco.sf.net/nco.html#ncclimo
-
-B. ncremap's vertical interpolator now automatically extrapolates
-variables named "t" (as in ERA5 raw data) as if they were temperature.
-Futhermore the interpolator now automatically extrapolates variables
-named "H" (as in MERRA2 raw data) and VerticalLayerMidpoint (SCREAM)
-as if they were geopotential height. See the documentation for
-specifics about the temperature and geopotential height extrapolation
-algorithms.
+A. ncremap will vertically interpolate a broader array of ECMWF
+IFS and CAMS-format hybrid sigma-pressure vertical coordinate
+datasets. Recent NCO versions required the log of the surface
+pressure to be in the template vertical coordinate file, rather
+than in the main dataset. Now the (log of) surface pressure can
+be either in the source dataset or the vertical grid file.
+Previous versions requires the lnsp variable to contain a dimension
+named lev_2 (as in IFS data). Now the regridder also accomodates
+CAMS-format data that does not contain the lev_2 dimension.
+Thanks to Erik Koene (LLNL) for persistently reporting this :)
+
+ncremap --ps_nm=lnsp --vrt_fl=era5.nc cams_in.nc cams_out.nc
+
+http://nco.sf.net/nco.html#ifs
http://nco.sf.net/nco.html#vrt
-C. For many years, users at select supercomputer centers have been
-able to access the latest versions of NCO scripts directly from
-C. Zender's build directories. However, this feature was not
-documented until now. Zender's build directories usually contain the
-latest NCO snapshot, and so may be unstable and are not for everyday
-use. This feature is instead intended to allow users to test and
-provide feedback on new features before they are distributed in a
-public release.
-Invoking ncclimo and ncremap with the --npo (or long-option equivalent
---nco_path_override) flag as the first option (i.e., as $1) causes
-these scripts to utilize the binary NCO executables in Zender's build
-directories on the following machines at the national supercomputer
-centers in parentheses:
-acme1 (LLNL), andes (ORNL), chrysalis (ANL), compy (PNNL), derecho
-(NCAR), frontier (ORNL), and perlmutter (NERSC).
-
-If the latest features that you want are actually implemented in the
-NCO binaries or library, then it may suffice to invoke your own
-version of the scripts, as in the first examples below. However, if
-the latest features that you want are implemented in the scripts
-themselves, then you can either invoke Zender's scripts directly (as
-in the second set of examples), or copy those scripts into your own
-executable path:
- at verbatim
-# Access Zender's latest binaries from your default scripts
-ncremap --npo -m map.nc in.nc out.nc
-ncclimo --npo -P elm -c ${caseid} ...
-# Access Zender's latest binaries from Zender's latest scripts
-~zender/bin/ncremap --npo -m map.nc in.nc out.nc
-~zender/bin/ncclimo --npo -P elm -c ${caseid} ...
- at end verbatim
- at end example
-In both cases, the --npo flag must be the first option invoked.
-http://nco.sf.net/nco.html#npo
-http://nco.sf.net/nco.html#nco_path_override
+B. ncremap's vertical interpolator now attaches CF metadata
+(standard_name), units, and long_name attributes to output files
+stored on hybrid sigma-pressure vertical coordinate grids, e.g.,
+ double P0 ;
+ P0:long_name = "Reference pressure" ;
+ P0:standard_name = "reference_air_pressure_for_atmosphere_vertical_coordinate" ;
+ P0:units = "Pa" ;
+ double hybm(nhym) ;
+ hybm:long_name = "hybrid B coefficient at layer midpoints" ;
+ hybm:units = "1" ;
+ hybm:standard_name = "atmosphere_hybrid_sigma_pressure_coordinate" ;
+
+C. ncremap and ncclimo previously prevented refused to overwrite
+input files with the same name as output files. However, this safety
+feature failed to detect when input and output filenames were symbolic
+links to the same file. Now ncremap and ncclimo refuse to overwrite
+input files that are the same inode/device as output files.
+Thanks to Juan Tolento (UCI) for reporting this.
+
+D. ncremap and ncclimo previously defaulted to using PBS "mpi_run -n
+nd_nbr" to manage MPI-mode climatologies and regridding. Now
+ncremap and ncclimo previously default to using SLURM "srun -n
+nd_nbr". This make supporting MPI-mode on unknown (not in the internal
+database of ncremap/ncclimo) machines more likely to work on SLURM,
+which has become increasingly popular (at least at DOE).
+Thanks to Jason Boutte (LLNL) for suggesting this.
+http://nco.sf.net/nco.html#mpi
BUG FIXES:
-A. ncremap's vertical interpolator now understands that the time
-dimension in input surface pressure fields may be "fixed".
-Previously the interpolator assumed that the temporal dimension, if
-any, was an unlimited/record dimension. This could cause it to
-miscalculate the number of horizontal spatial dimensions, and then
-to fail. Now the interpolator considers any fixed dimension named
-"time", or most unlimited dimensions (except certain corner cases) to
-be temporal dimension. This allows it to interpolate raw MERRA2 or
-ERA5 data. Thanks to Naser Mahfouz (PNNL) for prompting this
-fix/feature.
-http://nco.sf.net/nco.html#vrt
+A. Previous versions of NCO would sometimes fail to store
+quantization metadata for variables in non-root groups. Now
+quantization metadata works on variables in non-root groups.
+
+ncks -O --qnt=btr --ppc dfl=6 -g g1 in_grp.nc out.nc
+
+Thanks to Matt Thompson (GSFC) for reporting this.
+http://nco.sf.net/nco.html#qnt
Full release statement at http://nco.sf.net/ANNOUNCE
@@ -127,7 +84,7 @@ KNOWN PROBLEMS DUE TO NCO:
This section of ANNOUNCE reports and reminds users of the
existence and severity of known, not yet fixed, problems.
These problems occur with NCO 5.2.7 built/tested under
-MacOS 15.2 with netCDF 4.9.4-development on HDF5 1.14.3
+MacOS 15.3 with netCDF 4.9.4-development on HDF5 1.14.3
and with Linux FC40 with netCDF 4.9.2 on HDF5 1.14.3.
A. NOT YET FIXED (NCO problem)
=====================================
doc/ChangeLog
=====================================
@@ -1,3 +1,56 @@
+2025-02-05 Charlie Zender <zender at uci.edu>
+
+ * NCO 5.3.2 release procedure:
+ cd ~/nco;git commit -a -m 'Version 5.3.2: Prime Rib';git push
+ git tag -a 5.3.2 -m 'all: fix qnt w/ grp; ncremap: ECMWF/IFS CAMS lnsp lev_2, ps_nm_out mtd, hyb cff cf mtd, fix ECMWF/IFS ntp ERROR/HINT, inode dpl, srun default';git push --tags
+
+2025-02-03 Charlie Zender <zender at uci.edu>
+
+ * NCO 5.3.2-alpha03 release procedure:
+ cd ~/nco;git commit -a -m 'Version 5.3.2-alpha03: Café Dirty Bird';git push
+ git tag -a 5.3.2-alpha03 -m 'ncremap: doc ECMWF/IFS, HINT lnsp, ERROR/HINT inode dpl';git push --tags
+
+ * ncremap: ERROR and HINT when Input and Output files point to same device+inode
+
+ * ncremap: HINT when lnsp present yet ps_nm=lnsp not invoked
+
+2025-02-01 Charlie Zender <zender at uci.edu>
+
+ * Update ECMWF/IFS documentation, fix INFO messages
+
+ * NCO 5.3.2-alpha02 release procedure:
+ cd ~/nco;git commit -a -m 'Version 5.3.2-alpha02: FireAid';git push
+ git tag -a 5.3.2-alpha02 -m 'all: doc log_lvl; ncremap: CAMS lnsp lev_2, ps_nm_out mtd, hyb cff cf mtd, fix ECMWF/IFS ntp';git push --tags
+
+ * ncks: Fix ECMWF/IFS interpolation when PS is in vertical grid template file
+ Solves regression reported by Erik Koene on SourceForge 20250117
+
+ * ncks: Add CF metadata hybrid sigma-pressure grid coordinates
+
+ * ncks: Rename ECMWF/IFS output surface pressure from lnsp to PS
+
+ * ncks: Overwrite metadata to ECMWF/IFS output surface pressure
+
+2025-01-31 Charlie Zender <zender at uci.edu>
+
+ * nco.texi: Add short section on --log_lvl
+
+ * all: No longer report debugging configuration with -r
+
+ * ncremap: Support recent CAMS changes by not expecting lev_2 dimension in ECMWF/IFS lnps
+
+ * NCO 5.3.2-alpha01 release procedure:
+ cd ~/nco;git commit -a -m 'Version 5.3.2-alpha01: Hotel Van Zandt';git push
+ git tag -a 5.3.2-alpha01 -m 'Functionally identical to 5.3.1; ncremap/ncclimo srun default; all: fix qnt w/ grp';git push --tags
+
+ * Pass grp_out_id not nc_id to nco_qnt_mtd() so quantization metadata works on variables in non-root groups
+
+2025-01-22 Charlie Zender <zender at uci.edu>
+
+ * ncclimo/ncremap: Shift default node manager from mpirun to srun
+
+ * nco.texi: Contrast NCO behavior with CF/NUG for type of _FillValue when packing (patch from lguez)
+
2025-01-12 Charlie Zender <zender at uci.edu>
* NCO 5.3.1 release procedure:
@@ -23998,6 +24051,11 @@ Tue Jun 17 14:15:53 1997 Charlie Zender <zender at heinlein.cgd.ucar.edu>
preprocess *.F files. This had stopped working, perhaps when I
switched CRAY default from f77 to f90.
+Fri Jun 6 17:11:29 1997 Charlie Zender <zender at z.ppp.ucar.edu>
+
+ * Announce nco-1.0 release on netCDF Group E-mail list:
+ https://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/1997/msg00052.html
+
Fri May 30 13:12:25 1997 Charlie Zender <zender at heinlein.cgd.ucar.edu>
* Improved mss_val_get to allow any NC_TYPE for missing_value
=====================================
doc/VERSION
=====================================
@@ -1 +1 @@
-5.3.1
+5.3.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.3.1
- First we create a clean source distribution of nco and place it in nco-5.3.1
+ For starters, we wish to create .debs of tagged releases, e.g., nco-5.3.2
+ First we create a clean source distribution of nco and place it in nco-5.3.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.3.1
-/bin/rm nco.tar.gz;tar cvzf nco-5.3.1.tar.gz ./nco-5.3.1/*
-cd ~/nco/nco-5.3.1
-dh_make -e zender at uci.edu -f ../nco-5.3.1.tar.gz
+cd ~/nco;tar xvzf nco.tar.gz;mv nco nco-5.3.2
+/bin/rm nco.tar.gz;tar cvzf nco-5.3.2.tar.gz ./nco-5.3.2/*
+cd ~/nco/nco-5.3.2
+dh_make -e zender at uci.edu -f ../nco-5.3.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.3.1.tar.gz
from previous build
cd ~/nco;/bin/rm *.gz
- cd ~/nco/nco-5.3.1
+ cd ~/nco/nco-5.3.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.3.1 with X.Y.Z+1
+# tags-query replace 5.3.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.3.1-1 # Update changelog (-b forces this version number)
+ cd ~/nco/debian;dch -b --force-distribution --distribution=unstable -v 5.3.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.3.1
+ ${HOME}/nco/bld/nco_dst.pl --dbg=2 --bld --cln nco-5.3.2
# Upload tarball to SF https://sourceforge.net/projects/nco/files
- cd;scp dust.ess.uci.edu:/var/www/html/nco/src/nco-5.3.1.tar.gz .
+ cd;scp dust.ess.uci.edu:/var/www/html/nco/src/nco-5.3.2.tar.gz .
7. Ubuntu PPA
https://help.launchpad.net/Packaging/PPA
-dput NCO nco_5.3.1-2~ppa1_source.changes
+dput NCO nco_5.3.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.3.1-1.dpkg-buildpackage.txt
-http://dust.ess.uci.edu/nco/src/nco_5.3.1-1.dsc
-http://dust.ess.uci.edu/nco/src/nco_5.3.1-1_i386.changes
-http://dust.ess.uci.edu/nco/src/nco_5.3.1-1_i386.deb
-http://dust.ess.uci.edu/nco/src/nco_5.3.1.orig.tar.gz
+http://dust.ess.uci.edu/nco/src/nco_5.3.2-1.dpkg-buildpackage.txt
+http://dust.ess.uci.edu/nco/src/nco_5.3.2-1.dsc
+http://dust.ess.uci.edu/nco/src/nco_5.3.2-1_i386.changes
+http://dust.ess.uci.edu/nco/src/nco_5.3.2-1_i386.deb
+http://dust.ess.uci.edu/nco/src/nco_5.3.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.3.1 ${DATA}/nco_5.3.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.3.1-1 -d nco-5.3.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.3.1 nco # Export most recent
-tar cvzf ./nco_5.3.1.orig.tar.gz --exclude='nco-5.3.1/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.3.1
-/bin/rm -rf ${DATA}/nco-5.3.1 # Remove cvs-exported directory
-tar xvzf ./nco_5.3.1.orig.tar.gz # Untar to get directory without excluded files
-mkdir -p ${DATA}/nco-5.3.1/debian/source;cd ~/nco/debian;/bin/cp changelog compat control convert copyright doc-base files info rules ${DATA}/nco-5.3.1/debian;cd ~/nco/debian/source;/bin/cp format ${DATA}/nco-5.3.1/debian/source # Replace debian directory with _CURRENT_ (main trunk) settings
+sudo /bin/rm -rf ${DATA}/nco-5.3.2 ${DATA}/nco_5.3.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.3.2-1 -d nco-5.3.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.3.2 nco # Export most recent
+tar cvzf ./nco_5.3.2.orig.tar.gz --exclude='nco-5.3.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.3.2
+/bin/rm -rf ${DATA}/nco-5.3.2 # Remove cvs-exported directory
+tar xvzf ./nco_5.3.2.orig.tar.gz # Untar to get directory without excluded files
+mkdir -p ${DATA}/nco-5.3.2/debian/source;cd ~/nco/debian;/bin/cp changelog compat control convert copyright doc-base files info rules ${DATA}/nco-5.3.2/debian;cd ~/nco/debian/source;/bin/cp format ${DATA}/nco-5.3.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.3.1;dpkg-buildpackage -rsudo -uc -us > ~/foo.nco 2>&1 # -uc -us: Do not sign changes or source files
-#cd ${DATA}/nco-5.3.1;dpkg-buildpackage -rsudo -sa > ~/foo.nco 2>&1 # -sa: Include _orig.tar.gz in .changes
-cd ${DATA}/nco-5.3.1;dpkg-buildpackage -rsudo > ~/foo.nco 2>&1
+#cd ${DATA}/nco-5.3.2;dpkg-buildpackage -rsudo -uc -us > ~/foo.nco 2>&1 # -uc -us: Do not sign changes or source files
+#cd ${DATA}/nco-5.3.2;dpkg-buildpackage -rsudo -sa > ~/foo.nco 2>&1 # -sa: Include _orig.tar.gz in .changes
+cd ${DATA}/nco-5.3.2;dpkg-buildpackage -rsudo > ~/foo.nco 2>&1
sudo dpkg --remove nco
-sudo dpkg --install ${DATA}/nco_5.3.1-1_*.deb
+sudo dpkg --install ${DATA}/nco_5.3.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.3.1-1_*.deb
-ls -l ${DATA}/nco_5.3.1*
+lintian ${DATA}/nco_5.3.2-1_*.deb
+ls -l ${DATA}/nco_5.3.2*
m ~/foo.nco
# Upload Ubuntu (rather than Debian) packages to websites
-scp ${DATA}/nco_5.3.1* dust.ess.uci.edu:/var/www/html/nco/src
-scp ${DATA}/nco_5.3.1* zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
+scp ${DATA}/nco_5.3.2* dust.ess.uci.edu:/var/www/html/nco/src
+scp ${DATA}/nco_5.3.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.3.1-1_*.changes
+# cd ${DATA};dupload -t mentors nco_5.3.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.3.1* # Cleanup prior build
+sudo /bin/rm /var/cache/pbuilder/result/nco_5.3.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.3.1-1.dsc > ~/foo.nco.pbuilder 2>&1
-cd /var/cache/pbuilder/result;debsign -k6F635D10 nco_5.3.1-1_*.changes
-lintian /var/cache/pbuilder/result/nco_5.3.1-1_*.deb
+cd ${DATA};DIST=sid sudo pbuilder build nco_5.3.2-1.dsc > ~/foo.nco.pbuilder 2>&1
+cd /var/cache/pbuilder/result;debsign -k6F635D10 nco_5.3.2-1_*.changes
+lintian /var/cache/pbuilder/result/nco_5.3.2-1_*.deb
sudo dpkg --remove nco
-sudo dpkg --install /var/cache/pbuilder/result/nco_5.3.1-1_*.deb
+sudo dpkg --install /var/cache/pbuilder/result/nco_5.3.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.3.1-1_*.changes
+cd /var/cache/pbuilder/result;dupload -t mentors nco_5.3.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.3.1 ${DATA}/nco-5.3.1* # Cleanup last build
+/bin/rm -rf ${DATA}/nco-5.3.2 ${DATA}/nco-5.3.2* # Cleanup last build
${sudo_sng} /bin/rm -r -f \
-${rpm_root}/BUILD/nco-5.3.1 \
-${rpm_root}/RPMS/i386/nco-5.3.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-5.3.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-5.3.1-?.i386.rpm \
-${rpm_root}/SOURCES/nco-5.3.1.tar.gz \
-${rpm_root}/SPECS/nco-5.3.1.spec \
-${rpm_root}/SRPMS/nco-5.3.1-?.src.rpm
-cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.3.1-1 -d nco-5.3.1 nco # Export based on tag
-${sudo_sng} ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/SPECS/nco-5.3.1.spec
-tar cvzf ./nco-5.3.1.tar.gz --exclude='nco-5.3.1/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.3.1
-${sudo_sng} /bin/cp ${DATA}/nco-5.3.1.tar.gz ${rpm_root}/SOURCES
+${rpm_root}/BUILD/nco-5.3.2 \
+${rpm_root}/RPMS/i386/nco-5.3.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-5.3.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-5.3.2-?.i386.rpm \
+${rpm_root}/SOURCES/nco-5.3.2.tar.gz \
+${rpm_root}/SPECS/nco-5.3.2.spec \
+${rpm_root}/SRPMS/nco-5.3.2-?.src.rpm
+cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.3.2-1 -d nco-5.3.2 nco # Export based on tag
+${sudo_sng} ln -s ${HOME}/nco/bld/nco.spec ${rpm_root}/SPECS/nco-5.3.2.spec
+tar cvzf ./nco-5.3.2.tar.gz --exclude='nco-5.3.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.3.2
+${sudo_sng} /bin/cp ${DATA}/nco-5.3.2.tar.gz ${rpm_root}/SOURCES
cd ${rpm_root}/SPECS
-${sudo_sng} rpmbuild -ba --sign nco-5.3.1.spec > ~/foo.nco 2>&1
+${sudo_sng} rpmbuild -ba --sign nco-5.3.2.spec > ~/foo.nco 2>&1
scp \
-${rpm_root}/RPMS/i386/nco-5.3.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-5.3.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-5.3.1-?.i386.rpm \
-${rpm_root}/SRPMS/nco-5.3.1-?.src.rpm \
+${rpm_root}/RPMS/i386/nco-5.3.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-5.3.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-5.3.2-?.i386.rpm \
+${rpm_root}/SRPMS/nco-5.3.2-?.src.rpm \
dust.ess.uci.edu:/var/www/html/nco/src
scp \
-${rpm_root}/RPMS/i386/nco-5.3.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-debuginfo-5.3.1-?.i386.rpm \
-${rpm_root}/RPMS/i386/nco-devel-5.3.1-?.i386.rpm \
-${rpm_root}/SRPMS/nco-5.3.1-?.src.rpm \
+${rpm_root}/RPMS/i386/nco-5.3.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-debuginfo-5.3.2-?.i386.rpm \
+${rpm_root}/RPMS/i386/nco-devel-5.3.2-?.i386.rpm \
+${rpm_root}/SRPMS/nco-5.3.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.3.1 ${DATA}/nco-5.3.1* # Cleanup last build
+/bin/rm -rf ${DATA}/nco-5.3.2 ${DATA}/nco-5.3.2* # Cleanup last build
/bin/rm -r -f \
-${rpm_root}/nco-5.3.1-?.src.rpm \
-${rpm_root}/nco-5.3.1.spec \
-${rpm_root}/nco-5.3.1.tar.gz \
-${rpm_root}/*/nco-5.3.1-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-5.3.1-?.*.rpm \
-${rpm_root}/*/nco-devel-5.3.1-?.*.rpm
-# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.3.1-1 -d nco-5.3.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.3.1 nco # Export most recent and build as 5.3.1-1
-tar cvzf ./nco-5.3.1.tar.gz --exclude='nco-5.3.1/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.3.1
-/bin/cp ${DATA}/nco-5.3.1.tar.gz ${rpm_root}
+${rpm_root}/nco-5.3.2-?.src.rpm \
+${rpm_root}/nco-5.3.2.spec \
+${rpm_root}/nco-5.3.2.tar.gz \
+${rpm_root}/*/nco-5.3.2-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-5.3.2-?.*.rpm \
+${rpm_root}/*/nco-devel-5.3.2-?.*.rpm
+# cd ${DATA};cvs -d zender at nco.cvs.sf.net:/cvsroot/nco export -kkv -r nco-5.3.2-1 -d nco-5.3.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.3.2 nco # Export most recent and build as 5.3.2-1
+tar cvzf ./nco-5.3.2.tar.gz --exclude='nco-5.3.2/debian*' --exclude='.cvsignore' --exclude='ncap_lex.c' --exclude='ncap_yacc.[ch]' ./nco-5.3.2
+/bin/cp ${DATA}/nco-5.3.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.3.1-?.*.rpm
+rpmlint ${rpm_root}/*/nco-5.3.2-?.*.rpm
sudo yum remove nco
-sudo yum install ${rpm_root}/*/nco-5.3.1-?.*.rpm
+sudo yum install ${rpm_root}/*/nco-5.3.2-?.*.rpm
scp \
-${rpm_root}/*/nco-5.3.1-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-5.3.1-?.*.rpm \
-${rpm_root}/*/nco-devel-5.3.1-?.*.rpm \
-${rpm_root}/nco-5.3.1-?.*.src.rpm \
+${rpm_root}/*/nco-5.3.2-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-5.3.2-?.*.rpm \
+${rpm_root}/*/nco-devel-5.3.2-?.*.rpm \
+${rpm_root}/nco-5.3.2-?.*.src.rpm \
dust.ess.uci.edu:/var/www/html/nco/src
scp \
-${rpm_root}/*/nco-5.3.1-?.*.rpm \
-${rpm_root}/*/nco-debuginfo-5.3.1-?.*.rpm \
-${rpm_root}/*/nco-devel-5.3.1-?.*.rpm \
-${rpm_root}/nco-5.3.1-?.*.src.rpm \
+${rpm_root}/*/nco-5.3.2-?.*.rpm \
+${rpm_root}/*/nco-debuginfo-5.3.2-?.*.rpm \
+${rpm_root}/*/nco-devel-5.3.2-?.*.rpm \
+${rpm_root}/nco-5.3.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.3.1 released <!--#flastmod file="src/nco-5.3.1.tar.gz"-->
+Current stable NCO version is 5.3.2 released <!--#flastmod file="src/nco-5.3.2.tar.gz"-->
</h2>
<table border=0 width=100%>
@@ -155,7 +155,8 @@ and
<h2>Recent Releases & Milestones</h2>
<ul>
-<li>2025 Feb ??: 5.3.2 <i>In Progress...</i>
+<li>2025 Mar ??: 5.3.3 <i>In Progress...</i>
+<li>2025 Feb ??: 5.3.2 ECMWF/IFS/CAMS support
<li>2025 Jan 12: 5.3.1 ncclimo/ncremap features
<li>2024 Dec 23: 5.3.0 S1D more features
<li>2024 Oct 18: 5.2.9 S1D features
@@ -662,17 +663,22 @@ 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.3.1 http://github.com/nco/nco.git nco-5.3.1</tt></a>.
+<tt>git clone -b 5.3.2 http://github.com/nco/nco.git nco-5.3.2</tt></a>.
<ul>
-<li><b>NCO 5.3.3</b>: (<i>Future</i>)
+<li><b>NCO 5.3.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> CF Convention for longitude vertices in map-files;
<tt>ncremap</tt> small-circle weights;</li>
-<li><b>NCO 5.3.2</b>: (<i>In Progress, features in-progress or complete include</i>)
+<li><b>NCO 5.3.3</b>: (<i>In Progress, features in-progress or complete include</i>)
<tt>ncremap</tt> Gracefully autoconvert N-D NC_STRING->(N+1)-D NC_CHAR variables</li>
-<li><b>NCO 5.3.1</b>: (<i>Current Stable Release</i>)
+<li><b>NCO 5.3.2</b>: (<i>Current Stable Release</i>)
+<tt>all</tt> Quantization fix for non-root group variables;
+<tt>ncclimo/ncremap</tt> <tt>srun</tt> default;
+<tt>ncclimo/ncremap</tt> prohibit overwriting input Inode;
+<tt>ncremap</tt> improved ECMWF/IFS/CAMS support;
+<li><b>NCO 5.3.1</b>:
<tt>ncclimo/ncremap</tt> <tt>--npo</tt>, build revamp;
<tt>ncremap</tt> Gracefully autoconvert 0-D NC_STRING->1-D NC_CHAR variables;
<tt>ncremap</tt> Fixed time dimension OK, <tt>t, H</tt> interpolation;</li>
@@ -859,7 +865,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.3.1</a> Executables Anaconda-compatible. Maintained by Filipe Fernandes.</li>
+<li><a href="https://github.com/conda-forge/nco-feedstock">nco-5.3.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>
@@ -868,7 +874,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.3.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.3.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.
@@ -876,8 +882,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.3.1-1_i386.deb</tt>’):</dt>
-<li><a href="https://launchpad.net/ubuntu/+source/nco/5.3.1-1">nco_5.3.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.3.2-1_i386.deb</tt>’):</dt>
+<li><a href="https://launchpad.net/ubuntu/+source/nco/5.3.2-1">nco_5.3.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.
@@ -919,12 +925,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 15.2 (Sequoia) systems (firn, sastrugi, spectral):
+# MacOS 15.3 (Sequoia) 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.3.1.macos.15.2.tar.gz nc*;scp ${DATA}/nco-5.3.1.macos.15.2.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src
+cd ~/bin;tar cvzf ${DATA}/nco-5.3.2.macos.15.3.tar.gz nc*;scp ${DATA}/nco-5.3.2.macos.15.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.3.1.macos.15.2.tar.gz">nco-5.3.1.macos.15.2.tar.gz</a> (<!--#fsize file="src/nco-5.3.1.macos.15.2.tar.gz"-->): Executables MacOS 15.2-compatible (last updated <!--#flastmod file="src/nco-5.3.1.macos.15.2.tar.gz"-->). Maintained by NCO Project.</li>
+<li><a href="src/nco-5.3.2.macos.15.3.tar.gz">nco-5.3.2.macos.15.3.tar.gz</a> (<!--#fsize file="src/nco-5.3.2.macos.15.3.tar.gz"-->): Executables MacOS 15.3-compatible (last updated <!--#flastmod file="src/nco-5.3.2.macos.15.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>
@@ -1127,12 +1133,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.3.1.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src -->
-<a href="https://github.com/nco/nco/archive/5.3.1.tar.gz">nco-5.3.1.tar.gz</a>
-(<!--#fsize file="src/nco-5.3.1.tar.gz"--> compressed tar-file)<br>
-<!--#exec cmd="openssl dgst -md5 src/nco-5.3.1.tar.gz"--><br>
-<!--#exec cmd="openssl dgst -sha1 src/nco-5.3.1.tar.gz"--><br>
-<!--#exec cmd="openssl dgst -sha256 src/nco-5.3.1.tar.gz"-->
+<!-- scp ${DATA}/nco-5.3.2.tar.gz zender,nco at web.sf.net:/home/project-web/nco/htdocs/src -->
+<a href="https://github.com/nco/nco/archive/5.3.2.tar.gz">nco-5.3.2.tar.gz</a>
+(<!--#fsize file="src/nco-5.3.2.tar.gz"--> compressed tar-file)<br>
+<!--#exec cmd="openssl dgst -md5 src/nco-5.3.2.tar.gz"--><br>
+<!--#exec cmd="openssl dgst -sha1 src/nco-5.3.2.tar.gz"--><br>
+<!--#exec cmd="openssl dgst -sha256 src/nco-5.3.2.tar.gz"-->
</li>
</ul>
@@ -1153,8 +1159,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.3.1</tt>:
-<p><tt>git clone https://github.com/nco/nco.git;cd nco;git checkout 5.3.1</tt></p>
+then checks out NCO version <tt>5.3.2</tt>:
+<p><tt>git clone https://github.com/nco/nco.git;cd nco;git checkout 5.3.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
@@ -1164,12 +1170,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.3.1</tt>) and the development version is that the
+(e.g., <tt>5.3.2</tt>) and the development version is that the
tagged release operators will print a valid version number (e.g.,
-<tt>5.3.1</tt>) when asked to do so with the <tt>-r</tt> flag
+<tt>5.3.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.3.1-alpha06</tt>).
+information (e.g., <tt>5.3.2-alpha06</tt>).
<!--
<a name="doxy"></a>
@@ -1352,9 +1358,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.3.1.tar.gz</dt>
-<dt>tar xvzf 5.3.1.tar.gz</dt>
-<dt>cd nco-5.3.1</dt>
+<dt>wget https://github.com/nco/nco/archive/5.3.2.tar.gz</dt>
+<dt>tar xvzf 5.3.2.tar.gz</dt>
+<dt>cd nco-5.3.2</dt>
<dt>./configure --prefix=/usr/local</dt>
<dt>make</dt>
<dt>sudo make install</dt>
=====================================
doc/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.3.1
- at set doc-edition 5.3.1
+ at set nco-edition 5.3.2
+ at set doc-edition 5.3.2
@set copyright-years 1995--2025
@set update-year 2025
- at set update-date 12 January 2025
- at set update-month January 2025
+ at set update-date 5 February 2025
+ at set update-month February 2025
@settitle @acronym{NCO} @value{nco-edition} User Guide
@@ -1614,13 +1614,16 @@ We usually fix those within one or two days.
Core dumps and sementation violations receive lower priority.
They are always fixed, eventually.
-How do you simplify a problem that reveal a bug?
+How do you simplify a problem to reveal a bug?
Cut out extraneous variables, dimensions, and metadata from the
offending files and re-run the command until it no longer breaks.
Then back up one step and report the problem.
Usually the file(s) will be very small, i.e., one variable with one or
two small dimensions ought to suffice.
+
@html
+<a name="logging"></a> <!-- http://nco.sf.net/nco.html#logging -->
+<a name="log"></a> <!-- http://nco.sf.net/nco.html#log -->
<a name="dbg"></a> <!-- http://nco.sf.net/nco.html#dbg -->
<a name="-D"></a> <!-- http://nco.sf.net/nco.html#-D -->
@end html
@@ -1631,6 +1634,7 @@ two small dimensions ought to suffice.
@cindex @code{-D @var{debug-level}}
@cindex @code{--debug-level @var{debug-level}}
@cindex @code{--dbg_lvl @var{debug-level}}
+ at cindex @code{--log_lvl @var{log-level}}
@cindex @var{debug-level}
@cindex @var{dbg_lvl}
Run the operator with @samp{-r} and then run the command with
@@ -1639,7 +1643,15 @@ It is very important that your report contain the exact error messages
and compile-time environment.
Include a copy of your sample input file, or place one on a
publicly accessible location, of the file(s).
-If you are sure it is a bug, post the full report to the
+
+You can also access the netCDF library @dfn{logging} capability.
+This might help you determine whether the problem is with
+ at acronym{NCO} or with netCDF.
+Invoke the operator with @samp{--log_lvl=@var{log-level}},
+where @math{0 < @var{log-level} < 5} is an integer that increases
+the verbosity of the library reporting.
+
+If you are sure you have found an @acronym{NCO} bug, post your report to the
@uref{http://sf.net/p/nco/bugs, NCO Project buglist}.
Otherwise post all the information to
@uref{http://sf.net/p/nco/discussion/9830, NCO Help forum}.
@@ -11680,9 +11692,13 @@ When @code{scale_factor} and @code{add_offset} are used for packing, the
associated variable (containing the packed data) is typically of type
@code{byte} or @code{short}, whereas the unpacked values are intended to
be of type @code{int}, @code{float}, or @code{double}.
-An attribute's @code{scale_factor} and @code{add_offset} and
- at code{_FillValue}, if any, should all be of the type intended for the
-unpacked data, i.e., @code{int}, @code{float} or @code{double}.
+An attribute's @code{scale_factor} and @code{add_offset} if any, should
+be of the type intended for the unpacked data, i.e., @code{int},
+ at code{float} or @code{double}. NCO also expects @code{_FillValue} to be
+of the type intended for the unpacked data at footnote{The NetCDF guide and
+the CF conventions say that @code{_FillValue} should have the type of
+the packed data. NCO convention for @code{_FillValue} pre-dates the one
+of Unidata and CF. A patch to fix this would be welcome.}.
@unnumberedsubsec Non-Standard Packing and Unpacking Algorithms
@html
@@ -29473,6 +29489,11 @@ vertical grids (as opposed to pure pressure grids).
@html
<a name="vrt_hyb_ifs"></a> <!-- http://nco.sf.net/nco.html#vrt_hyb_ifs -->
+<a name="vrt_hyb_ecmwf"></a> <!-- http://nco.sf.net/nco.html#vrt_hyb_ecmwf -->
+<a name="vrt_hyb_cams"></a> <!-- http://nco.sf.net/nco.html#vrt_hyb_cams -->
+<a name="cams"></a> <!-- http://nco.sf.net/nco.html#cams -->
+<a name="ifs"></a> <!-- http://nco.sf.net/nco.html#ifs -->
+<a name="ecmwf"></a> <!-- http://nco.sf.net/nco.html#ecmwf -->
@end html
As of July 2019 and @acronym{NCO} @w{version 4.8.1}, @acronym{NCO}
supports regridding @acronym{ECMWF} datasets in @acronym{IFS} hybrid
@@ -29509,7 +29530,7 @@ To invoke @command{ncremap} on a hybrid coordinate dataset in
@acronym{IFS} format, one must specify that the surface pressure
variable is named @code{lnsp}.
No modifications to the @acronym{IFS} dataset are necessary.
-The vertical grid file should be in @acronym{CESM}/@acronym{E3SM} format.
+The desired output vertical grid-file should be in @acronym{CESM}/@acronym{E3SM} format.
@example
@verbatim
zender at spectral:~$ ncks -m -C -v lnsp,hyai,hyam,hybi,hybm,lev,lev_2 ifs.nc
@@ -29583,15 +29604,27 @@ invocation.
@command{ncremap} automagically handles all of the other details.
Currently @command{ncremap} can only interpolate data from (not to) an
@acronym{IFS}-format hybrid vertical grid data file.
-To interpolate to an @acronym{IFS}-format hybrid vertical grid, one
-must place the destination vertical grid into a
- at acronym{CESM/E3SM}-format hybrid vertical grid file (see above)
-that includes a @code{PS} surface pressure field (not @code{lnsp}
-log-surface pressure) for the destination grid.
+To interpolate to an @acronym{IFS}-format hybrid sigma-pressure
+vertical grid, must first completely convert that grid to
+ at acronym{CESM/E3SM} hybrid vertical grid file format (see above).
+Once again, the destination grid must be in @acronym{CESM/E3SM}
+hybrid sigma-pressure grid format.
+
+When interpolating ECMWF/IFS data the only surface pressure variable
+in the input data file should be @code{lnsp}.
+Do not include a variable named @code{PS} in the input data file.
+(It will probably be ignored, and so will confuse everyone).
+The desired output surface pressure can be placed as @code{PS} in the
+destination vertical grid file.
+If @code{PS} is not in the destination vertical grid file then the
+regridder will use @code{lnsp} as the desired output surface pressure.
+In that case it will automatically convert @code{lnsp} into @code{PS}
+and place that variable in the output file with appropriate metadata.
The @code{lev} and @code{ilev} coordinates of a hybrid grid are
defined by the hybrid coefficients and reference pressure, and are
-by convention stored in millibars (not Pascals) as follows:
+by convention stored in millibars or hecto-Pascals (not Pascals) as
+follows:
@example
@verbatim
ilev[ilev]=P0*(hyai+hybi)/100.0;
@@ -31274,8 +31307,9 @@ Large work-load testing
@cindex Aleksandar Jelenak
@cindex Markus Liebig
@cindex Keith Lindsay
- at cindex Daniel Macks,
- at cindex Seth McGinnis,
+ at cindex Erik Koene
+ at cindex Daniel Macks
+ at cindex Seth McGinnis
@cindex Stu Muller
@cindex Daniel Neumann
@cindex Mike Page
@@ -31295,7 +31329,7 @@ Large work-load testing
@cindex Min Xu
@cindex Remik Ziemlinski
@cindex Jill Zhang
- at item Xylar Asay-Davis, Sterling Baldwin, Tony Bartoletti, Dave Blodgett, Peter Caldwell, Philip Cameron-Smith, Peter Campbell, Martin Dix, Mark Flanner, Ryan Forsyth, Chris Golaz, Barron Henderson, Ben Hillman, Aleksandar Jelenak, Markus Liebig, Keith Lindsay, Daniel Macks, Seth McGinnis, Daniel Neumann, Mike Page, Martin Schmidt, Michael Schulz, Lori Sentman, Rich Signell, Bob Simons, Gary Strand, Mark Taylor, Matthew Thompson, Qi Tang, Adrian Tompkins, Paul Ullrich, George White, Andrew Wittenberg, Min Xu, Remik Ziemlinski, Jill Zhang
+ at item Xylar Asay-Davis, Sterling Baldwin, Tony Bartoletti, Dave Blodgett, Peter Caldwell, Philip Cameron-Smith, Peter Campbell, Martin Dix, Mark Flanner, Ryan Forsyth, Chris Golaz, Barron Henderson, Ben Hillman, Aleksandar Jelenak, Erik Koene, Markus Liebig, Keith Lindsay, Daniel Macks, Seth McGinnis, Daniel Neumann, Mike Page, Martin Schmidt, Michael Schulz, Lori Sentman, Rich Signell, Bob Simons, Gary Strand, Mark Taylor, Matthew Thompson, Qi Tang, Adrian Tompkins, Paul Ullrich, George White, Andrew Wittenberg, Min Xu, Remik Ziemlinski, Jill Zhang
Excellent bug reports and feature requests.
@cindex Xylar Asay-Davis
@cindex Filipe Fernandes
=====================================
src/nco/nco.h
=====================================
@@ -390,7 +390,7 @@ extern "C" {
# define NCO_LIB_VERSION ( NCO_VERSION_MAJOR * 100 + NCO_VERSION_MINOR * 10 + NCO_VERSION_PATCH )
#endif /* !NCO_LIB_VERSION */
#ifndef NCO_VERSION
-# define NCO_VERSION "5.3.1"
+# define NCO_VERSION "5.3.2"
#endif /* !NCO_VERSION */
/* Compatibility tokens new to netCDF4 netcdf.h: */
=====================================
src/nco/nco_ctl.c
=====================================
@@ -766,7 +766,7 @@ nco_cnf_prn(void) /* [fnc] Print NCO configuration and help text */
#define TKN2YESNO(x) ((x+0) ? ("No"):("Yes"))
/* NB: Keep configuration option tokens consistent among configure.ac, bld/Makefile, and nco_ctl.c
Alphabetize list by first word in English text description of token */
- (void)fprintf(stdout,"Configuration Option:\tActive?\tMeaning or Reference:\nCheck _FillValue\t%s\thttp://nco.sf.net/nco.html#mss_val\nCommunity Codec Repo\t%s\thttp://github.com/ccr/ccr\nDAP support\t\t%s\thttp://nco.sf.net/nco.html#dap\nDebugging: Custom\t%s\tPedantic, bounds checking (slowest execution)\nDebugging: Symbols\t%s\tProduce symbols for debuggers (e.g., dbx, gdb)\nGNU Scientific Library\t%s\thttp://nco.sf.net/nco.html#gsl\nHDF4 support\t\t%s\thttp://nco.sf.net/nco.html#hdf4\nInternationalization\t%s\thttp://nco.sf.net/nco.html#i18n (pre-alpha)\nLogging\t\t\t%s\thttp://nco.sf.net/nco.html#dbg\nnetCDF3 64-bit offset\t%s\thttp://nco.sf.net/nco.html#lfs\nnetCDF3 64-bit data\t%s\thttp://nco.sf.net/nco.html#cdf5\nnetCDF4/HDF5 support\t%s\thttp://nco.sf.net/nco.html#nco4\nOpenMP SMP threading\t%s\thttp://nco.sf.net/nco.html#omp\nRegular Expressions\t%s\thttp://nco.sf.net/nco.html#rx\nUDUnits2 conversions\t%s\thttp://nco.sf.net/nco.html#udunits\n%s",
+ (void)fprintf(stdout,"Configuration Option:\tActive?\tMeaning or Reference:\nCheck _FillValue\t%s\thttp://nco.sf.net/nco.html#mss_val\nCommunity Codec Repo\t%s\thttp://github.com/ccr/ccr\nDAP support\t\t%s\thttp://nco.sf.net/nco.html#dap\nGNU Scientific Library\t%s\thttp://nco.sf.net/nco.html#gsl\nHDF4 support\t\t%s\thttp://nco.sf.net/nco.html#hdf4\nInternationalization\t%s\thttp://nco.sf.net/nco.html#i18n (pre-alpha)\nLogging\t\t\t%s\thttp://nco.sf.net/nco.html#log\nnetCDF3 64-bit offset\t%s\thttp://nco.sf.net/nco.html#lfs\nnetCDF3 64-bit data\t%s\thttp://nco.sf.net/nco.html#cdf5\nnetCDF4/HDF5 support\t%s\thttp://nco.sf.net/nco.html#nco4\nOpenMP SMP threading\t%s\thttp://nco.sf.net/nco.html#omp\nRegular Expressions\t%s\thttp://nco.sf.net/nco.html#rx\nUDUnits2 conversions\t%s\thttp://nco.sf.net/nco.html#udunits\n%s",
(!strcmp(NC_FillValue,nco_mss_val_sng_get())) ? "Yes" : "No",
#if defined(ENABLE_CCR) && (ENABLE_CCR)
"Yes",
@@ -778,16 +778,6 @@ nco_cnf_prn(void) /* [fnc] Print NCO configuration and help text */
#else /* !ENABLE_DAP */
"No",
#endif /* !ENABLE_DAP */
-#if defined(ENABLE_DEBUG_CUSTOM) && (ENABLE_DEBUG_CUSTOM)
- "Yes",
-#else /* !ENABLE_DEBUG_CUSTOM */
- "No",
-#endif /* !ENABLE_DEBUG_CUSTOM */
-#if defined(ENABLE_DEBUG_SYMBOLS) && (ENABLE_DEBUG_SYMBOLS)
- "Yes",
-#else /* !ENABLE_DEBUG_SYMBOLS */
- "No",
-#endif /* !ENABLE_DEBUG_SYMBOLS */
#if defined(ENABLE_GSL) && (ENABLE_GSL)
"Yes",
#else /* !ENABLE_GSL */
=====================================
src/nco/nco_grp_utl.c
=====================================
@@ -2166,7 +2166,7 @@ nco_xtr_dfn /* [fnc] Define extracted groups, variables
https://github.com/cf-convention/cf-conventions/issues/403
20240130 fxm nco_qnt_mtd() does not yet write metadata for DSD algorithm (rounding) */
if(var_trv.ppc != NC_MAX_INT && var_trv.flg_nsd){
- (void)nco_qnt_mtd(nc_out_id,var_out_id,(nco_flt_typ_enm)nco_baa_cnv_get(),(nco_flt_typ_enm)nco_flt_nil,var_trv.ppc);
+ (void)nco_qnt_mtd(grp_out_id,var_out_id,(nco_flt_typ_enm)nco_baa_cnv_get(),(nco_flt_typ_enm)nco_flt_nil,var_trv.ppc);
} /* !var_trv.ppc */
/* Memory management after current extracted variable */
@@ -2894,7 +2894,7 @@ nco_xtr_wrt /* [fnc] Write extracted data to output fi
/* Print extraction list in developer mode */
if(nco_dbg_lvl_get() == nco_dbg_old) (void)trv_tbl_prn_xtr(trv_tbl,fnc_nm);
-} /* end nco_xtr_wrt() */
+} /* !nco_xtr_wrt() */
void
nco_prn_dmn_grp /* [fnc] Print dimensions for a group */
=====================================
src/nco/nco_rgr.c
=====================================
@@ -1033,6 +1033,8 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
nco_ntp_typ_enm ntp_mth=rgr->ntp_mth; /* [enm] Interpolation method */
nco_xtr_typ_enm xtr_mth=rgr->xtr_mth; /* [enm] Extrapolation method */
+ const char *ps_nm_ecmwf=(char *)strdup("lnsp"); /* [sng] Name of log-pressure variable in ECMWF/IFS/CAMS-format hybrid sigma-pressure grid datasets */
+
char *dpt_nm_in; /* [sng] Depth field name in input file */
char *dpt_nm_out; /* [sng] Depth field name in output file */
char *dpt_nm_tpl; /* [sng] Depth field name in template file */
@@ -1728,7 +1730,24 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
rcd=nco_inq_varid(vrt_in_id,"hybm",&hybm_id);
/* Assume ECMWF files use "lnsp" for (log) surface pressure, otherwise CAM/EAM style */
- if(!strcmp(ps_nm_in,"lnsp")) flg_grd_hyb_ecmwf=True; else flg_grd_hyb_cameam=True;
+ if(!strcmp(ps_nm_in,ps_nm_ecmwf)){
+ flg_grd_hyb_ecmwf=True;
+ }else{
+ flg_grd_hyb_cameam=True;
+ /* Prompt user to request ECMWF if "lnsp" is present and was not requested */
+ rcd=nco_inq_varid_flg(fl_xtr_id,ps_nm_ecmwf,(int *)NULL);
+ if(rcd == NC_NOERR){
+ (void)fprintf(stdout,"%s: HINT %s input dataset contains \"lnsp\" variable and thus may be stored on hybrid sigma-pressure grid in ECMWF/IFS/CAMS-format. However, the user must invoke the regridder with either \"ncremap --ps_nm=lnsp ...\" or \"ncks --rgr ps_nm_in=lnsp ...\" in order to vertically interpolate data stored in ECMWF/IFS/CAMS-format. Otherwise, expect to receive an INFO message stating that no interpolable variables were found. See http://nco.sf.net/nco.html#cams for more information.\n",nco_prg_nm_get(),fnc_nm);
+ } /* !rcd */
+ } /* !ps_nm_in */
+ if(nco_dbg_lvl_get() >= nco_dbg_std) (void)fprintf(stdout,"%s: INFO %s input dataset %s \"lnsp\" variable and is assumed to use %s-format (not %s-format) hybrid sigma-pressure vertical grid\n",nco_prg_nm_get(),fnc_nm,flg_grd_hyb_ecmwf ? "contains" : "omits",flg_grd_hyb_ecmwf ? "ECMWF/IFS" : "CAM/EAM",flg_grd_hyb_ecmwf ? "CAM/EAM" : "ECMWF/IFS");
+ if(flg_grd_hyb_ecmwf && ps_id_tpl == NC_MIN_INT){
+ /* If output surface pressure comes from input lnsp variable (not PS in vertical grid template file)... */
+ if(!strcmp(ps_nm_out,ps_nm_ecmwf)){
+ ps_nm_out=(char *)strdup("PS");
+ (void)fprintf(stdout,"%s: INFO %s renamed output surface pressure variable to %s since copying input name %s would confuse users of output data. To specify the output surface pressure name yourself, invoke the regridder with, e.g., --rgr ps_nm_out=my_name\n",nco_prg_nm_get(),fnc_nm,ps_nm_out,ps_nm_in);
+ } /* !ps_nm_out */
+ } /* !flg_grd_hyb_ecmwf */
/* 20190602: ECMWF hybrid sigma-pressure vertical grid parameters and dimensions differ from CAM/EAM:
ECMWF defines vertical dimensions "nhym" and "nhyi" specifically for hy[ab][im] and uses "lev" and "lev_2" for all other variables, whereas CAM/EAM uses same dimensions "lev" and "ilev" for all vertical variables including hybrid coefficients
ECMWF provides "hya?" as a constant in Pa and "hyb?" as a dimensionless coefficient of PS, whereas CAM/EAM provides "hya?" and "hyb?" both as dimensionless coefficients of P0 and PS
@@ -1746,8 +1765,7 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
} /* !flg_grd_hyb_cameam */
/* 20190603: Require ECMWF IFS input to have a "lev" coordinate so we can use "lev" dimension not "nhyb" */
- if(flg_grd_hyb_ecmwf)
- rcd=nco_inq_varid(vrt_in_id,"lev",&lev_id);
+ if(flg_grd_hyb_ecmwf) rcd=nco_inq_varid(vrt_in_id,"lev",&lev_id);
} /* !flg_grd_in_hyb */
if(flg_grd_in_prs){
@@ -2316,6 +2334,7 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
rcd=nco_inq_vardimid(fl_xtr_id,ps_id,dmn_ids_in);
for(dmn_idx=0;dmn_idx<dmn_nbr_in;dmn_idx++){
+ dmn_srt[dmn_idx]=0L;
rcd=nco_inq_dimlen(fl_xtr_id,dmn_ids_in[dmn_idx],dmn_cnt_in+dmn_idx);
/* 20190330: Allow possibility that PS has time dimension > 1
We want horizontal not temporal dimensions to contribute to grd_sz
@@ -2325,10 +2344,15 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
for(rec_idx=0;rec_idx<dmn_nbr_rec;rec_idx++)
if(dmn_ids_in[dmn_idx] == dmn_ids_rec[rec_idx])
break;
+ rcd=nco_inq_dimname(fl_xtr_id,dmn_ids_in[dmn_idx],dmn_nm);
+ /* 20250131: "lev_2" is both a degenerate and a non-horizontal dimension for ECMWF/IFS lnsp variables
+ Skip it here so that "lev_2" is not counted towards dmn_hrz_nbr_in */
+ if(flg_grd_hyb_ecmwf)
+ if(!strcmp(dmn_nm,"lev_2"))
+ continue; // Jump to next iteration
/* 20250101: Above loop fails to identify temporal dimensions that are fixed not record dimensions
NASA MERRA2 pressure-level timeseries contain PS with fixed time dimension
Treat dimensions named "[Tt]ime" as temporal */
- rcd=nco_inq_dimname(fl_xtr_id,dmn_ids_in[dmn_idx],dmn_nm);
if(strcasestr(dmn_nm,"time")) flg_dmn_is_fx_tm=True; else flg_dmn_is_fx_tm=False;
if(!flg_dmn_is_fx_tm && (rec_idx == dmn_nbr_rec || dmn_nbr_in == 1)){
/* This PS dimension is not fixed "time" dimension, and is not record dimension or is sole PS dimension */
@@ -2342,7 +2366,6 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
tm_nbr_in=dmn_cnt_in[dmn_idx_tm_in];
if(tm_nbr_in > 1L) flg_vrt_tm=True;
} /* !flg_dmn_is_fx_tm !rec_idx !dmn_nbr_out !dmn_cnt_out */
- dmn_srt[dmn_idx]=0L;
} /* !dmn_idx */
/* Given all input PS information, define output PS information */
@@ -2669,11 +2692,12 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
rcd=nco_inq_dimlen(fl_xtr_id,dmn_ids_in[dmn_idx],dmn_cnt_out+dmn_idx);
} /* !ps_id_tpl */
if(flg_grd_hyb_cameam) rcd=nco_def_dim(out_id,dmn_nm,dmn_cnt_out[dmn_idx],dmn_ids_out+dmn_idx);
- /* 20190602: ECMWF IFS PS variable has degenerate vertical dimension (lev_2). Avoid re-definition */
+ /* 20190602: ECMWF IFS PS variable may have degenerate vertical dimension (lev_2). Do not define it in output. And avoid re-definition of vertical dimensions. */
if(flg_grd_hyb_ecmwf)
if(strcmp(dmn_nm,ilev_nm_out))
if(strcmp(dmn_nm,lev_nm_out))
- rcd=nco_def_dim(out_id,dmn_nm,dmn_cnt_out[dmn_idx],dmn_ids_out+dmn_idx);
+ if(strcmp(dmn_nm,"lev_2"))
+ rcd=nco_def_dim(out_id,dmn_nm,dmn_cnt_out[dmn_idx],dmn_ids_out+dmn_idx);
} /* !dmn_idx */
} /* !flg_grd_out_hyb */
@@ -2896,14 +2920,22 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
if(flg_grd_hyb_cameam) rcd+=nco_def_var(out_id,ps_nm_out,crd_typ_out,dmn_nbr_ps,dmn_ids_out,&ps_id);
if(flg_grd_hyb_ecmwf){
- /* Remove degenerate ECMWF vertical dimension so that output PS has dmn_nbr_ps-1 not dmn_nbr_ps dimensions */
- int dmn_nbr_out_ecmwf=0;
- for(dmn_idx=0;dmn_idx<dmn_nbr_ps;dmn_idx++){
- rcd=nco_inq_dimname(fl_xtr_id,dmn_ids_in[dmn_idx],dmn_nm);
- if(strcmp(dmn_nm,ilev_nm_out) && strcmp(dmn_nm,lev_nm_out) && strcmp(dmn_nm,"lev_2"))
- rcd=nco_inq_dimid(out_id,dmn_nm,dmn_ids_out+dmn_nbr_out_ecmwf++);
- } /* !dmn_idx */
- rcd+=nco_def_var(out_id,ps_nm_out,crd_typ_out,dmn_nbr_out_ecmwf,dmn_ids_out,&ps_id);
+ if(ps_id_tpl == NC_MIN_INT){
+ /* When output PS template ps_nm_tpl="PS" is NOT in tpl_id (vertical grid template file) then and ps_id_tpl == NC_MIN_INT and we must template the output PS based on the PS in the input data file
+ The input data file may have strange ECMWF/IFS formatting, e.g., degenerate lev_2 dimension
+ Remove any degenerate ECMWF lev_2 vertical dimension so that output PS has dmn_nbr_ps-1 not dmn_nbr_ps dimensions */
+ int dmn_nbr_out_ecmwf=0;
+ for(dmn_idx=0;dmn_idx<dmn_nbr_ps;dmn_idx++){
+ /* 20250131: dmn_ids_in is NULL here! Should contain dmn ID of ncells? */
+ rcd=nco_inq_dimname(fl_xtr_id,dmn_ids_in[dmn_idx],dmn_nm);
+ if(strcmp(dmn_nm,ilev_nm_out) && strcmp(dmn_nm,lev_nm_out) && strcmp(dmn_nm,"lev_2"))
+ rcd=nco_inq_dimid(out_id,dmn_nm,dmn_ids_out+dmn_nbr_out_ecmwf++);
+ } /* !dmn_idx */
+ rcd+=nco_def_var(out_id,ps_nm_out,crd_typ_out,dmn_nbr_out_ecmwf,dmn_ids_out,&ps_id);
+ }else{ /* !ps_id_tpl */
+ /* When output PS template ps_nm_tpl="PS" is in tpl_id (vertical grid template file) then the template for the output PS is the same as for CAM/EAM templating */
+ rcd+=nco_def_var(out_id,ps_nm_out,crd_typ_out,dmn_nbr_ps,dmn_ids_out,&ps_id);
+ } /* !ps_id_tpl */
} /* !flg_grd_hyb_ecmwf */
if(nco_cmp_glb_get()) rcd+=nco_flt_def_out(out_id,ps_id,NULL,nco_flt_flg_prc_fll);
var_crt_nbr++;
@@ -2911,11 +2943,28 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
(void)nco_att_cpy(tpl_id,out_id,hyam_id_tpl,hyam_id,PCK_ATT_CPY);
(void)nco_att_cpy(tpl_id,out_id,hybi_id_tpl,hybi_id,PCK_ATT_CPY);
(void)nco_att_cpy(tpl_id,out_id,hybm_id_tpl,hybm_id,PCK_ATT_CPY);
-
if(p0_id_tpl != NC_MIN_INT) (void)nco_att_cpy(tpl_id,out_id,p0_id_tpl,p0_id,PCK_ATT_CPY); /* p0 not expected to be in ECMWF grids */
+ rcd=nco_char_att_put(out_id,"P0","long_name","Reference pressure");
+ rcd=nco_char_att_put(out_id,"P0","standard_name","reference_air_pressure_for_atmosphere_vertical_coordinate");
+ rcd=nco_char_att_put(out_id,"P0","units","Pa");
+ rcd=nco_char_att_put(out_id,"hyai","standard_name","atmosphere_hybrid_sigma_pressure_coordinate");
+ rcd=nco_char_att_put(out_id,"hyai","units","1");
+ rcd=nco_char_att_put(out_id,"hybi","standard_name","atmosphere_hybrid_sigma_pressure_coordinate");
+ rcd=nco_char_att_put(out_id,"hybi","units","1");
+ rcd=nco_char_att_put(out_id,"hyam","standard_name","atmosphere_hybrid_sigma_pressure_coordinate");
+ rcd=nco_char_att_put(out_id,"hyam","units","1");
+ rcd=nco_char_att_put(out_id,"hybm","standard_name","atmosphere_hybrid_sigma_pressure_coordinate");
+ rcd=nco_char_att_put(out_id,"hybm","units","1");
+
if(ilev_id_tpl != NC_MIN_INT) (void)nco_att_cpy(tpl_id,out_id,ilev_id_tpl,ilev_id,PCK_ATT_CPY); else if(ilev_id_in != NC_MIN_INT) (void)nco_att_cpy(vrt_in_id,out_id,ilev_id_in,ilev_id,PCK_ATT_CPY);
if(lev_id_tpl != NC_MIN_INT) (void)nco_att_cpy(tpl_id,out_id,lev_id_tpl,lev_id,PCK_ATT_CPY); else if(lev_id_in != NC_MIN_INT) (void)nco_att_cpy(vrt_in_id,out_id,lev_id_in,lev_id,PCK_ATT_CPY);
if(ps_id_tpl != NC_MIN_INT) (void)nco_att_cpy(tpl_id,out_id,ps_id_tpl,ps_id,PCK_ATT_CPY); else (void)nco_att_cpy(fl_xtr_id,out_id,ps_id_in,ps_id,PCK_ATT_CPY);
+ if(flg_grd_hyb_ecmwf && ps_id_tpl == NC_MIN_INT){
+ (void)fprintf(stdout,"%s: INFO Output surface pressure variable %s adheres to CAM/EAM hybrid sigma-pressure vertical grid conventions and is the actual surface pressure, even though the input dataset surface pressure variable %s was in ECMWF/IFS format and contained the natural log of the surface pressure. All variable metadata was copied directly from input %s to output %s though some was likely incorrect. For example, input %s long_name attribute might be \"Logarithm of surface pressure\". For this reason, the regridder overwrote the output variable attributes long_name, standard_name, and units to accurately reflect the actual output variable contents.\n",nco_prg_nm_get(),ps_nm_out,ps_nm_in,ps_nm_in,ps_nm_out,ps_nm_in);
+ rcd=nco_char_att_put(out_id,ps_nm_out,"long_name","Surface pressure");
+ rcd=nco_char_att_put(out_id,ps_nm_out,"standard_name","surface_air_pressure");
+ rcd=nco_char_att_put(out_id,ps_nm_out,"units","Pa");
+ } /* !flg_grd_hyb_ecmwf */
} /* !flg_grd_out_hyb */
/* No further access to external surface pressure file, close it */
@@ -3244,9 +3293,47 @@ nco_ntp_vrt /* [fnc] Interpolate vertically */
/* Results of heuristic method of determining whether vertical or horizontal MRV dimension */
int dmn_hrz_dgn_nbr=0; /* [nbr] Number of "degenerate" or "artificial" horizontal dimensions expected to be detected */
- /* ECMWF/IFS defines log of surface pressure with degenerate dimension "lev_2" */
- if(flg_grd_hyb_ecmwf) dmn_hrz_dgn_nbr=1;
- /* [nbr] Remove degernate/horizontal dimensions from number of detected input horizontal dimensions */
+ /* ECMWF/IFS sometimes defines log of surface pressure with degenerate dimension "lev_2"
+ For example, NCO vrt routines were developed in 2019 with this in mind:
+ % ncks -C -v lnsp -m ${DATA}/hdf/ecmwf_ifs_f640L137.nc
+ netcdf ecmwf_ifs_f640L137 {
+ dimensions:
+ lat = 1280 ;
+ lev_2 = 1 ;
+ lon = 2560 ;
+ time = UNLIMITED ; // (1 currently)
+
+ variables:
+ float lnsp(time,lev_2,lat,lon) ;
+ lnsp:long_name = "Logarithm of surface pressure" ;
+ lnsp:param = "25.3.0" ;
+ } // group /
+
+ However, CAMS started issuing ECMWF data in new format as of late ~2024
+ The new format can include NC_STRING variables and a new (and saner) lnsp rank:
+
+ zender at spectral:~$ ncks -C -v lnsp -m ~/cams_light.nc
+ netcdf cams_light {
+ dimensions:
+ ncells = 21184 ;
+
+ variables:
+ double lnsp(ncells) ;
+ lnsp:_FillValue = NaN ;
+ lnsp:CDI_grid_type = "unstructured" ;
+ lnsp:coordinates = "clat clon" ;
+ lnsp:long_name = "Surface pressure" ;
+ lnsp:missing_value = NaN ;
+ lnsp:units = "Pa" ;
+ } // group /
+
+ Explicitly check for presence of "lev_2" dimension in ps variable before adjusting for it ... */
+#if 0
+ if(flg_grd_hyb_ecmwf){
+ dmn_hrz_dgn_nbr=1;
+ } /* !flg_grd_hyb_ecmwf */
+#endif
+ /* [nbr] Remove degenerate/horizontal dimensions from number of detected input horizontal dimensions */
dmn_hrz_nbr_in-=dmn_hrz_dgn_nbr;
if(dmn_hrz_nbr_in == 0 || grd_sz_in == 1L){flg_grd_hrz_0D=True;}
else if(dmn_hrz_nbr_in == 1){flg_grd_hrz_1D=True;}
=====================================
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 "Dark Sunset (Palisades Lost)";
+ return "Prime Rib";
} /* !nco_nmn_get() */
void
View it on GitLab: https://salsa.debian.org/debian-gis-team/nco/-/commit/52ceefe0ced37a97fc7384f0c7d0061879d73dbd
--
View it on GitLab: https://salsa.debian.org/debian-gis-team/nco/-/commit/52ceefe0ced37a97fc7384f0c7d0061879d73dbd
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/20250206/4f1eb54a/attachment-0001.htm>
More information about the Pkg-grass-devel
mailing list