Simplified Data Exchange for HPC Simulations
(adapted from Conduit's Changelog)
(adapted from Conduit's Changelog)
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()
.conduit_generate_data
executable that can generate datasets using the tiled()
and braid()
functions and save the datasets to files.conduit.relay.io.silo
to the Python interface.conduit::blueprint::mesh::examples::tiled()
function that can generate meshes by repeating a tiled pattern.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.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.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.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.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.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.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.conduit::blueprint::mesh::utils::copy_fields()
function that helps copy fields from one fields node to another.conduit::blueprint::mesh::utils::convert()
function that converts a list of nodes to a desired data type.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.blueprint.mesh.examples.strided_structured
to the blueprint python module.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.conduit::blueprint::mesh::utils::adjset::is_canonical()
function to check whether the group names in an adjacency set are canonical.conduit_relay_io_convert
program was enhanced so it can read/write Blueprint root files by passing "blueprint" for the read or write protocols.conduit_adjset_validate
program now writes a point mesh for each adjset groups if the -output
argument is supplied.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.conduit::blueprint::mesh::utils::ShapeType
class was enhanced so it can take topologies other than unstructured.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.npts_z !=0
for 2D shape types in conduit::blueprint::mesh::examples::{braid,basic,grid}
. These cases now issue a CONDUIT_ERROR
.volume_dependent
entry in specsets
. Species ratios and mass fractions are innately volume independent.conduit::relay::io::blueprint::{save,write}_mesh()
) now default to hdf5
protocol if Conduit is built with hdf5
support.node
procedures for fetching integer pointers are now associated with the correct routines.conduit::blueprint::mesh::partition()
function no longer issues an error when it receives a "maxshare" adjset.conduit::blueprint::mesh::matset::to_silo()
function generate the right material numbers when a domain does not contain all materials.conduit::Node::swap()
and conduit::Node::move()
functions no longer cause node names to disappear.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.conduit::blueprint::mpi::mesh::generate_partition_field()
function was not treating polyhedral topologies correctly, leading to unusable partitioning fields.(adapted from Conduit's Changelog)
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.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.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.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.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.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.utils::kdtree
class that can be used to accelerate point lookups for coordsets.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.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.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.(adapted from Conduit's Changelog)
conduit::execution
namespace, which contains for_all()
and sort()
functions.conduit::blueprint::mpi::mesh::distribute
, which enables sending mesh domains to arbitrary MPI ranks (suppoconduit::blueprint::mesh::utils::NDIndex
class. Instantiate with shape, offset, and stride in array or conduit::Node. Get flatindex for N-D coordinates.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.conduit::blueprint::examples::mesh::rz_cylinder
function that generates example 2D cylindrical (RZ) meshes.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.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).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.(adapted from Conduit's Changelog)
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.relay::io::blueprint::{save_mesh|write_mesh}
that occurred with sparse topologies with no domains on rank 0.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.(adapted from Conduit's Changelog)
Node::move
and Node::swap
methods, which provide efficient ways to help build Node trees by consuming other Nodes.Node.set
and Node.set_external
with a schema and external buffer.blueprint::mesh::generate_strip
to generate a 2D "strip mesh" topology, and dependent other Blueprint mesh parts, from a 1D mesh.Schema::has_path()
(and transitively Node::has_path()
) to ignore leading /
s.libver
, accepted values: default
, none
, latest
, v108
, and v110
.blueprint::mesh::examples::strided_structured
so it correctly generates a coordset with paddingtopology::unstructured::generate_offsets
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./
s in mesh tree paths no longer undermine conduit.relay.io.blueprint.{load_mesh|read_mesh}
reading json and yaml flavored files./
s in tree paths no longer undermine io::IOHandle reads for conduit_bin, json, conduit_json, conduit_base64_json, and yaml flavored files.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.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.(adapted from Conduit's Changelog)
Node::to_json
, Node::to_yaml
, and Node::to_string
that take formatting options via a Conduit Node.conduit_node_to_json
, conduit_node_to_yaml
, conduit_node_to_string
, and conduit_node_to_summary_string
.DataArray::count
method.DataAccessor::{min,max,sum,mean,count}
methods.Node.set()
and Node.set_external()
.blueprint::mesh::paint_adjset
, which paints fields that encode adjacency set counts and ordering details.blueprint::mesh::examples::strided_structured
which creates a structured mesh with arbitrarily strided vertex and element fields.blueprint::mesh::examples::braid
examples with mixed element topologies (mesh_type={"mixed", "mixed_2d"}
)blueprint::mesh::examples::basic()
.genearte_points()
, etc) to the non-mpi blueprint library.recv
, recv_using_schema
, and irecv
.relay::io::{save,load,save_merged,load_merged}
for basic protocols (json, yaml, etc).WARNING
instead of FATAL_ERROR
, since Cray system HDF5 installs do not always present the info we use for sanity checks.to_json()
where leaf arrays of size 0 lead to malformed json.conduit_json
protocol for leaf arrays of size 0.Node::to_json()
followed by Node::parse(...,"json")
).blueprint::mesh::index::generate
, where a uniform grid with no origin would lead to invalid coordinate system name logical
in the resulting index. This case now defaults to cartesian
.relay::io::blueprint::{save_mesh|write_mesh}
blueprint index generation for cases where fields do not exist on all domains.file_pattern
was not relative to the root file location(adapted from Conduit's Changelog: https://github.com/LLNL/conduit/blob/develop/CHANGELOG.md)
CONDUIT_VERSION_MAJOR
, CONDUIT_VERSION_MINOR
, CONDUIT_VERSION_PATCH
and these values as separate entries in conduit::about()
to provide more support for compile time and runtime conduit version detection.blueprint::mesh::examples::polystar
, which creates a mesh with a polyhedral star pattern that demonstrates hanging vertices in a topology, along with its representations from generate_sides
and generate_corners
.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.blueprint::mpi::mesh::generate_partition_field
to support all topology types.conduit::blueprint::mesh::examples::braid
, where 2D cases for points and structured examples would create coordsets with all entries being zero.relay::io::blueprint::write_mesh
and relay::io::blueprint::save_mesh
for the multi domain case, removing unintended :mesh
file name suffix for json and yaml domain files.(adapted from Conduit's Changelog)
CONDUIT_DLL_DIR
env var support on windows, for cases where Conduit DLLs are not installed directly inside the Python Module.blueprint::mesh::partition
to determine global vertex ids.blueprint::mesh::partition
and blueprint::mesh::combine
.ENABLE_RELAY_WEBSERVER
option.blueprint::mesh::partition
where adjsets could be missing in new domains.blueprint::mesh::matset::to_silo
and uni-buffer matsets.