Process reference: mode_frequency

Generated from the docstrings of vaft.process.mode_frequency: 1 public functions. Each entry is what vaft.process.describe("mode_frequency.<name>") prints. All process categories

Overview

A magnetic perturbation with toroidal mode number n that is carried by the plasma at its resonant surface |q| = |m/n| is seen in the laboratory frame at f = n f_phi, where f_phi is the toroidal rotation frequency of that surface (issue #460). The functions here turn an equilibrium (which locates the surface) and a toroidal-rotation profile (which says how fast it turns) into that prediction, as a time track that any fluctuation view – a Mirnov, soft X-ray, ECE or reflectometry spectrogram – can draw over its own map.

The prediction is a hypothesis to compare with, never an identification: a spectrogram ridge that follows the (2, 1) track is consistent with a 2/1 mode convected by the toroidal flow, nothing more. Poloidal flow, the E x B and diamagnetic drifts, a mode’s own frame frequency, and the difference between the impurity rotation a CES measures and the bulk flow all move a real mode off the track; none of them is modelled. Mode-number identification from the phase across a probe array is a separate analysis (vaft.process.magnetics.toroidal_mode_analysis).

The model is named in every result (model="toroidal_rotation"), so a figure or a record built from a track says which physical approximation drew it.

SymbolMeaningUnit
qsafety factor; resonance is |q| = |m/n|-
m, npoloidal and toroidal mode numbers of the hypothesis-
rho_sflux coordinate of the rational surface-
v_phitoroidal ion velocity on the outboard midplanem/s
R_outoutboard-midplane major radius of the rational surfacem
omega_phitoroidal angular rotation frequency, v_phi / R_outrad/s
f_phitoroidal rotation frequency, omega_phi / (2 pi)Hz
f_predpredicted lab-frame frequency, n f_phiHz

Rigid rotation of a flux surface. omega_phi is constant on a flux surface to lowest order, so it is the quantity interpolated; a velocity is turned into it at the major radius where it was taken. VAFT’s profile reconstruction maps CES channels on the outboard midplane, so a stored velocity.toroidal is an outboard-midplane velocity and is divided by R_out of the surface (equilibrium.profiles_1d.r_outboard), not by the axis radius: on VEST, with R_axis ~ 0.4 m and R_out up to 0.7 m, the axis radius would overstate the edge rotation frequency by up to ~75 %. A stored rotation_frequency_tor already is omega_phi and is used as is.

Signs. f_phi keeps the sign of the stored rotation (positive along the toroidal direction of the source’s COCOS) and f_pred = n f_phi keeps the sign of n as requested; resonance itself is |q| = |m/n|, so the COCOS sign of q never decides whether a surface exists. A single probe’s spectrogram cannot tell the propagation direction, so a view draws |f_pred|.

Gaps, never extrapolation. A sample is valid only where the surface exists, the rotation grid covers it radially and the rotation profiles cover its time; elsewhere the track holds NaN and states why.

Functions

mode_frequency_tracksPredicted lab-frame frequency of each (m, n) from the rotation at |q| = m/n. Convention

mode_frequency_tracks

Machine-independentConvention-sensitive source
mode_frequency_tracks(ods, modes, *, model='toroidal_rotation', ion_index=0, time_tolerance=0.0)

Predicted lab-frame frequency of each (m, n) from the rotation at |q| = m/n.

For every equilibrium slice the rational surfaces are located by vaft.process.equilibrium.rational_surfaces (the one resolver; modes that share m/n share it), the toroidal rotation is evaluated there and f_pred = n f_phi follows. Each root of each mode is its own track, so a reversed-shear q = 2 gives two tracks and is never reduced to one. The result is renderer-independent: any fluctuation view can draw it.

NameTypeUnitDescription
odsODS or IMAS entry-

Holds equilibrium.time_slice (profiles_1d.q, psi, r_outboard, rho_tor_norm; global_quantities.psi_axis, psi_boundary) and core_profiles.profiles_1d with the ion’s rotation_frequency_tor or velocity.toroidal on grid.rho_tor_norm (else grid.rho_pol_norm).

modessequence of (int, int)-

The (m, n) hypotheses; (2, 1) and (4, 2) share q = 2 and give f_phi and 2 f_phi.

modelstr, optional-

The prediction model; only "toroidal_rotation" exists.

ion_indexint, optional-

Position of the ion in core_profiles.profiles_1d.{i}.ion whose rotation is used; 0 is VAFT’s main ion.

time_tolerancefloat, optionals

How far outside the rotation profiles’ time span an equilibrium slice may lie and still take the nearest profile; 0 pairs only slices the profiles bracket.

Returns
—ModeFrequencyTracks-

model, the normalised modes, one ModeFrequencyTrack per mode and root (time [s], surface coordinates [-], r_outboard [m], toroidal_rotation_frequency and predicted_frequency [Hz], valid, status) and provenance.

Convention

Resonance is |q| = |m/n|. f_phi carries the sign of the stored rotation (positive along the toroidal direction of the source COCOS) and f_pred that of n as given; a single-probe spectrogram shows |f_pred|. A velocity is converted at the outboard-midplane radius of the surface, R_out, because the stored velocity is an outboard-midplane (CES) value; R_axis is never substituted.

Raises

  • ValueError model is not one of MODE_FREQUENCY_MODELS, a mode is not a whole non-zero (m, n), time_tolerance is negative, the input has no equilibrium slice with a time, or no core profile carries a toroidal rotation of ion ion_index on a flux grid.
Processing steps · Applicability · Limitations · Provenance

Processing steps

  1. Read every timed equilibrium slice: psi_norm from the global psi_axis/psi_boundary (else the profile’s ends), the authentic rho_tor_norm (stored, else integrated from q) and r_outboard (stored, else derived from the 2-D flux map at the axis height without writing the input).
  2. Read every timed rotation profile, preferring rotation_frequency_tor over velocity.toroidal, on rho_tor_norm over rho_pol_norm; a grid.rho_tor_norm that is the sqrt(psi_N) proxy of the profile’s own grid.psi is read as the rho_pol_norm it is.
  3. Per slice, locate |q| = |m/n| once per distinct ratio with vaft.process.equilibrium.rational_surfaces.
  4. Per root, evaluate omega_phi on the two rotation profiles that bracket the slice time (linear in the profile’s coordinate, a velocity divided by R_out of the root), then linearly in time.
  5. f_phi = omega_phi / 2 pi and f_pred = n f_phi per mode; any failed step leaves NaN and its status.

Applicability

Machine-independent. Any equilibrium with a q profile and any toroidal rotation profile on a normalised flux grid; on VEST the rotation is CES data reconstructed into core_profiles.

Limitations

Toroidal rotation only: poloidal flow, E x B and diamagnetic drifts and the mode’s own frame frequency are not modelled, and the measured impurity rotation stands in for the bulk flow, so agreement with a track is consistency with the (m, n) hypothesis, not identification. The rotation profile’s flux coordinate is taken as the equilibrium’s: a profile mapped through a different reconstruction is not re-mapped. Branches are associated across time by root order outward, not by continuity. Nothing is extrapolated, radially or in time.

Provenance

  1. R. J. La Haye, “Neoclassical tearing modes and their control”, Phys. Plasmas 13, 055501 (2006): the lab-frame frequency of a mode convected by toroidal rotation, omega = n Omega_phi; issue #460 for the interpolation policy and the result contract.

results matching ""

    No results matching ""