Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 18 additions & 8 deletions src/struphy/models/drift_kinetic_electrostatic_adiabatic.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,11 @@ def __init__(
Z: int = 1,
diagnostic: FEECVariable | None = None,
):
self.gc_poisson = GyrokineticPoissonSolve(rho=rho, epsilon=epsilon, Z=Z, diagnostic=diagnostic)
# both pushers move the guiding centers; with the Poisson solve between them, a Strang step
# bxe(dt/2), poisson, para(dt), poisson, bxe(dt/2) pushes with the potential of the current positions
# (the two bxe(dt/2) of consecutive steps act as one bxe(dt) with the potential frozen)
self.push_gc_bxe = PushGuidingCenterBxEstar(phi=phi)
self.gc_poisson = GyrokineticPoissonSolve(rho=rho, epsilon=epsilon, Z=Z, diagnostic=diagnostic)
self.push_gc_para = PushGuidingCenterParallel(phi=phi)

## abstract methods
Expand Down Expand Up @@ -138,8 +141,8 @@ def __init__(
)

# 4. assign variables to propagators
self.propagators.gc_poisson.variables.phi = self.em_fields.phi
self.propagators.push_gc_bxe.variables.ions = self.kinetic_ions.var
self.propagators.gc_poisson.variables.phi = self.em_fields.phi
self.propagators.push_gc_para.variables.ions = self.kinetic_ions.var

# 5. define scalars to be tracked during simulation
Expand Down Expand Up @@ -277,18 +280,25 @@ def doc_scalar_quantities(cls):
def doc_discretization(cls):
"""Time integration is performed by the following propagators (in sequence):

1. :class:`~struphy.propagators.implicit_diffusion.ImplicitDiffusion`
2. :class:`~struphy.propagators.push_guiding_center_bx_estar.PushGuidingCenterBxEstar`
1. :class:`~struphy.propagators.push_guiding_center_bx_estar.PushGuidingCenterBxEstar`
2. :class:`~struphy.propagators.gyrokinetic_poisson_solve.GyrokineticPoissonSolve`
3. :class:`~struphy.propagators.push_guiding_center_parallel.PushGuidingCenterParallel`
"""
doc = rf"""**1. ImplicitDiffusion:**
doc = rf"""The Poisson solve sits between the two pushers, which both move the guiding centers. With Strang
splitting, bxe(dt/2), poisson, para(dt), poisson, bxe(dt/2), the parallel push and the closing bxe(dt/2) use a freshly
solved potential; the two bxe(dt/2) at a step boundary act as one bxe(dt) with the potential solved before it. With
Lie-Trotter splitting the parallel push uses a fresh potential and the E* x b push the one of the previous step.
Since a time step ends with a push, the saved potential and ``en_phi`` belong to the marker positions before that
last push.

{GyrokineticPoissonSolve.__doc__}

**2. PushGuidingCenterBxEstar:**
**1. PushGuidingCenterBxEstar:**

{PushGuidingCenterBxEstar.__doc__}

**2. GyrokineticPoissonSolve:**

{GyrokineticPoissonSolve.__doc__}

**3. PushGuidingCenterParallel:**

{PushGuidingCenterParallel.__doc__}
Expand Down
Loading