Exchanging BIM data between Revit and FEM-Design through Dynamo

Based on observed problems in our internship at engineering companies, we (Kasper Nøhr Madsen and Anders Woetmann Andersen) registred unsuitable ways of working in project design. Therefore, we in our final project—at Technical University of Denmark—made a project focusing on the development of an optimized workflow that, among other, accommodates the many iterations experienced in a projects early stages.

The developed workflow involves a preliminary examination and control of the 3D model, a collision control, and a correction of the analytical model. Subsequently, the processes for which the information is required for a load-bearing calculation is added to the Revit model elements. In this process, the vertical loads for floor and the edge connections for walls are defined. Finally, the method in which the results from the calculation software FEM-design is introduced for sending data back to the Revit model. The element namecreated in FEM-design to identify each element in the calculation software and the reinforcement details for each element is also send back to the Revit model.
The project was conducted in close connection with StruSoft who develops FEM-design. Results from our project are implemented in the newest FEM 17 release, so others can adapt visual programming using FEM-design as well.

02 Beam length control.dyn (21.8 KB)
This script is one of the “controls” we’ve worked with during this project. Sometimes the modeled beam length isn’t equal to the analytical beam length, and as such can cause issues for the structural model that is exported to FEM-Design. This script simply compares the two lengths, and if the difference is outside a given tolerance the elements are highlighted in the active view.

04 Structural parameter control.dyn (33.5 KB)
The script controls whether wall and floor elements are set to structural. This is a necessity as the structural elements (analytical elements) are exported to FEM-Design. If an element is not set to structural it won’t be exported, and as such if there are errors this will heavily impact the calculations in FEM-Design.
The script is very basic and simply checks for the structural parameter to be “true” for the relevant elements. If these are not set to structural, the element is colored red and can easily be manually checked in the active view. The remaining elements are set to at customizable transparency.

05 Analytical correction
05 Analytical correction.dyn (28.0 KB)

This script allows the user to correct wherein each element the corresponding analytical element lies. For instance, this could for walls be in the exterior face, interior face, core etc.

06 Add parameters
06 Add parameters.dyn (16.1 KB)

The script simply creates empty project parameters for data to be added to. This data could be information used in the export process or data imported from FEM-Design such as reinforcement information.
The script doesn’t currently always work as intended. Sometimes a few parameters aren’t added for an unknown reason. The correct way for the parameters to be added is in the following way (and order):

For walls

  • Top release
  • Bottom release
  • Left release
  • Right release

For floors

  • Variable load [kN/m2]
  • Snowload [kN/m2]
  • Deadload[kN/m2]

07 Add evenly distributed loads
07 Add evenly distributed loads.dyn (39.9 KB)

The script adds an evenly distributed load to floor elements that have a category assigned. It uses an Excel file as a “lookup table” where information for each category is assigned. As such, the 3D element must have a category assigned for it to have a load added.

NOTE You need the excel file “lastspecifikationsark” listed on the bottom of this post, wherein data about the different categories and their respective load values lie.

08 Edge connections in the exported XML file
08 Edge connections in the exported XML file.dyn (42.0 KB)

This script uses the XML file made by the Strusoft Revit add-in (this is browsed to in the Dynamo Player). The walls edge connections should be defined in the empty parameters previously created, either “Free”, “Hinged”, “Rigid” or “Free in Z”. Running the script edits the XML file and the result is only visible in FEM-Design.

09 Add ID from FEM-Design to Revit
09 Add ID from FEM-Design to Revit.dyn (26.7 KB)

The script uses the XML file made by FEM-Design. In here information regarding the ID’s created in FEM-Design lies (such as a wall with ID W.1, plate with P.1 etc.). This information is added to a parameter also created by this script.

10 Import simple reinforcement information from FEM-Design
10 Import simple reinforcement information from FEM-Design.dyn (28.9 KB)

This script also uses the XML file made by FEM-Design. In FEM-Design information regarding the reinforcement is added and read the script. The script creates an empty parameter and adds the relevant information to each element. As is, the script only handles “simple” reinforcement, and as such different types of reinforcement for an element is not able to be added.

Test Revit file, work-in-progress scripts and other files
Lastspecifikationsark.xlsx (8.8 KB)
01 From architectural model to structural model.dyn (38.6 KB)
03 Collisioncontrol of walls.dyn (22.3 KB)
Revit test model.rvt (2.8 MB)


Saw this on linked in last night - glad to see it here too! It’s a great example of using Dynamo to work around the historic difficulties of the design process. Kudos all around.


Thank you! It was exciting working with this, especially creating the more advanced functions with Python

Very nice work here. I’m interested in seeing an example of FEM done right in dynamo but know enough about software development to understand why its more often commercially bundled. I’ve seen Grosshopper code with the engineering calculations done natively and so assume its possible in Dynamo as well. Is the rebar specification outputted actually good enough to use in the field?

I can confirm that it’s possible to run calls directly in Dynamo, but one would have to take the time to create the code to do so (ie write scripts to do the engineering calculations - sheer, moment, bending, etc natively).