Subido por Edgar A. Cedeño J.

Sub reordenar

Anuncio
Sub reordenar(DOF As Integer, fil As Integer, K11() As Double, R() As Integer, KG() As Double, Q()
As Double, d() As Double)
‘DOF son los grados de libertad de la estructura
´fil es el número de filas de la matriz aumentada, que es igual al número de desplazamientos
desconocidos
‘K11 es la matriz aumentada que se crea en este sub proceso
‘R() es el vector con los valores 1 ó 0, con las la información de los nodos con apoyos
‘KG() es la matriz global de la estructura
‘Q() es el vector con las cargas aplicadas en los nudos
‘d() es el vector con los desplazamientos conocidos y desconocidos, según su dirección
‘Todos los parámetros antes definidos deben dimensionarse en el subproceso que los llama
Dim K12() As Double, FM() As Double
Dim dm() As Double, kq() As Double
'********************************************************************************
' PROCESO QUE EXTRAE DE LA MATRIZ GLOBAL LA MATRIZ K11 DE DESPLAZAMIENTOS
DESCONOCIDOS QUE SE RESOLVERÁ COMO ECUACIONES SIMULTÁNEAS
'********************************************************************************
‘Las matrices redimensionadas a continuación se usan solamente en este subproceso
ReDim FM(DOF)
'vector de fuerzas modificado
ReDim K12(DOF, DOF)
'parte de la matriz K global que se incorpora a K11
ReDim dm(DOF)
ReDim kq(DOF)
Dim acum As Double
fil = 0
For i = 1 To DOF
If R(i) = 0 Then 'busca la fila donde el desplazamiento es desconocido usando el código 1 para
conocidos y 0 para desconocidos. El vector R() guarda las posiciones 1 o 0 para desplazamientos
conocidos y desconocidos
fil = fil + 1
'fil es el número de filas que corresponden a la cantidad de DOF's
desconocidos
FM(fil) = Q(i) 'Vector que asigna a FM las fuerzas aplicadas a los nodos con Du
col = 0
'col es el número de columnas que corresponden a la cantidad de DOF's
col2 = 0
For j = 1 To DOF
If R(j) = 0 Then
col = col + 1
K11(fil, col) = KG(i, j) 'formación de la matriz del cuadrante k11 de la K global
End If
If R(j) = 1 Then
col2 = col2 + 1
K12(fil, col2) = KG(i, j) 'formación de la matriz del cuadrante k12 de la K global
dm(col2) = d(j)
End If
Next
End If
Next
For i = 1 To fil
acum = 0
For j = 1 To col2
acum = acum + K12(i, j) * dm(j) 'producto [K12]*{Dk} para sumar a las cargas
Next
kq(i) = FM(i) - acum
'{Qk}-[K12]{Dk}+{(Qk)o} Suma al vector temporal kg() las cargas
aplicadas
Next
'********************************************************************************
'
proceso para crear matriz aumentada para enviar a solución por gauss
'********************************************************************************
For i = 1 To fil
'fil es el número de filas que corresponden a la cantidad de DOF's desconocidos
al igual que col
K11(i, col + 1) = kq(i) 'se agrega a K11 una columna con los valores del vector temporal kg()
Next
End Sub
Descargar