## 3 Materials and Methods
### Basic Parameter Setup  
The first step involves defining the fundamental parameters that govern the OMSS geometry, as shown in Figure 4. Number Slider components are used to define various dimensions of the structure, which are derived based on precedents, bridge construction requirements, and structural engineering design philosophies. These parameters form the backbone of the MSS model, allowing for a consistent and flexible framework to adjust dimensions as needed throughout the modelling process. The entire model can be changed simultaneously by adjusting those parameters, which is convenient for design iterations. Figure 4: Grasshopper scripts for basic parameter setup. The main arch height and sub-arch height are the main variables in this study and are colored in red. The main girder truss was modelled through several parts, including top chords, bottom chords, verticals, and bracings, as shown in Figure 6. Modelling separate structural elements can allow for a more detailed and flexible structural analysis, as each part can be assigned different beam properties. The modelling process starts with defining the base vertical, which serves as the benchmark for the whole structure from which the \"branches\" will grow. For the truss chords, the end points are found using the _Move_ component based  
Figure 5: Main girder: (**a**) subdivided components; (**b**) model view. on the desired truss length spanning from the origin. The _Divide Curve_ component is used to determine the nodes on the chords, which are extracted for the generation of verticals and bracings. Verticals are created by arraying the base vertical linearly using _Linear Array_. The bottom chord nodes are dispatched to pick alternate nodes. Then, grouped with the top chord nodes, the diagonal bracings between the top and bottom chords are created, where the new node list needs to be sorted before being connected as a polyline and exploded into segmented lines. The concept of sorting a list of nodes involves deconstructing the nodes into x, y, and z coordinates and sorting the coordinates from low to high based on the desired sorting direction. As shown in Figures 7 and 8, similar modelling logic can be employed in the creation of the back and front nose. Special considerations include dealing with the truss ends and finding the correct starting points to model the two components. The bottom chords are created before the top chord. As the top chord has less nodes, the _Cull Index_ component combined with the _List Length_ component is used to remove the nodes as needed. The correct position of the back nose is determined by the position of the constructive joint of the bridge, and the front nose truss is determined based on the length of the main arch and the overall span of the bridge deck. It is also influenced by the segment length. Figure 6: Body part of main girder truss: (**a**) Grasshopper scripts; (**b**) model view. The red coloured component is the Body part of main girder truss. Figure 8: Front nose part of main girder truss: (**a**) Grasshopper scripts; (**b**) model view. The red coloured component is the back nose part of main girder truss. Figure 7: Back nose part of main girder truss: (**a**) Grasshopper scripts; (**b**) model view. The red coloured component is the back nose part of main girder truss. To obtain the transverse bracing elements, the top and bottom chord nodes created in previous sections are merged and sorted in two lists. Duplicate points are removed using the _Cull Duplicates_ component. The transverse bracings can be classified depending on their produced positions, which are top chord transverse bracings, bottom chord transverse bracings, and web transverse bracings. For creating the diagonal bracings, the concept from the previous sections can be applied. Verticals can be created by moving the chord nodes based on the main girder width parameter and connecting them using the _Line_ component.