The CISC Cloud Solutions web application is the home for CISC design modules. These design modules provide engineers with reliable resources for a variety of structural engineering problems. There are numerous calculators ranging from simple design checks to complex analysis and design problems. Simple calculations (i.e., basic member design) follow CSA S16:24 and well-established design processes. There are also calculators for complex engineering problems that are not well-defined in the code. These design solutions are drafted by the CISC based on the most up-to-date research and reviewed by engineers across Canada. While many online structural calculators are available, CISC Cloud Solutions provides complex solutions that are typically only found in design guides or research papers.
The key to this web app is transparency. While the design modules offer a simple input/output user interface, all coded logic is contained in Python notebooks. These notebooks are downloadable from each design module, allowing users to carefully inspect the solution and make adjustments as needed for their unique situations. Users can also upload their own notebooks (see Creating Custom Modules) to use their own notebooks in web app form. However, for those who have no interest in reading Python code, the program also offers detailed calculation sheets showing the design process in full detail.
The home page presents all design modules available on CISC Cloud Solutions. These modules are grouped by category (i.e., member design, seismic, etc.) for ease of navigation. The footer of the page contains additional navigation buttons, such as:
CISC Cloud Solutions includes all section sizes and properties from the CISC Handbook of Steel Construction and its Structural Section Tables. The web app also provides the option to upload custom section sizes that are not available in the program. Custom section sizes can be added either one at a time (using the "Add Row" button) or in bulk (using the "Paste from Excel" button).
Selecting the "Custom Section Table" dropdown menu in the page header allows users to select which type of section they would like to define. It is possible to define the following section types:
To save the custom sections, click the "Save" button. This saves the sections for the specific shape currently selected. If you want to add multiple shapes, you must press "Save" after updating each shape. To remove sections, press the "Delete" button for that row, or clear the entire table using the "Clear" button.
The Calculation Modules all have a similar layout. The page header contains an input field for the project name, the option to return to the home page, and the ability to save the connection. The "Save" feature downloads a .cnxn file to your computer containing all the inputs entered at the time of saving. The footer contains additional buttons. The "Calculate Results" button runs the analysis. The "Export Results" button runs the Python notebook and returns a calculation sheet, drawing file if applicable (for AutoCAD or other drafting software), and the completed Python notebook. Exporting results may take significant time depending on calculation complexity. The footer also includes the option to toggle unit magnitudes. This is limited to units supported by the system defined on the home page (i.e., SI or U.S. Customary).
Below is a summary of the key buttons on each module page:
The left side of the Calculation Module (or the top on smaller screens) is for user inputs. These inputs should be entered in the magnitude of the units stated in the table header (which can be toggled in the page footer). While the inputs vary depending on the calculation page, there are some common types of inputs:
The bottom of the input page may contain extra information. This could include a static image defining variables, or buttons linking to other design modules that may be useful for completing the design problem.
The results are displayed on the right side of the Calculation Module (or below the input section on smaller screens). Results are generated by either the "Calculate Results" or "Export Results" buttons. The results include the following:
Each design module is associated with a certain Jupyter notebook. These notebooks contain all the code required to run the design modules. These notebooks can be downloaded from the "Export Results" feature when you select the "Download Python Notebook" button. You can edit these notebooks to tailor them to your exact design needs using any Python notebook editor (i.e., Jupyter Lab or VS Code). To successfully run these notebooks, you will need to download the folder below.
This folder contains supporting files needed to run the notebook, including:
template.ipynb: A template Python notebook with instructions for getting started and an examplerequirements.txt: All the Python packages (dependencies) required to run this notebooknotebook_py: A folder of Python scripts which help run the notebook. This includes Python objects,
image functions, and code equationsCSVs: A folder of CSV files containing structural section propertiesEach time you download a notebook from a design module, you should add it to this folder on your machine so that
they all have access to these supporting files. The following instructions will guide you through the process of
preparing to run these notebooks in your local notebook editor. These instructions are also in the
template.ipynb notebook.
Create a Python kernel for the notebook. The latest Python version (3.13) is not compatible with
handcalcs, so you will need to set up a kernel using Python 3.12 using your machine's terminal (CMD).
Follow the steps below:
python3.12 -m venv handcalcs-env
handcalcs-env\Scripts\activatesource handcalcs-env/bin/activateipykernel:
pip install ipykernel
python -m ipykernel install --user --name handcalcs-env --display-name "Python 3.12"
Selecting the Kernel:
Ctrl+Shift+P and search for "Select Kernel". Choose Python 3.12 (handcalcs).Verify the Setup:
import sys
print(f"Python version: {sys.version}")
The first notebook cell should import all required libraries. If you have installed everything from
requirements.txt, no further installations should be necessary. If not, you can install missing libraries using
pip.
!pip install -r requirements.txt
!pip install pandas
Troubleshooting Import Errors:
jupyter lab
!pip install -r requirements.txt
!pip list
When you run the notebook, you will almost certainly encounter errors. This is mainly due to missing images or logic added specifically for the web application. You can largely ignore these errors and comment out or delete the troublesome lines of code.
Alternatively, you can add the required folders and files to build out your own project directory and make it more thorough. This will help your code run smoother and help troubleshoot any notebooks you may want uploaded to the web app (see Creating Custom Modules).
notebook parameter in the show_figure() function
to True to see the figure in the notebook if it is being hidden.
As discussed in the Python Notebooks section, you can create your own custom design modules by uploading your own Python notebooks. However, these notebooks must follow a specific format to work correctly in the web application. The following steps outline how to set up your notebook properly.
These steps are further highlighted in the template.ipynb file in a worked example.
template.ipynb file and the additional project files from the
Python Notebooks section of this tutorial.
This cell defines all the parameters needed in the notebook. The formatting of this cell, including commented lines
(#), is essential for correctly displaying input tables in the web app.
Table Formatting:
###=== Text here ===### defines table headersparameter_name = "value" # Column name !!Special command defines each input rowSpecial Commands:
!!Note: Tooltip text displayed when hovering over ⓘ!!Dropdown: Creates dropdown menus (e.g., [...] or Member[...])!!Units: Defines the units (Distance, Force, Moment, UDL, Stress)!!Ignore: Hides columns from HTML output!!Default: Default option for an input cell!!Add_Rows: Makes a table dynamic (add/remove rows)!!Collapse: Collapses a table by default when the page is first opened
Add extra HTML content between \\\ tags to include images or links.
Unit Settings:
unitsDropdown: Sets the unit system ((N, mm), (kN, m), (lbf, in), etc.)units_system: Either Metric or ImperialTagging the Cell:
parametersparameters
Create a Python object from the user inputs to represent the section. This allows you to easily access geometric
and material properties defined in the CISC Structural Sections tables.
F_y, F_u = get_Fy_Fu(beam_steel_param, units_system)
beam = get_member_object(member_type_1, beam_name, F_y, F_u, units_system)
You can access attributes like beam.A, beam.d, or beam.I_x,
automatically displayed in the correct unit system.
Available Attributes:
| Attribute | Description |
|---|---|
shape | Shape designation (e.g., W, HSS, L) |
A | Cross-sectional area |
I_x | Moment of inertia about x-axis |
S_x | Elastic section modulus (x-axis) |
r_x | Radius of gyration (x-axis) |
J | Torsional constant |
C_w | Warping constant |
F_y | Yield stress |
F_u | Ultimate stress |
The notebooks use handcalcs to render outputs and calculations. This helps create clear calculation
sheets. All headers, text, and notebook outputs (anything that appears under or above a Python cell) will appear in the
calculation sheet produced by "Export Results". Therefore, care should be taken when formatting these notebooks so that
they produce professional calculation sheets.
The notebook passes results to the web app using JSON files. There are three types:
Errors List:
with open("HTML_files/errors.json", "w") as f:
json.dump(errors, f)
Result Tables:
with open("HTML_files/table_output.json", "w") as f:
json.dump(result_sets, f, indent=4)
Images:
with open("HTML_files/images.json", "w") as f:
json.dump({"images": [
{"id": "image1",
"name": "Connection",
"path": "static/temp_img/dynamic_image.html",
"type": "html"},
{"id": "image2",
"name": "Point Loads",
"path": "static/BFP/point_loads.png",
"type": "png"}]}, f)
There are several types of images that can be added to the notebook. The first type is PNG images.
These can be added to a static folder in the project directory and referenced using <img> HTML
tags. Create a subfolder in static to store images for each individual notebook. It is also possible to create static
images in Python. These images can be produced however you would like and displayed directly in the notebook.
Each notebook may have a dynamic image associated with it. This could be either 2D or 3D. There are some examples
of these figures in existing notebooks. The dynamic figure should be produced so that its linework can be
exported as a drawing file for AutoCAD or other drafting software. Some basic structural shapes exist in the
images.py script which can be used to create these images. The dynamic image should kept at the path
"static/temp_img/dynamic_image.html" if it is to be converted to AutoCAD.
At the bottom of the home page, there is the option to Upload Custom Notebook. When you click on this module, you will be prompted to select a notebook to upload. If you have followed the previous steps correctly, your notebook should create a fully functional design module in the web application.