# Software Module Scheme

Since a HPC cluster is shared among many users, and also holds a
significant size in contrast to most desktop compute machinery around,
the amount of installed software spans many applications in many
different versions and quite a few of them are installed typically
non-standard places for easier maintenance (for admin crew), practical
and security reasons. It is not possible (nor desirable) to use them all
at the same time, since different versions of the same application may
conflict with each other. Therefore, it is practical to provide the
production environment for a given application outside of the
application itself. This is done using a set of instructions and
variable settings that are specific for the given application called an
application module. This also simplifies control of which application
versions are available in a specific session.

We are also using the Easybuild system for installing software on Star
(see <https://easybuilders.github.io/easybuild/>).

The main command for using this system is the *module* command. You can
find a list of all its options by typing:

    module --help

We use the lmod module system; for more info see
<https://lmod.readthedocs.io/en/latest/> on Star. Below we listed the
most commonly used options, but also feel free to ivestigate options in
this toolset more thoroughly on developers site.

## Which modules are currently loaded?

To see the modules currently active in your session, use the command:

    module list

  Which modules are available? ----------------------------

In order to see a complete list of available modules, issue the command:

    module avail

The resulting list will contain module names conforming to the following
pattern:

-   name of the module
-   /
-   version
-   (default) if default version

## How to load a module

In order to make, for instance, the NetCDF library available issue the
command:

    module load netCDF

This will load the default NetCDF version. To load a specific version,
just include the version after a slash:

    module load netCDF/4.3.3.1-intel-2016a

 

## How to unload a module

Keeping with the above example, use the following command to unload the
NetCDF module again:

    module unload netcdf

## Which version of a module is the default?

In order to see, for instance, which version of NetCDF is loaded by the
module, use:

    module show netcdf

This will show the version and path of the module.  

## How do I switch to a different version of a module?

Switching to another version is similar to loading a specific version.
As an example, if you want to switch from the default (current) Intel
compilers version to version 2016b (aka 2016.3), type:

    module switch intel intel/2016b

**Beware: by default on Star, you are not able to have two conflicting
modules - f.e. openmpi and impi - loaded at the same time.** This is
only partially true for these new packages. With the new packages it is
also more common that when you load one package it will automatically
load several other packages that it needs to function. We recommend
doing ml after every load and unloading any conflicting packages.
