39. Visualising the structural response for NDoF

Questions and discussion for this lecture live here. Fire away by hitting Reply below :fire:

Hello Dr. Sean,
The maximum displacement based on first graph for structure response is 0.35m but based on last graph the ground displacement is 1.5m. if the ground moved for 1.5m then it should be assumed no ground failure with this amount of movement. Now if we assumed that the pile foundation was deep enough and fix the base of the building, then how it does impact building movement?

Hey @joejavady,
Remember that we defined a scale factor of 5 for our animation…from the lecture text:

We define a scale factor for the structure and ground displacement to exaggerate them and make them more visible. Multiplying the ground acceleration by a further scale factor of zero or one allows us to easily include or remove it from our animation.

I’m not sure I fully grasp the second part of your question - please feel free to elaborate. I’m not a geotechnical engineer but will see what I can do :slight_smile:


Hello Dr. Sean,
I noticed that the ground moved 1.5m but building have 0.35m of movement. Also, the figure showed that the two columns of the building moving along the surface. I meant to consider fix point for base of the building at the top of the foundation. therefore, the building not able to move align the surface. then how building will be impact.

Thank you,

The building animation is showing ground motion too - this is why the building ‘appears’ to be sliding across the ground - this is just because we’re rendering the absolute motion. The time-history, below this is plotting relative motion.

In reality, at the foundation-ground interface, significant shear stresses (resisting sliding) and axial pressures (push-pull resisting overturning) will develop. If these stresses exceed the capacity of the bearing material (or structural elements) then failure will occur - likely leading to collapse.

@Sean, please see my comments/queries below:

  1. During the MDOF and introduction courses, we were introduced to the Piecewise, step by step, central difference and direct integration methods. Any reason why you used these methods variably, what method is best suited for a non-linear analysis and why no mention of Newark’s method and others?
  2. Following-up on a previous general question regarding non-linear analysis material properties approaches, Paz (2019) and A.K. Chopra structural dynamics references recommend assuming elasto-plastic behavior and calculating k at the yield limits. It is suggested that assuming non linearity in k rather than c is simpler due to the complexity of nonlinearity in c
  3. PDE Beam problem - Can the substitution used for the ODE to reduce it to a 1st order be used similarily on a PDE to reduce it to a 1st order with two variables and applying Scipy’s PDE function in our code?

Hi @asiric80

  1. The piecewise exact method is a very versatile and easy to understand numerical method that allows us to simulate non-linear behaviour quite easily. It is a good toolbox method to have. Direct integration using the central difference method is a good baseline from which to then use black box solvers like SciPy. Other methods were not excluded for any other reason than time.

  2. How we decide to model non-linearity will really depend on the specifics of the problem at hand. Non-linearity in stiffness and/or damping can be easily accommodated with a piecewise numerical technique like that explored in the course.

  3. I expect so (or a variation of it) although I haven’t explored this.


I had an issue with the final animation showing some overlapping subplots. Using the following seems to have fixed the issue. (I commented out some portions of the original code and added a few lines instead)

#-----------------------------------SET UP PLOTS--------------------------------
# fig, (ax1,ax2) = plt.subplots(nrows=2,ncols=1, figsize=(10, 14))
fig = plt.figure(figsize=(10, 14))
gs = gridspec.GridSpec(2,1,height_ratios = [4,1])
# ax1 = plt.subplot(gs[0])
# ax2 = plt.subplot(gs[1])
ax1 = fig.add_subplot(gs[0])
ax2 = fig.add_subplot(gs[1])

Much appreciated Dan - thanks for the update.