{ "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": [ "" ] }, { "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", " | 0 | \n", "1 | \n", "2 | \n", "3 | \n", "4 | \n", "5 | \n", "
---|---|---|---|---|---|---|
0 | \n", "800000.0 | \n", "0.000000 | \n", "0.000000 | \n", "-800000.0 | \n", "0.000000 | \n", "0.000000 | \n", "
1 | \n", "0.0 | \n", "14222.222222 | \n", "21333.333333 | \n", "0.0 | \n", "-14222.222222 | \n", "21333.333333 | \n", "
2 | \n", "0.0 | \n", "21333.333333 | \n", "42666.666667 | \n", "0.0 | \n", "-21333.333333 | \n", "21333.333333 | \n", "
3 | \n", "-800000.0 | \n", "0.000000 | \n", "0.000000 | \n", "800000.0 | \n", "0.000000 | \n", "0.000000 | \n", "
4 | \n", "0.0 | \n", "-14222.222222 | \n", "-21333.333333 | \n", "0.0 | \n", "14222.222222 | \n", "-21333.333333 | \n", "
5 | \n", "0.0 | \n", "21333.333333 | \n", "21333.333333 | \n", "0.0 | \n", "-21333.333333 | \n", "42666.666667 | \n", "
\n", " | 0 | \n", "1 | \n", "2 | \n", "3 | \n", "4 | \n", "5 | \n", "
---|---|---|---|---|---|---|
0 | \n", "0.0 | \n", "-1.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
1 | \n", "1.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
2 | \n", "0.0 | \n", "0.0 | \n", "1.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "
3 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "-1.0 | \n", "0.0 | \n", "
4 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.0 | \n", "0.0 | \n", "0.0 | \n", "
5 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "0.0 | \n", "1.0 | \n", "
\n", " | 0 | \n", "1 | \n", "2 | \n", "3 | \n", "4 | \n", "5 | \n", "
---|---|---|---|---|---|---|
0 | \n", "14222.222222 | \n", "0.0 | \n", "-21333.333333 | \n", "-14222.222222 | \n", "0.0 | \n", "-21333.333333 | \n", "
1 | \n", "0.000000 | \n", "800000.0 | \n", "0.000000 | \n", "0.000000 | \n", "-800000.0 | \n", "0.000000 | \n", "
2 | \n", "-21333.333333 | \n", "0.0 | \n", "42666.666667 | \n", "21333.333333 | \n", "0.0 | \n", "21333.333333 | \n", "
3 | \n", "-14222.222222 | \n", "0.0 | \n", "21333.333333 | \n", "14222.222222 | \n", "0.0 | \n", "21333.333333 | \n", "
4 | \n", "0.000000 | \n", "-800000.0 | \n", "0.000000 | \n", "0.000000 | \n", "800000.0 | \n", "0.000000 | \n", "
5 | \n", "-21333.333333 | \n", "0.0 | \n", "21333.333333 | \n", "21333.333333 | \n", "0.0 | \n", "42666.666667 | \n", "
\n", " | 0 | \n", "1 | \n", "2 | \n", "3 | \n", "4 | \n", "5 | \n", "6 | \n", "7 | \n", "8 | \n", "9 | \n", "10 | \n", "11 | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "614222.222222 | \n", "0.0 | \n", "21333.333333 | \n", "-600000.000000 | \n", "0.0 | \n", "0.000000 | \n", "-14222.222222 | \n", "0.0 | \n", "21333.333333 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "
1 | \n", "0.000000 | \n", "806000.0 | \n", "12000.000000 | \n", "0.000000 | \n", "-6000.0 | \n", "12000.000000 | \n", "0.000000 | \n", "-800000.0 | \n", "0.000000 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "
2 | \n", "21333.333333 | \n", "12000.0 | \n", "74666.666667 | \n", "0.000000 | \n", "-12000.0 | \n", "16000.000000 | \n", "-21333.333333 | \n", "0.0 | \n", "21333.333333 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "
3 | \n", "-600000.000000 | \n", "0.0 | \n", "0.000000 | \n", "614222.222222 | \n", "0.0 | \n", "21333.333333 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "-14222.222222 | \n", "0.0 | \n", "21333.333333 | \n", "
4 | \n", "0.000000 | \n", "-6000.0 | \n", "-12000.000000 | \n", "0.000000 | \n", "806000.0 | \n", "-12000.000000 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "0.000000 | \n", "-800000.0 | \n", "0.000000 | \n", "
5 | \n", "0.000000 | \n", "12000.0 | \n", "16000.000000 | \n", "21333.333333 | \n", "-12000.0 | \n", "74666.666667 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "-21333.333333 | \n", "0.0 | \n", "21333.333333 | \n", "
6 | \n", "-14222.222222 | \n", "0.0 | \n", "-21333.333333 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "14222.222222 | \n", "0.0 | \n", "-21333.333333 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "
7 | \n", "0.000000 | \n", "-800000.0 | \n", "0.000000 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "0.000000 | \n", "800000.0 | \n", "0.000000 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "
8 | \n", "21333.333333 | \n", "0.0 | \n", "21333.333333 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "-21333.333333 | \n", "0.0 | \n", "42666.666667 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "
9 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "-14222.222222 | \n", "0.0 | \n", "-21333.333333 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "14222.222222 | \n", "0.0 | \n", "-21333.333333 | \n", "
10 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "0.000000 | \n", "-800000.0 | \n", "0.000000 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "0.000000 | \n", "800000.0 | \n", "0.000000 | \n", "
11 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "21333.333333 | \n", "0.0 | \n", "21333.333333 | \n", "0.000000 | \n", "0.0 | \n", "0.000000 | \n", "-21333.333333 | \n", "0.0 | \n", "42666.666667 | \n", "
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": [ "