OpenDXA is fully decoupled from the upstream structure-identification method. It expects a reconstructed-structure package generated from the same snapshot:
- An annotated LAMMPS dump file
- A
*_clusters.tablefile - A
*_cluster_transitions.tablefile
As long as those three files respect the contract below, OpenDXA does not need to know whether the upstream producer was CNA, PTM, or another compatible implementation.
OpenDXA requires:
--clusters-table <path>--clusters-transitions <path>--reference-structure-label <int>
--reference-structure-label must be the numeric structure_type label used by the matrix phase in *_clusters.table.
The annotated dump must be a valid LAMMPS dump frame with atomic positions and these headers:
ITEM: TIMESTEPITEM: NUMBER OF ATOMSITEM: MAXIMUM NEIGHBOR DISTANCEITEM: BOX BOUNDSITEM: ATOMS ...
ITEM: MAXIMUM NEIGHBOR DISTANCE is required by OpenDXA and must already be written by the upstream structural-analysis step.
This value is used as the characteristic neighborhood length scale of the reconstructed structure:
- Delaunay tessellation uses
ghostLayerSize = 3.5 * maximumNeighborDistance - Interface-mesh construction uses
alpha = 5.0 * maximumNeighborDistance
Upstream producers currently generate it as follows:
- CNA: maximum local neighbor distance observed while classifying atoms and building ordered neighbor lists
- PTM: maximum minimum-image neighbor distance found by scanning the reconstructed PTM neighbor list
The ITEM: ATOMS section must include the atom positions together with these reconstructed columns:
cluster_idneighbor_countsneighbor_indices_0...neighbor_indices_15neighbor_lattice_x_0,neighbor_lattice_y_0,neighbor_lattice_z_0, ...neighbor_lattice_x_15,neighbor_lattice_y_15,neighbor_lattice_z_15
The slot range ends at 15 because the reconstructed format reserves up to 16 neighbor slots per atom. neighbor_counts tells OpenDXA how many of those slots are valid for each atom.
These columns mean:
cluster_id: cluster membership of the atom;0is the special no-cluster/defect labelneighbor_counts: number of valid reconstructed neighbors for that atomneighbor_indices_k: zero-based atom index of neighbor slotkin dump order, not the LAMMPSidneighbor_lattice_x_k,neighbor_lattice_y_k,neighbor_lattice_z_k: components of the ideal neighbor lattice vector associated with slotk
OpenDXA consumes them in this order:
- It rebuilds the reconstructed structure context from
cluster_id,neighbor_counts,neighbor_indices_*, andneighbor_lattice_*_* - It links
cluster_idto the imported cluster graph from*_clusters.tableand*_cluster_transitions.table - It rebuilds the compact neighbor list used by neighbor queries and crystal-path traversal
- It uses
neighbor_lattice_*_*as ideal lattice-space bond vectors during crystal path finding and elastic mapping - It uses those bond vectors plus cluster transitions to construct the interface mesh and trace Burgers circuits
The clusters table must contain:
cluster_idstructure_type
Where:
cluster_id: unique cluster identifier referenced by the dump's per-atomcluster_idstructure_type: structure label assigned to that cluster
--reference-structure-label must match the structure_type value used by the matrix phase. Common VOLT labels are:
1=SC2=FCC3=HCP4=BCC5=CUBIC_DIAMOND6=HEX_DIAMOND
Examples:
- FCC matrix ->
--reference-structure-label 2 - BCC matrix ->
--reference-structure-label 4 - If the matrix clusters are written as
structure_type = 3, use--reference-structure-label 3
The safe rule is simple: inspect the matrix-phase clusters in *_clusters.table and pass that same label to OpenDXA.
The transitions table must contain:
cluster1_idcluster2_idtm_00,tm_01,tm_02tm_10,tm_11,tm_12tm_20,tm_21,tm_22distance
Where:
cluster1_idandcluster2_id: directed edge in the reconstructed cluster graphtm_00...tm_22: entries of the3 x 3transition matrix between the two clustersdistance: graph distance associated with that transition
curl -sSL https://raw.githubusercontent.com/voltlabs-research/CoreToolkit/main/scripts/install.sh | bash