Catalyst 2.0: adding support for custom mesh blueprints

I don’t have a specific question for the forum here, but more of a description of my current approach for implementing a new Catalyst adaptor. Figured I’ll share it with the broader community and see if people have any specific thoughts / opinions about my approach.


I am currently adding support for the IOSS library to interface with Catalyst 2.0 so that all codes using IOSS can directly use Catalyst with ease. IOSS has a very well-defined data model. The underlying Database API – which is what I am looking into implementing to interface with Catalyst – is based on that data model. There are two ways going about implementing this database for Catalyst:

  1. We map the datastructures such that they can conform to the Conduit Mesh Blueprint and then pass that over to Calalyst.
  2. We create a new mesh blueprint, say IOSS Mesh Blueprint, that is more closely aligned with the Ioss data model.

I am leaning towards option 2 for following reasons:

  • avoids any data transformation to pass data to Catalyst – should give some performance benetit
  • since ParaView/VTK already has an Ioss reader, the reader can be easily taught to support this new database type that reads the Ioss datastructures serialized to Conduit node instead of a file on disk.

The ParaView Catalyst Blueprint already supports channel/type property which currently only suppose mesh. This will require adding support for another type, ioss.

No opinion yet but interested in seeing what you’re going to do and how this would work within the Catalyst ecosystem.

Cool. Honestly, I have no idea how this pans out either. But I think it’s worth experimenting. This can open up a new way of leveraging extensible IO libraries like IOSS, Adios for interfacing with Catalyst.

This may be a good time to explore the relationship between Fides (Fides User Guide — Fides documentation) and Catalyst 2.0. The Fides data model is in some way much more flexible than the blueprint approach, in the sense that it is defined using a combination of runtime (json) and compile time definitions (VTK-m). Whereas blueprint is all compile time AFAIK. Can we do something similar (or same) for Catalyst?

sigh! found a drawback with this approach. While a custom blueprint will work, it does require a custom “reader” on the Catalyst side. The IOSS API is deep-copy only thus put data into a database and reading back from it will cause a deep copy. I will discuss with the IOSS developers to see if there a way to extend the database API to support it.