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