Está en la página 1de 146



DEPARTAMENTO DE MECANICA
DE MEDIOS CONTINUOS Y TEORIA DE
ESTRUCTURAS

E.T.S. Ingenieros de Caminos, Canales y Puertos (U.P.M.)

Curso Basi o de Programa ion del


Metodo de los Elementos Finitos

AUTOR:
Santiago Muelas Medrano

Ingeniero de Caminos, Canales y Puertos


Profesor \Ad Honorem"
U.D. de Resisten ia de Materiales

\Analisis experimental de Estru turas"

MADRID, Julio 1999

A todos los que me han ayudado y on quienes siempre estare en deuda, espe ialmente a los profesores Ian M. Smith y Avelino Samartn Quiroga, al departamento entero
de Me ani a y a mi pa iente esposa Pilar Pas ual Mesa y a mis hijos: Aran ha, Elena y
Santiago.

(Verano de 1999)

Nota Preliminar

En este Seminario se pretende transmitir a los asistentes los ono imientos


ne esarios para que sean apa es de realizar ellos mismos los programas que
puedan ne esitar segun la te ni a de los Elementos Finitos.
Ello no esta en ontra de la utiliza ion posterior de programas omer iales,
aunque para mu has sen illas apli a iones, el uso de di hos programas resulta ex esivo. Lo que de verdad se va a intentar es que se entienda la totalidad
del pro eso { desmenuzandolo y volviendolo a en ajar { que da lugar a un
programa de estas ara tersti as. A n de uentas, se trata de ha er un a
modo de puzzle.
Para ello se utiliza la te ni a aportada por el profesor Ian M. Smith, de
la Universidad de Man hester, varios de uyos libros y su propia persona,
as omo las harlas y dis usiones on los profesores Avelino Samartn Quiroga, Jose M Goi olea Ruigomez y Felipe Gabaldon Castillo, han supuesto
la fuente de inspira ion y de ono imientos para este seminario.
Conviene re ordar que la di ultad en la prepara ion del mismo reside fundamentalmente en su ne esaria brevedad, dado que es un ono imiento que
desean adquirir algunos alumnos, pero que pre isa de su sa ri io pues debe
atenderse en horas no le tivas. Por ello, se ha seguido el riterio \ameri ano"
en el sentido de simpli ar al maximo y a larar los on eptos desde la base.
Toda la formula ion empleada es la standard de esta dis iplina, uya base
los alumnos ono en su ientemente.
Espero que el esfuerzo que dediquen les sea re ompensado on un ono imiento mas para a~nadir a su ya amplio a ervo, y que, on toda seguridad,
les sera de enorme utilidad en su vida profesional futura.
a

Madrid, Marzo de 1999

ii

Indi e general
1. Introdu i
on

1.1.
1.2.
1.3.
1.4.
1.5.

Por que Programa ion Estru turada . .


Pero para que sirve en realidad el MEF
Etapas de nuestro seminario . . . . . .
Constru ion por Bloques . . . . . . .
Organiza ion del seminario . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

1
1
2
2
3

2. Elasti idad Plana I. Formula i


on

3. Coordenadas Globales y Lo ales

2.1. Una Pared y un Elemento de 4 Nodos . . . . . . . . . . . . . . 5


2.1.1. La Pared . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2. El Elemento de 4 Nodos . . . . . . . . . . . . . . . . . 7

3.1. I - Fun iones de forma . . . . . . . .


3.1.1. Coordenadas Lo ales . . . . .
3.1.2. Rela iones Lo ales - Globales
3.2. II - Formula ion . . . . . . . . . . . .

4. Programa i
on I

4.1.
4.2.
4.3.
4.4.

Matriz de rigidez de un Elemento


Integra ion numeri a . . . . . . .
Estable imiento del programa . .
Detalles nales . . . . . . . . . .

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

9
9
11
12

15

15
16
16
17

5. Programa i
on II

21

6. Un programa para Elasti idad Plana: P54CD

29

5.1. Orden en la entrada de datos . . . . . . . . . . . . . . . . . . 21


5.2. Reglas de Numera ion . . . . . . . . . . . . . . . . . . . . . . 22
5.3. Seguimiento de un programa . . . . . . . . . . . . . . . . . . . 25
6.1. Entrada de Datos . . . . . . . . . . . . . . . . . . . . . . . . . 29

INDICE GENERAL

iv

6.2. Las subrutinas GLIFT Y GEOMG . . . . . . . . . . . . . .


6.3. Cal ulo de la Matriz de Rigidez Global . . . . . . . . . . . .
6.3.1. Teora del ensamblaje . . . . . . . . . . . . . . . . . .
6.3.2. La subrutina FORMKB y el alma enamiento de KM
6.4. Resolu ion del Sistema de E ua iones . . . . . . . . . . . . .
6.5. Cal ulo de tensiones . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.

31
34
36
39
43
45

7. El Prepo esador GMESH.

49

A. Resolu i
on del Sistema

59

7.1. Un prepo esador para P54CD . . . . . . . . . . . . . . . . . . 49


7.1.1. Entrada de Datos . . . . . . . . . . . . . . . . . . . . . 51
7.2. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

A.1. Introdu ion . . . . . . . . . . . . . . . . . . . . . . . . . . . .


A.2. Metodo de elimina ion de Gauss. . . . . . . . . . . . . . . . .
A.2.1. Observa iones sobre el pro eso de elimina ion . . . . .
A.3. Resolu ion del sistema utilizando la fa toriza ion LU . . . . .
A.3.1. El programa A22 de resolu ion a traves de la fa toriza ion L*U. . . . . . . . . . . . . . . . . . . . . . . . .
A.4. E ua iones on la matriz de oe ientes simetri a. . . . . . . .
A.5. Formas Cuadrati as. . . . . . . . . . . . . . . . . . . . . . . .
A.5.1. Metodo de Cholesky . . . . . . . . . . . . . . . . . . .
A.5.2. E ua iones en banda . . . . . . . . . . . . . . . . . . .
A.6. Sistemas de banda dispersa . . . . . . . . . . . . . . . . . . .
A.7. Pivotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.8. Revision de Subrutinas por orden de apari ion . . . . . . . . .
A.9. Revision de Subrutinas por orden de apari ion . . . . . . . . .

B. Los programas P54CD, P54SP y GMESH

B.1. Programa P54CD: Listado . . . . . . . . . . . .


B.1.1. Subrutinas de P54CD . . . . . . . . . .
B.2. El programa P54SP . . . . . . . . . . . . . . . .
B.2.1. Las 4 subrutinas \espe iales" de P54SP .
B.3. Listado de GMESH . . . . . . . . . . . . . . . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

60
60
64
65

66
67
70
71
72
73
75
78
87
97

. 97
. 100
. 115
. 118
. 121

C. Cargas nodales onsistentes

127

D. Desplazamientos impuestos

131

INDICE GENERAL
E. Datos a ono er para la eje u i
on

133

E.1. Nombres de variables . . . . . . . . . . . . . . . . . . . . . . . 133


E.2. Genera ion del hero de datos p54 d.dat . . . . . . . . . . . 135

vi

INDICE GENERAL

Indi e de guras
5.1.
5.2.
5.3.
6.1.
6.2.
7.1.
7.2.
7.3.
7.4.
7.5.
7.6.
7.7.
A.1.
C.1.
C.2.
C.3.

Numera ion de Nodos . . . . . . . . . . . . . . . . . . . . .


Ejemplo de numera ion de Grados de Libertad . . . . . . . .
Diagrama Computa ional . . . . . . . . . . . . . . . . . . .
Malla de uadrilateros . . . . . . . . . . . . . . . . . . . . .
Le tura de KM usando la subrutina FORMKB . . . . . . . .
Esquema de la Subdivision . . . . . . . . . . . . . . . . . . .
Ejemplo de utiliza ion de GMESH . . . . . . . . . . . . . . .
Malla originaria dibujada segun los nodos ono idos. . . . .
Malla obtenida despues de \ ltrar" la anterior por GMESH.
Detalle de diferentes zonas de la malla obtenida I . . . . . .
Detalle de diferentes zonas de la malla obtenida II . . . . .
Detalle de diferentes zonas de la malla obtenida III . . . . .
Bosquejo de la idea Skyline . . . . . . . . . . . . . . . . . .
Carga repartida sobre varios elementos . . . . . . . . . . . .
Distribu ion de argas repartidas (a) . . . . . . . . . . . . .
Distribu ion de argas repartidas (b) . . . . . . . . . . . . .

. 23
. 24
. 27
. 37
. 40
. 50
. 53
. 55
. 56
. 57
. 58
. 58
. 74
. 127
. 128
. 129

viii

INDICE DE FIGURAS

Captulo 1
Introdu ion
1.1. Por que Programa ion Estru turada
Los programas que utilizan El Metodo de los Elementos Finitos (MEF),
as omo la mayor parte de la literatura omputa ional de la Ingeniera,
existe desde ha e largos a~nos en el lenguaje de programa ion FORTRAN. Es
asi una ne esidad para un ingeniero el ono er y saber apli ar este lenguaje
de programa ion. Se han he ho intentos de trasladar parte de la literatura
omputa ional te ni a a otros lenguajes, en parti ular a C++ on resultados
negativos. Por ello, y entre las dos posibilidades que se nos presentan hoy de
programa ion moderna, es de ir programa ion estru turada y programa on
orientada a objetos, esta ultima se nos es apa por falta del lenguaje ne esario.
Aunque se sigue ha iendo un uso asi ex lusivo del Fortran77, que es el
lenguaje que emplearemos nosotros, no se nos debe es apar que el Fortran95
esta disponible y que aventaja en mu ho al anterior. Por ello, espero que en
un futuro breve, se pueda dar este seminario ha iendo uso del ultimo, lo que
signi a una mu ho mas e az utiliza ion de las apa idades del ordenador
y un manejo de la memoria mu ho mas ra ional, sin tener que re urrir a
trabajos suplementarios para ajustarla a ada programa que hagamos.

1.2. Pero para que sirve en realidad el MEF


En pro de la brevedad, diremos que el MEF sirve lisa y llanamente para
resolver e ua iones diferen iales, on o sin otro tipo de solu ion ono ido. Sin
embargo, la gran mayora de las apli a iones en la Ingeniera Civil se entran
en el al ulo estati o o dinami o de solidos, en estado elasti o o no, as omo
en el de udos, inemati a, vibra iones : : : y un largo et .

Introdu ion

Nosotros, en este seminario, nos vamos a entrar en el analisis estati o de estru turas, fundamentalmente en estado plano y sin grandes desplazamientos.

1.3. Etapas de nuestro seminario


En prin ipio vamos a seguir un amino que podriamos ali ar de po o
ortodoxo, ya que empezaremos por ir onstruyendo un programa de elasti idad plana, bloque a bloque, y entendiendo el por que de la onstru ion
que hagamos, as omo el para que, on analisis de solu iones inmediatas.
Daremos programas de ayuda para prepro esar los datos as omo diferentes
sistemas de postpro esador para visualizar los resultados. Este es un aspe to
de la maxima importan ia en el MEF, ya que evita el tener que trabajar a
iegas, ha iendo asi ontinuos \a tos de fe" on el riesgo que ello omporta.
Posteriormente, entraremos en un aspe to mas sen illo y para el que habitualmente se utilizan otros metodos de al ulo, omo pueden ser las estru turas fundamentalmente hiperestati as, vigas, porti os : : : et . Y ello para
onstatar que la eje u ion de los programas es pra ti amente similar, sin
di ultades a~nadidas, de forma que si el alumno \se atreve" a ha erse un
peque~no programa de al ulo para abreviar el analisis de alguna estru tura,
no le va a ser mas dif il o ompli ado ha erse, en el futuro, un programa que
haga uso del MEF. En prin ipio, se trata de perderle el miedo a este ultimo
y saber aprove har sus inmensas posibilidades. Al nal del seminario, entregare abundante bibliografa para aquellos que deseen seguir profundizando
en nuestro tema.

1.4. Constru ion por Bloques


El tipo de programa ion que vamos a utilizar es fuertemente estru turado, de modo tal que haremos uso de gran antidad de subrutinas, que
llamaramos \fun iones" en C o \metodos" en Java. Es de ir, nuestro programa prin ipal va a ser, asi, un Ordenador de Subrutinas.
Para ello pondre a disposi ion de los asistentes una interesante librera de
subrutinas, que podramos in luso ampliar durante el seminario a efe tos de
ganar experien ia. De esta forma obtenemos las ventajas propias de otros
lenguajes, in luso de algunos programas altamente so sti ados para al ulo
matemati o y te ni o en general, olo ando ada \bloque" o rutina en el sitio
que le orresponda para onstruir el edi io nal del programa.
Cuando, nalmente, tengamos terminado este, nos dedi aremos a adornarlo,

1.5 Organiza ion del seminario

a \de orarlo" on sen illos prepo esadores, generadores de malla : : : et .

1.5. Organiza ion del seminario


El seminario esta preparado para ompletarse en diez y seis sesiones de
55 minutos de dura ion. Debido a la distribu ion y viabilidad de horarios
disponibles, existe la posibilidad de disminuir el numero total a la mitad,
aunque, laro esta, de doble dura ion.
No esta previsto en el tiempo le tivo del seminario, ubrir las ne esidades de
trabajo de ada parti ipante on el ordenador, por lo que se fa ilitaran medios
para que todos los que quieran tengan a eso a los mismos y puedan revisar,
probar, es ribir y ompilar sus propios programas o rutinas o las que yo pida
que se eje uten entre le iones. Este aspe to es de la maxima importan ia ya
que en este tema no se puede ser \alumno pasivo" si se quieren aprove har
los ono imientos que se van a impartir.
Finalmente, y para el mejor enfoque por mi parte del seminario, y para mejor
aprove hamiento por parte de los asistentes, es ne esario que los mismos
hagan el primer da, unos sen illos test, que me serviran para evaluar la
base o bagage de ono imientos que la mayor parte tenga. Es totalmente
fundamental que se onteste on toda exa titud. Lo ontrario, a mas de
estupido, sera una seria faena para los ompa~neros.

Introdu ion

Captulo 2
Elasti idad Plana I.
Formula ion
2.1. Una Pared y un Elemento de 4 Nodos
2.1.1.

La Pared

Vamos a imaginar que tenemos una pantalla o trozo de pared, que esta sometida a fuerzas de masa repartidas, omo por ejemplo su propio peso. Si
esa pantalla fuera de espesor unitario y estuviera en un estado de tension
plana las e ua iones que de nir
an su estado seran :
1

(i) Equilibrio
x xy
+ y
x
xy y
+ y
x

+ Fx = 0

(2.1)

+ Fy = 0

donde x, y y xy son los uni os omponentes de las tensiones no nulos
y Fx, Fy son las fuerzas de masa.
(ii) Constitutivas. (Tension Plana)
8
<

x =
y
=
:
;
xy
1 Timoshenko

y Goodier(1951)

E
2

0
4  1
0
0 0 


38
<
5
:

"x =
"y
;
xy

(2.2)

Elasti idad Plana I. Formula ion


donde E es el modulo de Young,  el oe iente de Poisson y "x, "y y
xy son las omponentes de la deforma ion.

(iii) Compatibilidad: (Deforma ion { Desplazamiento)


8
<

2 

"x =
6
"y
=
4
:
;
xy

x


y

 7
y 5

x

u
v

(2.3)

donde u, v son las omponentes del desplazamiento en las dire iones


x e y.
Estas tres e ua iones las podemos representar en forma mas ompa ta omo:
T

=
=
=



"

(2.4)

D"
Ae

donde los valores de e, A y D son respe tivamente :

u
v

8 
>
< x

=> 0

9
>
=


;
y
>
 ;
x

: 

y

2
D

= 1 E  64

0
 1 0
0 0 


3
7
5

(2.5)

En adelante, vamos a o uparnos tan solo de formula iones \en desplazamientos", y por tanto, eliminaremos  y " de las e ua iones (2.4) omo sigue :
T

A D"

A DAe

=
=
=

F
F
F

Es ribiendo la ultima e ua ion ompleta, obtenemos :

(2.6)

2.1 Una Pared y un Elemento de 4 Nodos

( 2u

E
2

1  2u
1+
x2
2 y 2
2
1+  2 u
1  2v
2 xy
2 x2

7
2v
xy
2v
y2

Fx
Fy

(2.7)

que, omo vemos, se trata de un par de e ua iones diferen iales par iales en
las variables ontinuas u y v.

2.1.2.

El Elemento de 4 Nodos

v1

4v

En la gura de la izquierda, puede verse un


\Elemento Finito", si se me permite llamarle as, que, en realidad, no es mas que, de
momento, un re tangulo en unos ejes oordenados, en el que he se~nalado los verti es
on unos puntos y los he numerado orrelativamente, segun el sentido de las agujas
del reloj, empezando por la esquina inferior
izquierda. Lo he he ho as porque, mas adelante, siempre utilizaremos este sistema de
numera ion.
Tambien se ve que los lados miden a y b.

En el MEF existen una serie de opera iones lave, que trataremos de a larar
y separar para que se pueda entender bien todo el pro eso que se sigue habitualmente y en el aso de este seminario, muy espe ialmente por razones de
laridad y sen illez, que son dos de las metas que van a guiar nuestros pasos.
Una de esas \opera iones" onsiste en espe i ar o rela ionar determinadas
magnitudes de un punto del material ontinuo en terminos de sus valores en
otros, que o bien nos sean ono idos o bien los hagamos intervenir en e ua iones que tengan un determinado numero de in ognitas.
As, podemos suponer que el ontinuo al que llamabamos \la Pared" en la
primera parte de este aptulo, esta ompuesto por una serie de re tangulos
omo el que hemos dibujado en ima, que en numero su iente llegan a \solapar" la pared. Cada punto del interior de ada elemento, tendra unos valores
de iertas magnitudes u y v que podremos de nir en fun ion de esos valores

Elasti idad Plana I. Formula ion

en las oordenadas de sus uatro esquinas, o para emplear un lenguaje mas


a orde on este seminario, de sus uatro nodos, que hemos numerado del 1
al 4.
Es ribiendo estas rela iones en forma matemati a, tendremos por un lado:


u=

N1 N2 N3

8
>
>
<

u1

u2
N4
u3
>
>
:
u4

9
>
>
=
>
>
;

= Nu

(2.8)

= Nv

(2.9)

y as mismo:
v

N1 N2 N3

8
>
>
<

v1

v2
N4
v3
>
>
:
v4

9
>
>
=
>
>
;

En el aso del re tangulo de nuestra gura, podremos es ribir :


2

N1

N2

N3

N4




1
1

xy
a b
x
1
a

x 
1
a
x y
a b

y
b

(2.10)

y
b

Estas e ua iones suponen la varia ion lineal de las deforma iones a lo largo
del re tangulo o elemento de 4 nodos al que se le llama, a ve es y omo
onse uen ia de lo anterior, \re tangulo de deforma iones lineales".
3

2 Estas

rela iones fueron desarrolladas por primera vez por Taig (1961)
los valores a los que nos hemos referido arriba

3 on retando

Captulo 3
Coordenadas Globales y
Lo ales
3.1. I - Fun iones de forma
En el apartado anterior, hemos visto omo podamos aproximar determinados valores en ualquier punto de un ontinuo en fun ion de los valores en
sus nodos. Las fun iones que estable an las rela iones y que denominabamos mediante Ni es lo que se llaman \Fun iones de Forma". Ahora vamos a
profundizar un po o mas en este on epto, analizando algunas otras posibilidades que podemos tener en uanto a elementos, expresiones matemati as
: : : et .
El interes de ello, no radi a tanto en una expli a ion teori a que debeis ono er ya, o lo hareis en breve, sino en estable er el mar o de trabajo de
nuestros programas y omo deberan es ribirse en aso de que se utili e una
o utra posibilidad, as omo per ibir la es asa diferen ia en la programa ion
que signi a la adop ion de una u otra solu ion.
Antes, sin embargo, de entrar en la diversidad de elementos, vamos a analizar
uno de los aspe tos mas importantes de la te ni a del MEF, y de he ho, la
idea que lo ha he ho posible de forma pra ti a y hasta me atrevera a de ir,
sen illa.
3.1.1.

Coordenadas Lo ales

Junto a la intera ion entre los puntos de un ontinuo y determinados


puntos de su entorno, que hemos llamado \nodos", existe otra rela ion posible de gran importan ia. En ella estable emos una rela ion biunvo a entre
los puntos anteriores y los que existiran en un sistema de oordenadas dife-

10

Coordenadas Globales y Lo ales

rente, que ono emos omo oordenadas lo ales. Consideremos la interrela ion entre las guras que se muestran a ontinua ion, que nos serviran para
estable er nuevos modos de rela ionar puntos en fun ion de otros y de sus
diversas oordenadas y/o valores de fun iones en ellos.
y


6







E
E

h
hh
h

v3



E

2v

v3

1v

E
E
hh
hh
hE

v4

En la imagen de la izquierda, vemos un uadrilatero de uatro nodos en el


que mar amos los uatro verti es, omo hi imos antes. Como vemos, esta situado en unos ejes X Y . A la dere ha, vemos otro uadrilatero, en este aso,
un uadrado (aunque no es ne esario que sea as) que se ara teriza porque
las oordenadas de sus verti es son (-1,-1), (-1,1), (1,1) y (1,-1), siguiendo el
orden mar ado 1, 2, 3 y 4. Las oordenadas en los ejes  y  las denominamos
lo ales. En estos ejes, las fun iones de forma son :
N1
N2
N3
N4

= 14 (1  ) (1 )
= 41 (1  ) (1 + )
= 41 (1 +  ) (1 + )
= 14 (1 +  ) (1 )

(3.1)

Como podemos observar, las fun iones de forma toman los valores 0 o 1 si
las al ulamos para los nodos de igual ndi e. As, N vale uno en el punto
1

3.1 I - Fun iones de forma

11

que hemos llamado 1, y ero en los puntos 2, 3 y 4. Lo mismo o urre on las


demas .
Como puede observarse, hasta el momento solo he hablado del elemento de
uatro nodos, que es el que nos va a servir de modelo. Mas adelante, veremos
otros elementos diferentes que en la pra ti a pueden resultar mas prove hosos.
1

3.1.2.

Rela iones Lo ales - Globales

Hemos visto ya la ara tersti a prin ipal de las Fun iones de Forma para un uadrilatero de uatro lados en oordenadas globales y lo ales. Ahora
vamos a dar un paso mas que onsiste en olvidarnos de la aproxima ion de
valores en puntos interiores a los uadrilateros segun sea el valor en los nodos,
que es lo que hemos he ho hasta ahora. Cambiamos el \ hip", y pasamos a
pensar en una transforma ion de oordenadas de un sistema, del sistema de
oordenadas globales al sistema de oordenadas lo ales y vi eversa.
En ese aso, podemos dar la siguiente de ni ion que tiene importan ia : Si el

elemento que estamos utilizando tiene unas determinadas Fun iones de Forma para aproximar valores de variables en sus propios puntos y las mismas
Fun iones de Forma para estable er la transforma ion de oordenadas entre
los sistemas general y lo al, el elemento se llama Isoparam
etri o y va a
ser el "tipo" de elemento que utili emos normalmente en lo que sigue.

Por otra parte, podemos pensar que es \muy interesante" eso de ambiar
que esta muy bien dar un nombre tan sonoro y esdrujulo a
elementos que umplan dos fun iones realmente distintas; que realmente en
el MEF todo suena muy bien : : : pero, todo eso por que : : : y para que : : : ?
Retro edamos un po o y volvamos a e har un vistazo a las e ua iones (2.7)
que guraban al omienzo de la pagina 6. Verdaderamente, esas son las e ua iones que tenemos que resolver y, iertamente, en uanto nuestra geometra
se aleje de la mas sen illa y las ondi iones en los bordes no sean extremadamente elementales, no onseguiremos ha erlo de forma dire ta. Al utilizar la
dis retiza ion de nuestro ontinuo en elementos de tama~no y forma sen illos,
en los que podemos estable er todas nuestras rela iones a traves de valores
en puntos determinados y ono idos, utilizando la \te ni a" rela ionada on
las fun iones de forma y aprove hando iertas reglas de integra ion, omo la
integra ion por partes, disminuyendo el grado de nuestras e ua iones diferen-

el hip mental;

1 este

detalle es interesante para veri ar la exa titud de fun iones de forma omplejas
en situa iones mas dif iles.

12

Coordenadas Globales y Lo ales

iales et ., et ., et : : :
De a uerdo, todo eso ya os suena ; ya lo habeis estudiado e in luso lo ono eis
perfe tamente. Pero quedan las preguntas anteriores, y fundamentalmente la
que enun iaramos : \Pero, para que las oordenadas lo ales ? ". Pues bien,
las oordenadas lo ales, el \alma" del MEF, el gran golpe de ingenio que
supuso la posibilidad de este metodo, radi a en que utilizando oordenadas
lo ales, todas las opera iones que tenemos que realizar son sistemati amente repetitivas. Podremos modi ar los valores de ini io, podremos ambiar
el orden o la forma o el tama~no de nuestros elementos, podremos ha er lo
que queramos, pero las opera iones en s y el orden seguido al efe tuarlas, son siempre las mismas. Es de ir, \los ir uitos de los hips de
nuestro ordenador empiezan a impa ientarse y a e har humo" : : : Esta laro,
no?.
Bueno, pues tras esta breve on esion a la palabra para matar al aburrimiento, vamos a ver po o a po o, omo hay que organizar y ordenar todas
nuestras posibilidades para que todo a abe felizmente : : :
2

3.2. II - Formula ion


Como en ualquier sistema de e ua iones en derivadas par iales, y en la
formula ion mas general, tendremos las siguientes rela iones entre derivadas
en uno y otro sistema :
(  )




" x


x


y

y


#(  )
x

y

=J

(  )
x

y

(3.2)

De la misma forma y omo onse uen ia de lo anterior, podremos es ribir :


(  )
x

y

2 es

de ir, apli ando Galerkin

=J

(  )
1





(3.3)

3.2 II - Formula ion

13

Por otro lado no debemos olvidar que para al ular la super ie del elemento,
es de ir :
Z Z

dx dy =

+1
1

+1
1

det[J d d

(3.4)

tendremos que al ular el determinante del Ja obiano.


Resumiendo y volviendo a nuestras e ua iones (2.7), si realizamos las sustitu iones de que hemos hablado, a traves de las Fun iones de Forma y apli amos
el metodo de Galerkin las e ua iones nos quedaran omo sigue:
3

Z aZ b

E
2

2 
4 

+
i Nj
 N
x y +
Ni Nj
x x

 2 Ni Nj
2
y y
1

 Ni Nj
2
y x

: dy dx

y Lee, 1969

que vienen a ser omo la madre de


para el aso que estamos estudiando.

3 Szabo

+
Ni Nj
y y +

i Nj
 N
x y

Fx
Fy

1
1

 Ni Nj
2
y x

 Ni Nj
2
x x

 3

 5
i;j =1;2;3;4

(3.5)

todas las e ua iones en el MEF

14

Coordenadas Globales y Lo ales

Captulo 4
Programa ion I
4.1. Matriz de rigidez de un Elemento
En este aptulo vamos a ver omo es ribir un programa que nos al ule
la matriz de rigidez, basandonos en la formula ion vista hasta ahora y ha iendo uso de rutinas sen illas que podemos luego in luir en una librera.
Di ha librera puede ir engrosandose a medida que ha emos nuevos al ulos
o utilizamos nuevos elementos. Esa es una gran ventaja del sistema seguido
por el Profesor Ian M. Smith, que en este aspe to fue, de alguna manera,
un pre ursor de los nuevos sistemas de programa ion orientada a objetos,
que fundamentalmente bus an la rea ion de rutinas { llamadas lases { que
vayan quedando omo riqueza del lenguaje de programa ion de que se trate.
Ello es espe ialmente ierto en el aso del lenguaje \de moda", es de ir JAVA.
Partimos de la e ua ion general de la matriz de rigidez de un elemento, que
en este primer aso onsideraremos que se trata de un uadrilatero de uatro
nodos, omo hemos venido ha iendo en las paginas anteriores. Tendremos :
KM

Z Z

B T DB dxdy

(4.1)

donde hemos llamado a la matriz de rigidez KM omo haremos en adelante.


En lenguaje de programa ion es ribimos la e ua ion otra vez pero utilizando
el nombre que daremos en los programas a las variables, as :
KM

Z Z

BEE T

 DEE  BEE dxdy

(4.2)

de esta forma nos vamos a ostumbrando a lo que vamos a ver en los programas en el futuro.

16

Programa ion I

4.2. Integra ion numeri a


Como sistema de integra ion que vamos a seguir siempre a lo largo de
este seminario, utilizaremos el Metodo de Gauss, que podemos expresar en
nuestro aso on la formula :
Z

1
1

1
1

f (;  ) dd

n X
n
X

wi wj f (i; j )

(4.3)

i=1 j =1

en la que \n" representa el numero de puntos de Gauss que utilizaremos en


la integra ion. Veremos en su momento, que no es ne esariamente mas exa to el resultado porque utili emos mu hos \puntos de Gauss". En la formula
anterior, wi y wj representan los oe ientes de pondera ion, y f (; ), el
valor de la fun ion de que se trate en el punto de Gauss onsiderado.
Vamos a estable er el amino que vamos a seguir en nuestro primer programa, lo que debe quedar bien laro y omo referen ia para todo el pro eso

4.3. Estable imiento del programa


Como de amos en el ultimo parrafo anterior, vamos a se~nalar el amino
omputa ional que vamos a seguir. Y este sera :
1. Leer las oordenadas globales de los uatro nodos, los valores de E y
 y el n
umero de puntos que vamos a utilizar en la Integra ion.
2. Para todos los puntos de Gauss :
 Re oger las oordenadas del punto de Gauss de que se trate en
lo ales y sus orrespondientes oe ientes de pondera ion. Los llamaremos SAMP y los en ontraremos en la subrutina GAUSS.
 Estable er las Fun iones de Forma { que llamaremos FUN { y
sus derivadas, DER en oordenadas lo ales ; . Para ello utilizaremos la subrutina FORMLN
 A ontinua ion y re ordando las formulas (3.2), (3.3), (3.4) y (3.5),
al ularemos el Ja obiano, su inverso y el valor de su determinante,
para obtener nalmente las derivadas en oordenadas globales, a
las que llamaremos DERIV.

4.4 Detalles nales

17

 Cono idos los valores anteriores, podremos al ular los de BEE, lo

que haremos en la subrutina FORMB. Estos valores los multipli aremos por los orrespondientes de DEE, que los en ontraremos
en la subrutina FMDSIG. A ontinua ion al ularemos la transpuesta de la matriz BEE para obtener BT y multipli ando en el
orden pre iso llegaremos a los valores
BTDB, que son los valores
R R
de nuestra \famosa" integral : B T DB dxdy.
 Finalmente, apli aremos Gauss para la integra ion y a~nadiremos
a KM, la ontribu ion del punto de Gauss en uestion.
3. Repetiremos la opera ion para todos los puntos de Gauss onsiderados,
y obtendremos la matriz de rigidez elemental bus ada.
4. Finalmente es ribiremos en un ar hivo los valores de di ha matriz, que,
entre otras osas, nos serviran para omparar la exa titud de la integra ion on diferente numero de puntos de integra ion. Previamente
habremos es rito el hero de le tura de datos, que en este aso seran
las oordenadas de los nodos del uadrilatero, una vez jado el material,
lo que vendra dado en los valores DEE que dependeran de los datos
que demos para el modulo de elasti idad y el oe iente de Poisson.
Aparte de ello, solo tendremos que introdu ir el valor del numero de
puntos de Gauss.
El programa que lleva a abo este sen illo al ulo lo he llamado KM4. Junto
on las subrutinas que utiliza, guraran en el apendi e del manual que ireis
formando a lo largo del seminario.

4.4. Detalles nales


Terminaremos el aptulo on un apartado dedi ado a a larar on nomen latura ade uada, los pasos expli ados en el apartado anterior. Vamos a
detallar los siguientes puntos :
1. Coordenadas nodales { Las guardaremos en la matriz COORD de
tal forma que se dara :
2

COORD (4;2)

x1
6 x2
= 64 x
3
x4

y1
y2 7
7
y3 5
y4

(4.4)

18
2.

Programa ion I
Fun iones de Forma

que tendremos :

{ Estan guardadas en la matriz FUN de modo


2

F U N (1;4)

3.

= 664

1
4
1
4
1
4
1
4

Derivadas de las anteriores

DER (2;4)

=) 41

"

(1
(1

ET A)

(1 XI )(1 ET A) T
7
(1 XI )(1 + ET A) 77
(1 + XI )(1 + ET A) 5
(1 + XI )(1 ET A)
{ Como antes, tendremos :
=

" F UN T #


F UN T


=)

(1 + ET A) (1 + ET A) (1 ET A)
(1 XI ) (1 + XI ) (1 + XI )

XI )

(4.5)

(4.6)
#

La informa ion de (4;5) y (4;6) para un uadrilatero de uatro nodos se


forma en la subrutina FORMLN para los puntos de Gauss espe  os
(XI; ET A)i;j donde i y j van de 1 a NGP, el numero de puntos de
Gauss espe i ados para ada dire ion. En ualquier aso SAMP, es
de ir las oordenadas y pesos de los puntos men ionados, se obtienen
de la subrutina GAUSS en la que NGP puede tomar los valores de 1
a 7.
4. Derivadas en Globales { Las derivadas DER deben ser onvertidas
a sus orrespondientes en el sistema de oordenadas globales, o sea en
el sistema (x; y). Las llamaremos DERIV y para su al ulo se utilizan
las e ua iones (3.2) y (3.3). As, por ser el elemento isoparametri o, y
ambiando \el hip mental" a tranforma ion de oordenadas, tendremos :
(

x
y

= COORD T  F U N T

(4.7)

y habida uenta de (3.2) donde gura la expresion del Ja obiano, es


sen illa la rela ion :
J AC = DER  COORD
(4.8)

4.4 Detalles nales

19

A n de al ular DERIV tendremos que invertir el Ja obiano al que


llamamos JAC1 utilizando la subrutina TWOBY2 para este aso de
dos dimensiones y llevaremos a abo la multipli a ion :
DERIV

5.

= J AC 1  DER

(4.9)

{ Si eje utamos las ordenes de un trozo de


programa, representado en este aso por las siguientes subrutinas, en
el orden que estas es ritas :
Se uen ia de subrutinas

CALL FORMLN
(DER,IDER,FUN,SAMP,ISAMP,I,J)
CALL MATMULT
(DER,IDER,COORD,ICOORD,JAC,IJAC,IT,NOD, IT)
CALL TWOBY2 (JAC,IJAC,JAC1,IJAC1,DET)
CALL MATMULT
(JAC1,IJAC1,DER,IDER,DERIV,IDERIV,IT,IT,NOD)

donde \NOD" es el numero de nodos { uatro en este aso { e \IT" el


numero de dimensiones del espa io { dos en nuestro aso { habra que
de nirlos previamente.
Despues de esta se uen ia, de a, las derivadas de las fun iones de forma
elementales on respe to a (x,y), se en ontraran en \DERIV" mientras
que \DET" es el determinante del Ja obiano, que nos hara falta para
la integra ion numeri a.
NOTA.- Los par
ametros que empiezan por \I", omo \IDER", nos
de nen el tama~no de las matri es de que se trate.
6. Forma ion de la Matriz Elemental de Rigidez { La matriz \BEE" puede
formarse ahora, ya que onsiste en elementos de \DERIV". De ello se
en arga la subrutina \FORMB" para elasti idad plana.
Por tanto las rela iones \deforma ion { desplazamiento" se es ribiran :
EP S

= BEE  ELD

(4.10)

y para el aso del uadrilatero de uatro nodos tendremos :


ELD

u1 v1 u2 v2 u3 v3 u4 v4

(4.11)

20

Programa ion I
Las variables u y v son sen illamente los desplazamientos nodales en
las dire iones x e y
Los omponentes de la matriz KM o sea, los omponentes de la integral de BEE T  DEE  BEE , al ulados en los puntos de Gauss para
todas las ombina iones de i y j se pueden al ular transponiendo la
matriz \BEE" para obtener \BT", formando la matriz tension { deforma ion usando la subrutina FMDEPS para deforma ion plana, que
sera :
3
2
V
0
1
V
E (1 V )
4 V
1
0 5
DEE =
(4.12)
(1 + V )(1 2V ) 0V 0
V
1

1 2
2(1 V )

Si queremos ha er un al ulo en tension plana, bastara substituir la


matriz \FMDEPS" por \FMDSIG".
Finalmente, la integral se evalua numeri amente on :
KM

= DET 

N
GP N
GP
X
X
I =1 J =1

WI

 W J  BT DB i;j

(4.13)

en la que \WI " y \WJ " son los oe ientes de pondera ion de Gauss
guardados en la matriz SAMP
En el proximo aptulo, estudiaremos un aso general donde tendremos varios
elementos y habra de ha erse el ensamblaje de la Matriz de Rigidez Global.

Captulo 5
Programa ion II
5.1. Orden en la entrada de datos
Cuando nos en ontramos en presen ia de un problema onven ional, no
vamos a tener que trabajar solo on un elemento, sino on una gran antidada de ellos. Por eso, y para poder ir formamdo la matriz de rigidez global, lo
que haremos sera ensamblar las matri es de rigidez lo ales en la total. Para
ensamblar o olo ar ada osa en su sitio es ne esario seguir un orden, o, al
menos, tener perfe tamente identi adas a las variables para saber donde han
de ser olo adas. As si tenemos formada una matriz de rigidez lo al, tendremos que ono er a que elemento orresponde y que numera ion en grados de
libertad tienen sus nodos. Una vez ono ido esto, es sen illo a~nadir el efe to
del nodo en el elemento en uestion a los de otros elementos olindantes en
el mismo nodo. Este pro eso tambien dependera de omo queremos guardar
la Matriz de Rigidez global de forma que o upe menos espa io, permita una
omputa ion mas e iente : : : et . Para ello disponemos de varias subrutinas
segun sea el sistema utilizado.
Si vamos a utilizar el sistema de resolu ion de e ua iones de Gauss, utilizaremos la subrutina FORMKV y si utilizamos el sistema de Cholesky, la
subrutina a emplear sera FORMKB. { Estas subrutinas se adjuntaran en el
Apendi e y los alumnos haran bien en estudiarselas para analizar las diferen ias entre ellas y la oheren ia en su programa ion.
Normalmente, en los sistemas seguidos, des ompondremos la resolu ion en
dos partes : primero haremos la redu ion y despues la sustitu ion. De esta
forma, si tenemos varios asos de argas diferentes, la primera parte de la
resolu ion, es de ir, la redu ion, solo habra de ha erse una vez, ya que la
implementa ion de las argas en los nodos se ha e despues de esta fase y

22

Programa ion II

antes de la segunda. Los metodos de resolu ion que utilizaremos, pueden ser
varios, omo ya he di ho, pero en general, la solu ion en forma de desplazamientos bus ados, la sobrees ribiremos sobre el ve tor argas, de forma que
al terminar este pro eso, el ve tor introdu ido que tena las argas, saldra del
mismo on los valores de los desplazamientos bus ados.
Esta te ni a, no tiene ningun in onveniente y nos e onomiza espa io en memoria, uno de los puntos mas bus ados en el MEF. Para al ulos mas grandes,
utilizaremos otro metodo de resolu ion que onsiste en guardar solo los valores no nulos de la matriz de rigidez global, pero ello nos obligara a utilizar un
\puntero" que nos indique la posi ion que o upan esos valores. Sin embargo,
la e onoma on este sistema es muy importante y la resolu ion mu ho mas
rapida. Este metodo, en ualquier aso, se es apa del ontenido de este seminario de ara ter elemental y se estudiara en el seminario avanzado que sobre
el mismo tema haremos, aunque en el Apendi e se hara una lara exposi ion.

5.2. Reglas de Numera ion


Para llevar a abo el orden a que me he referido antes, tendremos que
seguir una reglas, tales omo el sistema de numera ion de nodos en ada
elemento, es de ir en lo ales, y el orden en la malla global. En prin ipio di ho orden onsistira en numerar la malla empezando por el nodo que exista
mas a la izquierda y abajo, y seguiremos en lnea horizontal hasta llegar al
nodo extremo de la dere ha, saltando a ontinua ion al nodo extremo de la
izquierda de la segunda la. Con ello bus amos que el \an ho de banda " de
nuestra matriz de rigidez, sea mnimo, aunque en asos de mallas muy alargadas en horizontal se debera numerar de abajo a arriba en vez de izquierda
a dere ha. Lo di ho se re ere a mallas mas o menos regulares.
Por otro lado, los nodos del elemento se leeran empezando tambien por el del
extremo inferior izquierdo y seguiran el orden de \las mane illas del reloj".
En las guras que se a ompa~nan, se puede observar este sistema, de forma
que no reo que quede duda alguna. En la gura 5.1 puede verse una malla
general de seis elementos y 29 nodos y la numera ion que les hemos dado,
de a uerdo on lo di ho antes. Al lado gura la numera ion lo al en la que
vemos que los numeros que apare en son ordinales, para no ausar onfusion.
Es de ir, la gura se re ere al orden en que de nimos los nodos de ada elemento, pero tomamos los valores reales de la numera ion previa he ha on
ellos. In luso, en realidad, lo que tomaremos nalmente sera el \grado de
1

1 Supongo

que el alumno ono e este on epto. En ualquier aso, se expli ara en lase.

5.2 Reglas de Numera ion

23

libertad" horizontal y verti al de ada nodo. Pero todo a su tiempo.

25

26

00
11
22
00
11

11
00

17
11
00

18

00
11
14
00
11

11
00
9
00
11

27

28

00
11
23
00
11

1124
00
00
11

1 00
0
11

29

1 00
0
11

1 00
0
11
19

20

1
0

1121
00

00
11

11
00
0016
11

15
00
11

1
0
00
0 11
1
00
11

10

1
0

2
1
0

6
11
00

11
00
1

11

1
0

1
6 0

12

7
11
00

1 00
0
11

1
0
00
0 11
1
0013
11
1

1
0

118
00

1
0

1
0

1
0

LOCAL

1 00
0
11

GLOBAL

Figura 5.1: Numera ion de Nodos


As, el elemento Num.1, { el numero de los elementos esta in ludo en un
peque~no r ulo { quedara de nido en uanto a sus nodos por la se uen ia :
Elemento 1 =) Nodos : 1

6 9 10 11 7 3 2

(5.1)

Vamos a trabajar bastante utilizando esta malla que nos sirve de ejemplo. Si
suponemos que el material esta sujeto en su base y que a los lados extremos
verti ales, solo se les permite tener un movimiento de deslizamiento verti al,

24

Programa ion II

es de ir, existe una restri ion en el sentido de las \X" los grados de libertad
de los nodos { y no olvidemos que esas son nuestras in ognitas { seran :
Nodo 1 : : : (0,0) { Nodo 2 : : : (0,0) : : : : : : : : : Nodo 5 : : : (0,0)
Nodo 6 : : : (0,1) { Nodo 7 : : : (2,3) { Nodo 8 : : : (0,4) : : : et .
En la gura 5.2 puede verse omo quedara la distribu ion total para la malla,
se~nalando solo los grados de libertad.
0,29

30,31

0,25

32,33

34,35

26,27

0,28

0,17

0,24
18,19 20,21

0,13

0,5

22,23
0,16

14,15

0,12
6,7

8,9

10,11
0,4

2,3

0,1

0,0

0,36

0,0

0,0

0,0

0,0

Figura 5.2: Ejemplo de numera ion de Grados de Libertad


Como vemos, en este aso se nos ha redu ido mu ho el tama~no del problema
al haber mu hos nodos on restri iones. En general, el maximo de in ognitas
de un problema es igual al doble del numero de nodos menos tres.
El sistema que seguiremos en programa ion sera estable er lo que llamamos
el ve tor dire ional G , para ada elemento, que en el aso que estamos
viendo y para el elemento 1, sera :
G(1) = f0 0 0 1 0 5 6 7 8 9 2 3 0 0 0 0g
(5.2)
siguiendo el orden mar ado en la gura 5.1 a la dere ha, y tomando los valores
que se han es rito en la gura 5.2.
Este ve tor lo forma automati amente la subrutina \GEOMG" que veremos

5.3 Seguimiento de un programa

25

mas adelante.
Por otro lado, es pre iso estable er la situa ion de restri iones de los nodos.
Este pro eso se lleva a abo en la subrutina \READNF", que es la que forma
las matri es \NF" en fun ion de las restri iones impuestas. Esta matriz,
\NF", estable e para ada nodo los grados de libertad que le orresponden.
As, para el nodo 7 de nuestro ejemplo, sera NF (7; 1) = 2 : NF (7; 2) = 3
y es la que nos permitira estable er los ve tores \G" una vez ono ida la
se uen ia de nodos en un determinado elemento .
Todo esto puede pare er algo onfuso, pero de lo que se trata ahora es de dar
las ideas base para poder pasar a la expli a ion detallada de las rutinas a
utilizar y el orden de las mismas, de a uerdo on lo que hi imos en el aptulo
anterior.
2

5.3. Seguimiento de un programa


Tal y omo hemos di ho anteriormente, vamos a ir ahora, paso a paso,
desglosando el ontenido de un programa general. De momento, ya sabemos
omo al ular matri es elementales, as omo un esbozo de la sistemati a de
ordena ion de los datos. En resumidas uentas, tenemos que dar los siguientes
pasos, unos mas elementales y otros mas omplejos :
1. Deberemos empezar por re oger todos los datos ne esarios para el al ulo. El he ho de que estos datos hayan sido preparados por un programa
de prepro eso o \a mano", no nos preo upa ahora. Por tanto, los datos
fundamentales son :
 La geometra general on las oordenadas de todos los nodos y el
orden de los mismos, lo que llamaremos one tividad.
 Las ara tersti as del o de los materiales : modulo de elasti idad,
oe iente de Poisson : : : et .
 Las ondi iones de ontorno o situa ion en que se en uentra nuestro modelo : restri iones, movimientos impuestos : : : et .
 Como un aso parti ular del anterior, pero fundamental, la situa ion de argas de ualquier tipo a que esta sometido.
 Las ele iones que ha emos para la eje u ion del propio programa
en s, omo el numero de puntos de integra ion o el de nodos del
elemento y en onse uen ia, sus grados de libertad : : : et .
2 Sobre

este punto de gran importan ia para la omprension de los algoritmos utilizados,


in idiremos mas adelante.

26

Programa ion II

2. Una vez que tengamos los datos anteriores y entre otros el numero de
elementos, para ada uno de ellos al ularemos su matriz de rigidez
elemental, omo ya sabemos ha er.
3. A ontinua ion { o simultaneamente { deberemos ha er el ensamblaje
de las matri es de rigidez elementales en la matriz de rigidez global.
Para ello haremos uso de las herramientas a que me he referido mas
arriba : El array de grados de libertad de los nodos, N F y/o el ve tor
dire ional G. Por los medios que veremos en detalle, al nal de este
pro eso tendremos formada nuestra matriz de rigidez global.
4. Realmente, si ono emos las argas a que esta sometido nuestro modelo,
solo nos faltara resolver la e ua ion KM :e = F , de la que ono emos
la matriz KM y las argas F . Ha iendolo, obtendramos los valores
de los desplazamientos u y v en los nodos, on lo que el problema, en
prin ipio, estara resuelto.
De momento nos vamos a jar omo primer objetivo, realizar los pasos expuestos on los ono imientos adquiridos y el uso del ordenador. Para ello,
utilizaremos determinadas rutinas, algunas extremadamente simples y otras
no tanto, omo las que se re eren a la resolu ion del sistema de e ua iones.
Sobre estas ultimas, no in idiremos en una primera aproxima ion, sino que
seran objeto de a lara ion o analisis posteriormente. S daremos algunas ideas
generales para saber que estamos ha iendo en todo momento.
Todo lo anterior, lo podemos ver re ejado en el diagrama de la gura 5.3,
que, supongo, dejara su ientemente laros estos on eptos.
Aunque existen diferentes metodos de ha er la le tura de datos, debe elegirse
uno uya implementa ion sea sen illa, as omo la posibilidad de estable er
un preprograma que los prepare onvenientemente. As, por ejemplo, un metodo sen illo onsiste en rear un hero donde se plasme toda la geometra
del aso en estudio. Es lo que podramos llamar, la malla. Ese mismo hero se puede aprove har para representa iones gra as posteriores y para
estable er rela iones on los resultados, espe ialmente la visualiza ion de las
deforma iones { la deformada { que provienen de nuestro resultado basi o y
que debe ser el mas exa to de todos los resultados que obtengamos. Estaremos en ondi iones de revisar el pro eso on algun sen illo programa gra o
que nos servira para orregir posibles errores en la introdu ion de datos y
simpli ara la tarea del programador de forma no despre iable.
En otro hero, es ribiremos las ara teristi as propias al aso en uestion:
ondi iones de ontorno, metodo de al ulo elegido, materiales : : : et .

5.3 Seguimiento de un programa

27

PREPROCESO
Lectura de Datos

Geometria y
Metodo de Calc.

Caracteristicas
del Material

Condiciones
de Contorno

Para todos los


Elementos

Calculo KM
del Elemento

Ensamblaje en
Matriz Global

Resolucion del
Sistema de Ecuaciones

Otros calculos
Suplementarios

Salida de
Resultados

POSTPROCESO
Visualizacion - Impresion

Figura 5.3: Diagrama Computa ional

28

Programa ion II

Captulo 6
Un programa para Elasti idad
Plana: P54CD
6.1. Entrada de Datos
Vamos a empezar por suponer que disponemos de un programa prepro esador de mallas { del que s disponemos y veremos mas adelante { que nos
es riba un hero en el que gure en la primera lnea, el numero de elementos
y el de nodos. A ontinua ion y en una lnea por ada elemento, estara es rito el numero del elemento seguido de un dgito, que nos permite diferen iar
entre varios materiales, si los hay, y de o ho dgitos que orresponden a la
one tividad del elemento en uestion . Despues de las lneas orrespondientes a todos los elementos, viene una lnea por ada nodo que tiene, primero
el numero del nodo, y despues la oordenada X del mismo y la oordenada
Y . Las siguientes lneas de FORTRAN bastaran para obtener toda la malla
y sus ara tersti as pe uliares.
1

READ(3,*)NEL,NN
DO 1 I=1,NEL
1 READ(3,*)IE,(KONE(IE,J),J=1,NOD+1)
DO 2 I=1,NN
2 READ(3,*)IN,(CORGE(IN,J),J=1,2)

Despues de estas in o lneas de odigo, ya ono emos todo lo relativo a la


malla, lo que quiere de ir que utilizando un sen illo programa gra o, estaremos en ondi iones de visualizarla.
2

1 No

se olvide que estamos suponiendo en todo lo que de imos, que trabajamos on el


elemento isoparametri o de 8 nodos.
2 En realidad 
esto se puede ha er antes de ini iar el al ulo ya que existe un hero on
los datos de la malla. Aten ion al ompilador que usemos para este tipo de es ritura !

30

Un programa para Elasti idad Plana: P54CD

Visualizar la malla antes de rodar el programa, es siempre onveniente, y a


ve es, absolutamente ne esario. Es onveniente porque, habitualmente, empezamos on una malla muy simple que supone la entrada de datos para el
prepro esador. Para veri ar que el dato nal que vamos a utilizar es orre to
y que no hemos ometido ningun error, normalmente, solo on ver la malla
nos basta. Por otro lado, si tenemos argas en alguna zona, deberemos saber
a que nodos orresponde esa zona. Para ello, lo mas omodo es representar
la malla on nodos y elementos.
Siguiendo on nuestro programa, y despues de es ribir los datos ledos para la
presenta ion nal, el programa sigue on la le tura de datos, omo se representaba en el diagrama de la gura 5.3. Existe una subrutina que sirve para
formar la matriz N F que pre isa ono er los nodos que tengan restri iones.
Esta subrutina se llama READNF y lee los datos a que nos hemos referido.
Estos datos los podemos es ribir en un hero diferente al de la malla, ya que
se trata de un hero muy sen illo. En la primera lnea es ribimos el numero
de nodos on restri iones , el de puntos de Gauss para la integra ion, NGP,
y las ara tersti as del material: modulo de elasti idad : : : et .
El programa primero lee esos datos y luego llama a READNF. Veamos, a
ontinua ion, omo es esta subrutina, es ribiendo solo las lneas que tienen
interes:
3

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:

DO 1 I=1,NN
DO 1 J=1,NODOF
1 NF(I,J)=1
IF(NR.GT.0)READ(5,*)(K,(NF(K,J),J=1,NODOF),I=1,NR)
N=0
DO 2 I=1,NN
DO 2 J=1,NODOF
IF(NF(I,J).NE.0)THEN
N=N+1
NF(I,J)=N
ENDIF
2 CONTINUE

Vamos a seguir paso a paso esta subrutina ya que resulta interesante para
dejar ompletamente laro el on epto de la matriz N F , lo que es fundamental a su vez para entender la idea del ve tor dire ional y el metodo seguido
5

3 Esto,

por otra parte, es muy sen illo.


que este valor se representa por la variable NR.
5 Hemos se~
nalado a la izquierda los numeros de lnea para que nos sirvan de base a
nuestros omentarios.
4 Re ordamos

6.2 Las subrutinas GLIFT Y GEOMG

31

para ensamblar la matriz global. Ademas, teniendo laros estos on eptos,


se pueden utilizar estas variables para a~nadir amplia iones al programa o
modi ar determinados aspe tos.
Vamos a seguir la rutina es ribiendo los omentarios a las lneas de la misma,
utilizando la numera ion dada:
1: Para todos los nodos...
2: Para el numero de grados de libertad por nodo que tengamos (2 en este
aso)
3: Colo amos el valor \1" en todos los elementos de la matriz
4: Si existen restri iones, leemos y olo amos las restri iones, o sea, los
eros, en los grados de libertad que orrespondan .
5: Ini ializamos a ero el ontador que posteriormente es ribira el numero del
grado de libertad.
6: Para todos los nodos...
7: Para los dos grados de libertad por nodo ...
8: Si en el valor orrespondiente no existe un ero ...
9: A~nadimos la unidad al ontador.
10: Asignamos el valor del ontador al grado de libertad.
11: y 12: Cerramos los bu les.
Es de ir, que al volver de la subrutina, ya tendremos formada nuestra matriz
N F en la que se re oge la situa i
on y la numera ion de todos los grados
de libertad. En realidad, lo que ha emos es re oger en una matriz los datos
que se mostraban, por ejemplo, en la gura 5.2. Podemos ono er el numero
total de in ognitas que tendra nuestro problema, as omo el maximo an ho
de banda, al que llamamos IW. Para automatizar este al ulo, utilizamos la
subrutina GLIFT.
6

6.2. Las subrutinas GLIFT Y GEOMG


La subrutina GLIFT, en realidad, esta preparada para ha er mas osas,
omo re al ular el numero de nodos y el de elementos en aso de estudios por
apas para plasti idad, pero, para estudios elasti os sin grandes deforma iones, el resultado sera identi o { salvo diferen ias en la apa idad numeri a
9

6 Obs
ervese

el tipo de nota ion ompa ta, no soportado por todos los ompiladores !
de ir, para todos los grados de libertad.
8 Sera lo mismo si hubi
eramos es rito: IF(NF(I,J).EQ.1)
9 De ah el nombre GLIFT
7 Es

32

Un programa para Elasti idad Plana: P54CD

del ordenador { ha iendo el al ulo de una vez o teniendo en uenta estados
intermedios.
Veamos omo es esa subrutina en la misma forma en que lo hemos he ho para
la subrutina READNF. Al margen de lneas generi as o sin interes, tenemos:
.......Ini ializa i
on
1:
DO 10 I=1,LNEL
2:
MIN=10000
3:
MAX=0
4:
CALL GEOMG(.........)
5:
DO 20 K=1,16
6:
IF(G(K).NE.0.AND.G(K).LT.MIN)MIN=G(K)
7:
IF(G(K).GT.MAX)MAX=G(K)
8: 20 IF(LW.LT.MAX-MIN)LW=MAX-MIN
.......Para asos de `` apas''

Este es el uerpo de GLIFT que nos interesa, que, omo veremos, se limita
a al ular el maximo an ho de banda, IW, para nuestro aso, pero, omo ya
he di ho, la subrutina esta preparada para estudios mas omplejos .
Como hemos he ho antes, vamos a seguir paso a paso la rutina para despejar
ualquier duda. Utilizaremos omo antes, las lneas se~naladas. Veamos:
1: Para todos los elementos...
2: y 3: Colo amos los valores de arranque de forma que no se pueda produ ir
un fallo por valores arrastrados de algun aso anterior. En las lneas siguientes, queda laro su sentido.
4: LLama a la subrutina GEOMG { que veremos a ontinua ion { uya fun ion es devolver el ve tor dire ional G del elemento en el que estemos.
5: Para todos los grados de libertad del elemento...
6: En el aso de que el GDL no tenga restri ion, es de ir, no sea ero,
en uentra el menor valor de los GDL del elemento, al que llama \MIN".
7: En uentra el mayor grado de libertad del elemento, al que llama \MAX".
8: Si el an ho de banda maximo en ontrado hasta el elemento en estudio es
menor que el del aso presente , se toma omo nuevo valor este ultimo. Si
no, ontinua el que se haba en ontrado.
Finalmente la subrutina nos devuelve el valor del maximo an ho de banda,
que es el valor IW bus ado .
10

11

12

13

10 Esta

es la ventaja de rearse una librera de subrutinas, en la que mu has de ellas


tienen apli a ion en diferentes asos.
11 Grado de Libertad. En adelante, siempre as
12 El an ho de banda es, por de ni i
on la diferen ia entre MAX y MIN
13 En la subrutina se emplea la nota i
on LW puesto que en el estudio por apas se habla
de valores lo ales. De ah la \L".

6.2 Las subrutinas GLIFT Y GEOMG

33

Como vemos, las subrutinas que utilizamos son extremadamente sen illas
y fa iles de modi ar . Hemos visto en este ultimo aso analizado, que se
produ a una llamada a la subrutina GEOMG, y ya hemos avanzado para
que. Vamos a ver a ontinua ion esta subrutina on el mismo detalle de las
anteriores:
14

........Ini ializa i
on y puesta de K a ero.
1:
DO 1 I=1,8
2:
DO 1 J=1,2
3:
K=K+1
4:
G(K)=NF(KONE(IE,I+1),J)
5:
IF(G(K).GT.LN)LN=G(K)
6:
1 CONTINUE
........Return

Como en el aso de GLIFT, esta subrutina esta preparada para el estudio de


modelos en plasti idad y por tanto para el estudio por apas. En onse uen ia, no nos debe \despistar" la lnea quinta que no nos interesa en nuestro
aso. Anali emos el resto:
1: Para ada nodo...
2: Para ada GDL del nodo...
3: Aumentamos el ontador que previamente se haba puesto a ero.
4: Esta lnea es el orazon de la subrutina, y la razon de que fuera importante
entender la idea de la matriz NF. Vamos a extendernos un po o mas para
a larar esta lnea . Como sabemos, el ve tor dire ional, en el aso que estamos tratando, tiene 16 valores, que orresponden a los GDL del elemento
tomados en el orden que ya habamos estable ido . Por otra parte, la matriz
NF ontiene todos los nodos y sus GDL. La matriz KONE es la matriz de
one tividad que habamos ledo al ini io del programa . Re ordando que
el valor siguiente al del elemento orresponde al ndi e del material, la expresion KONE (IE; I + 1) nos indi a ual es el nodo orrespondiente a la
posi ion \I-esima" del elemento IE. Si llamamos a ese nodo NOD, tendremos
que la expresion de la lnea 4 se podra es ribir para ese aso, de la siguiente
15

16

17

14 En

el programa P54CD, las subrutinas GLIFT, GEOMG, GEOMC, PRESEN, WRDIS, WRITEN y RLOADS, no estan in ludas en el libro de I.M.Smith, ya que las he
es rito yo mismo. Por eso tratare de que no quede duda alguna respe to a su fun ionamiento.
15 Es importante re ordar desde d
onde hemos llamado a esta subrutina. La hemos llamado desde GLIFT y estando analizando un elemento en parti ular. Es de ir, esta subrutina
se re ere a un ELEMENTO predeterminado.
16 Ver gura 5.2 y ejemplo de ve tor G en f
ormula 5.2
17 Vease el listado de la primera p
agina de este aptulo

34

Un programa para Elasti idad Plana: P54CD

manera: G(K ) = NF (NOD; J ), y omo sabemos que la matriz NF ontiene


los GDL de todos los nodos, y ha emos que \J" valga \1" o \2", queda lara,
reo, la expresion.
5: Esta lnea no tiene apli a ion para nosotros.
Una vez a laradas estas tres subrutinas, a las que llama dire ta o indire tamente el programa, nos en ontramos que hemos terminado la primera fase
del diagrama de la gura 5.3 que orresponde a la obten ion por parte del
programa prin ipal, de todos los datos ne esarios para poder realizar el al ulo, a ex ep ion tan solo de los orrespondientes a las argas que se leeran en
un momento posterior.
Finalmente y antes de omenzar on el al ulo de la matriz de rigidez global,
ponemos a ero todos sus elementos on CALL NULL, obtenemos la matriz
DEE { en este aso para deforma ion plana { on la llamada CALL FMDEPS, y re ogemos los valores orrespondientes a los puntos de Gauss on
CALL GAUSS. Todo esto ya lo ono amos puesto que lo utilizamos en el
al ulo de la matriz de rigidez de un elemento.

6.3. Cal ulo de la Matriz de Rigidez Global


Vamos a empezar ahora on el siguiente nivel de nuestro diagrama omputa ional de la gura 5.3. En este nivel al ularemos las matri es de rigidez
de los elementos y las ensamblaremos en la matriz de rigidez global, de forma
que al nal del pro eso tendremos formada esta ultima.
Vamos a adelantar ya que la mayor parte de este pro eso { en on reto, la
forma ion de las matri es de rigidez elementales { ya lo ono emos y por tanto po as novedades vamos a tener. Solo un par de detalles para automatizar
la le tura de las oordenadas del elemento y el al ulo del ve tor dire ional
para poder ha er el ensamblaje. As es que, tras una breve des rip ion de este
pro eso, nos extenderemos fundamentalmente en el ensamblaje de la matriz
global y en la subrutina que se en arga de ello.
Empezaremos por es ribir las lneas de odigo ompletas del pro eso, lo que
permitira omprobar las po as novedades que vamos a tener respe to a lo
ya ono ido. En realidad, la uni a que deberamos tener en rela ion on el
al ulo de la matriz de rigidez elemental, es que al nal de ese al ulo {
o orrelativamente, omo en realidad lo haremos { vayamos onstruyendo
la matriz global, y para ello vamos a utilizar una sola subrutina. De todas
formas, omo el pro eso del ensamblaje onviene que se entienda perfe tamente y no quede asomo de duda, le dedi aremos un apartado espe ial. Es

6.3 Cal ulo de la Matriz de Rigidez Global

35

un asunto sen illo { omo de he ho asi todo lo que estamos viendo { pero
es importante que lo tengamos muy laro para uando queramos onstruir
nuestros propios programas, quiza on elementos muy diferentes a los que
estamos usando aqu, o sen illamente en otro espa io dimensional.
Veamos, por tanto, esas lneas de odigo de que hemos hablado:
........Ini io
1:
DO 10 IE=1,NEL
2:
CALL GEOMG(IE,KONE,INEL,G,NF,INF,N)
3:
CALL GEOMC(IE,KONE,INEL,CORGE,INF,COORD,ICOORD)
4:
CALL NULL(KM,IKM,IDOF,IDOF)
5:
DO 20 I=1,NGP
6:
DO 20 J=1,NGP
7:
CALL FMQUAD(DER,IDER,FUN,SAMP,ISAMP,I,J)
8:
CALL MATMULT(DER,IDER,COORD,ICOORD,JAC,IJAC,IT,NOD,IT)
9:
CALL TWOBY2(JAC,IJAC,JAC1,IJAC1,DET)
10:
CALL MATMULT(JAC1,IJAC1,DER,IDER,DERIV,IDERIV,IT,IT,NOD)
11:
CALL NULL(BEE,IBEE,DERIV,IDERIV,NOD)
12:
CALL FORMB(BEE,IBEE,DERIV,IDERIV,NOD)
13:
CALL MATMULT(DEE,IDEE,BEE,IBEE,DBEE,IDBEE,IH,IH,IDOF)
14:
CALL MATRAN(BT,IBT,BEE,IBEE,IH,IDOF)
15:
CALL MATMULT(BT,IBT,DBEE,IDBEE,BTDB,IBTDB,IDOF,IH,IDOF)
16:
QUOT=DET*SAMP(I,2)*SAMP(J,2)
17:
CALL MSMULT(BTDB,IBTDB,QUOT,IDOF,IDOF)
18:
20 CALL MATADD(KM,IKM,BTDB,IBTDB,IDOF,IDOF)
19:
10 CALL FORMKB(KB,IKB1,KM,IKM,G,IW,IDOF)
........Final. La matriz de rigidez global es KB

Como podemos omprobar, solo tenemos \novedades" en las tres primeras


lneas y en la ultima. Las tres primeras lneas ha en que en el bu le para
todos los elementos, obtengamos por un lado el ve tor dire ional { a traves
de GEOMG, omo hemos visto unas lneas mas arriba { y por otro lado las
oordenadas de los nodos de los elementos a traves de la subrutina GEOMC,
muy sen illa, que os omento enseguida. En este punto, nos en ontramos en
una situa ion identi a a la que estabamos uando al ulabamos la matriz
de rigidez de un elemento, y, en onse uen ia, ha emos lo mismo . Como
el FORTRAN es un lenguaje muy \antiguo" tiene in onvenientes debido a
esa antiguedad, pero, sin embargo, tambien tiene sus ventajas por la misma
18

18 Ahora

s que vemos la razon de ser de todo el entramado montado a traves de las
oordenadas lo ales y generales : : : et . Con ello se ha onseguido esa situa ion de identidad
de los pro esos de al ulo, tan ade uada a los ordenadores

36

Un programa para Elasti idad Plana: P54CD

razon. Una de ellas, y no la menor, es que se ha trabajado durante mu hos a~nos en ompiladores para este lenguaje, por lo que suelen estar muy
optimizados de forma que la tradu ion a lenguaje de maquina se realiza
on una gran perfe ion. Por ello, los programas ruedan muy rapidamente
y, probablemente, la su esion de subrutinas que hemos es rito, las alma ene
el ompilador de forma muy ventajosa, omo ha e, en general on todos los
bu les .
Vamos a ver rapidamente la subrutina GEOMC antes de entrar de lleno
en el ensamblaje, que omo hemos visto se limita a la llamada a la subrutina FORMKB, de nombre mas que a laratorio. GEOMC es extredamante
sen illa y lo que ha e esta pra ti amente es rito en una lnea. Veamos:
19

........Ini ializa i
on
1:
DO 1 I=1,8
2:
DO 1 J=1,2
3:
1 COORD(I,J)=CORGE(KONE(IE,I+1),J)
........Return

Si re ordais la subrutina GEOMG algo mas arriba, su lnea uarta y la expli a ion que all di, sobra ualquier omentario mas.
Ahora, vamos a ir de lleno al pro eso de ensamblaje y a la subrutina FORMKB.
6.3.1.

Teor
a del ensamblaje

Empezaremos estas a lara iones sobre el ensamblaje de las matri es elementales en la matriz global, viendo un peque~no y sen illo ejemplo que nos
ayude a a larar las ideas, aunque sean ideas ya ono idas del estudio del
al ulo de estru turas.
Vamos a suponer que tenemos un aso en estudio en el que estemos analizando un aso de ujo de poten ial. No, no es que me este despistando sino que
elegimos ese tipo de estudio porque solo tiene un grado de libertad por nodo,
lo que simpli a las e ua iones sin restar nada a la a lara ion del tema.
Supongamos que nuestra malla es la que se representa en la gura 6.1, en
la que, ademas hemos organizado los nodos de forma diferente a omo lo
ha emos habitualmente, es de ir, en la gura se omienza la numera ion de
arriba a abajo { lo que es intras endente, pero as le damos algo mas de
variedad. Los numeros que guran en la parte externa orresponden a los
19 Revisando

entre mis papeles antiguos, he en ontrado una malla resuelta on este


mismo programa, que tena mas de tres mil elementos. Y orresponda a un aso estudiado
ha e unos diez a~nos : : :

6.3 Cal ulo de la Matriz de Rigidez Global

37

2
3

1
4

3
1

Figura 6.1: Malla de uadrilateros


nodos. Por el interior, se han vuelto a es ribir los nodos pero siguiendo el
orden teori o de le tura para ada elemento , que, a su vez, se ha mar ado
rodeado de un r ulo. Este sen illo ejemplo nos va a servir para seguir el
pro eso ompleto .
Cada e ua ion matri ial, por elemento, quedara onstituda { es ribiendo las
variables orrespondientes, aunque lo que nos interesa a nosotros es la matriz,
en este aso, KP { omo se puede ver en la formula 6.1.
20

21

KP1;1
6 KP2;1
6
4 KP3;1
KP4;1

KP1;2
KP2;2
KP3;2
KP4;2

KP1;3
KP2;3
KP3;3
KP4;3

38

KP1;4 >
>
<
KP2;4 7
7
KP3;4 5 >
>
:
KP4;4






1
2
3
4

9
>
>
=
>
>
;

8
>
>
<

Q1
Q2
Q3
>
>
:
Q4

9
>
>
=
>
>
;

(6.1)

Podemos observar que los valores anteriores { que se re eren a nodos en


lo ales { sin embargo seran diferentes en globales. As, por ejemplo, el nodo
n d=pro4 de la malla se orresponde on el n 1 del elemento primero, es
de ir on el nodo n 1 en lo ales para el elemento numero 1. Pero, a su vez,
di ho nodo 4, tambien se orresponde on el numero 2 del elemento 3 en
o

20 En

lo que sigue, llamamos a estos ultimos, \nodos en lo ales", lo que no es muy


afortunado, ya que podra onfundir al alumno. No es que estemos en oordenadas lo ales,
sino que esta palabra se re ere a una ordena ion lo al. Mejor, quiza, podra haber di ho
elemental. En ualquier aso, queda he ha la adverten ia.
21 Por otra parte, estamos siguiendo muy aproximadamente el libro del Prof.Smith, lo
que fa ilitara la tarea a quien desee estudiarlo.

38

Un programa para Elasti idad Plana: P54CD


Cuadro 6.1: Matriz de rigidez global orrespondiente a la gura 6.1
1

K2;2

K3;2

K2;3

K3;3

K3;2

K1;2

K4;2

+ K22;2

K1;3

K4;3

+ K12;2
2

K3;4

+ K23;3

K2;1

+ K12;1 + K33;3

K1;4

K2;1

K2;3

K3;4

+ K23;2

+ K33;2

K2;4

K3;1

K4;1

+ K22;1
2

0
K1;1

K1;3

K3;1

K3;3

K2;4

K1;4

K4;4

K4;2

K4;3

K 1 ;2

K 4 ;2

K4;4

K1;1

K4;1

K 1 ;3

K3;4

K4;1

K2;4

K3;1

K 4 ;3

NOTA: En esta tabla se ha redu ido el nombre de los elementos de


de espa io.

KP

K1;4

K4;4

por razones

lo ales. El numero total de e ua iones sera de o ho, ya que ese es el numero


de GDL totales que tiene la malla. Como estamos hablando del nodo 4, en
la e ua ion general y en la posi ion 4; 4 apare era la suma del valor de KP ;
para el elemento 1 mas el de KP ; del elemento 3.
La matriz ompleta se representa en la tabla 6.1, donde los valores de los
elementos guran omo superndi es. De esta tabla, vamos a obtener tambien
lari a ion para otros puntos de los que hemos hablado un po o de pasada.
As, si nos jamos en la gura 6.1,y si seguimos la numera ion global, vemos
que el primer elemento onsta de los nodos 1, 2, 4 y 5. La matriz de rigidez
para este elemento, siguiendo este orden de nodos y ono iendo el orden lo al,
sera:
11

22

2
6
6
6
6
4

K21;2

K21;3

K21;1

K21;4

K31;2

K31;3

K31;1

K31;4 7

K11;2

K11;3

K11;1

K11;4

7
7
7
5

(6.2)

K 1 4;2 K 1 4;3 K 1 4;1 K 1 4;4

Si miramos la matriz de rigidez en lo ales de la formula 6.1 veremos que el


primer miembro empieza on el subndi e (1,1) y siguen los demas en el orden
a ostumbrado. Si nos jamos ahora en la gura 6.1 veremos que la matriz
de la formula 6.2 se orresponde exa tamente si ambiamos los valores de

6.3 Cal ulo de la Matriz de Rigidez Global

39

lo ales a globales, omo indi a la gura, de la siguiente manera:


 El nodo n 1 en globales hay que transformarlo en el n 2 en lo ales.
 El nodo n 2 en globales hay que transformarlo en el n 3 en lo ales.
 El nodo n 3 en globales no existe en el elemento n 1 y por tanto no lo
tenemos en uenta en este elemento.
 El nodo n 4 en globales hay que transformarlo en el n 1 en lo ales
 El nodo n 5 en globales hay que transformarlo en el n 4 en lo ales.
De forma que si en los subndi es, donde pone un 1 en la formula 6.1 ponemos
un 2 y donde pone un 2 ponemos un 3 y donde pone un 3 ponemos un 1 y
donde pone un 4 ponemos un 4, obtendremos la matriz de la formula 6.2.
Como no existe en el elemento 1 el nodo global 3, la la y la olumna orrespondientes a este nodo en la matriz global, o sea la la y olumna ter era,
no tendran aporta ion alguna de la matriz elemental a la global. Por otro
lado, uando en una posi ion de la matriz global, on urran la aporta ion de
dos o mas elementos de las lo ales, simplemente se suman di has aporta iones. Dejamos omo ejer i io al alumno la omproba ion de todos los valores
de la tabla 6.1.
Vamos a ver omo se pone en orden todo este pro eso a traves de la subrutina
FORMKB.
o

o 22

o 23

24

6.3.2.

La subrutina FORMKB y el alma enamiento de


KM

Antes de entrar en el detalle de la subrutina FORMKB, es pre iso a larar algunos puntos omo ya he di ho antes. Por el he ho de que la matriz
de rigidez global resulte simetri a, omo es nuestro aso, se han desarrollado
diversos sistemas para guardar su valor on un gasto mnimo de memoria.
Por otro lado, dependiendo de la forma de resolu ion del sistema elegida, los
algoritmos que se empleen estaran rela ionados on los sistemas utilizados.
Es pre iso que sepamos que tipo de metodo vamos a utilizar, al menos, de
momento, para guardar los elementos de la matriz de rigidez. Como podemos
22 Que

es el ter ero del elemento.


es el uarto del elemento.
24 Corre tamente expresado, deberamos de ir: a 
este grado de libertad. En nuestro aso,
de un solo grado de libertad por nodo, el resultado es el mismo pero la expresion no es
orre ta.
23 Que

40

Un programa para Elasti idad Plana: P54CD


IW P 1

0
0

0
0
0

0
0

0
0
0

0
0
0

0
0

0
0

Figura 6.2: Le tura de KM usando la subrutina FORMKB


ver en la gura 6.2, vamos a guardar los elementos del triangulo inferior de la
matriz de rigidez, in luyendo la diagonal, y lo haremos en una matriz re tangular que tendra las mismas las que la original y un numero de olumnas
igual al an ho de banda mas una. El sistema no es totalmente e az, porque
tenemos que olo ar algun ero teori amente inne esario, pero esa es una situa ion pra ti amente imposible de evitar sin re urrir a sistemas mu ho mas
so sti ados.
Debemos a larar un aspe to rela ionado on el \an ho de banda, o sea el
valor de IW . Este valor, en realidad, representa el numero de las y olumnas de la matriz de rigidez de ada elemento, pero por otro lado orresponde
al numero de lneas diagonales que existen en la mitad { superior o inferior
{ de la matriz de rigidez que tengan algun elemento no nulo, sin ontar la
diagonal prin ipal. Es de ir, que, de a uerdo on lo que hemos di ho en el
parrafo anterior, el numero de olumnas que tendra la matriz reada por
FORMKV sera igual al valor IW + 1. En esa matriz, sin embargo, estan
todos los elementos que nos interesan, puesto que los que dejamos fuera,
son valores repetidos de los simetri os que hemos guardado. Es ribiendola
ompleta, nuestra matriz reada por FORMKB sera:
3
2
0 0 0 x 0 0
6 0 0 x 0 x x 7
7
(6.3)
KT = 6
4 0 x x 0 x x 5
x x x x x x
Ahora ya, on todo el bagaje de ono imientos adquiridos respe to al fun ionamiento del ensamblaje y la matriz reada, vamos dire tamente a analizar
la subrutina que lleva a abo el pro eso.

6.3 Cal ulo de la Matriz de Rigidez Global

41

Como habitualmente, es ribiremos el nu leo de la subrutina:


.....Ini ializa i
on
1:
DO 1 I=1,IDOF
2:
IF(G(I))1,1,2
3:
2 DO 3 J=1,IDOF
4:
IF(G(J))3,3,4
5:
4 ICD=G(J)-G(I)+IW+1
6:
IF(ICD-IW-1)5,5,3
7:
5 KB(G(I),ICD)=KB(G(I),ICD)+KM(I,J)
8:
3 CONTINUE
9:
1 CONTINUE
.....Return

y, omo habitualmente, la analizaremos utilizando la numera ion de lneas.


Esta subrutina, tomada literalmente del libro del profesor I.M.Smith, tiene
sus parti ularidades. En primer lugar tiene un estilo de es ritura algo antiguo,
si lo puedo llamar as, y por otro lado el algoritmo resulta un po o rpti o.
Todo ello me invita a modi arla en su forma externa, aunque reali e la
misma fun ion, a n de simpli ar su omprension. Veamos omo podramos
modernizarla:
25

1:
2:
3:
4:
5:
6:
7:
8:

.....Ini ializa i
on
DO 1 I=1,IDOF
DO 2 J=1,IDOF
IF(G(I).GT.0).AND.(G(J).GT.0).AND(G(I).LE.G(J))THEN
ICD=G(J)-G(I)+(IW+1)
KB(G(I),ICD)=KB(G(I),ICD)+KM(I,J)
ENDIF
2 CONTINUE
1 CONTINUE
.....Return

de esta forma reo que de alguna manera hemos entrado el nu leo del algoritmo en las tres lneas numeros 3, 4 y 5. Vamos a tratar de expli ar estas
tres lneas de forma que nos a laren el metodo seguido.
Para empezar, la lnea ter era lo que nos di e es que si alguno de los omponentes del ve tor G es nulo, o sea si se trata de un GDL on restri ion y uya
aporta ion sera nula, que lo dejemos de lado. Como previamente habamos
anulado la matriz KB , ya tendra el valor ero en la posi ion ade uada. Pero
25 En

on reto de la 2a edi ion

42

Un programa para Elasti idad Plana: P54CD

tambien la misma lnea tres en su ultima ondi ion, nos obliga a que el valor
del GDL orrespondiente a I sea superior al orrespondiente a J . Esto, expresado en forma oloquial, lo que ha e es \ epillarse" la parte de la matriz
situada a la dere ha de la diagonal prin ipal. Si alguna de las ondi iones
impuestas no se umple, a~nadimos la unidad al valor de J y volvemos a
someter los valores a las ondi iones impuestas.
Vamos ahora a la lnea uarta. La fun ion de esta lnea y del valor de apoyo
ICD es estable er la posi ion en la matriz KB en la que vamos a sumar
el valor orrespondiente de \KM". Mas on retamente, la olumna a la que
vamos a llevar esa aporta ion. Si nos jamos en la gura 6.2 veremos una
e ha entre las dos primeras las, a la izquierda, se~nalando ha ia la dere ha.
Con ello, se ha pretendido visualizar omo quedara la \matriz redu ida",
la que forma esta subrutina. Y la e ha pretende expli ar que la \matriz
in linada" que vemos en la gura, debe ponerse \dere ha", \en pie", omo
si empujaramos en el sentido de la e ha a su parte superior. Por eso al es ribirla ompleta en formato horizontal, se le ha puesto la T de traspuesta
omo superndi e.
Si suponemos que tenemos la matriz anterior formada omo es, vemos que
tiene un numero de olumnas igual a IW P 1 o lo que es lo mismo, IW + 1.
Como G(I ) sera siempre mayor que G(J ) , el valor de ICD variara siempre
entre 1 e IW + 1, y esto, de tal forma que para todos los valores de G(I ), o
sea, para todas las las, tendremos un valor de ICD que barrera todas las
olumnas orrespondientes a GDL que no tengan restri iones .
Finalmente, en la lnea quinta, y a traves de los valores de I y J se asigna
dire tamente al termino bus ado { y en ontrado { de KB la aporta ion orrespondiente de la matriz elemental KM .
Como vemos, despues de todo el pro eso anterior, tendremos formada la
matriz de rigidez global que era el paso siguiente en nuestro diagrama omputa ional. A ontinua ion tendremos que resolver el sistema e introdu ir las
argas exteriores, paso este ultimo, que todava no habamos dado. Respe to
a la resolu ion del sistema, se trata de un pro eso de al ulo numeri o puro,
no ex lusivo en forma alguna de la te ni a del MEF y que veremos a ontinua ion muy por en ima, dejando el estudio detallado para el Apendi e, a
n de ompletar todos los aspe tos de nuestro estudio.
26

27

28

29

26 Siempre

que no sea igual a IDOF, en uyo aso empezaramos otro bu le.


que el bu le no \salte".
28 Quiz
a fuera positivo para el alumno ponerse un peque~no ejemplo y omprobar \a
mano" omo fun iona esta lnea
29 Como no quiero emplear m
as tiempo en este tema, en el apendi e habra una nota
donde se anali e todo este aspe to on mas detalle.
27 Para

6.4 Resolu ion del Sistema de E ua iones

43

6.4. Resolu ion del Sistema de E ua iones


De a uerdo on lo di ho en las lneas anteriores, me voy a referir en lo
que sigue a la resolu ion del sistema \ asi-formado" de e ua iones, y le llamo
as porque todava no ono emos una parte de la e ua ion, que es la que se
re ere al segundo miembro de la igualdad de nuestra formula: KM :e = F .
Pues bien, despues de la llamada a la subrutina FORMKB, que hemos analizado detalladamente, las siguientes lneas de odigo son:
1:
2:
3:
4:
5:
6:

CALL
CALL
CALL
CALL
CALL
CALL

CHOLIN(-------)
NULVEC(-------)
RLOADS(-------)
CHOBAC(-------)
NULL (-------)
WRIDIS(-------)

Vamos a omentar esta fase del programa que engloba la Resolu ion propiamente di ha. La lnea primera llama a la subrutina \CHOLIN" uya mision
es ha er la \redu ion" de la matriz KB . Como todo pro eso asimilable a
la resolu ion de sistemas de e ua iones de a uerdo on el sistema de Gauss,
la primera fase a la que llamamos \redu ion" onsiste en nuli ar todos los
elementos de la matriz orrespondientes a la mitad triangular inferior. Posteriormente se ha e la sustitu ion ha ia atras. Bien, en el sistema seguido de
a uerdo on Cholesky el pro eso es pare ido, on la pe uliaridad de que la
primera fase se efe tua ex lusivamente sobre la matriz. Una vez he ho esto,
se toman en onsidera ion los valores del segundo miembro y se lleva a abo
la sustitu ion obteniendose el resultado bus ado. En el sistema que seguimos
aqu, el resultado sobrees ribe ese segundo miembro orrespondiente a las
argas, de forma que las variables que llamamos LOADS al prin ipio, orrespondientes a las argas, se onvierten al nal del pro eso en las variables
DISP S orrespondientes a los desplazamientos .
Despues de ha er la \Redu ion", nuli amos el ve tor que va a ontener las
argas on \NULVEC" y estable emos estas on la subrutina RLOADS , que
veremos enseguida. Despues, anulamos tambien a la matriz que va a ontener los desplazamientos y es ribimos los resultados por medio de la subrutina
W RIDIS , que no utiliza ningun algoritmo digno de men ion.
Este sistema tiene una ventaja intrnse a, que onsiste en que en el aso de
30

30 Sirva

esto para a larar algun problema de nota ion que se pueda plantear

44

Un programa para Elasti idad Plana: P54CD

que queramos analizar un modelo sometido a diferentes tipos de arga, la parte orrespondiente a la forma ion de la matriz global de rigidez y la primera
fase de la resolu ion del sistema, solo hay que ha erla una vez, introdu iendo
las diferentes ombina iones de argas a la altura de la subrutina RLOADS ,
on la importante e onoma que ello representa.
Veamos a ontinua ion la uni a subrutina que vamos a analizar en estos
momentos de las se~naladas anteriormente, es de ir, RLOADS . Como de ostumbre, tendremos:

.....Ini ializa i
on
1:
READ(7,*)NLH,NLV
2:
IF(NLH.EQ.0)GOTO 10
3:
READ(7,*)(K,LOADS(NF(K,1)),I=1,NLH)
4: 10 CONTINUE
5:
IF(NLV.EQ.0)GOTO 20
6:
READ(7,*)(K,LOADS(NF(K,2)),I=1,NLV)
7: 20 CONTINUE
.....Return

Po o hay que de ir de esta subrutina si no es que no se ha empleado mu ho


tiempo en es ribirla y que se limita a leer las argas horizontales, primero, y
verti ales despues que existen en los nodos argados, de forma que en aso de
argas repartidas, hay que llevarlas a los nodos manualmente, lo que resulta
un po o pobre. En un orto futuro { prometo { tendreis a vuestra disposi ion
una subrutina mu ho mas potente para estable er las argas.
Con lo anterior, hemos terminado pra ti amente nuestro programa P 54CD
a falta de un re uadro en el diagrama de la gura 5.3, que humildemente se
en uentra abajo a la izquierda on la men ion: \Otros al ulos suplementarios". Estos al ulos omplementarios nos van a o upar la proxima le ion,
ya que se trata del al ulo de tensiones y su prepara ion para un postpro eso
e iente.
Con ello terminaremos nalmente el programa de al ulo de tension-deforma ion
plana por elementos nitos y dedi aremos las dos le iones nales a pre y
post pro eso y pra ti as de todo lo visto.

6.5 Cal ulo de tensiones

45

6.5. Cal ulo de tensiones


Como de amos en el aptulo anterior, la e ua ion diferen ial de planteamiento del problema, ha quedado resuelta. Sin embargo, habitualmente
existen otros resultados, que pueden ser de mas importan ia para el al ulo,
que no se obtienen dire tamente on la resolu ion de la e ua ion diferen ial,
pero que dependen dire tamente del resultado obtenido.
Como sabemos, los resultados ya obtenidos nos propor ionan los valores de
los desplazamientos en los nodos. Estos valores, tienen importan ia, que en
algun aso puede llegar a ser rti a, pero habitualmente, nos interesa mas
ono er el estado tensional del modelo, ya que en fun ion de esas tensiones,
dimensionaremos la parte resistente del mismo. En onse uen ia, vamos a
de nir en esta se ion, la forma de al ulo que vamos a seguir para obtener
el estado tensional men ionado.
Revisando las e ua iones (2;2), (2;3) y (2;4), vemos que las tensiones, que
vienen dadas por las formulas de tension - deforma ion, se pueden obtener
fa ilmente una vez ono idos los desplazamientos:


= D = DAe

(6.4)

Tenemos, sin embargo, una peque~na ompli a ion, derivada del he ho de


que, aunque podemos obtener las tensiones en ualquier punto, la forma de
al ulo mas aproximada onsiste en obtener esas tensiones en los puntos de
Gauss. Por otra parte, y aunque para el elemento que estamos utilizando,
la integra ion exa ta se hara on 3  3 puntos de Gauss, por razones uya
expli a ion se sale del ontenido de este seminario, el mejor resultado se
obtiene on la utiliza ion de la que se llama \integra ion redu ida" y que
onsiste en la utiliza ion de 2  2 puntos de integra ion.
Vamos a ver los pasos que debemos seguir para obtener los valores bus ados,
es ribiendo la parte del programa on el que llevaremos a abo todo este
pro eso :
31

31 Quiero

ha er notar aqu que, habitualmente, en las subrutinas de ara ter \privado",


no suelo es ribir los parametros. Ello tiene una razon sen illa. No quiero que al meternos en
los alrededores del bosque que supone el MEF nos adentremos desde el prin ipio en lo mas
profundo, porque si lo hi ieramos as nos en ontraramos en esa situa i
on en la que se suele
de ir que los arboles no dejan ver el bosque. Ahora que ya empezais a estar familiarizados
on toda la farandula que supone la base de nuestro estudio, os va a resultar mas sen illo
enfrentaros on ese peque~no, aunque a ve es, latoso, problema. En las subrutinas de tipo
general, si que doy los parametros, porque en aso ontrario no sabrais lo que estais
ha iendo. En ualquier aso, y omo ya os digo mas adelante, os in luire en apendi e, la

46
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

Un programa para Elasti idad Plana: P54CD


DO 30 IE=1,INEL
CALL GEOMG(IE,KONE,INEL,G,NF,INF,N)
CALL GEOMC(IE,KONE,INEL,CORGE,INF,COORD,ICOORD)
DO 40 M=1,IDOF
IF(G(M).EQ.0)ELD(M)=0.
40 IF(G(M).NE.0)ELD(M)=LOADS(G(M))
IG=0
DO 30 I=1,NGP
DO 30 J=1,NGP
IG=IG+1
CALL FMQUAD(DER,IDER,FUN,SAMP,ISAMP,I,J)
CALL GCOORD(FUN,COORD,ICOORD,NOD,IT,GC)
CALL MATMULT(DER,IDER,COORD,ICOORD,JAC,IJAC,IT,NOD,IT)
CALL TWOBY2(JAC,IJAC,JAC1,IJAC1,DET)
CALL MATMULT(JAC1,IJAC1,DER,IDER,DERIV,IDERIV,IT,IT,NOD)
CALL NULL(BEE,IBEE,IH,IDOF)
CALL FORMB(BEE,IBEE,DERIV,IDERIV,NOD)
CALL MVMULT(BEE,IBEE,ELD,IH,IDOF,EPS)
CALL MVMULT(DEE,IDEE,EPS,IH,IH,SIGMA)
30 CONTINUE

Comentaremos a ontinua ion el listado:


 La primera lnea nos di e que vamos a repetir las opera iones para
todos los elementos.
 De la lnea 2 a la 5 nos o upamos en poner los valores de los desplazamientos, que llamamos ELD, en los orrespondientes GDL. Por
si tuvieramos algun peque~no arrastre numeri o que hi iera algun valor orrespondiente a un GDL on restri ion, muy prque~no, pero no
ero, es ribimos la lnea 5 . Como expli amos en la ultima le ion, los
resultados de los desplazamientos sobrees riben las argas, por lo que
ahora, los valores ontenidos en LOADS , son pre isamente esos desplazamientos. A partir de la lnea 6 , estaran ontenidos en ELD.
 Despues de poner el ontador IG a ero, y para todos los puntos de
Gauss del elemento en los que vamos a efe tuar el al ulo, ini iamos el
pro eso de al ulo propiamente di ho en la lnea 11 . Con los ono imientos ya adquiridos, la onse u ion de subrutinas de las lneas 11
a

rela ion ompleta de parametros y su signi ado, a ve es algo rpti o omo en el aso de
esos parametros IH o IT que guran aqu y alla. As que no os preo upeis por eso, que al
nal, todo quedara laro

6.5 Cal ulo de tensiones

47

a 19 , asi las podramos es ribir sobre la mar ha. La uni a pe uliaridad, es que el al ulo se va a realizar en los puntos de Gauss, uyas
oordenadas generales, a priori, no ono emos.
a

 De la subrutina F MQUAD obtenemos las fun iones de forma y sus derivadas en lo ales, as omo los datos para los puntos de integra ion. En
la siguiente subrutina GCOORD se obtienen las oordenadas generales
de esos puntos, que ya hemos di ho que no eran ono idas.

 El grupo seguido de las subrutinas que se indi an en estas lneas:


MAT MULT , T W OBY 2, MAT MULT , NULL

F ORMB , es un
viejo ono ido nuestro, del que obtenemos la matriz BEE , en este aso

orrespondiente a los puntos de Gauss.

 Multipli ando la matriz BEE , es de ir la de derivadas de las fun iones

de forma, por los desplazamientos, en este aso ELD, obtendremos las


deforma iones,  que guardamos en EP S .

 Finalmente, multipli ando las deforma iones por la matriz de ara -

tersti as del material, o sea apli ando la ley de Hooke generalizada,


obtenemos nalmente las tensiones bus adas,  que guardamos en el
ve tor SIGMA. Como estamos en dos dimensiones, tendremos tres tensiones en ada punto: las dos orrespondientes a los ejes oordenados
mas la tangen ial.

Con el pro eso anterior y on la es ritura y/o representa ion de los resultados, tendremos nal { y felizmente { terminado el programa y el al ulo
ompleto que queramos ha er.
En los diversos apendi es que daremos al nal de los aptulos, se in luiran,
en primer lugar, un listado ompleto del programa P 54CD as omo de las
subrutinas que lo integran. Dedi aremos tambien otro apendi e a la a lara ion de los parametros de todas las subrutinas. Emplearemos otro en analizar
la resolu ion del sistema por el metodo de Cholesky seguido. Tambien dedi aremos un apartado breve a la des omposi ion de las argas repartidas
sobre los nodos, y si tuvieramos el tiempo ne esario, una modi a ion de
la subrutina RLOADS que suponga una version mas ompleta y on mas
posibilidades de arga.
En lo que sigue vamos a entrarnos de momento en el tema del Prepro eso,
de enorme importan ia y que debera ser tambien perfe tamente omprendido, ya que resulta fundamental para la resolu ion de ualquier problema de
tama~no superior al mnimo.

48

Un programa para Elasti idad Plana: P54CD

Del postpro eso de impresion, muy po o hay que de ir y lo solventaremos en


diez minutos. Del postpro eso gra o hablaremos tambien, aunque este es un
tema mu ho mas divergente por estar muy ligado a la maquina que usemos,
a las libreras disponibles y al ompilador utilizado. Tendremos oportunidad
de ver varias posibilidades en las lases pra ti as que dejamos para el nal.
Vamos a entrar sin mas dila ion en el aptulo siguiente dedi ado al prepro eso. En el veremos otro tipo de apli a ion de las Fun iones de Forma, que,
aun pudiendo utilizar otros medios, resulta extremadamente ade uada al n
bus ado y que nos servira para no olvidar nun a este on epto, tan interesante en el MEF y en otras te ni as modernas.
Os avanzo ya, que vamos a tenernos que enfrentar on otro programa que
tendremos que analizar, aunque no lo haremos tan a fondo omo on el que
hemos visto. Por otra parte, la es ritura de GMESH, que as se llama el
programa , no esta tan ordenada y uidada omo la de P54CD, entre otras
osas por falta de tiempo.
Vamos alla : : :
32

32 de

Genera ion de Malla, MESH en ingles

Captulo 7
El Prepo esador GMESH.
7.1. Un prepo esador para P54CD
El prepo esador Gmesh esta preparado para rear las mallas que pueda utilizar el programa P54CD. Es de ir la es ritura del hero \mesh", se
formatea para que pueda ser ledo posteriormente sin ningun ambio por el
programa di ho. Esto quiere de ir que ambos programas se pueden rodar
onse utivamente si se desea, on lo que bastara tener previamente es rito
el hero de le tura de GMESH, al que llamamos \gmesh.dat", y el hero de entrada de los datos espe  os de P54CD, que ya lo hemos llamado
\p54 d.dat".
Vamos a expli ar que es lo que ha e GMESH y omo genera los datos. La
idea fundamental onsiste en estable er una orresponden ia entre el elemento o elementos que van a dar origen a la malla , es de ir, el ontorno exterior
materializado en uno o mas elementos, y ese o esos mismos elementos en
oordenadas lo ales, para lo que utilizaremos las fun iones de forma ya ono idas, puesto que trabajaremos on los mismos elementos isoparametri os de
o ho nodos que ya ono emos. Una vez estable ida di ha orresponden ia ,
subdividimos el elemento en lo ales segun la subdivision que deseemos en el
original, o elemento \padre". Una vez he ho esto, desha emos la orresponde ia estable ida y obtenemos nuestro elemento original on la malla deseada.
Evidentemente, tendremos que estable er la nueva numera ion de nodos y
elementos a que de lugar la subdivision. En la gura 7.1 se bosqueja la idea
que no resulta ompli ada por otro lado. Un punto que se debe ono er,
aparte del fun ionamiento general del programa que no llegaremos a \des1

1 Elementos

2 Este

\Padre"
pro eso es identi o al que hemos seguido en el MEF.

50

El Prepo esador GMESH.


6
4

7
4

5
1

8
1

E lemento P adre

E lemento H ij o

E lementos remallados

Figura 7.1: Esquema de la Subdivision


menuzar" por ser relativamente sen illo, es la entrada de datos y el sistema
seguido para estable er el sistema de remallado.
Fundamentalmente, modi amos en algunos detalles la nomen latura para
a omodarnos al tipo de programa. As, a los elementos de partida, los llamaremos Bloques, y al resto de las variables les daremos nombres pare idos a
los utilizados hasta ahora, pero no ne esariamente identi os.
El programa esta preparado para ha er que el programador reali e el menor
esfuerzo ne esario, por ejemplo, en los elementos de o ho nodos solo ha e
falta es ribir las oordenadas de los uatro nodos de las esquinas. En el aso
de que haya elementos on lados urvos, despues de es ribir los nodos de los
bloques, se es ribiran ex lusivamente las oordenadas de un punto, aproximadamente intermedio, que este en el o en los lado/s urvo/s.
Aparte de ello, y omo es logi o, hay que es ribir la one tividad. Si el elemen-

7.1 Un prepo esador para P54CD

51

to original es un uadrilatero, la es ritura de los datos anteriores es mnima,


puesto que se trata de un solo Bloque. Finalmente, y para esta primera parte,
men ionaremos que el primer valor de la one tividad nos de ne el material,
de forma que si tenemos dos materiales diferentes dentro de un bloque ini ial
geometri amente sen illo, tendremos que utilizar ne esariamente dos bloques
para re ejar esa diferen ia de material.
En uanto a la subdivision en s se utiliza un sistema de pondera ion de
las parti iones, de forma que despues de es ribir el numero de parti iones
segun el eje artesiano de que se trate, se es ribe la an hura relativa de estas
entre s. Por ejemplo, si tenemos in o parti iones y las queremos todas de la
misma an hura, es ribiremos in o ve es el numero 1. Pero si queremos que
ada parti ion sea la mitad de la anterior, podremos es ribir la se uen ia:
1 1=2 1=4 1=8 1=16, o bien la se uen ia 16 8 4 2 1. El resultado
en ambos asos sera identi o, por lo que al programador le resultara simple
elegir la forma mas sen illa de ponderar los espa iamientos.

7.1.1.

Entrada de Datos

Vamos a ver on ierto detalle la parte orrespondiente a la entrada de


datos o si se pre ere, la es ritura del hero \gmesh.dat".

 En la primera lnea del hero debe gurar, por este orden,el numero
total de nodos de esquina, el numero de bloques o elementos padre y un
parametro que vale ero si no existen lados urvos o bien uno si existen
lados urvos .
3

 En la segunda lnea y si fuera pre iso, en las siguientes , gurara la


4

one tividad de los elementos bloque, de la misma manera que se ha a


on el programa P54CD.

 A ontinua ion y en tantas lneas omo nodos de esquina hayamos de-

larado, es ribiramos el numero del nodo, su oordenada x y su oordenada y. Como veis todo similar al esquema seguido en el programa
prin ipal.

3 En

realidad, el programa solo esta obligado si el valor del parametro es uno. Si es


ualquier valor distinto a uno, onsidera que no hay lados urvos. De todos modos es
mejor a ostumbrarse a utilizar 0 y 1 para le turas rapidas o de orre ion de estos heros
4 Cada lnea orrespondera a un bloque

52

El Prepo esador GMESH.

 En el aso de que no haya lados urvos, los datos suministrados bas-

taran para de nir la malla \padre" y pasaramos dire tamente al estable imiento de las subdivisiones omo luego veremos. En el aso de que
haya lados urvos, es ribiramos una lnea en la que gurara el numero
de lados urvos y a ontinua ion y en tantas lneas omo numero de
lados urvos existan, es ribiramos el numero de nodo orrespondiente
aproximadamente a la parte media de di ho lado urvo y sus oordenadas al uladas exa ta o muy aproximadamente por medios analti os o
gra os.

 Ahora ya, y ualquiera que fuera el aso, tenemos de nitivamente de-

nida la malla originaria o padre, y pasamos a la de ni ion de la subdivision deseada. Para de nir la subdivision es ribimos en una lnea
el numero de subdivisiones que queremos obtener en la dire ion x y
en la dire ion y. A ontinua ion, y en la lnea siguiente, es ribimos
los oe ientes ponderados, de a uerdo on lo di ho antes, de las subdivisiones segun el eje x, y nalmente los oe ientes segun el eje y.
Este onjunto de tres lneas, deberemos es ribirlo para ada uno de los
bloques que existan.

Con esto quedara terminado el hero \gmesh.dat" y podramos rodar el


programa GMESH . El resultado lo obtendramos es rito en el hero mesh
para le tura inmediata por parte de P 54CD.
A ontinua ion vamos a ver unos ejemplos donde generemos este ultimo hero. No quiero dejar de llamar la aten ion sobre el he ho de que los datos
referentes a las subdivisiones de los elementos \padre" o bloques, deben ser
oherentes entre s. As, si tenemos un bloque en ima de otro que tenga la
misma an hura, o en la parte de la an hura del mas estre ho de los dos, las
subdivisiones segun el eje x deben oin idir para que no exista una dis ontinuidad de elementos en la union de los bloques en la malla nal. Lo mismo,
laro esta, en sentido perpendi ular.

7.2. Ejemplos
Veamos ahora un sen illo ejemplo que se orresponde on el que ya vimos
en una o asion y on el que haremos alguna pra ti a.
En la gura 7.2 hemos representado, por un lado, el modelo que debemos
tomar para preparar la entrada de datos, a la izquierda, el hero que on-

7.2 Ejemplos

53

F i hero
gmesh:dat
410
114678532
100
360
609
869
23
11
111

25

29

17

21

13

1
1

2
5

Figura 7.2: Ejemplo de utiliza ion de GMESH


tendra la entrada de datos y, nalmente, la malla reada a la dere ha. Dos
e has en la parte superior, nos indi an omo para pasar de una a otra, solo
es pre iso es ribir el hero en uestion. Sin embargo, este es un aso muy
dis reto o po o espe ta ular, si se me permite la expresion. No es que se trate
de bus ar o ha er asos espe ta ulares, omo es fa il omprender, solo por ha erlos, pero s es ierto que es una medida de la apa idad del programa. En
realidad para el ejemplo utilizado, bastara esta malla obtenida o quiza remallar un po o mas densamente la zona de arriba, en la mitad izquierda,
pero, repito, solo para ver la poten ia del sistema, simplemente on haber
ambiado las tres ultimas lneas a las siguientes:
............
5 10
1 1 1 1 1
1 1 1 1 1 1 1 1 1 1

nos en ontraramos on una malla de in uenta elementos y alrededor de 230


nodos, y todo ello sin querer ha er un re no en el sentido de las pondera iones.
En la gura 7.3 podemos ver un aso mas importante. Se trata de la rea ion
de la malla para una avidad ir ular rodeada de un re tangulo de hormigon.
El interes de esta malla radi a prin ipalmente en omprobar la bondad de la
aproxima ion en los lados urvos. Como en la malla nal tenemos de nidos
todos los nodos, podemos omprobar en que por entaje se desva la malla
obtenida de la teori amente exa ta, si hubieramos jado las oordenadas omo pertene ientes al r ulo. por otra parte el hero de entrada de datos

54

El Prepo esador GMESH.

para GMESH, no es ex esivamente ompli ado omo vemos a ontinua ion.


Fi hero \gmesh.dat" para la genera ion del aso dis utido:
8 4 1
1 1 4 6 7 8 5 3 2
1 1 9 18 16 13 10 6 4
1 8 11 15 17 20 12 3 5
1 13 16 18 19 20 17 15 14
1 0 0
3 10 0
6 3.5858 3.5858
8 6.4142 3.5858
13 3.5858 6.4142
15 6.4142 6.4142
18 0 10
20 10 10
4
7 5 3
10 3 5
11 7 5
14 5 7
12 10
1 1 1 1 1 1 1 1 1 1 1 1
10 9 8 7 6 5 4 3 2 1
10 12
10 9 8 7 6 5 4 3 2 1
1 1 1 1 1 1 1 1 1 1 1 1
10 12
1 2 3 4 5 6 7 8 9 10
1 1 1 1 1 1 1 1 1 1 1 1
12 10
1 1 1 1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9 10

Con estos datos introdu idos a partir de la gura 7.3 y simplemente, rodando
el programa GMESH, obtenemos las imagenes de las proximas guras, que
representamos on el software DANPLOT . Este programa, no totalmente
terminado, tiene una gran apa idad para pre y postvisualizar los resultados
de forma sen illa y lara. Esta es la malla que nos sirve omo punto de ini io
5

5 Este

hester

software ha sido realizado por el D . Daniel Kidger de la Universidad de Man-

7.2 Ejemplos

55

11

20

18

12

17

19

13

16

10

14

15

Figura 7.3: Malla originaria dibujada segun los nodos ono idos.
de nuestro mallado. Como vemos, uatro elementos, o ho nodos de esquina
y uatro nodos en medio de lados urvos, de a uerdo on los datos que se
han es rito mas arriba. Despues de orrer GMESH, la malla obtenida, que
el programa de postpro eso DANPLOT lee dire tamente e imprime en la
pantalla o en un hero, es la que podemos ver en la gura 7.4.
Como podemos ver la regularidad de la malla es total, y lo que es mas importante, sin haber de nido nada mas que los puntos a =4, pero habiendo di ho
que se trataba de un lado urvo, el propio programa nos ha re onstrudo asi
perfe tamente el r ulo ini ial, que no quedaba representado, omo es logi o, en la malla de origen, pero el programa s que lo aproxima interiormente
omo debe ser.
A ttulo de uriosidad, vamos a ver uanto nos alejamos por entualmente del
valor exa to. Ha iendo rapidamente unos numeros on los valores obtenidos
para el r ulo podemos de ir que el mayor error no supera el 5 %, lo que
es perfe tamente a eptable, partiendo de donde hemos partido. En aso de
ne esitar una aproxima ion mayor, en temas muy rti os o de gran respon-

56

El Prepo esador GMESH.

Figura 7.4: Malla obtenida despues de \ ltrar" la anterior por GMESH.


sabilidad, hubieramos ganado mu ha pre ision si introdu imos o ho bloques
originales en vez de uatro, ortando segun los ejes oordenados a la altura
del entro del r ulo. En ese aso nos en ontraramos on tres valores intermedios del r ulo en vez de uno. Sera un po o mas laborioso para introdu ir
los datos, aunque una solu ion sen illa onsistira en ha er dos pasadas por
GMESH. En la primera des ompondramos la malla ini ial en una on el doble numero de elementos. Corregiramos las peque~nas diferen ias habidas en
los puntos del r ulo, y la propia malla obtenida y orregida en esos peque~nos
detalles, nos servira para rear el de nitivo hero \gmesh.dat". Despues de
rodar por segunda vez GMESH, es muy probable que las impre isiones de
geometra no llegaran al 1 %.
Evidentemente, y esa es la fuerza del sistema propuesto, resultara extremadamente sen illo automatizar este pro eso on una peque~na rutina. Podra
in luros una en el apendi e, pero eso ira, de alguna manera, en ontra del
espritu de este ursillo, puesto que sera el primer paso detras del ual se
pretenderan resolver todos los posibles problemas y volveramos al progra-

7.2 Ejemplos

57
117

449
420
408
102

131

25
103
26

419

122
438

77
78
79
80
81

418

407
64
13
65

14

66

417

121
39

40

41

42

43

44

406

26

27

28

Figura 7.5: Detalle de diferentes zonas de la malla obtenida I


ma Gargantua, que posteriormente resulta mas dif il de manejar, que ha er
peque~nas orre iones de ayuda omo la men ionada. Para ello es absolutamente fundamental tener los on eptos que hemos visto, totalmente laros y
transparentes. Con tres o uatro programas base, omo el P54CD, donde se
traten situa iones su ientemente amplias, se puede resolver la gran mayora
de las situa iones que podemos en ontrar en la vida profesional, on un ontrol de los resultados y de la mar ha del programa totalmente impensable
para el usuario de los lasi os grandes programas que utilizan el MEF para
resolver todo lo imaginable. En la realidad, mu has ve es o urre que el aso
que tiene uno entre manos, por uriosa oin iden ia, no esta ontemplado en
esos enormes manuales y hay que tratar de a eptar una solu ion que teori amente no debe estar muy alejada de la que andamos bus ando, pero que,
iertamente, no es la que queramos.
En las guras 7.5 y siguientes, se muestran detalles de nuestra malla y en
el Apendi e se adjuntara toda la salida gra a orrespondiente al ejemplo
standard que tomamos, y que orresponde a las guras 5;18 y 5;19 del libro
\Programming the Finite Element Method", 2 edi ion del que son autores
los Profs. I.M.Smith y D.V.Griths, del que se han tomado las foto opias que
os adjunto, on expreso permiso de los autores, y que ha sido la base de este
Seminario, del que espero saqueis algun prove ho, que sera mi re ompensa.
a

58

El Prepo esador GMESH.

1531

1532

1533

478

1535

1534

1512

479

1536

1513

480

1173

1172

1152

1498

1499

1500

1501

1502

1171
360

1141
1478

467

1479
468
1170
1151

1140

1465
1466
1467
1468
1169

1120
359

1139

455
1445
456

350

1168
1150
1138

1432

1109

1433
1434
1119

1167
358
1137

1108

1411
444

349

Figura 7.6: Detalle de diferentes zonas de la malla obtenida II

389
372

396

390
391

113

395
392

393

373

352

116

394
375

114

374

358

115

353

357
354

355

356

101

104
335

337
102

336

103

314

320
315

319
316

317

318

89

92
299

297
90

298

91

282

276
281

277
278

259

78

279

260

280

261

79

239

243
240

241

242

Figura 7.7: Detalle de diferentes zonas de la malla obtenida III

Apendi e A
Resolu ion del Sistema
Aunque este tema se es apa del ampo espe  o del MEF siendo mas
propio del Cal ulo Numeri o, tiene una gran importan ia a efe tos del rendimiento de los programas. Por ello, voy a extenderme en este apendi e sobre
el tema en uestion, para analizar las diferentes posibilidades que se nos presentan y on mas detalle, expli are la elegida en P 54CD .
En prin ipio, seguire el tambien ex elente libro del Prof. Ian M. Smith: \Numeri al Methods for Engineers", de forma que el enfoque y la losofa seguida,
oin idan de alguna manera on el resto de lo que hemos visto hasta ahora.
Vamos por tanto a revisar los siguientes puntos:

 Resolu ion de Sistemas de E ua iones segun el sistema onven ional de


elimina ion de Gauss.

 Resolu ion de Sistemas de E ua iones utilizando la fa toriza ion L U .


 Resolu ion de Sistemas on matriz simetri a.
 Resolu ion de Sistemas on matriz simetri a en banda.
De esta forma, viendo el panorama general, entenderemos las herramientas
que tenemos a nuestra disposi ion y la razon de una buena ele ion. Pro urare es ribir alguna rutina para los asos mas interesantes, de forma que,
omo siempre a lo largo del seminario, tengamos lado a lado la formula ion
y la programa ion, uno de los mejores metodos para entender y desarrollar
esta ultima.

60

Resolu ion del Sistema

A.1. Introdu ion


Para que no quede ningun abo suelto, vamos a empezar desde el prin ipio
on detalle, de modo que tengamos una base para ir avanzando mas deprisa
posteriormente. Evidentemente, estas primeras lneas no requieren nada mas
que una rapida le tura para entrar en materia.
Supongamos que tenemos el onjunto de e ua iones siguiente:
a11 x1 + a12 x2 + a13 x3
a21 x1 + a22 x2 + a23 x3
a31 x1 + a32 x2 + a33 x3

=b
=b
=b

(A.1)

2
3

que podemos es ribir en la forma redu ida habitual:


Ax

(A.2)

En estas e ua iones, los oe ientes y los terminos independientes son ono idos y se trata de determinar el valor de las in ognitas xij .

A.2. Metodo de elimina ion de Gauss.


Empe emos on unas e ua iones dadas. Por ejemplo:
10x + x 5x = 1(a)
20x + 3x + 20x = 2(b)
(A.3)
5x + 3x + 5x = 6( )
Para eliminar terminos, podramos, por ejemplo, multipli ar la e ua ion (a)
por dos y sumarla a la e ua ion (b). Asmismo, dividiramos la e ua ion (a)
por dos y la restaramos a la e ua ion ( ). Con esto habramos eliminado la
in ognita x de (b) y ( ) y operando segun el mismo riterio entre estas dos
e ua iones, obtendramos el valor de x . En ese momento nuestras e ua iones
podran expresarse :
1

2
4

38

10 1 5 < x
0 5 10 5 : x
0 0 2;5
x

1
2
3

9
=

8
<

1 =
=: 4 ;
;
3;5

(A.4)

es de ir,
Ux

(A.5)

A.2 Metodo de elimina ion de Gauss.

61

Es evidente que las matri es del tipo de la matriz U pueden ser muy utiles
uando tengamos sistemas de e ua iones.
De modo similar, si tuvieramos el sistema de e ua iones siguiente :
9
8
9
2
38
l
0 0 <x = <y =
4 l
l
0 5: x ; = : y ;
(A.6)
x
l
l32 l
y
o, resumida,
Lx = y
(A.7)
Sera fa il al ular x una vez ono idas L e y. El pro eso seguido para
en ontrar ese valor de x es el que llamaremos \sustitu ion ha ia delante". En
lo que se re era a los metodos dire tos de solu ion de sistemas de e ua iones,
de los que hablemos, veremos apare er fre uentemente matri es del tipo U
y L.
Veamos a ontinua ion un peque~no programa que lleva a abo la solu ion
de un sistema de e ua iones apli ando el metodo de elimina ion de Gauss .
Antes de ello, sin embargo, y para que podamos ha er unas a lara iones
posteriores, es ribiremos expl itamente los pasos que nos han llevado a la
e ua ion A.4. El pro eso sera:
11

21

22

31

33

20  (a) ! 5 x + 10 x = 4 (d)
(b)
10
 
5  (a) ! 2;5 x + 7;5 x = 5;5 (e)
( ) 10
2

(A.8)

Un paso mas todava, sera :


(e)
1 En

2;5  (d) ! 2;5 x = 3;5


5
3

(A.9)

todo este Apendi e, que vamos a tratar on ierta profundidad, in luiremos numerosos programas, sen illos en general, pero edu ativos. Los ultimos que se re eren a
este tema, pueden llegar a ser extremadamente utiles. Esto va a ha er que este primer
apendi e sea bastante mas amplio de lo que en un prin ipio estaba previsto, pero reo que
el peque~no esfuerzo suplementario, vale la pena para realizar programas mas e ientes y
que permitan elegir el \solver" mas ade uado y sobretodo, sabiendo que es lo que se ha e,
que a n de uentas es lo mas importante de este seminario.

62

Resolu ion del Sistema

Una vez es ritas estas e ua iones elementales, pero que nos seran de utilidad
para expli ar on eptos mas adelante, vamos a ver nuestro primer programa
de este apendi e, omo ya hemos di ho.
PROGRAM A21
C
C PROGRAMA A21 - SISTEMA BASICO DE GAUSS
C
C MODIFICAR LA SIGUIENTE LINEA SEGUN SEA EL TAMA~NO
C
PARAMETER(IN=20)
C
REAL A(IN,IN),B(IN)
C
C INICIO
C
READ(5,*) N
READ(5,*) ((A(I,J),J=1,N),I=1,N)
READ(5,*) (B(I),I=1,N)
WRITE(6,*) ('ELIMINACION DE GAUSS')
WRITE(6,*) ('********************')
WRITE(6,*)
WRITE(6,*) ('MATRIZ DE COEFICIENTES')
CALL PRINTA(A,IN,N,N,6)
WRITE(6,*)
WRITE(6,*) ('VECTOR DE TERMINOS INDEPENDIENTES')
CALL PRINTV(B,N,6)
WRITE(6,*)
C
C CONVERTIR AL TIPO DE MATRIZ U
C
DO 1 K=1,N-1
IF(ABS(A(K,K)).GT.1.E-6) THEN
DO 2 I=K+1,N
X=A(I,K)/A(K,K)
DO 3 J=K+1,N
A(I,J)=A(I,J)-A(K,J)*X
3
CONTINUE
B(I)=B(I)-B(K)*X
2
CONTINUE
ELSE
WRITE(6,*) ('ENCONTRADO PIVOTE=0 EN LA LINEA:')
WRITE(6,*) K
STOP

A.2 Metodo de elimina ion de Gauss.


1

63

ENDIF
CONTINUE
WRITE(6,*) ('MATRIZ MODIFICADA')
CALL PRINTA(A,IN,N,N,6)
WRITE(6,*)
WRITE(6,*) ('NUEVOS TERMINOS INDEPENDIENTES')
CALL PRINTV(B,N,6)
WRITE(6,*)

C
C SUSTITUCION HACIA ATRAS
C
DO 5 I=N,1,-1
SUM=B(I)
IF(LI.LT.N)THEN
DO 6 J=I+1,N
SUM=SUM-A(I,J)*B(J)
6
CONTINUE
ENDIF
B(I)=SUM/A(I,I)
5
CONTINUE
C
C IMPRIMIR RESULTADOS
C
WRITE(6,*) ('VECTOR DE RESULTADOS')
CALL PRINTV(B,N,6)
STOP
END

A lo largo del pro eso seguido, podemos ver en las e ua iones A.8 y A.9, que la
matriz de oe ientes y los terminos independientes se van modi ando. El programa A21 termina nalmente sobrees ribiendo el ve tor B on la solu ion de los
valores de x. Viendo el pro eso, observamos que en las e ua iones A.8 existe una
division por el oe iente a11 { que en este aso vale 10 { mientras que en la e ua ion A.9 la division se efe tua por el oe iente modi ado a22 { igual a 5 en este
aso. Estos oe ientes akk se llaman \pivotes" y esta laro que pueden, o bien ser
iguales a ero o onvertirse en ero durante el pro eso seguido. Volveremos a este
problema posteriormente, pero lo men ionamos ya para entender por que hemos
puesto el STOP en medio del programa en el aso de en ontrarse un pivote que
sea igual a ero.

64
A.2.1.

Resolu ion del Sistema


Observa iones sobre el pro eso de elimina i
on

En el programa A21 se ha operado sobre algunos terminos bajo la diagonal


en la matriz U (e . A.5) que se saba on antela ion que iban a ser nulos.
Esto, evidentemente, es tiempo perdido y opera iones inne esarias. Por otro
lado, al seguir el pro eso de elimina ion, hemos modi ado el ve tor b ini ial,
de forma que si quisieramos repetir el al ulo on diferentes valores de b, lo
que es fre uente en el MEF, ada vez tendramos que repetir el pro eso de
elimina ion ompleto.
En onse uen ia vamos a intentar mejorar el sistema seguido de forma que
se puedan pro esar diversos valores de b sin tener que repetir el pro eso
de \des omposi ion" de la matriz A a una matriz triangular. Este pro eso
ondu e a una \fa toriza ion" de di ha matriz en matri es triangulares. As,
por ejemplo, se puede demostrar que la matriz A se puede siempre es ribir
omo el produ to:
A = LU
(A.10)
donde L es una matriz triangular \inferior" y U es triangular \superior", del
tipo :
2
3
l
0 0
l
0 5
L=4 l
(A.11)
11

21

22

l31 l32 l33

u11 u12 u13


U = 4 0 u22 u23 5
0 0 u33

(A.12)

los numeros lkk y ukk son arbitrarios aunque deben umplir iertas ondi iones, por ejemplo :
l u =a
(A.13)
Es habitual a eptar que, o bien lkk o bien ukk son la unidad, de forma que
tengamos :
2
3
3
2
3 2
a
a
a
1 0 0
u
u
u
4 a
a
a 5 = 4 l
1 054 0 u u 5
(A.14)
a
a
a
l
l32 1
0 0 u
Esta es la forma usual de la fa toriza ion LU a la que dedi aremos el proximo
apartado.
11

11

12

13

21

22

23

21

31

32

33

31

11

11

11

12

31

22

23

33

A.3 Resolu ion del sistema utilizando la fa toriza ion LU .

65

A.3. Resolu ion del sistema utilizando la fa toriza ion LU .


Una vez que hemos al ulado los fa tores L y U de las e s. A.10 y A.14
pro edemos omo sigue:
Ax

(A.15)

o lo que es lo mismo LU x = b . Ha emos ahora


Ux

(A.16)

Ly

(A.17)

y por tanto,
Como L y b son ono idas y L no depende de b, el pro eso a seguir es
simplemente la \sustitu ion ha ia delante" que vimos en la e . A.7. Cuando
la e . A.17 se ha resuelto para y, la e . A.16 es la \sustitu ion ha ia atras"
que se ontemplaba en la e . A.5
El algoritmo de la solu ion del sistema omprende por tanto, tres fases
 Fa toriza ion representada en la e . A.15.
 Sustitu ion ha ia delante, omo vemos en la e . A.17.
 Sustitu ion ha ia atras, segun la e . A.16
Las subrutinas para estas tres opera iones se utilizan en mu has o asiones,
por lo que resulta logi o que aparez an en una librera general. Las llamaremos LUFAC, SUBFOR y SUBBAC y sus listados se in luyen mas
adelante.
2

Las e ua iones A.14 se evaluan omo sigue :

Fila1

11

12

13

Es de ir, la primera la de U es simplemente una opia de la de A. La subrutina


LUFAC empieza por poner a ero L, (a la que llamaremos \LOWTRI") y U
(llamada \UPTRI"), y opiar la primera la de A en UPTRI.
2 La

diferen ia entre sustitu ion ha ia delante o ha ia detras se re ere ex lusivamente


al he ho de que la matriz que utilizamos sea de tipo triangular inferior, en uyo aso la
primera in ognita al ulada es la que o upa el primer lugar en el ve tor de in ognitas, o
superior, en uyo aso la primera in ognita al ulada es la que o upa la ultima posi ion
en el ve tor de in ognitas.

66

Resolu ion del Sistema

Fila2

l u
21

11

= a21

21

a21
u11

Una vez al ulado l21 , se pueden al ular u22 y u23 ya que:

l u
21

12

+ u22 = a21

22

= a22

l u
21

12

y tambien:

l u +u =a
!
u =a l u
Fila3
l u =a
!
l = ua31
l u +l u =a
!
l = a32 ul2231 u12
Una vez ono idos l y l , se puede al ular u segun sigue :
l u +l u +u = a
!
u =a l u l u
21

13

23

23

31

31

12

32

23

11

22

31

13

32

23

33

21

31

32

31

31

23

13

11

32

32

33

33

33

33

31

13

32

23

La subrutina LUFAC lleva a abo estas opera iones en dos partes, la orrespondiente a los omponentes bajo la diagonal prin ipal y la orrespondiente a los
omponentes sobre di ha diagonal. Como en el programa A21, se omprueba que
el pivote no sea ero3 .

A.3.1.

El programa

A22

de resolu i
on a trav
es de la

fa toriza i
on L*U.

A ontinua ion es ribiremos el listado del programa A22 similar al A21


pero utilizando la des omposi ion de la matriz de los oe ientes en las matri es L y U omo hemos visto:
PROGRAM A22
C
C RESOLUCION DE GAUSS UTILIZANDO LA FACTORIZACION L*U
C
C MODIFICAR LA SIGUIENTE LINEA SEGUN SEA EL TAMA~NO
C
PARAMETER (IN=20)
C
REAL A(IN,IN),UPTRI(IN,IN),LOWTRI(IN,IN),B(IN)
C
READ(5,*)N
READ(5,*)((A(I,J),J=1,N),I=1,N)
READ(5,*)(B(I),I=1,N)
WRITE(6,*)('RESOLUCION DE GAUSS FACTORIZANDO, L*U')
3 Evidentemente

todas estas subrutinas y programas no se limitan al aso de tres e ua iones on tres in ognitas, sino que ontemplan el aso mas general.

A.4 E ua iones on la matriz de oe ientes simetri a.

67

WRITE(6,*)('*************************************')
WRITE(6,*)
WRITE(6,*)('MATRIZ DE COEFICIENTES')
CALL PRINTA(A,IN,N,N,6)
WRITE(6,*)
WRITE(6,*)('VECTOR DE TERMINOS INDEPENDIENTES')
CALL PRINTV(B,N,6)
WRITE(6,*)
CALL LUFAC(A,UPTRI,LOWTRI,IN,N)
WRITE(6,*)('FACTORES TRIANGULARES SUPERIORES')
CALL PRINTA(UPTRI,IN,N,N,6)
WRITE(6,*)
WRITE(6,*)('FACTORES TRIANGULARES INFERIORES')
CALL PRINTA(LOWTRI,IN,N,N,6)
WRITE(6,*)
CALL SUBFOR(LOWTRI,IN,B,N)
CALL SUBBAC(UPTRI,IN,B,N)
WRITE(6,*)('VECTOR SOLUCION')
CALL PRINTV(B,N,6)
STOP
END

Los programas A21 y A22 tienen mu ho en omun, sin embargo si hubiera que
pro esar varios ve tores b, solo sera ne esario llamar a la subrutina LUFAC
una vez y rear un peque~no bu le que lea ada vez el nuevo ve tor b y llame
a SUBFOR y a SUBBAC para obtener las solu iones para ada aso. Como
el tiempo que toma la subrutina LUFAC es notablemente mayor que el que
o upan SUBFOR y SUBBAC, esto supone una gran e onoma.

A.4. E ua iones on la matriz de oe ientes


simetri a.
Si los oe ientes de la matriz A satisfa en la ondi ion
aij

(A.18)

aji

la matriz se di e que es simetri a. Sea por ejemplo la matriz:


2

16 4 8
4 5 45
8 4 22

(A.19)

68

Resolu ion del Sistema

Si la subrutina LUFAC se utiliza para fa torizar esta matriz, obtenemos el


resultado siguiente:
2
3
1
0 0
1 05
L = 4 0;25
(A.20)
0;5 1;5 1
2

16 4 8
4
0 4 65
U =
(A.21)
0 0 9
Si las las de U se dividen por ukk, donde \k" representa la la, se obtiene
2
3
1 0;25 0;5
1
1;5 5
U = 4 0
(A.22)
0 0
1
de forma que tenemos lij = u ji. El paso de la matriz U a la U se lleva a
abo, en terminos matri iales, por medio de
U = DU
(A.23)
donde D es la matriz diagonal:
2
3
16 0 0
D = 4 0 4 0 5
(A.24)
0 0 9
Como onse uen ia de todo lo anterior podemos de ir que si A es una matriz
simetri a, siempre la podremos es ribir en la forma
A = L U = L D U = L D LT
(A.25)
y la onse uen ia de ello es que solo tendremos que al ular la matriz U { o
la U T { lo que supone mas o menos, la mitad del trabajo que en el aso de
la fa toriza ion de matri es no simetri as.
Vamos a ver que forma tendra el programa que utilizara este metodo, es
de ir, en el aso de matri es simetri as resueltas por medio de la fa toriza ion del tipo LDLT . LLamaremos al programa A23 y es ribiremos el listado
a ontinua ion . La subrutina \LDLT", que omo el resto de las subrutinas
1

4 En

lo que sigue, y en aso de que no sea absolutamente ne esario, vamos a a ortar los
listados de los programas, eliminando todas las ordenes relativas a la presenta ion de los
resultados, a n de ha er los listados mas ortos y ubriendo solo la parte que nos interesa.
Por otro lado, el tipo de programa ion que hemos estado usando hasta ahora para di ha
presenta ion, en este Apendi e, es bastante primitiva y no tiene nada de espe ial que
merez a la pena

A.4 E ua iones on la matriz de oe ientes simetri a.

69

que apare en en los programas se es ribira en el listado general de subrutinas


al nal de este aptulo del apendi e, forma la matriz U T de la e . A.21, que
sobrees ribe a la matriz A, y los terminos diagonales de la matriz D de la
e . A.24, que se guardan en el ve tor D. De la sustitu ion ha ia delante se
en arga la subrutina LDLFOR y la sustitu ion ha ia atras es la onven ional que lleva a abo SUBBAC. Un interesante subprodu to de este metodo,
es que se obtiene el determinante de la matriz A omo el produ to de los
omponentes de D.
Veamos ahora el listado del programa :
PROGRAM A23

C
C RESOLUCION DE GAUSS PARA MATRIZ SIMETRICA A=L*D*LT. LT SOBREESCRIBE A
C
C MODIFICAR LA SIGUIENTE LINEA SEGUN EL TAMA~NO
C
PARAMETER (IN=20)
C
REAL A(IN,IN), D(IN), B(IN)
C
READ(5,*)N
READ(5,*)((A(I,J),J=1,N),I=1,N)
READ(5,*)(B(I),I=1,N)
C
C AQUI SE PUEDE ESCRIBIR LA PRESENTACION
C
CALL LDLT(A,IN,D,N)
CALL LDLFOR(A,IN,B,N)
DO 1 I=1,N
DO 1 J=1,N
1
A(I,J)=A(I,J)/D(I)
CALL SUBBAC(A,IN,B,N)
C
C AQUI SE PUEDE ESCRIBIR LA SALIDA DE RESULTADOS
C
STOP
END

Como se ve, quitando al programa la paja de los \WRITE" de es ritura, se


observa mu ho mejor el programa en s, que por otra parte se puede on retar
en la le tura de datos y la llamada a dos o tres subrutinas, que son las que
ha en el trabajo fuerte.
Vamos a \adentrarnos" ahora en asos mas espe  os, pero de apli a ion
espe ial en el MEF, ya que, hasta ahora, todo lo visto tiene un ara ter ge-

70

Resolu ion del Sistema

neral.
Empezaremos re ordando determinados temas en los que se basaran despues
varios de los sistemas de resolu ion de e ua iones utilizados en el MEF, omo
es el aso de las formas uadrati as de nidas positivas, aunque nos limitaremos a unas uantas de ni iones poque es un tema muy sen illo para este
nivel de urso.

A.5. Formas Cuadrati as.


Una forma uadrati a es una expresion de segundo grado en n variables,
de la forma
Q(x) = a11 x21 +2a12 x1 x2 + : : : +2a1n x1 xn
+a22 x22 + : : : + 2a2nx2 xn
+:::+
+annx2n:

Normalmente, los terminos del tipo \2a

12

2a

12

x1 x2 "

se separan en dos terminos

x1 x2 = a12 x1 x2 + a12 x2 x1
= a12 x1 x2 + a21x2 x1

de forma que se pueda es ribir una version matri ial simetri a


Q(x) =+a11 x21 +a12 x1 x2 + : : : + a1n x1 xn
+a21 x2+
x1a22 x22 + : : : + a2n x2 xn
:::
:::
:::
:::
:::
:::
+an1xn+x1an2 xnx2+ : : : + annx2n

Esta forma uadrati a es \positiva"si es igual o mayor que ero para todos los
valores de sus variables. Una forma positiva que solo es ero para los valores
x = x = x : : : = xn = 0 se di e que es \de nida positiva". Si la forma
uadrati a es positiva pero no de nida positiva, se di e que es \semi-de nida
positiva".
Con la nota ion usual que estamos empleando para ve tores y matri es, la
1

A.5 Formas Cuadrati as.

71

forma uadrati a se puede es ribir en forma ompa ta:


Q(x) = xT Ax

En esta expresion A es \la matriz de la forma uadrati a Q(x)". Por otro


lado Q(x) es singular o no-singular si A es ero o diferente de ero, respe tivamente.
Para que la forma uadrati a sea \de nida positiva", las antidades
a11 ;

a11 a12
a21 a22

a11 a12 a13


a21 a22 a23
a31 a32 a33

a11



an1



a1n

.............
.............





ann

deben ser todas positivas.


A.5.1.

M
etodo de Cholesky

Ya hemos llegado al punto en que podemos entrar en el sistema de resolu ion de Cholesky, de momento es su forma mas orriente sin entrar en
grandes ompli a iones, es de ir, tal y omo viene \de serie" en el Programa
P54CD.
Cuando la matriz de los oe ientes A es simetri a y positiva de nida se
puede llevar a abo una fa toriza ion algo diferente si obligamos a que la
matriz U sea la traspuesta de L. Esta fa toriza ion se puede es ribir,
A = LLT
(A.26)
, o mostrando todos sus omponenetes,
2
3
2
3 2
3
a
a
a
l
0 0
l
l
l
4 a
a
a 5 = 4 l
l
0 54 0 l l 5
(A.27)
a
a
a
l
l
l
0 0 l
En este aso tendremos l = a de forma que l = sqrta y por onsiguiente en ada la tendremos que al ular una raiz uadrada. Para la matriz A
dada en la e ua ion A.19, los fa tores de Cholesky son
2
3 2
3
4 0 0
4 1 2
35
L LT = 4 1 2 0 5 4 0 2
(A.28)
2 3 3
0 0 3
Este metodo es espe ialmente ade uado uando se trata de matri es \en
banda" omo veremos a ontinua ion.
11

12

13

11

21

22

23

21

22

31

32

33

31

32

2
11

11

11

33

21

31

22

32

33

11

11

72

Resolu ion del Sistema

A.5.2.

E ua iones en banda

En mu has apli a iones de la Ingeniera y muy espe ialmente. en lo que se


re ere al MEF, nos en ontramos on sistemas de e ua iones que tienen una
estru tura \en banda". As lo hemos visto en el aptulo 6 y espe ialmente
en el apartado 6.3 (Ver gura 6.2). La matriz K que guardabamos en la e .
6.3 y despues de ha er la fa toriza ion segun hemos visto al nal del apartado
anterior, sera en este aso,
o

L=

6
6
6
6
6
6
4

l11 0 0 0 0 0
l21 l22 0 0 0 0
l31 l32 l33 0 0 0
0 l42 l43 l44 0 0
0 0 l53 l54 l55 0
0 0 0 l64 l65 l66

3
7
7
7
7
7
7
5

(A.29)

que puesta en la misma forma de enton es y llamandola LB para distinguirla,


quedara
2

LB

6
6
6
6
6
6
4

0 0
0 l

l31
l42
l53
l64

21

l32
l43
l54
l65

l11
l22
l33
l44
l55
l66

3
7
7
7
7
7
7
5

(A.30)

Es ribiendo la parte fundamental del programa que nos resolvera este aso,
tendremos,

C
C
C

PROGRAM A24
PARAMETER (IN=20, IIW=10)
REAL LB(IN,IIW), B(IN)
READ(5,*) N,IW
IWP1=IW+1
READ(5,*)((LB(I,J),I=1,IWP1),J=1,N)
READ(5,*)(B(I),I=1,N)
LINEAS DE ESCRITURA
CALL CHOFAC(LB,IN,B,N,IW)
ESCRITURA
CALL CHOSUB(LB,IN,B,N,IW)
ESCRIBIR SALIDA
STOP
END

A.6 Sistemas de banda dispersa

73

Como vemos, en todos estos programas lo uni o que tiene interes son las
subrutinas { en este aso CHOFAC y CHOSUB { que, omo hemos di ho,
veremos al nal. Lo que vemos ahora, nos permite seguir el programa de
resolu ion en ada aso, omprobando que, generalmente, lo uni o que vara
son las dos rutinas prin ipales de redu ion y sustitu ion. El aso que vamos a
ver a ontinua ion, sin embargo, supone un \paso adelante" signi ativo, que
bien utilizado permite redu ir de forma importante los tiempos de eje u ion
de programas que generen una malla dispersa.

A.6. Sistemas de banda dispersa


En algunos asos de problemas resueltos utilizando el MEF, no es infre uente que, si existen formas algo omplejas en el modelo en estudio, al
generar la malla se produ e un importante in remento del an ho de banda sin
que disminuya el numero de elementos nulos en la matriz. Con los metodos
de resolu ion vistos hasta ahora, esto in rementara de forma importante el
tama~no de todas las matri es que intervienen en el pro eso de resolu ion,
por lo que el tiempo ne esario para el mismo se in rementara notablemente.
Vamos a trabajar on un ejemplo sen illo pero su iente para entender el
pro eso y el sistema seguido. Sea, por ejemplo, la matriz :
2

A=

6
6
6
6
6
6
4

a11

0
0
0

a51

a22 a23
a32 a33

0
0
0

a53
a63

0
0
0

a44
a54

a15

0
0

a35 a36
a45 0
a55 a56
a65 a66

3
7
7
7
7
7
7
5

(A.31)

que es laramente dispersa omo podemos ver, y si quisieramos apli ar lo


que hemos he ho anteriormente, sera inutil porque no nos ahorraramos ni
un termino de la matriz. Por otro lado, los eros existentes en la \matrizteori amente-redu ida" que tuvieramos, se onvertiran en \no- eros" a lo
largo del pro eso de redu ion. Para evitar estos efe tos, se sigue lo que ha
quedado ya omo un nombre \ lasi o" : el sistema SKYLINE (en ingles, ras a ielos), y ello por el aspe to que toma la matriz en que se ha se~nalado la
lnea que separa los elementos utiles de los nulos que se pueden evitar. Un
ejemplo de ello lo tenemos en la gura A.1.
Segun este metodo, de la matriz A de la e ua ion A.31 solo ne esitaramos
guardar 14 terminos, es de ir, menos de la mitad de lo que sera ne esario
on los metodos anteriores. Sin embargo existe un peque~no pre io a pagar
por esta mejora, y ello es la ne esidad de \llevar la uenta" de los terminos

74

Resolu ion del Sistema


X

Figura A.1: Bosquejo de la idea Skyline


que hemos guardado o tenemos que guardar de ada la o olumna. Existen
te ni as para que el pro eso se efe tue automati amente omo la que in luyo
en la version mejorada del programa P54CD y al que llamo P54SP, uyo
listado ira a ontinua ion del anterior. Los datos de le tura son identi os on
ambos programas, por lo que el alumno podra veri ar por s mismo la diferen ia en el tiempo de eje u ion de los dos programas. Para mallas peque~nas
y an hos de banda redu idos, no se observa gran diferen ia pero en otras
situa iones puede ser abismal, omo es el aso de la ultima malla que vimos
en la ultima le ion, en la que el an ho de banda era muy grande. En una
prueba llevada a abo, P54CD tardo mas de una hora en resolver un aso
de arga sen illo. El mismo aso y dando los mismos resultados, rodado on
P54SP tardo seis segundos !!
Por lo anterior, pense que era impres indible dedi ar los ultimos minutos
que tuvieramos a la expli a ion e implementa ion de los posibles solvers o
sistemas de resolu ion utilizados en el MEF.
A ontinua ion os hago una trans rip ion del listado del programa que utiliza este metodo, que, por otro lado, es todava mejorable omo veremos. El
programa que os in luyo en estas hojas es muy rudimentario, de forma que
se pueda seguir el pro eso on un vistazo rapido. Hay detalles laramente
mejorables omo el seguimiento de los terminos ledos, lo que ha emos on el
ve tor \KDIAG". En el aso que vamos a ver aqu, este ve tor es ledo omo
dato de entrada. Como vereis, en P54SP la le tura se efe tua automati amente. Por otro lado, sera imposible utilizar esta te ni a si no fuera as, ya
que una matriz de un tama~no de, por ejemplo, 6.000 x 6.000, que orrespondera a un estudio mediano, no se puede manejar a mano.

A.7 Pivotes

75

En todo aso, resulta importante veri ar omo se realiza el pro eso, que no
di ere grandemente de los anteriores si dejamos de lado ese ve tor KDIAG,
uyo valor, por ierto, para el aso de la e . A.31 sera el siguiente:
KDIAG = f1 2 4 5 10 14g, lo que a lararemos en breve. Veamos ahora el
listado, del que se han quitado todas las instru iones WRITE,
PROGRAM A25
PARAMETER (IA=50, IB=20)
REAL A(IA), B(IB)
INTEGER KDIAG(IB)
READ(5,*)N
READ(5,*)(KDIAG(I),I=1,N)
IR=KDIAG(N)
READ(5,*)(A(I),I=1,IR)
READ(5,*)(B(I),I=1,N)
CALL SKYFAC(A,N,KDIAG)
CALL SKYSUB(A,B,N,KDIAG)
STOP
END

La matriz A de la e . A.31 se guarda omo un ve tor. Ese ve tor en el aso


de la e ua ion referida, sera:
A = (a ; a ; a ; a ; a ; a ; 0; a ; a54; a ; a ; 0; a ; a )
En uanto a los valores de \KDIAG" se~nalados antes, se orresponden on la
numera ion de ini io de ada olumna a guardar, ontando solo de la diagonal
prin ipal ha ia arriba. As, en la primera olumna se guarda un solo termino
que, al ser el primero, le orresponde el valor 1. En la segunda se guarda
otro uni o termino, luego su orden sera el del termino anterior mas uno, o
sea 2. En la ter era olumna se guardan dos terminos y su numero de orden
sera 2+2 = 4. En la uarta, un solo termino que sera 4+1 = 5. En la quinta
se guardan in o terminos, y por tanto: 5 + 5 = 10. Finalmente en la sexta
se guardan uatro y en onse uen ia 10 + 4 = 14. Esto produ e el resultado
se~nalado antes.
11

22

32

33

44

51

53

55

63

65

66

A.7. Pivotes
En rela ion on el metodo de elimina ion de Gauss, de amos { programas
y A22 { que los pivotes podran ser ero, en uyo aso estaramos en
di ultades al haber divisiones en las que intervienen omo denominador.
Vamos a ver en lo que sigue, omo se evita este problema.
La te ni a utilizada { en ingles pivoting { onsiste en inter amiar las las

A21

76

Resolu ion del Sistema

ne esarias para que esto no se produz a. Como los pivotes estan en la diagonal
prin ipal, el programa debe bus ar el termino mayor en valor absoluto de las
las que queden por pro esar, y moverlo segun las normas de inter ambio de
las y olumnas, a la posi ion siguiente a al ular en la diagonal prin ipal.
As, y volviendo a las e ua iones A.2, se ve que el mayor oe iente al ini io
esta en la la segunda, por lo que moveramos di ha la a la posi ion primera,
quedandonos :
20x + 3x
20x = 2
5x + x + 10x = 1
(A.32)
5x + 3x + 5x = 6
Despues del primer paso de la elimina ion { o fa toriza ion { tendramos
20x + 3x
20x = 2
1;75x + 5x = 1;5
(A.33)
2;25x + 10x = 5;5
El mayor oe iente de las dos ultimas las esta ahora en la la ter era, por
lo que se inter ambia esta la on la segunda, quedando
20x
20x + 3x = 2
10x + 2;25x = 5;5
(A.34)
0;625x = 1;25
3

Se obtiene la solu ion omo antes pero en el orden (x ; x ; x ) = ( 2;0; 1;0; 1;4)
Veamos ahora el programa que lleva a abo una fa toriza ion de tipo LU
on pivote.
2

PROGRAM A26
PARAMETER (IN=20)
REAL A(IN,IN), B(IN), X(IN)
INTEGER ROW(IN)
READ(5,*)N
READ(5,*)((A(I,J),J=1,N),I=1,N)
READ(5,*)(B(I),I=1,N)
CALL LUPFAC(A,IN,N,ROW)
CALL LUPSOL(A,IN,B,X,N,ROW)
STOP
END

Vemos que se sustituye la subrutina \LUFAC" por \LUPFAC" { no onfundirse { que va llevando el nuevo ordenamiento de las las en un array de
enteros, ROW, para su uso en la fase de sustitu ion, del que se en arga en

A.7 Pivotes

77

este aso la subrutina \LUPSOL". La aritmeti a de la fa toriza ion sigue


siendo la misma.
Con lo anterior hemos terminado de ver la sistemati a de los diferentes metodos de resolu ion de e ua iones que se pueden implementar en el MEF. Hemos dejado, sin embargo, para un urso avanzado, los metodos iterativos,
que aunque de antiguo origen, se han desarrollado on fuerza en los ultimos
tiempos y que tienen su ampo de apli a ion, prin ipalmente, en los grandes
al ulos.

78

Resolu ion del Sistema

A.8. Revision de Subrutinas por orden de apari ion


SUBROUTINE PRINTA(A,IA,M,N,ICH)

C
C
C

ESTA SUBRUTINA IMPRIME UNA MATRIZ DE 2-D AL CANAL 'ICH'

1
2

REAL A(IA,*)
DO 1 I = 1,M
WRITE (ICH,2) (A(I,J),J=1,N)
FORMAT (1X,6E12.4)
RETURN
END

SUBROUTINE PRINTV(VEC,N,ICH)

C
C
C

ESCRIBE UN VECTOR COLUMNA AL CANAL DE SALIDA 'ICH'

REAL VEC(*)
WRITE (ICH,1) (VEC(I), I=1,N)
FORMAT (1X,6E12.4)
RETURN
END

SUBROUTINE LUFAC(A,UPTRI,LOWTRI,IA,N)

C
C
C

FACTORIZACION L*U DE UNA MATRIZ CUADRADA A

10

REAL(A(IA,*),UPTRI(IA,*),LOWTRI(IA,*)
CALL NULL(LOWTRI,IA,N,N)
DO 10 I=1,N
UPTRI(1,I)=A(1,I)
LOWTRI(I,I)=1.O
DO 1 K=1,N-1
IF(ABS(UPTRI(K,K)).GT.1.E-6)THEN

A.8 Revision de Subrutinas por orden de apari ion


DO 2 I=K+1,N

C
C
C

COMPONENTES DEL TRIANGULO INFERIOR

4
3
C
C
C

DO 3 J=1, I-1
SUM=O. 0
DO 4 L=1,J-1
SUM=SUM-LOWTRI(I,L)*UPTRI(L,J)
CONTINUE
LOWTRI(I,J)=(A(I,J)+SUM/UPTRI(J,J)
CONTINUE
COMPONENTES DEL TRIANGULO SUPERIOR

DO 5 J=I,N
SUM=0.0
DO 6 L=1,I-1
SUM=SUM-LOWTRI(I,L)*UPTRI(L,J)
6
CONTINUE
UPTRI(I,J)=A(I,J)+SUM
5
CONTINUE
2
CONTINUE
ELSE
WRITE(6,1000)
WRITE(6,*)K
STOP
ENDIF
1
CONTINUE
1000 FORMAT('SE HA ENCONTRADO UN PIVOTE NULO EN ESTA FILA')
RETURN
END

C
C
C

SUBROUTINE SUBFOR(A,IA,B,N)
SUSTITUCION ADELANTE DE UN TRIANGULO INFERIOR
REAL A(IA,*),B(*)
DO 1 I=1,N
SUM=B(I)

79

80

2
1

Resolu ion del Sistema


IF (I.GT.1)THEN
DO 2 J=1,I-1
SUM=SUM-A(I,J)*B(J)
CONTINUE
ENDIF
B(I)=SUM/A(I,I)
CONTINUE
RETURN
END

SUBROUTINE SUBBAC(A,IA,B,N)

C
C
C

SUSTITUCION ATRAS DE UN TRIANGULO SUPERIOR

2
1

C
C
C
C

REAL A(IA,*),B(*)
DO 1 I=N,1,-1
SUM=B(I)
IF(I.LT.N)THEN
DO 2 J=I+1,N
SUM=SUM-A(I,J)*B(J)
CONTINUE
ENDIF
B(I)=SUM/A(I,I)
CONTINUE
RETURN
END

SUBROUTINE LDLT(A,IA,D,N)
FACTORIZACION L*D*LT DE UNA MATRIZ CUADRADA.
LT SOBREESCRIBE A
REAL A(IA,*),D(*)
DO 1 K=1,N-1
D(1)=A(1,1)
IF(ABS(A(K,K)).GT.1.E-6)THEN
DO 2 I=K+1,N

A.8 Revision de Subrutinas por orden de apari ion


X=A(I,K)/A(K,K)
DO 3 J=K+1,N
A(I,J)=A(I,J)-A(K,J)*X
3
CONTINUE
D(I)=A(I,I)
2
CONTINUE
ELSE
WRITE(6,1000)
WRITE(6,*)K
ENDIF
1
CONTINUE
1000 FORMAT('PIVOTE NULO ENCONTRADO EN ESTA LINEA:')
RETURN
END

C
C
C
C

2
1

C
C
C

SUBROUTINE LDLFOR(A,IA,B,N)
SUSTITUCION ADELANTE DE UN TRIANGULO INFERIOR
GUARDADO COMO TRIANGULO SUPERIOR
REAL A(IA,*),B(*)
DO 1 I=1,N
SUM=B(I)
IF(I.GT.1)THEN
DO 2 J=1,I-1
SUM=SUM-A(J,I)*B(J)
CONTINUE
ENDIF
B(I)=SUM(A(I,I)
CONTINUE
RETURN
END

SUBROUTINE CHOFAC(LB,ILB,N,IW)
FACTORIZACION DE CHOLESKY DE UN TRIANGULO INFERIOR

81

82

3
1

Resolu ion del Sistema


REAL LB(ILB,*)
DO 1 I=1,N
X=0.0
DO 2 J=1,IW
X=X+LB(I,J)**2
CONTINUE
LB(I,IW+1)=SQRT(LB(I,IW+1)-X)
DO 3 K=1,IW
X=0.0
IF(I+K.LE.N)THEN
IF(K.NE.W)THEN
DO 4 L=IW-K,1,-1
X=X+LB(I+K,L)*LB(I,L+K)
CONTINUE
ENDIF
IA=I+K
IB=IW-K+1
LB(IA,IB)=(LB(IA,IB)-X)/LB(I,IW+1)
ENDIF
CONTINUE
CONTINUE
RETURN
END

SUBROUTINE CHOSUB(LB,ILB,B,N,IW)

C
C
C

SUSTITUCION DE CHOLESKY ADELANTE-ATRAS COMBINADA

2
1

REAL LB(ILB,*),B(*)
B(1)=B(1)/LB/1,IW+1)
DO 1 I=2,N
X=0.0
K=1
IF (I.LE.IW+1) K=IW-I+2
DO 2 J=K,IW
X=X+LB(I,J)*B(I+J-IW-1)
CONTINUE
B(I)=(B(I)-X)/LB(I,IW+1)
CONTINUE

A.8 Revision de Subrutinas por orden de apari ion

4
3

C
C
C
C

83

B(N)=B(N)/LB(N,IW+1)
DO 3 I=N-1,1,-1
X=0.0
L=I+IW
IF(I.GT.N-IW) L=N
M=I+1
DO 4 J=M,L
X=X+LB(J,IW+I-J+1)*B(J)
CONTINUE
B(I)=(B(I)-X)/LB(I,IW+1)
CONTINUE
RETURN
END

SUBROUTINE SKYFAC(A,N,KDIAG)
FACTORIZACION DE CHOLESKY DE UNA MATRIZ DE ANCHO DE BANDA
VARIABLE, GUARDADA COMO UN VECTOR Y SOBREESCRITA.
REAL A(*)
INTEGER KDIAG(*)
A(1)=SQRT(A(1))
DO 1 I=2,N
KI=KDIAG(I)-I
L=KDIAG(I-1)-KI+1
DO 2 J=L,I
X=A(KI+J)
KJ=KDIAG(J)-J
IF(J.NE.1)THEN
LL=KDIAG(J-1)-KJ+1
LL=MAXO(L,LL)
IF (LL.NE.J)THEN
M=J-1
DO 3 K=LL,M
X=X-A(KI+K)*A(KJ+K)
CONTINUE
ENDIF
ENDIF

84
2
1

Resolu ion del Sistema


A(KI+J)=X/A(KJ+J)
CONTINUE
A(KI+I)=SQRT(X)
CONTINUE
RETURN
END

SUBROUTINE SKYSUB(A,B,N,KDIAG)

C
C
C
C

SUSTITUCION ADELANTE-ATRAS DE CHOLESKY JUNTO CON ANCHO


DE BANDA VARIABLE GUARDADO COMO UN VECTOR

2
1

REAL A(*),B(*)
INTEGER KDIAG(*)
B(1)=B(1)/A(1)
DO 1 I=2,N
KI=KDIAG(I)-I
L=KDIAG(I-1)-KI+1
X=B(I)
IF (L.NE.I)THEN
M=I-1
DO 2 J=L,M
X=X-A(KI+J)*B(J)
CONTINUE
ENDIF
B(I)=X/A(KI+I)
CONTINUE
DO 3 IT=2,N
I=N+2-IT
KI=KDIAG(I)-I
X=B(I)/A(KI+I)
B(I)=X
L=KDIAG(I-1)-KI+1
IF (L.NE.I) THEN
M=I-1
DO 4 K=L,M
B(K)=B(K)-X*A(KI+K)
CONTINUE
ENDIF

A.8 Revision de Subrutinas por orden de apari ion


3

CONTINUE
B(1)=B(1)/A(1)
RETURN
END

SUBROUTINE LUPFAC(A,IA,N,ROW)

C
C
C

FACTORIZACION L*U DE UNA MATRIZ CUADRADA CON PIVOTES

5
4
2

REAL A(IA,*)
INTEGER ROW(*)
DO 1 I=1,N
ROW(I)=I
DO 2 I=1,N-1
IP=I
PVAL=A(ROW(IP),IP)
DO 3 J=I+1,N
IF (ABS(A(ROW(J),I)).GT.ABS(PVAL)) THEN
IP=J
PVAL=A(ROW(J),I)
ENDIF
CONTINUE
IF (ABS(PVAL).LT.1.E-1O)THEN
WRITE(6,1000)
STOP
ENDIF
IH=ROW(IP)
ROW(IP)=ROW(I)
ROW(I)=IH
DO 4 J=I+1,N
IE=ROW(J)
PIVOT=A(IE,I)/PVAL
IROW=ROW(I)
DO 5 K=I+1,N
A(IE,K)=A(IE,K)-A(IROW,K)*PIVOT
CONTINUE
CONTINUE
CONTINUE
IF (ABS(A(ROW(N),N).LT.1.E-1O)THEN

85

86

Resolu ion del Sistema

WRITE(6,1000)
STOP
ENDIF
1000 FORMAT ('SE HA DETECTADO UNA ECUACION SINGULAR')
RETURN
END

SUBROUTINE LUPSOL(A,IA,B,SOL,N,ROW)

C
C
C

SUSTITUCION DELANTE-ATRAS COMBINADA CON PIVOTES

2
1

4
3
5

REAL A(IA,*),B(*),SOL(*)
INTEGER ROW(*)
DO 1 I=1,N
IROW=ROW(I)
SUM=B(IROW)
IF(I.GT.1) THEN
DO 2 J=1,I-1
SUM=SUM-A(IROW,J)*B(ROW(J))
CONTINUE
B(IROW)=SUM
ENDIF
CONTINUE
DO 3 I=N,I,-l
IROW=ROW(I)
SUM=B(IROW)
IF(I.LT.N)TYHEN
DO 4 J=I+I,N
SUM=SUM-A(IROW,J)*B(ROW(J))
CONTINUE
ENDIF
B(IROW)=SUM/A(IROW,I)
CONTINUE
DO 5 I=I,N
SOL(I)=B(ROW(I))
RETURN
END

A.9 Revision de Subrutinas por orden de apari ion

87

A.9. Revision de Subrutinas por orden de apari ion


C
C
C
1
2

C
C
C
1

SUBROUTINE PRINTA(A,IA,M,N,ICH)
ESTA SUBRUTINA IMPRIME UNA MATRIZ DE 2-D AL CANAL 'ICH'
REAL A(IA,*)
DO 1 I = 1,M
WRITE (ICH,2) (A(I,J),J=1,N)
FORMAT (1X,6E12.4)
RETURN
END

SUBROUTINE PRINTV(VEC,N,ICH)
ESCRIBE UN VECTOR COLUMNA AL CANAL DE SALIDA 'ICH'
REAL VEC(*)
WRITE (ICH,1) (VEC(I), I=1,N)
FORMAT (1X,6E12.4)
RETURN
END

SUBROUTINE LUFAC(A,UPTRI,LOWTRI,IA,N)

C
C
C

FACTORIZACION L*U DE UNA MATRIZ CUADRADA A

10

REAL(A(IA,*),UPTRI(IA,*),LOWTRI(IA,*)
CALL NULL(LOWTRI,IA,N,N)
DO 10 I=1,N
UPTRI(1,I)=A(1,I)
LOWTRI(I,I)=1.O
DO 1 K=1,N-1
IF(ABS(UPTRI(K,K)).GT.1.E-6)THEN

88
DO 2 I=K+1,N

C
C
C

COMPONENTES DEL TRIANGULO INFERIOR

4
C
C
C

Resolu ion del Sistema

DO 3 J=1, I-1
SUM=O. 0
DO 4 L=1,J-1
SUM=SUM-LOWTRI(I,L)*UPTRI(L,J)
CONTINUE
LOWTRI(I,J)=(A(I,J)+SUM/UPTRI(J,J)
CONTINUE
COMPONENTES DEL TRIANGULO SUPERIOR

DO 5 J=I,N
SUM=0.0
DO 6 L=1,I-1
SUM=SUM-LOWTRI(I,L)*UPTRI(L,J)
6
CONTINUE
UPTRI(I,J)=A(I,J)+SUM
5
CONTINUE
2
CONTINUE
ELSE
WRITE(6,1000)
WRITE(6,*)K
STOP
ENDIF
1
CONTINUE
1000 FORMAT('SE HA ENCONTRADO UN PIVOTE NULO EN ESTA FILA')
RETURN
END

C
C
C

SUBROUTINE SUBFOR(A,IA,B,N)
SUSTITUCION ADELANTE DE UN TRIANGULO INFERIOR
REAL A(IA,*),B(*)
DO 1 I=1,N
SUM=B(I)

A.9 Revision de Subrutinas por orden de apari ion

2
1

SUBROUTINE SUBBAC(A,IA,B,N)

C
C
C

SUSTITUCION ATRAS DE UN TRIANGULO SUPERIOR

2
1

C
C
C
C

IF (I.GT.1)THEN
DO 2 J=1,I-1
SUM=SUM-A(I,J)*B(J)
CONTINUE
ENDIF
B(I)=SUM/A(I,I)
CONTINUE
RETURN
END

REAL A(IA,*),B(*)
DO 1 I=N,1,-1
SUM=B(I)
IF(I.LT.N)THEN
DO 2 J=I+1,N
SUM=SUM-A(I,J)*B(J)
CONTINUE
ENDIF
B(I)=SUM/A(I,I)
CONTINUE
RETURN
END

SUBROUTINE LDLT(A,IA,D,N)
FACTORIZACION L*D*LT DE UNA MATRIZ CUADRADA.
LT SOBREESCRIBE A
REAL A(IA,*),D(*)
DO 1 K=1,N-1
D(1)=A(1,1)
IF(ABS(A(K,K)).GT.1.E-6)THEN
DO 2 I=K+1,N

89

90

Resolu ion del Sistema

X=A(I,K)/A(K,K)
DO 3 J=K+1,N
A(I,J)=A(I,J)-A(K,J)*X
3
CONTINUE
D(I)=A(I,I)
2
CONTINUE
ELSE
WRITE(6,1000)
WRITE(6,*)K
ENDIF
1
CONTINUE
1000 FORMAT('PIVOTE NULO ENCONTRADO EN ESTA LINEA:')
RETURN
END

SUBROUTINE LDLFOR(A,IA,B,N)

C
C
C
C

SUSTITUCION ADELANTE DE UN TRIANGULO INFERIOR


GUARDADO COMO TRIANGULO SUPERIOR

2
1

C
C
C

REAL A(IA,*),B(*)
DO 1 I=N,1,-1
SUM=B(I)
IF(I.GT.1)THEN
DO 2 J=1,I-1
SUM=SUM-A(J,I)*B(J)
CONTINUE
ENDIF
B(I)=SUM(A(I,I)
CONTINUE
RETURN
END

SUBROUTINE CHOFAC(LB,ILB,N,IW)
FACTORIZACION DE CHOLESKY DE UN TRIANGULO INFERIOR

A.9 Revision de Subrutinas por orden de apari ion

3
1

REAL LB(ILB,*)
DO 1 I=1,N
X=0.0
DO 2 J=1,IW
X=X+LB(I,J)**2
CONTINUE
LB(I,IW+1)=SQRT(LB(I,IW+1)-X)
DO 3 K=1,IW
X=0.0
IF(I+K.LE.N)THEN
IF(K.NE.W)THEN
DO 4 L=IW-K,1,-1
X=X+LB(I+K,L)*LB(I,L+K)
CONTINUE
ENDIF
IA=I+K
IB=IW-K+1
LB(IA,IB)=(LB(IA,IB)-X)/LB(I,IW+1)
ENDIF
CONTINUE
CONTINUE
RETURN
END

SUBROUTINE CHOSUB(LB,ILB,B,N,IW)

C
C
C

SUSTITUCION DE CHOLESKY ADELANTE-ATRAS COMBINADA

2
1

REAL LB(ILB,*),B(*)
B(1)=B(1)/LB/1,IW+1)
DO 1 I=2,N
X=0.0
K=1
IF (I.LE.IW+1) K=IW-I+2
DO 2 J=K,IW
X=X+LB(I,J)*B(I+J-IW-1)
CONTINUE
B(I)=(B(I)-X)/LB(I,IW+1)
CONTINUE

91

92

4
3

C
C
C
C

Resolu ion del Sistema


B(N)=B(N)/LB(N,IW+1)
DO 3 I=N-1,1,-1
X=0.0
L=I+IW
IF(I.GT.N-IW) L=N
M=I+1
DO 4 J=M,L
X=X+LB(J,IW+I-J+1)*B(J)
CONTINUE
B(I)=(B(I)-X)/LB(I,IW+1)
CONTINUE
RETURN
END

SUBROUTINE SKYFAC(A,N,KDIAG)
FACTORIZACION DE CHOLESKY DE UNA MATRIZ DE ANCHO DE BANDA
VARIABLE, GUARDADA COMO UN VECTOR Y SOBREESCRITA.
REAL A(*)
INTEGER KDIAG(*)
A(1)=SQRT(A(1))
DO 1 I=2,N
KI=KDIAG(I)-I
L=KDIAG(I-1)-KI+1
DO 2 J=L,I
X=A(KI+J)
KJ=KDIAG(J)-J
IF(J.NE.1)THEN
LL=KDIAG(J-1)-KJ+1
LL=MAXO(L,LL)
IF (LL.NE.J)THEN
M=J-1
DO 3 K=LL,M
X=X-A(KI+K)*A(KJ+K)
CONTINUE
ENDIF
ENDIF

A.9 Revision de Subrutinas por orden de apari ion


2
1

A(KI+J)=X/A(KJ+J)
CONTINUE
A(KI+I)=SQRT(X)
CONTINUE
RETURN
END

SUBROUTINE SKYSUB(A,B,N,KDIAG)

C
C
C
C

SUSTITUCION ADELANTE-ATRAS DE CHOLESKY JUNTO CON ANCHO


DE BANDA VARIABLE GUARDADO COMO UN VECTOR

2
1

REAL A(*),B(*)
INTEGER KDIAG(*)
B(1)=B(1)/A(1)
DO 1 I=2,N
KI=KDIAG(I)-I
L=KDIAG(I-1)-KI+1
X=B(I)
IF (L.NE.I)THEN
M=I-1
DO 2 J=L,M
X=X-A(KI+J)*B(J)
CONTINUE
ENDIF
B(I)=X/A(KI+I)
CONTINUE
DO 3 IT=2,N
I=N+2-IT
KI=KDIAG(I)-I
X=B(I)/A(KI+I)
B(I)=X
L=KDIAG(I-1)-KI+1
IF (L.NE.I) THEN
M=I-1
DO 4 K=L,M
B(K)=B(K)-X*A(KI+K)
CONTINUE
ENDIF

93

94
3

Resolu ion del Sistema


CONTINUE
B(1)=B(1)/A(1)
RETURN
END

SUBROUTINE LUPFAC(A,IA,N,ROW)

C
C
C

FACTORIZACION L*U DE UNA MATRIZ CUADRADA CON PIVOTES

5
4
2

REAL A(IA,*)
INTEGER ROW(*)
DO 1 I=1,N
ROW(I)=I
DO 2 I=1,N-1
IP=I
PVAL=A(ROW(IP),IP)
DO 3 J=I+1,N
IF (ABS(A(ROW(J),I)).GT.ABS(PVAL)) THEN
IP=J
PVAL=A(ROW(J),I)
ENDIF
CONTINUE
IF (ABS(PVAL).LT.1.E-1O)THEN
WRITE(6,1000)
STOP
ENDIF
IH=ROW(IP)
ROW(IP)=ROW(I)
ROW(I)=IH
DO 4 J=I+1,N
IE=ROW(J)
PIVOT=A(IE,I)/PVAL
IROW=ROW(I)
DO 5 K=I+1,N
A(IE,K)=A(IE,K)-A(IROW,K)*PIVOT
CONTINUE
CONTINUE
CONTINUE
IF (ABS(A(ROW(N),N).LT.1.E-1O)THEN

A.9 Revision de Subrutinas por orden de apari ion


WRITE(6,1000)
STOP
ENDIF
1000 FORMAT ('SE HA DETECTADO UNA ECUACION SINGULAR')
RETURN
END

SUBROUTINE LUPSOL(A,IA,B,SOL,N,ROW)

C
C
C

SUSTITUCION DELANTE-ATRAS COMBINADA CON PIVOTES

2
1

4
3
5

REAL A(IA,*),B(*),SOL(*)
INTEGER ROW(*)
DO 1 I=1,N
IROW=ROW(I)
SUM=B(IROW)
IF(I.GT.1) THEN
DO 2 J=1,I-1
SUM=SUM-A(IROW,J)*B(ROW(J))
CONTINUE
B(IROW)=SUM
ENDIF
CONTINUE
DO 3 I=N,I,-l
IROW=ROW(I)
SUM=B(IROW)
IF(I.LT.N)TYHEN
DO 4 J=I+I,N
SUM=SUM-A(IROW,J)*B(ROW(J))
CONTINUE
ENDIF
B(IROW)=SUM/A(IROW,I)
CONTINUE
DO 5 I=I,N
SOL(I)=B(ROW(I))
RETURN
END

95

96

Resolu ion del Sistema

Apendi e B
Los programas P54CD, P54SP
y GMESH
B.1. Programa P54CD: Listado
C
C
C
C
C
C
C
C
C
C

C
C
C

PROGRAM P54CD
COMMON KB
PROGRAM 5.4 PLANE STRAIN OF AN ELASTIC
SOLID USING 8-NODE QUADRILATERAL ELEMENTS
IN COMBINATION WITH PROGRAM GMESH FOR THE
MESH - GENERATION. RESULTS WRITTEN IN FRIENDLY WAY
SIMPLE CHOLESKY SOLVER.
ALTER NEXT LINE TO CHANGE PROBLEM SIZE
PARAMETER(IKB1=4500,IKB2=4000,ILOADS=4500,INF=4500,INEL=2000)
REAL DEE(3,3),SAMP(4,2),COORD(8,2),JAC(2,2),JAC1(2,2),
+DER(2,8),DERIV(2,8),BEE(3,16),DBEE(3,16),GC(2),DISPS(INF,2),
+BTDB(16,16),KM(16,16),ELD(16),EPS(3),SIGMA(3),
+BT(16,3),FUN(8),KB(IKB1,IKB2),LOADS(ILOADS),CORGE(INF,2)
INTEGER NF(INF,2),G(16),KONE(INEL,9)
DATA IDEE,IBEE,IDBEE,IH/4*3/,IDOF,IBTDB,IBT,IKM/4*16/
DATA IJAC,IJAC1,NODOF,IT,IDER,IDERIV/6*2/,ICOORD,NOD/2*8/
DATA ISAMP/4/
INPUT AND INITIALISATION

98

Los programas P54CD, P54SP y GMESH

OPEN(3,FILE='mesh')
OPEN(4,FILE='resp54')
OPEN(5,FILE='p54 d.dat')
OPEN(8,FILE='p54 d.res')
READ(3,*)NEL,NN
WRITE(4,1111)NEL,NN
1111 FORMAT(2I5)
DO 1 I=1,NEL
READ(3,*)IE,(KONE(IE,J),J=1,NOD+1)
1 CONTINUE
DO 2 I=1,NN
READ(3,*)IN,(CORGE(IN,J),J=1,2)
2 CONTINUE
CALL PRESEN(NEL,NN,KONE,INEL,CORGE,INF)
READ(5,*)NR,NGP,E,V
CALL READNF(NF,INF,NN,NODOF,NR)
CALL GLIFT(NEL,KONE,INEL,G,NF,INF,IW,N,NN)
IWP1 = IW + 1
CALL NULL(KB,IKB1,N,IWP1)
CALL FMDEPS(DEE,IDEE,E,V)
CALL GAUSS(SAMP,ISAMP,NGP)
C
C
ELEMENT STIFFNESS INTEGRATION AND ASSEMBLY
C
DO 10 IE=1,NEL
CALL GEOMG(IE,KONE,INEL,G,NF,INF,N)
CALL GEOMC(IE,KONE,INEL,CORGE,INF,COORD,ICOORD)
CALL NULL(KM,IKM,IDOF,IDOF)
DO 20 I=1,NGP
DO 20 J=1,NGP
CALL FMQUAD(DER,IDER,FUN,SAMP,ISAMP,I,J)
CALL MATMULT(DER,IDER,COORD,ICOORD,JAC,IJAC,IT,NOD,IT)
CALL TWOBY2(JAC,IJAC,JAC1,IJAC1,DET)
CALL MATMULT(JAC1,IJAC1,DER,IDER,DERIV,IDERIV,IT,IT,NOD)
CALL NULL(BEE,IBEE,IH,IDOF)
CALL FORMB(BEE,IBEE,DERIV,IDERIV,NOD)
CALL MATMULT(DEE,IDEE,BEE,IBEE,DBEE,IDBEE,IH,IH,IDOF)
CALL MATRAN(BT,IBT,BEE,IBEE,IH,IDOF)
CALL MATMULT(BT,IBT,DBEE,IDBEE,BTDB,IBTDB,IDOF,IH,IDOF)
QUOT=DET*SAMP(I,2)*SAMP(J,2)
CALL MSMULT(BTDB,IBTDB,QUOT,IDOF,IDOF)
20 CALL MATADD(KM,IKM,BTDB,IBTDB,IDOF,IDOF)
10 CALL FORMKB(KB,IKB1,KM,IKM,G,IW,IDOF)

B.1 Programa P54CD: Listado


C
C
C

C
C
C

EQUATION SOLUTION
CALL
CALL
CALL
CALL
CALL
CALL

CHOLIN(KB,IKB1,N,IW)
NULVEC(LOADS,N)
RLOADS(LOADS,NF,INF)
CHOBAC(KB,IKB1,LOADS,N,IW)
NULL(DISPS,INF,NN,2)
WRIDIS(DISPS,LOADS,NF,INF,NN)

RECOVER STRAINS AND STRESSES AT ELEMENT CENTRES

WRITE(8,1000)
1000 FORMAT(///10X,'TENSIONES'/10X,'---------'//7X,'G.P.',2X,
&'COORD-X',3X,'COORD-Y',4X,'SIGMA- X',6X,'SIGMA- Y',6X,
&' TAU - XY',6X,'MAX T.P.',6X,'MIN T.P.',5X,'ANGULO')
CALL GAUSS(SAMP,ISAMP,NGP)
DO 30 IE=1,NEL
CALL GEOMG(IE,KONE,INEL,G,NF,INF,N)
CALL GEOMC(IE,KONE,INEL,CORGE,INF,COORD,ICOORD)
DO 40 M=1,IDOF
IF(G(M).EQ.0)ELD(M)=0.
40 IF(G(M).NE.0)ELD(M)=LOADS(G(M))
IG=0
DO 30 I=1,NGP
DO 30 J=1,NGP
IG=IG+1
CALL FMQUAD(DER,IDER,FUN,SAMP,ISAMP,I,J)
CALL GCOORD(FUN,COORD,ICOORD,NOD,IT,GC)
CALL MATMULT(DER,IDER,COORD,ICOORD,JAC,IJAC,IT,NOD,IT)
CALL TWOBY2(JAC,IJAC,JAC1,IJAC1,DET)
CALL MATMULT(JAC1,IJAC1,DER,IDER,DERIV,IDERIV,IT,IT,NOD)
CALL NULL(BEE,IBEE,IH,IDOF)
CALL FORMB(BEE,IBEE,DERIV,IDERIV,NOD)
CALL MVMULT(BEE,IBEE,ELD,IH,IDOF,EPS)
CALL MVMULT(DEE,IDEE,EPS,IH,IH,SIGMA)
CALL WRITEN(IE,IG,SIGMA,GC)
30 CONTINUE
STOP
END

99

100

Los programas P54CD, P54SP y GMESH

B.1.1.

C
C
C

C
C
C

Subrutinas de P54CD

SUBROUTINE GLIFT(LNEL,KONE,INEL,G,NF,INF,LW,LN,LNN)
THIS SUBROUTINE CALCULATES THE VALUES OF IW,N,NN FOR EACH LIFT
INTEGER G(16),NF(INF,*),KONE(INEL,*)
LW = 0
LN = 0
LNN = 0
DO 10 I=1,LNEL
MIN = 1000
MAX = 0
CALL GEOMG(I,KONE,INEL,G,NF,INF,LN)
DO 20 K=1,16
IF(G(K).NE.0.AND.G(K).LT.MIN)MIN=G(K)
IF(G(K).GT.MAX)MAX=G(K)
20 IF(LW.LT.MAX-MIN)LW=MAX-MIN
DO 30 J=2,9
30 IF(KONE(I,J).GT.LNN)LNN=KONE(I,J)
10 CONTINUE
RETURN
END

SUBROUTINE GEOMG(IE,KONE,INEL,G,NF,INF,LN)
THIS SUBROUTINE CALCULATES THE STEERING VECTOR
INTEGER G(16),NF(INF,*),KONE(INEL,*)
K = 0
DO 1 I=1,8
DO 1 J=1,2
K = K + 1
G(K) = NF(KONE(IE, I + 1), J)
IF(G(K).GT.LN)LN=G(K)
1 CONTINUE
RETURN
END

B.1 Programa P54CD: Listado

SUBROUTINE GEOMC(IE,KONE,INEL,CORGE,INF,COORD,ICOORD)

C
C
C

THIS SUBROUTINE FORMS THE COORDINATES FOR EACH ELEMENT


REAL COORD(ICOORD,*),CORGE(INF,*)
INTEGER KONE(INEL,*)
DO 1 I=1,8
DO 1 J=1,2
1 COORD(I,J)=CORGE(KONE(IE,I+1),J)
RETURN
END

C
C
C

SUBROUTINE PRESEN(NEL,NN,KONE,INEL,CORGE,INF)
THIS SUBROUTINE PRINTS THE MESH AND NODE'S COORDINATES

REAL CORGE(INF,*)
INTEGER KONE(INEL,*)
WRITE(8,1000)
1000 FORMAT('CALCULO EN ELEMENTOS FINITOS'/
&
'============================'//
&
'ELASTICIDAD PLANA - DEFORMACION PLANA'/
&
'-------------------------------------'///
&
'DEFINICION DE LA MALLA.-'//
&
' - CONECTIVIDAD'//
&
'
ELEM.
MAT.
NODOS'/)
DO 10 IE=1,NEL
10 WRITE(8,1010)IE,(KONE(IE,J),J=1,9)
1010 FORMAT(3I8,7I5)
WRITE(8,1020)
1020 FORMAT(//4X,'- COORDENADAS'//7X,'NODO',7X,'COOR-X',8X,
&'COOR-Y',11X,'NODO',7X,'COOR-X',8X,'COOR-Y',11X,'NODO',
&7X,'COOR-X',8X,'COOR-Y'/)
DO 20 INOD=1,NN,3

101

102

Los programas P54CD, P54SP y GMESH

20 WRITE(8,1030)(INOD+I,(CORGE(INOD+I,J),J=1,2),I=0,2)
1030 FORMAT(I10,2F14.4,4X,I10,2F14.4,4X,I10,2F14.4)
WRITE(8,1040)
1040 FORMAT(////'RESULTADOS'
&
/'=========='/)
RETURN
END

C
C
C

SUBROUTINE WRIDIS(DISPS,LOADS,NF,INF,NN)
THIS SUBROUTINE PRINTS THE DISPLACEMENTS OBTAINED

REAL LOADS(*),DISPS(INF,*)
INTEGER NF(INF,*)
DO 10 IN=1,NN
DO 10 J=1,2
10 IF(NF(IN,J).NE.0)DISPS(IN,J)=LOADS(NF(IN,J))
WRITE(8,1000)
1000 FORMAT(/10X,'DESPLAZAMIENTOS'/10X,'---------------'//
&7X,'NODO',7X,'DESP-X',8X,'DESP-Y',11X,'NODO',7X,'DESP-X',
&8X,'DESP-Y',11X,'NODO',7X,'DESP-X',8X,'DESP-Y'/)
DO 15 IP=1,NN
15
WRITE(4,1100)IP,(DISPS(IP,J),J=1,2)
DO 20 ID=1,NN,3
20 WRITE(8,1010)(ID+I,(DISPS(ID+I,J),J=1,2),I=0,2)
1010 FORMAT(I10,2E15.4,2X,I10,2E15.4,2X,I10,2E15.4)
1100 FORMAT(I10,2E14.6)
RETURN
END

C
C
C

SUBROUTINE WRITEN(IE,IG,SIGMA,GC)
THIS SUBROUTINE PRINTS THE STRESSES OBTAINED
REAL SIGMA(*),GC(*)

B.1 Programa P54CD: Listado

103

IF(IG.EQ.1)THEN
WRITE(8,1010)IE
ENDIF
TA1=(SIGMA(1)+SIGMA(2))/2.
TA2=SQRT((SIGMA(1)-SIGMA(2))**2/4.+SIGMA(3)**2)
PS1=TA1+TA2
PS2=TA1-TA2
ALF=ATAN(2.*SIGMA(3)/(SIGMA(1)-SIGMA(2)))/2.
ALFA=ALF*57.29577952
IF(ABS(SIGMA(2)).GT.ABS(SIGMA(1)))ALFA=ALFA-90.
WRITE(4,1030)IG,GC(1),GC(2),PS1,PS2,ALFA
WRITE(8,1000)IG,GC(1),GC(2),SIGMA(1),SIGMA(2),SIGMA(3),PS1,
&PS2,ALFA
1000 FORMAT(I9,2F10.3,5E14.5,F11.4)
1030 FORMAT(I5,2F10.3,6F14.8,F10.4,I5)
1010 FORMAT(/7X,'ELEMENTO NUM.....',I3)
RETURN
END

C
C
C
C

SUBROUTINE RLOADS(LOADS,NF,INF)
THIS SUBROUTINE READS THE "POINT LOADS" IN THE NODES TO
OBTAIN THE VALUE OF LOADS IN THE FREEDOMS
REAL LOADS(*)
INTEGER NF(INF,*)
READ(5,*)NLH,NLV
IF(NLH.EQ.0) GOTO 10
READ(5,*)(K,LOADS(NF(K,1)),I=1,NLH)
10 CONTINUE
IF(NLV.EQ.0) GOTO 20
READ(5,*)(K,LOADS(NF(K,2)),I=1,NLV)
20 CONTINUE
RETURN
END

104

Los programas P54CD, P54SP y GMESH

SUBROUTINE MATMULT(A,IA,B,IB,C,IC,L,M,N)
C
C
THIS SUBROUTINE FORMS THE PRODUCT OF TWO MATRICES
C
REAL A(IA,*),B(IB,*),C(IC,*)
DO 1 I=1,L
DO 1 J=1,N
X=0.0
DO 2 K=1,M
2 X=X+A(I,K)*B(K,J)
C(I,J)=X
1 CONTINUE
RETURN
END

C
C
C
C

SUBROUTINE FMQUAD(DER,IDER,FUN,SAMP,ISAMP,I,J)
THIS SUBROUTINE FORMS THE SHAPE FUNCTIONS AND
THEIR DERIVATIVES FOR 8-NODED QUADRILATERAL ELEMENTS
REAL DER(IDER,*),FUN(*),SAMP(ISAMP,*)
ETA=SAMP(I,1)
XI=SAMP(J,1)
ETAM=.25*(1.-ETA)
ETAP=.25*(1.+ETA)
XIM=.25*(1.-XI)
XIP=.25*(1.+XI)
FUN(1)=4.*ETAM*XIM*(-XI-ETA-1.)
FUN(2)=32.*ETAM*XIM*ETAP
FUN(3)=4.*ETAP*XIM*(-XI+ETA-1.)
FUN(4)=32.*XIM*XIP*ETAP
FUN(5)=4.*ETAP*XIP*(XI+ETA-1.)
FUN(6)=32.*ETAP*XIP*ETAM
FUN(7)=4.*XIP*ETAM*(XI-ETA-1.)
FUN(8)=32.*XIM*XIP*ETAM
DER(1,1)=ETAM*(2.*XI+ETA)
DER(1,2)=-8.*ETAM*ETAP
DER(1,3)=ETAP*(2.*XI-ETA)
DER(1,4)=-4.*ETAP*XI
DER(1,5)=ETAP*(2.*XI+ETA)

B.1 Programa P54CD: Listado


DER(1,6)=8.*ETAP*ETAM
DER(1,7)=ETAM*(2.*XI-ETA)
DER(1,8)=-4.*ETAM*XI
DER(2,1)=XIM*(XI+2.*ETA)
DER(2,2)=-4.*XIM*ETA
DER(2,3)=XIM*(2.*ETA-XI)
DER(2,4)=8.*XIM*XIP
DER(2,5)=XIP*(XI+2.*ETA)
DER(2,6)=-4.*XIP*ETA
DER(2,7)=XIP*(2.*ETA-XI)
DER(2,8)=-8.*XIM*XIP
RETURN
END

C
C
C

C
C
C

SUBROUTINE MATRAN(A,IA,B,IB,M,N)
THIS SUBROUTINE FORMS THE TRANSPOSE OF A MATRIX
REAL A(IA,*),B(IB,*)
DO 1 I=1,M
DO 1 J=1,N
1 A(J,I)=B(I,J)
RETURN
END

SUBROUTINE MATADD(A,IA,B,IB,M,N)
THIS SUBROUTINE ADDS TWO EQUAL SIZED ARRAYS
REAL A(IA,*),B(IB,*)
DO 1 I=1,M
DO 1 J=1,N
1 A(I,J)=A(I,J)+B(I,J)
RETURN
END

105

106

C
C
C

C
C
C

C
C
C

Los programas P54CD, P54SP y GMESH

SUBROUTINE MSMULT(A,IA,C,M,N)
THIS SUBROUTINE MULTIPLIES A MATRIX BY A SCALAR
REAL A(IA,*)
DO 1 I=1,M
DO 1 J=1,N
1 A(I,J)=A(I,J)*C
RETURN
END

SUBROUTINE NULVEC(VEC,N)
THIS SUBROUTINE NULLS A COLUMN VECTOR
REAL VEC(*)
DO 1 I=1,N
1 VEC(I)=0.
RETURN
END

SUBROUTINE NULL(A,IA,M,N)
THIS SUBROUTINE NULLS A 2-D ARRAY
REAL A(IA,*)
DO 1 I=1,M
DO 1 J=1,N
1 A(I,J)=0.0
RETURN
END

B.1 Programa P54CD: Listado

C
C
C
C

C
C
C
C

SUBROUTINE FMDSIG(DEE,IDEE,E,V)
THIS SUBROUTINE FORMS THE ELASTIC PLANE STRESS
STRESS/STRAIN MATRIX
REAL DEE(IDEE,*)
C=E/(1.-V*V)
DEE(1,1)=C
DEE(2,2)=C
DEE(3,3)=.5*C*(1.-V)
DEE(1,2)=V*C
DEE(2,1)=V*C
DEE(1,3)=0.
DEE(3,1)=0.
DEE(3,2)=0.
DEE(2,3)=0.
RETURN
END

SUBROUTINE GAUSS(SAMP,ISAMP,NGP)
THIS SUBROUTINE PROVIDES THE WEIGHTS AND SAMPLING POINTS
FOR GAUSS-LEGENDRE QUADRATURE
REAL SAMP(ISAMP,*)
GO TO(1,2,3,4,5,6,7),NGP
1 SAMP(1,1)=0.
SAMP(1,2)=2.
GOTO 100
2 SAMP(1,1)=1./SQRT(3.)
SAMP(2,1)=-SAMP(1,1)
SAMP(1,2)=1.
SAMP(2,2)=1.
GO TO 100
3 SAMP(1,1)=.2*SQRT(15.)
SAMP(2,1)=.0

107

108

Los programas P54CD, P54SP y GMESH

SAMP(3,1)=-SAMP(1,1)
SAMP(1,2)=5./9.
SAMP(2,2)=8./9.
SAMP(3,2)=SAMP(1,2)
GO TO 100
SAMP(1,1)=.861136311594053
SAMP(2,1)=.339981043584856
SAMP(3,1)=-SAMP(2,1)
SAMP(4,1)=-SAMP(1,1)
SAMP(1,2)=.347854845137454
SAMP(2,2)=.652145154862546
SAMP(3,2)=SAMP(2,2)
SAMP(4,2)=SAMP(1,2)
GO TO 100
SAMP(1,1)=.906179845938664
SAMP(2,1)=.538469310105683
SAMP(3,1)=.0
SAMP(4,1)=-SAMP(2,1)
SAMP(5,1)=-SAMP(1,1)
SAMP(1,2)=.236926885056189
SAMP(2,2)=.478628670499366
SAMP(3,2)=.568888888888889
SAMP(4,2)=SAMP(2,2)
SAMP(5,2)=SAMP(1,2)
GO TO 100
SAMP(1,1)=.932469514203152
SAMP(2,1)=.661209386466265
SAMP(3,1)=.238619186083197
SAMP(4,1)=-SAMP(3,1)
SAMP(5,1)=-SAMP(2,1)
SAMP(6,1)=-SAMP(1,1)
SAMP(1,2)=.171324492379170
SAMP(2,2)=.360761573048139
SAMP(3,2)=.467913934572691
SAMP(4,2)=SAMP(3,2)
SAMP(5,2)=SAMP(2,2)
SAMP(6,2)=SAMP(1,2)
GO TO 100
SAMP(1,1)=.949107912342759
SAMP(2,1)=.741531185599394
SAMP(3,1)=.405845151377397
SAMP(4,1)=.0
SAMP(5,1)=-SAMP(3,1)

B.1 Programa P54CD: Listado


SAMP(6,1)=-SAMP(2,1)
SAMP(7,1)=-SAMP(1,1)
SAMP(1,2)=.129484966168870
SAMP(2,2)=.279705391489277
SAMP(3,2)=.381830050505119
SAMP(4,2)=.417959183673469
SAMP(5,2)=SAMP(3,2)
SAMP(6,2)=SAMP(2,2)
SAMP(7,2)=SAMP(1,2)
100 CONTINUE
RETURN
END

C
C
C

C
C
C

SUBROUTINE READNF(NF,INF,NN,NODOF,NR)
THIS SUBROUTINE READS THE NODAL FREEDOM DATA
INTEGER NF(INF,*)
DO 1 I=1,NN
DO 1 J=1,NODOF
1 NF(I,J)=1
IF(NR.GT.0)READ(5,*)(K,(NF(K,J),J=1,NODOF),I=1,NR)
N=0
DO 2 I=1,NN
DO 2 J=1,NODOF
IF(NF(I,J).NE.0)THEN
N=N+1
NF(I,J)=N
ENDIF
2 CONTINUE
RETURN
END

SUBROUTINE FMDEPS(DEE,IDEE,E,V)
THIS SUBROUTINE FORMS THE ELASTIC PLANE STRAIN
STRESS/STRAIN MATRIX

109

110
C

C
C
C

C
C
C
C

Los programas P54CD, P54SP y GMESH


REAL DEE(IDEE,*)
V1=1.-V
C=E/((1.+V)*(1.-2.*V))
DEE(1,1)=V1*C
DEE(2,2)=V1*C
DEE(3,3)=.5*C*(1.-2.*V)
DEE(1,2)=V*C
DEE(2,1)=V*C
DEE(1,3)=0.
DEE(3,1)=0.
DEE(2,3)=0.
DEE(3,2)=0.
RETURN
END

SUBROUTINE TWOBY2(JAC,IJAC,JAC1,IJAC1,DET)
THIS SUBROUTINE FORMS THE INVERSE OF A 2 BY 2 MATRIX
REAL JAC(IJAC,*),JAC1(IJAC1,*)
DET=JAC(1,1)*JAC(2,2)-JAC(1,2)*JAC(2,1)
JAC1(1,1)=JAC(2,2)
JAC1(1,2)=-JAC(1,2)
JAC1(2,1)=-JAC(2,1)
JAC1(2,2)=JAC(1,1)
DO 1 K=1,2
DO 1 L=1,2
1 JAC1(K,L)=JAC1(K,L)/DET
RETURN
END

SUBROUTINE FORMB(BEE,IBEE,DERIV,IDERIV,NOD)
THIS SUBROUTINE FORMS THE STRAIN/DISPLACEMENT MATRIX
FOR PLANE STRAIN

B.1 Programa P54CD: Listado


REAL BEE(IBEE,*),DERIV(IDERIV,*)
DO 1 M=1,NOD
K=2*M
L=K-1
X=DERIV(1,M)
BEE(1,L)=X
BEE(3,K)=X
Y=DERIV(2,M)
BEE(2,K)=Y
BEE(3,L)=Y
1 CONTINUE
RETURN
END

SUBROUTINE FORMKB(KB,IKB,KM,IKM,G,IW,IDOF)

C
C
C
C

THIS SUBROUTINE FORMS THE GLOBAL STIFFNESS MATRIX


STORING THE LOWER TRIANGLE AS AN ARRAY BK(N,IW+1)

2
4
5
3
1

C
C
C

REAL KB(IKB,*),KM(IKM,*)
INTEGER G(*)
DO 1 I=1,IDOF
IF(G(I))1,1,2
DO 3 J=1,IDOF
IF(G(J))3,3,4
ICD=G(J)-G(I)+IW+1
IF(ICD-IW-1)5,5,3
KB(G(I),ICD)=KB(G(I),ICD)+KM(I,J)
CONTINUE
CONTINUE
RETURN
END

SUBROUTINE CHOLIN(KB,IKB,N,IW)
THIS SUBROUTINE PERFORMS CHOLESKI REDUCTION OF
THE STIFFNESS MATRIX STORED AS AN ARRAY BK(N,IW+1)

111

112

Los programas P54CD, P54SP y GMESH

6
7
5
4
3
1

C
C
C

REAL KB(IKB,*)
DO 1 I=1,N
X=0.
DO 2 J=1,IW
X=X+KB(I,J)**2
KB(I,IW+1)=SQRT(KB(I,IW+1)-X)
DO 3 K=1,IW
X=0.
IF(I+K.GT.N)GOTO 3
IF(K.EQ.IW)GOTO 4
L=IW-K
X=X+KB(I+K,L)*KB(I,L+K)
L=L-1
IF(L.NE.0)GOTO 5
IA=I+K
IB=IW-K+1
KB(IA,IB)=(KB(IA,IB)-X)/KB(I,IW+1)
CONTINUE
CONTINUE
RETURN
END

SUBROUTINE CHOBAC(KB,IKB,LOADS,N,IW)
THIS SUBROUTINE PERFORMS THE CHOLESKI BACK-SUBSTITUTION
REAL KB(IKB,*),LOADS(*)
LOADS(1)=LOADS(1)/KB(1,IW+1)
DO 1 I=2,N
X=0.0
K=1
IF(I.LE.IW+1)K=IW-I+2
DO 2 J=K,IW
2 X=X+KB(I,J)*LOADS(I+J-IW-1)
1 LOADS(I)=(LOADS(I)-X)/KB(I,IW+1)
LOADS(N)=LOADS(N)/KB(N,IW+1)
I=N-1
3 X=0.0
L=I+IW

B.1 Programa P54CD: Listado


IF(I.GT.N-IW)L=N
M=I+1
DO 4 J=M,L
4 X=X+KB(J,IW+I-J+1)*LOADS(J)
LOADS(I)=(LOADS(I)-X)/KB(I,IW+1)
I=I-1
IF(I)5,5,3
5 CONTINUE
RETURN
END

C
C
C
C

C
C
C

SUBROUTINE GCOORD(FUN,COORD,ICOORD,NOD,IT,GC)
THIS SUBROUTINE OBTAINS THE CARTESIAN COORDINATES OF THE
GAUSS-POINTS FROM THE SHAPE FUNCTIONS
REAL GC(*),FUN(*),COORD(ICOORD,*)
DO 1 I=1,IT
GC(I)=0.
DO 1 J=1,NOD
1 GC(I)=GC(I)+COORD(J,I)*FUN(J)
RETURN
END

SUBROUTINE MVMULT(M,IM,V,K,L,Y)
THIS SUBROUTINE MULTIPLIES A MATRIX BY A VECTOR
REAL M(IM,*),V(*),Y(*)
DO 1 I=1,K
X=0.
DO 2 J=1,L
2 X=X+M(I,J)*V(J)
Y(I)=X
1 CONTINUE
RETURN
END

113

114

Los programas P54CD, P54SP y GMESH

B.2 El programa P54SP

115

B.2. El programa P54SP

C
C
C
C
C
C
C
C
C
C
C

C
C
C

PROGRAM P54SP
COMMON KB,LOADS,CORGE,KDIAG,DISPS,KONE
PROGRAM 5.4 PLANE STRAIN OF AN ELASTIC
SOLID USING 8-NODE QUADRILATERAL ELEMENTS
IN COMBINATION WITH PROGRAM GMESH FOR THE
MESH - GENERATION. RESULTS WRITTEN IN FRIENDLY WAY
SKYLINE SOLVER
ALTER NEXT LINE TO CHANGE PROBLEM SIZE
PARAMETER(IKB1=100000,ILOADS=100000,INF=100000,INEL=8000)
REAL DEE(3,3),SAMP(4,2),COORD(8,2),JAC(2,2),JAC1(2,2),
+DER(2,8),DERIV(2,8),BEE(3,16),DBEE(3,16),GC(2),DISPS(INF,2),
+BTDB(16,16),KM(16,16),ELD(16),EPS(3),SIGMA(3),KB(10000000),
+BT(16,3),FUN(8),LOADS(ILOADS),CORGE(INF,2)
INTEGER NF(INF,2),G(16),KONE(INEL,9),KDIAG(IKB1)
DATA IDEE,IBEE,IDBEE,IH/4*3/,IDOF,IBTDB,IBT,IKM/4*16/
DATA IJAC,IJAC1,NODOF,IT,IDER,IDERIV/6*2/,ICOORD,NOD/2*8/
DATA ISAMP/4/
INPUT AND INITIALISATION

OPEN(3,FILE='mesh')
OPEN(4,FILE='resp54')
OPEN(5,FILE='p54 d.dat')
OPEN(8,FILE='p54spar.res')
READ(3,*)NEL,NN
WRITE(4,1111)NEL,NN
1111 FORMAT(2I5)
DO 1 I=1,NEL
READ(3,*)IE,(KONE(IE,J),J=1,NOD+1)
1 CONTINUE
DO 2 I=1,NN
READ(3,*)IN,(CORGE(IN,J),J=1,2)
2 CONTINUE
CALL PRESEN(NEL,NN,KONE,INEL,CORGE,INF)
READ(5,*)NR,NGP,E,V

116

5
6
7

C
C
C

Los programas P54CD, P54SP y GMESH


CALL READNF(NF,INF,NN,NODOF,NR)
CALL GLIFT(NEL,KONE,INEL,G,NF,INF,IW,N,NN)
DO 5 I=1,N
KDIAG(I)=0
DO 6 IE=1,NEL
CALL GEOMG(IE,KONE,INEL,G,NF,INF,N)
CALL FKDIAG(KDIAG,G,IDOF)
KDIAG(1)=1
DO 7 I=2,N
KDIAG(I)=KDIAG(I)+KDIAG(I-1)
IR=KDIAG(N)
CALL NULVEC(KB,IR)
CALL FMDEPS(DEE,IDEE,E,V)
CALL GAUSS(SAMP,ISAMP,NGP)
ELEMENT STIFFNESS INTEGRATION AND ASSEMBLY

DO 10 IE=1,NEL
CALL GEOMG(IE,KONE,INEL,G,NF,INF,N)
CALL GEOMC(IE,KONE,INEL,CORGE,INF,COORD,ICOORD)
CALL NULL(KM,IKM,IDOF,IDOF)
DO 20 I=1,NGP
DO 20 J=1,NGP
CALL FMQUAD(DER,IDER,FUN,SAMP,ISAMP,I,J)
CALL MATMULT(DER,IDER,COORD,ICOORD,JAC,IJAC,IT,NOD,IT)
CALL TWOBY2(JAC,IJAC,JAC1,IJAC1,DET)
CALL MATMULT(JAC1,IJAC1,DER,IDER,DERIV,IDERIV,IT,IT,NOD)
CALL NULL(BEE,IBEE,IH,IDOF)
CALL FORMB(BEE,IBEE,DERIV,IDERIV,NOD)
CALL MATMULT(DEE,IDEE,BEE,IBEE,DBEE,IDBEE,IH,IH,IDOF)
CALL MATRAN(BT,IBT,BEE,IBEE,IH,IDOF)
CALL MATMULT(BT,IBT,DBEE,IDBEE,BTDB,IBTDB,IDOF,IH,IDOF)
QUOT=DET*SAMP(I,2)*SAMP(J,2)
CALL MSMULT(BTDB,IBTDB,QUOT,IDOF,IDOF)
20 CALL MATADD(KM,IKM,BTDB,IBTDB,IDOF,IDOF)
CALL FSPARV(KB,KM,IKM,G,KDIAG,IDOF)
10 CONTINUE
C
C
EQUATION SOLUTION
C
CALL SPARIN(KB,N,KDIAG)
CALL NULVEC(LOADS,N)
CALL RLOADS(LOADS,NF,INF)

B.2 El programa P54SP

C
C
C

CALL SPABAC(KB,LOADS,N,KDIAG)
CALL NULL(DISPS,INF,NN,2)
CALL WRIDIS(DISPS,LOADS,NF,INF,NN)
RECOVER STRAINS AND STRESSES AT GAUSS POINTS

WRITE(8,1000)
1000 FORMAT(///10X,'TENSIONES'/10X,'---------'//7X,'G.P.',2X,
&'COORD-X',3X,'COORD-Y',4X,'SIGMA- X',6X,'SIGMA- Y',6X,
&' TAU - XY',6X,'MAX T.P.',6X,'MIN T.P.',5X,'ANGULO')
CALL GAUSS(SAMP,ISAMP,NGP)
DO 30 IE=1,NEL
CALL GEOMG(IE,KONE,INEL,G,NF,INF,N)
CALL GEOMC(IE,KONE,INEL,CORGE,INF,COORD,ICOORD)
DO 40 M=1,IDOF
IF(G(M).EQ.0)ELD(M)=0.
40 IF(G(M).NE.0)ELD(M)=LOADS(G(M))
IG=0
DO 30 I=1,NGP
DO 30 J=1,NGP
IG=IG+1
CALL FMQUAD(DER,IDER,FUN,SAMP,ISAMP,I,J)
CALL GCOORD(FUN,COORD,ICOORD,NOD,IT,GC)
CALL MATMULT(DER,IDER,COORD,ICOORD,JAC,IJAC,IT,NOD,IT)
CALL TWOBY2(JAC,IJAC,JAC1,IJAC1,DET)
CALL MATMULT(JAC1,IJAC1,DER,IDER,DERIV,IDERIV,IT,IT,NOD)
CALL NULL(BEE,IBEE,IH,IDOF)
CALL FORMB(BEE,IBEE,DERIV,IDERIV,NOD)
CALL MVMULT(BEE,IBEE,ELD,IH,IDOF,EPS)
CALL MVMULT(DEE,IDEE,EPS,IH,IH,SIGMA)
CALL WRITEN(IE,IG,SIGMA,GC)
30 CONTINUE
END

117

118

Los programas P54CD, P54SP y GMESH

B.2.1.

C
C
C
C

C
C
C
C
C

Las 4 subrutinas \espe iales" de P54SP

SUBROUTINE FKDIAG(KDIAG,G,IDOF)
THIS SUBROUTINE FINDS THE MAXIMUM BANDWIDTH
FOR EACH FREEDOM
INTEGER KDIAG(*),G(*)
DO 1 I=1,IDOF
IWP1=1
IF(G(I).EQ.0)GOTO 1
DO 2 J=1,IDOF
IF(G(J).EQ.0)GOTO 2
IM=G(I)-G(J)+1
IF(IM.GT.IWP1)IWP1=IM
2 CONTINUE
K=G(I)
IF(IWP1.GT.KDIAG(K))KDIAG(K)=IWP1
1 CONTINUE
RETURN
END
SUBROUTINE FSPARV(BK,KM,IKM,G,KDIAG,IDOF)
THIS SUBROUTINE ASSEMBLES THE ELEMENT STIFFNESS MATRIX INTO
THE GLOBAL MATRIX STORED AS A VECTOR ACCOUNTING FOR A
VARIABLE BANDWIDTH
INTEGER KDIAG(*),G(*)
REAL BK(*),KM(IKM,*)
DO 1 I=1,IDOF
K=G(I)
IF(K.EQ.0)GOTO 1
DO 2 J=1,IDOF
IF(G(J).EQ.0)GOTO 2
IW=K-G(J)
IF(IW.LT.0)GOTO 2
IVAL=KDIAG(K)-IW
BK(IVAL)=BK(IVAL)+KM(I,J)
2 CONTINUE
1 CONTINUE
RETURN
END

B.2 El programa P54SP

C
C
C
C

C
C
C
C

SUBROUTINE SPARIN(A,N,KDIAG)
THIS SUBROUTINE PERFORMS CHOLESKI REDUCTION OF THE
VARIABLE-BANDWIDTH STIFFNESS MATRIX STORED AS A VECTOR
REAL A(*)
INTEGER KDIAG(*)
A(1)=SQRT(A(1))
DO 1 I=2,N
KI=KDIAG(I)-I
L=KDIAG(I-1)-KI+1
DO 2 J=L,I
X=A(KI+J)
KJ=KDIAG(J)-J
IF(J.EQ.1)GOTO 2
LBAR=KDIAG(J-1)-KJ+1
LBAR=MAX0(L,LBAR)
IF(LBAR.EQ.J)GOTO 2
M=J-1
DO 3 K=LBAR,M
3 X=X-A(KI+K)*A(KJ+K)
2 A(KI+J)=X/A(KJ+J)
1 A(KI+I)=SQRT(X)
RETURN
END

SUBROUTINE SPABAC(A,B,N,KDIAG)
THIS SUBROUTINE PERFORMS THE CHOLESKI BACK-SUBSTITUTION
ON THE VARIABLE BANDWIDTH STIFFNESS MATRIX
REAL A(*),B(*)
INTEGER KDIAG(*)
B(1)=B(1)/A(1)
DO 1 I=2,N
KI=KDIAG(I)-I

119

120

Los programas P54CD, P54SP y GMESH

2
1

4
3

L=KDIAG(I-1)-KI+1
X=B(I)
IF(L.EQ.I)GOTO 1
M=I-1
DO 2 J=L,M
X=X-A(KI+J)*B(J)
B(I)=X/A(KI+I)
DO 3 IT=2,N
I=N+2-IT
KI=KDIAG(I)-I
X=B(I)/A(KI+I)
B(I)=X
L=KDIAG(I-1)-KI+1
IF(L.EQ.I)GOTO 3
M=I-1
DO 4 K=L,M
B(K)=B(K)-X*A(KI+K)
CONTINUE
B(1)=B(1)/A(1)
RETURN
END

B.3 Listado de GMESH

121

B.3. Listado de GMESH

C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C
C

PROGRAM GMESH
COMMON CORGL,CONE,CORGE
PROGRAMA PARA LA GENERACION DE UNA MALLA DE ELEMENTOS DE
8 NODOS, CUADRILATEROS O CURVILINEOS.
MODIFICAR LA LINEA SIGUIENTE SEGUN EL TAMA~NO DEL PROGRAMA.
REVISAR TAMBIEN LA SUBRUTINA SBLOC
SIGNIFICADO DE PARAMETROS:
ICORGB....NUM. DE NODOS DE ESQUINA DE LOS BLOQUES
ICORGL....NUM. DE NODOS DE LA SUBDIVISION DEL ELEMENTO PADRE
ICORGE....NUM. DE NODOS FINALES
ICONB.....NUM. DE BLOQUES
ICONE.....NUM. DE ELEMENTO FINALES
IMAT......NUM. DE MATERIALES
PARAMETER(ICORGB=20,ICORGL=10000,ICORGE=10000,ICONB=20,ICONE=5000,
&IMAT=5)
REAL CORGB(ICORGB,2),CORGL(ICORGL,2),CORGE(ICORGE,2),FUN(8)
INTEGER CONB(ICONB,8),CONE(ICONE,8),MAT(IMAT),NMAT(ICONE)
ENTRADA E INICIALIZACION
OPEN(3,FILE='gmesh.dat')
OPEN(8,FILE='mesh')
READ(3,*)NCNB,NELB,KQ
DO 1 IB=1,NELB
1 READ(3,*)MAT(IB),(CONB(IB,II),II=1,8)
DO 20 I=1,NCNB
20 READ(3,*)IP,(CORGB(IP,J),J=1,2)
DO 30 IB=1,NELB
DO 30 I=2,8,2
IN=CONB(IB,I)
DO 30 J=1,2
IF(I.LT.8)CORGB(IN,J)=.5*(CORGB(CONB(IB,I-1),J)+
&CORGB(CONB(IB,I+1),J))
IF(I.EQ.8)CORGB(IN,J)=.5*(CORGB(CONB(IB,I-1),J)+
&CORGB(CONB(IB,I-7),J))

122

C
C
C

C
C
C

C
C
C

Los programas P54CD, P54SP y GMESH

30 CONTINUE
IF(KQ.EQ.1)THEN
READ(3,*)NCURB
DO 2 I=1,NCURB
2 READ(3,*)IP,(CORGB(IP,J),J=1,2)
ENDIF
SUBDIVISION DEL ELEMENTO PADRE
MNOD=0
MCO1=1
DO 60 IB=1,NELB
INOD=MNOD+1
CALL SBLOC(CORGL,ICORGL,CONE,ICONE,MNOD,MCON)
DO 35 I=MCO1,MCON
35 NMAT(I)=MAT(IB)
MCO1=MCON+1
APLICACION EN EL ELEMENTO REAL
DO 40 I=INOD,MNOD
CX=CORGL(I,1)
CY=CORGL(I,2)
CALL SHAPE8(FUN,CX,CY)
DO 50 J=1,8
DO 50 J1=1,2
50 CORGE(I,J1)=CORGE(I,J1)+FUN(J)*CORGB(CONB(IB,J),J1)
40 CONTINUE
60 CONTINUE
ELIMINACION DE LOS NODOS REPETIDOS
DO 70 I=1,MNOD
KK=0
DO 70 NI=I+1,MNOD
TOT=ABS(CORGE(I,1)-CORGE(NI,1))+ABS(CORGE(I,2)-CORGE(NI,2))
IF(TOT.LT..0001)THEN
KK=KK+1
IF(KK.GT.1.AND.NI.GE.MNOD)GOTO 70
DO 80 II=1,MCON
DO 80 J=1,8
IF(CONE(II,J).EQ.NI)CONE(II,J)=I
IF(CONE(II,J).GT.NI)CONE(II,J)=CONE(II,J)-1

B.3 Listado de GMESH


80 CONTINUE
DO 90 II=NI,MNOD
DO 90 J=1,2
90 CORGE(II,J)=CORGE(II+1,J)
MNOD=MNOD-1
ENDIF
70 CONTINUE

C
C
C

SALIDA AL FICHERO DE ESCRITURA

100
110
1000
2000

C
C
C
C

WRITE(8,1000)MCON,MNOD
DO 100 I=1,MCON
WRITE(8,1000)I,NMAT(I),(CONE(I,J),J=1,8)
DO 110 I=1,MNOD
WRITE(8,2000)I,(CORGE(I,J),J=1,2)
FORMAT(10I5)
FORMAT(I5,2F10.4)
END
SUBROUTINE SHAPE8(FUN,CX,CY)
ESTA SUBRUTINA CALCULA EL VALOR DE LAS FUNCIONES DE FORMA
EN UN PUNTO PARA UN ELEMENTO DE 8 NODOS
REAL FUN(*)
ETA=CY
XI=CX
ETAM=.25*(1.-ETA)
ETAP=.25*(1.+ETA)
XIM=.25*(1.-XI)
XIP=.25*(1.+XI)
FUN(1)=4.*ETAM*XIM*(-XI-ETA-1.)
FUN(2)=32.*XIM*ETAM*ETAP
FUN(3)=4.*ETAP*XIM*(-XI+ETA-1.)
FUN(4)=32.*XIM*XIP*ETAP
FUN(5)=4.*XIP*ETAP*(XI+ETA-1.)
FUN(6)=32.*XIP*ETAP*ETAM
FUN(7)=4.*XIP*ETAM*(XI-ETA-1.)
FUN(8)=32.*XIM*XIP*ETAM
RETURN
END

123

124

Los programas P54CD, P54SP y GMESH

SUBROUTINE SBLOC(CORGL,ICORGL,CONE,ICONE,JK,MN)

C
C
C
C
C
C

ESTA SUBRUTINA LLEVA A CABO LA SUBDIVISION DEL ELEMENTO


PADRE
MODIFICAR LA SIGUIENTE LINEA SEGUN EL TAMA~NO DEL PROGRAMA
PARAMETER(IWW=5000,ILL=5000)

40

50
60

70

REAL WX(IWW),WY(IWW),LX(ILL),LY(ILL),CORGL(ICORGL,*)
INTEGER NP(ILL,ILL),CONE(ICONE,*)
WTX=0.
WTY=0.
READ(3,*)NDX,NDY
READ(3,*)(WX(I),I=1,NDX)
READ(3,*)(WY(I),I=1,NDY)
DO 40 IX=1,NDX
WTX=WTX+WX(IX)
LX(1)=-1.
NXT=2*NDX+1
DO 50 I=2,NXT,2
LX(I)=LX(I-1)+WX(I/2)/WTX
LX(I+1)=LX(I)+WX(I/2)/WTX
DO 60 IY=1,NDY
WTY=WTY+WY(IY)
NYT=2*NDY+1
LY(1)=-1.
DO 70 I=2,NYT,2
LY(I)=LY(I-1)+WY(I/2)/WTY
LY(I+1)=LY(I)+WY(I/2)/WTY
KK=-1
KY=-1
DO 80 IY=1,NYT
KX=-1
KY=-KY
KK=KK+1
DO 80 IX=1,NXT
KX=-KX
IF(KY+KX.EQ.-2)GOTO 80
JK=JK+1
CORGL(JK,1)=LX(IX)

B.3 Listado de GMESH


CORGL(JK,2)=LY(IY)
NP(IY,IX)=JK
80 CONTINUE
DO 90 J=1,NDY
DO 90 I=1,NDX
I2=I*2
J2=J*2
IL=(J-1)*NDX+I+MN
CONE(IL,1)=NP(J2-1,I2-1)
CONE(IL,2)=NP(J2,I2-1)
CONE(IL,3)=NP(J2+1,I2-1)
CONE(IL,4)=NP(J2+1,I2)
CONE(IL,5)=NP(J2+1,I2+1)
CONE(IL,6)=NP(J2,I2+1)
CONE(IL,7)=NP(J2-1,I2+1)
CONE(IL,8)=NP(J2-1,I2)
90 CONTINUE
MN=MN+NDX*NDY
RETURN
END

125

126

Los programas P54CD, P54SP y GMESH

Apendi e C
Cargas nodales onsistentes
En las guras que siguen podemos ver la distribu ion de las argas ontinuas sobre elementos planos, triangulos de tres, seis y diez nodos y uadrilateros de uatro, o ho y nueve nodos.
Di has distribu iniones no son intuitivas y por ello, resulta onveniente tenerlas a mano para asos de arga repartida. Es evidente que una arga
trapezoidal onstara de una re tangular mas una triangular.
Un error tpi o que se omete al prin ipio es no tener en uenta la suma
de argas sobre un mismo nodo uando la arga repartida se prolonga mas
Sobre arga = 1=; Ud:
1=3

2=3

1=3

2=3

1=3

2=3

1=3

Figura C.1: Carga repartida sobre varios elementos


alla de un solo elemento. Este aso lo podemos ver en la gura C.1. En el
resto de las guras se re ejan las distintas posibilidades de arga de tipo
unitario y su reparto en elementos tambien unitarios
1

1 Estos

datos y guras han sido tomados del libro \PROGRAMMING THE FINITE ELEMENT METHOD", Wiley, 3a edi ion, 1998, de los profesores Ian M. Smith y
D. V. Griths

128

Cargas nodales onsistentes

An ho del lado argado

= 1 unidad

T IP O DE CARGA

U nif orme

T riangular

T riangulo de tres nodos

1=2

1=2

T riangulo de

1=6

2=3

1=6

6 nodos

1=6

T riangulo de

1=8

3=8

3=8

1=8

1=3

1=3

1=6

10 nodos
1=60

3=40

3=10

Figura C.2: Distribu ion de argas repartidas (a)

13=120

129

NOT A

Mismas argas que en el uadro anterior


Cuadrilatero de 4 nodos

1=2

1=2

Cuadrilateros de 8 y

1=6

2=3

1=6

1=6

1=3

9 nodos
0

1=3

Figura C.3: Distribu ion de argas repartidas (b)

1=6

130

Cargas nodales onsistentes

Apendi e D
Desplazamientos impuestos
En el programa P54CD, no se ha tratado el tema de los desplazamientos
impuestos. Vamos a ver ahora el problema en s y su solu ion as omo las
lneas de programa que habra que a~nadir a P54SP para tener en uenta este
pro eso.
Supongamos que tenemos el siguiente sistema de e ua iones orrespondiente
a la e ua ion A x = b. Si A representa la rigidez del sistema, x los desplazamientos y b las fuerzas apli adas, tendramos por ejemplo :
9
2
3 8
16 4 8 < x =
4 4
5 4 5 : x ;=b
(D.1)
8 4 22
x
Si nos di en que el valor del desplazamiento x vale, por ej., 6, y los valores
de b y b son 4 y 5, forzamos a que el valor de x sea 6 sumando al valor
de a un numero muy grande, digamos 10 . Ha iendo esto y multipli ando,
nos quedara en la segunda la lo siguiente:
4 x + (5 + 10 ) x 4 x = b
(D.2)
Para obtener el resultado deseado, es de ir x = 6, es laro que b debera valer : b = x  6 o lo que es igual b = (5 + 10 )  6.
Vamos a ver a ontinua ion, omo se implementara todo este pro eso en
nuestro programa P54SP. Elegimos este por suponer que, habitualmente
sera el mas utilizado, dada su e a ia.
Es ribiremos el listado de esta implementa ion a~nadiendo al omienzo y al
nal unas lneas del listado standard para lo alizar el lugar de la modi a ion. El resto del programa queda exa tamente igual.
1
2
3

10

22

10

10

132

Desplazamientos impuestos
.........................desde el ini io

20
10
C
C
C

REVISAR SI HAY DESPLAZAMIENTOS Y SU EVENTUAL VALOR

25
C
C
C

CALL MATADD(KM,IKM,BTDB,IBTDB,IDOF,IDOF)
CALL FSPARV(KB,KM,IKM,G,KDIAG,IDOF)
CONTINUE
CALL NULVEC(LOADS,N)

READ(5,*)NFIX
IF(NFIX.GT.0) THEN
DO 25 I=1,NFIX
READ(5,*)NOD,DPX,DPY
IF(DPX.NE.0) THEN
ITP=NF(NOD,1)
KB(KDIAG(ITP))=KB(KDIAG(ITP))+1.E10
LOADS(ITP)=KB(KDIAG(ITP))*DPX
ENDIF
IF(DPY.NE.0) THEN
ITP=NF(NOD,2)
KB(KDIAG(ITP))=KB(KDIAG(ITP))+1.E10
LOADS(ITP)=KB(KDIAG(ITP))*DPX
ENDIF
CONTINUE
ENDIF
EQUATION SOLUTION
CALL SPARIN(KB,N,KDIAG)
CALL RLOADS(LOADS,NF,INF)
CALL SPABAC(KB,LOADS,N,KDIAG)
.........................et . hasta el final.

Apendi e E
Datos a ono er para la
eje u ion
E.1. Nombres de variables
A lo largo de este seminario hemos estado utilizando una serie de variables en los programas de la serie P54, mu has de las uales se utilizaban en
las llamadas a las subrutinas, que no hemos ido a larando ada vez que apare an para no di ultar la vision de onjunto. Ahora es ribiremos la rela ion
ompleta on las pertinentes notas a laratorias.
IBEE
IBT
IBTDB
ICOORD
IDEE
IDER
IDERIV
IJAC
IJAC1
IKM
IKV
ILOADS
INF
ISAMP

|
|
|
|
|
|
|
|
|
|
|
|
|
|

tama~no fijo de las matri es BEE, BT, BTDB, COORD, DBEE


DEE, DER, DERIV, JAC, JAC1, KM, KV, LOADS, NF, SAMP
ini ializadas utilizando las instru iones DATA y
PARAMETER.

134
N
IW
NN
NR
NL
NFIX
DPX,DPY
E
V
IDOF
IH
NOD
NODOF
IT
IR
DET
QUOT
DEE
SAMP
COORD
JAC
JAC1
DER
DERIV
BEE
DBEE
BTDB
KM
ELD
EPS
SIGMA
BT
FUN
WT
G
KV,KB..
LOADS
NF

Datos a ono er para la eje u ion


n
umero total de grados de libertad
semian ho de banda del problema
n
umero total de nodos
n
umero de nodos on restri iones
n
umero de grados de libertad on argas
n
umero de nodos on desplazamiento impuesto
valor de los desplazamientos impuestos
m
odulo de Young
oefi iente de Poisson
n
umero de grados de libertad por elemento
tama~no de la matriz tensi
on - deforma ion
n
umero de nodos por elemento
n
umero de grados de libertad por nodo
dimensiones del espa io del problema (2)
tama~no del ve tor KV: N*(IW+1)
determinante de la matriz del ja obiano
valor de la uadratura de Gauss
matriz tensi
on - deforma ion
oordenadas de la uadratura
oordenadas nodales de los elementos
matriz Ja obiana
inversa de la anterior
derivadas de las fun iones de forma en lo ales
dem en globales

matriz deforma ion - desplazamiento
matriz produ to de DEE*BEE
matriz produ to de la traspuesta de BEE por DBEE
matriz de rigidez elemental
ve tor de desplazamientos elemental
ve tor de deforma iones elemental
ve tor de tensiones elemental
matriz traspuesta de BEE
fun iones de forma en oordenadas lo ales
oefi ientes de pondera ion de la uadratura
ve tor dire ional
matriz de rigidez global
ve tor de argas (desplazamientos) (ILOADS >= N)
matriz de grados de libertad nodales

E.2 Genera ion del hero de datos p54 d.dat

135

E.2. Genera ion del hero de datos p54 d.dat


Este hero se utiliza en la le tura de datos de los programas P54CD,
P54SP y P54DAN. Para utilizar la version de P54SP on desplazamientos
impuestos, hay que efe tuar una peque~na modi a ion. (Re ordamos que el
programa P54DAN es el mismo que el P54SP ambiando la denomina ion
de un hero de salida para que pueda ser empleado omo postpro eso el
programa DANPLOT, que ono eis de las lases pra ti as).
Como resulta extremadamente sen illo preparar un peque~no programa de
ayuda para generar el hero en uestion, dejamos esta tarea para el alumno,
ya que habra quien desee ha erlo para diferentes sistemas operativos y on
lenguajes diferentes del FORTRAN.
El hero \p54 d.dat", se puede editar dire tamente, lo que probablemente
es mas sen illo y rapido, y debe ontener los datos que se men ionan en el
orden que se mar a :
1. Una primera lnea on los siguientes datos (numeros) : Numero de nodos
on restri iones { Numero de puntos de Gauss para la uadratura (2)
{ Valor del Modulo de Elasti idad { Valor del oe iente de Poisson.
Es ne esario dejar al menos un espa io entre ada dato
2. Lista de todos los nodos on restri iones. Debe es ribirse el numero
del nodo seguido de la restri ion X (1 si no existe, 0 si existe) y de
la restri ion Y on el mismo riterio. A ontinua ion se sigue on
el siguiente nodo hasta ompletarse el numero total que dimos omo
primer dato de este hero. Como siempre, todos los numeros deben
dejar espa io entre s.
3. En otra lnea se es ribe el numero de nodos argados segun la dire ion
X y segun la dire ion Y. (En total, dos numeros)
4. En la siguiente lnea, si existen nodos argados segun la dire ion X, se
es ribe el numero del nodo y el valor de la arga y esto se repite hasta
el total de nodos argados. Si no existen nodos argados segun la dire ion X, se es riben dire tamente los orrespondientes a la dire ion
Y de la misma manera. Si hay nodos argados segun la dire ion X,
los orrespondientes a la dire ion Y se es riben a ontinua ion en otra
lnea.
NOTA : es importante no olvidarse del signo de las argas. En la dire ion Y es fre uente equivo arse.

136

Datos a ono er para la eje u ion

Y esto es todo. El hero es tan sen illo que no reemos que merez a la pena
ha er un programa espe  o para es ribirlo. Lo que s puede resultar onveniente es es ribir estas instru iones en un hero README por si se olvida
el orden o algun dato.
La entrada de datos al programa GMESH, quedo su ientemente a larada
en paginas anteriores. En el aso de que algun alumno implemente las lneas
de programa in ludas en el Apendi e D para asos de desplazamientos impuestos, la edi ion de p54 d.dat se modi a ligeramente. En ese aso, y antes
de la introdu ion del numero de argas, hay que introdu ir el numero de nodos on desplazamientos impuestos en una lnea y en la siguiente la rela ion
que in luya el numero del nodo, el desplazamiento segun el eje X y segun el
eje Y, aunque uno de ellos sea ero, y eso para todos los nodos. (Todos los
valores separados por un espa io al menos...no se debe olvidar!!). Despues se
ontinua on las argas omo se ha di ho, si existen.