9.5. Mappers¶
- class cherab.core.math.mappers.AxisymmetricMapper¶
Performs an 360 degree rotation of a 2D function (defined on the xz plane) around the z-axis.
Due to the nature of this mapping, only the positive region of the x range of the supplied function is mapped.
- Parameters:
function2d (Function2D) – The function to be mapped.
>>> from numpy import sqrt >>> from cherab.core.math import AxisymmetricMapper >>> >>> def f1(r, z): >>> return r >>> >>> f2 = AxisymmetricMapper(f1) >>> >>> f2(1, 0, 0) 1.0 >>> f2(1/sqrt(2), 1/sqrt(2), 0) 0.99999999
- class cherab.core.math.mappers.IsoMapper2D¶
Applies a 1D function to modify the value of a 2D scalar field.
For a given 2D scalar field f(x,y) and 1D function g(x) this object returns g(f(x,y)).
- Parameters:
function2d (Function2D) – the 2D scalar field
function1d (Function1D) – the 1D function
>>> from raysect.core.math.function.float import Interpolator1DArray >>> from cherab.core.math import IsoMapper2D >>> from cherab.tools.equilibrium import example_equilibrium >>> >>> equilibrium = example_equilibrium() >>> >>> # extract the 2D psi function >>> psi_n = equilibrium.psi_normalised >>> # make a 1D psi profile >>> profile = Interpolator1DArray([0, 0.5, 0.9, 1.0], [2500, 2000, 1000, 0], 'cubic', 'none', 0) >>> # perform the flux function mapping >>> f = IsoMapper2D(psi_n, profile) >>> >>> f(2, 0) 2499.97177 >>> f(2.2, 0.5) 1990.03783
- class cherab.core.math.mappers.IsoMapper3D¶
Applies a 1D function to modify the value of a 3D scalar field.
For a given 3D scalar field f(x,y,z) and 1D function g(x) this object returns g(f(x,y,z)).
- Parameters:
function3d (Function3D) – the 3D scalar field
function1d (Function1D) – the 1D function
>>> from raysect.core.math.function.float import Interpolator1DArray >>> from cherab.core.math import IsoMapper2D, AxisymmetricMapper >>> from cherab.tools.equilibrium import example_equilibrium >>> >>> equilibrium = example_equilibrium() >>> >>> # extract the 3D psi function >>> psi_n = equilibrium.psi_normalised >>> psi_n_3d = AxisymmetricMapper(psi_n) >>> # make a 1D psi profile >>> profile = Interpolator1DArray([0, 0.5, 0.9, 1.0], [2500, 2000, 1000, 0], 'cubic', 'none', 0) >>> # perform the flux function mapping >>> f = IsoMapper3D(psi_n_3d, profile) >>> >>> f(2, 0, 0) 2499.97177 >>> f(0, 2, 0) 2499.97177
- class cherab.core.math.mappers.Swizzle2D¶
Inverts the argument order of the specified function.
- Parameters:
function2d (Function2D) – The 2D function you want to inverse the arguments.
>>> from cherab.core.math import Swizzle2D >>> >>> def f1(r, z): >>> return r**2 + z >>> >>> f2 = Swizzle2D(f1) >>> >>> f2(3, 0) 3.0
- class cherab.core.math.mappers.Swizzle3D¶
Rearranges the order of a 3D functions arguments.
For instance, a 90 degree rotation of function coordinates can be performed by swapping arguments: xyz -> xzy
Shape is a tuple of 3 integers from 0,1,2 imposing the order of arguments. 0, 1 and 2 correspond respectively to x, y and z where ( x,y,z) are the initial arguments. For instance: shape = (0,2,1) transforms f(x,y,z) in f(x,z,y) shape = (1,0,1) transforms f(x,y,z) in f(y,x,y)
- Parameters:
function3d (Function3D) – the 3D function you want to reorder the arguments.
shape (tuple) – a tuple of integers imposing the order of the arguments.
>>> from cherab.core.math import Swizzle3D >>> >>> def f1(x, y, z): >>> return x**3 + y**2 + z >>> >>> f2 = Swizzle3D(f1, (0, 2, 1)) >>> >>> f2(3, 2, 1) 30.0
- class cherab.core.math.mappers.VectorAxisymmetricMapper¶
Performs an 360 degree rotation of a 2D vector function (defined on the xz plane) around the z-axis.
Due to the nature of this mapping, only the positive region of the x range of the supplied function is mapped.
- Parameters:
vectorfunction2d (VectorFunction2D) – The vector function to be mapped.
>>> from cherab.core.math import VectorAxisymmetricMapper >>> >>> def my_func(r, z): >>> v = Vector3D(1, 0, 0) >>> v.length = r >>> return v >>> >>> f = VectorAxisymmetricMapper(my_func) >>> >>> f(1, 0, 0) Vector3D(1.0, 0.0, 0.0) >>> f(1/sqrt(2), 1/sqrt(2), 0) Vector3D(0.70710678, 0.70710678, 0.0)