Você está na página 1de 18

Capítulo 10

Elementos Finitos 2D

10.1 Introdução
O método dos elementos finitos bidimensionais segue paraticamente o mesmo
esquema do unidemensional analisado acima. Ssguindo a mesma metodolo-
gia, vamos iniciar com o problema piloto formado pela equação bidimen-
sional de Poisson

−∇2 u (x, y) = h (x, y) (10.1)


numa região retangular 0 < x < a, 0 < y < b, com fronteira de Dirichlet
homogênea. A solução exata é dada pela série dupla de Fourier
∞ ∞
4 XX sin mπx sin nπy
u (x, y) = Amn ¡ ¢a2 ¡ b¢2 (10.2)
ab m=1 n=1 mπ
+ nπ
a b
cujos coeficientes Amn são dados por
Z aZ b ¡ ¢ mπx 0 nπy 0 0 0
Amn = h x0 , y0 sin sin dx dy (10.3)
0 0 a b

Primeiro, vamos traduzir (10.2) e (10.3) na linguagem Mathematica:

(*–Calculo dos coeficientes Amn –*)


amn[funH_, a_, b_, m_, n_] :=
Module[{x, y},
Simplify[Integrate[
Integrate[funH[x, y] Sin[m Pi x/a], {x, 0, a}] Sin[n Pi y/b], {y, 0, b}],
{m, n} \[Element] Integers]]

641
642 CAPÍTULO 10. ELEMENTOS FINITOS 2D

Agora, vamos calcular a série dupla de Fourier

(*–poissonEq2D[expr] calcula a série dupla de Fourier –*)


poissonEq2D[amm_, x_, y_, a_, b_, mMax_, nMax_] := Module[{},
Simplify[4./(a b) Sum[Sum[If[amm != 0, amm/((m Pi/a)^2 +
(n Pi/b)^2) Sin[m Pi x/a], 0], {m, mMax}] Sin[n Pi y/b], {n, nMax}],
{m, n} \[Element] Integers]]

Considerando o retângulo 0 < x < 2 e 0 < b < 2 e h (x, y) = −x2 y ,


vamos agora usar estes dois programas para determinar a solução da equação
de Poisson nos pontos (0.5, 0.5), (0.5, 1.0), (0.75, 0.75), (1.0, 1.0), (1.5, 0.5),
(1.5, 1.0) usando 10 termos da série:

Clear[m, n]
coordXY = {{0.5, 0.5}, {1.5, 0.5}, {1., 1.}, {1.5, 1.}, {0.75, 0.75}, {0.5,
1.5}};
funH[x_, y_] := x^2 y
{a, b, mMax, nMax} = {2., 2., 10, 10};
amnC = amn[funH, a, b, m, n] // Simplify;
Table[poissonEq2D[amnC, coordXY[[i, 1]], xy[[i, 2]], a, b, mMax, nMax] ,
{i, Length[coordXY]}]

{0.100692, 0.22107, 0.340119, 0.394222, 0.214537, 0.147511}

Com 25 termos teremos da série

{a, b, mMax, nMax} = {2., 2., 25, 25};


amnC = amn[funH, a, b, m, n] // Simplify;
Table[poissonEq2D[amnC, coordXY[[i, 1]], xy[[i, 2]], a, b, mMax, nMax] ,
{i, Length[coordXY]}]

{0.100967, 0.221526, 0.339415, 0.393563, 0.214442, 0.148187}

Agora visualizar graficamente a solução:

Clear[x, y, m, n]
{a, b, mMax, nMax} = {2., 2., 5, 5};
funH[x_, y_] := x^2 y
amnC = amn[funH, a, b, m, n] // Simplify;
Plot3D[ poissonEq2D[amnC, x, y, a, b, mMax, nMax], {x, 0, a}, {y, 0,
b},
10.1. INTRODUÇÃO 643

AxesLabel -> {"x", "y", "U"}, BaseStyle -> {FontSize -> 8.}]

Figura 10.1:

Fisicamente, a solução da equação de Poisson corresponde ao po-


tencial gerado pela fonte h (x, y) .Mais importante que o potencial é o seu
gradiente, que normalmente corresponde a um o campo elétrico ou mag-
nético. O Mathematica oferece uma maneira simple de visualizar o campo
de vetores associado ao gradiente do potencial. ë só usar os comando:

<< VectorFieldPlots‘;

GradientFieldPlot[-poissonEq2D[amnC, x, y, 2, 2, 5, 5], {x, 0, 2}, {y, 0,


2},

ScaleFunction -> (.4 &), Frame -> True]


644 CAPÍTULO 10. ELEMENTOS FINITOS 2D

2.0

1.5

1.0

0.5

0.0

0.0 0.5 1.0 1.5 2.0

Figura 10.2:

O Mathematica automaticamente interpola a solução da equação para


traçar o grafico do potencial. Com o objetivo de preparar o terreno para o
estudo dos elementos finitos 2D que veremos logo em breve é conveniente
desenvolver uma metodologia de interpolação numa partição triangular da
região de interesse do problema. Para iniciar vamos constuir um algoritmo
para fazer a numeração dos nós de cada triângulo que forma a malha de
interpolação:

nosElem[nX_, nY_] := Module[{},


Clear[m, n]
nElem = 2*(nX - 1)*(nY - 1);
nosE = Table[0, {i, nElem}, {j, 3}];
k = 1;
m = 1;
Do[n = m;
Do[nosE[[k, 1]] = n;
nosE[[k, 2]] = n + 1;
nosE[[k, 3]] = n + nY + 1;
nosE[[k + 1, 1]] = n + nY + 1;
nosE[[k + 1, 2]] = n + nY;
nosE[[k + 1, 3]] = n;
n = n + 1;
10.1. INTRODUÇÃO 645

k = k + 2, {j, nY - 1}];
m = m + nY, {i, nX - 1}]
nosE[[2 nY - 3]] = {nY - 1, nY, 2 nY - 1};
nosE[[2 nY - 2]] = {2 nY, 2 nY - 1, nY};
nosE[[2 (nX - 2) (nY - 1) + 1]] = {(nX - 2) nY + 1, (nX - 2) nY + 2, (n
- 1) nY + 1};
nosE[[2 (nX - 2) (nY - 1) + 2]] = {(nX - 1) nY + 2, (nX - 1) nY + 1, (nX
- 2) nY + 2};]

Em seguida vamos determinar as coordenadas de cada vértice dos triân-


gulos da malha:

coordElem[nX_, nY_, a_, b_] := Module[{},


delX = a/(nX - 1);
delY = b/(nY - 1);
xt = Table[n delX, {n, nX - 1}];
xt = PrependTo[xt, 0];
yt = Table[n delY, {n, nY - 1}];
yt = PrependTo[yt, 0];
coordX = Table[0, {nX nY}];
coordY = Table[0, {nX nY}];
k = 1;
Do[Do[
coordX[[k]] = xt[[i]];
coordY[[k]] = yt[[j]];
k = k + 1, {j, nY}], {i, nX}]
coordXY = Transpose[{coordX, coordY}];
elemXY = Table[Part[coordXY, nosE[[i]]], {i, Length[nosE]}];]

De posse da numeração dos nós dos trângulos e das coordenadas dos nós
é imediato traçar a malha de interpolação. Com efeito,

{nX, nY, a, b} = {5, 5, 2., 2.};


nosElem[nX, nY]
cordElem[nX, nY, a, b]
listXY = Table[Append[elemXY[[j]], elemXY[[j, 1]]], {j, Length[elemXY]}];
ListPlot[listXY, Joined -> True, AspectRatio -> Automatic]
646 CAPÍTULO 10. ELEMENTOS FINITOS 2D

2.0

1.5

1.0

0.5

0.5 1.0 1.5 2.0

Figura 10.3:

Agora vamos calcular o potencial nos nós da malha e traçar o gráfico:

{a, b} = {2., 2.};


Clear[x, y, m, n];
funH[x_, y_] := x^2 y;
amnC = amn[funH, a, b, m, n] // Simplify ;

{nX, nY, maxX, maxY} = {5, 5, 10, 10};


nosElem[nX, nY]
cordElem[nX, nY, a, b]
Clear[x, y, m, n];
listU = Table[0, {nElem}];
Do[listU[[k]] = Table[{elemXY[[k, j, 1]], elemXY[[k, j, 2]],
poissonEq2D[amnC, elemXY[[k, j, 1]], elemXY[[k, j, 2]], a, b, maxX,
maxY]},
{j, 3}], {k, nElem}]

ListPlot3D[listU, Mesh -> False, AxesLabel -> {"x", "y", "U"},


BaseStyle -> {FontSize -> 8.}]
10.1. INTRODUÇÃO 647

Figura 10.4:

{nX, nY, a, b} = {17, 17, 2., 2.};

nosElem[nX, nY]

cordElem[nX, nY, a, b]

listXY = Table[Append[elemXY[[j]], elemXY[[j, 1]]], {j, Length[elemXY]}];

ListPlot[listXY, Joined -> True, AspectRatio -> Automatic]


648 CAPÍTULO 10. ELEMENTOS FINITOS 2D

2.0

1.5

1.0

0.5

0.5 1.0 1.5 2.0

Figura 10.5:

{nX, nY, maxX, maxY} = {17, 17, 10, 10};


nosElem[nX, nY]
cordElem[nX, nY, a, b]
Clear[x, y, m, n];
listU = Table[0, {nElem}];
Do[listU[[k]] = Table[{elemXY[[k, j, 1]], elemXY[[k, j, 2]],
poissonEq2D[amnC, elemXY[[k, j, 1]], elemXY[[k, j, 2]], a, b, maxX,
maxY]},
{j, 3}], {k, nElem}]

ListPlot3D[listU, Mesh -> False, AxesLabel -> {"x", "y", "U"},


BaseStyle -> {FontSize -> 8.}]
10.1. INTRODUÇÃO 649

Figura 10.6:

Para interpolar linearmente a função u (x, y) em qualquer ponto interno


de um triângulo é preciso, em primeiro lugar, se ter as funções bases. Por-
tanto, vamos agora construir as funções bases. Consideremos, então, um
elemento genérico Ωe da malha de elementos finitos, ilustrado na Figura
10.7,

(x 3, z 3)

1 2 (x 2 , z 2)
(x 1 , z 1 )

Figura 10.7: Elemento triangular.

e suponhamos que u seja aproximada, no elemento Ωe pela função linear

u (x, z) = α + βx + γz, (10.4)

que corresponde a um plano passando pelos três valores nodais (ue1 , ue2 , ue3 )
de u (x, z) no elemento.
650 CAPÍTULO 10. ELEMENTOS FINITOS 2D

Podemos expressar as três constantes α, β e γ em termos das coordenadas


dos nós do triângulo e dos valores nodais ue1 , ue2 , ue3 . Com efeito,

ue1 = α + βx1 + γx1 ,


ue2 = α + βx2 + γx2 ,
ue3 = α + βx3 + γx3 .
Resolvendo este sistema de equações lineares pela regra de Cramer, vem:
¯ e ¯ ¯ ¯ ¯ ¯
¯ u1 x1 z1 ¯ ¯ 1 ue1 z1 ¯ ¯ 1 x1 ue1 ¯
1 ¯ e ¯ 1 ¯ ¯ 1 ¯ ¯
α= ¯ u x2 z2 ¯ , α = ¯ 1 ue z2 ¯ , α = ¯ 1 x2 ue ¯
2∆e ¯ 2 ¯ e
2∆ ¯ ¯ 2 ¯ e
2∆ ¯ ¯ 2 ¯
¯ ue x3 z3 ¯ 1 ue3 z3 ¯ 1 x3 ue3 ¯
3
(10.5)
em que ¯ ¯
¯ 1 x1 z1 ¯
1 ¯ ¯
∆e = ¯¯ 1 x2 z2 ¯¯

1 x3 z3 ¯
é a área do triângulo cujos vértices são (xe1 , z1e ), (xe2 , z2e ) e (xe3 , z3e ).
Desdobrando os determinantes 10.5, obtemos os valores de α, β e γ.
Então,

ue1 (x2 x3 − z2 z3 ) + ue2 (x3 x1 − z1 z3 ) + ue3 (x1 x2 − z2 z1 )


α = ,
2∆
ue1 (y2 − y3 ) + ue2 (y3 − y1 ) + ue3 (y1 − y2 )
β = ,
2∆
ue1 (y3 − x2 ) + ue2 (x1 − x3 ) + ue3 (x2 − x1 )
γ =
2∆
Re-arranjando os termos dessas expressões, vem
a1 + b1 x + c1 z e a2 + b2 x + c2 z e a3 + b3 x + c3 z e
ue (x, z) = u1 + u2 + u3 ,
2∆ 2∆ 2∆
(10.6)

em que

a1 = x2 z3 − x3 z2 , b1 = z2 − z3 , c1 = x3 − x2 ,
a2 = x3 z1 − x1 z3 , b2 = z3 − z1 , c2 = x1 − x3 , (10.7)
a3 = x1 z2 − x2 z1 , b3 = z1 − z2 , c3 = x2 − x1 .
10.1. INTRODUÇÃO 651

Definindo-se as funções bases ϕ1 , ϕ2 e ϕ3 pela expressões:

1
ϕ1 (x, y) = (a1 + b1 x + c1 z) ,
2∆
1
ϕ2 (x, y) = (a2 + b2 x + c2 z) , (10.8)
2∆
1
ϕ3 (x, y) = (a3 + b3 x + c3 z) ,
2∆

pode-se re-escrever (10.6) da seguinte maneira

ue (x, z) = ue1 ϕ1 (x, y) + ue1 ϕ2 (x, y) + ue1 ϕ3 (x, y) . (10.9)

Veja que as funções bases são lineares e satisfazem as seguintes condições:

ϕ1 (x1 , z1 ) = 1, ϕ1 (x2 , z2 ) = 0, ϕ1 (x3 , z3 ) = 0,


ϕ2 (x1 , z1 ) = 0, ϕ2 (x2 , z2 ) = 1, ϕ2 (x3 , z3 ) = 0,
ϕ3 (x1 , z1 ) = 0, ϕ3 (x2 , z2 ) = 0, ϕ3 (x3 , z3 ) = 1.

Estas características das funções bases são ilustradas claramente na figura


a seguir:
3
1 @1 3
1 1
@2 2
2
@3
2 3
1

Figura 10.8: Funções bases lineares de elementos triangulares.

De posse das funções base podemos interpolar linearmente qualquer


função conhecida numa região triangularizada do plano. E se a função
não for conhecida? Ainda podemos interpolar se subermos suficientes in-
formações sobre a função. Em geral essas informações são dadas na forma
de uma equação diferencial e de condições de fronteira em torno da região
do plano. Neste caso, a interpolação é obtida pelo algoritmo dos elementos
finitos.
652 CAPÍTULO 10. ELEMENTOS FINITOS 2D

Seguindo o mesmo caminho do desenvolvimento do algoritmo dos elemen-


tos finitos 1D, vamos desenvolver o algoritmo para o caso bidimensional.
Vamos empregar o mesmo problema piloto definido no início da seção.
Isto é,

µ ¶ µ ¶
∂ ∂u ∂ ∂u
− k(x, y) − k(x, y) + q(x, y)u = h (x, y) (10.10)
∂x ∂x ∂y ∂y

definida na região 0 < x < 2 e 0 < b < 2, com condições de contorno de


Dirichlet homogêneas e h (x, y) = −x2 y, sendo k(x, y) = 1 e q (x, y) = 0.
Aplicando o critério de Galerkin em cada elemento, ou seja

Z Z µ µ ¶ µ ¶
∂ ∂ue ∂ ∂ue
ϕi dxdy = ϕi − k(x, y) − k(x, y)
Ωe Ωe ∂x ∂x ∂y ∂y

+ q (x, y) ue dxdy − h (x, y)) dxdy = 0


onde ϕi (i = 1, 2, 3) são as funções base.
Usando as seguintes identidades,
µ ¶ µ ¶
∂ ∂u ∂ ∂u ∂ϕ ∂u
ϕi k = ϕi k −k i ,
∂x ∂x ∂x ∂x ∂x ∂x
µ ¶ µ ¶
∂ ∂u ∂ ∂u ∂ϕ ∂u
ϕi k = ϕi k −k i ,
∂y ∂y ∂y ∂y ∂y ∂y

e substituíndo em ?? obtemos

µ ¶
∂ϕi ∂ue ∂ϕi ∂ue
ki + dxdy
∂x ∂x ∂y ∂y
Z ∙ µ ¶ µ ¶¸
∂ ∂ue ∂ ∂ue
+ ϕi + ϕi dxdy
Ωe ∂x ∂x ∂y ∂y
Z µ ¶
∂ϕi ∂ue ∂ϕi ∂ue
+ki + dxdy
Ωe ∂x ∂x ∂y ∂y
Z
+qi ϕi ue dxdy
Ωe
Z
= ϕi h (x, y) dxdy
Ωe

Aplicando o Teorema de Green


10.1. INTRODUÇÃO 653

Z ∙ µ ¶ µ ¶¸ Z
∂ ∂ue ∂ ∂ue ∂ue ∂ue
ϕi + ϕi dxdy = − ϕi dx − ϕi dy
∂Ωe ∂x ∂x ∂y ∂y ∂y ∂x
Z∂Ω
∂ue
= − ϕi · t̂dl,
∂Ω ∂n

na segunda integral do lado esquerdo, resulta

Z µ ¶ Z Z
∂ϕi ∂ue ∂ϕi ∂ue ∂ue
+ dxdy = ϕi h (x, y) dxdy + ϕi · t̂dl,
Ωe ∂x ∂x ∂y ∂y Ωe ∂Ω ∂n
P e
Substituindo ue = uj ϕj nesta expressão obtem-se a matriz e o vetor
e
fonte do elemento Ω .
A matriz do elemento é,

3 ∙ Z
X µ ¶ ¸
∂ϕi ∂ϕj ∂ϕi ∂ϕj
ki + dxdy uei
Ωe ∂x ∂x ∂y ∂y
j=1
3 ∙ Z
X ¸
+ qi ϕi ϕj dxdy uei
j=1 Ωe
Z Z
∂ue
= ϕi h (x, y) dxdy + ϕi · t̂dl,
Ωe ∂Ω ∂n

i = 1, 2, 3, ou simbolicamente,

¡ e e
¢ e
kij + qij ui = hei i, j = 1, 2, 3 (10.11)

sendo
Z µ ¶
e ∂ϕi ∂ϕj ∂ϕi ∂ϕj
kij = ki + dxdy (10.12)
Ωe ∂x ∂x ∂y ∂y
Z
e
qij = qi ϕi ϕj dxdy (10.13)
Ωe

e o vetor fonte,
654 CAPÍTULO 10. ELEMENTOS FINITOS 2D

Z Z
∂ue
hei = ϕi h (x, y) dxdy + ϕi · t̂dl, (10.14)
Ωe ∂Ω ∂n

Substituindo as funções base (10.8) em (10.12) e notando que

∂ϕi ∂ϕi
= bi , = ci · · ·
∂x ∂y

podemos explicitar a matriz kij e do elemente na seguinte forma:

⎛ ⎞
b21 + c21 b1 b2 + c1 c2 b1 b3 + c1 c3
£ e¤ ke ⎜ ⎜ b2 b1 + c2 c1

kij = e ⎝ b22 + c22 b2 b3 + c2 c3 ⎟
⎠ (10.15)
4∆
b3 b1 + c3 c1 b3 b2 + c3 c2 2 2
b3 + c3

Usando a fórmula
Z
α!β!γ!
ϕα1 ϕβ2 ϕγ3 dxdz = 2∆e , (10.16)
Ωe (α + β + γ + 2)!
e toma a forma
a matriz qij
⎛ ⎞
2 1 1
£ e ¤ q e ∆e ⎜ ⎟
qij = ⎜ i 2 1 ⎟ (10.17)
12 ⎝ ⎠
1 1 2

Observe que a primeira integral de ( 10.14), do vetor fonte do elemento,


pode ser aproximada por
Z
ϕi (he1 ϕ1 + he2 ϕ2 + he3 ϕ3 ) dxdy
Ωe

Aplicando a fórmula ( 10.16)


Z
α!β!γ!
ϕα1 ϕβ2 ϕγ3 dxdz = 2∆e , (10.18)
Ωe (α + β + γ + 2)!
o vetor fonte he é reduzido à seguinte forma:
10.1. INTRODUÇÃO 655

⎛ ⎞
2he1 + he2 + he3
⎜ ⎟
∆e ⎜ he + 2he + he ⎟
h =− e ⎜ 1 2 3 ⎟ (10.19)
12 ⎜ ⎟
⎝ e ⎠
h1 + he2 + 2he3

De posse das matrizes [ke ] e dos vetores he , o próximo passo é construir


a matriz global adicionando a contribuição de cada elemento. A Tabela
(10.1) ilustra como é feita a montagem dos três primeiros e do último (28)
elementos na matriz global correspondente a seguinte malha:
1 5 6 2
2.0

3
1 4

27 17
21
13 2
14 17
1.5

19 28
12 7
14 24

25 20

20 13 19
1.0 12 6

16 23

26 11
11 8
21 18

15 16
0.5

18
8 7

15 22

10 5
9

4 10 9 3
0.5 1.0 1.5 2.0

Figura 10.9:

(10.1)
Cada uma das nove componentes da matriz do elemento é posicionada
de acordo com a correlação entre a numeração dos nós do elemento e a
nomeração global dos nós na malha conforme a Tabela (10.2)
A Figura abaixo mostra o perfil da matriz global. Observe que a matriz
é simétrica e esparsa. Estas são propriedades importantes da matriz global.
A seguir apresentamos o código em Mathematica para o cálculo das
matrizes dos elementos e a construção da matriz global.
656 CAPÍTULO 10. ELEMENTOS FINITOS 2D

1 2 5 6 7 13 14 17 21
1 1
k22 1
k21 1
k23
2 2
k22 2
k21 2
k23
5 1
k12 1
k11 3
+ k22 3
k21 1
k13 3
k23
6 3
k12 3
k11 3
k13
7 2
k12 2
k11 2
k13
13 28
k11 28
k12 28
k13
14 1
k32 1
k31 1
k33
17 2
k32 2
k31 28
k21 2 + k 28
k33 28
k23
22
21 3
k32 3
k31 28
k31 28
k32 3 + k 28
k33 33

Tabela 10.1: Montagem dos elemetos 1, 2, 3 e 28 na matriz global.

Elementos Numeração Local Numeração global


1 (1, 2, 3) (5, 1, 14)
2 (1, 2, 3) (7, 2, 17)
3 (1, 2, 3) (6, 5, 21)
4 (1, 2, 3) (2, 6, 17)
5 (1, 2, 3) (9, 3, 16)
.. .. ..
. . .
13 (1, 2, 3) (1, 12, 14)
14 (1, 2, 3) (14, 12, 20)
15 (1, 2, 3) (15, 10, 18)
.. .. ..
. . .
24 (1, 2, 3) (7, 17, 19)
25 (1, 2, 3) (13, 14, 20)
26 (1, 2, 3) (11, 15, 20)
27 (1, 2, 3) (5, 14, 21)
28 (1, 2, 3) (13, 17, 21)

Tabela 10.2: Correspondência entre as numerações local e global do elemento


10.1. INTRODUÇÃO 657

1 5 10 15 21

1 1

5 5

10 10

15 15

21 21

1 5 10 15 21

Figura 10.10:

matG = SparseArray[Flatten[Table[
{{nosE[[k, 1]], nosE[[k, 1]]} -> 0.,
{nosE[[k, 1]], nosE[[k, 2]]} -> 0.,
{nosE[[k, 1]], nosE[[k, 3]]} -> 0.,
{nosE[[k, 2]], nosE[[k, 1]]} -> 0.,
{nosE[[k, 2]], nosE[[k, 2]]} -> 0.,
{nosE[[k, 2]], nosE[[k, 3]]} -> 0.,
{nosE[[k, 3]], nosE[[k, 1]]} -> 0.,
{nosE[[k, 3]], nosE[[k, 2]]} -> 0.,
{nosE[[k, 3]], nosE[[k, 3]]} -> 0.}, {k, nE}]]];
mat211 = {{2., 1., 1.}, {1., 2., 1.}, {1., 1., 2.}};
Do[
bi = elemXY[[k, 2, 2]] - elemXY[[k, 3, 2]];
bj = elemXY[[k, 3, 2]] - elemXY[[k, 1, 2]];
bk = elemXY[[k, 1, 2]] - elemXY[[k, 2, 2]];
ci = elemXY[[k, 3, 1]] - elemXY[[k, 2, 1]];
cj = elemXY[[k, 1, 1]] - elemXY[[k, 3, 1]];
ck = elemXY[[k, 2, 1]] - elemXY[[k, 1, 1]];
areaE =
Det[{{1, elemXY[[k, 1, 1]], elemXY[[k, 1, 2]]}, {1, elemXY[[k, 2, 1]],
658 CAPÍTULO 10. ELEMENTOS FINITOS 2D

elemXY[[k, 2, 2]]}, {1, elemXY[[k, 3, 1]], elemXY[[k, 3, 2]]}}]/2.;


matE = {{bi*bi + ci*ci, bi*bj + ci*cj, bi*bk + ci*ck},
{bj*bi + cj*ci, bj*bj + cj*cj, bj*bk + cj*ck},
{bk*bi + ck*ci, bk*bj + ck*cj, bk*bk + ck*ck}} ;
matE = listfunK[[k]]*matE/(4.*areaE) + listfunQ[[k]]*mat211*areaE/12.;
Do[ii = nosE[[k, i]];
Do[ jj = nosE[[k, j]];
matG[[ii, jj]] = matG[[ii, jj]] + matE[[i, j]] , {j, 3}], {i, 3}],
{k, nE}];
Do mesmo mode, o código do vetor fonte global é dado por:
vecE = {0, 0, 0};
vecG = Table[0, {i, nNos}];
Do[areaE = Det[{{1, elemXY[[k, 1, 1]], elemXY[[k, 1, 2]]},
{1, elemXY[[k, 2, 1]], elemXY[[k, 2, 2]]}, {1, elemXY[[k, 3, 1]],
elemXY[[k, 3, 2]]}}]/2.;
vecE[[1]] = 2*hi[[1]] + hi[[2]] + hi[[3]];
vecE[[2]] = hi[[1]] + 2*hi[[2]] + hi[[3]];
vecE[[3]] = hi[[1]] + hi[[2]] + 2*hi[[3]];
vecE =(areaE/12.)*vecE;
Do[ii = nosE[[k, i]];
vecG[[ii]] = vecG[[ii]] + vecE[[i]], {i, 3}], {k, nE}]

Você também pode gostar