When compiling grib-api on IBM architectures with the XLF compiler, we recommend disabling the creation of "shared libraries" and use static libraries only. This can cause runtime errors.
For more information, please see Installing grib-api.
We are aware of a number of problems using OpenIFS with the Portland compiler (multiple versions). Reports indicate the model can hang or the compilation can hang.
Support for PGI will be withdrawn from OpenIFS version 38r1v05 onwards. We encourage users to use GNU (gfortran), Intel or Cray compilers instead.
There is an issue with OpenIFS when compiling with the Intel compiler at optimization level -O2 or above on chipsets that support SSE4.1 & AVX instructions.
Users will see failure with the T21 test job similar to the following:
It arises because this compiler makes use of 2-way vectorization when compiling both branches of IF statements which can generate floating point exceptions if a zero divide is possible in the unexecuted branch and the IFS internal signal handler (DRHOOK) is enabled.
There are several possible workarounds:
- Compile the routines that cause the problem with lower optimisation, -O1. The routines affected are:
sltend.F90, vsurf_mod.F90, vdfmain.F90, vdfhghtn.F90
. - Run with the environment variable: DR_HOOK_IGNORE_SIGNALS=8 to disable trapping of floating point exception signals (SIGFPE) by the model. This is not ideal as it will not catch other causes of floating point exceptions.
Edit the code and insert the line:
!DEC$ OPTIMIZE:1
directly after the SUBROUTINE statement into the routines:
sltend.F90, vsurf_mod.F90, vdfmain.F90, vdfhghtn.F90
.- Edit the intel-*.cfg configuration files in make/cfg and add lines to change the compile options specifically for these files.
OpenIFS uses a default of -O1 in the configuration files. If you increase the optimisation level, please be aware of this issue.
For more help with this issue, please contact openifs-support@ecmwf.int.
We are aware of a problem in grib_api when using the Intel compiler that seems to affect different versions of grib_api and causes the model to fail with a floating point exception (SIGFPE) in the routine PRESET_GRIB_TEMPLATE. The advice is to reduce the optimization level when compiling grib_api to -O1 rather than -O2.
The error message that typifies this problem is:
This is caused by the way IFS creates its own signal handler. To enable Cray ATP set:
export DR_HOOK_IGNORE_SIGNALS=-1
in the job script to completely disable any signal trapping by DrHook.
This issue has been fixed in OpenIFS releases 38r1v05 and beyond. For previous releases, either use the fix above or contact openifs-support@ecmwf.int for assistance.
This is a result of the way in which the OpenIFS is compiled. More information on this and the resolution is described here.