In this part we visit adding angles nested into the web/flange interface. This is kind of a good means to increase both the bending and axial capacity of a member. Though it results in a bucket load of welding, it’s an effective means of strengthening when you have access and can’t really increase the overall footprint of the member. Basically, when those pesky architects won’t let you attempt to decapitate people by adding something under the member when head heights are limited.
It also offers fairly good access for welding when you must strengthen within the flanges.
The code…
import sectionproperties.pre.sections as sections from sectionproperties.analysis.cross_section import CrossSection import copy 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 = 100 # strengthening angle leg 1 length b_1 = 100 # strengthening angle leg 2 length t = 8 # strengthening angle thickness r_r = 8 # strengthening root radii r_t = 5 # strengthening toe radii n_r = 5 # number of points considered around root radii horiz_gap = 0.5 # horizontal gap between angle and section vert_gap = 0.5 # vertical gap between angle and section weld_size = 6 # weld size mesh_area = 5 # 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 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]) # top right angle shift = [b_1 + t_w / 2 + horiz_gap, d / 2 - d_1 - t_f - vert_gap] geometry2 = sections.AngleSection(d=d_1, b=b_1, t=t, r_r=r_r, r_t=r_t, n_r=n_r, shift=shift) geometry2.rotate_section(angle=5 * 90, rot_point=shift) # bottom left angle shift = [-b_1 - t_w / 2 - horiz_gap, -d / 2 + d_1 + t_f + vert_gap] geometry3 = sections.AngleSection(d=d_1, b=b_1, t=t, r_r=r_r, r_t=r_t, n_r=n_r, shift=shift) geometry3.rotate_section(angle=-90, rot_point=shift) # top left angle shift = [-b_1 - t_w / 2 - horiz_gap, d / 2 - d_1 - t_f - vert_gap] geometry4 = sections.AngleSection(d=d_1, b=b_1, t=t, r_r=r_r, r_t=r_t, n_r=n_r, shift=shift) # bottom right angle shift = [b_1 + t_w / 2 + horiz_gap, -d / 2 + d_1 + t_f + vert_gap] geometry5 = sections.AngleSection(d=d_1, b=b_1, t=t, r_r=r_r, r_t=r_t, n_r=n_r, shift=shift) geometry5.rotate_section(angle=180, rot_point=shift) # welds geometry6 = copy.deepcopy(weld) geometry6.shift = [t_w / 2, -d / 2 + d_1 + t_f + vert_gap] geometry6.shift_section() geometry7 = copy.deepcopy(weld) geometry7.shift = [t_w / 2 + b_1 + horiz_gap, -d / 2 + t_f] geometry7.shift_section() geometry8 = copy.deepcopy(geometry6) geometry8.mirror_section(axis='y', mirror_point=[0, 0]) geometry9 = copy.deepcopy(geometry7) geometry9.mirror_section(axis='y', mirror_point=[0, 0]) geometry10 = copy.deepcopy(geometry6) geometry10.mirror_section(axis='x', mirror_point=[0, 0]) geometry11 = copy.deepcopy(geometry7) geometry11.mirror_section(axis='x', mirror_point=[0, 0]) geometry12 = copy.deepcopy(geometry8) geometry12.mirror_section(axis='x', mirror_point=[0, 0]) geometry13 = copy.deepcopy(geometry9) geometry13.mirror_section(axis='x', mirror_point=[0, 0]) # total number of individual geometry elements geo_number = 13 # 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 within closed sections formed by adding angles geometry.add_hole([-b_1 / 2, d / 2 - d_1 / 2]) geometry.add_hole([-b_1 / 2, -d / 2 + d_1 / 2]) geometry.add_hole([b_1 / 2, d / 2 - d_1 / 2]) geometry.add_hole([b_1 / 2, -d / 2 + d_1 / 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() # plot results section.plot_mesh() section.plot_centroids() # ------------------------------------------------------------- # Display results # ------------------------------------------------------------- # display all results # check https://sectionproperties.readthedocs.io/en/latest/rst/post.html for definitions section.display_results(fmt='.3f')
That’s about all of the example I was going to cover, but if anyone has anything further that they regularly use put a comment below and I’ll see what I can do…
See Part 7 to go down the rabbit hole further…..