Hangleman - it can be something in this direction You described. Rb1957 - it is 3-dimensional subject. There is no vibration or other dynamic interactions. There are many rods about 20, 30, 40 rods - it depends from the element. These are boiler Power Station suspended elements. It is very interesting that this macro include rod length effect. For example when one rod is shorter than others, it carry much more load than others rod. Below is a fraction of VBA code. There is "Inverse" used. Matrix is created from
F11 to F33 values and inversed. I do not know this method of weight distribution calculation. If You could describe it in some lines generally (ideolically) or indicate books,
publications where such solutions are described I will appreciate it. I am particulary interested this Matrix Inversion and alfa, beta, delta quantity.
"Area column" is cross section area of the rod
"Length column" is length of the rod
Cells(i, xColumn)); Cells(i, yColumn)) - there are rods coordinates
(Cells(TotalRow + 1, j); (Cells(TotalRow + 2, j) - these are correspondingly x and y coordinates of the structure center
--------------------------------------------------------------------------------------------------------------------------
MassSum = 0
MomentSum_x = 0
MomentSum_y = 0
MomentSum_z = 0
For j = LoadCaseColumnStart To LoadCaseColumnEnd
For i = RowsMassStart To RowsMassEnd
If Cells(i, j) <> 0 Then
MassSum = MassSum + Cells(i, MassColumn) * gravity * Cells(i, j)
MomentSum_x = MomentSum_x + Cells(i, MassColumn) * gravity * Cells(i, j) * Cells(i, xColumn)
MomentSum_y = MomentSum_y + Cells(i, MassColumn) * gravity * Cells(i, j) * Cells(i, yColumn)
MomentSum_z = MomentSum_z + Cells(i, MassColumn) * gravity * Cells(i, j) * Cells(i, zColumn)
End If
Next
Cells(TotalRow, j) = MassSum
If MassSum = 0 Then
Cells(TotalRow + 1, j) = 0
Cells(TotalRow + 2, j) = 0
Cells(TotalRow + 3, j) = 0
Else
Cells(TotalRow + 1, j) = MomentSum_x / MassSum
Cells(TotalRow + 2, j) = MomentSum_y / MassSum
Cells(TotalRow + 3, j) = MomentSum_z / MassSum
End If
MassSum = 0
MomentSum_x = 0
MomentSum_y = 0
MomentSum_z = 0
F11 = 0
F12 = 0
F13 = 0
F21 = 0
F22 = 0
F23 = 0
F31 = 0
F32 = 0
F33 = 0
For i = RowsRodsStart To RowsRodsEnd
If Cells(i, PointingColumn - 1) = "x" Then
F11 = F11 + (E * Cells(i, AreaColumn) / Cells(i, LengthColumn)) * (Cells(TotalRow + 1, j) - Cells(i, xColumn)) * (Cells(TotalRow + 1, j) - Cells(i, xColumn))
F12 = F12 + (E * Cells(i, AreaColumn) / Cells(i, LengthColumn)) * (Cells(TotalRow + 1, j) - Cells(i, xColumn)) * (Cells(TotalRow + 2, j) - Cells(i, yColumn))
F13 = F13 + (E * Cells(i, AreaColumn) / Cells(i, LengthColumn)) * (Cells(TotalRow + 1, j) - Cells(i, xColumn))
F21 = F21 + (E * Cells(i, AreaColumn) / Cells(i, LengthColumn)) * (Cells(TotalRow + 2, j) - Cells(i, yColumn)) * (Cells(TotalRow + 1, j) - Cells(i, xColumn))
F22 = F22 + (E * Cells(i, AreaColumn) / Cells(i, LengthColumn)) * (Cells(TotalRow + 2, j) - Cells(i, yColumn)) * (Cells(TotalRow + 2, j) - Cells(i, yColumn))
F23 = F23 + (E * Cells(i, AreaColumn) / Cells(i, LengthColumn)) * (Cells(TotalRow + 2, j) - Cells(i, yColumn))
F31 = F31 + (E * Cells(i, AreaColumn) / Cells(i, LengthColumn)) * (Cells(TotalRow + 1, j) - Cells(i, xColumn))
F32 = F32 + (E * Cells(i, AreaColumn) / Cells(i, LengthColumn)) * (Cells(TotalRow + 2, j) - Cells(i, yColumn))
F33 = F33 + (E * Cells(i, AreaColumn) / Cells(i, LengthColumn))
End If
Next
massForce = Cells(TotalRow, j)
Sheets("Inverse").Cells(3, 1) = F11
Sheets("Inverse").Cells(3, 2) = F12
Sheets("Inverse").Cells(3, 3) = F13
Sheets("Inverse").Cells(4, 1) = F21
Sheets("Inverse").Cells(4, 2) = F22
Sheets("Inverse").Cells(4, 3) = F23
Sheets("Inverse").Cells(5, 1) = F31
Sheets("Inverse").Cells(5, 2) = F32
Sheets("Inverse").Cells(5, 3) = F33
alfa = Sheets("Inverse").Cells(7, 3) * massForce
beta = Sheets("Inverse").Cells(8, 3) * massForce
telta = Sheets("Inverse").Cells(9, 3) * massForce
For i = RowsRodsStart To RowsRodsEnd
If Cells(i, PointingColumn - 1) = "x" Then
Cells(i, j) = (E * Cells(i, AreaColumn) / Cells(i, LengthColumn)) * ((Cells(TotalRow + 1, j) - Cells(i, xColumn)) * alfa + (Cells(TotalRow + 2, j) - Cells(i, yColumn)) * beta + telta)
End If
Next