RadCluster
Graph-based cluster dynamics for irradiated materials
Loading...
Searching...
No Matches
Adding a host material

Adding a host material is a declaration, not a change of the solver. The Abstract core (Layer 1) never derives a rate: a host registers its size-resolved rate kernels as precomputed arrays.

A new material needs a folder materials/<name> on both sides of the code:

radcluster_code/py_utils/materials/<name>/
radcluster_code/cpp_utils/materials/<name>/

On the Python side the material:

  1. declares its populations (see Reaction Admissibility Graph)
  2. adds its Edge families, each of one of the ten Edge classes
  3. registers a rate kernel for every edge
  4. builds the State layout that packs the populations into the ODE state vector

On the C++ side the material supplies the right-hand-side callbacks. The solver driver reaches them only through the function pointer UserData::rhs_fn, so that the files in cpp_utils/core have no compile-time dependency on the kernel arithmetic of a host.

Order of work

New physics follows the same order for every material:

  1. develop it in the Python graph walker (see Graph walker)
  2. pass the conservation gate (see Verification and diagnostics)
  3. mirror it in the C++ kernels
  4. calibrate

The EUROFER-97 declaration is the worked example. See EUROFER-97.