essos.dynamics

Attributes

mesh

spec

spec_index

sharding

sharding_index

Classes

Particles

Tracing

Functions

gc_to_fullorbit(field, initial_xyz, initial_vparallel, ...)

Computes full orbit positions for given guiding center positions,

GuidingCenterCollisionsDiffusionMu(→ jax.numpy.ndarray)

GuidingCenterCollisionsDriftMuStratonovich(...)

GuidingCenterCollisionsDriftMuIto(→ jax.numpy.ndarray)

GuidingCenterCollisionsDiffusion(→ jax.numpy.ndarray)

GuidingCenterCollisionsDrift(→ jax.numpy.ndarray)

GuidingCenter(→ jax.numpy.ndarray)

LorentzCollisionsDiffusion(→ jax.numpy.ndarray)

LorentzCollisionsDrift(→ jax.numpy.ndarray)

Lorentz(→ jax.numpy.ndarray)

FieldLine(→ jax.numpy.ndarray)

Module Contents

essos.dynamics.mesh
essos.dynamics.spec
essos.dynamics.spec_index
essos.dynamics.sharding
essos.dynamics.sharding_index
essos.dynamics.gc_to_fullorbit(field, initial_xyz, initial_vparallel, total_speed, mass, charge, phase_angle_full_orbit=0)

Computes full orbit positions for given guiding center positions, parallel speeds, and total velocities using JAX for efficiency.

class essos.dynamics.Particles(initial_xyz=None, initial_vparallel_over_v=None, charge=ALPHA_PARTICLE_CHARGE, mass=ALPHA_PARTICLE_MASS, energy=FUSION_ALPHA_PARTICLE_ENERGY, min_vparallel_over_v=-1, max_vparallel_over_v=1, field=None, initial_vxvyvz=None, initial_xyz_fullorbit=None)
charge
mass
energy
initial_xyz
nparticles
initial_xyz_fullorbit = None
initial_vxvyvz = None
phase_angle_full_orbit = 0
particle_index
random_keys
total_speed
initial_vparallel
initial_vperpendicular
to_full_orbit(field)
essos.dynamics.GuidingCenterCollisionsDiffusionMu(t, initial_condition, args) jax.numpy.ndarray
essos.dynamics.GuidingCenterCollisionsDriftMuStratonovich(t, initial_condition, args) jax.numpy.ndarray
essos.dynamics.GuidingCenterCollisionsDriftMuIto(t, initial_condition, args) jax.numpy.ndarray
essos.dynamics.GuidingCenterCollisionsDiffusion(t, initial_condition, args) jax.numpy.ndarray
essos.dynamics.GuidingCenterCollisionsDrift(t, initial_condition, args) jax.numpy.ndarray
essos.dynamics.GuidingCenter(t, initial_condition, args) jax.numpy.ndarray
essos.dynamics.LorentzCollisionsDiffusion(t, initial_condition, args) jax.numpy.ndarray
essos.dynamics.LorentzCollisionsDrift(t, initial_condition, args) jax.numpy.ndarray
essos.dynamics.Lorentz(t, initial_condition, args) jax.numpy.ndarray
essos.dynamics.FieldLine(t, initial_condition, field) jax.numpy.ndarray
class essos.dynamics.Tracing(trajectories_input=None, initial_conditions=None, times_to_trace=None, field=None, electric_field=None, model=None, maxtime: float = 1e-07, timestep: int = 1e-08, rtol=1e-07, atol=1e-07, particles=None, condition=None, species=None, tag_gc=1.0, boundary=None, rejected_steps=None)
model = None
initial_conditions = None
times_to_trace = None
maxtime = 1e-07
timestep = 1e-08
rtol = 1e-07
atol = 1e-07
_trajectories = None
particles = None
species = None
tag_gc = 1.0
trajectories_xyz
trace()
property trajectories
_tree_flatten()
classmethod _tree_unflatten(aux_data, children)
to_vtk(filename)
plot(ax=None, show=True, axis_equal=True, n_trajectories_plot=5, **kwargs)
loss_fraction_BioSavart(boundary)
loss_fraction(r_max=0.99)
loss_fraction_BioSavart_collisions(boundary)
loss_fraction_collisions(r_max=0.99)
poincare_plot(shifts=[jnp.pi / 2], orientation='toroidal', length=1, ax=None, show=True, color=None, **kwargs)

Plot Poincare plots using scipy to find the roots of an interpolation. Can take particle trace or field lines. :param shifts: Apply a linear shift to dependent data. Default is [0]. :type shifts: list, optional :param orientation: ‘toroidal’ - find time values when toroidal angle = shift [0, 2pi].

‘z’ - find time values where z coordinate = shift. Default is ‘toroidal’.

Parameters:
  • length (float, optional) – A way to shorten data. 1 - plot full length, 0.1 - plot 1/10 of data length. Default is 1.

  • ax (matplotlib.axes._subplots.AxesSubplot, optional) – Matplotlib axis to plot on. Default is None.

  • show (bool, optional) – Whether to display the plot. Default is True.

  • color – Can be time, None or a color to plot Poincaré points

  • **kwargs – Additional keyword arguments for plotting.

Notes

  • If the data seem ill-behaved, there may not be enough steps in the trace for a good interpolation.

  • This will break if there are any NaNs.

  • Issues with toroidal interpolation: jnp.arctan2(Y, X) % (2 * jnp.pi) causes distortion in interpolation near phi = 0.

  • Maybe determine a lower limit on resolution needed per toroidal turn for “good” results.

To-Do:
  • Format colorbars.