Tesina Jorge Baños PDF
Tesina Jorge Baños PDF
Tesina Jorge Baños PDF
Título
Autor
Tutores
Departamento
Intensificación
Fecha
Julio, 2011
2
Agradecimientos
3
4
Resumen
En base a los casos estudiados, respecto a la evolución del daño debido a las
acciones mecánicas impuestas sobre la estructura se ha podido establecer una relación
entre la evolución de las frecuencias y el daño global de la estructura. Finalmente, se
extraerán una serie conclusiones de los resultados obtenidos del análisis de las
estructuras calculadas a modos de ejemplo y se propondrán unas mejoras en las rutinas
utilizadas y futuras líneas de investigación.
5
6
Abstract
The following pages contain the work developed for the final degree project:
“Estudio de la evolución de las frecuencias naturales en estructuras sometidas a efectos
del daño y la plasticidad”, in English: study of the evolution of natural frequencies in
structures subjected to the effects of damage and plasticity. After discussing some
theoretical aspects, there will be introduced the routines and computer programs needed
to compute the natural frequencies of a structure when it is damaged. Two computer
programs will be used for this purpouse, the first one called PLCD, an existing finite
element software, and a new one named CFYFP, which stands for “Cálculo de
Frecuencias Y Formas Propias”, in English: Solving Eigenfrequencies and
Eigenvectors. All the modifications done to the finite element program and the
implementation of the new routines for the program created for solving the Eigenvalue
program are included, as well as the justification for these decisions. All the routines
used are written using FORTRAN language.
In this document are described in detail all the steps followed to implement the
calculation method, focusing in the new routines for the CFYFP. In addition, several
examples solved with the new programs for the study of the evolution of the natural
frequencies of structures when have been damaged are also included.
Based on these cases, it has been possible to establish a correlation between the
change in the natural frequencies of a structure and the level of global damage. Finally,
a series of considerations and conclusions will be extracted from the studied cases, a
number of improvements will be proposed and future research approaches too.
7
8
ndice
Agradecimientos.......................................................................................................... 3
Resumen ...................................................................................................................... 5
Abstract ....................................................................................................................... 7
Índice ........................................................................................................................... 9
Glosario ..................................................................................................................... 23
1. Introducción ..................................................................................................... 25
9
5.3 Polinomio característico ................................................................................. 49
5.4 Cambio (Shifting)........................................................................................... 49
5.5 Secuencia Sturm ............................................................................................. 51
7. Programas ........................................................................................................ 59
10
8.2 Almacenamiento en formato Sparse.............................................................. 115
8.3 Método de iteración en subespacio ............................................................... 116
8.3.1 Ejemplo 1 ......................................................................................... 116
8.3.2 Ejemplo 2 ......................................................................................... 117
8.4 Validación daño ........................................................................................... 119
8.4.1 Cálculo manual ................................................................................. 119
8.4.2 Daño calculado con el PLCD ............................................................ 121
8.4.3 Comparación .................................................................................... 122
8.5 Validación completa ..................................................................................... 122
8.5.1 Problema planteado........................................................................... 122
8.5.2 Cálculo usando las rutinas implementadas ......................................... 123
8.5.3 Cálculo de frecuencias usando Strand7 ............................................. 126
8.5.4 Cálculo teórico.................................................................................. 128
8.5.5 Comparación de los resultados obtenidos .......................................... 128
11
CÓDIGOS NUEVOS (PLCD) .................................................................................. 206
CÓDIGOS MODIFICADOS (CFYFP) ..................................................................... 211
CÓDIGOS NUEVOS (CFYFP) ................................................................................ 216
CÓDIGO MALLAS-ANIMACIÓN.BAT ................................................................. 231
12
ndice figuras tablas
Fig. 4.1.2.3 Representación del umbral de daño y de varias descargas y recargas. ....... 38
Fig. 4.1.3.1 Representación esquemática del modelo de daño uniaxial [10]. ................ 41
Fig. 4.1.4.1 Umbral de daño en el espacio de tensiones principales, con 3=0, según
Simó y Ju [16]............................................................................................................. 42
Fig. 4.2.1 Esquema del cálculo del índice de daño global mediante medida energética,
utilizada por el PLCD, en él se muestra que el año podría no ser siempre creciente. .... 44
Fig. 4.2.2 Representación del cálculo del daño global de una cubo de hormigón.......... 45
Fig. 7.4.1 Esquema de los diferentes ficheros utilizados durante el proceso ................. 65
Fig. 7.5.2.1 Uso de los módulos necesarios, definición de las variables y creación del
nuevo fichero de salida................................................................................................ 74
Fig. 7.5.2.2 Escritura de los datos, la versión con formato está comentada pero se puede
activar para poder visionar los datos del fichero y verificarlos. .................................... 75
13
Fig. 7.5.2.3 Comparativa del código CALCIN_V3D antes (izqda.) y después (dcha.) de
la modificación. Se muestra el código entre la línea 86 y el final en ambos casos. ....... 75
Fig. 7.5.2.4 Concatenado de los puntos de Gauss para obtener un ahorro de espacio en el
fichero ........................................................................................................................ 76
Fig. 7.5.2.5 Instrucciones para crear un contador que agrupe a los puntos de Gauss que
tengan que actualizarse juntos ..................................................................................... 77
Fig. 7.5.2.7 Condición para el llamado de la subrutina exsec y situación dentro del
código de FINISH_V3D.Además se puede observar la llamada a la función Exgrandef,
para el caso de tratar un problema con grandes deformaciones. Se muestra el código de
la línea 25 a la 54 ........................................................................................................ 78
Fig. 7.5.2.8 Bucle de Calsec_V3D sobre las láminas del compuesto, cálculo según la
teoría de mezclas apropiada, rotación usando los ángulos de Euler y cálculo del tensor
teniendo en cuenta la participación volumétrica de cada capa. ..................................... 79
Fig. 7.6.1 Esquema de la rutina encarga del cálculo de los valores y vectores propios . 82
Fig. 7.7.2.1 Cálculo de la rigidez elemental elástica. Código mostrado entre las líneas
238 y 288. ................................................................................................................... 95
Fig. 7.7.2.4 Proceso de reducción de las matrices teniendo en cuenta los grados de
libertad restringidos .................................................................................................... 98
Fig. 7.7.2.5 Comienzo de la parte no lineal y lectura de información de Csec.txt ....... 100
Fig. 7.7.2.6 Bandera que marca el punto a partir del cual algunas instrucciones se
repetirán y la creación de dos contadores que se usarán para la actualización. ........... 101
14
Fig. 7.7.2.7 Comparación del punto de Gauss leído y el que toca calcular, si coincide se
utiliza la información leída. ....................................................................................... 102
Fig. 7.7.2.9 Condición situada al final de la rutina y que decide si se vuelve a la bandera
y se prosigue con otra actualización o si se ha finalizado el tratamiento de los datos
proporcionados por el PLCD y hay que salir del programa. ....................................... 102
Fig. 7.7.3.1 Primer bucle sobre la matriz que se quiere almacenar y alocamiento de las
variables ................................................................................................................... 106
Fig. 7.7.3.2 Segundo recorrido sobre la matriz y asignación de valores a las variables.
Por último hay que asignar valor a la última posición del vector i. ............................. 106
Fig. 7.7.3.3 Ejemplo variable almacenada en formato sparse, en este caso la variable se
llama Spark ............................................................................................................... 107
Fig. 7.7.3.4 Formación del vector propio completo a partir del calculado previamente
con las rutinas explicadas. ......................................................................................... 107
Fig. 7.7.3.5 Normalización de las formas propias antes de su escritura. ..................... 109
Tabla. 8.3.1.1 Resumen validación del primer ejemplo, teóricas se refiere a los valores
proporcionados en el ejemplo de la referencia [21] y loas calculadas son los valores
obtenidos al realizar el análisis con los programas explicados. .................................. 117
Tabla 8.3.2.2 Resumen de los resultados obtenidos para el cálculo de las frecuencias
naturales con las matrices del segundo ejemplo, los valores de la columna con el
nombre de teóricas se refieren a los valores encontrados en la referencia [22] y
utilizados para comprobar los valores calculados con las rutinas explicadas
anteriormente. ........................................................................................................... 119
15
Fig. 8.4.1 Curva del comportamiento real de la estructura del cubo de hormigón
utilizado a modo de ejemplo (Fi) ............................................................................... 120
Tabla 8.4.1.3 Puntos calculados para representar las curvas y daño asociado a cada
desplazamiento, calculado usando la fórmula de daño de la ecuación 8.4.1.1. Esta tabla
se corresponde al ejemplo del cubo de hormigón. Fi representa la fuerza residual y Fe la
fuerza elástica. .......................................................................................................... 121
Fig. 8.4.1.4 Representación de la curva real del comportamiento del cubo de hormigón
sometido a una fuerza de compresión y la evolución del daño global. ........................ 121
Tabla 8.4.2.1 Daño calculado con las nuevas rutinas del PLCD ................................. 122
Fig. 8.5.1 Representación de la columna utilizada para realizar la validación, con las
dimensiones expresadas en metros. ........................................................................... 123
Fig. 8.5.2.1 Proceso de refinado de mallas seguido para encontrar las frecuencias
naturales de la estructura. .......................................................................................... 124
Tabla 8.5.2.3 Tabla resumen de los resultados obtenidos para el cálculo de frecuencias
utilizando las rutinas del PLCD y del CFYFP............................................................ 125
Fig. 8.5.2.4 Evolución de los valores calculados para diferentes mallas. .................... 125
Tabla 8.5.3.1 Resultados obtenidos para las siete primeras frecuencias naturales
utilizando diferentes mallas en el Strand7. ................................................................ 126
16
Fig. 8.5.3.2 Evolución de las frecuencias calculadas en función del número de
elementos utilizados, se observa que a partir de la malla de 81 elementos las respuestas
finales casi no varían. ................................................................................................ 127
Fig. 8.5.3.3 Diferencias entre el valor de la primera frecuencia de la malla más densa y
la malla correspondiente............................................................................................ 127
Fig. 8.5.5.2 Resultados para cada método para la segunda frecuencia ........................ 129
Fig. 9.1.1 Malla utilizada para resolver la columna empotrada. ................................. 131
Tabla 9.1.2a Resultados obtenidos para las diez primeras frecuencias naturales de la
columna. ................................................................................................................... 132
Fig. 9.1.4 Columna original y forma deformada para la primera (izquierda) y segunda
frecuencia (derecha) .................................................................................................. 135
17
Fig. 9.1.3 Localización y evolución del daño local en la columna. ............................. 136
Fig. 9.1.6 Detalle de la figura 9.1.5, no se ha representado la primera frecuencia ....... 137
Tabla 9.1.8a Daño global calculado usando las frecuencias y el error respecto al
verdadero. ................................................................................................................. 139
Fig. 9.1.8b La zona rayada representa los valores cubiertos con la aproximación
explicada. La recta superior tiene valor de 0.08 y la inferior 0.16. Está aproximación es
útil hasta valores de daño global cercanos al 60% pero luego deja de resultar interesante
usarla. ....................................................................................................................... 139
Fig. 9.1.9 Curva del comportamiento de la columna y daño global de la estructura.... 140
Fig. 9.1.12 Evolución de la primera forma propia, vemos como movimiento pasa de
estar oblicuo a situarse paralelo a la zona dañada, y como a medida que se daña
disminuye el desplazamiento máximo. ...................................................................... 142
18
Fig. 9.1.14 Evolución de la quinta forma propia, se trata de un movimiento de torsión,
se puede observar que es cada vez menor. ................................................................. 143
Fig. 9.1.15 Evolución de la sexta forma propia de la columna. A media que el daño
aumenta deja de ser un movimiento ascendente y descendente y empieza a ondular, la
ondulación aumenta con el daño................................................................................ 143
Fig. 9.2.1 Secciones de la columna descrita con la armadura, las dimensiones están en
centímetros ............................................................................................................... 144
Tabla 9.2.2a Tabla de los resultados obtenidos para las diez primeras frecuencias
naturales y los distintos estados de daño. ................................................................... 145
Fig.9.2.2b Evolución de las dos primeras frecuencias naturales para la columna con
armadura. .................................................................................................................. 145
Fig. 9.2.2e Evolución de la novena y décima frecuencias al dañarse de la columna ... 146
Fig. 9.2.3 Evolución del daño en la columna con armadura ....................................... 147
Fig 9.2.4 Forma propia de la primera frecuencia, la segunda es igual pero en dirección
perpendicular a esta................................................................................................... 148
Fig. 9.2.5 Animación de la tercera forma propias, la cuarta es igual pero perpendicular a
ésta. .......................................................................................................................... 148
Fig. 9.2.6 Animación de la forma propia asociada a la quinta frecuencia natural. ...... 149
19
Fig. 9.2.10 Animación de la forma propia asociada a la décima frecuencia ................ 150
Fig. 9.2.11 Diferencias relativas en tanto por ciento entre las frecuencias dañadas y la
inicial. ....................................................................................................................... 151
Fig. 9.2.12 Misma gráfica que la 9.2.11 pero sin tener en cuenta la primera frecuencia,
ya que es sensiblemente diferente al resto. ................................................................ 151
Tabla 9.2.13 Diferencias relativas promedios y máxima y mínima para cada estado de
daño. ......................................................................................................................... 152
Tabla 9.2.14 Comparación entre el daño global de la columna dañada calculado usando
las rutinas y usando las diferencias promedio entre las frecuencias dañadas y las
originales (sin tener en cuenta la primera). ................................................................ 153
Fig. 9.2.15 Comparación entre los errores (en valor absoluto) cometidos al utilizar una
aproximación lineal y cuadrática para calcular el daño global de la estructura a partir de
las frecuencias obtenidas. .......................................................................................... 154
Fig. 9.2.16 Comparación de los niveles de daño global entre la columna armada (azul) y
la columna sin armadura (rojo), al imponer unos desplazamientos de igual magnitud.154
Fig. 9.3.1 Vista de la malla de la viga usada para el cálculo, en color azul aparecen los
elementos que no se dañarán para poder llevar a cabo el análisis, que corresponden a los
puntos de apoyo y al lugar en el que imponemos el desplazamiento. La malla consiste
en 500 elementos repartidos en 25 hexahedros en cada uno de los veinte niveles que hay
a lo largo de su longitud. ........................................................................................... 157
20
Fig. 9.3.2 Curvas del comportamiento de la viga y del daño global en relación con los
desplazamientos, se incluye el detalle de las áreas de las curvas en las que el análisis
deja de converger. ..................................................................................................... 158
Tabla 9.3.3a Evolución de las diez primeras frecuencias naturales de la viga biapoyada
estudiada. .................................................................................................................. 159
Tabla 9.3.4 Diferencias relativas en % entre una frecuencia dañada y la respectiva sin
daño alguno. ............................................................................................................. 159
Fig. 9.3.5 Representación gráfica de las diferencias relativas observadas. .................. 160
Fig. 9.3.6 Primera forma propia de la viga, en verde se ve la viga inmóvil y en granate el
movimiento. .............................................................................................................. 161
Fig. 9.3.7 Movimiento de la segunda forma propia, vista de la viga de forma lateral. 161
Fig. 9.3.8 Forma propia asociada a la tercera frecuencia, vista lateral de la viga. ....... 161
Fig. 9.3.9 Cuarta forma propia, vista en sección de la viga, se trata de una torsión. .... 161
Fig. 9.3.11 Sexta forma propia de la viga biapoyada vista de forma lateral. ............... 162
Fig. 9.3.14 Movimiento de la forma asociada a la novena frecuencia, con la viga vista
de forma lateral, como se puede ver coincide con la séptima frecuencia pero en
dirección perpendicular. ............................................................................................ 163
FIg. 9.3.15 Forma propia asociada a la décima frecuencia, viga vista en planta. ........ 163
21
Tabla 10.1.1 Cálculo aproximado de la frecuencia fundamental de la columna, para
distintos estados de daño. .......................................................................................... 167
Tabla 10.2.1.1 Comparación de los valores obtenidos teóricamente y con las rutinas. 170
Tabla 10.2.2a Comparación de los valores obtenidos. Sigue en la siguiente página.... 170
Tabla 10.3.1 Evolución de las frecuencias calculadas por el método de Rayleigh para
distintos estados de daño. .......................................................................................... 172
Tabla 10.3.2 Comparación de los dos métodos de cálculo utilizados. ........................ 173
22
Glosario
En las páginas dedicadas a la explicación del daño estructural los símbolos más
utilizados son:
w Continuidad
d Daño
Tensión
E Módulo de Young
Deformación
K Matriz de rigidez
M Matriz de masa
23
Matriz de valores propios
I Matriz identidad
Valor propio
LT Matriz traspuesta de L.
El superíndice “T” sirve para indicar que se trata de una matriz o vector
traspuesto, el “-1” se utilizará para señalar que se trata de la matriz inversa.
24
1. Introduccion
1.1 Motivación
1.2 Objetivos
El objetivo final es sentar las bases para poder establecer en una estructura real
una correlación entre el nivel de daño y las frecuencias naturales, de este modo se podrá
determinar el daño de una estructura, difícil de cuantificar en la práctica, a partir del
valor de las frecuencias, que si se pueden obtener de forma sencilla. Por ello en esta
tesina se hará el desarrollo teórico y se crearán las rutinas necesarias, además de
establecer si es posible relacionar las frecuencias naturales con el nivel de deterioro de
la estructura. En futuros trabajos se tendrá que comprobar que los resultados obtenidos
son los mismos que los observados en la realidad.
25
1.3 Metodología aplicada
26
compatibilidad entre datos, las rutinas utilizadas y los cambios realizados para el PLCD.
Además se explican las nuevas rutinas creadas y sus funciones, así como el trabajo
realizado para el nuevo programa que se ha tenido que desarrollar llamado CFYFP.
Finalmente se incluyen los pasos y ejemplos realizados para validar el correcto
funcionamiento de las nuevas subrutinas y programas.
La tercera parte del trabajo contiene el desarrollo de los casos de estudio, que en
este caso es una columna, con y sin armadura y una viga biapoyada que se pueden
subdividir a su vez en dos bloques. Por una parte, se procederá a una estimación manual
de los resultados esperados para los valores de la primera frecuencia natural utilizando
el método energético de Rayleigh y, por otro lado, en el noveno capítulo, se realizará el
análisis completo de las estructuras usando los programas descritos en las secciones
anteriores.
27
28
2. Trabajos estudios previos
El hecho de intentar relacionar el daño con las frecuencias naturales y los modos
de vibración de las estructura no es algo totalmente nuevo, sin embargo es un campo en
el que no se ha profundizado mucho y la mayoría de estudios llevados a cabo tienen un
carácter mucho más práctico, realizando en casi todos ensayos de laboratorio para
obtener los resultados y sacar conclusiones. A diferencia de lo previamente enunciado,
el presente trabajo obtendrá los resultados utilizando un programa de elementos finitos
ya existente y un programa creado para calcular las frecuencias propias. A continuación
se citarán varios trabajos relevantes llevados a cabo en este campo:
29
indicadores de la presencia de defectos o daños, pero que sin embargo no
son suficientes para detectar la ubicación de los mismos.
También en el mismo año, Kam y Lee [4] utilizaron un modelo reducido
de matrices de rigidez para determinar y ubicar el daño en una estructura.
El método utilizado consistía en discretizar la estructura con un grupo de
elementos y suponer la ubicación de la grieta en uno de ellos.
Posteriormente se obtenían las frecuencias naturales y los modos de
vibración usando pruebas experimentales y se realizaba un análisis
estadístico de cada elemento con deterioro supuesto y, usando varios
parámetros estadísticos, se ubicaba el elemento que tenía el defecto.
Además también consiguieron determinar el tamaño del mismo. Para ello
utilizaron una ecuación de equilibrio de energía de deformación. Al igual
que los anteriores el modelo experimental utilizado era de acero.
Pandey y Biswas [5] en 1994 propusieron detectar el daño basándose en
los cambios observados en las matrices de flexibilidad obtenidas a partir
de los modos de vibración. Los parámetros modales utilizados se
obtuvieron tanto de manera analítica como experimental con vigas de
acero estructural. De todas maneras, Padey y Biswas señalaron que los
cambios en la flexibilidad dependen en gran manera de las condiciones
de apoyo de la viga y el método propuesto obtuvo mejores resultados
cuando el defecto coincidía con una zona en la que los momentos
flectores eran mayores.
Otro estudio llevado a cabo por Narkis [6] en 1994 propuso un método
que permitía calcular las frecuencias naturales de vigas simplemente
soportadas con grietas. Para ello modeló la grieta mediante un resorte
lineal elástico. Desarrolló la ecuación de movimiento para las vigas
usando un modelo de dos vigas unidas por un resorte torsional que
modela la grieta. Concluyó que con solamente los dos primeros modos
de vibración y las frecuencias naturales asociadas era suficiente para
obtener tanto la ubicación de la grieta como su profundidad. Estos datos
fueron comparados con un programa de elementos finitos obteniendo
resultados aceptables.
30
En el año 2004 Vázquez, Suárez y López [7] basándose y continuando un
estudio previo llevado a cabo por Pérez y Suárez [8] en 1994 y
realizando tanto ensayos con vigas de hormigón como utilizando
elementos finitos, determinaron que la comparación entre los modos y
frecuencias naturales no eran buenos indicadores de la presencia de
daños. Por el contrario que las comparaciones entre matrices de rigidez y
de flexibilidad permitían detectar y situar las grietas inducidas en las
vigas.
Por último, Oyarzo-Vera y Chouw [9] en el año 2010, determinaron que
para los modos de vibración más bajos es posible observar claramente
una variación de la frecuencia debida al daño. En algunos casos
particulares consiguieron asociar la variación de la frecuencia con una
localización específica del daño, pero en este aspecto los resultados
obtenidos no eran concluyentes. Para realizar el estudio utilizaron un
modelo físico de una casa de albañilería no reforzada a escala real.
31
32
3. Analisis no lineal de estructuras
33
Mirar convergencia. Si no se ha logrado, se realiza una nueva iteración
para el mismo incremento. Si la solución ha convergido, se procede con
el siguiente incremento de carga.
Una vez haya convergido el último, se acaba.
Fig. 1.4.1 Representación esquemática del procedimiento seguido para la resolución de un problema no lineal, en
este caso usando Newton-Raphson. *El campo de velocidades y aceleraciones deben calcularse según el método
de aproximación de la aceleración, por ejemplo Newmark.
34
4. Dan estructural
El principal objetivo de esta tesina es poder establecer una relación entre las
frecuencias, las formas propias y el daño. Para establecer la relación requerida se usará
el resultado del daño dado por el PLCD según [11] con la medida de fuerza. Pero antes
de mostrar cómo se calculará se comentarán algunos aspectos generales del daño
estructural.
El daño local se expresa con un índice que mide la degradación de rigidez que
sufre un punto material de un sólido que se encuentra bajo la acción de fuerzas externas.
Este índice deriva del concepto de disipación, se trata de una medida objetiva y
normalizada de la disipación total producida por la plasticidad y por la degradación de
la rigidez. En nuestro caso el PLCD ya contiene las rutinas encargadas de calcular este
parámetro para cada punto de Gauss de la estructura, sus valores pueden consultarse en
el fichero de salida post.res para cada paso de carga realizado. Pero no se utilizarán para
sacar conclusiones ya que para el objetivo de la tesina será más pertinente realizarlas
con un valor del daño global de la estructura.
35
resultaría en un esfuerzo ingente e inabordable, al menos en la actualidad. De hecho se
mantuvo como un problema inasumible hasta el año 1958 en el que Kachanov [12]
acuñó el término continuidad para describir el efecto colectivo de estas discontinuidades
en un sólido. Teniendo en cuenta la sección de un sólido cualquiera, Kachanov definió
inicialmente como:
( )= 1 Ec. 4.1.1
Para todos los ejemplos y casos presentados en este trabajo se ha decidido que el
modelo de daño considerado será el isótropo, esto significa que las fracturas y cavidades
que se forman en la estructura se distribuyen de manera uniforme en todas direcciones,
es decir el daño es adireccional en cada punto del sólido cuando se forma una fractura
(figura 4.1.2.1). A pesar de que este concepto es opuesto a la realidad manifestada en
datos experimentales, que demuestran que esto no es cierto y que durante la carga, las
microfisuras crecen principalmente en la dirección perpendicular a la máxima tensión
(Krajcinovic y Fonseka [13], 1981). Si se decide aproximar el comportamiento del
material mediante una formulación continua, se admite como hipótesis que el daño
macroscópico direccional (fracturas) proviene de un comportamiento microscópico
adireccional de los puntos situados en la zona de daño.
36
Fig. 4.1.2.1 Daño adireccional debido a la descohesión de un punto
37
Se asume que cualquier deformación de un material dañado se representa con la
ley constitutiva del material no dañado, pero sustituyendo la tensión normal por la
tensión efectiva. Para un caso uniaxial, esto puede escribirse: =( ) =
( ) . Donde E representa el módulo de Young. Como se verá con más detalle un
poco más adelante el daño aparecerá cuando se supera un determinado umbral inicial de
daño,
=0
En caso de que se produzca una descarga, < 0 y el daño será nulo, por tanto, la
descarga se producirá hasta el origen para un determinado daño. La recarga sucesiva
seguirá el mismo camino que la anterior descarga hasta que se llegue al umbral de daño
otra vez. Todo ello puede verse en la figura 4.1.2.3
Los efectos del daño solamente afectan a las propiedades elásticas del material,
mientras la plasticidad se desarrolla como consecuencia de un crecimiento irrecuperable
en la deformación plástica. Estos dos fenómenos pueden actuar a la vez y en los
materiales se observan ambos, pérdida de elasticidad por daño y aumento de la
deformación inelástica por plasticidad. La principal diferencia entre el daño y un
38
modelo constitutivo plástico es que en el primero no se producen deformaciones
plásticas irreversibles, toda deformación se recupera en caso de descarga, aunque las
trayectorias de carga-descarga, a diferencia de lo que sucede en plasticidad, no son
paralelas (figura 4.1.2.4).
Las rutinas del PLCD calculan el daño de dos formas distintas, medida en
fuerzas y en energía. La formulación detallada a continuación se basa en la propuesta
por Simó y Ju [16] en 1987, que proporciona un modelo constitutivo que a pesar de su
simplicidad, es capaz de reproducir los comportamientos no lineales como son la
pérdida de rigidez, endurecimiento y reblandecimiento, que es lo que usa el PLCD. La
energía libre de Helmholtz por unidad de volumen para el caso de un modelo de daño
isótropo como el que nos ocupa, a temperatura constante es:
( ) = (1 ) Ec. 4.1.3.1
39
( )= Ec. 4.1.3.2
0 Ec. 4.1.3.3
= =( ) =( ) Ec. 4.1.3.6
40
Fig. 4.1.3.1 Representación esquemática del modelo de daño uniaxial [10].
( ) ( ) 0 Ec. 4.1.4.1
( ) ( ) ( ) 0 Ec. 4.1.4.2
41
Fig. 4.1.4.1 Umbral de daño en el espacio de tensiones principales, con 3=0, según Simó y Ju [16].
( ) ( )]
( )] ( )]
Ec. 4.1.5.1
( ) ( )=0 Ec.4.1.5.2
42
Al igual que en la teoría de plasticidad, la magnitud del factor de consistencia
surge de imponer la condición de consistencia de daño, de ésta y de las propiedades de
la función G[·] se tiene que,
( )] )]
( )=0 [ ( )] [ ( )] ( ) ( ) = Ec.4.1.5.3
( )] )]
[ ( )] [ ( )]
( )=0 ( ) ( )=0 ( ) ( ) Ec.4.1.5.4
[ ( )] [ ( )]
[ ( )] ( ) Ec. 4.1.5.5
( ) ( )
( ) ( )= = Ec. 4.1.5.6
= [ ( )] [ ( )] Ec. 4.1.5.7
[ ( )] ( )
[ ( )] = Ec. 4.1.5.8
[ ( )]
43
4.2 Daño global
Fig. 4.2.1 Esquema del cálculo del índice de daño global mediante medida energética, utilizada por el PLCD, en él
se muestra que el año podría no ser siempre creciente.
44
Se han modificado varias rutinas para cambiar la manera de calcular el daño en
medida en fuerza, el nuevo parámetro de daño parte de la base que al imponer un
determinado desplazamiento a una estructura se producirá una cierta reacción Fo. Esta
reacción elástica lineal es el valor teórico que tendría la reacción de no producirse daño
en la estructura. Pero como llegado un determinado umbral éste se producirá, la
reacción real será Fi, con Fi < Fo para cualquier daño producido. Todo ello se muestra en
la figura 4.2.2 y en la ecuación 4.2.1
=1 = Ec. 4.2.1
F2
200
150 Ideal
Fuerza (N)
100
F1
50
Real
F0 K1
K0
K2
0
0 U0 0.005 U1 0.01 U2 0.015
Desplazamiento (m)
Fig. 4.2.2 Representación del cálculo del daño global de una cubo de hormigón.
45
+
1
60
40
Daño global
Fuerza (N)
20
0
0
0 0.005 0.01 0.015
Desplazamientos (m)
Fig. 4.2.3 Gráfico en el que se muestra la relación fuerza-desplazamientos y el daño global-desplazamientos del
cubo de hormigón.
46
5. Introduccio los problemas de
valores vectores propios
5.1 Introducción
K = Ec. 5.1.1
Ec. 5.1.2
Donde es una matriz de orden n x p con las columnas iguales a los p vectores
propios y es una matriz diagonal cuadrada de orden p que contiene los valores
propios.
47
Pero en la realidad, no es la ecuación 5.1.1 la que se tiene que resolver en los
problemas del cálculo de las frecuencias naturales de una estructura, sino un caso más
general,
Ec. 5.1.3
Ec. 5.1.4
Los métodos utilizados para solucionar esta clase de problemas se basan en las
propiedades fundamentales de las matrices y las de los valores y vectores propios. A
continuación se repasarán las principales propiedades según Bathe [17].
= 1, … , Ec. 5.2.1
48
)= ( ) 0 Ec. 5.2.2
( ) 0 Ec. 5.3.2
49
problema (Ec. 5.1.3), el shifting consiste en transformar K (shift en K)
haciendo el siguiente cambio,
Ec. 5.4.1
Ec. 5.4.2
Que podemos reescribir (Ec. 5.4.3) para ver la relación existente entre los
valores y vectores propios del problema original (Ec. 5.1.3) y el transformado (Ec.
5.4.2). Teniendo en cuenta que = + µ.
Ec. 5.4.3
algoritmo utilizado para resolver el problema no está diseñado para calcular valores
propios de valor cero.
= 0.9714 = 0.40
50
Otra aplicación del shift es que permite la posibilidad de buscar valores propios
por encima de un valor determinado.
Según Bathe [17]: “Si para un valor del shif=µ, la factorización Gaussiana del
51
52
6. Metodo de iteracio en el
subespacio
53
Ec. 5.1.4
El primer paso y uno de los más importantes, es determinar una serie de vectores
iniciales para empezar a iterar (X1). Es importante escoger estos vectores de manera
adecuada para reducir el número de iteraciones. Existen serie de casos especiales donde
la convergencia a la solución exacta se produce en una sola iteración; por ejemplo: en el
caso que se pueda realizar condensación estática o si las matrices de rigidez y masa son
ambas diagonales.
54
Los vectores iniciales deben escogerse de tal manera que afecten en mayor
medida a los grados de libertad asociados a valores de masa grandes y rigideces
pequeñas. Un algoritmo que se ha demostrado adecuado para la elección de estos
vectores es el siguiente [17]:
Ec. 6.1
55
Resolver el problema de valores y vectores propios de las matrices proyectadas:
En la iteración del subespacio, está implícito que los vectores iterativos están
ordenados de una manera apropiada.
6.4 Convergencia
) )
para todos los valores de i=1,…,p
El valor de la tolerancia es 10-2s cuando se desea que los valores propios tengan
una precisión de 2s dígitos. Por ejemplo si se itera hasta que los márgenes sean menores
que 10-5, vemos que los valores propios tienen una precisión de al menos cinco dígitos y
en los valores más pequeños normalmente se observa una precisión mayor. A pesar de
que la iteración se realiza con qvectores, la convergencia solamente se mide para las p
menores aproximaciones obtenidas.
56
El último paso en el proceso iterativo en el subespacio e igualmente importante,
es verificar que los valores y vectores propios pedidos han sido calculados, ya que la
ecuación 5.1.4 se satisface para cualquier par de valor y vector propio.
57
58
7. Programas
59
interesaba, y no se pasaban ninguna información entre ellos, cosa que nos hacía falta
para el trabajo que se pretendía desarrollar.
Con el fin de proporcionar una imagen global del proceso que se realiza para
solucionar el problema, que se procederá a pormenorizar en las secciones siguientes, y
situar cada paso en un marco más general dentro del proyecto, a continuación se
muestra un esquema (figura 7.2.1) con unas breves explicaciones para entender el
proyecto en su conjunto.
•Programa encargado de resolver la estructura y que generará los ficheros necesarios para calcular las frecuencias y
las formas propias
PLCD
•Daño
•Masa
•Rigidez
•Programa que se encarga de calcular las frecuencias y los vectores propios de la estructura a partir de los datos
proporcionados
CFYFP
•Frecuencias
•Formas propias
61
7.3 Compatibilidad entre datos
El programa PLCD almacena las matrices en banda por filas y para ello emplea
dos vectores. El primero guarda las columnas de la parte triangular superior de la matriz
comenzando cada fila desde el primer elemento no nulo hasta la diagonal. El segundo
vector contiene las posiciones de los elementos diagonales dentro del primer vector. En
el siguiente ejemplo para una matriz pequeña puede verse más claramente:
1 2 5 6
2 3 0 0
5 0 8 0
6 0 0 2
= (1, 2, 3, 5, 0, 8, 6, 0, 0, 2)
= (1, 3, 6, 10)
62
7.3.2 Almacenamiento Sparse
1 2 5 6
2 3 0 0
5 0 8 0
6 0 0 2
= (1,2,5,6, 2, 3, 5, 8, 6, 2)
= (1, 2,3,4,1, 2, 1, 3, 1, 4 )
= (1,5,7,9)
Teóricamente los vectores acabados de describir sirven para definir una matriz
completa en formato Sparse, pero el programa necesita que se introduzcan unas
informaciones adicionales para funcionar de forma correcta. Éstas incluyen dos datos
que son fáciles de entender que sean necesarios, como son la dimensión de la matriz
original (n), da igual el número de filas o de columnas porque será cuadrada, y el
número de elementos no nulos de dicha matriz (nnz), necesario para conocer el tamaño
de los vectores que se tendrán que utilizar para guardar la información. Toda la
información presentada hasta el momento forma una sola variable que está subdividida
en 5 apartados que almacenan esta información, tal y como se muestra a continuación
para este ejemplo concreto:
63
=4
= 10
Variable A = (1,2,5,6, 2, 3, 5, 8, 6, 2)
= (1, 2,3,4,1, 2, 1, 3, 1, 4 )
= (1,5,7,9)
64
ficheros de salida más o menos útiles, seguidamente se nombran y explican en que
consiste cada uno de ellos. Un ejemplo de cada uno de los ficheros citados a
continuación y que se usan en la realización de este trabajo se puede encontrar en el
Anejo II: Archivos de entrada/salida. En la figura 7.4.1.1 se muestran de forma
esquemática la creación y el uso de cada fichero de entrada y salida.
'***.dts' Frecuencia.txt
PLCD (sólo se muestran los archivos de salida utilizados para el cálculo de frecuencias)
CFYFP
Post proceso
GID
65
nodos, de compuestos, de capas, de materiales, de fases de construcción y máximo
incrementos de carga. Además del tipo de solver y el postproceso deseado, se definen
los elementos (su conectividad y las coordenadas de sus nodos), los materiales
compuestos (incluyendo la caracterización de los materiales simples). Finalmente se
definen las restricciones de los nodos y las cargas aplicadas, asimismo se definen las
fases de carga y los pasos de carga a realizar. Finalmente se definirán las curvas de
salida deseadas. Una descripción completa del contenido y elaboración del fichero se
puede consultar en el manual del PLCD [20].
Fig. 7.4.1.1 Posición de la nueva variable CONF dentro del .dts, en la sección correspondiente al control
incremental de cargas.
66
Dependiendo del .dts el número de los archivos de salida puede variar. A
continuación se muestran los principales que se obtienen al resolver el tipo de
problemas involucrados en este trabajo:
67
dirección fijada. En el fichero .AB se encuentra la información para dibujar las curvas
de daño y desplazamiento sufrido, contiene tres columnas con tantas filas como pasos
realizados, en la primera encontramos los desplazamientos impuestos y, en las otras dos,
los tipos de daño calculados por el PLCD, el medido en fuerzas y la medida energética.
En caso de duda ver el manual del PLCD [20].
Los ficheros descritos hasta ahora son los que ya salían como parte de la rutina
del programa antes de realizar cualquier modificación. Posteriormente y para solucionar
el problema que nos ocupa, además de las nombradas hasta este punto, tenemos las
siguientes salidas adicionales:
Co.txt: la información que contiene este fichero de salida del PLCD y entrada
del CFYFP es diferente de la descrita hasta el momento y es básica para poder calcular
las frecuencias y formas propias de la estructura. Además es diferente de los anteriores
en el formato en que se escribe, debido a que el tamaño del fichero puede llegar a ser
bastante grande y para ahorrar espacio y ganar velocidad, se ha decidido que el fichero
sea no formateado, en el anejo III se muestra el mismo archivo formateado y no
formateado. El ahorro en tamaño varía, pero está entre un 40-50%. El fichero contiene
tantas entradas de datos como número de materiales compuestos del problema, para
cada uno de ellos tendremos: el número de material compuesto, el tensor anisótropo
lineal (Co) y la densidad del material.
68
incluyen los siguiente datos: una variable auxiliar que indica el paso de actualización de
la matriz de rigidez en daño, el elemento, el punto de Gauss de forma concatenada, el
paso de carga, el paso de incremento para esa carga y, por último, el tensor secante del
material compuesto asignado al respectivo punto de integración del elemento que ha
entrado en no-linealidad.
69
Frecuencia-daño-Nombre del problema.res: es el fichero básico para poder
observar la evolución de las frecuencias naturales de las estructuras a medida que se
dañan. En él se puede observar un número de columnas igual al número de frecuencias
buscadas +1, ya que en esta columna adicional se mostrará el daño global de la
estructura. En la vertical veremos tantas entradas como pasos en daño se hayan
realizado en el PLCD más un primer paso que corresponde al cálculo con la rigidez de
la estructura “nueva” o no dañada.
70
parte de los ficheros que serán las entradas al programa de cálculo de las frecuencias
naturales de la estructura, estos ficheros son: Datosgen.txt, co.txt, csec.txt y daño.txt.
Para obtener estos datos se han tenido que realizar modificaciones en la versión
del PLCD original, se utilizó como base la versión actualizada de Marzo del 2011 y las
modificaciones incluyen desde la creación de nuevas subrutinas para la extracción de
datos hasta la modificación de las existentes para llamar a las nuevas. En los siguientes
apartados se explicarán las nuevas subrutinas creadas y las modificaciones en las
existentes.
71
Otra información que hacía falta y no se ha sacado creando nuevas subrutinas es
la perteneciente a las conectividades nodales de los elementos y las coordenadas
nodales. De hecho, está información sí que la proporcionaba el programa pero no de una
manera que nos resultara fácil luego aprovecharla. Este archivo original se sigue
generando pero tiene los siguientes inconvenientes: no nos proporciona el número total
de nodos, el número de elementos ni el los materiales compuestos, sin embargo este no
es el mayor inconveniente sino la otra información que se guardaba. En el fichero
‘Nombre del problema.post.msh’ se incluyen varios encabezados e información extra
que aunque facilita su lectura para las personas, no hace sino entorpecerla en el caso de
los ordenadores. Por ello se decidió crear un nuevo fichero en el que añadieran los datos
de carácter general necesarios para el buen funcionamiento del nuevo programa. Como
todos estos datos ya se producían, simplemente había que escribirlos en un nuevo
documento llamado Datosgen.txt. Los cambios realizados relacionados con este fichero
han sido los siguientes (se muestran en el orden se van accediendo durante el
funcionamiento normal del programa):
72
o Los formatos de escritura utilizados son básicamente los mismos que la
rutina original pero adecuándolos en algún caso a nuestros datos de
salida.
Inpu3_V3D.f --- Línea 93, escribir información relativa a las restricciones de
los nodos.
Resi2D_V3D.f --- Se ha realizado un cambio en los parámetros que entran en la
rutina, se ha añadido un valor extra (AUX1), debido a los cambios en la forma de
calcular el daño global de la estructura. Además,
o Línea 96: se realiza una llamada a CALTEN_V3D que antes no se
realizaba, con el fin de calcular el vector de fuerzas elásticas.
Residu_V3D.f --- Se han añadido varias salidas y entradas de datos en algunas
rutinas debido al cambio en la manera de calcular el daño global:
o Líneas 28-29: Adición de las nuevos elementos en la declaración de
variables a utilizar, en este caso, para el tensor constitutivo elástico
(AUX1 y VDMANX).
o Línea 127: Añadida una llamada a la base de datos 4 para obtener el
tensor constitutivo en forma de vector.
o Línea 135: Componer el tensor constitutivo a partir del vector leído en la
base de datos 4.
o Líneas 202-205: Modificación de la llamada a la rutina Resi2D_V3D, se
añade el tensor constitutivo como valor de entrada (AUX1).
Damage_V3D.f --- Se ha añadido una salida para los casos en que existe
daño y se van a calcular las frecuencias para poder realizar una correlación.
Por ello se crea un fichero nuevo (Daño.txt) y se escribe el daño global
medido en fuerza que ha sido modificado, como se ha visto en el capítulo 4:
o Líneas 51-53: modificación del cálculo del daño medido en
fuerzas.
o Líneas 81-85: adición de las instrucciones para generar un nuevo
fichero de salida y escribir en él el valor del nuevo daño.
73
escribir los valores del tensor secante para calcular las frecuencias de la estructura
dañada. La utilización de JBL2 tiene relación también con el tensor secante ya que se
utiliza para crear una variable auxiliar que ayude en el proceso de actualización de la
matriz de rigidez, como se explicará más adelante en la siguiente sección en el apartado
concerniente a la rutina excsec.f.
Exco.f
Esta subrutina tiene como función extraer los datos del tensor anisótropo y la
densidad de cada material compuesto, se puede consultar el código completo en el anejo
número 1. La llamada a la subrutina tiene el formato habitual en lenguaje Fortran de
CALL exco(LPOP,VCMANX,DENSC). Los datos que necesitamos extraer se los damos
como datos de entrada a la subrutina y lo único que tiene que hacer es escribir los datos
en un fichero para poderse utilizar posteriormente. Esta subrutina sigue el siguiente
esquema: llamado a los módulos necesarios seguido de la definición de las variables a
utilizar. A continuación se crea un fichero nuevo llamado Co.txt para guardar los datos
sin formato de escritura, que permitirá obtener un ahorro en el tamaño final de los
archivos (fig. 7.5.2.1).
Fig. 7.5.2.1 Uso de los módulos necesarios, definición de las variables y creación del nuevo fichero de salida
74
Como todos los datos necesarios ya han entrado en la rutina, ésta no tiene que
realizar ninguna operación y puede escribir directamente en el fichero. Los datos siguen
el siguiente orden: material, tensor anisótropo y densidad del material compuesto (fig.
7.5.2.2). Una muestra con un archivo de salida formateado se puede ver en el Anejo II:
Archivos de salida.
Fig. 7.5.2.2 Escritura de los datos, la versión con formato está comentada pero se puede activar para poder
visionar los datos del fichero y verificarlos.
Finalmente, lo único que nos queda es cerrar el fichero que hemos abierto y la
subrutina, además definimos los formatos de escritura de datos en caso de que se
quieran sacar los datos con formato.
Esta subrutina sólo ha de ser llamada una vez por cada material compuesto
diferente porque representa el estado inicial en el que todavía estamos en linealidad.
Existen varias posibles ubicaciones para la llamada a esta subrutina pero quizá la más
lógica es al final de la subrutina CALCIN_V3D, que es la encargada de realizar
precisamente el cálculo del tensor constitutivo elástico para el material compuesto. Para
evitar que la llamada se repita más veces de las necesarias, incluimos un IF con la
condición de que solamente se produzca la primera vez que pasa por esa instrucción. En
la figura 7.5.2.3 se observa la subrutina CALCIN_V3D antes y después de la
modificación realizada.
Fig. 7.5.2.3 Comparativa del código CALCIN_V3D antes (izqda.) y después (dcha.) de la modificación. Se muestra el
código entre la línea 86 y el final en ambos casos.
75
Excsec.f
Al igual que la anterior subrutina ésta también tiene como finalidad extraer
información del PLCD para utilizarla posteriormente al calcular los valores y vectores
propios, por tanto la estructura del código y los comandos utilizados serán muy
similares a los de la subrutina exco. El código completo se puede consultar en el anejo
número 1. El llamado a esta subrutina se hará de la siguiente manera: CALL
exctan(i,j,k,l,DB2aus). Los datos que guardaremos en un nuevo fichero (Csec.txt)
serán, en este caso, los pertenecientes al tensor secante (CSEC), además incluiremos el
número de elemento examinado, la carga, el paso en el momento de tomar los datos, el
punto de Gauss en el que se calcula y una variable auxiliar que nos servirá más adelante
en la actualización de la matriz de rigidez dañada. El PLCD no calcula el tensor secante,
porque en la solución de los problemas no lineales utiliza el tensor tangente. La
estrategia empleada para obtener el tensor secante fue calcularlo una vez se obtenga la
convergencia en el respectivo paso de carga. Para el cálculo se usa el valor de la
variable de daño para calcular el Csec=(1-d)Co en el material simple y recomponer el
Csec del compuesto. Para esto se tuvieron que crear las rutinas CALSEC_V3D, CLAY-
SP3D y MODCSEC_V3D, por tanto su llamada tendrá que ser posterior al uso de estas
tres nuevas rutinas.
Fig. 7.5.2.4 Concatenado de los puntos de Gauss para obtener un ahorro de espacio en el fichero
76
agrupados todos los valores que se tienen que cambiar juntos para obtener la matriz de
rigidez modificada. Para ello usamos las instrucciones de la figura 7.5.2.5. Será en este
punto cuando se usará la nueva variable creada en el módulo ENTEROS, JBL2, que se
usará para que la primera vez que se usa la rutina tomen valor dos variables, que
contienen el elemento (INDXI) y el punto de Gauss (PGAUSI), que sirven para
comparar con el resto y decidir si se sigue en el mismo paso de actualización u otro.
Una vez se llega un registro que requiere un nuevo paso de actualización, ya sea porque
estamos en otro paso de carga o en otro incremento, se actualizarán todas las variables.
Después de este pequeño cálculo para decidir el valor de AUX, la subrutina ya tiene toda
la información que tiene que guardar y puede proceder a hacerlo (figura 7.5.2.6). Un
ejemplo de la forma típica del archivo de salida puede consultarse en el Anejo II:
Archivos de Entrada y Salida.
Fig. 7.5.2.5 Instrucciones para crear un contador que agrupe a los puntos de Gauss que tengan que actualizarse
juntos
77
Fig. 7.5.2.7 Condición para el llamado de la subrutina exsec y situación dentro del código de FINISH_V3D.Además
se puede observar la llamada a la función Exgrandef, para el caso de tratar un problema con grandes
deformaciones. Se muestra el código de la línea 25 a la 54
Exgrandef.f
Calcsec_V3D.f
78
tensor constitutivo secante del material compuesto para cada punto de integración que
haya entrado en no linealidad.
A diferencia del original, a esta rutina tenemos que darle varios parámetros de
entrada (INDXB5, IGUAS, JGAUS, LGAUS) y nos proporcionará uno de salida
(VDMANX). Esto se hace porque su llamada se produce cada vez que un punto de
Gauss ha convergido y ha sufrido daño, originalmente se hacía un bucle para cada
material compuesto, pero ahora sólo para el punto concreto de la llamada. Lo que se
hace en la rutina es lo siguiente: se ponen a cero las variables que se usarán, se hace un
bucle sobre cada lámina del compuesto, dependiendo de la teoría de mezclas que se esté
usando (paralelo, serie paralelo o nano tubos) se seleccionará una rutina según la teoría
de mezclas usada para calcular el tensor. Una vez calculado se rotará el tensor desde las
coordenadas locales a las globales usando los ángulos de Euler proporcionados en el
.dts y se irán sumando las contribuciones de cada capa del compuesto teniendo en
cuenta su participación volumétrica (figura 7.5.2.8). Una vez finalizado el bucle sobre
las capas se transformará el tensor en vector para que sea más sencillo su
almacenamiento, éste será devuelto a la rutina “madre” y escrito en el fichero Csec.txt
usando la rutina excsec, explicada anteriormente.
Fig. 7.5.2.8 Bucle de Calsec_V3D sobre las láminas del compuesto, cálculo según la teoría de mezclas apropiada,
rotación usando los ángulos de Euler y cálculo del tensor teniendo en cuenta la participación volumétrica de cada
capa.
79
Como se ha comentado, el cálculo del tensor secante se hace según la teoría de
mezclas adecuada a la capa que nos ocupa, aunque se ha dicho que puede ser paralelo,
serie paralelo o nano tubos, realmente solamente pueden utilizarse las dos primeras
teorías ya que la tercera no ha sido adecuada para calcular el tensor secante, la teoría de
nanotubos ha sido implementada por primera vez en el PLCD en su última versión y en
el caso de los ejemplos utilizados en esta tesina no se ha utilizado en ningún caso. A
continuación se explican las rutinas que calculan el tensor siguiendo teoría pertinente.
Modcsec_V3D.f
Esta rutina se encarga de calcular el tensor constitutivo secante para una capa
con mezcla paralela y es una versión modificada de la rutina original del PLCD
MODCO_V3D. De la misma manera que pasaba en la versión modificada de
CALCIN_V3D a la rutina se le proporcionarán como datos de entrada el elemento y el
punto de Gauss que ha entrado en daño y se hará un bucle sobre todas las capas que
estén afectadas. Para calcular el tensor secante, se hace una llamada a la base de datos 4
para obtener los datos del tensor lineal del material simple que constituye la capa y una
llamada a la base de datos 2 para obtener el daño de ese punto de Gauss de ese
elemento. Con estos dos valores se calcula el tensor secante de la siguiente manera:
=( )
Clay-sp3dsec.f90
Esta rutina realiza la misma función que MODCSEC_V3D pero para los casos
que la teoría de mezclas utilizada es serie-paralelo, al igual que en el caso de paralelo se
le ha de suministrar como datos de entrada el elemento y el punto de Gauss. Es una
versión modificada de CLAY-SP3D. El funcionamiento de la rutina es exactamente el
mismo que la última pero en lugar de realizar n-veces las operaciones (llamada a las
80
bases de datos 4 y 2, multiplicación por el daño, composición del tensor, rotación y
adición de las distintas contribuciones) se tiene que hacer una vez para la matriz y otra
para la fibra. Esta pequeña diferencia hace que se utilicen algunas rutinas adicionales
pero el proceso es el mismo.
81
Fig. 7.6.1 Esquema de la rutina encarga del cálculo de los valores y vectores propios
82
7.6.1 Factorización de Cholesky
7.6.2 Solver
i-ésima j-ésima
1 i-ésima
=
1 j-ésima
( ) )
(Ec. 7.6.1.1)
) )
) ) )
) (Ec. 7.6.1.2)
84
Por último, se ha de comentar que normalmente para evitar tener que
transformar en cero valores que ya sean muy cercanos, se establece un umbral que fija a
partir de qué valor se hace el cálculo. Esto se debe a que si el número ya es
originalmente muy cercano a cero, el resultado final no variará significativamente y se
puede ahorrar el cálculo. Además como normalmente se trata con matrices simétricas,
solamente hay que recorrer la matriz triangular inferior o superior.
Con este valor obtenido (R) se calcula un error comparándolo con el valor propio
encontrado, que si supera la tolerancia nos envía otra vez a realizar otra iteración para
encontrar una respuesta más precisa. Si se ha alcanzado la convergencia se devolverán
los valores a la rutina principal. El problema que presenta está forma de comprobar la
convergencia sin ninguna instrucción adicional es que el programa calcula los valores
propios y, en base a ellos, los vectores asociados. Al utilizar estos vectores para calcular
los valores propios se está haciendo el mismo paso pero al revés, de tal forma que el
programa logra siempre la convergencia en la primera iteración.
85
7.6.4 Rutinas modificadas del SIM
entradas añadidas han sido: pred, spred y R. La primera sirve para indicar si
se ha solucionado antes el problema de autovalores de la estructura, en tal
caso se utilizarán los valores obtenidos la última vez como predicción para
empezar a iterar. Spred contiene esos valores que han formado la solución en
la anterior resolución del problema. Finalmente, R sirve para dar dimensión a
la matriz Spred.
En la rutina Main-SIM.f90 se ha creado la variable new_n que toma el valor
de new_size debido esta versión del programa no permitía el cambio de un
valor de una variable que era la encargada de controlar el bucle (new_size).
Por ello la nueva variable toma el valor de la original y se utiliza en lugar de
ésta.
En la misma rutina que el anterior se ha desactivado la parte del código
encargada de realizar el Sturm check. La razón ha sido que con las matrices
que tenemos que calcular se produce un error ya que en formato Sparse el
número de valores no nulos de las matrices de masa y rigidez no tiene que
coincidir, es más en general no coincidirán y el que lo hagan es una
probabilidad muy pequeña.
86
Todavía en Main-SIM.f90, entre las líneas 77 y 80 se ha añadido un if, la
razón es determinar si ya se han calculado antes las frecuencias y formas
propias, en tal caso se utilizará esta respuesta como predicción inicial y nos
saltaremos el cálculo de los vectores predictores (go to 50). En la línea 90
se ha tenido que añadir la bandera de salto anterior (50).
Entre las líneas 149 y 155 de la rutina Main-SIM.f90 se ha añadido una
nueva condición de convergencia, ya que la anterior por si sola no la
garantizaba. La nueva convergencia se realiza solamente en el valor propio
más alto calculado, ya que es el que más problemas presenta normalmente.
Se supone que si se cumple para el valor más alto los demás también lo
harán. Para ello se compara el valor de la iteración anterior con el actual de
la siguiente manera: abs(svalv(neig)-Vk(neig))/Vk(neig)).lt.toler,
donde svalv contiene el valor calculado en la iteración anterior. Si se cumple
la condición se abandona el bucle de cálculo, en caso contrario se vuelve otra
vez al bucle y se cambia el indicador de convergencia a no convergido.
El último cambio de esta rutina principal se ha realizado en la línea 175, se
ha añadido una instrucción para almacenar la respuesta convergida y
utilizarla como predicción inicial la siguiente vez que se calculen los
resultados.
En SIM-Predict2.f en las líneas 38 y 39 se ha añadido la siguiente instrucción
abs, se ha realizado este cambio porque con el tipo de problemas que se van
87
7.7 Descripción de los desarrollos hechos en el CFYFP.
Las rutinas utilizadas en este programa pueden dividirse en tres según su origen:
rutinas ya existentes en el PLCD y que se reutilizarán, las suministradas por Xavier
Martínez (encargadas de realizar el cálculo de los valores y vectores propios) y,
finalmente, las creadas a partir de cero para complementar a los dos primeros grupos y
darle consistencia a todo el programa. A continuación se muestra una lista de todas las
rutinas utilizadas clasificadas según su origen:
88
CARTEL.F JACOB3D.FOR PROMA1.F
SIM_SYMBOL.F90 SIM_PREDICTION.F90
SIM_ERROR.F90 SIM_PREDICTION2.F90
Por último, las subrutinas nuevas que no existían y que han tenido que crearse,
para algunas de ellas se han utilizado de base otras ya existentes y en el resto son
completamente nuevas:
89
ALMACEN.F CFYFP.F VECTPROP.F
ANIMACION.F ESCRIBIR.F
Cálculo de las matrices elementales de rigidez, pasando por todos sus pasos
intemerdios.
Ensamblaje de la matriz de rigidez global.
Reducción de la matriz en base a las restricciones nodales.
Almacenamiento de esa matriz en formato SPARSE
Llamada a la rutina encarga de calcular las frecuencias y los vectores
propios.
Escritura de los resultados obtenidos en los ficheros de salida que
correspondan.
En el caso del cálculo cuando la estructura está dañada existe alguna pequeña
diferencia que hace el proceso un poco más complejo debido a que se tiene que realizar
un proceso adicional: para aquellos puntos de Gauss que hayan entrado en daño en un
determinado paso se procederá a descontar la contribución que tenía ese punto en la
matriz global K original y se le adicionará la nueva contribución “dañada”. Para ello, se
ha de mirar que puntos de Gauss entraron en plasticidad y usar el Csec en esos casos, en
los otros seguimos con el Co. De esta manera se obtendrán tantas matrices como pasos
con variable CONF igual a uno se hayan demandado en el .dts del PLCD.
90
Fig. 7.7.1.1 Representación esquemática de la estructura de CFYFP
91
Para tener más claro el funcionamiento del nuevo programa, primero se detallará
la rutina CFYFP.f, ya que es la base de todo el funcionamiento y la rutina principal. A
continuación se explicarán las instrucciones de las otras rutinas nuevas. Para terminar se
comentarán los cambios realizados en las ya existentes.
Como en todas las rutinas lo primero que hay que hacer es la declaración de
variables a utilizar, en este caso tenemos que declarar cuatro tipos de elementos: valores
enteros y reales, matrices y vectores de dimensión conocida y desconocida, por el
momento, ya que posteriormente se procederá a darlos la pertienente dimensión. Al
darse la circunstancia que muchas variables utilizadas eran las mismas que el PLCD, se
ha decidido utilizar los módulos ENTEROS, MATRICES y PARAM3D,se han modificado ya
que incorporaban multitud de variables que en este caso no hacían falta y se han
quitado, asimismo también se usa un módulo para las matrices en formato SPARSE
(Sparse_SCSR) que se utilizaba en la rutinas de Xavi Martínez. Consecuentemente, se
ha usado también la rutina de alocar variables ALLOCA_V3D que ya se usaba en el PLCD.
Después de definir las variables y abrir los archivos de entrada de datos, se leen unos
datos generales para todo el programa como son: el nombre del problema, el tipo de
problema, el número de nodos, el número de elementos, el número de materiales
compuestos utilizados y un indicador de si el problema es en pequeñas o grandes
deformaciones (CPROB, TYPEP, NPOIN, NELEM, NMATC, LARGE). Con estos
valores ya podemos dar dimensión a la mayor parte de las variables que se habían
dejado sin una conocida al principio del programa.
92
Seguidamente se prosigue realizando tareas que servirán a lo largo de toda la
rutina: guardar las conectividades nodales de los elementos (CON), el material asociado
a cada elemento (MAT) y los ángulo de Euler (MATEULER), almacenar las coordenadas
de todos los nodos (COOR), leer las restricciones impuestas a dichos nodos (RESTR),
calcular los datos de la base de datos 6 (grados de libertad de cada nodo y los
acumulados), establecer el valor de las constantes de integración de Gauss (POSGP y
WEIGP), por último se realiza un bucle sobre los materiales compuestos para tener la
densidad y el tensor elástico (Co) de cada uno de ellos.
93
Cálculo de las frecuencias y valores propios iniciales
Una vez realizados estos trámites iniciales pasamos al primer eslabón del
proceso que vamos a desarrollar: el cálculo de la rigidez elemental inicial, es decir la
rigidez que tiene en elasticidad un elemento, como no podemos garantizar que todos los
elementos sean exactamente iguales, habrá que repetir el proceso para todos los
elementos. Para ello seguimos los siguientes pasos: hacemos un bucle sobre cada
elemento y pasamos a la variable ELCOD las coordenadas nodales del elemento en
cuestión, almacenadas previamente en COOR. Seguidamente se calcula la matriz de
masa, que solamente tendrá que hacerse una vez en todo el problema porque se supone
constante, para ello se utiliza una rutina ya existente en el PLCD, CALL MASMATV3D
(ELEM, MAT, COOR, DENS). Esta rutina permite calcular la matriz de masa como
94
valor junto con el número del elemento en la matriz ESTIFES. El cálculo de la rigidez
de cada elemento puede observarse en la figura 7.7.2.1. Para almacenar la matriz del
elemento (ESTIF), la transformamos en un vector y la copiamos en otra matriz mayor
(ESTIFES), que al acabar el bucle sobre todos los elementos contendrá en cada fila el
número de elemento y la matriz descompuesta de cada elemento dañado en el último
paso.
Fig. 7.7.2.1 Cálculo de la rigidez elemental elástica. Código mostrado entre las líneas 238 y 288.
95
que nos harán falta más adelante (C y F), que se usarán para calcular la posición de cada
elemento en la matriz global. Utilizando una serie de variables auxiliares (AUX1, AUX2,
AUX3, AUX4) fijamos un valor que nos servirá para decidir la posición en la matriz
global, las dos primeras hacen lo mismo (una para la posición de la fila y la otra para la
de la columna), dividimos la posición del elemento entre tres y le sumamos 0.9 (no hay
ninguna razón para que sea 0.9, puede ser cualquier valor entre un tercio y uno, sin ser
ninguno de los extremos) para hacer que los tres grados de libertad den un mismo valor,
el valor del nodo en el que se encuentran. Para ello nos quedamos solamente con la
parte entera (AUX3 y AUX4). La parte del código encargada del ensamblaje se puede
ver en la figura 7.7.2.3. Además de ensamblar la matriz de rigidez también se tiene que
hacer lo mismo con la matriz de masa elemental que se ha calculado con anteioridad.
Fig.7.7.2.3 Sección del código encargada de realizar el ensamblaje de la matriz de rigidez y masa globales.
A continuación se muestra un ejemplo de lo que hace esta parte del código del
ensamblaje para que quede más claro:
Ejemplo
Ejemplo para los tres primeros elementos de una matriz elemental (posiciones:
(1,1), (1,2) y (1,3)) y para los elementos (3,4), (3,5) y (3,6):
96
Elemento
1,1 1,2 1,3 3,4 3,5 3,6
AUX1 1.233 1.233 1.233 1.899 1.899 1.899
AUX2 1.233 1.566 1.899 2.232 2.565 2.898
AUX3 1 1 1 1 1 1
AUX4 1 1 1 2 2 2
Con esto sabemos que nodo dentro del elemento se está tratando, pero no
sabemos si ese primer nodo del elemento es el nodo 1 o el 50 del global. Para ello
tenemos que mirar la información de las conectividades y para saber el grado de libertad
en el que nos encontramos utilizaremos los dos vectores creados anteriormente (C y F).
Para saber la posición global haremos: mirar el valor del vector de conectividades
(sabremos en que nodo global nos encontramos), le restamos uno y lo multiplicamos
por tres, seguidamente le sumamos un valor del vector auxiliar adecuado (dependiendo
si estamos mirando la posición de las filas F o de las columnas C). Finalmente hay
que actualizar el valor de estos vectores auxiliares, sumando uno a la posición
consultada en el caso de las columnas y cuando acabemos la fila, en ésta. Con la
finalidad de clarificar la explicación se continuará con el ejemplo anterior. Para
realizarlo nos hace falta la información de las conectividades para ello supondremos:
CON=[1 2 3 4 5 6 7 8]
Elemento
1,1 1,2 1,3 3,4 3,5 3,6
GLOBF 1 1 1 3 3 3
GLOBC 1 2 3 4 5 6
[1 1 1 1 1 [2 1 1 1 1 [3 1 1 1 1 [4 1 1 1 1 [4 2 1 1 1 [4 3 1 1 1
C
1 1 1] 1 1 1] 1 1 1] 1 1 1] 1 1 1] 1 1 1]
F [1 1 1 1 1 1 1 1] [3 1 1 1 1 1 1 1]
97
Las matrices que tenemos en este momento son matrices completas (K y M), no
se han tenido en cuenta todavía que hay una serie de grados de libertad restringidos y
que se podrán utilizar en su lugar matrices más pequeñas, matrices reducidas. Para
hacerlo se crea un vector que tiene tantos registros como grados de libertad el problema,
cada posición contiene un uno (restringido) o un cero (libre) según la propiedad del
nodo, en los nodos que se ha aplica un desplazamiento aunque puedan parecer fijos en
un principio, tienen completa libertad (por ello existen los tres if, para realizar está
corrección). Para ello, se leen las restricciones y se hacen dos bucles, uno sobre las filas
de K y M, y otro sobre las columnas de K y de M. Durante este recorrido sobre ellas se
eliminan aquellas filas y columnas que están restringidas, quedando finalmente sólo la
información de los nodos libres. El proceso de la reducción de las matrices puede verse
en la figura 7.7.2.4
Fig. 7.7.2.4 Proceso de reducción de las matrices teniendo en cuenta los grados de libertad restringidos
98
Posteriormente se procede al almacenamiento en formato SPARSE para ello se
realiza la siguiente llamada: CALL ALMACEN (STIFRED2, CRED, SPARK). Los detalles
de la subrutina Almacen.f se encuentran en la sección 7.7.3.
rutina se encuentra en la sección 7.6, por ahora digamos que funciona correctamente y
que se resuelve el problema de autovalores, la rutina nos devolverá: los valores propios,
los correspondientes vectores y un vector con los valores convergidos para usar como
vector predictor en el siguiente paso y con el cual no se tiene que realizar ninguna
acción. Para concluir, nos queda escribir los datos en un fichero de salida que nos
permita realizar el postproceso. Pero antes no hay que olvidar que se ha realizado la
reducción de la matriz ensamblada completa debido a que algunos grados de libertad
estaban restringidos, para no tener problemas más adelante hay que reescribir los
vectores propios que hemos calculado pero teniendo en cuenta está reducción, para ello
hacemos una llamada a una de las nuevas rutinas creadas: CALL VectProp
(svec,NEIG,CRED,NTOTV,SVECC,VRESTR) y que se describe más adelante en la
sección 7.7.3. Como los valores calculados no son las frecuencias de la estructura, sino
que corresponden al valor propio, las calculamos para poder guardarlas. Para acabar
solamente nos quedará escribir los resultados: la relación daño-frecuencia en una tabla
(Daño-frecuencia-nombre_del_problema.res) y las correspondientes formas propias en
un fichero (nombre_del_problemaF.post.res) para su posterior visualización en un
programa de postprocesado (en nuestro caso se usará el GID). Para ello hacemos un
llamado a la nueva rutina ESCRIBIR(eigenfreq,NEIG,NTOTV,SVECC,0,0,1,CPROB),
programa descrito en las páginas siguientes, en la sección 7.6.3. De manera opcional, en
99
este punto se puede realizar un llamado a la subrutina ANIMACION (CALL ANIMACION
(SVECC(:,FANIM), FANIM, NTOTV,CPROB)) que se encargará de crear los datos
Hasta este punto la rutina no lineal solamente se ejecuta una vez, pero a partir de
aquí se repetirá para realizar las sucesivas actualizaciones de la matriz de rigidez, por
ello situamos una bandera en esta posición. A partir de aquí se puede decir que
realmente empieza el proceso de cálculo de la matriz de rigidez dañada. Primero se
100
cuentan cuantos puntos de Gauss han entrado en plasticidad en un mismo paso, sin tener
en cuenta si son o no de diferentes elementos, y posteriormente se cuenta de cuantos
elementos son esos puntos de Gauss. Todo ello se muestra en la figura 7.7.2.6
Fig. 7.7.2.6 Bandera que marca el punto a partir del cual algunas instrucciones se repetirán y la creación de dos
contadores que se usarán para la actualización.
Seguidamente empezará un proceso que será similar al descrito para el caso base
o elástico pero con una diferencia muy importante, no se tendrá que crear la matriz de
rigidez elemental para cada elemento sino que sólo para aquellos que tengan algún
punto de Gauss dañado. Por esta razón creamos un bucle para repetir el proceso tantas
veces como elementos a actualizar en el paso de carga estudiado tengamos (el contador
CTRL4 que se ha visto previamente tiene está función). Posteriormente se leen las
coordenadas y se hace un bucle sobre todos los puntos de Gauss del elemento en
cuestión. Lo primero que hay que hacer es ver si el punto de Gauss que se va a examinar
es uno de los que ha entrado en daño (figura 7.7.2.7), como se han escrito en orden en el
fichero Csec.txt sólo se ha de comprobar el que hemos leído. Si coinciden los dos
puntos de Gauss utilizaremos el tensor secante que hemos leído del fichero, en caso
contrario se usará el Co como en el caso elástico. A partir de este punto el proceso
continúa como en el caso base, siguiendo los mismos pasos hasta calcular la matriz de
rigidez. Después de calcularla si se ha utilizado ya la información leída de Csec.txt
(CONTROL=1) se leerá el punto siguiente, sino se seguirá con el que ya se tiene en la
memoria. Cuando finalice el elemento, se ensamblará la nueva rigidez en la posición
101
conveniente, el proceso de ensamblaje es ligeramente distinto al caso base debido a que
se ha de descontar la contribución elástica de ese elemento y sumarle la dañada (fig.
7.7.2.8). Se continuará reduciendo la matriz, almacenándola en formato SPARSE y
finalmente calculando las nuevas frecuencias y formas propias. Antes de volver a la
bandera se guardarán los resultados para su posterior uso, se hará de igual manera que
en el caso base, utilizando la rutina ESCRIBIR. Finalmente se vuelve a la bandera y se
procede con el siguiente caso de actualización.
Fig. 7.7.2.7 Comparación del punto de Gauss leído y el que toca calcular, si coincide se utiliza la información leída.
Fig. 7.7.2.8 Actualización de la matriz de rigidez, descontamos la contribución de la parte elástica y le sumamos la
plástica.
El proceso se repetirá tantas veces como sea necesario para procesar los datos
obtenidos del PLCD, hasta que se alcance la condición de salida del bucle (Figura
7.6.2.9) y el programa finalice.
Fig. 7.7.2.9 Condición situada al final de la rutina y que decide si se vuelve a la bandera y se prosigue con otra
actualización o si se ha finalizado el tratamiento de los datos proporcionados por el PLCD y hay que salir del
programa.
102
Ejemplo
Por poner ejemplo se supone que la siguiente de matriz es una matriz de rigidez
global de una barra discretizada en dos elementos para un momento inicial sin daño
alguno:
5 0
= 5 9 4
4 4
5 4
5 5 4 4
Primer paso
Se han dañado el primer elemento y sus rigidez es ahora 4. El proceso que sigue
la rutina es el siguiente:
4
4 4
=5–5+4=4
= -5 – (-5) +(- 4) = - 4
103
= -5 – (-5) +(- 4) = - 4
=9–5+4=8
Una vez se han actualizado todos los valores del mismo paso se obtiene
la nueva rigidez degradada:
4 0
= 4 8 4
4 4
Segundo paso
Los elementos dañados en el primer caso se han dañado más pero además
aparece un nuevo elemento dañado, el segundo. La rigidez del primero pasa a valer 2 y
la del segundo 3. El proceso que sigue la rutina es el siguiente:
2
2 2
=5–5+2=2
= -5 – (-5) +(- 2) = - 2
= -5 – (-5) +(- 2) = -2
=9–5+2=6
Una vez se han actualizado todos los valores del primer elemento, se
procede de igual manera pero para el segundo elemento:
=6–4+3=5
104
= -4 – (-4) + (-3) = - 3
= -4 – (-4) + (- 3) = -3
=4–4+3=3
Una vez se han actualizado todos los valores del mismo paso se obtiene
la nueva rigidez degradada:
2 0
= 2 5 3
3 3
Los puntos importantes de este proceso son los siguientes: se parte siempre de la
matriz no dañada, se identifican los elementos dañados, se les resta la contribución
elástica y se le añade la contribución dañada calculada en las rutinas a partir del tensor
secante. Una vez actualizados todos los elementos de un mismo paso se resuelve el
problema de autovalores. Se repite el proceso tantas veces como pasos dañados se hayan
obtenido en el PLCD.
Como se ha visto, hay una serie de rutinas nuevas que se utilizan a lo largo del
proceso, seguidamente se procederá a explarlas.
Almacen.f
105
dimensión de las variables a utilizar y poder alocarlas (Figura 7.7.3.1). A pesar de
tratarse de matrices simétricas, tanto la de rigidez como la de masa, debido a la
configuración de las rutinas de cálculo nos vemos obligados a almacenar la matriz
completa.
Fig. 7.7.3.1 Primer bucle sobre la matriz que se quiere almacenar y alocamiento de las variables
Fig. 7.7.3.2 Segundo recorrido sobre la matriz y asignación de valores a las variables. Por último hay que asignar
valor a la última posición del vector i.
Por último y antes de terminar se asigna un valor a la última posición del vector i
(A%i(n+1)) (Figura 7.7.3.2) debido a la estructura del programa, más adelante puede
verse una explicación detallada de las razones de esta asignación. Al finalizar la rutina,
la variable presentará una estructura similar a la siguiente:
106
Fig. 7.7.3.3 Ejemplo variable almacenada en formato sparse, en este caso la variable se llama Spark
VectProp.f
Fig. 7.7.3.4 Formación del vector propio completo a partir del calculado previamente con las rutinas explicadas.
Escribir.f
La subrutina Escribir.f recoge los datos que resultan de la rutina Eigen_SIM (los
vectores propios y las frecuencias, que se han calculado a partir de los valores propios
computados) y los escribe en los ficheros de salida, dos archivos diferentes: uno que
muestra la evolución de las frecuencias y del daño, y otro, con los vectores propios en
107
un formato que permita su utilización en el GID (.post.res), programa con el que se
realizará el postprocesado de los resultados.
Frecuencias-daño
Este archivo es el más sencillo de los dos, en ella se presentan los resultados en
forma de tabla, un ejemplo del formato de uno de estos archivos de salida puede
consultarse en el Anejo II: Archivos de salida y entrada. Como el nombre del archivo
indica se representa el daño que presenta la estructura en el paso y el valor de las
frecuencias calculadas en Hercios. Cada fila representa un estado de daño diferente, que
empieza con la estructura “nueva” (daño 0) y va aumentando hacia la parte inferior de la
tabla hasta alcanzar el mayor nivel de daño calculado con el PLCD.
Una vez finalizada la creación, los datos pueden ser exportados a otro programa
para su tratamiento y estudio.
Vectores propios
Antes de escribir los resultados, se hace una normalización de los datos de las
formas propias. La normalización se hará de tal manera que el valor máximo del vector
sea uno (figura 7.7.3.5).
108
Fig. 7.7.3.5 Normalización de las formas propias antes de su escritura.
109
Animacion.f
110
incremento del paso y se volverá escribir, al finalizar el bucle nos encontraremos en la
otra posición extrema, pero con pasos intermedios.
Se tiene que correr una vez se hayan utilizado el PLCD y el CFYFP y nos pedirá
por pantalla el nombre del problema resuelto y el número de animaciones creadas. Estas
funciones se podrían haber implementado como parte de las rutinas que forman el
CFYFP, pero en ese caso simplemente causarían un gran retraso en el cálculo ya que
implicarían como mínimo la lectura de la malla original de la estructura una vez y la
111
escritura de ésta neig+1 veces, siendo neig el número de frecuencias buscadas. Todo
ello en medio del proceso de cálculo, es por ello que se hace totalmente aparte y de
manera opcional, ya que no cambia ninguno de los resultados obtenidos previamente y,
simplemente, facilita su tratamiento posterior. El código completo se encuentra en el
Anejo I.
El método más sencillo para crear la matriz de masa es concentrar ésta en las
coordenadas nodales que definen los desplazamientos de traslación, por eso es conocido
también con el nombre de método de masas concentradas (lumped matrix). Lo más
habitual es distribuir la masa de cada uno de los elementos en los nodos del elemento.
Este método supone que el efecto inercial asociado a los grados de libertad angular es
cero, aunque se pueden asociar valores finitos a estos grados de libertad. Existen varios
métodos para distribuir la masa en los nodos, la rutina del PLCD utiliza las funciones de
forma para calcular que masa asigna a cada punto e integra sobre todos los nodos del
elemento, finalmente los valores que calcula solamente los asigna a la diagonal de la
matriz de masa elemental.
112
determinar los de la de rigidez. En este caso la rutina calcula los valores de igual manera
usando las funciones de forma e integrando pero en vez de concentrar la masa en los
elementos de la diagonal los asigna a la posición que corresponda.
Aunque las dos matrices son claramente diferentes el uso de una u otra no
presenta grandes diferencias en los resultados finales para las primeras frecuencias
propias, por eso y debido a que la matriz de masa diagonal presenta evidentes ventajas
desde el punto de vista computacional, es la matriz concentrada la que se usa
normalmente en la mayoría de programas comerciales y, en este caso, se usará también
para resolver las estructuras.
113
114
8. Validaciones
A lo largo del desarrollo de esta tesina se han tenido que ir validando las nuevas
partes de código creadas además del funcionamiento global de todas las rutinas. En esta
sección se muestran las distintas validaciones realizadas durante el todo el proceso,
tanto las parciales como la global.
115
tenido que crear una rutina que se encargue de hacerlo. Para comprobar que
efectivamente esa rutina funciona de forma adecuada y sin errores se ha probado con
matrices de tamaño pequeño, de tal forma que fuera fácilmente verificable si el
resultado final era el esperado o no. Como muestra del correcto funcionamiento del
proceso veremos el resultado para una matriz dispersa como la del ejemplo de la sección
7.3.2 Almacenamiento en Sparse. El resultado obtenido al realizar el proceso que el
citado ejemplo ha sido el mostrado a continuación (Figura 8.2.1).
8.3.1 Ejemplo
Como primer ejemplo para comprobar que las rutinas encargadas de calcular las
frecuencias y los vectores propios funcionan correctamente se ha escogido uno
previamente resuelto [21]. Se trata de una estructura construida de hormigón armado
con cerramientos en muros de mampostería. Se ha simplificado la estructura utilizando
como modelo un oscilador con una masa concentrada para cada piso. Las matrices de
masa y rigidez utilizadas para realizar los cálculos son las que se muestran a
continuación:
20 0 0 2 0
10 0 15 0 10 2 3 1
0 0 10 1 1
116
En este caso al tratarse de un caso tan elemental se ha decidido calcular las tres
frecuencias propias, con sus correspondientes formas. Como las frecuencias y las
formas están relacionadas, en este apartado se mostrarán solamente los resultados de las
frecuencias (Tabla 8.3.1.1) pero en el Anejo IV: Validación SIM se muestra la
comprobación completa.
Frecuencias Error
Teóricas Calculadas Absoluto Relativo %
0,942197 0,943542 -0,001344 -0,001427 -0,142670
2,019676 2,017316 0,002360 0,001169 0,116862
2,993704 2,995301 -0,001597 -0,000533 -0,053329
Tabla. 8.3.1.1 Resumen validación del primer ejemplo, teóricas se refiere a los valores proporcionados en el
ejemplo de la referencia [21] y loas calculadas son los valores obtenidos al realizar el análisis con los programas
explicados.
8.3.2 Ejemplo
El segundo caso [22] para comparar las soluciones obtenidas por las rutinas de
cálculo es un poco más grande que el primer ejemplo, pero también se trata de
hormigón armado con cerramientos en muros de mampostería (Figura 8.3.2.1). Para
simplificar los cálculos, se ha considerado la estructura como un oscilador de masas
concentradas en cada piso. Los datos (K y M) usados en este caso son:
105750 0 0 0 0 0 0 0 0 0
0 99750 0 0 0 0 0 0 0 0
0 0 95138 0 0 0 0 0 0 0
0 0 0 93075 0 0 0 0 0 0
0 0 0 0 92325 0 0 0 0 0
M
0 0 0 0 0 90638 0 0 0 0
0 0 0 0 0 0 88950 0 0 0
0 0 0 0 0 0 0 86888 0 0
0 0 0 0 0 0 0 0 85575 0
0 0 0 0 0 0 0 0 0 63638
117
0.848 0.5964 0 0 0 0 0 0 0 0
0.5964 1.1928 0.5964 0 0 0 0 0 0 0
0 0.5964 0.884 0.2876 0 0 0 0 0 0
0 0 0.2876 0.5752 0.2876 0 0 0 0 0
0 0 0 0.2876 0.5752 0.2876 0 0 0 0
K 1E 9
0 0 0 0 0.2876 0.4054 0.1178 0 0 0
0 0 0 0 0 0.1178 0.2356 0.1178 0 0
0 0 0 0 0 0 0.1178 0.1551 0.0373 0
0 0 0 0 0 0 0 0.0373 0.0746 0.0373
0 0 0 0 0 0 0 0 0.0373 0.0373
118
Frecuencias Error
Teóricas Calculadas Absoluto Relativo %
1,302739355 1,299508131 -0,003231224 -0,002480330 -0,248033032
2,672665981 2,672236892 -0,000429089 -0,000160547 -0,016054702
4,433543687 4,434784709 0,001241023 0,000279917 0,027991669
5,731788010 5,734211926 0,002423916 0,000422890 0,042288998
6,941053437 6,941458765 0,000405328 0,000058396 0,005839573
Tabla 8.3.2.2 Resumen de los resultados obtenidos para el cálculo de las frecuencias naturales con las matrices
del segundo ejemplo, los valores de la columna con el nombre de teóricas se refieren a los valores encontrados
en la referencia [22] y utilizados para comprobar los valores calculados con las rutinas explicadas anteriormente.
=1 =1 Ec. 8.4.1.1
119
3000
2500
2000
Fuerza (N)
1500
1000
500
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
-4
x 10
Desplazamiento (m)
Fig. 8.4.1 Curva del comportamiento real de la estructura del cubo de hormigón utilizado a modo de ejemplo (F i)
A continuación de muestran los resultados obtenidos para los pasos que han
entrado en daño para los desplazamientos fijados:
18000
16000
Comportamiento real
Comportamiento elástico
14000
12000
10000
Fuerza (N)
8000
6000
4000
2000
0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
-4
Desplazamiento (m) x 10
Fig. 8.4.1.2 Comportamiento real (Fi) y el teórico, si se siguiera siempre la teoría de la elasticidad (Fe).
120
Desplazamientos Fi Fe Daño
0,0000 0,0000 0,0000 0,0000
0,0001 1850,0000 1850,0000 0,0000
0,0001 2954,6763 3700,0000 0,2014
0,0002 2834,8921 5550,0000 0,4892
0,0002 2715,1079 7400,0000 0,6331
0,0003 2595,3238 9250,0000 0,7194
0,0003 2475,5396 11100,0000 0,7770
0,0004 2355,7554 12950,0000 0,8181
0,0004 2235,9712 14800,0000 0,8489
0,0005 2116,1870 16650,0000 0,8729
Tabla 8.4.1.3 Puntos calculados para representar las curvas y daño asociado a cada desplazamiento, calculado
usando la fórmula de daño de la ecuación 8.4.1.1. Esta tabla se corresponde al ejemplo del cubo de hormigón. Fi
representa la fuerza residual y Fe la fuerza elástica.
1
3000
2500
2000
Fuerza (N)
0.5 Daño global
1500
1000
500
0 0
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
-4
Desplazamiento (m) x 10
Fig. 8.4.1.4 Representación de la curva real del comportamiento del cubo de hormigón sometido a una fuerza de
compresión y la evolución del daño global.
121
Desplazamientos Daño PLCD
0,0001 0,0000
0,0001 0,2014
0,0002 0,4892
0,0002 0,6331
0,0003 0,7194
0,0003 0,7770
0,0004 0,8181
0,0004 0,8489
0,0005 0,8729
Tabla 8.4.2.1 Daño calculado con las nuevas rutinas del PLCD
8.4.3 Comparación
A fin de poder establecer si el conjunto formado por los dos programas, PLCD y
CFYFP, funcionaba correctamente y realizaba lo que se pretendía, se ha realizado el
análisis de una columna no dañada de tres maneras distintas: con las rutinas explicadas
en este trabajo, con el software comercial Strand7 y manualmente usando la tabla
presentada en el Anejo V.
Para realizar el análisis con las rutinas desarrolladas para este trabajo hay que
ejecutar dos programas independientes, primero el PLCD y una vez obtenidos los
archivos necesarios, el CFYFP. Para el cálculo se probaron distintas mallas para
observar los resultados obtenidos y para determinar la más adecuada, buscando un
balance entre un número de elementos excesivo que a pesar de permitir mucha precisión
requiere mucho tiempo y un número demasiado bajo que permita un análisis rápido pero
poco efectivo. Para determinar el tamaño más adecuado se realizó el siguiente
procedimiento: se empezó con una mañana muy sencilla y se fue refinando hasta que
entre una malla y su refinada no se observaron variaciones significativas de los
resultados obtenidos para el cálculo de frecuencias. A continuación se muestra el
proceso seguido (figura 8.5.2.1)
123
MALLA II MALLA III
MALLA I
Elementos: 125
Elementos: 3 Elementos: 96
Nodos: 175 Nodos: 216
Nodos: 16
MALLA v MALLA VI
MALLA IV
Elementos: 500 Elementos: 720
Elementos: 160 Nodos: 1029
Nodos: 275 Nodos: 756
Fig. 8.5.2.1 Proceso de refinado de mallas seguido para encontrar las frecuencias naturales de la estructura.
Como se puede ver en las figuras anteriores, se produce una evolución de los
valores (tabla 8.5.2.3) al incrementar el número de elementos hasta llegar a la quinta
malla de 500 elementos. Al comparar los resultados entre esta malla y la siguiente
utilizada (720 elementos) vemos que las frecuencias calculadas son prácticamente las
mismas. Llegado este punto se ha considerado que estos valores que aparecen en
cualquiera de las dos últimas mallas (figura 8.5.2.1) son correctos.
124
50
40
Frecuencia (Hz)
30
20
10
0
3 96 125 160 500 720
Número de elementos utilizados
Fig. 8.5.2.2 Evolución de la primera frecuencia calculaba con el número de elementos utilizados
Tabla 8.5.2.3 Tabla resumen de los resultados obtenidos para el cálculo de frecuencias utilizando las rutinas del
PLCD y del CFYFP.
500
450
400 1º frecuencia
350
2º frecuencia
300
250 3º frecuencia
200 4º frecuencia
150
5º frecuencia
100
50 6º frecuencia
0 7º frecuencia
3 96 125 160 500 720
Nº elementos utilizados
125
Para concluir los comentarios sobre estos resultados se muestran en la siguiente
figura (8.5.2.5) las diferencias entre el valor calculado para cada malla y el valor
“convergido”, para el caso de la primera frecuencia.
30
25
Diferencia entre valores
20
15
10
0
3 96 125 160 500 720
Nº elementos utilizados
Figura 8.5.2.5 Diferencias observadas entre el valor calculado para la primera frecuencia en cada malla respecto
al valor calculado en el último caso.
Como se puede observar en la tabla anterior (fig. 8.5.3.1) las frecuencias más
bajas presentan variaciones más pequeñas mientras que las más altas son mucho más
grandes. Si se compara con las calculadas con nuestras rutinas (fig. 8.5.2.8) se observan
126
que el número de elementos tiene menos importancia y que la respuesta es buena con un
malla más grande. Esto se puede observar claramente en las figuras 8.5.3.2 y 8.5.3.3,
que representan lo mismo que la 8.5.2.9 y 8.5.2.10 y, por tanto, son comparables.
500
450
400
350 1º Frecuencia
300 2º Frecuencia
250 3º Frecuencia
200 4º Frecuencia
150 5º Frecuencia
100 6º Frecuencia
50 7º Frecuencia
0
1 3 81 243 1944
Nº elementos utilizados
Fig. 8.5.3.2 Evolución de las frecuencias calculadas en función del número de elementos utilizados, se observa
que a partir de la malla de 81 elementos las respuestas finales casi no varían.
4,5
3,5
2,5
1,5
0,5
0
1 3 81 243 1944
Fig. 8.5.3.3 Diferencias entre el valor de la primera frecuencia de la malla más densa y la malla correspondiente.
127
8.5.4 Cálculo teórico
A diferencia de los otros dos métodos, el cálculo manual no depende del tipo de
malla utilizado. Para realizar los cálculos se ha utilizado la siguiente fórmula (ecuación
8.5.4.1):
= Ec. 8.5.4.1
= 3.7 · 10 = 2400
0.3
= 6.75 · 10
12
= 3.52 22.4
Las cuatro primeras frecuencias se han calculado de las tres formas distintas y
los resultados obtenidos son comparables. En las siguientes figuras se presentan de
forma gráfica éstos.
128
50
45
40
35
Frecuencia (Hz)
30
25 CFYFP
20 Manual
15
Strand7
10
5
0
1 201 401 601
Nº elementos utilizados
30
25 CFYFP
20 Manual
15
Strand7
10
5
0
1 201 401 601
Nº elementos utilizados
210
190
170
Frecuencia (Hz)
150
CFYFP
130
Manual
110 Strand7
90
70
1 201 401 601
Nº elementos utilizados
Fig. 8.5.5.3 Comparación de los diferentes métodos para el cálculo de la tercera frecuencia.
129
320
270
70
1 201 401 601
Nº elementos utilizados
130
9. Casos de estudio
131
El primer paso del análisis ha sido la creación del archivo general de entrada
.dts. Para ello se han tenido que definir la posición de los nodos y la conectividad de los
elementos. En este caso concreto todos los elementos definidos tenían el mismo
material. Se han tenido que definir las restricciones nodales e imponer los
desplazamientos en los nodos deseados. Por último, han sido definidos los incrementos
de desplazamientos a realizar durante todo el proceso. El primer análisis de la estructura
se ha realizado con el PLCD para estudiar del comportamiento no lineal de la columna y
para obtener los datos y ficheros necesarios para poder utilizar el CFYFP. A
continuación se ha creado el .dts necesario para el correcto funcionamiento del
programa CFYFP y obtener de esta manera las frecuencias y formas propias deseadas.
Se ha decidido calcular las diez primeras frecuencias naturales con sus correspondientes
formas propias para los resultados obtenidos del PLCD, además se han fijado el número
máximo de iteraciones y la tolerancia de los parámetros calculados. Los resultados del
análisis no lineal incluyen 13 pasos dañados, lo que nos da un total de 14 estados de
daño diferentes, los trece mencionados más un estado inicial en que la columna no ha
sufrido daño alguno todavía. Los pasos dañados extraídos se han concentrado en valores
de daño global inferiores al 60%, que ya es considerado un valor de daño global muy
elevado, por lo que sacar muchos valores muy elevados tampoco iba a aportar
información muy relevante en la práctica. Además como se verá más adelante los
resultados del último paso se corresponden a un estado en que la columna ya ha fallado,
aunque todavía se obtiene convergencia en el PLCD.
Daño global 1ª Frecuenc ia 2ª Frecuencia 3ª Frecuencia 4ª Frecuencia 5ª Frecuencia 6ª Frecuencia 7ª Frecuencia 8ª Frecuencia 9ª Frecuencia 10ª Frecuencia
0,0000 22,1277 22,1277 132,7121 132,7121 190,2611 327,8772 349,9544 349,9550 570,1968 636,9954
0,0035 22,1198 22,1244 132,6739 132,6968 190,2373 327,8508 349,8754 349,9213 570,1246 636,8872
0,0399 21,9463 22,0529 132,0405 132,4272 189,6290 327,1992 348,8104 349,3721 568,4625 635,4493
0,0914 21,6450 21,9231 131,1715 131,9977 188,4609 325,8841 347,2546 348,4317 565,7306 632,7286
0,1631 21,2247 21,7195 129,9746 131,3252 186,7931 323,7697 345,0235 346,9456 561,9645 628,9230
0,2326 20,7242 21,4644 128,5985 130,5131 184,7246 320,9950 342,4822 345,1218 557,2689 624,4943
0,2915 20,2204 21,2014 127,2630 129,7153 182,4002 318,1403 339,5729 343,2384 552,6337 619,8910
0,3648 19,7240 20,9261 125,9795 128,8573 180,1293 315,0822 336,8002 341,1522 547,7146 614,6108
0,4309 19,2042 20,6219 124,3625 127,7951 177,4598 311,6581 333,4326 338,6767 542,1852 608,9224
0,5137 18,6961 20,3130 122,7916 126,7206 174,8202 308,0871 330,0980 336,0804 536,5187 602,7784
0,5494 18,2205 20,0207 121,5172 125,7855 172,3233 304,6879 327,6436 333,9932 530,8380 598,0190
0,7767 16,3074 18,7687 115,0717 120,9103 161,7078 288,7655 316,8795 322,9524 505,1483 575,7098
0,9001 13,9481 17,1911 107,6433 114,3875 148,5579 266,4227 309,4298 309,7684 468,6465 554,6368
0,9384 0,0000 17,1911 107,6433 114,3875 148,5579 266,4227 309,4298 309,7684 468,6465 554,6368
Tabla 9.1.2a Resultados obtenidos para las diez primeras frecuencias naturales de la columna.
132
25
20
Frecuencia (Hz)
15
1ª Frecuenc ia
10
2ª Frecuencia
0
0,00 0,20 0,40 0,60 0,80 1,00
Daño global
130
125
Frecuencia (Hz)
120
115 3ª Frecuencia
4ª Frecuencia
110
105
100
0,00 0,20 0,40 0,60 0,80 1,00
Daño global
190
180
Frecuencia (Hz)
170
5ª Frecuencia
160
150
140
0,00 0,20 0,40 0,60 0,80 1,00
Daño global
133
370
350
330
Frecuencia (Hz)
310 6ª Frecuencia
7ª Frecuencia
290
8ª Frecuencia
270
250
0,00 0,20 0,40 0,60 0,80 1,00
Daño global
Fig. 9.1.2e Evolución de la sexta, séptima y octava frecuencia a medida que se va dañando la estructura.
650
600
Frecuencia (Hz)
550
9ª Frecuencia
500
10ª Frecuencia
450
400
0,00 0,20 0,40 0,60 0,80 1,00
Daño global
Fig. 9.1.2f Representación de la evolución a medida que se dañan de la novena y décima frecuencia.
En la tabla 9.1.2 y las figuras 9.1.2(b-f) se observa una tendencia clara en todas
las frecuencias calculadas, el valor va disminuyendo a medida que aumenta el daño,
pero no de forma lineal ni igual en todos ellos. Este hecho se puede ver claramente en
aquellas frecuencias que inicialmente tienen un valor idéntico, como pueden ser la
primera y la segunda o la tercera y la cuarta, como a medida que se daña la estructura
evolucionan de manera distinta hasta llegar a valores claramente diferenciados. De todas
maneras este aspecto no parece ser una norma general, ya que en el caso de la séptima y
la octava frecuencia mantienen valores muy similares para los distintos pasos dañados
calculados. La explicación está relacionada con el lugar en el que se produce el daño en
134
la estructura (figura 9.1.3). Para acabarlo de clarificar, esta última figura se
complementa con la siguiente (figura 9.1.4) que muestra las formas propias de la
primera y segunda frecuencia calculadas vistas desde el mismo punto de vista que la
representación del daño. Como se puede observar los dos son un mismo movimiento
pero cada uno en una dirección perpendicular al otro, esto provoca que cuando se daña
la estructura de forma no homogénea, se vean afectadas de manera diferente. Al ser la
primera forma en la dirección que daña la estructura se ve mucho más afectada que la
segunda que el movimiento es prácticamente perpendicular a la zona con mayor daño.
En el caso en el que la zona dañada afecta en menor medida a las formas deformadas,
las frecuencias se ven menos afectadas. En el caso de la tercera y cuarta frecuencia, que
son un mismo movimiento en direcciones perpendiculares, como la primera y la
segunda, funcionan de manera más similar entre ellas a medida que se dañan debido a la
forma propia que tienen, que se ve menos afectada por el daño producido en este caso
en la columna. Un poco más adelante se discutirán los cambios sufridos por las formas
propias durante el proceso de daño.
Fig. 9.1.4 Columna original y forma deformada para la primera (izquierda) y segunda frecuencia (derecha)
135
Fig. 9.1.3 Localización y evolución del daño local en la columna.
136
Daño global de la estructura
-0,10 1ª Frecuenc ia
2ª Frecuencia
-0,20
3ª Frecuencia
-0,30
4ª Frecuencia
Diferencia realtiva
-0,40 5ª Frecuencia
6ª Frecuencia
-0,50
7ª Frecuencia
-0,60 8ª Frecuencia
9ª Frecuencia
-0,70
10ª Frecuencia
-0,80
-0,90
-1,00
Fig. 9.1.5 Evolución de la diferencia relativa entre frecuencias a medida que la estructura se daña.
2ª Frecuencia
-0,05 3ª Frecuencia
4ª Frecuencia
5ª Frecuencia
Diferencia realtiva
-0,10
6ª Frecuencia
7ª Frecuencia
8ª Frecuencia
-0,15
9ª Frecuencia
10ª Frecuencia
-0,20
-0,25
Fig. 9.1.6 Detalle de la figura 9.1.5, no se ha representado la primera frecuencia
137
mínimos de ese nivel, tal y como se ha visto gráficamente en la tabla 9.1.6 en la que las
diferentes frecuencias estaban agrupadas.
Tabla 9.1.7 La tabla anterior contiene en la primera columna el daño global, en la segunda el promedio de las
diferencias relativas de todas las frecuencias respecto a la no dañada para ese nivel de daño. La tercera es igual
que la segunda pero sin tener en cuenta la primera frecuencia. La cuarta y la quinta son, respectivamente, la
diferencia porcentual máxima y mínima para ese nivel de daño.
Que las diferencias relativas entre una frecuencia dañada y la frecuencia inicial
sean parecidas para todas las frecuencias, permite poder establecer una relación entre la
frecuencia en un instante y el daño global de la estructura. Para obtener el daño global
de la estructura en base a las diferencias relativas entre frecuencias, se propone lo
siguiente: se tiene que realizar el promedio de: · para cada frecuencia dañada
para un mismo nivel de daño. En la figura 9.1.8b se puede ver el área cubierta con esta
aproximación. En la tabla 9.1.8a se pueden ver los resultados obtenidos con este método
y el error producido. Se puede observar que los errores son pequeños hasta que se llega
al punto con daño 0.5494, a partir de este punto se van alejando y deja de poder ser útil.
El cálculo se ha hecho con 0.12 que es valor intermedio pero el área rayada de la figura
9.1.8b es la que comprende entre 0.08 y 0.16.
138
Daño global 1ª Frec. 2ª Frec. 3ª Frec. 4ª Frec. 5ª Frec. 6ª Frec. 7ª Frec. 8ª Frec. 9ª Frec. 10ª Frec. Calculado Error absoluto
0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000
0,0035 0,0030 0,0012 0,0024 0,0010 0,0010 0,0007 0,0019 0,0008 0,0011 0,0014 0,0014 0,0020
0,0399 0,0683 0,0282 0,0422 0,0179 0,0277 0,0172 0,0272 0,0139 0,0253 0,0202 0,0288 0,0111
0,0914 0,1817 0,0770 0,0967 0,0449 0,0788 0,0507 0,0643 0,0363 0,0653 0,0558 0,0752 0,0162
0,1631 0,3401 0,1537 0,1719 0,0871 0,1519 0,1044 0,1174 0,0717 0,1203 0,1056 0,1424 0,0207
0,2326 0,5286 0,2498 0,2583 0,1381 0,2425 0,1749 0,1779 0,1151 0,1889 0,1635 0,2238 0,0088
0,2915 0,7183 0,3488 0,3422 0,1882 0,3443 0,2475 0,2472 0,1599 0,2567 0,2238 0,3077 -0,0162
0,3648 0,9052 0,4525 0,4228 0,2421 0,4438 0,3252 0,3132 0,2096 0,3286 0,2928 0,3936 -0,0287
0,4309 1,1010 0,5671 0,5243 0,3088 0,5607 0,4122 0,3934 0,2686 0,4094 0,3673 0,4913 -0,0603
0,5137 1,2923 0,6834 0,6229 0,3762 0,6763 0,5030 0,4728 0,3304 0,4922 0,4476 0,5897 -0,0760
0,5494 1,4714 0,7935 0,7030 0,4349 0,7857 0,5894 0,5313 0,3801 0,5752 0,5099 0,6774 -0,1280
0,7767 2,1919 1,2650 1,1077 0,7411 1,2506 0,9941 0,7876 0,6430 0,9507 0,8018 1,0733 -0,2967
0,9001 3,0805 1,8591 1,5741 1,1507 1,8266 1,5619 0,9650 0,9569 1,4841 1,0774 1,5536 -0,6535
0,9384 8,3333 1,8591 1,5741 1,1507 1,8266 1,5619 0,9650 0,9569 1,4841 1,0774 2,0789 -1,1405
Tabla 9.1.8a Daño global calculado usando las frecuencias y el error respecto al verdadero.
Daño global
0,00 0,20 0,40 0,60 0,80 1,00
0,00
2ª Frecuencia
-0,05 3ª Frecuencia
4ª Frecuencia
Frecuencia (Hz)
5ª Frecuencia
-0,10
6ª Frecuencia
7ª Frecuencia
8ª Frecuencia
-0,15
9ª Frecuencia
10ª Frecuencia
-0,20
-0,25
Fig. 9.1.8b La zona rayada representa los valores cubiertos con la aproximación explicada. La recta superior tiene
valor de 0.08 y la inferior 0.16. Está aproximación es útil hasta valores de daño global cercanos al 60% pero luego
deja de resultar interesante usarla.
139
1
20
Daño global
0.5
10
0
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4
Desplazamiento horizontal (m)
580
560
540
Frecuencia (Hz)
520
500
480
460
0 0.2 0.4 0.6 0.8 1 1.2 1.4
Desplazamiento horizontal (m)
Fig. 9.1.10 Evolución del valor de una frecuencia al aumentar el desplazamiento horizontal de la columna. En este
caso se ha representado la novena frecuencia pero todas presentan el mismo tipo de gráfica, a excepción de la
primera porque al final se hace cero.
140
valores de daño muy elevados el valor de las frecuencias tiende a estabilizarse y no
continúan descendiendo hasta cero.
1
585
570 0.8
555
540 0.6
Frecuencia (Hz)
Daño global
525
510 0.4
495
0.2
480
465
0
450
0 0.2 0.4 0.6 0.8 1 1.2 1.4
141
en las figuras que siguen a continuación, en las que la columna verde representa la
columna original sin daño ni movimiento alguno.
Fig. 9.1.13 Vemos que tiene un comportamiento similar a la primera frecuencia, se produce un giro, hasta se
perpendicular al daño en este caso, y disminuye la amplitud del movimiento de forma ligera.
142
Localización del daño Estructura no dañada Daño
Fig. 9.1.14 Evolución de la quinta forma propia, se trata de un movimiento de torsión, se puede observar que es
cada vez menor.
Finalmente, para
estado de daño muy
elevados, la forma
final.
Fig. 9.1.15 Evolución de la sexta forma propia de la columna. A media que el daño aumenta deja de ser un
movimiento ascendente y descendente y empieza a ondular, la ondulación aumenta con el daño.
143
9.2 Columna empotrada con armadura
Para poder apreciar el efecto que tiene la inclusión de una armadura en una
estructura para el tipo de problema que nos ocupa, se ha decidido armar la columna de
manera muy sencilla, manteniendo el resto de características inalterables, para realizar
la comparación. En la figura 9.2.1 se puede observar la armadura utilizada en la
columna.
1,5
1,1
Sección longitudinal
300
Sección
30
Ø1
,9
0,4
30
30 1,9
Fig. 9.2.1 Secciones de la columna descrita con la armadura, las dimensiones están en centímetros
Se ha utilizado la misma malla de 500 elementos que en el caso anterior para que
la comparación sea realmente entre los columnas los más parecidas posibles, ya que en
los elementos finitos la elección de la malla es un aspecto importante. Para realizar el
144
análisis se ha seguido el mismo procedimiento que el utilizado para la columna sin
armadura pero se ha tenido que modificar el .dts original que recibe el PLCD, se ha
tenido que definir el material de los elementos de la armadura y asignarlo a los
elementos pertinentes. El .dts del CFYFP sigue siendo el mismo por lo que se han
calculado las primeras diez frecuencias naturales con sus correspondientes formas. Los
resultados obtenidos para las frecuencias en el caso de la columna armada han sido los
siguientes:
Daño global 1ª Frecuenc ia2ª Frecuencia3ª Frecuencia4ª Frecuencia5ª Frecuencia6ª Frecuencia7ª Frecuencia8ª Frecuencia9ª Frecuencia10ª Frecuencia
0,0000 22,5886 22,5886 135,2288 135,2316 183,7287 328,9808 355,4639 355,5237 550,6112 644,4106
0,0115 22,5789 22,5817 135,1779 135,1972 183,6776 328,9609 355,3601 355,4249 550,4063 644,2495
0,0452 22,3863 22,4936 134,5079 134,8908 183,0794 328,2487 354,2888 354,8109 548,7629 642,9331
0,0993 22,0465 22,3308 133,5377 134,3860 181,9349 326,7112 352,5015 353,7034 546,0494 639,7094
0,1569 21,6195 22,1092 132,4016 133,7087 180,3674 324,6035 350,1837 352,1224 542,6271 635,8720
0,2162 21,1125 21,8360 131,0166 132,8610 178,3912 321,8212 347,2607 350,1267 538,4978 631,3216
0,2619 20,6299 21,5766 129,8454 132,1373 176,3649 319,1505 344,5630 348,3424 534,5089 626,8393
0,3143 20,1359 21,2990 128,4649 131,2495 174,1225 316,2142 341,2393 346,1043 530,3875 621,4350
0,3547 19,6699 21,0402 127,2606 130,4384 171,9846 313,4437 338,0526 344,0250 526,4291 616,6420
0,3994 19,2076 20,7630 125,8166 129,4634 169,6184 310,4482 334,7244 341,6646 522,0190 610,9808
0,4414 18,7553 20,4855 124,3457 128,4497 167,2437 307,3292 331,3364 339,2399 517,5428 605,3393
0,4989 17,9423 19,9925 121,9625 126,7789 162,8341 301,7173 325,2284 335,0994 509,4538 596,1590
0,5423 17,2042 19,5366 119,1725 124,8131 158,5664 296,1836 319,5395 331,1679 501,8108 584,9376
0,6009 16,2535 18,9304 115,9555 122,3684 152,7544 288,5914 311,4837 325,2168 491,4561 571,6378
0,6421 15,4122 18,3940 112,1140 119,5140 147,2687 281,2301 304,1480 319,4221 480,6082 556,0745
0,7024 14,2408 17,5298 107,2112 114,7874 139,6742 269,7141 292,8969 310,3728 465,1720 536,7700
Tabla 9.2.2a Tabla de los resultados obtenidos para las diez primeras frecuencias naturales y los distintos estados de daño.
25
20
Frecuencia (Hz)
15
1ª Frecuenc ia
10
2ª Frecuencia
0
0,00 0,20 0,40 0,60 0,80
Daño global de la columna armada
Fig.9.2.2b Evolución de las dos primeras frecuencias naturales para la columna con armadura.
145
190
180
170
Fig. 9.2.2c Evolución al dañarse de la tercera, cuarta y quinta frecuencias naturales de la columna armada.
370
350
330
Frecuencia (Hz)
310 6ª Frecuencia
7ª Frecuencia
290
8ª Frecuencia
270
250
0,00 0,20 0,40 0,60 0,80
Daño global de la columna armada
Fig. 9.2.2d Evolución de la sexta, séptima y octava frecuencias de la columna armada al dañarse
700
650
Frecuencia (Hz)
600
9ª Frecuencia
550
10ª Frecuencia
500
450
0,00 0,20 0,40 0,60 0,80
Daño global de la columna armada
146
En las figuras 9.2(a-e) se observa un descenso del valor de todas las frecuencias
naturales a medida que la columna se va dañando, al igual que en la columna sin
armadura se puede observar que el descenso no es lineal ni igual para todas las
frecuencias. De la misma manera que la observada en el ejemplo anterior, frecuencias
que inicialmente presentan un mismo valor evolucionan de manera distinta debido a la
localización del daño, esto puede ser observado si se comparan la primera y la segunda,
la tercera y la cuarta y la sexta y la séptima frecuencias. La evolución y localización del
daño (figura 9.2.3) en este caso es un poco diferente de la observada en la primera
columna estudiada.
147
El daño empieza en la parte inferior de la columna y se va subiendo, al principio
la parte con armadura tiene mayor daño pero para estados más avanzados la parte sin
armadura registra valores más altos. Si se compara con la columna sin armadura se
puede observar que el daño afecta a más elementos en este caso.
Esta localización del daño hace que se observen los mismos efectos que en el
primer ejemplo, la primera frecuencia se ve más afectada que la segunda por el daño y,
por eso, el descenso es mayor en el primer caso que en el segundo. Este efecto también
se observa aunque en menor medida en otros casos como: la tercera y la cuarta
frecuencia y la sexta y la séptima. Todo depende de la forma de vibración y la
localización del daño. Se debe a que la una de ellas es en la dirección del mayor daño y
la otra es totalmente perpendicular, aunque las dos se ven afectadas una en mayor
medida, debido a forma propia de la frecuencia. Las formas propias obtenidas son las
siguientes:
Fig 9.2.4 Forma propia de la primera frecuencia, la segunda es igual pero en dirección perpendicular a esta.
Fig. 9.2.5 Animación de la tercera forma propias, la cuarta es igual pero perpendicular a ésta.
148
Fig. 9.2.6 Animación de la forma propia asociada a la quinta frecuencia natural.
149
Fig. 9.2.9 Animación de la novena forma propia
Las figuras de las formas propias obtenidas para la columna con armadura no
dañada son prácticamente las mismas que las obtenidas para la columna no armada. Se
puede apreciar que el daño no afectará de igual manera a una forma muy simple como
puede ser la primera frecuencia que a otra mucho más compleja como es la última
calculada. Como se puede apreciar en la figura 9.2.2 en términos de valor absoluto, el
descenso del valor de la frecuencia es mayor cuanto mayor es la frecuencia, pero es más
interesante observar estos descensos en términos relativos, al igual que se hizo con la
primera columna estudiada.
150
Daño global de la estructura
0,00 0,10 0,20 0,30 0,40 0,50 0,60 0,70 0,80
0,00
-0,05
2ª Frecuencia
Diferencias realativas respecto al valor no dañado
3ª Frecuencia
-0,10
4ª Frecuencia
5ª Frecuencia
-0,15
6ª Frecuencia
7ª Frecuencia
-0,20
8ª Frecuencia
9ª Frecuencia
-0,25
10ª Frecuencia
1ª Frecuenc ia
-0,30
-0,35
-0,40
Fig. 9.2.11 Diferencias relativas en tanto por ciento entre las frecuencias dañadas y la inicial.
-0,05
Diferencias realativas respecto al valor no dañado
2ª Frecuencia
3ª Frecuencia
-0,10 4ª Frecuencia
5ª Frecuencia
6ª Frecuencia
-0,15 7ª Frecuencia
8ª Frecuencia
9ª Frecuencia
-0,20 10ª Frecuencia
-0,25
-0,30
Fig. 9.2.12 Misma gráfica que la 9.2.11 pero sin tener en cuenta la primera frecuencia, ya que es sensiblemente
diferente al resto.
Las figuras 9.2.11 y 9.2.12 representan los mismos datos, pero en la segunda no
se incluye la información e la primera frecuencia, ya que se ve muy afectada por la
localización del daño en este caso y distorsiona las observaciones. En la figura 9.2.12 se
puede apreciar que todas la frecuencias presentan comportamientos muy similares entre
ellos, similares a su vez en la forma a los observados para la columna sin armadura. No
151
sólo eso, sino que las frecuencias que se alejaban más del primer valor siguen siendo las
mismas que eran en el caso de la primera columna. Lo que sí es diferente se compara
con la figura 9.1.6 es el valor de las diferencias. En el caso de la columna sin armadura
para un daño global de 0.60 se tenía unas diferencias que oscilaban entre un 5-12%
respecto a la frecuencia original no dañada y, en este caso, tenemos que las diferencias
están aproximadamente entre un 8 y un 17%.
En el caso de la columna armada vemos que para los estados de daño estudiados
la primera frecuencia no distorsiona tanto los resultados como ocurría en el caso de la
primera columna no armada. Pero en este caso además de tener que los valores
promedio son sensiblemente más altos que en la columna no armada, para valores
aproximados de un 50% de daño global tenemos un 8.5% de promedio frente a un 5%
que teníamos, las desviaciones respecto a éste también son mayores, ±3% frente a un
±2%. Como aparecen bastante agrupadas se puede intentar establecer una correlación
entre estas diferencias relativas y el valor de daño global, pero está vez se intentará en
vez de usar una correlación lineal una cuadrática, para poder comparar el error
producido con la forma utilizada anteriormente.
152
Daño global Diferencia promedio Daño calculado Error absoluto
0,0000 0,0000 0,0000 0,0000
0,0115 -0,0003 0,0000 0,0115
0,0452 -0,0032 0,0334 0,0118
0,0993 -0,0084 0,1180 -0,0187
0,1569 -0,0152 0,1803 -0,0234
0,2162 -0,0237 0,2376 -0,0214
0,2619 -0,0316 0,2816 -0,0197
0,3143 -0,0407 0,3251 -0,0109
0,3547 -0,0492 0,3611 -0,0064
0,3994 -0,0586 0,3977 0,0016
0,4414 -0,0682 0,4319 0,0095
0,4989 -0,0849 0,4861 0,0128
0,5423 -0,1020 0,5360 0,0064
0,6009 -0,1245 0,5955 0,0054
0,6421 -0,1474 0,6507 -0,0086
0,7024 -0,1808 0,7240 -0,0216
Tabla 9.2.14 Comparación entre el daño global de la columna dañada calculado usando las rutinas y usando las
diferencias promedio entre las frecuencias dañadas y las originales (sin tener en cuenta la primera).
153
0,25
0,20
Error en valor absoluto
0,15
F. Lineal
0,10 F. Cuadrática
0,05
0,00
0,00 0,10 0,20 0,30 0,40 0,50 0,60 0,70
Daño global de la estructura
Fig. 9.2.15 Comparación entre los errores (en valor absoluto) cometidos al utilizar una aproximación lineal y
cuadrática para calcular el daño global de la estructura a partir de las frecuencias obtenidas.
Si se comparan los niveles de daño sufridos por las dos columnas para niveles de
desplazamientos impuestos de igual magnitud (figura 9.2.16) se puede observar que la
armada tiene niveles de daño claramente inferiores a la primera, tal y como cabía
esperar.
0.9
0.8
0.7
0.6
Daño global
0.5
0.4
0.3
0.2
0.1
0
0 0.2 0.4 0.6 0.8 1 1.2
Desplazamiento horizontal (m)
Fig. 9.2.16 Comparación de los niveles de daño global entre la columna armada (azul) y la columna sin armadura
(rojo), al imponer unos desplazamientos de igual magnitud.
154
En lo que no se observa diferencias es en el comportamiento de las frecuencias a
medida que aumentan los desplazamientos impuestos en la columna. La forma obtenida
se puede apreciar en la figura 9.2.17 que tiene la misma forma que la vista en la figura
9.1.10 para la columna sin armadura.
185
180
175
170
Frecuencia (Hz)
165
160
155
150
145
140
135
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8
Desplazamiento horizontal (m)
Fig. 9.2.17 Evolución de la quinta frecuencia a medida que aumenta el desplazamiento impuesto, es el mismo
comportamiento observado en el resto de frecuencias.
155
Localización del
daño en la columna
Daño en la cara
que no se ve
Fig. 9.2.19 Forma propia de la décima frecuencia no dañada (izquierda) y la correspondiente a un daño como el
mostrado en la figura (derecha).
El tercer caso estudiado es una viga apoyada en sus extremos, uno de ellos está
completamente fijo mientras que el otro permite desplazamientos en el sentido
longitudinal de la viga. Para dañar la viga se ha impuesto un movimiento vertical
descendente en los nodos superiores centrales de la viga. Debido al comportamiento del
hormigón cuando se ve sometido a este tipo de esfuerzos los desplazamientos impuestos
se han tenido que ir haciendo cada vez más pequeños para obtener la mayor parte de la
156
curva de comportamiento de la viga y de daño global, cosa muy difícil por la rotura
frágil que sufre el material, ésta sucede cuando el hormigón alcanza su capacidad de
deformación última, debido a eso los valores para el daño global alcanzado son mucho
menores que los observados en otros ejemplos. La discretización elegida en este caso es
de 756 nodos y 500 elementos, que es más densa que las anteriores utilizadas ya que la
viga es tres veces más corta. Para evitar parte de los problemas que se tenían al intentar
utilizar este ejemplo, se han tenido que modificar los materiales utilizados en dos tipos
de elementos, en los que están situados en los apoyos de la pieza y en los que se
imponen los desplazamientos, todo ello debido a las tensiones que se generan en esas
zonas que no permiten que el análisis no lineal avance. Todo esto se puede observar en
la figura 9.3.1
Fig. 9.3.1 Vista de la malla de la viga usada para el cálculo, en color azul aparecen los elementos que no se
dañarán para poder llevar a cabo el análisis, que corresponden a los puntos de apoyo y al lugar en el que
imponemos el desplazamiento. La malla consiste en 500 elementos repartidos en 25 hexahedros en cada uno de
los veinte niveles que hay a lo largo de su longitud.
157
que el nivel de daño es bajo porque un pequeño desplazamiento vertical implica ya la
rotura de la estructura.
700
600
0.0008 0.001
-500
Reacción (N)
Daño global
0.05
DETALLE DE LA
CURVA DE DAÑO
0 0.1
0.8 0.9 1
0.05
0 0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Desplazamiento vertical (m) -3
x 10
Fig. 9.3.2 Curvas del comportamiento de la viga y del daño global en relación con los desplazamientos, se incluye
el detalle de las áreas de las curvas en las que el análisis deja de converger.
En los detalles de la figura 9.3.2 se puede observar tanto que el daño tiende a
dispararse por pequeño que sea el incremento, ya que apunta casi en vertical, como que
el comportamiento tiende a bajar casi verticalmente. Debido a estos dos hechos
continuar con el análisis de igual manera resulta imposible, para hacerlo se tendría que
variar la estrategia utilizada.
La evolución de las frecuencias para los bajos niveles de daño que se han podido
estudiar, han sido los siguientes:
158
Daño 1ª Frec. 2ª Frec. 3ª Frec. 4ª Frec. 5ª Frec. 6ª Frec. 7ª Frec. 8ª Frec. 9ª Frec. 10ª Frec.
0,0000 333,2476 340,1944 633,5436 661,8032 796,8049 1144,0953 1504,3019 1669,7915 1714,2512 2097,1803
0,0130 333,0344 338,3361 633,3564 660,5656 796,2905 1143,9026 1501,7272 1660,3582 1706,9193 2090,2653
0,0214 333,0218 338,0789 633,2485 660,4982 796,1465 1143,8377 1501,5409 1658,5842 1705,7973 2089,0113
0,0333 332,9301 337,1285 632,8603 659,9918 795,6223 1143,6144 1500,3038 1653,5201 1701,7619 2084,8370
0,0401 332,9164 337,1810 632,6372 659,9207 795,3927 1143,5223 1499,9968 1654,9227 1701,9644 2084,6492
0,0502 332,8556 336,3463 632,5272 659,5832 795,1917 1143,4521 1499,3109 1649,4815 1698,4753 2081,5362
Tabla 9.3.3a Evolución de las diez primeras frecuencias naturales de la viga biapoyada estudiada.
2000
1ª Frec.
2ª Frec.
1500
3ª Frec.
4ª Frec.
Frecuencia (Hz)
5ª Frec.
1000
6ª Frec.
7ª Frec.
500 8ª Frec.
9ª Frec.
10ª Frec.
0
0,00 0,01 0,02 0,03 0,04 0,05 0,06
Daño global
Fig. 9.3.3b Evolución gráfica de las frecuencias calculadas.
Daño 1ª Frec. 2ª Frec. 3ª Frec. 4ª Frec. 5ª Frec. 6ª Frec. 7ª Frec. 8ª Frec. 9ª Frec. 10ª Frec.
0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000 0,0000
0,0130 -0,0640 -0,5463 -0,0295 -0,1870 -0,0646 -0,0169 -0,1712 -0,5649 -0,4277 -0,3297
0,0214 -0,0678 -0,6219 -0,0466 -0,1972 -0,0826 -0,0225 -0,1835 -0,6712 -0,4932 -0,3895
0,0333 -0,0953 -0,9012 -0,1078 -0,2737 -0,1484 -0,0420 -0,2658 -0,9745 -0,7286 -0,5886
0,0401 -0,0994 -0,8858 -0,1431 -0,2844 -0,1772 -0,0501 -0,2862 -0,8905 -0,7167 -0,5975
0,0502 -0,1176 -1,1311 -0,1604 -0,3354 -0,2025 -0,0562 -0,3318 -1,2163 -0,9203 -0,7460
Tabla 9.3.4 Diferencias relativas en % entre una frecuencia dañada y la respectiva sin daño alguno.
159
y el resto otro. Con niveles de daño tan pequeños tampoco se pueden establecer
conclusiones y harían falta análisis más extensos que nos permitan establecer alguna
correlación clara como se ha hecho en los otros casos. Ya que aunque parece que las
formas que tienen movimientos en la zona de localización del daño (parte inferior
central de la viga) aparecen ser las más afectadas en algunos casos, no lo son en todos.
Además al ser tan pequeños las diferencias entre las frecuencias calculadas y las
originales carece de sentido intentar establecer una relación entre éstas y el daño ya que
cualquier correlación obtendrá buenos resultados para valores tan pequeños.
-0,2000
1ª Frec.
-0,4000
2ª Frec.
3ª Frec.
4ª Frec.
-0,6000
5ª Frec.
6ª Frec.
7ª Frec.
-0,8000
8ª Frec.
9ª Frec.
-1,2000
-1,4000
Fig. 9.3.5 Representación gráfica de las diferencias relativas observadas.
160
El CFYFP ha calculado la variación de frecuencias y de formas propias para los
valores proporcionados de manera correcta. Si se estudian las formas propias (figuras
9.3.6 a 9.3.15) y como varían se pueden observar dos cosas: para los niveles de daño
estudiados, no se producen cambios apreciables en las formas y se intuye que las
frecuencias más afectadas son las que sus formas sufren una mayor influencia de la zona
dañada. Aunque para los niveles de daño global alcanzados no se puede establecer
conclusiones.
Fig. 9.3.6 Primera forma propia de la viga, en verde se ve la viga inmóvil y en granate el movimiento.
Fig. 9.3.7 Movimiento de la segunda forma propia, vista de la viga de forma lateral.
Fig. 9.3.8 Forma propia asociada a la tercera frecuencia, vista lateral de la viga.
Fig. 9.3.9 Cuarta forma propia, vista en sección de la viga, se trata de una torsión.
161
Fig. 9.3.10 Movimiento de la forma propia asociada a la quinta frecuencia, vista en planta de la viga.
Fig. 9.3.11 Sexta forma propia de la viga biapoyada vista de forma lateral.
Fig.9.3.13 Segunda forma torsiva que se corresponde con la octava frecuencia de la viga.
162
Fig. 9.3.14 Movimiento de la forma asociada a la novena frecuencia, con la viga vista de forma lateral, como se
puede ver coincide con la séptima frecuencia pero en dirección perpendicular.
FIg. 9.3.15 Forma propia asociada a la décima frecuencia, viga vista en planta.
163
164
10. Analisis teorico de frecuencias
A fin de poder tener unos valores de referencia para poder comprobar las
frecuencias y formas propias obtenidas en los casos de estudio, a continuación se
realizará el análisis de forma manual utilizando el método energético de Rayleigh para
el cálculo de la frecuencia no amortiguada de sistemas continuos.
1 3EI
V max K (u max )2 ; K Ec. 10.1.1
2 L3
Ec. 10.1.2
165
Donde m es la masa, L es la longitud de la columna, z es la dimensión del eje
longitudinal de la columna, es el valor propio y u es el desplazamiento de un punto de
la columna.
Ec. 10.1.3
(1 ) Ec. 10.1.4
166
Daño global Ed Frecuencia
0,0000 37000000000 21,4522
0,0035 36871151148 21,4148
0,0399 35524681569 21,0201
0,0914 33618734062 20,4485
0,1631 30965174326 19,6249
0,2326 28394067662 18,7925
0,2915 26213511578 18,0565
0,3648 23500874649 17,0967
0,4309 21055672025 16,1828
0,5137 17993440944 14,9599
0,5494 16672346705 14,4002
0,7767 8263641897 10,1381
0,9001 3696529108 6,7806
0,9384 2277705822 5,3225
Tabla 10.1.1 Cálculo aproximado de la frecuencia fundamental de la columna, para distintos estados de daño.
10.1.1 Comparación
Tabla 10.1.1.1 Comparación de los resultados obtenidos usando el método energético de Rayleigh y las rutinas
implementadas.
Como se puede observar en la tabla 10.1.1.1 los valores obtenidos son más
similares para valores de daño inferiores y dejan de ser del mismo orden de magnitud
167
para casos donde el daño global es muy elevado. Como ya se ha comentado que la
utilidad del cálculo manual es confirmar los resultados obtenidos utilizando los nuevos
programas, se puede concluir que en este caso los resultados obtenidos han sido
correctos, teniendo en cuenta la aproximación realizada para calcular los valores
dañados. A continuación se muestra la diferencia absoluta y relativa entre las
frecuencias calculadas (tabla 10.1.1.2).
Tabla 10.1.2 Diferencias entre la primera frecuencia calculada usando el método energético de Rayleigh y las
rutinas implementadas.
Fig. 10.1.1.3 Representación gráfica de las diferencias relativas y absolutas entre frecuencias calculadas de
manera manual y con elementos finitos.
168
Como se puede observar en la figura 10.1.1.3 el error relativo se dispara cuando
el valor del daño global supera el 50%, hecho esperado teniendo en cuenta las
suposiciones realizadas para calcular las frecuencias usando el método de Rayleigh.
169
10.2.1 Comparación
Si comparamos los resultados con los obtenidos con las rutinas (tabla 10.2.1.1)
se puede observar una serie de cosas: el cálculo teórico es inferior al de las rutinas en
todos los casos, al contrario de lo que sucedía cuando no había armadura (tabla
10.1.1.1). La diferencia entre el valor obtenido usando el método energético de Rayleigh
y el computado son a medida que se dañan más diferentes. Esto último ya había sido
observado con anterioridad (tabla 10.1.1.1), pero en este caso la diferencia es bastante
más grande desde el primer momento (6.58% en comparación con 3.05% sin armadura)
y sigue creciendo, aunque para valores últimos las diferencias entre el valor teórico y el
calculado en el caso sin armadura y el que la tiene son bastante similares.
170
Daño global Rayleigh Rutinas Dif. Abs Dif. Rel. (%)
0,4414 18,7553 15,8406 -2,9147 -18,40
0,4989 17,9423 15,0041 -2,9382 -19,58
0,5423 17,2042 14,3387 -2,8655 -19,98
0,6009 16,2535 13,3899 -2,8636 -21,39
0,6421 15,4122 12,6794 -2,7328 -21,55
0,7024 14,2408 11,5623 -2,6785 -23,17
Tabla 10.2.1.2b Continuación de la tabla 10.2.1a.
-5
-10
-15
Dif. Abs
-20 Dif. Rel. (%)
-25
-30
Fig. 10.2.3 Evolución gráfica de la diferencia de resultados para la primera frecuencia entre métodos utilizados.
= Ec. 10.3.1
171
Donde E es el módulo de Young del material, I es la inercia de la sección
transversal. Por otro lado la energía cinética máxima para el caso de una viga apoyada
de longitud igual a la unidad puede expresarse como:
( )) Ec. 10.3.2
( )
Ec. 10.3.3
Esta ecuación (10.3.3), al igual que lo que sucedía con la de la columna (ec.
10.1.3) nos permite calcular la primera frecuencia natural para estructuras con un
comportamiento lineal pero no los casos dañados. Como se ha visto en el ejemplo
anterior, se puede aproximar el comportamiento dañado de la columna haciendo la
siguiente suposición: se supondrá que la pérdida de rigidez de la estructura se deberá al
cambio del módulo de elasticidad del hormigón y que la geometría de la estructura no
cambiará al dañarse. De esta manera, el cambio en del módulo de Young al dañarse se
expresará de la manera mostrada en la ecuación 10.1.4.
172
10.3.1 Comparación
Si se comparan los resultados obtenidos con las rutinas con los calculados de
forma manual para los pocos estados de daño que se han podido obtener con los
programas (tabla 10.3.1.1), se observa que existe una diferencia inicial importante, o por
lo menos, más grande que la observada en los anteriores ejemplos. Esto puede deberse
al hecho de que en el modelo utilizado hay una serie de elementos que no se dañan
como se ha visto anteriormente, porque al realizarse el análisis con todos los elementos
de hormigón el valor obtenido para la primera frecuencia no dañada fue de 341 Hz,
valor muy parecido al obtenido usando el método energético. Pero debido a que el daño
no se localizaba en el lugar adecuado se ha tenido que utilizar la primera opción para el
análisis. También puede verse que mientras que el cálculo manual va disminuyendo el
valor de la frecuencia, en las rutinas lo hace de manera casi inapreciable.
173
174
11. Conclusiones
175
trabajo. Se ha observado que las formas propias que tenían un
movimiento importante en la zona dañada presentaban dos efectos a lo
largo del proceso de daño: el descenso relativo de la frecuencia asociada
era más importante que en otros casos y se producían variaciones
importantes en la forma de vibración en la zona dañada.
Se ha comprobado de que este método, que permite determinar el valor
de daño global a partir de las variaciones de las frecuencias naturales,
permite apreciar un importante cambio en las frecuencias naturales para
valores aproximados de daño global del 3%.
176
12. Propuestas de mejora futuras
neas de investigacion
179
[9] C. Oyarzo-Vera and N. Chouw, "Ensayo modal experimental de una casa
de alabañilería no reforzada," presented at the Congreso chileno de sismología e
ingeniería antisísmica. X Jornadas, Santiago de Chile, 2010.
[17] K.-J. Bathe, Finite Element Procedures. Nueva Jersey: Prentice Hall,
1996.
180
[21] A. H. Barbat and S. Oller, Conceptos de cálculo dinámico en las
normativas de diseño sismorresistente. Aplicación a la normativa NCSE-02: CIMNE,
1997.
S. Oller, "Un modelo de daño continúo para materiales friccionales," PHD, UPC,
Barcelona, 1988.
181
S. Oller, B. Luccioni, and A. H. Barbat, "Un método de evaluación del daño
sísmico en estructuras de hormigón armado," Revista internacional de métodos
numéricos para cálculo y diseño en ingeniería, vol. 12, pp. 215-238, 1996.
182
Anejo I: Codigos
183
184
CÓDIGOS MODIFICADOS (PLCD) (Cambios señalados en negrita)
SUBROUTINE INPU3_V3D(TITLE)
C-----------------------------------------------------------------------
C
C THIS SUBROUTINE READ THE FIXED VALUES
C
C-----------------------------------------------------------------------
IMPLICIT NONE;
INTEGER IVFIX,IFPRE,IDOFN,NLOCA,NGASH,IFDOF,NVOLD,IEVAB,INODE,
. IPOIN,NGRAD,IVINT,IFINT,ITOTV, IVOLD, OLD_NVF
REAL(KIND=8) VAL1,VAL2
REAL(kind=8) :: OLD_TRM(NPOIN,MDOFN),
. OLD_TRT(NPOIN,MDOFN),
. OLD_NFX(NPOIN)
CHARACTER TITLE*72,
. TEXT*20
IF(NVFIX.GT.NPOIN*MDOFN) THEN
MENSA=
.'*** DIAG. DE INPU2, NUMERO DE RESTRICCIONES > NPOIN*MDOFN'
VAL1=DFLOAT(NVFIXM)
VAL2=DFLOAT(NPOIN*MDOFN)
CALL CHECK4_V3D(VAL1,VAL2)
END IF
C --- HACE POSITIVO LOS SIGNOS DEL VECTOR LNODS PARA EL PROXIMO PASO POR EL SOLVER ---
DO IELEM=1,NELEM
CALL BASE5O_V3D(IELEM)
LNODS(1:NNODE)=IABS(LNODS(1:NNOD E))
185
CALL BASE5I_V3D(IELEM)
ENDDO
DO IVFIX=1,NVFIX
READ(1,*) NOFIXM(IVFIX),IFPRE,(PRESC(IDOFN),IDOFN=1,NDOFN)
WRITE(2,908) NOFIXM(IVFIX),IFPRE,(PRESC(IDOFN),IDOFN=1,NDOFN)
CALL BASE6O_V3D(LPNTN(NOFIXM(IVFIX)))
NLOCA=NGLIBA-NGLIBL
IFDOF=10**(NDOFN-1)
DO IDOFN=1,NDOFN
NGASH=NLOCA+IDOFN
FIXEMM(NGASH)=PRESC(IDOFN)
IF (IFPRE.LT.IFDOF) THEN
IFDOF=IFDOF/10
ELSE
IFFIXM(NGASH,1)=1
IFPRE=IFPRE-IFDOF
IFDOF=IFDOF/10
ENDIF
ENDDO
ENDDO
ENDDO
ENDIF
IF(ICARG.EQ.1)THEN
IFFIXM(1:NTOTV,2)=IFFIXM(1:NTOTV,1)
DO IELEM=1,NELEM
CALL BASE5O_V3D(IELEM)
DO IEVAB=1,NEVAB
RLOAD(IEVAB,2)=RLOA D(IEVAB,1)
ENDDO
186
CALL BASE5I_V3D(IELEM)
ENDDO
ELSE
DO IELEM=1,NELEM
CALL BASE5O_V3D(IELEM)
DO INODE=1,NNODE
IPOIN=IABS(LNODS(INODE))
CALL BASE6O_V3D(IPOIN)
DO IDOFN=1,NDOFN
NGRAD=NGLIBA-NGLIBL+IDOFN
IEVAB=(INODE-1)*NDOFN+IDOFN
IF(KCARG.EQ.0)THEN
IF(IFFIXM(NGRAD,1).NE.IFFIXM(NGRAD ,2))THEN
IF(IFFIXM(NGRAD,2).EQ.1) TLOAD(IEVAB)=0.0
ENDIF
ENDIF
IFFIXM(NGRAD,2)=IFFIXM(NGRAD,1)
IF(KCARG.EQ.0)THEN
IF(RLOAD(IEVAB,1).NE.RLOAD(IEVAB,2))TLOAD(IEVAB)=0.0
ENDIF
RLOAD(IEVAB,2)=RLOAD(IEVAB,1)
ENDDO
ENDDO
ENDDO
ENDIF
IF(NVINT.NE.0)THEN
WRITE(2,912)
DO IVINT=1,NVINT
READ(1,*) NOINT(IVINT),IFINT
WRITE(2,908) NOINT(IVINT),IFINT
CALL BASE6O_V3D(LPNTN(NOINT(IVINT)))
NLOCA=NGLIBA-NGLIBL
IFDOF=10**(NDOFN-1)
DO IDOFN=1,NDOFN
NGASH=NLOCA+IDOFN
IF (IFINT.LT.IFDOF) THEN
187
IFDOF=IFDOF/10
ELSE
IFLIB(NGASH)=1
IFINT=IFINT-IFDOF
IFDOF=IFDOF/10
ENDIF
ENDDO
ENDDO
ENDIF
TEXT=TITLE
CALL CHECK3_V3D
CALL INPU2T_V3D
RETURN
907 FORMAT(//,10X,
. 'ECHO OF FIXITY DATA FOLLOWS :',/,
.10X,'===========================',//,
. 5H NODE,6X,4HCODE,8X,12HFIXED VALUES)
908 FORMAT(1X,I4,5X,I5,5X,5F10.6)
END
SUBROUTINE INPUV3D
C ---------------------------------------------------------------------------
C
C ESTA SUBRUTINA LEE LA ENTRADA DE SOLIDOS 3D.
C
C PMA, CIMNE, UPC, 2004.
C
C ---------------------------------------------------------------------------
IMPLICIT NONE;
INTEGER IPOIN,IK,ITEMP,NRO,NMC,IMATS,MP,INODE,NNTER,NINTER,
. IP,IDIME,NUMAT,IPROP, ilay, rad, ampli, perio
WRITE(61,*)TYPEP
WRITE(61,*)NPOIN,NELEM,NMATC,LARGE
CALL OTABR01_V3D;
CALL ALOKA_V3D;
WRITE(2,906); WRITE(2,902)
ENDIF ! RESTART
188
PINUM=DACOS(-1.0D00)
LPNTN(1:NPOIN)=[1:NPOIN]; LPNINV(1:NPOIN)=[1:NPOIN];
DO IELEM=1,NELEM
LNODS(:)=0
READ(1,*) NUMEL,
. (MATNO(IK),IK=1,(MINDE-1)), ! ACA MATNO(1)=ISEC,Nº DE SECCION.
. VAREL(1),
. NTYPE,
. EFASE,
. NNODE,
. NGAUS,
. NINTE,
. (LNODS(INODE),INODE=1,NNODE),
. (EAEULER(ik),ik=1,3)
WRITE(2,903) NUMEL,
. MATNO(1),
. VAREL(1),
. NTYPE,
. EFASE,
. NNODE,
. NGAUS,
. NINTE,
. (LNODS(INODE),INODE=1,NNODE),
. (EAEULER(ik),ik=1,3)
!Sacar el número de nodos por elemento para distinguir entre hexaedros y tetraedros JBLL 03/06/11
IF(IELEM.EQ.1)THEN
WRITE(61,*)NNODE
ENDIF
WRITE(61,908) NUMEL,
. MATNO(1),
. NTYPE,
. EFASE,
. NNODE,
. NGAUS,
. NINTE,
. (LNODS(INODE),INODE=1,NNODE),
. (EAEULER(ik),ik=1,3)
ENDIF ! RESTART
IF (IELEM.EQ.1) THEN
ITEMP=NTYPE
ELSE
IF(ITEMP.EQ.NTYPE) THEN
ELSE
ENDIF
ENDIF
CALL TYPEV3D
CALL INTEGR3D(NGAUX)
CALL BASE5I_V3D(NUMEL)
189
CALL CHECK1_V3D
NGAUSF(NUMEL) = NGAUS
ELECOMT(MATNO(1)) = ELECOMT(MATNO(1)) + 1
ELECOM(MATNO(1),ELECOMT(MATNO(1))) = IELEM
ENDDO
NGLIBA=0
DO IPOIN=1,NPOIN
CALL NGLIB1_V3D(IPOIN)
NGLIBA=NGLIBA+NGLIBL
CALL BASE6I_V3D(IPOIN)
ENDDO
NTOTV=NGLIBA
CALL ALOKA2_V3D
DO NRO=1,NMATC
DO ilay = 1, NULAY(NMC)
IF (TYLAY(NMC,ilay).EQ."NT") THEN
LCPRO(NMC,ilay,4) = LCPRO(NMC,ilay,2)
LCPRO(NMC,ilay,5) = LCPRO(NMC,ilay,3)
NUCOMF(NMC,ilay) = 5
END IF
END DO
END DO
CALL OTABR02_V3D;
COORD(:,:)=0.0D0;
WRITE(2,904); WRITE(2,905)
ENDIF ! RESTART
DO IP=1,NPOIN
READ(1,*) IPOIN,(COORD(IPOIN,IDIME),IDIME=1,3)
ENDDO
DO IPOIN=1,NPOIN,2
WRITE(2,907) IPOIN,
. (CO ORD(IPOIN,IDIME),IDIME=1,3),
. IPOIN+1,
. (COORD(IPOIN+1,IDIME),IDIME=1,3)
190
IF(IPOIN.EQ.NPOIN)THEN !EVITAR NODO EXTRA CUANDO SON IMPARES EL NÚMERO TOTAL DE NODOS
WRITE(61,909)IPOIN,
. (COORD(IPOIN,IDIME),IDIME=1,3)
ELSE
WRITE(61,909)IPOIN,
. (COORD(IPOIN,IDIME),IDIME=1,3)
WRITE(61,909)IPOIN+1,
. (COORD(IPOIN+1,IDIME),IDIME=1,3)
ENDIF
ENDDO
ENDIF ! RESTART
C ---------------- CALCULA LOS EJES LOCALES CON LA MANO DERECHA -------------
CALL CONSTITUTIVAS;
C ------------------------------------------------------------------
END
SUBROUTINE FINISH_V3D
C-----------------------------------------------------------------------
C
C ESTA SUBROUTINA INTERCAMBIA LA BASE DE DATOS
C
C NOCONVERGIDA -----------> CONVERGIDA
C
C-----------------------------------------------------------------------
IMPLICIT NONE;
Integer :: i, j, k, l, m, mat, posi1, posi2
INTEGER :: IGAUS,JGAUS,LGAUS,IM,KTESC,ICONV,INDMA,IG
Real(8) :: DB2aux(36)
C ---------- --------------------------------------------------------
KGAUS=0;
KGSUM=0;
do i = 1, NELEM
call BASE5O_V3D(i) ! Read in DataBase 5
mat = MATNO(1)
LPROP=mat
do j = 1, NGAUSF(i)
do k = 1, NGAUSF(i)
do l = 1, NGAUSF(i)
do m = 1, FER(mat)
posi1 = Pos_12(i,j,k,l,m,1)
posi2 = Pos_12(i,j,k,l,m,2)
BAS1_V3D(posi1,:) = BAS1_V3D(posi2,:)
191
c Llamada para extraer los datos del Csec y las tensiones convergidas,
c si estamos en grandes deformaciones exgrandef JBLL 07/04/2011
if((m.EQ.1).and.(BAS2_V3D(posi1,9).EQ.0.0d0).and.(conf.eq.1))then
CALL CALCsec_V3D(i,j,k,l,DB2aux)
DISIP=DISIP+DISID
IF (TTVOL.NE.0.0D0) DAMAGM=DAMAG/TTVOL
RETURN
END
C-----------------------------------------------------------------------
C
C ESTA RUTINA CALCULA LOS TENSORES CONSTITUTIVOS Y LO ALMACENA
C
c EN LA BASE DE DATOS Nro 4 EN FORMA DE VECTORES
C
C-----------------------------------------------------------------------
IMPLICIT NONE;
INTEGER IGAUS,JGAUS,INDXB5,IEQFU,INDMA,IM,INDXB4,ICOM,ISTR1,
. JSTR1,KTESC,I,J, full,DIR
REAL(KIND=8) EXISP,ETASP,PARKC,DENSC,VAL1,VAL2,DMANT
C -----------> CALCULA LOS TENSOR ELASTICO DE LOS MATERIALES SIMPLES Y LOS GUARDA
DO KPROP = 1, NMATS
END DO
pvol = PVLAY(LPROP,KLAY)
192
SELECT CASE (TYLAY(LPROP,KLAY))
CASE ('P')
CALL MODCO_V3D(DMANX,CVISC,DENSL)
CASE ('SP')
CALL CLAY_SP3D(DMANX,CVISC,DENSL)
CASE ('NT')
CALL CLAY_NT3D(DMANX,CVISC,DENSL)
END SELECT
! --- ROTACIÓN DEL TENSOR CONSTITUTIVO LAYER A LAS COORDENADAS DEL COMPUESTO --------
A1 = LAEULER(LPROP,KLAY,1)
A2 = LAEULER(LPROP,KLAY,2)
A3 = LAEULER(LPROP,KLAY,3)
IF(A1**2+A2**2+A3**2.GT.1.e-9) Then
dir = 2 ! local LAMINA to global MATERIAL COMPUESTO
call ROTM(DMANX,A1,A2,A3, mstr1, dir)
call ROTM(CVISC,A1,A2,A3, mstr1, d ir)
END IF
END DO
DMANX=AUX1
CVISC=AUX3
CALL INVERT3D(MSTR1,DMANX,DMANXI,AUXL)
DENSV(MATNO(1))=DENSc;
ICOM=2
full=1 ! Complete Matrix
CALL COMPON_V3D(VDMANX ,DMANX ,LONG2_V3D,full,ICOM)
CALL COMPON_V3D(VDMANXI,DMANXI,LONG2_V3D,f ull,ICOM)
CALL COMPON_V3D(VCVISC ,CVISC ,LONG2_V3D,full,ICOM)
VB4_V3D((Ib4_4+1):(Ib4_4+LONG2_V3D)) = VDMANX(1:LONG2_V3D);
VB4_V3D((Ib4_8+1):(Ib4_8+LONG2_V3D)) = VDMANXI(1:LONG2_V3D);
VB4_V3D((Ib4_13+1):(Ib4_13+LONG2_V3D)) = VCVISC(1:LONG2_V3D);
KTESC=1;
INDMA=0;
CALL BASE4_V3D(LPROP,INDMA,KTESC);
IF(ICARG.EQ.1.0) THEN
CALL EXCO(LPROP,VDMANX,DENSC)
ENDIF
ENDDO
RETURN
END
193
SUBROUTINE INICIA(DATOS1,DATOS4,CPROB1)
C --------------------------------------------------------------------------
C
C ESTA SUBRUTINA ABRE LOS ARCHIVOS DE DATOS DE LECTURA Y ESCRITURA
C
C PMA, CIMNE, UPC, 2004.
C
C INDI = 1. INICIA EL PROBLEMA.
C 2. TERMINA.(CIERRA TODO).
C
C --------------------------------------------------------------------------
IMPLICIT NONE;
REAL(KIND=8) TIME
CHARACTER(LEN=64) CPSAL,CPROB1
CHARACTER(LEN=64) CRA(20),CAP(20)
CHARACTER(LEN=64) CB
DATOS1(1)=NIND1;
DATOS1(2)=NIND2;
DATOS1(3)=NIND3;
DATOS1(4)=NPASO;
DATOS1(5)=NPUNT1;
DATOS1(6)=NPUNT2;
DATOS1(7)=NUNIT;
DATOS1(8)=NUNLOG;
NFORMATOS=11;
OPEN(UNIT=0,FILE='con',STATUS='UNKNOWN',
. CARRIAGECONTROL='FORTRAN')
CALL CARTEL;
DO J=1,64
IF (CPROB1(J:J).EQ.'.') II=(J-1);
ENDDO
194
DO IK=1,NFORMATOS
CAP(IK)(1:(II+10))=CPROB1(1:II)//CRA(IK)(1:10);
ENDDO
DATOS4(1:20)=CAP(1:20);
DO IN1=1,64
ENDDO
445 IN1=IN1-1
IN2=64
IF (IN1.LT.IN2) IN2=IN1;
DATOS4(21)=CB;
DATOS1(13)=IN1;
DATOS1(14)=IN2;
CALL MAKINA(3);
CALL MAKINA(4);
CALL MAKINA(5);
RETURN
END
SUBROUTINE RESI2D_V3D(ELDIS,VSTRAT,STRSG,STRAP,EPSTN,
. EFFST,STRAT,BMATX,IGAUS,JGAUS,LGAUS,
. EXISP,ETASP,EZETA,DVOLU,STRFAS,VSTRFAS,AUXI, AUX1
)
C-----------------------------------------------------------------------
C
C ESTA RUTINA INICIA EL TRATAMIENTO CONSTITUTIVO PARA ELEMENTOS
C 2-D y3-D
C
C-----------------------------------------------------------------------
IMPLICIT NO NE;
INTEGER INDV,JGAUS,IGAUS,LGAUS,KTESC,INDMA,ICOM,MGASH,INODE,
. IDOFN,ISTRE,IKND,I,OLD_LPROP, full,ICONV,J
REAL(KIND=8) PINUM,ROOT3,TWOPI,ETASP,EXISP,DJACB,EZETA,THICK,PXY,
. PXZ,PYZ,PESO,DVOLU,EFFST,EPSTN, ! japl ANGLOELE angulo del elemento
. LEFFST,LEPSTN,A1,A2,A3
REAL(KIND=8), DIMENSION(MSTR1) :: STRAN,STRAP,STRSP,
. STRSG,STRAT,VSTRAN,
. VSTRAT,STRFAS,VSTRFAS,
. LSTRSG,LSTRSP,
. STRATcom,STRANcom, STRATlay,STRANlay,
. VSTRATcom,VSTRANcom,VSTRATlay,VSTRANLAY
REAL(KIND=8), DIMENSION(MSTR1,MSTR1) :: AUX1,AUXI
REAL(KIND=8), DIMENSION(MSTR1,MDOFN*MNODE) :: BMATX
REAL(KIND=8), DIMENSION(3,3) :: FGRAD,RLAYX
REAL(KIND=8), DIMENSION(LONG2_V3D) :: VDMANX,VDMANXI
C ------------------------------------------------------------------
195
CALL PROCOM_V(thick,3)
CALL PROCOM_V(pxy,2)
CALL PROCOM_V(pxz,38)
CALL PROCOM_V(pyz,41)
PESO=WEIGP(JGAUS)
IF (NGAUY.EQ.1) PESO=1.0
DVOLU=DJACB*WEIGP(IGAUS)*PESO
IF (THICK.NE.0.0) DVOLU=DVOLU*THICK
CALL BMATSOL_V3D(BMATX,GPCOD,FGRAD)
VSTRAN(:)=0.0D0;
IF (IDINA.EQ.1) THEN
INDV=2
CALL GRADEF_V3D(XJACM,FGRAD,GPCOD,ELDIS,INDV)
CALL DEFO3D(FGRAD,VSTRAN,VSTRAT,VSTRFAS)
ENDIF
MGASH=0
CALL CALTEN_V3D(AUX1,STRSG,STRAT)
DO INODE=1,NNODE
DO IDOFN=1,NDOFN
MGASH=MGASH+1
DO ISTRE=1,NSTRE
ELOAD(MGASH,3)=ELOAD(MGASH,3)+
. BMATX(ISTRE,MGASH)*STRSG(ISTRE)*DVOLU
ENDDO
ENDDO
ENDDO
C ---- CASO GENERAL DE PROBLEMAS NO- LINEALES CON VARIOS MATERIALES DE VARIOS COMPONENTES ---
KTESC = 1 ! Write
ICONV = 2 ! Not converged
196
INDMA = 0 ! Composite material index in DataBase 2
VB2_V3D(1:Ib2_M) = 0.0d0;
VB2_V3D(9) = 1.0d0; ! EUNLD = 1.0, Lo guardamos ya en DB2
call BASE2_V3D(IELEM,IGAUS,JGAUS,LGAUS,INDMA,ICONV,KTESC)
STRSG = 0.0d0
STRSP = 0.0d0
EFFST = 0.0d0
EPSTN = 0.0d0
STRATcom = STRAT
STRANcom = STRAN
VSTRATcom = VSTRAT
VSTRANcom = VSTRAN
A1 = EAEULER(1)
A2 = EAEULER(2)
A3 = EAEULER(3)
IF(A1**2+A2**2+A3**2.GT.1.e-9) Then
CALL ROTV(STRATcom,A1,A2,A3,NSTRE,1,1)
CALL ROTV(STRANcom,A1,A2,A3,NSTRE,1,1)
CALL ROTV(VSTRATcom,A1,A2,A3,NSTRE,1,1)
CALL ROTV(VSTRANcom,A1,A2,A3,NSTRE,1,1)
END IF
DO KLAY = 1, NULAY(LPROP)
LSTRSG = 0.0
LSTRSP = 0.0
STRATlay=STRATcom
STRANlay=STRANcom
VSTRATlay=VSTRATcom
VSTRANlay=VSTRANcom
A1 = LAEULER(LPROP,KLAY,1)
A2 = LAEULER(LPROP,KLAY,2)
A3 = LAEULER(LPROP,KLAY,3)
IF(A1**2+A2**2+A3**2.GT.1.e-9) Then
CALL ROTV(STRATlay,A1,A2,A3,NSTRE,1,1)
CALL ROTV(STRANlay,A1,A2,A3,NSTRE,1,1)
CALL ROTV(VSTRATlay,A1,A2,A3,NSTRE,1,1)
CALL ROTV(VSTRANlay,A1,A2,A3,NSTRE,1,1)
END IF
CASE ('P')
CALL P_MNGER_V3D(LSTRSG,LSTRSP,STRATlay,STRANlay,LEFFST,LEPSTN,
. DVOLU,VSTRATlay,VSTRANlay,FGRAD,ETASP,EXISP,
. IGAUS,JGAUS,LGAUS)
CASE ('SP')
CALL SP_MNGER_V3D(LSTRSG,LSTRSP,STRATlay,STRANlay,LEFFST,LEPSTN,
. DVOLU,VSTRATlay,VSTRANlay,FGRAD,ETASP,EXISP,
. EZETA,IGAUS,JGAUS,LGAUS)
CASE ('NT')
C ALL NT_MNGER_V3D(LSTRSG,LSTRSP,STRATlay,STRANlay,LEFFST,LEPSTN,
. DVOLU,VSTRATlay,VSTRANlay,FGRAD,ETASP,EXISP,
. EZETA,IGAUS,JGAUS,LGAUS)
END SELECT
A1 = LAEULER(LPROP,KLAY,1)
A2 = LAEULER(LPROP,KLAY,2)
A3 = LAEULER(LPROP,KLAY,3)
IF(A1**2+A2**2+A3**2.GT.1.e-9) Then
197
CALL ROTV(LSTRSG,A1,A2,A3,NSTRE,2,2)
CALL ROTV(LSTRSP,A1,A2,A3,NSTRE,2,2)
END IF
END DO
DO I=1,NSTR1
DO J=1,NSTR1
STRAP(I)=STRAP(I)+AUXI(I,J)*STRSP(J);
END DO
END DO
ELSE
STRSG(:) = 0.0d0
END IF
A1 = EAEULER(1)
A2 = EAEULER(2)
A3 = EAEULER(3)
IF(A1**2+A2**2+A3**2.GT.1.e-9) Then
CALL ROTV(STRSG,A1,A2,A3,NSTRE,2,2)
CALL ROTV(STRAP,A1,A2,A3,NSTRE,2,1)
END IF
C ------ CALCULATE THE EQUIVALENT NODAL FORCES AND ASSOCIATE WITH THE ELEMENT NODES --------
MGASH=0
DO INODE = 1, NNODE
DO IDOFN = 1, NDOFN
MGASH = MGASH + 1
DO ISTRE = 1, NSTRE
DO IKND = 1, 2
ELOAD(MGASH,IKND) = ELOAD(MGASH,IKND) +
. BMATX(I STRE,MGASH)*STRSG(ISTRE)*DVOLU
ENDDO
ENDDO
ENDDO
ENDDO
RETURN
END
198
SUBROUTINE DAMAGE_V3D
C----------------------------------------------------------------------------
C
C ESTA RUTINA EVALUA EL DANO GLOBAL EN FUNCION DE LA FUERZA REACTIVA
C
C D = (1 - |Fr|/|Fo|)
C
C |Fr| = |STFOR|
C |Fo| = |TOFOR|
C
C----------------------------------------------------------------------------
IMPLICIT NONE;
INTEGER KEVAB,INODE,LOCNO,IDOFN,NPOSI,ITOTV
REAL(KIND=8) FR,FO
C -- ---------------------------------------------------------------------
Fr=0.0D0;
Fo=0.0D0;
STFOR(:)=0.0D0;
TOFOR(:)=0.0D0;
DO IELEM=1,NELEM
KEVAB=0
CALL BASE5O_V3D(IELEM)
DO INODE=1,NNODE
LOCNO=IABS(LNODS(INODE))
CALL BASE6O_V3D(LOCNO)
DO IDOFN=1,NDOFN
KEVAB=KEVAB+1
NPOSI=NGLIBA-NGLIBL+IDOFN
STFOR(NPOSI)=STFOR(NPOSI)+ELOAD(KEVAB,2)
TOFOR(NPOSI)=TOFOR(NPOSI)+ ELOAD(KEVAB,3)
ENDDO
ENDDO
ENDDO
DO ITOTV=1,NTOTV
Fr=Fr+STFOR(ITOTV)*STFOR(ITOTV)
Fo=Fo+TOFOR(ITOTV)*TOFOR(ITOTV)
ENDDO
Fr=SQRT(Fr)
Fo=SQRT(Fo)
DGFORC=1.0-(Fr/Fo)
IF (NTYPE.LT.20) WRITE(2,900)DAMAGM,DGFORC
RETURN
END
199
SUBROUTINE RESIDU_V3D
C-----------------------------------------------------------------------
C
C THIS SUBROUTINE REDUCES THE STRESSES TO THE YIELD SURFACE AND
C EVALUATES THE EQUIVALENT NODAL FORCES
C
C-----------------------------------------------------------------------
! IMPLICIT NONE;
INTEGER INDXB5,INODE,IDIME,NPOSN,IDOFN,ID,LGAUS,IGAUS,JGAUS,JEQFU,
. KTESC,ICONV,INDMA,LNODE,IEQFU
C ------------------------------------------------------------------
PINUM=DACOS(-1.0D00)
ROOT3=DSQRT(3.0D00)
TWOPI=2.0D00*PINUM
DO IELEM=1,NELEM
CALL BASE5O_V3D(IELEM);
CALL BASE5I_V3D(IELEM);
ENDDO
DAMAG=0.0D0
DISID=0.0D0
TTVOL=0.0D0
KGSUM=0
KGAUS=0
DO IELEM=1,NE LEM
INDXB5=IELEM
CALL BASE5O_V3D(IELEM)
C
C ---- COMPUTE COORDINATE AND INCREMENTAL DISPLACEMENTS OF THE ELEMENT NODAL POINTS ----
C
ELDIS(:,:,:)=0.0D0; !ELDIS(NDIME,MNODE,2)
DO INODE=1,NNODE
LNODE=IABS(LNODS(INODE))
200
CALL BASE6O_V3D(LNODE)
DO IDIME=1,NDIME
ENDDO
DO IDOFN=1,NDOFN
NPOSN=NPOSN+1
ELDIS(IDOFN,INODE,1)=TDISP(NPOSN,1)
ELDIS(IDOFN,INODE,2)=TDISP(NPOSN,2)
IF (LARGE.NE.0) THEN
ID=IDOFN
ELDIS(IDOFN,INODE,1)=TDISP(NPOSN,1)+ELCOD(ID,INODE)
ELDIS(IDOFN,INODE,2)=TDISP(NPOSN,2)
ENDIF
ENDIF
ENDDO
ENDDO
C
C ------------------- LECTURA INV. TENSOR ANISOTROPO PARA EL COMPUESTO --------------
C
KTESC=2 ! LECTURA.
INDMA=0 ! COMPUESTO.
CALL BASE4_V3D(LPROP,INDMA,KTESC)
VDMANX(1:LONG2_V3D)=VB4_V3D((Ib4_4+1):(Ib4_4+LONG2_V3D))
VDMANXI(1:LONG2_V3D) = VB4_V3D((Ib4_8+1):(Ib4_8+LONG2_V3D))
ICOM=1
full = 1 ! Matriz entera
C
C ------------------- BUCLE SOBRE LOS PUNTOS DE GAUSS DEL ELEMENTO --------------
C
KGASP=0
DO IGAUS=1,NGAUX
EXISP=POSGP(IGAUS)
DO JGAUS=1,NGAUY
ETASP=POSGP(IEQFU(IGAUS,JGAUS))
DO LGAUS=1,NGAUZ
EZETA=POSGP(JEQFU(IGAUS,JGAUS,LGAUS))
KGAUS=KGAUS+1
201
KGASP=KGASP+1
C
C LECTURA CONVERGIDA EN EL PASO ANTERIOR DE TENSIONES Y DEFORMACIONES PLASTICAS
C PARA EL COMPUESTO
KTESC=2 ! LECTURA.
ICONV=1 ! CONVERGIDO.
INDMA=0 ! COMPUESTO
CALL BASE1_V3D(IELEM,IGAUS,JGAUS,LGAUS,
. INDMA,ICONV,KTESC);
STRAT(1:NSTR1) = VB1_V3D((Ib1_1+1):(Ib1_1+NSTR1))
VSTRAT(1:NSTR1) = VB1_V3D((Ib1_6+1):(Ib1_6+NSTR1))
STRSG(1:NSTR1) = VB1_V3D(1:NSTR1)
STRAP(1:NSTR1) = VB1_V3D((Ib1_2+1):(Ib1_2+NSTR1))
STRATt(1:NSTR1) = VB1_V3D((Ib1_8+1):(Ib1_8+NSTR1))
VSTRATt(1:NSTR1)= VB1_V3D((Ib1_9+1):(Ib1_9+NSTR1))
STRSGt(1:NSTR1) = VB1_V3D((Ib1_7+1):(Ib1_7+NSTR1))
STRFAS(1:NSTR1) = VB1_V3D((Ib1_17+1):(Ib1_17+NSTR1))
VSTRFAS(1:NSTR1)= VB1_V3D((Ib1_18+1):(Ib1_18+NSTR1))
EPSTN=VB1_V3D(Ib1_4)
EFFST=VB1_V3D(Ib1_5)
SELECT CASE(NTYPE)
CALL RESI2D_V3D(ELDIS,VSTRAT,STRSG,STRAP,
. EPSTN,EFFST,STRAT,BMATX,IGAUS,JGAUS,
. LGAUS,EXISP,ETASP,EZETA,DVOLU,
. STRFAS,VSTRFAS,AUXI,AUX1)
CASE DEFAULT
END SELECT
VB1_V3D((1+Ib1_1):(NSTR1+Ib1_1)) = STRAT(1:NSTR1);
VB1_V3D((1+Ib1_2):(NSTR1+Ib1_2)) = STRAP(1:NSTR1);
VB1_V3D((1+Ib1_6):(NSTR1+Ib1_6)) = VSTRAT(1:NSTR1);
VB1_V3D((Ib1_17+1):(Ib1_17+NSTR1)) = STRFAS(1:NSTR1);
VB1_V3D((Ib1_18+1):(Ib1_18+NSTR1)) = VSTRFAS(1:NSTR1);
VB1_V3D(Ib1_4)=EPSTN;
VB1_V3D(Ib1_5)=EFFST;
KTESC=1 ! ESCRITURA.
ICONV=2 ! NO CONVERGIDO.
INDMA=0 ! COMPUESTO
202
CALL BASE1_V3D(IELEM,IGAUS,JGAUS,LGAUS,
. INDMA,ICONV,KTESC);
ENDDO
ENDDO
ENDDO
CALL BASE5I_V3D(INDXB5)
ENDDO
RETURN
END
MODULE ENTEROS
C ---------------------------------------------------------------------------
C
C ESTE MODULO TRASPASA AL RESTO DEL PROGRAMA LOS ENTEROS Y CARACTERES
C
C PMA, CIMNE, UPC, 2004
C
C ---------------------------------------------------------------------------
SAVE
INTEGER NPASO,NIND1,NIND2,NIND3,NIND4,NIN,IN1,MDOFN
! CPU
REAL(KIND=8) CPUCO,CPUDE,CPUSL,CPUSU,CPUSO,CPUOU,CPURE,CPUUP,
. CPUAS,CPURS,CPUST,CPUSF,CPUDA,TIME1,TIME2,TOCPU,CPUID
! ENTRADA DATOS
INTEGER KINDP,LARGE,NCONST,NLAG,NALGO,ISIME,NPOIN,NELEM,NMATC,
. NMATS,NINCM,IRFLAG,ISOLVER,KRENU,IFIPO,ISMOO,ICOUP,MAXLAY,
. NTOTV,NKRYLO,NITER,IPRINT,NTYPE,NNODE,NGAUS,NINTE,MNODE,
. NORI
! FASES DE CARGA
! CARGAS
INTEGER NCARG,KCARG,IPLOD,IGRAV,IEDGE,IDINA,IINTE,IPLODT,IGRAVT,
. IEDGET,NEDGE,KLECT,NGAUZ
! VINCULACIONES
INTEGER NVFIX,NVINT,NVFIXT,NVFIXC
! AUXILIARES
INTEGER INDRIG,IPROB,MFRON,NBANDA,NTBANDA,NBANDASRENU,NELIM,ICARG,
. NROIT,MITER,KARCL,IN2,NODIS,LGRAD,IPOST,NROPU,KGASP,INDFU,
. IITER,KRESL,MBUFA,MSTIF,MKRYL,MWORK,I_DOF,IFATIG,NCHEK,
. NARCH,MGA U2,NFRON,KFRON,IINCS,MBANDA,MIWORK,NCURV,NINCS,
. ISISM,INSA,NTIME,IFMAS,IFATLOAD,IFRPO,KLODPT,NEVAB,NCODE,
. NUMEL,KGAUS,KGSUM,IELEM,NDFRO,NPG,IEFLAG,NGLIBA,NGLIBL,
. MXCON,NVFIXM,KUCOM,LPROP,KPROP,IUCOM,KLAY,ICAP,MEVAB,
. NSTRE,NDOFN,NSTR1,NGAUX,NGAUY,MTENS,NPUNT1,NPUNT2,IVERS,
. TFACTT,NOFIXC,WORDS,NWOPA,NNWOR,NNPAR,NUNLOG,NUNIT, JBL2,conf
203
C ------------------------------- SOLO PARA VIGAS 3D -----------------------
! BASE 1.
INTEGER Ib1_1,Ib1_2,Ib1_3,Ib1_4,Ib1_5,Ib1_6,Ib1_7,Ib1_8,Ib1_9,
. Ib1_10,Ib1_11,Ib1_12,Ib1_13,Ib1_14,Ib1_15,Ib1_16,Ib1_17,
. Ib1_18,Ib1_19,Ib1_M
! BASE 2.
INTEGER Ib2_1,Ib2_2,Ib2_M
! BASE 3.
INTEGER Ib3_1,Ib3_2,Ib3_3,Ib3_4,Ib3_5,Ib3_6,Ib3_M
! BASE 4.
! BASE 5.
INTEGER Ib5_1,Ib5_2,Ib5_3,Ib5_4,Ib5_5,Ib5_6,Ib5_7,Ib5_8,Ib5_9,
. Ib5_10,Ib5_11,Ib5_12,Ib5_13,Ib5_14,Ib5_M
! BASE 6.
INTEGER Ib6_1,Ib6_2,Ib6_M
INTEGER MRb_4,MRb_5,MRb_6,MR_DUMP
INTEGER MBAS4,MBAS6,MBAS5,MAXIB2,AXIB6,MIB2
INTEGER MAXIB4,MAXIB5,MAXIB6,MIB3,MIB4,MIB5,MIB6
REAL(KIND=8) DTIME,TTIME,DISIP,PDEFO,PCINE,EINTR,EDISI,PINTR,
. DAMAG,DISID,TTVOL,DAMAGM,DGFORC,HPAR,
. D1,ZETA,EEQI,GEQI,CPURN,TFACT,FAC TO,TFACTM,TOLER,
. ARCLN,VNCICL,RATIO,REMAX,RAYLA,RAYLB,COEFM,COEFC,
. COEFD,DFGRAD,REVER,SAPL_MAX,RFATI,FREDUC,CONSTA,
. SMAX,SI_1,SI_2,BCOFAT,VALRA,VNEWB,VNEWG,PERIOD,
. VNCIC0,GMTOL,TVOLU,PDISI,SMIN,ALFEXP,GEQZ,PVALU,Npar
CHARACTER*64 CPROB,TYPEP,TITLE1,TITLE2,CPARA,MENSA
CHARACTER(LEN=64) CFIL1,CC,CA,CB,CD,CE,CH,CI,CJ,CK,CF1,CF2,CF3,
. CF4,CF5,CF6,CF7,CF8,CF9,CF10,CF18,CF19,CF20,
. CF21,CF22,CF23,CF24,CF25,CF26,CF27,CF28,CF29,
. CF30,CF31,CF32,CF34
CHARACTER(LEN=23) TIMER;
CHARACTER(LEN=90) CCARD;
CHARACTER CCUR*5
C NROPU(MROPU,2),IFFIXT(MTOTV,2),ICONVE(MVFIX,5),TLOADT(MEVAB),ELOADT(MEVAB,3),
C RLOADT(MEVAB,3),AUXHI(MBAS2),XEPS1(MMATS,100),YSIG1(MMAT S,100),XEPS2(MMATS,100),
C YSIG2(MMATS,100),XEPS3(MMATS,100),YSIG3(MMATS,100),TDISPT(MPOIN,3),FIXEMT(MTOTV),
C PROPOLD55(MMATS),PROPOLD56(MMATS),PROPOLD57(MMATS),CHARACTER*5 WORDS(MAXWP),NP
204
C ------------------------------- VIGAS 3D ---------------------------------
205
CÓDIGOS NUEVOS (PLCD)
SUBROUTINE EXCO(MAT,VDMANX,DENSC)
C -----------------------------------------------------------------------
C
C ESTA SUBROUTINA EXTRAE LOS DATOS DEL TENSOR ANISOTROPO (Co)
C Y LA DENIDAD (Densv) DE CADA MATERIAL COMPUESTO (Mat)
c
C JBLL (02/04/2011)
C ----------------------------------------------------------------------
IMPLICIT NONE;
WRITE(38,355)MAT,VDMANX(1:LONG2_V3D),DENSV(MATNO(1))
WRITE(37)MAT,VDMANX(1:LONG2_V3D),DENSV(MATNO(1))
355 FORMAT(I2,36F13.3,1XF8.3)
RETURN
END
SUBROUTINE EXGRANDEF(INDX, IGAUS, JGAUS, LGAUS,STRSG)
C --------------------------------------------------------------------
C
C
C ESTA SUBRUTINA EXTRAE LOS DATOS DEL TENSOR DE TENSIONES EN EL CASO DE GRANDES
DEFORMACIONES:
C
C
C INDX-----> Elemento
C PGAUS----> Punto de Gauss
C ICARG----> Carga
C IINCS----> Paso
C STRSG----> Tensiones
C
C JBLL (07/04/2011)
C --------------------------------------------------------------------
Real(8) :: DB2aux(52)
c CREAMOS UN FICHERO NUEVO PARA GUARDAR LOS DATOS QUE NECESITAMOS EXTRAER
OPEN(UNIT=39,FILE = 'Strsg.txt',STATUS='UNKNOWN',
. POSITION='APPEND',FORM='UNFORMATTED')
190 FORMAT(4I6,6F13.3)
RETURN
END
206
SUBROUTINE EXCSEC(INDX, IGAUS, JGAUS, LGAUS,DB2aux)
C --------------------------------------------------------------------
C
C
C CSECDE LA
ESTA SUBRUTINA EXTRAE LOS DATOS DEL CTAN
C RUTINA DEL PLCD. SE EXTRAE LA SIGUIENTE INFOMACIÓN:
C
C AUX------> Variable auxiliar que se usa en la actualización de la matriz de Rigidez
C INDX-----> Elemento
C PGAUS----> Punto de Gauss
C ICARG----> Carga
C IINCS----> Paso
C DB2aux---> Csec
C
C JBLL (02/04/2011)
C --------------------------------------------------------------------
Real(8) :: DB2aux(36)
c CREAMOS UN FICHERO NUEVO PARA GUARDAR LOS DATOS QUE NECESITAMOS EXTRAER
OPEN(UNIT=36,FILE = 'Csec.txt',STATUS='UNKNOWN',
. POSITION='APPEND',FORM='UNFORMATTED')
OPEN(UNIT=66,FILE = 'Csec2.txt',STATUS='UNKNOWN',
. POSITION='APPEND')
IF(JBL2.EQ.0)THEN
AUX=1
IINCSI=IINCS
ICARGI=ICARG
JBL2=2
ENDIF
190 FORMAT(5I6,36F13.3)
RETURN
END
207
SUBROUTINE MODCSEC_V3D(AUX,AUX2,DENSc,INDXB5,IGAUS,JGAUS,LGAUS) ! *-*-*
C-----------------------------------------------------------------------
C
C CALCULA EL TENSOR CONSTITUTIVO SECANTE PARA UNA LAYER CON MEZCLA P
C
C-----------------------------------------------------------------------
IMPLICIT NONE;
INTEGER IM,KTESC,INDMA,ICOM,FULL,DIR,INDXB5,IGAUS,JGAUS,LGAUS
AUX(1:MSTR1,1:MSTR1) =0.0D0;
AUX2(1:MSTR1,1:MSTR1) =0.0D0;
C -------------------------------------------------------------------
DO IM=1,NUCOMF(LPROP,KLAY)
KPROP=LCPRO(LPROP,KLAY,IM)
PARKc=PARTV(LPROP,KLAY,IM)
TAU=0.0D0
KTESC = 2
INDMA = KPROP
CALL BASE4_V3D(LPROP,INDMA,KTESC) !LECTURA DE LA PROPIEDAD DEL MATERIAL SIMPLE
VDMANX(1:LONG2_V3D)=VB4_V3D((Ib4_4+1):(Ib4_4+LONG2_V3D));
CALL BASE2_V3D(INDXB5,IGAUS,JGAUS,LGAUS,INDMA,2,KTESC)
VDMANX=VDMANX*(1-VB2_V3D(6))
ICOM = 1
full = 1 !MATRIZ ENTERA
CALL COMPON_V3D(VDMANX,DMANX,LONG2_V3D,full,ICOM)
A1 = MAEULER(KPROP,1)
A2 = MAEULER(KPROP,2)
A3 = MAEULER(KPROP,3)
IF(A1**2+A2**2+A3**2.GT.1.e-9) Then
dir = 2 ! LOCAL to GLOBAL
call ROTM(DMANX,A1,A2,A3,MSTR1,dir)
END IF
ENDDO
RETURN
END
208
SUBROUTINE CALCsec_V3D(INDXB5,IGAUS,JGAUS,LGAUS,VDMANX) !*-*-*
C-----------------------------------------------------------------------
C
C ESTA RUTINA CALCULA LOS TENSORES CONSTITUTIVOS secantes y los escribe en
C un fichero Csec.txt para el calculo de frecuencias modales
C-----------------------------------------------------------------------
USE ENTEROS; USE MATRICES; USE PARAM3D;
IMPLICIT NONE;
INTEGER IGAUS,JGAUS,LGAUS,INDXB5,IEQFU,INDMA,IM,INDXB4,ICOM,ISTR1,
. JSTR1,KTESC,I,J, full,DIR
REAL(KIND=8) EXISP,ETASP,PARKC,DENSC,VAL1,VAL2,DMANT
REAL(KIND=8), DIMENSION(LONG2_V3D) :: VDMANX,VDMANXI,VCVISC
REAL(KIND=8), DIMENSION(MSTR1,MSTR1) :: DMANX,DMANXI,CVISC, AUX1,
. AUX3, AUXL
REAL (8) pvol, A1,A2,A3,DENSL
pvol = PVLAY(LPROP,KLAY)
CASE ('P')
CALL MODCsec_V3D(DMANX,CVISC,DENSL,INDXB5,IGAUS,JGAUS,LGAUS)
CASE ('SP')
CALL CLAY_SP3Dsec(DMANX,CVISC,DENSL,INDXB5,IGAUS,JGAUS,LGAUS)
CASE ('NT')
CALL CLAY_NT3D(DMANX,CVISC,DENSL)
END SELECT
! --- ROTACIÓN DEL TENSOR CONSTITUTIVO LAYER A LAS COORDENADAS DEL COMPUESTO --------
A1 = LAEULER(LPROP,KLAY,1)
A2 = LAEULER(LPROP,KLAY,2)
A3 = LAEULER(LPROP,KLAY,3)
IF(A1**2+A2**2+A3**2.GT.1.e-9) Then
dir = 2 ! local LAMINA to global MATERIAL COMPUESTO
call ROTM(DMANX,A1,A2,A3, mstr1, dir)
call ROTM(CVISC,A1,A2,A3, mstr1, dir)
END IF
END DO
DMANX=AUX1
CVISC=AUX3
CALL INVERT3D(MSTR1,DMANX,DMANXI,AUXL)
c DENSV(MATNO(1))=DENSc;
C ------------------ DESCOMPONE TENSOR ------> VECTOR ---------------------
ICOM=2
full=1 ! Complete Matrix
CALL COMPON_V3D(VDMANX ,DMANX ,LONG2_V3D,full,ICOM)
RETURN
END
209
Subroutine CLAY_SP3Dsec(Ccomp, Cvisco, Dens,INDXB5,IGAUS,JGAUS,LGAUS)
kprop = LCPRO(LPROP,KLAY,1)
mK = PARTV(LPROP,KLAY,1)
Dens = Dens + mK*props(kprop, 4)
KTESC = 2
INDMA = KPROP
CALL BASE4_V3D(LPROP,INDMA,KTESC) !LECTURA DE LA PROPIEDAD DEL MATERIAL SIMPLE
VDMANX(1:LONG2_V3D)=VB4_V3D((Ib4_4+1):(Ib4_4+LONG2_V3D));
CALL BASE2_V3D(INDXB5,IGAUS,JGAUS,LGAUS,INDMA,2,KTESC)
VDMANX=VDMANX*(1-VB2_V3D(6))
ICOM = 1
full = 1 !MATRIZ ENTERA
CALL COMPON_V3D(VDMANX,Cmat,LONG2_V3D,full,ICOM)
! --- ROTACIÓN DEL TENSOR CONSTITUTIVO MAT A LAS COORDENADAS DE LA LAYERS --------
A1 = MAEULER(KPROP,1)
A2 = MAEULER(KPROP,2)
A3 = MAEULER(KPROP,3)
IF(A1**2+A2**2+A3**2.GT.1.e-9) Then
dir = 2 ! LOCAL to GLOBAL
call ROTM(Cmat,A1,A2,A3,MSTR1,dir)
END IF
kprop = LCPRO(LPROP,KLAY,2)
fK = PARTV(LPROP,KLAY,2)
Dens = Dens + fK*props(kprop, 4)
KTESC = 2
INDMA = KPROP
CALL BASE4_V3D(LPROP,INDMA,KTESC) !LECTURA DE LA PROPIEDAD DEL MATERIAL SIMPLE
VDMANX(1:LONG2_V3D)=VB4_V3D((Ib4_4+1):(Ib4_4+LONG2_V3D));
CALL BASE2_V3D(INDXB5,IGAUS,JGAUS,LGAUS,INDMA,2,KTESC)
VDMANX=VDMANX*(1-VB2_V3D(6))
ICOM = 1
full = 1 !MATRIZ ENTERA
CALL COMPON_V3D(VDMANX,Cfib,LONG2_V3D,full,ICOM)
! --- ROTACIÓN DEL TENSOR CONSTI TUTIVO FIB A LAS COORDENADAS DE LA LAYERS --------+
210
+
A1 = MAEULER(KPROP,1)
A2 = MAEULER(KPROP,2)
A3 = MAEULER(KPROP,3)
IF(A1**2+A2**2+A3**2.GT.1.e-9) Then
dir = 2 ! LOCAL to GLOBAL
call ROTM(Cfib,A1,A2,A3,MSTR1,dir)
END IF
call Ccomp_SP(mK,Cmat,fK,Cfib,mstr1,Ccomp)
! In case of viscous problem
Return
End
Use Sparse_SCSR
Implicit NONE
211
! Definition of main Variables to be used during the computation
ipred = 0
iconv = 0
iiter = 1
! Loop to permit consider different initial predictions if any of them does not
! manage to find the eigenvalues sought
DO ipred = 1, 2
212
enddo
enddo
enddo
! Check if convergence has been reached. If not, tries 2nd prediction if it has
! been tested with prediction 1 or leaves the subroutine without solution
if (iconv .eq. 1) then
!exit
if ((abs(svalv(neig)-Vk(neig))/Vk(neig)).lt.toler)then
exit
else
svalv(neig)=Vk(neig)
iconv=0
go to 100
endif
else
if (ipred .eq. 2) then
iout = -2
Return
endif
endif
ENDDO
USE Sparse_SCSR
Implicit NONE
type(SCSR) :: A, B
Integer :: nc, pren, iout
Integer :: i, j, l, ij, ix, k, nd, diag
Real(kind=8) :: rt, pi, xx
Real(kind=8) :: ev(A%n,nc), preev(A%n,pren), &
w(A%n), tt(A%n)
213
else
! First vector = B diagonal
do i = 1, A%n
ev(i,1) = B%Val(B%i(i+1)-1)
enddo
Return
End
214
Subroutine SIM_Prediction2(A, B, nc, ev, preev, pren)
!****************************************************************************
! This subroutine makes a first prediction of the eigenvectors
! These will be used to start the iteration method
!
!****************************************************************************
USE Sparse_SCSR
Implicit NONE
type(SCSR) :: A, B
Integer :: nc, pren, first, last
Integer :: i, j, l, ij, ix, k, nd, diag
Real(kind=8) :: rt, pi, xx
Real(kind=8) :: ev(A%n,nc), preev(A%n,pren),
. w(A%n), tt(A%n)
215
CÓDIGOS NUEVOS (CFYFP)
SUBROUTINE ALMACEN(STIF,NTOT,A)
C --------------------------------------------------------------------------------------
C
C
C SUBRUTINA QUE DADA UNA MATRIZ LA ALMACENA EN FORMATO SPARSE
C
C Se realiza el almacenamiento en formato Sparse de una matriz completa por filas.
C
C EL SIGNIFICADO DE LAS VARIABLES UTILIZADAS ES LA SIGUIENTE:
C
C A%n ----> Número de filas/columnas de la matriz
C A%nnz --> Dimensión del vector que incluye todos los elementos no nulos de la matriz
C A%Val --> Valores de la matriz en formato Sparse por filas (matriz entera), dimensión =
A%Val(A%nnz)
C A%j ----> Posición columna de los valores de la matriz A, dimensión = A%j(A%nnz)
C A%i ----> Posición del vector A%Val en la que empieza una nueva fila de la matriz, contiene un
elemento
C más de los estrictamente necesarios debido al funcionamiento de las rutinas
siguientes.
C
C ---------------------------------------------------------------------------------------
Use Sparse_SCSR
IMPLICIT NONE
TYPE(SCSR) ::A
INTEGER::COL,FIL ,NTOT,AUX,p,o
REAL(KIND=8), DIMENSION(NTOT,NTOT) ::STIF
C HAGO UN PRIMER RECORRIDO SOBRE LA MATRIZ PARA CONOCER LAS DIMENSIONES DE LA MATRIZ
AUX=0
DO FIL=1,NTOT
DO COL=1,NTOT
IF (STIF(FIL,COL).NE.0) THEN
AUX=AUX+1
ENDIF
ENDDO
ENDDO
A%i(A%n+1)=A%nnz+1
RETURN
END
216
SUBROUTINE ANIMACION(VEC,F,NTOTV,CPROB)
C RUTINA QUE DADO UN VECTOR PROPIO CREA LOS DATOS NECESARIOS PARA
C
C OBTENER UNA ANIMACIÓN DE LA FORMA PROPIA
C
IMPLICIT NONE
INTEGER::AUX2,AUX3,F,I,II,III,J,NGPOIN,NTOTV
REAL(KIND=8)::A
REAL(KIND=8),DIMENSION(NTOTV) ::VEC,VECNORM,VECMIN,VECPAS
CHARACTER(LEN=33) CPROB
CHARACTER(LEN=50) NOM
CHARACTER(LEN=45) NOMBRE1,NOMBRE2
CHARACTER(LEN=12) ELTYP,GAUSNAM,MESHNAM
CHARACTER(LEN=10) TERM
CHARACTER(LEN=2) FCHAR
IF(F.EQ.0)THEN
return
ENDIF
A=MAXVAL(ABS(VEC))
VECNORM=VEC/A
VECMIN=VECNORM*(-1)
VECPAS=VECNORM/10
DO J=1,33
IF (CPROB(J:J).EQ.'.') II=(J-1);
ENDDO
TERM='.post.res'
IF (F<10) THEN
write(FCHAR,'(I1)')F
III=1
ELSE
write(FCHAR,'(I2)')F
III=2
ENDIF
NOM='Animacion-F'//FCHAR(1:III)//'-'//CPROB(1:II)//TERM
open(unit=24,file=NOM,status='unknown')
IF(N.EQ.8) THEN
ELTYP ='HexaHedra'
MESHNAM ='"HEXA-G8"'
GAUSNAM ='"HEXA-G8"'
NGPOIN = 8
ELSE
ELTYP ='TetraHedra'
MESHNAM ='"TETRA-G1"'
GAUSNAM ='"TETRA-G1"'
NGPOIN = 1
ENDIF
217
C ESCRITURA ENCABEZAMIENTO DEL FICHERO PARA GID
WRITE(24,*)
WRITE(24,310) 'GaussPoints',GAUSNAM,'Elemtype',ELTYP,MESHNAM
WRITE(24,*)
DO I=1,20
AUX2=1
AUX3=1
NOMBRE1 = «"ANIMACIÓN'
NOMBRE2 = 'ª FRECUENCIA" “DISPLACEMENTS"'
WRITE(24,101) NOMBRE1,F,NOMBRE2,I
WRITE(24,*) 'Values'
WRITE(24,110)AUX3,VECMIN(AUX2),VECMIN(AUX2+1),VECMIN(AUX2+2)
AUX2=AUX2+3
AUX3=AUX3+1
DO AUX3=2,(NTOTV/3)
WRITE(24,110)AUX3,VECMIN(AUX2),VECMIN(AUX2+1),VECMIN(AUX2+2)
AUX2=AUX2+3
ENDDO
VECMIN=VECMIN+VECPAS
ENDDO
DO I=21,40
AUX2=1
AUX3=1
NOMBRE1 = «"ANIMACIÓN'
NOMBRE2 = 'ª FRECUENCIA" “DISPLACEMENTS"'
WRITE(24,101) NOMBRE1,F,NOMBRE2,I
WRITE(24,*) 'Values'
WRITE(24,110)AUX3,VECMIN(AUX2),VECMIN(AUX2+1),VECMIN(AUX2+2)
AUX2=AUX2+3
AUX3=AUX3+1
DO AUX3=2,(NTOTV/3)
WRITE(24,110)AUX3,VECMIN(AUX2),VECMIN(AUX2+1),VECMIN(AUX2+2)
AUX2=AUX2+3
ENDDO
218
VECMIN=VECMIN-VECPAS
ENDDO
C FORMATOS UTILIZADOS
110 FORMAT(I5,1X,E25.15,1X,E25.15,1X,E25.15)
101 FORMAT(6HResult,1X,A11,I2,A32,1X,I3,1X,
. 6HVector,1X,7HOnnodes)
310 FORMAT(1X,A11,2X,A12,5X,A8,3X,A12,3X,A12)
320 FORMAT(1X,A24,I3)
RETURN
END
SUBROUTINE ESCRIBIR(EIGENFREQ,NEIG,NTOTV,SVECC,DAN,I,AUX,CPROB,N)
C --------------------------------------------------------------------------------------
C
C SUBRUTINA QUE SE ENCARGA DE ESCRIBIR LOS RESULTADOS
C EN UN FICHERO PARA SU POSTERIOR POSTPROCESADO
C
C NOTAS:
C *Es una rutina pensada para hexaedros de 8 nodos o tetraedros de 4.
C *I--> sirve para escribir el encabezado solamente la primera vez, nos indica si es el
C caso elástico o si la estructura ya ha sido dañada.
C *Aux--> indica el caso en el que nos encontramos, el 1 será el caso base y los demás
C irán sumando valores, cada valor diferente representa una actualización de la
C matriz de rigidez.
C *N--> vale 8 si es un problema con hexaedros y 4 si son tetraedros.
C
C ---------------------------------------------------------------------------------------
IMPLICIT NONE
INTEGER::AUX,AUX2,AUX3,B,I,II,J,NEIG,NGPOIN,NTOTV,C,N
REAL(KIND=8)::A,STEPV,DAN
REAL(KIND=8), DIMENSION(NTOTV,NEIG) ::SVECC,AUXFORM
REAL(KIND=8), DIMENSION (NEIG) ::EIGENFREQ
CHARACTER(LEN=12) ELTYP,GAUSNAM,MESHNAM
CHARACTER(LEN=45) NOMBRE1,NOMBRE2
CHARACTER(LEN=33) CPROB
CHARACTER(LEN=68),DIMENSION(2) ::NOM
CHARACTER(LEN=10),DIMENSION(2) ::TERM
C NORMALIZAR LAS FORMAS PROPIAS DE TAL FORMA QUE EL VALOR MÁXIMO SEA 1
DO B=1,NEIG
A=MAXVAL(SVECC(:,B))
C=MINVAL(SVECC(:,B))
IF(ABS(A).GT.ABS(C))THEN
AUXFORM(:,B)=(SVECC(:,B))/A
SVECC(:,B)=AUXFORM(:,B)
ELSE
AUXFORM(:,B)=(SVECC(:,B))/C
SVECC(:,B)=AUXFORM(:,B)
ENDIF
ENDDO
219
IF(I.EQ.1)THEN
GOTO 100
ENDIF
DO J=1,33
IF (CPROB(J:J).EQ.'.') II=(J-1);
ENDDO
TERM(1)='.post.res'
TERM(2)='.res'
NOM(1)=CPROB(1:II)//'F'//TERM(1)
NOM(2)='Frecuencia-daño-'//CPROB(1:II)//TERM(2)
open(unit=4,file=NOM(1),status='unknown')
open(unit=5,file=NOM(2),status='unknown')
IF(N.EQ.8) THEN
ELTYP ='HexaHedra'
MESHNAM ='"HEXA-G8"'
GAUSNAM ='"HEXA-G8"'
NGPOIN = 8
ELSE
ELTYP ='TetraHedra'
MESHNAM ='"TETRA-G1"'
GAUSNAM ='"TETRA-G1"'
NGPOIN = 1
ENDIF
WRITE(4,*)
WRITE(4,310) 'GaussPoints',GAUSNAM,'Elemtype',ELTYP,MESHNAM
WRITE(4,*)
WRITE(5,*)
WRITE(5,*)
C ESCRITURA RESULTADOS
DO J=1,NEIG
AUX2=1
AUX3=1
220
NOMBRE1 = «"DEFORMADA,'
NOMBRE2 = 'ª FRECUENCIA" “DISPLACEMENTS"'
WRITE(4,101) NOMBRE1,J,NOMBRE2,STEPV
WRITE(4,*) 'Values'
WRITE(4,110)AUX3,SVECC(AUX2,J),SVECC(AUX2+1,J),SVECC(AUX2+2,J)
AUX2=AUX2+3
AUX3=AUX3+1
DO AUX3=2,(NTOTV/3)
WRITE(4,110)AUX3,SVECC(AUX2,J),SVECC(AUX2+1,J),SVECC(AUX2+2,J)
AUX2=AUX2+3
ENDDO
ENDDO
WRITE(5,502) DAN,(EIGENFREQ(J),J=1,NEIG)
C FORMATOS UTILIZADOS
101 FORMAT(6HResult,1X,A11,I2,A32,1X,F12.6,1X,
. 6HVector,1X,7HOnnodes)
310 FORMAT(1X,A11,2X,A12,5X,A8,3X,A12,3X,A12)
320 FORMAT(1X,A24,I3)
501 FORMAT(4X,A5,5X,5(A14,2X))
502 FORMAT(1X,F12.10,1X,10(F15.10,1X))
RETURN
END
SUBROUTINE VectProp(svec,NEIG,CRED,NTOTV,SVECC,VREST)
C --------------------------------------------------------------------------------------
C
C SUBRUTINA QUE DADO UN VECTOR PROPIO CON LOS VALORES DE LOS
C NODOS NO RESTRINGIDOS, DEVUELVE EL VECTOR COMPLETO
C ---------------------------------------------------------------------------------------
IMPLICIT NONE
INTEGER::NEIG,CRED,NTOTV,AUX1,AUX2,AUX3
REAL(KIND=8), DIMENSION(CRED,NEIG) ::SVEC
REAL(KIND=8), DIMENSION(NTOTV,NEIG) ::SVECC
REAL(KIND=8), DIMENSION (NTOTV) ::VREST
SVECC(:,:)=0.0
DO AUX1=1,NEIG
AUX3=1
DO AUX2=1,NTOTV
IF (VREST(AUX2).EQ.1) THEN
SVECC(AUX2,AUX1)=0
ELSE
SVECC(AUX2,AUX1)=SVEC(AUX3,AUX1)
AUX3=AUX3+1
ENDIF
ENDDO
ENDDO
RETURN
END
221
PROGRAM CFYFP
C---------------------------------------------------------------------------
C
C RUTINA PRINCIPAL DEL CFYFP
C
C
C Cálculo de Frecuencias Y Formas Propias
C
C
C
C Esta rutina se encarga de procesar los datos extraídos del PLCD
C y adecuarlos a la rutina implementada por Xavier Martínez para el
C cálculo de valores y formas propias utilizando el SIM (Subspace
C Iteration Method). Utilizando esas rutina calcula las frecuencias y
C las formas propias de las estructuras. Finalmente se escribe los valores
C obtenidos en varios ficheros de salida para su posterior postproceso.
C JBLL 03/06/2011
C
C---------------------------------------------------------------------------
C DECLARACIÓN VARIABLES
INTEGER::A,AUX,AUX3,AUX4,AUX5,AUX6,AUX7,AUXRED,AUXV,CARG,COMP,
. CONTROL,CRED,CTRL,CTRL2,CTRL3,CTRL4,CTRL6,DIR,ELAST,ELDIS,
. ELEMC,ELEMV,EMAT,FANIM,GLOBC,GLOBF,I,I2,IDIME,IGAUS,
. IGAUSL,ELEMF,ELEMO,iitersim,IKON,IMAT,INDX,INDXB 5,INODE,
. IOUTSIM,IPOIN,JGAUS,JGAUSL,JMAT,LGAUS,LGAUSL,MAXI,NC,NEIG,
. new_size,PASON,PASOV,PGAUS,RES,RESTX,RESTY,RESTZ,STURM1,
. STURM2,pred,npred,TMAT,AESTIF,IAUX
REAL(8)::AUX1,AUX2,DESPX,DESPY,DESPZ,DJACB,DVOL,ETASP,EXISP,EZETA,
. PESO,PESO1,TOLERSIM,DAN,A1,A2,A3
TYPE(SCSR) ::SPARK,SPARM
OPEN(UNIT=41,FILE='Co.txt', STATUS='UNKNOWN',
.POSITION='REWIND',FORM='UNFORMATTED')
OPEN(UNIT=42,FILE='Csec.txt', STATUS='UNKNOWN',
.POSITION='REWIND',FORM='UNFORMATTED')
OPEN(UNIT=56,FILE='Datosgen.txt', STATUS='UNKNOWN',
.POSITION='REWIND')
OPEN(UNIT=57,FILE='Strsg.txt', STATUS='UNKNOWN',
.POSITION='REWIND',FORM='UNFORMATTED')
OPEN(UNIT=58,FILE='Daño.txt', STATUS='UNKNOWN',
.POSITION='REWIND')
222
C LEER LOS DATOS DE ENTRADA GENERALES
READ(56,*)CPROB
READ(56,*)TYPEP
READ(56,*)NPOIN,NELEM,NMATC,LARGE
READ(56,*)NNODE
NTOTV=NPOIN*3;
CALL ALOKA_V3D
ALLOCATE(CON(NELEM,NNODE));
ALLOCATE(COOR(NPOIN,3));
ALLOCATE(DENS(NMATC));
ALLOCATE(MAS(NTOTV,NTOTV));
ALLOCATE(MASAUX(NTOTV,NTOTV));
ALLOCATE(MASRED(NTOTV,NTOTV));
ALLOCATE(MAT(NELEM));
ALLOCATE(RESTR(NPOIN,4));
ALLOCATE(STIFAUX(NTOTV,NTOTV));
ALLOCATE(STIFFGP(NTOTV,NTOTV));
ALLOCATE(STIFFGO(NTOTV,NTOTV));
ALLOCATE(STIFRED(NTOTV,NTOTV));
ALLOCATE(VBAS6(2,NPOIN));
ALLOCATE(VB6(2));
ALLOCATE(VCO(NMATC,36));
ALLOCATE(VECB(9*NNODE*NNODE));
ALLOCATE(VRESTR(NTOTV));
ALLOCATE(MATEULER(NELEM,3));
ALLOCATE(AUXELEM(NELEM));
C LEER CONECTIVIDADES
DO IELEM=1,NELEM
READ(56,*)ELEM,EMAT,NTYPE,EFASE,NNODE,NGAUS,NINTE,
. CON(ELEM,:),MATEULER(ELEM,1),MATEULER(ELEM,2),
. MATEULER(ELEM,3)
MAT(ELEM)=EMAT
ENDDO
CALL TYPEV3D
DO I=1,NPOIN
READ(56,*)A,COOR(I,:)
ENDDO
C LEER RESTRICCIONES
RESTR=0.0
DO WHILE(.NOT.EOF(56))
READ(56,*)IPOIN,RES,DESPX,DESPY,DESPZ
RESTR(IPOIN,1)=RES
RESTR(IPOIN,2)=DESPX
RESTR(IPOIN,3)=DESPY
RESTR(IPOIN,4)=DESPZ
ENDDO
NGLIBA=0
DO IPOIN=1,NPOIN
NGLIBL=3
NGLIBA=NGLIBA+NGLIBL
CALL BASE6I_V3D(IPOIN)
ENDDO
C CONSTANTES DE INTEGRACIÓN
IF(NNODE.EQ.8) THEN
POSGP(1)=-1.0D0/DSQRT(3.0D0)
POSGP(2)=1.0D0/DSQRT(3.0D0)
223
WEIGP(1)=1.0D0
WEIGP(2)=1.0D0
ELSE
POSGP(1)=1.0D0/4.D0
WEIGP(1)=1.0D0/6.D0;
ENDIF
READ(41)EMAT,VCO(EMAT,:),DENS(EMAT)
ENDDO
C CÁLCULO DEL TAMAÑO DEL ARCHIVO Ctan.TXT PARA PODER ALOCAR LOS VECTORES Y USAR LOS DATOS
DO WHILE (.not.eof(42))
READ(42)AUX,ELEM,PGAUS,CARG,PASON,VCTAN
CTRL2=CTRL2+1
ENDDO
C MIRO DE QUE ELEMENTOS NECESITARÁN ACTUALIZARSE EN DAÑO PARA GUARDAR LA RI GUIDEZ
ELEMENTAL
AUXV=AUX
ELEMO=0
TMAT=0
REWIND(42)
DO I=1,CTRL2
READ(42)AUX,ELEM,PGAUS,CARG,PASON,VCTAN
IF((AUX.EQ.AUXV).AND.(ELEMO.NE.ELEM))THEN
TMAT=TMAT+1
ELEMO=ELEM
AUXELEM(TMAT)=ELEM
ENDIF
ENDDO
C ALOCO MATRIZ AUXILIAR PARA GUARDAR LAS RIGIDECES INICIALES DE LOS ELEMENTOS QUE SE DAÑARÁN
ALLOCATE(ESTIFES(TMAT,9*NNODE*NNODE+1));
STIFFGO(:,:)=0.0
MAS(:,:)=0.0
AESTIF=1
IAUX=1
DO ELEM=1,NELEM
DO I=1,NNODE
ELCOD(1,I)=COOR(CON(ELEM,I),1)
ELCOD(2,I)=COOR(CON(ELEM,I),2)
ELCOD(3,I)=COOR(CON(ELEM,I),3)
ENDDO
KGASP=0
STRSG(:)=0 !Para pequeñas deformaciones, si son grandes se actualiza el valor
FGRAD(:,:)=1 !Para el primer caso, no se usa (da igual el valor)
ESTIF(:,:)=0.0 !Ponemos la matriz de rigidez elemental a 0.
CALL MASMATV3D(ELEM,MAT,COOR,DENS)
DO IGAUS=1,NGAUX
DO JGAUS=1,NGAUY
DO LGAUS=1,NGAUZ
EXISP=POSGP(IGAUS)
ETASP=POSGP(JGAUS)
EZETA=POSGP(LGAUS)
CALL SFR3D(EXISP,ETASP,EZETA)
224
KGASP=KGASP+1
CALL JACOB3D(XJACM,DJACB,GPCOD)
CALL BMATSOL_V3D(BMATX,GPCOD,FGRAD)
CALL COMPON_V3D(VCO(MAT(ELEM),:),CO,36,1,1)
PESO=WEIGP(JGAUS)
PESO1=WEIGP(LGAUS)
DVOL=DJACB*WEIGP(IGAUS)*PESO*PESO1
IF(LARGE.EQ.1)THEN
READ(57)INDX,PGAUS,ICARG,IINCS,STRSG
ENDIF
A1 = MATEULER(ELEM,1)
A2 = MATEULER(ELEM,2)
A3 = MATEULER(ELEM,3)
C ------ ESTABL ECE LA MATRIZ CONSTITUTIVA DEL COMPUESTO DE CADA ELEMENTO EN S. GLOBAL
IF(A1**2+A2**2+A3**2.GT.1.e-9) THEN
dir = 2 ! local Elemento to global Estructura
call ROTM(CO,A1,A2,A3, mstr1, dir)
END IF
CALL KMATRI_V3D(BMATX,DVOL,CO,STRSG)
ENDDO
ENDDO
ENDDO
IKON=0
DO IMAT=1,3*NNODE
DO JMAT=1,3*NNODE
IKON = IKON + 1
VECB(IKON) = ESTIF(IMAT,JMAT)
ENDDO
ENDDO
IF(ELEM.EQ.AUXELEM(IAUX))THEN
ESTIFES(AESTIF,1)=ELEM
ESTIFES(AESTIF,2:) =VECB(:)
AESTIF=AESTIF+1
IAUX=IAUX+1
ENDIF
F(1:8)=1.0
DO ELEMF=1,3*NNODE
C(1:8)=1.0
DO ELEMC=1,3*NNODE
AUX1=(ELEMF*0.333)+0.9
AUX2=(ELEMC*0.333)+0.9
AUX3=AUX1
AUX4=AUX2
GLOBF=((CON(ELEM,AUX3)-1)*3)+F(AUX3)
GLOBC=((CON(ELEM,AUX4)-1)*3)+C(AUX4)
C(AUX4)=C(AUX4)+1
STIFFGO(GLOBF,GLOBC)=STIFFGO(GLOBF,GLOBC)
. +ESTIF(ELEMF,ELEMC)
MAS(GLOBF,GLOBC)=MAS(GLOBF,GLOBC)+EMASA(ELEMF,ELEMC)
225
ENDDO
F(AUX3)=F(AUX3)+1
ENDDO
ESTIF(:,:)=0.0
ENDDO !Cierra Bucle sobre los elementos
C REDUCIMOS LA MATRIZ
VRESTR=0.0
DO I=1,NPOIN
RESTX=(RESTR(I,1))/100
RESTY=(RESTR(I,1)-(RESTX*100))*0.1
RESTZ=RESTR(I,1)-RESTX*100-RESTY*10
VRESTR(3*I-2)=RESTX
VRESTR(3*I-1)=RESTY
VRESTR(3*I)=RESTZ
IF (RESTR(I,2).NE.0)THEN
VRESTR(3*I-2)=0
ENDIF
IF (RESTR(I,3).NE.0)THEN
VRESTR(3*I-1)=0
ENDIF
IF (RESTR(I,4).NE.0)THEN
VRESTR(3*I)=0
ENDIF
ENDDO
STIFAUX(:,:)=0.0
STIFRED(:,:)=0.0
MASAUX(:,:)=0.0
MASRED(:,:)=0.0
DO I=1,NTOTV
IF(VRESTR(I).EQ.0)THEN
STIFAUX(CRED+1,:)=STIFFGO(I,:)
MASAUX(CRED+1,:)=MAS(I,:)
CRED=CRED+1
ENDIF
ENDDO
DO I=1,NTOTV
IF(VRESTR(I).EQ.0) THEN
STIFRED(:,AUXRED+1)=STIFAUX(:,I)
MASRED(:,AUXRED+1)=MASAUX(:,I)
AUXRED=AUXRED+1
ENDIF
ENDDO
ALLOCATE(STIFRED2(CRED,CRED))
ALLOCATE(MASRED2(CRED,CRED))
STIFRED2=STIFRED(1:CRED,1:CRED)
MASRED2=MASRED(1:CRED,1:CRED)
C DO I=1,CRED
C WRITE(60,10)MASRED2(I,:)
C WRITE(61,10)STIFRED(I,1:500)
C ENDDO
CALL ALMACEN(STIFRED2,CRED,SPARK)
CALL ALMACEN(MASRED2, CRED,SPARM)
DEALLOCATE(STIFRED2,MASRED2,MASRED,MASAUX,MAS)
DEALLOCATE(STIFRED,STIFAUX)
OPEN(UNIT=59,FILE='Frecuencias.dts', STATUS='UNKNOWN',
226
.POSITION='REWIND')
READ(59,*)NEIG,TOLERSIM,MAXI,FANIM
C NEIG=7 !Nº Eigen values que se quieren calcular
C TOLERSIM=1.0e-3 !Tolerancia
C MAXI=1000000 !Nº max. de iteraciones
C FANIM=3 !Nº forma propia de la que se quiere crear una animación
pred=0
ALLOCATE(EIGENFREQ(NEIG))
ALLOCATE(SVAL(NEIG))
ALLOCATE(SVEC(SPARK%N,NEIG))
ALLOCATE(SVECC(NTOTV,NEIG))
ALLOCATE(SPRED(SPARK%N,NPRED))
CALL Eigen_SIM(SPARK,SPARM,0,sval,svec,neig,tolersim,maxi,ioutsim,
. iitersim,2,0,0,pred, spred,npred)
do i=1,neig
eigenfreq(i)= (Sqrt(sval(i)))/(2*3.14159)
enddo
CALL VectProp(svec,NEIG,CRED,NTOTV,SVECC,VRESTR)
CALL ESCRIBIR(eigenfreq,NEIG,NTOTV,SVECC,0,0,1,CPROB,NNODE)
C TRANSFORMAR DATOS PARA PODER CREAR UNA ANIMACIÓN DEL VECTOR PROPIO DESEADO
DO I=1,FANIM
CALL ANIMACION(SVECC(:,I),I,NTOTV,CPROB)
ENDDO
C VOLVEMOS AL PRINCIPIO DEL ARCHIVO Y LLENAMOS LOS VECTORES QUE ACABAMOS DE CREAR
REWIND(42)
DO I=1,CTRL2
READ(42)AUX,ELEM,PGAUS,CARG,PASON,VCTAN
VAUX(I)=AUX
VELEM(I)=ELEM
VPGAUS(I)=PGAUS
ENDDO
100 I=1+CTRL3
DO WHILE (VAUX(I).EQ.VAUX(I+1))
I=I+1
CTRL3=CTRL3+1
ENDDO
227
CTRL3=CTRL3+1 !Porque el último no lo suma ya que es diferente del siguiente
CTRL4=1 !Cuantos elementos distintos se tienen que actualizar
DO I=AUX5+1,CTRL3-1
IF(VELEM(I).NE.VELEM(I+1))THEN
CTRL4=CTRL4+1
ENDIF
AUX5=I
ENDDO
C SÓLO LO HEMOS DE LEER AQUÍ LA PRIMERA VEZ LAS OTRAS YA SE LEEN DENTRO DEL BUCLE
IF (CTRL6.EQ.1)THEN
REWIND(42)
READ(42)AUX,ELEM,PGAUS,CARG,PASON,VCTAN
IGAUSL=PGAUS*0.01
JGAUSL=(PGAUS-(IGAUSL*100))*0.1
LGAUSL=PGAUS-IGAUSL*100-JGAUSL*10
CTRL6=2 !Para que sólo entre una vez
AUX6=AUX6+1 !Contador para evitar que en el último caso intente leer
ENDIF !el archivo cuando ya se hayan terminado los datos.
AUX7=1
DO I=1,CTRL4
DO I2=1,NNODE
ELCOD(1,I2)=COOR(CON(ELEM,I2),1)
ELCOD(2,I2)=COOR(CON(ELEM,I2),2)
ELCOD(3,I2)=COOR(CON(ELEM,I2),3)
ENDDO
KGASP=0
ELEMV=ELEM
DO IGAUS=1,NGAUX
DO JGAUS=1,NGAUY
DO LGAUS=1,NGAUZ
IF ((IGAUSL.EQ.IGAUS).AND.(JGAUSL.EQ.JGAUS).AND.
. (LGAUSL.EQ.LGAUS).AND.(E LEMV.EQ.ELEM))THEN
CALL COMPON_V3D(VCTAN,CTAN,36,1,1)
CONTROL=1 !Sirve para indicar si hemos usado el Ctan y necesitamos leer el siguiente
ELSE
CALL COMPON_V3D(VCO(MAT(ELEMV),:),CTAN,36,1,1)
!Se llama Ctan pero en este caso sería Co, pero es para no hacer
!los mínimos cambios en el código
CONTROL=0
ENDIF
EXISP=POSGP(IGAUS)
ETASP=POSGP(JGAUS)
EZETA=POSGP(LGAUS)
CALL SFR3D(EXISP,ETASP,EZETA)
KGASP=KGASP+1
CALL JACOB3D(XJACM,DJACB,GPCOD)
CALL BMATSOL_V3D(BMATX,GPCOD,FGRAD)
C CALCULAR DVOL
PESO=WEIGP(JGAUS)
PESO1=WEIGP(LGAUS)
DVOL=DJACB*WEIGP(IGAUS)*PESO*PESO1
A1 = MATEULER(ELEM,1)
A2 = MATEULER(ELEM,2)
A3 = MATEULER(ELEM,3)
228
IF(A1**2+A2**2+A3**2.GT.1.e-9) THEN
dir = 2 ! local Elemento to global Estructura
call ROTM(CTAN,A1,A2,A3, mstr1, dir)
END IF
CALL KMATRI_V3D(BMATX,DVOL,CTAN,STRSG)
ENDDO
ENDDO
ENDDO
IKON=1
DO IMAT = 1, 3*NNODE
DO JMAT = 1, 3*NNODE
IKON = IKON+1
ESTIFO(IMAT,JMAT) = ESTIFES(AESTIF,IKON)
ENDDO
ENDDO
IF (AUX7.EQ.1) THEN
STIFFGP=STIFFGO
AUX7=2
ENDIF
F(1:8)=1.0
DO ELEMF=1,3*NNODE
C(1:8)=1.0
DO ELEMC=1,3*NNODE
AUX1=(ELEMF*0.333)+0.9
AUX2=(ELEMC*0.333)+0.9
AUX3=AUX1
AUX4=AUX2
GLOBF=((CON(ELEMV,AUX3)-1)*3)+F(AUX3)
GLOBC=((CON(ELEMV,AUX4)-1)*3)+C(AUX4)
C(AUX4)=C(AUX4)+1
STIFFGP(GLOBF,GLOBC)=STIFFGP(GLOBF,GLOBC)
. -ESTIFO(ELEMF,ELEMC)+ESTIF(ELEMF,ELEMC)
ENDDO
F(AUX3)=F(AUX3)+1
ENDDO
ESTIF(:,:)=0.0
ENDDO
C REDUCIMOS LA MATRIZ
ALLOCATE(STIFRED(NTOTV,NTOTV));
ALLOCATE(STIFAUX(NTOTV,NTOTV));
STIFAUX(:,:)=0.0
STIFRED(:,:)=0.0
229
AUXRED=0
DO I=1,NTOTV
IF(VRESTR(I).EQ.0)THEN
STIFAUX(AUXRED+1,:)=STIFFGP(I,:)
AUXRED=AUXRED+1
ENDIF
ENDDO
AUXRED=0
DO I=1,NTOTV
IF(VRESTR(I).EQ.0) THEN
STIFRED(:,AUXRED+1)=STIFAUX(:,I)
AUXRED=AUXRED+1
ENDIF
ENDDO
STIFFGP=0.0
C GUARDAMOS LA RIGIDEZ EN FORMATO SPARSE UNA VEZ HEMOS ACUTALIZADO TODO EL PASO
ALLOCATE(STIFRED2(CRED,CRED))
STIFRED2=STIFRED(1:CRED,1:CRED)
IF(aux.eq.18)THEN
DO AUX7=1,CRED
WRITE(61,12)STIFRED2(AUX7,:)
ENDDO
ENDIF
CALL ALMACEN(STIFRED2,CRED,SPARK)
DEALLOCATE(STIFRED2,STIFRED,STIFAUX)
pred=1
ALLOCATE(EIGENFREQ(NEIG))
ALLOCATE(SVAL(NEIG))
ALLOCATE(SVEC(SPARK%N,NEIG))
ALLOCATE(SVECC(NTOTV,NEIG))
CALL Eigen_SIM(SPARK,SPARM,0,sval,svec,neig,tolersim,maxi,
. new_size,iitersim,2,0,0,pred,spred,npred)
IF(SVAL(1).LT.0)THEN
GO TO 300
ENDIF
do i=1,neig
eigenfreq(i)= (Sqrt(sval(i)))/(2*3.14159)
enddo
CALL VectProp(svec,NEIG,CRED,NTOTV,SVECC,VRESTR)
IF(AUX6.EQ.CTRL2)THEN
AUX=AUX+1
ENDIF
READ(58,*)DAN
CALL ESCRIBIR(eigenfreq,NEIG,NTOTV,SVECC,DAN,1,AUX,CPROB,NNODE)
300 DEALLOCATE(EIGENFREQ,SVAL,SVEC,SVECC)
IF(AUX6.EQ.CTRL2)THEN !Para salir del bucle una vez haya llegado al final
CONTINUE
230
ELSE
GO TO 100
ENDIF
10 FORMAT(500F15.4)
11 FORMAT(48F15.4)
12 FORMAT(500F15.4)
96 FORMAT(4I6,36F13.3)
97 FORMAT(24F13.3)
98 FORMAT(24F13.10)
99 FORMAT(I2,36F13.3,1XF8.3)
END
CÓDIGO MALLAS-ANIMACIÓN.BAT
@echo off
Title JBLL--Crear mallas para las animaciones
color F
echo ========================================
echo = JBLL =
echo = =
echo = =
echo = CREACION DE LAS CARPETAS Y MALLAS =
echo = PARA USAR LAS ANIMACIONES EN EL =
echo = GID =
echo = =
echo = =
echo ========================================
echo.
echo.
set /p NOM=Nombre del problema resuelto:
set /p NUM=Numero de animaciones creadas:
:BUCLE
set /a contador=contador+1
md Animacion-%contador%
copy “*.post.msh" Animacion-%contador%\"Animacion-F%contador%-%NOM%.post.msh"
copy “Animacion-F%contador%-%NOM%.post.res" Animacion-%contador%\"Animacion-F%contador%-
%NOM%.post.res"
del “Animacion-F%contador%-%NOM%.post.res"
copy “*.post.msh" "%NOM%F.post.msh"
del *.61
del *.7
exit
231
232
Anejo II: Archivos de entrada/salida
233
234
Archivo de entrada --- Viga3d.dts
MEC3D
2
011
0
START1
Test02-Implicit_3D_threedimensional_problem
176 90 1 3 3 1 20 1 2 1 3 1 0
112061821152150166168 156 154 171 173 0 0 0
... ... ... ... ... ... ... ... ... ..... ..... ..... ..... ..... ..... ..... ..... .. .. ..
901206182126111331 33 15 19 38 0 0 0
1 1
P 1 0 0 0 1 1 1
1 0 0.3 1
2 0 0.2 1
... ... ..... ...
176 0.3 0 0
---------------------------------------------- Material identifier: PVC ---------------------------
-------------------
1
334213
37000000 0.2 0 2.4 30 30 30000
1 0 5000 0 0 1.0
1 0 0 0 0 50
1 0 0
000
1 0.1 3.5 1
30000 1 1 0 0 1.0
000
0.2 37000000 0.2 0.2 37000000 0.2 0.2 0 0 0
, 0 0 0
111111
111111
0 0
0 0 0 0
0 0
0 0 0 0
0
0
0
---------------------------------------------- END STANDARD MATERIAL PROPERTIES -------------------- -------------------
-------
CURV, 1
Curve1
X:DISPL,
75 1 1
Y:RCTOT,
2
1
Title: Stage1
1 1
1 20 0 0 0 0 1 0 0 0
No_Thermal_Loads
12 0
25 111 0.000000 0.000000 0.000000
.... ..... .............. .............. ..............
176 111 0.000000 0.000000 0.000000
0
0
10 0.0005 0.05 0.0001 50 0 0 1 1 2 0 0 0 0 1 11 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
235
Archivo de salida --- viga3d.post.res
GiD Post Results File 1.0
# 1 (2E20.8)
# 1 0
#Curve1
#X:DISPL 75 1 1 0 0
#Y:RCTOT 2 0 0 0 0
0.00000000E+00 0.00000000E+00
-0.32977191E-05 0.73127442E+02
-0.65954382E-05 0.14625488E+03
-0.97787578E-05 0.21464509E+03
-0.12861134E-04 0.27975669E+03
-0.15780647E-04 0.34003745E+03
-0.18762895E-04 0.40315489E+03
-0.21538668E-04 0.46130597E+03
-0.24332676E-04 0.51594304E+03
-0.26888306E-04 0.56269818E+03
236
Archivo de salida --- viga3d.mec.sal
------------------------------------------------------
!ooooooooo. ooooo .oooooo. oooooooooo. !
!`888 `Y88. `888 d8P `Y8b `888 `Y8b !
! 888 .d88 888 888 888 888!
! 888ooo88P 888 888 888 888!
! 888 888 888 888 888!
! 888 888 o `88b ooo 888 d88 !
!o888o o888ooooood8 `Y8bood8P o888bood8P !
------------------------------------------------------
! !
!Programa de ELEMENTOS FINITOS para resolver:
! * Problemas con no linealidad geometrica y constitutiva.
! * Problemas de fr actura y localizacion de deformaciones inelasticas.
! * Problemas de materiales compuestos mediante la teoria de mezclas.
! * Problemas de anisotropia general mediante la teoria se mapeo de espacios.
! * Resuelve problemas de: Tension plana. !
! Deformacion plana. !
! Axil Simetria. !
! Barras de Timoshenko, !
! Barras articuladas. !
! * Utiliza Elementos : Planos 3,4,6,8 y 9 N, !
! de Timosh. 2 y 3 N, !
! articul. 2 y 3 N. !
-----------------------------------------------------
-->>> TIEMPO 0: 0: 0
................................................................................................ .........
ELEMENTS DEFINITION :
-------------------
ELEMENT MATNO FRACL NTYPE, NFASE NNODE NGAUS NINTE, NODE NUMBERS
ÁNGULOS
1 1 0.000 6 1 8 2 1 152 150 166 168 156 154 171 173 0.00
0.00 0.00
2 1 0.000 6 1 8 2 1 153 152 168 169 159 156 173 175 0.00
0.00 0.00
..... .... ........ .... .... .... .... .... ...... ..... ..... ..... ..... ..... ..... ..... .......
237
90 1 0.000 6 1 8 2 1 26 11 13 31 33 15 19 38 0.00
0.00 0.00
COORDINATES DEFINITION :
----------------------
MATERIAL NUMBER: 1
---------------
RENUMBERED NODES :
----------------
OLD NEW NEW OLD
1 2 1 2
2 1 2 1
3 5 3 4
..... ..... ...... ......
175 175 175 175
176 176 176 176
0Title: Stage1
--------------------------------------------------------------------------------
238
90 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
0 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
0.0000E+00 0.0000E+00 0.0000E+00 0.0000E+00
SOLVER INFORMATION :
==================
239
Archivo de salida y entrada --- Daño.txt
3.482401420998205E-003
3.987347113078210E-002
9.138556586773172E-002
0.163103396600391
0.232592765914423
0.291526714130732
0.364841225710857
0.430927783085663
0.513690785254786
0.549396034977606
0.582625628963865
0.654085720360045
0.709353951575367
0.776658327088419
0.913373063037344
0.923978769017817
0.932079793773579
0.938440383211111
0.943959348243244
0.948882810989565
0.953413767181545
0.969773282275184
0.978860149282096
88 4 1 3 7 6 2 5 8 1
89 11 4 7 13 15 6 8 19 1
90 26 11 13 31 33 15 19 38 1
End elements
240
Archivo de salida --- fort.26
---------
0 IITER.= 1 COD. DE CONVERG.= 0 RELAC. DE NORM. RESIDUAL= 0.112992E-11
RESIDUO MAXIMO = 0.224931E-12
---------
0 IITER.= 1 COD. DE CONVERG.= 0 RELAC. DE NORM. RESIDUAL= 0.639619E-12
RESIDUO MAXIMO = 0.303979E-12
---------
0 IITER.= 1 COD. DE CONVERG.= 1 RELAC. DE NORM. RESIDUAL= 0.534998E+01
RESIDUO MAXIMO = 0.391045E+01
---------
0 IITER.= 2 COD. DE CONVERG.= 1 RELAC. DE NORM. RES IDUAL= 0.127935E+01
RESIDUO MAXIMO = 0.704862E+00
---------
0 IITER.= 3 COD. DE CONVERG.= 1 RELAC. DE NORM. RESIDUAL= 0.216132E+00
RESIDUO MAXIMO = 0.153150E+00
---------
0 IITER.= 4 COD. DE CONVERG.= 1 RELAC. DE NORM. RESIDUAL= 0.523590E-01
RESIDUO MAXIMO = 0.336619E-01
---------
0 IITER.= 5 COD. DE CONVERG.= 1 RELAC. DE NORM. RESIDUAL= 0.130224E-01
RESIDUO MAXIMO = 0.81 1292E-02
---------
0 IITER.= 6 COD. DE CONVERG.= 1 RELAC. DE NORM. RESIDUAL= 0.339446E-02
RESIDUO MAXIMO = 0.202262E-02
Archivo de salida --- fort.31
241
Archivo de salida y entrada --- Co.txt
Formateado
1 41111111.111 10277777.778 0.000 10277777.778 0.000 ... 2.400
Densidad
Material compuesto Tensor del material no dañado Co
242
Archivo de salida y entrada --- Csec.txt
Formateado
1 96 112 1 6 39870654.465 9967663.616 0.000 9967663.616 0.000 0.000 9967663.616 39870654.465 ....
1 96 122 1 6 39423033.558 9855758.389 0.000 9855758.389 0.000 0.000 9855758.389 39423033.558
1 97 112 1 6 39911989.594 9977997.398 0.000 9977997.398 0.000 0.000 9977997.398 39911989.594
1 97 122 1 6 39942153.652 9985538.413 0.000 9985538.413 0.000 0.000 9985538.413 39942153.652
1 98 112 1 6 39878593.812 9969648.453 0.000 9969648.453 0.000 0.000 9969648.453 39878593.812
1 98 122 1 6 39878600.329 9969650.082 0.000 9969650.082 0.000 0.000 9969650.082 39878600.329
1 99 112 1 6 39942126.964 9985531.741 0.000 9985531.741 0.000 0.000 9985531.741 39942126.964
1 99 122 1 6 39911972.947 9977993.237 0.000 9977993.237 0.000 0.000 9977993.237 39911972.947
1 100 112 1 6 39422998.399 9855749.600 0.000 9855749.600 0.000 0.000 9855749.600 39422998.399
1 100 122 1 6 39870624.258 9967656.065 0.000 9967656.065 0.000 0.000 9967656.065 39870624.258
2 86 112 1 7 38346137.699 9586534.425 0.000 9586534.425 0.000 0.000 9586534.425 38346137.699
2 86 122 1 7 38088013.237 9522003.309 0.000 9522003.309 0.000 0.000 9522003.309 38088013.237
2 86 212 1 7 38537712.463 9634428.116 0.000 9634428.116 0.000 0 .000 9634428.116 38537712.463
2 86 222 1 7 38351883.703 9587970.926 0.000 9587970.926 0.000 0.000 9587970.926 38351883.703
2 87 112 1 7 38457980.136 9614495.034 0.000 9614495.034 0.000 0.00 0 9614495.034 38457980.136
2 87 122 1 7 38486163.365 9621540.841 0.000 9621540.841 0.000 0.000 9621540.841 38486163.365
2 87 212 1 7 38532880.851 9633220.213 0.000 9633220.213 0.000 0.000 9633220.213 38532880.851
2 87 222 1 7 38587060.978 9646765.244 0.000 9646765.244 0.000 0.000 9646765.244 38587060.978
2 88 112 1 7 38451081.669 9612770.417 0.000 9612770.417 0.000 0.000 961 2770.417 38451081.669
2 88 122 1 7 38451089.004 9612772.251 0.000 9612772.251 0.000 0.000 9612772.251 38451089.004
2 88 212 1 7 38514140.538 9628535.134 0.000 9628535.134 0.000 0.000 9628535.134 38514140.538
2 88 222 1 7 38514147.324 9628536.831 0.000 9628536.831 0.000 0.000 9628536.831 38514147.324
2 89 112 1 7 38486141.775 9621535.444 0.000 9621535.444 0.000 0.000 9621535.4 44 38486141.775
2 89 122 1 7 38457964.170 9614491.043 0.000 9614491.043 0.000 0.000 9614491.043 38457964.170
2 89 212 1 7 38587034.171 9646758.543 0.000 9646758.543 0.000 0.000 9646758.543 38587034.171
2 89 222 1 7 38532865.369 9633216.342 0.000 9633216.342 0.000 0.000 9633216.342 38532865.369
2 90 112 1 7 38087978.309 9521994.577 0.000 9521994.577 0.000 0.000 9521994.577 38087978.309
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
Sin formato
243
Archivo de salida --- viga3d.post.res (CFYFP)
244
Archivo de salida y entrada --- Datosgen.txt
Nombre del problema
columna3d500. Npoin, Nelem, Nmatc, Large
Typep MEC3D
756 500 1 0 Conectividad Ángulos de Euler
8 Nnode
1 1 6 1 8 2 1 715 718 754 751 719 720 756 755 0.00 0.00 0.00
Elem 2 1 6 1 8 2 1 707 715 751 745 717 719 755 753 0.00 0.00 0.00
mat ..... .... .... .... .... .... .... ...... ... .. ..... ...... ..... ...... ...... ...... ....... ....... .......
Ntype 499 1 6 1 8 2 1 2 5 18 10 4 8 20 13 0.00 0.00 0.00
500 1 6 1 8 2 1 1 2 10 9 3 4 13 11 0.00 0.00 0.00
1 0.300 0.000 3.000
2 0.300 0.060 3.000
...... ......... ......... ......... Efase, Nnode, Ngaus, Ninte
755 0.000 0.240 0.000 Coordenadas nodales
756 0.000 0.300 0.000 Typep --- Tipo de problema
1 111 0.000000 0.000000 0.000000 Npoin --- Nº nodos totales del problema
2 111 0.000000 0.000000 0.000000 Nelem --- Nº elementos
..... ..... ............... ............... ............... Restricciones Nmatc --- Nº de materiales compuestos
755 100 1.000000 0.000000 0.000000 Large --- Indicador de pequeñas (0) o grandes (1) deformaciones
756 100 1.000000 0.000000 0.000000 Nnode --- Nº nodos de un elemento
Elem --- Elemento
mat --- Material
Ntype --- Tipo de problema (P. tridimensional)
Efase --- Fase de carga
Nnode --- Nº nodos de un elemento
Ngaus --- Nº puntos de integración a utilizar
Ninte --- Cuadratura a utilizar (Gauss)
Conectividad --- Nodos que forman un elemento
Coordenadas nodales --- Nº nodo, x, y, z
Restricciones --- Nodo, libertad (0) o restricción (1) en las tres
direcciones, valor del desplazamiento
245
246
Anejo III: Validacio ensamblaje
247
248
Como ya se ha comentado en la sección 7.6.2 en la parte del código
correspondiente al ensamblaje, se quería simular el caso de un problema de 16 nodos,
con tres elementos que presentaban las siguientes conectividades:
Elemento 1: [1 2 3 4 5 6 7 8]
Elemento 2: [5 6 7 8 9 10 11 12]
Elemento 3: [9 10 11 12 13 14 15 16]
249
Matriz del elemento 1
0,98 0,82 0,32 0,18 0,30 0,32 0,50 0,37 0,28 0,49 0,35 0,75 0,04 0,56 0,67 0,06 0,28 0,02 0,17 0,43 0,15 0,96 0,25 0,00
0,66 0,77 0,59 0,40 0,72 0,04 0,03 0,34 0,52 0,58 0,33 0,40 0,87 0,14 0,37 0,59 0,70 0,67 0,99 0,68 0,38 0,83 0,62 0,04
0,34 0,14 0,69 0,13 0,12 0,58 0,98 0,06 0,87 0,29 0,15 0,06 0,23 0,90 0,73 0,53 0,93 0,94 0,66 0,90 0,27 0,87 0,40 0,10
0,31 0,69 0,88 0,57 0,87 0,52 0,52 0,37 0,75 0,41 0,56 0,75 0,94 0,73 0,83 0,94 0,07 0,26 0,19 0,29 0,34 0,14 0,04 0,66
0,50 0,13 0,48 0,91 0,43 0,16 0,40 0,72 0,55 0,96 0,76 0,80 0,52 0,39 0,73 0,95 0,74 0,84 0,35 0,55 0,76 0,46 0,86 0,74
0,03 0,31 0,68 0,50 0,05 0,64 0,28 0,05 0,40 0,23 0,69 0,43 0,63 0,48 0,35 0,36 0,02 0,48 0,24 0,54 0,17 0,59 0,08 0,67
0,21 0,00 0,67 0,12 0,36 0,64 0,87 0,48 0,43 0,51 0,99 0,67 0,20 0,07 0,02 0,06 0,65 0,80 0,58 0,35 0,75 0,23 0,45 0,01
0,29 0,44 0,72 0,64 0,41 0,78 0,20 0,03 0,06 0,98 0,02 0,16 0,94 0,54 0,74 0,56 0,49 0,98 0,18 0,79 0,26 0,37 0,95 0,30
0,47 0,29 0,37 0,71 0,39 0,26 0,40 0,29 0,03 0,40 0,31 0,92 0,62 0,73 0,37 0,93 0,09 0,38 0,18 0,37 0,65 0,52 0,53 0,27
0,66 0,31 0,96 0,09 0,31 0,31 0,44 0,79 0,72 0,46 0,36 0,53 0,74 0,38 0,70 0,03 0,49 0,57 0,78 0,88 0,41 0,51 0,93 0,24
0,56 0,83 0,09 0,66 0,74 0,03 0,73 0,46 0,52 0,86 0,59 0,98 0,74 0,55 0,86 0,64 0,58 0,14 0,14 0,69 0,59 0,31 0,61 0,53
0,35 0,67 0,15 0,22 0,75 0,70 0,42 0,69 0,46 0,82 0,70 0,70 0,94 0,59 0,50 0,85 0,75 0,21 0,10 0,31 0,64 0,05 0,64 0,54
0,57 0,28 0,60 0,20 0,36 0,38 0,16 0,34 0,15 0,99 0,06 0,65 0,98 0,91 0,63 0,71 0,02 0,78 0,95 0,70 0,23 0,34 0,29 0,54
0,50 0,40 0,45 0,87 0,40 0,94 0,11 0,86 0,84 0,65 0,16 0,71 0,14 0,86 0,97 0,92 0,47 0,93 0,98 0,11 0,68 0,07 0,03 0,00
0,51 0,80 0,57 0,34 0,51 0,71 0,77 0,87 0,13 0,54 0,02 0,19 0,87 0,78 0,73 0,22 0,99 0,84 0,60 0,89 0,55 0,05 0,38 0,81
0,56 0,11 0,58 0,16 0,51 0,20 0,50 0,16 0,81 0,66 0,73 0,20 0,44 0,24 0,08 0,50 0,18 0,42 0,25 0,20 0,28 0,40 0,63 0,85
0,30 0,35 0,86 0,18 0,89 0,72 0,26 0,85 0,39 0,70 0,33 0,71 0,85 0,43 0,93 0,80 0,17 0,89 0,96 0,27 0,82 0,04 0,30 0,16
0,26 0,60 0,41 0,89 0,14 0,59 0,36 0,02 0,52 0,31 0,85 0,60 0,51 0,25 0,73 0,31 0,85 0,49 0,16 0,71 0,89 0,08 0,22 0,61
0,43 0,25 0,28 0,48 0,83 0,98 0,76 0,04 0,01 0,37 0,39 0,38 0,01 0,86 0,67 0,48 0,81 0,41 0,98 0,26 0,24 0,61 0,14 0,20
0,48 0,89 0,31 0,09 0,92 0,18 0,22 0,26 0,54 0,19 0,58 0,97 0,20 0,37 0,23 0,31 0,94 0,24 0,91 0,60 0,74 0,79 0,54 0,26
0,73 0,38 0,93 0,94 0,32 0,55 0,95 0,31 0,24 0,51 0,40 0,34 0,45 0,52 0,63 0,10 0,54 0,53 0,39 0,06 0,16 0,86 0,19 0,34
0,24 0,78 0,54 0,98 0,25 0,70 0,78 0,87 0,87 0,35 0,12 0,49 0,69 0,85 0,00 0,33 0,98 0,15 0,98 0,53 0,00 0,35 0,34 0,40
0,12 0,59 0,91 0,71 0,89 0,89 0,02 0,12 0,11 0,38 0,05 0,38 0,94 0,25 0,63 0,31 0,93 0,79 0,21 0,14 0,34 0,68 0,03 0,46
0,84 0,84 0,38 0,73 0,26 0,14 0,09 0,03 0,39 0,21 0,22 0,36 0,26 0,59 0,23 0,52 0,38 0,35 0,88 0,32 0,07 0,10 0,56 0,03
0,23 0,82 0,09 0,11 0,97 0,29 0,08 0,89 0,88 0,75 0,41 0,04 0,09 0,07 0,28 0,68 0,95 0,81 0,84 0,88 0,71 0,37 0,56 0,43
0,79 0,59 0,75 0,64 0,54 0,73 0,46 0,59 0,21 0,35 0,82 0,01 0,55 0,75 0,03 0,89 0,60 0,82 0,81 0,70 0,20 0,30 0,74 0,45
0,35 0,44 0,45 0,92 0,40 0,95 0,22 0,48 0,42 0,38 0,20 0,09 0,73 0,13 0,17 0,24 0,52 1,00 0,19 0,44 0,04 0,91 0,24 0,36
0,09 0,16 0,63 0,50 0,84 0,11 0,91 0,01 0,32 0,92 0,97 0,07 0,62 0,72 0,29 0,61 0,81 0,37 0,48 0,76 0,58 0,05 0,17 0,26
0,85 0,85 0,87 0,62 0,58 0,12 0,26 0,69 0,66 0,29 0,07 0,68 0,58 0,56 0,39 0,72 0,52 0,07 0,44 0,58 0,21 0,18 0,10 0,63
0,35 0,89 0,52 0,08 0,55 0,06 0,27 0,72 0,51 0,43 0,69 0,88 0,32 0,19 0,98 0,81 0,85 0,54 0,76 0,06 0,30 0,51 0,40 0,69
0,20 0,75 0,09 0,72 0,91 0,84 0,51 0,76 0,60 0,58 0,76 0,26 0,46 0,01 0,88 0,43 0,20 0,04 0,65 0,60 0,85 0,01 0,56 0,04
0,06 0,38 0,90 0,60 0,05 0,75 0,13 0,31 0,56 0,09 0,93 0,56 0,03 0,89 0,23 0,29 0,15 0,26 0,21 0,83 0,84 0,02 0,41 0,54
0,75 0,52 0,08 0,62 0,68 0,67 0,81 0,48 0,40 0,20 0,09 0,77 0,12 0,88 0,71 0,52 0,78 0,53 0,50 0,52 0,17 0,10 0,79 0,24
0,57 0,27 0,93 0,44 0,81 0,21 0,17 0,34 0,33 0,89 0,24 0,74 0,95 0,68 0,31 0,38 0,26 0,02 0,28 0,32 0,98 0,03 0,53 0,59
0,52 0,67 0,82 0,67 0,28 0,91 0,07 0,50 0,25 0,61 0,55 0,72 0,95 0,28 0,48 0,16 0,25 0,77 0,92 0,93 0,24 0,52 0,54 0,97
0,66 0,08 0,94 0,70 0,56 0,34 0,69 0,38 0,54 0,66 0,44 0,07 0,13 0,89 0,90 0,08 0,79 0,44 0,04 0,57 0,07 0,32 0,72 0,74
0,77 0,87 0,08 0,24 0,96 0,47 0,93 0,33 0,15 0,06 0,67 0,47 0,88 0,73 0,00 0,17 0,50 0,37 0,22 0,79 0,84 0,11 0,65 0,99
0,53 0,56 0,99 0,29 0,87 0,12 0,11 0,09 0,58 0,36 0,69 0,97 0,00 0,30 0,39 0,52 0,95 0,26 0,50 0,58 0,20 0,44 0,96 0,80
0,50 0,33 0,60 0,62 0,60 0,01 0,01 0,77 0,44 0,61 0,79 0,03 0,96 0,01 0,43 0,49 0,85 0,89 0,52 0,66 0,68 0,94 0,24 0,65
0,95 0,84 0,81 0,16 0,26 0,31 0,68 0,79 0,06 0,72 0,29 0,91 0,05 1,00 0,30 0,32 0,71 0,03 0,38 0,43 0,31 0,24 0,33 0,43
0,54 0,03 0,31 0,56 0,51 0,28 0,26 0,27 0,97 0,15 0,36 0,47 0,06 0,92 0,08 0,36 0,05 0,82 0,08 0,61 0,81 0,44 0,31 0,40
0,20 0,51 0,99 0,94 1,00 0,57 0,42 0,44 0,77 0,86 0,31 0,32 0,73 0,97 0,77 0,94 0,11 0,83 0,70 0,38 0,47 0,78 0,91 0,24
0,86 0,65 0,50 0,75 0,11 0,12 0,04 0,12 0,70 0,10 0,09 0,27 0,11 0,37 0,38 0,73 0,44 0,21 0,60 0,93 0,14 0,84 0,20 0,82
0,45 0,87 0,38 0,83 0,14 0,14 0,98 0,96 0,37 0,25 0,03 0,03 0,13 0,17 0,09 0,70 0,33 0,60 1,00 0,71 0,42 0,83 0,50 0,26
0,42 0,41 0,86 0,88 0,53 0,28 0,02 0,68 0,16 0,23 0,69 0,52 0,68 0,56 0,52 0,53 0,18 0,50 0,23 0,64 0,28 0,45 0,75 0,42
0,77 0,73 0,91 0,50 0,66 0,19 0,90 0,78 0,43 0,35 0,47 0,99 0,45 0,30 0,10 0,05 0,54 0,54 0,56 0,72 0,72 0,73 0,84 0,41
0,00 0,37 0,70 0,06 0,72 0,75 0,41 0,17 0,91 0,74 0,32 0,30 0,51 0,19 0,30 0,32 0,54 0,04 0,89 0,03 0,29 0,75 0,68 0,14
0,94 0,22 0,66 0,64 0,35 0,26 0,82 0,02 0,28 0,35 0,22 0,18 0,03 0,38 0,27 0,00 0,44 0,58 0,58 0,69 0,27 0,20 0,39 0,09
250
Matriz del elemento 3
0,61 0,57 0,98 0,28 0,46 0,46 0,58 0,50 0,86 0,34 0,68 0,49 0,04 0,34 0,04 0,41 0,20 0,25 0,68 0,64 0,53 0,28 0,83 0,27
0,14 0,84 0,17 0,70 0,22 0,99 0,36 0,07 0,98 0,67 0,64 0,69 0,01 0,65 0,32 0,27 0,06 0,15 0,50 0,37 0,33 0,95 0,03 0,17
0,13 0,49 0,24 0,34 0,16 0,30 0,89 0,95 0,54 0,92 0,28 0,52 0,64 0,41 0,83 0,50 0,05 0,80 0,03 0,40 0,91 0,53 0,21 0,31
0,03 0,02 0,83 0,12 0,35 0,51 0,57 0,48 0,98 0,51 0,65 0,96 0,62 0,85 0,92 0,47 0,10 0,69 0,80 0,40 0,70 0,65 0,80 0,15
0,65 0,75 0,94 0,56 0,92 0,46 0,91 0,93 0,69 0,78 0,35 0,94 0,54 0,09 0,72 0,20 0,19 0,43 0,67 0,54 0,10 0,39 0,46 0,42
0,80 0,45 0,67 0,51 0,79 0,80 0,96 0,42 0,82 0,32 0,23 0,75 0,86 1,00 0,18 0,12 0,11 0,49 0,28 0,74 1,00 0,25 0,95 0,09
0,85 0,11 0,92 0,41 0,87 0,93 0,92 0,82 0,82 0,28 0,46 0,96 0,19 0,07 0,37 0,74 0,56 0,44 0,46 0,40 0,25 0,72 0,63 0,18
0,98 1,00 0,02 0,59 0,29 0,90 0,15 0,39 0,33 0,17 0,80 0,04 0,26 0,35 0,92 0,24 0,31 0,44 0,09 0,63 0,11 1,00 0,80 0,64
0,21 0,96 0,13 0,71 0,33 0,19 0,94 0,05 0,23 0,85 0,01 0,75 0,42 0,16 0,52 0,79 0,09 0,19 0,23 0,39 0,14 0,45 0,99 0,64
0,10 0,76 0,44 0,23 0,59 0,74 0,40 0,10 0,96 0,34 0,53 0,48 0,41 0,07 0,24 0,58 0,81 0,34 0,58 0,40 0,77 0,31 0,52 0,55
0,14 0,71 0,39 0,91 0,23 0,88 0,78 0,93 0,48 0,92 0,43 0,30 0,24 0,20 0,87 0,37 0,53 0,85 0,68 0,16 0,03 0,17 0,70 0,64
0,76 0,84 0,07 0,34 0,86 0,04 0,87 0,94 0,16 0,18 0,65 0,10 0,61 0,71 0,12 0,48 0,75 0,60 0,86 0,81 0,48 0,34 0,25 0,17
0,23 0,10 0,92 0,07 0,65 0,27 0,00 0,45 0,74 0,62 0,90 0,01 0,54 0,79 0,10 0,75 0,83 0,68 0,41 0,86 0,29 0,79 0,45 0,05
0,90 0,58 0,74 0,47 0,13 0,63 0,39 0,23 0,74 0,13 0,47 0,71 0,69 0,23 0,14 0,48 0,58 0,10 0,41 0,14 0,58 0,18 0,04 0,61
0,51 0,70 0,75 0,29 0,66 0,82 0,62 0,33 0,23 0,61 0,67 0,09 0,81 0,06 0,81 0,49 0,06 0,25 0,17 0,38 0,28 0,53 0,63 0,23
0,50 0,63 0,38 0,29 0,03 0,87 0,03 0,21 0,42 0,27 0,99 0,47 0,61 0,27 0,68 0,09 0,91 0,93 0,39 0,94 0,80 0,40 0,60 0,81
0,34 0,79 0,09 0,04 0,50 0,15 0,27 0,91 0,18 0,88 0,24 0,85 0,54 0,15 0,45 0,23 0,90 0,50 0,04 0,72 0,60 0,36 0,41 0,99
0,63 0,15 0,52 0,14 0,24 0,36 0,93 0,15 0,87 0,64 0,36 0,08 0,78 0,66 0,59 0,72 0,43 0,77 0,35 0,12 0,08 0,10 0,89 0,46
0,12 0,73 0,96 0,25 0,43 0,28 0,92 0,17 0,93 0,57 0,89 0,24 0,31 0,26 0,35 0,59 0,41 0,42 0,27 0,94 0,30 0,64 0,88 0,36
0,07 0,08 0,22 0,56 0,29 0,31 0,10 0,86 0,06 0,60 0,73 0,04 0,90 0,37 0,89 0,85 0,01 0,18 0,91 0,72 0,16 0,41 0,27 0,86
0,05 0,48 0,19 0,68 0,05 0,18 0,36 0,89 0,37 0,25 0,62 0,79 1,00 0,53 0,02 0,59 0,25 0,09 0,68 0,28 0,18 0,28 0,60 0,01
0,45 0,22 0,49 0,91 0,01 0,72 0,78 0,75 0,26 0,40 0,57 0,36 0,77 0,62 0,95 0,78 0,67 0,55 0,91 0,55 0,20 0,57 0,96 0,29
0,57 0,90 0,59 0,24 0,44 0,65 0,46 0,55 0,83 0,30 0,11 0,87 0,20 0,96 0,39 0,11 0,62 0,29 0,59 0,93 0,21 0,30 0,08 0,09
0,96 0,22 0,77 0,33 0,01 0,08 0,52 0,31 0,72 0,31 0,65 0,90 0,03 0,62 0,76 0,81 0,27 0,43 0,07 0,32 0,77 0,88 0,23 0,47
251
Matriz ensamblada manualmente
252
Diferencias entre las dos matrices
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
253
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,0 0
0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00
254
Anejo IV: Validacio SIM
255
256
EJEMPLO
DATOS DE ENTRADA
RESULTADOS ESPERADOS
RESULTADOS OBTENIDOS
w
E.absoluto E. relativo %
0,008400 0,001419 0,141892
-0,014800 -0,001166 -0,116627
0,010000 0,000532 0,053163
Formas de vibración
E. relativo % E. absoluto
0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000 0,000000
-0,015821 -0,036918 0,021635 -1,582133 -3,691814 2,163462 -0,034016 -0,032857 -0,022500
-0,019786 -0,021526 0,014101 -1,978579 -2,152642 1,410061 -0,065491 0,031429 0,005781
257
EJEMPLO II
DATOS DE ENTRADA
RESULTADOS ESPERADOS
258
RESULTADOS OBTENIDOS
Frecuencias w
1,299508131 8,165050393
2,672236892 16,790159577
4,434784709 27,864574127
5,734211926 36,029116122
6,941458765 43,614471720
Formas de vibración
-0,000207 0,000486 -0,000768 0,000536 0,001108
-0,000292 0,000666 -0,000986 0,000639 0,001202
-0,000374 0,000815 -0,001076 0,000603 0,000913
-0,000535 0,001049 -0,000986 0,000270 -0,000260
-0,000685 0,001186 -0,000649 -0,000177 -0,001273
-0,000820 0,001217 -0,000150 -0,000550 -0,001509
-0,001107 0,001027 0,001158 -0,000911 0,000124
-0,001339 0,000618 0,001787 -0,000379 0,001579
-0,001863 -0,001078 0,000542 0,002447 -0,000823
-0,002102 -0,002077 -0,001669 -0,002015 0,000366
Frecuencias w
E.absoluto E. relativo % E. relativo %
-0,003231224 -0,00248033 -0,248033032 -0,00248033 -0,248033032
-0,000429089 -0,000160547 -0,016054702 -0,000160547 -0,016054702
0,001241023 0,000279917 0,027991669 0,000279917 0,027991669
0,002423916 0,00042289 0,042288998 0,00042289 0,042288998
0,000405328 5,83957E-05 0,005839573 5,83957E-05 0,005839573
259
Formas de vibración
E. relativo
0,000000 0,000000 0,000000 0,000000 0,000000
0,000000 0,001100 0,000264 -0,000394 -0,000242
0,000000 0,001262 0,000411 -0,000303 0,000099
-0,000021 0,000503 -0,000022 -0,002032 -0,000051
0,000892 0,001074 0,000788 0,006309 0,000011
0,000708 0,000472 0,001026 0,001581 -0,000214
0,000060 0,000438 0,000598 -0,000297 0,008807
-0,000136 -0,000622 0,000684 -0,005486 -0,000243
-0,000099 0,000738 -0,001632 -0,000642 0,002091
-0,000052 0,000712 0,000403 0,000013 0,001096
%
0,000000 0,000000 0,000000 0,000000 0,000000
0,000000 0,110026 0,026352 -0,039408 -0,024232
0,000000 0,126247 0,041131 -0,030314 0,009904
-0,002056 0,050260 -0,002227 -0,203192 -0,005138
0,089181 0,107400 0,078758 0,630899 0,001075
0,070818 0,047190 0,102554 0,158107 -0,021377
0,005996 0,043834 0,059832 -0,029722 0,880723
-0,013576 -0,062166 0,068358 -0,548645 -0,024282
-0,009946 0,073841 -0,163247 -0,064189 0,209140
-0,005233 0,071203 0,040307 0,001338 0,109594
260
Anejo V
261
262
263
264