Compile error in ICON:cannot find -lmpifort

Hi,

I’m trying to compile CMAQ-5.2. CMAQ I use the ifort compiler. The Intel MPI version is 2018.3.222.

But error occurs while compiling the ICON process.

In ICON step, I get the following error.

if ( 0 ) then
unalias mv rm
if ( 1 || ! -f /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe ) then
cd /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/scripts
./bldit_bldmake.csh
rm: cannot remove `/disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe’: No such file or directory
ld: cannot find -lmpifort

ERROR BLDMAKE Compile failed

endif
set Blder = /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe -serial -verbose
cd /disk1/scl/CMAQ/CMAQ-5.2/PREP/icon/scripts/BLD_ICON_v52_profile_intel
if ( 0 ) then
if ( 1 ) then
/disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe -serial -verbose ICON_v52_profile.cfg.bld
/disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe: Command not found.
else
endif
mv Makefile Makefile.intel
mv: accessing `Makefile.intel’: Too many levels of symbolic links
if ( 1 != 0 ) then
echo *** failure in /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe -serial -verbose ***
*** failure in /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe -serial -verbose ***
exit 1

Is anyone willing to help me?

…and presumably you have already successfully built the CCTM?

In any case: since ICON is not a MPI-parallel program, you do not need to be using the MPI compiler-set to build it; you would do just as well with “normal” ifort and BIN-type Linux2_x86_64ifort

Thanks for your reply, The first thing I compiled was the CMAQ icon section. I just tried to compile CCTM first, but the same problem occurred, lmpifort could not be found.

I get the following error:

Compiler is set to intel
setenv CCTM_SRC /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src
set GlobInc = /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src/ICL
set Mechs = /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src/MECHS
setenv REPOROOT /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src
set VRSN = v52
set EXEC = CCTM_v52.exe
set CFG = CCTM_v52.cfg
set CompileBLDMAKE
set CopySrc
set ParOpt
set ModDriver = driver/wrf
set ModInit = init/yamo
set ModGrid = grid/cartesian
set ModCpl = couple/gencoor_wrf
set ModHadv = hadv/yamo
set ModVadv = vadv/wrf
set ModHdiff = hdiff/multiscale
set ModVdiff = vdiff/acm2
set ModDepv = depv/m3dry
set ModEmis = emis/emis
set ModBiog = biog/beis3
set ModPlmrs = plrise/smoke
set ModCgrds = spcs/cgrid_spcs_nml
set ModPhot = phot/inline
set Mechanism = cb05e51_ae6_aq
set ModGas = gas/ebi_cb05e51_ae6_aq
set ModAero = aero/aero6
set ModCloud = cloud/acm_ae6
set ModUtil = util/util
set Tracer = trac0
set ModPa = procan/pa
set ModPvO3 = pv_o3
setenv FC mpiifort
set FP = mpiifort
set CC = icc
setenv BLDER /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe
set NETCDF = /disk1/scl/CMAQ/CMAQ-5.2/lib/netcdf/lib -lnetcdff -lnetcdf
set PNETCDF = /lib
set FSTD = -O3 -fno-alias -mp1 -fp-model source
set DBG = -O0 -g -check bounds -check uninit -fpe0 -fno-alias -ftrapuv -traceback
setenv F_FLAGS -fixed -132
set F90_FLAGS = -free
set CPP_FLAGS =
set C_FLAGS = -O2 -DFLDMN -I
set LINK_FLAGS =
if ( ! -e /disk1/scl/CMAQ/CMAQ-5.2 || ! -e /disk1/scl/CMAQ/CMAQ-5.2/lib ) then
echo Model repository base path: /disk1/scl/CMAQ/CMAQ-5.2
Model repository base path: /disk1/scl/CMAQ/CMAQ-5.2
echo library path: /disk1/scl/CMAQ/CMAQ-5.2/lib
library path: /disk1/scl/CMAQ/CMAQ-5.2/lib
if ( 0 ) then
setenv CMAQ_MODEL /disk1/scl/CMAQ/CMAQ-5.2
echo default Model repository path: /disk1/scl/CMAQ/CMAQ-5.2
default Model repository path: /disk1/scl/CMAQ/CMAQ-5.2
endif
set BLD_OS = uname -s
uname -s
if ( Linux != Linux ) then
if ( 0 ) then
if ( 0 ) then
set PIO =
endif
if ( 1 ) then
echo Parallel; set MPI flags
Parallel; set MPI flags
set ModStenex = STENEX/se
set ModPario = PARIO
set ModPar = par/mpi
set PARIO = /disk1/scl/CMAQ/CMAQ-5.2/PARIO
set STENEX = /disk1/scl/CMAQ/CMAQ-5.2/STENEX
set PAR = ( -Dparallel )
set Popt = SE
set seL = se_snl
set LIB2 = -lioapi
set LIB3 =
set Str1 = ( // Parallel / Include message passing definitions )
set Str2 = ( include SUBST_MPI mpif.h ; )
else
set ModMech = MECHS/cb05e51_ae6_aq
if ( cb05e51_ae6_aq == saprc07tic_ae6i_aqkmti ) then
set ModTrac = MECHS/trac0
if ( 0 ) then
set POT =
endif
set Bld = /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel
if ( ! -e /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel ) then
if ( ! -d /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel ) then
endif
cd /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel
set ICL_PAR = /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src/ICL/fixed/mpi
set ICL_CONST = /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src/ICL/fixed/const
set ICL_FILES = /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src/ICL/fixed/filenames
set ICL_EMCTL = /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src/ICL/fixed/emctrl
if ( 1 ) then
set ICL_MPI = .
endif
if ( 1 ) then
/bin/cp -fp /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src/ICL/fixed/mpi/PE_COMM.EXT /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel
/bin/cp -fp /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src/ICL/fixed/const/CONST.EXT /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel
/bin/cp -fp /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src/ICL/fixed/filenames/FILES_CTM.EXT /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel
/bin/cp -fp /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src/ICL/fixed/emctrl/EMISPRM.EXT /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel
if ( 1 ) then
/bin/cp -fp ./mpif.h /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel
/bin/cp: ./mpif.h' and /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel/mpif.h’ are the same file
endif
set ICL_PAR = .
set ICL_CONST = .
set ICL_FILES = .
set ICL_EMCTL = .
if ( 1 ) then
set ICL_MPI = .
endif
endif
set STX1 = ( -DSUBST_BARRIER=SE_BARRIER -DSUBST_GLOBAL_MAX=SE_GLOBAL_MAX -DSUBST_GLOBAL_MIN=SE_GLOBAL_MIN -DSUBST_GLOBAL_MIN_DATA=SE_GLOBAL_MIN_DATA -DSUBST_GLOBAL_TO_LOCAL_COORD=SE_GLOBAL_TO_LOCAL_COORD -DSUBST_GLOBAL_SUM=SE_GLOBAL_SUM -DSUBST_GLOBAL_LOGICAL=SE_GLOBAL_LOGICAL -DSUBST_LOOP_INDEX=SE_LOOP_INDEX -DSUBST_SUBGRID_INDEX=SE_SUBGRID_INDEX )
set STX2 = ( -DSUBST_HI_LO_BND_PE=SE_HI_LO_BND_PE -DSUBST_SUM_CHK=SE_SUM_CHK -DSUBST_INIT_ARRAY=SE_INIT_ARRAY -DSUBST_COMM=SE_COMM -DSUBST_MY_REGION=SE_MY_REGION -DSUBST_SLICE=SE_SLICE -DSUBST_GATHER=SE_GATHER -DSUBST_DATA_COPY=SE_DATA_COPY -DSUBST_IN_SYN=SE_IN_SYN )
set Cfile = /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel/CCTM_v52.cfg.bld
set quote = "
echo
echo model CCTM_v52.exe;
echo
echo repo /disk1/scl/CMAQ/CMAQ-5.2/CCTM/src;
echo
echo mechanism cb05e51_ae6_aq;
echo
echo lib_base /disk1/scl/CMAQ/CMAQ-5.2/lib;
echo
echo lib_1 ioapi/Linux2_x86_64ifort;
echo
echo lib_2 ioapi/ioapi/fixed_src;
echo
if ( 1 ) then
echo lib_3 “mpi -I.”;
echo
endif
echo
echo lib_4 ioapi/Linux2_x86_64ifort;
echo
set text = " -Dparallel -DSUBST_BARRIER=SE_BARRIER -DSUBST_GLOBAL_MAX=SE_GLOBAL_MAX -DSUBST_GLOBAL_MIN=SE_GLOBAL_MIN -DSUBST_GLOBAL_MIN_DATA=SE_GLOBAL_MIN_DATA -DSUBST_GLOBAL_TO_LOCAL_COORD=SE_GLOBAL_TO_LOCAL_COORD -DSUBST_GLOBAL_SUM=SE_GLOBAL_SUM -DSUBST_GLOBAL_LOGICAL=SE_GLOBAL_LOGICAL -DSUBST_LOOP_INDEX=SE_LOOP_INDEX -DSUBST_SUBGRID_INDEX=SE_SUBGRID_INDEX -DSUBST_HI_LO_BND_PE=SE_HI_LO_BND_PE -DSUBST_SUM_CHK=SE_SUM_CHK -DSUBST_INIT_ARRAY=SE_INIT_ARRAY -DSUBST_COMM=SE_COMM -DSUBST_MY_REGION=SE_MY_REGION -DSUBST_SLICE=SE_SLICE -DSUBST_GATHER=SE_GATHER -DSUBST_DATA_COPY=SE_DATA_COPY -DSUBST_IN_SYN=SE_IN_SYN";
echo cpp_flags " -Dparallel -DSUBST_BARRIER=SE_BARRIER -DSUBST_GLOBAL_MAX=SE_GLOBAL_MAX -DSUBST_GLOBAL_MIN=SE_GLOBAL_MIN -DSUBST_GLOBAL_MIN_DATA=SE_GLOBAL_MIN_DATA -DSUBST_GLOBAL_TO_LOCAL_COORD=SE_GLOBAL_TO_LOCAL_COORD -DSUBST_GLOBAL_SUM=SE_GLOBAL_SUM -DSUBST_GLOBAL_LOGICAL=SE_GLOBAL_LOGICAL -DSUBST_LOOP_INDEX=SE_LOOP_INDEX -DSUBST_SUBGRID_INDEX=SE_SUBGRID_INDEX -DSUBST_HI_LO_BND_PE=SE_HI_LO_BND_PE -DSUBST_SUM_CHK=SE_SUM_CHK -DSUBST_INIT_ARRAY=SE_INIT_ARRAY -DSUBST_COMM=SE_COMM -DSUBST_MY_REGION=SE_MY_REGION -DSUBST_SLICE=SE_SLICE -DSUBST_GATHER=SE_GATHER -DSUBST_DATA_COPY=SE_DATA_COPY -DSUBST_IN_SYN=SE_IN_SYN";
echo
echo f_compiler mpiifort;
echo
echo fstd “-O3 -fno-alias -mp1 -fp-model source”;
echo
echo dbg “-O0 -g -check bounds -check uninit -fpe0 -fno-alias -ftrapuv -traceback”;
echo
echo f_flags “-fixed -132”;
echo
echo f90_flags “-free”;
echo
echo c_compiler icc;
echo
echo c_flags “-O2 -DFLDMN -I”;
echo
echo link_flags “”;
echo
echo ioapi “-lioapi”;
echo
echo netcdf “-lnetcdff -lnetcdf”;
echo
if ( 1 ) then
echo mpich " ";
echo
endif
echo include SUBST_PE_COMM ./PE_COMM.EXT;
echo include SUBST_CONST ./CONST.EXT;
echo include SUBST_FILES_ID ./FILES_CTM.EXT;
echo include SUBST_EMISPRM ./EMISPRM.EXT;
echo
if ( 1 ) then
echo // Parallel / Include message passing definitions
echo include SUBST_MPI ./mpif.h;
endif
echo
set text = stenex or se_noop
echo // options are stenex or se_noop
echo Module STENEX/se;
if ( 1 ) then
set text = // parallel executable; stenex and pario included
echo // parallel executable; stenex and pario included
echo Module PARIO;
else
echo
set text = par, par_nodistr and par_noop
echo // options are par, par_nodistr and par_noop
if ( 1 ) then
echo Module par/mpi;
endif
echo
if ( 0 ) then
set text = wrf and yamo
echo // options are wrf and yamo
echo Module driver/wrf;
echo
set text = cartesian
echo // options are cartesian
echo Module grid/cartesian;
echo
set text = yamo
echo // options are yamo
echo Module init/yamo;
echo
set text = gencoor_wrf and gencoor
echo // options are gencoor_wrf and gencoor
echo Module couple/gencoor_wrf;
echo
set text = yamo
echo // options are yamo
echo Module hadv/yamo;
echo
set text = wrf and yamo
echo // options are wrf and yamo
echo Module vadv/wrf;
echo
set text = multiscale
echo // options are multiscale
echo Module hdiff/multiscale;
echo
set text = acm2
echo // options are acm2
echo Module vdiff/acm2;
echo
set text = m3dry
echo // options are m3dry
echo Module depv/m3dry;
echo
set text = emis
echo // options are emis
echo Module emis/emis;
echo
set text = beis3
echo // options are beis3
echo Module biog/beis3;
echo
set text = smoke
echo // options are smoke
echo Module plrise/smoke;
echo
set text = cgrid_spcs_nml and cgrid_spcs_icl
echo // options are cgrid_spcs_nml and cgrid_spcs_icl
echo Module spcs/cgrid_spcs_nml;
echo
set text = inline and table
echo // options are inline and table
echo Module phot/inline;
echo
set text = gas chemistry solvers
echo // gas chemistry solvers
set text = smvgear, ros3, and ebi_; see ‘gas chemistry mechanisms’ for
echo // options are smvgear, ros3, and ebi_; see ‘gas chemistry mechanisms’ for
echo Module gas/ebi_cb05e51_ae6_aq;
echo
set MechList = cb05e51_ae6_aq, cb05e51_ae6nvPOA_aq, cb05eh51_ae6_aq, cb05mp51_ae6_aq, cb05tucl_ae6_aq, cb05tump_ae6_aq, cb6r3_ae6_aq, cb6r3_ae6nvPOA_aq, racm2_ae6_aq, saprc07tb_ae6_aq, saprc07tc_ae6_aq, saprc07tc_ae6nvPOA_aq, saprc07tic_ae6i_aq, saprc07tic_ae6i_aqkmti, saprc07tic_ae6invPOA_aq
set text = gas chemistry mechanisms
echo // gas chemistry mechanisms
set text = cb05e51_ae6_aq, cb05e51_ae6nvPOA_aq, cb05eh51_ae6_aq, cb05mp51_ae6_aq, cb05tucl_ae6_aq, cb05tump_ae6_aq, cb6r3_ae6_aq, cb6r3_ae6nvPOA_aq, racm2_ae6_aq, saprc07tb_ae6_aq, saprc07tc_ae6_aq, saprc07tc_ae6nvPOA_aq, saprc07tic_ae6i_aq, saprc07tic_ae6i_aqkmti, saprc07tic_ae6invPOA_aq
echo // options are cb05e51_ae6_aq, cb05e51_ae6nvPOA_aq, cb05eh51_ae6_aq, cb05mp51_ae6_aq, cb05tucl_ae6_aq, cb05tump_ae6_aq, cb6r3_ae6_aq, cb6r3_ae6nvPOA_aq, racm2_ae6_aq, saprc07tb_ae6_aq, saprc07tc_ae6_aq, saprc07tc_ae6nvPOA_aq, saprc07tic_ae6i_aq, saprc07tic_ae6i_aqkmti, saprc07tic_ae6invPOA_aq
echo Module MECHS/cb05e51_ae6_aq;
echo
set text = tracer modules
echo // tracer modules
echo // options are trac0, trac1
echo Module MECHS/trac0;
echo

if ( 0 ) then
set text = aero6
echo // options are aero6
echo Module aero/aero6;
echo
set text = acm_ae6, acm_ae6_kmt, and acm_ae6_mp
echo // options are acm_ae6, acm_ae6_kmt, and acm_ae6_mp
echo Module cloud/acm_ae6;
echo
set text = // compile for inline process analysis
echo // compile for inline process analysis
echo Module procan/pa;
echo
set text = util
echo // options are util
echo Module util/util;
echo
if ( 0 ) then
unalias mv rm
if ( 1 || ! -f /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe ) then
cd /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/scripts
./bldit_bldmake.csh
rm: cannot remove `/disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe’: No such file or directory
ld: cannot find -lmpifort

ERROR BLDMAKE Compile failed

endif
cd /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel
if ( 1 ) then
set Blder = /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe -verbose
else
if ( 0 ) then
if ( 1 ) then
/disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe -verbose /disk1/scl/CMAQ/CMAQ-5.2/CCTM/scripts/BLD_CCTM_v52_intel/CCTM_v52.cfg.bld
/disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe: Command not found.
else if ( 0 ) then
endif
mv Makefile Makefile.intel
mv: accessing Makefile.intel': Too many levels of symbolic links if ( -e Makefile.intel && -e Makefile ) rm Makefile ln -s Makefile.intel Makefile ln: accessing Makefile’: Too many levels of symbolic links
if ( 1 != 0 ) then
echo *** failure in /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe -verbose ***
*** failure in /disk1/scl/CMAQ/CMAQ-5.2/UTIL/bldmake/bldmake_intel.exe -verbose ***
exit 1

In addition,I connected MPI path under CMAQ\lib. After this error, I changed it to mpich path and recompiled CCTM, but it still didn’t work. Still no lmpifort found. I don’t know how to solve it

You probably need to talk with your systems administrator about your MPI installation. With Intel compilers, there are three possibilities, each of which is incompatible with the others:

  1. Native Intel MPI, which has its own libraries;
  2. MPICH built around Intel (in which case, the compiler mpif90 is a “wrapper” around ifort that understands what and where its libraries are; and
  3. OpenMPI built around Intel (in which case, the compiler --still mpif90 – is a “wrapper” around ifort that understands what and where its libraries (which have a different set of names) are.
    Then you need to modify your Makefile to suit.