-
Notifications
You must be signed in to change notification settings - Fork 24
Namescheme'd_Multi block_Objects_with_EmptyMissing_Blocks
Nameschemes are a scalable solution for multi-block objects. Instead of storing a massive, explicit list of block (and file) names for each block of a mult-block object, nameschemes enable the use of a printf-like format string and block (and file) names to be generated on demand.
Often, data producers have a number of related multi-block objects but for which some blocks are not present. Prior to nameschemes, when multi-block objects hold an explicit list of names, the keyword “EMPTY” as a block name was used to signify empty/missing blocks. With nameschemes, that is no longer possible. Empty (or missing) blocks present problems in the presence of nameschemes because their presence (which is often randomly distributed throughout the entire list of block names) is not easily incorporated into a simple namescheme.
The solution is to allow the data producer to simply create Silo objects in the file that are empty. That way, when a reader attempts to access a block of a namescheme’d multi-block object and discovers it has read an “emtpy” object, it can safely ignore the object and move onto the next block.
However, this strategy can introduce a potential performance issue for post-processors like VisIt when initially opening a file. The problem for VisIt is that opening a file should be fast. In order to complete an open, VisIt requires various bits of metadata about Silo objects in the file before it can properly populate its GUI menus. Unfortunately, the essential metadata VisIt needs is distributed between multi-block objects and any one of the individual blocks. For example, a multi-var object in Silo does not have information regarding the variable’s centering. To get it, VisIt must find and read an individual block and obtain the centering from that object.
Ordinarily, all that would be necessary is for VisIt to find and read the first block. However, matters are more complicated if multi-block objects contain emtpy/missing blocks. VisIt cannot assume the first block is non-empty. In the older style of multi-block objects where there was an explicit list of block (and file) names, VisIt would simply scan through the list for the first entry that did not contain the keyword “EMPTY”. With namescheme’d multi-block objects, this is no longer possible.
However, by carefully desinging the way Silo handles true “empty” objects, we can assure that even an “empty” Silo object, though it contains no real data, will hold all of the essential metadata a post-processor is likely to need.