scpn_fusion.nuclear – Nuclear

The nuclear engineering subpackage provides tritium breeding blanket neutronics, plasma-wall interaction models, erosion physics, and thermoelectric MHD effects.

Blanket Neutronics

Reduced-order neutronics surrogate models for blanket studies.

This module provides lightweight, deterministic utilities used by engineering workflows and tests:

The implementation intentionally omits Monte-Carlo detail and is suitable for fast iteration, benchmarking, and regression checks in the native solver pipeline.

class scpn_fusion.nuclear.blanket_neutronics.VolumetricBlanketReport(tbr, total_production_per_s, incident_neutrons_per_s, blanket_volume_m3, tbr_ideal=0.0)[source]

Bases: object

Reduced 3D blanket surrogate summary.

Parameters:
tbr: float
total_production_per_s: float
incident_neutrons_per_s: float
blanket_volume_m3: float
tbr_ideal: float = 0.0
class scpn_fusion.nuclear.blanket_neutronics.BreedingBlanket(thickness_cm=100, li6_enrichment=1.0, r_inner_cm=200.0)[source]

Bases: object

1D Cylindrical Neutronics Transport Code for TBR calculation.

Simulates neutron attenuation in a blanket annulus (r_inner to r_outer).

Parameters:
solve_transport(incident_flux=100000000000000.0, rear_albedo=0.0)[source]

Solve steady-state cylindrical diffusion-reaction equation for neutron flux Phi(r).

-D * (1/r * d/dr(r * dPhi/dr)) + Sigma_rem * Phi = 0.

Return type:

ndarray[Any, dtype[float64]]

Parameters:
calculate_tbr(phi)[source]

Integrate Tritium production over the blanket volume (Cylindrical).

TBR = (Rate of Tritium Production) / (Rate of Incoming Neutrons).

Return type:

tuple[float, ndarray[Any, dtype[float64]]]

Parameters:

phi (ndarray[Any, dtype[float64]])

calculate_volumetric_tbr(major_radius_m=6.2, minor_radius_m=2.0, elongation=1.7, radial_cells=24, poloidal_cells=72, toroidal_cells=48, incident_flux=100000000000000.0, port_coverage_factor=0.8, streaming_factor=0.85, blanket_fill_factor=1.0)[source]

Reduced 3D blanket-volume surrogate built on top of the 1D transport profile.

Assumptions: - 1D depth attenuation from solve_transport is reused as the radial blanket profile. - Blanket shell is toroidal with shaped poloidal section via elongation. - Incident-angle weighting captures first-order poloidal asymmetry.

Return type:

VolumetricBlanketReport

Parameters:
  • major_radius_m (float)

  • minor_radius_m (float)

  • elongation (float)

  • radial_cells (int)

  • poloidal_cells (int)

  • toroidal_cells (int)

  • incident_flux (float)

  • port_coverage_factor (float)

  • streaming_factor (float)

  • blanket_fill_factor (float)

scpn_fusion.nuclear.blanket_neutronics.run_breeding_sim(*, thickness_cm=80.0, li6_enrichment=0.9, incident_flux=100000000000000.0, rear_albedo=0.0, save_plot=True, output_path='Tritium_Breeding_Result.png', verbose=True)[source]

Run deterministic blanket breeding simulation and return summary metrics.

Return type:

dict[str, object]

Parameters:
class scpn_fusion.nuclear.blanket_neutronics.MultiGroupBlanket(thickness_cm=80.0, li6_enrichment=0.9, n_cells=100, r_inner_cm=200.0)[source]

Bases: object

3-group neutron transport for tritium breeding ratio calculation.

Energy groups:

Group 1 (fast): E > 1 MeV (source: 14.1 MeV D-T neutrons) Group 2 (epithermal): 1 eV < E < 1 MeV (down-scattered) Group 3 (thermal): E < 1 eV (thermalised, main Li-6 capture)

Includes:
  • Energy-dependent cross sections per group

  • Down-scatter from fast → epithermal → thermal

  • Beryllium (n,2n) multiplication in fast group

  • Li-6(n,t) capture in all groups (dominant in thermal)

This is a significant upgrade over the single-group BreedingBlanket above.

Parameters:
solve_transport(incident_flux=100000000000000.0, port_coverage_factor=0.8, streaming_factor=0.85)[source]

Solve 3-group steady-state cylindrical neutron diffusion.

Return type:

dict[str, object]

Parameters:
  • incident_flux (float)

  • port_coverage_factor (float)

  • streaming_factor (float)

Nuclear Wall Interaction

Nuclear-engineering façade for plasma-vacuum vessel interaction diagnostics.

The module assembles reduced-order wall-load, ash-poisoning, sputtering, and materials-lifespan analyses on top of equilibrium fields from FusionBurnPhysics. It is intentionally deterministic and intended for high-throughput engineering workflow checks rather than full fidelity safety certification.

scpn_fusion.nuclear.nuclear_wall_interaction.default_iter_config_path()[source]

Resolve repository-local default ITER configuration path.

Return type:

str

class scpn_fusion.nuclear.nuclear_wall_interaction.NuclearEngineeringLab(config_path)[source]

Bases: FusionBurnPhysics

Simulate the nuclear interaction between Plasma and the Reactor Vessel.

  1. Helium Ash accumulation.

  2. Neutron Flux distribution on the First Wall.

  3. Material Damage (DPA).

Parameters:

config_path (str)

generate_first_wall()[source]

Define the geometry of the reactor wall (Vacuum Vessel).

Approximated as a D-shaped contour surrounding the plasma.

Return type:

tuple[ndarray[Any, dtype[float64]], ndarray[Any, dtype[float64]]]

simulate_ash_poisoning(burn_time_sec=1000, tau_He_ratio=5.0, pumping_efficiency=1.0)[source]

Simulate the drop in fusion power due to Helium buildup.

tau_He_ratio: Ratio of Helium particle confinement to Energy confinement (tau_He / tau_E). If ratio > 10, the reactor chokes.

Return type:

dict[str, list[float]]

Parameters:
  • burn_time_sec (int)

  • tau_He_ratio (float)

  • pumping_efficiency (float)

calculate_neutron_wall_loading()[source]

Ray-Tracing calculation of 14.1 MeV neutrons hitting the wall.

Return type:

tuple[ndarray[Any, dtype[float64]], ndarray[Any, dtype[float64]], ndarray[Any, dtype[float64]]]

calculate_cad_wall_loading(vertices, faces, source_points_xyz=None, source_strength_w=None)[source]

Reduced CAD loading estimate on imported STEP/STL meshes.

Return type:

CADLoadReport

Parameters:
calculate_sputtering_yield(material_name, E_inc_eV=100.0, angle_deg=45.0)[source]

Roth-Bohdansky Sputtering Yield (Y).

Y = Q * (1 - (E_th/E)^(2/3)) * (1 - E_th/E)^2.

Return type:

float

Parameters:
analyze_materials(wall_flux)[source]

Calculate lifespan using Sputtering + DPA.

Return type:

tuple[dict[str, float], ndarray[Any, dtype[float64]]]

Parameters:

wall_flux (ndarray[Any, dtype[float64]])

scpn_fusion.nuclear.nuclear_wall_interaction.run_nuclear_sim(config_path=None, *, save_plot=True, output_path='Nuclear_Engineering_Report.png', verbose=True, lab_factory=<class 'scpn_fusion.nuclear.nuclear_wall_interaction.NuclearEngineeringLab'>)[source]

Run a full reduced-order nuclear engineering diagnostic bundle.

Parameters:
  • config_path (str | None) – Path to an ITER-format JSON configuration. When None, iter_config.json is resolved from the repository root.

  • save_plot (bool) – Whether to generate and save the plotting summary.

  • output_path (str) – Plot output path if save_plot is true.

  • verbose (bool) – Emit human-readable progress and summary text.

  • lab_factory (Callable[[str], Any]) – Factory used to create the analysis engine, exposed for tests.

Return type:

dict[str, Any]

Returns:

Mapping with final ash fraction, wall-load metrics, lifespan range, and plot status used by callers and benchmark harnesses.

PWI Erosion

Plasma-wall interaction sputtering and erosion surrogates.

This module defines a compact deterministic model for sputtering yields and erosion-rate estimates. The routines are designed for fast sweeps and workflow-level guardrail checks in the native nuclear analysis stack.

class scpn_fusion.nuclear.pwi_erosion.SputteringPhysics(material='Tungsten', redeposition_factor=0.95)[source]

Bases: object

Simulates plasma-wall interaction sputtering and macroscopic erosion.

Parameters:
  • material (str)

  • redeposition_factor (float)

calculate_yield(E_ion_eV, angle_deg=45.0)[source]

Calculate sputtering yield (ejected atoms / incident ion).

Return type:

float

Parameters:
calculate_erosion_rate(flux_particles_m2_s, T_ion_eV, angle_deg=45.0)[source]

Calculate erosion metrics and net impurity source.

Return type:

dict[str, float]

Parameters:
scpn_fusion.nuclear.pwi_erosion.run_pwi_demo(*, material='Tungsten', redeposition_factor=0.95, flux_particles_m2_s=1e+24, temp_min_eV=10.0, temp_max_eV=100.0, num_points=50, angle_deg=45.0, save_plot=True, output_path='PWI_Erosion_Result.png', verbose=True)[source]

Run deterministic PWI erosion scan and return summary.

Return type:

dict[str, Any]

Parameters:

TEMHD Peltier Stabiliser

TEMHD-stabilized divetor flow surrogate for reduced-order thermal studies.

class scpn_fusion.nuclear.temhd_peltier.TEMHD_Stabilizer(layer_thickness_mm=5.0, B_field=10.0)[source]

Bases: object

Implicit 1D heat solver for TEMHD-stabilized liquid-metal divertors.

Parameters:
solve_tridiagonal(a, b, c, d)[source]

Solve tridiagonal system Ax=d via Thomas algorithm.

Return type:

ndarray[Any, dtype[float64]]

Parameters:
step(heat_flux_MW_m2, dt=0.1)[source]

Advance one implicit thermal step.

Parameters:
  • heat_flux_MW_m2 (float) – Incoming wall heat flux in MW/m².

  • dt (float) – Time step in seconds.

Return type:

tuple[float, float]

Returns:

A tuple (surface_temperature_K, effective_thermal_conductivity).

scpn_fusion.nuclear.temhd_peltier.run_temhd_experiment(*, layer_thickness_mm=5.0, B_field=10.0, flux_min_MW_m2=0.0, flux_max_MW_m2=100.0, flux_points=20, settle_steps_per_flux=20, dt_s=0.5, save_plot=True, output_path='TEMHD_Corrected.png', verbose=True)[source]

Run deterministic TEMHD flux-ramp experiment and return summary metrics.

Return type:

dict[str, Any]

Parameters: