Escolar Documentos
Profissional Documentos
Cultura Documentos
10º Relatório de Experimentos em Elementos Finitos
10º Relatório de Experimentos em Elementos Finitos
10º Relatório de Experimentos em Elementos Finitos
VITRIA
2011
HRCULES DE MELO BARCELOS
VITRIA
2014
RESUMO
1. INTRODUO ..................................................................................................... 1
3. Referncia ......................................................................................................... 43
4. Anexo ................................................................................................................ 44
1
1. INTRODUO
i.
!
" !
ii.
onde # $ % & ' a soluo, % um subconjunto aberto de '( com fronteira poligonal
) )* + ), tal que )* - ), .. As fronteiras )* / ), so associadas as condies de
contorno de Dirichlet e Neumann (ii), respectivamente. O tensor de difusividade K
uma matriz diagonal 2 x 2, dada por:
122 3
0 5
3 144
iii.
A. Pr-processamento:
de equaes neq).
B. Processamento
condies de contorno;
C. Ps processamento
Visualizao da soluo.
3
2. OS EXPERIMENTOS NUMRICOS
A. Modelo matemtico:
iv. 1LM NM 3 OP 32 Q 32
figura abaixo:
S R
v. R TUVW 2
(a) (b)
Figura 2 - (a) discretizao em malha triangular, (b) Distribuio grfica 2D das solues.
Para a figura (1.a), temos definidos 1681 pontos com 160 pontos de contorno, 1521
Domnio.
O erro mdio percentual foi obtido pela mdia dos erros pontuais para cada
refinamento de malha definido a seguir, sendo considerados na mdia, apenas os
valores calculados, descartando os valores prescritos, pois estes no contribuem
para a gerao dos erros numricos.
6
Abaixo temos uma tabela com o comportamento do erro mdio percentual para
refinamentos de malha com 40, 80, 120 3 160 pontos de contorno
Malha
pontos erro
pontos de contorno interno elementos
40 81 200 0.01298%
80 361 800 0.01117%
120 841 1800 0.01205%
160 1521 3200 0.01301%
Tabela 1 - Erro mdio e descrio de malha
0.0130%
ERRO MDIO
0.0125%
0.0120%
0.0115%
0.0110%
40 80 120 160
pontos de contorno
Visando apresentar a distribuio dos erros sobre o domnio, foi gerada a figura 4 a
seguir, representando a diferena dos valores analticos e numricos para cada ponto
do domnio discretizado em 160 pontos de contorno, a saber:
7
4
Figura 4 - Imagem 2d e 3d representando os erros sobre o domnio analisado aumentados em em 10 vezes
.
OBS: A figura (4), apresenta um aumento significativo do erro mdio, sendo necessrio
a verificao de novos testes com o mtodo, utilizando outros parmetros de malhas
estruturadas, ou a aplicao de estratgias de estabilizao (mtodos estabilizados de
Petrov-Galerkin.
8
A. Modelo matemtico:
vi. kLM 3 OP 22 Q 22
figura 5 :
seguir:
9
vii. # 9 :( ;(
Figura 6 - Discretizao acima temos 1681 pontos com 160 pontos de contorno, 1521 pontos internos e 3200
subdomnios triangulares
O erro mdio percentual foi obtido pela mdia dos erros pontuais para cada
refinamento de malha definido a seguir, sendo considerado na mdia, apenas os
valores calculados, descartando os valores prescritos, pois estes no contribuem
para a gerao dos erros numricos.
Abalxo temos uma tabela com o comportamento do erro mdio percentual para
refinamentos de malha com 40, 80, 120 e 160 pontos de contorno.
11
malha
Erro
pontos de contorno pontos interno elementos
40 81 200 0,0000003730%
80 361 800 0,0000003523%
120 841 1800 0,0020980052%
160 1521 3200 0,0000004445%
Tabela 2 - Erro mdio e descrio de malha
2.5000E-05
2.0000E-05
ERRO MDIO
1.5000E-05
1.0000E-05 Series1
5.0000E-06
0.0000E+00
40 60 80 100 120 140 160
pontos de contorno
OBS: Visando apresentar a distribuio dos erros sobre o domnio, foi gerado abaixo
um grfico representando a diferena dos valores analticos e numricos para cada
ponto do domnio discretizado em 160 pontos de contorno, a saber:
12
OBS: Mesmo com a preciso do mtodo, observa-se pela figura 8, que com o aumento
do refinamento da malha, h um aumento significativo do erro mdio, sendo necessria
a verificao de novos testes com o mtodo, utilizando outros parmetros de malhas
estruturadas, ou a aplicao de estratgias de estabilizao (mtodos estabilizados de
Petrov-Galerkin).
13
A. Modelo Matemtico:
F=1,5
Para este problema, temos que os termos k11 e k22 da matriz K de condutividade
3d d h d
gd 3
R3 R g R
Rh 3
14
a) Malha estruturada
Figura 10 - Caracterstica: 3840 elementos, 2009 pontos com 1833 pontos internos e 176 pontos de
contorno.
15
Figura 12 - Caracteristica: 5110 elementos, 2644 pontos, 2468 pontos internos e 176 pontos de contorno.
16
A. Modelo Matemtico:
M OP 3 k l 3m
4 4
j j
ix. -kLM
4
n
j
F=
R3 o3C
Rpm o3C
3d 433q
kd o3C
a) Malha estruturada
Caracterstica: 3200 elementos, 1681 pontos com 1521 pontos internos e 160
pontos de contorno. Ver figura 10.
Figura 19 - Caracterstica: 4096 elementos, 2113 pontos, 1985 pontos internos e 128 pontos de contorno.
21
A. Modelo Matemtico:
s4 t
1 3
u
0 22 5 p rs4 r X X p rt r 3 32 l 32 22 3
tR4 R tR u
3 144 d
x.
td4 td
u(0,y)=u(1,y)=u(x,1)=0
. w/ : x . y
z w/ : { . y
u(x,0)=v
Breve comentrio:
fenmeno fsico dito ser conveco dominante. Neste caso, os mtodos numricos
usuais (por exemplo, mtodo de diferenas finitas centradas ou mtodo de elementos
finitos de Galerkin) podem apresentar instabilidades numricas indesejveis
(oscilaes esprias), sendo necessria a utilizao de estratgias de estabilizao
(mtodos estabilizados ou de Petrov-Galerkin).
K|8 |
~
|6|
6 z z.7 z. z. z.7
24
Caracteristica: 3200 elementos, 1681 pontos com 1521 pontos internos e 160 pontos
mostra:
Figura 26 - Perda da qualidade da soluo com valores de k iguais a 10^-7 e 10^-10 da esquerda para direita
Os dados acima permitem verificar que as oscilaes esprias surgem para valores
abaixo de k=10-3, logo se pode antecipar que o clculo do valor de k deve ser maior do
que 10-3, para o nmero de Pclet aproximadamente 1, Como |8 | unitrio e o valor
de ~ z, temos que :
K
|6|
Figura 27
27
K y y.. z.( ,
|6| z . z.( ,
Logo a figura 28 apresenta o mnimo valor de K onde pode iniciar a perda de qualidade
da soluo (ou elevao dos erros)
Figura 28
28
A. Modelo Matemtico:
s4 t
1 3
u
0 22 5 p rs4 r X X p rt r b 32 l 32 32 2
tR4 R tR u
3 144 d
xi.
td4 td
u(0,y)=u(1,y)=u(x,1)=0
. w/ : x .
z w/ : { .
u(x,0)=
Como o exemplo 5, temo que neste tambm fica caracterizado que a soluo numrica
da equao de conveco-difuso caracterizada pelo nmero de Pclet local, dado
por:
K|8 |
~
|6|
6 z z.7 z. z. z.7
Caracterstica: 3200 elementos, 1681 pontos com 1521 pontos internos e 160 pontos
de contorno. Ver figura 12
Os dados acima, permitem verificar que as oscilaes esprias surgem para valores
abaixo de k=10-3, logo o clculo do valor de k para o nmero de Pclet
aproximadamente 1, deve ser maior do que 10-3
K y y.. z.( ,
|6| z . z.( ,
Figura 32 - Distribuio de temperatura com k mnimo para incio das oscilaes esprias
Pela soluo, observado que o valor mnimo de k calculado que aproxima o valor de
Pclet mantem a qualidade dos resultados para a malha utilizada.
32
A. Modelo Matemtico:
s4 t
1 3
u
0 22 5 p rs4 r X X p rt r 3
tR4 R tR
3 144 d
xii.
td4 td
22 l 22 Q u
3
u(x,y)=0 R d B !
Figura 33
Rd 3 3d -seno(d
33
6 z z.7 z. z. z.7
Caracterstica: 3200 elementos, 1681 pontos com 1521 pontos internos e 160 pontos
6 z 6 10^-1 6 :10^-2
6 10^-5
6 z 6 10^-1 6 :10^-2
6 10^-5
A. Modelo Matemtico:
s4
1 3
0 22 5 p rs4 r NM b
tR4
3 144
xiii.
td4
32 l 32 2 3p h
Breve comentrio:
menor que |?| o fenmeno fsico dito ser reao dominante. Neste caso, o mtodo
de elementos finitos de Galerkin apresenta instabilidades numricas indesejveis
(oscilaes esprias) prximo a regies de gradientes elevados, sendo necessrio a
utilizao de estratgias de estabilizao (mtodos estabilizados ou de Petrov-
Galerkin).
A soluo numrica obtida pelo mtodo de Galerkin apresenta oscilaes esprias para
este problema quando a reao predomina em relao a difuso, isto ,
K( ?
z
|6|
6 z z.7 z. z.7(
Caracteristica: 3200 elementos, 1681 pontos com 1521 pontos internos e 160 pontos
Os dados acima, permitem verificar que as oscilaes esprias surgem para valores
abaixo de k=10-5, logo o clculo do valor de k para aproximadamente 1, deve ser
maior do que 10-5. Como ? unitrio e o valor de z, temos que :
|6| K(
K y y.. z.( ,
|6| z z z. ,
Figura 42
Temos que a condutividade trmica para a placa seja de k = 10W/mC. Fica proposta
a determinao do perfil de temperatura aps entrar em regime estacionrio.
Mestrado em
# 9 z..
# 9p z..
# < ..
# < z..
41
Malha estruturada
a) Caracterstica: 3200 elementos, 1681 pontos com 1521 pontos internos e 160
pontos de contorno. Ver figura 10
b) Malha no estruturada
Caracterstica: 2656 elementos, 1393 pontos com 1265 pontos internos e 128 pontos
de contorno. Ver figura 12
3. Referncia
G.F. Carrey and J.J oden: Finite elements Na introduction Vol1, Prentice Hall, 1986.
G.F. Carrey and J.J oden: Finite elements Na introduction Vol1, Prentice Hall, 1986.
4. Anexo
PROGRAM malha
real*8 xi,xf,yi,yf,px,py,vx,vy
integer dx,dy,np,nel
real*8 xy[allocatable](:,:)
integer vp[allocatable](:)
write(*,*)'Digite x inicial'
read(*,*)xi
write(*,*)'Digite x final'
read(*,*)xf
write(*,*)'Digite y inicial'
read(*,*)yi
write(*,*)'Digite y final'
read(*,*)yf
write(*,*)'Digite o numero de intervalos em x'
read(*,*)dx
write(*,*)'Digite o numero de intervalos em y'
read(*,*)dy
45
nel=2*(dx)*(dy)
c impresso
write(*,'(A\)')' Digite o nome do arquivo de saida=>'
read(*,'(A20)')arqout
open(imp,file=arqout)
c numero de pontos
np=(dx+1)*(dy+1)
allocate(xy(np,2))
allocate(vp(np))
c Calcula parmetro Ix e Iy
call param(xi,xf,yi,yf,dx,dy,px,py)
c Calcula coordenadas x e y
call coord(imp,np,xi,xf,yi,yf,dx,dy,px,py,vx,vy,vp,xy)
c Monta a triangulao
call triang(imp,nel,np,xy,dx,dy,xi,xf)
read(*,*)
stop
end
c
subroutine param(a,b,c,d,e,f,g,h)
46
real*8 a,b,c,d,g,h
integer e,f
c calcula px
if(a.gt.0.and.b.gt.0)then
g=(b-a)/e
else
if(a.lt.0.and.b.lt.0)then
g=(abs(a)-abs(b))/e
else
g=(b+abs(a))/e
endif
endif
c calcula py
if(c.gt.0.and.d.gt.0)then
h=(d-c)/f
else
if(c.lt.0.and.d.lt.0)then
h=(abs(c)-abs(d))/f
else
h=(d+abs(c))/f
endif
endif
return
end
c
subroutine coord(imp,np,a, b, c, d, e, f, g, h, i, j, v,cd)
real*8 a,b,c,d,g,h,i,j,cd(np,2),z(np)
47
integer e,f,k,w,soma
integer v(np)
do k=1,np
v(k)=k
z(k)=0
enddo
write(imp,*)'$MeshFormat'
write(imp,*)'2.2 0 8'
write(imp,*)'$EndMeshFormat'
write(imp,*)'$Nodes'
write(imp,1)v(np)
1 format(i5)
soma=0
do while(i.ne.b.and.j.ne.d)
do w=0,f
do k=0,e
i=a+k*g
j=c+w*h
if(((w+1)+(k+1)).le.2*(e+1))then
soma=soma+1
endif
cd(soma,1)=i
cd(soma,2)=j
write(imp,2)v(soma),cd(soma,1),cd(soma,2),z(soma)
2 format(i5,1x,e10.4,1x,e10.4,1x,e10.4)
enddo
enddo
48
enddo
return
end
c
subroutine ccelem(imp,np,dx,dy,xy,xi,xf,yi,yf)
real*8 xy(np,2),xi,xf,yi,yf
integer dx,dy,cx,cy,z,h
integer cont[allocatable](:),a[allocatable](:),b[allocatable](:),
+ cc[allocatable](:),nocc[allocatable](:)
z=2*dx*dy
nc=2*(dx+dy)
allocate(cont(z+nc))
allocate(a(nc))
allocate(b(nc))
allocate(cc(nc))
allocate(nocc(nc))
cx=1
cy=1
write(imp,*)'$EndNodes'
write(imp,*)'$Elements'
write(imp,3)z+nc
3 format(i5)
c preenche cont
do i=1,(z+nc)
cont(i)=i
enddo
do i=1,nc
nocc(i)=0
49
a(i)=0
b(i)=0
enddo
c preenche cc
do i=1,dx
cc(i)=7
enddo
do i=(dx+1),(dx+dy)
cc(i)=8
enddo
do i=(dx+dy+1),(2*dx+dy)
cc(i)=9
enddo
do i=(2*dx+dy+1),2*(dx+dy)
cc(i)=10
enddo
h=1
do i=1,np
if(xy(i,2).eq.yi.and.cx.le.dx)then
write(*,*)i
nocc(h)=i
h=h+1
cx=cx+1
endif
if(xy(i,1).eq.xf.and.cy.le.dy)then
write(*,*)i
nocc(h)=i
h=h+1
cy=cy+1
50
endif
enddo
cx=1
cy=1
do i=np,1,-1
if(xy(i,2).eq.yf.and.cx.le.dx)then
write(*,*)i
nocc(h)=i
h=h+1
cx=cx+1
endif
if(xy(i,1).eq.xi.and.cy.le.dy)then
write(*,*)i
nocc(h)=i
h=h+1
cy=cy+1
endif
enddo
do i=1,nc
write(imp,4)cont(i),a(i),b(i),cc(i),a(i),nocc(i),a(i)
4 format(i5,1x,i1,1x,i1,1x,i2,1x,i1,1x,i5,1x,i1)
enddo
return
end
subroutine triang(imp,nel,np,xy,dx,dy,xi,xf)
real*8 xy(np,2),xi,xf
integer nel,imp,dx,dy,np,h,w,ien[allocatable](:,:),
+ cont[allocatable](:),aux[allocatable](:)
51
allocate(aux(nel))
allocate(ien(nel,3))
allocate(cont(2*((dx)*(dy)+(dx+dy))))
do i=1,nel
aux(i)=0
ien(i,1)=0
ien(i,2)=0
ien(i,3)=0
enddo
do i=1,2*((dx)*(dy)+(dx+dy))
cont(i)=i
enddo
c write(*,*)'triangulos'
c write(*,*)'lado esquerdo'
h=1
do i=1,np-(dx+1)
if(xy(i,1).eq.xi)then
ien(h,1)=i
h=h+1
else
if(xy(i,1).eq.xf)then
ien(h,1)=i
h=h+1
52
else
ien(h,1)=i
ien(h+1,1)=i
h=h+2
endif
endif
enddo
c write(*,*)'triangulos'
c write(*,*)'lado central'
w=1
do i=1,(dy)*(dx+1)
if(xy(i,1).ne.xi)then
ien(w,2)=i
ien(w+1,2)=i+(dx+1)
w=w+2
endif
enddo
c write(*,*)'triangulos'
c write(*,*)'lado direito'
z=1
do i=(2+dx),np
if(xy(i,1).ne.xf)then
ien(z,3)=i
ien(z+1,3)=i
z=z+2
53
endif
enddo
do i=1,nel
write(imp,5)cont(i+(2*((dx)*(dy)+(dx+dy)))-nel),aux(i),aux(i)
+ ,aux(i),aux(i),ien(i,1),ien(i,2),ien(i,3)
5 format(i5,1x,i1,1x,i1,1x,i1,1x,i1,1x,i5,1x,i5,1x,i5)
enddo
return
end
PROGRAM FEM_2D
c I)DECLARAO DE VARIVEIS
c CONSTANTES:
integer*1 impmat,exata,chapado
integer*4 nnos,nel,nelt,presc,neq
real*4 sig,ka,kb,h1,h2,h3,h4
real*8 j,i,w,z
c VETORES
54
integer*2 l[allocatable](:),m[allocatable](:),
+ n[allocatable](:),condbound[allocatable](:),
+ p[allocatable](:),bound[allocatable](:),
+ r[allocatable](:),l1[allocatable](:),
+ m1[allocatable](:),n1[allocatable](:),
+ o1[allocatable](:),p1[allocatable](:),
+ g[allocatable](:),auxg[allocatable](:)
integer*4 id[allocatable](:),nos[allocatable](:)
real*8 fno[allocatable](:),gv[allocatable](:),
+ fgl[allocatable](:),erro[allocatable](:)
c MATRIZES
real*8 agl[allocatable](:,:),coord[allocatable](:,:),
+ lm[allocatable](:,:),ien[allocatable](:,:)
c ******************************************************************
read(*,*)
Write(*,*)' 4) - Informe o valor do termo reativo'
read(*,*)sig
Write(*,*)
Write(*,*)'click enter'
read(*,*)
Write(*,*)' 5) - O valor do termo fonte deve ser inserido no codi
+go'
Write(*,*)'click enter'
read(*,*)
Write(*,*)' 4) - Informe as condies de Neumann'
Write(*,*)
Write(*,*)'h1'
read(*,*)h1
Write(*,*)
Write(*,*)'h2'
read(*,*)h2
Write(*,*)
Write(*,*)'h3'
read(*,*)h3
Write(*,*)
Write(*,*)'h4'
read(*,*)h4
Write(*,*)
Write(*,*)'click enter'
read(*,*)
Write(*,*)'click enter'
read(*,*)
Write(*,*)'a) Para soluo exata digite 1, Para erro digite 2 e
+para solucao numerica digite zero'
read(*,*)exata
Write(*,*)'click enter'
read(*,*)
Write(*,*)'b) Para imprimir matriz e vetor global digite 1, se nao
+digite zero'
read(*,*)impmat
Write(*,*)'click enter'
read(*,*)
Write(*,*)'c) Para imprimir as curvas de nivel digite 1 ou zero pa
+ra plotar os dados no eixo Z'
read(*,*)chapado
!*****************************************************************
c III)ARMAZENANDO DADOS DE MALHA GMSH OU MALHA ESTRUTURADA
read(lei,100)pula
100 format(a1)
read(lei,101)pula
101 format(a1)
read(lei,102)pula
102 format(a1)
read(lei,103)pula
103 format(a1)
do i=1,nnos
do j=1,2
coord(i,j)=0
enddo
enddo
do 1 i=1,nnos
59
1 continue
read(lei,105)pula
105 format(a1)
read(lei,106)pula
106 format(a1)
allocate(l(presc))
allocate(m(presc))
allocate(n(presc))
allocate(condbound(presc))
allocate(p(presc))
allocate(bound(presc))
allocate(r(presc))
do 2 i=1,presc
read(lei,*)l(i),m(i),n(i),condbound(i),p(i),bound(i),r(i)
2 continue
deallocate(l)
deallocate(m)
deallocate(n)
deallocate(p)
60
deallocate(r)
nel=nelt-presc
allocate(l1(nel))
allocate(m1(nel))
allocate(n1(nel))
allocate(o1(nel))
allocate(p1(nel))
allocate(ien(nel,3))
allocate(lm(nel,3))
do 3 i=1,nel
ien(i,1)=0
ien(i,2)=0
ien(i,3)=0
3 continue
do 4 i=1,nel
read(lei,*)l1(i),m1(i),n1(i),o1(i),p1(i),ien(i,1),ien(i,2),ien(i,3
+)
4 continue
deallocate(l1)
deallocate(m1)
deallocate(n1)
deallocate(o1)
deallocate(p1)
!FIM DO ARMAZENAMENTO DE DADOS DE MALHA
61
c ******************************************************************
c ******************************************************************
do 5 i=1,nnos
z=0 !sempre antes de entrar no loop de comparao, coloca flag em 0
do 6 j=1,presc
if(nos(i).eq.bound(j))then
z=1 !obs: significa que achou o numero nos dados de contorno, atuali
!zando-se para 1, seno, fica em 0
endif
6 continue
62
if(z.eq.1) then
id(i)=0
else
id(i)=w
w=w+1
endif
5 continue
neq=id(1)
do 7 i=1,nel
do 8 j=1,3
lm(i,j)=id(ien(i,j))
8 continue
7 continue
! UMA CONSTANTE
do 10 i=1,nnos
gv(i)=0
g(i)=0
10 continue
do 11 i=1,presc
do 12 j=1,nnos
if(bound(i).eq.auxg(j))then
g(j)=condbound(i)
endif
12 continue
11 continue
64
if(g(i).eq.7)then
gv(i)=0
else
if(g(i).eq.8)then
gv(i)=0
else
if(g(i).eq.9)then
gv(i)=0
else
if(g(i).eq.10)then
gv(i)=0
else
if(g(i).eq.11)then
65
gv(i)=0
endif
endif
endif
endif
endif
13 continue
!FIM DA PREPACAO DAS CONDIES DE FRONTEIRA:
c ******************************************************************
c ******************************************************************
do 14 i=1,nnos
fno(i)=0
14 continue
!FIM DA PREPACAO DO TERMO FONTE:
c ******************************************************************
c ******************************************************************
66
do 15 i=1,nnos
if(neq.lt.id(i)) then
neq=id(i)
endif
15 continue
allocate(fgl(neq))
allocate(agl(neq,neq))
do 16 i=1,neq
fgl(i)=0
16 enddo
do 17 i=1,neq
do 18 j=1,neq
agl(i,j)=0
18 continue
17 continue
!FIM DA ALOCAO DINMICA DO DIMENSIONAMENTO DA MATRIZ E DO
67
!VETOR GLOBAL
c ******************************************************************
c ******************************************************************
if(impmat.eq.1)then
call impriglobal(imp,neq,agl,fgl)
endif
call gauss(d,neq,agl,fgl)
call solucaonum(nnos,neq,id,gv,fgl)
call impressao(exata,imp,nnos,nel,gv,coord,ien,chapado,erro)
!FIM DAS SUBROTINAS DE GERAO E IMPRESSO DAS SOLUES
OBTIDAS
!PELO MTODO DE ELEMENTOS FINITOS PARA O PROBLEMA PROPOSTO
c ******************************************************************
c ******************************************************************
68
!**********************
!FINALIZANDO O PROGRAMA
stop
end
!**********************
subroutine preenche(nel,ien,nnos,coord,ka,kb,sig,fno,gv,lm,neq,
+ fgl,agl,h1,h2,h3,h4,bound,presc)
!CONSTANTES
integer*4 nel,nnos,presc,neq,ng1,ng2,ng3,e
real*4 h1,h2,h3,h4,ka,kb,sig,Ar,xm,ym,conv,reat,bx,by,i,j,dif
!VETORES
integer*2 bound(presc)
real*8 fno(nnos),gv(nnos),fgl(neq),ff(3),fg(3),fl(3),fh(3),
+ x(3),y(3),a(3),b(3),c(3)
69
!MATRIZES
real*8 agl(neq,neq),coord(nnos,2),lm(nel,3),ien(nel,3),
+ d(3,3),cv(3,3),rt(3,3),al(3,3)
!CALCULO
do 102 i=1,3
do 103 j=1,3
d(i,j)=0
cv(i,j)=0
rt(i,j)=0
al(i,j)=0
103 continue
102 continue
ng3=0
do 104 i=1,3
x(i)=0
y(i)=0
104 continue
ng1=ien(e,1)
ng2=ien(e,2)
ng3=ien(e,3)
x(1)=coord(ng1,1)
x(2)=coord(ng2,1)
x(3)=coord(ng3,1)
y(1)=coord(ng1,2)
y(2)=coord(ng2,2)
y(3)=coord(ng3,2)
b(1)=y(2)-y(3)
b(2)=y(3)-y(1)
b(3)=y(1)-y(2)
c(1)=x(3)-x(2)
71
c(2)=x(1)-x(3)
c(3)=x(2)-x(1)
! e)CALCULA O BARICENTRO
xm=(0.330)*(x(1)+x(2)+x(3))
ym=(0.330)*(y(1)+y(2)+y(3))
c >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ENTRADA DO
USURIO
! g) CALCULA CONSTANTES
do 105 i=1,3
bx=0 !<<< FUN CONVEC xm e ym
by=0 !<<< FUN CONVEC xm e ym
105 continue
c >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>FIM DO USURIO
do 108 i=1,3
do 109 j=1,3
cv(i,j)=conv*((bx*b(j))+(by*c(j)))
109 continue
108 continue
rt(i,j)=sig*(Ar*conv)
else
rt(i,j)=sig*(Ar*reat)
endif
111 continue
110 continue
ff(3)=((Ar/12)*((fno(ien(e,1)))+(fno(ien(e,2)))+(2*fno(ien(e,3))))
+ )/1000
bb=0
do 115 i=1,presc
if(ng2.eq.bound(i))then
bb=1
endif
115 continue
cc=0
do 116 i=1,presc
if(ng3.eq.bound(i))then
cc=1
74
endif
116 continue
if(aa.eq.0.and.bb.eq.0.and.y(1).eq.0.and.y(2).eq.0.and.x(1).ne.coo
+ rd(1,1).and.x(2).ne.coord(nnos,1))then
fh(1)=((h1)*abs((x(2))-(x(1))))/2000
fh(2)=((h1)*abs((x(2))-(x(1))))/2000
fh(3)=0
endif
if(aa.eq.0.and.bb.eq.0.and.x(1).eq.coord(nnos,1).and.x(2).eq.coord
+ (nnos,1))then
fh(1)=((h2)*abs((y(2))-(y(1))))/2000
fh(2)=((h2)*abs((y(2))-(y(1))))/2000
fh(3)=0
endif
if(bb.eq.0.and.cc.eq.0.and.y(2).eq.coord(nnos,2).and.y(3).eq.coord
+ (nnos,2).and.x(2).ne.coord(nnos,1).and.x(3).ne.coord(1,1))then
fh(1)=0
fh(2)=((h3)*abs((x(3))-(x(2))))/2000
fh(3)=((h3)*abs((x(3))-(x(2))))/2000
endif
if(aa.eq.0.and.cc.eq.0.and.x(1).eq.coord(1,1).and.x(3).eq.coord(1,
+ 1))then
fh(1)=((h4)*abs((y(3))-(y(1))))/2000
fh(2)=0
fh(3)=((h4)*abs((y(3))-(y(1))))/2000
75
endif
subroutine impriglobal(imp,neq,agl,fgl)
!CONSTANTES
integer imp,neq
!VETORES
real*8 fgl(neq)
!MATRIZES
real*8 agl(neq,neq)
!CALCULO
write(*,*)"IMPRESSAO DA MATRIZ GLOBAL E VETOR GLOBAL"
write(*,*)"agl(i,j)"
do 200 i=1,neq
write(imp,300)(agl(i,j),j=1,neq)
300 format(64(2x,f12.6))
200 continue
write(imp,301)
301 format(\\)
write(*,*)"fgl(i)"
do 201 i=1,neq
write(imp,302)fgl(i)
302 format(2x,f12.6)
201 continue
return
end
77
c FIM
!CONSTANTES
real*8 i,j
!VETORES
real*8 b(n)
!MATRIZES
real*8 a(n,n)
!CALCULO
n1=n-1
do 100 k=1,n1
k1=k+1
c=a(k,k)
if (abs(c)-0.000001)1,1,3
1 do 7 j=k1,n
if (abs(a(j,k))-0.000001)7,7,5
5 do 6 l=k,n
c=a(k,l)
a(k,l)=a(j,l)
6 a(j,l)=c
c=b(k)
78
b(k)=b(j)
b(j)=c
c=a(k,k)
go to 3
7 continue
8 write(6,2) k
2 format('**** singularity in row',i5)
d=0.
go to 300
3 c=a(k,k)
do 4 j=k1,n
4 a(k,j)=a(k,j)/c
b(k)=b(k)/c
do 10 i=k1,n
c=a(i,k)
do 9 j=k1,n
9 a(i,j)=a(i,j)-c*a(k,j)
10 b(i)=b(i)-c*b(k)
100 continue
if (abs(a(n,n))-0.000001)8,8,101
101 b(n)=b(n)/a(n,n)
do 200 l=1,n1
k=n-l
k1=k+1
do 200 j=k1,n
200 b(k)=b(k)-a(k,j)*b(j)
79
d=1.
do 250 i=1,n
250 d=d*a(i,i)
300 return
end
c FIM
!CONSTANTES
real*8 i,j
integer*4 nos,neq
!VETORES
real*8 gv(nos),fgl(neq)
integer*4 id(nos)
!CALCULO
j=1
do 1 i=1,nos
if(id(i).ne.0)then
gv(i)=fgl(j)
j=j+1
endif
1 continue
return
80
end
c FIM
!CONSTANTES
integer*1 exata,chapado
integer*4 nos,nel,imp
!VETORES
real*8 g(nos),n(nel),er(nos)
!MATRIZES
real*8 c(nos,2),in(nel,3)
!CALCULO
WRITE(imp,*)'<VTKFile type="UnstructuredGrid">'
WRITE(imp,*)' <UnstructuredGrid>'
WRITE(imp,*)' <Piece NumberOfPoints="',nos,'" NumberOfCe
+lls="',nel,'">'
WRITE(imp,*)' <PointData>'
WRITE(imp,*)' <DataArray type="Float32" Name="
+u_comp" '
WRITE(imp,*)'Format="ascii">'
81
if(exata.eq.1)then
do 400 i=1,nos
g(i)=0
g(i)=sinh(c(i,1))/1.5430806348152
400 continue
end if
if(exata.eq.2)then
do 401 i=1,nos
er(i)=0
er(i)=((10**4))*(g(i)-(sinh(c(i,1))/1.5430806348152))
401 continue
end if
if(exata.eq.2)then
do 402 i=1,nos
WRITE(imp,500)er(i)
500 format(22x,e10.4)
402 continue
else
do 403 i=1,nos
WRITE(imp,501)g(i)
82
501 format(22x,e10.4)
403 continue
endif
WRITE(imp,*)' </DataArray>'
WRITE(imp,*)' </PointData>'
WRITE(imp,*)' <CellData>'
WRITE(imp,*)' </CellData>'
WRITE(imp,*)' <Points>'
WRITE(imp,*)' <DataArray type="Float32"'
WRITE(imp,*)'NumberOfComponents="3" Format="ascii">'
if(chapado.eq.1)then
do 404 i=1,nos
g(i)=0
er(i)=0
404 continue
end if
if(exata.eq.2)then
do 405 i=1,nos
WRITE(imp,502)c(i,1),c(i,2),er(i)
502 format(28x,f9.6,1x,f9.6,1x,e10.4)
405 continue
else
83
do 406 i=1,nos
WRITE(imp,503)c(i,1),c(i,2),g(i)
503 format(28x,f9.6,1x,f9.6,1x,e10.4)
406 continue
endif
WRITE(imp,*)' </DataArray>'
WRITE(imp,*)' </Points>'
WRITE(imp,*)' <Cells>'
WRITE(imp,*)' <DataArray type="Float32" Name="co
+nnectivity"'
WRITE(imp,*)'Format="ascii">'
do 407 i=1,nel
WRITE(imp,504)(in(i,1)-1),(in(i,2)-1),(in(i,3)-1)
504 format(28x,f6.1,1x,f6.1,1x,f6.1)
407 continue
WRITE(imp,*)' </DataArray>'
WRITE(imp,*)' <DataArray type="Float32" Name="of
+fsets"'
WRITE(imp,*)'Format="ascii">'
do 408 i=1,nel
n(i)=0
408 continue
do 409 i=1,nel
n(i)=3*i
84
409 continue
do 410 i=1,nel
write(imp,505)n(i)
505 format(25x,f9.1)
410 continue
WRITE(imp,*)' </DataArray>'
WRITE(imp,*)' <DataArray type="Float32" Name="ty
+pes"'
WRITE(imp,*)'Format="ascii">'
do 411 i=1,nel
n(i)=0
411 continue
do 412 i=1,nel
n(i)=5
412 continue
do 413i=1,nel
write(imp,506)n(i)
506 format(25x,f3.1)
413 continue
WRITE(imp,*)' </DataArray>'
WRITE(imp,*)' </Cells>'
WRITE(imp,*)' </Piece>'
WRITE(imp,*)' </UnstructuredGrid>'
85
WRITE(imp,*)'</VTKFile>'
return
end