A More Reproducible CyberGIS-Jupyter for Water (CJW)

Authors: Alexander Michels, Li Zhiyu, Anand Padmanabhan, and Shaowen Wang
CyberGIS Center for Advanced Digital and Spatial Studies


TL;DR

Most of this notebook is going over advanced options and technical details behind our new design. There are however a few key things all users should know:

  • What do the different kernel names/versions mean?
  • Paths to some executables might have changed.
  • We have a new cjw command to manage kernel versions.

What do the different kernel names/versions mean?

You may have noticed in the dropdown that for each type of kernel (TauDEM, SUMMA, etc.) there are two versions:

  1. The version ending with "-beta" will always point to the latest version of that kernel. This means that versions of packages may change on you.
  2. The version ending with "-2021-09" will not be changed unless there are critical bugs. This means that if you save a notebook with that kernel, it should always work! As we update and release new kernels, these kernels should be completely unaffected. We recommend saving notebooks that you're hoping to publish using versioned kernels.

Paths to some executables might have changed.

We are installing and managing software differently, so you should know that any hard-coded paths to executables have probably changed. The which and whereis commands are excellent tools for finding the new locations. If you need to know where the executable for a kernel is, you can use:

import sys
print(sys.executable)

For more details on how software is now managed, see the Modules section of this notebook.

We have a new cjw command to manage kernel versions.

We know the dropdown is currently crowded and as we release new versions of kernels will only get worse. While currently, we have all versions of kernels installed by default, this will not be the case in future. To ensure that you always have access to the kernels you use, we have provided a cjw command line interface for kernel management. For more information on the cjw command, see that section in this notebook.

That's all you should need to know, but you can read on for more details!


Kernels

Kernels still work the same way, the conda environments that provide them have just changed locations. They are now installed on an NFS which is mounted in each container:

In [1]:
ls /data/cigi/cjw-easybuild/conda/
base-2021-06  landlab-2021-06    pysumma-2021-06  wrfhydro-2021-06
bash-2021-09  pyrhessys-2021-06  taudem-2021-06

You may have noticed in the dropdown that for each type of kernel (TauDEM, SUMMA, etc.) there are two versions:

  1. The version ending with "-beta" will always point to the latest version of that kernel. This means that versions of packages may change on you.
  2. The version ending with "-2021-09" will not be changed unless there are critical bugs. This means that if you save a notebook with that kernel, it should always work! As we update and release new kernels, these kernels should be completely unaffected. We recommend saving notebooks that you're hoping to publish using versioned kernels.

The cjw CLI

As we acquire more and more kernels each release, we won't be displaying all of the kernels in the dropdown by default, so we have also provided a tool to see the available kernels and install old versions of the kernels. This command-line tool is cjw.

In [2]:
cjw -h
  This is cjw (version 2021-09), designed to help manage compute
  environments here on CJW. Your options are:
    --help [-h]:             to display this help message.
    --version [-v]:          to see version information.
    --avail [-a]:            to see available CJW kernels.
    --install [-i] <kernel>: to install an available kernel.
    --personal [-p]:         to see person kernels.
    --remove-personal [-rp]: to remove a personal kernel.
In [3]:
cjw --avail
  Kernels available to install with cjw:
bash		 pysumma	  rhessys	   wrfhydro
bash-2021-09	 pysumma-2021-09  rhessys-2021-09  wrfhydro-2021-09
landlab		 python3	  taudem
landlab-2021-09  python3-2021-09  taudem-2021-09

You'll notice there is an unversioned kernel of each type (for example python3 vs python3-2021-09). This is the *-dev version of the kernel and is continually updated to point at the latest release. This means that notebooks not saved with a versioned kernel will continue to open and by default open to the latest release.

For this release, we have all versions of the kernels installed, but let's remove a kernel and re-install just to show how the tool works! We will start by listing all of the kernels:

In [4]:
jupyter kernelspec list
Available kernels:
  bash                /home/jovyan/.local/share/jupyter/kernels/bash
  bash-2021-09        /home/jovyan/.local/share/jupyter/kernels/bash-2021-09
  landlab             /home/jovyan/.local/share/jupyter/kernels/landlab
  landlab-2021-09     /home/jovyan/.local/share/jupyter/kernels/landlab-2021-09
  pysumma             /home/jovyan/.local/share/jupyter/kernels/pysumma
  pysumma-2021-09     /home/jovyan/.local/share/jupyter/kernels/pysumma-2021-09
  python3             /home/jovyan/.local/share/jupyter/kernels/python3
  python3-2021-09     /home/jovyan/.local/share/jupyter/kernels/python3-2021-09
  rhessys             /home/jovyan/.local/share/jupyter/kernels/rhessys
  rhessys-2021-09     /home/jovyan/.local/share/jupyter/kernels/rhessys-2021-09
  taudem              /home/jovyan/.local/share/jupyter/kernels/taudem
  taudem-2021-09      /home/jovyan/.local/share/jupyter/kernels/taudem-2021-09
  wrfhydro            /home/jovyan/.local/share/jupyter/kernels/wrfhydro
  wrfhydro-2021-09    /home/jovyan/.local/share/jupyter/kernels/wrfhydro-2021-09

Now, let's remove python3-2021-09 and list the kernels again:

In [5]:
jupyter kernelspec remove -f python3-2021-09
jupyter kernelspec list
[RemoveKernelSpec] Removed /home/jovyan/.local/share/jupyter/kernels/python3-2021-09
Available kernels:
  bash                /home/jovyan/.local/share/jupyter/kernels/bash
  bash-2021-09        /home/jovyan/.local/share/jupyter/kernels/bash-2021-09
  landlab             /home/jovyan/.local/share/jupyter/kernels/landlab
  landlab-2021-09     /home/jovyan/.local/share/jupyter/kernels/landlab-2021-09
  pysumma             /home/jovyan/.local/share/jupyter/kernels/pysumma
  pysumma-2021-09     /home/jovyan/.local/share/jupyter/kernels/pysumma-2021-09
  python3             /home/jovyan/.local/share/jupyter/kernels/python3
  rhessys             /home/jovyan/.local/share/jupyter/kernels/rhessys
  rhessys-2021-09     /home/jovyan/.local/share/jupyter/kernels/rhessys-2021-09
  taudem              /home/jovyan/.local/share/jupyter/kernels/taudem
  taudem-2021-09      /home/jovyan/.local/share/jupyter/kernels/taudem-2021-09
  wrfhydro            /home/jovyan/.local/share/jupyter/kernels/wrfhydro
  wrfhydro-2021-09    /home/jovyan/.local/share/jupyter/kernels/wrfhydro-2021-09

You can see that kernel is no longer listed, so let's reinstall and list kernels again!

In [6]:
cjw -i python3-2021-09
jupyter kernelspec list
  Installing python3-2021-09...
Available kernels:
  bash                /home/jovyan/.local/share/jupyter/kernels/bash
  bash-2021-09        /home/jovyan/.local/share/jupyter/kernels/bash-2021-09
  landlab             /home/jovyan/.local/share/jupyter/kernels/landlab
  landlab-2021-09     /home/jovyan/.local/share/jupyter/kernels/landlab-2021-09
  pysumma             /home/jovyan/.local/share/jupyter/kernels/pysumma
  pysumma-2021-09     /home/jovyan/.local/share/jupyter/kernels/pysumma-2021-09
  python3             /home/jovyan/.local/share/jupyter/kernels/python3
  python3-2021-09     /home/jovyan/.local/share/jupyter/kernels/python3-2021-09
  rhessys             /home/jovyan/.local/share/jupyter/kernels/rhessys
  rhessys-2021-09     /home/jovyan/.local/share/jupyter/kernels/rhessys-2021-09
  taudem              /home/jovyan/.local/share/jupyter/kernels/taudem
  taudem-2021-09      /home/jovyan/.local/share/jupyter/kernels/taudem-2021-09
  wrfhydro            /home/jovyan/.local/share/jupyter/kernels/wrfhydro
  wrfhydro-2021-09    /home/jovyan/.local/share/jupyter/kernels/wrfhydro-2021-09

Once a kernel is installed with the cjw command, it is added a personal kernel that will be available even if you restart the container!

In [7]:
cjw -p
  Your personal kernels are:
python3-2021-09

To remove a kernel from your list of personal kernels you can use the -rp or -remove-personal flags (note that removing a kernel from your personal kernels doesn't remove it from Jupyter, but it will not be there upon restart of the container unless it is a default kernel):

In [8]:
cjw -rp python3-2021-09
cjw -p
  Your personal kernels are:

If our kernels don't provide everything you need, you can still use your in-container pip and conda to install packages as needed.

Installing Packages Locally with Pip

In [9]:
pip install disjoint_set
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: disjoint_set in /home/jovyan/.local/lib/python3.9/site-packages (0.7.2)
In [10]:
pip show disjoint-set
Name: disjoint-set
Version: 0.7.2
Summary: Disjoint Set data structure implementation for Python
Home-page: https://github.com/mrapacz/disjoint-set/
Author: Maciej Rapacz
Author-email: mmrapacz@protonmail.ch
License: 
Location: /home/jovyan/.local/lib/python3.9/site-packages
Requires: 
Required-by: 
In [11]:
python3 -c "import disjoint_set"

Installing Packages Locally with Conda

In [12]:
conda install -y affine
Collecting package metadata (current_repodata.json): done
Solving environment: done

# All requested packages already installed.

In [13]:
/opt/conda/bin/python3 -c "import affine"

How Kernels work with Modules

You might be asking:

If the non-kernel software is installed on the NFS how do I interact with them in my notebook?

This is done using the prepend_and_launch.sh script for each kernel. This script is generally available at ~/.local/share/juypter/kernels/<name of kernel>/prepend_and_launch.sh. Note that the name of the kernel for that path is not necessarily the display name. Let's look at what we have in that path and see how the module is being loaded for this kernel!

In [14]:
cat ~/.local/share/jupyter/kernels/bash/prepend_and_launch.sh
#!/bin/bash
export PROJ_LIB=${MY_PROJ_LIB}
module load cjw/2021-09
export PATH=${MY_ENV_BIN_DIR}:${PATH}
exec "$@"

The first line simply declares that it is a bash script. The third line, module load cjw/2021-19 is the line that loads the appropriate "metamodule" for your kernel (more on modules in the next section!). The last line, exec "$@" just tells the kernel to run. The second and fourth lines set environment variables, but to understand them, first we need to look at the kernel.json that declares the $MY_PROJ_LIB and $MY_ENV_BIN_DIR variables:

In [15]:
cat ~/.local/share/jupyter/kernels/bash/kernel.json
{
    "env": {
        "PS1": "$",
        "MY_ENV_BIN_DIR": "/data/cigi/cjw-easybuild/conda/bash-2021-09/bin",
        "MY_PROJ_LIB": "/data/cigi/cjw-easybuild/conda/bash-2021-09/share/proj"
    },
    "argv": [
        "/home/jovyan/.local/share/jupyter/kernels/bash/prepend_and_launch.sh",
        "/data/cigi/cjw-easybuild/conda/bash-2021-09/bin/python",
        "-m",
        "bash_kernel",
        "-f",
        "{connection_file}"
    ], 
    "codemirror_mode": "shell",
    "display_name": "Bash-beta",
    "language": "bash"
}

The kernel.json defines the $MY_PROJ_LIB and $MY_ENV_BIN_DIR variables and tells the kernel to run the prepend_and_launch.sh script before starting up the kernel! Another feature of this release is that kernels/conda environments are also installed outside of the kernel, meaning that we can keep old versions of kernels exactly as they were installed! Now we will look at what that module load command actually means.


Modules (Lmod)

A key tool for this installation is Lmod. You may also be familiar with Environment Modules which is a very similar tool that Lmod was designed to improve on. Both of these tools are designed to help manage compute environments by giving users to ability to load and unload software. You may also find the User Guide for Lmod useful. If you are interested in a full list of modules commands/options, you can use the module --help command:

In [16]:
module --help
Usage: module [options] sub-command [args ...]

Options:
  -h -? -H --help                   This help message
  -s availStyle --style=availStyle  Site controlled avail style: system
                                    (default: system)
  --regression_testing              Lmod regression testing
  -D                                Program tracing written to stderr
  --debug=dbglvl                    Program tracing written to stderr (where
                                    dbglvl is a number 1,2,3)
  --pin_versions=pinVersions        When doing a restore use specified
                                    version, do not follow defaults
  -d --default                      List default modules only when used with
                                    avail
  -q --quiet                        Do not print out warnings
  --expert                          Expert mode
  -t --terse                        Write out in machine readable format for
                                    commands: list, avail, spider, savelist
  --initial_load                    loading Lmod for first time in a user
                                    shell
  --latest                          Load latest (ignore default)
  --ignore_cache                    Treat the cache file(s) as out-of-date
  --novice                          Turn off expert and quiet flag
  --raw                             Print modulefile in raw output when used
                                    with show
  -w twidth --width=twidth          Use this as max term width
  -v --version                      Print version info and quit
  -r --regexp                       use regular expression match
  --gitversion                      Dump git version in a machine readable
                                    way and quit
  --dumpversion                     Dump version in a machine readable way
                                    and quit
  --check_syntax --checkSyntax      Checking module command syntax: do not
                                    load
  --config                          Report Lmod Configuration
  --config_json                     Report Lmod Configuration in json format
  --mt                              Report Module Table State
  --timer                           report run times
  --force                           force removal of a sticky module or save
                                    an empty collection
  --redirect                        Send the output of list, avail, spider
                                    to stdout (not stderr)
  --no_redirect                     Force output of list, avail and spider
                                    to stderr
  --show_hidden                     Avail and spider will report hidden
                                    modules
  --spider_timeout=timeout          a timeout for spider
  -T --trace                        
  --nx --no_extensions              
  --loc --location                  Just print the file location when using
                                    show


module [options] sub-command [args ...]

Help sub-commands:
------------------
  help                              prints this message
  help                module [...]  print help message from module(s)

Loading/Unloading sub-commands:
-------------------------------
  load | add          module [...]  load module(s)
  try-load | try-add  module [...]  Add module(s), do not complain if not
                                    found
  del | unload        module [...]  Remove module(s), do not complain if not
                                    found
  swap | sw | switch  m1 m2         unload m1 and load m2
  purge                             unload all modules
  refresh                           reload aliases from current list of
                                    modules.
  update                            reload all currently loaded modules.

Listing / Searching sub-commands:
---------------------------------
  list                              List loaded modules
  list                s1 s2 ...     List loaded modules that match the
                                    pattern
  avail | av                        List available modules
  avail | av          string        List available modules that contain
                                    "string".
  overview | ov                     List all available modules by short
                                    names with number of versions
  overview | av       string        List available modules by short names
                                    with number of versions that contain
                                    "string"
  spider                            List all possible modules
  spider              module        List all possible version of that module
                                    file
  spider              string        List all module that contain the
                                    "string".
  spider              name/version  Detailed information about that version
                                    of the module.
  whatis              module        Print whatis information about module
  keyword | key       string        Search all name and whatis that contain
                                    "string".

Searching with Lmod:
--------------------
  All searching (spider, list, avail, keyword) support regular expressions:
  

  -r spider           '^p'          Finds all the modules that start with
                                    `p' or `P'
  -r spider           mpi           Finds all modules that have "mpi" in
                                    their name.
  -r spider           'mpi$         Finds all modules that end with "mpi" in
                                    their name.

Handling a collection of modules:
--------------------------------
  save | s                          Save the current list of modules to a
                                    user defined "default" collection.
  save | s            name          Save the current list of modules to
                                    "name" collection.
  reset                             The same as "restore system"
  restore | r                       Restore modules from the user's
                                    "default" or system default.
  restore | r         name          Restore modules from "name" collection.
  restore             system        Restore module state to system defaults.
  savelist                          List of saved collections.
  describe | mcc      name          Describe the contents of a module
                                    collection.
  disable             name          Disable (i.e. remove) a collection.

Deprecated commands:
--------------------
  getdefault          [name]        load name collection of modules or
                                    user's "default" if no name given.
                                    ===> Use "restore" instead <====
  setdefault          [name]        Save current list of modules to name if
                                    given, otherwise save as the default
                                    list for you the user.
                                    ===> Use "save" instead. <====

Miscellaneous sub-commands:
---------------------------
  is-loaded           modulefile    return a true status if module is loaded
  is-avail            modulefile    return a true status if module can be
                                    loaded
  show                modulefile    show the commands in the module file.
  use [-a]            path          Prepend or Append path to MODULEPATH.
  unuse               path          remove path from MODULEPATH.
  tablelist                         output list of active modules as a lua
                                    table.

Important Environment Variables:
--------------------------------
  LMOD_COLORIZE                     If defined to be "YES" then Lmod prints
                                    properties and warning in color.

    --------------------------------------------------------------------------

Lmod Web Sites

  Documentation:    http://lmod.readthedocs.org
  GitHub:           https://github.com/TACC/Lmod
  SourceForge:      https://lmod.sf.net
  TACC Homepage:    https://www.tacc.utexas.edu/research-development/tacc-projects/lmod

  To report a bug please read http://lmod.readthedocs.io/en/latest/075_bug_reporting.html
    --------------------------------------------------------------------------



Modules based on Lua: Version 8.5.12  2021-08-19 18:37 -05:00
    by Robert McLay mclay@tacc.utexas.edu

To check what software is available, you can use the module avail command:

In [17]:
module avail
--------------------- /data/cigi/cjw-easybuild/metamodules ---------------------
   cjw-wrfhydro/2021-09    cjw/2021-09 (L)

---------------- /data/cigi/cjw-easybuild/easybuild/modules/all ----------------
   ANTLR/2.7.7-GCCcore-8.3.0-Java-11       (L)
   Anaconda3/2020.11
   Autoconf/2.69-GCCcore-8.3.0
   Automake/1.16.1-GCCcore-8.3.0
   Autotools/20180311-GCCcore-8.3.0
   Bison/3.3.2-GCCcore-8.3.0
   Bison/3.3.2
   Bison/3.5.3                             (D)
   CMake/3.15.3-GCCcore-8.3.0
   DB/18.1.32-GCCcore-8.3.0
   Doxygen/1.8.16-GCCcore-8.3.0
   ESMF/8.0.0-foss-2019b                   (L)
   FFTW/3.3.8-gompi-2019b                  (L)
   FFmpeg/4.2.1-GCCcore-8.3.0              (L)
   FreeXL/1.0.5-GCCcore-8.3.0              (L)
   FriBidi/1.0.5-GCCcore-8.3.0             (L)
   GCC/8.3.0                               (L)
   GCCcore/8.3.0                           (L)
   GDAL/3.0.2-foss-2019b                   (L)
   GEOS/3.8.0-GCC-8.3.0                    (L)
   GLib/2.62.0-GCCcore-8.3.0               (L)
   GMP/6.1.2-GCCcore-8.3.0                 (L)
   GRASS/7.8.3-foss-2019b                  (L)
   GSL/2.6-GCC-8.3.0                       (L)
   HDF/4.2.14-GCCcore-8.3.0                (L)
   HDF5/1.10.5-gompi-2019b                 (L)
   JasPer/2.0.14-GCCcore-8.3.0             (L)
   Java/11.0.2                             (L,11)
   LAME/3.100-GCCcore-8.3.0                (L)
   LLVM/9.0.0-GCCcore-8.3.0                (L)
   LibTIFF/4.0.10-GCCcore-8.3.0            (L)
   M4/1.4.18-GCCcore-8.3.0
   M4/1.4.18                               (D)
   MPICH/3.3.2-GCC-8.3.0
   Mako/1.1.0-GCCcore-8.3.0
   Mesa/19.1.7-GCCcore-8.3.0               (L)
   Meson/0.51.2-GCCcore-8.3.0-Python-3.7.4
   NASM/2.14.02-GCCcore-8.3.0              (L)
   NCO/4.9.3-foss-2019b                    (L)
   Ninja/1.9.0-GCCcore-8.3.0
   OpenBLAS/0.3.7-GCC-8.3.0                (L)
   OpenMPI/3.1.4-GCC-8.3.0                 (L)
   PCRE/8.43-GCCcore-8.3.0                 (L)
   PROJ/6.2.1-GCCcore-8.3.0                (L)
   Perl/5.30.0-GCCcore-8.3.0
   Python/2.7.16-GCCcore-8.3.0
   Python/3.7.4-GCCcore-8.3.0              (D)
   RHESSysEastCoast/7.2.0-foss-2019b       (L)
   SQLite/3.29.0-GCCcore-8.3.0             (L)
   SUMMA/3.0.3-foss-2019b                  (L)
   ScaLAPACK/2.0.2-gompi-2019b             (L)
   Szip/2.1.1-GCCcore-8.3.0                (L)
   TauDEM/5.3.8-foss-2019b                 (L)
   Tcl/8.6.9-GCCcore-8.3.0                 (L)
   UDUNITS/2.2.26-GCCcore-8.3.0            (L)
   WPS/4.2-foss-2019b-dmpar                (L)
   WPS/4.2-foss-2019b-hydro                (D)
   WRF/4.2.1-foss-2019b-dmpar              (L)
   X11/20190717-GCCcore-8.3.0              (L)
   XZ/5.2.4-GCCcore-8.3.0                  (L)
   Yasm/1.3.0-GCCcore-8.3.0
   binutils/2.32-GCCcore-8.3.0             (L)
   binutils/2.32                           (D)
   bzip2/1.0.8-GCCcore-8.3.0               (L)
   cURL/7.66.0-GCCcore-8.3.0               (L)
   cairo/1.16.0-GCCcore-8.3.0              (L)
   expat/2.2.7-GCCcore-8.3.0               (L)
   find_inlets/20191210-foss-2019b         (L)
   flex/2.6.4-GCCcore-8.3.0
   flex/2.6.4                              (D)
   fontconfig/2.13.1-GCCcore-8.3.0         (L)
   foss/2019b                              (L)
   freetype/2.10.1-GCCcore-8.3.0           (L)
   gettext/0.19.8.1
   gettext/0.20.1-GCCcore-8.3.0            (L,D)
   git/2.23.0-GCCcore-8.3.0-nodocs
   gompi/2019b                             (L)
   gperf/3.1-GCCcore-8.3.0
   groff/1.22.4-GCCcore-8.3.0
   gzip/1.10-GCCcore-8.3.0                 (L)
   help2man/1.47.4
   help2man/1.47.8-GCCcore-8.3.0           (D)
   hwloc/1.11.12-GCCcore-8.3.0             (L)
   intltool/0.51.0-GCCcore-8.3.0
   libGLU/9.0.1-GCCcore-8.3.0              (L)
   libdap/3.20.6-GCCcore-8.3.0             (L)
   libdrm/2.4.99-GCCcore-8.3.0             (L)
   libffi/3.2.1-GCCcore-8.3.0              (L)
   libgeotiff/1.5.1-GCCcore-8.3.0          (L)
   libiconv/1.16-GCCcore-8.3.0
   libjpeg-turbo/2.0.3-GCCcore-8.3.0       (L)
   libpciaccess/0.14-GCCcore-8.3.0         (L)
   libpng/1.6.37-GCCcore-8.3.0             (L)
   libreadline/8.0-GCCcore-8.3.0           (L)
   libspatialite/4.3.0a-GCC-8.3.0          (L)
   libtirpc/1.2.6-GCCcore-8.3.0            (L)
   libtool/2.4.6-GCCcore-8.3.0
   libunwind/1.3.1-GCCcore-8.3.0           (L)
   libxml2/2.9.9-GCCcore-8.3.0             (L)
   lz4/1.9.2-GCCcore-8.3.0                 (L)
   makeinfo/6.7-GCCcore-8.3.0
   ncurses/6.0
   ncurses/6.1-GCCcore-8.3.0               (L,D)
   netCDF-C++4/4.3.1-gompi-2019b           (L)
   netCDF-Fortran/4.5.2-gompi-2019b        (L)
   netCDF/4.7.1-gompi-2019b                (L)
   nettle/3.5.1-GCCcore-8.3.0              (L)
   numactl/2.0.12-GCCcore-8.3.0            (L)
   pixman/0.38.4-GCCcore-8.3.0             (L)
   pkg-config/0.29.2-GCCcore-8.3.0
   tcsh/6.22.02-GCCcore-8.3.0
   time/1.9-GCCcore-8.3.0
   util-linux/2.34-GCCcore-8.3.0           (L)
   x264/20190925-GCCcore-8.3.0             (L)
   x265/3.2-GCCcore-8.3.0                  (L)
   xorg-macros/1.19.2-GCCcore-8.3.0        (L)
   zlib/1.2.11-GCCcore-8.3.0               (L)
   zlib/1.2.11                             (D)
   zstd/1.4.4-GCCcore-8.3.0                (L)

-------------------- /usr/share/lmod/lmod/modulefiles/Core ---------------------
   lmod    settarg

  Where:
   Aliases:  Aliases exist: foo/1.2.3 (1.2) means that "module load foo/1.2" will load foo/1.2.3
   D:        Default Module
   L:        Module is loaded

If the avail list is too long consider trying:

"module --default avail" or "ml -d av" to just list the default modules.
"module overview" or "ml ov" to display the number of modules for each name.

Use "module spider" to find all possible modules and extensions.
Use "module keyword key1 key2 ..." to search for all possible modules matching
any of the "keys".


You may have noticed that some of the modules have a "(L)" next to them. That's because we already loaded those modules for you when you started the kernel! Every kernel we provide will load the appropriate kernels so that users don't have to think about it. To see the software loaded you can use the command module list:

In [18]:
module list
Currently Loaded Modules:
  1) GCCcore/8.3.0                      42) x264/20190925-GCCcore-8.3.0
  2) zlib/1.2.11-GCCcore-8.3.0          43) LAME/3.100-GCCcore-8.3.0
  3) binutils/2.32-GCCcore-8.3.0        44) x265/3.2-GCCcore-8.3.0
  4) GCC/8.3.0                          45) util-linux/2.34-GCCcore-8.3.0
  5) numactl/2.0.12-GCCcore-8.3.0       46) fontconfig/2.13.1-GCCcore-8.3.0
  6) XZ/5.2.4-GCCcore-8.3.0             47) xorg-macros/1.19.2-GCCcore-8.3.0
  7) libxml2/2.9.9-GCCcore-8.3.0        48) X11/20190717-GCCcore-8.3.0
  8) libpciaccess/0.14-GCCcore-8.3.0    49) FriBidi/1.0.5-GCCcore-8.3.0
  9) hwloc/1.11.12-GCCcore-8.3.0        50) FFmpeg/4.2.1-GCCcore-8.3.0
 10) OpenMPI/3.1.4-GCC-8.3.0            51) pixman/0.38.4-GCCcore-8.3.0
 11) OpenBLAS/0.3.7-GCC-8.3.0           52) libffi/3.2.1-GCCcore-8.3.0
 12) gompi/2019b                        53) GLib/2.62.0-GCCcore-8.3.0
 13) FFTW/3.3.8-gompi-2019b             54) cairo/1.16.0-GCCcore-8.3.0
 14) ScaLAPACK/2.0.2-gompi-2019b        55) GMP/6.1.2-GCCcore-8.3.0
 15) foss/2019b                         56) nettle/3.5.1-GCCcore-8.3.0
 16) bzip2/1.0.8-GCCcore-8.3.0          57) libdrm/2.4.99-GCCcore-8.3.0
 17) ncurses/6.1-GCCcore-8.3.0          58) LLVM/9.0.0-GCCcore-8.3.0
 18) gettext/0.20.1-GCCcore-8.3.0       59) libunwind/1.3.1-GCCcore-8.3.0
 19) libpng/1.6.37-GCCcore-8.3.0        60) Mesa/19.1.7-GCCcore-8.3.0
 20) libreadline/8.0-GCCcore-8.3.0      61) libGLU/9.0.1-GCCcore-8.3.0
 21) Szip/2.1.1-GCCcore-8.3.0           62) gzip/1.10-GCCcore-8.3.0
 22) HDF5/1.10.5-gompi-2019b            63) lz4/1.9.2-GCCcore-8.3.0
 23) cURL/7.66.0-GCCcore-8.3.0          64) zstd/1.4.4-GCCcore-8.3.0
 24) netCDF/4.7.1-gompi-2019b           65) GRASS/7.8.3-foss-2019b
 25) expat/2.2.7-GCCcore-8.3.0          66) RHESSysEastCoast/7.2.0-foss-2019b
 26) GEOS/3.8.0-GCC-8.3.0               67) netCDF-Fortran/4.5.2-gompi-2019b
 27) Tcl/8.6.9-GCCcore-8.3.0            68) SUMMA/3.0.3-foss-2019b
 28) SQLite/3.29.0-GCCcore-8.3.0        69) TauDEM/5.3.8-foss-2019b
 29) NASM/2.14.02-GCCcore-8.3.0         70) WRF/4.2.1-foss-2019b-dmpar
 30) libjpeg-turbo/2.0.3-GCCcore-8.3.0  71) WPS/4.2-foss-2019b-dmpar
 31) JasPer/2.0.14-GCCcore-8.3.0        72) find_inlets/20191210-foss-2019b
 32) LibTIFF/4.0.10-GCCcore-8.3.0       73) UDUNITS/2.2.26-GCCcore-8.3.0
 33) PCRE/8.43-GCCcore-8.3.0            74) Java/11.0.2
 34) PROJ/6.2.1-GCCcore-8.3.0           75) ANTLR/2.7.7-GCCcore-8.3.0-Java-11
 35) libgeotiff/1.5.1-GCCcore-8.3.0     76) libdap/3.20.6-GCCcore-8.3.0
 36) libtirpc/1.2.6-GCCcore-8.3.0       77) GSL/2.6-GCC-8.3.0
 37) HDF/4.2.14-GCCcore-8.3.0           78) netCDF-C++4/4.3.1-gompi-2019b
 38) GDAL/3.0.2-foss-2019b              79) ESMF/8.0.0-foss-2019b
 39) FreeXL/1.0.5-GCCcore-8.3.0         80) NCO/4.9.3-foss-2019b
 40) libspatialite/4.3.0a-GCC-8.3.0     81) cjw/2021-09
 41) freetype/2.10.1-GCCcore-8.3.0

 

To get more information on any of those pieces of software here are a few simple commands you can try:

In [19]:
module whatis find_inlets
find_inlets/20191210-foss-2019b                                 : Description: Finding inlets
find_inlets/20191210-foss-2019b                                 : Homepage: https://github.com/cybergis/find_inlets
find_inlets/20191210-foss-2019b                                 : URL: https://github.com/cybergis/find_inlets

You can also search for stuff by keyword!

In [20]:
module keyword geo
----------------------------------------------------------------------------

The following modules match your search criteria: "geo"
----------------------------------------------------------------------------

  GDAL: GDAL/3.0.2-foss-2019b
    GDAL is a translator library for raster geospatial data formats that is
    released under an X/MIT style Open Source license by the Open Source
    Geospatial Foundation. As a library, it presents a single abstract data
    model to the calling application for all supported formats. It also
    comes with a variety of useful commandline utilities for data
    translation and processing.

  GEOS: GEOS/3.8.0-GCC-8.3.0
    GEOS (Geometry Engine - Open Source) is a C++ port of the Java Topology
    Suite (JTS)

  GRASS: GRASS/7.8.3-foss-2019b
    The Geographic Resources Analysis Support System - used for geospatial
    data management and analysis, image processing, graphics and maps
    production, spatial modeling, and visualization

  PROJ: PROJ/6.2.1-GCCcore-8.3.0
    Program proj is a standard Unix filter function which converts
    geographic longitude and latitude coordinates into cartesian
    coordinates

  libgeotiff: libgeotiff/1.5.1-GCCcore-8.3.0
    Library for reading and writing coordinate system information from/to
    GeoTIFF files

----------------------------------------------------------------------------

To learn more about a package execute:

   $ module spider Foo

where "Foo" is the name of a module.

To find detailed information about a particular package you
must specify the version if there is more than one version:

   $ module spider Foo/11.1

----------------------------------------------------------------------------

Now that you know the basics of using modules, you're probably wondering: "how does this help me?" The answer is that modules are nice because loading and unloading allows you to automatically set/unset environment variables associated with software. So for example, let's check the $PATH and $LD_LIBRARY_PATH with the cjw module loaded:

In [21]:
module load cjw/2021-09
echo $PATH
/data/cigi/cjw-easybuild/easybuild/software/NCO/4.9.3-foss-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/find_inlets/20191210-foss-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/WPS/4.2-foss-2019b-dmpar/WPS-4.2:/data/cigi/cjw-easybuild/easybuild/software/WRF/4.2.1-foss-2019b-dmpar/WRF-4.2.1/main:/data/cigi/cjw-easybuild/easybuild/software/TauDEM/5.3.8-foss-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/SUMMA/3.0.3-foss-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/RHESSysEastCoast/7.2.0-foss-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/GRASS/7.8.3-foss-2019b/bin:/data/cigi/cjw-easybuild/conda/bash-2021-09/bin:/data/cigi/cjw-easybuild/easybuild/software/ESMF/8.0.0-foss-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/netCDF-C++4/4.3.1-gompi-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/GSL/2.6-GCC-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/libdap/3.20.6-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/ANTLR/2.7.7-GCCcore-8.3.0-Java-11/bin:/data/cigi/cjw-easybuild/easybuild/software/Java/11.0.2:/data/cigi/cjw-easybuild/easybuild/software/Java/11.0.2/bin:/data/cigi/cjw-easybuild/easybuild/software/UDUNITS/2.2.26-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/netCDF-Fortran/4.5.2-gompi-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/zstd/1.4.4-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/lz4/1.9.2-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/gzip/1.10-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/LLVM/9.0.0-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/nettle/3.5.1-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/cairo/1.16.0-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/GLib/2.62.0-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/FFmpeg/4.2.1-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/FriBidi/1.0.5-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/X11/20190717-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/fontconfig/2.13.1-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/util-linux/2.34-GCCcore-8.3.0/sbin:/data/cigi/cjw-easybuild/easybuild/software/util-linux/2.34-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/x265/3.2-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/LAME/3.100-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/x264/20190925-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/freetype/2.10.1-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/GDAL/3.0.2-foss-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/HDF/4.2.14-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/libgeotiff/1.5.1-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/PROJ/6.2.1-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/PCRE/8.43-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/LibTIFF/4.0.10-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/JasPer/2.0.14-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/libjpeg-turbo/2.0.3-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/NASM/2.14.02-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/SQLite/3.29.0-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/Tcl/8.6.9-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/GEOS/3.8.0-GCC-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/expat/2.2.7-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/cURL/7.66.0-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/HDF5/1.10.5-gompi-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/libpng/1.6.37-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/gettext/0.20.1-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/ncurses/6.1-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/bzip2/1.0.8-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/FFTW/3.3.8-gompi-2019b/bin:/data/cigi/cjw-easybuild/easybuild/software/OpenMPI/3.1.4-GCC-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/hwloc/1.11.12-GCCcore-8.3.0/sbin:/data/cigi/cjw-easybuild/easybuild/software/hwloc/1.11.12-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/libxml2/2.9.9-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/XZ/5.2.4-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/numactl/2.0.12-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/binutils/2.32-GCCcore-8.3.0/bin:/data/cigi/cjw-easybuild/easybuild/software/GCCcore/8.3.0/bin:/opt/conda/condabin:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/jovyan/.local/bin
In [22]:
echo $LD_LIBRARY_PATH
/data/cigi/cjw-easybuild/easybuild/software/NCO/4.9.3-foss-2019b/lib:/data/cigi/cjw-easybuild/easybuild/software/WPS/4.2-foss-2019b-dmpar/WPS-4.2:/data/cigi/cjw-easybuild/easybuild/software/WRF/4.2.1-foss-2019b-dmpar/WRF-4.2.1/main:/data/cigi/cjw-easybuild/easybuild/software/ESMF/8.0.0-foss-2019b/lib:/data/cigi/cjw-easybuild/easybuild/software/netCDF-C++4/4.3.1-gompi-2019b/lib:/data/cigi/cjw-easybuild/easybuild/software/GSL/2.6-GCC-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libdap/3.20.6-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/ANTLR/2.7.7-GCCcore-8.3.0-Java-11/lib:/data/cigi/cjw-easybuild/easybuild/software/Java/11.0.2/lib:/data/cigi/cjw-easybuild/easybuild/software/UDUNITS/2.2.26-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/netCDF-Fortran/4.5.2-gompi-2019b/lib:/data/cigi/cjw-easybuild/easybuild/software/zstd/1.4.4-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/lz4/1.9.2-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libGLU/9.0.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/Mesa/19.1.7-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libunwind/1.3.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/LLVM/9.0.0-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libdrm/2.4.99-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/nettle/3.5.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/GMP/6.1.2-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/cairo/1.16.0-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/GLib/2.62.0-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libffi/3.2.1-GCCcore-8.3.0/lib64:/data/cigi/cjw-easybuild/easybuild/software/libffi/3.2.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/pixman/0.38.4-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/FFmpeg/4.2.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/FriBidi/1.0.5-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/X11/20190717-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/fontconfig/2.13.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/util-linux/2.34-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/x265/3.2-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/LAME/3.100-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/x264/20190925-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/freetype/2.10.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libspatialite/4.3.0a-GCC-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/FreeXL/1.0.5-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/GDAL/3.0.2-foss-2019b/lib:/data/cigi/cjw-easybuild/easybuild/software/HDF/4.2.14-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libtirpc/1.2.6-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libgeotiff/1.5.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/PROJ/6.2.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/PCRE/8.43-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/LibTIFF/4.0.10-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/JasPer/2.0.14-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libjpeg-turbo/2.0.3-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/SQLite/3.29.0-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/Tcl/8.6.9-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/GEOS/3.8.0-GCC-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/expat/2.2.7-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/lib:/data/cigi/cjw-easybuild/easybuild/software/cURL/7.66.0-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/HDF5/1.10.5-gompi-2019b/lib:/data/cigi/cjw-easybuild/easybuild/software/Szip/2.1.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libreadline/8.0-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libpng/1.6.37-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/gettext/0.20.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/ncurses/6.1-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/bzip2/1.0.8-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/ScaLAPACK/2.0.2-gompi-2019b/lib:/data/cigi/cjw-easybuild/easybuild/software/FFTW/3.3.8-gompi-2019b/lib:/data/cigi/cjw-easybuild/easybuild/software/OpenBLAS/0.3.7-GCC-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/OpenMPI/3.1.4-GCC-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/hwloc/1.11.12-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libpciaccess/0.14-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/libxml2/2.9.9-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/XZ/5.2.4-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/numactl/2.0.12-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/binutils/2.32-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/zlib/1.2.11-GCCcore-8.3.0/lib:/data/cigi/cjw-easybuild/easybuild/software/GCCcore/8.3.0/lib64:/data/cigi/cjw-easybuild/easybuild/software/GCCcore/8.3.0/lib

You can also unload the software if you want to. module unload <x> with remove x package or you can use module purge to unload everything:

In [23]:
module purge
echo "Paths is $PATH"
echo "LD_LIBRARY_PATH is $LD_LIBRARY_PATH"
module load cjw/2021-09
Paths is /data/cigi/cjw-easybuild/conda/bash-2021-09/bin:/opt/conda/condabin:/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/jovyan/.local/bin
LD_LIBRARY_PATH is 

While this may seem complex, all of this is taken care of for the user because of that module load command in the "prepand_and_launch.sh" script that runs for each kernel! Next, we to answer what the cjw module is.

Metamodules

We understand that even many advanced users will be overwhelmed by the large number of software installed. To simplify things, we have put together what we are calling "metamodules" which are modules that load a set of modules that provide a complete compute environment. The current release uses the cjw/2021-09 module. To get some information on what that does, you can use the module show <module of interest command:

In [24]:
module show cjw/2021-09
----------------------------------------------------------------------------
   /data/cigi/cjw-easybuild/metamodules/cjw/2021-09.lua:
----------------------------------------------------------------------------
help([[
Description
===========
CyberGIS-Jupyter for Water environment. Bundles all of the required packages 
  for hydrological and geospatial data science.

]])
depends_on("GRASS/7.8.3-foss-2019b")
depends_on("RHESSysEastCoast/7.2.0-foss-2019b")
depends_on("SUMMA/3.0.3-foss-2019b")
depends_on("TauDEM/5.3.8-foss-2019b")
depends_on("WRF/4.2.1-foss-2019b-dmpar")
depends_on("WPS/4.2-foss-2019b-dmpar")
depends_on("find_inlets/20191210-foss-2019b")
depends_on("NCO/4.9.3-foss-2019b")
whatis("Name: cjw")
whatis("Version: ")
whatis("Category: hydro")
whatis("URL: https://cybergisxhub.cigi.illinois.edu/")
whatis("Description: Everything you need for hydrological research, in one package.")

The cjw/2021-09 module loads GRASS, MPICH, RHESSysEastCost, SUMMA, TauDEM, WRF, WPS, find_inlets, NCO and all of their dependencies. As you can see from the module list command, all of the necessary software is right there for you to use!

In [25]:
module list
Currently Loaded Modules:
  1) GCCcore/8.3.0                      42) x264/20190925-GCCcore-8.3.0
  2) zlib/1.2.11-GCCcore-8.3.0          43) LAME/3.100-GCCcore-8.3.0
  3) binutils/2.32-GCCcore-8.3.0        44) x265/3.2-GCCcore-8.3.0
  4) GCC/8.3.0                          45) util-linux/2.34-GCCcore-8.3.0
  5) numactl/2.0.12-GCCcore-8.3.0       46) fontconfig/2.13.1-GCCcore-8.3.0
  6) XZ/5.2.4-GCCcore-8.3.0             47) xorg-macros/1.19.2-GCCcore-8.3.0
  7) libxml2/2.9.9-GCCcore-8.3.0        48) X11/20190717-GCCcore-8.3.0
  8) libpciaccess/0.14-GCCcore-8.3.0    49) FriBidi/1.0.5-GCCcore-8.3.0
  9) hwloc/1.11.12-GCCcore-8.3.0        50) FFmpeg/4.2.1-GCCcore-8.3.0
 10) OpenMPI/3.1.4-GCC-8.3.0            51) pixman/0.38.4-GCCcore-8.3.0
 11) OpenBLAS/0.3.7-GCC-8.3.0           52) libffi/3.2.1-GCCcore-8.3.0
 12) gompi/2019b                        53) GLib/2.62.0-GCCcore-8.3.0
 13) FFTW/3.3.8-gompi-2019b             54) cairo/1.16.0-GCCcore-8.3.0
 14) ScaLAPACK/2.0.2-gompi-2019b        55) GMP/6.1.2-GCCcore-8.3.0
 15) foss/2019b                         56) nettle/3.5.1-GCCcore-8.3.0
 16) bzip2/1.0.8-GCCcore-8.3.0          57) libdrm/2.4.99-GCCcore-8.3.0
 17) ncurses/6.1-GCCcore-8.3.0          58) LLVM/9.0.0-GCCcore-8.3.0
 18) gettext/0.20.1-GCCcore-8.3.0       59) libunwind/1.3.1-GCCcore-8.3.0
 19) libpng/1.6.37-GCCcore-8.3.0        60) Mesa/19.1.7-GCCcore-8.3.0
 20) libreadline/8.0-GCCcore-8.3.0      61) libGLU/9.0.1-GCCcore-8.3.0
 21) Szip/2.1.1-GCCcore-8.3.0           62) gzip/1.10-GCCcore-8.3.0
 22) HDF5/1.10.5-gompi-2019b            63) lz4/1.9.2-GCCcore-8.3.0
 23) cURL/7.66.0-GCCcore-8.3.0          64) zstd/1.4.4-GCCcore-8.3.0
 24) netCDF/4.7.1-gompi-2019b           65) GRASS/7.8.3-foss-2019b
 25) expat/2.2.7-GCCcore-8.3.0          66) RHESSysEastCoast/7.2.0-foss-2019b
 26) GEOS/3.8.0-GCC-8.3.0               67) netCDF-Fortran/4.5.2-gompi-2019b
 27) Tcl/8.6.9-GCCcore-8.3.0            68) SUMMA/3.0.3-foss-2019b
 28) SQLite/3.29.0-GCCcore-8.3.0        69) TauDEM/5.3.8-foss-2019b
 29) NASM/2.14.02-GCCcore-8.3.0         70) WRF/4.2.1-foss-2019b-dmpar
 30) libjpeg-turbo/2.0.3-GCCcore-8.3.0  71) WPS/4.2-foss-2019b-dmpar
 31) JasPer/2.0.14-GCCcore-8.3.0        72) find_inlets/20191210-foss-2019b
 32) LibTIFF/4.0.10-GCCcore-8.3.0       73) UDUNITS/2.2.26-GCCcore-8.3.0
 33) PCRE/8.43-GCCcore-8.3.0            74) Java/11.0.2
 34) PROJ/6.2.1-GCCcore-8.3.0           75) ANTLR/2.7.7-GCCcore-8.3.0-Java-11
 35) libgeotiff/1.5.1-GCCcore-8.3.0     76) libdap/3.20.6-GCCcore-8.3.0
 36) libtirpc/1.2.6-GCCcore-8.3.0       77) GSL/2.6-GCC-8.3.0
 37) HDF/4.2.14-GCCcore-8.3.0           78) netCDF-C++4/4.3.1-gompi-2019b
 38) GDAL/3.0.2-foss-2019b              79) ESMF/8.0.0-foss-2019b
 39) FreeXL/1.0.5-GCCcore-8.3.0         80) NCO/4.9.3-foss-2019b
 40) libspatialite/4.3.0a-GCC-8.3.0     81) cjw/2021-09
 41) freetype/2.10.1-GCCcore-8.3.0

 

Since all of the software is already loaded for you, you can use the commands right here in the notebook:

In [26]:
# netcdf
nc-config --all
This netCDF 4.7.1 has been built with the following features: 

  --cc            -> /data/cigi/cjw-easybuild/easybuild/software/OpenMPI/3.1.4-GCC-8.3.0/bin/mpicc
  --cflags        -> -I/data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/include
  --libs          -> -L/data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/lib -lnetcdf
  --static        -> -lhdf5_hl -lhdf5 -lm -lz -lsz -lcurl

  --has-c++       -> no
  --cxx           -> 

  --has-c++4      -> yes
  --cxx4          -> g++
  --cxx4flags     -> -I/data/cigi/cjw-easybuild/easybuild/software/netCDF-C++4/4.3.1-gompi-2019b/include -I/data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/include
  --cxx4libs      -> -L/data/cigi/cjw-easybuild/easybuild/software/netCDF-C++4/4.3.1-gompi-2019b/lib -lnetcdf_c++4 -lnetcdf

  --has-fortran   -> yes
  --fc            -> mpifort
  --fflags        -> -I/data/cigi/cjw-easybuild/easybuild/software/netCDF-Fortran/4.5.2-gompi-2019b/include
  --flibs         -> -L/data/cigi/cjw-easybuild/easybuild/software/netCDF-Fortran/4.5.2-gompi-2019b/lib -lnetcdff -L/data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/lib64 -L/data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/lib -L/data/cigi/cjw-easybuild/easybuild/software/GCCcore/8.3.0/lib64 -L/data/cigi/cjw-easybuild/easybuild/software/GCCcore/8.3.0/lib -lnetcdf -lnetcdf -ldl -lm -lm -lpthread
  --has-f90       -> 
  --has-f03       -> yes

  --has-dap       -> yes
  --has-dap2      -> yes
  --has-dap4      -> yes
  --has-nc2       -> yes
  --has-nc4       -> yes
  --has-hdf5      -> yes
  --has-hdf4      -> no
  --has-logging   -> no
  --has-pnetcdf   -> no
  --has-szlib     -> no
  --has-cdf5      -> yes
  --has-parallel4 -> yes
  --has-parallel  -> yes

  --prefix        -> /data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b
  --includedir    -> /data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/include
  --libdir        -> /data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/lib
  --version       -> netCDF 4.7.1

In [27]:
# netcdf-fortran
nf-config --all
This netCDF-Fortran 4.5.2 has been built with the following features: 

  --cc        -> mpicc
  --cflags    ->  -I/data/cigi/cjw-easybuild/easybuild/software/netCDF-Fortran/4.5.2-gompi-2019b/include -I/data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/include -DgFortran

  --fc        -> mpifort
  --fflags    -> -I/data/cigi/cjw-easybuild/easybuild/software/netCDF-Fortran/4.5.2-gompi-2019b/include
  --flibs     -> -L/data/cigi/cjw-easybuild/easybuild/software/netCDF-Fortran/4.5.2-gompi-2019b/lib -lnetcdff -L/data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/lib64 -L/data/cigi/cjw-easybuild/easybuild/software/netCDF/4.7.1-gompi-2019b/lib -L/data/cigi/cjw-easybuild/easybuild/software/GCCcore/8.3.0/lib64 -L/data/cigi/cjw-easybuild/easybuild/software/GCCcore/8.3.0/lib -lnetcdf -lnetcdf -ldl -lm -lm -lpthread
  --has-f90   -> 
  --has-f03   -> yes

  --has-nc2   -> yes
  --has-nc4   -> yes

  --prefix    -> /data/cigi/cjw-easybuild/easybuild/software/netCDF-Fortran/4.5.2-gompi-2019b
  --includedir-> /data/cigi/cjw-easybuild/easybuild/software/netCDF-Fortran/4.5.2-gompi-2019b/include
  --version   -> netCDF-Fortran 4.5.2

In [28]:
# mpi
which mpirun
/data/cigi/cjw-easybuild/easybuild/software/OpenMPI/3.1.4-GCC-8.3.0/bin/mpirun
In [29]:
# summa
summa.exe --version
----------------------------------------------------------------------
     SUMMA - Structure for Unifying Multiple Modeling Alternatives    
                           Version: v3.0.3
               Build Time: Thu Aug 19 14:07:32 EDT 2021
                  Git Branch: tags/v3.0.3-0-g4ee457d
          Git Hash: 4ee457df3d3c0779696c6388c67962ba76736df9
----------------------------------------------------------------------
In [ ]: