Source code for torx.measure.fluid.drift_flux_m

"""Calculate particle and heat drift fluxes across a surface defined by a LineoutSet."""
import numpy as np
import xarray as xr
from torx.arrays import make_xarray
from torx.grid import Grid3D
from torx.decorators import autodoc_function
from torx.units import Normalization
from torx.equilibrium import EquilibriumBaseClass
from torx.analysis.lineouts import LineoutSet
from torx.analysis import drift_flux

[docs] @autodoc_function def rad_particleflux_ExB( grid: Grid3D, equi: EquilibriumBaseClass, lineout_set: LineoutSet, norm: Normalization, density: xr.DataArray, pot: xr.DataArray, n_samples: int=500, total: bool=True, ): """Calculate the electrostatic ExB particle drift flux.""" return drift_flux(grid, equi, lineout_set, norm, pot, coeff=density, n_samples=n_samples, total=total)
[docs] @autodoc_function def rad_particleflux_dia( grid: Grid3D, equi: EquilibriumBaseClass, lineout_set: LineoutSet, norm: Normalization, density: xr.DataArray, temp: xr.DataArray, charge: float=1., n_samples: int=500, total: bool=True, ): """Calculate the diamagnetic particle drift flux.""" coeff_n = make_xarray( density, norm=density.norm/norm.elementary_charge ) coeff_T = make_xarray( temp, norm=temp.norm/norm.elementary_charge ) prefac = -1/charge return prefac * ( drift_flux( grid, equi, lineout_set, norm, temp, coeff=coeff_n, n_samples=n_samples, total=total, ) + drift_flux( grid, equi, lineout_set, norm, density, coeff=coeff_T, n_samples=n_samples, total=total, ) )
[docs] @autodoc_function def rad_particleflux_em_e( grid: Grid3D, equi: EquilibriumBaseClass, lineout_set: LineoutSet, norm: Normalization, density: xr.DataArray, apar_fluct: xr.DataArray, upar: xr.DataArray, jpar: xr.DataArray, n_samples: int=500, total: bool=True, ): """Calculate the electromagnetic electron drift flux.""" R = grid.r_u Z = grid.z_u phi = grid.coords["phi"] btor = xr.apply_ufunc( equi.magfield_component_toroidal, R, Z, phi, input_core_dims=[["points"], ["points"], []], output_core_dims=[["points"]], vectorize=True, dask='parallelized', output_dtypes=[np.float64] ) apar_fluct_over_btor = make_xarray( apar_fluct/btor, norm=apar_fluct.norm/norm.B0 ) nvpar_btor = make_xarray( (jpar - density*upar)*btor, norm=density.norm*upar.norm*norm.B0 ) return drift_flux(grid, equi, lineout_set, norm, apar_fluct_over_btor, coeff=nvpar_btor, n_samples=n_samples, total=total)
[docs] @autodoc_function def rad_particleflux_em_i( grid: Grid3D, equi: EquilibriumBaseClass, lineout_set: LineoutSet, norm: Normalization, density: xr.DataArray, apar_fluct: xr.DataArray, upar: xr.DataArray, n_samples: int=500, total: bool=True, ): """Calculate the electromagnetic ion drift flux.""" R = grid.r_u Z = grid.z_u phi = grid.coords["phi"] btor = xr.apply_ufunc( equi.magfield_component_toroidal, R, Z, phi, input_core_dims=[["points"], ["points"], []], output_core_dims=[["points"]], vectorize=True, dask='parallelized', output_dtypes=[np.float64] ) apar_fluct_over_btor = make_xarray( apar_fluct/btor, norm=apar_fluct.norm/norm.B0 ) nupar_btor = make_xarray( density*upar*btor, norm=density.norm*upar.norm*norm.B0 ) return drift_flux(grid, equi, lineout_set, norm, apar_fluct_over_btor, coeff=nupar_btor, n_samples=n_samples, total=total)
[docs] @autodoc_function def rad_heatflux_ExB( grid: Grid3D, equi: EquilibriumBaseClass, lineout_set: LineoutSet, norm: Normalization, density: xr.DataArray, pot: xr.DataArray, temp: xr.DataArray, n_samples: int=500, total: bool=True, ): """Calculate the electrostatic ExB electron heat drift flux.""" coeff = make_xarray( 1.5*density*temp, norm=density.norm*temp.norm ) return drift_flux(grid, equi, lineout_set, norm, pot, coeff=coeff, n_samples=n_samples, total=total)
[docs] @autodoc_function def rad_heatflux_dia( grid: Grid3D, equi: EquilibriumBaseClass, lineout_set: LineoutSet, norm: Normalization, density: xr.DataArray, temp: xr.DataArray, charge: float=1., n_samples: int=500, total: bool=True, ): """Calculate the diamagnetic electron heat drift flux.""" coeff_n = make_xarray( 2.5*temp*density, norm=density.norm*temp.norm/norm.elementary_charge ) coeff_T = make_xarray( 2.5*temp*temp, norm=temp.norm*temp.norm/norm.elementary_charge ) prefac = -1/charge return prefac * ( drift_flux( grid, equi, lineout_set, norm, temp, coeff=coeff_n, n_samples=n_samples, total=total ) \ + drift_flux( grid, equi, lineout_set, norm, density, coeff=coeff_T, n_samples=n_samples, total=total ) )
[docs] @autodoc_function def rad_heatflux_em_e( grid: Grid3D, equi: EquilibriumBaseClass, lineout_set: LineoutSet, norm: Normalization, density: xr.DataArray, electron_temp: xr.DataArray, apar_fluct: xr.DataArray, upar: xr.DataArray, jpar: xr.DataArray, n_samples: int=500, total: bool=True, ): """ Calculate the electromagnetic electron heat drift flux. Note: This does not take into account parallel heat conduction (q_par). """ R = grid.r_u Z = grid.z_u phi = grid.coords["phi"] btor = xr.apply_ufunc( equi.magfield_component_toroidal, R, Z, phi, input_core_dims=[["points"], ["points"], []], output_core_dims=[["points"]], vectorize=True, dask='parallelized', output_dtypes=[np.float64] ) apar_fluct_over_btor = make_xarray( apar_fluct/btor, norm = apar_fluct.norm/norm.B0 ) nvpar_Te_btor = make_xarray( 2.5*electron_temp*(jpar - density*upar)*btor, norm = electron_temp.norm*density.norm*upar.norm*norm.B0 ) return drift_flux(grid, equi, lineout_set, norm, apar_fluct_over_btor, coeff=nvpar_Te_btor, n_samples=n_samples, total=total)
[docs] @autodoc_function def rad_heatflux_em_i( grid: Grid3D, equi: EquilibriumBaseClass, lineout_set: LineoutSet, norm: Normalization, density: xr.DataArray, ion_temp: xr.DataArray, apar_fluct: xr.DataArray, upar: xr.DataArray, n_samples: int=500, total: bool=True, ): """ Calculate the electromagnetic ion heat drift flux. Note: This does not take into account parallel heat conduction (q_par). """ R = grid.r_u Z = grid.z_u phi = grid.coords["phi"] btor = xr.apply_ufunc( equi.magfield_component_toroidal, R, Z, phi, input_core_dims=[["points"], ["points"], []], output_core_dims=[["points"]], vectorize=True, dask='parallelized', output_dtypes=[np.float64] ) apar_fluct_over_btor = make_xarray( apar_fluct/btor, norm = apar_fluct.norm/norm.B0 ) nupar_Ti_btor = make_xarray( 2.5*ion_temp*density*upar*btor, norm = ion_temp.norm*density.norm*upar.norm*norm.B0 ) return drift_flux(grid, equi, lineout_set, norm, apar_fluct_over_btor, coeff=nupar_Ti_btor, n_samples=n_samples, total=total)