algorithmic modeling for Rhino


I'm trying to calculate the bending moment utilization for a CHSC to verify how Karamba's utilization element performs its analysis. I've performed hand calculations according to Eurocode 3 (BS EN 1993-1-1:2005), which have matched perfectly for the shear force utilization, but which are slightly (~10%) off for bending moment utilization.  I have tried multiple Class 1 and 3 cross sections, using the plastic and elastic section modulus respectively as outlined in section 6.2.5, but my result for bending moment utilization is always slightly off.  It always lies somewhere between the result predicted by the elastic section modulus (pi*(R^4-r^4)/(4R)) and the plastic section modulus ((D^3-d^3)/6), which has made me wonder if Karamba is using some combination of the two in calculating utilization.  I have also checked if using the reduced yield strength considered in 6.2.8 (Bending and Shear) helps, but this does not match the Karamba output either.        

The Grasshopper file I am basing my calculations on is attached.  Thanks in advance for any insight you can give!



Views: 895


Replies to This Discussion

Hello Tess,

the calculation of the utilization of beams according to Eurocode 3 is quite lengthy. Therefore I have attached the C++ sourcecode for its determination as used in Karamba. There are mostly formulas in the file 'CroSecStateImp_EC3.cpp' so you do not need to know any C++ language details. The file can be opened in a text editor and contains comments and references to the formulas in EC3.

In order to see some itermediate results, set 'Details?' to 'true' on the 'Utilization'-component (see attached definition).



Dear Clemens,

Thank you so much for the quick and helpful response.  I'd appreciate your help with a few more related questions if possible.

I am trying to clarify if I understand how the optimize cross section and utilization components work, because I'm getting some unexpected results.  I'm trying to use the optimize cross section component along with a galapagos component that varies the height of the truss to minimize mass, to optimize the geometry of a truss. However, using the utilization component to look at my results, I sometimes find that the maximum utilization exceeds the limit set in the optimize cross section component, and the maximum of any of the individual utilization outputs (axial, shear, etc).  I was under the impression that the overall reported utilization of an element was simply the maximum of all the individual utilizations checks, but perhaps that is incorrect?

I see in another post that the optimize cross component works similarly to the evolutionary solver used in the Galapagos.  So for a truss, it would just iterate the specified number of times and give the solution that maximizes utilization for each member? And therefore the type of utilization (axial, shear, bending) governing the problem would not affect the process of optimization, due to the nature of the evolutionary solver?  And it includes checks for buckling?

My GH file is attached and if you could have a look at it I would really appreciate it.

Additionally, can you see if I am setting up pinned joints for the truss correctly as I'm unsure how to do this. 

Thanks very much!




Dear Tess,

try to reduce the complexity of the definition. That makes it easier to find the source of unexpected results.

The overall utilization that comes out of the 'Utilization'-component is not the maximum of the individual utilization outputs: for a beam it makes e.g. a difference whether there is uniaxial or biaxial bending. The individual utilization components are meant to give a feedback regarding which cross section force governs the design.

The cross section optimizer does not utilize evolutionary optimization algorithms. It calculates the structural system and uses the computed cross section forces to select the most appropriate cross section. Then a new calculation is done which in case of statically indeterminate systems leads to new cross section forces, new cross sections are chosen and so on. For details please see the manual. This algorithm is not guaranteed to converge - elements with utilization larger than one may result. Sometimes it helps to increase the number of iterations. For structures which have a sufficient plastic capacity for the redistribution of internal forces (like e.g. steel or aluminum structures) this is however not a problem since the lower limit theorem of plasticity applies.

The procedure for calculating the utilization according to EC3 includes buckling. The buckling length is calculated based on the connectivity of the beams and is not always conservative. In case of system buckling (e.g. the upper cord of a truss may buckle as a whole) one has to adapt the buckling length using the 'ModifyElement'-component.

You could switch off the bending stiffness via the 'ModifyElement'-component. Then you get truss elements and do not have to apply joints.



For completeness, the attached C++ file contains the procedure for classifying I-profiles according to EC3.









  • Add Photos
  • View All

© 2020   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service