Handling a Doubt

After a post on the “constraint matrix not identity” warning message, a couple people followed up (one by post comment and the other by direct communication) that they didn’t realize the Plain constraint handler works with equalDOF constraints.

The Plain constraint handler has not always been able to handle equalDOF constraints–I vaguely recall Frank modifying the Plain handler years ago to work with equalDOF. So, the doubts about the Plain handler and equalDOF didn’t come out of nowhere.

Anyway, to clear any doubts about the Plain handler, I made a minimal example with three nodes, one spring, one boundary condition, and one equalDOF constraint.

The displacements of nodes 2 and 3 should equal 0.1.

import openseespy.opensees as ops

k = 100
P = 10

ops.wipe()
ops.model('basic','-ndm',1,'-ndf',1)

ops.node(1,0); ops.fix(1,1)
ops.node(2,0)

ops.uniaxialMaterial('Elastic',1,k)
ops.element('zeroLength',1,1,2,'-mat',1,'-dir',1)

ops.node(3,0)
ops.equalDOF(3,2,1)

ops.timeSeries('Constant',1)
ops.pattern('Plain',1,1)
ops.load(3,P)

ops.constraints('Plain')
ops.analysis('Static')
ops.analyze(1)

print(ops.nodeDisp(2),ops.nodeDisp(3))

Run the above script and you’ll see that the Plain handler enforced the equalDOF constraint, i.e., the displacements of nodes 2 and 3 are both 0.1. No errors. No warnings. No doubts.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.