Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat instrument catalyst #3459

Open
wants to merge 31 commits into
base: develop
Choose a base branch
from

Conversation

CharlesGueunet
Copy link

@CharlesGueunet CharlesGueunet commented Nov 22, 2024

This pull request should enable GEOS to perform in-situ and in-transit (co-/post-)processing using the catalyst library and notably its newest implementation based on ADIOS2.
A little about the catalyst library

Catalyst is an API specification developed for simulations (and other scientific data producers) to analyze and visualize data in situ.

The Catalyst API uses ‘C’ and is binary compatible with different implementations of the API making it easier to change the implementation at runtime.

Relationship with ParaView: Starting with 5.9, ParaView releases come with an implementation of the Catalyst API. This implementation can be used in lieu of the stub to analyze and visualize simulation results using ParaView’s data-processing and visualization capabilities
Development Steps

Add new dependencies into thirdPartyLibs repository:
GEOS-DEV/thirdPartyLibs#214

  • catalyst itself version 2.0.0
  • adios/catalyst implementation on commit 72a75a88
  • adios2 v2.9.0
  • update conduit from 0.8.2 to 0.8.6
  • update VTK to 9.4.0 for ABI namespace mangling

Changes:

  • Refactor blueprint mapping in src/coreComponents/fileIO/Outputs/BlueprintOutput to be re-usable in derived classes
  • Create a src/coreComponents/fileIO/Outputs/CatalystOutput class that inherits from BlueprintOutput in order to use the already existing conduit blueprint mapping.
  • Implement the adios specific meta-data in the conduit node
  • Support multi region
  • Updates for GCC13 compatibility
  • Design example case
  • Conduit compatibility

When trying to input the conduit::Node used by GEOS into the conduit_cpp::Node needed by catalyst we run into an incompatibility between the two conduit libraries which cannot coexist in the same translation unit. As of now and to my knowledge, catalyst does not have any ready-made solution for this type of collision with simulation codes.

This has been remedied in GEOS with a facade design pattern in the Catalyst folder.
VTK compatibility with ParaView's Catalyst implementation

When trying to use the paraview implementation of catalyst (which can be found here: ParaViewCatalyst) there is a dlopen performed at runtime on the shared library where the implementation is compiled. This shared library has a dependence on the VTK that gets compiled with ParaView. However, when the program goes looking for VTK objects it finds the symbols in the native GEOS-VTK library before the ParaView VTK. This leads to crashes due to the version differences between the two loaded VTKs.

This has been soloved by mangling GEOS's VTK version to avoid collisions.

Julien Fausty and others added 26 commits July 20, 2023 13:21
This commit introduces a new output class for running in-situ
co-processing using the catalyst API.

It also introduces a new `Catalyst` module in the fileIO folder with
specific code for dealing with `conduit` collisions.
This commit onward should be compatible with `thirdPartyLibrary` commit
acf1e3836ec1cc89996222fabe9458f1a56c1f52 and onward
@rrsettgast rrsettgast mentioned this pull request Dec 17, 2024
7 tasks
@rrsettgast
Copy link
Member

@CharlesGueunet Please migrate the description from #2250 into this PR

@CharlesGueunet
Copy link
Author

@CharlesGueunet Please migrate the description from #2250 into this PR

Done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants