Kulak & Grondin Example 8.2

This example is from "Limit States Design in Structural Steel", Ninth Edition, CISC, by Kulak and Grondin. It illustrates using the fictitious load method to determine second-order effects (i.e., the $P-\Delta$ method).


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)


Frame KG82:
===========


              # of nodal degrees of freedom: 36
  # of constrained nodal degrees of freedom: 10
# of unconstrained nodal degrees of freedom: 26  (= degree of kinematic indeterminacy)

                               # of members: 14
                             # of reactions: 10
                                 # of nodes: 12
                            # of conditions: 8
           degree of statical indeterminacy: 8



Nodes:
======

Node          X         Y  Constraints  DOF #s
----      -----     -----  -----------  ------
A         10000         0  FX,FY,MZ     26,27,28
B         10000      6500               0,1,2
C         10000     12000               3,4,5
D         20500         0  FX,FY,MZ     29,30,31
E         20500      6500               6,7,8
F         20500     12000               9,10,11
G         30500      6500               12,13,14
H         30500     12000               15,16,17
I         30500         0  FX,FY        32,33,18
J             0         0  FX,FY        34,35,19
K             0      6500               20,21,22
L             0     12000               23,24,25



Members:
========

Member   Node-J  Node-K    Length       dcx       dcy  Size                Ix           A  Releases
------   ------  ------    ------   -------   -------  --------      --------       -----  --------
AB       A       B         6500.0   0.00000   1.00000  W310x97       2.22e+08       12300  
BC       B       C         5500.0   0.00000   1.00000                2.22e+08       12300  
DE       D       E         6500.0   0.00000   1.00000                2.22e+08       12300  
EF       E       F         5500.0   0.00000   1.00000                2.22e+08       12300  
IG       I       G         6500.0   0.00000   1.00000                2.22e+08       12300  
GH       G       H         5500.0   0.00000   1.00000                2.22e+08       12300  
JK       J       K         6500.0   0.00000   1.00000                2.22e+08       12300  
KL       K       L         5500.0   0.00000   1.00000                2.22e+08       12300  
CF       C       F        10500.0   1.00000   0.00000                4.88e+08       13500  
BE       B       E        10500.0   1.00000   0.00000  W460x106      4.88e+08       13500  
FH       F       H        10000.0   1.00000   0.00000                4.88e+08       13500  MZJ,MZK
EG       E       G        10000.0   1.00000   0.00000                4.88e+08       13500  MZJ,MZK
KB       K       B        10000.0   1.00000   0.00000                4.88e+08       13500  MZJ,MZK
LC       L       C        10000.0   1.00000   0.00000                4.88e+08       13500  MZJ,MZK



Node Loads:
===========

Type      Node      FX          FY          MZ
----      ----  ----------  ----------  ----------
wind      H          15000           0           0
wind      G          35000           0           0
notional  H           6900           0           0
notional  G           8400           0           0

Member Loads:
=============

Type      Member  Load
----      ------  ----------------
live      LC      UDL(L=10000.0,w=-45)
live      CF      UDL(L=10500.0,w=-45)
live      FH      UDL(L=10000.0,w=-45)
live      KB      UDL(L=10000.0,w=-55)
live      BE      UDL(L=10500.0,w=-55)
live      EG      UDL(L=10000.0,w=-55)

Support Displacements:
======================

 - - - none - - -

Load Combinations:
==================

Case   Type      Factor
-----  ----      ------
all    wind        1.00
 "     live        1.00
 "     notional    1.00

Results for load case: all
++++++++++++++++++++++++++


Node Displacements:
===================

Node        DX         DY      Rotation
----      ------     ------   ---------
A          0.000      0.000   0.0000000
B         22.180     -2.628  -0.0071701
C         34.685     -3.640  -0.0074115
D          0.000      0.000   0.0000000
E         22.532     -2.789   0.0030960
F         34.332     -3.840   0.0057038
G         22.674     -1.321  -0.0027559
H         34.423     -1.824  -0.0018264
I          0.000      0.000  -0.0038545
J          0.000      0.000  -0.0037166
K         22.165     -1.321  -0.0027967
L         34.693     -1.824  -0.0020184

Reactions:
==========

Node        FX         FY         MZ  
----     -------    -------    -------
A          2.178    994.654     41.900
D        -63.236   1055.346    184.368
I         -2.309    500.000      --   
J         -1.933    500.000      --   

Member End Forces:
==================

          /----- Axial -----/   /----- Shear -----/   /----- Moment ----/
Member       FX J       FX K       FY J       FY K       MZ J       MZ K
------     -------    -------    -------    -------    -------    -------
AB         994.654   -994.654     -2.178      2.178     41.900    -56.055
BC         452.382   -452.382    -88.371     88.371   -241.073   -244.970
DE        1055.346  -1055.346     63.236    -63.236    184.368    226.664
EF         470.118   -470.118    115.285   -115.285    295.981    338.086
IG         500.000   -500.000      2.309     -2.309      0.000     15.008
GH         225.000   -225.000     -2.729      2.729    -15.008      0.000
JK         500.000   -500.000      1.933     -1.933      0.000     12.566
KL         225.000   -225.000     -2.285      2.285    -12.566      0.000
CF          90.656    -90.656    227.382    245.118    244.970   -338.086
BE         -90.412     90.412    267.272    310.228    297.128   -522.645
FH         -24.629     24.629    225.000    225.000      0.000      0.000
EG         -38.362     38.362    275.000    275.000      0.000      0.000
KB          -4.218      4.218    275.000    275.000      0.000      0.000
LC           2.285     -2.285    225.000    225.000      0.000      0.000

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]:

Compare book values (end bending moments)


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]:
MZJ MZK
AB 44.2 -57.5
BC -232.0 -236.0
BE 290.0 -515.0
CF 236.0 -330.0
DE 181.0 227.0
EF 287.0 330.0

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]:
MZJ MZK
AB 41.899586 -56.055426
BC -241.072569 -244.969631
BE 297.127995 -522.644884
CF 244.969631 -338.085575
DE 184.367580 226.663606
EF 295.981278 338.085575

% Difference in End Moments


In [7]:
(100*(HERE-BOOK)/HERE).round(2)


Out[7]:
MZJ MZK
AB -5.49 -2.58
BC 3.76 3.66
BE 2.40 1.46
CF 3.66 2.39
DE 1.83 -0.15
EF 3.03 2.39

Max. difference is 5.5%, which I think is a little large.

Compare Reactions


In [8]:
REAC = pd.DataFrame(f.list_reaction_forces(R),columns=['ID','FX','FY','MZ']).set_index(['ID'])
REAC[['FY']]/1E3


Out[8]:
FY
ID
A 994.654016
D 1055.345984
I 500.000000
J 500.000000

The reactions agree very closely.

$P-\Delta$ Analysis


In [9]:
f.reset()
f.input_all()
rs = f.solve(pdelta=True)
f.print_results(rs)
f.write_results(f.dsname,rs)


iter=1, max D=40.07059055185681, max chg=5.377546135135162, max % chg=13.420181886702878
iter=2, max D=40.914400791627784, max chg=0.8438349556926994, max % chg=2.062439970684775
iter=3, max D=41.04715700863964, max chg=0.13276037993390588, max % chg=0.3234338005576425
iter=4, max D=41.06806149694625, max chg=0.02090514731253279, max % chg=0.0509036622390547
iter=5, max D=41.0713541601887, max chg=0.0032927670257691943, max % chg=0.00801718641398228


Results for load case: all
++++++++++++++++++++++++++


Node Displacements:
===================

Node        DX         DY      Rotation
----      ------     ------   ---------
A          0.000      0.000   0.0000000
B         26.392     -2.614  -0.0075457
C         41.059     -3.622  -0.0075611
D          0.000      0.000   0.0000000
E         26.745     -2.803   0.0027204
F         40.706     -3.858   0.0055544
G         26.889     -1.321  -0.0032662
H         40.801     -1.824  -0.0021613
I          0.000      0.000  -0.0045720
J          0.000      0.000  -0.0044338
K         26.378     -1.321  -0.0033071
L         41.071     -1.824  -0.0023537

P-Delta Node Forces:
====================

Node        FX         FY         MZ  
----     -------    -------    -------
B          2.814      0.000   0.0000000
C          1.202      0.000   0.0000000
E          3.167      0.000   0.0000000
F          1.197      0.000   0.0000000
G          1.499      0.000   0.0000000
H          0.569      0.000   0.0000000
K          1.428      0.000   0.0000000
L          0.601      0.000   0.0000000

Reactions:
==========

Node        FX         FY         MZ  
----     -------    -------    -------
A         -3.625    989.141     63.325
D        -69.040   1060.859    205.798
I         -2.744    500.000      --   
J         -2.368    500.000      --   

Member End Forces:
==================

          /----- Axial -----/   /----- Shear -----/   /----- Moment ----/
Member       FX J       FX K       FY J       FY K       MZ J       MZ K
------     -------    -------    -------    -------    -------    -------
AB         989.141   -989.141      3.625     -3.625     63.325    -39.762
BC         450.830   -450.830    -86.072     86.072   -236.573   -236.821
DE        1060.859  -1060.859     69.040    -69.040    205.798    242.962
EF         471.670   -471.670    117.583   -117.583    300.476    346.232
IG         500.000   -500.000      2.744     -2.744      0.000     17.839
GH         225.000   -225.000     -3.243      3.243    -17.839      0.000
JK         500.000   -500.000      2.368     -2.368      0.000     15.393
KL         225.000   -225.000     -2.799      2.799    -15.393      0.000
CF          90.673    -90.673    225.830    246.670    236.821   -346.232
BE         -90.622     90.622    263.312    314.188    276.335   -543.438
FH         -25.713     25.713    225.000    225.000      0.000      0.000
EG         -38.911     38.911    275.000    275.000      0.000      0.000
KB          -3.739      3.739    275.000    275.000      0.000      0.000
LC           3.400     -3.400    225.000    225.000      0.000      0.000

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]:
MZJ MZK
AB 64.0 -39.2
BC -236.0 -237.0
BE 276.0 -544.0
CF 237.0 -347.0
DE 207.0 244.0
EF 301.0 347.0

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]:
MZJ MZK
AB 63.324512 -39.761879
BC -236.572716 -236.820752
BE 276.334595 -543.438243
CF 236.820752 -346.231622
DE 205.797688 242.962366
EF 300.475876 346.231622

% Difference in End Moments


In [13]:
(100*(HERE-BOOK)/HERE).round(2)


Out[13]:
MZJ MZK
AB -1.07 1.41
BC 0.24 -0.08
BE 0.12 -0.10
CF -0.08 -0.22
DE -0.58 -0.43
EF -0.17 -0.22

Max. difference is 1.4%, which is much better and is actually quite decent.


In [ ]: