RadCluster
Graph-based cluster dynamics for irradiated materials
Loading...
Searching...
No Matches
Reaction Admissibility Graph

A cluster is identified by the four-tuple \(\sigma = (\chi, n, p, c)\):

  • \(\chi \in \{-1, +1\}\) is the polarity (vacancy type or interstitial type)
  • \(n\) is the size
  • \(p\) is the population, for example glissile 1/2<111> loops, sessile <100> loops, or bulk cavities
  • \(c\) is the composition vector of trapped solutes or gases

The model is the labelled multidigraph

\[ \mathcal{G} = (V, E, \nu, k), \]

where \(V\) is the set of admissible cluster vertices, \(E\) is the set of admissible elementary reactions, \(\nu\) is the stoichiometric action of each edge, and \(k\) is the rate-kernel library. The graph is host-specific in \((V, E)\) and calibration-specific in \(k\). A reaction that is physically forbidden is excluded when the graph is constructed, and never reaches the solver.

Classes

The vertex primitives are in cluster_identifier.py:

  • Polarity is the sign of the net Frenkel-pair content of a cluster
  • Population is a defect population within one polarity layer. It carries the smallest admissible size and the largest mobile size
  • ClusterIdentifier is the four-tuple \(\sigma\)

The graph container is in rag.py:

  • Edge is one admissible reaction-edge family. An Edge is parameterized over the size axis, so that one Edge stands for a whole ladder of reactions
  • ReactionAdmissibilityGraph holds the populations, the edges and the kernel library

A host material fills a ReactionAdmissibilityGraph in three steps:

  1. it declares its populations with add_population(), and names the monomer pool of each polarity with set_monomer_population()
  2. it adds one Edge per reaction family with add_edge()
  3. it binds each rate kernel to a name with register_kernel(). A kernel is a precomputed array or scalar, or a zero-argument builder that is evaluated only when the edge is walked

The method validate() checks that every edge has a registered kernel, and summary() returns a one-line count of populations and of edges per class.

Structural diagnostics

The production path keeps the graph implicit: the graph walker never instantiates a vertex. The module to_networkx.py materializes a declared graph up to a chosen size cut-off as a networkx.MultiDiGraph, writes it to GraphML, and prints a structural report (connectivity, reachability from the monomer pools, orphaned vertices). It is a diagnostic path only.

See also
Edge classes, Graph walker, EUROFER-97