Announcing the release of version 4.10 of the Silo Library
Organization of information in this announcement
- Important information regarding this release.
- Bugs fixed in this release.
- New features in this release.
- Removal of Legacy Datatype'd pointers.
- Const qualification and multi-level arrays.
1. Important information regarding this release.
- 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, silo.inc, 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.