Application Center - Maplesoft

App Preview:

Wind load hitting skyscrapers

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


 

windload.mws

Wind load hitting skyscrapers

by Thomas Stoll and Klaus Thni,

Students at Technical University Graz, Austria,

skyscraper_2001@hotmail.com ,

2001 Stoll, Thni

NOTE: This worksheet demonstrates the use of Maple for calculating and animating uniform wind loads hitting skyscrapers of arbitrary height. The authors expect that this worksheet will only be used for teaching and educational purposes, for instance in civil engineering.

Introduction

Consider the case of a skyscraper being affected by a uniform wind load. We assume that the ceilings of the floors are rigid and the corresponding columns have no mass, so that the vibration is just caused by inner elastic reaction forces of the columns. Further, we suppose that all ceilings have the same mass and are homogeneous.

> restart;

[Maple Bitmap]

Initialisation

Loading of the packages

> with(linalg): with(plots): with(plottools):

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the name changecoords has been redefined

Warning, the name arrow has been redefined

Setting the parameters

Number of levels:

> n:=7:

Number of single pictures in animation sequence:

> numpict:=50:

Period of time between two single pictures:

> dtime:=2.6/numpict:

Initial conditions

> iq:=vector(n-1,[seq(1,i=2..n)]):
iqv:=vector(n-1,[seq(0,i=2..n)]):

Description of the mechanical system

Involved matrices

Mass matix:

> M:=diag(seq(10^6,i=2..n)):

Stiffness matrix:

> S:=matrix(n-1,n-1,0):
S[n-1,n-1]:=10^7:
for i from 1 to n-2 do
S[i,i]:=2*10^7; S[i,i+1]:=-10^7; S[i+1,i]:=-10^7;
od:

Eigenvalues and Eigenvectors

Frequencies of the free vibrations:

> invM:=diag(seq(1/10^5,i=2..n)):
A:=evalm(invM&*S):
lambda:=evalf(Eigenvals(A,vecs)):
omega:=sort([seq(abs(lambda[i])^(1/2),i=1..n-1)],`<`);

omega := [2.410733629, 7.092097729, 11.36129493, 14...

Modal matrix (matrix of Eigenvects):

> Ubar:=convert(vecs,matrix):

Explicit solution of displacement functions

> const:=linsolve(Ubar,iq):

Displacement functions x[i] (i=1..n):

> x[1]:=0:
for i from 1 to n-1 do
for j from 1 to n-1 do
ampl[i,j]:=Ubar[i,j]*const[j];
od;
x[i+1]:=sum(ampl[i,k]*cos(omega[k]*t),k=1..n-1);
od:

Visualization of the n solutions x[i] (i=1..n):

> plot([seq(x[i],i=1..n)],t=0..6);

[Maple Plot]

Animation

Components

Coloring functions: Great stress of a column is expressed by a darker color of the neighbouring ceilings:

> cfnc_b := x->.21*x+0.5:

Calculating the position of the solutions on equidistant time intervals:

> for i from 1 to n do
yact[i]:=3*(i-1);
for j from 0 to numpict-1 do
xact[i,j]:=evalf(subs(t=dtime*j,x[i]));
od;
od:

Calculating the relative displacement of two ceilings:

> for j from 0 to numpict-1 do
for i from 2 to n-1 do
rel[i,j]:=max(abs(xact[i-1,j]-xact[i,j]), abs(xact[i+1,j]-xact[i,j]));
od:
rel[1,j]:=abs(xact[1,j]);
rel[n,j]:=abs(xact[n,j]-xact[n-1,j]);
od:

Axis of the building:

> ax:=line([0,-3],[0,3*n-1.5],linestyle=4,color=red):

Ground:

> xpl:=1.1*Ubar[n-1,1]/Ubar[1,1]+5:
P0:=[xpl,0]: P1:=[-xpl,0]: P2:=[-xpl,-1.5]: P3:=[xpl,-1.5]:
ground:=POLYGONS([P0,P1,P2,P3], COLOR(HUE,0.13), STYLE(PATCHNOGRID)):
groundline:=line(P0,P1,thickness=2,color=black):

Calculating the coordinates of the column deflection splines, the antenna, the ceilings and of the windows, respectively:

> for j from 0 to numpict-1 do

# column splines:
for i from 1 to n-1 do
unassign('a','b','c','d');
sols1:=
solve({xact[i,j]=a*yact[i]^3+b*yact[i]^2+c*yact[i]+d,
xact[i+1,j]=a*(yact[i+1]-0.5)^3+b*(yact[i+1]-0.5)^2+c*(yact[i+1]-0.5)+d,
0=3*a*yact[i]^2+2*b*yact[i]+c,
0=3*a*(yact[i+1]-0.5)^2+2*b*(yact[i+1]-0.5)+c},{a,b,c,d});
assign(sols1);
stplot[i,j]:=
plot([a*y^3+b*y^2+c*y+d-5,y,y=yact[i]..yact[i+1]-0.5],color=black,thickness=1),
plot([a*y^3+b*y^2+c*y+d-4.7,y,y=yact[i]..yact[i+1]-0.5],color=black,thickness=1),
plot([a*y^3+b*y^2+c*y+d+5,y,y=yact[i]..yact[i+1]-0.5],color=black,thickness=1),
plot([a*y^3+b*y^2+c*y+d+4.7,y,y=yact[i]..yact[i+1]-0.5],color=black,thickness=1):
od;

# antenna:
if (j+1)*dtime>=0.88 then
antenna[j]:=line([xact[n,j]+4,yact[n]], [xact[n,j]+4,yact[n]+0.65],thickness=2),
line([xact[n,j]+3.1,yact[n]+0.55], [xact[n,j]+4,yact[n]+0.65],thickness=2),
line([xact[n,j]+3.6,yact[n]+0.1], [xact[n,j]+4.1,yact[n]+1.1]),
line([xact[n,j]+3.45,yact[n]+0.3], [xact[n,j]+3.5,yact[n]+0.9]),
line([xact[n,j]+3.2,yact[n]+0.1], [xact[n,j]+3.0,yact[n]+1.1]);
else
antenna[j]:=line([xact[n,j]+4,yact[n]], [xact[n,j]+4,yact[n]+1.5],thickness=2),
line([xact[n,j]+3.5,yact[n]+0.75], [xact[n,j]+4.5,yact[n]+0.75]),
line([xact[n,j]+3.7,yact[n]+1.125], [xact[n,j]+4.3,yact[n]+1.125]),
line([xact[n,j]+3.5,yact[n]+1.5], [xact[n,j]+4.5,yact[n]+1.5]);
fi;

# ceilings, window:
for i from 1 to n do
PLSt[i,j]:=POLYGONS([[xact[i,j]-5,yact[i]-0.5], [xact[i,j]+5,yact[i]-0.5],
[xact[i,j]+5,yact[i]], [xact[i,j]-5,yact[i]]],
COLOR(HUE,cfnc_b(rel[i,j])), THICKNESS(1));
PLStw[i,j]:=seq(POLYGONS([[xact[i,j]+k*2.5-0.8,yact[i]-0.75],
[xact[i,j]+2.5*k+0.8,yact[i]-0.75],
[xact[i-1,j]+2.5*k+0.8,yact[i]-1.95],
[xact[i-1,j]+2.5*k-0.8,yact[i]-1.95]], THICKNESS(2)), k=-1..1);
od;
od:

Display animation

> display([seq(display([
ax, seq(PLSt[i,j],i=1..n), seq(PLStw[i,j],i=2..n),
seq(stplot[i,j],i=1..n-1), antenna[j], groundline, ground]), j=0..numpict-1)],
axes=none, scaling=constrained, view=[-xpl..xpl,-1.5..3*n-1.5], insequence=true,
title=`Wind load hitting Skyscraper`);

[Maple Plot]

>

>

References

[1] Gasch/Knothe: Strukturdynamik, Diskrete Systeme, Band 1, Springer, 1987
[2] Flesch: Baudynamik, praxisgerecht, Band 1. Bauverlag, 1993
[3] Greimel/Bauer: Lectures notes, TU Graz, 2001

Disclaimer: While every effort has been made to validate the solutions in this worksheet, Waterloo Maple Inc. and the contributors are not responsible for any errors contained and are not liable for any damages resulting from the use of this material.