{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Contenido bajo licencia Creative Commons BY-NC-ND. El contenido de este Notebook es creado por Ana Beatriz Acevedo Jaramillo y Daniela González González 2020. Este material es parte del curso Análisis de Estructuras del programa de Ingeniería Civil de la Universidad EAFIT." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"GeeksforGeeks" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# *Análisis matricial de pórticos planos*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Este Notebook fue desarrollado como parte del material de apoyo para realizar el análisis de pórticos planos. Debe tener en cuenta que los datos de entrada que aparecen por defecto corresponden al ejercicio explicado en el documento que acompaña a este Notebook.

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## DATOS DE ENTRADA" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Esta sección contiene los datos que debe ingresar el usuario para que el Notebook realice en ánalisis de la estructura.

" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Información general de la estructura: " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "Nn=4 #Número de nodos \n", "Ne=3 #Número de elementos \n", "NGLL=6 #Número de grados de libertad libres" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Con la información anterior se cálcula lo siguiente:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "NGL=3*Nn #Cálculo del número de grados de libertad\n", "NGLR=NGL-NGLL #Cálculo del número de grados de libertad restringidos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Grados de libertad asociados a cada elemento:\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align}\n", "MGL = \\\\\n", "\\end{align} \n", "\\begin{bmatrix}\n", "gxi_{0} &gyi_{0} &gzi_{0} &gxf_{0} &gyf_{0} &gzf_{0}\\\\\n", "gxi_{1} &gyi_{1} &gzi_{1} &gxf_{1} &gyf_{1} &gzf_{1}\\\\\n", "gxi_{2} &gyi_{2} &gzi_{2} &gxf_{2} &gyf_{2} &gzf_{2}\\\\\n", ". &. &. &. &. &.\\\\\n", "gxi_{n} &gyi_{n} &gzi_{n} &gxf_{n} &gyf_{n} &gzf_{n}\\end{bmatrix}\\, .$$\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "MGL=[[6,7,8,0,1,2],[0,1,2,3,4,5],[3,4,5,9,10,11]] #Matriz con información de los grados de libertad asociados a cada elemento" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Propiedades de los elementos: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "|MA|ME|MI|\n", "|:-:|:-:|:-:|\n", "|$$\n", "\\begin{align}\n", "\\\\\n", "\\end{align} \n", "\\begin{bmatrix}\n", "A_{0}\\\\A_{1}\\\\A_{2}\\\\.\\\\A_{n}\\end{bmatrix}\\, $$|$$\n", "\\begin{align}\n", "\\\\\n", "\\end{align} \n", "\\begin{bmatrix}\n", "E_{0}\\\\E_{1}\\\\E_{2}\\\\.\\\\E_{n}\\end{bmatrix}\\, $$|$$\n", "\\begin{align}\n", "\\\\\n", "\\end{align} \n", "\\begin{bmatrix}\n", "I_{0}\\\\I_{1}\\\\I_{2}\\\\.\\\\I_{n}\\end{bmatrix}\\, $$\n", " \n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "MA=[[0.12],[0.12],[0.12]] #Matriz con las áreas de la sección transversal de cada elemento (en m2).\n", "ME=[[20000000],[20000000],[20000000]] #Matriz con el módulo de elasticidad de cada elemento (en kPa).\n", "MI=[[0.0016],[0.0016],[0.0016]] #Matriz con las inercias de la sección transversal de cada elemento (en m4)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Coordenadas de los nodos iniciales y finales de los elementos:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\begin{align}\n", "MC = \\\\\n", "\\end{align} \n", "\\begin{bmatrix}\n", "xi_{0} &yi_{0} &xf_{0} &yf_{0}\\\\\n", "xi_{1} &yi_{1} &xf_{1} &yf_{1}\\\\\n", "xi_{2} &yi_{2} &xf_{2} &yf_{2}\\\\\n", ". &. &. &.\\\\\n", "xi_{n} &yi_{n} &xf_{n} &yf_{n}\\end{bmatrix}\\, .$$\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "MC=[[0,0,0,3],[0,3,4,3],[4,3,4,0]] #Matriz que almacena las coordenadas de los nodos iniciales y finales de cada elemento (en m)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cargas aplicadas en los nodos: " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "N0=[[20],[0],[0],[0],[0],[-15]] #Matriz de fuerzas aplicadas en los grados de libertad libres (en kN,m)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Reacciones de empotramiento (coordenadas locales):" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "MLL=np.zeros((Ne,6,1)) #Matriz de almacenamiento de reacciones de empotramiento en coordenadas locales (en kN,m).\n", "MLL[0]=[[0],[6],[4.5],[0],[6],[-4.5]]\n", "MLL[1]=[[0],[50],[33.33],[0],[50],[-33.33]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Desplazamientos en los grados de libertad restringidos:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "U1=[[0],[0],[0],[0],[0],[0]] #Matriz de desplazamientos en los grados de libertad restringidos (en m)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## CÁLCULO DE REACCIONES Y DESPLAZAMIENTOS DEL PÓRTICO:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

En esta sección se procesan los datos ingresados para calcular las reacciones (fuerzas en los grados de libertad restringidos) y los desplazamientos de los grados de libertad libres.

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo de longitudes de los elementos:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "ML=np.zeros((Ne,1)) #Matriz de almacenamiento de longitudes\n", "for i in range(Ne):\n", " ML[i,0]=np.sqrt((MC[i][2]-MC[i][0])**2+(MC[i][3]-MC[i][1])**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo y almacenamiento de la matriz de rigidez local de los elementos:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "MAL=np.zeros((Ne,6,6)) #Matriz de almacenamiento de matrices de rigidez en coordenadas locales\n", "for i in range(Ne):\n", " MAL[i,0,0]=(MA[i][0]*ME[i][0])/(ML[i][0])\n", " MAL[i,0,3]=-MAL[i,0,0]\n", " MAL[i,3,0]=-MAL[i,0,0]\n", " MAL[i,3,3]=MAL[i,0,0]\n", " MAL[i,1,1]=(12*ME[i][0]*MI[i][0])/(ML[i][0]**3)\n", " MAL[i,1,4]=-MAL[i,1,1]\n", " MAL[i,4,1]=-MAL[i,1,1]\n", " MAL[i,4,4]=MAL[i,1,1]\n", " MAL[i,1,2]=(6*ME[i][0]*MI[i][0])/(ML[i][0]**2)\n", " MAL[i,1,5]=MAL[i,1,2]\n", " MAL[i,2,1]=MAL[i,1,2]\n", " MAL[i,2,4]=-MAL[i,1,2]\n", " MAL[i,4,2]=-MAL[i,1,2]\n", " MAL[i,4,5]=-MAL[i,1,2]\n", " MAL[i,5,1]=MAL[i,1,2]\n", " MAL[i,5,4]=-MAL[i,1,2]\n", " MAL[i,2,2]=(4*ME[i][0]*MI[i][0])/(ML[i][0])\n", " MAL[i,5,5]=MAL[i,2,2]\n", " MAL[i,2,5]=(2*ME[i][0]*MI[i][0])/(ML[i][0])\n", " MAL[i,5,2]=MAL[i,2,5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "*Visualización de la matriz de rigidez local de un elemento del pórtico:*\n", "\n", "Indique el número del elemento (n) para el cual desea ver la matriz de rigidez local.\n", "\n", "
\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "n=0" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345
0800000.00.0000000.000000-800000.00.0000000.000000
10.014222.22222221333.3333330.0-14222.22222221333.333333
20.021333.33333342666.6666670.0-21333.33333321333.333333
3-800000.00.0000000.000000800000.00.0000000.000000
40.0-14222.222222-21333.3333330.014222.222222-21333.333333
50.021333.33333321333.3333330.0-21333.33333342666.666667
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5\n", "0 800000.0 0.000000 0.000000 -800000.0 0.000000 0.000000\n", "1 0.0 14222.222222 21333.333333 0.0 -14222.222222 21333.333333\n", "2 0.0 21333.333333 42666.666667 0.0 -21333.333333 21333.333333\n", "3 -800000.0 0.000000 0.000000 800000.0 0.000000 0.000000\n", "4 0.0 -14222.222222 -21333.333333 0.0 14222.222222 -21333.333333\n", "5 0.0 21333.333333 21333.333333 0.0 -21333.333333 42666.666667" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df=pd.DataFrame(MAL[n])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo de la matriz de transformación:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "MAT=np.zeros((Ne,6,6)) #Matriz de almacenamiento de las matrices de transformación\n", "for i in range(Ne):\n", " MAT[i,0,0]=(MC[i][2]-MC[i][0])/(ML[i][0])\n", " MAT[i,1,1]=MAT[i,0,0]\n", " MAT[i,3,3]=MAT[i,0,0]\n", " MAT[i,4,4]=MAT[i,0,0]\n", " MAT[i,1,0]=(MC[i][3]-MC[i][1])/(ML[i][0])\n", " MAT[i,4,3]=MAT[i,1,0]\n", " MAT[i,0,1]=-MAT[i,1,0]\n", " MAT[i,3,4]=-MAT[i,1,0]\n", " MAT[i,2,2]=1\n", " MAT[i,5,5]=1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "*Visualización de la matriz de transformación de un elemento del pórtico:*\n", "\n", "Indique el número del elemento (n) para el cual desea ver la matriz de transformación.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "n=0" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345
00.0-1.00.00.00.00.0
11.00.00.00.00.00.0
20.00.01.00.00.00.0
30.00.00.00.0-1.00.0
40.00.00.01.00.00.0
50.00.00.00.00.01.0
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5\n", "0 0.0 -1.0 0.0 0.0 0.0 0.0\n", "1 1.0 0.0 0.0 0.0 0.0 0.0\n", "2 0.0 0.0 1.0 0.0 0.0 0.0\n", "3 0.0 0.0 0.0 0.0 -1.0 0.0\n", "4 0.0 0.0 0.0 1.0 0.0 0.0\n", "5 0.0 0.0 0.0 0.0 0.0 1.0" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df=pd.DataFrame(MAT[n])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo de la matriz de rigidez de cada elemento en coordenadas globales:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "MAG=np.zeros((Ne,6,6)) #Matriz de almacenamiento de las matrices de rigidez en coordenadas globales\n", "for i in range(Ne):\n", " MAG[i]=np.dot(np.dot(MAT[i],MAL[i]),np.transpose(MAT[i])) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "*Visualización de la matriz de rigidez global de un elemento del pórtico*\n", "\n", "Indique el número del elemento (n) para el cual desea ver la matriz de rigidez global.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "n=0" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345
014222.2222220.0-21333.333333-14222.2222220.0-21333.333333
10.000000800000.00.0000000.000000-800000.00.000000
2-21333.3333330.042666.66666721333.3333330.021333.333333
3-14222.2222220.021333.33333314222.2222220.021333.333333
40.000000-800000.00.0000000.000000800000.00.000000
5-21333.3333330.021333.33333321333.3333330.042666.666667
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5\n", "0 14222.222222 0.0 -21333.333333 -14222.222222 0.0 -21333.333333\n", "1 0.000000 800000.0 0.000000 0.000000 -800000.0 0.000000\n", "2 -21333.333333 0.0 42666.666667 21333.333333 0.0 21333.333333\n", "3 -14222.222222 0.0 21333.333333 14222.222222 0.0 21333.333333\n", "4 0.000000 -800000.0 0.000000 0.000000 800000.0 0.000000\n", "5 -21333.333333 0.0 21333.333333 21333.333333 0.0 42666.666667" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df=pd.DataFrame(MAG[n])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo de la matriz de rigidez de la estructura:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [], "source": [ "KG=np.zeros((NGL,NGL)) #Matriz de rigidez global de la estructura\n", "for i in range(Ne):\n", " for j in range(6):\n", " for k in range(6):\n", " KG[int(MGL[i][k]),int(MGL[i][j])]=KG[int(MGL[i][k])][int(MGL[i][j])]+MAG[i][j][k]" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
01234567891011
0614222.2222220.021333.333333-600000.0000000.00.000000-14222.2222220.021333.3333330.0000000.00.000000
10.000000806000.012000.0000000.000000-6000.012000.0000000.000000-800000.00.0000000.0000000.00.000000
221333.33333312000.074666.6666670.000000-12000.016000.000000-21333.3333330.021333.3333330.0000000.00.000000
3-600000.0000000.00.000000614222.2222220.021333.3333330.0000000.00.000000-14222.2222220.021333.333333
40.000000-6000.0-12000.0000000.000000806000.0-12000.0000000.0000000.00.0000000.000000-800000.00.000000
50.00000012000.016000.00000021333.333333-12000.074666.6666670.0000000.00.000000-21333.3333330.021333.333333
6-14222.2222220.0-21333.3333330.0000000.00.00000014222.2222220.0-21333.3333330.0000000.00.000000
70.000000-800000.00.0000000.0000000.00.0000000.000000800000.00.0000000.0000000.00.000000
821333.3333330.021333.3333330.0000000.00.000000-21333.3333330.042666.6666670.0000000.00.000000
90.0000000.00.000000-14222.2222220.0-21333.3333330.0000000.00.00000014222.2222220.0-21333.333333
100.0000000.00.0000000.000000-800000.00.0000000.0000000.00.0000000.000000800000.00.000000
110.0000000.00.00000021333.3333330.021333.3333330.0000000.00.000000-21333.3333330.042666.666667
\n", "
" ], "text/plain": [ " 0 1 2 3 4 \\\n", "0 614222.222222 0.0 21333.333333 -600000.000000 0.0 \n", "1 0.000000 806000.0 12000.000000 0.000000 -6000.0 \n", "2 21333.333333 12000.0 74666.666667 0.000000 -12000.0 \n", "3 -600000.000000 0.0 0.000000 614222.222222 0.0 \n", "4 0.000000 -6000.0 -12000.000000 0.000000 806000.0 \n", "5 0.000000 12000.0 16000.000000 21333.333333 -12000.0 \n", "6 -14222.222222 0.0 -21333.333333 0.000000 0.0 \n", "7 0.000000 -800000.0 0.000000 0.000000 0.0 \n", "8 21333.333333 0.0 21333.333333 0.000000 0.0 \n", "9 0.000000 0.0 0.000000 -14222.222222 0.0 \n", "10 0.000000 0.0 0.000000 0.000000 -800000.0 \n", "11 0.000000 0.0 0.000000 21333.333333 0.0 \n", "\n", " 5 6 7 8 9 \\\n", "0 0.000000 -14222.222222 0.0 21333.333333 0.000000 \n", "1 12000.000000 0.000000 -800000.0 0.000000 0.000000 \n", "2 16000.000000 -21333.333333 0.0 21333.333333 0.000000 \n", "3 21333.333333 0.000000 0.0 0.000000 -14222.222222 \n", "4 -12000.000000 0.000000 0.0 0.000000 0.000000 \n", "5 74666.666667 0.000000 0.0 0.000000 -21333.333333 \n", "6 0.000000 14222.222222 0.0 -21333.333333 0.000000 \n", "7 0.000000 0.000000 800000.0 0.000000 0.000000 \n", "8 0.000000 -21333.333333 0.0 42666.666667 0.000000 \n", "9 -21333.333333 0.000000 0.0 0.000000 14222.222222 \n", "10 0.000000 0.000000 0.0 0.000000 0.000000 \n", "11 21333.333333 0.000000 0.0 0.000000 -21333.333333 \n", "\n", " 10 11 \n", "0 0.0 0.000000 \n", "1 0.0 0.000000 \n", "2 0.0 0.000000 \n", "3 0.0 21333.333333 \n", "4 -800000.0 0.000000 \n", "5 0.0 21333.333333 \n", "6 0.0 0.000000 \n", "7 0.0 0.000000 \n", "8 0.0 0.000000 \n", "9 0.0 -21333.333333 \n", "10 800000.0 0.000000 \n", "11 0.0 42666.666667 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df=pd.DataFrame(KG)\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo de cargas aplicadas en las luces en coordenadas globales: " ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "MLG=np.zeros((Ne,6,1)) #Matriz de almacenamiento de reacciones de empotramiento en coordenadas globales\n", "for i in range(Ne):\n", " MLG[i]=np.dot(MAT[i],MLL[i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "*Visualización de las reacciones de empotramiento en coordenadas globales de un elemento del pórtico:*\n", "\n", "Indique el número del elemento (n) para el cual desea ver las reacciones de empotramiento en coordenadas globales.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "n=0" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-6. ]\n", " [ 0. ]\n", " [ 4.5]\n", " [-6. ]\n", " [ 0. ]\n", " [-4.5]]\n" ] } ], "source": [ "print(np.array(MLG[n]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ensamble de *L* de la estructura: " ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "L=np.zeros((NGL,1)) \n", "for i in range(Ne):\n", " for j in range(6):\n", " L[MGL[i][j],0]=L[MGL[i][j],0]+MLG[i][j][0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Subdivisión de *L*" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "L0 = L[0:NGLL]\n", "L1 = L[NGLL:NGL]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ensamble de *F0* " ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "F0=N0-L0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Subdivisión de la matriz de rigidez global de la estructura:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "K0 = KG[0:NGLL,0:NGLL]\n", "K1 = KG[0:NGLL,NGLL:NGL]\n", "K2 = KG[NGLL:NGL,0:NGLL]\n", "K3 = KG[NGLL:NGL,NGLL:NGL] " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo de desplazamientos:\n" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.57250266e-03]\n", " [-4.98781732e-05]\n", " [-8.35473002e-04]\n", " [ 1.53673776e-03]\n", " [-7.51218268e-05]\n", " [-1.86039468e-05]]\n" ] } ], "source": [ "Feff=F0-np.dot(K1,U1)\n", "U0=np.dot((np.linalg.inv(K0)),Feff) #Desplazamientos en los grados de libertad libres (en m y rad). \n", "print(np.array(U0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo de reacciones:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-10.54105827]\n", " [ 39.90253853]\n", " [ 20.22329943]\n", " [-21.45894173]\n", " [ 60.09746147]\n", " [ 32.38685469]]\n" ] } ], "source": [ "F1=np.dot(K2,U0)+np.dot(K3,U1) \n", "N1=F1+L1 #Reacciones (grados de libertad restringidos)\n", "print(np.array(N1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## CÁLCULO DE LAS FUERZAS INTERNAS DE LA ESTRUCTURA:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

En esta sección se calcula la fuerza interna de cada elemento del pórtico.

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo de las fuerzas de cada elemento en coodenadas globales:\n", "\n" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "U=np.concatenate((U0,U1)) #Matriz de desplazamientos de todos los grados de libertad\n", "MU=np.zeros((Ne,6,1)) #Matriz de almacenamiento de vectores de desplazamiento de cada elemento\n", "for i in range(Ne):\n", " for j in range(6):\n", " MU[i,j,0]=U[int(MGL[i][j])][0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "*Visualización de los desplazamientos de un elemento del pórtico:*\n", "\n", "Indique el número del elemento (n) para el cual desea ver los desplazamientos.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "n=0" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.00000000e+00]\n", " [ 0.00000000e+00]\n", " [ 0.00000000e+00]\n", " [ 1.57250266e-03]\n", " [-4.98781732e-05]\n", " [-8.35473002e-04]]\n" ] } ], "source": [ "print(np.array(MU[n]))" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "MFG=np.zeros((Ne,6,1)) #Matriz de almacenamiento de las fuerzas de cada elemento en coordenadas globales\n", "for i in range(Ne):\n", " MFG[i]=np.dot(MAG[i],MU[i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "*Visualización de las fuerzas en coordenadas globales de un elemento del pórtico:*\n", "\n", "Indique el número del elemento (n) para el cual desea ver las fuerzas en coordenadas globales.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "n=0" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ -4.54105827]\n", " [ 39.90253853]\n", " [ 15.72329943]\n", " [ 4.54105827]\n", " [-39.90253853]\n", " [ -2.10012462]]\n" ] } ], "source": [ "print(np.array(MFG[0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo de las fuerzas en los extremos de cada elemento, *N*" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "MN=np.zeros((Ne,6,1)) #Matriz de almacenamiento de N de cada elemento\n", "for i in range(Ne):\n", " MN[i]=MLG[i]+MFG[i]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "*Visualización de N para un elemento del pórtico:*\n", "\n", "Indique el número del elemento (n) para el cual desea ver las fuerzas en los extremos en coordenadas globales.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "n=0" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-10.54105827]\n", " [ 39.90253853]\n", " [ 20.22329943]\n", " [ -1.45894173]\n", " [-39.90253853]\n", " [ -6.60012462]]\n" ] } ], "source": [ "print(np.array(MN[n]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cálculo de las fuerzas de cada elemento en coordenadas locales:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "MFL=np.zeros((Ne,6,1)) #Matriz de almacenamiento de las fuerzas de cada elemento en coordenadas locales\n", "for i in range(Ne):\n", " MFL[i]=np.dot(np.transpose(MAT[i]),MN[i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "*Visualización de las fuerzas en coordenadas locales de un elemento del pórtico:*\n", "\n", "Indique el número del elemento (n) para el cual desea ver las fuerzas en coordenadas locales.\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "n=0" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 39.90253853]\n", " [ 10.54105827]\n", " [ 20.22329943]\n", " [-39.90253853]\n", " [ 1.45894173]\n", " [ -6.60012462]]\n" ] } ], "source": [ "print(np.array(MFL[n]))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }