Bridge superstructure section

[1]:
import opstool as opst
import matplotlib.pyplot as plt

We create a polygonal patch (a single I-beam) by incrementing the x,y coordinates:

[2]:
incrs = [
    (0.72, 0.0),
    (0, 0.22),
    (-0.26, 0.23),
    (0, 0.84),
    (0.1, 0.1),
    (0.33, 0.07),
    (0, 0.13),
    (-1.06, 0.0),
    (0, -0.13),
    (0.33, -0.07),
    (0.1, -0.1),
    (0, -0.84),
    (-0.26, -0.23),
    (0, -0.22),
]

points = opst.pre.section.create_polygon_points(
    start=(0, 0),
    incrs=incrs,
)
patch = opst.pre.section.create_polygon_patch(outline=points)

Returns a Geometry class object of sectionproperties, we can call any of its attributes and methods, such as visualizing geometry:

[3]:
patch.plot_geometry()
plt.show()
../../_images/examples_section.mesh_bridge_deck_5_0.png

We can offset this patch to get a new patch to get multiple I-beams:

[4]:
patches = [patch]
for i in range(5):
    patches.append(patches[-1].shift_section(x_offset=2.21))

Geometry class overloads the + operator for merging, so you can call the sum function to merge all patches into one:

[5]:
# you can try patches[0] + patches[1] + patches[2] + patches[3] + patches[4] + patches[5]

girder = sum(patches[1:], start=patches[0])
girder.plot_geometry()
plt.show()
../../_images/examples_section.mesh_bridge_deck_9_0.png

We create the bridge deck:

[6]:
points = [(0, 0), (13.2, 0), (13.2, 0.165), (0, 0.165)]
deck = opst.pre.section.create_polygon_patch(outline=points)

deck.plot_geometry()
plt.show()
../../_images/examples_section.mesh_bridge_deck_11_0.png

We can first align the centers of the two:

[7]:
deck = deck.align_center(align_to=girder)
(deck + girder).plot_geometry()
plt.show()
../../_images/examples_section.mesh_bridge_deck_13_0.png

Then align it to the top:

[8]:
deck = deck.align_to(girder, on="top")
(deck + girder).plot_geometry()
plt.show()
../../_images/examples_section.mesh_bridge_deck_15_0.png

Combination and fiber meshing:

[9]:
SEC_MESH = opst.pre.section.FiberSecMesh()
SEC_MESH.add_patch_group(deck + girder)
SEC_MESH.set_mesh_size(0.15)
SEC_MESH.set_mesh_color("#87ae73")
SEC_MESH.mesh()
OPSTOOL :: The section My Section has been successfully meshed!
[10]:
props = SEC_MESH.get_frame_props(display_results=True)
                           Frame Section Properties                            
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Symbol     Value                   Definition                             ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ A          6.085E+00               Cross-sectional area                   │
│ centroid   (5.885E+00, 1.112E+00)  Elastic centroid                       │
│ Iy         2.356E+00               Moment of inertia y-axis               │
│ Iz         8.743E+01               Moment of inertia z-axis               │
│ Iyz        1.421E-14               Product of inertia                     │
│ Wyt        3.663E+00               Section moduli of top fibres y-axis    │
│ Wyb        2.119E+00               Section moduli of bottom fibres y-axis │
│ Wzt        1.325E+01               Section moduli of top fibres z-axis    │
│ Wzb        1.325E+01               Section moduli of bottom fibres z-axis │
│ J          1.845E-01               Torsion constant                       │
│ phi        -9.000E+01              Principal axis angle                   │
│ rho_rebar  0.000E+00               Ratio of reinforcement                 │
└───────────┴────────────────────────┴────────────────────────────────────────┘
[11]:
SEC_MESH.view(show_legend=False)
plt.gca().set_aspect(0.75)
plt.show()
../../_images/examples_section.mesh_bridge_deck_19_0.png