Introdução à Programação Paralela

Propaganda
Programação em Python
Introdução à Programação Paralela
Problemas
Ramiro Brito Willmersdorf
Simulação e Gerenciamento de Reservatórios
Pós Graduação em Engenharia Civil CTG/UFPE
2o Trimestre de 2015
Ramiro Brito Willmersdorf
Introdução à Programação Paralela
Programação em Python
Python
Python
Equação de Poisson
Considerando um problema em regime permanente em duas
dimensões, todas as propriedades físicas constantes e um monte de
simplificações que não vamos discutir, a equação de transferência
pode ser simplificada para
∆u = f ,
ou
∂ 2u ∂ 2u
+
, = f,
∂ x2 ∂ y2
onde u (x ,y ) é a temperatura e f (x ,y ) é um termo fonte.
Ramiro Brito Willmersdorf
Introdução à Programação Paralela
Programação em Python
Python
Python
Diferenças Finitas
Podemos aproximar as derivadas parciais por diferenças finitas:
∂ 2 u ui −1,j − 2ui ,j + ui +1,j
≈
∂ x2
∆x 2
e
∂ 2 u ui ,j −1 − 2ui ,j + ui ,j +1
≈
.
∂ y2
∆y 2
Introduzindo estes termos na EDP podemos resolver para ui ,j
ui ,j =
(ui −1,j + ui +1,j ) ∆y 2 + (ui ,j −1 + ui ,j +1 ) ∆x 2 − ∆x 2 ∆y 2 fi ,j
2 (∆x 2 + ∆y 2 )
Com condições de contorno adequadas podemos iterar esta
expressão até que seja obtida uma solução dentro da precisão
necessária.
Ramiro Brito Willmersdorf
Introdução à Programação Paralela
Programação em Python
Python
Python
Programa
Faça um programa em Python para resolver aproximadamente a
equação de Poisson com o método das diferenças finitas. O programa
deve:
Tratar apenas domínios retangulares.
Ler de um arquivo as dimensões do domínio e o número de
pontos em cada direção.
Ler do mesmo arquivo o termo forçante.
Considerar apenas condições de contorno de temperatura
prescrita nas fronteiras do domínio.
O programa deve ainda poder iterar como:
Jacobi
Gauss-Seidel
Red-Black
Ramiro Brito Willmersdorf
Introdução à Programação Paralela
Programação em Python
Python
Python
Resultados
Aplique o programa para um domínio retangular [0,1] × [0,1],
considerando o termo fonte
f (x ,y ) = 8π 2 sin(2π x ) sin(2π y ).
com a temperatura prescrita como zero em todo o contorno.
Escolha uma malha de densidade adequada, e faça gráficos da taxa
de convergência para cada tipo de iteração.
Faça um gráfico da solução convergida também.
Ramiro Brito Willmersdorf
Introdução à Programação Paralela
Programação em Python
Python
Python
Malha de Elementos Finitos
Um dos métodos mais versáteis para simulação computacional
de problemas de engenharia é o método dos elementos finitos.
Este método usa uma malha, que, para nosso uso simplificado,
um conjunto de elementos planos triangulares que não se
sobrepõe e cobrem totalmente o domínio computacional de
interesse.
Para descrever cada elemento, precisamos das identidades e
das coordenadas dos 3 nós que definem cada elemento.
A estrutura de dados clássica (há inúmeras) para armazenar
malhas usa duas matrizes, a matriz de coordenadas nodais e a
matriz de conectividades.
Ramiro Brito Willmersdorf
Introdução à Programação Paralela
Programação em Python
Python
Python
Exemplo
Exemplo de malha de
elementos finitos típica
gerada com o programa
GMSH.
http://geuz.org/gmsh/
Ramiro Brito Willmersdorf
Introdução à Programação Paralela
Programação em Python
Python
Python
GMSH
O formato ASCII do arquivo de saída do GMSH está documentado
em:
http://geuz.org/gmsh/doc/texinfo/gmsh.pdf
O exemplo mostrado na figura anterior está em:
http://rbw.willmersdorf.net/ramiro/arquivos/
slides/malhaexemplo/at_download/file
Descarreguem estes dois arquivos!
Ramiro Brito Willmersdorf
Introdução à Programação Paralela
Programação em Python
Python
Python
GMSH – Formato ASCII
$MeshFormat
2.2 0 8
$EndMeshFormat
$Nodes
1198
1 0 0 0
2 10 10 0
...
1198 3.658964328700658 0.4048173230800261 0
$EndNodes
$Elements
2510
1 15 2 0 -4 1115
2 15 2 0 -3 858
...
Ramiro Brito Willmersdorf
Introdução à Programação Paralela
Programação em Python
Python
Python
Exercício
Escrever um programa em Python que:
Leia um arquivo do GMSH, apenas os elementos triangulares
planos;
Retorne uma matriz com as coordenadas nodais e uma matriz
com as conectividades nodais;
Identifique o elemento com a maior área e com a menor área na
malha;
Calcule a área total da malha;
Cuidado que os nós e elementos podem não estar numerados
consecutivamente!
Ramiro Brito Willmersdorf
Introdução à Programação Paralela
Download