You are on page 1of 4

Option Explicit

Option Base 1
Public T() As Double 'transformation matrix
Public TT() As Double 'transpose [T], used in Module 3

'Indexing for matrix subscript


Sub Mindex(index() As Integer, IFr() As Integer, IFx() As Integer)

'Member end-displacements index:


For i = 1 To NM
With Member(i)
index(1, i) = 2 * .J1 - 1
index(2, i) = 2 * .J1
index(3, i) = 2 * .J2 - 1
index(4, i) = 2 * .J2
End With
Next i

'Joint free displacement index, IFr and support index, IFx


n = 1
j = 1
For i = 1 To NP
If Rs(i) = 0 Then IFr(n) = i: n = n + 1
Next i

n = 1
For i = 1 To NS
n = Cells(22, 1 + i)
IFx(2 * i - 1) = 2 * n - 1
IFx(2 * i) = 2 * n
Next i

End Sub

Sub Stiff_Mtx(MK() As Double, S() As Double)


Dim sms As Double
ReDim M(4, 4, NM) As Double

'Building global stiffness matrix


For i = 1 To NM
With Member(i)
sms = .Ax * .E / .Lh
'Member stiffness
MK(1, 1, i) = sms: MK(1, 3, i) = -sms
MK(3, 1, i) = -sms: MK(3, 3, i) = sms
'Member global stiffness

M(1, 1, i) = sms * .Cx * .Cx: M(1, 2, i) = sms * .Cx * .Cy: M(1, 3, i) = -M(1,
1, i): M(1, 4, i) = -M(1, 2, i)
M(2, 1, i) = M(1, 2, i): M(2, 2, i) = sms * .Cy * .Cy: M(2, 3, i) = M(1, 4, i):
M(2, 4, i) = -M(2, 2, i)
M(3, 1, i) = M(1, 3, i): M(3, 2, i) = M(2, 3, i): M(3, 3, i) = M(1, 1, i): M(3,
4, i) = M(1, 2, i)
M(4, 1, i) = M(1, 4, i): M(4, 2, i) = M(2, 4, i): M(4, 3, i) = M(3, 4, i): M(4,
4, i) = M(2, 2, i)
'Storing members and superposition
For j = 1 To 4
For n = 1 To 4
S(Idm(j, i), Idm(n, i)) = S(Idm(j, i), Idm(n, i)) + M(j, n, i)
Next n
Next j

End With
Next i
End Sub

'Global matrix
Sub MInvers(SR() As Double, SD() As Double)
Dim n As Integer

'submatrix Stiffness, KRF


For i = 1 To DOF
For j = 1 To 2 * NS
SR(j, i) = GS(Irj(j), Idj(i))
Next j
Next i

'submatrix Stiffness, KFF


For i = 1 To DOF
For j = 1 To DOF
SD(i, j) = GS(Idj(i), Idj(j))
Next j
Next i
'Inverse []
For i = 1 To DOF
For j = 1 To DOF
If j <> i Then SD(i, j) = SD(i, j) / SD(i, i)
Next j

For n = 1 To DOF

If n = i Then GoTo 10
For j = 1 To DOF

If j <> i Then SD(n, j) = SD(n, j) - SD(i, j) * SD(n, i)


Next j

10 Next n
For n = 1 To DOF
If n <> i Then SD(n, i) = -SD(n, i) / SD(i, i)
Next n
SD(i, i) = 1 / SD(i, i)
Next i
End Sub

Sub Genload(Pa() As Double, Ps() As Double)


ReDim TT(4, 4, NM) As Double
ReDim Peq(NP, NM) 'equivalent load due to selfweight
Dim Idx As Integer, W As Double

'member fixed-end forces due to selfweight


For i = 1 To NM
With Member(i)
W = .Dens * .Ax
Pa(Idm(1, i), i) = .Cy * W * .Lh / 2
Pa(Idm(2, i), i) = .Cx * W * .Lh / 2
Pa(Idm(3, i), i) = .Cy * W * .Lh / 2
Pa(Idm(4, i), i) = .Cx * W * .Lh / 2
End With
Next i

'Transformation matrix (transpose)


For i = 1 To NM
With Member(i)
TT(1, 1, i) = .Cx: TT(3, 3, i) = TT(1, 1, i): TT(1, 2, i) = -.Cy: TT(3, 4, i) =
TT(1, 2, i)
TT(2, 1, i) = .Cy: TT(4, 3, i) = TT(2, 1, i): TT(2, 2, i) = .Cx: TT(4, 4, i) =
TT(2, 2, i)
End With
Next i

'equivalent joint load due to selfweight in global system


For i = 1 To NM
For j = 1 To 4
For n = 1 To 4
Peq(Idm(j, i), i) = Peq(Idm(j, i), i) + TT(j, n, i) * -Pa(Idm(n, i), i)
Next n
Next j
Next i
'sum load = joint load + eq.load
For i = 1 To NP
Ps(i) = Pj(i)
Next i
'load superposition
For i = 1 To NM
For j = 1 To 4
Ps(Idm(j, i)) = Ps(Idm(j, i)) + Peq(Idm(j, i), i)
Next j
Next i
End Sub

Sub DISP(x() As Double, X2() As Double)


ReDim X2(4, NM) As Double
ReDim Xi(4, NM) As Double
ReDim T(4, 4, NM) As Double
'Joint Displacement {X} = [SD]^-1.{P}
For i = 1 To DOF
x(Idj(i)) = 0
For j = 1 To DOF
x(Idj(i)) = x(Idj(i)) + DFR(i, j) * Psum(Idj(j))
Next j
Next i
'Numbering of global {X}(NP) to global {Xi} elemen
For i = 1 To NM
For j = 1 To 4
Xi(j, i) = x(Idm(j, i))
Next j
Next i
'Transforming {Xi} to local coordinates
'Transformation matrix:
For i = 1 To NM
With Member(i)
T(1, 1, i) = .Cx: T(3, 3, i) = T(1, 1, i): T(1, 2, i) = .Cy: T(3, 4, i) = T(1, 2,
i)
T(2, 1, i) = -.Cy: T(4, 3, i) = T(2, 1, i): T(2, 2, i) = .Cx: T(4, 4, i) = T(2, 2,
i)
End With
Next i
'member deformation, tranformed{X} = [T].{Xi}
For i = 1 To NM
For j = 1 To 4
X2(j, i) = 0
For n = 1 To 4
X2(j, i) = X2(j, i) + T(j, n, i) * Xi(n, i)
Next n
Next j
Next i
End Sub

You might also like