Force density

Do you know any plug-in that can do force density relaxation? I am currently using Geometry Gym and it does the job, but I can’t manage to find a way to calculate the correct force densities for each link of the mesh. In this way the lenghts of the initial links and the lenghts of the resulting ones after the relaxation will not differ much.

Do you have any experience from Kangaroo2 ? If yes notify for a demo … but exploiting/inquiring particle indices and the likes (per goal) is a task for code.

For K2 231 in action and with regard indices matters see files uploaded for Daniel in this thread :

BTW: That’s a static demo case - all the parametric functionality is removed - related with some nasty issue with regard post solution mesh normals … but if you dig into the C# you’'l see the way to extract info from particles based on their index. I have no idea how to do that via native K2 components … if I got(?) correctly(?) what you are after.

Anyway in case that you think that a similar demo could have some meaning for you describe with some details more what exactly is the issue.

1 Like

Hi - can you clarify a bit what you are trying to do?
Are you form-finding a cable net or a membrane?

If you set each edge of a mesh as a length goal in Kangaroo, with a target length of zero, and all the same strength, this is the same as having a constant force density for all edges - since the length goal acts like a spring, with force proportional to extension, and when rest length is zero, the current length is the extension. If force is proportional to length, then force density stays constant since it is defined as force/length.

You also have the option in Kangaroo of using a constant tension goal for lines, in which the force does not depend on length, like with a spring, but maintains whatever value you set. Both will find an equilibrium, but this will minimize total length of the edges in a mesh, whereas the zero length springs/constant force density will minimize total squared length.

Which is more appropriate is hard to say without knowing more about the aim. I’m guessing though that maybe your question is also something to do with finding the tension values for the real structure after the form-finding step? Are you trying to replicate behaviour of some other software like GSA?

1 Like

Hi Daniel!
Glad that a legend like you responded.
I am doing tests on tensile membranes. I will provide later today a full detail of what is needed plus the math behind it. It is relatevely simple thing.
GSA is garbage.

In the following example in red is the result from Geometry Gym (Haven’t played with Kangaroo yet) and it is incorrect. In green is the correct result. Notice from the top view that after relaxation of the exact same geometry, there is a difference in the link lenghts. This is not desireable. Later on when static analysis is performed, this is problematic.

The effect is most noticable at the edge of the membrane.

In order for this to work correctly one needs to take in account several things:

  1. Desired pre-stress in the membrane both in warp and weft directions. (The pre-stress ratio in tensile structures is not always 1:1)
  2. Estimated pre-stress (pre-stress in warp + pre-stress in weft / 2)
  3. Force in the edge cables (if the edges are not fixed of course). The formula is simple, I can post it later.
  4. Using the geometry and all of the info from above, the correct force densities for each link then can be calculated.

It is a lot of hasle, I know, and one can say "but the shape is largerly the same)… And yes, if you plan to show this to a client for a presentation, I agree… But go and analyze it or manufacture it correctly :slight_smile:

I saw the tool that seprates warp and weft in Kangaroo. Like it very much! Very useful!

If you want to keep vertices of a mesh fixed in plan, but free to move in Z, you can use the AnchorXYZ goal (of course the link lengths will still have to change in space during the relaxation.)

This can be particularly helpful if you want to use the soap film elements, because then you have no in-plane stiffness and the nodes tend to drift around, so you need spacers to keep them organised. If locking their movement in plan is an option this is much easier.

The warp/weft component won’t work if you start from a triangulated mesh. In this case though, you could take your flat mesh and sort the edges by angle to separate them and assign different strengths to each.

Also - Using forces based solely on the edges makes it easier in terms of warp and weft, but if you want a true soap-film geometry, then you need to use the triangular elements which use the area when calculating the tension.
Currently these soap-film triangles are only isotropic though. I think I could add some with directional stiffness if needed though.

Can you post an example def. The latests version of Kangaroo is far more complex than the one I knew how to use and I couldn´t find a tutorial which does the form finding in this manner. I want to try it out. I think the AnchorXYZ will do the trick, but I want to test it and compare it to results from several software packages that I use. But then, if the plane of the structure is not horizontal? I want to try and make the formfinding in Grasshopper, so if I have a great number of structures and the design needs to be changed, then all of the membranes will be changed too.

But again… I am building tensile structures for a decade now. I am using the best solutions possible. If you don’t introduce the pre-stress and you don’t calculate the force densities for each link, you are not doing much. My trouble is that I can not code basically :slight_smile: At the end all these structures are manufactured with woven materials, the majority of which are with warp and weft under 90 degrees angle. If one does not take this under account later on their statical analysis is invalid. Sure the shape resulting from both approaches is the same. But if you pre-stress a tensile structure with let say 1kN, 0.5 kN, 0.2 kN, etc. in both warp and weft directions, the resulting equilibrium shape is exactly the same. The forces in it are different and this is very important. Then a soap film is a minimal surface, what we are looking for here is a force equilibrium. A minimal surface at some point has zero curvature. This means that at this particular point the structure can not carry any external load. On the other hand a shape in equilibrium does not have zero curvature anywhere. Hence it is a lot more safer to be manufactured. Technically what is needed is a solution which takes the geometry, takes pre-stress and the forces in the edge cables, calculates the correct force densities and then finds the new link lenghts and the X,Y,Z coordinates of the points after relaxation. Of course this is the case if someone actually wants to manufacture these structures. Otherwise for an architectural or visualization purposes, the avaivable tools are good enough.

example.3dm (665.7 KB)

1 Like (15.9 KB)
Here’s an example showing your geometry relaxed while keeping vertices fixed in X and Y.

Ok, got it. Compare the result to the green mesh in my example. There is an issue near the edges. The nodes there are not relaxed.

The nodes at the edges are where they start in the input mesh you provided.
It is a different mesh from the green one.

Yes the green one is properly relaxed. My point is that simply restraining the X&Y does not do the trick. I am experimenting with every possible tool done for rhino and the results are largerly the same. It is because of the approach. As I have said already, the best method is by calculating the force denseties. This weekend I plan to experiment a bit with creating a def that calculated the coordinates of a simple sadle roof. When I finnish with it I will message you to check it out.

A simple thought experiment:
A piece of cable is tensioned at its both end. We gradually increase the amount of stress. The lenght of the cable does not change significantly. That’s what happens in reality with any membrane material (provided that it is not etfe or any other foil).

Your green and black meshes have different topology.
Are you saying you want the relaxation to also rebuild your mesh for you? This is quite a different thing.
If you’re just saying you want to allow the boundary vertices to slide along the edges that is also possible.

Pardon my interruption from the peanut gallery but the Crv param is not initialized?


I took a wild guess, selected and joined all the fragments(?) to get the yellow arch curve (below) and got something reasonable. But is it what you intended? Thanks. Kangaroo is pretty cool but I have no clue how to really use it.


You just need to join the segments and move it in Z direction down where the mesh is. That’s not the issue. The problem is the way the X,Y,Z coordinates for every point are calculated. Furthermore in Kangaroo, the anchor points are not exactly where they should be. This is also problematic. If you zoom in it is noticable.

I understand that. Like I said, just a feeble attempt from the peanut gallery to follow along. Very interesting, guys. Thanks.

1 Like

You can try to test this example file (it is using Kangaroo2 but allows you to specify pre-stress):

1 Like

Will test it out!