In this part we consider adding a parallel flanged channel (PFC) or I-Section to the flange of an I-Section.
This configuration is used quite often for crane rails (for adding a channel) to deal with lateral thrusts from a runway crane of for simply strengthening a beam for flexure and getting a little more bang for your buck than simply adding a plate to one flange. For the case of adding an I-Section, this comes up quite often in buildings to form composite columns or even to increase the bending capacity of beams.
Like outlined in the earlier posts in this series, be mindful of creating sections in intimate contact and of whether or not you have intermittent welding which might invalidate some of the properties. Read previous posts essentially and engage brain and decide what might apply to your situation.
The code…
PFC and I-Section
import copy import sectionproperties.pre.sections as sections from sectionproperties.analysis.cross_section import CrossSection # ------------------------------------------------------------- # Inputs # ------------------------------------------------------------- top_flg = True # apply PFC to top or bottom flg 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_1 = 380 # strengthening PFC depth b_f1 = 100 # strengthening PFC width t_f1 = 17.5 # strenghtening PFC flange thickness t_w1 = 10 # strengthening PFC web thickness r_2 = 14 # strengthening PFC root radii gap = 0.3 # gap between I-Section and PFC weld_size = 10 # 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]] ) if d_1 > b_f and not gap == 0: weld_vert_move = -gap else: weld_vert_move = 0 # 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 PFC geometry2 = sections.PfcSection(d=d_1, b=b_f1, t_f=t_f1, t_w=t_w1, r=r_2, n_r=n_r, shift=[0, -d / 2 - d_1 / 2 - gap]) if top_flg: geometry2 = sections.PfcSection(d=d_1, b=b_f1, t_f=t_f1, t_w=t_w1, r=r_2, n_r=n_r, shift=[0, d / 2 - d_1 / 2 + gap + t_w1]) geometry2.rotate_section(angle=-90, rot_point=[0, d / 2 + gap + t_w1]) else: geometry2 = sections.PfcSection(d=d_1, b=b_f1, t_f=t_f1, t_w=t_w1, r=r_2, n_r=n_r, shift=[0, -d / 2 - d_1 / 2 - gap]) geometry2.rotate_section(angle=-90, rot_point=[0, -d / 2 - gap]) # weld 1 & 2 geometry3 = copy.deepcopy(weld) if b_f > d_1: geometry3.mirror_section(axis='x', mirror_point=[0, 0]) geometry3.shift = [min(d_1 / 2, b_f / 2), -d / 2 + weld_vert_move] geometry3.shift_section() geometry4 = copy.deepcopy(geometry3) geometry4.mirror_section(axis='y', mirror_point=[0, 0]) if top_flg: geometry3.mirror_section(axis='x', mirror_point=[0, 0]) geometry4.mirror_section(axis='x', 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: if top_flg: geometry.add_hole([0, d / 2 + gap / 2]) else: 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')
You can add a PFC to the top or bottom flange depending on your use case.
I-Section and I-Section
import copy import sectionproperties.pre.sections as sections from sectionproperties.analysis.cross_section import CrossSection # ------------------------------------------------------------- # Inputs # ------------------------------------------------------------- top_flg = True 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_1 = 612 # strengthening I-Section depth b_f1 = 229 # strengthening I-Section flange width t_f1 = 19.6 # strenghtening I-Section flange thickness t_w1 = 11.9 # strengthening I-Section web thickness r_2 = 14 # strengthening I-Section root radii gap = 0.3 # gap between I-Sections weld_size = 10 # weld size n_r = 20 # 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]] ) if d_1 > b_f and not gap == 0: weld_vert_move = -gap else: weld_vert_move = 0 # 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 I-Section if top_flg: geometry2 = sections.ISection(d=d_1, b=b_f1, t_f=t_f1, t_w=t_w1, r=r_2, n_r=n_r, shift=[-b_f1 / 2, d / 2 - d_1 / 2 + gap + t_w1 / 2]) geometry2.rotate_section(angle=-90, rot_point=[0, d / 2 + gap + t_w1 / 2]) else: geometry2 = sections.ISection(d=d_1, b=b_f1, t_f=t_f1, t_w=t_w1, r=r_2, n_r=n_r, shift=[-b_f1 / 2, -d / 2 - d_1 / 2 - gap - t_w1 / 2]) geometry2.rotate_section(angle=-90, rot_point=[0, -d / 2 - gap - t_w1 / 2]) # weld 1 & 2 geometry3 = copy.deepcopy(weld) if b_f > d_1: geometry3.mirror_section(axis='x', mirror_point=[0, 0]) geometry3.shift = [min(d_1 / 2, b_f / 2), -d / 2 + weld_vert_move] geometry3.shift_section() geometry4 = copy.deepcopy(geometry3) geometry4.mirror_section(axis='y', mirror_point=[0, 0]) if top_flg: geometry3.mirror_section(axis='x', mirror_point=[0, 0]) geometry4.mirror_section(axis='x', 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: if top_flg: geometry.add_hole([0, d / 2 + gap / 2]) else: 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')
Like the PFC version, you can add the new I-Section at the top or bottom flange.
Until Part 6, go forth and make funny tee shaped members from funny I shaped members and/or funny C shaped members.