• Nenhum resultado encontrado

6.2 NeoPZ

6.2.2 Descrição dos principais módulos

Nesta seção faz-se um breve comentário sobre os módulos destacados anteriormente. Para um entendimento mais aprofundado sobre o ambiente NeoPZ, existe uma docu- mentação do código que pode ser obtida pelo site http://www.labmec.org.br, além das referências [56, 34, 72, 16].

Módulo Geométrico

O ambiente NeoPZ dá uma distinção muito forte entre geometria e espaço de aproxima- ção. As classes do módulo Geométrico são responsáveis pela aproximação da geometria do problema e pela topologia da malha. Para a definição da topologia da malha, existem

da classe TPZGeoMesh. Um diagrama de classes que definem um elemento geométrico é mostrado na Figura 6.2. A classe TPZGeoElement implementa um elemento geométrico com padrão de refinamento uniforme, já a classe TPZGeoElRefPattern implementa um elemento geométrico que é refinado de acordo com um padrão de refinamento genérico, a partir de um arquivo de dados com informações necessárias a respeito da divisão do elemento.

TPZGeoEl

TPZGeoElement TPZGeoElRefPattern

Figura 6.2: Diagrama de classe que definem um elemento geométrico.

No NeoPZ, a definição geométrica e o refinamento utilizam definições topológicas que consideram que um elemento é o resultado da união de uma quantidade finita de subdomínios chamados de lados, podendo ser nós, arestas, faces e volume. Desta forma, é possível estabelecer transformações paramétricas entre os elementos. Mais detalhes podem ser vistos em [72]. Um esquema da composição de um elemento geométrico quadrilateral no NeoPZ é ilustrado na Figura 6.3.

0 1 2 3 4 5 6 7 8

Figura 6.3: Esquema de um elemento quadrilateral no NeoPZ, composto de 9 lados: 4 nós (0, 1, 2, 3), 4 arestas (4, 5, 6, 7) e 1 face (8).

Módulo de Subespaços de aproximação

Esse módulo é composto por classes que definem os subespaços de aproximação, o elemento finito, as funções de forma (funções de base) e as regras de integração para a

construção das matrizes e vetores dos elementos.

Os subespaços de aproximação são implementados pelos elementos computaci- onais, derivados da classe base TPZCompEl. Esta classe define os métodos básicos que devem ser implementados pelas classes derivadas. As principais classes derivadas são TPZInterpolationSpace e TPZInterfaceElement. Um esquema da estrutura de clas- ses que definem os subespaços de aproximação é ilustrado na Figura 6.4. A classe TPZInterpolationSpace e suas derivadas definem e implementam os métodos comuns aos métodos de Galerkin contínuo e descontínuo. O método de elementos finitos clássico (Galerkin contínuo) é implementado pela classe TPZInterpolatedElement e suas deriva- das. O método de Galerkin descontínuo é implementado pelas classes TPZCompElDisc e TPZInterfaceElement. A classe TPZCompElDisc é responsável pela interpolação no interior dos elementos descontínuos, sem exigir continuidade em suas fronteiras, e a classe TPZInterfaceElement é responsável pelos cálculos na interface entre elementos.

TPZCompEl

TPZInterfaceElement TPZInterpolationSpace

TPZInterpolatedElement

TPZCompElHdiv

TPZCompElDisc

Figura 6.4: Arquitetura de classes que definem os espaços de aproximação. Os elementos computacionais derivados da classe TPZInterfaceElement não pos- suem funções de aproximação associadas a ele. De fato, as funções de aproximação são definidas à esquerda e à direita da interface, sobre os elementos vizinhos, que devem ser do tipo TPZInterpolationSpace. O processo de construção da malha computacional é igual para elementos contínuos e descontínuos. Os elementos são criados através do método TPZCompMesh::AutoBuild. Para criar elementos contínuos e/ou descontínuos, deve-se chamar antes os métodos TPZCompMesh::SetAllCreateFunctionsContinuous e/ou TPZCompMesh::SetAllCreateFunctionsDiscontinuous. Os elementos geométricos não fazem distinção sobre elementos contínuos e descontínuos. A diferença é a pre-

sença dos elementos geométricos associados às interface, após a construção da malha computacional.

O cálculo das integrais é feito pelas classes computacionais, auxiliados por seus elementos geométricos e pelo material. As integrais são calculadas numericamente através de quadraturas gaussianas. Por exemplo,

ˆ K ϕiϕjdx = np X ip=1 ϕi(xip)ϕj(xip)wip,

com xip a coordenada do ponto de integração, wip o seu peso e K um elemento repre-

sentativo. Os elementos computacionais calculam as funções de forma e suas derivadas. O elemento geométrico fornece o mapeamento geométrico e a matriz jacobiana. Para cada ponto de integração, o elemento solicita a seu material que faça a contribuição. Ou seja, a matriz do sistema algébrico do elemento é atualizada a cada ponto de integração, por exemplo kij =Pnpip=1ϕi(xip)ϕj(xip)wip.

Módulo Material

As classes pertencentes a esse módulo são responsáveis pela implementação da for- mulação variacional da EDP tratada no NeoPZ. A função dessas classes é calcular a contribuição de um ponto de integração para a matriz e o vetor do sistema algébrico de um elemento. As classes base deste módulo são a classe TPZMaterial e sua classe deri- vada TPZDiscontinuousGalerkin. No NeoPZ, um elemento computacional existe desde que uma formulação variacional (objeto da classe TPZMaterial) estiver associada a ele. A classe TPZMaterial define os métodos e funções necessários para a construção de problemas do MEF clássico. São de especial importância os métodos:

• Contribute(TPZMaterialData &data, REAL weight, TPZFMatrix &ek, TPZF- Matrix &ef): calcula a contribuição de um ponto de integração para a matriz (ek) e o vetor (ef ) do sistema algébrico de um elemento. Para cada ponto de integração o método recebe como parâmetros de entrada um objeto do tipo TPZ- MaterialData e o valor do peso da regra de integração. A classe TPZMaterialData faz uma interface entre as classes TPZCompEl e TPZMaterial. Os principais atri- butos da classe TPZMaterialData são phi e dphix, os quais devolvem os valores das funções de forma e suas derivadas calculadas no ponto de integração

Matrix &ef, TPZBndCond &bc): calcula a contribuição de um ponto de integra- ção para a matriz (ek) e o vetor (ef ) do sistema algébrico de um elemento de contorno. O NeoPZ trabalha com condições de contorno do tipo Dirichlet, Neu- mann e mista. A classe TPZBndCond define se o elemento é de contorno.

A classe TPZDiscontinuousGalerkin, classe derivada da TPZMaterial, define os métodos e funções adicionais necessários para o método de Galerkin descontínuo. São de especial importância o método Contribute, já definido na classe TPZMaterial, e os seguintes métodos:

• ContributeInterface(TPZMaterialData &data, TPZMaterialData &dataleft, TPZ- MaterialData &dataright, REAL weight, TPZFMatrix &ek, TPZFMatrix &ef): calcula a contribuição de um ponto de integração para a matriz e o vetor do sistema algébrico de um elemento de interface. Pode-se observar que o método recebe como parâmetros de entrada dois objetos do tipo TPZMaterialData refe- rentes aos elementos vizinhos (a esquerda e a direita) do elemento de interface. • ContributeBCInterface(TPZMaterialData &data, TPZMaterialData &dataleft,

REAL weight, TPZFMatrix &ek, TPZFMatrix &ef, TPZBndCond &bc): cal- cula a contribuição de um ponto de integração para a matriz e o vetor do sistema algébrico de um elemento de interface de contorno. As simulações de Galerkin descontínuo não utilizam o método ContributeBC(). As condições de contorno são aplicadas pelo método ContributeBCInterface().

Módulo Matricial

Esse módulo é composto das classes matriciais e dos métodos de resolução de sistemas lineares disponíveis no NeoPZ. São disponíveis diversos modos de armazenamento de matrizes: matriz cheia, matriz de banda, matriz simétrica, matriz não simétrica e matriz esparsa. Para resolução de sistemas lineares são implementados os métodos diretos, tais como decomposição LU, Cholesky, LDLt e método frontal. Os métodos iterativos são

Jacobi, SOR, SSOR, Gradiente conjugado, GMRes, etc.

Documentos relacionados