OpenSees Cloud

OpenSees AMI

The Three Node Quad

Original Post - 20 Aug 2023 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


Depending on your experience with finite elements, this post will either be totally obvious or it will blow your mind.

The standard bilinear, isoparametric four node quad element degenerates to a three node constant strain triangle when you assign two consecutive element nodes to the same location.

Four node quad node definitions

This fun fact is due to the math, not a bunch of ad-hoc if-statements in the FourNodeQuad class.

import openseespy.opensees as ops

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

ops.node(1,0,0); ops.fix(1,1,1)
ops.node(2,2.4,0);
ops.node(3,2.0,1.8);
ops.node(4,0,2.0); ops.fix(4,1,1)

E = 29000; nu = 0.3
ops.nDMaterial('ElasticIsotropic',5,E,nu)

t = 1.0
ops.element('quad',1, 1,2,3,3, t,'PlaneStress',5)
ops.element('quad',2, 1,1,3,4, t,'PlaneStress',5)

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

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

print(ops.nodeDisp(3))
print(ops.eleResponse(1,'stresses'))
print(ops.eleResponse(2,'stresses'))

Run the above script, then compare the results with those obtained after replacing the two quad elements with two triangle (tri31) elements.

ops.element('tri31',1, 1,2,3, t,'PlaneStress',5)
ops.element('tri31',2, 1,3,4, t,'PlaneStress',5)

The nodal displacement and the stresses are the same (the tri31 element has one Gauss point while the quad has four Gauss points).

As far as I know, there’s not much use to the three node degeneration of the quad element in OpenSees. Prior to implementation of the tri31 element, this trick could have been employed for triangulated 2D meshes, but the state determination would have taken four times longer than necessary and the storage of material data would have been four times higher than necessary.



Now, if anyone out there wants an exercise, determine if the four node shell elements degenerate to three noded formulations. Does ShellMITC4 reduce to ShellMITC3? Does ShellDKGQ reduce to ShellDKGT? Does ShellNLDKGQ reduce to ShellNLDKGT?

Let me know what you find in the comments section below.