essos.dynamics¶
Attributes¶
Classes¶
Functions¶
|
Computes full orbit positions for given guiding center positions, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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¶
- progress_meter = None¶
- 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.