If you are using commercial structural analysis software such as SAP2000/ETABS, creating a pinned connection can be done by clicking several button. However, no such thing menu is available on OpenSees. As such, I often see people make some mistake when they want to create a pinned connection. They usually use the ‘fix’ command on the rotational DOFs, assuming it will create a pinned connection. This is not the correct way. For starter, it also fix the column rotation while usually, you only want to have a pinned connection at the beam-column interface.
If you want to create a pinned connection, you can do so by creating a ‘dummy node’ and then use the equalDOF command. An OpenSeesPy example for a 2D system is available here. I will give you a brief walkthrough to help you understand better.
(If you are only using elasticBeamColumn, you can just use the -release option instead of using this method).
1. Create a Dummy Node where you want to create a pinned connection.
This dummy node should be located at the place where you want to create at the pinned connection, this is probably will be located at the beam-column intersection. Usually, to tell that this is a ‘dummy node’, I add a 0 at the node ID/tag end. So if my beam-column intersection is at node 345, I created a 3450 as the ‘dummy node’. Keep in mind that if you have pinned connection on both side of the node, you need to create two dummy node.
2. Use EqualDOF to contraint the translation
Use the equalDOF to constraint all the translation DOFs of the dummy node to the ‘real’ node. e.g. equalDOF(2,20,1,2) (Ensure that the DOF 1 and 2 of Node 2 is the same with DOF 1 and 2 of Node 20. As a note, DOF 1 is the movement in the X direction and DOF 2 is in the Y direction.). The “physical” meaning of this is that while at the dummy node, the beam/element caused some rotation but the rotation is ‘ignored’ because only the DOF 1 and 2 of the dummy node is connected to the ‘real’ node/system.
For a 3D model, it become a little bit more complicated because you need to ensure at what direction your pinned connection is. The first 3 DOFs of the 3D system is all the translation while the last 3 DOFs is related to the rotation (or in other term, Fx Fy Fz Mx My Mz).
There is many way to implement the pinned connection, such as using a very stiff zeroLength element (this is how the penalty constraint handler work on OpenSees), but personally I used the equalDOF because it is quite straightforward. Keep in mind to handle your equalDOF constraint with care. Because if you do the wrong constraining, your result could be funky and OpenSees WILL not throw you an error warning/crash.