Structural analysis tool

I made my very first structural analysis tool!

You can find it at


With this tool you will be able to calculate the values acting on a beam. The way this works is it uses finite element analysis to estimate the rotation and deflection at certain points across the beam.

Afterwards the program then calculates according to these rotations and deflections the moments and shear forces acting on the beam. It should be noted that this structural analysis tool is still in an alpha stage.

This means that the program does not necessarily work yet the way it should.  Although the values it spits out are correct, there are still a lot of bugs with how the values are displayed.


Elements of the structural analysis tool

The main elements of this tool are the FEM-engine that calculates the forces acting on the beam. A second major element are the Eurocode calculation formulas.

As I am based in Finland, the tool that I have made predominantly uses the Eurocodes to calculate limit states. However I have tried to seperate these formulas clearly in the code. The entire program is one html file and contains html, javascript and css.

This has been part of my final thesis and I will most likely develop it further.


Further development stages for this structural analysis tool

I will most likely develop this in 3 stages. First I am going to fix the UI, make it a bit more appealing/easy to work with. Secondly I will take apart the FEM engine and work on making a really slick working FEM engine first. Then lastly I will work on incorporating different types of materials in the calculator (dimensioning wood, metal or concrete) and I will try and incorporate different types of cross-sections as well.


Will this structural analysis tool remain free?

Short answer..yes. It is not nearly anywhere near ready to be monetized in any way. It needs several hours of development more to make it work. However in the future, if I decide to spend more time on it, I might incorporate some ads on the page.


Hope you find this useful!

Some excel files you might find useful!

For school projects that have been going on I decided to make a few excel files that I think you might find useful as well.

One is to calculate the amount of rebar required in a beam or slab given a certain bending moment.

The other one will dimension a foundation footing for you based on certain parameters you give in.

Off course, all in eurocodes!

This is the rebar excel sheet (contains VBA code, but no viruses, I promise 😉 )

And this is the footing program. Again, containing VBA code.

Stiffness matrix maker for continuous beams

I’ve been messing around with finite element method solution methods, partly for school purposes. I noticed that when I was compiling a stiffness matrix for a large system, I kept on making mistakes.

One of the best ways to get rid of mistakes, especially when they are due to sloppiness is to remove the human factor in the equation.
As the world is becoming more and more automated I think it should be standard procedure for any engineer to think how he or she could automate their work more.

What is a stiffness matrix?

In order to solve systems in a computerized way you need to reduce the model that you are analyzing to very discreet, finite elements.

For example if you are examining the stresses on a beam, you need to split up that beam in smaller beams that will allow you to get a clear picture of the entire system.

And in order to do that you need to use stiffness matrices. The global stiffness matrix of a system is no more than the sum of the individual stiffness matrices of the elements that compose the system.

stiffness matrix of a beam element

The small Excel script I made only takes a look at beams. Hence above is the stiffness matrix of a single beam element shown.

The stiffness matrix basically defines the relation between the forces acting on the element and the different spatial deformations that happen as a result of those forces.

This ties in to Hooke’s law: F = k*x. Where F is the force acting on a spring and x is its movement. k is what defines how much or how little a spring would change shape. k is called the spring constant, however in our analogy k is the stiffness matrix.

Summation of matrices.

The more complicated a system gets, the more elements you will need to get an accurate result from your calculations. As a result the global stiffness matrix is calculated by summing the stiffness matrices of the elements together in the following way:

In the above example we have a beam that is clamped on both ends and a force acting on the beam in the middle. We split this system into 2 analyzable elements. Without taking degrees of freedom into account, the stiffness matrix of this system is the sum of the two individual elements’ stiffness matrices.

We see that the common elements in both matrices are summed together and the remaining elements of both matrices simply used to fill up the gaps in the global matrix.

If we were to completely solve this example we would then “fix” some degrees of freedom in this matrix. As the beam is clamped on both ends it is impossible for it to move anywhere at either ends. Nor will it twist or turn as the connection to the wall is extremely stiff.

In this case the matrix reduces to a matrix where we only view V2 and Theta2.

How to use my excel in your homework assignments or self study practices.

I’ve written this program relatively fast as I needed to hand in the paper in a few days. Hence there are some bugs here and there.

For one make sure to always press “calculate stiffness matrix” before running any other calculations. If you press the “calculate force vector” button twice, your computer will freeze up.


  1. Always FIRST press calculate stiffness matrix and only then press anything else.

But other than that here is how it works:

You first you enter the Young’s Modulus, the second moment of area for the beam and the length of the beam. Also if there is a continuous force acting on the beam, now’s the time to enter its value.

Then you enter into how many elements you want to divide the beam. Unfortunately this quick excel only allows you to divide the beam into equally long elements.

Once you have clicked the “Calculate stiffness matrix”-button, you can then enter degrees of freedom as they appear in your problem. So for a clamped end you would select both X1 and X2 (translation at the first end and rotation at the first end are fixed).

Then simply add any additional point loads if there are any and finally press the calculate “calculate force vector and forces” button to get an overview of the external reaction forces of the system.

Some notes

As this was a quick and dirty fix for me, the program is buggy and some values are unnecessarily long stored in the memory. So just to make sure you get the right results you might need to click “calculate stiffness matrix” and then “calculate forcevector” a few times.

Basically run through the program a few times to make sure all values are the right ones.

I’ve for one noticed that on occasion it shows me the wrong result, but when I then click again on “calculate stiffness matrix” and then on the “caculate force-vector” it then shows the right result.

To make sure it works you can try and calculate some standard examples to verify for yourself that my program works.

For example you can calculate the reaction forces at the supports of a beam clamped at both ends. You’ll see that using my program then you’d need to select X1 and X2 as fixed, as well as X5 and X6.

If you defined a point load at the middle node (at X4) then you’ll find that the deflection value is (1/192)*F*L^3/EI, as well as the reaction forces at X1 and X5 to be F/2.


Hope this is of some help to someone!

For anyone looking for more information, I highly recommend this book!

Palkkitaulukko: Beam diagrams

One of the main untapped goldmines in Finland is the world of SEO. Take the keyword “Palkkitaulukko” for example.

This is such a niche keyword that pertains to a side-branch of the engineering-field. However as no-one in Finland at the moment is even trying to do anything for that keyword, it should be really easy to rank for it.


Palkkitaulukko is a list of different load cases for beams. A cheatsheet if you will. You can find a decent “palkkitaulukko” here.


What is a “palkkitaulukko” anyways?

In engineering, and even more so in structural engineering, you get hit left and right with different kinds of formulas. It’s impossible to remember them all.

As most objects in the structural engineering field are either beams or columns, fins have made a table with the most common beam situations. Not unlike any other bended beam table you can find online.

In this table some of the most common ways in which you can load a force onto a beam have been listed, with their maximum moment and maximum deflection.

It’s just a handy cheatsheet for when you are calculating stuff!

A lot of times it’s handier to check a certain load case from a beam table than it is to start calculating it from scratch.

Good self-learning guide

There are a few good books on Amazon that will help you learn how to calculate these problems. Better yet, that’ll teach you how to use these “palkkitaulukko”!

Click here to view Schaum’s outline of statics and strength of materials.

Puustelli library at Prodlib

Pretty excited to see the Puustelli library for Revit and ArchiCad be published.
In most other projects I have participated to a bigger or smaller degree. But Puustelli is the first library that I can say is my doing. I worked together with our contact at Puustelli for a good couple of months before we pushed this one out.

In itself there isn’t that much difference in what we do in other libraries compared to this one. The only specialty with this library however is that we are sharing rendering files to come with the models.
In ArchiCad that isn’t such a big deal as they can be easily defines within the .lcf-file. In Revit however this is a bit more challenging as the paths from which Revit fetches the rendering images can vary from one computer to the other.

Now the method chosen isn’t perfect, since we assumed most computers used for work and structural calculation most likely will run on some version of Windows. Hence the path in which the ProdLib library is installed will most likely stay relatively similar from one Windows version to another.

For Mac however it can be a bit more tricky and it might not always fetch the right images from the right places as it assumes a Windows operating system. This will probably be solved in version 2.0 of this library.

However I’m very pleased with the whole look and feel of the library. There probably are still some mistakes here and there. It might not be 100% flawless but it is mine :)! We’ll work out whatever kinks there are in future editions anyway!

ProdLib and the Puustelli library can be downloaded here.

New niche site:!

Since selling my safetyshoesreviews website I have cleared another slot in my inventory.

Right now I have started together with an Indian buddy of mine. He provides the content that I then review, adapt to make it SEO friendly and do the off-page SEO.

So far we have had one click already coming from Facebook to our site since posting our first article yesterday.

I estimate that the value of this niche site will reach close to $3k especially when you take the Christmas season into account!

GDL reference guide: Perfect self-study material!

I find that relatively often I have to check the “bible” of ArchiCad: The GDL reference guide.

In this guide in over 600 pages Graphisoft goes through the basics of how the GDL programming language works.

If you are interested in making objects for ArchiCad, this reference guide gives a detailed description of GDL, including syntax definitions, commands, variables, etc.

You can download it for yourself using this link.

Table of contents and logical flow

The reference guide starts of handling 3D objects before moving on to how to represent them in a 2D plane.

It however lacks severely in for example curtain wall and other feature objects that have become more mainstream in later versions of ArchiCad.

For those of you who have been reading this blog you’ll find that the ArchiCad curtain wall is severely under-documented in the reference guide.

Lastly before going over the various listing parameters the GDL reference guide goes through making user interfaces.

Later I’ll post some code-snippets and ideas that have helped me in the past. Making user interfaces can be tedious but with the right templates, they are a piece of cake!

GDL reference guide additions

In a later post I’ll add more information on several additions that were made to the reference guide.

For example the GDL cookbook by David A. Nicholson is a really good addition if you are tackling GDL at home.

In a very clear and straight forward fashion David demystifies several commands and codes included within GDL.

Although the cookbook was made for a very early version of ArchiCad, it is still relevant. The version in which the cookbook was written was iirc ArchiCad 8. Now we’re up to 21 already at the time of writing.

However the good thing about GDL, the GDL reference guide and the cookbook is that the language itself remains fairly static.

As a result objects written in ArchiCad version 8 will work just as fine in later versions (mind a few UI quips that I’ll go through later as well..).



ArchiCad Curtain Wall – Custom Panel

So far I have been working on an ArchiCad project for a client of ours. Apparently it is extremely tricky to do anything with the archicad curtain wall tool.

Similar in Revit the curtain wall tools are very much in the starting blocks when it comes to usability and user-friendliness. For Revit there is a bustling community of developers actively working and modifying the tool using various plugins to make it better suit their needs.

In ArchiCad the main programming language is (next to C# for plugins) GDL. Or Geometric Description Language. It turns out however that in the User Reference Guide there is no mention (or very little) on the usability of curtain walls.

ArchiCad Curtain wall code

Quite some trial and error  was necessary to make things work. If you decide to go the hard route and design a custom panel in GDL, here is some code that you might find useful:

cprism_ mat1, mat2, mat3, 4, panel_thickness,

The above piece of code makes sure your panel follows the scheme. You can then set several scheme settings and save them as favorite settings so you don’t have to redo the work over and over.

Also more interestingly for us and our client, these favorites can be exported to a .prf file that you can load in to another project entirely.

AC_PanelCoords[4][4] stores the coordinates of each and every panel. So as you call them in this way in (for example) a cprism_, you can then use this framework to make your own custom panel.

For my own I have declared in my master script the following:

!This makes it follow the grid

And in my 3D-script:

cprism_ mat1, mat2, mat3,29,zzyzx,

..It can get a little complicated..

And if only it was this simple..

There is a 50 mm offset using the panel coordinates that I have no idea (so far) where it is coming from. Probably the archicad curtain wall doesn’t give the exact coordinates or there is some setting that is switched on somewhere that I haven’t been able to turn off.

However it seems to only affect on the 2D representation of the object. The line I commented out actually fixes this and shifts everything 50 mm to the left, alligning everything perfectly.


In the 2D view it seems like the first panel and the second overlap. However as we see from the 3D this is not the case. So very interesting indeed that a simple “project2” command would show these to be intersecting.

My hunch is that this is caused by some bug or error in the AC_PanelCoords somewhere. Or then a fault in my code, which is also highly likely!

2D representation

Secondly another thing that has me ripping out my hair is, as mentioned above, the fact that a projected view of the acrhicad curtain wall is not the same in the 3D view.

Case and point:

archicad curtain wall

How is it possible that the projected view of this panel in the curtain wall is a projection of it on its side?

This has to do with how the archicad curtain wall tool interprets the orientation of the panel as an object itself. The 2D projection then takes the information of the object in its 3D view representation rather than its view in the curtain wall itself.

Meaning that to get the panel to show up as upright when used in a curtain wall, you need to turn the object when modelling in GDL in such a way that it lays flat on the ground.

Only in this way (I have found so far) will the panels show as upright in the archicad curtain wall tool. Then the 2D representation (if you project) takes its information from the GDL version of the standalone object.

Extremely frustrating and most likely a bug in at least Archicad 18. Don’t know if this has been fixed in later versions of archicad.


One workaround that I have found so far is to change the projection_code from 3 (for topview), to 4 (being side-view).

Your code will then be:

project2 4, 270, 32

Which basically is the projection from the side, used as projection from plan-view.

Logical, right?

Handling Corners

Our customer wanted a solution that would be as true to the Archicad curtain wall tool as possible. As such the way we handle corners needed to be similar.

Right now my code does this:

It lines up well, but let’s face it, not a pretty corner now is it.

When taking a look at what ArchiCad had to offer I found that they have a separate panel in their curtain wall tool to handle corners.

As a result I added the next few lines of code to my custom panel in an effort to make the behavior more like the standard ArchiCad ones.

In the master-script I have added the following:

if behaviourvalue = “Normal” then
!This makes it follow the grid
if behaviourvalue = “Corner” or behaviourvalue = “Kulma” then
!Add thickness B of panel to the end to make the corners square

In practice..

In my interface script I have a dropdown with 3 values; Normal, Corner and Stretchable.

If “Normal” is chosen, the panel behaves as it should. It follows the grid as is defined by the user and doesn’t do anything extra.

However if you select the curtain wall and select the “Edit in 3D”-mode, individual panels become clickable.

In order to make a square corner, all the user then has to do is click one of the panels. Then he/she needs to select “Corner” from the dropdown. Ultimately the code works in such a way that it will add the thickness of the panel (in my case read in as “B”) to the end of the panel.

The panel “overshoots” the grid by a measure of “B”. As such the corners are squared.

As the code is placed in the master script there is no need for me to update the 2D script. It takes the rules automatically from the master script.

Frame objects

Lastly the archicad curtain wall tool allows you to add in a lot more than just custom panels. In GDL you can easily define mullions, transoms and border frames.

Mullions are the listings that go in a vertical direction, while transoms divide your panel in a horizontal direction. Border frames border off your wall.

Check this article later for more information on those.

Also if you notice something off or something strange, no-one is perfect :). Please let me know in the comments below so I have a chance to fix it!

Here is the original thread

Merit of theory

I just finished an exam in Steel structural design at my local college. One of the questions I had was along the lines of “What norm governs the design of welds”. A model answer would’ve been “1995-1-1-2”. Those of you familiar with the subject will quickly see that I still cannot answer it.

I couldn’t answer the question because as I was studying i didn’t see the merit of memorizing a numerical code used as a title for a chapter.

I feel that in 2017 any theory question that you can google with max 3 search terms and get a direct hit shouldn’t be an exam question.

I don’t think that in this day and age you should be able to be judged on the random fact memorization of useless information.

It is in my opinion that I am now in the middle of 2 generations. Those who grew up with the internet and those who didn’t. Unfortunately those who have not grown up with modern technology by their side have had to memorize what I call “useless” facts out of necessity.

For them it was helpful to open a book and immediately find the right norm they are looking for. This saves time when designing and helps bring overall cost down during the design stage. I can imagine that if it takes you paging through a 300 page book for a few minutes every time you want to double-check a certain design principle your calculations will be delivered at a much later time than your colleagues.

Nowadays with the arrival of PDF and other text-formatting formats, a simple ctrl+z followed by a few keywords will bring you directly to the desired chapter.
This saves you time and best of all: no need to memorize norms.

I do not however advocate sloppiness. You still need to be able to know what each norm governs. You need to understand what is in those norms. But to memorize the numerical code of the norm is in my opinion senseless.

It will be really interesting to see how the curriculum changes over the next decade as the old guard retires and young blood seeps into our educational system.

My prediction is that the laptop/computer/device that allows you internet access (Google Glass?!) will take a more and more center stage. even when teaching theory. I have found that having to google stuff for myself has proven 10x more effective in learning that particular subject than sitting in a lecture, dabbling on my phone.

Or then I am just lazy and watched too many “Stranger Things” episodes while studying… Some food for thought!

Getting 2 more niche sites ready for Christmas

I’m trying something new with a couple of domains I registered just the other day.

Both are Christmas toys, or presents usually bought during Christmas time. So for these I will be going long to see if they rake in any profit. Most likely the only time I will see any movement with these sites will be next year’s Christmas.

As these domains are bought from scratch (not using or any other domain name selling service), they are unknown in the eyes of Google.

Meaning that it’ll be quite difficult to get traction for these sites. And by difficult I mean it will just take longer. Ultimately any site you work on for a long enough time in a decent enough time-interval will generate some money.

Either in content that you write that you can then later sell onwards if you fail to get any traffic to the site, or then in actual sales through Amazon or any affiliate program of your choice.

Making these websites, playing around online has also got me thinking I should probably look more into developing my programming sills more as they are very much basic so far…