Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multi-species collisions with different reference velocities for each species #196

Open
mrhardman opened this issue Mar 25, 2024 · 2 comments

Comments

@mrhardman
Copy link
Collaborator

mrhardman commented Mar 25, 2024

Currently the collision operator C[F,F] acts on a single velocity space described by vpa and vperp. However, the introduction of electrons, fast ions, or just using moment_kinetic normalisations will mean that vpa and vperp will describe a different physical velocity range for each species.

Denoting the reference velocity of species s and s' by crefs and crefsp, the corresponding distribution functions by Fs and Fsp, and the corresponding Rosenbluth potentials by Hs and Hsp, the prescription for obtaining the Rosenbluth potentials in this more general case will be as follows:

If crefs > crefsp then interpolate Fsp on to the grid used by Fs, and solve for Hsp using the existing routines (and apply any normalisation scaling factors).

If crefs < crefsp then solve for Hsp using Fsp and the existing routines, and then interpolate Hsp onto the grid used by Hs (and apply any normalisation scaling factors).

The ratio of crefs/crefsp determines the scaling needed for the interpolation, whereas the data stored always remains on the original vpa vperp normalised coordinates, which simply change interpretation when the interpolation is carried out.

The main computational challenge is in providing a fast interpolation for the 2D space of vpa vperp. A naive implementation based on matrix assembly would appear to scale like

N^2 * ngrid^2 ,

where N is the number of points in a single global coordinate dimension vpa or vperp and ngrid is the number of polynomials in a local element. We assume that each point in the interpolated function will depend only on a single element in the un-interpolated data. This scaling is comparable to the assembly step already used in the collision operator which suggests that it may be possible to construct an interpolation which does not slow the operator down by more that O(1).

@johnomotani @LucasMontoya4 Thoughts on this exercise? How quickly would you want either collisions with kinetic electrons or multiple charged species?

@LucasMontoya4
Copy link
Collaborator

@mrhardman I'm afraid I think it's going to take me a bit of time to understand everything you've said... Probably John can give you an answer!

@mrhardman
Copy link
Collaborator Author

The branch https://github.com/mabarnes/moment_kinetics/tree/cross-species-collisions has been created to start experimenting with the interpolation methods in the 2D velocity grid. Note that existing 1D interpolation methods cannot directly carry over to the 2D domain. The new routine interpolate_2D_vspace! is tested and can function with any of the input grid options (although the collision operator matrices do not support Chebyshev grids yet).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants