algorithmic modeling for Rhino


I'm currently working on a project in which I would like to find an optimum shape for a shell structure based on the principels of inversed hanging membranes (like the shells designed by Isler). When an optimum form is obtained, the cross section of the different shell elements can be optimized. I would like to obtain a shell model with an optimized height and optimized cross sections for the different shell elements

I tried to make a script with the Karamba tools 'Large deformation' and 'Optimize cross section', but since I'm quite new with the programs I am unable the check whether I made a correct definition. Besides that I do not understand why:

- the model view shows a flat shell/plate when the cross section is defined in the form finding part...

- the legend only says: multiple legends and I am not able to view the different cross-section

- how it is possible to make the different shell elements visible on the shell model in rhino 

I would be really great if someone would be able to help me out!

thanks a lot in advance!

kindest regards, Britt

Views: 1236


Replies to This Discussion

Hello Britt,

there was a problem with data tree structures in your definition. When you plug lists of items into e.g. the Assemble-component make sure to have the path structure right otherwise you may end up with multiple models. In order to see the data structure flowing around in the connections enable 'Draw/Drawe Fany Wires'. A dashed line then indicates a data tree (i.e. a list of list ... of items), double lines lists of items and single lines single items. Use 'Flatten' to turn a data tree into a list (see attached definition).

You can make the different shell elements visible by enabling 'Display/Preview Mesh Edges' in the GH menu.

For form finding it may be advantageous to provide a value at the 'MasDisp' input-plug of 'LaDeform'. This makes the incremental solution procedure more stable.




Hi Clemens,

Thanks for your response! The legend is working again and i am able to make the different shell element visible! 

I am however still wondering whether my definition is correct. I would like to obtain an optimal form (and height) for a concrete shell with the length and width of the shell as set parameters. So I would like the model to calculate a corresponding optimal height of the shell (based on minimal stresses). 

I figured, based on the manual, the 'LaDeform'-tool would be able to find such an optimal height when I do not set a MaxDisp. (maybe I'm totally wrong about this...) but each time I define  some cross section the shell becomes almost flat. I don't know why this is happening.. When i would like to obtain the reaction forces the component also gives me an error: "1. Model of iteration #0: There are no calculated results available for the model. Did you forget to calculate the model?"

When the optimal form as described above is obtained, I thought the Optimize cross section tool would be able to select the smallest possible cross section for each seperate shell element (I would like to obtain an discrete colored model which shows the optimized minimal cross section of each element). I would expect that the particular elements close to the support would have a larger (minimal) cross section than the ones in the top of the shell. However in my model all elements have the same cross section which isway larger than i expected.... It is almost like it sees the shell as if it is built out of 1 shell component only. Besides this, the cross section of the whole shell is set to the largest value it possibly can have based on the range input, which makes no sense to me since it does not say the cross section is to small when I define a smaller maximum value in the range.

I would be really great if you would be able to look into it one more time! I guess I am not understanding correctly what the components are doing or how the apply them in my model... I really hope you can help me a bit!

would love to hear from you, thanks in advance!

Kind regards, Britt


Hi Britt,

the LaDeform-component works by applying the external load in several steps. After each step the geometry of the structural system is updated. This purely incremental procedure is rather inaccurate when it comes to determining the stresses in the deformed structure but is normally sufficent for formfinding purposes. This is why no stresses are output after the LaDeform-component.

The cross section optimization did not work because of a wrong path structure of the input of the cross section component (see attached definition).

In order to find the optimal height you could use e.g. Galapagos with the height as a free parameter and the total weight of the cross section optimized structure as the fitness.




Hi Clemens,

Thanks a lot for your help. 

I still do not understand some result the model is giving me:

1 - When I'm defining a cross section in the 'assemble model' component before the       LaDeform-component, it results in a flat plate - why is this?

2 - When I do not define a maximum displacement at the 'LaDeform'-component it results in a much higher shell then when I am defining an even larger maximum displacement. Why do the results I obtain differ so much when the maximum displacement I define is not constraining the height which is given when I do not limit the maximum displacement? 

I have got the feeling the model is not giving me a realistic result because of these problems..

It would be great if you could look into it again... thanks in advance!

kind regards, Britt 

Hi Britt,

ad 1.) Could it be that you have a mistake in the path structure of the model components? Does a first order theory analysis show a displaced structure?

ad 2.) When the maximum displacement is not defined in the LaDeform-component the loads of loadcase zero are incremented until the load factor reaches unity. When the maximum displacement is given, the load factor gets chosen so that the target deflection is achieved.



Hi Clemens,

Thanks for the respons! I actually do not know what I have changed but point 1 is solved! thanks!

I am not quite sure whether I understand your second answer correctly. Does this mean that the loads defined are actually scaled (up or down) to obtain the preferred maximum displacement? Because in that case, it would not be correct for me to use it. After all, I would like to find an ideal/optimized height for my shell for this particular loadcase... Or am I not understanding you correctly? Since I am now trying to obtain the optimal height by using the galapagos solver with the maximum displacement as a parameter and and the total weight of the cross section optimized structure as the fitness. But when I understand your 2nd answer correctly this does not result in a optimal height for this particular loadcase 0.. Because this optimum height (for loadcase 0) would only be obtained when there is no maxdispl. defined?!

On top of all this, I managed to obtain again an error at the optimizing cross-section component telling: 1. No elements have been selected for optimization. Do the cross section family names of the elements match those given in the cross section list?

It tried a lot, but can not find the problem. I am so sorry for asking so much time from you but it would again be really great if you found some again to look into it!

Thanks in advance!

kind regards,



Hi Clemens,

I came across another small thing I did not understand. The Displacement result coming out of the LaDeform component gives me a maximum reached displacement, but when I to the height of the shell the shell is often less high.. The same applies to the input parameter MaxDisplacement which results in a shell which is less higher then what i defined at this parameter but the displacement output is however giving me the same number/displacement (as the Maxdispl input). What displacement are they actually describing?

I still did not solved the above questions, I hope you can help me with these too.

Thanks a lot, Britt

Hi Britt,

the maximum displacement prescribed in the LaDeform-component is an absolute value. The X-, Y- and Z-components are equal or smaller than the absolute value.

Best, C.


Hi Britt,

for optimizing the height of the structure it is better to use the maximum-displacement for controlling the LaDeform-component since it leads to a more stable solution process than the option with increasing loads in equal steps.

For details on how the LaDeform.components works please read the Karamba manual.

In order to solve the problem with the cross section optimization: use the divide and conquer strategy: Reduce the size of the definition in several steps until the problem does not occur any more. Then apply the same method to the last step until you find the bug.

Best, C

Hi Clemens,

Thanks for all the help I received the past time.

I wasn't able to find the cross-section problem as described above, but used an earlier version in which it still works. 

I would like to ask you one more thing:

When analyzing the shell thickness, it is visualized in rhino as a middle surface, an upper and a lower surface. Is it instead possible to create a solid volume out of it? I would like to make some renders and maybe even a 3d print of the shell structure resulting from the analysis with karamba.

I hope there is an easy way to obtain this and that you are able to help me!

Hope to hear from you soon, thanks a lot in advance,

Best, Britt






  • Add Photos
  • View All

© 2023   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service