Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Nalu is a Low-Mach Number turbulent flow simulator for energy applications.    

This note post describes the steps followed to build it on Thor, a Linux cluster with Intel Xeon (Broadwell) processor and Mellanox EDR InfiniBand interconnect.

...


Table of Contents

References 


Installation

First, consult the base document at http://nalu.readthedocs.io/en/latest/source/user/build_manually.html, specifically following document , specifically the Linux section. The  

Note that the two subsections with heading Nalu Releases aren't especially clear, but the build will work if one follows the directions for "Head Code Base".  Many packages need to be built before one has a working Nalu executable.


1. Set up the build environment

...


...

a. Load the compiler and HPC-X modules you wish to use

Code Block
module load intel/compiler/2017.4.196 hpcx-1.9/icc-2017

...


export CC=icc

...


export CXX=icpc

...


export FC=ifort

...


export F90=ifort

...


export F77=ifort

...


export OMPI_CC=icc

...


export OMPI_CXX=icpc

...


export OMPI_FC=ifort

...


export OMPI_F77=ifort

...


b.  Replace the path that follows with whatever is appropriate for you

Code Block
cd /mnt/beegfs3/gerardo/nrel_esif/Nalu/

...


mkdir build

...


cd build

...


export nalu_build_dir=$PWD

...


mkdir $nalu_build_dir/packages

...


mkdir $nalu_build_dir/install

...


mkdir $nalu_build_dir/install/lib

...


cd $nalu_build_dir/packages

...


export nalu_install_dir=$nalu_build_dir/install


2. Install

...

CMake 


Code Block
wget http://www.cmake.org/files/v3.1/cmake-3.1.0-rc2.tar.gz

...


tar zxvf cmake-3.1.0-rc2.tar.gz

...


cd cmake-3.1.0-rc2/

...


./configure --prefix=$nalu_build_dir/install

...


make

...


make install

...



Make sure your newly-built CMake can be found


Code Block
export PATH=/mnt/beegfs3/gerardo/nrel_esif/Nalu/build/install/bin:$PATH


3. Install SuperLU

...

Code Block
cd $nalu_build_dir/packages

...


wget http://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_4.3.tar.gz

...


tar zxvf superlu_4.3.tar.gz

...


cd $nalu_build_dir/packages/SuperLU_4.3

...


cp MAKE_INC/make.linux make.inc

...


Edit make.inc so that the following macros are defined as indicated:

Code Block
# PLAT = _x86_64

...


# SuperLUroot = /mnt/beegfs3/gerardo/nrel_esif/Nalu/build/packages/SuperLU_4.3

...


# BLASLIB = -L/opt/intel/compilers_and_libraries_2017.4.196/linux/mkl/lib/intel64 -lmkl_blas95_lp64 -lmkl_core -lmkl_rt -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_avx2 -liomp5

...


# CC = mpicc

...


# FORTRAN = mpif77


Create directory and make 

Code Block
mkdir $nalu_build_dir/install/SuperLU_4.3

...


mkdir $nalu_build_dir/install/SuperLU_4.3/lib

...


mkdir $nalu_build_dir/install/SuperLU_4.3/include

...


make

...


cp SRC/*.h $nalu_build_dir/install/SuperLU_4.3/include

...


Note: The following copy step is missing from the directions in the base document, it will trip you up if not done.

Code Block
cp -p lib/libsuperlu_4.3.a $nalu_build_dir/install/SuperLU_4.3/lib


4. Install

...

libml2

Code Block
cd $nalu_build_dir/packages

...


wget http://www.xmlsoft.org/sources/libxml2-2.9.2.tar.gz

...


tar zxvf libxml2-2.9.2.tar.gz

...


cd $nalu_build_dir/packages/libxml2-2.9.2

...


CC=mpicc CXX=mpicxx ./configure -without-python --prefix=$nalu_build_dir/install

...


make -k install



5. Install Boost

...

Code Block
cd $nalu_build_dir/packages

...


wget http://iweb.dl.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.gz

...


tar zxvf boost_1_55_0.tar.gz

...


cd $nalu_build_dir/packages/boost_1_55_0

...


echo "using mpi : `which mpicxx` ;" >> ./tools/build/v2/user-config.jam

...


./bootstrap.sh --prefix=$nalu_build_dir/install --with-libraries=signals,regex,filesystem,system,mpi,serialization,thread,program_options,exception

...


./b2 -j 4 2>&1 | tee boost_build_one

...


./b2 -j 4 install 2>&1 | tee boost_build_instal


6. Install

...

Yaml 

Code Block
cd $nalu_build_dir/packages

...


git clone https://github.com/jbeder/yaml-cpp

...


cd $nalu_build_dir/packages/yaml-cpp

...


mkdir build

...


cd build

...


cmake -DCMAKE_CXX_COMPILER=mpicxx -DCMAKE_CXX_FLAGS=-std=c++11 -DCMAKE_CC_COMPILER=mpicc -DCMAKE_INSTALL_PREFIX=$nalu_build_dir/install ..

...


make

...


make install


7. Install

...

Zlib 

Note that the base document above calls for downloading http://zlib.net/zlib-1.2.8.tar.gz, which is no longer available

Code Block
cd $nalu_build_dir/packages
wget http://zlib.net/zlib-1.2.11.tar.gz

...


tar zxvf zlib-1.2.11.tar.gz

...


cd $nalu_build_dir/packages/zlib-1.2.11

...


## CC=gcc CXX=g++ CFLAGS=-O3 CXXFLAGS=-O3 ./configure --prefix=$nalu_build_dir/install/

...


CC=icc CXX=icpc CFLAGS=-O3 CXXFLAGS=-O3 ./configure --prefix=$nalu_build_dir/install/

...


make

...


make install


8. Install

...

HDFS5


Note that the URL provided in the base document above, http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.12/src/hdf5-1.8.12.tar.gz changed.

Code Block
cd $nalu_build_dir/packages/
wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8/hdf5-1.8.12/src/hdf5-1.8.12.tar.gz

...


tar zxvf hdf5-1.8.12.tar.gz

...


cd $nalu_build_dir/packages/hdf5-1.8.12

...


./configure CC=mpicc FC=mpif90 CXX=mpicxx CXXFLAGS="-fPIC -O3" CFLAGS="-fPIC -O3" FCFLAGS="-fPIC -O3" --enable-parallel --with-zlib=$nalu_build_dir/install --prefix=$nalu_build_dir/install

...


make

...


make install

...


make check


9. Install Parallel

...

NetCDF 

Code Block
cd $nalu_build_dir/packages/

...


wget http://cucis.ece.northwestern.edu/projects/PnetCDF/Release/parallel-netcdf-1.6.1.tar.gz

...


tar zxvf parallel-netcdf-1.6.1.tar.gz

...


cd parallel-netcdf-1.6.1

...


./configure --prefix=$nalu_install_dir CC=mpicc FC=mpif90 CXX=mpicxx CFLAGS="-I$nalu_install_dir/include -O3" LDFLAGS=-L$nalu_install_dir/lib --disable-fortran

...


make

...


make install


10. Install NetCDF

...

Code Block
cd $nalu_build_dir/packages/

...


curl -o netcdf-c-4.3.3.1.tar.gz https://codeload.github.com/Unidata/netcdf-c/tar.gz/v4.3.3.1

...


tar zxvf netcdf-c-4.3.3.1.tar.gz

...


cd netcdf-c-4.3.3.1

...


./configure --prefix=$nalu_install_dir CC=mpicc FC=mpif90 CXX=mpicxx CFLAGS="-I$nalu_install_dir/include -O3" LDFLAGS=-L$nalu_install_dir/lib --enable-pnetcdf --enable-parallel-tests --enable-netcdf-4 --disable-shared --disable-fsync --disable-cdmremote --disable-dap --disable-doxygen --disable-v2

...


make -j 4

...


make install

...


make check

...

Trilinos (this is the most time-consuming step)

...


11. Install Trilinos 

Note that this step takes a lot of time.

Code Block
cd $nalu_build_dir/packages/

...


git clone https://github.com/trilinos/Trilinos.git

...


cd Trilinos/

...


Use the "Head Code Base"

Code Block
mkdir build

...


curl -o $nalu_build_dir/packages/Trilinos/build/do-configTrilinos_release https://raw.githubusercontent.com/NaluCFD/Nalu/master/build/do-configTrilinos_release

...


cd build

...


Edit do-

...

configTrilinos_release to provide the MPI base dir & the Nalu build dir; in this example:

Code Block
## mpi_base_dir=/opt/hpcx-1.9/ompi-v2.x.i2017

...


## nalu_build_dir=/mnt/beegfs3/gerardo/nrel_esif/Nalu/build

...


## In addition, F\fix -DBoost_INCLUDE_DIRS and -DBoost_LIBRARY_DIRS, i.e., add the following lines:

...


## -DBoost_INCLUDE_DIRS=$boost_dir/include \

...


## -DBoost_LIBRARY_DIRS=$boost_dir/lib \


Change mode and install 

Code Block
chmod +x do-configTrilinos_release

...


./do-configTrilinos_release

...


make

...


Go do something else, the above 'make' takes several hours

Code Block
make install


12. Install Nalu

...

Code Block
cd $nalu_build_dir/packages/

...


git clone https://github.com/NaluCFD/Nalu.git

...


cd Nalu/build/

...


cp do-configNalu_release do-configNaluNonTracked

...


Edit do-

...

configNaluNonTracked to adjust the nalu_build_dir path

Code Block
./do-configNaluNonTracked

...


make

...


This make takes another 70 minutes or so.  When complete, you will have a NaluX executable under $nalu_build_dir/packages/Nalu/build


Usage

Nalu was supplied with two datasets: abl_3km_256 and abl_3km_512.  Running Nalu on 768 cores (24 nodes having 32 cores each) takes about 1 hour for the small (abl_3km_256) dataset; 10 times as much for the large dataset.  Here is a Slurm script used to test Nalu with the small dataset:

Code Block
#!/bin/bash
#SBATCH -N 24
#SBATCH -o  nalu_256-24n-%j.out
#SBATCH --tasks-per-node=32
#SBATCH -J Nalu256
#SBATCH -p pthor
#SBATCH -t 06:00:00
#SBATCH --exclusive
#SBATCH -d singleton

## Load any modules required here
module load intel/compiler/2017.4.196 hpcx-1.9/icc-2017

NODES=$SLURM_NNODES
NPROC=$SLURM_NPROCS
export OMP_NUM_THREADS=1

MPI=ompi

LOG=${NPROC}-${MPI}-plain-mbn-$SLURM_JOB_ID

MPIFLAGS=""
MPIFLAGS+="--map-by node --rank-by core "
MPIFLAGS+="-report-bindings --display-map "
MPIFLAGS+="-mca btl_sm_use_knem 1 "

## ulimit -s 10485760
ulimit -s unlimited

echo Running on host `hostname`
echo Time is `date`
echo Directory is `pwd`

echo '----------------------------------------------------'
echo ' NODES USED = '$SLURM_NODELIST
echo ' SLURM_JOB_ID = '$SLURM_JOB_ID
echo ' CORES = '$NPROC
echo '----------------------------------------------------'

EXE=/mnt/beegfs3/gerardo/nrel_esif/Nalu/build/install/bin/naluX
echo "ldd $EXE"
ldd $EXE

echo "Launch command: /usr/bin/time -p mpirun -np ${NPROC} $MPIFLAGS $EXE -i abl_3km_256.i -o abl_3km_256_${NPROC}.log"
/usr/bin/time -p mpirun -np ${NPROC} $MPIFLAGS $EXE -i abl_3km_256.i -o abl_3km_256_${NPROC}.log
mv abl_3km_256_${NPROC}.log abl_3km_256_${LOG}