Beam with two point loads and two distributed loads

This example demonstrates some functionality of the beambending package.

Try it in online: binder colab

Specifications

A beam resting on two supports at x=2 m and x=7 m, with the following applied loads:

  • a downward force of 20 kN at x=3 m;

  • a force of 10 kN pointing right, also at x=3 m;

  • a downward distributed load of 20 kN/m on 0 <= x <= 2 m;

  • a downward distributed load of 10 kN/m on 3 m <= x <= 9 m

Results

The figure below shows the load case corresponding to the description above. The resulting diagrams are respectively:

  1. a schematic of the beam and its applied (external) loads 1 ,

  2. a normal force diagram: \(\mathbf{N(x)}\),

  3. a shear force diagram \(\mathbf{V(x)}\), and

  4. a bending moment diagram \(\mathbf{M(x)}\).

1

The x-coordinates of the point loads are marked with green arrows, but magnitudes are not displayed in the beam schematic in order to keep the figure clean and simple.

../_images/example_1.png

Code

# -*- coding: utf-8 -*-
"""Example 1: Shear force and bending moment diagrams for a beam subjected to
both point loads and distributed loads.
"""
import os
from beambending import Beam, DistributedLoadV, PointLoadH, PointLoadV, x

def example_1():
    """Run example 1"""
    beam = Beam(9)  # Initialize a Beam object of length 9 m
    beam.pinned_support = 2    # x-coordinate of the pinned support
    beam.rolling_support = 7  # x-coordinate of the rolling support
    beam.add_loads((
                    PointLoadH(10, 3),  # 10 kN pointing right, at x=3 m
                    PointLoadV(-20, 3),  # 20 kN downwards, at x=3 m
                    DistributedLoadV(-10, (3, 9)),  # 10 kN/m, downwards, for 3 m <= x <= 9 m
                    DistributedLoadV(-20 + x**2, (0, 2)),  # variable load, for 0 <= x <= 2 m
                ))
    fig = beam.plot()

    # save the png and add it to the documentation
    mod_path = os.path.dirname(os.path.abspath(__file__))  # current module
    save_name = os.path.basename(__file__).replace('.py', '.png')  # file name
    save_path = os.path.join(mod_path, save_name)
    fig.savefig(save_path, transparent=True)


if __name__ == '__main__':  # call function when run as script
    example_1()