In [1]:
from Frame2D import Frame2D
from IPython import display
display.Image('data/KG82.d/KG82a.jpg')
Out[1]:
In order account for initial out-of-straightness and partial yielding, notional lateral loads equal to 0.005 times the factored gravity loads contributed by each level are added to each level (CSA S16-09 8.4.1). At node H that will be $45 \times (10+10.5+10) \times 0.005 = 6.9\ kN$ and at node G it is $55 \times (10+10.5+10) \times 0.005 = 8.4\ kN$. These notional loads will be included in addition to the lateral forces shown above.
In [2]:
f = Frame2D('KG82')
f.input_all()
%matplotlib inline
f.show()
In [3]:
R = f.solve()
f.print_input()
f.print_results(rs=R)
The above are the results of a first-order analysis and should be compared with those shown in the following figure from Kulak & Grondin:
In [4]:
display.Image('data/KG82.d/KG82b.jpg')
Out[4]:
In [5]:
import pandas as pd
BM = [('AB',44.2,-57.5), # values given on figure, above
('BC',-232.,-236.),
('DE',181.,227.),
('EF',287.,330.),
('BE',290.,-515.),
('CF',236.,-330.)]
BOOK = pd.DataFrame({m:{'MZJ':a,'MZK':b} for m,a,b in BM}).T
BOOK
Out[5]:
In [6]:
HERE = pd.DataFrame([(m.id,ef.m2/1e6,ef.m5/1e6)
for m,ef in R.member_efs.items()],columns=['ID','MZJ','MZK']).set_index(['ID'])
HERE = HERE.loc[BOOK.index]
HERE
Out[6]:
In [7]:
(100*(HERE-BOOK)/HERE).round(2)
Out[7]:
In [8]:
REAC = pd.DataFrame(f.list_reaction_forces(R),columns=['ID','FX','FY','MZ']).set_index(['ID'])
REAC[['FY']]/1E3
Out[8]:
In [9]:
f.reset()
f.input_all()
rs = f.solve(pdelta=True)
f.print_results(rs)
f.write_results(f.dsname,rs)
The above are the results of a second-order ($P-\Delta$) analysis and should be compared with the following figure from Kulak & Grondin:
In [10]:
display.Image('data/KG82.d/KG82c.jpg')
Out[10]:
In [11]:
import pandas as pd
BM = [('AB',64.0,-39.2), # values given on gigure, above
('BC',-236.,-237.),
('DE',207.,244.),
('EF',301.,347.),
('BE',276.,-544.),
('CF',237.,-347.)]
BOOK = pd.DataFrame({m:{'MZJ':a,'MZK':b} for m,a,b in BM}).T
BOOK
Out[11]:
In [12]:
HERE = pd.DataFrame([(m.id,ef.m2/1e6,ef.m5/1e6)
for m,ef in rs.member_efs.items()],columns=['ID','MZJ','MZK']).set_index(['ID'])
HERE = HERE.loc[BOOK.index]
HERE
Out[12]:
In [13]:
(100*(HERE-BOOK)/HERE).round(2)
Out[13]:
Max. difference is 1.4%, which is much better and is actually quite decent.
In [ ]: