OpenSees Cloud

OpenSees AMI

Rigid Diaphragm for 2D Models

Original Post - 05 Nov 2022 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


The rigidDiaphragm command allows you to constrain the motion of multiple secondary nodes to the motion of a primary node, e.g., when simulating rigid floor diaphragms in 3D structural models.

But what if you want to enforce rigid diaphragm constraints for a 2D model, e.g., as shown below?

Frame with rigid diaphragm

Prior to PR #764, you would have been out of luck with the rigidDiaphragm command. But there was an easy work around of looping over the secondary nodes and calling the equalDOF command.

for nd in [2,4,6]:
    #         primary secondary DOF
    ops.equalDOF(8,      nd,     1)

With PR #764, the rigidDiaphragm command works for 2D models. Specify the DOF to constrain, followed by the primary node then the secondary nodes.

#                 DOF primary secondaries
ops.rigidDiaphragm(1,    8,    *[2,4,6])

Similar to how the 3D rigidDiaphragm command checks that the primary and secondary nodes lie in the same global X-Y, Y-Z, or X-Z plane, the 2D version makes sure the nodes have the same Y or X coordinate (Y for constrained DOF 1, X for DOF 2).

A single rigidDiaphragm command is functionally no different from calling equalDOF several times–behind the scenes, rigidDiaphragm creates a separate MP_Constraint object for each secondary node.

The big improvement is conceptual, as many folks who use the equalDOF command to create rigid diaphragms in 2D think they can also construct rigid diaphragms in 3D using equalDOF constraints in two orthogonal directions–torsion be damned. Start with rigidDiaphragm in 2D so that you don’t mistakenly over-constrain your model when you go 3D.