JinSol, uma interface em Java para solvers lineares. Italo C. N. Lima, João Paulo K. Zanardi, Faculdade de Engenharia, PPGEM, UERJ, 20550-900, Rio de Janeiro, RJ E-mail: italonievinski@gmail.com, jpzanardi@gmail.com Luiz Mariano Carvalho Instituto de Matemática e estatística - UERJ 20550-900, Rio de Janeiro, RJ E-mail: luizmc@gmail.com Resumo: Este trabalho consiste na apresentação de uma plataforma de testes e desenvolvimento de métodos de resolução de sistemas lineares com ferramentas de análise de matrizes e de resultados. Esta plataforma conta com uma biblioteca de solvers, precondicionadores e rotinas criadoras de matrizes baseadas em processos de discretização de problemas físicos com capacidade de receber novas ferramentas desenvolvidas por usuários, aumentando sua biblioteca padrão. Palavras-chave: Java, Matlab, Precondicionadores, Sistemas Lineares, Métodos de Krylov Exposição do problema Há uma unanimidade entre os pesquisadores da área de métodos iterativos para solução de sistemas lineares: não existe o melhor método para a solução de problemas com matrizes nãosimétricas. Outro ponto de vista comum é o de que, para matrizes não-normais, há muito ainda o que se trabalhar na compreensão dos fatores que influenciam na convergência dos métodos. Ainda outro consenso, é o da necessidade de precondicionadores para acelerar os métodos de Krylov. [3]. Temos atualmente uma grande variedade de métodos de solução de sistemas lineares e precondicionadores disponíveis e uma vasta bibliografia identificando algumas de suas propriedades e resultados com diferentes problemas. Entretanto ao nos depararmos com um novo problema buscamos também realizar diversos testes afim de obter informações sobre o comportamento de cada método visando encontrar uma escolha viável de solução, tanto em questão de velocidade de processamento quanto em necessidade de armazenamento. Realizar estes testes pode ser uma tarefa exaustiva e consumir tempo devido a dificuldade de se configurar um ambiente de testes, organizar relatórios com os dados dos testes, construir gráficos para análise entre outros aspectos. Da mesma forma ao desenvolver ou modificar um solver ou um precondicionador, desejamos igualmente realizar testes comparativos, com outros métodos aplicados sobre diferentes problemas, o que nos leva à um cenário semelhante. Pensando neste cenário foi iniciado o desenvolvimento de uma ferramenta que funcione como plataforma de testes de solucionadores de sistemas lineares com interface gráfica. O objetivo é tornar este processo simples e eficiente, integrando plataformas e linguagens, com portabilidade e capaz de receber novos métodos e ferramentas em forma de plug-ins através arquivos xml, além dos que já estarão configurados para o usuário. Os arquivos xml poderão ser gerados manualmente pelo usuário, ou a partir de uma área da interface que irá auxiliar neste processo. 228
Proposta de desenvolvimento. A atual proposta é uma reformulação e um grande avanço sobre o trabalho apresentando em [6], que foi desenvolvido inteiramente em MATLAB. A experiência obtida no desenvolvimento da versão anterior nos levou a melhores escolhas, como utilização do Java para o desenvolvimento da interface gráfica, o que possibilitou um avanço significativo na criação do JinSol. Para a troca de informações entre diferentes plataformas, foi implantado o uso um padrão de arquivo de texto, que permite a comunicação e passagem de parâmetros entre a interface e rotinas em qualquer outra linguagem. O programa possui uma interface, que integra rotinas de resolução de sistemas lineares para tornar mais eficiente a realização de testes de métodos conhecidos sobre novos problemas ou de novos métodos sobre problemas conhecidos. Além de uma plataforma de testes, o objetivo é ser um auxiliador no desenvolvimento de métodos de resolução de sistemas lineares. O programa em si também deve atuar como uma biblioteca de métodos e problemas, fornecendo ao usuário opções padrão, mas um das ideias centrais é a de que o programa seja capaz de receber do usuário novos recursos. A escolha do Java para a plataforma principal se deve à sua portabilidade e ao seu paradigma de orientação a objeto fornecer reutilização de código sem duplicação, o que garante uma manutenção facilitada de todo o programa, além de pacotes de widgets abrangentes. Esta plataforma por sua vez tem como meio de funcionamento a utilização de diversos programas de forma integrada para realização dos testes e análise dos dados resultantes. Resultados Obtidos Após o primeiro período de desenvolvimento temos em funcionamento a primeira versão do JinSol oferecendo uma gama razoável de opções de testes, com ferramentas para análise gráfica de propriedades das matrizes e de resultados. As implementações até o presente momento são Figura 1: Interface JinSol apenas de rotinas de solução em MATLAB, algumas intradas à C através de mex-files, as quais recebem como parâmetros os dados fornecidos pelo usuário na interface do programa, contudo, 229
essas informações são enviadas de uma forma genérica, pensando em futuras implementações de rotinas em outras linguagens. A Figura 1 mostra uma das abas de configuração de teste para a categoria de solver básico. A categoria solver básico resolve o problema do tipo M 1 Ax = M 1 b, (1) onde A R n n é a matriz de coeficientes, x, b R n são o vetor de incógnitas e o vetor de constantes respectivamente e M é um precondicionador. O sistema precondicionado será resolvido com um método de Krylov. A aba apresentada na Figura 1 é de configuração do problema, onde o usuário irá preparar uma lista de problemas a serem resolvidos. As matrizes A podem ser criadas a partir de uma das opções fornecidas, ou carregadas de um arquivo em um dos formatos implementados, como o formato mtx utlizado pelo matrix market(http://math.nist.gov/matrixmarket), um repositório de matrizes para estudos comparativos de algoritmos de algebra linear numérica. O lado direito b e o chute inicial x 0 serão também escolhidos pelo usuário. Na aba Solver usuário irá configurar, de forma semelhante, uma lista de solvers, com opções como GMRES, PCG e BiCG [5]. Por fim será configurada uma lista de precondicionadores M de uso geral, entre as opções temos fatorações incompletas e algumas opções de inversa aproximada [1]. Formadas as listas o usuário Figura 2: Relatório em texto irá então rodar uma bateria de testes que será a combinação dos elementos destas três listas. Os dados dos testes serão impressos em um relatório em dois formatos possíveis. Um deles é o formato csv (comma separated value) que poderá ser aberto, organizado e analisado em um programa de edição de planilhas, como MS Excel. O outro é um arquivo de texto que pode ser visualizado no próprio programa como na imagem (2) ou em um editor de texto de preferência. O programa irá gerar também outros dados que poderão ser armazenados, segundo a escolha 230
do usuário, para serem analisados, como os vetores de decaimento do resíduo, que podem ser visualizados no próprio JinSol (Figura 3). O programa oferece também uma ferramenta para análise de matrizes, fornecendo dados como número de não zeros, número de condicionamento e autovalores. É possível também visualizar o padrão de esparsidade (Figura 4) e a posição dos autovalores no plano de Argand-Gauss. Figura 3: Análise do decaimento de resíduo O programa conta também com uma categoria com uma classe de precondicionadores flexíveis para problemas de ponto de sela [2] do tipo descrito em [4], cuja rotina utilizada deriva da desenvolvida pelo próprio Fortes [4] para solução de um problema de simulação de enchimento de reservatórios. A razão do precondicionador ser chamado de flexível é que M em (1) se trata de um método de resolução aproximado do sistema original Ax = b, que utiliza métodos de Krylov na solução. Este método aproximado leva em consideração as propriedades do problema de ponto de sela, aumentando a efetividade do precondicionador ao resolver o sistema precondicionado. Uma terceira categoria oferece uma classe de precondicionadores de decomposição em domínios com uso de malha grosseira. Conclusão O funcionamento da versão descrita do JinSol já passou por avaliação interna e o programa está sendo utilizado para testes em um projeto em parceria com a Petrobras no estudo de precondicionadores que calculam aproximações da inversa da matriz A, ou seja ao invés de se obter M A calcula-se diretamente M 1 A 1. Um dos principais interesses nessa classe de precondicionadores é o alto nível de paralelismo que algumas rotinas são capazes de implementar. O uso do programa tem permitido que sejam implementadas melhorias baseadas na experiência dos usuários na utilização do programa, entre elas: Melhor organização de dados em relatórios. Implementações visuais que facilitam o uso do programa. 231
Figura 4: Análise de Matrizes Armazenamento de dados úteis para análises posteriores. A instalação do programa em outros computadores se mostrou simples tanto no sistema operacional Windows quanto no Ubuntu. Esta portabilidade é um dos objetivos desde a formulação do programa e que parece ter sido alcançada com sucesso. Como planos futuros temos que em breve iremos adicionar o suporte para que o usuário possa implantar novos solvers, precondicionadores e rotinas geradoras de matrizes através de arquivos xml, que poderão ser gerados através de uma interface gráfica simples e intuitiva. Outros planos não muito distantes envolvem a adição de rotinas em linguagem C, C++ e Fortran e uma comunicação com os pacotes PETSc (http://www.mcs.anl.gov/petsc) e Trilinos (http://trilinos.sandia.gov/packages), entre outros. Serão adicionadas também diferentes ferramentas de análise das informações oriundas do problema e um banco de dados de testes estruturado para evitar a execução de testes repetidos desnecessariamente, perda de informações, e facilitar outros testes comparativos. O programa se encontra em teste e ainda não está disponível para download nesta versão, mas estará em uma próxima versão com condições de uso de software livre. Referências [1] M. Benzi, Preconditioning Techniques for Large Linear Systems: A Survey, Journal of Computational Physics, 182 (2002) 418-477. [2] M. Benzi; G. H. Golub; J. Liesen, Numerical solution of saddle point problems. Acta Numerica, 14 (2005) 1-137. [3] L. M. Carvalho, Avanços em métodos de Krylov para solução de sistemas lineares de grande porte. Segunda Edição., SBMAC, São Carlos - SP, 2012. 232
[4] W. R. Fortes, Precondicionadores e solucionadores para resolução de sistemas lineares obtidos de simulação de enchimento de reservatórios, Dissertação de mestrado, PPG-EM UERJ, 2008. [5] G. Meurant, Computer Solution of Large Linear Systems. Elsevier, North-Rolland, 1999. [6] I. C. Nievinski Lima; L. M. Carvalho, Programa com interface gráfica para testes e estudo de soluções para problemas de ponto de sela. In: Congresso Nacional de Matemática Aplicada e Computacional, Águas de Lindóia - SP. Anais do CNMAC, 2012. v. 4. 233