• Nenhum resultado encontrado

Implementa¸ c˜ oes Computacionais

7.1 Introdu¸c˜ao

As teorias apresentadas nos cap´ıtulos anteriores foram incorporadas ao sis-tema computacional INSANE (Interactive Structural Analysis Environment ), que utiliza a metodologia de programa¸c˜ao orientada a objetos (POO) como t´ecnica de implementa¸c˜ao.

O INSANE ´e atualmente um sistema composto por v´arios m´odulos, imple-mentados na linguagem Java, que permite a participa¸c˜ao de pesquisadores em di-versos n´ıveis do conhecimento e que estes desenvolvam trabalhos simultˆaneos, uma vez que os m´odulos podem ser, separadamente, compilados e ter os m´etodos de suas classes testados. De forma geral, o relacionamento entre estes m´odulos constituem uma determinada aplica¸c˜ao. Isto exige uma constante preocupa¸c˜ao por partes dos pesquisadores em manter a organiza¸c˜ao do programa a mais gen´erica poss´ıvel para que futuras implementa¸c˜oes possam ser feitas sem modifica¸c˜oes naquelas j´a existen-tes.

O sistema INSANE ´e composto por trˆes grandes aplica¸c˜oes: pr´e-processador, processador e p´os-processador. O pr´e e o p´os-processador s˜ao aplica¸c˜oes gr´aficas inte-rativas que disponibilizam, respectivamente, ferramentas de pr´e e p´os-processamento de diferentes modelos discretos. O processador ´e a aplica¸c˜ao que representa o n´ucleo num´erico do sistema e ´e o respons´avel pela obten¸c˜ao dos resultados de diferentes

156 modelos discretos de an´alise estrutural.

Este trabalho expandiu o n´ucleo num´erico do INSANE, o qual ´e formado por interfaces e classes abstratas que representam as diversas abstra¸c˜oes de uma resolu¸c˜ao num´erica de modelos discretos, cada qual com sua hierarquia de classes respons´avel por cumprir o seu devido papel no processamento.

Neste cap´ıtulo, s˜ao apresentadas as interfaces e classes do n´ucleo num´erico que, diretamente, se relacionam com as implementa¸c˜oes decorrentes deste trabalho. Para tanto, s˜ao utilizados diagramas de classes que permitem conhecer a hierarquia das mesmas e como elas se comunicam para desempenhar suas fun¸c˜oes. Estes diagramas seguem a proposta da Unified Modeling Language (UML), linguagem padronizada para a modelagem de sistemas de software orientados a objetos. Para facilitar a visualiza¸c˜ao das expans˜oes e modifica¸c˜oes realizadas, utiliza-se a simbologia mos-trada na figura 7.1: em amarelo, encontram-se as classes modificadas e em verde, as classes que foram criadas durante o desenvolvimento deste trabalho.

JUDE Evaluation

Classe não modificada Classe modificada Nova classe Classe adaptada de

Germanio (2005)

Figura 7.1: Simbologia utilizada nos diagramas em UML deste trabalho

7.2 Organiza¸c˜ao do N´ucleo Num´erico do INSANE

Uma vis˜ao geral da organiza¸c˜ao do n´ucleo num´erico do INSANE ´e mostrada na figura 7.2. As superclasses que o representam s˜ao as interfaces Assembler, Model e Persistence e a classe abstrata Solution.

A interface Assembler pertence ao m´odulo assembler, sendo respons´avel por montar, conforme o problema a ser resolvido, as matrizes e vetores da equa¸c˜ao matricial de equil´ıbrio

AAA ¨XXX + B¨¨ BB ˙X˙X˙X + CCC XXX = RRR − FFF (7.1) onde XXX ´e o vetor das vari´aveis de estado do problema; ˙X˙X˙X e ¨XXX s˜¨¨ ao os vetores com,

<<interface>> Assembler <<interface>> Model java.util.Observable Solution java.util.Observable <<interface>> java.util.Observer <<interface>> Persistence

Figura 7.2: Organiza¸c˜ao do n´ucleo num´erico do INSANE

respectivamente, a primeira e a segunda varia¸c˜ao temporal da vari´avel de estado; AAA, B

BB e CCC s˜ao as matrizes dos coeficientes, que podem ou n˜ao depender da vari´avel de estado e suas derivadas; e RRR e FFF representam os termos independentes do sistema de equa¸c˜oes.

A interface Assembler, atualmente, ´e implementada pela classe FemAssembler, que ´e apropriada aos diversos tipos de problemas que podem ser modelados pelo M´etodo dos Elementos Finitos.

Por meio desta Tese, foi criado no INSANE um m´odulo chamado solution, que ´e respons´avel pela solu¸c˜ao de problemas lineares e n˜ao-lineares (discutido no cap´ıtulo 2). Neste m´odulo, a classe abstrata Solution ´e a que desencadeia o processo de solu¸c˜ao, possuindo os recursos necess´arios para resolver o sistema matricial acima (equa¸c˜ao 7.1).

A interface Model pertence ao m´odulo model e, atualmente, ´e implementada pela classe FemModel, que representa o modelo de elementos finitos propriamente dito. Esta possui os dados relativos ao modelo discreto a ser analisado e fornece para Assembler todas as informa¸c˜oes necess´arias para montar a equa¸c˜ao do modelo, que ser´a resolvida por Solution.

158 pertencente ao m´odulo persistence, que trata os dados de entrada e, principalmente, persiste os dados de sa´ıda para as demais aplica¸c˜oes, sempre que observa altera¸c˜oes no estado do modelo discreto, e ´e particularizada segundo o tipo de arquivo a persistir (figura 7.3).

A persistˆencia de dados mais utilizada ´e baseada em arquivos XML, sigla esta que ´e uma abrevia¸c˜ao de eXtensible Markup Language, ou seja, linguagem de mar-ca¸c˜ao estendida. A XML permite criar dados estruturados, baseada em um arquivo texto. Nesse sentido, a classe PersistenceAsXML foi constantemente modificada nesta Tese para contemplar todas as implementa¸c˜oes realizadas, tornando poss´ıvel a persistˆencia de entrada e sa´ıda de dados relacionados a estas implementa¸c˜oes.

JUDE Evaluation persistence pkg <<interface>> Persistence <<interface>> java.util.Observer PersistenceAsInsane PersistenceAsXML java.util.Observer <<interface>>

Figura 7.3: Diagrama de classe para Persistence

O processo de observa¸c˜ao de altera¸c˜oes ocorre segundo o padr˜ao de projeto Observer-Observable, que ´e um mecanismo de propaga¸c˜ao de mudan¸cas. Quando um objeto dito observador (que implementa a interface java.util.Observer) ´e criado, ele ´e inscrito na lista de observadores dos objetos ditos observados (que es-tendem a interface java.util.Observable). Quando alguma mudan¸ca ocorre no estado de um objeto observado, ´e disparado ent˜ao o mecanismo de propaga¸c˜ao de mudan¸cas, que se encarrega de notificar os objetos observadores para se atualiza-rem. Isto garante a consistˆencia e a comunica¸c˜ao entre o componente observador (Persistence) e os componentes observados (Solution e Model) (figura 7.2).

Um outro m´odulo muito importante e utilizado por todo o n´ucleo num´erico do INSANE ´e o m´odulo util, onde ficam as classes de utilit´arios em geral. Nesta

Tese, um dos componentes de util chamado LinearAlgebra (figura 7.4) foi expandido e modificado. As classes modificadas foram IMatrix, IVector e LinearEquati-onSystems e a classe criada foi Tensor. As classes IMatrix e IVector s˜ao aquelas que representam uma matriz e um vetor, respectivamente. Elas possuem v´arios m´etodos para manipula¸c˜oes destas entidades matem´aticas. A classe LinearEqua-tionSystems ´e respons´avel pela solu¸c˜ao do sistema de equa¸c˜oes alg´ebricas lineares e nela foi introduzido o M´etodo de Cardan para a obten¸c˜ao das ra´ızes de uma equa-¸c˜ao do terceiro grau, auxiliando, por exemplo, no c´alculo de tens˜oes principais. A classe Tensor possui m´etodos que definem v´arias opera¸c˜oes tensoriais. Sua cria¸c˜ao foi motivada pelos tensores presentes nas formula¸c˜oes apresentadas na se¸c˜ao 5.4 e no cap´ıtulo 6.

JUDE Evaluation

linearAlgebra

pkg

IMatrix IVector LinearEquationSystems Tensor

Figura 7.4: Classes pertencentes `a LinearAlgebra

Maiores informa¸c˜oes sobre o n´ucleo num´erico do INSANE podem ser encon-tradas nos trabalhos de Fonseca (2006) e Fonseca (2008).

A seguir, s˜ao descritas as implementa¸c˜oes realizadas neste trabalho, por meio de interfaces e classes que foram criadas ou modificadas no INSANE.

7.3 Implementa¸c˜ao das Solu¸c˜oes Lineares e N˜

ao-Lineares

Uma vez montada a equa¸c˜ao do problema, fica a cargo da classe abstrata Solution (figura 7.5) resolvˆe-la. Esta classe estende a classe Observable, uma vez que ´e observada pela persistˆencia. Seu principal m´etodo ´e denominado execute() e ´e ele quem desencadeia todo o processo de solu¸c˜ao.

A classe SteadyState ´e a mais simples das subclasses de Solution, pois repre-senta a solu¸c˜ao de um problema linear est´atico. A classe abstrata EquilibriumPath

Documentos relacionados