TwoFluidLinear Struct ReferenceΒΆ

adc_cpp: pops::validation::TwoFluidLinear Struct Reference
adc_cpp 0.3.0
Model-free C++23 core for coupled hyperbolic-elliptic systems on adaptive (AMR) meshes, with MPI and GPU (Kokkos) backends
pops::validation::TwoFluidLinear Struct Reference

Isothermal two-fluid electrostatic, linear mode (single Fourier k). More...

#include <two_fluid_isothermal.hpp>

+ Collaboration diagram for pops::validation::TwoFluidLinear:

Public Member Functions

POPS_HD void explicit_step (Real &Ae, Real &Ai, Real &Be, Real &Bi, Real dt) const
 Explicit step (slow acoustic term) in place: B_s += dt (-c_s^2 k^2 A_s).
 
POPS_HD void implicit_solve (Real &Ae, Real &Ai, Real &Be, Real &Bi, Real dt) const
 Implicit step (stiff plasma term) in place: (A,B) <- (A*,B*) + dt S.
 
void dispersion (Real &w_fast, Real &w_slow) const
 Roots of the dispersion relation, w_fast (Langmuir) >= w_slow (ion-acoustic) >= 0.
 

Public Attributes

Real omega_pe = 1
 
Real omega_pi = 0
 plasma frequencies electron / ion
 
Real cse2k2 = 0
 
Real csi2k2 = 0
 c_se^2 k^2, c_si^2 k^2 (acoustic terms)
 

Detailed Description

Isothermal two-fluid electrostatic, linear mode (single Fourier k).

VALIDATION/REFERENCE brick (not used by adc_cases as of 2026-06-06); kept as an analytical example of the two-species IMEX scheme and to check the electrostatic dispersion branches (w_fast Langmuir, w_slow ion-acoustic).

Generalizes LangmuirMode to two mobile species, electrons (omega_pe) and ions (omega_pi), with isothermal pressures (sound speeds c_se, c_si). This is the linear kernel of the two-fluid AP scheme (Hoffart regime) once the ions are freed.

The density perturbation amplitudes (A_e, A_i) of a mode obey A'' = K A (E eliminated by Poisson):

A''_e = -(c_se^2 k^2 + omega_pe^2) A_e + omega_pe^2 A_i
A''_i =  omega_pi^2 A_e            - (c_si^2 k^2 + omega_pi^2) A_i

The eigenfrequencies are the two branches, Langmuir (high frequency) and ion-acoustic (low frequency), roots of the electrostatic dispersion (X - c_se^2k^2 - omega_pe^2)(X - c_si^2k^2 - omega_pi^2) = omega_pe^2 omega_pi^2 with X = omega^2. The plasma frequency (omega_pe, omega_pi) is the stiff term (tends to infinity as lambda_D tends to 0): handled implicitly (A-stable 2x2 solve), the acoustic part (c_s^2 k^2) staying explicit.

Member Function Documentation

◆ dispersion()

void pops::validation::TwoFluidLinear::dispersion ( Real w_fast,
Real w_slow 
) const
inline

Roots of the dispersion relation, w_fast (Langmuir) >= w_slow (ion-acoustic) >= 0.

Parameters
[out]w_fasthigh-frequency branch (Langmuir)
[out]w_slowlow-frequency branch (ion-acoustic)

◆ explicit_step()

POPS_HD void pops::validation::TwoFluidLinear::explicit_step ( Real Ae,
Real Ai,
Real Be,
Real Bi,
Real  dt 
) const
inline

Explicit step (slow acoustic term) in place: B_s += dt (-c_s^2 k^2 A_s).

Parameters
[in]Ae,Aielectron / ion amplitudes
[in,out]Be,Bielectron / ion velocities dB/dt, updated
[in]dttime step

◆ implicit_solve()

POPS_HD void pops::validation::TwoFluidLinear::implicit_solve ( Real Ae,
Real Ai,
Real Be,
Real Bi,
Real  dt 
) const
inline

Implicit step (stiff plasma term) in place: (A,B) <- (A*,B*) + dt S.

With S = (B, M_s A) and M_s = [[-wpe2, wpe2], [wpi2, -wpi2]], solves the 2x2 system (I - dt^2 M_s) A = A* + dt B* then updates B.

Parameters
[in,out]Ae,Aielectron / ion amplitudes
[in,out]Be,Bielectron / ion velocities dB/dt
[in]dttime step

Member Data Documentation

◆ cse2k2

Real pops::validation::TwoFluidLinear::cse2k2 = 0

◆ csi2k2

Real pops::validation::TwoFluidLinear::csi2k2 = 0

c_se^2 k^2, c_si^2 k^2 (acoustic terms)

◆ omega_pe

Real pops::validation::TwoFluidLinear::omega_pe = 1

◆ omega_pi

Real pops::validation::TwoFluidLinear::omega_pi = 0

plasma frequencies electron / ion


The documentation for this struct was generated from the following file: