Skip to content

Releases: llnl/conduit

v0.9.5

10 Sep 22:33
8543892

Choose a tag to compare

0.9.5 Release Highlights

(adapted from Conduit's Changelog )

Released 2025-09-10

Added

Blueprint

  • Added support for unstructured topologies with mixed shape type in the conduit::blueprint::mesh::partition() and conduit::blueprint::mesh::utils::topology::iterate_elements() functions. They work with mixed shape types, including polyhedra.
  • Added conduit::blueprint::mesh::utils::topology::compute_mesh_info() function to compute basic information about a mesh such as extents and edge lengths.
  • Added conduit::blueprint::mesh::utils::topology::Quantizer class to compute a quantized index for a point.
  • Added bent_multi_grid_amr example mesh. This enhances the bent_multi_grid example to allow a user to specify, in one of the domains, a nested domain with its ID and refinement ratio. This will allow example AMR meshes.

Relay

  • Added flush method to relay::IOHandle interface. Semantics differ between concrete implementations.
  • Added flush support to relay::BasicIOHandle, allows write to file system without closing the handle.
  • Added flush support to relay::HDF5Handle, if hdf5 file handle is open, invokes H5Fflush() with H5F_SCOPE_LOCAL.
  • Added namescheme read and write support to the Relay Silo/Overlink Reader/Writer.
  • Added support for block types or unified types to the Relay Silo/Overlink Reader/Writer.

Changed

General

  • Updates to spack uberenv recipes for macOS 15.5.

Blueprint

  • The conduit::blueprint::mesh::topology::dims() function was changed so it will return the maximum topological dimension of the shape types from the shape_map for a mixed shape.
  • Enhanced the conduit::blueprint::mesh::examples::tiled() function so it can accept mesh tiles containing mixed shape types for generating 2D tiled output.
  • Adjacency set construction was altered so points are sorted spatially using the Quantizer class.

Fixed

Relay

  • Fixed an issue with the Overlink Writer preventing it from correctly writing out data in the n files to m domains case.

0.9.4

03 Apr 17:12
98a57db

Choose a tag to compare

0.9.4 Release Highlights

(adapted from Conduit's Changelog )

Released 2025-04-03

Added

Conduit

  • Added conduit::utils::memory_usage helper.
  • Added an example demonstrating a strategy to use Umpire with Conduit's allocators.
  • Added conduit::utils::memory_usage helper.
  • Added extra unit tests for native signed and unsigned Node set methods.
  • Added support to read a HOST_CONFIG environment variable to allow pip installs. When set, pip install will pass a host config file to set CMake options.

Blueprint

  • Added conduit::blueprint::<mpi>::mesh::state(), conduit::blueprint::<mpi>::mesh::cycle(), and conduit::blueprint::<mpi>::mesh::time(), utilities for getting state information from meshes.
  • Added conduit.blueprint.mpi, conduit.blueprint.mpi.mesh, and conduit.blueprint.mpi.mesh.examples modules to the Python interface.

Relay

  • Added h5z-zfp compression support to relay io hdf5 methods.
  • Added conduit::relay::<mpi>::io::blueprint::generate_root_filename(), which takes the same arguments as save_mesh or write_mesh and produces the name of the root file that would be generated by a call to save_mesh or write_mesh.
  • Added conduit::relay::mpi::memory_usage and conduit::relay::mpi::memory_stats helpers.
  • Added conduit.relay.mpi.io and conduit.relay.mpi.io.blueprint modules to the Python interface.
  • Added v1120 and v1140 options to hdf5 libver settings to support 1.12 and 1.14 libver upper range.

Changed

Conduit

  • Updated build system to use blt 0.7.0.
  • Changed Conduit memory handler callbacks from function pointers to std::function objects, allowing users more flexibility in dealing with different memory spaces.
  • Adjusted how imported CMake target conduit::conduit_python locates python headers for case where Conduit's python module is installed as part of the overall conduit install.

Relay

  • Ported relay and blueprint zfp support to use zfp 1.0 api. Added extra meta data to zfparray blueprint protocol to support roundtrip wrapping and unwrapping with zfp 1.0 api.
  • Added conduit::relay::mpi::memory_usage and conduit::relay::mpi::memory_stats helpers.

Fixed

Relay

  • Fixed an issue with the relay hdf5 detection heuristic on windows.
  • Fixed a bug with path creation logic that impact reading mesh blueprint data on windows.

0.9.3

27 Jan 16:49
2eec1ad

Choose a tag to compare

0.9.3 Release Highlights

(adapted from Conduit's Changelog )

Released 2025-01-27

Added

Conduit

  • Added conduit_yaml and conduit_base64_yaml protocol support.
  • Added support to detect .yml files as yaml protocol.

Blueprint

  • Added conduit::blueprint::mesh::examples:generate driver functions that supports creating any blueprint example mesh with options.
  • Added conduit::blueprint::mesh::examples:generate_default_options functions that provide default options values for conduit::blueprint::mesh::examples:generate.
  • Added python API support for conduit::blueprint::mesh::examples:generate and conduit::blueprint::mesh::examples:generate_default_options.
  • Added gyre example mesh, which provides a simple velocity vector field.
  • Added bent_multi_grid example mesh, which provides a multi-grid that can contain enhanced and reduced connectivity. bent_multi_grid can produce meshes like the example at http://visitusers.org/index.php?title=Representing_ghost_data#Enhanced_and_Reduced_Connectivity_Zones .
  • Added new utilities for material sets: conduit::blueprint::mesh::matset::count_zones_from_matset(), conduit::blueprint::mesh::matset::is_material_in_zone(), and conduit::blueprint::mesh::matset::create_reverse_material_map().
  • Added a new example, conduit::blueprint::mesh::examples::venn_specsets(), which covers the breadth of species set representations.

Relay

  • Added limited support for species sets for Silo/Overlink I/O. Multi-buffer element-dominant species sets can be written to Silo and the same can be read from Silo. Additional species set flavors will come online in a later release.
  • Added support for conduit_yaml and conduit_base64_yaml I/O cases.
  • Standardized the way that Relay Silo Save handles name collisions and non-idiomatic Silo names.

Changed

Conduit

  • Changed the MPI CMake target used by conduit from MPI:MPI_CXX to MPI:MPI_C to provide better compatibility with downstream tools.
  • Added vendored yyjson v0.10.0 as new and default JSON parser. yyjson has an MIT license that is compatible with Debian's Free Software Guidelines, where RapidJSON is not (https://wiki.debian.org/qa.debian.org/jsonevil). You can still use RapidJSON by setting the new CMake option ENABLE_YYJSON to FALSE.
  • The DataType::equals() method now correctly takes striding into account.

Blueprint

  • Certain algorithms that use MPI tags had their tag values lowered since some MPI implementations do not support large values.
  • Changed the name of conduit::blueprint::mesh::matset::to_sparse_by_element() to conduit::blueprint::mesh::matset::to_uni_buffer_by_element() to be more consistent with similar function names.
  • Expanded the ways species sets can be represented in Blueprint to include sparse by element and sparse by material representations, much like material sets.
  • Updated conduit.relay.io.blueprint.{load_mesh|read_mesh} to support reading and writing Silo files when Conduit is built with Silo support.
  • Updated conduit.relay.io.blueprint.{load_mesh|read_mesh} to use improved logic to auto detect the format (hdf5 , silo, yaml, or json) of mesh blueprint root files. Added silo logic, and fixed prior logic that could confuse yaml as json files due to format specifiers in partition pattern strings.

Relay

  • User-supplied warning and error handlers are suspended during conduit::relay::communicate_using_schema::execute() so exceptions will be thrown properly when there is an MPI error. The handlers are restored before the execute method returns.
  • conduit::relay::communicate_using_schema::execute() flushes logs as they are generated, in case of error. This is mostly to facilitate internal debugging.
  • Changes were made to how Relay queries the upper limit for MPI tags to work around problems on some systems.
  • Rewrote conduit::blueprint::mesh::specset::to_silo() to allow it to support specsets that do not use all the materials in the associated matset.

0.9.2

21 May 23:01
ad86e31

Choose a tag to compare

0.9.2 Release Highlights

(adapted from Conduit's Changelog )

Released 2024-05-21

Added

Relay

  • Added support for Blueprint + Silo round trip for axis units and labels.
  • Added support for reading Silo column major data as strided structured Blueprint data.
  • Added support for reading a much wider set of Silo meshes, beyond multimeshes, multivars, etc.

Changed

Conduit

  • Removed cmake use of distutils for python introspection.

Blueprint

  • Fixed partitioner so it reverses vertex order as needed in polyhedral face definitions when extracting mesh elements.
  • Changed conduit::blueprint::mesh::partition_map_back() function so it will attempt to reuse existing field memory when mapping fields back. This permits partition_map_back() to send data from a partitioned mesh into the original mesh where fields were provided from a host code using Node::set_external().
  • Changed generate_sides to be robust to the case where no fields exist.

Relay

  • Changed conduit::relay::mpi::communicate_using_schema to avoid an invalid tag MPI error message on some MPI distributions.

Fixed

Relay

  • Fixed Relay I/O HDF5 DataSpace handle leak.

0.9.1

09 Feb 22:35
6d60cf7

Choose a tag to compare

0.9.1 Release Highlights

(adapted from Conduit's Changelog)

Changed

Conduit

  • Relaxed strict header check for C++14 back to C++11. A downstream consumer of Conduit has C++11 hardcoded into their build system and patching for related deployments is intractable.
  • Restore logic to avoid fused mpi c++ and fortran flags that can undermine blt's mpi smoke test.

Blueprint

  • Fixed missing build dependency relationship with the python conduit blueprint table examples module.
  • Fixed partitioner so it does not duplicate faces when combining polyhedral meshes.

Added

Relay

  • Added polygonal support to Blueprint Silo I/O.

0.9.0

05 Feb 22:10
2aa7db4

Choose a tag to compare

0.9.0 Release Highlights

(adapted from Conduit's Changelog)

Added

General

  • Added conduit_json_external protocol. Creates a json schema representation of a node that includes all addresses that the node is pointing to. Parsing this schema will create a node equivalent to set_external().
  • Added a conduit_generate_data executable that can generate datasets using the tiled() and braid() functions and save the datasets to files.
  • Added helpers that support enhanced debugging of Conduit Node objects in several debuggers.
  • Added the ability to set values via a DataAccessor and DataAccessor to string methods.
  • Added explicit set methods to DataArray, and the ability to set DataArray values from a DataAccessor.

Relay

  • Added extensive Mesh Blueprint Silo I/O support including, including options for Overlink Silo conventions. This capability allows Silo files to be used as a close peer to the Blueprint HDF5 I/O options.
  • Added ability to read N-dimensional hyperslabs from HDF5 leaf arrays into linear memory arrays.
  • Added conduit.relay.io.silo to the Python interface.

Blueprint

  • Added a conduit::blueprint::mesh::examples::tiled() function that can generate meshes by repeating a tiled pattern.
  • Added a conduit::blueprint::mpi::mesh::utils::adjset::compare_pointwise() function that can compare adjsets for multi-domain meshes in parallel. The function is used to diagnose adjsets with points that are out of order on either side of the boundary. The comparison is done point by point within each group and it checks to ensure that the points reference the same spatial location.
  • Added a conduit::blueprint::mesh::utils::reorder() function that can accept a vector of element ids and create a reordered topology. The points and coordinates are re-ordered according to their first use in the new element ordering.
  • Added a conduit::blueprint::mesh::utils::topology::spatial_ordering() function that takes a topology and computes centroids for each element, passes them through a kdtree, and returns the new element ordering. The new ordering can be used with the reorder() function.
  • Added a conduit::blueprint::mesh::utils::topology::hilbert_ordering() function that computes a new order for a topology's elements based on their centroids and a Hilbert curve. The new ordering can be used with the reorder() function.
  • Added a conduit::blueprint::mesh::utils::slice_array() function that can slice Conduit nodes that contain arrays. A new node with the same type is created but it contains only the selected indices.
  • Added a conduit::blueprint::mesh::utils::slice_field() function. It is like slice_array() but it can handle the mcarray protocol. This functionality was generalized from the partitioner.
  • Added a conduit::blueprint::mesh::utils::topology::unstructured::rewrite_connectivity() function that will rewrite a topology's connectivity in terms of a different coordset. The PointQuery is used internally to search for equivalent coordinates in the new coordset.
  • Added a conduit::blueprint::mesh::utils::copy_fields() function that helps copy fields from one fields node to another.
  • Added a conduit::blueprint::mesh::utils::convert() function that converts a list of nodes to a desired data type.
  • Added a conduit::blueprint::mesh::generate_boundary_partition_field() function that can take a topology and a partition field and generate a field for a related boundary topology. This is helpful when partitioning a boundary topology in the same manner as its parent topology.
  • Added blueprint.mesh.examples.strided_structured to the blueprint python module.
  • Added conduit::blueprint::mesh::utils::adjset::to_topo() function to make new point mesh topologies for each group of an adjacency set. This permits each group to be visualized as a set of points in VisIt. The groups for each side of the domain interface can be compared since they are separate point meshes.
  • Added conduit::blueprint::mesh::utils::adjset::is_canonical() function to check whether the group names in an adjacency set are canonical.
  • Added more Mesh Blueprint docs.

Changed

General

  • Conduit now requires C++14 and CMake 3.21 or newer.
  • Improved the efficiency of json parsing logic.
  • The conduit_relay_io_convert program was enhanced so it can read/write Blueprint root files by passing "blueprint" for the read or write protocols.
  • The conduit_adjset_validate program now writes a point mesh for each adjset groups if the -output argument is supplied.
  • Updated to BLT 0.6.1
  • Updated Python logic hybrid module build logic to use pip and setuptools. Removed use of distutils.

Blueprint

  • The conduit::blueprint::mpi::mesh::partition_map_back() function was enhanced so it accepts a "field_prefix" value in its options. The prefix is used when looking for the global_vertex_ids field, which could have been created with a prefix by the same option in the conduit::blueprint::mpi::mesh::generate_partition_field() function.
  • The conduit::blueprint::mesh::utils::ShapeType class was enhanced so it can take topologies other than unstructured.
  • The conduit::blueprint::mesh::utils::topology::unstructured::points() function was changed so it takes an optional argument that can turn off point uniqueness and sorting so the method can return points for an element as they appear in the connectivity, for non-polyhedral shapes.
  • Removed deprecated use of npts_z !=0 for 2D shape types in conduit::blueprint::mesh::examples::{braid,basic,grid}. These cases now issue a CONDUIT_ERROR.
  • Removed volume_dependent entry in specsets. Species ratios and mass fractions are innately volume independent.

Relay

  • Relay Mesh Blueprint I/O methods (conduit::relay::io::blueprint::{save,write}_mesh()) now default to hdf5 protocol if Conduit is built with hdf5 support.

Fixed

General

  • The Fortran node procedures for fetching integer pointers are now associated with the correct routines.

Blueprint

  • The conduit::blueprint::mesh::partition() function no longer issues an error when it receives a "maxshare" adjset.
  • The partitioner is better about outputting a "material_map" node for matsets. The "material_map" node is optional for some varieties of matset but they can also help the conduit::blueprint::mesh::matset::to_silo() function generate the right material numbers when a domain does not contain all materials.
  • The conduit::Node::swap() and conduit::Node::move() functions no longer cause node names to disappear.
  • The conduit::blueprint::mesh::utils::kdtree could erroneously return that points were not found when one of the coordset dimensions had a very narrow range of values. This could happen with planar 2D geometries embedded in 3D, such as inside a MatchQuery during adjacency set creation.
  • The conduit::blueprint::mpi::mesh::generate_partition_field() function was not treating polyhedral topologies correctly, leading to unusable partitioning fields.
  • The point merging algorithm in the Blueprint partitioner was corrected so it should no longer produce occasional duplicate points when merging coordsets.

0.8.8

18 May 18:35
733ac4e

Choose a tag to compare

0.8.8 Release Highlights

(adapted from Conduit's Changelog)

Added

General

  • Added Python 3 Stable ABI compatibility (Py_LIMITED_API) build support. Enabled by default when building against Python 3.11 or newer.
  • Added conduit_adjset_validate tool which can read root files for a multiple domain dataset and check whether the adjsets (vertex or element associations) in it are correct. Any errors are printed to the console.

Blueprint

  • Added PointQuery class that can query points in a topology and return whether the query points hit a point in that topology's coordset. There are serial and parallel versions of this class. In parallel, the query domain may exist on a different MPI rank and the result will be communicated to the calling rank.
  • Added MatchQuery class that can be used to ask remote domains whether they contain an entity given using a set of point ids in the current rank's topology. The query builds up a query topology that it sends to the neighboring rank (if the query domain is not owned by the current MPI rank) and the topology is matched against the remote topology by matching points in the remote coordset. The results are returned to the calling MPI rank and can be retrieved using the query.
  • Added TopologyBuilder class that can be used to build up a new topology subset from a source topology. The new topology shape does not have to match the original topology shape. A new coordset is created based on the points that are referenced from the original topology.
  • Added topology::search function that allows one topology to be searched for in another topology. The topologies must have the same shape type and their respective coordsets can have points in different orders. The shapes are matched using coordinate matching.
  • Added adjset::validate function which tests adjacency sets for correctness and flags any errors in a Conduit node. There are serial and parallel versions of the function. The functions apply PointQuery for vertex association adjsets and MatchQuery for element association adjsets. Each domain's adjset will make queries to its neighboring domains as to whether the vertex or element of interest exists in the neighbor's topology.
  • Added utils::kdtree class that can be used to accelerate point lookups for coordsets.
  • Field selections for the conduit::blueprint::mesh::partition() function support a new destination_ranks property that contains a list of integers that map domain numbers to MPI ranks. This property tells the partitioner the ranks where it should place each domain. If the property is not supplied, the partitioner is free to place domains as before.

Fixed

General

  • Added explicit control for OpenMP Features with CMake ENABLE_OPENMP option (default = OFF). Adds CONDUIT_USE_OPENMP define to conduit_config.h. Guards all use of OpenMP with CONDUIT_USE_OPENMP. Prior to these guards, downstream users could enable OpenMP and macros could evaluate inconsistently with how Conduit was built causing OpenMP related linking errors.

Blueprint

  • Functions such as generate_corners or generate_faces that accept adjsets now include a filtering stage to improve adjset quality. This filtering stage uses PointQuery and MatchQuery to ensure that entities referenced in a remote domain actually exist in the neighboring domain.

0.8.7

23 Mar 20:24
2be2597

Choose a tag to compare

0.8.7 Release Highlights

(adapted from Conduit's Changelog)

Added

General

  • Added public default and copy constructor to DataAccessor. Enables more flexibility with initializing DataAccessors from Nodes.
  • Added Node.name(), Node.path(), Schema.name(), and Schema.path() to Python API.
  • Added Node.as_index_t_ptr()
  • Added conduit::execution namespace, which contains for_all() and sort() functions.
  • Added DataType support to the Fortran API

Blueprint

  • Added conduit::blueprint::mpi::mesh::distribute, which enables sending mesh domains to arbitrary MPI ranks (suppo
  • Added conduit::blueprint::mesh::utils::NDIndex class. Instantiate with shape, offset, and stride in array or conduit::Node. Get flatindex for N-D coordinates.
  • Added conduit::blueprint::o2mrelation::O2MIndex class. Instantiate with O2M relation Node; get flatindex for a given one_index and many_index. Alternative to Java-style iterator.
  • Added conduit::blueprint::examples::mesh::rz_cylinder function that generates example 2D cylindrical (RZ) meshes.

Fixed

General

  • Fixed a logic issue undermining C++ type mapping when using CMake 3.26.

Blueprint

  • Performance improvements to Mesh Blueprint topology metadata, used by generate_points, generate_sides, etc. The class was rewritten and the old one was moved to conduit::blueprint::mesh::utils::reference::TopologyMetadata. The new implementation is faster, often about 6-20x depending on options.
  • Performance improvements to O2M Iterators.
  • Performance improvements to functions that underpin centroid generation.

Relay

  • Fixed MPI baton logic error in conduit::relay::io::blueprint::save_mesh() that caused MPI tasks to serialize writes to files in the N domains to M files case. Fix restores parallel write performance. This bug did not impact cases where where N domains were written to N files (N to N) or N domains were written to a single file (N to 1).

Changed

General

  • Changed diff of string types to respect null terminated strings instead of described length
  • Improved diff_compatible of string types to look for substring match, to implement expected compatible semantics.

Blueprint

  • Changed the recommended axis order for 2D cylindrical meshes to be Z as the first axis, and R as the second. This choice aligns with expected visualization cases where Z varies with the horizontal axis and R varies with the vertical axis.

0.8.6

11 Jan 22:22
5796042

Choose a tag to compare

0.8.6 Release Highlights

(adapted from Conduit's Changelog)

Added

General

  • Added C++ int DataType::sizeof_index_t() and C int conduit_datatype_sizeof_index_t() methods to provide a stable ABI to determine configured size (number of bytes) of Conduit's index_t type.

Fixed

General

  • Build fixes for Conda Forge (mpi -fallow-argument-mismatch clang protection)

Relay

  • Fixed a directory creation bug in relay::io::blueprint::{save_mesh|write_mesh} that occurred with sparse topologies with no domains on rank 0.
  • Fixed a bug in relay::io::blueprint::{save_mesh|write_mesh} with the suffix=cycle option that could cause int max to erroneously be used as the cycle number in the output directory.

0.8.5

23 Dec 00:14
fa68b4f

Choose a tag to compare

0.8.5 Release Highlights

(adapted from Conduit's Changelog)

Added

General

  • Added Node::move and Node::swap methods, which provide efficient ways to help build Node trees by consuming other Nodes.
  • Added Node::reset methods to C and Fortran interfaces.
  • Added initial optional support for Caliper performance annotations.
  • Added Python support for Node.set and Node.set_external with a schema and external buffer.

Blueprint

  • Added support for Wedges and Pyramids.
  • Added helper function blueprint::mesh::generate_strip to generate a 2D "strip mesh" topology, and dependent other Blueprint mesh parts, from a 1D mesh.

Changed

General

  • Changed Schema::has_path() (and transitively Node::has_path() ) to ignore leading / s.
  • Updated to BLT v0.5.2

Relay

  • When using HDF5 1.10 or newer, default to use libver 1.8 when creating HDF5 files for wider read compatibly. This setting can be controlled via the hdf5 relay option libver, accepted values: default, none, latest, v108, and v110.

Relay

  • Updated C++ and Python tutorial docs for Compatible Schemas with a new example to outline the most common use case.

Fixed

Blueprint

  • Fixed bug with blueprint::mesh::examples::strided_structured so it correctly generates a coordset with padding
  • Fixes (correctness and performance) to topology::unstructured::generate_offsets
  • Updated conduit.relay.io.blueprint.{load_mesh|read_mesh} to use improved logic to auto detect the format (hdf5 ,yaml, or json) of mesh blueprint root files.
  • Leading / s in mesh tree paths no longer undermine conduit.relay.io.blueprint.{load_mesh|read_mesh} reading json and yaml flavored files.
  • Fixed indexing and offsets in blueprint mixed element topology examples.

Relay

  • Leading / s in tree paths no longer undermine io::IOHandle reads for conduit_bin, json, conduit_json, conduit_base64_json, and yaml flavored files.
  • Updated conduit.relay.io.blueprint.{load_mesh|read_mesh} to only the read the necessary subset of root file entries. Updated MPI version to only read root file entries on rank 0 and broadcast them to other ranks.
  • Fixed write compatibly check in relay::mpi::gather, relay::mpi::all_gather, and relay::mpi::broadcast_using_schema. Node compatible check is not commutative and checks in leaf zero-copy logic were reversed.