Circuito de resistencias Curso de Geomecánica Computacional Dr. Alejo O. Sfriso
Módulos Matriz de rigidez elemental La matriz de rigidez elemental es In[34]:=
Clear RigidezElemento RigidezElemento [ R_ ] :=
1 R
*
1 -1 -1 1
Ensamblador de matriz de rigidez global Esta rutina forma la matriz de rigidez global a partir de la matriz de rigidez elemental y la matriz de conectividad In[36]:=
Clear [ Ensamblador ] Ensamblador Conectividad_ , nodos_ , elementos_ , R_ :=Module i , j , k , ini , fin , Res , RigidezGlobal , RigidezGlobal = Table 0 , j , nodos , { k , nodos } ; i = 1 ; While i ≤ elementos , ini = Conectividad i , 1 ; fin = Conectividad i , 2 ; Res = R i ; RigidezGlobal ini , ini = RigidezElemento [ Res ] [ [ 1 , 1 ] ] + RigidezGlobal RigidezGlobal ini , fin = RigidezElemento [ Res ] [ [ 1 , 2 ] ] + RigidezGlobal RigidezGlobal fin , ini = RigidezElemento [ Res ] [ [ 2 , 1 ] ] + RigidezGlobal RigidezGlobal fin , fin = RigidezElemento [ Res ] [ [ 2 , 2 ] ] + RigidezGlobal i = i + 1 ; ; Return RigidezGlobal
Condensación de la matriz de rigidez global y del vector de cargas La condensación de la matriz de rigidez implica la eliminación de filas y columnas, mediante la utilización de las condiciones de contorno. La información almacenada en estas filas y columnas pasa al término de carga, que también es condensado.
2
2 Ejercicio resistencias.nb
In[38]:=
Clear [ Condensador ] Condensador CondicionContorno_ , ValorContorno_ , RigidezGlobal_ , nodos_ := Module i , j , iRC , jRC , RigidezCondensada , Cargas , gdl , gdl = nodos - Sum CondicionContorno i , i , nodos ; RigidezCondensada = Table 0 , i , gdl , j , gdl ; Cargas = Table 0 , i , gdl ; i = 1 ; iRC = 1 ; While i≤ nodos , j = 1 ; jRC = 1 ; If CondicionContorno i ⩵ 0 , Cargas iRC = ValorContorno i + Cargas iRC ; While j ≤ nodos , If CondicionContorno j ⩵ 0 , RigidezCondensada iRC , jRC = RigidezGlobal i , j j = j + 1 ; jRC = jRC + 1 ; , Cargas iRC = Cargas iRC - RigidezGlobal i , j j = j + 1 ; ; i = i + 1 ; iRC = iRC + 1 ; , i = i + 1 ; ; Return RigidezCondensada , Cargas
Expansión del vector de tensiones El vector de tensiones debe ser expandido, para que cada posición corresponda a la numeración global de nodos
2 Ejercicio resistencias.nb
In[40]:=
3
Clear Expansion Expansion nodos_ , CondicionContorno_ , ValorContorno_ , TensionCondensada_ := Module TensionExpandida , i , iT , TensionExpandida = Table 0 , i , nodos ; i = 1 ; iT = 1 ; While i ≤ nodos , If CondicionContorno i ⩵ 0 , TensionExpandida i = TensionCondensada iT ; iT = iT + 1 ; i = i + 1 ; , TensionExpandida i = ValorContorno i ; i = i + 1 ; ; Return TensionExpandida
Ejercicio del ejemplo Datos de entrada La geometría del problema está definida por: - la cantidad de nodos y elementos - las características de cada uno de los elementos - la conexión entre ellos - las condiciones de contorno, tanto esenciales (CCE) como naturales (CCN) Estas variables son los datos de entrada del sistema. Para el problema que se plantea como ejemplo, In[42]:=
Clear [ nodos , elementos ] nodos = 6 ; elementos = 8 ;
La resistencia de cada uno de los elementos se almacena en el vector de resistencias elementales. Para el problema del ejemplo es In[45]:=
Clear [ R , R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 ] R = { R1 , R2 , R3 , R4 , R5 , R6 , R7 , R8 } ;
La conectividad entre los diferentes elementos se establece en la matriz de conectividad, que contiene en la fila iésima, columna 1, el nodo de partida del elemento iésimo. En la columna 2 está el correspondiente nodo de llegada.
4
2 Ejercicio resistencias.nb
In[47]:=
Clear Conectividad
Conectividad =
1 2 3 4 5 3 2 1
2 3 4 5 6 5 5 6
;
Finalmente, las condiciones de contorno se almacenan en un vector que tiene un 1 si existe una CCE y un 0 si existe una CCN. El valor numérico de la condición de contorno se almacena en otro vector. Los valores numéricos nulos de las CCN no necesitan ser definidos, puesto que 0 es el valor de inicialización de la variable. In[49]:=
Clear CondicionContorno , ValorContorno ValorContorno = CondicionContorno = Table 0 , i , nodos ; CondicionContorno [ [ 6 ] ] = 1 ; ValorContorno [ [ 2 ] ] = 0.1 ; ValorContorno [ [ 6 ] ] = 12 ;
Matriz de rigidez global In[54]:=
RigidezGlobal = Ensamblador Conectividad , nodos , elementos , R ; RigidezGlobal // MatrixForm
Out[55]//MatrixForm=
1 R1
+
1 R8
1 - R1
1 - R1 1 R1
0
1 1 + R7 R2 1 - R2
+
0
0
0
-
1 - R8
1 R7
0
1 R2
0
0
0
1 - R8
1 - R2
0
1 - R7
0
1 R6 1 R4
0
1 1 + R3 + R6 1 - R3 1 - R6
1 R3
-
0
1 R3
+
-
1 R4
1 R4
1 R4
+
1 R5
+
1 R6
0 +
1 R7
1 - R5
0
1 - R5 1 R5
+
1 R8
Condensación de matriz de rigidez In[56]:=
RigidezCondensada , Cargas = Condensador CondicionContorno , ValorContorno , RigidezGlobal RigidezCondensada // MatrixForm
Out[57]//MatrixForm=
1 R1
-
+
1 R8
1 R1
0
1 - R1 1 R1
1 1 + R2 + R7 1 - R2
0
0
0
1 - R7
0
0
0
1 - R2 1 1 1 + R3 + R6 R2 1 - R3 1 - R6
0
1 - R7
1 - R3
1 - R6
1 R3
+
1 R4
1 - R4
1 - R4 1 R4
+
1 R5
+
1 R6
+
1 R7
2 Ejercicio resistencias.nb
In[58]:=
5
R1 = 10. ; R2 = 3. ; R3 = 2. ; R4 = 7. ; R5 = 12. ; R6 = 5. ; R7 = 4. ; R8 = 9. ; RigidezCondensada // MatrixForm , Cargas // MatrixForm
Out[59]=
0.211111 - 0.1 0 0 0 - 0.1 0.683333 - 0.333333 0 - 0.25 , 0 - 0.333333 1.03333 - 0.5 - 0.2 0 0 - 0.5 0.642857 - 0.142857 0 - 0.25 - 0.2 - 0.142857 0.67619
1.33333 0.1 0 0 1.
Solución del sistema de ecuaciones La solución del sistema lineal de ecuaciones no es parte del ejercicio, por lo que Mathematica se encarga. In[60]:=
Clear RigidezInvertida , TensionCondensada RigidezInvertida := Inverse RigidezCondensada ; TensionCondensada := RigidezInvertida . Cargas ;
Con este procedimiento, se obtienen las tensiones e intensidades en todos los nodos y elementos de la malla In[63]:=
ClearTension , Intensidad Tension = Expansion nodos , CondicionContorno , ValorContorno , TensionCondensada ; Intensidad = RigidezGlobal . Tension ; Print MatrixForm Tension , MatrixForm Intensidad 12.3885 12.8202 12.7535 , 12.7376 12.6819 12
0. 0.1 4.44089 × 10-16 - 1.9984 × 10-15 8.88178 × 10-16 - 0.1