3D Frame with zero stiffness hinges

The previous version of 3DFrame allowed for spring releases at beam ends, but if the release stiffness was entered as zero it was treated as a rigid connection for that freedom.  Effectively zero stiffness releases could be modelled by entering a very low stiffness value, but this sometimes caused arithmetic problems, resulting in enormous deflections being reported for the released freedoms.  To avoid this problem the code has been modified so that any freedom entered as zero stiffness is treated as fully released.  The new version (Rev. 2.08) may be downloaded from:


The solver links to two dll files that need to be installed as described here:

Installing C# dll files, reminder

The download zip file also includes a VBA only version, that should work without any further installation, other than extracting from the zip file.

Typical input showing both spring and zero stiffness releases is shown in the screen shot below:

Further details of the program 3Daxis system and the related stiffness matrices can be found at:

3D Frames, axes and stiffness matrices

This entry was posted in Beam Bending, Excel, Finite Element Analysis, Frame Analysis, Newton and tagged , , , , , . Bookmark the permalink.

11 Responses to 3D Frame with zero stiffness hinges

  1. Paris Altidis says:

    For some reason, all 3 Excel files crash Excel 2007 & Win7 at opening. The Excel files along with the DLLs of the new distribution were expanded in their own folder.


  2. mktisis says:

    Hi dougaj4,

    I quite confused when I was trying to go over the code.
    Might be a bug?
    This line,
    ” If Kt > 0 Then OneOBeta = 1 / Beta Else OneOBeta = 1 / Beta”
    under Function AddSprings3()

    I was thinking maybe, OneOBeta should be equal to zero for the Else condition?


    • dougaj4 says:

      It does look a little odd 🙂
      I’ll have a look.


    • dougaj4 says:

      The code is a “correction” to a previous version, so that OneOBeta is calculated for all values of Kt, including 0, but of course the if statement is not required in that case.
      I have replaced the line with:
      OneOBeta = 1/Beta

      No change to the results.

      Liked by 1 person

      • mktisis says:

        Makes sense now, thank you.
        How about for the Ks value, will it remain as is?
        Beta = Ks + km2(kk, kk)
        If Beta 0 Then OneOBeta = 1 / Beta Else OneOBeta = 0


  3. mktisis says:

    Hey dougaj4,
    Sorry to bother you again. I have been studying your code for a while now,
    I was comparing Function REAct3D (Frame analysis part) and Function LinBeam3D (Beam analysis part), it seems that the use of EI and GA stiffness combination differs for both methods,
    in Function REAct3D, EI_1 with GA_2 (or EI_2 and GA_1) was used.
    while in Function LinBeam3D, (EI_1 with GA_1) or (EI_2 with GA_2) was used.

    I am also wondering if there’s an error on this code right here
    SSRes(i, 5) = SSRes(i, 3) – (Q * DX1 ^ 2 / 2 + Qdash * DX1 ^ 3 / 6 + QNeg * DX2 ^ 2 / 2 – Qdash * DX2 ^ 3 / 6)
    I think SSRes(i, 3) should be SSRes(i, 5)
    this was taken from Function LinBeam3, calculating the SSRes for Distributed Loads.


    • dougaj4 says:

      I’ll have to check that out.
      It gets confusing because different software uses different conventions for the local axes.

      For the Linbeam3 question, the formula in the current version (2.09) in the LinBeam3 function is:
      SSRes(i, 3) = SSRes(i, 3) + Q * DX1 ^ 2 / 2 + Qdash * DX1 ^ 3 / 6 + QNeg * DX2 ^ 2 / 2 – Qdash * DX2 ^ 3 / 6

      and SSRes(i, 3) is the bending moment.

      The formula you quoted is in the AxBeam3 function, where i, 3 is the Torque and i, 5 is the deflection due to axial force. I will check if that is right, I agree it doesn’t look right!


    • dougaj4 says:

      I have now checked these:
      The REAct3D function is correct, and I will change LinBeam3D to work the same way. I didn’t pick it up because my check frames have rectangular sections, which have the same shear area in both directions. I will post a revised version today or tomorrow. Note that the Linbeam3D function is only used in calculating the intermediate sections between nodes, and the difference is quite small because only the deflections due to shear are affected.
      In the AxBeam3 function SSRes(i, 3) should be SSRes(i, 5), as you suggested. This doesn’t make any difference in the current code because there is only one iteration for each load, so the SSRes(i, 3) and SSRes(i, 5) are always zero before the formula is applied.
      Thanks for letting me know about these issues.


Leave a Reply to mktisis Cancel reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.