Lawrence Livermore National Laboratory

July 21, 2014
Announcing the release of version 4.10 of the Silo Library

Obtaining Silo

Organization of information in this announcement

  1. Important information regarding this release.
  2. Bugs fixed in this release.
  3. New features in this release.
  4. Removal of Legacy Datatype'd pointers.
  5. Const qualification and multi-level arrays.

1. Important information regarding this release.

  • Until the release tarballs are permanently available at the URL's mentioned above (probably next week sometime), they will be temporarily available at...
  • Version 4.10 is NOT link-time compatible with any previous version. You will need to re-compile and re-link your applications.
  • In some cases, passing a 'make check' requires adding 'LIBS=-lstdc++' to the make command line (e.g. 'make check LIBS=-lstdc++'.
  • The rocket test will fail during 'make check' on OSX. We've yet to learn how to handle dlopen and shared libs there. For similar reasons, Silo's python module has yet to be tested on a OSX.

2. Bugs fixed in this release

  • Fixed DBMakeNamescheme to automagically handle nameschemes that included external array references. In previous release, the caller was required to scan the namescheme for any extenal array references and read them from the file in a separate step. Now, this work is handled automatically by DBMakeNamescheme.
  • Fixed erroneous display of empty material and quadvar objects in browser.
  • Fixed incorrect documentation for 1-origin indexing of matspecies object.
  • Fixed missing documentation for return value for Fortran interface dbcreate/dbopen.
  • Fixed documentation for PMPIO_RankInGroup to clearly indcate caller can obtain rank of any processor in a group.
  • Changed name of CheckVersion macro to SiloCheckVersion to avoid possible name collision with similar symbols from other packages.
  • Fixed documentation for namescheme construction with external array references.
  • Fixed erroneous error message regarding missing HDF5 driver when opening no-writeable file in browser.
  • Improved manner in which empty objects are created relieving caller of several tedious constraints in setting argument lists just right to create empty objects.
  • Fixed Silo's Fortran header,, so that it is compatible with free-format 9x. Super thanks to Bob Apthorpe for this fix!
  • Fixed browser's display of some objects containing variable length lists of arrays as well as failing to include such arrays in diffs produced by silodiff.
  • Fixed handling of complex indexing expressions in external array indices in nameschemes.
  • Fixed handling of ?:: operator in nameschemes to not attempt to evaluate whichever path is not taken.
  • Fixed documentation of species example in user's manual to show correct percentages for O-1 steel.
  • Fixed a number of compilation warnings from OS X (clang) compiler.
  • Fixed misleading ***ERROR*** message from browser when exiting and command history is not able to be saved.
  • Fixed misleading display of repr_block_idx in silex.
  • Fixed documentation regarding node-ordering for DB_ZONETYPE_POLYHEDRON zones.
  • Improved ducmentation regarding polyhedral zonelists for 2D meshes.
  • Fixed error in documentation regarding DBPutCompoundarray for Fortran callers.
  • Added Fortran equiv. of DBPutQuadvar to documentation.
  • Removed silly make dependencey of silock on browser in order to build silock.
  • Fixed silex display of 'topo_dim' member for ucd meshes.
  • Fixed diff'ing of curve objects in browser when reading HDF5 data.
  • Added missing documentation for Fortran dbaddcaopt.
  • Fixed file and library version comparison (GE) functions and macros.
  • Fixed a leak in HZIP compression library.
  • Fixed some leaks in browser tool using 'diff' operator.
  • Fixed issues writing and reading Silo standard objects via custom object interface (DBMakeObject/DBWriteObject).
  • Fixed compile time knowledge of Silo version digits such that blank digits (e.g. no pre or patch digit) are zeros at compile time.

3. New features in this release

  • The entire Silo interface has been const-qualified where appropriate.
  • It is now possible for PDBLite API to be exported publicly as part of a Silo installation. Use the --enable-install-lite-headers configuration option to enable this. This frees applications which have been using PDBLite interface for some time to have to maintain their own CPP mapping macros.
  • Improved DBoptlist processing so that caller needn't worry about exceeding maximum number of options specified in DBMakeOptlist call. Now, Silo will silently reallocate to accomodate going beyond maximum option count specified.
  • Improved DBobject processing similarly so that caller needn't worry about exceeding maximum number of object components specified in DBMakeObject. Now, Silo will silently reallocate to accomodate going beyond the maximum component count specified.
  • Added support to all variable writing routines for missing data using the DBOPT_MISSING_VALUE optlist option. Support for this Silo feature has also been added to VisIt and will be available in VisIt 2.8.
  • Added support for data producer to specify ghosting of meshes by writing extra mesh (or generic var) data and using DBOPT_GHOST_NODE_LABELS and/or DBOPT_GHOST_ZONE_LABELS optlist options. This is as an alternative to hi/lo indexing method previously used for ghost zone enumeration. Support for this Silo feature is not yet available in VisIt but will be added after VisIt 2.8 is released.
  • Added support for data producer to specify alternative node or zone numberings using DBOPT_ALT_ZONENUM_VARS and DBOPT_ALT_NODENUM_VARS optlist options. Support for this Silo feature is not yet available in VisIt but will be added after VisIt 2.8 is released.
  • Changed browser's default setting to open files for read-only instead of read-write.
  • Added ability to open a Silo "file" from a buffer of bytes (e.g. the File-In-Core). Note, this is different from the "core" file driver where a file is first read entirely into core before it is opened because it does not require or start from a file on disk.
  • Added a convenience method, DBOpenByBcast(), for parallel applications to open and process a root or master file. This method will open the file on a single processor and then broadcast its entire contents to all processors all of which turn around and open the resulting buffer of bytes as a Silo file. Note that this requires HDF5-1.8.10 or later.
  • Added support for Silo curves in polar coordinates.
  • Improved time and space performance of DBGetMultiXXX calls' processing long lists of catenated strings at large block counts. Reads of legacy files containing these objects should be faster. Writes of such objects should be faster too.
  • DB[Set|Get]DataReadMask using long type was replaced with DB[Set|Get]DataReadMask2 using long long type.
  • DBVersionDigits and DBFileVersionDigits were added to return integer major, minor, patch and pre-release version digits.
  • DBVersionGEFileVersion was added to compare library version with file version.
  • JSON support was added to Silo using the json-c library. This interface permits Silo applications to manipulate their Silo objects as JSON objects. The implementation includes extensions to json-c for efficient handling of problem-sized array data in Silo objects. This interface should be considered experimental and is likely to change, perhaps in dramatic ways, in future releases.
  • Improved display of character array data in silex.
  • netCDF driver was enabled on Windows.
  • By default, Silo no longer configures the silex browser. You have to explicitly enable the silex browser using the --enable-silex configuration switch (Thanks to Alex Henrie).
  • mkfort tool which produces fortran include files was enhanced to properly format both F77 and F9x header files (Thanks to Bob Apthorpe).
  • There are now two separate Fortran include files; one for F77 and one for F9x.
  • Improved silodiff tool's ability to process directories. It previously required files in both directories to have the same names. Now, it simply diffs files in two directories in reverse order of time of last modification.
  • Enhanced both PDB and HDF5 drivers to support customization of standard objects; that is the ability to create an object via DBMakeObject/DBWriteObject that would have otherwise been created via a DBPutXxxx (e.g. DBPutQuadvar) call, such that callers of DBGetXxxx will see the object as they ordinarily would. This permits Silo clients to create user-defined customizations to Silo's standard objects.

4. Removal of Legacy Datatype'd pointers.

In a Nutshell...

This applies mainly to very old Silo applications prior to version 4.6. Explicitly casting to float** two-level arrays in calls to some of the older Silo functions (e.g. DBPutUcd{mesh|var} or DBPutQuad{mesh|var}) is no longer required and will now result in compiler warnings for C callers and compiler errors for C++ callers.

The details...

In the early years of Silo's development, several functions designed to accept two-level arrays of arbitrary type nonetheless defined the function's formal arguments as float** instead of void**. These were changed to void** years ago. However, the configuration option, --enable-legacy-datatyped-pointers, was provided to maintain backward compatability with this old interface.

As part of the work to const qualify the Silo interface, continuing to maintain this backward compatability was becoming too complex. The configuration option --enable-legacy-datatyped-pointers has been eliminated along with the convenience macros DB_DTPTRx (for x=1, 2 and 3).

If you have been in the habit of using the --enable-legacy-datatyped-pointers configuration option and are wondering what will happen when you try to use Silo 4.10 in your application, the most likely biggest issue you will face is to remove cases where have explicitly cast certain array arguments in Silo calls to float**.

5. Const qualification and multi-level arrays.

In a Nutshell...

  • Wherever Silo can accept a two-level array of arbitrary type (e.g. float**, int**, double**), the function's formal parameter is defined to be a void const * instead of a void const * const *. It is nonetheless still treated as a void const * const * in all other respects.
  • Wherever Silo accepts a constant array of constant strings (char const * const *), C callers will be required to explicitly cast char** and char const ** arguments to avoid compiler warnings.

The details...

Please refer to this discussion for a detailed explanation.

Archive of Release Notes