Silo

A Mesh and Field I/O Library and Scientific Database

Silo is a library for reading and writing a wide variety of scientific data to binary, disk files. The files Silo produces and the data within them can be easily shared and exchanged between wholly independently developed applications running on disparate computing platforms. Consequently, Silo facilitates the development of general purpose tools for processing scientific data. One of the more popular tools that process Silo data files is the VisIt visualization tool.

Structured Rectilinear Mesh

Structured Rectilinear Mesh

Gridless Point Mesh

Gridless Point Mesh

Structured (Curvilinear) Mesh

Structured (Curvilinear) Mesh

Arbitrary Subsets

Arbitrary Subsets

Silex browser for Silo files

Silex browser for Silo files

Constructive Solid Geometry (CSG) Mesh

Constructive Solid Geometry (CSG) Mesh

Unstructured Zoo (UCD) Mesh

Unstructured Zoo (UCD) Mesh

Adaptive Mesh Refinement (AMR) Mesh

Adaptive Mesh Refinement (AMR) Mesh

Mixing Materials

Mixing Materials

Arbitrary Polyhedral Mesh

Arbitrary Polyhedral Mesh

XY Curve

XY Curve

Silo supports gridless (point) meshes, structured meshes, unstructured-zoo and unstructured-arbitrary-polyhedral meshes, block structured AMR meshes, constructive solid geometry (CSG) meshes, piecewise-constant (e.g., zone-centered) and piecewise-linear (e.g. node-centered) variables defined on the node, edge, face or volume elements of meshes as well as the decomposition of meshes into arbitrary subset hierarchies including materials and mixing materials. In addition, Silo supports a wide variety of other useful objects to address various scientific computing application needs. Although the Silo library is a serial library, it has some key features which enable it to be applied quite effectively and scalable in parallel.

Architecturally, the library is divided into two main pieces; an upper-level application programming interface (API) and a lower-level I/O implementation called a driver. Silo supports multiple I/O drivers, the two most common of which are the HDF5 (Hierarchical Data Format 5) and PDB (Portable Data Base) drivers.

Contacts

The SILO team uses the LLNL listserv list system to make announcements. To join the announcement list, send an e-mail message to LISTSERV [at] LISTSERV.LLNL.GOV with no subject line and a message body containing:

      SUBscribe silo-announce ANONYMOUS

The list is for the SILO team to make announcements to the Silo user community and is not a moderated discussion list.

For any additional questions, contact miller86 [at] llnl.gov (Mark Miller).

Brief History and Background of Silo

LLNL began developing the Silo library in the early 1990s to address a range of issues related to the storage and exchange of data among a wide variety of scientific computing applications and platforms. In the early days of scientific computing, roughly 1950–1980, simulation software development at many labs, like Livermore, invariably took the form of a number of software stovepipes.

Each big code effort included subefforts to develop supporting tools for visualization, data differencing, browsing and management. Developers working in a particular stovepipe designed every piece of software they wrote, simulation code and tools alike, to conform to a common representation for the data. In a sense, all software in a particular stovepipe was really just one big, monolithic application, typically held together by a common, binary or ASCII file format. Data exchanges across stovepipes were laborious and often achieved only by employing one or more computer scientists whose sole task in life was to write a conversion tool called a linker. Worse, each linker needed to be kept it up to date as changes were made to one or the other codes that it linked. In short, there was nothing but brute force data sharing and exchange. Furthermore, there was duplication of effort in the development of support tools for each code.

Between 1980 and 2000, an important innovation emerged, the general purpose I\O library. In fact, two variants emerged each working at a different level of abstraction. One focused on the objects of computer science. That is arrays, structs and linked lists (e.g., data structures). The other focused on the objects of computational modeling. That is structured and unstructured meshes with piecewise-constant and piecewise-linear fields. Examples of the former are CDF, HDF (HDF4 and HDF5) and PDBLib. Silo is an example of the latter type of I/O library. At the same time, Silo makes use of the former.

September, 2021
Announcing the release of version 4.11 of the Silo Library

NOTE: This is a Linux-only update. Windows will be forthcoming shortly.

Obtaining Silo


October 14, 2014
Announcing the release of version 4.10.2 of the Silo Library

NOTE: Silo-4.10.1 was removed due to a missing compatibility feature with Silo-4.10. Please use Silo-4.10.2

Obtaining Silo


October 13, 2014
Announcing the release of version 4.10.1 of the Silo Library

Obtaining Silo

Organization of information in this announcement

  1. Important information regarding this release.
  2. Bugs fixed in this release.

1. Important information regarding this release.

  • Silo-4.10.1 was removed due to a missing compatibility feature with Silo-4.10. Please use Silo-4.10.2
  • 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.1 is link-time compatible 4.10.
  • 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 problems with handling empty DBmatspecies objects.
  • Fixed problems compiling some 64 bit literal constants used for data read masks by adding 'ULL' suffix to indicate to the compiler that they should be treated as unsigned long long.
  • Fixed problems with Fortran header file generation.
  • Fixed incorrect handling of datatype for extface argument of DBPutPHZonelist in HDF5 driver (Thanks to Jeffrey Johnson for the fix!).
  • Fixed a UMR causing corrupted zonetype array data for the zonelist read as part of a DBGetUcdmesh call on the HDF5 driver.

Archive of Release Notes

 

User Guides

The following Silo user guides are available for download:

Other Information on Silo

Useful Links

Legacy Licensed Source Code BSD Open Source Licensed Source Code
(missing some compression features)
Silo-4.11.tgz (12.75 MB file size) Silo-4.11-bsd-smalltest.tgz (4.21 MB file size)
  Silo-4.11-bsd.tgz (12.68 MB file size)
Silo-4.10.2.tgz (16.9 MB file size) Silo-4.10.2-bsd-smalltest.tgz (5.4 MB file size)
  Silo-4.10.2-bsd.tgz (16.8 MB file size)
Silo-4.10.1-tar.gz (Removed 10/14/14 - See Release Notes) Silo-4.10.1-bsd-smalltest-tar.gz (Removed 10/14/14 - See Release Notes)
  Silo-4.10.1-bsd.tar.gz (Removed 10/14/14 - See Release Notes)
Silo-4.10.tgz (12.5 MB file size) Silo-4.10-bsd-smalltest.tgz (4 MB file size)
  Silo-4.10-bsd.tgz (12.5 MB file size)
Silo-4.9.1.tgz (11 MB file size) Silo-4.9.1-bsd-smalltest.tgz (3 MB file size)
  Silo-4.9.1-bsd.tgz (11 MB file size)
Silo-4.9.tgz (11 MB file size) Silo-4.9-bsd-smalltest.tgz (3 MB file size)
  Silo-4.9-bsd.tgz (11 MB file size)
Silo-4.8.tgz (12 MB file size) Silo-4.8-bsd-smalltest.tgz (3 MB file size)
  Silo-4.8-bsd.tgz (12 MB file size)
Silo-4.7.2-smalltest.tgz (3 MB file size)  
Silo-4.7.2.tgz (12 MB file size)  
Silo-4.7-smalltest.tgz (3 MB file size)  
Silo-4.7.tgz (12 MB file size)  
Silo-4.6.2.tgz (11 MB file size)  
Silo-4.6.1.tgz (3 MB file size)  

Each row in the table below is an example of the use of Silo to represent a different kind of scientific data. Each example shows a picture of the data (visualized with VisIt), describes some of the key concepts the example demonstrates, lists the set of Silo functions the example uses and provides links to both C or C++ source code used to generate the data as well as the resulting Silo data file. Almost all of the examples here use the Silo functions DBCreate, DBClose and so those calls are not explicitly mentioned.

Image (from VisIt)

Description

Links to Data Files and Source Code

Constructive Solid Geometry (CSG) Meshes

Constructive Solid Geometry (CSG) Meshes

Key concepts: Representation of Constructive Solid Geometry (CSG) meshes, variables and materials defined on CSG meshes and multiple meshes in a single file, error controls.

Silo calls: DBAddOption, DBClose, DBFreeOptlist, DBPutCSGZonelist, DBPutCsgmesh, DBPutCsgvar, DBPutMaterial, DBShowErrors, DBMakeOptlist.

Materials and Mixing Materials

Materials and Mixing Materials

Key concepts: Representation of the same mesh data on both quadrilateral (Quad) and unstructured (UCD) meshes, quadrilateral mesh with deformed (nonlinear) coordinates, representation of materials and mixing materials and material species.

Silo calls: DBAddOption, DBFreeOptlist, DBPutMaterial, DBPutMatspecies, DBPutQuadmesh, DBPutZonelist, DBMakeOptlist.

Parallel Decomposed Meshes

Parallel Decomposed Meshes

Key concepts: Representation of parallel decomposition of data using multi-block objects, grouping of blocks into 'groups' using '_visit_domain_groups' convention and other conventions, use of directories.

Silo calls: DBAddOption, DBFreeOptlist, DBMkDir, DBPutMaterial, DBPutMultimat, DBPutMultimesh, DBPutMultivar, DBPutQuadmesh, DBSetDir, DBWrite, DBMakeOptlist.

Point (Gridless) Meshes

Point (Gridless) Meshes

Key concepts: Point (gridless) meshes and variables, use of directories, quadrilateral meshes and variables.

Silo calls: DBAddOption, DBFreeOptlist, DBMkDir, DBPutMaterial, DBPutPointmesh, DBPutPointvar, DBPutQuadmesh, DBPutQuadvar, DBWrite, DBMakeOptlist.

Unstructured Zoo and Arbitrary Polyhedral Meshes

Unstructured Zoo and Arbitrary Polyhedral Meshes

Key concepts: Unstructured cell data (UCD) meshes with ordinary 'zoo type' elements and arbitrary polyhedral elements.

Silo calls: DBAddOption, DBFreeFacelist, DBFreeOptlist, DBPutFacelist, DBPutMaterial, DBPutMatspecies, DBPutQuadmesh, DBPutUcdmesh, DBPutUcdvar, DBPutZonelist, DBShowErrors, DBWrite, DBMakeOptlist, DBCalcExternalFacelist.

Block-Structured Adaptive Mesh Refinement Meshes

Block-Structured Adaptive Mesh Refinement (AMR) Meshes

Key concepts: Adaptive Mesh Refinement (AMR) meshes, Quadmeshes, Mesh Region Grouping trees (Mrgtrees) and variables (Mrgvars), Grouping Element Maps (Groupelmaps).

Without Mrgtrees, a multiblock mesh of Quadmeshes representing the different patches of an AMR hierarchy is not properly organized into an AMR hierarchy. The Silo file examples provided here contain two multi-block representations of the meshes, one without an Mrgtree and one with, so you can understand the difference and what the Mrgtree information is doing.

Silo calls: DBMkMrtree, DBAddRegion, DBAddRegionArray, DBPutMrgtree DBPutGroupelmap, DBPutMrgvar.