OpenSees Cloud
OpenSees AMI
Modal and Stiffness Proportional Damping
Original Post - 25 Jan 2023 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
OpenSees allows you to use both modal damping and stiffness proportional damping in a dynamic analysis. This combination of damping models is useful when you want to control damping in the low frequency modes and not let undamped high frequency response tarnish the analysis.
Consider a simplified model of a 40 story building. The story stiffness varies linearly from 900 at the base to 600 at the top. The mass of each floor and the roof is 1.0. The model is from the Hjelmstad structural dynamics book and the OpenSees model definition is shown in another post.
The first three modes have over 90% mass participation, so let’s specify damping ratios in only these modes and not worry about the higher modes–not yet.
Nmodes = 3
w2 = ops.eigen(Nmodes)
zeta = 0.025
damping = [zeta]*Nmodes
ops.modalDampingQ(*damping)
Note that we’re using quick modal damping because the computational expense of regular modal damping is pretty high in a response history analysis, even for this simple 40 DOF model.
With this assignment of damping, you get the target damping ratio in the first three modes and no damping in higher modes, as shown in the damping spectrum for the 40 story model.
To add damping to the higher modes, you can assign stiffness proportional damping. Choose a target damping ratio to be met at a target frequency or period, e.g., 2.5% damping at a period of 0.1T1 where T1 is the fundamental period.
Nmodes = 3
w2 = ops.eigen(Nmodes)
damping = [zeta]*Nmodes
ops.modalDampingQ(*damping)
ws = 10*w2[0]**0.5
a1 = 2*zeta/ws
ops.rayleigh(0,0,0,a1)
This gives the following damping spectrum.
But now you’ve added more damping to the first three modes. Damping sticklers don’t panic, you can adjust the modal damping ratios by subtracting the stiffness proportional contribution.
Nmodes = 3
w2 = ops.eigen(Nmodes)
ws = 10*w2[0]**0.5
a1 = 2*zeta/ws
ops.rayleigh(0,0,0,a1)
damping = [0]*Nmodes
for i in range(Nmodes):
damping[i] = zeta - a1*w[i]/2
ops.modalDampingQ(*damping)
Now you get a damping spectrum where you have the target damping ratio in the low modes and some damping to get rid of the high frequency response.
The vertical profiles of peak floor displacement and peak floor acceleration of the simple 40 story model are shown below for the Tabas fault normal ground motion.
Higher mode damping does not affect the peak floor displacements for this model, not to any great extent. However, adding stiffness proportional damping to the higher modes makes a significant difference in the peak floor accelerations.
For this model, adjusting the modal damping ratios to account for stiffness proportional damping contributions has a slight effect on the peak floor displacements but not on the peak floor accelerations.
Adapt these damping approaches to your models and see what makes sense.