Opensees PDF
Opensees PDF
Opensees PDF
CONEXIONES DE HORMIGÓN
ARMADO CON FORJADOS
JUNIO 2019
1
Estado del conocimiento
RESUMEN
Una vez obtenidas estas energías se comprueba de manera numérica o gráfica que el balance
energético E=Wes+Wp+Wh+Wk se cumple.
Para abordar esta investigación se ha utilizado una estructura consistente en una placa
soportada en cuatro pilares en las esquinas, cada uno empotrado en su base. Esta estructura
esta construida con los materiales hormigón y acero, y tiene unas secciones de hormigón
armado definidas. Se ha considerado que los materiales tienen un comportamiento no lineal.
Esto es así porque los terremotos inducen grandes fuerzas en la estructura y no sería viable
económicamente proyectarlas para que se mantuviesen elásticas para este tipo de acciones que
tienen una probabilidad de ocurrencia muy baja.
La energía total disipada es la suma de la energía disipada en los pilares y en las placas. Estas
energías se calculan en unos puntos de Gauss de la estructura. Además, se realizan unas
funciones para calcular la energía de amortiguamiento, la energía cinética y la energía total
introducida en la estructura.
Contenido
RESUMEN .............................................................................................................................................. 21
1. INTRODUCCIÓN ................................................................................................................................... 5
1.1 Antecedentes ................................................................................................................................ 5
1.2 Objetivos ....................................................................................................................................... 5
1.3 Metodología .................................................................................................................................. 5
2. ESTADO DEL CONOCIMIENTO ............................................................................................................. 6
2.1 Métodos de proyecto sismorresistente ........................................................................................ 6
2.1.1 Método de proyecto basado en fuerzas (DBF)....................................................................... 6
2.1.2 Método de proyecto basado en desplazamientos (DBD) ...................................................... 6
2.1.3 Método de proyecto basado en energías (DBE) .................................................................... 6
3. DESCRIPCIÓN DEL MODELO ................................................................................................................ 8
3.1 Descripción .................................................................................................................................... 8
3.1.1 Geometría............................................................................................................................. 10
3.1.2 Materiales............................................................................................................................. 10
3.1.3 Secciones .............................................................................................................................. 12
3.1.4 Tipos de elementos empleados en Opensees ...................................................................... 15
3.1.5 Análisis .................................................................................................................................. 16
3.1.6 Outputs ................................................................................................................................. 17
4. CÁLCULOS DINÁMICOS Y RESULTADOS............................................................................................. 20
4.1 Funciones..................................................................................................................................... 21
4.1.1 Buscarnuevo ......................................................................................................................... 21
4.1.2 Coordglnuevo ....................................................................................................................... 21
4.1.3 Infgpnuevo............................................................................................................................ 22
4.1.4 LeeDato ................................................................................................................................ 23
4.1.5 CurvasNivelPasoNEW ........................................................................................................... 24
4.2 Análisis energético ...................................................................................................................... 25
4.2.1 Energía elástico plástica de la placa ..................................................................................... 25
4.2.2 Energía elástico plástica de los pilares ................................................................................. 27
4.2.3 Energía de amortiguamiento................................................................................................ 28
4.2.4 Energía cinética .................................................................................................................... 29
4.2.5 Input de energía ................................................................................................................... 29
4.2.6 Balance energético ............................................................................................................... 30
4.3 Resultados gráficos...................................................................................................................... 35
3
Indice
1. INTRODUCCIÓN
1.1 Antecedentes
Para diseñar la estructura de los edificios situados en zonas sísmicas se requiere realizar un
proyecto sismorresistente. El paradigma actual al que se orienta el proyecto sismorresistente
de estructuras es el llamado Proyecto Sismorresistente Basado en Prestaciones (Performance
Based Seismic Design, PBSE), que persigue evaluar los daños producidos en la estructura
para un determinado nivel de terremoto. Evaluar cuantitativamente el daño es algo que no se
puede hacer mediante los métodos de proyecto convencionales basados en fuerzas. Para ello
hay que emplear métodos basados en desplazamientos o, métodos basados en el balance
energético. Este último método tiene en cuenta de forma directa que la respuesta de la
estructura debido a un seísmo se produce en el campo fuertemente no lineal, permite
cuantificar el daño en términos de desplazamientos máximos y de energía de deformación
plástica acumulada.
1.2 Objetivos
El presente trabajo tiene como objetivo investigar cómo se distribuye la energía introducida
por sismo en una estructura de hormigón armado fomada por losas sobre pilares aislados,
empleando modelos no lineales y cálculos dinámicos directos con terremotos históricos. Se
desarrolla un modelo numérico y se analiza para obtener los esfuerzos, desplazamientos y
energía introducida en los elementos de los que está compuesto. Con ello se persigue
averiguar cómo se distribuye el daño (es decir, la energía de deformación plástica) en la
estructura, y localizar las zonas en las que se concentra.
1.3 Metodología
5
Estado del conocimiento
Este es el método que utilizan mayormente todas las normas sísmicas para el proyecto
sismorresistente de estructuras. Estos métodos caracterizar el terremoto en términos de
fuerzas. Con ello se realiza un cálculo elástico y las fuerzas laterales y esfuerzos obtenidos se
dividen por un factor de ductilidad. La hipótesis fundamental que hay detrás de estos métodos
es que el desplazamiento máximo de la estructura es igual en régimen elástico y en régimen
elastoplástico; esto se conoce como “regla de igualdad de desplazamientos”.
Este método caracteriza el efecto de carga del terremoto en términos de energía total
introducido por el sismo, que es en definitiva el producto de fuerza por desplazamiento. La
hipótesis fundamental sobre la que se apoyan estos métodos procede de la evidencia
(demostrada numérica y experimetalmente) de que la energía total introducida por un sismo
en una estructura esta gobernada por su masa total y su periodo fundamental, y se puede
considerar independiente de la resistencia, nivel amortiguamiento, nivel de plastificación, y
en definitiva de cómo se reparta esta energía total introducida entre energía de vibración
elástica, energía de deformación plástica y energía disipada por amortiguamiento. Esta regla
de igualdad de enegía total introducida, juega en estos métodos un papel neurálgiuco similar
al de la regla de igualdad de desplazamientos de los métodos basados en fuerzas.
Una de las ventajas de estos métodos es que permiten cuantificar el daño de forma explícita
en términos de deformaciones plásticas acumuladas y de desplazamientos máximos.
7
Descripción del modelo
3.1 Descripción
El tipo de estructura investigada en este trabajo son las losas macizas de hormigón armado
soportadas en pilares aislados. El trabajo se podría extender a losas aligeradas (waffle plate
structures) siguiendo un planteamiento y procedimiento similar. Las Figuras 1 y 2 muestran
detalles de este tipo de estructuras y la nomenclatura empleada.
En este tipo de estructuras se suelen diferenciar varias zonas, que se ilustran en la Figura 3:
El recuadro interior que es el que corresponde a cuatro pilares de los cuales ninguno
está en el borde.
El recuadro de borde que es el que tiene dos pilares en el borde de placa
El recuadro de esquina que es el que tiene dos pilares en borde de placa y uno en
esquina.
La banda de pilares que corresponde a un ancho determinado a cada de lado de los
pilares.
El pórtico virtual que está constituido por una fila de pilares y la zona de placa lateral
El recuadro central que es el situado entre dos bandas de pilares.
Las losas aligeradas de tipo reticular o nervado utilizan bovedillas, moldes recuperables
metálicos o de plástico organizados formando una malla rectangular. Se les conoce también
como forjados reticulares.
Los sistemas de forjados reticulares son competitivos para resistir cargas gravitacionales en
comparación con los sistemas de forjados unidireccionales hormigón armado porque los
costes de encofrado pueden ser reducidos, hay más libertad para colocar las columnas en
planta y se pueden conseguir grandes luces (10m-12m) con espesores pequeños de placa. Aun
así, tienen desventajas para resistir cargas sísmicas ya que tienen poca rigidez horizontal y
ductilidad limitada.
Este tipo de forjado reticular requiere métodos de cálculo que se recogen, por ejemplo, en la
Norma Norteamericana ACI 318-95. Esta norma incluye dos métodos, uno simplificado y uno
general de esfuerzos. La instrucción EHE española copia la Norma Norteamericana que
utiliza el método general.
Según la norma Europea EN 1998-1, los sistemas de forjados reticulares deben considerarse
como de ductilidad baja, y se recomienda que se empleen sólo en zonas de sismicidad baja.
La norma Española NCSE-02 limita el uso de estos sistemas.
La estructura investigada en este trabajo consiste en una losa maciza de hormigón soportada
en cuatro pilares situados en las esquinas como se muestra en la figura 4.
9
Descripción del modelo
3.1.1 Geometría
El modelo numérico desarrollado representa una estructura del tipo indicado en el apartado
anterior a escala ½. Se ha empleado un modelo a escala para que los resultados de este trabajo
se puedan comparar en el futuro con resultados de ensayos con mesa sísmica disponibles.
Tiene una parte que son los pilares y otra parte que es la placa. Las dimensiones de la placa
son 2000mm x 2000mm y se utilizan cuatro pilares en las esquinas del forjado de 1500mm de
longitud.
Como condiciones de contorno del modelo, los cuatro pilares están empotrados en la base. Es
decir, tienen restringidos todos los grados de libertad en esas zonas. La estructura se modeliza
con 13 nodos dispuestos como se muestra en la figura 4. Contiene una masa puntual de 0,5
toneladas en los nodos 1,3,5 y 7 de la estructura. Según este criterio de nodos, el modelo está
empotrado en los nodos 10,11,12 y 13. El origen de coordenadas global es en el nodo 1 de la
geometría.
En el anexo 1 apartado 1.1 se puede ver el código en OpenSees en AD.tcl con la definición
del modelo, las masas y las condiciones de contorno. En el anexo 1 apartado 1.2 se puede ver
el código en Nodes.tcl de la definición de los nodos de la estructura.
3.1.2 Materiales
Obsérvese que en Opensees la variable $fpc representa el límite a compresión del hormigón y
$epsc la deformación que alcanza con esa tensión anterior.
Para el acero se utiliza el material “Steel02”. El programa tiene varios tipos de leyes
constitutivas para el acero. Se ha utilizado el tipo Steel02 porque es adecuado para los
elementos viga y placa analizados en este trabajo. En la figura 6 se tiene una relación de la
tensión y la deformación de este material.
11
Descripción del modelo
3.1.3 Secciones
3.1.3.1 Pilares
La estructura tiene un tipo de sección para los pilares y las placas. En primer lugar, las
secciones de los pilares son de 100mm x 100mm con hormigón confinado a 10mm del lado en
la parte central que está situada en el plano yz. Se tiene que la sección está formada también
por hormigón no confinado en la periferia y armaduras de acero.
En la sección definida por defecto que tiene “OpenSees” se consideran sólamante las
deformaciones a axil y a flexión por tanto, ha sido necesario añadir el comportamiento a
cortante y a torsión. Concretamente las rigideces a cortante en los ejes “y” y “z” y la rigidez a
torsión. El código empleado se muestra en el anexo 1 apartado 1.4.
En “OpenSees” es necesario definir unas coordenadas locales para los elementos del modelo
utilizado. Esto se requiere porque los esfuerzos y las deformaciones vienen definidos en estos
ejes anteriormente comentados.
En primer lugar, los pilares tienen unas coordenadas locales que se definen de manera que el
eje x va desde el nodo inicial al nodo final del elemento líneal. Estos nodos inicial y final
están localizados en la definición de los elementos lineales como se muestra más adelante. El
eje z local, se ha definido en la dirección del eje X global (1 0 0). El eje local y se puede
obtener como el producto vectorial de los ejes locales x y z como se indica en la figura 8
siguiente.
z
y
Estas son las coordenadas locales de la sección del pilar. Estas se utilizan para localizar las
fibras de hormigón confinado, no confinado y las barras de acero. También, sirven para
expresar los resultados de esfuerzos y deformaciones obtenidos.
13
Descripción del modelo
3.1.3.2 Placa
Es necesario definir también las secciones de los elementos placa. Las secciones de la placa
maciza contienen hormigón y las barras de acero. El programa “OpenSees” da la posibilidad
de obtener una sección equivalente, por lo que la sección original se modela en forma de
capas de hormigón y acero.
En los elementos placa utilizados se identifican los nodos y los ejes locales como se muestra
en la figura 10.
Obsérvese que el eje x’ en coordenadas locales está entre los nodos i y l y el eje y’ está entre
los nodos i y j como se muestra en la figura 10 correspondiente. En el anexo 1 apartado 1.4 se
tiene el código para crear una sección en forma de capas con los materiales de hormigón y
acero definidos anteriormente.
La estructura se compone de cuatro elementos tipo pilar numerados del 1-4, y cuatro
elementos tipo placa, numerados del 5-8, como se muestra en la figura 4 anterior.
Una ventaja de la utilización de estos elementos es que permite al usuario elegir la ubicación
de los puntos de Gauss a lo largo del elemento. En este caso, se ha tratado de espaciar los
puntos de Gauss de manera uniforme en 5 segmentos del mismo tamaño. Para este caso se
han utilizado cinco puntos de Gauss que se han definido previamente su localización como
0,1, 0,3, 0,5, 0,7 y 0,9 que son las coordenadas “eta” de un elemento normalizado [0,1].
El objeto de añadir más puntos de Gauss es para poder conseguir una mejor aproximación de
la energía disipada desde el primer nodo al último del elemento y así conseguir que el balance
energético sea más preciso.
Para las placas se utilizan los elementos de OpenSees del tipo “shellMITC4” en los que se
definen los nodos del elemento y el tipo de sección comentada anteriormente en el apartado
de secciones a la que pertenece. La descripción de esta información está en el archivo
15
Descripción del modelo
3.1.5 Análisis
Una vez definidos los materiales, secciones y elementos se realiza el análisis de la estructura.
El análisis de la estructura se compone de tres partes:
Para el análisis del modelo se obtiene también la matriz de rigidez mediante la función
“StiffnessMatrix” que está incluida en el programa principal AD.tcl en la parte “model
matrices”. Esta función está incluida en el archivo Analysis.tcl ejecutado al principio del
programa principal, donde se describe en la función un análisis estático. Por tanto, a
diferencia del análisis de la matriz de masas describe un análisis como “analysis Static” y la
instrucción “printA” que devuelve la matriz de rigidez de la estructura. Esta matriz se guarda
en el archivo especificado en el programa. El código para estas funciones está en el archivo
Analysis.tcl en el anexo 1 apartado 1.7 correspondiente.
Una vez obtenidas la matriz de masas y la matriz de rigidez se obtiene el análisis modal de la
estructura. Esto es, se utiliza una función “Modes” para obtener los modos de vibración que
se requieran. Esto es, un archivo que describe la forma de la estructura sometida a los
esfuerzos por el análisis dinámico. También, esta función devuelve los periodos de vibración
de la estructura. En este trabajo, se obtienen los tres primeros modos de vibración y se utiliza
el primer modo de vibración para obtener la primera frecuencia propia de vibración asociada
ya que es el modo de vibración más significativo en el análisis realizado. Esta función está
incluida en el archivo Analysis.tcl también.
Una vez se realiza esta parte anterior del análisis, se realiza el análisis gravitatorio de la
estructura. Por tanto, se definen cuatro cargas en los nodos 1, 3, 5 y 7 correspondientes a las
masas en cada nodo. Esto es, las cargas se definen como m*g en cada nodo considerado
teniendo en cuenta que las masas son 0,5 toneladas en cada nodo respectivamente.
16 Escuela Técnica Superior de Ingenieros Industriales (UPM)
Comportamiento sísmico de conexiones de hormigón armado con forjados
________________________________________________________________________________
Para ejecutar este análisis, se utiliza la función “Gravity” que realiza un análisis estático en el
que se añade la carga en 10 pasos y se utiliza un algoritmo específico de OpenSees para la
resolución del análisis anteriormente comentado.
La siguiente parte del análisis es la introducción de la aceleración del suelo que se produce
debido al terremoto que se considera. En este caso, se ha considerado el terremoto registrado
de la ciudad de Kobe durante el terremoto de Hyogoken-Nambu de 1995 y se utilizan las
aceleraciones en unidades de g producidas en el archivo de texto Kobe. Estas aceleraciones
son las que se agregan en OpenSees y que están establecidas en un intervalo de tiempo de
0,01s. Obsérvese que las aceleraciones se multiplican por g para incluirlas en el análisis. Esta
parte del análisis se encuentra en el archivo AD.tcl del anexo 1 apartado 1.1. La dirección
considerada para el terremoto es la del primer grado de libertad, esto es en la dirección del eje
X global utilizado.
Además, se utiliza una instrucción para crear las aceleraciones que se quieren introducir en el
suelo y se introducen estas aceleraciones utilizando una instrucción como se muestra en la
parte de “análisis dinámico” en el archivo AD.tcl en la estructura. Finalmente, se utiliza la
función “Dynamic” incluida en Analysis.tcl para realizar el análisis dinámico de la estructura.
3.1.6 Outputs
Una vez realizado el análisis, el programa “OpenSees” permite obtener los resultados del
análisis realizado. Mediante el uso de la instrucción “recorder” se puede obtener información
acerca de los esfuerzos y deformaciones en los puntos de Gauss, desplazamientos en los
nodos, reacciones en los nodos y velocidades en los nodos.
17
Descripción del modelo
Es decir, los resultados se devuelven en el formato definido por el usuario en el programa. Por
defecto, el programa “OpenSees” devuelve los resultados como una serie de filas que
representan los parámetros de respuesta cada 0,01s, y las columnas que indican el tipo de
esfuerzo, deformación, desplazamiento, reacción o velocidad.
El programa “OpenSees” ofrece los resultados en formato xml. Los resultados obtenidos en
este formato devuelven además de los esfuerzos y deformaciones, el punto de Gauss y la
localización del punto de Gauss. Esto permite representar con precisión los resultados de
esfuerzos, deformaciones y energía en la estructura.
Cada resultado obtenido tiene un formato diferente según sea para pilares o placas en la
estructura. Esta disposición es la que se obtiene de los resultados obtenidos.
T ux uy uz θx θy θz
Los resultados de reacciones en coordenadas globales en pilares y placas tienen por columnas
la distribución:
Los resultados de los esfuerzos y las deformaciones en coordenadas locales en los puntos de
Gauss en pilares tienen la distribución:
t N Mz My Mx Tz Ty Mx
Obsérvese que el momento torsor está repetido, se utiliza el primero para el cálculo de la
energía debida al torsor en la estructura.
T εx γz γy γtr εz εy γtreal
Los resultados de los esfuerzos y las deformaciones en coordenadas locales en cada uno de
los cuatro puntos de Gauss en placas tienen la distribución:
19
Cálculos dinámicos y resultados
En este apartado se describen los diferentes tipos de energía que disipa/almacena la estructura
obtenidos postprocesando la salida de resultados que ofrece el programa Opensees. Este
postprocesado se realiza con funciones en Matlab.
Inicialmente, se requiere obtener los archivos que genera el programa principal, principal.m y
que se almacenan en el fichero OpenSees AD.tcl. Estos archivos se producen al ejecutar la
función Outputs.tcl como se comentó anteriormente. Estos resultados son los desplazamientos
en los nodos, velocidades en los nodos, esfuerzos y deformaciones en los puntos de Gauss de
la estructura. El programa principal.m se expone en el anexo 2 apartado 2.1.
Una vez generados los archivos con los resultados de los desplazamientos, velocidades,
reacciones, esfuerzos y deformaciones para calcular la energía disipada en la estructura se
realiza un análisis energético. Este análisis energético proporciona la energía de deforamación
elástica y plástica de las placas y pilares (Wes+Wp), la energía de amortiguamiento (Wh), la
energía cinética (Wk) y la energía introducida por el terremoto (E). Estas energías se calculan,
respectivamente, mediante las funciones PrincipalPlaca.m, Principalpilar.m y
BalanceEnergético.m del anexo 2 apartado 2.2 cuya descripción es:
La siguiente tabla resumen indica las funciones principales y el cálculo de la energía disipada
que se obtiene:
A partir de estos resultados se debe comprobar en primer lugar que se cumple el balance de
energías en la estructura, es decir que E=Wes+Wp+Wh+Wk.
4.1 Funciones
Estas funciones proporcionan los esfuerzos y las deformaciones en los puntos de Gauss
almacenados en la salida de resultados en los archivos “.out”. Estos esfuerzo y deformaciones
se precisan para el cálculo de la energía disipada en las placas Wes+Wp y en los pilares
Wes+Wp.
Además, para las placas se necesitan funciones que proporcionen las coordenadas globales de
los puntos del elemento donde se calcula la energía. Estos son los puntos de Gauss del
elemento. Estas funciones son parte también del programa principal de las placas y los pilares
ejecutados en Matlab.
4.1.1 Buscarnuevo
Esta función tiene como objetivo buscar un valor que se encuentra después de una palabra
seguida de “=” en un archivo de texto en formato -xml que proporciona el programa
OpenSees.
Este archivo proporciona también información adicional del elemento: los nodos del
elemento, el punto de Gauss y la ubicación del punto de Gauss en coordenadas normalizadas.
Estas coordenadas normalizadas son eta y neta para las placas y eta para los pilares. Las
coordenadas anteriores están en el intervalo [0,1].
4.1.2 Coordglnuevo
Esta función es necesaria para obtener las coordenadas globales de los nodos de un elemento.
Se requiere porque para obtener las coordenadas globales de los puntos de Gauss se necesita
realizar una transformación de coordenadas. Por tanto, esta función obtiene las coordenadas
globales X, Y y Z de los nodos de un elemento placa o pilar. Estas coordenadas se almacenan
en variables por filas siendo cada fila la que corresponde a un elemento de la estructura. Por
ejemplo:
Node 1 0 0 0
Node 2 1 0 0
21
Cálculos dinámicos y resultados
Node 3 1 1 0
Node 4 0 1 1
Coord. X 0 1 1 0
Coord. Y 0 0 1 1
Coord. Z 0 0 0 1
Así, se obtienen las coordenadas globales de los nodos de la estructura como se indica en el
anexo 2 apartado 2.4 correspondiente.
4.1.3 Infgpnuevo
Esta función devuelve las coordenadas globales de los puntos de Gauss del elemento a partir
de las coordenadas normalizadas y las coordenadas globales del elemento utilizado. Esta
función se utiliza únicamente en las placas para obtener los puntos de Gauss de la placa que
son necesarios para poder representar de manera gráfica los resultados obtenidos. El motivo
de que esta función únicamente se utilice para las placas es porque estas son elementos
bidimensionales y las coordenadas de los nodos requieren una transformación para obtener las
nuevas coordenadas anteriores. En cambio, los pilares tienen las coordenadas localizadas en
los elementos lineales de tipo pilar anteriormente comentados.
Esta función está en el anexo 2 apartado 2.5 correspondiente. Como se comentó anteriormente
en el formato de archivo utilizado para los resultados se utiliza –xml en este TFG porque el
archivo da información sobre las coordenadas normalizadas eta y neta del punto de Gauss en
el elemento que se necesita, para posteriormente transformarlas en las coordenadas globales
del punto de Gauss del elemento. Estas coordenadas están en el intervalo [0,1] en un elemento
placa normalizado como se muestra en la parte derecha de la figura 11 correspondiente.
Los elementos utilizados para modelar la placa son cuadriláteros con cuatro nodos. Los
archivos que dan los resultados dan información de las coordenadas eta y neta de cuatro
puntos de Gauss en coordenadas naturales y se requieren las coordenadas geométricas
globales de estos puntos para obtener los esfuerzos y deformaciones. Los puntos de Gauss en
placas están situados dentro del perímetro que establecen los cuatro nodos. Para esto se
realiza una transformación isoparamétrica que se realiza de la siguiente manera.
x(ξ,η) = ∑xeANA(ξ,η)
y(ξ,η) = ∑yeANA(ξ, η)
Siendo:
Obsérvese que es una suma del primer nodo al último del elemento considerado.
Las N son las funciones de interpolación que son las que se aplican para convertir las
coordenadas naturales de la parte derecha de la anterior figura 11 a las coordenadas de la parte
izquierda de la figura 11.
N1=1/4*(eta-1)*(neta-1)
N2=-1/4*(eta+1)*(neta-1)
N3=1/4*(eta+1)*(neta+1)
N4=-1/4*(eta-1)*(neta+1)
4.1.4 LeeDato
Esta función devuelve una matriz con los valores que se encuentran después de una palabra en
un archivo obtenido de la salida de resultados. Estos archivos son de formato -xml obtenidos
de los resultados del programa principal. Estos archivos representan un punto de Gauss y por
tanto, los esfuerzos o deformaciones en ese punto concreto.
4.1.5 CurvasNivelPasoNEW
Esta función se utiliza para la representación de los resultados de forma gráfica únicamente
para la placa. Una vez obtenida la información de esfuerzos, deformaciones y energías en los
puntos de Gauss de la placa se puede visualizar de manera gráfica la distribución de esta
información utilizando esta función.
Las magnitudes de los parámetrsos de respuesta representados varían en cada paso del tiempo,
por lo tanto esta función representa de forma gráfica estas magnitudes en un instante concreto.
El instante elegido ha sido el correspondiente a un pico de aceleración del terremoto para
visualizar las zonas sometidas a mayores esfuerzos.
Wplaca Wpilares
Energía de amortiguamiento
Wh
E Wk
25
Cálculos dinámicos y resultados
En primer lugar, se construye una matriz nodal que tenga los nodos de los elementos por filas
para las placas. Para realizar esto, se utiliza la función “Buscarnuevo.m” que devuelve los
nodos del elemento y lo guarda en una variable correspondiente.
La siguiente parte es la obtención del archivo del punto de Gauss considerado de las
coordenadas eta y neta correspondientes utilizando la función “Buscarnuevo” anterior. Estas
coordenadas se guardan en variables separadas que contienen las coordenadas de los
elementos por filas.
En esta parte del programa principal, se obtienen las coordenadas globales de los nodos del
elemento al que pertenece el punto de Gauss considerado. Para la obtención se utiliza la
función “Coordglnuevo” anterior. Esta función guarda las coordenadas de los nodos de los
elementos por filas.
Esta parte del programa principal obtiene las coordenadas globales de los puntos de Gauss
considerados. Para esto, se utiliza la función “Infgpnuevo” anterior. Esta función guarda las
coordenadas de los nodos de los elementos por filas.
En esta parte del programa principal se obtienen los esfuerzos de los resultados anteriores.
Para esto, se utiliza la función “LeeDato” que guarda los esfuerzos en una variable. Por tanto,
cada esfuerzo se guarda en una variable que corresponda con el tipo de esfuerzo según la
columna como se vio en el apartado Outputs anterior.
En esta última parte, se definen las longitudes efectivas en las direcciones x e y de la placa. Se
realiza el cálculo de la energía elástico plástica (Wes+Wp) que corresponde a cada esfuerzo
en la placa. Al final, se suman las contribuciones energéticas correspondientes a todos los
esfuerzos para obtener la energía elástico plástica almacenada/disipada en toda la placa.
Esta función principal está en el anexo 2 apartado 2.7 correspondiente. El cálculo teórico es:
Wes+Wp=∑∫ F*e dl
Siendo:
Se realiza una integral entre 0 y t y un sumatorio de todos los puntos de Gauss de la placa.
Obsérvese que dl se toma en dirección x o y de la placa según afecte al esfuerzo
correspondiente.
La función Principalpilar.m devuelve la energía elástico plástica de los pilares. Esta función
utiliza los archivos de los puntos de Gauss de los pilares obtenidos de los esfuerzos y
deformaciones para realizar un cálculo que tiene como resultado la energía disipada en cada
punto de Gauss y en los pilares. Esta función realiza una serie de procesos para cada punto de
Gauss considerado. El procedimiento es el siguiente:
Primero, se inicializan las variables de la longitud efectiva de cada punto de Gauss, los
nodos de cada elemento, las coordenadas globales de los puntos de Gauss, los
esfuerzos y las deformaciones de los pilares de la estructura.
Los resultados tienen el formato para las fuerzas “VigaElexgpxforce.out” y para las
deformaciones “VigaElexgpxdef.out” correspondientes.
En primer lugar, se obtienen los nodos del elemento a los que pertenecen los puntos de Gauss
considerados. Esto se realiza mediante la función “Buscarnuevo” anterior. Se guarda en una
variable los nodos de los elementos por filas correspondiente.
En esta parte, se obtienen las coordenadas globales de los puntos de Gauss. Esto es, la
coordenada eta del punto de Gauss considerado. Obsérvese, que a diferencia de las placas
únicamente hay una coordenada para los pilares. Esta coordenada se guarda en una variable
correspondiente.
27
Cálculos dinámicos y resultados
“LeeDato” para obtener los valores de esfuerzos o deformaciones en los archivos xml de los
resultados. Estos valores se guardan en una variable que contiene los diferentes tipos de
esfuerzos o deformaciones por columnas como se vio en el apartado de Outputs anterior.
En esta parte del programa principal, se calcula la energía elástico plástica (Wes+Wp)
almacenada/disipada por los pilares. Esto es, se cálcula la contribución a la energía de cada
esfuerzo considerado. En concreto, cada energía correspondiente a un esfuerzo es una variable
que contiene la energía disipada por los puntos de Gauss por columnas en los pilares.
Finalmente, se suman las contribuciones a la energía de los esfuerzos para obtener la energía
elástico plástica en los pilares.
Esta función está en el anexo 2 apartado 2.8 correspondiente. El cálculo teórico es:
Wes+Wp=∑∫ F*e dl
Siendo:
dl: La longitud entre dos puntos de Gauss en un elemento pilar. En los puntos de Gauss
laterales es la mitad de esta distancia.
Se realiza una integral entre 0 y t y un sumatorio de todos los puntos de Gauss de los pilares.
Wh= ∑∫ C*v2 dt
Siendo:
En esta parte se considera la energía cinética debida al movimiento de los nodos. Esta energía
se obtiene multiplicando las masas de los grados de libertad no restringidos por el resultado
del vector velocidad al cuadrado e integrar con respecto del tiempo. La función
“BalanceEnergetico.m” correspondiente al anexo 2 apartado 2.2 tiene una parte para el
cálculo de la energía cinética de la estructura. El cálculo teórico es:
Wk= ½*M*u2
Siendo:
En este apartado, se analiza la energía introducida en la estructura. Esta energía se utiliza para
comprobar el balance energético. Este trabajo considera el terremoto en una dirección que es
la del primer grado de libertad. En consecuencia, el vector de arrastre “J” contiene valores uno
en las partes del vector que correspondan al primer grado de libertad de cada nodo.
E= ∫ (-M*J*ug)*v dt
J: El vector de arrastre
Se realiza una integral entre 0 y t. Obsérvese que ug es un vector que resulta de multiplicar la
información del archivo del terremoto por g (aceleración de la gravedad) para utilizarlo en el
cálculo de la energía.
29
Cálculos dinámicos y resultados
Inicialmente, se cargan los datos del modelo numérico como las matrices de rigidez y
de masas y las variables que contienen la información de la energía disipada en la
placa y los pilares. Además, se cargan las aceleraciones del terremoto que se quiere
utilizar en el análisis del balance de energía.
Obsérvese en la figura 12 que en los primeros 30s de duración del terremoto la energía de
amortiguamiento alcanza valores de 57000 N.mm de forma aproximada. Es decir, en los
primeros instantes del terremoto se disipa una gran cantidad de energía debido al
amortiguamiento de la estructura.
Obsérvese en la figura 13 que se alcanza a los 20s de duración una energía cinética de 7000
N.mm que es un de los valores más altos obtenidos, lo que significa que en esos instantes las
velocidades y aceleraciones de los nodos son las más altas en la estructura. La energía cinética
almacenada momentáneamente en los instantes iniciales del terremoto, se transforma en
energía de amortiguamiento y en energía de deformación plástica a medida que avanza el
tiempo.
31
Cálculos dinámicos y resultados
En la figura 14 se tiene la energía total introducida por el terremoto en la estructura. Hay que
comprobar que la energía introducida es igual a la energía almacenada/disipada en la
estructura. La energía introducida es de 58000 N.mm de forma aproximada. En la figura 14,
se puede apreciar un tramo inicial inferior a 20 s en el que la energía es nula porque en este
intervalo de tiempo la estructura se ha sometido únicamente a cargas gravitatorias.
En la figura 15 anterior, se puede observar que los valores más altos de energía almacenada
mediante deformaciones elásticas en la placa vale de 1,8 N.mm. Este es un valor muy
pequeño comparado con la cantidad total de energía introducida por el sismo.
33
Cálculos dinámicos y resultados
En la figura 17, se puede observar que los pilares almacenan/disipan valores de energía del
orden de 9000 N.mm, que son mucho mayores que los de la placa. Además, al final del
terremoto se puede observar que la energía no vale cero, lo que significa que los pilares han
plastificado y disipado energía mediante deformaciones plásticas.
E= Wes+Wp+Wh+Wk
En este apartado, se realiza una representación gráfica de las energías obtenidas. Además, se
realizan unas gráficas con la distribución de esfuerzos y energías en la placa. Estas figuras
permiten analizar el balance energético objeto del presente trabajo y estudiar como se
distribuyen los esfuerzos y la energía en la placa.
Obsérvese, que al finalizar el análisis dinámico esto es, cuando las aceleraciones introducidas
en la estructura son nulas se tiene un input de energía de 58000Nmm aproximadamente, una
energía de amortiguamiento Wh de 57000Nmm, una energía cinética Wk baja, una energía
disipada por los pilares de 1900Nmm y una energía disipada por la placa prácticamente nula
en esta estructura.
35
Cálculos dinámicos y resultados
Wh 57000 98,2%
Wk baja baja
E 58000
Tabla 3. Distribución de energía disipada/almacenada en la estructura
Según esta Tabla, los pilares han disipado mediante deforamciones plásticas un 3,2% de la
energía introducida por el terremoto y la placa ha disipado mediante deformaciones plásticas
una cantidad insignificante (prácticamente nula). Casi toda la energía introducida por el sismo
se ha disipado mediante el mecanismo de amortiguamiento. Este comportamiento se debe a
que la resistencia lateral de la estructura era elevada en relación a la acción sísmica aplicada,
por lo cual se ha mantenido básicamente elástica.
37
Cálculos dinámicos y resultados
Figura 20. Aceleración producida por el terremoto de Kobe y desplazamiento del nodo central de la placa.
Figura 21. La distribución de la aceleración del suelo y la velocidad del nodo central de la placa.
4.3.3.1 Esfuerzos
En concreto, se han representado los siguientes esfuerzos a los 20s del inicio terremoto
correspondiente. Se ha escogido el paso 2005 que está en un intervalo de aceleraciones igual a
0,22g con g=9810 N/mm2 como se muestra en la figura 22. Obsérvese que las aceleraciones
se miden en unidades de g y la aceleración máxima del suelo (PGA) es 0,22g como se
comentó anteriormente. Por tanto, se muestran los esfuerzos y las energías de mayor valor en
la placa.
39
Cálculos dinámicos y resultados
Figura 22. Acelerograma del terremoto de Kobe del archivo Kobe.txt y el valor del PGA considerado.
Se puede observar que el valor máximo de los esfuerzos es alrededor de la zona de los pilares.
Esto significa que se tienen los esfuerzos más grandes en las zonas de conexión placa con
pilar. Esta información es similar al análisis realizado con las gráficas de la distribución de la
energía donde se veía que los pilares disipan una cantidad de energía mayor que las placas.
41
Cálculos dinámicos y resultados
Análogamente, los esfuerzos Nxx, Nyy, Vxz y Vyz muestran magnitudes prácticamente nulas
en la placa. Analizando estos resultados, se obtiene que la mayor parte de los esfuerzos están
producidos por el Mxx y el torsor Mxy.
El Mxx es el momento que se aplica en la cara perpendicular al eje x local que es la dirección
en la que se aplica el terremoto considerado.
4.3.3.2 Energías
Como en el caso anterior, se han escogido las energías que se producen en el instante de
tiempo 20s esto es, el paso 2005 porque las aceleraciones son igualesa 0.22g. Así, se pueden
obtener los valores máximos de las energías disipadas en la placa.
Las figuras siguientes representan la energía elástico plástica disipada debido a cada esfuerzo
correspondiente.
Análogamente, las energías debido a los esfuerzos Mxx, Myy, Nxx, Nyy, Vxz y Vyz son
prácticamente nulas. Esto es así, porque si los esfuerzos son pequeños como vimos en el
42 Escuela Técnica Superior de Ingenieros Industriales (UPM)
Comportamiento sísmico de conexiones de hormigón armado con forjados
________________________________________________________________________________
apartado anterior al multiplicar por las deformaciones que son más pequeñas y realizar el
cálculo de la energía elástico plástica la energía obtenida es muy pequeña.
43
Conclusiones
5. CONCLUSIONES
En la segunda parte de este trabajo, los resultados de los análisis con Opensees se han
postprocesado mediante Matlab para obtener energías. Los resultados obtenidos a nivel global
muestran que se se satisface con suficiente precisión la ecuación de balance de energías en
cada instante del tiempo, lo que indica que el cálculo dinámico no lineal realizado es correcto.
Las pequeñas diferencias entre energía total introducida por el sismo y suma de energías
cinética, de amortiguamiento y de deformación elástica y plástica en la estructura se debe
probablemente a los pequeños errores que introducen las simplificaciones realizadas para
obtener cada una de las energías anteriores. Concretamente, a los errores en el cálculo de la
energía disipada por los pilares debido a que se han empleado sólo 5 puntos de Gauss.
Además, se ha considerado que alrededor de cada punto de Gauss los valores de los esfuerzos
y las deformaciones son constantes pero en la realidad no lo son sino que cambian de forma
continua a lo largo del pilar. Para mejorar el ajuste entre energía total introducida por el sismo
y la suma de energía almacenadas/disipadas en cada instante, se podrían añadir más puntos de
Gauss o emplear interpolaciones más precisas de los resultados obtenidos entre los puntos.
Los resultados de los cálculos muestran que la placa se ha mantenido básicamente elástica y
únicamente han deformado plásticamente los pilares. La energía disipada por los pilares es
pequeña (3.2) en relación al total de energía introducida, lo que indica que la estructura
globalmente se ha mantenido básicamente elástica. Ello se debe a que su resistencia lateral era
elevada en relación al nivel de intensidad del sismo aplicado.
Como futuras líneas de trabajo, sería interesante someter el mismo modelo numérico a
mayores niveles de intensidad sísmica y estudiar cómo se reparte, para cada nivel, el
porcentaje de energía disipada mediante deformaciones plásticas y mediante
amortiguamiento.
6. BIBLIOGRAFÍA
[1] Shaking table tests of a reinforced concrete waffle–flat plate structure designed following
modern codes: seismic performance and damage evaluation. Amadeo Benavent-Climent,
Jesús Donaire-Avila and Elena Oliver-Saiz
[2] Shake-table tests of a reinforced concrete frame designed following modern codes:
seismic performance and damage evaluation. Amadeo Benavent-Climent1, David Escolano-
Margarit and Leandro Morillas
[4] A shear wall element for nonlinear seismic analysis of super-tall buildings using
OpenSees. Xinzheng Lu a,n, LinlinXie, HongGuan, YuliHuang, XiaoLu
45
Planificación y presupuesto
7. PLANIFICACIÓN Y PRESUPUESTO
Para la planificación el presente trabajo se ha trabajado a lo largo del curso académico en dos
partes. La primera es el análisis del modelo en OpenSees para obtener los resultados y la
última parte es el análisis de funciones en Matlab para obtener la energía en la estructura.
Finalmente, se realiza un estudio de los diferentes resultados posibles para incluir en el
trabajo correspondiente.
Para el presupuesto se podría medir en horas de trabajo que son 300 horas para este trabajo de
forma aproximada durante el transcurso del año académico.
Anexos
1. Programas en OpenSees
2. Funciones en Matlab
47
Anexos
Anexo 1
1.1 AD.tcl
###################################################
Programa principal
###################################################
source Analysis.tcl
set Inf Inf
#------------------------------------
wipe
model basic -ndm 3 -ndf 6
source Nodes.tcl
set ::NodeEnd 13
# Masas
set m 0.5;
mass 1 $m 0 0 0 0 0
mass 3 $m 0 0 0 0 0
mass 5 $m 0 0 0 0 0
mass 7 $m 0 0 0 0 0
#Condiciones de contorno
fix 10 1 1 1 1 1 1
fix 11 1 1 1 1 1 1
fix 12 1 1 1 1 1 1
fix 13 1 1 1 1 1 1
source Materiales.tcl
source Secciones.tcl
set Trz 1
# set secTags "$Sv1 $Sv1 $Sv1 $Sv1 $Sv1 $Sv1 $Sv1 $Sv1 $Sv1 $Sv1"
set secTags "$Sv1 $Sv1 $Sv1 $Sv1 $Sv1"
set integration "FixedLocation $np $secTags $locations"
source FrameElem.tcl
source PlateElem.tcl
#------------------------------------
# OUTPUTS
set Outputs "Terremoto"
# ANALYSIS
# numberer RCM
numberer Plain
set ConvInf 0; # Información de la convergencia
# 0 print nothing
# 1 print information on norms each time test() is invoked
# 2 print information on norms and number of iterations at end of successful test
# 4 at each step it will print the norms and also the ΔU and R(U) vectors.
# 5 if it fails to converge at end of $numIter it will print an error message BUT RETURN A
SUCCESSFUL test
# MODEL MATRICES
# doMassMatrix $ConvInf $Outputs $Inf
# doStiffnessMatrix $ConvInf $Outputs $Inf
# MODAL ANALYSIS
set numModes 2;
doModes $numModes NoOutputs Inf
timeSeries Linear 1
pattern Plain 1 1 {
load 1 0 0 [expr -$m*$g] 0 0 0
load 3 0 0 [expr -$m*$g] 0 0 0
load 5 0 0 [expr -$m*$g] 0 0 0
load 7 0 0 [expr -$m*$g] 0 0 0
# definir las cargas
}
set ::dt $dF
49
Anexos
# DYNAMIC ANALYSIS
set iGMfile "Kobe" ; # ground-motion filenames, should be different files
# ReadVector "Earthquakes/BS2DirX100Hz.txt" THData StepN; # Lee numero de steps
set StepN 14000
exit
1.2 Nodes.tcl
node 1 0 0 0
node 2 1000 0 0
node 3 2000 0 0
node 4 2000 1000 0
node 5 2000 2000 0
node 6 1000 2000 0
node 7 0 2000 0
node 8 1000 1000 0
node 9 0 1000 0
node 10 0 0 -1500
node 11 0 2000 -1500
node 12 2000 2000 -1500
node 13 2000 0 -1500
1.3 Materiales.tcl
#Definicion materiales no elasticos para viga
#Areas de barra armadura
set pi [expr acos(-1.0)];
set g 9810;
#uniaxialMaterial Concrete04 $matTag $fc $ec $ecu $Ec $fct $et $beta
#Hormigón no confinado
#Tension MPa
set ::Hormigon 1
set Ec 30000;
set fc -44.0;
set epsc [expr 2.0*$fc/$Ec];
set fcu -0.0
set epscu -0.01545
set Ets [expr 0.1*$Ec]
set ft 2.8;
set epst [expr $ft/$Ec];
set beta 0.1
set dc 2.38e-9; # [T/mm3=2.344T/m3=Ns2/mm4] Densidad del concreto
set nuc 0.2; # Poisson Hormigon
set Gc [expr $Ec/(2*($nuc+1.0))]; # Shear modulus hormigón [N/mm^2]
uniaxialMaterial Concrete02 $Hormigon $fc $epsc $fcu $epscu $beta $ft $epst
set ::HormigonC 2;
uniaxialMaterial Concrete02 $HormigonC [expr $fc*$fMf] [expr $epsc*$fMd] [expr
$fcu*$fMf] [expr $epscu*$fMd] $beta $ft $Ets
51
Anexos
# $matTag $Fy $E $b $R0 $cR1 $cR2 <$a1 $a2 $a3 $a4 $sigInit>
uniaxialMaterial Steel02 $::Acero $fy $Es 0.005 18.5 0.925 0.15 ;
#Materiales elasticos
#Materiales placa elastica
#Definicion materiales placa elastica
set h 10; # h:mm
set E 2.1e5; #E:MPa
set nu 0.3
set rho 0.0
uniaxialMaterial Elastic 4 $E
set HormigonPlaca 32
# Hormigón $matTag 40 7 $fc $ft $fcu $epsc0 $epscu
$epstu $stc
nDMaterial PlaneStressUserMaterial 31 40 7 $fc $ft $fcu $epsc $epscu
[expr $ft/$Ec] 0.08; # Comprobar estos números
# nDMaterial PlateFromPlaneStress $matTag $PlaneStressMatTag
$OutOfPlaneShearModulus
nDMaterial PlateFromPlaneStress $HormigonPlaca 31 $Gc;
#
# Armadura
# Armadura en dirección Y
set AceroDirY 33
nDMaterial PlateRebar $AceroDirY $::Acero 90
# Armadura en dirección X
set AceroDirX 34
nDMaterial PlateRebar $AceroDirX $::Acero 0
1.4 Secciones.tcl
#Secciones
#Sección
section Fiber [expr $Sv1-2700] {
patch rect $HormigonC [expr int(($bSv1-2*$rmecSv1)/$fibra)] [expr int(($hSv1-
2*$rmecSv1)/$fibra)] [expr -$YcgSv1+$rmecSv1] [expr -$ZcgSv1+$rmecSv1] [expr
$YcgSv1-$rmecSv1] [expr $ZcgSv1-$rmecSv1];
patch rect $Hormigon [expr int(($bSv1-2*$desSv1)/$fibra)] [expr int(($rmecSv1-
$desSv1)/$fibra)] [expr -$YcgSv1+$desSv1] [expr $ZcgSv1-$rmecSv1] [expr $YcgSv1-
$desSv1] [expr $ZcgSv1-$desSv1];
patch rect $Hormigon [expr int(($bSv1-2*$desSv1)/$fibra)] [expr int(($rmecSv1-
$desSv1)/$fibra)] [expr -$YcgSv1+$desSv1] [expr -$ZcgSv1+$desSv1] [expr $YcgSv1-
$desSv1] [expr -$ZcgSv1+$rmecSv1];
patch rect $Hormigon [expr int(($rmecSv1-$desSv1)/$fibra)] [expr int(($hSv1-
2*$rmecSv1)/$fibra)] [expr -$YcgSv1+$desSv1] [expr -$ZcgSv1+$rmecSv1] [expr -
$YcgSv1+$rmecSv1] [expr $ZcgSv1-$rmecSv1];
patch rect $Hormigon [expr int(($rmecSv1-$desSv1)/$fibra)] [expr int(($hSv1-
2*$rmecSv1)/$fibra)] [expr $YcgSv1-$rmecSv1] [expr -$ZcgSv1+$rmecSv1] [expr
$YcgSv1-$desSv1] [expr $ZcgSv1-$rmecSv1];
53
Anexos
1.5 FrameElem.tcl
1.6 PlateElem.tcl
1.7 Analysis.tcl
###########################################################################
#
# PROCEDURES FOR OPENSEES ANALYSIS
#
#
#
#
###########################################################################
if {$Inf != "NoInf"} {
puts "--------------------------"
puts "MASS MATRIX"
}
system FullGeneral
constraints Transformation
if {$Inf != "NoInf"} {
puts "Writing M..."
}
reset
}
if {$Inf != "NoInf"} {
puts "--------------------------"
puts "STIFFNESS MATRIX"
}
system FullGeneral
constraints Transformation
reset
55
Anexos
if {$Inf != "NoInf"} {
puts "------------------------------------------------------"
puts "MODAL ANALYSIS"
}
system UmfPack
constraints Transformation
if {$numModes > 1} {
set lambda [eigen -genBandArpack $numModes];
} else {
set lambda [eigen -fullGenLapack $numModes];
}
set omega {}
set f {}
set T {}
set pi [expr acos(-1.0)];
if {$Inf != "NoInf"} {
puts "Periods are: $T -s-"
puts "Frequencies are: $f -Hz-"
}
if {$Outputs != "NoOutputs"} {
file mkdir $Outputs/Modes
for { set k 1 } { $k <= $numModes } { incr k } {
recorder Node -file [format "$Outputs/Modes/mode%i.out" $k] -time -nodeRange 1
"$::NodeEnd" -dof 1 2 3 4 5 6 "eigen $k"
}
set period "$Outputs/Modes/Periods.txt"
set Periods [open $period "w"]
foreach t $T {
puts $Periods " $t"
}
close $Periods
record
remove recorders
}
if {$Inf != "NoInf"} {
puts "------------------------------------------------------"
puts "GRAVITY ANALYSIS"
}
if {$Outputs != "NoOutputs"} {
source "Outputs.tcl";
}
system UmfPack
constraints Transformation
set itern 0
set ok 0
set currentDisp 0
while {$ok == 0 && $itern < $numSteps} {
set ok [analyze 1];
proc doPushover { dU maxU ControlNode dof ConvInf tol iter Outputs Inf} {
# Outputs: nombre de la carpeta Outputs o "NoOutputs" si no se quieren resultados
57
Anexos
if {$Inf != "NoInf"} {
puts "------------------------------------------------------"
puts "PUSHOVER ANALYSIS"
}
if {$Outputs != "NoOutputs"} {
source "Outputs.tcl";
}
system UmfPack
constraints Penalty 1.0e16 1.0e16;
set itern 0
set ok 0
set currentDisp 0
while {$ok == 0 && abs($currentDisp) < abs($maxU)} {
set ok [analyze 1];
if {$Inf != "NoInf"} {
puts Step:$itern
puts desp:$currentDisp
}
if {$Inf != "NoInf"} {
if {$ok == 0} {
puts "Pushover analysis completed SUCCESSFULLY";
} else {
puts "Pushover analysis FAILED";
}
}
return $ok
proc doDynamic {dtcal TmaxAnalysis FactorHHT ConvInf tol iter Outputs Inf} {
# Outputs: nombre de la carpeta Outputs o "NoOutputs" si no se quieren resultados
if {$Inf != "NoInf"} {
puts "------------------------------------------------------"
puts "DYNAMIC ANALYSIS"
puts "TmaxAnalysis:$TmaxAnalysis"
}
if {$Outputs != "NoOutputs"} {
source "Outputs.tcl";
}
system UmfPack
constraints Transformation
set itern 0
set ok 0
set controlTime 0;
while {$controlTime < $TmaxAnalysis && $ok == 0} {
set controlTime [getTime];
set ok [analyze 1 $dtcal];
set ok [DynamicAlgoritm $ok $Inf $itern $dtcal $tol $iter $controlTime $ConvInf]
# ----------------------------------------------------------------------------------------------
# if {$Inf != "NoInf"} {
# source InfDuringEartquake.tcl
#}
# ----------------------------------------------------------------------------------------------
# puts Step:$itern
# puts CurrentTime:$controlTime
}
if {$Inf != "NoInf"} {
if {$ok == 0} {
puts "Transient analysis completed SUCCESSFULLY End Time: [getTime]";
} else {
puts "Transient analysis FAILED End Time: [getTime]";
59
Anexos
}
}
return $ok
}
proc doReversedCyclicPushover {iDstep dU ControlNode dof ConvInf tol iter Outputs Inf} {
# Outputs: nombre de la carpeta Outputs o "NoOutputs" si no se quieren resultados
if {$Inf != "NoInf"} {
puts "------------------------------------------------------"
puts "REVERSED CYCLIC PUSHOVER"
}
puts $Outputs
if {$Outputs != "NoOutputs"} {
source "Outputs.tcl";
}
system UmfPack
constraints Penalty 1.0e16 1.0e16;
set D0 0.0
foreach Dstep $iDstep {
set D1 $Dstep
set Dincr [expr $D1 - $D0]
set itern 0
set ok [analyze 1]
return $ok
if {$Inf != "NoInf"} {
puts "Trying NewtonWithLineSearch .."
puts Step:$itern
}
algorithm NewtonLineSearch 0.8
set ok [analyze 1];
if {$ok == 0} {puts "that worked .. back to KrylovNewton"}
algorithm KrylovNewton;
}
if {$ok != 0} {
if {$Inf != "NoInf"} {
puts "Trying Broyden .."
}
test NormDispIncr $tol $iter $ConvInf;
algorithm Broyden 20
set ok [analyze 1];
if {$ok == 0} {puts "that worked .. back to KrylovNewton"}
algorithm KrylovNewton;
}
if {$ok != 0} {
if {$Inf != "NoInf"} {
puts "Trying ModifiedNewton with Initial Tangent .."
}
test NormDispIncr $tol $iter $ConvInf; # if the analysis fails try initial tangent iteration
algorithm ModifiedNewton –initial;
set ok [analyze 1];
if {$ok == 0} {puts "that worked .. back to KrylovNewton"}
test NormDispIncr $tol $iter $ConvInf;
algorithm KrylovNewton;
}
if {$ok != 0} {
if {$Inf != "NoInf"} {
puts "Trying Newton with Initial Tangent .."
}
test NormDispIncr $tol $iter $ConvInf; # if the analysis fails try initial tangent iteration
algorithm Newton –initial;
set ok [analyze 1];
if {$ok == 0} {puts "that worked .. back to KrylovNewton"}
test NormDispIncr $tol $iter $ConvInf;
algorithm KrylovNewton;
}
return $ok
}
proc DynamicAlgoritm {ok Inf itern dtcal tol iter controlTime ConvInf} {
61
Anexos
if {$ok != 0} {
if {$Inf != "NoInf"} {
puts "Trying NewtonWithLineSearch .."
puts Step:$itern
puts CurrentTime:$controlTime
}
test NormDispIncr $tol $iter $ConvInf;
# test EnergyIncr $tol $iter $ConvInf
algorithm NewtonLineSearch .8
set ok [analyze 1 $dtcal];
if {$ok == 0} {puts "that worked .. back to KrylovNewton"}
test NormDispIncr $tol $iter $ConvInf;
# test EnergyIncr $tol $iter $ConvInf
algorithm KrylovNewton;
}
if {$ok != 0} {
if {$Inf != "NoInf"} {
puts "Trying Broyden .."
}
test NormDispIncr $tol $iter $ConvInf;
# test EnergyIncr $tol $iter $ConvInf
algorithm Broyden 20
set ok [analyze 1 $dtcal];
if {$ok == 0} {puts "that worked .. back to KrylovNewton"}
test NormDispIncr $tol $iter $ConvInf;
# test EnergyIncr $tol $iter $ConvInf
algorithm KrylovNewton;
}
if {$ok != 0} {
if {$Inf != "NoInf"} {
puts "Trying ModifiedNewton with Initial Tangent .."
}
test NormDispIncr $tol $iter $ConvInf; # if the analysis fails try initial tangent iteration
# test EnergyIncr $tol $iter $ConvInf
algorithm ModifiedNewton –initial;
set ok [analyze 1 $dtcal];
if {$ok == 0} {puts "that worked .. back to KrylovNewton"}
test NormDispIncr $tol $iter $ConvInf;
# test EnergyIncr $tol $iter $ConvInf
algorithm KrylovNewton;
}
if {$ok != 0} {
if {$Inf != "NoInf"} {
puts "Trying Newton with Initial Tangent .."
}
test NormDispIncr $tol $iter $ConvInf; # if the analysis fails try initial tangent iteration
return $ok
}
if {$Inf != "NoInf"} {
puts "------------------------------------------------------"
puts "DAMPING MODEL"
puts "Damping Ratio: $DampingRatio"; # damping ratio
}
if {$nEigenJ > 1} {
set lambdaN [eigen -genBandArpack $nEigenJ]; # eigenvalue analysis for
nEigenJ modes
} else {
set lambdaN [eigen -fullGenLapack $nEigenJ]; # eigenvalue analysis for
nEigenJ modes
}
if {$Model == "Mass"} {
if {$Inf != "NoInf"} {
puts "Damping Model: Mass"
}
set alphaM [expr 2*$DampingRatio*$omegaI]; # M-prop. damping; D = alphaM*M
puts alphaM:$alphaM
set betaKcurr 0.0
set betaKinit 0.0
set betaKcomm 0.0
rayleigh $alphaM $betaKcurr $betaKinit $betaKcomm;
63
Anexos
if {$nEigenJ > 1} {
if {$Model == "RayleighKini"} {
if {$Inf != "NoInf"} {
puts "Damping Model: Rayleigh Kini "
}
if {$Inf != "NoInf"} {
puts "Damping Model: Rayleigh Kcomm"
}
if {$Inf != "NoInf"} {
puts "Damping Model: Rayleigh Kcurr"
}
65
Anexos
Anexo 2
2.1 Principal.m
clc; clear; close all; tic; disp('OPENSEES')
%% Ejecución de OpenSees
disp('Calculando...')
!OpenSees250r6477.exe "AD".tcl
% !OpenSees2.5.exe "AD".tcl
disp('...fin del cálculo')
2.2 BalanceEnergetico
clc;clear;close all;
%% Balance energético
currf=pwd;
g=9810;
t=disp(1:end-1,1);
n=length(t);
gdl=size(U,2);
V=zeros(n,gdl);
for i=1:gdl
V(:,i)=dxdt(U(:,i),t);
end
cd('../Matrices')
M=load('M.out');
K=load('K.out');
cd('../../Earthquakes')
Ug=load('Kobe.txt')*g;
cd(currf)
load('EnergiaElasticaPlasticaPlaca/Wplaca.mat')
load('EnergiaElasticaPlasticaLineal/Wviga.mat')
%% Energía de Amortiguamiento
DampingRatio=0.024;
Method=1;
[Wh,Whgdl] = DampingEnergy (t,K,M,V,DampingRatio,Method);
%% Energía cinética
Wk=(1/2)*(diag(M)'*(V.*V)')';
%% Input de Energía
[E,Egdl] = InputEnergy(V,t,M,Ug*1.0,1);
Wp=Wviga+Wplaca;
%% Gráficas
figure(1)
plot(t,E,t,Wh,t,Wk,t,Wplaca,t,Wviga)
legend('E','Wh','Wk','Wplaca','Wviga','location','Northwest')
xlabel('Tiempo [s]')
ylabel('Energía [Nmm]')
figure(2)
plot(t,E-Wk,t,Wh,t,Wh+Wviga,t,Wh+Wviga+Wplaca)
legend('E-Wk','Wh','Wh+Wviga','Wh+Wviga+Wplaca','location','Northwest')
xlabel('Tiempo [s]')
ylabel('Energía [Nmm]')
figure(3)
plot(t,utop(:,1),t,Ug/100)
legend('disp','AcelMesa')
xlabel('Tiempo [s]')
ylabel('Desplazamiento [mm]')
figure(4);
plot(t,E,t,Wplaca+Wviga+Wh+Wk);
legend('Input','Wes+Wp+Wh+Wk');
xlabel('t (s)');
ylabel('Energia (Nmm)');
2.3 Buscarnuevo
function [data_u]=Buscarnuevo(nom_archivo,buscar)
%Funcion para leer un dato de un archivo
% Data reading and manipulation
fid = fopen(nom_archivo,'rt+'); % abre fichero de datos
i=1;
end
fclose(fid);
end
2.4 Coordglnuevo
function [x1,y1,z1]=Coordglnuevo(nom_archivo,node)
67
Anexos
n=num2str(node);
buscar=strcat(['node',' ',n]); %nodo a buscar
c=0;
2.5 Infgpnuevo
function gpgl=Infgpnuevo(xglobal,yglobal,gpeta,gpneta)
%Funcion que transforma las coordenadas locales del elemento normalizado de
%los puntos de Gauss en las coordenadas globales
% for i=1:size(gpeta,2)
N1e=0.25*(gpeta-1)*(gpneta-1);
N2e=-0.25*(gpeta+1)*(gpneta-1);
N3e=0.25*(gpeta+1)*(gpneta+1);
N4e=-0.25*(gpeta-1)*(gpneta+1);
Ne=[N1e N2e N3e N4e];
gpgl=[Ne*xglobal' Ne*yglobal'];
% Falta la coordenada z hay que obtenerla con un plano definido por 3
puntos
% y la coordenada z será la intersección entre el plano y la recta vertical
% que pase por la corrdenada x,y
end
2.6 LeeDato
function [data_u]=LeeDato(nom_archivo,buscar,n)
% Data reading and manipulation
fid = fopen(nom_archivo,'rt+'); % abre fichero de datos
end
fclose(fid);
end
2.7 PrincipalPlaca
%Funcion que calcula los esfuerzos en los puntos de Gauss de varios
elementos placa
%Definicion puntos de Gauss,pasos y numero de elementos del modelo
clc;clear
currf=pwd;
puntosgauss=4;
elemP0=4;
elemPf=8;
elemPt=elemPf-elemP0;
% p=10;
c2=0;
l=0;
% xdamp=0.024;
% addpath('Datos modelo')
addpath('..\..\Funciones')
addpath('..\..\Modelo\Terremoto\SectionForce')
addpath('..\..\Modelo\Terremoto\Displacement')
cd ..
cd ..
cd('Modelo')
cd('Terremoto')
cd('SectionForce')
% nom_archivo4='nodesdispplaca.out'
%----------------------------------------------------------
nodes=zeros(elemPt,4);
gpeta=zeros(elemPt,4);
gpneta=zeros(elemPt,4);
xglobal=zeros(elemPt,4);
yglobal=zeros(elemPt,4);
zglobal=zeros(elemPt,4);
gpgl=zeros(4*elemPt,2);
Nxx=[];
Nyy=[];
Nxy=[];
Mxx=[];
Myy=[];
Mxy=[];
69
Anexos
Vxz=[];
Vyz=[];
exx=[];
eyy=[];
gammaxy=[];
curxx=[];
curyy=[];
curxy=[];
gammaxz=[];
gammayz=[];
b=0;
for j=1:elemPt
for i=1:puntosgauss
b=b+1;
a=num2str(i);
e=num2str(j+elemP0);
nom_force=strcat('PlacaEle',e,'pg',a,'force.out');
nom_def=strcat('PlacaEle',e,'pg',a,'def.out');
nom_nodos='Nodes.tcl';
s=strcat(s,' %f');
end
[data_esf]=LeeDato(nom_force,'Data',s);
c=0;
Nxx(:,b)=data_esf(:,2);
Nyy(:,b)=data_esf(:,3);
Nxy(:,b)=data_esf(:,4);
Mxx(:,b)=-data_esf(:,5);
Myy(:,b)=-data_esf(:,6);
Mxy(:,b)=-data_esf(:,7);
Vxz(:,b)=data_esf(:,8);
Vyz(:,b)=data_esf(:,9);
[data_def]=LeeDato(nom_def,'Data',s);
c=0;
exx(:,b)=data_def(:,2);
eyy(:,b)=data_def(:,3);
gammaxy(:,b)=data_def(:,4);
curxx(:,b)=data_def(:,5);
curyy(:,b)=data_def(:,6);
curxy(:,b)=data_def(:,7);
gammaxz(:,b)=data_def(:,8);
gammayz(:,b)=data_def(:,9);
Lpx(j,1)=abs(xglobal(j,1)-xglobal(j,3))/2;
Lpy(j,1)=abs(yglobal(j,1)-yglobal(j,3))/2;
end
end
Wppg=WppgNxx+WppgNyy+WppgNxy+WppgMxx+WppgMyy+WppgMxy+WppgVxz+WppgVyz;
Wp(1,:)=sum(Wppg,2);%Energia total de los puntos de Gauss de toda la placa
Wplaca=Wp;
cd(currf)
save('Wplaca','Wplaca');
2.8 Principalpilar
71
Anexos
puntosgauss=5;
L=1500;
Lp=L/puntosgauss;
elemP0=0;
elemPf=4;
elemPt=elemPf-elemP0;
% p=10;
c2=0;
l=0;
% xdamp=0.024;
% addpath('Datos modelo')
addpath('..\..\Funciones')
addpath('..\..\Modelo\Terremoto\SectionForce')
addpath('..\..\Modelo\Terremoto\Displacement')
cd ..
cd ..
cd('Modelo')
cd('Terremoto')
cd('SectionForce')
% nom_archivo4='nodesdispplaca.out'
%----------------------------------------------------------
nodes=zeros(elemPt,2);
gpeta=zeros(elemPt,puntosgauss);
xglobal=zeros(elemPt,2);
yglobal=zeros(elemPt,2);
zglobal=zeros(elemPt,2);
% gpgl=zeros(4*elemPt,3);
N=[];
Mz=[];
My=[];
T1=[];
Vz=[];
Vy=[];
T2=[];
ex=[];
curz=[];
curv=[];
gamma1=[];
gammaz=[];
curxy=[];
gammay=[];
gamma2=[];
b=0;
for j=1:elemPt
for i=1:puntosgauss
b=b+1;
a=num2str(i);
e=num2str(j+elemP0);
nom_force=strcat('VigaEle',e,'pg',a,'force.out');
nom_def=strcat('VigaEle',e,'pg',a,'def.out');
nom_nodos='Nodes.tcl';
[data_esf]=LeeDato(nom_force,'Data',s);
c=0;
N(:,b)=data_esf(:,2);
Mz(:,b)=data_esf(:,3);
My(:,b)=data_esf(:,4);
T1(:,b)=data_esf(:,5);
Vz(:,b)=data_esf(:,6);
Vy(:,b)=data_esf(:,7);
T2(:,b)=data_esf(:,8);
[data_def]=LeeDato(nom_def,'Data',s);
c=0;
ex(:,b)=data_def(:,2);
curz(:,b)=data_def(:,3);
cury(:,b)=data_def(:,4);
gamma1(:,b)=data_def(:,5);
gammaz(:,b)=data_def(:,6);
73
Anexos
gammay(:,b)=data_def(:,7);
gamma2(:,b)=data_def(:,8);
% Lpx(j,1)=abs(xglobal(j,1)-xglobal(j,3))/2;
% Lpy(j,1)=abs(yglobal(j,1)-yglobal(j,3))/2;
end
end
% Wppg=WppgN+WppgMz+WppgMy+WppgT1+WppgVz+WppgVy+WppgT2;
% Wppg=WppgMz+WppgMy+WppgT1+WppgVz+WppgVy+WppgT2;
Wppg=WppgMy+WppgT1+WppgVz+WppgVy+WppgT2;
Wp(1,:)=sum(Wppg,2);%Energia total de los puntos de Gauss de toda la placa
Wviga=Wp;
cd(currf)
save('Wviga','Wviga');
2.9 DampingEnergy
function [Wh,Whgdl] = DampingEnergy (t,K,M,V,DampingRatio,Method)
gdl=length(M);
n=length(t);
Whgdl=zeros(n,gdl);
Lamb=eig(K,M);
inf=isinf(Lamb);
Lamb(inf)=[];
w=sort(sqrt(Lamb));
% f=w./(2*pi);
% T=1./f;
if Method==1 %Mass Method
a0=2*DampingRatio*w(1);
C=a0*M;%Se coge el primer modo de vibracion
elseif Method==2 %Rayleigh Method Kini
% Se incluiria este metodo correspondiente
end
F=(V.*V)*C;
for i=1:gdl
Whgdl(:,i)=cumtrapz(t,F(:,i));
end
Wh=sum(Whgdl,2);
end
2.10 InputEnergy
function [E,Egdl] = InputEnergy(V,t,M,Ug,gdlDir)
gdl=length(M);
n=length(t);
J=zeros(gdl,1);
Egdl=zeros(n,gdl);
for i=gdlDir:6:gdl
J(i,1)=1;
end
F=(V'.*(-M*J*Ug'))';
for i=1:gdl
Egdl(:,i)=cumtrapz(t,F(:,i));
end
E=sum(Egdl,2);
end
2.11 CurvasNivelpasoNEW
%% Curvas de nivel
%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
xplot=gpgl(:,1);
yplot=gpgl(:,2);
fig1=figure(1);
set(fig1,'position',[1 31 1280 696])
for i=2080%i=22000:50:25111;%1:size(esf,2)
esfi=Mxx(i,:);
[xi,yi] = meshgrid(-100:10:2100,-100:10:2100);
zi = griddata(xplot,yplot,esfi,xi,yi,'cubic');
surf(xi,yi,zi)
% meshc(xi,yi,zi)
% contourf(xi,yi,zi,25)
colorbar
caxis([-2e4 2e4])
axis([-100 2100 -100 2100 -1500 1500 ])
% axis([-500 80 -500 500])
%Muestra la localizacion los puntos de gauss
% hold
% plot(xplot,yplot,['o' 'w'])
% pause(1)
end
75