Using modules
The Roar software environment is split into two parts: preloaded software (available immediately upon login) and modular software (which must be explicitly loaded).
To manage conflicts that arise from different applications requiring different versions of libraries, Roar uses the Lmod Environment Module System.
Finding software
Check for existing software
Before using a module, check if the software is already available or if it needs to be loaded.
Check for preloaded applications
Use the which command. If the application is on your $PATH, which
will return the full path to the executable.
which <appName>
Search available modules
If which doesn't find the application, use module spider to search
all available modules, including those that are currently hidden due to
environment constraints.
module spider <moduleName>
Software list on portal
Once logged into the Portal, a searchable list of available software can be found by selecting the "Available Modules" from the "Clusters" menu.

Module commands
These commands are the core of interacting with Lmod.
| Command | Action | Example |
|---|---|---|
module avail |
Lists all modules immediately available to load based on your current environment. | module avail |
module spider <name> |
Searches for all modules, even those currently hidden. Use this to find a module's name or version. | module spider R |
module load <name> |
Loads the default version of the module. | module load python |
module load <name>/<version> |
Loads a specific version of the software. Always specify versions in production scripts! | module load python/3.10.4 |
module unload <name> |
Removes the software and its environment settings. | module unload python |
module list |
Shows all modules currently loaded in your session. | module list |
module purge |
Unloads all currently loaded modules, returning you to a minimal base environment. | module purge |
module show <name> |
Displays environment variables, paths, and changes the module file executes upon loading. | module show hdf5 |
Identifying default versions
When you run module avail <name> or module spider <name>, the
default version for a module is often indicated by a special marker
(like (D), (default), or a star *).
$ module avail python
python/3.8.12
python/3.9.7
python/3.10.4 (D) <-- This is the default
Running module load python will load version 3.10.4.
Changing default software stack
In January 2026, ICDS implemented a new software stack based on the Spack package manager. This may cause changes in the dependent version loaded or implentation of a new instalation for existing versions.
To force usage of the old stack, you can unload the new stack with the command:
module unuse /storage/icds/sw8/modulefiles/Core
Advanced module concepts
Compilers and Dependencies
Understanding compiler and dependency relationships is crucial for stability and reproducibility.
Compiler and dependency control
Many scientific applications (like MPI, HDF5, or specific libraries) are
compiled against a specific base compiler (e.g., GCC, Intel, AOCC).\
If an application requires gcc/11.2.0, you must load that compiler
module first.
When using module spider, it will often inform you about dependencies,
guiding you to the correct module sequence.
Here's an example of a compile dependency being loaded before the desired application:
module load gcc/11.2.0 # 1. Load the required compiler
module load openmpi/4.1.3 # 2. Load the application/library built with that compiler
Version control
Always specify the full module name and version (e.g., hdf5/1.13.1-gcc-11.2.0).
Loading a module without a version (e.g., module load hdf5) loads the
current default. The default version can change over time due to system upgrades.
Consistent Module Use
Specifying the version ensures your job runs consistently and reproducibly.
Tips for batch scripts
Batch jobs are highly sensitive to their environment. Follow these best practices to ensure reliable execution:
- Use
module purgefirst. Start your script with a clean environment to prevent conflicts by using the commandmodule purge - Load only what is necessary. Avoid unnecessary modules to reduce conflicts and startup delays.
- Specify full versions. Always use the
<name>/<version>syntax to help ensure reproducibility, such asmodule load python/3.9.7instead ofmodule load python
Here's an example of a robust batch script using the tips outlined above:
#!/bin/bash
#SBATCH --job-name=MyMPIJob
#SBATCH --nodes=4
# 1. Start with a clean slate
module purge
# 2. Load dependencies explicitly
module load gcc/11.2.0
module load openmpi/4.1.3
# 3. Execute the job
srun ./my_parallel_executable
Avoid loading modules in .bashrc
Automatically loading modules in your ~/.bashrc can cause errors and software conflicts
on HPC systems, including inhibiting login altogether. Always be cautious when making
modifications to your configuration files.