This is a technical note on how to build and execute FVCOM 4.3 in parallel mode using Intel compilers on CHESS lab HPC at Hiroshima University. Suppose the source code exists in fvcom43/FVCOM_source
, and fvcom43/Examples/Estuary
is a selected test case.
Preparation for METIS
METIS library requires to be installed for building for MPI. First check the mpi-selector-menu, then select the mvapich-1.2.0 in the options:
$ mpi-selector-menu
Environmental variables for Intel C compiler should be made as follows:
exportCC=icc exportCC=icc export CPP="icc -E"
Move to the directory of fvcom43/METIS_source
where the METIS
source code exists and extracts the source codes:
$ tar xf metis.tgz $ cd metis
Open makefile
and edit the MOPT
at line 12 as follows:
MOPT = -O3 -no-prec-div -fp-model fast=2 -xHost
The above option of MOPT
is the recommended value by the vendor. This makefile
should read make.inc
in fvcom43/FVCOM_source
that was prepared for Series
where FLAGs
do not matter. For this purpose, include
in this makefile
should be corrected as follows:
include ../../FVCOM_source/make.inc
Edit make.inc
The file of make.inc
for Series
created in (here) requires slight modification for FLAG_4
and PARLIB
as follows:
FLAG_1 = -DDOUBLE_PRECISION
FLAG_3 = -DWET_DRY
FLAG_4 = -DMULTIPROCESSOR
PARLIB = -lmetis #-L/usr/local/lib -lmetis
FLAG_8 = -DLIMITED_NO
FLAG_10 = -DGCN
FLAG_14 = -DRIVER_FLOAT
Then comment out the setting for Intel compiler for Series
in make.inc
and edit for Intel MPI
as follows:
#-------------------------------------------------------------------------- # Intel/MPI Compiler Definitions (CHESS lab HPC) #-------------------------------------------------------------------------- CPP = icc -E COMPILER = -DIFORT CC = mpiicc CXX = mpiicpc CFLAGS = -O3 -no-prec-div -fp-model fast=2 -xHost FC = mpiifort DEBFLGS = #-check all -traceback OPT = -O3 -no-prec-div -fp-model fast=2 -xHost #--------------------------------------------------------------------------
This setting is for FLAT MPI
and the option is the recommended values by the vendor.
Building METIS
To build METIS
, just make install
in the source directory.
$ make install
makefile for building FVCOM4.3
In building for Series
, mod_esmf_nesting.F
was deleted in makefile
to avoid link errors. In building for MPI
, this modified makefile is valid while the original one is also no problem.
Remove the line mod_esmf_nesting.o: ...
in the makedepends
file if not done yet.
Minor correction of a source file (FVCOM4.1)
Similarly in the case of Series
introduced here, the comments at line 131 of wreal.F
should be deleted to avoid warning during compilation:
# endif !!ice_embedding yding
In FVCOM4.3, the line 131 is modified already and it does not need to correct it.
Build FVCOM4.3 for MPI
In the directory of FVCOM_source
, build FVCOM4.3
for MPI
as follows:
$ make
Taking some time and the executable file of fvcom
should be created.
Compilation error
mod_par.o: In function 'mod_par_mp_add_to_mpi_type_': mod_par.f90:(.text+0x67): undefined reference to
'mpi_type_get_extent_' mod_par.o: In function 'mod_par_mp_create_mpi_time_': mod_par.f90:(.text+0x282): undefined reference to
'mpi_type_get_extent_' mod_par.o: In function 'mod_par_mp_init_mpi_env_': mod_par.f90:(.text+0x58061): undefined reference to
'mpi_type_get_extent_' /usr/local/mvapich-1.2.0_intel-11.1.080/lib/libmpich.a(viainit.o): In functionMPID_VIA_Finalize': viainit.c:(.text+0x44b): undefined reference to
'ibv_close_xrc_domain' /usr/local/mvapich-1.2.0_intel-11.1.080/lib/libmpich.a(viainit.o): In functionMPID_VIA_Init': viainit.c:(.text+0x2b9e): undefined reference to
'ibv_open_xrc_domain' /usr/local/mvapich-1.2.0_intel-11.1.080/lib/libmpich.a(viapriv.o): In functioncreate_srq': viapriv.c:(.text+0xc8): undefined reference to
'ibv_create_xrc_srq' make: *** [fvcom] Error 1
*** WaveWatch III MPI mode compile error ***
It produces the same error with the fvcom4.3 compilation message when compiling the mpi mode.
/usr/local/mvapich-1.2.0_intel-11.1.080/lib/libmpich.a(viainit.o): In function `MPID_VIA_Finalize': viainit.c:(.text+0x44b): undefined reference to `ibv_close_xrc_domain' /usr/local/mvapich-1.2.0_intel-11.1.080/lib/libmpich.a(viainit.o): In function `MPID_VIA_Init': viainit.c:(.text+0x2b9e): undefined reference to `ibv_open_xrc_domain' /usr/local/mvapich-1.2.0_intel-11.1.080/lib/libmpich.a(viapriv.o): In function `create_srq': viapriv.c:(.text+0xc8): undefined reference to `ibv_create_xrc_srq' make: *** [/home2/hslee/MODELs/WW3/ww3_5.16/exe/ww3_grid] Error 1