Universidade Federal do Paraná
Programa de Pós-Graduação em Métodos Numéricos em Engenharia
Relatório do 1º Trabalho Computacional
Aluno: Romulo de Aguiar Beninca
link do github : https://rbeninca.github.io/cfd1/
link códigos : https://github.com/rbeninca/cfd1
O presente trabalho tem como objetivo desenvolver uma solução numérica para o problema clássico de difusão de calor unidimensional em regime transiente. O cenário físico consiste em uma placa plana de espessura $L$.
O trabalho foi desenvolido em JavaScript e versionado no github por isso todo o código fonte e arquivos de entrada e saída estão disponíveis para consulta e reprodução dos resultados, no link :https://rbeninca.github.io/cfd1/
Conforme instrução do professor, para a modelagem matemática, partimos da equação diferencial parcial parabólica que governa o fenômeno, assumindo propriedades constantes e ausência de geração interna de calor, conforme estudamos no capítulo 4. Os detalhes do problema, incluindo a equação governante foram dados na Figura 1.
Figura 1: Definição do problema, equação governante e parâmetros físicos.
Em suma, buscamos resolver numericamente a equação:
Para a solução numérica, adotou-se o Método dos Volumes Finitos (MVF). O domínio espacial $[0, L]$ foi particionado em $N$ volumes de controle uniformes de largura $\Delta x$. A integração da equação governante foi realizada tanto no espaço quanto no tempo.
Figura 2: Processo de discretização do domínio e integração da equação.
No que tange à discretização temporal, aplicou-se o Método $\theta$. Para este trabalho, optou-se especificamente pelo esquema de Crank-Nicolson ($\theta = 0.5$).
Figura 3: Desenvolvimento algébrico da equação discretizada para volumes internos.
Um ponto crucial nesta implementação é o tratamento das condições de contorno. A dedução completa para os volumes adjacentes aos contornos (esquerdo e direito) é apresentada na Figura 4.
Figura 4: Dedução dos coeficientes modificados para os volumes de contorno.
A implementação do código foi realizada utilizando a linguagem JavaScript. Para otimizar o cálculo, utilizamos variáveis auxiliares para agrupar os termos do passo de tempo anterior ($n$) que compõem o termo fonte. A tabela abaixo relaciona a matemática deduzida com as variáveis do código JavaScript apresentado na Seção 5:
| Termo / Conceito | Expressão Algébrica (Dedução) | Variável no Código (JS) |
|---|---|---|
| Termo Difusivo (Parte Implícita) |
$$ \theta \frac{\Delta t}{\Delta x} $$ | termo_difusivo = theta * dt / dx |
| Termo de Acúmulo | $$ \frac{\Delta x}{\alpha} $$ | termo_acumulo = dx / alpha |
| Coeficiente Central $a_P$ (Contorno $i=1$) |
$$ a_P = \frac{\Delta x}{\alpha} + 3 \theta \frac{\Delta t}{\Delta x} $$ | aP[0] = 3.0 * termo_difusivo + termo_acumulo |
| Termo Fonte $b_P$ (Contribuição Central Explícita) |
$$ \frac{\Delta x}{\alpha} - 3(1-\theta)\frac{\Delta t}{\Delta x} $$ |
difusivo_explicito = (1.0 - theta) * dt / dx
b1_contorno = termo_acumulo - 3.0 * difusivo_explicito
|
A comparação entre a solução numérica e a analítica para o tempo final configurado.
Evolução da temperatura média da placa em escala logarítmica (eixo Y), demonstrando o decaimento exponencial.
| Vol | Posição $x$ (m) | $T_{analitica}$ (°C) | $T_{numerica}$ (°C) | Erro Absoluto |
|---|
Evolução da temperatura média ao longo do tempo ($t = 0$ até $t = t_F$).
| Tempo (s) | $\overline{T}_{analitica}$ (°C) | $\overline{T}_{numerica}$ (°C) | Erro Absoluto |
|---|
Abaixo apresenta-se o núcleo do algoritmo numérico implementado, que roda no navegador para gerar os resultados acima.
O código foi criado baseando-se no método TDMA para resolver sistemas tridiagonais, e usando com base o código em fortran disponibilizado pelo professor. Devido a natureza da web o arquivo de entrada foi adaptado e apresenado abaixo, similarmente a o arquivo utilizado em fortran como entrada.
O código javascript esta organizado da seguinte forma :
Os dados abaixo são gerados dinamicamente com base nos parâmetros inseridos no painel de simulação.