# [Gmsh] Conical Helix

Christophe Geuzaine cgeuzaine at uliege.be
Sat Mar 23 18:28:21 CET 2019

```
> On 23 Mar 2019, at 06:29, Jesus Vellojin <jesus.vellojinm at usm.cl> wrote:
>
> Dear Gmsh community,
>
> I am trying to make a conical tube helix using the Built-In interface. With no luck. I think I don't quite understand the whole functionality of the Extrude command. The following is my code to make a tube helix of parametric equation r(theta)=(Acos(theta),Asin(theta), C*theta).
>
> A=1; C=0.25/Pi;
> r=A/10;
> nturns=4;
> h=1;
> Point(1)={A+r,0,0,h};Point(2)={A-r,0,0,h};
> Point(3)={A,0,r,h};Point(4)={A,0,-r,h};
> //
> Circle(2) = {1, 5, 3};Circle(3) = {3, 5, 2};
> Circle(4) = {2, 5, 4};Circle(5) = {4, 5, 1};
> //+
> Curve Loop(1) = {2, 3, 4, 5};Plane Surface(1) = {1};
>
> ext1[] = Extrude {{0,0,C*Pi/2}, {0,0,1}, {0,0,0}, Pi/2} {
> Surface{1};
> Layers{30};
> Recombine;};
> For m In {1:4*nturns-1}
> ext1[] = Extrude {{0,0,C*Pi/2}, {0,0,1}, {0,0,0}, Pi/2} {
> Surface{ext1};
> Layers{30};
> Recombine;};
> EndFor
>
> Transfinite Surface {1};
> Recombine Surface{1};
> Coherence;
>
> We know that for a conical helix  the pitch is constant but radius, curvature and torsion change. This is possible by making the radius a linear function of the height. The following is my attempt to make the spiral helix of parametric equation r(t)=((r+tan(angle)z cos(2pi z), (r+tan(angle) * z sin(2pi  z), z ) for z in [0,max_height].
>
> r = 1/2; //Initial radius
> rd = 0.12; //Radius of the cross section
>
> t_final=5;
> angle=Pi/4; // Angle in radians;
> frec=2*Pi;
> layers=100;
>
> Point(1)={r+rd,0,0,h};Point(2)={r-rd,0,0,h};
> Point(3)={r,0,rd,h};Point(4)={r,0,-rd,h};
> //
> Point(5)={r,0,0,h}; //Centro de inicio de superficie extrude
> //
> Circle(2) = {1, 5, 3};Circle(3) = {3, 5, 2};
> Circle(4) = {2, 5, 4};Circle(5) = {4, 5, 1};
>
> Curve Loop(1) = {2, 3, 4, 5};Plane Surface(1) = {1};
>
> z=t_final/layers;
> thetha=Tan(angle);
> linear_=z+angulo;
> ext1[] = Extrude {?} {
> Surface{1};
> Layers{capas};
> Recombine;};
>
> For m In {1:layers}
> ext1[] = Extrude {?} {
> Surface{ext1};
> Layers{capas};
> Recombine;};
> EndFor
>
> The question marks is because I have no idea how to tell gmsh to make the appropriate twist. I don't want to use the OpenCASCADE and extrude Using Wire because I do not have control on the layers of the mesh and cannot use the recombine and transfinite algorithms successfully, like the code for the regular helix posted at the beginning.

Unfortunately only translation, rotation and translation+rotation ("twist") are currently supported in the built-in kernel. Adding a new transformation would not be too complicated, but it would require some coding.

Christophe

>
> Thanks in advance!
>
>
>
> _______________________________________________
> gmsh mailing list
> gmsh at onelab.info
> http://onelab.info/mailman/listinfo/gmsh

—
Prof. Christophe Geuzaine
University of Liege, Electrical Engineering and Computer Science
http://www.montefiore.ulg.ac.be/~geuzaine

```