This page has a list of known issues related to the GNU compilers, gfortran and gcc (all versions).

OpenIFS 43r3

OpenIFS 43r3 compilation fails with gfortran 11.2.0

OpenIFS 43r3 compilation with gnu compilers 11.2.0 (also with other versions since version 10) is known to fail with errors in the fcm-make.log as shown below.  

Multiple errors of this type will occur:

[FAIL] /home/damk/oifs/model/oifs43r3/src/algor/module/butterfly_alg_mod.F90:949:34:
[FAIL]
[FAIL]   949 |     CALL DGEMV('N',IM,IN,1.0_JPRB,YDNODE%PNONIM(1),IRANK,ZVECIN(IRANK+1),1,1.0_JPRB,PVECOUT,1)
[FAIL]       |                                  1
[FAIL] ......
[FAIL]  1013 |     CALL DGEMV('T',IM,IN,1.0_JPRB,YDNODE%PNONIM,IRANK,PVECIN,1,0.0_JPRB,ZVECOUT(IRANK+1),1)
[FAIL]       |                                  2
[FAIL] Error: Element of assumed-shape or pointer array as actual argument at (1) cannot correspond to actual argument at (2)
[ ... ]
[FAIL] /home/damk/oifs/model/oifs43r3/src/algor/module/butterfly_alg_mod.F90:762:17:
[FAIL]
[FAIL]   762 |                & YNODE%B,IROWS,PVECIN(IFR,1),IRIN,0.0_JPRB,&
[FAIL]       |                 1
[FAIL] ......
[FAIL]  1050 |      & YDNODE%PNONIM(1),IM,PVECIN,IM,0.0_JPRB,&
[FAIL]       |       2
[FAIL] Error: Rank mismatch between actual argument at (1) and actual argument at (2) (scalar and rank-2)
[ ... ]

The following corrective action should be taken:

(1) in the fcm configuration file include additional compiler switches (the example below is given for gnu-opt.fcm, but the corresponding change should be made for gnu-noopt.fcm). 

In file $OIFS_HOME/make/fcm/gnu-opt.fcm replace line 44:
$OIFS_FFLAGS{?} = -g -O2 -m64 -fconvert=big-endian -fopenmp -ffree-line-length-none

with this line:
$OIFS_FFLAGS{?} = -g -O2 -m64 -fconvert=big-endian -fopenmp -ffree-line-length-none -fallow-argument-mismatch -fallow-invalid-boz

(2) in setup routine sugfl1.F90 a namelist is included before some of its variables are declared. The inclusion of the namelist file should be moved below the following declaration block. This is actually a bug which is picked up by more recent compiler versions.
Note:  No more updated versions of OpenIFS 43r3 will be released after v2 and therefore this bug fix will need to be applied manually when more recent gfortran versions are used. 

In file $OIFS_HOME/src/ifs/setup/sugfl1.F90 delete line 85:

-#include "namchem.nam.h"

Insert the deleted line below line 104:

 #include "namgfl.nam.h"
+#include "namchem.nam.h"

OpenIFS 43r3 compilation fails with gfortran 7.1 & 7.2

OpenIFS 43r3 compilation with gnu compilers 7.1 & 7.2 is known to fail with errors in the fcm-make.log as shown below.  The model is known to compile and work correctly with version 7.3 or later versions of the GNU compilers.

[FAIL] mpifort -oo/su_surf_flds.o -c -DBLAS -DLITTLE -DLINUX -DINTEGER_IS_INT -DECMWF -I./include -g -O2 -m64 -fconvert=big-endian -fopenmp -ffree-line-length-none -I /gpfs/projects/bsc32/bsc32544/libs/mn4/eccodes/2.14.1/gcc-7.1.0/include -I /gpfs/projects/bsc32/bsc32544/libs/mn4/netcdf-parallel/4.6.1/gcc-7.1.0/include -I /gpfs/projects/bsc32/bsc32544/libs/mn4/netcdf-fortran-parallel/4.4.4/gcc-7.1.0/include /gpfs/projects/bsc32/bsc32544/models/oifs43r3/src.ORIG/ifs/setup/su_surf_flds.F90 # rc=1
[FAIL] /gpfs/projects/bsc32/bsc32544/models/oifs43r3/src.ORIG/ifs/setup/su_surf_flds.F90:411:2:
[FAIL] 
[FAIL]    CXTRP2(1) = 'SURFPREC.EAU.CON'
[FAIL]   1
[FAIL] Error: Unclassifiable statement at (1)


OpenIFS 40r1 / 38r1

OpenIFS 38r1 and 40r1 fail in CODEPS with gfortran

Both OpenIFS 38r1 and 40r1 are known to fail with the gfortran compiler (all tested versions) using the 'optimized' build type (gnu-opt.cfg) with this error:

10:06:30 STEP        0 H=        0:00 +CPU= 18.761
 WRPGR: ERROR IN CODEPS - IERR=           -5
 ABORT!    1 WRPGR: ERROR IN CODEPS
 CODEPS: Integer larger than field specified
 MPL_ABORT: CALLED FROM PROCESSOR      1 THRD     1
 MPL_ABORT: THRD           1   WRPGR: ERROR IN CODEPS
[myproc#1,tid#1,pid#6504]:  MASTER 
[myproc#1,tid#1,pid#6504]:   CNT0<1> 
[myproc#1,tid#1,pid#6504]:    CNT1 
[myproc#1,tid#1,pid#6504]:     CNT2 
[myproc#1,tid#1,pid#6504]:      CNT3 
[myproc#1,tid#1,pid#6504]:       CNT4 
[myproc#1,tid#1,pid#6504]:        STEPO 
[myproc#1,tid#1,pid#6504]:         POSDDH 
[myproc#1,tid#1,pid#6504]:          WRPGR 
 SDL_TRACEBACK: Calling LINUX_TRBK, THRD =            1

The model works with the unoptimized settings (gnu-noopt.cfg) and with all configurations of the Intel and Cray compilers.

A possible workaround is to alter the configuration so that that the optimization level for ifs/dia/wrpgr.F90 and src/openifs/emos/gribex/codeps.F is reduced to -O0. To do this add a line to the configuration file:

Edit oifs.cfg
oifs.prop{fc.flags}[ifs/dia/wrpgr.F90] = $OIFS_FFLAGS -O0
oifs.prop{fc.flags}[openifs/emos]               = $OIFS_FFIXED $OIFS_FFLAGS -O0

OpenIFS 38r1 fails with gfortran version 5 compiler

OpenIFS 38r1 is known to fail when using the gfortran/gcc version 5.2 compiler. The error is:

SUDIM1; after call to read(namgfl), nmfdiaglev =            0
		Error in `../make/gnu-noopt/oifs/bin/master.exe': double free or corruption (out): 0x0000000009fafd90 ***

If this occurs we recommend using 4.8.x versions of the gnu compilers. There is currently no fix for this issue with OpenIFS based on the 38r1 release.

Later versions of OpenIFS (40r1+) do not fail.