Karamba3D Mesh Load

Is there a way to apply mesh loads only on beam that satisfy BOTH beamID and AddPos inputs?

In a large structure it is not practical for each beam to have an unique ID and if using AddPos only then it will apply the loads onto other beams that are connected to the same nodes.

[Edit]: In the added gh file, I would like to have the loads on beams that has “Col” as ID, but obviously only if they intersect with the mesh. Changing the ID is not an option as stated above. Thanks
KarambaExample.gh (29.0 KB)

Hi, i am not sure if i understood the question properly.

the mesh will apply loads when the faces are close to the actual beams.
For example, when i scale the mesh, it is only applied to the first two columns and not on the last one

The Add Pos is only needed if you need to specific points on your geometry where the loads should be applied

Hi Tam,

Thank you for your reply. Please let me re-clarify what my goal is. With the original set up, I would like:

  • to have the force acting on the 2 beams circled in red
  • to not have the force acting on the other same ID (circled in yellow) because it does not intersect with the mesh and I want to keep this beam ID to be the same with the 2 above.
  • to not have the force acting on the other 2 beams with ID “crossBracing” but note that these connect the 2 red circled beam start to end.

Hi, in this case, the best and easiest would be to set element IDs for the ones that should receive the load. You dont need to give each element a unique ID, but the ones that receive the load, one iD and the one that does not receive the load a second ID.

Hi Tam,

Having different IDs aren’t really practical, at least for us. It wouldn’t work in the attached example because a column might receive loads in some cases/ wind directions, but not others. The wind code in Australia (and I believe it would be similar elsewhere) even makes it harder by splitting a wall surface into smaller surfaces to assign different load factor.

So I guess there is no solution at the moment. However as a future development, could Karamba check if the column actually intersect with the mesh before putting load on it? Because if there is no wall attached, there is no load right? Or there are special cases that I am missing?

in this case, the mesh loads will only be applied to those elements which are closest to the columns. So if you give all the columns the same ID, and you offset the meshes slightly in the opposite direction of your load direction, then you can make sure that loads are only applied to the columns closest to the mesh

Hi Tam,

well first off all that would require some serious calculations to find out all the suspects and then make sure each point on the mesh is now further away from them.
On top of that it would be a hit and miss. Imagine a situation where moving it away from one column makes it closer to another one.
I think the potential solution could be one of the following:

  • for Karamba3D engine to check if the element actually in collision with the mesh (or within a specified distance) before applying the load
  • Make the inputs ElemIDs and Geometry with an “AND” relationship, so that the loads will only apply to elements that satisfy both conditions, however I understand this could be a fundamental change and no one would like that
  • Have another input similar to ElemIDs but works the opposite way, which means those that have ID in that list would not be applied forces.

With a quick check, you can see that Karamba3D already only applies loads to the elements which are “close” to the mesh. However you can control this quite easily with the mesh settings. You can integrate the ends of the beams to the mesh to make sure that the vertices are close to the elements you want to apply loads to.

If you set the mesh resolution to lower, it will apply loads to elements which are the closest to the mesh vertices.

If you adjust the resolution to a higher value, then you can see that the loads are only applied to the elements which are “touching” the mesh.

Is this what you are trying to achieve? Please test out the workflow and if there are any suggestions on how we can improve the workflow, that would be greatly appreciated.

meshloads.gh (26.3 KB)

Hi Matthew,

Sorry for the late reply but I haven’t had much time to go back to this issue.
Yes I that was what I was trying to achieve, however the solution would not work because a low resolution mesh might cause the force being applied in a very rough way (picture attached). In that example I use 0.5 as MRES for MeshBrep component, which turn out to be not enough! And obviously it’s impossible to tinker with each mesh individually as there are hundreds mesh per run.

My suggestions are as previous comment, which I think the 2nd idea would work out the best.

Hi, you can simply reduce the mesh resolution to get a more accurate distribution of the load. To calculate only beams that collide with the mesh is also risky because it means that your mesh needs to be perfectly defined as your beam geometry. Often mesh geometry is not as accurate and there might be gaps between the mesh and the beam geometry.

One other method is to give the beams a second “id” by using the " | " separator. Then you can make sure only those beams with that second id will receive the load.

Let me get this right: When you said reduce the mesh resolution, you meant to increase mesh density to achieve a higher number of V and F mesh? But then I am back to square one because one (or a few of them) might be closer to a beam that is not intersecting with the mesh at all.
The second option is also not gonna work because then you would need to give an extra ID per load case and that quickly escalate.
Back to your first point, yes there might be gaps between the beam and the geometry, but couldn’t you use LDist input in Assemble like a tolerance check?

I hope I do not complicate matters now.
If you want the load to act on the wall only, why not unhook ‘Line Loads’ in the ‘Generation’ submenu of the ‘MeshLoad’-compponent. In such a way only the vertices of the wall get loaded. The wall need not be a real structural element. It could be a dummy for distributing the loads on the columns correctly.

I agree, having an option in the MeshLoad-component to apply loads only to elements on the mesh could be a practical enhancement.

– Clemens

Hi Clemens,

Sorry but I don’t quite understand. The Generation submenu of the MeshLoad component does not take any input to be unhooked? It only has options to generate either point loads or line loads as shown below

Hi @user1986,
sorry, I chose the wrong expression. It should have been unselect ‘Line Loads’ instead of unhook. Try to generate point loads only - these will lie on the shell vertices.
– Clemens

That’s not our desired outcome for quite many reasons. I will wait for this update then

I agree, having an option in the MeshLoad-component to apply loads only to elements on the mesh could be a practical enhancement.