rodrigo de souza lima espinha suporte topológico em

122
Rodrigo de Souza Lima Espinha Suporte topológico em paralelo para malhas de elementos finitos em análises dinâmicas de fratura e fragmentação Tese de Doutorado Tese apresentada ao Programa de Pós-graduação em Informática do Departamento de Informática da PUC-Rio como requisito parcial para obtenção do título de Doutor em Informática. Orientador: Prof. Waldemar Celes Filho Rio de Janeiro Abril de 2011 PUC-Rio - Certificação Digital Nº 0711313/CA

Upload: others

Post on 17-Mar-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Rodrigo de Souza Lima Espinha

Suporte topológico em paralelo para malhas de elementos

finitos em análises dinâmicas de fratura e fragmentação

Tese de Doutorado

Tese apresentada ao Programa de Pós-graduação em Informática do Departamento de Informática da PUC-Rio como requisito parcial para obtenção do título de Doutor em Informática.

Orientador: Prof. Waldemar Celes Filho

Rio de Janeiro

Abril de 2011

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

Rodrigo de Souza Lima Espinha

Suporte topológico em paralelo para malhas de elementos

finitos em análises dinâmicas de fratura e fragmentação

Tese apresentada como requisito parcial para obtenção do título de Doutor pelo Programa de Pós-graduação em Informática da PUC-Rio. Aprovada pela Comissão Examinadora abaixo assinada.

Prof. Waldemar Celes Filho Orientador

Departamento de Informática - PUC-Rio

Prof. Marcelo Gattass Departamento de Informática - PUC-Rio

Profa. Noemi Rodriguez Departamento de Informática - PUC-Rio

Prof. Glaucio H. Paulino University of Illinois at Urbana-Champaign, USA

Prof. Ricardo Farias Universidade Federal do Rio de Janeiro (UFRJ)

Prof. Luiz Fernando Martha Departamento de Engenharia Civil - PUC-Rio

Prof. José Eugênio Leal Coordenador(a) Setorial do Centro Técnico Científico - PUC-Rio

Rio de Janeiro, 05 de abril de 2011

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

Todos os direitos reservados. É proibida a reprodução total ou parcial do trabalho sem autorização do autor, do orientador e da universidade.

Rodrigo de Souza Lima Espinha

Possui graduação em Engenharia de Computação e mestrado em Informática pela Pontifícia Universidade Católica do Rio de Janeiro (PUC-Rio), onde continuou seus estudos no programa de Doutorado em Informática. Durante a permanência nesta instituição, atuou em projetos voltados à indústria do petróleo, no laboratório de Computação Gráfica – Tecgraf/PUC-Rio.

Ficha Catalográfica

Espinha, Rodrigo de Souza Lima

Suporte topológico em paralelo para malhas de elementos finitos em análises dinâmicas de fratura e fragmentação / Rodrigo de Souza Lima Espinha; orientador: Waldemar Celes Filho. – 2011.

122 f.: il. (color.) ; 30 cm

Tese (doutorado) – Pontifícia Universidade Católica do Rio de Janeiro, Departamento de Informática, 2011.

Inclui bibliografia

1. Informática – Teses. 2. Modelo de zona coesiva extrínseco. 3. Elemento coesivo. 4. Estrutura de dados topológica. 5. Malha adaptativa. 6. Simulação paralela de fratura. 7. Fragmentação. I. Celes Filho, Waldemar. II. Pontifícia Universidade Católica do Rio de Janeiro. Departamento de Informática. III. Título.

CDD: 004

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

À minha família.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

Agradecimentos

A Deus, pois sem Ele nada teria sido possível.

A meus pais e esposa, Herisangela, pelo incentivo em todos os momentos.

Ao meu orientador, Prof. Waldemar Celes, pelo grande apoio, motivação e o

conhecimento que me foi transmitido ao longo do curso.

Ao Prof. Glaucio Paulino, pela oportunidade única de ter convivido e aprendido

muito com pessoas brilhantes durante o tempo que passei com seu grupo de

pesquisa na Universidade de Illinois, e por todo o suporte recebido ao longo

daquele período.

A Kyoungsoo Park, pelo apoio fundamental com as simulações numéricas de

fraturas, pela paciência e amizade de uma grande pessoa como ele.

Ao laboratórioTecgraf/PUC-Rio, pela oportunidade de aprender todos os dias e

de encontrar novos desafios a serem resolvidos.

A todos os colegas e amigos da PUC-Rio.

O presente trabalho foi realizado com apoio do CNPq, Conselho Nacional de

Desenvolvimento Científico e Tecnológico - Brasil

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

Resumo

Espinha, Rodrigo de Souza Lima; Celes Filho, Waldemar. Suporte topológico em paralelo para malhas de elementos finitos em análises dinâmicas de fratura e fragmentação. Rio de Janeiro, 2011. 122p. Tese de Doutorado - Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro.

Fenômenos de propagação de fraturas e fragmentação em sólidos podem

ser descritos por Modelos de Zona Coesiva e simulados com o Método dos

Elementos Finitos. Entre as abordagens computacionais de recente interesse

para a representação de fraturas em malhas de elementos finitos, encontram-se

as baseadas em elementos coesivos. Nelas, o comportamento de fraturas é

representado por elementos coesivos inseridos nas interfaces entre elementos

volumétricos da malha original. Os modelos de elementos coesivos podem ser

classificados como intrínsecos ou extrínsecos. Modelos intrínsecos requerem

elementos coesivos pré-inseridos em todas as interfaces volumétricas passíveis

de fraturas. Por outro lado, modelos extrínsecos requerem que elementos

coesivos sejam inseridos de forma adaptativa, apenas onde e quando

necessários. Porém, a representação de malhas tradicional (elementos e nós)

não é suficiente para tratar malhas adaptativas eficientemente, o que faz

necessário um suporte topológico apropriado. Em geral, modelos coesivos de

fratura também requerem um alto nível de refinamento de malha, para que

resultados precisos sejam obtidos. Isso implica em um consumo de memória e

processamento que pode ser proibitivo a estações de trabalho tradicionais.

Assim, ambientes paralelos tornam-se importantes na solução de problemas de

fraturas. Entretanto, devido às dificuldades de paralelização de modelos

extrínsecos, as abordagens existentes utilizam modelos intrínsecos ou

implementam simulações extrínsecas baseadas em elementos coesivos pré-

inseridos ou representados como atributos de elementos volumétricos. Com o

objetivo de viabilizar a simulação de fraturas e fragmentação extrínsecas em

grandes modelos de forma simples e eficiente, esta tese propõe o sistema

ParTopS, um suporte topológico em paralelo para malhas de elementos finitos

em análises dinâmicas de fratura e fragmentação. Em especial, é apresentada

uma representação compacta e eficiente de malhas de fraturas distribuídas.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

Elementos coesivos são representados explicitamente e tratados como

elementos regulares da malha. Com base na representação de malha

distribuída, propõe-se um algoritmo paralelo escalável para a inserção adaptativa

de elementos coesivos em malhas bidimensionais e tridimensionais. Operações

topológicas simétricas são exploradas para reduzir a comunicação entre

partições de malha. O sistema ParTopS foi empregado na paralelização de

simulações sequenciais extrínsecas existentes. A escalabilidade e a corretude

do suporte topológico em paralelo são demonstradas através de experimentos

computacionais realizados em um ambiente massivamente paralelo. Os

resultados alcançados mostram que o sistema ParTopS pode ser aplicado de

forma eficaz para viabilizar simulações de grandes modelos.

Palavras-chave

Modelo de zona coesiva extrínseco; elemento coesivo; estrutura de dados

topológica; malha adaptativa; simulação paralela de fratura; fragmentação

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

Abstract

Espinha, Rodrigo de Souza Lima; Celes Filho, Waldemar. Parallel topological support for finite element meshes in dynamic fracture and fragmentation analyses. Rio de Janeiro, 2011. 122p. DSc Thesis - Departamento de Informática, Pontifícia Universidade Católica do Rio de Janeiro.

Fracture propagation and fragmentation phenomena in solids can be

described by Cohesive Zone Models and simulated with the Finite Element

Method. Among the computational approaches of recent interest for fracture

representation in finite element meshes are those based on cohesive elements.

In those approaches, fracture behavior is represented by cohesive elements

inserted at the interfaces between volumetric (bulk) elements of the original

mesh. Cohesive element models can be classified into intrinsic or extrinsic.

Intrinsic models require pre-inserted cohesive elements at every volumetric

interface in which fracture is allowed to happen. On the other hand, extrinsic

models require that cohesive elements be adaptively inserted, wherever and

whenever necessary. However, the traditional mesh representation (elements

and nodes) is not sufficient for handling adaptive meshes, which makes an

appropriate topological support necessary. In general, cohesive models of

fracture also require a high level of mesh refinement near crack tips, such that

accurate results can be achieved. This implies in memory and processor

consumption that may be prohibitive for traditional workstations. Thus, parallel

environments become important for the solution of fracture problems. However,

due to the difficulties for the parallelization of extrinsic models, the existing

approaches use intrinsic models or implement extrinsic simulations based on pre-

inserted cohesive elements or cohesive elements represented as attributes of

volumetric elements. In order to allow fracture and fragmentation simulations of

large models in a simple and efficient way, this thesis proposes the ParTopS

system, a parallel topological support for finite element meshes in dynamic

fracture and fragmentation analyses. Specifically, a compact and efficient

representation of distributed fracture meshes is presented. Cohesive elements

are explicitly represented and treated as regular elements in the mesh. Based on

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

the distributed mesh representation, we propose a scalable parallel algorithm for

adaptive insertion of cohesive elements in both bidimensional and tridimensional

meshes. Symmetrical topological operations are exploited in order to reduce

communication among mesh partitions. The ParTopS system has been employed

in order to parallelize existing serial extrinsic simulations. The scalability and

correctness of the parallel topological support is demonstrated through

computational experiments executed on a massively parallel environment. The

achieved results show that ParTopS can be effectively applied in order to enable

simulations of large models.

Keywords

Extrinsic cohesive zone model; cohesive element; topological data

structure; adaptive mesh; parallel fracture simulation; fragmentation

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

Sumário

1 Introdução 12

1.1. Objetivo 15

1.2. Contribuições 16

1.3. Organização deste documento 17

2 Trabalhos relacionados 18

2.1. Atualização de dados compartilhados por múltiplas partições 18

2.2. Particionamento da malha de elementos finitos 20

2.3. Malhas adaptativas 21

2.4. Estruturas de dados topológicas para malhas distribuídas dinâmicas 22

2.4.1. MDB/PMDB 23

2.4.2. AOMD/PAOMD 23

2.4.3. FMDB 24

2.4.4. LibMesh 25

2.4.5. SIERRA 25

2.4.6. ParFUM 26

2.5. Simulações paralelas de fraturas coesivas extrínsecas 28

2.6. TopS 30

2.6.1. Entidades topológicas 31

2.6.2. Elementos coesivos 34

2.6.3. Inserção adaptativa sequencial de elementos coesivos 36

2.6.4. Conjuntos de atributos densos e esparsos 38

3 ParTopS: suporte topológico compacto em paralelo para representação de

fraturas 40

3.1. Representação de malha distribuída 40

3.1.1. Camada de comunicação 41

3.1.2. Construção da camada de comunicação 48

3.1.3. Vizinhança de uma partição 49

3.1.4. Representação distribuída de atributos 52

3.2. Inserção dinâmica de elementos coesivos em paralelo 54

3.2.1. Operações topológicas simétricas 54

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3.2.2. Descrição do algoritmo paralelo 55

3.2.2.1. Inserção sequencial de elementos coesivos (Fase 1) 57

3.2.2.2. Atualização das entidades proxies criadas (Fase 2) 59

3.2.2.3. Atualização das entidades ghosts afetadas (Fase 3) 61

3.2.3. Interface para a inserção de elementos coesivos 67

3.2.4. Análise de escalabilidade 68

4 Simulações de fraturas extrínsecas em ambientes paralelos 70

4.1. Requisitos de sincronização de entidades 70

4.2. Estrutura da simulação sequencial 72

4.3. Padrões de computação 74

4.4. Computações simétricas 75

4.4.1. Computações elementos-a-nó simétricas com iteradores estáveis 76

4.5. Interface de programação paralela 78

4.5.1. Funções exportadas à aplicação numérica 79

4.5.2. Implementação da interface de programação 80

4.6. Estrutura da simulação paralela 83

4.6.1. Abordagem baseada em computações apenas em entidades locais 84

4.6.2. Abordagem baseada em computações replicadas 87

4.6.3. Abordagem baseada em computações simétricas 89

4.6.4. Abordagem mista 90

5 Experimentos computacionais 92

5.1. Representação topológica de fraturas e fragmentação em paralelo 92

5.1.1. Corretude e eficiência 93

5.1.2. Escalabilidade 99

5.2. Simulações numéricas em paralelo 101

5.2.1. Comparação entre abordagens paralelas 102

5.2.2. Desempenho em relação à simulação sequencial 103

5.2.3. Desempenho relativo 106

5.2.4. Escalabilidade 109

5.2.5. Simulação de fraturas com microrramificações 111

6 Conclusão 115

6.1. Trabalhos futuros 116

7 Referências bibliográficas 118

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

1 Introdução

Simulações numéricas computacionais são importantes para a análise de

problemas complicados de engenharia. Grande parte desses problemas está

relacionada à solução de sistemas de equações diferenciais parciais em

domínios geométricos contínuos. Um método numérico muito utilizado para isso

é o Método dos Elementos Finitos (MEF) (Zienkiewicz et al., 2005). Nesse

método, o domínio geométrico é discretizado por um conjunto finito de

subdomínios, ou elementos, interconectados através de pontos chamados nós; o

conjunto de elementos e nós forma uma malha. A malha, mais as propriedades

de domínio a ela associadas para a solução do problema numérico, é chamada

modelo de elementos finitos. Uma aproximação numérica para uma solução do

sistema de equações diferenciais é, então, calculada com base no domínio

discreto representado pelo modelo de elementos finitos.

Uma das principais aplicações do MEF é na solução de problemas na área

de mecânica estrutural (Zienkiewicz et al., 2005; Cook et al., 2001). Neste caso,

uma simulação numérica (ou análise de elementos finitos) é realizada a fim de

se obter resultados para grandezas físicas como deslocamentos, deformações e

tensões, em resposta a cargas aplicadas a uma estrutura.

Fenômenos de propagação de fraturas e fragmentação podem ser

modelados através de Modelos de Zona Coesiva (Xu & Needleman, 1994;

Camacho & Ortiz, 1996; Zhang & Paulino, 2005; Park et al., 2009), e simulados

com base no MEF. Entre as principais abordagens computacionais para a

representação de fraturas a partir de modelos de zona coesiva, encontram-se as

que empregam elementos especiais, chamados coesivos. Nessas abordagens,

elementos coesivos são usados para representar o comportamento de fraturas,

enquanto que os elementos volumétricos tradicionais representam deformações

do meio contínuo. Os elementos coesivos são inseridos nas interfaces entre

pares de elementos volumétricos adjacentes na malha de elementos finitos.

Os modelos baseados em elementos coesivos podem ser classificados

como: intrínsecos ou extrínsecos. Na abordagem intrínseca (Xu & Needleman,

1994), elementos coesivos possuem uma resposta inicial elástica, como ilustrado

pela curva de tração-separação da Figura 1a. A partir da origem, a tração T

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

1 Introdução 13

aumenta em relação à separação , até alcançar um valor máximo c, que

corresponde ao ponto limite para o início de fratura. Após esse ponto, a tração

diminui até o momento em que a separação alcança o valor c, no qual se

considera ter ocorrido uma completa separação (ou decoesão). De forma geral,

modelos intrínsecos requerem que elementos coesivos estejam presentes nas

interfaces entre todos os elementos volumétricos da malha, ou de toda a região

onde haja a possibilidade de ocorrência de fraturas, antes do início da

simulação, pois a trajetória da fratura não é conhecida a priori. Após o início da

simulação, não é mais necessário modificar a topologia da malha. Modelos

extrínsecos (Camacho & Ortiz, 1996; Ortiz & Pandolfi, 1999; Park et al., 2009),

por outro lado, requerem que elementos coesivos sejam inseridos de forma

adaptativa nas interfaces entre elementos volumétricos, apenas onde e quando

necessários (i.e., quando um critério de fratura é alcançado). Dessa forma,

somente a parte da curva de tração-separação relativa à fratura é representada,

como mostrado na Figura 1b, evitando-se assim um comportamento artificial

antes da ocorrência da fratura (Klein et al., 2001). Durante a evolução da

simulação numérica, determina-se se o critério de fratura foi alcançado para as

interfaces entre cada par de elementos volumétricos do modelo de elementos

finitos. Em caso positivo, elementos coesivos são criados. Com isso, fraturas

podem se propagar ou ocorrer espontaneamente, conforme ditado pela física do

problema; isso é ilustrado na Figura 2.

Figura 1 - Curvas da tração (T) em função da separação () para: (a)

modelos coesivos intrínsecos; e (b) modelos coesivos extrínsecos. Para

efeito de ilustração, assume-se descarregamento / recarregamento elástico

(linhas pontilhadas).

c

T

c

c

T

c

(a) (b)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

1 Introdução 14

Figura 2 - Propagação e ocorrência espontânea de fraturas em uma

malha de triângulos.

A representação de malha tradicionalmente utilizada em análises de

elementos finitos consiste em uma tabela com as posições dos nós e outra com

as incidências nodais dos elementos da malha. Embora a representação

tradicional seja apropriada para diversas aplicações, ela não é suficiente em

análises adaptativas (Beall & Shephard, 1997; Garimella, 2002; Celes et al.,

2005a), nas quais a geometria e a topologia da malha podem se alterar durante

a evolução da simulação numérica. Simulações dinâmicas de fraturas baseadas

em modelos de zona coesiva extrínsecos (Camacho & Ortiz, 1996; Ortiz &

Pandolfi, 1999; Park et al., 2009) requerem que facetas (i.e., arestas em 2D e

faces em 3D) fraturadas sejam eficientemente identificadas (Pandolfi & Ortiz,

1998, 2002; Owen & Shephard, 2003;.Celes et al., 2005a; Paulino et al., 2008),

de forma que elementos coesivos sejam inseridos dinamicamente entre os

elementos volumétricos adjacentes a elas. Durante a inserção de elementos

coesivos, a duplicação de nós da malha pode também ser necessária. Isso

requer uma estrutura de dados apropriada (Celes et al., 2005a; Paulino et al.,

2008), que permita obter de forma eficiente relações de adjacências entre

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

1 Introdução 15

entidades topológicas e realizar a inserção de elementos coesivos de maneira

consistente.

Modelos coesivos de fratura, em geral, requerem um alto nível de

refinamento de malha em regiões ao redor de pontas de fraturas, de forma que o

comportamento não linear nessas regiões possa ser corretamente capturado

(Zhang, 2007). Além disso, a direção de propagação de fraturas tende a ser

altamente dependente do nível de refinamento (Zhang et al., 2007; Papoulia et

al., 2006). Devido às limitações dos recursos computacionais atuais, modelos de

dimensões reduzidas são utilizados (Zhang et al., 2007). Porém, estes não

permitem reproduzir os experimentos originais completamente, devido a escalas

de comprimento dependentes de material (Zhang et al., 2007). Dessa forma,

para se obterem resultados precisos e pouco sensíveis à malha utilizada, é

necessária uma grande quantidade de memória e poder de processamento. Uma

vez que o custo das simulações pode se tornar proibitivo para estações de

trabalho tradicionais, ambientes paralelos se tornam uma ferramenta importante

para a solução eficaz de problemas de propagação de fraturas.

A paralelização de simulações numéricas permite contornar as limitações

de capacidade de memória e/ou processamento impostas pelas abordagens

sequenciais tradicionais. Porém, também apresenta alguns desafios a serem

tratados, para que possa ser vantajosa em relação às abordagem sequenciais.

Entre eles, encontram-se: o desenvolvimento de métodos numéricos paralelos, a

representação eficiente de malhas distribuídas, e a paralelização de técnicas de

refinamento de malha adaptativo, com o correspondente balanceamento

dinâmico da carga dos processadores. Simulações de fraturas baseadas em

elementos coesivos, em especial os modelos extrínsecos, apresentam desafios

adicionais, como a representação e inserção adaptativa de elementos coesivos

em paralelo, que incluem a manutenção da topologia da malha e propagação de

mudanças topológicas para elementos vizinhos de forma consistente e eficiente.

1.1. Objetivo

Esta pesquisa teve como objetivo o desenvolvimento de um suporte

topológico que ofereça ferramentas para a representação de malhas distribuídas

em ambiente paralelo, com os operadores topológicos necessários à realização

de simulações dinâmicas de fraturas e fragmentação baseadas em modelos de

zona coesiva extrínsecos.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

1 Introdução 16

1.2. Contribuições

As seguintes contribuições são apresentadas por este trabalho:

1. Representação compacta e eficiente de malhas distribuídas para

simulações de fratura e fragmentação extrínsecas. É apresentado o

sistema ParTopS (Espinha et al., 2009), que fornece uma

representação compacta para malhas distribuídas de elementos

finitos utilizadas em simulações de fraturas e fragmentação

extrínsecas. Diferentemente de abordagens anteriories, elementos

coesivos são representados explicitamente e tratados como

entidades regulares da malha de elementos finitos.

2. Um algoritmo paralelo eficiente e escalável para a inserção

dinâmica de elementos coesivos em paralelo (Espinha et al., 2009).

No algoritmo proposto, elementos coesivos são tratados de

maneira uniforme, tanto em malhas bidimensionais (2D) como

tridimensionais (3D), e podem ser inseridos entre diferentes tipos

de elementos (ex. T3 (triângulo linear), T6 (triângulo quadrático),

Tet4 (tetraedro linear), Tet10 (tetraedro quadrático), Brick8

(hexahedro linear) e Brick20 (hexahedro quadrático), entre outros).

A inserção é feita de forma adaptativa, onde e quando determinado

pela simulação, conforme requerido pelo modelo coesivo

extrínseco. O sincronismo topológico entre partições de malha é

baseado em operações simétricas e comunicação em lote (batch).

Isso permite reduzir a comunicação entre partições para a

propagação de alterações topológicas, e eliminar a necessidade de

acesso exclusivo (locks) a entidades topológicas (lock-free

approach) ou aquisições temporárias das mesmas por uma

partição.

3. Simulações computacionais paralelas escaláveis de problemas de

propagação de fratura tridimensionais baseados em modelos

extrínsecos. Simulações sequenciais são paralelizadas com base

na representação de malha distribuída proposta neste trabalho,

mostrando que modelos coesivos extrínsecos podem ser simulados

de forma escalável. Computações simétricas são empregadas para

a redução da sincronização de dados entre partições de malha.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

1 Introdução 17

1.3. Organização deste documento

Este documento é organizado da forma descrita a seguir. O Capítulo 2

apresenta os trabalhos presentes na literatura relacionados a esta pequisa. São

revistos os sistemas existentes para a representação de malhas distribuídas

gerais, e discutidas abordagens recentes para o tratamento de simulações de

fraturas extrínsecas. A estrutura de dados topológica sequencial TopS (Celes et

al., 2005a, b; Paulino et al., 2008) também é brevemente revisitada. No Capítulo

3, propõe-se o sistema ParTopS, que oferece um suporte topológico para a

representação de fraturas em paralelo. São apresentados uma representação

distribuída de malhas de fraturas dinâmicas e um algoritmo para a inserção

adaptativa de elementos coesivos em paralelo, baseado na representação de

malha distribuída proposta. O Capítulo 4 descreve a interface fornecida por

ParTopS para o desenvolvimento de simulações numéricas propagação de

fraturas e fragmentação em paralelo e discute abordagens para a paralelização

de uma aplicação existente. Resultados de experimentos computacionais que

demonstram e validam o suporte topológico ParTopS são discutidos no Capítulo

5. O Capítulo 6 conclui este documento e apresenta direções para possíveis

trabalhos futuros.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados

Neste capítulo, são revistas as principais questões relativas à

representação distribuída de malhas de elementos finitos, e os trabalhos

relacionados propostos na literatura que visam tratá-las.

Uma abordagem comum utilizada na paralelização de aplicações que

executam uma mesma operação sobre um determinado volume de dados é o

modelo de paralelismo de dados (Foster, 1995; Mattson et al., 2004). Esse

modelo se aplica a modelos de elementos finitos, nos quais operações são

realizadas sobre os elementos e nós de uma malha. A malha é decomposta em

um conjunto de partições, e a cada partição é atribuído um subconjunto dos

elementos e nós da malha original. Uma partição representa, assim, uma

unidade local de processamento, que pode ser associada a um determinado

processador para ser executada concorrentemente com outras partições; em

geral, um processador é responsável por uma ou mais partições. Dessa forma, a

malha global passa a ser representada de forma distribuída, pelo conjunto de

partições associadas a um grupo de processadores.

A representação distribuída de malhas de elementos finitos (Remacle et

al., 2002; Seol & Shephard, 2006; Lawlor et al., 2006) oferece uma ferramenta

para a execução de análises paralelas visando a solução de problemas maiores

e/ou a redução do tempo total de simulação. Por outro lado, também introduz

questões que devem ser consideradas a fim de que a análise possa ser

realizada de forma eficiente. Algumas dessas questões são apresentadas nas

seções a seguir. Na Seção 2.4, diversos sistemas presentes na literatura para a

representação de malhas distribuídas dinâmicas são brevemente discutidos.

2.1. Atualização de dados compartilhados por múltiplas partições

Uma questão importante relativa à representação de malhas distribuídas

refere-se à manutenção da consistência de dados entre as partições de malha;

em especial, consideram-se os dados correspondentes a entidades localizadas

próximas às fronteiras das partições.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 19

Computações de resultados de simulação para uma entidade topológica do

modelo de elementos finitos muitas vezes dependem de dados associados às

entidades adjacentes a ela. Porém, uma entidade localizada na fronteira de uma

partição pode ser adjacente a entidades localizadas em outras partições. No

exemplo da Figura 3, o nó destacado é compartilhado por elementos de duas

partições de malha diferentes. Se a computação do valor do nó depender dos

valores dos elementos adjacentes, estes devem ser obtidos a partir das

partições correspondentes. Isso requer uma forma de comunicação entre as

partições envolvidas. Para que o valor do nó possa ser utilizado pelas partições

que o compartilham, ele deve ser atualizado de maneira consistente entre elas.

Figura 3 – Um nó compartilhado por elementos pertencentes a duas

partições de malha diferentes encontra-se destacado. O valor do nó deve

ser atualizado consistentemente entre as partições.

Em arquiteturas de memória compartilhada (Foster, 1995), todos os

processadores compartilham um mesmo espaço de memória virtual. Isso permite

que a partições de malha correspondentes se comuniquem de maneira

assíncrona, através de operações de escrita e leitura de dados em memória. Por

sua vez, a atualização de regiões de memória compartilhadas pode ser feita de

forma consistente por meio de mecanismos de acesso exclusivo, como travas de

acesso (locks) e semáforos (Andrews, 2000). No contexto de estruturas de

dados topológicas, Waltz (2002) apresenta algoritmos paralelos para o acesso a

entidades topológicas, que podem ser utilizados em simulações baseadas no

MEF.

Em ambientes paralelos baseados na arquitetura de memória distribuída

(Foster, 1995), nós de processamento independentes (contendo um ou mais

processadores) são interconectados por uma infraestrutura de rede (em geral, de

alto desempenho). Neste caso, o espaço de memória de um nó não é

compartilhado com os outros, e a transmissão de dados entre nós é tipicamente

realizada através do envio de mensagens através da rede. O acesso indireto a

dados remotos geralmente representa um aumento do custo da comunicação

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 20

entre partições. Por outro lado, os ambientes de memória distribuída têm se

mostrado escaláveis, permitindo que o número de processadores alcance

dezenas ou mesmo centenas de milhares, o que dificilmente é obtido apenas

com arquiteturas de memória compartilhada.

Uma solução comumente empregada em ambientes de memória

distribuída para se garantir acesso consistente e eficiente a dados remotos pelas

partições de uma malha consiste na introdução de uma camada fantasma ao

redor de cada partição de malha. Convencionalmente, essa camada é composta

por cópias locais não editáveis de entidades topológicas remotas que são

adjacentes às entidades de uma partição. Dessa forma, os valores das entidades

adjacentes podem ser acessados pela partição durante uma computação de

maneira local e transparente. As entidades fantasmas, em geral, são atualizadas

todas ao mesmo tempo, ao final de um passo de simulação, ou em qualquer

outro momento em que isso seja necessário. Assim, a frequência de requisições

de dados a outras partições é significativamente reduzida. Com a atualização de

dados de uma entidade topológica realizada por apenas uma partição,

considerada a proprietária da entidade, garante-se a consistência dos dados.

Uma variação da solução anterior é adotada pelo framework ParFUM

(Lawlor et al., 2006). O conceito de Multiphase Shared Arrays (MSA) (DeSouza

& Kalé, 2004) é utilizado para manter dados de nós (como na Figura 3)

compartilhados por partições de malha distintas atualizados de maneira

assíncrona. Para isso, um vetor distribuído é responsável por intermediar a

comunicação entre partições. Em uma primeira etapa, o acesso ao vetor é feito

através de um modo de acumulação, e os dados de cada partição são atribuídos

às posições dos nós correspondentes no vetor, que os soma (acumula)

automaticamente. Na segunda etapa, o modo de acesso é alterado para leitura,

e cada partição obtém os dados dos nós de forma consistente. Os valores dos

outros elementos e nós da camada fantasma são atualizados conjuntamente, por

meio de uma chamada de função paralela coletiva específica, ao final de cada

passo de simulação.

2.2. Particionamento da malha de elementos finitos

O particionamento da malha de elementos finitos exerce papel

fundamental na eficiência da simulação paralela, uma vez que o custo total de

um passo de simulação pode ser determinado pelo da partição de maior custo.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 21

Em geral, o custo (ou tempo) de computação de uma partição é proporcional ao

número de elementos e/ou nós que ela contém. Assim, é desejável que essas

entidades encontrem-se balanceadas entre as partições, de forma que tempos

ociosos sejam minimizados, e o tempo total de simulação reduzido.

Um ponto importante a ser considerado durante o particionamento de

malhas é o custo de comunicação entre as partições. Devido à necessidade de

comunicação para a atualização dos elementos e nós próximos às fronteiras de

partições, é desejável agrupá-los de modo a se minimizar o tamanho das

fronteiras compartilhadas com outras partições. Embora, em geral, uma partição

se comunique apenas com um pequeno número de partições vizinhas a ela, o

custo da comunicação ainda pode ser significativo, especialmente em partições

de tamanho reduzido.

Dois sistemas populares para particionamento de malhas são METIS

(Karypis & Kumar, 1995, 1998a) e sua versão paralela ParMETIS (Karypis &

Kumar, 1998b). Esses sistemas utilizam partição de grafos para decompor

grandes malhas de elementos finitos de forma eficiente, e buscam, ao mesmo

tempo, balancear o número de elementos de cada partição e minimizar as

fronteiras compartilhadas por diferentes partições. Nesta pesquisa, o sistema

METIS é empregado para particionar as malhas usadas em alguns dos

experimentos computacionais realizados.

2.3. Malhas adaptativas

Em análises adaptativas de elementos finitos, a malha é modificada

dinamicamente ao longo do processo de simulação numérica. Dessa forma, o

suporte topológico de malha deve fornecer operadores de edição apropriados.

No contexto de simulações dinâmicas de fraturas baseadas no modelo coesivo

extrínseco (Camacho & Ortiz, 1996; Ortiz & Pandolfi, 1999; Park et al., 2009),

requer-se suporte para a representação e inserção adaptativa de elementos

coesivos. Os operadores topológicos de edição de malha devem ser capazes de

manter a topologia da malha consistente após cada operação, o que apresenta

desafios adicionais à implementação em ambientes paralelos.

Para que o comportamento não-linear de regiões ao redor de pontas de

fraturas (Zhang, 2007) seja corretamente capturado, um grande grau de precisão

numérica é, em geral, requerido. Uma forma de se aumentar a precisão

numérica do MEF consiste no refinamento de elementos da malha (h-refinement)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 22

(Zienkiewicz et al., 2005). Contudo, uma vez que um alto nível de refinamento

não é necessário em regiões distantes de fraturas, é interessante que o nível de

refinamento se adapte ao grau de precisão exigido em cada região de malha.

Simulações de fraturas sequenciais que empregam refinamento e simplificação

adaptativa, e outras otimizações geométricas e topológicas de malha, com base

na estrutura de dados topológica TopS, foram recentemente apresentadas por

Paulino, Park, Celes & Espinha (2010) e Park, Paulino, Celes & Espinha (2011).

Em análises onde a malha distribuída permanece estática ao longo da

simulação, o balanceamento da carga dos processadores pode feito apenas uma

vez, durante o particionamento inicial da malha – sistemas como METIS (Karypis

& Kumar, 1995, 1998a) podem ser empregados para isso. Em análises

adaptativas, por outro lado, conforme se modifica a malha, o número de

elementos e nós em um processador pode divergir significativamente de outros,

refletindo-se nas cargas de computação correspondentes. Dessa forma, o

balanceamento de carga dinâmico (Hendrickson & Devine, 2000; Ozturan, 1995;

Devine et al., 2005) torna-se importante para a manutenção do desempenho da

simulação. A biblioteca Zoltan (Devine et al., 2002) oferece utilitários para o

gerenciamento de malhas dinâmicas distribuídas, como: partitionamento,

balanceamento de carga e procedimentos para comunicação entre partições. O

framework Charm++ (Kalé & Krishnan, 1993, 1996), para o desenvolvimento de

programas paralelos, oferece suporte ao balanceamento de carga automático e

à definição de novos balanceadores de carga pela aplicação cliente.

Esta pesquisa foca na representação e criação de fraturas dinâmicas. Para

isso, assume-se que os elementos da malha encontram-se apropriadamente

refinados e a malha distribuída corretamente balanceada. Uma vez que o

número de elementos coesivos e o custo correspondente são tipicamente muito

menores que o de elementos volumétricos, considera-se que o balanço de

cargas não é significativamente alterado com a inserção de novos elementos.

2.4. Estruturas de dados topológicas para malhas distribuídas dinâmicas

Diversos sistemas paralelos com suporte à representação distribuída de

malhas dinâmicas de elementos finitos não-estruturadas são encontrados na

literatura (Remacle et al., 2002; Lawlor et al., 2006; Seol & Shephard, 2006;

Ozturan et al., 1994; Kirk et al., 2006; Stewart & Edwards, 2004). Embora esses

sistemas sejam capazes de representar malhas gerais de elementos finitos, um

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 23

suporte apropriado para fraturas extrínsecas tridimensionais não é apresentado.

Os principais sistemas existentes são brevemente discutidos a seguir.

2.4.1. MDB/PMDB

O sistema Parallel Mesh Database (PMDB) (Ozturan et al., 1994; Ozturan,

1995) oferece operações para a manipulação de malhas distribuídas gerais.

Esse sistema é implementado com base na estrutura de dados sequencial Mesh

Database (MDB) (Beall & Shephard, 1997). São representadas entidades

topológicas como: região, face, aresta e vértice. Cada região é associada a um

único processador, enquanto que faces, arestas e vértices são duplicados em

cada processador que contém regiões adjacentes a essas entidades. Cada

entidade duplicada mantém uma lista de suas cópias em outras partições. Em

PMDB, o conceito de pertinência única de entidades é implementado. Dessa

forma, apenas uma partição pode ser considerada a proprietária de uma

entidade topológica. A partição proprietária é determinada pelo valor mínimo da

tupla (pi, ei) entre a lista de usos da entidade, onde pi é o identificador (id) da

partição e ei é o identificador (id) da cópia da entidade na partição. Entre os

operadores de malha oferecidos encontram-se a inserção e remoção de

entidades e a obtenção de informações de adjacência. Também são oferecidas

funcionalidades para particionamento de malhas e balanceamento de carga.

2.4.2. AOMD/PAOMD

O sistema Parallel Algorithm Oriented Mesh Database (PAOMD) (Remacle

et al., 2002) estende a versão sequencial anterior chamada Algorithm Oriented

Mesh Database (AOMD) (Remacle et al., 2000; Remacle & Shephard, 2003) com

suporte para malhas distribuídas. É fornecido um arcabouço (framework) para o

gerenciamento de malhas distribuídas genéricas, no qual a representação de

malhas pode ser adaptada a diferentes aplicações. Várias entidades topológicas

(vértices, arestas, faces e regiões), além de relações de adjacência entre elas,

podem ser representadas; a aplicação cliente determina quais as necessárias.

Entidades topológicas, com exceção de vértices, são definidas e

representadas por conjuntos de entidades de dimensão inferior e sua ordenação

local correspondente. PAOMD requer que um identificador global único (global

id) seja associado a cada vértice, e que uma entidade possa ser identificada pela

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 24

sua lista de vértices. Identificadores globais, entretanto, podem ser

inconvenientes à representação de malhas adaptativas, pois devem ser

corretamente mantidos entre as partições de malha. Em relação à representação

de elementos coesivos, a definição de entidades a partir de seus vértices

apresenta ambiguidades, já que esses elementos consistem de duas facetas

(faces, em 3D, ou arestas, em 2D) que são diferentes, mas podem possuir os

mesmos vértices (conforme Seção 2.6.2). Nesse caso, a representação por

vértices não é suficiente para se distinguir entre entidades diferentes.

Assim como em PMDB, cada partição é associada a um processador, e a

malha local é representada por uma malha sequencial AOMD. Entidades

classificadas nas fronteiras de uma partição devem existir na estrutura de dados

paralela e ser compartilhadas com as partições vizinhas. A conexão de uma

entidade com suas cópias em outras partições é feita por mensagem enviada a

todas as partições sempre que a malha é modificada. A mensagem contém o

endereço local da entidade e a lista dos identificadores (ids) dos seus vértices.

Procedimentos para malhas adaptativas, balanceamento de carga dinâmico e

migração de entidades entre partições são fornecidos pelo sistema.

2.4.3. FMDB

A infra-estrutura de malha paralela Flexible distributed Mesh DataBase

(FMDB) (Seol & Shephard, 2006) permite a representação de modelos genéricos

não-manifold. Assim com o sistema PAOMD, a aplicação cliente pode configurar

os tipos de entidades topológicas necessários. Cada partição é representada por

uma malha sequencial, porém as entidades nas fronteiras da malha são tratadas

de forma diferente. Elas são duplicadas em todas as partições onde são

requeridas à computação de relações de adjacências. Todavia, apenas uma

partição pode ser considerada a proprietária de uma entidade topológica. Essa

partição é a que contém o menor número de objetos entre as partições nas quais

a entidade é duplicada, a fim de evitar que a carga entre os processadores se

torne desbalanceada quando a malha é modificada. Um algoritmo para migração

eficiente de entidades topológicas entre partições é oferecido por FMDB.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 25

2.4.4. LibMesh

O sistema LibMesh (Kirk et al., 2006) trata de aspectos independentes da

física de análises de elementos finitos. São oferecidos um suporte à

representação de malha distribuída, funções para adaptação da malha e

interfaces para outros sistemas comumente utilizados em aplicações baseadas

no MEF. A representação de malha é baseada na estrutura de dados tradicional

de elementos e nós, e um identificador (id) global único é atribuído a cada

elemento e nó da malha. Elementos também possuem um identificador do

processador ao qual estão atribuídos, referências para os nós incidentes

(conectividade nodal) e aos outros elementos adjacentes às suas faces

(elementos vizinhos). Entretanto, uma cópia completa da malha é armazenada

em cada processador, apesar da decomposição lógica em partições, o que limita

o uso desse sistema em simulações de larga escala. De acordo com Kirk et al.

(2006), uma implementação completamente distribuída está sendo considerada.

2.4.5. SIERRA

O sistema SIERRA (Stewart & Edwards, 2004) oferece diversas

ferramentas para o desenvolvimento de aplicações para análises mecânicas.

Fazem parte de SIERRA uma estrutura de dados topológica distribuída para a

representação de malhas, suporte a adaptação de malha e balanceamento de

carga, e uma interface a bibliotecas de solução de sistemas lineares (linear

solvers), entre outras funcionalidades. A estrutura topológica representa

entidades como: nó, aresta, face e elemento. Elementos, faces e arestas são

definidos por um conjunto de nós que são também vértices. Cada uma dessas

entidades pode se conectar a entidades de tipos diferentes, e as conexões entre

entidades podem ser configuradas pela aplicação cliente. Por exemplo, relações

de adjacência podem ser criadas para se obterem as faces de todos os

elementos fantasmas definidos nas fronteiras de partições. Assim como outras

estruturas de dados, entidades nas fronteiras entre partições podem ser

compartilhadas entre as partições, porém apenas uma partição é a proprietária

da entidade. Entidades são univocamente identificadas pela tupla (tipo, id), onde

tipo é o tipo da entidade (i.e., nó, elemento, etc.) e id é um valor inteiro único

entre todas as entidades de um mesmo tipo. Infelizmente, SIERRA não se

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 26

encontra publicamente disponível, e poucas informações sobre esse sistema

podem ser encontradas na literatura.

2.4.6. ParFUM

O sistema ParFUM (Lawlor et al., 2006) oferece suporte à representação

distribuída de malhas não-estruturadas. Esse sistema é implementado com base

no framework paralelo Charm++ (Kalé & Krishnan, 1993, 1996) e AMPI (Huang

et al., 2003), uma implementação da especificação de interface de envio de

mensagens MPI (MPI Forum, 2010) sobre Charm++.

A estrutura de dados topológica é capaz de representar as entidades

elemento e nó, além de informações adicionais de adjacência, como as

conectividades nó-a-nó, nó-a-elemento e elemento-a-elemento. Uma partição de

malha é chamada chunk, e é geralmente associada a um único processador (ou

processo MPI). Por outro lado, um processador pode ter diversos chunks

associados a ele. A comunicação entre chunks ocorre de maneira implícita,

através de duas classes de entidades especiais (Figura 4): nós compartilhados

(shared nodes) e nós e elementos fantasmas (ghost nodes/elements). Cada

elemento é associado a um único chunk, enquanto que nós podem ser

compartilhados por elementos de chunks diferentes. Os nós classificados como

compartilhados são duplicados em cada chunk em que são usados. Durante a

simulação numérica, entidades nas fronteiras de uma partição podem precisar

de informações de entidades vizinhas representadas em outras partições. Para

isso, são criadas camadas fantasmas (ghost layers) de elementos ao redor de

cada chunk. As entidades da camada fantasma (nós e elementos fantasmas)

são disponibilizadas apenas para leitura (read-only), segundo a maneira

convencional, não podendo ser editadas.

Figura 4 – Partições com camada fantasma. Os nós compartilhados

são desenhados preenchidos. Os elementos e nós da camada fantasma

também encontram-se destacados.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 27

Em cada chunk, um índice local (relativo ao chunk) é atribuído às

entidades presentes. Se dois chunks compartilham nós, então eles mantém uma

lista mútua de índices locais de nós compartilhados, consistentemente

ordenados. Com isso, o mapeamento do índice local de um nó de um chunk para

o outro é feito de maneira direta. No caso de entidades fantasmas, o chunk que

possui a entidade real mantém uma lista de mapeamento (sendghost list),

destinada ao envio de dados às partições que possuem cópias da entidade. Um

chunk contendo uma entidade fantasma mantém uma lista de mapeamento

reversa (receivenode list). Para sincronizar os dados de entidades da camada

fantasma com as entidades reais correspondentes, são fornecidas funções

paralelas coletivas.

São suportadas operações incrementais de modificação topológica de

malhas bidimensionais. A modificação de malhas em paralelo é baseada em

operadores atômicos (Choudhury, 2006), com a atomicidade garantida por

requisições de acesso exclusivo (travas de acesso, ou locks) aos nós envolvidos.

Para que um elemento na fronteria de um chunk seja modificado, o acesso

exclusivo aos respectivos nós são requisitadas. Uma vez que a partição detém o

acesso exclusivo a todos os nós, o elemento é alterado localmente, e os chunks

se comunicam para sincronizar as informações topológicas com os chunks

vizinhos. Finalmente, as travas obtidas são liberadas e podem ser requisitadas

por outros chunks interessados. Isso permite que algoritmos de adaptação de

malha utilizem operadores sequenciais, sem a necessidade de sincronização

explícita. Por outro lado, o custo para se obter acesso exclusivo aos nós, e o

número de mensagens trocadas entre partições, pode ser significante.

Choudhury (2006) reduz esses custos com a alocação de múltiplos chunks de

menor tamanho em cada processador, de forma a aumentar a concorrência e

reduzir tempos ociosos (idle time) de processadores.

Resultados de simulação de fraturas com base em ParFUM são

encontrados na literatura (Mangala et al., 2008). Entretanto, o suporte a

representação de fraturas se restringe a malhas triangulares bidimensionais, ou

utiliza elementos coesivos pré-inseridos em toda a malha, e que são ativados

sob demanda. Um suporte topológico em paralelo, completo e geral, para a

representação e inserção dinâmica de elementos coesivos realmente

extrínsecos, tanto em malhas bidimensionais (2D) como tridimensionais (3D),

ainda é necessário.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 28

2.5. Simulações paralelas de fraturas coesivas extrínsecas

Nesta seção, são revistos trabalhos propostos na literatura que abordam

simulações em paralelo de fraturas baseadas em modelos de zona coesiva

extrínsecos. A revisão é feita sob o ponto de vista da representação de dados

topológicos, conforme o foco desta pesquisa.

Quando uma abordagem intrínseca (Xu & Needleman, 1994) é utilizada,

elementos coesivos são criados ao longo de todas as interfaces entre elementos

volumétricos da malha, antes do início da simulação. Dessa forma, os elementos

estão presentes durante todo o processo de simulação, contribuindo para os

resultados calculados. Como não são necessárias modificações topológicas da

malha após o início da simulação, essa abordagem é inerentemente escalável.

As questões tratadas pela representação de malha distribuída consistem apenas

no particionamento da malha original e a comunicação entre as partições.

Modelos extrínsecos, no entanto, introduzem desafios adicionais.

Elementos coesivos devem ser inseridos sob demanda quando um critério de

fratura é alcançado. Isso faz com que a representação de malha torne-se mais

complexa, uma vez que a topologia da malha se modifica durante a simulação.

As mudanças ocorridas localmente em cada partição devem ser propagadas

para as partições vizinhas, de forma consistente e eficiente. Alguns algoritmos

para a inserção dinâmica de elementos coesivos existem na literatura (Pandolfi &

Ortiz, 1998, 2002; Mota et al., 2008; Paulino et al., 2008). Porém, devido às

dificuldades de paralelização de modelos extrínsecos, em especial para malhas

tridimensionais, poucas soluções em paralelo foram propostas.

Duas abordagens recentes contornam as dificuldades relacionadas à

representação de fraturas utilizando elementos coesivos pré-inseridos. Dooley et

al. (2009) empregam uma estratégia baseada na ativação de elementos,

implementada para malhas bidimensionais. Com isso, elementos coesivos

existem em todas as interfaces entre elementos volumétricos da malha inicial,

mas permanecem inativos até que o critério de fratura seja alcançado nas

interfaces correspondentes. Nesse momento, a lei coesiva entra em efeito, e o

elemento torna-se parte do processo de simulação. Do ponto de vista da

topologia da malha, essa abordagem equivale ao modelo intrínseco, no sentido

em que elementos coesivos são pré-inseridos em todas as interfaces onde

fraturas possam ocorrer. A diferença é que elementos coesivos são ativados na

simulação apenas quando necessários.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 29

Como a topologia da malha não se altera durante a simulação,

comunicações entre partições não são necessárias para propagar modificações

topológicas às partições vizinhas. Isso faz com que essa abordagem se torne

escalável, assim como os modelos intrínsecos. Por outro lado, também introduz

dificuldades que devem ser contornadas. Durante a construção da malha

distribuída, todo nó localizado em fronteiras compartilhadas por duas ou mais

partições é replicado tantas vezes quanto o número de elementos volumétricos

adjacentes, de forma que os elementos coesivos possam ser criados. Assim,

mesmo quando nenhum elemento coesivo está ativo na simulação, os elementos

e as cópias dos nós correspondentes existem na topologia da malha de cada

partição. Isso introduz um custo adicional para a representação de malha, em

especial em aplicações com um número pequeno de interfaces fraturadas,

devido à presença de nós e elementos desnecessários à simulação.

Além disso, a representação topológica real da malha não corresponde à

efetivamente utilizada na simulação. Dessa forma, a aplicação cliente, ou uma

camada intermediária adicional, deve ser responsável por prover o acesso

consistente aos nós replicados. Enquanto um elemento coesivo não está ativo,

cada par de nós compartilhados entre as duas arestas do elemento coesivo

bidimensional (ou faces de um elemento tridimensional) deve corresponder a um

único nó regular no contexto da simulação, embora os nós sejam representados

como entidades topológicas diferentes. Para contornar as inconsistências

resultantes de duplicações nodais desnecessárias, e assegurar a continuidade

de malha na simulação, um nó aleatório é escolhido entre as múltiplas cópias,

como nó raiz representativo ("root node"). A diferença entre a representação

topológica da malha e a usada pela simulação também afeta o acesso a

relações topológicas entre entidades da malha. O acesso a essas relações

passa a não ter um tratamento uniforme, uma vez que dois elementos

volumétricos que deveriam ser adjacentes na simulação encontram-se

separados por um elemento coesivo na representação da malha.

A implementação da abordagem de Dooley et al. (2009) baseia-se no

sistema ParFUM (Lawlor et al., 2006). O código da simulação paralela é dividido

em duas rotinas principais: init() e driver() (Dooley et al., 2009). Em init(), a malha

completa é carregada em um único processador. Após o término de init(), o

sistema particiona a malha e cria a infraestrutura de comunicação entre

partições. A simulação numérica é realizada pela rotina driver(), executada em

paralelo por cada partição de malha. Com base em ParFUM, a comunicação

entre partições é feita através de uma camada fantasma, com cópias não

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 30

editáveis de elementos e nós de partições vizinhas. A camada é criada ao redor

das fronteiras das partições. Resultados de simulações dinâmicas de fraturas

são apresentados para malhas de triângulos, com até 1,2 milhões de elementos

e 512 processadores. Um trabalho complementar de Mangala et al. (2008)

aborda o refinamento e simplificação adaptativo de malhas bidimensionais.

A abordagem proposta por Radovitzky et al. (2011) para a paralelização de

simulações de fraturas extrínsecas é baseada na adaptação dos modelos

numéricos utilizados. Dessa forma, uma formulação descontínua de Galerkin

(Discontinuous Galerkin - DG) (Noels & Radovitzky, 2006, 2008) do problema

contínuo é combinada com um modelo coesivo de fratura. Assim como a

abordagem de Dooley et al. (2009), elementos coesivos são pré-inseridos em

todas as interfaces entre elementos volumétricos, durante a construção da malha

inicial. Termos adicionais introduzidos à formulação do problema, devidos à

formulação descontínua de Galerkin, garantem a consistência da simulação na

ausência de fraturas. Quando o critério de fratura é alcançado para uma

determinada interface entre elementos volumétricos, a lei coesiva entra em

efeito, substituindo os termos da formulação descontínua de Galerkin. Com isso,

elementos coesivos permanecem na malha de forma consistente com a

simulação numérica, mesmo na ausência de fraturas, ao contrário da abordagem

anterior. A sincronização de atributos de simulação é feita utilizando-se uma

operação paralela de redução (Quinn, 2004) para somar os resultados dos nós

das fronteiras compartilhadas entre partições. Essa abordagem é escalável, de

forma similar à anterior. Resultados para simulações de propagação de ondas

(wave propagation) e fragmentação dinâmica são apresentados para malhas de

tetraedros quadráticos (Bathe, 1996) com 103 milhões de elementos e 4096

processadores.

2.6. TopS

A estrutura de dados topológica TopS, para representação sequencial de

malhas de elementos finitos, foi proposta por Celes, Paulino & Espinha (2005a,

b). Ela fornece uma representação compacta (em relação ao custo de memória)

para malhas com fronteira externa com topologia manifold (Mäntylä, 1988), uma

vez que apenas as entidades topológicas elemento e nó são armazenadas em

memória. Ao mesmo tempo, é considerada completa (Weiler, 1986, 1988), no

sentido em que permite que todas as relações de adjacências entre entidades

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 31

topológicas da malha sejam obtidas em ordem proporcional ao número de

entidades retornadas. Entre as funcionalidades oferecidas por TopS, de especial

interessse a esta pesquisa, encontra-se uma interface uniforme para a

representação e tratamento de elementos coesivos. É fornecido suporte

sequencial para a inserção adaptativa de elementos coesivos (requerida por

simulações de fraturas e fragmentação extrínsecas), a partir da classificação

topológica proposta por Paulino et al. (2008).

A representação de malha distribuída proposta neste trabalho utiliza como

base a estrutura de dados topológica sequencial TopS (Celes, Paulino &

Espinha, 2005a, b). Dessa forma, os principais conceitos de TopS relacionados a

este trabalho são revistos a seguir.

2.6.1. Entidades topológicas

Embora diversos tipos de entidades topológicas sejam definidos por TopS,

apenas as entidades elemento e nó são explicitamente representadas. Isso

significa que essas entidades possuem uma representação concreta, residindo

efetivamente no espaço de memória utilizado pela estrutura de dados. A

entidade elemento representa qualquer tipo de elemento finito que possa ser

definido por um conjunto ordenado (template) de nós, o que inclui os principais

tipos empregados em análises de elementos finitos (ex. triângulos, tetraedros e

hexahedros, de ordem linear, quadrática ou superior) (Bathe, 1996). Alguns dos

tipos de elementos, lineares e quadráticos, suportados por TopS são ilustrados

na Figura 5. A entidade nó representa nós de elementos finitos, podendo estar

associados aos cantos (Figura 5a) ou outras posições da fronteira ou interior de

um elemento, no caso de elementos não-lineares (ex. elementos quadráticos –

Figura 5b). Nós localizados sobre uma aresta e que não correspondem aos

cantos da aresta são chamados nós de meio de aresta (ou mid-side nodes).

Além de elementos e nós, a estrutura de dados também armazena

algumas informações de adjacência entre essas entidades, de forma a permitir o

acesso eficiente a elas. Assim, além da referência tradicional – conectividade

nodal – de um elemento ao seu conjunto de nós (relação elemento-a-nó), um

elemento possui uma referência para cada elemento adjacente a ele (relação

elemento-a-elemento). Da mesma forma, todo nó possui uma referência para um

de seus elementos adjacentes (relação nó-a-elemento), considerando-se uma

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 32

malha regular de domínio manifold. Todas as outras relações de adjacência

fornecidas por TopS são derivadas a partir das relações anteriores.

Figura 5 - Exemplos de elementos volumétricos (a) lineares e (b)

quadráticos suportados pela estrutura topológica TopS.

As entidades topológicas vértice, aresta, face e faceta são representadas

implicitamente pela estrutura de dados. Dessa forma, são criadas sob demanda,

de forma transparente, sempre que requisitadas pela aplicação cliente. Um

vértice representa a entidade de dimensão 0 associada a um nó de canto de um

elemento finito; aresta é definida como a entidade de dimensão 1 limitada por

dois vértices; e face é a entidade de dimensão 2 limitada por um conjunto de

arestas. A entidade faceta é definida por TopS para representar a interface entre

dois elementos volumétricos adjacentes, ou entre um elemento e a fronteira da

malha. Em uma malha bidimensional, uma faceta equivale à entidade de

dimensão 1 (aresta), enquanto que, em malhas tridimensionais, equivale à

entidade de dimensão 2 (face). Com isso, a entidade faceta provê uma

abstração conveniente para o tratamento uniforme de operações que atuam nas

interfaces entre elementos, como a inserção de elementos coesivos.

Além de vértice, aresta, face e faceta, TopS define um conjunto de

entidades implícitas adicionais, que representam os usos daquelas entidades

pelos elementos adjacentes: vértice-uso (vertex-use), aresta-uso (edge-use),

face-uso (face-use) e faceta-uso (facet-use). Os usos de uma faceta

compartilhada por dois elementos são ilustrados na Figura 6. Uma faceta-uso

independente é definida para cada elemento que compartilha (ou usa) a faceta.

Vértices e arestas podem ser compartilhados por um número arbitrário de

elementos, e assim são definidos vários usos de uma mesma entidade.

Cada elemento isoladamente é limitado por um conjunto de faces, arestas

e vértices, mapeados para os correspondentes usos de entidades do elemento.

Uma vez que a topologia local do elemento, em geral, depende unicamente do

seu tipo (ex. Tet4 (tetraedro linear), Brick20 (hexaedro quadrático), etc.), pode-se

T6

(b)

Tet10 Hex20T3 Tet4 Hex6

(a)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 33

definir uma ordenação topológica local fixa (ou element template) para as

referências às entidades locais do elemento. A ordenação fornece acesso direto

a todas as relações de adjacência entre entidades no interior dos elementos,

sendo reutilizada por todos os elementos de um mesmo tipo.

Figura 6 - A faceta f é usada pelos dois elementos adjacentes a ela,

em 2D (a) ou em 3D (b). Para cada elemento que usa a faceta, define-se

uma faceta-uso (fu) correspondente. A faceta é univocamente representada

por um de seus usos, no qual diz-se que ela está ancorada. O uso que

representa a faceta é destacado pela marca `x`.

Em TopS, entidades são acessadas por meio de referências opacas

(opaque handles) retornadas pela estrutura de dados à aplicação cliente no lugar

da própria entidade. A utilização de referências opacas fornece à aplicação

cliente uma interface transparente para o tratamento uniforme tanto de entidades

explícitas quanto implícitas. Uma referência opaca consiste em: um identificador

de elemento (Ei) ou de nó (Ni), ou o par (Ei, idlocal), no caso de entidades

implícitas. Um uso de entidade implícita (vértice-uso, aresta-uso, face-uso ou

faceta-uso) é unicamente representado por (Ei, idlocal), que é composto por uma

referência ao elemento (Ei) ao qual ele está associado, mais o índice da entidade

(idlocal) em relação à ordenação topológica fixa do elemento.

As entidades implícitas vértice, aresta, face e faceta são representadas por

um de seus usos pelos elementos adjacentes. Com isso, duas arestas que

possuem os mesmos nós podem ser identificadas pela estrutura de dados como

arestas diferentes. Esse tipo de configuração, que é comum em elementos

coesivos (Seção 2.6.3), não poderia ser representado se as arestas fossem

definidas através de outras entidades de ordem inferior (ex.: nós).

fu fu

f

f

fufu

(a)

(b)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 34

De forma a identificar o uso de entidade que representa uma entidade

topológica do tipo vértice, aresta, face ou faceta, define-se um marcador binário,

chamado âncora, que é colocado no elemento adjacente correspondente ao uso

que representa a entidade. Isso é mostrado na Figura 6. Embora dois elementos

compartilhem uma mesma faceta, apenas um deles possui o marcador de

âncora da entidade (ilustrado pela marca 'x' na figura). Assim, diz-se que a

faceta encontra-se ancorada naquele elemento, e a faceta-uso correspondente é

considerada a representante da faceta. Em TopS, a representação de entidades

implícitas é sempre associada aos elementos adjacentes a elas.

A Figura 7 ilustra a visitação de todos os usos de um vértice pelos

elementos adjacentes, em uma malha bidimensional. Um procedimento

equivalente é realizado para arestas e malhas tridimensionais (Celes, Paulino &

Espinha, 2005a). A partir de um vértice (v), obtém-se o vértice-uso que o

representa (vu0), a partir do elemento adjacente contendo o marcador de âncora

correspondente. Usando-se a ordenação local fixa do elemento, acessa-se uma

de suas facetas-uso (fu0) adjacentes ao vértice-uso (vu0). Em seguida, com

base na relação de adjacência elemento-a-elemento armazenada pela estrutura

de dados, obtém-se a faceta-uso (fu1) correspondente no elemento adjacente, e,

novamente usando-se a ordenação local fixa do elemento, obtém-se o vértice-

uso (vu1) associado ao vértice (v). O procedimento continua em cada elemento

até que todos os usos do vértice tenham sido visitados.

Figura 7 - Visitação dos usos de um vértice pelos elementos

adjacentes em uma malha bidimensional.

2.6.2. Elementos coesivos

Do ponto de vista da representação topológica, elementos coesivos

(Pandolfi & Ortiz, 1998, 2002; Paulino et al., 2008) são tipos de elementos

especiais que consistem de apenas duas facetas. Esses elementos são criados

vu1 vu0

v

fu0fu1

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 35

nas interfaces entre dois elementos volumétricos adjacentes para representar a

ocorrência de fraturas na malha de elementos finitos. A Figura 8 mostra dois

elementos coesivos (CohE3 e CohT6) compatíveis com facetas de dois

elementos volumétricos (T6 e Tet10).

Figura 8 - Exemplos de elementos volumétricos 2D (a) e 3D (b) e

elementos coesivos correspondentes (CohE3 e CohT6).

Elementos coesivos podem ter nós compartilhados entre as suas duas

facetas, f1 e f2 . Dessa forma, a seguinte incidência nodal é válida para um

elemento do tipo Coh2E3: f1:(nA, nB, nC), f2:(nA, nD, nC), onde os primeiros três

nós correspondem à primeira faceta do elemento (f1) e os restantes à segunda

(f2). Apesar do compartilhamento de nós entre as facetas, diferentes vértices-

usos, arestas-usos e faces-usos são definidos para cada faceta do elemento

coesivo. Alguns exemplos de possíveis incidências nodais de elementos

coesivos são mostrados na Figura 9.

Figura 9 - Exemplos de possíveis incidências nodais de elementos

coesivos: (a) 2D (Coh2E3); e (b) 3D (Coh3T6). Elementos coesivos podem

possuir nós compartilhados pelas duas facetas diferentes.

Tet10 CohT6T6 CohE3

(a) (b)

nA

nB

nC

nE

nD

f1 f2

nA

nB

nDnC

nA nF

nD

nE

nC

nB

nA

nB

nC

nD

nE

nF

f1

f2nA

nHnE

nD

nB

nC

nB

nC

nD

nE

nF

nInG

nA

nF

nC

nL nJ nA

nB

nD

nGnEnH

nG

nF

nA

nI

(a)

(b)

Coh2E3

Coh3T6

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 36

Da mesma forma que outros tipos de elementos (volumétricos), TopS

representa elementos coesivos explicitamente e os trata como elementos

regulares da malha de elementos finitos. Assim, elementos coesivos também

possuem uma ordenação topológica (template) local fixa e podem ter atributos

associados. Isso difere de outras abordagens, em que elementos coesivos são

tratados como atributos de elementos volumétricos (Pandolfi & Ortiz, 1998,

2002).

2.6.3. Inserção adaptativa sequencial de elementos coesivos

A estrutura de dados topológica sequencial TopS permite que elementos

coesivos sejam inseridos adaptativamente, conforme necessário. A inserção

adaptativa baseia-se na classificação sistemática de facetas proposta por

Paulino et al. (2008). Essa classificação fornece uma maneira consistente de se

identificarem as operações topológicas necessárias à atualização da estrutura de

dados, após a introdução de um novo elemento coesivo. Uma vantagem é que

ela pode ser empregada uniformemente para qualquer tipo de elemento, tanto

em malhas bidimensionais (2D) quanto tridimensionais (3D).

Os passos para a inserção de um elemento coesivo ao longo da faceta

entre os elementos E1 e E2 são ilustrados na Figura 10 e brevemente descritos

a seguir:

1. Cria-se um elemento coesivo entre E1 e E2. As adjacências dos

elementos E1 e E2 são atualizadas, de forma que E1 e E2 não são

mais adjacentes um ao outro, mas ao elemento coesivo (Figura 10a

e Figura 10d). Inicialmente, as duas facetas do elemento coesivo

possuem o mesmo conjunto de nós.

2. Para cada aresta-uso (eu) da faceta de E1 compartilhada com o

elemento coesivo (Figura 10b e Figura 10e), visitam-se todos os

outros usos da aresta correspondente, considerando as

adjacências atualizadas no passo anterior. Se o elemento E2 não

foi alcançado, duplica-se a aresta. Os nós de meio de aresta, se

existentes, também devem ser duplicados.

3. O procedimento de vértices é similar ao de arestas. Para cada

vértice-uso (vu) da faceta de E1 compartilhada com o elemento

coesivo (Figura 10c e Figura 10f), visitam-se todos os outros usos

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 37

do vértice correspondente, considerando-se as adjacências

atualizadas. Se E2 não foi alcançado, duplica-se o vértice e o nó de

canto correspondente.

As conectividades de todos os elementos envolvidos precisam ser

atualizadas para cada nó duplicado. Isso é feito pela substituição do nó original

pelo novo nos elementos visitados durante os passos 2 e 3. Elementos não

visitados não são alterados. Casos correspondentes à inserção de elementos

coesivos em uma malha bidimensional são ilustrados na Figura 11.

Figura 10 - Operações para a atualização da topologia da malha

quando um novo elemento coesivo é inserido, em 2D (a - c) e em 3D (d - f).

(a), (d) - O elemento coesivo é criado na faceta entre E1 e E2. (b), (e) - Para

cada aresta da faceta inicial, a partir de E1, os usos correspondentes são

visitados. Se o uso de E2 não é alcançado, a aresta e nós de meio da aresta

são duplicados. (c), (f) - Para cada vértice da faceta inicial, a partir de E1, os

usos correspondentes são visitados. Se o uso de E2 não é alcançado, o

vértice e o nó correspondente são duplicados.

E1 E2

E2E1

(a) (b) (c)

(d) (e) (f)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 38

Figura 11 - Casos correspondentes à inserção de elementos coesivos

em uma malha bidimensional (Paulino et al., 2008).

2.6.4. Conjuntos de atributos densos e esparsos

Para realizar uma simulação numérica, a aplicação cliente pode precisar

associar atributos próprios da simulação a entidades topológicas da malha de

elementos finitos. A fim de facilitar a gerência de atributos por aplicações que

utilizam malhas dinâmicas é fornecido suporte para conjuntos de atributos,

alocados automaticamente por TopS. Dois tipos são definidos: atributos densos

(dense attributes) e esparsos (sparse attributes). Conjuntos densos são

otimizados para dados associados a todas (ou quase todas) as entidades de um

dado tipo (ex. dados da simulação numérica em cada nó ou elemento), enquanto

que conjuntos esparsos são tipicamente empregados na representação de

dados associados a apenas parte das entidades (ex. condições de contorno, ou

forças aplicadas).

Os conjuntos de atributos densos se aplicam apenas a entidades explícitas

(nós e elementos), sendo um conjunto diferente criado para cada tipo de

elemento ou nó. A implementação consiste em um vetor dinâmico de dados, com

número de posições igual ao de entidades do tipo ao qual o vetor está

associado. Os índices do vetor de atributos correspondem aos mesmos índices

no vetor da estrutura de dados contendo os nós ou elementos relacionados

(TopS utiliza vetores distintos para representar cada tipo de elemento ou nó). O

tamanho alocado para cada valor de atributo (posição do vetor) é fixo e definido

pela aplicação durante a criação do conjunto. O vetor dinâmico é

redimensionado automaticamente, com base no número de entidades

representadas. Vários conjuntos de atributos podem ser criados para o mesmo

E1 E2

E1

E2E1

E2

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

2 Trabalhos relacionados 39

tipo de entidade, sendo que cada conjunto associado a um tipo de entidade

possui um identificador único, usado pela aplicação para acessá-lo.

Ao contrário de atributos densos, conjuntos de atributos esparsos podem

ser criados para quaisquer das entidades representadas por TopS, explícitas ou

implícitas. Assim como os atributos densos, os esparsos também são definidos

para cada tipo de elemento ou nó ou de entidade implícita. A implementação

consiste em uma tabela associativa dinâmica (ou uma tabela de dispersão –

hash table) indexada pelos identificadores das entidades correspondentes. A

criação de conjuntos esparsos é feita da mesma maneira que os densos.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas

Neste capítulo, propõe-se um suporte topológico para a representação de

fraturas baseada em modelos de zona coesiva em um ambiente paralelo.

Inicialmente, é desenvolvida uma representação topológica distribuída de malhas

de elementos finitos para simulações de fraturas e fragmentação dinâmicas. Em

seguida, com base na representação de malha distribuída, é proposto um

algoritmo paralelo para a inserção dinâmica de elementos coesivos. O suporte

topológico em paralelo é chamado ParTopS, e implementado como uma

extensão da estrutura topológica sequencial TopS (Celes, Paulino & Espinha;

2005a, b). Seguindo a filosofia de TopS, a malha distribuída é mantida de

maneira compacta, mas com o conjunto de funcionalidades necessárias à

representação eficiente de fraturas.

3.1. Representação de malha distribuída

A malha distribuída consiste na união das partições disjuntas do conjunto

de entidades topológicas que compõem a malha original de elementos finitos

(Figura 12). Cada partição de malha corresponde a uma unidade de computação

sequencial, executada por um processador distinto.

Durante o particionamento inicial da malha, cada elemento ou nó é

atribuído a uma única partição (Figura 12). Porém, nós das fronteiras de

partições podem ser compartilhados por elementos de partições diferentes. Para

se manter a consistência topológica dos elementos de cada partição, são criadas

cópias dos nós correspondentes em cada partição que não possui os nós

originais. Em ParTopS, essas cópias são fornecidas pela camada de

comunicação, apresentada na Seção 3.1.1, que é adicionada às fronteiras de

cada partição. Entidades implícitas (vértice, aresta, face e faceta) são atribuídas

às mesmas partições que os elementos aos quais se encontram ancoradas

(Seção 2.6.1).

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 41

Na representação de malha distribuída proposta, a malha local de cada

partição é representada pela estrutura de dados topológica TopS, estendida com

uma infraestrutura adicional para a comunicação entre partições. As extensões

de TopS que formam a representação distribuída de ParTopS são descritas nas

subseções seguintes.

Figura 12 - (a) Malha de elementos finitos original; (b) partições da

malha de elementos finitos.

3.1.1. Camada de comunicação

Durante a análise de elementos finitos, computações realizadas em

elementos e nós precisam acessar dados armazenados em entidades

adjacentes (ex.: a computação de tensões nodais requer contribuições dos

elementos adjacentes aos nós). Todavia, elementos e nós localizados nas

fronteiras de uma partição podem ser adjacentes a entidades representadas em

outras partições. Assim, torna-se necessário que a partição se comunique com

as vizinhas de modo a obter os dados necessários (Figura 13a).

Em relação à representação de elementos coesivos, podem ocorrer

inconsistências topológicas quando esses elementos são representados em

fronteiras compartilhadas por partições de malha diferentes. Por definição,

elementos coesivos só existem em interfaces entre dois elementos volumétricos

adjacentes, porém os elementos volumétricos podem ser representados por

partições diferentes. Segundo a classificação de Paulino et al. (2008), a

(a) (b)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 42

topologia de um elemento coesivo também é determinada a partir de

informações topológicas do conjunto de elementos adjacentes aos vértices,

arestas e facetas do elemento. Na inserção de elementos coesivos, a decisão se

um nó do elemento deve ser duplicado, e como será duplicado, por exemplo,

depende do conjunto de elementos adjacentes. Entretanto, nas fronteiras

compartilhadas de uma partição, o conjunto local de elementos adjacentes não é

completo.

A Figura 13b ilustra a interface de um elemento volumétrico localizado na

fronteira de uma partição, onde se pretende inserir um novo elemento coesivo. A

inserção do elemento requer operações topológicas baseadas nas entidades

adjacentes, como buscas locais ao redor de vértices, arestas e facetas. Para que

o elemento coesivo possa ser criado, é necessário que a topologia da região de

malha ao redor da interface esteja completa. Isso também é necessário para que

a representação do elemento na malha distribuída esteja consistente com sua

definição.

Figura 13 - (a) Computação ao redor de um nó requer dados de

elementos adjacentes representados em outras partições. (b) A topologia

da malha ao redor de um elemento coesivo deve ser completa para a

determinação de duplicações nodais necessárias. Isso requer o acesso a

elementos volumétricos adjacentes que podem estar representados em

partições diferentes.

Conforme discutido na Seção 2.1, uma maneira comum de se fornecer a

uma partição o acesso consistente a dados de entidades topológicas de

(a) (b)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 43

partições vizinhas consiste na criação de cópias das entidades remotas

(representadas pelas partições vizinhas) na partição local corrente. A fim de se

reduzir a quantidade de comunicação necessária para o acesso à vizinhança

completa de uma entidade, uma camada de comunicação é criada ao redor das

fronteiras da partição (Figura 14). A camada de comunicação é composta por

cópias de todos os elementos remotos adjacentes aos nós das fronteiras da

partição corrente, mais os nós desses elementos. Ela é criada logo após o

particionamento inicial da malha original e mantida durante o tempo de vida de

cada partição.

Em ParTopS, uma entidade topológica da malha original é chamada

entidade real, e a partição de malha à qual ela está atribuída é definida como a

partição proprietária da entidade. Embora, devido à camada de comunicação,

diversas partições possam ter uma cópia de uma mesma entidade real, apenas

uma é a proprietária da entidade. Nessa partição, a entidade real é representada

por uma entidade local correspondente. Em outras, ela é representada pelas

camadas de comunicação correspondentes das partições.

Figura 14 - Camada de comunicação; cópias de entidades remotas

são adicionadas ao redor dos nós das fronteiras de cada partição.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 44

Com a introdução de cópias de entidades remotas, a topologia ao redor

das fronteiras originais das partições torna-se completa. Porém, a topologia das

novas fronteiras, definidas agora pela camada de comunicação, permanece

incompleta. Para expressar essa distinção de forma consistente, diferentemente

de abordagens anteriores, propõe-se que as entidades topológicas da camada

de comunicação sejam classificadas em dois tipos: proxy e ghost. A definição

desses tipos é baseada no conceito de vizinhança direta de entidades,

apresentado a seguir.

Define-se a vizinhança direta de uma entidade topológica como o conjunto

de entidades, de dimensão diferente da entidade em questão, que são

diretamente adjacentes a ela na malha de elementos finitos original,

considerando-se uma representação de malha completa (contendo todas as

entidades topológicas representáveis). Sem perda de generalidade, isso é

ilustrado na Figura 15, para um nó (Figura 15a) e um elemento (Figura 15b) de

uma malha bidimensional. A vizinhança direta do nó corresponde ao conjunto de

elementos e outras entidades (arestas, faces e facetas) que incidem diretamente

sobre ele. Por outro lado, a vizinhança direta do elemento é composta pelos nós

e outras entidades (vértices, arestas e facetas) adjacentes ao elemento. A

vizinhança direta de uma aresta é mostrada na Figura 15c; ela consiste no

conjunto de nós, elementos e outras entidades (vértices e faces) adjacentes à

aresta.

Figura 15 - (a) Vizinhança direta de um nó; (b) vizinhança direta de um

elemento; (c) vizinhança direta de uma aresta.

A partir da vizinhança direta de entidades, podemos, então, classificar as

entidades da camada de comunicação. Uma entidade da camada de

comunicação é do tipo proxy quando a sua vizinhança direta é completamente

representada, em relação à malha original, na partição corrente. Caso contrário,

a entidade é do tipo ghost. Na Figura 16a, são destacados nós dos tipos proxy e

(b) (c)(a)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 45

ghost da camada de comunicação de uma partição. Elementos são sempre do

tipo proxy (Figura 16b), uma vez que todos os seus nós e entidades implícitas

adjacentes são representados na partição.

Entidades implícitas são definidas com base em elementos adjacentes.

Dessa forma, para se classificar uma entidade implícita, primeiramente

determina-se o tipo do elemento adjacente ao qual ela está ancorada na partição

corrente. Se o elemento é local, então a entidade também será uma entidade

local na partição. Caso contrário (o elemento é proxy), ela será parte da camada

de comunicação. Nesse caso, a vizinhança direta da entidade é utilizada para

classificá-la como proxy ou ghost, de maneira similar a nós e elementos. Na

Figura 16c, são destacadas as arestas proxies e ghosts da camada de

comunicação de uma partição. As âncoras de entidades (Seção 2.6.1) das

fronteiras compartilhadas originais da partição são mostradas (marca 'x')

próximas às arestas locais ou proxies correspondentes.

Figura 16 - (a) Nós do tipo proxy e ghost são enfatizados; (b) todos os

elementos da camada de comunicação são do tipo proxy; (c) arestas dos

tipos proxy e ghost são destacadas. As âncoras de arestas das fronteiras

compartilhadas originais (marca 'x') indicam a classificação das arestas

correspondentes.

Todo elemento e nó da camada de comunicação possui uma referência

para a entidade real correspondente, representada por uma entidade local na

partição proprietária da entidade (Figura 17). A referência é definida pelo par

ordenado: (owner_partition, owner_handle), onde owner_partition é o

identificador da partição proprietária, e owner_handle é o identificador local da

Ghost

Proxy Proxy

Ghost

Proxy

(a) (b) (c)PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 46

entidade naquela partição. Note que o par (owner_partition, owner_handle) pode

ser usado para identificar univocamente qualquer entidade real na malha

distribuída, sem a necessidade da atribuição explícita de identificadores globais.

Figura 17 - Referências de elemento proxy e nós dos tipos proxy e

ghost para as entidades reais correspondentes.

Ao contrário da abordagem convencional, as entidades da camada de

comunicação são consideradas editáveis. Assim, podem ter topologia e atributos

de simulação modificados pela aplicação cliente, da mesma forma que entidades

locais. Uma vez que a vizinhança direta de entidades locais e proxies é

completa, operações topológicas e computações que dependem de entidades

adjacentes a uma entidade local ou proxy podem ser independentemente

realizadas por cada partição. Isso torna a edição de proxies conveniente para a

redução da comunicação entre partições, através do uso de operações

simétricas, discutidas na Seção 3.2.1, para a inserção de elementos coesivos, e

no Capítulo 4, no contexto da paralelização de simulações de fraturas.

Em ParTopS, a definição de entidades do tipo ghost é empregada para

definir as fronteiras da camada de comunicação. A distinção entre proxies e

ghosts é fundamental para a inserção paralela de elementos coesivos proposta

na Seção 3.2, que a utiliza para resolver ambiguidades de elementos coesivos

localizados próximos às fronteiras das partições. Em relação à representação de

malha distribuída, entidades do tipo ghost possuem duas funções importantes:

garantir a consistência topológica local de cada partição, e prover atributos de

simulação necessários a computações que dependem de entidades adjacentes.

Com isso, a topologia de entidades ghosts deve ser consistente com relação à

malha sequencial de uma partição. Porém, isso não é requerido em relação à

malha global original.

Para garantir a consistência topológica local de uma partição, as relações

de adjacência de entidades ghosts são mapeadas para as entidades adjacentes

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 47

presentes na partição. O mesmo ocorre para as âncoras (Seção 2.6.1) das

entidades implícitas correspondentes, relativas a entidades remotas não

representadas pela partição. Isso é ilustrado na Figura 18, para o caso de nós.

Em uma malha sequencial de TopS, todo nó mantém uma referência para um

dos elementos adjacentes (relação nó-a-elemento). Porém, na malha distribuída

da Figura 18, o nó ghost destacado possuiria uma referência para um elemento

remoto que não é representado pela partição do nó. Nesse caso, a referência do

nó é, então, atribuída a um dos elementos proxies adjacentes a ele. Essa

referência, todavia, difere da correspondente na malha original, representada

pelo nó local da outra partição. A referência de um nó proxy para o elemento

correspondente, por outro lado, é a mesma em ambas as partições. Essa

correspondência garante que entidades proxies são topologicamente

consistentes em relação à malha global.

Figura 18 - Consistência topológica local de um nó proxy e outro

ghost. Embora a malha local de cada partição seja consistente, a referência

do nó ghost ao elemento adjacente é diferente em cada partição. Por outro

lado, a referência do nó proxy é idêntica.

Propriedades adicionais da camada de comunicação são descritas a

seguir:

Todos os elementos adjacentes a um nó ghost são do tipo proxy.

De forma equivalente, nós do tipo ghost não são adjacentes a

elementos locais. Considerando-se que a camada de comunicação

é criada ao redor de todos os nós das fronteiras originais de uma

partição, então a vizinhança direta desses nós é completa. Assim,

se um nó ghost fosse adjacente a um elemento local, a vizinhança

dele seria completa, o que contraria a definição desse tipo de nó.

Uma entidade implícita da camada de comunicação é do tipo ghost

se e somente se todos os nós adjacentes a ela também são ghosts.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 48

Se uma faceta ghost fosse adjacente a um nó proxy ou local, então

todos os elementos adjacentes a ela seriam representados. Como

consequência, as outras entidades implícitas também seriam

representadas localmente, e a vizinhança direta da entidade seria

completa, contrariando a definição de ghost. O mesmo ocorre para

faces e arestas. No caso de um vértice, ele é determinado pelo tipo

do nó correspondente.

3.1.2. Construção da camada de comunicação

Quando uma partição de malha é criada, um subconjunto disjunto dos

elementos e nós correspondentes da malha original é inicialmente atribuído a ela

(Figura 19a). Esses elementos e nós são representados como entidades locais

da partição. Porém, elementos são definidos por um conjunto ordenado de nós,

alguns dos quais podem ter sido atribuídos a partições diferentes. Assim, proxies

são adicionados à partição para representar os nós remotos correspondentes

(Figura 19b). Em seguida, elementos proxies, juntamente com os respectivos

nós, são criados ao redor de todos os nós localizados nas fronteiras da partição

e que possuem elementos adjacentes remotos (Figura 19c). Finalmente, os nós

de elementos proxies que não possuem a vizinhança direta completa

representada pela partição são classificados como ghosts (Figura 19d).

Considerando-se que elementos são representados de forma consistente

entre as partições da malha, entidades implícitas também serão se um critério

uniforme for usado para determinar os elementos aos quais estão ancoradas. O

critério adotado aqui consiste no elemento adjacente com a menor referência à

entidade real correspondente. Assim, o par ordenado (owner_partition,

owner_handle) Seção 3.1.1 – é comparado em ordem lexicográfica,

primeiramente owner_partition, e em seguida owner_handle. Com isso, as

âncoras de entidades locais e proxies implícitas são determinadas de maneira

simétrica sem a necessidade de comunicação entre partições.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 49

Figura 19 - Criação da camada de comunicação. (a) malha original; (b)

malha particionada; (c) partição de malha com elementos e nós proxies

iniciais; (d) partição de malha final; nós proxies que não possuem

vizinhança direta completa são convertidos em ghosts.

3.1.3. Vizinhança de uma partição

Embora a malha distribuída possa ser composta por um grande número de

partições da malha original, em geral, cada partição precisa se comunicar

apenas com um pequeno número de outras localizadas ao redor dela. Dessa

forma, para que a comunicação entre partições possa ser feita de maneira

eficiente, é necessário que cada partição conheça o seu respectivo conjunto de

partições vizinhas. Isso determina o número de mensagens que a partição

espera enviar ou receber de outras durante uma rodada de comunicação.

Em ParTopS, duas partições são consideradas vizinhas se e somente se

uma delas possui uma entidade proxy correspondente a uma entidade local da

outra. Essa definição é conveniente para a representação de malhas de fraturas

(a) (b)

(c) (d)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 50

dinâmicas, pois a inserção de novos elementos coesivos não altera a vizinhança

de uma partição (Seção 3.2), uma vez que cada elemento coesivo criado (ou nó

duplicado devido à inserção do elemento) é atribuído à partição proprietária de

um dos elementos adjacentes à nova entidade. Essa partição é a própria

partição local ou outra que faz parte do conjunto de vizinhas a ela. Com isso, a

vizinhança de uma partição não se modifica, e pode ser determinada apenas

uma única vez, durante a criação da malha distribuída.

Se entidades do tipo ghost fossem consideradas na determinação de

vizinhança de partições, as listas de vizinhança precisariam ser atualizadas

dinamicamente com a inserção de novos elementos coesivos; isso é ilustrado na

Figura 20. Quando um nó ghost é duplicado devido à inserção de elementos

coesivos, o novo nó criado deve ser atribuído a uma partição proprietária.

Porém, essa partição pode não fazer parte da vizinhança da partição que contém

o nó ghost, e assim as listas de vizinhança de ambas as partições devem ser

atualizadas para incluir uma a outra. Na Figura 20, a duplicação do nó destacado

faz com que as partições P1 e P3 se tornem vizinhas. A fim de que as vinhanças

das partições não precisassem ser atualizadas, todas as partições contendo

elementos adjacentes ao nó duplicado deveriam ser previamente consideradas

vizinhas entre si. Por esse motivo, optou-se pela definição de vizinhança

baseada em entidades proxies, para o propósito de simulações de propagação

de fraturas e fragmentação.

Considerando-se que entidades ghosts não influenciam a vizinhança de

uma partição, a partição proprietária de uma entidade ghost pode não fazer parte

do conjunto de vizinhas da partição corrente. Assim, a referência da entidade

ghost para a entidade real correspondente não pode ser usada para atualizar a

entidade ghost. Porém, observa-se que uma entidade ghost pode ser atualizada

a partir de um dos elementos adjacentes a ela, pois toda entidade ghost é

adjacente a um elemento proxy, cuja partição proprietária, por definição, faz

parte da vizinhança da partição corrente. Da mesma forma, na partição

proprietária do elemento proxy, a entidade ghost será representada por uma

entidade local ou proxy, adjacente ao elemento local correspondente. Por

hipótese, a topologia de um elemento é consistente em todas as partições em

que está presente. Então, a entidade ghost possui a mesma identificação em

relação à ordenação topológica local do elemento em ambas as partições. Logo,

requisições de dados para a atualização da entidade ghost são enviadas à

partição proprietária de um dos elementos proxies adjacentes a ele, utilizando-se

a tupla: (owner_partition, owner_element_handle, local_id), onde owner_partition

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 51

é a partição proprietária do elemento proxy, owner_element_handle é o

identificador do elemento naquela partição, e local_id é o índice da entidade

ghost na ordem de incidência local fixa do elemento. A atualização de um nó

ghost é ilustrada na Figura 21.

Figura 20 - Um caso em que a duplicação de um nó afeta as

vizinhanças de partições, quando nós do tipo ghost são considerados na

definição de vizinhança. (a) Malha original; (b) Três partições (P1, P2, P3)

da malha original. A referência do nó ghost em destaque em P1 aponta

para o nó correspondente em P2; (c) Com a duplicação do nó, devido à

inserção de elementos coesivos, o nó criado passa a apontar para o nó

correspondente em P3. Dessa forma, as vizinhanças de P1 e P3 devem ser

alteradas para incluir uma a outra.

P1 P2 P3

{P2} {P1, P3} {P2}

P1 P2 P3

{P2, P3} {P1, P3} {P1, P2}

(a)

(b)

(c)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 52

Figura 21 - Requisição para atualização de um nó ghost (1) é enviada,

a partir de elemento proxy adjacente a ele, à partição proprietária do

elemento. Naquela partição, o nó correspondente é do tipo local ou proxy.

Os atributos do nó (ghost_attrib) são então acessados e retornados à

partição requisitante (2), e o nó ghost é atualizado com os novos valores.

3.1.4. Representação distribuída de atributos

Atributos da simulação numérica associados a nós e elementos da malha

de elementos finitos são representados por conjuntos de atributos densos,

fornecidos por TopS (Seção 2.6). Algumas extensões são adicionadas por

ParTopS para permitir a representação distribuída e a sincronização de atributos

entre partições de malha vizinhas.

Um conjunto distribuído de atributos é criado através de uma função

paralela coletiva, executada concorrentemente por todas as partições de malha.

A criação do conjunto, entretanto, não requer comunicação entre partições. Em

cada partição, a função paralela delega a criação do conjunto para uma função

sequencial correspondente, que constroi conjuntos locais relacionados ao tipo de

entidade desejado. A interface da função paralela é baseada apenas nos tipos

de nós e elementos locais (ex. T3, T6, Tet4, Tet10, Hex8, Hex20, etc.) referentes

à malha sequencial original. Porém, em cada partição, são criados ao mesmo

tempo até três conjuntos de atributos, um para cada representação de entidade

da malha distribuída: local, proxy e ghost. Assim, um conjunto distribuído de

atributos de um nó será representado em cada partição por três conjuntos de

atributos (local proxy e ghost). Da mesma forma, um elemento Tet4, por

Partição

Local

{(owner_element_handle, local_id)1, …}

{ghost_attrib1, …}

1

2

Partição

Remota

1

2

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 53

exemplo, será representado em cada partição por dois conjuntos locais à

partição: Tet4 - local e Tet4 - proxy. Uma vez que todos os conjuntos distribuídos

de atributos são criados pela mesma função paralela, um contador local é usado

por cada partição como identificador global dos conjuntos criados. Os conjuntos

locais de cada partição podem ser acessados independentemente a partir do

identificador único do conjunto distribuído.

A sincronização de um conjunto distribuído de atributos é realizada através

de uma função paralela que depende do tipo de entidade à qual o conjunto está

associado e do identificador global do conjunto. Para que os dados possam ser

transmitidos através da rede de comunicação, uma função de chamada de

retorno (callback function) é registrada pela aplicação junto ao conjunto de

atributos. A função é responsável por empacotar os dados em grupos de bytes

para transmissão, e desempacotá-los ao serem recebidos por uma partição.

Atributos de entidades proxies e ghosts são atualizados separadamente.

Para cada entidade (elemento ou nó) proxy, a partição corrente determina a

partição vizinha proprietária da entidade (owner_partition) e o identificador da

entidade naquela partição (owner_handle). Em seguida, envia para cada partição

vizinha correspondente uma mensagem contendo os identificadores das

entidades remotas (owner_handle). A partição vizinha, então, acessa

diretamente cada entidade, a partir do identificador recebido, e obtém os

atributos do conjunto local a ela. Uma mensagem contendo os dados dos

atributos é retornada à partição corrente, que atualiza as entidades proxies.

Nós do tipo ghost são sincronizados a partir de um dos elementos

volumétricos proxies adjacentes. Para cada nó ghost, a partição corrente escolhe

um elemento proxy adjacente e determina o índice do nó (local_id) na ordem de

incidência local fixa do elemento (Seção 2.6), a partição proprietária do elemento

(owner_partition), e o identificador do elemento naquela partição (owner_handle).

Em seguida, envia para cada partição vizinha correspondente uma mensagem

contendo pares de identificadores de elementos e índices de nós nos elementos

(owner_handle, local_id). A partição vizinha acessa o respectivo elemento local e

então o nó relativo ao índice recebido, e retorna uma mensagem com os

atributos requisitados à partição corrente, que atualiza os nós ghosts. Uma vez

que o nó da partição vizinha pode ser do tipo local ou proxy, é necessário que os

atributos de nós proxies encontrem-se atualizados.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 54

3.2. Inserção dinâmica de elementos coesivos em paralelo

Nesta seção, é proposto um algoritmo baseado em topologia para a

inserção dinâmica de elementos coesivos em paralelo. Diferentemente de outras

abordagens, elementos coesivos são explicitamente representados e podem ter

atributos associados da mesma forma que outros elementos regulares da malha

de elementos finitos; os elementos coesivos são criados sob demanda, e

inseridos apenas onde e quando necessários à simulação, conforme requerido

por modelos coesivos extrínsecos. O algoritmo paralelo pode ser aplicado de

maneira uniforme tanto em malhas 2D quanto 3D, de diferentes tipos de

elementos finitos.

No algoritmo proposto, a representação de malha distribuída de ParTopS,

descrita na Seção 3.1, é combinada com a classificação topológica sistemática

de facetas introduzida por Paulino et al. (2008). São exploradas operações

topológicas que produzem resultados simétricos em todas as partições de malha

para uma mesma entidade topológica. Isso permite eliminar a necessidade de

acesso exclusivo (locks) a entidades por uma única partição, e assim reduzir a

comunicação entre partições para a atualização da topologia da malha.

3.2.1. Operações topológicas simétricas

Uma dificuldade fundamental para a inserção adaptativa de elementos

coesivos em paralelo está relacionada à duplicação de nós localizados nas

fronteiras de uma partição (ou da camada de comunicação), que ocorre durante

a criação de novos elementos coesivos. Para determinar se um nó deve ser

duplicado, e assim manter a topologia da malha consistente, uma partição pode

depender de modificações ocorridas em outra, mas que não são conhecidas por

ela. Isso resulta em dependências cíclicas entre partições, as quais devem ser

resolvidas de forma apropriada.

Para garantir a consistência topológica entre as partições, propõe-se uma

abordagem baseada em operações topológicas simétricas. Uma operação

topológica simétrica é definida, aqui, como uma operação topológica que é

executada sobre um conjunto de entidades compartilhadas por partições de

malha diferentes e que produz resultados idênticos em todas as partições,

indepentemente da ordem na qual as entidades são tratadas ou da partição em

que a operação ocorre.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 55

Com base na representação de malha distribuída de ParTopS, operações

topológicas simétricas são realizadas sobre entidades locais e proxies, de forma

replicada em todas as partições que possuem uma cópia (local ou proxy) de uma

determinada entidade. Considerando-se que os mesmos resultados são obtidos

para a entidade em qualquer partição, não é necessária comunicação entre

partições para garantir a consistência das operações. Assim, a comunicação

para a atualização de entidades proxies é substituída pela replicação de

operações topológicas nas partições. Apenas entidades ghosts são atualizadas,

quando necessário, em relação às entidades locais ou proxies remotas

correspondentes, através da comunicação entre partições vizinhas.

Com essa abordagem, operações topológicas que modificam uma

entidade e, para isso, requerem a completude da vizinhança direta da entidade

são executadas concorrentemente em partições diferentes, de forma consistente

e sem requerer o acesso exclusivo à entidade por uma única partição. Da

mesma forma, evita-se a migração temporária de entidades entre partições para

se garantir a completude da vizinhança direta da entidade.

Uma vantagem de operações simétricas é o tratamento "lock-free"

fornecido para a atualização das entidades topológicas. Como o acesso

exclusivo a uma entidade não é necessário, elimina-se o uso de travas de

acesso exclusivo (ou locks), comumente empregadas para proteger o acesso às

entidades compartilhadas. Como consequência, em geral reduz-se o tempo de

espera em cada partição para acessar a entidade e limita-se a quantidade de

mensagens trocadas entre partições. Embora o emprego de travas de acesso

possa se mostrar conveniente na implementação de outros operadores paralelos

para malhas adaptativas, nesta pesquisa elas não se mostraram necessárias ao

tratamento da inserção de elementos coesivos.

3.2.2. Descrição do algoritmo paralelo

A aplicação cliente é responsável pela identificação do conjunto de facetas

fraturadas onde elementos coesivos serão inseridos. Esse conjunto é então

passado como entrada do algoritmo de inserção paralela de elementos coesivos.

Devido às características simétricas da abordagem proposta, o conjunto de

facetas fraturadas em cada partição inclui tanto facetas locais como proxies, de

maneira consistente entre todas as partições que compartilham uma mesma

faceta. Isso significa que, se uma faceta é fraturada em uma partição, então ela

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 56

é fraturada em todas as partições que possuem uma cópia local ou proxy dela;

caso contrário, ela não é fraturada em nenhuma partição. As facetas fraturadas

utilizadas para ilustrar o algoritmo proposto são mostradas na Figura 22.

Figura 22 - Exemplo de malha distribuída, utilizada para demonstrar o

algoritmo para a inserção adaptativa de elementos coesivos em paralelo.

As facetas fraturadas (determinadas pela aplicação numérica) são

destacadas.

Uma vez que as facetas fraturadas são identificadas, a inserção adaptativa

de elementos coesivos em paralelo é executada. O algoritmo proposto consiste

de três fases:

Fase 1. Elementos coesivos são inseridos em facetas locais e proxies de

cada partição, utilizando-se um algoritmo sequencial que produz resultados

topológicos simétricos para cada faceta, em qualquer partição.

Fase 2. As referências de entidades proxies criadas, elementos e nós, são

atualizadas com relação às entidades reais correspondentes.

Fase 3. As entidades ghosts afetadas pela inserção dos novos elementos

coesivos são atualizadas em relação às entidades reais correspondentes.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 57

As três fases do algoritmo são detalhadas nas seguintes subseções.

3.2.2.1. Inserção sequencial de elementos coesivos (Fase 1)

Na primeira fase do algoritmo (Fase 1), elementos coesivos são inseridos

nas facetas fraturadas locais e proxies de cada partição, com base na

classificação topológica de facetas de Paulino et al. (2008), discutida na Seção

2.6.3. Segundo essa classificação, quando um novo elemento coesivo é

adicionado à malha, pode ser necessário duplicar nós existentes. Neste ponto,

faz-se a seguinte observação: suponhamos que os mesmos resultados

topológicos possam ser obtidos para um conjunto de entidades em todas as

partições de malha, independentemente da ordem em que elementos coesivos

são inseridos localmente em cada partição, conforme a definição de operação

simétrica (Seção 3.2.1). Então, a topologia de entidades locais e proxies será

consistente para toda a malha de elementos finitos após a execução da Fase 1,

sem a necessidade de comunicação entre partições para sincronizá-la. Com

base na definição de malha distribuída de ParTopS (Seção 3.1), entretanto, nós

do tipo ghost não são duplicados neste momento, devido à incompletude da

vizinhança direta das entidades. Eles serão atualizados separadamente durante

a Fase 3 do algoritmo.

Para garantir um comportamento topológico simétrico entre as partições da

malha distribuída, adicionam-se duas restrições à definição original da

classificação de facetas de Paulino et al. (2008). A primeira requer que, em

qualquer partição onde um nó duplicado esteja presente, as cópias nodais

correspondentes possuam referência a um mesmo elemento adjacente (em

TopS, e assim ParTopS, todo nó possui uma referência a um dos elementos

adjacentes a ele - relação nó-a-elemento (Seção 2.6)). Isso pode ser obtido com

o emprego de um critério uniforme para a seleção do elemento referenciado. Por

simplicidade, pode-se escolher, dentre os elementos adjacentes ao nó no

momento da inserção de um elemento coesivo, o que possui o menor

identificador global de elemento: (owner_partition, owner_handle) – Seção 3.1.

Identificadores globais são comparados em ordem lexicográfica, primeiramente

pela partição proprietária (owner_partition) da entidade, e em seguida pelo

identificador local da entidade naquela partição (owner_handle).

A segunda restrição requer que todas as cópias de um novo nó ou

elemento coesivo sejam atribuídas, consistentemente, à mesma partição

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 58

proprietária. No caso de um nó, essa restrição é obtida atribuindo-se o nó à

partição proprietária do elemento ao qual ele faz referência. Uma vez que todas

as cópias do nó possuem referência para o mesmo elemento real (conforme a

primeira restrição), então a partição proprietária do nó é naturalmente

consistente para todas as suas cópias. Elementos coesivos são atribuídos à

mesma partição de um dos dois elementos volumétricos adjacentes a eles.

Neste caso, o elemento volumétrico representativo é escolhido com base no

mesmo critério uniforme utilizado na primeira restrição (menor valor do par

(owner_partition, owner_handle)). As âncoras que definem entidades implícitas

(Seção 2.6.1) também são atualizadas com base no mesmo procedimento.

A Fase 1 do algoritmo é ilustrada na Figura 23, para duas partições

vizinhas. Três elementos coesivos são inseridos ao redor de um nó presente em

ambas as partições (Figura 23a). Embora a ordem de inserção dos elementos

seja diferente em cada partição, os mesmos resultados topológicos são obtidos

para todas as entidades locais e proxies envolvidas na operação (Figura 23b).

Note que os mesmos elementos são referenciados pelos novos nós criados,

independentemente da partição de malha (indicados pela marca "x" na Figura

23), como resultado das restrições adicionais à classificação de facetas.

Considerando-se a definição de vizinhança de partições de ParTopS

(Seção 3.1.3), as operações topológicas realizadas não alteram o conjunto de

vizinhança de cada partição, pois as entidades criadas são atribuídas a partições

já pertencentes ao conjunto. Com isso, não é necessário que uma partição se

comunique com outras a fim de atualizá-lo.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 59

Figura 23 - Fase 1 da inserção de elementos coesivos. Três elementos

são inseridos (a - c) em facetas de duas partições vizinhas. Embora a

ordem de inserção seja diferente, os mesmos resultados topológicos são

obtidos para as entidades locais e proxies de ambas as partições (c). As

marcas 'x' identificam o elemento referenciado por cada nó modificado.

Nós ghosts não são duplicados; eles serão atualizados na Fase 3.

3.2.2.2. Atualização das entidades proxies criadas (Fase 2)

Ao final da Fase 1, a topologia de entidades locais e proxies encontra-se

consistente entre todas as partições de malha. Entretanto, as referências das

novas entidades proxies criadas (elementos coesivos e nós duplicados) para as

entidades reais correspondentes ainda precisam ser determinadas (Figura 24).

Referências para entidades reais fazem parte da definição de malha distribuída

de ParTopS (conforme Seção 3.1.1), e devem estar consistentes para que

futuras operações topológicas e a sincronização de atributos de simulação

possam ser realizadas. A partição proprietária de uma nova entidade proxy foi

determinada durante a Fase 1, uma vez que ela corresponde à partição de um

dos elementos adjacentes à entidade. Porém, o identificador local da entidade

com respeito à partição proprietária não é conhecido pela partição corrente. Essa

informação deve ser requisitada à partição proprietária.

(a) (b) (c)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 60

Figura 24 - Malha completa após a Fase 1. A partição escolhida como

proprietária de um novo elemento coesivo ou nó duplicado é a mesma de

um dos elementos volumétricos adjacentes ao coesivo (indicado pelas

marcas 'x'). Os elementos coesivos estão destacados na figura. Os proxies

correspondentes são representados por linhas tracejadas. Embora a

topologia de entidades locais e proxies esteja consistente neste ponto, as

referências para as entidades reais ainda devem ser computadas.

Dessa forma, a Fase 2 do algoritmo paralelo para a inserção de elementos

coesivos é responsável pela atualização das referências às entidades reais

correspondentes dos novos elementos coesivos e nós duplicados do tipo proxy.

Isso pode ser feito da seguinte forma: uma lista de requisições de referências é

enviada pela partição corrente a cada partição vizinha a ela. As partições

vizinhas então acessam as entidades reais correspondentes e retornam os

respectivos identificadores locais. Finalmente, a partição corrente atualiza as

referências das novas entidades proxies com os valores recebidos.

É importante notar que as próprias entidades proxies não podem ser

usadas na requisição das referências que lhes faltam. Entretanto, observa-se

também que qualquer elemento (coesivo ou volumétrico) pode ser univocamente

identificado por um dos elementos adjacentes a ele. Isso é expresso pela tripla

(owner_partitionadj, owner_element_handleadj, local_id), onde owner_partitionadj é

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 61

o identificador da partição proprietária do elemento adjacente,

owner_element_handleadj é o identificador do elemento adjacente naquela

partição, e local_id é o índice da faceta-uso incidente ao novo elemento coesivo

proxy, na ordem de incidência fixa do elemento adjacente (Seção 3.1.1). De

maneira equivalente, um nó proxy também pode ser identificado por um dos

elementos adjacentes. Com isso, elementos adjacentes são utilizados para obter

as referências faltantes das entidades proxies criadas.

Como consequência da Fase 1 do algoritmo, a partição proprietária de um

elemento coesivo corresponde à partição proprietária de um dos elementos

volumétricos adjacentes a ele. O elemento adjacente representativo é, então,

usado para a requisição da referência do elemento coesivo proxy à entidade real

correspondente. Da mesma forma, utiliza-se o elemento adjacente referenciado

por um novo nó proxy na requisição da referência do nó à entidade real

correspondente, considerando-se que, durante a Fase 1, o nó real foi atribuído à

mesma partição do elemento.

As mensagens trocadas entre partições vizinhas para atualizar as

referências das entidades proxies criadas são ilustradas na Figura 25. A

comunicação é iniciada pela partição corrente (local). A partição envia uma

mensagem consistindo de pares (owner_element_handleadj, local_id) a cada

partição vizinha (remota) que é proprietária (owner_partitionadj) dos elementos

adjacentes representativos das entidades proxies a serem atualizadas. A

mensagem de retorno contém os identificadores locais das entidades reais nas

partições proprietárias correspondentes.

Figura 25 - Diagrama de mensagens trocadas entre duas partições

para a atualização das referências de entidades proxies.

3.2.2.3. Atualização das entidades ghosts afetadas (Fase 3)

A última fase (Fase 3) do algoritmo paralelo é responsável pela atualização

de nós do tipo ghost afetados por duplicações de nós ocorridas em outras

partições, resultantes da inserção dos novos elementos coesivos (Figura 26).

Partição

Local

{(owner_element_handleadj, local_id)1, …}

{owner_entity_handle1, …}

1

2Partição

Remota

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 62

Devido à incompletude da vizinhança direta de nós do tipo ghost, as duplicações

nodais não podem ser determinadas localmente por uma partição. Por exemplo,

um elemento coesivo pode ter sido inserido em uma faceta remota que não é

conhecida pela partição corrente, mas que implica na duplicação do nó real que

corresponde a uma entidade ghost da partição. Na Figura 26, os nós ghosts

afetados pela duplicação de nós em outras partições são mostrados. Para

manter a topologia da malha da partição corrente consistente com a malha

global distribuída, pode ser necessário ao procedimento de atualização de

ghosts substituir a referência do nó ghost para uma nova entidade real

correspondente, ou mesmo duplicá-lo em novos nós ghosts distintos.

Figura 26 - Malha completa antes do início da Fase 3. Os nós ghosts

de cada partição afetados pela duplicação de nós ocorridas em outras

partições são destacados na figura. Esses nós precisam ser atualizados.

Como a partição corrente não pode determinar exatamente os nós ghost

afetados, que devem ser atualizados, uma forma simples de se garantir a

consistência topológica de nós ghosts consiste na atualização de todos em

relação às entidades reais correspondentes. Porém, é comum que, a cada passo

da simulação de fraturas, um pequeno número de elementos coesivos seja

adicionado à malha distribuída, em relação ao número total de elementos de

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 63

cada partição. Assim, é desejável uma abordagem proporcional ao número de

entidades afetadas.

Para isso, uma partição contendo nós locais ou proxies, cuja duplicação na

Fase 1 tenha afetado nós ghosts remotos, deve notificar as outras sobre as

alterações ocorridas. Contudo, a representação de malha distribuída de ParTopS

não prevê que entidades locais mantenham referências para as suas cópias

proxies e ghosts, apenas no sentido inverso. Isso evita o custo de

armazenamento e manutenção de listas explícitas de referências dinâmicas. Por

outro lado, requer que a comunicação relacionada a uma entidade real seja

iniciada pelas partições que possuem proxies ou ghosts dela.

No contexto da inserção de elementos coesivos, e a fim de se evitar a

necessidade de listas dinâmicas, optou-se por uma abordagem para a

atualização de nós ghosts baseada em elementos. Nela, em vez de cada nó

local de uma partição armazenar referências para entidades ghosts remotas, são

os elementos locais que possuem referências às partições contendo elementos

proxies correspondentes. Com isso, os elementos locais são responsáveis por

informar a outras partições sobre alterações em nós adjacentes que

potencialmente sejam representados por elas como ghosts. A vantagem dessa

abordagem é que referências existentes para elementos proxies não precisam

ser atualizadas quando novos elementos coesivos são inseridos na malha

distribuída, pois nenhum elemento proxy é substituído ou removido da malha

durante esse processo. Assim, não é necessário manter listas de referências

dinâmicas. Também, a vizinhança de cada partição não precisa ser

recomputada, considerando-se a definição da Seção 3.1.3, pois a atualização de

atributos de entidades ghosts pode ser feita a partir dos elementos proxies

adjacentes (Seção 3.1.3).

Para mostrar que a atualização baseada em elementos pode ser

empregada de forma a garantir a consistência de nós ghosts, observa-se o

seguinte. Um nó ghost faz parte da camada de comunicação de uma partição.

Logo, ele deve ser adjacente a pelo menos um elemento do tipo proxy, e todo

elemento proxy corresponde a um elemento local na sua partição proprietária. O

elemento local é adjacente a nós locais ou proxies, sendo que um deles

corresponde ao nó ghost considerado. Pela simetria imposta na Fase 1 do

algorimo, qualquer duplicação de um nó local ou proxy é consistente entre todas

as partições da malha. Então, se o nó real correspondente ao ghost tiver sido

duplicado em alguma partição, ele também será na partição proprietária do

elemento proxy adjacente ao nó ghost. Com isso, o nó ghost será afetado pela

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 64

duplicação nodal se e somente se o elemento local na partição proprietária do

elemento proxy adjacente ao nó ghost tiver o nó local ou proxy correspondente

afetado.

O procedimento para a atualização da topologia de entidades ghosts é

descrito a seguir. Inicialmente, para cada nó duplicado na partição corrente,

determinam-se os elementos locais que são adjacentes a ele e que possuem

elementos proxies em outras partições (Figura 27). Entre os elementos locais

adjacentes ao nó, vários deles podem possuir proxies em uma mesma partição

remota. Porém, apenas um por partição é selecionado. Em seguida, uma

mensagem é enviada às partições dos elementos proxies correspondentes, a fim

de notificá-las sobre as duplicações nodais. A mensagem consiste de tuplas

(owner_element_handle, local_id), onde owner_element_handle é o identificador

de um elemento local, e local_id é o índice de um nó na ordem de incidência fixa

do elemento (Figura 28). Quando a notificação é recebida por uma partição,

cada identificador de elemento é mapeado para o elemento proxy

correspondente, e o nó relativo ao índice local_id é acessado. Se o nó for do tipo

ghost, então ele é marcado como desatualizado (outdated) (Figura 27).

Para cada elemento proxy adjacente a um nó ghost desatualizado (Figura

29), uma requisição de dados nodais é criada. A requisição consiste da tupla

(owner_element_handle, local_id), onde owner_element_handle é o identificador

local do elemento em sua partição proprietária, e local_id é o índice do nó na

ordem de incidência fixa do elemento (Seção 3.1.1). Então, o conjunto de

requisições é enviado às partições proprietárias dos elementos proxies (Figura

28). Note que mais de uma requisição para um mesmo nó ghost pode ser

emitida, quando há vários elementos proxies adjacentes a ele. Entretanto, isso

garante que a duplicação de nós seja resolvida de maneira consistente para

cada elemento.

Finalmente, a partição proprietária de cada elemento proxy retorna os

dados nodais requisitados (Figura 28), e os nós ghosts são atualizados. Os

dados de um nó consistem de valores (owner_node_handle, (x, y, z)), onde

owner_node_handle é o identificador do nó na sua partição proprietária, e (x, y,

z) é a posição do nó. Embora um nó ghost possa corresponder a um nó do tipo

proxy na partição proprietária do elemento proxy adjacente a ele, o nó proxy já

foi atualizado durante a Fase 2, e, assim, os seus dados encontram-se

consistentes. Após a atualização de nós ghosts, as âncoras (Seção 2.6.1) que

definem entidades implícitas do tipo ghost são ajustadas de forma a se manter a

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 65

consistência topológica local da partição corrente. A malha final é mostrada na

Figura 30.

Figura 27 - Elementos locais que são incidentes a nós duplicados e

têm elemento proxy correspondente em outra partição são destacados.

Esses elementos notificam partições vizinhas sobre duplicações nodais

que possam afetar nós ghosts. Porém, apenas um elemento por nó

duplicado e partição vizinha é necessário (os de origem das setas

tracejadas). Nós ghosts de elementos proxies notificados são marcados

como desatualizados. Os nós ghosts destacados com bordas contínuas

devem ser atualizados.

Figura 28 - Diagrama de mensagens trocadas entre a partição

corrente (local) e uma vizinha a ela (remota), para atualizar entidades

ghosts afetadas pela duplicação de nós ocorrida na partição vizinha.

{(owner_element_handle, local_id)1, …}

{(owner_element_handle, local_id)1, …}

{(owner_node_handle, x, y, z)1, …}

1

2

3

Partição

Local

Partição

Remota

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 66

Figura 29 - Para cada elemento proxy incidente a nó ghost

desatualizado, uma requisição do nó real correspondente é enviada à

partição proprietária do elemento. Requisições nodais são indicadas por

marcas quadradas ao lado de nós ghosts.

Figura 30 - Malha final após a inserção paralela de elementos

coesivos. A topologia da malha distribuída encontra-se consistente.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 67

A implementação da abordagem de atualização de nós ghosts baseada em

elementos adjacentes segue a filosofia de representação compacta de ParTopS.

Com isso, em vez de armazenar o conjunto de todas as partições que possuem

proxies para um determinado elemento local, um valor inteiro é empregado para

indicar a existência de proxies do elemento. Assim, quando há uma única

partição que contém um proxy para o elemento, o que corresponde ao caso mais

comum, o valor inteiro é igual ao identificador da partição. Se houver duas ou

mais partições, um valor negativo é usado como contador para indicar o número

de partições. Nesse caso, notificações de duplicações nodais relacionadas ao

elemento são enviadas a todas as partições vizinhas. Finalmente, se nenhuma

partição possui um proxy para o elemento, o valor inteiro é igual a zero.

3.2.3. Interface para a inserção de elementos coesivos

O suporte à inserção paralela de elementos coesivos é fornecido à

aplicação cliente através de uma função paralela coletiva, executada

concorrentemente por cada partição. A função recebe como parâmetros: o tipo

dos elementos coesivos a serem inseridos e o conjunto de facetas fraturadas na

partição corrente, incluindo tanto as locais quanto proxies. Do ponto de vista da

aplicação cliente, a função sequencial original, de assinatura similar, é

substituída pela versão paralela.

A função paralela não retorna os elementos coesivos que foram inseridos;

em vez disso, a aplicação é notificada sobre cada elemento coesivo criado ou nó

duplicado, por funções de chamada de retorno (callback functions) - ou funções

de chamada de volta - registradas na representação de malha distribuída. A

interface de chamadas de retorno de duplicações nodais é a mesma de TopS,

mas as funções também são chamadas para entidades proxies e ghosts.

Quando notificada, a aplicação deve criar os atributos relativos aos novos nós e

elementos. A notificação de duplicações de nós locais e proxies ocorre durante a

Fase 1 do algoritmo paralelo, enquanto que atributos de nós ghosts afetados são

atualizados na Fase 3. Ao final do algoritmo, a aplicação é notificada sobre os

elementos coesivos criados.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 68

3.2.4. Análise de escalabilidade

A escalabilidade de um sistema paralelo (Foster, 1995; Quinn, 2004) está

relacionada à capacidade de se utilizar de maneira eficiente uma quantidade

maior de recursos para resolver problemas maiores ou mais complexos.

Diversas abordagens existem para a medição de escalabilidade em diferentes

circunstâncias (Foster, 1995; Quinn, 2004; Kumar & Gupta, 1994). Nesta seção,

a métrica de isoeficiência (Grama et al., 1993) é empregada para avaliar a

escalabilidade do algoritmo proposto. Essa métrica relaciona o tamanho do

problema paralelo com o número de processadores necessários para se manter

a eficiência de um sistema. Sem perda de generalidade, um modelo

bidimensional é usado como exemplo. Resultados similares podem ser obtidos

para modelos tridimensionais.

Considere o tempo de execução T(n, p) de um sistema paralelo com

tamanho de problema n para p processadores. O tempo sequencial é T1 =

T(n, 1), e T0 = T0(n, p) é o tempo adicional introduzido devido à implementação

paralela. Então, a eficiência parelela do sistema (Grama et al., 1993) é definida

como E = 1 / (1 + T0/T1); ou de forma equivalente: T1 = (E / (1 - E)).T0 = K.T0.

Para se manter a eficiência, o tempo de computação sequencial T1 deve

aumentar a uma taxa maior ou igual ao tempo adicional paralelo T0, ou seja,

T1 ≥ K.T0. Paulino et al. (2008) demonstram a escalabilidade linear da inserção

sequencial de elementos coesivos, em função do número de elementos

inseridos. Dessa forma, o tempo da execução sequencial pode ser expresso por:

T1 = n.tc, onde n é o número de elementos coesivos inseridos, e tc é o custo

médio da operação de inserção de um elemento coesivo. Assim, a eficiência

paralela é mantida quando n ≥ C.T0, onde C = K / tc.

No algoritmo paralelo de inserção de elementos coesivos, o custo adicional

paralelo (T0) se deve à replicação de operações topológicas na camada de

comunicação e à comunicação entre partições vizinhas, como ilustrado na Figura

31. Observa-se que a replicação de operações topológicas é proporcional ao

tamanho da camada de comunicação, em média equivalente a . Por sua

vez, o número de mensagens entre partições vizinhas durante a execução do

algoritmo é constante, e o tamanho de cada mensagem proporcional ao tamanho

da camada de comunicação. Com isso, o custo paralelo de um processador

pode ser expresso por: , onde c1, c2, e c3

são multiplicadores constantes, ts é o tempo médio de inicialização da

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

3 ParTopS: suporte topológico compacto em paralelo para representação de fraturas 69

comunicação para o envio de uma mensagem, e tw é o tempo médio para se

enviar uma unidade de dados. O custo paralelo total (para todos os

procesadores) é então: . Nesse modelo,

assume-se que a carga dos processadores é balanceada entre eles, e, assim, os

tempos ociosos (idle times) de cada processador não são significativos.

Para um grande número de processadores, a eficiência paralela é mantida

quando o crescimento assintótico do tamanho do problema n é maior ou igual ao

de T0. Considerando-se que o crescimento de T0 é proporcional a , obtém-se

a seguinte relação: , que leva a: . Logo, quando n cresce

proporcionalmente a p, mantêm-se a eficiência do algoritmo paralelo, e, assim, a

escalabilidade linear em relação ao número de processadores é esperada.

Figura 31 - Representação de malha bidimensional de dimensões

N x N, decomposta em P partições. O padrão de comunicação

correspondente a uma partição é destacado.

P

N

N

N

P

N

P

N

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelos

Este capítulo descreve a utilização do suporte topológico ParTopS no

desenvolvimento análises numéricas em paralelo. Como exemplo, discute-se a

paralelização de uma aplicação sequencial existente para simulações de fraturas

dinâmicas. A aplicação, originalmente implementada com base na representação

de malha sequencial de TopS (Celes, Paulino & Espinha, 2005a, b; Paulino et

al., 2008), é paralelizada pela introdução do conjunto de extensões paralelas

fornecidas por ParTopS (Espinha et al., 2009). Um número pequeno de

modificações é necessário ao código original para que a análise numérica seja

executada em um ambiente paralelo de memória distribuída.

4.1. Requisitos de sincronização de entidades

Uma característica de análises dinâmicas de elementos finitos é a

interdependência de dados. A computação de um passo de tempo da simulação

numérica depende de resultados do passo anterior. Da mesma forma,

computações intermediárias de um passo também dependem de resultados

anteriores. Isso restringe a capacidade de paralelização de uma simulação, uma

vez que a computação de dados dependentes não pode ser realizada

concorrentemente. Pontos de sincronização ocorrem quando os dados

requeridos a uma computação ainda não se encontram disponíveis à partição

corrente, que deve aguardar até que eles sejam recebidos. Com isso, as

oportunidades de paralelização da simulação residem na decomposição dos

dados do domínio geométrico, que podem ser processados de forma

concorrente entre os pontos de sincronização. Como exemplo, a computação de

tensões nodais, utilizada na determinação de facetas fraturadas, requer que os

deslocamentos nodais tenham sido previamente computados. Considerando que

os deslocamentos encontram-se consistentes em cada partição, as tensões

nodais podem então ser calculadas concorrentemente por cada partição.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 71

Uma partição de malha corresponde a uma unidade sequencial de

computação. No interior dela, a computação numérica é realizada de maneira

independente a partir dos dados locais à partição. Porém, atributos de simulação

associados a entidades nas fronteiras compartilhadas com outras partições

devem se manter consistentes entre as partições envolvidas. Esses atributos são

utilizados na computação dos resultados das próprias entidades e de outras

adjacentes a elas. Com isso, a comunicação entre partições vizinhas pode se

tornar necessária para sincronizar os dados correspondentes.

A camada de comunicação adicionada por ParTopS provê as entidades

adjacentes necessárias a computações locais em entidades das fronteiras

originais de cada partição de malha. Para se manter a consistência dos dados

das entidades da camada de comunicação com as partições vizinhas, duas

classes de abordagens são avaliadas. A primeira corresponde à estratégia

convencional, na qual entidades da camada de comunicação são utilizadas

apenas para a leitura de dados, e os resultados de uma computação são

armazenados somente nas entidades locais de cada partição (note que a

computação pode usar dados fornecidos por entidades proxies adjacentes). Com

isso, os resultados de uma entidade são determinados exclusivamente por uma

única partição (a proprietária da entidade), correspondendo a um mecanismo

implícito de travas de acesso exclusivo (locks) (Andrews, 2000) à entidade.

Considerando-se que os dados das entidades adjacentes às locais encontram-se

disponíveis na partição corrente, por meio da camada de comunicação, a

computação pode proceder de forma sequencial, sem problemas de

concorrência para a atualização de entidades. Por outro lado, as entidades da

camada de comunicação devem ser sincronizadas com as entidades reais

correspondentes sempre que dados modificados precisarem ser utilizados.

A segunda classe de abordagens explora as propriedades da camada de

comunicação definida por ParTopS. Dessa forma, as entidades da camada de

comunicação são consideradas editáveis, e resultados de computações são

calculados e armazenados nelas, de forma replicada com as entidades reais

correspondentes, sempre que conveniente à aplicação. Uma vez que dados

associados a uma mesma entidade podem ser computados simultaneamente por

partições de malha diferentes, é preciso garantir que eles se encontrem

consistentes entre elas. Para isso, propõe-se o uso de computações simétricas

entre as partições, de maneira similar às operações topológicas empregadas

pelo algoritmo paralelo de inserção de elementos coesivos do Capítulo 3. Com

isso, o número de pontos de sincronização de dados entre partições é reduzido e

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 72

a estrutura da simulação paralela simplificada. A simetria de computações é

discutida na Seção 4.4.

Note que não é preciso atualizar todos os atributos de uma entidade

topológica em cada ponto de sincronização, mas somente aqueles que devem

se encontrar consistentes para a computação seguinte. A sincronização pode ser

postergada até que os dados sejam realmente necessários à simulação, ou

realizada de maneira assíncrona, enquanto computações independentes são

executadas. No entanto, a aplicação deve bloquear a execução caso os dados

requeridos não estejam disponíveis no momento esperado.

4.2. Estrutura da simulação sequencial

A estrutura do fluxo de controle básico de uma simulação numérica de

fraturas dinâmicas, para pequenas deformações, é resumida na Figura 32; a

aplicação numérica sequencial correspondente foi desenvolvida por Park (2009).

A integração temporal é baseada no método de diferenças centrais (método

explícito) (Belytschko et al., 2000), e o modelo constitutivo Park-Paulino-Roesler

(PPR) (Park et al., 2009; Park, 2009) é utilizado com um modelo de zona coesiva

extrínseco (Camacho & Ortiz, 1996; Ortiz & Pandolfi, 1999; Park et al., 2009). A

estrutura da simulação sequencial apresentada na Figura 32 é utilizada como

base da aplicação paralela discutida nas próximas seções.

Inicialize o modelo de elementos finitos

Para cada passo de tempo

1 - Compute o valor das condições de contorno

2 - Verifique a inserção de novos elementos coesivos

2.1 - Compute as tensões nodais

2.2 - Determine as facetas fraturadas

2.3 - Insira elementos coesivos

2.4 - Compute atributos de novos elementos coesivos

2.5 - Atualize os valores das massas nodais

3 - Compute o vetor de forças nodais internas

4 - Compute o vetor de forças coesivas

5 - Atualize as acelerações e velocidades nodais

6 - Atualize as forças externas e energias nos nós

7 - Aplique as condições de contorno aos nós

8 - Atualize os deslocamentos nodais

Figura 32 - Estrutura do fluxo de controle de uma simulação

sequencial de propagação dinâmica de fraturas.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 73

A simulação da propagação de fraturas ocorre ao longo de um número de

passos de tempo discretos (Figura 32). Em cada passo, a aplicação numérica

deve determinar as facetas que serão fraturadas e inserir os elementos coesivos

correspondentes (linha 2). A determinação de facetas fraturadas é feita com

base nos valores de tensão (stress) dos nós adjacentes; assim, as tensões

nodais devem ser primeiramente calculadas (linha 2.1). Os valores de tensão

(stress) são computados nos pontos de Gauss de cada elemento volumétrico, a

partir de atributos dos nós adjacentes, e então extrapolados novamente para os

nós do elemento. As tensões nodais finais são obtidas pela média das

contribuições dos elementos adjacentes a cada nó. Com as tensões dos nós

adjacentes calculadas, as facetas internas da malha (interfaces entre elementos

volumétricos) são avaliadas em relação a um critério de fratura (linha 2.2), e toda

faceta para a qual o critério de fratura é alcançado é marcada como fraturada no

passo corrente. Em seguida, elementos coesivos são criados sob demanda e

inseridos nas facetas fraturadas (linha 2.3). Os atributos dos nós duplicados são

copiados do nó anterior correspondente, através de funções de chamadas de

retorno (callbacks), registradas pela aplicação e chamadas por TopS, para cada

duplicação de nó. Atributos de novos elementos coesivos (linha 2.4) são

calculados a partir das tensões associadas aos nós adjacentes. As massas de

nós duplicados também são atualizadas; a massa de um nó corresponde ao

somatório das contribuições de massa dos elementos volumétricos adjacentes.

Após as operações relativas à verificação da inserção de elementos

coesivos (linha 2), computações adicionais são realizadas a fim de se atualizar o

estado da simulação necessário ao próximo passo de tempo ou exportado como

saída da simulação. O vetor de forças nodais internas (linha 3) é calculado a

partir do somatório das contribuições de forças dos elementos volumétricos

adjacentes a cada nó da malha de elementos finitos. A contribuição de um

elemento é baseada na rigidez (stiffness) do elemento e deslocamentos dos nós

adjacentes. Forças coesivas (linha 4), por outro lado, são calculadas apenas

para nós adjacentes a elementos coesivos. Primeiramente, separações coesivas

são computadas nos pontos de Gauss de cada elemento coesivo, a partir dos

deslocamentos dos nós adjacentes. Então, as separações e outros atributos do

elemento (ex. material e história de carregamento) são usados na computação

de trações e forças correspondentes, e a contribuição do elemento é somada a

cada nó adjacente. Finalmente (linhas 6 a 8), os valores restantes (acelerações,

velocidades, energia, condições de contorno e deslocamentos nodais) são

calculados em cada nó, com base nos atributos relativos aos próprios nós.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 74

4.3. Padrões de computação

Quatro padrões de computação básicos, relacionados à origem e o destino

de dados associados a entidades topológicas, podem ser identificados em uma

análise de elementos finitos regular. São eles: nó-a-nó, elemento-a-elemento,

nós-a-elemento e elementos-a-nó. Computações dos tipos nó-a-nó (Figura 33a)

e elemento-a-elemento (Figura 33b) ocorrem de maneira local aos nós ou

elementos correspondentes. Assim, dependem apenas dos dados das próprias

entidades que modificam. No padrão nós-a-elemento, os resultados de um

elemento são calculados a partir das contribuições de dados associados aos nós

adjacentes a ele (Figura 33c). Uma vez que os dados nodais estejam

consistentes, a computação ocorre de maneira local ao elemento destino. Por

outro lado, no padrão elementos-a-nó, os dados correspondentes a um elemento

contribuem para os resultados armazenados nos nós adjacentes a ele (Figura

33d). Quando uma estrutura topológica apropriada é empregada, os resultados

nodais podem ser calculados percorrendo-se o conjunto de nós da malha de

elementos finitos. Para cada nó, os elementos adjacentes são visitados e as

contribuições dos elementos são calculadas e combinadas no nó. Com base na

representação de malha convencional de elementos finitos (tabelas de nós e

conectividades nodais de elementos), entretanto, esse padrão é tradicionalmente

implementado percorrendo-se o conjunto de elementos da malha. Então, os

dados correspondentes a cada elemento são calculados e adicionados aos nós

adjacentes, com base na conectividade nodal do elemento.

Computações mais complexas podem depender de entradas mistas e

gerar resultados segundo padrões diferentes. Porém, essas computações

podem ser decompostas em outras computações menores baseadas nos

padrões básicos, e cada parte analisada individualmente. A classificação em

padrões de computação fornece uma maneira sistemática e abstrata para se

identificarem os requisitos de sincronização de atributos para a manutenção da

consistência de dados compartilhados entre partições de malha. Com isso, a

necessidade de sincronização é determinada apenas a partir da estrutura da

computação, de forma independente do entendimento da simulação numérica.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 75

Figura 33 - Padrões de computação. (a) nó-a-nó: o resultado de um nó

depende apenas dele próprio; (b) elemento-a-elemento: o resultado de um

elemento depende apenas dele próprio; (c) nós-a-elemento: o resultado de

um elemento depende dos nós adjacentes; (d) elementos-a-nó: o resultado

de um nó depende das contribuições relativas aos elementos adjacentes.

4.4. Computações simétricas

Uma computação é definida como simétrica quando produz os mesmos

resultados para uma entidade topológica compartilhada por partições diferentes,

independentemente da partição onde é executada. Considerando-se que os

resultados da computação são idênticos em qualquer partição, a comunicação

entre partições para sincronizar os dados alterados da entidade topológica pode

ser eliminada. Com isso, emprega-se conceito equivalente às operações

topológicas discutidas na Seção 3.2.1, com a substituição da comunicação entre

partições por computações replicadas, realizadas tanto para entidades locais

quanto proxies e ghosts de cada partição.

Entretanto, operações binárias de ponto flutuante, como adição e

multiplicação, não são associativas (Heath, 2002) e, assim, resultados diferentes

podem ser obtidos em função da ordem em que as operações são realizadas.

Dessa forma, computações executadas concorrentemente por partições

diferentes para uma mesma entidade topológica podem produzir resultados

divergentes, se a ordem das operações de ponto flutuante não for idêntica em

todas as partições. As divergências numéricas, mesmo que pequenas, podem

fazer com que decisões diferentes sejam tomadas por cada partição, por

exemplo, se uma faceta deve ser fraturada. Essas divergências também podem

se propagar ao longo dos passos de simulação, afetando a convergência da

simulação.

nónó elementoelemento elementos nónós elemento

(a) (b) (c) (d)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 76

Se pudermos garantir uma ordenação consistente das operações de ponto

flutuante, então resultados idênticos (ou simétricos) serão obtidos para uma

entidade em todas as partições, assumindo-se que a mesma representação de

ponto flutuante é utilizada por elas. Para isso, primeiramente observam-se as

características de simetria dos padrões de computação discutidos na seção

anterior. Computações dos tipos nó-a-nó e elemento-a-elemento são

naturalmente independentes de ordem e, assim, simétricas, uma vez que

requerem apenas o acesso local à própria entidade. No padrão nós-a-elemento,

os resultados de um elemento dependem da ordem em que as contribuições dos

nós adjacentes são combinadas. Contudo, a ordenação nodal é imposta pela

topologia local fixa do elemento, que é consistente entre todas as partições que

possuem uma cópia da entidade. Dessa forma, computações do tipo nós-a-

elemento também são simétricas. Por outro lado, em uma computação do tipo

elementos-a-nó, os resultados de um nó dependem da ordem em que as

contribuições dos elementos adjacentes são combinadas. As abordagens para

computações elementos-a-nó simétricas são discutidas a seguir.

4.4.1. Computações elementos-a-nó simétricas com iteradores estáveis

Resultados simétricos de computações do tipo elementos-a-nó podem ser

obtidos de duas formas. Na primeira, as contribuições fornecidas por elementos

adjacentes são explicitamente ordenadas em cada nó antes de serem

combinadas, de maneira consistente entre as partições de malha (por exemplo,

ordem crescente de valor). Isso requer que a contribuição de um elemento seja

temporariamente armazenada ou a computação replicada para cada nó

adjacente a ele. Na segunda, uma ordem consistente é imposta à visitação dos

elementos adjacentes a cada nó. Dessa forma, as contribuições dos elementos

são naturalmente combinadas de maneira simétrica em qualquer partição.

Conforme discutido na Seção 4.3, uma computação sequencial do tipo

elementos-a-nó é tradicionalmente realizada percorrendo-se os elementos da

malha de elementos finitos e adicionando-se a contribuição de cada elemento

aos nós adjacentes. Como consequência, evita-se a replicação de computações

nos elementos para os nós adjacentes e a necessidade de armazenamento de

dados temporários. De forma que a computação ocorra de maneira simétrica, os

elementos devem ser visitados segundo uma ordem global consistente em

relação à malha distribuída. Para isso, propõe-se uma abordagem baseada na

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 77

ordenação global implícita de elementos. A fim de que o percorrimento ordenado

seja feito de maneira transparente à aplicação cliente, iteradores estáveis de

elementos são adicionados à representação de malha distribuída de ParTopS.

A implementação de um iterador estável é baseada em vetores ordenados

de identificadores de elementos (owner_partition, owner_element_handle). Cada

partição de malha mantém um vetor independente, que é atualizado

(reordenado) sempre que elementos são adicionados ou removidos dela. O vetor

contém apenas elementos do tipo proxy, uma vez que os elementos locais

possuem a mesma partição proprietária (a partição corrente), e, assim, já se

encontram implicitamente ordenados com respeito a ela. A iteração ordenada é

feita da seguinte forma: visitam-se os elementos do vetor ordenado, enquanto o

identificador da partição proprietária correspondente (owner_partition) for menor

que o da partição corrente. Então, os elementos locais são visitados, segundo a

ordenação local implícita da partição, e o percorrimento do vetor é retomado a

partir da posição seguinte à última visitada.

A ordenação implícita de elementos é obtida a partir da comparação

lexicográfica dos pares ordenados (owner_partition, owner_element_handle),

que identificam univocamente os elementos da malha distribuída (Seção 3.1.1),

primeiramente pela partição proprietária (owner_partition), em seguida pelo

identificador local do elemento naquela partição (owner_element_handle). Dessa

forma, não é preciso atribuir identificadores globais explícitos a elementos, e os

custos de manutenção correspondentes são evitados. Além disso, não se requer

comunicação entre partições para a atualização da ordenação global quando a

malha é modificada. Essa abordagem difere de outras (Dooley et al., 2009), onde

operações de 128 bits de precisão são usadas para garantir a consistência de

operações de precisão dupla (64 bits) em nós compartilhados por partições

diferentes.

Diferentes vetores ordenados e iteradores podem ser criados para cada

grupo distinto de elementos. Nas simulações de fraturas realizadas foram

utilizados iteradores distintos para elementos volumétricos e coesivos. Nesse

caso, o vetor de elementos volumétricos não precisa ser atualizado quando

elementos coesivos são inseridos na malha. Considerando-se o número de

elementos coesivos normalmente muito menor que o de volumétricos, assim

como o de entidades proxies em relação às locais, o esforço de atualização do

vetor ordenado durante a simulação de fraturas não é significativo.

Com base na representação de malha distribuída de ParTopS,

computações simétricas ocorrem tanto para entidades locais como proxies.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 78

Entidadades do tipo ghost, que dependem de informações de outras partições,

são atualizadas a partir de resultados computados nas entidades locais ou

proxies remotas correspondentes.

4.5. Interface de programação paralela

A interface de programação (API - Application Programming Interface)

disponibilizada pelo sistema ParTopS a aplicações numéricas baseia-se no

paradigma de programação paralela SPMD (Single Program Multiple Data)

(Foster, 1995). Dessa forma, um único programa é executado concorrentemente

para todas as partições da malha distribuída, e em cada partição processa-se

uma parte diferente do conjunto de dados do modelo de elementos finitos

original. A comunicação entre partições é baseada no envio de mensagens

(Foster, 1995), podendo ser integrada com aplicações desenvolvidas com base

no padrão MPI (Message Passing Interface) (MPI Forum, 2010).

O sistema ParTopS é implementado internamente na linguagem C++

(Stroustrup, 1997), utilizando-se o sistema Charm++ (Kalé & Krishnan, 1993,

1996), uma infra-estrutura orientada a objetos para o desenvolvimento de

aplicações paralelas genéricas baseada no envio e recebimento assíncrono de

mensagens entre processadores. Esse paradigma oferece oportunidades para a

melhoria do desempenho de aplicações paralelas, pois facilita a sobreposição

entre etapas de computação e comunicação em operações executadas em

paralelo. Por outro lado, também tende a aumentar significativamente a

complexidade de programação. Assim, considerando-se a complexidade

intrínseca de simulações numéricas, optou-se por prover à aplicação cliente uma

interface funcional de programação, mais simples e fácil de usar. O objetivo é

facilitar a paralelização de aplicações numéricas existentes, e permitir ao

desenvolvedor da aplicação se concentrar no problema numérico.

A interface de programação para aplicações numéricas consiste de

funções locais, na linguagem C (Kerninghan & Ritchie, 1988), para o acesso e

manipulação de dados em cada partição de malha, mais um conjunto reduzido

de funções paralelas coletivas (executadas concorrentemente por todas as

partições) para as operações envolvendo partições diferentes. Com isso,

pretende-se manter o sistema tão simples quanto possível, embora ainda

eficiente e escalável a um grande número de processadores. A malha sequencial

local de cada partição é representada pela estrutura de dados topológica TopS,

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 79

estendida com a infra-estrutura de comunicação entre partições de ParTopS

(camada de comunicação, inserção de elementos coesivos em paralelo,

iteradores estáveis de elementos). As funções locais proveem o acesso à

representação de malha. As funções paralelas coletivas encapsulam a

comunicação entre partições diferentes.

4.5.1. Funções exportadas à aplicação numérica

Uma breve descrição das principais funções da interface de programação

paralela fornecida à aplicação numérica é apresentada abaixo:

void topParInit();

TopParModel topParModel_Create();

int topParModel_ReadMesh(TopParModel model,

char* format, char* meshfile, char* partfile);

TopModel* topParModel_GetLocalMesh(

TopParModel model);

TopAttribId topParModel_CreateNodeDenseAttrib(

TopParModel model, size_t sizeof_attrib);

void* topModel_GetNodeDenseAttribAt(

TopModel* mesh, TopAttribId attribid, TopNode node);

void topParModel_SyncProxyNodeDenseAttrib(

TopParModel model, TopAttribId attribid);

void topParModel_SyncGhostNodeDenseAttrib(

TopParModel model, TopAttribId attribid);

void topParModel_SyncFacets(

TopParModel model, TopFacet* facets);

void topParModel_InsertCohesiveAtFacets(

TopParModel model, ElemType type, TopFacet* facets);

A função coletiva topParInit(), chamada concorrentemente por todas

as partições, inicializa o suporte à representação de malha distribuída; ela deve

ser chamada uma vez ao início do programa, após a inicialização do padrão

MPI: MPI_Init() (MPI Forum, 2010). A função coletiva

topParModel_Create() cria um novo modelo de elementos finitos distribuído

(inicialmente contém apenas uma malha vazia) e retorna o identificador do

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 80

modelo criado (TopParModel). A função coletiva utilitária

topParModel_ReadMesh() lê uma malha distribuída no formato format, para

um modelo distribuído de elementos finitos (model), dado um arquivo contendo

a malha (meshfile) e outro com a descrição das partições (partfile). A

função local topParModel_GetLocalMesh() retorna um ponteiro para a

malha local da partição corrente, representada pela estrutura de dados

topológica sequencial TopS estendida com o suporte paralelo. A função coletiva

topParModel_CreateNodeDenseAttrib() adiciona ao modelo (model) um

atributo associado a todos os nós da malha distribuída, de tamanho

sizeof_attrib por nó. O identificador do atributo criado (TopAttribId) é

retornado pela função. Esse identificador é idêntico em todas as partições de

malha e pode ser usado para acessar o atributo correspondente a um nó de uma

partição qualquer, através de chamada à função local

topModel_GetNodeDenseAttribAt(), que retorna o ponteiro (void*) para a

posição de memória correspondente aos dados de um nó (node) da malha local

(mesh). As funções topParModel_SyncProxyNodeDenseAttrib() e

topParModel_SyncProxyNodeDenseAttrib() sincronizam nós proxies e

ghosts, respectivamente, em relação a um atributo (attribid) associado aos

nós reais remotos correspondentes. A função coletiva

topParModel_SyncFacets() sincroniza as listas locais de facetas fraturadas

(facets) de todas as partições de malha com as partições vizinhas. Finalmente,

a função coletiva topParModel_InsertCohesiveAtFacets() insere

adaptativamente elementos coesivos de um determinado tipo (type) em um

conjunto de facetas fraturadas (facets), que inclui consistentemente facetas

locais e proxies da partição corrente. A aplicação é notificada sobre os

elementos coesivos criados e os nós duplicados durante a inserção dos

elementos através de funções de chamada de retorno (callback functions)

registradas na malha local de cada partição pela aplicação numérica.

4.5.2. Implementação da interface de programação

A interface funcional de programação é construída com base na biblioteca

TCharm (Threaded Charm++) (University of Illinois, 2011), disponibilizada pelo

sistema Charm++, que permite o mapeamento do paradigma de objetos e

mensagens assíncronas em uma visão baseada em linhas de execução

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 81

(threads), convencionalmente empregada em aplicações paralelas. Dessa forma,

o código numérico sequencial é executado por cada partição de malha em uma

linha de execução própria. Com base em TCharm, chamadas a funções

paralelas definidas pelo padrão MPI são mapeadas, de forma transparente à

aplicação numérica, à infra-estrutura de comunicação assíncrona de Charm++,

através da biblioteca AMPI (Huang et al., 2003). As linhas de execução criadas

com TCharm podem ser migradas entre processadores e utilizar facilidades de

balanceamento de carga oferecidos por Charm++.

No paradigma de programação de Charm++, dois objetos paralelos

(Chares), P1 e P2, localizados em processadores diferentes, comunicam-se

através de chamadas remotas de métodos assíncronas. No exemplo ilustrado na

Figura 34, o método a(), executando em P1, envia uma chamada assíncrona ao

método compute(), de P2, e continua a execução de a(). A chamada a compute()

inclui uma mensagem (msg) contendo os parâmetros do método mais uma

referência a um método de retorno (cb()) em P1. Ao terminar a execução de b(),

o objeto P2 torna-se disponível ao processamento de novas mensagens (a

execução de métodos em cada processador não é interrompida pelo

recebimento de mensagens – execução não preemptiva). Então, a chamada a

compute(), recebida e armazenada em uma fila de espera, é processada e o

método executado. Ao final da execução de compute(), o método de retorno cb()

é chamado, de maneira assíncrona, para informar P1 sobre o término de

compute() e permitir que as computações subsequentes em P1 sejam

executadas. O encadeamento de computações dentro de um objeto também é

feito através de chamadas assíncronas, enviadas a si próprio. Na Figura 34, o

método a(), ao terminar sua execução em P1, chama o método c() do mesmo

objeto; a chamada é armazenada na fila de espera e processada após as qu

estiverem pendentes. A implementação interna dos operadores topológicos de

ParTopS é realizada com base nesse paradigma.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 82

Figura 34 - Comunicação por chamadas remotas de métodos

assíncronas entre dois objetos em processadores diferentes (P1 e P2).

Para encapsular as chamadas de métodos assíncronas em um paradigma

funcional, criou-se um objeto de contexto associado a uma linha de execução de

TCharm. Esse é um objeto regular (Chare) de Charm++, contendo referências à

linha de execução da aplicação e ao objeto (Chare) correspondente à partição

de malha. Cada função da interface de programação exportada para a aplicação

cliente chama um método correspondente do objeto de contexto. O método do

contexto, por sua vez, chama o método da partição de malha, passando como

parâmetro a referência a outro método do contexto que deve ser chamado como

retorno do método da partição. Então, requisita a suspensão da linha de

execução (thread) da aplicação. Quando o método de retorno (callback) é

chamado, indicando a finalização da operação paralela, este requisita a

continuação da linha de execução (thread) da aplicação. Dessa forma, a função

exportada é vista pela aplicação de maneira síncrona, da mesma forma que

funções sequenciais regulares. Um exemplo relativo à sincronização de facetas

fraturadas é mostrado abaixo, em pseudocódigo (estilo linguagem C++

(Stroustrup, 1997)):

P1 P2

a()

c()

cb()

b()

compute()

d()

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 83

// Objeto de contexto

Context {

TCharm* thread;

TopPartition* partition;

void SyncFacets(TopFacet* facets) {

Callback callback(Context::RecvSyncFacetsReply);

partition->SyncFacets(facets, callback);

thread->suspend();

}

void RecvSyncFacetsReply () {

thread->resume();

}

}

// Função exportada à aplicação numérica

void topParModel_SyncFacets (TopFacet* facets) {

context->SyncFacets(facets);

}

4.6. Estrutura da simulação paralela

A estrutura da simulação paralela é determinada a partir dos requisitos de

sincronização e padrões de computação discutidos nas seções anteriores. De

forma geral, o código paralelo corresponde ao sequencial original, executado

concorrentemente por cada partição de malha e com funções paralelas coletivas

adicionais para sincronização de atributos de simulação entre partições. A

aplicação numérica paralela é apresentada a seguir, considerando-se as

abordagens para sincronização de atributos entre partições introduzidas na

Seção 4.1. A abordagem empregada define os requisitos de sincronização da

aplicação.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 84

4.6.1. Abordagem baseada em computações apenas em entidades locais

Na estrutura da simulação paralela ilustrada na Figura 35, os resultados de

computações numéricas são armazenados apenas em entidades locais de cada

partição. Isso corresponde à primeira classe de abordagens paralelas da Seção

4.1, sendo equivalente à estratégia convencional de uso de travas de acesso

exclusivo (locks) – no caso, o lock é implícito às entidades locais. Entidades da

camada de comunicação (proxies e ghosts) são consideradas não editáveis e,

assim, servem unicamente ao propósito de fornecer os dados necessários a

computações locais próximas às fronteiras originais da partição. A consistência

de dados de entidades proxies e ghosts é garantida através de sincronizações

com as partições vizinhas, realizadas sempre que necessário. As etapas de

sincronização de atributos numéricos são destacadas em negrito na Figura 35.

Inicialize o modelo de elementos finitos

Para cada passo de tempo

1 - Compute o valor das condições de contorno

2 - Verifique a inserção de novos elementos coesivos

2.1 - Compute as tensões nodais

A1. Sincronize atributos de nós proxies

2.2 - Determine as facetas fraturadas

A2. Sincronize o conjunto de facetas fraturadas

2.3 - Insira elementos coesivos

2.4 - Atualize os valores das massas nodais

3 - Compute o vetor de forças nodais internas

4 - Compute o vetor de forças coesivas

A3. Sincronize atributos de elementos coesivos proxies

5 - Atualize as acelerações e velocidades nodais

6 - Atualize as forças externas e energias nos nós

7 - Aplique as condições de contorno aos nós

8 - Atualize os deslocamentos nodais

A4. Sincronize atributos de nós proxies

A5. Sincronize atributos de nós ghosts

Figura 35 - Estrutura do fluxo de controle da simulação de fraturas

Modo I, segundo a abordagem baseada em computações locais.

Ao início de um passo de tempo da simulação, assume-se que todas as

partições do modelo de elementos finitos encontram-se consistentes entre si.

Durante a execução do passo, entretanto, os atributos de nós e elementos são

modificados por computações intermediárias, realizadas independentemente em

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 85

cada partição. Esses atributos devem estar consistentes para que possam ser

utilizados em computações subsequentes. Os requisitos de sincronização para a

manutenção da consistência de dados entre partições são analisados a seguir,

com base nos padrões de computação observados na estrutura da simulação

numérica. A discussão é baseada no detalhamento da simulação numérica

sequencial apresentado na Seção 4.2.

A computação de tensões nodais (linha 2.1) consiste em duas etapas

sequenciais. Primeiramente, para cada elemento volumétrico, os atributos dos

nós adjacentes são trazidos temporariamente ao elemento, para a integração

das tensões; em seguida, a contribuição do elemento é extrapolada para ser

armazenada nos nós locais adjacentes (note que não é necessário armazenar os

resultados temporários de elementos). Um nó local pode ser adjacente a

elementos locais ou proxies; assim as contribuições desses elementos devem

ser determinadas. A contribuição de um elemento, por sua vez, depende dos nós

adjacentes a ele. Como um elemento proxy pode ser adjacente a nós locais,

proxies ou ghosts, os atributos dessas entidades devem estar consistentes antes

do início da computação de tensões. Isso é garantido pela sincronização de nós

proxies e ghosts realizada ao final do passo anterior (linhas A4 e A5), após a

computação dos deslocamentos nodais.

A determinação de fraturas (linha 2.2) é realizada de forma consistente

para todas as facetas locais da partição corrente. A inserção de elementos

coesivos (Seção 3.2), entretanto, é realizada por meio de uma função paralela

coletiva com entrada e saída definidas. Essa função requer que tanto facetas

fraturadas locais quanto proxies sejam fornecidas. Dessa forma, o conjunto local

de facetas fraturadas da partição é sincronizado com as partições vizinhas (linha

A2). Uma vez que uma faceta local pode ser adjacente tanto a nós locais quanto

proxies, e os atributos dos nós remotos correspondentes foram alterados pela

computação de tensões, os nós proxies devem ser sincronizados antes da

determinação de fraturas (linha A1). Após a inserção de elementos coesivos

(linha 2.3), a topologia global da malha distribuída e os atributos

correspondentes às entidades modificadas encontram-se consistentes.

As massas nodais (linha 2.4) são atualizadas com base nas contribuições

de elementos volumétricos adjacentes. Como a massa de um elemento não se

altera durante a simulação, e computações subsequentes não requerem massas

de nós proxies ou ghosts, a sincronização de atributos nodais não é necessária

antes ou após a computação.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 86

O vetor de forças internas (linha 3) é calculado em duas etapas, de

maneira similar às tensões nodais. Para cada elemento volumétrico, atributos de

nós adjacentes são trazidos temporariamente ao elemento e combinados com

outros atributos estáticos do elemento. Então, a contribuição do elemento é

adicionada aos nós locais adjacentes a ele. Como o único atributo nodal utilizado

nessa computação corresponde ao deslocamento, que não foi alterado até o

momento no passo corrente, a sincronização de entidades proxies e ghosts não

é necessária para a determinação das forças internas.

A computação de forças coesivas (linha 4) pode ser decomposta em três

partes. Na primeira, para cada elemento coesivo, atributos temporários

(separações coesivas) são calculados no elemento a partir de atributos

(deslocamentos) de nós adjacentes. Na segunda, atributos do elemento (ex.

materiais e história de carregamento) são atualizados, combinando-os com os

atributos temporários anteriores, e os resultados armazenados novamente no

elemento, se ele for do tipo local. Finalmente, a contribuição de forças do

elemento é adicionada a cada nó local adjacente. A computação modifica tanto

elementos coesivos locais quanto nós locais adjacentes a eles. Uma vez que nós

locais podem ser adjacentes a elementos locais e proxies, e esses elementos a

nós locais, proxies e ghosts, a computação depende dos atributos dessas

entidades. Porém, considerando que os atributos nodais utilizados não foram

alterados no passo corrente, é preciso sincronizar apenas atributos de elementos

coesivos (linha A3), para que estejam consistentes ao passo seguinte.

As computações restantes (acelerações e velocidades, forças externas e

energias, condições de contorno e deslocamentos nodais) (linhas 5 a 8)

dependem apenas de atributos dos próprios nós que modificam. Dessa forma, as

computações são realizadas para cada nó local da partição corrente e não

dependem de sincronizações de entidades. Conforme discutido anteriormente,

ao final do passo de simulação, os atributos de entidades proxies e ghosts são

sincronizados (linhas A4 e A5), para que o estado da simulação esteja

consistente para o passo seguinte.

Com a edição de atributos de um elemento ou nó realizada apenas pela

partição proprietária da entidade, divergências numéricas entre partições da

malha distribuída são naturalmente evitadas. Por outro lado, atributos de

entidades proxies e ghosts devem ser sincronizados de maneira apropriada.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 87

4.6.2. Abordagem baseada em computações replicadas

Nesta abordagem, a replicação de computações numéricas em elementos

e nós da camada de comunicação é explorada a fim de se reduzir a

sincronização de atributos necessária à manutenção da consistência de dados

entre partições de malha. Assim, as entidades da camada de comunicação são

consideradas editáveis, e resultados de computações armazenados nelas

sempre que conveniente.

A seguir, a estrutura da simulação paralela da Seção 4.6.1 é revisitada

(Figura 36), e os padrões de computação que nela ocorrem são analisados. Os

resultados de computações replicadas são tratados como idênticos em todas as

partições, sem modificações adicionais à simulação original para garantir uma

ordem consistente de execução de operações de ponto flutuante. Em

computações do tipo elementos-a-nó, isso pode levar a pequenas diferenças de

resultados entre partições. Para limitar a possível propagação de diferenças ao

longo de passos de tempo da simulação, realizam-se sincronizações

esporádicas dos atributos numéricos das entidades topológicas afetadas.

Inicialize o modelo de elementos finitos

Para cada passo de tempo

1 - Compute o valor das condições de contorno

2 - Verifique a inserção de novos elementos coesivos

2.1 - Compute as tensões nodais

Se o passo de tempo é múltiplo de n

A1. Sincronize atributos de nós proxies

2.2 - Determine as facetas fraturadas

A2. Sincronize o conjunto de facetas fraturadas

2.3 - Insira elementos coesivos

2.4 - Atualize os valores das massas nodais

3 - Compute o vetor de forças nodais internas

4 - Compute o vetor de forças coesivas

Se o passo de tempo é múltiplo de n

A3. Sincronize atributos de nós proxies

A4. Sincronize atributos de nós ghosts

5 - Atualize as acelerações e velocidades nodais

6 - Atualize as forças externas e energias nos nós

7 - Aplique as condições de contorno aos nós

8 - Atualize os deslocamentos nodais

Figura 36 - Estrutura da simulação numérica paralela baseada em

computações replicadas. A sincronização de nós proxies ocorre

esporadicamente, em intervalos de n passos de tempo.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 88

Na etapa inicial de cada passo de tempo da simulação, as tensões nodais

são computadas (linha 2.1). Para isso, os valores temporários de um elemento

volumétrico são calculados a partir dos atributos dos nós adjacentes, o que

corresponde ao padrão nós-a-elemento. Assim, os resultados obtidos no

elemento são naturalmente simétricos, se apresentando consistente entre

partições diferentes. Na segunda etapa, entretanto, a contribuição do elemento é

adicionada aos nós adjacentes, segundo o padrão elementos-a-nó. Nesse caso,

a aplicação calcula os resultados nodais da forma tradicional, percorrendo os

elementos da partição corrente, e adicionando a contribuição de cada elemento

aos nós adjacentes.

Assumindo-se que nenhuma ordenação global é imposta ao percorrimento

de elementos, resultados numéricos ligeiramente divergentes para um mesmo

nó podem ser obtidos por partições diferentes, o que requer a sincronização

esporádica de nós proxies para se manter a consistência dos dados (linha A1).

Se a sincronização fosse completamente eliminada, as divergências numéricas

se propagariam para passos de tempo subsequentes, o que poderia afetar a

convergência correta da simulação. Por outro lado, divergências que não alterem

significativamente a simulação poderiam ser ignoradas (ou toleradas). Assim,

como forma de se remover o custo de sincronização, mas ao mesmo tempo

mitigar o acúmulo de divergências numéricas, a sincronização de proxies é

realizada em intervalos determinados de n passos de tempo. Nesta pesquisa,

executaram-se simulações numéricas com sincronização de nós proxies em

intervalos de 100 passos, com base na aplicação numérica Modo I considerada

como exemplo. Nenhuma diferença significativa foi observada quanto aos

resultados obtidos.

A determinação de facetas (linha 2.2) pode ser representada pelo padrão

de computação nós-a-elemento. Assim, considerando-se que os nós de cada

faceta encontram-se consistentes, a computação é naturalmente simétrica. Com

isso, a sincronização de conjuntos locais de facetas fraturadas pode ser

eliminada se a determinação de fraturas em cada partição incluir também facetas

do tipo proxy. Entretanto, as divergências numéricas da computação de tensões,

mesmo pequenas, podem afetar decisões binárias, como a do critério de fratura,

fazendo com que os conjuntos de facetas fraturadas fiquem inconsistentes entre

as partições. Dessa forma, para garantir a consistência dos dados, a

determinação de facetas permanece sendo feita com base em facetas locais

apenas, seguida pela sincronização dos conjuntos de facetas (linha A2).

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 89

Assim como a computação de tensões nodais, o vetor de forças internas

(linha 3) é computado em uma etapa baseada no padrão nós-a-elemento,

seguida de outra do tipo elementos-a-nó. Por sua vez, a computação do vetor de

forças coesivas (linha 4) corresponde aos padrões nós-a-elemento, elemento-a-

elemento e elementos-a-nó. As computações nós-a-elemento e elemento-a-

elemento são simétricas e dependem de atributos nodais (ex. deslocamentos e

materiais) não alterados no passo corrente. As computações elemento-a-

elemento alteram e dependem de atributos de elementos coesivos calculados no

passo anterior. Porém, como essas computações são também simétricas, os

resultados não precisam ser sincronizados para se garantir a consistência do

passo seguinte. Finalmente, as computações elementos-a-nó se baseiam nos

resultados das anteriores, e assim dependem de dados já consistentes. Os

resultados são tratados de maneira similar às tensões nodais. Assim, a

sincronização de nós proxies é também realizada em intervalos de n passos de

tempo, e apenas atributos de nós ghosts devem ser sincronizados antes de

serem usados nas computações seguintes, ou ao final do passo de tempo

(linhas A3 e A4).

As computações restantes (acelerações e velocidades, forças externas e

energias, condições de contorno e deslocamentos nodais) (linhas 5 a 8) seguem

o padrão nó-a-nó. Logo, ocorrem de forma simétrica para todos os nós.

4.6.3. Abordagem baseada em computações simétricas

A sincronização esporádica de nós proxies da abordagem anterior pode

ser eliminada de forma transparente à aplicação numérica através do uso de

iteradores estáveis (Seção 4.4.1) para o percorrimento de elementos em

computações elementos-a-nó. Nesse caso, os iteradores da aplicação original

são diretamente substituídos pelas versões estáveis correspondentes. Com

consequência, resultados de tensões nodais e forças internas e coesivas, por

exemplo, passam a ser computados de maneira simétrica, produzindo resultados

numericamente consistentes para nós locais e proxies de cada partição, sem a

necessidade de sincronização. Com a determinação de fraturas realizada

também para facetas proxies, além das locais, a sincronização de conjuntos de

facetas é removida. Por outro lado, facetas proxies podem ser adjacentes a nós

ghosts, e, assim, esses nós devem ser sincronizados antes da determinação de

facetas. O código paralelo baseado nessa estratégia é ilustrado na Figura 37, e

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 90

requer apenas sincronização de nós ghosts (linhas A1 e A2). Uma vantagem da

redução de pontos de sincronização através de computações estáveis é a

simplificação significativa da estrutura da simulação paralela.

Inicialize o modelo de elementos finitos

Para cada passo de tempo

1 - Compute o valor das condições de contorno

2 - Verifique a inserção de novos elementos coesivos

2.1 - Compute as tensões nodais

A1. Sincronize atributos de nós ghosts

2.2 - Determine as facetas fraturadas

2.3 - Insira elementos coesivos

2.4 - Atualize os valores das massas nodais

3 - Compute o vetor de forças nodais internas

4 - Compute o vetor de forças coesivas

A2. Sincronize atributos de nós ghosts

5 - Atualize as acelerações e velocidades nodais

6 - Atualize as forças externas e energias nos nós

7 - Aplique as condições de contorno aos nós

8 - Atualize os deslocamentos nodais

Figura 37 - Estrutura da simulação paralela utilizando iteradores

estáveis de elementos.

4.6.4. Abordagem mista

Com o emprego de computações simétricas, os pontos de sincronização

de atributos da simulação numérica são reduzidos em relação à abordagem

convencional baseada apenas em computações locais. Contudo, dependendo da

aplicação, a combinação de abordagens diferentes pode se tornar mais

vantajosa.

No caso da simulação numérica analisada, a sincronização de conjuntos

de facetas fraturadas não é necessária quando computações simétricas são

empregadas. Por outro lado, isso requer que atributos de nós ghosts sejam

sincronizados antes da determinação de fraturas. Porém, um volume menor de

dados é, em geral, esperado na sincronização de conjuntos de facetas em

comparação com atributos de nós ghosts. Assim, uma abordagem mais

compacta utiliza computações simétricas, mas mantém a determinação de

fraturas a partir de facetas locais, com a sincronização dos conjuntos de facetas

correspondentes. A estrutura da simulação paralela resultante é apresentada na

Figura 38.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

4 Simulações de fraturas extrínsecas em ambientes paralelo 91

Inicialize o modelo de elementos finitos

Para cada passo de tempo

1 - Compute o valor das condições de contorno

2 - Verifique a inserção de novos elementos coesivos

2.1 - Compute as tensões nodais

2.2 - Determine as facetas fraturadas

A1. Sincronize o conjunto de facetas fraturadas

2.3 - Insira elementos coesivos

2.5 - Atualize os valores das massas nodais

3 - Compute o vetor de forças nodais internas

4 - Compute o vetor de forças coesivas

5 - Atualize as acelerações e velocidades nodais

6 - Atualize as forças externas e energias nos nós

7 - Aplique as condições de contorno aos nós

8 - Atualize os deslocamentos nodais

A2. Sincronize os atributos de nós ghosts

Figura 38 - Estrutura da simulação paralela segundo a abordagem

mista, com iteradores estáveis e sincronização dos conjuntos de facetas

fraturadas.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais

Experimentos computacionais foram realizados com o objetivo de testar e

validar o sistema ParTopS. Primeiramente, avaliou-se a representação

topológica de fraturas e fragmentação; os resultados obtidos são analisados na

Seção 5.1. Em seguida, simulações numéricas em paralelo foram executadas de

forma a validar o sistema ParTopS para o tratamento de problemas reais de

larga escala. A escalabilidade das simulações numéricas foi medida com relação

a um grande número de processadores, através da execução em um ambiente

massivamente paralelo de memória distribuída. Os resultados são discutidos na

Seção 5.2.

5.1. Representação topológica de fraturas e fragmentação em paralelo

Com o objetivo de avaliar a corretude, eficiência e escalabilidade da

representação topológica de fraturas de ParTopS e o algoritmo de inserção

paralela de elementos coesivos, foram realizados experimentos computacionais

desacoplados da análise numérica. Os experimentos foram executados para

malhas bidimensionais (2D) e tridimensionais (3D), de diferentes tipos de

elementos, lineares (T3 e Tet4) e quadráticos (T6 e Tet10).

Os modelos básicos utilizados nos experimentos são ilustrados na Figura

39, considerando-se uma discretização de malha baseada em elementos

quadráticos. A topologia do modelo bidimensional (Figura 39a) corresponde a

uma grade regular de nx x ny células quadrilaterais decompostas em quatro

triângulos cada. O modelo tridimensional (Figura 39b) consiste em uma grade

regular de nx x ny x nz células hexahédricas decompostas em seis tetraedros

cada. Os modelos são divididos em um número de partições distintas, e cada

partição é atribuída a um processador diferente.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 93

Figura 39 - Exemplos de modelos básicos, 2D (a) e 3D (b) utilizados

nos experimentos computacionais.

Em cada experimento, elementos coesivos são inseridos aleatoriamente

em aproximadamente 50% do número total de facetas internas (interfaces entre

elementos volumétricos) de cada partição de malha, o que resulta na ocorrência

de padrões de fraturas arbitrários e complexos. A inserção é realizada de

maneira incremental, ao longo de 50 passos de iteração. Para cada passo, os

elementos são inseridos em 1% das facetas internas. Isso é feito com o objetivo

de se reproduzir o comportamento de simulações de fragmentação reais, na

quais o número de elementos coesivos criados em cada passo é geralmente

pequeno em relação ao número total de elementos volumétricos.

5.1.1. Corretude e eficiência

Os experimentos para a verificação da corretude e eficiência foram

executados em um conjunto (cluster) de até 14 máquinas conectadas por uma

rede Gigabit Ethernet. Cada máquina possui processador Intel(R) Pentium(R) D,

com dois núcleos (cores) de 3.40 GHz, e 2GB de memória RAM. O sistema

operacional é Red Hat Linux 3.4.6-9, com kernel de 32 bits. O compilador usado

é gcc v. 3.4.6.

Os resultados obtidos são apresentados na Tabela 1 e Tabela 2. A Tabela

1 descreve as diversas discretizações de malha utilizadas e os tempos totais

sequenciais correspondentes à inserção de elementos coesivos em 50% das

facetas internas de cada modelo utilizado, em 50 passos de interação de 1% de

facetas. Os modelos de tamanho maior não puderam ser representados na

memória de apenas uma máquina (apresentados como n/a nas tabelas). A

Tabela 2 mostra os resultados da inserção paralela de elementos coesivos com

um número variável de máquinas e duas partições de malha por máquina (uma

(a) (b)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 94

partição por núcleo de processamento). Os tempos totais apresentados

correspondem à média dos tempos totais obtidos para cinco execuções de cada

experimento. Ao final de uma execução em paralelo, o número total de

elementos coesivos inseridos é aproximadamente igual ao experimento

sequencial correspondente. A consistência da malha final é verificada após cada

experimento, a fim de garantir a corretude da representação topológica.

Tabela 1 - Tempos, em segundos, para a inserção sequencial de

elementos coesivos em várias discretizações de malha. Os campos

indicados com n/a correspondem às discretizações que não puderam ser

representadas na memória de apenas uma máquina.

Tipo de

elemento

Discretização

de malha

Núm. de

elementos

volumétricos

Núm. de

nós

Núm. de

elementos

coesivos

inseridos

Tempo

total (s)

T3 256x256 262.144 131.585 196.352 1,20

512x512 1.048.576 525.313 785.920 4,99

1024x1024 4.194.304 2.099.201 3.144.704 21,24

1536x1536 9.437.184 4.721.665 7.076.352 58,43

2048x2048 16.777.216 8.392.705 12.580.864 n/a

T6 256x256 262.144 525.313 196.352 1,42

512x512 1.048.576 2.099.201 785.920 5,99

1024x1024 4.194.304 8.392.705 3.144.704 30,19

1536x1536 9.437.184 18.880.513 7.076.352 n/a

2048x2048 16.777.216 33.562.625 12.580.864 n/a

Tet4 16x16x16 24.576 4.913 23.808 0,80

32x32x32 196.608 35.937 193.536 5,39

64x64x64 1.572.864 274.625 1.560.576 45,87

96x96x96 5.308.416 912.673 5.280.768 161,52

128x128x128 12.582.912 2.146.689 12.533.760 n/a

Tet10 16x16x16 24.576 35.937 23.808 0,93

32x32x32 196.608 274.625 193.536 6,21

64x64x64 1.572.864 2.146.689 1.560.576 53,55

96x96x96 5.308.416 7.189.057 5.280.768 n/a

128x128x128 12.582.912 16.974.593 12.533.760 n/a

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 95

Tabela 2 - Tempos, em segundos, para a inserção paralela de

elementos coesivos em várias discretizações de malha. Os campos

indicados com n/a correspondem às discretizações que não puderam ser

representadas na memória do número de máquinas correspondente.

Tipo de

elemento

Discretização

de malha

Tempo

total

sequencial

(s)

Tempo total paralelo (s)

Número de máquinas

(Duas partições por máquina)

2 4 8 12

T3 256x256 1,20 0,97 0,84 0,78 0,77

512x512 4,99 2,66 2,28 1,62 1,49

1024x1024 21,24 9,41 6,25 4,65 3,72

1536x1536 58,43 21,16 11,98 8,96 7,75

2048x2048 n/a 47,35 21,80 16,05 12,51

T6 256x256 1,42 1,03 0,95 0,84 0,84

512x512 5,99 3,27 2,68 1,90 1,69

1024x1024 30,19 11,96 7,23 5,49 4,60

1536x1536 n/a 47,46 16,29 9,90 8,58

2048x2048 n/a n/a 42,17 18,31 15,07

Tet4 16x16x16 0,80 0,85 0,92 1,19 1,62

32x32x32 5,39 4,71 4,48 4,85 4,96

64x64x64 45,87 30,83 22,26 19,61 19,61

96x96x96 161,52 91,44 61,09 45,58 39,46

128x128x128 n/a 199,48 113,92 79,99 69,45

Tet10 16x16x16 0,93 1,17 1,35 1,72 1,97

32x32x32 6,21 6,35 6,72 8,34 8,64

64x64x64 53,55 39,98 29,91 27,47 28,09

96x96x96 n/a 122,28 79,53 63,26 54,00

128x128x128 n/a n/a 183,68 110,59 92,66

O gráfico da Figura 40 mostra os tempos totais da inserção de elementos

coesivos para malhas de triângulos lineares (T3), em função do número médio

de elementos inseridos. Os resultados para tetraedros lineares (Tet4) são

apresentados na Figura 41. Em ambos os casos, o tempo total aumenta de

maneira aproximadamente linear em relação ao número de elementos coesivos.

Esse comportamento é esperado, uma vez que o tempo relativo à inserção

sequencial de elementos coesivos (Fase 1) é proporcional ao número de

elementos inseridos (Paulino et al., 2008), e o custo de comunicação é

proporcional às entidades topológicas da camada de comunicação afetadas.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 96

Figura 40 - Tempos totais para a inserção de elementos coesivos em

função do número de elementos inseridos, para malhas de triângulos

lineares (T3) e número variável de máquinas. Os tempos paralelos são

comparados com os sequenciais.

Figura 41 - Tempos totais para a inserção de elementos coesivos em

função do número de elementos inseridos, para malhas de tetraedros

lineares (Tet4) e número variável de máquinas. Os tempos paralelos são

comparados com os sequenciais.

0

10

20

30

40

50

60

70T

em

po

to

tal

(s)

Elementos coesivos (milhões)

Inserção de elementos coesivos (50 x 1%)T3 (2 partições / máquina)

Sequencial

2 máquinas

4 máquinas

8 máquinas

12 máquinas

0

50

100

150

200

250

Te

mp

o t

ota

l (s

)

Elementos coesivos (milhões)

Inserção de elementos coesivos (50 x 1%)Tet4 (2 partições / máquina)

Sequencial

2 máquinas

4 máquinas

8 máquinas

12 máquinas

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 97

A Figura 42 mostra uma malha distribuída de tetraedros lineares, usada

nos experimentos, após a inserção de elementos coesivos em aproximadamente

10% do total de facetas internas da malha original (10 passos de iteração).

Resultados em malhas de tetraedros genéricas são ilustrados na Figura 43. Os

elementos coesivos compartilhados por partições de malha diferentes são

representados de forma consistente em todas elas.

Figura 42 - Malha distribuída de tetraedros lineares correspondente à

discretização 16x16x16 do modelo básico tridimensional, decomposta em 8

partições. Elementos coesivos foram inseridos aleatoriamente em

aproximadamente 10% do número total de facetas internas, em 10 passos

de iteração, com 1% de facetas a cada iteração. As camadas de

comunicação e os elementos coesivos são enfatizados.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 98

(a)

(b)

Figura 43 - Dois exemplos de malhas distribuídas não estruturadas de

tetraedros lineares, (a) e (b), usadas para testar o suporte topológico de

fraturas. Elementos coesivos foram inseridos aleatoriamente em

aproximadamente 10% do número total de facetas internas, em 10 passos

de iteração, com 1% de facetas a cada iteração. As camadas de

comunicação e os elementos coesivos são enfatizados.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 99

5.1.2. Escalabilidade

Para avaliar a escalabilidade da representação topológica de fraturas e

fragmentação de ParTopS, foram realizados experimentos adicionas em um

ambiente computacional massivamente paralelo de memória distribuída. O

ambiente utilizado é o cluster Abe (Intel 64 Cluster), do National Center for

Supercomputer Applications (NCSA). Cada nó de computação (Dell PowerEdge

1955) é composto por dois processadores Intel 64, com quatro núcleos de

processamento (cores) de 2.33 GHz cada (8 núcleos por nó), front side bus de

1333 MHz por processador e cache L2 de 2x4 MB, e 1GB de memória RAM por

núcleo. O ambiente paralelo possui um total de 1200 nós de computação (9600

núcleos), interconectados por uma rede InfiniBand. O sistema de arquivos

paralelo Lustre (100TB) é utilizado, e o sistema operacional é Red Hat Enterprise

Linux 4 (Linux 2.6.18), com compilador gcc v. 3.4.6. Exatamente uma partição de

malha é atribuída a cada núcleo de processamento.

O experimento descrito a seguir demonstra a escalabilidade da

representação topológica de ParTopS com respeito à inserção de elementos

coesivos. A capacidade da representação topológica em paralelo de tratar

problemas maiores eficientemente é medida através da variação do número de

processadores em relação ao tamanho da malha utilizada, de forma a manter o

mesmo nível de eficiência. Isso corresponde à abordagem de isoeficiência

(Grama et al., 1993; Quinn, 2004), discutida na Seção 3.2.4. No caso ideal,

espera-se que o tempo de execução mantenha-se constante ao se aumentar o

número de processadores proporcionalmente ao tamanho da malha. No

experimento, utilizou-se a grade tridimensional da Figura 39b; o número de

elementos por partição de malha manteve-se em aproximadamente 50x50x50

células hexaédricas, decompostas em seis tetraedros lineares (Tet4) cada, o que

corresponde a um total de 750.000 elementos locais por partição. Assim como

nos experimentos anteriores, elementos coesivos são inseridos aleatoriamente

em aproximadamente 50% das facetas internas, em 50 passos de iteração, com

1% das facetas por passo.

Os resultados para várias discretizações de malha e números de núcleos

de processamento são resumidos na Tabela 3, e os tempos totais de execução

em função do número de núcleos são mostrados no gráfico da Figura 44. Para

um grande número de núcleos de processamento (e tamanhos de malha

correspondentes), os tempos de execução apresentam uma tendência próxima a

constante, com variação significativamente reduzida em função do número de

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 100

núcleos utilizados. Dessa forma, o algoritmo paralelo se aproxima dos resultados

de isoeficiência esperados e, assim, pode ser considerado escalável para os

tamanhos de problema considerados. A comparação com a execução sequencial

(Figura 44) mostra o custo paralelo introduzido à implementação sequencial

original. Para a execução em 1.000 núcleos de processamento, o tempo total em

paralelo é aproximadamente 1,9 vezes maior que o tempo sequencial. Porém, o

tamanho do problema tratado é aproximadamente 1.000 vezes maior.

Tabela 3 - Tempos totais da inserção paralela de elementos coesivos

para várias discretizações diferentes do modelo básico tridimensional.

Discretização

de malha

Elementos finitos

Núcleos de

processamento

Tempo

total (s)

50x50x50 750.000 1 (sequencial) 16,59

100x100x100 6.000.000 8 24,30

200x200x200 48.000.000 64 28,12

400x400x400 384.000.000 512 29,24

450x450x450 546.750.000 729 31,41

500x500x500 750.000.000 1.000 31,74

Figura 44 - Tempo total de 50 passos da inserção paralela de

elementos coesivos no modelo tridimensional, em função de núcleos de

processamento. A discretização do modelo é proporcional ao número de

núcleos. O tempo sequencial é mostrado como referência (linha tracejada).

0

5

10

15

20

25

30

35

Tem

po

to

tal (s

)

Núcleos de processamento

IsoeficiênciaInserção de elementos coesivos

750.000 elementos / núcleo

Paralelo

Sequencial

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 101

5.2. Simulações numéricas em paralelo

A interface fornecida por ParTopS para simulações de fraturas extrínsecas

em paralelo foi validada através de um conjunto de simulações numéricas

baseadas na aplicação paralela descrita no Capítulo 4. A escalabilidade das

simulações foi avaliada com os experimentos realizados. A propagação de

fraturas considerada é do tipo Modo I (Cook et al., 2001), com pequenas

deformações. A análise numérica utiliza um modelo de zona coesiva extrínseco

(Camacho & Ortiz, 1996; Ortiz & Pandolfi, 1999; Park et al., 2009), com modelo

constitutivo Park-Paulino-Roesler (PPR) (Park et al., 2009). O ambiente paralelo

usado para os experimentos é o mesmo das medições de escalabilidade da

seção anterior (cluster Abe (Intel 64 Cluster), do National Center for

Supercomputer Applications (NCSA)).

A geometria e condições de contorno (Park, 2009) dos modelos usados

nos experimentos são mostrados na Figura 45. O modelo 2D (Figura 45a)

consiste de um specimen retangular com uma falha inicial. O domínio geométrico

é discretizado em uma malha de elementos do tipo T6 (triângulo quadrático). Os

parâmetros iniciais de análise são: módulo elástico = 3,24 GPa; coeficiente de

Poisson = 0,35; densidade (density) = 1.190 kg/m3; energia de fratura do Modo I

(GI) = 352 N/m; tensão coesiva normal (cohesive strength) (σmax) = 324 MPa; e

parâmetros de forma (α) = 2. São impostas velocidades e acelerações nulas

( ) aos nós localizados ao longo das fronteiras superior e inferior do

modelo, além de deformação (strain) inicial 0 = 0,036, aplicada na direção

vertical. Os deslocamentos nodais iniciais correspondentes variam

proporcionalmente à distância vertical ao centro do modelo. O tempo total

simulado equivale a 2 s, em 10.000 passos de 0,2 ns. O domínio geométrico é

dividido em partições retangulares alinhadas com o sistema de coordenadas

cartesianas. O modelo 3D é mostrado na Figura 45b. A malha é composta de

elementos do tipo Tet4 (tetraedro linear), e as partições de malha foram criadas

utilizando-se o particionador de grafos METIS (Karypis & Kumar, 1995, 1998).

Os parâmetros iniciais do modelo 3D são equivalentes ao modelo 2D. O tempo

total simulado equivale a 2,4 s, em 12.000 passos de 0,2 ns. Tanto para o

modelo 2D como para o 3D, a verificação de facetas fraturadas é realizada em

todos os passos de tempo da simulação, e elementos coesivos são inseridos

conforme necessário.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 102

Figura 45 - Geometrias dos modelos 2D (a) e 3D (b) usados nos

experimentos computacionais de simulação de fraturas.

5.2.1. Comparação entre abordagens paralelas

O primeiro experimento compara o desempenho das abordagens paralelas

discutidas no Capítulo 4. Para isso, o modelo 3D foi discretizado em uma grade

de dimensões 400x40x40, com células hexaédricas divididas em 6 tetraedros

lineares (Tet4) cada, correspondendo ao total de 3.840.000 elementos. Nesse

experimento, a malha de tetraedros foi decomposta em 32 partições, e 12.000

passos de tempo foram simulados. Na Tabela 4, são apresentados os tempos

totais correspondentes às sincronizações de atributos numéricos e conjuntos de

facetas fraturadas requisitadas pela aplicação, para cada abordagem paralela.

Os tempos de sincronização de atributos e facetas entre partições de

malha, relativos às abordagens que utilizam computações replicadas na camada

0,2 mm

0,2 mm

2 mm

espessura = 0,4 mm(thickness)

0 = 0,036

0,2 mm

0,2 mm

2 mm

0 = 0,036

0,2 mm

(a)

(b)

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 103

de comunicação, se mostraram substancialmente menores que a abordagem

convencional baseada em computações apenas em entidades locais (Seção

4.6.1), como resultado da redução dos pontos de sincronização da aplicação

paralela. Os melhores tempos obtidos correspondem à abordagem mista (Seção

4.6.4), que requer apenas dois pontos de sincronização. Neste caso, os tempos

de sincronização da aplicação foram reduzidos em aproximadamente 27% em

relação à abordagem de computações em entidades locais. A abordagem

baseada em computações simétricas com iteradores estáveis (Seção 4.6.3)

também requer apenas dois pontos de sincronização de atributos. Porém, esta

apresentou tempos maiores em comparação com a mista, devido ao maior custo

de sincronização de atributos de nós ghosts em relação aos conjuntos de facetas

da mista. A abordagem baseada em computações replicadas e sincronizações

esporádicas de nós proxies (Seção 4.6.2) resultou em tempos de sincronização

mais próximos à mista. As duas abordagens apresentam pontos de

sincronização equivalentes, se desconsiderado o custo residual das

sincronizações esporádicas de nós proxies.

Tabela 4 - Tempos de execução, em segundos, das várias abordagens

paralelas, para 12.000 passos de simulação do modelo 3D discretizado em

3.840.000 tetraedros lineares (Tet4) e executado em 32 núcleos de

processamento (1 partição de malha por núcleo).

Abordagem paralela Sincronização (atributos + facetas)

Tempo (s) Ganho relativo (%)

Computações locais

(convencional) 1.516,39 –

Computações replicadas

(com sincronização esporáridica de nós proxies) 1.113,72 26,55

Computações replicadas simétricas

(com iteradores estáveis) 1.120,04 26,14

Mista

1.104,01 27,19

5.2.2. Desempenho em relação à simulação sequencial

O segundo experimento compara o desempenho de simulações paralelas

com a versão sequencial original, considerando-se apenas a variação no número

de núcleos de processamento utilizados. Para que a simulação numérica

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 104

sequencial possa ser executada, uma discretização de malha reduzida é

necessária. Porém, a discretização requerida pelo modelo 3D para a captura do

comportamento não linear de fraturas e a convergência correta da simulação não

seria viável à execução sequencial, devido à grande quantidade de memória e

tempo de processamento necessários. Dessa forma, o modelo 2D foi utilizado

neste experimento. A malha foi discretizada em 400x40 quadriláteros, divididos

em 4 triângulos quadráticos (T6) cada, no total de 64.000 elementos, e o número

de passos de tempo simulados foi igual a 10.000. A abordagem mista de

sincronização de atributos de simulação e conjuntos de facetas fraturadas é

utilizada neste experimento e nos próximos.

Os resultados obtidos são apresentados na Tabela 5, e algumas métricas

de desempenho na Tabela 6. Na Figura 46, são mostrados o tempo de execução

total e o relativo à sincronizações de atributos e facetas, em função do número

de núcleos de processamento. Para a discretização de malha utilizada, os

ganhos de desempenho mais significativos da simulação em paralelo em relação

à sequencial ocorreram em até 4 processadores. O aumento adicional do

número de processadores não resulta em benefícios proporcionais. Isso

acontece porque os custos de comunicação, que são dominados pela

sincronização de atributos e facetas, tendem a aumentar em relação ao custo de

computação em cada partição de malha. A malha decomposta em 16 partições e

os resultados numéricos correspondentes para σy são mostrados na Figura 47.

Tabela 5 - Tempos de execução, em segundos, para 10.000 passos de

simulação do modelo 2D. O tempo total é igual à soma dos tempos de

todos os passos individuais. O tempo de cada passo corresponde ao

tempo de computação numérica mais a sincronização de atributos e

facetas e a inserção de elementos coesivos.

Modelo Tempo (s)

Discretização

de malha

Núm. de

elementos

finitos

Núm. de

núcleos de

processamento

Sincronização

(atributos +

facetas)

Inserção de

elementos

coesivos

Total

400x40 64.000 1 (sequencial) 0,00 0,02 6.333,35

2 18,70 0,80 3.572,79

4 21,12 4,22 1.948,94

8 25,87 6,87 1.402,29

16 32,33 11,08 659,06

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 105

Tabela 6 - Métricas de desempenho para as simulações numéricas do

modelo 2D. O speedup é definido como a razão entre os tempos sequecial

e paralelo, e a eficiência (ou utilização de processadores) é igual ao

speedup dividido pelo número de processadores (Quinn, 2004). A

porcentagem do tempo total utilizada na sincronização de atributos e

facetas também é apresentada.

Modelo Métrica

Discretização

de malha

Núm. de

elementos

finitos

Núm. de

núcleos de

processamento

Speedup Eficiência Sincronização

(% tempo total)

400x40 64.000 1 (serial) – – 0,00

2 1,77 0,89 0,52

4 3,25 0,81 1,08

8 4,52 0,56 1,84

16 9,61 0,60 4,90

Figura 46 - Tempo total de execução da simulação do modelo 2D em

função do número de processadores utilizados. O tempo correspondente à

sincronização de atributos e facetas também é mostrado.

0

1000

2000

3000

4000

5000

6000

7000

Tem

po

to

tal (s

)

Núcleos de processamento

Modelo 2D400x40 | 64.000 T6 | 10.000 passos

Passo

Sincronização

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 106

(a)

(b)

Figura 47 - (a) Particionamento do modelo 2D para 16 processadores;

(b) resultados numéricos para σy, obtidos nos passos 100, 2.500, 7.500 e

10.000 da simulação.

5.2.3. Desempenho relativo

No terceiro experimento, o desempenho de simulações paralelas é

comparado com relação ao aumento do número de núcleos de processamento,

considerando-se um grande número de núcleos. Assim como no experimento

anterior, a discretização de malha é mantida fixa, enquanto varia-se o número de

núcleos de processamento. O modelo 3D foi utilizado nesse experimento. A

malha foi discretizada em 400x40x40 hexaedros, divididos em 6 tetraedros

lineares (Tet4) cada, no total de 3.840.000 elementos. O número de núcleos

variou entre 32 e 512, com 12.000 passos de tempo de simulação executados.

Utilizou-se a abordagem paralela mista (Seção 4.6.4) neste experimento.

A malha decomposta em 128 partições e resultados numéricos

correspondentes para y são ilustrados na Figura 48. Resultados de

desempenho são apresentados na Tabela 7, e algumas métricas na Tabela 8. O

gráfico da Figura 49 mostra o tempo total de execução e o relativo às

sincronizações de atributos e facetas em função do número de núcleos de

processamento. Para o tamanho de problema considerado, os ganhos de

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 107

desempenho mais significativos foram obtidos em até 128 núcleos, ou 4 vezes o

valor inicial. Quando mais núcleos são utilizados, a proporção dos custos de

comunicação em relação ao tempo total aumenta, conforme esperado, o que faz

com que benefícios proporcionais não sejam mais alcançados.

(a)

(b)

Figura 48 - (a) Modelo 3D decomposto em 128 partições; (b)

resultados numéricos para σy, obtidos nos passos 500, 3.000, 6.000, 9.000 e

12.000 da simulação.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 108

Tabela 7 - Tempos de execução, em segundos, para 12.000 passos de

simulação do modelo 3D. O tempo total é igual à soma dos tempos de

todos os passos individuais. O tempo de cada passo corresponde ao

tempo de computação numérica mais a sincronização de atributos e

facetas e a inserção de elementos coesivos.

Modelo Tempo (s)

Discretização

de malha

Núm. de

elementos

finitos

Núm. de

núcleos de

processamento

Sincronização

(atributos +

facetas)

Inserção

elementos

coesivos

Total

400x40x40 3.840.000 32 1.104,01 271,22 24.470,57

64 955,50 214,14 13.311,10

128 914,96 298,81 7.481,55

256 536,10 136,97 4.124,10

512 358,67 105,63 2.365,07

Tabela 8 - Métricas de desempenho para as simulações numéricas do

modelo 3D. O speedup é a razão entre o tempo total de 32 núcleos de

processamento e o correspondente ao número de núcleos utilizados. A

eficiência (ou utilização de processadores) é definida como o speedup

dividido pelo número de núcleos de processamento (Quinn, 2004). A

porcentagem do tempo total utilizada na sincronização de atributos e

facetas também é apresentada.

Modelo Métrica

Discretização

de malha

Núm. de

elementos

finitos

Núm. de

núcleos de

processamento

Speedup Eficiência Sincronização

(% tempo total)

400x40x40 3.840.000 32 – – 4,51

64 1,84 0,92 7,18

128 3,27 0,82 12,23

256 5,93 0,74 13,00

512 10,35 0,65 15,17

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 109

Figura 49 - Tempo total de execução das simulações do modelo 3D,

em função do número de núcleos de processamento. O tempo utilizado

para a sincronização de atributos e facetas também é mostrado.

5.2.4. Escalabilidade

Este experimento mede a capacidade da simulação paralela para resolver

problemas maiores, considerando-se um aumento proporcional no número de

processadores utilizados. Dessa forma, o número de elementos locais por

partição de malha é mantido aproximadamente constante, enquanto que o

número de núcleos de processamento varia, o que leva a um aumento

proporcional do tamanho do problema em relação aos núcleos utilizados. O

modelo 3D da Figura 45b foi empregado neste experimento, com a execução de

12.000 passos de simulação. Para a sincronização de atributos de simulação e

conjuntos de facetas fraturadas, utilizou-se a abordagem paralela mista (Seção

4.6.4).

Os resultados para diversas discretizações de malha e núcleos de

processamento são apresentados na Tabela 9; o tempo total de simulação em

função do número de núcleos utilizados é mostrado no gráfico da Figura 50. No

caso ideal, espera-se que o número de processadores necessários para se

resolver um problema, mantendo-se a eficiência inicial, aumente linearmente

com o tamanho do problema. Assim, o tempo total de execução deve se manter

0

5000

10000

15000

20000

25000

30000

Tem

po

to

tal

(s)

Núcleos de processamento

Modelo 3D 400x40x40 | 3.840.000 Tet4 | 12.000 passos

Passo

Sincronização

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 110

constante quando o tamanho do modelo e número de processadores aumentam

na mesma proporção, em especial para um número grande de processadores.

Neste caso, considera-se que a aplicação escala linerarmente com o tamanho

do problema. Essa abordagem corresponde à métrica de isoeficiência (Grama et

al., 1993; Quinn, 2004).

No gráfico da Figura 50, observa-se que, para modelos de elementos

finitos menores (e núcleos de processamento correspondentes), ocorre alteração

positiva significativa no tempo total de simulação com relação ao aumento do

tamanho de problema tratado. Porém, conforme a quantidade de núcleos

utilizados (e tamanho do problema) aumenta, o tempo total de simulação

apresenta tendência a se manter próximo a valor constante, conforme esperado.

Dessa forma, considera-se a simulação paralela escalável para os tamanhos de

problema e número de núcleos de proecessamento testados. Os resultados

obtidos encontram-se consistentes com a escalabilidade da representação

topológica estimada no Capítulo 3 e observada em experimento anterior (Seção

5.1.2).

Tabela 9 - Tempos totais de execução, em segundos, do modelo 3D,

para várias discretizações e número de núcleos de processamento. O

tempo total de uma simulação é a soma dos tempos de todos os passos

individuais, e corresponde ao tempo de computação numérica mais o de

sincronização de atributos e facetas fraturadas e a inserção de elementos

coesivos.

Modelo Tempo (s)

Discretização

de malha

Núm. de

elementos

finitos

Núm. de

núcleos de

processamento

Sincronização

(atributos +

facetas)

Inserção

elementos

coesivos

Total

200x20x20 480.000 16 377,18 40,11 6.226,62

300x30x30 1.620.000 54 731,10 158,05 7.046,93

400x40x40 3.840.000 128 927,37 293,61 7.513,59

500x50x50 7.500.000 250 957,49 325,30 7.634,65

600x60x60 12.960.000 432 844,09 228,37 7.732,84

700x70x70 20.580.000 686 886,71 285,48 7.697,88

800x80x80 30.720.000 1.024 908,54 321,82 7.854,31

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 111

Figura 50 - Tempo total de execução para o modelo 3D, em função do

número de processadores utilizados. A variação da discretização do

modelo é proporcional ao número de núcleo de processamento utilizados.

5.2.5. Simulação de fraturas com microrramificações

No experimento descrito a seguir, foram realizadas simulações em paralelo

de fraturas com microrramificações (microbranching) (Zhang et al., 2007; Park et

al., 2009). Resultados de uma simulação para um modelo bidimensional são

apresentados na Figura 51. A propagação de fraturas é do tipo Modo Misto

(Mixed Mode) (Park et al., 2009), sendo utilizado um modelo de zona coesiva

extrínseco (Camacho & Ortiz, 1996; Ortiz & Pandolfi, 1999; Park et al., 2009)

com modelo constitutivo Park-Paulino-Roesler (PPR) (Park et al., 2009). Esse

tipo de simulação é mais abrangente que o Modo I utilizado nos experimentos

anteriores (embora com a mesma estrutura do fluxo de controle da aplicação

numérica) e resulta em padrões complexos de fratura, como os avaliados na

Seção 5.1.1, demonstrando que o sistema proposto é geral para simulações de

fraturas e fragmentação.

Na simulação apresentada, utilizou-se um especimen retangular com falha

inicial, de geometria similar à Figura 45a, porém com domínio geométrico com

comprimento igual a 128 mm e largura igual a 32 mm; o comprimento da falha

inicial é igual a 32 mm. Um valor unitário é atribuído à espessura do modelo,

0

1000

2000

3000

4000

5000

6000

7000

8000

9000

Te

mp

o t

ota

l (s

)

Núcleos de processamento

Isoeficiência - Modelo 3DDiscretização variável | 12.000 passos

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 112

para a computação de tensões planares. O specimen retangular corresponde ao

utilizado nas simulações sequenciais realizadas por Zhang et al. (2007) para a

investigação de fenômenos de microrramificações de fraturas. A propagação de

fraturas é do tipo Modo Misto (Mixed Mode) (Park et al., 2009), sendo utilizado

um modelo de zona coesiva extrínseco (Camacho & Ortiz, 1996; Ortiz &

Pandolfi, 1999; Park et al., 2009) com modelo constitutivo Park-Paulino-Roesler

(PPR) (Park et al., 2009).

O modelo de elementos finitos foi discretizado em uma malha

bidimensional de elementos do tipo T6 (triângulo quadrático), consistindo

inicialmente em 2.359.296 elementos e 4.722.817 nós. Para se reduzir o erro do

comprimento do caminho da fratura em relação ao esperado, devido à

dependência da discretização do domínio geométrico, as posições dos nós

internos da malha foram perturbadas ao longo de direções aleatórias, por um

fator de 0,3 vezes a distância mínima de um vértice de cada elemento aos

vértices adjacentes, conforme sugerido por (Paulino, Park, Celes & Espinha,

2010). Um operador de suavização Laplaciano foi empregado para garantir a

qualidade dos elementos da malha (Paulino, Park, Celes & Espinha, 2010).

O material do modelo simulado (Zhang et al., 2007) é PMMA

(Polymethylmethacrylate), com módulo elástico (E) = 3,24 GPa, coeficiente de

Poisson () = 0,35 e densidade (density) (ρ) = 1.190 kg/m3. Os parâmetros do

Modo I de fratura são: energia de fratura (GI) = 352,3 N/m; tensão coesiva

normal (cohesive strength) (Tnmax) = 129,6 MPa e parâmetro de forma (α) = 2. Os

valores dos parâmetros correspondentes do Modo II de fratura são idênticos ao

Modo I (GII = GI, Ttmax = Tn

max, β = α). São impostas velocidades e acelerações

nulas ( ) aos nós localizados ao longo das fronteiras superior e

inferior do modelo, além de deformação (strain) inicial 0 = 0,043, aplicada na

direção vertical. Os deslocamentos nodais iniciais correspondentes variam

proporcionalmente à distância vertical ao centro do modelo. O tempo total

simulado equivale a 22 s, em 220.000 passos de 0,1 ns. A ocorrência de

fraturas e a inserção correspondente de elementos coesivos são determinadas a

cada 10 passos de simulação.

A simulação de fraturas foi executada no conjunto de máquinas (cluster)

disponível no laboratório Tecgraf/PUC-Rio, que consiste atualmente de até 14

máquinas conectadas por rede Gigabit Ethernet. Cada máquina possui

processador Intel(R) Pentium(R) D, com dois núcleos (cores) de 3.40 GHz, e

2GB de memória RAM, sistema operacional Red Hat Linux Red Hat 4.3.2-7,

kernel de 64 bits (versão 2.6.27) e compilador gcc v. 4.3.2. A malha de

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 113

elementos finitos foi decomposta em 128 partições, utilizando-se o particionador

de grafos METIS (Karypis & Kumar, 1995, 1998), e as partições de malha foram

atribuídas aos processadores físicos disponíveis no momento da simulação

(foram utilizadas 13 máquinas, ou 26 processadores, com aproximadamente 5

partições, em média, por processador).

(a)

(b)

(c)

(d)

Figura 51 - Propagação de fratura com microrramificações ao longo

do tempo, nos passos: (a) 20.000 (2 s); (b) 80.000 (8 s); (c) 160.000 (16

s); e (d) 220.000 (22 s).

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

5 Experimentos computacionais 114

O padrão de propagação de fratura mostrado na Figura 51 encontra-se

consistente com os resultados sequenciais obtidos por (Zhang et al., 2007;

Paulino, Park, Celes & Espinha, 2010). A fratura principal se desenvolve próxima

à direção horizontal central do modelo. Ao longo do caminho da fratura, um

grande número de microrramificações do ramo principal ocorre livremente,

conforme ditado pela física do problema. Na Figura 52, uma região do modelo

simulado é ampliada para mostrar as ramificações do ramo principal. A

frequência e tamanho das ramificações tende a aumentar em conjunto com a

deformação inicial do modelo, conforme observado por Zhang et al. (2007). As

partições do modelo são mostradas na Figura 53.

Figura 52 - Microrramificações em uma região ampliada ao redor do

ramo de fratura principal.

Figura 53 - Modelo de elementos finitos decomposto em 128

partições.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

6 Conclusão

Esta tese propõe o suporte topológico ParTopS, para simulações, em

ambientes paralelos, de fraturas e fragmentação dinâmicas baseadas em

modelos coesivos extrínsecos. Esse suporte topológico fornece a representação

de fraturas necessária à viabilização de simulações escaláveis de modelos

tridimensionais, visando o tratamento de problemas de fraturas e fragmentação

em escala real.

Algumas contribuições são apresentadas por este trabalho. Uma

representação compacta de malhas distribuídas é fornecida por ParTopS;

diferentemente de abordagens anteriores, elementos coesivos são

explicitamente representados e tratados de maneira consistente, assim como os

outros elementos da malha de elementos finitos. Um novo tratamento para a

representação de cópias de entidades remotas em cada partição (camada de

comunicação) é proposto, com a classificação de entidades em proxies e ghosts.

Esse tratamento fornece um suporte topológico consistente para a

representação de elementos coesivos em malhas distribuídas. Com base na

representação de malhas distribuídas de ParTopS, propõe-se um algoritmo para

a inserção adaptativa de elementos coesivos em paralelo. O algoritmo

demonstra a viabilidade da representação paralela de fraturas extrínsecas.

Operações topológicas simétricas são exploradas pela inserção de elementos

coesivos, a fim de se reduzir a comunicação necessária entre partições de

malha. Esse conceito é também empregado no contexto de simulações

numéricas, com o uso de computações replicadas simétricas. Como

consequência, o número de pontos de sincronização de atributos da simulação é

reduzido, e a estrutura do fluxo de controle da aplicação numérica paralela é

significativamente simplificada em relação à abordagem convencional.

Para avaliar a aplicação de ParTopS em problemas reais, uma aplicação

sequencial existente de simulação de fraturas paralelizada. Um pequeno número

de modificações foi necessário para permitir a execução da aplicação em um

ambiente paralelo.

Experimentos computacionais desacoplados de simulações numéricas

foram realizados para verificar o suporte topológico proposto e medir o

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

6 Conclusão 116

desempenho e a escalabilidade do algoritmo de inserção de elementos coesivos.

A escalabilidade e a corretude de simulações numéricas de fraturas foram

demonstradas através de simulações de modelos bidimensionais e

tridimensionais. Os resultados obtidos sugerem que o sistema ParTopS pode ser

aplicado de maneira eficaz para viabilizar simulações de fraturas e fragmentação

de modelos em escala real.

Alguns aspectos relativos a simulações numéricas de elementos finitos não

foram abordados aqui. Assume-se que a malha inicial é bem balanceada pelos

algoritmos de particionamento utilizados, e que a inserção de elementos

coesivos não altera significativamente essa condição, uma vez que o número

esperado desses elementos é tipicamente muito menor que o de volumétricos.

Com isso, eventuais desbalanceamentos de carga são ignorados. Esses

aspectos serão investigados por pequisas futuras.

6.1. Trabalhos futuros

Algumas sugestões de trabalhos futuros são apresentadas a seguir:

Refinamento e simplificação adaptativa de malhas de fraturas e

fragmentação dinâmicas. A implementação atual de ParTopS

cobre os aspectos relativos à representação distribuída de malhas

de elementos finitos de fraturas, com as operações necessárias

para o tratamento de elementos coesivos. Uma extensão natural

deste trabalho está relacionada ao suporte a técnicas de

refinamento e simplificação adaptativa de malhas. Essas técnicas

são importantes para se aumentar a eficiência da simulação, uma

vez que o nível de refinamento requerido para a corretude da

simulação pode variar de acordo com a região de malha

considerada. Um desafio relativo à representação de malhas

adaptativas em paralelo é a propagação eficiente de modificações

topológicas entre partições de malha.

Balanceamento dinâmico de carga de malhas de fraturas e

fragmentação. Com o emprego de técnicas de refinamento e

simplificação adaptativas de malhas de elementos finitos, um

suporte para balanceamento dinâmico de carga entre partições de

malha torna-se fundamental à manutenção do ganho de

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

6 Conclusão 117

desempenho obtido com essas técnicas. O suporte ao

balanceamento dinâmico de carga deve incluir a migração eficiente

de entidades topológicas entre partições e considerar a topologia

de malhas contendo elementos coesivos.

Abordagem paralela híbrida. Esta pesquisa considerou o

problema de propagação de fraturas em ambientes paralelos de

memória distribuída. Com a disponibilidade de estações de trabalho

multiprocessadas, e crescente o emprego de placas gráficas

(GPUs) programáveis na aceleração de computações numéricas,

surge uma demanda para o aproveitamento desses recursos. Essa

é uma área de pesquisa bastante ativa atualmente, com diversas

questões ainda em aberto. Enquanto os ambientes de memória

distribuída atuais fornecem a escalabilidade necessária para o

tratamento de problemas maiores, os ambientes locais permitem

melhorar a eficiência da simulação dentro dos limites de cada nó de

processamento individual. Dessa forma, é interessante estender o

suporte topológico de malhas a fim de permitir uma integração

eficiente e transparente de ambas as abordagens paralelas na

computação numérica.

Visualização interativa de fraturas dinâmicas. Para permitir a

análise de resultados correspondentes a eventos de fratura

dinâmicos, métodos de visualização eficientes e escaláveis são

importantes. A visualização de fraturas apresenta desafios devido à

topologia dinâmica das malhas e ao grande volume de dados

resultantes de simulações paralelas.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

7 Referências bibliográficas

ANDREWS, G. Foundations of Multithreaded, Parallel, and Distributed Programming. Addison Wesley, 2000.

BATHE, K. J. Finite Element Procedures. Prentice Hall, New Jersey, 1996.

BEALL, M. W.; SHEPHARD, M. S. A general topology-based mesh data structure. Int J Numer Methods Eng, 40(9):1573–1596, 1997.

BELYTSCHKO, T.; LIU, W. K.; MORAN, B. Nonlinear Finite Elements for Continua and Structures. Wiley, New York, 2000.

CAMACHO, G. T., ORTIZ, M. Computational modelling of impact damage in brittle materials. International Journal of Solids and Structures 33 (20-22), 2899–2938, 1996.

CELES, W.; PAULINO, G. H.; ESPINHA, R. A compact adjacency-based topological data structure for finite element mesh representation. Int J Numer Methods Eng, 64(11):1529–1565, 2005a.

CELES, W.; PAULINO, G. H.; ESPINHA, R. Efficient handling of implicit entities in reduced mesh representations. J Comput Inf Sci Eng, 5(4):348–359 (Special Issue on Mesh-Based Geometric Data Process), 2005b.

CHOUDHURY, N. Parallel Incremental adaptivity for Unstructured Meshes in Two Dimensions. MSc. Dissertation, Department of Computer Science, Univesity of Illinois at Urbana-Champaign, 2006.

COOK, R. D. et al. Concepts and Applications of Finite Element Analysis. 4th ed. John Wiley & Sons, 2001.

DESOUZA, J.; KALÉ, L. V. MSA: Multiphase Specifically Shared Arrays. Proceedings of the 17th International Workshop on Languages and Compilers for Parallel Computing, West Lafayette, Indiana, USA, 22-25 set. 2004

DEVINE, K. et al. Zoltan data management services for parallel dynamic applications. In: Comput Sci Eng 4(2):90–97, 2002.

DEVINE, K. D. et al. New challanges in dynamic load balancing. In: Appl. Numer. Math., vol. 52(2-3): 133—152, 2005.

DOOLEY, I. et al. Parallel Simulations of Dynamic Fracture Using Extrinsic Cohesive Elements, J Sci Comput 39(1): 144-165, 2009.

ESPINHA, R.; CELES, W.; RODRIGUEZ, N.; PAULINO, G. H. ParTopS: compact topological framework for parallel fragmentation simulations. In: Eng with Comput, 25(4): 345-365, 2009.

FOSTER, I. Designing and building parallel programs: concepts and tools for parallel software engineering. Addison–Wesley, Boston, 1995.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

7 Referências bibliográficas 119

GARIMELLA, R. V. Mesh data structure selection for mesh generation and FEA applications. In: Int J Numer Methods Eng, 55(4):451–478, 2002.

GRAMA, A. Y.; GUPTA, A.; KUMAR, V. Isoefficiency: measuring the scalability of parallel algorithms and architectures. In: IEEE Parallel Distrib Technol, 1(3):12–21, 1993.

HEATH, M. Scientific Computing: An Introductory Survey. 2nd ed. McGraw-Hill, 2002.

HENDRICKSON, B.; DEVINE, K. Dynamic load balancing in computational mechanics. In: Comput Methods Appl Mech Eng, 184(2–4):485–500, 2000.

HUANG, C.; LAWLOR, O.; KALE, L. V. Adaptive MPI. In: Proceedings of the 16th international workshop on languages and compilers for parallel computing (LCPC 2003), Lecture Notes in Computer Science, v. 2958, p. 306–322, 2003.

KALÉ, L. V.; KRISHNAN, S. CHARM++: a portable concurrent object oriented system based on C++. In: Paepcke A (ed), Proceedings of OOPSLA’93, ACM Press, p. 91–108, Sep. 1993.

KALÉ, L. V.; KRISHNAN, S. Charm++: Parallel Programming with Message-Driven Objects. In: WILSON, G. V.; LU, P. (eds) Parallel Programming using C++. MIT Press, London, p. 175–213, 1996.

KARYPIS, G.; KUMAR, V. METIS—Serial Graph Partitioning and Fill-reducing Matrix Ordering Library, Department Computer Science Engineering, University of Minnesota, 1995. Disponível em: <http://www.cs.umn.edu/~karypis/metis>. Acesso em: 9 jan. 2011.

KARYPIS, G.; KUMAR, V. Multilevel k-way partitioning scheme for irregular graphs. J Parallel Distrib Comput, 48(1):96–129, 1998a.

KARYPIS, G.; KUMAR, V. A parallel algorithm for multilevel graph partitioning and sparse matrix ordering. J Parallel Distrib Comput, 48(1):71–95, 1998b.

KERNINGHAN, B. W.; RITCHIE, D. M. The C programming language. Prentice Hall Press. Upper Saddle River, NJ, USA, 1988.

KLEIN, P. A. et al. Physics-based modeling of brittle fracture: cohesive formulations and the applications of meshfree methods. Sandia National Laboratory, Technical Report, SAND 2001-8009, 2001.

KIRK, B. S. et al. libMesh: a C++ library for parallel adaptive mesh refinement/coarsening simulations. Eng Comput, 22(3):237–254, 2006.

LAWLOR, O. S. et al. ParFUM: a parallel framework for unstructured meshes for scalable dynamic physics applications. Eng Comput 22 (3-4), 215–235, 2006.

MANGALA, S. et al. Parallel adaptive simulations of dynamic fracture events. Eng. with Comput. 24(4): 341-358, 2008.

MÄNTYLÄ, M. An Introduction to Solid Modeling. Computer Science Press: Rockville, MD, 1988.

MATTSON, T.; SANDERS, B.; MASSINGILL, B. Patterns for parallel programming. 1st ed. Addison-Wesley Professional, 2004.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

7 Referências bibliográficas 120

MOTA, A.; KNAP, J.; ORTIZ, M. Fracture and fragmentation of simplicial finite element meshes using graphs. Int. J. Numer. Methods Engrg. 73(11): 1547-1570, 2008.

MPI FORUM. MPI: A Message-Passing Interface Standard. Disponível em: <http://www.mpi-forum.org>. Acesso em: 23 fev. 2011.

NOELS, L.; RADOVITZKY, R. A general discontinuous Galerkin method for finite hyperelasticity. Formulation and numerical applications Int. J. Numer. Methods Engrg. 68(1): 64-97, 2006.

NOELS, L.; RADOVITZKY, R. An explicit discontinuous Galerkin method for non-linear solid dynamics: Formulation, parallel implementation and scalability properties. Int. J. Numer. Methods Engrg. 74(9): 1393-1420, 2008.

ORTIZ, M.; PANDOLFI, A. Finite-deformation irreversible cohesive elements for three-dimensional crack-propagation analysis. Int J Numer Methods Engrg 44 (9), p. 1267–1282, 1999.

OWEN, S. J.; SHEPHARD, M. S. Editorial: special issue on trends in unstructured mesh generation. Int J Numer Methods Engrg 58:159–160, 2003.

OZTURAN, C. Distributed environment and load balancing for adaptive unstructured meshes. PhD Thesis, Comput Sci Department, Rensselaer Polytechnic Institute, 1995.

OZTURAN, C. et al. Parallel adaptive mesh refinement and redistribution on distributed memory computers. Comp Methods Appl Mech Eng 119(1–2):123–127, 1994.

PANDOLFI, A.; ORTIZ, M. Solid modeling aspects of three-dimensional fragmentation. Engineering with Computers 14(4), 287-308, 1998.

PANDOLFI, A.; ORTIZ, M. An efficient adaptive procedure for three-dimensional fragmentation simulations. Eng Comput 18(2):148–159, 2002.

PAPOULIA, K. D.; VAVASIS, S. A.; GANGULY, P. Spatial convergence of crack nucleation using a cohesive finite-element model on a pinwheel-based mesh. Int J Numer Methods Eng 67(1):1–16, 2006.

PARK, K. Potential-Based Fracture Mechanics Using Cohesive Zone and Virtual Internal Bond Modeling, PhD Dissertation, Department of Civil and Environmental Engineering, University of Illinois at Urbana-Champaign, 2009.

PARK, K.; PAULINO, G. H.; ROESLER, J. R. A unified potential-based cohesive model of mixed-mode fracture. Journal of the Mechanics and Physics of Solids 57 (6), 891–908, 2009.

PARK, K.; PAULINO, G. H.; CELES, W.; ESPINHA, R. Cohesive zone modeling of dynamic fracture: An adaptive mesh refinement and coarsening strategy. Int. J. Numer. Meth. Engng., 2011 (aceito para publicação)

PAULINO, G. H.; CELES, W.; ESPINHA, R.; ZHANG, Z. A general topology-based framework for adaptive insertion of cohesive elements in finite element meshes. Eng Comput 24(1):59–78, 2008.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

7 Referências bibliográficas 121

PAULINO, G. H.; PARK, K.; CELES, W.; ESPINHA, R. Adaptive dynamic cohesive fracture simulation using nodal perturbation and edge-swap operators. Int. J. Numer. Meth. Engng 84:1303–1343, 2010. (DOI: 10.1002/nme.2943)

QUINN, M. J. Parallel Programming in C with MPI and OpenMP. McGraw-Hill, New York, 2004.

KUMAR, V.; GUPTA, A. Analyzing scalability of parallel algorithms and architectures. J Parallel Distrib Comput 22(3):379–391, 1994.

RADOVITZKY, R. et al. A scalable 3D fracture and fragmentation algorithm based on a hybrid, discontinuous Galerkin, cohesive element method. Computer Methods in Applied Mechanics and Engineering, 200(1-4), p. 326-344, jan. 2011

REMACLE, J-F. et al. Parallel algorithm oriented mesh database. Eng Comput 18(3):274–284, 2002.

REMACLE, J-F.; KARAMETE, B. K.; SHEPHARD, M. S. Algorithm oriented mesh database. Proceedings, 9th International Meshing Roundtable, Sandia National Laboratories, p.349-359, Oct. 2000.

REMACLE, J-F.; SHEPHARD, M. S. An algorithm oriented mesh database. Int J Numer Methods Eng 58(2):349–374, 2003.

SEOL, E. S.; SHEPHARD, M. S. Efficient distributed mesh data structure for parallel automated adaptive analysis. Eng Comput 22(3–4):197–213, 2006.

STEWART, J. R.; EDWARDS, H. C. A framework approach for developing parallel adaptive multiphysics applications. Finite Elem Anal Des 40(12):1599–1617, 2004.

STROUSTRUP, B. The C++ Programming Language, Third Edition. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 1997.

UNIVERSITY OF ILLINOIS. Department of Computer Science. Parallel Programming Laboratory. Threaded CHARM++ Manual. Disponível em: <http://charm.cs.uiuc.edu/manuals/html/tcharm/manual-1p.html>. Acesso em: 1 mai. 2011.

WALTZ, J. Derived data structure algorithms for unstructured finite element meshes. Int.J Numer Methods Eng 54(7):945–963, 2002.

WEILER, K. Topological structures for geometric modeling. Ph.D. Thesis, Rensselaer Polytechnic Institute, New York, 1986.

WEILER, K. The radial edge structure: a topological representation for non-manifold geometric boundary modeling. Geometric Modeling for CAD Applications. WOZNY, M. J.; MCLAUGHLIN, H. W.; ENCARNAÇÃO, J. L. (eds) p. 3–36, 1988.

XU, X. P.; NEEDLEMAN, A. Numerical simulations of fast crack growth in brittle solids. Journal of the Mechanics and Physics of Solids 42(9):1397–1434, 1994.

ZHANG, Z. Extrinsic Cohesive Modeling of Dynamic Fracture and Microbranching Instability Using A Topological Data Structure, PhD Thesis, Department of Civil and Environmental Engineering, University of Illinois at Urbana-Champaign, 2007.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A

7 Referências bibliográficas 122

ZHANG, Z.; PAULINO, G. H. Cohesive zone modeling of dynamic failure in homogeneous and functionally graded materials. International Journal of Plasticity 21 (6), 1195–1254, 2005.

ZHANG, Z.; PAULINO, G. H.; CELES, W. Extrinsic cohesive modelling of dynamic fracture and microbranching instability in brittle materials. Int J Numer Methods Eng 72(8):893–923, 2007.

ZIENKIEWICZ, O. C.; TAYLOR, R. L.; ZHU, J. Z. The Finite Element Method: Its Basis & Fundamentals. Butterworth-Heinemann, Oxford, UK, 2005.

PU

C-R

io -

Cer

tific

ação

Dig

ital N

º 07

1131

3/C

A