## 3 The Solid FEA Plugin
### Introducing the Components: Analysing a Cantilevering Beam
#### 3.4.1 Establishing the Model  
Figure 7 demonstrates the components necessary for establishing the FEA using the presented plugin. A brief description of each step follows.  
For the analysis to run, the _FEMSolver_ component requires a list of Rhino meshes. These can be either tetrahedrons or hexahedrons analogous to the first order finite elements Tett and Hex8 in Figure 5. In this example, the meshes are generated by a C# script to have complete control of division number and element types, but for more arbitrary and complex geometry, a meshing algorithm is recommended. In this analysis, the number of divisions in the x-, y-, and z-direction is user input, and hexahedral elements are created accordingly. Each hexahedral is divided into six tetrahedrons for tetrahedral elements, i.e., for the same division number, the tetrahedral mesh will have six times as many elements. In cases where the user wants second order elements for the analysis, the mesh input in Figure 7 is passed through a component which adds a node to the middle of all mesh edges seen in Figure 8. This modified mesh is then the mesh input in all the FEA components. Apart from that, everything remains the same.  
Next, the mesh points where boundary conditions apply have to be specified. The _Support_ component takes the mesh list as input together with the point to restrain from translation in directions specified by the user. By default, all three translations are restrained, but this can be modified by changing the Boolean values of \(Tx\), \(Ty\), and \(Tz\) in the component. The component's output is a list of 0's and 1's representing the constraint from translation in all nodal directions. 0 indicates a free node, whereas 1 indicates a restraint.  
Similarly to the boundary conditions, the location of the applied loads needs to be specified. Here, both point and surface loads can be applied. The necessary inputs are the mesh list, the type of load (0 for surface- and 1 for point load), the surface or points to assign the loads to, and the vector specifying the direction of the load. The output is a list corresponding to the global load vector, and a list of points on the mesh where a load is acting for the user to verify the results.  
Finally, the object's material needs to be specified using the _Material_ component. By default, the properties of S355 steel are set as input values, but the user may change these  
\begin{table}
\begin{tabular}{c c c c c c c} \hline \hline
**L [mm]** & **w [mm]** & **h [mm]** & **E [GPa]** & \(f_{yd}\) [MPa]** & \(\
u\) & **P [kN]** \\ \hline
1200 & 100 & 200 & 200 & 355 & 0.3 & 150 \\ \hline \hline \end{tabular}
\end{table}
Table 1: Input data for the cantilever beam.  
Figure 6: Illustration of benchmark problem. A cantilever beam with a cross-section of 100 mm \(\times\) 200 mm. The theoretical solution, using beam theory, is used as a reference for the analysis.  
if necessary. With isotropic material, the only necessary inputs are the Young's modulus, Poisson Ratio, Yield stress, and material weight.  
With all necessary parameters defined, the analysis is done by connecting all the above inputs into the _FEMSolver_. After running the analysis, the results are stored in the _FEMesh_ class, which is also an output of the solver. This can be used later for the visualisation of the results. In addition, the solver outputs lists of nodal displacements in u-, v-, and w- directions, as well as lists of nodal en element stresses. The final output is a list of strings giving information about the analysis.