MGARD (MultiGrid Adaptive Reduction of Data) is a technique for multilevel lossy compression of scientific data based on the theory of multigrid methods. This is an experimental C++ implementation for integration with existing software; use at your own risk! We encourage you to make a GitHub issue if you run into any problems using MGARD, have any questions or suggestions, etc.
The API consists of a header file include/mgard_api.h
providing declarations for function templates mgard::compress
and mgard::decompress
.
See the header for documentation of these templates.
To use MGARD,
- Build MGARD by either running
make lib/libmgard.a
to generate a static library, orcmake -DCMAKE_INSTALL_PREFIX=<location to install MGARD> -DCMAKE_BUILD_TYPE=RELEASE -DZSTD_ROOT=<optional, location to ZSTD installation> ..
. - Include
mgard_api.h
in any source files making use of the API. - Link against
libmgard.a
when creating your executable.
The theory behind MGARD is developed in the following papers, which also address implementation issues and present numerical examples. Reference [2] covers the simplest case and is a natural starting point.
- Ben Whitney. Multilevel Techniques for Compression and Reduction of Scientific Data. PhD thesis, Brown University, 2018.
- Mark Ainsworth, Ozan Tugluk, Ben Whitney, and Scott Klasky. Multilevel Techniques for Compression and Reduction of Scientific Data—The Univariate Case. Computing and Visualization in Science 19, 65–76, 2018.
- Mark Ainsworth, Ozan Tugluk, Ben Whitney, and Scott Klasky. Multilevel Techniques for Compression and Reduction of Scientific Data—The Multivariate Case. SIAM Journal on Scientific Computing 41 (2), A1278–A1303, 2019.
- Mark Ainsworth, Ozan Tugluk, Ben Whitney, and Scott Klasky. Multilevel Techniques for Compression and Reduction of Scientific Data—Quantitative Control of Accuracy in Derived Quantities. SIAM Journal on Scientific Computing 41 (4), A2146–A2171, 2019.
- Mark Ainsworth, Ozan Tugluk, Ben Whitney, and Scott Klasky. Multilevel Techniques for Compression and Reduction of Scientific Data—The Unstructured Case. SIAM Journal on Scientific Computing, 42 (2), A1402–A1427, 2020.
In addition to mgard::compress
and mgard::decompress
, the API also provides declarations for deprecated functions mgard_compress
and mgard_decompress
.
When decompressing with mgard_decompress
, a smoothness parameter s
must be specified.
The s
value you use to decompress must be the same as the s
value you used to compress.
You cannot agnostically decompress the compressed representation, and the value of s
is not stored in the compressed stream, so if you forget the value of s
you used when compressing your data, your data is gone.
In addition, there is no way to detect if an inconsistent value of s
has been passed, so the code returns corrupted data silently.
You can avoid this problem by using mgard::compress
and mgard::decompress
instead.