Releases: LLNL/conduit
Releases · LLNL/conduit
0.9.2
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 permitspartition_map_back()
to send data from a partitioned mesh into the original mesh where fields were provided from a host code usingNode::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
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
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 toset_external()
. - Added a
conduit_generate_data
executable that can generate datasets using thetiled()
andbraid()
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 thereorder()
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 thereorder()
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 likeslice_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 theglobal_vertex_ids
field, which could have been created with a prefix by the same option in theconduit::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 inconduit::blueprint::mesh::examples::{braid,basic,grid}
. These cases now issue aCONDUIT_ERROR
. - Removed
volume_dependent
entry inspecsets
. 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 tohdf5
protocol if Conduit is built withhdf5
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()
andconduit::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 aMatchQuery
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
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 newdestination_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). AddsCONDUIT_USE_OPENMP
define toconduit_config.h
. Guards all use of OpenMP withCONDUIT_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
orgenerate_faces
that accept adjsets now include a filtering stage to improve adjset quality. This filtering stage usesPointQuery
andMatchQuery
to ensure that entities referenced in a remote domain actually exist in the neighboring domain.
0.8.7
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 containsfor_all()
andsort()
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 toconduit::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, andR
as the second. This choice aligns with expected visualization cases whereZ
varies with the horizontal axis andR
varies with the vertical axis.
0.8.6
0.8.6 Release Highlights
(adapted from Conduit's Changelog)
Added
General
- Added C++
int DataType::sizeof_index_t()
and Cint 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 thesuffix=cycle
option that could cause int max to erroneously be used as the cycle number in the output directory.
0.8.5
0.8.5 Release Highlights
(adapted from Conduit's Changelog)
Added
General
- Added
Node::move
andNode::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
andNode.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 transitivelyNode::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
, andv110
.
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 undermineconduit.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
, andrelay::mpi::broadcast_using_schema
. Node compatible check is not commutative and checks in leaf zero-copy logic were reversed.
0.8.4
0.8.4 Release Highlights
(adapted from Conduit's Changelog)
Added
General
- Added variants of
Node::to_json
,Node::to_yaml
, andNode::to_string
that take formatting options via a Conduit Node. - Added C API methods
conduit_node_to_json
,conduit_node_to_yaml
,conduit_node_to_string
, andconduit_node_to_summary_string
. - Added
DataArray::count
method. - Added
DataAccessor::{min,max,sum,mean,count}
methods. - Added Schema and Python Buffer variants to Python
Node.set()
andNode.set_external()
.
Blueprint
- Added
blueprint::mesh::paint_adjset
, which paints fields that encode adjacency set counts and ordering details. - Added
blueprint::mesh::examples::strided_structured
which creates a structured mesh with arbitrarily strided vertex and element fields. - Added support for mixed element topologies to the mesh blueprint.
- Added
blueprint::mesh::examples::braid
examples with mixed element topologies (mesh_type={"mixed", "mixed_2d"}
) - Added 1D mesh example support to
blueprint::mesh::examples::basic()
. - Added adjacency set aware generate functions (
genearte_points()
, etc) to the non-mpi blueprint library.
Relay
- Added any source, any tag variants of mpi receive functions:
recv
,recv_using_schema
, andirecv
. - Added subpath support for
relay::io::{save,load,save_merged,load_merged}
for basic protocols (json, yaml, etc).
Changed
Relay
- Changed HDF5 CMake sanity checks to issue
WARNING
instead ofFATAL_ERROR
, since Cray system HDF5 installs do not always present the info we use for sanity checks. - Changed HDF5 version guards to also check requested HDF5 API.
Fixed
General
- Fixed bug with
to_json()
where leaf arrays of size 0 lead to malformed json. - Fixed parsing issue with
conduit_json
protocol for leaf arrays of size 0. - Fixed roundtrip parsing of numeric arrays with nan, infs, etc for JSON cases (
Node::to_json()
followed byNode::parse(...,"json")
).
Blueprint
- Fixed a bug with
blueprint::mesh::index::generate
, where a uniform grid with no origin would lead to invalid coordinate system namelogical
in the resulting index. This case now defaults tocartesian
. - Improved
relay::io::blueprint::{save_mesh|write_mesh}
blueprint index generation for cases where fields do not exist on all domains. - Fixed a bug that labeled internal faces as shared in generated adjsets.
Relay
- Fixed a bug with blueprint root file creation, where the
file_pattern
was not relative to the root file location - Fixed missing header include for relay io csv support.
- Fixed a bug with relay mpi all reduce.
0.8.3
0.8.3 Release Highlights
(adapted from Conduit's Changelog: https://github.com/LLNL/conduit/blob/develop/CHANGELOG.md)
Added
General
- Added C/C++ version macros
CONDUIT_VERSION_MAJOR
,CONDUIT_VERSION_MINOR
,CONDUIT_VERSION_PATCH
and these values as separate entries inconduit::about()
to provide more support for compile time and runtime conduit version detection.
Blueprint
- Added
blueprint::mesh::examples::polystar
, which creates a mesh with a polyhedral star pattern that demonstrates hanging vertices in a topology, along with its representations fromgenerate_sides
andgenerate_corners
. - Added
blueprint::mesh::examples::related_boundary
, which creates a multi-domain mesh with a related boundary topology and several fileds that encode relationships between the main topology and the boundary. - Expanded
blueprint::mpi::mesh::generate_partition_field
to support all topology types.
Fixed
Blueprint
- Fixed a bug with
conduit::blueprint::mesh::examples::braid
, where 2D cases for points and structured examples would create coordsets with all entries being zero.
Changed
General
- Improved pip install logic
Relay
- Added szip and zlib linking fix for older version of HDF5 (1.8.14)
- Fixed a bug with
relay::io::blueprint::write_mesh
andrelay::io::blueprint::save_mesh
for the multi domain case, removing unintended:mesh
file name suffix for json and yaml domain files.