Node Sets & Side Sets
NodeSet and SideSet are the other two "set" types in Exodus, alongside Block. All three subtype AbstractExodusSet and share a common ID/name interface.
struct NodeSet{I, A <: AbstractVector} <: AbstractExodusSet{I, A}
id::I
nodes::A
end
struct SideSet{I, A <: AbstractVector} <: AbstractExodusSet{I, A}
id::I
elements::A
sides::A
num_nodes_per_side::A
side_nodes::A
endCommon interface
These methods work for any S <: AbstractExodusSet (i.e. Block, NodeSet, or SideSet):
read_ids(exo, S) # Vector of all set IDs of type S
read_names(exo, S) # Vector of all set names of type S, in ID order
read_name(exo, S, id) # name of single set
write_name(exo, S, id, name) # assign/overwrite a name
write_name(exo, set, name) # equivalently, from a set object
write_names(exo, S, names) # write a vector of names at oncelength(set) returns the number of entries in a NodeSet (its node count) or SideSet (its element/side count).
Reading sets
nset = NodeSet(exo, 1)
nset = NodeSet(exo, "nset_1")
sset = SideSet(exo, 1)
sset = SideSet(exo, "sset_1")
# generic form, dispatches on the type
set = read_set(exo, NodeSet, 1)
# read every set of a given type
nsets = read_sets(exo, NodeSet)
ssets = read_sets(exo, SideSet)Lower-level accessors:
num_entries, num_dist_factors = Exodus.read_set_parameters(exo, set_id, NodeSet)
nodes = Exodus.read_node_set_nodes(exo, set_id)
elements, sides = Exodus.read_side_set_elements_and_sides(exo, set_id)
num_nodes_per_side, side_nodes = read_side_set_node_list(exo, side_set_id)Writing sets
write_set(exo, nset) # write a single NodeSet or SideSet
write_sets(exo, [nset1, nset2]) # write several at oncewrite_set first writes the set's parameters (Exodus.write_set_parameters) and then its entries.
Errors
If an ID or name does not correspond to an existing set, a SetIDException or SetNameException is thrown, listing the available IDs/names for that set type.