This repository demonstrates how to integrate the Fortran bindings for the ZFP library into a simple example that illustrates compression and decompression of a double-precision 3D array.
ZFP is an open-source library for compressed floating-point and integer arrays that support high throughput read and write random access. This repository focuses on integrating the Fortran bindings for ZFP into a Fortran project, showcasing its usage through a simple example.
The zfp_example.f90
file contains the main program, which demonstrates the compression and decompression of a 3D array of 64-bit floats using the ZFP library. It would be the equivalent of the simple compressor example. The zfp_fct_wrapper.f90
file provides a Fortran module with functions for interacting with the ZFP library.
- Integration of Fortran bindings for the ZFP library.
- Simple example demonstrating compression and decompression of a 3D array of 64-bit floats.
- Easy-to-understand CMakeLists.txt file for building the example.
Before building and running the example, ensure you have the following prerequisites installed:
- Fortran compiler which fully supports F2018 (e.g., GNU Fortran, Intel Fortran)
- CMake (version 3.16 or higher)
-
Clone this repository:
git clone https://github.com/ofmla/fortran-zfp-example.git
-
Build the project using CMake:
cd fortran-zfp-example mkdir build cd build cmake .. cmake --build .
-
Run the executable with the appropriate command-line argument (
-c
for compress or-d
for decompress). Executing./exe -c
will create an archive named
compressed.zfp
.
To decompress the compressed data and save it to decompressed.zfp
, run the executable with the -d option:
./exe -d
Attempting to decompress data without first compressing it will result in an error, as the compressed.zfp
file does not exist. This example is built with double precision (real64) real values, but you can use zfp_fct_wrapper.f90
in a project that uses real32 and explicitly specify the real kind with the preprocessor flag -DREAL_KIND=REAL32
, i.e., cmake -DREAL_KIND=REAL32 ..
.
Contributions are welcome! If you find any issues or have suggestions for improvements, please open an issue or create a pull request.
This project is licensed under the MIT License