spectre.field_tracer ==================== .. py:module:: spectre.field_tracer Module Contents --------------- .. py:class:: Field_Tracer(mvol, igeometry, nfp, mpol=None, im=None, in_=None, ate=None, aze=None, ato=None, azo=None, rbs=None, rbc=None, zbs=None, zbc=None, lrad_arr=None, num_threads=1, batch_size=1, method='RK45', rtol=1e-06, atol=1e-06, comm=None) .. py:attribute:: mvol .. py:attribute:: igeometry .. py:attribute:: mpol :value: None .. py:attribute:: im :value: None .. py:attribute:: in_ :value: None .. py:attribute:: nfp .. py:attribute:: ate :value: None .. py:attribute:: aze :value: None .. py:attribute:: ato :value: None .. py:attribute:: azo :value: None .. py:attribute:: rbs :value: None .. py:attribute:: rbc :value: None .. py:attribute:: zbs :value: None .. py:attribute:: zbc :value: None .. py:attribute:: lrad_arr :value: None .. py:attribute:: num_threads :value: 1 .. py:attribute:: batch_size :value: 1 .. py:attribute:: method :value: 'RK45' .. py:attribute:: rtol :value: 1e-06 .. py:attribute:: atol :value: 1e-06 .. py:attribute:: comm .. py:method:: trace_field(init_pts, num_phi_planes=32, num_transits=1, method='RK45', rtol=None, atol=None) Traces the magnetic field from given initial points. Volumes can have different number of trajectories, but every trajectory will have 'num_phi_planes * num_transits' turns. Sets the output as self attributes. Args: init_pts (List[ndarray[float]]): list of ndarray[num_trajectories, 2] with initial (s, theta) points for tracing num_phi_planes (int, optional): Number of phi planes to record the poincare. Defaults to 32. num_transits (int, optional): Number of toroidal transits to perform. Defaults to 1. method (str, optional): Method for integrating the ode. Defaults to 'RK45'. Options: 'RK23', 'RK45', 'DOP853' rtol (float, optional): Relative tolerance of the integrator. Defaults to 1.0e-6. atol (float, optional): Absolute tolerance of the integrator. Defaults to 1.0e-6. Raises: RuntimeError: initial s is out of range [-1, 1] for a point .. py:method:: trace_field_single(sth_init, ivol, num_phi_planes=32, num_transits=1, method='RK45', rtol=None, atol=None) Traces the magnetic field for one initial point, the trajectory will have 'num_phi_planes * num_transits' turns. Doesn't set anything and returns the result. Args: init_pts (List[ndarray[float]]): list of ndarray[num_trajectories, 2] with initial (s, theta) points for tracing. ivol (int): Index of the volume where tracing is done. num_phi_planes (int, optional): Number of phi planes to record the poincare. Defaults to 32. num_transits (int, optional): Number of toroidal transits to perform. Defaults to 1. method (str, optional): Method for integrating the ode. Defaults to 'RK45'. Options: 'RK23', 'RK45', 'DOP853' rtol (float, optional): Relative tolerance of the integrator. Defaults to 1.0e-6. atol (float, optional): Absolute tolerance of the integrator. Defaults to 1.0e-6. Raises: RuntimeError: initial s is out of range [-1, 1] for a point. Returns: List[float]: Final (s, theta) coordinates. List[float]: Final (R, Z) coordinates. float: Final iota. bool: True if integration did not reach the end, False otherwise. .. py:method:: plot(ind_zetan=0, zetan=None, prange='full', ax=None, figsize=(6, 5), show=False, **kwargs) Plot the Poincare section at given toroidal location. Allow input of both zeta index and zetan float value. Zetan (if provided) takes precedence. Args: ind_zetan (int, optional): Index of toroidal lcoation. Defaults to 0. zetan (_type_, optional): Normalized zeta of toroidal location. Defaults to None. prange (str, optional): Designated part to plot. Defaults to "full". Options: 'full', 'upper', 'lower'. ax (_type_, optional): Existing axis object. Defaults to None. figsize (tuple, optional): Figure size. Defaults to (6, 5). show (bool, optional): Whether to call `plt.show()`. Defaults to False. kwargs: Additional keyword arguments for `ax.plot()`. Raises: ValueError Returns: ax: The axis object of the plot. .. py:method:: plot_iota(xaxis='R', ax=None, figsize=(6, 5), show=False, **kwargs) Plots the iota profile obtained from the field line tracing. Iota is found as iota = (phi_final - phi_initial) / (theta_final - theta_initial). Args: xaxis (str, optional): What to plot on x-axis. Defaults to 'R'. Options: 'R', 's'. ax (_type_, optional): Existing axis object. Defaults to None. figsize (tuple, optional): Figure size. Defaults to (6, 5). show (bool, optional): Whether to call `plt.show()`. Defaults to False. kwargs: Additional keyword arguments for `ax.plot()`. Raises: RuntimeError .. py:method:: save_h5(in_file='arrays.h5') Save the object to a .h5 file in the 'poincare_custom' group, including data and parameters. Does not allow for the loaded object to be re-run. Args: in_file (str/h5py.File): Where to store the data. If a string, it's used as the filename. If h5py.File, the File is directly appended to. Defaults to 'arrays.h5'. Raises: RuntimeError .. py:method:: init_from_h5(in_file='arrays.h5') :classmethod: Initialize a `Field_Tracer` object from a data saved in a .h5 file. The loaded object can NOT be used to redo the tracing, and is only fit for analysis, Args: in_file (str/h5py.File): From where to load the data. If a string, it's used as the filename. If h5py.File, the File is directly appended to. Defaults to 'arrays.h5'. Raises: RuntimeError Returns: Field_Tracer: The generated object.