Current Version: 1.1.0 (2025-02-18)
QCKColumn is a web application built using Streamlit that enables Civil/Structural Engineers to quickly generate plots of interaction diagram for reinforced concrete columns or perform adequacy checks given the axial load and bending moment demands.
The application attempts to replicate the intuitive user experience of known commercial design software for analyzing and designing reinforced concrete columns such as spColumn (by StructurePoint) and Tekla Tedds (by Trimble) while having the reactive experience of using spreadsheets where a change in input quickly returns an output.
Performing detailed calculations for analyzing or designing reinforced concrete columns can be tedious due to needing to establish the column interaction diagram, a graphical representation of the column's response to combined axial load and bending moment. To create a diagram, we need to calculate multiple pairs of nominal and design (allowable) axial load and bending moment which serves as coordinates to the graph. At the minimum, we calculate a pair for each of the following control points/conditions.
- Point 1: Pure compression - The section is in maximum compression and no bending moment.
- Point 2: Maximum axial compression with bending moment - The section is in full compression and the location of the neutral axis, c is outside the section.
- Point 3: Zero strain on steel at tension side - A part of the section is now in tension and the steel reinforcement at tension side is about to resist tensile stress.
- Point 4: Stress on steel at tension side equal to half of yield strength - The steel area at tension side experiences stress equal to half of its yield strength.
- Point 5: Balanced condition - The concrete and the steel at tension side simultaneously reach their maximum compressive strain and yield strains respectively.
- Point 6: Tensile-controlled condition - The steel at tension side yields significantly such that it reaches its yield strength before the concrete crushes.
- Point 7: Pure bending - The section is in full bending where the net axial load is zero.
- Point 8: Pure tension - The section is in maximum tension and its strength fully relies on the steel reinforcement.
For this reason, civil/structural engineers typically rely on spreadsheet programs or developed engineering software to do this process for them. However these options have their own downsides. Spreadsheets are inflexible for proper documentation, hard to read when the formula gets longer and complex, and no reliable version control (besides cloud storage services). On the other hand, using a ready-to-use developed software often requires investment for licensing and often requires the user to familarize themselves to the assumptions and procedure done.
This project attempts to demonstrate that developing engineering calculation tools through programming is useful in the long run as it offers opportunities for scaling, ease of revision through version control, and automation to many typical engineering workflows.
The reference structural code used for developing the application is ACI 318-19. For the current version of the application, the program is limited to working with SI units, input load demands needs to be factored loads, generating interaction diagrams and checks for rectangular concrete tied columns, and no implementation for biaxial moment condition calculations.
For the assumptions, the implementation of the function for creating the interaction diagram is based on the control points / conditions mentioned above.
The application is fully written in Python with the following framework/libraries.
- Streamlit - This framework allows to quickly create web applications while only writing Python code. Though its often used for data-related applications, its powerful feature fits well to any engineering applications.
- NumPy and Pandas - Bread and butter libraries for data manipulation, analysis, and calculations.
- SciPy - Primarily used for solving complex equations.
- The application quickly updates for any change in the input.
- Computed values of axial force and moment can be exported as a CSV file.
- Resulting coordinate from the input load is plotted on the interaction diagram.
- Adequacy check for both case of major axis and minor axis bending (separate checks are done for both).
- Check for reinforcing detailing requirements.
app.py
- Script that defines the main web application.structural/columnconc.py
- Script containing the functions for determining the coordinates of the column interaction diagram with its respective helper functions, and for checking to adequacy and detailing requirements.structural/genconcrete.py
- Script containing functions for general calculations of section properties, material properties, stresses, coefficients defined in the code, and constants.structural/__init__.py
- Allowsmain.py
to call the functions fromcolumnconc.py
andgenconcrete.py
bounded to the namestructural
..streamlit/config.toml
- Config file for the Streamlit appication settings such as the theme.static/
- Contain PNG images for the Streamlit application.pyproject.toml
andrequirements.txt
- File for setting up working environment and installing dependencies. The former is used when using the uv package manager while the latter is used forpip
.
-
Fork the repository then clone locally on your machine.
-
Ensure your current working directory is the project folder itself and check if
pyproject.toml
orrequirements.txt
is present in your working directory. -
Installation using
uv
-
In the terminal, run
uv venv
to create a virtual environment. -
Activate venv using
<source path> .venv/bin/activate
. -
Run
uv sync
to sync the dependencies of the environment according to the content ofpyproject.toml
. -
Optional - From
pyproject.toml
, take note of the "optional-dependencies" that are visible at the bottom. Runuv sync --extra <name>
to install additional packages.
-
Installation using
pip
- Create a virtual environment and activate it from your working directory.
- Run
pip install -r requirements.txt
.
-
To launch the application, go to
main/
and runstreamlit run app.py
.