bluemira.radiation_transport.advective_transport

A simplified 2-D solver for calculating charged particle heat loads.

Classes

ChargedParticleSolver

A simplified charged particle transport model along open field lines.

ChargedParticleSolverParams

Parameters for use with ChargedParticleSolver.

Module Contents

class bluemira.radiation_transport.advective_transport.ChargedParticleSolver(config: ChargedParticleSolverParams | dict[str, float], equilibrium: bluemira.equilibria.equilibrium.Equilibrium, dx_mp: float = 0.001, psi_n_tol: float = 1e-06)

A simplified charged particle transport model along open field lines.

Parameters:
  • config (Dict[str, float]) – The parameters for running the transport model. See ChargedParticleSolverParams for available parameters and their defaults.

  • equilibrium (Equilibrium) – The equilibrium defining flux surfaces.

  • dx_mp (float (optional)) – The midplane spatial resolution between flux surfaces [m] (default: 0.001).

  • psi_n_tol (float)

eq
params
dx_mp = 0.001
first_wall = None
flux_surfaces_ob_down = None
flux_surfaces_ob_up = None
flux_surfaces_ib_down = None
flux_surfaces_ib_up = None
x_sep_omp = None
x_sep_imp = None
result = None
psi_n_tol = 1e-06
_o_point
_yz_plane
property flux_surfaces: list[bluemira.equilibria.flux_surfaces.PartialOpenFluxSurface]

All flux surfaces in the ChargedParticleSolver.

Returns:

The list of partially open flux surfaces.

Return type:

flux_surfaces

_check_params()

Check input fractions for validity.

Raises:

AdvectionTransportError – Sum of total power fractions is not ~= 1

_process_first_wall(first_wall)

Force working first wall geometry to be closed and counter-clockwise.

Returns:

  • first_wall – the first wall wire

  • int_intersection – the internal intersection coordinate

  • out_intersection – the external intersection coordinate

static _get_arrays(flux_surfaces) tuple[numpy.typing.NDArray[float], numpy.typing.NDArray[float], numpy.typing.NDArray[float], numpy.typing.NDArray[float], numpy.typing.NDArray[float]]

Get arrays of flux surface values.

Returns:

  • x_mp – the array of mid-plane intersection point x-coordinate for each flux surface

  • z_mp – the array of mid-plane intersection point z-coordinate for each flux surface

  • x_fw – the array of first-wall intersection point x-coordinate for each flux surface

  • z_fw – the array of first-wall intersection point z-coordinate for each flux surface

  • alpha – the array of alpha angle for each flux surface

Return type:

tuple[numpy.typing.NDArray[float], numpy.typing.NDArray[float], numpy.typing.NDArray[float], numpy.typing.NDArray[float], numpy.typing.NDArray[float]]

_make_flux_surfaces_ob()

Make the flux surfaces on the outboard.

_make_flux_surfaces_ib()

Make the flux surfaces on the inboard.

_clip_flux_surfaces(first_wall)

Clip the flux surfaces to a first wall. Catch the cases where no intersections are found.

_no_wall_intersection_region(x_up_inter, z_up_inter, x_down_inter, z_down_inter, *, lfs=True)

Get first wall mid-plane region with no flux line intersections.

Returns:

  • x_reg_inter – the x region intersection point

  • z_reg_inter – the z region intersection point

  • wire_length – the length of the wire

analyse(first_wall: bluemira.geometry.coordinates.Coordinates)

Perform the calculation to obtain charged particle heat fluxes on the the specified first_wall

Parameters:

first_wall (Coordinates) – The closed first wall geometry on which to calculate the heat flux

Returns:

  • x – The x coordinates of the flux surface intersections

  • z – The z coordinates of the flux surface intersections

  • heat_flux – The perpendicular heat fluxes at the intersection points [MW/m^2]

Notes

The heat flux model assumes pure parallel transport and fudges the perpendicular transport via the power decay length, lambda. This approach, while is widely used, leads to no power deposited on the wall at the mid-plane. _analyse_SN and _analyse_DN assume, in the area in proximity of the mid-plane, where the outermost flux tube is open, that the remaining power of from the exponential decay is deposited on the wall perpendicularly.

_analyse_SN()

Calculation for the case of single nulls.

Returns:

  • x – The x coordinates of the flux surface intersections

  • z – The z coordinates of the flux surface intersections

  • heat_flux – The perpendicular heat fluxes at the intersection points [MW/m^2]

_analyse_DN() tuple[numpy.typing.NDArray[float], Ellipsis]

Calculation for the case of double nulls.

Returns:

  • x – The x coordinates of the flux surface intersections

  • z – The z coordinates of the flux surface intersections

  • heat_flux – The perpendicular heat fluxes at the intersection points [MW/m^2]

Return type:

tuple[numpy.typing.NDArray[float], Ellipsis]

_q_par(x, dx, B, Bp, *, outboard=True)

Calculate the parallel power at the midplane.

Returns:

parallel power at the midplane

plot(ax: matplotlib.axes.Axes = None, *, show=False) matplotlib.axes.Axes

Plot the ChargedParticleSolver results.

Returns:

The axes object on which the ChargedParticleSolver is plotted.

Parameters:

ax (matplotlib.axes.Axes)

Return type:

matplotlib.axes.Axes

static _make_params(config)

Convert the given params to ChargedParticleSolverParams

Returns:

a ChargedParticleSolverParams object

Raises:
  • TypeError – Unsupported config type

  • ValueError – Unknown configuration parameters

class bluemira.radiation_transport.advective_transport.ChargedParticleSolverParams

Parameters for use with ChargedParticleSolver.

P_sep_particle: float = 150

Separatrix power [MW].

f_p_sol_near: float = 0.5

Near scrape-off layer power rate [dimensionless].

fw_lambda_q_near_omp: float = 0.003

Lambda q near SOL at the outboard [m].

fw_lambda_q_far_omp: float = 0.05

Lambda q far SOL at the outboard [m].

fw_lambda_q_near_imp: float = 0.003

Lambda q near SOL at the inboard [m].

fw_lambda_q_far_imp: float = 0.05

Lambda q far SOL at the inboard [m].

f_lfs_lower_target: float = 0.9

Fraction of SOL power deposited on the LFS lower target [dimensionless].

f_hfs_lower_target: float = 0.1

Fraction of SOL power deposited on the HFS lower target [dimensionless].

f_lfs_upper_target: float = 0

Fraction of SOL power deposited on the LFS upper target (DN only) [dimensionless].

f_hfs_upper_target: float = 0

Fraction of SOL power deposited on the HFS upper target (DN only) [dimensionless].