OpenSees Cloud
OpenSees AMI
Effective Earthquake Forces
Original Post - 02 Jun 2024 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
There’s nothing special about the UniformExcitation
load pattern in
OpenSees. The pattern is a convenience for defining effective earthquake
forces due to uniform ground acceleration as plain ‘ol mechanical loads
on your model.
Consider the equation of motion for uniform ground acceleration, with linear inertia and damping forces, and influence vector \({\boldsymbol\iota}\) for the ground motion direction:
\[{\bf m}\ddot{\bf u} + {\bf c}\dot{\bf u} + {\bf p}({\bf u}) = -{\bf m}{\boldsymbol\iota}\ddot{u}_g(t)\]The right-hand side forcing function is \({\bf p}_{eff}=-{\bf m}{\boldsymbol\iota}\ddot{u}_g(t)\), which is a product of reference loads \({\bf p}_{ref}=-{\bf m}{\boldsymbol\iota}\) and scalar time series \(\ddot{u}_g(t)\).
So, if you get an error using UniformExcitation
, e.g., when attempting
to apply vertical ground motion to a model that works perfectly fine for
horizontal ground motion–or you just want to be sporty on any
model–you can define effective earthquake forces yourself.
Inside a Plain
pattern, loop over the nodes, get the nodal mass, then
apply mass as reference load in the opposite direction.
dir = 1 # 1=X, 2=Y, 3=Z
ops.timeSeries('Path',1,'-dt',0.02,'-filePath','tabasFN.txt','-factor',386.4)
ops.pattern('Plain',1,1)
for nd in ops.getNodeTags():
mass = ops.nodeMass(nd)
ndf = len(mass)
if dir > ndf or mass[dir-1] <= 0.0:
continue
peff = [0]*ndf
peff[dir-1] = -mass[dir-1]
ops.load(nd,*peff)
For a model with only nodal masses, the code snippet above is equivalent
to using the following UniformExcitation
pattern:
ops.timeSeries('Path',1,'-dt',0.02,'-filePath','tabasFN.txt','-factor',386.4)
ops.pattern('UniformExcitation',1,dir,'-accel',1)
A simple two-DOF model is shown below along with interpretations of the uniform excitation (UE) and effective force (EF) approaches.
Applying the ground acceleration with the UniformExcitation
pattern and
with effective forces via the Plain
load pattern (on a linear-elastic
model with k1=k2=100 kip/in
and m1=m2=10 kip-s2/in, and no damping)
gives identical results.
I’m not saying you should abandon the UniformExcitation
pattern.
Instead, I am pointing out that the pattern is a shortcut for defining
earthquake forces. The do-it-yourself Plain
load pattern approach can
get messy with element mass, so stick with UniformExcitation
.