[★☆☆☆☆] Response Spectrum
Minimum version: v2.6
The model script can be downloaded. computing-response-spectrum.zip
Introduction
Imaging you are asked to compute the response spectra of a collection of accelerograms which may be obtained from some earthquake event. How would you do it?
According to the definition, the response spectrum is the maximum response of structures with different natural frequencies to the same earthquake.
A natural approach is to:
- Create a SDOF linear mass-spring-dashpot model with proper parameters that result in the desired natural frequencies and damping ratios.
- Perform full response history analysis for each frequency point.
- Compute the maximum response at each frequency point.
- Plot the response spectrum.
This is fine, but extremely inefficient. For linear systems, you may have known that Duhamel's integral can be used to compute the response. Indeed, Duhamel's integral is a de facto practice for computing response spectra, especially in the field of seismology.
However, even Duhamel's integral is not sufficiently performant. A blazing fast algorithm is proposed
by Lee.
The algorithm is implemented as the response_spectrum
and
the sdof_response
command.
In this example, we will demonstrate how to use the response_spectrum
and sdof_response
commands to compute the
response spectra and compare the results with the full response history analysis.
Model
To allow comparison, we define a minimum SDOF model.
We assume the frequency of the SDOF model is \(2\) Hz, which is equivalent to a natural frequency of \(4\pi\) rad/s. The damping ratio is chosen to be a typical value \(0.02\).
Assuming a unit mass and a stiffness proportional damping model, this gives the following parameters.
For damping, assuming \(c=a_1k\), then
The provided acceleration is sampled with a sampling interval of \(0.03\) s. To improve the accuracy of the response history analysis, the time step size is set to \(0.01\) s.
Note since we are applying acceleration as inertial force, the amplitude of the acceleration is \(-1\).
SDOF Response
The sdof_response
command can be used to compute the response.
The result will be saved to EZ_sdof_response
.
Analyse and Compare
We can now run rha.sp
and sdof.sp
to obtain two sets of results.
Python | |
---|---|
Now let's try to plot the results.
The results are shown below.
It is evident that Lee's algorithm is accurate. If one pays attention to the wall clock time required by two approaches, Lee's algorithm is much faster than the full response history analysis. On an average platform, Lee's algorithm is 100 times faster (indicative). There are a few things to note.
- The response history analysis often requires a small step size --- a fraction of sampling interval of acceleration record. This is to ensure the accuracy of the result.
- Lee's algorithm is essentially an IIR filter. It only requires two multiplications per time step. The sampling interval can be directly used to compute the response.
- With Lee's algorithm, in a more general setting, velocity and acceleration responses would be computed as the scaled difference of displacement and velocity responses, respectively. They are also blazing fast to compute.
- To compute response spectrum, as we only need the maximum response, further optimisation can be made. See Lee's paper for further discussions.
Response Spectrum
Initial Attempt
We have gained some confidence in the reliability of the result. The response_spectrum
command essentially calls the
sdof_response
command to compute the maximum response at each frequency. Now we can use it to compute response
spectrum.
We provide a vector of periods of interest. The result will be saved to EZ_response_spectrum
. The spectra can be
plotted.
Refine the Result
As the sampling interval of the provided acceleration record is \(0.03\) s, it appears to be too large to obtain accurate result. How to tell that? Given that the damping ratio is small, SA and PSA should be close.
We can try to refine the result by using a smaller interval. To this end, we first create a new record by linear interpolation.
Python | |
---|---|
Now we can run the analysis again.
The results are shown as follows.