Source code for struphy.geometry.domains.shafranov_dshaped_cylinder.shafranov_dshaped_cylinder_kernels

"""Pyccel kernels for the mapping and Jacobian matrix of :class:`struphy.geometry.domains.ShafranovDshapedCylinder`."""

from numpy import arcsin, cos, pi, sin
from pyccel.decorators import pure


[docs] @pure def shafranov_dshaped( eta1: float, eta2: float, eta3: float, r0: float, lz: float, dx: float, dy: float, dg: float, eg: float, kg: float, f_out: "float[:]", ): r""" Point-wise evaluation of .. math:: x &= R_0\left[1 + (1 - \eta_1^2)\Delta_x + \eta_1\epsilon\cos(2\pi\,\eta_2 + \\arcsin(\delta)\eta_1\sin(2\pi\,\eta_2)) \\right]\,, y &= R_0\left[ (1 - \eta_1^2)\Delta_y + \eta_1\epsilon\kappa\sin(2\pi\,\eta_2)\\right]\,, z &= L_z\,\eta_3\,. Parameters ---------- eta1, eta2, eta3 : float Logical coordinate in [0, 1]. r0 : float Base radius. lz : float Length in third direction. dx : float Shafranov shift in x-direction. dy : float Shafranov shift in y-direction. dg : float Delta = sin(alpha): Triangularity, shift of high point. eg : float Epsilon: Inverse aspect ratio a/r0. kg : float Kappa: Ellipticity (elongation). f_out : array[float] Output: (x, y, z) = F(eta1, eta2, eta3). """ f_out[0] = r0 * (1 + (1 - eta1**2) * dx + eg * eta1 * cos(2 * pi * eta2 + arcsin(dg) * eta1 * sin(2 * pi * eta2))) f_out[1] = r0 * ((1 - eta1**2) * dy + eg * kg * eta1 * sin(2 * pi * eta2)) f_out[2] = eta3 * lz
[docs] @pure def shafranov_dshaped_df( eta1: float, eta2: float, eta3: float, r0: float, lz: float, dx: float, dy: float, dg: float, eg: float, kg: float, df_out: "float[:,:]", ): """Jacobian matrix for :meth:`struphy.geometry.domains.shafranov_dshaped_cylinder.shafranov_dshaped_cylinder_kernels.shafranov_dshaped`.""" df_out[0, 0] = r0 * ( -2 * dx * eta1 - eg * eta1 * sin(2 * pi * eta2) * arcsin(dg) * sin(eta1 * sin(2 * pi * eta2) * arcsin(dg) + 2 * pi * eta2) + eg * cos(eta1 * sin(2 * pi * eta2) * arcsin(dg) + 2 * pi * eta2) ) df_out[0, 1] = ( -r0 * eg * eta1 * (2 * pi * eta1 * cos(2 * pi * eta2) * arcsin(dg) + 2 * pi) * sin(eta1 * sin(2 * pi * eta2) * arcsin(dg) + 2 * pi * eta2) ) df_out[0, 2] = 0.0 df_out[1, 0] = r0 * (-2 * dy * eta1 + eg * kg * sin(2 * pi * eta2)) df_out[1, 1] = 2 * pi * r0 * eg * eta1 * kg * cos(2 * pi * eta2) df_out[1, 2] = 0.0 df_out[2, 0] = 0.0 df_out[2, 1] = 0.0 df_out[2, 2] = lz