Escolar Documentos
Profissional Documentos
Cultura Documentos
__________________________________________________________________________
RESUMO
O caso em estudo trata-se de um relatório sobre a taxa de transferência de calor por
convecção em uma placa pana com escoamento cruzado por meio do método de volume de
controle baseado em elementos finitos. Utilizou-se para a solução do caso exposto o software
Matlab. As soluções foram apresentadas sucintamente por meio de tabelas e figuras
explicativas. Ao final será possível enfatizar um pouco mais as vantagens de se utilizar
métodos computacionais para a solução de problemas em que as equações diferenciais
governantes apresentem alta complexidade para ser desenvolvido analiticamente.
1. Introdução
O escoamento cruzado de fluidos é comumente utilizado em equipamentos de
transferência de calor, tais como evaporadores, condensadores, geladeiras e
aparelhos de ar condicionado [1], assim como em aplicações de engenharia onde os
casos mais comuns de utilização são em construções de plataformas offshore de
petróleo, torres e linhas de transmissão de potência e até mesmo em equipamentos
de usinas nucleares [2]. Nestes tipos de aplicações há sempre um fluido que escoa
dentro dos tubos e outro se move sobre eles, em uma direção perpendicular [1].
Existe o tipo de escoamento que ocorre internamente a um tubo e o outro
externamente. No escoamento interno, as características de carga e coeficientes de
transmissão de calor já possuem modelagem analítica e numérica bem desenvolvida
e bastante precisa já o externo é complexo e irregular [2].
Estes escoamentos externos geralmente são direcionados pela ação de placas
defletoras que são responsáveis pelo escoamento cruzado e pelo aumento da taxa de
troca térmica do sistema. A modelagem analítica deste tipo de escoamento é pouco
desenvolvida e altamente dependente de resultados experimentais, já a modelagem
numérica apresenta bons resultados, porém, ainda possui problemas quanto a
1
modelagem de escoamentos turbulentos com geometrias complexas [2]. Assim,
escoamentos internos podem ser analisados considerando o escoamento através de
uma única geometria e depois é possível multiplicar pelo número das existentes. O
que não ocorre com escoamento externos, pois eles afetam o padrão do escoamento
e o nível de turbulência [1].
A troca de calor é alterada de acordo com o aumento da velocidade de
escoamento do fluido, que proporciona melhora no processo de transmissão de calor
[2], e também pela presença de uma subcamada viscosa, que apresenta
características de escoamento laminar [2]. Quando não há uma mistura eficiente do
fluido, a troca de calor se processa apenas por condução, deste modo, o fluxo de
escoamento deve aumentar até ser capaz de atuar na redução da resistência desta
subcamada. Caso isto não ocorra haverá somente o aumento na energia necessária
para movimentar o fluido [2].
2. Base Teórica
̇ ℎ𝐴𝑆 (𝑇𝑆 − 𝑇∞ )
𝑄= (1)
ℎ𝐿𝑐
𝑁𝑢 = (2)
𝑘
2
O número de Nusselt é o aprimoramento da transferência de calor através de
uma camada de fluido como resultado da convenção relativa à condução por meio da
mesma camada de fluido. Sendo assim, quanto maior for o número de Nusselt a
convecção é mais efetiva. O k é a condutividade térmica e Lc é o comprimento
característico.
O contato entre a superfície e o fluido resulta em uma condição de não
escorregamento, ou seja, a velocidade é zero no contato, assim à medida que o
escoamento se desenvolve na placa, o campo de velocidade perde energia devido à
viscosidade dinâmica do fluido. Deste modo, na parte inicial do escoamento tem-se
um escoamento laminar e no seu desenvolvimento ocorre transição para turbulento
[1]. Na Figura 1 o campo de velocidade é chamado de camada limite.
𝜇𝐶𝑝
𝑃𝑟 = (3)
𝑘
3
diferencial ordinária incluindo a variável de similaridade (eq. 4). Blasius incluiu também
uma função ψ(x,y) (eq. 5 e 6) e definiu uma função dependente da variável
adimensional (eq. 7). Depois de derivar as componentes de velocidade e substituir as
mesmas na equação de momento, obteve-se uma equação diferencial não linear de
terceira ordem que pode ser transformada em uma única equação diferencial ordinária
por meio da aplicação da variável adimensional de similaridade [1]. Blasius conseguiu
obter uma aproximação para a equação por expansão de série, já que a mesma não
pode ser resolvida analiticamente.
𝑉
𝜂 = 𝑦√ (4)
𝑣𝑥
𝜕𝜓
𝑣= (5)
𝜕𝑥
𝜕𝜓
𝑢= (6)
𝜕𝑦
𝜓
𝑓(𝜂) = 𝑣𝑥
(7)
𝑉√
𝑉
Assim, este estudo propõe uma solução para um escoamento cruzado sobre
uma placa plana vertical utilizando o método dos volumes finitos baseados em
elementos finitos sistematizados na metodologia implícita, onde as equações
diferenciais são aproximadas pelo sistema de equações algébricas, diferentemente da
solução utilizada por Blasius. Este método não é uma resposta exata da equação de
Navier-Stokes, mas, uma solução aproximada.
4
Figura 2: Placa plana vertical a ser estudada
3. Metodologia
3.1. CVFEM
5
dos valores de ϕ por interpolação linear, onde:
ϕ = 𝐴𝑋 + 𝐵𝑌 + 𝐶 (8)
𝐷 𝐿 = 𝑋2 𝑌3 − 𝑋3 𝑌2 + 𝑋3 𝑌1 − 𝑋1 𝑌3 + 𝑋1 𝑌2 − 𝑋2 𝑌1 (12)
𝑑𝜙𝐿 𝑑𝜙𝐿
𝑑𝑋
= 𝐴𝐿 e 𝑑𝑦
= 𝐵𝐿 (13)
𝑄 ç
∮𝛿𝐴 𝑘 ∇T. ndA = ∫𝑎 𝑘∇T. ndA + ∫𝑜 𝑘∇T. ndA (16)
6
𝜕𝑇 𝜕𝑇
Realizando o produto escalar de ∇T =∇T = 𝜕𝑋 𝑖 + 𝜕𝑌 𝑗 com:
𝑄 𝑑𝑇 𝑑𝑇
∫𝑎 k∇ 𝑇 . 𝑛𝑑𝐴 = 𝑘 𝑑𝑋 𝑌𝑜𝑎 − 𝑘 𝑑𝑋 𝑋𝑜𝑎 (17)
𝑄 𝑘 𝑘 𝑘
∫𝑎 k∇ 𝑇 . 𝑛𝑑𝐴 ≅ 𝐷𝐿 ( 𝑌𝑜𝑎 𝑌32 − 𝑋𝑜𝑎 𝑋23 )𝑇1 + 𝐷𝐿 ( 𝑌𝑜𝑎 𝑌13 − 𝑋𝑜𝑎 𝑋31 )𝑇2 + 𝐷𝐿 ( 𝑌𝑜𝑎 𝑌21 − 𝑋𝑜𝑎 𝑋12 )𝑇3 (19)
𝑄 𝑘 𝑘 𝑘
∫𝑎 k∇ 𝑇 . 𝑛𝑑𝐴 ≅ 𝐷𝐿 ( 𝑌𝑐𝑜 𝑌32 − 𝑋𝑐𝑜 𝑋23 )𝑇1 + 𝐷𝐿 ( 𝑌𝑐𝑜 𝑌13 − 𝑋𝑐𝑜 𝑋31 )𝑇2 + 𝐷𝐿 ( 𝑌𝑐𝑜 𝑌21 − 𝑋𝑐𝑜 𝑋12 )𝑇3 (20)
𝑄 𝑄
∫𝑎 k∇ 𝑇 . 𝑛𝑑𝐴 + ∫𝑎 k∇ 𝑇 . 𝑛𝑑𝐴 = 𝐷11 𝑇1 + 𝐷12 𝑇2 + 𝐷13 𝑇3 (21)
𝑄 𝑄
∫𝑎 k∇ 𝑇 . 𝑛𝑑𝐴 + ∫𝑎 k∇ 𝑇 . 𝑛𝑑𝐴 = 𝐷21 𝑇1 + 𝐷22 𝑇2 + 𝐷23 𝑇3 (22)
𝑄 𝑄
∫𝑎 k∇ 𝑇 . 𝑛𝑑𝐴 + ∫𝑎 k∇ 𝑇 . 𝑛𝑑𝐴 = 𝐷31 𝑇1 + 𝐷32 𝑇2 + 𝐷33 𝑇3 (23)
Baseado nos 𝐷𝑖𝑗 é possível montar a matriz dos coeficientes globais “A”. Desta
forma, um sistema de equações é derivado na forma: 𝐴𝑇 = 𝐵, ao qual A é a matriz dos
coeficientes e B o vetor dos termos independentes.
7
Conforme apresentado, cada equação integral sobre um volume de controle
está associada a uma equação algébrica da seguinte forma:
𝜕𝑇 𝑘
𝜌 𝜕𝑡 = ∇ . (𝑐 ∇ T) (25)
𝑝
𝜕𝑇 𝑇−𝑇 0
∫𝛿𝑉 𝜌 𝜕𝑡 ≅ 𝜌𝛿𝑉𝑖 ∆𝑡
(26)
𝑖
𝑇−𝑇 0
𝜌𝛿𝑉𝑖 ∆𝑡
= 𝑎𝑖 𝑇𝑖 + ∑𝑛𝑏 𝑎𝑛𝑏 𝑇𝑛𝑏 − 𝑏𝑖 = 0 (27)
𝑇−𝑇 0 0 0
𝜌𝛿𝑉𝑖 ∆𝑡
= 𝑎𝑖 𝑇𝑖 + ∑𝑛𝑏 𝑎𝑛𝑏 𝑇 𝑛𝑏 − 𝑏𝑖 = 0 (28)
8
utilizada, assim como condições de contorno de temperatura específica, de fluxo
devido convecção e de fluxo devido à radiação.
A condição de contorno devido convecção é escrita adicionando alguns termos
as equações algébricas de contorno. Neste caso, considerando a taxa convectiva
como 𝑄𝑐𝑜𝑛𝑣 = ℎ𝐴𝑖 (𝑇𝑖 − 𝑇∞ ), para que o balanço de energia seja fechado com a
equação algébrica associado ao contorno deve ser:
𝑇−𝑇0
𝑎𝑖 𝑇𝑖 + ∑𝑛𝑏 𝑎𝑛𝑏 𝑇𝑛𝑏 = 𝑏𝑖 + 𝜌𝛿𝑉𝑖 + ℎ𝐴𝑖 (𝑇𝑖 − 𝑇∞ ) (29)
∆𝑡
𝜌𝛿𝑉𝑖 𝑇0𝑖
(𝑎𝑖 − − ℎ𝐴𝑖 ) 𝑇𝑖 + ∑𝑛𝑏 𝑎𝑛𝑏 𝑇𝑛𝑏 = 𝑏𝑖 − 𝜌𝛿𝑉𝑖 − ℎ𝐴𝑖 𝑇∞ (30)
∆𝑡 ∆𝑡
𝜌𝛿𝑉𝑖
De modo, os termos e ℎ𝐴𝑖 reforçam os termos da diagonal do sistema de
∆𝑡
equações.
Para condição de contorno de radiação, considerando a taxa radiativa é dada
𝐸 −𝐽
como 𝑄𝑟𝑎𝑑 = 1−𝜀𝑏𝑖⁄(𝜀 𝑖𝐴 ) , então para que o balanço de energia seja fechado para a
𝑖 𝑖 𝑖
𝑇𝑖 = 𝑇𝑒𝑠𝑝𝑒𝑐𝑖𝑓𝑖𝑐𝑎𝑑𝑎 (32)
4𝑎 √3
𝑞𝑢𝑎𝑙𝑖𝑡𝑦 = ℎ2 +ℎ2 +ℎ3 (33)
1 2 3
9
Onde “a” é a área e ℎ1 , ℎ2 e ℎ3 os comprimentos dos lados triângulo que
formam a malha. Caso 𝑞𝑢𝑎𝑙𝑖𝑡𝑦 > 0,6 a qualidade da malha é considerada aceitável,
assim como os resultados obtidos com a utilização da mesma.
10
Usando uma abordagem geral, o erro é dado pela diferença entre a solução
exata e a solução aproximada, essa diferença pode ser aferida a um nível local,
elementar e global com variadas soluções. A seguir, a representação matemática do
erro, de forma genérica.
𝑒 = 𝑢 − 𝑢′ (34)
𝑣
𝑟𝑟𝑒𝑓𝑖𝑛𝑜 = 𝑣2 (37)
1
11
O erro espacial em porcentagem é calculado com a seguinte formulação:
𝑆𝑒 −𝑆𝑎
𝐸=( ) 𝑋 100 (39)
𝑆𝑒
4. Resultados
Na segunda parte o número de interações foi elevado para 2000, a malha foi
refinada até duas vezes e obteve-se resultados para os seguintes números de
Reynolds 20, 30, 40, 80 e 100 para realizar o cálculo para vários numeros de Nusselt
globais associados ao Pr de 0,7155.
O código utilizado para a resolução do problema proposto é dividido nas etapas
12
de pré-processamento, processamento e pós processamento para cada Reynolds
analisado. Vale ressaltar que para a geometria em análise para Reynolds altos, acima
de 40, geram regime transiente como nos casos de 80 e 100. Uma malha mais refinada
foi simulada para fins comparativos e didáticos.
13
Figura 5: Malha refinada três vezes
O teste de sensibilidade da malha foi realizado com quatro refinos para gerar
três retas no gráfico, se o Nu é aproximadamente constante para qualquer passo de
tempo, e como o objetivo era regime permanente foi testado apenas para dt=10.
O Nu tende a perder sensibilidade com refino de cada malha, é notório nos
gráficos 7 e 8 que a inclinação das retas diminui, e se realizasse mais refinos, a
inclinação dessas seria cada vez menor até se anular.
Os gráficos das figuras 7 e 8 possibilitam a visualização da convergência de Nu
com o refinamento de malha.
14
Figura 8: Teste de Sesibilidade para Reynolds igual a 30
Figura 9: Campo de pressão com malha refinada uma duas e tres vezes,
respectivamente.
15
O campo de módulo, conforme a figura 10, representa o módulo da velocidade
do escoamento sobre a placa vertical, em que infere-se uma velocidade maior na parte
superior e inferior da placa, devido a influência que a área dos mesmos impõe durante
o fluxo.
Figura 10: Campo do modulo da velocidade com malha refinada uma duas e tres
vezes, respectivamente.
Figura 11: Campo de temperatura com malha refinada uma duas e tres vezes,
respectivamente.
É notório que quanto mais fina a malha, melhor a qualidade da imagem dos
campos. Ou seja, o refino de malha possibilita o aumento da precisão dos dados
obtidos, pois aumenta o número de elementos, mantendo o grau do polinômio
16
interpolador. Conforme o refinamento aumenta, mais tempo e esforço computacional
serão necessários.
Um gráfico de Re x Nu foi gerado no pós processamento, e o valor mais próximo
é quando a malha é refinada apenas uma vez (figura 12).
Figura 12: Gráfico de Re x Nu com malha refinada uma duas e tres vezes,
respectivamente
Figura 13: Campos de pressão com malha refinada uma duas e tres vezes,
respectivamente
17
Figura 14: Campo do módulo da velocidade com malha refinada uma duas e tres
vezes, respectivamente
Figura 15: Campo de temperatura com malha refinada uma duas e tres vezes,
respectivamente
Para dt igual a 10 e malha refinada duas vezes, o Nusselt global está bem
aproximado, como mostra na figura 16.
18
Figura 16: Gráfico de Re x Nu com malha refinada uma duas e tres vezes,
respectivamente
Nas imagens dos campos gerados para esse passo de tempo, tambem não se
alteraram comparadas aos campos com passo de tempo menor.
Figura 17: Campos de pressão com malha refinada uma duas e tres vezes,
respectivamente
Figura 18: Campo de modulo da velocidade com malha refinada uma duas e tres
vezes, respectivamente
19
Figura 19: Campo de temperatura com malha refinada uma duas e tres vezes,
respectivamente
Com dt=15 foi possível obter os melhores resultados para o número de Nusselt,
nos gráficos abaixo nota-se que quanto mais refinada a malha. Por meio da analise
da Figura 16 é possível dizer que os números de Nusselt encontrados estão próximos
aos valores esperados, valores esses representados pela linha gráfica gerada pela
equação empírica para fluxo cruzado em uma placa vertical e pela simulação
numérica. Assim como aparece no terceiro gráfico da figura 20.
Figura 20: Gráfico de Re x Nu com malha refinada uma duas e tres vezes,
respectivamente
20
chegam a regime permanente antes das 2000 interações. Uma relação dos Nusselt
obtidos estão apresentados na Tabela 2 a seguir.
20 1,46 1,71
30 1,68 1,91
40 1,86 2,09
80 2,40 2,59
100 2,60 2,78
21
mais alto, isto ocorre devido à separação de fluxo nas superfícies dos tubos, o que
gera o aumento da transferência de calor com o aumento do número de Reynolds [9].
22
são os principais contribuintes dos números de onda correspondentes a esta distância.
23
𝑸̇ 𝒊 𝑸̇𝒆 h
- 6,6524 W - 6, 6538 W 0,1188 W/°Cm²
5. Conclusão
6. Referências
[4] ÖZISIK, M. N. Transfor Heat Approach a Basic. Editora McGraw-Hill Book Company,
1985. ODEN J. T., DEMKOWICZ L., RACHOWICZ W., WESTERMANN T. A., Toward
a Universal h-p Adaptive Finite Element Strategy, Part 2. A Posteriori Error Estimation,
Comp.Meths. Appl. Mech. Eng., 77, 113-180, 1989.
24
[5] C. H. Marchi and A. F. C. da Silva, “Procedimento para diminuir e estimar erros de
discretização baseado em soluções numéricas coerentes,” in XV Congresso Brasileiro de
Engenharia Mecânica, 1999.
[6] TAVARES, João Manuel. R. S, Introdução ao método dos Elementos Finitos. Feup,
Portugal, maio 1998.
[7] Z UKAUSKAS, A. A. Heat transfer from tubes in crossflow. In: ADVANCES IN HEAT
TRANSFER. Papers, : v. 8, pp. 93-160, 1972.
[9] TOWNSEND, A. A. The structure of turbulent shear flow. 2nd. ed. Cambridge :
University Press, 1976.
[10] KNUDSEN, J. G., KATZ, D. L. Fluid dynamics and heat transfer. Michigan :
University Press, 243 pp., (UMERI, bul. 37), 1958.
7. Apêndices
7.1. Apêndice
[pde_fig,ax]=pdeinit;
pdetool('appl_cb',1);
set(ax,'DataAspectRatio',[1 0.77929197994987476 1]);
set(ax,'PlotBoxAspectRatio',[35 7.69929648241206 1]);
set(ax,'XLimMode','auto');
set(ax,'YLimMode','auto');
set(ax,'XTickMode','auto');
set(ax,'YTickMode','auto');
% Descrição da Geometria:
% retângulo
pderect([0 20 -5 5],'RT');
pderect([4 5 -3 3],'R1');
% combinação de geometrias
set(findobj(get(pde_fig,'Children'),'Tag','PDEEval'),'String','RT-
R1')
% Mesh generation:
setappdata(pde_fig,'Hgrad',1.1);
setappdata(pde_fig,'refinemethod','regular');
setappdata(pde_fig,'jiggle',char('on','mean',''));
setappdata(pde_fig,'MesherVersion','preR2013a');
pdetool('initmesh')
pdetool('refine')%refina a malha uma vez
pdetool('refine')%refina a malha mais uma vez
pdetool('refine')%refina a malha mais uma vez
pdetool('refine')%refina a malha mais uma vez
25
% exportar P, E, T para memória matlab
h=findobj(get(pde_fig,'Children'),'flat','Tag','PDEMeshMenu');
hp=findobj(get(h,'Children'),'flat','Tag','PDEInitMesh');
he=findobj(get(h,'Children'),'flat','Tag','PDERefine');
ht=findobj(get(h,'Children'),'flat','Tag','PDEMeshParam');
P=get(hp,'UserData');
T=get(ht,'UserData'); T(4,:)=[];
E = contornomalhaE(T);
P=P'; E=E'; T=T';
X=P(:,1); Y=P(:,2);
Xb1=X(E(:,1)); Xb2=X(E(:,2)); Xbo=(Xb1+Xb2)/2;
Yb1=Y(E(:,1)); Yb2=Y(E(:,2)); Ybo=(Yb1+Yb2)/2;
E(:,5)=5;
E(Xbo>(max(Xbo)-0.01),5) =1;
E(Xbo<(min(Xbo)+0.01),5) =3;
E(Ybo>(max(Ybo)-0.01),5) =4;
E(Ybo<(min(Ybo)+0.01),5) =2;
26
% if size(P,1)<size(P,2),P=P';for g=1:1,disp('ver dimensão de
P');end;return;end
% if size(T,1)<size(T,2),T=T';for g=1:1,disp('ver dimensão de
T');end;return;end
% if size(E,1)<size(E,2),E=E';for g=1:1,disp('ver dimensão de
E');end;return;end
27
ind2=(1:F_MR(no))+Isum;
PP.Mind(no,ind1)=isrtJMR(ind2);
Isum=ind2(end);
end
PP.Mindb=PP.Mind;
for no=1:length(PP.ivetor)
PP.Mind(no,:)=PP.Mindb(indxjvetor(no),:);
end
PP.Mind(PP.Mind==0)=PP.nel*9+1;
PP.NMMind=(size(PP.Mind,1)*size(PP.Mind,2));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%
[BIVT,IIVT,JIVT]=unique(PP.ivetor);
F_IVT=histc(JIVT,1:max(JIVT));
[BT123,IT123,JT123]=unique(T123);
F_T123=histc(JT123,1:max(JT123));
[T123srt,isrtT123]=sort(JT123);
PP.nvz=ones(PP.nno,max(F_T123))+PP.nel*3;
Isum=0;
for no=1:PP.nno
ind1=(1:F_T123(no));
ind2=(1:F_T123(no))+Isum;
PP.nvz(no,ind1)=isrtT123(ind2);
Isum=ind2(end);
end
PP.nvz(PP.nvz==0)=PP.nel*3+1;
PP.N_nvz=size(PP.nvz,2)*size(PP.nvz,1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PP.Mnos=ones(PP.nno,max(F_IVT))+PP.nno;
Isum=0;
for no=1:PP.nno
ind1=(1:F_IVT(no));
ind2=(1:F_IVT(no))+Isum;
PP.Mnos(no,ind1)=PP.jvetor(ind2);
Isum=ind2(end);
end
PP.Mnos(PP.Mnos==0)=PP.nno+1;
PP.Mviz=PP.Mnos(:,2:end);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PP.MDD=zeros(PP.nno,size(PP.Mnos,2));
Isum=0;
for no=1:PP.nno
ind1=(1:F_IVT(no));
ind2=(1:F_IVT(no))+Isum;
PP.MDD(no,ind1)=ind2;
Isum=ind2(end);
end
PP.iivetor=PP.MDD(:,1);
PP.MDD(PP.MDD==0)=length(PP.ijvetor)+1;
PP.MDD(:,1)=[];
28
%%INI - Elementos que possuem pelo menos um nó no
contorno%%%%%%%%%%%%%%%
[a,b]=find(T==E(1,1)); PP.elecont=a;
for i=E(2:end,1)',
[a,b]=find(T==i);
PP.elecont=union(PP.elecont,a);
end
%%%% FIM - Elementos que possuem pelo menos um nó no contorno
%%%%%%%%
PP.XGao=Xa-Xo; PP.YGao=Ya-Yo;
PP.XGbo=Xb-Xo; PP.YGbo=Yb-Yo;
PP.XGco=Xc-Xo; PP.YGco=Yc-Yo;
PP.Dp=X1.*Y2+X2.*Y3+X3.*Y1-Y1.*X2-Y2.*X3-Y3.*X1;
PP.CAp=zeros(PP.nel,3); PP.CBp=zeros(PP.nel,3);
PP.CAp(:,1)=(Y2-Y3)./PP.Dp; PP.CAp(:,2)=(Y3-Y1)./PP.Dp;
PP.CAp(:,3)=(Y1-Y2)./PP.Dp;
PP.CBp(:,1)=(X3-X2)./PP.Dp; PP.CBp(:,2)=(X1-X3)./PP.Dp;
PP.CBp(:,3)=(X2-X1)./PP.Dp;
%%%%FIM%%%%%%%%%%%%
%%%%FIM%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%Volumes de controle%%%%%%%%%%%%%%%%%%%%%%%%%%
PP.NMnvz=(size(PP.nvz,1)*size(PP.nvz,2));
PP.svc=zeros(PP.nel,3); PP.Ac=zeros(PP.nel,3);
PP.vol=zeros(1,PP.nno); Msvcs=zeros(size(PP.nvz));
PP.svc=[svc1 svc2 svc3]; PP.Ac=[Ac1 Ac2 Ac3];
svcT=[PP.svc(:,1);PP.svc(:,2);PP.svc(:,3)];
svcT(length(T)*3+1)=0;
for i=1:PP.NMnvz
Msvcs(i)=svcT(PP.nvz(i));
end
PP.vol=sum(Msvcs,2);
29
%%%%FIM%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PP.Xb1=PP.X(PP.no_c1); PP.Xb2=PP.X(PP.no_c2);
PP.Yb1=PP.Y(PP.no_c1); PP.Yb2=PP.Y(PP.no_c2);
PP.Xb21=PP.Xb2-PP.Xb1; PP.Yb21=PP.Yb2-PP.Yb1;
PP.dS12=(PP.Xb21.^2+PP.Yb21.^2).^0.5;
PP.ya1=(PP.Yb1+PP.Yb2)/2-PP.Yb1; PP.xa1=(PP.Xb1+PP.Xb2)/2-
PP.Xb1;
PP.y2a=PP.Yb2-(PP.Yb1+PP.Yb2)/2; PP.x2a=PP.Xb2-
(PP.Xb1+PP.Xb2)/2;
%%%%%%%%%%%%%%%%FIM - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Lc=[PP.no_c1;PP.no_c1;PP.no_c2;PP.no_c2];
Cc=[PP.no_c1;PP.no_c2;PP.no_c1;PP.no_c2];
MRc=Lc+(Cc-1)*PP.nno;
PP.Mindc=zeros(length(PP.ivetor),size(PP.nvz,2));
ggc=zeros(length(PP.ivetor),1);
for no=1:length(PP.ivetor)
ii=find(MRc==PP.ijvetor(no));
PP.Mindc(no,1:length(ii))=ii;
ggc(no)=length(ii);
end
PP.Mindc(PP.Mindc==0)=PP.nel*9+1;
PP.Mindc(:,(max(ggc)+1):end)=[];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[PP]=PARAMETRO_MALHAX41(P,E,T);
PF.mi.mix=ones(length(P),1)*2.096e-5; %viscosidade
PF.ro.mix=ones(length(P),1)*0.9994; %massa específica
PF.k.mix=ones(length(P),1)*0.02953; %condutividade térmica
30
PF.cp.mix=ones(length(P),1)*1008; %calor específico a pressão
constante
%%%%Fim - Seleção dos nós dos contornos para aplicação das CCs%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
31
VS.gradPx=zeros(PP.nno,1); %componente grtadiente de pressão x
VS.gradPy=zeros(PP.nno,1); %componente grtadiente de pressão y
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%PROCESSAMENTO DO CÁLCULO%%%%%%%%%%%%%%%%%%%%%%%%
VS.MTemp=zeros(size(VS.Temp(:,1))); Tempototal=0;
tic
for i_ext=i_ext0:i_extF
NuA=Nu(i_ext-1);
[VS]=ATUALIZA_VARIAVEIS(VS);
[VS]=Acoplamento_Pressao_velocidade(VS,PP,PF);
[VS.Temp]=solver_escalar_partes_E(PF.k.mix./PF.cp.mix,VS.UT(:,1)
,VS.VT(:,1),PP,VS.roF,VS.dt,zeros(PP.nno,1),zeros(PP.nno,1),VS.Temp,
PP.N_bc_temp);
[dT_dxi,dT_dyi] = gradiente(VS.Temp(:,1),P,T);
dT_dn=(dT_dxi.*Aglobalx+dT_dyi.*Aglobaly)./Aglobal;
H_L=-PF.k.mix(PP.N_cilindro).*dT_dn(PP.N_cilindro)./(20-140);
H_G=((1./sum(Acilindro)).*sum(H_L.*Acilindro));
Nu(i_ext)=H_G/0.02953;
figure(2);plot(1:i_ext,Nu(1:i_ext),'-k');drawnow;
set(gca,'FontSize',16)
xlabel('$t(s)$','Interpreter','LaTex','FontSize',18)
ylabel('$Nu$','Interpreter','LaTex','FontSize',18)
end
tempo_total__CPU=toc
%%%%%%%%%%%%%%%%%FIM-PROCESSAMENTO DO CÁLCULO%%%%%%%%%%%%%%%%%%%%%%
VS.MTemp=VS.MTemp/Tempototal;
32
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
33
Aglobal=(Aglobalx.^2+Aglobaly.^2).^0.5;
[PP]=MONTA_A(VS.roF(:,1),PF.mi.mix,VS.UT(:,1),VS.VT(:,1),PP);
UN=VS.UT(:,1); VN=VS.VT(:,1);
T1=PP.T1; T2=PP.T2; T3=PP.T3;
Dpp=PP.Dp; Aij=PP.Aij;
MDD=PP.MDD; Mviz=PP.Mviz;
CBp1=PP.CBp(:,1); CBp2=PP.CBp(:,2); CBp3=PP.CBp(:,3);
CAp1=PP.CAp(:,1); CAp2=PP.CAp(:,2); CAp3=PP.CAp(:,3);
y=PP.y; x=PP.x;
ror=PF.ro.mix(T1,1).*0.4167+PF.ro.mix(T2,1).*0.4167+PF.ro.mix(T3,1).
*0.1666;
ros=PF.ro.mix(T1,1).*0.1666+PF.ro.mix(T2,1).*0.4167+PF.ro.mix(T3,1).
*0.4167;
rot=PF.ro.mix(T1,1).*0.4167+PF.ro.mix(T2,1).*0.1666+PF.ro.mix(T3,1).
*0.4167;
%roo2=(ro(T1,2)+ro(T2,2)+ro(T3,2))/3;
% - INI - %%%%alocação
memoria%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
anbUnb=zeros(size(MDD)); anbVnb=zeros(size(MDD));
% - FIM - %%%%alocação de
memoria%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
noscx=setdiff(1:PP.nno,PP.nc_vel_x); noscy=setdiff(1:PP.n
no,PP.nc_vel_y);
nosx2=setdiff(PP.nc_vel_x,find(PP.li_nz==1)); nosy2=setdiff(PP.nc_
vel_y,find(PP.li_nz==1));
%exclusão do elemento
isolado%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
34
% INI - Definição dos termos de
fonte%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SPu_vol=zeros(PP.nno,1); SCu_vol=zeros(PP.nno,1);
SPv_vol=zeros(PP.nno,1); SCv_vol=zeros(PP.nno,1);
M1=PP.vol.*VS.roF(:,1);
M2=PP.vol.*VS.roF(:,2);
aui=Aij(PP.iivetor)+(1/VS.dt)*M1-SPu_vol;
avi=Aij(PP.iivetor)+(1/VS.dt)*M1-SPv_vol;
bui=(1/VS.dt)*M2.*VS.UT(:,2)+SCu_vol;
bvi=(1/VS.dt)*M2.*VS.VT(:,2)+SCv_vol;
dui=PP.vol./aui; dvi=PP.vol./avi;
dui(nosx2)=0; dvi(nosy2)=0;
du1=dui(T1);du2=dui(T2);du3=dui(T3);
dv1=dvi(T1);dv2=dvi(T2);dv3=dvi(T3);
fa1=ror.*(-(du1.*0.4167+du2.*0.4167+du3.*0.1666).*(y(:,2)-
y(:,3))./Dpp);
fa2=ror.*(-(du1.*0.4167+du2.*0.4167+du3.*0.1666).*(y(:,3)-
y(:,1))./Dpp);
fa3=ror.*(-(du1.*0.4167+du2.*0.4167+du3.*0.1666).*(y(:,1)-
y(:,2))./Dpp);
ga1=ror.*(-(dv1.*0.4167+dv2.*0.4167+dv3.*0.1666).*(x(:,3)-
x(:,2))./Dpp);
ga2=ror.*(-(dv1.*0.4167+dv2.*0.4167+dv3.*0.1666).*(x(:,1)-
x(:,3))./Dpp);
ga3=ror.*(-(dv1.*0.4167+dv2.*0.4167+dv3.*0.1666).*(x(:,2)-
x(:,1))./Dpp);
fb1=ros.*(-(du1.*0.1666+du2.*0.4167+du3.*0.4167).*(y(:,2)-
y(:,3))./Dpp);
fb2=ros.*(-(du1.*0.1666+du2.*0.4167+du3.*0.4167).*(y(:,3)-
y(:,1))./Dpp);
fb3=ros.*(-(du1.*0.1666+du2.*0.4167+du3.*0.4167).*(y(:,1)-
y(:,2))./Dpp);
35
gb1=ros.*(-(dv1.*0.1666+dv2.*0.4167+dv3.*0.4167).*(x(:,3)-
x(:,2))./Dpp);
gb2=ros.*(-(dv1.*0.1666+dv2.*0.4167+dv3.*0.4167).*(x(:,1)-
x(:,3))./Dpp);
gb3=ros.*(-(dv1.*0.1666+dv2.*0.4167+dv3.*0.4167).*(x(:,2)-
x(:,1))./Dpp);
fc1=rot.*(-(du1.*0.4167+du2.*0.1666+du3.*0.4167).*(y(:,2)-
y(:,3))./Dpp);
fc2=rot.*(-(du1.*0.4167+du2.*0.1666+du3.*0.4167).*(y(:,3)-
y(:,1))./Dpp);
fc3=rot.*(-(du1.*0.4167+du2.*0.1666+du3.*0.4167).*(y(:,1)-
y(:,2))./Dpp);
gc1=rot.*(-(dv1.*0.4167+dv2.*0.1666+dv3.*0.4167).*(x(:,3)-
x(:,2))./Dpp);
gc2=rot.*(-(dv1.*0.4167+dv2.*0.1666+dv3.*0.4167).*(x(:,1)-
x(:,3))./Dpp);
gc3=rot.*(-(dv1.*0.4167+dv2.*0.1666+dv3.*0.4167).*(x(:,2)-
x(:,1))./Dpp);
Aa1=fa1.*(y(:,4)-y(:,10))-ga1.*(x(:,4)-x(:,10));
Ab1=fb1.*(y(:,5)-y(:,10))-gb1.*(x(:,5)-x(:,10));
Ac1=fc1.*(y(:,6)-y(:,10))-gc1.*(x(:,6)-x(:,10));
Aa2=fa2.*(y(:,4)-y(:,10))-ga2.*(x(:,4)-x(:,10));
Ab2=fb2.*(y(:,5)-y(:,10))-gb2.*(x(:,5)-x(:,10));
Ac2=fc2.*(y(:,6)-y(:,10))-gc2.*(x(:,6)-x(:,10));
Aa3=fa3.*(y(:,4)-y(:,10))-ga3.*(x(:,4)-x(:,10));
Ab3=fb3.*(y(:,5)-y(:,10))-gb3.*(x(:,5)-x(:,10));
Ac3=fc3.*(y(:,6)-y(:,10))-gc3.*(x(:,6)-x(:,10));
Labc=[Cca1;Cca2;Cca3;Cab1;Cab2;Cab3;Cbc1;Cbc2;Cbc3];
Labc(PP.nel*9+1)=0;
MLabc=Labc(PP.Mind);
DDP=sum(MLabc,2)';
N_bcij=ismember(PP.ivetor,PP.nc_press);
N_bcii=ismember(1:PP.nno,PP.nc_press');
DDP(N_bcij==1)=0; %zera as equações do contorno
DDP(PP.iivetor(N_bcii==1))=1;%coloca "1" nos termos da diagonal da
matriz
DD=sparse(PP.ivetor,PP.jvetor,DDP,PP.nno,PP.nno);
% FIM - Montagem Matriz Global: DD
36
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[LPx,UPx,Pxx,Qxx] = lu(DD);
dM_dt=(VS.roF(:,2)-VS.roF(:,1))/VS.dt;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%LOOP INTERNO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
PP_erro=1e-5;
for g=1:500
VS.g=g;
%%%%%%%INI - AVANÇO CAMPO DO VELOCIDADES %%%%%%%%%
UA=UN; VA=VN;
%%%%%%%%% INI - AVANÇO CAMPO DO VELOCIDADES %%%%%%%%%%%%
Aij(length(Aij)+1)=0;
Ui=zeros(PP.nno+1,1); Vi=zeros(PP.nno+1,1);
Ui(1:PP.nno)=UA; Vi(1:PP.nno)=VA;
for i=1:(size(MDD,1)*size(MDD,2))
anbUnb(i)=Aij(MDD(i))*Ui(Mviz(i));
anbVnb(i)=Aij(MDD(i))*Vi(Mviz(i));
end
UN=(sum(-anbUnb,2)+bui-VS.gradPx.*PP.vol)./aui;
VN=(sum(-anbVnb,2)+bvi-VS.gradPy.*PP.vol)./avi;
UN(PP.nc_vel_x)=UA(PP.nc_vel_x);
VN(PP.nc_vel_y)=VA(PP.nc_vel_y);
Ui(1:PP.nno)=UN;
Vi(1:PP.nno)=VN;
Aij(length(Aij)+1)=0;
for i=1:(size(MDD,1)*size(MDD,2))
anbUnb(i)=Aij(MDD(i))*Ui(Mviz(i));
anbVnb(i)=Aij(MDD(i))*Vi(Mviz(i));
end
uc=(sum(-anbUnb,2)+bui)./aui;
vc=(sum(-anbVnb,2)+bvi)./avi;
uc(PP.nc_vel_x)=UA(PP.nc_vel_x);
vc(PP.nc_vel_y)=VA(PP.nc_vel_y);
37
uc1=uc(T1);uc2=uc(T2);uc3=uc(T3);vc1=vc(T1);vc2=vc(T2);vc3=vc(T3
);
U1=1./PP.Uav.*(+uc1.*PP.uo+vc1.*PP.vo);
U2=1./PP.Uav.*(+uc2.*PP.uo+vc2.*PP.vo);
U3=1./PP.Uav.*(+uc3.*PP.uo+vc3.*PP.vo);
V1=1./PP.Uav.*(-uc1.*PP.vo+vc1.*PP.uo);
V2=1./PP.Uav.*(-uc2.*PP.vo+vc2.*PP.uo);
V3=1./PP.Uav.*(-uc3.*PP.vo+vc3.*PP.uo);
ga4=ror.*(0.4167.*V1+0.4167.*V2+0.1666.*V3);
gb4=ros.*(0.1666.*V1+0.4167.*V2+0.4167.*V3);
gc4=rot.*(0.4167.*V1+0.1666.*V2+0.4167.*V3);
Aa4=fa4.*(y(:,4)-y(:,10))-ga4.*(x(:,4)-x(:,10));
Ab4=fb4.*(y(:,5)-y(:,10))-gb4.*(x(:,5)-x(:,10));
Ac4=fc4.*(y(:,6)-y(:,10))-gc4.*(x(:,6)-x(:,10));
Cca4=Ac4-Aa4;
Cab4=Aa4-Ab4;
Cbc4=Ab4-Ac4;
%DIVERGENTE:
dvrg=zeros(PP.nno,1);
for i=1:PP.nel;
dvrg(T1(i))=Cca4(i)+dvrg(T1(i));
dvrg(T2(i))=Cab4(i)+dvrg(T2(i));
dvrg(T3(i))=Cbc4(i)+dvrg(T3(i));
end
dvrg(PP.nc_press,1)=0;
VS.Prs=Qxx*(UPx\(LPx\(Pxx*B_P)));
38
%FIM - CALCULO DOS GRADIENTES DE PRESSÃO
%%%%%%%%%%%%%%%%%%%%FIM%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% LOOP interno
%%%FIM%%%%%%%%%
N_bcij=ismember(PP.ivetor,N_bc);
N_bcii=ismember(1:PP.nno,N_bc');
PP.alfaU=ones(PP.nno,1)*0.5;
PP.alfaN=ones(PP.nel,1)*0.5;
%processamento%
M1=roF(:,1).*PP.vol;
M2=roF(:,2).*PP.vol;
%processamento%
[PP]=MONTA_A(roF(:,1),gm,U,V,PP);
Aij=PP.Aij; Aii=Aij(PP.iivetor);
%processamento%
Aij(PP.iivetor)=Aii+(1/dt)*M1-SP_vol;
Aij(N_bcij==1)=0; Aij(PP.iivetor(N_bcii==1))=1;
AMij=sparse(PP.ivetor,PP.jvetor,Aij,PP.nno,PP.nno);
%processamento%
B_M=(1/dt)*M2.*FI(:,2)+SC_vol;
B_M(N_bc)=FI(N_bc,1);
%processamento%
FI(:,1)=AMij\B_M;
%processamento%
39
APÊNDICE H - CÓDIGO PARA MONTAR A MATRIZ A
function [PP]=MONTA_A(rof,gmp,U,V,PP)
% Rotina escrita pelo professor Fábio Alfaia da Cunha, contato:
fabioalfaia@unb.br
% Para uso na disciplina Transferência de Calor, da Universidade de
Brasília.
%alocando memoria e forma das matrizes%
Up=zeros(PP.nel,10); Vp=zeros(PP.nel,10);
x=zeros(PP.nel,10); y=zeros(PP.nel,10);
Ec=zeros(PP.nel,10);
fac1=zeros(PP.nel,10); fac2=zeros(PP.nel,10);
fac3=zeros(PP.nel,10);
gac1=zeros(PP.nel,10); gac2=zeros(PP.nel,10);
gac3=zeros(PP.nel,10);
NF1=zeros(PP.nel,10); NF2=zeros(PP.nel,10);
NF3=zeros(PP.nel,10);
NL1=zeros(PP.nel,10); NL2=zeros(PP.nel,10);
NL3=zeros(PP.nel,10);
%%%%%%%%%%%%%%%%%%%%%%%INICIO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ro1=rof(T1); ro2=rof(T2); ro3=rof(T3);
gm1=gmp(T1); gm2=gmp(T2); gm3=gmp(T3);
UT1=U(T1); UT2=U(T2); UT3=U(T3);
VT1=V(T1); VT2=V(T2); VT3=V(T3);
roT=(ro1+ro2+ro3)/3; gmT=(gm1+gm2+gm3)/3;
uo=(UT1+UT2+UT3)/3; vo=(VT1+VT2+VT3)/3;
Uav=(uo.^2+vo.^2).^0.5; i=Uav<1e-10;
uo(i)=1e-10; vo(i)=0; Uav(i)=uo(i);
xo=XG(:,10); yo=YG(:,10);
%%%%%%%%%%%%%%%%%%%%%%%%%FIM%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:10
x(:,i)=1./Uav.*(+(XG(:,i)-xo).*uo+(YG(:,i)-yo).*vo);
y(:,i)=1./Uav.*(-(XG(:,i)-xo).*vo+(YG(:,i)-yo).*uo);
end
%%%%% - INI - velocidades locais%%%%%%%%%%%%%
U1=1./Uav.*(+UT1.*uo+VT1.*vo);
U2=1./Uav.*(+UT2.*uo+VT2.*vo);
U3=1./Uav.*(+UT3.*uo+VT3.*vo);
V1=1./Uav.*(-UT1.*vo+VT1.*uo);
V2=1./Uav.*(-UT2.*vo+VT2.*uo);
V3=1./Uav.*(-UT3.*vo+VT3.*uo);
%%%%% - FIM - velocidades locais%%%%%%%%%%%%%
40
Aret=(xmax-xmin).*(ymax-ymin);
Upe=Uav.*(Dp/2)./Aret;
Pe=roT.*Upe.*(xmax-xmin)./gmT;
%%%%% - FIM - Calculo do Numero de Peclet%%%%%%%
DEXP=Ec(:,1).*y(:,2)+Ec(:,2).*y(:,3)+Ec(:,3).*y(:,1)-
(Ec(:,2).*y(:,1)+Ec(:,3).*y(:,2)+Ec(:,1).*y(:,3));
for i=4:10
NF1(:,i)=(y23.*Ec(:,i)+Ec32.*y(:,i)+(Ec(:,2).*y(:,3)-
Ec(:,3).*y(:,2)))./DEXP;
NF2(:,i)=(y31.*Ec(:,i)+Ec13.*y(:,i)+(Ec(:,3).*y(:,1)-
Ec(:,1).*y(:,3)))./DEXP;
NF3(:,i)=(y12.*Ec(:,i)+Ec21.*y(:,i)+(Ec(:,1).*y(:,2)-
Ec(:,2).*y(:,1)))./DEXP;
NL1(:,i)=(y23.*x(:,i)+x32.*y(:,i)+(x(:,2).*y(:,3)-
x(:,3).*y(:,2)))./Dp;
NL2(:,i)=(y31.*x(:,i)+x13.*y(:,i)+(x(:,3).*y(:,1)-
x(:,1).*y(:,3)))./Dp;
NL3(:,i)=(y12.*x(:,i)+x21.*y(:,i)+(x(:,1).*y(:,2)-
x(:,2).*y(:,1)))./Dp;
end
for i=4:10
Up(:,i)=NL1(:,i).*U1+NL2(:,i).*U2+NL3(:,i).*U3;
Vp(:,i)=NL1(:,i).*V1+NL2(:,i).*V2+NL3(:,i).*V3;
fac1(:,i)=Up(:,i).*NF1(:,i);
fac2(:,i)=Up(:,i).*NF2(:,i);
fac3(:,i)=Up(:,i).*NF3(:,i);
gac1(:,i)=Vp(:,i).*NF1(:,i);
gac2(:,i)=Vp(:,i).*NF2(:,i);
gac3(:,i)=Vp(:,i).*NF3(:,i);
end
ro_a=ro1.*NL1(:,4)+ro2.*NL2(:,4)+ro3.*NL3(:,4);
ro_b=ro1.*NL1(:,5)+ro2.*NL2(:,5)+ro3.*NL3(:,5);
ro_c=ro1.*NL1(:,6)+ro2.*NL2(:,6)+ro3.*NL3(:,6);
ro_r=ro1.*NL1(:,7)+ro2.*NL2(:,7)+ro3.*NL3(:,7);
ro_s=ro1.*NL1(:,8)+ro2.*NL2(:,8)+ro3.*NL3(:,8);
ro_t=ro1.*NL1(:,9)+ro2.*NL2(:,9)+ro3.*NL3(:,9);
ro_o=ro1.*NL1(:,10)+ro2.*NL2(:,10)+ro3.*NL3(:,10);
gm_r=NL1(:,7).*gm1+NL2(:,7).*gm2+NL3(:,7).*gm3;
gm_s=NL1(:,8).*gm1+NL2(:,8).*gm2+NL3(:,8).*gm3;
gm_t=NL1(:,9).*gm1+NL2(:,9).*gm2+NL3(:,9).*gm3;
41
fa1=1/6*(ro_o.*fac1(:,10)+4*ro_r.*fac1(:,7)+ro_a.*fac1(:,4));
fa2=1/6*(ro_o.*fac2(:,10)+4*ro_r.*fac2(:,7)+ro_a.*fac2(:,4));
fa3=1/6*(ro_o.*fac3(:,10)+4*ro_r.*fac3(:,7)+ro_a.*fac3(:,4));
ga1=1/6*(ro_o.*gac1(:,10)+4*ro_r.*gac1(:,7)+ro_a.*gac1(:,4));
ga2=1/6*(ro_o.*gac2(:,10)+4*ro_r.*gac2(:,7)+ro_a.*gac2(:,4));
ga3=1/6*(ro_o.*gac3(:,10)+4*ro_r.*gac3(:,7)+ro_a.*gac3(:,4));
fb1=1/6*(ro_o.*fac1(:,10)+4*ro_s.*fac1(:,8)+ro_b.*fac1(:,5));
fb2=1/6*(ro_o.*fac2(:,10)+4*ro_s.*fac2(:,8)+ro_b.*fac2(:,5));
fb3=1/6*(ro_o.*fac3(:,10)+4*ro_s.*fac3(:,8)+ro_b.*fac3(:,5));
gb1=1/6*(ro_o.*gac1(:,10)+4*ro_s.*gac1(:,8)+ro_b.*gac1(:,5));
gb2=1/6*(ro_o.*gac2(:,10)+4*ro_s.*gac2(:,8)+ro_b.*gac2(:,5));
gb3=1/6*(ro_o.*gac3(:,10)+4*ro_s.*gac3(:,8)+ro_b.*gac3(:,5));
fc1=1/6*(ro_o.*fac1(:,10)+4*ro_t.*fac1(:,9)+ro_c.*fac1(:,6));
fc2=1/6*(ro_o.*fac2(:,10)+4*ro_t.*fac2(:,9)+ro_c.*fac2(:,6));
fc3=1/6*(ro_o.*fac3(:,10)+4*ro_t.*fac3(:,9)+ro_c.*fac3(:,6));
gc1=1/6*(ro_o.*gac1(:,10)+4*ro_t.*gac1(:,9)+ro_c.*gac1(:,6));
gc2=1/6*(ro_o.*gac2(:,10)+4*ro_t.*gac2(:,9)+ro_c.*gac2(:,6));
gc3=1/6*(ro_o.*gac3(:,10)+4*ro_t.*gac3(:,9)+ro_c.*gac3(:,6));
Aa1=(y(:,4).*fa1-x(:,4).*ga1)+(gm_r)./Dp.*(y(:,4).*(-y23)-x(:,4).*(-
x32));
Aa2=(y(:,4).*fa2-x(:,4).*ga2)+(gm_r)./Dp.*(y(:,4).*(-y31)-x(:,4).*(-
x13));
Aa3=(y(:,4).*fa3-x(:,4).*ga3)+(gm_r)./Dp.*(y(:,4).*(-y12)-x(:,4).*(-
x21));
Ab1=(y(:,5).*fb1-x(:,5).*gb1)+(gm_s)./Dp.*(y(:,5).*(-y23)-x(:,5).*(-
x32));
Ab2=(y(:,5).*fb2-x(:,5).*gb2)+(gm_s)./Dp.*(y(:,5).*(-y31)-x(:,5).*(-
x13));
Ab3=(y(:,5).*fb3-x(:,5).*gb3)+(gm_s)./Dp.*(y(:,5).*(-y12)-x(:,5).*(-
x21));
Ac1=(y(:,6).*fc1-x(:,6).*gc1)+(gm_t)./Dp.*(y(:,6).*(-y23)-x(:,6).*(-
x32));
Ac2=(y(:,6).*fc2-x(:,6).*gc2)+(gm_t)./Dp.*(y(:,6).*(-y31)-x(:,6).*(-
x13));
Ac3=(y(:,6).*fc3-x(:,6).*gc3)+(gm_t)./Dp.*(y(:,6).*(-y12)-x(:,6).*(-
x21));
42
rom=0.75*rof(PP.no_c1)+0.25*rof(PP.no_c2);
ron=0.25*rof(PP.no_c1)+0.75*rof(PP.no_c2);
um=U(PP.no_c1).*0.75+U(PP.no_c2).*0.25;
vm=V(PP.no_c1).*0.75+V(PP.no_c2).*0.25;
un=U(PP.no_c1).*0.25+U(PP.no_c2).*0.75;
vn=V(PP.no_c1).*0.25+V(PP.no_c2).*0.75;
massa1=zeros(PP.nno,1); massa1(PP.no_c1)=rom.*(PP.ya1.*um-
PP.xa1.*vm);
massa2=zeros(PP.nno,1); massa2(PP.no_c2)=ron.*(PP.y2a.*un-
PP.x2a.*vn);
m11=0.75*massa1(PP.no_c1);
m12=0.25*massa1(PP.no_c1);
m21=0.25*massa2(PP.no_c2);
m22=0.75*massa2(PP.no_c2);
Lmcc=[m11;m12;m21;m22];
Lmcc(PP.nel*9+1)=0;
MLmcc=zeros(size(Mindc));
for i=1:size(Mindc,2),MLmcc(:,i)=Lmcc(Mindc(:,i));end
Aij_cc=sum(MLmcc,2);
PP.massa=(massa1+massa2);
PP.Aij=Aij_in+Aij_cc;
PP.Uav=Uav; PP.uo=uo; PP.vo=vo;
PP.x=x; PP.y=y;
if size(P,1)>size(P,2),P=P';end
if size(T,1)>size(T,2),T=T';end
%coordenadas
X=P(1,:); Y=P(2,:);
%matriz de conectividade
T1=T(1,:); T2=T(2,:); T3=T(3,:);
%coordenadas dos três elementos de cada elemento
X1=X(T1); X2=X(T2); X3=X(T3);
Y1=Y(T1); Y2=Y(T2); Y3=Y(T3);
%Temperaturas dos três elementos de cada elemento
Temp1=Temp(T1)'; Temp2=Temp(T2)'; Temp3=Temp(T3)';
43
%Determinante baseado nas coordenadas dos três nós dos elementos
D=X2.*Y3-X3.*Y2+X3.*Y1-X1.*Y3+X1.*Y2-X2.*Y1;
%Área de uma elemento
Atri=D/2;
%Sub-áreas associadas a cada nó do elemento.
Atri1=Atri/3;
Atri2=Atri/3;
Atri3=Atri/3;
%Cálculo da das áreas associadas aos nós com base nas áreas do
elementos.
A_i=zeros(length(P),1);
for i=1:length(T)
A_i(T(1,i))=Atri1(i)+A_i(T(1,i));
A_i(T(2,i))=Atri2(i)+A_i(T(2,i));
A_i(T(3,i))=Atri3(i)+A_i(T(3,i));
end
%Cálculo das derivadas nos nós, com base nas derivadas dos elementos
dT_dxA=zeros(length(P),1);
dT_dyA=zeros(length(P),1);
for i=1:length(T)
dT_dxA(T(1,i))=Atri1(i)*dT_dx(i)+dT_dxA(T(1,i));
dT_dxA(T(2,i))=Atri2(i)*dT_dx(i)+dT_dxA(T(2,i));
dT_dxA(T(3,i))=Atri3(i)*dT_dx(i)+dT_dxA(T(3,i));
dT_dyA(T(1,i))=Atri1(i)*dT_dy(i)+dT_dyA(T(1,i));
dT_dyA(T(2,i))=Atri2(i)*dT_dy(i)+dT_dyA(T(2,i));
dT_dyA(T(3,i))=Atri3(i)*dT_dy(i)+dT_dyA(T(3,i));
end
dT_dxi=dT_dxA./A_i;
dT_dyi=dT_dyA./A_i;
function [fi_i]=ele2no(fie,PP,ie)
if nargin<3,ie=PP.iet;end
fie=fie(:);
Mfie=zeros(size(PP.nvz));
Mv=zeros(size(PP.nvz));
svc1=zeros(PP.nel,1); svc2=zeros(PP.nel,1);
svc3=zeros(PP.nel,1);
svc1(ie)=PP.svc(ie,1); svc2(ie)=PP.svc(ie,2);
svc3(ie)=PP.svc(ie,3);
44
fieT=[(fie.*svc1)' (fie.*svc2)' (fie.*svc3)']'; fieT(PP.nel*3+1)=0;
fieV=[svc1' svc2' svc3']'; fieV(PP.nel*3+1)=0;
for i=1:PP.NMnvz,
Mfie(i)=fieT(PP.nvz(i));
Mv(i)=fieV(PP.nvz(i));
end
sumMv=sum(Mv,2);
fi_i=sum(Mfie,2)./sumMv;
fi_i(sumMv==0)=0;
figure(1);
trisurf(PP.T,PP.X,PP.Y,(VS.UT(:,1).^2+VS.VT(:,1).^2).^0.5);view(0,90
),shading interp,colorbar;axis equal;colormap jet;title('Campo de
modulo(U)');drawnow;%axis([-2 6 -4 4]);
print(gcf,'figura_01.png','-dpng');
figure(2);
trisurf(PP.T,PP.X,PP.Y,VS.Temp(:,1));view(0,90),shading
interp,colorbar;axis equal;;colormap jet;title('$$ Campo \ de \
Temperatura $$','Interpreter','latex');drawnow;
print(gcf,'figura_02.png','-dpng');
figure(3);
quiver(P(:,1),P(:,2),VS.UT(:,1),VS.VT(:,1),.5),axis equal;title('$$
Campo \ de \ |\vec{U} | $$','Interpreter','latex');drawnow;
print -dmeta figura_03.emf
figure(4);
trisurf(PP.T,PP.X,PP.Y,VS.Prs);view(0,90),shading
interp,colorbar;colormap jet;axis equal;title('Campo de
pressão');drawnow;
print(gcf,'figura_04.png','-dpng');
%%%%%%coordenadas de coleta:
xi=linspace(0.5,5,10000); %
yi=zeros(size(xi));
%%%%%Obtenção dos valores de "Uav" para as coordenadas dadas acima:
Uav=VS.UT(:,1);%(VS.UT(:,1).^2+VS.VT(:,1).^2).^0.5;
Uavi=griddata(P(:,1),P(:,2),Uav,xi,yi,'cubic');
45
%Cálculo dos gradiente associados a todos os nós do domínio
[dT_dxi,dT_dyi] = gradiente(VS.MTemp(:,1),P,T);
% [dT_dxi,dT_dyi] = gradiente(VS.Temp(:,1),P,T);
%Cálculo das áreas associadas aos nós do contorno de interesse:
[Aglobal,Aglobalx,Aglobaly] = area_contorno(P,E,5);% O contorno "5"
é o de interesse.
%cálculo da derivada normal
dT_dn=(dT_dxi.*Aglobalx+dT_dyi.*Aglobaly)./Aglobal;
% Lembrando que PP.N_cilindro=>nós no cilindro
% cálculo de H local
T_inf=140;
H_L=-
PF.k.mix(PP.N_cilindro).*dT_dn(PP.N_cilindro)./(VS.MTemp(PP.N_cilind
ro,1)-T_inf);
%calculo de H_G, coeficiente convectivo global
Acilindro=Aglobal(PP.N_cilindro);
H_G=(1./sum(Acilindro)).*sum(H_L.*Acilindro);
k_g=0.02953;
D=1;
Nu_G=D*H_G/k_g
Re_G=30;
figure(1)
plot(120,5.1,'s',Re_G,Nu_G,'vb',Re,Nu,'-
k','LineWidth',1.0,'MarkerSize',10),hold on
xlabel('Re'),ylabel('Nu')
46