RadCluster
Graph-based cluster dynamics for irradiated materials
Loading...
Searching...
No Matches
__init__.py
Go to the documentation of this file.
1"""
2RadCluster_2_1 — Layer 1: abstract, host-independent cluster-dynamics core.
3
4This package implements the host-independent algorithmic core of the
5generalized graph-based cluster-dynamics framework of
6
7 Ghoniem, N.M. (2026), "A Generalized Graph-Based Cluster Dynamics
8 Framework for Irradiated Materials"
9 (docs/Formulation/cluster_dynamics_framework/Generalized_Cluster_Dynamics.pdf).
10
11It defines the two algorithmic primitives that make a generic CD
12formulation possible:
13
14 * the polarity index chi in {-1, +1} that splits the cluster state
15 space into vacancy-type and SIA-type sub-spaces without any
16 host-specific taxonomy (``cluster_identifier``); and
17
18 * the reaction admissibility graph (RAG) G = (V, E, nu, k) whose
19 edges encode every elementary reaction with stoichiometric tuples
20 and rate kernels (``rag``, ``edge_classes``).
21
22The master equation reduces to the host-independent graph-walking
23accumulator
24
25 dc_a/dt = G_a + sum_r S_ar J_r(c) - D_a c_a
26
27applied edge-by-edge over E (``graph_walker``).
28
29Nothing in this package references a specific host material. A host
30(e.g. EUROFER-97) is introduced as an *instantiation* under
31``py_utils/materials/`` — a declaration of the admissible vertex set,
32population set, edge set, and rate-kernel library — never a rewrite of
33this core. This is the abstract-base-class / subclass split described
34in the paper's introduction.
35"""
36from .cluster_identifier import (
37 Polarity,
38 Population,
39 ClusterIdentifier,
40)
41from .edge_classes import (
42 EdgeClass,
43 EdgeClassSpec,
44 EDGE_CLASS_SPEC,
45 spec_of,
46)
47from .rag import (
48 Edge,
49 ReactionAdmissibilityGraph,
50)
51from .state_layout import (
52 Block,
53 StateLayout,
54)
55from .graph_walker import (
56 GraphWalker,
57)
58from .reductions import (
59 BinMomentReduction,
60 HeReductionMode,
61)
62
63# Diagnostics only. networkx is imported lazily INSIDE these functions, so
64# re-exporting them here adds no import-time dependency for the solver path.
65from .to_networkx import (
66 to_networkx,
67 structural_report,
68 write_graphml,
69 vertex,
70)
71
72__all__ = [
73 "Polarity",
74 "Population",
75 "ClusterIdentifier",
76 "EdgeClass",
77 "EdgeClassSpec",
78 "EDGE_CLASS_SPEC",
79 "spec_of",
80 "Edge",
81 "ReactionAdmissibilityGraph",
82 "Block",
83 "StateLayout",
84 "GraphWalker",
85 "BinMomentReduction",
86 "HeReductionMode",
87 "to_networkx",
88 "structural_report",
89 "write_graphml",
90 "vertex",
91]