3DFrame Ver 1.03 and Frame4 Ver 3.07

Updated versions of my 2D and 3D frame analysis spreadsheets are now available for download from:

The download files include full open-source VBA code, and dll files for compiled solvers for much better performance with large models. See https://newtonexcelbach.wordpress.com/2012/11/16/frame4-now-with-added-alglib/ for instructions on installing and linking to the dll files.  The VBA code does not require any special installation.

Changes common to both spreadsheets are:

  • The check for a reference to the compiled solver dll files previously caused the VBA solver to crash if the dll files were not found.  This has now been fixed so that the VBA solver will run if the compiled solver files are not installed.
  • A check has been added that the resultant reaction forces are equal to the total resultant applied loads.

In addition the following changes have been made to individual spreadsheets:


  • The three solvers available in 3DFrame (compiled Alglib sparse solver, compiled skyline solver, and VBA solver) are now also available in Frame4.


  • Calculation of shear deflections is now supported.
  • Member end releases are now supported.
  • The plot functions have been updated for easier use and better performance
  • Specified support displacements may now be input.
  • Members may now be specified as truss elements, transferring axial load only.

Note that specified support displacements are modelled by adding a virtual large stiffness in the direction of the displacement, and this solution method is not compatible with the iterative solution method used in the Alglib sparse solver.  For this reason models with specified support displacements should be solved with the compiled solver or the VBA solver.

Examples of input and output using the new features in 3DFrame are shown in the screenshots below:

Support reactions without specified deflections or truss members:

3dFrame results compared with Strand7 results

3dFrame results compared with Strand7 results

Change Property Number 3 to truss element (set I1, I2 and J to zero).


Reaction results


Add support displacements

Reaction results

Equilibrium check for Alglib sparse solver used with specified support displacements:


Correct results with compiled solver option:


This entry was posted in Excel, Finite Element Analysis, Frame Analysis, Link to dll, Newton, VBA and tagged , , , . Bookmark the permalink.

34 Responses to 3DFrame Ver 1.03 and Frame4 Ver 3.07

  1. hadwa says:

    How about adding a loadcase managment in loads definition? So you can group several loads in a loadcase and switch between results in any loadcases. That would make your program the most useful engenering excel app ;p


  2. André Correia says:

    Hi. Thank you for your update on the spreadsheet. This is briilliant!
    However, I can’t seem to get the files for 3Dframe and Frame4 as I get a “Page not found” error…
    Thanks again.


  3. Pingback: Converting from global to local coordinates (and vice versa) | Newton Excel Bach, not (just) an Excel Blog

  4. Pingback: Frame Analysis with Excel | Newton Excel Bach, not (just) an Excel Blog

  5. Edson says:

    Hi Doug,

    I’m trying to use 3DFrame v. 1.03.

    I would like to check the model I have made but I cannot understand how to plot it. At least I do not understand why the viewing angles do not work well for me.

    I mean the cells B3:B14 at “plot” sheet for which, some of them, do not have variables assigned to them.

    Cell B13 for instance is mean to be the “View angle – rotn” but when you click it Excel shows “Deflect_Mag”.

    “Center Z” is not assigned to cell B8?

    Is there something wrong?

    Thank you very much indeed for your attention!



  6. dougaj4 says:

    Edson – the range names need a bit of tidying up, which I’ll do in the next release, but in the current version the names used by the plot routine are:
    VertAx: B3
    PlotScale: B4
    CentXYZ: B6:B8
    ViewXYZ: B10:B13
    DefScale: B14

    If you have those names defined as listed the plot routine should work OK. If you are not getting a correct plot some other things to check are:
    Is the correct vertical axis entered in cell B3?
    Check the selected data ranges. The node coordinate range should include just the coordinates (not the node numbers). The beam connections range includes the beam numbers. In the next version I will make the selection of the data ranges fully automatic.
    Remember that with the Y axis as vertical the Z axis is towards the viewer.

    If you are still having problems please let me know with details. If you would like to send a file to dougaj4 at gmail I would be happy to have a look at it.


  7. Edson says:

    Any prevision for the next version?


    • dougaj4 says:

      “Real soon now” 🙂

      There is a lot of overlap with the continuous beam spreadsheet, so what I am doing is tidying up both so they use the same routines wherever possible. I am also modifying the end releases in the frame spreadsheets so you can specify a spring release at a beam end, rather than just on or off. All that is taking longer than I had hoped, but I am making progress on it.


  8. Anthony says:

    Hi Doug

    I have read on this website that the method of analysis used in your spreadsheets is the same as Strand 7, could you please let me know what this method of analysis is called?



  9. Jeffrey says:

    Hi Doug,
    This frame analysis programme is excellent.

    but I encounter an error message as following when I run it with sparse solver:

    Run time error ‘7’
    out of memory

    I try to debugg it and the error happens at:

    ReDim KVsi2(0 To MaxRows, 0 To 1)

    My model has 1283 nodes and 2441 elements, I check the value of MaxRows is 50513399.

    My computer is win 7 64 bit with 8gb ram, excel is office 2007 version.

    please help on this.


    • dougaj4 says:

      Did it work with the compiled solver?
      I can’t check it out at the moment, but I am working on a new version that will use the Python sparse solvers which seem to be more stable than the Alglib one, and will also have a more efficient routine for setting up the sparse matrix.
      I’ll get a Python version up as soon as I can.


      • Jeffrey says:

        It’s good news that you will further develop this programme.

        The error happens before going to solver. It happens in the function sparsekv()

        redim array KVsi2 and IndexA requires a lot of memory in my case, KVsi2 is of dimension (50513399 X 2)and IndexA is of (7959 X 6329).

        So it runs out of memory.


  10. dougaj4 says:

    Jeffrey – the current version doesn’t do anything to minimise the bandwidth so it’s possible that it will run if you re-number the nodes so the maximum difference in node number along any beam is reduced.
    This shouldn’t be an issue with the Python version where the sparse matrix will only contain non-zero terms, regardless of the node numbering.


    • Jeffrey says:

      I’m quite expecting your new version.

      Hopefully in the new version, also the offset of beam will be included.

      Thanks for your excellent programme.


  11. napster says:

    Looking forward to seeing non linear analysis or dynamic analysis, Pdelta etc.


  12. Chandrakant says:

    Hi Doug,
    This frame analysis programe is excellent.I have a simple question here. While converting Global Loads to local coordinate system . I am using costheta=u.v/UBar.vbar and find the angle. Then resolve loads into axial and perpendicular direction . Once I get perpendicular load how to resolve this load into local major and minor axis of the member. Your help on this is highly appreciated.




  13. dougaj4 says:

    I’m tempted to say “I can’t help then”, but that would be about as useful as just saying “NO”.

    The link provides functions for converting global forces to local, or the other way round, which is what I thought you wanted to do.

    If you are talking about input for my frame programs, this is all global axes anyway. The program converts to the local system.


  14. Chris says:

    Hi Doug
    Excellent work!! It’s exhilarating to see someone pushing the limits of Excel that far!

    Well, I just had the chance to play around for a little while with your spreadsheet. Everything as expected so far with the “usual” frameworks. However, as soon as I try truss elements with I1, I2 and J set to zero, the spreadsheet stopps working and a runtime error appears.
    I tried searching your vba code for any clues to no succes as my programming skills are very close to nil.
    Could you give any advise what I should best check for?

    Thankd for you help and please keep up your fantastic work!




    • dougaj4 says:

      Chris – it seems that the truss analysis in the 3D spreadsheet has stopped working. I will need to work through it when I have time. In the mean time, it still works in the 2D version if you apply a moment release to both ends of every beam, or enter a very small (not zero) I value. Note that if you have loads applied anywhere other than node locations the beam end-release method will give better results. Also the frame needs sufficient cross bracing to be stable.

      See: https://newtonexcelbach.wordpress.com/2013/02/21/using-frame4-for-truss-analysis/


  15. Chris says:

    Many thanks for the rapid answer! I shall check out your link and try to work my way through your code. I am sure I’ll learn a lot from that.

    Best wishes



  16. Abdullah says:

    I want to ask about 2D frame analysis, is it possible to apply the moment distribution method in this work?
    I also want to congratulate you, these works are excellent, and all is teaching lots of things.


    • dougaj4 says:

      You could do, but I don’t know that there would be any benefit compared with the usual stiffness method, for computer analysis.


  17. Tony says:

    Hi. I’m reviewing your 3D-Frame program and I think it’s excellent. I would like to know if on a beam, for example 6 m, I can add point loads at 2 m, 3 m and 4 m? since when reviewing the diagram of moments throws an erroneous result.
    Thank you


    • dougaj4 says:

      Tony – you should be able to add any number of point loads, anywhere along a beam.
      Are you using the latest version (2.06,check on the “about” sheet)?
      If you are still having a problem, could you send an example to my gmail account (dougaj4).


  18. Tonny says:

    I am using your 3dFrame program. I would like to know how to release the support of a beam so that it is not a rigid connection, just simple support.
    With zero it is rigid, what do I apply to be free support?
    Thank you


  19. Tonny says:

    I am using your 3dFrame program. I would like to know how to release the support of a beam so that it is not a rigid connection, just simple support.
    With zero it is rigid, what do I apply to be free support?
    Thank you


    • dougaj4 says:

      The current version treats 0 stiffness as a pin, and an empty cell as a rigid connection. I have updated the link in the blog post, and the latest version is 2.09.


Leave a 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.