Advanced Features

Development Build

If you plan on making changes to your installation of ISSM and/or contributions to the code base, you can enable development by adding the following to your configuration,

--enable-development

This prevents MATLAB/Python scripts from being copied from their respective locations in ${ISSM_DIR}/src to ${ISSM_DIR}/bin when ISSM is recompiled

Debugging Build

Debugging features can be enabled by adding the following to your ISSM configuration with,

--enable-debugging

This will make several additional fields available for inspecting program state in certain modules of the ISSM core.

We can debug crashes during the solve phase by installing Valgrind using the appropriate installation script available at ${ISSM_DIR}/externalpackages/valgrind.

See the ‘Debugging’ section for more info.

Dakota

The Dakota project delivers both state-of-the-art research and robust, usable software for optimization and UQ. Broadly, the Dakota software’s advanced parametric analyses enable design exploration, model calibration, risk analysis, and quantification of margins and uncertainty with computational models.

Dakota can be enabled by compiling and installing the following additional external packages,

Linux

gsl				install.sh
boost			install-1.7-linux.sh
dakota			install-6.2-linux.sh
chaco			install-linux.sh

macOS

gsl				install.sh
boost			install-1.7-mac.sh
dakota			install-6.2-mac.sh
chaco			install-mac.sh

and making the following additions to the ISSM configuration, reconfiguring, and recompiling,

--with-gsl-dir=${ISSM_DIR}/externalpackages/gsl/install \
--with-boost-dir=${ISSM_DIR}/externalpackages/boost/install \
--with-dakota-dir=${ISSM_DIR}/externalpackages/dakota/install \
--with-chaco-dir=${ISSM_DIR}/externalpackages/chaco/install

Solid Earth

Capabilities for modelling solid earth processes can be enabled by compiling and installing the following additional external packages,

Linux

curl			install-7-mac.sh
hdf5			install-1.sh
netcdf			install-4.sh
proj			install-6.sh
gdal			install-3.sh
gshhg			install.sh
gmt				install-6-mac.sh
gmsh			install-4-mac.sh

macOS

curl			install-7-linux.sh
hdf5			install-1.sh
netcdf			install-4.sh
proj			install-6.sh
gdal			install-3.sh
gshhg			install.sh
gmt				install-6-linux.sh
gmsh			install-4-linux.sh

and making the following additions to the ISSM configuration, reconfiguring, and recompiling,

--with-hdf5-dir="${ISSM_DIR}/externalpackages/hdf5/install" \
--with-proj-dir="${ISSM_DIR}/externalpackages/proj/install"

Important

If you will be using the Python interface to ISSM, use the install-3-python.sh script to compile GDAL.

Automatic Differentiation

Automatic differentiation is only supported under Linux and Mac.

CoDiPack can be enabled by compiling and installing the following additional external packages,

gsl				install.sh
codipack		install.sh
medipack		install-linux.sh

Note that the PETSc libraries are incompatible with automatic differentiation, but we still use PETSc to install other external packages to solve linear systems. As such, we remove the --with-petsc-dir option from the ISSM configuration. You will also need to deactivate ISSM’s kriging capability. The following is an example configuration script:

export CXXFLAGS="-g -O3 -fPIC -std=c++11 -DCODI_ForcedInlines"
./configure \
	--prefix=${ISSM_DIR} \
	--enable-tape-alloc \
	--without-kriging \
	--enable-debugging \
	--without-kml \
	--without-Love \
	--without-Sealevelchange \
	--with-numthreads=<NUM_CPUS> \
	--with-matlab-dir="<MATLAB_PATH>" \
	--with-fortran-lib="-L/usr/lib/x86_64-linux-gnu -lgfortran" \
	--with-mpi-libflags="-L${ISSM_DIR}/externalpackages/petsc/install/lib -lmpi -lmpicxx -lmpifort" \
	--with-mpi-include=${ISSM_DIR}/externalpackages/petsc/install/include \
	--with-blas-lapack-dir=${ISSM_DIR}/externalpackages/petsc/install \
	--with-metis-dir=${ISSM_DIR}/externalpackages/petsc/install \
	--with-parmetis-dir=${ISSM_DIR}/externalpackages/petsc/install \
	--with-scalapack-dir=${ISSM_DIR}/externalpackages/petsc/install \
	--with-mumps-dir=${ISSM_DIR}/externalpackages/petsc/install \
	--with-gsl-dir=${ISSM_DIR}/externalpackages/gsl/install \
	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
	--with-m1qn3-dir="$ISSM_DIR/externalpackages/m1qn3/install" \
	--with-codipack-dir="$ISSM_DIR/externalpackages/codipack/install" \
	--with-medipack-dir="$ISSM_DIR/externalpackages/medipack/install"

where <NUM_CPUS> is the number of available CPU’s.

Reconfigure and recompile ISSM and it will now be fully adjoinable.

ADOL-C installation

ADOL-C can be enabled by compiling and installing the following additional external packages,

Linux

adjoinablempi	install-linux.sh
ADOL-C			install.sh

macOS

adjoinablempi	install-mac.sh
adolc			install.sh

Note that the PETSc libraries are incompatible with automatic differentiation, but we still use PETSc to install other external packages to solve linear systems. As such, we remove the --with-petsc-dir option from the ISSM configuration. You will also need to deactivate ISSM’s kriging capability. The following is an example configuration script:

./configure \
	--prefix=${ISSM_DIR} \
	--enable-debugging \
	--without-kriging \
	--without-kml \
	--without-Sealevelchange \
	--without-Love \
	--with-numthreads=<NUM_CPUS> \
	--with-matlab-dir="<MATLAB_PATH>" \
	--with-fortran-lib="-L/usr/lib/x86_64-linux-gnu -lgfortran" \
	--with-mpi-libflags="-L${ISSM_DIR}/externalpackages/petsc/install/lib -lmpi -lmpicxx -lmpifort" \
	--with-mpi-include=${ISSM_DIR}/externalpackages/petsc/install/include \
	--with-blas-lapack-dir=${ISSM_DIR}/externalpackages/petsc/install \
	--with-metis-dir=${ISSM_DIR}/externalpackages/petsc/install \
	--with-parmetis-dir=${ISSM_DIR}/externalpackages/petsc/install \
	--with-scalapack-dir=${ISSM_DIR}/externalpackages/petsc/install \
	--with-mumps-dir=${ISSM_DIR}/externalpackages/petsc/install \
	--with-gsl-dir=${ISSM_DIR}/externalpackages/gsl/install \
	--with-triangle-dir=$ISSM_DIR/externalpackages/triangle/install \
	--with-m1qn3-dir="$ISSM_DIR/externalpackages/m1qn3/install" \
	--with-adolc-dir=$ISSM_DIR/externalpackages/adolc/install \
	--with-ampi-dir=$ISSM_DIR/externalpackages/adjoinablempi/install

where <NUM_CPUS> is the number of available CPU’s.

Reconfigure and recompile ISSM and it will now be fully adjoinable.