Radial transport

src/operators/radial_transport.jl

Public

Runes2P.add_rechester_rosenbluth_diffusion! — Method
add_rechester_rosenbluth_diffusion!(op, delta_b_over_b; major_radius, safety_factor=1)

Radial diffusion of electrons along stochastic field lines (Rechester and Rosenbluth, Phys. Rev. Lett. 40, 38, 1978), added to op.diffusion_r_r [m²/s]:

\[D^{rr} = \pi q R_0 \left(\frac{\delta B}{B}\right)^2 |v_\parallel|, \qquad v_\parallel = \frac{c p \xi}{\gamma}.\]

The form with v_∥ and the factor π is that of Papp et al. (arXiv:1504.05074, section 2) and, with q = 1, of Berger et al. (arXiv:2208.02117, section 2), the second from the DREAM group.

delta_b_over_b and the safety factor q are numbers, have one value per radial face (radii + 1, as DREAM's dBB on its radial flux grid) or are callables of r evaluated on the faces (radial_face_values), major_radius is R₀ in metres. The pitch of the coefficient is that of the pitch cells of the radial face (radial_face_overlap), which are the pitch cells of the grid when all radii share their pitch grid. A level of zero on a face leaves the face without transport.

op declares radial transport (radial_transport = true of AdvectionDiffusion, the default of an operator built by hand), so that its stencil holds the radial neighbours. Build an operator of radial transport alone with cross_diffusion = false: declared, the cross diffusion adds the corners of the 3×3 block in p and ξ to the stored Jacobian of every cell of its unknown, and the automatic Jacobian then takes more colors. The radial transport couples the radii of its unknown in the direct factorization either way.

DREAM (RechesterRosenbluthTransport.cpp) has q = 1 fixed and sets R₀ = 1 in cylindrical geometry, where its major radius is infinite, so that the level of the perturbation alone sets the coefficient. major_radius = 1 with the default safety factor reproduces it. A physical coefficient in a cylinder needs the major radius of the device, and DREAM needs dBB √R₀ for the same coefficient.

source
Runes2P.radial_face_values — Method
radial_face_values(values, grid)

One value per radial face of grid (radii + 1) from a number, which holds on all faces, a vector with one value per face, or a callable of r evaluated on the faces (radial_values).

source
Runes2P.radial_particle_content — Method
radial_particle_content(grid, f)

Particle content of every radius, Σ 𝒱' Δp Δξ Δr f = n V' Δr [m⁻¹] over its momentum cells, with the density n [m⁻³], the spatial Jacobian V' = r [m] of a cylinder and the radial cell width Δr [m]. The sum over the radii is total_particles, the number of electrons per metre of the cylinder divided by 2π.

source
Runes2P.radial_particle_flux — Method
radial_particle_flux(op::AdvectionDiffusion, f, face)

Rate [m⁻¹ s⁻¹] at which particles cross the radial face face (between the radii face - 1 and face) towards larger radii, Σ 𝒱' Γʳ Δp Δξ over the momentum cells, in the normalization of total_particles: the electrons per second through the face per metre of the cylinder, divided by 2π. The content of the radii inside the face falls by this flux and by nothing else when only radial transport acts. Face radii + 1 is the edge of the plasma, where the flux is the loss of the plasma (zero with r_boundary = :zero_flux). The flux through the first face is zero.

source