Parametric Network Arch Bridge

Written and developed by: Erik Tveiten, Sweco Norway

One of the most exciting topics in network arch bridge projects is finding the optimal hanger layout. And as this can be quite a challenge, we decided to develop a script to do exactly that. Keep in mind; this is a fun experiment and wasn’t applied to a live project yet.

The idea is simple; first, let’s model a network arch with many cables at any position and direction. And second, to remove those cables in compression or with a max tension force from the SOFiSTiK database (.cdb)

The only objective of this experiment was to see how we could change the system by reading from the SOFiSTiK database (.cdb) with a given set of factors.

The Grasshopper Model

We build the arch bridge model in Grasshopper. The arch chord length is 400m with a sagitta of 64m; you can see the input in the picture below.

Grasshopper Script
Grasshopper Script Arch

The arch cross-section is a D2000 / 40mm,

Arch Cross Section

and divides into segments with a single length of 5.84m.

Segment Points

From the segment points, vertical lines intersect with the chord.

Vertical Lines

The result of the Grasshopper input is a network arch bridge with a total of 2760 cables.

Cable Net Result
Cable Net Result

You can see the used cross-section for the cables in the picture below.

Cable Section

The geometry definition gets, exported into an enormous text file (.dat), consists of 5540 lines of code, to process it further in the workflow.

Model .dat file

Apply Loads

Three load cases have been applied to the structure:

  • Load case 10 is the self-weight of the modeled structure
  • Load case 2 is a line load along the tie strut. The load has a value of 2kN/m
  • Load case 3 is a line load along half of the tie strut. The load has a value of 15kN/m

The load cases above are combined to one load case LC 1 within the program module SOFiLOAD and calculated with ASE.

Load .dat file
Load Case 2 and 3

Access the Database (.cdb)

To access the database (.cdb) and extract the required information, we decided to use C# in Visual Studio. There are examples in the SOFiSTiK folder “Interfaces”, which are helpful to start with the C# script.

After setting the paths in the script, we are good to extract the data we need/want from the database (.cdb).

We extract the cable number and its normal force for load case 1. The information gets saved for further processing later in the workflow.

CS Script Access Database

Optimal Hanger System

We set the criteria to remove cables from the system with a normal force of less than 50 kN. That means all cables in compression and those with a normal force smaller than 50kN get removed.

To remove cables from the initial system, it is necessary to locate the reference line of every cable in the model. Another C# script with a loop is required.

CS Script Remove Cables

Knowing the reference numbers for those cables in compression or tension force lower than 50kN removing the line elements from the model is possible. SOFiSTiK’s technical support strongly recommended not to delete elements directly from the database – which was our initial idea. We followed this advice and removed the line elements with the help of a +prog SOFiMSHC input.

We iterated over the initial model file several times. Every iteration consists of finding all the elements with a normal force less than 50kN, finding the reference line number (meaning the SLN number), and then removing them from the “modell.dat” file.

The model after the first iteration:

First Iteration

The number of cables makes it nearly impossible to see anything other than cables. The cable forces vary between 338,4kN in tension and -308,9kN in compression, as you can see in the picture below.

First Iteration Forces

After running 15 iterations, we get the following cable layout.

15th Iteration
Cable Forces

Every iteration consists of running the file we created in Visual Studio (SlettkablerSofi.exe), then running the SOFiMSHC file (modell.dat) and calculating (calculate.dat) the cable forces again. You can see the text input below.

Teddy Script

It is also possible to find the optimal hanger system for non-linear analysis; the only difference would be that the +prog ASE file includes the input line “SYST PROB NONL”.


The example shows that it is easy to use tools such as Visual Studio and Grasshopper to optimize our design. For a network arch bridge, the criteria used are only useful in decreasing the number of cables/hangers. It does not consider minimizing the bending moments on the arch and the tie girder. However, for simple problems, this method could easily be used to optimize the design.