SMOKE Installation Notes
Cluster 1 Installation
System updates
sudo yum install m4
Install Intel Compiler. Two components: One API Base Toolkit & One API HPC Toolkit
Libraries
IOAPI
Download the latest I/O API library from the CMAS Center, untar in the desired location
Go to the source code location, copy the makefile template, and set environment variables to compile for your system (e.g., Intel fortran):
tar xvzf 20200828.tar.gz cd ioapi-3.2-20200828/ioapi cp Makefile.nocpl Makefile setenv BIN Linux2_x86_64ifort mkdir /t10/apps/IOAPI/ioapi-3.2-20200828/$BIN make
A couple of notes:
- Edit the Makefile to set the installation directory BASEDIR
- You need to manually create the output directory because this feature isn't working in the I/O API install package
NetCDF
Use netCDF C version 4.6.1 and Fortran version 4.2 (tar files available here: /t5/apps/NETCDF)
First untar and compile the C version of netCDF
tar xvzf netcdf-4.6.1.tar.gz cd netcdf-4.6.1 setenv C_NCF_OUT /t10/apps/NETCDF/netcdf-4.6.1/Linux2_x86_64ifort_v2021.4.0 setenv CC icc setenv FC ifort ./configure --prefix $C_NCF_OUT --disable-netcdf-4 --disable-dap make make install
Then compile the Fortran version of netCDF
tar xvzf netcdf-fortran-4.2.tar.gz cd netcdf-fortran-4.2 setenv F_NCF_OUT /t10/apps/NETCDF/netcdf-fortran-4.2/Linux2_x86_64ifort_v2021.4.0 setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${C_NCF_OUT}/lib setenv CPPFLAGS -I${C_NCF_OUT}/include setenv LDFLAGS -L${C_NCF_OUT}/lib ./configure --prefix $F_NCF_OUT make make install
Compile SMOKE
Download and install the source code per the instructions in the SMOKE manual.
Link the I/O API installation directory where SMOKE expects to see it
cd /t10/apps/SMOKE/SMOKEv4.8.1/subsys ln -s /t10/apps/IOAPI/ioapi-3.2-20200828 ioapi
Link in the netCDF libraries into the I/O API library directory (this is what SMOKE expects)
cd /t10/apps/SMOKE/SMOKEv4.8.1/subsys/ioapi/Linux2_x86_64ifort ln -s /t10/apps/NETCDF/netcdf-4.6.1/Linux2_x86_64ifort_v2021.4.0/lib/libnetcdf.a . ln -s /t10/apps/NETCDF/netcdf-fortran-4.2/Linux2_x86_64ifort_v2021.4.0/lib/libnetcdff.a .
Configure the SMOKE Makeinclude file
cd /t10/apps/SMOKE/SMOKEv4.8.1/subsys/smoke/src vi Makeinclude
Add these two lines to the file, right before the BASEDIR setting:
SMK_HOME = /t10/apps/SMOKE/SMOKEv4.8.1 BIN = Linux2_x86_64ifort
Compile using the Makefile in the same directory
make |& tee make.cluster1.log
Note: the intel compiler didn't like the syntax in one of the include files of the 20200828 version of the I/O API
vi /t10/apps/SMOKE/SMOKEv4.8.1/ioapi/ioapi/fixed_src/PARMS3.EXT ! Original code, comment out these lines ! INTEGER, PARAMETER :: M3TYPES( NM3TYPES ) = & ! & (/ M3INT, M3REAL, M3DBLE, M3INT8 /) ! Add the following line INTEGER, PARAMETER :: M3TYPES( NM3TYPES ) = (/ M3INT, M3REAL, M3DBLE, M3INT8 /)