...
...
...
...
...
...
...
...
...
...
Column | ||
---|---|---|
| ||
|
...
width | 280px |
---|
Panel | ||||||
---|---|---|---|---|---|---|
| ||||||
|
Download and unpack
...
...
Unpacking ecCodes
...
...
...
...
...
...
language | bash |
---|---|
title | Steps to configure grib-api with CMake assuming gnu compilers |
...
...
...
...
...
...
As OpenIFS models do not deal with any image based GRIB data these options can be disabled, unless you have other GRIB data containing images that you need to work with.
Setting this removes the need for the Jasper or OpenJPG libraries.
...
...
Available options
To get additional help on the available options run the command:
Code Block |
---|
cmake -LH eccodes-2.9.0-Source |
Info |
---|
This command will cause cmake to run its system discovery if this is the first time the command has been used. This may take time to complete. |
Configuring using autotools
Shared and static libraries
grib_api will build both shared and static libraries by default. Shared libraries may need to be built if the python interface is used, depending on your installation.
Some compilers will link to the shared version by default if both are found (e.g. the GNU compiler). Alternately, the option --disable-shared stops the shared libraries from being generated, only the static libraries are built and will be linked. However, this may prevent other grib api tools working and is not generally recommended.
IBM users may find that the grib-api fortran tests will fail unless --disable-shared is used.
Preferred compiler options
By default, cmake and configure will use the preferred compiler and set appropriate compiler options accordingly (for cmake, this depends on the build type).
This may not be what you need if you have multiple compilers available and want to direct cmake/configure to the most appropriate one to use.
Recommended options given below are conservative to ensure stability and bit-reproducibility.
Changing compiler options is not normally necessary. However, the following examples show the recommended compiler options and how to set them for the cmake and configure commands.
...
bgColor | lightlightgrey |
---|---|
borderStyle | dashed |
Compiler options if using cmake
...
title | click here to expand... |
---|
With cmake, it is better to use the cmake variables to define the compilers rather than rely on environment variables FC and CC.
...
title | gcc/gfortran compilers |
---|
...
...
bgColor | lightlightgrey |
---|---|
borderStyle | dashed |
Compiler options if using configure
...
title | click here to expand... |
---|
Code Block | ||
---|---|---|
| ||
export CC=gcc
export FC=gfortran
export CCFLAGS="-g -O2"
export FCFLAGS="-g -O2"
./configure ... |
Code Block | ||
---|---|---|
| ||
export CC=icc
export FC=ifort
export CFLAGS="-g -O1 -fp-model precise"
export FCFLAGS="-g -O1 -fp-model precise"
./configure ... |
Code Block | ||||
---|---|---|---|---|
| ||||
export CC=cc
export FC=ftn
export CFLAGS="-O1 -G2 -hflex_mp=conservative -hadd_paren -hfp1"
export FCFLAGS="-O1 -G2 -hflex_mp=conservative -hadd_paren -hfp1"
./configure ... |
Code Block | ||
---|---|---|
| ||
export CC=xlc_r
export FC=xlf90_r
export CFLAGS="-g -O2 -qstrict -qarch=auto -qtune=auto"
export FCFLAGS="-g -O2 -qstrict -qarch=auto -qtune=auto"
./configure .. |
Compiling, checks and installing
After configuration the next steps are to compile grib-api and install it. To compile grib_api do:
Code Block |
---|
make | tee make.out |
which will send all the output from the make command to the file 'make.out' as well as the terminal. This is recommended as the output is lengthy.
Info | ||
---|---|---|
| ||
If using cmake, it will normally hide all the output from the compile commands. If you want to see the compile command (to check the compile options), do: make VERBOSE=1 |
...
title | Parallel make |
---|
If your computer has multiple cores as many, use the -j flag to make to build grib_api faster. e.g.
Code Block |
---|
make -j 3 | tee make.out |
Next, to verify grib_api works correctly run:
Code Block |
---|
make check | tee check.out |
Verify that all the grib_api tests have passed. If not, go back and check your configure options. In case of difficulty, contact Software.Support@ecmwf.int.
Finally, to install grib_api do:
Code Block |
---|
make install | tee install.out |
At the end of this step, in the directory $HOME/ecmwf/
we are using in this example you should now have a directory called grib_api
(or some other compiler suffix) which contains the following:
Code Block |
---|
% ls grib_api
bin include lib share
% ls grib_api/lib
libgrib_api.a libgrib_api.la libgrib_api_f77.a libgrib_api_f77.la libgrib_api_f90.a libgrib_api_f90.la pkgconfig |
After this stage, next steps are to download and install FCM and then download the OpenIFS code and accompanying files.
Possible problems
Info | ||
---|---|---|
| ||
OpenIFS support: openifs-support@ecmwf.int. |
Cray
Possible issues with the Cray systems (using cce or gnu compilers) are related to building shared libraries and linking with supporting netcdf and python libraries.
...
Intel compiler
We currently recommend not using a higher optimization level than -O1 with the Intel compiler. Failures have been seen with grib_api and the Intel compiler when compiled with -O2.
Some versions of the Intel compiler (v14.0.x) can produce an error "unknown option -soname" when using 'configure. If this occurs try using "--disable-shared" or try the cmake command instead.
IBM compiler
For the IBM xlc compiler we recommend disabling the creation of 'shared libraries' which is known to cause problems with some versions of grib_api.
In this example, note the use of the '_r' form of the IBM compiler to ensure grib_api is compiled 'thread-safe'.
Building on High Performance Computer Systems
Some HPC batch systems have a different hardware architecture for their login (or frontend node) to the batch node, but the frontend compilation system is targeted at the batch nodes. This is known as cross-compilation. If this is the case you may see failures in the 'make check' stage because the checks, although compiled for the backend batch nodes, are being run on the frontend nodes and therefore may not work correctly. If this is the case on your system, we recommend using a batch job to do the 'configure; make; make check; make install' steps.
In some cases, the batch system cannot be used for compilation at all. In this case, you have to compile on the frontend but without extra flags 'configure' will assume the build is for the frontend. You can make use of the --host option to ensure the build is correct for the architecture of the batch system. Again though, the tests will fail, a small serial batch job is recommended to make sure grib_api is installed correctly.
Note if you plan on using the grib_api software in your own software that runs on the frontend nodes you will need to install grib_api twice; one for the batch system and again for the frontend system.
If you have any questions installing grib_api in this type of environment, please contact: openifs-support@ecmwf.int for assistance.
Verify the installation
To verify that the installation was successful, first ensure that the grib_api bin directory is added to your PATH environment variable and then run the grib_info command e.g.
Code Block |
---|
% export PATH=$PATH:$HOME/ecmwf/grib_api_gcc/bin
% grib_info
grib_api Version 1.14.0
Default definition files path is used: ..../grib_api_gcc/share/definitions
Definition files path can be changed setting GRIB_DEFINITION_PATH environment variable
Default SAMPLES path is used: ..../grib_api_gcc/share/samples
SAMPLES path can be changed setting GRIB_SAMPLES_PATH environment variable |
If the installation was successful, grib_info will report the installation directories. Any problems, please contact openifs-support@ecmwf.int.
HTML |
---|
<script type="text/javascript" src="https://software.ecmwf.int/issues/s/en_UKet2vtj/787/12/1.2.5/_/download/batch/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector/com.atlassian.jira.collector.plugin.jira-issue-collector-plugin:issuecollector.js?collectorId=047f74ec"></script>
|
...
...