"""Pyccel kernels for the mapping and Jacobian matrix of :class:`struphy.geometry.domains.HollowCylinder`."""
from numpy import cos, pi, sin
from pyccel.decorators import pure
[docs]
@pure
def hollow_cyl(eta1: float, eta2: float, eta3: float, a1: float, a2: float, lz: float, poc: float, f_out: "float[:]"):
r"""Point-wise evaluation of
.. math::
F_x &= \left[\,a_1 + (a_2-a_1)\,\eta_1\,\\right]\cos(2\pi\,\eta_2 / poc)\,,
F_y &= \left[\,a_1 + (a_2-a_1)\,\eta_1\,\\right]\sin(2\pi\,\eta_2 / poc)\,,
F_z &= L_z\,\eta_3\,.
Parameters
----------
eta1, eta2, eta3 : float
Logical coordinate in [0, 1].
a1 : float
Inner radius.
a2 : float
Outer radius.
lz : float
Length in third direction.
poc : int
periodicity in second direction.
f_out : array[float]
Output: (x, y, z) = F(eta1, eta2, eta3).
"""
da = a2 - a1
f_out[0] = (a1 + eta1 * da) * cos(2 * pi * eta2 / poc)
f_out[1] = (a1 + eta1 * da) * sin(2 * pi * eta2 / poc)
f_out[2] = lz * eta3
[docs]
@pure
def hollow_cyl_df(eta1: float, eta2: float, a1: float, a2: float, lz: float, poc: float, df_out: "float[:,:]"):
"""Jacobian matrix for :meth:`struphy.geometry.domains.hollow_cylinder.hollow_cylinder_kernels.hollow_cyl`."""
da = a2 - a1
df_out[0, 0] = da * cos(2 * pi * eta2 / poc)
df_out[0, 1] = -2 * pi / poc * (a1 + eta1 * da) * sin(2 * pi * eta2 / poc)
df_out[0, 2] = 0.0
df_out[1, 0] = da * sin(2 * pi * eta2 / poc)
df_out[1, 1] = 2 * pi / poc * (a1 + eta1 * da) * cos(2 * pi * eta2 / poc)
df_out[1, 2] = 0.0
df_out[2, 0] = 0.0
df_out[2, 1] = 0.0
df_out[2, 2] = lz