Third-party dependencies

GEOSX makes use of multiple third-party libraries (TPLs) and tools, some of which are mandatory and some optional. We only test against specific versions, and sometimes even require development snapshots (specific git commits). Not all of these guarantee backwards compatibility, so we strongly recommend building with these specific versions.

List of third-party libraries and tools

The two tables below lists the dependencies with their specific versions and relevant CMake variables. Some of these libraries may have their own system prerequisites.

Libraries

The following libraries are linked to by GEOSX:

Name Version Enable option Path variable Description
Adiak 0.2.0 ENABLE_CALIPER ADIAK_DIR Library for collecting metadata from HPC application runs, and distributing that metadata to subscriber tools.
Caliper 2.4.0 ENABLE_CALIPER CALIPER_DIR Instrumentation and performance profiling library.
conduit 0.5.0 mandatory CONDUIT_DIR Simplified Data Exchange for HPC Simulations.
CHAI 2.2.2 mandatory CHAI_DIR Copy-hiding array abstraction to automatically migrate data between memory spaces.
RAJA 0.12.1 mandatory RAJA_DIR Collection of C++ software abstractions that enable architecture portability for HPC applications.
hdf5 1.10.5 mandatory HDF5_DIR High-performance data management and storage suite.
mathpresso 2015-12-15 ENABLE_MATHPRESSO MATHPRESSO_DIR Mathematical Expression Parser and JIT Compiler.
pugixml 1.8.0 mandatory PUGIXML_DIR Light-weight, simple and fast XML parser for C++ with XPath support.
parmetis 4.0.3 mandatory (with MPI) PARMETIS_DIR Parallel Graph Partitioning library. Should be built with 64-bit idx_t type.
suitesparse 5.8.1 ENABLE_SUITESPARSE SUITESPARSE_DIR A suite of sparse matrix software.
superlu_dist 0f6efc3 ENABLE_SUPERLU_DIST SUPERLU_DIST_DIR General purpose library for the direct solution of large, sparse, nonsymmetric systems of linear equations.
hypre 2186a8f ENABLE_HYPRE HYPRE_DIR Library of high performance preconditioners and solvers for large sparse linear systems on massively parallel computers.
PETSc 3.13.0 ENABLE_PETSC PETSC_DIR Suite of data structures and routines for the scalable (parallel) solution of scientific applications.
Trilinos 12.18.1 ENABLE_TRILINOS TRILINOS_DIR Collection of reusable scientific software libraries, known in particular for linear solvers.
silo 4.10.3 mandatory SILO_DIR A Mesh and Field I/O Library and Scientific Database.
VTK 9.0.0-rc3 ENABLE_VTK VTK_DIR Open source software for manipulating and displaying scientific data.

Tools

The following tools are used as part of the build process to support GEOSX development:

Name Version Enable option Path variable Description
doxygen 1.8.20 ENABLE_DOXYGEN DOXYGEN_EXECUTABLE De facto standard tool for generating documentation from annotated C++ sources.
sphinx 1.8.5 ENABLE_SPHINX SPHINX_EXECUTABLE A tool that makes it easy to create intelligent and beautiful documentation.
uncrustify 401a409 ENABLE_UNCRUSTIFY UNCRUSTIFY_EXECUTABLE A source code beautifier for C, C++, C#, ObjectiveC, D, Java, Pawn and VALA.

Some other dependencies (GoogleTest, GoogleBenchmark) are provided through BLT build system which is embedded in GEOSX source. No actions are needed to build them.

If you would like to create a Docker image with all dependencies, take a look at Dockerfiles that are used in our CI process.

Building bundled dependencies

To simplify the process of building TPLs, we provide a git repository thirdPartyLibs. It contains source copies of exact TPL versions required and is updated periodically. It also contains a CMake script for building all TPLs in a single command.

The recommended steps to build TPLs are:

  • Create a host-config file that sets all system-specific CMake variables (compiler and library paths, configuration flags, etc.) Take a look at host-config examples.

  • Configure via config-build.py script:

    cd thirdPartyLibs
    python scripts/config-build.py --hostconfig=/path/to/host-config.cmake --buildtype=Release --installpath=/path/to/install/dir -DNUM_PROC=8
    

    where

    • --buildpath or -bp is the build directory (by default, created under current).
    • --installpath or -ip is the installation directory(wraps CMAKE_INSTALL_PREFIX).
    • --buildtype or -bt is a wrapper to the CMAKE_BUILD_TYPE option.
    • --hostconfig or -hc is a path to host-config file.
    • all other command-line options are passed to CMake.
  • Run the build:

    cd <buildpath>
    make
    

    Warning

    Do not provide -j argument to make here, since the top-level make only launches sub-project builds. Instead use -DNUM_PROC option above, which is passed to each sub-project’s make command.

You may also run the CMake configure step manually instead of relying on config-build.py. The full TPL build may take anywhere between 15 minutes and 2 hours, depending on your machine, number of threads and libraries enabled.

Note

An exception from the above pattern, sphinx is currently not a part of the TPL bundle and must be installed with your Python or package manager.

Note

PETSc build currently downloads pt-scotch from the internet. If you do not have access to internet, modify the ./configure step of petsc in CMakeLists.txt and change the --download-ptscotch option accordingly. pt-scotch also relies on bison and flex.

Installing dependencies individually

You may also install each individual TPL separately, either manually or through a package manager. This is a more difficult route, since you are responsible for configuring dependencies in a compatible manner. Again, we strongly recommend using the exact versions listed above, to avoid possible build problems.

You may look at our TPL CMake script to see how we configure TPL builds.