0% acharam este documento útil (0 voto)
12 visualizações19 páginas

Leonardo Tarazona Muzí de Carvalho, Leonardo Figueira Werneck, Grazione de Souza, Helio Pedro Amaral Souto

O artigo descreve uma implementação paralela usando a API OpenMP para simulação numérica de escoamentos em reservatórios de gás natural. Os métodos estacionários de Jacobi, Gauss-Seidel e SOR foram paralelizados e comparados, com o método SOR sendo escolhido para estudos variando o número de volumes da malha e características do escoamento. Ganhos de desempenho foram obtidos com a paralelização em relação às versões seriais.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
12 visualizações19 páginas

Leonardo Tarazona Muzí de Carvalho, Leonardo Figueira Werneck, Grazione de Souza, Helio Pedro Amaral Souto

O artigo descreve uma implementação paralela usando a API OpenMP para simulação numérica de escoamentos em reservatórios de gás natural. Os métodos estacionários de Jacobi, Gauss-Seidel e SOR foram paralelizados e comparados, com o método SOR sendo escolhido para estudos variando o número de volumes da malha e características do escoamento. Ganhos de desempenho foram obtidos com a paralelização em relação às versões seriais.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 19

Revista Brasileira de Computação Aplicada, Julho, 2020

DOI: 10.5335/rbca.v12i2.10158
Vol. 12, No 2, pp. 103–121
Homepage: seer.upf.br/index.php/rbca/index

ARTIGO ORIGINAL

Uma implementação paralelizada via a API OpenMP para a


simulação numérica de reservatórios de gás natural

A parallel implementation via the OpenMP API for numerical


simulation of natural gas reservoirs
Leonardo Tarazona Muzí de Carvalho1 , Leonardo Figueira Werneck1 ,
Grazione de Souza ,1 , Helio Pedro Amaral Souto ,1
1
Departamento Modelagem Computacional, Instituto Politécnico, UERJ, Brasil.
* [email protected]; [email protected]; [email protected], [email protected]

Recebido: 04/11/2019. Revisado: 08/01/2020. Aceito: 30/06/2020.

Resumo
Nas últimas décadas, a indústria de óleo e gás tem empregado cada vez mais recursos para reduzir os custos
computacionais em simulações numéricas de escoamentos em reservatórios. O estudo de casos realísticos leva,
em geral, à solução de sistemas de equações algébricas não-lineares que demandam esforços computacionais
significativos de processamento e memória. Tais equações são obtidas a partir da discretização das equações
diferenciais parciais utilizadas na modelagem dos escoamentos. Um exemplo de técnica aplicada em implementa-
ções de alto desempenho, a qual leva à redução no tempo de processamento, é a Application Programing Interface
(API) Open Multi-Processing (OpenMP), baseada na utilização de memória compartilhada e de linhas de execução
(threads). Neste trabalho, utiliza-se a paralelização via o OpenMP para melhorar o desempenho de um simulador
numérico de escoamentos bidimensionais em reservatórios de gás natural. Os métodos estacionários de Jacobi,
Gauss-Seidel e SOR, para a solução de sistemas de equações algébricas, foram paralelizados e comparados. O
método SOR foi o escolhido para ser aplicado nos estudos envolvendo a variação do número de volumes da malha
computacional e das características do escoamento. Em todas as simulações realizadas obteve-se ganhos com a
paralelização em relação ao desempenho das versões seriais, atingindo-se valores máximos de speedup superiores
a 7 em alguns casos.

Palavras-Chave: API OpenMP; gás natural; paralelização; simulação de reservatórios; métodos estacionários.

Abstract
Over the past decades, the oil and gas industry has increasingly used resources to reduce computational costs
in reservoir numerical simulations. Realistic case studies generally lead to the solution of systems of nonlinear
algebraic equations that require significant computational processing and memory efforts. We obtain such
equations from a process of discretization of partial differential equations used in reservoir flow modeling. An
example of a technique applied to high-performance implementations that leads to reduced processing time is
the Open Multi-Processing (OpenMP) Application Programming Interface (API), based on shared memory usage
and threads. In this work, OpenMP is used to improve the performance of a numerical flow simulator in natural
gas reservoirs. Jacobi, Gauss-Seidel, and SOR stationary methods for the solution of algebraic equation systems
were parallelized and compared. We choose the SOR method to be applied in studies involving the variation of the
number of computational mesh volumes and the flow characteristics. In all simulations performed, gains were
obtained with parallelization when compared to the performance of serial versions, reaching maximum speedup
values higher than 7 in some cases.

Keywords: API OpenMP; natural gas; parallelization; reservoir simulation; stationary methods.
104 de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121

1 Introdução são possíveis de serem realizadas utilizando outras me-


todologias (Werneck, 2016). Com esta finalidade se uti-
Desde a antiguidade, o ser humano tem contato com liza, por exemplo, o processamento em paralelo (uma
o gás natural. Babilônios, gregos e persas possuíam das técnicas da computação científica de alto desem-
templos onde o gás natural era expelido naturalmente. penho), cuja principal meta é dividir uma determinada
Economicamente, o gás tem sido utilizado desde os tarefa em várias menores e executar cada uma delas,
séculos XVIII e XIX, quando os chineses utilizavam os por exemplo, em diferentes núcleos de processamento
locais onde o gás era ejetado para construir fornos vol- ou computadores.
tados para a fabricação de cerâmica e a metalurgia. A Um exemplo de técnica de computação de alto desem-
partir do século XIX, o gás natural passou a ser obtido penho é o MPI (Message Passage Interface). Neste caso,
como subproduto da produção de petróleo (Werneck, diferentes processadores/computadores são utilizados
2016). Graças à criação de gasodutos e do queima- na realização de uma dada tarefa empregando o acesso
dor de Bunsen, em 1885, o gás natural obtido junto à memória distribuída (Carpen-Amarie et al., 2017).
com o óleo passou a ser amplamente utilizado apesar Uma alternativa inclui o processamento usando GPUs
de, até então, não existir tecnologia que viabilizasse (Graphics Processing Unit), por meio da aplicação da API
o transporte de grandes quantidades de gás a longas CUDA (NVIDIA, 2014) ou da OpenACC (NVIDIA, 2018).
distâncias. O período de construções, após o final da Também é possível a utilização da API OpenMP, a qual
segunda guerra mundial, foi de grande avanço na área, pode ser utilizada em computadores com arquiteturas
devido à instalação de uma extensa linha de gasodutos, de memória compartilhada, sendo as threads (linhas
viabilizando a utilização do gás natural em larga escala, de execução) empregadas na realização de tarefas em
principalmente devido à diversidade de aplicações e paralelo (Dietrich et al., 2017, ARB, 2011). Sistemas
ao seu menor potencial poluidor em relação ao óleo híbridos também podem ser pensados, os quais uti-
(Anderson, 1984). O desenvolvimento de tecnologias lizam em conjunto o acesso às memórias distribuída
voltadas para o aproveitamento do gás natural foi am- e compartilhada como, por exemplo, códigos escritos
pliado, desta forma, em diferentes frentes, incluindo com comandos do MPI e do OpenMP (Yakubov et al.,
a área de desenvolvimento de software científico. Tais 2013, Redondo, 2017). Salienta-se, no entanto, que os
avanços incluem a aplicação de técnicas de computa- ganhos atingidos com essas tecnologias não são ilimita-
ção de alto desempenho (High Performance Computing dos. Até o presente momento, não se conhece nenhum
(HPC)), como é o caso deste trabalho. tipo de técnica de computação de alto desempenho que
obtenha um retorno linear de economia de tempo, de
acordo com o aumento de threads e/ou processadores,
1.1 Computação de alto desempenho
para todos os problemas (Halsey, 2016). Dentro do con-
texto apresentado e em função do fato da API OpenMP
Desde que os computadores começaram a ser ampla-
ser aplicada mais facilmente aos códigos já existentes,
mente comercializados, as empresas de tecnologia de
optou-se pelo seu uso neste trabalho.
todo o mundo têm voltado seus esforços para melhor
atender aos consumidores, tendo sido impulsionadas
a introduzir melhorias em seus produtos. A alta com- 1.2 OpenMP
petitividade levou as grandes fabricantes a investirem
em tecnologias de software e hardware de alto desem- Conforme já mencionado, o OpenMP é uma API que
penho. Portanto, não poderia ser diferente com relação permite a paralelização de processos através do uso
ao desenvolvimento de processadores e placas gráfi- de memória compartilhada (Chapman et al., 2008), de
cas. Cada vez mais, as desenvolvedoras têm buscado maneira mais simples quando comparada, por exemplo,
entregar novos componentes de processamento extre- a uma implementação utilizando a biblioteca CUDA ou
mamente velozes (NVIDIA, 2018). No entanto, para mesmo a API MPI, já que é uma aplicação que visa a
se obter um desempenho computacional significativo, organizar tarefas de baixo nível através de instruções de
não basta apenas possuir um hardware potente. Na ver- alto nível. Por exemplo, é possível definir as regiões a
dade, o uso de recursos físicos necessita do emprego de serem paralelizadas, o número de threads, as variáveis e
softwares otimizados para que seja possível o desenvol- as regiões de memória a serem compartilhadas e, como
vimento da computação de alto desempenho, ou seja, o processador e suas threads lidarão com um trecho
que tem por finalidade reduzir o tempo empregado na do programa especificado, a paralelização com apenas
execução dos códigos. uma linha de código contendo algumas diretrizes.
Na área de simulação numérica de fenômenos físicos, Uma thread é um conjunto de instruções de um có-
em problemas de engenharia, à medida que se estuda digo de programa executado em um determinado tempo
problemas cada vez mais complexos, a resolução numé- de maneira independente. Essencialmente, o sistema
rica requer o uso intenso de recursos de memória e/ou operacional aloca os recursos necessários para a exe-
processamento. Neste contexto, encontra-se a motiva- cução do processo em questão e, se múltiplas threads
ção para a implementação de técnicas de computação participam desta execução, elas compartilham, por-
de alto desempenho. O objetivo desta aplicação é possi- tanto, das mesmas regiões de memória e recursos. A
bilitar a simulação de modelos matemáticos associados biblioteca do OpenMP (omp.h) já se incube desta or-
a sistemas de equações com um grande número de in- ganização, para evitar as complexidades inerentes às
cógnitas ou, até mesmo, tornar viável as simulações implementações e aos erros (uma implementação de
numéricas de problemas físicos que, muitas vezes, não mais baixo nível poderia acarretar em falhas e em uma
de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121 105

complexidade crescente, de acordo com a evolução do poros, nos quais os fluidos encontram-se armazenados
nível de dificuldade do problema a ser tratado compu- e podem escoar (Ertekin et al., 2001).
tacionalmente) (Chapman et al., 2008). Em função da presença das não linearidades, um
Apesar da possibilidade de se executar um código maior esforço computacional em termos de processa-
inteiro em paralelo, podem existir algumas limitações mento e memória é exigido quando da solução numé-
que a tornam inviável. O OpenMP permite paraleli- rica das equações governantes, para a determinação
zar laços que são finitos e com término previamente do campo de pressões no reservatório. Assim, surge a
conhecido, não podendo sofrer alterações de tamanho necessidade do uso de técnicas de computação de alto
durante a sua execução. Um laço só poderá ser pa- desempenho quando do estudo de casos realísticos, nos
ralelizado se as suas iterações forem independentes, quais os reservatórios possuem quilômetros de exten-
conforme discutido em Chapman et al. (2008). Vale são nas direções x e y e dezenas de metros na direção z.
a pena destacar que a biblioteca do OpenMP está dis- Nesses casos, as malhas computacionais podem possuir
ponível para as linguagens de programação C, C++ e um número de nós que pode ultrapassar um milhão.
Fortran e, mais recentemente, para o Python. Diversas Além disso, em certas aplicações, mais de uma variá-
áreas de pesquisa e desenvolvimento, além de aplica- vel dependente pode ser determinada (por exemplo, a
ções industriais, têm tirado proveito da aplicação de temperatura em um escoamento não-isotérmico) e o
técnicas tais como o OpenMP. Por exemplo, a simulação tempo de produção do reservatório pode se estender
numérica de reservatórios de óleo e/ou gás (Werneck, por décadas. Nesse cenário, simulações numéricas cujo
2016, Redondo, 2017, Werneck et al., 2019), sendo que tempo de execução computacional pode durar mais do
os reservatórios de gás natural são o objeto de interesse que 1 dia não são incomuns. Portanto, os métodos
deste artigo. numéricos a serem empregados devem contemplar o
tratamento das não linearidades e das escalas envolvi-
1.3 Simulação numérica de reservatórios de gás das nos problemas de engenharia. Diante do exposto,
conclui-se que as estratégias de computação paralela
A simulação numérica de reservatórios é uma área da tornam-se uma alternativa interessante, no sentido de
engenharia de reservatórios, um dos ramos da enge- viabilizar a simulação numérica voltada para a análise
nharia de petróleo, dedicada à aplicação de métodos de cenários de produção realísticos.
numéricos para a determinação de soluções aproxima-
das, para a dinâmica do escoamento nas formações
portadoras de hidrocarbonetos. A simulação pode ser 2 Escoamento de Gás em Meios Porosos
utilizada com a finalidade, por exemplo, de se deter-
minar o campo de pressões no reservatório e estimar Um meio poroso possui uma estrutura sólida e poros
as pressões nos poços produtores, contribuindo para a que podem estar preenchidos com fluidos. Quanto mais
realização do teste de pressão e a avaliação de cenários poroso for um reservatório, maior será a sua capaci-
de produção. Desta forma, é possível otimizar a pro- dade de armazenamento de hidrocarbonetos (Dandekar,
dução de forma a maximizar o fator de recuperação de 2013). A porosidade efetiva, φ, é a relação entre o vo-
hidrocarbonetos. lume ocupado pelos poros interconectados e o volume
Segundo de Souza (2013), a aplicação da simulação total do meio poroso. Na engenharia de petróleo, a
numérica no gerenciamento de reservatórios tornou-se porosidade efetiva é a mais relevante porque somente
um padrão na indústria de óleo e gás, com a sua acei- os poros interconectados permitem o escoamento de
tação sendo atribuída a fatores tais como: avanços no fluidos através do reservatório.
desenvolvimento dos recursos computacionais (maior
velocidade de processamento e aumento da capacidade Uma outra propriedade da formação rochosa, a per-
de memória); avanços das técnicas numéricas aplicadas meabilidade, denotada em geral pelo tensor k (Dande-
na resolução das equações diferenciais parciais (EDPs) kar, 2013), fornece uma medida da resistência que o
que governam o escoamento; capacidade dos simulado- meio poroso opõe ao escoamento de um fluido. Ela é
res para tratar de diversos casos na escala de campo de denominada de permeabilidade absoluta, ou permea-
interesse prático; desenvolvimento de modelos para a bilidade, se o meio poroso encontra-se 100% saturado
caracterização do sistema poço-reservatório; e capaci- (preenchido) por uma única fase líquida. Já a permeabi-
dade de se estudar as complexas técnicas de recuperação lidade relativa é uma medida da resistência que o meio
de hidrocarbonetos via a simulação numérica. poroso oferece ao movimento de uma fase, se duas ou
O escoamento em reservatórios é, em geral, gover- mais fases ocupam a formação rochosa.
nado por um conjunto de equações diferenciais parciais Para escoamentos nos quais ocorrem efeitos não
não-lineares parabólicas e, portanto, condições inicial e contemplados pela lei de Darcy clássica, geralmente
de contorno devam ser fornecidas para que elas possam se utiliza a denominação de escoamento não-Darcy.
ser resolvidas. No caso do escoamento de gás natural, Como exemplos de efeitos não-Darcy, que podem ser
a não linearidade das equações decorre da dependência incorporados na permeabilidade aparente, tem-se: o
das propriedades físicas do gás com relação à pressão escoamento de fluidos não-newtonianos, os efeitos
e devido aos efeitos não-lineares oriundos da incorpo- inerciais e/ou turbulentos, o escorregamento do fluido
ração de fenômenos típicos do escoamento de gás em na superfície sólida, além de outros que causam não
meios porosos, ou seja, um meio formado por um arca- linearidades (Aziz and Settari, 1990). Em geral, a lei de
bouço sólido com a presença de espaços denominados Darcy modificada é dada pela Eq. (1):
106 de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121

ka 4Kn
 
v=– (∇p – ρg∇D) , (1) ka = f(Kn )k = (1 + αk Kn ) 1 + k, (3)
µ 1 + Kn

onde v é a velocidade superficial do fluido, ka é deno- onde αk é o parâmetro de rarefação definido na Eq. (4)
minado de tensor de permeabilidade aparente, µ é a (Jiang and Younis, 2015),
viscosidade do fluido, p é a pressão, ρ é a massa es-
pecífica do fluido, g é a magnitude da aceleração da
gravidade e D é a profundidade . No caso do escoa- 128 0,4
αk = arctan(4Kn ) (4)
mento a altas velocidades, desvios da lei de Darcy são 15π 2
observados, sendo inicialmente devidos à inércia, se-
guidos da ocorrência de turbulência. No caso de fluidos e a Eq. (5) representa o número de Knudsen, onde λ
não-newtonianos, modificações são adotadas para o (Eq. (6)) é o livre caminho médio das moléculas, e Rh
cálculo da viscosidade (Aziz and Settari, 1990). Para (Eq. (7)) é o raio hidráulico característico dos poros,
gases, pode ocorrer o escorregamento do gás na super-
fície sólida dos poros, que resulta em maiores valores
λ
da permeabilidade efetiva quando comparados ao caso Kn = (5)
de líquidos. Este fenômeno é considerado, em parte, Rh
nas simulações deste trabalho.
A partir do contexto exposto, as seguintes hipóteses r
são consideradas no modelo físico-matemático: λ=
µ πZRT
(6)
p 2M
• o reservatório é homogêneo e anisotrópico em rela-
ção à permeabilidade absoluta; s
• a compressibilidade da rocha é pequena e constante; √ k
• não ocorrem reações químicas; Rh = 2 2τ , (7)
φ
• o escoamento é bidimensional e ocorre a baixas ve-
locidades;
onde Z é o fator de compressibilidade do gás, R a cons-
• o escoamento é monofásico e isotérmico;
tante universal dos gases, T é a temperatura, M a massa
• o gás no reservatório é considerado real;
molecular do gás, τ é a tortuosidade do meio poroso e
• podem ocorrer efeitos de escorregamento;
k é a média geométrica dos valores das permeabilida-
• fluido com composição química constante;
des do tensor diagonal k, no caso de um meio poroso
• o poço de produção é vertical e penetra totalmente a
considerado anisotrópico (Chen et al., 2006).
formação rochosa;
Dependendo do valor de Kn, o meio pode ser dito
• não ocorrem efeitos eletrocinéticos;
contínuo se Kn ≤ 10–3 , o regime de escorregamento
• a ausência de estocagem no poço e dano à formação.
ocorre para 10–3 < Kn < 0, 1, com uma transição para
0, 1 ≤ Kn ≤ 10 e quando Kn ≥ 10 há o escoamento
O escorregamento do gás na superfície sólida, em um molecular livre (Bestok, 1999). Para o regime de escor-
meio poroso, acontece quando o livre caminho médio regamento tem-se que αk é igual a zero.
das moléculas do fluido é comparável ao raio hidráulico
característico dos poros do reservatório (Florence et al.,
2007, Li et al., 2016, Chung et al., 2015). Desta forma, o 3 Equação governante
gás escoa no meio poroso diferentemente dos líquidos
por duas razões fundamentais: a alta compressibilidade Para se obter uma EDP em termos da pressão utiliza-se,
e o efeito Klinkenberg (Klinkenberg, 1941, Aziz and Set- em conjunto a conservação de massa, a lei de Darcy
tari, 1990). A correção de Klinkenberg foi elaborada modificada e relações para a determinação das propri-
com o objetivo de incorporar os efeitos do escorrega- edades de rocha e de fluido em função da pressão. A
mento nas medidas de permeabilidade (Eq. (2)), conservação de massa, para o escoamento de gás em
meios porosos, pode ser escrita como na Eq. (8) (Erte-
kin et al., 2001),
 
bK
ka = 1+ k (2)
p   ρ v q ρ
∂ ρsc φ sc sc sc
+∇· – =0 (8)
∂t B B Vb
onde bK é chamado de parâmetro de Klinkenberg.
Em função das condições de escoamento, em reser- onde ρsc é a massa específica determinada nas condições
vatórios dos tipos shale gas e tight gas sands, não conven- padrão de pressão (psc ) e temperatura (Tsc ), B = ρsc /ρ
cionais, pode ocorrer o fenômeno do escorregamento. é o fator volume de formação do gás, qsc é um termo
A permeabilidade efetiva do gás também pode ser cal- fonte/sorvedouro em condições padrão e Vb é o volume
culada, empregando um modelo mais geral, por Eq. (3): total (rocha mais poros).
de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121 107

Substituindo-se a Eq. (1) na Eq. (8), considerando


que ρsc é constante e desprezando-se os efeitos gravi-
kay ∂p
   
tacionais tem-se a Eq. (9): ∂ kax ∂p ∂ Jw   ∂p
+ – p – pwf = Γ . (14)
∂x µB ∂x ∂y µB ∂y Vb ∂t

ka
   
qsc ∂ φ A Eq. (14) é uma EDP não-linear utilizada para com-
∇· ∇p + = . (9)
µB Vb ∂t B putar a pressão do gás, desde que sejam fornecidas
as condições inicial e de contorno apropriadas. Como
Utilizando-se a regra da cadeia e lembrando que condição inicial utiliza-se a Eq. (15)
supõe-se que as propriedades do meio e do fluido de-
pendem somente da pressão (Dyrdahl, 2014, Ertekin
et al., 2001), tem-se a Eq. (10) p(x, y, t = 0) = pini (x, y) = pini , (15)

onde a pressão inicial antes de começar a produção/inje-


ka
 
qsc ∂p ção é dada por pini . A porosidade inicial é dada por φini .
∇· ∇p + =Γ (10)
µB Vb ∂t A condição de contorno interna é utilizada no acopla-
mento poço-reservatório. Já as condições de contorno
com Γ sendo dado pela Eq. (11) externas são as de fluxo nulo nas fronteiras (Eq. (16))

cφ φ0
   
1 ∂p ∂p
 
d = = 0, (16)
Γ= +φ , (11) ∂x ∂y
B dp B x=0,Lx y=0,Ly

onde cφ é o coeficiente de compressibilidade da rocha e onde Lx e Ly são, nesta ordem, os comprimentos do


φ0 a porosidade de referência. Aqui, considera-se que reservatório nas direções x e y.
φ = [1 + cφ (p – p0 )]φ0 , onde p0 é a pressão de referência
(Ertekin et al., 2001).
A viscosidade é determinada como sendo uma função 4 Metodologia de Resolução Numérica
de p, T e γ (Lee et al., 1966), onde a densidade do gás é
dada pela razão entre a sua massa molecular e a do ar, O método das diferenças finitas foi empregado tendo-
γ = M/Mar . O fator de compressibilidade Z é calculado se em vista a conversão da Eq. (14) em um sistema de
utilizando a correlacão fornecida por Dranchuk and equações algébricas, que posteriormente será resolvido
Abou-Kassem (1975) e a massa específica do gás via a numericamente para a determinação dos valores da
equação de estado para um gás real, ρ = pM/(ZRT). pressão nos nós discretos da malha computacional (Aziz
and Settari, 1990, Ertekin et al., 2001, Abou-Kassem
Como considera-se que o escoamento é bidimensio-
et al., 2006, Chen et al., 2006). Aqui, utilizou-se uma
nal e que o tensor de permeabilidade é diagonal, tem-se
malha de blocos centrados (Ertekin et al., 2001), na qual
a Eq. (12):
um conjunto de células é sobreposto ao domínio físico.
Uma representação ilustrativa do domínio bidimensi-


kax ∂p



kay ∂p

qsc ∂p onal discretizado encontra-se na Fig. 1, considerando
+ + =Γ . (12) um sistema de coordenadas Cartesianas x e y. A solução
∂x µB ∂x ∂y µB ∂y Vb ∂t
numérica determinará os valores médios da pressão nos
centros das células, sendo que nx e ny representam os
O termo fonte qsc é utilizado para representar a vazão números totais de células nas direções x e y, respectiva-
do poço produtor, introduzida via uma condição de con- mente. Os índices inteiros i e j indicam as numerações
torno interna. Na verdade, o reservatório é tridimensi- das células nas direções de x e y, respectivamente.
onal e possui uma profundidade. Entretanto, devido à
Reescreve-se, agora, a equação governante como
sua geometria, condições de contorno e acoplamento
sendo avaliada na célula indexada (i, j) e no nível de
poço-reservatório (poço posicionado no centro do reser-
tempo n + 1, no qual as pressões devem ser calculadas
vatório), o escoamento é efetivamente bidimensional e
(Eq. (17)),
os campos de pressão e velocidade do reservatório não
variam com a profundidade.
Para o acoplamento poço-reservatório (Peaceman, 


∂p

∂p
 n+1 
∂ ∂p
n+1
1978, 1983) utiliza-se a Eq. (13) (Ertekin et al., 2001) T0x T0y
dx + dy = Γp + qsc ,
∂x ∂x ∂y ∂y
i,j ∂t i,j
(17)
sendo (Vb )i,j = (dxdy)i,j Lz e introduziu-se os coeficien-
 
qsc = –Jw p – pwf , (13)
tes (Eqs. (18) a (20))
onde Jw é o índice de produtividade e pwf a pressão no
poço. Substituindo-se a Eq. (13) na Eq. (12) tem-se a Ax kax
Eq. (14) T0x ≡ , (18)
µB
108 de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121

Figura 2: Malha unidimensional


∂p
n+1 pn+1 n+1
i,j – pi–1,j

= (23)
∂x i– 21 ,j ∆xi– 1 ,j
2

Figura 1: Malha bidimensional


sendo ∆xi±1/2,j a distância entre os nós i e i ± 1. Apro-
ximações para as derivadas em relação a y podem ser
obtidas de forma análoga.
Ay kay
T0y ≡ (19)
µB Introduz-se, agora, a transmissibilidade para a di-
reção x (Eq. (24)),
e

n+1
(Γp )i,j = (Γ)i,j (Vb )i,j , (20)

Ax kax
Tn+1
x,i± 1 ,j = , (24)
2 µB∆x i± 21 ,j

onde (Ax )i,j = dyi,j Lz e (Ay )i,j = dxi,j Lz , sendo Lz o com-


onde a área (A) e a permeabilidade aparente (ka ) nas
primento do reservatório na direção z (profundidade). interfaces são calculadas por uma média harmônica a
Considera-se a hipótese de que dx não varia em y e que partir dos valores conhecidos em (i, j) e (i ± 1, j). Para as
dy não varia em x (Ertekin et al., 2001). propriedades de fluido (µ e B), uma média ponderada
Utilizando-se como exemplo a malha computacional (com relação aos espaçamentos da malha espacial) é
da Fig. 1 e aplicando-se o método das diferenças finitas utilizada (Ertekin et al., 2001). Estratégias análogas
na aproximação das derivadas espaciais (Ertekin et al., são utilizadas para a transmissibilidade na direção y.
2001), obtém-se a Eq. (21):

n+1 " #n+1 4.1 Expansão conservativa para o termo tem-


1
   

T0x
∂p ∼
= T 0 ∂p
– T0 ∂p
, poral
x x
∂x ∂x i,j ∆xi,j ∂x i+ 1 ,j ∂x i– 1 ,j
2 2
(21)
Seguindo o sugerido por Ertekin et al. (2001), utiliza-
onde ∆x e ∆y são, respectivamente, os incrementos se uma expansão conservativa para a determinação do
espaciais da malha computacional nas direções x e y. coeficiente Γp (Eq. (25)),
Na aproximação numérica das derivadas espaciais,
para a discretização na direção x, Fig. 2, sabe-se que
i – 1/2 e i + 1/2 indicam as interfaces da célula i com-
partilhada com as suas vizinhas i – 1 e i + 1. Assim, 1 ∂φ 1
  
n+1 ∂
utilizando-se uma aproximação centrada no espaço (Γp )i,j = Vi,j + φn+1 + . (25)
Bn ∂p ∂p B i,j
(Eqs. (22) e (23)) (Aziz and Settari, 1990),

Deste modo, usando-se uma formulação totalmente


 n+1 pn+1 n+1
i+1,j – pi,j
∂p ∼ (22) implícita no tempo, obtém-se na Eq. (26) a forma final
=
∂x i+ 21 ,j ∆xi+ 1 ,j discretizada da Eq. (17),
2
de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121 109

et al., 2010). No caso particular do sistema de coorde-


nas Cartesianas, a pressão no poço vertical pode ser
n+1 n+1
obtida explicitando-se a pressão do poço na Eq. (28),
   
Tx pn+1 n+1
i+1,j – pi,j – Tx pn+1 n+1
i,j – pi–1,j
i+1/2,j i–1/2,j uma vez conhecida a pressão do reservatório ao final
n+1   n+1   de cada passo de tempo.
+ Ty pn+1 n+1
i,j+1 – pi,j – Ty pn+1 n+1
i,j – pi,j–1 No intuito de se utilizar um método iterativo apropri-
i,j+1/2 i,j–1/2
ado para a resolução de sistemas lineares, introduz-se
n+1
(Γp )i,j  n+1  uma técnica de linearização empregando o método de
= pi,j – pni,j + (qsc )n+1
i,j (26) Picard (Nick et al., 2013). Escreve-se, então, a partir
∆t da Eq. (26) tem-se a Eq. (31),
onde empregou-se uma aproximação atrasada no
tempo (Eq. (27)) (Ertekin et al., 2001), v,n+1 v,n+1
v+1,n+1 v+1,n+1
Ty p + Tx p
i,j–1/2 i,j–1 i–1/2,j i–1,j

∂p
n+1 pn+1 n
i,j – pi,j

v,n+1 v,n+1 v,n+1 v,n+1


= , (27) v+1,n+1
∂t ∆t – Ty + Tx + Tx + Ty pi,j
i,j i,j–1/2 i–1/2,j i+1/2,j i,j+1/2

v,n+1 v,n+1
onde n é o nível de tempo no qual a pressão é conhecida. + Tx p
v+1,n+1
+ Ty p
v+1,n+1
i+1/2,j i+1,j i,j+1/2 i,j+1

v,n+1
4.2 Acoplamento poço-reservatório
 
(Γp )i,j
+  pv+1,n+1 – (qsc )n+1
i,j

∆t i,j+1
Apesar da equação governante ter sido apresentada em
termos da pressão no reservatório, através do termo h i
v,n+1
n+1
(qsc )i,j pode-se estimar a pressão no poço produtor = – (Γp )i,j pni,j (31)
(Peaceman, 1978, 1983, de Souza, 2013). Neste caso, a
versão discreta da Eq. (13) é dada pela Eq. (28)
onde v refere-se ao nível iterativo no qual são calcula-
dos os coeficientes e os termos fonte da equação dis-
  n+1  cretizada, empregados na determinação das pressões
n+1 n+1 n+1
(qsc )i,j = – (Jw )i,j pi,j – pwf , (28) em (v + 1, n + 1).
i,j
Além disso, o procedimento numérico compreende
onde o índice de produtividade, Jw , é calculado pela uma iteração externa (método de Picard), onde ocorre
Eq. (29) um teste de convergência, e iterações internas para o
cálculo da pressão p (método iterativo para a resolução
do sistema de equações linearizadas: Jacobi, Gauss-
 n+1 Seidel ou SOR). Em outras palavras, a estratégia de
 2πLz ka,x ka,y 
p solução segue um procedimento de iterações aninhadas
n+1
(Jw )i,j =   (29) (Ertekin et al., 2001):
req
  
Bµ ln
rw i,j
• cálculo dos coeficientes e dos termos fontes no nível
onde rw é o raio do poço e o raio equivalente, req , é (v, n + 1);
determinado seguindo a metodologia proposta por Pe- • obtenção de pn+1 e pn+1
wf
no nível (v + 1, n + 1);
aceman (1983), adaptando-a para a sua aplicação ao • teste de convergência para a o processo de lineariza-
caso do uso da permeabilidade aparente (Eq. (30)): ção (iteração externa) e para a resolução do sistema
de equações linearizado (iteração interna).
vus s 
u ka,y 2 k a,x 2
t (∆x) + (∆y)  5 Paralelizacão via a API OpenMP
 ka,x ka,y 
= 0, 28   . (30)
 
req s s
k k Esta seção é dedicada à paralelização baseada no uso
 
a,y a,x
4
+ 4
 
da API OpenMP. Em simulações típicas, para a deter-
 
ka,x ka,y
i,j minação da pressão quando do escoamento monofásico
isotérmico em um reservatório, a solução do sistema de
equações algébricas consome a maior parte do tempo
4.3 Linearização total de execução do código numérico. Por esse motivo,
paraleliza-se o método iterativo (estacionário) utilizado
A Eq. (26) forma um sistema de equações algébri- na resolução do sistema linear.
cas não-lineares. A partir da resolução desse sistema
obtém-se os valores da pressão no reservatório (Islam
110 de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121

5.1 Métodos iterativos estacionários Algoritmo 1: Método de Jacobi


Os métodos conhecidos destinados à solução numérica Entrada: forneça A, b, a dimensão do vetor b (n),
de sistemas de equações podem ser classificados em di- x(0) , o número máximo de iterações
retos ou indiretos, estes últimos chamados também de (nmax) e a tolerância tol;
iterativos (Saad, 2003). Nos métodos diretos, a partir 1 para k = 0 : nmax faça
de uma sequência de operações algébricas, obtém-se 2 para i = 0 : (n – 1)P
faça
uma solução que não contém erros numéricos de apro- xi = a bi – nj=1,j6=i aij xj(k)

k+1 1
3
ximação. Essas metodologias costumam tirar proveito ii

da estrutura da matriz associada à forma vetorial re- 4 fim


presentativa do sistema algébrico (Eq. (32)) 5 se
max xi(k+1) – xi(k) < tol para 0 ≤ i ≤ (n – 1)
então
Ax = b, (32)
6 x = x(k+1)
onde A é conhecida como sendo a matriz dos coefici- 7 fim
entes, x o vetor contendo as incógnitas a serem de- 8 senão
terminadas e b o vetor que contém os termos cujos 9 Se k = nmax, não houve convergência.
valores são conhecidos. Contudo, conforme a dimen- 10 fim
são do sistema aumenta, os métodos diretos costumam 11 fim
apresentar perdas de desempenho.
No caso dos métodos iterativos, uma estimativa ini-
cial da solução é fornecida e ela é melhorada através de
modo a utilizar os resultados já atualizados na pró-
um procedimento iterativo, de forma que se interrompe
xima iteração, economizando no esforço computacional
a sequência de cálculos quando uma dada tolerância
e levando a uma convergência mais rápida. Por utili-
numérica é verificada e o processo é dito convergir (Er-
zar o mesmo princípio do método de Jacobi (portanto,
tekin et al., 2001). Os métodos iterativos são os mais
de mesma complexidade computacional), o método
utilizados na simulação de reservatórios. Neste traba-
de Gauss-Seidel (Algoritmo 2) também não garante a
lho, optou-se por utilizar uma classe de métodos itera-
convergência numérica para qualquer caso (Werneck,
tivos mais simples, os chamados estacionários (Perni,
2016).
2002). Ressalta-se que existem métodos mais robus-
tos, que são empregados correntemente na simulação
de reservatórios em escala de campo, como os não-
estacionários (Ertekin et al., 2001). Os leitores podem Algoritmo 2: Método de Gauss-Seidel
se reportar ao artigo de Werneck et al. (2019) para mais Entrada: forneça A, b, a dimensão do vetor b (n),
informações sobre a paralelização, usando o OpenMP x(0) , o número máximo de iterações
e um coprocessador, dos métodos não-estacionários (nmax) e a tolerância tol;
dos Gradientes Conjugados, Gradiente Biconjugado e 1 para k = 0 : nmax faça
Gradiente Biconjugado Estabilizado. para i = 0 : (n
2
 – 1)P
faça
(k+1)
– nj=i+1 aij xj(k)

1
xi = a bi – i–1
k+1
j=1 aij xj
P
3
ii
5.2 O método de Jacobi 4 fim
5 se
Criado por Carl Gustav Jakob, o método de Jacobi é
um método iterativo estacionário simples e útil para a max xi(k+1) – xi(k) < tol para 0 ≤ i ≤ (n – 1)
determinação de soluções de sistemas de equações line- então
ares. Sua implementação é descomplicada, conforme 6 x = x(k+1)
pode-se verificar no Algoritmo 1 (Werneck, 2016). 7 fim
Uma grande desvantagem, apesar da sua simplici- 8 senão
dade, é que este método não garante a convergência
9 Se k = nmax, não houve convergência.
para a solução de todos os casos e, para sistemas linea-
10 fim
res de grande dimensão, ele tende a ficar muito lento
devido à sua complexidade computacional (número de 11 fim
operações a serem executadas) ser de O(n2 ), onde n re-
presenta a ordem da matriz dos coeficientes (Porto da
Silveira, 2000).
5.4 O método de Sobre-relaxação Sucessiva
5.3 O método de Gauss-Seidel
O método de Sobre-relaxação Sucessiva (SOR), veja o
Criado pelos matemáticos Carl Friedrich Gauss e Phi- Algoritmo 3, consiste em utilizar uma média ponde-
lipp Ludwig Seidel, esse método pode ser considerado rada, entre as iterações atual e a próxima do método de
uma adaptação do método de Jacobi, otimizado de Gauss-Seidel, com o intuito de acelerar a convergência
de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121 111

(Werneck, 2016). O método se baseia na introdução do delo fork-join (Fig. 4). A execução do programa inicia
fator de relaxação ω, cujos valores estão contidos no in- com uma thread mestre e outras threads são acionadas,
tervalo 0 < ω < 2. Se ω < 1, o método é classificado como para a realização de uma dada sequência de operações,
de sub-relaxação. Se ω = 1, então recupera-se o método quando encontrada uma diretiva parallel. Essa diretiva
de Gauss Seidel (Reis da Silva et al., 2013). Neste artigo, é responsável por demarcar as regiões do código que
usa-se o método SOR com um valor padrão de ω igual são executadas por múltiplas threads (fork). Após a exe-
a 1,5. cução das tarefas designadas, a thread mestre continua
sua execução sequencial (join) até que uma nova região
paralela seja encontrada, ou até que o programa chegue
Algoritmo 3: Método de Sobre-relaxação Suces- ao final da sua execução (Werneck, 2016).
siva Para paralelizar um processo iterativo em um laço,
Entrada: forneça A, b, a dimensão do vetor b (n), basta introduzir a linha de código #pragma omp pa-
x(0) , o parâmetro de sobre-relaxação ω rallel for (OpenMP Architecture Review Board, 2018).
(0 < ω < 2), o número máximo de Dessa forma, apenas o laço for estritamente abaixo
iterações nmax e a tolerância tol; dessa linha de comando é executado em paralelo pe-
1 para k = 0 : nmax faça las threads. O número de threads empregadas pode
2 para i = 0 : (n – 1) faça ser especificado no início do código, ao ser adi-
cionada a diretiva omp_set_num_threads(int threads),
3 xik+1 = (1 – ω)xi(k) +
ou através da chamada do compilador com a opção
(k+1)
– nj=i+1 aij xj(k)
 
ω
bi – i–1
j=1 aij xj OMP_NUM_THREADS=n (Intel, 2019). Essas alterações
P P
a ii
4 fim também podem ser introduzidas ao longo do código,
5 se antes de cada diretiva #pragma omp parallel for, caso
seja necessário alterar o número de threads utilizadas
max xi(k+1) – xi(k) < tol para 0 ≤ i ≤ (n – 1) em diferentes partes do código paralelizado.
então Vale enfatizar que a divisão da execução do código
6 x = x(k+1) (usando várias threads) ocorre cada vez que a diretiva
7 fim #pragma omp parallel é encontrada (fork), e que a junção
8 senão (join) ocorre ao final da execução da região do código
9 Se k = nmax, não houve convergência. designada para ser paralelizada. Uma determinada re-
10 fim gião do código também pode ser executada em paralelo
11 fim através da diretiva #pragma omp parallel (OpenMP Ar-
chitecture Review Board, 2018). Assim sendo, toda
sequência de comandos do código dessa região é execu-
tada por um grupo de threads. A definição de regiões
paralelas poupa esforço computacional ao reduzir a
5.5 Fluxograma para um passo de tempo quantidade de chamadas do tipo fork-join (Chapman
et al., 2008).
O simulador numérico foi escrito usando a linguagem Algumas vezes, a criação de uma região do código
de programação padrão C. Além disso, o sistema GIT para a sua execução em paralelo pode ser vantajosa.
e a IDE Eclipse foram utilizados no gerenciamento de Porém, toda distribuição de trabalho entre as threads
versões e na compilação e execução do código numé- deve ser gerenciada para que o código seja executado
rico. Na Fig. 3 encontra-se o fluxograma da resolução corretamente e que seja obtida uma maior eficiência
numérica para o processo iterativo considerando um computacional. A seguir, são apresentadas de forma su-
único passo de tempo (∆t). cinta as diretivas e cláusulas utilizadas na paralelização
dos métodos iterativos estacionários.
5.6 Aplicação da API OpenMP
5.6.1 Variáveis privadas
A grande vantagem do OpenMP é a sua capacidade de
otimizar a execução de tarefas que podem ser distri- Para o funcionamento correto dos laços paralelizados é
buídas pelas threads, para acelerar a execução de algo- necessário, também, definir as variáveis que são pri-
ritmos complexos, geralmente com laços aninhados. vadas a uma determinada tarefa. Deixar de definir
No caso em questão, o método SOR (Jacobi ou Gauss- as variáveis privadas pode causar problemas de con-
Seidel) é chamado repetidas vezes para fornecer a so- sistência de memória, possibilitando que as variáveis
lução do sistema linear de equações algébricas a cada internas de uma determinada tarefa sejam acessadas
passo de tempo, até que seja atingida a convergência e alteradas por outras threads, que estão executando
para uma dada tolerância (tol). O esforço computacio- outras tarefas (Chapman et al., 2008). Esse problema
nal despendido cresce com o aumento do tempo físico pode ser resolvido através da adição da cláusula pri-
de produção do reservatório e do número de células vate(var1,var2,...) (OpenMP Architecture Review Board,
da malha computacional, bem como com a redução do 2018), onde var1,var2,... são as variáveis privadas da-
valor da tolerância. quela tarefa.
A paralelização no OpenMP funciona através do mo-
112 de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121

Cálculo de
Utilização de pressões em n + 1, v
propriedades

Atualização de
p (Método de Cálculo de Transmissibilidades e Γp
Picard; iteração coeficientes
externa)

Solução para p pn+1,v+1 (SOR paralelizado; iteração interna)

Convergiu?
não

sim
Obtenção
de pn+1 ;
cálculo
de pn+1
wf

Fim do passo
de tempo

Figura 3: Fluxograma de solução para um passo de tempo

5.6.2 Variáveis compartilhadas importante destacar que uma outra opção seria a utili-
Além das variáveis privadas, em certas situações, algu- zação da diretiva #pragma omp critical (OpenMP Archi-
mas variáveis podem ser acessadas ao mesmo tempo tecture Review Board, 2018), que faz com que a região
por mais de uma thread. Nesse caso, uma determinada seja executada somente pela thread mestre. Entretanto,
thread pode sobrescrever o valor de uma variável que essa opção acarreta um maior esforço computacional
está sendo utilizada, ao mesmo tempo, em uma outra (Chapman et al., 2008) e não é imprescindível.
tarefa por uma outra thread. Isso é feito por intermé-
dio da cláusula default(shared) (OpenMP Architecture 5.6.4 Laços aninhados
Review Board, 2018) na abertura da região paralelizada
Laços aninhados podem ser executados de modo inde-
para definir que, por padrão, todas as variáveis conti-
pendente pelas threads se as operações aninhadas fo-
das naquela região serão compartilhadas pelas threads
rem independentes entre si. A introdução das diretivas
(OpenMP Architecture Review Board, 2018).
#pragma omp parallel for acima dos laços fará com que
apenas as iterações do laço mais externo sejam tratadas
5.6.3 Partes sequenciais de execução única em paralelo. Para garantir que a paralelização atuará
Dentro de uma região do código, paralelizada, ainda também nos laços internos é necessário incluir a cláu-
podem existir trechos que devem ser executados se- sula collapse(n), onde n especifica o número de laços for
quencialmente. Por padrão, as threads são livres para que são colapsados em uma sequência iterativa maior
executar as tarefas de uma dada região. Portanto, uma que é paralelizada (Intel, 2019). Tal cláusula não pode
maneira de se evitar que uma dada sequência de co- ser aplicada na paralelização dos métodos iterativos
mandos seja executada por mais de uma thread, numa estacionários aqui considerados, uma vez que os laços
região paralelizada, é através da diretiva #pragma omp internos não são independentes. Portanto, optou-se
single (OpenMP Architecture Review Board, 2018). É por paralelizar apenas os laços externos.
de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121 113

Algoritmo 4: Método de Jacobi paralelizado


Entrada: forneça A, b, a dimensão do vetor b (n),
x(0) , o número máximo de iterações
(nmax) e a tolerância tol;
1 k=0
2 #pragma omp parallel
3 enquanto k < nmax faça
4 #pragma omp for private(i,j,n,aux)
5 para i = 0 : (n – 1) faça
6 para j = 1 : n faça
7 se j 6= i então
8 aux = aij xj(k)
9 fim
10 xik+1 = a1 (bi – aux)
ii
11 fim
12 fim
13 #pragma omp for private(i,n)
reduction(+:erro)
14 para i = 0 : (n – 1) faça
Figura 4: Modelo fork-join
15 erro = erro + xi(k+1) – xi(k)
16 fim
5.6.5 Somatórios 17 se max(erro) < tol para 0 ≤ i ≤ (n – 1) então
18 x = x(k+1)
Uma atenção especial também deve ser dada ao caso
19 k=k+1
das variáveis privadas, de uma região paralelizada, que
são utilizadas em operações acumulativas (somatórios) 20 fim
ao longo das sequências iterativas do código. Ao se 21 senão
adicionar a diretiva reduction(operador:lista) (OpenMP 22 Se k = nmax, não houve convergência.
Architecture Review Board, 2018) pode-se garantir que 23 fim
o valor dos somatórios não seja sobrescrito por conta 24 fim
do trabalho independente das threads.

6.1 Conjunto padrão de dados


5.7 Versões paralelizadas dos métodos estacio-
nários Baseado em dados coletados na literatura, tais como
nos trabalhos de Jiang and Younis (2015) e Li et al.
O objetivo principal deste trabalho é a paralelização (2016), escolheu-se um conjunto de referência para
dos métodos iterativos estacionários de Jacobi, Gauss- os dados de entrada, os quais estão disponíveis na Ta-
Seidel e SOR introduzidos na Seção 5.1, onde os seus bela 1. A referida tabela também traz as informações
respectivos algoritmos foram fornecidos. Agora, nos de referência para as simulações incorporando o efeito
Algoritmos 4, 5 e 6 são apresentadas as novas versões de escorregamento, usando o modelo de Klinkenberg
paralelizadas dos algoritmos empregando as diretivas e a correção dependente do número de Knudsen. O
e cláusulas da API OpenMP. método padrão para as simulações é o SOR, à exceção
dos resultados destinados ao estudo comparativo do de-
sempenho dos três métodos estacionários considerados
neste trabalho.
6 Resultados Numéricos
Também, para o conjunto referência, a produção de
gás é viabilizada por meio de um poço vertical de com-
Nesta seção são apresentados os resultados numéri- primento Lwf , centralizado no plano xy, e mantendo-se
cos, obtidos a partir da implementação paralelizada uma vazão de produção constante, Qsc . A pressão no
dos métodos iterativos estacionários, correspondentes poço é calculada através do modelo de acoplamento
às simulações do escoamento monofásico isotérmico poço-reservatório já apresentado na Seção 4.2.
em um reservatório portador de gás natural. Eles fo-
ram determinados através da variação de parâmetros Utiliza-se um passo de tempo variável no início da
numéricos e físicos. Também são fornecidos, para al- simulação (∆tini ) e uma razão de crescimento do passo
guns casos, os tempos de execução computacional das de tempo (δ∆t ) é estipulada. Quando o seu valor má-
versões seriais e paralelizadas. ximo (∆tmax ) é alcançado, ele é mantido constante até o
término da simulação (tmax ). Esse modelo de simulação
é utilizado na indústria do petróleo quando se deseja de-
114 de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121

Algoritmo 5: Método de Gauss-Seidel paraleli- Algoritmo 6: Método de Sobre-relaxação Suces-


zado siva paralelizado
Entrada: forneça A, b, a dimensão do vetor b (n), Entrada: forneça A, b, a dimensão do vetor b (n),
x(0) , o número máximo de iterações x(0) , o parâmetro de sobre-relaxação ω
(nmax) e a tolerância tol; (0 < ω < 2), o número máximo de
1 k = 0 iterações nmax e a tolerância tol;
2 #pragma omp parallel 1 k=0
3 enquanto k < nmax faça 2 #pragma omp parallel
4 #pragma omp for private(i,j,n,aux,aux1) 3 enquanto k < nmax faça
5 para i = 0 : (n – 1) faça 4 #pragma omp for private(i,j,n,aux,aux1)
6 para j = 1 : (i – 1) faça 5 para i = 0 : (n – 1) faça
7 aux = aij xj(k+1) 6 para j = 1 : (i – 1) faça
8 fim 7 aux = aij xj(k+1)
9 para j = i + 1 : n faça 8 fim
10 aux1 = aij xj(k) 9 para j = i + 1 : n faça
11 fim 10 aux1 = aij xj(k)
1
12 xik+1 = aii (bi – aux – aux1) 11 fim
13 fim 12 xik+1 = (1 – ω)xi(k) + aω (bi – aux – aux1)
ii
14 #pragma omp for private(i,n) 13 fim
reduction(+:erro) 14 #pragma omp for private(i,n)
15 para i = 0 : (n – 1) faça reduction(+:erro)
16 erro = erro + xi(k+1) – xi(k) 15 para i = 0 : (n – 1) faça
17 fim 16 erro = erro + xi(k+1) – xi(k)
18 se max(erro) < tol para 0 ≤ i ≤ (n – 1) então 17 fim
19 x = x(k+1) 18 se max(erro) < tol para 0 ≤ i ≤ (n – 1) então
20 k=k+1 19 x = x(k+1)
21 fim 20 k=k+1
22 senão 21 fim
23 Se k = nmax, não houve convergência. 22 senão
24 fim 23 Se k = nmax, não houve convergência.
25 fim 24 fim
25 fim

terminar, com maior nível de detalhamento, a pressão


no poço nos instantes iniciais de produção (Werneck, Para esta subseção específica, são apresentados os
2016), onde os gradientes de pressão são mais elevados valores do tempo de execução médio (t̄exe ), do seu des-
(ou ocorrem mudanças na vazão no poço). vio padrão (σ) e do speedup (S) para cada simulação,
O computador usado nas simulações da Seção 6.3.1 em função do número de threads (Nthread ) e da malha
foi um Dell PowerEdge T620 com sistema operacional empregada. Um total de cinco (5) execuções foi consi-
OpenSuse Leap 15.1, apresentando as seguintes princi- derado na obtenção dos valores do tempo médio e do
pais características: desvio padrão.
• Máquina de arquitetura 64 bits,
• 2 Processadores Intel Xeon E5-2620 com 2 GHz de 6.2 Refinamento de malha
frequência básica e 6 núcleos (12 threads),
• Memória RAM de 16 GB. A Tabela 2 mostra o número de células das diferentes
malhas computacionais (nx e ny ) empregadas no estudo
Entretanto, em função do maior número de células
das Malhas 6, 7 e 8 (Tabela 4), as simulações da Se- do refinamento de malha. O número de células na
ção 6.3.2 exigiram uma máquina com uma capacidade direção z (nz ) é mantido constante e igual 1 para todas
maior de memória. Portanto, os resultados foram ob- as simulações. Utiliza-se os valores padrão da Tabela 1
tidos em um servidor PowerEdge R730 com sistema e considera-se que o escoamento é do tipo não-Darcy.
operacional CentOS 7.3.1611: Os resultados foram obtidos com as versões serial e
paralelizada do código numérico. Destaca-se o fato de
• Máquina de arquitetura 64 bits, que a versão serial do simulador já havia sido testada
• 2 Processadores Intel Xeon E5-2620 v.3 com 2,4 GHz por de Souza (2013), que comparou os seus resultados
de frequência básica e 6 núcleos (12 threads), com os obtidos com o simulador comercial IMEX (CMG,
• Memória RAM de 48 GB. 2009) para escoamentos governados pela lei de Darcy
de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121 115

Tabela 1: Parâmetros para o caso de 5,800


referência
Parâmetro Valor Unidade 5,600
bK (Eq.(2)) 250,0 psi

pwf (psi)
cφ 1,0×10–6 psi–1 5,400
kx e ky 5,0×10–6 Darcy
Lx e Ly 6.400 ft 5,200
Lz 40,0 ft
Lwf 40,0 ft 5,000
nx e ny 1.281 – 12 threads
pini e p0 6.000 psi Serial
4,800
psc 14,65 psi
10−3 10−2 10−1 100 101 102 103
Qsc -2,0×104 scf/dia
tmax 300 dia t (dias)
tol 1×10–7 psi
T 609,67 R Figura 5: Pressão no poço em função do tempo
Tsc 519,67 R
R 10,73 ft3 psi/R lbm-mol
γ 0,6 –
δ∆t 1,5 –
800 1,4 1,5 1,6
∆tini 0,001 dia

Tempo de Execução (s)


∆tmax 20,0 dia 600
φini e φ0 0,12 –
τ 1,41 –
400

Tabela 2:
Refinamento de malha 200
Malha nx ny
1 81 81 0
2 161 161
3 321 321 0 2 4 6 8 10 12 14 16
4 641 641 Número de threads
5 1.281 1.281
Figura 6: Tempos de execução para ω=1,4, 1,5 e 1,6

clássica. O estudo do refinamento de malha mostrou


que os resultados, para a pressão no poço pwf , ficaram 6.3.1 Variação de parâmetros
cada vez mais próximos um dos outros à medida que a Todas as simulações foram realizadas, inicialmente,
malha era refinada, indicando a convergência numérica. com uma malha composta de 1.281 × 1.281 células (nx =
Em função da constatação da convergência numérica, ny = 1.281), correspondente à Malha 5 da Tabela 2.
a Malha 5 foi considerada ser suficientemente refinada Apesar de não ter implicação física, o fator de rela-
para fornecer resultados acurados e foi adotada como xação ω possui um efeito direto no desempenho com-
padrão para as simulações da Seção 6.3.1. putacional, já que o número de iterações no método
SOR, para se alcançar a convergência, dependente da
Para a Malha 5, na Fig. 5 são apresentados os valores
escolha desse fator. O efeito da escolha de ω sobre o de-
da pressão no poço calculados com as versões serial e
sempenho computacional pode ser observado na Fig. 6
paralelizada. Os resultados mostram que os mesmos
(o número de threads nulo, nos gráficos, corresponde
valores são encontrados com as duas versões. Como
à execução em série), onde o tempo de simulação é
comentário adicional do ponto de vista físico, vale res-
menor quando ω = 1, 5. Reitera-se que há maneiras de
saltar que como a permeabilidade considerada é baixa,
se escolher um valor otimizado para ω (Ertekin et al.,
nessas simulações não surgiram os efeitos de fronteira,
2001), contudo, essa questão está fora do escopo deste
os quais provocariam mudanças de inclinação na reta
trabalho.
presente no gráfico de pressão para tempos finais de
produção (de Souza, 2013). A variação da permeabilidade absoluta, da densidade
do fluido e da vazão também acarretam um esforço
computacional diferenciado para cada caso. Avalia-se
6.3 Desempenho computacional o desempenho em termos do tempo de execução, ao
se utilizar a computação paralela, e os respectivos re-
sultados são apresentados nas Figs. 7 a 9. Também
Analisa-se, agora, os resultados das simulações sob o fez-se um teste considerando a variação dos mode-
ponto de vista do desempenho computacional. los de escoamento com e sem os efeitos oriundos do
escorregamento do gás da Tabela 3 (Fig. 10).
116 de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121

1,200 5×10−6 D 10×10−6 D 20×10−6 D 800 -10×103 scf/dia -20×103 scf/dia -30×103 scf/dia
Tempo de Execução (s)

Tempo de Execução (s)


1,000
600
800

600 400
400
200
200

0 0
0 2 4 6 8 10 12 14 16 0 2 4 6 8 10 12 14 16
Número de threads Número de threads

Figura 7: Tempos de execução para kx =ky =5×10–6 D, Figura 9: Tempos de execução para Qsc =-10×103
10×10–6 D e 20×10–6 D scf/dia, -20×103 scf/dia e -30×103 scf/dia

os valores do coeficiente Γp , de µ e de B.
800 0,7 0,65 0,6
A Tabela 3 mostra os três modelos de cálculo da
Tempo de Execução (s)

permeabilidade aparente utilizados nas simulações. O


600 Modelo 1 considera que a permeabilidade aparente é
simplesmente igual à permeabilidade absoluta. Já os
Modelos 2 e 3 contemplam o fenômeno do escorre-
400
gamento do gás, uma vez que os valores da permea-
bilidade aparente variam em função da pressão e do
200 número de Knudsen (Chung et al., 2015), respectiva-
mente.
0
Tabela 3: Modelos para a permeabilidade
0 2 4 6 8 10 12 14 16 aparente
Número de threads Modelo Referência ka
1 Ertekin et al. (2001) k
Figura 8: Tempos de execução para γ=0,7, 0,65 e 0,6 2 Li et al. (2016) f(Kn )k
3 Klinkenberg (1941) (1 + b/p) k

Dos testes realizados, nesta etapa, é possível obser-


var que para um aumento na permeabilidade absoluta
No caso das variações do modelo de escoamento, in-
corresponde um aumento no tempo de execução. Como
cluindo ou não o efeito do escorregamento, o uso da
a permeabilidade influencia diretamente nos valores
permeabilidade aparente variável aumenta a não linea-
das transmissibilidades, ela introduz uma modificação
ridade e os maiores tempos de execução correspondem
nos elementos da matriz dos coeficientes do sistema
aos Modelos 2 e 3.
de equações algébricas (Eq. (32)).
No caso da densidade, o valor intermediário, 0,65, É interessante notar que para os testes variando
levou aos maiores tempos de execução. Lembra-se que a vazão e a densidade há a ocorrência de tempos de
a densidade influencia no cálculo dos valores da visco- execução maiores para o uso de 4 threads do que para
sidade e do fator volume de formação do gás, sendo que duas, o que certamente pode ser explicado em função
a viscosidade afeta os valores das transmissibilidades, das características intrínsecas ao modelo fork-join e às
enquanto que B também altera os valores da transmis- cláusulas de barreira (Werneck et al., 2019).
sibilidade e do coeficiente Γp . Assim sendo, acredita-se
que o comportamento encontrado para a variação da 6.3.2 Variação do número de células
densidade é devido às não linearidades associadas ao Em seguida, trata-se das análises de desempenho utili-
problema. zando o speedup como parâmetro da medida do desem-
A influência das não linearidades parece ter ocorrido penho computacional, ou seja, a relação entre os tem-
também no caso dos testes para o aumento da vazão. pos de simulação (médio) serial e em paralelo. Tendo
No caso serial, a simulação com o valor de referência esse parâmetro em vista, é possível estudar o desem-
(intermediário), Qsc = –20 × 103 scf/dia, teve o maior penho em função da variação do número de threads
tempo de execução. Ressalta-se que diferentes valores utilizadas nas execuções para uma dada malha, assim
da vazão conduzem a diferentes quedas de pressão, mu- como o desempenho em função da variação do número
dando o nível de pressão e alterando, por conseguinte, de células da malha computacional, para um dado nú-
de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121 117

Tabela 5: Tempo de execução médio (t̄exe ), desvio


800 Modelo 1 Modelo 2 Modelo 3 padrão (σ) e speedup (S) para as Malhas 1 e 2
Malha 1 Malha 2
Tempo de Execução (s)

Nthread
600 t̄exe (s) σ S t̄exe (s) σ S
Serial 0,16 0,001 - 0,65 0,002 -
2 0,15 0,004 1,07 0,53 0,007 1,24
400
4 0,12 0,001 1,38 0,43 0,016 1,50
6 0,11 0,002 1,45 0,39 0,015 1,66
200 8 0,11 0,001 1,47 0,37 0,007 1,76
10 0,11 0,002 1,43 0,39 0,019 1,68
12 0,13 0,009 1,26 0,37 0,010 1,74
0 14 0,16 0,016 1,03 0,40 0,018 1,65
16 0,19 0,014 0,86 0,39 0,005 1,67
0 2 4 6 8 10 12 14 16
Número de threads
Tabela 6: Tempo de execução médio (t̄exe ), desvio
Figura 10: Tempos de execução empregando os padrão (σ) e speedup (S) para as Malhas 3 e 4
Modelos 1, 2 e 3 Malha 3 Malha 4
Nthread
t̄exe (s) σ S t̄exe (s) σ S

mero de threads. Nesse caso, foram empregadas 8 (oito) Serial 2,61 0,004 - 10,59 0,021 -
diferentes malhas ao invés das cinco utilizadas no es- 2 1,97 0,045 1,32 8,47 0,014 1,25
4 1,74 0,063 1,50 7,29 0,078 1,45
tudo do refinamento de malha e da Seção 6.3.1, de modo
6 1,42 0,050 1,84 6,31 0,169 1,68
a se trabalhar com um número bem superior de células.
8 1,33 0,029 1,97 5,75 0,053 1,84
Os valores de nx e ny podem ser vistos na Tabela 4.
10 1,28 0,019 2,04 5,60 0,382 1,89
12 1,34 0,083 1,95 5,47 0,354 1,94
Tabela 4: Malhas para 14 1,34 0,027 1,95 5,79 0,047 1,83
os testes de speedup 16 1,31 0,017 2,00 5,70 0,141 1,86

Malha nx ny
1 81 81 que o número de threads é aumentado, nota-se que um
2 161 161 valor máximo é atingido para um número de threads
3 321 321 compreendido entre 8 e 12 (máximo de 7,43 com 12
4 641 641
threads e a Malha 8 para o SOR). Tal fato é conhecido e
5 1.281 1.281
relatado na literatura (de Salles et al., 2018, Werneck
6 2.561 2.561
et al., 2019) e se deve, entre outros fatores, ao mo-
7 5.121 5.121
8 10.241 10.241
delo fork-join, cláusulas de barreira e ao possível desba-
lanceamento da distribuição de carga entre as threads.
Portanto, para que melhores resultados sejam almeja-
Baseando-se nos resultados apresentados anterior- dos, uma paralelização utilizando uma programação
mente, para o caso padrão, são fornecidas nas Tabelas 5 mais avançada com as diretivas e cláusulas do OpenMP
a 8 os valores do tempo de execução médio, do desvio seria necessária, levando em conta que o simulador
padrão e do speedup para as oito malhas distintas. Ne- numérico já existia na sua versão serial. Entretanto,
las, o desempenho computacional pode ser analisado este não era o objetivo primordial deste trabalho e, em
através das variações do speedup em função da malha termos práticos, os ganhos obtidos já são suficientes
e do número de threads empregados quando da execu- para que vários problemas de interesse da simulação de
reservatórios sejam abordados e forneçam resultados
ção do código. É possível observar que com o aumento
próximos dos reais.
do número de células aumenta também o número de
cálculos a serem realizados, pois aumenta-se a ordem A última tabela (Tabela 9) corresponde a um estudo
do sistema de equações a ser resolvido, com um conse- comparativo entre o desempenho do código numérico
quente acréscimo no ganho do desempenho computaci- utilizando os três métodos estacionários de Jacobi, de
onal quando utilizada a computação paralela. Deve-se Gauss-Seidel e SOR e empregando a Malha 7. Nela,
levar em conta que nem todas as partes código numé- verifica-se que os tempos de execução correspondem,
rico do simulador foram paralelizadas, de forma que na ordem decrescente, aos métodos de Jacobi, Gauss-
ainda existem partes do código onde há um aumento Seidel e SOR. Após a paralelização desses respectivos
do esforço computacional, resultante do aumento do métodos, essa ordem não é alterada, mas os maiores
número de nós da malha, e que não são influenciadas valores do speedup são obtidos para os métodos de Ja-
pela paralelização. Tal fato também ajuda a explicar cobi (8,35 com 12 threads) e SOR (6,16 com 12 threads).
a não linearidade do comportamento da variação do Em contrapartida, o máximo speedup atingido para o
speedup. método Gauss-Seidel foi de 3,13 com 12 threads. Lem-
brando que esses valores correspondem aos obtidos
Apesar do crescimento inicial do speedup à medida com a Malha 7 e que valores superiores foram determi-
118 de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121

Tabela 7: Tempo de execução médio (t̄exe ), desvio


8
padrão (σ) e speedup (S) para as Malhas 5 e 6
Malha 5 Malha 6
Nthread
t̄exe (s) σ S t̄exe (s) σ S
6
Serial 59,39 0,10 - 623,70 0,94 -

Speedup
2 40,73 0,22 1,46 360,22 11,42 1,73
4 30,65 1,16 1,94 235,37 10,05 2,65
4
6 28,94 0,78 2,05 187,16 5,88 3,32
8 30,57 2,47 1,94 169,86 7,02 3,67
10 28,41 1,78 2,09 166,01 11,26 3,76
12 29,40 1,32 2,02 170,81 7,17 3,65 2
14 29,01 1,74 2,05 179,51 10,16 3,47
16 29,14 1,44 2,04 184,40 8,63 3,38
104 105 106 107 108
Número de incógnitas
4.5
Figura 12: Speedup por número de incógnitas
4 empregando 12 threads
3.5
Speedup

3
2.2
2.5

2 2
Speedup

1.5
1.8
4 5 6 7 8
10 10 10 10 10
Número de incógnitas 1.6

Figura 11: Speedup por número de incógnitas


empregando 6 threads 1.4
2 4 6 8 10 12 14 16
Número de threads
nados para o método SOR com a Malha 8 (7,43 com 12
threads), conforme os valores da Tabela 8. Figura 13: Speedup por número de threads para a
Malha 5
Ainda com respeito aos resultados da Tabela 9, deve-
se chamar a atenção para o fato do comportamento
superlinear encontrado com 2 threads para o método de
threads existe mais uma queda trazendo o speedup para
Jacobi. De acordo com Chapman et al. (2008), a acelera-
valores próximos aos das primeiras malhas avaliadas.
ção superlinear é um ganho de desempenho que leva a
Já com 12 threads o maior valor registrado ocorreu para a
um valor do speedup que é maior que o número threads
malha com o maior número de nós. Acredita-se que as
utilizadas. Segundo os autores, isso pode ser atribuído,
oscilações, nesses gráficos, se devem (conforme já men-
principalmente, ao fato de que uma maior quantidade
cionado) ao balanço nos processos fork-join, de forma
de memória cache está disponível ao se usar mais de um
que para certos problemas a relação custo-benefício
processador. Além disso, os valores de speedup aqui cal-
em utilizar o OpenMP depende de um bom ajuste entre
culados consideram as médias dos tempos de execução
as exigências dos problemas e os recursos mobilizados
considerando-se um total de cinco simulações.
para a solução.
As Figs. 11 e 12 mostram a variação do speedup, res- Por outro lado, é possível visualizar nas Figs. 13 a 16
pectivamente, ao se utilizar 6 e 12 threads e diferen- o aumento do speedup em função da variação do nú-
tes números de células (número de incógnitas do sis- mero de threads para os quatro casos correspondentes
tema algébrico). Da análise conjunta das duas figuras, aos maiores números de células, ou seja, às Malhas 5,
percebe-se que os valores mais altos do speedup foram 6, 7 e 8. Da análise dos resultados verifica-se que o
atingidos quando usou-se 12 threads, o que faz sen- ganho de desempenho não é linear e que de acordo com
tido pelo maior número de recursos disponíveis para o aumento do número de threads, o speedup tendeu a
a execução do código em paralelo, considerando que uma quase estagnação (Malha 6) ou até mesmo a uma
os speedups máximos foram obtidos para o número de diminuição (Malha 5). As questões levantadas no pa-
threads variando entre 8 e 12. rágrafo precedente também podem ser aplicadas aqui,
Nos dois gráficos das Figs. 11 e 12 é também possível como uma explicação para o comportamento reportado.
se observar uma região de crescimento do speedup, se-
guida por uma queda (ou estagnação), sendo que para 6
de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121 119

Tabela 8: Tempo de execução médio (t̄exe ), desvio padrão (σ) e


speedup (S) para as Malhas 7 e 8
Malha 7 Malha 8
Nthread
t̄exe (s) σ S t̄exe (s) σ S
Serial 7.408,13 0,74 - 95.099,59 2.196,80 -
2 4.072,47 77,38 1,82 50.281,25 357,00 1,89
4 2.272,83 38,41 3,26 29.317,06 1.263,57 3,24
6 1.756,19 79,73 4,22 23.420,46 541,01 4,06
8 1.449,92 49,88 5,11 19.512,46 599,03 4,87
10 1.265,58 33,03 5,85 15.073,90 1.050,65 6,31
12 1.202,71 33,92 6,16 12.800,44 616,98 7,43
14 1.375,61 31,50 5,39 15.637,53 1.319,81 6,08
16 1.275,43 44,00 5,81 14.302,25 461,96 6,65

Tabela 9: Tempo de execução médio (t̄exe ), desvio padrão (σ) e speedup (S) para os
diferentes métodos iterativos e a Malha 7
Nthread Jacobi Gauss-Seidel SOR
t̄exe (s) σ S t̄exe (s) σ S t̄exe (s) σ S
Serial 159.314,42 184,34 - 14.617,58 15,77 - 7.408,13 0,74 -
2 79.286,33 281,57 2,01 9.338,71 10,08 1,57 4.072,47 77,38 1,82
4 42.427,51 150,67 3,75 6.429,67 6,94 2,27 2.272,83 38,41 3,26
6 30.654,25 108,86 5,20 5.743,35 6,20 2,25 1.756,19 79,73 4,22
8 24.514,34 87,06 6,50 5.100,06 5,50 2,87 1.449,92 49,88 5,11
10 21.241,84 75,44 7,50 4.845,89 5,23 3,02 1.265,57 33,03 5,85
12 19.085,77 67,78 8,35 4.665,35 5,03 3,13 1.202,71 33,92 6,16
14 26.643,09 94,62 5,98 4.923,38 5,31 2,97 1.375,61 31,50 5,39
16 22.932,09 81,44 6,95 4.297,16 5,32 2,97 1.275,43 44,00 5,81

4
6
3.5
5
Speedup

Speedup

3
4
2.5
3
2
2
1.5
2 4 6 8 10 12 14 16 2 4 6 8 10 12 14 16
Número de threads Número de threads
Figura 14: Speedup por número de threads para a Figura 15: Speedup por número de threads para a
Malha 6 Malha 7

7 Conclusões de transformar um problema de complexidade O(n2 )


em O(n). No entanto, foi possível se obter ganhos sig-
Na busca da redução do tempo de execução de um si- nificativos com valores do speedup superior a 8 para o
mulador numérico, nem sempre o uso de um hardware método de Jacobi e 6 para os métodos de Gauss-Seidel
mais potente é a melhor opção, seja por questões econô- e SOR com a Malha 7.
micas ou de desempenho. Neste trabalho, foi possível No geral, verificou-se o crescimento do speedup em
explorar a alternativa da paralelização via a API OpenMP função do aumento do número de incógnitas do sistema
para resolver de forma mais eficiente um problema fí- de equações algébricas a ser resolvido (como consequên-
sico complexo, a simulação do escoamento monofásico cia do maior número de nós da malha computacional)
em um reservatório de gás natural. Vale ressaltar que e, também, com o aumento do número de threads em-
o uso da computação paralela não altera, necessari- pregadas. Entretanto, como é sabido, o desempenho
amente, a complexidade do problema. Na prática, o computacional está sujeito à ocorrência de oscilações
ganho de desempenho não é linear ou equivalente ao e/ou estagnações que dependem das características in-
120 de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121

8 Bestok, A. e Karniadakis, G. E. (1999). A model for


flows in channels, pipes, ans ducts at micro and nano
7 scales, Microscale Thermophysical Engineering 3: 43–
77. https://doi.org/10.1080/108939599199864.
6
Carpen-Amarie, A., Hunold, S. and Träff, J. (2017).
Speedup

5 On expected and observed communication perfor-


mance with mpi derived datatypes, Parallel Compu-
4 ting 69: 98–117. https://doi.org/10.1145/2966884.
2966905.
3
Chapman, B., Jost, G. and van der Pas, R. (2008).
2
Using OpenMP - Portable Shared Memory Parallel Pro-
gramming, The MIT Press, London, England.
2 4 6 8 10 12 14 16
Número de threads Chen, Z., Huan, G. and Ma, Y. (2006). Computational
Methods for Multiphase Flows in Porous Media, Society
Figura 16: Speedup por número de threads para a of Industrial and Applied Mathematics, Philadelphia,
Malha 8 USA.
Chung, C. L., Freitas, M. M., Souza, G. and Souto, H.
trínsecas ao processo de fork-join e ao balanceamento P. A. (2015). Numerical reservoir simulation of shale
da distribuição de tarefas entre as threads. Maiores gas in the slip flow regime, Ibero-Latin Congress on
ganhos poderiam, em teoria, ser obtidos mediante a Computational Methods in Engineering, 36, Rio de Ja-
reescritura do código computacional e o uso de uma neiro.
programação mais avançada com o OpenMP. Entre-
CMG (2009). IMEX, Advanced Oil/Gas Reservoir Simulator,
tanto, esse não era o objetivo principal deste estudo,
Computational Modeling Group.
que focou no uso direto das diretivas do OpenMP no
programa de computador pré-existente. Dandekar, A. Y. (2013). Petroleum Reservoir Rock and
Além das questões inerentes ao OpenMP, verificou- Fluid Properties, CRC Press, USA.
se que, conforme o esperado, a mudança dos parâ-
metros físicos pode afetar diretamente na variação do de Salles, R., Werneck, L., de Souza, G. and Ama-
desempenho computacional, devido à influência dos ral Souto, H. (2018). Aplicação de células inativas,
mesmos na determinação dos valores dos elementos da Compressed Sparse Row e OpenMP na simulação nu-
matriz dos coeficientes associada ao sistema de equa- mérica paralelizada de reservatórios de petróleo, Re-
ções algébricas que deve ser resolvido. Finalmente, vista Brasileira de Computação Aplicada 10(2): 64–79.
cabe ressaltar que a solução paralelizada foi implemen- https://doi.org/10.5335/rbca.v10i2.8055.
tada de modo a preservar o comportamento fisicamente de Souza, G. (2013). Acoplamento Poço-reservatório na Si-
correto, obtidos com a versão serial, dos fenômenos mulação Numérica de Reservatórios de Gás, PhD thesis,
estudados. Universidade Estadual do Norte Fluminense, Macaé,
Brasil.
Agradecimentos Dietrich, R., Schmitt, F., Grund, A. and Stolle, J. (2017).
Critical-blame analysis for openmp 4.0 offloading
O presente trabalho foi realizado com apoio da Coorde- on intel xeon phi, Journal of Systems and Software
nação de Aperfeiçoamento de Pessoal de Nível Superior 125: 381–388. https://doi.org/10.1016/j.jss.2015.
(CAPES), Código de Financiamento 001, e da FAPERJ. 12.050.
Dranchuk, P. and Abou-Kassem, J. (1975). Calculation
Referências of Z factors for natural gases using equations of state,
Journal of Canadian Petroleum Technology 14(3): 34–36.
Abou-Kassem, J. H., Farouq Ali, S. M. and Islam, M. R. https://doi.org/10.2118/75-03-03.
(2006). Petroleum Reservoir Simulation, A Basic Appro-
ach, Gulf Publishing Company, Houston, USA. Dyrdahl, J. (2014). Thermal flow in fractured porous me-
dia and operator splitting, Master’s thesis, Norwegian
Anderson, R. O. (1984). Fundamentals of the petroleum University of Science and Technology, Trondheim,
industry, University of Oklahoma Press, Oklahoma, Norway.
United States of America. Ertekin, T., Abou-Kassem, J. H. and King, G. R. (2001).
Basic Applied Reservoir Simulation, SPE Textbook Se-
ARB (2011). OpenMP application program interface, ver- ries 7, Society of Petroleum Engineers, Richardson.
sion 3.1 edn, Architecture Review Board.
Florence, F. A., Rushing, J. A., Newsham, K. E. and Bla-
Aziz, M. and Settari, A. (1990). Petroleum Reservoir singame, T. A. (2007). Improved permeability pre-
Simulation, Elsevier Applied Science, New York, USA. diction relations for low permeability sands, Society
de Carvalho et al. | Revista Brasileira de Computação Aplicada (2020), v.12, n.2, pp.103–121 121

of Petroleum Engineers Rock Mountain Oil & Gas Techno- Perni, P. H. R. (2002). Um Estudo sobre Métodos Iterati-
logy Symposium, Denver, Colorado, USA. vos na Solução de Sistemas de Equações Provenientes do
Método dos Elementos de Contorno, PhD thesis, Univer-
Halsey, T. C. (2016). Computational sciences in the ups- sidade Federal do Rio de Janeiro.
tream oil and gas industry, Philos Trans A Math Phys
Eng Sci. 374: 20150429. https://doi.org/10.1098/ Porto da Silveira, J. F. (2000). O problema do cai-
rsta.2015.0429. xeiro viajante. Disponível em http://www.mat.ufrgs.
br/~portosil/caixeiro.html.
Intel (2019). Developer guide for intel math kernel
library for windows. Redondo, C. (2017). A fast IMPES multiphase flow sol-
ver in porous media for reservoir simulation, PhD thesis,
Islam, M. R., Moussavizadegan, S. H., Mustafiz, S. and Universidad Politécnica de Madrid Escuela Técnica
Abou-Kassem, J. H. (2010). Advanced Petroleum Reser- Superior de Ingenieros Aeronáuticos.
voir Simulation, first edn, Scrivener Publishing LLC.,
Reis da Silva, A., da Silva Menezes, M. and de Castro Al-
Salem, USA.
ves, E. V. (2013). Estudo do método de sobre relaxação
Jiang, J. and Younis, R. M. (2015). A multimechanistic sucessiva na resolução de sistemas de equações line-
multicontinuum model for simulating shale gas re- ares. Anais do Congresso de Matemática Aplicada e
servoir with complex fractured system, Fuel 161: 333– Computacional.
344. https://doi.org/10.1016/j.fuel.2015.08.069. Saad, Y. (2003). Iterative Methods for Sparse Linear Sys-
Klinkenberg, L. J. (1941). The permeability of porous tems, 2 edn, Society of Industrial and Applied Mathe-
media to liquids and gases, Drilling and Production matics, USA.
Practice, American Petroleum Inst. p. 200–213. Werneck, L. F. (2016). Implementação paralelizada de
métodos de resolução de sistemas algébricos na simula-
Lee, A., Gonzalez, M. and Eakin, B. (1966). The vis-
ção de reservatórios de gás, Dissertação de mestrado,
cosity of natural gases, Journal of Petroleum Techno-
Universidade do Estado do Rio de Janeiro, Nova Fri-
logy, Transactions of AIME 18(8): 997–1000. https:
burgo.
//doi.org/10.2118/1340-PA.
Werneck, L. F., Freitas, M. M., de Souza, G., Jatobá, L.
Li, D., Zhang, L., Wang, J. Y., Lu, D. and Du, J. (2016). F. C. and Amaral Souto, H. P. (2019). An OpenMP
Effect of adsorption and permeability correction on parallel implementation using a coprocessor for nu-
transient pressures in organic rich gas reservoirs: merical simulation of oil reservoirs, Computational &
Vertical and hydraulically fractured horizontal wells, Applied Mathematics 38: 33. https://doi.org/10.1007/
Journal of Natural Gas Science and Engineering 31: 214– s40314-019-0788-6.
225. https://doi.org/10.1016/j.jngse.2016.02.033.
Yakubov, S., Cankurt, B., Abdel-Maksoud, M. and Rung,
Nick, H. M., Raoof, A., Centler, F., Thullner, M. and T. (2013). Hybrid MPI/OpenMP parallelization of an
Regnier, P. (2013). Reactive dispersive contaminant Euler–Lagrange approach to cavitation modelling,
transport in coastal aquifers: Numerical simulation Computers and Fluids 80: 365–371. https://doi.org/
of a reactive Henry problem, Journal of Contaminant 10.1016/j.compfluid.2012.01.020.
Hydrology 145: 90–104. https://doi.org/10.1016/j.
jconhyd.2012.12.005.

NVIDIA (2014). NVIDIA CUDA C: Programming Guide, ver-


sion 6.5 edn, NVIDIA Corporation.

NVIDIA (2018). OpenACC Getting Started Guide, NVIDIA


Corporation, Hillsboro, United States of America.

OpenMP Architecture Review Board (2018). OpenMP


Application Programming Interface. Disponí-
vel em https://www.openmp.org/wp-content/uploads/
OpenMP-API-Specification-5.0.pdf.

Peaceman, D. W. (1978). Interpretation of well-block


pressures in numerical reservoir simulation, Society
of Petroleum Engineers Journal 18(3): 183–194. https:
//doi.org/10.2118/6893-PA.

Peaceman, D. W. (1983). Interpretation of well-block


pressures in numerical reservoir simulation with
nonsquare grid blocks and anisotropic permeability,
Society of Petroleum Engineers Journal 23(3): 531–543.
https://doi.org/10.2118/10528-PA.

Você também pode gostar