Closed BenjaminTJohnson closed 2 years ago
Just saw this. Thanks for the info. I'm still going through it all, but some initial comments.
We have a crtm
package here: https://github.com/NOAA-EMC/spack/blob/d125b1f748c06f714316184ef1e629d394215729/var/spack/repos/builtin/packages/crtm/package.py
And a crtm-fix
package that pulls from FTP here: https://github.com/NOAA-EMC/spack/blob/jcsda_emc_spack_stack/var/spack/repos/jcsda-emc/packages/crtm-fix/package.py
crtm
has a variant +fix
that decides whether to install crtm-fix
.
It was easier to split it up as a separate package with its own hash and version, but perhaps they should be combined to just use the git-lfs binaries. It was over the quota once which wasn't a problem with FTP.
I had a problem building the JEDI 2.4.0 release with Ecbuild a while back, but maybe that has been fixed?
Therefore, selecting a specific hash in spack is probably not ideal
What we have now specifies the hash that was at the tip of the branch when I created the package. We could set it to do it by branch, but would it be possible to offer point releases based off of that branch? I think it would be clearer that way.
We also have this workaround in crtm-fix that goes back to earlier this year. I don't really get what the issue was, but the big endian amsua_metop-c.SpcCoeff.bin
was mixed up with the little endian version or vice-versa, so we perform some hack before installing.
@kgerheiser see #155 for updated tags and coordination with Dom.
Summary
This issue to help guide the addition and use of the CRTM releases from JCSDA.
There are 4 primary "releases" of the CRTM that requires support. The primary difference between
_emc
and_jedi
is in the build system and binary file handling._emc
requires cmake only, where_jedi*
requires ecbuild, and the_emc
releases use git-LFS to directly obtain the coefficient files when cloning the repository. I also maintain an FTP server that has tarballs (duplicates of the git-LFScrtm/fix/
structure).Here are the branch names, available from https://github.com/JCSDA/crtm.git
Note: We chose to use
release/
branches (rather than relying on tags alone) to enable post-release support updates to build system / data sources, or to fix coefficient coefficient files, etc.Therefore, selecting a specific hash in spack is probably not ideal -- but rather one should be checking out the "tip" of the release branch of interest. I recognize this "release branch" approach complicates the git history, but it greatly simplifies support. Open to recommendations.
There are also some differences between the coefficient packages (i.e., the 'fix/' directory that contains all of the little endian and big endian files, along with netcdf counterparts where available). The
_jedi
requirements are more lightweight than_emc
. JEDI/UFO wanted a minimal set of coefficients -- little endian only, and a subset of instruments. The EMCfix/
is the the entirety of big_endian, little_endian, and netcdf files.Rationale
No response
Description
Here's the details of the differences between the 4 "releases" that we're interested in supporting in spack:
REL-2.3.0_emc (left) vs. crtm_jedi (right), filenames that are different:
These differences are primarily related to build system support, with some legacy support for autotools build.
crtm_jedi
also contains an entiretest/
directory that was not present in theREL-2.3.0_emc
release.REL-2.3.0_emc
contains thefix/
directory (obtained via git-LFS on checkout), whichcrtm_jedi
does not.Comparing
ctm_jedi_v2.4.0
andREL_2.4.0_emc
is more challenging. withcrtm_jedi_v2.4.0
, we released it in the same directory structure that we use for development, rather than a "build release", whichREL-2.3.0_emc
,REL-2.4.0_emc
, andcrtm_jedi
were released as. In the future, all releases of CRTM will use the same structure ascrtm_jedi_v2.4.0
. Here's the 2 leveltree
for crtm_jedi_v2.4.0.where the source codes are distributed under these various
src/*
directories.vs. the tree of
REL-2.4.0_emc
where all source codes are flat in
libsrc
.Now, to the code differences themselves:
REL-2.3.0_emc
vs.crtm_jedi
has lots of code differences, however, most of it is related to (a) documentation material that was removed forcrtm_jedi
, internal module ID information that was added by SVN (and removed incrtm_jedi
).However, there are some critical code differences relating to an openMP implementation in crtm_jedi, but numerically the results are identical within at least single precision (1e-6). There's also a lot of documentation differences between the codes. I have an extensive "diff", and can provide that if necessary.
The code differences between
REL-2.4.0_emc
andcrtm_jedi_v2.4.0
are minimal. The primary differences is this addition to theReflection_Correction_Module.f90
to deal with small transmittance values causing an underflow in certain situations:Additional information
No response
General information
spack --version
and reported the version of Spack