I will be watching this very closely. Keep up the great work!
I’ve come full circle. In Oct. 2013 I was working through Chapter 16 of R.C. Hibbeler trying to figure out matrix analysis for truss and moment frame structures. I’m now back into this same textbook digging through Chapter 15 and putting together the matrix analysis engine for beams. The upside is that I have been down this road before and beams are simpler since we are only dealing with a one dimensional body versus a two dimensional structure.
I’ve actually misplaced the textbook I had in 2013 and had to buy me another copy a few months ago.
What do you think of the book entitled “Roark’s formulas for stress and strain”?
Classic mechanical engineering text.
However, what I am dealing with specifically is the design of wood beams (I’m starting with solid sawn and glulam).
The first piece of the puzzle is to calculate the shear, bending and deflection of the beam. A simple supported beam (only two supports) is easy, however when you generalize to any number of supports and complex load configurations you often end up with a statically indeterminate structure. That is where you must use other more sophisticated methods to suss out what those forces and stresses are. There are a number of different ways to handle this analysis (Moment Distribution Method etc…) however the best way to calculate it with a computer is to use the stiffness method (ie. matrix analysis), in my opinion.
Once you have the stresses and moments (shear and bending) then you can apply the wood engineering rules prescribed by the AWC (NDS and the Supplement). A full coverage of this is covered in this excellent text:
But even before you get to the analysis you have to consider the load cases. Typically only a few will apply to any given situation but it could be multiple load cases which need to be considered. That is all laid out with the ASCE7 (and then adopted by the IBC):
Of course these standards get revised and updated every few years so it becomes a challenge to not only stay up-to-date yourself on what has changed but also to make those changes to any calculator your create and eventually offer different versions that can switch between the different versions of the building code or standard in question.
I was the most familiar with the ASCE7-10 (most of my engineering work on residential structures was done between 2012-2018), but I’ve recently purchased the latest version which is the ASCE7-22 and now I’m comparing them side by side so I can understand what is new and what has specifically changed.
P.S.
You know you are getting old when you have four different versions of the NDS and ASCE7 sitting on you desk(s) and you have worked with all of them at some point in your career.
That’s true. In 2022, I began the engineering work in refurbishing a hydroelectric power house that was constructed when I started my career in Mechanical Engineering in 1978.
How true! (sort of European environment (mostly Dutch regulations) from 1985 through 2020)
First look at a sample load diagram that will be generated within the report:
I was going to include the numerical values but it clutters things up too much so I think it makes more sense to just include the appropriate tables below the diagram with all of that information.
Notice how P3 is essentially on top of D1. The point loads and distributed loads can be anywhere along the beam so things may become a little cluttered even with my best attempts at trying to make the diagram as clear as possible.
If you look at the output from Weyerhaeuser’s Forte app, my diagram is similar in many respects but somewhat more detailed.
One thing I have not considered yet is what if the user wants to input negative (uplift) loads. I will need to give that some more thought and figure out if that is something I should add and then determine how to best represent an uplift load.
The other thing I realized is that unlike a truss, I’m actually only dealing with a one dimensional structural entity here. Do I really need the grid? It does help show the size of the beam (the length and depth are to scale) but otherwise there is really no need for it.
Thoughts overall?
Do you still work in structural engineering?
I agree would look better without the grid. will all the beams looks like wood finish? is there a way when doing an analysis when you put in the beam option it actually shows that beam also? like I beams etc?
I do some structural jobs but most of my time is now spent on the extensions. It has become my full time job, over time it just kind of grew into something bigger that I had originally planned.
The report will show all of the specs of the beam and if it is a steel W flange beam it will show a red oxide color in the diagram. However with the engineering I am starting with wood first (ie. sawn lumber, timber, glulam and SCL (LVL, PSL, LSL)).
Here is a first look at the Global Structural Stiffness matrix (K) for the glulam beam shown below:
Global Stiffness Matrix (6x6):
[16911775.044, 8455887.522, 0, 0, 178331.547, -178331.547]
[8455887.522, 67030525.044, 25059375.0, -1566210.938, 178331.547, 1387879.391]
[0, 25059375.0, 50118750.0, -1566210.938, 0, 1566210.938]
[0, -1566210.938, -1566210.938, 65258.789, 0, -65258.789]
[178331.547, 178331.547, 0, 0, 2507.298, -2507.298]
[-178331.547, 1387879.391, 1566210.938, -65258.789, -2507.298, 67766.087]
Most of this will not mean anything to the layperson but for those who are interested in the details you will notice that this is a 6x6 matrix, so six degrees of total freedom. In this specific case we have 4 degrees of unconstrained freedom, three rotational and one vertical.
My plan is create nodes only at the supports or unsupported overhangs (one in this case). For loads not exactly applied at the nodes (intermediate loads) it is just a matter of using equivalent fixed end moments to correctly calculate or replace the point and distributed loads.
Each load will be treated separately within the engine and then using the principle of superposition the combined loading will be brought together to arrive at the final numbers for shear, bending (moments) and deflection.
Additionally each load case must be analyzed separately and compared with all the other load cases to arrive at the worst case or limiting case.
So for the example given, we have four different applied loads and all six of the standard load types (dead, live, live roof, snow, wind, seismic) which is probably about 10 load cases (ASCE7), this will then require the matrix engine to perform a full analysis about 40 times. The number of computations quickly becomes staggering but fortunately these days we have computers which can handle this without missing a beat.
First look at a deflection curve(s) using numerical double integration of the Moment diagram. I initially thought I could come up with the analytical functions for the slope and deflection but it involved to much fiddling with boundary conditions and I didn’t want to try and program my way out of that rabbit hole.
There are two curves drawn here. The red line represents the rectangular method and the blue line represents the trapezoidal method. There isn’t a huge difference but the trapezoid method is slightly more accurate.
This is for a 16’ beam (with a single point load at 48") and my step size is 1 inch, so there are 192 data points. I think this is sufficient for this length of a beam but I may need to adjust my step size to smaller for shorter beams and headers.
Now that I have the shear, moment, slope and deflections algorithms in place for point loads it is just a matter of algebraically adding multiple loads for more complex loading scenarios (ie. multiple loads and load cases). Here is a very simple example of two point loads applied to a two span beam. Note that self weight of the beam is not yet being considered:
I need to add some formatting logic into the top beam diagram to account for shorter spans so the dimensions don’t run into the supports as shown. This is why a lot of testing and debugging is necessary.
This beam engineering tool with its matrix analysis engine is probably the single most complicated piece of code I’ve ever written, it certainly rivals the truss calculator (2013) and the complex roof (2019) module. I will admit that I now freely use ChatGPT with some of my coding puzzles lately and surprisingly it even understands the context of what I’m coding and offers suggestions to improve the accuracy and efficiency of the engine itself.
The numerical integration (for the slope and deflection) was initially stymied by incorrect boundary condition constants and I had no easy way of analytically solving for them. At that point I was fully aware of the issue but I was stumped at how to arrive at the right solution. ChatGPT suggested a normalization algorithm which proved to be correct and was even an easy fix within the algorithm. It’s like having a really smart graduate student looking over your shoulder pointing out what your doing wrong and how to make it all better.
Hi Nathan,
Just notice you are bringing back the engineering on beam tool back, I had download this plugin way back in 2021 I think and was hopping this would have gone further ![]()
I for one as you mention in the forum would really like the ability as a residential designer that as work many years in the truss industry and in design for now more than 35 years have something to quickly check if a beam works in certain condition and having the ability to insert multiple point load, which a lot of other software like “forte” limits you on how many you can have and also how many support you can have, just knowing that something can work without have to completly finish drawings and sending them to actual structural engineer to only find out that, nope this won’t work …
So again looking forward to see where this will go…
let me know if would like someone to test this one cause I almost have a beam to size on every project I work on if not severals…
I am not bringing it back per say, it just got ignored while I continued to develop the other plugins and then put all of my focus on the long awaited Floor plugin last year. Sadly I am still only a one man show and I am now currently developing nine different plugins. Yes, I am spread pretty thin, let’s be honest.
I’ve been wanting to finish this beam calculator for some time now so I’m trying to dig deep and see if I can’t get it out the door, even if it only has the capabilities to handle wood (sawn lumber, glulam, SCL, I-Joist) beams and joists initially..
Unlike my previous web based beam calculator this new tool will be completely open ended, there will be no limit on the number of supports or loads one can assign. Each load can have up to six different load types (dead, live, live roof, snow, wind, or seismic) So in a sense it is a general solver or engine which makes it quite powerful and much more useful in my opinion.
The one other harsh reality with engineering though is that the code is always changing. I will need to continually update the tool as future revisions to the ASCE7 and NDS are released as applicable. I’ve noticed as I review various copies of the ASCE7 that the load cases are continually changing, which I find a bit odd, you would think that after years of refining the code we would slowly arrive at suitable load combinations and stick with them. This constant flux is rather annoying to be perfectly honest, and makes me really question the powers that be and why they can’t iteratively arrive at a standard and eventually stick with it.
We all know how the (engineering) sausage is made. Why continually tweak the recipe? The technology and materials used in the building industry has not dramatically changed in my lifetime (50+ years). All of this continual tweaking and minor adjustments to the engineering code really does nothing to safety of the structure in my mind and simply adds to the cost of engineering since new software updates are required and additional training is imposed. Maybe the ASCE needs to keep itself relevant and the revenue from selling updated pricey copies of its signature standard (ASCE7) is a serious cash cow? I don’t know what the story is with all of this but I feel I need to rant a bit when I just shelled out $260.00 for a paperback book that I will only crack open once every few months at best.
First look at the shear and moment diagrams being generated by the report generator. It took me most of yesterday and today to learn the ropes of Chart.js, an open source charting library for Javascript. It’s not perfect but it does seem to get the job done. My only real issues with it is that I still can’t figure out how to make it render to a higher resolution (300 dpi for printing purposes). The sample below is a screenshot of the PDF that is printed from the HTML output.
First look at the deflection graph:
I am also setting up a drop down box so that one can switch between the various available load cases, but by default it will display the governing load case.
I’m actually surprised at how accurate the numerical integration is even with a rather large step size (1"). Since the function that defines the moment is quite smooth or continuous as the mathematicians like to say I guess the trapezoid method works reasonably well.
I am using the stiffness method per Ch. 15 of R.C. Hibbeler’s book, Structural Analysis. For intermediate loads between supports I use (FEM) fixed end moments. I’m actually still working on the matrix analysis piece. I’ve got point loads pretty much in place I’ve just got to implement distributed loads next. I suppose I could have it generate the entire polynomial for both shear and the moments since I am generating them for each applied load, it is probably just matter of using superposition on them as well.
Here is a first look at the ability to switch between various load cases for the deflection graph:

I’m using ChartJS to create the graphs, I would have preferred a pure SVG approach but some of the features of this JavaScript library are pretty convenient so I’ll go with it for now.
Initially I was only going to display the governing cases but I noticed some competing software has the option to toggle the various load cases and I already had the data tabulated for each load case so it wasn’t a stretch to add in the drop-down with the load case selector.
Hopefully I can wrap this up in a couple more weeks but you never know, there may be a few road blocks ahead.
I miss having a tool like this. In the 1990’s I got BeamMac/FrameMac that did this kind of calculation. Here’s a newsletter from the developer, COMPUneering. Erez Anzel was the name of the guy who developed it.
Here’s an example of output for a beam:
The output does not give pass/fail on anything. It’s up to the user to read the report and decide.
He stopped development and support before MacOS X came along, so it only runs in the last version of MacOS9. I can do so as long as my (knock on wood) Titanium Powerbook still boots and runs. It did the other day, but who knows.
There will be some limitations with my beam calculator. I don’t intend to add in triangular or trapezoidal distributed loads unless there is a significant call for this. I’m also not going to add in any Moment loads, but again I may change my mind if there is a demand from the users. Also the end conditions of the beam are either supported (pinned) or an overhang, one or both sides. However if I get the steel engineering figured out a fixed end beam might become a necessity.
Other than these limitations, one should be able to create as many supports and loads as needed.










