'How to convert a cartesian problem in a cylindrical problem?

I display a gyroid structure (TPMS) in a cartesian system using Pyvista. I try now to display the structure in cylindrical coordinates. Pyvista displays something cylindrical indeed but it seems that the unit cell length is not uniform (while there is no reason to change this my parameter "a" being steady. This change seems to appear especially along z but I don't understand why (see image).

I have this: enter image description here Here is a part of my code.

Thank you for your help.

import pyvista as pv
import numpy as np
from numpy import cos, sin, pi
from random import uniform

lattice_par = 1.0  # Unit cell length
a = (2*pi)/lattice_par

res = 200j
r, theta, z = np.mgrid[0:2:res, 0:2*pi:res, 0:4:res]
# consider using non-equidistant r for uniformity

def GyroidCyl(r, theta, z, b=0.8):
    return (sin(a*(r*cos(theta) - 1))*cos(a*(r*sin(theta) - 1))
            + sin(a*(r*sin(theta) - 1))*cos(a*(z - 1))
            + sin(a*(z - 1))*cos(a*(r*cos(theta) - 1))
            - b)

vol3 = GyroidCyl(r, theta, z)

# compute Cartesian coordinates for grid points
x = r * cos(theta)
y = r * sin(theta)

grid = pv.StructuredGrid(x, y, z)
grid["vol3"] = vol3.flatten()
contours3 = grid.contour([0])  # Isosurface = 0

pv.set_plot_theme('document')
p = pv.Plotter()
p.add_mesh(contours3, scalars=contours3.points[:, 2], show_scalar_bar=False, interpolate_before_map=True,
           show_edges=False, smooth_shading=False, render=True)
p.show_axes_all()
p.add_floor()

p.show_grid()
p.add_title('Gyroid in cylindrical coordinates')
p.add_text('Volume Fraction Parameter = ' + str(b))
p.show(window_size=[2040, 1500])


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source