OpenSees Cloud

OpenSees AMI

That's a Large Mass

Original Post - 01 Aug 2021 - Michael H. Scott

Visit Structural Analysis Is Simple on Substack.


After cutting through all the spam, you’ll find some good posts on the OpenSees message board. In one such post, Ahmet Alper Parker asked about the large mass method (LMM) and if it can be implemented in OpenSees. I was not familiar with the LMM, so Ahmet pointed me to this paper.

The basic idea of the LMM is you input the ground acceleration as a force acting on a very large mass which acts as the base of the structural model. For a uniform excitation, the LMM is an alternative to applying effective earthquake forces to the dynamic DOFs.

Two DOF large mass model

Based on the paper and other sources online, the large mass, M, should be about 105 times larger than the total mass of the structural model. The large mass also needs to be restrained, e.g., with a soft spring, so that the model doesn’t float off into space.

My initial thought was the LMM sounds a lot like a soil column, which is commonly used for propagating ground motion through an SSI model. I asked a couple geotechs–they hadn’t heard of the LMM either and they also brought up soil columns.

Regardless, here’s an OpenSees model of the two DOF example from the paper. The script loops through fixed-based and LMM analyses for the Tabas ground acceleration record.

import openseespy.opensees as ops

m = 10
k = 100

a = 1e5
M = a*(m+m)

Tfinal = 50.0
dt = 0.01
Nsteps = int(Tfinal/dt)

for model in ['EF','LM']:
    ops.wipe()
    ops.model('basic','-ndm',1,'-ndf',1)

    ops.node(0,0); ops.fix(0,1)
    ops.node(1,0)
    if model == 'EF':
        ops.fix(1,1)
    if model == 'LM':
        ops.mass(1,M)
    ops.node(2,0); ops.mass(2,m)
    ops.node(3,0); ops.mass(3,m)

    ops.uniaxialMaterial('Elastic',0,k/100) # Soft spring
    ops.uniaxialMaterial('Elastic',1,k)

    ops.element('zeroLength',0,0,1,'-mat',0,'-dir',1)
    ops.element('zeroLength',1,1,2,'-mat',1,'-dir',1)
    ops.element('zeroLength',2,2,3,'-mat',1,'-dir',1)

    ops.timeSeries('Path',1,'-dt',0.02,'-filePath','tabasFN.txt')
    if model == 'EF':
        ops.pattern('UniformExcitation',1,1,'-accel',1)
    if model == 'LM':
        ops.pattern('Plain',1,1)
        ops.load(1,M)

    ops.analysis('Transient','-noWarnings')
    ops.analyze(Nsteps,dt)

The eigenvalues and eigenvectors of the two models are the same; however, the large mass produces an additional mode with essentially zero frequency. The displacement response histories for the three DOFs in each model are shown below.

Dynamic response using LMM

One cool thing about the LMM is you get the ground displacement “for free” because the big mass DOF is part of the numerical solution. For this simple example, after you subtract the motion of the large mass, the LMM gives the same response as the effective force approach.

Although this analysis did not use damping, note that mass proportional Rayleigh damping may have unintended consequences in LMM models.

Based on online discussion (here and here), it seems the LMM may have been a workaround for older FEA software that didn’t have functionality for support excitation. However, Google Scholar searching reveals some recent papers that explore how the LMM can be used for structural models with non-uniform, multi-support excitation. In his post, Ahmet pointed out that the LMM is able to dissipate energy in models of base isolated structures. Also, the LMM seems to be a physically sound way to model shake table experiments, but I feel like I’m repeating the past.

This post was meant to show a simple example of the LMM, not to dive deep into the method’s pros and cons. Further investigation is required.