NEMO 4.2 + XIOS 2.5

Tested with

  • gcc8.3.0 on a computer cluster (HPC3, with in-built parallel HDF5 and NetCDF4)

The new official page is here and here. Following the instruction there largely works; below details minor things I needed to fix on the particular machine I tested on.

XIOS 2.5 (svn v2462)

According to the NEMO install guide we should use the trunk of XIOS, so

svn co http://forge.ipsl.jussieu.fr/ioserver/svn/XIOS/trunk

(the version I happen to get is v2462). Previously I had issues with newer GCC versions that seems to have been circumvented somehow, and XIOS builds with adding -D_GLIBCXX_USE_CXX11_ABI=0 and -std=c++11 to the BASE_CFLAGS.

# arch-HKUST_HPC3.fcm

################################################################################
###################                Projet XIOS               ###################
################################################################################

%CCOMPILER      mpicc                # CHANGE ME
%FCOMPILER      mpif90               # CHANGE ME
%LINKER         mpif90               # CHANGE ME

%BASE_CFLAGS    -ansi -w -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++11
%PROD_CFLAGS    -O3 -DBOOST_DISABLE_ASSERTS
%DEV_CFLAGS     -g -O2
%DEBUG_CFLAGS   -g

%BASE_FFLAGS    -D__NONE__ -ffree-line-length-none
%PROD_FFLAGS    -O3
%DEV_FFLAGS     -g -O2
%DEBUG_FFLAGS   -g

%BASE_INC       -D__NONE__
%BASE_LD        -lstdc++

%CPP            cpp                             # CHANGE ME
%FPP            cpp -P                          # CHANGE ME
%MAKE           make

On HPC3 the various NetCDF4 folders are build and dumped in separate folders, so something needed to be done to the env and path variable entries, as follows (making sure to load the modules accordingly):

# arch-HKUST_HPC3.path

NETCDF_INCDIR="-I $NETCDF_INC_DIR -I $NETCDFF_INC_DIR"
NETCDF_LIBDIR="-L $NETCDF_LIB_DIR -L $NETCDFF_LIB_DIR"
NETCDF_LIB="-lnetcdff -lnetcdf"

HDF5_INCDIR="-I $HDF5_INC_DIR"
HDF5_LIBDIR="-L $HDF5_LIB_DIR"
HDF5_LIB="-lhdf5_hl -lhdf5 -lhdf5 -lz"
# arch-HKUST_HPC3.env

export HDF5_INC_DIR=/opt/ohpc/pub/libs/gnu8/openmpi3/hdf5/1.10.5/include
export HDF5_LIB_DIR=/opt/ohpc/pub/libs/gnu8/openmpi3/hdf5/1.10.5/lib

export NETCDF_INC_DIR=/opt/ohpc/pub/libs/gnu8/openmpi3/netcdf/4.7.1/include
export NETCDF_LIB_DIR=/opt/ohpc/pub/libs/gnu8/openmpi3/netcdf/4.7.1/lib

export NETCDFF_INC_DIR=/opt/ohpc/pub/libs/gnu8/openmpi3/netcdf-fortran/4.5.2/include
export NETCDFF_LIB_DIR=/opt/ohpc/pub/libs/gnu8/openmpi3/netcdf-fortran/4.5.2/lib

I went into bld.cfg, found the line

bld::tool::cflags    %CFLAGS %CBASE_INC -I${PWD}/extern/src_netcdf -I${PWD}/extern/boost/include -I${PWD}/extern/rapidxml/include -I${PWD}/extern/blitz/include

and changed src_netcdf to src_netcdf4 (see XIOS1.0 stuff for the reason). Then compile as usual:

cd ../
./make_xios --full --prod --arch GCC_local -j2 |& tee compile_log.txt

NEMO 4.2 (Git SHA 216c746957a674552de5bf02c17d22fa37f2a0d4)

NEMO is as of writing no longer using SVN, and managing code through Git instead. So I downloaded it by

git clone https://forge.nemo-ocean.eu/nemo/nemo.git nemo_4.2.0

I downloaded the whole thing and then looked to switch branches. To get only the official release, add the flag -b 4.2.0 (or download the whole thing and then switch using git switch --detach 4.2.0). After some trial and error I basically did

# arch-HKUST_HPC3.fcm

%XIOS_HOME           /scratch/PI/jclmak/XIOS_mpi/xios-2.5-r2462

%CPP                 cpp
%CPPFLAGS            -P -traditional

%XIOS_INC            -I%XIOS_HOME/inc
%XIOS_LIB            -L%XIOS_HOME/lib -lxios

%NCDF_INC            -I/opt/ohpc/pub/libs/gnu8/openmpi3/netcdf-fortran/4.5.2/include -I/opt/ohpc/pub/libs/gnu8/openmpi3/netcdf/4.7.1/include
%NCDF_LIB            -L/opt/ohpc/pub/libs/gnu8/openmpi3/netcdf/4.7.1/lib -L/opt/ohpc/pub/libs/gnu8/openmpi3/netcdf-fortran/4.5.2/lib -lnetcdf -lnetcdff -lstdc++
%FC                  mpif90
%FCFLAGS             -fdefault-real-8 -O3 -funroll-all-loops -fcray-pointer -cpp -ffree-line-length-none
%FFLAGS              %FCFLAGS
%LD                  %FC
%LDFLAGS
%FPPFLAGS            -P -C -traditional
%AR                  ar
%ARFLAGS             -rs
%MK                  make
%USER_INC            %XIOS_INC %NCDF_INC
%USER_LIB            %XIOS_LIB %NCDF_LIB

and everything built fine. The tricky bit was the combination of module loads, and I went one step further and brute force pointed to the relevant include and lib folders.

Note

I had some issues with using older compilers and/or OpenMPI. XIOS will compile fine, but when compiling NEMO experiments will lead to something like

There is no specific subroutine for the generic 'mpi_dist_graph_create_adjacent'

Hence the new test compile with newer compilers (because this was the one that already interfaces with the newer OpenMPI3).

The usage is as in NEMO 4.0.

Note

The zenodo repository when I went to check (ORCA2_ICE_v4.2.tar) for the inputs when testing ORCA2 was missing stuff (e.g. iwd, internal wave dissipation probably), so I just went into namelist_cfg and switched it off, and it run as usual.