# Cylinders origin

**URL:** <https://bempp.discourse.group/t/cylinders-origin/122>\
**Category:** Bempp\
**Created:** [8 March 2022 03:43 UTC](https://bempp.discourse.group/t/cylinders-origin/122 "2022-03-08T03:43:55Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![bartek](https://avatars.discourse-cdn.com/v4/letter/b/bcef8e/32.png) [@bartek](https://bempp.discourse.group/u/bartek)\
**Post date:** [8 March 2022 03:43 UTC](https://bempp.discourse.group/t/cylinders-origin/122/1 "2022-03-08T03:43:55Z")

</div>

Hello Everyone,

BEM++ seems to be a great and powerfull tool, however I have some stupid problem with a cylinder shape, trying to find the solutions of the Masxwell’s exquation for a radio wave. The object:

bempp.api.shapes.shapes.cylinders( _h=1.0_ , _z=1.0_ , _r=[0.5, 1, 1.5, 1.7]_ , _square=False_ )

seems to have no explicite origin, like the others. How can I fix it and move the object / put it in the desired place? Possibly I just have to add a shift vector, but I am not shure how. Sorry, but the definitions of the objects meshes are somehow intransparent for me, please help.

Thank you in advance!

---

<div class="post-metadata">

**Author:** ![mscroggs](https://yyz2.discourse-cdn.com/free1/user_avatar/bempp.discourse.group/mscroggs/32/3_2.png) [@mscroggs](https://bempp.discourse.group/u/mscroggs)\
**Post date:** [8 March 2022 08:54 UTC](https://bempp.discourse.group/t/cylinders-origin/122/2 "2022-03-08T08:54:51Z")

</div>

Hello,

Currently, cylinders has no origin input, but I’ve just opened a pull request to add one: [Add origin input to cyliders by mscroggs · Pull Request #147 · bempp/bempp-cl · GitHub](https://github.com/bempp/bempp-cl/pull/147).

More generally, if you want to use a shape that isn’t provided in the shapes module, you can write a import the function `__generate_grid_from_gmsh_string` and pass a gmsh string into this. For example, the following example will make a mesh just like `bempp.api.shapes.cylinders`, but you could edit the gmsh string to adjust the mesh. (I made this example by adding a print inside the cylinders function)

```python
from bempp.api.shapes import __generate_grid_from_gmsh_string
geo = """
cl = 1.0;
z = 1.0;
Point(1) = {0.0, 0.0, 0.0, cl};
Point(2) = {0.5,0.0,0.0,cl};
Point(3) = {0.0,0.5,0.0,cl};
Point(4) = {-0.5,0.0,0.0,cl};
Point(5) = {0.0,-0.5,0.0,cl};

Circle(1) = {2, 1, 3};
Circle(2) = {3, 1, 4};
Circle(3) = {4, 1, 5};
Circle(4) = {5, 1, 2};
Line Loop(11) = {3, 4, 1, 2};
Plane Surface(21) = {11};
Point(6) = {1.0,0.0,0.0,cl};
Point(7) = {0.0,1.0,0.0,cl};
Point(8) = {-1.0,0.0,0.0,cl};
Point(9) = {0.0,-1.0,0.0,cl};

Circle(5) = {6, 1, 7};
Circle(6) = {7, 1, 8};
Circle(7) = {8, 1, 9};
Circle(8) = {9, 1, 6};
Line Loop(12) = {7, 8, 5, 6};
Plane Surface(24) = {12, -11};
Point(10) = {1.5,0.0,0.0,cl};
Point(11) = {0.0,1.5,0.0,cl};
Point(12) = {-1.5,0.0,0.0,cl};
Point(13) = {0.0,-1.5,0.0,cl};

Circle(9) = {10, 1, 11};
Circle(10) = {11, 1, 12};
Circle(11) = {12, 1, 13};
Circle(12) = {13, 1, 10};
Line Loop(13) = {11, 12, 9, 10};
Plane Surface(27) = {13, -12};
Point(14) = {1.7,0.0,0.0,cl};
Point(15) = {0.0,1.7,0.0,cl};
Point(16) = {-1.7,0.0,0.0,cl};
Point(17) = {0.0,-1.7,0.0,cl};

Circle(13) = {14, 1, 15};
Circle(14) = {15, 1, 16};
Circle(15) = {16, 1, 17};
Circle(16) = {17, 1, 14};
Line Loop(14) = {15, 16, 13, 14};
Plane Surface(30) = {14, -13};
out[] = Extrude {0,0,z} {Surface{21}; Layers{cl};};
Reverse Surface{21};
Physical Surface(10) = {21, out[0]};
Physical Surface(21) = {out[2], out[3], out[4], out[5]};
out[] = Extrude {0,0,z} {Surface{24}; Layers{cl};};
Reverse Surface{24};
Physical Surface(20) = {24, out[0]};
Physical Surface(32) = {out[2], out[3], out[4], out[5]};
out[] = Extrude {0,0,z} {Surface{27}; Layers{cl};};
Reverse Surface{27};
Physical Surface(30) = {27, out[0]};
Physical Surface(43) = {out[2], out[3], out[4], out[5]};
out[] = Extrude {0,0,z} {Surface{30}; Layers{cl};};
Reverse Surface{30};
Physical Surface(40) = {30, out[0],out[2], out[3], out[4], out[5]};
b() = Boundary{Volume{1};};
b() = Boundary{Volume{2};};
b() = Boundary{Volume{3};};
b() = Boundary{Volume{4};};

Mesh.Algorithm = 3;
"""

grid = __generate_grid_from_gmsh_string(geo)

```

---

<div class="post-metadata">

**Author:** ![bartek](https://avatars.discourse-cdn.com/v4/letter/b/bcef8e/32.png) [@bartek](https://bempp.discourse.group/u/bartek)\
**Post date:** [9 March 2022 16:15 UTC](https://bempp.discourse.group/t/cylinders-origin/122/3 "2022-03-09T16:15:15Z")

</div>

Thank you very much,

I was first probably a little bit overwhelmed by the gmsh-language, which I will have to study next. The answer to my question, which I found out at the end myself was much simpler: having a mesh, to move it about a vector, say [x,y,z] is just to manipulate the objects variable vertices, i.e.:

mesh.vertices[0]+=x; mesh.vertices[1]+=y; mesh.vertices[2]+=z

Thank you very much anyway!
