Define different rotational stiffness in a 4 way joint (2 timber lap joint)

Hi. Sorry if this is a noob question. I’m new to Karamba,

I would like to model laps joints across timber beams.Karamba01.gh (33.6 KB)

I would like to have a different stiffness value between the continuous-length of the beam, and have a smaller value for the joint between-beams. For example, in the above minimal setup. I want a joint between b0-b1 and b2-b3 to be stiffer, joint across the two beams (for example b0-b2 or b1-b2 or b1-b3 or b0-b3) to be less stiff.

I tried a combination of things using the Beam-Joint-Agent and selecting with element id but without much success, I cannot seem to be able to control the inter-beam vs intra-beam stiffness separately.

One of the things I tried:

Hi @yck011522,
when using ‘A’ as input for ‘AtElemIds’ and ‘ToElemIds’ joints will be defined at both ends of the elements.Use ‘ToGeom’ instead and input the intersection point (see here for details).

For the third element it is the question whether you want to connect it to the first or second element. This can however only be done by introducing an additional node at the corresponding element.

In Karamba3D a joint acts like a zero length spring which gets added between the end of the element and the node to which it connects.

– Clemens

Thanks @karamba3d. I’ll try add an extra node between them. Just a quick question, this node do have to be in different position (despite small distance) , is that correct? Or can it be two node in the same position but with some sort of different identifier?

What was not clear in the documentation is what happens if I supply both ‘AtElemIds’ and ‘ToElemIds’.

Lets say if I have three elements (A,B,C), two nodes (1,2): where A - 1 - B - 2 - C

  • I expect ‘AtElemIds’ = A and ‘ToElemIds’ = No input : results in creating joint from A to 1.
  • I expect ‘AtElemIds’ = B and ‘ToElemIds’ = No input : results in creating joint from B to 1 and B to 2.

First I’m not sure if Joint A to 1 is different from B to 1. The way you describe the joint as ’ zero length spring which gets added between the end of the element and the node’ suggest that it is different. Especially if there are more than two elements connected to one node.

  • I expect ‘AtElemIds’ = B and ‘ToElemIds’ = A : results in creating joint from B to 1 only.

I could not verify if this is true. Maybe I’m missing something out but I don’t see a way to visualize the joints crated by the Joint-Agent

Via ‘AtElemIds’ one can define at which elements joints can potentially be placed.
‘ToElemIds’ is one of the criteria which need to be fulfilled so that a joint gets created. In case you provide identical input to ‘AtElemIds’ and ‘ToElemIds’ then joints will be placed at all end-points of the corresponding elements.

In the WIP version of Karamba3D 2.0.0 the criteria for placing joints at elements get connected via and ‘and’-relation: If one specifies ‘ToElemIds’, ‘ToNodeInd’ and ‘ToGeom’ all three criteria need to be met before a joint gets created. Prior to Karamba3D 2.0.0 the relation was evaluated using ‘or’.

Use spring elements in case you want to add very short beam pieces. otherwise numerical problems might arise because short beams have a large stiffness which can result in a badly conditioned stiffness matrix.
– Clemens