Ajude a manter o site livre, gratuito e sem propagandas. Colabore!
Em revisão
Nesta seção, vamos construir um código MPI para a resolução da equação do calor pelo método das diferenças finitas. Como um caso teste, vamos considerar a equação do calor
(3.15) |
com condições de contorno
(3.16) |
e condições iniciais
(3.17) |
onde, .
Seguindo o método de Rothe33endnote: 3Erich Hans Rothe, 1895 - 1988, matemático alemão. Fonte: Wikipédia.44endnote: 4Também chamado de método das linhas., vamos começar pela discretização no tempo. Para tanto, vamos usar a notação , , onde é o passo no tempo e o número total de iterações no tempo. Usando o método de Euler55endnote: 5Leonhard Paul Euler, 1707 - 1783, matemático suíço. Fonte: Wikipédia., a equação (3.15) é aproximada por
(3.18) |
onde , dada pela condição inicial (3.17).
Agora, vamos denotar , , onde é o tamanho da malha (passo espacial). Então, usando a aproximação por diferenças finitas centrais de ordem 2, obtemos
(3.19) |
para , observando que, das condições de contorno (3.16), temos
(3.20) |
Em síntese, denotando , temos que uma aproximação da solução do problema de calor acima pode ser calculada pela seguinte iteração
(3.21) |
com e .
Para construirmos um código MPI, vamos fazer a distribuição do processamento pela malha espacial entre os processos disponíveis. Mais precisamente, cada processo , computará a solução nos ponto de malha , onde
(3.22) | |||
(3.23) |
com . Ainda, por simplicidade e economia de memória computacional, vamos remover o superíndice, denotando por a solução na iteração corrente e por a solução na iteração anterior.
Neste caso, a cada iteração , o processo , irá computar
(3.24) |
para , com as condições de contorno
(3.25) | |||
(3.26) |
Ou seja, este passo requer a comunicação entre o processo 0 e o processo 1.
Os processos irão computar
(3.27) |
para , com as condições de contorno
(3.28) | |||
(3.29) |
Logo, este passo requer a comunicação entre os processos , e .
Ainda, o processo deve computar
(3.30) |
para , com as condições de contorno
(3.31) | |||
(3.32) |
O que requer a comunicação entre os processos e o .
O código abaixo calor.cc
é uma implementação MPI deste algoritmo. Cada processo aloca e computa a solução em apenas um pedaço da malha, conforme descrito acima. As comunicações entre os processos ocorrem apenas nas linhas 60-80. Verifique!
No código acima, as comunicações entre os processos foram implementadas de forma cíclica. A primeira a ocorrer é o envio de do processo zero (linhas 61-62) e o recebimento de pelo processo 1 (linhas 67-69). Enquanto essa comunicação não for completada, todos os processos estarão aguardando, sincronizados nas linhas 67-69 e 79-81. Ocorrida a comunicação entre os processos 0 e 1, ocorrerá a comunicação entre o 1 e o 2, entre o 2 e o 3 e assim por diante, de forma cíclica (linhas 67-71 e 79-81).
As últimas comunicações também ocorrem de forma cíclica, começando pelo envio de pelo processo (linhas 81-83) e o recebimento de pelo processo (linhas 73-75). Em sequência, ocorrem as comunicações entre o processo e o processo , entre o e o , até o término das comunicações entre o processo 1 (linhas 76-77) e o processo 0 (linhas 63-65).
Em revisão
O problema (3.15)-(3.17) tem solução analítica
(3.33) |
Modifique o código calor.cc
acima, de forma que a acada iteração no tempo, seja impresso na tela o valor de computado e o valor da solução analítica . Faça refinamentos nas malhas temporal e espacial, até conseguir uma aproximação com três dígitos significativos corretos.
Modifique o código calor.cc
acima, de forma que a cada iteração no tempo, seja impresso na tela o valor do funcional
(3.34) |
Valide os resultados por comparação com a solução analítica (veja o Exercício (3.5.1)).
Modifique o código calor.cc
acima, de forma que as comunicações iniciem-se entre os processos e . Ou seja, que a primeira comunicação seja o envio de pelo processo e o recebimento de pelo processo . E que, de forma cíclica, as demais comunicações ocorram. Poderia haver alguma vantagem em fazer esta modificação?
Faça um código MPI para computar uma aproximação da solução de
(3.35) |
com condições de contorno periódicas
(3.36) |
e condições iniciais
(3.37) |
onde, .
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a Política de Uso de Dados para mais informações. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!