How does the Karamba ''tension-compression eliminator'' component work?

Hello everyone,

I am currently working on my graduation project in the field of structural engineering.

Without getting off-topic, I made a grasshopper model for my design and I use Karamba as FEM solver.
One of the components that I need to use is the tension-compression eliminator.

I briefly know what it does, but I would like to have some more literature/information about background/mechanics that lies within this component.

I really hope some-one can point me in the right direction! :slight_smile:

Kinds regards,

Joris Vleeshouwers

Hello @joris_vhw,
some details regarding the tension-compression eliminator can be found here: 3.5.12: Tension/Compression Eliminator 🔷 - Karamba3D 1.3.3.
In the test examples (see …\Rhino 7\Plug-ins\Karamba\Examples\TestExamples) there is the definition ‘’ which contains a scripted version of the t/c-eliminator.
– Clemens

Dear Clemens, thank you for your fast reply!

Do I understand correctly that the tension-compression eliminator executes a linear elestic analysis multiple times (depending on you reach the max nr. of iterations or no changes occur).

So there is no non-linear behavior involved?

Thank you very much for your help.

Kind regards,


Dear Joris,
the non-linear behavior comes from switching elements on and off.
– Clemens

Dear @cp1,

Thanks again for you fast reply. I am trying to fully understand this,

So it is correct, that although it looks like (geometrical) non linear behavior, the analysis with the t/c- eliminator is fully Linear. There is no change in stiffness like with cables, which stiffness increase when the geometry changes.

The t/c components performs a Linear Elastic analysis, analyzez afterwards which elements have compression/tension and removes either the compression or tension elements (based on what you selected) and then performs a new Linear Elastic analysis for the new geometry (situation).

It seems I cannot acces the script of the component, you mentioned. I hope you can share them somehow.

Kind regards,


Dear @joris_vhw,
your description is correct.
Here is the scripted version of the tension/compression eliminator from the Karamba3D examples: (29.9 KB).
– Clemens

Dear Clemens,

I am almost at the end of my project and I still have a question to ask regarding the Tension Compression eliminator. I noticed that reducing the number of Max iterations (I used 100 as default), drastically reduces the computation time.

My question: does the Tension Compression Eliminator always proceed till the max number of iterations has been reached, or does the iteration process stop as soon as only compression or tensile members are left (depending on what element type is allowed to survive).

For example: Max iterations (i_max) is 100, and I want to remove all the tension elements. After 20 iterations (i), no more tensile members are noticed. Does the iteration process stop at i = 20, or are still 80 iterations performed till i_max is reached.

Looking forward to your reply,

Kind regards,

Joris Vleeshouwers

Hi, yes the components stops when there are no changes after the last iteration or if it has reached the max iterations. Please see 3.5.12: Tension/Compression Eliminator 🔷 - Karamba3D 1.3.3

Dear Clemens,

Thanks for your help so far! One additional question :wink: I read the description in the link you referred to (Karamba 3D manual). And it is was mentioned that elements are not ‘‘really’’ removed but assigned with a very negligible stiffness (soft-kill approach). Considering '‘Force Follows Stiffness’, these elements with very low stiffness will attract (almost) no loading, but does this also mean that they are skipped in the next iteration, or are all elements (even the ones with the assigned negligible stiffness) assessed again?

So you import a domain of 1…n elements, you check them all and ‘‘remove’’ tension elements, but they are not physically removed. Does the domain remain 1…n meaning that all elements are assessed again, or is it reduced to 1…m elements in which m<n. Meaning that the elements with the negigible stiffness are not considerd. Please see the scheme I made:

Nb is the normal force to be assessed, and I am checking and eliminating tensile forces. i stands for the iteration number. 1…n is the domain at the start. you check all elements ‘‘b’’ step by step and update the domain based on ‘‘removed’’ elements. If the domain length does not change, no elements are removed and no tensile forces were found.

In summary, my questions are:
(1) does the TC eliminator consider all imported elements each iteration, or is the domain updated?
(2) additional question: if all elements are considered again and again, can elements also be added during the iteration process, or only be removed?

Thank you very much for you help!

Kind regards,


Dear @joris_vhw,
ad 1.) The TC eliminator considers all elements in each iteration
ad 2.) Elements can be readded.
The algorithm looks like this:

  • for each iteration
    • for each element
      - calculate minimum and maximum N for all load-cases to be considered
      - If compression elements shall be eliminated:
      + if Nmin < 0: add element and Nmin to list ElemList of elements to be potentially eliminated
      - If tension elements shall be eliminated:
      + if Nmax > 0: add element and Nmax to list ElemList of elements to be potentially eliminated
    • Sort list of elements to be potentially eliminated with regards to N
    • Soft-kill ‘ElemList.Count / (max_iter - iter)’ elements with the largest compressive/tension normal force. ‘iter’ is the current index of the iteration

– Clemens

Dear Clemens,

Thank you very much for you reply and all your help! I think I get it now.

With the soft kill approach, elements that you want to eliminate get a very low stiffness and as a result, als get a very low force in the next iterations (force follows stiffness). Therefore, the algorithm simply has to search for the ‘‘highest’’ forces in the entire domain of elements. Because of the negligible stiffness, tension can also switch to compression or vice versa, becauase in a new iteration the geometry is changed.

This process continues till no changes occur in the iteration steps or the i_max has been reached.

Do you pherhaps have a screenshot of the scripted/coded version that I use as annex to my report (of coare with reference). I am not able to open the coded version you sent in a previous message

Thank you again for your help. I’ll let you know 10 dece how my graduation went!

Best regards.


Dear @joris_vhw,
here you are: TensionCompressionEliminatorAlgorithm.txt (3.3 KB).
– Clemens