Panel | ||||||||
---|---|---|---|---|---|---|---|---|
|
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
Download grib_api
...
...
...
...
...
Code Block |
---|
ftp ftp.ecmwf.int
Connected to ftp-int.ecmwf.int.
Name (ftp.ecmwf.int:user): openifs
331 User openifs OK. Password required
Password:
ftp> cd src/grib_api
ftp> get grib_api-1.9.18.tar.gz
ftp> quit |
Unpacking grib_api
To unpack the software:
Code Block |
---|
tar zxf grib_api-1.9.18.tar.gz |
or if your version of tar doesn't support the 'z' option, do:
Code Block |
---|
gunzip grib_api_1.9.18.tar.gz
tar xf grib_api-1.9.18.tar |
Configuring grib_api
If you are familiar with compiling and installing software on linux systems, you will be used to the following steps. Grib_api uses the GNU configure tool to ease building and compilation. It is tested on different platforms and compilers and should not cause any problems. If however, you do have a problem installing grib_api, please email: Software.Support@ecmwf.int.
The configure command is contained in the grib_api directory you have just unpacked. We will use the command with a few options to suit OpenIFS and assume we'll use the gcc & gfortran compilers. If you use different compilers, see below.
Code Block | ||
---|---|---|
| ||
cd grib_api_1.9.18
CC=gcc FC=gfortran \
CCFLAGS="-g -O2 -m64 -march=native" FCFLAGS="-g -O2 -m64 -march=native" \
./configure --prefix=../grib_api_gcc --enable-pthread --disable-jpeg --disable-omp-packing |
Note the use of the backslash '\' to allow the command to use two lines.
A quick description of what these options are for:
--prefix=../grib_api_gcc | This specifies where you want the grib_api files to be installed. In our example here, the source code is in $HOME/ecmwf/grib_api_1.9.18 and we will put the compiled grib_api libraries in our example directory $HOME/ecmwf/grib_api_gcc. You are free to choose any installation directory but it's recommended to keep the installed binaries & libraries in a separate directory to the source code in case different compiler versions are needed. On a shared high performance computer facility, the install path would most likely be somewhere central. If nothing is specified for --prefix , by default grib_api will install in /usr/local. |
--disable-jpeg | OpenIFS does not need to support JPEG and PNG for data compression. This removes the need to link OpenIFS against the Jasper library (libjasper.a). |
--disable-omp-packing | OpenMP enabled packing is removed as the model needs to have control over OpenMP multithreading. This is usually disabled by default but it's best to enforce it in case the default changes for future releases. |
--enable-pthread | This option ensures that grib_api is thread-safe. Again, this is normally the default but we enforce it here as OpenIFS will call grib_api from parallel threads. |
Info | ||
---|---|---|
| ||
The The --enable-python option enables the python interface and is optional but might be useful if you intend to use/write software to access the GRIB output files. If the make fails because of a missing numpy header file you should add the --disable-numpy option. The --enable-vector option should be used on vector based computers (e.g. NEC). Grib_api will then use a more efficient packing/unpacking method suitable for vector hardware. n.b. there is a bug in the 1.9.18 release that if the --disable-vector option is used, this has the reverse effect of enabling the vector code. See grib_api issue GRIB-269 for more details. |
...
title | Shared and static libraries |
---|
grib_api will build both shared and static libraries by default. Shared libraries need to be built if the python interface is used.
Choice of compiler and options
...
...
...
The configure script usually chooses a sensible set of optimized compiler flags for the choice of supported compiler. If you need to override the compiler flags you can do so as shown in the following example. Note also the use of '\' to extend the command over multiple lines.
...
title | Intel compiler: |
---|
...
...
...
...
title | Portland compiler: |
---|
...
...
...
...
...
...
...
In this example, note the use of the '_r' form of the IBM compiler to ensure grib_api is compiled 'thread-safe'. This is important as grib_api will be called by multiple threads with OpenIFS.
...
...
...
...
would allow make to compile 3 files at once - appropriate on a 4 core machine.
...
...
...
...
...
...
...
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.
...
...
...
...
...
Finally, to install grib_api do:
Code Block |
---|
make install | tee install.out |
At the end of this step, in the directory $HOME/ecmwf/grib_api we are using in this example you should now have a directory called 'grib_api_gcc' (or some other compiler suffix) which contains the following:
Code Block |
---|
% ls grib_api_gcc
bin include lib share
% ls grib_api_gcc/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.
Panel | ||||||||
---|---|---|---|---|---|---|---|---|
|
...