OpenSees Cloud

OpenSees AMI

Most Solvers Can Be Marplots

Original Post - 27 Aug 2020 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


Have you ever tried to replicate the familiar beam stiffness coefficients 12EI/L3, 6EI/L2, 4EI/L, and 2EI/L (there’s a poem about them) by imposing unit displacements and rotations at fixed supports? It should be one of the first sanity checks you make when using or developing new structural analysis software.

Fixed-fixed beam with imposed end displacements

You can perform this check in OpenSees by defining a single elastic beam element between two nodes, fixing each node, then using the sp command to impose a unit displacement or rotation at one end. The ensuing nodal reactions should equal the stiffness coefficients.

L = 100
E = 29000
A = 20
I = 1400

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

ops.geomTransf('Linear',1)
ops.element('elasticBeamColumn',1,1,2,A,E,I,1)

ops.timeSeries('Constant',1)
ops.pattern('Plain',1,1)
ops.sp(2,2,1.0) # Unit displacement at node 2, DOF 2

ops.constraints('Transformation')
ops.system('ProfileSPD') # THIS MATTERS!
ops.analysis('Static')
ops.analyze(1)
ops.reactions()

Note that you have to use a constraint handler for the imposed displacement. Although not shown here, you can also apply the same approach to finding fixed-end shears and moments for various member loads.

Unfortunately, working with fixed-fixed beams is easier said than done in OpenSees because many of the equation solvers just can’t handle the fact that there are no equations to solve, i.e., there are no unconstrained degrees of freedom. (It’s not the solver routines that cause problems, it’s the OpenSees code that wraps those routines that causes problems.)

At any rate, I think you would agree that an analysis should not fail because there are no equations to solve. Don’t call the cops on a party to which you were not invited!

Some equation solvers in OpenSees do not check if the number of equations is zero before calling the solver routine. You’ll see an odd error message, e.g., an illegal parameter value going into LAPACK’s DPBSV function when using system('BandSPD').

Fixed-fixed beam analysis using BandSPD solver

Other solvers check for zero equations and bypass the solver routines, but when the integrator asks the system of equations for the X vector, the poop hits the fan because null pointers will be dereferenced. You’ll see an error message like this when using ProfileSPD and many other solvers in OpenSees.

Fixed-fixed beam analysis using ProfileSPD solver

You can give the solver something to work with by using two elements with an interior node (and you’d be half way to passing a patch test). However, the only equation solver I’ve seen in OpenSees that can handle a fixed-fixed beam analysis is UmfPack. It checks for zero equations and doesn’t use a pointer to store X.

Fixed-fixed beam analysis using UmfPack solver

Until we fix these issues with the solvers in OpenSees, party on with UmfPack when analyzing fixed-fixed beams, or any other model with all degrees of freedom constrained.