Source code for torx.measure.fluctuations_m
"""Functions related to fluctuations."""
import xarray as xr
import numpy as np
from torx import make_xarray
from torx.grid import Grid2D
from torx.equilibrium.equilibrium_m import EquilibriumBaseClass
from torx.normalization.normalization_m import Normalization
from torx.vector import vector_dot, vector_cross, toroidal_vector
from torx.autodoc_decorators_m import autodoc_function
[docs]
@autodoc_function
def radial_magnetic_field_fluctuation(
grid: Grid2D,
equi: EquilibriumBaseClass,
norm: Normalization,
A_par: xr.DataArray,
**kwargs
):
"""Calculate the radial component of the magnetic field fluctuation."""
# equi.magnetic_field_toroidal yields Btor in units of B0. We use
# norm.convert_norm to convert this into a Quantity with the actual value for B0
B_toroidal = norm.convert_norm(
equi.magfield_component_toroidal(grid.r_s, grid.z_s, grid=True, **kwargs)
)
grad_A_par = grid.perpendicular_gradient(A_par)
B_1 = vector_cross(grad_A_par, toroidal_vector(B_toroidal)) / B_toroidal
B_1.attrs["norm"] = grad_A_par.norm
e_rho = equi.magfield_vector_radial(grid.r_s, grid.z_s, normalize=True, **kwargs)
return make_xarray(
vector_dot(B_1, e_rho),
norm=B_1.norm,
name="Radial magnetic field fluctuation",
)