-
Notifications
You must be signed in to change notification settings - Fork 17
Build
Alexander Bürger edited this page Feb 4, 2026
·
3 revisions
The fimex-program is considered stable and the releases are those used in production at met.no. API- and configuration changes are still likely between two releases.
Fimex is built using cmake. Some unit tests require extra data which are distributed separately from the source code due to the file size:
- version 20220211T1614, used since fimex 1.7.1
- version 20200717T0717
- version 20191030T0830, used since fimex 1.4.1
- version 20191024T1600, used since fimex 1.4.0
- flth00.dat.gz, used before version 1.4.0
The is also an R-Wrapper available here.
Fimex requires at least the following libraries to be installed for compilation:
- c99/c++11 compiler
- libxml2 >= 2.5.0
- proj-4 >= 4.4.9
- udunits >= 2.1.x
- mi-cpptest
- mi-programoptions
- pybind11
To configure the different file formats or features it requires:
- NetCDF (netcdf-3 > 3.6)
- ecCodes
- Log4cpp: advanced logging library
- OpenMP-3.0 enable compiler: Parallelization
- Fortran-2003 compiler (tested with gfortran-4.6 and ifortran-12)
The following optimizations have been tried with gcc 4.4 and kd-tree interpolation.
-
-O2general optimizations like loop-unrolling/inline -
-mfpmath=sse -msse2on i386 computers, use math from sse-unit. The built-in FPU is not IEEE conform and performs very slowly (> factor 2) when calculatingsqrt(nan). This is already the default on x86_64. -
-ftree-vectorize -fno-math-errnogives tiny performance gain through auto-vecotrization.-fno-math-errnois required to enable vectorization of intrinsic functions likesqrt. -
-fno-trapping-math -fno-signaling-nansfimex does not make use of trapping-math or signaling-nans, so this option can safely be switched on. Unfortunately, this does not give any performance gain. -
-O3gives no visible performance gain. This should be tested again with newer compiler-versions. -
-fprofile-generate/-fprofile-usegives a performance gain of ~4%. Since it complicates the build, it is not used by default.
Fimex can be build with OpenMP parallelization support with the //configure// option //--enable-openmp//. The following operations are parallelized:
- interpolation: fill2d (good parallelization on z-axis)
- interpolation with coord_nearestneighbor (good parallelization in startup)