Advection
Advection
Advection in GUERNICA is always active and does not need to be listed under operators in [components]. It is part of the base neutral transport solve and is applied automatically in every simulation. The advection operator overview here is based on the GLL_DGSEM collocated discontinuous Galerkin spectral-element implementation, which is the only advection operator.
GUERNICA currently treats configuration-space advection in two spatial dimensions, solving
for the neutral distribution function. The distribution is discretized with Discontinuous Galerkin (DG) in configuration space and the Discrete Velocity Method (DVM) in velocity space. Each discrete velocity state is advected using its associated \(v_x\) and \(v_y\); the \(v_z\) coordinate is still part of the velocity grid and distribution function, but it does not appear directly in the 2D configuration-space advection term.
The operator is a collocated DG spectral element method (DGSEM): the GLL interpolation nodes are also the quadrature points, so volume and face terms are evaluated directly at the nodes and the mass matrix is diagonal. The advection update is assembled in two parts:
- a volume contribution, computed with 1D GLL differentiation matrices applied along each tensor direction, and
- a face contribution with an upwind flux, covering interior faces, boundary faces, and any plasma–vacuum interface leakage.
The diagonal inverse mass matrix is folded directly into both terms, so
is formed without a separate mass solve. The operator precomputes geometric factors, face data, and element-face adjacency so the apply runs efficiently on device backends. The state is stored element-major: for each element, all local nodes of velocity 0, then velocity 1, and so on.
Boundary conditions for advection are handled through a separate WallBCOperator, which is attached to the advection operator. More information on the boundary conditions, including plasma–vacuum interface leakage, can be found in Boundary Conditions.
A few implementation details are worth noting. The current advection operator is written for 2D configuration space only. It requires quadrilateral elements, a uniform tensor-product \(Q_k\) DG space across elements with order >= 1, and a uniform velocity grid in \(v_x\) and \(v_y\).