Built-up steel section properties using some good old Python (Part 4)

In this part we cover adding a tee to the flange of an I-Section. It’s a good way of increasing the bending resistance of a beam or stiffening it up if you’re improving the deflection performance as there’s a good benefit to be had from increasing the overall depth of the section. You of course have to have the room or clearances to be able to do this.

Firstly, let’s mention something else to be aware of when strengthening members, this is accounting for the existing load we have in the member at the time of adding the strengthening. Typically for bending we are trying to mobilise the full plastic section capacity of the section for a compact section. So, it comes as no surprise that if you review the force distribution at the point of full plastification of the cross section that this is independent of any locked in forces that might have been present before we added the nice unstressed strengthening elements to the original member. The capacity is the same irrespective. Sue the progressive plastification of the cross section is a bit more funky with certain parts yielding before others. But the end result for pure flexure is always this distribution of stress similar to below no matter how you started out: –

Something you may have seen before perhaps?

For deflection it’s another matter altogether. Plain and simple, you need to account for the deflection locked in at the time of the strengthening. Then the stiffer strengthened member is only stiffer for the portion of the load added over and the load/stresses that were locked in.

So, whacking the final strengthened members stiffness into your analysis program and then applying the entire load to it will underestimate the total deflection your system might see in real life. Unless of course you are somehow taking deflection out of the system prior to adding the strengthening. Maybe you’re jacking some of the deflection (and hence load) out of the system, so more of the final load is carried by the composite strengthened member and there is potentially less locked in load.

Don’t forget about this as it can be significant, often you’re strengthening for deflections when all of the dead load and some portion of the live load might already be on the member. The additional load added to get to your serviceability limit state (SLS) load case (especially if the loads are not increasing) might only be some small portion of load over and above what has been locked in, so you might not see the benefit expected if you are assuming your analysis with final member stiffness is correct.

Basically, ignore locked in forces for strength, but for deflections think about what you are doing and don’t be a sheep.

The code…

import copy
import sectionproperties.pre.sections as sections
from sectionproperties.analysis.cross_section import CrossSection

# -------------------------------------------------------------
# Inputs
# -------------------------------------------------------------

d = 612  # I section depth
b_f = 229  # I-section flange width
t_f = 19.6  # I-section flange thickness
t_w = 11.9  # I-section web thickness
r_1 = 14  # I-section root radii

d_tee = 202  # strengthening tee depth
b_tee = 178  # strengthening tee flange width
t_f_tee = 12.8  # strenghtening tee flange thickness
t_w_tee = 7.8  # strengthening tee web thickness
r_1_tee = 11.4  # strnegthening tee root radii

gap = 0.5  # gap between section and tee

weld_size = 6  # weld size

n_r = 50  # number of points considered around root radii

mesh_area = 10  # max mesh size

# -------------------------------------------------------------
# Calculations
# -------------------------------------------------------------
# create constituent geometry
# weld base geometry
weld = sections.CustomSection(
    points=[[0, 0], [weld_size, 0], [0, weld_size]], facets=[[0, 1], [1, 2], [2, 0]], holes=[], control_points=[[weld_size / 3, weld_size / 3]]
)

# I-Section beam
geometry1 = sections.ISection(d=d, b=b_f, t_f=t_f, t_w=t_w, r=r_1, n_r=n_r, shift=[-b_f / 2, -d / 2])

# strengthening tee
geometry2 = sections.TeeSection(d=d_tee, b=b_tee, t_f=t_f_tee, t_w=t_w_tee, r=r_1_tee, n_r=n_r)
geometry2.mirror_section(axis='x', mirror_point=[0, 0])
geometry2.shift = [-b_tee / 2, -d / 2 - gap]
geometry2.shift_section()

# weld 1 & 2
geometry3 = copy.deepcopy(weld)
geometry3.mirror_section(axis='x', mirror_point=[0, 0])
geometry3.shift = [t_w_tee / 2, -d / 2]
geometry3.shift_section()

geometry4 = copy.deepcopy(geometry3)
geometry4.mirror_section(axis='y', mirror_point=[0, 0])

# total number of individual geometry elements
geo_number = 4

# assemble geometry list
geo_list = [globals()[f'geometry{i}'] for i in range(1, geo_number + 1)]

# create merged section
geometry = sections.MergedSection(geo_list)

# add holes for gaps between I-Section and strengthening tee
if not gap == 0:
    geometry.add_hole([0, -d / 2 - gap / 2])

# clean geometry
geometry.clean_geometry(verbose=True)

# create mesh
mesh = geometry.create_mesh(mesh_sizes=[mesh_area] * geo_number)

# create section
section = CrossSection(geometry, mesh)

# calculate results
section.calculate_geometric_properties()
section.calculate_plastic_properties()
section.calculate_warping_properties()

# -------------------------------------------------------------
# Display results
# -------------------------------------------------------------
# plot results
section.plot_mesh()
section.plot_centroids()

# display all results
# check https://sectionproperties.readthedocs.io/en/latest/rst/post.html for definitions
section.display_results(fmt='.3f')
the result, 610UB125 with 205BT29.9 welded to the bottom

For this configuration one thing I’d like to point out, since you essentially have a section made up of flat plates (ignoring the weld and root radii). If you add the torsion constants of the original beam and the strengthening tee (which include the roots anyway) you’ll get a good estimate of the torsion constant for the entire member.

After all you’re just creating a larger section that is still made up of flat plates, so the old \displaystyle{J=\Sigma \frac{bt^3}{3}} should stand true still for an open section.

Later, until part 5

Leave a Reply