IndeterminateBeam: How to use an open-source Python library for structural beam design

How to write your own Python script for structural beam analysis

July 17, 2023
Julianna Xoe Widlund
MJ
Longinos
Julianna Xoe Widlund
Julianna
Widlund, P.E

IndeterminateBeam is a Python package designed to help Engineers with one of the most common structural problems: Beam Analysis. In this article we describe how you can get started with the library. This versatile module serves as both a stand-alone program and a comprehensive tool for determining reaction forces, internal forces (shear, bending, axial), deflections of beams, and generating axial force, shear force, bending moment, and deflection diagrams. By leveraging engineering concepts of statics and utilizing Python packages like Sympy and Plotly, IndeterminateBeam provides engineers with a powerful solution for beam analysis.

The IndeterminateBeam package is primarily based on engineering concepts of statics, drawing inspiration from renowned author Hibbeler's work in 2013. It leverages Python packages such as Sympy (Meurer et al., 2017) and Plotly (Plotly Technologies Inc, 2015) to enhance its functionality and visualization capabilities. The package documentation provides a concise overview of the theoretical foundations used to calculate forces on indeterminate beams. Detailed documentation is available for reference, offering comprehensive information on the package's features and usage. 

Additionally, users can explore text-based examples of the package's capabilities in a Jupyter Notebook, while a web-based graphical user interface (GUI) is accessible over here, providing a user-friendly interface for utilizing the package's functionality.

Project Purpose

The purpose of this project is two-fold:

  1. Create a free website that has more features than paid and free beam calculators that exist on the web.
  2. Provide a foundation for civil and structural engineers who want to create higher order engineering Python programs.

Several (mostly paid) beam calculator websites currently exist online, providing the same service as this package. Despite this, no online service exists (to the authors knowledge) that has all the features of IndeterminateBeam and is also free.

Similiarly, there are no well-documented indeterminate beam solving Python packages (to the authors knowledge) despite the importance of such a calculation in engineering. Several python finite element analysis (FEA) packages do exist, however they are vastly overcomplicated for someone wanting to only solve for forces on a one-dimensional beam.

This python package was heavily inspired by beambending (Carella, 2019), a module created for educational purposes by Alfredo Carella of the Oslo Metropolitan University. The beambending module, although well documented, can only solve for simply supported beams consisting of a pin and roller support. The package documentation for this project includes a more rigorous overview of the theory behind the basics for solving determinate structures.

Functionality and Usage

A typical use case of the IndeterminateBeam package involves the steps below:

  1. Create a Beam object
  2. Create Support objects and assign to Beam
  3. Create Load objects and assign to Beam
  4. Solve for forces on Beam object
  5. Plot results

You can follow along with the example below in this web-based Jupyter Notebook. Alternatively, you can download the jupyter-notebook for this example here, or the python file for this code here.

The units used throughout the Python package are the base SI units (newtons and metres), but can be updated using the update_units method. Units and load direction conventions are described in the package documentation.

Creating a Beam

Engineers can create a Beam object by specifying the beam length (m) and optionally inputting Young's Modulus (E), second moment of area (I), and cross-sectional area (A). The default values correspond to a steel 150UB18.0 beam. The beam properties impact deflections but do not alter force distributions unless spring supports are employed.

from indeterminatebeam import Beam
# Create 7 m beam with E, I, A as defaults
beam = Beam(7)                          
# Create 9 m beam with E, I, and A assigned by user
beam_2 = Beam(9, E=2000, I=10**6, A=3000)     

Defining Supports

Support objects are created separately from the Beam object. Engineers can define supports by specifying the x-coordinate (m) and translational and rotational degrees of freedom. The degrees of freedom are represented by a tuple of booleans, where 1 denotes fixed support and 0 indicates a free support. Stiffness can also be specified in translational directions, overriding the boolean values.

from indeterminatebeam import Support
# Defines a pin support at location x = 5 m  
a = Support(5, (1,1,0))      
# Defines a roller support at location x = 0 m
b = Support(0, (0,1,0))      
# Defines a fixed support at location x = 7 m
c = Support(7, (1,1,1))      
# Assign the support objects to a beam object created earlier
beam.add_supports(a,b,c)    

Defining Loads

Load objects are created independently and vary based on the type of loading. PointLoadV represents a point load, DistributedLoadV denotes a distributed load, and PointTorque signifies a point torque. Engineers can define the force and coordinate values accordingly.

from indeterminatebeam import PointLoadV, PointTorque, DistributedLoadV
# Create a 1000 N point load at x = 2 m
load_1 = PointLoadV(1000, 2)
# Create a 2000 N/m UDL from x = 1 m to x = 4 m
load_2 = DistributedLoadV(2000, (1, 4))
# Defines a 2 kN.m point torque at x = 3.5 m
load_3 = PointTorque(2*10**3, 3.5)
# Assign the load objects to the beam object
beam.add_loads(load_1,load_2,load_3)

Solving for Forces

After assigning Load and Support objects to the Beam, engineers can call the analyze() function to solve for reactions and internal forces.

beam.analyse()  

Plotting Results

Once the Beam has been analyzed, engineers can utilize the plot_beam_external() and plot_beam_internal() methods to generate visual representations of the results, including axial force, shear force, bending moment, and deflection diagrams.

fig_1 = beam.plot_beam_external()
fig_1.show()

fig_2 = beam.plot_beam_internal()
fig_2.show()

The plot_beam_external and plot_beam_internal methods collate otherwise seperate plots.

The above script produces the following:

Installing the package

If you want to install the indeterminatebeam package, you run this one-liner:

pip install indeterminatebeam

NOTE: You need Python 3 to install this package (you may need to write pip3 instead of pip).

The library dependencies are listed in the file requirements.txt, but you only need to look at them if you clone the repository. If you install the package via pip, the listed dependencies should be installed automatically.

Learning how to code and develop your own civil engineering analysis scripts can be an incredibly valuable skill for both engineering students and professionals. In today's digital age, where technology plays a significant role in engineering practices, the ability to create customized analysis scripts opens up a world of opportunities and benefits. It empowers engineers to take control of their analysis processes, offering greater flexibility, efficiency, and customization. It enhances problem-solving skills, deepens engineering knowledge, and future-proofs professional capabilities. As technology continues to shape the engineering industry, the ability to code analysis scripts becomes an invaluable asset, enabling engineers to adapt, innovate, and thrive in the digital age.

At civils.ai, we understand the importance of empowering civil engineers with the knowledge and tools to develop their own analysis tools. That's why we go the extra mile by not only providing the necessary information and resources for engineers to create their own analysis tools but also offering a ready-made beam analysis calculator that is accessible to all, free of charge.

We believe in promoting innovation and productivity in the civil engineering community. By offering free calculators at civils.ai we aim to eliminate the need for engineers to spend time and effort on developing their own tools from scratch. 

Reference

https://github.com/JesseBonanno/IndeterminateBeam

 


Interested in learning about how you can use AI in your Civil Engineering workflow?
Learn more