0.9.6 Release Highlights
(adapted from Conduit's Changelog )
Released 2026-04-14
Added
Conduit
- Added
CONDUIT_VERSION_VALUEmacro that encodes the current Conduit version as an integer. - Added a macro to make an integer a version number from major, minor, patch version numbers. Example:
CONDUIT_MAKE_VERSION_VALUE(0, 9, 6). This macro can be used to conditionally compile code that is valid for specific versions of Conduit. - Added
setmethods toDataAccessorthat takeDataArraysandDataAccessors. - Added optional device execution support via RAJA and Umpire.
- Added
conduit_bin_yamlprotocol case toNode::load()andNode::save(). Also addedconduit_bin_json, which does the same thing asconduit_bin(creates a json schema file to go with theconduit_binfile). - Fixed an issue in
Node::swap()orNode::move()where child nodes moved to a new parent did not point to their new parent. This caused operations that callNode::parent()to traverse upwards to malfunction. - Added
Node::as_index_t().
Blueprint
- Finished
bent_multi_grid_amrmesh by adding adjacency sets between spatially adjacent domains at the same level of refinement. - Added
conduit::blueprint::mesh::convert()function that can convert among various mesh formats and generate derived meshes such as points, centroids, faces, sides, and corners. - Added a mode within the new
convert()function that allows it to convert polyhedral hex meshes into unstructured hex meshes. - Sped up
conduit::blueprint::mesh::topology::unstructured::to_polygonal()algorithm and added support for mixed element types. - Improved support for "mixed" element types in
conduit::blueprint::mesh::utils::ShapeTypeand also removed a string member to speed up construction. - Added 2D block rotation support in
conduit::blueprint::mpi::mesh::to_polygonal(). - Added field data to the
conduit::blueprint::mpi::mesh::to_polygonal()transformation, including communication of vertex data on hanging nodes. - Added
conduit::blueprint::mesh::specset::to_multi_buffer_full(),conduit::blueprint::mesh::specset::to_uni_buffer_by_element(), andconduit::blueprint::mesh::specset::to_multi_buffer_by_material(), which are converters that take species sets between the three supported species set/material set representations. - Added
conduit::blueprint::mesh::specset::is_multi_buffer(),conduit::blueprint::mesh::specset::is_uni_buffer(),conduit::blueprint::mesh::specset::get_num_species_for_material(), andconduit::blueprint::mesh::specset::get_material_names(), which are simple species set utilities. - Added
conduit::blueprint::mesh::matset::MatsetAccessor, a class for fetching material set/field/species set data independent of material set layout. It provides methods that fetch data for zone id and material id pairs (or zone id, material id, species id triples). - Added
conduit::blueprint::mesh::matset::create_or_reuse_material_map(), which will shallow copy or create a material map for a provided material set. - Added
conduit::blueprint::mesh::matset::create_or_copy_material_map(), which will deep copy or create a material map for a provided material set. - Added
conduit::blueprint::mesh::specset::create_or_reuse_species_names(), which will shallow copy or create species names for a provided species set. - Added
conduit::blueprint::mesh::specset::create_or_copy_species_names(), which will deep copy or create species names for a provided species set. - Added
conduit::blueprint::mesh::matset::renumber_material_ids(), which renumbers material ids for a material set to be in the range 0 to N - 1, where N is the number of materials. - Added
conduit::blueprint::mesh::matset::count_materials_from_matset(), which counts the number of materials in a given material set, taking into account the various matset layouts. - Added
conduit::blueprint::mesh::matset::count_materials_from_specset(), which counts the number of materials in a given species set, taking into account the various specset layouts. - Added
conduit::blueprint::mesh::matset::to_uni_buffer_by_material(),conduit::blueprint::mesh::field::to_uni_buffer_by_material(), andconduit::blueprint::mesh::specset::to_uni_buffer_by_material(), which for now only throw errors, but leave the door open for future support for this 4th material set layout.
Changed
Conduit
- Updated uberenv to use Spack 1.1.1
- Updated built in fmt to version 12.1.0.
- Updated python module build processes to use
pyproject.tomlfiles. Process now requires pip24.0.0or newer.
Blueprint
- Removed previously deprecated
quads_and_trisandhexs_and_tetsmesh types frombraidinblueprint::mesh::examples. - Renamed
conduit::blueprint::mesh::matset::to_multi_buffer_full()toconduit::blueprint::mesh::matset::to_multi_buffer_by_element(). - Material Set conversion routines (
to_multi_buffer_by_element(),to_uni_buffer_by_element(), andto_multi_buffer_by_material()) are now sensitive to optionally included material maps for all cases. If included, they will provide converted matsets with the material map. - Field/Species Set conversion routines (
to_multi_buffer_by_element(),to_uni_buffer_by_element(), andto_multi_buffer_by_material()) previously forced materials to appear in the same order in fields/specsets as they do in the associated material set. This restriction has been relaxed. - Updated
conduit::blueprint::o2mrelation::O2MIndexsuch that the number of "ones" in the one-to-many relationship is precomputed when the object is created. The number of "ones" is computed by using thesize()method from anO2MIndex. If anO2MIndexis created butsizes,offsets, andindicesare not present, then theO2MIndexconstructor will examine the providedNodeand search for data arrays to determine the number of "ones". If all data arrays in the providedNodehave the same number of elements, then that number is assumed to be the number of "ones". If there is disagreement or there are no data arrays present, then theO2MIndexthrows an error, as the number of "ones" is ambiguous or unknowable. - Renamed
conduit::blueprint::mesh::matset::count_zones_from_matset()toconduit::blueprint::mesh::matset::count_elements_from_matset(). - Renamed
conduit::blueprint::mesh::matset::is_material_in_zone()toconduit::blueprint::mesh::matset::is_material_in_element(). - Added error checking for mixed vector fields (fields with
matset_valuesdefined on vector components).conduit::blueprint::mesh::field::to_multi_buffer_by_element(),conduit::blueprint::mesh::field::to_multi_buffer_by_material(),conduit::blueprint::mesh::field::to_uni_buffer_by_element(), andconduit::blueprint::mesh::field::to_silo()now error in this case. - Rewrote
conduit::blueprint::mesh::matset::to_silo(),conduit::blueprint::mesh::field::to_silo(), andconduit::blueprint::mesh::specset::to_silo(). Instead of just thespecsetcase having its own implementation, all three now share a common implementation. Additionally, support for multi-buffer by material and uni-buffer by elementspecsetshave come online as part of these changes. We have also removed support for non-idiomatic material-set representations. Most importantly, the new version ofto_silo()boasts significant speedup: for multi-buffer by elementmatset/fields, the new version is roughly 15x faster, depending on how large your data is. For multi-buffer by materialmatset/fields, the new version has a modest speedup of roughly 1.05x. For uni-buffer by elementmatset/fields, the speedup ratio increases as the problem size increases. For even trivially sized problems, the speedup is roughly 100x, while for million-element problems the speedup is many times greater than 1000x. Speedup information forspecsetsis omitted as support was previously limited to multi-buffer by elementspecsets. - Modified
conduit::blueprint::mpi::mesh::generate_partition_field()so it takes a "verbose" option, which is set to 0 (off) by default. This change of behavior results in less output while still giving the user the ability to generate verbose Parmetis output. - Changed logic in
matsetverifysuch that for multi-buffer material sets, children ofvolume_fractionsmust be a subset of children of thematerial_map, not the other way around. - Removed support for the multi-buffer
matsetindirection case in which children ofvolume_fractionscould beo2mrelationsinstead of flat arrays.
Relay
- Updates to use Silo 4.12 and HDF5 2.0.0.
- Reworked HDF5 handle managment to avoid resource leaks with exceptions.
- Relaxed the restriction on float and double volume fractions for data being read from Silo when the length of the mixed arrays is 0 (i.e. no mixed zones/volume fractions are present).
- Adjusted MPI max tag logic search for cases where large tags are supported.
- Added logic to enforce Overlink requirements when writing species sets to Overlink files.
Fixed
Conduit
- Fixed a bug preventing explicit length 0 in
yamlschema. - Fixed a bug where empty objects or lists were not written correctly to
yamlschema. - Fixed a bug where the python DataType constructor did not properly accept arguments.
Blueprint
- Fixed an issue with material set conversions where uni-buffer by material matsets would incorrectly follow the same path as multi-buffer by material matsets.
- Fixed
conduit::blueprint::mesh::utils::topology::compute_mesh_info()so it does not generate a floating point exception when processing 1-d meshes under the Intel 25 compiler with C++20. - Modified all material set transforms and helper functions to make them robust to all 4 material set layout types.
- Fixed a bug with the
conduit::blueprint::mesh::partition()partitioner where providing multi-buffer element-dominant material sets yielded malformed multi-buffer material-dominant resulting material sets. - Fixed a bug with
conduit::blueprint::mesh::matset::count_elements_from_matset()where uni-buffer by element-matsets with a trivial one-to-many relationship would throw an error instead of correctly computing the number of elements.
Relay
- Fixed a bug preventing multiple species sets from being written when writing to Overlink.
- Fixed an issue where
int64unstructured topology connectivity information would cause The Silo writer to crash.