• Nenhum resultado encontrado

No processo de discretização o domínio contínuo é mapeado em uma estrutura com-posta por um número nito de pontos denominada malha [22]. No método dos elementos nitos a malha divide o domínio em elementos geométricos, que podem ter tanto forma de triângulos ou quadriláteros, no plano, quanto tetraedros ou he-xaedros, no espaço. No que se refere à sua conectividade, as malhas podem ser de dois tipos: estruturadas e não estruturadas [35].

Nas malhas estruturadas todos os pontos pertencente ao interior da malha são ad-jacentes ao mesmo número de elementos e é possível identicar os vizinhos de um ponto somando índices, por exemplo, dado o ponto (i,j ) seus vizinhos serão (i,j+1), (i+1,j),(i,j-1)e(i-1,j)[22]. Nas malhas não estruturadas o número de elementos ad-jacentes a um ponto não é constante. Essas malhas fornecem uma melhor modelagem de geometrias complexas e irregulares [60]. A Fig. 4.3 ilustra duas malhas triangu-lares, uma estruturada, Fig. 4.3(a), e a outra não-estruturada, Fig. 4.3(b). Dentre as vantagens do método dos elementos nitos em relação a outros métodos, está sua capacidade de tratar geometrias complexas por meio de malhas não-estruturadas

(a) Malha estruturada (b) Malha não-estruturada

Figura 4.3: Tipos de malhas.

[6, 35]. A geração de malhas tanto estruturadas quanto não-estruturadas pode ser feita através de vários pacotes de domínio público, tais como triangle [59], easyMesh [45], Gid [53], GMSH [25], etc. Uma lista ds principais pacotes da área de geração, particionamento e visualização de malhas pode ser vista em [57].

O easyMesh gera malhas não-estruturadas bidimensionais em domínios genéricos, que podem ter buracos e serem formados por materiais distintos. As malhas po-dem ser visualizadas pelo software showMesh que permite exibir a numeração dos pontos, dos elementos, das fronteiras além de disponibilizar recursos de zoom e ro-tação de malha [22]. Para a geração das malhas é necessário um arquivo de entrada contendo o número de vértices, as coordenadas dos vértices, a precisão do parti-cionamento, a quantidade de segmentos que compõem o domínio e quais vértices formam o segmento. A partir desse arquivo são gerados três outros: o primeiro com as coordenadas dos vértices da malha, o segundo com a conectividade dos triângulos e o terceiro com a vizinhança dos elementos.

A malha desempenha um papel fundamental na precisão da solução. O espaço entre os pontos da malha determina a acurácia com que a solução numérica será obtida, uma vez que esse espaçamento está relacionado ao tamanho do sistema linear [6]. Basicamente, quanto mais pontos a malha tiver, maior será o sistema resultante da discretização e, consequentemente, mais elevado será o tempo de processamento.

Portanto, uma primeira ação a ser tomada visando o processamento paralelo é a di-visão do domínio em subdomínios, os quais serão distribuídos entre os processadores do Cluster.

O particionamento da malha deve levar em conta uma distribuição balanceada entre os processadores, de forma que o número de elementos seja aproximadamente o mesmo em cada processador. Além disso, o número de pontos entre as partições deve ser o menor possível para minimizar a quantidade de comunicação [35]. A Fig. 4.4(a) mostra que a divisão da malha ocorreu de forma balanceada, no entanto há muita comunicação entre as partições. Na Fig. 4.4(b), por sua vez, a comunicação está minimizada, no entanto a distribuição dos elementos não está balanceada. A Fig. 4.4(c) mostra uma divisão balanceada com o mínimo de comunicação.

(a) Carga Balanceada e Muita Comunicação

(b) Carga Desbalanceada e Pouca Comunicação

(c) Carga Balanceada e Pouca Comunicação

Figura 4.4: Exemplos de particionamentos de malha com e sem balanceamento de carga e minimização da comunicação.

Atender as exigência de balanceamento, como ilustrado na Fig. 4.4(a) não exige muito esforço, no entanto, minimizar o número de comunicações mantendo o balan-ceado não é uma tarefa simples. Esse problema pode ser modelado como um pro-blema de particionamento de grafos [7, 39]. Existem várias bibliotecas de domínio público que implementam algoritmos de particionamento de grafos para realizar o

particionamento de malhas, dentre as quais, as mais conhecidas são METIS [31] e Jostle [67]. Nesse trabalho, optou-se pelo METIS.

O software METIS é um conjunto de funções implementadas na linguagem C para realizar o particionamento de malhas, grafos e matrizes. Ele se destaca devido a alta qualidade do particionamento e por tratar tanto malhas estruturadas quanto não-estruturadas. Inicialmente, o programa converte a malha em um grafo, em seguida realiza o particionamento. Existem dois tipos de particionamento, o dual e o nodal. No primeiro, cada elemento da malha torna-se um vértice do gráco que será particionado. No segundo, é o nó da malha que converte-se em vértice do grafo. No particionamento dual, o METIS disponibiliza o software PartMetis que lê o arquivo com as características da malha e gera outro arquivo composto por nel linhas, onde cada linha contém o número do processador que será encarregado pelo elemento, sendo nel o número de elementos da malha. O METIS suporta quatro tipos de elementos, triangular, quadrilátero, tetraedro e hexaedro.

A visualização das malhas particionadas pelo METIS, pode ser feita através do programa PMVIS (Partitioned Mesh Visualizer) [47]. Esse programa possibilita a visualização de malhas bidimencionais e tridimensionais, com recursos de zoom, rotação, etc. A Fig. 4.5(a) exibe um domínio quadrado, discretizado por uma malha de 40×40 células, sendo cada célula dividida em dois elementos, totalizando 3200 elementos triangulares e 1681 nós. Na Fig. 4.5(b) é mostrado o mesmo domínio particionado em 16 subdomínios, onde pode ser observado que o METIS numera as partições próximas com números consecutivos. Isso permite que, na distribuição dos processos em ambientes multi-core, os processos vizinhos quem na mesma máquina, reduzindo o tempo de comunicação via interface de rede, uma vez que, nesse tipo de ambiente, o MPI usa a memória para realizar a troca de mensagens entre os processos.

(a) Malha do domínio. (b) Malha do domínio particionada.

Figura 4.5: Exemplo de particionamento de malhas pelo METIS.

Documentos relacionados