Subido por Jorge Cuca

SD61

Anuncio
Las Series del Instituto de Ingeniería describen los resultados de algunas de las
investigaciones más relevantes de esta institución. Con frecuencia son trabajos in
extenso de artículos que se publican en revistas especializadas, memorias de
congresos, etc.
Cada número de estas Series se edita con la aprobación técnica del Comité
Editorial del Instituto, basada en la evaluación de árbitros competentes en el tema,
adscritos a instituciones del país y/o el extranjero.
Actualmente hay tres diferentes Series del Instituto de Ingeniería:
Incluye trabajos originales sobre investigación y/o desarrollo tecnológico. Es continuación de la Serie Azul u Ordinaria, publicada por el Instituto de Ingeniería desde
1956, la cual actualmente tiene nueva presentación y admite textos en español
e inglés.
SERIE DOCENCIA
Está dedicada a temas especializados de cursos universitarios para facilitar a
estudiantes y profesores una mejor comprensión de ciertos temas importantes de
los programas de estudio.
SERIE MANUALES
Abarca manuales útiles para resolver problemas asociados con la práctica profesional o textos que describen y explican el estado del arte o el estado de la
práctica en ciertos temas. Incluye normas, manuales de diseño y de laboratorio,
reglamentos, comentarios a normas y bases de datos.
Introducción al análisis estructural con OpenSees
SERIE INVESTIGACIÓN Y DESARROLLO
Introducción
al análisis estructural
con OpenSees
ISBN: 978-607-30-3085-4
Las Series del Instituto de Ingeniería pueden consultarse gratuitamente
desde la dirección electrónica del Instituto http://www.ii.unam.mx
(http://aplicaciones.iingen.unam.mx/ConsultasSPII/Buscarpublicacion.aspx)
y pueden grabarse o imprimirse en formato PDF desde cualquier computadora.
Luis Ivan Velasco Enriquez
SD 61 / 2020
Héctor Guerrero Bobadilla
Serie
Docencia
Publicación arbitrada
SD 61
ABRIL, 2020
Serie
DOCENCIA
Publicación arbitrada
Las Series del Instituto de Ingeniería describen los resultados de algunas de las
investigaciones más relevantes de esta institución. Con frecuencia son trabajos
in extenso de artículos que se publican en revistas especializadas, memorias de
congresos, etc.
Actualmente hay tres diferentes Series del Instituto de Ingeniería:
SERIE INVESTIGACIÓN Y DESARROLLO
Incluye trabajos originales sobre investigación y/o desarrollo tecnológico. Es
continuación de la Serie Azul u Ordinaria, publicada por el Instituto de Ingeniería
desde 1956, la cual actualmente tiene nueva presentación y admite textos en
español e inglés.
SERIE DOCENCIA
Está dedicada a temas especializados de cursos universitarios para facilitar a
estudiantes y profesores una mejor comprensión de ciertos temas importantes de
los programas de estudio.
SERIE MANUALES
Abarca manuales útiles para resolver problemas asociados con la práctica
profesional o textos que describen y explican el estado del arte o el estado de la
práctica en ciertos temas. Incluye normas, manuales de diseño y de laboratorio,
reglamentos, comentarios a normas y bases de datos.
Introducción al análisis estructural con OpenSees
Cada número de estas Series se edita con la aprobación técnica del Comité Editorial
del Instituto, basada en la evaluación de árbitros competentes en el tema, adscritos
a instituciones del país y/o el extranjero.
Las Series del Instituto de Ingeniería pueden consultarse gratuitamente
desde la dirección electrónica del Instituto (II UNAM), http://www.ii.unam.
mx (http://aplicaciones.iingen.unam.mx/ConsultasSPII/Buscarpublicacion.
aspx) y pueden grabarse o imprimirse en formato PDF desde cualquier
computadora.
INTRODUCCIÓN AL ANÁLISIS
ESTRUCTURAL CON OPENSEES
ISBN: 978-607-30-3085-4
SD 61 / 2020
LUIS IVAN VELASCO ENRIQUEZ
HÉCTOR GUERRERO BOBADILLA
SD-61
ABRIL, 2020
Publicación arbitrada
ISBN 978-607-30-3085-4
INTRODUCCIÓN AL ANÁLISIS
ESTRUCTURAL CON OPENSEES
Luis Ivan Velasco Enriquez1
IIUNAM
[email protected]
Héctor Guerrero Bobadilla2
IIUNAM
[email protected]
Serie Docencia 61
Abril 2020
1
2
Estudiante
Investigador Asociado
Introducción al análisis estructural con OpenSees
Primera edición, Abril de 2020
Serie Docencia 61
D.R.© 2020 Universidad Nacional Autónoma de México
Instituto de Ingeniería, UNAM
Ciudad Universitaria, CP 04510, Ciudad de México
ISBN 978-607-30-3085-4
La obra fue editada por el Instituto de Ingeniería, de la Universidad Autónoma de
México (IIUNAM). El cuidado de la edición estuvo a cargo de la Unidad de
Promoción y Comunicación del IIUNAM. Esta obra está gratuitamente disponible
para consulta e impresión, en archivo PDF de 2.4 MB, en la sección de
Publicaciones del portal electrónico del IIUNAM, http://www.iingen.unam.mx, desde
que se terminó de editar.
iii
Dedicatoria
A Aldo, Diana y Kalef
Luis Ivan Velasco Enriquez
A mi familia y amigos
Héctor Guerrero Bobadilla
v
Prefacio
El objetivo principal de este libro es brindar a estudiantes, académicos y profesionales
de la Ingeniería Estructural una explicación amigable y clara sobre el programa OpenSees
(2018). A lo largo del libro, el lector encontrará diferentes ejemplos de estructuras analizadas
con OpenSees. Cada ejemplo cuenta con una descripción de la estructura, del código que
construye al modelo y de los comandos que se emplean en el ejemplo. De manera adicional,
se anexan los códigos de cada modelo, de tal manera que el lector podrá realizar los ejemplos
en su propia computadora.
Al finalizar la lectura de este documento, el lector conocerá los comandos
fundamentales para evaluar expresiones matemáticas, establecer variables y definir
estructuras condicionales básicas en el lenguaje de programación TCL, esencial para el
manejo de OpenSees. También, estará familiarizado con la metodología y los comandos
necesarios para crear y analizar modelos estructurales bajo cargas estáticas y dinámicas en
OpenSees y podrá analizar de manera no lineal estructuras metálicas y de concreto.
Ciudad Universitaria, Cd Mx
Febrero 2020
Luis Ivan Velasco Enriquez y
Héctor Guerrero Bobadilla
vi
Agradecimientos
Los autores gradecen el apoyo del Instituto de Ingeniería de la Universidad Nacional
Autónoma de México por brindar la infraestructura necesaria; sin ella no hubiera sido posible
publicar este libro.
vii
Resumen
Este libro presenta una introducción al análisis estructural usando el programa Opensees.
Este programa ha cobrado mucha popularidad en la comunidad internacional por su
eficiencia para realizar simulaciones sísmicas. El documento inicia con una introducción al
lenguaje TCL, que es el lenguaje usado por el programa Opensees. Después se realizan
algunos ejemplos de estructuras sujetas a cargas estáticas y dinámicas. Se incluyen también
ejemplos con comportamiento elástico e inelástico. Por último, el libro explica cómo modelar
estructuras equipadas con disipadores de energía sísmica.
Palabras clave: OpenSees, análisis estructural, comportamiento inelástico,
simulaciones sísmicas, modelado de disipadores
viii
Abstract
This book presents an introduction to structural analysis using OpenSees. This program has
taken great popularity in international community due to its efficiency for carrying out
seismic simulations. The document starts explaining simple commands in TCL language,
which is the programing language used by OpenSees. Afterwards, some examples of
structures are analyzed under static and dynamic loads. Examples that consider elastic and
inelastic behavior are included as well. Finally, the book explains modelling of structures
equipped with seismic energy dissipaters.
Keywords: OpenSees, structural analysis, inelastic behavior, seismic simulations,
modeling of dissipaters
ix
Índice
1.
Introducción .............................................................................................................. 1
2.
OpenSees y lenguaje TCL......................................................................................... 3
3.
4.
5.
2.1
Orígenes de OpenSees ......................................................................................... 3
2.2
Ambiente de OpenSees ........................................................................................ 4
2.3
Interfaz de OpenSees ........................................................................................... 4
2.4
Descarga de OpenSees ......................................................................................... 5
2.5
Conocimientos básicos del lenguaje Tcl ............................................................... 6
2.6
Procedimientos .................................................................................................. 10
2.7
Introducción de comandos en OpenSees............................................................. 10
2.8
Visualización del modelo 1.08 ........................................................................... 11
2.9
Ayudas disponibles en línea ............................................................................... 12
2.10
Organización del documento .............................................................................. 13
Modelado y análisis estático de una armadura ...................................................... 15
3.1
Descripción del modelo ..................................................................................... 15
3.2
Descripción del código....................................................................................... 16
3.3
Comandos adicionales empleados ...................................................................... 19
Determinación de los modos y frecuencias de un marco de concreto ................... 23
4.1
Descripción del modelo ..................................................................................... 23
4.2
Descripción del código....................................................................................... 24
4.3
Comandos adicionales empleados ...................................................................... 26
Análisis dinámico lineal de una columna ............................................................... 31
5.1
Descripción del modelo ..................................................................................... 31
x
6.
7.
8.
5.2
Descripción del código....................................................................................... 32
5.3
Comandos adicionales empleados ...................................................................... 35
Análisis estático no lineal de un marco conformado por perfiles metálicos ......... 41
6.1
Descripción del modelo ..................................................................................... 41
6.2
Descripción del código....................................................................................... 42
6.3
Comandos adicionales empleados ...................................................................... 46
Análisis dinámico no lineal de un marco de concreto reforzado ........................... 53
7.1
Descripción del modelo ..................................................................................... 53
7.2
Descripción del código....................................................................................... 54
7.3
Comandos adicionales empleados ...................................................................... 58
Análisis dinámico de un marco reforzado con amortiguador viscoso................... 67
8.1
Descripción del modelo ..................................................................................... 67
8.2
Descripción del código....................................................................................... 68
8.3
Comandos adicionales empleados ...................................................................... 72
9. Análisis dinámico de un marco reforzado con un contraventeo restringido al
pandeo ............................................................................................................................ 77
9.1
Descripción del modelo ..................................................................................... 77
9.2
Descripción del código....................................................................................... 79
10. Análisis dinámico de un marco reforzado con un contraventeo convencional ..... 87
10.1
Descripción del modelo .................................................................................. 87
10.2
Descripción del código ................................................................................... 88
10.3
Comandos adicionales empleados................................................................... 91
11. Análisis dinámico incremental (ADI) ..................................................................... 95
11.1
Descripción del modelo .................................................................................. 95
11.2
Descripción del código ................................................................................... 95
12. Conclusiones .......................................................................................................... 101
Referencias ................................................................................................................... 103
1
1. Introducción
Este libro se escribe con la finalidad de introducir a los nuevos usuarios de OpenSees
en el modelado y análisis de estructuras por medio de esta herramienta. Debido a que el
manual está dirigido a nuevos usuarios, el contenido aquí presentado resulta ser básico y se
recomienda consultar el manual en línea del programa para aclaraciones y discusiones más
profundas sobre las posibilidades y limitaciones de éste. Es importante indicar que algunos
de los ejemplos discutidos en este documento son procedentes de la página en línea.
Este documento inicia con una introducción a OpenSees y al lenguaje Tcl. Se presenta
el ambiente de OpenSees explicando sus características y ventajas. Se indica la manera de
evaluar expresiones matemáticas, de establecer variables y de definir estructuras de control
básicas en lenguaje Tcl. Esta sección permite al lector familiarizarse con el modelado en
OpenSees y brinda los conocimientos elementales para el manejo del lenguaje Tcl.
En el Capítulo 2 se presenta un ejemplo de modelado y análisis estático de una
armadura en 2D. La estructura se modela y analiza linealmente bajo cargas estáticas. El
objetivo de este ejemplo es brindar una introducción al modelado y análisis de estructuras en
OpenSees a través de un ejemplo sencillo conformado por elementos con secciones
generales.
En el Capítulo 3 se presenta un ejemplo de determinación de los modos y frecuencias
de un marco de concreto. Pare ello, se modela un marco de concreto de dos niveles y una
crujía. Posteriormente, se determinan las frecuencias naturales y modos de vibrar de la
estructura. A través de este ejemplo se aprende a definir materiales y se conoce el proceso
para establecer secciones de concreto en OpenSees. De manera adicional, se aprende a definir
masas y a determinar las frecuencias naturales de una estructura.
2
En el Capítulo 4 se realiza un análisis dinámico lineal de una columna; en donde se
modela un elemento con una sección transversal general y una masa actuante en la parte
superior. Se realiza un análisis dinámico de la estructura sometiéndola a un registro de
aceleraciones en su base. Este ejemplo permite conocer el procedimiento para realizar un
análisis en el tiempo de una estructura sencilla, mostrando además la manera de simular
movimientos sísmicos en OpenSees.
En el Capítulo 5 se realiza un análisis estático no lineal (también conocido como
pushover) de un marco de tres niveles y dos crujías en 2D conformado por perfiles metálicos.
A través de este ejemplo se aprende la forma de definir secciones metálicas en cajón y doble
T en Opensees. Se indica la manera de crear elementos con articulaciones plásticas y se
describe el proceso para realizar un análisis estático no lineal.
En el Capítulo 6 se presenta el análisis dinámico no lineal de un marco de concreto
reforzado. La estructura, que consta de tres niveles y tres crujías, es sometida a un un
movimiento sísmico en la base. El ejemplo ilustra el manejo de comandos de control para el
modelado de estructuras, describe la manera de definir el amortiguamiento estructural y
permite dar una introducción al daño estructural.
En los capítulos 7, 8 y 9 se presentan análisis dinámicos de un marco equipado con
un amortiguador viscoso, un contraventeo restringido al pandeo, y un contraventeo
convencional, respectivamente. El marco de concreto reforzado consta de un nivel y una
crujía. En cada capítulo se realizan análisis dinámicos y se discutirán los resultados
obtenidos. A través de estos ejemplos se aprende la manera de modelar disipadores viscosos,
contraventeos restringidos al pandeo y contraventeos convencionales en OpenSees.
Finalmente, en el Capítulo 10 se describe una manera de realizar un Análisis
Dinámico Incremental (ADI) en OpenSees. A través de este ejemplo se muestra una de las
grandes ventajas de OpenSees, que es su capacidad de realizar múltiples análisis a un mismo
modelo de manera automatizada.
3
2. OpenSees y lenguaje TCL
2.1 Orígenes de OpenSees
OpenSees (del inglés Open System for Earthquake Engineering Simulation) es un
programa de licencia libre que permite analizar estructuras y modelos geotécnicos bajo
cargas gravitacionales y dinámicas. Esta herramienta tiene sus orígenes en la tesis doctoral
de Francis McKenna (Mackenna, 1997). Hoy en día, gracias a las aportaciones de
investigadores de diferentes universidades y al patrocinio y desarrollo de la misma por parte
del Pacific Earthquake Engineering Research Center de los Estados Unidos de
Norteamérica, OpenSees cuenta con un gran abanico de comandos para definir materiales,
elementos y procedimientos de análisis.
A pesar que el código de OpenSees fue definido originalmente en lenguaje C++, los
usuarios deben de combinar el uso de comandos preestablecidos, los cuales llaman
procedimientos para la definición y análisis del modelo, con instrucciones en TCL (del inglés
Tool Command Language) para el uso del programa. Por este motivo, es necesario contar
con un conocimiento fundamental del lenguaje TCL para un manejo básico de OpenSees.
Al ser OpenSees un programa de licencia libre, éste se encuentra en continuo
desarrollo y algunas de las estructuras de sus comandos pueden variar con el paso del tiempo.
Sin embargo, en la página en internet (OpenSees, 2018) del programa es posible encontrar
información actualizada sobre las modificaciones que han tenido lugar en el manejo de
OpenSees. Debido a lo anterior, se recomienda recurrir a dicha página oficial de manera
frecuente.
4
2.2 Ambiente de OpenSees
Para modelar y analizar un sistema estructural, el usuario debe definir tres diferentes
conjuntos de elementos a OpenSees. Estos conjuntos son: ModelBuilder, Analysis y
Recorder, siendo estos comunicados por el objeto Domain. La Figura 2.1 muestra un
esquema simplificado de estos elementos.
Domain
ModelBuilder
Analysis
Recorder
Figura 2.1 Ambiente de OpenSees
ModelBuilder. Es la parte del programa donde se definen los elementos para construir
el modelo, es decir, define nodos, restricciones, masas, materiales, secciones, elementos,
patrones de carga, etc. Una vez creado, el modelo se almacena en el objeto Domain y éste, a
su vez, lo provee a los objetos Analysis y Recorder.
Analysis. Determina el estado del modelo para cada instante de tiempo, t. Este se
compone por diferentes objetos que definen el tipo de análisis que realizará el programa.
Recorder. Este objeto crea y guarda el registro de los diferentes estados del modelo
durante su análisis.
2.3 Interfaz de OpenSees
En la Figura 2.2 muestra la interfaz del programa. Como ya se mencionó, OpenSees
es un programa que utiliza líneas de código para la creación y análisis de los modelos a
estudiar. Esta característica hace que el programa se apoye fuertemente en editores de texto.
Desde la página oficial de OpenSees es posible descargar de manera gratuita programas como
5
CypressEditor (Shojaie, 2018), que es un editor de texto especialmente diseñado para ser
utilizado con OpenSees.
Figura 2.2 Interfaz de OpenSees
A pesar de que es posible generar ventanas para la visualización de modelos
desarrollados, el programa no cuenta con una interfaz gráfica propia que apoye al usuario en
el trazado de sus modelos; facilidad con la que sí cuentan algunos programas comerciales.
Debido a esto, un nuevo usuario del programa encontrará diversas problemáticas al momento
de elaborar sus primeros modelos. Para subsanar esta dificultad, actualmente es posible
descargar programas adicionales que actúan como interfaces gráficas, por ejemplo: OpenSees
Navigator (OpenSees, 2010) o GID+OpenSees (Papanikolaou, et al., 2017).
2.4 Descarga de OpenSees
OpenSees es un programa de licencia libre; por lo que es posible instalarlo y
compartirlo sin algún inconveniente. Para descargar el programa es necesario recurrir a su
página en línea (OpenSees, 2010): http://opensees.berkeley.edu/
Una vez que el usuario se registra en el sitio, éste podrá descargar dos archivos
necesarios para la instalación y operación de OpenSees. El primero contiene el ejecutable del
6
programa y el segundo las librerías de Tcl. La descripción completa del proceso de descarga
junto con sus consideraciones se encuentra en la página en línea (OpenSees, 2010).
2.5 Conocimientos básicos del lenguaje Tcl
El lenguaje Tcl es utilizado en OpenSees para ejecutar los comandos del programa y
crear el modelo a analizar. Debido a su estructura simple y facilidad de manejo, este lenguaje
es utilizado para el desarrollo rápido de aplicaciones. Las principales funciones que se
utilizan de este lenguaje, al modelar sistemas estructurales en OpenSees, son el
almacenamiento de valores en variables, evaluación de expresiones matemáticas, manejo de
vectores, uso de estructuras de control (if, for, foreach, while) y edición de archivos. A
continuación se describen las funciones antes enlistadas y se brinda un breve ejemplo de cada
una de ellas. Se recomienda insertar los comandos directamente en el cursor del programa
para observar su funcionamiento.
Comentarios. Para introducir un comentario en el modelo basta con escribir el
símbolo “#”. Todo el texto de la fila que se encuentre posterior al símbolo será considerado
como comentario. A pesar de que estas líneas de código son ignoradas por el programa, se
recomienda a los usuarios emplearlos de manera regular para describir el funcionamiento de
su modelo y así facilitar su posterior revisión.
# Este texto es un comentario.
Introducción de texto en la interfaz. Es posible mostrar líneas de texto en la interfaz
de OpenSees. Estas líneas de texto son de utilidad cuando se requiere verificar la información
introducida al modelo y para indicarle al usuario el proceso en ejecución por el programa.
Para mostrar las líneas de texto se emplea el comando puts.
# Para usar este comando, la línea de texto debe encontrarse entre
comillas.
puts "Curso OpenSees"
7
Almacenar líneas de texto. Las líneas de texto también pueden ser almacenadas en
variables. Para almacenar texto o valores numéricos se utiliza el comando set. Esta función
es especialmente útil ya que puede ser utilizada para almacenar, por ejemplo, rutas a
diferentes carpetas de la computadora, en las que se podrían almacenar el modelo a analizar
o la información procedente de los análisis.
# El texto que se encuentra entre las comillas se guarda en la variable
Titulo.
set Titulo "Curso de OpenSees"
Almacenar valores numéricos. Como se mencionó antes, el comando set también
permite almacenar valores numéricos. En este caso, en el valor a guardar no se coloca entre
comillas.
# EL valor 2 (flotante) se guarda en la variable a.
set a 2.0
Llamar líneas de texto y valores almacenados. Para obtener el contenido de una
variable, sin importar si este es texto o un valor numérico, se coloca el símbolo “$” seguido
por la variable de interés.
puts "La variable a contiene el valor: $a"
puts "La variable Titulo contiene el texto: $Titulo"
Evaluación de expresiones matemáticas. Para evaluar expresiones matemáticas se
utiliza el comando expr seguido por la operación a realizar.
# El símbolo ";" le indican al programa que pase a la siguiente línea.
expr 2.0 + 3.0; # Suma.
# Es
expr
expr
expr
expr
expr
posible evaluar expresiones llamando variables.
$a - 3.0; # Resta.
$a*3.0;
# Multiplicación.
$a/3.0;
# División.
$a**2.0;
# Elevar al cuadrado.
$a**0.5;
# Raíz cuadrada.
8
# Se puede definir una variable usando el comando set, en este caso se
necesita colocar la expresión a evaluar entre corchetes.
set b [expr $a + 3.0]
Manejo de vectores. Para definir un vector se utiliza el comando list seguido por los
valores que componen al vector. Al igual que con el comando expr, para guardar la lista en
una variable, es necesario definir el vector entre corchetes.
# Se define un vector en la variable x.
set x [list 100 200 300]
Para obtener valores de un vector se utiliza el comando lindex seguido por el vector
de interés y la posición del valor deseado. Es importante indicar que los elementos del vector
se enumeran empezando desde el 0.
puts "[lindex $x 1]"; # Se llamará el valor el segundo valor (200) del
vector x.
puts "[lindex $x 0]"; # Se llamará el valor primer valor (100) del
vector x.
El comando lappend nos permite agregar un elemento adicional a un vector ya
existente. Es este caso no es necesario emplear al símbolo “$” de manera conjunta con el
nombre del vector.
# Se agrega el valor 175 al vector x.
lappend x 175
También es posible llamar valores de un vector previamente definido y guardarlos en
una variable.
# Se llamará el cuarto valor del vector x, el cual corresponde al número
175 que acabamos de agregar, y se almacenará en la variable c.
set c [lindex $x 3]
Ciclo for. Para definir un ciclo for es necesario definir la variable de control con el
valor inicial del ciclo. Posteriormente, se establece la condicionante del ciclo y su
9
incremento. Los comandos a realizar en cada ciclo deberán están contenidos entre llaves
dentro del ciclo for.
# for {Var. Control} {Condición} {Incremento (sumar dos al finalizar cada
ciclo)} {Instrucciones del ciclo}
for {set i 1} {$i < 10} {incr i 2} {
puts "$i"
}
# Nota: al omitir el valor del incremento, se considera que la variable
de control aumenta en una unidad.
for {set i 1} {$i < 10} {incr i} {
puts "$i"
}
Es importante dejar un espacio de separación entre las llaves que delimitan los
elementos del ciclo for.
If. Para definir un condicional if, sólo es necesario definir la condicionante seguida
de los comandos a realizar. Ambos elementos, condicionante y comando, deberán estar
delimitados por llaves y con un espacio de separación entre estas.
# if {Condición} {Instrucciones}
Creación y edición de archivos de texto. Para crear un archivo de texto de utiliza el
comando open seguido del nombre del archivo y su respectiva extensión. El comando puts
permite introducir datos en el archivo. El comando close permite cerrar el archivo creado.
# La variable definida al crear el archivo (“file1"), sirve para indicarle
al programa que archivo será afectado con los posteriores comandos puts y close.
set file1 [open Archivo.out w]
puts $file1 "Números del 1 al 10"
for {set i 1} {$i <= 10} {incr i} {
if {$i == 5} {
puts $file1 "Vamos a la mitad $i"
} else {
puts $file1 "$i"
}
}
close $file1
10
2.6 Procedimientos
Otra de las grandes ventas de OpenSees es el uso de procedimientos, que son un
bloque de comandos agrupados para realizar una tarea específica. Como ejemplo, en las
siguientes líneas se presenta la definición de un procedimiento y su llamado. Se inicia con la
palabra reservada proc, seguida del nombre del procedimiento (en este caso “Periodo”) y los
parámetros que usa en su tarea (en este caso “m” y “k”). Después se define un bloque de
instrucciones que son ejecutadas cuando se llama a la última línea, es decir: “Periodo 1 1”.
proc Periodo {m k} {
if {$m <= 0} {
puts "La masa debe ser mayor que cero.";
} elseif {$k<=0} {
puts "La rigidez debe ser mayor que cero.";
} else {
set T [expr 2*3.1416*($m/$k)**0.5];
return $T;
}
}
# cerrar las llaves de los proc para indicar a Opensees el fin de éste.
Periodo 1 1
2.7 Introducción de comandos en OpenSees
Existen dos formas de introducir comandos en OpenSees. La primera consiste en
escribir línea por línea los comandos que componen al modelo. Claramente esta manera es
ineficiente y desaprovecha muchas de las ventajas que ofrece el programa. La segunda
manera, que resulta más conveniente, consiste en crear un archivo de texto y llamarlo desde
la interfaz del programa. Con esto el proceso de análisis se vuelve mucho más eficiente y
resulta posible, con unas cuantas líneas de código adicionales, realizar diversos análisis al
modelo estructural de manera automatizada.
Para llamar un archivo de texto con los comandos que componen al modelo es
necesario utilizar el comando source seguido de la ruta que contiene el archivo de texto y el
nombre del archivo con su respectiva extensión. Es importante indicar que la extensión del
archivo de texto deberá ser .tcl, de otra manera el programa no lo reconocerá.
# source RutaCarpeta/NombreArchivo.tcl
11
2.8 Visualización del modelo
A través del comando recorder display es posible generar una ventana con la
representación gráfica del modelo construido. Este comando cuenta con diferentes
elementos, mismos que se describen abajo. La Figura 2.3 muestra un esquema con los
elementos de una proyección.
v
(x,y)
n
u
Figura 2.3 Elementos de una proyección, adaptada de (Bell, 2018)
A continuación, se presenta un ejemplo del uso del comando recorder display. El
primer elemento indica el nombre de la ventana generada, en este caso, la ventana se llamará
“Modelo”. Siempre deberá ir entre comillas. Los siguientes dos números, 10 y 10, brindan
las coordenadas de la esquina superior izquierda de la ventana, siendo estas relativas al borde
de la pantalla. Los últimos dos números, 600 y 600, indican el ancho y la altura de la ventana
en pixeles.
Existes otros sub-comandos que se deben definir:

prp (de Projection Reference Point) define el centro y dirección de la proyección. En
este caso, en dirección del eje n.

vup es un vector que indica el eje vertical de la proyección. En este caso, en dirección
del eje v.
12

vpn es el vector normal del plano de la proyección.

display recibe el número de modo del modelo, el factor de escala de nodos, y el factor
de escala de la respuesta.

ViewScale es un factor de escala que se debe de ajustar en función de cada modelo.
Nótese que, no es necesario este comando si no se desea escalar la vista. Es suficiente
definir los tres comandos anteriores.
recorder display "Modelo" 10 10 600 600 -wipe;
prp 0 0 50;
vup 0 1 0;
vpn 0 0 1;
display 1 2 10;
set ViewScale 5;
La Figura 2.4 muestra una captura de pantalla del resultado que se obtiene al utilizar
el comando recorder display. Se recomienda probar diferentes valores en los sub-comandos
descritos para tener un mejor entendimiento de sus funciones.
Figura 2.4 Representación gráfica de un modelo generado por el comando recorder display
2.9 Ayudas disponibles en línea
En la página oficial de OpenSees (OpenSees, 2010) es posible encontrar materiales
de apoyo para orientar a los usuarios en el uso del programa.
Las ayudas más relevantes son:
13
-
Manual de inicio de OpenSees (Getting Started Manual). Esta ayuda describe el
proceso de descarga e instalación de OpenSees y explica los conceptos más
elementales del programa.
-
Manual de los comandos de OpenSees (Command Manual). En esta sección de la
página web es posible encontrar la descripción de cada uno de los comandos que se
emplean en OpenSees. Indica cómo usar los comandos para crear el modelo, las
características de cada uno de los objetos que pueden conforman el análisis y cómo
obtener los resultados.
-
Lista de ejemplos (Examples). Para ayudar a los nuevos usuarios de OpenSees, en
esta sección es posible encontrar ejemplos de una gran variedad de estructuras siendo
analizadas bajo diferentes tipos de solicitaciones.
2.10 Organización del documento
En este documento se discuten nueve ejemplos diferentes de análisis realizados en
OpenSees a diversas estructuras. En estos ejemplos primero se presenta el modelo a analizar;
posteriormente, se describe el código del modelo que se localiza al final del ejemplo.
También se proporciona una lista de los comandos que se presentan en el ejemplo. En la lista
de comandos se incluyen, entre corchetes, los parámetros que cada comando necesita para
ser ejecutado.
Adicionalmente, se pone a disposición de los lectores archivos complementarios
que incluyen los códigos de los modelos en extensión .tcl y un registro sísmico para emplear
en los análisis dinámicos. Este contenido puede ser descargado de manera libre en el vínculo
ya señalado o desde la página web de Búsqueda de Series del Instituto de Ingeniería de la
UNAM: http://aplicaciones.iingen.unam.mx/ConsultasSPII/Buscarpublicacion.aspx.
15
3. Modelado y análisis estático de una armadura
3.1 Descripción del modelo
En este ejemplo se realiza el análisis estático de una armadura compuesta por
elementos se sección general (Figura 3.1). No se considera ningún efecto no lineal. Las
unidades del modelo son N y m.
El modelo a analizar es una armadura con dos apoyos fijos y uno móvil. La sección
transversal de las barras de la cuerda inferior (en color gris) cuenta con un área de 10 cm2 ; el
área del resto de las barras (en color negro) es igual a 5 cm2. En la armadura actúan dos cargas
en el Nodo 7, una vertical de 20 kN y una horizontal de 10 kN.
4
2
8
4
1
6
9
10
5
11
1
6
2
3
4m
3
5
4m
3m
7
7
10 kN
20 kN
4m
Figura 3.1 Esquema de la armadura analizada en el ejemplo.
16
3.2 Descripción del código
Al final de esta sección se muestra el código tcl de la armadura. Se recomienda
seguirlo mientras se lee este ejemplo. El punto y coma se usa para inidicar la terminación de
los comandos, de tal manera que Opensees lo interpreta como una instrucción completa.
Nótese (línea 6 del código) que al inicio de cada modelo se inserta el comando wipe
para borrar todo elemento que se encuentre almacenado en la memoria de OpenSees.
Para iniciar un modelo en OpenSees es necesario utilizar el comando model
BasicBuilder (línea 7). En este caso, por tratarse de un modelo en 2D, se indican dos
dimensiones (X, Y) y dos grados de libertad para cada nodo. Esto último debido a que es una
armadura y no se consideran giros en los nodos; sólo desplazamientos en X y Y.
De la línea 11 a 17 se definen los nodos de la armadura, para hacer esto se ha
empleado el comando node, seguido por la etiqueta o nombre del nodo que se desea definir,
la coordenada del nodo en X y la coordenada del nodo en Y.
El comando fix, presente en las líneas 24 a 26, define los apoyos de la armadura. De
la Figura 3.1 se observa que ésta tiene tres apoyos, dos fijos y uno móvil. Al usar el comando
fix se debe de indicar la etiqueta del nodo que tendrá la restricción seguida por los grados de
libertad restringidos (X, Y y Giro). Este comando considera un valor igual a 0 como libre y
un valor igual a 1 como fijo. Como sólo se indicaron dos grados de libertad por nodo, se
brindan los estados (libre o restringido) únicamente de los desplazamientos horizontales y
verticales.
En la línea 31 del código se define el material del cual estarán conformadas las barras
de la armadura. Como se indicó antes, no se consideran no linealidades mecánicas en la
armadura; por lo que se utiliza el comando uniaxialMaterial Elastic, el cual sólo requiere de
dos parámetros: 1) la etiqueta con la cual se guarda el material, y 2) su módulo de elasticidad.
Para este caso se utiliza un módulo de elasticidad igual a 200 GN/m2 = 200 x 109 N/m2.
En las líneas 37 a 51 se definen los elementos de la armadura. En este caso se utiliza
el comando element truss para todas las barras de la armadura. Dicho comando requiere la
17
etiqueta del elemento que se está definiendo, sus nodos inicial y final, el área transversal de
la sección y la etiqueta del material (ya existente) que lo compone.
Hasta este punto, la geometría del modelo ya ha sido completamente definida. A
continuación, se procede a definir las cargas actuantes sobre la armadura.
En la línea 54 se define el objeto timeSeries que indica al programa la forma en que
se debe de aplicar la carga durante el análisis. En este modelo se utilizó el comando
timeSeries Linear que únicamente requiere la etiqueta que tendrá el objeto timeSeries
definido. En la Figura 3.2 se muestra la manera en que el comando timeSeries Linear aplica
la carga durante el análisis. Como el nombre del comando indica, la carga se aplica de manera
lineal a lo largo del tiempo en el Domain, por lo que las fuerzas actuantes que están ligadas
a este objeto se incrementan de manera gradual durante el análisis hasta alcanzar los valores
definidos por el usuario. Los nuevos usuarios deben prestar especial atención a este comando,
ya que su omisión en el código es un error común cuando se comienza a modelar en
OpenSees1.
Factor
cFactor
1
Tiempo
Figura 3.2 Variación del factor de carga en función del tiempo considerada por el comando
timeSeries Linear, adaptada de (OpenSees, 2018)
Una vez definido el objeto timeSeries, se procede a definir las cargas actuantes sobre
la armadura, para esto se utiliza el comando pattern Plain. Para definir este comando se
1
Debido a su estructura tan sencilla es fácil pasarlo por alto, sin embargo, sin este objeto, el programa no será
capaz de realizar ningún análisis al modelo construido ya que desconocerá cómo aplicar las cargas.
18
requiere indicar al programa la etiqueta con la que se identifica al patrón de cargas seguido
de la etiqueta del objeto timeSeries previamente definido. Este comando requiere de manera
adicional el definir, entre llaves, las cargas asociadas a él. Las cargas pueden ser puntuales o
distribuidas. En este caso, al tener cargas puntuales actuando en el Nodo 7 de la armadura,
se emplea el comando load; mismo que requiere la etiqueta del nodo donde actúan las cargas,
seguido por los valores de las cargas actuantes.
En las líneas 61 a 67 se encuentran los comandos que generan la ventana con la
representación gráfica de la armadura. Estos comandos ya han sido explicados en el capítulo
introductorio.
En las líneas 71 y 72 se definen los archivos de salida. En este caso para el Nodo 7 y
el Elemento 3.
Al contar ahora con el modelo y las cargas actuantes sobre él, se pude proceder a
definir el análisis estático. En OpenSees, un análisis se conforma por diferentes elementos
que son definidos por el usuario. Estos elementos son: System, Numberer, Contraints, Test,
Integrator, Algorithm, Analysis y Analyze. A continuación, se ofrece una breve descripción
de la función de estos elementos. Para una descripción más detallada se recomienda consultar
la guía en línea del programa (OpenSees, 2018).
El objeto system le indica al programa como construir y resolver el sistema de
ecuaciones del modelo. En este caso se empleó el comando system BandGeneral.
El objeto numberer enumera los grados de libertad del modelo. En este caso se empleó
el comando numberer RCM.
El objeto constraints define la manera en la que se consideran las condiciones de
frontera y/o los desplazamientos impuestos. En este caso se empleó el comando constraints
Plain.
El objeto test indica la tolerancia de convergencia que se le solicita al programa al
momento de realizar el análisis. En este caso se empleó el comando test NormDispIncr; el
19
cual requiere la tolerancia que debe alcanzar el programa seguido por el número de
iteraciones máximas para alcanzar dicha tolerancia.
El objeto integrator define el siguiente instante de tiempo t para el cual el programa
determina el estado de la estructura. En este caso se empleó el comando integrator
LoadControl el cual sólo requiere el factor de incremento de carga para ser definido. En este
caso se eligió 0.1.
El objeto algorithm define los pasos a seguir para resolver las ecuaciones no lineales
durante el análisis. En este caso se empleó el comando algorithm Newton.
El objeto analysis define el tipo de análisis a realizar. En este caso se empleó el
comando analysis Static.
Finalmente, el objeto analyze da la instrucción de realizar el análisis con los
elementos previamente definidos. El comando analyze requiere el número de pasos en los
que el análisis será realizado. En este caso se eligieron 10 pasos.
3.3 Comandos adicionales empleados
Iniciales:
-
wipe
model BasicBuilder -ndm [dimensiones del modelo] -ndf [grados de libertad por
nodo]
Nodos:
-
node [Etiqueta del nodo] [Coor X] [Coor Y]
fix [Etiqueta nodo existente] [Fx] [Fy] [M]
Materiales:
-
uniaxialMaterial Elastic [Etiqueta del material] [Módulo de elasticidad]
20
Elemento:
-
element truss [Etiqueta del elemento] [Nodo i] [Nodo f] [Área transversal]
[Etiqueta material existente]
Cargas:
-
timeSeries Linear [Etiqueta del timeSeries]
pattern Plain [Etiqueta del patron de carga] [Etiqueta timeSeries existente]
load [Etiqueta nodo existente] [Carga en X] [Carga en Y] [Momento]
Archivos de salida:
-
recorder Node [-file Archivo -time -node $nodo -dof $DOFs $ tipoResp.]
recorder Element [-file Archivo -time -ele $elemento $tipoRespuesta]
Análisis:
-
system BandGeneral
numberer RCM
constraints Plain
test NormDispIncr [Tolerancia] [Máximo número de iteraciones]
integrator LoadControl [Factor incremento de carga]
algorithm Newton
analysis Static
analyze [Pasos totales del análisis]
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#------------------------------------------------------------------------# Modelado y análisis estático de una armadura.
# Unidades del modelo: [N,m]
#------------------------------------------------------------------------wipe;
model BasicBuilder -ndm 2 -ndf 2;
# Se establecen los nodos del modelo y sus respectivas restricciones.
# Solo se brindan dos coordenadas ya que el modelo es en 2D.(ID nodo, X, Y)
node 1 0.0 0.0
node 2 0.0 3.0
node 3 4.0 0.0
node 4 4.0 3.0
node 5 8.0 0.0
node 6 8.0 3.0
node 7 12.0 0.0
# Se definen los apoyos
# diferentes, dos fijos
# 1 - Grado de libertad
# 0 - Grado de libertad
# (Fx, Fy, M)
fix 1 1 1
fix 3 1 1
fix 5 0 1
de la estructura, observe que existen dos apoyos
en los nodos 1 y 3, y uno móvil en el nodo 5.
restringido.
no restringido.
# Se define el material de los elementos de la armadura.
set TagMaterial 1
uniaxialMaterial Elastic $TagMaterial 200e9
# Se definen los elementos de la armadura.
# Barras del tirante inferior.
# Área del elemento = 0.001 m2 = 10 cm2
element truss 1 1 3 0.001 $TagMaterial
element truss 2 3 5 0.001 $TagMaterial
element truss 3 5 7 0.001 $TagMaterial
# Resto de los elementos de la armadura.
# Área del elemento = 0.0005 m2 = 5 cm2
element truss 4 1 2 0.0005 $TagMaterial
element truss 5 3 4 0.0005 $TagMaterial
element truss 6 5 6 0.0005 $TagMaterial
element truss 7 7 6 0.0005 $TagMaterial
element truss 8 2 4 0.0005 $TagMaterial
element truss 9 4 6 0.0005 $TagMaterial
element truss 10 1 4 0.0005 $TagMaterial
element truss 11 3 6 0.0005 $TagMaterial
22
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# Se definen las cargas actuantes sobre la armadura.
set timeLinear 1
timeSeries Linear $timeLinear
pattern Plain 1 $timeLinear {
# Carga de aprox 1 ton actuando en X y 2 ton actuando en Y
load 7 10000 -20000
}
# Se define la ventana que permitirá visualizar el modelo.
recorder display "Armadura" 10 10 600 600 -wipe
prp 0 0 50
vup 0 1 0
vpn 0 0 1
display 1 2 10
set ViewScale 5;
# Se definen registros de salida
recorder Node -file SalidaNodo7.txt -time -node 7 -dof 1 2 disp
recorder Element -file SalidaElem3.txt -time -ele 3 basicForces
# Se definen los parámetros del análisis estático.
system BandGeneral
numberer RCM
constraints Plain
test NormDispIncr 1.0e-6 10;
integrator LoadControl 0.1
algorithm Newton
analysis Static
analyze 10
23
4. Determinación de los modos y frecuencias de un
marco de concreto
4.1 Descripción del modelo
En este ejemplo se realiza el análisis modal de un marco de cortante de concreto. Las
unidades del modelo son N y m. Este ejemplo se adapta a los resultados del libro "Dynamics
of Structures. Theory and application to earthquake engineering" de Anil K. Chopra
(Chopra, 1995) y consiste en determinar las frecuencias y modos de vibrar del marco
mostrado en la Figura 4.1. En este caso, la masa (m) fue considerada igual a 4,500 kg, la
altura de entrepiso es igual a 4 m. Para las columnas se consideró una sección transversal de
0.3 m x 0.3 m con un módulo de elasticidad para el concreto igual a 20 GN/m 2 = 20 x 109
N/m2.
m
5
EIc
6
6
2
EIc
4
2m
3
4m
4
5
2EIc
1
3
1
2EIc
4m
2
8m
Figura 4.1 Esquema del marco analizado en el ejemplo, adaptada de (Chopra, 1995)
24
4.2 Descripción del código
El código de este ejemplo se muestra al final de esta sección. Se recomienda
ampliamente seguir el código mientras se lee esta sección. Para comenzar con el modelo,
primero se definen tanto su número de dimensiones como el número de grados de libertad
por cada nodo (ver línea 8). Al tratarse de un marco se consideran tres grados de libertad por
nodo.
En las líneas 12 a 21 se definen parámetros que serán de utilidad durante la
construcción del modelo. Estos también facilitan la modificación del mismo de manera
posterior.
Los nodos del modelo y sus respectivas restricciones se definen en las líneas 25 a 34.
Obsérvese que en este caso los nodos 1 y 2 se encuentran empotrados, por lo que sus tres
grados de libertad se encuentran restringidos.
De la línea 39 a la 42 se definen las masas actuantes en el modelo. Éstas fueron
colocadas en las uniones trabe-columna.
En este modelo se utilizan elementos elásticos para las trabes y columnas. Para crear
estos elementos es necesario primero definir su transformada geométrica, la cual establece la
relación entre el sistema de coordenadas del elemento con el sistema de coordenadas global
del modelo. En este caso se utilizó el comando geomTransf Linear1, misma que no considera
efectos P–Delta ni grandes deformaciones en el análisis. Este comando se encuentra en la
línea 46 del código. En la Figura 4.2 se muestra la forma en que difieren las coordenadas
locales de diferentes elementos con respecto al sistema de coordenadas globales.
Los elementos del modelo se definen en las líneas 51 a 58 por medio del comando
element elasticBeamColumn. Éste requiere, además de la etiqueta del elemento y los nodos
inicial y final, el área de la sección transversal del elemento, seguido del módulo de
1
Otro error es común olvidarse del objeto geomTransf, por su estructura simple. Pero de manera similar al
objeto timeSeries, éste cumple una función esencial en algunos modelos.
25
elasticidad del material que lo conforma, el momento de inercia de la sección y la
transformada geométrica a la que está ligado.
z
z
y
y
x
x
Coordenadas
locales
z
y
Y
X
Z
Coordenadas
globales
Figura 4.2 Coordenadas locales y globales, adaptada de (OpenSees, 2018)
Es importante mencionar que no se tienen cargas actuantes sobre el modelo, pues para
realizar un análisis modal, sólo es necesario definir su geometría y sus masas actuantes.
Para realizar el análisis modal, se ejecuta el comando eigen. Este comando requiere
el número de eigenvalores a calcular (en este caso se solicitan dos). Los eigenvalores del
modelo (𝜔𝑖2 ) son guardados en un vector. Esto se realiza en la línea 63 del código. En la
línea 66 se crea un vector denominado “T”. En éste se almacenan los periodos de la estructura
de manera posterior.
En las líneas 68 a 86 se encuentran los comandos que crean y modifican el archivo de
texto que almacenan los periodos de la estructura. En este caso el archivo de texto se llamó
“Modal.out”. Para escribir los periodos del marco en el archivo se emplea un ciclo for que
llama a cada uno de los eigenvalores y, por medio de la relación mostrada en la ecuación
(4.1), se obtienen los periodos de la estructura (ver línea 83).
𝑇𝑖 =
2𝜋
√(𝜔𝑖2 )
(4.1)
26
Los valores de los vectores característicos de los modos de vibrar de la estructura se
definen en las líneas 90 a 93. Para obtener dichos valores se emplea el comando
nodeEigenvector que requiere la etiqueta del nodo del cual se obtiene el eigevector (o forma
modal), el modo de vibrar que produce el eigenvector y el número de grado de libertad. Las
líneas 95 y 96 escriben las formas modales normalizadas en la consola de OpenSees. En las
líneas 100 a 111 se encuentran los comandos que crean las ventanas con las representaciones
gráficas de los modos de vibrar de la estructura. En esto caso, para definir el modo de vibrar
a mostrar se utiliza, después del comando display (líneas 104 y 111), el valor -1 para el primer
modo de vibrar de la estructura y -2 para el segundo. En la Figura 4.3 se muestra una vista
de los dos modos de vibrar calculador por el programa.
Forma del modo 1
T1 = 0.266 s
Forma del modo 2
T2 = 0.133 s
Figura 4.3 Modos de vibrar del marco analizado
4.3 Comandos adicionales empleados
Nodos:
-
mass [Etiqueta nodo existente] [Masa en X] [Masa en Y] [Masa alrededor de Z]
27
Elementos:
-
geomTransf Linear [Etiqueta de la transformada geométrica]
element elasticBeamColumn [Etiqueta del elemento] [Nodo i] [Nodo f] [Área]
[Módulo de elasticidad] [Momento inercia] [Etiqueta geomTransf existente]
Análisis:
-
eigen -[solver (opcional)] [Número de valores solicitados]
-
nodeEigenvector [Etiqueta nodo existente] [Modo de vibrar] [Grado de libertad del
vector]
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#--------------------------------------------------------------------# Modos de marco de cortante.
# Problema tomado del libro Dynamics of Structures de Anil K. Chopra.
# Unidades del modelo: [N,m]
#--------------------------------------------------------------------wipe;
model BasicBuilder -ndm 2 -ndf 3; # Se indican 3 grados de libertad para
cada nodo.
# Se definen valores del modelo.
set m 4500.0;
# Masa actuante en el modelo.
set h 4.0;
# Altura de entrepiso.
set A 0.09;
# Área transversal de la columna.
set Ic 0.000675;
# Inercia de la sección de la columna.
set Iv 10e12;
# Inercia de la sección de la viga. Se asigna un valor
# alto para considerarla rígida.
set E [expr 20e9]; # Módulo de elasticidad del material del elemento.
set NumModos 2;
# Se define el número de modos de vibrar a obtener.
set pi 3.1416;
set carpeta Resultados; # Se define el nombre de la carpeta donde se
guardarán los resultados.
# Se
node
node
node
node
node
node
definen los nodos de la estructura. (ID nodo, X, Y)
1 0.0 0.0
2 [expr 2*$h] 0.0
3 0.0 $h
4 [expr 2*$h] $h
5 0.0 [expr 2*$h]
6 [expr 2*$h] [expr 2*$h]
# Se definen los apoyos de la estructura.
fix 1 1 1 1;
# Las columnas del marco se encuentran empotradas.
fix 2 1 1 1
# Se definen las masas actuantes en los niveles del marco.
# (ID nodo, Masa actuante en X, Masa actuante en Y, Masa actuante alrededor
del eje Z).
mass 3 [expr $m] 0.0 0.0
mass 4 [expr $m] 0.0 0.0
mass 5 [expr $m/2] 0.0 0.0
mass 6 [expr $m/2] 0.0 0.0
# Se define la transformación de coordenadas.
set geomLinear 1
geomTransf Linear $geomLinear
# Se definen los elementos del marco. Se consideran elementos con propiedades
mecánicas generales.
# Elementos columna.
element elasticBeamColumn 1 1 3 $A $E [expr 2*$Ic] $geomLinear
29
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
element elasticBeamColumn 2 3 5 $A $E $Ic
element elasticBeamColumn 3 2 4 $A $E [expr 2*$Ic]
element elasticBeamColumn 4 4 6 $A $E $Ic
$geomLinear
$geomLinear
$geomLinear
# Elementos Viga.
element elasticBeamColumn 5 3 4 $A $E $Iv $geomLinear
element elasticBeamColumn 6 5 6 $A $E $Iv $geomLinear
# Se determinan los eigenvectores y los periodos de la estructura.
# El comando "eigen" brinda los eigen valores del modelo, estos valores se
almacenan en la variable "eigenvalores".
set eigenvalores [eigen $NumModos]
# Se crea el vector "T" el cual almacenara los periodos de la estructura.
set T {}
file mkdir $carpeta;
# Se crea la carpeta donde se
almacenarán los resultados.
set file1 [open $carpeta/Modal.out w]; # Se abre el archivo donde se
almacenarán los resultados.
puts $file1 "Los periodos de la estructura son:";
# Línea del archivo.
puts "Los periodos de la estructura son:";
# Línea de la interfaz
for {set i 0} {$i <= [expr $NumModos - 1]} {incr i} {
# Al vector "T", hasta ahora vacío, se le agregan los periodos de la
estructura por medio del comando lappend.
# El comando lindex llama el valor localizado en la posición $i del vector
"eigenvalores".
set T [lappend T [expr 2*$pi/([lindex $eigenvalores $i]**0.5)]]
puts $file1 "T[expr $i+1]: [lindex $T $i]"
puts "T[expr $i+1]: [lindex $T $i]"
}
close $file1
# El comando nodeEigenvector brinda los valores del vector característico.
# (ID nodo, Vector característico, Grado de libertad)
set f11 [nodeEigenvector 3 1 1]
set f21 [nodeEigenvector 5 1 1]
set f12 [nodeEigenvector 3 2 1]
set f22 [nodeEigenvector 5 2 1]
puts "eigenvector 1: [list [expr {$f11/$f21}] [expr {$f21/$f21}] ]"
puts "eigenvector 2: [list [expr {$f12/$f22}] [expr {$f22/$f22}] ]"
# Se definen las ventanas que permitirán visualizar la estructura deformada.
recorder display "Forma del modo 1" 10 10 350 350 -wipe
prp 5 5 50;
vup 0 1 0;
vpn 0 0 1;
30
103
104
105
106
107
108
109
110
111
viewWindow -6 6 -6 6;
display -1 2 100;
recorder display "Forma del modo 2" 10 360 350 350 -wipe
prp 5 5 50;
vup 0 1 0;
vpn 0 0 1;
viewWindow -6 6 -6 6
display -2 2 100
31
5. Análisis dinámico lineal de una columna
5.1 Descripción del modelo
En este ejemplo se realiza el análisis dinámico de una columna de concreto. No se
considera ningún efecto no lineal. Nótese que el ejemplo es muy sencillo, pues sólo es un
pretexto para aprender a realizar análisis dinámico en OpenSees. Las unidades del modelo
son N, m y s. El modelo a analizar consta de una columna de concreto empotrada en la base
de altura igual a 12 m (Figura 5.1). La sección transversal de la columna es rectangular con
medidas de 1 m x 1 m. En la parte superior actúa una masa de 50 ton, misma que también
genera una carga vertical. La columna es sometida al movimiento sísmico, registrado en la
estación SCT (Instituto de Ingeniería, 2018) componente Este-Oeste, del terremoto del
19/sept/1985 de Michoacán, México.
P=m∙g
2
m
1
h
1
Figura 5.1 Esquema de la columna analizada en el ejemplo.
32
5.2 Descripción del código
Se comienza borrando cualquier objeto construido con anterioridad en OpenSees
(comando wipe) y se define el número de dimensiones del modelo y de grados de libertad
por nodo (línea 7).
Los parámetros definidos entre las líneas 10 a 18 se utilizan para construir el modelo
más adelante. Debido a que en este ejemplo se crean diversos archivos de resultados, se
define una variable llamada “carpeta”, la cual contiene el nombre de la carpeta donde se
almacenarán los archivos de resultados.
De manera similar a los ejemplos anteriores, se comienza por definir los nodos del
modelo (líneas 21 y 22). En este caso sólo dos son necesarios. El Nodo 1 corresponde al
empotramiento y el Nodo 2 al extremo libre de la columna. Adicionalmente, la masa actuante
en la parte superior de la columna se define al momento de crear el nodo 2 por medio de la
adición del comando –mass. En la línea 25 se ejecuta el comando fix para empotrar el nodo
inferior de la columna.
Al no considerarse no linealidades geométricas ni mecánicas, se crea la transformada
geométrica “Linear” (línea 29) y se emplea el comando element elasticBeamColumn para
construir el elemento columna con su área, módulo de elasticidad y momento de inercia
correspondiente (línea 32).
En la línea 35 se usa el comando file mkdir para crear la carpeta de archivos de
resultados. En las líneas 38, 40, 43 y 46 se definen los archivos de resultados solicitados al
programa. Es importante indicar que OpenSees no generará ningún archivo de resultados no
solicitado por el usuario, y los que sí sean creados sólo mostrarán su información una vez
que el programa sea cerrado o bien se ejecute el comando wipe.
Nótese que se utilizan tres modalidades del comando recorder, es decir: recorder
Node, recorder Element y recorder Drift. Los primeros dos, como su nombre lo indica,
generan el registro de datos relacionados con los nodos y los elementos especificados. En
este ejemplo se solicitaron los desplazamientos en el extremo libre de la columna y las
33
reacciones en la base. Para el caso del “recorder Element”, se indicó al programa que
registrara las fuerzas actuantes sobre el elemento columna. Por último, el registro drift guarda
la distorsión de entrepiso de la columna, siendo este parámetro igual a la diferencia de los
desplazamientos relativos existentes entre el Nodo 2 y el Nodo 1, dividido por la distancia
vertical que los separa. Nótese que existen más registros posibles que los cuatro aquí
mostrados, por lo que se recomienda recurrir a la manual del programa para consultar otros
registros de interés. 1
Entre las líneas 49 a 54 se crea el patrón de carga. En OpenSees primero es necesario
realizar el análisis estático antes que el dinámico por lo que en este caso sólo se considera
una carga vertical generada por la masa en el extremo libre.
Después de generar la ventana con la representación gráfica del modelo (líneas 57 a
63), se procede a realizar el análisis estático. Esto ocurre de la línea 65 a la 72. En la línea 78
se emplea el comando loadConst que indica al programa que conserve las cargas aplicadas
hasta el momento en análisis posteriores. El adicionar el comando –time permite fijar el
tiempo del programa en el valor indicado, en este caso se reinicia el tiempo del programa a
cero.
De la línea 80 a la 85 se definen parámetros que se emplearan en el análisis dinámico.
Éstos son: a) un factor de conversión de unidades, en este caso 0.01 para pasar de cm/s 2 a
m/s2; b) el paso de tiempo; c) los puntos que se considerarán del registro de aceleraciones; d)
el nombre del archivo que contiene el registro de aceleraciones; y e) la dirección en que se
aplicarán las aceleraciones.
Posteriormente, se crea el patrón de cargas por medio del comando pattern
UniformExcitation. Dicho comando requiere la etiqueta que tendrá el patrón de cargas,
seguido de la dirección en la cual se aplicará y, al agregar el comando –accel, se procede a
indicar el diferencial de tiempo y el nombre del archivo del registro de aceleraciones. Por
último, se aplica el comando –factor, el cual es opcional, permitiendo éste escalar los datos
1
También es posible guardar los archivos en formato “.xml”. Los archivos “.xml” presentan líneas de texto con
información del contenido del registro.
34
del registro de aceleraciones de una forma práctica. El comando pattern UniformaExcitation
también puede ser utilizado para imponer al modelo un registro de velocidades.
Antes de realizar el análisis dinámico, las líneas 92 a 94 definen el amortiguamiento
de la estructura. Esto se realiza por medio del comando rayleigh el cual asigna un
amortiguamiento de Rayleigh a todos los elementos construidos anteriormente. Es
importante recordar que dicho amortiguamiento es proporcional a la rigidez y a la masa de
la estructura. Nótese que OpenSees tiene la posibilidad de usar tres diferentes matrices de
rigidez: la “actualizada” la cual es la matriz de rigidez en cada iteración de una unidad de
tiempo; la “inicial” que corresponde a la matriz de rigidez original del modelo, sin considerar
degradación; y la “comprometida” que es la matriz resultante del último paso del análisis que
comprometió la matriz de rigidez. En este ejemplo, se considera únicamente la matriz de
rigidez comprometida para definir el amortiguamiento de Rayleigh. Para este caso, realmente
no es importante que matriz de rigidez usar para definir el amortiguamiento ya que, al ser un
análisis lineal, la matriz de rigidez no cambia durante el análisis.
Para finalizar el ejemplo se procede a realizar el análisis dinámico. Los comandos que
componen dicho análisis se encuentran entre las líneas 99 a 106. En la línea 105 se utiliza el
comando analysis Transient para indicar que el análisis a realizar es dinámico y en la 106 se
emplea el comando analyze seguido del número de puntos a considerar y el paso de tiempo.
En la Figura 5.2 se muestra el registro de desplazamientos laterales de la parte
superior de la columna; obtenidos del archivo de salida “DespTop.out” (ver línea 38). En esta
gráfica, el eje horizontal indica el tiempo, en segundos, mientras que el eje vertical muestra
el desplazamiento lateral del nodo 2, en metros. En este caso, el desplazamiento máximo
obtenido durante el análisis dinámico de la columna fue igual a 3 cm. Se recomienda al lector
variar el valor de la masa o de las dimensiones de la sección transversal de la columna para
observar cómo estos parámetros afectan la respuesta máxima de la estructura.
Desplazamiento, m
35
0.04
0.03
0.02
0.01
0
-0.01
-0.02
-0.03
-0.04
0
20
40
60
80
100 120 140 160
Tiempo, s
Figura 5.2 Desplazamientos laterales del nodo superior de la columna
5.3 Comandos adicionales empleados
Cargas:
-
loadConst –time[Tiempo]
pattern UniformExcitation [Etiqueta del patrón] [Dirección en la que se aplicará] –
accel {Series –dt [diferencial de tiempo] –filePath [Nombre del archivo]} –factor
[Factor de escala o de conversión].
Archivos de salida:
-
Recorder Node –file [Nombre del archivo] –node [Etiqueta nodo existente] –dof
[Grados de libertad a considerar] [Tipo de registro solicitado]
Recorder Element –file [Nombre del archivo] –ele [Etiqueta elemento existente]
[Tipo de registro solicitado]
Recorder Drift –file [Nombre del archivo] –iNode [Nodos i] –jNode [Nodos j] –
dof [Grado de libertad de los desplazamientos relativos] –perpDirn [Dirección que
se utilizara para calcular separación entre nodos i y j]
Amortiguamiento:
36
-
rayleigh [AlphaMasa] [BetaRigidezActual] [BetaKInicial] [BetaKComprometida]
Análisis:
-
eigen –fullGenLapack
system UmfPack
numberer RCM
constraints Plain
test NormDispIncr [Tolerancia] [Máximo número de iteraciones]
integrator Newmark [Gamma] [Beta]
algorithm Newton
analysis Transient
analyze [Pasos totales del análisis] [paso de tiempo]
37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#--------------------------------------------------------------------# Análisis dinámico lineal de una columna.
# Unidades del modelo [N,m,s]
#--------------------------------------------------------------------wipe;
model BasicBuilder -ndm 2 -ndf 3;
# Se definen valores del modelo.
set h 12.0;
# Altura de la columna.
set m 50000;
# Masa actuante en la estructura.
set A 1.0;
# Área transversal de la columna.
set I 0.0833;
# Inercia de la sección de la columna.
set E 20e9;
# Módulo de elasticidad del material de la columna.
set carpeta ResultadosEx3; # Se define el nombre de la carpeta donde se
guardarán los resultados.
set pi 3.1416
set g 9.81;
# Aceleración de la gravedad.
# Se definen los nodos de la columna.
node 1 0.0 0.0
node 2 0.0 $h -mass $m 0.0 0.0
# Se define el empotramiento de la columna.
fix 1 1 1 1
# Se define la transformación de coordenadas.
set geomLinear 1
geomTransf Linear $geomLinear
# Se define el elemento columna.
element elasticBeamColumn 1 1 2 $A $E $I $geomLinear
# Se definen los registros del análisis.
file mkdir $carpeta;
# Carpeta donde se almacenarán los resultados.
# Desplazamiento del nodo superior.
recorder Node -file $carpeta/DespTop.out -time -node 2 -dof 1 2 3 disp;
# Reacciones de la base.
recorder Node -file $carpeta/ReaccionBase.out -time -node 1 -dof 1 2
3 reaction;
# Distorsión de entrepiso.
recorder Drift -file $carpeta/Drift.out -time -iNode 1 -jNode 2 -dof 1 perpDirn 2 ;
# Fuerzas en la columna.
recorder Element -file $carpeta/SolicitacionesCol.out -time -ele 1 force;
# Se define las cargas actuantes sobre la estructura.
set timeLinear 1
timeSeries Linear $timeLinear
pattern Plain 1 $timeLinear {
38
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Fuerza aplicada en nodo 2 = masa actuante por gravedad.
load 2 0.0 [expr -1*$m*$g] 0.0
}
# Se define la ventana que permitirá visualizar el modelo.
recorder display "Columna" 10 10 600 600 -wipe
prp 0 0 50
vup 0 1 0
vpn 0 0 1
display 1 2 10
set ViewScale 5;
# Se definen los parámetros del análisis estático.
system BandGeneral
numberer RCM
constraints Plain
test NormDispIncr 1.0e-6 10;
integrator LoadControl 1.0
algorithm Newton
analysis Static
analyze 10
puts "Análisis estático finalizado."
# Se define los valores para el análisis dinámico.
loadConst -time 0.0
set Factor 0.01;
set
set
set
set
# El registro de aceleraciones se encuentra en
cm/s2, este factor lo convierte a m/s2.
dt 0.01;
# Diferencial de tiempo del acelerograma.
Npuntos 15000;
# Número de puntos del acelerograma.
AccelDataFile "SCT18509.txt"; # Se indica el registro a utilizar.
DirX 1;
# Dirección en la que se aplicarán las aceleraciones.
# Se define el patrón de aceleraciones.
set accelSeries "Series -dt $dt -filePath $AccelDataFile -factor $Factor";
pattern UniformExcitation 2 $DirX -accel $accelSeries
# Se define el amortiguamiento de la estructura.
set freq [expr ([eigen -fullGenLapack 1]**0.5)/(2.0*$pi)]
set dampRatio 0.05
rayleigh 0. 0. 0. [expr 2*$dampRatio/$freq]
puts "Periodo: [expr 1.0/$freq] segundos"
# Se definen los parámetros del análisis estático.
system UmfPack
numberer RCM
constraints Plain
test NormDispIncr 1.0e-8 10
39
103
104
105
106
107
108
integrator Newmark 0.5 0.25
algorithm Newton
analysis Transient
analyze $Npuntos $dt
puts "Análisis Dinámico finalizado."
41
6. Análisis estático no lineal de un marco
conformado por perfiles metálicos
6.1 Descripción del modelo
En este ejemplo se realiza el análisis estático no lineal (también conocido como
pushover) a un marco de acero en 2D.
El marco estará compuesto por perfiles en cajón para las columnas y perfiles “I” para
las vigas. En este ejemplo sí se consideran efectos no lineales. Las unidades del modelo son
t (toneladas fuerza) y cm.
El modelo a analizar consta de un marco de acero de tres niveles y dos crujías. Las
crujías tienen 7 m de ancho cada una. La altura de entrepiso del modelo es igual a 3.5 m. Para
las columnas del primer nivel se emplean perfiles en cajón cuadrados de 35 cm por lado y un
espesor de placa de 5/8”. Para las columnas del segundo nivel se utilizan perfiles en cajón de
las mismas dimensiones, pero con un espesor de placa de 1/2”. Las vigas del modelo están
conformadas por perfiles W16x57. Se considera una carga distribuida de 1.03 y 1.17 t/m para
el entrepiso y la azotea, respectivamente. En la Figura 6.1 se muestra el marco analizado en
este ejemplo.
OpenSees permite realizar los análisis estáticos no lineales de dos maneras:
controlando los desplazamientos de un nodo especificado por el usuario y controlando las
cargas laterales aplicadas a la estructura. En este ejemplo se indicará como realizar ambos
procedimientos.
42
42
41
5
43
6
31
32
32
31
3
33
4
21
22
23
22
21
11
12
11
13
350 cm
13
12
700 cm
350 cm
23
2
1
350 cm
33
700 cm
Figura 6.1 Esquema del marco analizado en el ejemplo
6.2 Descripción del código
Se comienza a construir el modelo borrando los objetos definidos con anterioridad
por medio del comando wipe (línea 5), posteriormente se indican el número de dimensiones
del modelo y número de grados de libertad por nodo (línea 6).
Entre las líneas 9 a 12 se definen parámetros que facilitan la creación del modelo y su
posterior modificación en caso de ser necesario.
Los nodos con sus respectivas restricciones se definen de la línea 16 a la 32. Para
simular comportamiento de diafragmas rígidos en los niveles, se utiliza el comando
equalDOF que impone desplazamientos iguales de un nodo (nodo maestro) a otro (nodo
esclavo). Para usar este comando se indica al programa la etiqueta del nodo maestro seguido
43
aquella del nodo esclavo y, por último, el grado de libertad sobre el cual los desplazamientos
de ambos nodos serán iguales. Esto se hace en las líneas 36 a 41.
Debido a que en este ejemplo se consideran efectos no lineales es necesario definir
materiales con comportamientos histeréticos. En este ejemplo se utiliza el comando
uniaxialMaterial Steel02 para definir el material de los perfiles metálicos del modelo. Para
usar dicho comando se requiere definir la etiqueta que tendrá el material, seguido del su
esfuerzo de fluencia, su módulo de elasticidad y la relación entre la tangente post-fluencia y
la tangente inicial elástica de la curva esfuerzo – deformación del material. Adicionalmente,
es necesario definir siete valores adicionales (R0, CR1, CR2, a1, a2, a3 y a4) que definen el
comportamiento de la curva esfuerzo – deformación una vez que se ha sobrepasado el
esfuerzo de fluencia. Los valores utilizados en el ejemplo para los parámetros adicionales
fueron tomados de recomendaciones de la guía en línea de OpenSees (OpenSees, 2018). Los
materiales utilizados en este ejemplo se definen entre la línea 46 a 49. La Figura 6.2 muestra
esquemáticamente la curva esfuerzo – deformación de un material definido por medio del
comando uniaxialMaterial Steel02.
Ep
Esfuerzo
E
Deformación
Figura 6.2 Curva esfuerzo – deformación de un material definido con el comando uniaxialMaterial
Steel02, adaptada de (OpenSees, 2018)
Una vez que los materiales han sido definidos, se procede a construir las secciones de
los elementos del modelo. Para hacer esto se utiliza el comando section Fiber el cual permite
crear las secciones de elementos por medio de fibras. Las fibras son elementos finitos,
44
conformados por un material previamente definido, que trabajan de manera axial. En la
Figura 6.3 se muestra un esquema de las secciones empeladas en este modelo. Estas secciones
son definidas entre la línea 58 a la 99.
t
1.82
35
35
OR 35 x 35 x t
41.66
1.09
18.08
IPE 16
Figura 6.3 Esquema de secciones (medidas en cm)
Para construir las secciones mostradas en la Figura 6.3 se utilizan los comandos patch
quad, patch circ y patch rect; los cuales crean regiones de elementos fibra. Es importante
indicar que estos comandos deben ser definidos entre el espacio delimitado por las llaves del
comando section Fiber para relacionar las figuras que forman con la sección que se está
construyendo. De manera general estos comandos requieren que se especifique el material
que compondrá a las fibras y el número de éstas. En lo particular, el comando patch quad
permite definir un área poligonal especificando las coordenadas de cada uno de sus vértices;
por otra parte, el comando patch circ construye segmentos circulares; y por último, el
comando patch rect define áreas rectangulares especificando únicamente las coordenadas de
dos vértices opuestos. Para conocer más a detalle el funcionamiento de dichos comandos se
recomienda recurrir al manual en línea del programa (OpenSees, 2018).
Una vez definidas las secciones, es posible proceder a la definición de los elementos
estructurales que integran el modelo. En este ejemplo se utilizó el comando element
forceBeamColumn; que requiere la etiqueta del elemento, las etiquetas de sus nodos inicial y
final, el número de subdivisiones que tendrá el elemento, la etiqueta de su sección transversal,
45
y la etiqueta de su transformada geométrica. En este ejemplo se empleó la transformada
geométrica denominada Corotational, que toma en cuenta efectos no lineales debidos a
deformaciones grandes. Los elementos se definen de la línea 106 a la 126.
Antes de realizar el análisis estático no lineal (pushover) se realiza un análisis estático
por cargas gravitacionales. Entre las líneas 129 a la 139 se define el patrón de cargas
gravitacionales; mismas que se muestran en la Tabla 1.
De la línea 142 a la 176 se genera la carpeta y archivos de resultados (recorders), se
genera la ventana con la representación gráfica del modelo y se realiza el análisis de cargas
gravitacionales. Para fijar las cargas gravitacionales como constantes en el análisis estático
no lineal (pushover) se utiliza el comando loadConst.
Por otra parte, para el análisis estático no lineal es necesario crear un patrón de cargas
laterales. Esto se hace entre las líneas 181 a la 185. Los valores de las cargas laterales se
pueden definir a partir de una distribución triangular, una distribución relativa a las masas, o
proporcional al modo fundamental de vibrar.
Tabla 6.1 Solicitaciones en los nodos de la estructura.
nodo
[t]
𝒘𝒍𝟐
𝟏𝟐
[t ∙ cm]
21
-14.42
-420.58
22
-28.84
0.0
23
-14.42
420.58
31
-14.42
-420.58
32
-28.84
0.0
33
-14.42
420.58
41
-16.38
-477.75
42
-32.76
0.0
43
-16.37
477.75
Azotea
Entre-pisos
Etiqueta
𝑽=
𝒘𝒍
𝟐
𝑴=
46
El análisis estático no lineal puede ser realizado por medio de dos diferentes métodos,
el primero consiste en utilizar el comando integrator DisplacementControl, mientras que en
el segundo se emplea el comando integrator LoadControl. El primer comando busca crear
un desplazamiento determinado en un nodo de control definido por el usuario a través de la
aplicación sucesiva de las cargas laterales creadas con anterioridad. El segundo no considera
el desplazamiento lateral de la estructura y sólo aplica las cargas laterales un número N de
veces, siendo N un valor definido por el usuario. En este ejemplo se utilizó el comando
integrator DisplacementControl; indicando al programa que debe aplicar un desplazamiento
en el nodo 41 igual a 75 cm. En la Figura 6.4 se muestra la curva cortante basal –
desplazamiento obtenida del análisis. De las líneas 205 a 216 se muestran, en comentarios,
Cortante basal, t
cuáles serían las líneas a ejecutar para un análisis controlado por carga (LoadControl).
40
35
30
25
20
15
10
5
0
0
20
40
60
Desplazamiento nodo superior, cm
80
Figura 6.4 Curva cortante basal – desplazamiento
6.3 Comandos adicionales empleados
Nodos:
-
equalDOF [Etiqueta nodo maestro] [Etiqueta nodo esclavo] [Grado de libertad
restringido]
47
Materiales:
-
uniaxialMaterial Steel02 [Etiqueta del material] [Fy] [Módulo de elasticidad inicial]
[Relación entre la tangente post fluencia y la tangente inicial elástica] [R0] [CR1]
[CR2] [a1] [a2] [a3] [a4]
Secciones:
-
-
section Fiber [Etiqueta de la sección] { }
patch quad [Etiqueta material existente] [Número de fibras en Z] [Número de fibras
en Y] [yI] [zI] [yJ] [zJ] [yL] [zL] [yK] [zK]
patch circ [Etiqueta material existente] [Número de fibras en la circunferencia]
[Número de fibras en la dirección radial] [yCentro] [zCentro] [Radio interior] [Radio
Exterior] [Ángulo de inicio] [Ángulo final]
patch rect [Etiqueta material existente] [Número de fibras en Z] [Número de fibras
en Y] [yI] [zI] [yJ] [zJ]
Elementos:
-
geomTransf Corotational [Etiqueta de la transformada geométrica]
element forceBeamColumn [Etiqueta del elemento] [Nodo i] [Nodo f] [Divisiones
del elemento] [Etiqueta sección existente] [Etiqueta transformada geométrica
existente]
Análisis:
-
system UmfPack
numberer RCM
constraints Plain
test NormDispIncr [Tolerancia] [Máximo número de iteraciones]
integrator LoadControl [Factor de incremento] [Iteraciones] [Mínimo factor de
incremento] [Máximo factor de incremento]
integrator DisplacementControl [Node de control] [Grado de libertad del
desplazamiento controlado] [Incremento del desplazamiento] [Iteraciones]
algorithm Newton
analysis Static
analyze [Veces que se aplicarán las cargas laterales]
48
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#------------------------------------------------------------------------# Análisis pushover de un marco compuesto por perfiles metálicos.
# Unidades del modelo: [ton,cm,s]
#------------------------------------------------------------------------wipe;
model BasicBuilder -ndm 2 -ndf 3;
# Introducción de variables.
set E 2038.9;
#
set Li 700.0;
#
set hi 350.0;
#
set carpeta ResultadosEx4; #
# Se
node
node
node
node
node
node
node
node
node
node
node
node
Módulo de elasticidad del acero
Ancho de crujía.
Altura de entrepiso.
Se define el nombre de la carpeta donde se
guardarán los resultados.
definen los nodos de la estructura.
11 0.0 0.0
12 $Li 0.0
13 [expr 2.0*$Li] 0.0
21 0.0 $hi
22 $Li $hi
23 [expr 2*$Li] $hi
31 0.0 [expr 2*$hi]
32 $Li [expr 2*$hi]
33 [expr 2*$Li] [expr 2*$hi]
41 0.0 [expr 3*$hi]
42 $Li [expr 3*$hi]
43 [expr 2*$Li] [expr 3*$hi]
# Se definen los apoyos de la estructura.
fix 11 1 1 1
fix 12 1 1 1
fix 13 1 1 1
# Se simulan diafragmas rígidos por medio de nodos esclavos.
#
NodTag NodTag Dof
equalDOF 21
22
1
equalDOF 22
23
1
equalDOF 31
32
1
equalDOF 32
33
1
equalDOF 41
42
1
equalDOF 42
43
1
# Se definen los materiales del modelo
# Comando
Material Tag Fy
E
b
R0 cR1
cR2 a1
a2
a3
a4
uniaxialMaterial Steel02 3600 2.530 $E 1e-9 20 0.925 0.15 0.0001 0.0001
0.0001 0.0001
uniaxialMaterial Steel02 5000 3.515 $E 1e-9 20 0.925 0.15 0.0001 0.0001
0.0001 0.0001
49
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# b pendiente curva esfuerzo deformacipón posterior a la fluencia.
# R´s son valores recomendados.
# a parametros de endurecimiento del material posterior a la fluencia,
opcionales.
# Se definen los etiquetas de las secciones.
set OR1 1011
set OR2 1021
set IPE16 1031
# Se definen los elementos de la estructura.
# Columnas OR 35 x 35 x 5/8 Planta Baja
section Fiber $OR1 {
#
Iy
Iz
Jy
Jz
Ky
Kz
Ly
Lz
patch quad 5000 5 5 -14.34 -17.5
14.34 -17.5
14.34 -15.92 -14.34 -15.92
patch quad 5000 5 5 15.92 -14.34 17.5 -14.34 17.5
14.34 15.92 14.34
patch quad 5000 5 5 -14.34 15.92 14.34 15.92 14.34 17.5 -14.34 17.5
patch quad 5000 5 5 -17.5 -14.34 -15.92 -14.34 -15.92 14.34 -17.5
14.34
#
patch
patch
patch
patch
}
circ
circ
circ
circ
5000
5000
5000
5000
CenY
5
5
5
5
CenZ Rint
Rext Start
5
-14.34 -14.34 1.58
5
14.34 -14.34 1.58
5
14.34 14.34 1.58
5
-14.34 14.34 1.58
Ang
3.16
3.16
3.16
3.16
End
180
270
0
90
Ang
270
360
90
180
# Columnas OR 35 x 35 x 1/2 Segundo Nivel.
section Fiber $OR2 {
#
Iy
Iz
Jy
Jz
Ky
Kz
Ly
Lz
patch quad 5000 5 5 16.23 -14.96 17.5 -14.96 17.5
14.96 16.23 14.96
patch quad 5000 5 5 -14.96 -17.5
14.96 -17.5
14.96 -16.23 -14.96 -16.23
patch quad 5000 5 5 -17.5 -14.96 -16.23 -14.96 -16.23 14.96 -17.5
14.96
patch quad 5000 5 5 -14.96 16.23 14.96
16.23 14.96 17.5 -14.96 17.5
#
patch
patch
patch
patch
}
circ
circ
circ
circ
5000
5000
5000
5000
CenY
4
4
4
4
CenZ Rint
Rext
5
-14.96 -14.96
5
14.96 -14.96
5
14.96 14.96
5
-14.96 14.96
Start
1.27
1.27
1.27
1.27
Ang
2.54
2.54
2.54
2.54
# Vigas IR 16 in
section Fiber $IPE16 {
#
Mat Fx Fy X1
Y1
X2
Y2
patch rect 3600 10 4 -9.04
19.01 9.04 20.83
patch rect 3600 2
4 -0.545 -19.01 0.545 19.01
patch rect 3600 10 4 -9.04 -19.01 9.04 -20.83
}
# Se define la transformación geométrica.
set Tcorot 1
End
180
270
0
90
Ang
270
360
90
180
50
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
geomTransf Corotational $Tcorot
# Se definen los elementos columna del primer nivel.
element forceBeamColumn 11 11 21 5 $OR1 $Tcorot
element forceBeamColumn 12 12 22 5 $OR1 $Tcorot
element forceBeamColumn 13 13 23 5 $OR1 $Tcorot
# Se definen los elementos columna del segundo nivel.
element forceBeamColumn 21 21 31 5 $OR2 $Tcorot
element forceBeamColumn 22 22 32 5 $OR2 $Tcorot
element forceBeamColumn 23 23 33 5 $OR2 $Tcorot
# Se definen los elementos columna del tercer nivel.
element forceBeamColumn 31 31 41 5 $OR2 $Tcorot
element forceBeamColumn 32 32 42 5 $OR2 $Tcorot
element forceBeamColumn 33 33 43 5 $OR2 $Tcorot
# Se definen los elementos
element forceBeamColumn 1
element forceBeamColumn 2
element forceBeamColumn 4
element forceBeamColumn 5
element forceBeamColumn 7
element forceBeamColumn 8
viga del marco.
21 22 5 $IPE16 $Tcorot
22 23 5 $IPE16 $Tcorot
31 32 5 $IPE16 $Tcorot
32 33 5 $IPE16 $Tcorot
41 42 5 $IPE16 $Tcorot
42 43 5 $IPE16 $Tcorot
# Se definen las cargas gravitaciones actuantes sobre la estructura
pattern Plain 1 Linear {
load 21 0.0 -3.605 -420.58
load 22 0.0 -7.21 0.0
load 23 0.0 -3.605 420.58
load 31 0.0 -3.605 -420.58
load 32 0.0 -7.21 0.0
load 33 0.0 -3.605 420.58
load 41 0.0 -4.095 -477.75
load 42 0.0 -8.19 0.0
load 43 0.0 -4.095 477.75
}
# Se definen los registros del análisis.
file mkdir $carpeta;
# Se crea la carpeta donde se almacenarán los
resultados.
# Desplazamiento del nodo de control.
recorder Node -file $carpeta/DespTop.out -time -node 41 -dof 1 disp;
# Reacciones en la base.
recorder Node -file $carpeta/ReaccionBase.out -time -node 11 12 13 -dof 1 2
3 reaction;
51
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# Distorsiones de entrepiso.
recorder Drift -file $carpeta/Drift.out -time -iNode 11 21 31 -jNode 21 31
41 -dof 1 -perpDirn 2;
# Se define la ventana que permitirá visualizar el modelo.
recorder display "Pushover" 10 10 600 600 -wipe
prp 0 0 50
vup 0 1 0
vpn 0 0 1
display 1 2 10
set ViewScale 5;
# Se definen los parámetros del análisis estático.
system UmfPack
numberer RCM
constraints Plain
test NormDispIncr 1.0e-5 10 0;
integrator LoadControl 0.1
algorithm Newton
analysis Static
analyze 10
loadConst -time 0.0
puts "Análisis estático finalizado."
# Se realiza el análisis Pushover.
# Se define el patrón de carga.
pattern Plain 2 Linear {
load 21 0.88 0.0 0.0
load 31 0.88 0.0 0.0
load 41 1.0 0.0 0.0
}
# se define el análisis controlado por deformación
set IDctrlNode 41
set DmaxPush 75.0
set DxPush 0.1
set Nsteps [expr int($DmaxPush/$DxPush)]
constraints Plain;
numberer RCM;
system UmfPack;
test NormDispIncr 1.0e-3 500 0;
algorithm Newton;
integrator DisplacementControl $IDctrlNode 1 $DxPush
analysis Static
analyze $Nsteps;
puts "Análisis Pushover realizado"
52
205
206
207
208
209
210
211
212
213
214
215
216
# set loadSteps 34;
#
#
#
#
#
#
#
#
Debe ser entero para ingresarlo en el comando analyze.
constraints Plain;
numberer RCM;
system UmfPack;
test NormDispIncr 1.0e-3 500 0;
algorithm Newton;
integrator LoadControl 0.1 2 0.1 1;
analysis Static
analyze $loadSteps;
# puts "Análisis Pushover realizado"
53
7. Análisis dinámico no lineal de un marco de
concreto reforzado
7.1 Descripción del modelo
En este ejemplo se realiza un análisis dinámico a un marco de concreto reforzado en
2D. El marco está compuesto por columnas cuadradas de 30 x 30 cm y trabes de 30 x 20 cm.
En este ejemplo se consideran efectos no lineales. Las unidades del modelo son N, m y s.
El marco consta de tres niveles y tres crujías. La altura de entrepiso del modelo es
igual a 3.5 m. El ancho de las crujías es de 8m. Las columnas del marco tienen 12 varillas
del #8, estribos del #3 a cada 15 cm y recubrimiento de 6 cm. Las trabes tienen 4 varillas del
#8, estribos del #2 a cada 15 cm y un recubrimiento de 6 cm. Para la azotea se considera una
carga linealmente distribuida 𝜔𝑎 = 11 𝑘𝑁/𝑚 y para los entrepisos 𝜔𝑒 = 9 𝑘𝑁/𝑚. El
concreto tiene un 𝑓´𝑐 = 35 𝑀𝑃𝑎. El marco será sometido a la componente Este-Oeste del
movimiento sísmico del terremoto de Michoacán, México, del 19/sept/1985, registrado en la
estación SCT (Instituto de Ingeniería, 2018). En la Figura 7.1 se muestra el esquema del
marco analizado en este ejemplo.
Una de las principales ventajas de utilizar comandos para definir la geometría y
condiciones de carga del modelo, como lo hace OpenSees, es que es posible automatizar
diferentes partes de estos procesos. En este ejemplo, se mostrará cómo el uso de funciones
iterativas puede facilitar la construcción de los modelos estructurales en OpenSees.
54
31
30
312
32
322
311
321
331
21
20
222
231
112
122
111
0
131
8m
3.5
m
141
2
1
8m
13
132
121
3.5
m
241
12
11
10
23
232
221
3.5
m
341
22
212
211
33
332
3
8m
Figura 7.1 Esquema del marco analizado en el ejemplo
7.2 Descripción del código
Se comienza a construir el modelo borrando objetos definidos con anterioridad por
medio del comando wipe (línea 6). Posteriormente, se indican el número de dimensiones del
modelo y número de grados de libertad por nodo con el comando BasicBuilder (línea 7).
Entre las líneas 10 a 23 se definen parámetros que facilitarán la creación del modelo.
Se aclara que este modelo permite definir el número de crujías y niveles que tendrá marco,
además de sus respectivas dimensiones. A pesar de que se permite definir las dimensiones de
las columnas y trabes, es necesario ingresar datos adicionales para la correcta definición de
los elementos.
Las masas actuantes se definen a partir de las cargas linealmente distribuidas
actuantes en cada nivel. Como se ha hecho anteriormente, las masas se ubican en las
55
conexiones viga – columna. De la línea 30 a 50 se crean los nodos que compondrán el marco.
Las etiquetas de los nodos del marco, con excepción de los de la base, se nombran de acuerdo
a la siguiente nomenclatura $i$j, donde $i y $j son el nivel y la crujía donde se ubica el nodo,
respectivamente.
Los nodos de la base se enumeran considerando únicamente el número de la crujía a
la que pertenecen. Para empotrar a estos nodos se utiliza el comando fixY, el cual sirve para
definir las restricciones de todos los nodos que se encuentren en una coordenada Y (vertical)
establecida por el usuario. Esto se hace en la línea 53.
De la línea 56 a la 62 se definen diafragmas rígidos de cada nivel por medio del
comando equalDOF.
Para crear las secciones de concreto de este ejemplo es necesario definir primero los
materiales que las compondrán. El acero de las varillas longitudinales se define entre las
líneas 72 a 75. Nótese que el comando unialxialMaterial MinMax establece las
deformaciones límite que una fibra de acero puede soportar antes de fallar. Al ser necesario
considerar el incremento de resistencia del concreto debido al confinamiento brindado por
los estribos, tres tipos distintos de concretos deben ser definidos: 1) el concreto sin confinar
exterior a los estribos, 2) el concreto confinado de las columnas, y 3) el concreto confinado
de las vigas. Las propiedades mecánicas del concreto confinado se pueden determinar
utilizando el modelo de Mander (Mander, et al., 1988). Los tres diferentes tipos de concreto
se crean utilizando el comando uniaxialMaterial Concrete02. Los cuatro materiales
mencionados anteriormente se definen entre las líneas 72 a 97. La Figura 7.2 muestra
esquemáticamente el comportamiento mecánico de un material Concrete02.
56
Figura 7.2 Relación esfuerzo–deformación de Concrete 02, adaptada de (OpenSees, 2018)
Las secciones de los elementos de concreto se definen entre las líneas 100 a 218 por
medio del comando section fiberSec. Dichas secciones se crean definiendo el núcleo de
concreto con el material de concreto confinado, posteriormente, utilizando el material del
concreto sin confinar, se define el recubrimiento de la sección, ambos elementos de la sección
se construyen utilizando el comando patch rect. Por último, se empela el comando fiber para
definir cada una de las varillas que conforman el refuerzo de longitudinal de las secciones.
La Figura 7.3 muestra un esquema de las secciones utilizadas en este ejemplo.
30
30
30
COLUMNAS
E#3@15 cm,
12#8
Rec. 6 cm
20
TRABES
E#2@15 cm,
4#8
Rec. 6 cm
Figura 7.3 Esquema de las secciones transversales de los elementos (dimensiones en cm)
57
En este ejemplo se consideran las deformaciones producidas por esfuerzos cortantes
en sección. Para realizar esto es necesario crear un material adicional (en este caso se usa
Steel01 por su simplicidad) con las propiedades determinadas de acuerdo lo establecido en
la referencia (California Department of Transportation, 2013). Posteriormente, utilizando el
comando section Aggregator se conjugan las propiedades de la sección adicional con
aquellas definidas con anterioridad. En otras palabras, la relación esfuerzo cortante –
deformación del material Steel01 se agrega a las secciones hechas a base de fibras. Es
importante indicar que este comando no considera una interacción entre las respuestas de los
diferentes grados de libertad.
Los elementos que conforman al modelo se definen de la línea 226 a la 241. Las
etiquetas de los elementos se definen de la siguiente manera $i$j$e, donde $i y $j son el nivel
y la crujía donde se encuentra el elemento, respectivamente, y $e es el valor para diferenciar
columnas de vigas. Se usa 1 para columnas y 2 para vigas.
De la línea 244 a 255 se genera la ventana con la representación gráfica del modelo y
se determina el periodo de la estructura. En este caso se obtuvo un periodo fundamental 𝑇 =
0.86 𝑠. Este valor podría considerarse alto para un marco de tres niveles, pero se decidió
mantener con la finalidad de obtener demandas significativas en la estructura durante el
análisis dinámico.
Las cargas gravitacionales y los archivos de resultados que se generan de los análisis
se definen de la línea 258 a 285. El análisis estático por cargas gravitacionales se define y se
realiza entre las líneas 299 a 306, al finalizar éste análisis se utiliza el comando loadConst
para establecer las cargas existentes como constantes en los análisis posteriores.
Antes de realizar el análisis dinámico es necesario definir el amortiguamiento de la
estructura (se considera 2%). En este ejemplo no se recomienda utilizar la matriz de rigidez
inicial para definir el amortiguamiento estructural ya que, al considerarse efectos mecánicos
no lineales, el no tomar en cuenta la degradación de la rigidez de la estructura puede conducir
a resultados desviados. También, en este ejemplo se decidió escalar la intensidad del registro
sísmico al 300%; esto para provocar un daño perceptible en la estructura.
58
Obsérvese que en este modelo se empleó un número considerable de líneas de código
para su elaboración. Cuando esto ocurre puede ser recomendable separar el modelo en
diferentes archivos de texto los cuales podrán ser llamados posteriormente desde un único
archivo raíz. Al utilizar este método es posible facilitar la revisión y modificación de modelos
de gran tamaño en OpenSees.
En la Figura 7.4 se muestra el registro de desplazamientos laterales calculados en el
Nodo 33 del marco.
Desplazamiento, m
0.30
0.20
0.10
0.00
-0.10
-0.20
-0.30
0 20 40 60 80 100 120 140 160 180 200 220
Tiempo, s
Figura 7.4 Registro de desplazamiento laterales de la azotea del marco
7.3 Comandos adicionales empleados
Nodos:
-
fixY [Coordenada Y] [Grados de libertad restringidos de los nodos existentes en el
coordenada Y]
Materiales:
59
-
-
uniaxialMaterial MinMax [Etiqueta material] [Etiqueta material existente] –min
[Mínimo valor de deformación (Compresión)] -max [Máximo valor de deformación
(Tensión)]
uniaxialMaterial Concrete02 [Etiqueta material] [f’c] [Deformación a f´c]
[Esfuerzo último] [Deformación última] [lambda] [Resistencia tensión] [Ets]
uniaxialMaterial Steel01 [Etiqueta material] [Fy] [Módulo de elasticidad] [Rigidez
posterior a la fluencia.
Secciones:
-
fiber [Coordenada Y local] [Coordenada Z local] [Área de la fibra] [Etiqueta material
existente]
section Aggregator [Etiqueta sección] [Etiqueta material existente] [Solicitación
relacionada a la deformación] –section [Etiqueta sección existente]
Elementos:
-
geomTransf Corotational [Etiqueta de la transformada geométrica]
-
element forceBeamColumn [Etiqueta del elemento] [Nodo i] [Nodo f] [Divisiones
del elemento] [Etiqueta sección existente] [Etiqueta transformada geométrica
existente]
60
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#
#
#
#
-----------------------------------------------------------------------Análisis dinámico no lineal de un marco de concreto.
Unidades del modelo: [N,m,s]
------------------------------------------------------------------------
wipe;
model BasicBuilder -ndm 2 -ndf 3;
# Se definen valores para crear el modelo.
set Nniveles 3;
set Ncrujias 3;
set L 8.0;
# Ancho de crujía
set H 3.5;
# Altura de entrepiso.
set wa 11000;
# Carga azotea [N/m]
set we 9000;
# Carga entrepiso [N/m]
set hcol 0.30; # Altura columna.
set bcol 0.30; # Base columna.
set hviga 0.30; # Altura viga.
set bviga 0.20; # Base viga.
set carpeta ResultadosEx5; # Se define el nombre de la carpeta donde se
guardarán los resultados.
set g 9.81;
# Aceleración de la gravedad.
set pi 3.1416;
# Se definen las masas de cada nodo.
set ma [expr $wa*$L/$g/2.0]; # Masa nodo exterior azotea.
set me [expr $we*$L/$g/2.0]; # Masa nodo exterior entrepiso.
# Se definen los nodos de la estructura.
for {set i 0} {$i <= $Nniveles} {incr i} {
for {set j 0} {$j <= $Ncrujias} {incr j} {
if {$i == 0} {
node $j [expr $j*$L] 0.0;
} else {
if {$i == $Nniveles} {
if {$j == 0 || $j == $Ncrujias} {
node $i$j [expr $j*$L] [expr $i*$H] -mass
} else {
node $i$j [expr $j*$L] [expr $i*$H] -mass
}
} else {
if {$j == 0 || $j == $Ncrujias} {
node $i$j [expr $j*$L] [expr $i*$H] -mass
} else {
node $i$j [expr $j*$L] [expr $i*$H] -mass
}
}; # Segundo else.
}; # Primer else.
}; # Segundo for.
}; # Primer for.
$ma 0.0 0.0
[expr 2.0*$ma] 0.0 0.0
$me 0.0 0.0
[expr 2.0*$me] 0.0 0.0
61
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Se definen los apoyos de la estructura.
fixY 0.0 1 1 1
# Se crean los diafragmas rígidos entre los niveles.
for {set i 1} {$i <= $Nniveles} {incr i 1} {
for {set j 0} {$j <= [expr $Ncrujias-1]} {incr j 1} {
set a [expr $j + 1];
set b 0
equalDOF $i$b $i$a 1
}
}
# Se definen los materiales de las secciones.
# Tags de los materiales.
set AceroTag 1
set cover35 3
set NucCol 4
set NucViga 5
# Se definen las propiedades del acero longitudinal.
set fy [expr 420e6]; # Esfuerzo de fluencia.
set Es [expr 200e9]; # Módulo elástico.
uniaxialMaterial Steel02 [expr $AceroTag+1] $fy $Es 0.025 18.0 0.925 0.15;
uniaxialMaterial MinMax $AceroTag [expr $AceroTag+1] -min -0.05 -max 0.05
# Recubrimiento, concreto no confinado.
set fc [expr 35e6]; # f´c.
set epss 0.005; # Deformación última.
set Ec [expr 14000.*sqrt($fc/9.81*100./1e6)*9.81/100*1e6]; # Módulo elástico
(fórmula de RCDF).
uniaxialMaterial Concrete02 $cover35 -$fc [expr -2.0*$fc/$Ec] 0.0 -$epss 0.1
[expr 0.04*$fc] [expr 0.04*$fc/(2.0*$fc/$Ec)] ; # Concreto sin confinar.
# Concreto Columna.
set fcc1 [expr 37.695e6];
set eu1 [expr 0.024413];
set fcu1 [expr 7.1035e6];
# Máxima resistencia (Mander)
# Deformación última (Mander)
# Resistencia última (Mander)
uniaxialMaterial Concrete02 $NucCol -$fcc1 [expr -2.0*$fcc1/$Ec] -$fcu1 -$eu1 0.1
[expr 0.04*$fcc1] [expr 0.04*$fcc1/(2.0*$fcc1/$Ec)]; #Concreto confinado.
# Concreto Viga.
set fcc2 [expr 35.876e6];
set eu2 [expr 0.020034];
set fcu2 [expr 2.835e6];
# Máxima resistencia (Mander)
# Deformación última (Mander)
# Resistencia última (Mander)
uniaxialMaterial Concrete02 $NucViga -$fcc2 [expr -2.0*$fcc2/$Ec] -$fcu2 -$eu2 0.1
[expr 0.04*$fcc2] [expr 0.04*$fcc2/(2.0*$fcc2/$Ec)]; # Concreto confinado.
# Se definen las secciones de los elementos.
set ColTag 3
set VigTag 4
62
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# Áreas de las barras longitudinales.
set db8 [expr 8.0*0.0254/8.0];
set barArea8 [expr $db8*$db8*$pi/4.0];
# Dimensiones del núcleo por Mandel y cortante por Caltrans.
set doz [list [expr $bcol/2] [expr $bviga/2]]; # Mitad de las secciones.
set doy [list [expr $hcol/2] [expr $hviga/2]];
set diz [list 0.07839 0.02605];
# Distancia al borde el
concreto confinado.
set diy [list 0.07839 0.07605];
# Capacidad de cortante, modelo de Caltrans.
set Vn
[list 155637.32 79884.06];
set Kst [list 7.296E+08 4.864E+08];
set nFibrasY 8;
set nFibrasZ 8;
set FibraRec 2;
#Elemento columna tag 1.
set dozc [lindex $doz 0];
set doyc [lindex $doy 0];
set dizc [lindex $diz 0];
set diyc [lindex $diy 0];
set Vnc [lindex $Vn 0];
set Kstc [lindex $Kst 0];
set RecC 0.06;
#Recubrimiento de la sección.
section fiberSec 1 {
# Se define el núcleo
-h/2 -b/2 h/2
b/2
patch rect $NucCol $nFibrasY $nFibrasZ -$diyc -$dizc $diyc $dizc
# Se define el recubrimiento.
patch rect $cover35 $nFibrasY
patch rect $cover35 $nFibrasY
patch rect $cover35 $FibraRec
patch rect $cover35 $FibraRec
$FibraRec
$FibraRec
$nFibrasZ
$nFibrasZ
-$doyc -$dozc $doyc -$dizc
-$doyc $dizc $doyc $dozc
-$doyc -$dizc -$diyc $dizc
$diyc -$dizc $doyc $dizc
# Se define el acero longitudinal.
# Refuerzo superior.
set sep1c [expr (2*$doyc-2*$RecC-$db8)/3.0]
fiber [expr $doyc-$RecC-$db8/2.0] [expr
$barArea8 $AceroTag
fiber [expr $doyc-$RecC-$db8/2.0] [expr
$barArea8 $AceroTag
fiber [expr $doyc-$RecC-$db8/2.0] [expr
$barArea8 $AceroTag
fiber [expr $doyc-$RecC-$db8/2.0] [expr
$barArea8 $AceroTag
-$dozc+$RecC+$db8/2.0+0*$sep1c]
-$dozc+$RecC+$db8/2.0+1*$sep1c]
-$dozc+$RecC+$db8/2.0+2*$sep1c]
-$dozc+$RecC+$db8/2.0+3*$sep1c]
63
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# Refuerzo inferior.
fiber [expr -$doyc+$RecC+$db8/2.0]
$barArea8 $AceroTag
fiber [expr -$doyc+$RecC+$db8/2.0]
$barArea8 $AceroTag
fiber [expr -$doyc+$RecC+$db8/2.0]
$barArea8 $AceroTag
fiber [expr -$doyc+$RecC+$db8/2.0]
$barArea8 $AceroTag
[expr -$dozc+$RecC+$db8/2.0+0*$sep1c]
[expr -$dozc+$RecC+$db8/2.0+1*$sep1c]
[expr -$dozc+$RecC+$db8/2.0+2*$sep1c]
[expr -$dozc+$RecC+$db8/2.0+3*$sep1c]
# Refuerzo lateral.
fiber [expr -$doyc+$RecC+$db8/2.0+1*$sep1c] [expr -$dozc+$RecC+$db8/2.0]
$barArea8 $AceroTag
fiber [expr -$doyc+$RecC+$db8/2.0+1*$sep1c] [expr $dozc-$RecC-$db8/2.0]
$barArea8 $AceroTag
fiber [expr -$doyc+$RecC+$db8/2.0+2*$sep1c] [expr -$dozc+$RecC+$db8/2.0]
$barArea8 $AceroTag
fiber [expr -$doyc+$RecC+$db8/2.0+2*$sep1c] [expr $dozc-$RecC-$db8/2.0]
$barArea8 $AceroTag
}; # Se terminó de definir la sección.
# Elemento viga tag 2.
set dozv [lindex $doz 1];
set doyv [lindex $doy 1];
set dizv [lindex $diz 1];
set diyv [lindex $diy 1];
set Vnv [lindex $Vn 1];
set Kstv [lindex $Kst 1];
set RecV 0.06;
#Recubrimiento de la sección.
section fiberSec 2 {
# Se define el núcleo.
-h/2 -b/2 h/2
b/2
patch rect $NucViga $nFibrasY $nFibrasZ -$diyv -$dizv $diyv $dizv
# Se define el recubrimiento.
patch rect $cover35 $nFibrasY
patch rect $cover35 $nFibrasY
patch rect $cover35 $FibraRec
patch rect $cover35 $FibraRec
$FibraRec
$FibraRec
$nFibrasZ
$nFibrasZ
-$doyv -$dozv $doyv -$dizv
-$doyv $dizv $doyv $dozv
-$doyv -$dizv -$diyv $dizv
$diyv -$dizv $doyv $dizv
# Se define el acero longitudinal
# Refuerzo superior.
set sep1v [expr (2*$dozv-2*$RecV-$db8)]
fiber [expr $doyv-$RecV-$db8/2.0] [expr
$barArea8 $AceroTag
fiber [expr $doyv-$RecV-$db8/2.0] [expr
$barArea8 $AceroTag
# Refuerzo inferior.
set sep2v [expr (2*$dozv-2*$RecV-$db8)]
-$dozv+$RecV+$db8/2.0+0*$sep1v]
-$dozv+$RecV+$db8/2.0+1*$sep1v]
64
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
fiber [expr -$doyv+$RecV+$db8/2.0] [expr -$dozv+$RecV+$db8/2.0+0*$sep2v]
$barArea8 $AceroTag
fiber [expr -$doyv+$RecV+$db8/2.0] [expr -$dozv+$RecV+$db8/2.0+1*$sep2v]
$barArea8 $AceroTag
}; # Se terminó de definir la sección.
# Se define la relación cortante - deformación.
set CortanteCol 6
uniaxialMaterial Steel01 $CortanteCol $Vnc $Kstc 1.0e-3
section Aggregator $ColTag $CortanteCol Vy -section 1
set CortanteVig 7
uniaxialMaterial Steel01 $CortanteVig $Vnv $Kstv 1.0e-3
section Aggregator $VigTag $CortanteVig Vy -section 2
# Se define la transformación geométrica.
set Tcorot 1
geomTransf Corotational $Tcorot
# Se definen los elementos del modelo.
set nPts 5
for {set i 1} {$i <= $Nniveles} {incr i} {
set y [expr $i - 1];
for
set
set
set
set
{set j 1} {$j <= [expr $Ncrujias + 1]} {incr j} {
x [expr $j - 1];
c 1; # Tag columnas $i$j$c.
v 2; # Tag vigas $i$j$v.
t 3;
element forceBeamColumn $i$j$c $y$x $i$x $nPts $ColTag $Tcorot
if {$j <= $Ncrujias} {
element forceBeamColumn $i$j$v $i$x $i$j $nPts $VigTag $Tcorot
}
}; # Segundo for.
}; # Primer for.
# Se define la ventana que permitirá visualizar el modelo.
recorder display "Marco 3 Niveles" 10 10 600 600 -wipe
prp 0 0 50
vup 0 1 0
vpn 0 0 1
display 1 2 10
set ViewScale 5;
# Se determina el periodo fundamental de la estructura.
set eigenvalues [eigen 1];
set T [expr 2*$pi/($eigenvalues**0.5)];
puts "T1 = $T";
65
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
# Se definen las cargas actuantes en la estructura.
set Grav 1
pattern Plain $Grav Linear {
for {set i 1} {$i <= $Nniveles} {incr i} {
for {set j 0} {$j <= $Ncrujias} {incr j} {
if {$i == $Nniveles} {
if {$j == 0 || $j == $Ncrujias} {
if {$j == 0} {
load $i$j 0.0 [expr -$wa*$L/2.0] [expr
} else {
load $i$j 0.0 [expr -$wa*$L/2.0] [expr
}
} else {
load $i$j 0.0 [expr -2*$wa*$L/2.0] 0.0
}
} else {
if {$j == 0 || $j == $Ncrujias} {
if {$j == 0} {
load $i$j 0.0 [expr -$we*$L/2.0] [expr
} else {
load $i$j 0.0 [expr -$we*$L/2.0] [expr
}
} else {
load $i$j 0.0 [expr -2*$we*$L/2.0] 0.0
}
}; # Segundo else.
}; # Segundo for.
}; # Primer for.
}; # Patter.
-$wa*$L**2/12.0]
$wa*$L**2/12.0]
-$we*$L**2/12.0]
$we*$L**2/12.0]
# Se definen los registros.
file mkdir $carpeta; # Se crea la carpeta donde se almacenarán los resultados.
recorder Node -file $carpeta/DespTop.out -time -node 33 -dof 1 disp;
recorder Node -file $carpeta/ReaccionBase.out -time -node 0 1 2 3 -dof 1 2
3 reaction;
recorder Drift -file $carpeta/Drift.out -time -iNode 3 13 23 -jNode 13 23 33
-dof 1 -perpDirn 2 ;
# Se definen los parámetros del análisis estático.
system UmfPack
numberer RCM
constraints Plain
test NormDispIncr 1.0e-5 10 0;
integrator LoadControl 0.1
algorithm Newton
analysis Static
analyze 10
66
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
loadConst -time 0.0
puts "Análisis estático finalizado."
# Se define el amortiguamiento de la estructura.
set freq [expr [eigen 1]**0.5]
set damp 0.02;
rayleigh 0. 0. 0. [expr 2*$damp*$freq]
# Se crea el patrón de aceleraciones.
set Factor 0.03; # Registro de aceleraciones esta en cm/s2, el factor lo
convierte a m/s2 y triplica la intensidad sísmica
set dt 0.01; # Diferencial de tiempo del acelerograma.
set Npuntos 20000; # Número de puntos del acelerograma.
set AccelDataFile "SCT18509.txt"; # Se indica el registro a utilizar.
set DirX 1; # Dirección en la que se aplicarán las aceleraciones.
set accelSeries "Series -dt $dt -filePath $AccelDataFile -factor $Factor";
pattern UniformExcitation 2 $DirX -accel $accelSeries
# Se realiza el análisis dinámico.
system UmfPack
numberer RCM
constraints Plain
test NormDispIncr 1.0e-8 10
integrator Newmark 0.5 0.25
algorithm Newton
analysis Transient
analyze $Npuntos $dt
puts "Análisis Dinámico finalizado."
67
8. Análisis dinámico de un marco reforzado con
amortiguador viscoso
8.1 Descripción del modelo
En este ejemplo se realiza un análisis dinámico a un marco reforzado con un
amortiguador viscoso. No se consideran efectos no lineales en trabe y columnas, sólo en el
disipador. Este ejemplo se encuentra disponible en la página oficial del OpenSees (OpenSees,
2010). Las unidades del modelo son kN, mm y s.
El modelo a analizar, mostrado en la Figura 8.1, consta de un marco de un nivel y una
sola crujía, donde L = 5 m y h = 3 m. Se considera una carga actuante sobre el marco de 1,000
KN. Para definir los elementos estructurales se parte de las consideraciones de que la viga es
un elemento infinitamente rígido y que el marco posee un periodo fundamental igual a 0.7 s.
Basándose en estos datos se determina el momento de inercia de las columnas y se procede
a crear los elementos viga y columna correspondiente. El amortiguador viscoso (Elemento
4) posee una rigidez axial 𝐾𝑑 = 25 𝑘𝑁/𝑚𝑚, un coeficiente de amortiguamiento 𝐶𝑑 =
20.74 𝑘𝑁(𝑠/𝑚𝑚)𝛼 y un exponente de velocidad α = 0.35. El marco es sometido a la
componente Este-Oeste de movimiento sísmico del terremoto de Michoacán, México, del
19/sept/1985 registrado en la estación SCT (Instituto de Ingeniería, 2018).
Para mostrar los efectos de la adición del amortiguador viscoso en la respuesta
dinámica del marco, al final del ejemplo se muestran los desplazamientos laterales del marco
con y sin amortiguador.
68
3
4
3
1
2
h
4
1
2
L
Figura 8.1 Esquema del marco analizado en el ejemplo
8.2 Descripción del código
Se comienza a construir el modelo borrando los objetos definidos con anterioridad
por medio del comando wipe, (línea 8). Posteriormente, se indican el número de dimensiones
del modelo y número de grados de libertad por nodo (línea 9).
Entre las líneas 12 a 26 se definen parámetros que facilitan la creación del modelo y
su posterior modificación en caso de ser necesario.
Entre las líneas 30 a 44 se crean los nodos de la estructura, sus respectivas
restricciones y la masa actuante, siendo ésta última distribuida entre las dos conexiones viga
– columna de la estructura.
Ahora, al conocer la masa y el periodo de la estructura, es posible determinar su
rigidez lateral (K) por medio de la ecuación (8.1):
𝑚
𝑇 = 2𝜋√ 𝐾
(8.1)
69
donde:
𝑇 es el periodo de la estructura.
𝑚 es la masa actuante.
𝐾 es la rigidez lateral.
En este ejemplo se considera que la viga es un elemento infinitamente rígido. Bajo
esta suposición, y para un marco de este tipo, la rigidez lateral de la estructura es igual a
(Chopra, 1995):
𝐾=
∑
𝑐𝑜𝑙𝑢𝑚𝑛𝑎𝑠
12𝐸𝐼𝑐
𝐸𝐼𝑐
= 24 3
3
ℎ
ℎ
(8.2)
donde:
𝐸 es el módulo de elasticidad.
𝐼𝑐 es el momento de inercia de la columna.
ℎ es la altura del marco.
Como se puede observar en la ecuación (8.2), es posible despejar el momento de
inercia de la columna (𝐼𝑐). Dicho valor se utiliza para definir los elementos columna del
marco. Si en cambio, la suposición hubiera sido que el elemento viga carece de rigidez, la
rigidez lateral del marco podría calcularse con la ecuación (8.3):
𝐾=
∑
𝑐𝑜𝑙𝑢𝑚𝑛𝑎𝑠
3𝐸𝐼𝑐
𝐸𝐼𝑐
=6 3
3
ℎ
ℎ
(8.3)
Claramente, entre estos dos extremos existen una infinidad de valores de rigidez para
la viga del marco. Para esos casos, la rigidez lateral del marco se calcula de la siguiente
forma:
70
𝐾=
24𝐸𝐼𝑐 12𝜌 + 1
ℎ3 12𝜌 + 4
(8.4)
Donde ρ es la relación de rigidez entre la viga y la columna, que se calcula con la
ecuación (8.5):
𝜌=
𝐼𝑏
4𝐼𝑐
(8.5)
Siendo 𝐼𝑏 el módulo de inercia de la viga. En la Figura 8.2 se muestra la variación
rigidez lateral en función del parámetro ρ.
K/( EIc /h 3 )
24
18
12
6
0
0.001
0.01
0.1
1
10
100
ρ
Figura 8.2 Rigidez lateral del marco en función de 𝜌, adaptada de (Chopra, 1995)
La definición de las propiedades y posterior creación de los elementos que conforman
el marco se realiza entre las líneas 47 a 71. Obsérvese que para modelar el amortiguador
viscoso se comenzó definiendo un material con el comando uniaxialMaterial
ViscousDamper; el cual representa el comportamiento de un resorte lineal y un amortiguador
no lineal en serie. A manera de ejemplo, en la Figura 8.3 se muestra la respuesta típica de
un disipador viscoso no lineal.
71
Fuerza axial, kN
100
50
0
-50
-100
-20
-10
0
10
Desplazamiento, mm
20
Figura 8.3 Respuesta típica de un disipador viscoso no lineal
Una vez que el material que compondrá al amortiguador viscoso es definido, se
procede a crear el elemento por medio del comando element twoNodeLink; el cual construye,
en este caso, un elemento de longitud cero con una respuesta axial definida por las
propiedades del material ViscousDamper.
De las líneas 73 a 81 se definen los archivos de resultados que se desean generar del
análisis. Posteriormente, de la línea 84 a 88, se define el amortiguamiento de la estructura,
indicando al programa que sólo tome en cuenta la matriz de masa del modelo para determinar
el amortiguamiento de Rayleigh.
El ejemplo se finaliza realizando el análisis dinámico. Esto ocurre entre las líneas 91
a 117. Para observar los efectos producidos por el amortiguador viscoso en la respuesta
dinámica del marco, se realizaron dos análisis, uno del marco sin reforzar y otro del marco
reforzado con el amortiguador viscoso. La Figura 8.4 muestra la comparación del registro de
desplazamientos del Nodo 4 de los dos análisis realizados. Obsérvese que la adición del
amortiguador viscoso mejora el desempeño estructural del marco, lográndose una reducción
en la respuesta máxima de más del 60% en comparación con el caso sin refuerzo.
Desplazamiento laterla, mm
72
80
60
Sin refuerzo
Con refuerzo
40
20
0
-20
-40
-60
-80
0
20
40
60
80
100
Tiempo, s
Figura 8.4 Comparación de desplazamientos laterales: marco sin y reforzado con amortiguador
viscoso.
8.3 Comandos adicionales empleados
Materiales:
-
uniaxialMaterial ViscousDamper [Etiqueta material] [Rigidez axial Kd]
[Coeficiente de amortiguamiento] [Alfa o exponente de velocidad]
Elementos:
-
element twoNodeLink [Etiqueta del elemento] [Nodo i] [Nodo f] [Etiqueta material
existente] [Dirección del material]
73
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#-------------------------------------------------------------------------# Análisis dinámico de un marco reforzado con amortiguador viscoso.
#
# Problema creado por: Sarven Akcelyan & Dimitrios G. Lignos
# Unidades del modelo [KN,mm,s]
#-------------------------------------------------------------------------wipe;
model BasicBuilder -ndm 2 -ndf 3;
# Se crea la carpeta que almacenará los resultados.
set Output ResultadosEx6;
file mkdir $Output;
# Parámetros del marco.
set L 5000.;
# Ancho de crujía.
set h 3000.;
# Altura del marco.
set W 1000.;
# Peso actuante, para definir la masa.
set g 9810.;
# Gravedad en mm/s2.
set m [expr $W/$g];
# Se define la masa actuante.
set Tn 0.7;
# Periodo de la estructura.
set pi [expr acos(-1.0)];
# Propiedades del amortiguador
set Kd 25.;
# Rigidez axial.
set Cd 20.7452;
# Coeficiente de amortiguamiento.
set ad 0.35;
# Exponente a
# Se
node
node
node
node
definen
1
0.
2
$L
3
0.
4
$L
los nodos del modelo.
0. ;
0. ;
$h ;
$h ;
# Se definen las condiciones de apoyo.
fix 1 1 1 1;
fix 2 1 1 1;
# Se restringen los nodos de la viga
equalDOF 3 4 1 ; # GDL .
# Se asignan las masas.
mass 3 [expr 0.5*$m] 0. 0. ;
mass 4 [expr 0.5*$m] 0. 0. ;
# Se definen las propiedades de las columnas y la viga.
set K [expr pow(2*$pi/$Tn,2)*$m];
set E 200.0;
set Ic [expr $K*pow($h,3)/(24*$E)]; # (K=24EIc/h^3)
set Ib [expr 1e12*$Ic];
set A [expr 1e12];
74
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Se define el material ViscousDamper
uniaxialMaterial ViscousDamper 1 $Kd $Cd $ad
# Se crea la transformada geometrica.
set TransfTag 1;
geomTransf Linear $TransfTag;
# Se definen los elementos.
# Columna
element elasticBeamColumn 1 1 3 $A $E $Ic $TransfTag;
element elasticBeamColumn 2 2 4 $A $E $Ic $TransfTag;
# Viga
element elasticBeamColumn 3 3 4 $A $E $Ib $TransfTag;
# Amortiguador
#element twoNodeLink $eleTag $iNode $jNode -mat $matTags -dir $dirs
element twoNodeLink
4
1
4
-mat
1
-dir 1
puts "Modelo construido"
# Se definen los registros del modelo
recorder Node -file $Output/Disp.out -time -node 4 -dof 1 disp;
recorder Node -file $Output/Acc.out -time -node 4 -dof 1 accel;
recorder Node -file $Output/Base.out -time -node 1 2 -dof 1 reaction;
recorder Node -file $Output/NBase.out -time -node 1 2 -dof 2 reaction;
recorder
recorder
recorder
recorder
Element
Element
Element
Element
-file $Output/Damperdisp.out -time -ele 4 deformations ;
-file $Output/Damperforce.out -time -ele 4 localForce ;
-file $Output/Dampergbforce.out -time -ele 4 -dof 1 force;
-file $Output/Frameforce.out -time -ele 1 2 -dof 1 force;
# Se define el amortiguamiento de la estructura.
set freq [expr ([eigen -fullGenLapack 1])**0.5]
set period [expr 2*$pi/$freq]
puts "T = $period"
set damp 0.02;
rayleigh [expr 2*$damp*$freq] 0. 0. 0.
# Se crea el patrón de aceleraciones.
set Factor 10.0;
# El registro de aceleraciones se encuentra en
cm/s2, este factor lo convierte a mm/s2.
set dt 0.01;
# Diferencial de tiempo del acelerograma.
set Npuntos 15000;
# Número de puntos del acelerograma.
set AccelDataFile "SCT18509.txt"; # Se indica el registro a utilizar.
set DirX 1;
# Dirección en la que se aplicarán las aceleraciones.
set accelSeries "Series -dt $dt -filePath $AccelDataFile -factor $Factor";
pattern UniformExcitation 1 $DirX -accel $accelSeries
# Se define la ventana que permitirá visualizar el modelo.
recorder display "Marco con VD" 10 10 500 500 -wipe
75
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
prp 200. 50. 1;
vup 0 1 0;
vpn 0 0 1;
display 1 5 40
# Se crea el análisis dinámico.
wipeAnalysis;
constraints Transformation;
numberer RCM;
system UmfPack;
test EnergyIncr 1.0e-10 100;
algorithm KrylovNewton;
integrator Newmark 0.5 0.25 ;
analysis Transient;
analyze $Npuntos $dt;
puts "Análisis dinámico finalizado"
77
9. Análisis dinámico de un marco reforzado con un
contraventeo restringido al pandeo
9.1 Descripción del modelo
En este ejemplo se realiza un análisis dinámico a un marco reforzado con un
contraventeo restringido al pandeo (CRP). Los CPR son dispositivos que disipan energía
sísmica por medio de comportamiento plástico de su núcleo, por lo que durante este análisis
se considerarán efectos no lineales en el CRP. Información adicional sobre los CRP se puede
encontrar en (Merrit, et al., 2003), (Black, et al., 2004), (Tremblay, et al., 2006), (TeranGilmore & Virto, 2009), (Guerrero, et al., 2017), entre otros. Este ejemplo se basa en el
ejemplo del Capítulo 7, sólo se ha sustituido el disipador viscoso por un CRP. Las unidades
del modelo son kN, mm y s.
El modelo consta de un marco de un nivel (de 3 m de altura) y una crujía (de 5 m de
ancho). Se considera una carga actuante sobre el marco de 1,000 KN. Al igual que en el
Capítulo 7, para definir los elementos estructurales se parte de la suposición de que la viga
es un elemento infinitamente rígido y el marco posee un periodo fundamental igual a 0.7 s.
Basándose en estos datos se determina el momento de inercia de las columnas y se procede
a crear los elementos viga y columna correspondientes. El material que conforma al núcleo
del CRP es acero ASTM A36 (𝑓𝑦 = 250 𝑀𝑃𝑎). En la Figura 9.1 se muestra un diagrama del
dispositivo empleado en este ejemplo.
Como se puede apreciar, los CRPs cuentan con dos diferentes secciones transversales.
En los extremos se encuentran las secciones elásticas que actúan como conexiones. El área
transversal de estas secciones es mayor que el área central del núcleo para garantizar que
siempre trabajen en su intervalo elástico. La relación entre el área del núcleo y el área de las
conexiones es de 1 a 4 para este ejemplo. Esto significa que las conexiones del CPR tendrán
78
un área transversal cuatro veces más grande que el área de su núcleo. De la misma figura se
observa que, en este ejemplo, la longitud del núcleo será igual a un tercio de la longitud total
del disipador. Para definir las conexiones del CRP con el marco se definen dos nodos
adicionales; los cuales se considerarán articulados.
Sección elástica
Núcleo con compor(A = 4 Anúcleo )
B tamiento inelástico
Carcasa rellena
de mortero
Carcasa
Núcleo
Mortero
Material
antiadherente
B’
L/3
L/3
Corte B – B´
L/3
Figura 9.1 Esquema de un contravente restringido al pandeo
Al igual que en el Capítulo 7, el marco de será sometido al registro sísmico SCT
19/Sep/1985 (Instituto de Ingeniería, 2018). El marco analizado en este ejemplo se muestra
en la Figura 9.2.
3
4
3
24
43
23
1
1
21
42
22
h
2
41
2
L
Figura 9.2 Esquema del marco analizado en el ejemplo
79
9.2 Descripción del código
Se comienza a construir el modelo borrando los objetos definidos con anterioridad
por medio del comando wipe (línea 8). Posteriormente, se indican el número de dimensiones
del modelo y número de grados de libertad por nodo (línea 9).
Entre las líneas 12 a 28 se definen los valores que facilitarán la creación del modelo
y su posterior modificación en caso de ser necesario. Entre estos valores también se define la
relación de áreas y longitudes del CRP, además del área transversal de su núcleo, en cm2.
Entre las líneas 31 a 48 se crean los nodos de la estructura, sus respectivas
restricciones y la masa actuante, siendo ésta última distribuida entre las dos conexiones viga
– columna de la estructura. Debido a que el CRP se conforma por dos diferentes secciones
transversales, es necesario crear dos nodos adicionales a lo largo del elemento los cuales
definen donde inician y terminan las secciones elásticas del disipador. Adicionalmente se
crean dos nodos en las mismas coordenadas que los nodos 1 y 4. Éstos son los nodos 21 y
24. Los desplazamientos laterales y verticales de los nodos 1 y 21, y 4 y 24 son vinculados
para modelar una conexión articulada entre el marco y el CRP (líneas 47 y 48). Nótese que
sólo los grados de libertad 1 y 2 son vinculados mientras que la rotación (grado de libertad
3) no se vincula.
En este ejemplo es necesario definir el material que compone al núcleo del disipador.
Como se mencionó antes, el esfuerzo de fluencia del acero es 𝑓𝑦 = 250 𝑀𝑃𝑎. Entre las líneas
55 a 58 se crea el material del disipador con los comandos uniaxialMaterial Steel02 y
uniaxialMaterial MinMax. Entre las líneas 61 a 65 se definen las propiedades de las columnas
y la viga del marco. Para modelar el CRP es necesario construir las secciones transversales
de las conexiones y del núcleo. Esto ocurre entre las líneas 68 a 87. Los elementos que
conforman el modelo se crean entre las líneas 96 a 106. Obsérvese que se utilizan elementos
elasticBeamColumn para las columnas y la viga, mientras que para crear el núcleo y las
conexiones del CRP se utilizan elementos forceBeamColumn. Este último tipo de elemento
considera comportamiento inelástico.
80
Una vez que el modelo ha sido construido se procede a definir los diferentes archivos
de resultados que se generarán durante el análisis. Esto ocurre entre las líneas 111 y 124.
Por último, se define el amortiguamiento de la estructura (líneas 127 a 131), se genera
el pattern de la solicitación sísmica (líneas 134 a 142), se genera la ventana con la
representación gráfica del modelo (líneas 145 a 149) y se realiza el análisis dinámico (líneas
152 a 160). En la Figura 9.3 se comparan los desplazamientos del Nodo 4 de la estructura
reforzada con el CRP y sin reforzar. Se puede ver que el CRP reduce significativamente la
respuesta sísmica de la estructura analizada.
Desplazamiento lateral, mm
80
Sin refuerzo
Con refuerzo
60
40
20
0
-20
-40
-60
-80
0
20
40
60
Tiempo, s
80
100
Figura 9.3 Comparación de desplazamientos laterales: marco sin refuerzo y reforzado con CRP
Adicionalmente, la curva fuerza axial – desplazamiento del CRP utilizado en este
ejemplo se muestra en la Figura 9.4. Se aprecia que el CRP fluye tanto a tensión como a
compresión, lo cual le brinda ciclos histeréticos estables. En el siguiente ejemplo se analizará
un marco reforzado con un contraventeo convencional, es decir, uno no restringido al pandeo.
En ese ejemplo, se observará que el contraventeo convencional presenta una menor
resistencia a compresión que a tensión, esto último debido a que se considerará el problema
del pandeo lateral.
Fuerza axial, kN
81
40
30
20
10
0
-10
-20
-30
-40
-10
-5
0
5
10
Desplazamiento, mm
Figura 9.4 Respuesta del contraventeo restringido al pandeo
82
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#-------------------------------------------------------------------------# Análisis dinámico de un marco reforzado con contraventeo restringido al pandeo.
#
# Ejemplo basado en el problema creado por Sarven Akcelyan & Dimitrios G. Lignos.
# Unidades del modelo [KN,mm,s]
#--------------------------------------------------------------------------
wipe;
model BasicBuilder -ndm 2 -ndf 3;
# Se crea la carpeta que almacenará los resultados.
set Output ResultadosEx7;
file mkdir $Output;
# Parámetros del marco.
set L 5000.;
#
set h 3000.;
#
set W 1000.;
#
set g 9810.;
#
set m [expr $W/$g];
#
set Tn 0.7;
#
set pi [expr acos(-1.0)];
Ancho de crujía.
Altura del marco.
Peso actuante, para definir la masa.
Gravedad en mm/s2.
Se define la masa actuante.
Periodo de la estructura.
# Propiedades del contraventeo restringido.
set Lratio [expr 1.0/3.0];
# Relación longitud núcleo / longitud total del
disipador < 1.0
set Aratio 0.25;
# Relación área del núcleo / área conexiones
set fa [expr 1.0];
# Área del núcleo del disipador, en cm2.
# Se
node
node
node
node
definen
1
0.
2
$L
3
0.
4
$L
los nodos del modelo.
0. ;
0. ;
$h -mass [expr 0.5*$m] 0. 0. ;
$h -mass [expr 0.5*$m] 0. 0. ;
# Se definen las condiciones de apoyo.
fix 1 1 1 1;
fix 2 1 1 1;
# Se
node
node
node
node
definen los nodos del contraventeo restringido.
21 0.0 0.0
22 [expr $L*(1-$Lratio)/2.0] [expr $h*(1-$Lratio)/2.0]
23 [expr $L*(1+$Lratio)/2.0] [expr $h*(1+$Lratio)/2.0]
24 $L $h
# Se crea una articulación en los nodos que conectan con el marco.
equalDOF 1 21 1 2;
equalDOF 4 24 1 2;
# Se define el material del disipador.
set steelTagBRBs 1000
83
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
set fyBRB 0.25;
set EsBRB 200.0;
uniaxialMaterial Steel02
[expr $steelTagBRBs+1] $fyBRB $EsBRB 0.02 25.0
0.925 0.15 0.05 1.0 0.05 1.0 0.0;
uniaxialMaterial MinMax
$steelTagBRBs [expr $steelTagBRBs+1] -min 0.20 -max 0.20
# Se definen las propiedades de las columnas y la viga.
set K [expr pow(2*$pi/$Tn,2)*$m];
set E 200.0;
set Ic [expr $K*pow($h,3)/(24*$E)]; # (K=24EIc/h^3)
set Ib [expr 1e12*$Ic];
set A [expr 1e12];
# Se crean las secciones que conforman el disipador.
set BRBsec 1001;
set BRBend 1002;
set
set
set
set
secFactorBRB [expr $fa*(1e2)];
secFactorEND [expr (1.0/$Aratio)*$fa*(1e2)];
by [expr ($secFactorBRB)**0.5];
byEND [expr ($secFactorEND)**0.5];
# Área del núcleo en mm2.
# Áreas conexiones en mm2.
# Se define la sección del núcleo del disipador.
set nFibers 6;
section fiberSec $BRBsec {
patch rect $steelTagBRBs $nFibers $nFibers [expr -1.*$by/2.] [expr 1.*$by/2.] [expr $by/2.] [expr $by/2.]
}
# Se define la sección de las conexiones del disipador.
section fiberSec $BRBend {
patch rect $steelTagBRBs $nFibers $nFibers [expr -1.*$byEND/2.] [expr 1.*$byEND/2.] [expr $byEND/2.] [expr $byEND/2.]
}
# Se crea la transformada geométrica.
set TransfTag 1;
geomTransf Linear $TransfTag ;
# Se definen los elementos.
set nIP 3;
# Columna.
element elasticBeamColumn 1 1 3 $A $E $Ic $TransfTag;
element elasticBeamColumn 2 2 4 $A $E $Ic $TransfTag;
# Viga.
element elasticBeamColumn 3 3 4 $A $E $Ib $TransfTag;
84
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# Contraventeo restringido.
element forceBeamColumn 41 21 22 $nIP $BRBend $TransfTag
element forceBeamColumn 42 22 23 $nIP $BRBsec $TransfTag
element forceBeamColumn 43 23 24 $nIP $BRBend $TransfTag
puts "Modelo construido"
# Se definen los registros del marco.
recorder Node -file $Output/Disp.out -time -node 4 -dof 1 disp;
recorder Node -file $Output/Acc.out -time -node 4 -dof 1 accel;
recorder Node -file $Output/Base.out -time -node 1 2 -dof 1 reaction;
recorder Node -file $Output/NBase.out -time -node 1 2 -dof 2 reaction;
recorder Element -file $Output/Frameforce.out -time -ele 1 2 -dof 1 force;
# Se definen los registros del contraventeo restringido al pandeo.
recorder Node -file $Output/ReactionsDOF1BRBs.out -node 21 -dof 1 reaction;
recorder Node -file $Output/ReactionsDOF2BRBs.out -node 21 -dof 2 reaction;
recorder Node -file $Output/ReactionsDOF3BRBs.out -node 21 -dof 3 reaction;
recorder Element -xml "$Output/BRB_basicForce.out" -time -ele 41 42 43
basicForce
recorder Element -xml "$Output/BRB_basicDef.out" -time -ele 41 42 43
basicDeformation
# Se define el amortiguamiento de la estructura.
set freq [expr [eigen -fullGenLapack 1]**0.5]
set period [expr 2*$pi/$freq]
puts "T = $period"
set damp 0.02;
rayleigh 0. 0. 0. [expr 2*$damp*$freq]
# Se crea el patrón de aceleraciones.
set Factor 10;
# El registro de aceleraciones se encuentra en
cm/s2, este factor lo convierte a mm/s2.
set dt 0.01;
# Diferencial de tiempo del acelerograma.
set Npuntos 15000;
# Número de puntos del acelerograma.
set AccelDataFile "SCT18509.txt"; # Se indica el registro a utilizar.
set DirX 1;
# Dirección en la que se aplicarán las aceleraciones.
timeSeries Path 1 -dt $dt -filePath $AccelDataFile -factor $Factor;
pattern UniformExcitation 1 $DirX -accel 1;
# Se define la ventana que permitirá visualizar el modelo.
recorder display "Marco con contraventeo restringido" 10 10 500 500 -wipe
prp 200. 50. 1;
vup 0 1 0;
vpn 0 0 1;
display 1 5 40
# Se crea el análisis dinámico.
wipeAnalysis;
constraints Transformation;
85
154
155
156
157
158
159
160
161
162
numberer RCM;
system UmfPack;
test EnergyIncr 1.0e-10 100;
algorithm KrylovNewton;
integrator Newmark 0.5 0.25 ;
analysis Transient;
analyze $Npuntos $dt;
puts "Análisis dinámico finalizado"
87
10. Análisis dinámico de un marco reforzado
con un contraventeo convencional
10.1 Descripción del modelo
Se realiza un análisis dinámico a un marco reforzado con un contraventeo
convencional (Figura 10.1). Debido a que los contraventeos convencionales tienden a
presentar problemas de inestabilidad al ser sometidos a cargas de compresión, durante este
análisis se considerarán efectos no lineales. Este ejemplo se basa en aquel del Capítulo 7.
Las unidades del modelo son kN, mm y s.
3
4
3
42
23
22
21
h
2
1
41
1
2
L
Figura 10.1 Esquema del marco analizado en el ejemplo
Como se observa en la Figura 10.1, modelo a analizar consta de un marco de un nivel
y una sola crujía. El ancho de la crujía es de 5 m y el alto de 3 m. Se considera una carga
actuante sobre el marco de 1,000 KN. Para definir los elementos estructurales se parte de la
suposición de que la viga es un elemento infinitamente rígido. Se considera que el marco
88
tiene un periodo fundamental igual a 1.5 s. Basándose en estos datos se determina el momento
de inercia de las columnas.
El contraventeo está conformado por un elemento con sección en cajón de 10 cm por
lado y un espesor de placa de 3 mm. El material que conformará el contraventeo es acero
A572 Gr. 50 con un esfuerzo de fluencia 𝑓𝑦 = 345 𝑀𝑃𝑎. Siguiendo las recomendaciones
presentadas en la referencia (Tapia, et al., 2016), para reproducir los efectos de inestabilidad
producidos por cargas de compresión, se considera un pandeo inicial en el elemento con una
flecha igual a 0.008𝐿𝑐 , donde 𝐿𝑐 es la longitud del contraventeo. El marco de será sometido
al registro sísmico SCT 19/sep/1985 (Instituto de Ingeniería, 2018).
10.2 Descripción del código
Se comienza a construir el modelo borrando los objetos definidos con anterioridad
por medio del comando wipe (línea 8). Posteriormente se indican el número de dimensiones
del modelo y número de grados de libertad por nodo (línea 9).
Entre las líneas 12 a 28 se definen los valores que facilitarán la creación del modelo
y su posterior modificación en caso de ser necesario. Entre estos valores también se define el
área transversal del contraventeo, su longitud y su flecha inicial.
Entre las líneas 31 a 47 se crean los nodos de la estructura, sus respectivas
restricciones y la masa actuante, siendo ésta última distribuida entre las dos conexiones viga
– columna de la estructura. Para modelar una imperfección geométrica en el contraventeo se
crea un nodo intermedio en el elemento. Dicho nodo tendrá una posición que considere el
pandeo inicial recomendado por la referencia (Tapia, et al., 2016). En la Figura 10.2 muestra
una representación del nodo intermedio, además se indican los ángulos alfa y beta definidos
en las líneas 26 y 27, respectivamente.
Adicionalmente, se crean dos nodos en las mismas coordenadas que los nodos 1 y 4.
Los desplazamientos laterales y verticales de los nodos creados (41 y 43) son vinculados para
modelar una conexión articulada entre el marco y el contraventeo (líneas 46 y 47).
89
En este ejemplo es necesario definir el material que conforma el contraventeo. Se
utiliza un acero con un esfuerzo de fluencia 𝑓𝑦 = 345 𝑀𝑃𝑎. Entre las líneas 50 a 57 se crea
el material del disipador por medio de los comandos uniaxialMaterial Steel02,
uniaxialMaterial MinMax y uniaxialMaterial Fatigue. El último material empleado se utiliza
para considerar el daño acumulado (o fatiga) en el contraventeo debido a los ciclos de carga.
3
0.008Lc
100
100
22
β
α
Lc
Sección transversal
del CPR
Figura 10.2 Posición del Nodo 22 considerando pandeo inicial del contraventeo (cotas de la sección
en mm)
Entre las líneas 60 a 64 se definen las propiedades de las columnas y la viga del marco.
Por simplicidad en la modelación de este ejemplo, se decidió considerar un contraventeo con
una sección transversal en cajón cuadrada uniforme a todo lo largo del elemento. La creación
de dicha sección transversal se realiza entre las líneas 70 a 76. Los elementos que conforman
el modelo se crean entre las líneas 89 a 97. Obsérvese que se utilizan elementos
elasticBeamColumn para las columnas y la viga, mientras que para crear el contraventeo se
utilizan elementos forceBeamColumn. Siguiendo las recomendaciones de la referencia [12],
se utiliza una transformada geométrica corrotacional para el contraventeo y se le indica al
programa que considere ocho subdivisiones en el elemento.
Una vez que el modelo ha sido construido se definen los diferentes archivos de
resultados que se generarán durante el análisis, esto ocurre entre las líneas 102 y 115.
Por último, se define el amortiguamiento de la estructura (líneas 118 a 122), se genera
el pattern de la solicitación sísmica (líneas 125 a 133), se genera la ventana con la
90
representación gráfica del modelo (líneas 136 a 140) y se realiza el análisis dinámico (líneas
143 a 151).
Para fines comparativos, en la Figura 10.3 se muestran los registros de
desplazamientos del Nodo 4 de la estructura reforzada con el contraventeo y sin él. Se aprecia
que el contraventeo ayuda a reducir la respuesta de la estructura.
Desplazamiento laterla, mm
400
Sin refuerzo
Con refuerzo
300
200
100
0
-100
-200
-300
-400
0
20
40
60
Tiempo, s
80
100
Figura 10.3 Comparación de desplazamientos laterales del marco con y sin refuerzo con contraventeo
convencional.
De manera adicional, en la Figura 10.4 se muestra la gráfica fuerza axial –
desplazamiento del contraventeo convencional. Se puede observar que, debido a que en este
análisis se considera el fenómeno del pandeo lateral, el elemento no solo tiene menos
capacidad a compresión sino que además su curva presenta ciclos histeréticos inestables.
91
500
Fuerza axial, kN
400
300
200
100
0
-100
-100
-50
0
50
Desplazamiento, mm
100
Figura 10.4 Respuesta del contraventeo convencional
10.3 Comandos adicionales empleados
Materiales:
- uniaxialMaterial Fatigue [Etiqueta material] [Etiqueta material existente]
92
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#-------------------------------------------------------------------------# Análisis dinámico de un marco reforzado con un contraventeo convencional.
#
# Ejemplo basado en el problema creado por Sarven Akcelyan & Dimitrios G. Lignos.
# Unidades del modelo [KN,mm,s]
#-------------------------------------------------------------------------wipe;
model BasicBuilder -ndm 2 -ndf 3;
# Se crea la carpeta que almacenará los resultados.
set Output ResultadosEx8;
file mkdir $Output;
# Parámetros del marco.
set L 5000.;
#
set h 3000.;
#
set W 10000.;
#
set g 9810.;
#
set m [expr $W/$g];
#
set Tn 2.0;
#
set pi [expr acos(-1.0)];
Ancho de crujía.
Altura del marco.
Peso actuante, para definir la masa.
Gravedad en mm/s2.
Se define la masa actuante.
Periodo de la estructura.
# Propiedades del contraventeo convencional.
set Lc [expr ($L**2+$h**2)**0.5];
# Longitud contraventeo convencional.
set alfa [expr atan($h/$L)];
# Ángulo de la diagonal.
set beta [expr $pi/2.0 - $alfa];
# Ángulo complementario.
set pandeo [expr 0.008*$Lc];
# Pandeo inicial.
# Se
node
node
node
node
definen
1
0.
2
$L
3
0.
4
$L
los nodos del modelo.
0. ;
0. ;
$h -mass [expr 0.5*$m] 0.01 0. ;
$h -mass [expr 0.5*$m] 0.01 0. ;
# Se definen las condiciones de apoyo.
fix 1 1 1 1;
fix 2 1 1 1;
# Se
node
node
node
definen los nodos del contraventeo convencional.
21 0.0 0.0
22 [expr $L/2.0-$pandeo*cos($beta)] [expr $h/2.0+$pandeo*sin($beta)]
23 $L $h
# Se crea una articulación en los nodos que conectan con el marco.
equalDOF 1 21 1 2;
equalDOF 4 23 1 2;
# Se define el material del contraventeo.
set steelTag 1000
set fy 0.345;
93
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
set Es 200.0;
uniaxialMaterial Steel02
[expr $steelTag+1] $fy $Es 0.003 25.0 0.925 0.15
0.05 1.0 0.05 1.0 0.0;
uniaxialMaterial MinMax
[expr $steelTag+2] [expr $steelTag+1] -min 0.05 -max 0.05
uniaxialMaterial Fatigue $steelTag [expr $steelTag+2]
# Se definen las propiedades de las columnas y la viga.
set K [expr pow(2*$pi/$Tn,2)*$m];
set E 200.0;
set Ic [expr $K*pow($h,3)/(24*$E)]; # (K=24EIc/h^3)
set Ib [expr 1.0e6*$Ic];
set A [expr 1.0e6];
# Se crean las secciones que conforman el contraventeo.
set Contraventeo 1001;
# Se define la sección del núcleo del contraventeo.
set nFibers 6;
section fiberSec $Contraventeo {
patch
rect
$steelTag
10 4
-50.00 -50.00
patch
rect
$steelTag
4
10 -47.00 47.00
patch
rect
$steelTag
10 4
-50.00 47.00
patch
rect
$steelTag
4
10 -47.00 -50.00
}
-47.00
47.00
50.00
47.00
50.00
50.00
50.00
-47.00
# Se crea la transformada geométrica.
set TransfLin 1;
set TransfCor 2;
geomTransf Linear $TransfLin;
geomTransf Corotational $TransfCor;
# Se definen los elementos.
set nPC 8;
# Columna.
element elasticBeamColumn 1 1 3 $A $E $Ic $TransfLin;
element elasticBeamColumn 2 2 4 $A $E $Ic $TransfLin;
# Viga.
element elasticBeamColumn 3 3 4 $A $E $Ib $TransfLin;
# Contraventeo convencional.
element forceBeamColumn 41 21 22 $nPC $Contraventeo $TransfCor;
element forceBeamColumn 42 22 23 $nPC $Contraventeo $TransfCor;
puts "Modelo construido"
# Se definen los registros del marco.
recorder Node -file $Output/Disp.out -time -node 4 -dof 1
disp;
94
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
recorder
recorder
recorder
recorder
Node -file $Output/Acc.out -time -node 4 -dof 1 accel;
Node -file $Output/Base.out -time -node 1 2 -dof 1 reaction;
Node -file $Output/NBase.out -time -node 1 2 -dof 2 reaction;
Element -file $Output/Frameforce.out -time -ele 1 2 -dof 1 force;
# Se definen los registros del contraventeo.
recorder Node -file $Output/ReactionsDOF1Conts.out -node 21 -dof 1 reaction;
recorder Node -file $Output/ReactionsDOF2Conts.out -node 21 -dof 2 reaction;
recorder Node -file $Output/ReactionsDOF3Conts.out -node 21 -dof 3 reaction;
recorder Element -xml "$Output/Cont_basicForce.out" -time -ele 41 42
basicForce
recorder Element -xml "$Output/Cont_basicDef.out" -time -ele 41 42
basicDeformation
# Se define el amortiguamiento de la estructura.
set freq [expr [eigen 1]**0.5]
set period [expr 2.0*$pi/$freq]
puts "T = $period"
set damp 0.02;
rayleigh 0. 0. 0. [expr 2*$damp*$freq]
# Se crea el patrón de aceleraciones.
set Factor [expr 10.0]; # El registro de aceleraciones se encuentra en
cm/s2, este factor lo convierte a mm/s2.
set dt 0.01;
# Diferencial de tiempo del acelerograma.
set Npuntos 15000;
# Número de puntos del acelerograma.
set AccelDataFile "SCT18509.txt"; # Se indica el registro a utilizar.
set DirX 1;
# Dirección en la que se aplicarán las aceleraciones.
timeSeries Path 1 -dt $dt -filePath $AccelDataFile -factor $Factor;
pattern UniformExcitation 1 $DirX -accel 1;
# Se define la ventana que permitirá visualizar el modelo.
recorder display "Marco con contraventeo convencional" 10 10 500 500 -wipe
prp 200. 50. 1;
vup 0 1 0;
vpn 0 0 1;
display 1 5 10
# Se crea el análisis dinámico.
wipeAnalysis;
constraints Transformation;
numberer RCM;
system UmfPack;
test EnergyIncr 1.0e-10 100;
algorithm KrylovNewton;
integrator Newmark 0.5 0.25 ;
analysis Transient;
analyze $Npuntos $dt;
puts "Análisis dinámico finalizado"
95
11.
Análisis dinámico incremental (ADI)
11.1 Descripción del modelo
Se muestra una de las principales ventajas que tiene OpenSees: la posibilidad de
realizar una gran cantidad de análisis a la misma estructura con unas pocas líneas de código.
El código que se desarrolla permite al usuario realizar varios análisis dinámicos
incrementales. En este tipo de análisis, una estructura es sometida a múltiples registros
sísmicos; los cuales tienen una intensidad determinada que puede ser incrementada
sucesivamente. Por medio de los incrementos sucesivos de la intensidad sísmica, es posible
trazar, por ejemplo, curvas de fragilidad de una estructura dada. Una curva de fragilidad
muestra la probabilidad que la estructura estudiada tenga una falla en función de la intensidad
sísmica. Se aclara que el código aquí presentado sólo ilustra una manera posible (de varias)
de realizar análisis dinámico incremental (ADI), propuesto originalmengte por Vamvatsikos
y Cornell (Vamvatsikos & Cornell, 2002).
11.2 Descripción del código
Antes de comenzar con el ciclo for que permitirá realizar el análisis dinámico
incremental es necesario definir una serie de variables relacionadas con el almacenamiento
de resultados, los datos de los registros sísmicos y algunos parámetros de los análisis
dinámicos.
El primer paso es indicar al programa las direcciones de las carpetas que contienen el
modelo a analizar y dónde los datos obtenidos serán almacenados. Esto ocurre entre las líneas
6 a 11.
96
De manera posterior se definen el número de registros y una serie de listas que
contendrán los nombres de los archivos que contienen los registros, sus diferenciales de
tiempo y el número de puntos que contiene cada uno. Dichos valores y listas se definen de la
línea 15 a la 23.
Por último, es necesario definir el número de intensidades a utilizar y dos listas
adicionales, una con los factores de escala que darán lugar a las diferentes intensidades
sísmicas a evaluar y otra con el amortiguamiento que se utilizará para cada intensidad
sísmica. Esto último sólo si se desea variar el amortiguamiento con la intensidad.
Para realizar el análisis dinámico incremental se utilizan dos ciclos for para llamar a
cada uno de los datos de las listas antes mencionadas y así crear las carpetas donde se
guardarán los resultados y realizar los análisis correspondientes. La Figura 11.1 se muestra
el diagrama de flujo del ciclo utilizado en este ejemplo para realizar el análisis dinámico
incremental.
97
i=0
No
i <= N registros
No
Si
Definir registro i
Cont = 1
Si
Cont = 1
No
i=i+1
Si
j <= N intensidades
Definir intensidad
y análisis j
Realizar análisis
Terminar
ciclo
Almacenar datos
j=j+1
No
¿Hay fallo?
Si
Cont = 0
Figura 11.1 Diagrama de flujo del código utilizado para realizar el análisis dinámico incremental
98
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#-------------------------------------------------------------------------# Análisis Dinámico Incremental (IDA).
# Unidades del modelo: Sin unidades.
#-------------------------------------------------------------------------set dir "IDA";
set Resultados "Resultados";
set Carpetas [list "SCT"];
# En esta variables se indica la dirección
del modelo a analizar. Utilizar "/" para
indicar la ruta.
# En esta variable se indica la dirección
donde se guardaran los resultados.
# Lista con los nombres de las carpetas donde
se almacenarán los resultados de los
análisis, una carpeta por registro sísmico.
set nRegistros 1;
# Se da el número de registros sísmicos a
utilizar.
set Registros [list "SCT18509.txt"]; # Se crea una lista con los nombres de
los archivos de los registros de
aceleraciones.
set dts [list 0.01];
# Lista con los diferenciales de tiempo de los
registros de aceleraciones, respetando el
orden dado en la lista files.
set nPuntos [list 15000];
# Se crea una lista con el número de puntos
que tiene cada registro de aceleraciones.
set nFactores 10;
# Se indica el número de intensidades sísmicas
que se considerarán en el análisis.
set factores [list 0.25 0.5 0.75 1.0 1.25 1.5 1.75 2.0 2.25 2.5];
# Se crea una lista de los factores con los que se escalarán los registros
de aceleraciones para obtener las intensidades sísmicas deseadas. Ingresar
factores de menor a mayor intensidad sísmica.
set dampings [list 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.10];
# Se crea una lista con los porcentajes de amortiguamiento que se considerará
para cada intensidad sísmica.
for {set ir 0} {$ir <= [expr $nRegistros-1]} {incr ir} {
# Este ciclo "for" llama los datos del registro de aceleraciones empleado en
el análisis.
set AccelDataFile [lindex $Registros $ir];
# Se llama al primer registro de aceleraciones y se almacena en la variable
"AccelDataFile". Esta variable deberá utilizarse en el archivo del análisis
dinámico para indicar qué registro de aceleraciones usar en el análisis.
set dt [lindex $dts $ir];
# Se llama el diferencial de tiempo
del registro.
set Npuntos [lindex $nPuntos $ir];
# Se llama el número de puntos del
registro.
set cont 1; # Esta variable funciona como un fusil, mientras su valor
sea igual a 1, OpenSees realizará el análisis dinámico con el registro actual,
99
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
al finalizar incrementará la intensidad sísmica y volverá a analizar el
modelo con el mismo registro pero con una mayor intensidad sísmica.
# Este ciclo continuará hasta que finalice con todas las intensidades
deseadas o el modelo falle durante un análisis, en cuyo caso no será necesario
seguir incrementando las intensidades sísmicas.
for {set jf 0} {$jf <= [expr $nFactores-1]} {incr jf} {
# Este ciclo "for" llama los datos correspondientes a la intensidad
sísmica empleada en el análisis.
if {$cont == 1} {
set Carpeta "[lindex $Carpetas $ir]";
# Se llama el nombre de la carpeta designada para guardar los resultados
obtenidos del registro de aceleraciones actual.
set Intensidad "[lindex $factores $jf]";
# Se crea carpeta cuyo nombre es el mismo al de la intensidad sísmica actual.
set pgaFactor [lindex $factores $jf];
# Se llama el valor para escalar el registro de aceleraciones y obtener la
intensidad sísmica deseada en este análisis.
set damp [lindex $dampings $jf];
# Se llama el valor del amortiguamiento correspondiente a la intensidad
sísmica empleada en el análisis actual.
file mkdir $dir/$Resultados/$Carpeta/$Intensidad;
las carpetas para guardar los resultados obtenidos.
puts
puts
puts
puts
$factores $jf]";
# Se crean
"$dir/$Resultados/$Carpeta/$Intensidad";
"Modelo: MarcoConcreto";
"Procesando... ";
"Secuencia: [lindex $Carpetas $ir]; pgaFactor: [lindex
source E8_MarcoCV.tcl;
# Se llama el modelo a analizar.
set t [getTime];
puts "Análisis Dinámico Finalizado. Tiempo: $t";
if {$t < [expr 0.9*$dt*$Npuntos]} {
set cont 0;
# Si el análisis falla durante el análisis, la variable "cont" se redefinirá
con un valor igual a 0. Esto finalizará con el primer ciclo "for" y se
procederá a analizar el modelo con el siguiente registro de aceleraciones.
}
}
}
}
101
12.
Conclusiones
Los ejemplos mostrados en este libro dan a los lectores los conocimientos básicos
para analizar estructuras por medio del programa OpenSees. Sin embargo, la información
aquí brindada no garantiza un correcto manejo del programa. Como se observó a lo largo de
este libro, la estructura de OpenSees permite a los usuarios poseer un profundo control sobre
los parámetros de los análisis que se realizan. Esta característica es de gran ayuda para los
investigadores, lamentablemente, también representa un inconveniente para los usuarios con
menor experiencia en el área de estructuras. Por lo anterior, se recomienda a los usuarios del
programa estar muy bien informados sobre los procesos mecánicos que toman lugar en la
estructura analizada, de tal manera que puedan tomarlos en cuenta y así garantizar que sus
modelos proporcionan resultados confiables.
103
Referencias
Bell, J. “Viewpoint Projections and Specifications.” Último acceso enero 2019.
https://www.cs.uic.edu/~jbell/CourseNotes/ComputerGraphics/Projections_Viewpoints.
html.
Black, C. J., Makris, N., y Aiken, ID. "Component testing, seismic evaluation and
characterization of buckling-restrained braces." Journal of Structural Engineering - ASCE
130 (2004): 880–894.
California Department of Transportation. “Seismic desing criteria.” Publicaciones técnicas
del estado de California, 2013.
Chopra, A. Dynamics of Structures. Theory and application to earthquake engineering. New
Jersey: Prentice - Hall, 1995.
Guerrero-Bobadilla, H., Ji, T., y Escobar-Sanchez, J. A. "Experimental studies of a steel
frame model with and without buckling-restrained braces." Ingeniería Sísmica 95, 2017,
33-52.
Instituto de Ingeniería. Red Acelerográfica del Instituto de Ingeniería. México: Universidad
Nacional Autónoma de México, 2018.
Mackenna, F. “Object-Oriented Finite Element Programming: Frameworks for Analysis,
Algorithms and Parallel Computing.” PhD diss. Universidad de California, 1997.
Merrit, S., Uang, C-M., y Benzoni, G. Subassemblage testing of Corebrace BucklingRestrained Braces. La Jolla, California: University of California, San Diego, 2003.
OpenSees.
“Command
Manual.”
2019.
Último
acceso
http://opensees.berkeley.edu/wiki/index.php/Command_Manual.
febrero
2019.
Pacific Earthquake Engineering Research Center. “OpenSees Navigator.” 2015. Universidad
de
California,
Berkeley.
Último
acceso
enero
2019.
http://openseesnavigator.berkeley.edu.
Pacific Earthquake Engineering Research Center. “OpenSees. Open source finite element
platform for earthquake engineering simulations.” 2006. Universidad de California,
Berkeley.Último acceso febrero 2019 http://opensees.berkeley.edu/index.php.
Papanikolaou, V. K,, Kartalis-Kaounis, T., Protopapadaki, V. K., y Papadopoulos, T.
“GiD+OpenSees Interface: An integrated Finite Element Analysis Platform.” 2017.
Aristotle University of Thessaloniki. Último acceso enero del 2019.
http://gidopensees.rclab.civil.auth.gr.
Priestley, R., Mander, J., y Park R. “Theorical stress - strain model for confined concrete.”
Journal of Structural Engineering 114 (1988): 1804-1825.
Shojaie, M. “Cyprees Editor, programme for OpenSees.” 2018. Último acceso enero 2019.
http://cypress.hrshojaie.com/en-us/default.aspx.
Tapia, E., García, J., y Del Rincón, A. “Estudio paramétrico del modelado inelástico de
contravientos de acero.” Ingeniería Sísmica 94 (2016): 49-74.
Teran-Gilmore, A., y Virto, N. "Preliminary design of low-rise buildings stiffened with
buckling restrained braces by a displacement-based approach." Earthquake Spectra 25
(2009): 185-211.
Tremblay, R., Bolduc, P., Neville, R., y DeVall, R. "Seismic testing and performance of
buckling-restrained bracing systems." Canadian Journal of Civil Engineering 33 (2006):
183-198.
Vamvatsikos, D., y Cornell, C. A. "Incremental dynamic analysis." Earthquake Engineering
& Structural Dynamics 31 (2002): 491-514.
Descargar