**Título**: Ampliação e aprimoramento de um simulador geomecânico de fraturamento hidráulico # Introdução Esta dissertação aborda o desenvolvimento de um simulador geomecânico de fraturamento hidráulico, chamado _Chimas_. O desenvolvimento do Chimas teve início numa parceria entre a POLI - USP e a Petrobras e simula o fraturamento de subsolo para otimizar a extração de petróleo em águas profundas. Em seu atual estágio de desenvolvimento, o Chimas é capaz de obter soluções numéricas para a formulação _poroelástica_ bidimensional. Como outros programas simuladores de fenômenos físicos dessa natureza, o Chimas adota variações do método de _elementos finitos_ para obter as soluções numéricas. Embora seja um método teórico consolidado na indústria e pesquisa científica, a implementação de abordagens baseadas em elementos finitos impõem barreiras práticas de escalabilidade, principalmente quando trata da versão tridimensional do problema. ## Justificativa A utilização de modelos computacionais reduz custos de produção e aumenta a segurança operacional, pois permite simular diferentes abordagens, seus resultados e antecipar possíveis condições críticas no ambiente de produção. O aprimoramento de tais tecnologias de simulação impacta diretamente operações com custo e complexidade altos, como é o caso da extração de petróleo em águas profundas. Os softwares existentes que se propõem a atender essa demanda têm alcance restrito, seja por não fornecerem os recursos necessários ou por restrições de natureza comercial. Além de gerar soluções em conformidade com o modelo teórico, o processamento das soluções numéricas precisa estar ajustado às condições impostas pelo recursos computacionais disponíveis. Simulações fidedignas tendem a exaurir rapidamente os recursos computacionais, daí a necessidade de otimizar sua implementação com técnicas de paralelização e de buscar as melhores arquiteturas e condições de execução. Tais estratégias de processamento podem também servir para problemas similares que empregam o método de elementos finitos. Os sistema de equações que emergem de tais problemas apresentam muitas similaridades entre si, de modo que estratégias computacionais bem sucedidas para um problema têm grande potencial de sucesso para outros problemas. ## Objetivo O objetivo da pesquisa se divide em duas frentes: _implementação da simulação tridimensional_ e avaliação de estratégias para _melhoria de desempenho_. ### Formulação Tridimensional Estender um simulador bidimensional para três dimensões implica em reformular tanto as premissas teóricas quanto a implementação em si. A malha tridimensional que discretiza o domínio do problema possui características próprias que não estão presentes na malha bidimensional. Em particular, atualizar a malha para incorporar e monitorar as fraturas criadas a partir do campo de tensões do meio gerado pelas forças é bastante distinto do modelo bidimensional. ### Desempenho e Paralelização Aumentar a dimensionalidade do problema gera um crescimento exponencial no número de operações necessárias para obter a solução. Mesmo os métodos numéricos mais eficientes podem demandar horas ou dias de processamento em computadores de alto desempenho, a depender da escala e precisão exigidas pelo problema. Foram escolhidas duas estratégias para reduzir o tempo total de processamento da simulação: * *Refino anisotrópico da malha*. No lugar de usar uma malha uniforme em todo o domínio, utiliza-se uma _malha adaptativa_. Neste tipo de malha, a densidade da discretização do domínio é aumentada dinamicamente nos pontos de maior instabilidade, sobretudo onde há aplicação de pressão e formação de fraturas. * *Incorporação de processamento em GPU*. A obtenção da solução numérica é dividida em várias etapas, sendo que é a solução iterativa do sistema de equações a fase que mais consome tempo. Deslocar parte do processamento para GPU pode reduzir o tempo total de processamento, sobretudo se comparado com o desempenho CPUs de custo equivalente. Embora o processamento da simulação seja paralelizável, a quantidade de barreiras de sincronização requeridas para a comunicação entre os processos impõe limites práticos para a divisão do trabalho. Como todo problema que envolve a obtenção de soluções numéricas de equações diferenciais parciais, a solução é aproximada a partir de um _stencil_ baseado nos graus de liberdade dos elementos da malha tridimensional. Inevitavelmente, cada unidade de processamento precisará obter valores nodais não-locais. Esse fato impacta principalmente o tempo de processamento em ambientes distribuídos, mas também é relevante em ambientes de memória compartilhada. # Metodologia A correta implementação do simulador poroelástico tridimensional depende da formulação matemática do problema físico, que é baseada no método de elementos finitos. Os tópicos que fundamentam a implementação são desenvolvidos a seguir. ## Formulação Linear Elástica * Condição de equilíbrio mecânico. * Formulação integral. * A função de teste. * Discretizando as variáveis em graus de liberdade. * Formulação final. * Quadratura Gaussiana. ## Formulação de Poroelasticidade * Deslocamentos no meio poroelástico. * Equacionamento do fluxo. * Sistema não linear por Newton-Raphson. ## Implementação O fluxo global da execução do simulador envolve as seguintes etapas: 1. Construção da malha inicial e parametrização (condições de contorno e aplicação de forças). 2. Iteração por todos os elementos da malha para construção do sistema de equações. 3. Obtenção da solução numérica para o sistema de equações. 4. Pós-processamento da solução para obter o campo de tensões do meio. 5. Avaliar e criar fraturas na malha. No problema abordado, essas cinco etapas correspondem a um único passo no tempo. Ao final da última etapa, a malha é reconstruída e o fluxo recomeça. O processo se repete até atingir o tempo final solicitado. ### Linguagem e Bibliotecas O Chimas é escrito em _C++_ e utiliza diversas bibliotecas de código aberto para implementar o simulador. As principais componentes de software incorporados são: * *GMSH*: Construção da malha tridimensionai. * *libmesh*: Biblioteca de elementos finitos responsável por gerar o sistema de equações a partir da malha. * *PETSc*: Obtém a solução numérica para o sistema de equações. As inovações em relação à implementação bidimensional envolvem a construção da malha, incorporação das fraturas e a obtenção da solução numérica. Dessas, a que mais consome tempo é a obtenção da solução numérica para o sistema de equações, mas esta é diretamente impactada pela estrutura da malha. ### Geração da malha Para entregar resultados precisos, é necessário que a malha representando o material seja suficientemente fina, ou seja, a discretização seja feita com elementos pequenos o suficiente para que a solução convirja para o resultado correto. Em problemas geomecânicos, há áreas no domínio onde há maior instabilidade das variáveis avaliadas e outras áreas mais estáveis, onde há pouca ou nenhuma alteração. Essa característica permite adotar estratégias de malhamento não uniforme, o que reduz drasticamente a quantidade de operações realizadas e não prejudica a qualidade da solução. ### Solução do sistema linear A solução numérica é obtida pelo método de _Krylov_, que é o método numérico mais eficiente chegar a soluções numéricas em sistemas de equações com matrizes esparsas. O método de Krylov é um método iterativo e aceita parâmetros que podem reduzir o número de iterações necessários para chegar a solução. Além disso, é possível utilizá-lo tanto em CPU quando em GPU. A biblioteca PETSc pode trabalhar tanto com CPU quanto com GPU. Contudo, métodos alternativos para a execução em GPU, como os oferecidos pela biblioteca _AMGX_ da NVIDIA, têm potencialmente melhor desempenho. # Resultados O tempo de execução total e parcial é a principal medida avaliada. Serão comparados os tempos obtidos em relação à execução nas condições originais, ou seja, usando uma malha uniforme e as configurações mais comuns do solver numérico. Serão avaliados os tempos de execução da aplicação em diferentes contextos, afim de avaliar quais implementações e parametrizações - sobretudo do solver numérico - são mais eficientes para o problema. O principal ambiente de testes é o supercomputador _SDumont_, que permite realizar experimentos em memória compartilhada, distribuída e em GPU. O desempenho também será avaliado em outros servidores de processamento. A utilização de containers permite agilizar e padronizar o ambiente de execução em diferentes máquinas, ajudando a isolar quais os fatores causam mais impacto nos resultados. Além disso, a disponibilização do container permite reproduzir mais facilmente os resultados apresentados. ## Validação A validação dos resultados obtidos compreende: * Verificar a convergência numérica da solução. * Quando viável, comparar com a solução analítica para o problema. * Comparar com a solução obtida por outro método numérico verificado. # Conclusão e Trabalhos Futuros