Different principal shell stresses in Karamba

Hi everybody,

I’m working on a shell bridge made out of concrete. The goal is to optimize the thickness of the shell. For this I need my principal stresses of the shell. There are four loadcases so at first I used the shell view four times to see what the principal stresses are. This caused lots of time to make so therefore I tried to use the ShellVecResults. However these sigma1 and sigma 2 values differ from the ones out of the shell view component.

Is there somebody who can explain this difference?

I attached a picture to show the difference.

Hi @mlthesis2019,
the ShellVecResults-component returns the results at the element centroids.
For producing the rendering of the principal stresses one needs values at the vertices however. In Karamba3D these get calculated as a weighted average over the elements which connect to a given node. The weighting factor is the opening angle of an element divided by the sum of all opening angles at that node.
This is probably the reason for the deviation. With increasing mesh refinement the difference should shrink unless there are points with steep stress gradients.

Hi. I have kind of the same question but what I need to know is a bit different. I need the get the maximum and minimum principal stresses 1 and 2. Since the shell view component is more meant to be for the visualization, I prefer to use the shell forces component. But the outputs of the shell force component are not exactly principal stresses but the principal normal force and the principal moment. Moreover, the units are different from the principal stresses outputs from the shell view component. My question is that what is the difference between principal stress and principal moment and principal normal force?

All the best,


Hi @mahanmotamedi1991,
the distributed normal force (n) in a shell cross section is the force per unit of length. In order to convert it to a stress (sigma) one needs to divide it by the shell thickness t: sigma = n / t.
Distributed bending moments (m) give rise to a linear stress distribution over the shell thickness such that sigma = m * 12 / (t^3)*z. Where z is the distance from the cross section center. The maximum stress at the upper and lower boundary of the shell (z = ±t/2) thus comes out as sigma = m * 6 / t^2.

The principal directions of the moments and normal forces do not necessarily coincide. Therefore one can not simply add the contributions from e.g. n1 and m1. Instead one needs to start from the distributed forces and moments in the local element coordinate system, calculate the stress state at the position in question and then calculate the principal stresses.

An alternative would be to use Karamba3D 2.0.0 WIP (see here), specify a material with a Rankine yield criterion, set the tensile and compressive strength to ‘1’ and calculate the utilization of the shell elements.
– Clemens


Thank you very much Clement for your explanation. I have two more questions:
1- Is there any reason why you suggest to set the tensile and compressive strength to 1kn/cm^2? Because the material I’m using has different capacity.
2- the utilization is the ratio of yield strength of the material and the van mises stresses.(Refer to : https://manual.karamba3d.com/3-in-depth-component-reference/3.6-results/3.6.6-utilization-of-elements) . In order to get the pure principal stresses should I retain the stresses from the van misses equation
{\displaystyle \sigma _{\text{v}}={\sqrt {\sigma _{1}^{2}-\sigma _{1}\sigma _{2}+\sigma _{2}^{2}}}!} ?
If yes how I can separately calculate principal stresses 1 and 2?

All the best,


Hello @Mahan,
the reason why I suggest a strength of 1kN/cm2 is, that then the utilization is the same as the principal stress. Use a Rankine strength hypothesis when defining the material. It is based on the principal stresses.
– Clemens

Hello Clement,

Thanks for your reply. Again I can’t understand how to get sigma 1 and sigma 2. Because the utilization is only one number for each face of the mesh. I’m trying to use your method one by using following equation. The bound of the results slightly differ from the bound of sigma results from shell view component.
σ = N/t ± (6M)/t^2

Hello @Mahan,
in Karamba3D the comparative stress according to Rankine is calculated like this:

Vec3d sig_princ(sig.princ());
real utilc = fc() != 0 ? sig_princ[1] / fc() : 0;
real utilt = ft() != 0 ? sig_princ[0] / ft() : 0;
return utilt > utilc ? utilt : utilc;

Here sig.princ() contains the principal stresses. In order to get the first and negative second principal stress you need to switch between materials which have fc=0, ft=1 and fc=-1, ft=0.

If you prefer to work with the formula σ = N/t ± (6M)/t^2 then evaluate it to get σxx, σyy and tauxy. From these one gets the principal stresses as described here.
– Clemens

Hello again Clement,

Thanks for your clarification. I just found that the component (result vectors on shell) gives the principal stresses on each face. But the results from this component are not the same as the result from Shell view component.

Hello @mahanmotamedi1991,
I forgot to mention that option. Here you get the stresses without having to apply work-arounds. Setting ‘Layer Position’ to ‘+1’ or ‘-1’ gives you the stresses at the top and bottom of the shell.
The results you are computed at the centroids of the shell elements. The ShellView-component displays results at the mesh vertices. These are derived by averaging the contributions of the shell elements around each node.
– Clemens