Lawrence Livermore National Laboratory

September 20, 2010

This is the first, official BSD Open Source Licensed release of the Silo Library.

Organization of information in this announcement

  • Bugs fixed in this release.
  • Performance-oriented features in this release.
  • Other new features in this release.
  • Important information regarding BSD vs. Legacy Licensed release tarballs.

1. Bugs fixed in this release

  • A bug where the Force Single behavior of the HDF5 driver was resulting in all objects' arrays being converted to float but then neglecting to set the associated 'datatype' member to DB_FLOAT was corrected.
  • A few cases where Silo was erroneously leaving HDF5 objects open in a file, thereby causing the file itself to be left open in HDF5 even after DBClose was called have been corrected.
  • Some problems building Silo on windows with newer compilers and with various configurations have been corrected. Thanks to Kathleen Bonnell for these fixes as well as porting a number of code updates to Windows and for laborious testing on Windows.
  • The silofile utility was re-written to NOT use magic file numbers as that proved to be unreliable. Now the tool is much more robust at identifying silo files as well as their underlying format (PDB or HDF5).
  • A bug swapping the slash character in the filename part of multi-block object block names when moving files between windows and Linux was fixed. Thanks to Al Nichols for reporting the and the fix.
  • Leaks of optional species names and colors were corrected.

2. Performance-oriented features in this release

  • To take advantage of some of the performance improvements described here, HDF5 Version 1.8.4 or newer is required.
  • A number of options for using various Virtual File Drivers (VFDs) that come pre-packaged with the HDF5 library were added to Silo. The interface to controlling these VFDs was enhanced. See documentation on DBRegisterFileOptionsSet() in the Silo 4.8 user's manual for more information. See Overview of Silo block-based VFD and Scaling Studies of Silo block-based VFD for some details.
  • There is a new, Silo-specific VFD designed specifically for BlueGene (e.g., BG/P and BG/Q) systems called the Silo block-based VFD. Use of this VFD is essential for adequate performance on BG/P systems. Thanks to Mike Collette and Richard Hedges for performing scaling studies to help identify performance issues on BG/P. Read more about this VFD and its options as well as a number of other VFDs and their options in the Silo 4.8 User's manual.
  • Silo can now optionally link with and use PDB Proper in PACT using the --with-pdb-proper=path-to-pact-libs and 'DB_PDBP' for the 'type' argument in DBCreate/DBOopen calls. Thanks to Marty Marinak for testing and Stewart Brown for guidance in implementing this feature. This feature may be particularly important to codes using PDB driver on BlueGene systems (e.g., BG/P) because the PDB Proper in PACT has undergone substantial performance tuning for those systems.
  • A new I/O performance benchmarking tool, ioperf, was added to Silo tests. This tool can be useful in comparing performance of the Poor Man's Parallel I/O strategy with any I/O library including sec2, stdio, PDB, HDF5, Silo as well as any others a user might wish to write plugins to test.
  • A new function, DBSortObjectsByOffset() was added that given a list of object names an application wishes to read from a Silo file, will return the order in which the named objects appear in the file. This is useful in optimizing read operations from the file by potentially minimizing the frequency/number of seeks as well as improving efficiency of read-ahead.
  • New options for using nameschemes instead of explicit lists of names of blocks for multi-block objects were added. These options can profoundly reduce the total size of multi-block objects as well as the root files into which they are written as well as the I/O time to read and write them.
  • A performance issue where HDF5 driver was constantly writing and rewriting cycle, time and dtime for every DBPutXXX operation was corrected.
  • A new friendly names option was added such that HDF5 datasets are in fact written as their friendly named variant in the current working directory instead of writing them in the magic /.silo directory with the friendly names being links to them. This may be important for scalability as the number of objects in the /.silo directory can otherwise grow quite large causing possible performance issues for HDF5 to handle the related metadata.

3. Other new features in this release

  • Note that Silo Version 4.8 is NOT link-time, backward compatible with any previously released version. You will need to re-compile all code that includes the Silo header file, silo.h.
  • Silo is now officially released with a BSD Open source license. Thanks to Eric Brugger for reviewing the approximately 150,000 lines of code as well as the LLNL IM Team for completing the review and release process.
  • There is a new, public, redmine bug tracker for Silo; Thanks to Sean Ahern and Oak Ridge National Labs for hosting it and thanks to Cyrus Harrison for setting it up. Before users can submit requests there, you will be required to register and create an account. But, that is a one-time operation. If you are already registered for the VisIt tracker, then you can get the Silo tracker automatically.
  • A significant reduction in compiler symbol table global namespace clutter has been eliminated from Silo reducing possibility of symbol collision when linking large applications.
  • A new error reporting level was added, DB_ALL_AND_DRVR. This level of error reporting is the same as DB_ALL except that it also includes any additional error reporting from the underlying driver.
  • Support for arrays of strings of variable length was added to a number of functions in the Fortran interface that accept arrays of strings. Thanks to Olivier Cessenat for this patch.
  • DBPUTQV which accepts a multi-component quadvar was added to the Fortran interface. Thanks to Olivier Cessenat for this implementation.
  • A restriction on the number of components of a multi-component ucdvar or quadvar was relaxed so that now, for example, DBPutUcdvar can write a variable with 100 sub-variables.
  • DBnamescheme objects now support references to external arrays of string value.
  • DBErrFunc was deprecated. Use DBErrFuncname now. Also, a new method, DBErrfunc was added to return the function pointer for the error function set in the last most-recent DBShowErrors() call.
  • A new function, DBErrlvl, was added to return the error reporting level set in the last, most-recent DBShowErrors() call.
  • The test suite was enhanced substantially to run test on a variety of HDF5 virtual file drivers and library settings.
  • Functions for catenating an array of strings into a single, semi-colon separated string and the reverse operation were added to the public API. See DBStringArrayToStringList and DBStringListToStringArray. These functions used to be solely internal to Silo but have proven to be useful for Silo applications needing to read and write arbitrary collections of strings.
  • A new function, DBSetUnknownDriverPriorities was added to control the behavior of the unknown (e.g., DB_UNKNOWN) driver when opening files of unspecified low-level format type. Previously, the Silo library had a hard-coded sequence of drivers it would try to open a file using DB_UNKNOWN driver type. Now, that sequence can be specified by the Silo application.

4. Important information regarding BSD vs Legacy Licenses

As of Version 4.8, July, 2010, the Silo source code is now available under the standard BSD Open Source License. See COPYRIGHT file for BSD notice.

The source code for two compression libraries which have been part of previous releases of the Silo library is not available under the terms of the BSD Open Source license. These are the Hzip and FPzip compression libraries.

For this reason, two different releases of the Silo source code are made available. One is the BSD Open Source release identified by the moniker 'bsd'in the distribution file names. For example, silo-4.8-bsd.tar.gz is the name of a BSD Open Source release distribution of Silo. The other is a non-Open Source release of Silo under the same licensing terms that all previous releases have been made. We call this other release a "Legacy" release. Legacy license terms are repeated below for convenience.

Copyright (c) 1994-2010, Lawrence Livermore National Security, LLC. All rights reserved. This work was produced at Lawrence Livermore National Laboratory under Contract No. DE-AC52-07NA27344 with the DOE.


This work was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the University of California nor any of their employees, makes any warranty, express or implied, or assumes any liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately-owned rights. Reference herein to any specific commercial products, process, or service by trade name, trademark, manufacturer or otherwise does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government or the University of California. The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or the University of California, and shall not be used for advertising or product endorsement purposes.


Commercialization of this product is prohibited without notifying the Department of Energy (DOE) or Lawrence Livermore National Laboratory (LLNL).

The BSD Open Source release distributions do not contain the Hzip and FPzip compression libraries while the legacy release distributions do. This means any objects within a Silo file containing data that is compressed with Hzip or FPzip from a legacy distribution will not be readable in a BSD distribution. Since compression features must be explicitly turned on by a Silo application, this impact can be easily mitigating by ensuring that Hzip and FPzip compression are used only for objects within Silo files not intended to be read by BSD releases.

For more information on availability of Hzip and FPzip compression, contact the developer, Peter Lindstrom,