diff options
author | Thomas Radke <tradke@aei.mpg.de> | 2006-11-17 13:22:00 +0000 |
---|---|---|
committer | Thomas Radke <tradke@aei.mpg.de> | 2006-11-17 13:22:00 +0000 |
commit | 8efe00ed0b9af14b82e417c18940d489e90d09cd (patch) | |
tree | 71eee325331f80d4a968c9f0e7d5d9e2189abdfd /Carpet | |
parent | 20401366e370e7d440609b72e1af6f6243c8ae44 (diff) |
CarpetIOHDF5: support per-variable output compression levels
Implement variable-specific output request option 'compression_level'
so that users can specify eg.
IOHDF5::compression_level = 1
IOHDF5::out_vars = "admbase::metric
admconstraints::hamiltonian
admbase::lapse{ compression_level = 0 }"
to request HDF5 dataset compression for every output variable except for the
lapse.
This modification also requires an update of thorn CactusBase/IOUtil.
darcs-hash:20061117132206-776a0-0e1d07a85cf206fa262a94fd0dd63c6f27e50fa2.gz
Diffstat (limited to 'Carpet')
-rw-r--r-- | Carpet/CarpetIOHDF5/doc/documentation.tex | 10 | ||||
-rw-r--r-- | Carpet/CarpetIOHDF5/src/Output.cc | 21 |
2 files changed, 22 insertions, 9 deletions
diff --git a/Carpet/CarpetIOHDF5/doc/documentation.tex b/Carpet/CarpetIOHDF5/doc/documentation.tex index c0ca6b0d9..4f449c2fd 100644 --- a/Carpet/CarpetIOHDF5/doc/documentation.tex +++ b/Carpet/CarpetIOHDF5/doc/documentation.tex @@ -102,12 +102,13 @@ Parameters to control the \ThisThorn\ I/O method are: Each group/variable name can have an option string attached in which you can specify a different output frequency for that individual variable, - a set of individual refinement levels to be output, or an individual - output mode, e.g. + a set of individual refinement levels to be output, the compression + level, or an individual output mode, e.g. \begin{verbatim} IOHDF5::out_vars = "wavetoy::phi{ out_every = 4 refinement_levels = { 1 2 } }" \end{verbatim} - Option strings currently supported by \ThisThorn\ are: {\tt out\_every, out\_unchunked}, and {\tt refinement\_levels}. + Option strings currently supported by \ThisThorn\ are: {\tt out\_every, + out\_unchunked}, {\tt refinement\_levels}, and {\tt compression\_level}. \item {\tt IOHDF5::out\_dir}\\ The directory in which to place the \ThisThorn\ output files. @@ -125,6 +126,9 @@ Parameters to control the \ThisThorn\ I/O method are: with increasing values requesting higher compression rates (at the cost of additional runtime for outputting HDF5 data); a value of zero (which is the default setting for this parameter) disables compression. + The output compression level can also be set + for individual variables using the {\tt compression\_level} option in + an option string appended to the {\tt IOHDF5::out\_vars} parameter. \item {\tt IO::out\_single\_precision (steerable)}\\ whether to output double-precision data in single precision diff --git a/Carpet/CarpetIOHDF5/src/Output.cc b/Carpet/CarpetIOHDF5/src/Output.cc index a0367ba58..6d3da697b 100644 --- a/Carpet/CarpetIOHDF5/src/Output.cc +++ b/Carpet/CarpetIOHDF5/src/Output.cc @@ -140,9 +140,12 @@ int WriteVarUnchunked (const cGH* const cctkGH, // enable compression if requested hid_t plist; HDF5_ERROR (plist = H5Pcreate (H5P_DATASET_CREATE)); - if (compression_level) { + const int compression_lvl = request->compression_level >= 0 ? + request->compression_level : + compression_level; + if (compression_lvl) { HDF5_ERROR (H5Pset_chunk (plist, group.dim, shape)); - HDF5_ERROR (H5Pset_deflate (plist, compression_level)); + HDF5_ERROR (H5Pset_deflate (plist, compression_lvl)); } HDF5_ERROR (dataset = H5Dcreate (outfile, datasetname.str().c_str(), filedatatype, dataspace, plist)); @@ -390,9 +393,12 @@ int WriteVarChunkedSequential (const cGH* const cctkGH, hid_t plist, dataspace, dataset; HDF5_ERROR (plist = H5Pcreate (H5P_DATASET_CREATE)); // enable compression if requested - if (compression_level) { + const int compression_lvl = request->compression_level >= 0 ? + request->compression_level : + compression_level; + if (compression_lvl) { HDF5_ERROR (H5Pset_chunk (plist, group.dim, shape)); - HDF5_ERROR (H5Pset_deflate (plist, compression_level)); + HDF5_ERROR (H5Pset_deflate (plist, compression_lvl)); } HDF5_ERROR (dataspace = H5Screate_simple (group.dim, shape, NULL)); HDF5_ERROR (dataset = H5Dcreate (outfile, datasetname.str().c_str(), @@ -535,9 +541,12 @@ int WriteVarChunkedParallel (const cGH* const cctkGH, hid_t plist, dataspace, dataset; HDF5_ERROR (plist = H5Pcreate (H5P_DATASET_CREATE)); // enable compression if requested - if (compression_level) { + const int compression_lvl = request->compression_level >= 0 ? + request->compression_level : + compression_level; + if (compression_lvl) { HDF5_ERROR (H5Pset_chunk (plist, group.dim, shape)); - HDF5_ERROR (H5Pset_deflate (plist, compression_level)); + HDF5_ERROR (H5Pset_deflate (plist, compression_lvl)); } HDF5_ERROR (dataspace = H5Screate_simple (group.dim, shape, NULL)); HDF5_ERROR (dataset = H5Dcreate (outfile, datasetname.str().c_str(), |