If analysisType = "2D" Then
dofPerNode = 3 ' ux, uy, θz
Else
dofPerNode = 6 ' ux, uy, uz, θx, θy, θz
End If
Dim totalDof As Integer
totalDof = nodes.Count * dofPerNode
' Initialize global stiffness matrix
Dim K_global() As Double
ReDim K_global(1 To totalDof, 1 To totalDof)
' Assemble global stiffness matrix
Dim elem As Variant
For Each elem In elements
' Get element stiffness matrix based on element type
Dim k_elem() As Double
If elem.elementType = "truss" Then
k_elem = GetTrussStiffnessMatrix(elem)
Else
k_elem = GetFrameStiffnessMatrix(elem)
End If
' Add to global matrix
' ... [assembly code]
Next elem
' Apply boundary conditions
' ... [support handling code]
' Solve system based on selected solver
Dim displacements() As Double
If solverType = "direct" Then
displacements = SolveDirect(K_global, loads)
Else
displacements = SolveIterative(K_global, loads)
End If
' Calculate reactions and element forces
Dim reactions() As Double
reactions = CalculateReactions(K_global, displacements)
Dim elementForces() As Variant
elementForces = CalculateElementForces(displacements)
' Display results
DisplayResults displacements, reactions, elementForces
' Update visualization with deformed shape
UpdateDeformedShape displacements
Exit Sub
AnalysisError:
MsgBox "Analysis error: " & Err.Description, vbCritical
' Log error to worksheet for debugging
P a g e 56 | 62