Underworld on a 64 bit Opteron Fedora Core 5 Cluster

Underworld is a "3D-parallel geodynamic modelling framework capable of deriving viscous / viscoplastic thermal, chemical and thermochemical models consistent with tectonic processes, such as mantle convection and lithospheric deformation over long time scales.... Underworld utilises a Lagrangian particle-in-cell finite element scheme (the prototype of which is the Ellipsis code), and is visualised using gLucifer."

And, it's a bugger to install, especially on a cluster as venerable as Wexstan. It's done some good work over the years, but it's getting long in the tooth.

Start of with downloading the source file into /usr/local/underworld/; not that it is not downloaded into a src directory because it doesn't use autotools, rather it uses SCons (without butter, jam and cream). Untar the source (tar xvf underworld-1.2.0.tar.gz) and load the various module files that have been previously and painfully constructed:

module load petsc/2.3.3-openmpi-intel
module load pgi/7.2
module load python/2.5.1
module load intel/11.0
module load scons/0.97

Note that this doesn't have mesa or libframe; this will be a non-graphical installation. Some of this software is fairly old... Nevertheless run scons config and.... it fails.


...
Configuring package PETSc ... (cached)
Trialing candidate 80 of 80 ...
Found 0 valid configurations.
no

Hmmm.. This is a problem, especially given that is most definitely an installation of PETSc. OK, add in a command-line option;

scons config petsc_dir=/usr/local/petsc/2.3.3-p8/

There's a few errors but it does configure; now run scons to build (i.e., make) the project... and it works!

Now make a modulefile:


cd /usr/local/Modules/modulefiles
mkdir underworld
nano underworld/1.2.0

.. and enter the following:


#%Module1.0#####################################################################
##
## Underworld module
##

set ver [lrange [split [ module-info name ] / ] 1 1 ]
set name [lrange [split [ module-info name ] / ] 0 0 ]

set dir /usr/local/$name/$ver

proc ModulesHelp { } {
puts stderr "\tThis module sets the environment for $name $ver"
}

if { ![ is-loaded petsc/2.3.3-openmpi-intel ] } {
module load petsc/2.3.3-openmpi-intel
}