Field Line Tracing

The field line tracing module computes magnetic field line trajectories, Poincare plots, and connection lengths using reversible mapping techniques.

Overview

The field line tracer supports:

  • Computation of reversible field line mappings and usage of these mappings to accelerate all field line calculations

  • Calculation of Poincare plots with forward- and backward-connection-lengths (at no extra cost)

  • Convective-diffusive and doubly-diffusive field line tracing

  • Calculation of connection lengths, strike positions, and geometry tags (module numbers, finger IDs, etc.) on impact points

API Reference

namespace fsc

The FSC library.

Simple interface module for ZLib

namespace fsc

The FSC library.

Simple interface module for ZLib

struct RFLM

Public Functions

inline EIGEN_DEVICE_FUNC Vec3d unmap (double phi)

Computes the real-space coordinates of the last-mapped position projected to the given phi plane.

inline EIGEN_DEVICE_FUNC Vec3d unmap (double phi, double u, double v)

Computes the real-space coordinates of a phi-u-v coordinate in the current section.

inline EIGEN_DEVICE_FUNC double map (const Vec3d &x, bool goingCcw)

Captures a position for mapping using the closest mapping filament.

inline EIGEN_DEVICE_FUNC double mapInSection (uint64_t section, double phi, double z, double r)

Maps using a pre-selected section.

inline EIGEN_DEVICE_FUNC Vec3d advance (double newPhi, cupnp::List< cu::FLTKernelEvent >::Builder eventBuffer, uint32_t eventCount, uint32_t &newEventCount, uint32_t collisionLimit)

Advances to a new phi position, remapping if neccessary. Returns new real-space position.

inline EIGEN_DEVICE_FUNC Vec3d advance (double newPhi)
inline EIGEN_DEVICE_FUNC double getFieldlinePosition (double phi)
inline EIGEN_DEVICE_FUNC void setFieldlinePosition (double newValue)
inline EIGEN_DEVICE_FUNC RFLM(cu::ReversibleFieldlineMapping::Reader mapping)
inline EIGEN_DEVICE_FUNC RFLM(cu::ReversibleFieldlineMapping::Reader mapping, cu::GeometryMapping::MappingData::Reader)
inline EIGEN_DEVICE_FUNC RFLM(const RFLM &other) = default
inline EIGEN_DEVICE_FUNC void save (cu::ReversibleFieldlineMapping::State::Builder)
inline EIGEN_DEVICE_FUNC void load (cu::ReversibleFieldlineMapping::State::Reader)
inline void save(ReversibleFieldlineMapping::State::Builder)
inline void load(ReversibleFieldlineMapping::State::Reader)
inline void activateSection(uint64_t iSection)
inline cu::ReversibleFieldlineMapping::Section::Reader activeSection()
inline cu::GeometryMapping::SectionData::Reader activeGeoSection()

Public Members

cu::ReversibleFieldlineMapping::Reader mapping
cu::GeometryMapping::MappingData::Reader geoMapping
Vec2d uv
uint64_t currentSection
uint64_t currentSectionRaw
double phi
double lenOffset
uint32_t nPad
uint64_t nPhi
uint64_t nZ
uint64_t nR
double phi1
double phi2

Public Static Attributes

static constexpr double SECTION_TOL = 0.001

Private Functions

inline EIGEN_DEVICE_FUNC void interpolate (double phi, Vec2d &rz, Mat2d &jacobian)

Private Static Functions

static inline double unwrap(double phiWrapped)
struct TensorField

Public Functions

inline TensorField(cu::Float64Tensor::Reader reader, RFLM &parent)
inline double operator()(int iPhi, int iZ, int iR) const

Public Members

cu::Float64Tensor::Reader reader
RFLM &parent