Leonardo Tarazona Muzí de Carvalho, Leonardo Figueira Werneck, Grazione de Souza, Helio Pedro Amaral Souto
Leonardo Tarazona Muzí de Carvalho, Leonardo Figueira Werneck, Grazione de Souza, Helio Pedro Amaral Souto
DOI: 10.5335/rbca.v12i2.10158
Vol. 12, No 2, pp. 103–121
Homepage: seer.upf.br/index.php/rbca/index
ARTIGO ORIGINAL
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
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
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)
cφ φ0
1 ∂p ∂p
d = = 0, (16)
Γ= +φ , (11) ∂x ∂y
B dp B x=0,Lx y=0,Ly
∂p
n+1 pn+1 n+1
i,j – pi–1,j
∼
= (23)
∂x i– 21 ,j ∆xi– 1 ,j
2
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
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
(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)
Convergiu?
não
sim
Obtenção
de pn+1 ;
cálculo
de pn+1
wf
Fim do 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
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
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
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)
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)
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
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
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
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.