Catalyst V2 MPI example/documentation.


I’m starting to look into upgrading the Catalyst support on the code_saturne CDF code to Catalyst-2, and there are one or 2 things I can’t mange to find in the documentation and examples:

  • I recall reading something about how an MPI communicator info can be passed to Catalyst-2 or a Conduit node, but can’t find it again. I don’t see anything about this grepping the examples. In most cases, we use MPI_COMM_WORLD, but in some cases (involving code coupling), we may use another communicator, so I assume being able to control this is important (in Catalyst “legacy”, we do control this).

  • I see that ParaView uses its own Conduit C++ wrappers, and calls the Conduit C interface but not the c++ one. And the headers installed with Catalyst only include the C headers. Is this by design, or due to code maturity issues ? I was thinking that using Conduit, I could also easily add support in the future for other libraries (such as Sensei or Ascent) by sharing part of the code, but I guess for this I would need to use the C API ? Nothing urgent here, just trying to future-proof the code.

This is because we want to ensure that what is exposed is ABI compatible. Making the core Conduit C++ ABI compatible is not easy and it will be too hard to ensure that it stays compatible. Instead, we limit everything to the C wrappers and then rewrap those in C++ so that the ABI surface is far more easily controlled.

@utkarsh.ayachit for the first question.

Communicator can be passed as catalyst/mpi_comm, see ref. Note, you need to pass a fortran handle so use MPI_Comm_c2f to generate a fortran handle from a C handle.

Ok thanks. I had forgotten about the joys of how to ensure binary compatibility between different compiler and library versions…