Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 12

Sub MetododeRigidez()

'Dimensionamiento

Dim Nudos, Elem, Apoyo, Fuerza As Integer

Dim CoordX(), CoordY() As Double

Dim Dist(), Area(), E() As Double

Dim N(), F() As Integer

Dim Nx, Ny, Fx, Fy As Double

Dim cosX(), cosY() As Double

Dim QR(), QF(), Q(), K(), D() As Double

Dim Qt(), Kt(), Dt() As Double

Dim P() As Double

Dim x As Integer

Dim Ddesc1 As Integer

Dim Dcon(), Reacc(), Felem() As Double

Dim KReacc() As Double

Dim vcos(), Dnf() As Double

'Captacin de Datos

Nudos = Sheets("IngresarDatos").Cells(1, 1).Value

Elem = Sheets("IngresarDatos").Cells(1, 5).Value

Apoyo = Sheets("IngresarDatos").Cells(1, 11).Value

Fuerza = Sheets("IngresarDatos").Cells(1, 15).Value

'Redimensionamiento

ReDim CoordX(Nudos), CoordY(Nudos)

ReDim N(Elem), F(Elem)

ReDim L(Elem), Area(Elem), E(Elem)

ReDim cosX(Elem), cosY(Elem)


ReDim K(2 * Nudos, 2 * Nudos)

ReDim QR(2 * Nudos), QF(2 * Nudos), Q(2 * Nudos), D(2 * Nudos)

ReDim Qt(2 * Nudos), Dt(2 * Nudos)

ReDim Kt1(2 * Nudos, 2 * Nudos), Kt2(2 * Nudos, 2 * Nudos)

ReDim P(2 * Nudos)

ReDim Dcon(2 * Nudos), Felem(Elem)

'Lectura de las Coordenadas

For i = 1 To Nudos

For j = 1 To Nudos

If Sheets("IngresarDatos").Cells(j + 3, 1).Value = i Then

CoordX(i) = Sheets("IngresarDatos").Cells(j + 3, 2).Value

CoordY(i) = Sheets("IngresarDatos").Cells(j + 3, 3).Value

End If

Next

Next

'Clculo de Distancias y Cosenos Directores, Lectura de reas y Mdulos de Elasticidad

For i = 1 To Elem

For j = 1 To Elem

If Sheets("IngresarDatos").Cells(j + 3, 5).Value = i Then

N(i) = Sheets("IngresarDatos").Cells(j + 3, 6).Value

F(i) = Sheets("IngresarDatos").Cells(j + 3, 7).Value

Nx = CoordX(N(i))

Ny = CoordY(N(i))

Fx = CoordX(F(i))

Fy = CoordY(F(i))

Area(i) = Sheets("IngresarDatos").Cells(j + 3, 8).Value

E(i) = Sheets("IngresarDatos").Cells(j + 3, 9).Value


L(i) = ((Fx - Nx) ^ 2 + (Fy - Ny) ^ 2) ^ (1 / 2)

cosX(i) = (Fx - Nx) / L(i)

cosY(i) = (Fy - Ny) / L(i)

End If

Next

Next

'Lectura de las Fuerzas Externas

For i = 1 To Fuerza

For j = 1 To Nudos

If Sheets("IngresarDatos").Cells(i + 3, 15).Value = j Then

QF((2 * j) - 1) = Sheets("IngresarDatos").Cells(i + 3, 16).Value

QF(2 * j) = Sheets("IngresarDatos").Cells(i + 3, 17).Value

End If

Next

Next

'Asignando todos los desplazamientos como desconocidos

For i = 1 To 2 * Nudos

Dt(i) = 1

Next

'Lectura de Restricciones y Dezplazamientos conocidos

For i = 1 To Apoyo

For j = 1 To Nudos

If Sheets("IngresarDatos").Cells(i + 3, 11).Value = j Then

If Sheets("IngresarDatos").Cells(i + 3, 12).Value = 0 Then

QR((2 * j) - 1) = 0

End If
If Sheets("IngresarDatos").Cells(i + 3, 13).Value = 0 Then

QR(2 * j) = 0

End If

If Sheets("IngresarDatos").Cells(i + 3, 12).Value = 1 Then

QR((2 * j) - 1) = 1

Dt((2 * j) - 1) = 0

End If

If Sheets("IngresarDatos").Cells(i + 3, 13).Value = 1 Then

QR(2 * j) = 1

Dt(2 * j) = 0

End If

End If

Next

Next

'Reemplazo de desplazamientos conocidos al vector de respuestas

For i = 1 To 2 * Nudos

Dcon(i) = Dt(i)

Next

'Suma para Vector Q temporal

For i = 1 To 2 * Nudos

Qt(i) = QR(i) + QF(i)

Next

'Confeccin de Matriz K temporal 1

For i = 1 To Elem

Kt1(2 * N(i) - 1, 2 * N(i) - 1) = (Area(i) * E(i) * (cosX(i) ^ 2) / L(i)) + Kt1(2 * N(i) - 1, 2 * N(i) - 1)

Kt1(2 * F(i) - 1, 2 * F(i) - 1) = (Area(i) * E(i) * (cosX(i) ^ 2) / L(i)) + Kt1(2 * F(i) - 1, 2 * F(i) - 1)
Kt1(2 * N(i) - 1, 2 * F(i) - 1) = (Area(i) * E(i) * (-(cosX(i) ^ 2)) / L(i)) + Kt1(2 * N(i) - 1, 2 * F(i) - 1)

Kt1(2 * F(i) - 1, 2 * N(i) - 1) = (Area(i) * E(i) * (-(cosX(i) ^ 2)) / L(i)) + Kt1(2 * F(i) - 1, 2 * N(i) - 1)

Kt1(2 * N(i), 2 * N(i)) = (Area(i) * E(i) * (cosY(i) ^ 2) / L(i)) + Kt1(2 * N(i), 2 * N(i))

Kt1(2 * F(i), 2 * F(i)) = (Area(i) * E(i) * (cosY(i) ^ 2) / L(i)) + Kt1(2 * F(i), 2 * F(i))

Kt1(2 * N(i), 2 * F(i)) = (Area(i) * E(i) * (-(cosY(i) ^ 2)) / L(i)) + Kt1(2 * N(i), 2 * F(i))

Kt1(2 * F(i), 2 * N(i)) = (Area(i) * E(i) * (-(cosY(i) ^ 2)) / L(i)) + Kt1(2 * F(i), 2 * N(i))

Kt1(2 * N(i) - 1, 2 * N(i)) = (Area(i) * E(i) * (cosX(i) * cosY(i)) / L(i)) + Kt1(2 * N(i) - 1, 2 * N(i))

Kt1(2 * N(i), 2 * N(i) - 1) = (Area(i) * E(i) * (cosX(i) * cosY(i)) / L(i)) + Kt1(2 * N(i), 2 * N(i) - 1)

Kt1(2 * F(i) - 1, 2 * F(i)) = (Area(i) * E(i) * (cosX(i) * cosY(i)) / L(i)) + Kt1(2 * F(i) - 1, 2 * F(i))

Kt1(2 * F(i), 2 * F(i) - 1) = (Area(i) * E(i) * (cosX(i) * cosY(i)) / L(i)) + Kt1(2 * F(i), 2 * F(i) - 1)

Kt1(2 * N(i) - 1, 2 * F(i)) = (Area(i) * E(i) * (-(cosX(i) * cosY(i))) / L(i)) + Kt1(2 * N(i) - 1, 2 * F(i))

Kt1(2 * N(i), 2 * F(i) - 1) = (Area(i) * E(i) * (-(cosX(i) * cosY(i))) / L(i)) + Kt1(2 * N(i), 2 * F(i) - 1)

Kt1(2 * F(i) - 1, 2 * N(i)) = (Area(i) * E(i) * (-(cosX(i) * cosY(i))) / L(i)) + Kt1(2 * F(i) - 1, 2 * N(i))

Kt1(2 * F(i), 2 * N(i) - 1) = (Area(i) * E(i) * (-(cosX(i) * cosY(i))) / L(i)) + Kt1(2 * F(i), 2 * N(i) - 1)

Next

'Colocar filas y columnas de desplazamientos desconocidos en las primeras posiciones

x=1

'Posicionamiento

For i = 1 To 2 * Nudos

If Dt(i) = 1 Then

P(x) = i

x=x+1

End If

Next

Ddesc = x - 1

For i = 1 To 2 * Nudos
If Dt(i) = 0 Then

P(x) = i

x=x+1

End If

Next

'Asignacin de los Vectores D y Q

For i = 1 To 2 * Nudos

D(i) = Dt(P(i))

Q(i) = Qt(P(i))

Next

'Cambio de Filas de la Matriz K temporal 1

For i = 1 To 2 * Nudos

For j = 1 To 2 * Nudos

Kt2(i, j) = Kt1(P(i), j)

Next

Next

'Cambio de Columnas de la Matriz K temporal 2

For i = 1 To 2 * Nudos

For j = 1 To 2 * Nudos

K(i, j) = Kt2(j, P(i))

Next

Next

'Determinacin de los Desplazamientos

'Extraccin de las matrices y vectores para clculo de desplazamientos

Dim KQgauss(), Dcon1() As Double

ReDim KQgauss(Ddesc, Ddesc + 1), Dcon1(Ddesc)

For i = 1 To Ddesc
For j = 1 To Ddesc

KQgauss(i, j) = K(i, j)

Next

Next

For i = 1 To Ddesc

KQgauss(i, Ddesc + 1) = Q(i)

Next

'Ciclo para cambiar de columna iniciando desde Col k y Fila k +1

For t = 1 To Ddesc - 1

jk = 0

Max = Abs(KQgauss(t, t))

'Ubicacin del mximo valor en la columna

For m = t + 1 To Ddesc

If Abs(KQgauss(m, t)) > Max Then

Max = Abs(KQgauss(m, t))

jk = 1

u=m

End If

Next

'Ciclo para intercambiar conla fila del mayor

If jk = 1 Then

For m = t To Ddesc + 1

TEMP = KQgauss(t, m)

KQgauss(t, m) = KQgauss(u, m)

KQgauss(u, m) = TEMP

Next

End If
If KQgauss(t, t) = 0 Then

MsgBox ("Sin Solicin")

End

Else

For i = t + 1 To Ddesc

DIV = KQgauss(i, t) / KQgauss(t, t)

KQgauss(i, t) = 0

For j = t + 1 To Ddesc + 1

KQgauss(i, j) = KQgauss(i, j) - DIV * KQgauss(t, j)

Next

Next

End If

Next

Z = KQgauss(Ddesc, Ddesc)

w = KQgauss(Ddesc, Ddesc + 1)

p1 = (Z = 0) And (w <> 0)

p2 = (Z = 0) And (w = 0)

If p1 Then

MsgBox ("Sin Solucin")

End

Else

If p2 Then

MsgBox ("Infinitas Soluciones")

End

Else

Dcon1(Ddesc) = KQgauss(Ddesc, Ddesc + 1) / KQgauss(Ddesc, Ddesc)


For i = Ddesc - 1 To 1 Step -1

s=0

For j = i + 1 To Ddesc

s = s + KQgauss(i, j) * Dcon1(j)

Next

Dcon1(i) = (KQgauss(i, Ddesc + 1) - s) / KQgauss(i, i)

Next

End If

End If

'Vector de Desplazamientos

x=1

For i = 1 To 2 * Nudos

If Dcon(i) = 1 Then

Dcon(i) = Dcon1(x)

x=x+1

End If

Next

'Impresin de Desplazamientos

For i = 1 To Nudos

Sheets("Resultados").Cells(i + 3, 1).Value = i

Next

x=1

For i = 1 To 2 * Nudos

If i Mod 2 = 0 Then

Sheets("Resultados").Cells(x + 3, 3).Value = Dcon(i)

x=x+1
Else

Sheets("Resultados").Cells(x + 3, 2).Value = Dcon(i)

End If

Next

'Matriz K para Reacciones

ReDim KReacc((2 * Nudos) - Ddesc, Ddesc), Reacc((2 * Nudos) - Ddesc)

x=1

For i = Ddesc + 1 To 2 * Nudos

For j = 1 To Ddesc

KReacc(x, j) = K(i, j)

Next

x=x+1

Next

'Determinacin de las Reacciones

For i = 1 To (2 * Nudos) - Ddesc

For j = 1 To Ddesc

Reacc(i) = (KReacc(i, j) * Dcon1(j)) + Reacc(i)

Next

Next

'Impresin de las Reacciones

x=1

For i = 1 To Nudos

For j = 1 To Apoyo

If Sheets("IngresarDatos").Cells(j + 3, 11).Value = i Then

Sheets("Resultados").Cells(x + 3, 6).Value = i
x=x+1

End If

Next

Next

x=1

For i = 1 To Nudos

For j = 1 To Apoyo

If Sheets("IngresarDatos").Cells(j + 3, 11).Value = i Then

If Sheets("IngresarDatos").Cells(j + 3, 12).Value = 1 Then

Sheets("Resultados").Cells(x + 3, 7).Value = Reacc((2 * x) - 1)

End If

If Sheets("IngresarDatos").Cells(j + 3, 13).Value = 1 Then

Sheets("Resultados").Cells(x + 3, 8).Value = Reacc(2 * x)

End If

x=x+1

End If

Next

Next

'Determinacin de las Fuerzas de los Elementos e Impresin

ReDim vcos(1, 4), Dnf(4)

For i = 1 To Elem

Sheets("Resultados").Cells(i + 3, 4).Value = i

vcos(1, 1) = -cosX(i)

vcos(1, 2) = -cosY(i)

vcos(1, 3) = cosX(i)

vcos(1, 4) = cosY(i)

Dnf(1) = Dcon((2 * N(i)) - 1)


Dnf(2) = Dcon(2 * N(i))

Dnf(3) = Dcon((2 * F(i)) - 1)

Dnf(4) = Dcon(2 * F(i))

Felem(i) = (Area(i) * E(i) / L(i)) * ((vcos(1, 1) * Dnf(1)) + (vcos(1, 2) * Dnf(2)) + (vcos(1, 3) * Dnf(3))
+ (vcos(1, 4) * Dnf(4)))

Sheets("Resultados").Cells(i + 3, 5).Value = Felem(i)

Next

End Sub

You might also like