Professional Documents
Culture Documents
DEPARTAMENTO DE MECANICA
DE MEDIOS CONTINUOS Y TEORIA DE
ESTRUCTURAS
AUTOR:
Santiago Muelas Medrano
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
ii
Indi
e general
1. Introdu
i
on
1.1.
1.2.
1.3.
1.4.
1.5.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
2
2
3
4. Programa
i
on I
4.1.
4.2.
4.3.
4.4.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
11
12
15
15
16
16
17
5. Programa
i
on II
21
29
INDICE GENERAL
iv
.
.
.
.
.
.
31
34
36
39
43
45
49
A. Resolu
i
on del Sistema
59
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
60
60
64
65
66
67
70
71
72
73
75
78
87
97
. 97
. 100
. 115
. 118
. 121
127
D. Desplazamientos impuestos
131
INDICE GENERAL
E. Datos a
ono
er para la eje
u
i
on
133
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.
. 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.
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.
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 denir
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)
2
"x =
6
"y
=
4
:
;
xy
x
y
7
y 5
x
u
v
(2.3)
=
=
=
"
(2.4)
D"
Ae
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
(2.6)
( 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 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 denir en fun
ion de esos valores
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
>
>
=
>
>
;
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
10
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
= 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
11
3.1.2.
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 deni
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
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
" x
x
y
y
#( )
x
y
=J
( )
x
y
(3.2)
2 es
=J
( )
1
(3.3)
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)
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
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)
14
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)
Z Z
BEE T
(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
1
1
1
1
f (; ) dd
n X
n
X
wi wj f (i; j )
(4.3)
i=1 j =1
17
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.
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 :
F U N (1;4)
3.
= 664
1
4
1
4
1
4
1
4
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)
#
x
y
= COORD T F U N T
(4.7)
19
5.
= J AC 1 DER
(4.9)
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)
= BEE ELD
(4.10)
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 )
= 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.
1 Supongo
que el alumno ono e este on epto. En ualquier aso, se expli ara en lase.
23
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
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
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
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 reeren 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
.
27
PREPROCESO
Lectura de Datos
Geometria y
Metodo de Calc.
Caracteristicas
del Material
Condiciones
de Contorno
Calculo KM
del Elemento
Ensamblaje en
Matriz Global
Resolucion del
Sistema de Ecuaciones
Otros calculos
Suplementarios
Salida de
Resultados
POSTPROCESO
Visualizacion - Impresion
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)
1 No
30
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,
31
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
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
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
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 reere 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
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
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
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
37
2
3
1
4
3
1
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)
20 En
38
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
KP
K1;4
K4;4
por razones
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)
39
o 22
o 23
24
6.3.2.
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
40
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
41
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
42
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
43
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
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
45
= D = DAe
(6.4)
31 Quiero
46
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
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
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.
F ORMB , es un
viejo
ono
ido nuestro, del que obtenemos la matriz BEE , en este
aso
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
32 de
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
7
4
5
1
8
1
E lemento P adre
E lemento H ij o
E lementos remallados
51
7.1.1.
Entrada de Datos
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
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
52
taran para denir 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.
nida la malla originaria o padre, y pasamos a la deni
ion de la subdivision deseada. Para denir 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.
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
54
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
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 denido 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
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
58
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
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
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:
60
=b
=b
=b
(A.1)
2
3
(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 .
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)
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 reera 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)
(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 reeren 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
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
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.
21
22
(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
65
(A.15)
(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
Fila1
11
12
13
66
Fila2
l u
21
11
= a21
21
a21
u11
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.
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.
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.18)
aji
16 4 8
4 5 45
8 4 22
(A.19)
68
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
69
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
70
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 denidas positivas, aunque nos limitaremos a unas
uantas deni
iones poque es un tema muy sen
illo para este
nivel de
urso.
12
2a
12
x1 x2 "
x1 x2 = a12 x1 x2 + a12 x2 x1
= a12 x1 x2 + a21x2 x1
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 \denida positiva". Si la forma
uadrati
a es positiva pero no denida positiva, se di
e que es \semi-denida
positiva".
Con la nota
ion usual que estamos empleando para ve
tores y matri
es, la
1
71
a11 a12
a21 a22
a11
an1
a1n
.............
.............
ann
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 denida 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
A.5.2.
E ua iones en banda
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)
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
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
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)
74
A.7 Pivotes
75
En todo
aso, resulta importante veri
ar
omo se realiza el pro
eso, que no
diere 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
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
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
78
C
C
C
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
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
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
C
C
C
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
SUBROUTINE SUBBAC(A,IA,B,N)
C
C
C
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
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
SUBROUTINE CHOSUB(LB,ILB,B,N,IW)
C
C
C
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
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
SUBROUTINE SKYSUB(A,B,N,KDIAG)
C
C
C
C
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
CONTINUE
B(1)=B(1)/A(1)
RETURN
END
SUBROUTINE LUPFAC(A,IA,N,ROW)
C
C
C
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
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
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
87
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
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
4
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)
2
1
SUBROUTINE SUBBAC(A,IA,B,N)
C
C
C
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
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
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
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
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
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(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
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
SUBROUTINE LUPFAC(A,IA,N,ROW)
C
C
C
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
SUBROUTINE LUPSOL(A,IA,B,SOL,N,ROW)
C
C
C
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
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
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)
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)
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
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
SUBROUTINE GEOMC(IE,KONE,INEL,CORGE,INF,COORD,ICOORD)
C
C
C
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
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(*)
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
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)
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
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
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
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)
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
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
SUBROUTINE FORMKB(KB,IKB,KM,IKM,G,IW,IDOF)
C
C
C
C
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
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
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
115
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
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)
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
B.2.1.
C
C
C
C
C
C
C
C
C
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
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
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
121
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
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
C
C
C
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
SUBROUTINE SBLOC(CORGL,ICORGL,CONE,ICONE,JK,MN)
C
C
C
C
C
C
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)
125
126
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
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
= 1 unidad
T IP O DE CARGA
U nif orme
T riangular
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
13=120
129
NOT A
1=2
1=2
Cuadrilateros de 8 y
1=6
2=3
1=6
1=6
1=3
9 nodos
0
1=3
1=6
130
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
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
135
136
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.